Name: series-workflowbtrcb Phase: Failed StartedAt: 2026-07-24 06:33:59 +0000 UTC FinishedAt: 2026-07-24 07:04:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbtrcb[0] Phase: Succeeded StartedAt: 2026-07-24 06:33:59 +0000 UTC FinishedAt: 2026-07-24 07:04:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbtrcb[0].run-triage Phase: Succeeded StartedAt: 2026-07-24 06:33:59 +0000 UTC FinishedAt: 2026-07-24 07:04:11 +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+CgkJCTx0ZD4yMDI2LzA3LzI0IDA3OjAwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGlzIHByaW1hcmlseSBhIHJlZmFjdG9yaW5nIHRvIGhpZGUgdGhlIGBzd2FwcGluZXNzYCBmaWVsZCBpbiBgc3RydWN0IG1lbV9jZ3JvdXBgIHVuZGVyIGBDT05GSUdfTUVNQ0dfVjFgIHRvIHNhdmUgbWVtb3J5IHdoZW4gY2dyb3VwIHYxIGlzIGRpc2FibGVkLiBGb3IgdGhlIGRlZmF1bHQgYENPTkZJR19NRU1DRz15YCBjb25maWd1cmF0aW9uLCB0aGVyZSBpcyBubyBmdW5jdGlvbmFsIGNoYW5nZSBpbiBiZWhhdmlvci4gVGhlIG9ubHkgZnVuY3Rpb25hbCBjaGFuZ2UgaXMgYSBtaW5vciBmaXggZm9yIGBDT05GSUdfTUVNQ0c9bmAgd2hlcmUgcHJvYWN0aXZlIG5vZGUgcmVjbGFpbSB2aWEgc3lzZnMgbm93IHJlc3BlY3RzIHRoZSB1c2VyLXByb3ZpZGVkIGBzd2FwcGluZXNzYCBwYXJhbWV0ZXIgaW5zdGVhZCBvZiBpZ25vcmluZyBpdC4gVGhpcyBpcyBhIHZlcnkgbWlub3IgZWRnZSBjYXNlIGluIGEgbm9uLWRlZmF1bHQgY29uZmlnIGFuZCBkb2VzIG5vdCB3YXJyYW50IGZvY3VzZWQgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMDc6MDA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA2MjM0MTI1MDgyYmE1NjRiOGVjZDVkNGRhYjg5ODIyOTdlNjU3ZmI2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdWwgMjQgMDc6MDA6MjAgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmggYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxuaW5kZXggOTU3MjYwNjc3Njc4MTUuLmU3YTc5NGRmYjQwZTQ5IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXG5AQCAtMjM5LDggJiM0MzsyMzksNiBAQCBzdHJ1Y3QgbWVtX2Nncm91cCB7XG4gXHQgKi9cbiBcdGJvb2wgb29tX2dyb3VwO1xuIFxuLVx0aW50IHN3YXBwaW5lc3M7XG4tXG4gXHQvKiBtZW1vcnkuZXZlbnRzIGFuZCBtZW1vcnkuZXZlbnRzLmxvY2FsICovXG4gXHRzdHJ1Y3QgY2dyb3VwX2ZpbGUgZXZlbnRzX2ZpbGU7XG4gXHRzdHJ1Y3QgY2dyb3VwX2ZpbGUgZXZlbnRzX2xvY2FsX2ZpbGU7XG5AQCAtMzE4LDYgJiM0MzszMTYsOCBAQCBzdHJ1Y3QgbWVtX2Nncm91cCB7XG4gXHQvKiBMaXN0IG9mIGV2ZW50cyB3aGljaCB1c2Vyc3BhY2Ugd2FudCB0byByZWNlaXZlICovXG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIGV2ZW50X2xpc3Q7XG4gXHRzcGlubG9ja190IGV2ZW50X2xpc3RfbG9jaztcbiYjNDM7XG4mIzQzO1x0aW50IHN3YXBwaW5lc3M7XG4gI2VuZGlmIC8qIENPTkZJR19NRU1DR19WMSAqL1xuIFxuIFx0c3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKm5vZGVpbmZvW107XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zd2FwLmggYi9pbmNsdWRlL2xpbnV4L3N3YXAuaFxuaW5kZXggMDU0NGIyZWM0YzU2NWIuLjQ1ZjMwMWQ3M2UyYWVlIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9zd2FwLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvc3dhcC5oXG5AQCAtMzA5LDcgJiM0MzszMDksNiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbHJ1X2NhY2hlX2Rpc2FibGVkKHZvaWQpXG4gfVxuIFxuIGV4dGVybiB1bnNpZ25lZCBsb25nIHNocmlua19hbGxfbWVtb3J5KHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpO1xuLWV4dGVybiBpbnQgdm1fc3dhcHBpbmVzcztcbiBsb25nIHJlbW92ZV9tYXBwaW5nKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbiBcbiAjaWYgZGVmaW5lZChDT05GSUdfU1lTRlMpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19OVU1BKVxuQEAgLTQ3MywyNSAmIzQzOzQ3Miw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IGFkZF9zd2FwX2V4dGVudChzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2lzLFxuIH1cbiAjZW5kaWYgLyogQ09ORklHX1NXQVAgKi9cbiAjaWZkZWYgQ09ORklHX01FTUNHXG4tc3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF9zd2FwcGluZXNzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbi17XG4tXHQvKiBDZ3JvdXAyIGRvZXNuJiMzOTt0IGhhdmUgcGVyLWNncm91cCBzd2FwcGluZXNzICovXG4tXHRpZiAoY2dyb3VwX3N1YnN5c19vbl9kZmwobWVtb3J5X2NncnBfc3Vic3lzKSlcbi1cdFx0cmV0dXJuIFJFQURfT05DRSh2bV9zd2FwcGluZXNzKTtcbi1cbi1cdC8qIHJvb3QgPyAqL1xuLVx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSB8fCBtZW1fY2dyb3VwX2lzX3Jvb3QobWVtY2cpKVxuLVx0XHRyZXR1cm4gUkVBRF9PTkNFKHZtX3N3YXBwaW5lc3MpO1xuLVxuLVx0cmV0dXJuIFJFQURfT05DRShtZW1jZy1cdTAwM2Vzd2FwcGluZXNzKTtcbi19XG4tXG4gdm9pZCBscnVfcmVwYXJlbnRfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LCBpbnQgbmlkKTtcbi0jZWxzZVxuLXN0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfc3dhcHBpbmVzcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4te1xuLVx0cmV0dXJuIFJFQURfT05DRSh2bV9zd2FwcGluZXNzKTtcbi19XG4gI2VuZGlmXG4gXG4gI2lmIGRlZmluZWQoQ09ORklHX1NXQVApIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19NRU1DRykgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX0JMS19DR1JPVVApXG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jXG5pbmRleCA4MzE5YWQ4YzVjMjNhYy4uNjg2NGI3NjQ1NmZiM2UgMTAwNjQ0XG4tLS0gYS9tbS9tZW1jb250cm9sLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbWNvbnRyb2wuY1xuQEAgLTYzLDYgJiM0Mzs2Myw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQvaXNvbGF0aW9uLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rbWVtbGVhay5oXHUwMDNlXG4gI2luY2x1ZGUgXCYjMzQ7aW50ZXJuYWwuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtzd2FwLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtzd2FwX3RhYmxlLmhcJiMzNDtcbiAjaW5jbHVkZSBcdTAwM2NuZXQvc29jay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2lwLmhcdTAwM2VcbkBAIC00MTc2LDExICYjNDM7NDE3NywxMCBAQCBtZW1fY2dyb3VwX2Nzc19hbGxvYyhzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqcGFyZW50X2NzcylcbiAjZW5kaWZcbiBcdHBhZ2VfY291bnRlcl9zZXRfaGlnaChcdTAwMjZtZW1jZy1cdTAwM2Vzd2FwLCBQQUdFX0NPVU5URVJfTUFYKTtcbiBcdGlmIChwYXJlbnQpIHtcbi1cdFx0V1JJVEVfT05DRShtZW1jZy1cdTAwM2Vzd2FwcGluZXNzLCBtZW1fY2dyb3VwX3N3YXBwaW5lc3MocGFyZW50KSk7XG4tXG4gXHRcdHBhZ2VfY291bnRlcl9pbml0KFx1MDAyNm1lbWNnLVx1MDAzZW1lbW9yeSwgXHUwMDI2cGFyZW50LVx1MDAzZW1lbW9yeSwgbWVtY2dfb25fZGZsKTtcbiBcdFx0cGFnZV9jb3VudGVyX2luaXQoXHUwMDI2bWVtY2ctXHUwMDNlc3dhcCwgXHUwMDI2cGFyZW50LVx1MDAzZXN3YXAsIGZhbHNlKTtcbiAjaWZkZWYgQ09ORklHX01FTUNHX1YxXG4mIzQzO1x0XHRXUklURV9PTkNFKG1lbWNnLVx1MDAzZXN3YXBwaW5lc3MsIG1lbV9jZ3JvdXBfc3dhcHBpbmVzcyhwYXJlbnQpKTtcbiBcdFx0bWVtY2ctXHUwMDNlbWVtb3J5LnRyYWNrX2ZhaWxjbnQgPSAhbWVtY2dfb25fZGZsO1xuIFx0XHRXUklURV9PTkNFKG1lbWNnLVx1MDAzZW9vbV9raWxsX2Rpc2FibGUsIFJFQURfT05DRShwYXJlbnQtXHUwMDNlb29tX2tpbGxfZGlzYWJsZSkpO1xuIFx0XHRwYWdlX2NvdW50ZXJfaW5pdChcdTAwMjZtZW1jZy1cdTAwM2VrbWVtLCBcdTAwMjZwYXJlbnQtXHUwMDNla21lbSwgZmFsc2UpO1xuZGlmZiAtLWdpdCBhL21tL3N3YXAuaCBiL21tL3N3YXAuaFxuaW5kZXggYWJkMjY1ODhhYmQyMmMuLmIwNDg4ZjdiNjhiNWQzIDEwMDY0NFxuLS0tIGEvbW0vc3dhcC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9zd2FwLmhcbkBAIC00LDYgJiM0Mzs0LDcgQEBcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9hdG9taWMuaFx1MDAzZSAvKiBmb3IgYXRvbWljX2xvbmdfdCAqL1xuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21tLmhcdTAwM2UgLyogZm9yIFBBR0VfU0hJRlQgKi9cbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbWVtY29udHJvbC5oXHUwMDNlIC8qIGZvciBtZW1fY2dyb3VwX3N3YXBwaW5lc3MoKSAqL1xuIFxuIHN0cnVjdCBtZW1wb2xpY3k7XG4gc3RydWN0IHN3YXBfaW9jYjtcbkBAIC05OSw2ICYjNDM7MTAwLDE4IEBAIHN0cnVjdCBzd2FwX29wcyB7XG4gXHR2b2lkICgqc3VibWl0X3JlYWQpKHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4KTtcbiB9O1xuIFxuJiM0MztleHRlcm4gaW50IHZtX3N3YXBwaW5lc3M7XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX3N3YXBwaW5lc3Moc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuJiM0Mzt7XG4mIzQzOyNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcbiYjNDM7XHRpZiAoIWNncm91cF9zdWJzeXNfb25fZGZsKG1lbW9yeV9jZ3JwX3N1YnN5cykgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICFtZW1fY2dyb3VwX2Rpc2FibGVkKCkgXHUwMDI2XHUwMDI2ICFtZW1fY2dyb3VwX2lzX3Jvb3QobWVtY2cpKVxuJiM0MztcdFx0cmV0dXJuIG1lbWNnLVx1MDAzZXN3YXBwaW5lc3M7XG4mIzQzOyNlbmRpZlxuJiM0MztcdHJldHVybiBSRUFEX09OQ0Uodm1fc3dhcHBpbmVzcyk7XG4mIzQzO31cbiYjNDM7XG4gI2lmZGVmIENPTkZJR19TV0FQXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc3dhcG9wcy5oXHUwMDNlIC8qIGZvciBzd3Bfb2Zmc2V0ICovXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYmxrX3R5cGVzLmhcdTAwM2UgLyogZm9yIGJpb19lbmRfaW9fdCAqL1xuZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmNcbmluZGV4IDA2ZTEwM2Y5NzgxZTVkLi4xNTUxNjdiMzYxNGI2ZCAxMDA2NDRcbi0tLSBhL21tL3Ztc2Nhbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS92bXNjYW4uY1xuQEAgLTE5OSw2ICYjNDM7MTk5LDEzIEBAIHN0cnVjdCBzY2FuX2NvbnRyb2wge1xuICAqL1xuIGludCB2bV9zd2FwcGluZXNzID0gNjA7XG4gXG4mIzQzO3N0YXRpYyBpbnQgc2Nfc3dhcHBpbmVzcyhzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYywgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKHNjLVx1MDAzZXByb2FjdGl2ZSBcdTAwMjZcdTAwMjYgc2MtXHUwMDNlcHJvYWN0aXZlX3N3YXBwaW5lc3MpXG4mIzQzO1x0XHRyZXR1cm4gKnNjLVx1MDAzZXByb2FjdGl2ZV9zd2FwcGluZXNzO1xuJiM0MztcdHJldHVybiBtZW1fY2dyb3VwX3N3YXBwaW5lc3MobWVtY2cpO1xuJiM0Mzt9XG4mIzQzO1xuICNpZmRlZiBDT05GSUdfTUVNQ0dcbiBcbiAvKiBSZXR1cm5zIHRydWUgZm9yIHJlY2xhaW0gdGhyb3VnaCBjZ3JvdXAgbGltaXRzIG9yIGNncm91cCBpbnRlcmZhY2VzLiAqL1xuQEAgLTIzOSwxMyAmIzQzOzI0Niw2IEBAIHN0YXRpYyBib29sIHdyaXRlYmFja190aHJvdHRsaW5nX3NhbmUoc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4gI2VuZGlmXG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuLVxuLXN0YXRpYyBpbnQgc2Nfc3dhcHBpbmVzcyhzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYywgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuLXtcbi1cdGlmIChzYy1cdTAwM2Vwcm9hY3RpdmUgXHUwMDI2XHUwMDI2IHNjLVx1MDAzZXByb2FjdGl2ZV9zd2FwcGluZXNzKVxuLVx0XHRyZXR1cm4gKnNjLVx1MDAzZXByb2FjdGl2ZV9zd2FwcGluZXNzO1xuLVx0cmV0dXJuIG1lbV9jZ3JvdXBfc3dhcHBpbmVzcyhtZW1jZyk7XG4tfVxuICNlbHNlXG4gc3RhdGljIGJvb2wgY2dyb3VwX3JlY2xhaW0oc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4ge1xuQEAgLTI2MSwxMSAmIzQzOzI2MSw2IEBAIHN0YXRpYyBib29sIHdyaXRlYmFja190aHJvdHRsaW5nX3NhbmUoc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4ge1xuIFx0cmV0dXJuIHRydWU7XG4gfVxuLVxuLXN0YXRpYyBpbnQgc2Nfc3dhcHBpbmVzcyhzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYywgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuLXtcbi1cdHJldHVybiBSRUFEX09OQ0Uodm1fc3dhcHBpbmVzcyk7XG4tfVxuICNlbmRpZlxuIFxuIHN0YXRpYyB2b2lkIHNldF90YXNrX3JlY2xhaW1fc3RhdGUoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDA3OjAwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjNtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpcyBwcmltYXJpbHkgYSByZWZhY3RvcmluZyB0byBoaWRlIHRoZSBgc3dhcHBpbmVzc2AgZmllbGQgaW4gYHN0cnVjdCBtZW1fY2dyb3VwYCB1bmRlciBgQ09ORklHX01FTUNHX1YxYCB0byBzYXZlIG1lbW9yeSB3aGVuIGNncm91cCB2MSBpcyBkaXNhYmxlZC4gRm9yIHRoZSBkZWZhdWx0IGBDT05GSUdfTUVNQ0c9eWAgY29uZmlndXJhdGlvbiwgdGhlcmUgaXMgbm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYmVoYXZpb3IuIFRoZSBvbmx5IGZ1bmN0aW9uYWwgY2hhbmdlIGlzIGEgbWlub3IgZml4IGZvciBgQ09ORklHX01FTUNHPW5gIHdoZXJlIHByb2FjdGl2ZSBub2RlIHJlY2xhaW0gdmlhIHN5c2ZzIG5vdyByZXNwZWN0cyB0aGUgdXNlci1wcm92aWRlZCBgc3dhcHBpbmVzc2AgcGFyYW1ldGVyIGluc3RlYWQgb2YgaWdub3JpbmcgaXQuIFRoaXMgaXMgYSB2ZXJ5IG1pbm9yIGVkZ2UgY2FzZSBpbiBhIG5vbi1kZWZhdWx0IGNvbmZpZyBhbmQgZG9lcyBub3Qgd2FycmFudCBmb2N1c2VkIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA2MjM0MTI1MDgyYmE1NjRiOGVjZDVkNGRhYjg5ODIyOTdlNjU3ZmI2CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBKdWwgMjQgMDc6MDA6MjAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaCBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oCmluZGV4IDk1NzI2MDY3NzY3ODE1Li5lN2E3OTRkZmI0MGU0OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgKQEAgLTIzOSw4ICYjNDM7MjM5LDYgQEAgc3RydWN0IG1lbV9jZ3JvdXAgewogCSAqLwogCWJvb2wgb29tX2dyb3VwOwogCi0JaW50IHN3YXBwaW5lc3M7Ci0KIAkvKiBtZW1vcnkuZXZlbnRzIGFuZCBtZW1vcnkuZXZlbnRzLmxvY2FsICovCiAJc3RydWN0IGNncm91cF9maWxlIGV2ZW50c19maWxlOwogCXN0cnVjdCBjZ3JvdXBfZmlsZSBldmVudHNfbG9jYWxfZmlsZTsKQEAgLTMxOCw2ICYjNDM7MzE2LDggQEAgc3RydWN0IG1lbV9jZ3JvdXAgewogCS8qIExpc3Qgb2YgZXZlbnRzIHdoaWNoIHVzZXJzcGFjZSB3YW50IHRvIHJlY2VpdmUgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkIGV2ZW50X2xpc3Q7CiAJc3BpbmxvY2tfdCBldmVudF9saXN0X2xvY2s7CiYjNDM7CiYjNDM7CWludCBzd2FwcGluZXNzOwogI2VuZGlmIC8qIENPTkZJR19NRU1DR19WMSAqLwogCiAJc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKm5vZGVpbmZvW107CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N3YXAuaCBiL2luY2x1ZGUvbGludXgvc3dhcC5oCmluZGV4IDA1NDRiMmVjNGM1NjViLi40NWYzMDFkNzNlMmFlZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zd2FwLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9zd2FwLmgKQEAgLTMwOSw3ICYjNDM7MzA5LDYgQEAgc3RhdGljIGlubGluZSBib29sIGxydV9jYWNoZV9kaXNhYmxlZCh2b2lkKQogfQogCiBleHRlcm4gdW5zaWduZWQgbG9uZyBzaHJpbmtfYWxsX21lbW9yeSh1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTsKLWV4dGVybiBpbnQgdm1fc3dhcHBpbmVzczsKIGxvbmcgcmVtb3ZlX21hcHBpbmcoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8pOwogCiAjaWYgZGVmaW5lZChDT05GSUdfU1lTRlMpICZhbXA7JmFtcDsgZGVmaW5lZChDT05GSUdfTlVNQSkKQEAgLTQ3MywyNSAmIzQzOzQ3Miw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IGFkZF9zd2FwX2V4dGVudChzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2lzLAogfQogI2VuZGlmIC8qIENPTkZJR19TV0FQICovCiAjaWZkZWYgQ09ORklHX01FTUNHCi1zdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX3N3YXBwaW5lc3Moc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQotewotCS8qIENncm91cDIgZG9lc24mIzM5O3QgaGF2ZSBwZXItY2dyb3VwIHN3YXBwaW5lc3MgKi8KLQlpZiAoY2dyb3VwX3N1YnN5c19vbl9kZmwobWVtb3J5X2NncnBfc3Vic3lzKSkKLQkJcmV0dXJuIFJFQURfT05DRSh2bV9zd2FwcGluZXNzKTsKLQotCS8qIHJvb3QgPyAqLwotCWlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkgfHwgbWVtX2Nncm91cF9pc19yb290KG1lbWNnKSkKLQkJcmV0dXJuIFJFQURfT05DRSh2bV9zd2FwcGluZXNzKTsKLQotCXJldHVybiBSRUFEX09OQ0UobWVtY2ctJmd0O3N3YXBwaW5lc3MpOwotfQotCiB2b2lkIGxydV9yZXBhcmVudF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsIGludCBuaWQpOwotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfc3dhcHBpbmVzcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpCi17Ci0JcmV0dXJuIFJFQURfT05DRSh2bV9zd2FwcGluZXNzKTsKLX0KICNlbmRpZgogCiAjaWYgZGVmaW5lZChDT05GSUdfU1dBUCkgJmFtcDsmYW1wOyBkZWZpbmVkKENPTkZJR19NRU1DRykgJmFtcDsmYW1wOyBkZWZpbmVkKENPTkZJR19CTEtfQ0dST1VQKQpkaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jCmluZGV4IDgzMTlhZDhjNWMyM2FjLi42ODY0Yjc2NDU2ZmIzZSAxMDA2NDQKLS0tIGEvbW0vbWVtY29udHJvbC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbWNvbnRyb2wuYwpAQCAtNjMsNiAmIzQzOzYzLDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9zY2hlZC9pc29sYXRpb24uaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9rbWVtbGVhay5oJmd0OwogI2luY2x1ZGUgJiMzNDtpbnRlcm5hbC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O3N3YXAuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3N3YXBfdGFibGUuaCYjMzQ7CiAjaW5jbHVkZSAmbHQ7bmV0L3NvY2suaCZndDsKICNpbmNsdWRlICZsdDtuZXQvaXAuaCZndDsKQEAgLTQxNzYsMTEgJiM0Mzs0MTc3LDEwIEBAIG1lbV9jZ3JvdXBfY3NzX2FsbG9jKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpwYXJlbnRfY3NzKQogI2VuZGlmCiAJcGFnZV9jb3VudGVyX3NldF9oaWdoKCZhbXA7bWVtY2ctJmd0O3N3YXAsIFBBR0VfQ09VTlRFUl9NQVgpOwogCWlmIChwYXJlbnQpIHsKLQkJV1JJVEVfT05DRShtZW1jZy0mZ3Q7c3dhcHBpbmVzcywgbWVtX2Nncm91cF9zd2FwcGluZXNzKHBhcmVudCkpOwotCiAJCXBhZ2VfY291bnRlcl9pbml0KCZhbXA7bWVtY2ctJmd0O21lbW9yeSwgJmFtcDtwYXJlbnQtJmd0O21lbW9yeSwgbWVtY2dfb25fZGZsKTsKIAkJcGFnZV9jb3VudGVyX2luaXQoJmFtcDttZW1jZy0mZ3Q7c3dhcCwgJmFtcDtwYXJlbnQtJmd0O3N3YXAsIGZhbHNlKTsKICNpZmRlZiBDT05GSUdfTUVNQ0dfVjEKJiM0MzsJCVdSSVRFX09OQ0UobWVtY2ctJmd0O3N3YXBwaW5lc3MsIG1lbV9jZ3JvdXBfc3dhcHBpbmVzcyhwYXJlbnQpKTsKIAkJbWVtY2ctJmd0O21lbW9yeS50cmFja19mYWlsY250ID0gIW1lbWNnX29uX2RmbDsKIAkJV1JJVEVfT05DRShtZW1jZy0mZ3Q7b29tX2tpbGxfZGlzYWJsZSwgUkVBRF9PTkNFKHBhcmVudC0mZ3Q7b29tX2tpbGxfZGlzYWJsZSkpOwogCQlwYWdlX2NvdW50ZXJfaW5pdCgmYW1wO21lbWNnLSZndDtrbWVtLCAmYW1wO3BhcmVudC0mZ3Q7a21lbSwgZmFsc2UpOwpkaWZmIC0tZ2l0IGEvbW0vc3dhcC5oIGIvbW0vc3dhcC5oCmluZGV4IGFiZDI2NTg4YWJkMjJjLi5iMDQ4OGY3YjY4YjVkMyAxMDA2NDQKLS0tIGEvbW0vc3dhcC5oCiYjNDM7JiM0MzsmIzQzOyBiL21tL3N3YXAuaApAQCAtNCw2ICYjNDM7NCw3IEBACiAKICNpbmNsdWRlICZsdDtsaW51eC9hdG9taWMuaCZndDsgLyogZm9yIGF0b21pY19sb25nX3QgKi8KICNpbmNsdWRlICZsdDtsaW51eC9tbS5oJmd0OyAvKiBmb3IgUEFHRV9TSElGVCAqLwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9tZW1jb250cm9sLmgmZ3Q7IC8qIGZvciBtZW1fY2dyb3VwX3N3YXBwaW5lc3MoKSAqLwogCiBzdHJ1Y3QgbWVtcG9saWN5Owogc3RydWN0IHN3YXBfaW9jYjsKQEAgLTk5LDYgJiM0MzsxMDAsMTggQEAgc3RydWN0IHN3YXBfb3BzIHsKIAl2b2lkICgqc3VibWl0X3JlYWQpKHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4KTsKIH07CiAKJiM0MztleHRlcm4gaW50IHZtX3N3YXBwaW5lc3M7CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF9zd2FwcGluZXNzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykKJiM0Mzt7CiYjNDM7I2lmZGVmIENPTkZJR19NRU1DR19WMQomIzQzOwlpZiAoIWNncm91cF9zdWJzeXNfb25fZGZsKG1lbW9yeV9jZ3JwX3N1YnN5cykgJmFtcDsmYW1wOwomIzQzOwkgICAgIW1lbV9jZ3JvdXBfZGlzYWJsZWQoKSAmYW1wOyZhbXA7ICFtZW1fY2dyb3VwX2lzX3Jvb3QobWVtY2cpKQomIzQzOwkJcmV0dXJuIG1lbWNnLSZndDtzd2FwcGluZXNzOwomIzQzOyNlbmRpZgomIzQzOwlyZXR1cm4gUkVBRF9PTkNFKHZtX3N3YXBwaW5lc3MpOwomIzQzO30KJiM0MzsKICNpZmRlZiBDT05GSUdfU1dBUAogI2luY2x1ZGUgJmx0O2xpbnV4L3N3YXBvcHMuaCZndDsgLyogZm9yIHN3cF9vZmZzZXQgKi8KICNpbmNsdWRlICZsdDtsaW51eC9ibGtfdHlwZXMuaCZndDsgLyogZm9yIGJpb19lbmRfaW9fdCAqLwpkaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uYwppbmRleCAwNmUxMDNmOTc4MWU1ZC4uMTU1MTY3YjM2MTRiNmQgMTAwNjQ0Ci0tLSBhL21tL3Ztc2Nhbi5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3Ztc2Nhbi5jCkBAIC0xOTksNiAmIzQzOzE5OSwxMyBAQCBzdHJ1Y3Qgc2Nhbl9jb250cm9sIHsKICAqLwogaW50IHZtX3N3YXBwaW5lc3MgPSA2MDsKIAomIzQzO3N0YXRpYyBpbnQgc2Nfc3dhcHBpbmVzcyhzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYywgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQomIzQzO3sKJiM0MzsJaWYgKHNjLSZndDtwcm9hY3RpdmUgJmFtcDsmYW1wOyBzYy0mZ3Q7cHJvYWN0aXZlX3N3YXBwaW5lc3MpCiYjNDM7CQlyZXR1cm4gKnNjLSZndDtwcm9hY3RpdmVfc3dhcHBpbmVzczsKJiM0MzsJcmV0dXJuIG1lbV9jZ3JvdXBfc3dhcHBpbmVzcyhtZW1jZyk7CiYjNDM7fQomIzQzOwogI2lmZGVmIENPTkZJR19NRU1DRwogCiAvKiBSZXR1cm5zIHRydWUgZm9yIHJlY2xhaW0gdGhyb3VnaCBjZ3JvdXAgbGltaXRzIG9yIGNncm91cCBpbnRlcmZhY2VzLiAqLwpAQCAtMjM5LDEzICYjNDM7MjQ2LDYgQEAgc3RhdGljIGJvb2wgd3JpdGViYWNrX3Rocm90dGxpbmdfc2FuZShzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYykKICNlbmRpZgogCXJldHVybiBmYWxzZTsKIH0KLQotc3RhdGljIGludCBzY19zd2FwcGluZXNzKHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpCi17Ci0JaWYgKHNjLSZndDtwcm9hY3RpdmUgJmFtcDsmYW1wOyBzYy0mZ3Q7cHJvYWN0aXZlX3N3YXBwaW5lc3MpCi0JCXJldHVybiAqc2MtJmd0O3Byb2FjdGl2ZV9zd2FwcGluZXNzOwotCXJldHVybiBtZW1fY2dyb3VwX3N3YXBwaW5lc3MobWVtY2cpOwotfQogI2Vsc2UKIHN0YXRpYyBib29sIGNncm91cF9yZWNsYWltKHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKQogewpAQCAtMjYxLDExICYjNDM7MjYxLDYgQEAgc3RhdGljIGJvb2wgd3JpdGViYWNrX3Rocm90dGxpbmdfc2FuZShzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYykKIHsKIAlyZXR1cm4gdHJ1ZTsKIH0KLQotc3RhdGljIGludCBzY19zd2FwcGluZXNzKHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpCi17Ci0JcmV0dXJuIFJFQURfT05DRSh2bV9zd2FwcGluZXNzKTsKLX0KICNlbmRpZgogCiBzdGF0aWMgdm9pZCBzZXRfdGFza19yZWNsYWltX3N0YXRlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMDc6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzcyOAoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDEwMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaCBTZXJpZXMgZm9yIFBvdGVudGlhbCBGdXp6aW5nIFRhcmdldHMqKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBuZWNlc3NpdGF0ZSBmdXp6aW5nLiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCBpdCYjMzk7cyBwcmltYXJpbHkgcmVmYWN0b3JpbmcsIGJ1dCBJIG5lZWQgdG8gYmUgc3VyZS4gTGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KClRoZSBwYXRjaCBlc3NlbnRpYWxseToKCjEuICBNb3ZlcyB0aGUgYHN3YXBwaW5lc3NgIGZpZWxkIGluIGBzdHJ1Y3QgbWVtX2Nncm91cGAgdW5kZXIgYCNpZmRlZiBDT05GSUdfTUVNQ0dfVjFgLgoyLiAgTW92ZXMgYG1lbV9jZ3JvdXBfc3dhcHBpbmVzcygpYCBmcm9tIGBpbmNsdWRlL2xpbnV4L3N3YXAuaGAgdG8gYG1tL3N3YXAuaGAuCjMuICBDaGFuZ2VzIHRoZSBgbWVtX2Nncm91cF9zd2FwcGluZXNzKClgIGltcGxlbWVudGF0aW9uIHRvIGNvbmRpdGlvbmFsbHkgdXNlIGBtZW1jZy0mZ3Q7c3dhcHBpbmVzc2AgYmFzZWQgb24gYCNpZmRlZiBDT05GSUdfTUVNQ0dfVjFgLgo0LiAgVXBkYXRlcyBgbWVtX2Nncm91cF9jc3NfYWxsb2MoKWAgdG8gb25seSBpbml0aWFsaXplIGBtZW1jZy0mZ3Q7c3dhcHBpbmVzc2AgaWYgYENPTkZJR19NRU1DR19WMWAgaXMgZGVmaW5lZC4KNS4gIE1vdmVzIGBzY19zd2FwcGluZXNzKClgIGluIGBtbS92bXNjYW4uY2Agb3V0IG9mIGAjaWZkZWYgQ09ORklHX01FTUNHYC4KCkFscmlnaHQsIEkgc2VlIGEgY2xlYXIgc2hpZnQgaGVyZSB0b3dhcmRzIGlzb2xhdGluZyB0aGUgYHN3YXBwaW5lc3NgIGxvZ2ljIGZvciBtZW1vcnkgY2dyb3VwcyB2MS4gVGhlIG1haW4gY29uY2VybiBpcyB3aGV0aGVyIHRoaXMgaW50cm9kdWNlcyBhIHN1YnRsZSBjaGFuZ2UgaW4gYmVoYXZpb3IuCgpMZXQmIzM5O3MgZGlzc2VjdCBgbWVtX2Nncm91cF9zd2FwcGluZXNzKClgIGNhcmVmdWxseS4gVGhlIG9sZCBpbXBsZW1lbnRhdGlvbiBoYWQgYSBjaGVjayBmb3IgY2dyb3VwIHYyIGFuZCByb290IGNncm91cCB0byByZXR1cm4gZ2xvYmFsIGB2bV9zd2FwcGluZXNzYC4gVGhlIG5ldyB2ZXJzaW9uIGNvbmRpdGlvbmFsbHkgdXNlcyBgbWVtY2ctJmd0O3N3YXBwaW5lc3NgIG9ubHkgdW5kZXIgYENPTkZJR19NRU1DR19WMWAuIElmIGBDT05GSUdfTUVNQ0dfVjFgIGlzIGRpc2FibGVkLCB0aGUgbmV3IHZlcnNpb24gZGlyZWN0bHkgcmV0dXJucyBgdm1fc3dhcHBpbmVzc2AuIFRoaXMgc2VlbXMgbGlrZSBvcHRpbWl6YXRpb24gZm9yIGNncm91cCB2MiBieSBoaWRpbmcgdGhlIHN3YXBwaW5lc3MgZmllbGQgaW4gdGhlIGBzdHJ1Y3QgbWVtX2Nncm91cGAsIGJlY2F1c2UgaXQgaXMgb25seSB1c2VkIGZvciBjZ3JvdXAgdjEuIEZ1bmN0aW9uYWxseSwgaXQgc3RpbGwgcmV0dXJucyB0aGUgc2FtZSB2YWx1ZSBhcyBiZWZvcmUgaWYgYENPTkZJR19NRU1DR19WMWAgaXMgZGlzYWJsZWQuCgpJZiBgQ09ORklHX01FTUNHX1YxYCAqaXMqIGVuYWJsZWQsIHRoZSBsb2dpYyBhcHBlYXJzIGlkZW50aWNhbCB0byB0aGUgb3JpZ2luYWw7IHRoZSBzYW1lIGNvbmRpdGlvbnMgYXJlIGNoZWNrZWQgYnV0IG1vcmUgc3VjY2luY3RseS4KClNvIGZhciwgaXQgbG9va3MgbGlrZSBhIGNsZWFuIHJlZmFjdG9yaW5nIHRvIGF2b2lkIHVubmVjZXNzYXJ5IGNvZGUgYW5kIG1lbW9yeSBvdmVyaGVhZCB3aGVuIHYxIGlzIG5vdCBpbiB1c2UuIEhvd2V2ZXIsIHRoZSBtb3ZlIG9mIGBzY19zd2FwcGluZXNzKClgIGlzIGEgbGl0dGxlIHRyaWNraWVyLCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgaGFzbiYjMzk7dCBjaGFuZ2VkIHRoZSBzZW1hbnRpY3Mgb2YgdGhlIGNvZGUuCgpUaGUgb2xkIGNvZGUgY29uZGl0aW9uYWxseSBkZWZpbmVkIGBzY19zd2FwcGluZXNzKClgIGJhc2VkIG9uIGBDT05GSUdfTUVNQ0dgLCB3aGVyZSB0aGUgZGVmYXVsdCB2YWx1ZSB3YXMgYHZtX3N3YXBwaW5lc3NgLiBUaGUgbmV3IGNvZGUgKmFsd2F5cyogY2FsbHMgYG1lbV9jZ3JvdXBfc3dhcHBpbmVzcygpYCwgd2hpY2gsIGFzIHdlJiMzOTt2ZSBhbHJlYWR5IGFzc2Vzc2VkLCB3aWxsIHJldHVybiBgdm1fc3dhcHBpbmVzc2AgaWYgYENPTkZJR19NRU1DR19WMWAgaXMgZGlzYWJsZWQuIFRoaXMgc2VlbXMgdG8gaW1wbHkgdGhhdCBgc2MtJmd0O3Byb2FjdGl2ZWAgKGFuZCBgc2MtJmd0O3Byb2FjdGl2ZV9zd2FwcGluZXNzYCkgd2lsbCBzdGlsbCBiZSBjaGVja2VkIGV2ZW4gaWYgYENPTkZJR19NRU1DR2AgaXMgZGlzYWJsZWQuIEkgd2lsbCB1c2UgYGdyZXBwZXJgIHRvIGRvdWJsZSBjaGVjayB0aGF0IGBzdHJ1Y3Qgc2Nhbl9jb250cm9sYCBleGlzdHMgaWYgYENPTkZJR19NRU1DR2AgaXMgZGlzYWJsZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMDc6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RydWN0IHNjYW5fY29udHJvbCBcXHsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMtNzQtXG5tbS92bXNjYW4uYzo3NTpzdHJ1Y3Qgc2Nhbl9jb250cm9sIHtcbm1tL3Ztc2Nhbi5jLTc2LVx0LyogSG93IG1hbnkgcGFnZXMgc2hyaW5rX2xpc3QoKSBzaG91bGQgcmVjbGFpbSAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDA3OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU0OTgKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gYG1tL3Ztc2Nhbi5jYCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyB0aGUgc2Nhbm5pbmcgcHJvY2VzcyB3b3Jrcy4gVGltZSB0byBkaXZlIGludG8gdGhlIGNvZGUuIEkmIzM5O20gdGhpbmtpbmcgdGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQgaXMgYG1tL3Ztc2Nhbi5jYC4gSXQgbWFrZXMgc2Vuc2UgdGhhdCYjMzk7cyB3aGVyZSB0aGUgY29yZSBWTSBzY2FubmluZyBsb2dpYyB3b3VsZCByZXNpZGUuIExldCYjMzk7cyBzdGFydCBhcm91bmQgbGluZSA3NSwgdGhhdCYjMzk7cyB1c3VhbGx5IGEgZ29vZCBhcmVhIHRvIGdldCBhIGZlZWwgZm9yIHRoZSBtYWpvciBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQuIEkmIzM5O20gc3BlY2lmaWNhbGx5IGxvb2tpbmcgZm9yIGEgc3RydWN0dXJlIGNhbGxlZCBgc2Nhbl9jb250cm9sYC4gVGhpcyBpcyBhIHByZXR0eSBjb21tb24gcGF0dGVybjsgdGhlc2UgY29udHJvbCBzdHJ1Y3RzIG9mdGVuIGNvbnRhaW4gYWxsIHRoZSB0dW5hYmxlIHBhcmFtZXRlcnMgYW5kIHN0YXRlIGluZm9ybWF0aW9uIHVzZWQgdG8gZ3VpZGUgdGhlIHNjYW5uaW5nIHByb2Nlc3MuIFVuZGVyc3RhbmRpbmcgYHNjYW5fY29udHJvbGAgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGVudHJ5IHBvaW50IGludG8gdGhlIG92ZXJhbGwgZmxvdy4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGZpbmQgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMDc6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDc1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDc1Olx0c3RydWN0IHNjYW5fY29udHJvbCB7XG4gIDc2Olx0XHQvKiBIb3cgbWFueSBwYWdlcyBzaHJpbmtfbGlzdCgpIHNob3VsZCByZWNsYWltICovXG4gIDc3Olx0XHR1bnNpZ25lZCBsb25nIG5yX3RvX3JlY2xhaW07XG4gIDc4Olx0XG4gIDc5Olx0XHQvKlxuICA4MDpcdFx0ICogTm9kZW1hc2sgb2Ygbm9kZXMgYWxsb3dlZCBieSB0aGUgY2FsbGVyLiBJZiBOVUxMLCBhbGwgbm9kZXNcbiAgODE6XHRcdCAqIGFyZSBzY2FubmVkLlxuICA4MjpcdFx0ICovXG4gIDgzOlx0XHRjb25zdCBub2RlbWFza190ICpub2RlbWFzaztcbiAgODQ6XHRcbiAgODU6XHRcdC8qXG4gIDg2Olx0XHQgKiBUaGUgbWVtb3J5IGNncm91cCB0aGF0IGhpdCBpdHMgbGltaXQgYW5kIGFzIGEgcmVzdWx0IGlzIHRoZVxuICA4NzpcdFx0ICogcHJpbWFyeSB0YXJnZXQgb2YgdGhpcyByZWNsYWltIGludm9jYXRpb24uXG4gIDg4Olx0XHQgKi9cbiAgODk6XHRcdHN0cnVjdCBtZW1fY2dyb3VwICp0YXJnZXRfbWVtX2Nncm91cDtcbiAgOTA6XHRcbiAgOTE6XHRcdC8qXG4gIDkyOlx0XHQgKiBTY2FuIHByZXNzdXJlIGJhbGFuY2luZyBiZXR3ZWVuIGFub24gYW5kIGZpbGUgTFJVc1xuICA5MzpcdFx0ICovXG4gIDk0Olx0XHR1bnNpZ25lZCBsb25nXHRhbm9uX2Nvc3Q7XG4gIDk1Olx0XHR1bnNpZ25lZCBsb25nXHRmaWxlX2Nvc3Q7XG4gIDk2Olx0XG4gIDk3Olx0XHQvKiBTd2FwcGluZXNzIHZhbHVlIGZvciBwcm9hY3RpdmUgcmVjbGFpbS4gQWx3YXlzIHVzZSBzY19zd2FwcGluZXNzKCkhICovXG4gIDk4Olx0XHRpbnQgKnByb2FjdGl2ZV9zd2FwcGluZXNzO1xuICA5OTpcdFxuIDEwMDpcdFx0LyogQ2FuIGFjdGl2ZSBmb2xpb3MgYmUgZGVhY3RpdmF0ZWQgYXMgcGFydCBvZiByZWNsYWltPyAqL1xuIDEwMTpcdCNkZWZpbmUgREVBQ1RJVkFURV9BTk9OIDFcbiAxMDI6XHQjZGVmaW5lIERFQUNUSVZBVEVfRklMRSAyXG4gMTAzOlx0XHR1bnNpZ25lZCBpbnQgbWF5X2RlYWN0aXZhdGU6MjtcbiAxMDQ6XHRcdHVuc2lnbmVkIGludCBmb3JjZV9kZWFjdGl2YXRlOjE7XG4gMTA1Olx0XHR1bnNpZ25lZCBpbnQgc2tpcHBlZF9kZWFjdGl2YXRlOjE7XG4gMTA2Olx0XG4gMTA3Olx0XHQvKiB6b25lX3JlY2xhaW1fbW9kZSwgYm9vc3QgcmVjbGFpbSAqL1xuIDEwODpcdFx0dW5zaWduZWQgaW50IG1heV93cml0ZXBhZ2U6MTtcbiAxMDk6XHRcbiAxMTA6XHRcdC8qIHpvbmVfcmVjbGFpbV9tb2RlICovXG4gMTExOlx0XHR1bnNpZ25lZCBpbnQgbWF5X3VubWFwOjE7XG4gMTEyOlx0XG4gMTEzOlx0XHQvKiB6b25lX3JlY2xhaW1fbW9kZSwgYm9vc3QgcmVjbGFpbSwgY2dyb3VwIHJlc3RyaWN0aW9ucyAqL1xuIDExNDpcdFx0dW5zaWduZWQgaW50IG1heV9zd2FwOjE7XG4gMTE1Olx0XG4gMTE2Olx0XHQvKiBOb3QgYWxsb3cgY2FjaGVfdHJpbV9tb2RlIHRvIGJlIHR1cm5lZCBvbiBhcyBwYXJ0IG9mIHJlY2xhaW0/ICovXG4gMTE3Olx0XHR1bnNpZ25lZCBpbnQgbm9fY2FjaGVfdHJpbV9tb2RlOjE7XG4gMTE4Olx0XG4gMTE5Olx0XHQvKiBIYXMgY2FjaGVfdHJpbV9tb2RlIGZhaWxlZCBhdCBsZWFzdCBvbmNlPyAqL1xuIDEyMDpcdFx0dW5zaWduZWQgaW50IGNhY2hlX3RyaW1fbW9kZV9mYWlsZWQ6MTtcbiAxMjE6XHRcbiAxMjI6XHRcdC8qIFByb2FjdGl2ZSByZWNsYWltIGludm9rZWQgYnkgdXNlcnNwYWNlICovXG4gMTIzOlx0XHR1bnNpZ25lZCBpbnQgcHJvYWN0aXZlOjE7XG4gMTI0Olx0XG4gMTI1Olx0XHQvKlxuIDEyNjpcdFx0ICogQ2dyb3VwIG1lbW9yeSBiZWxvdyBtZW1vcnkubG93IGlzIHByb3RlY3RlZCBhcyBsb25nIGFzIHdlXG4gMTI3Olx0XHQgKiBkb24mIzM5O3QgdGhyZWF0ZW4gdG8gT09NLiBJZiBhbnkgY2dyb3VwIGlzIHJlY2xhaW1lZCBhdFxuIDEyODpcdFx0ICogcmVkdWNlZCBmb3JjZSBvciBwYXNzZWQgb3ZlciBlbnRpcmVseSBkdWUgdG8gaXRzIG1lbW9yeS5sb3dcbiAxMjk6XHRcdCAqIHNldHRpbmcgKG1lbWNnX2xvd19za2lwcGVkKSwgYW5kIG5vdGhpbmcgaXMgcmVjbGFpbWVkIGFzIGFcbiAxMzA6XHRcdCAqIHJlc3VsdCwgdGhlbiBnbyBiYWNrIGZvciBvbmUgbW9yZSBjeWNsZSB0aGF0IHJlY2xhaW1zIHRoZSBwcm90ZWN0ZWRcbiAxMzE6XHRcdCAqIG1lbW9yeSAobWVtY2dfbG93X3JlY2xhaW0pIHRvIGF2ZXJ0IE9PTS5cbiAxMzI6XHRcdCAqL1xuIDEzMzpcdFx0dW5zaWduZWQgaW50IG1lbWNnX2xvd19yZWNsYWltOjE7XG4gMTM0Olx0XHR1bnNpZ25lZCBpbnQgbWVtY2dfbG93X3NraXBwZWQ6MTtcbiAxMzU6XHRcbiAxMzY6XHRcdC8qIFNoYXJlZCBjZ3JvdXAgdHJlZSB3YWxrIGZhaWxlZCwgcmVzY2FuIHRoZSB3aG9sZSB0cmVlICovXG4gMTM3Olx0XHR1bnNpZ25lZCBpbnQgbWVtY2dfZnVsbF93YWxrOjE7XG4gMTM4Olx0XG4gMTM5Olx0XHR1bnNpZ25lZCBpbnQgaGliZXJuYXRpb25fbW9kZToxO1xuIDE0MDpcdFxuIDE0MTpcdFx0LyogT25lIG9mIHRoZSB6b25lcyBpcyByZWFkeSBmb3IgY29tcGFjdGlvbiAqL1xuIDE0MjpcdFx0dW5zaWduZWQgaW50IGNvbXBhY3Rpb25fcmVhZHk6MTtcbiAxNDM6XHRcbiAxNDQ6XHRcdC8qIFRoZXJlIGlzIGVhc2lseSByZWNsYWltYWJsZSBjb2xkIGNhY2hlIGluIHRoZSBjdXJyZW50IG5vZGUgKi9cbiAxNDU6XHRcdHVuc2lnbmVkIGludCBjYWNoZV90cmltX21vZGU6MTtcbiAxNDY6XHRcbiAxNDc6XHRcdC8qIFRoZSBmaWxlIGZvbGlvcyBvbiB0aGUgY3VycmVudCBub2RlIGFyZSBkYW5nZXJvdXNseSBsb3cgKi9cbiAxNDg6XHRcdHVuc2lnbmVkIGludCBmaWxlX2lzX3Rpbnk6MTtcbiAxNDk6XHRcbiAxNTA6XHRcdC8qIEFsd2F5cyBkaXNjYXJkIGluc3RlYWQgb2YgZGVtb3RpbmcgdG8gbG93ZXIgdGllciBtZW1vcnkgKi9cbiAxNTE6XHRcdHVuc2lnbmVkIGludCBub19kZW1vdGlvbjoxO1xuIDE1MjpcdFxuIDE1MzpcdFx0LyogQWxsb2NhdGlvbiBvcmRlciAqL1xuIDE1NDpcdFx0czggb3JkZXI7XG4gMTU1Olx0XG4gMTU2Olx0XHQvKiBTY2FuICh0b3RhbF9zaXplIFx1MDAzZVx1MDAzZSBwcmlvcml0eSkgcGFnZXMgYXQgb25jZSAqL1xuIDE1NzpcdFx0czggcHJpb3JpdHk7XG4gMTU4Olx0XG4gMTU5Olx0XHQvKiBUaGUgaGlnaGVzdCB6b25lIHRvIGlzb2xhdGUgZm9saW9zIGZvciByZWNsYWltIGZyb20gKi9cbiAxNjA6XHRcdHM4IHJlY2xhaW1faWR4O1xuIDE2MTpcdFxuIDE2MjpcdFx0LyogVGhpcyBjb250ZXh0JiMzOTtzIEdGUCBtYXNrICovXG4gMTYzOlx0XHRnZnBfdCBnZnBfbWFzaztcbiAxNjQ6XHRcbiAxNjU6XHRcdC8qIEluY3JlbWVudGVkIGJ5IHRoZSBudW1iZXIgb2YgaW5hY3RpdmUgcGFnZXMgdGhhdCB3ZXJlIHNjYW5uZWQgKi9cbiAxNjY6XHRcdHVuc2lnbmVkIGxvbmcgbnJfc2Nhbm5lZDtcbiAxNjc6XHRcbiAxNjg6XHRcdC8qIE51bWJlciBvZiBwYWdlcyBmcmVlZCBzbyBmYXIgZHVyaW5nIGEgY2FsbCB0byBzaHJpbmtfem9uZXMoKSAqL1xuIDE2OTpcdFx0dW5zaWduZWQgbG9uZyBucl9yZWNsYWltZWQ7XG4gMTcwOlx0XG4gMTcxOlx0XHRzdHJ1Y3Qge1xuIDE3MjpcdFx0XHR1bnNpZ25lZCBpbnQgZGlydHk7XG4gMTczOlx0XHRcdHVuc2lnbmVkIGludCBjb25nZXN0ZWQ7XG4gMTc0Olx0XHRcdHVuc2lnbmVkIGludCB3cml0ZWJhY2s7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMDc6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzExNQoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDYzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4YW1pbmluZyBQcm9hY3RpdmUgUmVjbGFpbSBpbiB0aGUgTGludXggS2VybmVsKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlLCBhbmQgSSBzZWUgdGhhdCBib3RoIGBwcm9hY3RpdmVgIGFuZCBgcHJvYWN0aXZlX3N3YXBwaW5lc3NgIGFyZSAqYWx3YXlzKiBtZW1iZXJzIG9mIHRoZSBgc2Nhbl9jb250cm9sYCBzdHJ1Y3QuIFRoYXQmIzM5O3MgYSBiaXQgY3VyaW91cywgZXNwZWNpYWxseSBzaW5jZSBJJiMzOTttIHRyeWluZyB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGFsbCBiZWhhdmVzIHdpdGggYW5kIHdpdGhvdXQgbWVtb3J5IGNncm91cHMgZW5hYmxlZC4gSXQgbWFrZXMgbWUgd29uZGVyLCBpZiBgQ09ORklHX01FTUNHYCBpcyBkaXNhYmxlZCwgZG9lcyB0aGlzIGNvbmNlcHQgb2YgJiMzNDtwcm9hY3RpdmUgcmVjbGFpbSYjMzQ7IGV2ZW4gKmV4aXN0KiBpbiBhIG1lYW5pbmdmdWwgd2F5PyBJIG1lYW4sIGFyZSB0aGVzZSB2YXJpYWJsZXMganVzdCBhbGxvY2F0ZWQgYW5kIHVudXNlZD8gT3IgYXJlIHRoZXkgc3RpbGwgdXNlZCBmb3Igc29tZXRoaW5nIGV2ZW4gaW4gYSBub24tY2dyb3VwIGNvbnRleHQ/CgpNeSBuZXh0IHN0ZXAgaXMgY2xlYXIg4oCTIEkgbmVlZCB0byB0cmFjayBkb3duIGV4YWN0bHkgKndoZXJlKiBgcHJvYWN0aXZlYCBpcyBiZWluZyBzZXQuIFRoYXQmIzM5O3MgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIGl0cyBwdXJwb3NlIGFuZCBpZiBpdCYjMzk7cyByZWxldmFudCBpbiBhbGwgY29uZmlndXJhdGlvbnMuIExldCYjMzk7cyBzdGFydCB0cmFjaW5nIHRoZSBjb2RlIHBhdGhzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDA3OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Byb2FjdGl2ZSA9IDEmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmM9Nzg1NT1pbnQgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbShjaGFyICpidWYsXG4tLVxubW0vdm1zY2FuLmMtNzk0MC1cdFx0XHRcdC5tYXlfc3dhcCA9IDEsXG5tbS92bXNjYW4uYzo3OTQxOlx0XHRcdFx0LnByb2FjdGl2ZSA9IDEsXG5tbS92bXNjYW4uYy03OTQyLVx0XHRcdH07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMDc6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzQ5MwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgdXNlciBhbmQgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkRpdmluZyBpbnRvIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCBpbiBgbW0vdm1zY2FuLmNgKioKCkFscmlnaHQsIEkmIzM5O20gdGhpbmtpbmcgSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIGhvdyBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgaXMgaW1wbGVtZW50ZWQuIEkmIzM5O20gc3BlY2lmaWNhbGx5IGxvb2tpbmcgYXQgd2hlcmUgaXQmIzM5O3MgZGVmaW5lZCBhbmQgdXNlZCB3aXRoaW4gdGhlIGBtbS92bXNjYW4uY2AgZmlsZS4gSSYjMzk7bSBwcm9iYWJseSB0cnlpbmcgdG8gdW5kZXJzdGFuZCB0aGUgY2lyY3Vtc3RhbmNlcyB1bmRlciB3aGljaCB0aGlzIG1lY2hhbmlzbSBnZXRzIHRyaWdnZXJlZC4gSXMgaXQgYW4gYXV0b21hdGljIHJlc3BvbnNlLCBvciBpcyBpdCBpbnZva2VkIGluIGEgbW9yZSBjb250cm9sbGVkIHdheT8gSSBzdXNwZWN0IEkmIzM5O20gZGVhbGluZyB3aXRoIGEgc2NlbmFyaW8gd2hlcmUgdGhlIHN5c3RlbSBpcyBhbnRpY2lwYXRpbmcgbWVtb3J5IHByZXNzdXJlIGFuZCBwcm9hY3RpdmVseSB0cnlpbmcgdG8gZnJlZSB1cCByZXNvdXJjZXMgYmVmb3JlIHRoaW5ncyBnZXQgY3JpdGljYWwuIE1heWJlIEkmIzM5O20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaG93IGFnZ3Jlc3NpdmUgdGhpcyBwcm9hY3RpdmUgcmVjbGFpbSBpcywgYW5kIGhvdyBpdCBiYWxhbmNlcyByZXNvdXJjZSBhbGxvY2F0aW9uIHdpdGggbGF0ZW5jeS4gUGVyaGFwcyBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSB0cmlnZ2Vycy4gSXMgaXQgdGhlIHRhc2sgdGhhdCBpcyBibG9ja2VkPyBPciB0aGUgd2hvbGUgc3lzdGVtPyBFaXRoZXIgd2F5IEkgd2FudCB0byByZW1pbmQgbXlzZWxmIGhvdyB0aGlzIGludGVyYWN0cyB3aXRoIHRoZSBwYWdlIHJlcGxhY2VtZW50IGFsZ29yaXRobXMsIGFuZCB3aGV0aGVyIGl0JiMzOTtzIHRpZWQgdG8gc3BlY2lmaWMgdXNlciBwcm9jZXNzZXMgb3IgYSBtb3JlIGdsb2JhbCBzdHJhdGVneS4gVGltZSB0byBkaXZlIGludG8gdGhlIGNvZGUgYW5kIHNlZSB3aGF0IGluc2lnaHRzIEkgY2FuIGdsZWFuLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAwNzowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzg1NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7Nzg1NTpcdGludCB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltKGNoYXIgKmJ1Zixcbjc4NTY6XHRcdFx0XHQgICBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHBnX2RhdGFfdCAqcGdkYXQpXG43ODU3Olx0e1xuNzg1ODpcdFx0dW5zaWduZWQgaW50IG5yX3JldHJpZXMgPSBNQVhfUkVDTEFJTV9SRVRSSUVTO1xuNzg1OTpcdFx0dW5zaWduZWQgbG9uZyBucl90b19yZWNsYWltLCBucl9yZWNsYWltZWQgPSAwO1xuNzg2MDpcdFx0aW50IHN3YXBwaW5lc3MgPSAtMTtcbjc4NjE6XHRcdGNoYXIgKm9sZF9idWYsICpzdGFydDtcbjc4NjI6XHRcdHN1YnN0cmluZ190IGFyZ3NbTUFYX09QVF9BUkdTXTtcbjc4NjM6XHRcdGdmcF90IGdmcF9tYXNrID0gR0ZQX0tFUk5FTDtcbjc4NjQ6XHRcbjc4NjU6XHRcdGlmICghYnVmIHx8ICghbWVtY2cgXHUwMDI2XHUwMDI2ICFwZ2RhdCkgfHwgKG1lbWNnIFx1MDAyNlx1MDAyNiBwZ2RhdCkpXG43ODY2Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuNzg2NzpcdFxuNzg2ODpcdFx0YnVmID0gc3Ryc3RyaXAoYnVmKTtcbjc4Njk6XHRcbjc4NzA6XHRcdG9sZF9idWYgPSBidWY7XG43ODcxOlx0XHRucl90b19yZWNsYWltID0gbWVtcGFyc2UoYnVmLCBcdTAwMjZidWYpIC8gUEFHRV9TSVpFO1xuNzg3MjpcdFx0aWYgKGJ1ZiA9PSBvbGRfYnVmKVxuNzg3MzpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjc4NzQ6XHRcbjc4NzU6XHRcdGJ1ZiA9IHN0cnN0cmlwKGJ1Zik7XG43ODc2Olx0XG43ODc3Olx0XHR3aGlsZSAoKHN0YXJ0ID0gc3Ryc2VwKFx1MDAyNmJ1ZiwgXCYjMzQ7IFwmIzM0OykpICE9IE5VTEwpIHtcbjc4Nzg6XHRcdFx0aWYgKCFzdHJsZW4oc3RhcnQpKVxuNzg3OTpcdFx0XHRcdGNvbnRpbnVlO1xuNzg4MDpcdFx0XHRzd2l0Y2ggKG1hdGNoX3Rva2VuKHN0YXJ0LCB0b2tlbnMsIGFyZ3MpKSB7XG43ODgxOlx0XHRcdGNhc2UgTUVNT1JZX1JFQ0xBSU1fU1dBUFBJTkVTUzpcbjc4ODI6XHRcdFx0XHRpZiAobWF0Y2hfaW50KFx1MDAyNmFyZ3NbMF0sIFx1MDAyNnN3YXBwaW5lc3MpKVxuNzg4MzpcdFx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG43ODg0Olx0XHRcdFx0aWYgKHN3YXBwaW5lc3MgXHUwMDNjIE1JTl9TV0FQUElORVNTIHx8XG43ODg1Olx0XHRcdFx0ICAgIHN3YXBwaW5lc3MgXHUwMDNlIE1BWF9TV0FQUElORVNTKVxuNzg4NjpcdFx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG43ODg3Olx0XHRcdFx0YnJlYWs7XG43ODg4Olx0XHRcdGNhc2UgTUVNT1JZX1JFQ0xBSU1fU1dBUFBJTkVTU19NQVg6XG43ODg5Olx0XHRcdFx0c3dhcHBpbmVzcyA9IFNXQVBQSU5FU1NfQU5PTl9PTkxZO1xuNzg5MDpcdFx0XHRcdGJyZWFrO1xuNzg5MTpcdFx0XHRkZWZhdWx0OlxuNzg5MjpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuNzg5MzpcdFx0XHR9XG43ODk0Olx0XHR9XG43ODk1Olx0XG43ODk2Olx0XHR3aGlsZSAobnJfcmVjbGFpbWVkIFx1MDAzYyBucl90b19yZWNsYWltKSB7XG43ODk3Olx0XHRcdC8qIFdpbGwgY29udmVyZ2Ugb24gemVybywgYnV0IHJlY2xhaW0gZW5mb3JjZXMgYSBtaW5pbXVtICovXG43ODk4Olx0XHRcdHVuc2lnbmVkIGxvbmcgYmF0Y2hfc2l6ZSA9IChucl90b19yZWNsYWltIC0gbnJfcmVjbGFpbWVkKSAvIDQ7XG43ODk5Olx0XHRcdHVuc2lnbmVkIGxvbmcgcmVjbGFpbWVkO1xuNzkwMDpcdFxuNzkwMTpcdFx0XHQvKlxuNzkwMjpcdFx0XHQgKiBSZXR1cm4gLUVSRVNUQVJUU1lTIHRvIGFsbG93IHRoZSBmcmVlemVyIHRvIGludGVycnVwdCB0aGVcbjc5MDM6XHRcdFx0ICogdGFzay4gVGhlIHN5c2NhbGwgd2lsbCBiZSB0cmFuc3BhcmVudGx5IHJlc3RhcnRlZCB1cG9uXG43OTA0Olx0XHRcdCAqIHJlc3VtZS4gRm9yIHJlYWwgc2lnbmFscywgaXQgZWl0aGVyIHJlc3RhcnRzIHRoZSBzeXNjYWxsXG43OTA1Olx0XHRcdCAqIChpZiBTQV9SRVNUQVJUIGlzIHNldCkgb3IgaXMgY29udmVydGVkIHRvIC1FSU5UUiBieSB0aGVcbjc5MDY6XHRcdFx0ICogc2lnbmFsIGxheWVyLlxuNzkwNzpcdFx0XHQgKi9cbjc5MDg6XHRcdFx0aWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKVxuNzkwOTpcdFx0XHRcdHJldHVybiAtRVJFU1RBUlRTWVM7XG43OTEwOlx0XG43OTExOlx0XHRcdC8qIGNncm91cF9ybWRpcigpIHdhaXRzIGZvciB1cyB3aXRoIGNncm91cF9tdXRleCBoZWxkLiAqL1xuNzkxMjpcdFx0XHRpZiAobWVtY2cgXHUwMDI2XHUwMDI2IG1lbWNnX2lzX2R5aW5nKG1lbWNnKSlcbjc5MTM6XHRcdFx0XHRyZXR1cm4gLUVBR0FJTjtcbjc5MTQ6XHRcbjc5MTU6XHRcdFx0Lypcbjc5MTY6XHRcdFx0ICogVGhpcyBpcyB0aGUgZmluYWwgYXR0ZW1wdCwgZHJhaW4gcGVyY3B1IGxydSBjYWNoZXMgaW4gdGhlXG43OTE3Olx0XHRcdCAqIGhvcGUgb2YgaW50cm9kdWNpbmcgbW9yZSBldmljdGFibGUgcGFnZXMuXG43OTE4Olx0XHRcdCAqL1xuNzkxOTpcdFx0XHRpZiAoIW5yX3JldHJpZXMpXG43OTIwOlx0XHRcdFx0bHJ1X2FkZF9kcmFpbl9hbGwoKTtcbjc5MjE6XHRcbjc5MjI6XHRcdFx0aWYgKG1lbWNnKSB7XG43OTIzOlx0XHRcdFx0dW5zaWduZWQgaW50IHJlY2xhaW1fb3B0aW9ucztcbjc5MjQ6XHRcbjc5MjU6XHRcdFx0XHRyZWNsYWltX29wdGlvbnMgPSBNRU1DR19SRUNMQUlNX01BWV9TV0FQIHxcbjc5MjY6XHRcdFx0XHRcdFx0ICBNRU1DR19SRUNMQUlNX1BST0FDVElWRTtcbjc5Mjc6XHRcdFx0XHRyZWNsYWltZWQgPSB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKG1lbWNnLFxuNzkyODpcdFx0XHRcdFx0XHRcdCBiYXRjaF9zaXplLCBnZnBfbWFzayxcbjc5Mjk6XHRcdFx0XHRcdFx0XHQgcmVjbGFpbV9vcHRpb25zLFxuNzkzMDpcdFx0XHRcdFx0XHRcdCBzd2FwcGluZXNzID09IC0xID8gTlVMTCA6IFx1MDAyNnN3YXBwaW5lc3MpO1xuNzkzMTpcdFx0XHR9IGVsc2Uge1xuNzkzMjpcdFx0XHRcdHN0cnVjdCBzY2FuX2NvbnRyb2wgc2MgPSB7XG43OTMzOlx0XHRcdFx0XHQuZ2ZwX21hc2sgPSBjdXJyZW50X2dmcF9jb250ZXh0KGdmcF9tYXNrKSxcbjc5MzQ6XHRcdFx0XHRcdC5yZWNsYWltX2lkeCA9IGdmcF96b25lKGdmcF9tYXNrKSxcbjc5MzU6XHRcdFx0XHRcdC5wcm9hY3RpdmVfc3dhcHBpbmVzcyA9IHN3YXBwaW5lc3MgPT0gLTEgPyBOVUxMIDogXHUwMDI2c3dhcHBpbmVzcyxcbjc5MzY6XHRcdFx0XHRcdC5wcmlvcml0eSA9IERFRl9QUklPUklUWSxcbjc5Mzc6XHRcdFx0XHRcdC5tYXlfd3JpdGVwYWdlID0gMSxcbjc5Mzg6XHRcdFx0XHRcdC5ucl90b19yZWNsYWltID0gbWF4KGJhdGNoX3NpemUsIFNXQVBfQ0xVU1RFUl9NQVgpLFxuNzkzOTpcdFx0XHRcdFx0Lm1heV91bm1hcCA9IDEsXG43OTQwOlx0XHRcdFx0XHQubWF5X3N3YXAgPSAxLFxuNzk0MTpcdFx0XHRcdFx0LnByb2FjdGl2ZSA9IDEsXG43OTQyOlx0XHRcdFx0fTtcbjc5NDM6XHRcbjc5NDQ6XHRcdFx0XHRpZiAodGVzdF9hbmRfc2V0X2JpdF9sb2NrKFBHREFUX1JFQ0xBSU1fTE9DS0VELFxuNzk0NTpcdFx0XHRcdFx0XHRcdCAgXHUwMDI2cGdkYXQtXHUwMDNlZmxhZ3MpKVxuNzk0NjpcdFx0XHRcdFx0cmV0dXJuIC1FQlVTWTtcbjc5NDc6XHRcbjc5NDg6XHRcdFx0XHRyZWNsYWltZWQgPSBfX25vZGVfcmVjbGFpbShwZ2RhdCwgYmF0Y2hfc2l6ZSwgXHUwMDI2c2MpO1xuNzk0OTpcdFx0XHRcdGNsZWFyX2JpdF91bmxvY2soUEdEQVRfUkVDTEFJTV9MT0NLRUQsIFx1MDAyNnBnZGF0LVx1MDAzZWZsYWdzKTtcbjc5NTA6XHRcdFx0fVxuNzk1MTpcdFxuNzk1MjpcdFx0XHRpZiAoIXJlY2xhaW1lZCBcdTAwMjZcdTAwMjYgIW5yX3JldHJpZXMtLSlcbjc5NTM6XHRcdFx0XHRyZXR1cm4gLUVBR0FJTjtcbjc5NTQ6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMDc6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTM1NgoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDMxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipQcm9hY3RpdmUgUmVjbGFpbSBhbmQgU3dhcHBpbmVzcyBVbmRlciB0aGUgTWljcm9zY29wZSoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGRpZ2dpbmcgaW50byB0aGlzIGFuZCBpdCYjMzk7cyBiZWNvbWluZyBjbGVhciB0aGF0IGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCBjYW4gYmUgY2FsbGVkIHdpdGggYHBnZGF0YCBkaXJlY3RseSwgYnlwYXNzaW5nIHRoZSBuZWVkIGZvciBhIGBtZW1jZ2Agd2hlbiBkZWFsaW5nIHdpdGggcHJvYWN0aXZlIHJlY2xhaW0gYXQgdGhlIG5vZGUgbGV2ZWwuIFRoaXMgbWFrZXMgc2Vuc2U7IEkgY291bGQgc2VlIHRoaXMgYmVpbmcgbGV2ZXJhZ2VkIHRocm91Z2ggc3lzZnMgb3IgcHJvY2ZzLCBtYXliZSB0aGUgYC9zeXMvZGV2aWNlcy9zeXN0ZW0vbm9kZS9ub2RlWC9yZWNsYWltYCBpbnRlcmZhY2UuCgpOb3csIGhlcmUmIzM5O3MgdGhlIGtpY2tlciwgYW5kIHRoaXMgaXMgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZyByZWdhcmRpbmcgYHNjX3N3YXBwaW5lc3NgLiBJIHJlbWVtYmVyIHRoYXQgd2hlbiBgQ09ORklHX01FTUNHYCB3YXMgZGlzYWJsZWQsIGBzY19zd2FwcGluZXNzYCBzaW1wbHkgcmV0dXJuZWQgYFJFQURfT05DRSh2bV9zd2FwcGluZXNzKWAuIFRoYXQmIzM5O3MgdGhlIGJhc2VsaW5lLiBCdXQgbm93LCBpdCYjMzk7cyBiZWVuIHVwZGF0ZWQuIFRoZSBjb2RlIG5vdyBsb29rcyBsaWtlIHRoaXM6CmBgYGMKc3RhdGljIGludCBzY19zd2FwcGluZXNzKHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpCnsKCWlmIChzYy0mZ3Q7cHJvYWN0aXZlICZhbXA7JmFtcDsgc2MtJmd0O3Byb2FjdGl2ZV9zd2FwcGluZXNzKQoJCXJldHVybiAqc2MtJmd0O3Byb2FjdGl2ZV9zd2FwcGluZXNzOwoJcmV0dXJuIG1lbV9jZ3JvdXBfc3dhcHBpbmVzcyhtZW1jZyk7Cn0KYGBgCkFuZCBgbWVtX2Nncm91cF9zd2FwcGluZXNzKG1lbWNnKWAgc3RpbGwgcmV0dXJucyBgUkVBRF9PTkNFKHZtX3N3YXBwaW5lc3MpYCBpZiBgQ09ORklHX01FTUNHX1YxYCBpcyBkaXNhYmxlZC4gU28sIHdpdGhvdXQgYENPTkZJR19NRU1DR2AsIGBzY19zd2FwcGluZXNzYCAqbm93KiBjaGVja3MgYHNjLSZndDtwcm9hY3RpdmUgJmFtcDsmYW1wOyBzYy0mZ3Q7cHJvYWN0aXZlX3N3YXBwaW5lc3NgIGFuZCByZXR1cm5zIHRoYXQgdmFsdWUgaW5zdGVhZCBvZiBqdXN0IHRoZSBnbG9iYWwgYHZtX3N3YXBwaW5lc3NgLiBUaGF0JiMzOTtzIGEgZGVmaW5pdGUgY2hhbmdlIGluIGJlaGF2aW9yLgoKVGhpcyByYWlzZXMgYSBxdWVzdGlvbiBpbiBteSBtaW5kOiBjYW4gYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gIGV2ZW4gYmUgdXNlZCBpZiBgQ09ORklHX01FTUNHYCBpcyBkaXNhYmxlZD8gV2UgbmVlZCB0byB2ZXJpZnkgdGhhdCBjYWxsIHBhdGggdG8gbWFrZSBzdXJlIHRoZSBhc3N1bXB0aW9ucyBhcmUgdmFsaWQuIEkmIzM5O2QgYmV0dGVyIGRvdWJsZSBjaGVjayB3aGVyZSBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgaXMgY2FsbGVkLiBJdCYjMzk7cyBhIGtleSBkZXRhaWwgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZXJhY3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAwNzowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1c2VyX3Byb2FjdGl2ZV9yZWNsYWltJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2ludGVybmFsLmg9NzAyPWV4dGVybiB2b2lkIHJlY2xhaW1fdGhyb3R0bGUocGdfZGF0YV90ICpwZ2RhdCwgZW51bSB2bXNjYW5fdGhyb3R0bGVfc3RhdGUgcmVhc29uKTtcbm1tL2ludGVybmFsLmg6NzAzOmludCB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltKGNoYXIgKmJ1Zixcbm1tL2ludGVybmFsLmgtNzA0LVx0XHRcdCAgIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgcGdfZGF0YV90ICpwZ2RhdCk7XG4tLVxubW0vbWVtY29udHJvbC5jPTUwMDc9c3RhdGljIHNzaXplX3QgbWVtb3J5X3JlY2xhaW0oc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLCBjaGFyICpidWYsXG4tLVxubW0vbWVtY29udHJvbC5jLTUwMTItXG5tbS9tZW1jb250cm9sLmM6NTAxMzpcdHJldCA9IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oYnVmLCBtZW1jZywgTlVMTCk7XG5tbS9tZW1jb250cm9sLmMtNTAxNC1cdGlmIChyZXQpXG4tLVxubW0vdm1zY2FuLmM9Nzg0OT1zdGF0aWMgY29uc3QgbWF0Y2hfdGFibGVfdCB0b2tlbnMgPSB7XG4tLVxubW0vdm1zY2FuLmMtNzg1NC1cbm1tL3Ztc2Nhbi5jOjc4NTU6aW50IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oY2hhciAqYnVmLFxubW0vdm1zY2FuLmMtNzg1Ni1cdFx0XHQgICBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHBnX2RhdGFfdCAqcGdkYXQpXG4tLVxubW0vdm1zY2FuLmM9ODAwOD1zdGF0aWMgc3NpemVfdCByZWNsYWltX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcbi0tXG5tbS92bXNjYW4uYy04MDEzLVxubW0vdm1zY2FuLmM6ODAxNDpcdHJldCA9IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oKGNoYXIgKilidWYsIE5VTEwsIE5PREVfREFUQShuaWQpKTtcbm1tL3Ztc2Nhbi5jLTgwMTUtXHRyZXR1cm4gcmV0ID8gcmV0IDogY291bnQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDA3OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNTQxCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGZyb20gYW4gZXhwZXJ0JiMzOTtzIHBlcnNwZWN0aXZlOgoKKipEaXZpbmcgaW50byBgcmVjbGFpbV9zdG9yZWAgYW5kIFByb2FjdGl2ZSBVc2VyIFJlY2xhaW0qKgoKUmlnaHQsIHNvIEkmIzM5O20gZGlnZ2luZyB0aHJvdWdoIHRoZSBWTSBzdWJzeXN0ZW0sIGFuZCBJIHNlZSB0aGF0IGByZWNsYWltX3N0b3JlYCBmdW5jdGlvbiBpbiBgbW0vdm1zY2FuLmNgLiBJbnRlcmVzdGluZy4gSXQmIzM5O3MgY2FsbGluZyBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgd2hpY2ggaXMgaW1tZWRpYXRlbHkgdGVsbGluZyBtZSBzb21ldGhpbmcgYWJvdXQgaG93IHdlJiMzOTtyZSBpbml0aWF0aW5nIHJlY2xhaW0gZWZmb3J0cywgcGFydGljdWxhcmx5IGluIGEgdXNlciBjb250ZXh0LCBiYXNlZCBvbiB0aGUgYE5PREVfREFUQShuaWQpYCBpbmZvcm1hdGlvbiB0aGF04oCZcyBwYXNzZWQuIEkgd2FudCB0byB1bmRlcnN0YW5kICp3aHkqIGByZWNsYWltX3N0b3JlYCBpcyBkb2luZyB0aGlzIGFuZCB3aGF0IGl04oCZcyBsZXZlcmFnaW5nIGZyb20gdGhlIG5vZGUtc3BlY2lmaWMgZGF0YSBwYXNzZWQuCgpNeSBtZW50YWwgY2hlY2tsaXN0IHN0YXJ0czogd2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBvZiBhIGNhbGwgbGlrZSB0aGlzPyBJcyB0aGlzIHVzZXItdHJpZ2dlcmVkIHJlY2xhaW0sIG9yIHNvbWV0aGluZyBtb3JlIHN5c3RlbWljIHRoYXTigJlzIGJlaW5nICpsZXZlcmFnZWQqIGZvciB1c2VyIHNwYWNlPyBIb3cgZG9lcyB0aGUgbm9kZSBjb250ZXh0IGluZmx1ZW5jZSB0aGUgZGVjaXNpb24tbWFraW5nIHdpdGhpbiBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWA/IElzIHRoaXMgYWJvdXQgbWVtb3J5IHByZXNzdXJlIGhhbmRsaW5nIG9yIG1vcmUgYWJvdXQgc29tZSBraW5kIG9mIHN0b3JhZ2UgcmVzb3VyY2UgaXNzdWU/IExldOKAmXMgZGl2ZSBpbnRvIHRoZSBgcmVjbGFpbV9zdG9yZWAgZnVuY3Rpb24gdG8gc2VlIHdoYXQgdGhpcyBwcm9jZXNzIGxvb2tzIGxpa2UhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDA3OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4MDA4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzgwMDg6XHRzdGF0aWMgc3NpemVfdCByZWNsYWltX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcbjgwMDk6XHRcdFx0XHQgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuODAxMDpcdFx0XHRcdCAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXG44MDExOlx0e1xuODAxMjpcdFx0aW50IHJldCwgbmlkID0gZGV2LVx1MDAzZWlkO1xuODAxMzpcdFxuODAxNDpcdFx0cmV0ID0gdXNlcl9wcm9hY3RpdmVfcmVjbGFpbSgoY2hhciAqKWJ1ZiwgTlVMTCwgTk9ERV9EQVRBKG5pZCkpO1xuODAxNTpcdFx0cmV0dXJuIHJldCA/IHJldCA6IGNvdW50O1xuODAxNjpcdH1cbjgwMTc6XHRcbjgwMTg6XHRzdGF0aWMgREVWSUNFX0FUVFJfV08ocmVjbGFpbSk7XG44MDE5Olx0aW50IHJlY2xhaW1fcmVnaXN0ZXJfbm9kZShzdHJ1Y3Qgbm9kZSAqbm9kZSlcbjgwMjA6XHR7XG44MDIxOlx0XHRyZXR1cm4gZGV2aWNlX2NyZWF0ZV9maWxlKFx1MDAyNm5vZGUtXHUwMDNlZGV2LCBcdTAwMjZkZXZfYXR0cl9yZWNsYWltKTtcbjgwMjI6XHR9XG44MDIzOlx0XG44MDI0Olx0dm9pZCByZWNsYWltX3VucmVnaXN0ZXJfbm9kZShzdHJ1Y3Qgbm9kZSAqbm9kZSlcbjgwMjU6XHR7XG44MDI2Olx0XHRyZXR1cm4gZGV2aWNlX3JlbW92ZV9maWxlKFx1MDAyNm5vZGUtXHUwMDNlZGV2LCBcdTAwMjZkZXZfYXR0cl9yZWNsYWltKTtcbjgwMjc6XHR9XG44MDI4Olx0I2VuZGlmXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDA3OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMTg0CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUuLi4gSSYjMzk7bSBsb29raW5nIGF0IGByZWNsYWltX3N0b3JlYCwgd2hpY2ggSSByZW1lbWJlciBiZWluZyBpbiBgbW0vdm1zY2FuLmNgLiBXYWl0IGEgbWludXRlLi4uIEkgaGF2ZSBhIGZlZWxpbmcgdGhhdCBmdW5jdGlvbiBtaWdodCBiZSBjb25kaXRpb25hbGx5IGNvbXBpbGVkLiBSaWdodCwgSSBuZWVkIHRvIGNoZWNrIGlmIGl0JiMzOTtzIGRlcGVuZGVudCBvbiBhIGAjaWZkZWYgQ09ORklHX05VTUFgIG9yIHNvbWV0aGluZyBzaW1pbGFyLiBCZXN0IHdheSB0byBjb25maXJtIHF1aWNrbHkgaXMgdG8gZmluZCB0aGUgY29ycmVzcG9uZGluZyBgI2VuZGlmYC4gQWxyaWdodCwgbGV0JiMzOTtzIHpvb20gaW4gb24gbGluZSA4MDI4IGFuZCBzZWUgaWYgdGhhdCBpcyB0aGUgY29udHJvbGxpbmcgY29uZGl0aW9uYWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDA3OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0OyNpZmRlZi4qTlVNQSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTc2MjE9c3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgdm1zY2FuX3N5c2N0bF90YWJsZVtdID0ge1xuLS1cbm1tL3Ztc2Nhbi5jLTc2MzAtXHR9LFxubW0vdm1zY2FuLmM6NzYzMTojaWZkZWYgQ09ORklHX05VTUFcbm1tL3Ztc2Nhbi5jLTc2MzItXHR7XG4tLVxubW0vdm1zY2FuLmM9NzY1Mz1tb2R1bGVfaW5pdChrc3dhcGRfaW5pdClcbm1tL3Ztc2Nhbi5jLTc2NTQtXG5tbS92bXNjYW4uYzo3NjU1OiNpZmRlZiBDT05GSUdfTlVNQVxubW0vdm1zY2FuLmMtNzY1Ni0vKlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAwNzowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTUzMgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhIGZpcnN0LXBlcnNvbiBleHBlcnQgc3VtbWFyeToKCioqRGlnZ2luZyBpbnRvIG1tL3Ztc2Nhbi5jOiBFeHBsb3JpbmcgQ29uZGl0aW9uYWwgQ29tcGlsYXRpb24qKgoKQWxyaWdodCwgSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB3aGF0JiMzOTtzIGdvaW5nIG9uIHdpdGggdGhpcyBjb2RlLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZ29pbmcgdG8ganVtcCBpbnRvIGBtbS92bXNjYW4uY2AgYW5kIHRha2UgYSBsb29rIGFyb3VuZCBsaW5lIDc2NTUuIE15IG1haW4gZ29hbCBoZXJlIGlzIHRvIGZpZ3VyZSBvdXQgd2hhdCBmdW5jdGlvbmFsaXR5IGlzIGJlaW5nIGNvbnRyb2xsZWQgYnkgdGhhdCBgI2lmZGVmYCBkaXJlY3RpdmUuIEkgc3VzcGVjdCBpdCYjMzk7cyBsaWtlbHkgcmVsYXRlZCB0byBzb21lIGtpbmQgb2YgZmVhdHVyZSB0b2dnbGUsIHBvc3NpYmx5IGEgZGVidWcgbW9kZSwgb3IgbWF5YmUgYSBwbGF0Zm9ybS1zcGVjaWZpYyBvcHRpbWl6YXRpb24uIFVuZGVyc3RhbmRpbmcgdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIHBhdGggaXMgY3J1Y2lhbCBmb3IgbWUgdG8gZnVsbHkgZ3Jhc3AgdGhlIGV4ZWN1dGlvbiBmbG93IGFuZCB0aGUgdmFyaW91cyBjb2RlIHBhdGhzIHdpdGhpbiB0aGUgdmlydHVhbCBtZW1vcnkgbWFuYWdlbWVudCBzeXN0ZW0uIEtub3dpbmcgd2hpY2ggc2VjdGlvbnMgb2YgY29kZSBhcmUgaW5jbHVkZWQgb3IgZXhjbHVkZWQgYmFzZWQgb24gdGhlIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzIHdpbGwgYWxzbyBoZWxwIG1lIHVuZGVyc3RhbmQgaG93IHRoaXMgY29kZSBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgc3lzdGVtLCBhbmQgd2hhdCBpbXBhY3QgaXQgaGFzIG9uIHBlcmZvcm1hbmNlIGFuZCByZXNvdXJjZSB1dGlsaXphdGlvbiBpbiBkaWZmZXJlbnQgY29uZmlndXJhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDA3OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3NjU1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0Ozc2NTU6XHQjaWZkZWYgQ09ORklHX05VTUFcbjc2NTY6XHQvKlxuNzY1NzpcdCAqIE5vZGUgcmVjbGFpbSBtb2RlXG43NjU4Olx0ICpcbjc2NTk6XHQgKiBJZiBub24temVybyBjYWxsIG5vZGVfcmVjbGFpbSB3aGVuIHRoZSBudW1iZXIgb2YgZnJlZSBwYWdlcyBmYWxscyBiZWxvd1xuNzY2MDpcdCAqIHRoZSB3YXRlcm1hcmtzLlxuNzY2MTpcdCAqL1xuNzY2MjpcdGludCBub2RlX3JlY2xhaW1fbW9kZSBfX3JlYWRfbW9zdGx5O1xuNzY2MzpcdFxuNzY2NDpcdC8qXG43NjY1Olx0ICogUHJpb3JpdHkgZm9yIE5PREVfUkVDTEFJTS4gVGhpcyBkZXRlcm1pbmVzIHRoZSBmcmFjdGlvbiBvZiBwYWdlc1xuNzY2NjpcdCAqIG9mIGEgbm9kZSBjb25zaWRlcmVkIGZvciBlYWNoIHpvbmVfcmVjbGFpbS4gNCBzY2FucyAxLzE2dGggb2Zcbjc2Njc6XHQgKiBhIHpvbmUuXG43NjY4Olx0ICovXG43NjY5Olx0I2RlZmluZSBOT0RFX1JFQ0xBSU1fUFJJT1JJVFkgNFxuNzY3MDpcdFxuNzY3MTpcdC8qXG43NjcyOlx0ICogUGVyY2VudGFnZSBvZiBwYWdlcyBpbiBhIHpvbmUgdGhhdCBtdXN0IGJlIHVubWFwcGVkIGZvciBub2RlX3JlY2xhaW0gdG9cbjc2NzM6XHQgKiBvY2N1ci5cbjc2NzQ6XHQgKi9cbjc2NzU6XHRpbnQgc3lzY3RsX21pbl91bm1hcHBlZF9yYXRpbyA9IDE7XG43Njc2Olx0XG43Njc3Olx0Lypcbjc2Nzg6XHQgKiBJZiB0aGUgbnVtYmVyIG9mIHNsYWIgcGFnZXMgaW4gYSB6b25lIGdyb3dzIGJleW9uZCB0aGlzIHBlcmNlbnRhZ2UgdGhlblxuNzY3OTpcdCAqIHNsYWIgcmVjbGFpbSBuZWVkcyB0byBvY2N1ci5cbjc2ODA6XHQgKi9cbjc2ODE6XHRpbnQgc3lzY3RsX21pbl9zbGFiX3JhdGlvID0gNTtcbjc2ODI6XHRcbjc2ODM6XHRzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbm9kZV91bm1hcHBlZF9maWxlX3BhZ2VzKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQpXG43Njg0Olx0e1xuNzY4NTpcdFx0dW5zaWduZWQgbG9uZyBmaWxlX21hcHBlZCA9IG5vZGVfcGFnZV9zdGF0ZShwZ2RhdCwgTlJfRklMRV9NQVBQRUQpO1xuNzY4NjpcdFx0dW5zaWduZWQgbG9uZyBmaWxlX2xydSA9IG5vZGVfcGFnZV9zdGF0ZShwZ2RhdCwgTlJfSU5BQ1RJVkVfRklMRSkgJiM0Mztcbjc2ODc6XHRcdFx0bm9kZV9wYWdlX3N0YXRlKHBnZGF0LCBOUl9BQ1RJVkVfRklMRSk7XG43Njg4Olx0XG43Njg5Olx0XHQvKlxuNzY5MDpcdFx0ICogSXQmIzM5O3MgcG9zc2libGUgZm9yIHRoZXJlIHRvIGJlIG1vcmUgZmlsZSBtYXBwZWQgcGFnZXMgdGhhblxuNzY5MTpcdFx0ICogYWNjb3VudGVkIGZvciBieSB0aGUgcGFnZXMgb24gdGhlIGZpbGUgTFJVIGxpc3RzIGJlY2F1c2Vcbjc2OTI6XHRcdCAqIHRtcGZzIHBhZ2VzIGFjY291bnRlZCBmb3IgYXMgQU5PTiBjYW4gYWxzbyBiZSBGSUxFX01BUFBFRFxuNzY5MzpcdFx0ICovXG43Njk0Olx0XHRyZXR1cm4gKGZpbGVfbHJ1IFx1MDAzZSBmaWxlX21hcHBlZCkgPyAoZmlsZV9scnUgLSBmaWxlX21hcHBlZCkgOiAwO1xuNzY5NTpcdH1cbjc2OTY6XHRcbjc2OTc6XHQvKiBXb3JrIG91dCBob3cgbWFueSBwYWdlIGNhY2hlIHBhZ2VzIHdlIGNhbiByZWNsYWltIGluIHRoaXMgcmVjbGFpbV9tb2RlICovXG43Njk4Olx0c3RhdGljIHVuc2lnbmVkIGxvbmcgbm9kZV9wYWdlY2FjaGVfcmVjbGFpbWFibGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdClcbjc2OTk6XHR7XG43NzAwOlx0XHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VjYWNoZV9yZWNsYWltYWJsZTtcbjc3MDE6XHRcdHVuc2lnbmVkIGxvbmcgZGVsdGEgPSAwO1xuNzcwMjpcdFxuNzcwMzpcdFx0Lypcbjc3MDQ6XHRcdCAqIElmIFJFQ0xBSU1fVU5NQVAgaXMgc2V0LCB0aGVuIGFsbCBmaWxlIHBhZ2VzIGFyZSBjb25zaWRlcmVkXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDA3OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNTY2CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKk5hdmlnYXRpbmcgYSBMYWJ5cmludGhpbmUgQ29kZWJhc2UqKgoKT2theSwgc28gSSYjMzk7bSB0cnlpbmcgdG8gdHJhY2sgZG93biB3aGVyZSBgcmVjbGFpbV9zdG9yZWAgaXMgZGVmaW5lZC4gSSBrbm93IGl0JiMzOTtzIHNvbWV3aGVyZSBpbiB0aGlzIG1hc3NpdmUgY29kZWJhc2UsIGFuZCB0aGUgbGluZSBudW1iZXIgSSBoYXZlIGlzIDgwMDguIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LCBidXQgd2l0aG91dCBjb250ZXh0LCBpdCYjMzk7cyBqdXN0IGEgbnVtYmVyLiBHaXZlbiB0aGUgbmF0dXJlIG9mIHRoaXMgcHJvamVjdCwgSSBzdHJvbmdseSBzdXNwZWN0IGl0IG1pZ2h0IGJlIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQuIE15IHByaW1hcnkgc3VzcGljaW9uIGlzIHRoYXQgdGhpcyBmdW5jdGlvbmFsaXR5IGlzIHRpZWQgdG8gTlVNQSAoTm9uLVVuaWZvcm0gTWVtb3J5IEFjY2Vzcykgc3lzdGVtcy4gVGhlc2UgYXJlIGNvbXBsZXggYXJjaGl0ZWN0dXJlcywgYW5kIHN0b3JlIHJlY2xhbWF0aW9uIGNvdWxkIGJlIHZlcnkgZGlmZmVyZW50IGlmIE5VTUEgaXMgZW5hYmxlZC4gU28sIHRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gZG8gaXMgcXVpY2tseSBjaGVjayBpZiBsaW5lIDgwMDggaXMgbmVzdGxlZCB3aXRoaW4gYW4gYCNpZmRlZiBDT05GSUdfTlVNQWAgYmxvY2suIElmIGl0IGlzLCB0aGVuIEkmIzM5O2xsIGtub3cgSSYjMzk7bSBvbiB0aGUgcmlnaHQgdHJhY2s7IG15IGFzc3VtcHRpb25zIGFyZSBob2xkaW5nLCBhbmQgSSBzaG91bGQgZm9jdXMgbXkgZGVlcGVyIGludmVzdGlnYXRpb24gdG8gdGhhdCBzcGVjaWZpYyBwYXJ0IG9mIHRoZSBjb2RlLiBJZiBub3QsIHRoZW4gSSYjMzk7bSBnb2luZyB0byBoYXZlIHRvIGJyb2FkZW4gdGhlIHNlYXJjaCBwYXJhbWV0ZXJzLCBsb29rIGF0IHRoZSBidWlsZCBjb25maWd1cmF0aW9uLCBhbmQgdHJ5IHRvIHVuZGVyc3RhbmQgd2hhdCBvdGhlciBjb25kaXRpb25zIG1pZ2h0IGJlIGdvdmVybmluZyB0aGUgcHJlc2VuY2Ugb2YgdGhpcyBmdW5jdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMDc6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDc5ODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7Nzk4MDpcdFxuNzk4MTpcdFx0XHRwZ3NjYW5uZWQgJiM0Mzs9IG5yX3BhZ2VzO1xuNzk4MjpcdFxuNzk4MzpcdFx0XHQvKiBibG9jayBtZW1jZyBtaWdyYXRpb24gd2hpbGUgdGhlIGZvbGlvIG1vdmVzIGJldHdlZW4gbHJ1cyAqL1xuNzk4NDpcdFx0XHRpZiAoIWZvbGlvX3Rlc3RfY2xlYXJfbHJ1KGZvbGlvKSlcbjc5ODU6XHRcdFx0XHRjb250aW51ZTtcbjc5ODY6XHRcbjc5ODc6XHRcdFx0bHJ1dmVjID0gZm9saW9fbHJ1dmVjX3JlbG9ja19pcnEoZm9saW8sIGxydXZlYyk7XG43OTg4Olx0XHRcdGlmIChmb2xpb19ldmljdGFibGUoZm9saW8pIFx1MDAyNlx1MDAyNiBmb2xpb190ZXN0X3VuZXZpY3RhYmxlKGZvbGlvKSkge1xuNzk4OTpcdFx0XHRcdGxydXZlY19kZWxfZm9saW8obHJ1dmVjLCBmb2xpbyk7XG43OTkwOlx0XHRcdFx0Zm9saW9fY2xlYXJfdW5ldmljdGFibGUoZm9saW8pO1xuNzk5MTpcdFx0XHRcdGxydXZlY19hZGRfZm9saW8obHJ1dmVjLCBmb2xpbyk7XG43OTkyOlx0XHRcdFx0cGdyZXNjdWVkICYjNDM7PSBucl9wYWdlcztcbjc5OTM6XHRcdFx0fVxuNzk5NDpcdFx0XHRmb2xpb19zZXRfbHJ1KGZvbGlvKTtcbjc5OTU6XHRcdH1cbjc5OTY6XHRcbjc5OTc6XHRcdGlmIChscnV2ZWMpIHtcbjc5OTg6XHRcdFx0X19jb3VudF92bV9ldmVudHMoVU5FVklDVEFCTEVfUEdSRVNDVUVELCBwZ3Jlc2N1ZWQpO1xuNzk5OTpcdFx0XHRfX2NvdW50X3ZtX2V2ZW50cyhVTkVWSUNUQUJMRV9QR1NDQU5ORUQsIHBnc2Nhbm5lZCk7XG44MDAwOlx0XHRcdGxydXZlY191bmxvY2tfaXJxKGxydXZlYyk7XG44MDAxOlx0XHR9IGVsc2UgaWYgKHBnc2Nhbm5lZCkge1xuODAwMjpcdFx0XHRjb3VudF92bV9ldmVudHMoVU5FVklDVEFCTEVfUEdTQ0FOTkVELCBwZ3NjYW5uZWQpO1xuODAwMzpcdFx0fVxuODAwNDpcdH1cbjgwMDU6XHRFWFBPUlRfU1lNQk9MX0dQTChjaGVja19tb3ZlX3VuZXZpY3RhYmxlX2ZvbGlvcyk7XG44MDA2Olx0XG44MDA3Olx0I2lmIGRlZmluZWQoQ09ORklHX1NZU0ZTKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfTlVNQSlcbjgwMDg6XHRzdGF0aWMgc3NpemVfdCByZWNsYWltX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcbjgwMDk6XHRcdFx0XHQgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuODAxMDpcdFx0XHRcdCAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXG44MDExOlx0e1xuODAxMjpcdFx0aW50IHJldCwgbmlkID0gZGV2LVx1MDAzZWlkO1xuODAxMzpcdFxuODAxNDpcdFx0cmV0ID0gdXNlcl9wcm9hY3RpdmVfcmVjbGFpbSgoY2hhciAqKWJ1ZiwgTlVMTCwgTk9ERV9EQVRBKG5pZCkpO1xuODAxNTpcdFx0cmV0dXJuIHJldCA/IHJldCA6IGNvdW50O1xuODAxNjpcdH1cbjgwMTc6XHRcbjgwMTg6XHRzdGF0aWMgREVWSUNFX0FUVFJfV08ocmVjbGFpbSk7XG44MDE5Olx0aW50IHJlY2xhaW1fcmVnaXN0ZXJfbm9kZShzdHJ1Y3Qgbm9kZSAqbm9kZSlcbjgwMjA6XHR7XG44MDIxOlx0XHRyZXR1cm4gZGV2aWNlX2NyZWF0ZV9maWxlKFx1MDAyNm5vZGUtXHUwMDNlZGV2LCBcdTAwMjZkZXZfYXR0cl9yZWNsYWltKTtcbjgwMjI6XHR9XG44MDIzOlx0XG44MDI0Olx0dm9pZCByZWNsYWltX3VucmVnaXN0ZXJfbm9kZShzdHJ1Y3Qgbm9kZSAqbm9kZSlcbjgwMjU6XHR7XG44MDI2Olx0XHRyZXR1cm4gZGV2aWNlX3JlbW92ZV9maWxlKFx1MDAyNm5vZGUtXHUwMDNlZGV2LCBcdTAwMjZkZXZfYXR0cl9yZWNsYWltKTtcbjgwMjc6XHR9XG44MDI4Olx0I2VuZGlmXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDA3OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNjU0CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMjAwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYHJlY2xhaW1fc3RvcmVgIEZ1bmN0aW9uYWxpdHkqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gaG93IHRoaXMgYHJlY2xhaW1fc3RvcmVgIGZ1bmN0aW9uIGJlaGF2ZXMsIHNwZWNpZmljYWxseSBjb25zaWRlcmluZyBpdHMgZGVwZW5kZW5jaWVzLiBJIHNlZSB0aGF0IGl0JiMzOTtzIG5lc3RsZWQgdW5kZXIgYm90aCBgQ09ORklHX1NZU0ZTYCBhbmQgYENPTkZJR19OVU1BYCwgd2hpY2ggaW1tZWRpYXRlbHkgcmFpc2VzIGEgZmxhZy4gRXZlbiBpZiBgQ09ORklHX01FTUNHYCBpcyBkaXNhYmxlZCwgZW5hYmxpbmcgYm90aCBgTlVNQWAgYW5kIGBTWVNGU2Agb3BlbnMgYSBwb3RlbnRpYWwgZG9vci4gSXQgbG9va3MgbGlrZSBhIHVzZXIgY291bGQgdHJpZ2dlciBwcm9hY3RpdmUgcmVjbGFpbSBvbiBhIG5vZGUgZGlyZWN0bHkgdGhyb3VnaCBzeXNmcyB1bmRlciB0aG9zZSBjb25kaXRpb25zLgoKSWYgdGhhdCBoYXBwZW5zLCBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgZ2V0cyBjYWxsZWQuIExldCYjMzk7cyBzZWUuLi4gaXQgcGFyc2VzIHRoZSBpbnB1dCBidWZmZXIuIEFoLCBpZiBpdCBmaW5kcyBgc3dhcHBpbmVzcz1YYCwgaXQgdXBkYXRlcyB0aGUgYHN3YXBwaW5lc3NgIHZhbHVlIGFuZCBwYXNzZXMgdGhhdCBwb2ludGVyIHRvIGBzYy5wcm9hY3RpdmVfc3dhcHBpbmVzc2AuIFRoZSBhY3Rpb24gdGhlbiB0cmlnZ2VycyBgX19ub2RlX3JlY2xhaW1gLiBUaGlzLCBpbiB0dXJuLCBzZWVtcyB0byBldmVudHVhbGx5IGJvaWwgZG93biB0byBlaXRoZXIgYHNocmlua19ub2RlYCBvciBzaW1pbGFyIGZ1bmN0aW9ucywgd2hpY2ggcmVseSBvbiBgc2Nfc3dhcHBpbmVzcyhzYywgbWVtY2cpYC4KCkhvbGQgb24sIEkgbmVlZCB0byBjaGVjayB3aGVyZSBgX19ub2RlX3JlY2xhaW1gIGlzIGRlZmluZWQsIGFoIHllcywgYG1tL3Ztc2Nhbi5jYC4gQWxyaWdodCwgSSBuZWVkIHRvIGdvIGJhY2sgYW5kIGNoZWNrIGV4YWN0bHkgaG93IHRoZSBgc2Nfc3dhcHBpbmVzc2AgZnVuY3Rpb24gaXMgdXRpbGl6ZWQgd2l0aGluIHRoZSBzY29wZSBvZiB0aGlzIHBhcnRpY3VsYXIgZnVuY3Rpb24uIEl0IHNlZW1zIGxpa2UgdGhlIHN3YXBwaW5lc3MgZmFjdG9yIGlzIGtleSBoZXJlIGFuZCB0aGF0JiMzOTtzIHNvbWV0aGluZyBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAwNzowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzY19zd2FwcGluZXNzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTc1PXN0cnVjdCBzY2FuX2NvbnRyb2wge1xuLS1cbm1tL3Ztc2Nhbi5jLTk2LVxubW0vdm1zY2FuLmM6OTc6XHQvKiBTd2FwcGluZXNzIHZhbHVlIGZvciBwcm9hY3RpdmUgcmVjbGFpbS4gQWx3YXlzIHVzZSBzY19zd2FwcGluZXNzKCkhICovXG5tbS92bXNjYW4uYy05OC1cdGludCAqcHJvYWN0aXZlX3N3YXBwaW5lc3M7XG4tLVxubW0vdm1zY2FuLmM9MjAwPWludCB2bV9zd2FwcGluZXNzID0gNjA7XG5tbS92bXNjYW4uYy0yMDEtXG5tbS92bXNjYW4uYzoyMDI6c3RhdGljIGludCBzY19zd2FwcGluZXNzKHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG5tbS92bXNjYW4uYy0yMDMte1xuLS1cbm1tL3Ztc2Nhbi5jPTI0Nzk9c3RhdGljIHZvaWQgZ2V0X3NjYW5fY291bnQoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYyxcbi0tXG5tbS92bXNjYW4uYy0yNDgzLVx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbHJ1dmVjX21lbWNnKGxydXZlYyk7XG5tbS92bXNjYW4uYzoyNDg0Olx0aW50IHN3YXBwaW5lc3MgPSBzY19zd2FwcGluZXNzKHNjLCBtZW1jZyk7XG5tbS92bXNjYW4uYy0yNDg1LVx0dTY0IGZyYWN0aW9uW0FOT05fQU5EX0ZJTEVdO1xuLS1cbm1tL3Ztc2Nhbi5jPTI2ODc9c3RhdGljIGludCBnZXRfc3dhcHBpbmVzcyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTI2OTgtXG5tbS92bXNjYW4uYzoyNjk5Olx0cmV0dXJuIHNjX3N3YXBwaW5lc3Moc2MsIG1lbWNnKTtcbm1tL3Ztc2Nhbi5jLTI3MDAtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAwNzowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDU4MwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDQzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFN3YXBwaW5lc3MgQmVoYXZpb3IgQ2hhbmdlKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gZGlnZ2luZyBpbnRvIHRoaXMgcGF0Y2guIEJlZm9yZSB0aGlzIGNoYW5nZSwgdGhlIGBzY19zd2FwcGluZXNzYCBmdW5jdGlvbiBoYWQgYSBuYXN0eSBsaXR0bGUgZ290Y2hhOiBpZiBgQ09ORklHX01FTUNHYCB3YXMgZGlzYWJsZWQsIGFueSBjdXN0b20gYHN3YXBwaW5lc3NgIHZhbHVlIGEgdXNlciBzZXQgdmlhIHN5c2ZzIHRvIHRyaWdnZXIgcHJvYWN0aXZlIHJlY2xhaW0gd2FzIGNvbXBsZXRlbHkgaWdub3JlZC4gSXQgd291bGQganVzdCBkZWZhdWx0IHRvIHRoZSBnbG9iYWwgYHZtX3N3YXBwaW5lc3NgLiBUaGF0JiMzOTtzIG5vdCBpZGVhbCwgZXNwZWNpYWxseSBmb3IgYW55b25lIHRyeWluZyB0byBmaW5lbHkgdHVuZSBtZW1vcnkgbWFuYWdlbWVudCBpbiBhIHN5c3RlbSB3aXRob3V0IG1lbWNnIGVuYWJsZWQuCgpUaGlzIHBhdGNoIGFkZHJlc3NlcyB0aGF0IGRpcmVjdGx5LiBJdCYjMzk7cyBub3cgdW5jb25kaXRpb25hbGx5IGRlZmluZWQgdG8gdXNlIHRoZSBgc2MtJmd0O3Byb2FjdGl2ZV9zd2FwcGluZXNzYCB2YWx1ZSAqaWYqIHByb2FjdGl2ZSByZWNsYWltIGlzIGJlaW5nIHVzZWQuIElmIG5vIHByb2FjdGl2ZSBgc3dhcHBpbmVzc2AgaXMgc2V0IGl0IGZhbGxzIGJhY2sgdG8gdGhlIGRlZmF1bHQgYG1lbV9jZ3JvdXBfc3dhcHBpbmVzc2AgaWYgYG1lbWNnYCBpcyBlbmFibGVkLiBUaGF0JiMzOTtzIGEgc29saWQgaW1wcm92ZW1lbnQhIE5vdywgZXZlbiB3aXRob3V0IG1lbWNnLCB0aGUgdXNlci1kZWZpbmVkIGBzd2FwcGluZXNzYCBpbiB0aGUgc3lzZnMgbm9kZSB3aWxsIGFjdHVhbGx5IGJlIHJlc3BlY3RlZCBkdXJpbmcgcHJvYWN0aXZlIHJlY2xhaW0uIEl0JiMzOTtzIGEgY2xlYXIgZnVuY3Rpb25hbCBpbXByb3ZlbWVudC4KCkxldCYjMzk7cyBtYWtlIHN1cmUgdGhpcyBhbGwgaG9sZHMgdXAuIEZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSB0aGF0IGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCAqY2FuKiBiZSBjYWxsZWQgd2hlbiBgQ09ORklHX01FTUNHYCBpcyBvZmYuIFJpZ2h0LCBpdCYjMzk7cyB0aWVkIHRvIGBDT05GSUdfU1lTRlNgIGFuZCBgQ09ORklHX05VTUFgLCBub3QgYENPTkZJR19NRU1DR2AsIHNvIHRoYXQgc2hvdWxkIGJlIGZpbmUuIE9rYXksIHdoZXJlIGVsc2UgaXMgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gIGJlaW5nIGNhbGxlZD8gTGV0JiMzOTtzIGNoZWNrIGBtbS9tZW1jb250cm9sLmNgLiBOb3BlLCB0aGF0IHBhcnQgb2YgdGhlIGNvZGUgaXMgb25seSBjb21waWxlZCBpZiBgQ09ORklHX01FTUNHYCBpcyBlbmFibGVkLiBIb3dldmVyLCBgbW0vdm1zY2FuLmNgIGlzIGFsd2F5cyBjb21waWxlZC4gU28sIGV2ZW4gd2l0aG91dCBgQ09ORklHX01FTUNHYCwgdGhlIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCBmdW5jdGlvbiBpcyBjb21waWxlZCBhbmQgaXMgYWNjZXNzaWJsZSB2aWEgdGhlIHN5c2ZzIG5vZGUgYHJlY2xhaW1gLiBKdXN0IHdhbnQgdG8gdHJpcGxlLWNoZWNrIHRoYXQuIFNlZW1zIHRvIGJlIHdvcmtpbmcgYXMgZXhwZWN0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDA3OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3VzZXJfcHJvYWN0aXZlX3JlY2xhaW0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bXNjYW4uYz03ODQ5PXN0YXRpYyBjb25zdCBtYXRjaF90YWJsZV90IHRva2VucyA9IHtcbi0tXG5tbS92bXNjYW4uYy03ODU0LVxubW0vdm1zY2FuLmM6Nzg1NTppbnQgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbShjaGFyICpidWYsXG5tbS92bXNjYW4uYy03ODU2LVx0XHRcdCAgIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgcGdfZGF0YV90ICpwZ2RhdClcbi0tXG5tbS92bXNjYW4uYz04MDA4PXN0YXRpYyBzc2l6ZV90IHJlY2xhaW1fc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbm1tL3Ztc2Nhbi5jLTgwMTMtXG5tbS92bXNjYW4uYzo4MDE0Olx0cmV0ID0gdXNlcl9wcm9hY3RpdmVfcmVjbGFpbSgoY2hhciAqKWJ1ZiwgTlVMTCwgTk9ERV9EQVRBKG5pZCkpO1xubW0vdm1zY2FuLmMtODAxNS1cdHJldHVybiByZXQgPyByZXQgOiBjb3VudDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMDc6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU2NzAKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHRoaXMgdGFzaywgYXMgaWYgdGhlc2Ugd2VyZSBteSBpbnRlcm5hbCB0aG91Z2h0czoKCioqSW52ZXN0aWdhdGluZyBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgaW4gYG1tL3Ztc2Nhbi5jYCB1bmRlciBgQ09ORklHX01FTUNHYCoqCgpBbHJpZ2h0LCBzbyB3ZSBuZWVkIHRvIHNlZSB3aGVyZSBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgaXMgYmVpbmcgdXNlZCwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYG1tL3Ztc2Nhbi5jYCBmaWxlLiBUaGUgYWRkZWQgd3JpbmtsZSBpcyB0aGF0IHdlJiMzOTtyZSBvbmx5IGludGVyZXN0ZWQgaW4gaXRzIG9jY3VycmVuY2VzICppZiogdGhleSYjMzk7cmUgd3JhcHBlZCBpbnNpZGUgYW4gYCNpZmRlZiBDT05GSUdfTUVNQ0dgIHByZXByb2Nlc3NvciBkaXJlY3RpdmUuIFRoaXMgc3VnZ2VzdHMgYSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBzY2VuYXJpbywgYW5kIHdlIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAmIzM5O3MgYmVoYXZpb3Igb3IgaW5jbHVzaW9uIGluIHRoZSBjb2RlIGlzIHRpZWQgdG8gdGhlIG1lbW9yeSBjb250cm9sIGdyb3VwIGZ1bmN0aW9uYWxpdHkuIFRoaXMgaXMgYSBjb21tb24gcGF0dGVybiwgYW5kIHByb2JhYmx5IGluZGljYXRlcyBhIGZ1bmN0aW9uL3ZhcmlhYmxlIGlzIHNwZWNpZmljYWxseSBwYXJ0IG9mIHRoZSBNRU1DRyBjb2RlIHBhdGguCgpFc3NlbnRpYWxseSwgSSYjMzk7bSBnb2luZyB0byBsb29rIGZvciBsaW5lcyBpbiBgbW0vdm1zY2FuLmNgIHRoYXQgbG9vayBzb21ldGhpbmcgbGlrZSB0aGlzOgoKYGBgYwojaWZkZWYgQ09ORklHX01FTUNHCiAgLy8gU29tZXRoaW5nIHVzaW5nIHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0gaGVyZQojZW5kaWYKYGBgCgpJJiMzOTtsbCBiZSBzcGVjaWZpY2FsbHkgc2Nhbm5pbmcgZm9yIGxpbmVzIHRoYXQgZGVmaW5lIHRoaXMgdmFyaWFibGUgYW5kIHdoYXQgaXQgaXMgdXNlZCBmb3IgaW4gdGhlIE1FTUNHIGNvbmZpZy4KSSB3aWxsIGhhdmUgdG8gZmlndXJlIG91dCBob3cgdGhpcyBpcyBkb25lIGJlc3QsIHN1Y2ggYXMgZ3JlcCB3aXRoIHJlZ2V4LCBvciB0aHJvdWdoIG90aGVyIHRvb2xzLiBUaGlzIHdpbGwgZ2l2ZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIGV4cGxvcmluZyB0aGF0IHBhcnQgb2YgdGhlIGNvZGUuCgpUaGlzIHdpbGwgZ2l2ZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIG15IGludmVzdGlnYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDA3OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0OyNpZmRlZi4qTUVNQ0cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bXNjYW4uYz0yMDI9c3RhdGljIGludCBzY19zd2FwcGluZXNzKHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4tLVxubW0vdm1zY2FuLmMtMjA4LVxubW0vdm1zY2FuLmM6MjA5OiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL3Ztc2Nhbi5jLTIxMC1cbi0tXG5tbS92bXNjYW4uYz0yNjY3PXN0YXRpYyBzdHJ1Y3QgbHJ1dmVjICpnZXRfbHJ1dmVjKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IG5pZClcbi0tXG5tbS92bXNjYW4uYy0yNjcwLVxubW0vdm1zY2FuLmM6MjY3MTojaWZkZWYgQ09ORklHX01FTUNHXG5tbS92bXNjYW4uYy0yNjcyLVx0aWYgKG1lbWNnKSB7XG4tLVxubW0vdm1zY2FuLmM9MjgyMT1zdGF0aWMgc3RydWN0IGxydV9nZW5fbW1fbGlzdCAqZ2V0X21tX2xpc3Qoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuLS1cbm1tL3Ztc2Nhbi5jLTI4MjctXG5tbS92bXNjYW4uYzoyODI4OiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL3Ztc2Nhbi5jLTI4MjktXHRpZiAobWVtY2cpXG4tLVxubW0vdm1zY2FuLmM9Mjg2MT12b2lkIGxydV9nZW5fYWRkX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuLS1cbm1tL3Ztc2Nhbi5jLTI4NjctXHRWTV9XQVJOX09OX09OQ0UoIWxpc3RfZW1wdHkoXHUwMDI2bW0tXHUwMDNlbHJ1X2dlbi5saXN0KSk7XG5tbS92bXNjYW4uYzoyODY4OiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL3Ztc2Nhbi5jLTI4NjktXHRWTV9XQVJOX09OX09OQ0UobW0tXHUwMDNlbHJ1X2dlbi5tZW1jZyk7XG4tLVxubW0vdm1zY2FuLmM9Mjg4OD12b2lkIGxydV9nZW5fZGVsX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuLS1cbm1tL3Ztc2Nhbi5jLTI4OTYtXG5tbS92bXNjYW4uYzoyODk3OiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL3Ztc2Nhbi5jLTI4OTgtXHRtZW1jZyA9IG1tLVx1MDAzZWxydV9nZW4ubWVtY2c7XG4tLVxubW0vdm1zY2FuLmMtMjkyMC1cbm1tL3Ztc2Nhbi5jOjI5MjE6I2lmZGVmIENPTkZJR19NRU1DR1xubW0vdm1zY2FuLmMtMjkyMi1cdG1lbV9jZ3JvdXBfcHV0KG1tLVx1MDAzZWxydV9nZW4ubWVtY2cpO1xuLS1cbm1tL3Ztc2Nhbi5jLTI5MjYtXG5tbS92bXNjYW4uYzoyOTI3OiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL3Ztc2Nhbi5jLTI5Mjgtdm9pZCBscnVfZ2VuX21pZ3JhdGVfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4tLVxubW0vdm1zY2FuLmM9NDI5Nj1zdGF0aWMgdm9pZCBscnVfZ2VuX3JvdGF0ZV9tZW1jZyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCBvcClcbi0tXG5tbS92bXNjYW4uYy00MzQxLVxubW0vdm1zY2FuLmM6NDM0MjojaWZkZWYgQ09ORklHX01FTUNHXG5tbS92bXNjYW4uYy00MzQzLVxuLS1cbm1tL3Ztc2Nhbi5jPTU1MDI9c3RhdGljIGludCBscnVfZ2VuX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcbi0tXG5tbS92bXNjYW4uYy01NTE1LVxubW0vdm1zY2FuLmM6NTUxNjojaWZkZWYgQ09ORklHX01FTUNHXG5tbS92bXNjYW4uYy01NTE3LVx0XHRpZiAobWVtY2cpXG4tLVxubW0vdm1zY2FuLmM9NTc2OD12b2lkIGxydV9nZW5faW5pdF9scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxuLS1cbm1tL3Ztc2Nhbi5jLTU3ODctXG5tbS92bXNjYW4uYzo1Nzg4OiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL3Ztc2Nhbi5jLTU3ODktXG4tLVxubW0vdm1zY2FuLmM9NjY2Nj11bnNpZ25lZCBsb25nIHRyeV90b19mcmVlX3BhZ2VzKHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsIGludCBvcmRlcixcbi0tXG5tbS92bXNjYW4uYy02NzA4LVxubW0vdm1zY2FuLmM6NjcwOTojaWZkZWYgQ09ORklHX01FTUNHXG5tbS92bXNjYW4uYy02NzEwLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAwNzowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzAwNgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDc5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaXQgc3RhbmRzOgoKKipOYXZpZ2F0aW5nIHRoZSBDb2RlYmFzZSoqCgpPa2F5LCBzbyBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgaXMgZGVmaW5lZCBvbiBsaW5lIDc4NTUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjb250ZXh0LiBUaGUgY3JpdGljYWwgdGhpbmcgaGVyZSBpcyB3aGV0aGVyIGl0JiMzOTtzIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgb3Igbm90LiBMZXQmIzM5O3Mgc2VlIGlmIHRoZXJlIGFyZSBhbnkgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZGlyZWN0aXZlcyAoYCNpZmRlZmAsIGAjaWZuZGVmYCwgZXRjLikgdGhhdCBhZmZlY3QgaXQuIEkga25vdyB0aGF0IGBDT05GSUdfTUVNQ0dgIG9mdGVuIHBsYXlzIGEgcm9sZSBpbiBtZW1vcnkgbWFuYWdlbWVudC4gVGhlIGxhc3QgdGltZSB0aGlzIHNob3dlZCB1cCBwcmlvciB0byB0aGUgZGVmaW5pdGlvbiwgaXQgd2FzIGJhY2sgYXQgNjcwOS4gT2theSwgc28gdGhhdCBtZWFucyBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgKmlzbiYjMzk7dCogZGlyZWN0bHkgdW5kZXIgdGhlIGBDT05GSUdfTUVNQ0dgIGNvbmZpZ3VyYXRpb24uIFRoYXQmIzM5O3MgZ29vZCB0byBrbm93LiBOb3csIGJlZm9yZSBJIGFzc3VtZSBhbnl0aGluZywgSSBiZXR0ZXIgY2hlY2sgZm9yIGFueSBvdGhlciBgI2lmZGVmYCBkaXJlY3RpdmVzIGluIHRoZSBpbW1lZGlhdGUgdmljaW5pdHkgb2YgdGhhdCBsaW5lICg3ODU1KS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhIGRpZmZlcmVudCBjb25kaXRpb24gdGhhdCAqZG9lcyogaW1wYWN0IGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBjb2RlIGlzIG5vdCBpbXBhY3RlZCBieSB0aGlzIG9yIG90aGVyIGNvbmZpZ3VyYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAwNzowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzg0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs3ODQwOlx0fVxuNzg0MTpcdFxuNzg0MjpcdCNlbmRpZlxuNzg0MzpcdFxuNzg0NDpcdGVudW0ge1xuNzg0NTpcdFx0TUVNT1JZX1JFQ0xBSU1fU1dBUFBJTkVTUyA9IDAsXG43ODQ2Olx0XHRNRU1PUllfUkVDTEFJTV9TV0FQUElORVNTX01BWCxcbjc4NDc6XHRcdE1FTU9SWV9SRUNMQUlNX05VTEwsXG43ODQ4Olx0fTtcbjc4NDk6XHRzdGF0aWMgY29uc3QgbWF0Y2hfdGFibGVfdCB0b2tlbnMgPSB7XG43ODUwOlx0XHR7IE1FTU9SWV9SRUNMQUlNX1NXQVBQSU5FU1MsIFwmIzM0O3N3YXBwaW5lc3M9JWRcJiMzNDt9LFxuNzg1MTpcdFx0eyBNRU1PUllfUkVDTEFJTV9TV0FQUElORVNTX01BWCwgXCYjMzQ7c3dhcHBpbmVzcz1tYXhcJiMzNDt9LFxuNzg1MjpcdFx0eyBNRU1PUllfUkVDTEFJTV9OVUxMLCBOVUxMIH0sXG43ODUzOlx0fTtcbjc4NTQ6XHRcbjc4NTU6XHRpbnQgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbShjaGFyICpidWYsXG43ODU2Olx0XHRcdFx0ICAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBwZ19kYXRhX3QgKnBnZGF0KVxuNzg1NzpcdHtcbjc4NTg6XHRcdHVuc2lnbmVkIGludCBucl9yZXRyaWVzID0gTUFYX1JFQ0xBSU1fUkVUUklFUztcbjc4NTk6XHRcdHVuc2lnbmVkIGxvbmcgbnJfdG9fcmVjbGFpbSwgbnJfcmVjbGFpbWVkID0gMDtcbjc4NjA6XHRcdGludCBzd2FwcGluZXNzID0gLTE7XG43ODYxOlx0XHRjaGFyICpvbGRfYnVmLCAqc3RhcnQ7XG43ODYyOlx0XHRzdWJzdHJpbmdfdCBhcmdzW01BWF9PUFRfQVJHU107XG43ODYzOlx0XHRnZnBfdCBnZnBfbWFzayA9IEdGUF9LRVJORUw7XG43ODY0Olx0XG43ODY1Olx0XHRpZiAoIWJ1ZiB8fCAoIW1lbWNnIFx1MDAyNlx1MDAyNiAhcGdkYXQpIHx8IChtZW1jZyBcdTAwMjZcdTAwMjYgcGdkYXQpKVxuNzg2NjpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjc4Njc6XHRcbjc4Njg6XHRcdGJ1ZiA9IHN0cnN0cmlwKGJ1Zik7XG43ODY5Olx0XG43ODcwOlx0XHRvbGRfYnVmID0gYnVmO1xuNzg3MTpcdFx0bnJfdG9fcmVjbGFpbSA9IG1lbXBhcnNlKGJ1ZiwgXHUwMDI2YnVmKSAvIFBBR0VfU0laRTtcbjc4NzI6XHRcdGlmIChidWYgPT0gb2xkX2J1Zilcbjc4NzM6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG43ODc0Olx0XG43ODc1Olx0XHRidWYgPSBzdHJzdHJpcChidWYpO1xuNzg3NjpcdFxuNzg3NzpcdFx0d2hpbGUgKChzdGFydCA9IHN0cnNlcChcdTAwMjZidWYsIFwmIzM0OyBcJiMzNDspKSAhPSBOVUxMKSB7XG43ODc4Olx0XHRcdGlmICghc3RybGVuKHN0YXJ0KSlcbjc4Nzk6XHRcdFx0XHRjb250aW51ZTtcbjc4ODA6XHRcdFx0c3dpdGNoIChtYXRjaF90b2tlbihzdGFydCwgdG9rZW5zLCBhcmdzKSkge1xuNzg4MTpcdFx0XHRjYXNlIE1FTU9SWV9SRUNMQUlNX1NXQVBQSU5FU1M6XG43ODgyOlx0XHRcdFx0aWYgKG1hdGNoX2ludChcdTAwMjZhcmdzWzBdLCBcdTAwMjZzd2FwcGluZXNzKSlcbjc4ODM6XHRcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuNzg4NDpcdFx0XHRcdGlmIChzd2FwcGluZXNzIFx1MDAzYyBNSU5fU1dBUFBJTkVTUyB8fFxuNzg4NTpcdFx0XHRcdCAgICBzd2FwcGluZXNzIFx1MDAzZSBNQVhfU1dBUFBJTkVTUylcbjc4ODY6XHRcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuNzg4NzpcdFx0XHRcdGJyZWFrO1xuNzg4ODpcdFx0XHRjYXNlIE1FTU9SWV9SRUNMQUlNX1NXQVBQSU5FU1NfTUFYOlxuNzg4OTpcdFx0XHRcdHN3YXBwaW5lc3MgPSBTV0FQUElORVNTX0FOT05fT05MWTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMDc6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgxMjIKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgYSBNeXN0ZXJpb3VzIGAjZW5kaWZgKioKCk9rYXksIHNvIEkmIzM5O20gZGVlcCBpbiB0aGlzIGNvZGViYXNlLCBhbmQgSSYjMzk7dmUgaGl0IGEgYCNlbmRpZmAgYXQgbGluZSA3ODQyLiBUaGUgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzIGFsd2F5cywgJiMzNDtXaHkgaXMgKnRoaXMqIGAjZW5kaWZgIGhlcmUsIGFuZCB3aGF0IGNvbmRpdGlvbiBkb2VzIGl0IGNsb3NlPyYjMzQ7IEkgbmVlZCB0byBxdWlja2x5IGlkZW50aWZ5IHRoZSBjb3JyZXNwb25kaW5nIGAjaWZgLCBgI2lmZGVmYCwgb3IgYCNpZm5kZWZgIGRpcmVjdGl2ZS4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byB1c2UgbXkgSURFJiMzOTtzICYjMzQ7ZmluZCBtYXRjaGluZyBicmFjZS9kaXJlY3RpdmUmIzM0OyBmZWF0dXJlLCBidXQgSSBtYXkgbmVlZCB0byByZXNvcnQgdG8gYSBtb3JlIGJydXRlLWZvcmNlIHNlYXJjaCBpZiB0aGUgZWRpdG9yJiMzOTtzIGFuYWx5c2lzIGlzbiYjMzk7dCBwZXJmZWN0LgoKT25jZSBJJiMzOTt2ZSBsb2NhdGVkIHRoZSBvcGVuaW5nIGRpcmVjdGl2ZSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGludGVudC4gV2hhdCBwcmVwcm9jZXNzb3IgdmFyaWFibGUgaXMgYmVpbmcgdGVzdGVkPyBXaGF0JiMzOTtzIHRoZSBjb250ZXh0PyBJcyB0aGlzIGd1YXJkaW5nIGEgc3BlY2lmaWMgcGxhdGZvcm0tZGVwZW5kZW50IGNvZGUgYmxvY2ssIGFuIGV4cGVyaW1lbnRhbCBmZWF0dXJlLCBhIGRlYnVnZ2luZyBhaWQsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBJJiMzOTtsbCBwcm9iYWJseSBsb29rIGZvciB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgcHJlcHJvY2Vzc29yIHZhcmlhYmxlLiBXaGF0IGlzIHRoZSBsb2dpYyBiZWhpbmQgaXRzIGNvbmRpdGlvbmFsIHVzZT8KCklmIHRoZSBjb2RlIHdpdGhpbiB0aGUgYCNpZmAvYCNlbmRpZmAgYmxvY2sgaXMgbm9uLXRyaXZpYWwsIEkmIzM5O2xsIG5lZWQgdG8gYXNzZXNzIGl0cyBpbXBhY3Qgb24gdGhlIHN1cnJvdW5kaW5nIGNvZGUuIEFyZSB0aGVyZSBhbnkgZGVwZW5kZW5jaWVzPyBQb3RlbnRpYWwgc2lkZSBlZmZlY3RzPyBBcmUgdGhlcmUgYW55IG9idmlvdXMgYnVncyB0aGF0IGNvdWxkIGJlIGludHJvZHVjZWQgaWYgdGhlIGNvbmRpdGlvbiBldmFsdWF0ZXMgdG8gZmFsc2U/IENvdWxkIHRoZSBjb2RlIGJlIHNpbXBsaWZpZWQgb3IgcmVmYWN0b3JlZCB0byByZW1vdmUgdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uPyBEZXBlbmRpbmcgb24gdGhlIHNjb3BlLCBJIG1pZ2h0IGV2ZW4gbmVlZCB0byBjb25zaWRlciB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiBhbmQgd2hpY2ggb2YgdGhlIGNvbmZpZ3VyYXRpb25zIGFyZSBpbnRlbmRlZCB0byB1c2UgdGhhdCBjb2RlLgoKVWx0aW1hdGVseSwgSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciB0aGlzIGAjZW5kaWZgIGlzIGNvcnJlY3RseSBwbGFjZWQsIHNlcnZpbmcgaXRzIGludGVuZGVkIHB1cnBvc2UsIGFuZCBub3QgY2F1c2luZyBhbnkgdW5pbnRlbmRlZCBiZWhhdmlvci4gSXQmIzM5O3MgYSBrZXkgcGFydCBvZiBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBjb2RlJiMzOTtzIGNvbnRyb2wgZmxvdyBhbmQgaG93IGl0IGFkYXB0cyB0byBkaWZmZXJlbnQgZW52aXJvbm1lbnRzIG9yIGNvbmZpZ3VyYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAwNzowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDsjaWZkZWYuKiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTc1PXN0cnVjdCBzY2FuX2NvbnRyb2wge1xuLS1cbm1tL3Ztc2Nhbi5jLTE4Mi1cbm1tL3Ztc2Nhbi5jOjE4MzojaWZkZWYgQVJDSF9IQVNfUFJFRkVUQ0hXXG5tbS92bXNjYW4uYy0xODQtI2RlZmluZSBwcmVmZXRjaHdfcHJldl9scnVfZm9saW8oX2ZvbGlvLCBfYmFzZSwgX2ZpZWxkKVx0XHRcdFxcXG4tLVxubW0vdm1zY2FuLmM9MjAyPXN0YXRpYyBpbnQgc2Nfc3dhcHBpbmVzcyhzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYywgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuLS1cbm1tL3Ztc2Nhbi5jLTIwOC1cbm1tL3Ztc2Nhbi5jOjIwOTojaWZkZWYgQ09ORklHX01FTUNHXG5tbS92bXNjYW4uYy0yMTAtXG4tLVxubW0vdm1zY2FuLmM9MjM5PXN0YXRpYyBib29sIHdyaXRlYmFja190aHJvdHRsaW5nX3NhbmUoc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtMjQyLVx0XHRyZXR1cm4gdHJ1ZTtcbm1tL3Ztc2Nhbi5jOjI0MzojaWZkZWYgQ09ORklHX0NHUk9VUF9XUklURUJBQ0tcbm1tL3Ztc2Nhbi5jLTI0NC1cdGlmIChjZ3JvdXBfc3Vic3lzX29uX2RmbChtZW1vcnlfY2dycF9zdWJzeXMpKVxuLS1cbm1tL3Ztc2Nhbi5jPTgyMD1lbnVtIGZvbGlvX3JlZmVyZW5jZXMge1xuLS1cbm1tL3Ztc2Nhbi5jLTgyNS1cbm1tL3Ztc2Nhbi5jOjgyNjojaWZkZWYgQ09ORklHX0xSVV9HRU5cbm1tL3Ztc2Nhbi5jLTgyNy0vKlxuLS1cbm1tL3Ztc2Nhbi5jPTEwNDU9c3RhdGljIHVuc2lnbmVkIGludCBzaHJpbmtfZm9saW9fbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0LFxuLS1cbm1tL3Ztc2Nhbi5jLTEyNzQtXHRcdFx0XHRcdGdvdG8gYWN0aXZhdGVfbG9ja2VkO1xubW0vdm1zY2FuLmM6MTI3NTojaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXG5tbS92bXNjYW4uYy0xMjc2LVx0XHRcdFx0aWYgKG5yX3BhZ2VzIFx1MDAzZT0gSFBBR0VfUE1EX05SKSB7XG4tLVxubW0vdm1zY2FuLmM9MjYwMz1zdGF0aWMgYm9vbCBjYW5fYWdlX2Fub25fcGFnZXMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuLS1cbm1tL3Ztc2Nhbi5jLTI2MTQtXG5tbS92bXNjYW4uYzoyNjE1OiNpZmRlZiBDT05GSUdfTFJVX0dFTlxubW0vdm1zY2FuLmMtMjYxNi1cbm1tL3Ztc2Nhbi5jPTI2MTc9REVGSU5FX1NUQVRJQ19LRVlfRkFMU0UobHJ1X3N3aXRjaCk7XG5tbS92bXNjYW4uYzoyNjE4OiNpZmRlZiBDT05GSUdfTFJVX0dFTl9FTkFCTEVEXG5tbS92bXNjYW4uYy0yNjE5LURFRklORV9TVEFUSUNfS0VZX0FSUkFZX1RSVUUobHJ1X2dlbl9jYXBzLCBOUl9MUlVfR0VOX0NBUFMpO1xuLS1cbm1tL3Ztc2Nhbi5jPTI2Njc9c3RhdGljIHN0cnVjdCBscnV2ZWMgKmdldF9scnV2ZWMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgbmlkKVxuLS1cbm1tL3Ztc2Nhbi5jLTI2NzAtXG5tbS92bXNjYW4uYzoyNjcxOiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL3Ztc2Nhbi5jLTI2NzItXHRpZiAobWVtY2cpIHtcbi0tXG5tbS92bXNjYW4uYz0yNzk5PXN0YXRpYyB2b2lkIHJlc2V0X2Jsb29tX2ZpbHRlcihzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAqbW1fc3RhdGUsIHVuc2lnbmVkIGxvbmcgc2VxKVxuLS1cbm1tL3Ztc2Nhbi5jLTI4MTgtXG5tbS92bXNjYW4uYzoyODE5OiNpZmRlZiBDT05GSUdfTFJVX0dFTl9XQUxLU19NTVVcbm1tL3Ztc2Nhbi5jLTI4MjAtXG5tbS92bXNjYW4uYz0yODIxPXN0YXRpYyBzdHJ1Y3QgbHJ1X2dlbl9tbV9saXN0ICpnZXRfbW1fbGlzdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4tLVxubW0vdm1zY2FuLmMtMjgyNy1cbm1tL3Ztc2Nhbi5jOjI4Mjg6I2lmZGVmIENPTkZJR19NRU1DR1xubW0vdm1zY2FuLmMtMjgyOS1cdGlmIChtZW1jZylcbi0tXG5tbS92bXNjYW4uYz0yODYxPXZvaWQgbHJ1X2dlbl9hZGRfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4tLVxubW0vdm1zY2FuLmMtMjg2Ny1cdFZNX1dBUk5fT05fT05DRSghbGlzdF9lbXB0eShcdTAwMjZtbS1cdTAwM2VscnVfZ2VuLmxpc3QpKTtcbm1tL3Ztc2Nhbi5jOjI4Njg6I2lmZGVmIENPTkZJR19NRU1DR1xubW0vdm1zY2FuLmMtMjg2OS1cdFZNX1dBUk5fT05fT05DRShtbS1cdTAwM2VscnVfZ2VuLm1lbWNnKTtcbi0tXG5tbS92bXNjYW4uYz0yODg4PXZvaWQgbHJ1X2dlbl9kZWxfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4tLVxubW0vdm1zY2FuLmMtMjg5Ni1cbm1tL3Ztc2Nhbi5jOjI4OTc6I2lmZGVmIENPTkZJR19NRU1DR1xubW0vdm1zY2FuLmMtMjg5OC1cdG1lbWNnID0gbW0tXHUwMDNlbHJ1X2dlbi5tZW1jZztcbi0tXG5tbS92bXNjYW4uYy0yOTIwLVxubW0vdm1zY2FuLmM6MjkyMTojaWZkZWYgQ09ORklHX01FTUNHXG5tbS92bXNjYW4uYy0yOTIyLVx0bWVtX2Nncm91cF9wdXQobW0tXHUwMDNlbHJ1X2dlbi5tZW1jZyk7XG4tLVxubW0vdm1zY2FuLmMtMjkyNi1cbm1tL3Ztc2Nhbi5jOjI5Mjc6I2lmZGVmIENPTkZJR19NRU1DR1xubW0vdm1zY2FuLmMtMjkyOC12b2lkIGxydV9nZW5fbWlncmF0ZV9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbi0tXG5tbS92bXNjYW4uYz00Mjk2PXN0YXRpYyB2b2lkIGxydV9nZW5fcm90YXRlX21lbWNnKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IG9wKVxuLS1cbm1tL3Ztc2Nhbi5jLTQzNDEtXG5tbS92bXNjYW4uYzo0MzQyOiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL3Ztc2Nhbi5jLTQzNDMtXG4tLVxubW0vdm1zY2FuLmM9NTUwMj1zdGF0aWMgaW50IGxydV9nZW5fc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxuLS1cbm1tL3Ztc2Nhbi5jLTU1MTUtXG5tbS92bXNjYW4uYzo1NTE2OiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL3Ztc2Nhbi5jLTU1MTctXHRcdGlmIChtZW1jZylcbi0tXG5tbS92bXNjYW4uYz01NzY4PXZvaWQgbHJ1X2dlbl9pbml0X2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXG4tLVxubW0vdm1zY2FuLmMtNTc4Ny1cbm1tL3Ztc2Nhbi5jOjU3ODg6I2lmZGVmIENPTkZJR19NRU1DR1xubW0vdm1zY2FuLmMtNTc4OS1cbi0tXG5tbS92bXNjYW4uYz02NjY2PXVuc2lnbmVkIGxvbmcgdHJ5X3RvX2ZyZWVfcGFnZXMoc3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdCwgaW50IG9yZGVyLFxuLS1cbm1tL3Ztc2Nhbi5jLTY3MDgtXG5tbS92bXNjYW4uYzo2NzA5OiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL3Ztc2Nhbi5jLTY3MTAtXG4tLVxubW0vdm1zY2FuLmM9NzUzNj1ib29sIGtzd2FwZF90ZXN0X2hvcGVsZXNzKHBnX2RhdGFfdCAqcGdkYXQpXG4tLVxubW0vdm1zY2FuLmMtNzU0MC1cbm1tL3Ztc2Nhbi5jOjc1NDE6I2lmZGVmIENPTkZJR19ISUJFUk5BVElPTlxubW0vdm1zY2FuLmMtNzU0Mi0vKlxuLS1cbm1tL3Ztc2Nhbi5jPTc2MjE9c3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgdm1zY2FuX3N5c2N0bF90YWJsZVtdID0ge1xuLS1cbm1tL3Ztc2Nhbi5jLTc2MzAtXHR9LFxubW0vdm1zY2FuLmM6NzYzMTojaWZkZWYgQ09ORklHX05VTUFcbm1tL3Ztc2Nhbi5jLTc2MzItXHR7XG4tLVxubW0vdm1zY2FuLmM9NzY1Mz1tb2R1bGVfaW5pdChrc3dhcGRfaW5pdClcbm1tL3Ztc2Nhbi5jLTc2NTQtXG5tbS92bXNjYW4uYzo3NjU1OiNpZmRlZiBDT05GSUdfTlVNQVxubW0vdm1zY2FuLmMtNzY1Ni0vKlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAwNzowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDM1MQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDYxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQgbWUgcXVpY2tseSBzeW50aGVzaXplIHRoaXMuCgoqKk5hdmlnYXRpbmcgTlVNQS1SZWxhdGVkIENvbmRpdGlvbmFsIENvbXBpbGF0aW9uKioKCkFscmlnaHQsIEkmIzM5O20gc2Nhbm5pbmcgdGhpcyBjb2RlIGFuZCBteSBleWVzIGp1c3Qgc25hZ2dlZCBvbiBgI2lmZGVmIENPTkZJR19OVU1BYCBhdCBsaW5lIDc2NTUuIEhtbSwgdGhhdCYjMzk7cyBpbnRlcmVzdGluZy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gIGlzIGFsc28gY29uZGl0aW9uYWxseSBjb21waWxlZCB1bmRlciB0aGF0IGZsYWcuIE5vIHRpbWUgdG8gd2FzdGU7IEkgbmVlZCB0byBxdWlja2x5IHplcm8gaW4gb24gdGhlIGNvcnJlc3BvbmRpbmcgYCNlbmRpZmAgc3RhdGVtZW50IGZvciBgQ09ORklHX05VTUFgIGF0IGxpbmUgNzY1NS4gVGhhdCYjMzk7cyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgaWYgdGhpcyByZWNsYWltIGZlYXR1cmUgaXMgTlVNQS1kZXBlbmRlbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDA3OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3ODIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0Ozc4MjA6XHRcdFx0cmV0dXJuIDA7XG43ODIxOlx0XG43ODIyOlx0XHRyZXQgPSBfX25vZGVfcmVjbGFpbShwZ2RhdCwgbnJfcGFnZXMsIFx1MDAyNnNjKTtcbjc4MjM6XHRcdGNsZWFyX2JpdF91bmxvY2soUEdEQVRfUkVDTEFJTV9MT0NLRUQsIFx1MDAyNnBnZGF0LVx1MDAzZWZsYWdzKTtcbjc4MjQ6XHRcbjc4MjU6XHRcdGlmIChyZXQgXHUwMDNlPSBucl9wYWdlcylcbjc4MjY6XHRcdFx0Y291bnRfdm1fZXZlbnQoUEdTQ0FOX1pPTkVfUkVDTEFJTV9TVUNDRVNTKTtcbjc4Mjc6XHRcdGVsc2Vcbjc4Mjg6XHRcdFx0Y291bnRfdm1fZXZlbnQoUEdTQ0FOX1pPTkVfUkVDTEFJTV9GQUlMRUQpO1xuNzgyOTpcdFxuNzgzMDpcdFx0cmV0dXJuIHJldDtcbjc4MzE6XHR9XG43ODMyOlx0XG43ODMzOlx0I2Vsc2Vcbjc4MzQ6XHRcbjc4MzU6XHRzdGF0aWMgdW5zaWduZWQgbG9uZyBfX25vZGVfcmVjbGFpbShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LFxuNzgzNjpcdFx0XHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG43ODM3Olx0XHRcdFx0XHQgICAgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG43ODM4Olx0e1xuNzgzOTpcdFx0cmV0dXJuIDA7XG43ODQwOlx0fVxuNzg0MTpcdFxuNzg0MjpcdCNlbmRpZlxuNzg0MzpcdFxuNzg0NDpcdGVudW0ge1xuNzg0NTpcdFx0TUVNT1JZX1JFQ0xBSU1fU1dBUFBJTkVTUyA9IDAsXG43ODQ2Olx0XHRNRU1PUllfUkVDTEFJTV9TV0FQUElORVNTX01BWCxcbjc4NDc6XHRcdE1FTU9SWV9SRUNMQUlNX05VTEwsXG43ODQ4Olx0fTtcbjc4NDk6XHRzdGF0aWMgY29uc3QgbWF0Y2hfdGFibGVfdCB0b2tlbnMgPSB7XG43ODUwOlx0XHR7IE1FTU9SWV9SRUNMQUlNX1NXQVBQSU5FU1MsIFwmIzM0O3N3YXBwaW5lc3M9JWRcJiMzNDt9LFxuNzg1MTpcdFx0eyBNRU1PUllfUkVDTEFJTV9TV0FQUElORVNTX01BWCwgXCYjMzQ7c3dhcHBpbmVzcz1tYXhcJiMzNDt9LFxuNzg1MjpcdFx0eyBNRU1PUllfUkVDTEFJTV9OVUxMLCBOVUxMIH0sXG43ODUzOlx0fTtcbjc4NTQ6XHRcbjc4NTU6XHRpbnQgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbShjaGFyICpidWYsXG43ODU2Olx0XHRcdFx0ICAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBwZ19kYXRhX3QgKnBnZGF0KVxuNzg1NzpcdHtcbjc4NTg6XHRcdHVuc2lnbmVkIGludCBucl9yZXRyaWVzID0gTUFYX1JFQ0xBSU1fUkVUUklFUztcbjc4NTk6XHRcdHVuc2lnbmVkIGxvbmcgbnJfdG9fcmVjbGFpbSwgbnJfcmVjbGFpbWVkID0gMDtcbjc4NjA6XHRcdGludCBzd2FwcGluZXNzID0gLTE7XG43ODYxOlx0XHRjaGFyICpvbGRfYnVmLCAqc3RhcnQ7XG43ODYyOlx0XHRzdWJzdHJpbmdfdCBhcmdzW01BWF9PUFRfQVJHU107XG43ODYzOlx0XHRnZnBfdCBnZnBfbWFzayA9IEdGUF9LRVJORUw7XG43ODY0Olx0XG43ODY1Olx0XHRpZiAoIWJ1ZiB8fCAoIW1lbWNnIFx1MDAyNlx1MDAyNiAhcGdkYXQpIHx8IChtZW1jZyBcdTAwMjZcdTAwMjYgcGdkYXQpKVxuNzg2NjpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjc4Njc6XHRcbjc4Njg6XHRcdGJ1ZiA9IHN0cnN0cmlwKGJ1Zik7XG43ODY5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDA3OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMzAzCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMjEzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipQcm9iaW5nIHRoZSBJbXBsaWNhdGlvbnMgb2YgVGhpcyBQcm9hY3RpdmUgUmVjbGFpbSBQYXRjaCoqCgpPa2F5LCBzbyBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgaXMgYWx3YXlzIGNvbXBpbGVkLCB3aGljaCBpcyBnb29kLiBBbmQgYHJlY2xhaW1fc3RvcmVgIGlzIHVuZGVyIHN5c2ZzIHdpdGggYENPTkZJR19OVU1BYCwgc28gdGhhdCYjMzk7cyB0aGUgZW50cnkgcG9pbnQuICBJZiBgQ09ORklHX05VTUFgIGlzIGVuYWJsZWQsIHRoZW4gYHJlY2xhaW1fc3RvcmVgIGNhbGxzIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYC4gQW5kIGl0JiMzOTtzIHN0aWxsIGF2YWlsYWJsZSBpZiBgQ09ORklHX01FTUNHYCBpcyBkaXNhYmxlZCwgdXNpbmcgc3lzZnMuICBFeGNlbGxlbnQsIHRoZSBzd2FwcGluZXNzIGNvbnRyb2wgc2VlbXMgbGlrZSBpdCYjMzk7cyBiZWhhdmluZyBub3cgYmVjYXVzZSBgc2Nfc3dhcHBpbmVzc2AgdW5jb25kaXRpb25hbGx5IHVzZXMgdGhlIGBzYy0mZ3Q7cHJvYWN0aXZlX3N3YXBwaW5lc3NgLgoKSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IGl0IHN0aWxsIGZ1bmN0aW9ucyB3aXRob3V0IGBDT05GSUdfTUVNQ0dgIGVuYWJsZWQuIExldCBtZSBzZWUuLi4gaW4gYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gLCB0aGUgY29kZSBwcm9wZXJseSBoYW5kbGVzIHRoZSBgbWVtY2dgIGNhc2UsIGJ1dCBpZiBpdCBpcyBub3QgZW5hYmxlZCBpdCBjb25maWd1cmVzIGEgYHNjYW5fY29udHJvbGAgYHN0cnVjdGAgdGhhdCBjYW4gcGVyZm9ybSBhIHByb2FjdGl2ZSByZWNsYWltLiBBbmQgbG9va2luZyBhdCB0aGUgbm9uLWBtZW1jZ2AgY2FzZSwgaXQmIzM5O3MgY2FsbGluZyBgX19ub2RlX3JlY2xhaW1gLiBPa2F5LCBJZiBgQ09ORklHX05VTUFgIGlzIGRpc2FibGVkLCBgX19ub2RlX3JlY2xhaW1gIGp1c3QgcmV0dXJucyAwLCBhbmQgaWYgYENPTkZJR19NRU1DR2AgaXMgZGlzYWJsZWQsIGl0IHdvcmtzLiBTbywgeWVzLCB0aGF0JiMzOTtzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaWYgYENPTkZJR19NRU1DR2AgaXMgZGlzYWJsZWQgdGhyb3VnaCBzeXNmcyEKCldhaXQsIGFtIEkganVtcGluZyB0byBjb25jbHVzaW9ucz8gTGV0IG1lIGRvdWJsZS1jaGVjayB0aGUgYHNjX3N3YXBwaW5lc3NgIGNvZGUgYmVmb3JlIGFuZCBhZnRlci4gQmVmb3JlLCBpZiBgQ09ORklHX01FTUNHYCB3YXMgZGlzYWJsZWQsIGl0IGp1c3QgcmV0dXJuZWQgYHZtX3N3YXBwaW5lc3NgLiAgTm93LCBpdCBjb3JyZWN0bHkgY2hlY2tzIGBzYy0mZ3Q7cHJvYWN0aXZlICZhbXA7JmFtcDsgc2MtJmd0O3Byb2FjdGl2ZV9zd2FwcGluZXNzYCBldmVuIGlmIGBDT05GSUdfTUVNQ0dgIGlzIGRpc2FibGVkLiAgU28sIHllcywgaXQmIzM5O3MgYSBmdW5jdGlvbmFsIGNoYW5nZS4KCkJ1dCB3YWl0LCBpcyBgQ09ORklHX01FTUNHYCBkaXNhYmxlZCBhIGNvbW1vbiBjb25maWd1cmF0aW9uPyBVc3VhbGx5IGl0JiMzOTtzIGVuYWJsZWQgd2l0aCBzeXprYWxsZXIuCgpXaGF0IGlmIGBDT05GSUdfTUVNQ0dgICppcyogZW5hYmxlZD8gRG9lcyBhbnl0aGluZyBhY3R1YWxseSBjaGFuZ2U/IExldCYjMzk7cyBjaGVjayBgbWVtX2Nncm91cF9zd2FwcGluZXNzYC4gIEJlZm9yZSwgaXQgaGFkIGEgYnJhbmNoIGZvciBjZ3JvdXAgdjIsIHRoZW4gZm9yIHRoZSByb290IG9yIGRpc2FibGVkIG1lbWNnLCByZXR1cm5pbmcgYHZtX3N3YXBwaW5lc3NgLCBhbmQgdGhlbiBmaW5hbGx5IGdldHRpbmcgdGhlIHZhbHVlIGZyb20gdGhlIG1lbWNnLiBBZnRlciwgaXQgY29uZGl0aW9uYWxseSByZXR1cm5zIHRoZSBzYW1lIGxvZ2ljIGRlcGVuZGluZyBpZiBgQ09ORklHX01FTUNHX1YxYCBpcyBlbmFibGVkIG9yIG5vdC4gIElmIGBDT05GSUdfTUVNQ0dfVjFgIGlzICpkaXNhYmxlZCosIGBjZ3JvdXBfc3Vic3lzX29uX2RmbGAgd291bGQgYmUgdHJ1ZSBhbnl3YXkuIFRodXMsIHRoZSBvbGQgY29kZSB3b3VsZCByZXR1cm4gYHZtX3N3YXBwaW5lc3NgLiBUaGUgbmV3IGNvZGUgYWxzbyByZXR1cm5zIGB2bV9zd2FwcGluZXNzYC4gU28gdGhlcmUgaXMgTk8gZnVuY3Rpb25hbCBjaGFuZ2UgaWYgYENPTkZJR19NRU1DR2AgaXMgZW5hYmxlZCwgcmVnYXJkbGVzcyBvZiBgQ09ORklHX01FTUNHX1YxYC4KCldoYXQgaWYgYENPTkZJR19NRU1DR19WMWAgKmlzKiBlbmFibGVkPyBUaGUgbG9naWMgaW4gYG1lbV9jZ3JvdXBfc3dhcHBpbmVzc2AgYmVmb3JlIGFuZCBhZnRlciBpcyBlZmZlY3RpdmVseSB0aGUgc2FtZS4gSG1tLgoKT2theSwgbGV0JiMzOTtzIGxvb2sgYXQgYG1lbV9jZ3JvdXBfY3NzX2FsbG9jYC4gTm93LCBgbWVtY2ctJmd0O3N3YXBwaW5lc3NgIGlzICpvbmx5KiBpbml0aWFsaXplZCBpZiBgQ09ORklHX01FTUNHX1YxYCBpcyBlbmFibGVkLiAgVGhhdCYjMzk7cyBiZWNhdXNlIGBzd2FwcGluZXNzYCBpcyB1bmRlciB0aGUgYENPTkZJR19NRU1DR19WMWAgZ3VhcmQgaW4gdGhlIGBtZW1fY2dyb3VwYCBzdHJ1Y3Qgbm93LiBUaGlzIGlzIGEgKm1lbW9yeSBzYXZpbmcqIG9wdGltaXphdGlvbiBmb3IgdGhlIGBDT05GSUdfTUVNQ0dfVjFgIGRpc2FibGVkIGNhc2UsIGl0IGRvZXNuJiMzOTt0IGFwcGVhciB0byBiZSBhIGZ1bmN0aW9uYWwgY2hhbmdlLgoKV2FpdCwgYXJlIHRoZXJlIGFueSBvdGhlciBmdW5jdGlvbmFsIGNoYW5nZXM/IFdoYXQgYWJvdXQgdGhlIGNhc2Ugd2hlcmUgbWVtY2cgaXMgTlVMTCBpbiBgc2Nfc3dhcHBpbmVzc2A/IEluIGBzY19zd2FwcGluZXNzYCB0aGUgZnVuY3Rpb24gYG1lbV9jZ3JvdXBfaXNfcm9vdGAgaXMgY2FsbGVkIG9uIHRoZSBhcmd1bWVudCBgbWVtY2dgLCBpZiBpdCBpcyBOVUxMLCB0aGlzIG1pZ2h0IGNyYXNoIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAwNzowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF9pc19yb290JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTUxMz1zdGF0aWMgaW5saW5lIGJvb2wgUGFnZU1lbWNnS21lbShzdHJ1Y3QgcGFnZSAqcGFnZSlcbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC01MTctXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDo1MTg6c3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfaXNfcm9vdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC01MTkte1xuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTEwNjQ9c3RhdGljIGlubGluZSBib29sIFBhZ2VNZW1jZ0ttZW0oc3RydWN0IHBhZ2UgKnBhZ2UpXG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTA2OC1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjEwNjk6c3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfaXNfcm9vdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xMDcwLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMDc6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ0ODUKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHByZXNlbnRlZCBhcyBpZiBpdCB3ZXJlIG15IG93biBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkRpdmluZyBpbnRvIGBtZW1fY2dyb3VwX2lzX3Jvb3RgKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhpcyBgbWVtX2Nncm91cF9pc19yb290YCBmdW5jdGlvbi4gVGhlIG5hbWUgaW1tZWRpYXRlbHkgc3VnZ2VzdHMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBtZW1vcnkgY2dyb3Vwcywgc3BlY2lmaWNhbGx5IHRoZSByb290IGNncm91cC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHF1aWNrbHkgYXNzZXNzIGl0cyBwdXJwb3NlIGluIHRoZSBicm9hZGVyIGNvbnRleHQuIElzIGl0IGEgc2ltcGxlIGNoZWNrPyBEb2VzIGl0IHBlcmZvcm0gYW55IHNpZGUgZWZmZWN0cz8gV2hhdCBhcmUgdGhlIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgb2YgYSB0cnVlL2ZhbHNlIHJldHVybiB2YWx1ZT8gR2l2ZW4gbXkgZXhwZXJpZW5jZSB3aXRoIHRoZSBrZXJuZWwmIzM5O3MgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtcywgSSYjMzk7bSBhbHJlYWR5IGFudGljaXBhdGluZyB0aGF0IHRoaXMgcHJvYmFibHkgcmVsYXRlcyB0byBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIHJlc291cmNlIGFjY291bnRpbmcgYW5kIGxpbWl0cy4gSSYjMzk7bSBrZWVuIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgZnVuY3Rpb24gZGlmZmVyZW50aWF0ZXMgYmV0d2VlbiB0aGUgJiMzNDt0b3AtbGV2ZWwmIzM0OyBvciAmIzM0O3N5c3RlbS13aWRlJiMzNDsgbWVtb3J5IGNncm91cCBhbmQgb3RoZXIgbmVzdGVkIG9uZXMuIFBlcmhhcHMgaXQmIzM5O3MgYSBmdW5kYW1lbnRhbCB0ZXN0IHVzZWQgaW4gbWFueSBjcml0aWNhbCBtZW1vcnkgbWFuYWdlbWVudCBwYXRocy4gVW5kZXJzdGFuZGluZyBpdHMgdXNhZ2Ugd2lsbCBnaXZlIGluc2lnaHRzIGludG8gdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGUgaW1wbGVtZW50YXRpb24gY2xhcmlmaWVzIHRoZXNlIHF1ZXN0aW9ucy4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gaG93IGl0JiMzOTtzIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBvdGhlciBjZ3JvdXAgZnVuY3Rpb25zIGFuZCBzdHJ1Y3R1cmVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAwNzowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTE4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1MTg6XHRzdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF9pc19yb290KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiA1MTk6XHR7XG4gNTIwOlx0XHRyZXR1cm4gKG1lbWNnID09IHJvb3RfbWVtX2Nncm91cCk7XG4gNTIxOlx0fVxuIDUyMjpcdFxuIDUyMzpcdHN0YXRpYyBpbmxpbmUgYm9vbCBvYmpfY2dyb3VwX2lzX3Jvb3QoY29uc3Qgc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnKVxuIDUyNDpcdHtcbiA1MjU6XHRcdHJldHVybiBvYmpjZy1cdTAwM2Vpc19yb290O1xuIDUyNjpcdH1cbiA1Mjc6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMDc6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ5MzAKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAxMDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIE5VTEwgUG9pbnRlciBEZXJlZmVyZW5jZSoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGNvZGUsIHNwZWNpZmljYWxseSBhcm91bmQgbWVtb3J5IGNncm91cHMgYW5kIHN3YXBwaW5lc3MuIEkgc2VlIGEgY29uZGl0aW9uIHdoZXJlIGlmIGBtZW1jZ2AgaXMgTlVMTCwgdGhlbiBgbWVtY2cgPT0gcm9vdF9tZW1fY2dyb3VwYCBpcyBkZWZpbml0ZWx5IGZhbHNlLCBiZWNhdXNlIGByb290X21lbV9jZ3JvdXBgIGlzIGEgcmVhbCBvYmplY3QuIEJ1dCB0aGVuLCAqd2FpdCBhIG1pbnV0ZSosIGlmIGBtZW1jZ2AgKmlzKiBOVUxMLCB0aGUgY29kZSBjYWxscyBgbWVtX2Nncm91cF9zd2FwcGluZXNzYCwgYW5kIHRoYXQgZnVuY3Rpb24gdHJpZXMgdG8gYWNjZXNzIGBtZW1jZy0mZ3Q7c3dhcHBpbmVzc2AuIFRoYXQmIzM5O3MgYSBjbGFzc2ljIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSEgVGhpcyBjb3VsZCBiZSBhIHNlcmlvdXMgYnVnLgoKSSBuZWVkIHRvIGNvbmZpcm0gaWYgYG1lbWNnYCBjYW4gKmFjdHVhbGx5KiBiZSBOVUxMIGluIHRoZSBjb250ZXh0IG9mIGBzY19zd2FwcGluZXNzYC4gVGhpcyBzZWVtcyBsaWtlIGEgcHJldHR5IGltcG9ydGFudCBjaGVjayB0byBtYWtlIHN1cmUgaXQgZG9lc24mIzM5O3QgY2F1c2UgYSBzeXN0ZW0gY3Jhc2guIFRoZSBuZXh0IHN0ZXAgaXMgY2xlYXIuIExldCBtZSB0cmFjZSB0aGUgY2FsbGVycyBvZiBgc2Nfc3dhcHBpbmVzc2AgYW5kIHNlZSBob3cgYG1lbWNnYCBpcyBiZWluZyBwYXNzZWQgaW4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBwb3RlbnRpYWwgY2FsbCBwYXRocyBhbmQgbWFrZSBzdXJlIHRoZSBgbWVtY2dgIHBhcmFtZXRlciBpcyBhbHdheXMgdmFsaWQgb3IgcHJvcGVybHkgaGFuZGxlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMDc6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2Nfc3dhcHBpbmVzcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bXNjYW4uYz03NT1zdHJ1Y3Qgc2Nhbl9jb250cm9sIHtcbi0tXG5tbS92bXNjYW4uYy05Ni1cbm1tL3Ztc2Nhbi5jOjk3Olx0LyogU3dhcHBpbmVzcyB2YWx1ZSBmb3IgcHJvYWN0aXZlIHJlY2xhaW0uIEFsd2F5cyB1c2Ugc2Nfc3dhcHBpbmVzcygpISAqL1xubW0vdm1zY2FuLmMtOTgtXHRpbnQgKnByb2FjdGl2ZV9zd2FwcGluZXNzO1xuLS1cbm1tL3Ztc2Nhbi5jPTIwMD1pbnQgdm1fc3dhcHBpbmVzcyA9IDYwO1xubW0vdm1zY2FuLmMtMjAxLVxubW0vdm1zY2FuLmM6MjAyOnN0YXRpYyBpbnQgc2Nfc3dhcHBpbmVzcyhzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYywgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxubW0vdm1zY2FuLmMtMjAzLXtcbi0tXG5tbS92bXNjYW4uYz0yNDc5PXN0YXRpYyB2b2lkIGdldF9zY2FuX2NvdW50KHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsXG4tLVxubW0vdm1zY2FuLmMtMjQ4My1cdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGxydXZlY19tZW1jZyhscnV2ZWMpO1xubW0vdm1zY2FuLmM6MjQ4NDpcdGludCBzd2FwcGluZXNzID0gc2Nfc3dhcHBpbmVzcyhzYywgbWVtY2cpO1xubW0vdm1zY2FuLmMtMjQ4NS1cdHU2NCBmcmFjdGlvbltBTk9OX0FORF9GSUxFXTtcbi0tXG5tbS92bXNjYW4uYz0yNjg3PXN0YXRpYyBpbnQgZ2V0X3N3YXBwaW5lc3Moc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy0yNjk4LVxubW0vdm1zY2FuLmM6MjY5OTpcdHJldHVybiBzY19zd2FwcGluZXNzKHNjLCBtZW1jZyk7XG5tbS92bXNjYW4uYy0yNzAwLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMDc6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU2OTcKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipBbmFseXppbmcgU3lzdGVtIFBlcmZvcm1hbmNlIE1ldHJpY3MqKgoKQWxyaWdodCwgYmVmb3JlIGRpdmluZyB0b28gZGVlcCBpbnRvIHRoaXMsIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhpbmdzLiBMZXQmIzM5O3Mgc2VlLi4uIEkgdGhpbmsgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHdvdWxkIGJlIHRvIHB1bGwgYGdldF9zd2FwcGluZXNzYCBhbmQgYGdldF9zY2FuX2NvdW50YC4gVGhlc2UgYXJlIGtleSBpbmRpY2F0b3JzIGZvciBob3cgYWdncmVzc2l2ZWx5IHRoZSBzeXN0ZW0gaXMgdXRpbGl6aW5nIHN3YXAgc3BhY2UgYW5kIGhvdyBmcmVxdWVudGx5IGl0JiMzOTtzIHNjYW5uaW5nIG1lbW9yeSBwYWdlcywgcmVzcGVjdGl2ZWx5LiBVbmRlcnN0YW5kaW5nIHRoZXNlIHR3byB2YXJpYWJsZXMgaXMgb2Z0ZW4gdGhlIGp1bXBpbmcgb2ZmIHBvaW50IGZvciBkaWFnbm9zdGljcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMDc6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI0NzksCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjQ3OTpcdHN0YXRpYyB2b2lkIGdldF9zY2FuX2NvdW50KHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsXG4yNDgwOlx0XHRcdFx0ICAgdW5zaWduZWQgbG9uZyAqbnIpXG4yNDgxOlx0e1xuMjQ4MjpcdFx0c3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGxydXZlY19wZ2RhdChscnV2ZWMpO1xuMjQ4MzpcdFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbHJ1dmVjX21lbWNnKGxydXZlYyk7XG4yNDg0Olx0XHRpbnQgc3dhcHBpbmVzcyA9IHNjX3N3YXBwaW5lc3Moc2MsIG1lbWNnKTtcbjI0ODU6XHRcdHU2NCBmcmFjdGlvbltBTk9OX0FORF9GSUxFXTtcbjI0ODY6XHRcdHU2NCBkZW5vbWluYXRvciA9IDA7XHQvKiBnY2MgKi9cbjI0ODc6XHRcdGVudW0gc2Nhbl9iYWxhbmNlIHNjYW5fYmFsYW5jZTtcbjI0ODg6XHRcdGVudW0gbHJ1X2xpc3QgbHJ1O1xuMjQ4OTpcdFxuMjQ5MDpcdFx0LyogUHJvYWN0aXZlIHJlY2xhaW0gaW5pdGlhdGVkIGJ5IHVzZXJzcGFjZSBmb3IgYW5vbnltb3VzIG1lbW9yeSBvbmx5ICovXG4yNDkxOlx0XHRpZiAoc3dhcHBpbmVzcyA9PSBTV0FQUElORVNTX0FOT05fT05MWSkge1xuMjQ5MjpcdFx0XHRXQVJOX09OX09OQ0UoIXNjLVx1MDAzZXByb2FjdGl2ZSk7XG4yNDkzOlx0XHRcdGlmICghY2FuX3JlY2xhaW1fYW5vbl9wYWdlcyhtZW1jZywgcGdkYXQtXHUwMDNlbm9kZV9pZCwgc2MpKSB7XG4yNDk0Olx0XHRcdFx0bWVtc2V0KG5yLCAwLCBzaXplb2YoKm5yKSAqIE5SX0xSVV9MSVNUUyk7XG4yNDk1Olx0XHRcdFx0cmV0dXJuO1xuMjQ5NjpcdFx0XHR9XG4yNDk3Olx0XHRcdHNjYW5fYmFsYW5jZSA9IFNDQU5fQU5PTjtcbjI0OTg6XHRcdFx0Z290byBvdXQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDA3OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2MjQ2CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGZyb20gYW4gZXhwZXJ0JiMzOTtzIHBlcnNwZWN0aXZlOgoKKipMUlVWZWMgTWVtb3J5IENHIGFuZCB0aGUgTlVMTCBQb2ludGVyIFF1ZXN0aW9uKioKCkFscmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBscnV2ZWNfbWVtY2cobHJ1dmVjKWAgZnVuY3Rpb24gY2FsbC4uLiBhbmQgbXkgbWluZCBpbW1lZGlhdGVseSBqdW1wcyB0byBhIHBvdGVudGlhbCBlZGdlIGNhc2UuIENhbiB0aGlzIHRoaW5nIGFjdHVhbGx5IHJldHVybiBhIE5VTEwgcG9pbnRlcj8gVGhlIG9idmlvdXMgaW1wbGljYXRpb25zIGFyZSBjYXNjYWRpbmcuIElmIGl0ICpjYW4qIHJldHVybiBOVUxMLCB0aGVuIGV2ZXJ5IHNpbmdsZSBjYWxsIHRvIGl0IG5lZWRzIGEgTlVMTCBjaGVjaywgb3RoZXJ3aXNlLCBib29tLCB3ZSYjMzk7cmUgbG9va2luZyBhdCBhIHNlcmlvdXMga2VybmVsIHBhbmljIG9yIGF0IGJlc3QgYSBuYXN0eSBidWcuIFdlIG5lZWQgdG8gYmUgYWJsZSB0byBjYXRjaCB0aGUgZXJyb3IgY29uZGl0aW9uIQoKV2hhdCBhcmUgdGhlIHNjZW5hcmlvcz8gRG9lcyB0aGUgZG9jdW1lbnRhdGlvbiBjbGFyaWZ5IHRoaXMgYmVoYXZpb3I/IElzIGl0IGRlcGVuZGVudCBvbiBhIHNwZWNpZmljIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb24/IERvZXMgaXQgcGVydGFpbiB0byBtZW1vcnkgbWFuYWdlbWVudCB6b25lcyBvciB0aGVpciBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgY2FjaGU/IEFyZSB3ZSBkZWFsaW5nIHdpdGggc29tZSBzb3J0IG9mIHJhY2UgY29uZGl0aW9uIG9yIGNvbmN1cnJlbnQgYWNjZXNzIGlzc3VlPyBJIG5lZWQgdG8gZGlnIGludG8gdGhlIGNvZGUsIGFuZCBtYXliZSB0aGUgYWNjb21wYW55aW5nIGNvbW1lbnRzIGFuZCBkb2N1bWVudGF0aW9uLCB0byBjb25maXJtIHdoYXQgdGhlIHBvc3NpYmxlIHJldHVybiB2YWx1ZXMgYW5kIGNvcnJlc3BvbmRpbmcgY2FzZXMgYXJlLiBNb3JlIGltcG9ydGFudGx5LCB3aGF0IGhhcHBlbnMgdXBzdHJlYW0gd2l0aCB0aGlzIE5VTEwgcG9pbnRlciBpZiB3ZSBkb24mIzM5O3QgY2F0Y2ggaXQ/IQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAwNzowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwIFxcKmxydXZlY19tZW1jZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD04MTg9c3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9mcm9tX3NlcShzdHJ1Y3Qgc2VxX2ZpbGUgKm0pXG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtODIyLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6ODIzOnN0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKmxydXZlY19tZW1jZyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC04MjQte1xuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTEyOTM9c3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9mcm9tX3NlcShzdHJ1Y3Qgc2VxX2ZpbGUgKm0pXG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTI5Ny1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjEyOTg6c3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqbHJ1dmVjX21lbWNnKHN0cnVjdCBscnV2ZWMgKmxydXZlYylcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTEyOTkte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAwNzowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjc1MAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlIHdlIGdvLi4uCgoqKkRpdmluZyBpbnRvIGBscnV2ZWNfbWVtY2dgKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gVGhlIGZpcnN0IHRoaW5nIEkmIzM5O20gZ29pbmcgdG8gZG8gaXMgdGFrZSBhIGxvb2sgYXQgYGxydXZlY19tZW1jZ2AuIEkgYWxyZWFkeSBoYXZlIGEgcHJldHR5IHNvbGlkIGdyYXNwIG9uIG1lbW9yeSBtYW5hZ2VtZW50IGluIHRoZSBMaW51eCBrZXJuZWwsIGVzcGVjaWFsbHkgd2l0aCByZXNwZWN0IHRvIGNvbnRyb2wgZ3JvdXBzLiBNeSBleHBlcnRpc2UgYWxsb3dzIG1lIHRvIHJlYWQgdGhyb3VnaCB0aGUgZG9jdW1lbnRhdGlvbiBhbmQganVtcCByaWdodCBpbnRvIHRoZSBjb2RlIHRvIGRpc2Nlcm4gaG93IGl0IGltcGxlbWVudHMgbWVtb3J5IGNvbnRyb2wgZ3JvdXAgZnVuY3Rpb25hbGl0eS4gSSBleHBlY3QgdG8gc2VlIHRoZSBpbnRlcnBsYXkgYmV0d2VlbiB0aGUgTFJVIChMZWFzdCBSZWNlbnRseSBVc2VkKSBsaXN0IGFuZCB0aGUgbWVtb3J5IGNvbnRyb2wgZ3JvdXAgKG1lbWNnKSBtZWNoYW5pc21zLCBidXQgSSBuZWVkIHRvIHNlZSB0aGUgc3BlY2lmaWNzLiBJJiMzOTttIGtlZW4gdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBjb2RlIGhhbmRsZXMgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gdGhlIGdsb2JhbCBwYWdlIHJlY2xhaW0gcHJvY2VzcyBhbmQgdGhlIHBlci1tZW1jZyBhY2NvdW50aW5nLiBNeSBmb2N1cyB3aWxsIGJlIG9uIHRoZSBkYXRhIHN0cnVjdHVyZXMsIHRoZSBhbGdvcml0aG1zLCBhbmQgdGhlIGxvY2tpbmcgaW52b2x2ZWQuIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucyBhbmQgcG90ZW50aWFsIGNvbnRlbnRpb24gcG9pbnRzLCB3aXRoIHBhcnRpY3VsYXIgYXR0ZW50aW9uIHRvIGhvdyB0aGlzIHBpZWNlIGZpdHMgaW50byB0aGUgbGFyZ2VyIGFyY2hpdGVjdHVyZSBvZiB0aGUga2VybmVsJiMzOTtzIG1lbW9yeSBtYW5hZ2VtZW50IHN5c3RlbS4gS25vd2luZyB0aGlzIHdpbGwgaGVscCBtZSB3aGVuIEkgdHJvdWJsZXNob290IG9yIG9wdGltaXplIG1lbW9yeSBtYW5hZ2VtZW50IGluIGEgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAwNzowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODIzLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA4MjM6XHRzdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpscnV2ZWNfbWVtY2coc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxuIDgyNDpcdHtcbiA4MjU6XHRcdHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICptejtcbiA4MjY6XHRcbiA4Mjc6XHRcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkpXG4gODI4Olx0XHRcdHJldHVybiBOVUxMO1xuIDgyOTpcdFxuIDgzMDpcdFx0bXogPSBjb250YWluZXJfb2YobHJ1dmVjLCBzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSwgbHJ1dmVjKTtcbiA4MzE6XHRcdHJldHVybiBtei1cdTAwM2VtZW1jZztcbiA4MzI6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDA3OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3MTkyCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNTU4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBTd2FwcGluZXNzIGFuZCBNZW1vcnkgQ2dyb3VwIEludGVyYWN0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGNvZGUsIHNwZWNpZmljYWxseSBob3cgc3dhcHBpbmVzcyBpcyBoYW5kbGVkIGluIHJlbGF0aW9uIHRvIG1lbW9yeSBjZ3JvdXBzLiBUaGUgY29yZSBvZiBteSBjb25jZXJuIGhlcmUgaXMgcG90ZW50aWFsIG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZXMuIEkgc2VlIHRoYXQgaWYgYG1lbV9jZ3JvdXBfZGlzYWJsZWQoKWAgaXMgdHJ1ZSwgYGxydXZlY19tZW1jZ2AgcmV0dXJucyBOVUxMLiBUaGlzIG1ha2VzIHNlbnNlIOKAkyB0aGUgbWVtb3J5IGNncm91cCBmdW5jdGlvbmFsaXR5IGlzIGRpc2FibGVkLCBzbyB0aGVyZSYjMzk7cyBubyBhc3NvY2lhdGVkIGNncm91cC4gQ29uc2VxdWVudGx5LCBgc2Nfc3dhcHBpbmVzc2AgdGhlbiBjYWxscyBgbWVtX2Nncm91cF9zd2FwcGluZXNzYCB3aXRoIE5VTEwuCgpOb3csIGxldCYjMzk7cyBsb29rIGF0IGBtZW1fY2dyb3VwX3N3YXBwaW5lc3NgLiBUaGUgY29kZSBoYXMgYSBjaGVjazoKCmBgYGMKc3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF9zd2FwcGluZXNzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykKewojaWZkZWYgQ09ORklHX01FTUNHX1YxCglpZiAoIWNncm91cF9zdWJzeXNfb25fZGZsKG1lbW9yeV9jZ3JwX3N1YnN5cykgJmFtcDsmYW1wOwoJICAgICFtZW1fY2dyb3VwX2Rpc2FibGVkKCkgJmFtcDsmYW1wOyAhbWVtX2Nncm91cF9pc19yb290KG1lbWNnKSkKCQlyZXR1cm4gbWVtY2ctJmd0O3N3YXBwaW5lc3M7CiNlbmRpZgoJcmV0dXJuIFJFQURfT05DRSh2bV9zd2FwcGluZXNzKTsKfQpgYGAKCkV4Y2VsbGVudCEgSWYgYG1lbV9jZ3JvdXBfZGlzYWJsZWQoKWAgaXMgdHJ1ZSwgdGhlIGAhbWVtX2Nncm91cF9kaXNhYmxlZCgpYCBjb25kaXRpb24gaXMgZmFsc2UuIFRoZSBzaG9ydC1jaXJjdWl0aW5nIG1lYW5zIGl0IGF2b2lkcyBkZXJlZmVyZW5jaW5nIGBtZW1jZ2AgYWx0b2dldGhlciBhbmQgc2FmZWx5IHJldHVybnMgdGhlIGdsb2JhbCBgdm1fc3dhcHBpbmVzc2AgdmFsdWUuIFNvIGZhciwgc28gZ29vZC4gTm8gbnVsbCBkZXJlZmVyZW5jZSByaXNrIGlmIHRoZSBmZWF0dXJlIGlzIGRpc2FibGVkLgoKTXkgbmV4dCBjb25jZXJuIGlzIHdoYXQgaGFwcGVucyBpZiBgbWVtX2Nncm91cF9kaXNhYmxlZCgpYCBpcyBmYWxzZSwgYnV0IGBtZW1jZ2AgaXMgTlVMTC4gQ2FuIGBscnV2ZWNfbWVtY2dgIHJldHVybiBOVUxMIGV2ZW4gaWYgdGhlIGZlYXR1cmUgaXNuJiMzOTt0IGRpc2FibGVkPyBMZXQmIzM5O3MgY2hlY2s6CgpgYGBjCglpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKQoJCXJldHVybiBOVUxMOwoKCW16ID0gY29udGFpbmVyX29mKGxydXZlYywgc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUsIGxydXZlYyk7CglyZXR1cm4gbXotJmd0O21lbWNnOwpgYGAKCkhlcmUgaXQgaXM6IHRoZSBjb2RlICpleHBsaWNpdGx5KiByZXR1cm5zIE5VTEwgaWYgYG1lbV9jZ3JvdXBfZGlzYWJsZWQoKWAgaXMgdHJ1ZS4gT3RoZXJ3aXNlLCBpdCByZXR1cm5zIGBtei0mZ3Q7bWVtY2dgLiBTbywgdGhlIHF1ZXN0aW9uIGJlY29tZXMsIGNhbiBgbXotJmd0O21lbWNnYCBpdHNlbGYgZXZlciBiZSBOVUxMPyBUaGlua2luZyB0aGlzIHRocm91Z2guLi4gYG16LSZndDttZW1jZ2AgaXMgdGhlIGBtZW1jZ2AgYXNzb2NpYXRlZCB3aXRoIHRoZSBgbWVtX2Nncm91cF9wZXJfbm9kZWAuIEZvciB0aGUgcm9vdCBtZW1jZywgYG16LSZndDttZW1jZ2AgaXMgYHJvb3RfbWVtX2Nncm91cGAsIHdoaWNoIGlzICpub3QqIE5VTEwuIFRoZXJlZm9yZSwgYG1lbWNnYCBpcyBvbmx5IE5VTEwgaWYgYG1lbV9jZ3JvdXBfZGlzYWJsZWQoKWAgaXMgdHJ1ZS4KClRoaXMgbWVhbnMgdGhhdCBpZiBgbWVtX2Nncm91cF9kaXNhYmxlZCgpYCBpcyB0cnVlLCBgbWVtX2Nncm91cF9zd2FwcGluZXNzYCB3aWxsICphbHdheXMqIHNhZmVseSByZXR1cm4gYHZtX3N3YXBwaW5lc3NgIGJlY2F1c2Ugb2YgdGhlIGluaXRpYWwgY2hlY2sgaW4gYGxydXZlY19tZW1jZ2AgdGhhdCBwcmV2ZW50cyBhIE5VTEwgdmFsdWUgYmVpbmcgcGFzc2VkLgoKTm93LCBJIG5lZWQgdG8gY29uc2lkZXIgYW4gZWRnZSBjYXNlOiB3aGF0IGlmIGBDT05GSUdfTUVNQ0dgIGlzIGRpc2FibGVkIGVudGlyZWx5PyBJIHNob3VsZCBjaGVjayBob3cgYGxydXZlY19tZW1jZ2AgYmVoYXZlcyB1bmRlciB0aGF0IGNvbmRpdGlvbi4gVGhpcyBjb3VsZCBjaGFuZ2UgdGhlIG92ZXJhbGwgZmxvdyBJJiMzOTt2ZSBhbmFseXplZCBzbyBmYXIuIFRoaXMgd2lsbCBiZSB0aGUgbmV4dCBzdGVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAwNzowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTI5OCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMjk4Olx0c3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqbHJ1dmVjX21lbWNnKHN0cnVjdCBscnV2ZWMgKmxydXZlYylcbjEyOTk6XHR7XG4xMzAwOlx0XHRyZXR1cm4gTlVMTDtcbjEzMDE6XHR9XG4xMzAyOlx0XG4xMzAzOlx0c3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfb25saW5lKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbjEzMDQ6XHR7XG4xMzA1Olx0XHRyZXR1cm4gdHJ1ZTtcbjEzMDY6XHR9XG4xMzA3Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDA3OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4NjIxCgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMjk2MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBQYXRjaCBmb3IgRnV6emluZyBTdWl0YWJpbGl0eSoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBkaXNzZWN0ZWQgdGhpcyBwYXRjaCwgYW5kIGhlcmUmIzM5O3MgbXkgYXNzZXNzbWVudC4gVGhlIHByaW1hcnkgb2JqZWN0aXZlIHNlZW1zIHRvIGJlIHRpZHlpbmcgdXAgdGhlIGNvZGUsIHNwZWNpZmljYWxseSBjb25jZXJuaW5nIHRoZSBgc3dhcHBpbmVzc2AgcGFyYW1ldGVyIHdpdGhpbiBtZW1vcnkgY2dyb3VwcywgYW5kIGhpZGluZyBpdCB1bmRlciB0aGUgYENPTkZJR19NRU1DR19WMWAgZmxhZyBmb3IgbWVtb3J5IG9wdGltaXphdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0aGF0IHRoZXJlIG1pZ2h0IGJlIHNvbWUgZnVuY3Rpb25hbCBjaGFuZ2VzIHdvcnRoIGV4cGxvcmluZyBmb3IgZnV6emluZywgYnV0IHRoZSBtb3JlIEkgbG9vaywgdGhlIGxlc3Mgc2lnbmlmaWNhbnQgdGhleSBhcHBlYXIuCgpJbml0aWFsbHksIEkgaWRlbnRpZmllZCBhIHBvdGVudGlhbCBkaWZmZXJlbmNlIGluIHRoZSBiZWhhdmlvciBvZiBwcm9hY3RpdmUgcmVjbGFpbSB2aWEgc3lzZnMgKHRyaWdnZXJlZCBieSB3cml0aW5nIHRvIGAvc3lzL2RldmljZXMvc3lzdGVtL25vZGUvbm9kZVgvcmVjbGFpbWApIHdoZW4gYENPTkZJR19NRU1DR2AgaXMgZGlzYWJsZWQuIFByZXZpb3VzbHksIHRoaXMgbWVjaGFuaXNtIGlnbm9yZWQgdGhlIGBzd2FwcGluZXNzYCBzZXR0aW5nIGFuZCB1c2VkIHRoZSBnbG9iYWwgYHZtX3N3YXBwaW5lc3NgLiBUaGlzIHBhdGNoIG5vdyBjb3JyZWN0bHkgcmVzcGVjdHMgdGhlIGBzd2FwcGluZXNzYCBwYXJhbWV0ZXIgcHJvdmlkZWQgdmlhIHRoZSB1c2VyIHdoZW4gYENPTkZJR19NRU1DR2AgaXMgZGlzYWJsZWQuIEhvd2V2ZXIsIGhlcmUmIzM5O3MgdGhlIGtpY2tlcjogdGhpcyBzY2VuYXJpbyBpcyB1bmxpa2VseSB0byBiZSByZWxldmFudCBiZWNhdXNlIHN5emthbGxlciAqZGVmYXVsdHMqIHRvIGhhdmluZyBgQ09ORklHX01FTUNHYCBlbmFibGVkLCBhcyB0aGF0IGlzIHRoZSBzdGFuZGFyZCBjYXNlLgoKSSB3ZW50IGRpZ2dpbmcgZnVydGhlciwgYW5kIHRoZSBjb2RlIGNoYW5nZXMgZXNzZW50aWFsbHkgaW52b2x2ZSB0aGUgcmVsb2NhdGlvbiBvZiB0aGUgYG1lbWNnLSZndDtzd2FwcGluZXNzYCBpbml0aWFsaXphdGlvbiwgcGxhY2luZyBpdCB1bmRlciB0aGUgYCNpZmRlZiBDT05GSUdfTUVNQ0dfVjFgIGJsb2NrLiBUaGlzIG1vdmVzIHRoZSBgc3dhcHBpbmVzc2AgZmllbGQgZnJvbSBgc3RydWN0IG1lbV9jZ3JvdXBgIGlmIGBDT05GSUdfTUVNQ0dfVjFgIGlzIGRpc2FibGVkLiBUaGlzIGlzIHB1cmUgbWVtb3J5IGxheW91dCByZWZhY3RvcmluZzsgdGhlcmUgaXMgbm8gY2hhbmdlIGluIGJlaGF2aW9yIGlmIGBDT05GSUdfTUVNQ0dfVjFgIGlzIGRpc2FibGVkLgoKV2hlbiBgQ09ORklHX01FTUNHYCBpcyBlbmFibGVkLCB0aGUgY29kZSBwYXRocyBmb3IgYHNjX3N3YXBwaW5lc3NgIGFuZCBgbWVtX2Nncm91cF9zd2FwcGluZXNzYCByZW1haW4gKmZ1bmN0aW9uYWxseSBpZGVudGljYWwqIHRvIHRoZSBwcmUtcGF0Y2ggdmVyc2lvbnMuIEkmIzM5O3ZlIHJlLWV4YW1pbmVkIHRoZSBjb25kaXRpb25hbCBsb2dpYywgYW5kIHRoZXJlIGFyZSBubyBuZXcgY29kZXBhdGhzIHdoZW4gYENPTkZJR19NRU1DR2AgaXMgZW5hYmxlZCwgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGBDT05GSUdfTUVNQ0dfVjFgIGlzIGVuYWJsZWQgb3IgZGlzYWJsZWQuIFRoaXMgbWVhbnMgdGhhdCBpZiBzeXprYWxsZXIgaXMgcnVubmluZyB3aXRoIGBDT05GSUdfTUVNQ0c9eWAsIGFzIGl0IGFsbW9zdCBjZXJ0YWlubHkgaXMsIGZ1enppbmcgdGhpcyBwYXRjaCB3b24mIzM5O3QgdW5jb3ZlciBhbnkgbmV3IGJ1Z3MuIFRoZSBuZXcgY29kZSB3aWxsIGhhdmUgZXhhY3RseSB0aGUgc2FtZSBiZWhhdmlvciBhcyB0aGUgb2xkIGNvZGUuIFdlIHdvdWxkIG5lZWQgYENPTkZJR19NRU1DRz1uYCB0byBleGVyY2lzZSB0aGUgYnVnIGZpeC4KCkluIGEgbnV0c2hlbGw6IHRoaXMgcGF0Y2ggaXMgbWFpbmx5IGFib3V0IGhpZGluZyBgc3dhcHBpbmVzc2AgdW5kZXIgYSBmZWF0dXJlIGZsYWcgYW5kIHNhdmluZyBhIGJpdCBvZiBtZW1vcnkuIFRoZSBmdW5jdGlvbmFsIGNoYW5nZSwgdGhlIGNoYW5nZSBvZiBiZWhhdmlvciB3aGVuIGBDT05GSUdfTUVNQ0dgIGlzIGRpc2FibGVkLCBpcyBhIHZlcnkgbWlub3IgZWRnZSBjYXNlIHRoYXQmIzM5O3MgaGlnaGx5IHVubGlrZWx5IHRvIGJlIHJlbGV2YW50IGluIGEgdHlwaWNhbCBzeXprYWxsZXIgdGVzdGluZyBlbnZpcm9ubWVudC4KClRoZXJlZm9yZSwgZm9yIGZ1enppbmcgcHVycG9zZXMsIHRoaXMgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSB0ZXN0YWJsZSBmdW5jdGlvbmFsIGNoYW5nZXMgaWYgc3l6a2FsbGVyIGlzIHJ1bm5pbmcgd2l0aCBgQ09ORklHX01FTUNHPXlgLiBJdCYjMzk7cyBhIGNsZWFudXAgYW5kIG1lbW9yeSBvcHRpbWl6YXRpb24sIG5vdCBhIGJ1ZyBmaXggZm9yIHRoZSBzdGFuZGFyZCBjYXNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAwNzowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjZ3JvdXBfc3Vic3lzX29uX2RmbCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9iZnEtaW9zY2hlZC5jPTYyMzc9c3RhdGljIHZvaWQgYmZxX2luc2VydF9yZXF1ZXN0KHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4LCBzdHJ1Y3QgcmVxdWVzdCAqcnEsXG4tLVxuYmxvY2svYmZxLWlvc2NoZWQuYy02MjQ3LSNpZmRlZiBDT05GSUdfQkZRX0dST1VQX0lPU0NIRURcbmJsb2NrL2JmcS1pb3NjaGVkLmM6NjI0ODpcdGlmICghY2dyb3VwX3N1YnN5c19vbl9kZmwoaW9fY2dycF9zdWJzeXMpIFx1MDAyNlx1MDAyNiBycS1cdTAwM2ViaW8pXG5ibG9jay9iZnEtaW9zY2hlZC5jLTYyNDktXHRcdGJmcWdfc3RhdHNfdXBkYXRlX2xlZ2FjeV9pbyhxLCBycSk7XG4tLVxuYmxvY2svYmxrLWNncm91cC5jPTIxODI9dm9pZCBibGtfY2dyb3VwX2Jpb19zdGFydChzdHJ1Y3QgYmlvICpiaW8pXG4tLVxuYmxvY2svYmxrLWNncm91cC5jLTIxODgtXG5ibG9jay9ibGstY2dyb3VwLmM6MjE4OTpcdGlmICghY2dyb3VwX3N1YnN5c19vbl9kZmwoaW9fY2dycF9zdWJzeXMpKVxuYmxvY2svYmxrLWNncm91cC5jLTIxOTAtXHRcdHJldHVybjtcbi0tXG5ibG9jay9ibGstdGhyb3R0bGUuYz04ND1zdGF0aWMgdWludDY0X3QgdGdfYnBzX2xpbWl0KHN0cnVjdCB0aHJvdGxfZ3JwICp0ZywgaW50IHJ3KVxuLS1cbmJsb2NrL2Jsay10aHJvdHRsZS5jLTg3LVxuYmxvY2svYmxrLXRocm90dGxlLmM6ODg6XHRpZiAoY2dyb3VwX3N1YnN5c19vbl9kZmwoaW9fY2dycF9zdWJzeXMpIFx1MDAyNlx1MDAyNiAhYmxrZy1cdTAwM2VwYXJlbnQpXG5ibG9jay9ibGstdGhyb3R0bGUuYy04OS1cdFx0cmV0dXJuIFU2NF9NQVg7XG4tLVxuYmxvY2svYmxrLXRocm90dGxlLmM9OTQ9c3RhdGljIHVuc2lnbmVkIGludCB0Z19pb3BzX2xpbWl0KHN0cnVjdCB0aHJvdGxfZ3JwICp0ZywgaW50IHJ3KVxuLS1cbmJsb2NrL2Jsay10aHJvdHRsZS5jLTk3LVxuYmxvY2svYmxrLXRocm90dGxlLmM6OTg6XHRpZiAoY2dyb3VwX3N1YnN5c19vbl9kZmwoaW9fY2dycF9zdWJzeXMpIFx1MDAyNlx1MDAyNiAhYmxrZy1cdTAwM2VwYXJlbnQpXG5ibG9jay9ibGstdGhyb3R0bGUuYy05OS1cdFx0cmV0dXJuIFVJTlRfTUFYO1xuLS1cbmJsb2NrL2Jsay10aHJvdHRsZS5jPTI5OT1zdGF0aWMgdm9pZCB0aHJvdGxfcGRfaW5pdChzdHJ1Y3QgYmxrZ19wb2xpY3lfZGF0YSAqcGQpXG4tLVxuYmxvY2svYmxrLXRocm90dGxlLmMtMzIwLVx0c3EtXHUwMDNlcGFyZW50X3NxID0gXHUwMDI2dGQtXHUwMDNlc2VydmljZV9xdWV1ZTtcbmJsb2NrL2Jsay10aHJvdHRsZS5jOjMyMTpcdGlmIChjZ3JvdXBfc3Vic3lzX29uX2RmbChpb19jZ3JwX3N1YnN5cykgXHUwMDI2XHUwMDI2IGJsa2ctXHUwMDNlcGFyZW50KVxuYmxvY2svYmxrLXRocm90dGxlLmMtMzIyLVx0XHRzcS1cdTAwM2VwYXJlbnRfc3EgPSBcdTAwMjZibGtnX3RvX3RnKGJsa2ctXHUwMDNlcGFyZW50KS1cdTAwM2VzZXJ2aWNlX3F1ZXVlO1xuLS1cbmJsb2NrL2Jsay10aHJvdHRsZS5jPTEyNzA9c3RhdGljIHZvaWQgdGdfY29uZl91cGRhdGVkKHN0cnVjdCB0aHJvdGxfZ3JwICp0ZywgYm9vbCBnbG9iYWwpXG4tLVxuYmxvY2svYmxrLXRocm90dGxlLmMtMTI5NC1cdFx0LyogaWdub3JlIHJvb3Qvc2Vjb25kIGxldmVsICovXG5ibG9jay9ibGstdGhyb3R0bGUuYzoxMjk1Olx0XHRpZiAoIWNncm91cF9zdWJzeXNfb25fZGZsKGlvX2NncnBfc3Vic3lzKSB8fCAhYmxrZy1cdTAwM2VwYXJlbnQgfHxcbmJsb2NrL2Jsay10aHJvdHRsZS5jLTEyOTYtXHRcdCAgICAhYmxrZy1cdTAwM2VwYXJlbnQtXHUwMDNlcGFyZW50KVxuLS1cbmJsb2NrL2Jsay10aHJvdHRsZS5oPTE2OD1zdGF0aWMgaW5saW5lIGJvb2wgYmxrX3Nob3VsZF90aHJvdGwoc3RydWN0IGJpbyAqYmlvKVxuLS1cbmJsb2NrL2Jsay10aHJvdHRsZS5oLTE3Ni1cdHRnID0gYmxrZ190b190ZyhiaW8tXHUwMDNlYmlfYmxrZyk7XG5ibG9jay9ibGstdGhyb3R0bGUuaDoxNzc6XHRpZiAoIWNncm91cF9zdWJzeXNfb25fZGZsKGlvX2NncnBfc3Vic3lzKSkge1xuYmxvY2svYmxrLXRocm90dGxlLmgtMTc4LVx0XHRpZiAoIWJpb19mbGFnZ2VkKGJpbywgQklPX0NHUk9VUF9BQ0NUKSkge1xuLS1cbmluY2x1ZGUvbGludXgvYmFja2luZy1kZXYuaD0xNzE9c3RhdGljIGlubGluZSBib29sIGlub2RlX2Nnd2JfZW5hYmxlZChzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLS1cbmluY2x1ZGUvbGludXgvYmFja2luZy1kZXYuaC0xNzQtXG5pbmNsdWRlL2xpbnV4L2JhY2tpbmctZGV2Lmg6MTc1Olx0cmV0dXJuIGNncm91cF9zdWJzeXNfb25fZGZsKG1lbW9yeV9jZ3JwX3N1YnN5cykgXHUwMDI2XHUwMDI2XG5pbmNsdWRlL2xpbnV4L2JhY2tpbmctZGV2Lmg6MTc2Olx0XHRjZ3JvdXBfc3Vic3lzX29uX2RmbChpb19jZ3JwX3N1YnN5cykgXHUwMDI2XHUwMDI2XG5pbmNsdWRlL2xpbnV4L2JhY2tpbmctZGV2LmgtMTc3LVx0XHQoYmRpLVx1MDAzZWNhcGFiaWxpdGllcyBcdTAwMjYgQkRJX0NBUF9XUklURUJBQ0spIFx1MDAyNlx1MDAyNlxuLS1cbmluY2x1ZGUvbGludXgvY2dyb3VwLmg9OTA9ZXh0ZXJuIHN0cnVjdCBibG9ja2luZ19ub3RpZmllcl9oZWFkIGNncm91cF9saWZldGltZV9ub3RpZmllcjtcbi0tXG5pbmNsdWRlL2xpbnV4L2Nncm91cC5oLTEwOS0vKipcbmluY2x1ZGUvbGludXgvY2dyb3VwLmg6MTEwOiAqIGNncm91cF9zdWJzeXNfb25fZGZsIC0gZmFzdCB0ZXN0IG9uIHdoZXRoZXIgYSBzdWJzeXMgaXMgb24gZGVmYXVsdCBoaWVyYXJjaHlcbmluY2x1ZGUvbGludXgvY2dyb3VwLmgtMTExLSAqIEBzczogc3Vic3lzdGVtIGluIHF1ZXN0aW9uXG5pbmNsdWRlL2xpbnV4L2Nncm91cC5oLTExMi0gKi9cbmluY2x1ZGUvbGludXgvY2dyb3VwLmg6MTEzOiNkZWZpbmUgY2dyb3VwX3N1YnN5c19vbl9kZmwoc3MpXHRcdFx0XHRcdFx0XFxcbmluY2x1ZGUvbGludXgvY2dyb3VwLmgtMTE0LVx0c3RhdGljX2JyYW5jaF9saWtlbHkoXHUwMDI2c3MgIyMgX29uX2RmbF9rZXkpXG4tLVxuaW5jbHVkZS9uZXQvc29jay5oPTI3MDI9c3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfc2tfdW5kZXJfbWVtb3J5X3ByZXNzdXJlKGNvbnN0IHN0cnVjdCBzb2NrICpzaylcbi0tXG5pbmNsdWRlL25ldC9zb2NrLmgtMjcwNi0jaWZkZWYgQ09ORklHX01FTUNHX1YxXG5pbmNsdWRlL25ldC9zb2NrLmg6MjcwNzpcdGlmICghY2dyb3VwX3N1YnN5c19vbl9kZmwobWVtb3J5X2NncnBfc3Vic3lzKSlcbmluY2x1ZGUvbmV0L3NvY2suaC0yNzA4LVx0XHRyZXR1cm4gISFtZW1jZy1cdTAwM2V0Y3BtZW1fcHJlc3N1cmU7XG4tLVxua2VybmVsL2Nncm91cC9jZ3JvdXAuYz0xNDk9c3RhdGljIGNvbnN0IGNoYXIgKmNncm91cF9zdWJzeXNfbmFtZVtdID0ge1xuLS1cbmtlcm5lbC9jZ3JvdXAvY2dyb3VwLmMtMTUzLVxua2VybmVsL2Nncm91cC9jZ3JvdXAuYzoxNTQ6LyogYXJyYXkgb2Ygc3RhdGljX2tleXMgZm9yIGNncm91cF9zdWJzeXNfZW5hYmxlZCgpIGFuZCBjZ3JvdXBfc3Vic3lzX29uX2RmbCgpICovXG5rZXJuZWwvY2dyb3VwL2Nncm91cC5jLTE1NS0jZGVmaW5lIFNVQlNZUyhfeClcdFx0XHRcdFx0XHRcdFx0XFxcbi0tXG5rZXJuZWwvY2dyb3VwL2Nncm91cC5jPTE2ND1zdGF0aWMgc3RydWN0IHN0YXRpY19rZXlfdHJ1ZSAqY2dyb3VwX3N1YnN5c19lbmFibGVkX2tleVtdID0ge1xuLS1cbmtlcm5lbC9jZ3JvdXAvY2dyb3VwLmMtMTY5LSNkZWZpbmUgU1VCU1lTKF94KSBbX3ggIyMgX2NncnBfaWRdID0gXHUwMDI2X3ggIyMgX2NncnBfc3Vic3lzX29uX2RmbF9rZXksXG5rZXJuZWwvY2dyb3VwL2Nncm91cC5jOjE3MDpzdGF0aWMgc3RydWN0IHN0YXRpY19rZXlfdHJ1ZSAqY2dyb3VwX3N1YnN5c19vbl9kZmxfa2V5W10gPSB7XG5rZXJuZWwvY2dyb3VwL2Nncm91cC5jLTE3MS0jaW5jbHVkZSBcdTAwM2NsaW51eC9jZ3JvdXBfc3Vic3lzLmhcdTAwM2Vcbi0tXG5rZXJuZWwvY2dyb3VwL2Nncm91cC5jPTE4MzY9aW50IHJlYmluZF9zdWJzeXN0ZW1zKHN0cnVjdCBjZ3JvdXBfcm9vdCAqZHN0X3Jvb3QsIHUzMiBzc19tYXNrKVxuLS1cbmtlcm5lbC9jZ3JvdXAvY2dyb3VwLmMtMTkzNC1cdFx0aWYgKGRzdF9yb290ID09IFx1MDAyNmNncnBfZGZsX3Jvb3QpIHtcbmtlcm5lbC9jZ3JvdXAvY2dyb3VwLmM6MTkzNTpcdFx0XHRzdGF0aWNfYnJhbmNoX2VuYWJsZShjZ3JvdXBfc3Vic3lzX29uX2RmbF9rZXlbc3NpZF0pO1xua2VybmVsL2Nncm91cC9jZ3JvdXAuYy0xOTM2LVx0XHR9IGVsc2Uge1xua2VybmVsL2Nncm91cC9jZ3JvdXAuYy0xOTM3LVx0XHRcdGRjZ3JwLVx1MDAzZXN1YnRyZWVfY29udHJvbCB8PSAxIFx1MDAzY1x1MDAzYyBzc2lkO1xua2VybmVsL2Nncm91cC9jZ3JvdXAuYzoxOTM4Olx0XHRcdHN0YXRpY19icmFuY2hfZGlzYWJsZShjZ3JvdXBfc3Vic3lzX29uX2RmbF9rZXlbc3NpZF0pO1xua2VybmVsL2Nncm91cC9jZ3JvdXAuYy0xOTM5LVx0XHR9XG4tLVxua2VybmVsL2Nncm91cC9jcHVzZXQtdjEuYz0yMTI9dm9pZCBjcHVzZXQxX3VwZGF0ZV90YXNrX3NwcmVhZF9mbGFncyhzdHJ1Y3QgY3B1c2V0ICpjcyxcbi0tXG5rZXJuZWwvY2dyb3VwL2NwdXNldC12MS5jLTIxNC17XG5rZXJuZWwvY2dyb3VwL2NwdXNldC12MS5jOjIxNTpcdGlmIChjZ3JvdXBfc3Vic3lzX29uX2RmbChjcHVzZXRfY2dycF9zdWJzeXMpKVxua2VybmVsL2Nncm91cC9jcHVzZXQtdjEuYy0yMTYtXHRcdHJldHVybjtcbi0tXG5rZXJuZWwvY2dyb3VwL2NwdXNldC5jPTM5MD1zdGF0aWMgaW5saW5lIGJvb2wgY3B1c2V0X3YyKHZvaWQpXG4tLVxua2VybmVsL2Nncm91cC9jcHVzZXQuYy0zOTItXHRyZXR1cm4gIUlTX0VOQUJMRUQoQ09ORklHX0NQVVNFVFNfVjEpIHx8XG5rZXJuZWwvY2dyb3VwL2NwdXNldC5jOjM5MzpcdFx0Y2dyb3VwX3N1YnN5c19vbl9kZmwoY3B1c2V0X2NncnBfc3Vic3lzKTtcbmtlcm5lbC9jZ3JvdXAvY3B1c2V0LmMtMzk0LX1cbi0tXG5rZXJuZWwvY2dyb3VwL3BpZHMuYz0yNDM9c3RhdGljIHZvaWQgcGlkc19ldmVudChzdHJ1Y3QgcGlkc19jZ3JvdXAgKnBpZHNfZm9ya2luZyxcbi0tXG5rZXJuZWwvY2dyb3VwL3BpZHMuYy0yNTMtXHR9XG5rZXJuZWwvY2dyb3VwL3BpZHMuYzoyNTQ6XHRpZiAoIWNncm91cF9zdWJzeXNfb25fZGZsKHBpZHNfY2dycF9zdWJzeXMpIHx8XG5rZXJuZWwvY2dyb3VwL3BpZHMuYy0yNTUtXHQgICAgY2dycF9kZmxfcm9vdC5mbGFncyBcdTAwMjYgQ0dSUF9ST09UX1BJRFNfTE9DQUxfRVZFTlRTKSB7XG4tLVxua2VybmVsL2Nncm91cC9waWRzLmM9MzYxPXN0YXRpYyBpbnQgX19waWRzX2V2ZW50c19zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2YsIGJvb2wgbG9jYWwpXG4tLVxua2VybmVsL2Nncm91cC9waWRzLmMtMzY2LVxua2VybmVsL2Nncm91cC9waWRzLmM6MzY3Olx0aWYgKCFjZ3JvdXBfc3Vic3lzX29uX2RmbChwaWRzX2NncnBfc3Vic3lzKSB8fFxua2VybmVsL2Nncm91cC9waWRzLmMtMzY4LVx0ICAgIGNncnBfZGZsX3Jvb3QuZmxhZ3MgXHUwMDI2IENHUlBfUk9PVF9QSURTX0xPQ0FMX0VWRU5UUykge1xuLS1cbmtlcm5lbC9zY2hlZC9jb3JlLmM9OTk0Nz1zdGF0aWMgaW50IHRnX2Nmc19zY2hlZHVsYWJsZV9kb3duKHN0cnVjdCB0YXNrX2dyb3VwICp0Zywgdm9pZCAqZGF0YSlcbi0tXG5rZXJuZWwvc2NoZWQvY29yZS5jLTk5NjctXHRcdCAqL1xua2VybmVsL3NjaGVkL2NvcmUuYzo5OTY4Olx0XHRpZiAoY2dyb3VwX3N1YnN5c19vbl9kZmwoY3B1X2NncnBfc3Vic3lzKSkge1xua2VybmVsL3NjaGVkL2NvcmUuYy05OTY5LVx0XHRcdGlmIChxdW90YSA9PSBSVU5USU1FX0lORilcbi0tXG5tbS9odWdldGxiX2Nncm91cC5jPTkxPXN0YXRpYyB2b2lkIGh1Z2V0bGJfY2dyb3VwX2luaXQoc3RydWN0IGh1Z2V0bGJfY2dyb3VwICpoX2Nncm91cCxcbi0tXG5tbS9odWdldGxiX2Nncm91cC5jLTExMi1cbm1tL2h1Z2V0bGJfY2dyb3VwLmM6MTEzOlx0XHRpZiAoIWNncm91cF9zdWJzeXNfb25fZGZsKGh1Z2V0bGJfY2dycF9zdWJzeXMpKSB7XG5tbS9odWdldGxiX2Nncm91cC5jLTExNC1cdFx0XHRmYXVsdC1cdTAwM2V0cmFja19mYWlsY250ID0gdHJ1ZTtcbi0tXG5tbS9odWdldGxiX2Nncm91cC5jPTQ1Nj1zdGF0aWMgaW50IGh1Z2V0bGJfY2dyb3VwX3JlYWRfbnVtYV9zdGF0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICpkdW1teSlcbi0tXG5tbS9odWdldGxiX2Nncm91cC5jLTQ2MC1cdGludCBpZHggPSBNRU1GSUxFX0lEWChjZnQtXHUwMDNlcHJpdmF0ZSk7XG5tbS9odWdldGxiX2Nncm91cC5jOjQ2MTpcdGJvb2wgbGVnYWN5ID0gIWNncm91cF9zdWJzeXNfb25fZGZsKGh1Z2V0bGJfY2dycF9zdWJzeXMpO1xubW0vaHVnZXRsYl9jZ3JvdXAuYy00NjItXHRzdHJ1Y3QgaHVnZXRsYl9jZ3JvdXAgKmhfY2cgPSBodWdldGxiX2Nncm91cF9mcm9tX2NzcyhzZXFfY3NzKHNlcSkpO1xuLS1cbm1tL21lbWNvbnRyb2wtdjEuYz0yNTIyPXZvaWQgbWVtY2cxX2FjY291bnRfa21lbShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBucl9wYWdlcylcbm1tL21lbWNvbnRyb2wtdjEuYy0yNTIzLXtcbm1tL21lbWNvbnRyb2wtdjEuYzoyNTI0Olx0aWYgKCFjZ3JvdXBfc3Vic3lzX29uX2RmbChtZW1vcnlfY2dycF9zdWJzeXMpKSB7XG5tbS9tZW1jb250cm9sLXYxLmMtMjUyNS1cdFx0aWYgKG5yX3BhZ2VzIFx1MDAzZSAwKVxuLS1cbm1tL21lbWNvbnRyb2wtdjEuaD0zMT1zdGF0aWMgaW5saW5lIGJvb2wgZG9fbWVtc3dfYWNjb3VudCh2b2lkKVxubW0vbWVtY29udHJvbC12MS5oLTMyLXtcbm1tL21lbWNvbnRyb2wtdjEuaDozMzpcdHJldHVybiAhY2dyb3VwX3N1YnN5c19vbl9kZmwobWVtb3J5X2NncnBfc3Vic3lzKTtcbm1tL21lbWNvbnRyb2wtdjEuaC0zNC19XG4tLVxubW0vbWVtY29udHJvbC5jPTIzOD1zdGF0aWMgaW5saW5lIHZvaWQgcmVwYXJlbnRfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50KVxubW0vbWVtY29udHJvbC5jLTIzOS17XG5tbS9tZW1jb250cm9sLmM6MjQwOlx0aWYgKGNncm91cF9zdWJzeXNfb25fZGZsKG1lbW9yeV9jZ3JwX3N1YnN5cykpXG5tbS9tZW1jb250cm9sLmMtMjQxLVx0XHRyZXR1cm47XG4tLVxubW0vbWVtY29udHJvbC5jPTMzND1zdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqZ2V0X21lbV9jZ3JvdXBfY3NzX2Zyb21fZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9tZW1jb250cm9sLmMtMzM3LVxubW0vbWVtY29udHJvbC5jOjMzODpcdGlmICghY2dyb3VwX3N1YnN5c19vbl9kZmwobWVtb3J5X2NncnBfc3Vic3lzKSlcbm1tL21lbWNvbnRyb2wuYy0zMzktXHRcdHJldHVybiBcdTAwMjZyb290X21lbV9jZ3JvdXAtXHUwMDNlY3NzO1xuLS1cbm1tL21lbWNvbnRyb2wuYz04MTQ9c3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqZ2V0X25vbl9keWluZ19tZW1jZ19zdGFydChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4tLVxubW0vbWVtY29udHJvbC5jLTgxNy1cdC8qIFJlYmluZGluZyBjYW4gY2F1c2UgdGhpcyB2YWx1ZSB0byBiZSBjaGFuZ2VkIGF0IHJ1bnRpbWUgKi9cbm1tL21lbWNvbnRyb2wuYzo4MTg6XHRpZiAoY2dyb3VwX3N1YnN5c19vbl9kZmwobWVtb3J5X2NncnBfc3Vic3lzKSkge1xubW0vbWVtY29udHJvbC5jLTgxOS1cdFx0KnJjdV9sb2NrZWQgPSBmYWxzZTtcbi0tXG5tbS9tZW1jb250cm9sLmM9MTc1Nz1zdGF0aWMgdm9pZCBtZW1vcnlfc3RhdF9mb3JtYXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3Qgc2VxX2J1ZiAqcylcbm1tL21lbWNvbnRyb2wuYy0xNzU4LXtcbm1tL21lbWNvbnRyb2wuYzoxNzU5Olx0aWYgKGNncm91cF9zdWJzeXNfb25fZGZsKG1lbW9yeV9jZ3JwX3N1YnN5cykpXG5tbS9tZW1jb250cm9sLmMtMTc2MC1cdFx0bWVtY2dfc3RhdF9mb3JtYXQobWVtY2csIHMpO1xuLS1cbm1tL21lbWNvbnRyb2wuYz0xNzk3PXZvaWQgbWVtX2Nncm91cF9wcmludF9vb21fbWVtaW5mbyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4tLVxubW0vbWVtY29udHJvbC5jLTE4MDUtXG5tbS9tZW1jb250cm9sLmM6MTgwNjpcdGlmIChjZ3JvdXBfc3Vic3lzX29uX2RmbChtZW1vcnlfY2dycF9zdWJzeXMpKVxubW0vbWVtY29udHJvbC5jLTE4MDctXHRcdG1lbW9yeV9mYWlsY250ID0gYXRvbWljX2xvbmdfcmVhZChcdTAwMjZtZW1jZy1cdTAwM2VtZW1vcnlfZXZlbnRzW01FTUNHX01BWF0pO1xuLS1cbm1tL21lbWNvbnRyb2wuYy0xODEzLVx0XHRLKCh1NjQpUkVBRF9PTkNFKG1lbWNnLVx1MDAzZW1lbW9yeS5tYXgpKSwgbWVtb3J5X2ZhaWxjbnQpO1xubW0vbWVtY29udHJvbC5jOjE4MTQ6XHRpZiAoY2dyb3VwX3N1YnN5c19vbl9kZmwobWVtb3J5X2NncnBfc3Vic3lzKSlcbm1tL21lbWNvbnRyb2wuYy0xODE1LVx0XHRwcl9pbmZvKFwmIzM0O3N3YXA6IHVzYWdlICVsbHVrQiwgbGltaXQgJWxsdWtCLCBmYWlsY250ICVsdVxcblwmIzM0Oyxcbi0tXG5tbS9tZW1jb250cm9sLmM9MTg2MD12b2lkIF9fbWVtY2dfbWVtb3J5X2V2ZW50KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbi0tXG5tbS9tZW1jb250cm9sLmMtMTg4MS1cbm1tL21lbWNvbnRyb2wuYzoxODgyOlx0XHRpZiAoIWNncm91cF9zdWJzeXNfb25fZGZsKG1lbW9yeV9jZ3JwX3N1YnN5cykpXG5tbS9tZW1jb250cm9sLmMtMTg4My1cdFx0XHRicmVhaztcbi0tXG5tbS9tZW1jb250cm9sLmM9MTk1Mz1zdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9nZXRfb29tX2dyb3VwKHN0cnVjdCB0YXNrX3N0cnVjdCAqdmljdGltLFxuLS1cbm1tL21lbWNvbnRyb2wuYy0xOTU4LVxubW0vbWVtY29udHJvbC5jOjE5NTk6XHRpZiAoIWNncm91cF9zdWJzeXNfb25fZGZsKG1lbW9yeV9jZ3JwX3N1YnN5cykpXG5tbS9tZW1jb250cm9sLmMtMTk2MC1cdFx0cmV0dXJuIE5VTEw7XG4tLVxubW0vbWVtY29udHJvbC5jPTQxNjA9bWVtX2Nncm91cF9jc3NfYWxsb2Moc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKnBhcmVudF9jc3MpXG4tLVxubW0vbWVtY29udHJvbC5jLTQxNjMtXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csICpvbGRfbWVtY2c7XG5tbS9tZW1jb250cm9sLmM6NDE2NDpcdGJvb2wgbWVtY2dfb25fZGZsID0gY2dyb3VwX3N1YnN5c19vbl9kZmwobWVtb3J5X2NncnBfc3Vic3lzKTtcbm1tL21lbWNvbnRyb2wuYy00MTY1LVxuLS1cbm1tL21lbWNvbnRyb2wuYz00MzIzPXN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfY3NzX2ZyZWUoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcylcbi0tXG5tbS9tZW1jb250cm9sLmMtNDMzMS0jZW5kaWZcbm1tL21lbWNvbnRyb2wuYzo0MzMyOlx0aWYgKGNncm91cF9zdWJzeXNfb25fZGZsKG1lbW9yeV9jZ3JwX3N1YnN5cykgXHUwMDI2XHUwMDI2ICFjZ3JvdXBfbWVtb3J5X25vc29ja2V0KVxubW0vbWVtY29udHJvbC5jLTQzMzMtXHRcdHN0YXRpY19icmFuY2hfZGVjKFx1MDAyNm1lbWNnX3NvY2tldHNfZW5hYmxlZF9rZXkpO1xubW0vbWVtY29udHJvbC5jLTQzMzQtXG5tbS9tZW1jb250cm9sLmM6NDMzNTpcdGlmICghY2dyb3VwX3N1YnN5c19vbl9kZmwobWVtb3J5X2NncnBfc3Vic3lzKSBcdTAwMjZcdTAwMjYgbWVtY2cxX3RjcG1lbV9hY3RpdmUobWVtY2cpKVxubW0vbWVtY29udHJvbC5jLTQzMzYtXHRcdHN0YXRpY19icmFuY2hfZGVjKFx1MDAyNm1lbWNnX3NvY2tldHNfZW5hYmxlZF9rZXkpO1xuLS1cbm1tL21lbWNvbnRyb2wuYz01MTc5PWludCBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKHN0cnVjdCBmb2xpbyAqZm9saW8sIGdmcF90IGdmcClcbi0tXG5tbS9tZW1jb250cm9sLmMtNTE4OS1cdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkgfHwgIW1lbWNnX2FjY291bnRzX2h1Z2V0bGIoKSB8fFxubW0vbWVtY29udHJvbC5jOjUxOTA6XHRcdCFtZW1jZyB8fCAhY2dyb3VwX3N1YnN5c19vbl9kZmwobWVtb3J5X2NncnBfc3Vic3lzKSlcbm1tL21lbWNvbnRyb2wuYy01MTkxLVx0XHRnb3RvIG91dDtcbi0tXG5tbS9tZW1jb250cm9sLmM9NTQzMz12b2lkIG1lbV9jZ3JvdXBfc2tfYWxsb2Moc3RydWN0IHNvY2sgKnNrKVxuLS1cbm1tL21lbWNvbnRyb2wuYy01NDQ3LVx0XHRnb3RvIG91dDtcbm1tL21lbWNvbnRyb2wuYzo1NDQ4Olx0aWYgKCFjZ3JvdXBfc3Vic3lzX29uX2RmbChtZW1vcnlfY2dycF9zdWJzeXMpIFx1MDAyNlx1MDAyNiAhbWVtY2cxX3RjcG1lbV9hY3RpdmUobWVtY2cpKVxubW0vbWVtY29udHJvbC5jLTU0NDktXHRcdGdvdG8gb3V0O1xuLS1cbm1tL21lbWNvbnRyb2wuYz01NDg5PWJvb2wgbWVtX2Nncm91cF9za19jaGFyZ2UoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgbnJfcGFnZXMsXG4tLVxubW0vbWVtY29udHJvbC5jLTU0OTMtXG5tbS9tZW1jb250cm9sLmM6NTQ5NDpcdGlmICghY2dyb3VwX3N1YnN5c19vbl9kZmwobWVtb3J5X2NncnBfc3Vic3lzKSlcbm1tL21lbWNvbnRyb2wuYy01NDk1LVx0XHRyZXR1cm4gbWVtY2cxX2NoYXJnZV9za21lbShtZW1jZywgbnJfcGFnZXMsIGdmcF9tYXNrKTtcbi0tXG5tbS9tZW1jb250cm9sLmM9NTUxMD12b2lkIG1lbV9jZ3JvdXBfc2tfdW5jaGFyZ2UoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgbnJfcGFnZXMpXG4tLVxubW0vbWVtY29udHJvbC5jLTU1MTMtXG5tbS9tZW1jb250cm9sLmM6NTUxNDpcdGlmICghY2dyb3VwX3N1YnN5c19vbl9kZmwobWVtb3J5X2NncnBfc3Vic3lzKSkge1xubW0vbWVtY29udHJvbC5jLTU1MTUtXHRcdG1lbWNnMV91bmNoYXJnZV9za21lbShtZW1jZywgbnJfcGFnZXMpO1xuLS1cbm1tL21lbWNvbnRyb2wuYz01ODU1PWJvb2wgb2JqX2Nncm91cF9tYXlfenN3YXAoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnKVxuLS1cbm1tL21lbWNvbnRyb2wuYy01ODU5LVxubW0vbWVtY29udHJvbC5jOjU4NjA6XHRpZiAoIWNncm91cF9zdWJzeXNfb25fZGZsKG1lbW9yeV9jZ3JwX3N1YnN5cykpXG5tbS9tZW1jb250cm9sLmMtNTg2MS1cdFx0cmV0dXJuIHRydWU7XG4tLVxubW0vbWVtY29udHJvbC5jPTU4OTY9dm9pZCBvYmpfY2dyb3VwX2NoYXJnZV96c3dhcChzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csIHNpemVfdCBzaXplKVxuLS1cbm1tL21lbWNvbnRyb2wuYy01ODk5LVxubW0vbWVtY29udHJvbC5jOjU5MDA6XHRpZiAoIWNncm91cF9zdWJzeXNfb25fZGZsKG1lbW9yeV9jZ3JwX3N1YnN5cykpXG5tbS9tZW1jb250cm9sLmMtNTkwMS1cdFx0cmV0dXJuO1xuLS1cbm1tL21lbWNvbnRyb2wuYz01OTI4PXZvaWQgb2JqX2Nncm91cF91bmNoYXJnZV96c3dhcChzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csIHNpemVfdCBzaXplKVxuLS1cbm1tL21lbWNvbnRyb2wuYy01OTMxLVxubW0vbWVtY29udHJvbC5jOjU5MzI6XHRpZiAoIWNncm91cF9zdWJzeXNfb25fZGZsKG1lbW9yeV9jZ3JwX3N1YnN5cykpXG5tbS9tZW1jb250cm9sLmMtNTkzMy1cdFx0cmV0dXJuO1xuLS1cbm1tL21lbWNvbnRyb2wuYz02MDc1PXZvaWQgbWVtX2Nncm91cF9zaG93X3Byb3RlY3RlZF9tZW1vcnkoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxubW0vbWVtY29udHJvbC5jLTYwNzYte1xubW0vbWVtY29udHJvbC5jOjYwNzc6XHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpIHx8ICFjZ3JvdXBfc3Vic3lzX29uX2RmbChtZW1vcnlfY2dycF9zdWJzeXMpKVxubW0vbWVtY29udHJvbC5jLTYwNzgtXHRcdHJldHVybjtcbi0tXG5tbS9zd2FwLmg9MTA1PXN0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfc3dhcHBpbmVzcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4tLVxubW0vc3dhcC5oLTEwNy0jaWZkZWYgQ09ORklHX01FTUNHX1YxXG5tbS9zd2FwLmg6MTA4Olx0aWYgKCFjZ3JvdXBfc3Vic3lzX29uX2RmbChtZW1vcnlfY2dycF9zdWJzeXMpIFx1MDAyNlx1MDAyNlxubW0vc3dhcC5oLTEwOS1cdCAgICAhbWVtX2Nncm91cF9kaXNhYmxlZCgpIFx1MDAyNlx1MDAyNiAhbWVtX2Nncm91cF9pc19yb290KG1lbWNnKSlcbi0tXG5tbS92bXByZXNzdXJlLmM9MTA5PXZvaWQgdm1wcmVzc3VyZShnZnBfdCBnZnAsIGludCBvcmRlciwgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBib29sIHRyZWUsXG4tLVxubW0vdm1wcmVzc3VyZS5jLTEyMi1cdCAqL1xubW0vdm1wcmVzc3VyZS5jOjEyMzpcdGlmIChjZ3JvdXBfc3Vic3lzX29uX2RmbChtZW1vcnlfY2dycF9zdWJzeXMpID09IHRyZWUpXG5tbS92bXByZXNzdXJlLmMtMTI0LVx0XHRyZXR1cm47XG4tLVxubW0vdm1zY2FuLmM9MjM5PXN0YXRpYyBib29sIHdyaXRlYmFja190aHJvdHRsaW5nX3NhbmUoc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtMjQzLSNpZmRlZiBDT05GSUdfQ0dST1VQX1dSSVRFQkFDS1xubW0vdm1zY2FuLmM6MjQ0Olx0aWYgKGNncm91cF9zdWJzeXNfb25fZGZsKG1lbW9yeV9jZ3JwX3N1YnN5cykpXG5tbS92bXNjYW4uYy0yNDUtXHRcdHJldHVybiB0cnVlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAwNzowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNzY3NQoJCQkJCQkJb3V0cHV0OiAxNTkKCQkJCQkJCXRob3VnaHRzOiA4MzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgdGhlIFN3YXBwaW5lc3MgUGF0Y2gqKgoKT2theSwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC4gYGNncm91cF9zdWJzeXNfb25fZGZsYCBpcyBhIGtleSBpbmRpY2F0b3IgaGVyZSwgY2hlY2tpbmcgYSBzdGF0aWMga2V5LiBJZiBgQ09ORklHX01FTUNHYCBpcyBlbmFibGVkLCB0aGVuIGBtZW1vcnlfY2dycF9zdWJzeXNgIGlzIGRlZmluZWQuIEFuZCBzaW5jZSBgQ09ORklHX01FTUNHX1YxYCBpcyBkaXNhYmxlZCwgdjEgbWVtb3J5IGNncm91cHMgYXJlIGVmZmVjdGl2ZWx5IG9mZi4gVGhhdCBtZWFucyBtZW1vcnkgY2dyb3VwcyBvbmx5IGV4aXN0IG9uIHRoZSBkZWZhdWx0IGhpZXJhcmNoeSwgd2hpY2ggaXMgY2dyb3VwIHYyLiBUaGVyZWZvcmUsIHRoZSBgY2dyb3VwX3N1YnN5c19vbl9kZmwobWVtb3J5X2NncnBfc3Vic3lzKWAgY2hlY2sgd2lsbCBiZSB0cnVlLiBTbyBgbWVtX2Nncm91cF9zd2FwcGluZXNzYCB3aWxsIHJldHVybiBgdm1fc3dhcHBpbmVzc2AsIGJvdGggYmVmb3JlIGFuZCBhZnRlciB0aGUgcGF0Y2ggZm9yIHRoZSB0eXBpY2FsIGNhc2Ugd2hlcmUgYENPTkZJR19NRU1DRz15YC4gVGh1cywgbm8gY2hhbmdlIGluIGJlaGF2aW9yIHRoZXJlLgoKVGhlIG9ubHkgcmVhbCBjaGFuZ2UgSSBjYW4gc2VlIGlzIHdoZW4gYENPTkZJR19NRU1DRz1uYC4gSW4gdGhhdCBzcGVjaWZpYyBjYXNlLCBgc2Nfc3dhcHBpbmVzc2Agbm93IGFjdHVhbGx5IHJlc3BlY3RzIGBzYy0mZ3Q7cHJvYWN0aXZlX3N3YXBwaW5lc3NgLiBUaGF0JiMzOTtzIGEgdmVyeSBtaW5vciBjaGFuZ2UsIGFuZCBob25lc3RseSwgd2UgZG9uJiMzOTt0IHVzdWFsbHkgZnV6eiB3aXRoIGBDT05GSUdfTUVNQ0c9bmAuIEl0JiMzOTtzIG5vdCBhIHN0YW5kYXJkIGNvbmZpZ3VyYXRpb24gZm9yIFN5emthbGxlci4KCkhtbSwgSSBzaG91bGQgZG91YmxlLWNoZWNrIHRvIG1ha2Ugc3VyZSBgc2MtJmd0O3Byb2FjdGl2ZV9zd2FwcGluZXNzYCBpc24mIzM5O3QgdXNlZCBlbHNld2hlcmUuIEFoLCB5ZXMsIGxvb2tpbmcgYXQgYG1tL3Ztc2Nhbi5jYCwgdGhlIG5ldyBgc2Nfc3dhcHBpbmVzc2AgZnVuY3Rpb24gaXM6CgpgYGBjCnN0YXRpYyBpbnQgc2Nfc3dhcHBpbmVzcyhzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYywgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQp7CglpZiAoc2MtJmd0O3Byb2FjdGl2ZSAmYW1wOyZhbXA7IHNjLSZndDtwcm9hY3RpdmVfc3dhcHBpbmVzcykKCQlyZXR1cm4gKnNjLSZndDtwcm9hY3RpdmVfc3dhcHBpbmVzczsKCXJldHVybiBtZW1fY2dyb3VwX3N3YXBwaW5lc3MobWVtY2cpOwp9CmBgYAoKQmVmb3JlIHRoZSBwYXRjaCwgaWYgYENPTkZJR19NRU1DR2Agd2FzIGRpc2FibGVkLCBgc2Nfc3dhcHBpbmVzc2Agd2FzOgoKYGBgYwpzdGF0aWMgaW50IHNjX3N3YXBwaW5lc3Moc3RydWN0IHNjYW5fY29udHJvbCAqc2MsIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykKewoJcmV0dXJuIFJFQURfT05DRSh2bV9zd2FwcGluZXNzKTsKfQpgYGAKCk9rYXksIHNvIHRoZSBjaGFuZ2UgaXMgaXNvbGF0ZWQgdG8gdGhpcyBvbmUgbWlub3IgdXNlIGNhc2UuIE5vdywgZ2l2ZW4gdGhlIHByb21wdCYjMzk7cyBjcml0ZXJpYTogJiMzNDtSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zLi4uIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMuLi4gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93Li4uIElmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2ggdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuJiMzNDsKCldoaWxlIGl0ICpkb2VzKiBtb2RpZnkgY29yZSBrZXJuZWwgbG9naWMgaW4gYHZtc2Nhbi5jYCwgdGhlIGNvcmUgbG9naWMgY2hhbmdlcyBhcmUgZWZmZWN0aXZlbHkgYSByZWZhY3RvcmluZyBmb3IgdGhlIGRlZmF1bHQgYENPTkZJR19NRU1DRz15YCAodGhlIG5vcm1hbCBjb25maWd1cmF0aW9uIHRoYXQgd2UgZnV6eikuIFRoZSBmdW5jdGlvbmFsIGNoYW5nZSBmb3IgYENPTkZJR19NRU1DRz1uYCBpcyBzbyBtaW5pbWFsIGFuZCBvYnNjdXJlIHRoYXQgaXQgZG9lc24mIzM5O3Qgd2FycmFudCBmb2N1c2VkIGZ1enppbmcgZWZmb3J0cy4KCkkmIzM5O20gY29tZm9ydGFibGUgd2l0aCB0aGUgYFdvcnRoRnV6emluZz1mYWxzZWAuIFRoZSByZWFzb25pbmcgaXMgdGhhdCB0aGUgcGF0Y2ggaXMgYSByZWZhY3RvcmluZyB0byBlc3NlbnRpYWxseSBoaWRlIHRoZSBgc3dhcHBpbmVzc2AgZmllbGQgaW4gYHN0cnVjdCBtZW1fY2dyb3VwYCB1bmRlciBgQ09ORklHX01FTUNHX1YxYCwgd2hpY2ggc2F2ZXMgbWVtb3J5IHdoZW4gY2dyb3VwIHYxIGlzIGRpc2FibGVkLiBGb3IgdGhlIHN0YW5kYXJkIGBDT05GSUdfTUVNQ0c9eWAgY29uZmlndXJhdGlvbiwgdGhlcmUgaXMgemVybyBjaGFuZ2UgaW4gYmVoYXZpb3IuIFRoZSAqb25seSogZnVuY3Rpb25hbCBjaGFuZ2UgaXMgYSBzbWFsbCBmaXggZm9yIGBDT05GSUdfTUVNQ0c9bmAsIHNvIHRoYXQgcHJvYWN0aXZlIG5vZGUgcmVjbGFpbSB2aWEgc3lzZnMgbm93IHJlc3BlY3RzIHRoZSB1c2VyLXByb3ZpZGVkIGBzd2FwcGluZXNzYCBwYXJhbWV0ZXIuIFRoaXMgaXMgYSB2ZXJ5IG1pbm9yIGVkZ2UgY2FzZSBpbiBhIG5vbi1kZWZhdWx0IGNvbmZpZ3VyYXRpb24gYW5kIGRvZXNuJiMzOTt0IHdhcnJhbnQgZm9jdXNlZCBmdXp6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAwNzowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGlzIHByaW1hcmlseSBhIHJlZmFjdG9yaW5nIHRvIGhpZGUgdGhlIGBzd2FwcGluZXNzYCBmaWVsZCBpbiBgc3RydWN0IG1lbV9jZ3JvdXBgIHVuZGVyIGBDT05GSUdfTUVNQ0dfVjFgIHRvIHNhdmUgbWVtb3J5IHdoZW4gY2dyb3VwIHYxIGlzIGRpc2FibGVkLiBGb3IgdGhlIGRlZmF1bHQgYENPTkZJR19NRU1DRz15YCBjb25maWd1cmF0aW9uLCB0aGVyZSBpcyBubyBmdW5jdGlvbmFsIGNoYW5nZSBpbiBiZWhhdmlvci4gVGhlIG9ubHkgZnVuY3Rpb25hbCBjaGFuZ2UgaXMgYSBtaW5vciBmaXggZm9yIGBDT05GSUdfTUVNQ0c9bmAgd2hlcmUgcHJvYWN0aXZlIG5vZGUgcmVjbGFpbSB2aWEgc3lzZnMgbm93IHJlc3BlY3RzIHRoZSB1c2VyLXByb3ZpZGVkIGBzd2FwcGluZXNzYCBwYXJhbWV0ZXIgaW5zdGVhZCBvZiBpZ25vcmluZyBpdC4gVGhpcyBpcyBhIHZlcnkgbWlub3IgZWRnZSBjYXNlIGluIGEgbm9uLWRlZmF1bHQgY29uZmlnIGFuZCBkb2VzIG5vdCB3YXJyYW50IGZvY3VzZWQgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGlzIHByaW1hcmlseSBhIHJlZmFjdG9yaW5nIHRvIGhpZGUgdGhlIGBzd2FwcGluZXNzYCBmaWVsZCBpbiBgc3RydWN0IG1lbV9jZ3JvdXBgIHVuZGVyIGBDT05GSUdfTUVNQ0dfVjFgIHRvIHNhdmUgbWVtb3J5IHdoZW4gY2dyb3VwIHYxIGlzIGRpc2FibGVkLiBGb3IgdGhlIGRlZmF1bHQgYENPTkZJR19NRU1DRz15YCBjb25maWd1cmF0aW9uLCB0aGVyZSBpcyBubyBmdW5jdGlvbmFsIGNoYW5nZSBpbiBiZWhhdmlvci4gVGhlIG9ubHkgZnVuY3Rpb25hbCBjaGFuZ2UgaXMgYSBtaW5vciBmaXggZm9yIGBDT05GSUdfTUVNQ0c9bmAgd2hlcmUgcHJvYWN0aXZlIG5vZGUgcmVjbGFpbSB2aWEgc3lzZnMgbm93IHJlc3BlY3RzIHRoZSB1c2VyLXByb3ZpZGVkIGBzd2FwcGluZXNzYCBwYXJhbWV0ZXIgaW5zdGVhZCBvZiBpZ25vcmluZyBpdC4gVGhpcyBpcyBhIHZlcnkgbWlub3IgZWRnZSBjYXNlIGluIGEgbm9uLWRlZmF1bHQgY29uZmlnIGFuZCBkb2VzIG5vdCB3YXJyYW50IGZvY3VzZWQgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0yNFQwNzowMDoyMi42Nzk5NjY3MTlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTYwODUzNTIzMjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGlzIHByaW1hcmlseSBhIHJlZmFjdG9yaW5nIHRvIGhpZGUgdGhlIGBzd2FwcGluZXNzYCBmaWVsZCBpbiBgc3RydWN0IG1lbV9jZ3JvdXBgIHVuZGVyIGBDT05GSUdfTUVNQ0dfVjFgIHRvIHNhdmUgbWVtb3J5IHdoZW4gY2dyb3VwIHYxIGlzIGRpc2FibGVkLiBGb3IgdGhlIGRlZmF1bHQgYENPTkZJR19NRU1DRz15YCBjb25maWd1cmF0aW9uLCB0aGVyZSBpcyBubyBmdW5jdGlvbmFsIGNoYW5nZSBpbiBiZWhhdmlvci4gVGhlIG9ubHkgZnVuY3Rpb25hbCBjaGFuZ2UgaXMgYSBtaW5vciBmaXggZm9yIGBDT05GSUdfTUVNQ0c9bmAgd2hlcmUgcHJvYWN0aXZlIG5vZGUgcmVjbGFpbSB2aWEgc3lzZnMgbm93IHJlc3BlY3RzIHRoZSB1c2VyLXByb3ZpZGVkIGBzd2FwcGluZXNzYCBwYXJhbWV0ZXIgaW5zdGVhZCBvZiBpZ25vcmluZyBpdC4gVGhpcyBpcyBhIHZlcnkgbWlub3IgZWRnZSBjYXNlIGluIGEgbm9uLWRlZmF1bHQgY29uZmlnIGFuZCBkb2VzIG5vdCB3YXJyYW50IGZvY3VzZWQgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDA3OjAwOjIyLjY3OTk3NTY1OVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzkxMDE5MTI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNjIzNDEyNTA4MmJhNTY0YjhlY2Q1ZDRkYWI4OTgyMjk3ZTY1N2ZiNlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIEp1bCAyNCAwNzowMDoyMCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaCBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXFxuaW5kZXggOTU3MjYwNjc3Njc4MTUuLmU3YTc5NGRmYjQwZTQ5IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcXG5AQCAtMjM5LDggKzIzOSw2IEBAIHN0cnVjdCBtZW1fY2dyb3VwIHtcXG4gXFx0ICovXFxuIFxcdGJvb2wgb29tX2dyb3VwO1xcbiBcXG4tXFx0aW50IHN3YXBwaW5lc3M7XFxuLVxcbiBcXHQvKiBtZW1vcnkuZXZlbnRzIGFuZCBtZW1vcnkuZXZlbnRzLmxvY2FsICovXFxuIFxcdHN0cnVjdCBjZ3JvdXBfZmlsZSBldmVudHNfZmlsZTtcXG4gXFx0c3RydWN0IGNncm91cF9maWxlIGV2ZW50c19sb2NhbF9maWxlO1xcbkBAIC0zMTgsNiArMzE2LDggQEAgc3RydWN0IG1lbV9jZ3JvdXAge1xcbiBcXHQvKiBMaXN0IG9mIGV2ZW50cyB3aGljaCB1c2Vyc3BhY2Ugd2FudCB0byByZWNlaXZlICovXFxuIFxcdHN0cnVjdCBsaXN0X2hlYWQgZXZlbnRfbGlzdDtcXG4gXFx0c3BpbmxvY2tfdCBldmVudF9saXN0X2xvY2s7XFxuK1xcbitcXHRpbnQgc3dhcHBpbmVzcztcXG4gI2VuZGlmIC8qIENPTkZJR19NRU1DR19WMSAqL1xcbiBcXG4gXFx0c3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKm5vZGVpbmZvW107XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3dhcC5oIGIvaW5jbHVkZS9saW51eC9zd2FwLmhcXG5pbmRleCAwNTQ0YjJlYzRjNTY1Yi4uNDVmMzAxZDczZTJhZWUgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9zd2FwLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3N3YXAuaFxcbkBAIC0zMDksNyArMzA5LDYgQEAgc3RhdGljIGlubGluZSBib29sIGxydV9jYWNoZV9kaXNhYmxlZCh2b2lkKVxcbiB9XFxuIFxcbiBleHRlcm4gdW5zaWduZWQgbG9uZyBzaHJpbmtfYWxsX21lbW9yeSh1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTtcXG4tZXh0ZXJuIGludCB2bV9zd2FwcGluZXNzO1xcbiBsb25nIHJlbW92ZV9tYXBwaW5nKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcXG4gXFxuICNpZiBkZWZpbmVkKENPTkZJR19TWVNGUykgXFx1MDAyNlxcdTAwMjYgZGVmaW5lZChDT05GSUdfTlVNQSlcXG5AQCAtNDczLDI1ICs0NzIsNyBAQCBzdGF0aWMgaW5saW5lIGludCBhZGRfc3dhcF9leHRlbnQoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpcyxcXG4gfVxcbiAjZW5kaWYgLyogQ09ORklHX1NXQVAgKi9cXG4gI2lmZGVmIENPTkZJR19NRU1DR1xcbi1zdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX3N3YXBwaW5lc3Moc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbi17XFxuLVxcdC8qIENncm91cDIgZG9lc24ndCBoYXZlIHBlci1jZ3JvdXAgc3dhcHBpbmVzcyAqL1xcbi1cXHRpZiAoY2dyb3VwX3N1YnN5c19vbl9kZmwobWVtb3J5X2NncnBfc3Vic3lzKSlcXG4tXFx0XFx0cmV0dXJuIFJFQURfT05DRSh2bV9zd2FwcGluZXNzKTtcXG4tXFxuLVxcdC8qIHJvb3QgPyAqL1xcbi1cXHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpIHx8IG1lbV9jZ3JvdXBfaXNfcm9vdChtZW1jZykpXFxuLVxcdFxcdHJldHVybiBSRUFEX09OQ0Uodm1fc3dhcHBpbmVzcyk7XFxuLVxcbi1cXHRyZXR1cm4gUkVBRF9PTkNFKG1lbWNnLVxcdTAwM2Vzd2FwcGluZXNzKTtcXG4tfVxcbi1cXG4gdm9pZCBscnVfcmVwYXJlbnRfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LCBpbnQgbmlkKTtcXG4tI2Vsc2VcXG4tc3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF9zd2FwcGluZXNzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4te1xcbi1cXHRyZXR1cm4gUkVBRF9PTkNFKHZtX3N3YXBwaW5lc3MpO1xcbi19XFxuICNlbmRpZlxcbiBcXG4gI2lmIGRlZmluZWQoQ09ORklHX1NXQVApIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX01FTUNHKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19CTEtfQ0dST1VQKVxcbmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmNcXG5pbmRleCA4MzE5YWQ4YzVjMjNhYy4uNjg2NGI3NjQ1NmZiM2UgMTAwNjQ0XFxuLS0tIGEvbW0vbWVtY29udHJvbC5jXFxuKysrIGIvbW0vbWVtY29udHJvbC5jXFxuQEAgLTYzLDYgKzYzLDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NjaGVkL2lzb2xhdGlvbi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgva21lbWxlYWsuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFxcImludGVybmFsLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJzd2FwLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJzd2FwX3RhYmxlLmhcXFwiXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQvc29jay5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L2lwLmhcXHUwMDNlXFxuQEAgLTQxNzYsMTEgKzQxNzcsMTAgQEAgbWVtX2Nncm91cF9jc3NfYWxsb2Moc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKnBhcmVudF9jc3MpXFxuICNlbmRpZlxcbiBcXHRwYWdlX2NvdW50ZXJfc2V0X2hpZ2goXFx1MDAyNm1lbWNnLVxcdTAwM2Vzd2FwLCBQQUdFX0NPVU5URVJfTUFYKTtcXG4gXFx0aWYgKHBhcmVudCkge1xcbi1cXHRcXHRXUklURV9PTkNFKG1lbWNnLVxcdTAwM2Vzd2FwcGluZXNzLCBtZW1fY2dyb3VwX3N3YXBwaW5lc3MocGFyZW50KSk7XFxuLVxcbiBcXHRcXHRwYWdlX2NvdW50ZXJfaW5pdChcXHUwMDI2bWVtY2ctXFx1MDAzZW1lbW9yeSwgXFx1MDAyNnBhcmVudC1cXHUwMDNlbWVtb3J5LCBtZW1jZ19vbl9kZmwpO1xcbiBcXHRcXHRwYWdlX2NvdW50ZXJfaW5pdChcXHUwMDI2bWVtY2ctXFx1MDAzZXN3YXAsIFxcdTAwMjZwYXJlbnQtXFx1MDAzZXN3YXAsIGZhbHNlKTtcXG4gI2lmZGVmIENPTkZJR19NRU1DR19WMVxcbitcXHRcXHRXUklURV9PTkNFKG1lbWNnLVxcdTAwM2Vzd2FwcGluZXNzLCBtZW1fY2dyb3VwX3N3YXBwaW5lc3MocGFyZW50KSk7XFxuIFxcdFxcdG1lbWNnLVxcdTAwM2VtZW1vcnkudHJhY2tfZmFpbGNudCA9ICFtZW1jZ19vbl9kZmw7XFxuIFxcdFxcdFdSSVRFX09OQ0UobWVtY2ctXFx1MDAzZW9vbV9raWxsX2Rpc2FibGUsIFJFQURfT05DRShwYXJlbnQtXFx1MDAzZW9vbV9raWxsX2Rpc2FibGUpKTtcXG4gXFx0XFx0cGFnZV9jb3VudGVyX2luaXQoXFx1MDAyNm1lbWNnLVxcdTAwM2VrbWVtLCBcXHUwMDI2cGFyZW50LVxcdTAwM2VrbWVtLCBmYWxzZSk7XFxuZGlmZiAtLWdpdCBhL21tL3N3YXAuaCBiL21tL3N3YXAuaFxcbmluZGV4IGFiZDI2NTg4YWJkMjJjLi5iMDQ4OGY3YjY4YjVkMyAxMDA2NDRcXG4tLS0gYS9tbS9zd2FwLmhcXG4rKysgYi9tbS9zd2FwLmhcXG5AQCAtNCw2ICs0LDcgQEBcXG4gXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9hdG9taWMuaFxcdTAwM2UgLyogZm9yIGF0b21pY19sb25nX3QgKi9cXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21tLmhcXHUwMDNlIC8qIGZvciBQQUdFX1NISUZUICovXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9tZW1jb250cm9sLmhcXHUwMDNlIC8qIGZvciBtZW1fY2dyb3VwX3N3YXBwaW5lc3MoKSAqL1xcbiBcXG4gc3RydWN0IG1lbXBvbGljeTtcXG4gc3RydWN0IHN3YXBfaW9jYjtcXG5AQCAtOTksNiArMTAwLDE4IEBAIHN0cnVjdCBzd2FwX29wcyB7XFxuIFxcdHZvaWQgKCpzdWJtaXRfcmVhZCkoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgpO1xcbiB9O1xcbiBcXG4rZXh0ZXJuIGludCB2bV9zd2FwcGluZXNzO1xcbitcXG4rc3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF9zd2FwcGluZXNzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4re1xcbisjaWZkZWYgQ09ORklHX01FTUNHX1YxXFxuK1xcdGlmICghY2dyb3VwX3N1YnN5c19vbl9kZmwobWVtb3J5X2NncnBfc3Vic3lzKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgIW1lbV9jZ3JvdXBfZGlzYWJsZWQoKSBcXHUwMDI2XFx1MDAyNiAhbWVtX2Nncm91cF9pc19yb290KG1lbWNnKSlcXG4rXFx0XFx0cmV0dXJuIG1lbWNnLVxcdTAwM2Vzd2FwcGluZXNzO1xcbisjZW5kaWZcXG4rXFx0cmV0dXJuIFJFQURfT05DRSh2bV9zd2FwcGluZXNzKTtcXG4rfVxcbitcXG4gI2lmZGVmIENPTkZJR19TV0FQXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zd2Fwb3BzLmhcXHUwMDNlIC8qIGZvciBzd3Bfb2Zmc2V0ICovXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9ibGtfdHlwZXMuaFxcdTAwM2UgLyogZm9yIGJpb19lbmRfaW9fdCAqL1xcbmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jXFxuaW5kZXggMDZlMTAzZjk3ODFlNWQuLjE1NTE2N2IzNjE0YjZkIDEwMDY0NFxcbi0tLSBhL21tL3Ztc2Nhbi5jXFxuKysrIGIvbW0vdm1zY2FuLmNcXG5AQCAtMTk5LDYgKzE5OSwxMyBAQCBzdHJ1Y3Qgc2Nhbl9jb250cm9sIHtcXG4gICovXFxuIGludCB2bV9zd2FwcGluZXNzID0gNjA7XFxuIFxcbitzdGF0aWMgaW50IHNjX3N3YXBwaW5lc3Moc3RydWN0IHNjYW5fY29udHJvbCAqc2MsIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4re1xcbitcXHRpZiAoc2MtXFx1MDAzZXByb2FjdGl2ZSBcXHUwMDI2XFx1MDAyNiBzYy1cXHUwMDNlcHJvYWN0aXZlX3N3YXBwaW5lc3MpXFxuK1xcdFxcdHJldHVybiAqc2MtXFx1MDAzZXByb2FjdGl2ZV9zd2FwcGluZXNzO1xcbitcXHRyZXR1cm4gbWVtX2Nncm91cF9zd2FwcGluZXNzKG1lbWNnKTtcXG4rfVxcbitcXG4gI2lmZGVmIENPTkZJR19NRU1DR1xcbiBcXG4gLyogUmV0dXJucyB0cnVlIGZvciByZWNsYWltIHRocm91Z2ggY2dyb3VwIGxpbWl0cyBvciBjZ3JvdXAgaW50ZXJmYWNlcy4gKi9cXG5AQCAtMjM5LDEzICsyNDYsNiBAQCBzdGF0aWMgYm9vbCB3cml0ZWJhY2tfdGhyb3R0bGluZ19zYW5lKHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbiAjZW5kaWZcXG4gXFx0cmV0dXJuIGZhbHNlO1xcbiB9XFxuLVxcbi1zdGF0aWMgaW50IHNjX3N3YXBwaW5lc3Moc3RydWN0IHNjYW5fY29udHJvbCAqc2MsIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4te1xcbi1cXHRpZiAoc2MtXFx1MDAzZXByb2FjdGl2ZSBcXHUwMDI2XFx1MDAyNiBzYy1cXHUwMDNlcHJvYWN0aXZlX3N3YXBwaW5lc3MpXFxuLVxcdFxcdHJldHVybiAqc2MtXFx1MDAzZXByb2FjdGl2ZV9zd2FwcGluZXNzO1xcbi1cXHRyZXR1cm4gbWVtX2Nncm91cF9zd2FwcGluZXNzKG1lbWNnKTtcXG4tfVxcbiAjZWxzZVxcbiBzdGF0aWMgYm9vbCBjZ3JvdXBfcmVjbGFpbShzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4ge1xcbkBAIC0yNjEsMTEgKzI2MSw2IEBAIHN0YXRpYyBib29sIHdyaXRlYmFja190aHJvdHRsaW5nX3NhbmUoc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuIHtcXG4gXFx0cmV0dXJuIHRydWU7XFxuIH1cXG4tXFxuLXN0YXRpYyBpbnQgc2Nfc3dhcHBpbmVzcyhzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYywgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbi17XFxuLVxcdHJldHVybiBSRUFEX09OQ0Uodm1fc3dhcHBpbmVzcyk7XFxuLX1cXG4gI2VuZGlmXFxuIFxcbiBzdGF0aWMgdm9pZCBzZXRfdGFza19yZWNsYWltX3N0YXRlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMDc6MDA6MjMuNDcxOTE2MTA1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MjE1MjkzMzgzMDE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpcyBwcmltYXJpbHkgYSByZWZhY3RvcmluZyB0byBoaWRlIHRoZSBgc3dhcHBpbmVzc2AgZmllbGQgaW4gYHN0cnVjdCBtZW1fY2dyb3VwYCB1bmRlciBgQ09ORklHX01FTUNHX1YxYCB0byBzYXZlIG1lbW9yeSB3aGVuIGNncm91cCB2MSBpcyBkaXNhYmxlZC4gRm9yIHRoZSBkZWZhdWx0IGBDT05GSUdfTUVNQ0c9eWAgY29uZmlndXJhdGlvbiwgdGhlcmUgaXMgbm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYmVoYXZpb3IuIFRoZSBvbmx5IGZ1bmN0aW9uYWwgY2hhbmdlIGlzIGEgbWlub3IgZml4IGZvciBgQ09ORklHX01FTUNHPW5gIHdoZXJlIHByb2FjdGl2ZSBub2RlIHJlY2xhaW0gdmlhIHN5c2ZzIG5vdyByZXNwZWN0cyB0aGUgdXNlci1wcm92aWRlZCBgc3dhcHBpbmVzc2AgcGFyYW1ldGVyIGluc3RlYWQgb2YgaWdub3JpbmcgaXQuIFRoaXMgaXMgYSB2ZXJ5IG1pbm9yIGVkZ2UgY2FzZSBpbiBhIG5vbi1kZWZhdWx0IGNvbmZpZyBhbmQgZG9lcyBub3Qgd2FycmFudCBmb2N1c2VkIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDYyMzQxMjUwODJiYTU2NGI4ZWNkNWQ0ZGFiODk4MjI5N2U2NTdmYjZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1bCAyNCAwNzowMDoyMCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcbmluZGV4IDk1NzI2MDY3NzY3ODE1Li5lN2E3OTRkZmI0MGU0OSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxuQEAgLTIzOSw4ICsyMzksNiBAQCBzdHJ1Y3QgbWVtX2Nncm91cCB7XG4gXHQgKi9cbiBcdGJvb2wgb29tX2dyb3VwO1xuIFxuLVx0aW50IHN3YXBwaW5lc3M7XG4tXG4gXHQvKiBtZW1vcnkuZXZlbnRzIGFuZCBtZW1vcnkuZXZlbnRzLmxvY2FsICovXG4gXHRzdHJ1Y3QgY2dyb3VwX2ZpbGUgZXZlbnRzX2ZpbGU7XG4gXHRzdHJ1Y3QgY2dyb3VwX2ZpbGUgZXZlbnRzX2xvY2FsX2ZpbGU7XG5AQCAtMzE4LDYgKzMxNiw4IEBAIHN0cnVjdCBtZW1fY2dyb3VwIHtcbiBcdC8qIExpc3Qgb2YgZXZlbnRzIHdoaWNoIHVzZXJzcGFjZSB3YW50IHRvIHJlY2VpdmUgKi9cbiBcdHN0cnVjdCBsaXN0X2hlYWQgZXZlbnRfbGlzdDtcbiBcdHNwaW5sb2NrX3QgZXZlbnRfbGlzdF9sb2NrO1xuK1xuK1x0aW50IHN3YXBwaW5lc3M7XG4gI2VuZGlmIC8qIENPTkZJR19NRU1DR19WMSAqL1xuIFxuIFx0c3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKm5vZGVpbmZvW107XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zd2FwLmggYi9pbmNsdWRlL2xpbnV4L3N3YXAuaFxuaW5kZXggMDU0NGIyZWM0YzU2NWIuLjQ1ZjMwMWQ3M2UyYWVlIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9zd2FwLmhcbisrKyBiL2luY2x1ZGUvbGludXgvc3dhcC5oXG5AQCAtMzA5LDcgKzMwOSw2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBscnVfY2FjaGVfZGlzYWJsZWQodm9pZClcbiB9XG4gXG4gZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc2hyaW5rX2FsbF9tZW1vcnkodW5zaWduZWQgbG9uZyBucl9wYWdlcyk7XG4tZXh0ZXJuIGludCB2bV9zd2FwcGluZXNzO1xuIGxvbmcgcmVtb3ZlX21hcHBpbmcoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuIFxuICNpZiBkZWZpbmVkKENPTkZJR19TWVNGUykgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX05VTUEpXG5AQCAtNDczLDI1ICs0NzIsNyBAQCBzdGF0aWMgaW5saW5lIGludCBhZGRfc3dhcF9leHRlbnQoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpcyxcbiB9XG4gI2VuZGlmIC8qIENPTkZJR19TV0FQICovXG4gI2lmZGVmIENPTkZJR19NRU1DR1xuLXN0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfc3dhcHBpbmVzcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4te1xuLVx0LyogQ2dyb3VwMiBkb2Vzbid0IGhhdmUgcGVyLWNncm91cCBzd2FwcGluZXNzICovXG4tXHRpZiAoY2dyb3VwX3N1YnN5c19vbl9kZmwobWVtb3J5X2NncnBfc3Vic3lzKSlcbi1cdFx0cmV0dXJuIFJFQURfT05DRSh2bV9zd2FwcGluZXNzKTtcbi1cbi1cdC8qIHJvb3QgPyAqL1xuLVx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSB8fCBtZW1fY2dyb3VwX2lzX3Jvb3QobWVtY2cpKVxuLVx0XHRyZXR1cm4gUkVBRF9PTkNFKHZtX3N3YXBwaW5lc3MpO1xuLVxuLVx0cmV0dXJuIFJFQURfT05DRShtZW1jZy1cdTAwM2Vzd2FwcGluZXNzKTtcbi19XG4tXG4gdm9pZCBscnVfcmVwYXJlbnRfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LCBpbnQgbmlkKTtcbi0jZWxzZVxuLXN0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfc3dhcHBpbmVzcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4te1xuLVx0cmV0dXJuIFJFQURfT05DRSh2bV9zd2FwcGluZXNzKTtcbi19XG4gI2VuZGlmXG4gXG4gI2lmIGRlZmluZWQoQ09ORklHX1NXQVApIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19NRU1DRykgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX0JMS19DR1JPVVApXG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jXG5pbmRleCA4MzE5YWQ4YzVjMjNhYy4uNjg2NGI3NjQ1NmZiM2UgMTAwNjQ0XG4tLS0gYS9tbS9tZW1jb250cm9sLmNcbisrKyBiL21tL21lbWNvbnRyb2wuY1xuQEAgLTYzLDYgKzYzLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC9pc29sYXRpb24uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2ttZW1sZWFrLmhcdTAwM2VcbiAjaW5jbHVkZSBcImludGVybmFsLmhcIlxuKyNpbmNsdWRlIFwic3dhcC5oXCJcbiAjaW5jbHVkZSBcInN3YXBfdGFibGUuaFwiXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3NvY2suaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9pcC5oXHUwMDNlXG5AQCAtNDE3NiwxMSArNDE3NywxMCBAQCBtZW1fY2dyb3VwX2Nzc19hbGxvYyhzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqcGFyZW50X2NzcylcbiAjZW5kaWZcbiBcdHBhZ2VfY291bnRlcl9zZXRfaGlnaChcdTAwMjZtZW1jZy1cdTAwM2Vzd2FwLCBQQUdFX0NPVU5URVJfTUFYKTtcbiBcdGlmIChwYXJlbnQpIHtcbi1cdFx0V1JJVEVfT05DRShtZW1jZy1cdTAwM2Vzd2FwcGluZXNzLCBtZW1fY2dyb3VwX3N3YXBwaW5lc3MocGFyZW50KSk7XG4tXG4gXHRcdHBhZ2VfY291bnRlcl9pbml0KFx1MDAyNm1lbWNnLVx1MDAzZW1lbW9yeSwgXHUwMDI2cGFyZW50LVx1MDAzZW1lbW9yeSwgbWVtY2dfb25fZGZsKTtcbiBcdFx0cGFnZV9jb3VudGVyX2luaXQoXHUwMDI2bWVtY2ctXHUwMDNlc3dhcCwgXHUwMDI2cGFyZW50LVx1MDAzZXN3YXAsIGZhbHNlKTtcbiAjaWZkZWYgQ09ORklHX01FTUNHX1YxXG4rXHRcdFdSSVRFX09OQ0UobWVtY2ctXHUwMDNlc3dhcHBpbmVzcywgbWVtX2Nncm91cF9zd2FwcGluZXNzKHBhcmVudCkpO1xuIFx0XHRtZW1jZy1cdTAwM2VtZW1vcnkudHJhY2tfZmFpbGNudCA9ICFtZW1jZ19vbl9kZmw7XG4gXHRcdFdSSVRFX09OQ0UobWVtY2ctXHUwMDNlb29tX2tpbGxfZGlzYWJsZSwgUkVBRF9PTkNFKHBhcmVudC1cdTAwM2Vvb21fa2lsbF9kaXNhYmxlKSk7XG4gXHRcdHBhZ2VfY291bnRlcl9pbml0KFx1MDAyNm1lbWNnLVx1MDAzZWttZW0sIFx1MDAyNnBhcmVudC1cdTAwM2VrbWVtLCBmYWxzZSk7XG5kaWZmIC0tZ2l0IGEvbW0vc3dhcC5oIGIvbW0vc3dhcC5oXG5pbmRleCBhYmQyNjU4OGFiZDIyYy4uYjA0ODhmN2I2OGI1ZDMgMTAwNjQ0XG4tLS0gYS9tbS9zd2FwLmhcbisrKyBiL21tL3N3YXAuaFxuQEAgLTQsNiArNCw3IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYXRvbWljLmhcdTAwM2UgLyogZm9yIGF0b21pY19sb25nX3QgKi9cbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tbS5oXHUwMDNlIC8qIGZvciBQQUdFX1NISUZUICovXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbWVtY29udHJvbC5oXHUwMDNlIC8qIGZvciBtZW1fY2dyb3VwX3N3YXBwaW5lc3MoKSAqL1xuIFxuIHN0cnVjdCBtZW1wb2xpY3k7XG4gc3RydWN0IHN3YXBfaW9jYjtcbkBAIC05OSw2ICsxMDAsMTggQEAgc3RydWN0IHN3YXBfb3BzIHtcbiBcdHZvaWQgKCpzdWJtaXRfcmVhZCkoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgpO1xuIH07XG4gXG4rZXh0ZXJuIGludCB2bV9zd2FwcGluZXNzO1xuK1xuK3N0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfc3dhcHBpbmVzcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4re1xuKyNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcbitcdGlmICghY2dyb3VwX3N1YnN5c19vbl9kZmwobWVtb3J5X2NncnBfc3Vic3lzKSBcdTAwMjZcdTAwMjZcbitcdCAgICAhbWVtX2Nncm91cF9kaXNhYmxlZCgpIFx1MDAyNlx1MDAyNiAhbWVtX2Nncm91cF9pc19yb290KG1lbWNnKSlcbitcdFx0cmV0dXJuIG1lbWNnLVx1MDAzZXN3YXBwaW5lc3M7XG4rI2VuZGlmXG4rXHRyZXR1cm4gUkVBRF9PTkNFKHZtX3N3YXBwaW5lc3MpO1xuK31cbitcbiAjaWZkZWYgQ09ORklHX1NXQVBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zd2Fwb3BzLmhcdTAwM2UgLyogZm9yIHN3cF9vZmZzZXQgKi9cbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ibGtfdHlwZXMuaFx1MDAzZSAvKiBmb3IgYmlvX2VuZF9pb190ICovXG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xuaW5kZXggMDZlMTAzZjk3ODFlNWQuLjE1NTE2N2IzNjE0YjZkIDEwMDY0NFxuLS0tIGEvbW0vdm1zY2FuLmNcbisrKyBiL21tL3Ztc2Nhbi5jXG5AQCAtMTk5LDYgKzE5OSwxMyBAQCBzdHJ1Y3Qgc2Nhbl9jb250cm9sIHtcbiAgKi9cbiBpbnQgdm1fc3dhcHBpbmVzcyA9IDYwO1xuIFxuK3N0YXRpYyBpbnQgc2Nfc3dhcHBpbmVzcyhzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYywgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuK3tcbitcdGlmIChzYy1cdTAwM2Vwcm9hY3RpdmUgXHUwMDI2XHUwMDI2IHNjLVx1MDAzZXByb2FjdGl2ZV9zd2FwcGluZXNzKVxuK1x0XHRyZXR1cm4gKnNjLVx1MDAzZXByb2FjdGl2ZV9zd2FwcGluZXNzO1xuK1x0cmV0dXJuIG1lbV9jZ3JvdXBfc3dhcHBpbmVzcyhtZW1jZyk7XG4rfVxuK1xuICNpZmRlZiBDT05GSUdfTUVNQ0dcbiBcbiAvKiBSZXR1cm5zIHRydWUgZm9yIHJlY2xhaW0gdGhyb3VnaCBjZ3JvdXAgbGltaXRzIG9yIGNncm91cCBpbnRlcmZhY2VzLiAqL1xuQEAgLTIzOSwxMyArMjQ2LDYgQEAgc3RhdGljIGJvb2wgd3JpdGViYWNrX3Rocm90dGxpbmdfc2FuZShzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbiAjZW5kaWZcbiBcdHJldHVybiBmYWxzZTtcbiB9XG4tXG4tc3RhdGljIGludCBzY19zd2FwcGluZXNzKHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4te1xuLVx0aWYgKHNjLVx1MDAzZXByb2FjdGl2ZSBcdTAwMjZcdTAwMjYgc2MtXHUwMDNlcHJvYWN0aXZlX3N3YXBwaW5lc3MpXG4tXHRcdHJldHVybiAqc2MtXHUwMDNlcHJvYWN0aXZlX3N3YXBwaW5lc3M7XG4tXHRyZXR1cm4gbWVtX2Nncm91cF9zd2FwcGluZXNzKG1lbWNnKTtcbi19XG4gI2Vsc2VcbiBzdGF0aWMgYm9vbCBjZ3JvdXBfcmVjbGFpbShzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbiB7XG5AQCAtMjYxLDExICsyNjEsNiBAQCBzdGF0aWMgYm9vbCB3cml0ZWJhY2tfdGhyb3R0bGluZ19zYW5lKHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuIHtcbiBcdHJldHVybiB0cnVlO1xuIH1cbi1cbi1zdGF0aWMgaW50IHNjX3N3YXBwaW5lc3Moc3RydWN0IHNjYW5fY29udHJvbCAqc2MsIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbi17XG4tXHRyZXR1cm4gUkVBRF9PTkNFKHZtX3N3YXBwaW5lc3MpO1xuLX1cbiAjZW5kaWZcbiBcbiBzdGF0aWMgdm9pZCBzZXRfdGFza19yZWNsYWltX3N0YXRlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayxcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDA3OjAwOjIzLjQ3MTkxODgxNloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExODk0NTc2NzE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2ggU2VyaWVzIGZvciBQb3RlbnRpYWwgRnV6emluZyBUYXJnZXRzKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBuZWNlc3NpdGF0ZSBmdXp6aW5nLiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCBpdCdzIHByaW1hcmlseSByZWZhY3RvcmluZywgYnV0IEkgbmVlZCB0byBiZSBzdXJlLiBMZXQncyBicmVhayB0aGlzIGRvd24uXG5cblRoZSBwYXRjaCBlc3NlbnRpYWxseTpcblxuMS4gIE1vdmVzIHRoZSBgc3dhcHBpbmVzc2AgZmllbGQgaW4gYHN0cnVjdCBtZW1fY2dyb3VwYCB1bmRlciBgI2lmZGVmIENPTkZJR19NRU1DR19WMWAuXG4yLiAgTW92ZXMgYG1lbV9jZ3JvdXBfc3dhcHBpbmVzcygpYCBmcm9tIGBpbmNsdWRlL2xpbnV4L3N3YXAuaGAgdG8gYG1tL3N3YXAuaGAuXG4zLiAgQ2hhbmdlcyB0aGUgYG1lbV9jZ3JvdXBfc3dhcHBpbmVzcygpYCBpbXBsZW1lbnRhdGlvbiB0byBjb25kaXRpb25hbGx5IHVzZSBgbWVtY2ctXHUwMDNlc3dhcHBpbmVzc2AgYmFzZWQgb24gYCNpZmRlZiBDT05GSUdfTUVNQ0dfVjFgLlxuNC4gIFVwZGF0ZXMgYG1lbV9jZ3JvdXBfY3NzX2FsbG9jKClgIHRvIG9ubHkgaW5pdGlhbGl6ZSBgbWVtY2ctXHUwMDNlc3dhcHBpbmVzc2AgaWYgYENPTkZJR19NRU1DR19WMWAgaXMgZGVmaW5lZC5cbjUuICBNb3ZlcyBgc2Nfc3dhcHBpbmVzcygpYCBpbiBgbW0vdm1zY2FuLmNgIG91dCBvZiBgI2lmZGVmIENPTkZJR19NRU1DR2AuXG5cbkFscmlnaHQsIEkgc2VlIGEgY2xlYXIgc2hpZnQgaGVyZSB0b3dhcmRzIGlzb2xhdGluZyB0aGUgYHN3YXBwaW5lc3NgIGxvZ2ljIGZvciBtZW1vcnkgY2dyb3VwcyB2MS4gVGhlIG1haW4gY29uY2VybiBpcyB3aGV0aGVyIHRoaXMgaW50cm9kdWNlcyBhIHN1YnRsZSBjaGFuZ2UgaW4gYmVoYXZpb3IuXG5cbkxldCdzIGRpc3NlY3QgYG1lbV9jZ3JvdXBfc3dhcHBpbmVzcygpYCBjYXJlZnVsbHkuIFRoZSBvbGQgaW1wbGVtZW50YXRpb24gaGFkIGEgY2hlY2sgZm9yIGNncm91cCB2MiBhbmQgcm9vdCBjZ3JvdXAgdG8gcmV0dXJuIGdsb2JhbCBgdm1fc3dhcHBpbmVzc2AuIFRoZSBuZXcgdmVyc2lvbiBjb25kaXRpb25hbGx5IHVzZXMgYG1lbWNnLVx1MDAzZXN3YXBwaW5lc3NgIG9ubHkgdW5kZXIgYENPTkZJR19NRU1DR19WMWAuIElmIGBDT05GSUdfTUVNQ0dfVjFgIGlzIGRpc2FibGVkLCB0aGUgbmV3IHZlcnNpb24gZGlyZWN0bHkgcmV0dXJucyBgdm1fc3dhcHBpbmVzc2AuIFRoaXMgc2VlbXMgbGlrZSBvcHRpbWl6YXRpb24gZm9yIGNncm91cCB2MiBieSBoaWRpbmcgdGhlIHN3YXBwaW5lc3MgZmllbGQgaW4gdGhlIGBzdHJ1Y3QgbWVtX2Nncm91cGAsIGJlY2F1c2UgaXQgaXMgb25seSB1c2VkIGZvciBjZ3JvdXAgdjEuIEZ1bmN0aW9uYWxseSwgaXQgc3RpbGwgcmV0dXJucyB0aGUgc2FtZSB2YWx1ZSBhcyBiZWZvcmUgaWYgYENPTkZJR19NRU1DR19WMWAgaXMgZGlzYWJsZWQuXG5cbklmIGBDT05GSUdfTUVNQ0dfVjFgICppcyogZW5hYmxlZCwgdGhlIGxvZ2ljIGFwcGVhcnMgaWRlbnRpY2FsIHRvIHRoZSBvcmlnaW5hbDsgdGhlIHNhbWUgY29uZGl0aW9ucyBhcmUgY2hlY2tlZCBidXQgbW9yZSBzdWNjaW5jdGx5LlxuXG5TbyBmYXIsIGl0IGxvb2tzIGxpa2UgYSBjbGVhbiByZWZhY3RvcmluZyB0byBhdm9pZCB1bm5lY2Vzc2FyeSBjb2RlIGFuZCBtZW1vcnkgb3ZlcmhlYWQgd2hlbiB2MSBpcyBub3QgaW4gdXNlLiBIb3dldmVyLCB0aGUgbW92ZSBvZiBgc2Nfc3dhcHBpbmVzcygpYCBpcyBhIGxpdHRsZSB0cmlja2llciwgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IGhhc24ndCBjaGFuZ2VkIHRoZSBzZW1hbnRpY3Mgb2YgdGhlIGNvZGUuXG5cblRoZSBvbGQgY29kZSBjb25kaXRpb25hbGx5IGRlZmluZWQgYHNjX3N3YXBwaW5lc3MoKWAgYmFzZWQgb24gYENPTkZJR19NRU1DR2AsIHdoZXJlIHRoZSBkZWZhdWx0IHZhbHVlIHdhcyBgdm1fc3dhcHBpbmVzc2AuIFRoZSBuZXcgY29kZSAqYWx3YXlzKiBjYWxscyBgbWVtX2Nncm91cF9zd2FwcGluZXNzKClgLCB3aGljaCwgYXMgd2UndmUgYWxyZWFkeSBhc3Nlc3NlZCwgd2lsbCByZXR1cm4gYHZtX3N3YXBwaW5lc3NgIGlmIGBDT05GSUdfTUVNQ0dfVjFgIGlzIGRpc2FibGVkLiBUaGlzIHNlZW1zIHRvIGltcGx5IHRoYXQgYHNjLVx1MDAzZXByb2FjdGl2ZWAgKGFuZCBgc2MtXHUwMDNlcHJvYWN0aXZlX3N3YXBwaW5lc3NgKSB3aWxsIHN0aWxsIGJlIGNoZWNrZWQgZXZlbiBpZiBgQ09ORklHX01FTUNHYCBpcyBkaXNhYmxlZC4gSSB3aWxsIHVzZSBgZ3JlcHBlcmAgdG8gZG91YmxlIGNoZWNrIHRoYXQgYHN0cnVjdCBzY2FuX2NvbnRyb2xgIGV4aXN0cyBpZiBgQ09ORklHX01FTUNHYCBpcyBkaXNhYmxlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzcyOCwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMTcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQwNzowMDozNS4zNjY0OTg3NDFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTA1NDc1NTQwMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdHJ1Y3Qgc2Nhbl9jb250cm9sIFxcXFx7XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jLTc0LVxcbm1tL3Ztc2Nhbi5jOjc1OnN0cnVjdCBzY2FuX2NvbnRyb2wge1xcbm1tL3Ztc2Nhbi5jLTc2LVxcdC8qIEhvdyBtYW55IHBhZ2VzIHNocmlua19saXN0KCkgc2hvdWxkIHJlY2xhaW0gKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMDc6MDA6NDAuNDIxMjYyODA1WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQzOTY5MDY4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIGBtbS92bXNjYW4uY2AqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyB0aGUgc2Nhbm5pbmcgcHJvY2VzcyB3b3Jrcy4gVGltZSB0byBkaXZlIGludG8gdGhlIGNvZGUuIEknbSB0aGlua2luZyB0aGUgYmVzdCBwbGFjZSB0byBzdGFydCBpcyBgbW0vdm1zY2FuLmNgLiBJdCBtYWtlcyBzZW5zZSB0aGF0J3Mgd2hlcmUgdGhlIGNvcmUgVk0gc2Nhbm5pbmcgbG9naWMgd291bGQgcmVzaWRlLiBMZXQncyBzdGFydCBhcm91bmQgbGluZSA3NSwgdGhhdCdzIHVzdWFsbHkgYSBnb29kIGFyZWEgdG8gZ2V0IGEgZmVlbCBmb3IgdGhlIG1ham9yIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZC4gSSdtIHNwZWNpZmljYWxseSBsb29raW5nIGZvciBhIHN0cnVjdHVyZSBjYWxsZWQgYHNjYW5fY29udHJvbGAuIFRoaXMgaXMgYSBwcmV0dHkgY29tbW9uIHBhdHRlcm47IHRoZXNlIGNvbnRyb2wgc3RydWN0cyBvZnRlbiBjb250YWluIGFsbCB0aGUgdHVuYWJsZSBwYXJhbWV0ZXJzIGFuZCBzdGF0ZSBpbmZvcm1hdGlvbiB1c2VkIHRvIGd1aWRlIHRoZSBzY2FubmluZyBwcm9jZXNzLiBVbmRlcnN0YW5kaW5nIGBzY2FuX2NvbnRyb2xgIHNob3VsZCBnaXZlIG1lIGEgZ29vZCBlbnRyeSBwb2ludCBpbnRvIHRoZSBvdmVyYWxsIGZsb3cuIExldCdzIHNlZSB3aGF0IHdlIGZpbmQgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU0OTgsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQwNzowMDo0My44NjA5NTYxMTZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDcyMTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3Ztc2Nhbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDc1LFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA3NTpcXHRzdHJ1Y3Qgc2Nhbl9jb250cm9sIHtcXG4gIDc2OlxcdFxcdC8qIEhvdyBtYW55IHBhZ2VzIHNocmlua19saXN0KCkgc2hvdWxkIHJlY2xhaW0gKi9cXG4gIDc3OlxcdFxcdHVuc2lnbmVkIGxvbmcgbnJfdG9fcmVjbGFpbTtcXG4gIDc4OlxcdFxcbiAgNzk6XFx0XFx0LypcXG4gIDgwOlxcdFxcdCAqIE5vZGVtYXNrIG9mIG5vZGVzIGFsbG93ZWQgYnkgdGhlIGNhbGxlci4gSWYgTlVMTCwgYWxsIG5vZGVzXFxuICA4MTpcXHRcXHQgKiBhcmUgc2Nhbm5lZC5cXG4gIDgyOlxcdFxcdCAqL1xcbiAgODM6XFx0XFx0Y29uc3Qgbm9kZW1hc2tfdCAqbm9kZW1hc2s7XFxuICA4NDpcXHRcXG4gIDg1OlxcdFxcdC8qXFxuICA4NjpcXHRcXHQgKiBUaGUgbWVtb3J5IGNncm91cCB0aGF0IGhpdCBpdHMgbGltaXQgYW5kIGFzIGEgcmVzdWx0IGlzIHRoZVxcbiAgODc6XFx0XFx0ICogcHJpbWFyeSB0YXJnZXQgb2YgdGhpcyByZWNsYWltIGludm9jYXRpb24uXFxuICA4ODpcXHRcXHQgKi9cXG4gIDg5OlxcdFxcdHN0cnVjdCBtZW1fY2dyb3VwICp0YXJnZXRfbWVtX2Nncm91cDtcXG4gIDkwOlxcdFxcbiAgOTE6XFx0XFx0LypcXG4gIDkyOlxcdFxcdCAqIFNjYW4gcHJlc3N1cmUgYmFsYW5jaW5nIGJldHdlZW4gYW5vbiBhbmQgZmlsZSBMUlVzXFxuICA5MzpcXHRcXHQgKi9cXG4gIDk0OlxcdFxcdHVuc2lnbmVkIGxvbmdcXHRhbm9uX2Nvc3Q7XFxuICA5NTpcXHRcXHR1bnNpZ25lZCBsb25nXFx0ZmlsZV9jb3N0O1xcbiAgOTY6XFx0XFxuICA5NzpcXHRcXHQvKiBTd2FwcGluZXNzIHZhbHVlIGZvciBwcm9hY3RpdmUgcmVjbGFpbS4gQWx3YXlzIHVzZSBzY19zd2FwcGluZXNzKCkhICovXFxuICA5ODpcXHRcXHRpbnQgKnByb2FjdGl2ZV9zd2FwcGluZXNzO1xcbiAgOTk6XFx0XFxuIDEwMDpcXHRcXHQvKiBDYW4gYWN0aXZlIGZvbGlvcyBiZSBkZWFjdGl2YXRlZCBhcyBwYXJ0IG9mIHJlY2xhaW0/ICovXFxuIDEwMTpcXHQjZGVmaW5lIERFQUNUSVZBVEVfQU5PTiAxXFxuIDEwMjpcXHQjZGVmaW5lIERFQUNUSVZBVEVfRklMRSAyXFxuIDEwMzpcXHRcXHR1bnNpZ25lZCBpbnQgbWF5X2RlYWN0aXZhdGU6MjtcXG4gMTA0OlxcdFxcdHVuc2lnbmVkIGludCBmb3JjZV9kZWFjdGl2YXRlOjE7XFxuIDEwNTpcXHRcXHR1bnNpZ25lZCBpbnQgc2tpcHBlZF9kZWFjdGl2YXRlOjE7XFxuIDEwNjpcXHRcXG4gMTA3OlxcdFxcdC8qIHpvbmVfcmVjbGFpbV9tb2RlLCBib29zdCByZWNsYWltICovXFxuIDEwODpcXHRcXHR1bnNpZ25lZCBpbnQgbWF5X3dyaXRlcGFnZToxO1xcbiAxMDk6XFx0XFxuIDExMDpcXHRcXHQvKiB6b25lX3JlY2xhaW1fbW9kZSAqL1xcbiAxMTE6XFx0XFx0dW5zaWduZWQgaW50IG1heV91bm1hcDoxO1xcbiAxMTI6XFx0XFxuIDExMzpcXHRcXHQvKiB6b25lX3JlY2xhaW1fbW9kZSwgYm9vc3QgcmVjbGFpbSwgY2dyb3VwIHJlc3RyaWN0aW9ucyAqL1xcbiAxMTQ6XFx0XFx0dW5zaWduZWQgaW50IG1heV9zd2FwOjE7XFxuIDExNTpcXHRcXG4gMTE2OlxcdFxcdC8qIE5vdCBhbGxvdyBjYWNoZV90cmltX21vZGUgdG8gYmUgdHVybmVkIG9uIGFzIHBhcnQgb2YgcmVjbGFpbT8gKi9cXG4gMTE3OlxcdFxcdHVuc2lnbmVkIGludCBub19jYWNoZV90cmltX21vZGU6MTtcXG4gMTE4OlxcdFxcbiAxMTk6XFx0XFx0LyogSGFzIGNhY2hlX3RyaW1fbW9kZSBmYWlsZWQgYXQgbGVhc3Qgb25jZT8gKi9cXG4gMTIwOlxcdFxcdHVuc2lnbmVkIGludCBjYWNoZV90cmltX21vZGVfZmFpbGVkOjE7XFxuIDEyMTpcXHRcXG4gMTIyOlxcdFxcdC8qIFByb2FjdGl2ZSByZWNsYWltIGludm9rZWQgYnkgdXNlcnNwYWNlICovXFxuIDEyMzpcXHRcXHR1bnNpZ25lZCBpbnQgcHJvYWN0aXZlOjE7XFxuIDEyNDpcXHRcXG4gMTI1OlxcdFxcdC8qXFxuIDEyNjpcXHRcXHQgKiBDZ3JvdXAgbWVtb3J5IGJlbG93IG1lbW9yeS5sb3cgaXMgcHJvdGVjdGVkIGFzIGxvbmcgYXMgd2VcXG4gMTI3OlxcdFxcdCAqIGRvbid0IHRocmVhdGVuIHRvIE9PTS4gSWYgYW55IGNncm91cCBpcyByZWNsYWltZWQgYXRcXG4gMTI4OlxcdFxcdCAqIHJlZHVjZWQgZm9yY2Ugb3IgcGFzc2VkIG92ZXIgZW50aXJlbHkgZHVlIHRvIGl0cyBtZW1vcnkubG93XFxuIDEyOTpcXHRcXHQgKiBzZXR0aW5nIChtZW1jZ19sb3dfc2tpcHBlZCksIGFuZCBub3RoaW5nIGlzIHJlY2xhaW1lZCBhcyBhXFxuIDEzMDpcXHRcXHQgKiByZXN1bHQsIHRoZW4gZ28gYmFjayBmb3Igb25lIG1vcmUgY3ljbGUgdGhhdCByZWNsYWltcyB0aGUgcHJvdGVjdGVkXFxuIDEzMTpcXHRcXHQgKiBtZW1vcnkgKG1lbWNnX2xvd19yZWNsYWltKSB0byBhdmVydCBPT00uXFxuIDEzMjpcXHRcXHQgKi9cXG4gMTMzOlxcdFxcdHVuc2lnbmVkIGludCBtZW1jZ19sb3dfcmVjbGFpbToxO1xcbiAxMzQ6XFx0XFx0dW5zaWduZWQgaW50IG1lbWNnX2xvd19za2lwcGVkOjE7XFxuIDEzNTpcXHRcXG4gMTM2OlxcdFxcdC8qIFNoYXJlZCBjZ3JvdXAgdHJlZSB3YWxrIGZhaWxlZCwgcmVzY2FuIHRoZSB3aG9sZSB0cmVlICovXFxuIDEzNzpcXHRcXHR1bnNpZ25lZCBpbnQgbWVtY2dfZnVsbF93YWxrOjE7XFxuIDEzODpcXHRcXG4gMTM5OlxcdFxcdHVuc2lnbmVkIGludCBoaWJlcm5hdGlvbl9tb2RlOjE7XFxuIDE0MDpcXHRcXG4gMTQxOlxcdFxcdC8qIE9uZSBvZiB0aGUgem9uZXMgaXMgcmVhZHkgZm9yIGNvbXBhY3Rpb24gKi9cXG4gMTQyOlxcdFxcdHVuc2lnbmVkIGludCBjb21wYWN0aW9uX3JlYWR5OjE7XFxuIDE0MzpcXHRcXG4gMTQ0OlxcdFxcdC8qIFRoZXJlIGlzIGVhc2lseSByZWNsYWltYWJsZSBjb2xkIGNhY2hlIGluIHRoZSBjdXJyZW50IG5vZGUgKi9cXG4gMTQ1OlxcdFxcdHVuc2lnbmVkIGludCBjYWNoZV90cmltX21vZGU6MTtcXG4gMTQ2OlxcdFxcbiAxNDc6XFx0XFx0LyogVGhlIGZpbGUgZm9saW9zIG9uIHRoZSBjdXJyZW50IG5vZGUgYXJlIGRhbmdlcm91c2x5IGxvdyAqL1xcbiAxNDg6XFx0XFx0dW5zaWduZWQgaW50IGZpbGVfaXNfdGlueToxO1xcbiAxNDk6XFx0XFxuIDE1MDpcXHRcXHQvKiBBbHdheXMgZGlzY2FyZCBpbnN0ZWFkIG9mIGRlbW90aW5nIHRvIGxvd2VyIHRpZXIgbWVtb3J5ICovXFxuIDE1MTpcXHRcXHR1bnNpZ25lZCBpbnQgbm9fZGVtb3Rpb246MTtcXG4gMTUyOlxcdFxcbiAxNTM6XFx0XFx0LyogQWxsb2NhdGlvbiBvcmRlciAqL1xcbiAxNTQ6XFx0XFx0czggb3JkZXI7XFxuIDE1NTpcXHRcXG4gMTU2OlxcdFxcdC8qIFNjYW4gKHRvdGFsX3NpemUgXFx1MDAzZVxcdTAwM2UgcHJpb3JpdHkpIHBhZ2VzIGF0IG9uY2UgKi9cXG4gMTU3OlxcdFxcdHM4IHByaW9yaXR5O1xcbiAxNTg6XFx0XFxuIDE1OTpcXHRcXHQvKiBUaGUgaGlnaGVzdCB6b25lIHRvIGlzb2xhdGUgZm9saW9zIGZvciByZWNsYWltIGZyb20gKi9cXG4gMTYwOlxcdFxcdHM4IHJlY2xhaW1faWR4O1xcbiAxNjE6XFx0XFxuIDE2MjpcXHRcXHQvKiBUaGlzIGNvbnRleHQncyBHRlAgbWFzayAqL1xcbiAxNjM6XFx0XFx0Z2ZwX3QgZ2ZwX21hc2s7XFxuIDE2NDpcXHRcXG4gMTY1OlxcdFxcdC8qIEluY3JlbWVudGVkIGJ5IHRoZSBudW1iZXIgb2YgaW5hY3RpdmUgcGFnZXMgdGhhdCB3ZXJlIHNjYW5uZWQgKi9cXG4gMTY2OlxcdFxcdHVuc2lnbmVkIGxvbmcgbnJfc2Nhbm5lZDtcXG4gMTY3OlxcdFxcbiAxNjg6XFx0XFx0LyogTnVtYmVyIG9mIHBhZ2VzIGZyZWVkIHNvIGZhciBkdXJpbmcgYSBjYWxsIHRvIHNocmlua196b25lcygpICovXFxuIDE2OTpcXHRcXHR1bnNpZ25lZCBsb25nIG5yX3JlY2xhaW1lZDtcXG4gMTcwOlxcdFxcbiAxNzE6XFx0XFx0c3RydWN0IHtcXG4gMTcyOlxcdFxcdFxcdHVuc2lnbmVkIGludCBkaXJ0eTtcXG4gMTczOlxcdFxcdFxcdHVuc2lnbmVkIGludCBjb25nZXN0ZWQ7XFxuIDE3NDpcXHRcXHRcXHR1bnNpZ25lZCBpbnQgd3JpdGViYWNrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQwNzowMDo0My44NjI0MzE2MTZaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3ODIyNTkzODU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyBQcm9hY3RpdmUgUmVjbGFpbSBpbiB0aGUgTGludXggS2VybmVsKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSwgYW5kIEkgc2VlIHRoYXQgYm90aCBgcHJvYWN0aXZlYCBhbmQgYHByb2FjdGl2ZV9zd2FwcGluZXNzYCBhcmUgKmFsd2F5cyogbWVtYmVycyBvZiB0aGUgYHNjYW5fY29udHJvbGAgc3RydWN0LiBUaGF0J3MgYSBiaXQgY3VyaW91cywgZXNwZWNpYWxseSBzaW5jZSBJJ20gdHJ5aW5nIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgYWxsIGJlaGF2ZXMgd2l0aCBhbmQgd2l0aG91dCBtZW1vcnkgY2dyb3VwcyBlbmFibGVkLiBJdCBtYWtlcyBtZSB3b25kZXIsIGlmIGBDT05GSUdfTUVNQ0dgIGlzIGRpc2FibGVkLCBkb2VzIHRoaXMgY29uY2VwdCBvZiBcInByb2FjdGl2ZSByZWNsYWltXCIgZXZlbiAqZXhpc3QqIGluIGEgbWVhbmluZ2Z1bCB3YXk/IEkgbWVhbiwgYXJlIHRoZXNlIHZhcmlhYmxlcyBqdXN0IGFsbG9jYXRlZCBhbmQgdW51c2VkPyBPciBhcmUgdGhleSBzdGlsbCB1c2VkIGZvciBzb21ldGhpbmcgZXZlbiBpbiBhIG5vbi1jZ3JvdXAgY29udGV4dD9cblxuTXkgbmV4dCBzdGVwIGlzIGNsZWFyIOKAkyBJIG5lZWQgdG8gdHJhY2sgZG93biBleGFjdGx5ICp3aGVyZSogYHByb2FjdGl2ZWAgaXMgYmVpbmcgc2V0LiBUaGF0J3MgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIGl0cyBwdXJwb3NlIGFuZCBpZiBpdCdzIHJlbGV2YW50IGluIGFsbCBjb25maWd1cmF0aW9ucy4gTGV0J3Mgc3RhcnQgdHJhY2luZyB0aGUgY29kZSBwYXRocy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzExNSwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMDc6MDA6NTEuNjg1MDI3NTJaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc4NDIxMjA5MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwcm9hY3RpdmUgPSAxXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTc4NTU9aW50IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oY2hhciAqYnVmLFxcbi0tXFxubW0vdm1zY2FuLmMtNzk0MC1cXHRcXHRcXHRcXHQubWF5X3N3YXAgPSAxLFxcbm1tL3Ztc2Nhbi5jOjc5NDE6XFx0XFx0XFx0XFx0LnByb2FjdGl2ZSA9IDEsXFxubW0vdm1zY2FuLmMtNzk0Mi1cXHRcXHRcXHR9O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQwNzowMDo1Ni40NjkyNDUwMDFaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODY0NjY5MTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCB1c2VyIGFuZCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipEaXZpbmcgaW50byBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgaW4gYG1tL3Ztc2Nhbi5jYCoqXG5cbkFscmlnaHQsIEknbSB0aGlua2luZyBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCBpcyBpbXBsZW1lbnRlZC4gSSdtIHNwZWNpZmljYWxseSBsb29raW5nIGF0IHdoZXJlIGl0J3MgZGVmaW5lZCBhbmQgdXNlZCB3aXRoaW4gdGhlIGBtbS92bXNjYW4uY2AgZmlsZS4gSSdtIHByb2JhYmx5IHRyeWluZyB0byB1bmRlcnN0YW5kIHRoZSBjaXJjdW1zdGFuY2VzIHVuZGVyIHdoaWNoIHRoaXMgbWVjaGFuaXNtIGdldHMgdHJpZ2dlcmVkLiBJcyBpdCBhbiBhdXRvbWF0aWMgcmVzcG9uc2UsIG9yIGlzIGl0IGludm9rZWQgaW4gYSBtb3JlIGNvbnRyb2xsZWQgd2F5PyBJIHN1c3BlY3QgSSdtIGRlYWxpbmcgd2l0aCBhIHNjZW5hcmlvIHdoZXJlIHRoZSBzeXN0ZW0gaXMgYW50aWNpcGF0aW5nIG1lbW9yeSBwcmVzc3VyZSBhbmQgcHJvYWN0aXZlbHkgdHJ5aW5nIHRvIGZyZWUgdXAgcmVzb3VyY2VzIGJlZm9yZSB0aGluZ3MgZ2V0IGNyaXRpY2FsLiBNYXliZSBJJ20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaG93IGFnZ3Jlc3NpdmUgdGhpcyBwcm9hY3RpdmUgcmVjbGFpbSBpcywgYW5kIGhvdyBpdCBiYWxhbmNlcyByZXNvdXJjZSBhbGxvY2F0aW9uIHdpdGggbGF0ZW5jeS4gUGVyaGFwcyBJJ20gbG9va2luZyBmb3IgdGhlIHRyaWdnZXJzLiBJcyBpdCB0aGUgdGFzayB0aGF0IGlzIGJsb2NrZWQ/IE9yIHRoZSB3aG9sZSBzeXN0ZW0/IEVpdGhlciB3YXkgSSB3YW50IHRvIHJlbWluZCBteXNlbGYgaG93IHRoaXMgaW50ZXJhY3RzIHdpdGggdGhlIHBhZ2UgcmVwbGFjZW1lbnQgYWxnb3JpdGhtcywgYW5kIHdoZXRoZXIgaXQncyB0aWVkIHRvIHNwZWNpZmljIHVzZXIgcHJvY2Vzc2VzIG9yIGEgbW9yZSBnbG9iYWwgc3RyYXRlZ3kuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlIGFuZCBzZWUgd2hhdCBpbnNpZ2h0cyBJIGNhbiBnbGVhbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NzQ5MywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDA3OjAxOjAwLjMzMzkxNjQzWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxNjY4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS92bXNjYW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3ODU1LFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNzg1NTpcXHRpbnQgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbShjaGFyICpidWYsXFxuNzg1NjpcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHBnX2RhdGFfdCAqcGdkYXQpXFxuNzg1NzpcXHR7XFxuNzg1ODpcXHRcXHR1bnNpZ25lZCBpbnQgbnJfcmV0cmllcyA9IE1BWF9SRUNMQUlNX1JFVFJJRVM7XFxuNzg1OTpcXHRcXHR1bnNpZ25lZCBsb25nIG5yX3RvX3JlY2xhaW0sIG5yX3JlY2xhaW1lZCA9IDA7XFxuNzg2MDpcXHRcXHRpbnQgc3dhcHBpbmVzcyA9IC0xO1xcbjc4NjE6XFx0XFx0Y2hhciAqb2xkX2J1ZiwgKnN0YXJ0O1xcbjc4NjI6XFx0XFx0c3Vic3RyaW5nX3QgYXJnc1tNQVhfT1BUX0FSR1NdO1xcbjc4NjM6XFx0XFx0Z2ZwX3QgZ2ZwX21hc2sgPSBHRlBfS0VSTkVMO1xcbjc4NjQ6XFx0XFxuNzg2NTpcXHRcXHRpZiAoIWJ1ZiB8fCAoIW1lbWNnIFxcdTAwMjZcXHUwMDI2ICFwZ2RhdCkgfHwgKG1lbWNnIFxcdTAwMjZcXHUwMDI2IHBnZGF0KSlcXG43ODY2OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjc4Njc6XFx0XFxuNzg2ODpcXHRcXHRidWYgPSBzdHJzdHJpcChidWYpO1xcbjc4Njk6XFx0XFxuNzg3MDpcXHRcXHRvbGRfYnVmID0gYnVmO1xcbjc4NzE6XFx0XFx0bnJfdG9fcmVjbGFpbSA9IG1lbXBhcnNlKGJ1ZiwgXFx1MDAyNmJ1ZikgLyBQQUdFX1NJWkU7XFxuNzg3MjpcXHRcXHRpZiAoYnVmID09IG9sZF9idWYpXFxuNzg3MzpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG43ODc0OlxcdFxcbjc4NzU6XFx0XFx0YnVmID0gc3Ryc3RyaXAoYnVmKTtcXG43ODc2OlxcdFxcbjc4Nzc6XFx0XFx0d2hpbGUgKChzdGFydCA9IHN0cnNlcChcXHUwMDI2YnVmLCBcXFwiIFxcXCIpKSAhPSBOVUxMKSB7XFxuNzg3ODpcXHRcXHRcXHRpZiAoIXN0cmxlbihzdGFydCkpXFxuNzg3OTpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG43ODgwOlxcdFxcdFxcdHN3aXRjaCAobWF0Y2hfdG9rZW4oc3RhcnQsIHRva2VucywgYXJncykpIHtcXG43ODgxOlxcdFxcdFxcdGNhc2UgTUVNT1JZX1JFQ0xBSU1fU1dBUFBJTkVTUzpcXG43ODgyOlxcdFxcdFxcdFxcdGlmIChtYXRjaF9pbnQoXFx1MDAyNmFyZ3NbMF0sIFxcdTAwMjZzd2FwcGluZXNzKSlcXG43ODgzOlxcdFxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjc4ODQ6XFx0XFx0XFx0XFx0aWYgKHN3YXBwaW5lc3MgXFx1MDAzYyBNSU5fU1dBUFBJTkVTUyB8fFxcbjc4ODU6XFx0XFx0XFx0XFx0ICAgIHN3YXBwaW5lc3MgXFx1MDAzZSBNQVhfU1dBUFBJTkVTUylcXG43ODg2OlxcdFxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjc4ODc6XFx0XFx0XFx0XFx0YnJlYWs7XFxuNzg4ODpcXHRcXHRcXHRjYXNlIE1FTU9SWV9SRUNMQUlNX1NXQVBQSU5FU1NfTUFYOlxcbjc4ODk6XFx0XFx0XFx0XFx0c3dhcHBpbmVzcyA9IFNXQVBQSU5FU1NfQU5PTl9PTkxZO1xcbjc4OTA6XFx0XFx0XFx0XFx0YnJlYWs7XFxuNzg5MTpcXHRcXHRcXHRkZWZhdWx0Olxcbjc4OTI6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuNzg5MzpcXHRcXHRcXHR9XFxuNzg5NDpcXHRcXHR9XFxuNzg5NTpcXHRcXG43ODk2OlxcdFxcdHdoaWxlIChucl9yZWNsYWltZWQgXFx1MDAzYyBucl90b19yZWNsYWltKSB7XFxuNzg5NzpcXHRcXHRcXHQvKiBXaWxsIGNvbnZlcmdlIG9uIHplcm8sIGJ1dCByZWNsYWltIGVuZm9yY2VzIGEgbWluaW11bSAqL1xcbjc4OTg6XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBiYXRjaF9zaXplID0gKG5yX3RvX3JlY2xhaW0gLSBucl9yZWNsYWltZWQpIC8gNDtcXG43ODk5OlxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgcmVjbGFpbWVkO1xcbjc5MDA6XFx0XFxuNzkwMTpcXHRcXHRcXHQvKlxcbjc5MDI6XFx0XFx0XFx0ICogUmV0dXJuIC1FUkVTVEFSVFNZUyB0byBhbGxvdyB0aGUgZnJlZXplciB0byBpbnRlcnJ1cHQgdGhlXFxuNzkwMzpcXHRcXHRcXHQgKiB0YXNrLiBUaGUgc3lzY2FsbCB3aWxsIGJlIHRyYW5zcGFyZW50bHkgcmVzdGFydGVkIHVwb25cXG43OTA0OlxcdFxcdFxcdCAqIHJlc3VtZS4gRm9yIHJlYWwgc2lnbmFscywgaXQgZWl0aGVyIHJlc3RhcnRzIHRoZSBzeXNjYWxsXFxuNzkwNTpcXHRcXHRcXHQgKiAoaWYgU0FfUkVTVEFSVCBpcyBzZXQpIG9yIGlzIGNvbnZlcnRlZCB0byAtRUlOVFIgYnkgdGhlXFxuNzkwNjpcXHRcXHRcXHQgKiBzaWduYWwgbGF5ZXIuXFxuNzkwNzpcXHRcXHRcXHQgKi9cXG43OTA4OlxcdFxcdFxcdGlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSlcXG43OTA5OlxcdFxcdFxcdFxcdHJldHVybiAtRVJFU1RBUlRTWVM7XFxuNzkxMDpcXHRcXG43OTExOlxcdFxcdFxcdC8qIGNncm91cF9ybWRpcigpIHdhaXRzIGZvciB1cyB3aXRoIGNncm91cF9tdXRleCBoZWxkLiAqL1xcbjc5MTI6XFx0XFx0XFx0aWYgKG1lbWNnIFxcdTAwMjZcXHUwMDI2IG1lbWNnX2lzX2R5aW5nKG1lbWNnKSlcXG43OTEzOlxcdFxcdFxcdFxcdHJldHVybiAtRUFHQUlOO1xcbjc5MTQ6XFx0XFxuNzkxNTpcXHRcXHRcXHQvKlxcbjc5MTY6XFx0XFx0XFx0ICogVGhpcyBpcyB0aGUgZmluYWwgYXR0ZW1wdCwgZHJhaW4gcGVyY3B1IGxydSBjYWNoZXMgaW4gdGhlXFxuNzkxNzpcXHRcXHRcXHQgKiBob3BlIG9mIGludHJvZHVjaW5nIG1vcmUgZXZpY3RhYmxlIHBhZ2VzLlxcbjc5MTg6XFx0XFx0XFx0ICovXFxuNzkxOTpcXHRcXHRcXHRpZiAoIW5yX3JldHJpZXMpXFxuNzkyMDpcXHRcXHRcXHRcXHRscnVfYWRkX2RyYWluX2FsbCgpO1xcbjc5MjE6XFx0XFxuNzkyMjpcXHRcXHRcXHRpZiAobWVtY2cpIHtcXG43OTIzOlxcdFxcdFxcdFxcdHVuc2lnbmVkIGludCByZWNsYWltX29wdGlvbnM7XFxuNzkyNDpcXHRcXG43OTI1OlxcdFxcdFxcdFxcdHJlY2xhaW1fb3B0aW9ucyA9IE1FTUNHX1JFQ0xBSU1fTUFZX1NXQVAgfFxcbjc5MjY6XFx0XFx0XFx0XFx0XFx0XFx0ICBNRU1DR19SRUNMQUlNX1BST0FDVElWRTtcXG43OTI3OlxcdFxcdFxcdFxcdHJlY2xhaW1lZCA9IHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMobWVtY2csXFxuNzkyODpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgYmF0Y2hfc2l6ZSwgZ2ZwX21hc2ssXFxuNzkyOTpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgcmVjbGFpbV9vcHRpb25zLFxcbjc5MzA6XFx0XFx0XFx0XFx0XFx0XFx0XFx0IHN3YXBwaW5lc3MgPT0gLTEgPyBOVUxMIDogXFx1MDAyNnN3YXBwaW5lc3MpO1xcbjc5MzE6XFx0XFx0XFx0fSBlbHNlIHtcXG43OTMyOlxcdFxcdFxcdFxcdHN0cnVjdCBzY2FuX2NvbnRyb2wgc2MgPSB7XFxuNzkzMzpcXHRcXHRcXHRcXHRcXHQuZ2ZwX21hc2sgPSBjdXJyZW50X2dmcF9jb250ZXh0KGdmcF9tYXNrKSxcXG43OTM0OlxcdFxcdFxcdFxcdFxcdC5yZWNsYWltX2lkeCA9IGdmcF96b25lKGdmcF9tYXNrKSxcXG43OTM1OlxcdFxcdFxcdFxcdFxcdC5wcm9hY3RpdmVfc3dhcHBpbmVzcyA9IHN3YXBwaW5lc3MgPT0gLTEgPyBOVUxMIDogXFx1MDAyNnN3YXBwaW5lc3MsXFxuNzkzNjpcXHRcXHRcXHRcXHRcXHQucHJpb3JpdHkgPSBERUZfUFJJT1JJVFksXFxuNzkzNzpcXHRcXHRcXHRcXHRcXHQubWF5X3dyaXRlcGFnZSA9IDEsXFxuNzkzODpcXHRcXHRcXHRcXHRcXHQubnJfdG9fcmVjbGFpbSA9IG1heChiYXRjaF9zaXplLCBTV0FQX0NMVVNURVJfTUFYKSxcXG43OTM5OlxcdFxcdFxcdFxcdFxcdC5tYXlfdW5tYXAgPSAxLFxcbjc5NDA6XFx0XFx0XFx0XFx0XFx0Lm1heV9zd2FwID0gMSxcXG43OTQxOlxcdFxcdFxcdFxcdFxcdC5wcm9hY3RpdmUgPSAxLFxcbjc5NDI6XFx0XFx0XFx0XFx0fTtcXG43OTQzOlxcdFxcbjc5NDQ6XFx0XFx0XFx0XFx0aWYgKHRlc3RfYW5kX3NldF9iaXRfbG9jayhQR0RBVF9SRUNMQUlNX0xPQ0tFRCxcXG43OTQ1OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgXFx1MDAyNnBnZGF0LVxcdTAwM2VmbGFncykpXFxuNzk0NjpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gLUVCVVNZO1xcbjc5NDc6XFx0XFxuNzk0ODpcXHRcXHRcXHRcXHRyZWNsYWltZWQgPSBfX25vZGVfcmVjbGFpbShwZ2RhdCwgYmF0Y2hfc2l6ZSwgXFx1MDAyNnNjKTtcXG43OTQ5OlxcdFxcdFxcdFxcdGNsZWFyX2JpdF91bmxvY2soUEdEQVRfUkVDTEFJTV9MT0NLRUQsIFxcdTAwMjZwZ2RhdC1cXHUwMDNlZmxhZ3MpO1xcbjc5NTA6XFx0XFx0XFx0fVxcbjc5NTE6XFx0XFxuNzk1MjpcXHRcXHRcXHRpZiAoIXJlY2xhaW1lZCBcXHUwMDI2XFx1MDAyNiAhbnJfcmV0cmllcy0tKVxcbjc5NTM6XFx0XFx0XFx0XFx0cmV0dXJuIC1FQUdBSU47XFxuNzk1NDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMDc6MDE6MDAuMzM0NDM5MDRaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjE0Nzc3MDM1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipQcm9hY3RpdmUgUmVjbGFpbSBhbmQgU3dhcHBpbmVzcyBVbmRlciB0aGUgTWljcm9zY29wZSoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBkaWdnaW5nIGludG8gdGhpcyBhbmQgaXQncyBiZWNvbWluZyBjbGVhciB0aGF0IGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCBjYW4gYmUgY2FsbGVkIHdpdGggYHBnZGF0YCBkaXJlY3RseSwgYnlwYXNzaW5nIHRoZSBuZWVkIGZvciBhIGBtZW1jZ2Agd2hlbiBkZWFsaW5nIHdpdGggcHJvYWN0aXZlIHJlY2xhaW0gYXQgdGhlIG5vZGUgbGV2ZWwuIFRoaXMgbWFrZXMgc2Vuc2U7IEkgY291bGQgc2VlIHRoaXMgYmVpbmcgbGV2ZXJhZ2VkIHRocm91Z2ggc3lzZnMgb3IgcHJvY2ZzLCBtYXliZSB0aGUgYC9zeXMvZGV2aWNlcy9zeXN0ZW0vbm9kZS9ub2RlWC9yZWNsYWltYCBpbnRlcmZhY2UuXG5cbk5vdywgaGVyZSdzIHRoZSBraWNrZXIsIGFuZCB0aGlzIGlzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3RpbmcgcmVnYXJkaW5nIGBzY19zd2FwcGluZXNzYC4gSSByZW1lbWJlciB0aGF0IHdoZW4gYENPTkZJR19NRU1DR2Agd2FzIGRpc2FibGVkLCBgc2Nfc3dhcHBpbmVzc2Agc2ltcGx5IHJldHVybmVkIGBSRUFEX09OQ0Uodm1fc3dhcHBpbmVzcylgLiBUaGF0J3MgdGhlIGJhc2VsaW5lLiBCdXQgbm93LCBpdCdzIGJlZW4gdXBkYXRlZC4gVGhlIGNvZGUgbm93IGxvb2tzIGxpa2UgdGhpczpcbmBgYGNcbnN0YXRpYyBpbnQgc2Nfc3dhcHBpbmVzcyhzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYywgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxue1xuXHRpZiAoc2MtXHUwMDNlcHJvYWN0aXZlIFx1MDAyNlx1MDAyNiBzYy1cdTAwM2Vwcm9hY3RpdmVfc3dhcHBpbmVzcylcblx0XHRyZXR1cm4gKnNjLVx1MDAzZXByb2FjdGl2ZV9zd2FwcGluZXNzO1xuXHRyZXR1cm4gbWVtX2Nncm91cF9zd2FwcGluZXNzKG1lbWNnKTtcbn1cbmBgYFxuQW5kIGBtZW1fY2dyb3VwX3N3YXBwaW5lc3MobWVtY2cpYCBzdGlsbCByZXR1cm5zIGBSRUFEX09OQ0Uodm1fc3dhcHBpbmVzcylgIGlmIGBDT05GSUdfTUVNQ0dfVjFgIGlzIGRpc2FibGVkLiBTbywgd2l0aG91dCBgQ09ORklHX01FTUNHYCwgYHNjX3N3YXBwaW5lc3NgICpub3cqIGNoZWNrcyBgc2MtXHUwMDNlcHJvYWN0aXZlIFx1MDAyNlx1MDAyNiBzYy1cdTAwM2Vwcm9hY3RpdmVfc3dhcHBpbmVzc2AgYW5kIHJldHVybnMgdGhhdCB2YWx1ZSBpbnN0ZWFkIG9mIGp1c3QgdGhlIGdsb2JhbCBgdm1fc3dhcHBpbmVzc2AuIFRoYXQncyBhIGRlZmluaXRlIGNoYW5nZSBpbiBiZWhhdmlvci5cblxuVGhpcyByYWlzZXMgYSBxdWVzdGlvbiBpbiBteSBtaW5kOiBjYW4gYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gIGV2ZW4gYmUgdXNlZCBpZiBgQ09ORklHX01FTUNHYCBpcyBkaXNhYmxlZD8gV2UgbmVlZCB0byB2ZXJpZnkgdGhhdCBjYWxsIHBhdGggdG8gbWFrZSBzdXJlIHRoZSBhc3N1bXB0aW9ucyBhcmUgdmFsaWQuIEknZCBiZXR0ZXIgZG91YmxlIGNoZWNrIHdoZXJlIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCBpcyBjYWxsZWQuIEl0J3MgYSBrZXkgZGV0YWlsIHRvIHVuZGVyc3RhbmQgdGhlIGludGVyYWN0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTM1NiwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDA3OjAxOjA2LjQ4MjIxMTk4MloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzg0MjgzNDUzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1c2VyX3Byb2FjdGl2ZV9yZWNsYWltXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2ludGVybmFsLmg9NzAyPWV4dGVybiB2b2lkIHJlY2xhaW1fdGhyb3R0bGUocGdfZGF0YV90ICpwZ2RhdCwgZW51bSB2bXNjYW5fdGhyb3R0bGVfc3RhdGUgcmVhc29uKTtcXG5tbS9pbnRlcm5hbC5oOjcwMzppbnQgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbShjaGFyICpidWYsXFxubW0vaW50ZXJuYWwuaC03MDQtXFx0XFx0XFx0ICAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBwZ19kYXRhX3QgKnBnZGF0KTtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01MDA3PXN0YXRpYyBzc2l6ZV90IG1lbW9yeV9yZWNsYWltKHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZiwgY2hhciAqYnVmLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTUwMTItXFxubW0vbWVtY29udHJvbC5jOjUwMTM6XFx0cmV0ID0gdXNlcl9wcm9hY3RpdmVfcmVjbGFpbShidWYsIG1lbWNnLCBOVUxMKTtcXG5tbS9tZW1jb250cm9sLmMtNTAxNC1cXHRpZiAocmV0KVxcbi0tXFxubW0vdm1zY2FuLmM9Nzg0OT1zdGF0aWMgY29uc3QgbWF0Y2hfdGFibGVfdCB0b2tlbnMgPSB7XFxuLS1cXG5tbS92bXNjYW4uYy03ODU0LVxcbm1tL3Ztc2Nhbi5jOjc4NTU6aW50IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oY2hhciAqYnVmLFxcbm1tL3Ztc2Nhbi5jLTc4NTYtXFx0XFx0XFx0ICAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBwZ19kYXRhX3QgKnBnZGF0KVxcbi0tXFxubW0vdm1zY2FuLmM9ODAwOD1zdGF0aWMgc3NpemVfdCByZWNsYWltX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbm1tL3Ztc2Nhbi5jLTgwMTMtXFxubW0vdm1zY2FuLmM6ODAxNDpcXHRyZXQgPSB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltKChjaGFyICopYnVmLCBOVUxMLCBOT0RFX0RBVEEobmlkKSk7XFxubW0vdm1zY2FuLmMtODAxNS1cXHRyZXR1cm4gcmV0ID8gcmV0IDogY291bnQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDA3OjAxOjEwLjMyNTA1MjE1WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0MjU2MDA5MTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQncyBwZXJzcGVjdGl2ZTpcblxuKipEaXZpbmcgaW50byBgcmVjbGFpbV9zdG9yZWAgYW5kIFByb2FjdGl2ZSBVc2VyIFJlY2xhaW0qKlxuXG5SaWdodCwgc28gSSdtIGRpZ2dpbmcgdGhyb3VnaCB0aGUgVk0gc3Vic3lzdGVtLCBhbmQgSSBzZWUgdGhhdCBgcmVjbGFpbV9zdG9yZWAgZnVuY3Rpb24gaW4gYG1tL3Ztc2Nhbi5jYC4gSW50ZXJlc3RpbmcuIEl0J3MgY2FsbGluZyBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgd2hpY2ggaXMgaW1tZWRpYXRlbHkgdGVsbGluZyBtZSBzb21ldGhpbmcgYWJvdXQgaG93IHdlJ3JlIGluaXRpYXRpbmcgcmVjbGFpbSBlZmZvcnRzLCBwYXJ0aWN1bGFybHkgaW4gYSB1c2VyIGNvbnRleHQsIGJhc2VkIG9uIHRoZSBgTk9ERV9EQVRBKG5pZClgIGluZm9ybWF0aW9uIHRoYXTigJlzIHBhc3NlZC4gSSB3YW50IHRvIHVuZGVyc3RhbmQgKndoeSogYHJlY2xhaW1fc3RvcmVgIGlzIGRvaW5nIHRoaXMgYW5kIHdoYXQgaXTigJlzIGxldmVyYWdpbmcgZnJvbSB0aGUgbm9kZS1zcGVjaWZpYyBkYXRhIHBhc3NlZC5cblxuTXkgbWVudGFsIGNoZWNrbGlzdCBzdGFydHM6IHdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgb2YgYSBjYWxsIGxpa2UgdGhpcz8gSXMgdGhpcyB1c2VyLXRyaWdnZXJlZCByZWNsYWltLCBvciBzb21ldGhpbmcgbW9yZSBzeXN0ZW1pYyB0aGF04oCZcyBiZWluZyAqbGV2ZXJhZ2VkKiBmb3IgdXNlciBzcGFjZT8gSG93IGRvZXMgdGhlIG5vZGUgY29udGV4dCBpbmZsdWVuY2UgdGhlIGRlY2lzaW9uLW1ha2luZyB3aXRoaW4gYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gPyBJcyB0aGlzIGFib3V0IG1lbW9yeSBwcmVzc3VyZSBoYW5kbGluZyBvciBtb3JlIGFib3V0IHNvbWUga2luZCBvZiBzdG9yYWdlIHJlc291cmNlIGlzc3VlPyBMZXTigJlzIGRpdmUgaW50byB0aGUgYHJlY2xhaW1fc3RvcmVgIGZ1bmN0aW9uIHRvIHNlZSB3aGF0IHRoaXMgcHJvY2VzcyBsb29rcyBsaWtlIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDU0MSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDA3OjAxOjE0Ljc1MDY1NTkyM1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NTcwMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vdm1zY2FuLmNcIixcbiAgXCJGaXJzdExpbmVcIjogODAwOCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiODAwODpcXHRzdGF0aWMgc3NpemVfdCByZWNsYWltX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcXG44MDA5OlxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXFxuODAxMDpcXHRcXHRcXHRcXHQgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxcbjgwMTE6XFx0e1xcbjgwMTI6XFx0XFx0aW50IHJldCwgbmlkID0gZGV2LVxcdTAwM2VpZDtcXG44MDEzOlxcdFxcbjgwMTQ6XFx0XFx0cmV0ID0gdXNlcl9wcm9hY3RpdmVfcmVjbGFpbSgoY2hhciAqKWJ1ZiwgTlVMTCwgTk9ERV9EQVRBKG5pZCkpO1xcbjgwMTU6XFx0XFx0cmV0dXJuIHJldCA/IHJldCA6IGNvdW50O1xcbjgwMTY6XFx0fVxcbjgwMTc6XFx0XFxuODAxODpcXHRzdGF0aWMgREVWSUNFX0FUVFJfV08ocmVjbGFpbSk7XFxuODAxOTpcXHRpbnQgcmVjbGFpbV9yZWdpc3Rlcl9ub2RlKHN0cnVjdCBub2RlICpub2RlKVxcbjgwMjA6XFx0e1xcbjgwMjE6XFx0XFx0cmV0dXJuIGRldmljZV9jcmVhdGVfZmlsZShcXHUwMDI2bm9kZS1cXHUwMDNlZGV2LCBcXHUwMDI2ZGV2X2F0dHJfcmVjbGFpbSk7XFxuODAyMjpcXHR9XFxuODAyMzpcXHRcXG44MDI0OlxcdHZvaWQgcmVjbGFpbV91bnJlZ2lzdGVyX25vZGUoc3RydWN0IG5vZGUgKm5vZGUpXFxuODAyNTpcXHR7XFxuODAyNjpcXHRcXHRyZXR1cm4gZGV2aWNlX3JlbW92ZV9maWxlKFxcdTAwMjZub2RlLVxcdTAwM2VkZXYsIFxcdTAwMjZkZXZfYXR0cl9yZWNsYWltKTtcXG44MDI3OlxcdH1cXG44MDI4OlxcdCNlbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQwNzowMToxNC43NTEzMTU0MDNaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA5MTI3OTA4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlLi4uIEknbSBsb29raW5nIGF0IGByZWNsYWltX3N0b3JlYCwgd2hpY2ggSSByZW1lbWJlciBiZWluZyBpbiBgbW0vdm1zY2FuLmNgLiBXYWl0IGEgbWludXRlLi4uIEkgaGF2ZSBhIGZlZWxpbmcgdGhhdCBmdW5jdGlvbiBtaWdodCBiZSBjb25kaXRpb25hbGx5IGNvbXBpbGVkLiBSaWdodCwgSSBuZWVkIHRvIGNoZWNrIGlmIGl0J3MgZGVwZW5kZW50IG9uIGEgYCNpZmRlZiBDT05GSUdfTlVNQWAgb3Igc29tZXRoaW5nIHNpbWlsYXIuIEJlc3Qgd2F5IHRvIGNvbmZpcm0gcXVpY2tseSBpcyB0byBmaW5kIHRoZSBjb3JyZXNwb25kaW5nIGAjZW5kaWZgLiBBbHJpZ2h0LCBsZXQncyB6b29tIGluIG9uIGxpbmUgODAyOCBhbmQgc2VlIGlmIHRoYXQgaXMgdGhlIGNvbnRyb2xsaW5nIGNvbmRpdGlvbmFsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTE4NCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMDc6MDE6MTguODQyNTk3ODk2WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDQxNzIzNDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiI2lmZGVmLipOVU1BXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3Ztc2Nhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTc2MjE9c3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgdm1zY2FuX3N5c2N0bF90YWJsZVtdID0ge1xcbi0tXFxubW0vdm1zY2FuLmMtNzYzMC1cXHR9LFxcbm1tL3Ztc2Nhbi5jOjc2MzE6I2lmZGVmIENPTkZJR19OVU1BXFxubW0vdm1zY2FuLmMtNzYzMi1cXHR7XFxuLS1cXG5tbS92bXNjYW4uYz03NjUzPW1vZHVsZV9pbml0KGtzd2FwZF9pbml0KVxcbm1tL3Ztc2Nhbi5jLTc2NTQtXFxubW0vdm1zY2FuLmM6NzY1NTojaWZkZWYgQ09ORklHX05VTUFcXG5tbS92bXNjYW4uYy03NjU2LS8qXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDA3OjAxOjE5LjM0Njc3NTU5MVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDgxODU3MzYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGEgZmlyc3QtcGVyc29uIGV4cGVydCBzdW1tYXJ5OlxuXG4qKkRpZ2dpbmcgaW50byBtbS92bXNjYW4uYzogRXhwbG9yaW5nIENvbmRpdGlvbmFsIENvbXBpbGF0aW9uKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB3aGF0J3MgZ29pbmcgb24gd2l0aCB0aGlzIGNvZGUuIFNwZWNpZmljYWxseSwgSSdtIGdvaW5nIHRvIGp1bXAgaW50byBgbW0vdm1zY2FuLmNgIGFuZCB0YWtlIGEgbG9vayBhcm91bmQgbGluZSA3NjU1LiBNeSBtYWluIGdvYWwgaGVyZSBpcyB0byBmaWd1cmUgb3V0IHdoYXQgZnVuY3Rpb25hbGl0eSBpcyBiZWluZyBjb250cm9sbGVkIGJ5IHRoYXQgYCNpZmRlZmAgZGlyZWN0aXZlLiBJIHN1c3BlY3QgaXQncyBsaWtlbHkgcmVsYXRlZCB0byBzb21lIGtpbmQgb2YgZmVhdHVyZSB0b2dnbGUsIHBvc3NpYmx5IGEgZGVidWcgbW9kZSwgb3IgbWF5YmUgYSBwbGF0Zm9ybS1zcGVjaWZpYyBvcHRpbWl6YXRpb24uIFVuZGVyc3RhbmRpbmcgdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIHBhdGggaXMgY3J1Y2lhbCBmb3IgbWUgdG8gZnVsbHkgZ3Jhc3AgdGhlIGV4ZWN1dGlvbiBmbG93IGFuZCB0aGUgdmFyaW91cyBjb2RlIHBhdGhzIHdpdGhpbiB0aGUgdmlydHVhbCBtZW1vcnkgbWFuYWdlbWVudCBzeXN0ZW0uIEtub3dpbmcgd2hpY2ggc2VjdGlvbnMgb2YgY29kZSBhcmUgaW5jbHVkZWQgb3IgZXhjbHVkZWQgYmFzZWQgb24gdGhlIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzIHdpbGwgYWxzbyBoZWxwIG1lIHVuZGVyc3RhbmQgaG93IHRoaXMgY29kZSBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgc3lzdGVtLCBhbmQgd2hhdCBpbXBhY3QgaXQgaGFzIG9uIHBlcmZvcm1hbmNlIGFuZCByZXNvdXJjZSB1dGlsaXphdGlvbiBpbiBkaWZmZXJlbnQgY29uZmlndXJhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNTMyLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMDc6MDE6MjQuNDI4NjM2Mzc1WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3MDU3NTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vdm1zY2FuLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzY1NSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNzY1NTpcXHQjaWZkZWYgQ09ORklHX05VTUFcXG43NjU2OlxcdC8qXFxuNzY1NzpcXHQgKiBOb2RlIHJlY2xhaW0gbW9kZVxcbjc2NTg6XFx0ICpcXG43NjU5OlxcdCAqIElmIG5vbi16ZXJvIGNhbGwgbm9kZV9yZWNsYWltIHdoZW4gdGhlIG51bWJlciBvZiBmcmVlIHBhZ2VzIGZhbGxzIGJlbG93XFxuNzY2MDpcXHQgKiB0aGUgd2F0ZXJtYXJrcy5cXG43NjYxOlxcdCAqL1xcbjc2NjI6XFx0aW50IG5vZGVfcmVjbGFpbV9tb2RlIF9fcmVhZF9tb3N0bHk7XFxuNzY2MzpcXHRcXG43NjY0OlxcdC8qXFxuNzY2NTpcXHQgKiBQcmlvcml0eSBmb3IgTk9ERV9SRUNMQUlNLiBUaGlzIGRldGVybWluZXMgdGhlIGZyYWN0aW9uIG9mIHBhZ2VzXFxuNzY2NjpcXHQgKiBvZiBhIG5vZGUgY29uc2lkZXJlZCBmb3IgZWFjaCB6b25lX3JlY2xhaW0uIDQgc2NhbnMgMS8xNnRoIG9mXFxuNzY2NzpcXHQgKiBhIHpvbmUuXFxuNzY2ODpcXHQgKi9cXG43NjY5OlxcdCNkZWZpbmUgTk9ERV9SRUNMQUlNX1BSSU9SSVRZIDRcXG43NjcwOlxcdFxcbjc2NzE6XFx0LypcXG43NjcyOlxcdCAqIFBlcmNlbnRhZ2Ugb2YgcGFnZXMgaW4gYSB6b25lIHRoYXQgbXVzdCBiZSB1bm1hcHBlZCBmb3Igbm9kZV9yZWNsYWltIHRvXFxuNzY3MzpcXHQgKiBvY2N1ci5cXG43Njc0OlxcdCAqL1xcbjc2NzU6XFx0aW50IHN5c2N0bF9taW5fdW5tYXBwZWRfcmF0aW8gPSAxO1xcbjc2NzY6XFx0XFxuNzY3NzpcXHQvKlxcbjc2Nzg6XFx0ICogSWYgdGhlIG51bWJlciBvZiBzbGFiIHBhZ2VzIGluIGEgem9uZSBncm93cyBiZXlvbmQgdGhpcyBwZXJjZW50YWdlIHRoZW5cXG43Njc5OlxcdCAqIHNsYWIgcmVjbGFpbSBuZWVkcyB0byBvY2N1ci5cXG43NjgwOlxcdCAqL1xcbjc2ODE6XFx0aW50IHN5c2N0bF9taW5fc2xhYl9yYXRpbyA9IDU7XFxuNzY4MjpcXHRcXG43NjgzOlxcdHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBub2RlX3VubWFwcGVkX2ZpbGVfcGFnZXMoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdClcXG43Njg0OlxcdHtcXG43Njg1OlxcdFxcdHVuc2lnbmVkIGxvbmcgZmlsZV9tYXBwZWQgPSBub2RlX3BhZ2Vfc3RhdGUocGdkYXQsIE5SX0ZJTEVfTUFQUEVEKTtcXG43Njg2OlxcdFxcdHVuc2lnbmVkIGxvbmcgZmlsZV9scnUgPSBub2RlX3BhZ2Vfc3RhdGUocGdkYXQsIE5SX0lOQUNUSVZFX0ZJTEUpICtcXG43Njg3OlxcdFxcdFxcdG5vZGVfcGFnZV9zdGF0ZShwZ2RhdCwgTlJfQUNUSVZFX0ZJTEUpO1xcbjc2ODg6XFx0XFxuNzY4OTpcXHRcXHQvKlxcbjc2OTA6XFx0XFx0ICogSXQncyBwb3NzaWJsZSBmb3IgdGhlcmUgdG8gYmUgbW9yZSBmaWxlIG1hcHBlZCBwYWdlcyB0aGFuXFxuNzY5MTpcXHRcXHQgKiBhY2NvdW50ZWQgZm9yIGJ5IHRoZSBwYWdlcyBvbiB0aGUgZmlsZSBMUlUgbGlzdHMgYmVjYXVzZVxcbjc2OTI6XFx0XFx0ICogdG1wZnMgcGFnZXMgYWNjb3VudGVkIGZvciBhcyBBTk9OIGNhbiBhbHNvIGJlIEZJTEVfTUFQUEVEXFxuNzY5MzpcXHRcXHQgKi9cXG43Njk0OlxcdFxcdHJldHVybiAoZmlsZV9scnUgXFx1MDAzZSBmaWxlX21hcHBlZCkgPyAoZmlsZV9scnUgLSBmaWxlX21hcHBlZCkgOiAwO1xcbjc2OTU6XFx0fVxcbjc2OTY6XFx0XFxuNzY5NzpcXHQvKiBXb3JrIG91dCBob3cgbWFueSBwYWdlIGNhY2hlIHBhZ2VzIHdlIGNhbiByZWNsYWltIGluIHRoaXMgcmVjbGFpbV9tb2RlICovXFxuNzY5ODpcXHRzdGF0aWMgdW5zaWduZWQgbG9uZyBub2RlX3BhZ2VjYWNoZV9yZWNsYWltYWJsZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0KVxcbjc2OTk6XFx0e1xcbjc3MDA6XFx0XFx0dW5zaWduZWQgbG9uZyBucl9wYWdlY2FjaGVfcmVjbGFpbWFibGU7XFxuNzcwMTpcXHRcXHR1bnNpZ25lZCBsb25nIGRlbHRhID0gMDtcXG43NzAyOlxcdFxcbjc3MDM6XFx0XFx0LypcXG43NzA0OlxcdFxcdCAqIElmIFJFQ0xBSU1fVU5NQVAgaXMgc2V0LCB0aGVuIGFsbCBmaWxlIHBhZ2VzIGFyZSBjb25zaWRlcmVkXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDA3OjAxOjI0LjQzMTM0NzUyNFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTUyNTA4Mzg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqTmF2aWdhdGluZyBhIExhYnlyaW50aGluZSBDb2RlYmFzZSoqXG5cbk9rYXksIHNvIEknbSB0cnlpbmcgdG8gdHJhY2sgZG93biB3aGVyZSBgcmVjbGFpbV9zdG9yZWAgaXMgZGVmaW5lZC4gSSBrbm93IGl0J3Mgc29tZXdoZXJlIGluIHRoaXMgbWFzc2l2ZSBjb2RlYmFzZSwgYW5kIHRoZSBsaW5lIG51bWJlciBJIGhhdmUgaXMgODAwOC4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludCwgYnV0IHdpdGhvdXQgY29udGV4dCwgaXQncyBqdXN0IGEgbnVtYmVyLiBHaXZlbiB0aGUgbmF0dXJlIG9mIHRoaXMgcHJvamVjdCwgSSBzdHJvbmdseSBzdXNwZWN0IGl0IG1pZ2h0IGJlIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQuIE15IHByaW1hcnkgc3VzcGljaW9uIGlzIHRoYXQgdGhpcyBmdW5jdGlvbmFsaXR5IGlzIHRpZWQgdG8gTlVNQSAoTm9uLVVuaWZvcm0gTWVtb3J5IEFjY2Vzcykgc3lzdGVtcy4gVGhlc2UgYXJlIGNvbXBsZXggYXJjaGl0ZWN0dXJlcywgYW5kIHN0b3JlIHJlY2xhbWF0aW9uIGNvdWxkIGJlIHZlcnkgZGlmZmVyZW50IGlmIE5VTUEgaXMgZW5hYmxlZC4gU28sIHRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gZG8gaXMgcXVpY2tseSBjaGVjayBpZiBsaW5lIDgwMDggaXMgbmVzdGxlZCB3aXRoaW4gYW4gYCNpZmRlZiBDT05GSUdfTlVNQWAgYmxvY2suIElmIGl0IGlzLCB0aGVuIEknbGwga25vdyBJJ20gb24gdGhlIHJpZ2h0IHRyYWNrOyBteSBhc3N1bXB0aW9ucyBhcmUgaG9sZGluZywgYW5kIEkgc2hvdWxkIGZvY3VzIG15IGRlZXBlciBpbnZlc3RpZ2F0aW9uIHRvIHRoYXQgc3BlY2lmaWMgcGFydCBvZiB0aGUgY29kZS4gSWYgbm90LCB0aGVuIEknbSBnb2luZyB0byBoYXZlIHRvIGJyb2FkZW4gdGhlIHNlYXJjaCBwYXJhbWV0ZXJzLCBsb29rIGF0IHRoZSBidWlsZCBjb25maWd1cmF0aW9uLCBhbmQgdHJ5IHRvIHVuZGVyc3RhbmQgd2hhdCBvdGhlciBjb25kaXRpb25zIG1pZ2h0IGJlIGdvdmVybmluZyB0aGUgcHJlc2VuY2Ugb2YgdGhpcyBmdW5jdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI1NjYsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDA3OjAxOjI3Ljk4Mzg1OTE2MloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNTkzMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vdm1zY2FuLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzk4MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNzk4MDpcXHRcXG43OTgxOlxcdFxcdFxcdHBnc2Nhbm5lZCArPSBucl9wYWdlcztcXG43OTgyOlxcdFxcbjc5ODM6XFx0XFx0XFx0LyogYmxvY2sgbWVtY2cgbWlncmF0aW9uIHdoaWxlIHRoZSBmb2xpbyBtb3ZlcyBiZXR3ZWVuIGxydXMgKi9cXG43OTg0OlxcdFxcdFxcdGlmICghZm9saW9fdGVzdF9jbGVhcl9scnUoZm9saW8pKVxcbjc5ODU6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuNzk4NjpcXHRcXG43OTg3OlxcdFxcdFxcdGxydXZlYyA9IGZvbGlvX2xydXZlY19yZWxvY2tfaXJxKGZvbGlvLCBscnV2ZWMpO1xcbjc5ODg6XFx0XFx0XFx0aWYgKGZvbGlvX2V2aWN0YWJsZShmb2xpbykgXFx1MDAyNlxcdTAwMjYgZm9saW9fdGVzdF91bmV2aWN0YWJsZShmb2xpbykpIHtcXG43OTg5OlxcdFxcdFxcdFxcdGxydXZlY19kZWxfZm9saW8obHJ1dmVjLCBmb2xpbyk7XFxuNzk5MDpcXHRcXHRcXHRcXHRmb2xpb19jbGVhcl91bmV2aWN0YWJsZShmb2xpbyk7XFxuNzk5MTpcXHRcXHRcXHRcXHRscnV2ZWNfYWRkX2ZvbGlvKGxydXZlYywgZm9saW8pO1xcbjc5OTI6XFx0XFx0XFx0XFx0cGdyZXNjdWVkICs9IG5yX3BhZ2VzO1xcbjc5OTM6XFx0XFx0XFx0fVxcbjc5OTQ6XFx0XFx0XFx0Zm9saW9fc2V0X2xydShmb2xpbyk7XFxuNzk5NTpcXHRcXHR9XFxuNzk5NjpcXHRcXG43OTk3OlxcdFxcdGlmIChscnV2ZWMpIHtcXG43OTk4OlxcdFxcdFxcdF9fY291bnRfdm1fZXZlbnRzKFVORVZJQ1RBQkxFX1BHUkVTQ1VFRCwgcGdyZXNjdWVkKTtcXG43OTk5OlxcdFxcdFxcdF9fY291bnRfdm1fZXZlbnRzKFVORVZJQ1RBQkxFX1BHU0NBTk5FRCwgcGdzY2FubmVkKTtcXG44MDAwOlxcdFxcdFxcdGxydXZlY191bmxvY2tfaXJxKGxydXZlYyk7XFxuODAwMTpcXHRcXHR9IGVsc2UgaWYgKHBnc2Nhbm5lZCkge1xcbjgwMDI6XFx0XFx0XFx0Y291bnRfdm1fZXZlbnRzKFVORVZJQ1RBQkxFX1BHU0NBTk5FRCwgcGdzY2FubmVkKTtcXG44MDAzOlxcdFxcdH1cXG44MDA0OlxcdH1cXG44MDA1OlxcdEVYUE9SVF9TWU1CT0xfR1BMKGNoZWNrX21vdmVfdW5ldmljdGFibGVfZm9saW9zKTtcXG44MDA2OlxcdFxcbjgwMDc6XFx0I2lmIGRlZmluZWQoQ09ORklHX1NZU0ZTKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19OVU1BKVxcbjgwMDg6XFx0c3RhdGljIHNzaXplX3QgcmVjbGFpbV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuODAwOTpcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxcbjgwMTA6XFx0XFx0XFx0XFx0ICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcXG44MDExOlxcdHtcXG44MDEyOlxcdFxcdGludCByZXQsIG5pZCA9IGRldi1cXHUwMDNlaWQ7XFxuODAxMzpcXHRcXG44MDE0OlxcdFxcdHJldCA9IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oKGNoYXIgKilidWYsIE5VTEwsIE5PREVfREFUQShuaWQpKTtcXG44MDE1OlxcdFxcdHJldHVybiByZXQgPyByZXQgOiBjb3VudDtcXG44MDE2OlxcdH1cXG44MDE3OlxcdFxcbjgwMTg6XFx0c3RhdGljIERFVklDRV9BVFRSX1dPKHJlY2xhaW0pO1xcbjgwMTk6XFx0aW50IHJlY2xhaW1fcmVnaXN0ZXJfbm9kZShzdHJ1Y3Qgbm9kZSAqbm9kZSlcXG44MDIwOlxcdHtcXG44MDIxOlxcdFxcdHJldHVybiBkZXZpY2VfY3JlYXRlX2ZpbGUoXFx1MDAyNm5vZGUtXFx1MDAzZWRldiwgXFx1MDAyNmRldl9hdHRyX3JlY2xhaW0pO1xcbjgwMjI6XFx0fVxcbjgwMjM6XFx0XFxuODAyNDpcXHR2b2lkIHJlY2xhaW1fdW5yZWdpc3Rlcl9ub2RlKHN0cnVjdCBub2RlICpub2RlKVxcbjgwMjU6XFx0e1xcbjgwMjY6XFx0XFx0cmV0dXJuIGRldmljZV9yZW1vdmVfZmlsZShcXHUwMDI2bm9kZS1cXHUwMDNlZGV2LCBcXHUwMDI2ZGV2X2F0dHJfcmVjbGFpbSk7XFxuODAyNzpcXHR9XFxuODAyODpcXHQjZW5kaWZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMDc6MDE6MjcuOTg0MjIwNjYyWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU5OTAzOTI4ODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgcmVjbGFpbV9zdG9yZWAgRnVuY3Rpb25hbGl0eSoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gaG93IHRoaXMgYHJlY2xhaW1fc3RvcmVgIGZ1bmN0aW9uIGJlaGF2ZXMsIHNwZWNpZmljYWxseSBjb25zaWRlcmluZyBpdHMgZGVwZW5kZW5jaWVzLiBJIHNlZSB0aGF0IGl0J3MgbmVzdGxlZCB1bmRlciBib3RoIGBDT05GSUdfU1lTRlNgIGFuZCBgQ09ORklHX05VTUFgLCB3aGljaCBpbW1lZGlhdGVseSByYWlzZXMgYSBmbGFnLiBFdmVuIGlmIGBDT05GSUdfTUVNQ0dgIGlzIGRpc2FibGVkLCBlbmFibGluZyBib3RoIGBOVU1BYCBhbmQgYFNZU0ZTYCBvcGVucyBhIHBvdGVudGlhbCBkb29yLiBJdCBsb29rcyBsaWtlIGEgdXNlciBjb3VsZCB0cmlnZ2VyIHByb2FjdGl2ZSByZWNsYWltIG9uIGEgbm9kZSBkaXJlY3RseSB0aHJvdWdoIHN5c2ZzIHVuZGVyIHRob3NlIGNvbmRpdGlvbnMuXG5cbklmIHRoYXQgaGFwcGVucywgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gIGdldHMgY2FsbGVkLiBMZXQncyBzZWUuLi4gaXQgcGFyc2VzIHRoZSBpbnB1dCBidWZmZXIuIEFoLCBpZiBpdCBmaW5kcyBgc3dhcHBpbmVzcz1YYCwgaXQgdXBkYXRlcyB0aGUgYHN3YXBwaW5lc3NgIHZhbHVlIGFuZCBwYXNzZXMgdGhhdCBwb2ludGVyIHRvIGBzYy5wcm9hY3RpdmVfc3dhcHBpbmVzc2AuIFRoZSBhY3Rpb24gdGhlbiB0cmlnZ2VycyBgX19ub2RlX3JlY2xhaW1gLiBUaGlzLCBpbiB0dXJuLCBzZWVtcyB0byBldmVudHVhbGx5IGJvaWwgZG93biB0byBlaXRoZXIgYHNocmlua19ub2RlYCBvciBzaW1pbGFyIGZ1bmN0aW9ucywgd2hpY2ggcmVseSBvbiBgc2Nfc3dhcHBpbmVzcyhzYywgbWVtY2cpYC5cblxuSG9sZCBvbiwgSSBuZWVkIHRvIGNoZWNrIHdoZXJlIGBfX25vZGVfcmVjbGFpbWAgaXMgZGVmaW5lZCwgYWggeWVzLCBgbW0vdm1zY2FuLmNgLiBBbHJpZ2h0LCBJIG5lZWQgdG8gZ28gYmFjayBhbmQgY2hlY2sgZXhhY3RseSBob3cgdGhlIGBzY19zd2FwcGluZXNzYCBmdW5jdGlvbiBpcyB1dGlsaXplZCB3aXRoaW4gdGhlIHNjb3BlIG9mIHRoaXMgcGFydGljdWxhciBmdW5jdGlvbi4gSXQgc2VlbXMgbGlrZSB0aGUgc3dhcHBpbmVzcyBmYWN0b3IgaXMga2V5IGhlcmUgYW5kIHRoYXQncyBzb21ldGhpbmcgSSBuZWVkIHRvIGtlZXAgaW4gbWluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM2NTQsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQwNzowMTozMy45NzQ2MTYzMjhaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM1OTY3ODY5NzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2Nfc3dhcHBpbmVzc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bXNjYW4uYz03NT1zdHJ1Y3Qgc2Nhbl9jb250cm9sIHtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTk2LVxcbm1tL3Ztc2Nhbi5jOjk3OlxcdC8qIFN3YXBwaW5lc3MgdmFsdWUgZm9yIHByb2FjdGl2ZSByZWNsYWltLiBBbHdheXMgdXNlIHNjX3N3YXBwaW5lc3MoKSEgKi9cXG5tbS92bXNjYW4uYy05OC1cXHRpbnQgKnByb2FjdGl2ZV9zd2FwcGluZXNzO1xcbi0tXFxubW0vdm1zY2FuLmM9MjAwPWludCB2bV9zd2FwcGluZXNzID0gNjA7XFxubW0vdm1zY2FuLmMtMjAxLVxcbm1tL3Ztc2Nhbi5jOjIwMjpzdGF0aWMgaW50IHNjX3N3YXBwaW5lc3Moc3RydWN0IHNjYW5fY29udHJvbCAqc2MsIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG5tbS92bXNjYW4uYy0yMDMte1xcbi0tXFxubW0vdm1zY2FuLmM9MjQ3OT1zdGF0aWMgdm9pZCBnZXRfc2Nhbl9jb3VudChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLFxcbi0tXFxubW0vdm1zY2FuLmMtMjQ4My1cXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBscnV2ZWNfbWVtY2cobHJ1dmVjKTtcXG5tbS92bXNjYW4uYzoyNDg0OlxcdGludCBzd2FwcGluZXNzID0gc2Nfc3dhcHBpbmVzcyhzYywgbWVtY2cpO1xcbm1tL3Ztc2Nhbi5jLTI0ODUtXFx0dTY0IGZyYWN0aW9uW0FOT05fQU5EX0ZJTEVdO1xcbi0tXFxubW0vdm1zY2FuLmM9MjY4Nz1zdGF0aWMgaW50IGdldF9zd2FwcGluZXNzKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy0yNjk4LVxcbm1tL3Ztc2Nhbi5jOjI2OTk6XFx0cmV0dXJuIHNjX3N3YXBwaW5lc3Moc2MsIG1lbWNnKTtcXG5tbS92bXNjYW4uYy0yNzAwLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMDc6MDE6MzcuNTcxNDA4ODQ0WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg3MzEwMTQ2MTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBTd2FwcGluZXNzIEJlaGF2aW9yIENoYW5nZSoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBkaWdnaW5nIGludG8gdGhpcyBwYXRjaC4gQmVmb3JlIHRoaXMgY2hhbmdlLCB0aGUgYHNjX3N3YXBwaW5lc3NgIGZ1bmN0aW9uIGhhZCBhIG5hc3R5IGxpdHRsZSBnb3RjaGE6IGlmIGBDT05GSUdfTUVNQ0dgIHdhcyBkaXNhYmxlZCwgYW55IGN1c3RvbSBgc3dhcHBpbmVzc2AgdmFsdWUgYSB1c2VyIHNldCB2aWEgc3lzZnMgdG8gdHJpZ2dlciBwcm9hY3RpdmUgcmVjbGFpbSB3YXMgY29tcGxldGVseSBpZ25vcmVkLiBJdCB3b3VsZCBqdXN0IGRlZmF1bHQgdG8gdGhlIGdsb2JhbCBgdm1fc3dhcHBpbmVzc2AuIFRoYXQncyBub3QgaWRlYWwsIGVzcGVjaWFsbHkgZm9yIGFueW9uZSB0cnlpbmcgdG8gZmluZWx5IHR1bmUgbWVtb3J5IG1hbmFnZW1lbnQgaW4gYSBzeXN0ZW0gd2l0aG91dCBtZW1jZyBlbmFibGVkLlxuXG5UaGlzIHBhdGNoIGFkZHJlc3NlcyB0aGF0IGRpcmVjdGx5LiBJdCdzIG5vdyB1bmNvbmRpdGlvbmFsbHkgZGVmaW5lZCB0byB1c2UgdGhlIGBzYy1cdTAwM2Vwcm9hY3RpdmVfc3dhcHBpbmVzc2AgdmFsdWUgKmlmKiBwcm9hY3RpdmUgcmVjbGFpbSBpcyBiZWluZyB1c2VkLiBJZiBubyBwcm9hY3RpdmUgYHN3YXBwaW5lc3NgIGlzIHNldCBpdCBmYWxscyBiYWNrIHRvIHRoZSBkZWZhdWx0IGBtZW1fY2dyb3VwX3N3YXBwaW5lc3NgIGlmIGBtZW1jZ2AgaXMgZW5hYmxlZC4gVGhhdCdzIGEgc29saWQgaW1wcm92ZW1lbnQhIE5vdywgZXZlbiB3aXRob3V0IG1lbWNnLCB0aGUgdXNlci1kZWZpbmVkIGBzd2FwcGluZXNzYCBpbiB0aGUgc3lzZnMgbm9kZSB3aWxsIGFjdHVhbGx5IGJlIHJlc3BlY3RlZCBkdXJpbmcgcHJvYWN0aXZlIHJlY2xhaW0uIEl0J3MgYSBjbGVhciBmdW5jdGlvbmFsIGltcHJvdmVtZW50LlxuXG5MZXQncyBtYWtlIHN1cmUgdGhpcyBhbGwgaG9sZHMgdXAuIEZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSB0aGF0IGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCAqY2FuKiBiZSBjYWxsZWQgd2hlbiBgQ09ORklHX01FTUNHYCBpcyBvZmYuIFJpZ2h0LCBpdCdzIHRpZWQgdG8gYENPTkZJR19TWVNGU2AgYW5kIGBDT05GSUdfTlVNQWAsIG5vdCBgQ09ORklHX01FTUNHYCwgc28gdGhhdCBzaG91bGQgYmUgZmluZS4gT2theSwgd2hlcmUgZWxzZSBpcyBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgYmVpbmcgY2FsbGVkPyBMZXQncyBjaGVjayBgbW0vbWVtY29udHJvbC5jYC4gTm9wZSwgdGhhdCBwYXJ0IG9mIHRoZSBjb2RlIGlzIG9ubHkgY29tcGlsZWQgaWYgYENPTkZJR19NRU1DR2AgaXMgZW5hYmxlZC4gSG93ZXZlciwgYG1tL3Ztc2Nhbi5jYCBpcyBhbHdheXMgY29tcGlsZWQuIFNvLCBldmVuIHdpdGhvdXQgYENPTkZJR19NRU1DR2AsIHRoZSBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgZnVuY3Rpb24gaXMgY29tcGlsZWQgYW5kIGlzIGFjY2Vzc2libGUgdmlhIHRoZSBzeXNmcyBub2RlIGByZWNsYWltYC4gSnVzdCB3YW50IHRvIHRyaXBsZS1jaGVjayB0aGF0LiBTZWVtcyB0byBiZSB3b3JraW5nIGFzIGV4cGVjdGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDU4MywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQwNzowMTo0Ni4zMDI0MjcwNzJaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNjM0MDY1MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1c2VyX3Byb2FjdGl2ZV9yZWNsYWltXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3Ztc2Nhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTc4NDk9c3RhdGljIGNvbnN0IG1hdGNoX3RhYmxlX3QgdG9rZW5zID0ge1xcbi0tXFxubW0vdm1zY2FuLmMtNzg1NC1cXG5tbS92bXNjYW4uYzo3ODU1OmludCB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltKGNoYXIgKmJ1ZixcXG5tbS92bXNjYW4uYy03ODU2LVxcdFxcdFxcdCAgIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgcGdfZGF0YV90ICpwZ2RhdClcXG4tLVxcbm1tL3Ztc2Nhbi5jPTgwMDg9c3RhdGljIHNzaXplX3QgcmVjbGFpbV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuLS1cXG5tbS92bXNjYW4uYy04MDEzLVxcbm1tL3Ztc2Nhbi5jOjgwMTQ6XFx0cmV0ID0gdXNlcl9wcm9hY3RpdmVfcmVjbGFpbSgoY2hhciAqKWJ1ZiwgTlVMTCwgTk9ERV9EQVRBKG5pZCkpO1xcbm1tL3Ztc2Nhbi5jLTgwMTUtXFx0cmV0dXJuIHJldCA/IHJldCA6IGNvdW50O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQwNzowMTo0Ni41Mzg3NzM2ODVaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDM0MTQ0OTIyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBob3cgSSdkIGFwcHJvYWNoIHRoaXMgdGFzaywgYXMgaWYgdGhlc2Ugd2VyZSBteSBpbnRlcm5hbCB0aG91Z2h0czpcblxuKipJbnZlc3RpZ2F0aW5nIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCBpbiBgbW0vdm1zY2FuLmNgIHVuZGVyIGBDT05GSUdfTUVNQ0dgKipcblxuQWxyaWdodCwgc28gd2UgbmVlZCB0byBzZWUgd2hlcmUgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gIGlzIGJlaW5nIHVzZWQsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBtbS92bXNjYW4uY2AgZmlsZS4gVGhlIGFkZGVkIHdyaW5rbGUgaXMgdGhhdCB3ZSdyZSBvbmx5IGludGVyZXN0ZWQgaW4gaXRzIG9jY3VycmVuY2VzICppZiogdGhleSdyZSB3cmFwcGVkIGluc2lkZSBhbiBgI2lmZGVmIENPTkZJR19NRU1DR2AgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZS4gVGhpcyBzdWdnZXN0cyBhIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIHNjZW5hcmlvLCBhbmQgd2UgbmVlZCB0byB1bmRlcnN0YW5kIGlmIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCdzIGJlaGF2aW9yIG9yIGluY2x1c2lvbiBpbiB0aGUgY29kZSBpcyB0aWVkIHRvIHRoZSBtZW1vcnkgY29udHJvbCBncm91cCBmdW5jdGlvbmFsaXR5LiBUaGlzIGlzIGEgY29tbW9uIHBhdHRlcm4sIGFuZCBwcm9iYWJseSBpbmRpY2F0ZXMgYSBmdW5jdGlvbi92YXJpYWJsZSBpcyBzcGVjaWZpY2FsbHkgcGFydCBvZiB0aGUgTUVNQ0cgY29kZSBwYXRoLlxuXG5Fc3NlbnRpYWxseSwgSSdtIGdvaW5nIHRvIGxvb2sgZm9yIGxpbmVzIGluIGBtbS92bXNjYW4uY2AgdGhhdCBsb29rIHNvbWV0aGluZyBsaWtlIHRoaXM6XG5cbmBgYGNcbiNpZmRlZiBDT05GSUdfTUVNQ0dcbiAgLy8gU29tZXRoaW5nIHVzaW5nIHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0gaGVyZVxuI2VuZGlmXG5gYGBcblxuSSdsbCBiZSBzcGVjaWZpY2FsbHkgc2Nhbm5pbmcgZm9yIGxpbmVzIHRoYXQgZGVmaW5lIHRoaXMgdmFyaWFibGUgYW5kIHdoYXQgaXQgaXMgdXNlZCBmb3IgaW4gdGhlIE1FTUNHIGNvbmZpZy5cbkkgd2lsbCBoYXZlIHRvIGZpZ3VyZSBvdXQgaG93IHRoaXMgaXMgZG9uZSBiZXN0LCBzdWNoIGFzIGdyZXAgd2l0aCByZWdleCwgb3IgdGhyb3VnaCBvdGhlciB0b29scy4gVGhpcyB3aWxsIGdpdmUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBleHBsb3JpbmcgdGhhdCBwYXJ0IG9mIHRoZSBjb2RlLlxuXG5UaGlzIHdpbGwgZ2l2ZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIG15IGludmVzdGlnYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NjcwLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMDc6MDE6NTAuODgwMjI1Nzk5WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTcwMDYwNTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiI2lmZGVmLipNRU1DR1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bXNjYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bXNjYW4uYz0yMDI9c3RhdGljIGludCBzY19zd2FwcGluZXNzKHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuLS1cXG5tbS92bXNjYW4uYy0yMDgtXFxubW0vdm1zY2FuLmM6MjA5OiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS92bXNjYW4uYy0yMTAtXFxuLS1cXG5tbS92bXNjYW4uYz0yNjY3PXN0YXRpYyBzdHJ1Y3QgbHJ1dmVjICpnZXRfbHJ1dmVjKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IG5pZClcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI2NzAtXFxubW0vdm1zY2FuLmM6MjY3MTojaWZkZWYgQ09ORklHX01FTUNHXFxubW0vdm1zY2FuLmMtMjY3Mi1cXHRpZiAobWVtY2cpIHtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTI4MjE9c3RhdGljIHN0cnVjdCBscnVfZ2VuX21tX2xpc3QgKmdldF9tbV9saXN0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI4MjctXFxubW0vdm1zY2FuLmM6MjgyODojaWZkZWYgQ09ORklHX01FTUNHXFxubW0vdm1zY2FuLmMtMjgyOS1cXHRpZiAobWVtY2cpXFxuLS1cXG5tbS92bXNjYW4uYz0yODYxPXZvaWQgbHJ1X2dlbl9hZGRfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxuLS1cXG5tbS92bXNjYW4uYy0yODY3LVxcdFZNX1dBUk5fT05fT05DRSghbGlzdF9lbXB0eShcXHUwMDI2bW0tXFx1MDAzZWxydV9nZW4ubGlzdCkpO1xcbm1tL3Ztc2Nhbi5jOjI4Njg6I2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL3Ztc2Nhbi5jLTI4NjktXFx0Vk1fV0FSTl9PTl9PTkNFKG1tLVxcdTAwM2VscnVfZ2VuLm1lbWNnKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTI4ODg9dm9pZCBscnVfZ2VuX2RlbF9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI4OTYtXFxubW0vdm1zY2FuLmM6Mjg5NzojaWZkZWYgQ09ORklHX01FTUNHXFxubW0vdm1zY2FuLmMtMjg5OC1cXHRtZW1jZyA9IG1tLVxcdTAwM2VscnVfZ2VuLm1lbWNnO1xcbi0tXFxubW0vdm1zY2FuLmMtMjkyMC1cXG5tbS92bXNjYW4uYzoyOTIxOiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS92bXNjYW4uYy0yOTIyLVxcdG1lbV9jZ3JvdXBfcHV0KG1tLVxcdTAwM2VscnVfZ2VuLm1lbWNnKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI5MjYtXFxubW0vdm1zY2FuLmM6MjkyNzojaWZkZWYgQ09ORklHX01FTUNHXFxubW0vdm1zY2FuLmMtMjkyOC12b2lkIGxydV9nZW5fbWlncmF0ZV9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG4tLVxcbm1tL3Ztc2Nhbi5jPTQyOTY9c3RhdGljIHZvaWQgbHJ1X2dlbl9yb3RhdGVfbWVtY2coc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgb3ApXFxuLS1cXG5tbS92bXNjYW4uYy00MzQxLVxcbm1tL3Ztc2Nhbi5jOjQzNDI6I2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL3Ztc2Nhbi5jLTQzNDMtXFxuLS1cXG5tbS92bXNjYW4uYz01NTAyPXN0YXRpYyBpbnQgbHJ1X2dlbl9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXFxuLS1cXG5tbS92bXNjYW4uYy01NTE1LVxcbm1tL3Ztc2Nhbi5jOjU1MTY6I2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL3Ztc2Nhbi5jLTU1MTctXFx0XFx0aWYgKG1lbWNnKVxcbi0tXFxubW0vdm1zY2FuLmM9NTc2OD12b2lkIGxydV9nZW5faW5pdF9scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTc4Ny1cXG5tbS92bXNjYW4uYzo1Nzg4OiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS92bXNjYW4uYy01Nzg5LVxcbi0tXFxubW0vdm1zY2FuLmM9NjY2Nj11bnNpZ25lZCBsb25nIHRyeV90b19mcmVlX3BhZ2VzKHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsIGludCBvcmRlcixcXG4tLVxcbm1tL3Ztc2Nhbi5jLTY3MDgtXFxubW0vdm1zY2FuLmM6NjcwOTojaWZkZWYgQ09ORklHX01FTUNHXFxubW0vdm1zY2FuLmMtNjcxMC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMDc6MDE6NTAuOTk3MjM3Mzg2WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxNjk5MzcwMjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IHN0YW5kczpcblxuKipOYXZpZ2F0aW5nIHRoZSBDb2RlYmFzZSoqXG5cbk9rYXksIHNvIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCBpcyBkZWZpbmVkIG9uIGxpbmUgNzg1NS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNvbnRleHQuIFRoZSBjcml0aWNhbCB0aGluZyBoZXJlIGlzIHdoZXRoZXIgaXQncyBjb25kaXRpb25hbGx5IGNvbXBpbGVkIG9yIG5vdC4gTGV0J3Mgc2VlIGlmIHRoZXJlIGFyZSBhbnkgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZGlyZWN0aXZlcyAoYCNpZmRlZmAsIGAjaWZuZGVmYCwgZXRjLikgdGhhdCBhZmZlY3QgaXQuIEkga25vdyB0aGF0IGBDT05GSUdfTUVNQ0dgIG9mdGVuIHBsYXlzIGEgcm9sZSBpbiBtZW1vcnkgbWFuYWdlbWVudC4gVGhlIGxhc3QgdGltZSB0aGlzIHNob3dlZCB1cCBwcmlvciB0byB0aGUgZGVmaW5pdGlvbiwgaXQgd2FzIGJhY2sgYXQgNjcwOS4gT2theSwgc28gdGhhdCBtZWFucyBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgKmlzbid0KiBkaXJlY3RseSB1bmRlciB0aGUgYENPTkZJR19NRU1DR2AgY29uZmlndXJhdGlvbi4gVGhhdCdzIGdvb2QgdG8ga25vdy4gTm93LCBiZWZvcmUgSSBhc3N1bWUgYW55dGhpbmcsIEkgYmV0dGVyIGNoZWNrIGZvciBhbnkgb3RoZXIgYCNpZmRlZmAgZGlyZWN0aXZlcyBpbiB0aGUgaW1tZWRpYXRlIHZpY2luaXR5IG9mIHRoYXQgbGluZSAoNzg1NSkuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhIGRpZmZlcmVudCBjb25kaXRpb24gdGhhdCAqZG9lcyogaW1wYWN0IGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBjb2RlIGlzIG5vdCBpbXBhY3RlZCBieSB0aGlzIG9yIG90aGVyIGNvbmZpZ3VyYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzAwNiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDA3OjAxOjU1LjE2NzE3Njk2NloiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNDk0NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vdm1zY2FuLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzg0MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNzg0MDpcXHR9XFxuNzg0MTpcXHRcXG43ODQyOlxcdCNlbmRpZlxcbjc4NDM6XFx0XFxuNzg0NDpcXHRlbnVtIHtcXG43ODQ1OlxcdFxcdE1FTU9SWV9SRUNMQUlNX1NXQVBQSU5FU1MgPSAwLFxcbjc4NDY6XFx0XFx0TUVNT1JZX1JFQ0xBSU1fU1dBUFBJTkVTU19NQVgsXFxuNzg0NzpcXHRcXHRNRU1PUllfUkVDTEFJTV9OVUxMLFxcbjc4NDg6XFx0fTtcXG43ODQ5OlxcdHN0YXRpYyBjb25zdCBtYXRjaF90YWJsZV90IHRva2VucyA9IHtcXG43ODUwOlxcdFxcdHsgTUVNT1JZX1JFQ0xBSU1fU1dBUFBJTkVTUywgXFxcInN3YXBwaW5lc3M9JWRcXFwifSxcXG43ODUxOlxcdFxcdHsgTUVNT1JZX1JFQ0xBSU1fU1dBUFBJTkVTU19NQVgsIFxcXCJzd2FwcGluZXNzPW1heFxcXCJ9LFxcbjc4NTI6XFx0XFx0eyBNRU1PUllfUkVDTEFJTV9OVUxMLCBOVUxMIH0sXFxuNzg1MzpcXHR9O1xcbjc4NTQ6XFx0XFxuNzg1NTpcXHRpbnQgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbShjaGFyICpidWYsXFxuNzg1NjpcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHBnX2RhdGFfdCAqcGdkYXQpXFxuNzg1NzpcXHR7XFxuNzg1ODpcXHRcXHR1bnNpZ25lZCBpbnQgbnJfcmV0cmllcyA9IE1BWF9SRUNMQUlNX1JFVFJJRVM7XFxuNzg1OTpcXHRcXHR1bnNpZ25lZCBsb25nIG5yX3RvX3JlY2xhaW0sIG5yX3JlY2xhaW1lZCA9IDA7XFxuNzg2MDpcXHRcXHRpbnQgc3dhcHBpbmVzcyA9IC0xO1xcbjc4NjE6XFx0XFx0Y2hhciAqb2xkX2J1ZiwgKnN0YXJ0O1xcbjc4NjI6XFx0XFx0c3Vic3RyaW5nX3QgYXJnc1tNQVhfT1BUX0FSR1NdO1xcbjc4NjM6XFx0XFx0Z2ZwX3QgZ2ZwX21hc2sgPSBHRlBfS0VSTkVMO1xcbjc4NjQ6XFx0XFxuNzg2NTpcXHRcXHRpZiAoIWJ1ZiB8fCAoIW1lbWNnIFxcdTAwMjZcXHUwMDI2ICFwZ2RhdCkgfHwgKG1lbWNnIFxcdTAwMjZcXHUwMDI2IHBnZGF0KSlcXG43ODY2OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjc4Njc6XFx0XFxuNzg2ODpcXHRcXHRidWYgPSBzdHJzdHJpcChidWYpO1xcbjc4Njk6XFx0XFxuNzg3MDpcXHRcXHRvbGRfYnVmID0gYnVmO1xcbjc4NzE6XFx0XFx0bnJfdG9fcmVjbGFpbSA9IG1lbXBhcnNlKGJ1ZiwgXFx1MDAyNmJ1ZikgLyBQQUdFX1NJWkU7XFxuNzg3MjpcXHRcXHRpZiAoYnVmID09IG9sZF9idWYpXFxuNzg3MzpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG43ODc0OlxcdFxcbjc4NzU6XFx0XFx0YnVmID0gc3Ryc3RyaXAoYnVmKTtcXG43ODc2OlxcdFxcbjc4Nzc6XFx0XFx0d2hpbGUgKChzdGFydCA9IHN0cnNlcChcXHUwMDI2YnVmLCBcXFwiIFxcXCIpKSAhPSBOVUxMKSB7XFxuNzg3ODpcXHRcXHRcXHRpZiAoIXN0cmxlbihzdGFydCkpXFxuNzg3OTpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG43ODgwOlxcdFxcdFxcdHN3aXRjaCAobWF0Y2hfdG9rZW4oc3RhcnQsIHRva2VucywgYXJncykpIHtcXG43ODgxOlxcdFxcdFxcdGNhc2UgTUVNT1JZX1JFQ0xBSU1fU1dBUFBJTkVTUzpcXG43ODgyOlxcdFxcdFxcdFxcdGlmIChtYXRjaF9pbnQoXFx1MDAyNmFyZ3NbMF0sIFxcdTAwMjZzd2FwcGluZXNzKSlcXG43ODgzOlxcdFxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjc4ODQ6XFx0XFx0XFx0XFx0aWYgKHN3YXBwaW5lc3MgXFx1MDAzYyBNSU5fU1dBUFBJTkVTUyB8fFxcbjc4ODU6XFx0XFx0XFx0XFx0ICAgIHN3YXBwaW5lc3MgXFx1MDAzZSBNQVhfU1dBUFBJTkVTUylcXG43ODg2OlxcdFxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjc4ODc6XFx0XFx0XFx0XFx0YnJlYWs7XFxuNzg4ODpcXHRcXHRcXHRjYXNlIE1FTU9SWV9SRUNMQUlNX1NXQVBQSU5FU1NfTUFYOlxcbjc4ODk6XFx0XFx0XFx0XFx0c3dhcHBpbmVzcyA9IFNXQVBQSU5FU1NfQU5PTl9PTkxZO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQwNzowMTo1NS4xNjc1Mjg2NDZaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTg5MDEzOTU5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIGEgTXlzdGVyaW91cyBgI2VuZGlmYCoqXG5cbk9rYXksIHNvIEknbSBkZWVwIGluIHRoaXMgY29kZWJhc2UsIGFuZCBJJ3ZlIGhpdCBhIGAjZW5kaWZgIGF0IGxpbmUgNzg0Mi4gVGhlIGltbWVkaWF0ZSBxdWVzdGlvbiBpcyBhbHdheXMsIFwiV2h5IGlzICp0aGlzKiBgI2VuZGlmYCBoZXJlLCBhbmQgd2hhdCBjb25kaXRpb24gZG9lcyBpdCBjbG9zZT9cIiBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgY29ycmVzcG9uZGluZyBgI2lmYCwgYCNpZmRlZmAsIG9yIGAjaWZuZGVmYCBkaXJlY3RpdmUuIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gdXNlIG15IElERSdzIFwiZmluZCBtYXRjaGluZyBicmFjZS9kaXJlY3RpdmVcIiBmZWF0dXJlLCBidXQgSSBtYXkgbmVlZCB0byByZXNvcnQgdG8gYSBtb3JlIGJydXRlLWZvcmNlIHNlYXJjaCBpZiB0aGUgZWRpdG9yJ3MgYW5hbHlzaXMgaXNuJ3QgcGVyZmVjdC5cblxuT25jZSBJJ3ZlIGxvY2F0ZWQgdGhlIG9wZW5pbmcgZGlyZWN0aXZlLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgaW50ZW50LiBXaGF0IHByZXByb2Nlc3NvciB2YXJpYWJsZSBpcyBiZWluZyB0ZXN0ZWQ/IFdoYXQncyB0aGUgY29udGV4dD8gSXMgdGhpcyBndWFyZGluZyBhIHNwZWNpZmljIHBsYXRmb3JtLWRlcGVuZGVudCBjb2RlIGJsb2NrLCBhbiBleHBlcmltZW50YWwgZmVhdHVyZSwgYSBkZWJ1Z2dpbmcgYWlkLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gSSdsbCBwcm9iYWJseSBsb29rIGZvciB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgcHJlcHJvY2Vzc29yIHZhcmlhYmxlLiBXaGF0IGlzIHRoZSBsb2dpYyBiZWhpbmQgaXRzIGNvbmRpdGlvbmFsIHVzZT9cblxuSWYgdGhlIGNvZGUgd2l0aGluIHRoZSBgI2lmYC9gI2VuZGlmYCBibG9jayBpcyBub24tdHJpdmlhbCwgSSdsbCBuZWVkIHRvIGFzc2VzcyBpdHMgaW1wYWN0IG9uIHRoZSBzdXJyb3VuZGluZyBjb2RlLiBBcmUgdGhlcmUgYW55IGRlcGVuZGVuY2llcz8gUG90ZW50aWFsIHNpZGUgZWZmZWN0cz8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIGJ1Z3MgdGhhdCBjb3VsZCBiZSBpbnRyb2R1Y2VkIGlmIHRoZSBjb25kaXRpb24gZXZhbHVhdGVzIHRvIGZhbHNlPyBDb3VsZCB0aGUgY29kZSBiZSBzaW1wbGlmaWVkIG9yIHJlZmFjdG9yZWQgdG8gcmVtb3ZlIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbj8gRGVwZW5kaW5nIG9uIHRoZSBzY29wZSwgSSBtaWdodCBldmVuIG5lZWQgdG8gY29uc2lkZXIgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24gYW5kIHdoaWNoIG9mIHRoZSBjb25maWd1cmF0aW9ucyBhcmUgaW50ZW5kZWQgdG8gdXNlIHRoYXQgY29kZS5cblxuVWx0aW1hdGVseSwgSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciB0aGlzIGAjZW5kaWZgIGlzIGNvcnJlY3RseSBwbGFjZWQsIHNlcnZpbmcgaXRzIGludGVuZGVkIHB1cnBvc2UsIGFuZCBub3QgY2F1c2luZyBhbnkgdW5pbnRlbmRlZCBiZWhhdmlvci4gSXQncyBhIGtleSBwYXJ0IG9mIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvZGUncyBjb250cm9sIGZsb3cgYW5kIGhvdyBpdCBhZGFwdHMgdG8gZGlmZmVyZW50IGVudmlyb25tZW50cyBvciBjb25maWd1cmF0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgxMjIsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDA3OjAyOjAxLjA1NzY3MTAzNVoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjEzODQ4MDg0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIiNpZmRlZi4qXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3Ztc2Nhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTc1PXN0cnVjdCBzY2FuX2NvbnRyb2wge1xcbi0tXFxubW0vdm1zY2FuLmMtMTgyLVxcbm1tL3Ztc2Nhbi5jOjE4MzojaWZkZWYgQVJDSF9IQVNfUFJFRkVUQ0hXXFxubW0vdm1zY2FuLmMtMTg0LSNkZWZpbmUgcHJlZmV0Y2h3X3ByZXZfbHJ1X2ZvbGlvKF9mb2xpbywgX2Jhc2UsIF9maWVsZClcXHRcXHRcXHRcXFxcXFxuLS1cXG5tbS92bXNjYW4uYz0yMDI9c3RhdGljIGludCBzY19zd2FwcGluZXNzKHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuLS1cXG5tbS92bXNjYW4uYy0yMDgtXFxubW0vdm1zY2FuLmM6MjA5OiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS92bXNjYW4uYy0yMTAtXFxuLS1cXG5tbS92bXNjYW4uYz0yMzk9c3RhdGljIGJvb2wgd3JpdGViYWNrX3Rocm90dGxpbmdfc2FuZShzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI0Mi1cXHRcXHRyZXR1cm4gdHJ1ZTtcXG5tbS92bXNjYW4uYzoyNDM6I2lmZGVmIENPTkZJR19DR1JPVVBfV1JJVEVCQUNLXFxubW0vdm1zY2FuLmMtMjQ0LVxcdGlmIChjZ3JvdXBfc3Vic3lzX29uX2RmbChtZW1vcnlfY2dycF9zdWJzeXMpKVxcbi0tXFxubW0vdm1zY2FuLmM9ODIwPWVudW0gZm9saW9fcmVmZXJlbmNlcyB7XFxuLS1cXG5tbS92bXNjYW4uYy04MjUtXFxubW0vdm1zY2FuLmM6ODI2OiNpZmRlZiBDT05GSUdfTFJVX0dFTlxcbm1tL3Ztc2Nhbi5jLTgyNy0vKlxcbi0tXFxubW0vdm1zY2FuLmM9MTA0NT1zdGF0aWMgdW5zaWduZWQgaW50IHNocmlua19mb2xpb19saXN0KHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QsXFxuLS1cXG5tbS92bXNjYW4uYy0xMjc0LVxcdFxcdFxcdFxcdFxcdGdvdG8gYWN0aXZhdGVfbG9ja2VkO1xcbm1tL3Ztc2Nhbi5jOjEyNzU6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbm1tL3Ztc2Nhbi5jLTEyNzYtXFx0XFx0XFx0XFx0aWYgKG5yX3BhZ2VzIFxcdTAwM2U9IEhQQUdFX1BNRF9OUikge1xcbi0tXFxubW0vdm1zY2FuLmM9MjYwMz1zdGF0aWMgYm9vbCBjYW5fYWdlX2Fub25fcGFnZXMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbi0tXFxubW0vdm1zY2FuLmMtMjYxNC1cXG5tbS92bXNjYW4uYzoyNjE1OiNpZmRlZiBDT05GSUdfTFJVX0dFTlxcbm1tL3Ztc2Nhbi5jLTI2MTYtXFxubW0vdm1zY2FuLmM9MjYxNz1ERUZJTkVfU1RBVElDX0tFWV9GQUxTRShscnVfc3dpdGNoKTtcXG5tbS92bXNjYW4uYzoyNjE4OiNpZmRlZiBDT05GSUdfTFJVX0dFTl9FTkFCTEVEXFxubW0vdm1zY2FuLmMtMjYxOS1ERUZJTkVfU1RBVElDX0tFWV9BUlJBWV9UUlVFKGxydV9nZW5fY2FwcywgTlJfTFJVX0dFTl9DQVBTKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTI2Njc9c3RhdGljIHN0cnVjdCBscnV2ZWMgKmdldF9scnV2ZWMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgbmlkKVxcbi0tXFxubW0vdm1zY2FuLmMtMjY3MC1cXG5tbS92bXNjYW4uYzoyNjcxOiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS92bXNjYW4uYy0yNjcyLVxcdGlmIChtZW1jZykge1xcbi0tXFxubW0vdm1zY2FuLmM9Mjc5OT1zdGF0aWMgdm9pZCByZXNldF9ibG9vbV9maWx0ZXIoc3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKm1tX3N0YXRlLCB1bnNpZ25lZCBsb25nIHNlcSlcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI4MTgtXFxubW0vdm1zY2FuLmM6MjgxOTojaWZkZWYgQ09ORklHX0xSVV9HRU5fV0FMS1NfTU1VXFxubW0vdm1zY2FuLmMtMjgyMC1cXG5tbS92bXNjYW4uYz0yODIxPXN0YXRpYyBzdHJ1Y3QgbHJ1X2dlbl9tbV9saXN0ICpnZXRfbW1fbGlzdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuLS1cXG5tbS92bXNjYW4uYy0yODI3LVxcbm1tL3Ztc2Nhbi5jOjI4Mjg6I2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL3Ztc2Nhbi5jLTI4MjktXFx0aWYgKG1lbWNnKVxcbi0tXFxubW0vdm1zY2FuLmM9Mjg2MT12b2lkIGxydV9nZW5fYWRkX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbi0tXFxubW0vdm1zY2FuLmMtMjg2Ny1cXHRWTV9XQVJOX09OX09OQ0UoIWxpc3RfZW1wdHkoXFx1MDAyNm1tLVxcdTAwM2VscnVfZ2VuLmxpc3QpKTtcXG5tbS92bXNjYW4uYzoyODY4OiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS92bXNjYW4uYy0yODY5LVxcdFZNX1dBUk5fT05fT05DRShtbS1cXHUwMDNlbHJ1X2dlbi5tZW1jZyk7XFxuLS1cXG5tbS92bXNjYW4uYz0yODg4PXZvaWQgbHJ1X2dlbl9kZWxfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxuLS1cXG5tbS92bXNjYW4uYy0yODk2LVxcbm1tL3Ztc2Nhbi5jOjI4OTc6I2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL3Ztc2Nhbi5jLTI4OTgtXFx0bWVtY2cgPSBtbS1cXHUwMDNlbHJ1X2dlbi5tZW1jZztcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI5MjAtXFxubW0vdm1zY2FuLmM6MjkyMTojaWZkZWYgQ09ORklHX01FTUNHXFxubW0vdm1zY2FuLmMtMjkyMi1cXHRtZW1fY2dyb3VwX3B1dChtbS1cXHUwMDNlbHJ1X2dlbi5tZW1jZyk7XFxuLS1cXG5tbS92bXNjYW4uYy0yOTI2LVxcbm1tL3Ztc2Nhbi5jOjI5Mjc6I2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL3Ztc2Nhbi5jLTI5Mjgtdm9pZCBscnVfZ2VuX21pZ3JhdGVfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxuLS1cXG5tbS92bXNjYW4uYz00Mjk2PXN0YXRpYyB2b2lkIGxydV9nZW5fcm90YXRlX21lbWNnKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IG9wKVxcbi0tXFxubW0vdm1zY2FuLmMtNDM0MS1cXG5tbS92bXNjYW4uYzo0MzQyOiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS92bXNjYW4uYy00MzQzLVxcbi0tXFxubW0vdm1zY2FuLmM9NTUwMj1zdGF0aWMgaW50IGxydV9nZW5fc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxcbi0tXFxubW0vdm1zY2FuLmMtNTUxNS1cXG5tbS92bXNjYW4uYzo1NTE2OiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS92bXNjYW4uYy01NTE3LVxcdFxcdGlmIChtZW1jZylcXG4tLVxcbm1tL3Ztc2Nhbi5jPTU3Njg9dm9pZCBscnVfZ2VuX2luaXRfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTU3ODctXFxubW0vdm1zY2FuLmM6NTc4ODojaWZkZWYgQ09ORklHX01FTUNHXFxubW0vdm1zY2FuLmMtNTc4OS1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTY2NjY9dW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9wYWdlcyhzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0LCBpbnQgb3JkZXIsXFxuLS1cXG5tbS92bXNjYW4uYy02NzA4LVxcbm1tL3Ztc2Nhbi5jOjY3MDk6I2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL3Ztc2Nhbi5jLTY3MTAtXFxuLS1cXG5tbS92bXNjYW4uYz03NTM2PWJvb2wga3N3YXBkX3Rlc3RfaG9wZWxlc3MocGdfZGF0YV90ICpwZ2RhdClcXG4tLVxcbm1tL3Ztc2Nhbi5jLTc1NDAtXFxubW0vdm1zY2FuLmM6NzU0MTojaWZkZWYgQ09ORklHX0hJQkVSTkFUSU9OXFxubW0vdm1zY2FuLmMtNzU0Mi0vKlxcbi0tXFxubW0vdm1zY2FuLmM9NzYyMT1zdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSB2bXNjYW5fc3lzY3RsX3RhYmxlW10gPSB7XFxuLS1cXG5tbS92bXNjYW4uYy03NjMwLVxcdH0sXFxubW0vdm1zY2FuLmM6NzYzMTojaWZkZWYgQ09ORklHX05VTUFcXG5tbS92bXNjYW4uYy03NjMyLVxcdHtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTc2NTM9bW9kdWxlX2luaXQoa3N3YXBkX2luaXQpXFxubW0vdm1zY2FuLmMtNzY1NC1cXG5tbS92bXNjYW4uYzo3NjU1OiNpZmRlZiBDT05GSUdfTlVNQVxcbm1tL3Ztc2Nhbi5jLTc2NTYtLypcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMDc6MDI6MDEuMjcxNTI1NDA5WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU3MTc3ODc0NTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCBtZSBxdWlja2x5IHN5bnRoZXNpemUgdGhpcy5cblxuKipOYXZpZ2F0aW5nIE5VTUEtUmVsYXRlZCBDb25kaXRpb25hbCBDb21waWxhdGlvbioqXG5cbkFscmlnaHQsIEknbSBzY2FubmluZyB0aGlzIGNvZGUgYW5kIG15IGV5ZXMganVzdCBzbmFnZ2VkIG9uIGAjaWZkZWYgQ09ORklHX05VTUFgIGF0IGxpbmUgNzY1NS4gSG1tLCB0aGF0J3MgaW50ZXJlc3RpbmcuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCBpcyBhbHNvIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgdW5kZXIgdGhhdCBmbGFnLiBObyB0aW1lIHRvIHdhc3RlOyBJIG5lZWQgdG8gcXVpY2tseSB6ZXJvIGluIG9uIHRoZSBjb3JyZXNwb25kaW5nIGAjZW5kaWZgIHN0YXRlbWVudCBmb3IgYENPTkZJR19OVU1BYCBhdCBsaW5lIDc2NTUuIFRoYXQncyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgaWYgdGhpcyByZWNsYWltIGZlYXR1cmUgaXMgTlVNQS1kZXBlbmRlbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMzUxLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMDc6MDI6MDYuOTg5MzE2OTU0WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1Nzc1NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vdm1zY2FuLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzgyMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNzgyMDpcXHRcXHRcXHRyZXR1cm4gMDtcXG43ODIxOlxcdFxcbjc4MjI6XFx0XFx0cmV0ID0gX19ub2RlX3JlY2xhaW0ocGdkYXQsIG5yX3BhZ2VzLCBcXHUwMDI2c2MpO1xcbjc4MjM6XFx0XFx0Y2xlYXJfYml0X3VubG9jayhQR0RBVF9SRUNMQUlNX0xPQ0tFRCwgXFx1MDAyNnBnZGF0LVxcdTAwM2VmbGFncyk7XFxuNzgyNDpcXHRcXG43ODI1OlxcdFxcdGlmIChyZXQgXFx1MDAzZT0gbnJfcGFnZXMpXFxuNzgyNjpcXHRcXHRcXHRjb3VudF92bV9ldmVudChQR1NDQU5fWk9ORV9SRUNMQUlNX1NVQ0NFU1MpO1xcbjc4Mjc6XFx0XFx0ZWxzZVxcbjc4Mjg6XFx0XFx0XFx0Y291bnRfdm1fZXZlbnQoUEdTQ0FOX1pPTkVfUkVDTEFJTV9GQUlMRUQpO1xcbjc4Mjk6XFx0XFxuNzgzMDpcXHRcXHRyZXR1cm4gcmV0O1xcbjc4MzE6XFx0fVxcbjc4MzI6XFx0XFxuNzgzMzpcXHQjZWxzZVxcbjc4MzQ6XFx0XFxuNzgzNTpcXHRzdGF0aWMgdW5zaWduZWQgbG9uZyBfX25vZGVfcmVjbGFpbShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LFxcbjc4MzY6XFx0XFx0XFx0XFx0XFx0ICAgIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXFxuNzgzNzpcXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuNzgzODpcXHR7XFxuNzgzOTpcXHRcXHRyZXR1cm4gMDtcXG43ODQwOlxcdH1cXG43ODQxOlxcdFxcbjc4NDI6XFx0I2VuZGlmXFxuNzg0MzpcXHRcXG43ODQ0OlxcdGVudW0ge1xcbjc4NDU6XFx0XFx0TUVNT1JZX1JFQ0xBSU1fU1dBUFBJTkVTUyA9IDAsXFxuNzg0NjpcXHRcXHRNRU1PUllfUkVDTEFJTV9TV0FQUElORVNTX01BWCxcXG43ODQ3OlxcdFxcdE1FTU9SWV9SRUNMQUlNX05VTEwsXFxuNzg0ODpcXHR9O1xcbjc4NDk6XFx0c3RhdGljIGNvbnN0IG1hdGNoX3RhYmxlX3QgdG9rZW5zID0ge1xcbjc4NTA6XFx0XFx0eyBNRU1PUllfUkVDTEFJTV9TV0FQUElORVNTLCBcXFwic3dhcHBpbmVzcz0lZFxcXCJ9LFxcbjc4NTE6XFx0XFx0eyBNRU1PUllfUkVDTEFJTV9TV0FQUElORVNTX01BWCwgXFxcInN3YXBwaW5lc3M9bWF4XFxcIn0sXFxuNzg1MjpcXHRcXHR7IE1FTU9SWV9SRUNMQUlNX05VTEwsIE5VTEwgfSxcXG43ODUzOlxcdH07XFxuNzg1NDpcXHRcXG43ODU1OlxcdGludCB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltKGNoYXIgKmJ1ZixcXG43ODU2OlxcdFxcdFxcdFxcdCAgIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgcGdfZGF0YV90ICpwZ2RhdClcXG43ODU3OlxcdHtcXG43ODU4OlxcdFxcdHVuc2lnbmVkIGludCBucl9yZXRyaWVzID0gTUFYX1JFQ0xBSU1fUkVUUklFUztcXG43ODU5OlxcdFxcdHVuc2lnbmVkIGxvbmcgbnJfdG9fcmVjbGFpbSwgbnJfcmVjbGFpbWVkID0gMDtcXG43ODYwOlxcdFxcdGludCBzd2FwcGluZXNzID0gLTE7XFxuNzg2MTpcXHRcXHRjaGFyICpvbGRfYnVmLCAqc3RhcnQ7XFxuNzg2MjpcXHRcXHRzdWJzdHJpbmdfdCBhcmdzW01BWF9PUFRfQVJHU107XFxuNzg2MzpcXHRcXHRnZnBfdCBnZnBfbWFzayA9IEdGUF9LRVJORUw7XFxuNzg2NDpcXHRcXG43ODY1OlxcdFxcdGlmICghYnVmIHx8ICghbWVtY2cgXFx1MDAyNlxcdTAwMjYgIXBnZGF0KSB8fCAobWVtY2cgXFx1MDAyNlxcdTAwMjYgcGdkYXQpKVxcbjc4NjY6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuNzg2NzpcXHRcXG43ODY4OlxcdFxcdGJ1ZiA9IHN0cnN0cmlwKGJ1Zik7XFxuNzg2OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMDc6MDI6MDYuOTk0ODk4OTUzWiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIyNDE5Nzc3MjQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlByb2JpbmcgdGhlIEltcGxpY2F0aW9ucyBvZiBUaGlzIFByb2FjdGl2ZSBSZWNsYWltIFBhdGNoKipcblxuT2theSwgc28gYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gIGlzIGFsd2F5cyBjb21waWxlZCwgd2hpY2ggaXMgZ29vZC4gQW5kIGByZWNsYWltX3N0b3JlYCBpcyB1bmRlciBzeXNmcyB3aXRoIGBDT05GSUdfTlVNQWAsIHNvIHRoYXQncyB0aGUgZW50cnkgcG9pbnQuICBJZiBgQ09ORklHX05VTUFgIGlzIGVuYWJsZWQsIHRoZW4gYHJlY2xhaW1fc3RvcmVgIGNhbGxzIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYC4gQW5kIGl0J3Mgc3RpbGwgYXZhaWxhYmxlIGlmIGBDT05GSUdfTUVNQ0dgIGlzIGRpc2FibGVkLCB1c2luZyBzeXNmcy4gIEV4Y2VsbGVudCwgdGhlIHN3YXBwaW5lc3MgY29udHJvbCBzZWVtcyBsaWtlIGl0J3MgYmVoYXZpbmcgbm93IGJlY2F1c2UgYHNjX3N3YXBwaW5lc3NgIHVuY29uZGl0aW9uYWxseSB1c2VzIHRoZSBgc2MtXHUwMDNlcHJvYWN0aXZlX3N3YXBwaW5lc3NgLlxuXG5JIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgaXQgc3RpbGwgZnVuY3Rpb25zIHdpdGhvdXQgYENPTkZJR19NRU1DR2AgZW5hYmxlZC4gTGV0IG1lIHNlZS4uLiBpbiBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAsIHRoZSBjb2RlIHByb3Blcmx5IGhhbmRsZXMgdGhlIGBtZW1jZ2AgY2FzZSwgYnV0IGlmIGl0IGlzIG5vdCBlbmFibGVkIGl0IGNvbmZpZ3VyZXMgYSBgc2Nhbl9jb250cm9sYCBgc3RydWN0YCB0aGF0IGNhbiBwZXJmb3JtIGEgcHJvYWN0aXZlIHJlY2xhaW0uIEFuZCBsb29raW5nIGF0IHRoZSBub24tYG1lbWNnYCBjYXNlLCBpdCdzIGNhbGxpbmcgYF9fbm9kZV9yZWNsYWltYC4gT2theSwgSWYgYENPTkZJR19OVU1BYCBpcyBkaXNhYmxlZCwgYF9fbm9kZV9yZWNsYWltYCBqdXN0IHJldHVybnMgMCwgYW5kIGlmIGBDT05GSUdfTUVNQ0dgIGlzIGRpc2FibGVkLCBpdCB3b3Jrcy4gU28sIHllcywgdGhhdCdzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaWYgYENPTkZJR19NRU1DR2AgaXMgZGlzYWJsZWQgdGhyb3VnaCBzeXNmcyFcblxuV2FpdCwgYW0gSSBqdW1waW5nIHRvIGNvbmNsdXNpb25zPyBMZXQgbWUgZG91YmxlLWNoZWNrIHRoZSBgc2Nfc3dhcHBpbmVzc2AgY29kZSBiZWZvcmUgYW5kIGFmdGVyLiBCZWZvcmUsIGlmIGBDT05GSUdfTUVNQ0dgIHdhcyBkaXNhYmxlZCwgaXQganVzdCByZXR1cm5lZCBgdm1fc3dhcHBpbmVzc2AuICBOb3csIGl0IGNvcnJlY3RseSBjaGVja3MgYHNjLVx1MDAzZXByb2FjdGl2ZSBcdTAwMjZcdTAwMjYgc2MtXHUwMDNlcHJvYWN0aXZlX3N3YXBwaW5lc3NgIGV2ZW4gaWYgYENPTkZJR19NRU1DR2AgaXMgZGlzYWJsZWQuICBTbywgeWVzLCBpdCdzIGEgZnVuY3Rpb25hbCBjaGFuZ2UuXG5cbkJ1dCB3YWl0LCBpcyBgQ09ORklHX01FTUNHYCBkaXNhYmxlZCBhIGNvbW1vbiBjb25maWd1cmF0aW9uPyBVc3VhbGx5IGl0J3MgZW5hYmxlZCB3aXRoIHN5emthbGxlci5cblxuV2hhdCBpZiBgQ09ORklHX01FTUNHYCAqaXMqIGVuYWJsZWQ/IERvZXMgYW55dGhpbmcgYWN0dWFsbHkgY2hhbmdlPyBMZXQncyBjaGVjayBgbWVtX2Nncm91cF9zd2FwcGluZXNzYC4gIEJlZm9yZSwgaXQgaGFkIGEgYnJhbmNoIGZvciBjZ3JvdXAgdjIsIHRoZW4gZm9yIHRoZSByb290IG9yIGRpc2FibGVkIG1lbWNnLCByZXR1cm5pbmcgYHZtX3N3YXBwaW5lc3NgLCBhbmQgdGhlbiBmaW5hbGx5IGdldHRpbmcgdGhlIHZhbHVlIGZyb20gdGhlIG1lbWNnLiBBZnRlciwgaXQgY29uZGl0aW9uYWxseSByZXR1cm5zIHRoZSBzYW1lIGxvZ2ljIGRlcGVuZGluZyBpZiBgQ09ORklHX01FTUNHX1YxYCBpcyBlbmFibGVkIG9yIG5vdC4gIElmIGBDT05GSUdfTUVNQ0dfVjFgIGlzICpkaXNhYmxlZCosIGBjZ3JvdXBfc3Vic3lzX29uX2RmbGAgd291bGQgYmUgdHJ1ZSBhbnl3YXkuIFRodXMsIHRoZSBvbGQgY29kZSB3b3VsZCByZXR1cm4gYHZtX3N3YXBwaW5lc3NgLiBUaGUgbmV3IGNvZGUgYWxzbyByZXR1cm5zIGB2bV9zd2FwcGluZXNzYC4gU28gdGhlcmUgaXMgTk8gZnVuY3Rpb25hbCBjaGFuZ2UgaWYgYENPTkZJR19NRU1DR2AgaXMgZW5hYmxlZCwgcmVnYXJkbGVzcyBvZiBgQ09ORklHX01FTUNHX1YxYC5cblxuV2hhdCBpZiBgQ09ORklHX01FTUNHX1YxYCAqaXMqIGVuYWJsZWQ/IFRoZSBsb2dpYyBpbiBgbWVtX2Nncm91cF9zd2FwcGluZXNzYCBiZWZvcmUgYW5kIGFmdGVyIGlzIGVmZmVjdGl2ZWx5IHRoZSBzYW1lLiBIbW0uXG5cbk9rYXksIGxldCdzIGxvb2sgYXQgYG1lbV9jZ3JvdXBfY3NzX2FsbG9jYC4gTm93LCBgbWVtY2ctXHUwMDNlc3dhcHBpbmVzc2AgaXMgKm9ubHkqIGluaXRpYWxpemVkIGlmIGBDT05GSUdfTUVNQ0dfVjFgIGlzIGVuYWJsZWQuICBUaGF0J3MgYmVjYXVzZSBgc3dhcHBpbmVzc2AgaXMgdW5kZXIgdGhlIGBDT05GSUdfTUVNQ0dfVjFgIGd1YXJkIGluIHRoZSBgbWVtX2Nncm91cGAgc3RydWN0IG5vdy4gVGhpcyBpcyBhICptZW1vcnkgc2F2aW5nKiBvcHRpbWl6YXRpb24gZm9yIHRoZSBgQ09ORklHX01FTUNHX1YxYCBkaXNhYmxlZCBjYXNlLCBpdCBkb2Vzbid0IGFwcGVhciB0byBiZSBhIGZ1bmN0aW9uYWwgY2hhbmdlLlxuXG5XYWl0LCBhcmUgdGhlcmUgYW55IG90aGVyIGZ1bmN0aW9uYWwgY2hhbmdlcz8gV2hhdCBhYm91dCB0aGUgY2FzZSB3aGVyZSBtZW1jZyBpcyBOVUxMIGluIGBzY19zd2FwcGluZXNzYD8gSW4gYHNjX3N3YXBwaW5lc3NgIHRoZSBmdW5jdGlvbiBgbWVtX2Nncm91cF9pc19yb290YCBpcyBjYWxsZWQgb24gdGhlIGFyZ3VtZW50IGBtZW1jZ2AsIGlmIGl0IGlzIE5VTEwsIHRoaXMgbWlnaHQgY3Jhc2ghXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMzAzLCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEzNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDA3OjAyOjI5LjQxNDY3OTg4NVoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg3MzgzOTQ4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF9pc19yb290XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTUxMz1zdGF0aWMgaW5saW5lIGJvb2wgUGFnZU1lbWNnS21lbShzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTUxNy1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDo1MTg6c3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfaXNfcm9vdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtNTE5LXtcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTEwNjQ9c3RhdGljIGlubGluZSBib29sIFBhZ2VNZW1jZ0ttZW0oc3RydWN0IHBhZ2UgKnBhZ2UpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xMDY4LVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjEwNjk6c3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfaXNfcm9vdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTA3MC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDA3OjAyOjM0LjI4ODUyNzE0NFoiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTYyOTU5MjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBwcmVzZW50ZWQgYXMgaWYgaXQgd2VyZSBteSBvd24gaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkRpdmluZyBpbnRvIGBtZW1fY2dyb3VwX2lzX3Jvb3RgKipcblxuQWxyaWdodCwgdGltZSB0byBkaWcgaW50byB0aGlzIGBtZW1fY2dyb3VwX2lzX3Jvb3RgIGZ1bmN0aW9uLiBUaGUgbmFtZSBpbW1lZGlhdGVseSBzdWdnZXN0cyB3ZSdyZSBkZWFsaW5nIHdpdGggbWVtb3J5IGNncm91cHMsIHNwZWNpZmljYWxseSB0aGUgcm9vdCBjZ3JvdXAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBxdWlja2x5IGFzc2VzcyBpdHMgcHVycG9zZSBpbiB0aGUgYnJvYWRlciBjb250ZXh0LiBJcyBpdCBhIHNpbXBsZSBjaGVjaz8gRG9lcyBpdCBwZXJmb3JtIGFueSBzaWRlIGVmZmVjdHM/IFdoYXQgYXJlIHRoZSBwb3RlbnRpYWwgaW1wbGljYXRpb25zIG9mIGEgdHJ1ZS9mYWxzZSByZXR1cm4gdmFsdWU/IEdpdmVuIG15IGV4cGVyaWVuY2Ugd2l0aCB0aGUga2VybmVsJ3MgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtcywgSSdtIGFscmVhZHkgYW50aWNpcGF0aW5nIHRoYXQgdGhpcyBwcm9iYWJseSByZWxhdGVzIHRvIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgcmVzb3VyY2UgYWNjb3VudGluZyBhbmQgbGltaXRzLiBJJ20ga2VlbiB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGZ1bmN0aW9uIGRpZmZlcmVudGlhdGVzIGJldHdlZW4gdGhlIFwidG9wLWxldmVsXCIgb3IgXCJzeXN0ZW0td2lkZVwiIG1lbW9yeSBjZ3JvdXAgYW5kIG90aGVyIG5lc3RlZCBvbmVzLiBQZXJoYXBzIGl0J3MgYSBmdW5kYW1lbnRhbCB0ZXN0IHVzZWQgaW4gbWFueSBjcml0aWNhbCBtZW1vcnkgbWFuYWdlbWVudCBwYXRocy4gVW5kZXJzdGFuZGluZyBpdHMgdXNhZ2Ugd2lsbCBnaXZlIGluc2lnaHRzIGludG8gdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLiBMZXQncyBzZWUgaG93IHRoZSBpbXBsZW1lbnRhdGlvbiBjbGFyaWZpZXMgdGhlc2UgcXVlc3Rpb25zLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGhvdyBpdCdzIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBvdGhlciBjZ3JvdXAgZnVuY3Rpb25zIGFuZCBzdHJ1Y3R1cmVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDQ4NSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDA3OjAyOjM4LjQ1MTQ4ODkwNFoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDYxODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcIixcbiAgXCJGaXJzdExpbmVcIjogNTE4LFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTE4OlxcdHN0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX2lzX3Jvb3Qoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbiA1MTk6XFx0e1xcbiA1MjA6XFx0XFx0cmV0dXJuIChtZW1jZyA9PSByb290X21lbV9jZ3JvdXApO1xcbiA1MjE6XFx0fVxcbiA1MjI6XFx0XFxuIDUyMzpcXHRzdGF0aWMgaW5saW5lIGJvb2wgb2JqX2Nncm91cF9pc19yb290KGNvbnN0IHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZylcXG4gNTI0OlxcdHtcXG4gNTI1OlxcdFxcdHJldHVybiBvYmpjZy1cXHUwMDNlaXNfcm9vdDtcXG4gNTI2OlxcdH1cXG4gNTI3OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQwNzowMjozOC40NTE2MzczNDRaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQwNjY4Nzk2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQb3RlbnRpYWwgTlVMTCBQb2ludGVyIERlcmVmZXJlbmNlKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGNvZGUsIHNwZWNpZmljYWxseSBhcm91bmQgbWVtb3J5IGNncm91cHMgYW5kIHN3YXBwaW5lc3MuIEkgc2VlIGEgY29uZGl0aW9uIHdoZXJlIGlmIGBtZW1jZ2AgaXMgTlVMTCwgdGhlbiBgbWVtY2cgPT0gcm9vdF9tZW1fY2dyb3VwYCBpcyBkZWZpbml0ZWx5IGZhbHNlLCBiZWNhdXNlIGByb290X21lbV9jZ3JvdXBgIGlzIGEgcmVhbCBvYmplY3QuIEJ1dCB0aGVuLCAqd2FpdCBhIG1pbnV0ZSosIGlmIGBtZW1jZ2AgKmlzKiBOVUxMLCB0aGUgY29kZSBjYWxscyBgbWVtX2Nncm91cF9zd2FwcGluZXNzYCwgYW5kIHRoYXQgZnVuY3Rpb24gdHJpZXMgdG8gYWNjZXNzIGBtZW1jZy1cdTAwM2Vzd2FwcGluZXNzYC4gVGhhdCdzIGEgY2xhc3NpYyBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UhIFRoaXMgY291bGQgYmUgYSBzZXJpb3VzIGJ1Zy5cblxuSSBuZWVkIHRvIGNvbmZpcm0gaWYgYG1lbWNnYCBjYW4gKmFjdHVhbGx5KiBiZSBOVUxMIGluIHRoZSBjb250ZXh0IG9mIGBzY19zd2FwcGluZXNzYC4gVGhpcyBzZWVtcyBsaWtlIGEgcHJldHR5IGltcG9ydGFudCBjaGVjayB0byBtYWtlIHN1cmUgaXQgZG9lc24ndCBjYXVzZSBhIHN5c3RlbSBjcmFzaC4gVGhlIG5leHQgc3RlcCBpcyBjbGVhci4gTGV0IG1lIHRyYWNlIHRoZSBjYWxsZXJzIG9mIGBzY19zd2FwcGluZXNzYCBhbmQgc2VlIGhvdyBgbWVtY2dgIGlzIGJlaW5nIHBhc3NlZCBpbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHBvdGVudGlhbCBjYWxsIHBhdGhzIGFuZCBtYWtlIHN1cmUgdGhlIGBtZW1jZ2AgcGFyYW1ldGVyIGlzIGFsd2F5cyB2YWxpZCBvciBwcm9wZXJseSBoYW5kbGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDkzMCwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDA3OjAyOjQyLjg1ODMyODcxNloiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzk3MjU3MjAyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzY19zd2FwcGluZXNzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTc1PXN0cnVjdCBzY2FuX2NvbnRyb2wge1xcbi0tXFxubW0vdm1zY2FuLmMtOTYtXFxubW0vdm1zY2FuLmM6OTc6XFx0LyogU3dhcHBpbmVzcyB2YWx1ZSBmb3IgcHJvYWN0aXZlIHJlY2xhaW0uIEFsd2F5cyB1c2Ugc2Nfc3dhcHBpbmVzcygpISAqL1xcbm1tL3Ztc2Nhbi5jLTk4LVxcdGludCAqcHJvYWN0aXZlX3N3YXBwaW5lc3M7XFxuLS1cXG5tbS92bXNjYW4uYz0yMDA9aW50IHZtX3N3YXBwaW5lc3MgPSA2MDtcXG5tbS92bXNjYW4uYy0yMDEtXFxubW0vdm1zY2FuLmM6MjAyOnN0YXRpYyBpbnQgc2Nfc3dhcHBpbmVzcyhzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYywgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbm1tL3Ztc2Nhbi5jLTIwMy17XFxuLS1cXG5tbS92bXNjYW4uYz0yNDc5PXN0YXRpYyB2b2lkIGdldF9zY2FuX2NvdW50KHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsXFxuLS1cXG5tbS92bXNjYW4uYy0yNDgzLVxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGxydXZlY19tZW1jZyhscnV2ZWMpO1xcbm1tL3Ztc2Nhbi5jOjI0ODQ6XFx0aW50IHN3YXBwaW5lc3MgPSBzY19zd2FwcGluZXNzKHNjLCBtZW1jZyk7XFxubW0vdm1zY2FuLmMtMjQ4NS1cXHR1NjQgZnJhY3Rpb25bQU5PTl9BTkRfRklMRV07XFxuLS1cXG5tbS92bXNjYW4uYz0yNjg3PXN0YXRpYyBpbnQgZ2V0X3N3YXBwaW5lc3Moc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI2OTgtXFxubW0vdm1zY2FuLmM6MjY5OTpcXHRyZXR1cm4gc2Nfc3dhcHBpbmVzcyhzYywgbWVtY2cpO1xcbm1tL3Ztc2Nhbi5jLTI3MDAtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQwNzowMjo0Ni44MzA5MDYyOTJaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE4NzY2NDA3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqQW5hbHl6aW5nIFN5c3RlbSBQZXJmb3JtYW5jZSBNZXRyaWNzKipcblxuQWxyaWdodCwgYmVmb3JlIGRpdmluZyB0b28gZGVlcCBpbnRvIHRoaXMsIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhpbmdzLiBMZXQncyBzZWUuLi4gSSB0aGluayBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgd291bGQgYmUgdG8gcHVsbCBgZ2V0X3N3YXBwaW5lc3NgIGFuZCBgZ2V0X3NjYW5fY291bnRgLiBUaGVzZSBhcmUga2V5IGluZGljYXRvcnMgZm9yIGhvdyBhZ2dyZXNzaXZlbHkgdGhlIHN5c3RlbSBpcyB1dGlsaXppbmcgc3dhcCBzcGFjZSBhbmQgaG93IGZyZXF1ZW50bHkgaXQncyBzY2FubmluZyBtZW1vcnkgcGFnZXMsIHJlc3BlY3RpdmVseS4gVW5kZXJzdGFuZGluZyB0aGVzZSB0d28gdmFyaWFibGVzIGlzIG9mdGVuIHRoZSBqdW1waW5nIG9mZiBwb2ludCBmb3IgZGlhZ25vc3RpY3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1Njk3LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMDc6MDI6NTAuMDE4NTczNzQ5WiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1NzgxNzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vdm1zY2FuLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjQ3OSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjQ3OTpcXHRzdGF0aWMgdm9pZCBnZXRfc2Nhbl9jb3VudChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLFxcbjI0ODA6XFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgbG9uZyAqbnIpXFxuMjQ4MTpcXHR7XFxuMjQ4MjpcXHRcXHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gbHJ1dmVjX3BnZGF0KGxydXZlYyk7XFxuMjQ4MzpcXHRcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBscnV2ZWNfbWVtY2cobHJ1dmVjKTtcXG4yNDg0OlxcdFxcdGludCBzd2FwcGluZXNzID0gc2Nfc3dhcHBpbmVzcyhzYywgbWVtY2cpO1xcbjI0ODU6XFx0XFx0dTY0IGZyYWN0aW9uW0FOT05fQU5EX0ZJTEVdO1xcbjI0ODY6XFx0XFx0dTY0IGRlbm9taW5hdG9yID0gMDtcXHQvKiBnY2MgKi9cXG4yNDg3OlxcdFxcdGVudW0gc2Nhbl9iYWxhbmNlIHNjYW5fYmFsYW5jZTtcXG4yNDg4OlxcdFxcdGVudW0gbHJ1X2xpc3QgbHJ1O1xcbjI0ODk6XFx0XFxuMjQ5MDpcXHRcXHQvKiBQcm9hY3RpdmUgcmVjbGFpbSBpbml0aWF0ZWQgYnkgdXNlcnNwYWNlIGZvciBhbm9ueW1vdXMgbWVtb3J5IG9ubHkgKi9cXG4yNDkxOlxcdFxcdGlmIChzd2FwcGluZXNzID09IFNXQVBQSU5FU1NfQU5PTl9PTkxZKSB7XFxuMjQ5MjpcXHRcXHRcXHRXQVJOX09OX09OQ0UoIXNjLVxcdTAwM2Vwcm9hY3RpdmUpO1xcbjI0OTM6XFx0XFx0XFx0aWYgKCFjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzKG1lbWNnLCBwZ2RhdC1cXHUwMDNlbm9kZV9pZCwgc2MpKSB7XFxuMjQ5NDpcXHRcXHRcXHRcXHRtZW1zZXQobnIsIDAsIHNpemVvZigqbnIpICogTlJfTFJVX0xJU1RTKTtcXG4yNDk1OlxcdFxcdFxcdFxcdHJldHVybjtcXG4yNDk2OlxcdFxcdFxcdH1cXG4yNDk3OlxcdFxcdFxcdHNjYW5fYmFsYW5jZSA9IFNDQU5fQU5PTjtcXG4yNDk4OlxcdFxcdFxcdGdvdG8gb3V0O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQwNzowMjo1MC4wMjExNTg4WiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUwODQ1MDE4NzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQncyBwZXJzcGVjdGl2ZTpcblxuKipMUlVWZWMgTWVtb3J5IENHIGFuZCB0aGUgTlVMTCBQb2ludGVyIFF1ZXN0aW9uKipcblxuQWxyaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgbHJ1dmVjX21lbWNnKGxydXZlYylgIGZ1bmN0aW9uIGNhbGwuLi4gYW5kIG15IG1pbmQgaW1tZWRpYXRlbHkganVtcHMgdG8gYSBwb3RlbnRpYWwgZWRnZSBjYXNlLiBDYW4gdGhpcyB0aGluZyBhY3R1YWxseSByZXR1cm4gYSBOVUxMIHBvaW50ZXI/IFRoZSBvYnZpb3VzIGltcGxpY2F0aW9ucyBhcmUgY2FzY2FkaW5nLiBJZiBpdCAqY2FuKiByZXR1cm4gTlVMTCwgdGhlbiBldmVyeSBzaW5nbGUgY2FsbCB0byBpdCBuZWVkcyBhIE5VTEwgY2hlY2ssIG90aGVyd2lzZSwgYm9vbSwgd2UncmUgbG9va2luZyBhdCBhIHNlcmlvdXMga2VybmVsIHBhbmljIG9yIGF0IGJlc3QgYSBuYXN0eSBidWcuIFdlIG5lZWQgdG8gYmUgYWJsZSB0byBjYXRjaCB0aGUgZXJyb3IgY29uZGl0aW9uIVxuXG5XaGF0IGFyZSB0aGUgc2NlbmFyaW9zPyBEb2VzIHRoZSBkb2N1bWVudGF0aW9uIGNsYXJpZnkgdGhpcyBiZWhhdmlvcj8gSXMgaXQgZGVwZW5kZW50IG9uIGEgc3BlY2lmaWMgaGFyZHdhcmUgY29uZmlndXJhdGlvbj8gRG9lcyBpdCBwZXJ0YWluIHRvIG1lbW9yeSBtYW5hZ2VtZW50IHpvbmVzIG9yIHRoZWlyIGludGVyYWN0aW9ucyB3aXRoIHRoZSBjYWNoZT8gQXJlIHdlIGRlYWxpbmcgd2l0aCBzb21lIHNvcnQgb2YgcmFjZSBjb25kaXRpb24gb3IgY29uY3VycmVudCBhY2Nlc3MgaXNzdWU/IEkgbmVlZCB0byBkaWcgaW50byB0aGUgY29kZSwgYW5kIG1heWJlIHRoZSBhY2NvbXBhbnlpbmcgY29tbWVudHMgYW5kIGRvY3VtZW50YXRpb24sIHRvIGNvbmZpcm0gd2hhdCB0aGUgcG9zc2libGUgcmV0dXJuIHZhbHVlcyBhbmQgY29ycmVzcG9uZGluZyBjYXNlcyBhcmUuIE1vcmUgaW1wb3J0YW50bHksIHdoYXQgaGFwcGVucyB1cHN0cmVhbSB3aXRoIHRoaXMgTlVMTCBwb2ludGVyIGlmIHdlIGRvbid0IGNhdGNoIGl0PyFcblxuXG4iLCJJbnB1dFRva2VucyI6MjYyNDYsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDA3OjAyOjU1LjEwNTY2NTYyMloiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTI2MTU3NzM1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwIFxcXFwqbHJ1dmVjX21lbWNnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTgxOD1zdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2Zyb21fc2VxKHN0cnVjdCBzZXFfZmlsZSAqbSlcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTgyMi1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDo4MjM6c3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqbHJ1dmVjX21lbWNnKHN0cnVjdCBscnV2ZWMgKmxydXZlYylcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC04MjQte1xcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTI5Mz1zdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2Zyb21fc2VxKHN0cnVjdCBzZXFfZmlsZSAqbSlcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTEyOTctXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MTI5ODpzdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpscnV2ZWNfbWVtY2coc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTEyOTkte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQwNzowMzowMC4zNjcyNTAzN1oiLCJTZXEiOjQzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODMwMjIzMTM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlIHdlIGdvLi4uXG5cbioqRGl2aW5nIGludG8gYGxydXZlY19tZW1jZ2AqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gVGhlIGZpcnN0IHRoaW5nIEknbSBnb2luZyB0byBkbyBpcyB0YWtlIGEgbG9vayBhdCBgbHJ1dmVjX21lbWNnYC4gSSBhbHJlYWR5IGhhdmUgYSBwcmV0dHkgc29saWQgZ3Jhc3Agb24gbWVtb3J5IG1hbmFnZW1lbnQgaW4gdGhlIExpbnV4IGtlcm5lbCwgZXNwZWNpYWxseSB3aXRoIHJlc3BlY3QgdG8gY29udHJvbCBncm91cHMuIE15IGV4cGVydGlzZSBhbGxvd3MgbWUgdG8gcmVhZCB0aHJvdWdoIHRoZSBkb2N1bWVudGF0aW9uIGFuZCBqdW1wIHJpZ2h0IGludG8gdGhlIGNvZGUgdG8gZGlzY2VybiBob3cgaXQgaW1wbGVtZW50cyBtZW1vcnkgY29udHJvbCBncm91cCBmdW5jdGlvbmFsaXR5LiBJIGV4cGVjdCB0byBzZWUgdGhlIGludGVycGxheSBiZXR3ZWVuIHRoZSBMUlUgKExlYXN0IFJlY2VudGx5IFVzZWQpIGxpc3QgYW5kIHRoZSBtZW1vcnkgY29udHJvbCBncm91cCAobWVtY2cpIG1lY2hhbmlzbXMsIGJ1dCBJIG5lZWQgdG8gc2VlIHRoZSBzcGVjaWZpY3MuIEknbSBrZWVuIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgY29kZSBoYW5kbGVzIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoZSBnbG9iYWwgcGFnZSByZWNsYWltIHByb2Nlc3MgYW5kIHRoZSBwZXItbWVtY2cgYWNjb3VudGluZy4gTXkgZm9jdXMgd2lsbCBiZSBvbiB0aGUgZGF0YSBzdHJ1Y3R1cmVzLCB0aGUgYWxnb3JpdGhtcywgYW5kIHRoZSBsb2NraW5nIGludm9sdmVkLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucyBhbmQgcG90ZW50aWFsIGNvbnRlbnRpb24gcG9pbnRzLCB3aXRoIHBhcnRpY3VsYXIgYXR0ZW50aW9uIHRvIGhvdyB0aGlzIHBpZWNlIGZpdHMgaW50byB0aGUgbGFyZ2VyIGFyY2hpdGVjdHVyZSBvZiB0aGUga2VybmVsJ3MgbWVtb3J5IG1hbmFnZW1lbnQgc3lzdGVtLiBLbm93aW5nIHRoaXMgd2lsbCBoZWxwIG1lIHdoZW4gSSB0cm91Ymxlc2hvb3Qgb3Igb3B0aW1pemUgbWVtb3J5IG1hbmFnZW1lbnQgaW4gYSBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2NzUwLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMDc6MDM6MDQuMTk3NDc2MjU5WiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3Mjc4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFwiLFxuICBcIkZpcnN0TGluZVwiOiA4MjMsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4MjM6XFx0c3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqbHJ1dmVjX21lbWNnKHN0cnVjdCBscnV2ZWMgKmxydXZlYylcXG4gODI0OlxcdHtcXG4gODI1OlxcdFxcdHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICptejtcXG4gODI2OlxcdFxcbiA4Mjc6XFx0XFx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcXG4gODI4OlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiA4Mjk6XFx0XFxuIDgzMDpcXHRcXHRteiA9IGNvbnRhaW5lcl9vZihscnV2ZWMsIHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlLCBscnV2ZWMpO1xcbiA4MzE6XFx0XFx0cmV0dXJuIG16LVxcdTAwM2VtZW1jZztcXG4gODMyOlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMDc6MDM6MDQuMTk3NjUxMDU5WiIsIlNlcSI6NDUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk0MzEzODY0MDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFN3YXBwaW5lc3MgYW5kIE1lbW9yeSBDZ3JvdXAgSW50ZXJhY3Rpb25zKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGNvZGUsIHNwZWNpZmljYWxseSBob3cgc3dhcHBpbmVzcyBpcyBoYW5kbGVkIGluIHJlbGF0aW9uIHRvIG1lbW9yeSBjZ3JvdXBzLiBUaGUgY29yZSBvZiBteSBjb25jZXJuIGhlcmUgaXMgcG90ZW50aWFsIG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZXMuIEkgc2VlIHRoYXQgaWYgYG1lbV9jZ3JvdXBfZGlzYWJsZWQoKWAgaXMgdHJ1ZSwgYGxydXZlY19tZW1jZ2AgcmV0dXJucyBOVUxMLiBUaGlzIG1ha2VzIHNlbnNlIOKAkyB0aGUgbWVtb3J5IGNncm91cCBmdW5jdGlvbmFsaXR5IGlzIGRpc2FibGVkLCBzbyB0aGVyZSdzIG5vIGFzc29jaWF0ZWQgY2dyb3VwLiBDb25zZXF1ZW50bHksIGBzY19zd2FwcGluZXNzYCB0aGVuIGNhbGxzIGBtZW1fY2dyb3VwX3N3YXBwaW5lc3NgIHdpdGggTlVMTC5cblxuTm93LCBsZXQncyBsb29rIGF0IGBtZW1fY2dyb3VwX3N3YXBwaW5lc3NgLiBUaGUgY29kZSBoYXMgYSBjaGVjazpcblxuYGBgY1xuc3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF9zd2FwcGluZXNzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbntcbiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcblx0aWYgKCFjZ3JvdXBfc3Vic3lzX29uX2RmbChtZW1vcnlfY2dycF9zdWJzeXMpIFx1MDAyNlx1MDAyNlxuXHQgICAgIW1lbV9jZ3JvdXBfZGlzYWJsZWQoKSBcdTAwMjZcdTAwMjYgIW1lbV9jZ3JvdXBfaXNfcm9vdChtZW1jZykpXG5cdFx0cmV0dXJuIG1lbWNnLVx1MDAzZXN3YXBwaW5lc3M7XG4jZW5kaWZcblx0cmV0dXJuIFJFQURfT05DRSh2bV9zd2FwcGluZXNzKTtcbn1cbmBgYFxuXG5FeGNlbGxlbnQhIElmIGBtZW1fY2dyb3VwX2Rpc2FibGVkKClgIGlzIHRydWUsIHRoZSBgIW1lbV9jZ3JvdXBfZGlzYWJsZWQoKWAgY29uZGl0aW9uIGlzIGZhbHNlLiBUaGUgc2hvcnQtY2lyY3VpdGluZyBtZWFucyBpdCBhdm9pZHMgZGVyZWZlcmVuY2luZyBgbWVtY2dgIGFsdG9nZXRoZXIgYW5kIHNhZmVseSByZXR1cm5zIHRoZSBnbG9iYWwgYHZtX3N3YXBwaW5lc3NgIHZhbHVlLiBTbyBmYXIsIHNvIGdvb2QuIE5vIG51bGwgZGVyZWZlcmVuY2UgcmlzayBpZiB0aGUgZmVhdHVyZSBpcyBkaXNhYmxlZC5cblxuTXkgbmV4dCBjb25jZXJuIGlzIHdoYXQgaGFwcGVucyBpZiBgbWVtX2Nncm91cF9kaXNhYmxlZCgpYCBpcyBmYWxzZSwgYnV0IGBtZW1jZ2AgaXMgTlVMTC4gQ2FuIGBscnV2ZWNfbWVtY2dgIHJldHVybiBOVUxMIGV2ZW4gaWYgdGhlIGZlYXR1cmUgaXNuJ3QgZGlzYWJsZWQ/IExldCdzIGNoZWNrOlxuXG5gYGBjXG5cdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkpXG5cdFx0cmV0dXJuIE5VTEw7XG5cblx0bXogPSBjb250YWluZXJfb2YobHJ1dmVjLCBzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSwgbHJ1dmVjKTtcblx0cmV0dXJuIG16LVx1MDAzZW1lbWNnO1xuYGBgXG5cbkhlcmUgaXQgaXM6IHRoZSBjb2RlICpleHBsaWNpdGx5KiByZXR1cm5zIE5VTEwgaWYgYG1lbV9jZ3JvdXBfZGlzYWJsZWQoKWAgaXMgdHJ1ZS4gT3RoZXJ3aXNlLCBpdCByZXR1cm5zIGBtei1cdTAwM2VtZW1jZ2AuIFNvLCB0aGUgcXVlc3Rpb24gYmVjb21lcywgY2FuIGBtei1cdTAwM2VtZW1jZ2AgaXRzZWxmIGV2ZXIgYmUgTlVMTD8gVGhpbmtpbmcgdGhpcyB0aHJvdWdoLi4uIGBtei1cdTAwM2VtZW1jZ2AgaXMgdGhlIGBtZW1jZ2AgYXNzb2NpYXRlZCB3aXRoIHRoZSBgbWVtX2Nncm91cF9wZXJfbm9kZWAuIEZvciB0aGUgcm9vdCBtZW1jZywgYG16LVx1MDAzZW1lbWNnYCBpcyBgcm9vdF9tZW1fY2dyb3VwYCwgd2hpY2ggaXMgKm5vdCogTlVMTC4gVGhlcmVmb3JlLCBgbWVtY2dgIGlzIG9ubHkgTlVMTCBpZiBgbWVtX2Nncm91cF9kaXNhYmxlZCgpYCBpcyB0cnVlLlxuXG5UaGlzIG1lYW5zIHRoYXQgaWYgYG1lbV9jZ3JvdXBfZGlzYWJsZWQoKWAgaXMgdHJ1ZSwgYG1lbV9jZ3JvdXBfc3dhcHBpbmVzc2Agd2lsbCAqYWx3YXlzKiBzYWZlbHkgcmV0dXJuIGB2bV9zd2FwcGluZXNzYCBiZWNhdXNlIG9mIHRoZSBpbml0aWFsIGNoZWNrIGluIGBscnV2ZWNfbWVtY2dgIHRoYXQgcHJldmVudHMgYSBOVUxMIHZhbHVlIGJlaW5nIHBhc3NlZC5cblxuTm93LCBJIG5lZWQgdG8gY29uc2lkZXIgYW4gZWRnZSBjYXNlOiB3aGF0IGlmIGBDT05GSUdfTUVNQ0dgIGlzIGRpc2FibGVkIGVudGlyZWx5PyBJIHNob3VsZCBjaGVjayBob3cgYGxydXZlY19tZW1jZ2AgYmVoYXZlcyB1bmRlciB0aGF0IGNvbmRpdGlvbi4gVGhpcyBjb3VsZCBjaGFuZ2UgdGhlIG92ZXJhbGwgZmxvdyBJJ3ZlIGFuYWx5emVkIHNvIGZhci4gVGhpcyB3aWxsIGJlIHRoZSBuZXh0IHN0ZXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3MTkyLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTU4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMDc6MDM6MTMuNjI5MDQwOTg3WiIsIlNlcSI6NDYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExODI1MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMTI5OCxcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTI5ODpcXHRzdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpscnV2ZWNfbWVtY2coc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxcbjEyOTk6XFx0e1xcbjEzMDA6XFx0XFx0cmV0dXJuIE5VTEw7XFxuMTMwMTpcXHR9XFxuMTMwMjpcXHRcXG4xMzAzOlxcdHN0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX29ubGluZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuMTMwNDpcXHR7XFxuMTMwNTpcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4xMzA2OlxcdH1cXG4xMzA3OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQwNzowMzoxMy42MzAyMjU3NzdaIiwiU2VxIjo0NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjY1MDM0MzM4NzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgUGF0Y2ggZm9yIEZ1enppbmcgU3VpdGFiaWxpdHkqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGRpc3NlY3RlZCB0aGlzIHBhdGNoLCBhbmQgaGVyZSdzIG15IGFzc2Vzc21lbnQuIFRoZSBwcmltYXJ5IG9iamVjdGl2ZSBzZWVtcyB0byBiZSB0aWR5aW5nIHVwIHRoZSBjb2RlLCBzcGVjaWZpY2FsbHkgY29uY2VybmluZyB0aGUgYHN3YXBwaW5lc3NgIHBhcmFtZXRlciB3aXRoaW4gbWVtb3J5IGNncm91cHMsIGFuZCBoaWRpbmcgaXQgdW5kZXIgdGhlIGBDT05GSUdfTUVNQ0dfVjFgIGZsYWcgZm9yIG1lbW9yeSBvcHRpbWl6YXRpb24uIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdGhhdCB0aGVyZSBtaWdodCBiZSBzb21lIGZ1bmN0aW9uYWwgY2hhbmdlcyB3b3J0aCBleHBsb3JpbmcgZm9yIGZ1enppbmcsIGJ1dCB0aGUgbW9yZSBJIGxvb2ssIHRoZSBsZXNzIHNpZ25pZmljYW50IHRoZXkgYXBwZWFyLlxuXG5Jbml0aWFsbHksIEkgaWRlbnRpZmllZCBhIHBvdGVudGlhbCBkaWZmZXJlbmNlIGluIHRoZSBiZWhhdmlvciBvZiBwcm9hY3RpdmUgcmVjbGFpbSB2aWEgc3lzZnMgKHRyaWdnZXJlZCBieSB3cml0aW5nIHRvIGAvc3lzL2RldmljZXMvc3lzdGVtL25vZGUvbm9kZVgvcmVjbGFpbWApIHdoZW4gYENPTkZJR19NRU1DR2AgaXMgZGlzYWJsZWQuIFByZXZpb3VzbHksIHRoaXMgbWVjaGFuaXNtIGlnbm9yZWQgdGhlIGBzd2FwcGluZXNzYCBzZXR0aW5nIGFuZCB1c2VkIHRoZSBnbG9iYWwgYHZtX3N3YXBwaW5lc3NgLiBUaGlzIHBhdGNoIG5vdyBjb3JyZWN0bHkgcmVzcGVjdHMgdGhlIGBzd2FwcGluZXNzYCBwYXJhbWV0ZXIgcHJvdmlkZWQgdmlhIHRoZSB1c2VyIHdoZW4gYENPTkZJR19NRU1DR2AgaXMgZGlzYWJsZWQuIEhvd2V2ZXIsIGhlcmUncyB0aGUga2lja2VyOiB0aGlzIHNjZW5hcmlvIGlzIHVubGlrZWx5IHRvIGJlIHJlbGV2YW50IGJlY2F1c2Ugc3l6a2FsbGVyICpkZWZhdWx0cyogdG8gaGF2aW5nIGBDT05GSUdfTUVNQ0dgIGVuYWJsZWQsIGFzIHRoYXQgaXMgdGhlIHN0YW5kYXJkIGNhc2UuXG5cbkkgd2VudCBkaWdnaW5nIGZ1cnRoZXIsIGFuZCB0aGUgY29kZSBjaGFuZ2VzIGVzc2VudGlhbGx5IGludm9sdmUgdGhlIHJlbG9jYXRpb24gb2YgdGhlIGBtZW1jZy1cdTAwM2Vzd2FwcGluZXNzYCBpbml0aWFsaXphdGlvbiwgcGxhY2luZyBpdCB1bmRlciB0aGUgYCNpZmRlZiBDT05GSUdfTUVNQ0dfVjFgIGJsb2NrLiBUaGlzIG1vdmVzIHRoZSBgc3dhcHBpbmVzc2AgZmllbGQgZnJvbSBgc3RydWN0IG1lbV9jZ3JvdXBgIGlmIGBDT05GSUdfTUVNQ0dfVjFgIGlzIGRpc2FibGVkLiBUaGlzIGlzIHB1cmUgbWVtb3J5IGxheW91dCByZWZhY3RvcmluZzsgdGhlcmUgaXMgbm8gY2hhbmdlIGluIGJlaGF2aW9yIGlmIGBDT05GSUdfTUVNQ0dfVjFgIGlzIGRpc2FibGVkLlxuXG5XaGVuIGBDT05GSUdfTUVNQ0dgIGlzIGVuYWJsZWQsIHRoZSBjb2RlIHBhdGhzIGZvciBgc2Nfc3dhcHBpbmVzc2AgYW5kIGBtZW1fY2dyb3VwX3N3YXBwaW5lc3NgIHJlbWFpbiAqZnVuY3Rpb25hbGx5IGlkZW50aWNhbCogdG8gdGhlIHByZS1wYXRjaCB2ZXJzaW9ucy4gSSd2ZSByZS1leGFtaW5lZCB0aGUgY29uZGl0aW9uYWwgbG9naWMsIGFuZCB0aGVyZSBhcmUgbm8gbmV3IGNvZGVwYXRocyB3aGVuIGBDT05GSUdfTUVNQ0dgIGlzIGVuYWJsZWQsIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBgQ09ORklHX01FTUNHX1YxYCBpcyBlbmFibGVkIG9yIGRpc2FibGVkLiBUaGlzIG1lYW5zIHRoYXQgaWYgc3l6a2FsbGVyIGlzIHJ1bm5pbmcgd2l0aCBgQ09ORklHX01FTUNHPXlgLCBhcyBpdCBhbG1vc3QgY2VydGFpbmx5IGlzLCBmdXp6aW5nIHRoaXMgcGF0Y2ggd29uJ3QgdW5jb3ZlciBhbnkgbmV3IGJ1Z3MuIFRoZSBuZXcgY29kZSB3aWxsIGhhdmUgZXhhY3RseSB0aGUgc2FtZSBiZWhhdmlvciBhcyB0aGUgb2xkIGNvZGUuIFdlIHdvdWxkIG5lZWQgYENPTkZJR19NRU1DRz1uYCB0byBleGVyY2lzZSB0aGUgYnVnIGZpeC5cblxuSW4gYSBudXRzaGVsbDogdGhpcyBwYXRjaCBpcyBtYWlubHkgYWJvdXQgaGlkaW5nIGBzd2FwcGluZXNzYCB1bmRlciBhIGZlYXR1cmUgZmxhZyBhbmQgc2F2aW5nIGEgYml0IG9mIG1lbW9yeS4gVGhlIGZ1bmN0aW9uYWwgY2hhbmdlLCB0aGUgY2hhbmdlIG9mIGJlaGF2aW9yIHdoZW4gYENPTkZJR19NRU1DR2AgaXMgZGlzYWJsZWQsIGlzIGEgdmVyeSBtaW5vciBlZGdlIGNhc2UgdGhhdCdzIGhpZ2hseSB1bmxpa2VseSB0byBiZSByZWxldmFudCBpbiBhIHR5cGljYWwgc3l6a2FsbGVyIHRlc3RpbmcgZW52aXJvbm1lbnQuXG5cblRoZXJlZm9yZSwgZm9yIGZ1enppbmcgcHVycG9zZXMsIHRoaXMgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSB0ZXN0YWJsZSBmdW5jdGlvbmFsIGNoYW5nZXMgaWYgc3l6a2FsbGVyIGlzIHJ1bm5pbmcgd2l0aCBgQ09ORklHX01FTUNHPXlgLiBJdCdzIGEgY2xlYW51cCBhbmQgbWVtb3J5IG9wdGltaXphdGlvbiwgbm90IGEgYnVnIGZpeCBmb3IgdGhlIHN0YW5kYXJkIGNhc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4NjIxLCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjk2MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDA3OjAzOjQwLjEzMzY2MjYzWiIsIlNlcSI6NDgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDUxMDEwNTIyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNncm91cF9zdWJzeXNfb25fZGZsXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL2JmcS1pb3NjaGVkLmM9NjIzNz1zdGF0aWMgdm9pZCBiZnFfaW5zZXJ0X3JlcXVlc3Qoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgsIHN0cnVjdCByZXF1ZXN0ICpycSxcXG4tLVxcbmJsb2NrL2JmcS1pb3NjaGVkLmMtNjI0Ny0jaWZkZWYgQ09ORklHX0JGUV9HUk9VUF9JT1NDSEVEXFxuYmxvY2svYmZxLWlvc2NoZWQuYzo2MjQ4OlxcdGlmICghY2dyb3VwX3N1YnN5c19vbl9kZmwoaW9fY2dycF9zdWJzeXMpIFxcdTAwMjZcXHUwMDI2IHJxLVxcdTAwM2ViaW8pXFxuYmxvY2svYmZxLWlvc2NoZWQuYy02MjQ5LVxcdFxcdGJmcWdfc3RhdHNfdXBkYXRlX2xlZ2FjeV9pbyhxLCBycSk7XFxuLS1cXG5ibG9jay9ibGstY2dyb3VwLmM9MjE4Mj12b2lkIGJsa19jZ3JvdXBfYmlvX3N0YXJ0KHN0cnVjdCBiaW8gKmJpbylcXG4tLVxcbmJsb2NrL2Jsay1jZ3JvdXAuYy0yMTg4LVxcbmJsb2NrL2Jsay1jZ3JvdXAuYzoyMTg5OlxcdGlmICghY2dyb3VwX3N1YnN5c19vbl9kZmwoaW9fY2dycF9zdWJzeXMpKVxcbmJsb2NrL2Jsay1jZ3JvdXAuYy0yMTkwLVxcdFxcdHJldHVybjtcXG4tLVxcbmJsb2NrL2Jsay10aHJvdHRsZS5jPTg0PXN0YXRpYyB1aW50NjRfdCB0Z19icHNfbGltaXQoc3RydWN0IHRocm90bF9ncnAgKnRnLCBpbnQgcncpXFxuLS1cXG5ibG9jay9ibGstdGhyb3R0bGUuYy04Ny1cXG5ibG9jay9ibGstdGhyb3R0bGUuYzo4ODpcXHRpZiAoY2dyb3VwX3N1YnN5c19vbl9kZmwoaW9fY2dycF9zdWJzeXMpIFxcdTAwMjZcXHUwMDI2ICFibGtnLVxcdTAwM2VwYXJlbnQpXFxuYmxvY2svYmxrLXRocm90dGxlLmMtODktXFx0XFx0cmV0dXJuIFU2NF9NQVg7XFxuLS1cXG5ibG9jay9ibGstdGhyb3R0bGUuYz05ND1zdGF0aWMgdW5zaWduZWQgaW50IHRnX2lvcHNfbGltaXQoc3RydWN0IHRocm90bF9ncnAgKnRnLCBpbnQgcncpXFxuLS1cXG5ibG9jay9ibGstdGhyb3R0bGUuYy05Ny1cXG5ibG9jay9ibGstdGhyb3R0bGUuYzo5ODpcXHRpZiAoY2dyb3VwX3N1YnN5c19vbl9kZmwoaW9fY2dycF9zdWJzeXMpIFxcdTAwMjZcXHUwMDI2ICFibGtnLVxcdTAwM2VwYXJlbnQpXFxuYmxvY2svYmxrLXRocm90dGxlLmMtOTktXFx0XFx0cmV0dXJuIFVJTlRfTUFYO1xcbi0tXFxuYmxvY2svYmxrLXRocm90dGxlLmM9Mjk5PXN0YXRpYyB2b2lkIHRocm90bF9wZF9pbml0KHN0cnVjdCBibGtnX3BvbGljeV9kYXRhICpwZClcXG4tLVxcbmJsb2NrL2Jsay10aHJvdHRsZS5jLTMyMC1cXHRzcS1cXHUwMDNlcGFyZW50X3NxID0gXFx1MDAyNnRkLVxcdTAwM2VzZXJ2aWNlX3F1ZXVlO1xcbmJsb2NrL2Jsay10aHJvdHRsZS5jOjMyMTpcXHRpZiAoY2dyb3VwX3N1YnN5c19vbl9kZmwoaW9fY2dycF9zdWJzeXMpIFxcdTAwMjZcXHUwMDI2IGJsa2ctXFx1MDAzZXBhcmVudClcXG5ibG9jay9ibGstdGhyb3R0bGUuYy0zMjItXFx0XFx0c3EtXFx1MDAzZXBhcmVudF9zcSA9IFxcdTAwMjZibGtnX3RvX3RnKGJsa2ctXFx1MDAzZXBhcmVudCktXFx1MDAzZXNlcnZpY2VfcXVldWU7XFxuLS1cXG5ibG9jay9ibGstdGhyb3R0bGUuYz0xMjcwPXN0YXRpYyB2b2lkIHRnX2NvbmZfdXBkYXRlZChzdHJ1Y3QgdGhyb3RsX2dycCAqdGcsIGJvb2wgZ2xvYmFsKVxcbi0tXFxuYmxvY2svYmxrLXRocm90dGxlLmMtMTI5NC1cXHRcXHQvKiBpZ25vcmUgcm9vdC9zZWNvbmQgbGV2ZWwgKi9cXG5ibG9jay9ibGstdGhyb3R0bGUuYzoxMjk1OlxcdFxcdGlmICghY2dyb3VwX3N1YnN5c19vbl9kZmwoaW9fY2dycF9zdWJzeXMpIHx8ICFibGtnLVxcdTAwM2VwYXJlbnQgfHxcXG5ibG9jay9ibGstdGhyb3R0bGUuYy0xMjk2LVxcdFxcdCAgICAhYmxrZy1cXHUwMDNlcGFyZW50LVxcdTAwM2VwYXJlbnQpXFxuLS1cXG5ibG9jay9ibGstdGhyb3R0bGUuaD0xNjg9c3RhdGljIGlubGluZSBib29sIGJsa19zaG91bGRfdGhyb3RsKHN0cnVjdCBiaW8gKmJpbylcXG4tLVxcbmJsb2NrL2Jsay10aHJvdHRsZS5oLTE3Ni1cXHR0ZyA9IGJsa2dfdG9fdGcoYmlvLVxcdTAwM2ViaV9ibGtnKTtcXG5ibG9jay9ibGstdGhyb3R0bGUuaDoxNzc6XFx0aWYgKCFjZ3JvdXBfc3Vic3lzX29uX2RmbChpb19jZ3JwX3N1YnN5cykpIHtcXG5ibG9jay9ibGstdGhyb3R0bGUuaC0xNzgtXFx0XFx0aWYgKCFiaW9fZmxhZ2dlZChiaW8sIEJJT19DR1JPVVBfQUNDVCkpIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvYmFja2luZy1kZXYuaD0xNzE9c3RhdGljIGlubGluZSBib29sIGlub2RlX2Nnd2JfZW5hYmxlZChzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbi0tXFxuaW5jbHVkZS9saW51eC9iYWNraW5nLWRldi5oLTE3NC1cXG5pbmNsdWRlL2xpbnV4L2JhY2tpbmctZGV2Lmg6MTc1OlxcdHJldHVybiBjZ3JvdXBfc3Vic3lzX29uX2RmbChtZW1vcnlfY2dycF9zdWJzeXMpIFxcdTAwMjZcXHUwMDI2XFxuaW5jbHVkZS9saW51eC9iYWNraW5nLWRldi5oOjE3NjpcXHRcXHRjZ3JvdXBfc3Vic3lzX29uX2RmbChpb19jZ3JwX3N1YnN5cykgXFx1MDAyNlxcdTAwMjZcXG5pbmNsdWRlL2xpbnV4L2JhY2tpbmctZGV2LmgtMTc3LVxcdFxcdChiZGktXFx1MDAzZWNhcGFiaWxpdGllcyBcXHUwMDI2IEJESV9DQVBfV1JJVEVCQUNLKSBcXHUwMDI2XFx1MDAyNlxcbi0tXFxuaW5jbHVkZS9saW51eC9jZ3JvdXAuaD05MD1leHRlcm4gc3RydWN0IGJsb2NraW5nX25vdGlmaWVyX2hlYWQgY2dyb3VwX2xpZmV0aW1lX25vdGlmaWVyO1xcbi0tXFxuaW5jbHVkZS9saW51eC9jZ3JvdXAuaC0xMDktLyoqXFxuaW5jbHVkZS9saW51eC9jZ3JvdXAuaDoxMTA6ICogY2dyb3VwX3N1YnN5c19vbl9kZmwgLSBmYXN0IHRlc3Qgb24gd2hldGhlciBhIHN1YnN5cyBpcyBvbiBkZWZhdWx0IGhpZXJhcmNoeVxcbmluY2x1ZGUvbGludXgvY2dyb3VwLmgtMTExLSAqIEBzczogc3Vic3lzdGVtIGluIHF1ZXN0aW9uXFxuaW5jbHVkZS9saW51eC9jZ3JvdXAuaC0xMTItICovXFxuaW5jbHVkZS9saW51eC9jZ3JvdXAuaDoxMTM6I2RlZmluZSBjZ3JvdXBfc3Vic3lzX29uX2RmbChzcylcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuaW5jbHVkZS9saW51eC9jZ3JvdXAuaC0xMTQtXFx0c3RhdGljX2JyYW5jaF9saWtlbHkoXFx1MDAyNnNzICMjIF9vbl9kZmxfa2V5KVxcbi0tXFxuaW5jbHVkZS9uZXQvc29jay5oPTI3MDI9c3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfc2tfdW5kZXJfbWVtb3J5X3ByZXNzdXJlKGNvbnN0IHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbmluY2x1ZGUvbmV0L3NvY2suaC0yNzA2LSNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcXG5pbmNsdWRlL25ldC9zb2NrLmg6MjcwNzpcXHRpZiAoIWNncm91cF9zdWJzeXNfb25fZGZsKG1lbW9yeV9jZ3JwX3N1YnN5cykpXFxuaW5jbHVkZS9uZXQvc29jay5oLTI3MDgtXFx0XFx0cmV0dXJuICEhbWVtY2ctXFx1MDAzZXRjcG1lbV9wcmVzc3VyZTtcXG4tLVxcbmtlcm5lbC9jZ3JvdXAvY2dyb3VwLmM9MTQ5PXN0YXRpYyBjb25zdCBjaGFyICpjZ3JvdXBfc3Vic3lzX25hbWVbXSA9IHtcXG4tLVxcbmtlcm5lbC9jZ3JvdXAvY2dyb3VwLmMtMTUzLVxcbmtlcm5lbC9jZ3JvdXAvY2dyb3VwLmM6MTU0Oi8qIGFycmF5IG9mIHN0YXRpY19rZXlzIGZvciBjZ3JvdXBfc3Vic3lzX2VuYWJsZWQoKSBhbmQgY2dyb3VwX3N1YnN5c19vbl9kZmwoKSAqL1xcbmtlcm5lbC9jZ3JvdXAvY2dyb3VwLmMtMTU1LSNkZWZpbmUgU1VCU1lTKF94KVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4tLVxcbmtlcm5lbC9jZ3JvdXAvY2dyb3VwLmM9MTY0PXN0YXRpYyBzdHJ1Y3Qgc3RhdGljX2tleV90cnVlICpjZ3JvdXBfc3Vic3lzX2VuYWJsZWRfa2V5W10gPSB7XFxuLS1cXG5rZXJuZWwvY2dyb3VwL2Nncm91cC5jLTE2OS0jZGVmaW5lIFNVQlNZUyhfeCkgW194ICMjIF9jZ3JwX2lkXSA9IFxcdTAwMjZfeCAjIyBfY2dycF9zdWJzeXNfb25fZGZsX2tleSxcXG5rZXJuZWwvY2dyb3VwL2Nncm91cC5jOjE3MDpzdGF0aWMgc3RydWN0IHN0YXRpY19rZXlfdHJ1ZSAqY2dyb3VwX3N1YnN5c19vbl9kZmxfa2V5W10gPSB7XFxua2VybmVsL2Nncm91cC9jZ3JvdXAuYy0xNzEtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Nncm91cF9zdWJzeXMuaFxcdTAwM2VcXG4tLVxcbmtlcm5lbC9jZ3JvdXAvY2dyb3VwLmM9MTgzNj1pbnQgcmViaW5kX3N1YnN5c3RlbXMoc3RydWN0IGNncm91cF9yb290ICpkc3Rfcm9vdCwgdTMyIHNzX21hc2spXFxuLS1cXG5rZXJuZWwvY2dyb3VwL2Nncm91cC5jLTE5MzQtXFx0XFx0aWYgKGRzdF9yb290ID09IFxcdTAwMjZjZ3JwX2RmbF9yb290KSB7XFxua2VybmVsL2Nncm91cC9jZ3JvdXAuYzoxOTM1OlxcdFxcdFxcdHN0YXRpY19icmFuY2hfZW5hYmxlKGNncm91cF9zdWJzeXNfb25fZGZsX2tleVtzc2lkXSk7XFxua2VybmVsL2Nncm91cC9jZ3JvdXAuYy0xOTM2LVxcdFxcdH0gZWxzZSB7XFxua2VybmVsL2Nncm91cC9jZ3JvdXAuYy0xOTM3LVxcdFxcdFxcdGRjZ3JwLVxcdTAwM2VzdWJ0cmVlX2NvbnRyb2wgfD0gMSBcXHUwMDNjXFx1MDAzYyBzc2lkO1xcbmtlcm5lbC9jZ3JvdXAvY2dyb3VwLmM6MTkzODpcXHRcXHRcXHRzdGF0aWNfYnJhbmNoX2Rpc2FibGUoY2dyb3VwX3N1YnN5c19vbl9kZmxfa2V5W3NzaWRdKTtcXG5rZXJuZWwvY2dyb3VwL2Nncm91cC5jLTE5MzktXFx0XFx0fVxcbi0tXFxua2VybmVsL2Nncm91cC9jcHVzZXQtdjEuYz0yMTI9dm9pZCBjcHVzZXQxX3VwZGF0ZV90YXNrX3NwcmVhZF9mbGFncyhzdHJ1Y3QgY3B1c2V0ICpjcyxcXG4tLVxcbmtlcm5lbC9jZ3JvdXAvY3B1c2V0LXYxLmMtMjE0LXtcXG5rZXJuZWwvY2dyb3VwL2NwdXNldC12MS5jOjIxNTpcXHRpZiAoY2dyb3VwX3N1YnN5c19vbl9kZmwoY3B1c2V0X2NncnBfc3Vic3lzKSlcXG5rZXJuZWwvY2dyb3VwL2NwdXNldC12MS5jLTIxNi1cXHRcXHRyZXR1cm47XFxuLS1cXG5rZXJuZWwvY2dyb3VwL2NwdXNldC5jPTM5MD1zdGF0aWMgaW5saW5lIGJvb2wgY3B1c2V0X3YyKHZvaWQpXFxuLS1cXG5rZXJuZWwvY2dyb3VwL2NwdXNldC5jLTM5Mi1cXHRyZXR1cm4gIUlTX0VOQUJMRUQoQ09ORklHX0NQVVNFVFNfVjEpIHx8XFxua2VybmVsL2Nncm91cC9jcHVzZXQuYzozOTM6XFx0XFx0Y2dyb3VwX3N1YnN5c19vbl9kZmwoY3B1c2V0X2NncnBfc3Vic3lzKTtcXG5rZXJuZWwvY2dyb3VwL2NwdXNldC5jLTM5NC19XFxuLS1cXG5rZXJuZWwvY2dyb3VwL3BpZHMuYz0yNDM9c3RhdGljIHZvaWQgcGlkc19ldmVudChzdHJ1Y3QgcGlkc19jZ3JvdXAgKnBpZHNfZm9ya2luZyxcXG4tLVxcbmtlcm5lbC9jZ3JvdXAvcGlkcy5jLTI1My1cXHR9XFxua2VybmVsL2Nncm91cC9waWRzLmM6MjU0OlxcdGlmICghY2dyb3VwX3N1YnN5c19vbl9kZmwocGlkc19jZ3JwX3N1YnN5cykgfHxcXG5rZXJuZWwvY2dyb3VwL3BpZHMuYy0yNTUtXFx0ICAgIGNncnBfZGZsX3Jvb3QuZmxhZ3MgXFx1MDAyNiBDR1JQX1JPT1RfUElEU19MT0NBTF9FVkVOVFMpIHtcXG4tLVxcbmtlcm5lbC9jZ3JvdXAvcGlkcy5jPTM2MT1zdGF0aWMgaW50IF9fcGlkc19ldmVudHNfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNmLCBib29sIGxvY2FsKVxcbi0tXFxua2VybmVsL2Nncm91cC9waWRzLmMtMzY2LVxcbmtlcm5lbC9jZ3JvdXAvcGlkcy5jOjM2NzpcXHRpZiAoIWNncm91cF9zdWJzeXNfb25fZGZsKHBpZHNfY2dycF9zdWJzeXMpIHx8XFxua2VybmVsL2Nncm91cC9waWRzLmMtMzY4LVxcdCAgICBjZ3JwX2RmbF9yb290LmZsYWdzIFxcdTAwMjYgQ0dSUF9ST09UX1BJRFNfTE9DQUxfRVZFTlRTKSB7XFxuLS1cXG5rZXJuZWwvc2NoZWQvY29yZS5jPTk5NDc9c3RhdGljIGludCB0Z19jZnNfc2NoZWR1bGFibGVfZG93bihzdHJ1Y3QgdGFza19ncm91cCAqdGcsIHZvaWQgKmRhdGEpXFxuLS1cXG5rZXJuZWwvc2NoZWQvY29yZS5jLTk5NjctXFx0XFx0ICovXFxua2VybmVsL3NjaGVkL2NvcmUuYzo5OTY4OlxcdFxcdGlmIChjZ3JvdXBfc3Vic3lzX29uX2RmbChjcHVfY2dycF9zdWJzeXMpKSB7XFxua2VybmVsL3NjaGVkL2NvcmUuYy05OTY5LVxcdFxcdFxcdGlmIChxdW90YSA9PSBSVU5USU1FX0lORilcXG4tLVxcbm1tL2h1Z2V0bGJfY2dyb3VwLmM9OTE9c3RhdGljIHZvaWQgaHVnZXRsYl9jZ3JvdXBfaW5pdChzdHJ1Y3QgaHVnZXRsYl9jZ3JvdXAgKmhfY2dyb3VwLFxcbi0tXFxubW0vaHVnZXRsYl9jZ3JvdXAuYy0xMTItXFxubW0vaHVnZXRsYl9jZ3JvdXAuYzoxMTM6XFx0XFx0aWYgKCFjZ3JvdXBfc3Vic3lzX29uX2RmbChodWdldGxiX2NncnBfc3Vic3lzKSkge1xcbm1tL2h1Z2V0bGJfY2dyb3VwLmMtMTE0LVxcdFxcdFxcdGZhdWx0LVxcdTAwM2V0cmFja19mYWlsY250ID0gdHJ1ZTtcXG4tLVxcbm1tL2h1Z2V0bGJfY2dyb3VwLmM9NDU2PXN0YXRpYyBpbnQgaHVnZXRsYl9jZ3JvdXBfcmVhZF9udW1hX3N0YXQoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKmR1bW15KVxcbi0tXFxubW0vaHVnZXRsYl9jZ3JvdXAuYy00NjAtXFx0aW50IGlkeCA9IE1FTUZJTEVfSURYKGNmdC1cXHUwMDNlcHJpdmF0ZSk7XFxubW0vaHVnZXRsYl9jZ3JvdXAuYzo0NjE6XFx0Ym9vbCBsZWdhY3kgPSAhY2dyb3VwX3N1YnN5c19vbl9kZmwoaHVnZXRsYl9jZ3JwX3N1YnN5cyk7XFxubW0vaHVnZXRsYl9jZ3JvdXAuYy00NjItXFx0c3RydWN0IGh1Z2V0bGJfY2dyb3VwICpoX2NnID0gaHVnZXRsYl9jZ3JvdXBfZnJvbV9jc3Moc2VxX2NzcyhzZXEpKTtcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuYz0yNTIyPXZvaWQgbWVtY2cxX2FjY291bnRfa21lbShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBucl9wYWdlcylcXG5tbS9tZW1jb250cm9sLXYxLmMtMjUyMy17XFxubW0vbWVtY29udHJvbC12MS5jOjI1MjQ6XFx0aWYgKCFjZ3JvdXBfc3Vic3lzX29uX2RmbChtZW1vcnlfY2dycF9zdWJzeXMpKSB7XFxubW0vbWVtY29udHJvbC12MS5jLTI1MjUtXFx0XFx0aWYgKG5yX3BhZ2VzIFxcdTAwM2UgMClcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuaD0zMT1zdGF0aWMgaW5saW5lIGJvb2wgZG9fbWVtc3dfYWNjb3VudCh2b2lkKVxcbm1tL21lbWNvbnRyb2wtdjEuaC0zMi17XFxubW0vbWVtY29udHJvbC12MS5oOjMzOlxcdHJldHVybiAhY2dyb3VwX3N1YnN5c19vbl9kZmwobWVtb3J5X2NncnBfc3Vic3lzKTtcXG5tbS9tZW1jb250cm9sLXYxLmgtMzQtfVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTIzOD1zdGF0aWMgaW5saW5lIHZvaWQgcmVwYXJlbnRfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50KVxcbm1tL21lbWNvbnRyb2wuYy0yMzkte1xcbm1tL21lbWNvbnRyb2wuYzoyNDA6XFx0aWYgKGNncm91cF9zdWJzeXNfb25fZGZsKG1lbW9yeV9jZ3JwX3N1YnN5cykpXFxubW0vbWVtY29udHJvbC5jLTI0MS1cXHRcXHRyZXR1cm47XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MzM0PXN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpnZXRfbWVtX2Nncm91cF9jc3NfZnJvbV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTMzNy1cXG5tbS9tZW1jb250cm9sLmM6MzM4OlxcdGlmICghY2dyb3VwX3N1YnN5c19vbl9kZmwobWVtb3J5X2NncnBfc3Vic3lzKSlcXG5tbS9tZW1jb250cm9sLmMtMzM5LVxcdFxcdHJldHVybiBcXHUwMDI2cm9vdF9tZW1fY2dyb3VwLVxcdTAwM2Vjc3M7XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9ODE0PXN0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKmdldF9ub25fZHlpbmdfbWVtY2dfc3RhcnQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTgxNy1cXHQvKiBSZWJpbmRpbmcgY2FuIGNhdXNlIHRoaXMgdmFsdWUgdG8gYmUgY2hhbmdlZCBhdCBydW50aW1lICovXFxubW0vbWVtY29udHJvbC5jOjgxODpcXHRpZiAoY2dyb3VwX3N1YnN5c19vbl9kZmwobWVtb3J5X2NncnBfc3Vic3lzKSkge1xcbm1tL21lbWNvbnRyb2wuYy04MTktXFx0XFx0KnJjdV9sb2NrZWQgPSBmYWxzZTtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0xNzU3PXN0YXRpYyB2b2lkIG1lbW9yeV9zdGF0X2Zvcm1hdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBzZXFfYnVmICpzKVxcbm1tL21lbWNvbnRyb2wuYy0xNzU4LXtcXG5tbS9tZW1jb250cm9sLmM6MTc1OTpcXHRpZiAoY2dyb3VwX3N1YnN5c19vbl9kZmwobWVtb3J5X2NncnBfc3Vic3lzKSlcXG5tbS9tZW1jb250cm9sLmMtMTc2MC1cXHRcXHRtZW1jZ19zdGF0X2Zvcm1hdChtZW1jZywgcyk7XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MTc5Nz12b2lkIG1lbV9jZ3JvdXBfcHJpbnRfb29tX21lbWluZm8oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTE4MDUtXFxubW0vbWVtY29udHJvbC5jOjE4MDY6XFx0aWYgKGNncm91cF9zdWJzeXNfb25fZGZsKG1lbW9yeV9jZ3JwX3N1YnN5cykpXFxubW0vbWVtY29udHJvbC5jLTE4MDctXFx0XFx0bWVtb3J5X2ZhaWxjbnQgPSBhdG9taWNfbG9uZ19yZWFkKFxcdTAwMjZtZW1jZy1cXHUwMDNlbWVtb3J5X2V2ZW50c1tNRU1DR19NQVhdKTtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0xODEzLVxcdFxcdEsoKHU2NClSRUFEX09OQ0UobWVtY2ctXFx1MDAzZW1lbW9yeS5tYXgpKSwgbWVtb3J5X2ZhaWxjbnQpO1xcbm1tL21lbWNvbnRyb2wuYzoxODE0OlxcdGlmIChjZ3JvdXBfc3Vic3lzX29uX2RmbChtZW1vcnlfY2dycF9zdWJzeXMpKVxcbm1tL21lbWNvbnRyb2wuYy0xODE1LVxcdFxcdHByX2luZm8oXFxcInN3YXA6IHVzYWdlICVsbHVrQiwgbGltaXQgJWxsdWtCLCBmYWlsY250ICVsdVxcXFxuXFxcIixcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0xODYwPXZvaWQgX19tZW1jZ19tZW1vcnlfZXZlbnQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTE4ODEtXFxubW0vbWVtY29udHJvbC5jOjE4ODI6XFx0XFx0aWYgKCFjZ3JvdXBfc3Vic3lzX29uX2RmbChtZW1vcnlfY2dycF9zdWJzeXMpKVxcbm1tL21lbWNvbnRyb2wuYy0xODgzLVxcdFxcdFxcdGJyZWFrO1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTE5NTM9c3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfZ2V0X29vbV9ncm91cChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnZpY3RpbSxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0xOTU4LVxcbm1tL21lbWNvbnRyb2wuYzoxOTU5OlxcdGlmICghY2dyb3VwX3N1YnN5c19vbl9kZmwobWVtb3J5X2NncnBfc3Vic3lzKSlcXG5tbS9tZW1jb250cm9sLmMtMTk2MC1cXHRcXHRyZXR1cm4gTlVMTDtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz00MTYwPW1lbV9jZ3JvdXBfY3NzX2FsbG9jKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpwYXJlbnRfY3NzKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTQxNjMtXFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCAqb2xkX21lbWNnO1xcbm1tL21lbWNvbnRyb2wuYzo0MTY0OlxcdGJvb2wgbWVtY2dfb25fZGZsID0gY2dyb3VwX3N1YnN5c19vbl9kZmwobWVtb3J5X2NncnBfc3Vic3lzKTtcXG5tbS9tZW1jb250cm9sLmMtNDE2NS1cXG4tLVxcbm1tL21lbWNvbnRyb2wuYz00MzIzPXN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfY3NzX2ZyZWUoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy00MzMxLSNlbmRpZlxcbm1tL21lbWNvbnRyb2wuYzo0MzMyOlxcdGlmIChjZ3JvdXBfc3Vic3lzX29uX2RmbChtZW1vcnlfY2dycF9zdWJzeXMpIFxcdTAwMjZcXHUwMDI2ICFjZ3JvdXBfbWVtb3J5X25vc29ja2V0KVxcbm1tL21lbWNvbnRyb2wuYy00MzMzLVxcdFxcdHN0YXRpY19icmFuY2hfZGVjKFxcdTAwMjZtZW1jZ19zb2NrZXRzX2VuYWJsZWRfa2V5KTtcXG5tbS9tZW1jb250cm9sLmMtNDMzNC1cXG5tbS9tZW1jb250cm9sLmM6NDMzNTpcXHRpZiAoIWNncm91cF9zdWJzeXNfb25fZGZsKG1lbW9yeV9jZ3JwX3N1YnN5cykgXFx1MDAyNlxcdTAwMjYgbWVtY2cxX3RjcG1lbV9hY3RpdmUobWVtY2cpKVxcbm1tL21lbWNvbnRyb2wuYy00MzM2LVxcdFxcdHN0YXRpY19icmFuY2hfZGVjKFxcdTAwMjZtZW1jZ19zb2NrZXRzX2VuYWJsZWRfa2V5KTtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01MTc5PWludCBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKHN0cnVjdCBmb2xpbyAqZm9saW8sIGdmcF90IGdmcClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01MTg5LVxcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkgfHwgIW1lbWNnX2FjY291bnRzX2h1Z2V0bGIoKSB8fFxcbm1tL21lbWNvbnRyb2wuYzo1MTkwOlxcdFxcdCFtZW1jZyB8fCAhY2dyb3VwX3N1YnN5c19vbl9kZmwobWVtb3J5X2NncnBfc3Vic3lzKSlcXG5tbS9tZW1jb250cm9sLmMtNTE5MS1cXHRcXHRnb3RvIG91dDtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01NDMzPXZvaWQgbWVtX2Nncm91cF9za19hbGxvYyhzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTQ0Ny1cXHRcXHRnb3RvIG91dDtcXG5tbS9tZW1jb250cm9sLmM6NTQ0ODpcXHRpZiAoIWNncm91cF9zdWJzeXNfb25fZGZsKG1lbW9yeV9jZ3JwX3N1YnN5cykgXFx1MDAyNlxcdTAwMjYgIW1lbWNnMV90Y3BtZW1fYWN0aXZlKG1lbWNnKSlcXG5tbS9tZW1jb250cm9sLmMtNTQ0OS1cXHRcXHRnb3RvIG91dDtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01NDg5PWJvb2wgbWVtX2Nncm91cF9za19jaGFyZ2UoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgbnJfcGFnZXMsXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTQ5My1cXG5tbS9tZW1jb250cm9sLmM6NTQ5NDpcXHRpZiAoIWNncm91cF9zdWJzeXNfb25fZGZsKG1lbW9yeV9jZ3JwX3N1YnN5cykpXFxubW0vbWVtY29udHJvbC5jLTU0OTUtXFx0XFx0cmV0dXJuIG1lbWNnMV9jaGFyZ2Vfc2ttZW0obWVtY2csIG5yX3BhZ2VzLCBnZnBfbWFzayk7XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NTUxMD12b2lkIG1lbV9jZ3JvdXBfc2tfdW5jaGFyZ2UoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgbnJfcGFnZXMpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTUxMy1cXG5tbS9tZW1jb250cm9sLmM6NTUxNDpcXHRpZiAoIWNncm91cF9zdWJzeXNfb25fZGZsKG1lbW9yeV9jZ3JwX3N1YnN5cykpIHtcXG5tbS9tZW1jb250cm9sLmMtNTUxNS1cXHRcXHRtZW1jZzFfdW5jaGFyZ2Vfc2ttZW0obWVtY2csIG5yX3BhZ2VzKTtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01ODU1PWJvb2wgb2JqX2Nncm91cF9tYXlfenN3YXAoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTU4NTktXFxubW0vbWVtY29udHJvbC5jOjU4NjA6XFx0aWYgKCFjZ3JvdXBfc3Vic3lzX29uX2RmbChtZW1vcnlfY2dycF9zdWJzeXMpKVxcbm1tL21lbWNvbnRyb2wuYy01ODYxLVxcdFxcdHJldHVybiB0cnVlO1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTU4OTY9dm9pZCBvYmpfY2dyb3VwX2NoYXJnZV96c3dhcChzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csIHNpemVfdCBzaXplKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTU4OTktXFxubW0vbWVtY29udHJvbC5jOjU5MDA6XFx0aWYgKCFjZ3JvdXBfc3Vic3lzX29uX2RmbChtZW1vcnlfY2dycF9zdWJzeXMpKVxcbm1tL21lbWNvbnRyb2wuYy01OTAxLVxcdFxcdHJldHVybjtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01OTI4PXZvaWQgb2JqX2Nncm91cF91bmNoYXJnZV96c3dhcChzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csIHNpemVfdCBzaXplKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTU5MzEtXFxubW0vbWVtY29udHJvbC5jOjU5MzI6XFx0aWYgKCFjZ3JvdXBfc3Vic3lzX29uX2RmbChtZW1vcnlfY2dycF9zdWJzeXMpKVxcbm1tL21lbWNvbnRyb2wuYy01OTMzLVxcdFxcdHJldHVybjtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz02MDc1PXZvaWQgbWVtX2Nncm91cF9zaG93X3Byb3RlY3RlZF9tZW1vcnkoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbm1tL21lbWNvbnRyb2wuYy02MDc2LXtcXG5tbS9tZW1jb250cm9sLmM6NjA3NzpcXHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpIHx8ICFjZ3JvdXBfc3Vic3lzX29uX2RmbChtZW1vcnlfY2dycF9zdWJzeXMpKVxcbm1tL21lbWNvbnRyb2wuYy02MDc4LVxcdFxcdHJldHVybjtcXG4tLVxcbm1tL3N3YXAuaD0xMDU9c3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF9zd2FwcGluZXNzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4tLVxcbm1tL3N3YXAuaC0xMDctI2lmZGVmIENPTkZJR19NRU1DR19WMVxcbm1tL3N3YXAuaDoxMDg6XFx0aWYgKCFjZ3JvdXBfc3Vic3lzX29uX2RmbChtZW1vcnlfY2dycF9zdWJzeXMpIFxcdTAwMjZcXHUwMDI2XFxubW0vc3dhcC5oLTEwOS1cXHQgICAgIW1lbV9jZ3JvdXBfZGlzYWJsZWQoKSBcXHUwMDI2XFx1MDAyNiAhbWVtX2Nncm91cF9pc19yb290KG1lbWNnKSlcXG4tLVxcbm1tL3ZtcHJlc3N1cmUuYz0xMDk9dm9pZCB2bXByZXNzdXJlKGdmcF90IGdmcCwgaW50IG9yZGVyLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGJvb2wgdHJlZSxcXG4tLVxcbm1tL3ZtcHJlc3N1cmUuYy0xMjItXFx0ICovXFxubW0vdm1wcmVzc3VyZS5jOjEyMzpcXHRpZiAoY2dyb3VwX3N1YnN5c19vbl9kZmwobWVtb3J5X2NncnBfc3Vic3lzKSA9PSB0cmVlKVxcbm1tL3ZtcHJlc3N1cmUuYy0xMjQtXFx0XFx0cmV0dXJuO1xcbi0tXFxubW0vdm1zY2FuLmM9MjM5PXN0YXRpYyBib29sIHdyaXRlYmFja190aHJvdHRsaW5nX3NhbmUoc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy0yNDMtI2lmZGVmIENPTkZJR19DR1JPVVBfV1JJVEVCQUNLXFxubW0vdm1zY2FuLmM6MjQ0OlxcdGlmIChjZ3JvdXBfc3Vic3lzX29uX2RmbChtZW1vcnlfY2dycF9zdWJzeXMpKVxcbm1tL3Ztc2Nhbi5jLTI0NS1cXHRcXHRyZXR1cm4gdHJ1ZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMDc6MDM6NDQuNTg0Njc5MDUyWiIsIlNlcSI6NDksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE0MTgwNTUyMTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIHRoZSBTd2FwcGluZXNzIFBhdGNoKipcblxuT2theSwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC4gYGNncm91cF9zdWJzeXNfb25fZGZsYCBpcyBhIGtleSBpbmRpY2F0b3IgaGVyZSwgY2hlY2tpbmcgYSBzdGF0aWMga2V5LiBJZiBgQ09ORklHX01FTUNHYCBpcyBlbmFibGVkLCB0aGVuIGBtZW1vcnlfY2dycF9zdWJzeXNgIGlzIGRlZmluZWQuIEFuZCBzaW5jZSBgQ09ORklHX01FTUNHX1YxYCBpcyBkaXNhYmxlZCwgdjEgbWVtb3J5IGNncm91cHMgYXJlIGVmZmVjdGl2ZWx5IG9mZi4gVGhhdCBtZWFucyBtZW1vcnkgY2dyb3VwcyBvbmx5IGV4aXN0IG9uIHRoZSBkZWZhdWx0IGhpZXJhcmNoeSwgd2hpY2ggaXMgY2dyb3VwIHYyLiBUaGVyZWZvcmUsIHRoZSBgY2dyb3VwX3N1YnN5c19vbl9kZmwobWVtb3J5X2NncnBfc3Vic3lzKWAgY2hlY2sgd2lsbCBiZSB0cnVlLiBTbyBgbWVtX2Nncm91cF9zd2FwcGluZXNzYCB3aWxsIHJldHVybiBgdm1fc3dhcHBpbmVzc2AsIGJvdGggYmVmb3JlIGFuZCBhZnRlciB0aGUgcGF0Y2ggZm9yIHRoZSB0eXBpY2FsIGNhc2Ugd2hlcmUgYENPTkZJR19NRU1DRz15YC4gVGh1cywgbm8gY2hhbmdlIGluIGJlaGF2aW9yIHRoZXJlLlxuXG5UaGUgb25seSByZWFsIGNoYW5nZSBJIGNhbiBzZWUgaXMgd2hlbiBgQ09ORklHX01FTUNHPW5gLiBJbiB0aGF0IHNwZWNpZmljIGNhc2UsIGBzY19zd2FwcGluZXNzYCBub3cgYWN0dWFsbHkgcmVzcGVjdHMgYHNjLVx1MDAzZXByb2FjdGl2ZV9zd2FwcGluZXNzYC4gVGhhdCdzIGEgdmVyeSBtaW5vciBjaGFuZ2UsIGFuZCBob25lc3RseSwgd2UgZG9uJ3QgdXN1YWxseSBmdXp6IHdpdGggYENPTkZJR19NRU1DRz1uYC4gSXQncyBub3QgYSBzdGFuZGFyZCBjb25maWd1cmF0aW9uIGZvciBTeXprYWxsZXIuXG5cbkhtbSwgSSBzaG91bGQgZG91YmxlLWNoZWNrIHRvIG1ha2Ugc3VyZSBgc2MtXHUwMDNlcHJvYWN0aXZlX3N3YXBwaW5lc3NgIGlzbid0IHVzZWQgZWxzZXdoZXJlLiBBaCwgeWVzLCBsb29raW5nIGF0IGBtbS92bXNjYW4uY2AsIHRoZSBuZXcgYHNjX3N3YXBwaW5lc3NgIGZ1bmN0aW9uIGlzOlxuXG5gYGBjXG5zdGF0aWMgaW50IHNjX3N3YXBwaW5lc3Moc3RydWN0IHNjYW5fY29udHJvbCAqc2MsIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbntcblx0aWYgKHNjLVx1MDAzZXByb2FjdGl2ZSBcdTAwMjZcdTAwMjYgc2MtXHUwMDNlcHJvYWN0aXZlX3N3YXBwaW5lc3MpXG5cdFx0cmV0dXJuICpzYy1cdTAwM2Vwcm9hY3RpdmVfc3dhcHBpbmVzcztcblx0cmV0dXJuIG1lbV9jZ3JvdXBfc3dhcHBpbmVzcyhtZW1jZyk7XG59XG5gYGBcblxuQmVmb3JlIHRoZSBwYXRjaCwgaWYgYENPTkZJR19NRU1DR2Agd2FzIGRpc2FibGVkLCBgc2Nfc3dhcHBpbmVzc2Agd2FzOlxuXG5gYGBjXG5zdGF0aWMgaW50IHNjX3N3YXBwaW5lc3Moc3RydWN0IHNjYW5fY29udHJvbCAqc2MsIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbntcblx0cmV0dXJuIFJFQURfT05DRSh2bV9zd2FwcGluZXNzKTtcbn1cbmBgYFxuXG5Pa2F5LCBzbyB0aGUgY2hhbmdlIGlzIGlzb2xhdGVkIHRvIHRoaXMgb25lIG1pbm9yIHVzZSBjYXNlLiBOb3csIGdpdmVuIHRoZSBwcm9tcHQncyBjcml0ZXJpYTogXCJSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zLi4uIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMuLi4gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93Li4uIElmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2ggdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXCJcblxuV2hpbGUgaXQgKmRvZXMqIG1vZGlmeSBjb3JlIGtlcm5lbCBsb2dpYyBpbiBgdm1zY2FuLmNgLCB0aGUgY29yZSBsb2dpYyBjaGFuZ2VzIGFyZSBlZmZlY3RpdmVseSBhIHJlZmFjdG9yaW5nIGZvciB0aGUgZGVmYXVsdCBgQ09ORklHX01FTUNHPXlgICh0aGUgbm9ybWFsIGNvbmZpZ3VyYXRpb24gdGhhdCB3ZSBmdXp6KS4gVGhlIGZ1bmN0aW9uYWwgY2hhbmdlIGZvciBgQ09ORklHX01FTUNHPW5gIGlzIHNvIG1pbmltYWwgYW5kIG9ic2N1cmUgdGhhdCBpdCBkb2Vzbid0IHdhcnJhbnQgZm9jdXNlZCBmdXp6aW5nIGVmZm9ydHMuXG5cbkknbSBjb21mb3J0YWJsZSB3aXRoIHRoZSBgV29ydGhGdXp6aW5nPWZhbHNlYC4gVGhlIHJlYXNvbmluZyBpcyB0aGF0IHRoZSBwYXRjaCBpcyBhIHJlZmFjdG9yaW5nIHRvIGVzc2VudGlhbGx5IGhpZGUgdGhlIGBzd2FwcGluZXNzYCBmaWVsZCBpbiBgc3RydWN0IG1lbV9jZ3JvdXBgIHVuZGVyIGBDT05GSUdfTUVNQ0dfVjFgLCB3aGljaCBzYXZlcyBtZW1vcnkgd2hlbiBjZ3JvdXAgdjEgaXMgZGlzYWJsZWQuIEZvciB0aGUgc3RhbmRhcmQgYENPTkZJR19NRU1DRz15YCBjb25maWd1cmF0aW9uLCB0aGVyZSBpcyB6ZXJvIGNoYW5nZSBpbiBiZWhhdmlvci4gVGhlICpvbmx5KiBmdW5jdGlvbmFsIGNoYW5nZSBpcyBhIHNtYWxsIGZpeCBmb3IgYENPTkZJR19NRU1DRz1uYCwgc28gdGhhdCBwcm9hY3RpdmUgbm9kZSByZWNsYWltIHZpYSBzeXNmcyBub3cgcmVzcGVjdHMgdGhlIHVzZXItcHJvdmlkZWQgYHN3YXBwaW5lc3NgIHBhcmFtZXRlci4gVGhpcyBpcyBhIHZlcnkgbWlub3IgZWRnZSBjYXNlIGluIGEgbm9uLWRlZmF1bHQgY29uZmlndXJhdGlvbiBhbmQgZG9lc24ndCB3YXJyYW50IGZvY3VzZWQgZnV6emluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzc2NzUsIk91dHB1dFRva2VucyI6MTU5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODMwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDA3OjAzOjU4Ljc2NTIzNjY3MloiLCJTZXEiOjUwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwMjMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGlzIHByaW1hcmlseSBhIHJlZmFjdG9yaW5nIHRvIGhpZGUgdGhlIGBzd2FwcGluZXNzYCBmaWVsZCBpbiBgc3RydWN0IG1lbV9jZ3JvdXBgIHVuZGVyIGBDT05GSUdfTUVNQ0dfVjFgIHRvIHNhdmUgbWVtb3J5IHdoZW4gY2dyb3VwIHYxIGlzIGRpc2FibGVkLiBGb3IgdGhlIGRlZmF1bHQgYENPTkZJR19NRU1DRz15YCBjb25maWd1cmF0aW9uLCB0aGVyZSBpcyBubyBmdW5jdGlvbmFsIGNoYW5nZSBpbiBiZWhhdmlvci4gVGhlIG9ubHkgZnVuY3Rpb25hbCBjaGFuZ2UgaXMgYSBtaW5vciBmaXggZm9yIGBDT05GSUdfTUVNQ0c9bmAgd2hlcmUgcHJvYWN0aXZlIG5vZGUgcmVjbGFpbSB2aWEgc3lzZnMgbm93IHJlc3BlY3RzIHRoZSB1c2VyLXByb3ZpZGVkIGBzd2FwcGluZXNzYCBwYXJhbWV0ZXIgaW5zdGVhZCBvZiBpZ25vcmluZyBpdC4gVGhpcyBpcyBhIHZlcnkgbWlub3IgZWRnZSBjYXNlIGluIGEgbm9uLWRlZmF1bHQgY29uZmlnIGFuZCBkb2VzIG5vdCB3YXJyYW50IGZvY3VzZWQgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGlzIHByaW1hcmlseSBhIHJlZmFjdG9yaW5nIHRvIGhpZGUgdGhlIGBzd2FwcGluZXNzYCBmaWVsZCBpbiBgc3RydWN0IG1lbV9jZ3JvdXBgIHVuZGVyIGBDT05GSUdfTUVNQ0dfVjFgIHRvIHNhdmUgbWVtb3J5IHdoZW4gY2dyb3VwIHYxIGlzIGRpc2FibGVkLiBGb3IgdGhlIGRlZmF1bHQgYENPTkZJR19NRU1DRz15YCBjb25maWd1cmF0aW9uLCB0aGVyZSBpcyBubyBmdW5jdGlvbmFsIGNoYW5nZSBpbiBiZWhhdmlvci4gVGhlIG9ubHkgZnVuY3Rpb25hbCBjaGFuZ2UgaXMgYSBtaW5vciBmaXggZm9yIGBDT05GSUdfTUVNQ0c9bmAgd2hlcmUgcHJvYWN0aXZlIG5vZGUgcmVjbGFpbSB2aWEgc3lzZnMgbm93IHJlc3BlY3RzIHRoZSB1c2VyLXByb3ZpZGVkIGBzd2FwcGluZXNzYCBwYXJhbWV0ZXIgaW5zdGVhZCBvZiBpZ25vcmluZyBpdC4gVGhpcyBpcyBhIHZlcnkgbWlub3IgZWRnZSBjYXNlIGluIGEgbm9uLWRlZmF1bHQgY29uZmlnIGFuZCBkb2VzIG5vdCB3YXJyYW50IGZvY3VzZWQgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowbtrcb[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-24 06:33:59 +0000 UTC FinishedAt: 2026-07-24 07:04:00 +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+CgkJCTx0ZD4yMDI2LzA3LzI0IDA3OjAwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGlzIHByaW1hcmlseSBhIHJlZmFjdG9yaW5nIHRvIGhpZGUgdGhlIGBzd2FwcGluZXNzYCBmaWVsZCBpbiBgc3RydWN0IG1lbV9jZ3JvdXBgIHVuZGVyIGBDT05GSUdfTUVNQ0dfVjFgIHRvIHNhdmUgbWVtb3J5IHdoZW4gY2dyb3VwIHYxIGlzIGRpc2FibGVkLiBGb3IgdGhlIGRlZmF1bHQgYENPTkZJR19NRU1DRz15YCBjb25maWd1cmF0aW9uLCB0aGVyZSBpcyBubyBmdW5jdGlvbmFsIGNoYW5nZSBpbiBiZWhhdmlvci4gVGhlIG9ubHkgZnVuY3Rpb25hbCBjaGFuZ2UgaXMgYSBtaW5vciBmaXggZm9yIGBDT05GSUdfTUVNQ0c9bmAgd2hlcmUgcHJvYWN0aXZlIG5vZGUgcmVjbGFpbSB2aWEgc3lzZnMgbm93IHJlc3BlY3RzIHRoZSB1c2VyLXByb3ZpZGVkIGBzd2FwcGluZXNzYCBwYXJhbWV0ZXIgaW5zdGVhZCBvZiBpZ25vcmluZyBpdC4gVGhpcyBpcyBhIHZlcnkgbWlub3IgZWRnZSBjYXNlIGluIGEgbm9uLWRlZmF1bHQgY29uZmlnIGFuZCBkb2VzIG5vdCB3YXJyYW50IGZvY3VzZWQgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMDc6MDA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA2MjM0MTI1MDgyYmE1NjRiOGVjZDVkNGRhYjg5ODIyOTdlNjU3ZmI2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdWwgMjQgMDc6MDA6MjAgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmggYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxuaW5kZXggOTU3MjYwNjc3Njc4MTUuLmU3YTc5NGRmYjQwZTQ5IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXG5AQCAtMjM5LDggJiM0MzsyMzksNiBAQCBzdHJ1Y3QgbWVtX2Nncm91cCB7XG4gXHQgKi9cbiBcdGJvb2wgb29tX2dyb3VwO1xuIFxuLVx0aW50IHN3YXBwaW5lc3M7XG4tXG4gXHQvKiBtZW1vcnkuZXZlbnRzIGFuZCBtZW1vcnkuZXZlbnRzLmxvY2FsICovXG4gXHRzdHJ1Y3QgY2dyb3VwX2ZpbGUgZXZlbnRzX2ZpbGU7XG4gXHRzdHJ1Y3QgY2dyb3VwX2ZpbGUgZXZlbnRzX2xvY2FsX2ZpbGU7XG5AQCAtMzE4LDYgJiM0MzszMTYsOCBAQCBzdHJ1Y3QgbWVtX2Nncm91cCB7XG4gXHQvKiBMaXN0IG9mIGV2ZW50cyB3aGljaCB1c2Vyc3BhY2Ugd2FudCB0byByZWNlaXZlICovXG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIGV2ZW50X2xpc3Q7XG4gXHRzcGlubG9ja190IGV2ZW50X2xpc3RfbG9jaztcbiYjNDM7XG4mIzQzO1x0aW50IHN3YXBwaW5lc3M7XG4gI2VuZGlmIC8qIENPTkZJR19NRU1DR19WMSAqL1xuIFxuIFx0c3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKm5vZGVpbmZvW107XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zd2FwLmggYi9pbmNsdWRlL2xpbnV4L3N3YXAuaFxuaW5kZXggMDU0NGIyZWM0YzU2NWIuLjQ1ZjMwMWQ3M2UyYWVlIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9zd2FwLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvc3dhcC5oXG5AQCAtMzA5LDcgJiM0MzszMDksNiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbHJ1X2NhY2hlX2Rpc2FibGVkKHZvaWQpXG4gfVxuIFxuIGV4dGVybiB1bnNpZ25lZCBsb25nIHNocmlua19hbGxfbWVtb3J5KHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpO1xuLWV4dGVybiBpbnQgdm1fc3dhcHBpbmVzcztcbiBsb25nIHJlbW92ZV9tYXBwaW5nKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbiBcbiAjaWYgZGVmaW5lZChDT05GSUdfU1lTRlMpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19OVU1BKVxuQEAgLTQ3MywyNSAmIzQzOzQ3Miw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IGFkZF9zd2FwX2V4dGVudChzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2lzLFxuIH1cbiAjZW5kaWYgLyogQ09ORklHX1NXQVAgKi9cbiAjaWZkZWYgQ09ORklHX01FTUNHXG4tc3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF9zd2FwcGluZXNzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbi17XG4tXHQvKiBDZ3JvdXAyIGRvZXNuJiMzOTt0IGhhdmUgcGVyLWNncm91cCBzd2FwcGluZXNzICovXG4tXHRpZiAoY2dyb3VwX3N1YnN5c19vbl9kZmwobWVtb3J5X2NncnBfc3Vic3lzKSlcbi1cdFx0cmV0dXJuIFJFQURfT05DRSh2bV9zd2FwcGluZXNzKTtcbi1cbi1cdC8qIHJvb3QgPyAqL1xuLVx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSB8fCBtZW1fY2dyb3VwX2lzX3Jvb3QobWVtY2cpKVxuLVx0XHRyZXR1cm4gUkVBRF9PTkNFKHZtX3N3YXBwaW5lc3MpO1xuLVxuLVx0cmV0dXJuIFJFQURfT05DRShtZW1jZy1cdTAwM2Vzd2FwcGluZXNzKTtcbi19XG4tXG4gdm9pZCBscnVfcmVwYXJlbnRfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LCBpbnQgbmlkKTtcbi0jZWxzZVxuLXN0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfc3dhcHBpbmVzcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4te1xuLVx0cmV0dXJuIFJFQURfT05DRSh2bV9zd2FwcGluZXNzKTtcbi19XG4gI2VuZGlmXG4gXG4gI2lmIGRlZmluZWQoQ09ORklHX1NXQVApIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19NRU1DRykgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX0JMS19DR1JPVVApXG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jXG5pbmRleCA4MzE5YWQ4YzVjMjNhYy4uNjg2NGI3NjQ1NmZiM2UgMTAwNjQ0XG4tLS0gYS9tbS9tZW1jb250cm9sLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbWNvbnRyb2wuY1xuQEAgLTYzLDYgJiM0Mzs2Myw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQvaXNvbGF0aW9uLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rbWVtbGVhay5oXHUwMDNlXG4gI2luY2x1ZGUgXCYjMzQ7aW50ZXJuYWwuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtzd2FwLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtzd2FwX3RhYmxlLmhcJiMzNDtcbiAjaW5jbHVkZSBcdTAwM2NuZXQvc29jay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2lwLmhcdTAwM2VcbkBAIC00MTc2LDExICYjNDM7NDE3NywxMCBAQCBtZW1fY2dyb3VwX2Nzc19hbGxvYyhzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqcGFyZW50X2NzcylcbiAjZW5kaWZcbiBcdHBhZ2VfY291bnRlcl9zZXRfaGlnaChcdTAwMjZtZW1jZy1cdTAwM2Vzd2FwLCBQQUdFX0NPVU5URVJfTUFYKTtcbiBcdGlmIChwYXJlbnQpIHtcbi1cdFx0V1JJVEVfT05DRShtZW1jZy1cdTAwM2Vzd2FwcGluZXNzLCBtZW1fY2dyb3VwX3N3YXBwaW5lc3MocGFyZW50KSk7XG4tXG4gXHRcdHBhZ2VfY291bnRlcl9pbml0KFx1MDAyNm1lbWNnLVx1MDAzZW1lbW9yeSwgXHUwMDI2cGFyZW50LVx1MDAzZW1lbW9yeSwgbWVtY2dfb25fZGZsKTtcbiBcdFx0cGFnZV9jb3VudGVyX2luaXQoXHUwMDI2bWVtY2ctXHUwMDNlc3dhcCwgXHUwMDI2cGFyZW50LVx1MDAzZXN3YXAsIGZhbHNlKTtcbiAjaWZkZWYgQ09ORklHX01FTUNHX1YxXG4mIzQzO1x0XHRXUklURV9PTkNFKG1lbWNnLVx1MDAzZXN3YXBwaW5lc3MsIG1lbV9jZ3JvdXBfc3dhcHBpbmVzcyhwYXJlbnQpKTtcbiBcdFx0bWVtY2ctXHUwMDNlbWVtb3J5LnRyYWNrX2ZhaWxjbnQgPSAhbWVtY2dfb25fZGZsO1xuIFx0XHRXUklURV9PTkNFKG1lbWNnLVx1MDAzZW9vbV9raWxsX2Rpc2FibGUsIFJFQURfT05DRShwYXJlbnQtXHUwMDNlb29tX2tpbGxfZGlzYWJsZSkpO1xuIFx0XHRwYWdlX2NvdW50ZXJfaW5pdChcdTAwMjZtZW1jZy1cdTAwM2VrbWVtLCBcdTAwMjZwYXJlbnQtXHUwMDNla21lbSwgZmFsc2UpO1xuZGlmZiAtLWdpdCBhL21tL3N3YXAuaCBiL21tL3N3YXAuaFxuaW5kZXggYWJkMjY1ODhhYmQyMmMuLmIwNDg4ZjdiNjhiNWQzIDEwMDY0NFxuLS0tIGEvbW0vc3dhcC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9zd2FwLmhcbkBAIC00LDYgJiM0Mzs0LDcgQEBcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9hdG9taWMuaFx1MDAzZSAvKiBmb3IgYXRvbWljX2xvbmdfdCAqL1xuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21tLmhcdTAwM2UgLyogZm9yIFBBR0VfU0hJRlQgKi9cbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbWVtY29udHJvbC5oXHUwMDNlIC8qIGZvciBtZW1fY2dyb3VwX3N3YXBwaW5lc3MoKSAqL1xuIFxuIHN0cnVjdCBtZW1wb2xpY3k7XG4gc3RydWN0IHN3YXBfaW9jYjtcbkBAIC05OSw2ICYjNDM7MTAwLDE4IEBAIHN0cnVjdCBzd2FwX29wcyB7XG4gXHR2b2lkICgqc3VibWl0X3JlYWQpKHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4KTtcbiB9O1xuIFxuJiM0MztleHRlcm4gaW50IHZtX3N3YXBwaW5lc3M7XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX3N3YXBwaW5lc3Moc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuJiM0Mzt7XG4mIzQzOyNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcbiYjNDM7XHRpZiAoIWNncm91cF9zdWJzeXNfb25fZGZsKG1lbW9yeV9jZ3JwX3N1YnN5cykgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICFtZW1fY2dyb3VwX2Rpc2FibGVkKCkgXHUwMDI2XHUwMDI2ICFtZW1fY2dyb3VwX2lzX3Jvb3QobWVtY2cpKVxuJiM0MztcdFx0cmV0dXJuIG1lbWNnLVx1MDAzZXN3YXBwaW5lc3M7XG4mIzQzOyNlbmRpZlxuJiM0MztcdHJldHVybiBSRUFEX09OQ0Uodm1fc3dhcHBpbmVzcyk7XG4mIzQzO31cbiYjNDM7XG4gI2lmZGVmIENPTkZJR19TV0FQXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc3dhcG9wcy5oXHUwMDNlIC8qIGZvciBzd3Bfb2Zmc2V0ICovXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYmxrX3R5cGVzLmhcdTAwM2UgLyogZm9yIGJpb19lbmRfaW9fdCAqL1xuZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmNcbmluZGV4IDA2ZTEwM2Y5NzgxZTVkLi4xNTUxNjdiMzYxNGI2ZCAxMDA2NDRcbi0tLSBhL21tL3Ztc2Nhbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS92bXNjYW4uY1xuQEAgLTE5OSw2ICYjNDM7MTk5LDEzIEBAIHN0cnVjdCBzY2FuX2NvbnRyb2wge1xuICAqL1xuIGludCB2bV9zd2FwcGluZXNzID0gNjA7XG4gXG4mIzQzO3N0YXRpYyBpbnQgc2Nfc3dhcHBpbmVzcyhzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYywgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKHNjLVx1MDAzZXByb2FjdGl2ZSBcdTAwMjZcdTAwMjYgc2MtXHUwMDNlcHJvYWN0aXZlX3N3YXBwaW5lc3MpXG4mIzQzO1x0XHRyZXR1cm4gKnNjLVx1MDAzZXByb2FjdGl2ZV9zd2FwcGluZXNzO1xuJiM0MztcdHJldHVybiBtZW1fY2dyb3VwX3N3YXBwaW5lc3MobWVtY2cpO1xuJiM0Mzt9XG4mIzQzO1xuICNpZmRlZiBDT05GSUdfTUVNQ0dcbiBcbiAvKiBSZXR1cm5zIHRydWUgZm9yIHJlY2xhaW0gdGhyb3VnaCBjZ3JvdXAgbGltaXRzIG9yIGNncm91cCBpbnRlcmZhY2VzLiAqL1xuQEAgLTIzOSwxMyAmIzQzOzI0Niw2IEBAIHN0YXRpYyBib29sIHdyaXRlYmFja190aHJvdHRsaW5nX3NhbmUoc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4gI2VuZGlmXG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuLVxuLXN0YXRpYyBpbnQgc2Nfc3dhcHBpbmVzcyhzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYywgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuLXtcbi1cdGlmIChzYy1cdTAwM2Vwcm9hY3RpdmUgXHUwMDI2XHUwMDI2IHNjLVx1MDAzZXByb2FjdGl2ZV9zd2FwcGluZXNzKVxuLVx0XHRyZXR1cm4gKnNjLVx1MDAzZXByb2FjdGl2ZV9zd2FwcGluZXNzO1xuLVx0cmV0dXJuIG1lbV9jZ3JvdXBfc3dhcHBpbmVzcyhtZW1jZyk7XG4tfVxuICNlbHNlXG4gc3RhdGljIGJvb2wgY2dyb3VwX3JlY2xhaW0oc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4ge1xuQEAgLTI2MSwxMSAmIzQzOzI2MSw2IEBAIHN0YXRpYyBib29sIHdyaXRlYmFja190aHJvdHRsaW5nX3NhbmUoc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4ge1xuIFx0cmV0dXJuIHRydWU7XG4gfVxuLVxuLXN0YXRpYyBpbnQgc2Nfc3dhcHBpbmVzcyhzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYywgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuLXtcbi1cdHJldHVybiBSRUFEX09OQ0Uodm1fc3dhcHBpbmVzcyk7XG4tfVxuICNlbmRpZlxuIFxuIHN0YXRpYyB2b2lkIHNldF90YXNrX3JlY2xhaW1fc3RhdGUoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDA3OjAwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjNtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpcyBwcmltYXJpbHkgYSByZWZhY3RvcmluZyB0byBoaWRlIHRoZSBgc3dhcHBpbmVzc2AgZmllbGQgaW4gYHN0cnVjdCBtZW1fY2dyb3VwYCB1bmRlciBgQ09ORklHX01FTUNHX1YxYCB0byBzYXZlIG1lbW9yeSB3aGVuIGNncm91cCB2MSBpcyBkaXNhYmxlZC4gRm9yIHRoZSBkZWZhdWx0IGBDT05GSUdfTUVNQ0c9eWAgY29uZmlndXJhdGlvbiwgdGhlcmUgaXMgbm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYmVoYXZpb3IuIFRoZSBvbmx5IGZ1bmN0aW9uYWwgY2hhbmdlIGlzIGEgbWlub3IgZml4IGZvciBgQ09ORklHX01FTUNHPW5gIHdoZXJlIHByb2FjdGl2ZSBub2RlIHJlY2xhaW0gdmlhIHN5c2ZzIG5vdyByZXNwZWN0cyB0aGUgdXNlci1wcm92aWRlZCBgc3dhcHBpbmVzc2AgcGFyYW1ldGVyIGluc3RlYWQgb2YgaWdub3JpbmcgaXQuIFRoaXMgaXMgYSB2ZXJ5IG1pbm9yIGVkZ2UgY2FzZSBpbiBhIG5vbi1kZWZhdWx0IGNvbmZpZyBhbmQgZG9lcyBub3Qgd2FycmFudCBmb2N1c2VkIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA2MjM0MTI1MDgyYmE1NjRiOGVjZDVkNGRhYjg5ODIyOTdlNjU3ZmI2CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBKdWwgMjQgMDc6MDA6MjAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaCBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oCmluZGV4IDk1NzI2MDY3NzY3ODE1Li5lN2E3OTRkZmI0MGU0OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgKQEAgLTIzOSw4ICYjNDM7MjM5LDYgQEAgc3RydWN0IG1lbV9jZ3JvdXAgewogCSAqLwogCWJvb2wgb29tX2dyb3VwOwogCi0JaW50IHN3YXBwaW5lc3M7Ci0KIAkvKiBtZW1vcnkuZXZlbnRzIGFuZCBtZW1vcnkuZXZlbnRzLmxvY2FsICovCiAJc3RydWN0IGNncm91cF9maWxlIGV2ZW50c19maWxlOwogCXN0cnVjdCBjZ3JvdXBfZmlsZSBldmVudHNfbG9jYWxfZmlsZTsKQEAgLTMxOCw2ICYjNDM7MzE2LDggQEAgc3RydWN0IG1lbV9jZ3JvdXAgewogCS8qIExpc3Qgb2YgZXZlbnRzIHdoaWNoIHVzZXJzcGFjZSB3YW50IHRvIHJlY2VpdmUgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkIGV2ZW50X2xpc3Q7CiAJc3BpbmxvY2tfdCBldmVudF9saXN0X2xvY2s7CiYjNDM7CiYjNDM7CWludCBzd2FwcGluZXNzOwogI2VuZGlmIC8qIENPTkZJR19NRU1DR19WMSAqLwogCiAJc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKm5vZGVpbmZvW107CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N3YXAuaCBiL2luY2x1ZGUvbGludXgvc3dhcC5oCmluZGV4IDA1NDRiMmVjNGM1NjViLi40NWYzMDFkNzNlMmFlZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zd2FwLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9zd2FwLmgKQEAgLTMwOSw3ICYjNDM7MzA5LDYgQEAgc3RhdGljIGlubGluZSBib29sIGxydV9jYWNoZV9kaXNhYmxlZCh2b2lkKQogfQogCiBleHRlcm4gdW5zaWduZWQgbG9uZyBzaHJpbmtfYWxsX21lbW9yeSh1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTsKLWV4dGVybiBpbnQgdm1fc3dhcHBpbmVzczsKIGxvbmcgcmVtb3ZlX21hcHBpbmcoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8pOwogCiAjaWYgZGVmaW5lZChDT05GSUdfU1lTRlMpICZhbXA7JmFtcDsgZGVmaW5lZChDT05GSUdfTlVNQSkKQEAgLTQ3MywyNSAmIzQzOzQ3Miw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IGFkZF9zd2FwX2V4dGVudChzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2lzLAogfQogI2VuZGlmIC8qIENPTkZJR19TV0FQICovCiAjaWZkZWYgQ09ORklHX01FTUNHCi1zdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX3N3YXBwaW5lc3Moc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQotewotCS8qIENncm91cDIgZG9lc24mIzM5O3QgaGF2ZSBwZXItY2dyb3VwIHN3YXBwaW5lc3MgKi8KLQlpZiAoY2dyb3VwX3N1YnN5c19vbl9kZmwobWVtb3J5X2NncnBfc3Vic3lzKSkKLQkJcmV0dXJuIFJFQURfT05DRSh2bV9zd2FwcGluZXNzKTsKLQotCS8qIHJvb3QgPyAqLwotCWlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkgfHwgbWVtX2Nncm91cF9pc19yb290KG1lbWNnKSkKLQkJcmV0dXJuIFJFQURfT05DRSh2bV9zd2FwcGluZXNzKTsKLQotCXJldHVybiBSRUFEX09OQ0UobWVtY2ctJmd0O3N3YXBwaW5lc3MpOwotfQotCiB2b2lkIGxydV9yZXBhcmVudF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsIGludCBuaWQpOwotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfc3dhcHBpbmVzcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpCi17Ci0JcmV0dXJuIFJFQURfT05DRSh2bV9zd2FwcGluZXNzKTsKLX0KICNlbmRpZgogCiAjaWYgZGVmaW5lZChDT05GSUdfU1dBUCkgJmFtcDsmYW1wOyBkZWZpbmVkKENPTkZJR19NRU1DRykgJmFtcDsmYW1wOyBkZWZpbmVkKENPTkZJR19CTEtfQ0dST1VQKQpkaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jCmluZGV4IDgzMTlhZDhjNWMyM2FjLi42ODY0Yjc2NDU2ZmIzZSAxMDA2NDQKLS0tIGEvbW0vbWVtY29udHJvbC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbWNvbnRyb2wuYwpAQCAtNjMsNiAmIzQzOzYzLDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9zY2hlZC9pc29sYXRpb24uaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9rbWVtbGVhay5oJmd0OwogI2luY2x1ZGUgJiMzNDtpbnRlcm5hbC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O3N3YXAuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3N3YXBfdGFibGUuaCYjMzQ7CiAjaW5jbHVkZSAmbHQ7bmV0L3NvY2suaCZndDsKICNpbmNsdWRlICZsdDtuZXQvaXAuaCZndDsKQEAgLTQxNzYsMTEgJiM0Mzs0MTc3LDEwIEBAIG1lbV9jZ3JvdXBfY3NzX2FsbG9jKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpwYXJlbnRfY3NzKQogI2VuZGlmCiAJcGFnZV9jb3VudGVyX3NldF9oaWdoKCZhbXA7bWVtY2ctJmd0O3N3YXAsIFBBR0VfQ09VTlRFUl9NQVgpOwogCWlmIChwYXJlbnQpIHsKLQkJV1JJVEVfT05DRShtZW1jZy0mZ3Q7c3dhcHBpbmVzcywgbWVtX2Nncm91cF9zd2FwcGluZXNzKHBhcmVudCkpOwotCiAJCXBhZ2VfY291bnRlcl9pbml0KCZhbXA7bWVtY2ctJmd0O21lbW9yeSwgJmFtcDtwYXJlbnQtJmd0O21lbW9yeSwgbWVtY2dfb25fZGZsKTsKIAkJcGFnZV9jb3VudGVyX2luaXQoJmFtcDttZW1jZy0mZ3Q7c3dhcCwgJmFtcDtwYXJlbnQtJmd0O3N3YXAsIGZhbHNlKTsKICNpZmRlZiBDT05GSUdfTUVNQ0dfVjEKJiM0MzsJCVdSSVRFX09OQ0UobWVtY2ctJmd0O3N3YXBwaW5lc3MsIG1lbV9jZ3JvdXBfc3dhcHBpbmVzcyhwYXJlbnQpKTsKIAkJbWVtY2ctJmd0O21lbW9yeS50cmFja19mYWlsY250ID0gIW1lbWNnX29uX2RmbDsKIAkJV1JJVEVfT05DRShtZW1jZy0mZ3Q7b29tX2tpbGxfZGlzYWJsZSwgUkVBRF9PTkNFKHBhcmVudC0mZ3Q7b29tX2tpbGxfZGlzYWJsZSkpOwogCQlwYWdlX2NvdW50ZXJfaW5pdCgmYW1wO21lbWNnLSZndDtrbWVtLCAmYW1wO3BhcmVudC0mZ3Q7a21lbSwgZmFsc2UpOwpkaWZmIC0tZ2l0IGEvbW0vc3dhcC5oIGIvbW0vc3dhcC5oCmluZGV4IGFiZDI2NTg4YWJkMjJjLi5iMDQ4OGY3YjY4YjVkMyAxMDA2NDQKLS0tIGEvbW0vc3dhcC5oCiYjNDM7JiM0MzsmIzQzOyBiL21tL3N3YXAuaApAQCAtNCw2ICYjNDM7NCw3IEBACiAKICNpbmNsdWRlICZsdDtsaW51eC9hdG9taWMuaCZndDsgLyogZm9yIGF0b21pY19sb25nX3QgKi8KICNpbmNsdWRlICZsdDtsaW51eC9tbS5oJmd0OyAvKiBmb3IgUEFHRV9TSElGVCAqLwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9tZW1jb250cm9sLmgmZ3Q7IC8qIGZvciBtZW1fY2dyb3VwX3N3YXBwaW5lc3MoKSAqLwogCiBzdHJ1Y3QgbWVtcG9saWN5Owogc3RydWN0IHN3YXBfaW9jYjsKQEAgLTk5LDYgJiM0MzsxMDAsMTggQEAgc3RydWN0IHN3YXBfb3BzIHsKIAl2b2lkICgqc3VibWl0X3JlYWQpKHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4KTsKIH07CiAKJiM0MztleHRlcm4gaW50IHZtX3N3YXBwaW5lc3M7CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF9zd2FwcGluZXNzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykKJiM0Mzt7CiYjNDM7I2lmZGVmIENPTkZJR19NRU1DR19WMQomIzQzOwlpZiAoIWNncm91cF9zdWJzeXNfb25fZGZsKG1lbW9yeV9jZ3JwX3N1YnN5cykgJmFtcDsmYW1wOwomIzQzOwkgICAgIW1lbV9jZ3JvdXBfZGlzYWJsZWQoKSAmYW1wOyZhbXA7ICFtZW1fY2dyb3VwX2lzX3Jvb3QobWVtY2cpKQomIzQzOwkJcmV0dXJuIG1lbWNnLSZndDtzd2FwcGluZXNzOwomIzQzOyNlbmRpZgomIzQzOwlyZXR1cm4gUkVBRF9PTkNFKHZtX3N3YXBwaW5lc3MpOwomIzQzO30KJiM0MzsKICNpZmRlZiBDT05GSUdfU1dBUAogI2luY2x1ZGUgJmx0O2xpbnV4L3N3YXBvcHMuaCZndDsgLyogZm9yIHN3cF9vZmZzZXQgKi8KICNpbmNsdWRlICZsdDtsaW51eC9ibGtfdHlwZXMuaCZndDsgLyogZm9yIGJpb19lbmRfaW9fdCAqLwpkaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uYwppbmRleCAwNmUxMDNmOTc4MWU1ZC4uMTU1MTY3YjM2MTRiNmQgMTAwNjQ0Ci0tLSBhL21tL3Ztc2Nhbi5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3Ztc2Nhbi5jCkBAIC0xOTksNiAmIzQzOzE5OSwxMyBAQCBzdHJ1Y3Qgc2Nhbl9jb250cm9sIHsKICAqLwogaW50IHZtX3N3YXBwaW5lc3MgPSA2MDsKIAomIzQzO3N0YXRpYyBpbnQgc2Nfc3dhcHBpbmVzcyhzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYywgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQomIzQzO3sKJiM0MzsJaWYgKHNjLSZndDtwcm9hY3RpdmUgJmFtcDsmYW1wOyBzYy0mZ3Q7cHJvYWN0aXZlX3N3YXBwaW5lc3MpCiYjNDM7CQlyZXR1cm4gKnNjLSZndDtwcm9hY3RpdmVfc3dhcHBpbmVzczsKJiM0MzsJcmV0dXJuIG1lbV9jZ3JvdXBfc3dhcHBpbmVzcyhtZW1jZyk7CiYjNDM7fQomIzQzOwogI2lmZGVmIENPTkZJR19NRU1DRwogCiAvKiBSZXR1cm5zIHRydWUgZm9yIHJlY2xhaW0gdGhyb3VnaCBjZ3JvdXAgbGltaXRzIG9yIGNncm91cCBpbnRlcmZhY2VzLiAqLwpAQCAtMjM5LDEzICYjNDM7MjQ2LDYgQEAgc3RhdGljIGJvb2wgd3JpdGViYWNrX3Rocm90dGxpbmdfc2FuZShzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYykKICNlbmRpZgogCXJldHVybiBmYWxzZTsKIH0KLQotc3RhdGljIGludCBzY19zd2FwcGluZXNzKHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpCi17Ci0JaWYgKHNjLSZndDtwcm9hY3RpdmUgJmFtcDsmYW1wOyBzYy0mZ3Q7cHJvYWN0aXZlX3N3YXBwaW5lc3MpCi0JCXJldHVybiAqc2MtJmd0O3Byb2FjdGl2ZV9zd2FwcGluZXNzOwotCXJldHVybiBtZW1fY2dyb3VwX3N3YXBwaW5lc3MobWVtY2cpOwotfQogI2Vsc2UKIHN0YXRpYyBib29sIGNncm91cF9yZWNsYWltKHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKQogewpAQCAtMjYxLDExICYjNDM7MjYxLDYgQEAgc3RhdGljIGJvb2wgd3JpdGViYWNrX3Rocm90dGxpbmdfc2FuZShzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYykKIHsKIAlyZXR1cm4gdHJ1ZTsKIH0KLQotc3RhdGljIGludCBzY19zd2FwcGluZXNzKHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpCi17Ci0JcmV0dXJuIFJFQURfT05DRSh2bV9zd2FwcGluZXNzKTsKLX0KICNlbmRpZgogCiBzdGF0aWMgdm9pZCBzZXRfdGFza19yZWNsYWltX3N0YXRlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMDc6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzcyOAoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDEwMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaCBTZXJpZXMgZm9yIFBvdGVudGlhbCBGdXp6aW5nIFRhcmdldHMqKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBuZWNlc3NpdGF0ZSBmdXp6aW5nLiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCBpdCYjMzk7cyBwcmltYXJpbHkgcmVmYWN0b3JpbmcsIGJ1dCBJIG5lZWQgdG8gYmUgc3VyZS4gTGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KClRoZSBwYXRjaCBlc3NlbnRpYWxseToKCjEuICBNb3ZlcyB0aGUgYHN3YXBwaW5lc3NgIGZpZWxkIGluIGBzdHJ1Y3QgbWVtX2Nncm91cGAgdW5kZXIgYCNpZmRlZiBDT05GSUdfTUVNQ0dfVjFgLgoyLiAgTW92ZXMgYG1lbV9jZ3JvdXBfc3dhcHBpbmVzcygpYCBmcm9tIGBpbmNsdWRlL2xpbnV4L3N3YXAuaGAgdG8gYG1tL3N3YXAuaGAuCjMuICBDaGFuZ2VzIHRoZSBgbWVtX2Nncm91cF9zd2FwcGluZXNzKClgIGltcGxlbWVudGF0aW9uIHRvIGNvbmRpdGlvbmFsbHkgdXNlIGBtZW1jZy0mZ3Q7c3dhcHBpbmVzc2AgYmFzZWQgb24gYCNpZmRlZiBDT05GSUdfTUVNQ0dfVjFgLgo0LiAgVXBkYXRlcyBgbWVtX2Nncm91cF9jc3NfYWxsb2MoKWAgdG8gb25seSBpbml0aWFsaXplIGBtZW1jZy0mZ3Q7c3dhcHBpbmVzc2AgaWYgYENPTkZJR19NRU1DR19WMWAgaXMgZGVmaW5lZC4KNS4gIE1vdmVzIGBzY19zd2FwcGluZXNzKClgIGluIGBtbS92bXNjYW4uY2Agb3V0IG9mIGAjaWZkZWYgQ09ORklHX01FTUNHYC4KCkFscmlnaHQsIEkgc2VlIGEgY2xlYXIgc2hpZnQgaGVyZSB0b3dhcmRzIGlzb2xhdGluZyB0aGUgYHN3YXBwaW5lc3NgIGxvZ2ljIGZvciBtZW1vcnkgY2dyb3VwcyB2MS4gVGhlIG1haW4gY29uY2VybiBpcyB3aGV0aGVyIHRoaXMgaW50cm9kdWNlcyBhIHN1YnRsZSBjaGFuZ2UgaW4gYmVoYXZpb3IuCgpMZXQmIzM5O3MgZGlzc2VjdCBgbWVtX2Nncm91cF9zd2FwcGluZXNzKClgIGNhcmVmdWxseS4gVGhlIG9sZCBpbXBsZW1lbnRhdGlvbiBoYWQgYSBjaGVjayBmb3IgY2dyb3VwIHYyIGFuZCByb290IGNncm91cCB0byByZXR1cm4gZ2xvYmFsIGB2bV9zd2FwcGluZXNzYC4gVGhlIG5ldyB2ZXJzaW9uIGNvbmRpdGlvbmFsbHkgdXNlcyBgbWVtY2ctJmd0O3N3YXBwaW5lc3NgIG9ubHkgdW5kZXIgYENPTkZJR19NRU1DR19WMWAuIElmIGBDT05GSUdfTUVNQ0dfVjFgIGlzIGRpc2FibGVkLCB0aGUgbmV3IHZlcnNpb24gZGlyZWN0bHkgcmV0dXJucyBgdm1fc3dhcHBpbmVzc2AuIFRoaXMgc2VlbXMgbGlrZSBvcHRpbWl6YXRpb24gZm9yIGNncm91cCB2MiBieSBoaWRpbmcgdGhlIHN3YXBwaW5lc3MgZmllbGQgaW4gdGhlIGBzdHJ1Y3QgbWVtX2Nncm91cGAsIGJlY2F1c2UgaXQgaXMgb25seSB1c2VkIGZvciBjZ3JvdXAgdjEuIEZ1bmN0aW9uYWxseSwgaXQgc3RpbGwgcmV0dXJucyB0aGUgc2FtZSB2YWx1ZSBhcyBiZWZvcmUgaWYgYENPTkZJR19NRU1DR19WMWAgaXMgZGlzYWJsZWQuCgpJZiBgQ09ORklHX01FTUNHX1YxYCAqaXMqIGVuYWJsZWQsIHRoZSBsb2dpYyBhcHBlYXJzIGlkZW50aWNhbCB0byB0aGUgb3JpZ2luYWw7IHRoZSBzYW1lIGNvbmRpdGlvbnMgYXJlIGNoZWNrZWQgYnV0IG1vcmUgc3VjY2luY3RseS4KClNvIGZhciwgaXQgbG9va3MgbGlrZSBhIGNsZWFuIHJlZmFjdG9yaW5nIHRvIGF2b2lkIHVubmVjZXNzYXJ5IGNvZGUgYW5kIG1lbW9yeSBvdmVyaGVhZCB3aGVuIHYxIGlzIG5vdCBpbiB1c2UuIEhvd2V2ZXIsIHRoZSBtb3ZlIG9mIGBzY19zd2FwcGluZXNzKClgIGlzIGEgbGl0dGxlIHRyaWNraWVyLCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgaGFzbiYjMzk7dCBjaGFuZ2VkIHRoZSBzZW1hbnRpY3Mgb2YgdGhlIGNvZGUuCgpUaGUgb2xkIGNvZGUgY29uZGl0aW9uYWxseSBkZWZpbmVkIGBzY19zd2FwcGluZXNzKClgIGJhc2VkIG9uIGBDT05GSUdfTUVNQ0dgLCB3aGVyZSB0aGUgZGVmYXVsdCB2YWx1ZSB3YXMgYHZtX3N3YXBwaW5lc3NgLiBUaGUgbmV3IGNvZGUgKmFsd2F5cyogY2FsbHMgYG1lbV9jZ3JvdXBfc3dhcHBpbmVzcygpYCwgd2hpY2gsIGFzIHdlJiMzOTt2ZSBhbHJlYWR5IGFzc2Vzc2VkLCB3aWxsIHJldHVybiBgdm1fc3dhcHBpbmVzc2AgaWYgYENPTkZJR19NRU1DR19WMWAgaXMgZGlzYWJsZWQuIFRoaXMgc2VlbXMgdG8gaW1wbHkgdGhhdCBgc2MtJmd0O3Byb2FjdGl2ZWAgKGFuZCBgc2MtJmd0O3Byb2FjdGl2ZV9zd2FwcGluZXNzYCkgd2lsbCBzdGlsbCBiZSBjaGVja2VkIGV2ZW4gaWYgYENPTkZJR19NRU1DR2AgaXMgZGlzYWJsZWQuIEkgd2lsbCB1c2UgYGdyZXBwZXJgIHRvIGRvdWJsZSBjaGVjayB0aGF0IGBzdHJ1Y3Qgc2Nhbl9jb250cm9sYCBleGlzdHMgaWYgYENPTkZJR19NRU1DR2AgaXMgZGlzYWJsZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMDc6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RydWN0IHNjYW5fY29udHJvbCBcXHsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMtNzQtXG5tbS92bXNjYW4uYzo3NTpzdHJ1Y3Qgc2Nhbl9jb250cm9sIHtcbm1tL3Ztc2Nhbi5jLTc2LVx0LyogSG93IG1hbnkgcGFnZXMgc2hyaW5rX2xpc3QoKSBzaG91bGQgcmVjbGFpbSAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDA3OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU0OTgKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gYG1tL3Ztc2Nhbi5jYCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyB0aGUgc2Nhbm5pbmcgcHJvY2VzcyB3b3Jrcy4gVGltZSB0byBkaXZlIGludG8gdGhlIGNvZGUuIEkmIzM5O20gdGhpbmtpbmcgdGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQgaXMgYG1tL3Ztc2Nhbi5jYC4gSXQgbWFrZXMgc2Vuc2UgdGhhdCYjMzk7cyB3aGVyZSB0aGUgY29yZSBWTSBzY2FubmluZyBsb2dpYyB3b3VsZCByZXNpZGUuIExldCYjMzk7cyBzdGFydCBhcm91bmQgbGluZSA3NSwgdGhhdCYjMzk7cyB1c3VhbGx5IGEgZ29vZCBhcmVhIHRvIGdldCBhIGZlZWwgZm9yIHRoZSBtYWpvciBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQuIEkmIzM5O20gc3BlY2lmaWNhbGx5IGxvb2tpbmcgZm9yIGEgc3RydWN0dXJlIGNhbGxlZCBgc2Nhbl9jb250cm9sYC4gVGhpcyBpcyBhIHByZXR0eSBjb21tb24gcGF0dGVybjsgdGhlc2UgY29udHJvbCBzdHJ1Y3RzIG9mdGVuIGNvbnRhaW4gYWxsIHRoZSB0dW5hYmxlIHBhcmFtZXRlcnMgYW5kIHN0YXRlIGluZm9ybWF0aW9uIHVzZWQgdG8gZ3VpZGUgdGhlIHNjYW5uaW5nIHByb2Nlc3MuIFVuZGVyc3RhbmRpbmcgYHNjYW5fY29udHJvbGAgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGVudHJ5IHBvaW50IGludG8gdGhlIG92ZXJhbGwgZmxvdy4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGZpbmQgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMDc6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDc1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDc1Olx0c3RydWN0IHNjYW5fY29udHJvbCB7XG4gIDc2Olx0XHQvKiBIb3cgbWFueSBwYWdlcyBzaHJpbmtfbGlzdCgpIHNob3VsZCByZWNsYWltICovXG4gIDc3Olx0XHR1bnNpZ25lZCBsb25nIG5yX3RvX3JlY2xhaW07XG4gIDc4Olx0XG4gIDc5Olx0XHQvKlxuICA4MDpcdFx0ICogTm9kZW1hc2sgb2Ygbm9kZXMgYWxsb3dlZCBieSB0aGUgY2FsbGVyLiBJZiBOVUxMLCBhbGwgbm9kZXNcbiAgODE6XHRcdCAqIGFyZSBzY2FubmVkLlxuICA4MjpcdFx0ICovXG4gIDgzOlx0XHRjb25zdCBub2RlbWFza190ICpub2RlbWFzaztcbiAgODQ6XHRcbiAgODU6XHRcdC8qXG4gIDg2Olx0XHQgKiBUaGUgbWVtb3J5IGNncm91cCB0aGF0IGhpdCBpdHMgbGltaXQgYW5kIGFzIGEgcmVzdWx0IGlzIHRoZVxuICA4NzpcdFx0ICogcHJpbWFyeSB0YXJnZXQgb2YgdGhpcyByZWNsYWltIGludm9jYXRpb24uXG4gIDg4Olx0XHQgKi9cbiAgODk6XHRcdHN0cnVjdCBtZW1fY2dyb3VwICp0YXJnZXRfbWVtX2Nncm91cDtcbiAgOTA6XHRcbiAgOTE6XHRcdC8qXG4gIDkyOlx0XHQgKiBTY2FuIHByZXNzdXJlIGJhbGFuY2luZyBiZXR3ZWVuIGFub24gYW5kIGZpbGUgTFJVc1xuICA5MzpcdFx0ICovXG4gIDk0Olx0XHR1bnNpZ25lZCBsb25nXHRhbm9uX2Nvc3Q7XG4gIDk1Olx0XHR1bnNpZ25lZCBsb25nXHRmaWxlX2Nvc3Q7XG4gIDk2Olx0XG4gIDk3Olx0XHQvKiBTd2FwcGluZXNzIHZhbHVlIGZvciBwcm9hY3RpdmUgcmVjbGFpbS4gQWx3YXlzIHVzZSBzY19zd2FwcGluZXNzKCkhICovXG4gIDk4Olx0XHRpbnQgKnByb2FjdGl2ZV9zd2FwcGluZXNzO1xuICA5OTpcdFxuIDEwMDpcdFx0LyogQ2FuIGFjdGl2ZSBmb2xpb3MgYmUgZGVhY3RpdmF0ZWQgYXMgcGFydCBvZiByZWNsYWltPyAqL1xuIDEwMTpcdCNkZWZpbmUgREVBQ1RJVkFURV9BTk9OIDFcbiAxMDI6XHQjZGVmaW5lIERFQUNUSVZBVEVfRklMRSAyXG4gMTAzOlx0XHR1bnNpZ25lZCBpbnQgbWF5X2RlYWN0aXZhdGU6MjtcbiAxMDQ6XHRcdHVuc2lnbmVkIGludCBmb3JjZV9kZWFjdGl2YXRlOjE7XG4gMTA1Olx0XHR1bnNpZ25lZCBpbnQgc2tpcHBlZF9kZWFjdGl2YXRlOjE7XG4gMTA2Olx0XG4gMTA3Olx0XHQvKiB6b25lX3JlY2xhaW1fbW9kZSwgYm9vc3QgcmVjbGFpbSAqL1xuIDEwODpcdFx0dW5zaWduZWQgaW50IG1heV93cml0ZXBhZ2U6MTtcbiAxMDk6XHRcbiAxMTA6XHRcdC8qIHpvbmVfcmVjbGFpbV9tb2RlICovXG4gMTExOlx0XHR1bnNpZ25lZCBpbnQgbWF5X3VubWFwOjE7XG4gMTEyOlx0XG4gMTEzOlx0XHQvKiB6b25lX3JlY2xhaW1fbW9kZSwgYm9vc3QgcmVjbGFpbSwgY2dyb3VwIHJlc3RyaWN0aW9ucyAqL1xuIDExNDpcdFx0dW5zaWduZWQgaW50IG1heV9zd2FwOjE7XG4gMTE1Olx0XG4gMTE2Olx0XHQvKiBOb3QgYWxsb3cgY2FjaGVfdHJpbV9tb2RlIHRvIGJlIHR1cm5lZCBvbiBhcyBwYXJ0IG9mIHJlY2xhaW0/ICovXG4gMTE3Olx0XHR1bnNpZ25lZCBpbnQgbm9fY2FjaGVfdHJpbV9tb2RlOjE7XG4gMTE4Olx0XG4gMTE5Olx0XHQvKiBIYXMgY2FjaGVfdHJpbV9tb2RlIGZhaWxlZCBhdCBsZWFzdCBvbmNlPyAqL1xuIDEyMDpcdFx0dW5zaWduZWQgaW50IGNhY2hlX3RyaW1fbW9kZV9mYWlsZWQ6MTtcbiAxMjE6XHRcbiAxMjI6XHRcdC8qIFByb2FjdGl2ZSByZWNsYWltIGludm9rZWQgYnkgdXNlcnNwYWNlICovXG4gMTIzOlx0XHR1bnNpZ25lZCBpbnQgcHJvYWN0aXZlOjE7XG4gMTI0Olx0XG4gMTI1Olx0XHQvKlxuIDEyNjpcdFx0ICogQ2dyb3VwIG1lbW9yeSBiZWxvdyBtZW1vcnkubG93IGlzIHByb3RlY3RlZCBhcyBsb25nIGFzIHdlXG4gMTI3Olx0XHQgKiBkb24mIzM5O3QgdGhyZWF0ZW4gdG8gT09NLiBJZiBhbnkgY2dyb3VwIGlzIHJlY2xhaW1lZCBhdFxuIDEyODpcdFx0ICogcmVkdWNlZCBmb3JjZSBvciBwYXNzZWQgb3ZlciBlbnRpcmVseSBkdWUgdG8gaXRzIG1lbW9yeS5sb3dcbiAxMjk6XHRcdCAqIHNldHRpbmcgKG1lbWNnX2xvd19za2lwcGVkKSwgYW5kIG5vdGhpbmcgaXMgcmVjbGFpbWVkIGFzIGFcbiAxMzA6XHRcdCAqIHJlc3VsdCwgdGhlbiBnbyBiYWNrIGZvciBvbmUgbW9yZSBjeWNsZSB0aGF0IHJlY2xhaW1zIHRoZSBwcm90ZWN0ZWRcbiAxMzE6XHRcdCAqIG1lbW9yeSAobWVtY2dfbG93X3JlY2xhaW0pIHRvIGF2ZXJ0IE9PTS5cbiAxMzI6XHRcdCAqL1xuIDEzMzpcdFx0dW5zaWduZWQgaW50IG1lbWNnX2xvd19yZWNsYWltOjE7XG4gMTM0Olx0XHR1bnNpZ25lZCBpbnQgbWVtY2dfbG93X3NraXBwZWQ6MTtcbiAxMzU6XHRcbiAxMzY6XHRcdC8qIFNoYXJlZCBjZ3JvdXAgdHJlZSB3YWxrIGZhaWxlZCwgcmVzY2FuIHRoZSB3aG9sZSB0cmVlICovXG4gMTM3Olx0XHR1bnNpZ25lZCBpbnQgbWVtY2dfZnVsbF93YWxrOjE7XG4gMTM4Olx0XG4gMTM5Olx0XHR1bnNpZ25lZCBpbnQgaGliZXJuYXRpb25fbW9kZToxO1xuIDE0MDpcdFxuIDE0MTpcdFx0LyogT25lIG9mIHRoZSB6b25lcyBpcyByZWFkeSBmb3IgY29tcGFjdGlvbiAqL1xuIDE0MjpcdFx0dW5zaWduZWQgaW50IGNvbXBhY3Rpb25fcmVhZHk6MTtcbiAxNDM6XHRcbiAxNDQ6XHRcdC8qIFRoZXJlIGlzIGVhc2lseSByZWNsYWltYWJsZSBjb2xkIGNhY2hlIGluIHRoZSBjdXJyZW50IG5vZGUgKi9cbiAxNDU6XHRcdHVuc2lnbmVkIGludCBjYWNoZV90cmltX21vZGU6MTtcbiAxNDY6XHRcbiAxNDc6XHRcdC8qIFRoZSBmaWxlIGZvbGlvcyBvbiB0aGUgY3VycmVudCBub2RlIGFyZSBkYW5nZXJvdXNseSBsb3cgKi9cbiAxNDg6XHRcdHVuc2lnbmVkIGludCBmaWxlX2lzX3Rpbnk6MTtcbiAxNDk6XHRcbiAxNTA6XHRcdC8qIEFsd2F5cyBkaXNjYXJkIGluc3RlYWQgb2YgZGVtb3RpbmcgdG8gbG93ZXIgdGllciBtZW1vcnkgKi9cbiAxNTE6XHRcdHVuc2lnbmVkIGludCBub19kZW1vdGlvbjoxO1xuIDE1MjpcdFxuIDE1MzpcdFx0LyogQWxsb2NhdGlvbiBvcmRlciAqL1xuIDE1NDpcdFx0czggb3JkZXI7XG4gMTU1Olx0XG4gMTU2Olx0XHQvKiBTY2FuICh0b3RhbF9zaXplIFx1MDAzZVx1MDAzZSBwcmlvcml0eSkgcGFnZXMgYXQgb25jZSAqL1xuIDE1NzpcdFx0czggcHJpb3JpdHk7XG4gMTU4Olx0XG4gMTU5Olx0XHQvKiBUaGUgaGlnaGVzdCB6b25lIHRvIGlzb2xhdGUgZm9saW9zIGZvciByZWNsYWltIGZyb20gKi9cbiAxNjA6XHRcdHM4IHJlY2xhaW1faWR4O1xuIDE2MTpcdFxuIDE2MjpcdFx0LyogVGhpcyBjb250ZXh0JiMzOTtzIEdGUCBtYXNrICovXG4gMTYzOlx0XHRnZnBfdCBnZnBfbWFzaztcbiAxNjQ6XHRcbiAxNjU6XHRcdC8qIEluY3JlbWVudGVkIGJ5IHRoZSBudW1iZXIgb2YgaW5hY3RpdmUgcGFnZXMgdGhhdCB3ZXJlIHNjYW5uZWQgKi9cbiAxNjY6XHRcdHVuc2lnbmVkIGxvbmcgbnJfc2Nhbm5lZDtcbiAxNjc6XHRcbiAxNjg6XHRcdC8qIE51bWJlciBvZiBwYWdlcyBmcmVlZCBzbyBmYXIgZHVyaW5nIGEgY2FsbCB0byBzaHJpbmtfem9uZXMoKSAqL1xuIDE2OTpcdFx0dW5zaWduZWQgbG9uZyBucl9yZWNsYWltZWQ7XG4gMTcwOlx0XG4gMTcxOlx0XHRzdHJ1Y3Qge1xuIDE3MjpcdFx0XHR1bnNpZ25lZCBpbnQgZGlydHk7XG4gMTczOlx0XHRcdHVuc2lnbmVkIGludCBjb25nZXN0ZWQ7XG4gMTc0Olx0XHRcdHVuc2lnbmVkIGludCB3cml0ZWJhY2s7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMDc6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzExNQoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDYzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4YW1pbmluZyBQcm9hY3RpdmUgUmVjbGFpbSBpbiB0aGUgTGludXggS2VybmVsKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlLCBhbmQgSSBzZWUgdGhhdCBib3RoIGBwcm9hY3RpdmVgIGFuZCBgcHJvYWN0aXZlX3N3YXBwaW5lc3NgIGFyZSAqYWx3YXlzKiBtZW1iZXJzIG9mIHRoZSBgc2Nhbl9jb250cm9sYCBzdHJ1Y3QuIFRoYXQmIzM5O3MgYSBiaXQgY3VyaW91cywgZXNwZWNpYWxseSBzaW5jZSBJJiMzOTttIHRyeWluZyB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGFsbCBiZWhhdmVzIHdpdGggYW5kIHdpdGhvdXQgbWVtb3J5IGNncm91cHMgZW5hYmxlZC4gSXQgbWFrZXMgbWUgd29uZGVyLCBpZiBgQ09ORklHX01FTUNHYCBpcyBkaXNhYmxlZCwgZG9lcyB0aGlzIGNvbmNlcHQgb2YgJiMzNDtwcm9hY3RpdmUgcmVjbGFpbSYjMzQ7IGV2ZW4gKmV4aXN0KiBpbiBhIG1lYW5pbmdmdWwgd2F5PyBJIG1lYW4sIGFyZSB0aGVzZSB2YXJpYWJsZXMganVzdCBhbGxvY2F0ZWQgYW5kIHVudXNlZD8gT3IgYXJlIHRoZXkgc3RpbGwgdXNlZCBmb3Igc29tZXRoaW5nIGV2ZW4gaW4gYSBub24tY2dyb3VwIGNvbnRleHQ/CgpNeSBuZXh0IHN0ZXAgaXMgY2xlYXIg4oCTIEkgbmVlZCB0byB0cmFjayBkb3duIGV4YWN0bHkgKndoZXJlKiBgcHJvYWN0aXZlYCBpcyBiZWluZyBzZXQuIFRoYXQmIzM5O3MgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIGl0cyBwdXJwb3NlIGFuZCBpZiBpdCYjMzk7cyByZWxldmFudCBpbiBhbGwgY29uZmlndXJhdGlvbnMuIExldCYjMzk7cyBzdGFydCB0cmFjaW5nIHRoZSBjb2RlIHBhdGhzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDA3OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Byb2FjdGl2ZSA9IDEmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmM9Nzg1NT1pbnQgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbShjaGFyICpidWYsXG4tLVxubW0vdm1zY2FuLmMtNzk0MC1cdFx0XHRcdC5tYXlfc3dhcCA9IDEsXG5tbS92bXNjYW4uYzo3OTQxOlx0XHRcdFx0LnByb2FjdGl2ZSA9IDEsXG5tbS92bXNjYW4uYy03OTQyLVx0XHRcdH07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMDc6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzQ5MwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgdXNlciBhbmQgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkRpdmluZyBpbnRvIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCBpbiBgbW0vdm1zY2FuLmNgKioKCkFscmlnaHQsIEkmIzM5O20gdGhpbmtpbmcgSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIGhvdyBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgaXMgaW1wbGVtZW50ZWQuIEkmIzM5O20gc3BlY2lmaWNhbGx5IGxvb2tpbmcgYXQgd2hlcmUgaXQmIzM5O3MgZGVmaW5lZCBhbmQgdXNlZCB3aXRoaW4gdGhlIGBtbS92bXNjYW4uY2AgZmlsZS4gSSYjMzk7bSBwcm9iYWJseSB0cnlpbmcgdG8gdW5kZXJzdGFuZCB0aGUgY2lyY3Vtc3RhbmNlcyB1bmRlciB3aGljaCB0aGlzIG1lY2hhbmlzbSBnZXRzIHRyaWdnZXJlZC4gSXMgaXQgYW4gYXV0b21hdGljIHJlc3BvbnNlLCBvciBpcyBpdCBpbnZva2VkIGluIGEgbW9yZSBjb250cm9sbGVkIHdheT8gSSBzdXNwZWN0IEkmIzM5O20gZGVhbGluZyB3aXRoIGEgc2NlbmFyaW8gd2hlcmUgdGhlIHN5c3RlbSBpcyBhbnRpY2lwYXRpbmcgbWVtb3J5IHByZXNzdXJlIGFuZCBwcm9hY3RpdmVseSB0cnlpbmcgdG8gZnJlZSB1cCByZXNvdXJjZXMgYmVmb3JlIHRoaW5ncyBnZXQgY3JpdGljYWwuIE1heWJlIEkmIzM5O20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaG93IGFnZ3Jlc3NpdmUgdGhpcyBwcm9hY3RpdmUgcmVjbGFpbSBpcywgYW5kIGhvdyBpdCBiYWxhbmNlcyByZXNvdXJjZSBhbGxvY2F0aW9uIHdpdGggbGF0ZW5jeS4gUGVyaGFwcyBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSB0cmlnZ2Vycy4gSXMgaXQgdGhlIHRhc2sgdGhhdCBpcyBibG9ja2VkPyBPciB0aGUgd2hvbGUgc3lzdGVtPyBFaXRoZXIgd2F5IEkgd2FudCB0byByZW1pbmQgbXlzZWxmIGhvdyB0aGlzIGludGVyYWN0cyB3aXRoIHRoZSBwYWdlIHJlcGxhY2VtZW50IGFsZ29yaXRobXMsIGFuZCB3aGV0aGVyIGl0JiMzOTtzIHRpZWQgdG8gc3BlY2lmaWMgdXNlciBwcm9jZXNzZXMgb3IgYSBtb3JlIGdsb2JhbCBzdHJhdGVneS4gVGltZSB0byBkaXZlIGludG8gdGhlIGNvZGUgYW5kIHNlZSB3aGF0IGluc2lnaHRzIEkgY2FuIGdsZWFuLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAwNzowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzg1NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7Nzg1NTpcdGludCB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltKGNoYXIgKmJ1Zixcbjc4NTY6XHRcdFx0XHQgICBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHBnX2RhdGFfdCAqcGdkYXQpXG43ODU3Olx0e1xuNzg1ODpcdFx0dW5zaWduZWQgaW50IG5yX3JldHJpZXMgPSBNQVhfUkVDTEFJTV9SRVRSSUVTO1xuNzg1OTpcdFx0dW5zaWduZWQgbG9uZyBucl90b19yZWNsYWltLCBucl9yZWNsYWltZWQgPSAwO1xuNzg2MDpcdFx0aW50IHN3YXBwaW5lc3MgPSAtMTtcbjc4NjE6XHRcdGNoYXIgKm9sZF9idWYsICpzdGFydDtcbjc4NjI6XHRcdHN1YnN0cmluZ190IGFyZ3NbTUFYX09QVF9BUkdTXTtcbjc4NjM6XHRcdGdmcF90IGdmcF9tYXNrID0gR0ZQX0tFUk5FTDtcbjc4NjQ6XHRcbjc4NjU6XHRcdGlmICghYnVmIHx8ICghbWVtY2cgXHUwMDI2XHUwMDI2ICFwZ2RhdCkgfHwgKG1lbWNnIFx1MDAyNlx1MDAyNiBwZ2RhdCkpXG43ODY2Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuNzg2NzpcdFxuNzg2ODpcdFx0YnVmID0gc3Ryc3RyaXAoYnVmKTtcbjc4Njk6XHRcbjc4NzA6XHRcdG9sZF9idWYgPSBidWY7XG43ODcxOlx0XHRucl90b19yZWNsYWltID0gbWVtcGFyc2UoYnVmLCBcdTAwMjZidWYpIC8gUEFHRV9TSVpFO1xuNzg3MjpcdFx0aWYgKGJ1ZiA9PSBvbGRfYnVmKVxuNzg3MzpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjc4NzQ6XHRcbjc4NzU6XHRcdGJ1ZiA9IHN0cnN0cmlwKGJ1Zik7XG43ODc2Olx0XG43ODc3Olx0XHR3aGlsZSAoKHN0YXJ0ID0gc3Ryc2VwKFx1MDAyNmJ1ZiwgXCYjMzQ7IFwmIzM0OykpICE9IE5VTEwpIHtcbjc4Nzg6XHRcdFx0aWYgKCFzdHJsZW4oc3RhcnQpKVxuNzg3OTpcdFx0XHRcdGNvbnRpbnVlO1xuNzg4MDpcdFx0XHRzd2l0Y2ggKG1hdGNoX3Rva2VuKHN0YXJ0LCB0b2tlbnMsIGFyZ3MpKSB7XG43ODgxOlx0XHRcdGNhc2UgTUVNT1JZX1JFQ0xBSU1fU1dBUFBJTkVTUzpcbjc4ODI6XHRcdFx0XHRpZiAobWF0Y2hfaW50KFx1MDAyNmFyZ3NbMF0sIFx1MDAyNnN3YXBwaW5lc3MpKVxuNzg4MzpcdFx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG43ODg0Olx0XHRcdFx0aWYgKHN3YXBwaW5lc3MgXHUwMDNjIE1JTl9TV0FQUElORVNTIHx8XG43ODg1Olx0XHRcdFx0ICAgIHN3YXBwaW5lc3MgXHUwMDNlIE1BWF9TV0FQUElORVNTKVxuNzg4NjpcdFx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG43ODg3Olx0XHRcdFx0YnJlYWs7XG43ODg4Olx0XHRcdGNhc2UgTUVNT1JZX1JFQ0xBSU1fU1dBUFBJTkVTU19NQVg6XG43ODg5Olx0XHRcdFx0c3dhcHBpbmVzcyA9IFNXQVBQSU5FU1NfQU5PTl9PTkxZO1xuNzg5MDpcdFx0XHRcdGJyZWFrO1xuNzg5MTpcdFx0XHRkZWZhdWx0OlxuNzg5MjpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuNzg5MzpcdFx0XHR9XG43ODk0Olx0XHR9XG43ODk1Olx0XG43ODk2Olx0XHR3aGlsZSAobnJfcmVjbGFpbWVkIFx1MDAzYyBucl90b19yZWNsYWltKSB7XG43ODk3Olx0XHRcdC8qIFdpbGwgY29udmVyZ2Ugb24gemVybywgYnV0IHJlY2xhaW0gZW5mb3JjZXMgYSBtaW5pbXVtICovXG43ODk4Olx0XHRcdHVuc2lnbmVkIGxvbmcgYmF0Y2hfc2l6ZSA9IChucl90b19yZWNsYWltIC0gbnJfcmVjbGFpbWVkKSAvIDQ7XG43ODk5Olx0XHRcdHVuc2lnbmVkIGxvbmcgcmVjbGFpbWVkO1xuNzkwMDpcdFxuNzkwMTpcdFx0XHQvKlxuNzkwMjpcdFx0XHQgKiBSZXR1cm4gLUVSRVNUQVJUU1lTIHRvIGFsbG93IHRoZSBmcmVlemVyIHRvIGludGVycnVwdCB0aGVcbjc5MDM6XHRcdFx0ICogdGFzay4gVGhlIHN5c2NhbGwgd2lsbCBiZSB0cmFuc3BhcmVudGx5IHJlc3RhcnRlZCB1cG9uXG43OTA0Olx0XHRcdCAqIHJlc3VtZS4gRm9yIHJlYWwgc2lnbmFscywgaXQgZWl0aGVyIHJlc3RhcnRzIHRoZSBzeXNjYWxsXG43OTA1Olx0XHRcdCAqIChpZiBTQV9SRVNUQVJUIGlzIHNldCkgb3IgaXMgY29udmVydGVkIHRvIC1FSU5UUiBieSB0aGVcbjc5MDY6XHRcdFx0ICogc2lnbmFsIGxheWVyLlxuNzkwNzpcdFx0XHQgKi9cbjc5MDg6XHRcdFx0aWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKVxuNzkwOTpcdFx0XHRcdHJldHVybiAtRVJFU1RBUlRTWVM7XG43OTEwOlx0XG43OTExOlx0XHRcdC8qIGNncm91cF9ybWRpcigpIHdhaXRzIGZvciB1cyB3aXRoIGNncm91cF9tdXRleCBoZWxkLiAqL1xuNzkxMjpcdFx0XHRpZiAobWVtY2cgXHUwMDI2XHUwMDI2IG1lbWNnX2lzX2R5aW5nKG1lbWNnKSlcbjc5MTM6XHRcdFx0XHRyZXR1cm4gLUVBR0FJTjtcbjc5MTQ6XHRcbjc5MTU6XHRcdFx0Lypcbjc5MTY6XHRcdFx0ICogVGhpcyBpcyB0aGUgZmluYWwgYXR0ZW1wdCwgZHJhaW4gcGVyY3B1IGxydSBjYWNoZXMgaW4gdGhlXG43OTE3Olx0XHRcdCAqIGhvcGUgb2YgaW50cm9kdWNpbmcgbW9yZSBldmljdGFibGUgcGFnZXMuXG43OTE4Olx0XHRcdCAqL1xuNzkxOTpcdFx0XHRpZiAoIW5yX3JldHJpZXMpXG43OTIwOlx0XHRcdFx0bHJ1X2FkZF9kcmFpbl9hbGwoKTtcbjc5MjE6XHRcbjc5MjI6XHRcdFx0aWYgKG1lbWNnKSB7XG43OTIzOlx0XHRcdFx0dW5zaWduZWQgaW50IHJlY2xhaW1fb3B0aW9ucztcbjc5MjQ6XHRcbjc5MjU6XHRcdFx0XHRyZWNsYWltX29wdGlvbnMgPSBNRU1DR19SRUNMQUlNX01BWV9TV0FQIHxcbjc5MjY6XHRcdFx0XHRcdFx0ICBNRU1DR19SRUNMQUlNX1BST0FDVElWRTtcbjc5Mjc6XHRcdFx0XHRyZWNsYWltZWQgPSB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKG1lbWNnLFxuNzkyODpcdFx0XHRcdFx0XHRcdCBiYXRjaF9zaXplLCBnZnBfbWFzayxcbjc5Mjk6XHRcdFx0XHRcdFx0XHQgcmVjbGFpbV9vcHRpb25zLFxuNzkzMDpcdFx0XHRcdFx0XHRcdCBzd2FwcGluZXNzID09IC0xID8gTlVMTCA6IFx1MDAyNnN3YXBwaW5lc3MpO1xuNzkzMTpcdFx0XHR9IGVsc2Uge1xuNzkzMjpcdFx0XHRcdHN0cnVjdCBzY2FuX2NvbnRyb2wgc2MgPSB7XG43OTMzOlx0XHRcdFx0XHQuZ2ZwX21hc2sgPSBjdXJyZW50X2dmcF9jb250ZXh0KGdmcF9tYXNrKSxcbjc5MzQ6XHRcdFx0XHRcdC5yZWNsYWltX2lkeCA9IGdmcF96b25lKGdmcF9tYXNrKSxcbjc5MzU6XHRcdFx0XHRcdC5wcm9hY3RpdmVfc3dhcHBpbmVzcyA9IHN3YXBwaW5lc3MgPT0gLTEgPyBOVUxMIDogXHUwMDI2c3dhcHBpbmVzcyxcbjc5MzY6XHRcdFx0XHRcdC5wcmlvcml0eSA9IERFRl9QUklPUklUWSxcbjc5Mzc6XHRcdFx0XHRcdC5tYXlfd3JpdGVwYWdlID0gMSxcbjc5Mzg6XHRcdFx0XHRcdC5ucl90b19yZWNsYWltID0gbWF4KGJhdGNoX3NpemUsIFNXQVBfQ0xVU1RFUl9NQVgpLFxuNzkzOTpcdFx0XHRcdFx0Lm1heV91bm1hcCA9IDEsXG43OTQwOlx0XHRcdFx0XHQubWF5X3N3YXAgPSAxLFxuNzk0MTpcdFx0XHRcdFx0LnByb2FjdGl2ZSA9IDEsXG43OTQyOlx0XHRcdFx0fTtcbjc5NDM6XHRcbjc5NDQ6XHRcdFx0XHRpZiAodGVzdF9hbmRfc2V0X2JpdF9sb2NrKFBHREFUX1JFQ0xBSU1fTE9DS0VELFxuNzk0NTpcdFx0XHRcdFx0XHRcdCAgXHUwMDI2cGdkYXQtXHUwMDNlZmxhZ3MpKVxuNzk0NjpcdFx0XHRcdFx0cmV0dXJuIC1FQlVTWTtcbjc5NDc6XHRcbjc5NDg6XHRcdFx0XHRyZWNsYWltZWQgPSBfX25vZGVfcmVjbGFpbShwZ2RhdCwgYmF0Y2hfc2l6ZSwgXHUwMDI2c2MpO1xuNzk0OTpcdFx0XHRcdGNsZWFyX2JpdF91bmxvY2soUEdEQVRfUkVDTEFJTV9MT0NLRUQsIFx1MDAyNnBnZGF0LVx1MDAzZWZsYWdzKTtcbjc5NTA6XHRcdFx0fVxuNzk1MTpcdFxuNzk1MjpcdFx0XHRpZiAoIXJlY2xhaW1lZCBcdTAwMjZcdTAwMjYgIW5yX3JldHJpZXMtLSlcbjc5NTM6XHRcdFx0XHRyZXR1cm4gLUVBR0FJTjtcbjc5NTQ6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMDc6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTM1NgoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDMxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipQcm9hY3RpdmUgUmVjbGFpbSBhbmQgU3dhcHBpbmVzcyBVbmRlciB0aGUgTWljcm9zY29wZSoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGRpZ2dpbmcgaW50byB0aGlzIGFuZCBpdCYjMzk7cyBiZWNvbWluZyBjbGVhciB0aGF0IGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCBjYW4gYmUgY2FsbGVkIHdpdGggYHBnZGF0YCBkaXJlY3RseSwgYnlwYXNzaW5nIHRoZSBuZWVkIGZvciBhIGBtZW1jZ2Agd2hlbiBkZWFsaW5nIHdpdGggcHJvYWN0aXZlIHJlY2xhaW0gYXQgdGhlIG5vZGUgbGV2ZWwuIFRoaXMgbWFrZXMgc2Vuc2U7IEkgY291bGQgc2VlIHRoaXMgYmVpbmcgbGV2ZXJhZ2VkIHRocm91Z2ggc3lzZnMgb3IgcHJvY2ZzLCBtYXliZSB0aGUgYC9zeXMvZGV2aWNlcy9zeXN0ZW0vbm9kZS9ub2RlWC9yZWNsYWltYCBpbnRlcmZhY2UuCgpOb3csIGhlcmUmIzM5O3MgdGhlIGtpY2tlciwgYW5kIHRoaXMgaXMgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZyByZWdhcmRpbmcgYHNjX3N3YXBwaW5lc3NgLiBJIHJlbWVtYmVyIHRoYXQgd2hlbiBgQ09ORklHX01FTUNHYCB3YXMgZGlzYWJsZWQsIGBzY19zd2FwcGluZXNzYCBzaW1wbHkgcmV0dXJuZWQgYFJFQURfT05DRSh2bV9zd2FwcGluZXNzKWAuIFRoYXQmIzM5O3MgdGhlIGJhc2VsaW5lLiBCdXQgbm93LCBpdCYjMzk7cyBiZWVuIHVwZGF0ZWQuIFRoZSBjb2RlIG5vdyBsb29rcyBsaWtlIHRoaXM6CmBgYGMKc3RhdGljIGludCBzY19zd2FwcGluZXNzKHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpCnsKCWlmIChzYy0mZ3Q7cHJvYWN0aXZlICZhbXA7JmFtcDsgc2MtJmd0O3Byb2FjdGl2ZV9zd2FwcGluZXNzKQoJCXJldHVybiAqc2MtJmd0O3Byb2FjdGl2ZV9zd2FwcGluZXNzOwoJcmV0dXJuIG1lbV9jZ3JvdXBfc3dhcHBpbmVzcyhtZW1jZyk7Cn0KYGBgCkFuZCBgbWVtX2Nncm91cF9zd2FwcGluZXNzKG1lbWNnKWAgc3RpbGwgcmV0dXJucyBgUkVBRF9PTkNFKHZtX3N3YXBwaW5lc3MpYCBpZiBgQ09ORklHX01FTUNHX1YxYCBpcyBkaXNhYmxlZC4gU28sIHdpdGhvdXQgYENPTkZJR19NRU1DR2AsIGBzY19zd2FwcGluZXNzYCAqbm93KiBjaGVja3MgYHNjLSZndDtwcm9hY3RpdmUgJmFtcDsmYW1wOyBzYy0mZ3Q7cHJvYWN0aXZlX3N3YXBwaW5lc3NgIGFuZCByZXR1cm5zIHRoYXQgdmFsdWUgaW5zdGVhZCBvZiBqdXN0IHRoZSBnbG9iYWwgYHZtX3N3YXBwaW5lc3NgLiBUaGF0JiMzOTtzIGEgZGVmaW5pdGUgY2hhbmdlIGluIGJlaGF2aW9yLgoKVGhpcyByYWlzZXMgYSBxdWVzdGlvbiBpbiBteSBtaW5kOiBjYW4gYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gIGV2ZW4gYmUgdXNlZCBpZiBgQ09ORklHX01FTUNHYCBpcyBkaXNhYmxlZD8gV2UgbmVlZCB0byB2ZXJpZnkgdGhhdCBjYWxsIHBhdGggdG8gbWFrZSBzdXJlIHRoZSBhc3N1bXB0aW9ucyBhcmUgdmFsaWQuIEkmIzM5O2QgYmV0dGVyIGRvdWJsZSBjaGVjayB3aGVyZSBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgaXMgY2FsbGVkLiBJdCYjMzk7cyBhIGtleSBkZXRhaWwgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZXJhY3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAwNzowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1c2VyX3Byb2FjdGl2ZV9yZWNsYWltJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2ludGVybmFsLmg9NzAyPWV4dGVybiB2b2lkIHJlY2xhaW1fdGhyb3R0bGUocGdfZGF0YV90ICpwZ2RhdCwgZW51bSB2bXNjYW5fdGhyb3R0bGVfc3RhdGUgcmVhc29uKTtcbm1tL2ludGVybmFsLmg6NzAzOmludCB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltKGNoYXIgKmJ1Zixcbm1tL2ludGVybmFsLmgtNzA0LVx0XHRcdCAgIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgcGdfZGF0YV90ICpwZ2RhdCk7XG4tLVxubW0vbWVtY29udHJvbC5jPTUwMDc9c3RhdGljIHNzaXplX3QgbWVtb3J5X3JlY2xhaW0oc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLCBjaGFyICpidWYsXG4tLVxubW0vbWVtY29udHJvbC5jLTUwMTItXG5tbS9tZW1jb250cm9sLmM6NTAxMzpcdHJldCA9IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oYnVmLCBtZW1jZywgTlVMTCk7XG5tbS9tZW1jb250cm9sLmMtNTAxNC1cdGlmIChyZXQpXG4tLVxubW0vdm1zY2FuLmM9Nzg0OT1zdGF0aWMgY29uc3QgbWF0Y2hfdGFibGVfdCB0b2tlbnMgPSB7XG4tLVxubW0vdm1zY2FuLmMtNzg1NC1cbm1tL3Ztc2Nhbi5jOjc4NTU6aW50IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oY2hhciAqYnVmLFxubW0vdm1zY2FuLmMtNzg1Ni1cdFx0XHQgICBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHBnX2RhdGFfdCAqcGdkYXQpXG4tLVxubW0vdm1zY2FuLmM9ODAwOD1zdGF0aWMgc3NpemVfdCByZWNsYWltX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcbi0tXG5tbS92bXNjYW4uYy04MDEzLVxubW0vdm1zY2FuLmM6ODAxNDpcdHJldCA9IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oKGNoYXIgKilidWYsIE5VTEwsIE5PREVfREFUQShuaWQpKTtcbm1tL3Ztc2Nhbi5jLTgwMTUtXHRyZXR1cm4gcmV0ID8gcmV0IDogY291bnQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDA3OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNTQxCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGZyb20gYW4gZXhwZXJ0JiMzOTtzIHBlcnNwZWN0aXZlOgoKKipEaXZpbmcgaW50byBgcmVjbGFpbV9zdG9yZWAgYW5kIFByb2FjdGl2ZSBVc2VyIFJlY2xhaW0qKgoKUmlnaHQsIHNvIEkmIzM5O20gZGlnZ2luZyB0aHJvdWdoIHRoZSBWTSBzdWJzeXN0ZW0sIGFuZCBJIHNlZSB0aGF0IGByZWNsYWltX3N0b3JlYCBmdW5jdGlvbiBpbiBgbW0vdm1zY2FuLmNgLiBJbnRlcmVzdGluZy4gSXQmIzM5O3MgY2FsbGluZyBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgd2hpY2ggaXMgaW1tZWRpYXRlbHkgdGVsbGluZyBtZSBzb21ldGhpbmcgYWJvdXQgaG93IHdlJiMzOTtyZSBpbml0aWF0aW5nIHJlY2xhaW0gZWZmb3J0cywgcGFydGljdWxhcmx5IGluIGEgdXNlciBjb250ZXh0LCBiYXNlZCBvbiB0aGUgYE5PREVfREFUQShuaWQpYCBpbmZvcm1hdGlvbiB0aGF04oCZcyBwYXNzZWQuIEkgd2FudCB0byB1bmRlcnN0YW5kICp3aHkqIGByZWNsYWltX3N0b3JlYCBpcyBkb2luZyB0aGlzIGFuZCB3aGF0IGl04oCZcyBsZXZlcmFnaW5nIGZyb20gdGhlIG5vZGUtc3BlY2lmaWMgZGF0YSBwYXNzZWQuCgpNeSBtZW50YWwgY2hlY2tsaXN0IHN0YXJ0czogd2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBvZiBhIGNhbGwgbGlrZSB0aGlzPyBJcyB0aGlzIHVzZXItdHJpZ2dlcmVkIHJlY2xhaW0sIG9yIHNvbWV0aGluZyBtb3JlIHN5c3RlbWljIHRoYXTigJlzIGJlaW5nICpsZXZlcmFnZWQqIGZvciB1c2VyIHNwYWNlPyBIb3cgZG9lcyB0aGUgbm9kZSBjb250ZXh0IGluZmx1ZW5jZSB0aGUgZGVjaXNpb24tbWFraW5nIHdpdGhpbiBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWA/IElzIHRoaXMgYWJvdXQgbWVtb3J5IHByZXNzdXJlIGhhbmRsaW5nIG9yIG1vcmUgYWJvdXQgc29tZSBraW5kIG9mIHN0b3JhZ2UgcmVzb3VyY2UgaXNzdWU/IExldOKAmXMgZGl2ZSBpbnRvIHRoZSBgcmVjbGFpbV9zdG9yZWAgZnVuY3Rpb24gdG8gc2VlIHdoYXQgdGhpcyBwcm9jZXNzIGxvb2tzIGxpa2UhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDA3OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4MDA4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzgwMDg6XHRzdGF0aWMgc3NpemVfdCByZWNsYWltX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcbjgwMDk6XHRcdFx0XHQgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuODAxMDpcdFx0XHRcdCAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXG44MDExOlx0e1xuODAxMjpcdFx0aW50IHJldCwgbmlkID0gZGV2LVx1MDAzZWlkO1xuODAxMzpcdFxuODAxNDpcdFx0cmV0ID0gdXNlcl9wcm9hY3RpdmVfcmVjbGFpbSgoY2hhciAqKWJ1ZiwgTlVMTCwgTk9ERV9EQVRBKG5pZCkpO1xuODAxNTpcdFx0cmV0dXJuIHJldCA/IHJldCA6IGNvdW50O1xuODAxNjpcdH1cbjgwMTc6XHRcbjgwMTg6XHRzdGF0aWMgREVWSUNFX0FUVFJfV08ocmVjbGFpbSk7XG44MDE5Olx0aW50IHJlY2xhaW1fcmVnaXN0ZXJfbm9kZShzdHJ1Y3Qgbm9kZSAqbm9kZSlcbjgwMjA6XHR7XG44MDIxOlx0XHRyZXR1cm4gZGV2aWNlX2NyZWF0ZV9maWxlKFx1MDAyNm5vZGUtXHUwMDNlZGV2LCBcdTAwMjZkZXZfYXR0cl9yZWNsYWltKTtcbjgwMjI6XHR9XG44MDIzOlx0XG44MDI0Olx0dm9pZCByZWNsYWltX3VucmVnaXN0ZXJfbm9kZShzdHJ1Y3Qgbm9kZSAqbm9kZSlcbjgwMjU6XHR7XG44MDI2Olx0XHRyZXR1cm4gZGV2aWNlX3JlbW92ZV9maWxlKFx1MDAyNm5vZGUtXHUwMDNlZGV2LCBcdTAwMjZkZXZfYXR0cl9yZWNsYWltKTtcbjgwMjc6XHR9XG44MDI4Olx0I2VuZGlmXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDA3OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMTg0CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUuLi4gSSYjMzk7bSBsb29raW5nIGF0IGByZWNsYWltX3N0b3JlYCwgd2hpY2ggSSByZW1lbWJlciBiZWluZyBpbiBgbW0vdm1zY2FuLmNgLiBXYWl0IGEgbWludXRlLi4uIEkgaGF2ZSBhIGZlZWxpbmcgdGhhdCBmdW5jdGlvbiBtaWdodCBiZSBjb25kaXRpb25hbGx5IGNvbXBpbGVkLiBSaWdodCwgSSBuZWVkIHRvIGNoZWNrIGlmIGl0JiMzOTtzIGRlcGVuZGVudCBvbiBhIGAjaWZkZWYgQ09ORklHX05VTUFgIG9yIHNvbWV0aGluZyBzaW1pbGFyLiBCZXN0IHdheSB0byBjb25maXJtIHF1aWNrbHkgaXMgdG8gZmluZCB0aGUgY29ycmVzcG9uZGluZyBgI2VuZGlmYC4gQWxyaWdodCwgbGV0JiMzOTtzIHpvb20gaW4gb24gbGluZSA4MDI4IGFuZCBzZWUgaWYgdGhhdCBpcyB0aGUgY29udHJvbGxpbmcgY29uZGl0aW9uYWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDA3OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0OyNpZmRlZi4qTlVNQSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTc2MjE9c3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgdm1zY2FuX3N5c2N0bF90YWJsZVtdID0ge1xuLS1cbm1tL3Ztc2Nhbi5jLTc2MzAtXHR9LFxubW0vdm1zY2FuLmM6NzYzMTojaWZkZWYgQ09ORklHX05VTUFcbm1tL3Ztc2Nhbi5jLTc2MzItXHR7XG4tLVxubW0vdm1zY2FuLmM9NzY1Mz1tb2R1bGVfaW5pdChrc3dhcGRfaW5pdClcbm1tL3Ztc2Nhbi5jLTc2NTQtXG5tbS92bXNjYW4uYzo3NjU1OiNpZmRlZiBDT05GSUdfTlVNQVxubW0vdm1zY2FuLmMtNzY1Ni0vKlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAwNzowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTUzMgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhIGZpcnN0LXBlcnNvbiBleHBlcnQgc3VtbWFyeToKCioqRGlnZ2luZyBpbnRvIG1tL3Ztc2Nhbi5jOiBFeHBsb3JpbmcgQ29uZGl0aW9uYWwgQ29tcGlsYXRpb24qKgoKQWxyaWdodCwgSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB3aGF0JiMzOTtzIGdvaW5nIG9uIHdpdGggdGhpcyBjb2RlLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZ29pbmcgdG8ganVtcCBpbnRvIGBtbS92bXNjYW4uY2AgYW5kIHRha2UgYSBsb29rIGFyb3VuZCBsaW5lIDc2NTUuIE15IG1haW4gZ29hbCBoZXJlIGlzIHRvIGZpZ3VyZSBvdXQgd2hhdCBmdW5jdGlvbmFsaXR5IGlzIGJlaW5nIGNvbnRyb2xsZWQgYnkgdGhhdCBgI2lmZGVmYCBkaXJlY3RpdmUuIEkgc3VzcGVjdCBpdCYjMzk7cyBsaWtlbHkgcmVsYXRlZCB0byBzb21lIGtpbmQgb2YgZmVhdHVyZSB0b2dnbGUsIHBvc3NpYmx5IGEgZGVidWcgbW9kZSwgb3IgbWF5YmUgYSBwbGF0Zm9ybS1zcGVjaWZpYyBvcHRpbWl6YXRpb24uIFVuZGVyc3RhbmRpbmcgdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIHBhdGggaXMgY3J1Y2lhbCBmb3IgbWUgdG8gZnVsbHkgZ3Jhc3AgdGhlIGV4ZWN1dGlvbiBmbG93IGFuZCB0aGUgdmFyaW91cyBjb2RlIHBhdGhzIHdpdGhpbiB0aGUgdmlydHVhbCBtZW1vcnkgbWFuYWdlbWVudCBzeXN0ZW0uIEtub3dpbmcgd2hpY2ggc2VjdGlvbnMgb2YgY29kZSBhcmUgaW5jbHVkZWQgb3IgZXhjbHVkZWQgYmFzZWQgb24gdGhlIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzIHdpbGwgYWxzbyBoZWxwIG1lIHVuZGVyc3RhbmQgaG93IHRoaXMgY29kZSBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgc3lzdGVtLCBhbmQgd2hhdCBpbXBhY3QgaXQgaGFzIG9uIHBlcmZvcm1hbmNlIGFuZCByZXNvdXJjZSB1dGlsaXphdGlvbiBpbiBkaWZmZXJlbnQgY29uZmlndXJhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDA3OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3NjU1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0Ozc2NTU6XHQjaWZkZWYgQ09ORklHX05VTUFcbjc2NTY6XHQvKlxuNzY1NzpcdCAqIE5vZGUgcmVjbGFpbSBtb2RlXG43NjU4Olx0ICpcbjc2NTk6XHQgKiBJZiBub24temVybyBjYWxsIG5vZGVfcmVjbGFpbSB3aGVuIHRoZSBudW1iZXIgb2YgZnJlZSBwYWdlcyBmYWxscyBiZWxvd1xuNzY2MDpcdCAqIHRoZSB3YXRlcm1hcmtzLlxuNzY2MTpcdCAqL1xuNzY2MjpcdGludCBub2RlX3JlY2xhaW1fbW9kZSBfX3JlYWRfbW9zdGx5O1xuNzY2MzpcdFxuNzY2NDpcdC8qXG43NjY1Olx0ICogUHJpb3JpdHkgZm9yIE5PREVfUkVDTEFJTS4gVGhpcyBkZXRlcm1pbmVzIHRoZSBmcmFjdGlvbiBvZiBwYWdlc1xuNzY2NjpcdCAqIG9mIGEgbm9kZSBjb25zaWRlcmVkIGZvciBlYWNoIHpvbmVfcmVjbGFpbS4gNCBzY2FucyAxLzE2dGggb2Zcbjc2Njc6XHQgKiBhIHpvbmUuXG43NjY4Olx0ICovXG43NjY5Olx0I2RlZmluZSBOT0RFX1JFQ0xBSU1fUFJJT1JJVFkgNFxuNzY3MDpcdFxuNzY3MTpcdC8qXG43NjcyOlx0ICogUGVyY2VudGFnZSBvZiBwYWdlcyBpbiBhIHpvbmUgdGhhdCBtdXN0IGJlIHVubWFwcGVkIGZvciBub2RlX3JlY2xhaW0gdG9cbjc2NzM6XHQgKiBvY2N1ci5cbjc2NzQ6XHQgKi9cbjc2NzU6XHRpbnQgc3lzY3RsX21pbl91bm1hcHBlZF9yYXRpbyA9IDE7XG43Njc2Olx0XG43Njc3Olx0Lypcbjc2Nzg6XHQgKiBJZiB0aGUgbnVtYmVyIG9mIHNsYWIgcGFnZXMgaW4gYSB6b25lIGdyb3dzIGJleW9uZCB0aGlzIHBlcmNlbnRhZ2UgdGhlblxuNzY3OTpcdCAqIHNsYWIgcmVjbGFpbSBuZWVkcyB0byBvY2N1ci5cbjc2ODA6XHQgKi9cbjc2ODE6XHRpbnQgc3lzY3RsX21pbl9zbGFiX3JhdGlvID0gNTtcbjc2ODI6XHRcbjc2ODM6XHRzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbm9kZV91bm1hcHBlZF9maWxlX3BhZ2VzKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQpXG43Njg0Olx0e1xuNzY4NTpcdFx0dW5zaWduZWQgbG9uZyBmaWxlX21hcHBlZCA9IG5vZGVfcGFnZV9zdGF0ZShwZ2RhdCwgTlJfRklMRV9NQVBQRUQpO1xuNzY4NjpcdFx0dW5zaWduZWQgbG9uZyBmaWxlX2xydSA9IG5vZGVfcGFnZV9zdGF0ZShwZ2RhdCwgTlJfSU5BQ1RJVkVfRklMRSkgJiM0Mztcbjc2ODc6XHRcdFx0bm9kZV9wYWdlX3N0YXRlKHBnZGF0LCBOUl9BQ1RJVkVfRklMRSk7XG43Njg4Olx0XG43Njg5Olx0XHQvKlxuNzY5MDpcdFx0ICogSXQmIzM5O3MgcG9zc2libGUgZm9yIHRoZXJlIHRvIGJlIG1vcmUgZmlsZSBtYXBwZWQgcGFnZXMgdGhhblxuNzY5MTpcdFx0ICogYWNjb3VudGVkIGZvciBieSB0aGUgcGFnZXMgb24gdGhlIGZpbGUgTFJVIGxpc3RzIGJlY2F1c2Vcbjc2OTI6XHRcdCAqIHRtcGZzIHBhZ2VzIGFjY291bnRlZCBmb3IgYXMgQU5PTiBjYW4gYWxzbyBiZSBGSUxFX01BUFBFRFxuNzY5MzpcdFx0ICovXG43Njk0Olx0XHRyZXR1cm4gKGZpbGVfbHJ1IFx1MDAzZSBmaWxlX21hcHBlZCkgPyAoZmlsZV9scnUgLSBmaWxlX21hcHBlZCkgOiAwO1xuNzY5NTpcdH1cbjc2OTY6XHRcbjc2OTc6XHQvKiBXb3JrIG91dCBob3cgbWFueSBwYWdlIGNhY2hlIHBhZ2VzIHdlIGNhbiByZWNsYWltIGluIHRoaXMgcmVjbGFpbV9tb2RlICovXG43Njk4Olx0c3RhdGljIHVuc2lnbmVkIGxvbmcgbm9kZV9wYWdlY2FjaGVfcmVjbGFpbWFibGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdClcbjc2OTk6XHR7XG43NzAwOlx0XHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VjYWNoZV9yZWNsYWltYWJsZTtcbjc3MDE6XHRcdHVuc2lnbmVkIGxvbmcgZGVsdGEgPSAwO1xuNzcwMjpcdFxuNzcwMzpcdFx0Lypcbjc3MDQ6XHRcdCAqIElmIFJFQ0xBSU1fVU5NQVAgaXMgc2V0LCB0aGVuIGFsbCBmaWxlIHBhZ2VzIGFyZSBjb25zaWRlcmVkXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDA3OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNTY2CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKk5hdmlnYXRpbmcgYSBMYWJ5cmludGhpbmUgQ29kZWJhc2UqKgoKT2theSwgc28gSSYjMzk7bSB0cnlpbmcgdG8gdHJhY2sgZG93biB3aGVyZSBgcmVjbGFpbV9zdG9yZWAgaXMgZGVmaW5lZC4gSSBrbm93IGl0JiMzOTtzIHNvbWV3aGVyZSBpbiB0aGlzIG1hc3NpdmUgY29kZWJhc2UsIGFuZCB0aGUgbGluZSBudW1iZXIgSSBoYXZlIGlzIDgwMDguIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LCBidXQgd2l0aG91dCBjb250ZXh0LCBpdCYjMzk7cyBqdXN0IGEgbnVtYmVyLiBHaXZlbiB0aGUgbmF0dXJlIG9mIHRoaXMgcHJvamVjdCwgSSBzdHJvbmdseSBzdXNwZWN0IGl0IG1pZ2h0IGJlIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQuIE15IHByaW1hcnkgc3VzcGljaW9uIGlzIHRoYXQgdGhpcyBmdW5jdGlvbmFsaXR5IGlzIHRpZWQgdG8gTlVNQSAoTm9uLVVuaWZvcm0gTWVtb3J5IEFjY2Vzcykgc3lzdGVtcy4gVGhlc2UgYXJlIGNvbXBsZXggYXJjaGl0ZWN0dXJlcywgYW5kIHN0b3JlIHJlY2xhbWF0aW9uIGNvdWxkIGJlIHZlcnkgZGlmZmVyZW50IGlmIE5VTUEgaXMgZW5hYmxlZC4gU28sIHRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gZG8gaXMgcXVpY2tseSBjaGVjayBpZiBsaW5lIDgwMDggaXMgbmVzdGxlZCB3aXRoaW4gYW4gYCNpZmRlZiBDT05GSUdfTlVNQWAgYmxvY2suIElmIGl0IGlzLCB0aGVuIEkmIzM5O2xsIGtub3cgSSYjMzk7bSBvbiB0aGUgcmlnaHQgdHJhY2s7IG15IGFzc3VtcHRpb25zIGFyZSBob2xkaW5nLCBhbmQgSSBzaG91bGQgZm9jdXMgbXkgZGVlcGVyIGludmVzdGlnYXRpb24gdG8gdGhhdCBzcGVjaWZpYyBwYXJ0IG9mIHRoZSBjb2RlLiBJZiBub3QsIHRoZW4gSSYjMzk7bSBnb2luZyB0byBoYXZlIHRvIGJyb2FkZW4gdGhlIHNlYXJjaCBwYXJhbWV0ZXJzLCBsb29rIGF0IHRoZSBidWlsZCBjb25maWd1cmF0aW9uLCBhbmQgdHJ5IHRvIHVuZGVyc3RhbmQgd2hhdCBvdGhlciBjb25kaXRpb25zIG1pZ2h0IGJlIGdvdmVybmluZyB0aGUgcHJlc2VuY2Ugb2YgdGhpcyBmdW5jdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMDc6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDc5ODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7Nzk4MDpcdFxuNzk4MTpcdFx0XHRwZ3NjYW5uZWQgJiM0Mzs9IG5yX3BhZ2VzO1xuNzk4MjpcdFxuNzk4MzpcdFx0XHQvKiBibG9jayBtZW1jZyBtaWdyYXRpb24gd2hpbGUgdGhlIGZvbGlvIG1vdmVzIGJldHdlZW4gbHJ1cyAqL1xuNzk4NDpcdFx0XHRpZiAoIWZvbGlvX3Rlc3RfY2xlYXJfbHJ1KGZvbGlvKSlcbjc5ODU6XHRcdFx0XHRjb250aW51ZTtcbjc5ODY6XHRcbjc5ODc6XHRcdFx0bHJ1dmVjID0gZm9saW9fbHJ1dmVjX3JlbG9ja19pcnEoZm9saW8sIGxydXZlYyk7XG43OTg4Olx0XHRcdGlmIChmb2xpb19ldmljdGFibGUoZm9saW8pIFx1MDAyNlx1MDAyNiBmb2xpb190ZXN0X3VuZXZpY3RhYmxlKGZvbGlvKSkge1xuNzk4OTpcdFx0XHRcdGxydXZlY19kZWxfZm9saW8obHJ1dmVjLCBmb2xpbyk7XG43OTkwOlx0XHRcdFx0Zm9saW9fY2xlYXJfdW5ldmljdGFibGUoZm9saW8pO1xuNzk5MTpcdFx0XHRcdGxydXZlY19hZGRfZm9saW8obHJ1dmVjLCBmb2xpbyk7XG43OTkyOlx0XHRcdFx0cGdyZXNjdWVkICYjNDM7PSBucl9wYWdlcztcbjc5OTM6XHRcdFx0fVxuNzk5NDpcdFx0XHRmb2xpb19zZXRfbHJ1KGZvbGlvKTtcbjc5OTU6XHRcdH1cbjc5OTY6XHRcbjc5OTc6XHRcdGlmIChscnV2ZWMpIHtcbjc5OTg6XHRcdFx0X19jb3VudF92bV9ldmVudHMoVU5FVklDVEFCTEVfUEdSRVNDVUVELCBwZ3Jlc2N1ZWQpO1xuNzk5OTpcdFx0XHRfX2NvdW50X3ZtX2V2ZW50cyhVTkVWSUNUQUJMRV9QR1NDQU5ORUQsIHBnc2Nhbm5lZCk7XG44MDAwOlx0XHRcdGxydXZlY191bmxvY2tfaXJxKGxydXZlYyk7XG44MDAxOlx0XHR9IGVsc2UgaWYgKHBnc2Nhbm5lZCkge1xuODAwMjpcdFx0XHRjb3VudF92bV9ldmVudHMoVU5FVklDVEFCTEVfUEdTQ0FOTkVELCBwZ3NjYW5uZWQpO1xuODAwMzpcdFx0fVxuODAwNDpcdH1cbjgwMDU6XHRFWFBPUlRfU1lNQk9MX0dQTChjaGVja19tb3ZlX3VuZXZpY3RhYmxlX2ZvbGlvcyk7XG44MDA2Olx0XG44MDA3Olx0I2lmIGRlZmluZWQoQ09ORklHX1NZU0ZTKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfTlVNQSlcbjgwMDg6XHRzdGF0aWMgc3NpemVfdCByZWNsYWltX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcbjgwMDk6XHRcdFx0XHQgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuODAxMDpcdFx0XHRcdCAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXG44MDExOlx0e1xuODAxMjpcdFx0aW50IHJldCwgbmlkID0gZGV2LVx1MDAzZWlkO1xuODAxMzpcdFxuODAxNDpcdFx0cmV0ID0gdXNlcl9wcm9hY3RpdmVfcmVjbGFpbSgoY2hhciAqKWJ1ZiwgTlVMTCwgTk9ERV9EQVRBKG5pZCkpO1xuODAxNTpcdFx0cmV0dXJuIHJldCA/IHJldCA6IGNvdW50O1xuODAxNjpcdH1cbjgwMTc6XHRcbjgwMTg6XHRzdGF0aWMgREVWSUNFX0FUVFJfV08ocmVjbGFpbSk7XG44MDE5Olx0aW50IHJlY2xhaW1fcmVnaXN0ZXJfbm9kZShzdHJ1Y3Qgbm9kZSAqbm9kZSlcbjgwMjA6XHR7XG44MDIxOlx0XHRyZXR1cm4gZGV2aWNlX2NyZWF0ZV9maWxlKFx1MDAyNm5vZGUtXHUwMDNlZGV2LCBcdTAwMjZkZXZfYXR0cl9yZWNsYWltKTtcbjgwMjI6XHR9XG44MDIzOlx0XG44MDI0Olx0dm9pZCByZWNsYWltX3VucmVnaXN0ZXJfbm9kZShzdHJ1Y3Qgbm9kZSAqbm9kZSlcbjgwMjU6XHR7XG44MDI2Olx0XHRyZXR1cm4gZGV2aWNlX3JlbW92ZV9maWxlKFx1MDAyNm5vZGUtXHUwMDNlZGV2LCBcdTAwMjZkZXZfYXR0cl9yZWNsYWltKTtcbjgwMjc6XHR9XG44MDI4Olx0I2VuZGlmXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDA3OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNjU0CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMjAwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYHJlY2xhaW1fc3RvcmVgIEZ1bmN0aW9uYWxpdHkqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gaG93IHRoaXMgYHJlY2xhaW1fc3RvcmVgIGZ1bmN0aW9uIGJlaGF2ZXMsIHNwZWNpZmljYWxseSBjb25zaWRlcmluZyBpdHMgZGVwZW5kZW5jaWVzLiBJIHNlZSB0aGF0IGl0JiMzOTtzIG5lc3RsZWQgdW5kZXIgYm90aCBgQ09ORklHX1NZU0ZTYCBhbmQgYENPTkZJR19OVU1BYCwgd2hpY2ggaW1tZWRpYXRlbHkgcmFpc2VzIGEgZmxhZy4gRXZlbiBpZiBgQ09ORklHX01FTUNHYCBpcyBkaXNhYmxlZCwgZW5hYmxpbmcgYm90aCBgTlVNQWAgYW5kIGBTWVNGU2Agb3BlbnMgYSBwb3RlbnRpYWwgZG9vci4gSXQgbG9va3MgbGlrZSBhIHVzZXIgY291bGQgdHJpZ2dlciBwcm9hY3RpdmUgcmVjbGFpbSBvbiBhIG5vZGUgZGlyZWN0bHkgdGhyb3VnaCBzeXNmcyB1bmRlciB0aG9zZSBjb25kaXRpb25zLgoKSWYgdGhhdCBoYXBwZW5zLCBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgZ2V0cyBjYWxsZWQuIExldCYjMzk7cyBzZWUuLi4gaXQgcGFyc2VzIHRoZSBpbnB1dCBidWZmZXIuIEFoLCBpZiBpdCBmaW5kcyBgc3dhcHBpbmVzcz1YYCwgaXQgdXBkYXRlcyB0aGUgYHN3YXBwaW5lc3NgIHZhbHVlIGFuZCBwYXNzZXMgdGhhdCBwb2ludGVyIHRvIGBzYy5wcm9hY3RpdmVfc3dhcHBpbmVzc2AuIFRoZSBhY3Rpb24gdGhlbiB0cmlnZ2VycyBgX19ub2RlX3JlY2xhaW1gLiBUaGlzLCBpbiB0dXJuLCBzZWVtcyB0byBldmVudHVhbGx5IGJvaWwgZG93biB0byBlaXRoZXIgYHNocmlua19ub2RlYCBvciBzaW1pbGFyIGZ1bmN0aW9ucywgd2hpY2ggcmVseSBvbiBgc2Nfc3dhcHBpbmVzcyhzYywgbWVtY2cpYC4KCkhvbGQgb24sIEkgbmVlZCB0byBjaGVjayB3aGVyZSBgX19ub2RlX3JlY2xhaW1gIGlzIGRlZmluZWQsIGFoIHllcywgYG1tL3Ztc2Nhbi5jYC4gQWxyaWdodCwgSSBuZWVkIHRvIGdvIGJhY2sgYW5kIGNoZWNrIGV4YWN0bHkgaG93IHRoZSBgc2Nfc3dhcHBpbmVzc2AgZnVuY3Rpb24gaXMgdXRpbGl6ZWQgd2l0aGluIHRoZSBzY29wZSBvZiB0aGlzIHBhcnRpY3VsYXIgZnVuY3Rpb24uIEl0IHNlZW1zIGxpa2UgdGhlIHN3YXBwaW5lc3MgZmFjdG9yIGlzIGtleSBoZXJlIGFuZCB0aGF0JiMzOTtzIHNvbWV0aGluZyBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAwNzowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzY19zd2FwcGluZXNzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTc1PXN0cnVjdCBzY2FuX2NvbnRyb2wge1xuLS1cbm1tL3Ztc2Nhbi5jLTk2LVxubW0vdm1zY2FuLmM6OTc6XHQvKiBTd2FwcGluZXNzIHZhbHVlIGZvciBwcm9hY3RpdmUgcmVjbGFpbS4gQWx3YXlzIHVzZSBzY19zd2FwcGluZXNzKCkhICovXG5tbS92bXNjYW4uYy05OC1cdGludCAqcHJvYWN0aXZlX3N3YXBwaW5lc3M7XG4tLVxubW0vdm1zY2FuLmM9MjAwPWludCB2bV9zd2FwcGluZXNzID0gNjA7XG5tbS92bXNjYW4uYy0yMDEtXG5tbS92bXNjYW4uYzoyMDI6c3RhdGljIGludCBzY19zd2FwcGluZXNzKHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG5tbS92bXNjYW4uYy0yMDMte1xuLS1cbm1tL3Ztc2Nhbi5jPTI0Nzk9c3RhdGljIHZvaWQgZ2V0X3NjYW5fY291bnQoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYyxcbi0tXG5tbS92bXNjYW4uYy0yNDgzLVx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbHJ1dmVjX21lbWNnKGxydXZlYyk7XG5tbS92bXNjYW4uYzoyNDg0Olx0aW50IHN3YXBwaW5lc3MgPSBzY19zd2FwcGluZXNzKHNjLCBtZW1jZyk7XG5tbS92bXNjYW4uYy0yNDg1LVx0dTY0IGZyYWN0aW9uW0FOT05fQU5EX0ZJTEVdO1xuLS1cbm1tL3Ztc2Nhbi5jPTI2ODc9c3RhdGljIGludCBnZXRfc3dhcHBpbmVzcyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTI2OTgtXG5tbS92bXNjYW4uYzoyNjk5Olx0cmV0dXJuIHNjX3N3YXBwaW5lc3Moc2MsIG1lbWNnKTtcbm1tL3Ztc2Nhbi5jLTI3MDAtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAwNzowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDU4MwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDQzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFN3YXBwaW5lc3MgQmVoYXZpb3IgQ2hhbmdlKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gZGlnZ2luZyBpbnRvIHRoaXMgcGF0Y2guIEJlZm9yZSB0aGlzIGNoYW5nZSwgdGhlIGBzY19zd2FwcGluZXNzYCBmdW5jdGlvbiBoYWQgYSBuYXN0eSBsaXR0bGUgZ290Y2hhOiBpZiBgQ09ORklHX01FTUNHYCB3YXMgZGlzYWJsZWQsIGFueSBjdXN0b20gYHN3YXBwaW5lc3NgIHZhbHVlIGEgdXNlciBzZXQgdmlhIHN5c2ZzIHRvIHRyaWdnZXIgcHJvYWN0aXZlIHJlY2xhaW0gd2FzIGNvbXBsZXRlbHkgaWdub3JlZC4gSXQgd291bGQganVzdCBkZWZhdWx0IHRvIHRoZSBnbG9iYWwgYHZtX3N3YXBwaW5lc3NgLiBUaGF0JiMzOTtzIG5vdCBpZGVhbCwgZXNwZWNpYWxseSBmb3IgYW55b25lIHRyeWluZyB0byBmaW5lbHkgdHVuZSBtZW1vcnkgbWFuYWdlbWVudCBpbiBhIHN5c3RlbSB3aXRob3V0IG1lbWNnIGVuYWJsZWQuCgpUaGlzIHBhdGNoIGFkZHJlc3NlcyB0aGF0IGRpcmVjdGx5LiBJdCYjMzk7cyBub3cgdW5jb25kaXRpb25hbGx5IGRlZmluZWQgdG8gdXNlIHRoZSBgc2MtJmd0O3Byb2FjdGl2ZV9zd2FwcGluZXNzYCB2YWx1ZSAqaWYqIHByb2FjdGl2ZSByZWNsYWltIGlzIGJlaW5nIHVzZWQuIElmIG5vIHByb2FjdGl2ZSBgc3dhcHBpbmVzc2AgaXMgc2V0IGl0IGZhbGxzIGJhY2sgdG8gdGhlIGRlZmF1bHQgYG1lbV9jZ3JvdXBfc3dhcHBpbmVzc2AgaWYgYG1lbWNnYCBpcyBlbmFibGVkLiBUaGF0JiMzOTtzIGEgc29saWQgaW1wcm92ZW1lbnQhIE5vdywgZXZlbiB3aXRob3V0IG1lbWNnLCB0aGUgdXNlci1kZWZpbmVkIGBzd2FwcGluZXNzYCBpbiB0aGUgc3lzZnMgbm9kZSB3aWxsIGFjdHVhbGx5IGJlIHJlc3BlY3RlZCBkdXJpbmcgcHJvYWN0aXZlIHJlY2xhaW0uIEl0JiMzOTtzIGEgY2xlYXIgZnVuY3Rpb25hbCBpbXByb3ZlbWVudC4KCkxldCYjMzk7cyBtYWtlIHN1cmUgdGhpcyBhbGwgaG9sZHMgdXAuIEZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSB0aGF0IGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCAqY2FuKiBiZSBjYWxsZWQgd2hlbiBgQ09ORklHX01FTUNHYCBpcyBvZmYuIFJpZ2h0LCBpdCYjMzk7cyB0aWVkIHRvIGBDT05GSUdfU1lTRlNgIGFuZCBgQ09ORklHX05VTUFgLCBub3QgYENPTkZJR19NRU1DR2AsIHNvIHRoYXQgc2hvdWxkIGJlIGZpbmUuIE9rYXksIHdoZXJlIGVsc2UgaXMgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gIGJlaW5nIGNhbGxlZD8gTGV0JiMzOTtzIGNoZWNrIGBtbS9tZW1jb250cm9sLmNgLiBOb3BlLCB0aGF0IHBhcnQgb2YgdGhlIGNvZGUgaXMgb25seSBjb21waWxlZCBpZiBgQ09ORklHX01FTUNHYCBpcyBlbmFibGVkLiBIb3dldmVyLCBgbW0vdm1zY2FuLmNgIGlzIGFsd2F5cyBjb21waWxlZC4gU28sIGV2ZW4gd2l0aG91dCBgQ09ORklHX01FTUNHYCwgdGhlIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCBmdW5jdGlvbiBpcyBjb21waWxlZCBhbmQgaXMgYWNjZXNzaWJsZSB2aWEgdGhlIHN5c2ZzIG5vZGUgYHJlY2xhaW1gLiBKdXN0IHdhbnQgdG8gdHJpcGxlLWNoZWNrIHRoYXQuIFNlZW1zIHRvIGJlIHdvcmtpbmcgYXMgZXhwZWN0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDA3OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3VzZXJfcHJvYWN0aXZlX3JlY2xhaW0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bXNjYW4uYz03ODQ5PXN0YXRpYyBjb25zdCBtYXRjaF90YWJsZV90IHRva2VucyA9IHtcbi0tXG5tbS92bXNjYW4uYy03ODU0LVxubW0vdm1zY2FuLmM6Nzg1NTppbnQgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbShjaGFyICpidWYsXG5tbS92bXNjYW4uYy03ODU2LVx0XHRcdCAgIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgcGdfZGF0YV90ICpwZ2RhdClcbi0tXG5tbS92bXNjYW4uYz04MDA4PXN0YXRpYyBzc2l6ZV90IHJlY2xhaW1fc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbm1tL3Ztc2Nhbi5jLTgwMTMtXG5tbS92bXNjYW4uYzo4MDE0Olx0cmV0ID0gdXNlcl9wcm9hY3RpdmVfcmVjbGFpbSgoY2hhciAqKWJ1ZiwgTlVMTCwgTk9ERV9EQVRBKG5pZCkpO1xubW0vdm1zY2FuLmMtODAxNS1cdHJldHVybiByZXQgPyByZXQgOiBjb3VudDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMDc6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU2NzAKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHRoaXMgdGFzaywgYXMgaWYgdGhlc2Ugd2VyZSBteSBpbnRlcm5hbCB0aG91Z2h0czoKCioqSW52ZXN0aWdhdGluZyBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgaW4gYG1tL3Ztc2Nhbi5jYCB1bmRlciBgQ09ORklHX01FTUNHYCoqCgpBbHJpZ2h0LCBzbyB3ZSBuZWVkIHRvIHNlZSB3aGVyZSBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgaXMgYmVpbmcgdXNlZCwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYG1tL3Ztc2Nhbi5jYCBmaWxlLiBUaGUgYWRkZWQgd3JpbmtsZSBpcyB0aGF0IHdlJiMzOTtyZSBvbmx5IGludGVyZXN0ZWQgaW4gaXRzIG9jY3VycmVuY2VzICppZiogdGhleSYjMzk7cmUgd3JhcHBlZCBpbnNpZGUgYW4gYCNpZmRlZiBDT05GSUdfTUVNQ0dgIHByZXByb2Nlc3NvciBkaXJlY3RpdmUuIFRoaXMgc3VnZ2VzdHMgYSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBzY2VuYXJpbywgYW5kIHdlIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAmIzM5O3MgYmVoYXZpb3Igb3IgaW5jbHVzaW9uIGluIHRoZSBjb2RlIGlzIHRpZWQgdG8gdGhlIG1lbW9yeSBjb250cm9sIGdyb3VwIGZ1bmN0aW9uYWxpdHkuIFRoaXMgaXMgYSBjb21tb24gcGF0dGVybiwgYW5kIHByb2JhYmx5IGluZGljYXRlcyBhIGZ1bmN0aW9uL3ZhcmlhYmxlIGlzIHNwZWNpZmljYWxseSBwYXJ0IG9mIHRoZSBNRU1DRyBjb2RlIHBhdGguCgpFc3NlbnRpYWxseSwgSSYjMzk7bSBnb2luZyB0byBsb29rIGZvciBsaW5lcyBpbiBgbW0vdm1zY2FuLmNgIHRoYXQgbG9vayBzb21ldGhpbmcgbGlrZSB0aGlzOgoKYGBgYwojaWZkZWYgQ09ORklHX01FTUNHCiAgLy8gU29tZXRoaW5nIHVzaW5nIHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0gaGVyZQojZW5kaWYKYGBgCgpJJiMzOTtsbCBiZSBzcGVjaWZpY2FsbHkgc2Nhbm5pbmcgZm9yIGxpbmVzIHRoYXQgZGVmaW5lIHRoaXMgdmFyaWFibGUgYW5kIHdoYXQgaXQgaXMgdXNlZCBmb3IgaW4gdGhlIE1FTUNHIGNvbmZpZy4KSSB3aWxsIGhhdmUgdG8gZmlndXJlIG91dCBob3cgdGhpcyBpcyBkb25lIGJlc3QsIHN1Y2ggYXMgZ3JlcCB3aXRoIHJlZ2V4LCBvciB0aHJvdWdoIG90aGVyIHRvb2xzLiBUaGlzIHdpbGwgZ2l2ZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIGV4cGxvcmluZyB0aGF0IHBhcnQgb2YgdGhlIGNvZGUuCgpUaGlzIHdpbGwgZ2l2ZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIG15IGludmVzdGlnYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDA3OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0OyNpZmRlZi4qTUVNQ0cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bXNjYW4uYz0yMDI9c3RhdGljIGludCBzY19zd2FwcGluZXNzKHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4tLVxubW0vdm1zY2FuLmMtMjA4LVxubW0vdm1zY2FuLmM6MjA5OiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL3Ztc2Nhbi5jLTIxMC1cbi0tXG5tbS92bXNjYW4uYz0yNjY3PXN0YXRpYyBzdHJ1Y3QgbHJ1dmVjICpnZXRfbHJ1dmVjKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IG5pZClcbi0tXG5tbS92bXNjYW4uYy0yNjcwLVxubW0vdm1zY2FuLmM6MjY3MTojaWZkZWYgQ09ORklHX01FTUNHXG5tbS92bXNjYW4uYy0yNjcyLVx0aWYgKG1lbWNnKSB7XG4tLVxubW0vdm1zY2FuLmM9MjgyMT1zdGF0aWMgc3RydWN0IGxydV9nZW5fbW1fbGlzdCAqZ2V0X21tX2xpc3Qoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuLS1cbm1tL3Ztc2Nhbi5jLTI4MjctXG5tbS92bXNjYW4uYzoyODI4OiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL3Ztc2Nhbi5jLTI4MjktXHRpZiAobWVtY2cpXG4tLVxubW0vdm1zY2FuLmM9Mjg2MT12b2lkIGxydV9nZW5fYWRkX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuLS1cbm1tL3Ztc2Nhbi5jLTI4NjctXHRWTV9XQVJOX09OX09OQ0UoIWxpc3RfZW1wdHkoXHUwMDI2bW0tXHUwMDNlbHJ1X2dlbi5saXN0KSk7XG5tbS92bXNjYW4uYzoyODY4OiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL3Ztc2Nhbi5jLTI4NjktXHRWTV9XQVJOX09OX09OQ0UobW0tXHUwMDNlbHJ1X2dlbi5tZW1jZyk7XG4tLVxubW0vdm1zY2FuLmM9Mjg4OD12b2lkIGxydV9nZW5fZGVsX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuLS1cbm1tL3Ztc2Nhbi5jLTI4OTYtXG5tbS92bXNjYW4uYzoyODk3OiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL3Ztc2Nhbi5jLTI4OTgtXHRtZW1jZyA9IG1tLVx1MDAzZWxydV9nZW4ubWVtY2c7XG4tLVxubW0vdm1zY2FuLmMtMjkyMC1cbm1tL3Ztc2Nhbi5jOjI5MjE6I2lmZGVmIENPTkZJR19NRU1DR1xubW0vdm1zY2FuLmMtMjkyMi1cdG1lbV9jZ3JvdXBfcHV0KG1tLVx1MDAzZWxydV9nZW4ubWVtY2cpO1xuLS1cbm1tL3Ztc2Nhbi5jLTI5MjYtXG5tbS92bXNjYW4uYzoyOTI3OiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL3Ztc2Nhbi5jLTI5Mjgtdm9pZCBscnVfZ2VuX21pZ3JhdGVfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4tLVxubW0vdm1zY2FuLmM9NDI5Nj1zdGF0aWMgdm9pZCBscnVfZ2VuX3JvdGF0ZV9tZW1jZyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCBvcClcbi0tXG5tbS92bXNjYW4uYy00MzQxLVxubW0vdm1zY2FuLmM6NDM0MjojaWZkZWYgQ09ORklHX01FTUNHXG5tbS92bXNjYW4uYy00MzQzLVxuLS1cbm1tL3Ztc2Nhbi5jPTU1MDI9c3RhdGljIGludCBscnVfZ2VuX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcbi0tXG5tbS92bXNjYW4uYy01NTE1LVxubW0vdm1zY2FuLmM6NTUxNjojaWZkZWYgQ09ORklHX01FTUNHXG5tbS92bXNjYW4uYy01NTE3LVx0XHRpZiAobWVtY2cpXG4tLVxubW0vdm1zY2FuLmM9NTc2OD12b2lkIGxydV9nZW5faW5pdF9scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxuLS1cbm1tL3Ztc2Nhbi5jLTU3ODctXG5tbS92bXNjYW4uYzo1Nzg4OiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL3Ztc2Nhbi5jLTU3ODktXG4tLVxubW0vdm1zY2FuLmM9NjY2Nj11bnNpZ25lZCBsb25nIHRyeV90b19mcmVlX3BhZ2VzKHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsIGludCBvcmRlcixcbi0tXG5tbS92bXNjYW4uYy02NzA4LVxubW0vdm1zY2FuLmM6NjcwOTojaWZkZWYgQ09ORklHX01FTUNHXG5tbS92bXNjYW4uYy02NzEwLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAwNzowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzAwNgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDc5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaXQgc3RhbmRzOgoKKipOYXZpZ2F0aW5nIHRoZSBDb2RlYmFzZSoqCgpPa2F5LCBzbyBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgaXMgZGVmaW5lZCBvbiBsaW5lIDc4NTUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjb250ZXh0LiBUaGUgY3JpdGljYWwgdGhpbmcgaGVyZSBpcyB3aGV0aGVyIGl0JiMzOTtzIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgb3Igbm90LiBMZXQmIzM5O3Mgc2VlIGlmIHRoZXJlIGFyZSBhbnkgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZGlyZWN0aXZlcyAoYCNpZmRlZmAsIGAjaWZuZGVmYCwgZXRjLikgdGhhdCBhZmZlY3QgaXQuIEkga25vdyB0aGF0IGBDT05GSUdfTUVNQ0dgIG9mdGVuIHBsYXlzIGEgcm9sZSBpbiBtZW1vcnkgbWFuYWdlbWVudC4gVGhlIGxhc3QgdGltZSB0aGlzIHNob3dlZCB1cCBwcmlvciB0byB0aGUgZGVmaW5pdGlvbiwgaXQgd2FzIGJhY2sgYXQgNjcwOS4gT2theSwgc28gdGhhdCBtZWFucyBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgKmlzbiYjMzk7dCogZGlyZWN0bHkgdW5kZXIgdGhlIGBDT05GSUdfTUVNQ0dgIGNvbmZpZ3VyYXRpb24uIFRoYXQmIzM5O3MgZ29vZCB0byBrbm93LiBOb3csIGJlZm9yZSBJIGFzc3VtZSBhbnl0aGluZywgSSBiZXR0ZXIgY2hlY2sgZm9yIGFueSBvdGhlciBgI2lmZGVmYCBkaXJlY3RpdmVzIGluIHRoZSBpbW1lZGlhdGUgdmljaW5pdHkgb2YgdGhhdCBsaW5lICg3ODU1KS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhIGRpZmZlcmVudCBjb25kaXRpb24gdGhhdCAqZG9lcyogaW1wYWN0IGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBjb2RlIGlzIG5vdCBpbXBhY3RlZCBieSB0aGlzIG9yIG90aGVyIGNvbmZpZ3VyYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAwNzowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzg0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs3ODQwOlx0fVxuNzg0MTpcdFxuNzg0MjpcdCNlbmRpZlxuNzg0MzpcdFxuNzg0NDpcdGVudW0ge1xuNzg0NTpcdFx0TUVNT1JZX1JFQ0xBSU1fU1dBUFBJTkVTUyA9IDAsXG43ODQ2Olx0XHRNRU1PUllfUkVDTEFJTV9TV0FQUElORVNTX01BWCxcbjc4NDc6XHRcdE1FTU9SWV9SRUNMQUlNX05VTEwsXG43ODQ4Olx0fTtcbjc4NDk6XHRzdGF0aWMgY29uc3QgbWF0Y2hfdGFibGVfdCB0b2tlbnMgPSB7XG43ODUwOlx0XHR7IE1FTU9SWV9SRUNMQUlNX1NXQVBQSU5FU1MsIFwmIzM0O3N3YXBwaW5lc3M9JWRcJiMzNDt9LFxuNzg1MTpcdFx0eyBNRU1PUllfUkVDTEFJTV9TV0FQUElORVNTX01BWCwgXCYjMzQ7c3dhcHBpbmVzcz1tYXhcJiMzNDt9LFxuNzg1MjpcdFx0eyBNRU1PUllfUkVDTEFJTV9OVUxMLCBOVUxMIH0sXG43ODUzOlx0fTtcbjc4NTQ6XHRcbjc4NTU6XHRpbnQgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbShjaGFyICpidWYsXG43ODU2Olx0XHRcdFx0ICAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBwZ19kYXRhX3QgKnBnZGF0KVxuNzg1NzpcdHtcbjc4NTg6XHRcdHVuc2lnbmVkIGludCBucl9yZXRyaWVzID0gTUFYX1JFQ0xBSU1fUkVUUklFUztcbjc4NTk6XHRcdHVuc2lnbmVkIGxvbmcgbnJfdG9fcmVjbGFpbSwgbnJfcmVjbGFpbWVkID0gMDtcbjc4NjA6XHRcdGludCBzd2FwcGluZXNzID0gLTE7XG43ODYxOlx0XHRjaGFyICpvbGRfYnVmLCAqc3RhcnQ7XG43ODYyOlx0XHRzdWJzdHJpbmdfdCBhcmdzW01BWF9PUFRfQVJHU107XG43ODYzOlx0XHRnZnBfdCBnZnBfbWFzayA9IEdGUF9LRVJORUw7XG43ODY0Olx0XG43ODY1Olx0XHRpZiAoIWJ1ZiB8fCAoIW1lbWNnIFx1MDAyNlx1MDAyNiAhcGdkYXQpIHx8IChtZW1jZyBcdTAwMjZcdTAwMjYgcGdkYXQpKVxuNzg2NjpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjc4Njc6XHRcbjc4Njg6XHRcdGJ1ZiA9IHN0cnN0cmlwKGJ1Zik7XG43ODY5Olx0XG43ODcwOlx0XHRvbGRfYnVmID0gYnVmO1xuNzg3MTpcdFx0bnJfdG9fcmVjbGFpbSA9IG1lbXBhcnNlKGJ1ZiwgXHUwMDI2YnVmKSAvIFBBR0VfU0laRTtcbjc4NzI6XHRcdGlmIChidWYgPT0gb2xkX2J1Zilcbjc4NzM6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG43ODc0Olx0XG43ODc1Olx0XHRidWYgPSBzdHJzdHJpcChidWYpO1xuNzg3NjpcdFxuNzg3NzpcdFx0d2hpbGUgKChzdGFydCA9IHN0cnNlcChcdTAwMjZidWYsIFwmIzM0OyBcJiMzNDspKSAhPSBOVUxMKSB7XG43ODc4Olx0XHRcdGlmICghc3RybGVuKHN0YXJ0KSlcbjc4Nzk6XHRcdFx0XHRjb250aW51ZTtcbjc4ODA6XHRcdFx0c3dpdGNoIChtYXRjaF90b2tlbihzdGFydCwgdG9rZW5zLCBhcmdzKSkge1xuNzg4MTpcdFx0XHRjYXNlIE1FTU9SWV9SRUNMQUlNX1NXQVBQSU5FU1M6XG43ODgyOlx0XHRcdFx0aWYgKG1hdGNoX2ludChcdTAwMjZhcmdzWzBdLCBcdTAwMjZzd2FwcGluZXNzKSlcbjc4ODM6XHRcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuNzg4NDpcdFx0XHRcdGlmIChzd2FwcGluZXNzIFx1MDAzYyBNSU5fU1dBUFBJTkVTUyB8fFxuNzg4NTpcdFx0XHRcdCAgICBzd2FwcGluZXNzIFx1MDAzZSBNQVhfU1dBUFBJTkVTUylcbjc4ODY6XHRcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuNzg4NzpcdFx0XHRcdGJyZWFrO1xuNzg4ODpcdFx0XHRjYXNlIE1FTU9SWV9SRUNMQUlNX1NXQVBQSU5FU1NfTUFYOlxuNzg4OTpcdFx0XHRcdHN3YXBwaW5lc3MgPSBTV0FQUElORVNTX0FOT05fT05MWTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMDc6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgxMjIKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgYSBNeXN0ZXJpb3VzIGAjZW5kaWZgKioKCk9rYXksIHNvIEkmIzM5O20gZGVlcCBpbiB0aGlzIGNvZGViYXNlLCBhbmQgSSYjMzk7dmUgaGl0IGEgYCNlbmRpZmAgYXQgbGluZSA3ODQyLiBUaGUgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzIGFsd2F5cywgJiMzNDtXaHkgaXMgKnRoaXMqIGAjZW5kaWZgIGhlcmUsIGFuZCB3aGF0IGNvbmRpdGlvbiBkb2VzIGl0IGNsb3NlPyYjMzQ7IEkgbmVlZCB0byBxdWlja2x5IGlkZW50aWZ5IHRoZSBjb3JyZXNwb25kaW5nIGAjaWZgLCBgI2lmZGVmYCwgb3IgYCNpZm5kZWZgIGRpcmVjdGl2ZS4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byB1c2UgbXkgSURFJiMzOTtzICYjMzQ7ZmluZCBtYXRjaGluZyBicmFjZS9kaXJlY3RpdmUmIzM0OyBmZWF0dXJlLCBidXQgSSBtYXkgbmVlZCB0byByZXNvcnQgdG8gYSBtb3JlIGJydXRlLWZvcmNlIHNlYXJjaCBpZiB0aGUgZWRpdG9yJiMzOTtzIGFuYWx5c2lzIGlzbiYjMzk7dCBwZXJmZWN0LgoKT25jZSBJJiMzOTt2ZSBsb2NhdGVkIHRoZSBvcGVuaW5nIGRpcmVjdGl2ZSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGludGVudC4gV2hhdCBwcmVwcm9jZXNzb3IgdmFyaWFibGUgaXMgYmVpbmcgdGVzdGVkPyBXaGF0JiMzOTtzIHRoZSBjb250ZXh0PyBJcyB0aGlzIGd1YXJkaW5nIGEgc3BlY2lmaWMgcGxhdGZvcm0tZGVwZW5kZW50IGNvZGUgYmxvY2ssIGFuIGV4cGVyaW1lbnRhbCBmZWF0dXJlLCBhIGRlYnVnZ2luZyBhaWQsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBJJiMzOTtsbCBwcm9iYWJseSBsb29rIGZvciB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgcHJlcHJvY2Vzc29yIHZhcmlhYmxlLiBXaGF0IGlzIHRoZSBsb2dpYyBiZWhpbmQgaXRzIGNvbmRpdGlvbmFsIHVzZT8KCklmIHRoZSBjb2RlIHdpdGhpbiB0aGUgYCNpZmAvYCNlbmRpZmAgYmxvY2sgaXMgbm9uLXRyaXZpYWwsIEkmIzM5O2xsIG5lZWQgdG8gYXNzZXNzIGl0cyBpbXBhY3Qgb24gdGhlIHN1cnJvdW5kaW5nIGNvZGUuIEFyZSB0aGVyZSBhbnkgZGVwZW5kZW5jaWVzPyBQb3RlbnRpYWwgc2lkZSBlZmZlY3RzPyBBcmUgdGhlcmUgYW55IG9idmlvdXMgYnVncyB0aGF0IGNvdWxkIGJlIGludHJvZHVjZWQgaWYgdGhlIGNvbmRpdGlvbiBldmFsdWF0ZXMgdG8gZmFsc2U/IENvdWxkIHRoZSBjb2RlIGJlIHNpbXBsaWZpZWQgb3IgcmVmYWN0b3JlZCB0byByZW1vdmUgdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uPyBEZXBlbmRpbmcgb24gdGhlIHNjb3BlLCBJIG1pZ2h0IGV2ZW4gbmVlZCB0byBjb25zaWRlciB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiBhbmQgd2hpY2ggb2YgdGhlIGNvbmZpZ3VyYXRpb25zIGFyZSBpbnRlbmRlZCB0byB1c2UgdGhhdCBjb2RlLgoKVWx0aW1hdGVseSwgSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciB0aGlzIGAjZW5kaWZgIGlzIGNvcnJlY3RseSBwbGFjZWQsIHNlcnZpbmcgaXRzIGludGVuZGVkIHB1cnBvc2UsIGFuZCBub3QgY2F1c2luZyBhbnkgdW5pbnRlbmRlZCBiZWhhdmlvci4gSXQmIzM5O3MgYSBrZXkgcGFydCBvZiBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBjb2RlJiMzOTtzIGNvbnRyb2wgZmxvdyBhbmQgaG93IGl0IGFkYXB0cyB0byBkaWZmZXJlbnQgZW52aXJvbm1lbnRzIG9yIGNvbmZpZ3VyYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAwNzowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDsjaWZkZWYuKiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTc1PXN0cnVjdCBzY2FuX2NvbnRyb2wge1xuLS1cbm1tL3Ztc2Nhbi5jLTE4Mi1cbm1tL3Ztc2Nhbi5jOjE4MzojaWZkZWYgQVJDSF9IQVNfUFJFRkVUQ0hXXG5tbS92bXNjYW4uYy0xODQtI2RlZmluZSBwcmVmZXRjaHdfcHJldl9scnVfZm9saW8oX2ZvbGlvLCBfYmFzZSwgX2ZpZWxkKVx0XHRcdFxcXG4tLVxubW0vdm1zY2FuLmM9MjAyPXN0YXRpYyBpbnQgc2Nfc3dhcHBpbmVzcyhzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYywgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuLS1cbm1tL3Ztc2Nhbi5jLTIwOC1cbm1tL3Ztc2Nhbi5jOjIwOTojaWZkZWYgQ09ORklHX01FTUNHXG5tbS92bXNjYW4uYy0yMTAtXG4tLVxubW0vdm1zY2FuLmM9MjM5PXN0YXRpYyBib29sIHdyaXRlYmFja190aHJvdHRsaW5nX3NhbmUoc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtMjQyLVx0XHRyZXR1cm4gdHJ1ZTtcbm1tL3Ztc2Nhbi5jOjI0MzojaWZkZWYgQ09ORklHX0NHUk9VUF9XUklURUJBQ0tcbm1tL3Ztc2Nhbi5jLTI0NC1cdGlmIChjZ3JvdXBfc3Vic3lzX29uX2RmbChtZW1vcnlfY2dycF9zdWJzeXMpKVxuLS1cbm1tL3Ztc2Nhbi5jPTgyMD1lbnVtIGZvbGlvX3JlZmVyZW5jZXMge1xuLS1cbm1tL3Ztc2Nhbi5jLTgyNS1cbm1tL3Ztc2Nhbi5jOjgyNjojaWZkZWYgQ09ORklHX0xSVV9HRU5cbm1tL3Ztc2Nhbi5jLTgyNy0vKlxuLS1cbm1tL3Ztc2Nhbi5jPTEwNDU9c3RhdGljIHVuc2lnbmVkIGludCBzaHJpbmtfZm9saW9fbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0LFxuLS1cbm1tL3Ztc2Nhbi5jLTEyNzQtXHRcdFx0XHRcdGdvdG8gYWN0aXZhdGVfbG9ja2VkO1xubW0vdm1zY2FuLmM6MTI3NTojaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXG5tbS92bXNjYW4uYy0xMjc2LVx0XHRcdFx0aWYgKG5yX3BhZ2VzIFx1MDAzZT0gSFBBR0VfUE1EX05SKSB7XG4tLVxubW0vdm1zY2FuLmM9MjYwMz1zdGF0aWMgYm9vbCBjYW5fYWdlX2Fub25fcGFnZXMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuLS1cbm1tL3Ztc2Nhbi5jLTI2MTQtXG5tbS92bXNjYW4uYzoyNjE1OiNpZmRlZiBDT05GSUdfTFJVX0dFTlxubW0vdm1zY2FuLmMtMjYxNi1cbm1tL3Ztc2Nhbi5jPTI2MTc9REVGSU5FX1NUQVRJQ19LRVlfRkFMU0UobHJ1X3N3aXRjaCk7XG5tbS92bXNjYW4uYzoyNjE4OiNpZmRlZiBDT05GSUdfTFJVX0dFTl9FTkFCTEVEXG5tbS92bXNjYW4uYy0yNjE5LURFRklORV9TVEFUSUNfS0VZX0FSUkFZX1RSVUUobHJ1X2dlbl9jYXBzLCBOUl9MUlVfR0VOX0NBUFMpO1xuLS1cbm1tL3Ztc2Nhbi5jPTI2Njc9c3RhdGljIHN0cnVjdCBscnV2ZWMgKmdldF9scnV2ZWMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgbmlkKVxuLS1cbm1tL3Ztc2Nhbi5jLTI2NzAtXG5tbS92bXNjYW4uYzoyNjcxOiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL3Ztc2Nhbi5jLTI2NzItXHRpZiAobWVtY2cpIHtcbi0tXG5tbS92bXNjYW4uYz0yNzk5PXN0YXRpYyB2b2lkIHJlc2V0X2Jsb29tX2ZpbHRlcihzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAqbW1fc3RhdGUsIHVuc2lnbmVkIGxvbmcgc2VxKVxuLS1cbm1tL3Ztc2Nhbi5jLTI4MTgtXG5tbS92bXNjYW4uYzoyODE5OiNpZmRlZiBDT05GSUdfTFJVX0dFTl9XQUxLU19NTVVcbm1tL3Ztc2Nhbi5jLTI4MjAtXG5tbS92bXNjYW4uYz0yODIxPXN0YXRpYyBzdHJ1Y3QgbHJ1X2dlbl9tbV9saXN0ICpnZXRfbW1fbGlzdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4tLVxubW0vdm1zY2FuLmMtMjgyNy1cbm1tL3Ztc2Nhbi5jOjI4Mjg6I2lmZGVmIENPTkZJR19NRU1DR1xubW0vdm1zY2FuLmMtMjgyOS1cdGlmIChtZW1jZylcbi0tXG5tbS92bXNjYW4uYz0yODYxPXZvaWQgbHJ1X2dlbl9hZGRfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4tLVxubW0vdm1zY2FuLmMtMjg2Ny1cdFZNX1dBUk5fT05fT05DRSghbGlzdF9lbXB0eShcdTAwMjZtbS1cdTAwM2VscnVfZ2VuLmxpc3QpKTtcbm1tL3Ztc2Nhbi5jOjI4Njg6I2lmZGVmIENPTkZJR19NRU1DR1xubW0vdm1zY2FuLmMtMjg2OS1cdFZNX1dBUk5fT05fT05DRShtbS1cdTAwM2VscnVfZ2VuLm1lbWNnKTtcbi0tXG5tbS92bXNjYW4uYz0yODg4PXZvaWQgbHJ1X2dlbl9kZWxfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4tLVxubW0vdm1zY2FuLmMtMjg5Ni1cbm1tL3Ztc2Nhbi5jOjI4OTc6I2lmZGVmIENPTkZJR19NRU1DR1xubW0vdm1zY2FuLmMtMjg5OC1cdG1lbWNnID0gbW0tXHUwMDNlbHJ1X2dlbi5tZW1jZztcbi0tXG5tbS92bXNjYW4uYy0yOTIwLVxubW0vdm1zY2FuLmM6MjkyMTojaWZkZWYgQ09ORklHX01FTUNHXG5tbS92bXNjYW4uYy0yOTIyLVx0bWVtX2Nncm91cF9wdXQobW0tXHUwMDNlbHJ1X2dlbi5tZW1jZyk7XG4tLVxubW0vdm1zY2FuLmMtMjkyNi1cbm1tL3Ztc2Nhbi5jOjI5Mjc6I2lmZGVmIENPTkZJR19NRU1DR1xubW0vdm1zY2FuLmMtMjkyOC12b2lkIGxydV9nZW5fbWlncmF0ZV9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbi0tXG5tbS92bXNjYW4uYz00Mjk2PXN0YXRpYyB2b2lkIGxydV9nZW5fcm90YXRlX21lbWNnKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IG9wKVxuLS1cbm1tL3Ztc2Nhbi5jLTQzNDEtXG5tbS92bXNjYW4uYzo0MzQyOiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL3Ztc2Nhbi5jLTQzNDMtXG4tLVxubW0vdm1zY2FuLmM9NTUwMj1zdGF0aWMgaW50IGxydV9nZW5fc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxuLS1cbm1tL3Ztc2Nhbi5jLTU1MTUtXG5tbS92bXNjYW4uYzo1NTE2OiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL3Ztc2Nhbi5jLTU1MTctXHRcdGlmIChtZW1jZylcbi0tXG5tbS92bXNjYW4uYz01NzY4PXZvaWQgbHJ1X2dlbl9pbml0X2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXG4tLVxubW0vdm1zY2FuLmMtNTc4Ny1cbm1tL3Ztc2Nhbi5jOjU3ODg6I2lmZGVmIENPTkZJR19NRU1DR1xubW0vdm1zY2FuLmMtNTc4OS1cbi0tXG5tbS92bXNjYW4uYz02NjY2PXVuc2lnbmVkIGxvbmcgdHJ5X3RvX2ZyZWVfcGFnZXMoc3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdCwgaW50IG9yZGVyLFxuLS1cbm1tL3Ztc2Nhbi5jLTY3MDgtXG5tbS92bXNjYW4uYzo2NzA5OiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL3Ztc2Nhbi5jLTY3MTAtXG4tLVxubW0vdm1zY2FuLmM9NzUzNj1ib29sIGtzd2FwZF90ZXN0X2hvcGVsZXNzKHBnX2RhdGFfdCAqcGdkYXQpXG4tLVxubW0vdm1zY2FuLmMtNzU0MC1cbm1tL3Ztc2Nhbi5jOjc1NDE6I2lmZGVmIENPTkZJR19ISUJFUk5BVElPTlxubW0vdm1zY2FuLmMtNzU0Mi0vKlxuLS1cbm1tL3Ztc2Nhbi5jPTc2MjE9c3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgdm1zY2FuX3N5c2N0bF90YWJsZVtdID0ge1xuLS1cbm1tL3Ztc2Nhbi5jLTc2MzAtXHR9LFxubW0vdm1zY2FuLmM6NzYzMTojaWZkZWYgQ09ORklHX05VTUFcbm1tL3Ztc2Nhbi5jLTc2MzItXHR7XG4tLVxubW0vdm1zY2FuLmM9NzY1Mz1tb2R1bGVfaW5pdChrc3dhcGRfaW5pdClcbm1tL3Ztc2Nhbi5jLTc2NTQtXG5tbS92bXNjYW4uYzo3NjU1OiNpZmRlZiBDT05GSUdfTlVNQVxubW0vdm1zY2FuLmMtNzY1Ni0vKlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAwNzowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDM1MQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDYxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQgbWUgcXVpY2tseSBzeW50aGVzaXplIHRoaXMuCgoqKk5hdmlnYXRpbmcgTlVNQS1SZWxhdGVkIENvbmRpdGlvbmFsIENvbXBpbGF0aW9uKioKCkFscmlnaHQsIEkmIzM5O20gc2Nhbm5pbmcgdGhpcyBjb2RlIGFuZCBteSBleWVzIGp1c3Qgc25hZ2dlZCBvbiBgI2lmZGVmIENPTkZJR19OVU1BYCBhdCBsaW5lIDc2NTUuIEhtbSwgdGhhdCYjMzk7cyBpbnRlcmVzdGluZy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gIGlzIGFsc28gY29uZGl0aW9uYWxseSBjb21waWxlZCB1bmRlciB0aGF0IGZsYWcuIE5vIHRpbWUgdG8gd2FzdGU7IEkgbmVlZCB0byBxdWlja2x5IHplcm8gaW4gb24gdGhlIGNvcnJlc3BvbmRpbmcgYCNlbmRpZmAgc3RhdGVtZW50IGZvciBgQ09ORklHX05VTUFgIGF0IGxpbmUgNzY1NS4gVGhhdCYjMzk7cyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgaWYgdGhpcyByZWNsYWltIGZlYXR1cmUgaXMgTlVNQS1kZXBlbmRlbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDA3OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3ODIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0Ozc4MjA6XHRcdFx0cmV0dXJuIDA7XG43ODIxOlx0XG43ODIyOlx0XHRyZXQgPSBfX25vZGVfcmVjbGFpbShwZ2RhdCwgbnJfcGFnZXMsIFx1MDAyNnNjKTtcbjc4MjM6XHRcdGNsZWFyX2JpdF91bmxvY2soUEdEQVRfUkVDTEFJTV9MT0NLRUQsIFx1MDAyNnBnZGF0LVx1MDAzZWZsYWdzKTtcbjc4MjQ6XHRcbjc4MjU6XHRcdGlmIChyZXQgXHUwMDNlPSBucl9wYWdlcylcbjc4MjY6XHRcdFx0Y291bnRfdm1fZXZlbnQoUEdTQ0FOX1pPTkVfUkVDTEFJTV9TVUNDRVNTKTtcbjc4Mjc6XHRcdGVsc2Vcbjc4Mjg6XHRcdFx0Y291bnRfdm1fZXZlbnQoUEdTQ0FOX1pPTkVfUkVDTEFJTV9GQUlMRUQpO1xuNzgyOTpcdFxuNzgzMDpcdFx0cmV0dXJuIHJldDtcbjc4MzE6XHR9XG43ODMyOlx0XG43ODMzOlx0I2Vsc2Vcbjc4MzQ6XHRcbjc4MzU6XHRzdGF0aWMgdW5zaWduZWQgbG9uZyBfX25vZGVfcmVjbGFpbShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LFxuNzgzNjpcdFx0XHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG43ODM3Olx0XHRcdFx0XHQgICAgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG43ODM4Olx0e1xuNzgzOTpcdFx0cmV0dXJuIDA7XG43ODQwOlx0fVxuNzg0MTpcdFxuNzg0MjpcdCNlbmRpZlxuNzg0MzpcdFxuNzg0NDpcdGVudW0ge1xuNzg0NTpcdFx0TUVNT1JZX1JFQ0xBSU1fU1dBUFBJTkVTUyA9IDAsXG43ODQ2Olx0XHRNRU1PUllfUkVDTEFJTV9TV0FQUElORVNTX01BWCxcbjc4NDc6XHRcdE1FTU9SWV9SRUNMQUlNX05VTEwsXG43ODQ4Olx0fTtcbjc4NDk6XHRzdGF0aWMgY29uc3QgbWF0Y2hfdGFibGVfdCB0b2tlbnMgPSB7XG43ODUwOlx0XHR7IE1FTU9SWV9SRUNMQUlNX1NXQVBQSU5FU1MsIFwmIzM0O3N3YXBwaW5lc3M9JWRcJiMzNDt9LFxuNzg1MTpcdFx0eyBNRU1PUllfUkVDTEFJTV9TV0FQUElORVNTX01BWCwgXCYjMzQ7c3dhcHBpbmVzcz1tYXhcJiMzNDt9LFxuNzg1MjpcdFx0eyBNRU1PUllfUkVDTEFJTV9OVUxMLCBOVUxMIH0sXG43ODUzOlx0fTtcbjc4NTQ6XHRcbjc4NTU6XHRpbnQgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbShjaGFyICpidWYsXG43ODU2Olx0XHRcdFx0ICAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBwZ19kYXRhX3QgKnBnZGF0KVxuNzg1NzpcdHtcbjc4NTg6XHRcdHVuc2lnbmVkIGludCBucl9yZXRyaWVzID0gTUFYX1JFQ0xBSU1fUkVUUklFUztcbjc4NTk6XHRcdHVuc2lnbmVkIGxvbmcgbnJfdG9fcmVjbGFpbSwgbnJfcmVjbGFpbWVkID0gMDtcbjc4NjA6XHRcdGludCBzd2FwcGluZXNzID0gLTE7XG43ODYxOlx0XHRjaGFyICpvbGRfYnVmLCAqc3RhcnQ7XG43ODYyOlx0XHRzdWJzdHJpbmdfdCBhcmdzW01BWF9PUFRfQVJHU107XG43ODYzOlx0XHRnZnBfdCBnZnBfbWFzayA9IEdGUF9LRVJORUw7XG43ODY0Olx0XG43ODY1Olx0XHRpZiAoIWJ1ZiB8fCAoIW1lbWNnIFx1MDAyNlx1MDAyNiAhcGdkYXQpIHx8IChtZW1jZyBcdTAwMjZcdTAwMjYgcGdkYXQpKVxuNzg2NjpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjc4Njc6XHRcbjc4Njg6XHRcdGJ1ZiA9IHN0cnN0cmlwKGJ1Zik7XG43ODY5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDA3OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMzAzCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMjEzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipQcm9iaW5nIHRoZSBJbXBsaWNhdGlvbnMgb2YgVGhpcyBQcm9hY3RpdmUgUmVjbGFpbSBQYXRjaCoqCgpPa2F5LCBzbyBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgaXMgYWx3YXlzIGNvbXBpbGVkLCB3aGljaCBpcyBnb29kLiBBbmQgYHJlY2xhaW1fc3RvcmVgIGlzIHVuZGVyIHN5c2ZzIHdpdGggYENPTkZJR19OVU1BYCwgc28gdGhhdCYjMzk7cyB0aGUgZW50cnkgcG9pbnQuICBJZiBgQ09ORklHX05VTUFgIGlzIGVuYWJsZWQsIHRoZW4gYHJlY2xhaW1fc3RvcmVgIGNhbGxzIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYC4gQW5kIGl0JiMzOTtzIHN0aWxsIGF2YWlsYWJsZSBpZiBgQ09ORklHX01FTUNHYCBpcyBkaXNhYmxlZCwgdXNpbmcgc3lzZnMuICBFeGNlbGxlbnQsIHRoZSBzd2FwcGluZXNzIGNvbnRyb2wgc2VlbXMgbGlrZSBpdCYjMzk7cyBiZWhhdmluZyBub3cgYmVjYXVzZSBgc2Nfc3dhcHBpbmVzc2AgdW5jb25kaXRpb25hbGx5IHVzZXMgdGhlIGBzYy0mZ3Q7cHJvYWN0aXZlX3N3YXBwaW5lc3NgLgoKSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IGl0IHN0aWxsIGZ1bmN0aW9ucyB3aXRob3V0IGBDT05GSUdfTUVNQ0dgIGVuYWJsZWQuIExldCBtZSBzZWUuLi4gaW4gYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gLCB0aGUgY29kZSBwcm9wZXJseSBoYW5kbGVzIHRoZSBgbWVtY2dgIGNhc2UsIGJ1dCBpZiBpdCBpcyBub3QgZW5hYmxlZCBpdCBjb25maWd1cmVzIGEgYHNjYW5fY29udHJvbGAgYHN0cnVjdGAgdGhhdCBjYW4gcGVyZm9ybSBhIHByb2FjdGl2ZSByZWNsYWltLiBBbmQgbG9va2luZyBhdCB0aGUgbm9uLWBtZW1jZ2AgY2FzZSwgaXQmIzM5O3MgY2FsbGluZyBgX19ub2RlX3JlY2xhaW1gLiBPa2F5LCBJZiBgQ09ORklHX05VTUFgIGlzIGRpc2FibGVkLCBgX19ub2RlX3JlY2xhaW1gIGp1c3QgcmV0dXJucyAwLCBhbmQgaWYgYENPTkZJR19NRU1DR2AgaXMgZGlzYWJsZWQsIGl0IHdvcmtzLiBTbywgeWVzLCB0aGF0JiMzOTtzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaWYgYENPTkZJR19NRU1DR2AgaXMgZGlzYWJsZWQgdGhyb3VnaCBzeXNmcyEKCldhaXQsIGFtIEkganVtcGluZyB0byBjb25jbHVzaW9ucz8gTGV0IG1lIGRvdWJsZS1jaGVjayB0aGUgYHNjX3N3YXBwaW5lc3NgIGNvZGUgYmVmb3JlIGFuZCBhZnRlci4gQmVmb3JlLCBpZiBgQ09ORklHX01FTUNHYCB3YXMgZGlzYWJsZWQsIGl0IGp1c3QgcmV0dXJuZWQgYHZtX3N3YXBwaW5lc3NgLiAgTm93LCBpdCBjb3JyZWN0bHkgY2hlY2tzIGBzYy0mZ3Q7cHJvYWN0aXZlICZhbXA7JmFtcDsgc2MtJmd0O3Byb2FjdGl2ZV9zd2FwcGluZXNzYCBldmVuIGlmIGBDT05GSUdfTUVNQ0dgIGlzIGRpc2FibGVkLiAgU28sIHllcywgaXQmIzM5O3MgYSBmdW5jdGlvbmFsIGNoYW5nZS4KCkJ1dCB3YWl0LCBpcyBgQ09ORklHX01FTUNHYCBkaXNhYmxlZCBhIGNvbW1vbiBjb25maWd1cmF0aW9uPyBVc3VhbGx5IGl0JiMzOTtzIGVuYWJsZWQgd2l0aCBzeXprYWxsZXIuCgpXaGF0IGlmIGBDT05GSUdfTUVNQ0dgICppcyogZW5hYmxlZD8gRG9lcyBhbnl0aGluZyBhY3R1YWxseSBjaGFuZ2U/IExldCYjMzk7cyBjaGVjayBgbWVtX2Nncm91cF9zd2FwcGluZXNzYC4gIEJlZm9yZSwgaXQgaGFkIGEgYnJhbmNoIGZvciBjZ3JvdXAgdjIsIHRoZW4gZm9yIHRoZSByb290IG9yIGRpc2FibGVkIG1lbWNnLCByZXR1cm5pbmcgYHZtX3N3YXBwaW5lc3NgLCBhbmQgdGhlbiBmaW5hbGx5IGdldHRpbmcgdGhlIHZhbHVlIGZyb20gdGhlIG1lbWNnLiBBZnRlciwgaXQgY29uZGl0aW9uYWxseSByZXR1cm5zIHRoZSBzYW1lIGxvZ2ljIGRlcGVuZGluZyBpZiBgQ09ORklHX01FTUNHX1YxYCBpcyBlbmFibGVkIG9yIG5vdC4gIElmIGBDT05GSUdfTUVNQ0dfVjFgIGlzICpkaXNhYmxlZCosIGBjZ3JvdXBfc3Vic3lzX29uX2RmbGAgd291bGQgYmUgdHJ1ZSBhbnl3YXkuIFRodXMsIHRoZSBvbGQgY29kZSB3b3VsZCByZXR1cm4gYHZtX3N3YXBwaW5lc3NgLiBUaGUgbmV3IGNvZGUgYWxzbyByZXR1cm5zIGB2bV9zd2FwcGluZXNzYC4gU28gdGhlcmUgaXMgTk8gZnVuY3Rpb25hbCBjaGFuZ2UgaWYgYENPTkZJR19NRU1DR2AgaXMgZW5hYmxlZCwgcmVnYXJkbGVzcyBvZiBgQ09ORklHX01FTUNHX1YxYC4KCldoYXQgaWYgYENPTkZJR19NRU1DR19WMWAgKmlzKiBlbmFibGVkPyBUaGUgbG9naWMgaW4gYG1lbV9jZ3JvdXBfc3dhcHBpbmVzc2AgYmVmb3JlIGFuZCBhZnRlciBpcyBlZmZlY3RpdmVseSB0aGUgc2FtZS4gSG1tLgoKT2theSwgbGV0JiMzOTtzIGxvb2sgYXQgYG1lbV9jZ3JvdXBfY3NzX2FsbG9jYC4gTm93LCBgbWVtY2ctJmd0O3N3YXBwaW5lc3NgIGlzICpvbmx5KiBpbml0aWFsaXplZCBpZiBgQ09ORklHX01FTUNHX1YxYCBpcyBlbmFibGVkLiAgVGhhdCYjMzk7cyBiZWNhdXNlIGBzd2FwcGluZXNzYCBpcyB1bmRlciB0aGUgYENPTkZJR19NRU1DR19WMWAgZ3VhcmQgaW4gdGhlIGBtZW1fY2dyb3VwYCBzdHJ1Y3Qgbm93LiBUaGlzIGlzIGEgKm1lbW9yeSBzYXZpbmcqIG9wdGltaXphdGlvbiBmb3IgdGhlIGBDT05GSUdfTUVNQ0dfVjFgIGRpc2FibGVkIGNhc2UsIGl0IGRvZXNuJiMzOTt0IGFwcGVhciB0byBiZSBhIGZ1bmN0aW9uYWwgY2hhbmdlLgoKV2FpdCwgYXJlIHRoZXJlIGFueSBvdGhlciBmdW5jdGlvbmFsIGNoYW5nZXM/IFdoYXQgYWJvdXQgdGhlIGNhc2Ugd2hlcmUgbWVtY2cgaXMgTlVMTCBpbiBgc2Nfc3dhcHBpbmVzc2A/IEluIGBzY19zd2FwcGluZXNzYCB0aGUgZnVuY3Rpb24gYG1lbV9jZ3JvdXBfaXNfcm9vdGAgaXMgY2FsbGVkIG9uIHRoZSBhcmd1bWVudCBgbWVtY2dgLCBpZiBpdCBpcyBOVUxMLCB0aGlzIG1pZ2h0IGNyYXNoIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAwNzowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF9pc19yb290JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTUxMz1zdGF0aWMgaW5saW5lIGJvb2wgUGFnZU1lbWNnS21lbShzdHJ1Y3QgcGFnZSAqcGFnZSlcbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC01MTctXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDo1MTg6c3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfaXNfcm9vdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC01MTkte1xuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTEwNjQ9c3RhdGljIGlubGluZSBib29sIFBhZ2VNZW1jZ0ttZW0oc3RydWN0IHBhZ2UgKnBhZ2UpXG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTA2OC1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjEwNjk6c3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfaXNfcm9vdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xMDcwLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMDc6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ0ODUKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHByZXNlbnRlZCBhcyBpZiBpdCB3ZXJlIG15IG93biBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkRpdmluZyBpbnRvIGBtZW1fY2dyb3VwX2lzX3Jvb3RgKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhpcyBgbWVtX2Nncm91cF9pc19yb290YCBmdW5jdGlvbi4gVGhlIG5hbWUgaW1tZWRpYXRlbHkgc3VnZ2VzdHMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBtZW1vcnkgY2dyb3Vwcywgc3BlY2lmaWNhbGx5IHRoZSByb290IGNncm91cC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHF1aWNrbHkgYXNzZXNzIGl0cyBwdXJwb3NlIGluIHRoZSBicm9hZGVyIGNvbnRleHQuIElzIGl0IGEgc2ltcGxlIGNoZWNrPyBEb2VzIGl0IHBlcmZvcm0gYW55IHNpZGUgZWZmZWN0cz8gV2hhdCBhcmUgdGhlIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgb2YgYSB0cnVlL2ZhbHNlIHJldHVybiB2YWx1ZT8gR2l2ZW4gbXkgZXhwZXJpZW5jZSB3aXRoIHRoZSBrZXJuZWwmIzM5O3MgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtcywgSSYjMzk7bSBhbHJlYWR5IGFudGljaXBhdGluZyB0aGF0IHRoaXMgcHJvYmFibHkgcmVsYXRlcyB0byBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIHJlc291cmNlIGFjY291bnRpbmcgYW5kIGxpbWl0cy4gSSYjMzk7bSBrZWVuIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgZnVuY3Rpb24gZGlmZmVyZW50aWF0ZXMgYmV0d2VlbiB0aGUgJiMzNDt0b3AtbGV2ZWwmIzM0OyBvciAmIzM0O3N5c3RlbS13aWRlJiMzNDsgbWVtb3J5IGNncm91cCBhbmQgb3RoZXIgbmVzdGVkIG9uZXMuIFBlcmhhcHMgaXQmIzM5O3MgYSBmdW5kYW1lbnRhbCB0ZXN0IHVzZWQgaW4gbWFueSBjcml0aWNhbCBtZW1vcnkgbWFuYWdlbWVudCBwYXRocy4gVW5kZXJzdGFuZGluZyBpdHMgdXNhZ2Ugd2lsbCBnaXZlIGluc2lnaHRzIGludG8gdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGUgaW1wbGVtZW50YXRpb24gY2xhcmlmaWVzIHRoZXNlIHF1ZXN0aW9ucy4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gaG93IGl0JiMzOTtzIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBvdGhlciBjZ3JvdXAgZnVuY3Rpb25zIGFuZCBzdHJ1Y3R1cmVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAwNzowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTE4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1MTg6XHRzdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF9pc19yb290KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiA1MTk6XHR7XG4gNTIwOlx0XHRyZXR1cm4gKG1lbWNnID09IHJvb3RfbWVtX2Nncm91cCk7XG4gNTIxOlx0fVxuIDUyMjpcdFxuIDUyMzpcdHN0YXRpYyBpbmxpbmUgYm9vbCBvYmpfY2dyb3VwX2lzX3Jvb3QoY29uc3Qgc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnKVxuIDUyNDpcdHtcbiA1MjU6XHRcdHJldHVybiBvYmpjZy1cdTAwM2Vpc19yb290O1xuIDUyNjpcdH1cbiA1Mjc6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMDc6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ5MzAKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAxMDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIE5VTEwgUG9pbnRlciBEZXJlZmVyZW5jZSoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGNvZGUsIHNwZWNpZmljYWxseSBhcm91bmQgbWVtb3J5IGNncm91cHMgYW5kIHN3YXBwaW5lc3MuIEkgc2VlIGEgY29uZGl0aW9uIHdoZXJlIGlmIGBtZW1jZ2AgaXMgTlVMTCwgdGhlbiBgbWVtY2cgPT0gcm9vdF9tZW1fY2dyb3VwYCBpcyBkZWZpbml0ZWx5IGZhbHNlLCBiZWNhdXNlIGByb290X21lbV9jZ3JvdXBgIGlzIGEgcmVhbCBvYmplY3QuIEJ1dCB0aGVuLCAqd2FpdCBhIG1pbnV0ZSosIGlmIGBtZW1jZ2AgKmlzKiBOVUxMLCB0aGUgY29kZSBjYWxscyBgbWVtX2Nncm91cF9zd2FwcGluZXNzYCwgYW5kIHRoYXQgZnVuY3Rpb24gdHJpZXMgdG8gYWNjZXNzIGBtZW1jZy0mZ3Q7c3dhcHBpbmVzc2AuIFRoYXQmIzM5O3MgYSBjbGFzc2ljIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSEgVGhpcyBjb3VsZCBiZSBhIHNlcmlvdXMgYnVnLgoKSSBuZWVkIHRvIGNvbmZpcm0gaWYgYG1lbWNnYCBjYW4gKmFjdHVhbGx5KiBiZSBOVUxMIGluIHRoZSBjb250ZXh0IG9mIGBzY19zd2FwcGluZXNzYC4gVGhpcyBzZWVtcyBsaWtlIGEgcHJldHR5IGltcG9ydGFudCBjaGVjayB0byBtYWtlIHN1cmUgaXQgZG9lc24mIzM5O3QgY2F1c2UgYSBzeXN0ZW0gY3Jhc2guIFRoZSBuZXh0IHN0ZXAgaXMgY2xlYXIuIExldCBtZSB0cmFjZSB0aGUgY2FsbGVycyBvZiBgc2Nfc3dhcHBpbmVzc2AgYW5kIHNlZSBob3cgYG1lbWNnYCBpcyBiZWluZyBwYXNzZWQgaW4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBwb3RlbnRpYWwgY2FsbCBwYXRocyBhbmQgbWFrZSBzdXJlIHRoZSBgbWVtY2dgIHBhcmFtZXRlciBpcyBhbHdheXMgdmFsaWQgb3IgcHJvcGVybHkgaGFuZGxlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMDc6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2Nfc3dhcHBpbmVzcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bXNjYW4uYz03NT1zdHJ1Y3Qgc2Nhbl9jb250cm9sIHtcbi0tXG5tbS92bXNjYW4uYy05Ni1cbm1tL3Ztc2Nhbi5jOjk3Olx0LyogU3dhcHBpbmVzcyB2YWx1ZSBmb3IgcHJvYWN0aXZlIHJlY2xhaW0uIEFsd2F5cyB1c2Ugc2Nfc3dhcHBpbmVzcygpISAqL1xubW0vdm1zY2FuLmMtOTgtXHRpbnQgKnByb2FjdGl2ZV9zd2FwcGluZXNzO1xuLS1cbm1tL3Ztc2Nhbi5jPTIwMD1pbnQgdm1fc3dhcHBpbmVzcyA9IDYwO1xubW0vdm1zY2FuLmMtMjAxLVxubW0vdm1zY2FuLmM6MjAyOnN0YXRpYyBpbnQgc2Nfc3dhcHBpbmVzcyhzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYywgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxubW0vdm1zY2FuLmMtMjAzLXtcbi0tXG5tbS92bXNjYW4uYz0yNDc5PXN0YXRpYyB2b2lkIGdldF9zY2FuX2NvdW50KHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsXG4tLVxubW0vdm1zY2FuLmMtMjQ4My1cdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGxydXZlY19tZW1jZyhscnV2ZWMpO1xubW0vdm1zY2FuLmM6MjQ4NDpcdGludCBzd2FwcGluZXNzID0gc2Nfc3dhcHBpbmVzcyhzYywgbWVtY2cpO1xubW0vdm1zY2FuLmMtMjQ4NS1cdHU2NCBmcmFjdGlvbltBTk9OX0FORF9GSUxFXTtcbi0tXG5tbS92bXNjYW4uYz0yNjg3PXN0YXRpYyBpbnQgZ2V0X3N3YXBwaW5lc3Moc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy0yNjk4LVxubW0vdm1zY2FuLmM6MjY5OTpcdHJldHVybiBzY19zd2FwcGluZXNzKHNjLCBtZW1jZyk7XG5tbS92bXNjYW4uYy0yNzAwLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMDc6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU2OTcKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipBbmFseXppbmcgU3lzdGVtIFBlcmZvcm1hbmNlIE1ldHJpY3MqKgoKQWxyaWdodCwgYmVmb3JlIGRpdmluZyB0b28gZGVlcCBpbnRvIHRoaXMsIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhpbmdzLiBMZXQmIzM5O3Mgc2VlLi4uIEkgdGhpbmsgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHdvdWxkIGJlIHRvIHB1bGwgYGdldF9zd2FwcGluZXNzYCBhbmQgYGdldF9zY2FuX2NvdW50YC4gVGhlc2UgYXJlIGtleSBpbmRpY2F0b3JzIGZvciBob3cgYWdncmVzc2l2ZWx5IHRoZSBzeXN0ZW0gaXMgdXRpbGl6aW5nIHN3YXAgc3BhY2UgYW5kIGhvdyBmcmVxdWVudGx5IGl0JiMzOTtzIHNjYW5uaW5nIG1lbW9yeSBwYWdlcywgcmVzcGVjdGl2ZWx5LiBVbmRlcnN0YW5kaW5nIHRoZXNlIHR3byB2YXJpYWJsZXMgaXMgb2Z0ZW4gdGhlIGp1bXBpbmcgb2ZmIHBvaW50IGZvciBkaWFnbm9zdGljcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMDc6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI0NzksCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjQ3OTpcdHN0YXRpYyB2b2lkIGdldF9zY2FuX2NvdW50KHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsXG4yNDgwOlx0XHRcdFx0ICAgdW5zaWduZWQgbG9uZyAqbnIpXG4yNDgxOlx0e1xuMjQ4MjpcdFx0c3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGxydXZlY19wZ2RhdChscnV2ZWMpO1xuMjQ4MzpcdFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbHJ1dmVjX21lbWNnKGxydXZlYyk7XG4yNDg0Olx0XHRpbnQgc3dhcHBpbmVzcyA9IHNjX3N3YXBwaW5lc3Moc2MsIG1lbWNnKTtcbjI0ODU6XHRcdHU2NCBmcmFjdGlvbltBTk9OX0FORF9GSUxFXTtcbjI0ODY6XHRcdHU2NCBkZW5vbWluYXRvciA9IDA7XHQvKiBnY2MgKi9cbjI0ODc6XHRcdGVudW0gc2Nhbl9iYWxhbmNlIHNjYW5fYmFsYW5jZTtcbjI0ODg6XHRcdGVudW0gbHJ1X2xpc3QgbHJ1O1xuMjQ4OTpcdFxuMjQ5MDpcdFx0LyogUHJvYWN0aXZlIHJlY2xhaW0gaW5pdGlhdGVkIGJ5IHVzZXJzcGFjZSBmb3IgYW5vbnltb3VzIG1lbW9yeSBvbmx5ICovXG4yNDkxOlx0XHRpZiAoc3dhcHBpbmVzcyA9PSBTV0FQUElORVNTX0FOT05fT05MWSkge1xuMjQ5MjpcdFx0XHRXQVJOX09OX09OQ0UoIXNjLVx1MDAzZXByb2FjdGl2ZSk7XG4yNDkzOlx0XHRcdGlmICghY2FuX3JlY2xhaW1fYW5vbl9wYWdlcyhtZW1jZywgcGdkYXQtXHUwMDNlbm9kZV9pZCwgc2MpKSB7XG4yNDk0Olx0XHRcdFx0bWVtc2V0KG5yLCAwLCBzaXplb2YoKm5yKSAqIE5SX0xSVV9MSVNUUyk7XG4yNDk1Olx0XHRcdFx0cmV0dXJuO1xuMjQ5NjpcdFx0XHR9XG4yNDk3Olx0XHRcdHNjYW5fYmFsYW5jZSA9IFNDQU5fQU5PTjtcbjI0OTg6XHRcdFx0Z290byBvdXQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDA3OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2MjQ2CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGZyb20gYW4gZXhwZXJ0JiMzOTtzIHBlcnNwZWN0aXZlOgoKKipMUlVWZWMgTWVtb3J5IENHIGFuZCB0aGUgTlVMTCBQb2ludGVyIFF1ZXN0aW9uKioKCkFscmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBscnV2ZWNfbWVtY2cobHJ1dmVjKWAgZnVuY3Rpb24gY2FsbC4uLiBhbmQgbXkgbWluZCBpbW1lZGlhdGVseSBqdW1wcyB0byBhIHBvdGVudGlhbCBlZGdlIGNhc2UuIENhbiB0aGlzIHRoaW5nIGFjdHVhbGx5IHJldHVybiBhIE5VTEwgcG9pbnRlcj8gVGhlIG9idmlvdXMgaW1wbGljYXRpb25zIGFyZSBjYXNjYWRpbmcuIElmIGl0ICpjYW4qIHJldHVybiBOVUxMLCB0aGVuIGV2ZXJ5IHNpbmdsZSBjYWxsIHRvIGl0IG5lZWRzIGEgTlVMTCBjaGVjaywgb3RoZXJ3aXNlLCBib29tLCB3ZSYjMzk7cmUgbG9va2luZyBhdCBhIHNlcmlvdXMga2VybmVsIHBhbmljIG9yIGF0IGJlc3QgYSBuYXN0eSBidWcuIFdlIG5lZWQgdG8gYmUgYWJsZSB0byBjYXRjaCB0aGUgZXJyb3IgY29uZGl0aW9uIQoKV2hhdCBhcmUgdGhlIHNjZW5hcmlvcz8gRG9lcyB0aGUgZG9jdW1lbnRhdGlvbiBjbGFyaWZ5IHRoaXMgYmVoYXZpb3I/IElzIGl0IGRlcGVuZGVudCBvbiBhIHNwZWNpZmljIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb24/IERvZXMgaXQgcGVydGFpbiB0byBtZW1vcnkgbWFuYWdlbWVudCB6b25lcyBvciB0aGVpciBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgY2FjaGU/IEFyZSB3ZSBkZWFsaW5nIHdpdGggc29tZSBzb3J0IG9mIHJhY2UgY29uZGl0aW9uIG9yIGNvbmN1cnJlbnQgYWNjZXNzIGlzc3VlPyBJIG5lZWQgdG8gZGlnIGludG8gdGhlIGNvZGUsIGFuZCBtYXliZSB0aGUgYWNjb21wYW55aW5nIGNvbW1lbnRzIGFuZCBkb2N1bWVudGF0aW9uLCB0byBjb25maXJtIHdoYXQgdGhlIHBvc3NpYmxlIHJldHVybiB2YWx1ZXMgYW5kIGNvcnJlc3BvbmRpbmcgY2FzZXMgYXJlLiBNb3JlIGltcG9ydGFudGx5LCB3aGF0IGhhcHBlbnMgdXBzdHJlYW0gd2l0aCB0aGlzIE5VTEwgcG9pbnRlciBpZiB3ZSBkb24mIzM5O3QgY2F0Y2ggaXQ/IQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAwNzowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwIFxcKmxydXZlY19tZW1jZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD04MTg9c3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9mcm9tX3NlcShzdHJ1Y3Qgc2VxX2ZpbGUgKm0pXG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtODIyLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6ODIzOnN0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKmxydXZlY19tZW1jZyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC04MjQte1xuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTEyOTM9c3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9mcm9tX3NlcShzdHJ1Y3Qgc2VxX2ZpbGUgKm0pXG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTI5Ny1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjEyOTg6c3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqbHJ1dmVjX21lbWNnKHN0cnVjdCBscnV2ZWMgKmxydXZlYylcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTEyOTkte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAwNzowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjc1MAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlIHdlIGdvLi4uCgoqKkRpdmluZyBpbnRvIGBscnV2ZWNfbWVtY2dgKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gVGhlIGZpcnN0IHRoaW5nIEkmIzM5O20gZ29pbmcgdG8gZG8gaXMgdGFrZSBhIGxvb2sgYXQgYGxydXZlY19tZW1jZ2AuIEkgYWxyZWFkeSBoYXZlIGEgcHJldHR5IHNvbGlkIGdyYXNwIG9uIG1lbW9yeSBtYW5hZ2VtZW50IGluIHRoZSBMaW51eCBrZXJuZWwsIGVzcGVjaWFsbHkgd2l0aCByZXNwZWN0IHRvIGNvbnRyb2wgZ3JvdXBzLiBNeSBleHBlcnRpc2UgYWxsb3dzIG1lIHRvIHJlYWQgdGhyb3VnaCB0aGUgZG9jdW1lbnRhdGlvbiBhbmQganVtcCByaWdodCBpbnRvIHRoZSBjb2RlIHRvIGRpc2Nlcm4gaG93IGl0IGltcGxlbWVudHMgbWVtb3J5IGNvbnRyb2wgZ3JvdXAgZnVuY3Rpb25hbGl0eS4gSSBleHBlY3QgdG8gc2VlIHRoZSBpbnRlcnBsYXkgYmV0d2VlbiB0aGUgTFJVIChMZWFzdCBSZWNlbnRseSBVc2VkKSBsaXN0IGFuZCB0aGUgbWVtb3J5IGNvbnRyb2wgZ3JvdXAgKG1lbWNnKSBtZWNoYW5pc21zLCBidXQgSSBuZWVkIHRvIHNlZSB0aGUgc3BlY2lmaWNzLiBJJiMzOTttIGtlZW4gdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBjb2RlIGhhbmRsZXMgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gdGhlIGdsb2JhbCBwYWdlIHJlY2xhaW0gcHJvY2VzcyBhbmQgdGhlIHBlci1tZW1jZyBhY2NvdW50aW5nLiBNeSBmb2N1cyB3aWxsIGJlIG9uIHRoZSBkYXRhIHN0cnVjdHVyZXMsIHRoZSBhbGdvcml0aG1zLCBhbmQgdGhlIGxvY2tpbmcgaW52b2x2ZWQuIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucyBhbmQgcG90ZW50aWFsIGNvbnRlbnRpb24gcG9pbnRzLCB3aXRoIHBhcnRpY3VsYXIgYXR0ZW50aW9uIHRvIGhvdyB0aGlzIHBpZWNlIGZpdHMgaW50byB0aGUgbGFyZ2VyIGFyY2hpdGVjdHVyZSBvZiB0aGUga2VybmVsJiMzOTtzIG1lbW9yeSBtYW5hZ2VtZW50IHN5c3RlbS4gS25vd2luZyB0aGlzIHdpbGwgaGVscCBtZSB3aGVuIEkgdHJvdWJsZXNob290IG9yIG9wdGltaXplIG1lbW9yeSBtYW5hZ2VtZW50IGluIGEgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAwNzowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODIzLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA4MjM6XHRzdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpscnV2ZWNfbWVtY2coc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxuIDgyNDpcdHtcbiA4MjU6XHRcdHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICptejtcbiA4MjY6XHRcbiA4Mjc6XHRcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkpXG4gODI4Olx0XHRcdHJldHVybiBOVUxMO1xuIDgyOTpcdFxuIDgzMDpcdFx0bXogPSBjb250YWluZXJfb2YobHJ1dmVjLCBzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSwgbHJ1dmVjKTtcbiA4MzE6XHRcdHJldHVybiBtei1cdTAwM2VtZW1jZztcbiA4MzI6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDA3OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3MTkyCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNTU4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBTd2FwcGluZXNzIGFuZCBNZW1vcnkgQ2dyb3VwIEludGVyYWN0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGNvZGUsIHNwZWNpZmljYWxseSBob3cgc3dhcHBpbmVzcyBpcyBoYW5kbGVkIGluIHJlbGF0aW9uIHRvIG1lbW9yeSBjZ3JvdXBzLiBUaGUgY29yZSBvZiBteSBjb25jZXJuIGhlcmUgaXMgcG90ZW50aWFsIG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZXMuIEkgc2VlIHRoYXQgaWYgYG1lbV9jZ3JvdXBfZGlzYWJsZWQoKWAgaXMgdHJ1ZSwgYGxydXZlY19tZW1jZ2AgcmV0dXJucyBOVUxMLiBUaGlzIG1ha2VzIHNlbnNlIOKAkyB0aGUgbWVtb3J5IGNncm91cCBmdW5jdGlvbmFsaXR5IGlzIGRpc2FibGVkLCBzbyB0aGVyZSYjMzk7cyBubyBhc3NvY2lhdGVkIGNncm91cC4gQ29uc2VxdWVudGx5LCBgc2Nfc3dhcHBpbmVzc2AgdGhlbiBjYWxscyBgbWVtX2Nncm91cF9zd2FwcGluZXNzYCB3aXRoIE5VTEwuCgpOb3csIGxldCYjMzk7cyBsb29rIGF0IGBtZW1fY2dyb3VwX3N3YXBwaW5lc3NgLiBUaGUgY29kZSBoYXMgYSBjaGVjazoKCmBgYGMKc3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF9zd2FwcGluZXNzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykKewojaWZkZWYgQ09ORklHX01FTUNHX1YxCglpZiAoIWNncm91cF9zdWJzeXNfb25fZGZsKG1lbW9yeV9jZ3JwX3N1YnN5cykgJmFtcDsmYW1wOwoJICAgICFtZW1fY2dyb3VwX2Rpc2FibGVkKCkgJmFtcDsmYW1wOyAhbWVtX2Nncm91cF9pc19yb290KG1lbWNnKSkKCQlyZXR1cm4gbWVtY2ctJmd0O3N3YXBwaW5lc3M7CiNlbmRpZgoJcmV0dXJuIFJFQURfT05DRSh2bV9zd2FwcGluZXNzKTsKfQpgYGAKCkV4Y2VsbGVudCEgSWYgYG1lbV9jZ3JvdXBfZGlzYWJsZWQoKWAgaXMgdHJ1ZSwgdGhlIGAhbWVtX2Nncm91cF9kaXNhYmxlZCgpYCBjb25kaXRpb24gaXMgZmFsc2UuIFRoZSBzaG9ydC1jaXJjdWl0aW5nIG1lYW5zIGl0IGF2b2lkcyBkZXJlZmVyZW5jaW5nIGBtZW1jZ2AgYWx0b2dldGhlciBhbmQgc2FmZWx5IHJldHVybnMgdGhlIGdsb2JhbCBgdm1fc3dhcHBpbmVzc2AgdmFsdWUuIFNvIGZhciwgc28gZ29vZC4gTm8gbnVsbCBkZXJlZmVyZW5jZSByaXNrIGlmIHRoZSBmZWF0dXJlIGlzIGRpc2FibGVkLgoKTXkgbmV4dCBjb25jZXJuIGlzIHdoYXQgaGFwcGVucyBpZiBgbWVtX2Nncm91cF9kaXNhYmxlZCgpYCBpcyBmYWxzZSwgYnV0IGBtZW1jZ2AgaXMgTlVMTC4gQ2FuIGBscnV2ZWNfbWVtY2dgIHJldHVybiBOVUxMIGV2ZW4gaWYgdGhlIGZlYXR1cmUgaXNuJiMzOTt0IGRpc2FibGVkPyBMZXQmIzM5O3MgY2hlY2s6CgpgYGBjCglpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKQoJCXJldHVybiBOVUxMOwoKCW16ID0gY29udGFpbmVyX29mKGxydXZlYywgc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUsIGxydXZlYyk7CglyZXR1cm4gbXotJmd0O21lbWNnOwpgYGAKCkhlcmUgaXQgaXM6IHRoZSBjb2RlICpleHBsaWNpdGx5KiByZXR1cm5zIE5VTEwgaWYgYG1lbV9jZ3JvdXBfZGlzYWJsZWQoKWAgaXMgdHJ1ZS4gT3RoZXJ3aXNlLCBpdCByZXR1cm5zIGBtei0mZ3Q7bWVtY2dgLiBTbywgdGhlIHF1ZXN0aW9uIGJlY29tZXMsIGNhbiBgbXotJmd0O21lbWNnYCBpdHNlbGYgZXZlciBiZSBOVUxMPyBUaGlua2luZyB0aGlzIHRocm91Z2guLi4gYG16LSZndDttZW1jZ2AgaXMgdGhlIGBtZW1jZ2AgYXNzb2NpYXRlZCB3aXRoIHRoZSBgbWVtX2Nncm91cF9wZXJfbm9kZWAuIEZvciB0aGUgcm9vdCBtZW1jZywgYG16LSZndDttZW1jZ2AgaXMgYHJvb3RfbWVtX2Nncm91cGAsIHdoaWNoIGlzICpub3QqIE5VTEwuIFRoZXJlZm9yZSwgYG1lbWNnYCBpcyBvbmx5IE5VTEwgaWYgYG1lbV9jZ3JvdXBfZGlzYWJsZWQoKWAgaXMgdHJ1ZS4KClRoaXMgbWVhbnMgdGhhdCBpZiBgbWVtX2Nncm91cF9kaXNhYmxlZCgpYCBpcyB0cnVlLCBgbWVtX2Nncm91cF9zd2FwcGluZXNzYCB3aWxsICphbHdheXMqIHNhZmVseSByZXR1cm4gYHZtX3N3YXBwaW5lc3NgIGJlY2F1c2Ugb2YgdGhlIGluaXRpYWwgY2hlY2sgaW4gYGxydXZlY19tZW1jZ2AgdGhhdCBwcmV2ZW50cyBhIE5VTEwgdmFsdWUgYmVpbmcgcGFzc2VkLgoKTm93LCBJIG5lZWQgdG8gY29uc2lkZXIgYW4gZWRnZSBjYXNlOiB3aGF0IGlmIGBDT05GSUdfTUVNQ0dgIGlzIGRpc2FibGVkIGVudGlyZWx5PyBJIHNob3VsZCBjaGVjayBob3cgYGxydXZlY19tZW1jZ2AgYmVoYXZlcyB1bmRlciB0aGF0IGNvbmRpdGlvbi4gVGhpcyBjb3VsZCBjaGFuZ2UgdGhlIG92ZXJhbGwgZmxvdyBJJiMzOTt2ZSBhbmFseXplZCBzbyBmYXIuIFRoaXMgd2lsbCBiZSB0aGUgbmV4dCBzdGVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAwNzowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTI5OCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMjk4Olx0c3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqbHJ1dmVjX21lbWNnKHN0cnVjdCBscnV2ZWMgKmxydXZlYylcbjEyOTk6XHR7XG4xMzAwOlx0XHRyZXR1cm4gTlVMTDtcbjEzMDE6XHR9XG4xMzAyOlx0XG4xMzAzOlx0c3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfb25saW5lKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbjEzMDQ6XHR7XG4xMzA1Olx0XHRyZXR1cm4gdHJ1ZTtcbjEzMDY6XHR9XG4xMzA3Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDA3OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4NjIxCgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMjk2MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBQYXRjaCBmb3IgRnV6emluZyBTdWl0YWJpbGl0eSoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBkaXNzZWN0ZWQgdGhpcyBwYXRjaCwgYW5kIGhlcmUmIzM5O3MgbXkgYXNzZXNzbWVudC4gVGhlIHByaW1hcnkgb2JqZWN0aXZlIHNlZW1zIHRvIGJlIHRpZHlpbmcgdXAgdGhlIGNvZGUsIHNwZWNpZmljYWxseSBjb25jZXJuaW5nIHRoZSBgc3dhcHBpbmVzc2AgcGFyYW1ldGVyIHdpdGhpbiBtZW1vcnkgY2dyb3VwcywgYW5kIGhpZGluZyBpdCB1bmRlciB0aGUgYENPTkZJR19NRU1DR19WMWAgZmxhZyBmb3IgbWVtb3J5IG9wdGltaXphdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0aGF0IHRoZXJlIG1pZ2h0IGJlIHNvbWUgZnVuY3Rpb25hbCBjaGFuZ2VzIHdvcnRoIGV4cGxvcmluZyBmb3IgZnV6emluZywgYnV0IHRoZSBtb3JlIEkgbG9vaywgdGhlIGxlc3Mgc2lnbmlmaWNhbnQgdGhleSBhcHBlYXIuCgpJbml0aWFsbHksIEkgaWRlbnRpZmllZCBhIHBvdGVudGlhbCBkaWZmZXJlbmNlIGluIHRoZSBiZWhhdmlvciBvZiBwcm9hY3RpdmUgcmVjbGFpbSB2aWEgc3lzZnMgKHRyaWdnZXJlZCBieSB3cml0aW5nIHRvIGAvc3lzL2RldmljZXMvc3lzdGVtL25vZGUvbm9kZVgvcmVjbGFpbWApIHdoZW4gYENPTkZJR19NRU1DR2AgaXMgZGlzYWJsZWQuIFByZXZpb3VzbHksIHRoaXMgbWVjaGFuaXNtIGlnbm9yZWQgdGhlIGBzd2FwcGluZXNzYCBzZXR0aW5nIGFuZCB1c2VkIHRoZSBnbG9iYWwgYHZtX3N3YXBwaW5lc3NgLiBUaGlzIHBhdGNoIG5vdyBjb3JyZWN0bHkgcmVzcGVjdHMgdGhlIGBzd2FwcGluZXNzYCBwYXJhbWV0ZXIgcHJvdmlkZWQgdmlhIHRoZSB1c2VyIHdoZW4gYENPTkZJR19NRU1DR2AgaXMgZGlzYWJsZWQuIEhvd2V2ZXIsIGhlcmUmIzM5O3MgdGhlIGtpY2tlcjogdGhpcyBzY2VuYXJpbyBpcyB1bmxpa2VseSB0byBiZSByZWxldmFudCBiZWNhdXNlIHN5emthbGxlciAqZGVmYXVsdHMqIHRvIGhhdmluZyBgQ09ORklHX01FTUNHYCBlbmFibGVkLCBhcyB0aGF0IGlzIHRoZSBzdGFuZGFyZCBjYXNlLgoKSSB3ZW50IGRpZ2dpbmcgZnVydGhlciwgYW5kIHRoZSBjb2RlIGNoYW5nZXMgZXNzZW50aWFsbHkgaW52b2x2ZSB0aGUgcmVsb2NhdGlvbiBvZiB0aGUgYG1lbWNnLSZndDtzd2FwcGluZXNzYCBpbml0aWFsaXphdGlvbiwgcGxhY2luZyBpdCB1bmRlciB0aGUgYCNpZmRlZiBDT05GSUdfTUVNQ0dfVjFgIGJsb2NrLiBUaGlzIG1vdmVzIHRoZSBgc3dhcHBpbmVzc2AgZmllbGQgZnJvbSBgc3RydWN0IG1lbV9jZ3JvdXBgIGlmIGBDT05GSUdfTUVNQ0dfVjFgIGlzIGRpc2FibGVkLiBUaGlzIGlzIHB1cmUgbWVtb3J5IGxheW91dCByZWZhY3RvcmluZzsgdGhlcmUgaXMgbm8gY2hhbmdlIGluIGJlaGF2aW9yIGlmIGBDT05GSUdfTUVNQ0dfVjFgIGlzIGRpc2FibGVkLgoKV2hlbiBgQ09ORklHX01FTUNHYCBpcyBlbmFibGVkLCB0aGUgY29kZSBwYXRocyBmb3IgYHNjX3N3YXBwaW5lc3NgIGFuZCBgbWVtX2Nncm91cF9zd2FwcGluZXNzYCByZW1haW4gKmZ1bmN0aW9uYWxseSBpZGVudGljYWwqIHRvIHRoZSBwcmUtcGF0Y2ggdmVyc2lvbnMuIEkmIzM5O3ZlIHJlLWV4YW1pbmVkIHRoZSBjb25kaXRpb25hbCBsb2dpYywgYW5kIHRoZXJlIGFyZSBubyBuZXcgY29kZXBhdGhzIHdoZW4gYENPTkZJR19NRU1DR2AgaXMgZW5hYmxlZCwgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGBDT05GSUdfTUVNQ0dfVjFgIGlzIGVuYWJsZWQgb3IgZGlzYWJsZWQuIFRoaXMgbWVhbnMgdGhhdCBpZiBzeXprYWxsZXIgaXMgcnVubmluZyB3aXRoIGBDT05GSUdfTUVNQ0c9eWAsIGFzIGl0IGFsbW9zdCBjZXJ0YWlubHkgaXMsIGZ1enppbmcgdGhpcyBwYXRjaCB3b24mIzM5O3QgdW5jb3ZlciBhbnkgbmV3IGJ1Z3MuIFRoZSBuZXcgY29kZSB3aWxsIGhhdmUgZXhhY3RseSB0aGUgc2FtZSBiZWhhdmlvciBhcyB0aGUgb2xkIGNvZGUuIFdlIHdvdWxkIG5lZWQgYENPTkZJR19NRU1DRz1uYCB0byBleGVyY2lzZSB0aGUgYnVnIGZpeC4KCkluIGEgbnV0c2hlbGw6IHRoaXMgcGF0Y2ggaXMgbWFpbmx5IGFib3V0IGhpZGluZyBgc3dhcHBpbmVzc2AgdW5kZXIgYSBmZWF0dXJlIGZsYWcgYW5kIHNhdmluZyBhIGJpdCBvZiBtZW1vcnkuIFRoZSBmdW5jdGlvbmFsIGNoYW5nZSwgdGhlIGNoYW5nZSBvZiBiZWhhdmlvciB3aGVuIGBDT05GSUdfTUVNQ0dgIGlzIGRpc2FibGVkLCBpcyBhIHZlcnkgbWlub3IgZWRnZSBjYXNlIHRoYXQmIzM5O3MgaGlnaGx5IHVubGlrZWx5IHRvIGJlIHJlbGV2YW50IGluIGEgdHlwaWNhbCBzeXprYWxsZXIgdGVzdGluZyBlbnZpcm9ubWVudC4KClRoZXJlZm9yZSwgZm9yIGZ1enppbmcgcHVycG9zZXMsIHRoaXMgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSB0ZXN0YWJsZSBmdW5jdGlvbmFsIGNoYW5nZXMgaWYgc3l6a2FsbGVyIGlzIHJ1bm5pbmcgd2l0aCBgQ09ORklHX01FTUNHPXlgLiBJdCYjMzk7cyBhIGNsZWFudXAgYW5kIG1lbW9yeSBvcHRpbWl6YXRpb24sIG5vdCBhIGJ1ZyBmaXggZm9yIHRoZSBzdGFuZGFyZCBjYXNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAwNzowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjZ3JvdXBfc3Vic3lzX29uX2RmbCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9iZnEtaW9zY2hlZC5jPTYyMzc9c3RhdGljIHZvaWQgYmZxX2luc2VydF9yZXF1ZXN0KHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4LCBzdHJ1Y3QgcmVxdWVzdCAqcnEsXG4tLVxuYmxvY2svYmZxLWlvc2NoZWQuYy02MjQ3LSNpZmRlZiBDT05GSUdfQkZRX0dST1VQX0lPU0NIRURcbmJsb2NrL2JmcS1pb3NjaGVkLmM6NjI0ODpcdGlmICghY2dyb3VwX3N1YnN5c19vbl9kZmwoaW9fY2dycF9zdWJzeXMpIFx1MDAyNlx1MDAyNiBycS1cdTAwM2ViaW8pXG5ibG9jay9iZnEtaW9zY2hlZC5jLTYyNDktXHRcdGJmcWdfc3RhdHNfdXBkYXRlX2xlZ2FjeV9pbyhxLCBycSk7XG4tLVxuYmxvY2svYmxrLWNncm91cC5jPTIxODI9dm9pZCBibGtfY2dyb3VwX2Jpb19zdGFydChzdHJ1Y3QgYmlvICpiaW8pXG4tLVxuYmxvY2svYmxrLWNncm91cC5jLTIxODgtXG5ibG9jay9ibGstY2dyb3VwLmM6MjE4OTpcdGlmICghY2dyb3VwX3N1YnN5c19vbl9kZmwoaW9fY2dycF9zdWJzeXMpKVxuYmxvY2svYmxrLWNncm91cC5jLTIxOTAtXHRcdHJldHVybjtcbi0tXG5ibG9jay9ibGstdGhyb3R0bGUuYz04ND1zdGF0aWMgdWludDY0X3QgdGdfYnBzX2xpbWl0KHN0cnVjdCB0aHJvdGxfZ3JwICp0ZywgaW50IHJ3KVxuLS1cbmJsb2NrL2Jsay10aHJvdHRsZS5jLTg3LVxuYmxvY2svYmxrLXRocm90dGxlLmM6ODg6XHRpZiAoY2dyb3VwX3N1YnN5c19vbl9kZmwoaW9fY2dycF9zdWJzeXMpIFx1MDAyNlx1MDAyNiAhYmxrZy1cdTAwM2VwYXJlbnQpXG5ibG9jay9ibGstdGhyb3R0bGUuYy04OS1cdFx0cmV0dXJuIFU2NF9NQVg7XG4tLVxuYmxvY2svYmxrLXRocm90dGxlLmM9OTQ9c3RhdGljIHVuc2lnbmVkIGludCB0Z19pb3BzX2xpbWl0KHN0cnVjdCB0aHJvdGxfZ3JwICp0ZywgaW50IHJ3KVxuLS1cbmJsb2NrL2Jsay10aHJvdHRsZS5jLTk3LVxuYmxvY2svYmxrLXRocm90dGxlLmM6OTg6XHRpZiAoY2dyb3VwX3N1YnN5c19vbl9kZmwoaW9fY2dycF9zdWJzeXMpIFx1MDAyNlx1MDAyNiAhYmxrZy1cdTAwM2VwYXJlbnQpXG5ibG9jay9ibGstdGhyb3R0bGUuYy05OS1cdFx0cmV0dXJuIFVJTlRfTUFYO1xuLS1cbmJsb2NrL2Jsay10aHJvdHRsZS5jPTI5OT1zdGF0aWMgdm9pZCB0aHJvdGxfcGRfaW5pdChzdHJ1Y3QgYmxrZ19wb2xpY3lfZGF0YSAqcGQpXG4tLVxuYmxvY2svYmxrLXRocm90dGxlLmMtMzIwLVx0c3EtXHUwMDNlcGFyZW50X3NxID0gXHUwMDI2dGQtXHUwMDNlc2VydmljZV9xdWV1ZTtcbmJsb2NrL2Jsay10aHJvdHRsZS5jOjMyMTpcdGlmIChjZ3JvdXBfc3Vic3lzX29uX2RmbChpb19jZ3JwX3N1YnN5cykgXHUwMDI2XHUwMDI2IGJsa2ctXHUwMDNlcGFyZW50KVxuYmxvY2svYmxrLXRocm90dGxlLmMtMzIyLVx0XHRzcS1cdTAwM2VwYXJlbnRfc3EgPSBcdTAwMjZibGtnX3RvX3RnKGJsa2ctXHUwMDNlcGFyZW50KS1cdTAwM2VzZXJ2aWNlX3F1ZXVlO1xuLS1cbmJsb2NrL2Jsay10aHJvdHRsZS5jPTEyNzA9c3RhdGljIHZvaWQgdGdfY29uZl91cGRhdGVkKHN0cnVjdCB0aHJvdGxfZ3JwICp0ZywgYm9vbCBnbG9iYWwpXG4tLVxuYmxvY2svYmxrLXRocm90dGxlLmMtMTI5NC1cdFx0LyogaWdub3JlIHJvb3Qvc2Vjb25kIGxldmVsICovXG5ibG9jay9ibGstdGhyb3R0bGUuYzoxMjk1Olx0XHRpZiAoIWNncm91cF9zdWJzeXNfb25fZGZsKGlvX2NncnBfc3Vic3lzKSB8fCAhYmxrZy1cdTAwM2VwYXJlbnQgfHxcbmJsb2NrL2Jsay10aHJvdHRsZS5jLTEyOTYtXHRcdCAgICAhYmxrZy1cdTAwM2VwYXJlbnQtXHUwMDNlcGFyZW50KVxuLS1cbmJsb2NrL2Jsay10aHJvdHRsZS5oPTE2OD1zdGF0aWMgaW5saW5lIGJvb2wgYmxrX3Nob3VsZF90aHJvdGwoc3RydWN0IGJpbyAqYmlvKVxuLS1cbmJsb2NrL2Jsay10aHJvdHRsZS5oLTE3Ni1cdHRnID0gYmxrZ190b190ZyhiaW8tXHUwMDNlYmlfYmxrZyk7XG5ibG9jay9ibGstdGhyb3R0bGUuaDoxNzc6XHRpZiAoIWNncm91cF9zdWJzeXNfb25fZGZsKGlvX2NncnBfc3Vic3lzKSkge1xuYmxvY2svYmxrLXRocm90dGxlLmgtMTc4LVx0XHRpZiAoIWJpb19mbGFnZ2VkKGJpbywgQklPX0NHUk9VUF9BQ0NUKSkge1xuLS1cbmluY2x1ZGUvbGludXgvYmFja2luZy1kZXYuaD0xNzE9c3RhdGljIGlubGluZSBib29sIGlub2RlX2Nnd2JfZW5hYmxlZChzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLS1cbmluY2x1ZGUvbGludXgvYmFja2luZy1kZXYuaC0xNzQtXG5pbmNsdWRlL2xpbnV4L2JhY2tpbmctZGV2Lmg6MTc1Olx0cmV0dXJuIGNncm91cF9zdWJzeXNfb25fZGZsKG1lbW9yeV9jZ3JwX3N1YnN5cykgXHUwMDI2XHUwMDI2XG5pbmNsdWRlL2xpbnV4L2JhY2tpbmctZGV2Lmg6MTc2Olx0XHRjZ3JvdXBfc3Vic3lzX29uX2RmbChpb19jZ3JwX3N1YnN5cykgXHUwMDI2XHUwMDI2XG5pbmNsdWRlL2xpbnV4L2JhY2tpbmctZGV2LmgtMTc3LVx0XHQoYmRpLVx1MDAzZWNhcGFiaWxpdGllcyBcdTAwMjYgQkRJX0NBUF9XUklURUJBQ0spIFx1MDAyNlx1MDAyNlxuLS1cbmluY2x1ZGUvbGludXgvY2dyb3VwLmg9OTA9ZXh0ZXJuIHN0cnVjdCBibG9ja2luZ19ub3RpZmllcl9oZWFkIGNncm91cF9saWZldGltZV9ub3RpZmllcjtcbi0tXG5pbmNsdWRlL2xpbnV4L2Nncm91cC5oLTEwOS0vKipcbmluY2x1ZGUvbGludXgvY2dyb3VwLmg6MTEwOiAqIGNncm91cF9zdWJzeXNfb25fZGZsIC0gZmFzdCB0ZXN0IG9uIHdoZXRoZXIgYSBzdWJzeXMgaXMgb24gZGVmYXVsdCBoaWVyYXJjaHlcbmluY2x1ZGUvbGludXgvY2dyb3VwLmgtMTExLSAqIEBzczogc3Vic3lzdGVtIGluIHF1ZXN0aW9uXG5pbmNsdWRlL2xpbnV4L2Nncm91cC5oLTExMi0gKi9cbmluY2x1ZGUvbGludXgvY2dyb3VwLmg6MTEzOiNkZWZpbmUgY2dyb3VwX3N1YnN5c19vbl9kZmwoc3MpXHRcdFx0XHRcdFx0XFxcbmluY2x1ZGUvbGludXgvY2dyb3VwLmgtMTE0LVx0c3RhdGljX2JyYW5jaF9saWtlbHkoXHUwMDI2c3MgIyMgX29uX2RmbF9rZXkpXG4tLVxuaW5jbHVkZS9uZXQvc29jay5oPTI3MDI9c3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfc2tfdW5kZXJfbWVtb3J5X3ByZXNzdXJlKGNvbnN0IHN0cnVjdCBzb2NrICpzaylcbi0tXG5pbmNsdWRlL25ldC9zb2NrLmgtMjcwNi0jaWZkZWYgQ09ORklHX01FTUNHX1YxXG5pbmNsdWRlL25ldC9zb2NrLmg6MjcwNzpcdGlmICghY2dyb3VwX3N1YnN5c19vbl9kZmwobWVtb3J5X2NncnBfc3Vic3lzKSlcbmluY2x1ZGUvbmV0L3NvY2suaC0yNzA4LVx0XHRyZXR1cm4gISFtZW1jZy1cdTAwM2V0Y3BtZW1fcHJlc3N1cmU7XG4tLVxua2VybmVsL2Nncm91cC9jZ3JvdXAuYz0xNDk9c3RhdGljIGNvbnN0IGNoYXIgKmNncm91cF9zdWJzeXNfbmFtZVtdID0ge1xuLS1cbmtlcm5lbC9jZ3JvdXAvY2dyb3VwLmMtMTUzLVxua2VybmVsL2Nncm91cC9jZ3JvdXAuYzoxNTQ6LyogYXJyYXkgb2Ygc3RhdGljX2tleXMgZm9yIGNncm91cF9zdWJzeXNfZW5hYmxlZCgpIGFuZCBjZ3JvdXBfc3Vic3lzX29uX2RmbCgpICovXG5rZXJuZWwvY2dyb3VwL2Nncm91cC5jLTE1NS0jZGVmaW5lIFNVQlNZUyhfeClcdFx0XHRcdFx0XHRcdFx0XFxcbi0tXG5rZXJuZWwvY2dyb3VwL2Nncm91cC5jPTE2ND1zdGF0aWMgc3RydWN0IHN0YXRpY19rZXlfdHJ1ZSAqY2dyb3VwX3N1YnN5c19lbmFibGVkX2tleVtdID0ge1xuLS1cbmtlcm5lbC9jZ3JvdXAvY2dyb3VwLmMtMTY5LSNkZWZpbmUgU1VCU1lTKF94KSBbX3ggIyMgX2NncnBfaWRdID0gXHUwMDI2X3ggIyMgX2NncnBfc3Vic3lzX29uX2RmbF9rZXksXG5rZXJuZWwvY2dyb3VwL2Nncm91cC5jOjE3MDpzdGF0aWMgc3RydWN0IHN0YXRpY19rZXlfdHJ1ZSAqY2dyb3VwX3N1YnN5c19vbl9kZmxfa2V5W10gPSB7XG5rZXJuZWwvY2dyb3VwL2Nncm91cC5jLTE3MS0jaW5jbHVkZSBcdTAwM2NsaW51eC9jZ3JvdXBfc3Vic3lzLmhcdTAwM2Vcbi0tXG5rZXJuZWwvY2dyb3VwL2Nncm91cC5jPTE4MzY9aW50IHJlYmluZF9zdWJzeXN0ZW1zKHN0cnVjdCBjZ3JvdXBfcm9vdCAqZHN0X3Jvb3QsIHUzMiBzc19tYXNrKVxuLS1cbmtlcm5lbC9jZ3JvdXAvY2dyb3VwLmMtMTkzNC1cdFx0aWYgKGRzdF9yb290ID09IFx1MDAyNmNncnBfZGZsX3Jvb3QpIHtcbmtlcm5lbC9jZ3JvdXAvY2dyb3VwLmM6MTkzNTpcdFx0XHRzdGF0aWNfYnJhbmNoX2VuYWJsZShjZ3JvdXBfc3Vic3lzX29uX2RmbF9rZXlbc3NpZF0pO1xua2VybmVsL2Nncm91cC9jZ3JvdXAuYy0xOTM2LVx0XHR9IGVsc2Uge1xua2VybmVsL2Nncm91cC9jZ3JvdXAuYy0xOTM3LVx0XHRcdGRjZ3JwLVx1MDAzZXN1YnRyZWVfY29udHJvbCB8PSAxIFx1MDAzY1x1MDAzYyBzc2lkO1xua2VybmVsL2Nncm91cC9jZ3JvdXAuYzoxOTM4Olx0XHRcdHN0YXRpY19icmFuY2hfZGlzYWJsZShjZ3JvdXBfc3Vic3lzX29uX2RmbF9rZXlbc3NpZF0pO1xua2VybmVsL2Nncm91cC9jZ3JvdXAuYy0xOTM5LVx0XHR9XG4tLVxua2VybmVsL2Nncm91cC9jcHVzZXQtdjEuYz0yMTI9dm9pZCBjcHVzZXQxX3VwZGF0ZV90YXNrX3NwcmVhZF9mbGFncyhzdHJ1Y3QgY3B1c2V0ICpjcyxcbi0tXG5rZXJuZWwvY2dyb3VwL2NwdXNldC12MS5jLTIxNC17XG5rZXJuZWwvY2dyb3VwL2NwdXNldC12MS5jOjIxNTpcdGlmIChjZ3JvdXBfc3Vic3lzX29uX2RmbChjcHVzZXRfY2dycF9zdWJzeXMpKVxua2VybmVsL2Nncm91cC9jcHVzZXQtdjEuYy0yMTYtXHRcdHJldHVybjtcbi0tXG5rZXJuZWwvY2dyb3VwL2NwdXNldC5jPTM5MD1zdGF0aWMgaW5saW5lIGJvb2wgY3B1c2V0X3YyKHZvaWQpXG4tLVxua2VybmVsL2Nncm91cC9jcHVzZXQuYy0zOTItXHRyZXR1cm4gIUlTX0VOQUJMRUQoQ09ORklHX0NQVVNFVFNfVjEpIHx8XG5rZXJuZWwvY2dyb3VwL2NwdXNldC5jOjM5MzpcdFx0Y2dyb3VwX3N1YnN5c19vbl9kZmwoY3B1c2V0X2NncnBfc3Vic3lzKTtcbmtlcm5lbC9jZ3JvdXAvY3B1c2V0LmMtMzk0LX1cbi0tXG5rZXJuZWwvY2dyb3VwL3BpZHMuYz0yNDM9c3RhdGljIHZvaWQgcGlkc19ldmVudChzdHJ1Y3QgcGlkc19jZ3JvdXAgKnBpZHNfZm9ya2luZyxcbi0tXG5rZXJuZWwvY2dyb3VwL3BpZHMuYy0yNTMtXHR9XG5rZXJuZWwvY2dyb3VwL3BpZHMuYzoyNTQ6XHRpZiAoIWNncm91cF9zdWJzeXNfb25fZGZsKHBpZHNfY2dycF9zdWJzeXMpIHx8XG5rZXJuZWwvY2dyb3VwL3BpZHMuYy0yNTUtXHQgICAgY2dycF9kZmxfcm9vdC5mbGFncyBcdTAwMjYgQ0dSUF9ST09UX1BJRFNfTE9DQUxfRVZFTlRTKSB7XG4tLVxua2VybmVsL2Nncm91cC9waWRzLmM9MzYxPXN0YXRpYyBpbnQgX19waWRzX2V2ZW50c19zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2YsIGJvb2wgbG9jYWwpXG4tLVxua2VybmVsL2Nncm91cC9waWRzLmMtMzY2LVxua2VybmVsL2Nncm91cC9waWRzLmM6MzY3Olx0aWYgKCFjZ3JvdXBfc3Vic3lzX29uX2RmbChwaWRzX2NncnBfc3Vic3lzKSB8fFxua2VybmVsL2Nncm91cC9waWRzLmMtMzY4LVx0ICAgIGNncnBfZGZsX3Jvb3QuZmxhZ3MgXHUwMDI2IENHUlBfUk9PVF9QSURTX0xPQ0FMX0VWRU5UUykge1xuLS1cbmtlcm5lbC9zY2hlZC9jb3JlLmM9OTk0Nz1zdGF0aWMgaW50IHRnX2Nmc19zY2hlZHVsYWJsZV9kb3duKHN0cnVjdCB0YXNrX2dyb3VwICp0Zywgdm9pZCAqZGF0YSlcbi0tXG5rZXJuZWwvc2NoZWQvY29yZS5jLTk5NjctXHRcdCAqL1xua2VybmVsL3NjaGVkL2NvcmUuYzo5OTY4Olx0XHRpZiAoY2dyb3VwX3N1YnN5c19vbl9kZmwoY3B1X2NncnBfc3Vic3lzKSkge1xua2VybmVsL3NjaGVkL2NvcmUuYy05OTY5LVx0XHRcdGlmIChxdW90YSA9PSBSVU5USU1FX0lORilcbi0tXG5tbS9odWdldGxiX2Nncm91cC5jPTkxPXN0YXRpYyB2b2lkIGh1Z2V0bGJfY2dyb3VwX2luaXQoc3RydWN0IGh1Z2V0bGJfY2dyb3VwICpoX2Nncm91cCxcbi0tXG5tbS9odWdldGxiX2Nncm91cC5jLTExMi1cbm1tL2h1Z2V0bGJfY2dyb3VwLmM6MTEzOlx0XHRpZiAoIWNncm91cF9zdWJzeXNfb25fZGZsKGh1Z2V0bGJfY2dycF9zdWJzeXMpKSB7XG5tbS9odWdldGxiX2Nncm91cC5jLTExNC1cdFx0XHRmYXVsdC1cdTAwM2V0cmFja19mYWlsY250ID0gdHJ1ZTtcbi0tXG5tbS9odWdldGxiX2Nncm91cC5jPTQ1Nj1zdGF0aWMgaW50IGh1Z2V0bGJfY2dyb3VwX3JlYWRfbnVtYV9zdGF0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICpkdW1teSlcbi0tXG5tbS9odWdldGxiX2Nncm91cC5jLTQ2MC1cdGludCBpZHggPSBNRU1GSUxFX0lEWChjZnQtXHUwMDNlcHJpdmF0ZSk7XG5tbS9odWdldGxiX2Nncm91cC5jOjQ2MTpcdGJvb2wgbGVnYWN5ID0gIWNncm91cF9zdWJzeXNfb25fZGZsKGh1Z2V0bGJfY2dycF9zdWJzeXMpO1xubW0vaHVnZXRsYl9jZ3JvdXAuYy00NjItXHRzdHJ1Y3QgaHVnZXRsYl9jZ3JvdXAgKmhfY2cgPSBodWdldGxiX2Nncm91cF9mcm9tX2NzcyhzZXFfY3NzKHNlcSkpO1xuLS1cbm1tL21lbWNvbnRyb2wtdjEuYz0yNTIyPXZvaWQgbWVtY2cxX2FjY291bnRfa21lbShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBucl9wYWdlcylcbm1tL21lbWNvbnRyb2wtdjEuYy0yNTIzLXtcbm1tL21lbWNvbnRyb2wtdjEuYzoyNTI0Olx0aWYgKCFjZ3JvdXBfc3Vic3lzX29uX2RmbChtZW1vcnlfY2dycF9zdWJzeXMpKSB7XG5tbS9tZW1jb250cm9sLXYxLmMtMjUyNS1cdFx0aWYgKG5yX3BhZ2VzIFx1MDAzZSAwKVxuLS1cbm1tL21lbWNvbnRyb2wtdjEuaD0zMT1zdGF0aWMgaW5saW5lIGJvb2wgZG9fbWVtc3dfYWNjb3VudCh2b2lkKVxubW0vbWVtY29udHJvbC12MS5oLTMyLXtcbm1tL21lbWNvbnRyb2wtdjEuaDozMzpcdHJldHVybiAhY2dyb3VwX3N1YnN5c19vbl9kZmwobWVtb3J5X2NncnBfc3Vic3lzKTtcbm1tL21lbWNvbnRyb2wtdjEuaC0zNC19XG4tLVxubW0vbWVtY29udHJvbC5jPTIzOD1zdGF0aWMgaW5saW5lIHZvaWQgcmVwYXJlbnRfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50KVxubW0vbWVtY29udHJvbC5jLTIzOS17XG5tbS9tZW1jb250cm9sLmM6MjQwOlx0aWYgKGNncm91cF9zdWJzeXNfb25fZGZsKG1lbW9yeV9jZ3JwX3N1YnN5cykpXG5tbS9tZW1jb250cm9sLmMtMjQxLVx0XHRyZXR1cm47XG4tLVxubW0vbWVtY29udHJvbC5jPTMzND1zdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqZ2V0X21lbV9jZ3JvdXBfY3NzX2Zyb21fZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9tZW1jb250cm9sLmMtMzM3LVxubW0vbWVtY29udHJvbC5jOjMzODpcdGlmICghY2dyb3VwX3N1YnN5c19vbl9kZmwobWVtb3J5X2NncnBfc3Vic3lzKSlcbm1tL21lbWNvbnRyb2wuYy0zMzktXHRcdHJldHVybiBcdTAwMjZyb290X21lbV9jZ3JvdXAtXHUwMDNlY3NzO1xuLS1cbm1tL21lbWNvbnRyb2wuYz04MTQ9c3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqZ2V0X25vbl9keWluZ19tZW1jZ19zdGFydChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4tLVxubW0vbWVtY29udHJvbC5jLTgxNy1cdC8qIFJlYmluZGluZyBjYW4gY2F1c2UgdGhpcyB2YWx1ZSB0byBiZSBjaGFuZ2VkIGF0IHJ1bnRpbWUgKi9cbm1tL21lbWNvbnRyb2wuYzo4MTg6XHRpZiAoY2dyb3VwX3N1YnN5c19vbl9kZmwobWVtb3J5X2NncnBfc3Vic3lzKSkge1xubW0vbWVtY29udHJvbC5jLTgxOS1cdFx0KnJjdV9sb2NrZWQgPSBmYWxzZTtcbi0tXG5tbS9tZW1jb250cm9sLmM9MTc1Nz1zdGF0aWMgdm9pZCBtZW1vcnlfc3RhdF9mb3JtYXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3Qgc2VxX2J1ZiAqcylcbm1tL21lbWNvbnRyb2wuYy0xNzU4LXtcbm1tL21lbWNvbnRyb2wuYzoxNzU5Olx0aWYgKGNncm91cF9zdWJzeXNfb25fZGZsKG1lbW9yeV9jZ3JwX3N1YnN5cykpXG5tbS9tZW1jb250cm9sLmMtMTc2MC1cdFx0bWVtY2dfc3RhdF9mb3JtYXQobWVtY2csIHMpO1xuLS1cbm1tL21lbWNvbnRyb2wuYz0xNzk3PXZvaWQgbWVtX2Nncm91cF9wcmludF9vb21fbWVtaW5mbyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4tLVxubW0vbWVtY29udHJvbC5jLTE4MDUtXG5tbS9tZW1jb250cm9sLmM6MTgwNjpcdGlmIChjZ3JvdXBfc3Vic3lzX29uX2RmbChtZW1vcnlfY2dycF9zdWJzeXMpKVxubW0vbWVtY29udHJvbC5jLTE4MDctXHRcdG1lbW9yeV9mYWlsY250ID0gYXRvbWljX2xvbmdfcmVhZChcdTAwMjZtZW1jZy1cdTAwM2VtZW1vcnlfZXZlbnRzW01FTUNHX01BWF0pO1xuLS1cbm1tL21lbWNvbnRyb2wuYy0xODEzLVx0XHRLKCh1NjQpUkVBRF9PTkNFKG1lbWNnLVx1MDAzZW1lbW9yeS5tYXgpKSwgbWVtb3J5X2ZhaWxjbnQpO1xubW0vbWVtY29udHJvbC5jOjE4MTQ6XHRpZiAoY2dyb3VwX3N1YnN5c19vbl9kZmwobWVtb3J5X2NncnBfc3Vic3lzKSlcbm1tL21lbWNvbnRyb2wuYy0xODE1LVx0XHRwcl9pbmZvKFwmIzM0O3N3YXA6IHVzYWdlICVsbHVrQiwgbGltaXQgJWxsdWtCLCBmYWlsY250ICVsdVxcblwmIzM0Oyxcbi0tXG5tbS9tZW1jb250cm9sLmM9MTg2MD12b2lkIF9fbWVtY2dfbWVtb3J5X2V2ZW50KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbi0tXG5tbS9tZW1jb250cm9sLmMtMTg4MS1cbm1tL21lbWNvbnRyb2wuYzoxODgyOlx0XHRpZiAoIWNncm91cF9zdWJzeXNfb25fZGZsKG1lbW9yeV9jZ3JwX3N1YnN5cykpXG5tbS9tZW1jb250cm9sLmMtMTg4My1cdFx0XHRicmVhaztcbi0tXG5tbS9tZW1jb250cm9sLmM9MTk1Mz1zdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9nZXRfb29tX2dyb3VwKHN0cnVjdCB0YXNrX3N0cnVjdCAqdmljdGltLFxuLS1cbm1tL21lbWNvbnRyb2wuYy0xOTU4LVxubW0vbWVtY29udHJvbC5jOjE5NTk6XHRpZiAoIWNncm91cF9zdWJzeXNfb25fZGZsKG1lbW9yeV9jZ3JwX3N1YnN5cykpXG5tbS9tZW1jb250cm9sLmMtMTk2MC1cdFx0cmV0dXJuIE5VTEw7XG4tLVxubW0vbWVtY29udHJvbC5jPTQxNjA9bWVtX2Nncm91cF9jc3NfYWxsb2Moc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKnBhcmVudF9jc3MpXG4tLVxubW0vbWVtY29udHJvbC5jLTQxNjMtXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csICpvbGRfbWVtY2c7XG5tbS9tZW1jb250cm9sLmM6NDE2NDpcdGJvb2wgbWVtY2dfb25fZGZsID0gY2dyb3VwX3N1YnN5c19vbl9kZmwobWVtb3J5X2NncnBfc3Vic3lzKTtcbm1tL21lbWNvbnRyb2wuYy00MTY1LVxuLS1cbm1tL21lbWNvbnRyb2wuYz00MzIzPXN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfY3NzX2ZyZWUoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcylcbi0tXG5tbS9tZW1jb250cm9sLmMtNDMzMS0jZW5kaWZcbm1tL21lbWNvbnRyb2wuYzo0MzMyOlx0aWYgKGNncm91cF9zdWJzeXNfb25fZGZsKG1lbW9yeV9jZ3JwX3N1YnN5cykgXHUwMDI2XHUwMDI2ICFjZ3JvdXBfbWVtb3J5X25vc29ja2V0KVxubW0vbWVtY29udHJvbC5jLTQzMzMtXHRcdHN0YXRpY19icmFuY2hfZGVjKFx1MDAyNm1lbWNnX3NvY2tldHNfZW5hYmxlZF9rZXkpO1xubW0vbWVtY29udHJvbC5jLTQzMzQtXG5tbS9tZW1jb250cm9sLmM6NDMzNTpcdGlmICghY2dyb3VwX3N1YnN5c19vbl9kZmwobWVtb3J5X2NncnBfc3Vic3lzKSBcdTAwMjZcdTAwMjYgbWVtY2cxX3RjcG1lbV9hY3RpdmUobWVtY2cpKVxubW0vbWVtY29udHJvbC5jLTQzMzYtXHRcdHN0YXRpY19icmFuY2hfZGVjKFx1MDAyNm1lbWNnX3NvY2tldHNfZW5hYmxlZF9rZXkpO1xuLS1cbm1tL21lbWNvbnRyb2wuYz01MTc5PWludCBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKHN0cnVjdCBmb2xpbyAqZm9saW8sIGdmcF90IGdmcClcbi0tXG5tbS9tZW1jb250cm9sLmMtNTE4OS1cdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkgfHwgIW1lbWNnX2FjY291bnRzX2h1Z2V0bGIoKSB8fFxubW0vbWVtY29udHJvbC5jOjUxOTA6XHRcdCFtZW1jZyB8fCAhY2dyb3VwX3N1YnN5c19vbl9kZmwobWVtb3J5X2NncnBfc3Vic3lzKSlcbm1tL21lbWNvbnRyb2wuYy01MTkxLVx0XHRnb3RvIG91dDtcbi0tXG5tbS9tZW1jb250cm9sLmM9NTQzMz12b2lkIG1lbV9jZ3JvdXBfc2tfYWxsb2Moc3RydWN0IHNvY2sgKnNrKVxuLS1cbm1tL21lbWNvbnRyb2wuYy01NDQ3LVx0XHRnb3RvIG91dDtcbm1tL21lbWNvbnRyb2wuYzo1NDQ4Olx0aWYgKCFjZ3JvdXBfc3Vic3lzX29uX2RmbChtZW1vcnlfY2dycF9zdWJzeXMpIFx1MDAyNlx1MDAyNiAhbWVtY2cxX3RjcG1lbV9hY3RpdmUobWVtY2cpKVxubW0vbWVtY29udHJvbC5jLTU0NDktXHRcdGdvdG8gb3V0O1xuLS1cbm1tL21lbWNvbnRyb2wuYz01NDg5PWJvb2wgbWVtX2Nncm91cF9za19jaGFyZ2UoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgbnJfcGFnZXMsXG4tLVxubW0vbWVtY29udHJvbC5jLTU0OTMtXG5tbS9tZW1jb250cm9sLmM6NTQ5NDpcdGlmICghY2dyb3VwX3N1YnN5c19vbl9kZmwobWVtb3J5X2NncnBfc3Vic3lzKSlcbm1tL21lbWNvbnRyb2wuYy01NDk1LVx0XHRyZXR1cm4gbWVtY2cxX2NoYXJnZV9za21lbShtZW1jZywgbnJfcGFnZXMsIGdmcF9tYXNrKTtcbi0tXG5tbS9tZW1jb250cm9sLmM9NTUxMD12b2lkIG1lbV9jZ3JvdXBfc2tfdW5jaGFyZ2UoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgbnJfcGFnZXMpXG4tLVxubW0vbWVtY29udHJvbC5jLTU1MTMtXG5tbS9tZW1jb250cm9sLmM6NTUxNDpcdGlmICghY2dyb3VwX3N1YnN5c19vbl9kZmwobWVtb3J5X2NncnBfc3Vic3lzKSkge1xubW0vbWVtY29udHJvbC5jLTU1MTUtXHRcdG1lbWNnMV91bmNoYXJnZV9za21lbShtZW1jZywgbnJfcGFnZXMpO1xuLS1cbm1tL21lbWNvbnRyb2wuYz01ODU1PWJvb2wgb2JqX2Nncm91cF9tYXlfenN3YXAoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnKVxuLS1cbm1tL21lbWNvbnRyb2wuYy01ODU5LVxubW0vbWVtY29udHJvbC5jOjU4NjA6XHRpZiAoIWNncm91cF9zdWJzeXNfb25fZGZsKG1lbW9yeV9jZ3JwX3N1YnN5cykpXG5tbS9tZW1jb250cm9sLmMtNTg2MS1cdFx0cmV0dXJuIHRydWU7XG4tLVxubW0vbWVtY29udHJvbC5jPTU4OTY9dm9pZCBvYmpfY2dyb3VwX2NoYXJnZV96c3dhcChzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csIHNpemVfdCBzaXplKVxuLS1cbm1tL21lbWNvbnRyb2wuYy01ODk5LVxubW0vbWVtY29udHJvbC5jOjU5MDA6XHRpZiAoIWNncm91cF9zdWJzeXNfb25fZGZsKG1lbW9yeV9jZ3JwX3N1YnN5cykpXG5tbS9tZW1jb250cm9sLmMtNTkwMS1cdFx0cmV0dXJuO1xuLS1cbm1tL21lbWNvbnRyb2wuYz01OTI4PXZvaWQgb2JqX2Nncm91cF91bmNoYXJnZV96c3dhcChzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csIHNpemVfdCBzaXplKVxuLS1cbm1tL21lbWNvbnRyb2wuYy01OTMxLVxubW0vbWVtY29udHJvbC5jOjU5MzI6XHRpZiAoIWNncm91cF9zdWJzeXNfb25fZGZsKG1lbW9yeV9jZ3JwX3N1YnN5cykpXG5tbS9tZW1jb250cm9sLmMtNTkzMy1cdFx0cmV0dXJuO1xuLS1cbm1tL21lbWNvbnRyb2wuYz02MDc1PXZvaWQgbWVtX2Nncm91cF9zaG93X3Byb3RlY3RlZF9tZW1vcnkoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxubW0vbWVtY29udHJvbC5jLTYwNzYte1xubW0vbWVtY29udHJvbC5jOjYwNzc6XHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpIHx8ICFjZ3JvdXBfc3Vic3lzX29uX2RmbChtZW1vcnlfY2dycF9zdWJzeXMpKVxubW0vbWVtY29udHJvbC5jLTYwNzgtXHRcdHJldHVybjtcbi0tXG5tbS9zd2FwLmg9MTA1PXN0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfc3dhcHBpbmVzcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4tLVxubW0vc3dhcC5oLTEwNy0jaWZkZWYgQ09ORklHX01FTUNHX1YxXG5tbS9zd2FwLmg6MTA4Olx0aWYgKCFjZ3JvdXBfc3Vic3lzX29uX2RmbChtZW1vcnlfY2dycF9zdWJzeXMpIFx1MDAyNlx1MDAyNlxubW0vc3dhcC5oLTEwOS1cdCAgICAhbWVtX2Nncm91cF9kaXNhYmxlZCgpIFx1MDAyNlx1MDAyNiAhbWVtX2Nncm91cF9pc19yb290KG1lbWNnKSlcbi0tXG5tbS92bXByZXNzdXJlLmM9MTA5PXZvaWQgdm1wcmVzc3VyZShnZnBfdCBnZnAsIGludCBvcmRlciwgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBib29sIHRyZWUsXG4tLVxubW0vdm1wcmVzc3VyZS5jLTEyMi1cdCAqL1xubW0vdm1wcmVzc3VyZS5jOjEyMzpcdGlmIChjZ3JvdXBfc3Vic3lzX29uX2RmbChtZW1vcnlfY2dycF9zdWJzeXMpID09IHRyZWUpXG5tbS92bXByZXNzdXJlLmMtMTI0LVx0XHRyZXR1cm47XG4tLVxubW0vdm1zY2FuLmM9MjM5PXN0YXRpYyBib29sIHdyaXRlYmFja190aHJvdHRsaW5nX3NhbmUoc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtMjQzLSNpZmRlZiBDT05GSUdfQ0dST1VQX1dSSVRFQkFDS1xubW0vdm1zY2FuLmM6MjQ0Olx0aWYgKGNncm91cF9zdWJzeXNfb25fZGZsKG1lbW9yeV9jZ3JwX3N1YnN5cykpXG5tbS92bXNjYW4uYy0yNDUtXHRcdHJldHVybiB0cnVlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAwNzowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNzY3NQoJCQkJCQkJb3V0cHV0OiAxNTkKCQkJCQkJCXRob3VnaHRzOiA4MzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgdGhlIFN3YXBwaW5lc3MgUGF0Y2gqKgoKT2theSwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC4gYGNncm91cF9zdWJzeXNfb25fZGZsYCBpcyBhIGtleSBpbmRpY2F0b3IgaGVyZSwgY2hlY2tpbmcgYSBzdGF0aWMga2V5LiBJZiBgQ09ORklHX01FTUNHYCBpcyBlbmFibGVkLCB0aGVuIGBtZW1vcnlfY2dycF9zdWJzeXNgIGlzIGRlZmluZWQuIEFuZCBzaW5jZSBgQ09ORklHX01FTUNHX1YxYCBpcyBkaXNhYmxlZCwgdjEgbWVtb3J5IGNncm91cHMgYXJlIGVmZmVjdGl2ZWx5IG9mZi4gVGhhdCBtZWFucyBtZW1vcnkgY2dyb3VwcyBvbmx5IGV4aXN0IG9uIHRoZSBkZWZhdWx0IGhpZXJhcmNoeSwgd2hpY2ggaXMgY2dyb3VwIHYyLiBUaGVyZWZvcmUsIHRoZSBgY2dyb3VwX3N1YnN5c19vbl9kZmwobWVtb3J5X2NncnBfc3Vic3lzKWAgY2hlY2sgd2lsbCBiZSB0cnVlLiBTbyBgbWVtX2Nncm91cF9zd2FwcGluZXNzYCB3aWxsIHJldHVybiBgdm1fc3dhcHBpbmVzc2AsIGJvdGggYmVmb3JlIGFuZCBhZnRlciB0aGUgcGF0Y2ggZm9yIHRoZSB0eXBpY2FsIGNhc2Ugd2hlcmUgYENPTkZJR19NRU1DRz15YC4gVGh1cywgbm8gY2hhbmdlIGluIGJlaGF2aW9yIHRoZXJlLgoKVGhlIG9ubHkgcmVhbCBjaGFuZ2UgSSBjYW4gc2VlIGlzIHdoZW4gYENPTkZJR19NRU1DRz1uYC4gSW4gdGhhdCBzcGVjaWZpYyBjYXNlLCBgc2Nfc3dhcHBpbmVzc2Agbm93IGFjdHVhbGx5IHJlc3BlY3RzIGBzYy0mZ3Q7cHJvYWN0aXZlX3N3YXBwaW5lc3NgLiBUaGF0JiMzOTtzIGEgdmVyeSBtaW5vciBjaGFuZ2UsIGFuZCBob25lc3RseSwgd2UgZG9uJiMzOTt0IHVzdWFsbHkgZnV6eiB3aXRoIGBDT05GSUdfTUVNQ0c9bmAuIEl0JiMzOTtzIG5vdCBhIHN0YW5kYXJkIGNvbmZpZ3VyYXRpb24gZm9yIFN5emthbGxlci4KCkhtbSwgSSBzaG91bGQgZG91YmxlLWNoZWNrIHRvIG1ha2Ugc3VyZSBgc2MtJmd0O3Byb2FjdGl2ZV9zd2FwcGluZXNzYCBpc24mIzM5O3QgdXNlZCBlbHNld2hlcmUuIEFoLCB5ZXMsIGxvb2tpbmcgYXQgYG1tL3Ztc2Nhbi5jYCwgdGhlIG5ldyBgc2Nfc3dhcHBpbmVzc2AgZnVuY3Rpb24gaXM6CgpgYGBjCnN0YXRpYyBpbnQgc2Nfc3dhcHBpbmVzcyhzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYywgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQp7CglpZiAoc2MtJmd0O3Byb2FjdGl2ZSAmYW1wOyZhbXA7IHNjLSZndDtwcm9hY3RpdmVfc3dhcHBpbmVzcykKCQlyZXR1cm4gKnNjLSZndDtwcm9hY3RpdmVfc3dhcHBpbmVzczsKCXJldHVybiBtZW1fY2dyb3VwX3N3YXBwaW5lc3MobWVtY2cpOwp9CmBgYAoKQmVmb3JlIHRoZSBwYXRjaCwgaWYgYENPTkZJR19NRU1DR2Agd2FzIGRpc2FibGVkLCBgc2Nfc3dhcHBpbmVzc2Agd2FzOgoKYGBgYwpzdGF0aWMgaW50IHNjX3N3YXBwaW5lc3Moc3RydWN0IHNjYW5fY29udHJvbCAqc2MsIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykKewoJcmV0dXJuIFJFQURfT05DRSh2bV9zd2FwcGluZXNzKTsKfQpgYGAKCk9rYXksIHNvIHRoZSBjaGFuZ2UgaXMgaXNvbGF0ZWQgdG8gdGhpcyBvbmUgbWlub3IgdXNlIGNhc2UuIE5vdywgZ2l2ZW4gdGhlIHByb21wdCYjMzk7cyBjcml0ZXJpYTogJiMzNDtSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zLi4uIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMuLi4gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93Li4uIElmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2ggdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuJiMzNDsKCldoaWxlIGl0ICpkb2VzKiBtb2RpZnkgY29yZSBrZXJuZWwgbG9naWMgaW4gYHZtc2Nhbi5jYCwgdGhlIGNvcmUgbG9naWMgY2hhbmdlcyBhcmUgZWZmZWN0aXZlbHkgYSByZWZhY3RvcmluZyBmb3IgdGhlIGRlZmF1bHQgYENPTkZJR19NRU1DRz15YCAodGhlIG5vcm1hbCBjb25maWd1cmF0aW9uIHRoYXQgd2UgZnV6eikuIFRoZSBmdW5jdGlvbmFsIGNoYW5nZSBmb3IgYENPTkZJR19NRU1DRz1uYCBpcyBzbyBtaW5pbWFsIGFuZCBvYnNjdXJlIHRoYXQgaXQgZG9lc24mIzM5O3Qgd2FycmFudCBmb2N1c2VkIGZ1enppbmcgZWZmb3J0cy4KCkkmIzM5O20gY29tZm9ydGFibGUgd2l0aCB0aGUgYFdvcnRoRnV6emluZz1mYWxzZWAuIFRoZSByZWFzb25pbmcgaXMgdGhhdCB0aGUgcGF0Y2ggaXMgYSByZWZhY3RvcmluZyB0byBlc3NlbnRpYWxseSBoaWRlIHRoZSBgc3dhcHBpbmVzc2AgZmllbGQgaW4gYHN0cnVjdCBtZW1fY2dyb3VwYCB1bmRlciBgQ09ORklHX01FTUNHX1YxYCwgd2hpY2ggc2F2ZXMgbWVtb3J5IHdoZW4gY2dyb3VwIHYxIGlzIGRpc2FibGVkLiBGb3IgdGhlIHN0YW5kYXJkIGBDT05GSUdfTUVNQ0c9eWAgY29uZmlndXJhdGlvbiwgdGhlcmUgaXMgemVybyBjaGFuZ2UgaW4gYmVoYXZpb3IuIFRoZSAqb25seSogZnVuY3Rpb25hbCBjaGFuZ2UgaXMgYSBzbWFsbCBmaXggZm9yIGBDT05GSUdfTUVNQ0c9bmAsIHNvIHRoYXQgcHJvYWN0aXZlIG5vZGUgcmVjbGFpbSB2aWEgc3lzZnMgbm93IHJlc3BlY3RzIHRoZSB1c2VyLXByb3ZpZGVkIGBzd2FwcGluZXNzYCBwYXJhbWV0ZXIuIFRoaXMgaXMgYSB2ZXJ5IG1pbm9yIGVkZ2UgY2FzZSBpbiBhIG5vbi1kZWZhdWx0IGNvbmZpZ3VyYXRpb24gYW5kIGRvZXNuJiMzOTt0IHdhcnJhbnQgZm9jdXNlZCBmdXp6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAwNzowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGlzIHByaW1hcmlseSBhIHJlZmFjdG9yaW5nIHRvIGhpZGUgdGhlIGBzd2FwcGluZXNzYCBmaWVsZCBpbiBgc3RydWN0IG1lbV9jZ3JvdXBgIHVuZGVyIGBDT05GSUdfTUVNQ0dfVjFgIHRvIHNhdmUgbWVtb3J5IHdoZW4gY2dyb3VwIHYxIGlzIGRpc2FibGVkLiBGb3IgdGhlIGRlZmF1bHQgYENPTkZJR19NRU1DRz15YCBjb25maWd1cmF0aW9uLCB0aGVyZSBpcyBubyBmdW5jdGlvbmFsIGNoYW5nZSBpbiBiZWhhdmlvci4gVGhlIG9ubHkgZnVuY3Rpb25hbCBjaGFuZ2UgaXMgYSBtaW5vciBmaXggZm9yIGBDT05GSUdfTUVNQ0c9bmAgd2hlcmUgcHJvYWN0aXZlIG5vZGUgcmVjbGFpbSB2aWEgc3lzZnMgbm93IHJlc3BlY3RzIHRoZSB1c2VyLXByb3ZpZGVkIGBzd2FwcGluZXNzYCBwYXJhbWV0ZXIgaW5zdGVhZCBvZiBpZ25vcmluZyBpdC4gVGhpcyBpcyBhIHZlcnkgbWlub3IgZWRnZSBjYXNlIGluIGEgbm9uLWRlZmF1bHQgY29uZmlnIGFuZCBkb2VzIG5vdCB3YXJyYW50IGZvY3VzZWQgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGlzIHByaW1hcmlseSBhIHJlZmFjdG9yaW5nIHRvIGhpZGUgdGhlIGBzd2FwcGluZXNzYCBmaWVsZCBpbiBgc3RydWN0IG1lbV9jZ3JvdXBgIHVuZGVyIGBDT05GSUdfTUVNQ0dfVjFgIHRvIHNhdmUgbWVtb3J5IHdoZW4gY2dyb3VwIHYxIGlzIGRpc2FibGVkLiBGb3IgdGhlIGRlZmF1bHQgYENPTkZJR19NRU1DRz15YCBjb25maWd1cmF0aW9uLCB0aGVyZSBpcyBubyBmdW5jdGlvbmFsIGNoYW5nZSBpbiBiZWhhdmlvci4gVGhlIG9ubHkgZnVuY3Rpb25hbCBjaGFuZ2UgaXMgYSBtaW5vciBmaXggZm9yIGBDT05GSUdfTUVNQ0c9bmAgd2hlcmUgcHJvYWN0aXZlIG5vZGUgcmVjbGFpbSB2aWEgc3lzZnMgbm93IHJlc3BlY3RzIHRoZSB1c2VyLXByb3ZpZGVkIGBzd2FwcGluZXNzYCBwYXJhbWV0ZXIgaW5zdGVhZCBvZiBpZ25vcmluZyBpdC4gVGhpcyBpcyBhIHZlcnkgbWlub3IgZWRnZSBjYXNlIGluIGEgbm9uLWRlZmF1bHQgY29uZmlnIGFuZCBkb2VzIG5vdCB3YXJyYW50IGZvY3VzZWQgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0yNFQwNzowMDoyMi42Nzk5NjY3MTlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTYwODUzNTIzMjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGlzIHByaW1hcmlseSBhIHJlZmFjdG9yaW5nIHRvIGhpZGUgdGhlIGBzd2FwcGluZXNzYCBmaWVsZCBpbiBgc3RydWN0IG1lbV9jZ3JvdXBgIHVuZGVyIGBDT05GSUdfTUVNQ0dfVjFgIHRvIHNhdmUgbWVtb3J5IHdoZW4gY2dyb3VwIHYxIGlzIGRpc2FibGVkLiBGb3IgdGhlIGRlZmF1bHQgYENPTkZJR19NRU1DRz15YCBjb25maWd1cmF0aW9uLCB0aGVyZSBpcyBubyBmdW5jdGlvbmFsIGNoYW5nZSBpbiBiZWhhdmlvci4gVGhlIG9ubHkgZnVuY3Rpb25hbCBjaGFuZ2UgaXMgYSBtaW5vciBmaXggZm9yIGBDT05GSUdfTUVNQ0c9bmAgd2hlcmUgcHJvYWN0aXZlIG5vZGUgcmVjbGFpbSB2aWEgc3lzZnMgbm93IHJlc3BlY3RzIHRoZSB1c2VyLXByb3ZpZGVkIGBzd2FwcGluZXNzYCBwYXJhbWV0ZXIgaW5zdGVhZCBvZiBpZ25vcmluZyBpdC4gVGhpcyBpcyBhIHZlcnkgbWlub3IgZWRnZSBjYXNlIGluIGEgbm9uLWRlZmF1bHQgY29uZmlnIGFuZCBkb2VzIG5vdCB3YXJyYW50IGZvY3VzZWQgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDA3OjAwOjIyLjY3OTk3NTY1OVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzkxMDE5MTI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNjIzNDEyNTA4MmJhNTY0YjhlY2Q1ZDRkYWI4OTgyMjk3ZTY1N2ZiNlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIEp1bCAyNCAwNzowMDoyMCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaCBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXFxuaW5kZXggOTU3MjYwNjc3Njc4MTUuLmU3YTc5NGRmYjQwZTQ5IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcXG5AQCAtMjM5LDggKzIzOSw2IEBAIHN0cnVjdCBtZW1fY2dyb3VwIHtcXG4gXFx0ICovXFxuIFxcdGJvb2wgb29tX2dyb3VwO1xcbiBcXG4tXFx0aW50IHN3YXBwaW5lc3M7XFxuLVxcbiBcXHQvKiBtZW1vcnkuZXZlbnRzIGFuZCBtZW1vcnkuZXZlbnRzLmxvY2FsICovXFxuIFxcdHN0cnVjdCBjZ3JvdXBfZmlsZSBldmVudHNfZmlsZTtcXG4gXFx0c3RydWN0IGNncm91cF9maWxlIGV2ZW50c19sb2NhbF9maWxlO1xcbkBAIC0zMTgsNiArMzE2LDggQEAgc3RydWN0IG1lbV9jZ3JvdXAge1xcbiBcXHQvKiBMaXN0IG9mIGV2ZW50cyB3aGljaCB1c2Vyc3BhY2Ugd2FudCB0byByZWNlaXZlICovXFxuIFxcdHN0cnVjdCBsaXN0X2hlYWQgZXZlbnRfbGlzdDtcXG4gXFx0c3BpbmxvY2tfdCBldmVudF9saXN0X2xvY2s7XFxuK1xcbitcXHRpbnQgc3dhcHBpbmVzcztcXG4gI2VuZGlmIC8qIENPTkZJR19NRU1DR19WMSAqL1xcbiBcXG4gXFx0c3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKm5vZGVpbmZvW107XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3dhcC5oIGIvaW5jbHVkZS9saW51eC9zd2FwLmhcXG5pbmRleCAwNTQ0YjJlYzRjNTY1Yi4uNDVmMzAxZDczZTJhZWUgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9zd2FwLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3N3YXAuaFxcbkBAIC0zMDksNyArMzA5LDYgQEAgc3RhdGljIGlubGluZSBib29sIGxydV9jYWNoZV9kaXNhYmxlZCh2b2lkKVxcbiB9XFxuIFxcbiBleHRlcm4gdW5zaWduZWQgbG9uZyBzaHJpbmtfYWxsX21lbW9yeSh1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTtcXG4tZXh0ZXJuIGludCB2bV9zd2FwcGluZXNzO1xcbiBsb25nIHJlbW92ZV9tYXBwaW5nKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcXG4gXFxuICNpZiBkZWZpbmVkKENPTkZJR19TWVNGUykgXFx1MDAyNlxcdTAwMjYgZGVmaW5lZChDT05GSUdfTlVNQSlcXG5AQCAtNDczLDI1ICs0NzIsNyBAQCBzdGF0aWMgaW5saW5lIGludCBhZGRfc3dhcF9leHRlbnQoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpcyxcXG4gfVxcbiAjZW5kaWYgLyogQ09ORklHX1NXQVAgKi9cXG4gI2lmZGVmIENPTkZJR19NRU1DR1xcbi1zdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX3N3YXBwaW5lc3Moc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbi17XFxuLVxcdC8qIENncm91cDIgZG9lc24ndCBoYXZlIHBlci1jZ3JvdXAgc3dhcHBpbmVzcyAqL1xcbi1cXHRpZiAoY2dyb3VwX3N1YnN5c19vbl9kZmwobWVtb3J5X2NncnBfc3Vic3lzKSlcXG4tXFx0XFx0cmV0dXJuIFJFQURfT05DRSh2bV9zd2FwcGluZXNzKTtcXG4tXFxuLVxcdC8qIHJvb3QgPyAqL1xcbi1cXHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpIHx8IG1lbV9jZ3JvdXBfaXNfcm9vdChtZW1jZykpXFxuLVxcdFxcdHJldHVybiBSRUFEX09OQ0Uodm1fc3dhcHBpbmVzcyk7XFxuLVxcbi1cXHRyZXR1cm4gUkVBRF9PTkNFKG1lbWNnLVxcdTAwM2Vzd2FwcGluZXNzKTtcXG4tfVxcbi1cXG4gdm9pZCBscnVfcmVwYXJlbnRfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LCBpbnQgbmlkKTtcXG4tI2Vsc2VcXG4tc3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF9zd2FwcGluZXNzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4te1xcbi1cXHRyZXR1cm4gUkVBRF9PTkNFKHZtX3N3YXBwaW5lc3MpO1xcbi19XFxuICNlbmRpZlxcbiBcXG4gI2lmIGRlZmluZWQoQ09ORklHX1NXQVApIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX01FTUNHKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19CTEtfQ0dST1VQKVxcbmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmNcXG5pbmRleCA4MzE5YWQ4YzVjMjNhYy4uNjg2NGI3NjQ1NmZiM2UgMTAwNjQ0XFxuLS0tIGEvbW0vbWVtY29udHJvbC5jXFxuKysrIGIvbW0vbWVtY29udHJvbC5jXFxuQEAgLTYzLDYgKzYzLDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NjaGVkL2lzb2xhdGlvbi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgva21lbWxlYWsuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFxcImludGVybmFsLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJzd2FwLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJzd2FwX3RhYmxlLmhcXFwiXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQvc29jay5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L2lwLmhcXHUwMDNlXFxuQEAgLTQxNzYsMTEgKzQxNzcsMTAgQEAgbWVtX2Nncm91cF9jc3NfYWxsb2Moc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKnBhcmVudF9jc3MpXFxuICNlbmRpZlxcbiBcXHRwYWdlX2NvdW50ZXJfc2V0X2hpZ2goXFx1MDAyNm1lbWNnLVxcdTAwM2Vzd2FwLCBQQUdFX0NPVU5URVJfTUFYKTtcXG4gXFx0aWYgKHBhcmVudCkge1xcbi1cXHRcXHRXUklURV9PTkNFKG1lbWNnLVxcdTAwM2Vzd2FwcGluZXNzLCBtZW1fY2dyb3VwX3N3YXBwaW5lc3MocGFyZW50KSk7XFxuLVxcbiBcXHRcXHRwYWdlX2NvdW50ZXJfaW5pdChcXHUwMDI2bWVtY2ctXFx1MDAzZW1lbW9yeSwgXFx1MDAyNnBhcmVudC1cXHUwMDNlbWVtb3J5LCBtZW1jZ19vbl9kZmwpO1xcbiBcXHRcXHRwYWdlX2NvdW50ZXJfaW5pdChcXHUwMDI2bWVtY2ctXFx1MDAzZXN3YXAsIFxcdTAwMjZwYXJlbnQtXFx1MDAzZXN3YXAsIGZhbHNlKTtcXG4gI2lmZGVmIENPTkZJR19NRU1DR19WMVxcbitcXHRcXHRXUklURV9PTkNFKG1lbWNnLVxcdTAwM2Vzd2FwcGluZXNzLCBtZW1fY2dyb3VwX3N3YXBwaW5lc3MocGFyZW50KSk7XFxuIFxcdFxcdG1lbWNnLVxcdTAwM2VtZW1vcnkudHJhY2tfZmFpbGNudCA9ICFtZW1jZ19vbl9kZmw7XFxuIFxcdFxcdFdSSVRFX09OQ0UobWVtY2ctXFx1MDAzZW9vbV9raWxsX2Rpc2FibGUsIFJFQURfT05DRShwYXJlbnQtXFx1MDAzZW9vbV9raWxsX2Rpc2FibGUpKTtcXG4gXFx0XFx0cGFnZV9jb3VudGVyX2luaXQoXFx1MDAyNm1lbWNnLVxcdTAwM2VrbWVtLCBcXHUwMDI2cGFyZW50LVxcdTAwM2VrbWVtLCBmYWxzZSk7XFxuZGlmZiAtLWdpdCBhL21tL3N3YXAuaCBiL21tL3N3YXAuaFxcbmluZGV4IGFiZDI2NTg4YWJkMjJjLi5iMDQ4OGY3YjY4YjVkMyAxMDA2NDRcXG4tLS0gYS9tbS9zd2FwLmhcXG4rKysgYi9tbS9zd2FwLmhcXG5AQCAtNCw2ICs0LDcgQEBcXG4gXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9hdG9taWMuaFxcdTAwM2UgLyogZm9yIGF0b21pY19sb25nX3QgKi9cXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21tLmhcXHUwMDNlIC8qIGZvciBQQUdFX1NISUZUICovXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9tZW1jb250cm9sLmhcXHUwMDNlIC8qIGZvciBtZW1fY2dyb3VwX3N3YXBwaW5lc3MoKSAqL1xcbiBcXG4gc3RydWN0IG1lbXBvbGljeTtcXG4gc3RydWN0IHN3YXBfaW9jYjtcXG5AQCAtOTksNiArMTAwLDE4IEBAIHN0cnVjdCBzd2FwX29wcyB7XFxuIFxcdHZvaWQgKCpzdWJtaXRfcmVhZCkoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgpO1xcbiB9O1xcbiBcXG4rZXh0ZXJuIGludCB2bV9zd2FwcGluZXNzO1xcbitcXG4rc3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF9zd2FwcGluZXNzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4re1xcbisjaWZkZWYgQ09ORklHX01FTUNHX1YxXFxuK1xcdGlmICghY2dyb3VwX3N1YnN5c19vbl9kZmwobWVtb3J5X2NncnBfc3Vic3lzKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgIW1lbV9jZ3JvdXBfZGlzYWJsZWQoKSBcXHUwMDI2XFx1MDAyNiAhbWVtX2Nncm91cF9pc19yb290KG1lbWNnKSlcXG4rXFx0XFx0cmV0dXJuIG1lbWNnLVxcdTAwM2Vzd2FwcGluZXNzO1xcbisjZW5kaWZcXG4rXFx0cmV0dXJuIFJFQURfT05DRSh2bV9zd2FwcGluZXNzKTtcXG4rfVxcbitcXG4gI2lmZGVmIENPTkZJR19TV0FQXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zd2Fwb3BzLmhcXHUwMDNlIC8qIGZvciBzd3Bfb2Zmc2V0ICovXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9ibGtfdHlwZXMuaFxcdTAwM2UgLyogZm9yIGJpb19lbmRfaW9fdCAqL1xcbmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jXFxuaW5kZXggMDZlMTAzZjk3ODFlNWQuLjE1NTE2N2IzNjE0YjZkIDEwMDY0NFxcbi0tLSBhL21tL3Ztc2Nhbi5jXFxuKysrIGIvbW0vdm1zY2FuLmNcXG5AQCAtMTk5LDYgKzE5OSwxMyBAQCBzdHJ1Y3Qgc2Nhbl9jb250cm9sIHtcXG4gICovXFxuIGludCB2bV9zd2FwcGluZXNzID0gNjA7XFxuIFxcbitzdGF0aWMgaW50IHNjX3N3YXBwaW5lc3Moc3RydWN0IHNjYW5fY29udHJvbCAqc2MsIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4re1xcbitcXHRpZiAoc2MtXFx1MDAzZXByb2FjdGl2ZSBcXHUwMDI2XFx1MDAyNiBzYy1cXHUwMDNlcHJvYWN0aXZlX3N3YXBwaW5lc3MpXFxuK1xcdFxcdHJldHVybiAqc2MtXFx1MDAzZXByb2FjdGl2ZV9zd2FwcGluZXNzO1xcbitcXHRyZXR1cm4gbWVtX2Nncm91cF9zd2FwcGluZXNzKG1lbWNnKTtcXG4rfVxcbitcXG4gI2lmZGVmIENPTkZJR19NRU1DR1xcbiBcXG4gLyogUmV0dXJucyB0cnVlIGZvciByZWNsYWltIHRocm91Z2ggY2dyb3VwIGxpbWl0cyBvciBjZ3JvdXAgaW50ZXJmYWNlcy4gKi9cXG5AQCAtMjM5LDEzICsyNDYsNiBAQCBzdGF0aWMgYm9vbCB3cml0ZWJhY2tfdGhyb3R0bGluZ19zYW5lKHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbiAjZW5kaWZcXG4gXFx0cmV0dXJuIGZhbHNlO1xcbiB9XFxuLVxcbi1zdGF0aWMgaW50IHNjX3N3YXBwaW5lc3Moc3RydWN0IHNjYW5fY29udHJvbCAqc2MsIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4te1xcbi1cXHRpZiAoc2MtXFx1MDAzZXByb2FjdGl2ZSBcXHUwMDI2XFx1MDAyNiBzYy1cXHUwMDNlcHJvYWN0aXZlX3N3YXBwaW5lc3MpXFxuLVxcdFxcdHJldHVybiAqc2MtXFx1MDAzZXByb2FjdGl2ZV9zd2FwcGluZXNzO1xcbi1cXHRyZXR1cm4gbWVtX2Nncm91cF9zd2FwcGluZXNzKG1lbWNnKTtcXG4tfVxcbiAjZWxzZVxcbiBzdGF0aWMgYm9vbCBjZ3JvdXBfcmVjbGFpbShzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4ge1xcbkBAIC0yNjEsMTEgKzI2MSw2IEBAIHN0YXRpYyBib29sIHdyaXRlYmFja190aHJvdHRsaW5nX3NhbmUoc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuIHtcXG4gXFx0cmV0dXJuIHRydWU7XFxuIH1cXG4tXFxuLXN0YXRpYyBpbnQgc2Nfc3dhcHBpbmVzcyhzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYywgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbi17XFxuLVxcdHJldHVybiBSRUFEX09OQ0Uodm1fc3dhcHBpbmVzcyk7XFxuLX1cXG4gI2VuZGlmXFxuIFxcbiBzdGF0aWMgdm9pZCBzZXRfdGFza19yZWNsYWltX3N0YXRlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMDc6MDA6MjMuNDcxOTE2MTA1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MjE1MjkzMzgzMDE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpcyBwcmltYXJpbHkgYSByZWZhY3RvcmluZyB0byBoaWRlIHRoZSBgc3dhcHBpbmVzc2AgZmllbGQgaW4gYHN0cnVjdCBtZW1fY2dyb3VwYCB1bmRlciBgQ09ORklHX01FTUNHX1YxYCB0byBzYXZlIG1lbW9yeSB3aGVuIGNncm91cCB2MSBpcyBkaXNhYmxlZC4gRm9yIHRoZSBkZWZhdWx0IGBDT05GSUdfTUVNQ0c9eWAgY29uZmlndXJhdGlvbiwgdGhlcmUgaXMgbm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYmVoYXZpb3IuIFRoZSBvbmx5IGZ1bmN0aW9uYWwgY2hhbmdlIGlzIGEgbWlub3IgZml4IGZvciBgQ09ORklHX01FTUNHPW5gIHdoZXJlIHByb2FjdGl2ZSBub2RlIHJlY2xhaW0gdmlhIHN5c2ZzIG5vdyByZXNwZWN0cyB0aGUgdXNlci1wcm92aWRlZCBgc3dhcHBpbmVzc2AgcGFyYW1ldGVyIGluc3RlYWQgb2YgaWdub3JpbmcgaXQuIFRoaXMgaXMgYSB2ZXJ5IG1pbm9yIGVkZ2UgY2FzZSBpbiBhIG5vbi1kZWZhdWx0IGNvbmZpZyBhbmQgZG9lcyBub3Qgd2FycmFudCBmb2N1c2VkIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDYyMzQxMjUwODJiYTU2NGI4ZWNkNWQ0ZGFiODk4MjI5N2U2NTdmYjZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1bCAyNCAwNzowMDoyMCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcbmluZGV4IDk1NzI2MDY3NzY3ODE1Li5lN2E3OTRkZmI0MGU0OSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxuQEAgLTIzOSw4ICsyMzksNiBAQCBzdHJ1Y3QgbWVtX2Nncm91cCB7XG4gXHQgKi9cbiBcdGJvb2wgb29tX2dyb3VwO1xuIFxuLVx0aW50IHN3YXBwaW5lc3M7XG4tXG4gXHQvKiBtZW1vcnkuZXZlbnRzIGFuZCBtZW1vcnkuZXZlbnRzLmxvY2FsICovXG4gXHRzdHJ1Y3QgY2dyb3VwX2ZpbGUgZXZlbnRzX2ZpbGU7XG4gXHRzdHJ1Y3QgY2dyb3VwX2ZpbGUgZXZlbnRzX2xvY2FsX2ZpbGU7XG5AQCAtMzE4LDYgKzMxNiw4IEBAIHN0cnVjdCBtZW1fY2dyb3VwIHtcbiBcdC8qIExpc3Qgb2YgZXZlbnRzIHdoaWNoIHVzZXJzcGFjZSB3YW50IHRvIHJlY2VpdmUgKi9cbiBcdHN0cnVjdCBsaXN0X2hlYWQgZXZlbnRfbGlzdDtcbiBcdHNwaW5sb2NrX3QgZXZlbnRfbGlzdF9sb2NrO1xuK1xuK1x0aW50IHN3YXBwaW5lc3M7XG4gI2VuZGlmIC8qIENPTkZJR19NRU1DR19WMSAqL1xuIFxuIFx0c3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKm5vZGVpbmZvW107XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zd2FwLmggYi9pbmNsdWRlL2xpbnV4L3N3YXAuaFxuaW5kZXggMDU0NGIyZWM0YzU2NWIuLjQ1ZjMwMWQ3M2UyYWVlIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9zd2FwLmhcbisrKyBiL2luY2x1ZGUvbGludXgvc3dhcC5oXG5AQCAtMzA5LDcgKzMwOSw2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBscnVfY2FjaGVfZGlzYWJsZWQodm9pZClcbiB9XG4gXG4gZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc2hyaW5rX2FsbF9tZW1vcnkodW5zaWduZWQgbG9uZyBucl9wYWdlcyk7XG4tZXh0ZXJuIGludCB2bV9zd2FwcGluZXNzO1xuIGxvbmcgcmVtb3ZlX21hcHBpbmcoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuIFxuICNpZiBkZWZpbmVkKENPTkZJR19TWVNGUykgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX05VTUEpXG5AQCAtNDczLDI1ICs0NzIsNyBAQCBzdGF0aWMgaW5saW5lIGludCBhZGRfc3dhcF9leHRlbnQoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpcyxcbiB9XG4gI2VuZGlmIC8qIENPTkZJR19TV0FQICovXG4gI2lmZGVmIENPTkZJR19NRU1DR1xuLXN0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfc3dhcHBpbmVzcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4te1xuLVx0LyogQ2dyb3VwMiBkb2Vzbid0IGhhdmUgcGVyLWNncm91cCBzd2FwcGluZXNzICovXG4tXHRpZiAoY2dyb3VwX3N1YnN5c19vbl9kZmwobWVtb3J5X2NncnBfc3Vic3lzKSlcbi1cdFx0cmV0dXJuIFJFQURfT05DRSh2bV9zd2FwcGluZXNzKTtcbi1cbi1cdC8qIHJvb3QgPyAqL1xuLVx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSB8fCBtZW1fY2dyb3VwX2lzX3Jvb3QobWVtY2cpKVxuLVx0XHRyZXR1cm4gUkVBRF9PTkNFKHZtX3N3YXBwaW5lc3MpO1xuLVxuLVx0cmV0dXJuIFJFQURfT05DRShtZW1jZy1cdTAwM2Vzd2FwcGluZXNzKTtcbi19XG4tXG4gdm9pZCBscnVfcmVwYXJlbnRfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LCBpbnQgbmlkKTtcbi0jZWxzZVxuLXN0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfc3dhcHBpbmVzcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4te1xuLVx0cmV0dXJuIFJFQURfT05DRSh2bV9zd2FwcGluZXNzKTtcbi19XG4gI2VuZGlmXG4gXG4gI2lmIGRlZmluZWQoQ09ORklHX1NXQVApIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19NRU1DRykgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX0JMS19DR1JPVVApXG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jXG5pbmRleCA4MzE5YWQ4YzVjMjNhYy4uNjg2NGI3NjQ1NmZiM2UgMTAwNjQ0XG4tLS0gYS9tbS9tZW1jb250cm9sLmNcbisrKyBiL21tL21lbWNvbnRyb2wuY1xuQEAgLTYzLDYgKzYzLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC9pc29sYXRpb24uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2ttZW1sZWFrLmhcdTAwM2VcbiAjaW5jbHVkZSBcImludGVybmFsLmhcIlxuKyNpbmNsdWRlIFwic3dhcC5oXCJcbiAjaW5jbHVkZSBcInN3YXBfdGFibGUuaFwiXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3NvY2suaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9pcC5oXHUwMDNlXG5AQCAtNDE3NiwxMSArNDE3NywxMCBAQCBtZW1fY2dyb3VwX2Nzc19hbGxvYyhzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqcGFyZW50X2NzcylcbiAjZW5kaWZcbiBcdHBhZ2VfY291bnRlcl9zZXRfaGlnaChcdTAwMjZtZW1jZy1cdTAwM2Vzd2FwLCBQQUdFX0NPVU5URVJfTUFYKTtcbiBcdGlmIChwYXJlbnQpIHtcbi1cdFx0V1JJVEVfT05DRShtZW1jZy1cdTAwM2Vzd2FwcGluZXNzLCBtZW1fY2dyb3VwX3N3YXBwaW5lc3MocGFyZW50KSk7XG4tXG4gXHRcdHBhZ2VfY291bnRlcl9pbml0KFx1MDAyNm1lbWNnLVx1MDAzZW1lbW9yeSwgXHUwMDI2cGFyZW50LVx1MDAzZW1lbW9yeSwgbWVtY2dfb25fZGZsKTtcbiBcdFx0cGFnZV9jb3VudGVyX2luaXQoXHUwMDI2bWVtY2ctXHUwMDNlc3dhcCwgXHUwMDI2cGFyZW50LVx1MDAzZXN3YXAsIGZhbHNlKTtcbiAjaWZkZWYgQ09ORklHX01FTUNHX1YxXG4rXHRcdFdSSVRFX09OQ0UobWVtY2ctXHUwMDNlc3dhcHBpbmVzcywgbWVtX2Nncm91cF9zd2FwcGluZXNzKHBhcmVudCkpO1xuIFx0XHRtZW1jZy1cdTAwM2VtZW1vcnkudHJhY2tfZmFpbGNudCA9ICFtZW1jZ19vbl9kZmw7XG4gXHRcdFdSSVRFX09OQ0UobWVtY2ctXHUwMDNlb29tX2tpbGxfZGlzYWJsZSwgUkVBRF9PTkNFKHBhcmVudC1cdTAwM2Vvb21fa2lsbF9kaXNhYmxlKSk7XG4gXHRcdHBhZ2VfY291bnRlcl9pbml0KFx1MDAyNm1lbWNnLVx1MDAzZWttZW0sIFx1MDAyNnBhcmVudC1cdTAwM2VrbWVtLCBmYWxzZSk7XG5kaWZmIC0tZ2l0IGEvbW0vc3dhcC5oIGIvbW0vc3dhcC5oXG5pbmRleCBhYmQyNjU4OGFiZDIyYy4uYjA0ODhmN2I2OGI1ZDMgMTAwNjQ0XG4tLS0gYS9tbS9zd2FwLmhcbisrKyBiL21tL3N3YXAuaFxuQEAgLTQsNiArNCw3IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYXRvbWljLmhcdTAwM2UgLyogZm9yIGF0b21pY19sb25nX3QgKi9cbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tbS5oXHUwMDNlIC8qIGZvciBQQUdFX1NISUZUICovXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbWVtY29udHJvbC5oXHUwMDNlIC8qIGZvciBtZW1fY2dyb3VwX3N3YXBwaW5lc3MoKSAqL1xuIFxuIHN0cnVjdCBtZW1wb2xpY3k7XG4gc3RydWN0IHN3YXBfaW9jYjtcbkBAIC05OSw2ICsxMDAsMTggQEAgc3RydWN0IHN3YXBfb3BzIHtcbiBcdHZvaWQgKCpzdWJtaXRfcmVhZCkoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgpO1xuIH07XG4gXG4rZXh0ZXJuIGludCB2bV9zd2FwcGluZXNzO1xuK1xuK3N0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfc3dhcHBpbmVzcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4re1xuKyNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcbitcdGlmICghY2dyb3VwX3N1YnN5c19vbl9kZmwobWVtb3J5X2NncnBfc3Vic3lzKSBcdTAwMjZcdTAwMjZcbitcdCAgICAhbWVtX2Nncm91cF9kaXNhYmxlZCgpIFx1MDAyNlx1MDAyNiAhbWVtX2Nncm91cF9pc19yb290KG1lbWNnKSlcbitcdFx0cmV0dXJuIG1lbWNnLVx1MDAzZXN3YXBwaW5lc3M7XG4rI2VuZGlmXG4rXHRyZXR1cm4gUkVBRF9PTkNFKHZtX3N3YXBwaW5lc3MpO1xuK31cbitcbiAjaWZkZWYgQ09ORklHX1NXQVBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zd2Fwb3BzLmhcdTAwM2UgLyogZm9yIHN3cF9vZmZzZXQgKi9cbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ibGtfdHlwZXMuaFx1MDAzZSAvKiBmb3IgYmlvX2VuZF9pb190ICovXG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xuaW5kZXggMDZlMTAzZjk3ODFlNWQuLjE1NTE2N2IzNjE0YjZkIDEwMDY0NFxuLS0tIGEvbW0vdm1zY2FuLmNcbisrKyBiL21tL3Ztc2Nhbi5jXG5AQCAtMTk5LDYgKzE5OSwxMyBAQCBzdHJ1Y3Qgc2Nhbl9jb250cm9sIHtcbiAgKi9cbiBpbnQgdm1fc3dhcHBpbmVzcyA9IDYwO1xuIFxuK3N0YXRpYyBpbnQgc2Nfc3dhcHBpbmVzcyhzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYywgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuK3tcbitcdGlmIChzYy1cdTAwM2Vwcm9hY3RpdmUgXHUwMDI2XHUwMDI2IHNjLVx1MDAzZXByb2FjdGl2ZV9zd2FwcGluZXNzKVxuK1x0XHRyZXR1cm4gKnNjLVx1MDAzZXByb2FjdGl2ZV9zd2FwcGluZXNzO1xuK1x0cmV0dXJuIG1lbV9jZ3JvdXBfc3dhcHBpbmVzcyhtZW1jZyk7XG4rfVxuK1xuICNpZmRlZiBDT05GSUdfTUVNQ0dcbiBcbiAvKiBSZXR1cm5zIHRydWUgZm9yIHJlY2xhaW0gdGhyb3VnaCBjZ3JvdXAgbGltaXRzIG9yIGNncm91cCBpbnRlcmZhY2VzLiAqL1xuQEAgLTIzOSwxMyArMjQ2LDYgQEAgc3RhdGljIGJvb2wgd3JpdGViYWNrX3Rocm90dGxpbmdfc2FuZShzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbiAjZW5kaWZcbiBcdHJldHVybiBmYWxzZTtcbiB9XG4tXG4tc3RhdGljIGludCBzY19zd2FwcGluZXNzKHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4te1xuLVx0aWYgKHNjLVx1MDAzZXByb2FjdGl2ZSBcdTAwMjZcdTAwMjYgc2MtXHUwMDNlcHJvYWN0aXZlX3N3YXBwaW5lc3MpXG4tXHRcdHJldHVybiAqc2MtXHUwMDNlcHJvYWN0aXZlX3N3YXBwaW5lc3M7XG4tXHRyZXR1cm4gbWVtX2Nncm91cF9zd2FwcGluZXNzKG1lbWNnKTtcbi19XG4gI2Vsc2VcbiBzdGF0aWMgYm9vbCBjZ3JvdXBfcmVjbGFpbShzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbiB7XG5AQCAtMjYxLDExICsyNjEsNiBAQCBzdGF0aWMgYm9vbCB3cml0ZWJhY2tfdGhyb3R0bGluZ19zYW5lKHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuIHtcbiBcdHJldHVybiB0cnVlO1xuIH1cbi1cbi1zdGF0aWMgaW50IHNjX3N3YXBwaW5lc3Moc3RydWN0IHNjYW5fY29udHJvbCAqc2MsIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbi17XG4tXHRyZXR1cm4gUkVBRF9PTkNFKHZtX3N3YXBwaW5lc3MpO1xuLX1cbiAjZW5kaWZcbiBcbiBzdGF0aWMgdm9pZCBzZXRfdGFza19yZWNsYWltX3N0YXRlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayxcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDA3OjAwOjIzLjQ3MTkxODgxNloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExODk0NTc2NzE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2ggU2VyaWVzIGZvciBQb3RlbnRpYWwgRnV6emluZyBUYXJnZXRzKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBuZWNlc3NpdGF0ZSBmdXp6aW5nLiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCBpdCdzIHByaW1hcmlseSByZWZhY3RvcmluZywgYnV0IEkgbmVlZCB0byBiZSBzdXJlLiBMZXQncyBicmVhayB0aGlzIGRvd24uXG5cblRoZSBwYXRjaCBlc3NlbnRpYWxseTpcblxuMS4gIE1vdmVzIHRoZSBgc3dhcHBpbmVzc2AgZmllbGQgaW4gYHN0cnVjdCBtZW1fY2dyb3VwYCB1bmRlciBgI2lmZGVmIENPTkZJR19NRU1DR19WMWAuXG4yLiAgTW92ZXMgYG1lbV9jZ3JvdXBfc3dhcHBpbmVzcygpYCBmcm9tIGBpbmNsdWRlL2xpbnV4L3N3YXAuaGAgdG8gYG1tL3N3YXAuaGAuXG4zLiAgQ2hhbmdlcyB0aGUgYG1lbV9jZ3JvdXBfc3dhcHBpbmVzcygpYCBpbXBsZW1lbnRhdGlvbiB0byBjb25kaXRpb25hbGx5IHVzZSBgbWVtY2ctXHUwMDNlc3dhcHBpbmVzc2AgYmFzZWQgb24gYCNpZmRlZiBDT05GSUdfTUVNQ0dfVjFgLlxuNC4gIFVwZGF0ZXMgYG1lbV9jZ3JvdXBfY3NzX2FsbG9jKClgIHRvIG9ubHkgaW5pdGlhbGl6ZSBgbWVtY2ctXHUwMDNlc3dhcHBpbmVzc2AgaWYgYENPTkZJR19NRU1DR19WMWAgaXMgZGVmaW5lZC5cbjUuICBNb3ZlcyBgc2Nfc3dhcHBpbmVzcygpYCBpbiBgbW0vdm1zY2FuLmNgIG91dCBvZiBgI2lmZGVmIENPTkZJR19NRU1DR2AuXG5cbkFscmlnaHQsIEkgc2VlIGEgY2xlYXIgc2hpZnQgaGVyZSB0b3dhcmRzIGlzb2xhdGluZyB0aGUgYHN3YXBwaW5lc3NgIGxvZ2ljIGZvciBtZW1vcnkgY2dyb3VwcyB2MS4gVGhlIG1haW4gY29uY2VybiBpcyB3aGV0aGVyIHRoaXMgaW50cm9kdWNlcyBhIHN1YnRsZSBjaGFuZ2UgaW4gYmVoYXZpb3IuXG5cbkxldCdzIGRpc3NlY3QgYG1lbV9jZ3JvdXBfc3dhcHBpbmVzcygpYCBjYXJlZnVsbHkuIFRoZSBvbGQgaW1wbGVtZW50YXRpb24gaGFkIGEgY2hlY2sgZm9yIGNncm91cCB2MiBhbmQgcm9vdCBjZ3JvdXAgdG8gcmV0dXJuIGdsb2JhbCBgdm1fc3dhcHBpbmVzc2AuIFRoZSBuZXcgdmVyc2lvbiBjb25kaXRpb25hbGx5IHVzZXMgYG1lbWNnLVx1MDAzZXN3YXBwaW5lc3NgIG9ubHkgdW5kZXIgYENPTkZJR19NRU1DR19WMWAuIElmIGBDT05GSUdfTUVNQ0dfVjFgIGlzIGRpc2FibGVkLCB0aGUgbmV3IHZlcnNpb24gZGlyZWN0bHkgcmV0dXJucyBgdm1fc3dhcHBpbmVzc2AuIFRoaXMgc2VlbXMgbGlrZSBvcHRpbWl6YXRpb24gZm9yIGNncm91cCB2MiBieSBoaWRpbmcgdGhlIHN3YXBwaW5lc3MgZmllbGQgaW4gdGhlIGBzdHJ1Y3QgbWVtX2Nncm91cGAsIGJlY2F1c2UgaXQgaXMgb25seSB1c2VkIGZvciBjZ3JvdXAgdjEuIEZ1bmN0aW9uYWxseSwgaXQgc3RpbGwgcmV0dXJucyB0aGUgc2FtZSB2YWx1ZSBhcyBiZWZvcmUgaWYgYENPTkZJR19NRU1DR19WMWAgaXMgZGlzYWJsZWQuXG5cbklmIGBDT05GSUdfTUVNQ0dfVjFgICppcyogZW5hYmxlZCwgdGhlIGxvZ2ljIGFwcGVhcnMgaWRlbnRpY2FsIHRvIHRoZSBvcmlnaW5hbDsgdGhlIHNhbWUgY29uZGl0aW9ucyBhcmUgY2hlY2tlZCBidXQgbW9yZSBzdWNjaW5jdGx5LlxuXG5TbyBmYXIsIGl0IGxvb2tzIGxpa2UgYSBjbGVhbiByZWZhY3RvcmluZyB0byBhdm9pZCB1bm5lY2Vzc2FyeSBjb2RlIGFuZCBtZW1vcnkgb3ZlcmhlYWQgd2hlbiB2MSBpcyBub3QgaW4gdXNlLiBIb3dldmVyLCB0aGUgbW92ZSBvZiBgc2Nfc3dhcHBpbmVzcygpYCBpcyBhIGxpdHRsZSB0cmlja2llciwgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IGhhc24ndCBjaGFuZ2VkIHRoZSBzZW1hbnRpY3Mgb2YgdGhlIGNvZGUuXG5cblRoZSBvbGQgY29kZSBjb25kaXRpb25hbGx5IGRlZmluZWQgYHNjX3N3YXBwaW5lc3MoKWAgYmFzZWQgb24gYENPTkZJR19NRU1DR2AsIHdoZXJlIHRoZSBkZWZhdWx0IHZhbHVlIHdhcyBgdm1fc3dhcHBpbmVzc2AuIFRoZSBuZXcgY29kZSAqYWx3YXlzKiBjYWxscyBgbWVtX2Nncm91cF9zd2FwcGluZXNzKClgLCB3aGljaCwgYXMgd2UndmUgYWxyZWFkeSBhc3Nlc3NlZCwgd2lsbCByZXR1cm4gYHZtX3N3YXBwaW5lc3NgIGlmIGBDT05GSUdfTUVNQ0dfVjFgIGlzIGRpc2FibGVkLiBUaGlzIHNlZW1zIHRvIGltcGx5IHRoYXQgYHNjLVx1MDAzZXByb2FjdGl2ZWAgKGFuZCBgc2MtXHUwMDNlcHJvYWN0aXZlX3N3YXBwaW5lc3NgKSB3aWxsIHN0aWxsIGJlIGNoZWNrZWQgZXZlbiBpZiBgQ09ORklHX01FTUNHYCBpcyBkaXNhYmxlZC4gSSB3aWxsIHVzZSBgZ3JlcHBlcmAgdG8gZG91YmxlIGNoZWNrIHRoYXQgYHN0cnVjdCBzY2FuX2NvbnRyb2xgIGV4aXN0cyBpZiBgQ09ORklHX01FTUNHYCBpcyBkaXNhYmxlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzcyOCwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMTcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQwNzowMDozNS4zNjY0OTg3NDFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTA1NDc1NTQwMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdHJ1Y3Qgc2Nhbl9jb250cm9sIFxcXFx7XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jLTc0LVxcbm1tL3Ztc2Nhbi5jOjc1OnN0cnVjdCBzY2FuX2NvbnRyb2wge1xcbm1tL3Ztc2Nhbi5jLTc2LVxcdC8qIEhvdyBtYW55IHBhZ2VzIHNocmlua19saXN0KCkgc2hvdWxkIHJlY2xhaW0gKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMDc6MDA6NDAuNDIxMjYyODA1WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQzOTY5MDY4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIGBtbS92bXNjYW4uY2AqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyB0aGUgc2Nhbm5pbmcgcHJvY2VzcyB3b3Jrcy4gVGltZSB0byBkaXZlIGludG8gdGhlIGNvZGUuIEknbSB0aGlua2luZyB0aGUgYmVzdCBwbGFjZSB0byBzdGFydCBpcyBgbW0vdm1zY2FuLmNgLiBJdCBtYWtlcyBzZW5zZSB0aGF0J3Mgd2hlcmUgdGhlIGNvcmUgVk0gc2Nhbm5pbmcgbG9naWMgd291bGQgcmVzaWRlLiBMZXQncyBzdGFydCBhcm91bmQgbGluZSA3NSwgdGhhdCdzIHVzdWFsbHkgYSBnb29kIGFyZWEgdG8gZ2V0IGEgZmVlbCBmb3IgdGhlIG1ham9yIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZC4gSSdtIHNwZWNpZmljYWxseSBsb29raW5nIGZvciBhIHN0cnVjdHVyZSBjYWxsZWQgYHNjYW5fY29udHJvbGAuIFRoaXMgaXMgYSBwcmV0dHkgY29tbW9uIHBhdHRlcm47IHRoZXNlIGNvbnRyb2wgc3RydWN0cyBvZnRlbiBjb250YWluIGFsbCB0aGUgdHVuYWJsZSBwYXJhbWV0ZXJzIGFuZCBzdGF0ZSBpbmZvcm1hdGlvbiB1c2VkIHRvIGd1aWRlIHRoZSBzY2FubmluZyBwcm9jZXNzLiBVbmRlcnN0YW5kaW5nIGBzY2FuX2NvbnRyb2xgIHNob3VsZCBnaXZlIG1lIGEgZ29vZCBlbnRyeSBwb2ludCBpbnRvIHRoZSBvdmVyYWxsIGZsb3cuIExldCdzIHNlZSB3aGF0IHdlIGZpbmQgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU0OTgsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQwNzowMDo0My44NjA5NTYxMTZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDcyMTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3Ztc2Nhbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDc1LFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA3NTpcXHRzdHJ1Y3Qgc2Nhbl9jb250cm9sIHtcXG4gIDc2OlxcdFxcdC8qIEhvdyBtYW55IHBhZ2VzIHNocmlua19saXN0KCkgc2hvdWxkIHJlY2xhaW0gKi9cXG4gIDc3OlxcdFxcdHVuc2lnbmVkIGxvbmcgbnJfdG9fcmVjbGFpbTtcXG4gIDc4OlxcdFxcbiAgNzk6XFx0XFx0LypcXG4gIDgwOlxcdFxcdCAqIE5vZGVtYXNrIG9mIG5vZGVzIGFsbG93ZWQgYnkgdGhlIGNhbGxlci4gSWYgTlVMTCwgYWxsIG5vZGVzXFxuICA4MTpcXHRcXHQgKiBhcmUgc2Nhbm5lZC5cXG4gIDgyOlxcdFxcdCAqL1xcbiAgODM6XFx0XFx0Y29uc3Qgbm9kZW1hc2tfdCAqbm9kZW1hc2s7XFxuICA4NDpcXHRcXG4gIDg1OlxcdFxcdC8qXFxuICA4NjpcXHRcXHQgKiBUaGUgbWVtb3J5IGNncm91cCB0aGF0IGhpdCBpdHMgbGltaXQgYW5kIGFzIGEgcmVzdWx0IGlzIHRoZVxcbiAgODc6XFx0XFx0ICogcHJpbWFyeSB0YXJnZXQgb2YgdGhpcyByZWNsYWltIGludm9jYXRpb24uXFxuICA4ODpcXHRcXHQgKi9cXG4gIDg5OlxcdFxcdHN0cnVjdCBtZW1fY2dyb3VwICp0YXJnZXRfbWVtX2Nncm91cDtcXG4gIDkwOlxcdFxcbiAgOTE6XFx0XFx0LypcXG4gIDkyOlxcdFxcdCAqIFNjYW4gcHJlc3N1cmUgYmFsYW5jaW5nIGJldHdlZW4gYW5vbiBhbmQgZmlsZSBMUlVzXFxuICA5MzpcXHRcXHQgKi9cXG4gIDk0OlxcdFxcdHVuc2lnbmVkIGxvbmdcXHRhbm9uX2Nvc3Q7XFxuICA5NTpcXHRcXHR1bnNpZ25lZCBsb25nXFx0ZmlsZV9jb3N0O1xcbiAgOTY6XFx0XFxuICA5NzpcXHRcXHQvKiBTd2FwcGluZXNzIHZhbHVlIGZvciBwcm9hY3RpdmUgcmVjbGFpbS4gQWx3YXlzIHVzZSBzY19zd2FwcGluZXNzKCkhICovXFxuICA5ODpcXHRcXHRpbnQgKnByb2FjdGl2ZV9zd2FwcGluZXNzO1xcbiAgOTk6XFx0XFxuIDEwMDpcXHRcXHQvKiBDYW4gYWN0aXZlIGZvbGlvcyBiZSBkZWFjdGl2YXRlZCBhcyBwYXJ0IG9mIHJlY2xhaW0/ICovXFxuIDEwMTpcXHQjZGVmaW5lIERFQUNUSVZBVEVfQU5PTiAxXFxuIDEwMjpcXHQjZGVmaW5lIERFQUNUSVZBVEVfRklMRSAyXFxuIDEwMzpcXHRcXHR1bnNpZ25lZCBpbnQgbWF5X2RlYWN0aXZhdGU6MjtcXG4gMTA0OlxcdFxcdHVuc2lnbmVkIGludCBmb3JjZV9kZWFjdGl2YXRlOjE7XFxuIDEwNTpcXHRcXHR1bnNpZ25lZCBpbnQgc2tpcHBlZF9kZWFjdGl2YXRlOjE7XFxuIDEwNjpcXHRcXG4gMTA3OlxcdFxcdC8qIHpvbmVfcmVjbGFpbV9tb2RlLCBib29zdCByZWNsYWltICovXFxuIDEwODpcXHRcXHR1bnNpZ25lZCBpbnQgbWF5X3dyaXRlcGFnZToxO1xcbiAxMDk6XFx0XFxuIDExMDpcXHRcXHQvKiB6b25lX3JlY2xhaW1fbW9kZSAqL1xcbiAxMTE6XFx0XFx0dW5zaWduZWQgaW50IG1heV91bm1hcDoxO1xcbiAxMTI6XFx0XFxuIDExMzpcXHRcXHQvKiB6b25lX3JlY2xhaW1fbW9kZSwgYm9vc3QgcmVjbGFpbSwgY2dyb3VwIHJlc3RyaWN0aW9ucyAqL1xcbiAxMTQ6XFx0XFx0dW5zaWduZWQgaW50IG1heV9zd2FwOjE7XFxuIDExNTpcXHRcXG4gMTE2OlxcdFxcdC8qIE5vdCBhbGxvdyBjYWNoZV90cmltX21vZGUgdG8gYmUgdHVybmVkIG9uIGFzIHBhcnQgb2YgcmVjbGFpbT8gKi9cXG4gMTE3OlxcdFxcdHVuc2lnbmVkIGludCBub19jYWNoZV90cmltX21vZGU6MTtcXG4gMTE4OlxcdFxcbiAxMTk6XFx0XFx0LyogSGFzIGNhY2hlX3RyaW1fbW9kZSBmYWlsZWQgYXQgbGVhc3Qgb25jZT8gKi9cXG4gMTIwOlxcdFxcdHVuc2lnbmVkIGludCBjYWNoZV90cmltX21vZGVfZmFpbGVkOjE7XFxuIDEyMTpcXHRcXG4gMTIyOlxcdFxcdC8qIFByb2FjdGl2ZSByZWNsYWltIGludm9rZWQgYnkgdXNlcnNwYWNlICovXFxuIDEyMzpcXHRcXHR1bnNpZ25lZCBpbnQgcHJvYWN0aXZlOjE7XFxuIDEyNDpcXHRcXG4gMTI1OlxcdFxcdC8qXFxuIDEyNjpcXHRcXHQgKiBDZ3JvdXAgbWVtb3J5IGJlbG93IG1lbW9yeS5sb3cgaXMgcHJvdGVjdGVkIGFzIGxvbmcgYXMgd2VcXG4gMTI3OlxcdFxcdCAqIGRvbid0IHRocmVhdGVuIHRvIE9PTS4gSWYgYW55IGNncm91cCBpcyByZWNsYWltZWQgYXRcXG4gMTI4OlxcdFxcdCAqIHJlZHVjZWQgZm9yY2Ugb3IgcGFzc2VkIG92ZXIgZW50aXJlbHkgZHVlIHRvIGl0cyBtZW1vcnkubG93XFxuIDEyOTpcXHRcXHQgKiBzZXR0aW5nIChtZW1jZ19sb3dfc2tpcHBlZCksIGFuZCBub3RoaW5nIGlzIHJlY2xhaW1lZCBhcyBhXFxuIDEzMDpcXHRcXHQgKiByZXN1bHQsIHRoZW4gZ28gYmFjayBmb3Igb25lIG1vcmUgY3ljbGUgdGhhdCByZWNsYWltcyB0aGUgcHJvdGVjdGVkXFxuIDEzMTpcXHRcXHQgKiBtZW1vcnkgKG1lbWNnX2xvd19yZWNsYWltKSB0byBhdmVydCBPT00uXFxuIDEzMjpcXHRcXHQgKi9cXG4gMTMzOlxcdFxcdHVuc2lnbmVkIGludCBtZW1jZ19sb3dfcmVjbGFpbToxO1xcbiAxMzQ6XFx0XFx0dW5zaWduZWQgaW50IG1lbWNnX2xvd19za2lwcGVkOjE7XFxuIDEzNTpcXHRcXG4gMTM2OlxcdFxcdC8qIFNoYXJlZCBjZ3JvdXAgdHJlZSB3YWxrIGZhaWxlZCwgcmVzY2FuIHRoZSB3aG9sZSB0cmVlICovXFxuIDEzNzpcXHRcXHR1bnNpZ25lZCBpbnQgbWVtY2dfZnVsbF93YWxrOjE7XFxuIDEzODpcXHRcXG4gMTM5OlxcdFxcdHVuc2lnbmVkIGludCBoaWJlcm5hdGlvbl9tb2RlOjE7XFxuIDE0MDpcXHRcXG4gMTQxOlxcdFxcdC8qIE9uZSBvZiB0aGUgem9uZXMgaXMgcmVhZHkgZm9yIGNvbXBhY3Rpb24gKi9cXG4gMTQyOlxcdFxcdHVuc2lnbmVkIGludCBjb21wYWN0aW9uX3JlYWR5OjE7XFxuIDE0MzpcXHRcXG4gMTQ0OlxcdFxcdC8qIFRoZXJlIGlzIGVhc2lseSByZWNsYWltYWJsZSBjb2xkIGNhY2hlIGluIHRoZSBjdXJyZW50IG5vZGUgKi9cXG4gMTQ1OlxcdFxcdHVuc2lnbmVkIGludCBjYWNoZV90cmltX21vZGU6MTtcXG4gMTQ2OlxcdFxcbiAxNDc6XFx0XFx0LyogVGhlIGZpbGUgZm9saW9zIG9uIHRoZSBjdXJyZW50IG5vZGUgYXJlIGRhbmdlcm91c2x5IGxvdyAqL1xcbiAxNDg6XFx0XFx0dW5zaWduZWQgaW50IGZpbGVfaXNfdGlueToxO1xcbiAxNDk6XFx0XFxuIDE1MDpcXHRcXHQvKiBBbHdheXMgZGlzY2FyZCBpbnN0ZWFkIG9mIGRlbW90aW5nIHRvIGxvd2VyIHRpZXIgbWVtb3J5ICovXFxuIDE1MTpcXHRcXHR1bnNpZ25lZCBpbnQgbm9fZGVtb3Rpb246MTtcXG4gMTUyOlxcdFxcbiAxNTM6XFx0XFx0LyogQWxsb2NhdGlvbiBvcmRlciAqL1xcbiAxNTQ6XFx0XFx0czggb3JkZXI7XFxuIDE1NTpcXHRcXG4gMTU2OlxcdFxcdC8qIFNjYW4gKHRvdGFsX3NpemUgXFx1MDAzZVxcdTAwM2UgcHJpb3JpdHkpIHBhZ2VzIGF0IG9uY2UgKi9cXG4gMTU3OlxcdFxcdHM4IHByaW9yaXR5O1xcbiAxNTg6XFx0XFxuIDE1OTpcXHRcXHQvKiBUaGUgaGlnaGVzdCB6b25lIHRvIGlzb2xhdGUgZm9saW9zIGZvciByZWNsYWltIGZyb20gKi9cXG4gMTYwOlxcdFxcdHM4IHJlY2xhaW1faWR4O1xcbiAxNjE6XFx0XFxuIDE2MjpcXHRcXHQvKiBUaGlzIGNvbnRleHQncyBHRlAgbWFzayAqL1xcbiAxNjM6XFx0XFx0Z2ZwX3QgZ2ZwX21hc2s7XFxuIDE2NDpcXHRcXG4gMTY1OlxcdFxcdC8qIEluY3JlbWVudGVkIGJ5IHRoZSBudW1iZXIgb2YgaW5hY3RpdmUgcGFnZXMgdGhhdCB3ZXJlIHNjYW5uZWQgKi9cXG4gMTY2OlxcdFxcdHVuc2lnbmVkIGxvbmcgbnJfc2Nhbm5lZDtcXG4gMTY3OlxcdFxcbiAxNjg6XFx0XFx0LyogTnVtYmVyIG9mIHBhZ2VzIGZyZWVkIHNvIGZhciBkdXJpbmcgYSBjYWxsIHRvIHNocmlua196b25lcygpICovXFxuIDE2OTpcXHRcXHR1bnNpZ25lZCBsb25nIG5yX3JlY2xhaW1lZDtcXG4gMTcwOlxcdFxcbiAxNzE6XFx0XFx0c3RydWN0IHtcXG4gMTcyOlxcdFxcdFxcdHVuc2lnbmVkIGludCBkaXJ0eTtcXG4gMTczOlxcdFxcdFxcdHVuc2lnbmVkIGludCBjb25nZXN0ZWQ7XFxuIDE3NDpcXHRcXHRcXHR1bnNpZ25lZCBpbnQgd3JpdGViYWNrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQwNzowMDo0My44NjI0MzE2MTZaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3ODIyNTkzODU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyBQcm9hY3RpdmUgUmVjbGFpbSBpbiB0aGUgTGludXggS2VybmVsKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSwgYW5kIEkgc2VlIHRoYXQgYm90aCBgcHJvYWN0aXZlYCBhbmQgYHByb2FjdGl2ZV9zd2FwcGluZXNzYCBhcmUgKmFsd2F5cyogbWVtYmVycyBvZiB0aGUgYHNjYW5fY29udHJvbGAgc3RydWN0LiBUaGF0J3MgYSBiaXQgY3VyaW91cywgZXNwZWNpYWxseSBzaW5jZSBJJ20gdHJ5aW5nIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgYWxsIGJlaGF2ZXMgd2l0aCBhbmQgd2l0aG91dCBtZW1vcnkgY2dyb3VwcyBlbmFibGVkLiBJdCBtYWtlcyBtZSB3b25kZXIsIGlmIGBDT05GSUdfTUVNQ0dgIGlzIGRpc2FibGVkLCBkb2VzIHRoaXMgY29uY2VwdCBvZiBcInByb2FjdGl2ZSByZWNsYWltXCIgZXZlbiAqZXhpc3QqIGluIGEgbWVhbmluZ2Z1bCB3YXk/IEkgbWVhbiwgYXJlIHRoZXNlIHZhcmlhYmxlcyBqdXN0IGFsbG9jYXRlZCBhbmQgdW51c2VkPyBPciBhcmUgdGhleSBzdGlsbCB1c2VkIGZvciBzb21ldGhpbmcgZXZlbiBpbiBhIG5vbi1jZ3JvdXAgY29udGV4dD9cblxuTXkgbmV4dCBzdGVwIGlzIGNsZWFyIOKAkyBJIG5lZWQgdG8gdHJhY2sgZG93biBleGFjdGx5ICp3aGVyZSogYHByb2FjdGl2ZWAgaXMgYmVpbmcgc2V0LiBUaGF0J3MgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIGl0cyBwdXJwb3NlIGFuZCBpZiBpdCdzIHJlbGV2YW50IGluIGFsbCBjb25maWd1cmF0aW9ucy4gTGV0J3Mgc3RhcnQgdHJhY2luZyB0aGUgY29kZSBwYXRocy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzExNSwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMDc6MDA6NTEuNjg1MDI3NTJaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc4NDIxMjA5MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwcm9hY3RpdmUgPSAxXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTc4NTU9aW50IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oY2hhciAqYnVmLFxcbi0tXFxubW0vdm1zY2FuLmMtNzk0MC1cXHRcXHRcXHRcXHQubWF5X3N3YXAgPSAxLFxcbm1tL3Ztc2Nhbi5jOjc5NDE6XFx0XFx0XFx0XFx0LnByb2FjdGl2ZSA9IDEsXFxubW0vdm1zY2FuLmMtNzk0Mi1cXHRcXHRcXHR9O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQwNzowMDo1Ni40NjkyNDUwMDFaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODY0NjY5MTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCB1c2VyIGFuZCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipEaXZpbmcgaW50byBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgaW4gYG1tL3Ztc2Nhbi5jYCoqXG5cbkFscmlnaHQsIEknbSB0aGlua2luZyBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCBpcyBpbXBsZW1lbnRlZC4gSSdtIHNwZWNpZmljYWxseSBsb29raW5nIGF0IHdoZXJlIGl0J3MgZGVmaW5lZCBhbmQgdXNlZCB3aXRoaW4gdGhlIGBtbS92bXNjYW4uY2AgZmlsZS4gSSdtIHByb2JhYmx5IHRyeWluZyB0byB1bmRlcnN0YW5kIHRoZSBjaXJjdW1zdGFuY2VzIHVuZGVyIHdoaWNoIHRoaXMgbWVjaGFuaXNtIGdldHMgdHJpZ2dlcmVkLiBJcyBpdCBhbiBhdXRvbWF0aWMgcmVzcG9uc2UsIG9yIGlzIGl0IGludm9rZWQgaW4gYSBtb3JlIGNvbnRyb2xsZWQgd2F5PyBJIHN1c3BlY3QgSSdtIGRlYWxpbmcgd2l0aCBhIHNjZW5hcmlvIHdoZXJlIHRoZSBzeXN0ZW0gaXMgYW50aWNpcGF0aW5nIG1lbW9yeSBwcmVzc3VyZSBhbmQgcHJvYWN0aXZlbHkgdHJ5aW5nIHRvIGZyZWUgdXAgcmVzb3VyY2VzIGJlZm9yZSB0aGluZ3MgZ2V0IGNyaXRpY2FsLiBNYXliZSBJJ20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaG93IGFnZ3Jlc3NpdmUgdGhpcyBwcm9hY3RpdmUgcmVjbGFpbSBpcywgYW5kIGhvdyBpdCBiYWxhbmNlcyByZXNvdXJjZSBhbGxvY2F0aW9uIHdpdGggbGF0ZW5jeS4gUGVyaGFwcyBJJ20gbG9va2luZyBmb3IgdGhlIHRyaWdnZXJzLiBJcyBpdCB0aGUgdGFzayB0aGF0IGlzIGJsb2NrZWQ/IE9yIHRoZSB3aG9sZSBzeXN0ZW0/IEVpdGhlciB3YXkgSSB3YW50IHRvIHJlbWluZCBteXNlbGYgaG93IHRoaXMgaW50ZXJhY3RzIHdpdGggdGhlIHBhZ2UgcmVwbGFjZW1lbnQgYWxnb3JpdGhtcywgYW5kIHdoZXRoZXIgaXQncyB0aWVkIHRvIHNwZWNpZmljIHVzZXIgcHJvY2Vzc2VzIG9yIGEgbW9yZSBnbG9iYWwgc3RyYXRlZ3kuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlIGFuZCBzZWUgd2hhdCBpbnNpZ2h0cyBJIGNhbiBnbGVhbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NzQ5MywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDA3OjAxOjAwLjMzMzkxNjQzWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxNjY4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS92bXNjYW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3ODU1LFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNzg1NTpcXHRpbnQgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbShjaGFyICpidWYsXFxuNzg1NjpcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHBnX2RhdGFfdCAqcGdkYXQpXFxuNzg1NzpcXHR7XFxuNzg1ODpcXHRcXHR1bnNpZ25lZCBpbnQgbnJfcmV0cmllcyA9IE1BWF9SRUNMQUlNX1JFVFJJRVM7XFxuNzg1OTpcXHRcXHR1bnNpZ25lZCBsb25nIG5yX3RvX3JlY2xhaW0sIG5yX3JlY2xhaW1lZCA9IDA7XFxuNzg2MDpcXHRcXHRpbnQgc3dhcHBpbmVzcyA9IC0xO1xcbjc4NjE6XFx0XFx0Y2hhciAqb2xkX2J1ZiwgKnN0YXJ0O1xcbjc4NjI6XFx0XFx0c3Vic3RyaW5nX3QgYXJnc1tNQVhfT1BUX0FSR1NdO1xcbjc4NjM6XFx0XFx0Z2ZwX3QgZ2ZwX21hc2sgPSBHRlBfS0VSTkVMO1xcbjc4NjQ6XFx0XFxuNzg2NTpcXHRcXHRpZiAoIWJ1ZiB8fCAoIW1lbWNnIFxcdTAwMjZcXHUwMDI2ICFwZ2RhdCkgfHwgKG1lbWNnIFxcdTAwMjZcXHUwMDI2IHBnZGF0KSlcXG43ODY2OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjc4Njc6XFx0XFxuNzg2ODpcXHRcXHRidWYgPSBzdHJzdHJpcChidWYpO1xcbjc4Njk6XFx0XFxuNzg3MDpcXHRcXHRvbGRfYnVmID0gYnVmO1xcbjc4NzE6XFx0XFx0bnJfdG9fcmVjbGFpbSA9IG1lbXBhcnNlKGJ1ZiwgXFx1MDAyNmJ1ZikgLyBQQUdFX1NJWkU7XFxuNzg3MjpcXHRcXHRpZiAoYnVmID09IG9sZF9idWYpXFxuNzg3MzpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG43ODc0OlxcdFxcbjc4NzU6XFx0XFx0YnVmID0gc3Ryc3RyaXAoYnVmKTtcXG43ODc2OlxcdFxcbjc4Nzc6XFx0XFx0d2hpbGUgKChzdGFydCA9IHN0cnNlcChcXHUwMDI2YnVmLCBcXFwiIFxcXCIpKSAhPSBOVUxMKSB7XFxuNzg3ODpcXHRcXHRcXHRpZiAoIXN0cmxlbihzdGFydCkpXFxuNzg3OTpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG43ODgwOlxcdFxcdFxcdHN3aXRjaCAobWF0Y2hfdG9rZW4oc3RhcnQsIHRva2VucywgYXJncykpIHtcXG43ODgxOlxcdFxcdFxcdGNhc2UgTUVNT1JZX1JFQ0xBSU1fU1dBUFBJTkVTUzpcXG43ODgyOlxcdFxcdFxcdFxcdGlmIChtYXRjaF9pbnQoXFx1MDAyNmFyZ3NbMF0sIFxcdTAwMjZzd2FwcGluZXNzKSlcXG43ODgzOlxcdFxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjc4ODQ6XFx0XFx0XFx0XFx0aWYgKHN3YXBwaW5lc3MgXFx1MDAzYyBNSU5fU1dBUFBJTkVTUyB8fFxcbjc4ODU6XFx0XFx0XFx0XFx0ICAgIHN3YXBwaW5lc3MgXFx1MDAzZSBNQVhfU1dBUFBJTkVTUylcXG43ODg2OlxcdFxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjc4ODc6XFx0XFx0XFx0XFx0YnJlYWs7XFxuNzg4ODpcXHRcXHRcXHRjYXNlIE1FTU9SWV9SRUNMQUlNX1NXQVBQSU5FU1NfTUFYOlxcbjc4ODk6XFx0XFx0XFx0XFx0c3dhcHBpbmVzcyA9IFNXQVBQSU5FU1NfQU5PTl9PTkxZO1xcbjc4OTA6XFx0XFx0XFx0XFx0YnJlYWs7XFxuNzg5MTpcXHRcXHRcXHRkZWZhdWx0Olxcbjc4OTI6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuNzg5MzpcXHRcXHRcXHR9XFxuNzg5NDpcXHRcXHR9XFxuNzg5NTpcXHRcXG43ODk2OlxcdFxcdHdoaWxlIChucl9yZWNsYWltZWQgXFx1MDAzYyBucl90b19yZWNsYWltKSB7XFxuNzg5NzpcXHRcXHRcXHQvKiBXaWxsIGNvbnZlcmdlIG9uIHplcm8sIGJ1dCByZWNsYWltIGVuZm9yY2VzIGEgbWluaW11bSAqL1xcbjc4OTg6XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBiYXRjaF9zaXplID0gKG5yX3RvX3JlY2xhaW0gLSBucl9yZWNsYWltZWQpIC8gNDtcXG43ODk5OlxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgcmVjbGFpbWVkO1xcbjc5MDA6XFx0XFxuNzkwMTpcXHRcXHRcXHQvKlxcbjc5MDI6XFx0XFx0XFx0ICogUmV0dXJuIC1FUkVTVEFSVFNZUyB0byBhbGxvdyB0aGUgZnJlZXplciB0byBpbnRlcnJ1cHQgdGhlXFxuNzkwMzpcXHRcXHRcXHQgKiB0YXNrLiBUaGUgc3lzY2FsbCB3aWxsIGJlIHRyYW5zcGFyZW50bHkgcmVzdGFydGVkIHVwb25cXG43OTA0OlxcdFxcdFxcdCAqIHJlc3VtZS4gRm9yIHJlYWwgc2lnbmFscywgaXQgZWl0aGVyIHJlc3RhcnRzIHRoZSBzeXNjYWxsXFxuNzkwNTpcXHRcXHRcXHQgKiAoaWYgU0FfUkVTVEFSVCBpcyBzZXQpIG9yIGlzIGNvbnZlcnRlZCB0byAtRUlOVFIgYnkgdGhlXFxuNzkwNjpcXHRcXHRcXHQgKiBzaWduYWwgbGF5ZXIuXFxuNzkwNzpcXHRcXHRcXHQgKi9cXG43OTA4OlxcdFxcdFxcdGlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSlcXG43OTA5OlxcdFxcdFxcdFxcdHJldHVybiAtRVJFU1RBUlRTWVM7XFxuNzkxMDpcXHRcXG43OTExOlxcdFxcdFxcdC8qIGNncm91cF9ybWRpcigpIHdhaXRzIGZvciB1cyB3aXRoIGNncm91cF9tdXRleCBoZWxkLiAqL1xcbjc5MTI6XFx0XFx0XFx0aWYgKG1lbWNnIFxcdTAwMjZcXHUwMDI2IG1lbWNnX2lzX2R5aW5nKG1lbWNnKSlcXG43OTEzOlxcdFxcdFxcdFxcdHJldHVybiAtRUFHQUlOO1xcbjc5MTQ6XFx0XFxuNzkxNTpcXHRcXHRcXHQvKlxcbjc5MTY6XFx0XFx0XFx0ICogVGhpcyBpcyB0aGUgZmluYWwgYXR0ZW1wdCwgZHJhaW4gcGVyY3B1IGxydSBjYWNoZXMgaW4gdGhlXFxuNzkxNzpcXHRcXHRcXHQgKiBob3BlIG9mIGludHJvZHVjaW5nIG1vcmUgZXZpY3RhYmxlIHBhZ2VzLlxcbjc5MTg6XFx0XFx0XFx0ICovXFxuNzkxOTpcXHRcXHRcXHRpZiAoIW5yX3JldHJpZXMpXFxuNzkyMDpcXHRcXHRcXHRcXHRscnVfYWRkX2RyYWluX2FsbCgpO1xcbjc5MjE6XFx0XFxuNzkyMjpcXHRcXHRcXHRpZiAobWVtY2cpIHtcXG43OTIzOlxcdFxcdFxcdFxcdHVuc2lnbmVkIGludCByZWNsYWltX29wdGlvbnM7XFxuNzkyNDpcXHRcXG43OTI1OlxcdFxcdFxcdFxcdHJlY2xhaW1fb3B0aW9ucyA9IE1FTUNHX1JFQ0xBSU1fTUFZX1NXQVAgfFxcbjc5MjY6XFx0XFx0XFx0XFx0XFx0XFx0ICBNRU1DR19SRUNMQUlNX1BST0FDVElWRTtcXG43OTI3OlxcdFxcdFxcdFxcdHJlY2xhaW1lZCA9IHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMobWVtY2csXFxuNzkyODpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgYmF0Y2hfc2l6ZSwgZ2ZwX21hc2ssXFxuNzkyOTpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgcmVjbGFpbV9vcHRpb25zLFxcbjc5MzA6XFx0XFx0XFx0XFx0XFx0XFx0XFx0IHN3YXBwaW5lc3MgPT0gLTEgPyBOVUxMIDogXFx1MDAyNnN3YXBwaW5lc3MpO1xcbjc5MzE6XFx0XFx0XFx0fSBlbHNlIHtcXG43OTMyOlxcdFxcdFxcdFxcdHN0cnVjdCBzY2FuX2NvbnRyb2wgc2MgPSB7XFxuNzkzMzpcXHRcXHRcXHRcXHRcXHQuZ2ZwX21hc2sgPSBjdXJyZW50X2dmcF9jb250ZXh0KGdmcF9tYXNrKSxcXG43OTM0OlxcdFxcdFxcdFxcdFxcdC5yZWNsYWltX2lkeCA9IGdmcF96b25lKGdmcF9tYXNrKSxcXG43OTM1OlxcdFxcdFxcdFxcdFxcdC5wcm9hY3RpdmVfc3dhcHBpbmVzcyA9IHN3YXBwaW5lc3MgPT0gLTEgPyBOVUxMIDogXFx1MDAyNnN3YXBwaW5lc3MsXFxuNzkzNjpcXHRcXHRcXHRcXHRcXHQucHJpb3JpdHkgPSBERUZfUFJJT1JJVFksXFxuNzkzNzpcXHRcXHRcXHRcXHRcXHQubWF5X3dyaXRlcGFnZSA9IDEsXFxuNzkzODpcXHRcXHRcXHRcXHRcXHQubnJfdG9fcmVjbGFpbSA9IG1heChiYXRjaF9zaXplLCBTV0FQX0NMVVNURVJfTUFYKSxcXG43OTM5OlxcdFxcdFxcdFxcdFxcdC5tYXlfdW5tYXAgPSAxLFxcbjc5NDA6XFx0XFx0XFx0XFx0XFx0Lm1heV9zd2FwID0gMSxcXG43OTQxOlxcdFxcdFxcdFxcdFxcdC5wcm9hY3RpdmUgPSAxLFxcbjc5NDI6XFx0XFx0XFx0XFx0fTtcXG43OTQzOlxcdFxcbjc5NDQ6XFx0XFx0XFx0XFx0aWYgKHRlc3RfYW5kX3NldF9iaXRfbG9jayhQR0RBVF9SRUNMQUlNX0xPQ0tFRCxcXG43OTQ1OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgXFx1MDAyNnBnZGF0LVxcdTAwM2VmbGFncykpXFxuNzk0NjpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gLUVCVVNZO1xcbjc5NDc6XFx0XFxuNzk0ODpcXHRcXHRcXHRcXHRyZWNsYWltZWQgPSBfX25vZGVfcmVjbGFpbShwZ2RhdCwgYmF0Y2hfc2l6ZSwgXFx1MDAyNnNjKTtcXG43OTQ5OlxcdFxcdFxcdFxcdGNsZWFyX2JpdF91bmxvY2soUEdEQVRfUkVDTEFJTV9MT0NLRUQsIFxcdTAwMjZwZ2RhdC1cXHUwMDNlZmxhZ3MpO1xcbjc5NTA6XFx0XFx0XFx0fVxcbjc5NTE6XFx0XFxuNzk1MjpcXHRcXHRcXHRpZiAoIXJlY2xhaW1lZCBcXHUwMDI2XFx1MDAyNiAhbnJfcmV0cmllcy0tKVxcbjc5NTM6XFx0XFx0XFx0XFx0cmV0dXJuIC1FQUdBSU47XFxuNzk1NDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMDc6MDE6MDAuMzM0NDM5MDRaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjE0Nzc3MDM1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipQcm9hY3RpdmUgUmVjbGFpbSBhbmQgU3dhcHBpbmVzcyBVbmRlciB0aGUgTWljcm9zY29wZSoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBkaWdnaW5nIGludG8gdGhpcyBhbmQgaXQncyBiZWNvbWluZyBjbGVhciB0aGF0IGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCBjYW4gYmUgY2FsbGVkIHdpdGggYHBnZGF0YCBkaXJlY3RseSwgYnlwYXNzaW5nIHRoZSBuZWVkIGZvciBhIGBtZW1jZ2Agd2hlbiBkZWFsaW5nIHdpdGggcHJvYWN0aXZlIHJlY2xhaW0gYXQgdGhlIG5vZGUgbGV2ZWwuIFRoaXMgbWFrZXMgc2Vuc2U7IEkgY291bGQgc2VlIHRoaXMgYmVpbmcgbGV2ZXJhZ2VkIHRocm91Z2ggc3lzZnMgb3IgcHJvY2ZzLCBtYXliZSB0aGUgYC9zeXMvZGV2aWNlcy9zeXN0ZW0vbm9kZS9ub2RlWC9yZWNsYWltYCBpbnRlcmZhY2UuXG5cbk5vdywgaGVyZSdzIHRoZSBraWNrZXIsIGFuZCB0aGlzIGlzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3RpbmcgcmVnYXJkaW5nIGBzY19zd2FwcGluZXNzYC4gSSByZW1lbWJlciB0aGF0IHdoZW4gYENPTkZJR19NRU1DR2Agd2FzIGRpc2FibGVkLCBgc2Nfc3dhcHBpbmVzc2Agc2ltcGx5IHJldHVybmVkIGBSRUFEX09OQ0Uodm1fc3dhcHBpbmVzcylgLiBUaGF0J3MgdGhlIGJhc2VsaW5lLiBCdXQgbm93LCBpdCdzIGJlZW4gdXBkYXRlZC4gVGhlIGNvZGUgbm93IGxvb2tzIGxpa2UgdGhpczpcbmBgYGNcbnN0YXRpYyBpbnQgc2Nfc3dhcHBpbmVzcyhzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYywgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxue1xuXHRpZiAoc2MtXHUwMDNlcHJvYWN0aXZlIFx1MDAyNlx1MDAyNiBzYy1cdTAwM2Vwcm9hY3RpdmVfc3dhcHBpbmVzcylcblx0XHRyZXR1cm4gKnNjLVx1MDAzZXByb2FjdGl2ZV9zd2FwcGluZXNzO1xuXHRyZXR1cm4gbWVtX2Nncm91cF9zd2FwcGluZXNzKG1lbWNnKTtcbn1cbmBgYFxuQW5kIGBtZW1fY2dyb3VwX3N3YXBwaW5lc3MobWVtY2cpYCBzdGlsbCByZXR1cm5zIGBSRUFEX09OQ0Uodm1fc3dhcHBpbmVzcylgIGlmIGBDT05GSUdfTUVNQ0dfVjFgIGlzIGRpc2FibGVkLiBTbywgd2l0aG91dCBgQ09ORklHX01FTUNHYCwgYHNjX3N3YXBwaW5lc3NgICpub3cqIGNoZWNrcyBgc2MtXHUwMDNlcHJvYWN0aXZlIFx1MDAyNlx1MDAyNiBzYy1cdTAwM2Vwcm9hY3RpdmVfc3dhcHBpbmVzc2AgYW5kIHJldHVybnMgdGhhdCB2YWx1ZSBpbnN0ZWFkIG9mIGp1c3QgdGhlIGdsb2JhbCBgdm1fc3dhcHBpbmVzc2AuIFRoYXQncyBhIGRlZmluaXRlIGNoYW5nZSBpbiBiZWhhdmlvci5cblxuVGhpcyByYWlzZXMgYSBxdWVzdGlvbiBpbiBteSBtaW5kOiBjYW4gYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gIGV2ZW4gYmUgdXNlZCBpZiBgQ09ORklHX01FTUNHYCBpcyBkaXNhYmxlZD8gV2UgbmVlZCB0byB2ZXJpZnkgdGhhdCBjYWxsIHBhdGggdG8gbWFrZSBzdXJlIHRoZSBhc3N1bXB0aW9ucyBhcmUgdmFsaWQuIEknZCBiZXR0ZXIgZG91YmxlIGNoZWNrIHdoZXJlIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCBpcyBjYWxsZWQuIEl0J3MgYSBrZXkgZGV0YWlsIHRvIHVuZGVyc3RhbmQgdGhlIGludGVyYWN0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTM1NiwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDA3OjAxOjA2LjQ4MjIxMTk4MloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzg0MjgzNDUzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1c2VyX3Byb2FjdGl2ZV9yZWNsYWltXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2ludGVybmFsLmg9NzAyPWV4dGVybiB2b2lkIHJlY2xhaW1fdGhyb3R0bGUocGdfZGF0YV90ICpwZ2RhdCwgZW51bSB2bXNjYW5fdGhyb3R0bGVfc3RhdGUgcmVhc29uKTtcXG5tbS9pbnRlcm5hbC5oOjcwMzppbnQgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbShjaGFyICpidWYsXFxubW0vaW50ZXJuYWwuaC03MDQtXFx0XFx0XFx0ICAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBwZ19kYXRhX3QgKnBnZGF0KTtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01MDA3PXN0YXRpYyBzc2l6ZV90IG1lbW9yeV9yZWNsYWltKHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZiwgY2hhciAqYnVmLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTUwMTItXFxubW0vbWVtY29udHJvbC5jOjUwMTM6XFx0cmV0ID0gdXNlcl9wcm9hY3RpdmVfcmVjbGFpbShidWYsIG1lbWNnLCBOVUxMKTtcXG5tbS9tZW1jb250cm9sLmMtNTAxNC1cXHRpZiAocmV0KVxcbi0tXFxubW0vdm1zY2FuLmM9Nzg0OT1zdGF0aWMgY29uc3QgbWF0Y2hfdGFibGVfdCB0b2tlbnMgPSB7XFxuLS1cXG5tbS92bXNjYW4uYy03ODU0LVxcbm1tL3Ztc2Nhbi5jOjc4NTU6aW50IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oY2hhciAqYnVmLFxcbm1tL3Ztc2Nhbi5jLTc4NTYtXFx0XFx0XFx0ICAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBwZ19kYXRhX3QgKnBnZGF0KVxcbi0tXFxubW0vdm1zY2FuLmM9ODAwOD1zdGF0aWMgc3NpemVfdCByZWNsYWltX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbm1tL3Ztc2Nhbi5jLTgwMTMtXFxubW0vdm1zY2FuLmM6ODAxNDpcXHRyZXQgPSB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltKChjaGFyICopYnVmLCBOVUxMLCBOT0RFX0RBVEEobmlkKSk7XFxubW0vdm1zY2FuLmMtODAxNS1cXHRyZXR1cm4gcmV0ID8gcmV0IDogY291bnQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDA3OjAxOjEwLjMyNTA1MjE1WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0MjU2MDA5MTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQncyBwZXJzcGVjdGl2ZTpcblxuKipEaXZpbmcgaW50byBgcmVjbGFpbV9zdG9yZWAgYW5kIFByb2FjdGl2ZSBVc2VyIFJlY2xhaW0qKlxuXG5SaWdodCwgc28gSSdtIGRpZ2dpbmcgdGhyb3VnaCB0aGUgVk0gc3Vic3lzdGVtLCBhbmQgSSBzZWUgdGhhdCBgcmVjbGFpbV9zdG9yZWAgZnVuY3Rpb24gaW4gYG1tL3Ztc2Nhbi5jYC4gSW50ZXJlc3RpbmcuIEl0J3MgY2FsbGluZyBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgd2hpY2ggaXMgaW1tZWRpYXRlbHkgdGVsbGluZyBtZSBzb21ldGhpbmcgYWJvdXQgaG93IHdlJ3JlIGluaXRpYXRpbmcgcmVjbGFpbSBlZmZvcnRzLCBwYXJ0aWN1bGFybHkgaW4gYSB1c2VyIGNvbnRleHQsIGJhc2VkIG9uIHRoZSBgTk9ERV9EQVRBKG5pZClgIGluZm9ybWF0aW9uIHRoYXTigJlzIHBhc3NlZC4gSSB3YW50IHRvIHVuZGVyc3RhbmQgKndoeSogYHJlY2xhaW1fc3RvcmVgIGlzIGRvaW5nIHRoaXMgYW5kIHdoYXQgaXTigJlzIGxldmVyYWdpbmcgZnJvbSB0aGUgbm9kZS1zcGVjaWZpYyBkYXRhIHBhc3NlZC5cblxuTXkgbWVudGFsIGNoZWNrbGlzdCBzdGFydHM6IHdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgb2YgYSBjYWxsIGxpa2UgdGhpcz8gSXMgdGhpcyB1c2VyLXRyaWdnZXJlZCByZWNsYWltLCBvciBzb21ldGhpbmcgbW9yZSBzeXN0ZW1pYyB0aGF04oCZcyBiZWluZyAqbGV2ZXJhZ2VkKiBmb3IgdXNlciBzcGFjZT8gSG93IGRvZXMgdGhlIG5vZGUgY29udGV4dCBpbmZsdWVuY2UgdGhlIGRlY2lzaW9uLW1ha2luZyB3aXRoaW4gYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gPyBJcyB0aGlzIGFib3V0IG1lbW9yeSBwcmVzc3VyZSBoYW5kbGluZyBvciBtb3JlIGFib3V0IHNvbWUga2luZCBvZiBzdG9yYWdlIHJlc291cmNlIGlzc3VlPyBMZXTigJlzIGRpdmUgaW50byB0aGUgYHJlY2xhaW1fc3RvcmVgIGZ1bmN0aW9uIHRvIHNlZSB3aGF0IHRoaXMgcHJvY2VzcyBsb29rcyBsaWtlIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDU0MSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDA3OjAxOjE0Ljc1MDY1NTkyM1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NTcwMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vdm1zY2FuLmNcIixcbiAgXCJGaXJzdExpbmVcIjogODAwOCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiODAwODpcXHRzdGF0aWMgc3NpemVfdCByZWNsYWltX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcXG44MDA5OlxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXFxuODAxMDpcXHRcXHRcXHRcXHQgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxcbjgwMTE6XFx0e1xcbjgwMTI6XFx0XFx0aW50IHJldCwgbmlkID0gZGV2LVxcdTAwM2VpZDtcXG44MDEzOlxcdFxcbjgwMTQ6XFx0XFx0cmV0ID0gdXNlcl9wcm9hY3RpdmVfcmVjbGFpbSgoY2hhciAqKWJ1ZiwgTlVMTCwgTk9ERV9EQVRBKG5pZCkpO1xcbjgwMTU6XFx0XFx0cmV0dXJuIHJldCA/IHJldCA6IGNvdW50O1xcbjgwMTY6XFx0fVxcbjgwMTc6XFx0XFxuODAxODpcXHRzdGF0aWMgREVWSUNFX0FUVFJfV08ocmVjbGFpbSk7XFxuODAxOTpcXHRpbnQgcmVjbGFpbV9yZWdpc3Rlcl9ub2RlKHN0cnVjdCBub2RlICpub2RlKVxcbjgwMjA6XFx0e1xcbjgwMjE6XFx0XFx0cmV0dXJuIGRldmljZV9jcmVhdGVfZmlsZShcXHUwMDI2bm9kZS1cXHUwMDNlZGV2LCBcXHUwMDI2ZGV2X2F0dHJfcmVjbGFpbSk7XFxuODAyMjpcXHR9XFxuODAyMzpcXHRcXG44MDI0OlxcdHZvaWQgcmVjbGFpbV91bnJlZ2lzdGVyX25vZGUoc3RydWN0IG5vZGUgKm5vZGUpXFxuODAyNTpcXHR7XFxuODAyNjpcXHRcXHRyZXR1cm4gZGV2aWNlX3JlbW92ZV9maWxlKFxcdTAwMjZub2RlLVxcdTAwM2VkZXYsIFxcdTAwMjZkZXZfYXR0cl9yZWNsYWltKTtcXG44MDI3OlxcdH1cXG44MDI4OlxcdCNlbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQwNzowMToxNC43NTEzMTU0MDNaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA5MTI3OTA4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlLi4uIEknbSBsb29raW5nIGF0IGByZWNsYWltX3N0b3JlYCwgd2hpY2ggSSByZW1lbWJlciBiZWluZyBpbiBgbW0vdm1zY2FuLmNgLiBXYWl0IGEgbWludXRlLi4uIEkgaGF2ZSBhIGZlZWxpbmcgdGhhdCBmdW5jdGlvbiBtaWdodCBiZSBjb25kaXRpb25hbGx5IGNvbXBpbGVkLiBSaWdodCwgSSBuZWVkIHRvIGNoZWNrIGlmIGl0J3MgZGVwZW5kZW50IG9uIGEgYCNpZmRlZiBDT05GSUdfTlVNQWAgb3Igc29tZXRoaW5nIHNpbWlsYXIuIEJlc3Qgd2F5IHRvIGNvbmZpcm0gcXVpY2tseSBpcyB0byBmaW5kIHRoZSBjb3JyZXNwb25kaW5nIGAjZW5kaWZgLiBBbHJpZ2h0LCBsZXQncyB6b29tIGluIG9uIGxpbmUgODAyOCBhbmQgc2VlIGlmIHRoYXQgaXMgdGhlIGNvbnRyb2xsaW5nIGNvbmRpdGlvbmFsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTE4NCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMDc6MDE6MTguODQyNTk3ODk2WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDQxNzIzNDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiI2lmZGVmLipOVU1BXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3Ztc2Nhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTc2MjE9c3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgdm1zY2FuX3N5c2N0bF90YWJsZVtdID0ge1xcbi0tXFxubW0vdm1zY2FuLmMtNzYzMC1cXHR9LFxcbm1tL3Ztc2Nhbi5jOjc2MzE6I2lmZGVmIENPTkZJR19OVU1BXFxubW0vdm1zY2FuLmMtNzYzMi1cXHR7XFxuLS1cXG5tbS92bXNjYW4uYz03NjUzPW1vZHVsZV9pbml0KGtzd2FwZF9pbml0KVxcbm1tL3Ztc2Nhbi5jLTc2NTQtXFxubW0vdm1zY2FuLmM6NzY1NTojaWZkZWYgQ09ORklHX05VTUFcXG5tbS92bXNjYW4uYy03NjU2LS8qXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDA3OjAxOjE5LjM0Njc3NTU5MVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDgxODU3MzYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGEgZmlyc3QtcGVyc29uIGV4cGVydCBzdW1tYXJ5OlxuXG4qKkRpZ2dpbmcgaW50byBtbS92bXNjYW4uYzogRXhwbG9yaW5nIENvbmRpdGlvbmFsIENvbXBpbGF0aW9uKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB3aGF0J3MgZ29pbmcgb24gd2l0aCB0aGlzIGNvZGUuIFNwZWNpZmljYWxseSwgSSdtIGdvaW5nIHRvIGp1bXAgaW50byBgbW0vdm1zY2FuLmNgIGFuZCB0YWtlIGEgbG9vayBhcm91bmQgbGluZSA3NjU1LiBNeSBtYWluIGdvYWwgaGVyZSBpcyB0byBmaWd1cmUgb3V0IHdoYXQgZnVuY3Rpb25hbGl0eSBpcyBiZWluZyBjb250cm9sbGVkIGJ5IHRoYXQgYCNpZmRlZmAgZGlyZWN0aXZlLiBJIHN1c3BlY3QgaXQncyBsaWtlbHkgcmVsYXRlZCB0byBzb21lIGtpbmQgb2YgZmVhdHVyZSB0b2dnbGUsIHBvc3NpYmx5IGEgZGVidWcgbW9kZSwgb3IgbWF5YmUgYSBwbGF0Zm9ybS1zcGVjaWZpYyBvcHRpbWl6YXRpb24uIFVuZGVyc3RhbmRpbmcgdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIHBhdGggaXMgY3J1Y2lhbCBmb3IgbWUgdG8gZnVsbHkgZ3Jhc3AgdGhlIGV4ZWN1dGlvbiBmbG93IGFuZCB0aGUgdmFyaW91cyBjb2RlIHBhdGhzIHdpdGhpbiB0aGUgdmlydHVhbCBtZW1vcnkgbWFuYWdlbWVudCBzeXN0ZW0uIEtub3dpbmcgd2hpY2ggc2VjdGlvbnMgb2YgY29kZSBhcmUgaW5jbHVkZWQgb3IgZXhjbHVkZWQgYmFzZWQgb24gdGhlIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzIHdpbGwgYWxzbyBoZWxwIG1lIHVuZGVyc3RhbmQgaG93IHRoaXMgY29kZSBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgc3lzdGVtLCBhbmQgd2hhdCBpbXBhY3QgaXQgaGFzIG9uIHBlcmZvcm1hbmNlIGFuZCByZXNvdXJjZSB1dGlsaXphdGlvbiBpbiBkaWZmZXJlbnQgY29uZmlndXJhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNTMyLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMDc6MDE6MjQuNDI4NjM2Mzc1WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3MDU3NTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vdm1zY2FuLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzY1NSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNzY1NTpcXHQjaWZkZWYgQ09ORklHX05VTUFcXG43NjU2OlxcdC8qXFxuNzY1NzpcXHQgKiBOb2RlIHJlY2xhaW0gbW9kZVxcbjc2NTg6XFx0ICpcXG43NjU5OlxcdCAqIElmIG5vbi16ZXJvIGNhbGwgbm9kZV9yZWNsYWltIHdoZW4gdGhlIG51bWJlciBvZiBmcmVlIHBhZ2VzIGZhbGxzIGJlbG93XFxuNzY2MDpcXHQgKiB0aGUgd2F0ZXJtYXJrcy5cXG43NjYxOlxcdCAqL1xcbjc2NjI6XFx0aW50IG5vZGVfcmVjbGFpbV9tb2RlIF9fcmVhZF9tb3N0bHk7XFxuNzY2MzpcXHRcXG43NjY0OlxcdC8qXFxuNzY2NTpcXHQgKiBQcmlvcml0eSBmb3IgTk9ERV9SRUNMQUlNLiBUaGlzIGRldGVybWluZXMgdGhlIGZyYWN0aW9uIG9mIHBhZ2VzXFxuNzY2NjpcXHQgKiBvZiBhIG5vZGUgY29uc2lkZXJlZCBmb3IgZWFjaCB6b25lX3JlY2xhaW0uIDQgc2NhbnMgMS8xNnRoIG9mXFxuNzY2NzpcXHQgKiBhIHpvbmUuXFxuNzY2ODpcXHQgKi9cXG43NjY5OlxcdCNkZWZpbmUgTk9ERV9SRUNMQUlNX1BSSU9SSVRZIDRcXG43NjcwOlxcdFxcbjc2NzE6XFx0LypcXG43NjcyOlxcdCAqIFBlcmNlbnRhZ2Ugb2YgcGFnZXMgaW4gYSB6b25lIHRoYXQgbXVzdCBiZSB1bm1hcHBlZCBmb3Igbm9kZV9yZWNsYWltIHRvXFxuNzY3MzpcXHQgKiBvY2N1ci5cXG43Njc0OlxcdCAqL1xcbjc2NzU6XFx0aW50IHN5c2N0bF9taW5fdW5tYXBwZWRfcmF0aW8gPSAxO1xcbjc2NzY6XFx0XFxuNzY3NzpcXHQvKlxcbjc2Nzg6XFx0ICogSWYgdGhlIG51bWJlciBvZiBzbGFiIHBhZ2VzIGluIGEgem9uZSBncm93cyBiZXlvbmQgdGhpcyBwZXJjZW50YWdlIHRoZW5cXG43Njc5OlxcdCAqIHNsYWIgcmVjbGFpbSBuZWVkcyB0byBvY2N1ci5cXG43NjgwOlxcdCAqL1xcbjc2ODE6XFx0aW50IHN5c2N0bF9taW5fc2xhYl9yYXRpbyA9IDU7XFxuNzY4MjpcXHRcXG43NjgzOlxcdHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBub2RlX3VubWFwcGVkX2ZpbGVfcGFnZXMoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdClcXG43Njg0OlxcdHtcXG43Njg1OlxcdFxcdHVuc2lnbmVkIGxvbmcgZmlsZV9tYXBwZWQgPSBub2RlX3BhZ2Vfc3RhdGUocGdkYXQsIE5SX0ZJTEVfTUFQUEVEKTtcXG43Njg2OlxcdFxcdHVuc2lnbmVkIGxvbmcgZmlsZV9scnUgPSBub2RlX3BhZ2Vfc3RhdGUocGdkYXQsIE5SX0lOQUNUSVZFX0ZJTEUpICtcXG43Njg3OlxcdFxcdFxcdG5vZGVfcGFnZV9zdGF0ZShwZ2RhdCwgTlJfQUNUSVZFX0ZJTEUpO1xcbjc2ODg6XFx0XFxuNzY4OTpcXHRcXHQvKlxcbjc2OTA6XFx0XFx0ICogSXQncyBwb3NzaWJsZSBmb3IgdGhlcmUgdG8gYmUgbW9yZSBmaWxlIG1hcHBlZCBwYWdlcyB0aGFuXFxuNzY5MTpcXHRcXHQgKiBhY2NvdW50ZWQgZm9yIGJ5IHRoZSBwYWdlcyBvbiB0aGUgZmlsZSBMUlUgbGlzdHMgYmVjYXVzZVxcbjc2OTI6XFx0XFx0ICogdG1wZnMgcGFnZXMgYWNjb3VudGVkIGZvciBhcyBBTk9OIGNhbiBhbHNvIGJlIEZJTEVfTUFQUEVEXFxuNzY5MzpcXHRcXHQgKi9cXG43Njk0OlxcdFxcdHJldHVybiAoZmlsZV9scnUgXFx1MDAzZSBmaWxlX21hcHBlZCkgPyAoZmlsZV9scnUgLSBmaWxlX21hcHBlZCkgOiAwO1xcbjc2OTU6XFx0fVxcbjc2OTY6XFx0XFxuNzY5NzpcXHQvKiBXb3JrIG91dCBob3cgbWFueSBwYWdlIGNhY2hlIHBhZ2VzIHdlIGNhbiByZWNsYWltIGluIHRoaXMgcmVjbGFpbV9tb2RlICovXFxuNzY5ODpcXHRzdGF0aWMgdW5zaWduZWQgbG9uZyBub2RlX3BhZ2VjYWNoZV9yZWNsYWltYWJsZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0KVxcbjc2OTk6XFx0e1xcbjc3MDA6XFx0XFx0dW5zaWduZWQgbG9uZyBucl9wYWdlY2FjaGVfcmVjbGFpbWFibGU7XFxuNzcwMTpcXHRcXHR1bnNpZ25lZCBsb25nIGRlbHRhID0gMDtcXG43NzAyOlxcdFxcbjc3MDM6XFx0XFx0LypcXG43NzA0OlxcdFxcdCAqIElmIFJFQ0xBSU1fVU5NQVAgaXMgc2V0LCB0aGVuIGFsbCBmaWxlIHBhZ2VzIGFyZSBjb25zaWRlcmVkXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDA3OjAxOjI0LjQzMTM0NzUyNFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTUyNTA4Mzg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqTmF2aWdhdGluZyBhIExhYnlyaW50aGluZSBDb2RlYmFzZSoqXG5cbk9rYXksIHNvIEknbSB0cnlpbmcgdG8gdHJhY2sgZG93biB3aGVyZSBgcmVjbGFpbV9zdG9yZWAgaXMgZGVmaW5lZC4gSSBrbm93IGl0J3Mgc29tZXdoZXJlIGluIHRoaXMgbWFzc2l2ZSBjb2RlYmFzZSwgYW5kIHRoZSBsaW5lIG51bWJlciBJIGhhdmUgaXMgODAwOC4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludCwgYnV0IHdpdGhvdXQgY29udGV4dCwgaXQncyBqdXN0IGEgbnVtYmVyLiBHaXZlbiB0aGUgbmF0dXJlIG9mIHRoaXMgcHJvamVjdCwgSSBzdHJvbmdseSBzdXNwZWN0IGl0IG1pZ2h0IGJlIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQuIE15IHByaW1hcnkgc3VzcGljaW9uIGlzIHRoYXQgdGhpcyBmdW5jdGlvbmFsaXR5IGlzIHRpZWQgdG8gTlVNQSAoTm9uLVVuaWZvcm0gTWVtb3J5IEFjY2Vzcykgc3lzdGVtcy4gVGhlc2UgYXJlIGNvbXBsZXggYXJjaGl0ZWN0dXJlcywgYW5kIHN0b3JlIHJlY2xhbWF0aW9uIGNvdWxkIGJlIHZlcnkgZGlmZmVyZW50IGlmIE5VTUEgaXMgZW5hYmxlZC4gU28sIHRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gZG8gaXMgcXVpY2tseSBjaGVjayBpZiBsaW5lIDgwMDggaXMgbmVzdGxlZCB3aXRoaW4gYW4gYCNpZmRlZiBDT05GSUdfTlVNQWAgYmxvY2suIElmIGl0IGlzLCB0aGVuIEknbGwga25vdyBJJ20gb24gdGhlIHJpZ2h0IHRyYWNrOyBteSBhc3N1bXB0aW9ucyBhcmUgaG9sZGluZywgYW5kIEkgc2hvdWxkIGZvY3VzIG15IGRlZXBlciBpbnZlc3RpZ2F0aW9uIHRvIHRoYXQgc3BlY2lmaWMgcGFydCBvZiB0aGUgY29kZS4gSWYgbm90LCB0aGVuIEknbSBnb2luZyB0byBoYXZlIHRvIGJyb2FkZW4gdGhlIHNlYXJjaCBwYXJhbWV0ZXJzLCBsb29rIGF0IHRoZSBidWlsZCBjb25maWd1cmF0aW9uLCBhbmQgdHJ5IHRvIHVuZGVyc3RhbmQgd2hhdCBvdGhlciBjb25kaXRpb25zIG1pZ2h0IGJlIGdvdmVybmluZyB0aGUgcHJlc2VuY2Ugb2YgdGhpcyBmdW5jdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI1NjYsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDA3OjAxOjI3Ljk4Mzg1OTE2MloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNTkzMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vdm1zY2FuLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzk4MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNzk4MDpcXHRcXG43OTgxOlxcdFxcdFxcdHBnc2Nhbm5lZCArPSBucl9wYWdlcztcXG43OTgyOlxcdFxcbjc5ODM6XFx0XFx0XFx0LyogYmxvY2sgbWVtY2cgbWlncmF0aW9uIHdoaWxlIHRoZSBmb2xpbyBtb3ZlcyBiZXR3ZWVuIGxydXMgKi9cXG43OTg0OlxcdFxcdFxcdGlmICghZm9saW9fdGVzdF9jbGVhcl9scnUoZm9saW8pKVxcbjc5ODU6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuNzk4NjpcXHRcXG43OTg3OlxcdFxcdFxcdGxydXZlYyA9IGZvbGlvX2xydXZlY19yZWxvY2tfaXJxKGZvbGlvLCBscnV2ZWMpO1xcbjc5ODg6XFx0XFx0XFx0aWYgKGZvbGlvX2V2aWN0YWJsZShmb2xpbykgXFx1MDAyNlxcdTAwMjYgZm9saW9fdGVzdF91bmV2aWN0YWJsZShmb2xpbykpIHtcXG43OTg5OlxcdFxcdFxcdFxcdGxydXZlY19kZWxfZm9saW8obHJ1dmVjLCBmb2xpbyk7XFxuNzk5MDpcXHRcXHRcXHRcXHRmb2xpb19jbGVhcl91bmV2aWN0YWJsZShmb2xpbyk7XFxuNzk5MTpcXHRcXHRcXHRcXHRscnV2ZWNfYWRkX2ZvbGlvKGxydXZlYywgZm9saW8pO1xcbjc5OTI6XFx0XFx0XFx0XFx0cGdyZXNjdWVkICs9IG5yX3BhZ2VzO1xcbjc5OTM6XFx0XFx0XFx0fVxcbjc5OTQ6XFx0XFx0XFx0Zm9saW9fc2V0X2xydShmb2xpbyk7XFxuNzk5NTpcXHRcXHR9XFxuNzk5NjpcXHRcXG43OTk3OlxcdFxcdGlmIChscnV2ZWMpIHtcXG43OTk4OlxcdFxcdFxcdF9fY291bnRfdm1fZXZlbnRzKFVORVZJQ1RBQkxFX1BHUkVTQ1VFRCwgcGdyZXNjdWVkKTtcXG43OTk5OlxcdFxcdFxcdF9fY291bnRfdm1fZXZlbnRzKFVORVZJQ1RBQkxFX1BHU0NBTk5FRCwgcGdzY2FubmVkKTtcXG44MDAwOlxcdFxcdFxcdGxydXZlY191bmxvY2tfaXJxKGxydXZlYyk7XFxuODAwMTpcXHRcXHR9IGVsc2UgaWYgKHBnc2Nhbm5lZCkge1xcbjgwMDI6XFx0XFx0XFx0Y291bnRfdm1fZXZlbnRzKFVORVZJQ1RBQkxFX1BHU0NBTk5FRCwgcGdzY2FubmVkKTtcXG44MDAzOlxcdFxcdH1cXG44MDA0OlxcdH1cXG44MDA1OlxcdEVYUE9SVF9TWU1CT0xfR1BMKGNoZWNrX21vdmVfdW5ldmljdGFibGVfZm9saW9zKTtcXG44MDA2OlxcdFxcbjgwMDc6XFx0I2lmIGRlZmluZWQoQ09ORklHX1NZU0ZTKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19OVU1BKVxcbjgwMDg6XFx0c3RhdGljIHNzaXplX3QgcmVjbGFpbV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuODAwOTpcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxcbjgwMTA6XFx0XFx0XFx0XFx0ICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcXG44MDExOlxcdHtcXG44MDEyOlxcdFxcdGludCByZXQsIG5pZCA9IGRldi1cXHUwMDNlaWQ7XFxuODAxMzpcXHRcXG44MDE0OlxcdFxcdHJldCA9IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oKGNoYXIgKilidWYsIE5VTEwsIE5PREVfREFUQShuaWQpKTtcXG44MDE1OlxcdFxcdHJldHVybiByZXQgPyByZXQgOiBjb3VudDtcXG44MDE2OlxcdH1cXG44MDE3OlxcdFxcbjgwMTg6XFx0c3RhdGljIERFVklDRV9BVFRSX1dPKHJlY2xhaW0pO1xcbjgwMTk6XFx0aW50IHJlY2xhaW1fcmVnaXN0ZXJfbm9kZShzdHJ1Y3Qgbm9kZSAqbm9kZSlcXG44MDIwOlxcdHtcXG44MDIxOlxcdFxcdHJldHVybiBkZXZpY2VfY3JlYXRlX2ZpbGUoXFx1MDAyNm5vZGUtXFx1MDAzZWRldiwgXFx1MDAyNmRldl9hdHRyX3JlY2xhaW0pO1xcbjgwMjI6XFx0fVxcbjgwMjM6XFx0XFxuODAyNDpcXHR2b2lkIHJlY2xhaW1fdW5yZWdpc3Rlcl9ub2RlKHN0cnVjdCBub2RlICpub2RlKVxcbjgwMjU6XFx0e1xcbjgwMjY6XFx0XFx0cmV0dXJuIGRldmljZV9yZW1vdmVfZmlsZShcXHUwMDI2bm9kZS1cXHUwMDNlZGV2LCBcXHUwMDI2ZGV2X2F0dHJfcmVjbGFpbSk7XFxuODAyNzpcXHR9XFxuODAyODpcXHQjZW5kaWZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMDc6MDE6MjcuOTg0MjIwNjYyWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU5OTAzOTI4ODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgcmVjbGFpbV9zdG9yZWAgRnVuY3Rpb25hbGl0eSoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gaG93IHRoaXMgYHJlY2xhaW1fc3RvcmVgIGZ1bmN0aW9uIGJlaGF2ZXMsIHNwZWNpZmljYWxseSBjb25zaWRlcmluZyBpdHMgZGVwZW5kZW5jaWVzLiBJIHNlZSB0aGF0IGl0J3MgbmVzdGxlZCB1bmRlciBib3RoIGBDT05GSUdfU1lTRlNgIGFuZCBgQ09ORklHX05VTUFgLCB3aGljaCBpbW1lZGlhdGVseSByYWlzZXMgYSBmbGFnLiBFdmVuIGlmIGBDT05GSUdfTUVNQ0dgIGlzIGRpc2FibGVkLCBlbmFibGluZyBib3RoIGBOVU1BYCBhbmQgYFNZU0ZTYCBvcGVucyBhIHBvdGVudGlhbCBkb29yLiBJdCBsb29rcyBsaWtlIGEgdXNlciBjb3VsZCB0cmlnZ2VyIHByb2FjdGl2ZSByZWNsYWltIG9uIGEgbm9kZSBkaXJlY3RseSB0aHJvdWdoIHN5c2ZzIHVuZGVyIHRob3NlIGNvbmRpdGlvbnMuXG5cbklmIHRoYXQgaGFwcGVucywgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gIGdldHMgY2FsbGVkLiBMZXQncyBzZWUuLi4gaXQgcGFyc2VzIHRoZSBpbnB1dCBidWZmZXIuIEFoLCBpZiBpdCBmaW5kcyBgc3dhcHBpbmVzcz1YYCwgaXQgdXBkYXRlcyB0aGUgYHN3YXBwaW5lc3NgIHZhbHVlIGFuZCBwYXNzZXMgdGhhdCBwb2ludGVyIHRvIGBzYy5wcm9hY3RpdmVfc3dhcHBpbmVzc2AuIFRoZSBhY3Rpb24gdGhlbiB0cmlnZ2VycyBgX19ub2RlX3JlY2xhaW1gLiBUaGlzLCBpbiB0dXJuLCBzZWVtcyB0byBldmVudHVhbGx5IGJvaWwgZG93biB0byBlaXRoZXIgYHNocmlua19ub2RlYCBvciBzaW1pbGFyIGZ1bmN0aW9ucywgd2hpY2ggcmVseSBvbiBgc2Nfc3dhcHBpbmVzcyhzYywgbWVtY2cpYC5cblxuSG9sZCBvbiwgSSBuZWVkIHRvIGNoZWNrIHdoZXJlIGBfX25vZGVfcmVjbGFpbWAgaXMgZGVmaW5lZCwgYWggeWVzLCBgbW0vdm1zY2FuLmNgLiBBbHJpZ2h0LCBJIG5lZWQgdG8gZ28gYmFjayBhbmQgY2hlY2sgZXhhY3RseSBob3cgdGhlIGBzY19zd2FwcGluZXNzYCBmdW5jdGlvbiBpcyB1dGlsaXplZCB3aXRoaW4gdGhlIHNjb3BlIG9mIHRoaXMgcGFydGljdWxhciBmdW5jdGlvbi4gSXQgc2VlbXMgbGlrZSB0aGUgc3dhcHBpbmVzcyBmYWN0b3IgaXMga2V5IGhlcmUgYW5kIHRoYXQncyBzb21ldGhpbmcgSSBuZWVkIHRvIGtlZXAgaW4gbWluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM2NTQsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQwNzowMTozMy45NzQ2MTYzMjhaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM1OTY3ODY5NzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2Nfc3dhcHBpbmVzc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bXNjYW4uYz03NT1zdHJ1Y3Qgc2Nhbl9jb250cm9sIHtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTk2LVxcbm1tL3Ztc2Nhbi5jOjk3OlxcdC8qIFN3YXBwaW5lc3MgdmFsdWUgZm9yIHByb2FjdGl2ZSByZWNsYWltLiBBbHdheXMgdXNlIHNjX3N3YXBwaW5lc3MoKSEgKi9cXG5tbS92bXNjYW4uYy05OC1cXHRpbnQgKnByb2FjdGl2ZV9zd2FwcGluZXNzO1xcbi0tXFxubW0vdm1zY2FuLmM9MjAwPWludCB2bV9zd2FwcGluZXNzID0gNjA7XFxubW0vdm1zY2FuLmMtMjAxLVxcbm1tL3Ztc2Nhbi5jOjIwMjpzdGF0aWMgaW50IHNjX3N3YXBwaW5lc3Moc3RydWN0IHNjYW5fY29udHJvbCAqc2MsIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG5tbS92bXNjYW4uYy0yMDMte1xcbi0tXFxubW0vdm1zY2FuLmM9MjQ3OT1zdGF0aWMgdm9pZCBnZXRfc2Nhbl9jb3VudChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLFxcbi0tXFxubW0vdm1zY2FuLmMtMjQ4My1cXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBscnV2ZWNfbWVtY2cobHJ1dmVjKTtcXG5tbS92bXNjYW4uYzoyNDg0OlxcdGludCBzd2FwcGluZXNzID0gc2Nfc3dhcHBpbmVzcyhzYywgbWVtY2cpO1xcbm1tL3Ztc2Nhbi5jLTI0ODUtXFx0dTY0IGZyYWN0aW9uW0FOT05fQU5EX0ZJTEVdO1xcbi0tXFxubW0vdm1zY2FuLmM9MjY4Nz1zdGF0aWMgaW50IGdldF9zd2FwcGluZXNzKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy0yNjk4LVxcbm1tL3Ztc2Nhbi5jOjI2OTk6XFx0cmV0dXJuIHNjX3N3YXBwaW5lc3Moc2MsIG1lbWNnKTtcXG5tbS92bXNjYW4uYy0yNzAwLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMDc6MDE6MzcuNTcxNDA4ODQ0WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg3MzEwMTQ2MTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBTd2FwcGluZXNzIEJlaGF2aW9yIENoYW5nZSoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBkaWdnaW5nIGludG8gdGhpcyBwYXRjaC4gQmVmb3JlIHRoaXMgY2hhbmdlLCB0aGUgYHNjX3N3YXBwaW5lc3NgIGZ1bmN0aW9uIGhhZCBhIG5hc3R5IGxpdHRsZSBnb3RjaGE6IGlmIGBDT05GSUdfTUVNQ0dgIHdhcyBkaXNhYmxlZCwgYW55IGN1c3RvbSBgc3dhcHBpbmVzc2AgdmFsdWUgYSB1c2VyIHNldCB2aWEgc3lzZnMgdG8gdHJpZ2dlciBwcm9hY3RpdmUgcmVjbGFpbSB3YXMgY29tcGxldGVseSBpZ25vcmVkLiBJdCB3b3VsZCBqdXN0IGRlZmF1bHQgdG8gdGhlIGdsb2JhbCBgdm1fc3dhcHBpbmVzc2AuIFRoYXQncyBub3QgaWRlYWwsIGVzcGVjaWFsbHkgZm9yIGFueW9uZSB0cnlpbmcgdG8gZmluZWx5IHR1bmUgbWVtb3J5IG1hbmFnZW1lbnQgaW4gYSBzeXN0ZW0gd2l0aG91dCBtZW1jZyBlbmFibGVkLlxuXG5UaGlzIHBhdGNoIGFkZHJlc3NlcyB0aGF0IGRpcmVjdGx5LiBJdCdzIG5vdyB1bmNvbmRpdGlvbmFsbHkgZGVmaW5lZCB0byB1c2UgdGhlIGBzYy1cdTAwM2Vwcm9hY3RpdmVfc3dhcHBpbmVzc2AgdmFsdWUgKmlmKiBwcm9hY3RpdmUgcmVjbGFpbSBpcyBiZWluZyB1c2VkLiBJZiBubyBwcm9hY3RpdmUgYHN3YXBwaW5lc3NgIGlzIHNldCBpdCBmYWxscyBiYWNrIHRvIHRoZSBkZWZhdWx0IGBtZW1fY2dyb3VwX3N3YXBwaW5lc3NgIGlmIGBtZW1jZ2AgaXMgZW5hYmxlZC4gVGhhdCdzIGEgc29saWQgaW1wcm92ZW1lbnQhIE5vdywgZXZlbiB3aXRob3V0IG1lbWNnLCB0aGUgdXNlci1kZWZpbmVkIGBzd2FwcGluZXNzYCBpbiB0aGUgc3lzZnMgbm9kZSB3aWxsIGFjdHVhbGx5IGJlIHJlc3BlY3RlZCBkdXJpbmcgcHJvYWN0aXZlIHJlY2xhaW0uIEl0J3MgYSBjbGVhciBmdW5jdGlvbmFsIGltcHJvdmVtZW50LlxuXG5MZXQncyBtYWtlIHN1cmUgdGhpcyBhbGwgaG9sZHMgdXAuIEZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSB0aGF0IGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCAqY2FuKiBiZSBjYWxsZWQgd2hlbiBgQ09ORklHX01FTUNHYCBpcyBvZmYuIFJpZ2h0LCBpdCdzIHRpZWQgdG8gYENPTkZJR19TWVNGU2AgYW5kIGBDT05GSUdfTlVNQWAsIG5vdCBgQ09ORklHX01FTUNHYCwgc28gdGhhdCBzaG91bGQgYmUgZmluZS4gT2theSwgd2hlcmUgZWxzZSBpcyBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgYmVpbmcgY2FsbGVkPyBMZXQncyBjaGVjayBgbW0vbWVtY29udHJvbC5jYC4gTm9wZSwgdGhhdCBwYXJ0IG9mIHRoZSBjb2RlIGlzIG9ubHkgY29tcGlsZWQgaWYgYENPTkZJR19NRU1DR2AgaXMgZW5hYmxlZC4gSG93ZXZlciwgYG1tL3Ztc2Nhbi5jYCBpcyBhbHdheXMgY29tcGlsZWQuIFNvLCBldmVuIHdpdGhvdXQgYENPTkZJR19NRU1DR2AsIHRoZSBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgZnVuY3Rpb24gaXMgY29tcGlsZWQgYW5kIGlzIGFjY2Vzc2libGUgdmlhIHRoZSBzeXNmcyBub2RlIGByZWNsYWltYC4gSnVzdCB3YW50IHRvIHRyaXBsZS1jaGVjayB0aGF0LiBTZWVtcyB0byBiZSB3b3JraW5nIGFzIGV4cGVjdGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDU4MywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQwNzowMTo0Ni4zMDI0MjcwNzJaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNjM0MDY1MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1c2VyX3Byb2FjdGl2ZV9yZWNsYWltXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3Ztc2Nhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTc4NDk9c3RhdGljIGNvbnN0IG1hdGNoX3RhYmxlX3QgdG9rZW5zID0ge1xcbi0tXFxubW0vdm1zY2FuLmMtNzg1NC1cXG5tbS92bXNjYW4uYzo3ODU1OmludCB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltKGNoYXIgKmJ1ZixcXG5tbS92bXNjYW4uYy03ODU2LVxcdFxcdFxcdCAgIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgcGdfZGF0YV90ICpwZ2RhdClcXG4tLVxcbm1tL3Ztc2Nhbi5jPTgwMDg9c3RhdGljIHNzaXplX3QgcmVjbGFpbV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuLS1cXG5tbS92bXNjYW4uYy04MDEzLVxcbm1tL3Ztc2Nhbi5jOjgwMTQ6XFx0cmV0ID0gdXNlcl9wcm9hY3RpdmVfcmVjbGFpbSgoY2hhciAqKWJ1ZiwgTlVMTCwgTk9ERV9EQVRBKG5pZCkpO1xcbm1tL3Ztc2Nhbi5jLTgwMTUtXFx0cmV0dXJuIHJldCA/IHJldCA6IGNvdW50O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQwNzowMTo0Ni41Mzg3NzM2ODVaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDM0MTQ0OTIyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBob3cgSSdkIGFwcHJvYWNoIHRoaXMgdGFzaywgYXMgaWYgdGhlc2Ugd2VyZSBteSBpbnRlcm5hbCB0aG91Z2h0czpcblxuKipJbnZlc3RpZ2F0aW5nIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCBpbiBgbW0vdm1zY2FuLmNgIHVuZGVyIGBDT05GSUdfTUVNQ0dgKipcblxuQWxyaWdodCwgc28gd2UgbmVlZCB0byBzZWUgd2hlcmUgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gIGlzIGJlaW5nIHVzZWQsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBtbS92bXNjYW4uY2AgZmlsZS4gVGhlIGFkZGVkIHdyaW5rbGUgaXMgdGhhdCB3ZSdyZSBvbmx5IGludGVyZXN0ZWQgaW4gaXRzIG9jY3VycmVuY2VzICppZiogdGhleSdyZSB3cmFwcGVkIGluc2lkZSBhbiBgI2lmZGVmIENPTkZJR19NRU1DR2AgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZS4gVGhpcyBzdWdnZXN0cyBhIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIHNjZW5hcmlvLCBhbmQgd2UgbmVlZCB0byB1bmRlcnN0YW5kIGlmIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCdzIGJlaGF2aW9yIG9yIGluY2x1c2lvbiBpbiB0aGUgY29kZSBpcyB0aWVkIHRvIHRoZSBtZW1vcnkgY29udHJvbCBncm91cCBmdW5jdGlvbmFsaXR5LiBUaGlzIGlzIGEgY29tbW9uIHBhdHRlcm4sIGFuZCBwcm9iYWJseSBpbmRpY2F0ZXMgYSBmdW5jdGlvbi92YXJpYWJsZSBpcyBzcGVjaWZpY2FsbHkgcGFydCBvZiB0aGUgTUVNQ0cgY29kZSBwYXRoLlxuXG5Fc3NlbnRpYWxseSwgSSdtIGdvaW5nIHRvIGxvb2sgZm9yIGxpbmVzIGluIGBtbS92bXNjYW4uY2AgdGhhdCBsb29rIHNvbWV0aGluZyBsaWtlIHRoaXM6XG5cbmBgYGNcbiNpZmRlZiBDT05GSUdfTUVNQ0dcbiAgLy8gU29tZXRoaW5nIHVzaW5nIHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0gaGVyZVxuI2VuZGlmXG5gYGBcblxuSSdsbCBiZSBzcGVjaWZpY2FsbHkgc2Nhbm5pbmcgZm9yIGxpbmVzIHRoYXQgZGVmaW5lIHRoaXMgdmFyaWFibGUgYW5kIHdoYXQgaXQgaXMgdXNlZCBmb3IgaW4gdGhlIE1FTUNHIGNvbmZpZy5cbkkgd2lsbCBoYXZlIHRvIGZpZ3VyZSBvdXQgaG93IHRoaXMgaXMgZG9uZSBiZXN0LCBzdWNoIGFzIGdyZXAgd2l0aCByZWdleCwgb3IgdGhyb3VnaCBvdGhlciB0b29scy4gVGhpcyB3aWxsIGdpdmUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBleHBsb3JpbmcgdGhhdCBwYXJ0IG9mIHRoZSBjb2RlLlxuXG5UaGlzIHdpbGwgZ2l2ZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIG15IGludmVzdGlnYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NjcwLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMDc6MDE6NTAuODgwMjI1Nzk5WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTcwMDYwNTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiI2lmZGVmLipNRU1DR1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bXNjYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bXNjYW4uYz0yMDI9c3RhdGljIGludCBzY19zd2FwcGluZXNzKHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuLS1cXG5tbS92bXNjYW4uYy0yMDgtXFxubW0vdm1zY2FuLmM6MjA5OiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS92bXNjYW4uYy0yMTAtXFxuLS1cXG5tbS92bXNjYW4uYz0yNjY3PXN0YXRpYyBzdHJ1Y3QgbHJ1dmVjICpnZXRfbHJ1dmVjKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IG5pZClcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI2NzAtXFxubW0vdm1zY2FuLmM6MjY3MTojaWZkZWYgQ09ORklHX01FTUNHXFxubW0vdm1zY2FuLmMtMjY3Mi1cXHRpZiAobWVtY2cpIHtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTI4MjE9c3RhdGljIHN0cnVjdCBscnVfZ2VuX21tX2xpc3QgKmdldF9tbV9saXN0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI4MjctXFxubW0vdm1zY2FuLmM6MjgyODojaWZkZWYgQ09ORklHX01FTUNHXFxubW0vdm1zY2FuLmMtMjgyOS1cXHRpZiAobWVtY2cpXFxuLS1cXG5tbS92bXNjYW4uYz0yODYxPXZvaWQgbHJ1X2dlbl9hZGRfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxuLS1cXG5tbS92bXNjYW4uYy0yODY3LVxcdFZNX1dBUk5fT05fT05DRSghbGlzdF9lbXB0eShcXHUwMDI2bW0tXFx1MDAzZWxydV9nZW4ubGlzdCkpO1xcbm1tL3Ztc2Nhbi5jOjI4Njg6I2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL3Ztc2Nhbi5jLTI4NjktXFx0Vk1fV0FSTl9PTl9PTkNFKG1tLVxcdTAwM2VscnVfZ2VuLm1lbWNnKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTI4ODg9dm9pZCBscnVfZ2VuX2RlbF9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI4OTYtXFxubW0vdm1zY2FuLmM6Mjg5NzojaWZkZWYgQ09ORklHX01FTUNHXFxubW0vdm1zY2FuLmMtMjg5OC1cXHRtZW1jZyA9IG1tLVxcdTAwM2VscnVfZ2VuLm1lbWNnO1xcbi0tXFxubW0vdm1zY2FuLmMtMjkyMC1cXG5tbS92bXNjYW4uYzoyOTIxOiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS92bXNjYW4uYy0yOTIyLVxcdG1lbV9jZ3JvdXBfcHV0KG1tLVxcdTAwM2VscnVfZ2VuLm1lbWNnKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI5MjYtXFxubW0vdm1zY2FuLmM6MjkyNzojaWZkZWYgQ09ORklHX01FTUNHXFxubW0vdm1zY2FuLmMtMjkyOC12b2lkIGxydV9nZW5fbWlncmF0ZV9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG4tLVxcbm1tL3Ztc2Nhbi5jPTQyOTY9c3RhdGljIHZvaWQgbHJ1X2dlbl9yb3RhdGVfbWVtY2coc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgb3ApXFxuLS1cXG5tbS92bXNjYW4uYy00MzQxLVxcbm1tL3Ztc2Nhbi5jOjQzNDI6I2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL3Ztc2Nhbi5jLTQzNDMtXFxuLS1cXG5tbS92bXNjYW4uYz01NTAyPXN0YXRpYyBpbnQgbHJ1X2dlbl9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXFxuLS1cXG5tbS92bXNjYW4uYy01NTE1LVxcbm1tL3Ztc2Nhbi5jOjU1MTY6I2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL3Ztc2Nhbi5jLTU1MTctXFx0XFx0aWYgKG1lbWNnKVxcbi0tXFxubW0vdm1zY2FuLmM9NTc2OD12b2lkIGxydV9nZW5faW5pdF9scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTc4Ny1cXG5tbS92bXNjYW4uYzo1Nzg4OiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS92bXNjYW4uYy01Nzg5LVxcbi0tXFxubW0vdm1zY2FuLmM9NjY2Nj11bnNpZ25lZCBsb25nIHRyeV90b19mcmVlX3BhZ2VzKHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsIGludCBvcmRlcixcXG4tLVxcbm1tL3Ztc2Nhbi5jLTY3MDgtXFxubW0vdm1zY2FuLmM6NjcwOTojaWZkZWYgQ09ORklHX01FTUNHXFxubW0vdm1zY2FuLmMtNjcxMC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMDc6MDE6NTAuOTk3MjM3Mzg2WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxNjk5MzcwMjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IHN0YW5kczpcblxuKipOYXZpZ2F0aW5nIHRoZSBDb2RlYmFzZSoqXG5cbk9rYXksIHNvIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCBpcyBkZWZpbmVkIG9uIGxpbmUgNzg1NS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNvbnRleHQuIFRoZSBjcml0aWNhbCB0aGluZyBoZXJlIGlzIHdoZXRoZXIgaXQncyBjb25kaXRpb25hbGx5IGNvbXBpbGVkIG9yIG5vdC4gTGV0J3Mgc2VlIGlmIHRoZXJlIGFyZSBhbnkgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZGlyZWN0aXZlcyAoYCNpZmRlZmAsIGAjaWZuZGVmYCwgZXRjLikgdGhhdCBhZmZlY3QgaXQuIEkga25vdyB0aGF0IGBDT05GSUdfTUVNQ0dgIG9mdGVuIHBsYXlzIGEgcm9sZSBpbiBtZW1vcnkgbWFuYWdlbWVudC4gVGhlIGxhc3QgdGltZSB0aGlzIHNob3dlZCB1cCBwcmlvciB0byB0aGUgZGVmaW5pdGlvbiwgaXQgd2FzIGJhY2sgYXQgNjcwOS4gT2theSwgc28gdGhhdCBtZWFucyBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgKmlzbid0KiBkaXJlY3RseSB1bmRlciB0aGUgYENPTkZJR19NRU1DR2AgY29uZmlndXJhdGlvbi4gVGhhdCdzIGdvb2QgdG8ga25vdy4gTm93LCBiZWZvcmUgSSBhc3N1bWUgYW55dGhpbmcsIEkgYmV0dGVyIGNoZWNrIGZvciBhbnkgb3RoZXIgYCNpZmRlZmAgZGlyZWN0aXZlcyBpbiB0aGUgaW1tZWRpYXRlIHZpY2luaXR5IG9mIHRoYXQgbGluZSAoNzg1NSkuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhIGRpZmZlcmVudCBjb25kaXRpb24gdGhhdCAqZG9lcyogaW1wYWN0IGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBjb2RlIGlzIG5vdCBpbXBhY3RlZCBieSB0aGlzIG9yIG90aGVyIGNvbmZpZ3VyYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzAwNiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDA3OjAxOjU1LjE2NzE3Njk2NloiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNDk0NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vdm1zY2FuLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzg0MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNzg0MDpcXHR9XFxuNzg0MTpcXHRcXG43ODQyOlxcdCNlbmRpZlxcbjc4NDM6XFx0XFxuNzg0NDpcXHRlbnVtIHtcXG43ODQ1OlxcdFxcdE1FTU9SWV9SRUNMQUlNX1NXQVBQSU5FU1MgPSAwLFxcbjc4NDY6XFx0XFx0TUVNT1JZX1JFQ0xBSU1fU1dBUFBJTkVTU19NQVgsXFxuNzg0NzpcXHRcXHRNRU1PUllfUkVDTEFJTV9OVUxMLFxcbjc4NDg6XFx0fTtcXG43ODQ5OlxcdHN0YXRpYyBjb25zdCBtYXRjaF90YWJsZV90IHRva2VucyA9IHtcXG43ODUwOlxcdFxcdHsgTUVNT1JZX1JFQ0xBSU1fU1dBUFBJTkVTUywgXFxcInN3YXBwaW5lc3M9JWRcXFwifSxcXG43ODUxOlxcdFxcdHsgTUVNT1JZX1JFQ0xBSU1fU1dBUFBJTkVTU19NQVgsIFxcXCJzd2FwcGluZXNzPW1heFxcXCJ9LFxcbjc4NTI6XFx0XFx0eyBNRU1PUllfUkVDTEFJTV9OVUxMLCBOVUxMIH0sXFxuNzg1MzpcXHR9O1xcbjc4NTQ6XFx0XFxuNzg1NTpcXHRpbnQgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbShjaGFyICpidWYsXFxuNzg1NjpcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHBnX2RhdGFfdCAqcGdkYXQpXFxuNzg1NzpcXHR7XFxuNzg1ODpcXHRcXHR1bnNpZ25lZCBpbnQgbnJfcmV0cmllcyA9IE1BWF9SRUNMQUlNX1JFVFJJRVM7XFxuNzg1OTpcXHRcXHR1bnNpZ25lZCBsb25nIG5yX3RvX3JlY2xhaW0sIG5yX3JlY2xhaW1lZCA9IDA7XFxuNzg2MDpcXHRcXHRpbnQgc3dhcHBpbmVzcyA9IC0xO1xcbjc4NjE6XFx0XFx0Y2hhciAqb2xkX2J1ZiwgKnN0YXJ0O1xcbjc4NjI6XFx0XFx0c3Vic3RyaW5nX3QgYXJnc1tNQVhfT1BUX0FSR1NdO1xcbjc4NjM6XFx0XFx0Z2ZwX3QgZ2ZwX21hc2sgPSBHRlBfS0VSTkVMO1xcbjc4NjQ6XFx0XFxuNzg2NTpcXHRcXHRpZiAoIWJ1ZiB8fCAoIW1lbWNnIFxcdTAwMjZcXHUwMDI2ICFwZ2RhdCkgfHwgKG1lbWNnIFxcdTAwMjZcXHUwMDI2IHBnZGF0KSlcXG43ODY2OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjc4Njc6XFx0XFxuNzg2ODpcXHRcXHRidWYgPSBzdHJzdHJpcChidWYpO1xcbjc4Njk6XFx0XFxuNzg3MDpcXHRcXHRvbGRfYnVmID0gYnVmO1xcbjc4NzE6XFx0XFx0bnJfdG9fcmVjbGFpbSA9IG1lbXBhcnNlKGJ1ZiwgXFx1MDAyNmJ1ZikgLyBQQUdFX1NJWkU7XFxuNzg3MjpcXHRcXHRpZiAoYnVmID09IG9sZF9idWYpXFxuNzg3MzpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG43ODc0OlxcdFxcbjc4NzU6XFx0XFx0YnVmID0gc3Ryc3RyaXAoYnVmKTtcXG43ODc2OlxcdFxcbjc4Nzc6XFx0XFx0d2hpbGUgKChzdGFydCA9IHN0cnNlcChcXHUwMDI2YnVmLCBcXFwiIFxcXCIpKSAhPSBOVUxMKSB7XFxuNzg3ODpcXHRcXHRcXHRpZiAoIXN0cmxlbihzdGFydCkpXFxuNzg3OTpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG43ODgwOlxcdFxcdFxcdHN3aXRjaCAobWF0Y2hfdG9rZW4oc3RhcnQsIHRva2VucywgYXJncykpIHtcXG43ODgxOlxcdFxcdFxcdGNhc2UgTUVNT1JZX1JFQ0xBSU1fU1dBUFBJTkVTUzpcXG43ODgyOlxcdFxcdFxcdFxcdGlmIChtYXRjaF9pbnQoXFx1MDAyNmFyZ3NbMF0sIFxcdTAwMjZzd2FwcGluZXNzKSlcXG43ODgzOlxcdFxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjc4ODQ6XFx0XFx0XFx0XFx0aWYgKHN3YXBwaW5lc3MgXFx1MDAzYyBNSU5fU1dBUFBJTkVTUyB8fFxcbjc4ODU6XFx0XFx0XFx0XFx0ICAgIHN3YXBwaW5lc3MgXFx1MDAzZSBNQVhfU1dBUFBJTkVTUylcXG43ODg2OlxcdFxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjc4ODc6XFx0XFx0XFx0XFx0YnJlYWs7XFxuNzg4ODpcXHRcXHRcXHRjYXNlIE1FTU9SWV9SRUNMQUlNX1NXQVBQSU5FU1NfTUFYOlxcbjc4ODk6XFx0XFx0XFx0XFx0c3dhcHBpbmVzcyA9IFNXQVBQSU5FU1NfQU5PTl9PTkxZO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQwNzowMTo1NS4xNjc1Mjg2NDZaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTg5MDEzOTU5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIGEgTXlzdGVyaW91cyBgI2VuZGlmYCoqXG5cbk9rYXksIHNvIEknbSBkZWVwIGluIHRoaXMgY29kZWJhc2UsIGFuZCBJJ3ZlIGhpdCBhIGAjZW5kaWZgIGF0IGxpbmUgNzg0Mi4gVGhlIGltbWVkaWF0ZSBxdWVzdGlvbiBpcyBhbHdheXMsIFwiV2h5IGlzICp0aGlzKiBgI2VuZGlmYCBoZXJlLCBhbmQgd2hhdCBjb25kaXRpb24gZG9lcyBpdCBjbG9zZT9cIiBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgY29ycmVzcG9uZGluZyBgI2lmYCwgYCNpZmRlZmAsIG9yIGAjaWZuZGVmYCBkaXJlY3RpdmUuIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gdXNlIG15IElERSdzIFwiZmluZCBtYXRjaGluZyBicmFjZS9kaXJlY3RpdmVcIiBmZWF0dXJlLCBidXQgSSBtYXkgbmVlZCB0byByZXNvcnQgdG8gYSBtb3JlIGJydXRlLWZvcmNlIHNlYXJjaCBpZiB0aGUgZWRpdG9yJ3MgYW5hbHlzaXMgaXNuJ3QgcGVyZmVjdC5cblxuT25jZSBJJ3ZlIGxvY2F0ZWQgdGhlIG9wZW5pbmcgZGlyZWN0aXZlLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgaW50ZW50LiBXaGF0IHByZXByb2Nlc3NvciB2YXJpYWJsZSBpcyBiZWluZyB0ZXN0ZWQ/IFdoYXQncyB0aGUgY29udGV4dD8gSXMgdGhpcyBndWFyZGluZyBhIHNwZWNpZmljIHBsYXRmb3JtLWRlcGVuZGVudCBjb2RlIGJsb2NrLCBhbiBleHBlcmltZW50YWwgZmVhdHVyZSwgYSBkZWJ1Z2dpbmcgYWlkLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gSSdsbCBwcm9iYWJseSBsb29rIGZvciB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgcHJlcHJvY2Vzc29yIHZhcmlhYmxlLiBXaGF0IGlzIHRoZSBsb2dpYyBiZWhpbmQgaXRzIGNvbmRpdGlvbmFsIHVzZT9cblxuSWYgdGhlIGNvZGUgd2l0aGluIHRoZSBgI2lmYC9gI2VuZGlmYCBibG9jayBpcyBub24tdHJpdmlhbCwgSSdsbCBuZWVkIHRvIGFzc2VzcyBpdHMgaW1wYWN0IG9uIHRoZSBzdXJyb3VuZGluZyBjb2RlLiBBcmUgdGhlcmUgYW55IGRlcGVuZGVuY2llcz8gUG90ZW50aWFsIHNpZGUgZWZmZWN0cz8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIGJ1Z3MgdGhhdCBjb3VsZCBiZSBpbnRyb2R1Y2VkIGlmIHRoZSBjb25kaXRpb24gZXZhbHVhdGVzIHRvIGZhbHNlPyBDb3VsZCB0aGUgY29kZSBiZSBzaW1wbGlmaWVkIG9yIHJlZmFjdG9yZWQgdG8gcmVtb3ZlIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbj8gRGVwZW5kaW5nIG9uIHRoZSBzY29wZSwgSSBtaWdodCBldmVuIG5lZWQgdG8gY29uc2lkZXIgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24gYW5kIHdoaWNoIG9mIHRoZSBjb25maWd1cmF0aW9ucyBhcmUgaW50ZW5kZWQgdG8gdXNlIHRoYXQgY29kZS5cblxuVWx0aW1hdGVseSwgSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciB0aGlzIGAjZW5kaWZgIGlzIGNvcnJlY3RseSBwbGFjZWQsIHNlcnZpbmcgaXRzIGludGVuZGVkIHB1cnBvc2UsIGFuZCBub3QgY2F1c2luZyBhbnkgdW5pbnRlbmRlZCBiZWhhdmlvci4gSXQncyBhIGtleSBwYXJ0IG9mIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvZGUncyBjb250cm9sIGZsb3cgYW5kIGhvdyBpdCBhZGFwdHMgdG8gZGlmZmVyZW50IGVudmlyb25tZW50cyBvciBjb25maWd1cmF0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgxMjIsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDA3OjAyOjAxLjA1NzY3MTAzNVoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjEzODQ4MDg0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIiNpZmRlZi4qXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3Ztc2Nhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTc1PXN0cnVjdCBzY2FuX2NvbnRyb2wge1xcbi0tXFxubW0vdm1zY2FuLmMtMTgyLVxcbm1tL3Ztc2Nhbi5jOjE4MzojaWZkZWYgQVJDSF9IQVNfUFJFRkVUQ0hXXFxubW0vdm1zY2FuLmMtMTg0LSNkZWZpbmUgcHJlZmV0Y2h3X3ByZXZfbHJ1X2ZvbGlvKF9mb2xpbywgX2Jhc2UsIF9maWVsZClcXHRcXHRcXHRcXFxcXFxuLS1cXG5tbS92bXNjYW4uYz0yMDI9c3RhdGljIGludCBzY19zd2FwcGluZXNzKHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuLS1cXG5tbS92bXNjYW4uYy0yMDgtXFxubW0vdm1zY2FuLmM6MjA5OiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS92bXNjYW4uYy0yMTAtXFxuLS1cXG5tbS92bXNjYW4uYz0yMzk9c3RhdGljIGJvb2wgd3JpdGViYWNrX3Rocm90dGxpbmdfc2FuZShzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI0Mi1cXHRcXHRyZXR1cm4gdHJ1ZTtcXG5tbS92bXNjYW4uYzoyNDM6I2lmZGVmIENPTkZJR19DR1JPVVBfV1JJVEVCQUNLXFxubW0vdm1zY2FuLmMtMjQ0LVxcdGlmIChjZ3JvdXBfc3Vic3lzX29uX2RmbChtZW1vcnlfY2dycF9zdWJzeXMpKVxcbi0tXFxubW0vdm1zY2FuLmM9ODIwPWVudW0gZm9saW9fcmVmZXJlbmNlcyB7XFxuLS1cXG5tbS92bXNjYW4uYy04MjUtXFxubW0vdm1zY2FuLmM6ODI2OiNpZmRlZiBDT05GSUdfTFJVX0dFTlxcbm1tL3Ztc2Nhbi5jLTgyNy0vKlxcbi0tXFxubW0vdm1zY2FuLmM9MTA0NT1zdGF0aWMgdW5zaWduZWQgaW50IHNocmlua19mb2xpb19saXN0KHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QsXFxuLS1cXG5tbS92bXNjYW4uYy0xMjc0LVxcdFxcdFxcdFxcdFxcdGdvdG8gYWN0aXZhdGVfbG9ja2VkO1xcbm1tL3Ztc2Nhbi5jOjEyNzU6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbm1tL3Ztc2Nhbi5jLTEyNzYtXFx0XFx0XFx0XFx0aWYgKG5yX3BhZ2VzIFxcdTAwM2U9IEhQQUdFX1BNRF9OUikge1xcbi0tXFxubW0vdm1zY2FuLmM9MjYwMz1zdGF0aWMgYm9vbCBjYW5fYWdlX2Fub25fcGFnZXMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbi0tXFxubW0vdm1zY2FuLmMtMjYxNC1cXG5tbS92bXNjYW4uYzoyNjE1OiNpZmRlZiBDT05GSUdfTFJVX0dFTlxcbm1tL3Ztc2Nhbi5jLTI2MTYtXFxubW0vdm1zY2FuLmM9MjYxNz1ERUZJTkVfU1RBVElDX0tFWV9GQUxTRShscnVfc3dpdGNoKTtcXG5tbS92bXNjYW4uYzoyNjE4OiNpZmRlZiBDT05GSUdfTFJVX0dFTl9FTkFCTEVEXFxubW0vdm1zY2FuLmMtMjYxOS1ERUZJTkVfU1RBVElDX0tFWV9BUlJBWV9UUlVFKGxydV9nZW5fY2FwcywgTlJfTFJVX0dFTl9DQVBTKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTI2Njc9c3RhdGljIHN0cnVjdCBscnV2ZWMgKmdldF9scnV2ZWMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgbmlkKVxcbi0tXFxubW0vdm1zY2FuLmMtMjY3MC1cXG5tbS92bXNjYW4uYzoyNjcxOiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS92bXNjYW4uYy0yNjcyLVxcdGlmIChtZW1jZykge1xcbi0tXFxubW0vdm1zY2FuLmM9Mjc5OT1zdGF0aWMgdm9pZCByZXNldF9ibG9vbV9maWx0ZXIoc3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKm1tX3N0YXRlLCB1bnNpZ25lZCBsb25nIHNlcSlcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI4MTgtXFxubW0vdm1zY2FuLmM6MjgxOTojaWZkZWYgQ09ORklHX0xSVV9HRU5fV0FMS1NfTU1VXFxubW0vdm1zY2FuLmMtMjgyMC1cXG5tbS92bXNjYW4uYz0yODIxPXN0YXRpYyBzdHJ1Y3QgbHJ1X2dlbl9tbV9saXN0ICpnZXRfbW1fbGlzdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuLS1cXG5tbS92bXNjYW4uYy0yODI3LVxcbm1tL3Ztc2Nhbi5jOjI4Mjg6I2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL3Ztc2Nhbi5jLTI4MjktXFx0aWYgKG1lbWNnKVxcbi0tXFxubW0vdm1zY2FuLmM9Mjg2MT12b2lkIGxydV9nZW5fYWRkX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbi0tXFxubW0vdm1zY2FuLmMtMjg2Ny1cXHRWTV9XQVJOX09OX09OQ0UoIWxpc3RfZW1wdHkoXFx1MDAyNm1tLVxcdTAwM2VscnVfZ2VuLmxpc3QpKTtcXG5tbS92bXNjYW4uYzoyODY4OiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS92bXNjYW4uYy0yODY5LVxcdFZNX1dBUk5fT05fT05DRShtbS1cXHUwMDNlbHJ1X2dlbi5tZW1jZyk7XFxuLS1cXG5tbS92bXNjYW4uYz0yODg4PXZvaWQgbHJ1X2dlbl9kZWxfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxuLS1cXG5tbS92bXNjYW4uYy0yODk2LVxcbm1tL3Ztc2Nhbi5jOjI4OTc6I2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL3Ztc2Nhbi5jLTI4OTgtXFx0bWVtY2cgPSBtbS1cXHUwMDNlbHJ1X2dlbi5tZW1jZztcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI5MjAtXFxubW0vdm1zY2FuLmM6MjkyMTojaWZkZWYgQ09ORklHX01FTUNHXFxubW0vdm1zY2FuLmMtMjkyMi1cXHRtZW1fY2dyb3VwX3B1dChtbS1cXHUwMDNlbHJ1X2dlbi5tZW1jZyk7XFxuLS1cXG5tbS92bXNjYW4uYy0yOTI2LVxcbm1tL3Ztc2Nhbi5jOjI5Mjc6I2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL3Ztc2Nhbi5jLTI5Mjgtdm9pZCBscnVfZ2VuX21pZ3JhdGVfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxuLS1cXG5tbS92bXNjYW4uYz00Mjk2PXN0YXRpYyB2b2lkIGxydV9nZW5fcm90YXRlX21lbWNnKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IG9wKVxcbi0tXFxubW0vdm1zY2FuLmMtNDM0MS1cXG5tbS92bXNjYW4uYzo0MzQyOiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS92bXNjYW4uYy00MzQzLVxcbi0tXFxubW0vdm1zY2FuLmM9NTUwMj1zdGF0aWMgaW50IGxydV9nZW5fc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxcbi0tXFxubW0vdm1zY2FuLmMtNTUxNS1cXG5tbS92bXNjYW4uYzo1NTE2OiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS92bXNjYW4uYy01NTE3LVxcdFxcdGlmIChtZW1jZylcXG4tLVxcbm1tL3Ztc2Nhbi5jPTU3Njg9dm9pZCBscnVfZ2VuX2luaXRfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTU3ODctXFxubW0vdm1zY2FuLmM6NTc4ODojaWZkZWYgQ09ORklHX01FTUNHXFxubW0vdm1zY2FuLmMtNTc4OS1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTY2NjY9dW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9wYWdlcyhzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0LCBpbnQgb3JkZXIsXFxuLS1cXG5tbS92bXNjYW4uYy02NzA4LVxcbm1tL3Ztc2Nhbi5jOjY3MDk6I2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL3Ztc2Nhbi5jLTY3MTAtXFxuLS1cXG5tbS92bXNjYW4uYz03NTM2PWJvb2wga3N3YXBkX3Rlc3RfaG9wZWxlc3MocGdfZGF0YV90ICpwZ2RhdClcXG4tLVxcbm1tL3Ztc2Nhbi5jLTc1NDAtXFxubW0vdm1zY2FuLmM6NzU0MTojaWZkZWYgQ09ORklHX0hJQkVSTkFUSU9OXFxubW0vdm1zY2FuLmMtNzU0Mi0vKlxcbi0tXFxubW0vdm1zY2FuLmM9NzYyMT1zdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSB2bXNjYW5fc3lzY3RsX3RhYmxlW10gPSB7XFxuLS1cXG5tbS92bXNjYW4uYy03NjMwLVxcdH0sXFxubW0vdm1zY2FuLmM6NzYzMTojaWZkZWYgQ09ORklHX05VTUFcXG5tbS92bXNjYW4uYy03NjMyLVxcdHtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTc2NTM9bW9kdWxlX2luaXQoa3N3YXBkX2luaXQpXFxubW0vdm1zY2FuLmMtNzY1NC1cXG5tbS92bXNjYW4uYzo3NjU1OiNpZmRlZiBDT05GSUdfTlVNQVxcbm1tL3Ztc2Nhbi5jLTc2NTYtLypcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMDc6MDI6MDEuMjcxNTI1NDA5WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU3MTc3ODc0NTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCBtZSBxdWlja2x5IHN5bnRoZXNpemUgdGhpcy5cblxuKipOYXZpZ2F0aW5nIE5VTUEtUmVsYXRlZCBDb25kaXRpb25hbCBDb21waWxhdGlvbioqXG5cbkFscmlnaHQsIEknbSBzY2FubmluZyB0aGlzIGNvZGUgYW5kIG15IGV5ZXMganVzdCBzbmFnZ2VkIG9uIGAjaWZkZWYgQ09ORklHX05VTUFgIGF0IGxpbmUgNzY1NS4gSG1tLCB0aGF0J3MgaW50ZXJlc3RpbmcuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCBpcyBhbHNvIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgdW5kZXIgdGhhdCBmbGFnLiBObyB0aW1lIHRvIHdhc3RlOyBJIG5lZWQgdG8gcXVpY2tseSB6ZXJvIGluIG9uIHRoZSBjb3JyZXNwb25kaW5nIGAjZW5kaWZgIHN0YXRlbWVudCBmb3IgYENPTkZJR19OVU1BYCBhdCBsaW5lIDc2NTUuIFRoYXQncyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgaWYgdGhpcyByZWNsYWltIGZlYXR1cmUgaXMgTlVNQS1kZXBlbmRlbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMzUxLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMDc6MDI6MDYuOTg5MzE2OTU0WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1Nzc1NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vdm1zY2FuLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzgyMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNzgyMDpcXHRcXHRcXHRyZXR1cm4gMDtcXG43ODIxOlxcdFxcbjc4MjI6XFx0XFx0cmV0ID0gX19ub2RlX3JlY2xhaW0ocGdkYXQsIG5yX3BhZ2VzLCBcXHUwMDI2c2MpO1xcbjc4MjM6XFx0XFx0Y2xlYXJfYml0X3VubG9jayhQR0RBVF9SRUNMQUlNX0xPQ0tFRCwgXFx1MDAyNnBnZGF0LVxcdTAwM2VmbGFncyk7XFxuNzgyNDpcXHRcXG43ODI1OlxcdFxcdGlmIChyZXQgXFx1MDAzZT0gbnJfcGFnZXMpXFxuNzgyNjpcXHRcXHRcXHRjb3VudF92bV9ldmVudChQR1NDQU5fWk9ORV9SRUNMQUlNX1NVQ0NFU1MpO1xcbjc4Mjc6XFx0XFx0ZWxzZVxcbjc4Mjg6XFx0XFx0XFx0Y291bnRfdm1fZXZlbnQoUEdTQ0FOX1pPTkVfUkVDTEFJTV9GQUlMRUQpO1xcbjc4Mjk6XFx0XFxuNzgzMDpcXHRcXHRyZXR1cm4gcmV0O1xcbjc4MzE6XFx0fVxcbjc4MzI6XFx0XFxuNzgzMzpcXHQjZWxzZVxcbjc4MzQ6XFx0XFxuNzgzNTpcXHRzdGF0aWMgdW5zaWduZWQgbG9uZyBfX25vZGVfcmVjbGFpbShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LFxcbjc4MzY6XFx0XFx0XFx0XFx0XFx0ICAgIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXFxuNzgzNzpcXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuNzgzODpcXHR7XFxuNzgzOTpcXHRcXHRyZXR1cm4gMDtcXG43ODQwOlxcdH1cXG43ODQxOlxcdFxcbjc4NDI6XFx0I2VuZGlmXFxuNzg0MzpcXHRcXG43ODQ0OlxcdGVudW0ge1xcbjc4NDU6XFx0XFx0TUVNT1JZX1JFQ0xBSU1fU1dBUFBJTkVTUyA9IDAsXFxuNzg0NjpcXHRcXHRNRU1PUllfUkVDTEFJTV9TV0FQUElORVNTX01BWCxcXG43ODQ3OlxcdFxcdE1FTU9SWV9SRUNMQUlNX05VTEwsXFxuNzg0ODpcXHR9O1xcbjc4NDk6XFx0c3RhdGljIGNvbnN0IG1hdGNoX3RhYmxlX3QgdG9rZW5zID0ge1xcbjc4NTA6XFx0XFx0eyBNRU1PUllfUkVDTEFJTV9TV0FQUElORVNTLCBcXFwic3dhcHBpbmVzcz0lZFxcXCJ9LFxcbjc4NTE6XFx0XFx0eyBNRU1PUllfUkVDTEFJTV9TV0FQUElORVNTX01BWCwgXFxcInN3YXBwaW5lc3M9bWF4XFxcIn0sXFxuNzg1MjpcXHRcXHR7IE1FTU9SWV9SRUNMQUlNX05VTEwsIE5VTEwgfSxcXG43ODUzOlxcdH07XFxuNzg1NDpcXHRcXG43ODU1OlxcdGludCB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltKGNoYXIgKmJ1ZixcXG43ODU2OlxcdFxcdFxcdFxcdCAgIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgcGdfZGF0YV90ICpwZ2RhdClcXG43ODU3OlxcdHtcXG43ODU4OlxcdFxcdHVuc2lnbmVkIGludCBucl9yZXRyaWVzID0gTUFYX1JFQ0xBSU1fUkVUUklFUztcXG43ODU5OlxcdFxcdHVuc2lnbmVkIGxvbmcgbnJfdG9fcmVjbGFpbSwgbnJfcmVjbGFpbWVkID0gMDtcXG43ODYwOlxcdFxcdGludCBzd2FwcGluZXNzID0gLTE7XFxuNzg2MTpcXHRcXHRjaGFyICpvbGRfYnVmLCAqc3RhcnQ7XFxuNzg2MjpcXHRcXHRzdWJzdHJpbmdfdCBhcmdzW01BWF9PUFRfQVJHU107XFxuNzg2MzpcXHRcXHRnZnBfdCBnZnBfbWFzayA9IEdGUF9LRVJORUw7XFxuNzg2NDpcXHRcXG43ODY1OlxcdFxcdGlmICghYnVmIHx8ICghbWVtY2cgXFx1MDAyNlxcdTAwMjYgIXBnZGF0KSB8fCAobWVtY2cgXFx1MDAyNlxcdTAwMjYgcGdkYXQpKVxcbjc4NjY6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuNzg2NzpcXHRcXG43ODY4OlxcdFxcdGJ1ZiA9IHN0cnN0cmlwKGJ1Zik7XFxuNzg2OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMDc6MDI6MDYuOTk0ODk4OTUzWiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIyNDE5Nzc3MjQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlByb2JpbmcgdGhlIEltcGxpY2F0aW9ucyBvZiBUaGlzIFByb2FjdGl2ZSBSZWNsYWltIFBhdGNoKipcblxuT2theSwgc28gYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gIGlzIGFsd2F5cyBjb21waWxlZCwgd2hpY2ggaXMgZ29vZC4gQW5kIGByZWNsYWltX3N0b3JlYCBpcyB1bmRlciBzeXNmcyB3aXRoIGBDT05GSUdfTlVNQWAsIHNvIHRoYXQncyB0aGUgZW50cnkgcG9pbnQuICBJZiBgQ09ORklHX05VTUFgIGlzIGVuYWJsZWQsIHRoZW4gYHJlY2xhaW1fc3RvcmVgIGNhbGxzIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYC4gQW5kIGl0J3Mgc3RpbGwgYXZhaWxhYmxlIGlmIGBDT05GSUdfTUVNQ0dgIGlzIGRpc2FibGVkLCB1c2luZyBzeXNmcy4gIEV4Y2VsbGVudCwgdGhlIHN3YXBwaW5lc3MgY29udHJvbCBzZWVtcyBsaWtlIGl0J3MgYmVoYXZpbmcgbm93IGJlY2F1c2UgYHNjX3N3YXBwaW5lc3NgIHVuY29uZGl0aW9uYWxseSB1c2VzIHRoZSBgc2MtXHUwMDNlcHJvYWN0aXZlX3N3YXBwaW5lc3NgLlxuXG5JIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgaXQgc3RpbGwgZnVuY3Rpb25zIHdpdGhvdXQgYENPTkZJR19NRU1DR2AgZW5hYmxlZC4gTGV0IG1lIHNlZS4uLiBpbiBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAsIHRoZSBjb2RlIHByb3Blcmx5IGhhbmRsZXMgdGhlIGBtZW1jZ2AgY2FzZSwgYnV0IGlmIGl0IGlzIG5vdCBlbmFibGVkIGl0IGNvbmZpZ3VyZXMgYSBgc2Nhbl9jb250cm9sYCBgc3RydWN0YCB0aGF0IGNhbiBwZXJmb3JtIGEgcHJvYWN0aXZlIHJlY2xhaW0uIEFuZCBsb29raW5nIGF0IHRoZSBub24tYG1lbWNnYCBjYXNlLCBpdCdzIGNhbGxpbmcgYF9fbm9kZV9yZWNsYWltYC4gT2theSwgSWYgYENPTkZJR19OVU1BYCBpcyBkaXNhYmxlZCwgYF9fbm9kZV9yZWNsYWltYCBqdXN0IHJldHVybnMgMCwgYW5kIGlmIGBDT05GSUdfTUVNQ0dgIGlzIGRpc2FibGVkLCBpdCB3b3Jrcy4gU28sIHllcywgdGhhdCdzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaWYgYENPTkZJR19NRU1DR2AgaXMgZGlzYWJsZWQgdGhyb3VnaCBzeXNmcyFcblxuV2FpdCwgYW0gSSBqdW1waW5nIHRvIGNvbmNsdXNpb25zPyBMZXQgbWUgZG91YmxlLWNoZWNrIHRoZSBgc2Nfc3dhcHBpbmVzc2AgY29kZSBiZWZvcmUgYW5kIGFmdGVyLiBCZWZvcmUsIGlmIGBDT05GSUdfTUVNQ0dgIHdhcyBkaXNhYmxlZCwgaXQganVzdCByZXR1cm5lZCBgdm1fc3dhcHBpbmVzc2AuICBOb3csIGl0IGNvcnJlY3RseSBjaGVja3MgYHNjLVx1MDAzZXByb2FjdGl2ZSBcdTAwMjZcdTAwMjYgc2MtXHUwMDNlcHJvYWN0aXZlX3N3YXBwaW5lc3NgIGV2ZW4gaWYgYENPTkZJR19NRU1DR2AgaXMgZGlzYWJsZWQuICBTbywgeWVzLCBpdCdzIGEgZnVuY3Rpb25hbCBjaGFuZ2UuXG5cbkJ1dCB3YWl0LCBpcyBgQ09ORklHX01FTUNHYCBkaXNhYmxlZCBhIGNvbW1vbiBjb25maWd1cmF0aW9uPyBVc3VhbGx5IGl0J3MgZW5hYmxlZCB3aXRoIHN5emthbGxlci5cblxuV2hhdCBpZiBgQ09ORklHX01FTUNHYCAqaXMqIGVuYWJsZWQ/IERvZXMgYW55dGhpbmcgYWN0dWFsbHkgY2hhbmdlPyBMZXQncyBjaGVjayBgbWVtX2Nncm91cF9zd2FwcGluZXNzYC4gIEJlZm9yZSwgaXQgaGFkIGEgYnJhbmNoIGZvciBjZ3JvdXAgdjIsIHRoZW4gZm9yIHRoZSByb290IG9yIGRpc2FibGVkIG1lbWNnLCByZXR1cm5pbmcgYHZtX3N3YXBwaW5lc3NgLCBhbmQgdGhlbiBmaW5hbGx5IGdldHRpbmcgdGhlIHZhbHVlIGZyb20gdGhlIG1lbWNnLiBBZnRlciwgaXQgY29uZGl0aW9uYWxseSByZXR1cm5zIHRoZSBzYW1lIGxvZ2ljIGRlcGVuZGluZyBpZiBgQ09ORklHX01FTUNHX1YxYCBpcyBlbmFibGVkIG9yIG5vdC4gIElmIGBDT05GSUdfTUVNQ0dfVjFgIGlzICpkaXNhYmxlZCosIGBjZ3JvdXBfc3Vic3lzX29uX2RmbGAgd291bGQgYmUgdHJ1ZSBhbnl3YXkuIFRodXMsIHRoZSBvbGQgY29kZSB3b3VsZCByZXR1cm4gYHZtX3N3YXBwaW5lc3NgLiBUaGUgbmV3IGNvZGUgYWxzbyByZXR1cm5zIGB2bV9zd2FwcGluZXNzYC4gU28gdGhlcmUgaXMgTk8gZnVuY3Rpb25hbCBjaGFuZ2UgaWYgYENPTkZJR19NRU1DR2AgaXMgZW5hYmxlZCwgcmVnYXJkbGVzcyBvZiBgQ09ORklHX01FTUNHX1YxYC5cblxuV2hhdCBpZiBgQ09ORklHX01FTUNHX1YxYCAqaXMqIGVuYWJsZWQ/IFRoZSBsb2dpYyBpbiBgbWVtX2Nncm91cF9zd2FwcGluZXNzYCBiZWZvcmUgYW5kIGFmdGVyIGlzIGVmZmVjdGl2ZWx5IHRoZSBzYW1lLiBIbW0uXG5cbk9rYXksIGxldCdzIGxvb2sgYXQgYG1lbV9jZ3JvdXBfY3NzX2FsbG9jYC4gTm93LCBgbWVtY2ctXHUwMDNlc3dhcHBpbmVzc2AgaXMgKm9ubHkqIGluaXRpYWxpemVkIGlmIGBDT05GSUdfTUVNQ0dfVjFgIGlzIGVuYWJsZWQuICBUaGF0J3MgYmVjYXVzZSBgc3dhcHBpbmVzc2AgaXMgdW5kZXIgdGhlIGBDT05GSUdfTUVNQ0dfVjFgIGd1YXJkIGluIHRoZSBgbWVtX2Nncm91cGAgc3RydWN0IG5vdy4gVGhpcyBpcyBhICptZW1vcnkgc2F2aW5nKiBvcHRpbWl6YXRpb24gZm9yIHRoZSBgQ09ORklHX01FTUNHX1YxYCBkaXNhYmxlZCBjYXNlLCBpdCBkb2Vzbid0IGFwcGVhciB0byBiZSBhIGZ1bmN0aW9uYWwgY2hhbmdlLlxuXG5XYWl0LCBhcmUgdGhlcmUgYW55IG90aGVyIGZ1bmN0aW9uYWwgY2hhbmdlcz8gV2hhdCBhYm91dCB0aGUgY2FzZSB3aGVyZSBtZW1jZyBpcyBOVUxMIGluIGBzY19zd2FwcGluZXNzYD8gSW4gYHNjX3N3YXBwaW5lc3NgIHRoZSBmdW5jdGlvbiBgbWVtX2Nncm91cF9pc19yb290YCBpcyBjYWxsZWQgb24gdGhlIGFyZ3VtZW50IGBtZW1jZ2AsIGlmIGl0IGlzIE5VTEwsIHRoaXMgbWlnaHQgY3Jhc2ghXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMzAzLCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEzNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDA3OjAyOjI5LjQxNDY3OTg4NVoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg3MzgzOTQ4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF9pc19yb290XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTUxMz1zdGF0aWMgaW5saW5lIGJvb2wgUGFnZU1lbWNnS21lbShzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTUxNy1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDo1MTg6c3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfaXNfcm9vdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtNTE5LXtcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTEwNjQ9c3RhdGljIGlubGluZSBib29sIFBhZ2VNZW1jZ0ttZW0oc3RydWN0IHBhZ2UgKnBhZ2UpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xMDY4LVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjEwNjk6c3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfaXNfcm9vdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTA3MC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDA3OjAyOjM0LjI4ODUyNzE0NFoiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTYyOTU5MjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBwcmVzZW50ZWQgYXMgaWYgaXQgd2VyZSBteSBvd24gaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkRpdmluZyBpbnRvIGBtZW1fY2dyb3VwX2lzX3Jvb3RgKipcblxuQWxyaWdodCwgdGltZSB0byBkaWcgaW50byB0aGlzIGBtZW1fY2dyb3VwX2lzX3Jvb3RgIGZ1bmN0aW9uLiBUaGUgbmFtZSBpbW1lZGlhdGVseSBzdWdnZXN0cyB3ZSdyZSBkZWFsaW5nIHdpdGggbWVtb3J5IGNncm91cHMsIHNwZWNpZmljYWxseSB0aGUgcm9vdCBjZ3JvdXAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBxdWlja2x5IGFzc2VzcyBpdHMgcHVycG9zZSBpbiB0aGUgYnJvYWRlciBjb250ZXh0LiBJcyBpdCBhIHNpbXBsZSBjaGVjaz8gRG9lcyBpdCBwZXJmb3JtIGFueSBzaWRlIGVmZmVjdHM/IFdoYXQgYXJlIHRoZSBwb3RlbnRpYWwgaW1wbGljYXRpb25zIG9mIGEgdHJ1ZS9mYWxzZSByZXR1cm4gdmFsdWU/IEdpdmVuIG15IGV4cGVyaWVuY2Ugd2l0aCB0aGUga2VybmVsJ3MgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtcywgSSdtIGFscmVhZHkgYW50aWNpcGF0aW5nIHRoYXQgdGhpcyBwcm9iYWJseSByZWxhdGVzIHRvIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgcmVzb3VyY2UgYWNjb3VudGluZyBhbmQgbGltaXRzLiBJJ20ga2VlbiB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGZ1bmN0aW9uIGRpZmZlcmVudGlhdGVzIGJldHdlZW4gdGhlIFwidG9wLWxldmVsXCIgb3IgXCJzeXN0ZW0td2lkZVwiIG1lbW9yeSBjZ3JvdXAgYW5kIG90aGVyIG5lc3RlZCBvbmVzLiBQZXJoYXBzIGl0J3MgYSBmdW5kYW1lbnRhbCB0ZXN0IHVzZWQgaW4gbWFueSBjcml0aWNhbCBtZW1vcnkgbWFuYWdlbWVudCBwYXRocy4gVW5kZXJzdGFuZGluZyBpdHMgdXNhZ2Ugd2lsbCBnaXZlIGluc2lnaHRzIGludG8gdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLiBMZXQncyBzZWUgaG93IHRoZSBpbXBsZW1lbnRhdGlvbiBjbGFyaWZpZXMgdGhlc2UgcXVlc3Rpb25zLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGhvdyBpdCdzIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBvdGhlciBjZ3JvdXAgZnVuY3Rpb25zIGFuZCBzdHJ1Y3R1cmVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDQ4NSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDA3OjAyOjM4LjQ1MTQ4ODkwNFoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDYxODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcIixcbiAgXCJGaXJzdExpbmVcIjogNTE4LFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTE4OlxcdHN0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX2lzX3Jvb3Qoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbiA1MTk6XFx0e1xcbiA1MjA6XFx0XFx0cmV0dXJuIChtZW1jZyA9PSByb290X21lbV9jZ3JvdXApO1xcbiA1MjE6XFx0fVxcbiA1MjI6XFx0XFxuIDUyMzpcXHRzdGF0aWMgaW5saW5lIGJvb2wgb2JqX2Nncm91cF9pc19yb290KGNvbnN0IHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZylcXG4gNTI0OlxcdHtcXG4gNTI1OlxcdFxcdHJldHVybiBvYmpjZy1cXHUwMDNlaXNfcm9vdDtcXG4gNTI2OlxcdH1cXG4gNTI3OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQwNzowMjozOC40NTE2MzczNDRaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQwNjY4Nzk2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQb3RlbnRpYWwgTlVMTCBQb2ludGVyIERlcmVmZXJlbmNlKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGNvZGUsIHNwZWNpZmljYWxseSBhcm91bmQgbWVtb3J5IGNncm91cHMgYW5kIHN3YXBwaW5lc3MuIEkgc2VlIGEgY29uZGl0aW9uIHdoZXJlIGlmIGBtZW1jZ2AgaXMgTlVMTCwgdGhlbiBgbWVtY2cgPT0gcm9vdF9tZW1fY2dyb3VwYCBpcyBkZWZpbml0ZWx5IGZhbHNlLCBiZWNhdXNlIGByb290X21lbV9jZ3JvdXBgIGlzIGEgcmVhbCBvYmplY3QuIEJ1dCB0aGVuLCAqd2FpdCBhIG1pbnV0ZSosIGlmIGBtZW1jZ2AgKmlzKiBOVUxMLCB0aGUgY29kZSBjYWxscyBgbWVtX2Nncm91cF9zd2FwcGluZXNzYCwgYW5kIHRoYXQgZnVuY3Rpb24gdHJpZXMgdG8gYWNjZXNzIGBtZW1jZy1cdTAwM2Vzd2FwcGluZXNzYC4gVGhhdCdzIGEgY2xhc3NpYyBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UhIFRoaXMgY291bGQgYmUgYSBzZXJpb3VzIGJ1Zy5cblxuSSBuZWVkIHRvIGNvbmZpcm0gaWYgYG1lbWNnYCBjYW4gKmFjdHVhbGx5KiBiZSBOVUxMIGluIHRoZSBjb250ZXh0IG9mIGBzY19zd2FwcGluZXNzYC4gVGhpcyBzZWVtcyBsaWtlIGEgcHJldHR5IGltcG9ydGFudCBjaGVjayB0byBtYWtlIHN1cmUgaXQgZG9lc24ndCBjYXVzZSBhIHN5c3RlbSBjcmFzaC4gVGhlIG5leHQgc3RlcCBpcyBjbGVhci4gTGV0IG1lIHRyYWNlIHRoZSBjYWxsZXJzIG9mIGBzY19zd2FwcGluZXNzYCBhbmQgc2VlIGhvdyBgbWVtY2dgIGlzIGJlaW5nIHBhc3NlZCBpbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHBvdGVudGlhbCBjYWxsIHBhdGhzIGFuZCBtYWtlIHN1cmUgdGhlIGBtZW1jZ2AgcGFyYW1ldGVyIGlzIGFsd2F5cyB2YWxpZCBvciBwcm9wZXJseSBoYW5kbGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDkzMCwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDA3OjAyOjQyLjg1ODMyODcxNloiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzk3MjU3MjAyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzY19zd2FwcGluZXNzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTc1PXN0cnVjdCBzY2FuX2NvbnRyb2wge1xcbi0tXFxubW0vdm1zY2FuLmMtOTYtXFxubW0vdm1zY2FuLmM6OTc6XFx0LyogU3dhcHBpbmVzcyB2YWx1ZSBmb3IgcHJvYWN0aXZlIHJlY2xhaW0uIEFsd2F5cyB1c2Ugc2Nfc3dhcHBpbmVzcygpISAqL1xcbm1tL3Ztc2Nhbi5jLTk4LVxcdGludCAqcHJvYWN0aXZlX3N3YXBwaW5lc3M7XFxuLS1cXG5tbS92bXNjYW4uYz0yMDA9aW50IHZtX3N3YXBwaW5lc3MgPSA2MDtcXG5tbS92bXNjYW4uYy0yMDEtXFxubW0vdm1zY2FuLmM6MjAyOnN0YXRpYyBpbnQgc2Nfc3dhcHBpbmVzcyhzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYywgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbm1tL3Ztc2Nhbi5jLTIwMy17XFxuLS1cXG5tbS92bXNjYW4uYz0yNDc5PXN0YXRpYyB2b2lkIGdldF9zY2FuX2NvdW50KHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsXFxuLS1cXG5tbS92bXNjYW4uYy0yNDgzLVxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGxydXZlY19tZW1jZyhscnV2ZWMpO1xcbm1tL3Ztc2Nhbi5jOjI0ODQ6XFx0aW50IHN3YXBwaW5lc3MgPSBzY19zd2FwcGluZXNzKHNjLCBtZW1jZyk7XFxubW0vdm1zY2FuLmMtMjQ4NS1cXHR1NjQgZnJhY3Rpb25bQU5PTl9BTkRfRklMRV07XFxuLS1cXG5tbS92bXNjYW4uYz0yNjg3PXN0YXRpYyBpbnQgZ2V0X3N3YXBwaW5lc3Moc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI2OTgtXFxubW0vdm1zY2FuLmM6MjY5OTpcXHRyZXR1cm4gc2Nfc3dhcHBpbmVzcyhzYywgbWVtY2cpO1xcbm1tL3Ztc2Nhbi5jLTI3MDAtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQwNzowMjo0Ni44MzA5MDYyOTJaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE4NzY2NDA3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqQW5hbHl6aW5nIFN5c3RlbSBQZXJmb3JtYW5jZSBNZXRyaWNzKipcblxuQWxyaWdodCwgYmVmb3JlIGRpdmluZyB0b28gZGVlcCBpbnRvIHRoaXMsIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhpbmdzLiBMZXQncyBzZWUuLi4gSSB0aGluayBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgd291bGQgYmUgdG8gcHVsbCBgZ2V0X3N3YXBwaW5lc3NgIGFuZCBgZ2V0X3NjYW5fY291bnRgLiBUaGVzZSBhcmUga2V5IGluZGljYXRvcnMgZm9yIGhvdyBhZ2dyZXNzaXZlbHkgdGhlIHN5c3RlbSBpcyB1dGlsaXppbmcgc3dhcCBzcGFjZSBhbmQgaG93IGZyZXF1ZW50bHkgaXQncyBzY2FubmluZyBtZW1vcnkgcGFnZXMsIHJlc3BlY3RpdmVseS4gVW5kZXJzdGFuZGluZyB0aGVzZSB0d28gdmFyaWFibGVzIGlzIG9mdGVuIHRoZSBqdW1waW5nIG9mZiBwb2ludCBmb3IgZGlhZ25vc3RpY3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1Njk3LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMDc6MDI6NTAuMDE4NTczNzQ5WiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1NzgxNzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vdm1zY2FuLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjQ3OSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjQ3OTpcXHRzdGF0aWMgdm9pZCBnZXRfc2Nhbl9jb3VudChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLFxcbjI0ODA6XFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgbG9uZyAqbnIpXFxuMjQ4MTpcXHR7XFxuMjQ4MjpcXHRcXHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gbHJ1dmVjX3BnZGF0KGxydXZlYyk7XFxuMjQ4MzpcXHRcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBscnV2ZWNfbWVtY2cobHJ1dmVjKTtcXG4yNDg0OlxcdFxcdGludCBzd2FwcGluZXNzID0gc2Nfc3dhcHBpbmVzcyhzYywgbWVtY2cpO1xcbjI0ODU6XFx0XFx0dTY0IGZyYWN0aW9uW0FOT05fQU5EX0ZJTEVdO1xcbjI0ODY6XFx0XFx0dTY0IGRlbm9taW5hdG9yID0gMDtcXHQvKiBnY2MgKi9cXG4yNDg3OlxcdFxcdGVudW0gc2Nhbl9iYWxhbmNlIHNjYW5fYmFsYW5jZTtcXG4yNDg4OlxcdFxcdGVudW0gbHJ1X2xpc3QgbHJ1O1xcbjI0ODk6XFx0XFxuMjQ5MDpcXHRcXHQvKiBQcm9hY3RpdmUgcmVjbGFpbSBpbml0aWF0ZWQgYnkgdXNlcnNwYWNlIGZvciBhbm9ueW1vdXMgbWVtb3J5IG9ubHkgKi9cXG4yNDkxOlxcdFxcdGlmIChzd2FwcGluZXNzID09IFNXQVBQSU5FU1NfQU5PTl9PTkxZKSB7XFxuMjQ5MjpcXHRcXHRcXHRXQVJOX09OX09OQ0UoIXNjLVxcdTAwM2Vwcm9hY3RpdmUpO1xcbjI0OTM6XFx0XFx0XFx0aWYgKCFjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzKG1lbWNnLCBwZ2RhdC1cXHUwMDNlbm9kZV9pZCwgc2MpKSB7XFxuMjQ5NDpcXHRcXHRcXHRcXHRtZW1zZXQobnIsIDAsIHNpemVvZigqbnIpICogTlJfTFJVX0xJU1RTKTtcXG4yNDk1OlxcdFxcdFxcdFxcdHJldHVybjtcXG4yNDk2OlxcdFxcdFxcdH1cXG4yNDk3OlxcdFxcdFxcdHNjYW5fYmFsYW5jZSA9IFNDQU5fQU5PTjtcXG4yNDk4OlxcdFxcdFxcdGdvdG8gb3V0O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQwNzowMjo1MC4wMjExNTg4WiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUwODQ1MDE4NzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQncyBwZXJzcGVjdGl2ZTpcblxuKipMUlVWZWMgTWVtb3J5IENHIGFuZCB0aGUgTlVMTCBQb2ludGVyIFF1ZXN0aW9uKipcblxuQWxyaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgbHJ1dmVjX21lbWNnKGxydXZlYylgIGZ1bmN0aW9uIGNhbGwuLi4gYW5kIG15IG1pbmQgaW1tZWRpYXRlbHkganVtcHMgdG8gYSBwb3RlbnRpYWwgZWRnZSBjYXNlLiBDYW4gdGhpcyB0aGluZyBhY3R1YWxseSByZXR1cm4gYSBOVUxMIHBvaW50ZXI/IFRoZSBvYnZpb3VzIGltcGxpY2F0aW9ucyBhcmUgY2FzY2FkaW5nLiBJZiBpdCAqY2FuKiByZXR1cm4gTlVMTCwgdGhlbiBldmVyeSBzaW5nbGUgY2FsbCB0byBpdCBuZWVkcyBhIE5VTEwgY2hlY2ssIG90aGVyd2lzZSwgYm9vbSwgd2UncmUgbG9va2luZyBhdCBhIHNlcmlvdXMga2VybmVsIHBhbmljIG9yIGF0IGJlc3QgYSBuYXN0eSBidWcuIFdlIG5lZWQgdG8gYmUgYWJsZSB0byBjYXRjaCB0aGUgZXJyb3IgY29uZGl0aW9uIVxuXG5XaGF0IGFyZSB0aGUgc2NlbmFyaW9zPyBEb2VzIHRoZSBkb2N1bWVudGF0aW9uIGNsYXJpZnkgdGhpcyBiZWhhdmlvcj8gSXMgaXQgZGVwZW5kZW50IG9uIGEgc3BlY2lmaWMgaGFyZHdhcmUgY29uZmlndXJhdGlvbj8gRG9lcyBpdCBwZXJ0YWluIHRvIG1lbW9yeSBtYW5hZ2VtZW50IHpvbmVzIG9yIHRoZWlyIGludGVyYWN0aW9ucyB3aXRoIHRoZSBjYWNoZT8gQXJlIHdlIGRlYWxpbmcgd2l0aCBzb21lIHNvcnQgb2YgcmFjZSBjb25kaXRpb24gb3IgY29uY3VycmVudCBhY2Nlc3MgaXNzdWU/IEkgbmVlZCB0byBkaWcgaW50byB0aGUgY29kZSwgYW5kIG1heWJlIHRoZSBhY2NvbXBhbnlpbmcgY29tbWVudHMgYW5kIGRvY3VtZW50YXRpb24sIHRvIGNvbmZpcm0gd2hhdCB0aGUgcG9zc2libGUgcmV0dXJuIHZhbHVlcyBhbmQgY29ycmVzcG9uZGluZyBjYXNlcyBhcmUuIE1vcmUgaW1wb3J0YW50bHksIHdoYXQgaGFwcGVucyB1cHN0cmVhbSB3aXRoIHRoaXMgTlVMTCBwb2ludGVyIGlmIHdlIGRvbid0IGNhdGNoIGl0PyFcblxuXG4iLCJJbnB1dFRva2VucyI6MjYyNDYsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDA3OjAyOjU1LjEwNTY2NTYyMloiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTI2MTU3NzM1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwIFxcXFwqbHJ1dmVjX21lbWNnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTgxOD1zdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2Zyb21fc2VxKHN0cnVjdCBzZXFfZmlsZSAqbSlcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTgyMi1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDo4MjM6c3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqbHJ1dmVjX21lbWNnKHN0cnVjdCBscnV2ZWMgKmxydXZlYylcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC04MjQte1xcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTI5Mz1zdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2Zyb21fc2VxKHN0cnVjdCBzZXFfZmlsZSAqbSlcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTEyOTctXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MTI5ODpzdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpscnV2ZWNfbWVtY2coc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTEyOTkte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQwNzowMzowMC4zNjcyNTAzN1oiLCJTZXEiOjQzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODMwMjIzMTM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlIHdlIGdvLi4uXG5cbioqRGl2aW5nIGludG8gYGxydXZlY19tZW1jZ2AqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gVGhlIGZpcnN0IHRoaW5nIEknbSBnb2luZyB0byBkbyBpcyB0YWtlIGEgbG9vayBhdCBgbHJ1dmVjX21lbWNnYC4gSSBhbHJlYWR5IGhhdmUgYSBwcmV0dHkgc29saWQgZ3Jhc3Agb24gbWVtb3J5IG1hbmFnZW1lbnQgaW4gdGhlIExpbnV4IGtlcm5lbCwgZXNwZWNpYWxseSB3aXRoIHJlc3BlY3QgdG8gY29udHJvbCBncm91cHMuIE15IGV4cGVydGlzZSBhbGxvd3MgbWUgdG8gcmVhZCB0aHJvdWdoIHRoZSBkb2N1bWVudGF0aW9uIGFuZCBqdW1wIHJpZ2h0IGludG8gdGhlIGNvZGUgdG8gZGlzY2VybiBob3cgaXQgaW1wbGVtZW50cyBtZW1vcnkgY29udHJvbCBncm91cCBmdW5jdGlvbmFsaXR5LiBJIGV4cGVjdCB0byBzZWUgdGhlIGludGVycGxheSBiZXR3ZWVuIHRoZSBMUlUgKExlYXN0IFJlY2VudGx5IFVzZWQpIGxpc3QgYW5kIHRoZSBtZW1vcnkgY29udHJvbCBncm91cCAobWVtY2cpIG1lY2hhbmlzbXMsIGJ1dCBJIG5lZWQgdG8gc2VlIHRoZSBzcGVjaWZpY3MuIEknbSBrZWVuIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgY29kZSBoYW5kbGVzIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoZSBnbG9iYWwgcGFnZSByZWNsYWltIHByb2Nlc3MgYW5kIHRoZSBwZXItbWVtY2cgYWNjb3VudGluZy4gTXkgZm9jdXMgd2lsbCBiZSBvbiB0aGUgZGF0YSBzdHJ1Y3R1cmVzLCB0aGUgYWxnb3JpdGhtcywgYW5kIHRoZSBsb2NraW5nIGludm9sdmVkLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucyBhbmQgcG90ZW50aWFsIGNvbnRlbnRpb24gcG9pbnRzLCB3aXRoIHBhcnRpY3VsYXIgYXR0ZW50aW9uIHRvIGhvdyB0aGlzIHBpZWNlIGZpdHMgaW50byB0aGUgbGFyZ2VyIGFyY2hpdGVjdHVyZSBvZiB0aGUga2VybmVsJ3MgbWVtb3J5IG1hbmFnZW1lbnQgc3lzdGVtLiBLbm93aW5nIHRoaXMgd2lsbCBoZWxwIG1lIHdoZW4gSSB0cm91Ymxlc2hvb3Qgb3Igb3B0aW1pemUgbWVtb3J5IG1hbmFnZW1lbnQgaW4gYSBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2NzUwLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMDc6MDM6MDQuMTk3NDc2MjU5WiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3Mjc4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFwiLFxuICBcIkZpcnN0TGluZVwiOiA4MjMsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4MjM6XFx0c3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqbHJ1dmVjX21lbWNnKHN0cnVjdCBscnV2ZWMgKmxydXZlYylcXG4gODI0OlxcdHtcXG4gODI1OlxcdFxcdHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICptejtcXG4gODI2OlxcdFxcbiA4Mjc6XFx0XFx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcXG4gODI4OlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiA4Mjk6XFx0XFxuIDgzMDpcXHRcXHRteiA9IGNvbnRhaW5lcl9vZihscnV2ZWMsIHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlLCBscnV2ZWMpO1xcbiA4MzE6XFx0XFx0cmV0dXJuIG16LVxcdTAwM2VtZW1jZztcXG4gODMyOlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMDc6MDM6MDQuMTk3NjUxMDU5WiIsIlNlcSI6NDUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk0MzEzODY0MDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFN3YXBwaW5lc3MgYW5kIE1lbW9yeSBDZ3JvdXAgSW50ZXJhY3Rpb25zKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGNvZGUsIHNwZWNpZmljYWxseSBob3cgc3dhcHBpbmVzcyBpcyBoYW5kbGVkIGluIHJlbGF0aW9uIHRvIG1lbW9yeSBjZ3JvdXBzLiBUaGUgY29yZSBvZiBteSBjb25jZXJuIGhlcmUgaXMgcG90ZW50aWFsIG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZXMuIEkgc2VlIHRoYXQgaWYgYG1lbV9jZ3JvdXBfZGlzYWJsZWQoKWAgaXMgdHJ1ZSwgYGxydXZlY19tZW1jZ2AgcmV0dXJucyBOVUxMLiBUaGlzIG1ha2VzIHNlbnNlIOKAkyB0aGUgbWVtb3J5IGNncm91cCBmdW5jdGlvbmFsaXR5IGlzIGRpc2FibGVkLCBzbyB0aGVyZSdzIG5vIGFzc29jaWF0ZWQgY2dyb3VwLiBDb25zZXF1ZW50bHksIGBzY19zd2FwcGluZXNzYCB0aGVuIGNhbGxzIGBtZW1fY2dyb3VwX3N3YXBwaW5lc3NgIHdpdGggTlVMTC5cblxuTm93LCBsZXQncyBsb29rIGF0IGBtZW1fY2dyb3VwX3N3YXBwaW5lc3NgLiBUaGUgY29kZSBoYXMgYSBjaGVjazpcblxuYGBgY1xuc3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF9zd2FwcGluZXNzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbntcbiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcblx0aWYgKCFjZ3JvdXBfc3Vic3lzX29uX2RmbChtZW1vcnlfY2dycF9zdWJzeXMpIFx1MDAyNlx1MDAyNlxuXHQgICAgIW1lbV9jZ3JvdXBfZGlzYWJsZWQoKSBcdTAwMjZcdTAwMjYgIW1lbV9jZ3JvdXBfaXNfcm9vdChtZW1jZykpXG5cdFx0cmV0dXJuIG1lbWNnLVx1MDAzZXN3YXBwaW5lc3M7XG4jZW5kaWZcblx0cmV0dXJuIFJFQURfT05DRSh2bV9zd2FwcGluZXNzKTtcbn1cbmBgYFxuXG5FeGNlbGxlbnQhIElmIGBtZW1fY2dyb3VwX2Rpc2FibGVkKClgIGlzIHRydWUsIHRoZSBgIW1lbV9jZ3JvdXBfZGlzYWJsZWQoKWAgY29uZGl0aW9uIGlzIGZhbHNlLiBUaGUgc2hvcnQtY2lyY3VpdGluZyBtZWFucyBpdCBhdm9pZHMgZGVyZWZlcmVuY2luZyBgbWVtY2dgIGFsdG9nZXRoZXIgYW5kIHNhZmVseSByZXR1cm5zIHRoZSBnbG9iYWwgYHZtX3N3YXBwaW5lc3NgIHZhbHVlLiBTbyBmYXIsIHNvIGdvb2QuIE5vIG51bGwgZGVyZWZlcmVuY2UgcmlzayBpZiB0aGUgZmVhdHVyZSBpcyBkaXNhYmxlZC5cblxuTXkgbmV4dCBjb25jZXJuIGlzIHdoYXQgaGFwcGVucyBpZiBgbWVtX2Nncm91cF9kaXNhYmxlZCgpYCBpcyBmYWxzZSwgYnV0IGBtZW1jZ2AgaXMgTlVMTC4gQ2FuIGBscnV2ZWNfbWVtY2dgIHJldHVybiBOVUxMIGV2ZW4gaWYgdGhlIGZlYXR1cmUgaXNuJ3QgZGlzYWJsZWQ/IExldCdzIGNoZWNrOlxuXG5gYGBjXG5cdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkpXG5cdFx0cmV0dXJuIE5VTEw7XG5cblx0bXogPSBjb250YWluZXJfb2YobHJ1dmVjLCBzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSwgbHJ1dmVjKTtcblx0cmV0dXJuIG16LVx1MDAzZW1lbWNnO1xuYGBgXG5cbkhlcmUgaXQgaXM6IHRoZSBjb2RlICpleHBsaWNpdGx5KiByZXR1cm5zIE5VTEwgaWYgYG1lbV9jZ3JvdXBfZGlzYWJsZWQoKWAgaXMgdHJ1ZS4gT3RoZXJ3aXNlLCBpdCByZXR1cm5zIGBtei1cdTAwM2VtZW1jZ2AuIFNvLCB0aGUgcXVlc3Rpb24gYmVjb21lcywgY2FuIGBtei1cdTAwM2VtZW1jZ2AgaXRzZWxmIGV2ZXIgYmUgTlVMTD8gVGhpbmtpbmcgdGhpcyB0aHJvdWdoLi4uIGBtei1cdTAwM2VtZW1jZ2AgaXMgdGhlIGBtZW1jZ2AgYXNzb2NpYXRlZCB3aXRoIHRoZSBgbWVtX2Nncm91cF9wZXJfbm9kZWAuIEZvciB0aGUgcm9vdCBtZW1jZywgYG16LVx1MDAzZW1lbWNnYCBpcyBgcm9vdF9tZW1fY2dyb3VwYCwgd2hpY2ggaXMgKm5vdCogTlVMTC4gVGhlcmVmb3JlLCBgbWVtY2dgIGlzIG9ubHkgTlVMTCBpZiBgbWVtX2Nncm91cF9kaXNhYmxlZCgpYCBpcyB0cnVlLlxuXG5UaGlzIG1lYW5zIHRoYXQgaWYgYG1lbV9jZ3JvdXBfZGlzYWJsZWQoKWAgaXMgdHJ1ZSwgYG1lbV9jZ3JvdXBfc3dhcHBpbmVzc2Agd2lsbCAqYWx3YXlzKiBzYWZlbHkgcmV0dXJuIGB2bV9zd2FwcGluZXNzYCBiZWNhdXNlIG9mIHRoZSBpbml0aWFsIGNoZWNrIGluIGBscnV2ZWNfbWVtY2dgIHRoYXQgcHJldmVudHMgYSBOVUxMIHZhbHVlIGJlaW5nIHBhc3NlZC5cblxuTm93LCBJIG5lZWQgdG8gY29uc2lkZXIgYW4gZWRnZSBjYXNlOiB3aGF0IGlmIGBDT05GSUdfTUVNQ0dgIGlzIGRpc2FibGVkIGVudGlyZWx5PyBJIHNob3VsZCBjaGVjayBob3cgYGxydXZlY19tZW1jZ2AgYmVoYXZlcyB1bmRlciB0aGF0IGNvbmRpdGlvbi4gVGhpcyBjb3VsZCBjaGFuZ2UgdGhlIG92ZXJhbGwgZmxvdyBJJ3ZlIGFuYWx5emVkIHNvIGZhci4gVGhpcyB3aWxsIGJlIHRoZSBuZXh0IHN0ZXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3MTkyLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTU4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMDc6MDM6MTMuNjI5MDQwOTg3WiIsIlNlcSI6NDYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExODI1MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMTI5OCxcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTI5ODpcXHRzdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpscnV2ZWNfbWVtY2coc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxcbjEyOTk6XFx0e1xcbjEzMDA6XFx0XFx0cmV0dXJuIE5VTEw7XFxuMTMwMTpcXHR9XFxuMTMwMjpcXHRcXG4xMzAzOlxcdHN0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX29ubGluZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuMTMwNDpcXHR7XFxuMTMwNTpcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4xMzA2OlxcdH1cXG4xMzA3OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQwNzowMzoxMy42MzAyMjU3NzdaIiwiU2VxIjo0NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjY1MDM0MzM4NzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgUGF0Y2ggZm9yIEZ1enppbmcgU3VpdGFiaWxpdHkqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGRpc3NlY3RlZCB0aGlzIHBhdGNoLCBhbmQgaGVyZSdzIG15IGFzc2Vzc21lbnQuIFRoZSBwcmltYXJ5IG9iamVjdGl2ZSBzZWVtcyB0byBiZSB0aWR5aW5nIHVwIHRoZSBjb2RlLCBzcGVjaWZpY2FsbHkgY29uY2VybmluZyB0aGUgYHN3YXBwaW5lc3NgIHBhcmFtZXRlciB3aXRoaW4gbWVtb3J5IGNncm91cHMsIGFuZCBoaWRpbmcgaXQgdW5kZXIgdGhlIGBDT05GSUdfTUVNQ0dfVjFgIGZsYWcgZm9yIG1lbW9yeSBvcHRpbWl6YXRpb24uIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdGhhdCB0aGVyZSBtaWdodCBiZSBzb21lIGZ1bmN0aW9uYWwgY2hhbmdlcyB3b3J0aCBleHBsb3JpbmcgZm9yIGZ1enppbmcsIGJ1dCB0aGUgbW9yZSBJIGxvb2ssIHRoZSBsZXNzIHNpZ25pZmljYW50IHRoZXkgYXBwZWFyLlxuXG5Jbml0aWFsbHksIEkgaWRlbnRpZmllZCBhIHBvdGVudGlhbCBkaWZmZXJlbmNlIGluIHRoZSBiZWhhdmlvciBvZiBwcm9hY3RpdmUgcmVjbGFpbSB2aWEgc3lzZnMgKHRyaWdnZXJlZCBieSB3cml0aW5nIHRvIGAvc3lzL2RldmljZXMvc3lzdGVtL25vZGUvbm9kZVgvcmVjbGFpbWApIHdoZW4gYENPTkZJR19NRU1DR2AgaXMgZGlzYWJsZWQuIFByZXZpb3VzbHksIHRoaXMgbWVjaGFuaXNtIGlnbm9yZWQgdGhlIGBzd2FwcGluZXNzYCBzZXR0aW5nIGFuZCB1c2VkIHRoZSBnbG9iYWwgYHZtX3N3YXBwaW5lc3NgLiBUaGlzIHBhdGNoIG5vdyBjb3JyZWN0bHkgcmVzcGVjdHMgdGhlIGBzd2FwcGluZXNzYCBwYXJhbWV0ZXIgcHJvdmlkZWQgdmlhIHRoZSB1c2VyIHdoZW4gYENPTkZJR19NRU1DR2AgaXMgZGlzYWJsZWQuIEhvd2V2ZXIsIGhlcmUncyB0aGUga2lja2VyOiB0aGlzIHNjZW5hcmlvIGlzIHVubGlrZWx5IHRvIGJlIHJlbGV2YW50IGJlY2F1c2Ugc3l6a2FsbGVyICpkZWZhdWx0cyogdG8gaGF2aW5nIGBDT05GSUdfTUVNQ0dgIGVuYWJsZWQsIGFzIHRoYXQgaXMgdGhlIHN0YW5kYXJkIGNhc2UuXG5cbkkgd2VudCBkaWdnaW5nIGZ1cnRoZXIsIGFuZCB0aGUgY29kZSBjaGFuZ2VzIGVzc2VudGlhbGx5IGludm9sdmUgdGhlIHJlbG9jYXRpb24gb2YgdGhlIGBtZW1jZy1cdTAwM2Vzd2FwcGluZXNzYCBpbml0aWFsaXphdGlvbiwgcGxhY2luZyBpdCB1bmRlciB0aGUgYCNpZmRlZiBDT05GSUdfTUVNQ0dfVjFgIGJsb2NrLiBUaGlzIG1vdmVzIHRoZSBgc3dhcHBpbmVzc2AgZmllbGQgZnJvbSBgc3RydWN0IG1lbV9jZ3JvdXBgIGlmIGBDT05GSUdfTUVNQ0dfVjFgIGlzIGRpc2FibGVkLiBUaGlzIGlzIHB1cmUgbWVtb3J5IGxheW91dCByZWZhY3RvcmluZzsgdGhlcmUgaXMgbm8gY2hhbmdlIGluIGJlaGF2aW9yIGlmIGBDT05GSUdfTUVNQ0dfVjFgIGlzIGRpc2FibGVkLlxuXG5XaGVuIGBDT05GSUdfTUVNQ0dgIGlzIGVuYWJsZWQsIHRoZSBjb2RlIHBhdGhzIGZvciBgc2Nfc3dhcHBpbmVzc2AgYW5kIGBtZW1fY2dyb3VwX3N3YXBwaW5lc3NgIHJlbWFpbiAqZnVuY3Rpb25hbGx5IGlkZW50aWNhbCogdG8gdGhlIHByZS1wYXRjaCB2ZXJzaW9ucy4gSSd2ZSByZS1leGFtaW5lZCB0aGUgY29uZGl0aW9uYWwgbG9naWMsIGFuZCB0aGVyZSBhcmUgbm8gbmV3IGNvZGVwYXRocyB3aGVuIGBDT05GSUdfTUVNQ0dgIGlzIGVuYWJsZWQsIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBgQ09ORklHX01FTUNHX1YxYCBpcyBlbmFibGVkIG9yIGRpc2FibGVkLiBUaGlzIG1lYW5zIHRoYXQgaWYgc3l6a2FsbGVyIGlzIHJ1bm5pbmcgd2l0aCBgQ09ORklHX01FTUNHPXlgLCBhcyBpdCBhbG1vc3QgY2VydGFpbmx5IGlzLCBmdXp6aW5nIHRoaXMgcGF0Y2ggd29uJ3QgdW5jb3ZlciBhbnkgbmV3IGJ1Z3MuIFRoZSBuZXcgY29kZSB3aWxsIGhhdmUgZXhhY3RseSB0aGUgc2FtZSBiZWhhdmlvciBhcyB0aGUgb2xkIGNvZGUuIFdlIHdvdWxkIG5lZWQgYENPTkZJR19NRU1DRz1uYCB0byBleGVyY2lzZSB0aGUgYnVnIGZpeC5cblxuSW4gYSBudXRzaGVsbDogdGhpcyBwYXRjaCBpcyBtYWlubHkgYWJvdXQgaGlkaW5nIGBzd2FwcGluZXNzYCB1bmRlciBhIGZlYXR1cmUgZmxhZyBhbmQgc2F2aW5nIGEgYml0IG9mIG1lbW9yeS4gVGhlIGZ1bmN0aW9uYWwgY2hhbmdlLCB0aGUgY2hhbmdlIG9mIGJlaGF2aW9yIHdoZW4gYENPTkZJR19NRU1DR2AgaXMgZGlzYWJsZWQsIGlzIGEgdmVyeSBtaW5vciBlZGdlIGNhc2UgdGhhdCdzIGhpZ2hseSB1bmxpa2VseSB0byBiZSByZWxldmFudCBpbiBhIHR5cGljYWwgc3l6a2FsbGVyIHRlc3RpbmcgZW52aXJvbm1lbnQuXG5cblRoZXJlZm9yZSwgZm9yIGZ1enppbmcgcHVycG9zZXMsIHRoaXMgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSB0ZXN0YWJsZSBmdW5jdGlvbmFsIGNoYW5nZXMgaWYgc3l6a2FsbGVyIGlzIHJ1bm5pbmcgd2l0aCBgQ09ORklHX01FTUNHPXlgLiBJdCdzIGEgY2xlYW51cCBhbmQgbWVtb3J5IG9wdGltaXphdGlvbiwgbm90IGEgYnVnIGZpeCBmb3IgdGhlIHN0YW5kYXJkIGNhc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4NjIxLCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjk2MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDA3OjAzOjQwLjEzMzY2MjYzWiIsIlNlcSI6NDgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDUxMDEwNTIyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNncm91cF9zdWJzeXNfb25fZGZsXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL2JmcS1pb3NjaGVkLmM9NjIzNz1zdGF0aWMgdm9pZCBiZnFfaW5zZXJ0X3JlcXVlc3Qoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgsIHN0cnVjdCByZXF1ZXN0ICpycSxcXG4tLVxcbmJsb2NrL2JmcS1pb3NjaGVkLmMtNjI0Ny0jaWZkZWYgQ09ORklHX0JGUV9HUk9VUF9JT1NDSEVEXFxuYmxvY2svYmZxLWlvc2NoZWQuYzo2MjQ4OlxcdGlmICghY2dyb3VwX3N1YnN5c19vbl9kZmwoaW9fY2dycF9zdWJzeXMpIFxcdTAwMjZcXHUwMDI2IHJxLVxcdTAwM2ViaW8pXFxuYmxvY2svYmZxLWlvc2NoZWQuYy02MjQ5LVxcdFxcdGJmcWdfc3RhdHNfdXBkYXRlX2xlZ2FjeV9pbyhxLCBycSk7XFxuLS1cXG5ibG9jay9ibGstY2dyb3VwLmM9MjE4Mj12b2lkIGJsa19jZ3JvdXBfYmlvX3N0YXJ0KHN0cnVjdCBiaW8gKmJpbylcXG4tLVxcbmJsb2NrL2Jsay1jZ3JvdXAuYy0yMTg4LVxcbmJsb2NrL2Jsay1jZ3JvdXAuYzoyMTg5OlxcdGlmICghY2dyb3VwX3N1YnN5c19vbl9kZmwoaW9fY2dycF9zdWJzeXMpKVxcbmJsb2NrL2Jsay1jZ3JvdXAuYy0yMTkwLVxcdFxcdHJldHVybjtcXG4tLVxcbmJsb2NrL2Jsay10aHJvdHRsZS5jPTg0PXN0YXRpYyB1aW50NjRfdCB0Z19icHNfbGltaXQoc3RydWN0IHRocm90bF9ncnAgKnRnLCBpbnQgcncpXFxuLS1cXG5ibG9jay9ibGstdGhyb3R0bGUuYy04Ny1cXG5ibG9jay9ibGstdGhyb3R0bGUuYzo4ODpcXHRpZiAoY2dyb3VwX3N1YnN5c19vbl9kZmwoaW9fY2dycF9zdWJzeXMpIFxcdTAwMjZcXHUwMDI2ICFibGtnLVxcdTAwM2VwYXJlbnQpXFxuYmxvY2svYmxrLXRocm90dGxlLmMtODktXFx0XFx0cmV0dXJuIFU2NF9NQVg7XFxuLS1cXG5ibG9jay9ibGstdGhyb3R0bGUuYz05ND1zdGF0aWMgdW5zaWduZWQgaW50IHRnX2lvcHNfbGltaXQoc3RydWN0IHRocm90bF9ncnAgKnRnLCBpbnQgcncpXFxuLS1cXG5ibG9jay9ibGstdGhyb3R0bGUuYy05Ny1cXG5ibG9jay9ibGstdGhyb3R0bGUuYzo5ODpcXHRpZiAoY2dyb3VwX3N1YnN5c19vbl9kZmwoaW9fY2dycF9zdWJzeXMpIFxcdTAwMjZcXHUwMDI2ICFibGtnLVxcdTAwM2VwYXJlbnQpXFxuYmxvY2svYmxrLXRocm90dGxlLmMtOTktXFx0XFx0cmV0dXJuIFVJTlRfTUFYO1xcbi0tXFxuYmxvY2svYmxrLXRocm90dGxlLmM9Mjk5PXN0YXRpYyB2b2lkIHRocm90bF9wZF9pbml0KHN0cnVjdCBibGtnX3BvbGljeV9kYXRhICpwZClcXG4tLVxcbmJsb2NrL2Jsay10aHJvdHRsZS5jLTMyMC1cXHRzcS1cXHUwMDNlcGFyZW50X3NxID0gXFx1MDAyNnRkLVxcdTAwM2VzZXJ2aWNlX3F1ZXVlO1xcbmJsb2NrL2Jsay10aHJvdHRsZS5jOjMyMTpcXHRpZiAoY2dyb3VwX3N1YnN5c19vbl9kZmwoaW9fY2dycF9zdWJzeXMpIFxcdTAwMjZcXHUwMDI2IGJsa2ctXFx1MDAzZXBhcmVudClcXG5ibG9jay9ibGstdGhyb3R0bGUuYy0zMjItXFx0XFx0c3EtXFx1MDAzZXBhcmVudF9zcSA9IFxcdTAwMjZibGtnX3RvX3RnKGJsa2ctXFx1MDAzZXBhcmVudCktXFx1MDAzZXNlcnZpY2VfcXVldWU7XFxuLS1cXG5ibG9jay9ibGstdGhyb3R0bGUuYz0xMjcwPXN0YXRpYyB2b2lkIHRnX2NvbmZfdXBkYXRlZChzdHJ1Y3QgdGhyb3RsX2dycCAqdGcsIGJvb2wgZ2xvYmFsKVxcbi0tXFxuYmxvY2svYmxrLXRocm90dGxlLmMtMTI5NC1cXHRcXHQvKiBpZ25vcmUgcm9vdC9zZWNvbmQgbGV2ZWwgKi9cXG5ibG9jay9ibGstdGhyb3R0bGUuYzoxMjk1OlxcdFxcdGlmICghY2dyb3VwX3N1YnN5c19vbl9kZmwoaW9fY2dycF9zdWJzeXMpIHx8ICFibGtnLVxcdTAwM2VwYXJlbnQgfHxcXG5ibG9jay9ibGstdGhyb3R0bGUuYy0xMjk2LVxcdFxcdCAgICAhYmxrZy1cXHUwMDNlcGFyZW50LVxcdTAwM2VwYXJlbnQpXFxuLS1cXG5ibG9jay9ibGstdGhyb3R0bGUuaD0xNjg9c3RhdGljIGlubGluZSBib29sIGJsa19zaG91bGRfdGhyb3RsKHN0cnVjdCBiaW8gKmJpbylcXG4tLVxcbmJsb2NrL2Jsay10aHJvdHRsZS5oLTE3Ni1cXHR0ZyA9IGJsa2dfdG9fdGcoYmlvLVxcdTAwM2ViaV9ibGtnKTtcXG5ibG9jay9ibGstdGhyb3R0bGUuaDoxNzc6XFx0aWYgKCFjZ3JvdXBfc3Vic3lzX29uX2RmbChpb19jZ3JwX3N1YnN5cykpIHtcXG5ibG9jay9ibGstdGhyb3R0bGUuaC0xNzgtXFx0XFx0aWYgKCFiaW9fZmxhZ2dlZChiaW8sIEJJT19DR1JPVVBfQUNDVCkpIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvYmFja2luZy1kZXYuaD0xNzE9c3RhdGljIGlubGluZSBib29sIGlub2RlX2Nnd2JfZW5hYmxlZChzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbi0tXFxuaW5jbHVkZS9saW51eC9iYWNraW5nLWRldi5oLTE3NC1cXG5pbmNsdWRlL2xpbnV4L2JhY2tpbmctZGV2Lmg6MTc1OlxcdHJldHVybiBjZ3JvdXBfc3Vic3lzX29uX2RmbChtZW1vcnlfY2dycF9zdWJzeXMpIFxcdTAwMjZcXHUwMDI2XFxuaW5jbHVkZS9saW51eC9iYWNraW5nLWRldi5oOjE3NjpcXHRcXHRjZ3JvdXBfc3Vic3lzX29uX2RmbChpb19jZ3JwX3N1YnN5cykgXFx1MDAyNlxcdTAwMjZcXG5pbmNsdWRlL2xpbnV4L2JhY2tpbmctZGV2LmgtMTc3LVxcdFxcdChiZGktXFx1MDAzZWNhcGFiaWxpdGllcyBcXHUwMDI2IEJESV9DQVBfV1JJVEVCQUNLKSBcXHUwMDI2XFx1MDAyNlxcbi0tXFxuaW5jbHVkZS9saW51eC9jZ3JvdXAuaD05MD1leHRlcm4gc3RydWN0IGJsb2NraW5nX25vdGlmaWVyX2hlYWQgY2dyb3VwX2xpZmV0aW1lX25vdGlmaWVyO1xcbi0tXFxuaW5jbHVkZS9saW51eC9jZ3JvdXAuaC0xMDktLyoqXFxuaW5jbHVkZS9saW51eC9jZ3JvdXAuaDoxMTA6ICogY2dyb3VwX3N1YnN5c19vbl9kZmwgLSBmYXN0IHRlc3Qgb24gd2hldGhlciBhIHN1YnN5cyBpcyBvbiBkZWZhdWx0IGhpZXJhcmNoeVxcbmluY2x1ZGUvbGludXgvY2dyb3VwLmgtMTExLSAqIEBzczogc3Vic3lzdGVtIGluIHF1ZXN0aW9uXFxuaW5jbHVkZS9saW51eC9jZ3JvdXAuaC0xMTItICovXFxuaW5jbHVkZS9saW51eC9jZ3JvdXAuaDoxMTM6I2RlZmluZSBjZ3JvdXBfc3Vic3lzX29uX2RmbChzcylcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuaW5jbHVkZS9saW51eC9jZ3JvdXAuaC0xMTQtXFx0c3RhdGljX2JyYW5jaF9saWtlbHkoXFx1MDAyNnNzICMjIF9vbl9kZmxfa2V5KVxcbi0tXFxuaW5jbHVkZS9uZXQvc29jay5oPTI3MDI9c3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfc2tfdW5kZXJfbWVtb3J5X3ByZXNzdXJlKGNvbnN0IHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbmluY2x1ZGUvbmV0L3NvY2suaC0yNzA2LSNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcXG5pbmNsdWRlL25ldC9zb2NrLmg6MjcwNzpcXHRpZiAoIWNncm91cF9zdWJzeXNfb25fZGZsKG1lbW9yeV9jZ3JwX3N1YnN5cykpXFxuaW5jbHVkZS9uZXQvc29jay5oLTI3MDgtXFx0XFx0cmV0dXJuICEhbWVtY2ctXFx1MDAzZXRjcG1lbV9wcmVzc3VyZTtcXG4tLVxcbmtlcm5lbC9jZ3JvdXAvY2dyb3VwLmM9MTQ5PXN0YXRpYyBjb25zdCBjaGFyICpjZ3JvdXBfc3Vic3lzX25hbWVbXSA9IHtcXG4tLVxcbmtlcm5lbC9jZ3JvdXAvY2dyb3VwLmMtMTUzLVxcbmtlcm5lbC9jZ3JvdXAvY2dyb3VwLmM6MTU0Oi8qIGFycmF5IG9mIHN0YXRpY19rZXlzIGZvciBjZ3JvdXBfc3Vic3lzX2VuYWJsZWQoKSBhbmQgY2dyb3VwX3N1YnN5c19vbl9kZmwoKSAqL1xcbmtlcm5lbC9jZ3JvdXAvY2dyb3VwLmMtMTU1LSNkZWZpbmUgU1VCU1lTKF94KVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4tLVxcbmtlcm5lbC9jZ3JvdXAvY2dyb3VwLmM9MTY0PXN0YXRpYyBzdHJ1Y3Qgc3RhdGljX2tleV90cnVlICpjZ3JvdXBfc3Vic3lzX2VuYWJsZWRfa2V5W10gPSB7XFxuLS1cXG5rZXJuZWwvY2dyb3VwL2Nncm91cC5jLTE2OS0jZGVmaW5lIFNVQlNZUyhfeCkgW194ICMjIF9jZ3JwX2lkXSA9IFxcdTAwMjZfeCAjIyBfY2dycF9zdWJzeXNfb25fZGZsX2tleSxcXG5rZXJuZWwvY2dyb3VwL2Nncm91cC5jOjE3MDpzdGF0aWMgc3RydWN0IHN0YXRpY19rZXlfdHJ1ZSAqY2dyb3VwX3N1YnN5c19vbl9kZmxfa2V5W10gPSB7XFxua2VybmVsL2Nncm91cC9jZ3JvdXAuYy0xNzEtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Nncm91cF9zdWJzeXMuaFxcdTAwM2VcXG4tLVxcbmtlcm5lbC9jZ3JvdXAvY2dyb3VwLmM9MTgzNj1pbnQgcmViaW5kX3N1YnN5c3RlbXMoc3RydWN0IGNncm91cF9yb290ICpkc3Rfcm9vdCwgdTMyIHNzX21hc2spXFxuLS1cXG5rZXJuZWwvY2dyb3VwL2Nncm91cC5jLTE5MzQtXFx0XFx0aWYgKGRzdF9yb290ID09IFxcdTAwMjZjZ3JwX2RmbF9yb290KSB7XFxua2VybmVsL2Nncm91cC9jZ3JvdXAuYzoxOTM1OlxcdFxcdFxcdHN0YXRpY19icmFuY2hfZW5hYmxlKGNncm91cF9zdWJzeXNfb25fZGZsX2tleVtzc2lkXSk7XFxua2VybmVsL2Nncm91cC9jZ3JvdXAuYy0xOTM2LVxcdFxcdH0gZWxzZSB7XFxua2VybmVsL2Nncm91cC9jZ3JvdXAuYy0xOTM3LVxcdFxcdFxcdGRjZ3JwLVxcdTAwM2VzdWJ0cmVlX2NvbnRyb2wgfD0gMSBcXHUwMDNjXFx1MDAzYyBzc2lkO1xcbmtlcm5lbC9jZ3JvdXAvY2dyb3VwLmM6MTkzODpcXHRcXHRcXHRzdGF0aWNfYnJhbmNoX2Rpc2FibGUoY2dyb3VwX3N1YnN5c19vbl9kZmxfa2V5W3NzaWRdKTtcXG5rZXJuZWwvY2dyb3VwL2Nncm91cC5jLTE5MzktXFx0XFx0fVxcbi0tXFxua2VybmVsL2Nncm91cC9jcHVzZXQtdjEuYz0yMTI9dm9pZCBjcHVzZXQxX3VwZGF0ZV90YXNrX3NwcmVhZF9mbGFncyhzdHJ1Y3QgY3B1c2V0ICpjcyxcXG4tLVxcbmtlcm5lbC9jZ3JvdXAvY3B1c2V0LXYxLmMtMjE0LXtcXG5rZXJuZWwvY2dyb3VwL2NwdXNldC12MS5jOjIxNTpcXHRpZiAoY2dyb3VwX3N1YnN5c19vbl9kZmwoY3B1c2V0X2NncnBfc3Vic3lzKSlcXG5rZXJuZWwvY2dyb3VwL2NwdXNldC12MS5jLTIxNi1cXHRcXHRyZXR1cm47XFxuLS1cXG5rZXJuZWwvY2dyb3VwL2NwdXNldC5jPTM5MD1zdGF0aWMgaW5saW5lIGJvb2wgY3B1c2V0X3YyKHZvaWQpXFxuLS1cXG5rZXJuZWwvY2dyb3VwL2NwdXNldC5jLTM5Mi1cXHRyZXR1cm4gIUlTX0VOQUJMRUQoQ09ORklHX0NQVVNFVFNfVjEpIHx8XFxua2VybmVsL2Nncm91cC9jcHVzZXQuYzozOTM6XFx0XFx0Y2dyb3VwX3N1YnN5c19vbl9kZmwoY3B1c2V0X2NncnBfc3Vic3lzKTtcXG5rZXJuZWwvY2dyb3VwL2NwdXNldC5jLTM5NC19XFxuLS1cXG5rZXJuZWwvY2dyb3VwL3BpZHMuYz0yNDM9c3RhdGljIHZvaWQgcGlkc19ldmVudChzdHJ1Y3QgcGlkc19jZ3JvdXAgKnBpZHNfZm9ya2luZyxcXG4tLVxcbmtlcm5lbC9jZ3JvdXAvcGlkcy5jLTI1My1cXHR9XFxua2VybmVsL2Nncm91cC9waWRzLmM6MjU0OlxcdGlmICghY2dyb3VwX3N1YnN5c19vbl9kZmwocGlkc19jZ3JwX3N1YnN5cykgfHxcXG5rZXJuZWwvY2dyb3VwL3BpZHMuYy0yNTUtXFx0ICAgIGNncnBfZGZsX3Jvb3QuZmxhZ3MgXFx1MDAyNiBDR1JQX1JPT1RfUElEU19MT0NBTF9FVkVOVFMpIHtcXG4tLVxcbmtlcm5lbC9jZ3JvdXAvcGlkcy5jPTM2MT1zdGF0aWMgaW50IF9fcGlkc19ldmVudHNfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNmLCBib29sIGxvY2FsKVxcbi0tXFxua2VybmVsL2Nncm91cC9waWRzLmMtMzY2LVxcbmtlcm5lbC9jZ3JvdXAvcGlkcy5jOjM2NzpcXHRpZiAoIWNncm91cF9zdWJzeXNfb25fZGZsKHBpZHNfY2dycF9zdWJzeXMpIHx8XFxua2VybmVsL2Nncm91cC9waWRzLmMtMzY4LVxcdCAgICBjZ3JwX2RmbF9yb290LmZsYWdzIFxcdTAwMjYgQ0dSUF9ST09UX1BJRFNfTE9DQUxfRVZFTlRTKSB7XFxuLS1cXG5rZXJuZWwvc2NoZWQvY29yZS5jPTk5NDc9c3RhdGljIGludCB0Z19jZnNfc2NoZWR1bGFibGVfZG93bihzdHJ1Y3QgdGFza19ncm91cCAqdGcsIHZvaWQgKmRhdGEpXFxuLS1cXG5rZXJuZWwvc2NoZWQvY29yZS5jLTk5NjctXFx0XFx0ICovXFxua2VybmVsL3NjaGVkL2NvcmUuYzo5OTY4OlxcdFxcdGlmIChjZ3JvdXBfc3Vic3lzX29uX2RmbChjcHVfY2dycF9zdWJzeXMpKSB7XFxua2VybmVsL3NjaGVkL2NvcmUuYy05OTY5LVxcdFxcdFxcdGlmIChxdW90YSA9PSBSVU5USU1FX0lORilcXG4tLVxcbm1tL2h1Z2V0bGJfY2dyb3VwLmM9OTE9c3RhdGljIHZvaWQgaHVnZXRsYl9jZ3JvdXBfaW5pdChzdHJ1Y3QgaHVnZXRsYl9jZ3JvdXAgKmhfY2dyb3VwLFxcbi0tXFxubW0vaHVnZXRsYl9jZ3JvdXAuYy0xMTItXFxubW0vaHVnZXRsYl9jZ3JvdXAuYzoxMTM6XFx0XFx0aWYgKCFjZ3JvdXBfc3Vic3lzX29uX2RmbChodWdldGxiX2NncnBfc3Vic3lzKSkge1xcbm1tL2h1Z2V0bGJfY2dyb3VwLmMtMTE0LVxcdFxcdFxcdGZhdWx0LVxcdTAwM2V0cmFja19mYWlsY250ID0gdHJ1ZTtcXG4tLVxcbm1tL2h1Z2V0bGJfY2dyb3VwLmM9NDU2PXN0YXRpYyBpbnQgaHVnZXRsYl9jZ3JvdXBfcmVhZF9udW1hX3N0YXQoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKmR1bW15KVxcbi0tXFxubW0vaHVnZXRsYl9jZ3JvdXAuYy00NjAtXFx0aW50IGlkeCA9IE1FTUZJTEVfSURYKGNmdC1cXHUwMDNlcHJpdmF0ZSk7XFxubW0vaHVnZXRsYl9jZ3JvdXAuYzo0NjE6XFx0Ym9vbCBsZWdhY3kgPSAhY2dyb3VwX3N1YnN5c19vbl9kZmwoaHVnZXRsYl9jZ3JwX3N1YnN5cyk7XFxubW0vaHVnZXRsYl9jZ3JvdXAuYy00NjItXFx0c3RydWN0IGh1Z2V0bGJfY2dyb3VwICpoX2NnID0gaHVnZXRsYl9jZ3JvdXBfZnJvbV9jc3Moc2VxX2NzcyhzZXEpKTtcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuYz0yNTIyPXZvaWQgbWVtY2cxX2FjY291bnRfa21lbShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBucl9wYWdlcylcXG5tbS9tZW1jb250cm9sLXYxLmMtMjUyMy17XFxubW0vbWVtY29udHJvbC12MS5jOjI1MjQ6XFx0aWYgKCFjZ3JvdXBfc3Vic3lzX29uX2RmbChtZW1vcnlfY2dycF9zdWJzeXMpKSB7XFxubW0vbWVtY29udHJvbC12MS5jLTI1MjUtXFx0XFx0aWYgKG5yX3BhZ2VzIFxcdTAwM2UgMClcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuaD0zMT1zdGF0aWMgaW5saW5lIGJvb2wgZG9fbWVtc3dfYWNjb3VudCh2b2lkKVxcbm1tL21lbWNvbnRyb2wtdjEuaC0zMi17XFxubW0vbWVtY29udHJvbC12MS5oOjMzOlxcdHJldHVybiAhY2dyb3VwX3N1YnN5c19vbl9kZmwobWVtb3J5X2NncnBfc3Vic3lzKTtcXG5tbS9tZW1jb250cm9sLXYxLmgtMzQtfVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTIzOD1zdGF0aWMgaW5saW5lIHZvaWQgcmVwYXJlbnRfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50KVxcbm1tL21lbWNvbnRyb2wuYy0yMzkte1xcbm1tL21lbWNvbnRyb2wuYzoyNDA6XFx0aWYgKGNncm91cF9zdWJzeXNfb25fZGZsKG1lbW9yeV9jZ3JwX3N1YnN5cykpXFxubW0vbWVtY29udHJvbC5jLTI0MS1cXHRcXHRyZXR1cm47XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MzM0PXN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpnZXRfbWVtX2Nncm91cF9jc3NfZnJvbV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTMzNy1cXG5tbS9tZW1jb250cm9sLmM6MzM4OlxcdGlmICghY2dyb3VwX3N1YnN5c19vbl9kZmwobWVtb3J5X2NncnBfc3Vic3lzKSlcXG5tbS9tZW1jb250cm9sLmMtMzM5LVxcdFxcdHJldHVybiBcXHUwMDI2cm9vdF9tZW1fY2dyb3VwLVxcdTAwM2Vjc3M7XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9ODE0PXN0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKmdldF9ub25fZHlpbmdfbWVtY2dfc3RhcnQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTgxNy1cXHQvKiBSZWJpbmRpbmcgY2FuIGNhdXNlIHRoaXMgdmFsdWUgdG8gYmUgY2hhbmdlZCBhdCBydW50aW1lICovXFxubW0vbWVtY29udHJvbC5jOjgxODpcXHRpZiAoY2dyb3VwX3N1YnN5c19vbl9kZmwobWVtb3J5X2NncnBfc3Vic3lzKSkge1xcbm1tL21lbWNvbnRyb2wuYy04MTktXFx0XFx0KnJjdV9sb2NrZWQgPSBmYWxzZTtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0xNzU3PXN0YXRpYyB2b2lkIG1lbW9yeV9zdGF0X2Zvcm1hdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBzZXFfYnVmICpzKVxcbm1tL21lbWNvbnRyb2wuYy0xNzU4LXtcXG5tbS9tZW1jb250cm9sLmM6MTc1OTpcXHRpZiAoY2dyb3VwX3N1YnN5c19vbl9kZmwobWVtb3J5X2NncnBfc3Vic3lzKSlcXG5tbS9tZW1jb250cm9sLmMtMTc2MC1cXHRcXHRtZW1jZ19zdGF0X2Zvcm1hdChtZW1jZywgcyk7XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MTc5Nz12b2lkIG1lbV9jZ3JvdXBfcHJpbnRfb29tX21lbWluZm8oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTE4MDUtXFxubW0vbWVtY29udHJvbC5jOjE4MDY6XFx0aWYgKGNncm91cF9zdWJzeXNfb25fZGZsKG1lbW9yeV9jZ3JwX3N1YnN5cykpXFxubW0vbWVtY29udHJvbC5jLTE4MDctXFx0XFx0bWVtb3J5X2ZhaWxjbnQgPSBhdG9taWNfbG9uZ19yZWFkKFxcdTAwMjZtZW1jZy1cXHUwMDNlbWVtb3J5X2V2ZW50c1tNRU1DR19NQVhdKTtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0xODEzLVxcdFxcdEsoKHU2NClSRUFEX09OQ0UobWVtY2ctXFx1MDAzZW1lbW9yeS5tYXgpKSwgbWVtb3J5X2ZhaWxjbnQpO1xcbm1tL21lbWNvbnRyb2wuYzoxODE0OlxcdGlmIChjZ3JvdXBfc3Vic3lzX29uX2RmbChtZW1vcnlfY2dycF9zdWJzeXMpKVxcbm1tL21lbWNvbnRyb2wuYy0xODE1LVxcdFxcdHByX2luZm8oXFxcInN3YXA6IHVzYWdlICVsbHVrQiwgbGltaXQgJWxsdWtCLCBmYWlsY250ICVsdVxcXFxuXFxcIixcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0xODYwPXZvaWQgX19tZW1jZ19tZW1vcnlfZXZlbnQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTE4ODEtXFxubW0vbWVtY29udHJvbC5jOjE4ODI6XFx0XFx0aWYgKCFjZ3JvdXBfc3Vic3lzX29uX2RmbChtZW1vcnlfY2dycF9zdWJzeXMpKVxcbm1tL21lbWNvbnRyb2wuYy0xODgzLVxcdFxcdFxcdGJyZWFrO1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTE5NTM9c3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfZ2V0X29vbV9ncm91cChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnZpY3RpbSxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0xOTU4LVxcbm1tL21lbWNvbnRyb2wuYzoxOTU5OlxcdGlmICghY2dyb3VwX3N1YnN5c19vbl9kZmwobWVtb3J5X2NncnBfc3Vic3lzKSlcXG5tbS9tZW1jb250cm9sLmMtMTk2MC1cXHRcXHRyZXR1cm4gTlVMTDtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz00MTYwPW1lbV9jZ3JvdXBfY3NzX2FsbG9jKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpwYXJlbnRfY3NzKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTQxNjMtXFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCAqb2xkX21lbWNnO1xcbm1tL21lbWNvbnRyb2wuYzo0MTY0OlxcdGJvb2wgbWVtY2dfb25fZGZsID0gY2dyb3VwX3N1YnN5c19vbl9kZmwobWVtb3J5X2NncnBfc3Vic3lzKTtcXG5tbS9tZW1jb250cm9sLmMtNDE2NS1cXG4tLVxcbm1tL21lbWNvbnRyb2wuYz00MzIzPXN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfY3NzX2ZyZWUoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy00MzMxLSNlbmRpZlxcbm1tL21lbWNvbnRyb2wuYzo0MzMyOlxcdGlmIChjZ3JvdXBfc3Vic3lzX29uX2RmbChtZW1vcnlfY2dycF9zdWJzeXMpIFxcdTAwMjZcXHUwMDI2ICFjZ3JvdXBfbWVtb3J5X25vc29ja2V0KVxcbm1tL21lbWNvbnRyb2wuYy00MzMzLVxcdFxcdHN0YXRpY19icmFuY2hfZGVjKFxcdTAwMjZtZW1jZ19zb2NrZXRzX2VuYWJsZWRfa2V5KTtcXG5tbS9tZW1jb250cm9sLmMtNDMzNC1cXG5tbS9tZW1jb250cm9sLmM6NDMzNTpcXHRpZiAoIWNncm91cF9zdWJzeXNfb25fZGZsKG1lbW9yeV9jZ3JwX3N1YnN5cykgXFx1MDAyNlxcdTAwMjYgbWVtY2cxX3RjcG1lbV9hY3RpdmUobWVtY2cpKVxcbm1tL21lbWNvbnRyb2wuYy00MzM2LVxcdFxcdHN0YXRpY19icmFuY2hfZGVjKFxcdTAwMjZtZW1jZ19zb2NrZXRzX2VuYWJsZWRfa2V5KTtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01MTc5PWludCBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKHN0cnVjdCBmb2xpbyAqZm9saW8sIGdmcF90IGdmcClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01MTg5LVxcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkgfHwgIW1lbWNnX2FjY291bnRzX2h1Z2V0bGIoKSB8fFxcbm1tL21lbWNvbnRyb2wuYzo1MTkwOlxcdFxcdCFtZW1jZyB8fCAhY2dyb3VwX3N1YnN5c19vbl9kZmwobWVtb3J5X2NncnBfc3Vic3lzKSlcXG5tbS9tZW1jb250cm9sLmMtNTE5MS1cXHRcXHRnb3RvIG91dDtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01NDMzPXZvaWQgbWVtX2Nncm91cF9za19hbGxvYyhzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTQ0Ny1cXHRcXHRnb3RvIG91dDtcXG5tbS9tZW1jb250cm9sLmM6NTQ0ODpcXHRpZiAoIWNncm91cF9zdWJzeXNfb25fZGZsKG1lbW9yeV9jZ3JwX3N1YnN5cykgXFx1MDAyNlxcdTAwMjYgIW1lbWNnMV90Y3BtZW1fYWN0aXZlKG1lbWNnKSlcXG5tbS9tZW1jb250cm9sLmMtNTQ0OS1cXHRcXHRnb3RvIG91dDtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01NDg5PWJvb2wgbWVtX2Nncm91cF9za19jaGFyZ2UoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgbnJfcGFnZXMsXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTQ5My1cXG5tbS9tZW1jb250cm9sLmM6NTQ5NDpcXHRpZiAoIWNncm91cF9zdWJzeXNfb25fZGZsKG1lbW9yeV9jZ3JwX3N1YnN5cykpXFxubW0vbWVtY29udHJvbC5jLTU0OTUtXFx0XFx0cmV0dXJuIG1lbWNnMV9jaGFyZ2Vfc2ttZW0obWVtY2csIG5yX3BhZ2VzLCBnZnBfbWFzayk7XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NTUxMD12b2lkIG1lbV9jZ3JvdXBfc2tfdW5jaGFyZ2UoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgbnJfcGFnZXMpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTUxMy1cXG5tbS9tZW1jb250cm9sLmM6NTUxNDpcXHRpZiAoIWNncm91cF9zdWJzeXNfb25fZGZsKG1lbW9yeV9jZ3JwX3N1YnN5cykpIHtcXG5tbS9tZW1jb250cm9sLmMtNTUxNS1cXHRcXHRtZW1jZzFfdW5jaGFyZ2Vfc2ttZW0obWVtY2csIG5yX3BhZ2VzKTtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01ODU1PWJvb2wgb2JqX2Nncm91cF9tYXlfenN3YXAoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTU4NTktXFxubW0vbWVtY29udHJvbC5jOjU4NjA6XFx0aWYgKCFjZ3JvdXBfc3Vic3lzX29uX2RmbChtZW1vcnlfY2dycF9zdWJzeXMpKVxcbm1tL21lbWNvbnRyb2wuYy01ODYxLVxcdFxcdHJldHVybiB0cnVlO1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTU4OTY9dm9pZCBvYmpfY2dyb3VwX2NoYXJnZV96c3dhcChzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csIHNpemVfdCBzaXplKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTU4OTktXFxubW0vbWVtY29udHJvbC5jOjU5MDA6XFx0aWYgKCFjZ3JvdXBfc3Vic3lzX29uX2RmbChtZW1vcnlfY2dycF9zdWJzeXMpKVxcbm1tL21lbWNvbnRyb2wuYy01OTAxLVxcdFxcdHJldHVybjtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01OTI4PXZvaWQgb2JqX2Nncm91cF91bmNoYXJnZV96c3dhcChzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csIHNpemVfdCBzaXplKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTU5MzEtXFxubW0vbWVtY29udHJvbC5jOjU5MzI6XFx0aWYgKCFjZ3JvdXBfc3Vic3lzX29uX2RmbChtZW1vcnlfY2dycF9zdWJzeXMpKVxcbm1tL21lbWNvbnRyb2wuYy01OTMzLVxcdFxcdHJldHVybjtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz02MDc1PXZvaWQgbWVtX2Nncm91cF9zaG93X3Byb3RlY3RlZF9tZW1vcnkoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbm1tL21lbWNvbnRyb2wuYy02MDc2LXtcXG5tbS9tZW1jb250cm9sLmM6NjA3NzpcXHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpIHx8ICFjZ3JvdXBfc3Vic3lzX29uX2RmbChtZW1vcnlfY2dycF9zdWJzeXMpKVxcbm1tL21lbWNvbnRyb2wuYy02MDc4LVxcdFxcdHJldHVybjtcXG4tLVxcbm1tL3N3YXAuaD0xMDU9c3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF9zd2FwcGluZXNzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4tLVxcbm1tL3N3YXAuaC0xMDctI2lmZGVmIENPTkZJR19NRU1DR19WMVxcbm1tL3N3YXAuaDoxMDg6XFx0aWYgKCFjZ3JvdXBfc3Vic3lzX29uX2RmbChtZW1vcnlfY2dycF9zdWJzeXMpIFxcdTAwMjZcXHUwMDI2XFxubW0vc3dhcC5oLTEwOS1cXHQgICAgIW1lbV9jZ3JvdXBfZGlzYWJsZWQoKSBcXHUwMDI2XFx1MDAyNiAhbWVtX2Nncm91cF9pc19yb290KG1lbWNnKSlcXG4tLVxcbm1tL3ZtcHJlc3N1cmUuYz0xMDk9dm9pZCB2bXByZXNzdXJlKGdmcF90IGdmcCwgaW50IG9yZGVyLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGJvb2wgdHJlZSxcXG4tLVxcbm1tL3ZtcHJlc3N1cmUuYy0xMjItXFx0ICovXFxubW0vdm1wcmVzc3VyZS5jOjEyMzpcXHRpZiAoY2dyb3VwX3N1YnN5c19vbl9kZmwobWVtb3J5X2NncnBfc3Vic3lzKSA9PSB0cmVlKVxcbm1tL3ZtcHJlc3N1cmUuYy0xMjQtXFx0XFx0cmV0dXJuO1xcbi0tXFxubW0vdm1zY2FuLmM9MjM5PXN0YXRpYyBib29sIHdyaXRlYmFja190aHJvdHRsaW5nX3NhbmUoc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy0yNDMtI2lmZGVmIENPTkZJR19DR1JPVVBfV1JJVEVCQUNLXFxubW0vdm1zY2FuLmM6MjQ0OlxcdGlmIChjZ3JvdXBfc3Vic3lzX29uX2RmbChtZW1vcnlfY2dycF9zdWJzeXMpKVxcbm1tL3Ztc2Nhbi5jLTI0NS1cXHRcXHRyZXR1cm4gdHJ1ZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMDc6MDM6NDQuNTg0Njc5MDUyWiIsIlNlcSI6NDksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE0MTgwNTUyMTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIHRoZSBTd2FwcGluZXNzIFBhdGNoKipcblxuT2theSwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC4gYGNncm91cF9zdWJzeXNfb25fZGZsYCBpcyBhIGtleSBpbmRpY2F0b3IgaGVyZSwgY2hlY2tpbmcgYSBzdGF0aWMga2V5LiBJZiBgQ09ORklHX01FTUNHYCBpcyBlbmFibGVkLCB0aGVuIGBtZW1vcnlfY2dycF9zdWJzeXNgIGlzIGRlZmluZWQuIEFuZCBzaW5jZSBgQ09ORklHX01FTUNHX1YxYCBpcyBkaXNhYmxlZCwgdjEgbWVtb3J5IGNncm91cHMgYXJlIGVmZmVjdGl2ZWx5IG9mZi4gVGhhdCBtZWFucyBtZW1vcnkgY2dyb3VwcyBvbmx5IGV4aXN0IG9uIHRoZSBkZWZhdWx0IGhpZXJhcmNoeSwgd2hpY2ggaXMgY2dyb3VwIHYyLiBUaGVyZWZvcmUsIHRoZSBgY2dyb3VwX3N1YnN5c19vbl9kZmwobWVtb3J5X2NncnBfc3Vic3lzKWAgY2hlY2sgd2lsbCBiZSB0cnVlLiBTbyBgbWVtX2Nncm91cF9zd2FwcGluZXNzYCB3aWxsIHJldHVybiBgdm1fc3dhcHBpbmVzc2AsIGJvdGggYmVmb3JlIGFuZCBhZnRlciB0aGUgcGF0Y2ggZm9yIHRoZSB0eXBpY2FsIGNhc2Ugd2hlcmUgYENPTkZJR19NRU1DRz15YC4gVGh1cywgbm8gY2hhbmdlIGluIGJlaGF2aW9yIHRoZXJlLlxuXG5UaGUgb25seSByZWFsIGNoYW5nZSBJIGNhbiBzZWUgaXMgd2hlbiBgQ09ORklHX01FTUNHPW5gLiBJbiB0aGF0IHNwZWNpZmljIGNhc2UsIGBzY19zd2FwcGluZXNzYCBub3cgYWN0dWFsbHkgcmVzcGVjdHMgYHNjLVx1MDAzZXByb2FjdGl2ZV9zd2FwcGluZXNzYC4gVGhhdCdzIGEgdmVyeSBtaW5vciBjaGFuZ2UsIGFuZCBob25lc3RseSwgd2UgZG9uJ3QgdXN1YWxseSBmdXp6IHdpdGggYENPTkZJR19NRU1DRz1uYC4gSXQncyBub3QgYSBzdGFuZGFyZCBjb25maWd1cmF0aW9uIGZvciBTeXprYWxsZXIuXG5cbkhtbSwgSSBzaG91bGQgZG91YmxlLWNoZWNrIHRvIG1ha2Ugc3VyZSBgc2MtXHUwMDNlcHJvYWN0aXZlX3N3YXBwaW5lc3NgIGlzbid0IHVzZWQgZWxzZXdoZXJlLiBBaCwgeWVzLCBsb29raW5nIGF0IGBtbS92bXNjYW4uY2AsIHRoZSBuZXcgYHNjX3N3YXBwaW5lc3NgIGZ1bmN0aW9uIGlzOlxuXG5gYGBjXG5zdGF0aWMgaW50IHNjX3N3YXBwaW5lc3Moc3RydWN0IHNjYW5fY29udHJvbCAqc2MsIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbntcblx0aWYgKHNjLVx1MDAzZXByb2FjdGl2ZSBcdTAwMjZcdTAwMjYgc2MtXHUwMDNlcHJvYWN0aXZlX3N3YXBwaW5lc3MpXG5cdFx0cmV0dXJuICpzYy1cdTAwM2Vwcm9hY3RpdmVfc3dhcHBpbmVzcztcblx0cmV0dXJuIG1lbV9jZ3JvdXBfc3dhcHBpbmVzcyhtZW1jZyk7XG59XG5gYGBcblxuQmVmb3JlIHRoZSBwYXRjaCwgaWYgYENPTkZJR19NRU1DR2Agd2FzIGRpc2FibGVkLCBgc2Nfc3dhcHBpbmVzc2Agd2FzOlxuXG5gYGBjXG5zdGF0aWMgaW50IHNjX3N3YXBwaW5lc3Moc3RydWN0IHNjYW5fY29udHJvbCAqc2MsIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbntcblx0cmV0dXJuIFJFQURfT05DRSh2bV9zd2FwcGluZXNzKTtcbn1cbmBgYFxuXG5Pa2F5LCBzbyB0aGUgY2hhbmdlIGlzIGlzb2xhdGVkIHRvIHRoaXMgb25lIG1pbm9yIHVzZSBjYXNlLiBOb3csIGdpdmVuIHRoZSBwcm9tcHQncyBjcml0ZXJpYTogXCJSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zLi4uIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMuLi4gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93Li4uIElmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2ggdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXCJcblxuV2hpbGUgaXQgKmRvZXMqIG1vZGlmeSBjb3JlIGtlcm5lbCBsb2dpYyBpbiBgdm1zY2FuLmNgLCB0aGUgY29yZSBsb2dpYyBjaGFuZ2VzIGFyZSBlZmZlY3RpdmVseSBhIHJlZmFjdG9yaW5nIGZvciB0aGUgZGVmYXVsdCBgQ09ORklHX01FTUNHPXlgICh0aGUgbm9ybWFsIGNvbmZpZ3VyYXRpb24gdGhhdCB3ZSBmdXp6KS4gVGhlIGZ1bmN0aW9uYWwgY2hhbmdlIGZvciBgQ09ORklHX01FTUNHPW5gIGlzIHNvIG1pbmltYWwgYW5kIG9ic2N1cmUgdGhhdCBpdCBkb2Vzbid0IHdhcnJhbnQgZm9jdXNlZCBmdXp6aW5nIGVmZm9ydHMuXG5cbkknbSBjb21mb3J0YWJsZSB3aXRoIHRoZSBgV29ydGhGdXp6aW5nPWZhbHNlYC4gVGhlIHJlYXNvbmluZyBpcyB0aGF0IHRoZSBwYXRjaCBpcyBhIHJlZmFjdG9yaW5nIHRvIGVzc2VudGlhbGx5IGhpZGUgdGhlIGBzd2FwcGluZXNzYCBmaWVsZCBpbiBgc3RydWN0IG1lbV9jZ3JvdXBgIHVuZGVyIGBDT05GSUdfTUVNQ0dfVjFgLCB3aGljaCBzYXZlcyBtZW1vcnkgd2hlbiBjZ3JvdXAgdjEgaXMgZGlzYWJsZWQuIEZvciB0aGUgc3RhbmRhcmQgYENPTkZJR19NRU1DRz15YCBjb25maWd1cmF0aW9uLCB0aGVyZSBpcyB6ZXJvIGNoYW5nZSBpbiBiZWhhdmlvci4gVGhlICpvbmx5KiBmdW5jdGlvbmFsIGNoYW5nZSBpcyBhIHNtYWxsIGZpeCBmb3IgYENPTkZJR19NRU1DRz1uYCwgc28gdGhhdCBwcm9hY3RpdmUgbm9kZSByZWNsYWltIHZpYSBzeXNmcyBub3cgcmVzcGVjdHMgdGhlIHVzZXItcHJvdmlkZWQgYHN3YXBwaW5lc3NgIHBhcmFtZXRlci4gVGhpcyBpcyBhIHZlcnkgbWlub3IgZWRnZSBjYXNlIGluIGEgbm9uLWRlZmF1bHQgY29uZmlndXJhdGlvbiBhbmQgZG9lc24ndCB3YXJyYW50IGZvY3VzZWQgZnV6emluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzc2NzUsIk91dHB1dFRva2VucyI6MTU5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODMwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDA3OjAzOjU4Ljc2NTIzNjY3MloiLCJTZXEiOjUwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwMjMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGlzIHByaW1hcmlseSBhIHJlZmFjdG9yaW5nIHRvIGhpZGUgdGhlIGBzd2FwcGluZXNzYCBmaWVsZCBpbiBgc3RydWN0IG1lbV9jZ3JvdXBgIHVuZGVyIGBDT05GSUdfTUVNQ0dfVjFgIHRvIHNhdmUgbWVtb3J5IHdoZW4gY2dyb3VwIHYxIGlzIGRpc2FibGVkLiBGb3IgdGhlIGRlZmF1bHQgYENPTkZJR19NRU1DRz15YCBjb25maWd1cmF0aW9uLCB0aGVyZSBpcyBubyBmdW5jdGlvbmFsIGNoYW5nZSBpbiBiZWhhdmlvci4gVGhlIG9ubHkgZnVuY3Rpb25hbCBjaGFuZ2UgaXMgYSBtaW5vciBmaXggZm9yIGBDT05GSUdfTUVNQ0c9bmAgd2hlcmUgcHJvYWN0aXZlIG5vZGUgcmVjbGFpbSB2aWEgc3lzZnMgbm93IHJlc3BlY3RzIHRoZSB1c2VyLXByb3ZpZGVkIGBzd2FwcGluZXNzYCBwYXJhbWV0ZXIgaW5zdGVhZCBvZiBpZ25vcmluZyBpdC4gVGhpcyBpcyBhIHZlcnkgbWlub3IgZWRnZSBjYXNlIGluIGEgbm9uLWRlZmF1bHQgY29uZmlnIGFuZCBkb2VzIG5vdCB3YXJyYW50IGZvY3VzZWQgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGlzIHByaW1hcmlseSBhIHJlZmFjdG9yaW5nIHRvIGhpZGUgdGhlIGBzd2FwcGluZXNzYCBmaWVsZCBpbiBgc3RydWN0IG1lbV9jZ3JvdXBgIHVuZGVyIGBDT05GSUdfTUVNQ0dfVjFgIHRvIHNhdmUgbWVtb3J5IHdoZW4gY2dyb3VwIHYxIGlzIGRpc2FibGVkLiBGb3IgdGhlIGRlZmF1bHQgYENPTkZJR19NRU1DRz15YCBjb25maWd1cmF0aW9uLCB0aGVyZSBpcyBubyBmdW5jdGlvbmFsIGNoYW5nZSBpbiBiZWhhdmlvci4gVGhlIG9ubHkgZnVuY3Rpb25hbCBjaGFuZ2UgaXMgYSBtaW5vciBmaXggZm9yIGBDT05GSUdfTUVNQ0c9bmAgd2hlcmUgcHJvYWN0aXZlIG5vZGUgcmVjbGFpbSB2aWEgc3lzZnMgbm93IHJlc3BlY3RzIHRoZSB1c2VyLXByb3ZpZGVkIGBzd2FwcGluZXNzYCBwYXJhbWV0ZXIgaW5zdGVhZCBvZiBpZ25vcmluZyBpdC4gVGhpcyBpcyBhIHZlcnkgbWlub3IgZWRnZSBjYXNlIGluIGEgbm9uLWRlZmF1bHQgY29uZmlnIGFuZCBkb2VzIG5vdCB3YXJyYW50IGZvY3VzZWQgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowbtrcb[1] Phase: Running StartedAt: 2026-07-24 07:04:11 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbtrcb[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-07-24 07:04:11 +0000 UTC FinishedAt: 2026-07-24 07:04:34 +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,}