Name: series-workflow59ft2 Phase: Succeeded StartedAt: 2026-07-26 10:29:36 +0000 UTC FinishedAt: 2026-07-26 14:56:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow59ft2[0] Phase: Succeeded StartedAt: 2026-07-26 10:29:36 +0000 UTC FinishedAt: 2026-07-26 10:57:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow59ft2[0].run-triage Phase: Succeeded StartedAt: 2026-07-26 10:29:36 +0000 UTC FinishedAt: 2026-07-26 10:57:09 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "2d66a033864e27ab8d5e44cb36f31d9d2413bee4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INTEL_TDX_HOST", "KVM_INTEL_TDX" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "2d66a033864e27ab8d5e44cb36f31d9d2413bee4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INTEL_TDX_HOST", "KVM_INTEL_TDX" ], "series_id": "6baf0896-34df-4358-ba93-e5b0fb6884bd" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "tdx_pamt_get", "tdx_pamt_put", "tdx_topup_pamt_cache", "tdx_free_pamt_cache", "tdx_alloc_control_page", "tdx_free_control_page" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDEwOjU1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lOVEVMX1REWF9IT1NUJiMzNDssCiAgICAmIzM0O0tWTV9JTlRFTF9URFgmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0ZHhfcGFtdF9nZXQmIzM0OywKICAgICYjMzQ7dGR4X3BhbXRfcHV0JiMzNDssCiAgICAmIzM0O3RkeF90b3B1cF9wYW10X2NhY2hlJiMzNDssCiAgICAmIzM0O3RkeF9mcmVlX3BhbXRfY2FjaGUmIzM0OywKICAgICYjMzQ7dGR4X2FsbG9jX2NvbnRyb2xfcGFnZSYjMzQ7LAogICAgJiMzNDt0ZHhfZnJlZV9jb250cm9sX3BhZ2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBEeW5hbWljIFBoeXNpY2FsIEFkZHJlc3MgTWV0YWRhdGEgVGFibGUgKFBBTVQpIHN1cHBvcnQgZm9yIEludGVsIFREWCBpbiBLVk0veDg2LiBJdCBhZGRzIGZ1bmN0aW9uYWwgY29yZSBrZXJuZWwgbG9naWMgdG8gZHluYW1pY2FsbHkgYWxsb2NhdGUgYW5kIGZyZWUgUEFNVCBtZW1vcnkgcGFnZXMgZm9yIFREWCBndWVzdHMsIG1vZGlmeWluZyBLVk0gTU1VIGFuZCBURFggaW5pdGlhbGl6YXRpb24gcGF0aHMuIFRoaXMgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBydW5uaW5nIG9uIFREWC1jYXBhYmxlIGhhcmR3YXJlIChlLmcuLCBHQ1AgQzMgaW5zdGFuY2VzKSBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbWVtb3J5IG1hbmFnZW1lbnQgY29ycmVjdG5lc3MgYW5kIHByZXZlbnQgbGVha3Mgb3IgY3Jhc2hlcyBpbiB0aGUgVERYIGhvc3Qgc3VwcG9ydC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxMDo1NTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGNlZDI0MTAyYjEyNGM4OWE1NjYyN2U3YzlmMWEzYmE4YTdjZmYzOWFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEp1bCAyNiAxMDo1NToyMCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dCBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0XG5pbmRleCBiNTQ5M2E3ZjhmMjI4MS4uYTBhNzY3MDI0NmJjNTggMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHRcbkBAIC03NTEyLDYgJiM0Mzs3NTEyLDE2IEBAIEtlcm5lbCBwYXJhbWV0ZXJzXG4gXG4gXHR0ZGZ4PVx0XHRbSFcsRFJNXVxuIFxuJiM0MztcdHRkeF9kcGFtdD1cbiYjNDM7XHRcdFx0W1g4Nl0gQ29udHJvbHMgd2hldGhlciBURFggd2lsbCB1c2UgRHluYW1pYyBQQU1UXG4mIzQzO1x0XHRcdHRvIHNhdmUgbWVtb3J5LCB3aGVuIHN1cHBvcnRlZC5cbiYjNDM7XG4mIzQzO1x0XHRcdFZhbGlkIHBhcmFtZXRlcnM6IFwmIzM0O29uXCYjMzQ7LCBcJiMzNDtvZmZcJiMzNDtcbiYjNDM7XHRcdFx0RGVmYXVsdDogXCYjMzQ7b2ZmXCYjMzQ7XG4mIzQzO1xuJiM0MztcdFx0XHRGb3IgZGV0YWlscyBzZWU6XG4mIzQzO1x0XHRcdERvY3VtZW50YXRpb24vYXJjaC94ODYvdGR4LnJzdFxuJiM0MztcbiBcdHRlc3Rfc3VzcGVuZD1cdFtTVVNQRU5EXVxuIFx0XHRcdEZvcm1hdDogeyBcJiMzNDttZW1cJiMzNDsgfCBcJiMzNDtzdGFuZGJ5XCYjMzQ7IHwgXCYjMzQ7ZnJlZXplXCYjMzQ7IH1bLE5dXG4gXHRcdFx0U3BlY2lmeSBcJiMzNDttZW1cJiMzNDsgKGZvciBTdXNwZW5kLXRvLVJBTSkgb3IgXCYjMzQ7c3RhbmRieVwmIzM0OyAoZm9yXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hcmNoL3g4Ni90ZHgucnN0IGIvRG9jdW1lbnRhdGlvbi9hcmNoL3g4Ni90ZHgucnN0XG5pbmRleCAzMzAzNDk5YWQ0YzZmOC4uYTFjMjMwOTIzMDU4MDcgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2FyY2gveDg2L3RkeC5yc3RcbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vYXJjaC94ODYvdGR4LnJzdFxuQEAgLTIwMCw2ICYjNDM7MjAwLDM0IEBAIHJlZmxlY3RzIHRoZSBUQ0Igb2YgdGhlIGN1cnJlbnRseSBydW5uaW5nIFREWCBtb2R1bGUgYW5kIHRoZXJlZm9yZVxuIGNoYW5nZXMgYWZ0ZXIgYW4gdXBkYXRlLiBCeSBjb250cmFzdCwgVEVFX1RDQl9TVk4gcmVmbGVjdHMgdGhlIFRDQiBhdCBURFxuIGxhdW5jaCB0aW1lIGFuZCBpcyBub3QgYWZmZWN0ZWQuXG4gXG4mIzQzO0R5bmFtaWMgUEFNVFxuJiM0MzstLS0tLS0tLS0tLS1cbiYjNDM7XG4mIzQzO1BoeXNpY2FsIEFkZHJlc3MgTWV0YWRhdGEgVGFibGUgKFBBTVQpIGlzIG1lbW9yeSB0aGF0IHRoZSBURFggbW9kdWxlIG5lZWRzXG4mIzQzO3RvIGtlZXAgZGF0YSBhYm91dCBlYWNoIHBhZ2UgKHRoaW5rIGxpa2Ugc3RydWN0IHBhZ2UpLiBJdCBuZWVkcyB0byBiZSBoYW5kZWRcbiYjNDM7dG8gdGhlIFREWCBtb2R1bGUgZm9yIGl0cyBleGNsdXNpdmUgdXNlLiBGb3Igbm9ybWFsIFBBTVQsIHRoaXMgaXMgaW5zdGFsbGVkXG4mIzQzO3doZW4gdGhlIFREWCBtb2R1bGUgaXMgZmlyc3QgbG9hZGVkIGFuZCBjb21lcyB0byBhYm91dCAwLjQlIG9mIHN5c3RlbSBtZW1vcnkuXG4mIzQzO1xuJiM0MztEeW5hbWljIFBBTVQgaXMgYSBURFggbW9kdWxlIGZlYXR1cmUgdGhhdCBhbGxvd3MgVk1NIHRvIGFsbG9jYXRlIHBhcnQgb2YgdGhlXG4mIzQzO1BBTVQgYXMgbmVlZGVkICh0aGUgcGFydHMgZm9yIHRyYWNraW5nIDRLQiBzaXplIHBhZ2VzKS4gVGhlIG90aGVyIHBhZ2Ugc2l6ZXNcbiYjNDM7KDFHQiBhbmQgMk1CKSBhcmUgc3RpbGwgYWxsb2NhdGVkIHN0YXRpY2FsbHkgYXQgdGhlIHRpbWUgb2YgVERYIG1vZHVsZVxuJiM0Mztpbml0aWFsaXphdGlvbi4gVGhpcyByZWR1Y2VzIHRoZSBhbW91bnQgb2YgbWVtb3J5IHRoYXQgVERYIHVzZXMgd2hpbGUgVERzIGFyZVxuJiM0Mztub3QgaW4gdXNlLlxuJiM0MztcbiYjNDM7V2hlbiBEeW5hbWljIFBBTVQgaXMgaW4gdXNlLCBkbWVzZyBzaG93cyBpdCBsaWtlOjpcbiYjNDM7XG4mIzQzOyAgWy4uXSB2aXJ0L3RkeDogRW5hYmxlIER5bmFtaWMgUEFNVFxuJiM0MzsgIFsuLl0gdmlydC90ZHg6IDEwMDkyIEtCIGFsbG9jYXRlZCBmb3IgUEFNVFxuJiM0MzsgIFsuLl0gdmlydC90ZHg6IFREWC1Nb2R1bGUgaW5pdGlhbGl6ZWRcbiYjNDM7XG4mIzQzO0R5bmFtaWMgUEFNVCBpcyBvbmx5IGVuYWJsZWQgd2hlbiBzdXBwb3J0ZWQgYW5kIHRoZSBgYHRkeF9kcGFtdD1gYCBrZXJuZWxcbiYjNDM7cGFyYW1ldGVyIGlzIHNldCB0byBcJiMzNDtvblwmIzM0Oy4gVGhlIGZlYXR1cmUgaXMgb2ZmIGJ5IGRlZmF1bHQgYmVjYXVzZSBURFggbW9kdWxlXG4mIzQzO2ludGVybmFsIGRldGFpbHMgcHJldmVudCBEeW5hbWljIFBBTVQgZnJvbSB3b3JraW5nIG9uIGFsbCBrZXlpZCBwYXJ0aXRpb25pbmdcbiYjNDM7Y29uZmlndXJhdGlvbnMuIFdoZW4gdGhlIFREWCBtb2R1bGUgaXMgZml4ZWQgdG8gaW5jbHVkZSB0aGVzZSBjb25zdHJhaW50cyBpblxuJiM0MztpdHMgZW51bWVyYXRpb24gb2YgRHluYW1pYyBQQU1UIHN1cHBvcnQsIGtlcm5lbCBzdXBwb3J0IGNhbiBiZSBjaGFuZ2VkIHRvXG4mIzQzO2RlZmF1bHQgb24uIEZvciBtb3JlIGluZm9ybWF0aW9uLCBjb25zdWx0IHRoZSBJbnRlbCBURFggZG9jdW1lbnRhdGlvbiBhYm91dFxuJiM0MztEeW5hbWljIFBBTVQuXG4mIzQzO1xuIFREWCBJbnRlcmFjdGlvbiB0byBPdGhlciBLZXJuZWwgQ29tcG9uZW50c1xuIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oXG5pbmRleCA4M2RjNTA4NjEzOGIzOS4uNTg4NTYzZGZlODhkNTcgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oXG5AQCAtOTgsNiAmIzQzOzk4LDcgQEAgS1ZNX1g4Nl9PUF9PUFRJT05BTF9SRVQwKHRkcF9oYXNfc21lcClcbiBLVk1fWDg2X09QKGxvYWRfbW11X3BnZClcbiBLVk1fWDg2X09QX09QVElPTkFMX1JFVDAoc2V0X2V4dGVybmFsX3NwdGUpXG4gS1ZNX1g4Nl9PUF9PUFRJT05BTChmcmVlX2V4dGVybmFsX3NwdClcbiYjNDM7S1ZNX1g4Nl9PUF9PUFRJT05BTF9SRVQwKHRvcHVwX2V4dGVybmFsX2NhY2hlKVxuIEtWTV9YODZfT1AoaGFzX3diaW52ZF9leGl0KVxuIEtWTV9YODZfT1AoZ2V0X2wyX3RzY19vZmZzZXQpXG4gS1ZNX1g4Nl9PUChnZXRfbDJfdHNjX211bHRpcGxpZXIpXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbmluZGV4IDVmNmMxY2U5NjczYjdmLi4wZGJmNjU2NGRkMGM1MSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbkBAIC0xOTIyLDYgJiM0MzsxOTIyLDcgQEAgc3RydWN0IGt2bV94ODZfb3BzIHtcbiBcdC8qIFVwZGF0ZSBleHRlcm5hbCBwYWdlIHRhYmxlcyBmb3IgcGFnZSB0YWJsZSBhYm91dCB0byBiZSBmcmVlZC4gKi9cbiBcdHZvaWQgKCpmcmVlX2V4dGVybmFsX3NwdCkoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcCk7XG4gXG4mIzQzO1x0aW50ICgqdG9wdXBfZXh0ZXJuYWxfY2FjaGUpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IG1pbl9ucl9zcHRzKTtcbiBcbiBcdGJvb2wgKCpoYXNfd2JpbnZkX2V4aXQpKHZvaWQpO1xuIFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RkeC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4LmhcbmluZGV4IDg5ZTk3ZDU3NjFkODllLi43OTEwOTAxYTdiYTIxYiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RkeC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZHguaFxuQEAgLTM2LDYgJiM0MzszNiw3IEBAXG4gLyogQml0IGRlZmluaXRpb25zIG9mIFREWF9GRUFUVVJFUzAgbWV0YWRhdGEgZmllbGQgKi9cbiAjZGVmaW5lIFREWF9GRUFUVVJFUzBfVERfUFJFU0VSVklOR1x0QklUX1VMTCgxKVxuICNkZWZpbmUgVERYX0ZFQVRVUkVTMF9OT19SQlBfTU9EXHRCSVRfVUxMKDE4KVxuJiM0MzsjZGVmaW5lIFREWF9GRUFUVVJFUzBfRFlOQU1JQ19QQU1UXHRCSVRfVUxMKDM2KVxuIFxuICNpZm5kZWYgX19BU1NFTUJMRVJfX1xuIFxuQEAgLTExOCwxMiAmIzQzOzExOSwzNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgdGR4X3N1cHBvcnRzX3J1bnRpbWVfdXBkYXRlKGNvbnN0IHN0cnVjdCB0ZHhfc3lzX2luZm8gKnN5c2luZlxuIFx0cmV0dXJuIHN5c2luZm8tXHUwMDNlZmVhdHVyZXMudGR4X2ZlYXR1cmVzMCBcdTAwMjYgVERYX0ZFQVRVUkVTMF9URF9QUkVTRVJWSU5HO1xuIH1cbiBcbiYjNDM7Ym9vbCB0ZHhfc3VwcG9ydHNfZHluYW1pY19wYW10KGNvbnN0IHN0cnVjdCB0ZHhfc3lzX2luZm8gKnN5c2luZm8pO1xuJiM0MztcbiYjNDM7LyogU2ltcGxlIHN0cnVjdHVyZSBmb3IgcHJlLWFsbG9jYXRpbmcgRHluYW1pYyBQQU1UIHBhZ2VzIG91dHNpZGUgb2Ygc3BpbmxvY2tzLiAqL1xuJiM0MztzdHJ1Y3QgdGR4X3BhbXRfY2FjaGUge1xuJiM0MztcdHN0cnVjdCBsaXN0X2hlYWQgcGFnZV9saXN0O1xuJiM0MztcdGludCBjbnQ7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgdGR4X2luaXRfcGFtdF9jYWNoZShzdHJ1Y3QgdGR4X3BhbXRfY2FjaGUgKmNhY2hlKVxuJiM0Mzt7XG4mIzQzO1x0SU5JVF9MSVNUX0hFQUQoXHUwMDI2Y2FjaGUtXHUwMDNlcGFnZV9saXN0KTtcbiYjNDM7XHRjYWNoZS1cdTAwM2VjbnQgPSAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIHRkeF9mcmVlX3BhbXRfY2FjaGUoc3RydWN0IHRkeF9wYW10X2NhY2hlICpjYWNoZSk7XG4mIzQzO2ludCB0ZHhfdG9wdXBfcGFtdF9jYWNoZShzdHJ1Y3QgdGR4X3BhbXRfY2FjaGUgKmNhY2hlLCB1bnNpZ25lZCBsb25nIG5wYWdlcyk7XG4mIzQzO2ludCB0ZHhfcGFtdF9nZXQoa3ZtX3Bmbl90IHBmbiwgc3RydWN0IHRkeF9wYW10X2NhY2hlICpjYWNoZSk7XG4mIzQzO3ZvaWQgdGR4X3BhbXRfcHV0KGt2bV9wZm5fdCBwZm4pO1xuJiM0MztcbiBpbnQgdGR4X2d1ZXN0X2tleWlkX2FsbG9jKHZvaWQpO1xuIHUzMiB0ZHhfZ2V0X25yX2d1ZXN0X2tleWlkcyh2b2lkKTtcbiB2b2lkIHRkeF9ndWVzdF9rZXlpZF9mcmVlKHVuc2lnbmVkIGludCBrZXlpZCk7XG4gXG4gdm9pZCB0ZHhfcXVpcmtfcmVzZXRfcGFkZHIodW5zaWduZWQgbG9uZyBiYXNlLCB1bnNpZ25lZCBsb25nIHNpemUpO1xuIFxuJiM0MzsvKiBOdW1iZXIgb2YgUEFNVCBwYWdlcyB0byBiZSBwcm92aWRlZCB0byBURFggbW9kdWxlIHBlciAyTUIgcmVnaW9uIG9mIFBBICovXG4mIzQzOyNkZWZpbmUgVERYX0RQQU1UX0VOVFJZX1BBR0VfQ05UIDJcbiYjNDM7XG4mIzQzO3N0cnVjdCBwYWdlICp0ZHhfYWxsb2NfY29udHJvbF9wYWdlKHZvaWQpO1xuJiM0Mzt2b2lkIHRkeF9mcmVlX2NvbnRyb2xfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSk7XG4mIzQzO1xuIHN0cnVjdCB0ZHhfdGQge1xuIFx0LyogVEQgcm9vdCBzdHJ1Y3R1cmU6ICovXG4gXHRzdHJ1Y3QgcGFnZSAqdGRyX3BhZ2U7XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4X2dsb2JhbF9tZXRhZGF0YS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4X2dsb2JhbF9tZXRhZGF0YS5oXG5pbmRleCA0MTE1MGQ1NDY1ODljMS4uMmE0MjU1MWZjMzNjZDYgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZHhfZ2xvYmFsX21ldGFkYXRhLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RkeF9nbG9iYWxfbWV0YWRhdGEuaFxuQEAgLTIxLDYgJiM0MzsyMSw5IEBAIHN0cnVjdCB0ZHhfc3lzX2luZm9fdGRtciB7XG4gXHR1MTYgcGFtdF80a19lbnRyeV9zaXplO1xuIFx0dTE2IHBhbXRfMm1fZW50cnlfc2l6ZTtcbiBcdHUxNiBwYW10XzFnX2VudHJ5X3NpemU7XG4mIzQzO1xuJiM0MztcdC8qIE9wdGlvbmFsIG1ldGFkYXRhLCBpZiBEeW5hbWljIFBBTVQgaXMgc3VwcG9ydGVkICovXG4mIzQzO1x0dTggIHBhbXRfcGFnZV9iaXRtYXBfZW50cnlfYml0cztcbiB9O1xuIFxuIHN0cnVjdCB0ZHhfc3lzX2luZm9fdGRfY3RybCB7XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL21tdS9tbXUuYyBiL2FyY2gveDg2L2t2bS9tbXUvbW11LmNcbmluZGV4IDIzNGQwYTk1YWJmNTM0Li42ZGFiOTk2NTRmMTcwMiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9tbXUvbW11LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9tbXUvbW11LmNcbkBAIC02MTQsNiAmIzQzOzYxNCwxMCBAQCBzdGF0aWMgaW50IG1tdV90b3B1cF9tZW1vcnlfY2FjaGVzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBtYXliZV9pbmRpcmVjdClcbiBcdFx0XHRcdFx0ICAgICAgIFBUNjRfUk9PVF9NQVhfTEVWRUwpO1xuIFx0XHRpZiAocilcbiBcdFx0XHRyZXR1cm4gcjtcbiYjNDM7XG4mIzQzO1x0XHRyID0ga3ZtX3g4Nl9jYWxsKHRvcHVwX2V4dGVybmFsX2NhY2hlKSh2Y3B1LCBQVDY0X1JPT1RfTUFYX0xFVkVMKTtcbiYjNDM7XHRcdGlmIChyKVxuJiM0MztcdFx0XHRyZXR1cm4gcjtcbiBcdH1cbiBcdHIgPSBrdm1fbW11X3RvcHVwX21lbW9yeV9jYWNoZShcdTAwMjZ2Y3B1LVx1MDAzZWFyY2gubW11X3NoYWRvd19wYWdlX2NhY2hlLFxuIFx0XHRcdFx0ICAgICAgIFBUNjRfUk9PVF9NQVhfTEVWRUwpO1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvdGR4LmMgYi9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jXG5pbmRleCA1NDViMDNkOWQxMGI4MS4uMDk1NzMxMTI1NDBlOTggMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jXG5AQCAtMzYyLDcgJiM0MzszNjIsNyBAQCBzdGF0aWMgdm9pZCB0ZHhfcmVjbGFpbV9jb250cm9sX3BhZ2Uoc3RydWN0IHBhZ2UgKmN0cmxfcGFnZSlcbiBcdGlmICh0ZHhfcmVjbGFpbV9wYWdlKGN0cmxfcGFnZSkpXG4gXHRcdHJldHVybjtcbiBcbi1cdF9fZnJlZV9wYWdlKGN0cmxfcGFnZSk7XG4mIzQzO1x0dGR4X2ZyZWVfY29udHJvbF9wYWdlKGN0cmxfcGFnZSk7XG4gfVxuIFxuIHN0cnVjdCB0ZHhfZmx1c2hfdnBfYXJnIHtcbkBAIC01ODksNyAmIzQzOzU4OSw3IEBAIHN0YXRpYyB2b2lkIHRkeF9yZWNsYWltX3RkX2NvbnRyb2xfcGFnZXMoc3RydWN0IGt2bSAqa3ZtKVxuIFxuIFx0dGR4X3F1aXJrX3Jlc2V0X3BhZGRyKHBhZ2VfdG9fcGh5cyhrdm1fdGR4LVx1MDAzZXRkLnRkcl9wYWdlKSwgUEFHRV9TSVpFKTtcbiBcbi1cdF9fZnJlZV9wYWdlKGt2bV90ZHgtXHUwMDNldGQudGRyX3BhZ2UpO1xuJiM0MztcdHRkeF9mcmVlX2NvbnRyb2xfcGFnZShrdm1fdGR4LVx1MDAzZXRkLnRkcl9wYWdlKTtcbiBcdGt2bV90ZHgtXHUwMDNldGQudGRyX3BhZ2UgPSBOVUxMO1xuIH1cbiBcbkBAIC02ODEsNiAmIzQzOzY4MSw4IEBAIGludCB0ZHhfdmNwdV9jcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0aWYgKCFpcnFjaGlwX3NwbGl0KHZjcHUtXHUwMDNla3ZtKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4mIzQzO1x0dGR4X2luaXRfcGFtdF9jYWNoZShcdTAwMjZ0ZHgtXHUwMDNlcGFtdF9jYWNoZSk7XG4mIzQzO1xuIFx0ZnBzdGF0ZV9zZXRfY29uZmlkZW50aWFsKFx1MDAyNnZjcHUtXHUwMDNlYXJjaC5ndWVzdF9mcHUpO1xuIFx0dmNwdS1cdTAwM2VhcmNoLmFwaWMtXHUwMDNlZ3Vlc3RfYXBpY19wcm90ZWN0ZWQgPSB0cnVlO1xuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2dGR4LVx1MDAzZXZ0LnBpX3dha2V1cF9saXN0KTtcbkBAIC04NjYsNiAmIzQzOzg2OCw4IEBAIHZvaWQgdGR4X3ZjcHVfZnJlZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRzdHJ1Y3QgdmNwdV90ZHggKnRkeCA9IHRvX3RkeCh2Y3B1KTtcbiBcdGludCBpO1xuIFxuJiM0MztcdHRkeF9mcmVlX3BhbXRfY2FjaGUoXHUwMDI2dGR4LVx1MDAzZXBhbXRfY2FjaGUpO1xuJiM0MztcbiBcdGlmICh2Y3B1LVx1MDAzZWNwdSAhPSAtMSkge1xuIFx0XHRLVk1fQlVHX09OKHRkeC1cdTAwM2VzdGF0ZSA9PSBWQ1BVX1REX1NUQVRFX0lOSVRJQUxJWkVELCB2Y3B1LVx1MDAzZWt2bSk7XG4gXHRcdHRkeF9mbHVzaF92cF9vbl9jcHUodmNwdSk7XG5AQCAtMTYyMSw2ICYjNDM7MTYyNSwxNyBAQCB2b2lkIHRkeF9sb2FkX21tdV9wZ2Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBocGFfdCByb290X2hwYSwgaW50IHBnZF9sZXZlbClcbiBcdHRkX3ZtY3Nfd3JpdGU2NCh0b190ZHgodmNwdSksIFNIQVJFRF9FUFRfUE9JTlRFUiwgcm9vdF9ocGEpO1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCB0ZHhfdG9wdXBfZXh0ZXJuYWxfcGFtdF9jYWNoZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBtaW5fbnJfc3B0cylcbiYjNDM7e1xuJiM0MztcdC8qXG4mIzQzO1x0ICogTWludXMgb25lIHBhZ2UgdG8gZXhjbHVkZSB0aGUgcm9vdCBTUFQsIGJ1dCBwbHVzIG9uZSBwYWdlIGZvciBhXG4mIzQzO1x0ICogcG9zc2libGUgNEtCIHByaXZhdGUgbWFwcGluZy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRtaW5fbnJfc3B0cyAmIzQzOz0gLTEgJiM0MzsgMTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHRkeF90b3B1cF9wYW10X2NhY2hlKFx1MDAyNnRvX3RkeCh2Y3B1KS1cdTAwM2VwYW10X2NhY2hlLCBtaW5fbnJfc3B0cyk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCB0ZHhfbWVtX3BhZ2VfYWRkKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLCBlbnVtIHBnX2xldmVsIGxldmVsLFxuIFx0XHRcdCAgICBrdm1fcGZuX3QgcGZuKVxuIHtcbkBAIC0xNjc5LDE2ICYjNDM7MTY5NCwyOCBAQCBzdGF0aWMgc3RydWN0IHBhZ2UgKnRkeF9zcHRlX3RvX3NlcHRfcHQoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4sXG4gc3RhdGljIGludCB0ZHhfc2VwdF9tYXBfbm9ubGVhZl9zcHRlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLFxuIFx0XHRcdFx0ICAgICBlbnVtIHBnX2xldmVsIGxldmVsLCB1NjQgbmV3X3NwdGUpXG4ge1xuJiM0MztcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdSA9IGt2bV9nZXRfcnVubmluZ192Y3B1KCk7XG4gXHRncGFfdCBncGEgPSBnZm5fdG9fZ3BhKGdmbik7XG4gXHR1NjQgZXJyLCBlbnRyeSwgbGV2ZWxfc3RhdGU7XG4gXHRzdHJ1Y3QgcGFnZSAqc2VwdF9wdDtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAoS1ZNX0JVR19PTighdmNwdSwga3ZtKSlcbiYjNDM7XHRcdHJldHVybiAtRUlPO1xuIFxuIFx0c2VwdF9wdCA9IHRkeF9zcHRlX3RvX3NlcHRfcHQoa3ZtLCBnZm4sIG5ld19zcHRlLCBsZXZlbCk7XG4gXHRpZiAoIXNlcHRfcHQpXG4gXHRcdHJldHVybiAtRUlPO1xuIFxuJiM0MztcdHJldCA9IHRkeF9wYW10X2dldChwYWdlX3RvX3BmbihzZXB0X3B0KSwgXHUwMDI2dG9fdGR4KHZjcHUpLVx1MDAzZXBhbXRfY2FjaGUpO1xuJiM0MztcdGlmIChLVk1fQlVHX09OKHJldCwga3ZtKSlcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuIFx0ZXJyID0gdGRoX21lbV9zZXB0X2FkZChcdTAwMjZ0b19rdm1fdGR4KGt2bSktXHUwMDNldGQsIGdwYSwgbGV2ZWwsIHNlcHRfcHQsXG4gXHRcdFx0ICAgICAgIFx1MDAyNmVudHJ5LCBcdTAwMjZsZXZlbF9zdGF0ZSk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdHRkeF9wYW10X3B1dChwYWdlX3RvX3BmbihzZXB0X3B0KSk7XG4mIzQzO1xuIFx0aWYgKHVubGlrZWx5KHRkeF9vcGVyYW5kX2J1c3koZXJyKSkpXG4gXHRcdHJldHVybiAtRUJVU1k7XG4gXG5AQCAtMTcwMSw4ICYjNDM7MTcyOCwxMyBAQCBzdGF0aWMgaW50IHRkeF9zZXB0X21hcF9ub25sZWFmX3NwdGUoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4sXG4gc3RhdGljIGludCB0ZHhfc2VwdF9tYXBfbGVhZl9zcHRlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLCBlbnVtIHBnX2xldmVsIGxldmVsLFxuIFx0XHRcdFx0ICB1NjQgbmV3X3NwdGUpXG4ge1xuJiM0MztcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdSA9IGt2bV9nZXRfcnVubmluZ192Y3B1KCk7XG4gXHRzdHJ1Y3Qga3ZtX3RkeCAqa3ZtX3RkeCA9IHRvX2t2bV90ZHgoa3ZtKTtcbiBcdGt2bV9wZm5fdCBwZm4gPSBzcHRlX3RvX3BmbihuZXdfc3B0ZSk7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKEtWTV9CVUdfT04oIXZjcHUsIGt2bSkpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTztcbiBcbiBcdC8qIFRPRE86IGhhbmRsZSBsYXJnZSBwYWdlcy4gKi9cbiBcdGlmIChLVk1fQlVHX09OKGxldmVsICE9IFBHX0xFVkVMXzRLLCBrdm0pKVxuQEAgLTE3MTAsNiAmIzQzOzE3NDIsMTAgQEAgc3RhdGljIGludCB0ZHhfc2VwdF9tYXBfbGVhZl9zcHRlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLCBlbnVtIHBnX2xldmVsIGxldmVcbiBcbiBcdFdBUk5fT05fT05DRSgobmV3X3NwdGUgXHUwMDI2IFZNWF9FUFRfUldYX01BU0spICE9IFZNWF9FUFRfUldYX01BU0spO1xuIFxuJiM0MztcdHJldCA9IHRkeF9wYW10X2dldChwZm4sIFx1MDAyNnRvX3RkeCh2Y3B1KS1cdTAwM2VwYW10X2NhY2hlKTtcbiYjNDM7XHRpZiAoS1ZNX0JVR19PTihyZXQsIGt2bSkpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiBcdC8qXG4gXHQgKiBFbnN1cmUgcHJlX2ZhdWx0X2FsbG93ZWQgaXMgcmVhZCBieSBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnkoKVxuIFx0ICogYmVmb3JlIGt2bV90ZHgtXHUwMDNlc3RhdGUuICBVc2Vyc3BhY2UgbXVzdCBub3QgYmUgYWxsb3dlZCB0byBwcmUtZmF1bHRcbkBAIC0xNzIyLDEwICYjNDM7MTc1OCwxNSBAQCBzdGF0aWMgaW50IHRkeF9zZXB0X21hcF9sZWFmX3NwdGUoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4sIGVudW0gcGdfbGV2ZWwgbGV2ZVxuIFx0ICogSWYgdGhlIFREIGlzbiYjMzk7dCBmaW5hbGl6ZWQvcnVubmFibGUsIHRoZW4gdXNlcnNwYWNlIGlzIGluaXRpYWxpemluZ1xuIFx0ICogdGhlIFZNIGltYWdlIHZpYSBLVk1fVERYX0lOSVRfTUVNX1JFR0lPTjsgQUREIHRoZSBwYWdlIHRvIHRoZSBURC5cbiBcdCAqL1xuLVx0aWYgKHVubGlrZWx5KGt2bV90ZHgtXHUwMDNlc3RhdGUgIT0gVERfU1RBVEVfUlVOTkFCTEUpKVxuLVx0XHRyZXR1cm4gdGR4X21lbV9wYWdlX2FkZChrdm0sIGdmbiwgbGV2ZWwsIHBmbik7XG4mIzQzO1x0aWYgKGxpa2VseShrdm1fdGR4LVx1MDAzZXN0YXRlID09IFREX1NUQVRFX1JVTk5BQkxFKSlcbiYjNDM7XHRcdHJldCA9IHRkeF9tZW1fcGFnZV9hdWcoa3ZtLCBnZm4sIGxldmVsLCBwZm4pO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdHJldCA9IHRkeF9tZW1fcGFnZV9hZGQoa3ZtLCBnZm4sIGxldmVsLCBwZm4pO1xuJiM0MztcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0dGR4X3BhbXRfcHV0KHBmbik7XG4gXG4tXHRyZXR1cm4gdGR4X21lbV9wYWdlX2F1Zyhrdm0sIGdmbiwgbGV2ZWwsIHBmbik7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiB9XG4gXG4gLypcbkBAIC0xODIyLDYgJiM0MzsxODYzLDcgQEAgc3RhdGljIGludCB0ZHhfc2VwdF9yZW1vdmVfbGVhZl9zcHRlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLFxuIFx0XHRyZXR1cm4gLUVJTztcbiBcbiBcdHRkeF9xdWlya19yZXNldF9wYWRkcihQRk5fUEhZUyhwZm4pLCBQQUdFX1NJWkUpO1xuJiM0MztcdHRkeF9wYW10X3B1dChwZm4pO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuQEAgLTE4NjUsNiAmIzQzOzE5MDcsOCBAQCBzdGF0aWMgaW50IHRkeF9zZXB0X3NldF9wcml2YXRlX3NwdGUoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4sIHU2NCBvbGRfc3B0ZSxcbiAgKi9cbiBzdGF0aWMgdm9pZCB0ZHhfc2VwdF9mcmVlX3ByaXZhdGVfc3B0KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tbXVfcGFnZSAqc3ApXG4ge1xuJiM0MztcdHN0cnVjdCBwYWdlICpzZXB0X3B0ID0gdmlydF90b19wYWdlKHNwLVx1MDAzZWV4dGVybmFsX3NwdCk7XG4mIzQzO1xuIFx0LypcbiBcdCAqIEtWTSBkb2VzbiYjMzk7dCAoeWV0KSB6YXAgcGFnZSB0YWJsZSBwYWdlcyBpbiBtaXJyb3IgcGFnZSB0YWJsZSB3aGlsZVxuIFx0ICogVEQgaXMgYWN0aXZlLCB0aG91Z2ggZ3Vlc3QgcGFnZXMgbWFwcGVkIGluIG1pcnJvciBwYWdlIHRhYmxlIGNvdWxkIGJlXG5AQCAtMTg3OCwxNSAmIzQzOzE5MjIsMTUgQEAgc3RhdGljIHZvaWQgdGR4X3NlcHRfZnJlZV9wcml2YXRlX3NwdChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwKVxuIFx0ICogdGhlIHBhZ2UgdG8gcHJldmVudCB0aGUga2VybmVsIGZyb20gYWNjZXNzaW5nIHRoZSBlbmNyeXB0ZWQgcGFnZS5cbiBcdCAqL1xuIFx0aWYgKEtWTV9CVUdfT04oaXNfaGtpZF9hc3NpZ25lZCh0b19rdm1fdGR4KGt2bSkpLCBrdm0pIHx8XG4tXHQgICAgdGR4X3JlY2xhaW1fcGFnZSh2aXJ0X3RvX3BhZ2Uoc3AtXHUwMDNlZXh0ZXJuYWxfc3B0KSkpXG4mIzQzO1x0ICAgIHRkeF9yZWNsYWltX3BhZ2Uoc2VwdF9wdCkpXG4gXHRcdGdvdG8gb3V0O1xuIFxuIFx0Lypcbi1cdCAqIEltbWVkaWF0ZWx5IGZyZWUgdGhlIFMtRVBUIHBhZ2UgYmVjYXVzZSBSQ1UtdGltZSBmcmVlIGlzIHVubmVjZXNzYXJ5XG4tXHQgKiBhZnRlciBUREguUEhZTUVNLlBBR0UuUkVDTEFJTSBlbnN1cmVzIHRoZXJlIGFyZSBubyBvdXRzdGFuZGluZ1xuLVx0ICogcmVhZGVycy5cbiYjNDM7XHQgKiBJbW1lZGlhdGVseSBmcmVlIHRoZSBTLUVQVCBwYWdlIGFzIHRoZSBURFggc3Vic3lzdGVtIGRvZXNuJiMzOTt0IHN1cHBvcnRcbiYjNDM7XHQgKiBmcmVlaW5nIHBhZ2VzIGZyb20gUkNVIGNhbGxiYWNrcywgYW5kIG1vcmUgaW1wb3J0YW50bHkgYmVjYXVzZVxuJiM0MztcdCAqIFRESC5QSFlNRU0uUEFHRS5SRUNMQUlNIGVuc3VyZXMgdGhlcmUgYXJlIG5vIG91dHN0YW5kaW5nIHJlYWRlcnMuXG4gXHQgKi9cbi1cdGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylzcC1cdTAwM2VleHRlcm5hbF9zcHQpO1xuJiM0MztcdHRkeF9mcmVlX2NvbnRyb2xfcGFnZShzZXB0X3B0KTtcbiBvdXQ6XG4gXHRzcC1cdTAwM2VleHRlcm5hbF9zcHQgPSBOVUxMO1xuIH1cbkBAIC0yNDU5LDcgJiM0MzsyNTAzLDcgQEAgc3RhdGljIGludCBfX3RkeF90ZF9pbml0KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IHRkX3BhcmFtcyAqdGRfcGFyYW1zLFxuIFxuIFx0cmV0ID0gLUVOT01FTTtcbiBcbi1cdHRkcl9wYWdlID0gYWxsb2NfcGFnZShHRlBfS0VSTkVMX0FDQ09VTlQpO1xuJiM0MztcdHRkcl9wYWdlID0gdGR4X2FsbG9jX2NvbnRyb2xfcGFnZSgpO1xuIFx0aWYgKCF0ZHJfcGFnZSlcbiBcdFx0Z290byBmcmVlX2hraWQ7XG4gXG5AQCAtMjQ3Miw3ICYjNDM7MjUxNiw3IEBAIHN0YXRpYyBpbnQgX190ZHhfdGRfaW5pdChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCB0ZF9wYXJhbXMgKnRkX3BhcmFtcyxcbiBcdFx0Z290byBmcmVlX3RkcjtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGt2bV90ZHgtXHUwMDNldGQudGRjc19ucl9wYWdlczsgaSYjNDM7JiM0MzspIHtcbi1cdFx0dGRjc19wYWdlc1tpXSA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbiYjNDM7XHRcdHRkY3NfcGFnZXNbaV0gPSB0ZHhfYWxsb2NfY29udHJvbF9wYWdlKCk7XG4gXHRcdGlmICghdGRjc19wYWdlc1tpXSlcbiBcdFx0XHRnb3RvIGZyZWVfdGRjcztcbiBcdH1cbkBAIC0yNTkwLDEwICYjNDM7MjYzNCw4IEBAIHN0YXRpYyBpbnQgX190ZHhfdGRfaW5pdChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCB0ZF9wYXJhbXMgKnRkX3BhcmFtcyxcbiB0ZWFyZG93bjpcbiBcdC8qIE9ubHkgZnJlZSBwYWdlcyBub3QgeWV0IGFkZGVkLCBzbyBzdGFydCBhdCAmIzM5O2kmIzM5OyAqL1xuIFx0Zm9yICg7IGkgXHUwMDNjIGt2bV90ZHgtXHUwMDNldGQudGRjc19ucl9wYWdlczsgaSYjNDM7JiM0MzspIHtcbi1cdFx0aWYgKHRkY3NfcGFnZXNbaV0pIHtcbi1cdFx0XHRfX2ZyZWVfcGFnZSh0ZGNzX3BhZ2VzW2ldKTtcbi1cdFx0XHR0ZGNzX3BhZ2VzW2ldID0gTlVMTDtcbi1cdFx0fVxuJiM0MztcdFx0dGR4X2ZyZWVfY29udHJvbF9wYWdlKHRkY3NfcGFnZXNbaV0pO1xuJiM0MztcdFx0dGRjc19wYWdlc1tpXSA9IE5VTEw7XG4gXHR9XG4gXHRpZiAoIWt2bV90ZHgtXHUwMDNldGQudGRjc19wYWdlcylcbiBcdFx0a2ZyZWUodGRjc19wYWdlcyk7XG5AQCAtMjYwOCwxNiAmIzQzOzI2NTAsMTMgQEAgc3RhdGljIGludCBfX3RkeF90ZF9pbml0KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IHRkX3BhcmFtcyAqdGRfcGFyYW1zLFxuIFx0ZnJlZV9jcHVtYXNrX3ZhcihwYWNrYWdlcyk7XG4gXG4gZnJlZV90ZGNzOlxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2Mga3ZtX3RkeC1cdTAwM2V0ZC50ZGNzX25yX3BhZ2VzOyBpJiM0MzsmIzQzOykge1xuLVx0XHRpZiAodGRjc19wYWdlc1tpXSlcbi1cdFx0XHRfX2ZyZWVfcGFnZSh0ZGNzX3BhZ2VzW2ldKTtcbi1cdH1cbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBrdm1fdGR4LVx1MDAzZXRkLnRkY3NfbnJfcGFnZXM7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0dGR4X2ZyZWVfY29udHJvbF9wYWdlKHRkY3NfcGFnZXNbaV0pO1xuIFx0a2ZyZWUodGRjc19wYWdlcyk7XG4gXHRrdm1fdGR4LVx1MDAzZXRkLnRkY3NfcGFnZXMgPSBOVUxMO1xuIFxuIGZyZWVfdGRyOlxuLVx0aWYgKHRkcl9wYWdlKVxuLVx0XHRfX2ZyZWVfcGFnZSh0ZHJfcGFnZSk7XG4mIzQzO1x0dGR4X2ZyZWVfY29udHJvbF9wYWdlKHRkcl9wYWdlKTtcbiBcdGt2bV90ZHgtXHUwMDNldGQudGRyX3BhZ2UgPSBOVUxMO1xuIFxuIGZyZWVfaGtpZDpcbkBAIC0yOTUxLDcgJiM0MzsyOTkwLDcgQEAgc3RhdGljIGludCB0ZHhfdGRfdmNwdV9pbml0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHZjcHVfcmN4KVxuIFx0aW50IHJldCwgaTtcbiBcdHU2NCBlcnI7XG4gXG4tXHRwYWdlID0gYWxsb2NfcGFnZShHRlBfS0VSTkVMX0FDQ09VTlQpO1xuJiM0MztcdHBhZ2UgPSB0ZHhfYWxsb2NfY29udHJvbF9wYWdlKCk7XG4gXHRpZiAoIXBhZ2UpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFx0dGR4LVx1MDAzZXZwLnRkdnByX3BhZ2UgPSBwYWdlO1xuQEAgLTI5NzEsNyAmIzQzOzMwMTAsNyBAQCBzdGF0aWMgaW50IHRkeF90ZF92Y3B1X2luaXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgdmNwdV9yY3gpXG4gXHR9XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBrdm1fdGR4LVx1MDAzZXRkLnRkY3hfbnJfcGFnZXM7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdHBhZ2UgPSBhbGxvY19wYWdlKEdGUF9LRVJORUxfQUNDT1VOVCk7XG4mIzQzO1x0XHRwYWdlID0gdGR4X2FsbG9jX2NvbnRyb2xfcGFnZSgpO1xuIFx0XHRpZiAoIXBhZ2UpIHtcbiBcdFx0XHRyZXQgPSAtRU5PTUVNO1xuIFx0XHRcdGdvdG8gZnJlZV90ZGN4O1xuQEAgLTI5OTMsNyAmIzQzOzMwMzIsNyBAQCBzdGF0aWMgaW50IHRkeF90ZF92Y3B1X2luaXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgdmNwdV9yY3gpXG4gXHRcdFx0ICogbWV0aG9kLCBidXQgdGhlIHJlc3QgYXJlIGZyZWVkIGhlcmUuXG4gXHRcdFx0ICovXG4gXHRcdFx0Zm9yICg7IGkgXHUwMDNjIGt2bV90ZHgtXHUwMDNldGQudGRjeF9ucl9wYWdlczsgaSYjNDM7JiM0MzspIHtcbi1cdFx0XHRcdF9fZnJlZV9wYWdlKHRkeC1cdTAwM2V2cC50ZGN4X3BhZ2VzW2ldKTtcbiYjNDM7XHRcdFx0XHR0ZHhfZnJlZV9jb250cm9sX3BhZ2UodGR4LVx1MDAzZXZwLnRkY3hfcGFnZXNbaV0pO1xuIFx0XHRcdFx0dGR4LVx1MDAzZXZwLnRkY3hfcGFnZXNbaV0gPSBOVUxMO1xuIFx0XHRcdH1cbiBcdFx0XHRyZXR1cm4gLUVJTztcbkBAIC0zMDIxLDE2ICYjNDM7MzA2MCwxNCBAQCBzdGF0aWMgaW50IHRkeF90ZF92Y3B1X2luaXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgdmNwdV9yY3gpXG4gXG4gZnJlZV90ZGN4OlxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mga3ZtX3RkeC1cdTAwM2V0ZC50ZGN4X25yX3BhZ2VzOyBpJiM0MzsmIzQzOykge1xuLVx0XHRpZiAodGR4LVx1MDAzZXZwLnRkY3hfcGFnZXNbaV0pXG4tXHRcdFx0X19mcmVlX3BhZ2UodGR4LVx1MDAzZXZwLnRkY3hfcGFnZXNbaV0pO1xuJiM0MztcdFx0dGR4X2ZyZWVfY29udHJvbF9wYWdlKHRkeC1cdTAwM2V2cC50ZGN4X3BhZ2VzW2ldKTtcbiBcdFx0dGR4LVx1MDAzZXZwLnRkY3hfcGFnZXNbaV0gPSBOVUxMO1xuIFx0fVxuIFx0a2ZyZWUodGR4LVx1MDAzZXZwLnRkY3hfcGFnZXMpO1xuIFx0dGR4LVx1MDAzZXZwLnRkY3hfcGFnZXMgPSBOVUxMO1xuIFxuIGZyZWVfdGR2cHI6XG4tXHRpZiAodGR4LVx1MDAzZXZwLnRkdnByX3BhZ2UpXG4tXHRcdF9fZnJlZV9wYWdlKHRkeC1cdTAwM2V2cC50ZHZwcl9wYWdlKTtcbiYjNDM7XHR0ZHhfZnJlZV9jb250cm9sX3BhZ2UodGR4LVx1MDAzZXZwLnRkdnByX3BhZ2UpO1xuIFx0dGR4LVx1MDAzZXZwLnRkdnByX3BhZ2UgPSBOVUxMO1xuIFx0dGR4LVx1MDAzZXZwLnRkdnByX3BhID0gMDtcbiBcbkBAIC0zNDkzLDYgJiM0MzszNTMwLDEwIEBAIGludCBfX2luaXQgdGR4X2hhcmR3YXJlX3NldHVwKHZvaWQpXG4gXG4gXHR2dF94ODZfb3BzLnNldF9leHRlcm5hbF9zcHRlID0gdGR4X3NlcHRfc2V0X3ByaXZhdGVfc3B0ZTtcbiBcdHZ0X3g4Nl9vcHMuZnJlZV9leHRlcm5hbF9zcHQgPSB0ZHhfc2VwdF9mcmVlX3ByaXZhdGVfc3B0O1xuJiM0MztcbiYjNDM7XHRpZiAodGR4X3N1cHBvcnRzX2R5bmFtaWNfcGFtdCh0ZHhfc3lzaW5mbykpXG4mIzQzO1x0XHR2dF94ODZfb3BzLnRvcHVwX2V4dGVybmFsX2NhY2hlID0gdGR4X3RvcHVwX2V4dGVybmFsX3BhbXRfY2FjaGU7XG4mIzQzO1xuIFx0dnRfeDg2X29wcy5wcm90ZWN0ZWRfYXBpY19oYXNfaW50ZXJydXB0ID0gdGR4X3Byb3RlY3RlZF9hcGljX2hhc19pbnRlcnJ1cHQ7XG4gXHRyZXR1cm4gMDtcbiBcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L3RkeC5oIGIvYXJjaC94ODYva3ZtL3ZteC90ZHguaFxuaW5kZXggYWM4MzIzYTY4YjE2M2EuLmZkMzY4ZTNlZTA2MGI2IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3ZteC90ZHguaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3ZteC90ZHguaFxuQEAgLTcyLDYgJiM0Mzs3Miw4IEBAIHN0cnVjdCB2Y3B1X3RkeCB7XG4gXG4gXHR1NjQgbWFwX2dwYV9uZXh0O1xuIFx0dTY0IG1hcF9ncGFfZW5kO1xuJiM0MztcbiYjNDM7XHRzdHJ1Y3QgdGR4X3BhbXRfY2FjaGUgcGFtdF9jYWNoZTtcbiB9O1xuIFxuIHZvaWQgdGRoX3ZwX3JkX2ZhaWxlZChzdHJ1Y3QgdmNwdV90ZHggKnRkeCwgY2hhciAqdWNsYXNzLCB1MzIgZmllbGQsIHU2NCBlcnIpO1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYyBiL2FyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguY1xuaW5kZXggNDJkZjhlYTQ2NGM0NzIuLmRlYzQ1NzA5ZTQ1NGE2IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmNcbkBAIC0zMCw2ICYjNDM7MzAsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3N1c3BlbmQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3N5c2NvcmVfb3BzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pZHIuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC92bWFsbG9jLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20vcGFnZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3NwZWNpYWxfaW5zbnMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9tc3ItaW5kZXguaFx1MDAzZVxuQEAgLTQ2LDYgJiM0Mzs0Nyw4IEBAXG4gI2luY2x1ZGUgXCYjMzQ7c2VhbWNhbGxfaW50ZXJuYWwuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3RkeC5oXCYjMzQ7XG4gXG4mIzQzO3N0YXRpYyBib29sIHRkeF9lbmFibGVfZHBhbXQgX19yb19hZnRlcl9pbml0O1xuJiM0MztcbiBzdHJ1Y3QgdGR4X21vZHVsZV9zdGF0ZSB7XG4gXHRib29sIGluaXRpYWxpemVkO1xuIFx0Ym9vbCBzeXNpbml0X2RvbmU7XG5AQCAtNjMsNiAmIzQzOzY2LDE0IEBAIHN0YXRpYyBERUZJTkVfUEVSX0NQVShib29sLCB0ZHhfbHBfaW5pdGlhbGl6ZWQpO1xuIFxuIHN0YXRpYyBzdHJ1Y3QgdGRtcl9pbmZvX2xpc3QgdGR4X3RkbXJfbGlzdDtcbiBcbiYjNDM7LypcbiYjNDM7ICogT24gYSBtYWNoaW5lIHdpdGggRHluYW1pYyBQQU1ULCB0aGUga2VybmVsIG1haW50YWlucyBhIHJlZmVyZW5jZSBjb3VudGVyXG4mIzQzOyAqIGZvciBldmVyeSAyTUIgcmFuZ2UuIFRoZSBjb3VudGVyIGluZGljYXRlcyBob3cgbWFueSB1c2VycyB0aGVyZSBhcmUgZm9yXG4mIzQzOyAqIHRoZSBQQU1UIG1lbW9yeSBvZiB0aGUgMk1CIHJhbmdlLiBUaGUga2VybmVsIGFsbG9jYXRlcyBQQU1UIHJlZmNvdW50cyBhdFxuJiM0MzsgKiBpbml0aWFsaXphdGlvbi5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBhdG9taWNfdCAqcGFtdF9yZWZjb3VudHM7XG4mIzQzO1xuIC8qIEFsbCBURFgtdXNhYmxlIG1lbW9yeSByZWdpb25zLiAgUHJvdGVjdGVkIGJ5IG1lbV9ob3RwbHVnX2xvY2suICovXG4gc3RhdGljIExJU1RfSEVBRCh0ZHhfbWVtbGlzdCk7XG4gXG5AQCAtMjUyLDYgJiM0MzsyNjMsNDIgQEAgc3RhdGljIHN0cnVjdCBzeXNjb3JlIHRkeF9zeXNjb3JlID0ge1xuIFx0Lm9wcyA9IFx1MDAyNnRkeF9zeXNjb3JlX29wcyxcbiB9O1xuIFxuJiM0MzsvKlxuJiM0MzsgKiBBbGxvY2F0ZSBQQU1UIHJlZmVyZW5jZSBjb3VudGVycyBmb3IgYWxsIHBoeXNpY2FsIG1lbW9yeS5cbiYjNDM7ICpcbiYjNDM7ICogSXQgY29uc3VtZXMgMk1CIGZvciBldmVyeSAxVEIgb2YgcGh5c2ljYWwgbWVtb3J5LlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIF9faW5pdCBpbnQgaW5pdF9wYW10X3JlZmNvdW50cyh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0c2l6ZV90IHNpemUgPSBESVZfUk9VTkRfVVAobWF4X3BmbiwgUFRSU19QRVJfUFRFKSAqIHNpemVvZigqcGFtdF9yZWZjb3VudHMpO1xuJiM0MztcbiYjNDM7XHRpZiAoIXRkeF9zdXBwb3J0c19keW5hbWljX3BhbXQoXHUwMDI2dGR4X3N5c2luZm8pKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdHBhbXRfcmVmY291bnRzID0gdnphbGxvYyhzaXplKTtcbiYjNDM7XHRpZiAoIXBhbXRfcmVmY291bnRzKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgX19pbml0IHZvaWQgZnJlZV9wYW10X3JlZmNvdW50cyh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCF0ZHhfc3VwcG9ydHNfZHluYW1pY19wYW10KFx1MDAyNnRkeF9zeXNpbmZvKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0dmZyZWUocGFtdF9yZWZjb3VudHMpO1xuJiM0MztcdHBhbXRfcmVmY291bnRzID0gTlVMTDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGF0b21pY190ICp0ZHhfZmluZF9wYW10X3JlZmNvdW50KHVuc2lnbmVkIGxvbmcgcGZuKVxuJiM0Mzt7XG4mIzQzO1x0LyogRmluZCB3aGljaCBQTUQgYSBQRk4gaXMgaW4uICovXG4mIzQzO1x0dW5zaWduZWQgbG9uZyBpbmRleCA9IHBmbiBcdTAwM2VcdTAwM2UgKFBNRF9TSElGVCAtIFBBR0VfU0hJRlQpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gXHUwMDI2cGFtdF9yZWZjb3VudHNbaW5kZXhdO1xuJiM0Mzt9XG4mIzQzO1xuIC8qXG4gICogQWRkIGEgbWVtb3J5IHJlZ2lvbiBhcyBhIFREWCBtZW1vcnkgYmxvY2suICBUaGUgY2FsbGVyIG11c3QgbWFrZSBzdXJlXG4gICogYWxsIG1lbW9yeSByZWdpb25zIGFyZSBhZGRlZCBpbiBhZGRyZXNzIGFzY2VuZGluZyBvcmRlciBhbmQgZG9uJiMzOTt0XG5AQCAtNTEwLDM1ICYjNDM7NTU3LDM3IEBAIHN0YXRpYyBfX2luaXQgaW50IGZpbGxfb3V0X3RkbXJzKHN0cnVjdCBsaXN0X2hlYWQgKnRtYl9saXN0LFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MztzdGF0aWMgX19pbml0IHVuc2lnbmVkIGxvbmcgdGRtcl9nZXRfcGFtdF9iaXRtYXBfc3ooc3RydWN0IHRkbXJfaW5mbyAqdGRtcilcbiYjNDM7e1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgcGFtdF9zeiwgbnJfcGFtdF9lbnRyaWVzO1xuJiM0MztcdGludCBiaXRzX3Blcl9lbnRyeTtcbiYjNDM7XG4mIzQzO1x0Yml0c19wZXJfZW50cnkgPSB0ZHhfc3lzaW5mby50ZG1yLnBhbXRfcGFnZV9iaXRtYXBfZW50cnlfYml0cztcbiYjNDM7XHRucl9wYW10X2VudHJpZXMgPSB0ZG1yLVx1MDAzZXNpemUgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4mIzQzO1x0cGFtdF9zeiA9IERJVl9ST1VORF9VUChucl9wYW10X2VudHJpZXMgKiBiaXRzX3Blcl9lbnRyeSwgQklUU19QRVJfQllURSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBQQUdFX0FMSUdOKHBhbXRfc3opO1xuJiM0Mzt9XG4mIzQzO1xuIC8qXG4gICogQ2FsY3VsYXRlIFBBTVQgc2l6ZSBnaXZlbiBhIFRETVIgYW5kIGEgcGFnZSBzaXplLiAgVGhlIHJldHVybmVkXG4gICogUEFNVCBzaXplIGlzIGFsd2F5cyBhbGlnbmVkIHVwIHRvIDRLIHBhZ2UgYm91bmRhcnkuXG4gICovXG4tc3RhdGljIF9faW5pdCB1bnNpZ25lZCBsb25nIHRkbXJfZ2V0X3BhbXRfc3ooc3RydWN0IHRkbXJfaW5mbyAqdGRtciwgaW50IHBnc3osXG4tXHRcdFx0XHRcdCAgICAgdTE2IHBhbXRfZW50cnlfc2l6ZSlcbiYjNDM7c3RhdGljIF9faW5pdCB1bnNpZ25lZCBsb25nIHRkbXJfZ2V0X3BhbXRfc3ooc3RydWN0IHRkbXJfaW5mbyAqdGRtciwgaW50IHBnc3opXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBwYW10X3N6LCBucl9wYW10X2VudHJpZXM7XG4mIzQzO1x0Y29uc3QgaW50IHRkeF9wZ19zaXplX3NoaWZ0W1REWF9QU19OUl0gPSB7IFBBR0VfU0hJRlQsIFBNRF9TSElGVCwgUFVEX1NISUZUIH07XG4mIzQzO1x0Y29uc3QgdTE2IHBhbXRfZW50cnlfc2l6ZVtURFhfUFNfTlJdID0ge1xuJiM0MztcdFx0dGR4X3N5c2luZm8udGRtci5wYW10XzRrX2VudHJ5X3NpemUsXG4mIzQzO1x0XHR0ZHhfc3lzaW5mby50ZG1yLnBhbXRfMm1fZW50cnlfc2l6ZSxcbiYjNDM7XHRcdHRkeF9zeXNpbmZvLnRkbXIucGFtdF8xZ19lbnRyeV9zaXplLFxuJiM0MztcdH07XG4gXG4tXHRzd2l0Y2ggKHBnc3opIHtcbi1cdGNhc2UgVERYX1BTXzRLOlxuLVx0XHRucl9wYW10X2VudHJpZXMgPSB0ZG1yLVx1MDAzZXNpemUgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4tXHRcdGJyZWFrO1xuLVx0Y2FzZSBURFhfUFNfMk06XG4tXHRcdG5yX3BhbXRfZW50cmllcyA9IHRkbXItXHUwMDNlc2l6ZSBcdTAwM2VcdTAwM2UgUE1EX1NISUZUO1xuLVx0XHRicmVhaztcbi1cdGNhc2UgVERYX1BTXzFHOlxuLVx0XHRucl9wYW10X2VudHJpZXMgPSB0ZG1yLVx1MDAzZXNpemUgXHUwMDNlXHUwMDNlIFBVRF9TSElGVDtcbi1cdFx0YnJlYWs7XG4tXHRkZWZhdWx0OlxuLVx0XHRXQVJOX09OX09OQ0UoMSk7XG4tXHRcdHJldHVybiAwO1xuLVx0fVxuJiM0MztcdG5yX3BhbXRfZW50cmllcyA9IHRkbXItXHUwMDNlc2l6ZSBcdTAwM2VcdTAwM2UgdGR4X3BnX3NpemVfc2hpZnRbcGdzel07XG4mIzQzO1x0cGFtdF9zeiA9IG5yX3BhbXRfZW50cmllcyAqIHBhbXRfZW50cnlfc2l6ZVtwZ3N6XTtcbiBcbi1cdHBhbXRfc3ogPSBucl9wYW10X2VudHJpZXMgKiBwYW10X2VudHJ5X3NpemU7XG4gXHQvKiBURFggcmVxdWlyZXMgUEFNVCBzaXplIG11c3QgYmUgNEsgYWxpZ25lZCAqL1xuLVx0cGFtdF9zeiA9IEFMSUdOKHBhbXRfc3osIFBBR0VfU0laRSk7XG4tXG4tXHRyZXR1cm4gcGFtdF9zejtcbiYjNDM7XHRyZXR1cm4gUEFHRV9BTElHTihwYW10X3N6KTtcbiB9XG4gXG4gLypcbkBAIC01NzYsMTUgJiM0Mzs2MjUsMTEgQEAgc3RhdGljIF9faW5pdCBpbnQgdGRtcl9nZXRfbmlkKHN0cnVjdCB0ZG1yX2luZm8gKnRkbXIsIHN0cnVjdCBsaXN0X2hlYWQgKnRtYl9saXNcbiAgKiB3aXRoaW4gQHRkbXIsIGFuZCBzZXQgdXAgUEFNVHMgZm9yIEB0ZG1yLlxuICAqL1xuIHN0YXRpYyBfX2luaXQgaW50IHRkbXJfc2V0X3VwX3BhbXQoc3RydWN0IHRkbXJfaW5mbyAqdGRtcixcbi1cdFx0XHRcdCAgIHN0cnVjdCBsaXN0X2hlYWQgKnRtYl9saXN0LFxuLVx0XHRcdFx0ICAgdTE2IHBhbXRfZW50cnlfc2l6ZVtdKVxuJiM0MztcdFx0XHRcdCAgIHN0cnVjdCBsaXN0X2hlYWQgKnRtYl9saXN0KVxuIHtcbi1cdHVuc2lnbmVkIGxvbmcgcGFtdF9iYXNlW1REWF9QU19OUl07XG4tXHR1bnNpZ25lZCBsb25nIHBhbXRfc2l6ZVtURFhfUFNfTlJdO1xuLVx0dW5zaWduZWQgbG9uZyB0ZG1yX3BhbXRfYmFzZTtcbiBcdHVuc2lnbmVkIGxvbmcgdGRtcl9wYW10X3NpemU7XG4gXHRzdHJ1Y3QgcGFnZSAqcGFtdDtcbi1cdGludCBwZ3N6LCBuaWQ7XG4mIzQzO1x0aW50IG5pZDtcbiBcbiBcdG5pZCA9IHRkbXJfZ2V0X25pZCh0ZG1yLCB0bWJfbGlzdCk7XG4gXG5AQCAtNTkyLDEzICYjNDM7NjM3LDE4IEBAIHN0YXRpYyBfX2luaXQgaW50IHRkbXJfc2V0X3VwX3BhbXQoc3RydWN0IHRkbXJfaW5mbyAqdGRtcixcbiBcdCAqIENhbGN1bGF0ZSB0aGUgUEFNVCBzaXplIGZvciBlYWNoIFREWCBzdXBwb3J0ZWQgcGFnZSBzaXplXG4gXHQgKiBhbmQgdGhlIHRvdGFsIFBBTVQgc2l6ZS5cbiBcdCAqL1xuLVx0dGRtcl9wYW10X3NpemUgPSAwO1xuLVx0Zm9yIChwZ3N6ID0gVERYX1BTXzRLOyBwZ3N6IFx1MDAzYyBURFhfUFNfTlI7IHBnc3omIzQzOyYjNDM7KSB7XG4tXHRcdHBhbXRfc2l6ZVtwZ3N6XSA9IHRkbXJfZ2V0X3BhbXRfc3oodGRtciwgcGdzeixcbi1cdFx0XHRcdFx0cGFtdF9lbnRyeV9zaXplW3Bnc3pdKTtcbi1cdFx0dGRtcl9wYW10X3NpemUgJiM0Mzs9IHBhbXRfc2l6ZVtwZ3N6XTtcbiYjNDM7XHR0ZG1yLVx1MDAzZXBhbXRfMWdfc2l6ZSA9IHRkbXJfZ2V0X3BhbXRfc3oodGRtciwgVERYX1BTXzFHKTtcbiYjNDM7XHR0ZG1yLVx1MDAzZXBhbXRfMm1fc2l6ZSA9IHRkbXJfZ2V0X3BhbXRfc3oodGRtciwgVERYX1BTXzJNKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHRkeF9zdXBwb3J0c19keW5hbWljX3BhbXQoXHUwMDI2dGR4X3N5c2luZm8pKSB7XG4mIzQzO1x0XHQvKiBXaXRoIER5bmFtaWMgUEFNVCwgUEFNVF80SyBpcyByZXBsYWNlZCB3aXRoIGEgYml0bWFwICovXG4mIzQzO1x0XHR0ZG1yLVx1MDAzZXBhbXRfNGtfc2l6ZSA9IHRkbXJfZ2V0X3BhbXRfYml0bWFwX3N6KHRkbXIpO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHR0ZG1yLVx1MDAzZXBhbXRfNGtfc2l6ZSA9IHRkbXJfZ2V0X3BhbXRfc3oodGRtciwgVERYX1BTXzRLKTtcbiBcdH1cbiBcbiYjNDM7XHR0ZG1yX3BhbXRfc2l6ZSA9IHRkbXItXHUwMDNlcGFtdF80a19zaXplICYjNDM7IHRkbXItXHUwMDNlcGFtdF8ybV9zaXplICYjNDM7IHRkbXItXHUwMDNlcGFtdF8xZ19zaXplO1xuJiM0MztcbiBcdC8qXG4gXHQgKiBBbGxvY2F0ZSBvbmUgY2h1bmsgb2YgcGh5c2ljYWxseSBjb250aWd1b3VzIG1lbW9yeSBmb3IgYWxsXG4gXHQgKiBQQU1Ucy4gIFRoaXMgaGVscHMgbWluaW1pemUgdGhlIFBBTVQmIzM5O3MgdXNlIG9mIHJlc2VydmVkIGFyZWFzXG5AQCAtNjA2LDI1ICYjNDM7NjU2LDE3IEBAIHN0YXRpYyBfX2luaXQgaW50IHRkbXJfc2V0X3VwX3BhbXQoc3RydWN0IHRkbXJfaW5mbyAqdGRtcixcbiBcdCAqL1xuIFx0cGFtdCA9IGFsbG9jX2NvbnRpZ19wYWdlcyh0ZG1yX3BhbXRfc2l6ZSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCwgR0ZQX0tFUk5FTCxcbiBcdFx0XHRuaWQsIFx1MDAyNm5vZGVfb25saW5lX21hcCk7XG4tXHRpZiAoIXBhbXQpXG4tXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuIFx0Lypcbi1cdCAqIEJyZWFrIHRoZSBjb250aWd1b3VzIGFsbG9jYXRpb24gYmFjayB1cCBpbnRvIHRoZVxuLVx0ICogaW5kaXZpZHVhbCBQQU1UcyBmb3IgZWFjaCBwYWdlIHNpemUuXG4mIzQzO1x0ICogdGRtci1cdTAwM2VwYW10XzRrX2Jhc2UgaXMgc3RpbGwgemVybyBzbyB0aGUgZXJyb3JcbiYjNDM7XHQgKiBwYXRoIG9mIHRoZSBjYWxsZXIgd2lsbCBza2lwIGZyZWVpbmcgdGhlIFBBTVQuXG4gXHQgKi9cbi1cdHRkbXJfcGFtdF9iYXNlID0gcGFnZV90b19wZm4ocGFtdCkgXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQ7XG4tXHRmb3IgKHBnc3ogPSBURFhfUFNfNEs7IHBnc3ogXHUwMDNjIFREWF9QU19OUjsgcGdzeiYjNDM7JiM0MzspIHtcbi1cdFx0cGFtdF9iYXNlW3Bnc3pdID0gdGRtcl9wYW10X2Jhc2U7XG4tXHRcdHRkbXJfcGFtdF9iYXNlICYjNDM7PSBwYW10X3NpemVbcGdzel07XG4tXHR9XG4mIzQzO1x0aWYgKCFwYW10KVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG4tXHR0ZG1yLVx1MDAzZXBhbXRfNGtfYmFzZSA9IHBhbXRfYmFzZVtURFhfUFNfNEtdO1xuLVx0dGRtci1cdTAwM2VwYW10XzRrX3NpemUgPSBwYW10X3NpemVbVERYX1BTXzRLXTtcbi1cdHRkbXItXHUwMDNlcGFtdF8ybV9iYXNlID0gcGFtdF9iYXNlW1REWF9QU18yTV07XG4tXHR0ZG1yLVx1MDAzZXBhbXRfMm1fc2l6ZSA9IHBhbXRfc2l6ZVtURFhfUFNfMk1dO1xuLVx0dGRtci1cdTAwM2VwYW10XzFnX2Jhc2UgPSBwYW10X2Jhc2VbVERYX1BTXzFHXTtcbi1cdHRkbXItXHUwMDNlcGFtdF8xZ19zaXplID0gcGFtdF9zaXplW1REWF9QU18xR107XG4mIzQzO1x0dGRtci1cdTAwM2VwYW10XzRrX2Jhc2UgPSBwYWdlX3RvX3BoeXMocGFtdCk7XG4mIzQzO1x0dGRtci1cdTAwM2VwYW10XzJtX2Jhc2UgPSB0ZG1yLVx1MDAzZXBhbXRfNGtfYmFzZSAmIzQzOyB0ZG1yLVx1MDAzZXBhbXRfNGtfc2l6ZTtcbiYjNDM7XHR0ZG1yLVx1MDAzZXBhbXRfMWdfYmFzZSA9IHRkbXItXHUwMDNlcGFtdF8ybV9iYXNlICYjNDM7IHRkbXItXHUwMDNlcGFtdF8ybV9zaXplO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTY1NSwxMCAmIzQzOzY5Nyw3IEBAIHN0YXRpYyBfX2luaXQgdm9pZCB0ZG1yX2RvX3BhbXRfZnVuYyhzdHJ1Y3QgdGRtcl9pbmZvICp0ZG1yLFxuIFx0dGRtcl9nZXRfcGFtdCh0ZG1yLCBcdTAwMjZwYW10X2Jhc2UsIFx1MDAyNnBhbXRfc2l6ZSk7XG4gXG4gXHQvKiBEbyBub3RoaW5nIGlmIFBBTVQgaGFzbiYjMzk7dCBiZWVuIGFsbG9jYXRlZCBmb3IgdGhpcyBURE1SICovXG4tXHRpZiAoIXBhbXRfc2l6ZSlcbi1cdFx0cmV0dXJuO1xuLVxuLVx0aWYgKFdBUk5fT05fT05DRSghcGFtdF9iYXNlKSlcbiYjNDM7XHRpZiAoIXBhbXRfYmFzZSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0cGFtdF9mdW5jKHBhbXRfYmFzZSwgcGFtdF9zaXplKTtcbkBAIC02ODQsMTQgJiM0Mzs3MjMsMTIgQEAgc3RhdGljIF9faW5pdCB2b2lkIHRkbXJzX2ZyZWVfcGFtdF9hbGwoc3RydWN0IHRkbXJfaW5mb19saXN0ICp0ZG1yX2xpc3QpXG4gXG4gLyogQWxsb2NhdGUgYW5kIHNldCB1cCBQQU1UcyBmb3IgYWxsIFRETVJzICovXG4gc3RhdGljIF9faW5pdCBpbnQgdGRtcnNfc2V0X3VwX3BhbXRfYWxsKHN0cnVjdCB0ZG1yX2luZm9fbGlzdCAqdGRtcl9saXN0LFxuLVx0XHRcdFx0XHRzdHJ1Y3QgbGlzdF9oZWFkICp0bWJfbGlzdCxcbi1cdFx0XHRcdFx0dTE2IHBhbXRfZW50cnlfc2l6ZVtdKVxuJiM0MztcdFx0XHRcdCBzdHJ1Y3QgbGlzdF9oZWFkICp0bWJfbGlzdClcbiB7XG4gXHRpbnQgaSwgcmV0ID0gMDtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHRkbXJfbGlzdC1cdTAwM2Vucl9jb25zdW1lZF90ZG1yczsgaSYjNDM7JiM0MzspIHtcbi1cdFx0cmV0ID0gdGRtcl9zZXRfdXBfcGFtdCh0ZG1yX2VudHJ5KHRkbXJfbGlzdCwgaSksIHRtYl9saXN0LFxuLVx0XHRcdFx0cGFtdF9lbnRyeV9zaXplKTtcbiYjNDM7XHRcdHJldCA9IHRkbXJfc2V0X3VwX3BhbXQodGRtcl9lbnRyeSh0ZG1yX2xpc3QsIGkpLCB0bWJfbGlzdCk7XG4gXHRcdGlmIChyZXQpXG4gXHRcdFx0Z290byBlcnI7XG4gXHR9XG5AQCAtOTY4LDE4ICYjNDM7MTAwNSwxMyBAQCBzdGF0aWMgX19pbml0IGludCBjb25zdHJ1Y3RfdGRtcnMoc3RydWN0IGxpc3RfaGVhZCAqdG1iX2xpc3QsXG4gXHRcdFx0XHQgIHN0cnVjdCB0ZG1yX2luZm9fbGlzdCAqdGRtcl9saXN0LFxuIFx0XHRcdFx0ICBzdHJ1Y3QgdGR4X3N5c19pbmZvX3RkbXIgKnN5c2luZm9fdGRtcilcbiB7XG4tXHR1MTYgcGFtdF9lbnRyeV9zaXplW1REWF9QU19OUl0gPSB7XG4tXHRcdHN5c2luZm9fdGRtci1cdTAwM2VwYW10XzRrX2VudHJ5X3NpemUsXG4tXHRcdHN5c2luZm9fdGRtci1cdTAwM2VwYW10XzJtX2VudHJ5X3NpemUsXG4tXHRcdHN5c2luZm9fdGRtci1cdTAwM2VwYW10XzFnX2VudHJ5X3NpemUsXG4tXHR9O1xuIFx0aW50IHJldDtcbiBcbiBcdHJldCA9IGZpbGxfb3V0X3RkbXJzKHRtYl9saXN0LCB0ZG1yX2xpc3QpO1xuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbi1cdHJldCA9IHRkbXJzX3NldF91cF9wYW10X2FsbCh0ZG1yX2xpc3QsIHRtYl9saXN0LCBwYW10X2VudHJ5X3NpemUpO1xuJiM0MztcdHJldCA9IHRkbXJzX3NldF91cF9wYW10X2FsbCh0ZG1yX2xpc3QsIHRtYl9saXN0KTtcbiBcdGlmIChyZXQpXG4gXHRcdHJldHVybiByZXQ7XG4gXG5AQCAtOTk4LDYgJiM0MzsxMDMwLDggQEAgc3RhdGljIF9faW5pdCBpbnQgY29uc3RydWN0X3RkbXJzKHN0cnVjdCBsaXN0X2hlYWQgKnRtYl9saXN0LFxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4mIzQzOyNkZWZpbmUgVERYX1NZU19DT05GSUdfRFlOQU1JQ19QQU1UXHRCSVQoMTYpXG4mIzQzO1xuIHN0YXRpYyBfX2luaXQgaW50IGNvbmZpZ190ZHhfbW9kdWxlKHN0cnVjdCB0ZG1yX2luZm9fbGlzdCAqdGRtcl9saXN0LFxuIFx0XHRcdFx0ICAgIHU2NCBnbG9iYWxfa2V5aWQpXG4ge1xuQEAgLTEwMjYsNiAmIzQzOzEwNjAsMTIgQEAgc3RhdGljIF9faW5pdCBpbnQgY29uZmlnX3RkeF9tb2R1bGUoc3RydWN0IHRkbXJfaW5mb19saXN0ICp0ZG1yX2xpc3QsXG4gXHRhcmdzLnJjeCA9IF9fcGEodGRtcl9wYV9hcnJheSk7XG4gXHRhcmdzLnJkeCA9IHRkbXJfbGlzdC1cdTAwM2Vucl9jb25zdW1lZF90ZG1ycztcbiBcdGFyZ3MucjggPSBnbG9iYWxfa2V5aWQ7XG4mIzQzO1xuJiM0MztcdGlmICh0ZHhfc3VwcG9ydHNfZHluYW1pY19wYW10KFx1MDAyNnRkeF9zeXNpbmZvKSkge1xuJiM0MztcdFx0cHJfaW5mbyhcJiMzNDtFbmFibGUgRHluYW1pYyBQQU1UXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdGFyZ3MucjggfD0gVERYX1NZU19DT05GSUdfRFlOQU1JQ19QQU1UO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRyZXQgPSBzZWFtY2FsbF9wcmVycihUREhfU1lTX0NPTkZJRywgXHUwMDI2YXJncyk7XG4gXG4gXHQvKiBGcmVlIHRoZSBhcnJheSBhcyBpdCBpcyBub3QgcmVxdWlyZWQgYW55bW9yZS4gKi9cbkBAIC0xMTY3LDEwICYjNDM7MTIwNywxNCBAQCBzdGF0aWMgX19pbml0IGludCBpbml0X3RkeF9tb2R1bGUodm9pZClcbiBcdCAqL1xuIFx0Z2V0X29ubGluZV9tZW1zKCk7XG4gXG4tXHRyZXQgPSBidWlsZF90ZHhfbWVtbGlzdChcdTAwMjZ0ZHhfbWVtbGlzdCk7XG4mIzQzO1x0cmV0ID0gaW5pdF9wYW10X3JlZmNvdW50cygpO1xuIFx0aWYgKHJldClcbiBcdFx0Z290byBvdXRfcHV0X3RkeG1lbTtcbiBcbiYjNDM7XHRyZXQgPSBidWlsZF90ZHhfbWVtbGlzdChcdTAwMjZ0ZHhfbWVtbGlzdCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gZXJyX2ZyZWVfcGFtdF9yZWZjb3VudHM7XG4mIzQzO1xuIFx0LyogQWxsb2NhdGUgZW5vdWdoIHNwYWNlIGZvciBjb25zdHJ1Y3RpbmcgVERNUnMgKi9cbiBcdHJldCA9IGFsbG9jX3RkbXJfbGlzdChcdTAwMjZ0ZHhfdGRtcl9saXN0LCBcdTAwMjZ0ZHhfc3lzaW5mby50ZG1yKTtcbiBcdGlmIChyZXQpXG5AQCAtMTIyMCw2ICYjNDM7MTI2NCw4IEBAIHN0YXRpYyBfX2luaXQgaW50IGluaXRfdGR4X21vZHVsZSh2b2lkKVxuIFx0ZnJlZV90ZG1yX2xpc3QoXHUwMDI2dGR4X3RkbXJfbGlzdCk7XG4gZXJyX2ZyZWVfdGR4bWVtOlxuIFx0ZnJlZV90ZHhfbWVtbGlzdChcdTAwMjZ0ZHhfbWVtbGlzdCk7XG4mIzQzO2Vycl9mcmVlX3BhbXRfcmVmY291bnRzOlxuJiM0MztcdGZyZWVfcGFtdF9yZWZjb3VudHMoKTtcbiBcdGdvdG8gb3V0X3B1dF90ZHhtZW07XG4gfVxuIFxuQEAgLTIwMDMsNiAmIzQzOzIwNDksMjg4IEBAIHU2NCB0ZGhfcGh5bWVtX3BhZ2Vfd2JpbnZkX2hraWQodTY0IGhraWQsIGt2bV9wZm5fdCBwZm4pXG4gfVxuIEVYUE9SVF9TWU1CT0xfRk9SX0tWTSh0ZGhfcGh5bWVtX3BhZ2Vfd2JpbnZkX2hraWQpO1xuIFxuJiM0Mztib29sIHRkeF9zdXBwb3J0c19keW5hbWljX3BhbXQoY29uc3Qgc3RydWN0IHRkeF9zeXNfaW5mbyAqc3lzaW5mbylcbiYjNDM7e1xuJiM0MztcdHJldHVybiBzeXNpbmZvLVx1MDAzZWZlYXR1cmVzLnRkeF9mZWF0dXJlczAgXHUwMDI2IFREWF9GRUFUVVJFUzBfRFlOQU1JQ19QQU1UIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAgICB0ZHhfZW5hYmxlX2RwYW10O1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfRk9SX0tWTSh0ZHhfc3VwcG9ydHNfZHluYW1pY19wYW10KTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBzdHJ1Y3QgcGFnZSAqdGR4X2FsbG9jX3BhZ2VfcGFtdF9jYWNoZShzdHJ1Y3QgdGR4X3BhbXRfY2FjaGUgKmNhY2hlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHBhZ2UgKnBhZ2U7XG4mIzQzO1xuJiM0MztcdHBhZ2UgPSBsaXN0X2ZpcnN0X2VudHJ5X29yX251bGwoXHUwMDI2Y2FjaGUtXHUwMDNlcGFnZV9saXN0LCBzdHJ1Y3QgcGFnZSwgbHJ1KTtcbiYjNDM7XHRpZiAocGFnZSkge1xuJiM0MztcdFx0bGlzdF9kZWwoXHUwMDI2cGFnZS1cdTAwM2VscnUpO1xuJiM0MztcdFx0Y2FjaGUtXHUwMDNlY250LS07XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gcGFnZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHN0cnVjdCBwYWdlICphbGxvY19kcGFtdF9wYWdlKHN0cnVjdCB0ZHhfcGFtdF9jYWNoZSAqY2FjaGUpXG4mIzQzO3tcbiYjNDM7XHRpZiAoY2FjaGUpXG4mIzQzO1x0XHRyZXR1cm4gdGR4X2FsbG9jX3BhZ2VfcGFtdF9jYWNoZShjYWNoZSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBhbGxvY19wYWdlKEdGUF9LRVJORUxfQUNDT1VOVCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYWxsb2NfcGFtdF9hcnJheShzdHJ1Y3QgcGFnZSAqKnBhbXRfcGFnZXMsIHN0cnVjdCB0ZHhfcGFtdF9jYWNoZSAqY2FjaGUpXG4mIzQzO3tcbiYjNDM7XHRpbnQgaSwgajtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgVERYX0RQQU1UX0VOVFJZX1BBR0VfQ05UOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0cGFtdF9wYWdlc1tpXSA9IGFsbG9jX2RwYW10X3BhZ2UoY2FjaGUpO1xuJiM0MztcdFx0aWYgKCFwYW10X3BhZ2VzW2ldKVxuJiM0MztcdFx0XHRnb3RvIGVycjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7ZXJyOlxuJiM0MztcdGZvciAoaiA9IDA7IGogXHUwMDNjIGk7IGomIzQzOyYjNDM7KVxuJiM0MztcdFx0X19mcmVlX3BhZ2UocGFtdF9wYWdlc1tqXSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAtRU5PTUVNO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBmcmVlX3BhbXRfYXJyYXkoc3RydWN0IHBhZ2UgKipwYW10X3BhZ2VzKVxuJiM0Mzt7XG4mIzQzO1x0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIFREWF9EUEFNVF9FTlRSWV9QQUdFX0NOVDsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBSZXNldCBwYWdlcyB1bmNvbmRpdGlvbmFsbHkgdG8gY292ZXIgY2FzZXNcbiYjNDM7XHRcdCAqIHdoZXJlIHRoZXkgd2VyZSBwYXNzZWQgdG8gdGhlIFREWCBtb2R1bGUuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdHRkeF9xdWlya19yZXNldF9wYWRkcihwYWdlX3RvX3BoeXMocGFtdF9wYWdlc1tpXSksIFBBR0VfU0laRSk7XG4mIzQzO1xuJiM0MztcdFx0X19mcmVlX3BhZ2UocGFtdF9wYWdlc1tpXSk7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBDYWxjdWxhdGUgdGhlIGFyZyBuZWVkZWQgZm9yIG9wZXJhdGluZyBvbiB0aGUgRFBBTVQgYmFja2luZyBmb3JcbiYjNDM7ICogYSBnaXZlbiA0S0IgcGFnZS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB1NjQgcGFtdF8ybWJfYXJnKGt2bV9wZm5fdCBwZm4pXG4mIzQzO3tcbiYjNDM7XHQvKiBBcmcgdmFsdWUgd2lsbCBzcGVjaWZ5IGEgMk1CIHJlZ2lvbiBvZiBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlLiAqL1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgaHBhXzJtYiA9IEFMSUdOX0RPV04ocGZuIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZULCBQTURfU0laRSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBocGFfMm1iIHwgVERYX1BTXzJNO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBBZGQgUEFNVCBiYWNraW5nIGZvciB0aGUgMk1CIHJlZ2lvbiBzdXJyb3VuZGluZyB0aGUgZ2l2ZW4gcGZuLiAqL1xuJiM0MztzdGF0aWMgdTY0IHRkaF9waHltZW1fcGFtdF9hZGQoa3ZtX3Bmbl90IHBmbiwgc3RydWN0IHBhZ2UgKipwYW10X3BhZ2VzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHRkeF9tb2R1bGVfYXJncyBhcmdzID0ge1xuJiM0MztcdFx0LnJjeCA9IHBhbXRfMm1iX2FyZyhwZm4pLFxuJiM0MztcdFx0LnJkeCA9IHBhZ2VfdG9fcGh5cyhwYW10X3BhZ2VzWzBdKSxcbiYjNDM7XHRcdC5yOCA9IHBhZ2VfdG9fcGh5cyhwYW10X3BhZ2VzWzFdKSxcbiYjNDM7XHR9O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gc2VhbWNhbGwoVERIX1BIWU1FTV9QQU1UX0FERCwgXHUwMDI2YXJncyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIFJlbW92ZSBQQU1UIGJhY2tpbmcgZm9yIHRoZSAyTUIgcmVnaW9uIHN1cnJvdW5kaW5nIHRoZSBnaXZlbiBwZm4uICovXG4mIzQzO3N0YXRpYyB1NjQgdGRoX3BoeW1lbV9wYW10X3JlbW92ZShrdm1fcGZuX3QgcGZuLCBzdHJ1Y3QgcGFnZSAqKnBhbXRfcGFnZXMpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgdGR4X21vZHVsZV9hcmdzIGFyZ3MgPSB7XG4mIzQzO1x0XHQucmN4ID0gcGFtdF8ybWJfYXJnKHBmbiksXG4mIzQzO1x0fTtcbiYjNDM7XHR1NjQgcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBzZWFtY2FsbF9yZXQoVERIX1BIWU1FTV9QQU1UX1JFTU9WRSwgXHUwMDI2YXJncyk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdC8qIENvcHkgUEFNVCBwYWdlcyBvdXQgb2YgdGhlIHN0cnVjdCBwZXIgdGhlIFREWCBBQkkgKi9cbiYjNDM7XHRwYW10X3BhZ2VzWzBdID0gcGh5c190b19wYWdlKGFyZ3MucmR4KTtcbiYjNDM7XHRwYW10X3BhZ2VzWzFdID0gcGh5c190b19wYWdlKGFyZ3MucjgpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogU2VyaWFsaXplcyBhZGRpbmcvcmVtb3ZpbmcgUEFNVCBtZW1vcnkgKi9cbiYjNDM7c3RhdGljIERFRklORV9TUElOTE9DSyhwYW10X2xvY2spO1xuJiM0MztcbiYjNDM7LyogQnVtcCBQQU1UIHJlZmNvdW50IGZvciB0aGUgZ2l2ZW4gcGZuIGFuZCBhbGxvY2F0ZSBQQU1UIGJhY2tpbmcgaWYgbmVlZGVkLiAqL1xuJiM0MztpbnQgdGR4X3BhbXRfZ2V0KGt2bV9wZm5fdCBwZm4sIHN0cnVjdCB0ZHhfcGFtdF9jYWNoZSAqY2FjaGUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcGFnZSAqcGFtdF9wYWdlc1tURFhfRFBBTVRfRU5UUllfUEFHRV9DTlRdO1xuJiM0MztcdGF0b21pY190ICpwYW10X3JlZmNvdW50O1xuJiM0MztcdHU2NCB0ZHhfc3RhdHVzO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGlmICghdGR4X3N1cHBvcnRzX2R5bmFtaWNfcGFtdChcdTAwMjZ0ZHhfc3lzaW5mbykpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0cGFtdF9yZWZjb3VudCA9IHRkeF9maW5kX3BhbXRfcmVmY291bnQocGZuKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBJZiB0aGUgcGFtdCBwYWdlIGlzIGFscmVhZHkgYWRkZWQgKGkuZS4gcmVmY291bnQgXHUwMDNlPSAxKSxcbiYjNDM7XHQgKiB0aGVuIGp1c3QgaW5jcmVtZW50IHRoZSByZWZjb3VudC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoYXRvbWljX2luY19ub3RfemVybyhwYW10X3JlZmNvdW50KSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBhbGxvY19wYW10X2FycmF5KHBhbXRfcGFnZXMsIGNhY2hlKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0c3Bpbl9sb2NrKFx1MDAyNnBhbXRfbG9jayk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogVW5saWtlIHRkeF9wYW10X3B1dCgpIHdoaWNoIHVzZXMgYXRvbWljX2RlY19hbmRfbG9jaygpIHRvXG4mIzQzO1x0ICogYXRvbWljYWxseSBoYW5kbGUgdGhlIDEtXHUwMDNlMCB0cmFuc2l0aW9uLCB0aGUgZ2V0IHNpZGUgaGFzIG5vXG4mIzQzO1x0ICogZXF1aXZhbGVudCBjb21iaW5lZCBwcmltaXRpdmUgZm9yIDAtXHUwMDNlMS4gUmVjaGVjayB1bmRlciB0aGVcbiYjNDM7XHQgKiBsb2NrIHNpbmNlIGFub3RoZXIgZ2V0IG1heSBoYXZlIGFscmVhZHkgZG9uZSB0aGUgMC1cdTAwM2UxXG4mIzQzO1x0ICogdHJhbnNpdGlvbiBhZnRlciBib3RoIHNhdyBhdG9taWNfaW5jX25vdF96ZXJvKCkgZmFpbC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoYXRvbWljX2luY19ub3RfemVybyhwYW10X3JlZmNvdW50KSlcbiYjNDM7XHRcdGdvdG8gb3V0X2ZyZWU7XG4mIzQzO1xuJiM0MztcdHRkeF9zdGF0dXMgPSB0ZGhfcGh5bWVtX3BhbXRfYWRkKHBmbiwgcGFtdF9wYWdlcyk7XG4mIzQzO1x0aWYgKFdBUk5fT05fT05DRSh0ZHhfc3RhdHVzICE9IFREWF9TVUNDRVNTKSkge1xuJiM0MztcdFx0cmV0ID0gLUVJTztcbiYjNDM7XHRcdGdvdG8gb3V0X2ZyZWU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFRoZSByZWZjb3VudCBpcyB6ZXJvLCBhbmQgdGhpcyBsb2NrZWQgcGF0aCBpcyB0aGVcbiYjNDM7XHQgKiBvbmx5IHdheSB0byBpbmNyZWFzZSBpdCBmcm9tIDAtXHUwMDNlMS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRhdG9taWNfc2V0KHBhbXRfcmVmY291bnQsIDEpO1xuJiM0MztcdHNwaW5fdW5sb2NrKFx1MDAyNnBhbXRfbG9jayk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztvdXRfZnJlZTpcbiYjNDM7XHRzcGluX3VubG9jayhcdTAwMjZwYW10X2xvY2spO1xuJiM0MztcdGZyZWVfcGFtdF9hcnJheShwYW10X3BhZ2VzKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0ZPUl9LVk0odGR4X3BhbXRfZ2V0KTtcbiYjNDM7XG4mIzQzOy8qIERyb3AgUEFNVCByZWZjb3VudCBmb3IgdGhlIGdpdmVuIHBmbiBhbmQgZnJlZSBQQU1UIGJhY2tpbmcgaWYgbmVlZGVkLiAqL1xuJiM0Mzt2b2lkIHRkeF9wYW10X3B1dChrdm1fcGZuX3QgcGZuKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHBhZ2UgKnBhbXRfcGFnZXNbVERYX0RQQU1UX0VOVFJZX1BBR0VfQ05UXSA9IHt9O1xuJiM0MztcdGF0b21pY190ICpwYW10X3JlZmNvdW50O1xuJiM0MztcdHU2NCB0ZHhfc3RhdHVzO1xuJiM0MztcbiYjNDM7XHRpZiAoIXRkeF9zdXBwb3J0c19keW5hbWljX3BhbXQoXHUwMDI2dGR4X3N5c2luZm8pKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRwYW10X3JlZmNvdW50ID0gdGR4X2ZpbmRfcGFtdF9yZWZjb3VudChwZm4pO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIElmIHRoZXJlIGlzIG1vcmUgdGhhbiAxIHJlZmVyZW5jZSBvbiB0aGUgcGFtdCBwYWdlLCBkb24mIzM5O3RcbiYjNDM7XHQgKiByZW1vdmUgaXQgeWV0LiBKdXN0IGRlY3JlbWVudCB0aGUgcmVmY291bnQuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKCFhdG9taWNfZGVjX2FuZF9sb2NrKHBhbXRfcmVmY291bnQsIFx1MDAyNnBhbXRfbG9jaykpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHRkeF9zdGF0dXMgPSB0ZGhfcGh5bWVtX3BhbXRfcmVtb3ZlKHBmbiwgcGFtdF9wYWdlcyk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogRG9uJiMzOTt0IGZyZWUgcGFtdF9wYWdlcyBhcyBpdCBjb3VsZCBob2xkIGdhcmJhZ2Ugd2hlblxuJiM0MztcdCAqIHRkaF9waHltZW1fcGFtdF9yZW1vdmUoKSBmYWlscy4gIERvbiYjMzk7dCBwYW5pYy9CVUdfT04oKSwgYXNcbiYjNDM7XHQgKiB0aGVyZSBpcyBubyByaXNrIG9mIGRhdGEgY29ycnVwdGlvbiwgYnV0IGRvIHllbGwgbG91ZGx5IGFzXG4mIzQzO1x0ICogZmFpbHVyZSBpbmRpY2F0ZXMgYSBrZXJuZWwgYnVnLCBtZW1vcnkgaXMgYmVpbmcgbGVha2VkLCBhbmRcbiYjNDM7XHQgKiB0aGUgZGFuZ2xpbmcgUEFNVCBlbnRyeSBtYXkgY2F1c2UgZnV0dXJlIG9wZXJhdGlvbnMgdG8gZmFpbC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoV0FSTl9PTl9PTkNFKHRkeF9zdGF0dXMgIT0gVERYX1NVQ0NFU1MpKSB7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogYXRvbWljX2RlY19hbmRfbG9jaygpIGFscmVhZHkgZGVjcmVtZW50ZWQgaXQgdG8gMCxcbiYjNDM7XHRcdCAqIGJ1dCB0aGUgUEFNVCBlbnRyeSBzdGlsbCBleGlzdHMgc2luY2UgUkVNT1ZFIGZhaWxlZC5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0YXRvbWljX3NldChwYW10X3JlZmNvdW50LCAxKTtcbiYjNDM7XHRcdGdvdG8gb3V0X3VubG9jaztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHNwaW5fdW5sb2NrKFx1MDAyNnBhbXRfbG9jayk7XG4mIzQzO1x0ZnJlZV9wYW10X2FycmF5KHBhbXRfcGFnZXMpO1xuJiM0MztcdHJldHVybjtcbiYjNDM7b3V0X3VubG9jazpcbiYjNDM7XHRzcGluX3VubG9jayhcdTAwMjZwYW10X2xvY2spO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfRk9SX0tWTSh0ZHhfcGFtdF9wdXQpO1xuJiM0MztcbiYjNDM7dm9pZCB0ZHhfZnJlZV9wYW10X2NhY2hlKHN0cnVjdCB0ZHhfcGFtdF9jYWNoZSAqY2FjaGUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbiYjNDM7XG4mIzQzO1x0d2hpbGUgKChwYWdlID0gdGR4X2FsbG9jX3BhZ2VfcGFtdF9jYWNoZShjYWNoZSkpKVxuJiM0MztcdFx0X19mcmVlX3BhZ2UocGFnZSk7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTF9GT1JfS1ZNKHRkeF9mcmVlX3BhbXRfY2FjaGUpO1xuJiM0MztcbiYjNDM7aW50IHRkeF90b3B1cF9wYW10X2NhY2hlKHN0cnVjdCB0ZHhfcGFtdF9jYWNoZSAqY2FjaGUsIHVuc2lnbmVkIGxvbmcgbnBhZ2VzKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKFdBUk5fT05fT05DRSghdGR4X3N1cHBvcnRzX2R5bmFtaWNfcGFtdChcdTAwMjZ0ZHhfc3lzaW5mbykpKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdG5wYWdlcyAqPSBURFhfRFBBTVRfRU5UUllfUEFHRV9DTlQ7XG4mIzQzO1xuJiM0MztcdHdoaWxlIChjYWNoZS1cdTAwM2VjbnQgXHUwMDNjIG5wYWdlcykge1xuJiM0MztcdFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBhbGxvY19wYWdlKEdGUF9LRVJORUxfQUNDT1VOVCk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKCFwYWdlKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XG4mIzQzO1x0XHRsaXN0X2FkZChcdTAwMjZwYWdlLVx1MDAzZWxydSwgXHUwMDI2Y2FjaGUtXHUwMDNlcGFnZV9saXN0KTtcbiYjNDM7XHRcdGNhY2hlLVx1MDAzZWNudCYjNDM7JiM0Mzs7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0ZPUl9LVk0odGR4X3RvcHVwX3BhbXRfY2FjaGUpO1xuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogUmV0dXJuIGEgcGFnZSB0aGF0IGNhbiBiZSBnaWZ0ZWQgdG8gdGhlIFREWC1Nb2R1bGUgZm9yIHVzZSBhcyBhIFwmIzM0O2NvbnRyb2xcJiMzNDtcbiYjNDM7ICogcGFnZSwgaS5lLiBwYWdlcyB0aGF0IGFyZSB1c2VkIGZvciBjb250cm9sIHN0cnVjdHVyZXMgZm9yIGEgZ2l2ZW4gVERYXG4mIzQzOyAqIGd1ZXN0LCBhbmQgdGh1cyBvYnRhaW4gVERYIHByb3RlY3Rpb25zLCBpbmNsdWRpbmcgUEFNVCB0cmFja2luZy5cbiYjNDM7ICovXG4mIzQzO3N0cnVjdCBwYWdlICp0ZHhfYWxsb2NfY29udHJvbF9wYWdlKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbiYjNDM7XG4mIzQzO1x0cGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbiYjNDM7XHRpZiAoIXBhZ2UpXG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XG4mIzQzO1x0aWYgKHRkeF9wYW10X2dldChwYWdlX3RvX3BmbihwYWdlKSwgTlVMTCkpIHtcbiYjNDM7XHRcdF9fZnJlZV9wYWdlKHBhZ2UpO1xuJiM0MztcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gcGFnZTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0ZPUl9LVk0odGR4X2FsbG9jX2NvbnRyb2xfcGFnZSk7XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBGcmVlIGEgcGFnZSB0aGF0IHdhcyBnaWZ0ZWQgdG8gdGhlIFREWC1Nb2R1bGUgZm9yIHVzZSBhcyBhIGNvbnRyb2xcbiYjNDM7ICogcGFnZS4gQWZ0ZXIgdGhpcywgdGhlIHBhZ2UgaXMgbm8gbG9uZ2VyIHByb3RlY3RlZCBieSBURFguXG4mIzQzOyAqL1xuJiM0Mzt2b2lkIHRkeF9mcmVlX2NvbnRyb2xfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSlcbiYjNDM7e1xuJiM0MztcdGlmICghcGFnZSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0dGR4X3BhbXRfcHV0KHBhZ2VfdG9fcGZuKHBhZ2UpKTtcbiYjNDM7XHRfX2ZyZWVfcGFnZShwYWdlKTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0ZPUl9LVk0odGR4X2ZyZWVfY29udHJvbF9wYWdlKTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgX19pbml0IHRkeF9kcGFtdF9zZXR1cChjaGFyICpzdHIpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4ga3N0cnRvYm9vbChzdHIsIFx1MDAyNnRkeF9lbmFibGVfZHBhbXQpID09IDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO19fc2V0dXAoXCYjMzQ7dGR4X2RwYW10PVwmIzM0OywgdGR4X2RwYW10X3NldHVwKTtcbiYjNDM7XG4gdm9pZCB0ZHhfc3lzX2Rpc2FibGUodm9pZClcbiB7XG4gXHRzdHJ1Y3QgdGR4X21vZHVsZV9hcmdzIGFyZ3MgPSB7fTtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmggYi9hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmhcbmluZGV4IGJkZmQwZTFlMzM3YWMwLi5hODg2YzU0ZGVjYWFkYyAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5oXG5AQCAtNDgsNiAmIzQzOzQ4LDggQEBcbiAjZGVmaW5lIFRESF9TWVNfQ09ORklHXHRcdFx0NDVcbiAjZGVmaW5lIFRESF9TWVNfU0hVVERPV05cdFx0NTJcbiAjZGVmaW5lIFRESF9TWVNfVVBEQVRFXHRcdFx0NTNcbiYjNDM7I2RlZmluZSBUREhfUEhZTUVNX1BBTVRfQUREXHRcdDU4XG4mIzQzOyNkZWZpbmUgVERIX1BIWU1FTV9QQU1UX1JFTU9WRVx0XHQ1OVxuICNkZWZpbmUgVERIX1NZU19ESVNBQkxFXHRcdFx0NjlcbiBcbiAvKlxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHhfZ2xvYmFsX21ldGFkYXRhLmMgYi9hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4X2dsb2JhbF9tZXRhZGF0YS5jXG5pbmRleCBlNDljMzAwZjIzZDQzNS4uODM5M2QyYWE1OWRiZTcgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4X2dsb2JhbF9tZXRhZGF0YS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4X2dsb2JhbF9tZXRhZGF0YS5jXG5AQCAtMSw2ICYjNDM7MSw2IEBAXG4gLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAvKlxuLSAqIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZ1bmN0aW9ucyB0byByZWFkIFREWCBnbG9iYWwgbWV0YWRhdGEuXG4mIzQzOyAqIEZ1bmN0aW9ucyB0byByZWFkIFREWCBnbG9iYWwgbWV0YWRhdGEuXG4gICpcbiAgKiBUaGlzIGZpbGUgZG9lc24mIzM5O3QgY29tcGlsZSBvbiBpdHMgb3duIGFzIGl0IGxhY2tzIG9mIGluY2x1c2lvblxuICAqIG9mIFNFQU1DQUxMIHdyYXBwZXIgcHJpbWl0aXZlIHdoaWNoIHJlYWRzIGdsb2JhbCBtZXRhZGF0YS5cbkBAIC0zMyw2ICYjNDM7MzMsMTggQEAgc3RhdGljIF9faW5pdCBpbnQgZ2V0X3RkeF9zeXNfaW5mb19mZWF0dXJlcyhzdHJ1Y3QgdGR4X3N5c19pbmZvX2ZlYXR1cmVzICpzeXNpbmZcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuJiM0MztzdGF0aWMgX19pbml0IGludCBnZXRfdGR4X3N5c19pbmZvX3RkbXJfZHBhbXQoc3RydWN0IHRkeF9zeXNfaW5mb190ZG1yICpzeXNpbmZvX3RkbXIpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcdHU2NCB2YWw7XG4mIzQzO1xuJiM0MztcdHJldCA9IHJlYWRfc3lzX21ldGFkYXRhX2ZpZWxkKDB4OTEwMDAwMDEwMDAwMDAxMywgXHUwMDI2dmFsKTtcbiYjNDM7XHRpZiAoIXJldClcbiYjNDM7XHRcdHN5c2luZm9fdGRtci1cdTAwM2VwYW10X3BhZ2VfYml0bWFwX2VudHJ5X2JpdHMgPSB2YWw7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIF9faW5pdCBpbnQgZ2V0X3RkeF9zeXNfaW5mb190ZG1yKHN0cnVjdCB0ZHhfc3lzX2luZm9fdGRtciAqc3lzaW5mb190ZG1yKVxuIHtcbiBcdGludCByZXQgPSAwO1xuQEAgLTEyOSw1ICYjNDM7MTQxLDE0IEBAIHN0YXRpYyBfX2luaXQgaW50IGdldF90ZHhfc3lzX2luZm8oc3RydWN0IHRkeF9zeXNfaW5mbyAqc3lzaW5mbylcbiBcdHJldCA9IHJldCA/OiBnZXRfdGR4X3N5c19pbmZvX3RkX2N0cmwoXHUwMDI2c3lzaW5mby1cdTAwM2V0ZF9jdHJsKTtcbiBcdHJldCA9IHJldCA/OiBnZXRfdGR4X3N5c19pbmZvX3RkX2NvbmYoXHUwMDI2c3lzaW5mby1cdTAwM2V0ZF9jb25mKTtcbiBcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFRoZSBrZXJuZWwgc3VwcG9ydHMgdXNpbmcgVERYIHdpdGhvdXQgRHluYW1pYyBQQU1ULCBzb1xuJiM0MztcdCAqIGF2b2lkIHJlcG9ydGluZyBmYWlsdXJlIGlmIGl0JiMzOTtzIG5vdCBzdXBwb3J0ZWQuIERvbiYjMzk7dCB0cnlcbiYjNDM7XHQgKiB0byBzdXBwb3J0IGJ1Z2d5IFREWCBtb2R1bGVzIHRoYXQgYWR2ZXJ0aXNlIER5bmFtaWMgUEFNVFxuJiM0MztcdCAqIGJ1dCBkb24mIzM5O3QgZXhwb3NlIHRoZSBtZXRhZGF0YS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoIXJldCBcdTAwMjZcdTAwMjYgdGR4X3N1cHBvcnRzX2R5bmFtaWNfcGFtdChzeXNpbmZvKSlcbiYjNDM7XHRcdHJldCA9IGdldF90ZHhfc3lzX2luZm9fdGRtcl9kcGFtdChcdTAwMjZzeXNpbmZvLVx1MDAzZXRkbXIpO1xuJiM0MztcbiBcdHJldHVybiByZXQ7XG4gfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDEwOjU1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJTlRFTF9URFhfSE9TVCYjMzQ7LAogICAgJiMzNDtLVk1fSU5URUxfVERYJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGR4X3BhbXRfZ2V0JiMzNDssCiAgICAmIzM0O3RkeF9wYW10X3B1dCYjMzQ7LAogICAgJiMzNDt0ZHhfdG9wdXBfcGFtdF9jYWNoZSYjMzQ7LAogICAgJiMzNDt0ZHhfZnJlZV9wYW10X2NhY2hlJiMzNDssCiAgICAmIzM0O3RkeF9hbGxvY19jb250cm9sX3BhZ2UmIzM0OywKICAgICYjMzQ7dGR4X2ZyZWVfY29udHJvbF9wYWdlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgRHluYW1pYyBQaHlzaWNhbCBBZGRyZXNzIE1ldGFkYXRhIFRhYmxlIChQQU1UKSBzdXBwb3J0IGZvciBJbnRlbCBURFggaW4gS1ZNL3g4Ni4gSXQgYWRkcyBmdW5jdGlvbmFsIGNvcmUga2VybmVsIGxvZ2ljIHRvIGR5bmFtaWNhbGx5IGFsbG9jYXRlIGFuZCBmcmVlIFBBTVQgbWVtb3J5IHBhZ2VzIGZvciBURFggZ3Vlc3RzLCBtb2RpZnlpbmcgS1ZNIE1NVSBhbmQgVERYIGluaXRpYWxpemF0aW9uIHBhdGhzLiBUaGlzIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgcnVubmluZyBvbiBURFgtY2FwYWJsZSBoYXJkd2FyZSAoZS5nLiwgR0NQIEMzIGluc3RhbmNlcykgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG1lbW9yeSBtYW5hZ2VtZW50IGNvcnJlY3RuZXNzIGFuZCBwcmV2ZW50IGxlYWtzIG9yIGNyYXNoZXMgaW4gdGhlIFREWCBob3N0IHN1cHBvcnQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBjZWQyNDEwMmIxMjRjODlhNTY2MjdlN2M5ZjFhM2JhOGE3Y2ZmMzlhCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBKdWwgMjYgMTA6NTU6MjAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dCBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0CmluZGV4IGI1NDkzYTdmOGYyMjgxLi5hMGE3NjcwMjQ2YmM1OCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQKQEAgLTc1MTIsNiAmIzQzOzc1MTIsMTYgQEAgS2VybmVsIHBhcmFtZXRlcnMKIAogCXRkZng9CQlbSFcsRFJNXQogCiYjNDM7CXRkeF9kcGFtdD0KJiM0MzsJCQlbWDg2XSBDb250cm9scyB3aGV0aGVyIFREWCB3aWxsIHVzZSBEeW5hbWljIFBBTVQKJiM0MzsJCQl0byBzYXZlIG1lbW9yeSwgd2hlbiBzdXBwb3J0ZWQuCiYjNDM7CiYjNDM7CQkJVmFsaWQgcGFyYW1ldGVyczogJiMzNDtvbiYjMzQ7LCAmIzM0O29mZiYjMzQ7CiYjNDM7CQkJRGVmYXVsdDogJiMzNDtvZmYmIzM0OwomIzQzOwomIzQzOwkJCUZvciBkZXRhaWxzIHNlZToKJiM0MzsJCQlEb2N1bWVudGF0aW9uL2FyY2gveDg2L3RkeC5yc3QKJiM0MzsKIAl0ZXN0X3N1c3BlbmQ9CVtTVVNQRU5EXQogCQkJRm9ybWF0OiB7ICYjMzQ7bWVtJiMzNDsgfCAmIzM0O3N0YW5kYnkmIzM0OyB8ICYjMzQ7ZnJlZXplJiMzNDsgfVssTl0KIAkJCVNwZWNpZnkgJiMzNDttZW0mIzM0OyAoZm9yIFN1c3BlbmQtdG8tUkFNKSBvciAmIzM0O3N0YW5kYnkmIzM0OyAoZm9yCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FyY2gveDg2L3RkeC5yc3QgYi9Eb2N1bWVudGF0aW9uL2FyY2gveDg2L3RkeC5yc3QKaW5kZXggMzMwMzQ5OWFkNGM2ZjguLmExYzIzMDkyMzA1ODA3IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2FyY2gveDg2L3RkeC5yc3QKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9hcmNoL3g4Ni90ZHgucnN0CkBAIC0yMDAsNiAmIzQzOzIwMCwzNCBAQCByZWZsZWN0cyB0aGUgVENCIG9mIHRoZSBjdXJyZW50bHkgcnVubmluZyBURFggbW9kdWxlIGFuZCB0aGVyZWZvcmUKIGNoYW5nZXMgYWZ0ZXIgYW4gdXBkYXRlLiBCeSBjb250cmFzdCwgVEVFX1RDQl9TVk4gcmVmbGVjdHMgdGhlIFRDQiBhdCBURAogbGF1bmNoIHRpbWUgYW5kIGlzIG5vdCBhZmZlY3RlZC4KIAomIzQzO0R5bmFtaWMgUEFNVAomIzQzOy0tLS0tLS0tLS0tLQomIzQzOwomIzQzO1BoeXNpY2FsIEFkZHJlc3MgTWV0YWRhdGEgVGFibGUgKFBBTVQpIGlzIG1lbW9yeSB0aGF0IHRoZSBURFggbW9kdWxlIG5lZWRzCiYjNDM7dG8ga2VlcCBkYXRhIGFib3V0IGVhY2ggcGFnZSAodGhpbmsgbGlrZSBzdHJ1Y3QgcGFnZSkuIEl0IG5lZWRzIHRvIGJlIGhhbmRlZAomIzQzO3RvIHRoZSBURFggbW9kdWxlIGZvciBpdHMgZXhjbHVzaXZlIHVzZS4gRm9yIG5vcm1hbCBQQU1ULCB0aGlzIGlzIGluc3RhbGxlZAomIzQzO3doZW4gdGhlIFREWCBtb2R1bGUgaXMgZmlyc3QgbG9hZGVkIGFuZCBjb21lcyB0byBhYm91dCAwLjQlIG9mIHN5c3RlbSBtZW1vcnkuCiYjNDM7CiYjNDM7RHluYW1pYyBQQU1UIGlzIGEgVERYIG1vZHVsZSBmZWF0dXJlIHRoYXQgYWxsb3dzIFZNTSB0byBhbGxvY2F0ZSBwYXJ0IG9mIHRoZQomIzQzO1BBTVQgYXMgbmVlZGVkICh0aGUgcGFydHMgZm9yIHRyYWNraW5nIDRLQiBzaXplIHBhZ2VzKS4gVGhlIG90aGVyIHBhZ2Ugc2l6ZXMKJiM0MzsoMUdCIGFuZCAyTUIpIGFyZSBzdGlsbCBhbGxvY2F0ZWQgc3RhdGljYWxseSBhdCB0aGUgdGltZSBvZiBURFggbW9kdWxlCiYjNDM7aW5pdGlhbGl6YXRpb24uIFRoaXMgcmVkdWNlcyB0aGUgYW1vdW50IG9mIG1lbW9yeSB0aGF0IFREWCB1c2VzIHdoaWxlIFREcyBhcmUKJiM0Mztub3QgaW4gdXNlLgomIzQzOwomIzQzO1doZW4gRHluYW1pYyBQQU1UIGlzIGluIHVzZSwgZG1lc2cgc2hvd3MgaXQgbGlrZTo6CiYjNDM7CiYjNDM7ICBbLi5dIHZpcnQvdGR4OiBFbmFibGUgRHluYW1pYyBQQU1UCiYjNDM7ICBbLi5dIHZpcnQvdGR4OiAxMDA5MiBLQiBhbGxvY2F0ZWQgZm9yIFBBTVQKJiM0MzsgIFsuLl0gdmlydC90ZHg6IFREWC1Nb2R1bGUgaW5pdGlhbGl6ZWQKJiM0MzsKJiM0MztEeW5hbWljIFBBTVQgaXMgb25seSBlbmFibGVkIHdoZW4gc3VwcG9ydGVkIGFuZCB0aGUgYGB0ZHhfZHBhbXQ9YGAga2VybmVsCiYjNDM7cGFyYW1ldGVyIGlzIHNldCB0byAmIzM0O29uJiMzNDsuIFRoZSBmZWF0dXJlIGlzIG9mZiBieSBkZWZhdWx0IGJlY2F1c2UgVERYIG1vZHVsZQomIzQzO2ludGVybmFsIGRldGFpbHMgcHJldmVudCBEeW5hbWljIFBBTVQgZnJvbSB3b3JraW5nIG9uIGFsbCBrZXlpZCBwYXJ0aXRpb25pbmcKJiM0Mztjb25maWd1cmF0aW9ucy4gV2hlbiB0aGUgVERYIG1vZHVsZSBpcyBmaXhlZCB0byBpbmNsdWRlIHRoZXNlIGNvbnN0cmFpbnRzIGluCiYjNDM7aXRzIGVudW1lcmF0aW9uIG9mIER5bmFtaWMgUEFNVCBzdXBwb3J0LCBrZXJuZWwgc3VwcG9ydCBjYW4gYmUgY2hhbmdlZCB0bwomIzQzO2RlZmF1bHQgb24uIEZvciBtb3JlIGluZm9ybWF0aW9uLCBjb25zdWx0IHRoZSBJbnRlbCBURFggZG9jdW1lbnRhdGlvbiBhYm91dAomIzQzO0R5bmFtaWMgUEFNVC4KJiM0MzsKIFREWCBJbnRlcmFjdGlvbiB0byBPdGhlciBLZXJuZWwgQ29tcG9uZW50cwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oCmluZGV4IDgzZGM1MDg2MTM4YjM5Li41ODg1NjNkZmU4OGQ1NyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oCkBAIC05OCw2ICYjNDM7OTgsNyBAQCBLVk1fWDg2X09QX09QVElPTkFMX1JFVDAodGRwX2hhc19zbWVwKQogS1ZNX1g4Nl9PUChsb2FkX21tdV9wZ2QpCiBLVk1fWDg2X09QX09QVElPTkFMX1JFVDAoc2V0X2V4dGVybmFsX3NwdGUpCiBLVk1fWDg2X09QX09QVElPTkFMKGZyZWVfZXh0ZXJuYWxfc3B0KQomIzQzO0tWTV9YODZfT1BfT1BUSU9OQUxfUkVUMCh0b3B1cF9leHRlcm5hbF9jYWNoZSkKIEtWTV9YODZfT1AoaGFzX3diaW52ZF9leGl0KQogS1ZNX1g4Nl9PUChnZXRfbDJfdHNjX29mZnNldCkKIEtWTV9YODZfT1AoZ2V0X2wyX3RzY19tdWx0aXBsaWVyKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKaW5kZXggNWY2YzFjZTk2NzNiN2YuLjBkYmY2NTY0ZGQwYzUxIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKQEAgLTE5MjIsNiAmIzQzOzE5MjIsNyBAQCBzdHJ1Y3Qga3ZtX3g4Nl9vcHMgewogCS8qIFVwZGF0ZSBleHRlcm5hbCBwYWdlIHRhYmxlcyBmb3IgcGFnZSB0YWJsZSBhYm91dCB0byBiZSBmcmVlZC4gKi8KIAl2b2lkICgqZnJlZV9leHRlcm5hbF9zcHQpKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tbXVfcGFnZSAqc3ApOwogCiYjNDM7CWludCAoKnRvcHVwX2V4dGVybmFsX2NhY2hlKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBtaW5fbnJfc3B0cyk7CiAKIAlib29sICgqaGFzX3diaW52ZF9leGl0KSh2b2lkKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZHguaAppbmRleCA4OWU5N2Q1NzYxZDg5ZS4uNzkxMDkwMWE3YmEyMWIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RkeC5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RkeC5oCkBAIC0zNiw2ICYjNDM7MzYsNyBAQAogLyogQml0IGRlZmluaXRpb25zIG9mIFREWF9GRUFUVVJFUzAgbWV0YWRhdGEgZmllbGQgKi8KICNkZWZpbmUgVERYX0ZFQVRVUkVTMF9URF9QUkVTRVJWSU5HCUJJVF9VTEwoMSkKICNkZWZpbmUgVERYX0ZFQVRVUkVTMF9OT19SQlBfTU9ECUJJVF9VTEwoMTgpCiYjNDM7I2RlZmluZSBURFhfRkVBVFVSRVMwX0RZTkFNSUNfUEFNVAlCSVRfVUxMKDM2KQogCiAjaWZuZGVmIF9fQVNTRU1CTEVSX18KIApAQCAtMTE4LDEyICYjNDM7MTE5LDM3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB0ZHhfc3VwcG9ydHNfcnVudGltZV91cGRhdGUoY29uc3Qgc3RydWN0IHRkeF9zeXNfaW5mbyAqc3lzaW5mCiAJcmV0dXJuIHN5c2luZm8tJmd0O2ZlYXR1cmVzLnRkeF9mZWF0dXJlczAgJmFtcDsgVERYX0ZFQVRVUkVTMF9URF9QUkVTRVJWSU5HOwogfQogCiYjNDM7Ym9vbCB0ZHhfc3VwcG9ydHNfZHluYW1pY19wYW10KGNvbnN0IHN0cnVjdCB0ZHhfc3lzX2luZm8gKnN5c2luZm8pOwomIzQzOwomIzQzOy8qIFNpbXBsZSBzdHJ1Y3R1cmUgZm9yIHByZS1hbGxvY2F0aW5nIER5bmFtaWMgUEFNVCBwYWdlcyBvdXRzaWRlIG9mIHNwaW5sb2Nrcy4gKi8KJiM0MztzdHJ1Y3QgdGR4X3BhbXRfY2FjaGUgewomIzQzOwlzdHJ1Y3QgbGlzdF9oZWFkIHBhZ2VfbGlzdDsKJiM0MzsJaW50IGNudDsKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCB0ZHhfaW5pdF9wYW10X2NhY2hlKHN0cnVjdCB0ZHhfcGFtdF9jYWNoZSAqY2FjaGUpCiYjNDM7ewomIzQzOwlJTklUX0xJU1RfSEVBRCgmYW1wO2NhY2hlLSZndDtwYWdlX2xpc3QpOwomIzQzOwljYWNoZS0mZ3Q7Y250ID0gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCB0ZHhfZnJlZV9wYW10X2NhY2hlKHN0cnVjdCB0ZHhfcGFtdF9jYWNoZSAqY2FjaGUpOwomIzQzO2ludCB0ZHhfdG9wdXBfcGFtdF9jYWNoZShzdHJ1Y3QgdGR4X3BhbXRfY2FjaGUgKmNhY2hlLCB1bnNpZ25lZCBsb25nIG5wYWdlcyk7CiYjNDM7aW50IHRkeF9wYW10X2dldChrdm1fcGZuX3QgcGZuLCBzdHJ1Y3QgdGR4X3BhbXRfY2FjaGUgKmNhY2hlKTsKJiM0Mzt2b2lkIHRkeF9wYW10X3B1dChrdm1fcGZuX3QgcGZuKTsKJiM0MzsKIGludCB0ZHhfZ3Vlc3Rfa2V5aWRfYWxsb2Modm9pZCk7CiB1MzIgdGR4X2dldF9ucl9ndWVzdF9rZXlpZHModm9pZCk7CiB2b2lkIHRkeF9ndWVzdF9rZXlpZF9mcmVlKHVuc2lnbmVkIGludCBrZXlpZCk7CiAKIHZvaWQgdGR4X3F1aXJrX3Jlc2V0X3BhZGRyKHVuc2lnbmVkIGxvbmcgYmFzZSwgdW5zaWduZWQgbG9uZyBzaXplKTsKIAomIzQzOy8qIE51bWJlciBvZiBQQU1UIHBhZ2VzIHRvIGJlIHByb3ZpZGVkIHRvIFREWCBtb2R1bGUgcGVyIDJNQiByZWdpb24gb2YgUEEgKi8KJiM0MzsjZGVmaW5lIFREWF9EUEFNVF9FTlRSWV9QQUdFX0NOVCAyCiYjNDM7CiYjNDM7c3RydWN0IHBhZ2UgKnRkeF9hbGxvY19jb250cm9sX3BhZ2Uodm9pZCk7CiYjNDM7dm9pZCB0ZHhfZnJlZV9jb250cm9sX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpOwomIzQzOwogc3RydWN0IHRkeF90ZCB7CiAJLyogVEQgcm9vdCBzdHJ1Y3R1cmU6ICovCiAJc3RydWN0IHBhZ2UgKnRkcl9wYWdlOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4X2dsb2JhbF9tZXRhZGF0YS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4X2dsb2JhbF9tZXRhZGF0YS5oCmluZGV4IDQxMTUwZDU0NjU4OWMxLi4yYTQyNTUxZmMzM2NkNiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4X2dsb2JhbF9tZXRhZGF0YS5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RkeF9nbG9iYWxfbWV0YWRhdGEuaApAQCAtMjEsNiAmIzQzOzIxLDkgQEAgc3RydWN0IHRkeF9zeXNfaW5mb190ZG1yIHsKIAl1MTYgcGFtdF80a19lbnRyeV9zaXplOwogCXUxNiBwYW10XzJtX2VudHJ5X3NpemU7CiAJdTE2IHBhbXRfMWdfZW50cnlfc2l6ZTsKJiM0MzsKJiM0MzsJLyogT3B0aW9uYWwgbWV0YWRhdGEsIGlmIER5bmFtaWMgUEFNVCBpcyBzdXBwb3J0ZWQgKi8KJiM0MzsJdTggIHBhbXRfcGFnZV9iaXRtYXBfZW50cnlfYml0czsKIH07CiAKIHN0cnVjdCB0ZHhfc3lzX2luZm9fdGRfY3RybCB7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vbW11L21tdS5jIGIvYXJjaC94ODYva3ZtL21tdS9tbXUuYwppbmRleCAyMzRkMGE5NWFiZjUzNC4uNmRhYjk5NjU0ZjE3MDIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9tbXUvbW11LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL21tdS9tbXUuYwpAQCAtNjE0LDYgJiM0Mzs2MTQsMTAgQEAgc3RhdGljIGludCBtbXVfdG9wdXBfbWVtb3J5X2NhY2hlcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgbWF5YmVfaW5kaXJlY3QpCiAJCQkJCSAgICAgICBQVDY0X1JPT1RfTUFYX0xFVkVMKTsKIAkJaWYgKHIpCiAJCQlyZXR1cm4gcjsKJiM0MzsKJiM0MzsJCXIgPSBrdm1feDg2X2NhbGwodG9wdXBfZXh0ZXJuYWxfY2FjaGUpKHZjcHUsIFBUNjRfUk9PVF9NQVhfTEVWRUwpOwomIzQzOwkJaWYgKHIpCiYjNDM7CQkJcmV0dXJuIHI7CiAJfQogCXIgPSBrdm1fbW11X3RvcHVwX21lbW9yeV9jYWNoZSgmYW1wO3ZjcHUtJmd0O2FyY2gubW11X3NoYWRvd19wYWdlX2NhY2hlLAogCQkJCSAgICAgICBQVDY0X1JPT1RfTUFYX0xFVkVMKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvdGR4LmMgYi9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jCmluZGV4IDU0NWIwM2Q5ZDEwYjgxLi4wOTU3MzExMjU0MGU5OCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3ZteC90ZHguYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jCkBAIC0zNjIsNyAmIzQzOzM2Miw3IEBAIHN0YXRpYyB2b2lkIHRkeF9yZWNsYWltX2NvbnRyb2xfcGFnZShzdHJ1Y3QgcGFnZSAqY3RybF9wYWdlKQogCWlmICh0ZHhfcmVjbGFpbV9wYWdlKGN0cmxfcGFnZSkpCiAJCXJldHVybjsKIAotCV9fZnJlZV9wYWdlKGN0cmxfcGFnZSk7CiYjNDM7CXRkeF9mcmVlX2NvbnRyb2xfcGFnZShjdHJsX3BhZ2UpOwogfQogCiBzdHJ1Y3QgdGR4X2ZsdXNoX3ZwX2FyZyB7CkBAIC01ODksNyAmIzQzOzU4OSw3IEBAIHN0YXRpYyB2b2lkIHRkeF9yZWNsYWltX3RkX2NvbnRyb2xfcGFnZXMoc3RydWN0IGt2bSAqa3ZtKQogCiAJdGR4X3F1aXJrX3Jlc2V0X3BhZGRyKHBhZ2VfdG9fcGh5cyhrdm1fdGR4LSZndDt0ZC50ZHJfcGFnZSksIFBBR0VfU0laRSk7CiAKLQlfX2ZyZWVfcGFnZShrdm1fdGR4LSZndDt0ZC50ZHJfcGFnZSk7CiYjNDM7CXRkeF9mcmVlX2NvbnRyb2xfcGFnZShrdm1fdGR4LSZndDt0ZC50ZHJfcGFnZSk7CiAJa3ZtX3RkeC0mZ3Q7dGQudGRyX3BhZ2UgPSBOVUxMOwogfQogCkBAIC02ODEsNiAmIzQzOzY4MSw4IEBAIGludCB0ZHhfdmNwdV9jcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCWlmICghaXJxY2hpcF9zcGxpdCh2Y3B1LSZndDtrdm0pKQogCQlyZXR1cm4gLUVJTlZBTDsKIAomIzQzOwl0ZHhfaW5pdF9wYW10X2NhY2hlKCZhbXA7dGR4LSZndDtwYW10X2NhY2hlKTsKJiM0MzsKIAlmcHN0YXRlX3NldF9jb25maWRlbnRpYWwoJmFtcDt2Y3B1LSZndDthcmNoLmd1ZXN0X2ZwdSk7CiAJdmNwdS0mZ3Q7YXJjaC5hcGljLSZndDtndWVzdF9hcGljX3Byb3RlY3RlZCA9IHRydWU7CiAJSU5JVF9MSVNUX0hFQUQoJmFtcDt0ZHgtJmd0O3Z0LnBpX3dha2V1cF9saXN0KTsKQEAgLTg2Niw2ICYjNDM7ODY4LDggQEAgdm9pZCB0ZHhfdmNwdV9mcmVlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAlzdHJ1Y3QgdmNwdV90ZHggKnRkeCA9IHRvX3RkeCh2Y3B1KTsKIAlpbnQgaTsKIAomIzQzOwl0ZHhfZnJlZV9wYW10X2NhY2hlKCZhbXA7dGR4LSZndDtwYW10X2NhY2hlKTsKJiM0MzsKIAlpZiAodmNwdS0mZ3Q7Y3B1ICE9IC0xKSB7CiAJCUtWTV9CVUdfT04odGR4LSZndDtzdGF0ZSA9PSBWQ1BVX1REX1NUQVRFX0lOSVRJQUxJWkVELCB2Y3B1LSZndDtrdm0pOwogCQl0ZHhfZmx1c2hfdnBfb25fY3B1KHZjcHUpOwpAQCAtMTYyMSw2ICYjNDM7MTYyNSwxNyBAQCB2b2lkIHRkeF9sb2FkX21tdV9wZ2Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBocGFfdCByb290X2hwYSwgaW50IHBnZF9sZXZlbCkKIAl0ZF92bWNzX3dyaXRlNjQodG9fdGR4KHZjcHUpLCBTSEFSRURfRVBUX1BPSU5URVIsIHJvb3RfaHBhKTsKIH0KIAomIzQzO3N0YXRpYyBpbnQgdGR4X3RvcHVwX2V4dGVybmFsX3BhbXRfY2FjaGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgbWluX25yX3NwdHMpCiYjNDM7ewomIzQzOwkvKgomIzQzOwkgKiBNaW51cyBvbmUgcGFnZSB0byBleGNsdWRlIHRoZSByb290IFNQVCwgYnV0IHBsdXMgb25lIHBhZ2UgZm9yIGEKJiM0MzsJICogcG9zc2libGUgNEtCIHByaXZhdGUgbWFwcGluZy4KJiM0MzsJICovCiYjNDM7CW1pbl9ucl9zcHRzICYjNDM7PSAtMSAmIzQzOyAxOwomIzQzOwomIzQzOwlyZXR1cm4gdGR4X3RvcHVwX3BhbXRfY2FjaGUoJmFtcDt0b190ZHgodmNwdSktJmd0O3BhbXRfY2FjaGUsIG1pbl9ucl9zcHRzKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IHRkeF9tZW1fcGFnZV9hZGQoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4sIGVudW0gcGdfbGV2ZWwgbGV2ZWwsCiAJCQkgICAga3ZtX3Bmbl90IHBmbikKIHsKQEAgLTE2NzksMTYgJiM0MzsxNjk0LDI4IEBAIHN0YXRpYyBzdHJ1Y3QgcGFnZSAqdGR4X3NwdGVfdG9fc2VwdF9wdChzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbiwKIHN0YXRpYyBpbnQgdGR4X3NlcHRfbWFwX25vbmxlYWZfc3B0ZShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbiwKIAkJCQkgICAgIGVudW0gcGdfbGV2ZWwgbGV2ZWwsIHU2NCBuZXdfc3B0ZSkKIHsKJiM0MzsJc3RydWN0IGt2bV92Y3B1ICp2Y3B1ID0ga3ZtX2dldF9ydW5uaW5nX3ZjcHUoKTsKIAlncGFfdCBncGEgPSBnZm5fdG9fZ3BhKGdmbik7CiAJdTY0IGVyciwgZW50cnksIGxldmVsX3N0YXRlOwogCXN0cnVjdCBwYWdlICpzZXB0X3B0OwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlpZiAoS1ZNX0JVR19PTighdmNwdSwga3ZtKSkKJiM0MzsJCXJldHVybiAtRUlPOwogCiAJc2VwdF9wdCA9IHRkeF9zcHRlX3RvX3NlcHRfcHQoa3ZtLCBnZm4sIG5ld19zcHRlLCBsZXZlbCk7CiAJaWYgKCFzZXB0X3B0KQogCQlyZXR1cm4gLUVJTzsKIAomIzQzOwlyZXQgPSB0ZHhfcGFtdF9nZXQocGFnZV90b19wZm4oc2VwdF9wdCksICZhbXA7dG9fdGR4KHZjcHUpLSZndDtwYW10X2NhY2hlKTsKJiM0MzsJaWYgKEtWTV9CVUdfT04ocmV0LCBrdm0pKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKIAllcnIgPSB0ZGhfbWVtX3NlcHRfYWRkKCZhbXA7dG9fa3ZtX3RkeChrdm0pLSZndDt0ZCwgZ3BhLCBsZXZlbCwgc2VwdF9wdCwKIAkJCSAgICAgICAmYW1wO2VudHJ5LCAmYW1wO2xldmVsX3N0YXRlKTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCXRkeF9wYW10X3B1dChwYWdlX3RvX3BmbihzZXB0X3B0KSk7CiYjNDM7CiAJaWYgKHVubGlrZWx5KHRkeF9vcGVyYW5kX2J1c3koZXJyKSkpCiAJCXJldHVybiAtRUJVU1k7CiAKQEAgLTE3MDEsOCAmIzQzOzE3MjgsMTMgQEAgc3RhdGljIGludCB0ZHhfc2VwdF9tYXBfbm9ubGVhZl9zcHRlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLAogc3RhdGljIGludCB0ZHhfc2VwdF9tYXBfbGVhZl9zcHRlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLCBlbnVtIHBnX2xldmVsIGxldmVsLAogCQkJCSAgdTY0IG5ld19zcHRlKQogewomIzQzOwlzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUgPSBrdm1fZ2V0X3J1bm5pbmdfdmNwdSgpOwogCXN0cnVjdCBrdm1fdGR4ICprdm1fdGR4ID0gdG9fa3ZtX3RkeChrdm0pOwogCWt2bV9wZm5fdCBwZm4gPSBzcHRlX3RvX3BmbihuZXdfc3B0ZSk7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWlmIChLVk1fQlVHX09OKCF2Y3B1LCBrdm0pKQomIzQzOwkJcmV0dXJuIC1FSU87CiAKIAkvKiBUT0RPOiBoYW5kbGUgbGFyZ2UgcGFnZXMuICovCiAJaWYgKEtWTV9CVUdfT04obGV2ZWwgIT0gUEdfTEVWRUxfNEssIGt2bSkpCkBAIC0xNzEwLDYgJiM0MzsxNzQyLDEwIEBAIHN0YXRpYyBpbnQgdGR4X3NlcHRfbWFwX2xlYWZfc3B0ZShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbiwgZW51bSBwZ19sZXZlbCBsZXZlCiAKIAlXQVJOX09OX09OQ0UoKG5ld19zcHRlICZhbXA7IFZNWF9FUFRfUldYX01BU0spICE9IFZNWF9FUFRfUldYX01BU0spOwogCiYjNDM7CXJldCA9IHRkeF9wYW10X2dldChwZm4sICZhbXA7dG9fdGR4KHZjcHUpLSZndDtwYW10X2NhY2hlKTsKJiM0MzsJaWYgKEtWTV9CVUdfT04ocmV0LCBrdm0pKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKIAkvKgogCSAqIEVuc3VyZSBwcmVfZmF1bHRfYWxsb3dlZCBpcyByZWFkIGJ5IGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeSgpCiAJICogYmVmb3JlIGt2bV90ZHgtJmd0O3N0YXRlLiAgVXNlcnNwYWNlIG11c3Qgbm90IGJlIGFsbG93ZWQgdG8gcHJlLWZhdWx0CkBAIC0xNzIyLDEwICYjNDM7MTc1OCwxNSBAQCBzdGF0aWMgaW50IHRkeF9zZXB0X21hcF9sZWFmX3NwdGUoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4sIGVudW0gcGdfbGV2ZWwgbGV2ZQogCSAqIElmIHRoZSBURCBpc24mIzM5O3QgZmluYWxpemVkL3J1bm5hYmxlLCB0aGVuIHVzZXJzcGFjZSBpcyBpbml0aWFsaXppbmcKIAkgKiB0aGUgVk0gaW1hZ2UgdmlhIEtWTV9URFhfSU5JVF9NRU1fUkVHSU9OOyBBREQgdGhlIHBhZ2UgdG8gdGhlIFRELgogCSAqLwotCWlmICh1bmxpa2VseShrdm1fdGR4LSZndDtzdGF0ZSAhPSBURF9TVEFURV9SVU5OQUJMRSkpCi0JCXJldHVybiB0ZHhfbWVtX3BhZ2VfYWRkKGt2bSwgZ2ZuLCBsZXZlbCwgcGZuKTsKJiM0MzsJaWYgKGxpa2VseShrdm1fdGR4LSZndDtzdGF0ZSA9PSBURF9TVEFURV9SVU5OQUJMRSkpCiYjNDM7CQlyZXQgPSB0ZHhfbWVtX3BhZ2VfYXVnKGt2bSwgZ2ZuLCBsZXZlbCwgcGZuKTsKJiM0MzsJZWxzZQomIzQzOwkJcmV0ID0gdGR4X21lbV9wYWdlX2FkZChrdm0sIGdmbiwgbGV2ZWwsIHBmbik7CiYjNDM7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQl0ZHhfcGFtdF9wdXQocGZuKTsKIAotCXJldHVybiB0ZHhfbWVtX3BhZ2VfYXVnKGt2bSwgZ2ZuLCBsZXZlbCwgcGZuKTsKJiM0MzsJcmV0dXJuIHJldDsKIH0KIAogLyoKQEAgLTE4MjIsNiAmIzQzOzE4NjMsNyBAQCBzdGF0aWMgaW50IHRkeF9zZXB0X3JlbW92ZV9sZWFmX3NwdGUoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4sCiAJCXJldHVybiAtRUlPOwogCiAJdGR4X3F1aXJrX3Jlc2V0X3BhZGRyKFBGTl9QSFlTKHBmbiksIFBBR0VfU0laRSk7CiYjNDM7CXRkeF9wYW10X3B1dChwZm4pOwogCXJldHVybiAwOwogfQogCkBAIC0xODY1LDYgJiM0MzsxOTA3LDggQEAgc3RhdGljIGludCB0ZHhfc2VwdF9zZXRfcHJpdmF0ZV9zcHRlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLCB1NjQgb2xkX3NwdGUsCiAgKi8KIHN0YXRpYyB2b2lkIHRkeF9zZXB0X2ZyZWVfcHJpdmF0ZV9zcHQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcCkKIHsKJiM0MzsJc3RydWN0IHBhZ2UgKnNlcHRfcHQgPSB2aXJ0X3RvX3BhZ2Uoc3AtJmd0O2V4dGVybmFsX3NwdCk7CiYjNDM7CiAJLyoKIAkgKiBLVk0gZG9lc24mIzM5O3QgKHlldCkgemFwIHBhZ2UgdGFibGUgcGFnZXMgaW4gbWlycm9yIHBhZ2UgdGFibGUgd2hpbGUKIAkgKiBURCBpcyBhY3RpdmUsIHRob3VnaCBndWVzdCBwYWdlcyBtYXBwZWQgaW4gbWlycm9yIHBhZ2UgdGFibGUgY291bGQgYmUKQEAgLTE4NzgsMTUgJiM0MzsxOTIyLDE1IEBAIHN0YXRpYyB2b2lkIHRkeF9zZXB0X2ZyZWVfcHJpdmF0ZV9zcHQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcCkKIAkgKiB0aGUgcGFnZSB0byBwcmV2ZW50IHRoZSBrZXJuZWwgZnJvbSBhY2Nlc3NpbmcgdGhlIGVuY3J5cHRlZCBwYWdlLgogCSAqLwogCWlmIChLVk1fQlVHX09OKGlzX2hraWRfYXNzaWduZWQodG9fa3ZtX3RkeChrdm0pKSwga3ZtKSB8fAotCSAgICB0ZHhfcmVjbGFpbV9wYWdlKHZpcnRfdG9fcGFnZShzcC0mZ3Q7ZXh0ZXJuYWxfc3B0KSkpCiYjNDM7CSAgICB0ZHhfcmVjbGFpbV9wYWdlKHNlcHRfcHQpKQogCQlnb3RvIG91dDsKIAogCS8qCi0JICogSW1tZWRpYXRlbHkgZnJlZSB0aGUgUy1FUFQgcGFnZSBiZWNhdXNlIFJDVS10aW1lIGZyZWUgaXMgdW5uZWNlc3NhcnkKLQkgKiBhZnRlciBUREguUEhZTUVNLlBBR0UuUkVDTEFJTSBlbnN1cmVzIHRoZXJlIGFyZSBubyBvdXRzdGFuZGluZwotCSAqIHJlYWRlcnMuCiYjNDM7CSAqIEltbWVkaWF0ZWx5IGZyZWUgdGhlIFMtRVBUIHBhZ2UgYXMgdGhlIFREWCBzdWJzeXN0ZW0gZG9lc24mIzM5O3Qgc3VwcG9ydAomIzQzOwkgKiBmcmVlaW5nIHBhZ2VzIGZyb20gUkNVIGNhbGxiYWNrcywgYW5kIG1vcmUgaW1wb3J0YW50bHkgYmVjYXVzZQomIzQzOwkgKiBUREguUEhZTUVNLlBBR0UuUkVDTEFJTSBlbnN1cmVzIHRoZXJlIGFyZSBubyBvdXRzdGFuZGluZyByZWFkZXJzLgogCSAqLwotCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylzcC0mZ3Q7ZXh0ZXJuYWxfc3B0KTsKJiM0MzsJdGR4X2ZyZWVfY29udHJvbF9wYWdlKHNlcHRfcHQpOwogb3V0OgogCXNwLSZndDtleHRlcm5hbF9zcHQgPSBOVUxMOwogfQpAQCAtMjQ1OSw3ICYjNDM7MjUwMyw3IEBAIHN0YXRpYyBpbnQgX190ZHhfdGRfaW5pdChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCB0ZF9wYXJhbXMgKnRkX3BhcmFtcywKIAogCXJldCA9IC1FTk9NRU07CiAKLQl0ZHJfcGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTF9BQ0NPVU5UKTsKJiM0MzsJdGRyX3BhZ2UgPSB0ZHhfYWxsb2NfY29udHJvbF9wYWdlKCk7CiAJaWYgKCF0ZHJfcGFnZSkKIAkJZ290byBmcmVlX2hraWQ7CiAKQEAgLTI0NzIsNyAmIzQzOzI1MTYsNyBAQCBzdGF0aWMgaW50IF9fdGR4X3RkX2luaXQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3QgdGRfcGFyYW1zICp0ZF9wYXJhbXMsCiAJCWdvdG8gZnJlZV90ZHI7CiAKIAlmb3IgKGkgPSAwOyBpICZsdDsga3ZtX3RkeC0mZ3Q7dGQudGRjc19ucl9wYWdlczsgaSYjNDM7JiM0MzspIHsKLQkJdGRjc19wYWdlc1tpXSA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTF9BQ0NPVU5UKTsKJiM0MzsJCXRkY3NfcGFnZXNbaV0gPSB0ZHhfYWxsb2NfY29udHJvbF9wYWdlKCk7CiAJCWlmICghdGRjc19wYWdlc1tpXSkKIAkJCWdvdG8gZnJlZV90ZGNzOwogCX0KQEAgLTI1OTAsMTAgJiM0MzsyNjM0LDggQEAgc3RhdGljIGludCBfX3RkeF90ZF9pbml0KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IHRkX3BhcmFtcyAqdGRfcGFyYW1zLAogdGVhcmRvd246CiAJLyogT25seSBmcmVlIHBhZ2VzIG5vdCB5ZXQgYWRkZWQsIHNvIHN0YXJ0IGF0ICYjMzk7aSYjMzk7ICovCiAJZm9yICg7IGkgJmx0OyBrdm1fdGR4LSZndDt0ZC50ZGNzX25yX3BhZ2VzOyBpJiM0MzsmIzQzOykgewotCQlpZiAodGRjc19wYWdlc1tpXSkgewotCQkJX19mcmVlX3BhZ2UodGRjc19wYWdlc1tpXSk7Ci0JCQl0ZGNzX3BhZ2VzW2ldID0gTlVMTDsKLQkJfQomIzQzOwkJdGR4X2ZyZWVfY29udHJvbF9wYWdlKHRkY3NfcGFnZXNbaV0pOwomIzQzOwkJdGRjc19wYWdlc1tpXSA9IE5VTEw7CiAJfQogCWlmICgha3ZtX3RkeC0mZ3Q7dGQudGRjc19wYWdlcykKIAkJa2ZyZWUodGRjc19wYWdlcyk7CkBAIC0yNjA4LDE2ICYjNDM7MjY1MCwxMyBAQCBzdGF0aWMgaW50IF9fdGR4X3RkX2luaXQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3QgdGRfcGFyYW1zICp0ZF9wYXJhbXMsCiAJZnJlZV9jcHVtYXNrX3ZhcihwYWNrYWdlcyk7CiAKIGZyZWVfdGRjczoKLQlmb3IgKGkgPSAwOyBpICZsdDsga3ZtX3RkeC0mZ3Q7dGQudGRjc19ucl9wYWdlczsgaSYjNDM7JiM0MzspIHsKLQkJaWYgKHRkY3NfcGFnZXNbaV0pCi0JCQlfX2ZyZWVfcGFnZSh0ZGNzX3BhZ2VzW2ldKTsKLQl9CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBrdm1fdGR4LSZndDt0ZC50ZGNzX25yX3BhZ2VzOyBpJiM0MzsmIzQzOykKJiM0MzsJCXRkeF9mcmVlX2NvbnRyb2xfcGFnZSh0ZGNzX3BhZ2VzW2ldKTsKIAlrZnJlZSh0ZGNzX3BhZ2VzKTsKIAlrdm1fdGR4LSZndDt0ZC50ZGNzX3BhZ2VzID0gTlVMTDsKIAogZnJlZV90ZHI6Ci0JaWYgKHRkcl9wYWdlKQotCQlfX2ZyZWVfcGFnZSh0ZHJfcGFnZSk7CiYjNDM7CXRkeF9mcmVlX2NvbnRyb2xfcGFnZSh0ZHJfcGFnZSk7CiAJa3ZtX3RkeC0mZ3Q7dGQudGRyX3BhZ2UgPSBOVUxMOwogCiBmcmVlX2hraWQ6CkBAIC0yOTUxLDcgJiM0MzsyOTkwLDcgQEAgc3RhdGljIGludCB0ZHhfdGRfdmNwdV9pbml0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHZjcHVfcmN4KQogCWludCByZXQsIGk7CiAJdTY0IGVycjsKIAotCXBhZ2UgPSBhbGxvY19wYWdlKEdGUF9LRVJORUxfQUNDT1VOVCk7CiYjNDM7CXBhZ2UgPSB0ZHhfYWxsb2NfY29udHJvbF9wYWdlKCk7CiAJaWYgKCFwYWdlKQogCQlyZXR1cm4gLUVOT01FTTsKIAl0ZHgtJmd0O3ZwLnRkdnByX3BhZ2UgPSBwYWdlOwpAQCAtMjk3MSw3ICYjNDM7MzAxMCw3IEBAIHN0YXRpYyBpbnQgdGR4X3RkX3ZjcHVfaW5pdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB2Y3B1X3JjeCkKIAl9CiAKIAlmb3IgKGkgPSAwOyBpICZsdDsga3ZtX3RkeC0mZ3Q7dGQudGRjeF9ucl9wYWdlczsgaSYjNDM7JiM0MzspIHsKLQkJcGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTF9BQ0NPVU5UKTsKJiM0MzsJCXBhZ2UgPSB0ZHhfYWxsb2NfY29udHJvbF9wYWdlKCk7CiAJCWlmICghcGFnZSkgewogCQkJcmV0ID0gLUVOT01FTTsKIAkJCWdvdG8gZnJlZV90ZGN4OwpAQCAtMjk5Myw3ICYjNDM7MzAzMiw3IEBAIHN0YXRpYyBpbnQgdGR4X3RkX3ZjcHVfaW5pdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB2Y3B1X3JjeCkKIAkJCSAqIG1ldGhvZCwgYnV0IHRoZSByZXN0IGFyZSBmcmVlZCBoZXJlLgogCQkJICovCiAJCQlmb3IgKDsgaSAmbHQ7IGt2bV90ZHgtJmd0O3RkLnRkY3hfbnJfcGFnZXM7IGkmIzQzOyYjNDM7KSB7Ci0JCQkJX19mcmVlX3BhZ2UodGR4LSZndDt2cC50ZGN4X3BhZ2VzW2ldKTsKJiM0MzsJCQkJdGR4X2ZyZWVfY29udHJvbF9wYWdlKHRkeC0mZ3Q7dnAudGRjeF9wYWdlc1tpXSk7CiAJCQkJdGR4LSZndDt2cC50ZGN4X3BhZ2VzW2ldID0gTlVMTDsKIAkJCX0KIAkJCXJldHVybiAtRUlPOwpAQCAtMzAyMSwxNiAmIzQzOzMwNjAsMTQgQEAgc3RhdGljIGludCB0ZHhfdGRfdmNwdV9pbml0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHZjcHVfcmN4KQogCiBmcmVlX3RkY3g6CiAJZm9yIChpID0gMDsgaSAmbHQ7IGt2bV90ZHgtJmd0O3RkLnRkY3hfbnJfcGFnZXM7IGkmIzQzOyYjNDM7KSB7Ci0JCWlmICh0ZHgtJmd0O3ZwLnRkY3hfcGFnZXNbaV0pCi0JCQlfX2ZyZWVfcGFnZSh0ZHgtJmd0O3ZwLnRkY3hfcGFnZXNbaV0pOwomIzQzOwkJdGR4X2ZyZWVfY29udHJvbF9wYWdlKHRkeC0mZ3Q7dnAudGRjeF9wYWdlc1tpXSk7CiAJCXRkeC0mZ3Q7dnAudGRjeF9wYWdlc1tpXSA9IE5VTEw7CiAJfQogCWtmcmVlKHRkeC0mZ3Q7dnAudGRjeF9wYWdlcyk7CiAJdGR4LSZndDt2cC50ZGN4X3BhZ2VzID0gTlVMTDsKIAogZnJlZV90ZHZwcjoKLQlpZiAodGR4LSZndDt2cC50ZHZwcl9wYWdlKQotCQlfX2ZyZWVfcGFnZSh0ZHgtJmd0O3ZwLnRkdnByX3BhZ2UpOwomIzQzOwl0ZHhfZnJlZV9jb250cm9sX3BhZ2UodGR4LSZndDt2cC50ZHZwcl9wYWdlKTsKIAl0ZHgtJmd0O3ZwLnRkdnByX3BhZ2UgPSBOVUxMOwogCXRkeC0mZ3Q7dnAudGR2cHJfcGEgPSAwOwogCkBAIC0zNDkzLDYgJiM0MzszNTMwLDEwIEBAIGludCBfX2luaXQgdGR4X2hhcmR3YXJlX3NldHVwKHZvaWQpCiAKIAl2dF94ODZfb3BzLnNldF9leHRlcm5hbF9zcHRlID0gdGR4X3NlcHRfc2V0X3ByaXZhdGVfc3B0ZTsKIAl2dF94ODZfb3BzLmZyZWVfZXh0ZXJuYWxfc3B0ID0gdGR4X3NlcHRfZnJlZV9wcml2YXRlX3NwdDsKJiM0MzsKJiM0MzsJaWYgKHRkeF9zdXBwb3J0c19keW5hbWljX3BhbXQodGR4X3N5c2luZm8pKQomIzQzOwkJdnRfeDg2X29wcy50b3B1cF9leHRlcm5hbF9jYWNoZSA9IHRkeF90b3B1cF9leHRlcm5hbF9wYW10X2NhY2hlOwomIzQzOwogCXZ0X3g4Nl9vcHMucHJvdGVjdGVkX2FwaWNfaGFzX2ludGVycnVwdCA9IHRkeF9wcm90ZWN0ZWRfYXBpY19oYXNfaW50ZXJydXB0OwogCXJldHVybiAwOwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L3RkeC5oIGIvYXJjaC94ODYva3ZtL3ZteC90ZHguaAppbmRleCBhYzgzMjNhNjhiMTYzYS4uZmQzNjhlM2VlMDYwYjYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS92bXgvdGR4LmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3ZteC90ZHguaApAQCAtNzIsNiAmIzQzOzcyLDggQEAgc3RydWN0IHZjcHVfdGR4IHsKIAogCXU2NCBtYXBfZ3BhX25leHQ7CiAJdTY0IG1hcF9ncGFfZW5kOwomIzQzOwomIzQzOwlzdHJ1Y3QgdGR4X3BhbXRfY2FjaGUgcGFtdF9jYWNoZTsKIH07CiAKIHZvaWQgdGRoX3ZwX3JkX2ZhaWxlZChzdHJ1Y3QgdmNwdV90ZHggKnRkeCwgY2hhciAqdWNsYXNzLCB1MzIgZmllbGQsIHU2NCBlcnIpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jIGIvYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jCmluZGV4IDQyZGY4ZWE0NjRjNDcyLi5kZWM0NTcwOWU0NTRhNiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYwpAQCAtMzAsNiAmIzQzOzMwLDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9zdXNwZW5kLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc3lzY29yZV9vcHMuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9pZHIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvdm1hbGxvYy5oJmd0OwogI2luY2x1ZGUgJmx0O2FzbS9wYWdlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7YXNtL3NwZWNpYWxfaW5zbnMuaCZndDsKICNpbmNsdWRlICZsdDthc20vbXNyLWluZGV4LmgmZ3Q7CkBAIC00Niw2ICYjNDM7NDcsOCBAQAogI2luY2x1ZGUgJiMzNDtzZWFtY2FsbF9pbnRlcm5hbC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7dGR4LmgmIzM0OwogCiYjNDM7c3RhdGljIGJvb2wgdGR4X2VuYWJsZV9kcGFtdCBfX3JvX2FmdGVyX2luaXQ7CiYjNDM7CiBzdHJ1Y3QgdGR4X21vZHVsZV9zdGF0ZSB7CiAJYm9vbCBpbml0aWFsaXplZDsKIAlib29sIHN5c2luaXRfZG9uZTsKQEAgLTYzLDYgJiM0Mzs2NiwxNCBAQCBzdGF0aWMgREVGSU5FX1BFUl9DUFUoYm9vbCwgdGR4X2xwX2luaXRpYWxpemVkKTsKIAogc3RhdGljIHN0cnVjdCB0ZG1yX2luZm9fbGlzdCB0ZHhfdGRtcl9saXN0OwogCiYjNDM7LyoKJiM0MzsgKiBPbiBhIG1hY2hpbmUgd2l0aCBEeW5hbWljIFBBTVQsIHRoZSBrZXJuZWwgbWFpbnRhaW5zIGEgcmVmZXJlbmNlIGNvdW50ZXIKJiM0MzsgKiBmb3IgZXZlcnkgMk1CIHJhbmdlLiBUaGUgY291bnRlciBpbmRpY2F0ZXMgaG93IG1hbnkgdXNlcnMgdGhlcmUgYXJlIGZvcgomIzQzOyAqIHRoZSBQQU1UIG1lbW9yeSBvZiB0aGUgMk1CIHJhbmdlLiBUaGUga2VybmVsIGFsbG9jYXRlcyBQQU1UIHJlZmNvdW50cyBhdAomIzQzOyAqIGluaXRpYWxpemF0aW9uLgomIzQzOyAqLwomIzQzO3N0YXRpYyBhdG9taWNfdCAqcGFtdF9yZWZjb3VudHM7CiYjNDM7CiAvKiBBbGwgVERYLXVzYWJsZSBtZW1vcnkgcmVnaW9ucy4gIFByb3RlY3RlZCBieSBtZW1faG90cGx1Z19sb2NrLiAqLwogc3RhdGljIExJU1RfSEVBRCh0ZHhfbWVtbGlzdCk7CiAKQEAgLTI1Miw2ICYjNDM7MjYzLDQyIEBAIHN0YXRpYyBzdHJ1Y3Qgc3lzY29yZSB0ZHhfc3lzY29yZSA9IHsKIAkub3BzID0gJmFtcDt0ZHhfc3lzY29yZV9vcHMsCiB9OwogCiYjNDM7LyoKJiM0MzsgKiBBbGxvY2F0ZSBQQU1UIHJlZmVyZW5jZSBjb3VudGVycyBmb3IgYWxsIHBoeXNpY2FsIG1lbW9yeS4KJiM0MzsgKgomIzQzOyAqIEl0IGNvbnN1bWVzIDJNQiBmb3IgZXZlcnkgMVRCIG9mIHBoeXNpY2FsIG1lbW9yeS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgX19pbml0IGludCBpbml0X3BhbXRfcmVmY291bnRzKHZvaWQpCiYjNDM7ewomIzQzOwlzaXplX3Qgc2l6ZSA9IERJVl9ST1VORF9VUChtYXhfcGZuLCBQVFJTX1BFUl9QVEUpICogc2l6ZW9mKCpwYW10X3JlZmNvdW50cyk7CiYjNDM7CiYjNDM7CWlmICghdGR4X3N1cHBvcnRzX2R5bmFtaWNfcGFtdCgmYW1wO3RkeF9zeXNpbmZvKSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlwYW10X3JlZmNvdW50cyA9IHZ6YWxsb2Moc2l6ZSk7CiYjNDM7CWlmICghcGFtdF9yZWZjb3VudHMpCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBfX2luaXQgdm9pZCBmcmVlX3BhbXRfcmVmY291bnRzKHZvaWQpCiYjNDM7ewomIzQzOwlpZiAoIXRkeF9zdXBwb3J0c19keW5hbWljX3BhbXQoJmFtcDt0ZHhfc3lzaW5mbykpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CXZmcmVlKHBhbXRfcmVmY291bnRzKTsKJiM0MzsJcGFtdF9yZWZjb3VudHMgPSBOVUxMOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYXRvbWljX3QgKnRkeF9maW5kX3BhbXRfcmVmY291bnQodW5zaWduZWQgbG9uZyBwZm4pCiYjNDM7ewomIzQzOwkvKiBGaW5kIHdoaWNoIFBNRCBhIFBGTiBpcyBpbi4gKi8KJiM0MzsJdW5zaWduZWQgbG9uZyBpbmRleCA9IHBmbiAmZ3Q7Jmd0OyAoUE1EX1NISUZUIC0gUEFHRV9TSElGVCk7CiYjNDM7CiYjNDM7CXJldHVybiAmYW1wO3BhbXRfcmVmY291bnRzW2luZGV4XTsKJiM0Mzt9CiYjNDM7CiAvKgogICogQWRkIGEgbWVtb3J5IHJlZ2lvbiBhcyBhIFREWCBtZW1vcnkgYmxvY2suICBUaGUgY2FsbGVyIG11c3QgbWFrZSBzdXJlCiAgKiBhbGwgbWVtb3J5IHJlZ2lvbnMgYXJlIGFkZGVkIGluIGFkZHJlc3MgYXNjZW5kaW5nIG9yZGVyIGFuZCBkb24mIzM5O3QKQEAgLTUxMCwzNSAmIzQzOzU1NywzNyBAQCBzdGF0aWMgX19pbml0IGludCBmaWxsX291dF90ZG1ycyhzdHJ1Y3QgbGlzdF9oZWFkICp0bWJfbGlzdCwKIAlyZXR1cm4gMDsKIH0KIAomIzQzO3N0YXRpYyBfX2luaXQgdW5zaWduZWQgbG9uZyB0ZG1yX2dldF9wYW10X2JpdG1hcF9zeihzdHJ1Y3QgdGRtcl9pbmZvICp0ZG1yKQomIzQzO3sKJiM0MzsJdW5zaWduZWQgbG9uZyBwYW10X3N6LCBucl9wYW10X2VudHJpZXM7CiYjNDM7CWludCBiaXRzX3Blcl9lbnRyeTsKJiM0MzsKJiM0MzsJYml0c19wZXJfZW50cnkgPSB0ZHhfc3lzaW5mby50ZG1yLnBhbXRfcGFnZV9iaXRtYXBfZW50cnlfYml0czsKJiM0MzsJbnJfcGFtdF9lbnRyaWVzID0gdGRtci0mZ3Q7c2l6ZSAmZ3Q7Jmd0OyBQQUdFX1NISUZUOwomIzQzOwlwYW10X3N6ID0gRElWX1JPVU5EX1VQKG5yX3BhbXRfZW50cmllcyAqIGJpdHNfcGVyX2VudHJ5LCBCSVRTX1BFUl9CWVRFKTsKJiM0MzsKJiM0MzsJcmV0dXJuIFBBR0VfQUxJR04ocGFtdF9zeik7CiYjNDM7fQomIzQzOwogLyoKICAqIENhbGN1bGF0ZSBQQU1UIHNpemUgZ2l2ZW4gYSBURE1SIGFuZCBhIHBhZ2Ugc2l6ZS4gIFRoZSByZXR1cm5lZAogICogUEFNVCBzaXplIGlzIGFsd2F5cyBhbGlnbmVkIHVwIHRvIDRLIHBhZ2UgYm91bmRhcnkuCiAgKi8KLXN0YXRpYyBfX2luaXQgdW5zaWduZWQgbG9uZyB0ZG1yX2dldF9wYW10X3N6KHN0cnVjdCB0ZG1yX2luZm8gKnRkbXIsIGludCBwZ3N6LAotCQkJCQkgICAgIHUxNiBwYW10X2VudHJ5X3NpemUpCiYjNDM7c3RhdGljIF9faW5pdCB1bnNpZ25lZCBsb25nIHRkbXJfZ2V0X3BhbXRfc3ooc3RydWN0IHRkbXJfaW5mbyAqdGRtciwgaW50IHBnc3opCiB7CiAJdW5zaWduZWQgbG9uZyBwYW10X3N6LCBucl9wYW10X2VudHJpZXM7CiYjNDM7CWNvbnN0IGludCB0ZHhfcGdfc2l6ZV9zaGlmdFtURFhfUFNfTlJdID0geyBQQUdFX1NISUZULCBQTURfU0hJRlQsIFBVRF9TSElGVCB9OwomIzQzOwljb25zdCB1MTYgcGFtdF9lbnRyeV9zaXplW1REWF9QU19OUl0gPSB7CiYjNDM7CQl0ZHhfc3lzaW5mby50ZG1yLnBhbXRfNGtfZW50cnlfc2l6ZSwKJiM0MzsJCXRkeF9zeXNpbmZvLnRkbXIucGFtdF8ybV9lbnRyeV9zaXplLAomIzQzOwkJdGR4X3N5c2luZm8udGRtci5wYW10XzFnX2VudHJ5X3NpemUsCiYjNDM7CX07CiAKLQlzd2l0Y2ggKHBnc3opIHsKLQljYXNlIFREWF9QU180SzoKLQkJbnJfcGFtdF9lbnRyaWVzID0gdGRtci0mZ3Q7c2l6ZSAmZ3Q7Jmd0OyBQQUdFX1NISUZUOwotCQlicmVhazsKLQljYXNlIFREWF9QU18yTToKLQkJbnJfcGFtdF9lbnRyaWVzID0gdGRtci0mZ3Q7c2l6ZSAmZ3Q7Jmd0OyBQTURfU0hJRlQ7Ci0JCWJyZWFrOwotCWNhc2UgVERYX1BTXzFHOgotCQlucl9wYW10X2VudHJpZXMgPSB0ZG1yLSZndDtzaXplICZndDsmZ3Q7IFBVRF9TSElGVDsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJV0FSTl9PTl9PTkNFKDEpOwotCQlyZXR1cm4gMDsKLQl9CiYjNDM7CW5yX3BhbXRfZW50cmllcyA9IHRkbXItJmd0O3NpemUgJmd0OyZndDsgdGR4X3BnX3NpemVfc2hpZnRbcGdzel07CiYjNDM7CXBhbXRfc3ogPSBucl9wYW10X2VudHJpZXMgKiBwYW10X2VudHJ5X3NpemVbcGdzel07CiAKLQlwYW10X3N6ID0gbnJfcGFtdF9lbnRyaWVzICogcGFtdF9lbnRyeV9zaXplOwogCS8qIFREWCByZXF1aXJlcyBQQU1UIHNpemUgbXVzdCBiZSA0SyBhbGlnbmVkICovCi0JcGFtdF9zeiA9IEFMSUdOKHBhbXRfc3osIFBBR0VfU0laRSk7Ci0KLQlyZXR1cm4gcGFtdF9zejsKJiM0MzsJcmV0dXJuIFBBR0VfQUxJR04ocGFtdF9zeik7CiB9CiAKIC8qCkBAIC01NzYsMTUgJiM0Mzs2MjUsMTEgQEAgc3RhdGljIF9faW5pdCBpbnQgdGRtcl9nZXRfbmlkKHN0cnVjdCB0ZG1yX2luZm8gKnRkbXIsIHN0cnVjdCBsaXN0X2hlYWQgKnRtYl9saXMKICAqIHdpdGhpbiBAdGRtciwgYW5kIHNldCB1cCBQQU1UcyBmb3IgQHRkbXIuCiAgKi8KIHN0YXRpYyBfX2luaXQgaW50IHRkbXJfc2V0X3VwX3BhbXQoc3RydWN0IHRkbXJfaW5mbyAqdGRtciwKLQkJCQkgICBzdHJ1Y3QgbGlzdF9oZWFkICp0bWJfbGlzdCwKLQkJCQkgICB1MTYgcGFtdF9lbnRyeV9zaXplW10pCiYjNDM7CQkJCSAgIHN0cnVjdCBsaXN0X2hlYWQgKnRtYl9saXN0KQogewotCXVuc2lnbmVkIGxvbmcgcGFtdF9iYXNlW1REWF9QU19OUl07Ci0JdW5zaWduZWQgbG9uZyBwYW10X3NpemVbVERYX1BTX05SXTsKLQl1bnNpZ25lZCBsb25nIHRkbXJfcGFtdF9iYXNlOwogCXVuc2lnbmVkIGxvbmcgdGRtcl9wYW10X3NpemU7CiAJc3RydWN0IHBhZ2UgKnBhbXQ7Ci0JaW50IHBnc3osIG5pZDsKJiM0MzsJaW50IG5pZDsKIAogCW5pZCA9IHRkbXJfZ2V0X25pZCh0ZG1yLCB0bWJfbGlzdCk7CiAKQEAgLTU5MiwxMyAmIzQzOzYzNywxOCBAQCBzdGF0aWMgX19pbml0IGludCB0ZG1yX3NldF91cF9wYW10KHN0cnVjdCB0ZG1yX2luZm8gKnRkbXIsCiAJICogQ2FsY3VsYXRlIHRoZSBQQU1UIHNpemUgZm9yIGVhY2ggVERYIHN1cHBvcnRlZCBwYWdlIHNpemUKIAkgKiBhbmQgdGhlIHRvdGFsIFBBTVQgc2l6ZS4KIAkgKi8KLQl0ZG1yX3BhbXRfc2l6ZSA9IDA7Ci0JZm9yIChwZ3N6ID0gVERYX1BTXzRLOyBwZ3N6ICZsdDsgVERYX1BTX05SOyBwZ3N6JiM0MzsmIzQzOykgewotCQlwYW10X3NpemVbcGdzel0gPSB0ZG1yX2dldF9wYW10X3N6KHRkbXIsIHBnc3osCi0JCQkJCXBhbXRfZW50cnlfc2l6ZVtwZ3N6XSk7Ci0JCXRkbXJfcGFtdF9zaXplICYjNDM7PSBwYW10X3NpemVbcGdzel07CiYjNDM7CXRkbXItJmd0O3BhbXRfMWdfc2l6ZSA9IHRkbXJfZ2V0X3BhbXRfc3oodGRtciwgVERYX1BTXzFHKTsKJiM0MzsJdGRtci0mZ3Q7cGFtdF8ybV9zaXplID0gdGRtcl9nZXRfcGFtdF9zeih0ZG1yLCBURFhfUFNfMk0pOwomIzQzOwomIzQzOwlpZiAodGR4X3N1cHBvcnRzX2R5bmFtaWNfcGFtdCgmYW1wO3RkeF9zeXNpbmZvKSkgewomIzQzOwkJLyogV2l0aCBEeW5hbWljIFBBTVQsIFBBTVRfNEsgaXMgcmVwbGFjZWQgd2l0aCBhIGJpdG1hcCAqLwomIzQzOwkJdGRtci0mZ3Q7cGFtdF80a19zaXplID0gdGRtcl9nZXRfcGFtdF9iaXRtYXBfc3oodGRtcik7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQl0ZG1yLSZndDtwYW10XzRrX3NpemUgPSB0ZG1yX2dldF9wYW10X3N6KHRkbXIsIFREWF9QU180Syk7CiAJfQogCiYjNDM7CXRkbXJfcGFtdF9zaXplID0gdGRtci0mZ3Q7cGFtdF80a19zaXplICYjNDM7IHRkbXItJmd0O3BhbXRfMm1fc2l6ZSAmIzQzOyB0ZG1yLSZndDtwYW10XzFnX3NpemU7CiYjNDM7CiAJLyoKIAkgKiBBbGxvY2F0ZSBvbmUgY2h1bmsgb2YgcGh5c2ljYWxseSBjb250aWd1b3VzIG1lbW9yeSBmb3IgYWxsCiAJICogUEFNVHMuICBUaGlzIGhlbHBzIG1pbmltaXplIHRoZSBQQU1UJiMzOTtzIHVzZSBvZiByZXNlcnZlZCBhcmVhcwpAQCAtNjA2LDI1ICYjNDM7NjU2LDE3IEBAIHN0YXRpYyBfX2luaXQgaW50IHRkbXJfc2V0X3VwX3BhbXQoc3RydWN0IHRkbXJfaW5mbyAqdGRtciwKIAkgKi8KIAlwYW10ID0gYWxsb2NfY29udGlnX3BhZ2VzKHRkbXJfcGFtdF9zaXplICZndDsmZ3Q7IFBBR0VfU0hJRlQsIEdGUF9LRVJORUwsCiAJCQluaWQsICZhbXA7bm9kZV9vbmxpbmVfbWFwKTsKLQlpZiAoIXBhbXQpCi0JCXJldHVybiAtRU5PTUVNOwogCiAJLyoKLQkgKiBCcmVhayB0aGUgY29udGlndW91cyBhbGxvY2F0aW9uIGJhY2sgdXAgaW50byB0aGUKLQkgKiBpbmRpdmlkdWFsIFBBTVRzIGZvciBlYWNoIHBhZ2Ugc2l6ZS4KJiM0MzsJICogdGRtci0mZ3Q7cGFtdF80a19iYXNlIGlzIHN0aWxsIHplcm8gc28gdGhlIGVycm9yCiYjNDM7CSAqIHBhdGggb2YgdGhlIGNhbGxlciB3aWxsIHNraXAgZnJlZWluZyB0aGUgUEFNVC4KIAkgKi8KLQl0ZG1yX3BhbXRfYmFzZSA9IHBhZ2VfdG9fcGZuKHBhbXQpICZsdDsmbHQ7IFBBR0VfU0hJRlQ7Ci0JZm9yIChwZ3N6ID0gVERYX1BTXzRLOyBwZ3N6ICZsdDsgVERYX1BTX05SOyBwZ3N6JiM0MzsmIzQzOykgewotCQlwYW10X2Jhc2VbcGdzel0gPSB0ZG1yX3BhbXRfYmFzZTsKLQkJdGRtcl9wYW10X2Jhc2UgJiM0Mzs9IHBhbXRfc2l6ZVtwZ3N6XTsKLQl9CiYjNDM7CWlmICghcGFtdCkKJiM0MzsJCXJldHVybiAtRU5PTUVNOwogCi0JdGRtci0mZ3Q7cGFtdF80a19iYXNlID0gcGFtdF9iYXNlW1REWF9QU180S107Ci0JdGRtci0mZ3Q7cGFtdF80a19zaXplID0gcGFtdF9zaXplW1REWF9QU180S107Ci0JdGRtci0mZ3Q7cGFtdF8ybV9iYXNlID0gcGFtdF9iYXNlW1REWF9QU18yTV07Ci0JdGRtci0mZ3Q7cGFtdF8ybV9zaXplID0gcGFtdF9zaXplW1REWF9QU18yTV07Ci0JdGRtci0mZ3Q7cGFtdF8xZ19iYXNlID0gcGFtdF9iYXNlW1REWF9QU18xR107Ci0JdGRtci0mZ3Q7cGFtdF8xZ19zaXplID0gcGFtdF9zaXplW1REWF9QU18xR107CiYjNDM7CXRkbXItJmd0O3BhbXRfNGtfYmFzZSA9IHBhZ2VfdG9fcGh5cyhwYW10KTsKJiM0MzsJdGRtci0mZ3Q7cGFtdF8ybV9iYXNlID0gdGRtci0mZ3Q7cGFtdF80a19iYXNlICYjNDM7IHRkbXItJmd0O3BhbXRfNGtfc2l6ZTsKJiM0MzsJdGRtci0mZ3Q7cGFtdF8xZ19iYXNlID0gdGRtci0mZ3Q7cGFtdF8ybV9iYXNlICYjNDM7IHRkbXItJmd0O3BhbXRfMm1fc2l6ZTsKIAogCXJldHVybiAwOwogfQpAQCAtNjU1LDEwICYjNDM7Njk3LDcgQEAgc3RhdGljIF9faW5pdCB2b2lkIHRkbXJfZG9fcGFtdF9mdW5jKHN0cnVjdCB0ZG1yX2luZm8gKnRkbXIsCiAJdGRtcl9nZXRfcGFtdCh0ZG1yLCAmYW1wO3BhbXRfYmFzZSwgJmFtcDtwYW10X3NpemUpOwogCiAJLyogRG8gbm90aGluZyBpZiBQQU1UIGhhc24mIzM5O3QgYmVlbiBhbGxvY2F0ZWQgZm9yIHRoaXMgVERNUiAqLwotCWlmICghcGFtdF9zaXplKQotCQlyZXR1cm47Ci0KLQlpZiAoV0FSTl9PTl9PTkNFKCFwYW10X2Jhc2UpKQomIzQzOwlpZiAoIXBhbXRfYmFzZSkKIAkJcmV0dXJuOwogCiAJcGFtdF9mdW5jKHBhbXRfYmFzZSwgcGFtdF9zaXplKTsKQEAgLTY4NCwxNCAmIzQzOzcyMywxMiBAQCBzdGF0aWMgX19pbml0IHZvaWQgdGRtcnNfZnJlZV9wYW10X2FsbChzdHJ1Y3QgdGRtcl9pbmZvX2xpc3QgKnRkbXJfbGlzdCkKIAogLyogQWxsb2NhdGUgYW5kIHNldCB1cCBQQU1UcyBmb3IgYWxsIFRETVJzICovCiBzdGF0aWMgX19pbml0IGludCB0ZG1yc19zZXRfdXBfcGFtdF9hbGwoc3RydWN0IHRkbXJfaW5mb19saXN0ICp0ZG1yX2xpc3QsCi0JCQkJCXN0cnVjdCBsaXN0X2hlYWQgKnRtYl9saXN0LAotCQkJCQl1MTYgcGFtdF9lbnRyeV9zaXplW10pCiYjNDM7CQkJCSBzdHJ1Y3QgbGlzdF9oZWFkICp0bWJfbGlzdCkKIHsKIAlpbnQgaSwgcmV0ID0gMDsKIAogCWZvciAoaSA9IDA7IGkgJmx0OyB0ZG1yX2xpc3QtJmd0O25yX2NvbnN1bWVkX3RkbXJzOyBpJiM0MzsmIzQzOykgewotCQlyZXQgPSB0ZG1yX3NldF91cF9wYW10KHRkbXJfZW50cnkodGRtcl9saXN0LCBpKSwgdG1iX2xpc3QsCi0JCQkJcGFtdF9lbnRyeV9zaXplKTsKJiM0MzsJCXJldCA9IHRkbXJfc2V0X3VwX3BhbXQodGRtcl9lbnRyeSh0ZG1yX2xpc3QsIGkpLCB0bWJfbGlzdCk7CiAJCWlmIChyZXQpCiAJCQlnb3RvIGVycjsKIAl9CkBAIC05NjgsMTggJiM0MzsxMDA1LDEzIEBAIHN0YXRpYyBfX2luaXQgaW50IGNvbnN0cnVjdF90ZG1ycyhzdHJ1Y3QgbGlzdF9oZWFkICp0bWJfbGlzdCwKIAkJCQkgIHN0cnVjdCB0ZG1yX2luZm9fbGlzdCAqdGRtcl9saXN0LAogCQkJCSAgc3RydWN0IHRkeF9zeXNfaW5mb190ZG1yICpzeXNpbmZvX3RkbXIpCiB7Ci0JdTE2IHBhbXRfZW50cnlfc2l6ZVtURFhfUFNfTlJdID0gewotCQlzeXNpbmZvX3RkbXItJmd0O3BhbXRfNGtfZW50cnlfc2l6ZSwKLQkJc3lzaW5mb190ZG1yLSZndDtwYW10XzJtX2VudHJ5X3NpemUsCi0JCXN5c2luZm9fdGRtci0mZ3Q7cGFtdF8xZ19lbnRyeV9zaXplLAotCX07CiAJaW50IHJldDsKIAogCXJldCA9IGZpbGxfb3V0X3RkbXJzKHRtYl9saXN0LCB0ZG1yX2xpc3QpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKLQlyZXQgPSB0ZG1yc19zZXRfdXBfcGFtdF9hbGwodGRtcl9saXN0LCB0bWJfbGlzdCwgcGFtdF9lbnRyeV9zaXplKTsKJiM0MzsJcmV0ID0gdGRtcnNfc2V0X3VwX3BhbXRfYWxsKHRkbXJfbGlzdCwgdG1iX2xpc3QpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKQEAgLTk5OCw2ICYjNDM7MTAzMCw4IEBAIHN0YXRpYyBfX2luaXQgaW50IGNvbnN0cnVjdF90ZG1ycyhzdHJ1Y3QgbGlzdF9oZWFkICp0bWJfbGlzdCwKIAlyZXR1cm4gcmV0OwogfQogCiYjNDM7I2RlZmluZSBURFhfU1lTX0NPTkZJR19EWU5BTUlDX1BBTVQJQklUKDE2KQomIzQzOwogc3RhdGljIF9faW5pdCBpbnQgY29uZmlnX3RkeF9tb2R1bGUoc3RydWN0IHRkbXJfaW5mb19saXN0ICp0ZG1yX2xpc3QsCiAJCQkJICAgIHU2NCBnbG9iYWxfa2V5aWQpCiB7CkBAIC0xMDI2LDYgJiM0MzsxMDYwLDEyIEBAIHN0YXRpYyBfX2luaXQgaW50IGNvbmZpZ190ZHhfbW9kdWxlKHN0cnVjdCB0ZG1yX2luZm9fbGlzdCAqdGRtcl9saXN0LAogCWFyZ3MucmN4ID0gX19wYSh0ZG1yX3BhX2FycmF5KTsKIAlhcmdzLnJkeCA9IHRkbXJfbGlzdC0mZ3Q7bnJfY29uc3VtZWRfdGRtcnM7CiAJYXJncy5yOCA9IGdsb2JhbF9rZXlpZDsKJiM0MzsKJiM0MzsJaWYgKHRkeF9zdXBwb3J0c19keW5hbWljX3BhbXQoJmFtcDt0ZHhfc3lzaW5mbykpIHsKJiM0MzsJCXByX2luZm8oJiMzNDtFbmFibGUgRHluYW1pYyBQQU1UXG4mIzM0Oyk7CiYjNDM7CQlhcmdzLnI4IHw9IFREWF9TWVNfQ09ORklHX0RZTkFNSUNfUEFNVDsKJiM0MzsJfQomIzQzOwogCXJldCA9IHNlYW1jYWxsX3ByZXJyKFRESF9TWVNfQ09ORklHLCAmYW1wO2FyZ3MpOwogCiAJLyogRnJlZSB0aGUgYXJyYXkgYXMgaXQgaXMgbm90IHJlcXVpcmVkIGFueW1vcmUuICovCkBAIC0xMTY3LDEwICYjNDM7MTIwNywxNCBAQCBzdGF0aWMgX19pbml0IGludCBpbml0X3RkeF9tb2R1bGUodm9pZCkKIAkgKi8KIAlnZXRfb25saW5lX21lbXMoKTsKIAotCXJldCA9IGJ1aWxkX3RkeF9tZW1saXN0KCZhbXA7dGR4X21lbWxpc3QpOwomIzQzOwlyZXQgPSBpbml0X3BhbXRfcmVmY291bnRzKCk7CiAJaWYgKHJldCkKIAkJZ290byBvdXRfcHV0X3RkeG1lbTsKIAomIzQzOwlyZXQgPSBidWlsZF90ZHhfbWVtbGlzdCgmYW1wO3RkeF9tZW1saXN0KTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gZXJyX2ZyZWVfcGFtdF9yZWZjb3VudHM7CiYjNDM7CiAJLyogQWxsb2NhdGUgZW5vdWdoIHNwYWNlIGZvciBjb25zdHJ1Y3RpbmcgVERNUnMgKi8KIAlyZXQgPSBhbGxvY190ZG1yX2xpc3QoJmFtcDt0ZHhfdGRtcl9saXN0LCAmYW1wO3RkeF9zeXNpbmZvLnRkbXIpOwogCWlmIChyZXQpCkBAIC0xMjIwLDYgJiM0MzsxMjY0LDggQEAgc3RhdGljIF9faW5pdCBpbnQgaW5pdF90ZHhfbW9kdWxlKHZvaWQpCiAJZnJlZV90ZG1yX2xpc3QoJmFtcDt0ZHhfdGRtcl9saXN0KTsKIGVycl9mcmVlX3RkeG1lbToKIAlmcmVlX3RkeF9tZW1saXN0KCZhbXA7dGR4X21lbWxpc3QpOwomIzQzO2Vycl9mcmVlX3BhbXRfcmVmY291bnRzOgomIzQzOwlmcmVlX3BhbXRfcmVmY291bnRzKCk7CiAJZ290byBvdXRfcHV0X3RkeG1lbTsKIH0KIApAQCAtMjAwMyw2ICYjNDM7MjA0OSwyODggQEAgdTY0IHRkaF9waHltZW1fcGFnZV93YmludmRfaGtpZCh1NjQgaGtpZCwga3ZtX3Bmbl90IHBmbikKIH0KIEVYUE9SVF9TWU1CT0xfRk9SX0tWTSh0ZGhfcGh5bWVtX3BhZ2Vfd2JpbnZkX2hraWQpOwogCiYjNDM7Ym9vbCB0ZHhfc3VwcG9ydHNfZHluYW1pY19wYW10KGNvbnN0IHN0cnVjdCB0ZHhfc3lzX2luZm8gKnN5c2luZm8pCiYjNDM7ewomIzQzOwlyZXR1cm4gc3lzaW5mby0mZ3Q7ZmVhdHVyZXMudGR4X2ZlYXR1cmVzMCAmYW1wOyBURFhfRkVBVFVSRVMwX0RZTkFNSUNfUEFNVCAmYW1wOyZhbXA7CiYjNDM7CSAgICAgICB0ZHhfZW5hYmxlX2RwYW10OwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0ZPUl9LVk0odGR4X3N1cHBvcnRzX2R5bmFtaWNfcGFtdCk7CiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCBwYWdlICp0ZHhfYWxsb2NfcGFnZV9wYW10X2NhY2hlKHN0cnVjdCB0ZHhfcGFtdF9jYWNoZSAqY2FjaGUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcGFnZSAqcGFnZTsKJiM0MzsKJiM0MzsJcGFnZSA9IGxpc3RfZmlyc3RfZW50cnlfb3JfbnVsbCgmYW1wO2NhY2hlLSZndDtwYWdlX2xpc3QsIHN0cnVjdCBwYWdlLCBscnUpOwomIzQzOwlpZiAocGFnZSkgewomIzQzOwkJbGlzdF9kZWwoJmFtcDtwYWdlLSZndDtscnUpOwomIzQzOwkJY2FjaGUtJmd0O2NudC0tOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBwYWdlOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IHBhZ2UgKmFsbG9jX2RwYW10X3BhZ2Uoc3RydWN0IHRkeF9wYW10X2NhY2hlICpjYWNoZSkKJiM0Mzt7CiYjNDM7CWlmIChjYWNoZSkKJiM0MzsJCXJldHVybiB0ZHhfYWxsb2NfcGFnZV9wYW10X2NhY2hlKGNhY2hlKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTF9BQ0NPVU5UKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBhbGxvY19wYW10X2FycmF5KHN0cnVjdCBwYWdlICoqcGFtdF9wYWdlcywgc3RydWN0IHRkeF9wYW10X2NhY2hlICpjYWNoZSkKJiM0Mzt7CiYjNDM7CWludCBpLCBqOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgVERYX0RQQU1UX0VOVFJZX1BBR0VfQ05UOyBpJiM0MzsmIzQzOykgewomIzQzOwkJcGFtdF9wYWdlc1tpXSA9IGFsbG9jX2RwYW10X3BhZ2UoY2FjaGUpOwomIzQzOwkJaWYgKCFwYW10X3BhZ2VzW2ldKQomIzQzOwkJCWdvdG8gZXJyOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzOwomIzQzO2VycjoKJiM0MzsJZm9yIChqID0gMDsgaiAmbHQ7IGk7IGomIzQzOyYjNDM7KQomIzQzOwkJX19mcmVlX3BhZ2UocGFtdF9wYWdlc1tqXSk7CiYjNDM7CiYjNDM7CXJldHVybiAtRU5PTUVNOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBmcmVlX3BhbXRfYXJyYXkoc3RydWN0IHBhZ2UgKipwYW10X3BhZ2VzKQomIzQzO3sKJiM0MzsJZm9yIChpbnQgaSA9IDA7IGkgJmx0OyBURFhfRFBBTVRfRU5UUllfUEFHRV9DTlQ7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQkvKgomIzQzOwkJICogUmVzZXQgcGFnZXMgdW5jb25kaXRpb25hbGx5IHRvIGNvdmVyIGNhc2VzCiYjNDM7CQkgKiB3aGVyZSB0aGV5IHdlcmUgcGFzc2VkIHRvIHRoZSBURFggbW9kdWxlLgomIzQzOwkJICovCiYjNDM7CQl0ZHhfcXVpcmtfcmVzZXRfcGFkZHIocGFnZV90b19waHlzKHBhbXRfcGFnZXNbaV0pLCBQQUdFX1NJWkUpOwomIzQzOwomIzQzOwkJX19mcmVlX3BhZ2UocGFtdF9wYWdlc1tpXSk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBDYWxjdWxhdGUgdGhlIGFyZyBuZWVkZWQgZm9yIG9wZXJhdGluZyBvbiB0aGUgRFBBTVQgYmFja2luZyBmb3IKJiM0MzsgKiBhIGdpdmVuIDRLQiBwYWdlLgomIzQzOyAqLwomIzQzO3N0YXRpYyB1NjQgcGFtdF8ybWJfYXJnKGt2bV9wZm5fdCBwZm4pCiYjNDM7ewomIzQzOwkvKiBBcmcgdmFsdWUgd2lsbCBzcGVjaWZ5IGEgMk1CIHJlZ2lvbiBvZiBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlLiAqLwomIzQzOwl1bnNpZ25lZCBsb25nIGhwYV8ybWIgPSBBTElHTl9ET1dOKHBmbiAmbHQ7Jmx0OyBQQUdFX1NISUZULCBQTURfU0laRSk7CiYjNDM7CiYjNDM7CXJldHVybiBocGFfMm1iIHwgVERYX1BTXzJNOwomIzQzO30KJiM0MzsKJiM0MzsvKiBBZGQgUEFNVCBiYWNraW5nIGZvciB0aGUgMk1CIHJlZ2lvbiBzdXJyb3VuZGluZyB0aGUgZ2l2ZW4gcGZuLiAqLwomIzQzO3N0YXRpYyB1NjQgdGRoX3BoeW1lbV9wYW10X2FkZChrdm1fcGZuX3QgcGZuLCBzdHJ1Y3QgcGFnZSAqKnBhbXRfcGFnZXMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdGR4X21vZHVsZV9hcmdzIGFyZ3MgPSB7CiYjNDM7CQkucmN4ID0gcGFtdF8ybWJfYXJnKHBmbiksCiYjNDM7CQkucmR4ID0gcGFnZV90b19waHlzKHBhbXRfcGFnZXNbMF0pLAomIzQzOwkJLnI4ID0gcGFnZV90b19waHlzKHBhbXRfcGFnZXNbMV0pLAomIzQzOwl9OwomIzQzOwomIzQzOwlyZXR1cm4gc2VhbWNhbGwoVERIX1BIWU1FTV9QQU1UX0FERCwgJmFtcDthcmdzKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogUmVtb3ZlIFBBTVQgYmFja2luZyBmb3IgdGhlIDJNQiByZWdpb24gc3Vycm91bmRpbmcgdGhlIGdpdmVuIHBmbi4gKi8KJiM0MztzdGF0aWMgdTY0IHRkaF9waHltZW1fcGFtdF9yZW1vdmUoa3ZtX3Bmbl90IHBmbiwgc3RydWN0IHBhZ2UgKipwYW10X3BhZ2VzKQomIzQzO3sKJiM0MzsJc3RydWN0IHRkeF9tb2R1bGVfYXJncyBhcmdzID0gewomIzQzOwkJLnJjeCA9IHBhbXRfMm1iX2FyZyhwZm4pLAomIzQzOwl9OwomIzQzOwl1NjQgcmV0OwomIzQzOwomIzQzOwlyZXQgPSBzZWFtY2FsbF9yZXQoVERIX1BIWU1FTV9QQU1UX1JFTU9WRSwgJmFtcDthcmdzKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CS8qIENvcHkgUEFNVCBwYWdlcyBvdXQgb2YgdGhlIHN0cnVjdCBwZXIgdGhlIFREWCBBQkkgKi8KJiM0MzsJcGFtdF9wYWdlc1swXSA9IHBoeXNfdG9fcGFnZShhcmdzLnJkeCk7CiYjNDM7CXBhbXRfcGFnZXNbMV0gPSBwaHlzX3RvX3BhZ2UoYXJncy5yOCk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsvKiBTZXJpYWxpemVzIGFkZGluZy9yZW1vdmluZyBQQU1UIG1lbW9yeSAqLwomIzQzO3N0YXRpYyBERUZJTkVfU1BJTkxPQ0socGFtdF9sb2NrKTsKJiM0MzsKJiM0MzsvKiBCdW1wIFBBTVQgcmVmY291bnQgZm9yIHRoZSBnaXZlbiBwZm4gYW5kIGFsbG9jYXRlIFBBTVQgYmFja2luZyBpZiBuZWVkZWQuICovCiYjNDM7aW50IHRkeF9wYW10X2dldChrdm1fcGZuX3QgcGZuLCBzdHJ1Y3QgdGR4X3BhbXRfY2FjaGUgKmNhY2hlKQomIzQzO3sKJiM0MzsJc3RydWN0IHBhZ2UgKnBhbXRfcGFnZXNbVERYX0RQQU1UX0VOVFJZX1BBR0VfQ05UXTsKJiM0MzsJYXRvbWljX3QgKnBhbXRfcmVmY291bnQ7CiYjNDM7CXU2NCB0ZHhfc3RhdHVzOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlpZiAoIXRkeF9zdXBwb3J0c19keW5hbWljX3BhbXQoJmFtcDt0ZHhfc3lzaW5mbykpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJcGFtdF9yZWZjb3VudCA9IHRkeF9maW5kX3BhbXRfcmVmY291bnQocGZuKTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogSWYgdGhlIHBhbXQgcGFnZSBpcyBhbHJlYWR5IGFkZGVkIChpLmUuIHJlZmNvdW50ICZndDs9IDEpLAomIzQzOwkgKiB0aGVuIGp1c3QgaW5jcmVtZW50IHRoZSByZWZjb3VudC4KJiM0MzsJICovCiYjNDM7CWlmIChhdG9taWNfaW5jX25vdF96ZXJvKHBhbXRfcmVmY291bnQpKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CXJldCA9IGFsbG9jX3BhbXRfYXJyYXkocGFtdF9wYWdlcywgY2FjaGUpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJc3Bpbl9sb2NrKCZhbXA7cGFtdF9sb2NrKTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogVW5saWtlIHRkeF9wYW10X3B1dCgpIHdoaWNoIHVzZXMgYXRvbWljX2RlY19hbmRfbG9jaygpIHRvCiYjNDM7CSAqIGF0b21pY2FsbHkgaGFuZGxlIHRoZSAxLSZndDswIHRyYW5zaXRpb24sIHRoZSBnZXQgc2lkZSBoYXMgbm8KJiM0MzsJICogZXF1aXZhbGVudCBjb21iaW5lZCBwcmltaXRpdmUgZm9yIDAtJmd0OzEuIFJlY2hlY2sgdW5kZXIgdGhlCiYjNDM7CSAqIGxvY2sgc2luY2UgYW5vdGhlciBnZXQgbWF5IGhhdmUgYWxyZWFkeSBkb25lIHRoZSAwLSZndDsxCiYjNDM7CSAqIHRyYW5zaXRpb24gYWZ0ZXIgYm90aCBzYXcgYXRvbWljX2luY19ub3RfemVybygpIGZhaWwuCiYjNDM7CSAqLwomIzQzOwlpZiAoYXRvbWljX2luY19ub3RfemVybyhwYW10X3JlZmNvdW50KSkKJiM0MzsJCWdvdG8gb3V0X2ZyZWU7CiYjNDM7CiYjNDM7CXRkeF9zdGF0dXMgPSB0ZGhfcGh5bWVtX3BhbXRfYWRkKHBmbiwgcGFtdF9wYWdlcyk7CiYjNDM7CWlmIChXQVJOX09OX09OQ0UodGR4X3N0YXR1cyAhPSBURFhfU1VDQ0VTUykpIHsKJiM0MzsJCXJldCA9IC1FSU87CiYjNDM7CQlnb3RvIG91dF9mcmVlOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFRoZSByZWZjb3VudCBpcyB6ZXJvLCBhbmQgdGhpcyBsb2NrZWQgcGF0aCBpcyB0aGUKJiM0MzsJICogb25seSB3YXkgdG8gaW5jcmVhc2UgaXQgZnJvbSAwLSZndDsxLgomIzQzOwkgKi8KJiM0MzsJYXRvbWljX3NldChwYW10X3JlZmNvdW50LCAxKTsKJiM0MzsJc3Bpbl91bmxvY2soJmFtcDtwYW10X2xvY2spOwomIzQzOwlyZXR1cm4gMDsKJiM0MzsKJiM0MztvdXRfZnJlZToKJiM0MzsJc3Bpbl91bmxvY2soJmFtcDtwYW10X2xvY2spOwomIzQzOwlmcmVlX3BhbXRfYXJyYXkocGFtdF9wYWdlcyk7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfRk9SX0tWTSh0ZHhfcGFtdF9nZXQpOwomIzQzOwomIzQzOy8qIERyb3AgUEFNVCByZWZjb3VudCBmb3IgdGhlIGdpdmVuIHBmbiBhbmQgZnJlZSBQQU1UIGJhY2tpbmcgaWYgbmVlZGVkLiAqLwomIzQzO3ZvaWQgdGR4X3BhbXRfcHV0KGt2bV9wZm5fdCBwZm4pCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcGFnZSAqcGFtdF9wYWdlc1tURFhfRFBBTVRfRU5UUllfUEFHRV9DTlRdID0ge307CiYjNDM7CWF0b21pY190ICpwYW10X3JlZmNvdW50OwomIzQzOwl1NjQgdGR4X3N0YXR1czsKJiM0MzsKJiM0MzsJaWYgKCF0ZHhfc3VwcG9ydHNfZHluYW1pY19wYW10KCZhbXA7dGR4X3N5c2luZm8pKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlwYW10X3JlZmNvdW50ID0gdGR4X2ZpbmRfcGFtdF9yZWZjb3VudChwZm4pOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBJZiB0aGVyZSBpcyBtb3JlIHRoYW4gMSByZWZlcmVuY2Ugb24gdGhlIHBhbXQgcGFnZSwgZG9uJiMzOTt0CiYjNDM7CSAqIHJlbW92ZSBpdCB5ZXQuIEp1c3QgZGVjcmVtZW50IHRoZSByZWZjb3VudC4KJiM0MzsJICovCiYjNDM7CWlmICghYXRvbWljX2RlY19hbmRfbG9jayhwYW10X3JlZmNvdW50LCAmYW1wO3BhbXRfbG9jaykpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CXRkeF9zdGF0dXMgPSB0ZGhfcGh5bWVtX3BhbXRfcmVtb3ZlKHBmbiwgcGFtdF9wYWdlcyk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIERvbiYjMzk7dCBmcmVlIHBhbXRfcGFnZXMgYXMgaXQgY291bGQgaG9sZCBnYXJiYWdlIHdoZW4KJiM0MzsJICogdGRoX3BoeW1lbV9wYW10X3JlbW92ZSgpIGZhaWxzLiAgRG9uJiMzOTt0IHBhbmljL0JVR19PTigpLCBhcwomIzQzOwkgKiB0aGVyZSBpcyBubyByaXNrIG9mIGRhdGEgY29ycnVwdGlvbiwgYnV0IGRvIHllbGwgbG91ZGx5IGFzCiYjNDM7CSAqIGZhaWx1cmUgaW5kaWNhdGVzIGEga2VybmVsIGJ1ZywgbWVtb3J5IGlzIGJlaW5nIGxlYWtlZCwgYW5kCiYjNDM7CSAqIHRoZSBkYW5nbGluZyBQQU1UIGVudHJ5IG1heSBjYXVzZSBmdXR1cmUgb3BlcmF0aW9ucyB0byBmYWlsLgomIzQzOwkgKi8KJiM0MzsJaWYgKFdBUk5fT05fT05DRSh0ZHhfc3RhdHVzICE9IFREWF9TVUNDRVNTKSkgewomIzQzOwkJLyoKJiM0MzsJCSAqIGF0b21pY19kZWNfYW5kX2xvY2soKSBhbHJlYWR5IGRlY3JlbWVudGVkIGl0IHRvIDAsCiYjNDM7CQkgKiBidXQgdGhlIFBBTVQgZW50cnkgc3RpbGwgZXhpc3RzIHNpbmNlIFJFTU9WRSBmYWlsZWQuCiYjNDM7CQkgKi8KJiM0MzsJCWF0b21pY19zZXQocGFtdF9yZWZjb3VudCwgMSk7CiYjNDM7CQlnb3RvIG91dF91bmxvY2s7CiYjNDM7CX0KJiM0MzsKJiM0MzsJc3Bpbl91bmxvY2soJmFtcDtwYW10X2xvY2spOwomIzQzOwlmcmVlX3BhbXRfYXJyYXkocGFtdF9wYWdlcyk7CiYjNDM7CXJldHVybjsKJiM0MztvdXRfdW5sb2NrOgomIzQzOwlzcGluX3VubG9jaygmYW1wO3BhbXRfbG9jayk7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfRk9SX0tWTSh0ZHhfcGFtdF9wdXQpOwomIzQzOwomIzQzO3ZvaWQgdGR4X2ZyZWVfcGFtdF9jYWNoZShzdHJ1Y3QgdGR4X3BhbXRfY2FjaGUgKmNhY2hlKQomIzQzO3sKJiM0MzsJc3RydWN0IHBhZ2UgKnBhZ2U7CiYjNDM7CiYjNDM7CXdoaWxlICgocGFnZSA9IHRkeF9hbGxvY19wYWdlX3BhbXRfY2FjaGUoY2FjaGUpKSkKJiM0MzsJCV9fZnJlZV9wYWdlKHBhZ2UpOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0ZPUl9LVk0odGR4X2ZyZWVfcGFtdF9jYWNoZSk7CiYjNDM7CiYjNDM7aW50IHRkeF90b3B1cF9wYW10X2NhY2hlKHN0cnVjdCB0ZHhfcGFtdF9jYWNoZSAqY2FjaGUsIHVuc2lnbmVkIGxvbmcgbnBhZ2VzKQomIzQzO3sKJiM0MzsJaWYgKFdBUk5fT05fT05DRSghdGR4X3N1cHBvcnRzX2R5bmFtaWNfcGFtdCgmYW1wO3RkeF9zeXNpbmZvKSkpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJbnBhZ2VzICo9IFREWF9EUEFNVF9FTlRSWV9QQUdFX0NOVDsKJiM0MzsKJiM0MzsJd2hpbGUgKGNhY2hlLSZndDtjbnQgJmx0OyBucGFnZXMpIHsKJiM0MzsJCXN0cnVjdCBwYWdlICpwYWdlID0gYWxsb2NfcGFnZShHRlBfS0VSTkVMX0FDQ09VTlQpOwomIzQzOwomIzQzOwkJaWYgKCFwYWdlKQomIzQzOwkJCXJldHVybiAtRU5PTUVNOwomIzQzOwomIzQzOwkJbGlzdF9hZGQoJmFtcDtwYWdlLSZndDtscnUsICZhbXA7Y2FjaGUtJmd0O3BhZ2VfbGlzdCk7CiYjNDM7CQljYWNoZS0mZ3Q7Y250JiM0MzsmIzQzOzsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9GT1JfS1ZNKHRkeF90b3B1cF9wYW10X2NhY2hlKTsKJiM0MzsKJiM0MzsvKgomIzQzOyAqIFJldHVybiBhIHBhZ2UgdGhhdCBjYW4gYmUgZ2lmdGVkIHRvIHRoZSBURFgtTW9kdWxlIGZvciB1c2UgYXMgYSAmIzM0O2NvbnRyb2wmIzM0OwomIzQzOyAqIHBhZ2UsIGkuZS4gcGFnZXMgdGhhdCBhcmUgdXNlZCBmb3IgY29udHJvbCBzdHJ1Y3R1cmVzIGZvciBhIGdpdmVuIFREWAomIzQzOyAqIGd1ZXN0LCBhbmQgdGh1cyBvYnRhaW4gVERYIHByb3RlY3Rpb25zLCBpbmNsdWRpbmcgUEFNVCB0cmFja2luZy4KJiM0MzsgKi8KJiM0MztzdHJ1Y3QgcGFnZSAqdGR4X2FsbG9jX2NvbnRyb2xfcGFnZSh2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IHBhZ2UgKnBhZ2U7CiYjNDM7CiYjNDM7CXBhZ2UgPSBhbGxvY19wYWdlKEdGUF9LRVJORUxfQUNDT1VOVCk7CiYjNDM7CWlmICghcGFnZSkKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwomIzQzOwlpZiAodGR4X3BhbXRfZ2V0KHBhZ2VfdG9fcGZuKHBhZ2UpLCBOVUxMKSkgewomIzQzOwkJX19mcmVlX3BhZ2UocGFnZSk7CiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gcGFnZTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9GT1JfS1ZNKHRkeF9hbGxvY19jb250cm9sX3BhZ2UpOwomIzQzOwomIzQzOy8qCiYjNDM7ICogRnJlZSBhIHBhZ2UgdGhhdCB3YXMgZ2lmdGVkIHRvIHRoZSBURFgtTW9kdWxlIGZvciB1c2UgYXMgYSBjb250cm9sCiYjNDM7ICogcGFnZS4gQWZ0ZXIgdGhpcywgdGhlIHBhZ2UgaXMgbm8gbG9uZ2VyIHByb3RlY3RlZCBieSBURFguCiYjNDM7ICovCiYjNDM7dm9pZCB0ZHhfZnJlZV9jb250cm9sX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpCiYjNDM7ewomIzQzOwlpZiAoIXBhZ2UpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CXRkeF9wYW10X3B1dChwYWdlX3RvX3BmbihwYWdlKSk7CiYjNDM7CV9fZnJlZV9wYWdlKHBhZ2UpOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0ZPUl9LVk0odGR4X2ZyZWVfY29udHJvbF9wYWdlKTsKJiM0MzsKJiM0MztzdGF0aWMgaW50IF9faW5pdCB0ZHhfZHBhbXRfc2V0dXAoY2hhciAqc3RyKQomIzQzO3sKJiM0MzsJcmV0dXJuIGtzdHJ0b2Jvb2woc3RyLCAmYW1wO3RkeF9lbmFibGVfZHBhbXQpID09IDA7CiYjNDM7fQomIzQzOwomIzQzO19fc2V0dXAoJiMzNDt0ZHhfZHBhbXQ9JiMzNDssIHRkeF9kcGFtdF9zZXR1cCk7CiYjNDM7CiB2b2lkIHRkeF9zeXNfZGlzYWJsZSh2b2lkKQogewogCXN0cnVjdCB0ZHhfbW9kdWxlX2FyZ3MgYXJncyA9IHt9OwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5oIGIvYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5oCmluZGV4IGJkZmQwZTFlMzM3YWMwLi5hODg2YzU0ZGVjYWFkYyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguaApAQCAtNDgsNiAmIzQzOzQ4LDggQEAKICNkZWZpbmUgVERIX1NZU19DT05GSUcJCQk0NQogI2RlZmluZSBUREhfU1lTX1NIVVRET1dOCQk1MgogI2RlZmluZSBUREhfU1lTX1VQREFURQkJCTUzCiYjNDM7I2RlZmluZSBUREhfUEhZTUVNX1BBTVRfQURECQk1OAomIzQzOyNkZWZpbmUgVERIX1BIWU1FTV9QQU1UX1JFTU9WRQkJNTkKICNkZWZpbmUgVERIX1NZU19ESVNBQkxFCQkJNjkKIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHhfZ2xvYmFsX21ldGFkYXRhLmMgYi9hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4X2dsb2JhbF9tZXRhZGF0YS5jCmluZGV4IGU0OWMzMDBmMjNkNDM1Li44MzkzZDJhYTU5ZGJlNyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeF9nbG9iYWxfbWV0YWRhdGEuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4X2dsb2JhbF9tZXRhZGF0YS5jCkBAIC0xLDYgJiM0MzsxLDYgQEAKIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiAvKgotICogQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnVuY3Rpb25zIHRvIHJlYWQgVERYIGdsb2JhbCBtZXRhZGF0YS4KJiM0MzsgKiBGdW5jdGlvbnMgdG8gcmVhZCBURFggZ2xvYmFsIG1ldGFkYXRhLgogICoKICAqIFRoaXMgZmlsZSBkb2VzbiYjMzk7dCBjb21waWxlIG9uIGl0cyBvd24gYXMgaXQgbGFja3Mgb2YgaW5jbHVzaW9uCiAgKiBvZiBTRUFNQ0FMTCB3cmFwcGVyIHByaW1pdGl2ZSB3aGljaCByZWFkcyBnbG9iYWwgbWV0YWRhdGEuCkBAIC0zMyw2ICYjNDM7MzMsMTggQEAgc3RhdGljIF9faW5pdCBpbnQgZ2V0X3RkeF9zeXNfaW5mb19mZWF0dXJlcyhzdHJ1Y3QgdGR4X3N5c19pbmZvX2ZlYXR1cmVzICpzeXNpbmYKIAlyZXR1cm4gcmV0OwogfQogCiYjNDM7c3RhdGljIF9faW5pdCBpbnQgZ2V0X3RkeF9zeXNfaW5mb190ZG1yX2RwYW10KHN0cnVjdCB0ZHhfc3lzX2luZm9fdGRtciAqc3lzaW5mb190ZG1yKQomIzQzO3sKJiM0MzsJaW50IHJldDsKJiM0MzsJdTY0IHZhbDsKJiM0MzsKJiM0MzsJcmV0ID0gcmVhZF9zeXNfbWV0YWRhdGFfZmllbGQoMHg5MTAwMDAwMTAwMDAwMDEzLCAmYW1wO3ZhbCk7CiYjNDM7CWlmICghcmV0KQomIzQzOwkJc3lzaW5mb190ZG1yLSZndDtwYW10X3BhZ2VfYml0bWFwX2VudHJ5X2JpdHMgPSB2YWw7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwogc3RhdGljIF9faW5pdCBpbnQgZ2V0X3RkeF9zeXNfaW5mb190ZG1yKHN0cnVjdCB0ZHhfc3lzX2luZm9fdGRtciAqc3lzaW5mb190ZG1yKQogewogCWludCByZXQgPSAwOwpAQCAtMTI5LDUgJiM0MzsxNDEsMTQgQEAgc3RhdGljIF9faW5pdCBpbnQgZ2V0X3RkeF9zeXNfaW5mbyhzdHJ1Y3QgdGR4X3N5c19pbmZvICpzeXNpbmZvKQogCXJldCA9IHJldCA/OiBnZXRfdGR4X3N5c19pbmZvX3RkX2N0cmwoJmFtcDtzeXNpbmZvLSZndDt0ZF9jdHJsKTsKIAlyZXQgPSByZXQgPzogZ2V0X3RkeF9zeXNfaW5mb190ZF9jb25mKCZhbXA7c3lzaW5mby0mZ3Q7dGRfY29uZik7CiAKJiM0MzsJLyoKJiM0MzsJICogVGhlIGtlcm5lbCBzdXBwb3J0cyB1c2luZyBURFggd2l0aG91dCBEeW5hbWljIFBBTVQsIHNvCiYjNDM7CSAqIGF2b2lkIHJlcG9ydGluZyBmYWlsdXJlIGlmIGl0JiMzOTtzIG5vdCBzdXBwb3J0ZWQuIERvbiYjMzk7dCB0cnkKJiM0MzsJICogdG8gc3VwcG9ydCBidWdneSBURFggbW9kdWxlcyB0aGF0IGFkdmVydGlzZSBEeW5hbWljIFBBTVQKJiM0MzsJICogYnV0IGRvbiYjMzk7dCBleHBvc2UgdGhlIG1ldGFkYXRhLgomIzQzOwkgKi8KJiM0MzsJaWYgKCFyZXQgJmFtcDsmYW1wOyB0ZHhfc3VwcG9ydHNfZHluYW1pY19wYW10KHN5c2luZm8pKQomIzQzOwkJcmV0ID0gZ2V0X3RkeF9zeXNfaW5mb190ZG1yX2RwYW10KCZhbXA7c3lzaW5mby0mZ3Q7dGRtcik7CiYjNDM7CiAJcmV0dXJuIHJldDsKIH0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTA6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcyMzUKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA5MzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRHluYW1pYyBQQU1UIFN1cHBvcnQgZm9yIFREWCBpbiBLVk0gLSBSZWFjaGFiaWxpdHkgQW5hbHlzaXMqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggaW50cm9kdWNpbmcgJiMzNDtEeW5hbWljIFBBTVQmIzM0OyBmb3IgSW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgaW4gS1ZNL3g4Ni4gSXQmIzM5O3MgYSBzaWduaWZpY2FudCBjaGFuZ2UsIHRvdWNoaW5nIGEgbG90IG9mIGNvcmUgZmlsZXM6IGRvY3VtZW50YXRpb24sIGhlYWRlcnMsIGFuZCBzZXZlcmFsIEtWTSBtb2R1bGVzIChtbXUsIHZteCwgVERYIHNwZWNpZmljIGNvZGUsIGV0Yy4pLiBJdCBsb29rcyBsaWtlIGl0IGFkZHMgYSBuZXcga2VybmVsIHBhcmFtZXRlciwgYHRkeF9kcGFtdGAsIGFuZCBhIHN1aXRlIG9mIG5ldyBmdW5jdGlvbnMgcmVsYXRlZCB0byBQQU1UIGNhY2hlIG1hbmFnZW1lbnQgKGB0ZHhfcGFtdF9nZXRgLCBgdGR4X3BhbXRfcHV0YCwgYHRkeF90b3B1cF9wYW10X2NhY2hlYCwgZXRjLikuIFRoZSBNTVUgaXMgYWxzbyBiZWluZyB1cGRhdGVkIHRvIGNhbGwgYHRkeF90b3B1cF9leHRlcm5hbF9wYW10X2NhY2hlYC4gVGhpcyBpcyBhbGwgcHJldHR5IHN1YnN0YW50aWFsLgoKVGhlIGltbWVkaWF0ZSBxdWVzdGlvbiBpczogSXMgdGhpcyBjb2RlIHBhdGggZXZlbiAqcmVhY2hhYmxlKiBpbiBhIHN0YW5kYXJkIGVudmlyb25tZW50LCBlc3BlY2lhbGx5IHdoZW4gY29uc2lkZXJpbmcgdGhlIGNvbnRleHQgcHJvdmlkZWQ/IFREWCwgYXMgSSB1bmRlcnN0YW5kIGl0LCByZWxpZXMgb24gc3BlY2lmaWMgSW50ZWwgaGFyZHdhcmUuIEl0JiMzOTtzIGEgdmlydHVhbGl6YXRpb24gZmVhdHVyZSwgc28gSSBuZWVkIHRvIHRoaW5rIGFib3V0IGhvdyB0aGlzIGludGVyYWN0cyB3aXRoIFFFTVUgYW5kIG90aGVyIGVudmlyb25tZW50cy4gU3RhbmRhcmQgUUVNVSBkb2VzbiYjMzk7dCBlbXVsYXRlIFREWCBoYXJkd2FyZSBuYXRpdmVseSB3aXRob3V0IEtWTSBURFggc3VwcG9ydCwgYW5kIGV2ZW4gdGhlbiwgaXQgZGVwZW5kcyBvbiBhY3R1YWwgVERYIGhhcmR3YXJlIHRvIHJ1biBURFggZ3Vlc3RzLgoKQnV0LCBhbmQgdGhpcyBpcyBpbXBvcnRhbnQsIFN5emthbGxlciBoZWF2aWx5IGZ1enpleiBLVk0uIEFuZCBLVk0gVERYIHN1cHBvcnQgKmlzKiBiZWluZyB1cHN0cmVhbWVkLiBTbywgdGhlIG5leHQgdGhvdWdodCBpczogSXMgU3l6a2FsbGVyIGZ1enppbmcgVERYPyBJIG5lZWQgdG8gY2hlY2suIEV2ZW4gaWYgU3l6a2FsbGVyIGlzIGZ1enppbmcgS1ZNLCBpdCB3aWxsIHByb2JhYmx5IGRlcGVuZCBvbiBURFggaGFyZHdhcmUgc2V0dXAgdG8gYWN0dWFsbHkgZW5hYmxlIFREWC4gVGhpcyB3b3VsZCBsaWtlbHkgY2F1c2UgYHRkeF9oYXJkd2FyZV9zZXR1cGAgdG8gZmFpbCBvciBqdXN0IG5vdCBlbmFibGUgVERYLgoKVGhlbiwgdGhlcmUmIzM5O3MgdGhlIEdDRSAoR29vZ2xlIENvbXB1dGUgRW5naW5lKSBmYWN0b3IuIFN5emthbGxlciBydW5zIG9uIEdDRSwgYW5kIEdDRSAqZG9lcyogaGF2ZSBURFggaW5zdGFuY2VzIChzcGVjaWZpY2FsbHksIEMzIGluc3RhbmNlcykuIEJ1dCBkb2VzIFN5emthbGxlciBhY3R1YWxseSAqdXNlKiB0aG9zZSBURFggaW5zdGFuY2VzPyBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQuIEkgbmVlZCB0byBjaGVjayBpZiB0aGlzIGNvZGUgcGF0aCBpcyBhY3R1YWxseSByZWFjaGFibGUgd2l0aGluIFN5emthbGxlciYjMzk7cyBzZXR1cC4KCklmIFREWCBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBDUFUsIGB0ZHhfaGFyZHdhcmVfc2V0dXBgIHdpbGwgbm90IGVuYWJsZSBpdCwgc28gaWYgbXkgdGFyZ2V0IGhhcmR3YXJlIGRvZXNuJiMzOTt0IHN1cHBvcnQgVERYLCBJIGNhbiBkaXNyZWdhcmQgdGhpcy4gVGhpcyBtYXkgYmUgdGhlIGtleS4KCk5vdywgdGhlIHByb21wdCBzcGVjaWZpY2FsbHkgbWVudGlvbnMgY29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VIGlmIHRoZSBoYXJkd2FyZSBpcyBub3QgYXZhaWxhYmxlLiBUaGVuIGl0IG9mZmVycyBleGFtcGxlcywgbGlrZSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgVERYIGZhbGxzIGludG8gdGhpcyBjYXRlZ29yeS4KClREWCBpcyBhICpDUFUqIGZlYXR1cmUsIG5vdCBhIFBDSWUgY2FyZCwgc28gdGhhdCBleGFtcGxlIGRvZXNuJiMzOTt0IHF1aXRlIGFwcGx5LiBIb3dldmVyLCBpdCBzdGlsbCBkZXBlbmRzIG9uIHRoZSBDUFUgaGF2aW5nIFREWCBjYXBhYmlsaXR5LiBTbywgdGhpcyBjb21lcyBiYWNrIHRvIG15IHByZXZpb3VzIHBvaW50cy4gTGV0JiMzOTtzIGNoZWNrIGlmIHRoaXMgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gKHVzaW5nIHRoZSBgdGR4X2hhcmR3YXJlX3NldHVwYCBwYXRoKSBpcyBjb25zaWRlcmVkIHJlYWNoYWJsZS4KCkkmIzM5O2xsIHNlYXJjaCBmb3IgYHRkeF9oYXJkd2FyZV9zZXR1cGAgb3IgYHRkeF9pbml0X21vZHVsZWAuIFRoYXQgc2hvdWxkIHRlbGwgbWUgaWYgd2Ugc2hvdWxkIGNvbnNpZGVyIGl0IHJlYWNoYWJsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxMDo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0ZHhfaGFyZHdhcmVfc2V0dXAmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3ZteC9tYWluLmM9MjQ9c3RhdGljIF9faW5pdCBpbnQgdnRfaGFyZHdhcmVfc2V0dXAodm9pZClcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0zMS1cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjMyOlx0cmV0dXJuIGVuYWJsZV90ZHggPyB0ZHhfaGFyZHdhcmVfc2V0dXAoKSA6IDA7XG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0zMy19XG4tLVxuYXJjaC94ODYva3ZtL3ZteC90ZHguYz0zMzk0PXZvaWQgdGR4X2hhcmR3YXJlX3Vuc2V0dXAodm9pZClcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTMzOTgtXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jOjMzOTk6c3RhdGljIGludCBfX2luaXQgX190ZHhfaGFyZHdhcmVfc2V0dXAodm9pZClcbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMzQwMC17XG4tLVxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0zNDcyLVxuYXJjaC94ODYva3ZtL3ZteC90ZHguYzozNDczOmludCBfX2luaXQgdGR4X2hhcmR3YXJlX3NldHVwKHZvaWQpXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTM0NzQte1xuLS1cbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMzUwOC1cbmFyY2gveDg2L2t2bS92bXgvdGR4LmM6MzUwOTpcdHIgPSBfX3RkeF9oYXJkd2FyZV9zZXR1cCgpO1xuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0zNTEwLVx0aWYgKHIpIHtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5oLTktXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5oOjEwOmludCB0ZHhfaGFyZHdhcmVfc2V0dXAodm9pZCk7XG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5oLTExLXZvaWQgdGR4X2hhcmR3YXJlX3Vuc2V0dXAodm9pZCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTA6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkzNjIKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiAzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFREWCBIYXJkd2FyZSBTZXR1cCoqCgpPa2F5LCBsZXQmIzM5O3MgdHJhY2UgdGhpcyB0aHJvdWdoLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZXhlY3V0aW9uIGZsb3csIGVzcGVjaWFsbHkgYXJvdW5kIHRoZSBURFggaGFyZHdhcmUgY29uZmlndXJhdGlvbi4gVGhlIGNydWNpYWwgZnVuY3Rpb24gc2VlbXMgdG8gYmUgYHRkeF9oYXJkd2FyZV9zZXR1cGAuIEkgc2VlIGl0JiMzOTtzIGRlZmluaXRlbHkgYmVpbmcgY2FsbGVkLCBnb29kLiBgdnRfaGFyZHdhcmVfc2V0dXBgIGNhbGxzIGl0LCB3aGljaCBnaXZlcyBtZSBhIHN0YXJ0aW5nIHBvaW50LiBOb3csIGEgY3JpdGljYWwgcXVlc3Rpb24gaXMgdGhlIGluaXRpYWwgc3RhdGU6IGlzIGBlbmFibGVfdGR4YCBzZXQgdG8gdHJ1ZSBieSBkZWZhdWx0PyBUaGF0JiMzOTtzIHdoYXQgSSByZWFsbHkgbmVlZCB0byBrbm93IHRvIHVuZGVyc3RhbmQgdGhlIHN5c3RlbSYjMzk7cyBiYXNlbGluZSBiZWhhdmlvci4gSSBuZWVkIHRvIGNvbmZpcm0gaXRzIGRlZmF1bHQgdmFsdWUuIEtub3dpbmcgdGhlIGRlZmF1bHQgdmFsdWUgb2YgYGVuYWJsZV90ZHhgIHdpbGwgc2lnbmlmaWNhbnRseSBpbGx1bWluYXRlIHRoZSB1c3VhbCBoYXJkd2FyZSBjb25maWd1cmF0aW9uIHByb2ZpbGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTA6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZW5hYmxlX3RkeCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vdm14L21haW4uYz0xNj1zdGF0aWMgdm9pZCB2dF9kaXNhYmxlX3ZpcnR1YWxpemF0aW9uX2NwdSh2b2lkKVxuLS1cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTE4LVx0LyogTm90ZSwgVERYICphbmQqIFZNWCBuZWVkIHRvIGJlIGRpc2FibGVkIGlmIFREWCBpcyBlbmFibGVkLiAqL1xuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6MTk6XHRpZiAoZW5hYmxlX3RkeClcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTIwLVx0XHR0ZHhfZGlzYWJsZV92aXJ0dWFsaXphdGlvbl9jcHUoKTtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz0yND1zdGF0aWMgX19pbml0IGludCB2dF9oYXJkd2FyZV9zZXR1cCh2b2lkKVxuLS1cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTMxLVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6MzI6XHRyZXR1cm4gZW5hYmxlX3RkeCA/IHRkeF9oYXJkd2FyZV9zZXR1cCgpIDogMDtcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTMzLX1cbi0tXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz0zNT1zdGF0aWMgdm9pZCB2dF9oYXJkd2FyZV91bnNldHVwKHZvaWQpXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0zNi17XG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzozNzpcdGlmIChlbmFibGVfdGR4KVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMzgtXHRcdHRkeF9oYXJkd2FyZV91bnNldHVwKCk7XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9MTA1MD1zdGF0aWMgaW50IF9faW5pdCB2dF9pbml0KHZvaWQpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMTA2NS1cdHZjcHVfYWxpZ24gPSBfX2FsaWdub2ZfXyhzdHJ1Y3QgdmNwdV92bXgpO1xuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6MTA2NjpcdGlmIChlbmFibGVfdGR4KSB7XG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0xMDY3LVx0XHR2Y3B1X3NpemUgPSBtYXhfdCh1bnNpZ25lZCwgdmNwdV9zaXplLFxuLS1cbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtNTUtXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jOjU2OmJvb2wgZW5hYmxlX3RkeCBfX3JvX2FmdGVyX2luaXQ7XG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jOjU3Om1vZHVsZV9wYXJhbV9uYW1lZCh0ZHgsIGVuYWJsZV90ZHgsIGJvb2wsIDA0NDQpO1xuYXJjaC94ODYva3ZtL3ZteC90ZHguYy01OC1cbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jPTM0NzM9aW50IF9faW5pdCB0ZHhfaGFyZHdhcmVfc2V0dXAodm9pZClcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTM0ODAtXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jOjM0ODE6XHRpZiAoIWVuYWJsZV90ZHgpXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTM0ODItXHRcdHJldHVybiAwO1xuLS1cbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMzU0MC1zdWNjZXNzX2Rpc2FibGVfdGR4OlxuYXJjaC94ODYva3ZtL3ZteC90ZHguYzozNTQxOlx0ZW5hYmxlX3RkeCA9IDA7XG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTM1NDItXHRyZXR1cm4gMDtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5oPTExPXZvaWQgdGR4X2hhcmR3YXJlX3Vuc2V0dXAodm9pZCk7XG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5oLTEyLVxuYXJjaC94ODYva3ZtL3ZteC90ZHguaDoxMzpleHRlcm4gYm9vbCBlbmFibGVfdGR4O1xuYXJjaC94ODYva3ZtL3ZteC90ZHguaC0xNC1cbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5oPTE4Nz1URFhfQlVJTERfVERWUFNfQUNDRVNTT1JTKDY0LCBTVEFURV9OT05fQVJDSCwgc3RhdGVfbm9uX2FyY2gpO1xuLS1cbmFyY2gveDg2L2t2bS92bXgvdGR4LmgtMTg5LSNlbHNlXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5oOjE5MDojZGVmaW5lIGVuYWJsZV90ZHhcdDBcbmFyY2gveDg2L2t2bS92bXgvdGR4LmgtMTkxLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDEwOjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNjQ0CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMzU2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlREWCBGdXp6aW5nIEZlYXNpYmlsaXR5IC0gQSBRdWljayBBdWRpdCoqCgpPa2F5LCBzbyBgZW5hYmxlX3RkeGAgbWFwcyB0byBga3ZtX2ludGVsLnRkeGAsIHRoYXQmIzM5O3Mgc3RyYWlnaHRmb3J3YXJkLiBUaGUgcXVlc3Rpb24gaXM6IGNhbiB3ZSAqYWN0dWFsbHkqIGZ1enogVERYPyBJIGtub3cgZnJvbSBleHBlcmllbmNlIHRoYXQgVERYIHJlcXVpcmVzIHNwZWNpZmljIGhhcmR3YXJlIHN1cHBvcnQuIFN0YW5kYXJkIFN5emthbGxlciBHQ0UgaW5zdGFuY2VzIGFyZW4mIzM5O3QgbGlrZWx5IHRvIGhhdmUgdGhhdCB1bmxlc3Mgc29tZW9uZSBzcGVjaWZpY2FsbHkgc2V0IHRoZW0gdXAuIEFuZCwgc2luY2UgUUVNVSBkb2VzbiYjMzk7dCBlbXVsYXRlIFREWCBuYXRpdmVseSwgdGhhdCYjMzk7cyBhbm90aGVyIGh1cmRsZS4KCkJ1dCBoYW5nIG9u4oCmIGlmIFN5emthbGxlciAqd2FzKiBydW5uaW5nIG9uIFREWCBoYXJkd2FyZSAoaGlnaGx5IHVubGlrZWx5LCBidXQgcG9zc2libGUpLCB0aGVuIG1heWJlPyBBaCwgcmlnaHQsIHRoZSBwcm9tcHQgc2F5cyB0byBpZ25vcmUgdGhpbmdzIHRoYXQgYXJlIHVucmVhY2hhYmxlIGluIHZpcnR1YWxpemF0aW9uLCB3aGljaCB3b3VsZCBpbmNsdWRlIGVtdWxhdGVkIGhhcmR3YXJlLiBTbywgaXMgVERYIG9uZSBvZiB0aG9zZSDigJxpbXBvc3NpYmxl4oCdIGNhc2VzIGluIEdDRSBvciBRRU1VPwoKSG9sZCBvbi4uLiBJJiMzOTttIGdldHRpbmcgYWhlYWQgb2YgbXlzZWxmLCBHQ0UgKmRvZXMqIG9mZmVyIFREWCBpbnN0YW5jZXMgKEMzIHNlcmllcyEpLCBhbmQgUUVNVS9LVk0gKmRvZXMqIHN1cHBvcnQgVERYLiBTbywgbXkgaW5pdGlhbCBhc3N1bXB0aW9uIHdhcyB3cm9uZyEgT2theSwgdGhlIHBsb3QgdGhpY2tlbnMuIE5vdywgZG9lcyAqdGhpcyBzcGVjaWZpYyBwYXRjaCogYWN0dWFsbHkgaW50cm9kdWNlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMsIGFueXRoaW5nIHdvcnRoIGZ1enppbmc/IFllcywgaXQmIzM5O3MgYWJvdXQgRHluYW1pYyBQQU1UIHN1cHBvcnQuIFNvIGlzIGl0IHJlYWNoYWJsZT8KCklmIGl0JiMzOTtzIHJlYWNoYWJsZSwgaXQmIzM5O3Mgd29ydGggZnV6emluZy4gVG8gZmlndXJlIG91dCByZWFjaGFiaWxpdHksIEkgbmVlZCB0byBjaGVjayBgdGR4X3N1cHBvcnRzX2R5bmFtaWNfcGFtdGAsIHdoaWNoIGRlcGVuZHMgb24gYHRkeF9lbmFibGVfZHBhbXRgLiBBaCwgYW5kICp0aGF0KiBwYXJhbWV0ZXIgaXMgY29udHJvbGxlZCBieSBgdGR4X2RwYW10PW9uYCBrZXJuZWwgcGFyYW1ldGVyLiBCdXQgdGhlIHByb21wdCBpcyBhc2tpbmcgZm9yIGBFbmFibGVDb25maWdzYCBub3Qga2VybmVsIHBhcmFtZXRlcnMuIFdhaXQsIHRoYXQmIzM5O3MgS2NvbmZpZyEgSSBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIGZvciBURFggcmVsYXRlZCBvcHRpb25zIG5vdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxMDo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSU5URUxfVERYX0hPU1QmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYvS2NvbmZpZz0xODQ0PWNvbmZpZyBYODZfVVNFUl9TSEFET1dfU1RBQ0tcbi0tXG5hcmNoL3g4Ni9LY29uZmlnLTE4NjMtXG5hcmNoL3g4Ni9LY29uZmlnOjE4NjQ6Y29uZmlnIElOVEVMX1REWF9IT1NUXG5hcmNoL3g4Ni9LY29uZmlnLTE4NjUtXHRib29sIFwmIzM0O0ludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIGhvc3Qgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDEwOjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNTAwCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQXNzZXNzaW5nIElOVEVMX1REWF9IT1NUIERlcGVuZGVuY2llcyoqCgpPa2F5LCB0aW1lIHRvIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O0xldCYjMzk7cyBtYWtlIHN1cmUgdGhlIGBJTlRFTF9URFhfSE9TVGAgZGVwZW5kZW5jaWVzIGFyZSBhbGwgc3F1YXJlZCBhd2F5LiYjMzQ7IEkmIzM5O20gbWVudGFsbHkgcnVubmluZyB0aHJvdWdoIHRoZSBwcm9iYWJsZSBsaXN0OiB0aGUgaHlwZXJ2aXNvciwgdGhlIGZpcm13YXJlLCB0aGUgc3BlY2lmaWMgQ1BVIG1pY3JvY29kZSByZXZpc2lvbiwgbGlrZWx5IGNlcnRhaW4ga2VybmVsIHZlcnNpb25zLi4uIEkmIzM5O20gbG9va2luZyBmb3IgYW55IG9idmlvdXMgcmVkIGZsYWdzLCBrbm93biBpbmNvbXBhdGliaWxpdGllcywgb3Igb3Zlcmxvb2tlZCBwcmVyZXF1aXNpdGVzIHRoYXQgY291bGQgdHJpcCB1cyB1cCBsYXRlci4gSSBuZWVkIHRvIGJlIG1ldGhvZGljYWwgaGVyZTsgbWlzc2luZyBldmVuIGEgc2VlbWluZ2x5IG1pbm9yIGRlcGVuZGVuY3kgY2FuIGxlYWQgdG8gb2JzY3VyZSBhbmQgZnJ1c3RyYXRpbmcgZGVidWdnaW5nIGRvd24gdGhlIGxpbmUsIHBhcnRpY3VsYXJseSB3aXRoIHNvbWV0aGluZyBhcyBjb21wbGV4IGFzIFREWC4gQmVzdCB0byBnZXQgdGhpcyBmb3VuZGF0aW9uYWwgc3R1ZmYgdmFsaWRhdGVkIGVhcmx5LiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGRvY3VtZW50YXRpb24gc3VnZ2VzdHMgYW5kIGNyb3NzLXJlZmVyZW5jZSB0aGF0IHdpdGggdGhlIGN1cnJlbnQgcGxhdGZvcm0gY29uZmlndXJhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTA6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElOVEVMX1REWF9IT1NUJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9LY29uZmlnPTE4NDQ9Y29uZmlnIFg4Nl9VU0VSX1NIQURPV19TVEFDS1xuLS1cbmFyY2gveDg2L0tjb25maWctMTg2My1cbmFyY2gveDg2L0tjb25maWc6MTg2NDpjb25maWcgSU5URUxfVERYX0hPU1RcbmFyY2gveDg2L0tjb25maWctMTg2NS1cdGJvb2wgXCYjMzQ7SW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgaG9zdCBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDEwOjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxODM2CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBhcyBpZiB0aGV5JiMzOTtyZSBteSBvd246CgoqKkFuYWx5emluZyB0aGUgS2NvbmZpZyBmb3IgSU5URUxfVERYX0hPU1QqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgaW50byB0aGUgZGV0YWlscy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHB1bGwgdXAgdGhlIEtjb25maWcgZmlsZSBmb3IgYElOVEVMX1REWF9IT1NUYC4gSSBuZWVkIGEgY2xlYXIgdW5kZXJzdGFuZGluZyBvZiB3aGF04oCZcyBnb2luZyBvbiB3aXRoIHRoaXMgY29uZmlndXJhdGlvbiBvcHRpb24uIEtub3dpbmcgdGhpcyBpcyB0aGUgZm91bmRhdGlvbiBmb3IgZXZlcnl0aGluZyBlbHNlLCBzbyBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgd2FudCB0byBzZWUgdGhlIGRlcGVuZGVuY2llcywgdGhlIGRlZmF1bHRzLCB0aGUgaGVscCB0ZXh0IOKAkyB0aGUgd2hvbGUgc2hlYmFuZy4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBsb2dpYyBvZiB0aGUgZmVhdHVyZSBsaXZlcyBhbmQgdGhpcyBjb25maWcgaXMga2V5IGZvciBhbnl0aGluZyByZWxhdGVkIHRvIEludGVsIFREWCBob3N0IGZ1bmN0aW9uYWxpdHksIEkgbmVlZCB0byBrbm93IHdoZXJlIGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlLiBMZXTigJlzIGdldCB0byByZWFkaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxMDo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxODYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE4NjA6XHRcdCAgU2VlIERvY3VtZW50YXRpb24vYXJjaC94ODYvc2hzdGsucnN0IGZvciBtb3JlIGluZm9ybWF0aW9uLlxuMTg2MTpcdFxuMTg2MjpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuMTg2MzpcdFxuMTg2NDpcdGNvbmZpZyBJTlRFTF9URFhfSE9TVFxuMTg2NTpcdFx0Ym9vbCBcJiMzNDtJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyAoVERYKSBob3N0IHN1cHBvcnRcJiMzNDtcbjE4NjY6XHRcdGRlcGVuZHMgb24gQ1BVX1NVUF9JTlRFTFxuMTg2NzpcdFx0ZGVwZW5kcyBvbiBYODZfNjRcbjE4Njg6XHRcdGRlcGVuZHMgb24gS1ZNX0lOVEVMXG4xODY5Olx0XHRkZXBlbmRzIG9uIFg4Nl9YMkFQSUNcbjE4NzA6XHRcdHNlbGVjdCBBUkNIX0tFRVBfTUVNQkxPQ0tcbjE4NzE6XHRcdGRlcGVuZHMgb24gQ09OVElHX0FMTE9DXG4xODcyOlx0XHRkZXBlbmRzIG9uIFg4Nl9NQ0VcbjE4NzM6XHRcdGhlbHBcbjE4NzQ6XHRcdCAgSW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgcHJvdGVjdHMgZ3Vlc3QgVk1zIGZyb20gbWFsaWNpb3VzXG4xODc1Olx0XHQgIGhvc3QgYW5kIGNlcnRhaW4gcGh5c2ljYWwgYXR0YWNrcy4gIFRoaXMgb3B0aW9uIGVuYWJsZXMgbmVjZXNzYXJ5IFREWFxuMTg3NjpcdFx0ICBzdXBwb3J0IGluIHRoZSBob3N0IGtlcm5lbCB0byBydW4gY29uZmlkZW50aWFsIFZNcy5cbjE4Nzc6XHRcbjE4Nzg6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbjE4Nzk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTA6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIzNjMKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBmcmFtZWQgYXMgbXkgaW50ZXJuYWwgdGhvdWdodCBwcm9jZXNzOgoKKipURFggQ29uZmlndXJhdGlvbiBJbnF1aXJ5KioKClJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBhbmQgaXQgc2VlbXMgYElOVEVMX1REWF9IT1NUYCBpcyB0aGUga2V5IGNvbmZpZ3VyYXRpb24gc2V0dGluZyBoZXJlLiBCdXQsIGhhbmcgb24gYSBzZWNvbmQuLi4gaXMgdGhlcmUgZXZlbiBhIEtWTS1zcGVjaWZpYyBjb25maWd1cmF0aW9uIGZvciBURFg/IEkgbmVlZCB0byBjbGFyaWZ5IGlmIHRoaXMgaXMganVzdCBhIGdlbmVyYWwgc2V0dGluZyBvciBpZiBpdCBuZWVkcyB0byBiZSBpbnRlZ3JhdGVkIGludG8gdGhlIEtWTSBlbnZpcm9ubWVudC4gSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIHRoZSBLVk0gZG9jdW1lbnRhdGlvbiB0byBzZWUgaWYgdGhlcmUmIzM5O3MgYSBkZWRpY2F0ZWQgc2V0dGluZyBmb3IgVERYIHVuZGVyIHRoZSBob29kLCBvciBpZiB0aGlzIGdlbmVyYWwgc2V0dGluZyBpcyBzdWZmaWNpZW50IGZvciBlbmFibGluZyB0aGUgZmVhdHVyZSBpbiB0aGF0IGNvbnRleHQuIFRoaXMgaXMgc29tZXRoaW5nIEkgbmVlZCB0byBmdWxseSB1bmRlcnN0YW5kIGJlZm9yZSBJIHByb2NlZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDEwOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLVk1fSU5URUxfVERYJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnPTEyMj1jb25maWcgWDg2X1NHWF9LVk1cbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzMtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMzQ6Y29uZmlnIEtWTV9JTlRFTF9URFhcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzNS1cdGJvb2wgXCYjMzQ7SW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxMDo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjY3NgoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIHRoZSBtYXR0ZXIsIHN1bW1hcml6ZWQgYXMgcmVxdWVzdGVkOgoKKipLVk0gQ29uZmlndXJhdGlvbiBEZWVwIERpdmUqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgS1ZNIGNvbmZpZ3VyYXRpb24gYW5kIHdoYXQmIzM5O3MgZ29pbmcgb24gYXQgbGluZSAxMzQgaW4gYGFyY2gveDg2L2t2bS9LY29uZmlnYC4gTGV0IG1lIHB1bGwgdXAgdGhhdCBmaWxlLi4uIHJpZ2h0LCB0aGUgS2NvbmZpZyBmaWxlIGZvciB0aGUgeDg2IEtWTSBhcmNoaXRlY3R1cmUuIEnigJltIGd1ZXNzaW5nIGl0JiMzOTtzIHNvbWUgc29ydCBvZiBmZWF0dXJlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIG9yIGEgZGVwZW5kZW5jeSBjaGVjay4gSSBuZWVkIHRvIGJlIHN1cmUgSSB1bmRlcnN0YW5kIGl0cyBpbXBsaWNhdGlvbnMuIEkmIzM5O2xsIG5lZWQgdG8gcmVtZW1iZXIgdG8gY3Jvc3MtcmVmZXJlbmNlIHRoaXMgd2l0aCByZWxldmFudCBjb2RlIGluIHRoZSBga3ZtYCBkaXJlY3RvcnkgYW5kIHVuZGVyc3RhbmQgaG93IHRoZSBwYXJ0aWN1bGFyIGNvbmZpZyBpbnRlcmFjdHMgd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUgaHlwZXJ2aXNvci4gVGhpcyBpcyBob3cgSSBidWlsZCBhIGNvbXByZWhlbnNpdmUgcGljdHVyZS4gVGltZSB0byBnZXQgc3RhcnRlZCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTA6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTMwOlx0XHQgIGd1ZXN0cyB2aWEgYSBkZXZpY2Ugbm9kZSwgZS5nLiAvZGV2L3NneF92ZXBjLlxuIDEzMTpcdFxuIDEzMjpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuIDEzMzpcdFxuIDEzNDpcdGNvbmZpZyBLVk1fSU5URUxfVERYXG4gMTM1Olx0XHRib29sIFwmIzM0O0ludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIHN1cHBvcnRcJiMzNDtcbiAxMzY6XHRcdGRlZmF1bHQgeVxuIDEzNzpcdFx0ZGVwZW5kcyBvbiBJTlRFTF9URFhfSE9TVFxuIDEzODpcdFx0c2VsZWN0IEtWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTXG4gMTM5Olx0XHRzZWxlY3QgSEFWRV9LVk1fQVJDSF9HTUVNX1BPUFVMQVRFXG4gMTQwOlx0XHRoZWxwXG4gMTQxOlx0XHQgIFByb3ZpZGVzIHN1cHBvcnQgZm9yIGxhdW5jaGluZyBJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyAoVERYKVxuIDE0MjpcdFx0ICBjb25maWRlbnRpYWwgVk1zIG9uIEludGVsIHByb2Nlc3NvcnMuXG4gMTQzOlx0XG4gMTQ0Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gMTQ1Olx0XG4gMTQ2Olx0Y29uZmlnIEtWTV9BTURcbiAxNDc6XHRcdHRyaXN0YXRlIFwmIzM0O0tWTSBmb3IgQU1EIHByb2Nlc3NvcnMgc3VwcG9ydFwmIzM0O1xuIDE0ODpcdFx0ZGVwZW5kcyBvbiBLVk0gXHUwMDI2XHUwMDI2IChDUFVfU1VQX0FNRCB8fCBDUFVfU1VQX0hZR09OKVxuIDE0OTpcdFx0aGVscFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxMDo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzIxNgoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDc4OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipXb3J0aCBGdXp6aW5nIERlY2lzaW9uOiBURFggUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIHRyeWluZyB0byBkZWNpZGUgaWYgaXQmIzM5O3Mgd29ydGggZnV6emluZy4gVGhlIGtleSBoZXJlIHNlZW1zIHRvIGJlIGBLVk1fSU5URUxfVERYYCBhbmQgYElOVEVMX1REWF9IT1NUYCwgdGhlIHJlbGV2YW50IGNvbmZpZ3MuIFRoZSBwcm9tcHQgaXMgYXNraW5nIGlmIHRoaXMgY29kZSBjYW4gYmUgcmVhY2hlZCwgc3BlY2lmaWNhbGx5LCBpZiBpdCYjMzk7cyAmIzM0O2ltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUuLi4mIzM0Oy4gVERYIGlzIGEgKmhhcmR3YXJlKiBmZWF0dXJlLCBzbyB0aGF0JiMzOTtzIHRoZSBzdGlja2luZyBwb2ludC4KCkNhbiBzdGFuZGFyZCBRRU1VIGhpdCB0aGlzPyBOb3BlLCBRRU1VIGRvZXNuJiMzOTt0IGVtdWxhdGUgVERYLiBJdCAqY2FuKiBydW4gYXMgYSBURFggaG9zdCwgYnV0IG9ubHkgaWYgdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUgaGFzIHRoZSBzdXBwb3J0LiBTeXprYWxsZXIgcnVucyBvbiBHQ0UsIGFuZCBHQ0UgKmRvZXMqIGhhdmUgVERYIGluc3RhbmNlcywgc28gdGhhdOKAmXMgYSBwb3NzaWJpbGl0eS4gSSB3YXMgaW5pdGlhbGx5IGxlYW5pbmcgdG93YXJkICYjMzQ7aW1wb3NzaWJsZSB0byByZWFjaCYjMzQ7IGJ1dCB0aGVuIHJlYWxpemVkIHRoYXQgU3l6a2FsbGVyIHdpbGwgdGVzdCBURFggaWYgaXQgY2FuLiBJdCBoZWF2aWx5IHRlc3RzIEtWTSwgYW5kIGlmIFREWCBpcyBlbmFibGVkLCBpdCBzaG91bGQgYmUgdGVzdGVkLgoKQnV0IHRoZW4gSSBzYXcgdGhlIGtlcm5lbCBwYXJhbWV0ZXIsIGB0ZHhfZHBhbXQ9b25gLiBUaGF04oCZcyBhIHBvdGVudGlhbCByb2FkYmxvY2suIElmIGl04oCZcyBub3Qgc2V0LCBgdGR4X2VuYWJsZV9kcGFtdGAgaXMgZmFsc2UsIGFuZCB0aGUgY29kZSBwYXRoIGlzIHVucmVhY2hhYmxlLiBTeXprYWxsZXIgZG9lc24mIzM5O3QgYXV0b21hdGljYWxseSBwYXNzIG5ldyBrZXJuZWwgcGFyYW1ldGVycyB1bmxlc3MgaXQmIzM5O3MgY29uZmlndXJlZCB0byBkbyBzby4gSG93ZXZlciwgdGhlIHByb21wdCBpcyBhc2tpbmcgYWJvdXQgZnVuY3Rpb25hbCBjaGFuZ2VzLCBzbyB0aGUgcGFyYW1ldGVyIGFzcGVjdCBpcyBhIHNlY29uZGFyeSBjb25zaWRlcmF0aW9uIGF0IHRoaXMgc3RhZ2UuCgpUaGVuIEkgaGFkIHRvIHJlbWluZCBteXNlbGYgb2YgdGhlIHByb21wdCYjMzk7cyB3b3JkaW5nOiBpdCBzcGVjaWZpY2FsbHkgbWVudGlvbnMgJiMzNDtDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUmIzM0Oy4gTm93LCBRRU1VLCBpbiBhICpzdGFuZGFyZCogY29uZmlndXJhdGlvbiAod2l0aG91dCBLVk0gYW5kIFREWCBoYXJkd2FyZSkgY2Fu4oCZdCBlbXVsYXRlIFREWCwgc28gdGhlIGZlYXR1cmUgd291bGQgYmUgaW5hY2Nlc3NpYmxlLiBRRU1VIGRvZXMgKm5vdCogZW11bGF0ZSBpdCEgVERYIHJlcXVpcmVzIHBoeXNpY2FsIENQVSBzdXBwb3J0IGFuZCBhIFREWCBtb2R1bGUgbG9hZGVkIGJ5IHRoZSBCSU9TL2Zpcm13YXJlLiBTbywgaW4gc3RhbmRhcmQgUUVNVSBvciBldmVuIEtWTSB3aXRob3V0IHRoZSBURFggbW9kdWxlLCBpdCAqaXMqIHVucmVhY2hhYmxlLgoKSSBjaGVja2VkIGlmIFN5emthbGxlciBoYXMgYW55IHNwZWNpZmljIGBxZW11X3RkeGAgY29uZmlnLCBidXQgbm8uIEl0IHJ1bnMgS1ZNLCBhbmQgc29tZSBHQ0UgaW5zdGFuY2VzIG1pZ2h0IGhhdmUgVERYLCBidXQgbW9zdCBkZWZhdWx0IG9uZXMgcHJvYmFibHkgZG9uJiMzOTt0LiBIb3dldmVyLCB0aGUgcHJvbXB0IGFsc28gc2F5cyB0byBjb25zaWRlciBpZiBjb2RlIHJlcXVpcmVzIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzLCB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuIFREWCBpcyBhIENQVSBmZWF0dXJlLCBzbyBpdCYjMzk7cyBub3QgdGhlIHNhbWUuCgpBbmQgdGhlbiBJIGhhZCBhIGJyZWFrdGhyb3VnaCEgS1ZNIGZlYXR1cmVzIGxpa2UgU0VWIGFuZCBURFggYXJlICpvZnRlbiogdGVzdGVkIGJ5IHN5emthbGxlciBpZiB0aGV5IHJ1biBvbiBjYXBhYmxlIGhhcmR3YXJlLiBTeXprYWxsZXIgaGFzIHBvb2xzIGZvciBBTUQgU0VWIGFuZCBJbnRlbCBURFgsIHNwZWNpZmljYWxseSBmb3IgdGhpcyBwdXJwb3NlLiBUaGVzZSBhcmUgY29yZSBLVk0veDg2IGNvZGUsIG5vdCBhIHZlbmRvci1zcGVjaWZpYyBQQ0llIGNhcmQsIHNvIHRoYXQmIzM5O3MgdGhlIGRpZmZlcmVuY2UuIFRoZSBmdW5jdGlvbnMgSSBuZWVkIHRvIGZvY3VzIG9uIGFyZSBgdGR4X3BhbXRfZ2V0YCwgYHRkeF9wYW10X3B1dGAsIGB0ZHhfdG9wdXBfcGFtdF9jYWNoZWAsIGB0ZHhfYWxsb2NfY29udHJvbF9wYWdlYCwgYW5kIGB0ZHhfZnJlZV9jb250cm9sX3BhZ2VgLiBUaGVzZSBhcmUgY2FsbGVkIGZyb20gS1ZNIE1NVSBhbmQgVERYIHZjcHUvdm0gaW5pdCBjb2RlLiBTbywgSSBoYXZlIHRvIGNvbnNpZGVyIHRoaXMgaW4gdGhhdCBjb250ZXh0LCBhbmQgZ2l2ZW4gdGhhdCB0aGVzZSBhcmUgY29yZSBmdW5jdGlvbnMgb2YgdGhlIFREWCBpbXBsZW1lbnRhdGlvbiwgdGhlIGFuc3dlciBpcyBXb3J0aEZ1enppbmc9dHJ1ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTA6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTF9GT1JfS1ZNXFwodGR4X3BhbXRfZ2V0XFwpJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYz0yMTU5PWludCB0ZHhfcGFtdF9nZXQoa3ZtX3Bmbl90IHBmbiwgc3RydWN0IHRkeF9wYW10X2NhY2hlICpjYWNoZSlcbi0tXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtMjIxMy19XG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM6MjIxNDpFWFBPUlRfU1lNQk9MX0ZPUl9LVk0odGR4X3BhbXRfZ2V0KTtcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYy0yMjE1LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxMDo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDkzNgoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDY2OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipURFggU3VwcG9ydCBBbmFseXNpcyBmb3IgRnV6emluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBjb25maXJtaW5nIHRoYXQgdGhlIFREWCBmdW5jdGlvbnMgYXJlLCBpbiBmYWN0LCBleHBvcnRlZCBmb3IgS1ZNLiBUaGUgbWFpbiBvbmVzIEkmIzM5O20gc2VlaW5nIGFyZSBgdGR4X3BhbXRfZ2V0YCwgYHRkeF9wYW10X3B1dGAsIGB0ZHhfdG9wdXBfcGFtdF9jYWNoZWAsIGB0ZHhfYWxsb2NfY29udHJvbF9wYWdlYCwgYW5kIGB0ZHhfZnJlZV9jb250cm9sX3BhZ2VgLiBJIHF1aWNrbHkgc2VlIHRoYXQgYHRkeF9wYW10X2dldGAgaXMgY2FsbGVkIHdpdGhpbiBib3RoIGB0ZHhfc2VwdF9tYXBfbm9ubGVhZl9zcHRlYCBhbmQgYHRkeF9zZXB0X21hcF9sZWFmX3NwdGVgLCBhbmQgYHRkeF9hbGxvY19jb250cm9sX3BhZ2VgIGdldHMgY2FsbGVkIGZyb20gYF9fdGR4X3RkX2luaXRgIGFuZCBgdGR4X3RkX3ZjcHVfaW5pdGAuIFRoaXMgY29uZmlybXMgdGhleSBhcmUgZGVmaW5pdGVseSByZWFjaGFibGUgaWYgVERYIGlzIGVuYWJsZWQuCgpOb3csIGxldCYjMzk7cyBsb29rIGF0IHRoZSBgRW5hYmxlQ29uZmlnc2AuIEkgc2VlIGBJTlRFTF9URFhfSE9TVGAsIGBLVk1fSU5URUxfVERYYCwgYW5kIGBLVk1fSU5URUxgLiBJJiMzOTtsbCB2ZXJpZnkgdGhlIGRlcGVuZGVuY2llcyBmb3IgYEtWTV9JTlRFTF9URFhgLiBJdCBkZXBlbmRzIG9uIGBJTlRFTF9URFhfSE9TVGAsIHdoaWNoIGluIHR1cm4gZGVwZW5kcyBvbiBgQ1BVX1NVUF9JTlRFTGAsIGBYODZfNjRgLCBgS1ZNX0lOVEVMYCwgYFg4Nl9YMkFQSUNgLCBgQ09OVElHX0FMTE9DYCwgYW5kIGBYODZfTUNFYC4gVGhpcyBtZWFucyB0aGUgYEVuYWJsZUNvbmZpZ3NgIG5lZWQgdG8gaW5jbHVkZSBib3RoIGBJTlRFTF9URFhfSE9TVGAgYW5kIGBLVk1fSU5URUxfVERYYCB0byBmdW5jdGlvbi4KClRoZSBxdWVzdGlvbiB0aGVuIGlzLCBpcyB0aGVyZSBhbnkgcmVhc29uIHRvIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYD8gVGhlIGNvbmNlcm4gaXMgJiMzNDtDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUuJiMzNDsgQ2FuIFREWCBiZSByZWFjaGVkIGluIFFFTVU/IFdlbGwsIGlmIFFFTVUgaXMgcnVuIHdpdGggS1ZNIG9uIGEgVERYLWNhcGFibGUgaG9zdCwgdGhlbiB5ZXMuIElmIGl0JiMzOTtzIHJ1bm5pbmcgd2l0aCBUQ0csIHRoZW4gbm8uIFN5emthbGxlciBydW5zIFFFTVUgd2l0aCBLVk0sIHNvIGlmIHRoZSBob3N0IGhhcyBURFgsIGl0JiMzOTtzIHJlYWNoYWJsZS4gVGhlIGNydWNpYWwgcG9pbnQgaXMgdGhhdCBURFgsIGxpa2UgU0VWIG9yIFNHWCwgaXMgZ2VuZXJhbGx5IGNvbnNpZGVyZWQgcmVhY2hhYmxlIGJlY2F1c2UgU3l6a2FsbGVyIGNhbiBiZSBkZXBsb3llZCBvbiBoYXJkd2FyZSB0aGF0IHN1cHBvcnRzIHRoZXNlIENQVSBmZWF0dXJlcy4gVmVuZG9yLXNwZWNpZmljIFBDSWUgY2FyZHMgYXJlIGV4cGxpY2l0bHkgY29uc2lkZXJlZCB1bnJlYWNoYWJsZSwgYnV0IFREWCBpcyBhIENQVSBmZWF0dXJlIHRoYXQgaXMgYXZhaWxhYmxlIGluIHN0YW5kYXJkIGNsb3VkIFZNcyAobGlrZSBHQ1AgQzMgaW5zdGFuY2VzKSwgc28gdGhpcyBpcyBhIGNydWNpYWwgZGlzdGluY3Rpb24uIFRoZXJlZm9yZSwgVERYIGlzIGFic29sdXRlbHkgcmVhY2hhYmxlLgoKTGV0JiMzOTtzIGRvdWJsZS1jaGVjayBgRm9jdXNTeW1ib2xzYC4gSSBzZWUgdGhlIHNhbWUgZnVuY3Rpb25zIGFzIGJlZm9yZTogYHRkeF9wYW10X2dldGAsIGB0ZHhfcGFtdF9wdXRgLCBgdGR4X3RvcHVwX3BhbXRfY2FjaGVgLCBgdGR4X2FsbG9jX2NvbnRyb2xfcGFnZWAsIGB0ZHhfZnJlZV9jb250cm9sX3BhZ2VgLCBwbHVzIGB0ZHhfc3VwcG9ydHNfZHluYW1pY19wYW10YCBhbmQgYHRkeF90b3B1cF9leHRlcm5hbF9wYW10X2NhY2hlYCAod2hpY2ggaXMgc3RhdGljIGluIGBhcmNoL3g4Ni9rdm0vdm14L3RkeC5jYCkuIE5lZWQgdG8gcmV2aWV3IGB0ZHhfdG9wdXBfZXh0ZXJuYWxfcGFtdF9jYWNoZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDEwOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RkeF90b3B1cF9leHRlcm5hbF9wYW10X2NhY2hlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS92bXgvdGR4LmM9MTYxNz12b2lkIHRkeF9sb2FkX21tdV9wZ2Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBocGFfdCByb290X2hwYSwgaW50IHBnZF9sZXZlbClcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTE2MjctXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jOjE2Mjg6c3RhdGljIGludCB0ZHhfdG9wdXBfZXh0ZXJuYWxfcGFtdF9jYWNoZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBtaW5fbnJfc3B0cylcbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMTYyOS17XG4tLVxuYXJjaC94ODYva3ZtL3ZteC90ZHguYz0zNDczPWludCBfX2luaXQgdGR4X2hhcmR3YXJlX3NldHVwKHZvaWQpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0zNTM0LVx0aWYgKHRkeF9zdXBwb3J0c19keW5hbWljX3BhbXQodGR4X3N5c2luZm8pKVxuYXJjaC94ODYva3ZtL3ZteC90ZHguYzozNTM1Olx0XHR2dF94ODZfb3BzLnRvcHVwX2V4dGVybmFsX2NhY2hlID0gdGR4X3RvcHVwX2V4dGVybmFsX3BhbXRfY2FjaGU7XG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTM1MzYtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDEwOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2NjM4CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRXhwb3NlZCBGdW5jdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQsIHJpZ2h0IG9mZiB0aGUgYmF0LCBJIHNlZSBzb21ldGhpbmcgc3RhdGljLiBHaXZlbiBteSB1c3VhbCBwcmVmZXJlbmNlcyBmb3IgY2xhcml0eSBhbmQgdGVzdGFiaWxpdHksIEkgaW1tZWRpYXRlbHkgdGhpbmsgdGhhdCB3ZSBzaG91bGQgZXhjbHVkZSBpdCBmcm9tIHRoZSBgRm9jdXNTeW1ib2xzYCBsaXN0LiBOb24tc3RhdGljIGlzIHVzdWFsbHkgYmV0dGVyLgoKTm93LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGVzZSBleHBvcnRlZCBmdW5jdGlvbnMuIFdlIGhhdmUgYHRkeF9wYW10X2dldGAsIGB0ZHhfcGFtdF9wdXRgLCBgdGR4X3RvcHVwX3BhbXRfY2FjaGVgLCBgdGR4X2FsbG9jX2NvbnRyb2xfcGFnZWAsIGFuZCBgdGR4X2ZyZWVfY29udHJvbF9wYWdlYC4gVGhhdCYjMzk7cyBhIHNvbGlkIHNldCwgYSBnb29kIHN0YXJ0LiBJJiMzOTttIG5vdGluZyB0aGUgY2xlYXIgZ2V0L3B1dCBwYXR0ZXJuIGhlcmUsIGFuZCB0aGUgY29udHJvbCBwYWdlIGFsbG9jYXRpb24vZGVhbGxvY2F0aW9uIHBhaXIuIFRoZSBjYWNoZSB0b3AtdXAgZnVuY3Rpb24gaXMgaW50ZXJlc3Rpbmc7IGl0IHN1Z2dlc3RzIGEgcGVyZm9ybWFuY2UtZm9jdXNlZCBkZXNpZ24uCgpCdXQgaG9sZCBvbiwgYXJlIHRob3NlICphbGwqIHRoZSBleHBvcnRlZCBmdW5jdGlvbnM/IEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmcgY3J1Y2lhbC4gQWgsIHllcywgdGhlcmUgYXJlIHR3byBtb3JlOiBgdGR4X3N1cHBvcnRzX2R5bmFtaWNfcGFtdGAgYW5kIGB0ZHhfZnJlZV9wYW10X2NhY2hlYC4gKkR5bmFtaWMgcGFtdCBzdXBwb3J0KiBpcyBhbiBpbnRlcmVzdGluZyBhZGRpdGlvbiwgYW5kIGEgY2FjaGUgZGVhbGxvY2F0aW9uIGZ1bmN0aW9uIG1lYW5zIGEgY29tcGxldGUgbWVtb3J5IGxpZmVjeWNsZSBpcyBhY2NvdW50ZWQgZm9yLiBPa2F5LCB3aXRoIGFsbCBvZiB0aGlzIGluZm9ybWF0aW9uLCBJIGNhbiBtb3ZlIG9uIHRvIHRoZSBuZXh0IHN0ZXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDEwOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0xfRk9SX0tWTVxcKHRkeF9mcmVlX3BhbXRfY2FjaGVcXCkmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jPTIyNjE9dm9pZCB0ZHhfZnJlZV9wYW10X2NhY2hlKHN0cnVjdCB0ZHhfcGFtdF9jYWNoZSAqY2FjaGUpXG4tLVxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jLTIyNjctfVxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jOjIyNjg6RVhQT1JUX1NZTUJPTF9GT1JfS1ZNKHRkeF9mcmVlX3BhbXRfY2FjaGUpO1xuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jLTIyNjktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDEwOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3MjIyCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMzc3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBURFggRHluYW1pYyBQQU1UIENvZGUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGB0ZHhfZnJlZV9wYW10X2NhY2hlYCwgc3BlY2lmaWNhbGx5LiBJJiMzOTt2ZSBnb3QgYSBsaXN0IG9mIGZvY3VzIHN5bWJvbHMgaW4gbWluZDogYHRkeF9wYW10X2dldGAsIGB0ZHhfcGFtdF9wdXRgLCBgdGR4X3RvcHVwX3BhbXRfY2FjaGVgLCBgdGR4X2ZyZWVfcGFtdF9jYWNoZWAsIGB0ZHhfYWxsb2NfY29udHJvbF9wYWdlYCwgYW5kIGB0ZHhfZnJlZV9jb250cm9sX3BhZ2VgLiBNeSBpbml0aWFsIHF1ZXN0aW9uIGlzIHdoZXRoZXIgc2V0dGluZyBgdGR4X2RwYW10PW9uYCBpcyBhIHByZXJlcXVpc2l0ZSBmb3IgdGhpcyBjb2RlIHBhdGguCgpSaWdodCwgYHRkeF9zdXBwb3J0c19keW5hbWljX3BhbXRgIGNoZWNrcyBgdGR4X2VuYWJsZV9kcGFtdGAsIHdoaWNoICppcyogc2V0IGJ5IHRoZSBgdGR4X2RwYW10PW9uYCBrZXJuZWwgcGFyYW1ldGVyLiBJZiB0aGUgcGFyYW1ldGVyIGlzIGFic2VudCwgYHRkeF9zdXBwb3J0c19keW5hbWljX3BhbXRgIHJldHVybnMgZmFsc2UsIGFuZCBhIGxhcmdlIHBvcnRpb24gb2YgdGhpcyBkeW5hbWljIFBBTVQgbG9naWMgaXMgYnlwYXNzZWQuIEJ1dCB3YWl0LCBgdGR4X2FsbG9jX2NvbnRyb2xfcGFnZWAgKmNhbGxzKiBgdGR4X3BhbXRfZ2V0YC4gTm93IEkmIzM5O20gdW5kZXJzdGFuZGluZzsgZXZlbiBpZiBgdGR4X3N1cHBvcnRzX2R5bmFtaWNfcGFtdGAgaXMgZmFsc2UsIGB0ZHhfcGFtdF9nZXRgIHdpbGwgc3RpbGwgYmUgY2FsbGVkLCBidXQgaXQgd2lsbCBpbW1lZGlhdGVseSByZXR1cm4gMC4gU28sIHRoaXMgY29kZSAqaXMqIHJlYWNoYWJsZSwgZXZlbiB3aXRob3V0IGB0ZHhfZHBhbXQ9b25gLCBidXQgdGhlIGR5bmFtaWMgUEFNVCBmZWF0dXJlcyB3aWxsIG9ubHkgYmUgYWN0aXZlIGlmIHRoZSBwYXJhbWV0ZXIgaXMgYWN0dWFsbHkgc2V0LgoKTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uIGlzOiBpcyB0aGlzIGEgcG90ZW50aWFsIGlzc3VlIGZvciBmdXp6aW5nPyBUaGlua2luZyBpdCB0aHJvdWdoLCBTeXprYWxsZXIgKmNhbiogYmUgY29uZmlndXJlZCB0byBwYXNzIGtlcm5lbCBwYXJhbWV0ZXJzLCBzbyBpdCYjMzk7cyBwZXJmZWN0bHkgY2FwYWJsZSBvZiBzZXR0aW5nIGB0ZHhfZHBhbXQ9b25gLiBHaXZlbiB0aGF0LCBhbmQgdGhlIGZhY3QgdGhhdCB0aGlzIGlzIGNvcmUga2VybmVsIGZ1bmN0aW9uYWxpdHksIEkmIzM5O20gY29uZmlkZW50IHdlIHNob3VsZCBtYXJrIHRoaXMgYXMgYFdvcnRoRnV6emluZz10cnVlYC4KCkp1c3QgdG8gY292ZXIgYWxsIHRoZSBiYXNlcywgbGV0JiMzOTtzIHF1aWNrbHkgcmV2aWV3IHRoZSBFbmFibGVDb25maWdzIHRoYXQgY29tZSBpbnRvIHBsYXkgaGVyZS4gSSYjMzk7bSBzZWVpbmcgYElOVEVMX1REWF9IT1NUYCBhbmQgYEtWTV9JTlRFTF9URFhgLiBXYWl0Li4uIEkgbmVlZCB0byBkb3VibGUtY2hlY2s6IERvZXMgYEtWTV9JTlRFTF9URFhgIGhhdmUgZGVwZW5kZW5jaWVzIEkgbmVlZCB0byB0YWtlIGludG8gY29uc2lkZXJhdGlvbj8gUmlnaHQsIGJhY2sgdG8gYGFyY2gveDg2L2t2bS9LY29uZmlnYCB0byByZWZyZXNoIG15IG1lbW9yeS4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxMDo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgS1ZNX0lOVEVMX1REWCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnPTEyMj1jb25maWcgWDg2X1NHWF9LVk1cbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzMtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMzQ6Y29uZmlnIEtWTV9JTlRFTF9URFhcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzNS1cdGJvb2wgXCYjMzQ7SW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxMDo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODI0NQoJCQkJCQkJb3V0cHV0OiAyMjAKCQkJCQkJCXRob3VnaHRzOiA3NTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIFREWCBLVk0gUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIHN1cHBvcnQgZm9yIHRoZSBEeW5hbWljIFBoeXNpY2FsIEFkZHJlc3MgTWV0YWRhdGEgVGFibGUgKFBBTVQpIGZvciBJbnRlbCBURFggd2l0aGluIHRoZSBLVk0veDg2IGVudmlyb25tZW50LiAgSSBuZWVkIHRvIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnM6IGl0JiMzOTtzIGNsZWFyIHRoYXQgYEtWTV9JTlRFTF9URFhgIGRlcGVuZHMgb24gYElOVEVMX1REWF9IT1NUYCwgc28gdGhvc2UgYXJlIHRoZSBrZXkgY29uZmlndXJhdGlvbnMgSSYjMzk7bGwgbmVlZCB0byBlbmFibGUgZm9yIHRlc3RpbmcuCgpOb3csIGxldCYjMzk7cyBuYWlsIGRvd24gdGhlIGZ1bmN0aW9ucyB0aGF0IGFyZSBtb2RpZmllZCBvciBhZGRlZCBieSB0aGlzIHBhdGNoLCBzbyBJIGNhbiBmb2N1cyBteSBmdXp6aW5nIGVmZm9ydHMuICBJJiMzOTt2ZSBpZGVudGlmaWVkIHRoZXNlIGFzIHRoZSBtb3N0IGxpa2VseSBhcmVhcyBvZiBjb25jZXJuLCBiYXNlZCBvbiB0aGUgdGV4dDogYHRkeF9wYW10X2dldGAsIGB0ZHhfcGFtdF9wdXRgLCBgdGR4X3RvcHVwX3BhbXRfY2FjaGVgLCBgdGR4X2ZyZWVfcGFtdF9jYWNoZWAsIGB0ZHhfYWxsb2NfY29udHJvbF9wYWdlYCwgYW5kIGB0ZHhfZnJlZV9jb250cm9sX3BhZ2VgLiBUaGV5IGFyZSBleHBvcnRlZCBmb3IgS1ZNLgoKSSYjMzk7dmUgYWxzbyBzY2FubmVkIGBhcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmNgIGZvciBhbnkgb3RoZXIgZnVuY3Rpb25zIHRoYXQgd2VyZSBtb2RpZmllZCBvciBpbnRyb2R1Y2VkLCBidXQgdGhleSBhcHBlYXIgdG8gYmUgc3RhdGljIGhlbHBlcnMuIFRoZXNlIGFyZSB0aGUgb25lcyBJIGZvdW5kOiBgaW5pdF9wYW10X3JlZmNvdW50c2AsIGBmcmVlX3BhbXRfcmVmY291bnRzYCwgYHRkeF9maW5kX3BhbXRfcmVmY291bnRgLCBgdGRtcl9nZXRfcGFtdF9iaXRtYXBfc3pgLCBgdGRtcl9nZXRfcGFtdF9zemAsIGB0ZG1yX3NldF91cF9wYW10YCwgYHRkbXJzX3NldF91cF9wYW10X2FsbGAsIGBjb25maWdfdGR4X21vZHVsZWAsIGBpbml0X3RkeF9tb2R1bGVgLCBgdGR4X2FsbG9jX3BhZ2VfcGFtdF9jYWNoZWAsIGBhbGxvY19kcGFtdF9wYWdlYCwgYGFsbG9jX3BhbXRfYXJyYXlgLCBgZnJlZV9wYW10X2FycmF5YCwgYHBhbXRfMm1iX2FyZ2AsIGB0ZGhfcGh5bWVtX3BhbXRfYWRkYCwgYHRkaF9waHltZW1fcGFtdF9yZW1vdmVgLgoKTXkgbWFpbiBjb25jZXJuIHdpdGggdGhlIGV4cG9ydGVkIGZ1bmN0aW9ucyBpcyB0aGF0IHRoZXkgYXJlIGxpa2VseSB0byBiZSB1c2VkIGJ5IEtWTSBjb2RlLCBhbmQgYXJlIHRodXMgbW9yZSBsaWtlbHkgdG8gYmUgc3ViamVjdCB0byBhIHJhbmdlIG9mIGlucHV0cy4gU2luY2UgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGR5bmFtaWMgYWxsb2NhdGlvbiBhbmQgZnJlZWluZyBvZiBQQU1UIG1lbW9yeSwgSSBoYXZlIHRvIGVuc3VyZSB0aGF0IG1lbW9yeSBtYW5hZ2VtZW50IGlzIGNvcnJlY3QgaW4gdGhpcyBURFggaW1wbGVtZW50YXRpb24gYW5kIHRoYXQgbWVtb3J5IGxlYWtzIGFuZCBjcmFzaGVzIGFyZSBwcmV2ZW50ZWQgaW4gVERYIGhvc3Qgc3VwcG9ydC4KClRoZSBwYXRjaCBhdXRob3IgZXhwbGljaXRseSBub3RlZCB0byBleGNsdWRlIGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiAgSG93ZXZlciwgdGhpcyBURFggZmVhdHVyZSwgdW5saWtlIHZlbmRvci1zcGVjaWZpYyBoYXJkd2FyZSBkcml2ZXJzLCBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHb29nbGUgQ2xvdWQgRW5naW5lIChHQ0UpIGlmIHRoZSBoYXJkd2FyZSBzdXBwb3J0cyBURFguIFRoZXJlZm9yZSwgaXQmIzM5O3MgYWJzb2x1dGVseSB3b3J0aCBmdXp6aW5nLiBJIGNhbiByZXByb2R1Y2UgYSBURFgtY2FwYWJsZSBpbnN0YW5jZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LgoKSGVyZeKAmXMgbXkgcmVhc29uaW5nIHN1Y2NpbmN0bHk6IFRoaXMgcGF0Y2ggYnJpbmdzIER5bmFtaWMgUEFNVCBzdXBwb3J0IHRvIFREWCBpbiBLVk0veDg2LCBlbmFibGluZyBkeW5hbWljIGFsbG9jYXRpb24gYW5kIGZyZWVpbmcgb2YgUEFNVCBtZW1vcnkgcGFnZXMgZm9yIGd1ZXN0cywgdG91Y2hpbmcgS1ZNIE1NVSBhbmQgVERYIGluaXRpYWxpemF0aW9uLiBJdCAqaXMqIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgd2l0aCBURFggaGFyZHdhcmUsIHNwZWNpZmljYWxseSBpbiBURFgtY2FwYWJsZSBpbnN0YW5jZXMsIG5lY2Vzc2l0YXRpbmcgZnV6emluZyB0byBndWFyYW50ZWUgY29ycmVjdCBtZW1vcnkgbWFuYWdlbWVudCBhbmQgYXZvaWQgbGVha3Mgb3IgY3Jhc2hlcyBpbiBURFggaG9zdCBzdXBwb3J0LgoKU28sIGhlcmUmIzM5O3MgbXkgcGxhbjoKCiogICBFbmFibGUgQ29uZmlndXJhdGlvbnM6IGBJTlRFTF9URFhfSE9TVGAsIGBLVk1fSU5URUxfVERYYAoqICAgRm9jdXMgU3ltYm9scyBmb3IgZnV6emluZzogYHRkeF9wYW10X2dldGAsIGB0ZHhfcGFtdF9wdXRgLCBgdGR4X3RvcHVwX3BhbXRfY2FjaGVgLCBgdGR4X2ZyZWVfcGFtdF9jYWNoZWAsIGB0ZHhfYWxsb2NfY29udHJvbF9wYWdlYCwgYHRkeF9mcmVlX2NvbnRyb2xfcGFnZWAKCkkmIzM5O2xsIHNraXAgYHRkeF9zdXBwb3J0c19keW5hbWljX3BhbXRgIGFzIGl0IGxvb2tzIGxpa2UgYSBzaW1wbGUgZ2V0dGVyLgoKTm93LCBJJiMzOTttIHJlYWR5IHRvIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDEwOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJTlRFTF9URFhfSE9TVCYjMzQ7LAogICAgJiMzNDtLVk1fSU5URUxfVERYJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGR4X3BhbXRfZ2V0JiMzNDssCiAgICAmIzM0O3RkeF9wYW10X3B1dCYjMzQ7LAogICAgJiMzNDt0ZHhfdG9wdXBfcGFtdF9jYWNoZSYjMzQ7LAogICAgJiMzNDt0ZHhfZnJlZV9wYW10X2NhY2hlJiMzNDssCiAgICAmIzM0O3RkeF9hbGxvY19jb250cm9sX3BhZ2UmIzM0OywKICAgICYjMzQ7dGR4X2ZyZWVfY29udHJvbF9wYWdlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgRHluYW1pYyBQaHlzaWNhbCBBZGRyZXNzIE1ldGFkYXRhIFRhYmxlIChQQU1UKSBzdXBwb3J0IGZvciBJbnRlbCBURFggaW4gS1ZNL3g4Ni4gSXQgYWRkcyBmdW5jdGlvbmFsIGNvcmUga2VybmVsIGxvZ2ljIHRvIGR5bmFtaWNhbGx5IGFsbG9jYXRlIGFuZCBmcmVlIFBBTVQgbWVtb3J5IHBhZ2VzIGZvciBURFggZ3Vlc3RzLCBtb2RpZnlpbmcgS1ZNIE1NVSBhbmQgVERYIGluaXRpYWxpemF0aW9uIHBhdGhzLiBUaGlzIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgcnVubmluZyBvbiBURFgtY2FwYWJsZSBoYXJkd2FyZSAoZS5nLiwgR0NQIEMzIGluc3RhbmNlcykgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG1lbW9yeSBtYW5hZ2VtZW50IGNvcnJlY3RuZXNzIGFuZCBwcmV2ZW50IGxlYWtzIG9yIGNyYXNoZXMgaW4gdGhlIFREWCBob3N0IHN1cHBvcnQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lOVEVMX1REWF9IT1NUJiMzNDssCiAgICAmIzM0O0tWTV9JTlRFTF9URFgmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0ZHhfcGFtdF9nZXQmIzM0OywKICAgICYjMzQ7dGR4X3BhbXRfcHV0JiMzNDssCiAgICAmIzM0O3RkeF90b3B1cF9wYW10X2NhY2hlJiMzNDssCiAgICAmIzM0O3RkeF9mcmVlX3BhbXRfY2FjaGUmIzM0OywKICAgICYjMzQ7dGR4X2FsbG9jX2NvbnRyb2xfcGFnZSYjMzQ7LAogICAgJiMzNDt0ZHhfZnJlZV9jb250cm9sX3BhZ2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBEeW5hbWljIFBoeXNpY2FsIEFkZHJlc3MgTWV0YWRhdGEgVGFibGUgKFBBTVQpIHN1cHBvcnQgZm9yIEludGVsIFREWCBpbiBLVk0veDg2LiBJdCBhZGRzIGZ1bmN0aW9uYWwgY29yZSBrZXJuZWwgbG9naWMgdG8gZHluYW1pY2FsbHkgYWxsb2NhdGUgYW5kIGZyZWUgUEFNVCBtZW1vcnkgcGFnZXMgZm9yIFREWCBndWVzdHMsIG1vZGlmeWluZyBLVk0gTU1VIGFuZCBURFggaW5pdGlhbGl6YXRpb24gcGF0aHMuIFRoaXMgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBydW5uaW5nIG9uIFREWC1jYXBhYmxlIGhhcmR3YXJlIChlLmcuLCBHQ1AgQzMgaW5zdGFuY2VzKSBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbWVtb3J5IG1hbmFnZW1lbnQgY29ycmVjdG5lc3MgYW5kIHByZXZlbnQgbGVha3Mgb3IgY3Jhc2hlcyBpbiB0aGUgVERYIGhvc3Qgc3VwcG9ydC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDEwOjU1OjIyLjE5MDY0ODQwNloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk1NTMzMDcyMDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklOVEVMX1REWF9IT1NUXCIsXG4gICAgXCJLVk1fSU5URUxfVERYXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGR4X3BhbXRfZ2V0XCIsXG4gICAgXCJ0ZHhfcGFtdF9wdXRcIixcbiAgICBcInRkeF90b3B1cF9wYW10X2NhY2hlXCIsXG4gICAgXCJ0ZHhfZnJlZV9wYW10X2NhY2hlXCIsXG4gICAgXCJ0ZHhfYWxsb2NfY29udHJvbF9wYWdlXCIsXG4gICAgXCJ0ZHhfZnJlZV9jb250cm9sX3BhZ2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIER5bmFtaWMgUGh5c2ljYWwgQWRkcmVzcyBNZXRhZGF0YSBUYWJsZSAoUEFNVCkgc3VwcG9ydCBmb3IgSW50ZWwgVERYIGluIEtWTS94ODYuIEl0IGFkZHMgZnVuY3Rpb25hbCBjb3JlIGtlcm5lbCBsb2dpYyB0byBkeW5hbWljYWxseSBhbGxvY2F0ZSBhbmQgZnJlZSBQQU1UIG1lbW9yeSBwYWdlcyBmb3IgVERYIGd1ZXN0cywgbW9kaWZ5aW5nIEtWTSBNTVUgYW5kIFREWCBpbml0aWFsaXphdGlvbiBwYXRocy4gVGhpcyBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHJ1bm5pbmcgb24gVERYLWNhcGFibGUgaGFyZHdhcmUgKGUuZy4sIEdDUCBDMyBpbnN0YW5jZXMpIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBtZW1vcnkgbWFuYWdlbWVudCBjb3JyZWN0bmVzcyBhbmQgcHJldmVudCBsZWFrcyBvciBjcmFzaGVzIGluIHRoZSBURFggaG9zdCBzdXBwb3J0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxMDo1NToyMi4xOTA2NTU2NTZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg1MDA4NzIyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGNlZDI0MTAyYjEyNGM4OWE1NjYyN2U3YzlmMWEzYmE4YTdjZmYzOWFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFN1biBKdWwgMjYgMTA6NTU6MjAgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dFxcbmluZGV4IGI1NDkzYTdmOGYyMjgxLi5hMGE3NjcwMjQ2YmM1OCAxMDA2NDRcXG4tLS0gYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dFxcbisrKyBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0XFxuQEAgLTc1MTIsNiArNzUxMiwxNiBAQCBLZXJuZWwgcGFyYW1ldGVyc1xcbiBcXG4gXFx0dGRmeD1cXHRcXHRbSFcsRFJNXVxcbiBcXG4rXFx0dGR4X2RwYW10PVxcbitcXHRcXHRcXHRbWDg2XSBDb250cm9scyB3aGV0aGVyIFREWCB3aWxsIHVzZSBEeW5hbWljIFBBTVRcXG4rXFx0XFx0XFx0dG8gc2F2ZSBtZW1vcnksIHdoZW4gc3VwcG9ydGVkLlxcbitcXG4rXFx0XFx0XFx0VmFsaWQgcGFyYW1ldGVyczogXFxcIm9uXFxcIiwgXFxcIm9mZlxcXCJcXG4rXFx0XFx0XFx0RGVmYXVsdDogXFxcIm9mZlxcXCJcXG4rXFxuK1xcdFxcdFxcdEZvciBkZXRhaWxzIHNlZTpcXG4rXFx0XFx0XFx0RG9jdW1lbnRhdGlvbi9hcmNoL3g4Ni90ZHgucnN0XFxuK1xcbiBcXHR0ZXN0X3N1c3BlbmQ9XFx0W1NVU1BFTkRdXFxuIFxcdFxcdFxcdEZvcm1hdDogeyBcXFwibWVtXFxcIiB8IFxcXCJzdGFuZGJ5XFxcIiB8IFxcXCJmcmVlemVcXFwiIH1bLE5dXFxuIFxcdFxcdFxcdFNwZWNpZnkgXFxcIm1lbVxcXCIgKGZvciBTdXNwZW5kLXRvLVJBTSkgb3IgXFxcInN0YW5kYnlcXFwiIChmb3JcXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hcmNoL3g4Ni90ZHgucnN0IGIvRG9jdW1lbnRhdGlvbi9hcmNoL3g4Ni90ZHgucnN0XFxuaW5kZXggMzMwMzQ5OWFkNGM2ZjguLmExYzIzMDkyMzA1ODA3IDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vYXJjaC94ODYvdGR4LnJzdFxcbisrKyBiL0RvY3VtZW50YXRpb24vYXJjaC94ODYvdGR4LnJzdFxcbkBAIC0yMDAsNiArMjAwLDM0IEBAIHJlZmxlY3RzIHRoZSBUQ0Igb2YgdGhlIGN1cnJlbnRseSBydW5uaW5nIFREWCBtb2R1bGUgYW5kIHRoZXJlZm9yZVxcbiBjaGFuZ2VzIGFmdGVyIGFuIHVwZGF0ZS4gQnkgY29udHJhc3QsIFRFRV9UQ0JfU1ZOIHJlZmxlY3RzIHRoZSBUQ0IgYXQgVERcXG4gbGF1bmNoIHRpbWUgYW5kIGlzIG5vdCBhZmZlY3RlZC5cXG4gXFxuK0R5bmFtaWMgUEFNVFxcbistLS0tLS0tLS0tLS1cXG4rXFxuK1BoeXNpY2FsIEFkZHJlc3MgTWV0YWRhdGEgVGFibGUgKFBBTVQpIGlzIG1lbW9yeSB0aGF0IHRoZSBURFggbW9kdWxlIG5lZWRzXFxuK3RvIGtlZXAgZGF0YSBhYm91dCBlYWNoIHBhZ2UgKHRoaW5rIGxpa2Ugc3RydWN0IHBhZ2UpLiBJdCBuZWVkcyB0byBiZSBoYW5kZWRcXG4rdG8gdGhlIFREWCBtb2R1bGUgZm9yIGl0cyBleGNsdXNpdmUgdXNlLiBGb3Igbm9ybWFsIFBBTVQsIHRoaXMgaXMgaW5zdGFsbGVkXFxuK3doZW4gdGhlIFREWCBtb2R1bGUgaXMgZmlyc3QgbG9hZGVkIGFuZCBjb21lcyB0byBhYm91dCAwLjQlIG9mIHN5c3RlbSBtZW1vcnkuXFxuK1xcbitEeW5hbWljIFBBTVQgaXMgYSBURFggbW9kdWxlIGZlYXR1cmUgdGhhdCBhbGxvd3MgVk1NIHRvIGFsbG9jYXRlIHBhcnQgb2YgdGhlXFxuK1BBTVQgYXMgbmVlZGVkICh0aGUgcGFydHMgZm9yIHRyYWNraW5nIDRLQiBzaXplIHBhZ2VzKS4gVGhlIG90aGVyIHBhZ2Ugc2l6ZXNcXG4rKDFHQiBhbmQgMk1CKSBhcmUgc3RpbGwgYWxsb2NhdGVkIHN0YXRpY2FsbHkgYXQgdGhlIHRpbWUgb2YgVERYIG1vZHVsZVxcbitpbml0aWFsaXphdGlvbi4gVGhpcyByZWR1Y2VzIHRoZSBhbW91bnQgb2YgbWVtb3J5IHRoYXQgVERYIHVzZXMgd2hpbGUgVERzIGFyZVxcbitub3QgaW4gdXNlLlxcbitcXG4rV2hlbiBEeW5hbWljIFBBTVQgaXMgaW4gdXNlLCBkbWVzZyBzaG93cyBpdCBsaWtlOjpcXG4rXFxuKyAgWy4uXSB2aXJ0L3RkeDogRW5hYmxlIER5bmFtaWMgUEFNVFxcbisgIFsuLl0gdmlydC90ZHg6IDEwMDkyIEtCIGFsbG9jYXRlZCBmb3IgUEFNVFxcbisgIFsuLl0gdmlydC90ZHg6IFREWC1Nb2R1bGUgaW5pdGlhbGl6ZWRcXG4rXFxuK0R5bmFtaWMgUEFNVCBpcyBvbmx5IGVuYWJsZWQgd2hlbiBzdXBwb3J0ZWQgYW5kIHRoZSBgYHRkeF9kcGFtdD1gYCBrZXJuZWxcXG4rcGFyYW1ldGVyIGlzIHNldCB0byBcXFwib25cXFwiLiBUaGUgZmVhdHVyZSBpcyBvZmYgYnkgZGVmYXVsdCBiZWNhdXNlIFREWCBtb2R1bGVcXG4raW50ZXJuYWwgZGV0YWlscyBwcmV2ZW50IER5bmFtaWMgUEFNVCBmcm9tIHdvcmtpbmcgb24gYWxsIGtleWlkIHBhcnRpdGlvbmluZ1xcbitjb25maWd1cmF0aW9ucy4gV2hlbiB0aGUgVERYIG1vZHVsZSBpcyBmaXhlZCB0byBpbmNsdWRlIHRoZXNlIGNvbnN0cmFpbnRzIGluXFxuK2l0cyBlbnVtZXJhdGlvbiBvZiBEeW5hbWljIFBBTVQgc3VwcG9ydCwga2VybmVsIHN1cHBvcnQgY2FuIGJlIGNoYW5nZWQgdG9cXG4rZGVmYXVsdCBvbi4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIGNvbnN1bHQgdGhlIEludGVsIFREWCBkb2N1bWVudGF0aW9uIGFib3V0XFxuK0R5bmFtaWMgUEFNVC5cXG4rXFxuIFREWCBJbnRlcmFjdGlvbiB0byBPdGhlciBLZXJuZWwgQ29tcG9uZW50c1xcbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cXG4gXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oXFxuaW5kZXggODNkYzUwODYxMzhiMzkuLjU4ODU2M2RmZTg4ZDU3IDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmhcXG4rKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oXFxuQEAgLTk4LDYgKzk4LDcgQEAgS1ZNX1g4Nl9PUF9PUFRJT05BTF9SRVQwKHRkcF9oYXNfc21lcClcXG4gS1ZNX1g4Nl9PUChsb2FkX21tdV9wZ2QpXFxuIEtWTV9YODZfT1BfT1BUSU9OQUxfUkVUMChzZXRfZXh0ZXJuYWxfc3B0ZSlcXG4gS1ZNX1g4Nl9PUF9PUFRJT05BTChmcmVlX2V4dGVybmFsX3NwdClcXG4rS1ZNX1g4Nl9PUF9PUFRJT05BTF9SRVQwKHRvcHVwX2V4dGVybmFsX2NhY2hlKVxcbiBLVk1fWDg2X09QKGhhc193YmludmRfZXhpdClcXG4gS1ZNX1g4Nl9PUChnZXRfbDJfdHNjX29mZnNldClcXG4gS1ZNX1g4Nl9PUChnZXRfbDJfdHNjX211bHRpcGxpZXIpXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXFxuaW5kZXggNWY2YzFjZTk2NzNiN2YuLjBkYmY2NTY0ZGQwYzUxIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcXG4rKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXFxuQEAgLTE5MjIsNiArMTkyMiw3IEBAIHN0cnVjdCBrdm1feDg2X29wcyB7XFxuIFxcdC8qIFVwZGF0ZSBleHRlcm5hbCBwYWdlIHRhYmxlcyBmb3IgcGFnZSB0YWJsZSBhYm91dCB0byBiZSBmcmVlZC4gKi9cXG4gXFx0dm9pZCAoKmZyZWVfZXh0ZXJuYWxfc3B0KShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwKTtcXG4gXFxuK1xcdGludCAoKnRvcHVwX2V4dGVybmFsX2NhY2hlKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBtaW5fbnJfc3B0cyk7XFxuIFxcbiBcXHRib29sICgqaGFzX3diaW52ZF9leGl0KSh2b2lkKTtcXG4gXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RkeC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4LmhcXG5pbmRleCA4OWU5N2Q1NzYxZDg5ZS4uNzkxMDkwMWE3YmEyMWIgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4LmhcXG4rKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZHguaFxcbkBAIC0zNiw2ICszNiw3IEBAXFxuIC8qIEJpdCBkZWZpbml0aW9ucyBvZiBURFhfRkVBVFVSRVMwIG1ldGFkYXRhIGZpZWxkICovXFxuICNkZWZpbmUgVERYX0ZFQVRVUkVTMF9URF9QUkVTRVJWSU5HXFx0QklUX1VMTCgxKVxcbiAjZGVmaW5lIFREWF9GRUFUVVJFUzBfTk9fUkJQX01PRFxcdEJJVF9VTEwoMTgpXFxuKyNkZWZpbmUgVERYX0ZFQVRVUkVTMF9EWU5BTUlDX1BBTVRcXHRCSVRfVUxMKDM2KVxcbiBcXG4gI2lmbmRlZiBfX0FTU0VNQkxFUl9fXFxuIFxcbkBAIC0xMTgsMTIgKzExOSwzNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgdGR4X3N1cHBvcnRzX3J1bnRpbWVfdXBkYXRlKGNvbnN0IHN0cnVjdCB0ZHhfc3lzX2luZm8gKnN5c2luZlxcbiBcXHRyZXR1cm4gc3lzaW5mby1cXHUwMDNlZmVhdHVyZXMudGR4X2ZlYXR1cmVzMCBcXHUwMDI2IFREWF9GRUFUVVJFUzBfVERfUFJFU0VSVklORztcXG4gfVxcbiBcXG4rYm9vbCB0ZHhfc3VwcG9ydHNfZHluYW1pY19wYW10KGNvbnN0IHN0cnVjdCB0ZHhfc3lzX2luZm8gKnN5c2luZm8pO1xcbitcXG4rLyogU2ltcGxlIHN0cnVjdHVyZSBmb3IgcHJlLWFsbG9jYXRpbmcgRHluYW1pYyBQQU1UIHBhZ2VzIG91dHNpZGUgb2Ygc3BpbmxvY2tzLiAqL1xcbitzdHJ1Y3QgdGR4X3BhbXRfY2FjaGUge1xcbitcXHRzdHJ1Y3QgbGlzdF9oZWFkIHBhZ2VfbGlzdDtcXG4rXFx0aW50IGNudDtcXG4rfTtcXG4rXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCB0ZHhfaW5pdF9wYW10X2NhY2hlKHN0cnVjdCB0ZHhfcGFtdF9jYWNoZSAqY2FjaGUpXFxuK3tcXG4rXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNmNhY2hlLVxcdTAwM2VwYWdlX2xpc3QpO1xcbitcXHRjYWNoZS1cXHUwMDNlY250ID0gMDtcXG4rfVxcbitcXG4rdm9pZCB0ZHhfZnJlZV9wYW10X2NhY2hlKHN0cnVjdCB0ZHhfcGFtdF9jYWNoZSAqY2FjaGUpO1xcbitpbnQgdGR4X3RvcHVwX3BhbXRfY2FjaGUoc3RydWN0IHRkeF9wYW10X2NhY2hlICpjYWNoZSwgdW5zaWduZWQgbG9uZyBucGFnZXMpO1xcbitpbnQgdGR4X3BhbXRfZ2V0KGt2bV9wZm5fdCBwZm4sIHN0cnVjdCB0ZHhfcGFtdF9jYWNoZSAqY2FjaGUpO1xcbit2b2lkIHRkeF9wYW10X3B1dChrdm1fcGZuX3QgcGZuKTtcXG4rXFxuIGludCB0ZHhfZ3Vlc3Rfa2V5aWRfYWxsb2Modm9pZCk7XFxuIHUzMiB0ZHhfZ2V0X25yX2d1ZXN0X2tleWlkcyh2b2lkKTtcXG4gdm9pZCB0ZHhfZ3Vlc3Rfa2V5aWRfZnJlZSh1bnNpZ25lZCBpbnQga2V5aWQpO1xcbiBcXG4gdm9pZCB0ZHhfcXVpcmtfcmVzZXRfcGFkZHIodW5zaWduZWQgbG9uZyBiYXNlLCB1bnNpZ25lZCBsb25nIHNpemUpO1xcbiBcXG4rLyogTnVtYmVyIG9mIFBBTVQgcGFnZXMgdG8gYmUgcHJvdmlkZWQgdG8gVERYIG1vZHVsZSBwZXIgMk1CIHJlZ2lvbiBvZiBQQSAqL1xcbisjZGVmaW5lIFREWF9EUEFNVF9FTlRSWV9QQUdFX0NOVCAyXFxuK1xcbitzdHJ1Y3QgcGFnZSAqdGR4X2FsbG9jX2NvbnRyb2xfcGFnZSh2b2lkKTtcXG4rdm9pZCB0ZHhfZnJlZV9jb250cm9sX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpO1xcbitcXG4gc3RydWN0IHRkeF90ZCB7XFxuIFxcdC8qIFREIHJvb3Qgc3RydWN0dXJlOiAqL1xcbiBcXHRzdHJ1Y3QgcGFnZSAqdGRyX3BhZ2U7XFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RkeF9nbG9iYWxfbWV0YWRhdGEuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RkeF9nbG9iYWxfbWV0YWRhdGEuaFxcbmluZGV4IDQxMTUwZDU0NjU4OWMxLi4yYTQyNTUxZmMzM2NkNiAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZHhfZ2xvYmFsX21ldGFkYXRhLmhcXG4rKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZHhfZ2xvYmFsX21ldGFkYXRhLmhcXG5AQCAtMjEsNiArMjEsOSBAQCBzdHJ1Y3QgdGR4X3N5c19pbmZvX3RkbXIge1xcbiBcXHR1MTYgcGFtdF80a19lbnRyeV9zaXplO1xcbiBcXHR1MTYgcGFtdF8ybV9lbnRyeV9zaXplO1xcbiBcXHR1MTYgcGFtdF8xZ19lbnRyeV9zaXplO1xcbitcXG4rXFx0LyogT3B0aW9uYWwgbWV0YWRhdGEsIGlmIER5bmFtaWMgUEFNVCBpcyBzdXBwb3J0ZWQgKi9cXG4rXFx0dTggIHBhbXRfcGFnZV9iaXRtYXBfZW50cnlfYml0cztcXG4gfTtcXG4gXFxuIHN0cnVjdCB0ZHhfc3lzX2luZm9fdGRfY3RybCB7XFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9tbXUvbW11LmMgYi9hcmNoL3g4Ni9rdm0vbW11L21tdS5jXFxuaW5kZXggMjM0ZDBhOTVhYmY1MzQuLjZkYWI5OTY1NGYxNzAyIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2t2bS9tbXUvbW11LmNcXG4rKysgYi9hcmNoL3g4Ni9rdm0vbW11L21tdS5jXFxuQEAgLTYxNCw2ICs2MTQsMTAgQEAgc3RhdGljIGludCBtbXVfdG9wdXBfbWVtb3J5X2NhY2hlcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgbWF5YmVfaW5kaXJlY3QpXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgICBQVDY0X1JPT1RfTUFYX0xFVkVMKTtcXG4gXFx0XFx0aWYgKHIpXFxuIFxcdFxcdFxcdHJldHVybiByO1xcbitcXG4rXFx0XFx0ciA9IGt2bV94ODZfY2FsbCh0b3B1cF9leHRlcm5hbF9jYWNoZSkodmNwdSwgUFQ2NF9ST09UX01BWF9MRVZFTCk7XFxuK1xcdFxcdGlmIChyKVxcbitcXHRcXHRcXHRyZXR1cm4gcjtcXG4gXFx0fVxcbiBcXHRyID0ga3ZtX21tdV90b3B1cF9tZW1vcnlfY2FjaGUoXFx1MDAyNnZjcHUtXFx1MDAzZWFyY2gubW11X3NoYWRvd19wYWdlX2NhY2hlLFxcbiBcXHRcXHRcXHRcXHQgICAgICAgUFQ2NF9ST09UX01BWF9MRVZFTCk7XFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvdGR4LmMgYi9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jXFxuaW5kZXggNTQ1YjAzZDlkMTBiODEuLjA5NTczMTEyNTQwZTk4IDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgvdGR4LmNcXG4rKysgYi9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jXFxuQEAgLTM2Miw3ICszNjIsNyBAQCBzdGF0aWMgdm9pZCB0ZHhfcmVjbGFpbV9jb250cm9sX3BhZ2Uoc3RydWN0IHBhZ2UgKmN0cmxfcGFnZSlcXG4gXFx0aWYgKHRkeF9yZWNsYWltX3BhZ2UoY3RybF9wYWdlKSlcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4tXFx0X19mcmVlX3BhZ2UoY3RybF9wYWdlKTtcXG4rXFx0dGR4X2ZyZWVfY29udHJvbF9wYWdlKGN0cmxfcGFnZSk7XFxuIH1cXG4gXFxuIHN0cnVjdCB0ZHhfZmx1c2hfdnBfYXJnIHtcXG5AQCAtNTg5LDcgKzU4OSw3IEBAIHN0YXRpYyB2b2lkIHRkeF9yZWNsYWltX3RkX2NvbnRyb2xfcGFnZXMoc3RydWN0IGt2bSAqa3ZtKVxcbiBcXG4gXFx0dGR4X3F1aXJrX3Jlc2V0X3BhZGRyKHBhZ2VfdG9fcGh5cyhrdm1fdGR4LVxcdTAwM2V0ZC50ZHJfcGFnZSksIFBBR0VfU0laRSk7XFxuIFxcbi1cXHRfX2ZyZWVfcGFnZShrdm1fdGR4LVxcdTAwM2V0ZC50ZHJfcGFnZSk7XFxuK1xcdHRkeF9mcmVlX2NvbnRyb2xfcGFnZShrdm1fdGR4LVxcdTAwM2V0ZC50ZHJfcGFnZSk7XFxuIFxcdGt2bV90ZHgtXFx1MDAzZXRkLnRkcl9wYWdlID0gTlVMTDtcXG4gfVxcbiBcXG5AQCAtNjgxLDYgKzY4MSw4IEBAIGludCB0ZHhfdmNwdV9jcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXHRpZiAoIWlycWNoaXBfc3BsaXQodmNwdS1cXHUwMDNla3ZtKSlcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbitcXHR0ZHhfaW5pdF9wYW10X2NhY2hlKFxcdTAwMjZ0ZHgtXFx1MDAzZXBhbXRfY2FjaGUpO1xcbitcXG4gXFx0ZnBzdGF0ZV9zZXRfY29uZmlkZW50aWFsKFxcdTAwMjZ2Y3B1LVxcdTAwM2VhcmNoLmd1ZXN0X2ZwdSk7XFxuIFxcdHZjcHUtXFx1MDAzZWFyY2guYXBpYy1cXHUwMDNlZ3Vlc3RfYXBpY19wcm90ZWN0ZWQgPSB0cnVlO1xcbiBcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2dGR4LVxcdTAwM2V2dC5waV93YWtldXBfbGlzdCk7XFxuQEAgLTg2Niw2ICs4NjgsOCBAQCB2b2lkIHRkeF92Y3B1X2ZyZWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXHRzdHJ1Y3QgdmNwdV90ZHggKnRkeCA9IHRvX3RkeCh2Y3B1KTtcXG4gXFx0aW50IGk7XFxuIFxcbitcXHR0ZHhfZnJlZV9wYW10X2NhY2hlKFxcdTAwMjZ0ZHgtXFx1MDAzZXBhbXRfY2FjaGUpO1xcbitcXG4gXFx0aWYgKHZjcHUtXFx1MDAzZWNwdSAhPSAtMSkge1xcbiBcXHRcXHRLVk1fQlVHX09OKHRkeC1cXHUwMDNlc3RhdGUgPT0gVkNQVV9URF9TVEFURV9JTklUSUFMSVpFRCwgdmNwdS1cXHUwMDNla3ZtKTtcXG4gXFx0XFx0dGR4X2ZsdXNoX3ZwX29uX2NwdSh2Y3B1KTtcXG5AQCAtMTYyMSw2ICsxNjI1LDE3IEBAIHZvaWQgdGR4X2xvYWRfbW11X3BnZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGhwYV90IHJvb3RfaHBhLCBpbnQgcGdkX2xldmVsKVxcbiBcXHR0ZF92bWNzX3dyaXRlNjQodG9fdGR4KHZjcHUpLCBTSEFSRURfRVBUX1BPSU5URVIsIHJvb3RfaHBhKTtcXG4gfVxcbiBcXG4rc3RhdGljIGludCB0ZHhfdG9wdXBfZXh0ZXJuYWxfcGFtdF9jYWNoZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBtaW5fbnJfc3B0cylcXG4re1xcbitcXHQvKlxcbitcXHQgKiBNaW51cyBvbmUgcGFnZSB0byBleGNsdWRlIHRoZSByb290IFNQVCwgYnV0IHBsdXMgb25lIHBhZ2UgZm9yIGFcXG4rXFx0ICogcG9zc2libGUgNEtCIHByaXZhdGUgbWFwcGluZy5cXG4rXFx0ICovXFxuK1xcdG1pbl9ucl9zcHRzICs9IC0xICsgMTtcXG4rXFxuK1xcdHJldHVybiB0ZHhfdG9wdXBfcGFtdF9jYWNoZShcXHUwMDI2dG9fdGR4KHZjcHUpLVxcdTAwM2VwYW10X2NhY2hlLCBtaW5fbnJfc3B0cyk7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgdGR4X21lbV9wYWdlX2FkZChzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbiwgZW51bSBwZ19sZXZlbCBsZXZlbCxcXG4gXFx0XFx0XFx0ICAgIGt2bV9wZm5fdCBwZm4pXFxuIHtcXG5AQCAtMTY3OSwxNiArMTY5NCwyOCBAQCBzdGF0aWMgc3RydWN0IHBhZ2UgKnRkeF9zcHRlX3RvX3NlcHRfcHQoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4sXFxuIHN0YXRpYyBpbnQgdGR4X3NlcHRfbWFwX25vbmxlYWZfc3B0ZShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbixcXG4gXFx0XFx0XFx0XFx0ICAgICBlbnVtIHBnX2xldmVsIGxldmVsLCB1NjQgbmV3X3NwdGUpXFxuIHtcXG4rXFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1ID0ga3ZtX2dldF9ydW5uaW5nX3ZjcHUoKTtcXG4gXFx0Z3BhX3QgZ3BhID0gZ2ZuX3RvX2dwYShnZm4pO1xcbiBcXHR1NjQgZXJyLCBlbnRyeSwgbGV2ZWxfc3RhdGU7XFxuIFxcdHN0cnVjdCBwYWdlICpzZXB0X3B0O1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0aWYgKEtWTV9CVUdfT04oIXZjcHUsIGt2bSkpXFxuK1xcdFxcdHJldHVybiAtRUlPO1xcbiBcXG4gXFx0c2VwdF9wdCA9IHRkeF9zcHRlX3RvX3NlcHRfcHQoa3ZtLCBnZm4sIG5ld19zcHRlLCBsZXZlbCk7XFxuIFxcdGlmICghc2VwdF9wdClcXG4gXFx0XFx0cmV0dXJuIC1FSU87XFxuIFxcbitcXHRyZXQgPSB0ZHhfcGFtdF9nZXQocGFnZV90b19wZm4oc2VwdF9wdCksIFxcdTAwMjZ0b190ZHgodmNwdSktXFx1MDAzZXBhbXRfY2FjaGUpO1xcbitcXHRpZiAoS1ZNX0JVR19PTihyZXQsIGt2bSkpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbiBcXHRlcnIgPSB0ZGhfbWVtX3NlcHRfYWRkKFxcdTAwMjZ0b19rdm1fdGR4KGt2bSktXFx1MDAzZXRkLCBncGEsIGxldmVsLCBzZXB0X3B0LFxcbiBcXHRcXHRcXHQgICAgICAgXFx1MDAyNmVudHJ5LCBcXHUwMDI2bGV2ZWxfc3RhdGUpO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHR0ZHhfcGFtdF9wdXQocGFnZV90b19wZm4oc2VwdF9wdCkpO1xcbitcXG4gXFx0aWYgKHVubGlrZWx5KHRkeF9vcGVyYW5kX2J1c3koZXJyKSkpXFxuIFxcdFxcdHJldHVybiAtRUJVU1k7XFxuIFxcbkBAIC0xNzAxLDggKzE3MjgsMTMgQEAgc3RhdGljIGludCB0ZHhfc2VwdF9tYXBfbm9ubGVhZl9zcHRlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLFxcbiBzdGF0aWMgaW50IHRkeF9zZXB0X21hcF9sZWFmX3NwdGUoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4sIGVudW0gcGdfbGV2ZWwgbGV2ZWwsXFxuIFxcdFxcdFxcdFxcdCAgdTY0IG5ld19zcHRlKVxcbiB7XFxuK1xcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdSA9IGt2bV9nZXRfcnVubmluZ192Y3B1KCk7XFxuIFxcdHN0cnVjdCBrdm1fdGR4ICprdm1fdGR4ID0gdG9fa3ZtX3RkeChrdm0pO1xcbiBcXHRrdm1fcGZuX3QgcGZuID0gc3B0ZV90b19wZm4obmV3X3NwdGUpO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0aWYgKEtWTV9CVUdfT04oIXZjcHUsIGt2bSkpXFxuK1xcdFxcdHJldHVybiAtRUlPO1xcbiBcXG4gXFx0LyogVE9ETzogaGFuZGxlIGxhcmdlIHBhZ2VzLiAqL1xcbiBcXHRpZiAoS1ZNX0JVR19PTihsZXZlbCAhPSBQR19MRVZFTF80Sywga3ZtKSlcXG5AQCAtMTcxMCw2ICsxNzQyLDEwIEBAIHN0YXRpYyBpbnQgdGR4X3NlcHRfbWFwX2xlYWZfc3B0ZShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbiwgZW51bSBwZ19sZXZlbCBsZXZlXFxuIFxcbiBcXHRXQVJOX09OX09OQ0UoKG5ld19zcHRlIFxcdTAwMjYgVk1YX0VQVF9SV1hfTUFTSykgIT0gVk1YX0VQVF9SV1hfTUFTSyk7XFxuIFxcbitcXHRyZXQgPSB0ZHhfcGFtdF9nZXQocGZuLCBcXHUwMDI2dG9fdGR4KHZjcHUpLVxcdTAwM2VwYW10X2NhY2hlKTtcXG4rXFx0aWYgKEtWTV9CVUdfT04ocmV0LCBrdm0pKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4gXFx0LypcXG4gXFx0ICogRW5zdXJlIHByZV9mYXVsdF9hbGxvd2VkIGlzIHJlYWQgYnkga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5KClcXG4gXFx0ICogYmVmb3JlIGt2bV90ZHgtXFx1MDAzZXN0YXRlLiAgVXNlcnNwYWNlIG11c3Qgbm90IGJlIGFsbG93ZWQgdG8gcHJlLWZhdWx0XFxuQEAgLTE3MjIsMTAgKzE3NTgsMTUgQEAgc3RhdGljIGludCB0ZHhfc2VwdF9tYXBfbGVhZl9zcHRlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLCBlbnVtIHBnX2xldmVsIGxldmVcXG4gXFx0ICogSWYgdGhlIFREIGlzbid0IGZpbmFsaXplZC9ydW5uYWJsZSwgdGhlbiB1c2Vyc3BhY2UgaXMgaW5pdGlhbGl6aW5nXFxuIFxcdCAqIHRoZSBWTSBpbWFnZSB2aWEgS1ZNX1REWF9JTklUX01FTV9SRUdJT047IEFERCB0aGUgcGFnZSB0byB0aGUgVEQuXFxuIFxcdCAqL1xcbi1cXHRpZiAodW5saWtlbHkoa3ZtX3RkeC1cXHUwMDNlc3RhdGUgIT0gVERfU1RBVEVfUlVOTkFCTEUpKVxcbi1cXHRcXHRyZXR1cm4gdGR4X21lbV9wYWdlX2FkZChrdm0sIGdmbiwgbGV2ZWwsIHBmbik7XFxuK1xcdGlmIChsaWtlbHkoa3ZtX3RkeC1cXHUwMDNlc3RhdGUgPT0gVERfU1RBVEVfUlVOTkFCTEUpKVxcbitcXHRcXHRyZXQgPSB0ZHhfbWVtX3BhZ2VfYXVnKGt2bSwgZ2ZuLCBsZXZlbCwgcGZuKTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRyZXQgPSB0ZHhfbWVtX3BhZ2VfYWRkKGt2bSwgZ2ZuLCBsZXZlbCwgcGZuKTtcXG4rXFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHRkeF9wYW10X3B1dChwZm4pO1xcbiBcXG4tXFx0cmV0dXJuIHRkeF9tZW1fcGFnZV9hdWcoa3ZtLCBnZm4sIGxldmVsLCBwZm4pO1xcbitcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbiAvKlxcbkBAIC0xODIyLDYgKzE4NjMsNyBAQCBzdGF0aWMgaW50IHRkeF9zZXB0X3JlbW92ZV9sZWFmX3NwdGUoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4sXFxuIFxcdFxcdHJldHVybiAtRUlPO1xcbiBcXG4gXFx0dGR4X3F1aXJrX3Jlc2V0X3BhZGRyKFBGTl9QSFlTKHBmbiksIFBBR0VfU0laRSk7XFxuK1xcdHRkeF9wYW10X3B1dChwZm4pO1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG5AQCAtMTg2NSw2ICsxOTA3LDggQEAgc3RhdGljIGludCB0ZHhfc2VwdF9zZXRfcHJpdmF0ZV9zcHRlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLCB1NjQgb2xkX3NwdGUsXFxuICAqL1xcbiBzdGF0aWMgdm9pZCB0ZHhfc2VwdF9mcmVlX3ByaXZhdGVfc3B0KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tbXVfcGFnZSAqc3ApXFxuIHtcXG4rXFx0c3RydWN0IHBhZ2UgKnNlcHRfcHQgPSB2aXJ0X3RvX3BhZ2Uoc3AtXFx1MDAzZWV4dGVybmFsX3NwdCk7XFxuK1xcbiBcXHQvKlxcbiBcXHQgKiBLVk0gZG9lc24ndCAoeWV0KSB6YXAgcGFnZSB0YWJsZSBwYWdlcyBpbiBtaXJyb3IgcGFnZSB0YWJsZSB3aGlsZVxcbiBcXHQgKiBURCBpcyBhY3RpdmUsIHRob3VnaCBndWVzdCBwYWdlcyBtYXBwZWQgaW4gbWlycm9yIHBhZ2UgdGFibGUgY291bGQgYmVcXG5AQCAtMTg3OCwxNSArMTkyMiwxNSBAQCBzdGF0aWMgdm9pZCB0ZHhfc2VwdF9mcmVlX3ByaXZhdGVfc3B0KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tbXVfcGFnZSAqc3ApXFxuIFxcdCAqIHRoZSBwYWdlIHRvIHByZXZlbnQgdGhlIGtlcm5lbCBmcm9tIGFjY2Vzc2luZyB0aGUgZW5jcnlwdGVkIHBhZ2UuXFxuIFxcdCAqL1xcbiBcXHRpZiAoS1ZNX0JVR19PTihpc19oa2lkX2Fzc2lnbmVkKHRvX2t2bV90ZHgoa3ZtKSksIGt2bSkgfHxcXG4tXFx0ICAgIHRkeF9yZWNsYWltX3BhZ2UodmlydF90b19wYWdlKHNwLVxcdTAwM2VleHRlcm5hbF9zcHQpKSlcXG4rXFx0ICAgIHRkeF9yZWNsYWltX3BhZ2Uoc2VwdF9wdCkpXFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXG4gXFx0LypcXG4tXFx0ICogSW1tZWRpYXRlbHkgZnJlZSB0aGUgUy1FUFQgcGFnZSBiZWNhdXNlIFJDVS10aW1lIGZyZWUgaXMgdW5uZWNlc3NhcnlcXG4tXFx0ICogYWZ0ZXIgVERILlBIWU1FTS5QQUdFLlJFQ0xBSU0gZW5zdXJlcyB0aGVyZSBhcmUgbm8gb3V0c3RhbmRpbmdcXG4tXFx0ICogcmVhZGVycy5cXG4rXFx0ICogSW1tZWRpYXRlbHkgZnJlZSB0aGUgUy1FUFQgcGFnZSBhcyB0aGUgVERYIHN1YnN5c3RlbSBkb2Vzbid0IHN1cHBvcnRcXG4rXFx0ICogZnJlZWluZyBwYWdlcyBmcm9tIFJDVSBjYWxsYmFja3MsIGFuZCBtb3JlIGltcG9ydGFudGx5IGJlY2F1c2VcXG4rXFx0ICogVERILlBIWU1FTS5QQUdFLlJFQ0xBSU0gZW5zdXJlcyB0aGVyZSBhcmUgbm8gb3V0c3RhbmRpbmcgcmVhZGVycy5cXG4gXFx0ICovXFxuLVxcdGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylzcC1cXHUwMDNlZXh0ZXJuYWxfc3B0KTtcXG4rXFx0dGR4X2ZyZWVfY29udHJvbF9wYWdlKHNlcHRfcHQpO1xcbiBvdXQ6XFxuIFxcdHNwLVxcdTAwM2VleHRlcm5hbF9zcHQgPSBOVUxMO1xcbiB9XFxuQEAgLTI0NTksNyArMjUwMyw3IEBAIHN0YXRpYyBpbnQgX190ZHhfdGRfaW5pdChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCB0ZF9wYXJhbXMgKnRkX3BhcmFtcyxcXG4gXFxuIFxcdHJldCA9IC1FTk9NRU07XFxuIFxcbi1cXHR0ZHJfcGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG4rXFx0dGRyX3BhZ2UgPSB0ZHhfYWxsb2NfY29udHJvbF9wYWdlKCk7XFxuIFxcdGlmICghdGRyX3BhZ2UpXFxuIFxcdFxcdGdvdG8gZnJlZV9oa2lkO1xcbiBcXG5AQCAtMjQ3Miw3ICsyNTE2LDcgQEAgc3RhdGljIGludCBfX3RkeF90ZF9pbml0KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IHRkX3BhcmFtcyAqdGRfcGFyYW1zLFxcbiBcXHRcXHRnb3RvIGZyZWVfdGRyO1xcbiBcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGt2bV90ZHgtXFx1MDAzZXRkLnRkY3NfbnJfcGFnZXM7IGkrKykge1xcbi1cXHRcXHR0ZGNzX3BhZ2VzW2ldID0gYWxsb2NfcGFnZShHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbitcXHRcXHR0ZGNzX3BhZ2VzW2ldID0gdGR4X2FsbG9jX2NvbnRyb2xfcGFnZSgpO1xcbiBcXHRcXHRpZiAoIXRkY3NfcGFnZXNbaV0pXFxuIFxcdFxcdFxcdGdvdG8gZnJlZV90ZGNzO1xcbiBcXHR9XFxuQEAgLTI1OTAsMTAgKzI2MzQsOCBAQCBzdGF0aWMgaW50IF9fdGR4X3RkX2luaXQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3QgdGRfcGFyYW1zICp0ZF9wYXJhbXMsXFxuIHRlYXJkb3duOlxcbiBcXHQvKiBPbmx5IGZyZWUgcGFnZXMgbm90IHlldCBhZGRlZCwgc28gc3RhcnQgYXQgJ2knICovXFxuIFxcdGZvciAoOyBpIFxcdTAwM2Mga3ZtX3RkeC1cXHUwMDNldGQudGRjc19ucl9wYWdlczsgaSsrKSB7XFxuLVxcdFxcdGlmICh0ZGNzX3BhZ2VzW2ldKSB7XFxuLVxcdFxcdFxcdF9fZnJlZV9wYWdlKHRkY3NfcGFnZXNbaV0pO1xcbi1cXHRcXHRcXHR0ZGNzX3BhZ2VzW2ldID0gTlVMTDtcXG4tXFx0XFx0fVxcbitcXHRcXHR0ZHhfZnJlZV9jb250cm9sX3BhZ2UodGRjc19wYWdlc1tpXSk7XFxuK1xcdFxcdHRkY3NfcGFnZXNbaV0gPSBOVUxMO1xcbiBcXHR9XFxuIFxcdGlmICgha3ZtX3RkeC1cXHUwMDNldGQudGRjc19wYWdlcylcXG4gXFx0XFx0a2ZyZWUodGRjc19wYWdlcyk7XFxuQEAgLTI2MDgsMTYgKzI2NTAsMTMgQEAgc3RhdGljIGludCBfX3RkeF90ZF9pbml0KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IHRkX3BhcmFtcyAqdGRfcGFyYW1zLFxcbiBcXHRmcmVlX2NwdW1hc2tfdmFyKHBhY2thZ2VzKTtcXG4gXFxuIGZyZWVfdGRjczpcXG4tXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGt2bV90ZHgtXFx1MDAzZXRkLnRkY3NfbnJfcGFnZXM7IGkrKykge1xcbi1cXHRcXHRpZiAodGRjc19wYWdlc1tpXSlcXG4tXFx0XFx0XFx0X19mcmVlX3BhZ2UodGRjc19wYWdlc1tpXSk7XFxuLVxcdH1cXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGt2bV90ZHgtXFx1MDAzZXRkLnRkY3NfbnJfcGFnZXM7IGkrKylcXG4rXFx0XFx0dGR4X2ZyZWVfY29udHJvbF9wYWdlKHRkY3NfcGFnZXNbaV0pO1xcbiBcXHRrZnJlZSh0ZGNzX3BhZ2VzKTtcXG4gXFx0a3ZtX3RkeC1cXHUwMDNldGQudGRjc19wYWdlcyA9IE5VTEw7XFxuIFxcbiBmcmVlX3RkcjpcXG4tXFx0aWYgKHRkcl9wYWdlKVxcbi1cXHRcXHRfX2ZyZWVfcGFnZSh0ZHJfcGFnZSk7XFxuK1xcdHRkeF9mcmVlX2NvbnRyb2xfcGFnZSh0ZHJfcGFnZSk7XFxuIFxcdGt2bV90ZHgtXFx1MDAzZXRkLnRkcl9wYWdlID0gTlVMTDtcXG4gXFxuIGZyZWVfaGtpZDpcXG5AQCAtMjk1MSw3ICsyOTkwLDcgQEAgc3RhdGljIGludCB0ZHhfdGRfdmNwdV9pbml0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHZjcHVfcmN4KVxcbiBcXHRpbnQgcmV0LCBpO1xcbiBcXHR1NjQgZXJyO1xcbiBcXG4tXFx0cGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG4rXFx0cGFnZSA9IHRkeF9hbGxvY19jb250cm9sX3BhZ2UoKTtcXG4gXFx0aWYgKCFwYWdlKVxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFx0dGR4LVxcdTAwM2V2cC50ZHZwcl9wYWdlID0gcGFnZTtcXG5AQCAtMjk3MSw3ICszMDEwLDcgQEAgc3RhdGljIGludCB0ZHhfdGRfdmNwdV9pbml0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHZjcHVfcmN4KVxcbiBcXHR9XFxuIFxcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mga3ZtX3RkeC1cXHUwMDNldGQudGRjeF9ucl9wYWdlczsgaSsrKSB7XFxuLVxcdFxcdHBhZ2UgPSBhbGxvY19wYWdlKEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuK1xcdFxcdHBhZ2UgPSB0ZHhfYWxsb2NfY29udHJvbF9wYWdlKCk7XFxuIFxcdFxcdGlmICghcGFnZSkge1xcbiBcXHRcXHRcXHRyZXQgPSAtRU5PTUVNO1xcbiBcXHRcXHRcXHRnb3RvIGZyZWVfdGRjeDtcXG5AQCAtMjk5Myw3ICszMDMyLDcgQEAgc3RhdGljIGludCB0ZHhfdGRfdmNwdV9pbml0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHZjcHVfcmN4KVxcbiBcXHRcXHRcXHQgKiBtZXRob2QsIGJ1dCB0aGUgcmVzdCBhcmUgZnJlZWQgaGVyZS5cXG4gXFx0XFx0XFx0ICovXFxuIFxcdFxcdFxcdGZvciAoOyBpIFxcdTAwM2Mga3ZtX3RkeC1cXHUwMDNldGQudGRjeF9ucl9wYWdlczsgaSsrKSB7XFxuLVxcdFxcdFxcdFxcdF9fZnJlZV9wYWdlKHRkeC1cXHUwMDNldnAudGRjeF9wYWdlc1tpXSk7XFxuK1xcdFxcdFxcdFxcdHRkeF9mcmVlX2NvbnRyb2xfcGFnZSh0ZHgtXFx1MDAzZXZwLnRkY3hfcGFnZXNbaV0pO1xcbiBcXHRcXHRcXHRcXHR0ZHgtXFx1MDAzZXZwLnRkY3hfcGFnZXNbaV0gPSBOVUxMO1xcbiBcXHRcXHRcXHR9XFxuIFxcdFxcdFxcdHJldHVybiAtRUlPO1xcbkBAIC0zMDIxLDE2ICszMDYwLDE0IEBAIHN0YXRpYyBpbnQgdGR4X3RkX3ZjcHVfaW5pdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB2Y3B1X3JjeClcXG4gXFxuIGZyZWVfdGRjeDpcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGt2bV90ZHgtXFx1MDAzZXRkLnRkY3hfbnJfcGFnZXM7IGkrKykge1xcbi1cXHRcXHRpZiAodGR4LVxcdTAwM2V2cC50ZGN4X3BhZ2VzW2ldKVxcbi1cXHRcXHRcXHRfX2ZyZWVfcGFnZSh0ZHgtXFx1MDAzZXZwLnRkY3hfcGFnZXNbaV0pO1xcbitcXHRcXHR0ZHhfZnJlZV9jb250cm9sX3BhZ2UodGR4LVxcdTAwM2V2cC50ZGN4X3BhZ2VzW2ldKTtcXG4gXFx0XFx0dGR4LVxcdTAwM2V2cC50ZGN4X3BhZ2VzW2ldID0gTlVMTDtcXG4gXFx0fVxcbiBcXHRrZnJlZSh0ZHgtXFx1MDAzZXZwLnRkY3hfcGFnZXMpO1xcbiBcXHR0ZHgtXFx1MDAzZXZwLnRkY3hfcGFnZXMgPSBOVUxMO1xcbiBcXG4gZnJlZV90ZHZwcjpcXG4tXFx0aWYgKHRkeC1cXHUwMDNldnAudGR2cHJfcGFnZSlcXG4tXFx0XFx0X19mcmVlX3BhZ2UodGR4LVxcdTAwM2V2cC50ZHZwcl9wYWdlKTtcXG4rXFx0dGR4X2ZyZWVfY29udHJvbF9wYWdlKHRkeC1cXHUwMDNldnAudGR2cHJfcGFnZSk7XFxuIFxcdHRkeC1cXHUwMDNldnAudGR2cHJfcGFnZSA9IE5VTEw7XFxuIFxcdHRkeC1cXHUwMDNldnAudGR2cHJfcGEgPSAwO1xcbiBcXG5AQCAtMzQ5Myw2ICszNTMwLDEwIEBAIGludCBfX2luaXQgdGR4X2hhcmR3YXJlX3NldHVwKHZvaWQpXFxuIFxcbiBcXHR2dF94ODZfb3BzLnNldF9leHRlcm5hbF9zcHRlID0gdGR4X3NlcHRfc2V0X3ByaXZhdGVfc3B0ZTtcXG4gXFx0dnRfeDg2X29wcy5mcmVlX2V4dGVybmFsX3NwdCA9IHRkeF9zZXB0X2ZyZWVfcHJpdmF0ZV9zcHQ7XFxuK1xcbitcXHRpZiAodGR4X3N1cHBvcnRzX2R5bmFtaWNfcGFtdCh0ZHhfc3lzaW5mbykpXFxuK1xcdFxcdHZ0X3g4Nl9vcHMudG9wdXBfZXh0ZXJuYWxfY2FjaGUgPSB0ZHhfdG9wdXBfZXh0ZXJuYWxfcGFtdF9jYWNoZTtcXG4rXFxuIFxcdHZ0X3g4Nl9vcHMucHJvdGVjdGVkX2FwaWNfaGFzX2ludGVycnVwdCA9IHRkeF9wcm90ZWN0ZWRfYXBpY19oYXNfaW50ZXJydXB0O1xcbiBcXHRyZXR1cm4gMDtcXG4gXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvdGR4LmggYi9hcmNoL3g4Ni9rdm0vdm14L3RkeC5oXFxuaW5kZXggYWM4MzIzYTY4YjE2M2EuLmZkMzY4ZTNlZTA2MGI2IDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgvdGR4LmhcXG4rKysgYi9hcmNoL3g4Ni9rdm0vdm14L3RkeC5oXFxuQEAgLTcyLDYgKzcyLDggQEAgc3RydWN0IHZjcHVfdGR4IHtcXG4gXFxuIFxcdHU2NCBtYXBfZ3BhX25leHQ7XFxuIFxcdHU2NCBtYXBfZ3BhX2VuZDtcXG4rXFxuK1xcdHN0cnVjdCB0ZHhfcGFtdF9jYWNoZSBwYW10X2NhY2hlO1xcbiB9O1xcbiBcXG4gdm9pZCB0ZGhfdnBfcmRfZmFpbGVkKHN0cnVjdCB2Y3B1X3RkeCAqdGR4LCBjaGFyICp1Y2xhc3MsIHUzMiBmaWVsZCwgdTY0IGVycik7XFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYyBiL2FyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguY1xcbmluZGV4IDQyZGY4ZWE0NjRjNDcyLi5kZWM0NTcwOWU0NTRhNiAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmNcXG4rKysgYi9hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmNcXG5AQCAtMzAsNiArMzAsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc3VzcGVuZC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc3lzY29yZV9vcHMuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lkci5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvdm1hbGxvYy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL3BhZ2UuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS9zcGVjaWFsX2luc25zLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2Nhc20vbXNyLWluZGV4LmhcXHUwMDNlXFxuQEAgLTQ2LDYgKzQ3LDggQEBcXG4gI2luY2x1ZGUgXFxcInNlYW1jYWxsX2ludGVybmFsLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJ0ZHguaFxcXCJcXG4gXFxuK3N0YXRpYyBib29sIHRkeF9lbmFibGVfZHBhbXQgX19yb19hZnRlcl9pbml0O1xcbitcXG4gc3RydWN0IHRkeF9tb2R1bGVfc3RhdGUge1xcbiBcXHRib29sIGluaXRpYWxpemVkO1xcbiBcXHRib29sIHN5c2luaXRfZG9uZTtcXG5AQCAtNjMsNiArNjYsMTQgQEAgc3RhdGljIERFRklORV9QRVJfQ1BVKGJvb2wsIHRkeF9scF9pbml0aWFsaXplZCk7XFxuIFxcbiBzdGF0aWMgc3RydWN0IHRkbXJfaW5mb19saXN0IHRkeF90ZG1yX2xpc3Q7XFxuIFxcbisvKlxcbisgKiBPbiBhIG1hY2hpbmUgd2l0aCBEeW5hbWljIFBBTVQsIHRoZSBrZXJuZWwgbWFpbnRhaW5zIGEgcmVmZXJlbmNlIGNvdW50ZXJcXG4rICogZm9yIGV2ZXJ5IDJNQiByYW5nZS4gVGhlIGNvdW50ZXIgaW5kaWNhdGVzIGhvdyBtYW55IHVzZXJzIHRoZXJlIGFyZSBmb3JcXG4rICogdGhlIFBBTVQgbWVtb3J5IG9mIHRoZSAyTUIgcmFuZ2UuIFRoZSBrZXJuZWwgYWxsb2NhdGVzIFBBTVQgcmVmY291bnRzIGF0XFxuKyAqIGluaXRpYWxpemF0aW9uLlxcbisgKi9cXG4rc3RhdGljIGF0b21pY190ICpwYW10X3JlZmNvdW50cztcXG4rXFxuIC8qIEFsbCBURFgtdXNhYmxlIG1lbW9yeSByZWdpb25zLiAgUHJvdGVjdGVkIGJ5IG1lbV9ob3RwbHVnX2xvY2suICovXFxuIHN0YXRpYyBMSVNUX0hFQUQodGR4X21lbWxpc3QpO1xcbiBcXG5AQCAtMjUyLDYgKzI2Myw0MiBAQCBzdGF0aWMgc3RydWN0IHN5c2NvcmUgdGR4X3N5c2NvcmUgPSB7XFxuIFxcdC5vcHMgPSBcXHUwMDI2dGR4X3N5c2NvcmVfb3BzLFxcbiB9O1xcbiBcXG4rLypcXG4rICogQWxsb2NhdGUgUEFNVCByZWZlcmVuY2UgY291bnRlcnMgZm9yIGFsbCBwaHlzaWNhbCBtZW1vcnkuXFxuKyAqXFxuKyAqIEl0IGNvbnN1bWVzIDJNQiBmb3IgZXZlcnkgMVRCIG9mIHBoeXNpY2FsIG1lbW9yeS5cXG4rICovXFxuK3N0YXRpYyBfX2luaXQgaW50IGluaXRfcGFtdF9yZWZjb3VudHModm9pZClcXG4re1xcbitcXHRzaXplX3Qgc2l6ZSA9IERJVl9ST1VORF9VUChtYXhfcGZuLCBQVFJTX1BFUl9QVEUpICogc2l6ZW9mKCpwYW10X3JlZmNvdW50cyk7XFxuK1xcbitcXHRpZiAoIXRkeF9zdXBwb3J0c19keW5hbWljX3BhbXQoXFx1MDAyNnRkeF9zeXNpbmZvKSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRwYW10X3JlZmNvdW50cyA9IHZ6YWxsb2Moc2l6ZSk7XFxuK1xcdGlmICghcGFtdF9yZWZjb3VudHMpXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBfX2luaXQgdm9pZCBmcmVlX3BhbXRfcmVmY291bnRzKHZvaWQpXFxuK3tcXG4rXFx0aWYgKCF0ZHhfc3VwcG9ydHNfZHluYW1pY19wYW10KFxcdTAwMjZ0ZHhfc3lzaW5mbykpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdHZmcmVlKHBhbXRfcmVmY291bnRzKTtcXG4rXFx0cGFtdF9yZWZjb3VudHMgPSBOVUxMO1xcbit9XFxuK1xcbitzdGF0aWMgYXRvbWljX3QgKnRkeF9maW5kX3BhbXRfcmVmY291bnQodW5zaWduZWQgbG9uZyBwZm4pXFxuK3tcXG4rXFx0LyogRmluZCB3aGljaCBQTUQgYSBQRk4gaXMgaW4uICovXFxuK1xcdHVuc2lnbmVkIGxvbmcgaW5kZXggPSBwZm4gXFx1MDAzZVxcdTAwM2UgKFBNRF9TSElGVCAtIFBBR0VfU0hJRlQpO1xcbitcXG4rXFx0cmV0dXJuIFxcdTAwMjZwYW10X3JlZmNvdW50c1tpbmRleF07XFxuK31cXG4rXFxuIC8qXFxuICAqIEFkZCBhIG1lbW9yeSByZWdpb24gYXMgYSBURFggbWVtb3J5IGJsb2NrLiAgVGhlIGNhbGxlciBtdXN0IG1ha2Ugc3VyZVxcbiAgKiBhbGwgbWVtb3J5IHJlZ2lvbnMgYXJlIGFkZGVkIGluIGFkZHJlc3MgYXNjZW5kaW5nIG9yZGVyIGFuZCBkb24ndFxcbkBAIC01MTAsMzUgKzU1NywzNyBAQCBzdGF0aWMgX19pbml0IGludCBmaWxsX291dF90ZG1ycyhzdHJ1Y3QgbGlzdF9oZWFkICp0bWJfbGlzdCxcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK3N0YXRpYyBfX2luaXQgdW5zaWduZWQgbG9uZyB0ZG1yX2dldF9wYW10X2JpdG1hcF9zeihzdHJ1Y3QgdGRtcl9pbmZvICp0ZG1yKVxcbit7XFxuK1xcdHVuc2lnbmVkIGxvbmcgcGFtdF9zeiwgbnJfcGFtdF9lbnRyaWVzO1xcbitcXHRpbnQgYml0c19wZXJfZW50cnk7XFxuK1xcbitcXHRiaXRzX3Blcl9lbnRyeSA9IHRkeF9zeXNpbmZvLnRkbXIucGFtdF9wYWdlX2JpdG1hcF9lbnRyeV9iaXRzO1xcbitcXHRucl9wYW10X2VudHJpZXMgPSB0ZG1yLVxcdTAwM2VzaXplIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQ7XFxuK1xcdHBhbXRfc3ogPSBESVZfUk9VTkRfVVAobnJfcGFtdF9lbnRyaWVzICogYml0c19wZXJfZW50cnksIEJJVFNfUEVSX0JZVEUpO1xcbitcXG4rXFx0cmV0dXJuIFBBR0VfQUxJR04ocGFtdF9zeik7XFxuK31cXG4rXFxuIC8qXFxuICAqIENhbGN1bGF0ZSBQQU1UIHNpemUgZ2l2ZW4gYSBURE1SIGFuZCBhIHBhZ2Ugc2l6ZS4gIFRoZSByZXR1cm5lZFxcbiAgKiBQQU1UIHNpemUgaXMgYWx3YXlzIGFsaWduZWQgdXAgdG8gNEsgcGFnZSBib3VuZGFyeS5cXG4gICovXFxuLXN0YXRpYyBfX2luaXQgdW5zaWduZWQgbG9uZyB0ZG1yX2dldF9wYW10X3N6KHN0cnVjdCB0ZG1yX2luZm8gKnRkbXIsIGludCBwZ3N6LFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgIHUxNiBwYW10X2VudHJ5X3NpemUpXFxuK3N0YXRpYyBfX2luaXQgdW5zaWduZWQgbG9uZyB0ZG1yX2dldF9wYW10X3N6KHN0cnVjdCB0ZG1yX2luZm8gKnRkbXIsIGludCBwZ3N6KVxcbiB7XFxuIFxcdHVuc2lnbmVkIGxvbmcgcGFtdF9zeiwgbnJfcGFtdF9lbnRyaWVzO1xcbitcXHRjb25zdCBpbnQgdGR4X3BnX3NpemVfc2hpZnRbVERYX1BTX05SXSA9IHsgUEFHRV9TSElGVCwgUE1EX1NISUZULCBQVURfU0hJRlQgfTtcXG4rXFx0Y29uc3QgdTE2IHBhbXRfZW50cnlfc2l6ZVtURFhfUFNfTlJdID0ge1xcbitcXHRcXHR0ZHhfc3lzaW5mby50ZG1yLnBhbXRfNGtfZW50cnlfc2l6ZSxcXG4rXFx0XFx0dGR4X3N5c2luZm8udGRtci5wYW10XzJtX2VudHJ5X3NpemUsXFxuK1xcdFxcdHRkeF9zeXNpbmZvLnRkbXIucGFtdF8xZ19lbnRyeV9zaXplLFxcbitcXHR9O1xcbiBcXG4tXFx0c3dpdGNoIChwZ3N6KSB7XFxuLVxcdGNhc2UgVERYX1BTXzRLOlxcbi1cXHRcXHRucl9wYW10X2VudHJpZXMgPSB0ZG1yLVxcdTAwM2VzaXplIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQ7XFxuLVxcdFxcdGJyZWFrO1xcbi1cXHRjYXNlIFREWF9QU18yTTpcXG4tXFx0XFx0bnJfcGFtdF9lbnRyaWVzID0gdGRtci1cXHUwMDNlc2l6ZSBcXHUwMDNlXFx1MDAzZSBQTURfU0hJRlQ7XFxuLVxcdFxcdGJyZWFrO1xcbi1cXHRjYXNlIFREWF9QU18xRzpcXG4tXFx0XFx0bnJfcGFtdF9lbnRyaWVzID0gdGRtci1cXHUwMDNlc2l6ZSBcXHUwMDNlXFx1MDAzZSBQVURfU0hJRlQ7XFxuLVxcdFxcdGJyZWFrO1xcbi1cXHRkZWZhdWx0Olxcbi1cXHRcXHRXQVJOX09OX09OQ0UoMSk7XFxuLVxcdFxcdHJldHVybiAwO1xcbi1cXHR9XFxuK1xcdG5yX3BhbXRfZW50cmllcyA9IHRkbXItXFx1MDAzZXNpemUgXFx1MDAzZVxcdTAwM2UgdGR4X3BnX3NpemVfc2hpZnRbcGdzel07XFxuK1xcdHBhbXRfc3ogPSBucl9wYW10X2VudHJpZXMgKiBwYW10X2VudHJ5X3NpemVbcGdzel07XFxuIFxcbi1cXHRwYW10X3N6ID0gbnJfcGFtdF9lbnRyaWVzICogcGFtdF9lbnRyeV9zaXplO1xcbiBcXHQvKiBURFggcmVxdWlyZXMgUEFNVCBzaXplIG11c3QgYmUgNEsgYWxpZ25lZCAqL1xcbi1cXHRwYW10X3N6ID0gQUxJR04ocGFtdF9zeiwgUEFHRV9TSVpFKTtcXG4tXFxuLVxcdHJldHVybiBwYW10X3N6O1xcbitcXHRyZXR1cm4gUEFHRV9BTElHTihwYW10X3N6KTtcXG4gfVxcbiBcXG4gLypcXG5AQCAtNTc2LDE1ICs2MjUsMTEgQEAgc3RhdGljIF9faW5pdCBpbnQgdGRtcl9nZXRfbmlkKHN0cnVjdCB0ZG1yX2luZm8gKnRkbXIsIHN0cnVjdCBsaXN0X2hlYWQgKnRtYl9saXNcXG4gICogd2l0aGluIEB0ZG1yLCBhbmQgc2V0IHVwIFBBTVRzIGZvciBAdGRtci5cXG4gICovXFxuIHN0YXRpYyBfX2luaXQgaW50IHRkbXJfc2V0X3VwX3BhbXQoc3RydWN0IHRkbXJfaW5mbyAqdGRtcixcXG4tXFx0XFx0XFx0XFx0ICAgc3RydWN0IGxpc3RfaGVhZCAqdG1iX2xpc3QsXFxuLVxcdFxcdFxcdFxcdCAgIHUxNiBwYW10X2VudHJ5X3NpemVbXSlcXG4rXFx0XFx0XFx0XFx0ICAgc3RydWN0IGxpc3RfaGVhZCAqdG1iX2xpc3QpXFxuIHtcXG4tXFx0dW5zaWduZWQgbG9uZyBwYW10X2Jhc2VbVERYX1BTX05SXTtcXG4tXFx0dW5zaWduZWQgbG9uZyBwYW10X3NpemVbVERYX1BTX05SXTtcXG4tXFx0dW5zaWduZWQgbG9uZyB0ZG1yX3BhbXRfYmFzZTtcXG4gXFx0dW5zaWduZWQgbG9uZyB0ZG1yX3BhbXRfc2l6ZTtcXG4gXFx0c3RydWN0IHBhZ2UgKnBhbXQ7XFxuLVxcdGludCBwZ3N6LCBuaWQ7XFxuK1xcdGludCBuaWQ7XFxuIFxcbiBcXHRuaWQgPSB0ZG1yX2dldF9uaWQodGRtciwgdG1iX2xpc3QpO1xcbiBcXG5AQCAtNTkyLDEzICs2MzcsMTggQEAgc3RhdGljIF9faW5pdCBpbnQgdGRtcl9zZXRfdXBfcGFtdChzdHJ1Y3QgdGRtcl9pbmZvICp0ZG1yLFxcbiBcXHQgKiBDYWxjdWxhdGUgdGhlIFBBTVQgc2l6ZSBmb3IgZWFjaCBURFggc3VwcG9ydGVkIHBhZ2Ugc2l6ZVxcbiBcXHQgKiBhbmQgdGhlIHRvdGFsIFBBTVQgc2l6ZS5cXG4gXFx0ICovXFxuLVxcdHRkbXJfcGFtdF9zaXplID0gMDtcXG4tXFx0Zm9yIChwZ3N6ID0gVERYX1BTXzRLOyBwZ3N6IFxcdTAwM2MgVERYX1BTX05SOyBwZ3N6KyspIHtcXG4tXFx0XFx0cGFtdF9zaXplW3Bnc3pdID0gdGRtcl9nZXRfcGFtdF9zeih0ZG1yLCBwZ3N6LFxcbi1cXHRcXHRcXHRcXHRcXHRwYW10X2VudHJ5X3NpemVbcGdzel0pO1xcbi1cXHRcXHR0ZG1yX3BhbXRfc2l6ZSArPSBwYW10X3NpemVbcGdzel07XFxuK1xcdHRkbXItXFx1MDAzZXBhbXRfMWdfc2l6ZSA9IHRkbXJfZ2V0X3BhbXRfc3oodGRtciwgVERYX1BTXzFHKTtcXG4rXFx0dGRtci1cXHUwMDNlcGFtdF8ybV9zaXplID0gdGRtcl9nZXRfcGFtdF9zeih0ZG1yLCBURFhfUFNfMk0pO1xcbitcXG4rXFx0aWYgKHRkeF9zdXBwb3J0c19keW5hbWljX3BhbXQoXFx1MDAyNnRkeF9zeXNpbmZvKSkge1xcbitcXHRcXHQvKiBXaXRoIER5bmFtaWMgUEFNVCwgUEFNVF80SyBpcyByZXBsYWNlZCB3aXRoIGEgYml0bWFwICovXFxuK1xcdFxcdHRkbXItXFx1MDAzZXBhbXRfNGtfc2l6ZSA9IHRkbXJfZ2V0X3BhbXRfYml0bWFwX3N6KHRkbXIpO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHR0ZG1yLVxcdTAwM2VwYW10XzRrX3NpemUgPSB0ZG1yX2dldF9wYW10X3N6KHRkbXIsIFREWF9QU180Syk7XFxuIFxcdH1cXG4gXFxuK1xcdHRkbXJfcGFtdF9zaXplID0gdGRtci1cXHUwMDNlcGFtdF80a19zaXplICsgdGRtci1cXHUwMDNlcGFtdF8ybV9zaXplICsgdGRtci1cXHUwMDNlcGFtdF8xZ19zaXplO1xcbitcXG4gXFx0LypcXG4gXFx0ICogQWxsb2NhdGUgb25lIGNodW5rIG9mIHBoeXNpY2FsbHkgY29udGlndW91cyBtZW1vcnkgZm9yIGFsbFxcbiBcXHQgKiBQQU1Ucy4gIFRoaXMgaGVscHMgbWluaW1pemUgdGhlIFBBTVQncyB1c2Ugb2YgcmVzZXJ2ZWQgYXJlYXNcXG5AQCAtNjA2LDI1ICs2NTYsMTcgQEAgc3RhdGljIF9faW5pdCBpbnQgdGRtcl9zZXRfdXBfcGFtdChzdHJ1Y3QgdGRtcl9pbmZvICp0ZG1yLFxcbiBcXHQgKi9cXG4gXFx0cGFtdCA9IGFsbG9jX2NvbnRpZ19wYWdlcyh0ZG1yX3BhbXRfc2l6ZSBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZULCBHRlBfS0VSTkVMLFxcbiBcXHRcXHRcXHRuaWQsIFxcdTAwMjZub2RlX29ubGluZV9tYXApO1xcbi1cXHRpZiAoIXBhbXQpXFxuLVxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXG4gXFx0LypcXG4tXFx0ICogQnJlYWsgdGhlIGNvbnRpZ3VvdXMgYWxsb2NhdGlvbiBiYWNrIHVwIGludG8gdGhlXFxuLVxcdCAqIGluZGl2aWR1YWwgUEFNVHMgZm9yIGVhY2ggcGFnZSBzaXplLlxcbitcXHQgKiB0ZG1yLVxcdTAwM2VwYW10XzRrX2Jhc2UgaXMgc3RpbGwgemVybyBzbyB0aGUgZXJyb3JcXG4rXFx0ICogcGF0aCBvZiB0aGUgY2FsbGVyIHdpbGwgc2tpcCBmcmVlaW5nIHRoZSBQQU1ULlxcbiBcXHQgKi9cXG4tXFx0dGRtcl9wYW10X2Jhc2UgPSBwYWdlX3RvX3BmbihwYW10KSBcXHUwMDNjXFx1MDAzYyBQQUdFX1NISUZUO1xcbi1cXHRmb3IgKHBnc3ogPSBURFhfUFNfNEs7IHBnc3ogXFx1MDAzYyBURFhfUFNfTlI7IHBnc3orKykge1xcbi1cXHRcXHRwYW10X2Jhc2VbcGdzel0gPSB0ZG1yX3BhbXRfYmFzZTtcXG4tXFx0XFx0dGRtcl9wYW10X2Jhc2UgKz0gcGFtdF9zaXplW3Bnc3pdO1xcbi1cXHR9XFxuK1xcdGlmICghcGFtdClcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcbi1cXHR0ZG1yLVxcdTAwM2VwYW10XzRrX2Jhc2UgPSBwYW10X2Jhc2VbVERYX1BTXzRLXTtcXG4tXFx0dGRtci1cXHUwMDNlcGFtdF80a19zaXplID0gcGFtdF9zaXplW1REWF9QU180S107XFxuLVxcdHRkbXItXFx1MDAzZXBhbXRfMm1fYmFzZSA9IHBhbXRfYmFzZVtURFhfUFNfMk1dO1xcbi1cXHR0ZG1yLVxcdTAwM2VwYW10XzJtX3NpemUgPSBwYW10X3NpemVbVERYX1BTXzJNXTtcXG4tXFx0dGRtci1cXHUwMDNlcGFtdF8xZ19iYXNlID0gcGFtdF9iYXNlW1REWF9QU18xR107XFxuLVxcdHRkbXItXFx1MDAzZXBhbXRfMWdfc2l6ZSA9IHBhbXRfc2l6ZVtURFhfUFNfMUddO1xcbitcXHR0ZG1yLVxcdTAwM2VwYW10XzRrX2Jhc2UgPSBwYWdlX3RvX3BoeXMocGFtdCk7XFxuK1xcdHRkbXItXFx1MDAzZXBhbXRfMm1fYmFzZSA9IHRkbXItXFx1MDAzZXBhbXRfNGtfYmFzZSArIHRkbXItXFx1MDAzZXBhbXRfNGtfc2l6ZTtcXG4rXFx0dGRtci1cXHUwMDNlcGFtdF8xZ19iYXNlID0gdGRtci1cXHUwMDNlcGFtdF8ybV9iYXNlICsgdGRtci1cXHUwMDNlcGFtdF8ybV9zaXplO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG5AQCAtNjU1LDEwICs2OTcsNyBAQCBzdGF0aWMgX19pbml0IHZvaWQgdGRtcl9kb19wYW10X2Z1bmMoc3RydWN0IHRkbXJfaW5mbyAqdGRtcixcXG4gXFx0dGRtcl9nZXRfcGFtdCh0ZG1yLCBcXHUwMDI2cGFtdF9iYXNlLCBcXHUwMDI2cGFtdF9zaXplKTtcXG4gXFxuIFxcdC8qIERvIG5vdGhpbmcgaWYgUEFNVCBoYXNuJ3QgYmVlbiBhbGxvY2F0ZWQgZm9yIHRoaXMgVERNUiAqL1xcbi1cXHRpZiAoIXBhbXRfc2l6ZSlcXG4tXFx0XFx0cmV0dXJuO1xcbi1cXG4tXFx0aWYgKFdBUk5fT05fT05DRSghcGFtdF9iYXNlKSlcXG4rXFx0aWYgKCFwYW10X2Jhc2UpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuIFxcdHBhbXRfZnVuYyhwYW10X2Jhc2UsIHBhbXRfc2l6ZSk7XFxuQEAgLTY4NCwxNCArNzIzLDEyIEBAIHN0YXRpYyBfX2luaXQgdm9pZCB0ZG1yc19mcmVlX3BhbXRfYWxsKHN0cnVjdCB0ZG1yX2luZm9fbGlzdCAqdGRtcl9saXN0KVxcbiBcXG4gLyogQWxsb2NhdGUgYW5kIHNldCB1cCBQQU1UcyBmb3IgYWxsIFRETVJzICovXFxuIHN0YXRpYyBfX2luaXQgaW50IHRkbXJzX3NldF91cF9wYW10X2FsbChzdHJ1Y3QgdGRtcl9pbmZvX2xpc3QgKnRkbXJfbGlzdCxcXG4tXFx0XFx0XFx0XFx0XFx0c3RydWN0IGxpc3RfaGVhZCAqdG1iX2xpc3QsXFxuLVxcdFxcdFxcdFxcdFxcdHUxNiBwYW10X2VudHJ5X3NpemVbXSlcXG4rXFx0XFx0XFx0XFx0IHN0cnVjdCBsaXN0X2hlYWQgKnRtYl9saXN0KVxcbiB7XFxuIFxcdGludCBpLCByZXQgPSAwO1xcbiBcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHRkbXJfbGlzdC1cXHUwMDNlbnJfY29uc3VtZWRfdGRtcnM7IGkrKykge1xcbi1cXHRcXHRyZXQgPSB0ZG1yX3NldF91cF9wYW10KHRkbXJfZW50cnkodGRtcl9saXN0LCBpKSwgdG1iX2xpc3QsXFxuLVxcdFxcdFxcdFxcdHBhbXRfZW50cnlfc2l6ZSk7XFxuK1xcdFxcdHJldCA9IHRkbXJfc2V0X3VwX3BhbXQodGRtcl9lbnRyeSh0ZG1yX2xpc3QsIGkpLCB0bWJfbGlzdCk7XFxuIFxcdFxcdGlmIChyZXQpXFxuIFxcdFxcdFxcdGdvdG8gZXJyO1xcbiBcXHR9XFxuQEAgLTk2OCwxOCArMTAwNSwxMyBAQCBzdGF0aWMgX19pbml0IGludCBjb25zdHJ1Y3RfdGRtcnMoc3RydWN0IGxpc3RfaGVhZCAqdG1iX2xpc3QsXFxuIFxcdFxcdFxcdFxcdCAgc3RydWN0IHRkbXJfaW5mb19saXN0ICp0ZG1yX2xpc3QsXFxuIFxcdFxcdFxcdFxcdCAgc3RydWN0IHRkeF9zeXNfaW5mb190ZG1yICpzeXNpbmZvX3RkbXIpXFxuIHtcXG4tXFx0dTE2IHBhbXRfZW50cnlfc2l6ZVtURFhfUFNfTlJdID0ge1xcbi1cXHRcXHRzeXNpbmZvX3RkbXItXFx1MDAzZXBhbXRfNGtfZW50cnlfc2l6ZSxcXG4tXFx0XFx0c3lzaW5mb190ZG1yLVxcdTAwM2VwYW10XzJtX2VudHJ5X3NpemUsXFxuLVxcdFxcdHN5c2luZm9fdGRtci1cXHUwMDNlcGFtdF8xZ19lbnRyeV9zaXplLFxcbi1cXHR9O1xcbiBcXHRpbnQgcmV0O1xcbiBcXG4gXFx0cmV0ID0gZmlsbF9vdXRfdGRtcnModG1iX2xpc3QsIHRkbXJfbGlzdCk7XFxuIFxcdGlmIChyZXQpXFxuIFxcdFxcdHJldHVybiByZXQ7XFxuIFxcbi1cXHRyZXQgPSB0ZG1yc19zZXRfdXBfcGFtdF9hbGwodGRtcl9saXN0LCB0bWJfbGlzdCwgcGFtdF9lbnRyeV9zaXplKTtcXG4rXFx0cmV0ID0gdGRtcnNfc2V0X3VwX3BhbXRfYWxsKHRkbXJfbGlzdCwgdG1iX2xpc3QpO1xcbiBcXHRpZiAocmV0KVxcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXG5AQCAtOTk4LDYgKzEwMzAsOCBAQCBzdGF0aWMgX19pbml0IGludCBjb25zdHJ1Y3RfdGRtcnMoc3RydWN0IGxpc3RfaGVhZCAqdG1iX2xpc3QsXFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuKyNkZWZpbmUgVERYX1NZU19DT05GSUdfRFlOQU1JQ19QQU1UXFx0QklUKDE2KVxcbitcXG4gc3RhdGljIF9faW5pdCBpbnQgY29uZmlnX3RkeF9tb2R1bGUoc3RydWN0IHRkbXJfaW5mb19saXN0ICp0ZG1yX2xpc3QsXFxuIFxcdFxcdFxcdFxcdCAgICB1NjQgZ2xvYmFsX2tleWlkKVxcbiB7XFxuQEAgLTEwMjYsNiArMTA2MCwxMiBAQCBzdGF0aWMgX19pbml0IGludCBjb25maWdfdGR4X21vZHVsZShzdHJ1Y3QgdGRtcl9pbmZvX2xpc3QgKnRkbXJfbGlzdCxcXG4gXFx0YXJncy5yY3ggPSBfX3BhKHRkbXJfcGFfYXJyYXkpO1xcbiBcXHRhcmdzLnJkeCA9IHRkbXJfbGlzdC1cXHUwMDNlbnJfY29uc3VtZWRfdGRtcnM7XFxuIFxcdGFyZ3MucjggPSBnbG9iYWxfa2V5aWQ7XFxuK1xcbitcXHRpZiAodGR4X3N1cHBvcnRzX2R5bmFtaWNfcGFtdChcXHUwMDI2dGR4X3N5c2luZm8pKSB7XFxuK1xcdFxcdHByX2luZm8oXFxcIkVuYWJsZSBEeW5hbWljIFBBTVRcXFxcblxcXCIpO1xcbitcXHRcXHRhcmdzLnI4IHw9IFREWF9TWVNfQ09ORklHX0RZTkFNSUNfUEFNVDtcXG4rXFx0fVxcbitcXG4gXFx0cmV0ID0gc2VhbWNhbGxfcHJlcnIoVERIX1NZU19DT05GSUcsIFxcdTAwMjZhcmdzKTtcXG4gXFxuIFxcdC8qIEZyZWUgdGhlIGFycmF5IGFzIGl0IGlzIG5vdCByZXF1aXJlZCBhbnltb3JlLiAqL1xcbkBAIC0xMTY3LDEwICsxMjA3LDE0IEBAIHN0YXRpYyBfX2luaXQgaW50IGluaXRfdGR4X21vZHVsZSh2b2lkKVxcbiBcXHQgKi9cXG4gXFx0Z2V0X29ubGluZV9tZW1zKCk7XFxuIFxcbi1cXHRyZXQgPSBidWlsZF90ZHhfbWVtbGlzdChcXHUwMDI2dGR4X21lbWxpc3QpO1xcbitcXHRyZXQgPSBpbml0X3BhbXRfcmVmY291bnRzKCk7XFxuIFxcdGlmIChyZXQpXFxuIFxcdFxcdGdvdG8gb3V0X3B1dF90ZHhtZW07XFxuIFxcbitcXHRyZXQgPSBidWlsZF90ZHhfbWVtbGlzdChcXHUwMDI2dGR4X21lbWxpc3QpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIGVycl9mcmVlX3BhbXRfcmVmY291bnRzO1xcbitcXG4gXFx0LyogQWxsb2NhdGUgZW5vdWdoIHNwYWNlIGZvciBjb25zdHJ1Y3RpbmcgVERNUnMgKi9cXG4gXFx0cmV0ID0gYWxsb2NfdGRtcl9saXN0KFxcdTAwMjZ0ZHhfdGRtcl9saXN0LCBcXHUwMDI2dGR4X3N5c2luZm8udGRtcik7XFxuIFxcdGlmIChyZXQpXFxuQEAgLTEyMjAsNiArMTI2NCw4IEBAIHN0YXRpYyBfX2luaXQgaW50IGluaXRfdGR4X21vZHVsZSh2b2lkKVxcbiBcXHRmcmVlX3RkbXJfbGlzdChcXHUwMDI2dGR4X3RkbXJfbGlzdCk7XFxuIGVycl9mcmVlX3RkeG1lbTpcXG4gXFx0ZnJlZV90ZHhfbWVtbGlzdChcXHUwMDI2dGR4X21lbWxpc3QpO1xcbitlcnJfZnJlZV9wYW10X3JlZmNvdW50czpcXG4rXFx0ZnJlZV9wYW10X3JlZmNvdW50cygpO1xcbiBcXHRnb3RvIG91dF9wdXRfdGR4bWVtO1xcbiB9XFxuIFxcbkBAIC0yMDAzLDYgKzIwNDksMjg4IEBAIHU2NCB0ZGhfcGh5bWVtX3BhZ2Vfd2JpbnZkX2hraWQodTY0IGhraWQsIGt2bV9wZm5fdCBwZm4pXFxuIH1cXG4gRVhQT1JUX1NZTUJPTF9GT1JfS1ZNKHRkaF9waHltZW1fcGFnZV93YmludmRfaGtpZCk7XFxuIFxcbitib29sIHRkeF9zdXBwb3J0c19keW5hbWljX3BhbXQoY29uc3Qgc3RydWN0IHRkeF9zeXNfaW5mbyAqc3lzaW5mbylcXG4re1xcbitcXHRyZXR1cm4gc3lzaW5mby1cXHUwMDNlZmVhdHVyZXMudGR4X2ZlYXR1cmVzMCBcXHUwMDI2IFREWF9GRUFUVVJFUzBfRFlOQU1JQ19QQU1UIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAgICB0ZHhfZW5hYmxlX2RwYW10O1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfRk9SX0tWTSh0ZHhfc3VwcG9ydHNfZHluYW1pY19wYW10KTtcXG4rXFxuK3N0YXRpYyBzdHJ1Y3QgcGFnZSAqdGR4X2FsbG9jX3BhZ2VfcGFtdF9jYWNoZShzdHJ1Y3QgdGR4X3BhbXRfY2FjaGUgKmNhY2hlKVxcbit7XFxuK1xcdHN0cnVjdCBwYWdlICpwYWdlO1xcbitcXG4rXFx0cGFnZSA9IGxpc3RfZmlyc3RfZW50cnlfb3JfbnVsbChcXHUwMDI2Y2FjaGUtXFx1MDAzZXBhZ2VfbGlzdCwgc3RydWN0IHBhZ2UsIGxydSk7XFxuK1xcdGlmIChwYWdlKSB7XFxuK1xcdFxcdGxpc3RfZGVsKFxcdTAwMjZwYWdlLVxcdTAwM2VscnUpO1xcbitcXHRcXHRjYWNoZS1cXHUwMDNlY250LS07XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiBwYWdlO1xcbit9XFxuK1xcbitzdGF0aWMgc3RydWN0IHBhZ2UgKmFsbG9jX2RwYW10X3BhZ2Uoc3RydWN0IHRkeF9wYW10X2NhY2hlICpjYWNoZSlcXG4re1xcbitcXHRpZiAoY2FjaGUpXFxuK1xcdFxcdHJldHVybiB0ZHhfYWxsb2NfcGFnZV9wYW10X2NhY2hlKGNhY2hlKTtcXG4rXFxuK1xcdHJldHVybiBhbGxvY19wYWdlKEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYWxsb2NfcGFtdF9hcnJheShzdHJ1Y3QgcGFnZSAqKnBhbXRfcGFnZXMsIHN0cnVjdCB0ZHhfcGFtdF9jYWNoZSAqY2FjaGUpXFxuK3tcXG4rXFx0aW50IGksIGo7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgVERYX0RQQU1UX0VOVFJZX1BBR0VfQ05UOyBpKyspIHtcXG4rXFx0XFx0cGFtdF9wYWdlc1tpXSA9IGFsbG9jX2RwYW10X3BhZ2UoY2FjaGUpO1xcbitcXHRcXHRpZiAoIXBhbXRfcGFnZXNbaV0pXFxuK1xcdFxcdFxcdGdvdG8gZXJyO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rXFxuK2VycjpcXG4rXFx0Zm9yIChqID0gMDsgaiBcXHUwMDNjIGk7IGorKylcXG4rXFx0XFx0X19mcmVlX3BhZ2UocGFtdF9wYWdlc1tqXSk7XFxuK1xcbitcXHRyZXR1cm4gLUVOT01FTTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgZnJlZV9wYW10X2FycmF5KHN0cnVjdCBwYWdlICoqcGFtdF9wYWdlcylcXG4re1xcbitcXHRmb3IgKGludCBpID0gMDsgaSBcXHUwMDNjIFREWF9EUEFNVF9FTlRSWV9QQUdFX0NOVDsgaSsrKSB7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIFJlc2V0IHBhZ2VzIHVuY29uZGl0aW9uYWxseSB0byBjb3ZlciBjYXNlc1xcbitcXHRcXHQgKiB3aGVyZSB0aGV5IHdlcmUgcGFzc2VkIHRvIHRoZSBURFggbW9kdWxlLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0dGR4X3F1aXJrX3Jlc2V0X3BhZGRyKHBhZ2VfdG9fcGh5cyhwYW10X3BhZ2VzW2ldKSwgUEFHRV9TSVpFKTtcXG4rXFxuK1xcdFxcdF9fZnJlZV9wYWdlKHBhbXRfcGFnZXNbaV0pO1xcbitcXHR9XFxuK31cXG4rXFxuKy8qXFxuKyAqIENhbGN1bGF0ZSB0aGUgYXJnIG5lZWRlZCBmb3Igb3BlcmF0aW5nIG9uIHRoZSBEUEFNVCBiYWNraW5nIGZvclxcbisgKiBhIGdpdmVuIDRLQiBwYWdlLlxcbisgKi9cXG4rc3RhdGljIHU2NCBwYW10XzJtYl9hcmcoa3ZtX3Bmbl90IHBmbilcXG4re1xcbitcXHQvKiBBcmcgdmFsdWUgd2lsbCBzcGVjaWZ5IGEgMk1CIHJlZ2lvbiBvZiBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlLiAqL1xcbitcXHR1bnNpZ25lZCBsb25nIGhwYV8ybWIgPSBBTElHTl9ET1dOKHBmbiBcXHUwMDNjXFx1MDAzYyBQQUdFX1NISUZULCBQTURfU0laRSk7XFxuK1xcbitcXHRyZXR1cm4gaHBhXzJtYiB8IFREWF9QU18yTTtcXG4rfVxcbitcXG4rLyogQWRkIFBBTVQgYmFja2luZyBmb3IgdGhlIDJNQiByZWdpb24gc3Vycm91bmRpbmcgdGhlIGdpdmVuIHBmbi4gKi9cXG4rc3RhdGljIHU2NCB0ZGhfcGh5bWVtX3BhbXRfYWRkKGt2bV9wZm5fdCBwZm4sIHN0cnVjdCBwYWdlICoqcGFtdF9wYWdlcylcXG4re1xcbitcXHRzdHJ1Y3QgdGR4X21vZHVsZV9hcmdzIGFyZ3MgPSB7XFxuK1xcdFxcdC5yY3ggPSBwYW10XzJtYl9hcmcocGZuKSxcXG4rXFx0XFx0LnJkeCA9IHBhZ2VfdG9fcGh5cyhwYW10X3BhZ2VzWzBdKSxcXG4rXFx0XFx0LnI4ID0gcGFnZV90b19waHlzKHBhbXRfcGFnZXNbMV0pLFxcbitcXHR9O1xcbitcXG4rXFx0cmV0dXJuIHNlYW1jYWxsKFRESF9QSFlNRU1fUEFNVF9BREQsIFxcdTAwMjZhcmdzKTtcXG4rfVxcbitcXG4rLyogUmVtb3ZlIFBBTVQgYmFja2luZyBmb3IgdGhlIDJNQiByZWdpb24gc3Vycm91bmRpbmcgdGhlIGdpdmVuIHBmbi4gKi9cXG4rc3RhdGljIHU2NCB0ZGhfcGh5bWVtX3BhbXRfcmVtb3ZlKGt2bV9wZm5fdCBwZm4sIHN0cnVjdCBwYWdlICoqcGFtdF9wYWdlcylcXG4re1xcbitcXHRzdHJ1Y3QgdGR4X21vZHVsZV9hcmdzIGFyZ3MgPSB7XFxuK1xcdFxcdC5yY3ggPSBwYW10XzJtYl9hcmcocGZuKSxcXG4rXFx0fTtcXG4rXFx0dTY0IHJldDtcXG4rXFxuK1xcdHJldCA9IHNlYW1jYWxsX3JldChUREhfUEhZTUVNX1BBTVRfUkVNT1ZFLCBcXHUwMDI2YXJncyk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHQvKiBDb3B5IFBBTVQgcGFnZXMgb3V0IG9mIHRoZSBzdHJ1Y3QgcGVyIHRoZSBURFggQUJJICovXFxuK1xcdHBhbXRfcGFnZXNbMF0gPSBwaHlzX3RvX3BhZ2UoYXJncy5yZHgpO1xcbitcXHRwYW10X3BhZ2VzWzFdID0gcGh5c190b19wYWdlKGFyZ3MucjgpO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuKy8qIFNlcmlhbGl6ZXMgYWRkaW5nL3JlbW92aW5nIFBBTVQgbWVtb3J5ICovXFxuK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0socGFtdF9sb2NrKTtcXG4rXFxuKy8qIEJ1bXAgUEFNVCByZWZjb3VudCBmb3IgdGhlIGdpdmVuIHBmbiBhbmQgYWxsb2NhdGUgUEFNVCBiYWNraW5nIGlmIG5lZWRlZC4gKi9cXG4raW50IHRkeF9wYW10X2dldChrdm1fcGZuX3QgcGZuLCBzdHJ1Y3QgdGR4X3BhbXRfY2FjaGUgKmNhY2hlKVxcbit7XFxuK1xcdHN0cnVjdCBwYWdlICpwYW10X3BhZ2VzW1REWF9EUEFNVF9FTlRSWV9QQUdFX0NOVF07XFxuK1xcdGF0b21pY190ICpwYW10X3JlZmNvdW50O1xcbitcXHR1NjQgdGR4X3N0YXR1cztcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGlmICghdGR4X3N1cHBvcnRzX2R5bmFtaWNfcGFtdChcXHUwMDI2dGR4X3N5c2luZm8pKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdHBhbXRfcmVmY291bnQgPSB0ZHhfZmluZF9wYW10X3JlZmNvdW50KHBmbik7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBJZiB0aGUgcGFtdCBwYWdlIGlzIGFscmVhZHkgYWRkZWQgKGkuZS4gcmVmY291bnQgXFx1MDAzZT0gMSksXFxuK1xcdCAqIHRoZW4ganVzdCBpbmNyZW1lbnQgdGhlIHJlZmNvdW50LlxcbitcXHQgKi9cXG4rXFx0aWYgKGF0b21pY19pbmNfbm90X3plcm8ocGFtdF9yZWZjb3VudCkpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0cmV0ID0gYWxsb2NfcGFtdF9hcnJheShwYW10X3BhZ2VzLCBjYWNoZSk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRzcGluX2xvY2soXFx1MDAyNnBhbXRfbG9jayk7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBVbmxpa2UgdGR4X3BhbXRfcHV0KCkgd2hpY2ggdXNlcyBhdG9taWNfZGVjX2FuZF9sb2NrKCkgdG9cXG4rXFx0ICogYXRvbWljYWxseSBoYW5kbGUgdGhlIDEtXFx1MDAzZTAgdHJhbnNpdGlvbiwgdGhlIGdldCBzaWRlIGhhcyBub1xcbitcXHQgKiBlcXVpdmFsZW50IGNvbWJpbmVkIHByaW1pdGl2ZSBmb3IgMC1cXHUwMDNlMS4gUmVjaGVjayB1bmRlciB0aGVcXG4rXFx0ICogbG9jayBzaW5jZSBhbm90aGVyIGdldCBtYXkgaGF2ZSBhbHJlYWR5IGRvbmUgdGhlIDAtXFx1MDAzZTFcXG4rXFx0ICogdHJhbnNpdGlvbiBhZnRlciBib3RoIHNhdyBhdG9taWNfaW5jX25vdF96ZXJvKCkgZmFpbC5cXG4rXFx0ICovXFxuK1xcdGlmIChhdG9taWNfaW5jX25vdF96ZXJvKHBhbXRfcmVmY291bnQpKVxcbitcXHRcXHRnb3RvIG91dF9mcmVlO1xcbitcXG4rXFx0dGR4X3N0YXR1cyA9IHRkaF9waHltZW1fcGFtdF9hZGQocGZuLCBwYW10X3BhZ2VzKTtcXG4rXFx0aWYgKFdBUk5fT05fT05DRSh0ZHhfc3RhdHVzICE9IFREWF9TVUNDRVNTKSkge1xcbitcXHRcXHRyZXQgPSAtRUlPO1xcbitcXHRcXHRnb3RvIG91dF9mcmVlO1xcbitcXHR9XFxuK1xcbitcXHQvKlxcbitcXHQgKiBUaGUgcmVmY291bnQgaXMgemVybywgYW5kIHRoaXMgbG9ja2VkIHBhdGggaXMgdGhlXFxuK1xcdCAqIG9ubHkgd2F5IHRvIGluY3JlYXNlIGl0IGZyb20gMC1cXHUwMDNlMS5cXG4rXFx0ICovXFxuK1xcdGF0b21pY19zZXQocGFtdF9yZWZjb3VudCwgMSk7XFxuK1xcdHNwaW5fdW5sb2NrKFxcdTAwMjZwYW10X2xvY2spO1xcbitcXHRyZXR1cm4gMDtcXG4rXFxuK291dF9mcmVlOlxcbitcXHRzcGluX3VubG9jayhcXHUwMDI2cGFtdF9sb2NrKTtcXG4rXFx0ZnJlZV9wYW10X2FycmF5KHBhbXRfcGFnZXMpO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitFWFBPUlRfU1lNQk9MX0ZPUl9LVk0odGR4X3BhbXRfZ2V0KTtcXG4rXFxuKy8qIERyb3AgUEFNVCByZWZjb3VudCBmb3IgdGhlIGdpdmVuIHBmbiBhbmQgZnJlZSBQQU1UIGJhY2tpbmcgaWYgbmVlZGVkLiAqL1xcbit2b2lkIHRkeF9wYW10X3B1dChrdm1fcGZuX3QgcGZuKVxcbit7XFxuK1xcdHN0cnVjdCBwYWdlICpwYW10X3BhZ2VzW1REWF9EUEFNVF9FTlRSWV9QQUdFX0NOVF0gPSB7fTtcXG4rXFx0YXRvbWljX3QgKnBhbXRfcmVmY291bnQ7XFxuK1xcdHU2NCB0ZHhfc3RhdHVzO1xcbitcXG4rXFx0aWYgKCF0ZHhfc3VwcG9ydHNfZHluYW1pY19wYW10KFxcdTAwMjZ0ZHhfc3lzaW5mbykpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdHBhbXRfcmVmY291bnQgPSB0ZHhfZmluZF9wYW10X3JlZmNvdW50KHBmbik7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBJZiB0aGVyZSBpcyBtb3JlIHRoYW4gMSByZWZlcmVuY2Ugb24gdGhlIHBhbXQgcGFnZSwgZG9uJ3RcXG4rXFx0ICogcmVtb3ZlIGl0IHlldC4gSnVzdCBkZWNyZW1lbnQgdGhlIHJlZmNvdW50LlxcbitcXHQgKi9cXG4rXFx0aWYgKCFhdG9taWNfZGVjX2FuZF9sb2NrKHBhbXRfcmVmY291bnQsIFxcdTAwMjZwYW10X2xvY2spKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHR0ZHhfc3RhdHVzID0gdGRoX3BoeW1lbV9wYW10X3JlbW92ZShwZm4sIHBhbXRfcGFnZXMpO1xcbitcXG4rXFx0LypcXG4rXFx0ICogRG9uJ3QgZnJlZSBwYW10X3BhZ2VzIGFzIGl0IGNvdWxkIGhvbGQgZ2FyYmFnZSB3aGVuXFxuK1xcdCAqIHRkaF9waHltZW1fcGFtdF9yZW1vdmUoKSBmYWlscy4gIERvbid0IHBhbmljL0JVR19PTigpLCBhc1xcbitcXHQgKiB0aGVyZSBpcyBubyByaXNrIG9mIGRhdGEgY29ycnVwdGlvbiwgYnV0IGRvIHllbGwgbG91ZGx5IGFzXFxuK1xcdCAqIGZhaWx1cmUgaW5kaWNhdGVzIGEga2VybmVsIGJ1ZywgbWVtb3J5IGlzIGJlaW5nIGxlYWtlZCwgYW5kXFxuK1xcdCAqIHRoZSBkYW5nbGluZyBQQU1UIGVudHJ5IG1heSBjYXVzZSBmdXR1cmUgb3BlcmF0aW9ucyB0byBmYWlsLlxcbitcXHQgKi9cXG4rXFx0aWYgKFdBUk5fT05fT05DRSh0ZHhfc3RhdHVzICE9IFREWF9TVUNDRVNTKSkge1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBhdG9taWNfZGVjX2FuZF9sb2NrKCkgYWxyZWFkeSBkZWNyZW1lbnRlZCBpdCB0byAwLFxcbitcXHRcXHQgKiBidXQgdGhlIFBBTVQgZW50cnkgc3RpbGwgZXhpc3RzIHNpbmNlIFJFTU9WRSBmYWlsZWQuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRhdG9taWNfc2V0KHBhbXRfcmVmY291bnQsIDEpO1xcbitcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuK1xcdH1cXG4rXFxuK1xcdHNwaW5fdW5sb2NrKFxcdTAwMjZwYW10X2xvY2spO1xcbitcXHRmcmVlX3BhbXRfYXJyYXkocGFtdF9wYWdlcyk7XFxuK1xcdHJldHVybjtcXG4rb3V0X3VubG9jazpcXG4rXFx0c3Bpbl91bmxvY2soXFx1MDAyNnBhbXRfbG9jayk7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9GT1JfS1ZNKHRkeF9wYW10X3B1dCk7XFxuK1xcbit2b2lkIHRkeF9mcmVlX3BhbXRfY2FjaGUoc3RydWN0IHRkeF9wYW10X2NhY2hlICpjYWNoZSlcXG4re1xcbitcXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcXG4rXFxuK1xcdHdoaWxlICgocGFnZSA9IHRkeF9hbGxvY19wYWdlX3BhbXRfY2FjaGUoY2FjaGUpKSlcXG4rXFx0XFx0X19mcmVlX3BhZ2UocGFnZSk7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9GT1JfS1ZNKHRkeF9mcmVlX3BhbXRfY2FjaGUpO1xcbitcXG4raW50IHRkeF90b3B1cF9wYW10X2NhY2hlKHN0cnVjdCB0ZHhfcGFtdF9jYWNoZSAqY2FjaGUsIHVuc2lnbmVkIGxvbmcgbnBhZ2VzKVxcbit7XFxuK1xcdGlmIChXQVJOX09OX09OQ0UoIXRkeF9zdXBwb3J0c19keW5hbWljX3BhbXQoXFx1MDAyNnRkeF9zeXNpbmZvKSkpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0bnBhZ2VzICo9IFREWF9EUEFNVF9FTlRSWV9QQUdFX0NOVDtcXG4rXFxuK1xcdHdoaWxlIChjYWNoZS1cXHUwMDNlY250IFxcdTAwM2MgbnBhZ2VzKSB7XFxuK1xcdFxcdHN0cnVjdCBwYWdlICpwYWdlID0gYWxsb2NfcGFnZShHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbitcXG4rXFx0XFx0aWYgKCFwYWdlKVxcbitcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFxuK1xcdFxcdGxpc3RfYWRkKFxcdTAwMjZwYWdlLVxcdTAwM2VscnUsIFxcdTAwMjZjYWNoZS1cXHUwMDNlcGFnZV9saXN0KTtcXG4rXFx0XFx0Y2FjaGUtXFx1MDAzZWNudCsrO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitFWFBPUlRfU1lNQk9MX0ZPUl9LVk0odGR4X3RvcHVwX3BhbXRfY2FjaGUpO1xcbitcXG4rLypcXG4rICogUmV0dXJuIGEgcGFnZSB0aGF0IGNhbiBiZSBnaWZ0ZWQgdG8gdGhlIFREWC1Nb2R1bGUgZm9yIHVzZSBhcyBhIFxcXCJjb250cm9sXFxcIlxcbisgKiBwYWdlLCBpLmUuIHBhZ2VzIHRoYXQgYXJlIHVzZWQgZm9yIGNvbnRyb2wgc3RydWN0dXJlcyBmb3IgYSBnaXZlbiBURFhcXG4rICogZ3Vlc3QsIGFuZCB0aHVzIG9idGFpbiBURFggcHJvdGVjdGlvbnMsIGluY2x1ZGluZyBQQU1UIHRyYWNraW5nLlxcbisgKi9cXG4rc3RydWN0IHBhZ2UgKnRkeF9hbGxvY19jb250cm9sX3BhZ2Uodm9pZClcXG4re1xcbitcXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcXG4rXFxuK1xcdHBhZ2UgPSBhbGxvY19wYWdlKEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuK1xcdGlmICghcGFnZSlcXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcbitcXHRpZiAodGR4X3BhbXRfZ2V0KHBhZ2VfdG9fcGZuKHBhZ2UpLCBOVUxMKSkge1xcbitcXHRcXHRfX2ZyZWVfcGFnZShwYWdlKTtcXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiBwYWdlO1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfRk9SX0tWTSh0ZHhfYWxsb2NfY29udHJvbF9wYWdlKTtcXG4rXFxuKy8qXFxuKyAqIEZyZWUgYSBwYWdlIHRoYXQgd2FzIGdpZnRlZCB0byB0aGUgVERYLU1vZHVsZSBmb3IgdXNlIGFzIGEgY29udHJvbFxcbisgKiBwYWdlLiBBZnRlciB0aGlzLCB0aGUgcGFnZSBpcyBubyBsb25nZXIgcHJvdGVjdGVkIGJ5IFREWC5cXG4rICovXFxuK3ZvaWQgdGR4X2ZyZWVfY29udHJvbF9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKVxcbit7XFxuK1xcdGlmICghcGFnZSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0dGR4X3BhbXRfcHV0KHBhZ2VfdG9fcGZuKHBhZ2UpKTtcXG4rXFx0X19mcmVlX3BhZ2UocGFnZSk7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9GT1JfS1ZNKHRkeF9mcmVlX2NvbnRyb2xfcGFnZSk7XFxuK1xcbitzdGF0aWMgaW50IF9faW5pdCB0ZHhfZHBhbXRfc2V0dXAoY2hhciAqc3RyKVxcbit7XFxuK1xcdHJldHVybiBrc3RydG9ib29sKHN0ciwgXFx1MDAyNnRkeF9lbmFibGVfZHBhbXQpID09IDA7XFxuK31cXG4rXFxuK19fc2V0dXAoXFxcInRkeF9kcGFtdD1cXFwiLCB0ZHhfZHBhbXRfc2V0dXApO1xcbitcXG4gdm9pZCB0ZHhfc3lzX2Rpc2FibGUodm9pZClcXG4ge1xcbiBcXHRzdHJ1Y3QgdGR4X21vZHVsZV9hcmdzIGFyZ3MgPSB7fTtcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5oIGIvYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5oXFxuaW5kZXggYmRmZDBlMWUzMzdhYzAuLmE4ODZjNTRkZWNhYWRjIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguaFxcbisrKyBiL2FyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguaFxcbkBAIC00OCw2ICs0OCw4IEBAXFxuICNkZWZpbmUgVERIX1NZU19DT05GSUdcXHRcXHRcXHQ0NVxcbiAjZGVmaW5lIFRESF9TWVNfU0hVVERPV05cXHRcXHQ1MlxcbiAjZGVmaW5lIFRESF9TWVNfVVBEQVRFXFx0XFx0XFx0NTNcXG4rI2RlZmluZSBUREhfUEhZTUVNX1BBTVRfQUREXFx0XFx0NThcXG4rI2RlZmluZSBUREhfUEhZTUVNX1BBTVRfUkVNT1ZFXFx0XFx0NTlcXG4gI2RlZmluZSBUREhfU1lTX0RJU0FCTEVcXHRcXHRcXHQ2OVxcbiBcXG4gLypcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeF9nbG9iYWxfbWV0YWRhdGEuYyBiL2FyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHhfZ2xvYmFsX21ldGFkYXRhLmNcXG5pbmRleCBlNDljMzAwZjIzZDQzNS4uODM5M2QyYWE1OWRiZTcgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeF9nbG9iYWxfbWV0YWRhdGEuY1xcbisrKyBiL2FyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHhfZ2xvYmFsX21ldGFkYXRhLmNcXG5AQCAtMSw2ICsxLDYgQEBcXG4gLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gLypcXG4tICogQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnVuY3Rpb25zIHRvIHJlYWQgVERYIGdsb2JhbCBtZXRhZGF0YS5cXG4rICogRnVuY3Rpb25zIHRvIHJlYWQgVERYIGdsb2JhbCBtZXRhZGF0YS5cXG4gICpcXG4gICogVGhpcyBmaWxlIGRvZXNuJ3QgY29tcGlsZSBvbiBpdHMgb3duIGFzIGl0IGxhY2tzIG9mIGluY2x1c2lvblxcbiAgKiBvZiBTRUFNQ0FMTCB3cmFwcGVyIHByaW1pdGl2ZSB3aGljaCByZWFkcyBnbG9iYWwgbWV0YWRhdGEuXFxuQEAgLTMzLDYgKzMzLDE4IEBAIHN0YXRpYyBfX2luaXQgaW50IGdldF90ZHhfc3lzX2luZm9fZmVhdHVyZXMoc3RydWN0IHRkeF9zeXNfaW5mb19mZWF0dXJlcyAqc3lzaW5mXFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuK3N0YXRpYyBfX2luaXQgaW50IGdldF90ZHhfc3lzX2luZm9fdGRtcl9kcGFtdChzdHJ1Y3QgdGR4X3N5c19pbmZvX3RkbXIgKnN5c2luZm9fdGRtcilcXG4re1xcbitcXHRpbnQgcmV0O1xcbitcXHR1NjQgdmFsO1xcbitcXG4rXFx0cmV0ID0gcmVhZF9zeXNfbWV0YWRhdGFfZmllbGQoMHg5MTAwMDAwMTAwMDAwMDEzLCBcXHUwMDI2dmFsKTtcXG4rXFx0aWYgKCFyZXQpXFxuK1xcdFxcdHN5c2luZm9fdGRtci1cXHUwMDNlcGFtdF9wYWdlX2JpdG1hcF9lbnRyeV9iaXRzID0gdmFsO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4gc3RhdGljIF9faW5pdCBpbnQgZ2V0X3RkeF9zeXNfaW5mb190ZG1yKHN0cnVjdCB0ZHhfc3lzX2luZm9fdGRtciAqc3lzaW5mb190ZG1yKVxcbiB7XFxuIFxcdGludCByZXQgPSAwO1xcbkBAIC0xMjksNSArMTQxLDE0IEBAIHN0YXRpYyBfX2luaXQgaW50IGdldF90ZHhfc3lzX2luZm8oc3RydWN0IHRkeF9zeXNfaW5mbyAqc3lzaW5mbylcXG4gXFx0cmV0ID0gcmV0ID86IGdldF90ZHhfc3lzX2luZm9fdGRfY3RybChcXHUwMDI2c3lzaW5mby1cXHUwMDNldGRfY3RybCk7XFxuIFxcdHJldCA9IHJldCA/OiBnZXRfdGR4X3N5c19pbmZvX3RkX2NvbmYoXFx1MDAyNnN5c2luZm8tXFx1MDAzZXRkX2NvbmYpO1xcbiBcXG4rXFx0LypcXG4rXFx0ICogVGhlIGtlcm5lbCBzdXBwb3J0cyB1c2luZyBURFggd2l0aG91dCBEeW5hbWljIFBBTVQsIHNvXFxuK1xcdCAqIGF2b2lkIHJlcG9ydGluZyBmYWlsdXJlIGlmIGl0J3Mgbm90IHN1cHBvcnRlZC4gRG9uJ3QgdHJ5XFxuK1xcdCAqIHRvIHN1cHBvcnQgYnVnZ3kgVERYIG1vZHVsZXMgdGhhdCBhZHZlcnRpc2UgRHluYW1pYyBQQU1UXFxuK1xcdCAqIGJ1dCBkb24ndCBleHBvc2UgdGhlIG1ldGFkYXRhLlxcbitcXHQgKi9cXG4rXFx0aWYgKCFyZXQgXFx1MDAyNlxcdTAwMjYgdGR4X3N1cHBvcnRzX2R5bmFtaWNfcGFtdChzeXNpbmZvKSlcXG4rXFx0XFx0cmV0ID0gZ2V0X3RkeF9zeXNfaW5mb190ZG1yX2RwYW10KFxcdTAwMjZzeXNpbmZvLVxcdTAwM2V0ZG1yKTtcXG4rXFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTA6NTU6MjMuMDQxNzQwMTMzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6OTQ2ODE5NzIzMDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU5URUxfVERYX0hPU1RcIixcbiAgICBcIktWTV9JTlRFTF9URFhcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0ZHhfcGFtdF9nZXRcIixcbiAgICBcInRkeF9wYW10X3B1dFwiLFxuICAgIFwidGR4X3RvcHVwX3BhbXRfY2FjaGVcIixcbiAgICBcInRkeF9mcmVlX3BhbXRfY2FjaGVcIixcbiAgICBcInRkeF9hbGxvY19jb250cm9sX3BhZ2VcIixcbiAgICBcInRkeF9mcmVlX2NvbnRyb2xfcGFnZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgRHluYW1pYyBQaHlzaWNhbCBBZGRyZXNzIE1ldGFkYXRhIFRhYmxlIChQQU1UKSBzdXBwb3J0IGZvciBJbnRlbCBURFggaW4gS1ZNL3g4Ni4gSXQgYWRkcyBmdW5jdGlvbmFsIGNvcmUga2VybmVsIGxvZ2ljIHRvIGR5bmFtaWNhbGx5IGFsbG9jYXRlIGFuZCBmcmVlIFBBTVQgbWVtb3J5IHBhZ2VzIGZvciBURFggZ3Vlc3RzLCBtb2RpZnlpbmcgS1ZNIE1NVSBhbmQgVERYIGluaXRpYWxpemF0aW9uIHBhdGhzLiBUaGlzIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgcnVubmluZyBvbiBURFgtY2FwYWJsZSBoYXJkd2FyZSAoZS5nLiwgR0NQIEMzIGluc3RhbmNlcykgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG1lbW9yeSBtYW5hZ2VtZW50IGNvcnJlY3RuZXNzIGFuZCBwcmV2ZW50IGxlYWtzIG9yIGNyYXNoZXMgaW4gdGhlIFREWCBob3N0IHN1cHBvcnQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGNlZDI0MTAyYjEyNGM4OWE1NjYyN2U3YzlmMWEzYmE4YTdjZmYzOWFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEp1bCAyNiAxMDo1NToyMCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHRcbmluZGV4IGI1NDkzYTdmOGYyMjgxLi5hMGE3NjcwMjQ2YmM1OCAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0XG4rKysgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dFxuQEAgLTc1MTIsNiArNzUxMiwxNiBAQCBLZXJuZWwgcGFyYW1ldGVyc1xuIFxuIFx0dGRmeD1cdFx0W0hXLERSTV1cbiBcbitcdHRkeF9kcGFtdD1cbitcdFx0XHRbWDg2XSBDb250cm9scyB3aGV0aGVyIFREWCB3aWxsIHVzZSBEeW5hbWljIFBBTVRcbitcdFx0XHR0byBzYXZlIG1lbW9yeSwgd2hlbiBzdXBwb3J0ZWQuXG4rXG4rXHRcdFx0VmFsaWQgcGFyYW1ldGVyczogXCJvblwiLCBcIm9mZlwiXG4rXHRcdFx0RGVmYXVsdDogXCJvZmZcIlxuK1xuK1x0XHRcdEZvciBkZXRhaWxzIHNlZTpcbitcdFx0XHREb2N1bWVudGF0aW9uL2FyY2gveDg2L3RkeC5yc3RcbitcbiBcdHRlc3Rfc3VzcGVuZD1cdFtTVVNQRU5EXVxuIFx0XHRcdEZvcm1hdDogeyBcIm1lbVwiIHwgXCJzdGFuZGJ5XCIgfCBcImZyZWV6ZVwiIH1bLE5dXG4gXHRcdFx0U3BlY2lmeSBcIm1lbVwiIChmb3IgU3VzcGVuZC10by1SQU0pIG9yIFwic3RhbmRieVwiIChmb3JcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FyY2gveDg2L3RkeC5yc3QgYi9Eb2N1bWVudGF0aW9uL2FyY2gveDg2L3RkeC5yc3RcbmluZGV4IDMzMDM0OTlhZDRjNmY4Li5hMWMyMzA5MjMwNTgwNyAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vYXJjaC94ODYvdGR4LnJzdFxuKysrIGIvRG9jdW1lbnRhdGlvbi9hcmNoL3g4Ni90ZHgucnN0XG5AQCAtMjAwLDYgKzIwMCwzNCBAQCByZWZsZWN0cyB0aGUgVENCIG9mIHRoZSBjdXJyZW50bHkgcnVubmluZyBURFggbW9kdWxlIGFuZCB0aGVyZWZvcmVcbiBjaGFuZ2VzIGFmdGVyIGFuIHVwZGF0ZS4gQnkgY29udHJhc3QsIFRFRV9UQ0JfU1ZOIHJlZmxlY3RzIHRoZSBUQ0IgYXQgVERcbiBsYXVuY2ggdGltZSBhbmQgaXMgbm90IGFmZmVjdGVkLlxuIFxuK0R5bmFtaWMgUEFNVFxuKy0tLS0tLS0tLS0tLVxuK1xuK1BoeXNpY2FsIEFkZHJlc3MgTWV0YWRhdGEgVGFibGUgKFBBTVQpIGlzIG1lbW9yeSB0aGF0IHRoZSBURFggbW9kdWxlIG5lZWRzXG4rdG8ga2VlcCBkYXRhIGFib3V0IGVhY2ggcGFnZSAodGhpbmsgbGlrZSBzdHJ1Y3QgcGFnZSkuIEl0IG5lZWRzIHRvIGJlIGhhbmRlZFxuK3RvIHRoZSBURFggbW9kdWxlIGZvciBpdHMgZXhjbHVzaXZlIHVzZS4gRm9yIG5vcm1hbCBQQU1ULCB0aGlzIGlzIGluc3RhbGxlZFxuK3doZW4gdGhlIFREWCBtb2R1bGUgaXMgZmlyc3QgbG9hZGVkIGFuZCBjb21lcyB0byBhYm91dCAwLjQlIG9mIHN5c3RlbSBtZW1vcnkuXG4rXG4rRHluYW1pYyBQQU1UIGlzIGEgVERYIG1vZHVsZSBmZWF0dXJlIHRoYXQgYWxsb3dzIFZNTSB0byBhbGxvY2F0ZSBwYXJ0IG9mIHRoZVxuK1BBTVQgYXMgbmVlZGVkICh0aGUgcGFydHMgZm9yIHRyYWNraW5nIDRLQiBzaXplIHBhZ2VzKS4gVGhlIG90aGVyIHBhZ2Ugc2l6ZXNcbisoMUdCIGFuZCAyTUIpIGFyZSBzdGlsbCBhbGxvY2F0ZWQgc3RhdGljYWxseSBhdCB0aGUgdGltZSBvZiBURFggbW9kdWxlXG4raW5pdGlhbGl6YXRpb24uIFRoaXMgcmVkdWNlcyB0aGUgYW1vdW50IG9mIG1lbW9yeSB0aGF0IFREWCB1c2VzIHdoaWxlIFREcyBhcmVcbitub3QgaW4gdXNlLlxuK1xuK1doZW4gRHluYW1pYyBQQU1UIGlzIGluIHVzZSwgZG1lc2cgc2hvd3MgaXQgbGlrZTo6XG4rXG4rICBbLi5dIHZpcnQvdGR4OiBFbmFibGUgRHluYW1pYyBQQU1UXG4rICBbLi5dIHZpcnQvdGR4OiAxMDA5MiBLQiBhbGxvY2F0ZWQgZm9yIFBBTVRcbisgIFsuLl0gdmlydC90ZHg6IFREWC1Nb2R1bGUgaW5pdGlhbGl6ZWRcbitcbitEeW5hbWljIFBBTVQgaXMgb25seSBlbmFibGVkIHdoZW4gc3VwcG9ydGVkIGFuZCB0aGUgYGB0ZHhfZHBhbXQ9YGAga2VybmVsXG4rcGFyYW1ldGVyIGlzIHNldCB0byBcIm9uXCIuIFRoZSBmZWF0dXJlIGlzIG9mZiBieSBkZWZhdWx0IGJlY2F1c2UgVERYIG1vZHVsZVxuK2ludGVybmFsIGRldGFpbHMgcHJldmVudCBEeW5hbWljIFBBTVQgZnJvbSB3b3JraW5nIG9uIGFsbCBrZXlpZCBwYXJ0aXRpb25pbmdcbitjb25maWd1cmF0aW9ucy4gV2hlbiB0aGUgVERYIG1vZHVsZSBpcyBmaXhlZCB0byBpbmNsdWRlIHRoZXNlIGNvbnN0cmFpbnRzIGluXG4raXRzIGVudW1lcmF0aW9uIG9mIER5bmFtaWMgUEFNVCBzdXBwb3J0LCBrZXJuZWwgc3VwcG9ydCBjYW4gYmUgY2hhbmdlZCB0b1xuK2RlZmF1bHQgb24uIEZvciBtb3JlIGluZm9ybWF0aW9uLCBjb25zdWx0IHRoZSBJbnRlbCBURFggZG9jdW1lbnRhdGlvbiBhYm91dFxuK0R5bmFtaWMgUEFNVC5cbitcbiBURFggSW50ZXJhY3Rpb24gdG8gT3RoZXIgS2VybmVsIENvbXBvbmVudHNcbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiBcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaFxuaW5kZXggODNkYzUwODYxMzhiMzkuLjU4ODU2M2RmZTg4ZDU3IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaFxuKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaFxuQEAgLTk4LDYgKzk4LDcgQEAgS1ZNX1g4Nl9PUF9PUFRJT05BTF9SRVQwKHRkcF9oYXNfc21lcClcbiBLVk1fWDg2X09QKGxvYWRfbW11X3BnZClcbiBLVk1fWDg2X09QX09QVElPTkFMX1JFVDAoc2V0X2V4dGVybmFsX3NwdGUpXG4gS1ZNX1g4Nl9PUF9PUFRJT05BTChmcmVlX2V4dGVybmFsX3NwdClcbitLVk1fWDg2X09QX09QVElPTkFMX1JFVDAodG9wdXBfZXh0ZXJuYWxfY2FjaGUpXG4gS1ZNX1g4Nl9PUChoYXNfd2JpbnZkX2V4aXQpXG4gS1ZNX1g4Nl9PUChnZXRfbDJfdHNjX29mZnNldClcbiBLVk1fWDg2X09QKGdldF9sMl90c2NfbXVsdGlwbGllcilcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuaW5kZXggNWY2YzFjZTk2NzNiN2YuLjBkYmY2NTY0ZGQwYzUxIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuQEAgLTE5MjIsNiArMTkyMiw3IEBAIHN0cnVjdCBrdm1feDg2X29wcyB7XG4gXHQvKiBVcGRhdGUgZXh0ZXJuYWwgcGFnZSB0YWJsZXMgZm9yIHBhZ2UgdGFibGUgYWJvdXQgdG8gYmUgZnJlZWQuICovXG4gXHR2b2lkICgqZnJlZV9leHRlcm5hbF9zcHQpKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tbXVfcGFnZSAqc3ApO1xuIFxuK1x0aW50ICgqdG9wdXBfZXh0ZXJuYWxfY2FjaGUpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IG1pbl9ucl9zcHRzKTtcbiBcbiBcdGJvb2wgKCpoYXNfd2JpbnZkX2V4aXQpKHZvaWQpO1xuIFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RkeC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4LmhcbmluZGV4IDg5ZTk3ZDU3NjFkODllLi43OTEwOTAxYTdiYTIxYiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RkeC5oXG4rKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZHguaFxuQEAgLTM2LDYgKzM2LDcgQEBcbiAvKiBCaXQgZGVmaW5pdGlvbnMgb2YgVERYX0ZFQVRVUkVTMCBtZXRhZGF0YSBmaWVsZCAqL1xuICNkZWZpbmUgVERYX0ZFQVRVUkVTMF9URF9QUkVTRVJWSU5HXHRCSVRfVUxMKDEpXG4gI2RlZmluZSBURFhfRkVBVFVSRVMwX05PX1JCUF9NT0RcdEJJVF9VTEwoMTgpXG4rI2RlZmluZSBURFhfRkVBVFVSRVMwX0RZTkFNSUNfUEFNVFx0QklUX1VMTCgzNilcbiBcbiAjaWZuZGVmIF9fQVNTRU1CTEVSX19cbiBcbkBAIC0xMTgsMTIgKzExOSwzNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgdGR4X3N1cHBvcnRzX3J1bnRpbWVfdXBkYXRlKGNvbnN0IHN0cnVjdCB0ZHhfc3lzX2luZm8gKnN5c2luZlxuIFx0cmV0dXJuIHN5c2luZm8tXHUwMDNlZmVhdHVyZXMudGR4X2ZlYXR1cmVzMCBcdTAwMjYgVERYX0ZFQVRVUkVTMF9URF9QUkVTRVJWSU5HO1xuIH1cbiBcbitib29sIHRkeF9zdXBwb3J0c19keW5hbWljX3BhbXQoY29uc3Qgc3RydWN0IHRkeF9zeXNfaW5mbyAqc3lzaW5mbyk7XG4rXG4rLyogU2ltcGxlIHN0cnVjdHVyZSBmb3IgcHJlLWFsbG9jYXRpbmcgRHluYW1pYyBQQU1UIHBhZ2VzIG91dHNpZGUgb2Ygc3BpbmxvY2tzLiAqL1xuK3N0cnVjdCB0ZHhfcGFtdF9jYWNoZSB7XG4rXHRzdHJ1Y3QgbGlzdF9oZWFkIHBhZ2VfbGlzdDtcbitcdGludCBjbnQ7XG4rfTtcbitcbitzdGF0aWMgaW5saW5lIHZvaWQgdGR4X2luaXRfcGFtdF9jYWNoZShzdHJ1Y3QgdGR4X3BhbXRfY2FjaGUgKmNhY2hlKVxuK3tcbitcdElOSVRfTElTVF9IRUFEKFx1MDAyNmNhY2hlLVx1MDAzZXBhZ2VfbGlzdCk7XG4rXHRjYWNoZS1cdTAwM2VjbnQgPSAwO1xuK31cbitcbit2b2lkIHRkeF9mcmVlX3BhbXRfY2FjaGUoc3RydWN0IHRkeF9wYW10X2NhY2hlICpjYWNoZSk7XG4raW50IHRkeF90b3B1cF9wYW10X2NhY2hlKHN0cnVjdCB0ZHhfcGFtdF9jYWNoZSAqY2FjaGUsIHVuc2lnbmVkIGxvbmcgbnBhZ2VzKTtcbitpbnQgdGR4X3BhbXRfZ2V0KGt2bV9wZm5fdCBwZm4sIHN0cnVjdCB0ZHhfcGFtdF9jYWNoZSAqY2FjaGUpO1xuK3ZvaWQgdGR4X3BhbXRfcHV0KGt2bV9wZm5fdCBwZm4pO1xuK1xuIGludCB0ZHhfZ3Vlc3Rfa2V5aWRfYWxsb2Modm9pZCk7XG4gdTMyIHRkeF9nZXRfbnJfZ3Vlc3Rfa2V5aWRzKHZvaWQpO1xuIHZvaWQgdGR4X2d1ZXN0X2tleWlkX2ZyZWUodW5zaWduZWQgaW50IGtleWlkKTtcbiBcbiB2b2lkIHRkeF9xdWlya19yZXNldF9wYWRkcih1bnNpZ25lZCBsb25nIGJhc2UsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7XG4gXG4rLyogTnVtYmVyIG9mIFBBTVQgcGFnZXMgdG8gYmUgcHJvdmlkZWQgdG8gVERYIG1vZHVsZSBwZXIgMk1CIHJlZ2lvbiBvZiBQQSAqL1xuKyNkZWZpbmUgVERYX0RQQU1UX0VOVFJZX1BBR0VfQ05UIDJcbitcbitzdHJ1Y3QgcGFnZSAqdGR4X2FsbG9jX2NvbnRyb2xfcGFnZSh2b2lkKTtcbit2b2lkIHRkeF9mcmVlX2NvbnRyb2xfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSk7XG4rXG4gc3RydWN0IHRkeF90ZCB7XG4gXHQvKiBURCByb290IHN0cnVjdHVyZTogKi9cbiBcdHN0cnVjdCBwYWdlICp0ZHJfcGFnZTtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZHhfZ2xvYmFsX21ldGFkYXRhLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZHhfZ2xvYmFsX21ldGFkYXRhLmhcbmluZGV4IDQxMTUwZDU0NjU4OWMxLi4yYTQyNTUxZmMzM2NkNiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RkeF9nbG9iYWxfbWV0YWRhdGEuaFxuKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4X2dsb2JhbF9tZXRhZGF0YS5oXG5AQCAtMjEsNiArMjEsOSBAQCBzdHJ1Y3QgdGR4X3N5c19pbmZvX3RkbXIge1xuIFx0dTE2IHBhbXRfNGtfZW50cnlfc2l6ZTtcbiBcdHUxNiBwYW10XzJtX2VudHJ5X3NpemU7XG4gXHR1MTYgcGFtdF8xZ19lbnRyeV9zaXplO1xuK1xuK1x0LyogT3B0aW9uYWwgbWV0YWRhdGEsIGlmIER5bmFtaWMgUEFNVCBpcyBzdXBwb3J0ZWQgKi9cbitcdHU4ICBwYW10X3BhZ2VfYml0bWFwX2VudHJ5X2JpdHM7XG4gfTtcbiBcbiBzdHJ1Y3QgdGR4X3N5c19pbmZvX3RkX2N0cmwge1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9tbXUvbW11LmMgYi9hcmNoL3g4Ni9rdm0vbW11L21tdS5jXG5pbmRleCAyMzRkMGE5NWFiZjUzNC4uNmRhYjk5NjU0ZjE3MDIgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vbW11L21tdS5jXG4rKysgYi9hcmNoL3g4Ni9rdm0vbW11L21tdS5jXG5AQCAtNjE0LDYgKzYxNCwxMCBAQCBzdGF0aWMgaW50IG1tdV90b3B1cF9tZW1vcnlfY2FjaGVzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBtYXliZV9pbmRpcmVjdClcbiBcdFx0XHRcdFx0ICAgICAgIFBUNjRfUk9PVF9NQVhfTEVWRUwpO1xuIFx0XHRpZiAocilcbiBcdFx0XHRyZXR1cm4gcjtcbitcbitcdFx0ciA9IGt2bV94ODZfY2FsbCh0b3B1cF9leHRlcm5hbF9jYWNoZSkodmNwdSwgUFQ2NF9ST09UX01BWF9MRVZFTCk7XG4rXHRcdGlmIChyKVxuK1x0XHRcdHJldHVybiByO1xuIFx0fVxuIFx0ciA9IGt2bV9tbXVfdG9wdXBfbWVtb3J5X2NhY2hlKFx1MDAyNnZjcHUtXHUwMDNlYXJjaC5tbXVfc2hhZG93X3BhZ2VfY2FjaGUsXG4gXHRcdFx0XHQgICAgICAgUFQ2NF9ST09UX01BWF9MRVZFTCk7XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC90ZHguYyBiL2FyY2gveDg2L2t2bS92bXgvdGR4LmNcbmluZGV4IDU0NWIwM2Q5ZDEwYjgxLi4wOTU3MzExMjU0MGU5OCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgvdGR4LmNcbisrKyBiL2FyY2gveDg2L2t2bS92bXgvdGR4LmNcbkBAIC0zNjIsNyArMzYyLDcgQEAgc3RhdGljIHZvaWQgdGR4X3JlY2xhaW1fY29udHJvbF9wYWdlKHN0cnVjdCBwYWdlICpjdHJsX3BhZ2UpXG4gXHRpZiAodGR4X3JlY2xhaW1fcGFnZShjdHJsX3BhZ2UpKVxuIFx0XHRyZXR1cm47XG4gXG4tXHRfX2ZyZWVfcGFnZShjdHJsX3BhZ2UpO1xuK1x0dGR4X2ZyZWVfY29udHJvbF9wYWdlKGN0cmxfcGFnZSk7XG4gfVxuIFxuIHN0cnVjdCB0ZHhfZmx1c2hfdnBfYXJnIHtcbkBAIC01ODksNyArNTg5LDcgQEAgc3RhdGljIHZvaWQgdGR4X3JlY2xhaW1fdGRfY29udHJvbF9wYWdlcyhzdHJ1Y3Qga3ZtICprdm0pXG4gXG4gXHR0ZHhfcXVpcmtfcmVzZXRfcGFkZHIocGFnZV90b19waHlzKGt2bV90ZHgtXHUwMDNldGQudGRyX3BhZ2UpLCBQQUdFX1NJWkUpO1xuIFxuLVx0X19mcmVlX3BhZ2Uoa3ZtX3RkeC1cdTAwM2V0ZC50ZHJfcGFnZSk7XG4rXHR0ZHhfZnJlZV9jb250cm9sX3BhZ2Uoa3ZtX3RkeC1cdTAwM2V0ZC50ZHJfcGFnZSk7XG4gXHRrdm1fdGR4LVx1MDAzZXRkLnRkcl9wYWdlID0gTlVMTDtcbiB9XG4gXG5AQCAtNjgxLDYgKzY4MSw4IEBAIGludCB0ZHhfdmNwdV9jcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0aWYgKCFpcnFjaGlwX3NwbGl0KHZjcHUtXHUwMDNla3ZtKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4rXHR0ZHhfaW5pdF9wYW10X2NhY2hlKFx1MDAyNnRkeC1cdTAwM2VwYW10X2NhY2hlKTtcbitcbiBcdGZwc3RhdGVfc2V0X2NvbmZpZGVudGlhbChcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guZ3Vlc3RfZnB1KTtcbiBcdHZjcHUtXHUwMDNlYXJjaC5hcGljLVx1MDAzZWd1ZXN0X2FwaWNfcHJvdGVjdGVkID0gdHJ1ZTtcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNnRkeC1cdTAwM2V2dC5waV93YWtldXBfbGlzdCk7XG5AQCAtODY2LDYgKzg2OCw4IEBAIHZvaWQgdGR4X3ZjcHVfZnJlZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRzdHJ1Y3QgdmNwdV90ZHggKnRkeCA9IHRvX3RkeCh2Y3B1KTtcbiBcdGludCBpO1xuIFxuK1x0dGR4X2ZyZWVfcGFtdF9jYWNoZShcdTAwMjZ0ZHgtXHUwMDNlcGFtdF9jYWNoZSk7XG4rXG4gXHRpZiAodmNwdS1cdTAwM2VjcHUgIT0gLTEpIHtcbiBcdFx0S1ZNX0JVR19PTih0ZHgtXHUwMDNlc3RhdGUgPT0gVkNQVV9URF9TVEFURV9JTklUSUFMSVpFRCwgdmNwdS1cdTAwM2Vrdm0pO1xuIFx0XHR0ZHhfZmx1c2hfdnBfb25fY3B1KHZjcHUpO1xuQEAgLTE2MjEsNiArMTYyNSwxNyBAQCB2b2lkIHRkeF9sb2FkX21tdV9wZ2Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBocGFfdCByb290X2hwYSwgaW50IHBnZF9sZXZlbClcbiBcdHRkX3ZtY3Nfd3JpdGU2NCh0b190ZHgodmNwdSksIFNIQVJFRF9FUFRfUE9JTlRFUiwgcm9vdF9ocGEpO1xuIH1cbiBcbitzdGF0aWMgaW50IHRkeF90b3B1cF9leHRlcm5hbF9wYW10X2NhY2hlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IG1pbl9ucl9zcHRzKVxuK3tcbitcdC8qXG4rXHQgKiBNaW51cyBvbmUgcGFnZSB0byBleGNsdWRlIHRoZSByb290IFNQVCwgYnV0IHBsdXMgb25lIHBhZ2UgZm9yIGFcbitcdCAqIHBvc3NpYmxlIDRLQiBwcml2YXRlIG1hcHBpbmcuXG4rXHQgKi9cbitcdG1pbl9ucl9zcHRzICs9IC0xICsgMTtcbitcbitcdHJldHVybiB0ZHhfdG9wdXBfcGFtdF9jYWNoZShcdTAwMjZ0b190ZHgodmNwdSktXHUwMDNlcGFtdF9jYWNoZSwgbWluX25yX3NwdHMpO1xuK31cbitcbiBzdGF0aWMgaW50IHRkeF9tZW1fcGFnZV9hZGQoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4sIGVudW0gcGdfbGV2ZWwgbGV2ZWwsXG4gXHRcdFx0ICAgIGt2bV9wZm5fdCBwZm4pXG4ge1xuQEAgLTE2NzksMTYgKzE2OTQsMjggQEAgc3RhdGljIHN0cnVjdCBwYWdlICp0ZHhfc3B0ZV90b19zZXB0X3B0KHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLFxuIHN0YXRpYyBpbnQgdGR4X3NlcHRfbWFwX25vbmxlYWZfc3B0ZShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbixcbiBcdFx0XHRcdCAgICAgZW51bSBwZ19sZXZlbCBsZXZlbCwgdTY0IG5ld19zcHRlKVxuIHtcbitcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdSA9IGt2bV9nZXRfcnVubmluZ192Y3B1KCk7XG4gXHRncGFfdCBncGEgPSBnZm5fdG9fZ3BhKGdmbik7XG4gXHR1NjQgZXJyLCBlbnRyeSwgbGV2ZWxfc3RhdGU7XG4gXHRzdHJ1Y3QgcGFnZSAqc2VwdF9wdDtcbitcdGludCByZXQ7XG4rXG4rXHRpZiAoS1ZNX0JVR19PTighdmNwdSwga3ZtKSlcbitcdFx0cmV0dXJuIC1FSU87XG4gXG4gXHRzZXB0X3B0ID0gdGR4X3NwdGVfdG9fc2VwdF9wdChrdm0sIGdmbiwgbmV3X3NwdGUsIGxldmVsKTtcbiBcdGlmICghc2VwdF9wdClcbiBcdFx0cmV0dXJuIC1FSU87XG4gXG4rXHRyZXQgPSB0ZHhfcGFtdF9nZXQocGFnZV90b19wZm4oc2VwdF9wdCksIFx1MDAyNnRvX3RkeCh2Y3B1KS1cdTAwM2VwYW10X2NhY2hlKTtcbitcdGlmIChLVk1fQlVHX09OKHJldCwga3ZtKSlcbitcdFx0cmV0dXJuIHJldDtcbitcbiBcdGVyciA9IHRkaF9tZW1fc2VwdF9hZGQoXHUwMDI2dG9fa3ZtX3RkeChrdm0pLVx1MDAzZXRkLCBncGEsIGxldmVsLCBzZXB0X3B0LFxuIFx0XHRcdCAgICAgICBcdTAwMjZlbnRyeSwgXHUwMDI2bGV2ZWxfc3RhdGUpO1xuK1x0aWYgKGVycilcbitcdFx0dGR4X3BhbXRfcHV0KHBhZ2VfdG9fcGZuKHNlcHRfcHQpKTtcbitcbiBcdGlmICh1bmxpa2VseSh0ZHhfb3BlcmFuZF9idXN5KGVycikpKVxuIFx0XHRyZXR1cm4gLUVCVVNZO1xuIFxuQEAgLTE3MDEsOCArMTcyOCwxMyBAQCBzdGF0aWMgaW50IHRkeF9zZXB0X21hcF9ub25sZWFmX3NwdGUoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4sXG4gc3RhdGljIGludCB0ZHhfc2VwdF9tYXBfbGVhZl9zcHRlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLCBlbnVtIHBnX2xldmVsIGxldmVsLFxuIFx0XHRcdFx0ICB1NjQgbmV3X3NwdGUpXG4ge1xuK1x0c3RydWN0IGt2bV92Y3B1ICp2Y3B1ID0ga3ZtX2dldF9ydW5uaW5nX3ZjcHUoKTtcbiBcdHN0cnVjdCBrdm1fdGR4ICprdm1fdGR4ID0gdG9fa3ZtX3RkeChrdm0pO1xuIFx0a3ZtX3Bmbl90IHBmbiA9IHNwdGVfdG9fcGZuKG5ld19zcHRlKTtcbitcdGludCByZXQ7XG4rXG4rXHRpZiAoS1ZNX0JVR19PTighdmNwdSwga3ZtKSlcbitcdFx0cmV0dXJuIC1FSU87XG4gXG4gXHQvKiBUT0RPOiBoYW5kbGUgbGFyZ2UgcGFnZXMuICovXG4gXHRpZiAoS1ZNX0JVR19PTihsZXZlbCAhPSBQR19MRVZFTF80Sywga3ZtKSlcbkBAIC0xNzEwLDYgKzE3NDIsMTAgQEAgc3RhdGljIGludCB0ZHhfc2VwdF9tYXBfbGVhZl9zcHRlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLCBlbnVtIHBnX2xldmVsIGxldmVcbiBcbiBcdFdBUk5fT05fT05DRSgobmV3X3NwdGUgXHUwMDI2IFZNWF9FUFRfUldYX01BU0spICE9IFZNWF9FUFRfUldYX01BU0spO1xuIFxuK1x0cmV0ID0gdGR4X3BhbXRfZ2V0KHBmbiwgXHUwMDI2dG9fdGR4KHZjcHUpLVx1MDAzZXBhbXRfY2FjaGUpO1xuK1x0aWYgKEtWTV9CVUdfT04ocmV0LCBrdm0pKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuIFx0LypcbiBcdCAqIEVuc3VyZSBwcmVfZmF1bHRfYWxsb3dlZCBpcyByZWFkIGJ5IGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeSgpXG4gXHQgKiBiZWZvcmUga3ZtX3RkeC1cdTAwM2VzdGF0ZS4gIFVzZXJzcGFjZSBtdXN0IG5vdCBiZSBhbGxvd2VkIHRvIHByZS1mYXVsdFxuQEAgLTE3MjIsMTAgKzE3NTgsMTUgQEAgc3RhdGljIGludCB0ZHhfc2VwdF9tYXBfbGVhZl9zcHRlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLCBlbnVtIHBnX2xldmVsIGxldmVcbiBcdCAqIElmIHRoZSBURCBpc24ndCBmaW5hbGl6ZWQvcnVubmFibGUsIHRoZW4gdXNlcnNwYWNlIGlzIGluaXRpYWxpemluZ1xuIFx0ICogdGhlIFZNIGltYWdlIHZpYSBLVk1fVERYX0lOSVRfTUVNX1JFR0lPTjsgQUREIHRoZSBwYWdlIHRvIHRoZSBURC5cbiBcdCAqL1xuLVx0aWYgKHVubGlrZWx5KGt2bV90ZHgtXHUwMDNlc3RhdGUgIT0gVERfU1RBVEVfUlVOTkFCTEUpKVxuLVx0XHRyZXR1cm4gdGR4X21lbV9wYWdlX2FkZChrdm0sIGdmbiwgbGV2ZWwsIHBmbik7XG4rXHRpZiAobGlrZWx5KGt2bV90ZHgtXHUwMDNlc3RhdGUgPT0gVERfU1RBVEVfUlVOTkFCTEUpKVxuK1x0XHRyZXQgPSB0ZHhfbWVtX3BhZ2VfYXVnKGt2bSwgZ2ZuLCBsZXZlbCwgcGZuKTtcbitcdGVsc2VcbitcdFx0cmV0ID0gdGR4X21lbV9wYWdlX2FkZChrdm0sIGdmbiwgbGV2ZWwsIHBmbik7XG4rXG4rXHRpZiAocmV0KVxuK1x0XHR0ZHhfcGFtdF9wdXQocGZuKTtcbiBcbi1cdHJldHVybiB0ZHhfbWVtX3BhZ2VfYXVnKGt2bSwgZ2ZuLCBsZXZlbCwgcGZuKTtcbitcdHJldHVybiByZXQ7XG4gfVxuIFxuIC8qXG5AQCAtMTgyMiw2ICsxODYzLDcgQEAgc3RhdGljIGludCB0ZHhfc2VwdF9yZW1vdmVfbGVhZl9zcHRlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLFxuIFx0XHRyZXR1cm4gLUVJTztcbiBcbiBcdHRkeF9xdWlya19yZXNldF9wYWRkcihQRk5fUEhZUyhwZm4pLCBQQUdFX1NJWkUpO1xuK1x0dGR4X3BhbXRfcHV0KHBmbik7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtMTg2NSw2ICsxOTA3LDggQEAgc3RhdGljIGludCB0ZHhfc2VwdF9zZXRfcHJpdmF0ZV9zcHRlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLCB1NjQgb2xkX3NwdGUsXG4gICovXG4gc3RhdGljIHZvaWQgdGR4X3NlcHRfZnJlZV9wcml2YXRlX3NwdChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwKVxuIHtcbitcdHN0cnVjdCBwYWdlICpzZXB0X3B0ID0gdmlydF90b19wYWdlKHNwLVx1MDAzZWV4dGVybmFsX3NwdCk7XG4rXG4gXHQvKlxuIFx0ICogS1ZNIGRvZXNuJ3QgKHlldCkgemFwIHBhZ2UgdGFibGUgcGFnZXMgaW4gbWlycm9yIHBhZ2UgdGFibGUgd2hpbGVcbiBcdCAqIFREIGlzIGFjdGl2ZSwgdGhvdWdoIGd1ZXN0IHBhZ2VzIG1hcHBlZCBpbiBtaXJyb3IgcGFnZSB0YWJsZSBjb3VsZCBiZVxuQEAgLTE4NzgsMTUgKzE5MjIsMTUgQEAgc3RhdGljIHZvaWQgdGR4X3NlcHRfZnJlZV9wcml2YXRlX3NwdChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwKVxuIFx0ICogdGhlIHBhZ2UgdG8gcHJldmVudCB0aGUga2VybmVsIGZyb20gYWNjZXNzaW5nIHRoZSBlbmNyeXB0ZWQgcGFnZS5cbiBcdCAqL1xuIFx0aWYgKEtWTV9CVUdfT04oaXNfaGtpZF9hc3NpZ25lZCh0b19rdm1fdGR4KGt2bSkpLCBrdm0pIHx8XG4tXHQgICAgdGR4X3JlY2xhaW1fcGFnZSh2aXJ0X3RvX3BhZ2Uoc3AtXHUwMDNlZXh0ZXJuYWxfc3B0KSkpXG4rXHQgICAgdGR4X3JlY2xhaW1fcGFnZShzZXB0X3B0KSlcbiBcdFx0Z290byBvdXQ7XG4gXG4gXHQvKlxuLVx0ICogSW1tZWRpYXRlbHkgZnJlZSB0aGUgUy1FUFQgcGFnZSBiZWNhdXNlIFJDVS10aW1lIGZyZWUgaXMgdW5uZWNlc3Nhcnlcbi1cdCAqIGFmdGVyIFRESC5QSFlNRU0uUEFHRS5SRUNMQUlNIGVuc3VyZXMgdGhlcmUgYXJlIG5vIG91dHN0YW5kaW5nXG4tXHQgKiByZWFkZXJzLlxuK1x0ICogSW1tZWRpYXRlbHkgZnJlZSB0aGUgUy1FUFQgcGFnZSBhcyB0aGUgVERYIHN1YnN5c3RlbSBkb2Vzbid0IHN1cHBvcnRcbitcdCAqIGZyZWVpbmcgcGFnZXMgZnJvbSBSQ1UgY2FsbGJhY2tzLCBhbmQgbW9yZSBpbXBvcnRhbnRseSBiZWNhdXNlXG4rXHQgKiBUREguUEhZTUVNLlBBR0UuUkVDTEFJTSBlbnN1cmVzIHRoZXJlIGFyZSBubyBvdXRzdGFuZGluZyByZWFkZXJzLlxuIFx0ICovXG4tXHRmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpc3AtXHUwMDNlZXh0ZXJuYWxfc3B0KTtcbitcdHRkeF9mcmVlX2NvbnRyb2xfcGFnZShzZXB0X3B0KTtcbiBvdXQ6XG4gXHRzcC1cdTAwM2VleHRlcm5hbF9zcHQgPSBOVUxMO1xuIH1cbkBAIC0yNDU5LDcgKzI1MDMsNyBAQCBzdGF0aWMgaW50IF9fdGR4X3RkX2luaXQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3QgdGRfcGFyYW1zICp0ZF9wYXJhbXMsXG4gXG4gXHRyZXQgPSAtRU5PTUVNO1xuIFxuLVx0dGRyX3BhZ2UgPSBhbGxvY19wYWdlKEdGUF9LRVJORUxfQUNDT1VOVCk7XG4rXHR0ZHJfcGFnZSA9IHRkeF9hbGxvY19jb250cm9sX3BhZ2UoKTtcbiBcdGlmICghdGRyX3BhZ2UpXG4gXHRcdGdvdG8gZnJlZV9oa2lkO1xuIFxuQEAgLTI0NzIsNyArMjUxNiw3IEBAIHN0YXRpYyBpbnQgX190ZHhfdGRfaW5pdChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCB0ZF9wYXJhbXMgKnRkX3BhcmFtcyxcbiBcdFx0Z290byBmcmVlX3RkcjtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGt2bV90ZHgtXHUwMDNldGQudGRjc19ucl9wYWdlczsgaSsrKSB7XG4tXHRcdHRkY3NfcGFnZXNbaV0gPSBhbGxvY19wYWdlKEdGUF9LRVJORUxfQUNDT1VOVCk7XG4rXHRcdHRkY3NfcGFnZXNbaV0gPSB0ZHhfYWxsb2NfY29udHJvbF9wYWdlKCk7XG4gXHRcdGlmICghdGRjc19wYWdlc1tpXSlcbiBcdFx0XHRnb3RvIGZyZWVfdGRjcztcbiBcdH1cbkBAIC0yNTkwLDEwICsyNjM0LDggQEAgc3RhdGljIGludCBfX3RkeF90ZF9pbml0KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IHRkX3BhcmFtcyAqdGRfcGFyYW1zLFxuIHRlYXJkb3duOlxuIFx0LyogT25seSBmcmVlIHBhZ2VzIG5vdCB5ZXQgYWRkZWQsIHNvIHN0YXJ0IGF0ICdpJyAqL1xuIFx0Zm9yICg7IGkgXHUwMDNjIGt2bV90ZHgtXHUwMDNldGQudGRjc19ucl9wYWdlczsgaSsrKSB7XG4tXHRcdGlmICh0ZGNzX3BhZ2VzW2ldKSB7XG4tXHRcdFx0X19mcmVlX3BhZ2UodGRjc19wYWdlc1tpXSk7XG4tXHRcdFx0dGRjc19wYWdlc1tpXSA9IE5VTEw7XG4tXHRcdH1cbitcdFx0dGR4X2ZyZWVfY29udHJvbF9wYWdlKHRkY3NfcGFnZXNbaV0pO1xuK1x0XHR0ZGNzX3BhZ2VzW2ldID0gTlVMTDtcbiBcdH1cbiBcdGlmICgha3ZtX3RkeC1cdTAwM2V0ZC50ZGNzX3BhZ2VzKVxuIFx0XHRrZnJlZSh0ZGNzX3BhZ2VzKTtcbkBAIC0yNjA4LDE2ICsyNjUwLDEzIEBAIHN0YXRpYyBpbnQgX190ZHhfdGRfaW5pdChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCB0ZF9wYXJhbXMgKnRkX3BhcmFtcyxcbiBcdGZyZWVfY3B1bWFza192YXIocGFja2FnZXMpO1xuIFxuIGZyZWVfdGRjczpcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIGt2bV90ZHgtXHUwMDNldGQudGRjc19ucl9wYWdlczsgaSsrKSB7XG4tXHRcdGlmICh0ZGNzX3BhZ2VzW2ldKVxuLVx0XHRcdF9fZnJlZV9wYWdlKHRkY3NfcGFnZXNbaV0pO1xuLVx0fVxuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2Mga3ZtX3RkeC1cdTAwM2V0ZC50ZGNzX25yX3BhZ2VzOyBpKyspXG4rXHRcdHRkeF9mcmVlX2NvbnRyb2xfcGFnZSh0ZGNzX3BhZ2VzW2ldKTtcbiBcdGtmcmVlKHRkY3NfcGFnZXMpO1xuIFx0a3ZtX3RkeC1cdTAwM2V0ZC50ZGNzX3BhZ2VzID0gTlVMTDtcbiBcbiBmcmVlX3Rkcjpcbi1cdGlmICh0ZHJfcGFnZSlcbi1cdFx0X19mcmVlX3BhZ2UodGRyX3BhZ2UpO1xuK1x0dGR4X2ZyZWVfY29udHJvbF9wYWdlKHRkcl9wYWdlKTtcbiBcdGt2bV90ZHgtXHUwMDNldGQudGRyX3BhZ2UgPSBOVUxMO1xuIFxuIGZyZWVfaGtpZDpcbkBAIC0yOTUxLDcgKzI5OTAsNyBAQCBzdGF0aWMgaW50IHRkeF90ZF92Y3B1X2luaXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgdmNwdV9yY3gpXG4gXHRpbnQgcmV0LCBpO1xuIFx0dTY0IGVycjtcbiBcbi1cdHBhZ2UgPSBhbGxvY19wYWdlKEdGUF9LRVJORUxfQUNDT1VOVCk7XG4rXHRwYWdlID0gdGR4X2FsbG9jX2NvbnRyb2xfcGFnZSgpO1xuIFx0aWYgKCFwYWdlKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcdHRkeC1cdTAwM2V2cC50ZHZwcl9wYWdlID0gcGFnZTtcbkBAIC0yOTcxLDcgKzMwMTAsNyBAQCBzdGF0aWMgaW50IHRkeF90ZF92Y3B1X2luaXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgdmNwdV9yY3gpXG4gXHR9XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBrdm1fdGR4LVx1MDAzZXRkLnRkY3hfbnJfcGFnZXM7IGkrKykge1xuLVx0XHRwYWdlID0gYWxsb2NfcGFnZShHRlBfS0VSTkVMX0FDQ09VTlQpO1xuK1x0XHRwYWdlID0gdGR4X2FsbG9jX2NvbnRyb2xfcGFnZSgpO1xuIFx0XHRpZiAoIXBhZ2UpIHtcbiBcdFx0XHRyZXQgPSAtRU5PTUVNO1xuIFx0XHRcdGdvdG8gZnJlZV90ZGN4O1xuQEAgLTI5OTMsNyArMzAzMiw3IEBAIHN0YXRpYyBpbnQgdGR4X3RkX3ZjcHVfaW5pdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB2Y3B1X3JjeClcbiBcdFx0XHQgKiBtZXRob2QsIGJ1dCB0aGUgcmVzdCBhcmUgZnJlZWQgaGVyZS5cbiBcdFx0XHQgKi9cbiBcdFx0XHRmb3IgKDsgaSBcdTAwM2Mga3ZtX3RkeC1cdTAwM2V0ZC50ZGN4X25yX3BhZ2VzOyBpKyspIHtcbi1cdFx0XHRcdF9fZnJlZV9wYWdlKHRkeC1cdTAwM2V2cC50ZGN4X3BhZ2VzW2ldKTtcbitcdFx0XHRcdHRkeF9mcmVlX2NvbnRyb2xfcGFnZSh0ZHgtXHUwMDNldnAudGRjeF9wYWdlc1tpXSk7XG4gXHRcdFx0XHR0ZHgtXHUwMDNldnAudGRjeF9wYWdlc1tpXSA9IE5VTEw7XG4gXHRcdFx0fVxuIFx0XHRcdHJldHVybiAtRUlPO1xuQEAgLTMwMjEsMTYgKzMwNjAsMTQgQEAgc3RhdGljIGludCB0ZHhfdGRfdmNwdV9pbml0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHZjcHVfcmN4KVxuIFxuIGZyZWVfdGRjeDpcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGt2bV90ZHgtXHUwMDNldGQudGRjeF9ucl9wYWdlczsgaSsrKSB7XG4tXHRcdGlmICh0ZHgtXHUwMDNldnAudGRjeF9wYWdlc1tpXSlcbi1cdFx0XHRfX2ZyZWVfcGFnZSh0ZHgtXHUwMDNldnAudGRjeF9wYWdlc1tpXSk7XG4rXHRcdHRkeF9mcmVlX2NvbnRyb2xfcGFnZSh0ZHgtXHUwMDNldnAudGRjeF9wYWdlc1tpXSk7XG4gXHRcdHRkeC1cdTAwM2V2cC50ZGN4X3BhZ2VzW2ldID0gTlVMTDtcbiBcdH1cbiBcdGtmcmVlKHRkeC1cdTAwM2V2cC50ZGN4X3BhZ2VzKTtcbiBcdHRkeC1cdTAwM2V2cC50ZGN4X3BhZ2VzID0gTlVMTDtcbiBcbiBmcmVlX3RkdnByOlxuLVx0aWYgKHRkeC1cdTAwM2V2cC50ZHZwcl9wYWdlKVxuLVx0XHRfX2ZyZWVfcGFnZSh0ZHgtXHUwMDNldnAudGR2cHJfcGFnZSk7XG4rXHR0ZHhfZnJlZV9jb250cm9sX3BhZ2UodGR4LVx1MDAzZXZwLnRkdnByX3BhZ2UpO1xuIFx0dGR4LVx1MDAzZXZwLnRkdnByX3BhZ2UgPSBOVUxMO1xuIFx0dGR4LVx1MDAzZXZwLnRkdnByX3BhID0gMDtcbiBcbkBAIC0zNDkzLDYgKzM1MzAsMTAgQEAgaW50IF9faW5pdCB0ZHhfaGFyZHdhcmVfc2V0dXAodm9pZClcbiBcbiBcdHZ0X3g4Nl9vcHMuc2V0X2V4dGVybmFsX3NwdGUgPSB0ZHhfc2VwdF9zZXRfcHJpdmF0ZV9zcHRlO1xuIFx0dnRfeDg2X29wcy5mcmVlX2V4dGVybmFsX3NwdCA9IHRkeF9zZXB0X2ZyZWVfcHJpdmF0ZV9zcHQ7XG4rXG4rXHRpZiAodGR4X3N1cHBvcnRzX2R5bmFtaWNfcGFtdCh0ZHhfc3lzaW5mbykpXG4rXHRcdHZ0X3g4Nl9vcHMudG9wdXBfZXh0ZXJuYWxfY2FjaGUgPSB0ZHhfdG9wdXBfZXh0ZXJuYWxfcGFtdF9jYWNoZTtcbitcbiBcdHZ0X3g4Nl9vcHMucHJvdGVjdGVkX2FwaWNfaGFzX2ludGVycnVwdCA9IHRkeF9wcm90ZWN0ZWRfYXBpY19oYXNfaW50ZXJydXB0O1xuIFx0cmV0dXJuIDA7XG4gXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC90ZHguaCBiL2FyY2gveDg2L2t2bS92bXgvdGR4LmhcbmluZGV4IGFjODMyM2E2OGIxNjNhLi5mZDM2OGUzZWUwNjBiNiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgvdGR4LmhcbisrKyBiL2FyY2gveDg2L2t2bS92bXgvdGR4LmhcbkBAIC03Miw2ICs3Miw4IEBAIHN0cnVjdCB2Y3B1X3RkeCB7XG4gXG4gXHR1NjQgbWFwX2dwYV9uZXh0O1xuIFx0dTY0IG1hcF9ncGFfZW5kO1xuK1xuK1x0c3RydWN0IHRkeF9wYW10X2NhY2hlIHBhbXRfY2FjaGU7XG4gfTtcbiBcbiB2b2lkIHRkaF92cF9yZF9mYWlsZWQoc3RydWN0IHZjcHVfdGR4ICp0ZHgsIGNoYXIgKnVjbGFzcywgdTMyIGZpZWxkLCB1NjQgZXJyKTtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMgYi9hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmNcbmluZGV4IDQyZGY4ZWE0NjRjNDcyLi5kZWM0NTcwOWU0NTRhNiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguY1xuKysrIGIvYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jXG5AQCAtMzAsNiArMzAsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3N1c3BlbmQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3N5c2NvcmVfb3BzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pZHIuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3ZtYWxsb2MuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9wYWdlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20vc3BlY2lhbF9pbnNucy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL21zci1pbmRleC5oXHUwMDNlXG5AQCAtNDYsNiArNDcsOCBAQFxuICNpbmNsdWRlIFwic2VhbWNhbGxfaW50ZXJuYWwuaFwiXG4gI2luY2x1ZGUgXCJ0ZHguaFwiXG4gXG4rc3RhdGljIGJvb2wgdGR4X2VuYWJsZV9kcGFtdCBfX3JvX2FmdGVyX2luaXQ7XG4rXG4gc3RydWN0IHRkeF9tb2R1bGVfc3RhdGUge1xuIFx0Ym9vbCBpbml0aWFsaXplZDtcbiBcdGJvb2wgc3lzaW5pdF9kb25lO1xuQEAgLTYzLDYgKzY2LDE0IEBAIHN0YXRpYyBERUZJTkVfUEVSX0NQVShib29sLCB0ZHhfbHBfaW5pdGlhbGl6ZWQpO1xuIFxuIHN0YXRpYyBzdHJ1Y3QgdGRtcl9pbmZvX2xpc3QgdGR4X3RkbXJfbGlzdDtcbiBcbisvKlxuKyAqIE9uIGEgbWFjaGluZSB3aXRoIER5bmFtaWMgUEFNVCwgdGhlIGtlcm5lbCBtYWludGFpbnMgYSByZWZlcmVuY2UgY291bnRlclxuKyAqIGZvciBldmVyeSAyTUIgcmFuZ2UuIFRoZSBjb3VudGVyIGluZGljYXRlcyBob3cgbWFueSB1c2VycyB0aGVyZSBhcmUgZm9yXG4rICogdGhlIFBBTVQgbWVtb3J5IG9mIHRoZSAyTUIgcmFuZ2UuIFRoZSBrZXJuZWwgYWxsb2NhdGVzIFBBTVQgcmVmY291bnRzIGF0XG4rICogaW5pdGlhbGl6YXRpb24uXG4rICovXG4rc3RhdGljIGF0b21pY190ICpwYW10X3JlZmNvdW50cztcbitcbiAvKiBBbGwgVERYLXVzYWJsZSBtZW1vcnkgcmVnaW9ucy4gIFByb3RlY3RlZCBieSBtZW1faG90cGx1Z19sb2NrLiAqL1xuIHN0YXRpYyBMSVNUX0hFQUQodGR4X21lbWxpc3QpO1xuIFxuQEAgLTI1Miw2ICsyNjMsNDIgQEAgc3RhdGljIHN0cnVjdCBzeXNjb3JlIHRkeF9zeXNjb3JlID0ge1xuIFx0Lm9wcyA9IFx1MDAyNnRkeF9zeXNjb3JlX29wcyxcbiB9O1xuIFxuKy8qXG4rICogQWxsb2NhdGUgUEFNVCByZWZlcmVuY2UgY291bnRlcnMgZm9yIGFsbCBwaHlzaWNhbCBtZW1vcnkuXG4rICpcbisgKiBJdCBjb25zdW1lcyAyTUIgZm9yIGV2ZXJ5IDFUQiBvZiBwaHlzaWNhbCBtZW1vcnkuXG4rICovXG4rc3RhdGljIF9faW5pdCBpbnQgaW5pdF9wYW10X3JlZmNvdW50cyh2b2lkKVxuK3tcbitcdHNpemVfdCBzaXplID0gRElWX1JPVU5EX1VQKG1heF9wZm4sIFBUUlNfUEVSX1BURSkgKiBzaXplb2YoKnBhbXRfcmVmY291bnRzKTtcbitcbitcdGlmICghdGR4X3N1cHBvcnRzX2R5bmFtaWNfcGFtdChcdTAwMjZ0ZHhfc3lzaW5mbykpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0cGFtdF9yZWZjb3VudHMgPSB2emFsbG9jKHNpemUpO1xuK1x0aWYgKCFwYW10X3JlZmNvdW50cylcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIF9faW5pdCB2b2lkIGZyZWVfcGFtdF9yZWZjb3VudHModm9pZClcbit7XG4rXHRpZiAoIXRkeF9zdXBwb3J0c19keW5hbWljX3BhbXQoXHUwMDI2dGR4X3N5c2luZm8pKVxuK1x0XHRyZXR1cm47XG4rXG4rXHR2ZnJlZShwYW10X3JlZmNvdW50cyk7XG4rXHRwYW10X3JlZmNvdW50cyA9IE5VTEw7XG4rfVxuK1xuK3N0YXRpYyBhdG9taWNfdCAqdGR4X2ZpbmRfcGFtdF9yZWZjb3VudCh1bnNpZ25lZCBsb25nIHBmbilcbit7XG4rXHQvKiBGaW5kIHdoaWNoIFBNRCBhIFBGTiBpcyBpbi4gKi9cbitcdHVuc2lnbmVkIGxvbmcgaW5kZXggPSBwZm4gXHUwMDNlXHUwMDNlIChQTURfU0hJRlQgLSBQQUdFX1NISUZUKTtcbitcbitcdHJldHVybiBcdTAwMjZwYW10X3JlZmNvdW50c1tpbmRleF07XG4rfVxuK1xuIC8qXG4gICogQWRkIGEgbWVtb3J5IHJlZ2lvbiBhcyBhIFREWCBtZW1vcnkgYmxvY2suICBUaGUgY2FsbGVyIG11c3QgbWFrZSBzdXJlXG4gICogYWxsIG1lbW9yeSByZWdpb25zIGFyZSBhZGRlZCBpbiBhZGRyZXNzIGFzY2VuZGluZyBvcmRlciBhbmQgZG9uJ3RcbkBAIC01MTAsMzUgKzU1NywzNyBAQCBzdGF0aWMgX19pbml0IGludCBmaWxsX291dF90ZG1ycyhzdHJ1Y3QgbGlzdF9oZWFkICp0bWJfbGlzdCxcbiBcdHJldHVybiAwO1xuIH1cbiBcbitzdGF0aWMgX19pbml0IHVuc2lnbmVkIGxvbmcgdGRtcl9nZXRfcGFtdF9iaXRtYXBfc3ooc3RydWN0IHRkbXJfaW5mbyAqdGRtcilcbit7XG4rXHR1bnNpZ25lZCBsb25nIHBhbXRfc3osIG5yX3BhbXRfZW50cmllcztcbitcdGludCBiaXRzX3Blcl9lbnRyeTtcbitcbitcdGJpdHNfcGVyX2VudHJ5ID0gdGR4X3N5c2luZm8udGRtci5wYW10X3BhZ2VfYml0bWFwX2VudHJ5X2JpdHM7XG4rXHRucl9wYW10X2VudHJpZXMgPSB0ZG1yLVx1MDAzZXNpemUgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4rXHRwYW10X3N6ID0gRElWX1JPVU5EX1VQKG5yX3BhbXRfZW50cmllcyAqIGJpdHNfcGVyX2VudHJ5LCBCSVRTX1BFUl9CWVRFKTtcbitcbitcdHJldHVybiBQQUdFX0FMSUdOKHBhbXRfc3opO1xuK31cbitcbiAvKlxuICAqIENhbGN1bGF0ZSBQQU1UIHNpemUgZ2l2ZW4gYSBURE1SIGFuZCBhIHBhZ2Ugc2l6ZS4gIFRoZSByZXR1cm5lZFxuICAqIFBBTVQgc2l6ZSBpcyBhbHdheXMgYWxpZ25lZCB1cCB0byA0SyBwYWdlIGJvdW5kYXJ5LlxuICAqL1xuLXN0YXRpYyBfX2luaXQgdW5zaWduZWQgbG9uZyB0ZG1yX2dldF9wYW10X3N6KHN0cnVjdCB0ZG1yX2luZm8gKnRkbXIsIGludCBwZ3N6LFxuLVx0XHRcdFx0XHQgICAgIHUxNiBwYW10X2VudHJ5X3NpemUpXG4rc3RhdGljIF9faW5pdCB1bnNpZ25lZCBsb25nIHRkbXJfZ2V0X3BhbXRfc3ooc3RydWN0IHRkbXJfaW5mbyAqdGRtciwgaW50IHBnc3opXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBwYW10X3N6LCBucl9wYW10X2VudHJpZXM7XG4rXHRjb25zdCBpbnQgdGR4X3BnX3NpemVfc2hpZnRbVERYX1BTX05SXSA9IHsgUEFHRV9TSElGVCwgUE1EX1NISUZULCBQVURfU0hJRlQgfTtcbitcdGNvbnN0IHUxNiBwYW10X2VudHJ5X3NpemVbVERYX1BTX05SXSA9IHtcbitcdFx0dGR4X3N5c2luZm8udGRtci5wYW10XzRrX2VudHJ5X3NpemUsXG4rXHRcdHRkeF9zeXNpbmZvLnRkbXIucGFtdF8ybV9lbnRyeV9zaXplLFxuK1x0XHR0ZHhfc3lzaW5mby50ZG1yLnBhbXRfMWdfZW50cnlfc2l6ZSxcbitcdH07XG4gXG4tXHRzd2l0Y2ggKHBnc3opIHtcbi1cdGNhc2UgVERYX1BTXzRLOlxuLVx0XHRucl9wYW10X2VudHJpZXMgPSB0ZG1yLVx1MDAzZXNpemUgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4tXHRcdGJyZWFrO1xuLVx0Y2FzZSBURFhfUFNfMk06XG4tXHRcdG5yX3BhbXRfZW50cmllcyA9IHRkbXItXHUwMDNlc2l6ZSBcdTAwM2VcdTAwM2UgUE1EX1NISUZUO1xuLVx0XHRicmVhaztcbi1cdGNhc2UgVERYX1BTXzFHOlxuLVx0XHRucl9wYW10X2VudHJpZXMgPSB0ZG1yLVx1MDAzZXNpemUgXHUwMDNlXHUwMDNlIFBVRF9TSElGVDtcbi1cdFx0YnJlYWs7XG4tXHRkZWZhdWx0OlxuLVx0XHRXQVJOX09OX09OQ0UoMSk7XG4tXHRcdHJldHVybiAwO1xuLVx0fVxuK1x0bnJfcGFtdF9lbnRyaWVzID0gdGRtci1cdTAwM2VzaXplIFx1MDAzZVx1MDAzZSB0ZHhfcGdfc2l6ZV9zaGlmdFtwZ3N6XTtcbitcdHBhbXRfc3ogPSBucl9wYW10X2VudHJpZXMgKiBwYW10X2VudHJ5X3NpemVbcGdzel07XG4gXG4tXHRwYW10X3N6ID0gbnJfcGFtdF9lbnRyaWVzICogcGFtdF9lbnRyeV9zaXplO1xuIFx0LyogVERYIHJlcXVpcmVzIFBBTVQgc2l6ZSBtdXN0IGJlIDRLIGFsaWduZWQgKi9cbi1cdHBhbXRfc3ogPSBBTElHTihwYW10X3N6LCBQQUdFX1NJWkUpO1xuLVxuLVx0cmV0dXJuIHBhbXRfc3o7XG4rXHRyZXR1cm4gUEFHRV9BTElHTihwYW10X3N6KTtcbiB9XG4gXG4gLypcbkBAIC01NzYsMTUgKzYyNSwxMSBAQCBzdGF0aWMgX19pbml0IGludCB0ZG1yX2dldF9uaWQoc3RydWN0IHRkbXJfaW5mbyAqdGRtciwgc3RydWN0IGxpc3RfaGVhZCAqdG1iX2xpc1xuICAqIHdpdGhpbiBAdGRtciwgYW5kIHNldCB1cCBQQU1UcyBmb3IgQHRkbXIuXG4gICovXG4gc3RhdGljIF9faW5pdCBpbnQgdGRtcl9zZXRfdXBfcGFtdChzdHJ1Y3QgdGRtcl9pbmZvICp0ZG1yLFxuLVx0XHRcdFx0ICAgc3RydWN0IGxpc3RfaGVhZCAqdG1iX2xpc3QsXG4tXHRcdFx0XHQgICB1MTYgcGFtdF9lbnRyeV9zaXplW10pXG4rXHRcdFx0XHQgICBzdHJ1Y3QgbGlzdF9oZWFkICp0bWJfbGlzdClcbiB7XG4tXHR1bnNpZ25lZCBsb25nIHBhbXRfYmFzZVtURFhfUFNfTlJdO1xuLVx0dW5zaWduZWQgbG9uZyBwYW10X3NpemVbVERYX1BTX05SXTtcbi1cdHVuc2lnbmVkIGxvbmcgdGRtcl9wYW10X2Jhc2U7XG4gXHR1bnNpZ25lZCBsb25nIHRkbXJfcGFtdF9zaXplO1xuIFx0c3RydWN0IHBhZ2UgKnBhbXQ7XG4tXHRpbnQgcGdzeiwgbmlkO1xuK1x0aW50IG5pZDtcbiBcbiBcdG5pZCA9IHRkbXJfZ2V0X25pZCh0ZG1yLCB0bWJfbGlzdCk7XG4gXG5AQCAtNTkyLDEzICs2MzcsMTggQEAgc3RhdGljIF9faW5pdCBpbnQgdGRtcl9zZXRfdXBfcGFtdChzdHJ1Y3QgdGRtcl9pbmZvICp0ZG1yLFxuIFx0ICogQ2FsY3VsYXRlIHRoZSBQQU1UIHNpemUgZm9yIGVhY2ggVERYIHN1cHBvcnRlZCBwYWdlIHNpemVcbiBcdCAqIGFuZCB0aGUgdG90YWwgUEFNVCBzaXplLlxuIFx0ICovXG4tXHR0ZG1yX3BhbXRfc2l6ZSA9IDA7XG4tXHRmb3IgKHBnc3ogPSBURFhfUFNfNEs7IHBnc3ogXHUwMDNjIFREWF9QU19OUjsgcGdzeisrKSB7XG4tXHRcdHBhbXRfc2l6ZVtwZ3N6XSA9IHRkbXJfZ2V0X3BhbXRfc3oodGRtciwgcGdzeixcbi1cdFx0XHRcdFx0cGFtdF9lbnRyeV9zaXplW3Bnc3pdKTtcbi1cdFx0dGRtcl9wYW10X3NpemUgKz0gcGFtdF9zaXplW3Bnc3pdO1xuK1x0dGRtci1cdTAwM2VwYW10XzFnX3NpemUgPSB0ZG1yX2dldF9wYW10X3N6KHRkbXIsIFREWF9QU18xRyk7XG4rXHR0ZG1yLVx1MDAzZXBhbXRfMm1fc2l6ZSA9IHRkbXJfZ2V0X3BhbXRfc3oodGRtciwgVERYX1BTXzJNKTtcbitcbitcdGlmICh0ZHhfc3VwcG9ydHNfZHluYW1pY19wYW10KFx1MDAyNnRkeF9zeXNpbmZvKSkge1xuK1x0XHQvKiBXaXRoIER5bmFtaWMgUEFNVCwgUEFNVF80SyBpcyByZXBsYWNlZCB3aXRoIGEgYml0bWFwICovXG4rXHRcdHRkbXItXHUwMDNlcGFtdF80a19zaXplID0gdGRtcl9nZXRfcGFtdF9iaXRtYXBfc3oodGRtcik7XG4rXHR9IGVsc2Uge1xuK1x0XHR0ZG1yLVx1MDAzZXBhbXRfNGtfc2l6ZSA9IHRkbXJfZ2V0X3BhbXRfc3oodGRtciwgVERYX1BTXzRLKTtcbiBcdH1cbiBcbitcdHRkbXJfcGFtdF9zaXplID0gdGRtci1cdTAwM2VwYW10XzRrX3NpemUgKyB0ZG1yLVx1MDAzZXBhbXRfMm1fc2l6ZSArIHRkbXItXHUwMDNlcGFtdF8xZ19zaXplO1xuK1xuIFx0LypcbiBcdCAqIEFsbG9jYXRlIG9uZSBjaHVuayBvZiBwaHlzaWNhbGx5IGNvbnRpZ3VvdXMgbWVtb3J5IGZvciBhbGxcbiBcdCAqIFBBTVRzLiAgVGhpcyBoZWxwcyBtaW5pbWl6ZSB0aGUgUEFNVCdzIHVzZSBvZiByZXNlcnZlZCBhcmVhc1xuQEAgLTYwNiwyNSArNjU2LDE3IEBAIHN0YXRpYyBfX2luaXQgaW50IHRkbXJfc2V0X3VwX3BhbXQoc3RydWN0IHRkbXJfaW5mbyAqdGRtcixcbiBcdCAqL1xuIFx0cGFtdCA9IGFsbG9jX2NvbnRpZ19wYWdlcyh0ZG1yX3BhbXRfc2l6ZSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCwgR0ZQX0tFUk5FTCxcbiBcdFx0XHRuaWQsIFx1MDAyNm5vZGVfb25saW5lX21hcCk7XG4tXHRpZiAoIXBhbXQpXG4tXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuIFx0Lypcbi1cdCAqIEJyZWFrIHRoZSBjb250aWd1b3VzIGFsbG9jYXRpb24gYmFjayB1cCBpbnRvIHRoZVxuLVx0ICogaW5kaXZpZHVhbCBQQU1UcyBmb3IgZWFjaCBwYWdlIHNpemUuXG4rXHQgKiB0ZG1yLVx1MDAzZXBhbXRfNGtfYmFzZSBpcyBzdGlsbCB6ZXJvIHNvIHRoZSBlcnJvclxuK1x0ICogcGF0aCBvZiB0aGUgY2FsbGVyIHdpbGwgc2tpcCBmcmVlaW5nIHRoZSBQQU1ULlxuIFx0ICovXG4tXHR0ZG1yX3BhbXRfYmFzZSA9IHBhZ2VfdG9fcGZuKHBhbXQpIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUO1xuLVx0Zm9yIChwZ3N6ID0gVERYX1BTXzRLOyBwZ3N6IFx1MDAzYyBURFhfUFNfTlI7IHBnc3orKykge1xuLVx0XHRwYW10X2Jhc2VbcGdzel0gPSB0ZG1yX3BhbXRfYmFzZTtcbi1cdFx0dGRtcl9wYW10X2Jhc2UgKz0gcGFtdF9zaXplW3Bnc3pdO1xuLVx0fVxuK1x0aWYgKCFwYW10KVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbiBcbi1cdHRkbXItXHUwMDNlcGFtdF80a19iYXNlID0gcGFtdF9iYXNlW1REWF9QU180S107XG4tXHR0ZG1yLVx1MDAzZXBhbXRfNGtfc2l6ZSA9IHBhbXRfc2l6ZVtURFhfUFNfNEtdO1xuLVx0dGRtci1cdTAwM2VwYW10XzJtX2Jhc2UgPSBwYW10X2Jhc2VbVERYX1BTXzJNXTtcbi1cdHRkbXItXHUwMDNlcGFtdF8ybV9zaXplID0gcGFtdF9zaXplW1REWF9QU18yTV07XG4tXHR0ZG1yLVx1MDAzZXBhbXRfMWdfYmFzZSA9IHBhbXRfYmFzZVtURFhfUFNfMUddO1xuLVx0dGRtci1cdTAwM2VwYW10XzFnX3NpemUgPSBwYW10X3NpemVbVERYX1BTXzFHXTtcbitcdHRkbXItXHUwMDNlcGFtdF80a19iYXNlID0gcGFnZV90b19waHlzKHBhbXQpO1xuK1x0dGRtci1cdTAwM2VwYW10XzJtX2Jhc2UgPSB0ZG1yLVx1MDAzZXBhbXRfNGtfYmFzZSArIHRkbXItXHUwMDNlcGFtdF80a19zaXplO1xuK1x0dGRtci1cdTAwM2VwYW10XzFnX2Jhc2UgPSB0ZG1yLVx1MDAzZXBhbXRfMm1fYmFzZSArIHRkbXItXHUwMDNlcGFtdF8ybV9zaXplO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTY1NSwxMCArNjk3LDcgQEAgc3RhdGljIF9faW5pdCB2b2lkIHRkbXJfZG9fcGFtdF9mdW5jKHN0cnVjdCB0ZG1yX2luZm8gKnRkbXIsXG4gXHR0ZG1yX2dldF9wYW10KHRkbXIsIFx1MDAyNnBhbXRfYmFzZSwgXHUwMDI2cGFtdF9zaXplKTtcbiBcbiBcdC8qIERvIG5vdGhpbmcgaWYgUEFNVCBoYXNuJ3QgYmVlbiBhbGxvY2F0ZWQgZm9yIHRoaXMgVERNUiAqL1xuLVx0aWYgKCFwYW10X3NpemUpXG4tXHRcdHJldHVybjtcbi1cbi1cdGlmIChXQVJOX09OX09OQ0UoIXBhbXRfYmFzZSkpXG4rXHRpZiAoIXBhbXRfYmFzZSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0cGFtdF9mdW5jKHBhbXRfYmFzZSwgcGFtdF9zaXplKTtcbkBAIC02ODQsMTQgKzcyMywxMiBAQCBzdGF0aWMgX19pbml0IHZvaWQgdGRtcnNfZnJlZV9wYW10X2FsbChzdHJ1Y3QgdGRtcl9pbmZvX2xpc3QgKnRkbXJfbGlzdClcbiBcbiAvKiBBbGxvY2F0ZSBhbmQgc2V0IHVwIFBBTVRzIGZvciBhbGwgVERNUnMgKi9cbiBzdGF0aWMgX19pbml0IGludCB0ZG1yc19zZXRfdXBfcGFtdF9hbGwoc3RydWN0IHRkbXJfaW5mb19saXN0ICp0ZG1yX2xpc3QsXG4tXHRcdFx0XHRcdHN0cnVjdCBsaXN0X2hlYWQgKnRtYl9saXN0LFxuLVx0XHRcdFx0XHR1MTYgcGFtdF9lbnRyeV9zaXplW10pXG4rXHRcdFx0XHQgc3RydWN0IGxpc3RfaGVhZCAqdG1iX2xpc3QpXG4ge1xuIFx0aW50IGksIHJldCA9IDA7XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB0ZG1yX2xpc3QtXHUwMDNlbnJfY29uc3VtZWRfdGRtcnM7IGkrKykge1xuLVx0XHRyZXQgPSB0ZG1yX3NldF91cF9wYW10KHRkbXJfZW50cnkodGRtcl9saXN0LCBpKSwgdG1iX2xpc3QsXG4tXHRcdFx0XHRwYW10X2VudHJ5X3NpemUpO1xuK1x0XHRyZXQgPSB0ZG1yX3NldF91cF9wYW10KHRkbXJfZW50cnkodGRtcl9saXN0LCBpKSwgdG1iX2xpc3QpO1xuIFx0XHRpZiAocmV0KVxuIFx0XHRcdGdvdG8gZXJyO1xuIFx0fVxuQEAgLTk2OCwxOCArMTAwNSwxMyBAQCBzdGF0aWMgX19pbml0IGludCBjb25zdHJ1Y3RfdGRtcnMoc3RydWN0IGxpc3RfaGVhZCAqdG1iX2xpc3QsXG4gXHRcdFx0XHQgIHN0cnVjdCB0ZG1yX2luZm9fbGlzdCAqdGRtcl9saXN0LFxuIFx0XHRcdFx0ICBzdHJ1Y3QgdGR4X3N5c19pbmZvX3RkbXIgKnN5c2luZm9fdGRtcilcbiB7XG4tXHR1MTYgcGFtdF9lbnRyeV9zaXplW1REWF9QU19OUl0gPSB7XG4tXHRcdHN5c2luZm9fdGRtci1cdTAwM2VwYW10XzRrX2VudHJ5X3NpemUsXG4tXHRcdHN5c2luZm9fdGRtci1cdTAwM2VwYW10XzJtX2VudHJ5X3NpemUsXG4tXHRcdHN5c2luZm9fdGRtci1cdTAwM2VwYW10XzFnX2VudHJ5X3NpemUsXG4tXHR9O1xuIFx0aW50IHJldDtcbiBcbiBcdHJldCA9IGZpbGxfb3V0X3RkbXJzKHRtYl9saXN0LCB0ZG1yX2xpc3QpO1xuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbi1cdHJldCA9IHRkbXJzX3NldF91cF9wYW10X2FsbCh0ZG1yX2xpc3QsIHRtYl9saXN0LCBwYW10X2VudHJ5X3NpemUpO1xuK1x0cmV0ID0gdGRtcnNfc2V0X3VwX3BhbXRfYWxsKHRkbXJfbGlzdCwgdG1iX2xpc3QpO1xuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbkBAIC05OTgsNiArMTAzMCw4IEBAIHN0YXRpYyBfX2luaXQgaW50IGNvbnN0cnVjdF90ZG1ycyhzdHJ1Y3QgbGlzdF9oZWFkICp0bWJfbGlzdCxcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuKyNkZWZpbmUgVERYX1NZU19DT05GSUdfRFlOQU1JQ19QQU1UXHRCSVQoMTYpXG4rXG4gc3RhdGljIF9faW5pdCBpbnQgY29uZmlnX3RkeF9tb2R1bGUoc3RydWN0IHRkbXJfaW5mb19saXN0ICp0ZG1yX2xpc3QsXG4gXHRcdFx0XHQgICAgdTY0IGdsb2JhbF9rZXlpZClcbiB7XG5AQCAtMTAyNiw2ICsxMDYwLDEyIEBAIHN0YXRpYyBfX2luaXQgaW50IGNvbmZpZ190ZHhfbW9kdWxlKHN0cnVjdCB0ZG1yX2luZm9fbGlzdCAqdGRtcl9saXN0LFxuIFx0YXJncy5yY3ggPSBfX3BhKHRkbXJfcGFfYXJyYXkpO1xuIFx0YXJncy5yZHggPSB0ZG1yX2xpc3QtXHUwMDNlbnJfY29uc3VtZWRfdGRtcnM7XG4gXHRhcmdzLnI4ID0gZ2xvYmFsX2tleWlkO1xuK1xuK1x0aWYgKHRkeF9zdXBwb3J0c19keW5hbWljX3BhbXQoXHUwMDI2dGR4X3N5c2luZm8pKSB7XG4rXHRcdHByX2luZm8oXCJFbmFibGUgRHluYW1pYyBQQU1UXFxuXCIpO1xuK1x0XHRhcmdzLnI4IHw9IFREWF9TWVNfQ09ORklHX0RZTkFNSUNfUEFNVDtcbitcdH1cbitcbiBcdHJldCA9IHNlYW1jYWxsX3ByZXJyKFRESF9TWVNfQ09ORklHLCBcdTAwMjZhcmdzKTtcbiBcbiBcdC8qIEZyZWUgdGhlIGFycmF5IGFzIGl0IGlzIG5vdCByZXF1aXJlZCBhbnltb3JlLiAqL1xuQEAgLTExNjcsMTAgKzEyMDcsMTQgQEAgc3RhdGljIF9faW5pdCBpbnQgaW5pdF90ZHhfbW9kdWxlKHZvaWQpXG4gXHQgKi9cbiBcdGdldF9vbmxpbmVfbWVtcygpO1xuIFxuLVx0cmV0ID0gYnVpbGRfdGR4X21lbWxpc3QoXHUwMDI2dGR4X21lbWxpc3QpO1xuK1x0cmV0ID0gaW5pdF9wYW10X3JlZmNvdW50cygpO1xuIFx0aWYgKHJldClcbiBcdFx0Z290byBvdXRfcHV0X3RkeG1lbTtcbiBcbitcdHJldCA9IGJ1aWxkX3RkeF9tZW1saXN0KFx1MDAyNnRkeF9tZW1saXN0KTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gZXJyX2ZyZWVfcGFtdF9yZWZjb3VudHM7XG4rXG4gXHQvKiBBbGxvY2F0ZSBlbm91Z2ggc3BhY2UgZm9yIGNvbnN0cnVjdGluZyBURE1ScyAqL1xuIFx0cmV0ID0gYWxsb2NfdGRtcl9saXN0KFx1MDAyNnRkeF90ZG1yX2xpc3QsIFx1MDAyNnRkeF9zeXNpbmZvLnRkbXIpO1xuIFx0aWYgKHJldClcbkBAIC0xMjIwLDYgKzEyNjQsOCBAQCBzdGF0aWMgX19pbml0IGludCBpbml0X3RkeF9tb2R1bGUodm9pZClcbiBcdGZyZWVfdGRtcl9saXN0KFx1MDAyNnRkeF90ZG1yX2xpc3QpO1xuIGVycl9mcmVlX3RkeG1lbTpcbiBcdGZyZWVfdGR4X21lbWxpc3QoXHUwMDI2dGR4X21lbWxpc3QpO1xuK2Vycl9mcmVlX3BhbXRfcmVmY291bnRzOlxuK1x0ZnJlZV9wYW10X3JlZmNvdW50cygpO1xuIFx0Z290byBvdXRfcHV0X3RkeG1lbTtcbiB9XG4gXG5AQCAtMjAwMyw2ICsyMDQ5LDI4OCBAQCB1NjQgdGRoX3BoeW1lbV9wYWdlX3diaW52ZF9oa2lkKHU2NCBoa2lkLCBrdm1fcGZuX3QgcGZuKVxuIH1cbiBFWFBPUlRfU1lNQk9MX0ZPUl9LVk0odGRoX3BoeW1lbV9wYWdlX3diaW52ZF9oa2lkKTtcbiBcbitib29sIHRkeF9zdXBwb3J0c19keW5hbWljX3BhbXQoY29uc3Qgc3RydWN0IHRkeF9zeXNfaW5mbyAqc3lzaW5mbylcbit7XG4rXHRyZXR1cm4gc3lzaW5mby1cdTAwM2VmZWF0dXJlcy50ZHhfZmVhdHVyZXMwIFx1MDAyNiBURFhfRkVBVFVSRVMwX0RZTkFNSUNfUEFNVCBcdTAwMjZcdTAwMjZcbitcdCAgICAgICB0ZHhfZW5hYmxlX2RwYW10O1xuK31cbitFWFBPUlRfU1lNQk9MX0ZPUl9LVk0odGR4X3N1cHBvcnRzX2R5bmFtaWNfcGFtdCk7XG4rXG4rc3RhdGljIHN0cnVjdCBwYWdlICp0ZHhfYWxsb2NfcGFnZV9wYW10X2NhY2hlKHN0cnVjdCB0ZHhfcGFtdF9jYWNoZSAqY2FjaGUpXG4re1xuK1x0c3RydWN0IHBhZ2UgKnBhZ2U7XG4rXG4rXHRwYWdlID0gbGlzdF9maXJzdF9lbnRyeV9vcl9udWxsKFx1MDAyNmNhY2hlLVx1MDAzZXBhZ2VfbGlzdCwgc3RydWN0IHBhZ2UsIGxydSk7XG4rXHRpZiAocGFnZSkge1xuK1x0XHRsaXN0X2RlbChcdTAwMjZwYWdlLVx1MDAzZWxydSk7XG4rXHRcdGNhY2hlLVx1MDAzZWNudC0tO1xuK1x0fVxuK1xuK1x0cmV0dXJuIHBhZ2U7XG4rfVxuK1xuK3N0YXRpYyBzdHJ1Y3QgcGFnZSAqYWxsb2NfZHBhbXRfcGFnZShzdHJ1Y3QgdGR4X3BhbXRfY2FjaGUgKmNhY2hlKVxuK3tcbitcdGlmIChjYWNoZSlcbitcdFx0cmV0dXJuIHRkeF9hbGxvY19wYWdlX3BhbXRfY2FjaGUoY2FjaGUpO1xuK1xuK1x0cmV0dXJuIGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbit9XG4rXG4rc3RhdGljIGludCBhbGxvY19wYW10X2FycmF5KHN0cnVjdCBwYWdlICoqcGFtdF9wYWdlcywgc3RydWN0IHRkeF9wYW10X2NhY2hlICpjYWNoZSlcbit7XG4rXHRpbnQgaSwgajtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIFREWF9EUEFNVF9FTlRSWV9QQUdFX0NOVDsgaSsrKSB7XG4rXHRcdHBhbXRfcGFnZXNbaV0gPSBhbGxvY19kcGFtdF9wYWdlKGNhY2hlKTtcbitcdFx0aWYgKCFwYW10X3BhZ2VzW2ldKVxuK1x0XHRcdGdvdG8gZXJyO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rXG4rZXJyOlxuK1x0Zm9yIChqID0gMDsgaiBcdTAwM2MgaTsgaisrKVxuK1x0XHRfX2ZyZWVfcGFnZShwYW10X3BhZ2VzW2pdKTtcbitcbitcdHJldHVybiAtRU5PTUVNO1xuK31cbitcbitzdGF0aWMgdm9pZCBmcmVlX3BhbXRfYXJyYXkoc3RydWN0IHBhZ2UgKipwYW10X3BhZ2VzKVxuK3tcbitcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyBURFhfRFBBTVRfRU5UUllfUEFHRV9DTlQ7IGkrKykge1xuK1x0XHQvKlxuK1x0XHQgKiBSZXNldCBwYWdlcyB1bmNvbmRpdGlvbmFsbHkgdG8gY292ZXIgY2FzZXNcbitcdFx0ICogd2hlcmUgdGhleSB3ZXJlIHBhc3NlZCB0byB0aGUgVERYIG1vZHVsZS5cbitcdFx0ICovXG4rXHRcdHRkeF9xdWlya19yZXNldF9wYWRkcihwYWdlX3RvX3BoeXMocGFtdF9wYWdlc1tpXSksIFBBR0VfU0laRSk7XG4rXG4rXHRcdF9fZnJlZV9wYWdlKHBhbXRfcGFnZXNbaV0pO1xuK1x0fVxuK31cbitcbisvKlxuKyAqIENhbGN1bGF0ZSB0aGUgYXJnIG5lZWRlZCBmb3Igb3BlcmF0aW5nIG9uIHRoZSBEUEFNVCBiYWNraW5nIGZvclxuKyAqIGEgZ2l2ZW4gNEtCIHBhZ2UuXG4rICovXG4rc3RhdGljIHU2NCBwYW10XzJtYl9hcmcoa3ZtX3Bmbl90IHBmbilcbit7XG4rXHQvKiBBcmcgdmFsdWUgd2lsbCBzcGVjaWZ5IGEgMk1CIHJlZ2lvbiBvZiBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlLiAqL1xuK1x0dW5zaWduZWQgbG9uZyBocGFfMm1iID0gQUxJR05fRE9XTihwZm4gXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQsIFBNRF9TSVpFKTtcbitcbitcdHJldHVybiBocGFfMm1iIHwgVERYX1BTXzJNO1xuK31cbitcbisvKiBBZGQgUEFNVCBiYWNraW5nIGZvciB0aGUgMk1CIHJlZ2lvbiBzdXJyb3VuZGluZyB0aGUgZ2l2ZW4gcGZuLiAqL1xuK3N0YXRpYyB1NjQgdGRoX3BoeW1lbV9wYW10X2FkZChrdm1fcGZuX3QgcGZuLCBzdHJ1Y3QgcGFnZSAqKnBhbXRfcGFnZXMpXG4re1xuK1x0c3RydWN0IHRkeF9tb2R1bGVfYXJncyBhcmdzID0ge1xuK1x0XHQucmN4ID0gcGFtdF8ybWJfYXJnKHBmbiksXG4rXHRcdC5yZHggPSBwYWdlX3RvX3BoeXMocGFtdF9wYWdlc1swXSksXG4rXHRcdC5yOCA9IHBhZ2VfdG9fcGh5cyhwYW10X3BhZ2VzWzFdKSxcbitcdH07XG4rXG4rXHRyZXR1cm4gc2VhbWNhbGwoVERIX1BIWU1FTV9QQU1UX0FERCwgXHUwMDI2YXJncyk7XG4rfVxuK1xuKy8qIFJlbW92ZSBQQU1UIGJhY2tpbmcgZm9yIHRoZSAyTUIgcmVnaW9uIHN1cnJvdW5kaW5nIHRoZSBnaXZlbiBwZm4uICovXG4rc3RhdGljIHU2NCB0ZGhfcGh5bWVtX3BhbXRfcmVtb3ZlKGt2bV9wZm5fdCBwZm4sIHN0cnVjdCBwYWdlICoqcGFtdF9wYWdlcylcbit7XG4rXHRzdHJ1Y3QgdGR4X21vZHVsZV9hcmdzIGFyZ3MgPSB7XG4rXHRcdC5yY3ggPSBwYW10XzJtYl9hcmcocGZuKSxcbitcdH07XG4rXHR1NjQgcmV0O1xuK1xuK1x0cmV0ID0gc2VhbWNhbGxfcmV0KFRESF9QSFlNRU1fUEFNVF9SRU1PVkUsIFx1MDAyNmFyZ3MpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdC8qIENvcHkgUEFNVCBwYWdlcyBvdXQgb2YgdGhlIHN0cnVjdCBwZXIgdGhlIFREWCBBQkkgKi9cbitcdHBhbXRfcGFnZXNbMF0gPSBwaHlzX3RvX3BhZ2UoYXJncy5yZHgpO1xuK1x0cGFtdF9wYWdlc1sxXSA9IHBoeXNfdG9fcGFnZShhcmdzLnI4KTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbisvKiBTZXJpYWxpemVzIGFkZGluZy9yZW1vdmluZyBQQU1UIG1lbW9yeSAqL1xuK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0socGFtdF9sb2NrKTtcbitcbisvKiBCdW1wIFBBTVQgcmVmY291bnQgZm9yIHRoZSBnaXZlbiBwZm4gYW5kIGFsbG9jYXRlIFBBTVQgYmFja2luZyBpZiBuZWVkZWQuICovXG4raW50IHRkeF9wYW10X2dldChrdm1fcGZuX3QgcGZuLCBzdHJ1Y3QgdGR4X3BhbXRfY2FjaGUgKmNhY2hlKVxuK3tcbitcdHN0cnVjdCBwYWdlICpwYW10X3BhZ2VzW1REWF9EUEFNVF9FTlRSWV9QQUdFX0NOVF07XG4rXHRhdG9taWNfdCAqcGFtdF9yZWZjb3VudDtcbitcdHU2NCB0ZHhfc3RhdHVzO1xuK1x0aW50IHJldDtcbitcbitcdGlmICghdGR4X3N1cHBvcnRzX2R5bmFtaWNfcGFtdChcdTAwMjZ0ZHhfc3lzaW5mbykpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0cGFtdF9yZWZjb3VudCA9IHRkeF9maW5kX3BhbXRfcmVmY291bnQocGZuKTtcbitcbitcdC8qXG4rXHQgKiBJZiB0aGUgcGFtdCBwYWdlIGlzIGFscmVhZHkgYWRkZWQgKGkuZS4gcmVmY291bnQgXHUwMDNlPSAxKSxcbitcdCAqIHRoZW4ganVzdCBpbmNyZW1lbnQgdGhlIHJlZmNvdW50LlxuK1x0ICovXG4rXHRpZiAoYXRvbWljX2luY19ub3RfemVybyhwYW10X3JlZmNvdW50KSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRyZXQgPSBhbGxvY19wYW10X2FycmF5KHBhbXRfcGFnZXMsIGNhY2hlKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRzcGluX2xvY2soXHUwMDI2cGFtdF9sb2NrKTtcbitcbitcdC8qXG4rXHQgKiBVbmxpa2UgdGR4X3BhbXRfcHV0KCkgd2hpY2ggdXNlcyBhdG9taWNfZGVjX2FuZF9sb2NrKCkgdG9cbitcdCAqIGF0b21pY2FsbHkgaGFuZGxlIHRoZSAxLVx1MDAzZTAgdHJhbnNpdGlvbiwgdGhlIGdldCBzaWRlIGhhcyBub1xuK1x0ICogZXF1aXZhbGVudCBjb21iaW5lZCBwcmltaXRpdmUgZm9yIDAtXHUwMDNlMS4gUmVjaGVjayB1bmRlciB0aGVcbitcdCAqIGxvY2sgc2luY2UgYW5vdGhlciBnZXQgbWF5IGhhdmUgYWxyZWFkeSBkb25lIHRoZSAwLVx1MDAzZTFcbitcdCAqIHRyYW5zaXRpb24gYWZ0ZXIgYm90aCBzYXcgYXRvbWljX2luY19ub3RfemVybygpIGZhaWwuXG4rXHQgKi9cbitcdGlmIChhdG9taWNfaW5jX25vdF96ZXJvKHBhbXRfcmVmY291bnQpKVxuK1x0XHRnb3RvIG91dF9mcmVlO1xuK1xuK1x0dGR4X3N0YXR1cyA9IHRkaF9waHltZW1fcGFtdF9hZGQocGZuLCBwYW10X3BhZ2VzKTtcbitcdGlmIChXQVJOX09OX09OQ0UodGR4X3N0YXR1cyAhPSBURFhfU1VDQ0VTUykpIHtcbitcdFx0cmV0ID0gLUVJTztcbitcdFx0Z290byBvdXRfZnJlZTtcbitcdH1cbitcbitcdC8qXG4rXHQgKiBUaGUgcmVmY291bnQgaXMgemVybywgYW5kIHRoaXMgbG9ja2VkIHBhdGggaXMgdGhlXG4rXHQgKiBvbmx5IHdheSB0byBpbmNyZWFzZSBpdCBmcm9tIDAtXHUwMDNlMS5cbitcdCAqL1xuK1x0YXRvbWljX3NldChwYW10X3JlZmNvdW50LCAxKTtcbitcdHNwaW5fdW5sb2NrKFx1MDAyNnBhbXRfbG9jayk7XG4rXHRyZXR1cm4gMDtcbitcbitvdXRfZnJlZTpcbitcdHNwaW5fdW5sb2NrKFx1MDAyNnBhbXRfbG9jayk7XG4rXHRmcmVlX3BhbXRfYXJyYXkocGFtdF9wYWdlcyk7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitFWFBPUlRfU1lNQk9MX0ZPUl9LVk0odGR4X3BhbXRfZ2V0KTtcbitcbisvKiBEcm9wIFBBTVQgcmVmY291bnQgZm9yIHRoZSBnaXZlbiBwZm4gYW5kIGZyZWUgUEFNVCBiYWNraW5nIGlmIG5lZWRlZC4gKi9cbit2b2lkIHRkeF9wYW10X3B1dChrdm1fcGZuX3QgcGZuKVxuK3tcbitcdHN0cnVjdCBwYWdlICpwYW10X3BhZ2VzW1REWF9EUEFNVF9FTlRSWV9QQUdFX0NOVF0gPSB7fTtcbitcdGF0b21pY190ICpwYW10X3JlZmNvdW50O1xuK1x0dTY0IHRkeF9zdGF0dXM7XG4rXG4rXHRpZiAoIXRkeF9zdXBwb3J0c19keW5hbWljX3BhbXQoXHUwMDI2dGR4X3N5c2luZm8pKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRwYW10X3JlZmNvdW50ID0gdGR4X2ZpbmRfcGFtdF9yZWZjb3VudChwZm4pO1xuK1xuK1x0LypcbitcdCAqIElmIHRoZXJlIGlzIG1vcmUgdGhhbiAxIHJlZmVyZW5jZSBvbiB0aGUgcGFtdCBwYWdlLCBkb24ndFxuK1x0ICogcmVtb3ZlIGl0IHlldC4gSnVzdCBkZWNyZW1lbnQgdGhlIHJlZmNvdW50LlxuK1x0ICovXG4rXHRpZiAoIWF0b21pY19kZWNfYW5kX2xvY2socGFtdF9yZWZjb3VudCwgXHUwMDI2cGFtdF9sb2NrKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0dGR4X3N0YXR1cyA9IHRkaF9waHltZW1fcGFtdF9yZW1vdmUocGZuLCBwYW10X3BhZ2VzKTtcbitcbitcdC8qXG4rXHQgKiBEb24ndCBmcmVlIHBhbXRfcGFnZXMgYXMgaXQgY291bGQgaG9sZCBnYXJiYWdlIHdoZW5cbitcdCAqIHRkaF9waHltZW1fcGFtdF9yZW1vdmUoKSBmYWlscy4gIERvbid0IHBhbmljL0JVR19PTigpLCBhc1xuK1x0ICogdGhlcmUgaXMgbm8gcmlzayBvZiBkYXRhIGNvcnJ1cHRpb24sIGJ1dCBkbyB5ZWxsIGxvdWRseSBhc1xuK1x0ICogZmFpbHVyZSBpbmRpY2F0ZXMgYSBrZXJuZWwgYnVnLCBtZW1vcnkgaXMgYmVpbmcgbGVha2VkLCBhbmRcbitcdCAqIHRoZSBkYW5nbGluZyBQQU1UIGVudHJ5IG1heSBjYXVzZSBmdXR1cmUgb3BlcmF0aW9ucyB0byBmYWlsLlxuK1x0ICovXG4rXHRpZiAoV0FSTl9PTl9PTkNFKHRkeF9zdGF0dXMgIT0gVERYX1NVQ0NFU1MpKSB7XG4rXHRcdC8qXG4rXHRcdCAqIGF0b21pY19kZWNfYW5kX2xvY2soKSBhbHJlYWR5IGRlY3JlbWVudGVkIGl0IHRvIDAsXG4rXHRcdCAqIGJ1dCB0aGUgUEFNVCBlbnRyeSBzdGlsbCBleGlzdHMgc2luY2UgUkVNT1ZFIGZhaWxlZC5cbitcdFx0ICovXG4rXHRcdGF0b21pY19zZXQocGFtdF9yZWZjb3VudCwgMSk7XG4rXHRcdGdvdG8gb3V0X3VubG9jaztcbitcdH1cbitcbitcdHNwaW5fdW5sb2NrKFx1MDAyNnBhbXRfbG9jayk7XG4rXHRmcmVlX3BhbXRfYXJyYXkocGFtdF9wYWdlcyk7XG4rXHRyZXR1cm47XG4rb3V0X3VubG9jazpcbitcdHNwaW5fdW5sb2NrKFx1MDAyNnBhbXRfbG9jayk7XG4rfVxuK0VYUE9SVF9TWU1CT0xfRk9SX0tWTSh0ZHhfcGFtdF9wdXQpO1xuK1xuK3ZvaWQgdGR4X2ZyZWVfcGFtdF9jYWNoZShzdHJ1Y3QgdGR4X3BhbXRfY2FjaGUgKmNhY2hlKVxuK3tcbitcdHN0cnVjdCBwYWdlICpwYWdlO1xuK1xuK1x0d2hpbGUgKChwYWdlID0gdGR4X2FsbG9jX3BhZ2VfcGFtdF9jYWNoZShjYWNoZSkpKVxuK1x0XHRfX2ZyZWVfcGFnZShwYWdlKTtcbit9XG4rRVhQT1JUX1NZTUJPTF9GT1JfS1ZNKHRkeF9mcmVlX3BhbXRfY2FjaGUpO1xuK1xuK2ludCB0ZHhfdG9wdXBfcGFtdF9jYWNoZShzdHJ1Y3QgdGR4X3BhbXRfY2FjaGUgKmNhY2hlLCB1bnNpZ25lZCBsb25nIG5wYWdlcylcbit7XG4rXHRpZiAoV0FSTl9PTl9PTkNFKCF0ZHhfc3VwcG9ydHNfZHluYW1pY19wYW10KFx1MDAyNnRkeF9zeXNpbmZvKSkpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0bnBhZ2VzICo9IFREWF9EUEFNVF9FTlRSWV9QQUdFX0NOVDtcbitcbitcdHdoaWxlIChjYWNoZS1cdTAwM2VjbnQgXHUwMDNjIG5wYWdlcykge1xuK1x0XHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbitcbitcdFx0aWYgKCFwYWdlKVxuK1x0XHRcdHJldHVybiAtRU5PTUVNO1xuK1xuK1x0XHRsaXN0X2FkZChcdTAwMjZwYWdlLVx1MDAzZWxydSwgXHUwMDI2Y2FjaGUtXHUwMDNlcGFnZV9saXN0KTtcbitcdFx0Y2FjaGUtXHUwMDNlY250Kys7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rRVhQT1JUX1NZTUJPTF9GT1JfS1ZNKHRkeF90b3B1cF9wYW10X2NhY2hlKTtcbitcbisvKlxuKyAqIFJldHVybiBhIHBhZ2UgdGhhdCBjYW4gYmUgZ2lmdGVkIHRvIHRoZSBURFgtTW9kdWxlIGZvciB1c2UgYXMgYSBcImNvbnRyb2xcIlxuKyAqIHBhZ2UsIGkuZS4gcGFnZXMgdGhhdCBhcmUgdXNlZCBmb3IgY29udHJvbCBzdHJ1Y3R1cmVzIGZvciBhIGdpdmVuIFREWFxuKyAqIGd1ZXN0LCBhbmQgdGh1cyBvYnRhaW4gVERYIHByb3RlY3Rpb25zLCBpbmNsdWRpbmcgUEFNVCB0cmFja2luZy5cbisgKi9cbitzdHJ1Y3QgcGFnZSAqdGR4X2FsbG9jX2NvbnRyb2xfcGFnZSh2b2lkKVxuK3tcbitcdHN0cnVjdCBwYWdlICpwYWdlO1xuK1xuK1x0cGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbitcdGlmICghcGFnZSlcbitcdFx0cmV0dXJuIE5VTEw7XG4rXG4rXHRpZiAodGR4X3BhbXRfZ2V0KHBhZ2VfdG9fcGZuKHBhZ2UpLCBOVUxMKSkge1xuK1x0XHRfX2ZyZWVfcGFnZShwYWdlKTtcbitcdFx0cmV0dXJuIE5VTEw7XG4rXHR9XG4rXG4rXHRyZXR1cm4gcGFnZTtcbit9XG4rRVhQT1JUX1NZTUJPTF9GT1JfS1ZNKHRkeF9hbGxvY19jb250cm9sX3BhZ2UpO1xuK1xuKy8qXG4rICogRnJlZSBhIHBhZ2UgdGhhdCB3YXMgZ2lmdGVkIHRvIHRoZSBURFgtTW9kdWxlIGZvciB1c2UgYXMgYSBjb250cm9sXG4rICogcGFnZS4gQWZ0ZXIgdGhpcywgdGhlIHBhZ2UgaXMgbm8gbG9uZ2VyIHByb3RlY3RlZCBieSBURFguXG4rICovXG4rdm9pZCB0ZHhfZnJlZV9jb250cm9sX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpXG4re1xuK1x0aWYgKCFwYWdlKVxuK1x0XHRyZXR1cm47XG4rXG4rXHR0ZHhfcGFtdF9wdXQocGFnZV90b19wZm4ocGFnZSkpO1xuK1x0X19mcmVlX3BhZ2UocGFnZSk7XG4rfVxuK0VYUE9SVF9TWU1CT0xfRk9SX0tWTSh0ZHhfZnJlZV9jb250cm9sX3BhZ2UpO1xuK1xuK3N0YXRpYyBpbnQgX19pbml0IHRkeF9kcGFtdF9zZXR1cChjaGFyICpzdHIpXG4re1xuK1x0cmV0dXJuIGtzdHJ0b2Jvb2woc3RyLCBcdTAwMjZ0ZHhfZW5hYmxlX2RwYW10KSA9PSAwO1xuK31cbitcbitfX3NldHVwKFwidGR4X2RwYW10PVwiLCB0ZHhfZHBhbXRfc2V0dXApO1xuK1xuIHZvaWQgdGR4X3N5c19kaXNhYmxlKHZvaWQpXG4ge1xuIFx0c3RydWN0IHRkeF9tb2R1bGVfYXJncyBhcmdzID0ge307XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5oIGIvYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5oXG5pbmRleCBiZGZkMGUxZTMzN2FjMC4uYTg4NmM1NGRlY2FhZGMgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmhcbisrKyBiL2FyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguaFxuQEAgLTQ4LDYgKzQ4LDggQEBcbiAjZGVmaW5lIFRESF9TWVNfQ09ORklHXHRcdFx0NDVcbiAjZGVmaW5lIFRESF9TWVNfU0hVVERPV05cdFx0NTJcbiAjZGVmaW5lIFRESF9TWVNfVVBEQVRFXHRcdFx0NTNcbisjZGVmaW5lIFRESF9QSFlNRU1fUEFNVF9BRERcdFx0NThcbisjZGVmaW5lIFRESF9QSFlNRU1fUEFNVF9SRU1PVkVcdFx0NTlcbiAjZGVmaW5lIFRESF9TWVNfRElTQUJMRVx0XHRcdDY5XG4gXG4gLypcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4X2dsb2JhbF9tZXRhZGF0YS5jIGIvYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeF9nbG9iYWxfbWV0YWRhdGEuY1xuaW5kZXggZTQ5YzMwMGYyM2Q0MzUuLjgzOTNkMmFhNTlkYmU3IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeF9nbG9iYWxfbWV0YWRhdGEuY1xuKysrIGIvYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeF9nbG9iYWxfbWV0YWRhdGEuY1xuQEAgLTEsNiArMSw2IEBAXG4gLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAvKlxuLSAqIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZ1bmN0aW9ucyB0byByZWFkIFREWCBnbG9iYWwgbWV0YWRhdGEuXG4rICogRnVuY3Rpb25zIHRvIHJlYWQgVERYIGdsb2JhbCBtZXRhZGF0YS5cbiAgKlxuICAqIFRoaXMgZmlsZSBkb2Vzbid0IGNvbXBpbGUgb24gaXRzIG93biBhcyBpdCBsYWNrcyBvZiBpbmNsdXNpb25cbiAgKiBvZiBTRUFNQ0FMTCB3cmFwcGVyIHByaW1pdGl2ZSB3aGljaCByZWFkcyBnbG9iYWwgbWV0YWRhdGEuXG5AQCAtMzMsNiArMzMsMTggQEAgc3RhdGljIF9faW5pdCBpbnQgZ2V0X3RkeF9zeXNfaW5mb19mZWF0dXJlcyhzdHJ1Y3QgdGR4X3N5c19pbmZvX2ZlYXR1cmVzICpzeXNpbmZcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuK3N0YXRpYyBfX2luaXQgaW50IGdldF90ZHhfc3lzX2luZm9fdGRtcl9kcGFtdChzdHJ1Y3QgdGR4X3N5c19pbmZvX3RkbXIgKnN5c2luZm9fdGRtcilcbit7XG4rXHRpbnQgcmV0O1xuK1x0dTY0IHZhbDtcbitcbitcdHJldCA9IHJlYWRfc3lzX21ldGFkYXRhX2ZpZWxkKDB4OTEwMDAwMDEwMDAwMDAxMywgXHUwMDI2dmFsKTtcbitcdGlmICghcmV0KVxuK1x0XHRzeXNpbmZvX3RkbXItXHUwMDNlcGFtdF9wYWdlX2JpdG1hcF9lbnRyeV9iaXRzID0gdmFsO1xuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4gc3RhdGljIF9faW5pdCBpbnQgZ2V0X3RkeF9zeXNfaW5mb190ZG1yKHN0cnVjdCB0ZHhfc3lzX2luZm9fdGRtciAqc3lzaW5mb190ZG1yKVxuIHtcbiBcdGludCByZXQgPSAwO1xuQEAgLTEyOSw1ICsxNDEsMTQgQEAgc3RhdGljIF9faW5pdCBpbnQgZ2V0X3RkeF9zeXNfaW5mbyhzdHJ1Y3QgdGR4X3N5c19pbmZvICpzeXNpbmZvKVxuIFx0cmV0ID0gcmV0ID86IGdldF90ZHhfc3lzX2luZm9fdGRfY3RybChcdTAwMjZzeXNpbmZvLVx1MDAzZXRkX2N0cmwpO1xuIFx0cmV0ID0gcmV0ID86IGdldF90ZHhfc3lzX2luZm9fdGRfY29uZihcdTAwMjZzeXNpbmZvLVx1MDAzZXRkX2NvbmYpO1xuIFxuK1x0LypcbitcdCAqIFRoZSBrZXJuZWwgc3VwcG9ydHMgdXNpbmcgVERYIHdpdGhvdXQgRHluYW1pYyBQQU1ULCBzb1xuK1x0ICogYXZvaWQgcmVwb3J0aW5nIGZhaWx1cmUgaWYgaXQncyBub3Qgc3VwcG9ydGVkLiBEb24ndCB0cnlcbitcdCAqIHRvIHN1cHBvcnQgYnVnZ3kgVERYIG1vZHVsZXMgdGhhdCBhZHZlcnRpc2UgRHluYW1pYyBQQU1UXG4rXHQgKiBidXQgZG9uJ3QgZXhwb3NlIHRoZSBtZXRhZGF0YS5cbitcdCAqL1xuK1x0aWYgKCFyZXQgXHUwMDI2XHUwMDI2IHRkeF9zdXBwb3J0c19keW5hbWljX3BhbXQoc3lzaW5mbykpXG4rXHRcdHJldCA9IGdldF90ZHhfc3lzX2luZm9fdGRtcl9kcGFtdChcdTAwMjZzeXNpbmZvLVx1MDAzZXRkbXIpO1xuK1xuIFx0cmV0dXJuIHJldDtcbiB9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxMDo1NToyMy4wNDE3NDQwNzNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTcwNjA3NjA3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEeW5hbWljIFBBTVQgU3VwcG9ydCBmb3IgVERYIGluIEtWTSAtIFJlYWNoYWJpbGl0eSBBbmFseXNpcyoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggaW50cm9kdWNpbmcgXCJEeW5hbWljIFBBTVRcIiBmb3IgSW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgaW4gS1ZNL3g4Ni4gSXQncyBhIHNpZ25pZmljYW50IGNoYW5nZSwgdG91Y2hpbmcgYSBsb3Qgb2YgY29yZSBmaWxlczogZG9jdW1lbnRhdGlvbiwgaGVhZGVycywgYW5kIHNldmVyYWwgS1ZNIG1vZHVsZXMgKG1tdSwgdm14LCBURFggc3BlY2lmaWMgY29kZSwgZXRjLikuIEl0IGxvb2tzIGxpa2UgaXQgYWRkcyBhIG5ldyBrZXJuZWwgcGFyYW1ldGVyLCBgdGR4X2RwYW10YCwgYW5kIGEgc3VpdGUgb2YgbmV3IGZ1bmN0aW9ucyByZWxhdGVkIHRvIFBBTVQgY2FjaGUgbWFuYWdlbWVudCAoYHRkeF9wYW10X2dldGAsIGB0ZHhfcGFtdF9wdXRgLCBgdGR4X3RvcHVwX3BhbXRfY2FjaGVgLCBldGMuKS4gVGhlIE1NVSBpcyBhbHNvIGJlaW5nIHVwZGF0ZWQgdG8gY2FsbCBgdGR4X3RvcHVwX2V4dGVybmFsX3BhbXRfY2FjaGVgLiBUaGlzIGlzIGFsbCBwcmV0dHkgc3Vic3RhbnRpYWwuXG5cblRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gaXM6IElzIHRoaXMgY29kZSBwYXRoIGV2ZW4gKnJlYWNoYWJsZSogaW4gYSBzdGFuZGFyZCBlbnZpcm9ubWVudCwgZXNwZWNpYWxseSB3aGVuIGNvbnNpZGVyaW5nIHRoZSBjb250ZXh0IHByb3ZpZGVkPyBURFgsIGFzIEkgdW5kZXJzdGFuZCBpdCwgcmVsaWVzIG9uIHNwZWNpZmljIEludGVsIGhhcmR3YXJlLiBJdCdzIGEgdmlydHVhbGl6YXRpb24gZmVhdHVyZSwgc28gSSBuZWVkIHRvIHRoaW5rIGFib3V0IGhvdyB0aGlzIGludGVyYWN0cyB3aXRoIFFFTVUgYW5kIG90aGVyIGVudmlyb25tZW50cy4gU3RhbmRhcmQgUUVNVSBkb2Vzbid0IGVtdWxhdGUgVERYIGhhcmR3YXJlIG5hdGl2ZWx5IHdpdGhvdXQgS1ZNIFREWCBzdXBwb3J0LCBhbmQgZXZlbiB0aGVuLCBpdCBkZXBlbmRzIG9uIGFjdHVhbCBURFggaGFyZHdhcmUgdG8gcnVuIFREWCBndWVzdHMuXG5cbkJ1dCwgYW5kIHRoaXMgaXMgaW1wb3J0YW50LCBTeXprYWxsZXIgaGVhdmlseSBmdXp6ZXogS1ZNLiBBbmQgS1ZNIFREWCBzdXBwb3J0ICppcyogYmVpbmcgdXBzdHJlYW1lZC4gU28sIHRoZSBuZXh0IHRob3VnaHQgaXM6IElzIFN5emthbGxlciBmdXp6aW5nIFREWD8gSSBuZWVkIHRvIGNoZWNrLiBFdmVuIGlmIFN5emthbGxlciBpcyBmdXp6aW5nIEtWTSwgaXQgd2lsbCBwcm9iYWJseSBkZXBlbmQgb24gVERYIGhhcmR3YXJlIHNldHVwIHRvIGFjdHVhbGx5IGVuYWJsZSBURFguIFRoaXMgd291bGQgbGlrZWx5IGNhdXNlIGB0ZHhfaGFyZHdhcmVfc2V0dXBgIHRvIGZhaWwgb3IganVzdCBub3QgZW5hYmxlIFREWC5cblxuVGhlbiwgdGhlcmUncyB0aGUgR0NFIChHb29nbGUgQ29tcHV0ZSBFbmdpbmUpIGZhY3Rvci4gU3l6a2FsbGVyIHJ1bnMgb24gR0NFLCBhbmQgR0NFICpkb2VzKiBoYXZlIFREWCBpbnN0YW5jZXMgKHNwZWNpZmljYWxseSwgQzMgaW5zdGFuY2VzKS4gQnV0IGRvZXMgU3l6a2FsbGVyIGFjdHVhbGx5ICp1c2UqIHRob3NlIFREWCBpbnN0YW5jZXM/IEkgbmVlZCB0byB2ZXJpZnkgdGhhdC4gSSBuZWVkIHRvIGNoZWNrIGlmIHRoaXMgY29kZSBwYXRoIGlzIGFjdHVhbGx5IHJlYWNoYWJsZSB3aXRoaW4gU3l6a2FsbGVyJ3Mgc2V0dXAuXG5cbklmIFREWCBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBDUFUsIGB0ZHhfaGFyZHdhcmVfc2V0dXBgIHdpbGwgbm90IGVuYWJsZSBpdCwgc28gaWYgbXkgdGFyZ2V0IGhhcmR3YXJlIGRvZXNuJ3Qgc3VwcG9ydCBURFgsIEkgY2FuIGRpc3JlZ2FyZCB0aGlzLiBUaGlzIG1heSBiZSB0aGUga2V5LlxuXG5Ob3csIHRoZSBwcm9tcHQgc3BlY2lmaWNhbGx5IG1lbnRpb25zIGNvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSBpZiB0aGUgaGFyZHdhcmUgaXMgbm90IGF2YWlsYWJsZS4gVGhlbiBpdCBvZmZlcnMgZXhhbXBsZXMsIGxpa2UgdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIFREWCBmYWxscyBpbnRvIHRoaXMgY2F0ZWdvcnkuXG5cblREWCBpcyBhICpDUFUqIGZlYXR1cmUsIG5vdCBhIFBDSWUgY2FyZCwgc28gdGhhdCBleGFtcGxlIGRvZXNuJ3QgcXVpdGUgYXBwbHkuIEhvd2V2ZXIsIGl0IHN0aWxsIGRlcGVuZHMgb24gdGhlIENQVSBoYXZpbmcgVERYIGNhcGFiaWxpdHkuIFNvLCB0aGlzIGNvbWVzIGJhY2sgdG8gbXkgcHJldmlvdXMgcG9pbnRzLiBMZXQncyBjaGVjayBpZiB0aGlzIHNwZWNpZmljIGltcGxlbWVudGF0aW9uICh1c2luZyB0aGUgYHRkeF9oYXJkd2FyZV9zZXR1cGAgcGF0aCkgaXMgY29uc2lkZXJlZCByZWFjaGFibGUuXG5cbkknbGwgc2VhcmNoIGZvciBgdGR4X2hhcmR3YXJlX3NldHVwYCBvciBgdGR4X2luaXRfbW9kdWxlYC4gVGhhdCBzaG91bGQgdGVsbCBtZSBpZiB3ZSBzaG91bGQgY29uc2lkZXIgaXQgcmVhY2hhYmxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzIzNSwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkzMywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDEwOjU1OjM0Ljc0NzgyMjc0MVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjg0NDk5NTM2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRkeF9oYXJkd2FyZV9zZXR1cFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vdm14L21haW4uYz0yND1zdGF0aWMgX19pbml0IGludCB2dF9oYXJkd2FyZV9zZXR1cCh2b2lkKVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMzEtXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6MzI6XFx0cmV0dXJuIGVuYWJsZV90ZHggPyB0ZHhfaGFyZHdhcmVfc2V0dXAoKSA6IDA7XFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMzMtfVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYz0zMzk0PXZvaWQgdGR4X2hhcmR3YXJlX3Vuc2V0dXAodm9pZClcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMzM5OC1cXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jOjMzOTk6c3RhdGljIGludCBfX2luaXQgX190ZHhfaGFyZHdhcmVfc2V0dXAodm9pZClcXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTM0MDAte1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0zNDcyLVxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmM6MzQ3MzppbnQgX19pbml0IHRkeF9oYXJkd2FyZV9zZXR1cCh2b2lkKVxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMzQ3NC17XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTM1MDgtXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYzozNTA5OlxcdHIgPSBfX3RkeF9oYXJkd2FyZV9zZXR1cCgpO1xcbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMzUxMC1cXHRpZiAocikge1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguaC05LVxcbmFyY2gveDg2L2t2bS92bXgvdGR4Lmg6MTA6aW50IHRkeF9oYXJkd2FyZV9zZXR1cCh2b2lkKTtcXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5oLTExLXZvaWQgdGR4X2hhcmR3YXJlX3Vuc2V0dXAodm9pZCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDEwOjU1OjM3LjQzMjMyNzcyN1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5MDgwMTM3MDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBURFggSGFyZHdhcmUgU2V0dXAqKlxuXG5Pa2F5LCBsZXQncyB0cmFjZSB0aGlzIHRocm91Z2guIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBleGVjdXRpb24gZmxvdywgZXNwZWNpYWxseSBhcm91bmQgdGhlIFREWCBoYXJkd2FyZSBjb25maWd1cmF0aW9uLiBUaGUgY3J1Y2lhbCBmdW5jdGlvbiBzZWVtcyB0byBiZSBgdGR4X2hhcmR3YXJlX3NldHVwYC4gSSBzZWUgaXQncyBkZWZpbml0ZWx5IGJlaW5nIGNhbGxlZCwgZ29vZC4gYHZ0X2hhcmR3YXJlX3NldHVwYCBjYWxscyBpdCwgd2hpY2ggZ2l2ZXMgbWUgYSBzdGFydGluZyBwb2ludC4gTm93LCBhIGNyaXRpY2FsIHF1ZXN0aW9uIGlzIHRoZSBpbml0aWFsIHN0YXRlOiBpcyBgZW5hYmxlX3RkeGAgc2V0IHRvIHRydWUgYnkgZGVmYXVsdD8gVGhhdCdzIHdoYXQgSSByZWFsbHkgbmVlZCB0byBrbm93IHRvIHVuZGVyc3RhbmQgdGhlIHN5c3RlbSdzIGJhc2VsaW5lIGJlaGF2aW9yLiBJIG5lZWQgdG8gY29uZmlybSBpdHMgZGVmYXVsdCB2YWx1ZS4gS25vd2luZyB0aGUgZGVmYXVsdCB2YWx1ZSBvZiBgZW5hYmxlX3RkeGAgd2lsbCBzaWduaWZpY2FudGx5IGlsbHVtaW5hdGUgdGhlIHVzdWFsIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb24gcHJvZmlsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTkzNjIsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxMDo1NTo0MC4zNDAzNDUzNloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTg2NDA3NDQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImVuYWJsZV90ZHhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9MTY9c3RhdGljIHZvaWQgdnRfZGlzYWJsZV92aXJ0dWFsaXphdGlvbl9jcHUodm9pZClcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTE4LVxcdC8qIE5vdGUsIFREWCAqYW5kKiBWTVggbmVlZCB0byBiZSBkaXNhYmxlZCBpZiBURFggaXMgZW5hYmxlZC4gKi9cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzoxOTpcXHRpZiAoZW5hYmxlX3RkeClcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0yMC1cXHRcXHR0ZHhfZGlzYWJsZV92aXJ0dWFsaXphdGlvbl9jcHUoKTtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTI0PXN0YXRpYyBfX2luaXQgaW50IHZ0X2hhcmR3YXJlX3NldHVwKHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0zMS1cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzozMjpcXHRyZXR1cm4gZW5hYmxlX3RkeCA/IHRkeF9oYXJkd2FyZV9zZXR1cCgpIDogMDtcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0zMy19XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz0zNT1zdGF0aWMgdm9pZCB2dF9oYXJkd2FyZV91bnNldHVwKHZvaWQpXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMzYte1xcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjM3OlxcdGlmIChlbmFibGVfdGR4KVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTM4LVxcdFxcdHRkeF9oYXJkd2FyZV91bnNldHVwKCk7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz0xMDUwPXN0YXRpYyBpbnQgX19pbml0IHZ0X2luaXQodm9pZClcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTEwNjUtXFx0dmNwdV9hbGlnbiA9IF9fYWxpZ25vZl9fKHN0cnVjdCB2Y3B1X3ZteCk7XFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6MTA2NjpcXHRpZiAoZW5hYmxlX3RkeCkge1xcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTEwNjctXFx0XFx0dmNwdV9zaXplID0gbWF4X3QodW5zaWduZWQsIHZjcHVfc2l6ZSxcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtNTUtXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYzo1Njpib29sIGVuYWJsZV90ZHggX19yb19hZnRlcl9pbml0O1xcbmFyY2gveDg2L2t2bS92bXgvdGR4LmM6NTc6bW9kdWxlX3BhcmFtX25hbWVkKHRkeCwgZW5hYmxlX3RkeCwgYm9vbCwgMDQ0NCk7XFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy01OC1cXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmM9MzQ3Mz1pbnQgX19pbml0IHRkeF9oYXJkd2FyZV9zZXR1cCh2b2lkKVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0zNDgwLVxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmM6MzQ4MTpcXHRpZiAoIWVuYWJsZV90ZHgpXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0zNDgyLVxcdFxcdHJldHVybiAwO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0zNTQwLXN1Y2Nlc3NfZGlzYWJsZV90ZHg6XFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYzozNTQxOlxcdGVuYWJsZV90ZHggPSAwO1xcbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMzU0Mi1cXHRyZXR1cm4gMDtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdGR4Lmg9MTE9dm9pZCB0ZHhfaGFyZHdhcmVfdW5zZXR1cCh2b2lkKTtcXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5oLTEyLVxcbmFyY2gveDg2L2t2bS92bXgvdGR4Lmg6MTM6ZXh0ZXJuIGJvb2wgZW5hYmxlX3RkeDtcXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5oLTE0LVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguaD0xODc9VERYX0JVSUxEX1REVlBTX0FDQ0VTU09SUyg2NCwgU1RBVEVfTk9OX0FSQ0gsIHN0YXRlX25vbl9hcmNoKTtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmgtMTg5LSNlbHNlXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguaDoxOTA6I2RlZmluZSBlbmFibGVfdGR4XFx0MFxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmgtMTkxLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxMDo1NTo0Mi4zMjY3NTg3NzdaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NDgxMDAwMjE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlREWCBGdXp6aW5nIEZlYXNpYmlsaXR5IC0gQSBRdWljayBBdWRpdCoqXG5cbk9rYXksIHNvIGBlbmFibGVfdGR4YCBtYXBzIHRvIGBrdm1faW50ZWwudGR4YCwgdGhhdCdzIHN0cmFpZ2h0Zm9yd2FyZC4gVGhlIHF1ZXN0aW9uIGlzOiBjYW4gd2UgKmFjdHVhbGx5KiBmdXp6IFREWD8gSSBrbm93IGZyb20gZXhwZXJpZW5jZSB0aGF0IFREWCByZXF1aXJlcyBzcGVjaWZpYyBoYXJkd2FyZSBzdXBwb3J0LiBTdGFuZGFyZCBTeXprYWxsZXIgR0NFIGluc3RhbmNlcyBhcmVuJ3QgbGlrZWx5IHRvIGhhdmUgdGhhdCB1bmxlc3Mgc29tZW9uZSBzcGVjaWZpY2FsbHkgc2V0IHRoZW0gdXAuIEFuZCwgc2luY2UgUUVNVSBkb2Vzbid0IGVtdWxhdGUgVERYIG5hdGl2ZWx5LCB0aGF0J3MgYW5vdGhlciBodXJkbGUuXG5cbkJ1dCBoYW5nIG9u4oCmIGlmIFN5emthbGxlciAqd2FzKiBydW5uaW5nIG9uIFREWCBoYXJkd2FyZSAoaGlnaGx5IHVubGlrZWx5LCBidXQgcG9zc2libGUpLCB0aGVuIG1heWJlPyBBaCwgcmlnaHQsIHRoZSBwcm9tcHQgc2F5cyB0byBpZ25vcmUgdGhpbmdzIHRoYXQgYXJlIHVucmVhY2hhYmxlIGluIHZpcnR1YWxpemF0aW9uLCB3aGljaCB3b3VsZCBpbmNsdWRlIGVtdWxhdGVkIGhhcmR3YXJlLiBTbywgaXMgVERYIG9uZSBvZiB0aG9zZSDigJxpbXBvc3NpYmxl4oCdIGNhc2VzIGluIEdDRSBvciBRRU1VP1xuXG5Ib2xkIG9uLi4uIEknbSBnZXR0aW5nIGFoZWFkIG9mIG15c2VsZiwgR0NFICpkb2VzKiBvZmZlciBURFggaW5zdGFuY2VzIChDMyBzZXJpZXMhKSwgYW5kIFFFTVUvS1ZNICpkb2VzKiBzdXBwb3J0IFREWC4gU28sIG15IGluaXRpYWwgYXNzdW1wdGlvbiB3YXMgd3JvbmchIE9rYXksIHRoZSBwbG90IHRoaWNrZW5zLiBOb3csIGRvZXMgKnRoaXMgc3BlY2lmaWMgcGF0Y2gqIGFjdHVhbGx5IGludHJvZHVjZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzLCBhbnl0aGluZyB3b3J0aCBmdXp6aW5nPyBZZXMsIGl0J3MgYWJvdXQgRHluYW1pYyBQQU1UIHN1cHBvcnQuIFNvIGlzIGl0IHJlYWNoYWJsZT9cblxuSWYgaXQncyByZWFjaGFibGUsIGl0J3Mgd29ydGggZnV6emluZy4gVG8gZmlndXJlIG91dCByZWFjaGFiaWxpdHksIEkgbmVlZCB0byBjaGVjayBgdGR4X3N1cHBvcnRzX2R5bmFtaWNfcGFtdGAsIHdoaWNoIGRlcGVuZHMgb24gYHRkeF9lbmFibGVfZHBhbXRgLiBBaCwgYW5kICp0aGF0KiBwYXJhbWV0ZXIgaXMgY29udHJvbGxlZCBieSBgdGR4X2RwYW10PW9uYCBrZXJuZWwgcGFyYW1ldGVyLiBCdXQgdGhlIHByb21wdCBpcyBhc2tpbmcgZm9yIGBFbmFibGVDb25maWdzYCBub3Qga2VybmVsIHBhcmFtZXRlcnMuIFdhaXQsIHRoYXQncyBLY29uZmlnISBJIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgZm9yIFREWCByZWxhdGVkIG9wdGlvbnMgbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDY0NCwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxMDo1NTo0OC44MDc3NjA4MzZaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIwNDU4MTM2NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSU5URUxfVERYX0hPU1RcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvS2NvbmZpZz0xODQ0PWNvbmZpZyBYODZfVVNFUl9TSEFET1dfU1RBQ0tcXG4tLVxcbmFyY2gveDg2L0tjb25maWctMTg2My1cXG5hcmNoL3g4Ni9LY29uZmlnOjE4NjQ6Y29uZmlnIElOVEVMX1REWF9IT1NUXFxuYXJjaC94ODYvS2NvbmZpZy0xODY1LVxcdGJvb2wgXFxcIkludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIGhvc3Qgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTA6NTU6NTEuMDEyMzQ3MDczWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzEyNjg2MjY4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQXNzZXNzaW5nIElOVEVMX1REWF9IT1NUIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHRpbWUgdG8gZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiTGV0J3MgbWFrZSBzdXJlIHRoZSBgSU5URUxfVERYX0hPU1RgIGRlcGVuZGVuY2llcyBhcmUgYWxsIHNxdWFyZWQgYXdheS5cIiBJJ20gbWVudGFsbHkgcnVubmluZyB0aHJvdWdoIHRoZSBwcm9iYWJsZSBsaXN0OiB0aGUgaHlwZXJ2aXNvciwgdGhlIGZpcm13YXJlLCB0aGUgc3BlY2lmaWMgQ1BVIG1pY3JvY29kZSByZXZpc2lvbiwgbGlrZWx5IGNlcnRhaW4ga2VybmVsIHZlcnNpb25zLi4uIEknbSBsb29raW5nIGZvciBhbnkgb2J2aW91cyByZWQgZmxhZ3MsIGtub3duIGluY29tcGF0aWJpbGl0aWVzLCBvciBvdmVybG9va2VkIHByZXJlcXVpc2l0ZXMgdGhhdCBjb3VsZCB0cmlwIHVzIHVwIGxhdGVyLiBJIG5lZWQgdG8gYmUgbWV0aG9kaWNhbCBoZXJlOyBtaXNzaW5nIGV2ZW4gYSBzZWVtaW5nbHkgbWlub3IgZGVwZW5kZW5jeSBjYW4gbGVhZCB0byBvYnNjdXJlIGFuZCBmcnVzdHJhdGluZyBkZWJ1Z2dpbmcgZG93biB0aGUgbGluZSwgcGFydGljdWxhcmx5IHdpdGggc29tZXRoaW5nIGFzIGNvbXBsZXggYXMgVERYLiBCZXN0IHRvIGdldCB0aGlzIGZvdW5kYXRpb25hbCBzdHVmZiB2YWxpZGF0ZWQgZWFybHkuIExldCdzIHNlZSB3aGF0IHRoZSBkb2N1bWVudGF0aW9uIHN1Z2dlc3RzIGFuZCBjcm9zcy1yZWZlcmVuY2UgdGhhdCB3aXRoIHRoZSBjdXJyZW50IHBsYXRmb3JtIGNvbmZpZ3VyYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNTAwLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTA6NTU6NTQuMTM5MjEzNDA2WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MTI0MzcxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSU5URUxfVERYX0hPU1RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9LY29uZmlnPTE4NDQ9Y29uZmlnIFg4Nl9VU0VSX1NIQURPV19TVEFDS1xcbi0tXFxuYXJjaC94ODYvS2NvbmZpZy0xODYzLVxcbmFyY2gveDg2L0tjb25maWc6MTg2NDpjb25maWcgSU5URUxfVERYX0hPU1RcXG5hcmNoL3g4Ni9LY29uZmlnLTE4NjUtXFx0Ym9vbCBcXFwiSW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgaG9zdCBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxMDo1NTo1NC4yMjA0NjI1OTdaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc0MTgzODQ4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBhcyBpZiB0aGV5J3JlIG15IG93bjpcblxuKipBbmFseXppbmcgdGhlIEtjb25maWcgZm9yIElOVEVMX1REWF9IT1NUKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgaW50byB0aGUgZGV0YWlscy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHB1bGwgdXAgdGhlIEtjb25maWcgZmlsZSBmb3IgYElOVEVMX1REWF9IT1NUYC4gSSBuZWVkIGEgY2xlYXIgdW5kZXJzdGFuZGluZyBvZiB3aGF04oCZcyBnb2luZyBvbiB3aXRoIHRoaXMgY29uZmlndXJhdGlvbiBvcHRpb24uIEtub3dpbmcgdGhpcyBpcyB0aGUgZm91bmRhdGlvbiBmb3IgZXZlcnl0aGluZyBlbHNlLCBzbyBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSB3YW50IHRvIHNlZSB0aGUgZGVwZW5kZW5jaWVzLCB0aGUgZGVmYXVsdHMsIHRoZSBoZWxwIHRleHQg4oCTIHRoZSB3aG9sZSBzaGViYW5nLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIGxvZ2ljIG9mIHRoZSBmZWF0dXJlIGxpdmVzIGFuZCB0aGlzIGNvbmZpZyBpcyBrZXkgZm9yIGFueXRoaW5nIHJlbGF0ZWQgdG8gSW50ZWwgVERYIGhvc3QgZnVuY3Rpb25hbGl0eSwgSSBuZWVkIHRvIGtub3cgd2hlcmUgaXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIHBpY3R1cmUuIExldOKAmXMgZ2V0IHRvIHJlYWRpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxODM2LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTA6NTU6NTcuOTYyMzA0MDVaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDEzMzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTg2MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTg2MDpcXHRcXHQgIFNlZSBEb2N1bWVudGF0aW9uL2FyY2gveDg2L3Noc3RrLnJzdCBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cXG4xODYxOlxcdFxcbjE4NjI6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbjE4NjM6XFx0XFxuMTg2NDpcXHRjb25maWcgSU5URUxfVERYX0hPU1RcXG4xODY1OlxcdFxcdGJvb2wgXFxcIkludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIGhvc3Qgc3VwcG9ydFxcXCJcXG4xODY2OlxcdFxcdGRlcGVuZHMgb24gQ1BVX1NVUF9JTlRFTFxcbjE4Njc6XFx0XFx0ZGVwZW5kcyBvbiBYODZfNjRcXG4xODY4OlxcdFxcdGRlcGVuZHMgb24gS1ZNX0lOVEVMXFxuMTg2OTpcXHRcXHRkZXBlbmRzIG9uIFg4Nl9YMkFQSUNcXG4xODcwOlxcdFxcdHNlbGVjdCBBUkNIX0tFRVBfTUVNQkxPQ0tcXG4xODcxOlxcdFxcdGRlcGVuZHMgb24gQ09OVElHX0FMTE9DXFxuMTg3MjpcXHRcXHRkZXBlbmRzIG9uIFg4Nl9NQ0VcXG4xODczOlxcdFxcdGhlbHBcXG4xODc0OlxcdFxcdCAgSW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgcHJvdGVjdHMgZ3Vlc3QgVk1zIGZyb20gbWFsaWNpb3VzXFxuMTg3NTpcXHRcXHQgIGhvc3QgYW5kIGNlcnRhaW4gcGh5c2ljYWwgYXR0YWNrcy4gIFRoaXMgb3B0aW9uIGVuYWJsZXMgbmVjZXNzYXJ5IFREWFxcbjE4NzY6XFx0XFx0ICBzdXBwb3J0IGluIHRoZSBob3N0IGtlcm5lbCB0byBydW4gY29uZmlkZW50aWFsIFZNcy5cXG4xODc3OlxcdFxcbjE4Nzg6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbjE4Nzk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDEwOjU1OjU3Ljk2MjcyMDI0WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwOTAwNzg5NDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCBmcmFtZWQgYXMgbXkgaW50ZXJuYWwgdGhvdWdodCBwcm9jZXNzOlxuXG4qKlREWCBDb25maWd1cmF0aW9uIElucXVpcnkqKlxuXG5SaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBhbmQgaXQgc2VlbXMgYElOVEVMX1REWF9IT1NUYCBpcyB0aGUga2V5IGNvbmZpZ3VyYXRpb24gc2V0dGluZyBoZXJlLiBCdXQsIGhhbmcgb24gYSBzZWNvbmQuLi4gaXMgdGhlcmUgZXZlbiBhIEtWTS1zcGVjaWZpYyBjb25maWd1cmF0aW9uIGZvciBURFg/IEkgbmVlZCB0byBjbGFyaWZ5IGlmIHRoaXMgaXMganVzdCBhIGdlbmVyYWwgc2V0dGluZyBvciBpZiBpdCBuZWVkcyB0byBiZSBpbnRlZ3JhdGVkIGludG8gdGhlIEtWTSBlbnZpcm9ubWVudC4gSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIHRoZSBLVk0gZG9jdW1lbnRhdGlvbiB0byBzZWUgaWYgdGhlcmUncyBhIGRlZGljYXRlZCBzZXR0aW5nIGZvciBURFggdW5kZXIgdGhlIGhvb2QsIG9yIGlmIHRoaXMgZ2VuZXJhbCBzZXR0aW5nIGlzIHN1ZmZpY2llbnQgZm9yIGVuYWJsaW5nIHRoZSBmZWF0dXJlIGluIHRoYXQgY29udGV4dC4gVGhpcyBpcyBzb21ldGhpbmcgSSBuZWVkIHRvIGZ1bGx5IHVuZGVyc3RhbmQgYmVmb3JlIEkgcHJvY2VlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIzNjMsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDEwOjU2OjAxLjA1MjgwMzc0OVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI2OTMzMDgxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgS1ZNX0lOVEVMX1REWFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZz0xMjI9Y29uZmlnIFg4Nl9TR1hfS1ZNXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzMtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTM0OmNvbmZpZyBLVk1fSU5URUxfVERYXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTM1LVxcdGJvb2wgXFxcIkludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDEwOjU2OjAzLjMyMjE0MTM5OVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjY5NTE4MTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0aGUgbWF0dGVyLCBzdW1tYXJpemVkIGFzIHJlcXVlc3RlZDpcblxuKipLVk0gQ29uZmlndXJhdGlvbiBEZWVwIERpdmUqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBLVk0gY29uZmlndXJhdGlvbiBhbmQgd2hhdCdzIGdvaW5nIG9uIGF0IGxpbmUgMTM0IGluIGBhcmNoL3g4Ni9rdm0vS2NvbmZpZ2AuIExldCBtZSBwdWxsIHVwIHRoYXQgZmlsZS4uLiByaWdodCwgdGhlIEtjb25maWcgZmlsZSBmb3IgdGhlIHg4NiBLVk0gYXJjaGl0ZWN0dXJlLiBJ4oCZbSBndWVzc2luZyBpdCdzIHNvbWUgc29ydCBvZiBmZWF0dXJlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIG9yIGEgZGVwZW5kZW5jeSBjaGVjay4gSSBuZWVkIHRvIGJlIHN1cmUgSSB1bmRlcnN0YW5kIGl0cyBpbXBsaWNhdGlvbnMuIEknbGwgbmVlZCB0byByZW1lbWJlciB0byBjcm9zcy1yZWZlcmVuY2UgdGhpcyB3aXRoIHJlbGV2YW50IGNvZGUgaW4gdGhlIGBrdm1gIGRpcmVjdG9yeSBhbmQgdW5kZXJzdGFuZCBob3cgdGhlIHBhcnRpY3VsYXIgY29uZmlnIGludGVyYWN0cyB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBoeXBlcnZpc29yLiBUaGlzIGlzIGhvdyBJIGJ1aWxkIGEgY29tcHJlaGVuc2l2ZSBwaWN0dXJlLiBUaW1lIHRvIGdldCBzdGFydGVkIVxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjY3NiwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDEwOjU2OjA2LjU5MTY2MjE4OFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDg2MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTMwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTMwOlxcdFxcdCAgZ3Vlc3RzIHZpYSBhIGRldmljZSBub2RlLCBlLmcuIC9kZXYvc2d4X3ZlcGMuXFxuIDEzMTpcXHRcXG4gMTMyOlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gMTMzOlxcdFxcbiAxMzQ6XFx0Y29uZmlnIEtWTV9JTlRFTF9URFhcXG4gMTM1OlxcdFxcdGJvb2wgXFxcIkludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIHN1cHBvcnRcXFwiXFxuIDEzNjpcXHRcXHRkZWZhdWx0IHlcXG4gMTM3OlxcdFxcdGRlcGVuZHMgb24gSU5URUxfVERYX0hPU1RcXG4gMTM4OlxcdFxcdHNlbGVjdCBLVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU1xcbiAxMzk6XFx0XFx0c2VsZWN0IEhBVkVfS1ZNX0FSQ0hfR01FTV9QT1BVTEFURVxcbiAxNDA6XFx0XFx0aGVscFxcbiAxNDE6XFx0XFx0ICBQcm92aWRlcyBzdXBwb3J0IGZvciBsYXVuY2hpbmcgSW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWClcXG4gMTQyOlxcdFxcdCAgY29uZmlkZW50aWFsIFZNcyBvbiBJbnRlbCBwcm9jZXNzb3JzLlxcbiAxNDM6XFx0XFxuIDE0NDpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuIDE0NTpcXHRcXG4gMTQ2OlxcdGNvbmZpZyBLVk1fQU1EXFxuIDE0NzpcXHRcXHR0cmlzdGF0ZSBcXFwiS1ZNIGZvciBBTUQgcHJvY2Vzc29ycyBzdXBwb3J0XFxcIlxcbiAxNDg6XFx0XFx0ZGVwZW5kcyBvbiBLVk0gXFx1MDAyNlxcdTAwMjYgKENQVV9TVVBfQU1EIHx8IENQVV9TVVBfSFlHT04pXFxuIDE0OTpcXHRcXHRoZWxwXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDEwOjU2OjA2LjU5MTc3MjgwOFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTUwNzQ2MzExMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipXb3J0aCBGdXp6aW5nIERlY2lzaW9uOiBURFggUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCB0cnlpbmcgdG8gZGVjaWRlIGlmIGl0J3Mgd29ydGggZnV6emluZy4gVGhlIGtleSBoZXJlIHNlZW1zIHRvIGJlIGBLVk1fSU5URUxfVERYYCBhbmQgYElOVEVMX1REWF9IT1NUYCwgdGhlIHJlbGV2YW50IGNvbmZpZ3MuIFRoZSBwcm9tcHQgaXMgYXNraW5nIGlmIHRoaXMgY29kZSBjYW4gYmUgcmVhY2hlZCwgc3BlY2lmaWNhbGx5LCBpZiBpdCdzIFwiaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVS4uLlwiLiBURFggaXMgYSAqaGFyZHdhcmUqIGZlYXR1cmUsIHNvIHRoYXQncyB0aGUgc3RpY2tpbmcgcG9pbnQuXG5cbkNhbiBzdGFuZGFyZCBRRU1VIGhpdCB0aGlzPyBOb3BlLCBRRU1VIGRvZXNuJ3QgZW11bGF0ZSBURFguIEl0ICpjYW4qIHJ1biBhcyBhIFREWCBob3N0LCBidXQgb25seSBpZiB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSBoYXMgdGhlIHN1cHBvcnQuIFN5emthbGxlciBydW5zIG9uIEdDRSwgYW5kIEdDRSAqZG9lcyogaGF2ZSBURFggaW5zdGFuY2VzLCBzbyB0aGF04oCZcyBhIHBvc3NpYmlsaXR5LiBJIHdhcyBpbml0aWFsbHkgbGVhbmluZyB0b3dhcmQgXCJpbXBvc3NpYmxlIHRvIHJlYWNoXCIgYnV0IHRoZW4gcmVhbGl6ZWQgdGhhdCBTeXprYWxsZXIgd2lsbCB0ZXN0IFREWCBpZiBpdCBjYW4uIEl0IGhlYXZpbHkgdGVzdHMgS1ZNLCBhbmQgaWYgVERYIGlzIGVuYWJsZWQsIGl0IHNob3VsZCBiZSB0ZXN0ZWQuXG5cbkJ1dCB0aGVuIEkgc2F3IHRoZSBrZXJuZWwgcGFyYW1ldGVyLCBgdGR4X2RwYW10PW9uYC4gVGhhdOKAmXMgYSBwb3RlbnRpYWwgcm9hZGJsb2NrLiBJZiBpdOKAmXMgbm90IHNldCwgYHRkeF9lbmFibGVfZHBhbXRgIGlzIGZhbHNlLCBhbmQgdGhlIGNvZGUgcGF0aCBpcyB1bnJlYWNoYWJsZS4gU3l6a2FsbGVyIGRvZXNuJ3QgYXV0b21hdGljYWxseSBwYXNzIG5ldyBrZXJuZWwgcGFyYW1ldGVycyB1bmxlc3MgaXQncyBjb25maWd1cmVkIHRvIGRvIHNvLiBIb3dldmVyLCB0aGUgcHJvbXB0IGlzIGFza2luZyBhYm91dCBmdW5jdGlvbmFsIGNoYW5nZXMsIHNvIHRoZSBwYXJhbWV0ZXIgYXNwZWN0IGlzIGEgc2Vjb25kYXJ5IGNvbnNpZGVyYXRpb24gYXQgdGhpcyBzdGFnZS5cblxuVGhlbiBJIGhhZCB0byByZW1pbmQgbXlzZWxmIG9mIHRoZSBwcm9tcHQncyB3b3JkaW5nOiBpdCBzcGVjaWZpY2FsbHkgbWVudGlvbnMgXCJDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmVcIi4gTm93LCBRRU1VLCBpbiBhICpzdGFuZGFyZCogY29uZmlndXJhdGlvbiAod2l0aG91dCBLVk0gYW5kIFREWCBoYXJkd2FyZSkgY2Fu4oCZdCBlbXVsYXRlIFREWCwgc28gdGhlIGZlYXR1cmUgd291bGQgYmUgaW5hY2Nlc3NpYmxlLiBRRU1VIGRvZXMgKm5vdCogZW11bGF0ZSBpdCEgVERYIHJlcXVpcmVzIHBoeXNpY2FsIENQVSBzdXBwb3J0IGFuZCBhIFREWCBtb2R1bGUgbG9hZGVkIGJ5IHRoZSBCSU9TL2Zpcm13YXJlLiBTbywgaW4gc3RhbmRhcmQgUUVNVSBvciBldmVuIEtWTSB3aXRob3V0IHRoZSBURFggbW9kdWxlLCBpdCAqaXMqIHVucmVhY2hhYmxlLlxuXG5JIGNoZWNrZWQgaWYgU3l6a2FsbGVyIGhhcyBhbnkgc3BlY2lmaWMgYHFlbXVfdGR4YCBjb25maWcsIGJ1dCBuby4gSXQgcnVucyBLVk0sIGFuZCBzb21lIEdDRSBpbnN0YW5jZXMgbWlnaHQgaGF2ZSBURFgsIGJ1dCBtb3N0IGRlZmF1bHQgb25lcyBwcm9iYWJseSBkb24ndC4gSG93ZXZlciwgdGhlIHByb21wdCBhbHNvIHNheXMgdG8gY29uc2lkZXIgaWYgY29kZSByZXF1aXJlcyB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycywgdGhhdCByZXF1aXJlIHBoeXNpY2FsIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBURFggaXMgYSBDUFUgZmVhdHVyZSwgc28gaXQncyBub3QgdGhlIHNhbWUuXG5cbkFuZCB0aGVuIEkgaGFkIGEgYnJlYWt0aHJvdWdoISBLVk0gZmVhdHVyZXMgbGlrZSBTRVYgYW5kIFREWCBhcmUgKm9mdGVuKiB0ZXN0ZWQgYnkgc3l6a2FsbGVyIGlmIHRoZXkgcnVuIG9uIGNhcGFibGUgaGFyZHdhcmUuIFN5emthbGxlciBoYXMgcG9vbHMgZm9yIEFNRCBTRVYgYW5kIEludGVsIFREWCwgc3BlY2lmaWNhbGx5IGZvciB0aGlzIHB1cnBvc2UuIFRoZXNlIGFyZSBjb3JlIEtWTS94ODYgY29kZSwgbm90IGEgdmVuZG9yLXNwZWNpZmljIFBDSWUgY2FyZCwgc28gdGhhdCdzIHRoZSBkaWZmZXJlbmNlLiBUaGUgZnVuY3Rpb25zIEkgbmVlZCB0byBmb2N1cyBvbiBhcmUgYHRkeF9wYW10X2dldGAsIGB0ZHhfcGFtdF9wdXRgLCBgdGR4X3RvcHVwX3BhbXRfY2FjaGVgLCBgdGR4X2FsbG9jX2NvbnRyb2xfcGFnZWAsIGFuZCBgdGR4X2ZyZWVfY29udHJvbF9wYWdlYC4gVGhlc2UgYXJlIGNhbGxlZCBmcm9tIEtWTSBNTVUgYW5kIFREWCB2Y3B1L3ZtIGluaXQgY29kZS4gU28sIEkgaGF2ZSB0byBjb25zaWRlciB0aGlzIGluIHRoYXQgY29udGV4dCwgYW5kIGdpdmVuIHRoYXQgdGhlc2UgYXJlIGNvcmUgZnVuY3Rpb25zIG9mIHRoZSBURFggaW1wbGVtZW50YXRpb24sIHRoZSBhbnN3ZXIgaXMgV29ydGhGdXp6aW5nPXRydWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMjE2LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Nzg4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTA6NTY6MTguMDk5MjM5MTdaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2NDE0MzE1NzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTF9GT1JfS1ZNXFxcXCh0ZHhfcGFtdF9nZXRcXFxcKVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM9MjE1OT1pbnQgdGR4X3BhbXRfZ2V0KGt2bV9wZm5fdCBwZm4sIHN0cnVjdCB0ZHhfcGFtdF9jYWNoZSAqY2FjaGUpXFxuLS1cXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtMjIxMy19XFxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jOjIyMTQ6RVhQT1JUX1NZTUJPTF9GT1JfS1ZNKHRkeF9wYW10X2dldCk7XFxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jLTIyMTUtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDEwOjU2OjIwLjc0MDY3NzgwOFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4ODcxODE5NTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlREWCBTdXBwb3J0IEFuYWx5c2lzIGZvciBGdXp6aW5nKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBjb25maXJtaW5nIHRoYXQgdGhlIFREWCBmdW5jdGlvbnMgYXJlLCBpbiBmYWN0LCBleHBvcnRlZCBmb3IgS1ZNLiBUaGUgbWFpbiBvbmVzIEknbSBzZWVpbmcgYXJlIGB0ZHhfcGFtdF9nZXRgLCBgdGR4X3BhbXRfcHV0YCwgYHRkeF90b3B1cF9wYW10X2NhY2hlYCwgYHRkeF9hbGxvY19jb250cm9sX3BhZ2VgLCBhbmQgYHRkeF9mcmVlX2NvbnRyb2xfcGFnZWAuIEkgcXVpY2tseSBzZWUgdGhhdCBgdGR4X3BhbXRfZ2V0YCBpcyBjYWxsZWQgd2l0aGluIGJvdGggYHRkeF9zZXB0X21hcF9ub25sZWFmX3NwdGVgIGFuZCBgdGR4X3NlcHRfbWFwX2xlYWZfc3B0ZWAsIGFuZCBgdGR4X2FsbG9jX2NvbnRyb2xfcGFnZWAgZ2V0cyBjYWxsZWQgZnJvbSBgX190ZHhfdGRfaW5pdGAgYW5kIGB0ZHhfdGRfdmNwdV9pbml0YC4gVGhpcyBjb25maXJtcyB0aGV5IGFyZSBkZWZpbml0ZWx5IHJlYWNoYWJsZSBpZiBURFggaXMgZW5hYmxlZC5cblxuTm93LCBsZXQncyBsb29rIGF0IHRoZSBgRW5hYmxlQ29uZmlnc2AuIEkgc2VlIGBJTlRFTF9URFhfSE9TVGAsIGBLVk1fSU5URUxfVERYYCwgYW5kIGBLVk1fSU5URUxgLiBJJ2xsIHZlcmlmeSB0aGUgZGVwZW5kZW5jaWVzIGZvciBgS1ZNX0lOVEVMX1REWGAuIEl0IGRlcGVuZHMgb24gYElOVEVMX1REWF9IT1NUYCwgd2hpY2ggaW4gdHVybiBkZXBlbmRzIG9uIGBDUFVfU1VQX0lOVEVMYCwgYFg4Nl82NGAsIGBLVk1fSU5URUxgLCBgWDg2X1gyQVBJQ2AsIGBDT05USUdfQUxMT0NgLCBhbmQgYFg4Nl9NQ0VgLiBUaGlzIG1lYW5zIHRoZSBgRW5hYmxlQ29uZmlnc2AgbmVlZCB0byBpbmNsdWRlIGJvdGggYElOVEVMX1REWF9IT1NUYCBhbmQgYEtWTV9JTlRFTF9URFhgIHRvIGZ1bmN0aW9uLlxuXG5UaGUgcXVlc3Rpb24gdGhlbiBpcywgaXMgdGhlcmUgYW55IHJlYXNvbiB0byByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWA/IFRoZSBjb25jZXJuIGlzIFwiQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLlwiIENhbiBURFggYmUgcmVhY2hlZCBpbiBRRU1VPyBXZWxsLCBpZiBRRU1VIGlzIHJ1biB3aXRoIEtWTSBvbiBhIFREWC1jYXBhYmxlIGhvc3QsIHRoZW4geWVzLiBJZiBpdCdzIHJ1bm5pbmcgd2l0aCBUQ0csIHRoZW4gbm8uIFN5emthbGxlciBydW5zIFFFTVUgd2l0aCBLVk0sIHNvIGlmIHRoZSBob3N0IGhhcyBURFgsIGl0J3MgcmVhY2hhYmxlLiBUaGUgY3J1Y2lhbCBwb2ludCBpcyB0aGF0IFREWCwgbGlrZSBTRVYgb3IgU0dYLCBpcyBnZW5lcmFsbHkgY29uc2lkZXJlZCByZWFjaGFibGUgYmVjYXVzZSBTeXprYWxsZXIgY2FuIGJlIGRlcGxveWVkIG9uIGhhcmR3YXJlIHRoYXQgc3VwcG9ydHMgdGhlc2UgQ1BVIGZlYXR1cmVzLiBWZW5kb3Itc3BlY2lmaWMgUENJZSBjYXJkcyBhcmUgZXhwbGljaXRseSBjb25zaWRlcmVkIHVucmVhY2hhYmxlLCBidXQgVERYIGlzIGEgQ1BVIGZlYXR1cmUgdGhhdCBpcyBhdmFpbGFibGUgaW4gc3RhbmRhcmQgY2xvdWQgVk1zIChsaWtlIEdDUCBDMyBpbnN0YW5jZXMpLCBzbyB0aGlzIGlzIGEgY3J1Y2lhbCBkaXN0aW5jdGlvbi4gVGhlcmVmb3JlLCBURFggaXMgYWJzb2x1dGVseSByZWFjaGFibGUuXG5cbkxldCdzIGRvdWJsZS1jaGVjayBgRm9jdXNTeW1ib2xzYC4gSSBzZWUgdGhlIHNhbWUgZnVuY3Rpb25zIGFzIGJlZm9yZTogYHRkeF9wYW10X2dldGAsIGB0ZHhfcGFtdF9wdXRgLCBgdGR4X3RvcHVwX3BhbXRfY2FjaGVgLCBgdGR4X2FsbG9jX2NvbnRyb2xfcGFnZWAsIGB0ZHhfZnJlZV9jb250cm9sX3BhZ2VgLCBwbHVzIGB0ZHhfc3VwcG9ydHNfZHluYW1pY19wYW10YCBhbmQgYHRkeF90b3B1cF9leHRlcm5hbF9wYW10X2NhY2hlYCAod2hpY2ggaXMgc3RhdGljIGluIGBhcmNoL3g4Ni9rdm0vdm14L3RkeC5jYCkuIE5lZWQgdG8gcmV2aWV3IGB0ZHhfdG9wdXBfZXh0ZXJuYWxfcGFtdF9jYWNoZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0OTM2LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjY4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDEwOjU2OjI5LjYxMjQ5OTU1OFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIwNDEzMjkxNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0ZHhfdG9wdXBfZXh0ZXJuYWxfcGFtdF9jYWNoZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vdm14L3RkeC5jPTE2MTc9dm9pZCB0ZHhfbG9hZF9tbXVfcGdkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaHBhX3Qgcm9vdF9ocGEsIGludCBwZ2RfbGV2ZWwpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTE2MjctXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYzoxNjI4OnN0YXRpYyBpbnQgdGR4X3RvcHVwX2V4dGVybmFsX3BhbXRfY2FjaGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgbWluX25yX3NwdHMpXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0xNjI5LXtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmM9MzQ3Mz1pbnQgX19pbml0IHRkeF9oYXJkd2FyZV9zZXR1cCh2b2lkKVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0zNTM0LVxcdGlmICh0ZHhfc3VwcG9ydHNfZHluYW1pY19wYW10KHRkeF9zeXNpbmZvKSlcXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jOjM1MzU6XFx0XFx0dnRfeDg2X29wcy50b3B1cF9leHRlcm5hbF9jYWNoZSA9IHRkeF90b3B1cF9leHRlcm5hbF9wYW10X2NhY2hlO1xcbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMzUzNi1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTA6NTY6MzEuODE2NjM3NDg2WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzOTczNTgxMTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBFeHBvc2VkIEZ1bmN0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQsIHJpZ2h0IG9mZiB0aGUgYmF0LCBJIHNlZSBzb21ldGhpbmcgc3RhdGljLiBHaXZlbiBteSB1c3VhbCBwcmVmZXJlbmNlcyBmb3IgY2xhcml0eSBhbmQgdGVzdGFiaWxpdHksIEkgaW1tZWRpYXRlbHkgdGhpbmsgdGhhdCB3ZSBzaG91bGQgZXhjbHVkZSBpdCBmcm9tIHRoZSBgRm9jdXNTeW1ib2xzYCBsaXN0LiBOb24tc3RhdGljIGlzIHVzdWFsbHkgYmV0dGVyLlxuXG5Ob3csIGxldCdzIGJyZWFrIGRvd24gdGhlc2UgZXhwb3J0ZWQgZnVuY3Rpb25zLiBXZSBoYXZlIGB0ZHhfcGFtdF9nZXRgLCBgdGR4X3BhbXRfcHV0YCwgYHRkeF90b3B1cF9wYW10X2NhY2hlYCwgYHRkeF9hbGxvY19jb250cm9sX3BhZ2VgLCBhbmQgYHRkeF9mcmVlX2NvbnRyb2xfcGFnZWAuIFRoYXQncyBhIHNvbGlkIHNldCwgYSBnb29kIHN0YXJ0LiBJJ20gbm90aW5nIHRoZSBjbGVhciBnZXQvcHV0IHBhdHRlcm4gaGVyZSwgYW5kIHRoZSBjb250cm9sIHBhZ2UgYWxsb2NhdGlvbi9kZWFsbG9jYXRpb24gcGFpci4gVGhlIGNhY2hlIHRvcC11cCBmdW5jdGlvbiBpcyBpbnRlcmVzdGluZzsgaXQgc3VnZ2VzdHMgYSBwZXJmb3JtYW5jZS1mb2N1c2VkIGRlc2lnbi5cblxuQnV0IGhvbGQgb24sIGFyZSB0aG9zZSAqYWxsKiB0aGUgZXhwb3J0ZWQgZnVuY3Rpb25zPyBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcgY3J1Y2lhbC4gQWgsIHllcywgdGhlcmUgYXJlIHR3byBtb3JlOiBgdGR4X3N1cHBvcnRzX2R5bmFtaWNfcGFtdGAgYW5kIGB0ZHhfZnJlZV9wYW10X2NhY2hlYC4gKkR5bmFtaWMgcGFtdCBzdXBwb3J0KiBpcyBhbiBpbnRlcmVzdGluZyBhZGRpdGlvbiwgYW5kIGEgY2FjaGUgZGVhbGxvY2F0aW9uIGZ1bmN0aW9uIG1lYW5zIGEgY29tcGxldGUgbWVtb3J5IGxpZmVjeWNsZSBpcyBhY2NvdW50ZWQgZm9yLiBPa2F5LCB3aXRoIGFsbCBvZiB0aGlzIGluZm9ybWF0aW9uLCBJIGNhbiBtb3ZlIG9uIHRvIHRoZSBuZXh0IHN0ZXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2NjM4LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDEwOjU2OjM2LjIxMzk5NzY0OVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzAxNjI4NDYxMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MX0ZPUl9LVk1cXFxcKHRkeF9mcmVlX3BhbXRfY2FjaGVcXFxcKVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM9MjI2MT12b2lkIHRkeF9mcmVlX3BhbXRfY2FjaGUoc3RydWN0IHRkeF9wYW10X2NhY2hlICpjYWNoZSlcXG4tLVxcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYy0yMjY3LX1cXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM6MjI2ODpFWFBPUlRfU1lNQk9MX0ZPUl9LVk0odGR4X2ZyZWVfcGFtdF9jYWNoZSk7XFxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jLTIyNjktXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDEwOjU2OjM5LjIzMDI4NzcyM1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NzQ0NDg2MTA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBURFggRHluYW1pYyBQQU1UIENvZGUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgdGR4X2ZyZWVfcGFtdF9jYWNoZWAsIHNwZWNpZmljYWxseS4gSSd2ZSBnb3QgYSBsaXN0IG9mIGZvY3VzIHN5bWJvbHMgaW4gbWluZDogYHRkeF9wYW10X2dldGAsIGB0ZHhfcGFtdF9wdXRgLCBgdGR4X3RvcHVwX3BhbXRfY2FjaGVgLCBgdGR4X2ZyZWVfcGFtdF9jYWNoZWAsIGB0ZHhfYWxsb2NfY29udHJvbF9wYWdlYCwgYW5kIGB0ZHhfZnJlZV9jb250cm9sX3BhZ2VgLiBNeSBpbml0aWFsIHF1ZXN0aW9uIGlzIHdoZXRoZXIgc2V0dGluZyBgdGR4X2RwYW10PW9uYCBpcyBhIHByZXJlcXVpc2l0ZSBmb3IgdGhpcyBjb2RlIHBhdGguXG5cblJpZ2h0LCBgdGR4X3N1cHBvcnRzX2R5bmFtaWNfcGFtdGAgY2hlY2tzIGB0ZHhfZW5hYmxlX2RwYW10YCwgd2hpY2ggKmlzKiBzZXQgYnkgdGhlIGB0ZHhfZHBhbXQ9b25gIGtlcm5lbCBwYXJhbWV0ZXIuIElmIHRoZSBwYXJhbWV0ZXIgaXMgYWJzZW50LCBgdGR4X3N1cHBvcnRzX2R5bmFtaWNfcGFtdGAgcmV0dXJucyBmYWxzZSwgYW5kIGEgbGFyZ2UgcG9ydGlvbiBvZiB0aGlzIGR5bmFtaWMgUEFNVCBsb2dpYyBpcyBieXBhc3NlZC4gQnV0IHdhaXQsIGB0ZHhfYWxsb2NfY29udHJvbF9wYWdlYCAqY2FsbHMqIGB0ZHhfcGFtdF9nZXRgLiBOb3cgSSdtIHVuZGVyc3RhbmRpbmc7IGV2ZW4gaWYgYHRkeF9zdXBwb3J0c19keW5hbWljX3BhbXRgIGlzIGZhbHNlLCBgdGR4X3BhbXRfZ2V0YCB3aWxsIHN0aWxsIGJlIGNhbGxlZCwgYnV0IGl0IHdpbGwgaW1tZWRpYXRlbHkgcmV0dXJuIDAuIFNvLCB0aGlzIGNvZGUgKmlzKiByZWFjaGFibGUsIGV2ZW4gd2l0aG91dCBgdGR4X2RwYW10PW9uYCwgYnV0IHRoZSBkeW5hbWljIFBBTVQgZmVhdHVyZXMgd2lsbCBvbmx5IGJlIGFjdGl2ZSBpZiB0aGUgcGFyYW1ldGVyIGlzIGFjdHVhbGx5IHNldC5cblxuTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uIGlzOiBpcyB0aGlzIGEgcG90ZW50aWFsIGlzc3VlIGZvciBmdXp6aW5nPyBUaGlua2luZyBpdCB0aHJvdWdoLCBTeXprYWxsZXIgKmNhbiogYmUgY29uZmlndXJlZCB0byBwYXNzIGtlcm5lbCBwYXJhbWV0ZXJzLCBzbyBpdCdzIHBlcmZlY3RseSBjYXBhYmxlIG9mIHNldHRpbmcgYHRkeF9kcGFtdD1vbmAuIEdpdmVuIHRoYXQsIGFuZCB0aGUgZmFjdCB0aGF0IHRoaXMgaXMgY29yZSBrZXJuZWwgZnVuY3Rpb25hbGl0eSwgSSdtIGNvbmZpZGVudCB3ZSBzaG91bGQgbWFyayB0aGlzIGFzIGBXb3J0aEZ1enppbmc9dHJ1ZWAuXG5cbkp1c3QgdG8gY292ZXIgYWxsIHRoZSBiYXNlcywgbGV0J3MgcXVpY2tseSByZXZpZXcgdGhlIEVuYWJsZUNvbmZpZ3MgdGhhdCBjb21lIGludG8gcGxheSBoZXJlLiBJJ20gc2VlaW5nIGBJTlRFTF9URFhfSE9TVGAgYW5kIGBLVk1fSU5URUxfVERYYC4gV2FpdC4uLiBJIG5lZWQgdG8gZG91YmxlLWNoZWNrOiBEb2VzIGBLVk1fSU5URUxfVERYYCBoYXZlIGRlcGVuZGVuY2llcyBJIG5lZWQgdG8gdGFrZSBpbnRvIGNvbnNpZGVyYXRpb24/IFJpZ2h0LCBiYWNrIHRvIGBhcmNoL3g4Ni9rdm0vS2NvbmZpZ2AgdG8gcmVmcmVzaCBteSBtZW1vcnkuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjcyMjIsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTA6NTY6NDUuOTc0Nzc2NjVaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMDUyODgyMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgS1ZNX0lOVEVMX1REWFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZz0xMjI9Y29uZmlnIFg4Nl9TR1hfS1ZNXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzMtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTM0OmNvbmZpZyBLVk1fSU5URUxfVERYXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTM1LVxcdGJvb2wgXFxcIkludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDEwOjU2OjQ2LjA5NTMxMDY1MloiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTUwNjA2MTE5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgVERYIEtWTSBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBzdXBwb3J0IGZvciB0aGUgRHluYW1pYyBQaHlzaWNhbCBBZGRyZXNzIE1ldGFkYXRhIFRhYmxlIChQQU1UKSBmb3IgSW50ZWwgVERYIHdpdGhpbiB0aGUgS1ZNL3g4NiBlbnZpcm9ubWVudC4gIEkgbmVlZCB0byBjb25maXJtIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zOiBpdCdzIGNsZWFyIHRoYXQgYEtWTV9JTlRFTF9URFhgIGRlcGVuZHMgb24gYElOVEVMX1REWF9IT1NUYCwgc28gdGhvc2UgYXJlIHRoZSBrZXkgY29uZmlndXJhdGlvbnMgSSdsbCBuZWVkIHRvIGVuYWJsZSBmb3IgdGVzdGluZy5cblxuTm93LCBsZXQncyBuYWlsIGRvd24gdGhlIGZ1bmN0aW9ucyB0aGF0IGFyZSBtb2RpZmllZCBvciBhZGRlZCBieSB0aGlzIHBhdGNoLCBzbyBJIGNhbiBmb2N1cyBteSBmdXp6aW5nIGVmZm9ydHMuICBJJ3ZlIGlkZW50aWZpZWQgdGhlc2UgYXMgdGhlIG1vc3QgbGlrZWx5IGFyZWFzIG9mIGNvbmNlcm4sIGJhc2VkIG9uIHRoZSB0ZXh0OiBgdGR4X3BhbXRfZ2V0YCwgYHRkeF9wYW10X3B1dGAsIGB0ZHhfdG9wdXBfcGFtdF9jYWNoZWAsIGB0ZHhfZnJlZV9wYW10X2NhY2hlYCwgYHRkeF9hbGxvY19jb250cm9sX3BhZ2VgLCBhbmQgYHRkeF9mcmVlX2NvbnRyb2xfcGFnZWAuIFRoZXkgYXJlIGV4cG9ydGVkIGZvciBLVk0uXG5cbkkndmUgYWxzbyBzY2FubmVkIGBhcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmNgIGZvciBhbnkgb3RoZXIgZnVuY3Rpb25zIHRoYXQgd2VyZSBtb2RpZmllZCBvciBpbnRyb2R1Y2VkLCBidXQgdGhleSBhcHBlYXIgdG8gYmUgc3RhdGljIGhlbHBlcnMuIFRoZXNlIGFyZSB0aGUgb25lcyBJIGZvdW5kOiBgaW5pdF9wYW10X3JlZmNvdW50c2AsIGBmcmVlX3BhbXRfcmVmY291bnRzYCwgYHRkeF9maW5kX3BhbXRfcmVmY291bnRgLCBgdGRtcl9nZXRfcGFtdF9iaXRtYXBfc3pgLCBgdGRtcl9nZXRfcGFtdF9zemAsIGB0ZG1yX3NldF91cF9wYW10YCwgYHRkbXJzX3NldF91cF9wYW10X2FsbGAsIGBjb25maWdfdGR4X21vZHVsZWAsIGBpbml0X3RkeF9tb2R1bGVgLCBgdGR4X2FsbG9jX3BhZ2VfcGFtdF9jYWNoZWAsIGBhbGxvY19kcGFtdF9wYWdlYCwgYGFsbG9jX3BhbXRfYXJyYXlgLCBgZnJlZV9wYW10X2FycmF5YCwgYHBhbXRfMm1iX2FyZ2AsIGB0ZGhfcGh5bWVtX3BhbXRfYWRkYCwgYHRkaF9waHltZW1fcGFtdF9yZW1vdmVgLlxuXG5NeSBtYWluIGNvbmNlcm4gd2l0aCB0aGUgZXhwb3J0ZWQgZnVuY3Rpb25zIGlzIHRoYXQgdGhleSBhcmUgbGlrZWx5IHRvIGJlIHVzZWQgYnkgS1ZNIGNvZGUsIGFuZCBhcmUgdGh1cyBtb3JlIGxpa2VseSB0byBiZSBzdWJqZWN0IHRvIGEgcmFuZ2Ugb2YgaW5wdXRzLiBTaW5jZSB0aGlzIHBhdGNoIGludHJvZHVjZXMgZHluYW1pYyBhbGxvY2F0aW9uIGFuZCBmcmVlaW5nIG9mIFBBTVQgbWVtb3J5LCBJIGhhdmUgdG8gZW5zdXJlIHRoYXQgbWVtb3J5IG1hbmFnZW1lbnQgaXMgY29ycmVjdCBpbiB0aGlzIFREWCBpbXBsZW1lbnRhdGlvbiBhbmQgdGhhdCBtZW1vcnkgbGVha3MgYW5kIGNyYXNoZXMgYXJlIHByZXZlbnRlZCBpbiBURFggaG9zdCBzdXBwb3J0LlxuXG5UaGUgcGF0Y2ggYXV0aG9yIGV4cGxpY2l0bHkgbm90ZWQgdG8gZXhjbHVkZSBjb2RlIHBhdGhzIHVucmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gIEhvd2V2ZXIsIHRoaXMgVERYIGZlYXR1cmUsIHVubGlrZSB2ZW5kb3Itc3BlY2lmaWMgaGFyZHdhcmUgZHJpdmVycywgaXMgZGVmaW5pdGVseSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR29vZ2xlIENsb3VkIEVuZ2luZSAoR0NFKSBpZiB0aGUgaGFyZHdhcmUgc3VwcG9ydHMgVERYLiBUaGVyZWZvcmUsIGl0J3MgYWJzb2x1dGVseSB3b3J0aCBmdXp6aW5nLiBJIGNhbiByZXByb2R1Y2UgYSBURFgtY2FwYWJsZSBpbnN0YW5jZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LlxuXG5IZXJl4oCZcyBteSByZWFzb25pbmcgc3VjY2luY3RseTogVGhpcyBwYXRjaCBicmluZ3MgRHluYW1pYyBQQU1UIHN1cHBvcnQgdG8gVERYIGluIEtWTS94ODYsIGVuYWJsaW5nIGR5bmFtaWMgYWxsb2NhdGlvbiBhbmQgZnJlZWluZyBvZiBQQU1UIG1lbW9yeSBwYWdlcyBmb3IgZ3Vlc3RzLCB0b3VjaGluZyBLVk0gTU1VIGFuZCBURFggaW5pdGlhbGl6YXRpb24uIEl0ICppcyogcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB3aXRoIFREWCBoYXJkd2FyZSwgc3BlY2lmaWNhbGx5IGluIFREWC1jYXBhYmxlIGluc3RhbmNlcywgbmVjZXNzaXRhdGluZyBmdXp6aW5nIHRvIGd1YXJhbnRlZSBjb3JyZWN0IG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBhdm9pZCBsZWFrcyBvciBjcmFzaGVzIGluIFREWCBob3N0IHN1cHBvcnQuXG5cblNvLCBoZXJlJ3MgbXkgcGxhbjpcblxuKiAgIEVuYWJsZSBDb25maWd1cmF0aW9uczogYElOVEVMX1REWF9IT1NUYCwgYEtWTV9JTlRFTF9URFhgXG4qICAgRm9jdXMgU3ltYm9scyBmb3IgZnV6emluZzogYHRkeF9wYW10X2dldGAsIGB0ZHhfcGFtdF9wdXRgLCBgdGR4X3RvcHVwX3BhbXRfY2FjaGVgLCBgdGR4X2ZyZWVfcGFtdF9jYWNoZWAsIGB0ZHhfYWxsb2NfY29udHJvbF9wYWdlYCwgYHRkeF9mcmVlX2NvbnRyb2xfcGFnZWBcblxuSSdsbCBza2lwIGB0ZHhfc3VwcG9ydHNfZHluYW1pY19wYW10YCBhcyBpdCBsb29rcyBsaWtlIGEgc2ltcGxlIGdldHRlci5cblxuTm93LCBJJ20gcmVhZHkgdG8gYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjgyNDUsIk91dHB1dFRva2VucyI6MjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzUzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDEwOjU2OjU3LjYwMTM3NDc5NVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMjMzNDI4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU5URUxfVERYX0hPU1RcIixcbiAgICBcIktWTV9JTlRFTF9URFhcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0ZHhfcGFtdF9nZXRcIixcbiAgICBcInRkeF9wYW10X3B1dFwiLFxuICAgIFwidGR4X3RvcHVwX3BhbXRfY2FjaGVcIixcbiAgICBcInRkeF9mcmVlX3BhbXRfY2FjaGVcIixcbiAgICBcInRkeF9hbGxvY19jb250cm9sX3BhZ2VcIixcbiAgICBcInRkeF9mcmVlX2NvbnRyb2xfcGFnZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgRHluYW1pYyBQaHlzaWNhbCBBZGRyZXNzIE1ldGFkYXRhIFRhYmxlIChQQU1UKSBzdXBwb3J0IGZvciBJbnRlbCBURFggaW4gS1ZNL3g4Ni4gSXQgYWRkcyBmdW5jdGlvbmFsIGNvcmUga2VybmVsIGxvZ2ljIHRvIGR5bmFtaWNhbGx5IGFsbG9jYXRlIGFuZCBmcmVlIFBBTVQgbWVtb3J5IHBhZ2VzIGZvciBURFggZ3Vlc3RzLCBtb2RpZnlpbmcgS1ZNIE1NVSBhbmQgVERYIGluaXRpYWxpemF0aW9uIHBhdGhzLiBUaGlzIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgcnVubmluZyBvbiBURFgtY2FwYWJsZSBoYXJkd2FyZSAoZS5nLiwgR0NQIEMzIGluc3RhbmNlcykgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG1lbW9yeSBtYW5hZ2VtZW50IGNvcnJlY3RuZXNzIGFuZCBwcmV2ZW50IGxlYWtzIG9yIGNyYXNoZXMgaW4gdGhlIFREWCBob3N0IHN1cHBvcnQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU5URUxfVERYX0hPU1RcIixcbiAgICBcIktWTV9JTlRFTF9URFhcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0ZHhfcGFtdF9nZXRcIixcbiAgICBcInRkeF9wYW10X3B1dFwiLFxuICAgIFwidGR4X3RvcHVwX3BhbXRfY2FjaGVcIixcbiAgICBcInRkeF9mcmVlX3BhbXRfY2FjaGVcIixcbiAgICBcInRkeF9hbGxvY19jb250cm9sX3BhZ2VcIixcbiAgICBcInRkeF9mcmVlX2NvbnRyb2xfcGFnZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgRHluYW1pYyBQaHlzaWNhbCBBZGRyZXNzIE1ldGFkYXRhIFRhYmxlIChQQU1UKSBzdXBwb3J0IGZvciBJbnRlbCBURFggaW4gS1ZNL3g4Ni4gSXQgYWRkcyBmdW5jdGlvbmFsIGNvcmUga2VybmVsIGxvZ2ljIHRvIGR5bmFtaWNhbGx5IGFsbG9jYXRlIGFuZCBmcmVlIFBBTVQgbWVtb3J5IHBhZ2VzIGZvciBURFggZ3Vlc3RzLCBtb2RpZnlpbmcgS1ZNIE1NVSBhbmQgVERYIGluaXRpYWxpemF0aW9uIHBhdGhzLiBUaGlzIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgcnVubmluZyBvbiBURFgtY2FwYWJsZSBoYXJkd2FyZSAoZS5nLiwgR0NQIEMzIGluc3RhbmNlcykgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG1lbW9yeSBtYW5hZ2VtZW50IGNvcnJlY3RuZXNzIGFuZCBwcmV2ZW50IGxlYWtzIG9yIGNyYXNoZXMgaW4gdGhlIFREWCBob3N0IHN1cHBvcnQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflow59ft2[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-26 10:29:36 +0000 UTC FinishedAt: 2026-07-26 10:56:59 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "2d66a033864e27ab8d5e44cb36f31d9d2413bee4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INTEL_TDX_HOST", "KVM_INTEL_TDX" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "2d66a033864e27ab8d5e44cb36f31d9d2413bee4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INTEL_TDX_HOST", "KVM_INTEL_TDX" ], "series_id": "6baf0896-34df-4358-ba93-e5b0fb6884bd" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "tdx_pamt_get", "tdx_pamt_put", "tdx_topup_pamt_cache", "tdx_free_pamt_cache", "tdx_alloc_control_page", "tdx_free_control_page" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDEwOjU1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lOVEVMX1REWF9IT1NUJiMzNDssCiAgICAmIzM0O0tWTV9JTlRFTF9URFgmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0ZHhfcGFtdF9nZXQmIzM0OywKICAgICYjMzQ7dGR4X3BhbXRfcHV0JiMzNDssCiAgICAmIzM0O3RkeF90b3B1cF9wYW10X2NhY2hlJiMzNDssCiAgICAmIzM0O3RkeF9mcmVlX3BhbXRfY2FjaGUmIzM0OywKICAgICYjMzQ7dGR4X2FsbG9jX2NvbnRyb2xfcGFnZSYjMzQ7LAogICAgJiMzNDt0ZHhfZnJlZV9jb250cm9sX3BhZ2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBEeW5hbWljIFBoeXNpY2FsIEFkZHJlc3MgTWV0YWRhdGEgVGFibGUgKFBBTVQpIHN1cHBvcnQgZm9yIEludGVsIFREWCBpbiBLVk0veDg2LiBJdCBhZGRzIGZ1bmN0aW9uYWwgY29yZSBrZXJuZWwgbG9naWMgdG8gZHluYW1pY2FsbHkgYWxsb2NhdGUgYW5kIGZyZWUgUEFNVCBtZW1vcnkgcGFnZXMgZm9yIFREWCBndWVzdHMsIG1vZGlmeWluZyBLVk0gTU1VIGFuZCBURFggaW5pdGlhbGl6YXRpb24gcGF0aHMuIFRoaXMgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBydW5uaW5nIG9uIFREWC1jYXBhYmxlIGhhcmR3YXJlIChlLmcuLCBHQ1AgQzMgaW5zdGFuY2VzKSBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbWVtb3J5IG1hbmFnZW1lbnQgY29ycmVjdG5lc3MgYW5kIHByZXZlbnQgbGVha3Mgb3IgY3Jhc2hlcyBpbiB0aGUgVERYIGhvc3Qgc3VwcG9ydC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxMDo1NTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGNlZDI0MTAyYjEyNGM4OWE1NjYyN2U3YzlmMWEzYmE4YTdjZmYzOWFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEp1bCAyNiAxMDo1NToyMCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dCBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0XG5pbmRleCBiNTQ5M2E3ZjhmMjI4MS4uYTBhNzY3MDI0NmJjNTggMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHRcbkBAIC03NTEyLDYgJiM0Mzs3NTEyLDE2IEBAIEtlcm5lbCBwYXJhbWV0ZXJzXG4gXG4gXHR0ZGZ4PVx0XHRbSFcsRFJNXVxuIFxuJiM0MztcdHRkeF9kcGFtdD1cbiYjNDM7XHRcdFx0W1g4Nl0gQ29udHJvbHMgd2hldGhlciBURFggd2lsbCB1c2UgRHluYW1pYyBQQU1UXG4mIzQzO1x0XHRcdHRvIHNhdmUgbWVtb3J5LCB3aGVuIHN1cHBvcnRlZC5cbiYjNDM7XG4mIzQzO1x0XHRcdFZhbGlkIHBhcmFtZXRlcnM6IFwmIzM0O29uXCYjMzQ7LCBcJiMzNDtvZmZcJiMzNDtcbiYjNDM7XHRcdFx0RGVmYXVsdDogXCYjMzQ7b2ZmXCYjMzQ7XG4mIzQzO1xuJiM0MztcdFx0XHRGb3IgZGV0YWlscyBzZWU6XG4mIzQzO1x0XHRcdERvY3VtZW50YXRpb24vYXJjaC94ODYvdGR4LnJzdFxuJiM0MztcbiBcdHRlc3Rfc3VzcGVuZD1cdFtTVVNQRU5EXVxuIFx0XHRcdEZvcm1hdDogeyBcJiMzNDttZW1cJiMzNDsgfCBcJiMzNDtzdGFuZGJ5XCYjMzQ7IHwgXCYjMzQ7ZnJlZXplXCYjMzQ7IH1bLE5dXG4gXHRcdFx0U3BlY2lmeSBcJiMzNDttZW1cJiMzNDsgKGZvciBTdXNwZW5kLXRvLVJBTSkgb3IgXCYjMzQ7c3RhbmRieVwmIzM0OyAoZm9yXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hcmNoL3g4Ni90ZHgucnN0IGIvRG9jdW1lbnRhdGlvbi9hcmNoL3g4Ni90ZHgucnN0XG5pbmRleCAzMzAzNDk5YWQ0YzZmOC4uYTFjMjMwOTIzMDU4MDcgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2FyY2gveDg2L3RkeC5yc3RcbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vYXJjaC94ODYvdGR4LnJzdFxuQEAgLTIwMCw2ICYjNDM7MjAwLDM0IEBAIHJlZmxlY3RzIHRoZSBUQ0Igb2YgdGhlIGN1cnJlbnRseSBydW5uaW5nIFREWCBtb2R1bGUgYW5kIHRoZXJlZm9yZVxuIGNoYW5nZXMgYWZ0ZXIgYW4gdXBkYXRlLiBCeSBjb250cmFzdCwgVEVFX1RDQl9TVk4gcmVmbGVjdHMgdGhlIFRDQiBhdCBURFxuIGxhdW5jaCB0aW1lIGFuZCBpcyBub3QgYWZmZWN0ZWQuXG4gXG4mIzQzO0R5bmFtaWMgUEFNVFxuJiM0MzstLS0tLS0tLS0tLS1cbiYjNDM7XG4mIzQzO1BoeXNpY2FsIEFkZHJlc3MgTWV0YWRhdGEgVGFibGUgKFBBTVQpIGlzIG1lbW9yeSB0aGF0IHRoZSBURFggbW9kdWxlIG5lZWRzXG4mIzQzO3RvIGtlZXAgZGF0YSBhYm91dCBlYWNoIHBhZ2UgKHRoaW5rIGxpa2Ugc3RydWN0IHBhZ2UpLiBJdCBuZWVkcyB0byBiZSBoYW5kZWRcbiYjNDM7dG8gdGhlIFREWCBtb2R1bGUgZm9yIGl0cyBleGNsdXNpdmUgdXNlLiBGb3Igbm9ybWFsIFBBTVQsIHRoaXMgaXMgaW5zdGFsbGVkXG4mIzQzO3doZW4gdGhlIFREWCBtb2R1bGUgaXMgZmlyc3QgbG9hZGVkIGFuZCBjb21lcyB0byBhYm91dCAwLjQlIG9mIHN5c3RlbSBtZW1vcnkuXG4mIzQzO1xuJiM0MztEeW5hbWljIFBBTVQgaXMgYSBURFggbW9kdWxlIGZlYXR1cmUgdGhhdCBhbGxvd3MgVk1NIHRvIGFsbG9jYXRlIHBhcnQgb2YgdGhlXG4mIzQzO1BBTVQgYXMgbmVlZGVkICh0aGUgcGFydHMgZm9yIHRyYWNraW5nIDRLQiBzaXplIHBhZ2VzKS4gVGhlIG90aGVyIHBhZ2Ugc2l6ZXNcbiYjNDM7KDFHQiBhbmQgMk1CKSBhcmUgc3RpbGwgYWxsb2NhdGVkIHN0YXRpY2FsbHkgYXQgdGhlIHRpbWUgb2YgVERYIG1vZHVsZVxuJiM0Mztpbml0aWFsaXphdGlvbi4gVGhpcyByZWR1Y2VzIHRoZSBhbW91bnQgb2YgbWVtb3J5IHRoYXQgVERYIHVzZXMgd2hpbGUgVERzIGFyZVxuJiM0Mztub3QgaW4gdXNlLlxuJiM0MztcbiYjNDM7V2hlbiBEeW5hbWljIFBBTVQgaXMgaW4gdXNlLCBkbWVzZyBzaG93cyBpdCBsaWtlOjpcbiYjNDM7XG4mIzQzOyAgWy4uXSB2aXJ0L3RkeDogRW5hYmxlIER5bmFtaWMgUEFNVFxuJiM0MzsgIFsuLl0gdmlydC90ZHg6IDEwMDkyIEtCIGFsbG9jYXRlZCBmb3IgUEFNVFxuJiM0MzsgIFsuLl0gdmlydC90ZHg6IFREWC1Nb2R1bGUgaW5pdGlhbGl6ZWRcbiYjNDM7XG4mIzQzO0R5bmFtaWMgUEFNVCBpcyBvbmx5IGVuYWJsZWQgd2hlbiBzdXBwb3J0ZWQgYW5kIHRoZSBgYHRkeF9kcGFtdD1gYCBrZXJuZWxcbiYjNDM7cGFyYW1ldGVyIGlzIHNldCB0byBcJiMzNDtvblwmIzM0Oy4gVGhlIGZlYXR1cmUgaXMgb2ZmIGJ5IGRlZmF1bHQgYmVjYXVzZSBURFggbW9kdWxlXG4mIzQzO2ludGVybmFsIGRldGFpbHMgcHJldmVudCBEeW5hbWljIFBBTVQgZnJvbSB3b3JraW5nIG9uIGFsbCBrZXlpZCBwYXJ0aXRpb25pbmdcbiYjNDM7Y29uZmlndXJhdGlvbnMuIFdoZW4gdGhlIFREWCBtb2R1bGUgaXMgZml4ZWQgdG8gaW5jbHVkZSB0aGVzZSBjb25zdHJhaW50cyBpblxuJiM0MztpdHMgZW51bWVyYXRpb24gb2YgRHluYW1pYyBQQU1UIHN1cHBvcnQsIGtlcm5lbCBzdXBwb3J0IGNhbiBiZSBjaGFuZ2VkIHRvXG4mIzQzO2RlZmF1bHQgb24uIEZvciBtb3JlIGluZm9ybWF0aW9uLCBjb25zdWx0IHRoZSBJbnRlbCBURFggZG9jdW1lbnRhdGlvbiBhYm91dFxuJiM0MztEeW5hbWljIFBBTVQuXG4mIzQzO1xuIFREWCBJbnRlcmFjdGlvbiB0byBPdGhlciBLZXJuZWwgQ29tcG9uZW50c1xuIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oXG5pbmRleCA4M2RjNTA4NjEzOGIzOS4uNTg4NTYzZGZlODhkNTcgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oXG5AQCAtOTgsNiAmIzQzOzk4LDcgQEAgS1ZNX1g4Nl9PUF9PUFRJT05BTF9SRVQwKHRkcF9oYXNfc21lcClcbiBLVk1fWDg2X09QKGxvYWRfbW11X3BnZClcbiBLVk1fWDg2X09QX09QVElPTkFMX1JFVDAoc2V0X2V4dGVybmFsX3NwdGUpXG4gS1ZNX1g4Nl9PUF9PUFRJT05BTChmcmVlX2V4dGVybmFsX3NwdClcbiYjNDM7S1ZNX1g4Nl9PUF9PUFRJT05BTF9SRVQwKHRvcHVwX2V4dGVybmFsX2NhY2hlKVxuIEtWTV9YODZfT1AoaGFzX3diaW52ZF9leGl0KVxuIEtWTV9YODZfT1AoZ2V0X2wyX3RzY19vZmZzZXQpXG4gS1ZNX1g4Nl9PUChnZXRfbDJfdHNjX211bHRpcGxpZXIpXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbmluZGV4IDVmNmMxY2U5NjczYjdmLi4wZGJmNjU2NGRkMGM1MSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbkBAIC0xOTIyLDYgJiM0MzsxOTIyLDcgQEAgc3RydWN0IGt2bV94ODZfb3BzIHtcbiBcdC8qIFVwZGF0ZSBleHRlcm5hbCBwYWdlIHRhYmxlcyBmb3IgcGFnZSB0YWJsZSBhYm91dCB0byBiZSBmcmVlZC4gKi9cbiBcdHZvaWQgKCpmcmVlX2V4dGVybmFsX3NwdCkoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcCk7XG4gXG4mIzQzO1x0aW50ICgqdG9wdXBfZXh0ZXJuYWxfY2FjaGUpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IG1pbl9ucl9zcHRzKTtcbiBcbiBcdGJvb2wgKCpoYXNfd2JpbnZkX2V4aXQpKHZvaWQpO1xuIFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RkeC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4LmhcbmluZGV4IDg5ZTk3ZDU3NjFkODllLi43OTEwOTAxYTdiYTIxYiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RkeC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZHguaFxuQEAgLTM2LDYgJiM0MzszNiw3IEBAXG4gLyogQml0IGRlZmluaXRpb25zIG9mIFREWF9GRUFUVVJFUzAgbWV0YWRhdGEgZmllbGQgKi9cbiAjZGVmaW5lIFREWF9GRUFUVVJFUzBfVERfUFJFU0VSVklOR1x0QklUX1VMTCgxKVxuICNkZWZpbmUgVERYX0ZFQVRVUkVTMF9OT19SQlBfTU9EXHRCSVRfVUxMKDE4KVxuJiM0MzsjZGVmaW5lIFREWF9GRUFUVVJFUzBfRFlOQU1JQ19QQU1UXHRCSVRfVUxMKDM2KVxuIFxuICNpZm5kZWYgX19BU1NFTUJMRVJfX1xuIFxuQEAgLTExOCwxMiAmIzQzOzExOSwzNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgdGR4X3N1cHBvcnRzX3J1bnRpbWVfdXBkYXRlKGNvbnN0IHN0cnVjdCB0ZHhfc3lzX2luZm8gKnN5c2luZlxuIFx0cmV0dXJuIHN5c2luZm8tXHUwMDNlZmVhdHVyZXMudGR4X2ZlYXR1cmVzMCBcdTAwMjYgVERYX0ZFQVRVUkVTMF9URF9QUkVTRVJWSU5HO1xuIH1cbiBcbiYjNDM7Ym9vbCB0ZHhfc3VwcG9ydHNfZHluYW1pY19wYW10KGNvbnN0IHN0cnVjdCB0ZHhfc3lzX2luZm8gKnN5c2luZm8pO1xuJiM0MztcbiYjNDM7LyogU2ltcGxlIHN0cnVjdHVyZSBmb3IgcHJlLWFsbG9jYXRpbmcgRHluYW1pYyBQQU1UIHBhZ2VzIG91dHNpZGUgb2Ygc3BpbmxvY2tzLiAqL1xuJiM0MztzdHJ1Y3QgdGR4X3BhbXRfY2FjaGUge1xuJiM0MztcdHN0cnVjdCBsaXN0X2hlYWQgcGFnZV9saXN0O1xuJiM0MztcdGludCBjbnQ7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgdGR4X2luaXRfcGFtdF9jYWNoZShzdHJ1Y3QgdGR4X3BhbXRfY2FjaGUgKmNhY2hlKVxuJiM0Mzt7XG4mIzQzO1x0SU5JVF9MSVNUX0hFQUQoXHUwMDI2Y2FjaGUtXHUwMDNlcGFnZV9saXN0KTtcbiYjNDM7XHRjYWNoZS1cdTAwM2VjbnQgPSAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIHRkeF9mcmVlX3BhbXRfY2FjaGUoc3RydWN0IHRkeF9wYW10X2NhY2hlICpjYWNoZSk7XG4mIzQzO2ludCB0ZHhfdG9wdXBfcGFtdF9jYWNoZShzdHJ1Y3QgdGR4X3BhbXRfY2FjaGUgKmNhY2hlLCB1bnNpZ25lZCBsb25nIG5wYWdlcyk7XG4mIzQzO2ludCB0ZHhfcGFtdF9nZXQoa3ZtX3Bmbl90IHBmbiwgc3RydWN0IHRkeF9wYW10X2NhY2hlICpjYWNoZSk7XG4mIzQzO3ZvaWQgdGR4X3BhbXRfcHV0KGt2bV9wZm5fdCBwZm4pO1xuJiM0MztcbiBpbnQgdGR4X2d1ZXN0X2tleWlkX2FsbG9jKHZvaWQpO1xuIHUzMiB0ZHhfZ2V0X25yX2d1ZXN0X2tleWlkcyh2b2lkKTtcbiB2b2lkIHRkeF9ndWVzdF9rZXlpZF9mcmVlKHVuc2lnbmVkIGludCBrZXlpZCk7XG4gXG4gdm9pZCB0ZHhfcXVpcmtfcmVzZXRfcGFkZHIodW5zaWduZWQgbG9uZyBiYXNlLCB1bnNpZ25lZCBsb25nIHNpemUpO1xuIFxuJiM0MzsvKiBOdW1iZXIgb2YgUEFNVCBwYWdlcyB0byBiZSBwcm92aWRlZCB0byBURFggbW9kdWxlIHBlciAyTUIgcmVnaW9uIG9mIFBBICovXG4mIzQzOyNkZWZpbmUgVERYX0RQQU1UX0VOVFJZX1BBR0VfQ05UIDJcbiYjNDM7XG4mIzQzO3N0cnVjdCBwYWdlICp0ZHhfYWxsb2NfY29udHJvbF9wYWdlKHZvaWQpO1xuJiM0Mzt2b2lkIHRkeF9mcmVlX2NvbnRyb2xfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSk7XG4mIzQzO1xuIHN0cnVjdCB0ZHhfdGQge1xuIFx0LyogVEQgcm9vdCBzdHJ1Y3R1cmU6ICovXG4gXHRzdHJ1Y3QgcGFnZSAqdGRyX3BhZ2U7XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4X2dsb2JhbF9tZXRhZGF0YS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4X2dsb2JhbF9tZXRhZGF0YS5oXG5pbmRleCA0MTE1MGQ1NDY1ODljMS4uMmE0MjU1MWZjMzNjZDYgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZHhfZ2xvYmFsX21ldGFkYXRhLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RkeF9nbG9iYWxfbWV0YWRhdGEuaFxuQEAgLTIxLDYgJiM0MzsyMSw5IEBAIHN0cnVjdCB0ZHhfc3lzX2luZm9fdGRtciB7XG4gXHR1MTYgcGFtdF80a19lbnRyeV9zaXplO1xuIFx0dTE2IHBhbXRfMm1fZW50cnlfc2l6ZTtcbiBcdHUxNiBwYW10XzFnX2VudHJ5X3NpemU7XG4mIzQzO1xuJiM0MztcdC8qIE9wdGlvbmFsIG1ldGFkYXRhLCBpZiBEeW5hbWljIFBBTVQgaXMgc3VwcG9ydGVkICovXG4mIzQzO1x0dTggIHBhbXRfcGFnZV9iaXRtYXBfZW50cnlfYml0cztcbiB9O1xuIFxuIHN0cnVjdCB0ZHhfc3lzX2luZm9fdGRfY3RybCB7XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL21tdS9tbXUuYyBiL2FyY2gveDg2L2t2bS9tbXUvbW11LmNcbmluZGV4IDIzNGQwYTk1YWJmNTM0Li42ZGFiOTk2NTRmMTcwMiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9tbXUvbW11LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9tbXUvbW11LmNcbkBAIC02MTQsNiAmIzQzOzYxNCwxMCBAQCBzdGF0aWMgaW50IG1tdV90b3B1cF9tZW1vcnlfY2FjaGVzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBtYXliZV9pbmRpcmVjdClcbiBcdFx0XHRcdFx0ICAgICAgIFBUNjRfUk9PVF9NQVhfTEVWRUwpO1xuIFx0XHRpZiAocilcbiBcdFx0XHRyZXR1cm4gcjtcbiYjNDM7XG4mIzQzO1x0XHRyID0ga3ZtX3g4Nl9jYWxsKHRvcHVwX2V4dGVybmFsX2NhY2hlKSh2Y3B1LCBQVDY0X1JPT1RfTUFYX0xFVkVMKTtcbiYjNDM7XHRcdGlmIChyKVxuJiM0MztcdFx0XHRyZXR1cm4gcjtcbiBcdH1cbiBcdHIgPSBrdm1fbW11X3RvcHVwX21lbW9yeV9jYWNoZShcdTAwMjZ2Y3B1LVx1MDAzZWFyY2gubW11X3NoYWRvd19wYWdlX2NhY2hlLFxuIFx0XHRcdFx0ICAgICAgIFBUNjRfUk9PVF9NQVhfTEVWRUwpO1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvdGR4LmMgYi9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jXG5pbmRleCA1NDViMDNkOWQxMGI4MS4uMDk1NzMxMTI1NDBlOTggMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jXG5AQCAtMzYyLDcgJiM0MzszNjIsNyBAQCBzdGF0aWMgdm9pZCB0ZHhfcmVjbGFpbV9jb250cm9sX3BhZ2Uoc3RydWN0IHBhZ2UgKmN0cmxfcGFnZSlcbiBcdGlmICh0ZHhfcmVjbGFpbV9wYWdlKGN0cmxfcGFnZSkpXG4gXHRcdHJldHVybjtcbiBcbi1cdF9fZnJlZV9wYWdlKGN0cmxfcGFnZSk7XG4mIzQzO1x0dGR4X2ZyZWVfY29udHJvbF9wYWdlKGN0cmxfcGFnZSk7XG4gfVxuIFxuIHN0cnVjdCB0ZHhfZmx1c2hfdnBfYXJnIHtcbkBAIC01ODksNyAmIzQzOzU4OSw3IEBAIHN0YXRpYyB2b2lkIHRkeF9yZWNsYWltX3RkX2NvbnRyb2xfcGFnZXMoc3RydWN0IGt2bSAqa3ZtKVxuIFxuIFx0dGR4X3F1aXJrX3Jlc2V0X3BhZGRyKHBhZ2VfdG9fcGh5cyhrdm1fdGR4LVx1MDAzZXRkLnRkcl9wYWdlKSwgUEFHRV9TSVpFKTtcbiBcbi1cdF9fZnJlZV9wYWdlKGt2bV90ZHgtXHUwMDNldGQudGRyX3BhZ2UpO1xuJiM0MztcdHRkeF9mcmVlX2NvbnRyb2xfcGFnZShrdm1fdGR4LVx1MDAzZXRkLnRkcl9wYWdlKTtcbiBcdGt2bV90ZHgtXHUwMDNldGQudGRyX3BhZ2UgPSBOVUxMO1xuIH1cbiBcbkBAIC02ODEsNiAmIzQzOzY4MSw4IEBAIGludCB0ZHhfdmNwdV9jcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0aWYgKCFpcnFjaGlwX3NwbGl0KHZjcHUtXHUwMDNla3ZtKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4mIzQzO1x0dGR4X2luaXRfcGFtdF9jYWNoZShcdTAwMjZ0ZHgtXHUwMDNlcGFtdF9jYWNoZSk7XG4mIzQzO1xuIFx0ZnBzdGF0ZV9zZXRfY29uZmlkZW50aWFsKFx1MDAyNnZjcHUtXHUwMDNlYXJjaC5ndWVzdF9mcHUpO1xuIFx0dmNwdS1cdTAwM2VhcmNoLmFwaWMtXHUwMDNlZ3Vlc3RfYXBpY19wcm90ZWN0ZWQgPSB0cnVlO1xuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2dGR4LVx1MDAzZXZ0LnBpX3dha2V1cF9saXN0KTtcbkBAIC04NjYsNiAmIzQzOzg2OCw4IEBAIHZvaWQgdGR4X3ZjcHVfZnJlZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRzdHJ1Y3QgdmNwdV90ZHggKnRkeCA9IHRvX3RkeCh2Y3B1KTtcbiBcdGludCBpO1xuIFxuJiM0MztcdHRkeF9mcmVlX3BhbXRfY2FjaGUoXHUwMDI2dGR4LVx1MDAzZXBhbXRfY2FjaGUpO1xuJiM0MztcbiBcdGlmICh2Y3B1LVx1MDAzZWNwdSAhPSAtMSkge1xuIFx0XHRLVk1fQlVHX09OKHRkeC1cdTAwM2VzdGF0ZSA9PSBWQ1BVX1REX1NUQVRFX0lOSVRJQUxJWkVELCB2Y3B1LVx1MDAzZWt2bSk7XG4gXHRcdHRkeF9mbHVzaF92cF9vbl9jcHUodmNwdSk7XG5AQCAtMTYyMSw2ICYjNDM7MTYyNSwxNyBAQCB2b2lkIHRkeF9sb2FkX21tdV9wZ2Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBocGFfdCByb290X2hwYSwgaW50IHBnZF9sZXZlbClcbiBcdHRkX3ZtY3Nfd3JpdGU2NCh0b190ZHgodmNwdSksIFNIQVJFRF9FUFRfUE9JTlRFUiwgcm9vdF9ocGEpO1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCB0ZHhfdG9wdXBfZXh0ZXJuYWxfcGFtdF9jYWNoZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBtaW5fbnJfc3B0cylcbiYjNDM7e1xuJiM0MztcdC8qXG4mIzQzO1x0ICogTWludXMgb25lIHBhZ2UgdG8gZXhjbHVkZSB0aGUgcm9vdCBTUFQsIGJ1dCBwbHVzIG9uZSBwYWdlIGZvciBhXG4mIzQzO1x0ICogcG9zc2libGUgNEtCIHByaXZhdGUgbWFwcGluZy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRtaW5fbnJfc3B0cyAmIzQzOz0gLTEgJiM0MzsgMTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHRkeF90b3B1cF9wYW10X2NhY2hlKFx1MDAyNnRvX3RkeCh2Y3B1KS1cdTAwM2VwYW10X2NhY2hlLCBtaW5fbnJfc3B0cyk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCB0ZHhfbWVtX3BhZ2VfYWRkKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLCBlbnVtIHBnX2xldmVsIGxldmVsLFxuIFx0XHRcdCAgICBrdm1fcGZuX3QgcGZuKVxuIHtcbkBAIC0xNjc5LDE2ICYjNDM7MTY5NCwyOCBAQCBzdGF0aWMgc3RydWN0IHBhZ2UgKnRkeF9zcHRlX3RvX3NlcHRfcHQoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4sXG4gc3RhdGljIGludCB0ZHhfc2VwdF9tYXBfbm9ubGVhZl9zcHRlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLFxuIFx0XHRcdFx0ICAgICBlbnVtIHBnX2xldmVsIGxldmVsLCB1NjQgbmV3X3NwdGUpXG4ge1xuJiM0MztcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdSA9IGt2bV9nZXRfcnVubmluZ192Y3B1KCk7XG4gXHRncGFfdCBncGEgPSBnZm5fdG9fZ3BhKGdmbik7XG4gXHR1NjQgZXJyLCBlbnRyeSwgbGV2ZWxfc3RhdGU7XG4gXHRzdHJ1Y3QgcGFnZSAqc2VwdF9wdDtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAoS1ZNX0JVR19PTighdmNwdSwga3ZtKSlcbiYjNDM7XHRcdHJldHVybiAtRUlPO1xuIFxuIFx0c2VwdF9wdCA9IHRkeF9zcHRlX3RvX3NlcHRfcHQoa3ZtLCBnZm4sIG5ld19zcHRlLCBsZXZlbCk7XG4gXHRpZiAoIXNlcHRfcHQpXG4gXHRcdHJldHVybiAtRUlPO1xuIFxuJiM0MztcdHJldCA9IHRkeF9wYW10X2dldChwYWdlX3RvX3BmbihzZXB0X3B0KSwgXHUwMDI2dG9fdGR4KHZjcHUpLVx1MDAzZXBhbXRfY2FjaGUpO1xuJiM0MztcdGlmIChLVk1fQlVHX09OKHJldCwga3ZtKSlcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuIFx0ZXJyID0gdGRoX21lbV9zZXB0X2FkZChcdTAwMjZ0b19rdm1fdGR4KGt2bSktXHUwMDNldGQsIGdwYSwgbGV2ZWwsIHNlcHRfcHQsXG4gXHRcdFx0ICAgICAgIFx1MDAyNmVudHJ5LCBcdTAwMjZsZXZlbF9zdGF0ZSk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdHRkeF9wYW10X3B1dChwYWdlX3RvX3BmbihzZXB0X3B0KSk7XG4mIzQzO1xuIFx0aWYgKHVubGlrZWx5KHRkeF9vcGVyYW5kX2J1c3koZXJyKSkpXG4gXHRcdHJldHVybiAtRUJVU1k7XG4gXG5AQCAtMTcwMSw4ICYjNDM7MTcyOCwxMyBAQCBzdGF0aWMgaW50IHRkeF9zZXB0X21hcF9ub25sZWFmX3NwdGUoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4sXG4gc3RhdGljIGludCB0ZHhfc2VwdF9tYXBfbGVhZl9zcHRlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLCBlbnVtIHBnX2xldmVsIGxldmVsLFxuIFx0XHRcdFx0ICB1NjQgbmV3X3NwdGUpXG4ge1xuJiM0MztcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdSA9IGt2bV9nZXRfcnVubmluZ192Y3B1KCk7XG4gXHRzdHJ1Y3Qga3ZtX3RkeCAqa3ZtX3RkeCA9IHRvX2t2bV90ZHgoa3ZtKTtcbiBcdGt2bV9wZm5fdCBwZm4gPSBzcHRlX3RvX3BmbihuZXdfc3B0ZSk7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKEtWTV9CVUdfT04oIXZjcHUsIGt2bSkpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTztcbiBcbiBcdC8qIFRPRE86IGhhbmRsZSBsYXJnZSBwYWdlcy4gKi9cbiBcdGlmIChLVk1fQlVHX09OKGxldmVsICE9IFBHX0xFVkVMXzRLLCBrdm0pKVxuQEAgLTE3MTAsNiAmIzQzOzE3NDIsMTAgQEAgc3RhdGljIGludCB0ZHhfc2VwdF9tYXBfbGVhZl9zcHRlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLCBlbnVtIHBnX2xldmVsIGxldmVcbiBcbiBcdFdBUk5fT05fT05DRSgobmV3X3NwdGUgXHUwMDI2IFZNWF9FUFRfUldYX01BU0spICE9IFZNWF9FUFRfUldYX01BU0spO1xuIFxuJiM0MztcdHJldCA9IHRkeF9wYW10X2dldChwZm4sIFx1MDAyNnRvX3RkeCh2Y3B1KS1cdTAwM2VwYW10X2NhY2hlKTtcbiYjNDM7XHRpZiAoS1ZNX0JVR19PTihyZXQsIGt2bSkpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiBcdC8qXG4gXHQgKiBFbnN1cmUgcHJlX2ZhdWx0X2FsbG93ZWQgaXMgcmVhZCBieSBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnkoKVxuIFx0ICogYmVmb3JlIGt2bV90ZHgtXHUwMDNlc3RhdGUuICBVc2Vyc3BhY2UgbXVzdCBub3QgYmUgYWxsb3dlZCB0byBwcmUtZmF1bHRcbkBAIC0xNzIyLDEwICYjNDM7MTc1OCwxNSBAQCBzdGF0aWMgaW50IHRkeF9zZXB0X21hcF9sZWFmX3NwdGUoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4sIGVudW0gcGdfbGV2ZWwgbGV2ZVxuIFx0ICogSWYgdGhlIFREIGlzbiYjMzk7dCBmaW5hbGl6ZWQvcnVubmFibGUsIHRoZW4gdXNlcnNwYWNlIGlzIGluaXRpYWxpemluZ1xuIFx0ICogdGhlIFZNIGltYWdlIHZpYSBLVk1fVERYX0lOSVRfTUVNX1JFR0lPTjsgQUREIHRoZSBwYWdlIHRvIHRoZSBURC5cbiBcdCAqL1xuLVx0aWYgKHVubGlrZWx5KGt2bV90ZHgtXHUwMDNlc3RhdGUgIT0gVERfU1RBVEVfUlVOTkFCTEUpKVxuLVx0XHRyZXR1cm4gdGR4X21lbV9wYWdlX2FkZChrdm0sIGdmbiwgbGV2ZWwsIHBmbik7XG4mIzQzO1x0aWYgKGxpa2VseShrdm1fdGR4LVx1MDAzZXN0YXRlID09IFREX1NUQVRFX1JVTk5BQkxFKSlcbiYjNDM7XHRcdHJldCA9IHRkeF9tZW1fcGFnZV9hdWcoa3ZtLCBnZm4sIGxldmVsLCBwZm4pO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdHJldCA9IHRkeF9tZW1fcGFnZV9hZGQoa3ZtLCBnZm4sIGxldmVsLCBwZm4pO1xuJiM0MztcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0dGR4X3BhbXRfcHV0KHBmbik7XG4gXG4tXHRyZXR1cm4gdGR4X21lbV9wYWdlX2F1Zyhrdm0sIGdmbiwgbGV2ZWwsIHBmbik7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiB9XG4gXG4gLypcbkBAIC0xODIyLDYgJiM0MzsxODYzLDcgQEAgc3RhdGljIGludCB0ZHhfc2VwdF9yZW1vdmVfbGVhZl9zcHRlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLFxuIFx0XHRyZXR1cm4gLUVJTztcbiBcbiBcdHRkeF9xdWlya19yZXNldF9wYWRkcihQRk5fUEhZUyhwZm4pLCBQQUdFX1NJWkUpO1xuJiM0MztcdHRkeF9wYW10X3B1dChwZm4pO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuQEAgLTE4NjUsNiAmIzQzOzE5MDcsOCBAQCBzdGF0aWMgaW50IHRkeF9zZXB0X3NldF9wcml2YXRlX3NwdGUoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4sIHU2NCBvbGRfc3B0ZSxcbiAgKi9cbiBzdGF0aWMgdm9pZCB0ZHhfc2VwdF9mcmVlX3ByaXZhdGVfc3B0KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tbXVfcGFnZSAqc3ApXG4ge1xuJiM0MztcdHN0cnVjdCBwYWdlICpzZXB0X3B0ID0gdmlydF90b19wYWdlKHNwLVx1MDAzZWV4dGVybmFsX3NwdCk7XG4mIzQzO1xuIFx0LypcbiBcdCAqIEtWTSBkb2VzbiYjMzk7dCAoeWV0KSB6YXAgcGFnZSB0YWJsZSBwYWdlcyBpbiBtaXJyb3IgcGFnZSB0YWJsZSB3aGlsZVxuIFx0ICogVEQgaXMgYWN0aXZlLCB0aG91Z2ggZ3Vlc3QgcGFnZXMgbWFwcGVkIGluIG1pcnJvciBwYWdlIHRhYmxlIGNvdWxkIGJlXG5AQCAtMTg3OCwxNSAmIzQzOzE5MjIsMTUgQEAgc3RhdGljIHZvaWQgdGR4X3NlcHRfZnJlZV9wcml2YXRlX3NwdChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwKVxuIFx0ICogdGhlIHBhZ2UgdG8gcHJldmVudCB0aGUga2VybmVsIGZyb20gYWNjZXNzaW5nIHRoZSBlbmNyeXB0ZWQgcGFnZS5cbiBcdCAqL1xuIFx0aWYgKEtWTV9CVUdfT04oaXNfaGtpZF9hc3NpZ25lZCh0b19rdm1fdGR4KGt2bSkpLCBrdm0pIHx8XG4tXHQgICAgdGR4X3JlY2xhaW1fcGFnZSh2aXJ0X3RvX3BhZ2Uoc3AtXHUwMDNlZXh0ZXJuYWxfc3B0KSkpXG4mIzQzO1x0ICAgIHRkeF9yZWNsYWltX3BhZ2Uoc2VwdF9wdCkpXG4gXHRcdGdvdG8gb3V0O1xuIFxuIFx0Lypcbi1cdCAqIEltbWVkaWF0ZWx5IGZyZWUgdGhlIFMtRVBUIHBhZ2UgYmVjYXVzZSBSQ1UtdGltZSBmcmVlIGlzIHVubmVjZXNzYXJ5XG4tXHQgKiBhZnRlciBUREguUEhZTUVNLlBBR0UuUkVDTEFJTSBlbnN1cmVzIHRoZXJlIGFyZSBubyBvdXRzdGFuZGluZ1xuLVx0ICogcmVhZGVycy5cbiYjNDM7XHQgKiBJbW1lZGlhdGVseSBmcmVlIHRoZSBTLUVQVCBwYWdlIGFzIHRoZSBURFggc3Vic3lzdGVtIGRvZXNuJiMzOTt0IHN1cHBvcnRcbiYjNDM7XHQgKiBmcmVlaW5nIHBhZ2VzIGZyb20gUkNVIGNhbGxiYWNrcywgYW5kIG1vcmUgaW1wb3J0YW50bHkgYmVjYXVzZVxuJiM0MztcdCAqIFRESC5QSFlNRU0uUEFHRS5SRUNMQUlNIGVuc3VyZXMgdGhlcmUgYXJlIG5vIG91dHN0YW5kaW5nIHJlYWRlcnMuXG4gXHQgKi9cbi1cdGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylzcC1cdTAwM2VleHRlcm5hbF9zcHQpO1xuJiM0MztcdHRkeF9mcmVlX2NvbnRyb2xfcGFnZShzZXB0X3B0KTtcbiBvdXQ6XG4gXHRzcC1cdTAwM2VleHRlcm5hbF9zcHQgPSBOVUxMO1xuIH1cbkBAIC0yNDU5LDcgJiM0MzsyNTAzLDcgQEAgc3RhdGljIGludCBfX3RkeF90ZF9pbml0KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IHRkX3BhcmFtcyAqdGRfcGFyYW1zLFxuIFxuIFx0cmV0ID0gLUVOT01FTTtcbiBcbi1cdHRkcl9wYWdlID0gYWxsb2NfcGFnZShHRlBfS0VSTkVMX0FDQ09VTlQpO1xuJiM0MztcdHRkcl9wYWdlID0gdGR4X2FsbG9jX2NvbnRyb2xfcGFnZSgpO1xuIFx0aWYgKCF0ZHJfcGFnZSlcbiBcdFx0Z290byBmcmVlX2hraWQ7XG4gXG5AQCAtMjQ3Miw3ICYjNDM7MjUxNiw3IEBAIHN0YXRpYyBpbnQgX190ZHhfdGRfaW5pdChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCB0ZF9wYXJhbXMgKnRkX3BhcmFtcyxcbiBcdFx0Z290byBmcmVlX3RkcjtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGt2bV90ZHgtXHUwMDNldGQudGRjc19ucl9wYWdlczsgaSYjNDM7JiM0MzspIHtcbi1cdFx0dGRjc19wYWdlc1tpXSA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbiYjNDM7XHRcdHRkY3NfcGFnZXNbaV0gPSB0ZHhfYWxsb2NfY29udHJvbF9wYWdlKCk7XG4gXHRcdGlmICghdGRjc19wYWdlc1tpXSlcbiBcdFx0XHRnb3RvIGZyZWVfdGRjcztcbiBcdH1cbkBAIC0yNTkwLDEwICYjNDM7MjYzNCw4IEBAIHN0YXRpYyBpbnQgX190ZHhfdGRfaW5pdChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCB0ZF9wYXJhbXMgKnRkX3BhcmFtcyxcbiB0ZWFyZG93bjpcbiBcdC8qIE9ubHkgZnJlZSBwYWdlcyBub3QgeWV0IGFkZGVkLCBzbyBzdGFydCBhdCAmIzM5O2kmIzM5OyAqL1xuIFx0Zm9yICg7IGkgXHUwMDNjIGt2bV90ZHgtXHUwMDNldGQudGRjc19ucl9wYWdlczsgaSYjNDM7JiM0MzspIHtcbi1cdFx0aWYgKHRkY3NfcGFnZXNbaV0pIHtcbi1cdFx0XHRfX2ZyZWVfcGFnZSh0ZGNzX3BhZ2VzW2ldKTtcbi1cdFx0XHR0ZGNzX3BhZ2VzW2ldID0gTlVMTDtcbi1cdFx0fVxuJiM0MztcdFx0dGR4X2ZyZWVfY29udHJvbF9wYWdlKHRkY3NfcGFnZXNbaV0pO1xuJiM0MztcdFx0dGRjc19wYWdlc1tpXSA9IE5VTEw7XG4gXHR9XG4gXHRpZiAoIWt2bV90ZHgtXHUwMDNldGQudGRjc19wYWdlcylcbiBcdFx0a2ZyZWUodGRjc19wYWdlcyk7XG5AQCAtMjYwOCwxNiAmIzQzOzI2NTAsMTMgQEAgc3RhdGljIGludCBfX3RkeF90ZF9pbml0KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IHRkX3BhcmFtcyAqdGRfcGFyYW1zLFxuIFx0ZnJlZV9jcHVtYXNrX3ZhcihwYWNrYWdlcyk7XG4gXG4gZnJlZV90ZGNzOlxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2Mga3ZtX3RkeC1cdTAwM2V0ZC50ZGNzX25yX3BhZ2VzOyBpJiM0MzsmIzQzOykge1xuLVx0XHRpZiAodGRjc19wYWdlc1tpXSlcbi1cdFx0XHRfX2ZyZWVfcGFnZSh0ZGNzX3BhZ2VzW2ldKTtcbi1cdH1cbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBrdm1fdGR4LVx1MDAzZXRkLnRkY3NfbnJfcGFnZXM7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0dGR4X2ZyZWVfY29udHJvbF9wYWdlKHRkY3NfcGFnZXNbaV0pO1xuIFx0a2ZyZWUodGRjc19wYWdlcyk7XG4gXHRrdm1fdGR4LVx1MDAzZXRkLnRkY3NfcGFnZXMgPSBOVUxMO1xuIFxuIGZyZWVfdGRyOlxuLVx0aWYgKHRkcl9wYWdlKVxuLVx0XHRfX2ZyZWVfcGFnZSh0ZHJfcGFnZSk7XG4mIzQzO1x0dGR4X2ZyZWVfY29udHJvbF9wYWdlKHRkcl9wYWdlKTtcbiBcdGt2bV90ZHgtXHUwMDNldGQudGRyX3BhZ2UgPSBOVUxMO1xuIFxuIGZyZWVfaGtpZDpcbkBAIC0yOTUxLDcgJiM0MzsyOTkwLDcgQEAgc3RhdGljIGludCB0ZHhfdGRfdmNwdV9pbml0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHZjcHVfcmN4KVxuIFx0aW50IHJldCwgaTtcbiBcdHU2NCBlcnI7XG4gXG4tXHRwYWdlID0gYWxsb2NfcGFnZShHRlBfS0VSTkVMX0FDQ09VTlQpO1xuJiM0MztcdHBhZ2UgPSB0ZHhfYWxsb2NfY29udHJvbF9wYWdlKCk7XG4gXHRpZiAoIXBhZ2UpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFx0dGR4LVx1MDAzZXZwLnRkdnByX3BhZ2UgPSBwYWdlO1xuQEAgLTI5NzEsNyAmIzQzOzMwMTAsNyBAQCBzdGF0aWMgaW50IHRkeF90ZF92Y3B1X2luaXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgdmNwdV9yY3gpXG4gXHR9XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBrdm1fdGR4LVx1MDAzZXRkLnRkY3hfbnJfcGFnZXM7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdHBhZ2UgPSBhbGxvY19wYWdlKEdGUF9LRVJORUxfQUNDT1VOVCk7XG4mIzQzO1x0XHRwYWdlID0gdGR4X2FsbG9jX2NvbnRyb2xfcGFnZSgpO1xuIFx0XHRpZiAoIXBhZ2UpIHtcbiBcdFx0XHRyZXQgPSAtRU5PTUVNO1xuIFx0XHRcdGdvdG8gZnJlZV90ZGN4O1xuQEAgLTI5OTMsNyAmIzQzOzMwMzIsNyBAQCBzdGF0aWMgaW50IHRkeF90ZF92Y3B1X2luaXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgdmNwdV9yY3gpXG4gXHRcdFx0ICogbWV0aG9kLCBidXQgdGhlIHJlc3QgYXJlIGZyZWVkIGhlcmUuXG4gXHRcdFx0ICovXG4gXHRcdFx0Zm9yICg7IGkgXHUwMDNjIGt2bV90ZHgtXHUwMDNldGQudGRjeF9ucl9wYWdlczsgaSYjNDM7JiM0MzspIHtcbi1cdFx0XHRcdF9fZnJlZV9wYWdlKHRkeC1cdTAwM2V2cC50ZGN4X3BhZ2VzW2ldKTtcbiYjNDM7XHRcdFx0XHR0ZHhfZnJlZV9jb250cm9sX3BhZ2UodGR4LVx1MDAzZXZwLnRkY3hfcGFnZXNbaV0pO1xuIFx0XHRcdFx0dGR4LVx1MDAzZXZwLnRkY3hfcGFnZXNbaV0gPSBOVUxMO1xuIFx0XHRcdH1cbiBcdFx0XHRyZXR1cm4gLUVJTztcbkBAIC0zMDIxLDE2ICYjNDM7MzA2MCwxNCBAQCBzdGF0aWMgaW50IHRkeF90ZF92Y3B1X2luaXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgdmNwdV9yY3gpXG4gXG4gZnJlZV90ZGN4OlxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mga3ZtX3RkeC1cdTAwM2V0ZC50ZGN4X25yX3BhZ2VzOyBpJiM0MzsmIzQzOykge1xuLVx0XHRpZiAodGR4LVx1MDAzZXZwLnRkY3hfcGFnZXNbaV0pXG4tXHRcdFx0X19mcmVlX3BhZ2UodGR4LVx1MDAzZXZwLnRkY3hfcGFnZXNbaV0pO1xuJiM0MztcdFx0dGR4X2ZyZWVfY29udHJvbF9wYWdlKHRkeC1cdTAwM2V2cC50ZGN4X3BhZ2VzW2ldKTtcbiBcdFx0dGR4LVx1MDAzZXZwLnRkY3hfcGFnZXNbaV0gPSBOVUxMO1xuIFx0fVxuIFx0a2ZyZWUodGR4LVx1MDAzZXZwLnRkY3hfcGFnZXMpO1xuIFx0dGR4LVx1MDAzZXZwLnRkY3hfcGFnZXMgPSBOVUxMO1xuIFxuIGZyZWVfdGR2cHI6XG4tXHRpZiAodGR4LVx1MDAzZXZwLnRkdnByX3BhZ2UpXG4tXHRcdF9fZnJlZV9wYWdlKHRkeC1cdTAwM2V2cC50ZHZwcl9wYWdlKTtcbiYjNDM7XHR0ZHhfZnJlZV9jb250cm9sX3BhZ2UodGR4LVx1MDAzZXZwLnRkdnByX3BhZ2UpO1xuIFx0dGR4LVx1MDAzZXZwLnRkdnByX3BhZ2UgPSBOVUxMO1xuIFx0dGR4LVx1MDAzZXZwLnRkdnByX3BhID0gMDtcbiBcbkBAIC0zNDkzLDYgJiM0MzszNTMwLDEwIEBAIGludCBfX2luaXQgdGR4X2hhcmR3YXJlX3NldHVwKHZvaWQpXG4gXG4gXHR2dF94ODZfb3BzLnNldF9leHRlcm5hbF9zcHRlID0gdGR4X3NlcHRfc2V0X3ByaXZhdGVfc3B0ZTtcbiBcdHZ0X3g4Nl9vcHMuZnJlZV9leHRlcm5hbF9zcHQgPSB0ZHhfc2VwdF9mcmVlX3ByaXZhdGVfc3B0O1xuJiM0MztcbiYjNDM7XHRpZiAodGR4X3N1cHBvcnRzX2R5bmFtaWNfcGFtdCh0ZHhfc3lzaW5mbykpXG4mIzQzO1x0XHR2dF94ODZfb3BzLnRvcHVwX2V4dGVybmFsX2NhY2hlID0gdGR4X3RvcHVwX2V4dGVybmFsX3BhbXRfY2FjaGU7XG4mIzQzO1xuIFx0dnRfeDg2X29wcy5wcm90ZWN0ZWRfYXBpY19oYXNfaW50ZXJydXB0ID0gdGR4X3Byb3RlY3RlZF9hcGljX2hhc19pbnRlcnJ1cHQ7XG4gXHRyZXR1cm4gMDtcbiBcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L3RkeC5oIGIvYXJjaC94ODYva3ZtL3ZteC90ZHguaFxuaW5kZXggYWM4MzIzYTY4YjE2M2EuLmZkMzY4ZTNlZTA2MGI2IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3ZteC90ZHguaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3ZteC90ZHguaFxuQEAgLTcyLDYgJiM0Mzs3Miw4IEBAIHN0cnVjdCB2Y3B1X3RkeCB7XG4gXG4gXHR1NjQgbWFwX2dwYV9uZXh0O1xuIFx0dTY0IG1hcF9ncGFfZW5kO1xuJiM0MztcbiYjNDM7XHRzdHJ1Y3QgdGR4X3BhbXRfY2FjaGUgcGFtdF9jYWNoZTtcbiB9O1xuIFxuIHZvaWQgdGRoX3ZwX3JkX2ZhaWxlZChzdHJ1Y3QgdmNwdV90ZHggKnRkeCwgY2hhciAqdWNsYXNzLCB1MzIgZmllbGQsIHU2NCBlcnIpO1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYyBiL2FyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguY1xuaW5kZXggNDJkZjhlYTQ2NGM0NzIuLmRlYzQ1NzA5ZTQ1NGE2IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmNcbkBAIC0zMCw2ICYjNDM7MzAsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3N1c3BlbmQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3N5c2NvcmVfb3BzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pZHIuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC92bWFsbG9jLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20vcGFnZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3NwZWNpYWxfaW5zbnMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9tc3ItaW5kZXguaFx1MDAzZVxuQEAgLTQ2LDYgJiM0Mzs0Nyw4IEBAXG4gI2luY2x1ZGUgXCYjMzQ7c2VhbWNhbGxfaW50ZXJuYWwuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3RkeC5oXCYjMzQ7XG4gXG4mIzQzO3N0YXRpYyBib29sIHRkeF9lbmFibGVfZHBhbXQgX19yb19hZnRlcl9pbml0O1xuJiM0MztcbiBzdHJ1Y3QgdGR4X21vZHVsZV9zdGF0ZSB7XG4gXHRib29sIGluaXRpYWxpemVkO1xuIFx0Ym9vbCBzeXNpbml0X2RvbmU7XG5AQCAtNjMsNiAmIzQzOzY2LDE0IEBAIHN0YXRpYyBERUZJTkVfUEVSX0NQVShib29sLCB0ZHhfbHBfaW5pdGlhbGl6ZWQpO1xuIFxuIHN0YXRpYyBzdHJ1Y3QgdGRtcl9pbmZvX2xpc3QgdGR4X3RkbXJfbGlzdDtcbiBcbiYjNDM7LypcbiYjNDM7ICogT24gYSBtYWNoaW5lIHdpdGggRHluYW1pYyBQQU1ULCB0aGUga2VybmVsIG1haW50YWlucyBhIHJlZmVyZW5jZSBjb3VudGVyXG4mIzQzOyAqIGZvciBldmVyeSAyTUIgcmFuZ2UuIFRoZSBjb3VudGVyIGluZGljYXRlcyBob3cgbWFueSB1c2VycyB0aGVyZSBhcmUgZm9yXG4mIzQzOyAqIHRoZSBQQU1UIG1lbW9yeSBvZiB0aGUgMk1CIHJhbmdlLiBUaGUga2VybmVsIGFsbG9jYXRlcyBQQU1UIHJlZmNvdW50cyBhdFxuJiM0MzsgKiBpbml0aWFsaXphdGlvbi5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBhdG9taWNfdCAqcGFtdF9yZWZjb3VudHM7XG4mIzQzO1xuIC8qIEFsbCBURFgtdXNhYmxlIG1lbW9yeSByZWdpb25zLiAgUHJvdGVjdGVkIGJ5IG1lbV9ob3RwbHVnX2xvY2suICovXG4gc3RhdGljIExJU1RfSEVBRCh0ZHhfbWVtbGlzdCk7XG4gXG5AQCAtMjUyLDYgJiM0MzsyNjMsNDIgQEAgc3RhdGljIHN0cnVjdCBzeXNjb3JlIHRkeF9zeXNjb3JlID0ge1xuIFx0Lm9wcyA9IFx1MDAyNnRkeF9zeXNjb3JlX29wcyxcbiB9O1xuIFxuJiM0MzsvKlxuJiM0MzsgKiBBbGxvY2F0ZSBQQU1UIHJlZmVyZW5jZSBjb3VudGVycyBmb3IgYWxsIHBoeXNpY2FsIG1lbW9yeS5cbiYjNDM7ICpcbiYjNDM7ICogSXQgY29uc3VtZXMgMk1CIGZvciBldmVyeSAxVEIgb2YgcGh5c2ljYWwgbWVtb3J5LlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIF9faW5pdCBpbnQgaW5pdF9wYW10X3JlZmNvdW50cyh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0c2l6ZV90IHNpemUgPSBESVZfUk9VTkRfVVAobWF4X3BmbiwgUFRSU19QRVJfUFRFKSAqIHNpemVvZigqcGFtdF9yZWZjb3VudHMpO1xuJiM0MztcbiYjNDM7XHRpZiAoIXRkeF9zdXBwb3J0c19keW5hbWljX3BhbXQoXHUwMDI2dGR4X3N5c2luZm8pKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdHBhbXRfcmVmY291bnRzID0gdnphbGxvYyhzaXplKTtcbiYjNDM7XHRpZiAoIXBhbXRfcmVmY291bnRzKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgX19pbml0IHZvaWQgZnJlZV9wYW10X3JlZmNvdW50cyh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCF0ZHhfc3VwcG9ydHNfZHluYW1pY19wYW10KFx1MDAyNnRkeF9zeXNpbmZvKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0dmZyZWUocGFtdF9yZWZjb3VudHMpO1xuJiM0MztcdHBhbXRfcmVmY291bnRzID0gTlVMTDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGF0b21pY190ICp0ZHhfZmluZF9wYW10X3JlZmNvdW50KHVuc2lnbmVkIGxvbmcgcGZuKVxuJiM0Mzt7XG4mIzQzO1x0LyogRmluZCB3aGljaCBQTUQgYSBQRk4gaXMgaW4uICovXG4mIzQzO1x0dW5zaWduZWQgbG9uZyBpbmRleCA9IHBmbiBcdTAwM2VcdTAwM2UgKFBNRF9TSElGVCAtIFBBR0VfU0hJRlQpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gXHUwMDI2cGFtdF9yZWZjb3VudHNbaW5kZXhdO1xuJiM0Mzt9XG4mIzQzO1xuIC8qXG4gICogQWRkIGEgbWVtb3J5IHJlZ2lvbiBhcyBhIFREWCBtZW1vcnkgYmxvY2suICBUaGUgY2FsbGVyIG11c3QgbWFrZSBzdXJlXG4gICogYWxsIG1lbW9yeSByZWdpb25zIGFyZSBhZGRlZCBpbiBhZGRyZXNzIGFzY2VuZGluZyBvcmRlciBhbmQgZG9uJiMzOTt0XG5AQCAtNTEwLDM1ICYjNDM7NTU3LDM3IEBAIHN0YXRpYyBfX2luaXQgaW50IGZpbGxfb3V0X3RkbXJzKHN0cnVjdCBsaXN0X2hlYWQgKnRtYl9saXN0LFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MztzdGF0aWMgX19pbml0IHVuc2lnbmVkIGxvbmcgdGRtcl9nZXRfcGFtdF9iaXRtYXBfc3ooc3RydWN0IHRkbXJfaW5mbyAqdGRtcilcbiYjNDM7e1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgcGFtdF9zeiwgbnJfcGFtdF9lbnRyaWVzO1xuJiM0MztcdGludCBiaXRzX3Blcl9lbnRyeTtcbiYjNDM7XG4mIzQzO1x0Yml0c19wZXJfZW50cnkgPSB0ZHhfc3lzaW5mby50ZG1yLnBhbXRfcGFnZV9iaXRtYXBfZW50cnlfYml0cztcbiYjNDM7XHRucl9wYW10X2VudHJpZXMgPSB0ZG1yLVx1MDAzZXNpemUgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4mIzQzO1x0cGFtdF9zeiA9IERJVl9ST1VORF9VUChucl9wYW10X2VudHJpZXMgKiBiaXRzX3Blcl9lbnRyeSwgQklUU19QRVJfQllURSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBQQUdFX0FMSUdOKHBhbXRfc3opO1xuJiM0Mzt9XG4mIzQzO1xuIC8qXG4gICogQ2FsY3VsYXRlIFBBTVQgc2l6ZSBnaXZlbiBhIFRETVIgYW5kIGEgcGFnZSBzaXplLiAgVGhlIHJldHVybmVkXG4gICogUEFNVCBzaXplIGlzIGFsd2F5cyBhbGlnbmVkIHVwIHRvIDRLIHBhZ2UgYm91bmRhcnkuXG4gICovXG4tc3RhdGljIF9faW5pdCB1bnNpZ25lZCBsb25nIHRkbXJfZ2V0X3BhbXRfc3ooc3RydWN0IHRkbXJfaW5mbyAqdGRtciwgaW50IHBnc3osXG4tXHRcdFx0XHRcdCAgICAgdTE2IHBhbXRfZW50cnlfc2l6ZSlcbiYjNDM7c3RhdGljIF9faW5pdCB1bnNpZ25lZCBsb25nIHRkbXJfZ2V0X3BhbXRfc3ooc3RydWN0IHRkbXJfaW5mbyAqdGRtciwgaW50IHBnc3opXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBwYW10X3N6LCBucl9wYW10X2VudHJpZXM7XG4mIzQzO1x0Y29uc3QgaW50IHRkeF9wZ19zaXplX3NoaWZ0W1REWF9QU19OUl0gPSB7IFBBR0VfU0hJRlQsIFBNRF9TSElGVCwgUFVEX1NISUZUIH07XG4mIzQzO1x0Y29uc3QgdTE2IHBhbXRfZW50cnlfc2l6ZVtURFhfUFNfTlJdID0ge1xuJiM0MztcdFx0dGR4X3N5c2luZm8udGRtci5wYW10XzRrX2VudHJ5X3NpemUsXG4mIzQzO1x0XHR0ZHhfc3lzaW5mby50ZG1yLnBhbXRfMm1fZW50cnlfc2l6ZSxcbiYjNDM7XHRcdHRkeF9zeXNpbmZvLnRkbXIucGFtdF8xZ19lbnRyeV9zaXplLFxuJiM0MztcdH07XG4gXG4tXHRzd2l0Y2ggKHBnc3opIHtcbi1cdGNhc2UgVERYX1BTXzRLOlxuLVx0XHRucl9wYW10X2VudHJpZXMgPSB0ZG1yLVx1MDAzZXNpemUgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4tXHRcdGJyZWFrO1xuLVx0Y2FzZSBURFhfUFNfMk06XG4tXHRcdG5yX3BhbXRfZW50cmllcyA9IHRkbXItXHUwMDNlc2l6ZSBcdTAwM2VcdTAwM2UgUE1EX1NISUZUO1xuLVx0XHRicmVhaztcbi1cdGNhc2UgVERYX1BTXzFHOlxuLVx0XHRucl9wYW10X2VudHJpZXMgPSB0ZG1yLVx1MDAzZXNpemUgXHUwMDNlXHUwMDNlIFBVRF9TSElGVDtcbi1cdFx0YnJlYWs7XG4tXHRkZWZhdWx0OlxuLVx0XHRXQVJOX09OX09OQ0UoMSk7XG4tXHRcdHJldHVybiAwO1xuLVx0fVxuJiM0MztcdG5yX3BhbXRfZW50cmllcyA9IHRkbXItXHUwMDNlc2l6ZSBcdTAwM2VcdTAwM2UgdGR4X3BnX3NpemVfc2hpZnRbcGdzel07XG4mIzQzO1x0cGFtdF9zeiA9IG5yX3BhbXRfZW50cmllcyAqIHBhbXRfZW50cnlfc2l6ZVtwZ3N6XTtcbiBcbi1cdHBhbXRfc3ogPSBucl9wYW10X2VudHJpZXMgKiBwYW10X2VudHJ5X3NpemU7XG4gXHQvKiBURFggcmVxdWlyZXMgUEFNVCBzaXplIG11c3QgYmUgNEsgYWxpZ25lZCAqL1xuLVx0cGFtdF9zeiA9IEFMSUdOKHBhbXRfc3osIFBBR0VfU0laRSk7XG4tXG4tXHRyZXR1cm4gcGFtdF9zejtcbiYjNDM7XHRyZXR1cm4gUEFHRV9BTElHTihwYW10X3N6KTtcbiB9XG4gXG4gLypcbkBAIC01NzYsMTUgJiM0Mzs2MjUsMTEgQEAgc3RhdGljIF9faW5pdCBpbnQgdGRtcl9nZXRfbmlkKHN0cnVjdCB0ZG1yX2luZm8gKnRkbXIsIHN0cnVjdCBsaXN0X2hlYWQgKnRtYl9saXNcbiAgKiB3aXRoaW4gQHRkbXIsIGFuZCBzZXQgdXAgUEFNVHMgZm9yIEB0ZG1yLlxuICAqL1xuIHN0YXRpYyBfX2luaXQgaW50IHRkbXJfc2V0X3VwX3BhbXQoc3RydWN0IHRkbXJfaW5mbyAqdGRtcixcbi1cdFx0XHRcdCAgIHN0cnVjdCBsaXN0X2hlYWQgKnRtYl9saXN0LFxuLVx0XHRcdFx0ICAgdTE2IHBhbXRfZW50cnlfc2l6ZVtdKVxuJiM0MztcdFx0XHRcdCAgIHN0cnVjdCBsaXN0X2hlYWQgKnRtYl9saXN0KVxuIHtcbi1cdHVuc2lnbmVkIGxvbmcgcGFtdF9iYXNlW1REWF9QU19OUl07XG4tXHR1bnNpZ25lZCBsb25nIHBhbXRfc2l6ZVtURFhfUFNfTlJdO1xuLVx0dW5zaWduZWQgbG9uZyB0ZG1yX3BhbXRfYmFzZTtcbiBcdHVuc2lnbmVkIGxvbmcgdGRtcl9wYW10X3NpemU7XG4gXHRzdHJ1Y3QgcGFnZSAqcGFtdDtcbi1cdGludCBwZ3N6LCBuaWQ7XG4mIzQzO1x0aW50IG5pZDtcbiBcbiBcdG5pZCA9IHRkbXJfZ2V0X25pZCh0ZG1yLCB0bWJfbGlzdCk7XG4gXG5AQCAtNTkyLDEzICYjNDM7NjM3LDE4IEBAIHN0YXRpYyBfX2luaXQgaW50IHRkbXJfc2V0X3VwX3BhbXQoc3RydWN0IHRkbXJfaW5mbyAqdGRtcixcbiBcdCAqIENhbGN1bGF0ZSB0aGUgUEFNVCBzaXplIGZvciBlYWNoIFREWCBzdXBwb3J0ZWQgcGFnZSBzaXplXG4gXHQgKiBhbmQgdGhlIHRvdGFsIFBBTVQgc2l6ZS5cbiBcdCAqL1xuLVx0dGRtcl9wYW10X3NpemUgPSAwO1xuLVx0Zm9yIChwZ3N6ID0gVERYX1BTXzRLOyBwZ3N6IFx1MDAzYyBURFhfUFNfTlI7IHBnc3omIzQzOyYjNDM7KSB7XG4tXHRcdHBhbXRfc2l6ZVtwZ3N6XSA9IHRkbXJfZ2V0X3BhbXRfc3oodGRtciwgcGdzeixcbi1cdFx0XHRcdFx0cGFtdF9lbnRyeV9zaXplW3Bnc3pdKTtcbi1cdFx0dGRtcl9wYW10X3NpemUgJiM0Mzs9IHBhbXRfc2l6ZVtwZ3N6XTtcbiYjNDM7XHR0ZG1yLVx1MDAzZXBhbXRfMWdfc2l6ZSA9IHRkbXJfZ2V0X3BhbXRfc3oodGRtciwgVERYX1BTXzFHKTtcbiYjNDM7XHR0ZG1yLVx1MDAzZXBhbXRfMm1fc2l6ZSA9IHRkbXJfZ2V0X3BhbXRfc3oodGRtciwgVERYX1BTXzJNKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHRkeF9zdXBwb3J0c19keW5hbWljX3BhbXQoXHUwMDI2dGR4X3N5c2luZm8pKSB7XG4mIzQzO1x0XHQvKiBXaXRoIER5bmFtaWMgUEFNVCwgUEFNVF80SyBpcyByZXBsYWNlZCB3aXRoIGEgYml0bWFwICovXG4mIzQzO1x0XHR0ZG1yLVx1MDAzZXBhbXRfNGtfc2l6ZSA9IHRkbXJfZ2V0X3BhbXRfYml0bWFwX3N6KHRkbXIpO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHR0ZG1yLVx1MDAzZXBhbXRfNGtfc2l6ZSA9IHRkbXJfZ2V0X3BhbXRfc3oodGRtciwgVERYX1BTXzRLKTtcbiBcdH1cbiBcbiYjNDM7XHR0ZG1yX3BhbXRfc2l6ZSA9IHRkbXItXHUwMDNlcGFtdF80a19zaXplICYjNDM7IHRkbXItXHUwMDNlcGFtdF8ybV9zaXplICYjNDM7IHRkbXItXHUwMDNlcGFtdF8xZ19zaXplO1xuJiM0MztcbiBcdC8qXG4gXHQgKiBBbGxvY2F0ZSBvbmUgY2h1bmsgb2YgcGh5c2ljYWxseSBjb250aWd1b3VzIG1lbW9yeSBmb3IgYWxsXG4gXHQgKiBQQU1Ucy4gIFRoaXMgaGVscHMgbWluaW1pemUgdGhlIFBBTVQmIzM5O3MgdXNlIG9mIHJlc2VydmVkIGFyZWFzXG5AQCAtNjA2LDI1ICYjNDM7NjU2LDE3IEBAIHN0YXRpYyBfX2luaXQgaW50IHRkbXJfc2V0X3VwX3BhbXQoc3RydWN0IHRkbXJfaW5mbyAqdGRtcixcbiBcdCAqL1xuIFx0cGFtdCA9IGFsbG9jX2NvbnRpZ19wYWdlcyh0ZG1yX3BhbXRfc2l6ZSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCwgR0ZQX0tFUk5FTCxcbiBcdFx0XHRuaWQsIFx1MDAyNm5vZGVfb25saW5lX21hcCk7XG4tXHRpZiAoIXBhbXQpXG4tXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuIFx0Lypcbi1cdCAqIEJyZWFrIHRoZSBjb250aWd1b3VzIGFsbG9jYXRpb24gYmFjayB1cCBpbnRvIHRoZVxuLVx0ICogaW5kaXZpZHVhbCBQQU1UcyBmb3IgZWFjaCBwYWdlIHNpemUuXG4mIzQzO1x0ICogdGRtci1cdTAwM2VwYW10XzRrX2Jhc2UgaXMgc3RpbGwgemVybyBzbyB0aGUgZXJyb3JcbiYjNDM7XHQgKiBwYXRoIG9mIHRoZSBjYWxsZXIgd2lsbCBza2lwIGZyZWVpbmcgdGhlIFBBTVQuXG4gXHQgKi9cbi1cdHRkbXJfcGFtdF9iYXNlID0gcGFnZV90b19wZm4ocGFtdCkgXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQ7XG4tXHRmb3IgKHBnc3ogPSBURFhfUFNfNEs7IHBnc3ogXHUwMDNjIFREWF9QU19OUjsgcGdzeiYjNDM7JiM0MzspIHtcbi1cdFx0cGFtdF9iYXNlW3Bnc3pdID0gdGRtcl9wYW10X2Jhc2U7XG4tXHRcdHRkbXJfcGFtdF9iYXNlICYjNDM7PSBwYW10X3NpemVbcGdzel07XG4tXHR9XG4mIzQzO1x0aWYgKCFwYW10KVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG4tXHR0ZG1yLVx1MDAzZXBhbXRfNGtfYmFzZSA9IHBhbXRfYmFzZVtURFhfUFNfNEtdO1xuLVx0dGRtci1cdTAwM2VwYW10XzRrX3NpemUgPSBwYW10X3NpemVbVERYX1BTXzRLXTtcbi1cdHRkbXItXHUwMDNlcGFtdF8ybV9iYXNlID0gcGFtdF9iYXNlW1REWF9QU18yTV07XG4tXHR0ZG1yLVx1MDAzZXBhbXRfMm1fc2l6ZSA9IHBhbXRfc2l6ZVtURFhfUFNfMk1dO1xuLVx0dGRtci1cdTAwM2VwYW10XzFnX2Jhc2UgPSBwYW10X2Jhc2VbVERYX1BTXzFHXTtcbi1cdHRkbXItXHUwMDNlcGFtdF8xZ19zaXplID0gcGFtdF9zaXplW1REWF9QU18xR107XG4mIzQzO1x0dGRtci1cdTAwM2VwYW10XzRrX2Jhc2UgPSBwYWdlX3RvX3BoeXMocGFtdCk7XG4mIzQzO1x0dGRtci1cdTAwM2VwYW10XzJtX2Jhc2UgPSB0ZG1yLVx1MDAzZXBhbXRfNGtfYmFzZSAmIzQzOyB0ZG1yLVx1MDAzZXBhbXRfNGtfc2l6ZTtcbiYjNDM7XHR0ZG1yLVx1MDAzZXBhbXRfMWdfYmFzZSA9IHRkbXItXHUwMDNlcGFtdF8ybV9iYXNlICYjNDM7IHRkbXItXHUwMDNlcGFtdF8ybV9zaXplO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTY1NSwxMCAmIzQzOzY5Nyw3IEBAIHN0YXRpYyBfX2luaXQgdm9pZCB0ZG1yX2RvX3BhbXRfZnVuYyhzdHJ1Y3QgdGRtcl9pbmZvICp0ZG1yLFxuIFx0dGRtcl9nZXRfcGFtdCh0ZG1yLCBcdTAwMjZwYW10X2Jhc2UsIFx1MDAyNnBhbXRfc2l6ZSk7XG4gXG4gXHQvKiBEbyBub3RoaW5nIGlmIFBBTVQgaGFzbiYjMzk7dCBiZWVuIGFsbG9jYXRlZCBmb3IgdGhpcyBURE1SICovXG4tXHRpZiAoIXBhbXRfc2l6ZSlcbi1cdFx0cmV0dXJuO1xuLVxuLVx0aWYgKFdBUk5fT05fT05DRSghcGFtdF9iYXNlKSlcbiYjNDM7XHRpZiAoIXBhbXRfYmFzZSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0cGFtdF9mdW5jKHBhbXRfYmFzZSwgcGFtdF9zaXplKTtcbkBAIC02ODQsMTQgJiM0Mzs3MjMsMTIgQEAgc3RhdGljIF9faW5pdCB2b2lkIHRkbXJzX2ZyZWVfcGFtdF9hbGwoc3RydWN0IHRkbXJfaW5mb19saXN0ICp0ZG1yX2xpc3QpXG4gXG4gLyogQWxsb2NhdGUgYW5kIHNldCB1cCBQQU1UcyBmb3IgYWxsIFRETVJzICovXG4gc3RhdGljIF9faW5pdCBpbnQgdGRtcnNfc2V0X3VwX3BhbXRfYWxsKHN0cnVjdCB0ZG1yX2luZm9fbGlzdCAqdGRtcl9saXN0LFxuLVx0XHRcdFx0XHRzdHJ1Y3QgbGlzdF9oZWFkICp0bWJfbGlzdCxcbi1cdFx0XHRcdFx0dTE2IHBhbXRfZW50cnlfc2l6ZVtdKVxuJiM0MztcdFx0XHRcdCBzdHJ1Y3QgbGlzdF9oZWFkICp0bWJfbGlzdClcbiB7XG4gXHRpbnQgaSwgcmV0ID0gMDtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHRkbXJfbGlzdC1cdTAwM2Vucl9jb25zdW1lZF90ZG1yczsgaSYjNDM7JiM0MzspIHtcbi1cdFx0cmV0ID0gdGRtcl9zZXRfdXBfcGFtdCh0ZG1yX2VudHJ5KHRkbXJfbGlzdCwgaSksIHRtYl9saXN0LFxuLVx0XHRcdFx0cGFtdF9lbnRyeV9zaXplKTtcbiYjNDM7XHRcdHJldCA9IHRkbXJfc2V0X3VwX3BhbXQodGRtcl9lbnRyeSh0ZG1yX2xpc3QsIGkpLCB0bWJfbGlzdCk7XG4gXHRcdGlmIChyZXQpXG4gXHRcdFx0Z290byBlcnI7XG4gXHR9XG5AQCAtOTY4LDE4ICYjNDM7MTAwNSwxMyBAQCBzdGF0aWMgX19pbml0IGludCBjb25zdHJ1Y3RfdGRtcnMoc3RydWN0IGxpc3RfaGVhZCAqdG1iX2xpc3QsXG4gXHRcdFx0XHQgIHN0cnVjdCB0ZG1yX2luZm9fbGlzdCAqdGRtcl9saXN0LFxuIFx0XHRcdFx0ICBzdHJ1Y3QgdGR4X3N5c19pbmZvX3RkbXIgKnN5c2luZm9fdGRtcilcbiB7XG4tXHR1MTYgcGFtdF9lbnRyeV9zaXplW1REWF9QU19OUl0gPSB7XG4tXHRcdHN5c2luZm9fdGRtci1cdTAwM2VwYW10XzRrX2VudHJ5X3NpemUsXG4tXHRcdHN5c2luZm9fdGRtci1cdTAwM2VwYW10XzJtX2VudHJ5X3NpemUsXG4tXHRcdHN5c2luZm9fdGRtci1cdTAwM2VwYW10XzFnX2VudHJ5X3NpemUsXG4tXHR9O1xuIFx0aW50IHJldDtcbiBcbiBcdHJldCA9IGZpbGxfb3V0X3RkbXJzKHRtYl9saXN0LCB0ZG1yX2xpc3QpO1xuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbi1cdHJldCA9IHRkbXJzX3NldF91cF9wYW10X2FsbCh0ZG1yX2xpc3QsIHRtYl9saXN0LCBwYW10X2VudHJ5X3NpemUpO1xuJiM0MztcdHJldCA9IHRkbXJzX3NldF91cF9wYW10X2FsbCh0ZG1yX2xpc3QsIHRtYl9saXN0KTtcbiBcdGlmIChyZXQpXG4gXHRcdHJldHVybiByZXQ7XG4gXG5AQCAtOTk4LDYgJiM0MzsxMDMwLDggQEAgc3RhdGljIF9faW5pdCBpbnQgY29uc3RydWN0X3RkbXJzKHN0cnVjdCBsaXN0X2hlYWQgKnRtYl9saXN0LFxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4mIzQzOyNkZWZpbmUgVERYX1NZU19DT05GSUdfRFlOQU1JQ19QQU1UXHRCSVQoMTYpXG4mIzQzO1xuIHN0YXRpYyBfX2luaXQgaW50IGNvbmZpZ190ZHhfbW9kdWxlKHN0cnVjdCB0ZG1yX2luZm9fbGlzdCAqdGRtcl9saXN0LFxuIFx0XHRcdFx0ICAgIHU2NCBnbG9iYWxfa2V5aWQpXG4ge1xuQEAgLTEwMjYsNiAmIzQzOzEwNjAsMTIgQEAgc3RhdGljIF9faW5pdCBpbnQgY29uZmlnX3RkeF9tb2R1bGUoc3RydWN0IHRkbXJfaW5mb19saXN0ICp0ZG1yX2xpc3QsXG4gXHRhcmdzLnJjeCA9IF9fcGEodGRtcl9wYV9hcnJheSk7XG4gXHRhcmdzLnJkeCA9IHRkbXJfbGlzdC1cdTAwM2Vucl9jb25zdW1lZF90ZG1ycztcbiBcdGFyZ3MucjggPSBnbG9iYWxfa2V5aWQ7XG4mIzQzO1xuJiM0MztcdGlmICh0ZHhfc3VwcG9ydHNfZHluYW1pY19wYW10KFx1MDAyNnRkeF9zeXNpbmZvKSkge1xuJiM0MztcdFx0cHJfaW5mbyhcJiMzNDtFbmFibGUgRHluYW1pYyBQQU1UXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdGFyZ3MucjggfD0gVERYX1NZU19DT05GSUdfRFlOQU1JQ19QQU1UO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRyZXQgPSBzZWFtY2FsbF9wcmVycihUREhfU1lTX0NPTkZJRywgXHUwMDI2YXJncyk7XG4gXG4gXHQvKiBGcmVlIHRoZSBhcnJheSBhcyBpdCBpcyBub3QgcmVxdWlyZWQgYW55bW9yZS4gKi9cbkBAIC0xMTY3LDEwICYjNDM7MTIwNywxNCBAQCBzdGF0aWMgX19pbml0IGludCBpbml0X3RkeF9tb2R1bGUodm9pZClcbiBcdCAqL1xuIFx0Z2V0X29ubGluZV9tZW1zKCk7XG4gXG4tXHRyZXQgPSBidWlsZF90ZHhfbWVtbGlzdChcdTAwMjZ0ZHhfbWVtbGlzdCk7XG4mIzQzO1x0cmV0ID0gaW5pdF9wYW10X3JlZmNvdW50cygpO1xuIFx0aWYgKHJldClcbiBcdFx0Z290byBvdXRfcHV0X3RkeG1lbTtcbiBcbiYjNDM7XHRyZXQgPSBidWlsZF90ZHhfbWVtbGlzdChcdTAwMjZ0ZHhfbWVtbGlzdCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gZXJyX2ZyZWVfcGFtdF9yZWZjb3VudHM7XG4mIzQzO1xuIFx0LyogQWxsb2NhdGUgZW5vdWdoIHNwYWNlIGZvciBjb25zdHJ1Y3RpbmcgVERNUnMgKi9cbiBcdHJldCA9IGFsbG9jX3RkbXJfbGlzdChcdTAwMjZ0ZHhfdGRtcl9saXN0LCBcdTAwMjZ0ZHhfc3lzaW5mby50ZG1yKTtcbiBcdGlmIChyZXQpXG5AQCAtMTIyMCw2ICYjNDM7MTI2NCw4IEBAIHN0YXRpYyBfX2luaXQgaW50IGluaXRfdGR4X21vZHVsZSh2b2lkKVxuIFx0ZnJlZV90ZG1yX2xpc3QoXHUwMDI2dGR4X3RkbXJfbGlzdCk7XG4gZXJyX2ZyZWVfdGR4bWVtOlxuIFx0ZnJlZV90ZHhfbWVtbGlzdChcdTAwMjZ0ZHhfbWVtbGlzdCk7XG4mIzQzO2Vycl9mcmVlX3BhbXRfcmVmY291bnRzOlxuJiM0MztcdGZyZWVfcGFtdF9yZWZjb3VudHMoKTtcbiBcdGdvdG8gb3V0X3B1dF90ZHhtZW07XG4gfVxuIFxuQEAgLTIwMDMsNiAmIzQzOzIwNDksMjg4IEBAIHU2NCB0ZGhfcGh5bWVtX3BhZ2Vfd2JpbnZkX2hraWQodTY0IGhraWQsIGt2bV9wZm5fdCBwZm4pXG4gfVxuIEVYUE9SVF9TWU1CT0xfRk9SX0tWTSh0ZGhfcGh5bWVtX3BhZ2Vfd2JpbnZkX2hraWQpO1xuIFxuJiM0Mztib29sIHRkeF9zdXBwb3J0c19keW5hbWljX3BhbXQoY29uc3Qgc3RydWN0IHRkeF9zeXNfaW5mbyAqc3lzaW5mbylcbiYjNDM7e1xuJiM0MztcdHJldHVybiBzeXNpbmZvLVx1MDAzZWZlYXR1cmVzLnRkeF9mZWF0dXJlczAgXHUwMDI2IFREWF9GRUFUVVJFUzBfRFlOQU1JQ19QQU1UIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAgICB0ZHhfZW5hYmxlX2RwYW10O1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfRk9SX0tWTSh0ZHhfc3VwcG9ydHNfZHluYW1pY19wYW10KTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBzdHJ1Y3QgcGFnZSAqdGR4X2FsbG9jX3BhZ2VfcGFtdF9jYWNoZShzdHJ1Y3QgdGR4X3BhbXRfY2FjaGUgKmNhY2hlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHBhZ2UgKnBhZ2U7XG4mIzQzO1xuJiM0MztcdHBhZ2UgPSBsaXN0X2ZpcnN0X2VudHJ5X29yX251bGwoXHUwMDI2Y2FjaGUtXHUwMDNlcGFnZV9saXN0LCBzdHJ1Y3QgcGFnZSwgbHJ1KTtcbiYjNDM7XHRpZiAocGFnZSkge1xuJiM0MztcdFx0bGlzdF9kZWwoXHUwMDI2cGFnZS1cdTAwM2VscnUpO1xuJiM0MztcdFx0Y2FjaGUtXHUwMDNlY250LS07XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gcGFnZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHN0cnVjdCBwYWdlICphbGxvY19kcGFtdF9wYWdlKHN0cnVjdCB0ZHhfcGFtdF9jYWNoZSAqY2FjaGUpXG4mIzQzO3tcbiYjNDM7XHRpZiAoY2FjaGUpXG4mIzQzO1x0XHRyZXR1cm4gdGR4X2FsbG9jX3BhZ2VfcGFtdF9jYWNoZShjYWNoZSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBhbGxvY19wYWdlKEdGUF9LRVJORUxfQUNDT1VOVCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYWxsb2NfcGFtdF9hcnJheShzdHJ1Y3QgcGFnZSAqKnBhbXRfcGFnZXMsIHN0cnVjdCB0ZHhfcGFtdF9jYWNoZSAqY2FjaGUpXG4mIzQzO3tcbiYjNDM7XHRpbnQgaSwgajtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgVERYX0RQQU1UX0VOVFJZX1BBR0VfQ05UOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0cGFtdF9wYWdlc1tpXSA9IGFsbG9jX2RwYW10X3BhZ2UoY2FjaGUpO1xuJiM0MztcdFx0aWYgKCFwYW10X3BhZ2VzW2ldKVxuJiM0MztcdFx0XHRnb3RvIGVycjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7ZXJyOlxuJiM0MztcdGZvciAoaiA9IDA7IGogXHUwMDNjIGk7IGomIzQzOyYjNDM7KVxuJiM0MztcdFx0X19mcmVlX3BhZ2UocGFtdF9wYWdlc1tqXSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAtRU5PTUVNO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBmcmVlX3BhbXRfYXJyYXkoc3RydWN0IHBhZ2UgKipwYW10X3BhZ2VzKVxuJiM0Mzt7XG4mIzQzO1x0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIFREWF9EUEFNVF9FTlRSWV9QQUdFX0NOVDsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBSZXNldCBwYWdlcyB1bmNvbmRpdGlvbmFsbHkgdG8gY292ZXIgY2FzZXNcbiYjNDM7XHRcdCAqIHdoZXJlIHRoZXkgd2VyZSBwYXNzZWQgdG8gdGhlIFREWCBtb2R1bGUuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdHRkeF9xdWlya19yZXNldF9wYWRkcihwYWdlX3RvX3BoeXMocGFtdF9wYWdlc1tpXSksIFBBR0VfU0laRSk7XG4mIzQzO1xuJiM0MztcdFx0X19mcmVlX3BhZ2UocGFtdF9wYWdlc1tpXSk7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBDYWxjdWxhdGUgdGhlIGFyZyBuZWVkZWQgZm9yIG9wZXJhdGluZyBvbiB0aGUgRFBBTVQgYmFja2luZyBmb3JcbiYjNDM7ICogYSBnaXZlbiA0S0IgcGFnZS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB1NjQgcGFtdF8ybWJfYXJnKGt2bV9wZm5fdCBwZm4pXG4mIzQzO3tcbiYjNDM7XHQvKiBBcmcgdmFsdWUgd2lsbCBzcGVjaWZ5IGEgMk1CIHJlZ2lvbiBvZiBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlLiAqL1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgaHBhXzJtYiA9IEFMSUdOX0RPV04ocGZuIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZULCBQTURfU0laRSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBocGFfMm1iIHwgVERYX1BTXzJNO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBBZGQgUEFNVCBiYWNraW5nIGZvciB0aGUgMk1CIHJlZ2lvbiBzdXJyb3VuZGluZyB0aGUgZ2l2ZW4gcGZuLiAqL1xuJiM0MztzdGF0aWMgdTY0IHRkaF9waHltZW1fcGFtdF9hZGQoa3ZtX3Bmbl90IHBmbiwgc3RydWN0IHBhZ2UgKipwYW10X3BhZ2VzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHRkeF9tb2R1bGVfYXJncyBhcmdzID0ge1xuJiM0MztcdFx0LnJjeCA9IHBhbXRfMm1iX2FyZyhwZm4pLFxuJiM0MztcdFx0LnJkeCA9IHBhZ2VfdG9fcGh5cyhwYW10X3BhZ2VzWzBdKSxcbiYjNDM7XHRcdC5yOCA9IHBhZ2VfdG9fcGh5cyhwYW10X3BhZ2VzWzFdKSxcbiYjNDM7XHR9O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gc2VhbWNhbGwoVERIX1BIWU1FTV9QQU1UX0FERCwgXHUwMDI2YXJncyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIFJlbW92ZSBQQU1UIGJhY2tpbmcgZm9yIHRoZSAyTUIgcmVnaW9uIHN1cnJvdW5kaW5nIHRoZSBnaXZlbiBwZm4uICovXG4mIzQzO3N0YXRpYyB1NjQgdGRoX3BoeW1lbV9wYW10X3JlbW92ZShrdm1fcGZuX3QgcGZuLCBzdHJ1Y3QgcGFnZSAqKnBhbXRfcGFnZXMpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgdGR4X21vZHVsZV9hcmdzIGFyZ3MgPSB7XG4mIzQzO1x0XHQucmN4ID0gcGFtdF8ybWJfYXJnKHBmbiksXG4mIzQzO1x0fTtcbiYjNDM7XHR1NjQgcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBzZWFtY2FsbF9yZXQoVERIX1BIWU1FTV9QQU1UX1JFTU9WRSwgXHUwMDI2YXJncyk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdC8qIENvcHkgUEFNVCBwYWdlcyBvdXQgb2YgdGhlIHN0cnVjdCBwZXIgdGhlIFREWCBBQkkgKi9cbiYjNDM7XHRwYW10X3BhZ2VzWzBdID0gcGh5c190b19wYWdlKGFyZ3MucmR4KTtcbiYjNDM7XHRwYW10X3BhZ2VzWzFdID0gcGh5c190b19wYWdlKGFyZ3MucjgpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogU2VyaWFsaXplcyBhZGRpbmcvcmVtb3ZpbmcgUEFNVCBtZW1vcnkgKi9cbiYjNDM7c3RhdGljIERFRklORV9TUElOTE9DSyhwYW10X2xvY2spO1xuJiM0MztcbiYjNDM7LyogQnVtcCBQQU1UIHJlZmNvdW50IGZvciB0aGUgZ2l2ZW4gcGZuIGFuZCBhbGxvY2F0ZSBQQU1UIGJhY2tpbmcgaWYgbmVlZGVkLiAqL1xuJiM0MztpbnQgdGR4X3BhbXRfZ2V0KGt2bV9wZm5fdCBwZm4sIHN0cnVjdCB0ZHhfcGFtdF9jYWNoZSAqY2FjaGUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcGFnZSAqcGFtdF9wYWdlc1tURFhfRFBBTVRfRU5UUllfUEFHRV9DTlRdO1xuJiM0MztcdGF0b21pY190ICpwYW10X3JlZmNvdW50O1xuJiM0MztcdHU2NCB0ZHhfc3RhdHVzO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGlmICghdGR4X3N1cHBvcnRzX2R5bmFtaWNfcGFtdChcdTAwMjZ0ZHhfc3lzaW5mbykpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0cGFtdF9yZWZjb3VudCA9IHRkeF9maW5kX3BhbXRfcmVmY291bnQocGZuKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBJZiB0aGUgcGFtdCBwYWdlIGlzIGFscmVhZHkgYWRkZWQgKGkuZS4gcmVmY291bnQgXHUwMDNlPSAxKSxcbiYjNDM7XHQgKiB0aGVuIGp1c3QgaW5jcmVtZW50IHRoZSByZWZjb3VudC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoYXRvbWljX2luY19ub3RfemVybyhwYW10X3JlZmNvdW50KSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBhbGxvY19wYW10X2FycmF5KHBhbXRfcGFnZXMsIGNhY2hlKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0c3Bpbl9sb2NrKFx1MDAyNnBhbXRfbG9jayk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogVW5saWtlIHRkeF9wYW10X3B1dCgpIHdoaWNoIHVzZXMgYXRvbWljX2RlY19hbmRfbG9jaygpIHRvXG4mIzQzO1x0ICogYXRvbWljYWxseSBoYW5kbGUgdGhlIDEtXHUwMDNlMCB0cmFuc2l0aW9uLCB0aGUgZ2V0IHNpZGUgaGFzIG5vXG4mIzQzO1x0ICogZXF1aXZhbGVudCBjb21iaW5lZCBwcmltaXRpdmUgZm9yIDAtXHUwMDNlMS4gUmVjaGVjayB1bmRlciB0aGVcbiYjNDM7XHQgKiBsb2NrIHNpbmNlIGFub3RoZXIgZ2V0IG1heSBoYXZlIGFscmVhZHkgZG9uZSB0aGUgMC1cdTAwM2UxXG4mIzQzO1x0ICogdHJhbnNpdGlvbiBhZnRlciBib3RoIHNhdyBhdG9taWNfaW5jX25vdF96ZXJvKCkgZmFpbC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoYXRvbWljX2luY19ub3RfemVybyhwYW10X3JlZmNvdW50KSlcbiYjNDM7XHRcdGdvdG8gb3V0X2ZyZWU7XG4mIzQzO1xuJiM0MztcdHRkeF9zdGF0dXMgPSB0ZGhfcGh5bWVtX3BhbXRfYWRkKHBmbiwgcGFtdF9wYWdlcyk7XG4mIzQzO1x0aWYgKFdBUk5fT05fT05DRSh0ZHhfc3RhdHVzICE9IFREWF9TVUNDRVNTKSkge1xuJiM0MztcdFx0cmV0ID0gLUVJTztcbiYjNDM7XHRcdGdvdG8gb3V0X2ZyZWU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFRoZSByZWZjb3VudCBpcyB6ZXJvLCBhbmQgdGhpcyBsb2NrZWQgcGF0aCBpcyB0aGVcbiYjNDM7XHQgKiBvbmx5IHdheSB0byBpbmNyZWFzZSBpdCBmcm9tIDAtXHUwMDNlMS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRhdG9taWNfc2V0KHBhbXRfcmVmY291bnQsIDEpO1xuJiM0MztcdHNwaW5fdW5sb2NrKFx1MDAyNnBhbXRfbG9jayk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztvdXRfZnJlZTpcbiYjNDM7XHRzcGluX3VubG9jayhcdTAwMjZwYW10X2xvY2spO1xuJiM0MztcdGZyZWVfcGFtdF9hcnJheShwYW10X3BhZ2VzKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0ZPUl9LVk0odGR4X3BhbXRfZ2V0KTtcbiYjNDM7XG4mIzQzOy8qIERyb3AgUEFNVCByZWZjb3VudCBmb3IgdGhlIGdpdmVuIHBmbiBhbmQgZnJlZSBQQU1UIGJhY2tpbmcgaWYgbmVlZGVkLiAqL1xuJiM0Mzt2b2lkIHRkeF9wYW10X3B1dChrdm1fcGZuX3QgcGZuKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHBhZ2UgKnBhbXRfcGFnZXNbVERYX0RQQU1UX0VOVFJZX1BBR0VfQ05UXSA9IHt9O1xuJiM0MztcdGF0b21pY190ICpwYW10X3JlZmNvdW50O1xuJiM0MztcdHU2NCB0ZHhfc3RhdHVzO1xuJiM0MztcbiYjNDM7XHRpZiAoIXRkeF9zdXBwb3J0c19keW5hbWljX3BhbXQoXHUwMDI2dGR4X3N5c2luZm8pKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRwYW10X3JlZmNvdW50ID0gdGR4X2ZpbmRfcGFtdF9yZWZjb3VudChwZm4pO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIElmIHRoZXJlIGlzIG1vcmUgdGhhbiAxIHJlZmVyZW5jZSBvbiB0aGUgcGFtdCBwYWdlLCBkb24mIzM5O3RcbiYjNDM7XHQgKiByZW1vdmUgaXQgeWV0LiBKdXN0IGRlY3JlbWVudCB0aGUgcmVmY291bnQuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKCFhdG9taWNfZGVjX2FuZF9sb2NrKHBhbXRfcmVmY291bnQsIFx1MDAyNnBhbXRfbG9jaykpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHRkeF9zdGF0dXMgPSB0ZGhfcGh5bWVtX3BhbXRfcmVtb3ZlKHBmbiwgcGFtdF9wYWdlcyk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogRG9uJiMzOTt0IGZyZWUgcGFtdF9wYWdlcyBhcyBpdCBjb3VsZCBob2xkIGdhcmJhZ2Ugd2hlblxuJiM0MztcdCAqIHRkaF9waHltZW1fcGFtdF9yZW1vdmUoKSBmYWlscy4gIERvbiYjMzk7dCBwYW5pYy9CVUdfT04oKSwgYXNcbiYjNDM7XHQgKiB0aGVyZSBpcyBubyByaXNrIG9mIGRhdGEgY29ycnVwdGlvbiwgYnV0IGRvIHllbGwgbG91ZGx5IGFzXG4mIzQzO1x0ICogZmFpbHVyZSBpbmRpY2F0ZXMgYSBrZXJuZWwgYnVnLCBtZW1vcnkgaXMgYmVpbmcgbGVha2VkLCBhbmRcbiYjNDM7XHQgKiB0aGUgZGFuZ2xpbmcgUEFNVCBlbnRyeSBtYXkgY2F1c2UgZnV0dXJlIG9wZXJhdGlvbnMgdG8gZmFpbC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoV0FSTl9PTl9PTkNFKHRkeF9zdGF0dXMgIT0gVERYX1NVQ0NFU1MpKSB7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogYXRvbWljX2RlY19hbmRfbG9jaygpIGFscmVhZHkgZGVjcmVtZW50ZWQgaXQgdG8gMCxcbiYjNDM7XHRcdCAqIGJ1dCB0aGUgUEFNVCBlbnRyeSBzdGlsbCBleGlzdHMgc2luY2UgUkVNT1ZFIGZhaWxlZC5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0YXRvbWljX3NldChwYW10X3JlZmNvdW50LCAxKTtcbiYjNDM7XHRcdGdvdG8gb3V0X3VubG9jaztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHNwaW5fdW5sb2NrKFx1MDAyNnBhbXRfbG9jayk7XG4mIzQzO1x0ZnJlZV9wYW10X2FycmF5KHBhbXRfcGFnZXMpO1xuJiM0MztcdHJldHVybjtcbiYjNDM7b3V0X3VubG9jazpcbiYjNDM7XHRzcGluX3VubG9jayhcdTAwMjZwYW10X2xvY2spO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfRk9SX0tWTSh0ZHhfcGFtdF9wdXQpO1xuJiM0MztcbiYjNDM7dm9pZCB0ZHhfZnJlZV9wYW10X2NhY2hlKHN0cnVjdCB0ZHhfcGFtdF9jYWNoZSAqY2FjaGUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbiYjNDM7XG4mIzQzO1x0d2hpbGUgKChwYWdlID0gdGR4X2FsbG9jX3BhZ2VfcGFtdF9jYWNoZShjYWNoZSkpKVxuJiM0MztcdFx0X19mcmVlX3BhZ2UocGFnZSk7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTF9GT1JfS1ZNKHRkeF9mcmVlX3BhbXRfY2FjaGUpO1xuJiM0MztcbiYjNDM7aW50IHRkeF90b3B1cF9wYW10X2NhY2hlKHN0cnVjdCB0ZHhfcGFtdF9jYWNoZSAqY2FjaGUsIHVuc2lnbmVkIGxvbmcgbnBhZ2VzKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKFdBUk5fT05fT05DRSghdGR4X3N1cHBvcnRzX2R5bmFtaWNfcGFtdChcdTAwMjZ0ZHhfc3lzaW5mbykpKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdG5wYWdlcyAqPSBURFhfRFBBTVRfRU5UUllfUEFHRV9DTlQ7XG4mIzQzO1xuJiM0MztcdHdoaWxlIChjYWNoZS1cdTAwM2VjbnQgXHUwMDNjIG5wYWdlcykge1xuJiM0MztcdFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBhbGxvY19wYWdlKEdGUF9LRVJORUxfQUNDT1VOVCk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKCFwYWdlKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XG4mIzQzO1x0XHRsaXN0X2FkZChcdTAwMjZwYWdlLVx1MDAzZWxydSwgXHUwMDI2Y2FjaGUtXHUwMDNlcGFnZV9saXN0KTtcbiYjNDM7XHRcdGNhY2hlLVx1MDAzZWNudCYjNDM7JiM0Mzs7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0ZPUl9LVk0odGR4X3RvcHVwX3BhbXRfY2FjaGUpO1xuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogUmV0dXJuIGEgcGFnZSB0aGF0IGNhbiBiZSBnaWZ0ZWQgdG8gdGhlIFREWC1Nb2R1bGUgZm9yIHVzZSBhcyBhIFwmIzM0O2NvbnRyb2xcJiMzNDtcbiYjNDM7ICogcGFnZSwgaS5lLiBwYWdlcyB0aGF0IGFyZSB1c2VkIGZvciBjb250cm9sIHN0cnVjdHVyZXMgZm9yIGEgZ2l2ZW4gVERYXG4mIzQzOyAqIGd1ZXN0LCBhbmQgdGh1cyBvYnRhaW4gVERYIHByb3RlY3Rpb25zLCBpbmNsdWRpbmcgUEFNVCB0cmFja2luZy5cbiYjNDM7ICovXG4mIzQzO3N0cnVjdCBwYWdlICp0ZHhfYWxsb2NfY29udHJvbF9wYWdlKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbiYjNDM7XG4mIzQzO1x0cGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbiYjNDM7XHRpZiAoIXBhZ2UpXG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XG4mIzQzO1x0aWYgKHRkeF9wYW10X2dldChwYWdlX3RvX3BmbihwYWdlKSwgTlVMTCkpIHtcbiYjNDM7XHRcdF9fZnJlZV9wYWdlKHBhZ2UpO1xuJiM0MztcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gcGFnZTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0ZPUl9LVk0odGR4X2FsbG9jX2NvbnRyb2xfcGFnZSk7XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBGcmVlIGEgcGFnZSB0aGF0IHdhcyBnaWZ0ZWQgdG8gdGhlIFREWC1Nb2R1bGUgZm9yIHVzZSBhcyBhIGNvbnRyb2xcbiYjNDM7ICogcGFnZS4gQWZ0ZXIgdGhpcywgdGhlIHBhZ2UgaXMgbm8gbG9uZ2VyIHByb3RlY3RlZCBieSBURFguXG4mIzQzOyAqL1xuJiM0Mzt2b2lkIHRkeF9mcmVlX2NvbnRyb2xfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSlcbiYjNDM7e1xuJiM0MztcdGlmICghcGFnZSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0dGR4X3BhbXRfcHV0KHBhZ2VfdG9fcGZuKHBhZ2UpKTtcbiYjNDM7XHRfX2ZyZWVfcGFnZShwYWdlKTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0ZPUl9LVk0odGR4X2ZyZWVfY29udHJvbF9wYWdlKTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgX19pbml0IHRkeF9kcGFtdF9zZXR1cChjaGFyICpzdHIpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4ga3N0cnRvYm9vbChzdHIsIFx1MDAyNnRkeF9lbmFibGVfZHBhbXQpID09IDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO19fc2V0dXAoXCYjMzQ7dGR4X2RwYW10PVwmIzM0OywgdGR4X2RwYW10X3NldHVwKTtcbiYjNDM7XG4gdm9pZCB0ZHhfc3lzX2Rpc2FibGUodm9pZClcbiB7XG4gXHRzdHJ1Y3QgdGR4X21vZHVsZV9hcmdzIGFyZ3MgPSB7fTtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmggYi9hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmhcbmluZGV4IGJkZmQwZTFlMzM3YWMwLi5hODg2YzU0ZGVjYWFkYyAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5oXG5AQCAtNDgsNiAmIzQzOzQ4LDggQEBcbiAjZGVmaW5lIFRESF9TWVNfQ09ORklHXHRcdFx0NDVcbiAjZGVmaW5lIFRESF9TWVNfU0hVVERPV05cdFx0NTJcbiAjZGVmaW5lIFRESF9TWVNfVVBEQVRFXHRcdFx0NTNcbiYjNDM7I2RlZmluZSBUREhfUEhZTUVNX1BBTVRfQUREXHRcdDU4XG4mIzQzOyNkZWZpbmUgVERIX1BIWU1FTV9QQU1UX1JFTU9WRVx0XHQ1OVxuICNkZWZpbmUgVERIX1NZU19ESVNBQkxFXHRcdFx0NjlcbiBcbiAvKlxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHhfZ2xvYmFsX21ldGFkYXRhLmMgYi9hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4X2dsb2JhbF9tZXRhZGF0YS5jXG5pbmRleCBlNDljMzAwZjIzZDQzNS4uODM5M2QyYWE1OWRiZTcgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4X2dsb2JhbF9tZXRhZGF0YS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4X2dsb2JhbF9tZXRhZGF0YS5jXG5AQCAtMSw2ICYjNDM7MSw2IEBAXG4gLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAvKlxuLSAqIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZ1bmN0aW9ucyB0byByZWFkIFREWCBnbG9iYWwgbWV0YWRhdGEuXG4mIzQzOyAqIEZ1bmN0aW9ucyB0byByZWFkIFREWCBnbG9iYWwgbWV0YWRhdGEuXG4gICpcbiAgKiBUaGlzIGZpbGUgZG9lc24mIzM5O3QgY29tcGlsZSBvbiBpdHMgb3duIGFzIGl0IGxhY2tzIG9mIGluY2x1c2lvblxuICAqIG9mIFNFQU1DQUxMIHdyYXBwZXIgcHJpbWl0aXZlIHdoaWNoIHJlYWRzIGdsb2JhbCBtZXRhZGF0YS5cbkBAIC0zMyw2ICYjNDM7MzMsMTggQEAgc3RhdGljIF9faW5pdCBpbnQgZ2V0X3RkeF9zeXNfaW5mb19mZWF0dXJlcyhzdHJ1Y3QgdGR4X3N5c19pbmZvX2ZlYXR1cmVzICpzeXNpbmZcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuJiM0MztzdGF0aWMgX19pbml0IGludCBnZXRfdGR4X3N5c19pbmZvX3RkbXJfZHBhbXQoc3RydWN0IHRkeF9zeXNfaW5mb190ZG1yICpzeXNpbmZvX3RkbXIpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcdHU2NCB2YWw7XG4mIzQzO1xuJiM0MztcdHJldCA9IHJlYWRfc3lzX21ldGFkYXRhX2ZpZWxkKDB4OTEwMDAwMDEwMDAwMDAxMywgXHUwMDI2dmFsKTtcbiYjNDM7XHRpZiAoIXJldClcbiYjNDM7XHRcdHN5c2luZm9fdGRtci1cdTAwM2VwYW10X3BhZ2VfYml0bWFwX2VudHJ5X2JpdHMgPSB2YWw7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIF9faW5pdCBpbnQgZ2V0X3RkeF9zeXNfaW5mb190ZG1yKHN0cnVjdCB0ZHhfc3lzX2luZm9fdGRtciAqc3lzaW5mb190ZG1yKVxuIHtcbiBcdGludCByZXQgPSAwO1xuQEAgLTEyOSw1ICYjNDM7MTQxLDE0IEBAIHN0YXRpYyBfX2luaXQgaW50IGdldF90ZHhfc3lzX2luZm8oc3RydWN0IHRkeF9zeXNfaW5mbyAqc3lzaW5mbylcbiBcdHJldCA9IHJldCA/OiBnZXRfdGR4X3N5c19pbmZvX3RkX2N0cmwoXHUwMDI2c3lzaW5mby1cdTAwM2V0ZF9jdHJsKTtcbiBcdHJldCA9IHJldCA/OiBnZXRfdGR4X3N5c19pbmZvX3RkX2NvbmYoXHUwMDI2c3lzaW5mby1cdTAwM2V0ZF9jb25mKTtcbiBcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFRoZSBrZXJuZWwgc3VwcG9ydHMgdXNpbmcgVERYIHdpdGhvdXQgRHluYW1pYyBQQU1ULCBzb1xuJiM0MztcdCAqIGF2b2lkIHJlcG9ydGluZyBmYWlsdXJlIGlmIGl0JiMzOTtzIG5vdCBzdXBwb3J0ZWQuIERvbiYjMzk7dCB0cnlcbiYjNDM7XHQgKiB0byBzdXBwb3J0IGJ1Z2d5IFREWCBtb2R1bGVzIHRoYXQgYWR2ZXJ0aXNlIER5bmFtaWMgUEFNVFxuJiM0MztcdCAqIGJ1dCBkb24mIzM5O3QgZXhwb3NlIHRoZSBtZXRhZGF0YS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoIXJldCBcdTAwMjZcdTAwMjYgdGR4X3N1cHBvcnRzX2R5bmFtaWNfcGFtdChzeXNpbmZvKSlcbiYjNDM7XHRcdHJldCA9IGdldF90ZHhfc3lzX2luZm9fdGRtcl9kcGFtdChcdTAwMjZzeXNpbmZvLVx1MDAzZXRkbXIpO1xuJiM0MztcbiBcdHJldHVybiByZXQ7XG4gfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDEwOjU1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJTlRFTF9URFhfSE9TVCYjMzQ7LAogICAgJiMzNDtLVk1fSU5URUxfVERYJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGR4X3BhbXRfZ2V0JiMzNDssCiAgICAmIzM0O3RkeF9wYW10X3B1dCYjMzQ7LAogICAgJiMzNDt0ZHhfdG9wdXBfcGFtdF9jYWNoZSYjMzQ7LAogICAgJiMzNDt0ZHhfZnJlZV9wYW10X2NhY2hlJiMzNDssCiAgICAmIzM0O3RkeF9hbGxvY19jb250cm9sX3BhZ2UmIzM0OywKICAgICYjMzQ7dGR4X2ZyZWVfY29udHJvbF9wYWdlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgRHluYW1pYyBQaHlzaWNhbCBBZGRyZXNzIE1ldGFkYXRhIFRhYmxlIChQQU1UKSBzdXBwb3J0IGZvciBJbnRlbCBURFggaW4gS1ZNL3g4Ni4gSXQgYWRkcyBmdW5jdGlvbmFsIGNvcmUga2VybmVsIGxvZ2ljIHRvIGR5bmFtaWNhbGx5IGFsbG9jYXRlIGFuZCBmcmVlIFBBTVQgbWVtb3J5IHBhZ2VzIGZvciBURFggZ3Vlc3RzLCBtb2RpZnlpbmcgS1ZNIE1NVSBhbmQgVERYIGluaXRpYWxpemF0aW9uIHBhdGhzLiBUaGlzIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgcnVubmluZyBvbiBURFgtY2FwYWJsZSBoYXJkd2FyZSAoZS5nLiwgR0NQIEMzIGluc3RhbmNlcykgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG1lbW9yeSBtYW5hZ2VtZW50IGNvcnJlY3RuZXNzIGFuZCBwcmV2ZW50IGxlYWtzIG9yIGNyYXNoZXMgaW4gdGhlIFREWCBob3N0IHN1cHBvcnQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBjZWQyNDEwMmIxMjRjODlhNTY2MjdlN2M5ZjFhM2JhOGE3Y2ZmMzlhCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBKdWwgMjYgMTA6NTU6MjAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dCBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0CmluZGV4IGI1NDkzYTdmOGYyMjgxLi5hMGE3NjcwMjQ2YmM1OCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQKQEAgLTc1MTIsNiAmIzQzOzc1MTIsMTYgQEAgS2VybmVsIHBhcmFtZXRlcnMKIAogCXRkZng9CQlbSFcsRFJNXQogCiYjNDM7CXRkeF9kcGFtdD0KJiM0MzsJCQlbWDg2XSBDb250cm9scyB3aGV0aGVyIFREWCB3aWxsIHVzZSBEeW5hbWljIFBBTVQKJiM0MzsJCQl0byBzYXZlIG1lbW9yeSwgd2hlbiBzdXBwb3J0ZWQuCiYjNDM7CiYjNDM7CQkJVmFsaWQgcGFyYW1ldGVyczogJiMzNDtvbiYjMzQ7LCAmIzM0O29mZiYjMzQ7CiYjNDM7CQkJRGVmYXVsdDogJiMzNDtvZmYmIzM0OwomIzQzOwomIzQzOwkJCUZvciBkZXRhaWxzIHNlZToKJiM0MzsJCQlEb2N1bWVudGF0aW9uL2FyY2gveDg2L3RkeC5yc3QKJiM0MzsKIAl0ZXN0X3N1c3BlbmQ9CVtTVVNQRU5EXQogCQkJRm9ybWF0OiB7ICYjMzQ7bWVtJiMzNDsgfCAmIzM0O3N0YW5kYnkmIzM0OyB8ICYjMzQ7ZnJlZXplJiMzNDsgfVssTl0KIAkJCVNwZWNpZnkgJiMzNDttZW0mIzM0OyAoZm9yIFN1c3BlbmQtdG8tUkFNKSBvciAmIzM0O3N0YW5kYnkmIzM0OyAoZm9yCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FyY2gveDg2L3RkeC5yc3QgYi9Eb2N1bWVudGF0aW9uL2FyY2gveDg2L3RkeC5yc3QKaW5kZXggMzMwMzQ5OWFkNGM2ZjguLmExYzIzMDkyMzA1ODA3IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2FyY2gveDg2L3RkeC5yc3QKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9hcmNoL3g4Ni90ZHgucnN0CkBAIC0yMDAsNiAmIzQzOzIwMCwzNCBAQCByZWZsZWN0cyB0aGUgVENCIG9mIHRoZSBjdXJyZW50bHkgcnVubmluZyBURFggbW9kdWxlIGFuZCB0aGVyZWZvcmUKIGNoYW5nZXMgYWZ0ZXIgYW4gdXBkYXRlLiBCeSBjb250cmFzdCwgVEVFX1RDQl9TVk4gcmVmbGVjdHMgdGhlIFRDQiBhdCBURAogbGF1bmNoIHRpbWUgYW5kIGlzIG5vdCBhZmZlY3RlZC4KIAomIzQzO0R5bmFtaWMgUEFNVAomIzQzOy0tLS0tLS0tLS0tLQomIzQzOwomIzQzO1BoeXNpY2FsIEFkZHJlc3MgTWV0YWRhdGEgVGFibGUgKFBBTVQpIGlzIG1lbW9yeSB0aGF0IHRoZSBURFggbW9kdWxlIG5lZWRzCiYjNDM7dG8ga2VlcCBkYXRhIGFib3V0IGVhY2ggcGFnZSAodGhpbmsgbGlrZSBzdHJ1Y3QgcGFnZSkuIEl0IG5lZWRzIHRvIGJlIGhhbmRlZAomIzQzO3RvIHRoZSBURFggbW9kdWxlIGZvciBpdHMgZXhjbHVzaXZlIHVzZS4gRm9yIG5vcm1hbCBQQU1ULCB0aGlzIGlzIGluc3RhbGxlZAomIzQzO3doZW4gdGhlIFREWCBtb2R1bGUgaXMgZmlyc3QgbG9hZGVkIGFuZCBjb21lcyB0byBhYm91dCAwLjQlIG9mIHN5c3RlbSBtZW1vcnkuCiYjNDM7CiYjNDM7RHluYW1pYyBQQU1UIGlzIGEgVERYIG1vZHVsZSBmZWF0dXJlIHRoYXQgYWxsb3dzIFZNTSB0byBhbGxvY2F0ZSBwYXJ0IG9mIHRoZQomIzQzO1BBTVQgYXMgbmVlZGVkICh0aGUgcGFydHMgZm9yIHRyYWNraW5nIDRLQiBzaXplIHBhZ2VzKS4gVGhlIG90aGVyIHBhZ2Ugc2l6ZXMKJiM0MzsoMUdCIGFuZCAyTUIpIGFyZSBzdGlsbCBhbGxvY2F0ZWQgc3RhdGljYWxseSBhdCB0aGUgdGltZSBvZiBURFggbW9kdWxlCiYjNDM7aW5pdGlhbGl6YXRpb24uIFRoaXMgcmVkdWNlcyB0aGUgYW1vdW50IG9mIG1lbW9yeSB0aGF0IFREWCB1c2VzIHdoaWxlIFREcyBhcmUKJiM0Mztub3QgaW4gdXNlLgomIzQzOwomIzQzO1doZW4gRHluYW1pYyBQQU1UIGlzIGluIHVzZSwgZG1lc2cgc2hvd3MgaXQgbGlrZTo6CiYjNDM7CiYjNDM7ICBbLi5dIHZpcnQvdGR4OiBFbmFibGUgRHluYW1pYyBQQU1UCiYjNDM7ICBbLi5dIHZpcnQvdGR4OiAxMDA5MiBLQiBhbGxvY2F0ZWQgZm9yIFBBTVQKJiM0MzsgIFsuLl0gdmlydC90ZHg6IFREWC1Nb2R1bGUgaW5pdGlhbGl6ZWQKJiM0MzsKJiM0MztEeW5hbWljIFBBTVQgaXMgb25seSBlbmFibGVkIHdoZW4gc3VwcG9ydGVkIGFuZCB0aGUgYGB0ZHhfZHBhbXQ9YGAga2VybmVsCiYjNDM7cGFyYW1ldGVyIGlzIHNldCB0byAmIzM0O29uJiMzNDsuIFRoZSBmZWF0dXJlIGlzIG9mZiBieSBkZWZhdWx0IGJlY2F1c2UgVERYIG1vZHVsZQomIzQzO2ludGVybmFsIGRldGFpbHMgcHJldmVudCBEeW5hbWljIFBBTVQgZnJvbSB3b3JraW5nIG9uIGFsbCBrZXlpZCBwYXJ0aXRpb25pbmcKJiM0Mztjb25maWd1cmF0aW9ucy4gV2hlbiB0aGUgVERYIG1vZHVsZSBpcyBmaXhlZCB0byBpbmNsdWRlIHRoZXNlIGNvbnN0cmFpbnRzIGluCiYjNDM7aXRzIGVudW1lcmF0aW9uIG9mIER5bmFtaWMgUEFNVCBzdXBwb3J0LCBrZXJuZWwgc3VwcG9ydCBjYW4gYmUgY2hhbmdlZCB0bwomIzQzO2RlZmF1bHQgb24uIEZvciBtb3JlIGluZm9ybWF0aW9uLCBjb25zdWx0IHRoZSBJbnRlbCBURFggZG9jdW1lbnRhdGlvbiBhYm91dAomIzQzO0R5bmFtaWMgUEFNVC4KJiM0MzsKIFREWCBJbnRlcmFjdGlvbiB0byBPdGhlciBLZXJuZWwgQ29tcG9uZW50cwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oCmluZGV4IDgzZGM1MDg2MTM4YjM5Li41ODg1NjNkZmU4OGQ1NyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oCkBAIC05OCw2ICYjNDM7OTgsNyBAQCBLVk1fWDg2X09QX09QVElPTkFMX1JFVDAodGRwX2hhc19zbWVwKQogS1ZNX1g4Nl9PUChsb2FkX21tdV9wZ2QpCiBLVk1fWDg2X09QX09QVElPTkFMX1JFVDAoc2V0X2V4dGVybmFsX3NwdGUpCiBLVk1fWDg2X09QX09QVElPTkFMKGZyZWVfZXh0ZXJuYWxfc3B0KQomIzQzO0tWTV9YODZfT1BfT1BUSU9OQUxfUkVUMCh0b3B1cF9leHRlcm5hbF9jYWNoZSkKIEtWTV9YODZfT1AoaGFzX3diaW52ZF9leGl0KQogS1ZNX1g4Nl9PUChnZXRfbDJfdHNjX29mZnNldCkKIEtWTV9YODZfT1AoZ2V0X2wyX3RzY19tdWx0aXBsaWVyKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKaW5kZXggNWY2YzFjZTk2NzNiN2YuLjBkYmY2NTY0ZGQwYzUxIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKQEAgLTE5MjIsNiAmIzQzOzE5MjIsNyBAQCBzdHJ1Y3Qga3ZtX3g4Nl9vcHMgewogCS8qIFVwZGF0ZSBleHRlcm5hbCBwYWdlIHRhYmxlcyBmb3IgcGFnZSB0YWJsZSBhYm91dCB0byBiZSBmcmVlZC4gKi8KIAl2b2lkICgqZnJlZV9leHRlcm5hbF9zcHQpKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tbXVfcGFnZSAqc3ApOwogCiYjNDM7CWludCAoKnRvcHVwX2V4dGVybmFsX2NhY2hlKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBtaW5fbnJfc3B0cyk7CiAKIAlib29sICgqaGFzX3diaW52ZF9leGl0KSh2b2lkKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZHguaAppbmRleCA4OWU5N2Q1NzYxZDg5ZS4uNzkxMDkwMWE3YmEyMWIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RkeC5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RkeC5oCkBAIC0zNiw2ICYjNDM7MzYsNyBAQAogLyogQml0IGRlZmluaXRpb25zIG9mIFREWF9GRUFUVVJFUzAgbWV0YWRhdGEgZmllbGQgKi8KICNkZWZpbmUgVERYX0ZFQVRVUkVTMF9URF9QUkVTRVJWSU5HCUJJVF9VTEwoMSkKICNkZWZpbmUgVERYX0ZFQVRVUkVTMF9OT19SQlBfTU9ECUJJVF9VTEwoMTgpCiYjNDM7I2RlZmluZSBURFhfRkVBVFVSRVMwX0RZTkFNSUNfUEFNVAlCSVRfVUxMKDM2KQogCiAjaWZuZGVmIF9fQVNTRU1CTEVSX18KIApAQCAtMTE4LDEyICYjNDM7MTE5LDM3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB0ZHhfc3VwcG9ydHNfcnVudGltZV91cGRhdGUoY29uc3Qgc3RydWN0IHRkeF9zeXNfaW5mbyAqc3lzaW5mCiAJcmV0dXJuIHN5c2luZm8tJmd0O2ZlYXR1cmVzLnRkeF9mZWF0dXJlczAgJmFtcDsgVERYX0ZFQVRVUkVTMF9URF9QUkVTRVJWSU5HOwogfQogCiYjNDM7Ym9vbCB0ZHhfc3VwcG9ydHNfZHluYW1pY19wYW10KGNvbnN0IHN0cnVjdCB0ZHhfc3lzX2luZm8gKnN5c2luZm8pOwomIzQzOwomIzQzOy8qIFNpbXBsZSBzdHJ1Y3R1cmUgZm9yIHByZS1hbGxvY2F0aW5nIER5bmFtaWMgUEFNVCBwYWdlcyBvdXRzaWRlIG9mIHNwaW5sb2Nrcy4gKi8KJiM0MztzdHJ1Y3QgdGR4X3BhbXRfY2FjaGUgewomIzQzOwlzdHJ1Y3QgbGlzdF9oZWFkIHBhZ2VfbGlzdDsKJiM0MzsJaW50IGNudDsKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCB0ZHhfaW5pdF9wYW10X2NhY2hlKHN0cnVjdCB0ZHhfcGFtdF9jYWNoZSAqY2FjaGUpCiYjNDM7ewomIzQzOwlJTklUX0xJU1RfSEVBRCgmYW1wO2NhY2hlLSZndDtwYWdlX2xpc3QpOwomIzQzOwljYWNoZS0mZ3Q7Y250ID0gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCB0ZHhfZnJlZV9wYW10X2NhY2hlKHN0cnVjdCB0ZHhfcGFtdF9jYWNoZSAqY2FjaGUpOwomIzQzO2ludCB0ZHhfdG9wdXBfcGFtdF9jYWNoZShzdHJ1Y3QgdGR4X3BhbXRfY2FjaGUgKmNhY2hlLCB1bnNpZ25lZCBsb25nIG5wYWdlcyk7CiYjNDM7aW50IHRkeF9wYW10X2dldChrdm1fcGZuX3QgcGZuLCBzdHJ1Y3QgdGR4X3BhbXRfY2FjaGUgKmNhY2hlKTsKJiM0Mzt2b2lkIHRkeF9wYW10X3B1dChrdm1fcGZuX3QgcGZuKTsKJiM0MzsKIGludCB0ZHhfZ3Vlc3Rfa2V5aWRfYWxsb2Modm9pZCk7CiB1MzIgdGR4X2dldF9ucl9ndWVzdF9rZXlpZHModm9pZCk7CiB2b2lkIHRkeF9ndWVzdF9rZXlpZF9mcmVlKHVuc2lnbmVkIGludCBrZXlpZCk7CiAKIHZvaWQgdGR4X3F1aXJrX3Jlc2V0X3BhZGRyKHVuc2lnbmVkIGxvbmcgYmFzZSwgdW5zaWduZWQgbG9uZyBzaXplKTsKIAomIzQzOy8qIE51bWJlciBvZiBQQU1UIHBhZ2VzIHRvIGJlIHByb3ZpZGVkIHRvIFREWCBtb2R1bGUgcGVyIDJNQiByZWdpb24gb2YgUEEgKi8KJiM0MzsjZGVmaW5lIFREWF9EUEFNVF9FTlRSWV9QQUdFX0NOVCAyCiYjNDM7CiYjNDM7c3RydWN0IHBhZ2UgKnRkeF9hbGxvY19jb250cm9sX3BhZ2Uodm9pZCk7CiYjNDM7dm9pZCB0ZHhfZnJlZV9jb250cm9sX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpOwomIzQzOwogc3RydWN0IHRkeF90ZCB7CiAJLyogVEQgcm9vdCBzdHJ1Y3R1cmU6ICovCiAJc3RydWN0IHBhZ2UgKnRkcl9wYWdlOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4X2dsb2JhbF9tZXRhZGF0YS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4X2dsb2JhbF9tZXRhZGF0YS5oCmluZGV4IDQxMTUwZDU0NjU4OWMxLi4yYTQyNTUxZmMzM2NkNiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4X2dsb2JhbF9tZXRhZGF0YS5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RkeF9nbG9iYWxfbWV0YWRhdGEuaApAQCAtMjEsNiAmIzQzOzIxLDkgQEAgc3RydWN0IHRkeF9zeXNfaW5mb190ZG1yIHsKIAl1MTYgcGFtdF80a19lbnRyeV9zaXplOwogCXUxNiBwYW10XzJtX2VudHJ5X3NpemU7CiAJdTE2IHBhbXRfMWdfZW50cnlfc2l6ZTsKJiM0MzsKJiM0MzsJLyogT3B0aW9uYWwgbWV0YWRhdGEsIGlmIER5bmFtaWMgUEFNVCBpcyBzdXBwb3J0ZWQgKi8KJiM0MzsJdTggIHBhbXRfcGFnZV9iaXRtYXBfZW50cnlfYml0czsKIH07CiAKIHN0cnVjdCB0ZHhfc3lzX2luZm9fdGRfY3RybCB7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vbW11L21tdS5jIGIvYXJjaC94ODYva3ZtL21tdS9tbXUuYwppbmRleCAyMzRkMGE5NWFiZjUzNC4uNmRhYjk5NjU0ZjE3MDIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9tbXUvbW11LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL21tdS9tbXUuYwpAQCAtNjE0LDYgJiM0Mzs2MTQsMTAgQEAgc3RhdGljIGludCBtbXVfdG9wdXBfbWVtb3J5X2NhY2hlcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgbWF5YmVfaW5kaXJlY3QpCiAJCQkJCSAgICAgICBQVDY0X1JPT1RfTUFYX0xFVkVMKTsKIAkJaWYgKHIpCiAJCQlyZXR1cm4gcjsKJiM0MzsKJiM0MzsJCXIgPSBrdm1feDg2X2NhbGwodG9wdXBfZXh0ZXJuYWxfY2FjaGUpKHZjcHUsIFBUNjRfUk9PVF9NQVhfTEVWRUwpOwomIzQzOwkJaWYgKHIpCiYjNDM7CQkJcmV0dXJuIHI7CiAJfQogCXIgPSBrdm1fbW11X3RvcHVwX21lbW9yeV9jYWNoZSgmYW1wO3ZjcHUtJmd0O2FyY2gubW11X3NoYWRvd19wYWdlX2NhY2hlLAogCQkJCSAgICAgICBQVDY0X1JPT1RfTUFYX0xFVkVMKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvdGR4LmMgYi9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jCmluZGV4IDU0NWIwM2Q5ZDEwYjgxLi4wOTU3MzExMjU0MGU5OCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3ZteC90ZHguYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jCkBAIC0zNjIsNyAmIzQzOzM2Miw3IEBAIHN0YXRpYyB2b2lkIHRkeF9yZWNsYWltX2NvbnRyb2xfcGFnZShzdHJ1Y3QgcGFnZSAqY3RybF9wYWdlKQogCWlmICh0ZHhfcmVjbGFpbV9wYWdlKGN0cmxfcGFnZSkpCiAJCXJldHVybjsKIAotCV9fZnJlZV9wYWdlKGN0cmxfcGFnZSk7CiYjNDM7CXRkeF9mcmVlX2NvbnRyb2xfcGFnZShjdHJsX3BhZ2UpOwogfQogCiBzdHJ1Y3QgdGR4X2ZsdXNoX3ZwX2FyZyB7CkBAIC01ODksNyAmIzQzOzU4OSw3IEBAIHN0YXRpYyB2b2lkIHRkeF9yZWNsYWltX3RkX2NvbnRyb2xfcGFnZXMoc3RydWN0IGt2bSAqa3ZtKQogCiAJdGR4X3F1aXJrX3Jlc2V0X3BhZGRyKHBhZ2VfdG9fcGh5cyhrdm1fdGR4LSZndDt0ZC50ZHJfcGFnZSksIFBBR0VfU0laRSk7CiAKLQlfX2ZyZWVfcGFnZShrdm1fdGR4LSZndDt0ZC50ZHJfcGFnZSk7CiYjNDM7CXRkeF9mcmVlX2NvbnRyb2xfcGFnZShrdm1fdGR4LSZndDt0ZC50ZHJfcGFnZSk7CiAJa3ZtX3RkeC0mZ3Q7dGQudGRyX3BhZ2UgPSBOVUxMOwogfQogCkBAIC02ODEsNiAmIzQzOzY4MSw4IEBAIGludCB0ZHhfdmNwdV9jcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCWlmICghaXJxY2hpcF9zcGxpdCh2Y3B1LSZndDtrdm0pKQogCQlyZXR1cm4gLUVJTlZBTDsKIAomIzQzOwl0ZHhfaW5pdF9wYW10X2NhY2hlKCZhbXA7dGR4LSZndDtwYW10X2NhY2hlKTsKJiM0MzsKIAlmcHN0YXRlX3NldF9jb25maWRlbnRpYWwoJmFtcDt2Y3B1LSZndDthcmNoLmd1ZXN0X2ZwdSk7CiAJdmNwdS0mZ3Q7YXJjaC5hcGljLSZndDtndWVzdF9hcGljX3Byb3RlY3RlZCA9IHRydWU7CiAJSU5JVF9MSVNUX0hFQUQoJmFtcDt0ZHgtJmd0O3Z0LnBpX3dha2V1cF9saXN0KTsKQEAgLTg2Niw2ICYjNDM7ODY4LDggQEAgdm9pZCB0ZHhfdmNwdV9mcmVlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAlzdHJ1Y3QgdmNwdV90ZHggKnRkeCA9IHRvX3RkeCh2Y3B1KTsKIAlpbnQgaTsKIAomIzQzOwl0ZHhfZnJlZV9wYW10X2NhY2hlKCZhbXA7dGR4LSZndDtwYW10X2NhY2hlKTsKJiM0MzsKIAlpZiAodmNwdS0mZ3Q7Y3B1ICE9IC0xKSB7CiAJCUtWTV9CVUdfT04odGR4LSZndDtzdGF0ZSA9PSBWQ1BVX1REX1NUQVRFX0lOSVRJQUxJWkVELCB2Y3B1LSZndDtrdm0pOwogCQl0ZHhfZmx1c2hfdnBfb25fY3B1KHZjcHUpOwpAQCAtMTYyMSw2ICYjNDM7MTYyNSwxNyBAQCB2b2lkIHRkeF9sb2FkX21tdV9wZ2Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBocGFfdCByb290X2hwYSwgaW50IHBnZF9sZXZlbCkKIAl0ZF92bWNzX3dyaXRlNjQodG9fdGR4KHZjcHUpLCBTSEFSRURfRVBUX1BPSU5URVIsIHJvb3RfaHBhKTsKIH0KIAomIzQzO3N0YXRpYyBpbnQgdGR4X3RvcHVwX2V4dGVybmFsX3BhbXRfY2FjaGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgbWluX25yX3NwdHMpCiYjNDM7ewomIzQzOwkvKgomIzQzOwkgKiBNaW51cyBvbmUgcGFnZSB0byBleGNsdWRlIHRoZSByb290IFNQVCwgYnV0IHBsdXMgb25lIHBhZ2UgZm9yIGEKJiM0MzsJICogcG9zc2libGUgNEtCIHByaXZhdGUgbWFwcGluZy4KJiM0MzsJICovCiYjNDM7CW1pbl9ucl9zcHRzICYjNDM7PSAtMSAmIzQzOyAxOwomIzQzOwomIzQzOwlyZXR1cm4gdGR4X3RvcHVwX3BhbXRfY2FjaGUoJmFtcDt0b190ZHgodmNwdSktJmd0O3BhbXRfY2FjaGUsIG1pbl9ucl9zcHRzKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IHRkeF9tZW1fcGFnZV9hZGQoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4sIGVudW0gcGdfbGV2ZWwgbGV2ZWwsCiAJCQkgICAga3ZtX3Bmbl90IHBmbikKIHsKQEAgLTE2NzksMTYgJiM0MzsxNjk0LDI4IEBAIHN0YXRpYyBzdHJ1Y3QgcGFnZSAqdGR4X3NwdGVfdG9fc2VwdF9wdChzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbiwKIHN0YXRpYyBpbnQgdGR4X3NlcHRfbWFwX25vbmxlYWZfc3B0ZShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbiwKIAkJCQkgICAgIGVudW0gcGdfbGV2ZWwgbGV2ZWwsIHU2NCBuZXdfc3B0ZSkKIHsKJiM0MzsJc3RydWN0IGt2bV92Y3B1ICp2Y3B1ID0ga3ZtX2dldF9ydW5uaW5nX3ZjcHUoKTsKIAlncGFfdCBncGEgPSBnZm5fdG9fZ3BhKGdmbik7CiAJdTY0IGVyciwgZW50cnksIGxldmVsX3N0YXRlOwogCXN0cnVjdCBwYWdlICpzZXB0X3B0OwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlpZiAoS1ZNX0JVR19PTighdmNwdSwga3ZtKSkKJiM0MzsJCXJldHVybiAtRUlPOwogCiAJc2VwdF9wdCA9IHRkeF9zcHRlX3RvX3NlcHRfcHQoa3ZtLCBnZm4sIG5ld19zcHRlLCBsZXZlbCk7CiAJaWYgKCFzZXB0X3B0KQogCQlyZXR1cm4gLUVJTzsKIAomIzQzOwlyZXQgPSB0ZHhfcGFtdF9nZXQocGFnZV90b19wZm4oc2VwdF9wdCksICZhbXA7dG9fdGR4KHZjcHUpLSZndDtwYW10X2NhY2hlKTsKJiM0MzsJaWYgKEtWTV9CVUdfT04ocmV0LCBrdm0pKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKIAllcnIgPSB0ZGhfbWVtX3NlcHRfYWRkKCZhbXA7dG9fa3ZtX3RkeChrdm0pLSZndDt0ZCwgZ3BhLCBsZXZlbCwgc2VwdF9wdCwKIAkJCSAgICAgICAmYW1wO2VudHJ5LCAmYW1wO2xldmVsX3N0YXRlKTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCXRkeF9wYW10X3B1dChwYWdlX3RvX3BmbihzZXB0X3B0KSk7CiYjNDM7CiAJaWYgKHVubGlrZWx5KHRkeF9vcGVyYW5kX2J1c3koZXJyKSkpCiAJCXJldHVybiAtRUJVU1k7CiAKQEAgLTE3MDEsOCAmIzQzOzE3MjgsMTMgQEAgc3RhdGljIGludCB0ZHhfc2VwdF9tYXBfbm9ubGVhZl9zcHRlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLAogc3RhdGljIGludCB0ZHhfc2VwdF9tYXBfbGVhZl9zcHRlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLCBlbnVtIHBnX2xldmVsIGxldmVsLAogCQkJCSAgdTY0IG5ld19zcHRlKQogewomIzQzOwlzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUgPSBrdm1fZ2V0X3J1bm5pbmdfdmNwdSgpOwogCXN0cnVjdCBrdm1fdGR4ICprdm1fdGR4ID0gdG9fa3ZtX3RkeChrdm0pOwogCWt2bV9wZm5fdCBwZm4gPSBzcHRlX3RvX3BmbihuZXdfc3B0ZSk7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWlmIChLVk1fQlVHX09OKCF2Y3B1LCBrdm0pKQomIzQzOwkJcmV0dXJuIC1FSU87CiAKIAkvKiBUT0RPOiBoYW5kbGUgbGFyZ2UgcGFnZXMuICovCiAJaWYgKEtWTV9CVUdfT04obGV2ZWwgIT0gUEdfTEVWRUxfNEssIGt2bSkpCkBAIC0xNzEwLDYgJiM0MzsxNzQyLDEwIEBAIHN0YXRpYyBpbnQgdGR4X3NlcHRfbWFwX2xlYWZfc3B0ZShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbiwgZW51bSBwZ19sZXZlbCBsZXZlCiAKIAlXQVJOX09OX09OQ0UoKG5ld19zcHRlICZhbXA7IFZNWF9FUFRfUldYX01BU0spICE9IFZNWF9FUFRfUldYX01BU0spOwogCiYjNDM7CXJldCA9IHRkeF9wYW10X2dldChwZm4sICZhbXA7dG9fdGR4KHZjcHUpLSZndDtwYW10X2NhY2hlKTsKJiM0MzsJaWYgKEtWTV9CVUdfT04ocmV0LCBrdm0pKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKIAkvKgogCSAqIEVuc3VyZSBwcmVfZmF1bHRfYWxsb3dlZCBpcyByZWFkIGJ5IGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeSgpCiAJICogYmVmb3JlIGt2bV90ZHgtJmd0O3N0YXRlLiAgVXNlcnNwYWNlIG11c3Qgbm90IGJlIGFsbG93ZWQgdG8gcHJlLWZhdWx0CkBAIC0xNzIyLDEwICYjNDM7MTc1OCwxNSBAQCBzdGF0aWMgaW50IHRkeF9zZXB0X21hcF9sZWFmX3NwdGUoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4sIGVudW0gcGdfbGV2ZWwgbGV2ZQogCSAqIElmIHRoZSBURCBpc24mIzM5O3QgZmluYWxpemVkL3J1bm5hYmxlLCB0aGVuIHVzZXJzcGFjZSBpcyBpbml0aWFsaXppbmcKIAkgKiB0aGUgVk0gaW1hZ2UgdmlhIEtWTV9URFhfSU5JVF9NRU1fUkVHSU9OOyBBREQgdGhlIHBhZ2UgdG8gdGhlIFRELgogCSAqLwotCWlmICh1bmxpa2VseShrdm1fdGR4LSZndDtzdGF0ZSAhPSBURF9TVEFURV9SVU5OQUJMRSkpCi0JCXJldHVybiB0ZHhfbWVtX3BhZ2VfYWRkKGt2bSwgZ2ZuLCBsZXZlbCwgcGZuKTsKJiM0MzsJaWYgKGxpa2VseShrdm1fdGR4LSZndDtzdGF0ZSA9PSBURF9TVEFURV9SVU5OQUJMRSkpCiYjNDM7CQlyZXQgPSB0ZHhfbWVtX3BhZ2VfYXVnKGt2bSwgZ2ZuLCBsZXZlbCwgcGZuKTsKJiM0MzsJZWxzZQomIzQzOwkJcmV0ID0gdGR4X21lbV9wYWdlX2FkZChrdm0sIGdmbiwgbGV2ZWwsIHBmbik7CiYjNDM7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQl0ZHhfcGFtdF9wdXQocGZuKTsKIAotCXJldHVybiB0ZHhfbWVtX3BhZ2VfYXVnKGt2bSwgZ2ZuLCBsZXZlbCwgcGZuKTsKJiM0MzsJcmV0dXJuIHJldDsKIH0KIAogLyoKQEAgLTE4MjIsNiAmIzQzOzE4NjMsNyBAQCBzdGF0aWMgaW50IHRkeF9zZXB0X3JlbW92ZV9sZWFmX3NwdGUoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4sCiAJCXJldHVybiAtRUlPOwogCiAJdGR4X3F1aXJrX3Jlc2V0X3BhZGRyKFBGTl9QSFlTKHBmbiksIFBBR0VfU0laRSk7CiYjNDM7CXRkeF9wYW10X3B1dChwZm4pOwogCXJldHVybiAwOwogfQogCkBAIC0xODY1LDYgJiM0MzsxOTA3LDggQEAgc3RhdGljIGludCB0ZHhfc2VwdF9zZXRfcHJpdmF0ZV9zcHRlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLCB1NjQgb2xkX3NwdGUsCiAgKi8KIHN0YXRpYyB2b2lkIHRkeF9zZXB0X2ZyZWVfcHJpdmF0ZV9zcHQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcCkKIHsKJiM0MzsJc3RydWN0IHBhZ2UgKnNlcHRfcHQgPSB2aXJ0X3RvX3BhZ2Uoc3AtJmd0O2V4dGVybmFsX3NwdCk7CiYjNDM7CiAJLyoKIAkgKiBLVk0gZG9lc24mIzM5O3QgKHlldCkgemFwIHBhZ2UgdGFibGUgcGFnZXMgaW4gbWlycm9yIHBhZ2UgdGFibGUgd2hpbGUKIAkgKiBURCBpcyBhY3RpdmUsIHRob3VnaCBndWVzdCBwYWdlcyBtYXBwZWQgaW4gbWlycm9yIHBhZ2UgdGFibGUgY291bGQgYmUKQEAgLTE4NzgsMTUgJiM0MzsxOTIyLDE1IEBAIHN0YXRpYyB2b2lkIHRkeF9zZXB0X2ZyZWVfcHJpdmF0ZV9zcHQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcCkKIAkgKiB0aGUgcGFnZSB0byBwcmV2ZW50IHRoZSBrZXJuZWwgZnJvbSBhY2Nlc3NpbmcgdGhlIGVuY3J5cHRlZCBwYWdlLgogCSAqLwogCWlmIChLVk1fQlVHX09OKGlzX2hraWRfYXNzaWduZWQodG9fa3ZtX3RkeChrdm0pKSwga3ZtKSB8fAotCSAgICB0ZHhfcmVjbGFpbV9wYWdlKHZpcnRfdG9fcGFnZShzcC0mZ3Q7ZXh0ZXJuYWxfc3B0KSkpCiYjNDM7CSAgICB0ZHhfcmVjbGFpbV9wYWdlKHNlcHRfcHQpKQogCQlnb3RvIG91dDsKIAogCS8qCi0JICogSW1tZWRpYXRlbHkgZnJlZSB0aGUgUy1FUFQgcGFnZSBiZWNhdXNlIFJDVS10aW1lIGZyZWUgaXMgdW5uZWNlc3NhcnkKLQkgKiBhZnRlciBUREguUEhZTUVNLlBBR0UuUkVDTEFJTSBlbnN1cmVzIHRoZXJlIGFyZSBubyBvdXRzdGFuZGluZwotCSAqIHJlYWRlcnMuCiYjNDM7CSAqIEltbWVkaWF0ZWx5IGZyZWUgdGhlIFMtRVBUIHBhZ2UgYXMgdGhlIFREWCBzdWJzeXN0ZW0gZG9lc24mIzM5O3Qgc3VwcG9ydAomIzQzOwkgKiBmcmVlaW5nIHBhZ2VzIGZyb20gUkNVIGNhbGxiYWNrcywgYW5kIG1vcmUgaW1wb3J0YW50bHkgYmVjYXVzZQomIzQzOwkgKiBUREguUEhZTUVNLlBBR0UuUkVDTEFJTSBlbnN1cmVzIHRoZXJlIGFyZSBubyBvdXRzdGFuZGluZyByZWFkZXJzLgogCSAqLwotCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylzcC0mZ3Q7ZXh0ZXJuYWxfc3B0KTsKJiM0MzsJdGR4X2ZyZWVfY29udHJvbF9wYWdlKHNlcHRfcHQpOwogb3V0OgogCXNwLSZndDtleHRlcm5hbF9zcHQgPSBOVUxMOwogfQpAQCAtMjQ1OSw3ICYjNDM7MjUwMyw3IEBAIHN0YXRpYyBpbnQgX190ZHhfdGRfaW5pdChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCB0ZF9wYXJhbXMgKnRkX3BhcmFtcywKIAogCXJldCA9IC1FTk9NRU07CiAKLQl0ZHJfcGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTF9BQ0NPVU5UKTsKJiM0MzsJdGRyX3BhZ2UgPSB0ZHhfYWxsb2NfY29udHJvbF9wYWdlKCk7CiAJaWYgKCF0ZHJfcGFnZSkKIAkJZ290byBmcmVlX2hraWQ7CiAKQEAgLTI0NzIsNyAmIzQzOzI1MTYsNyBAQCBzdGF0aWMgaW50IF9fdGR4X3RkX2luaXQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3QgdGRfcGFyYW1zICp0ZF9wYXJhbXMsCiAJCWdvdG8gZnJlZV90ZHI7CiAKIAlmb3IgKGkgPSAwOyBpICZsdDsga3ZtX3RkeC0mZ3Q7dGQudGRjc19ucl9wYWdlczsgaSYjNDM7JiM0MzspIHsKLQkJdGRjc19wYWdlc1tpXSA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTF9BQ0NPVU5UKTsKJiM0MzsJCXRkY3NfcGFnZXNbaV0gPSB0ZHhfYWxsb2NfY29udHJvbF9wYWdlKCk7CiAJCWlmICghdGRjc19wYWdlc1tpXSkKIAkJCWdvdG8gZnJlZV90ZGNzOwogCX0KQEAgLTI1OTAsMTAgJiM0MzsyNjM0LDggQEAgc3RhdGljIGludCBfX3RkeF90ZF9pbml0KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IHRkX3BhcmFtcyAqdGRfcGFyYW1zLAogdGVhcmRvd246CiAJLyogT25seSBmcmVlIHBhZ2VzIG5vdCB5ZXQgYWRkZWQsIHNvIHN0YXJ0IGF0ICYjMzk7aSYjMzk7ICovCiAJZm9yICg7IGkgJmx0OyBrdm1fdGR4LSZndDt0ZC50ZGNzX25yX3BhZ2VzOyBpJiM0MzsmIzQzOykgewotCQlpZiAodGRjc19wYWdlc1tpXSkgewotCQkJX19mcmVlX3BhZ2UodGRjc19wYWdlc1tpXSk7Ci0JCQl0ZGNzX3BhZ2VzW2ldID0gTlVMTDsKLQkJfQomIzQzOwkJdGR4X2ZyZWVfY29udHJvbF9wYWdlKHRkY3NfcGFnZXNbaV0pOwomIzQzOwkJdGRjc19wYWdlc1tpXSA9IE5VTEw7CiAJfQogCWlmICgha3ZtX3RkeC0mZ3Q7dGQudGRjc19wYWdlcykKIAkJa2ZyZWUodGRjc19wYWdlcyk7CkBAIC0yNjA4LDE2ICYjNDM7MjY1MCwxMyBAQCBzdGF0aWMgaW50IF9fdGR4X3RkX2luaXQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3QgdGRfcGFyYW1zICp0ZF9wYXJhbXMsCiAJZnJlZV9jcHVtYXNrX3ZhcihwYWNrYWdlcyk7CiAKIGZyZWVfdGRjczoKLQlmb3IgKGkgPSAwOyBpICZsdDsga3ZtX3RkeC0mZ3Q7dGQudGRjc19ucl9wYWdlczsgaSYjNDM7JiM0MzspIHsKLQkJaWYgKHRkY3NfcGFnZXNbaV0pCi0JCQlfX2ZyZWVfcGFnZSh0ZGNzX3BhZ2VzW2ldKTsKLQl9CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBrdm1fdGR4LSZndDt0ZC50ZGNzX25yX3BhZ2VzOyBpJiM0MzsmIzQzOykKJiM0MzsJCXRkeF9mcmVlX2NvbnRyb2xfcGFnZSh0ZGNzX3BhZ2VzW2ldKTsKIAlrZnJlZSh0ZGNzX3BhZ2VzKTsKIAlrdm1fdGR4LSZndDt0ZC50ZGNzX3BhZ2VzID0gTlVMTDsKIAogZnJlZV90ZHI6Ci0JaWYgKHRkcl9wYWdlKQotCQlfX2ZyZWVfcGFnZSh0ZHJfcGFnZSk7CiYjNDM7CXRkeF9mcmVlX2NvbnRyb2xfcGFnZSh0ZHJfcGFnZSk7CiAJa3ZtX3RkeC0mZ3Q7dGQudGRyX3BhZ2UgPSBOVUxMOwogCiBmcmVlX2hraWQ6CkBAIC0yOTUxLDcgJiM0MzsyOTkwLDcgQEAgc3RhdGljIGludCB0ZHhfdGRfdmNwdV9pbml0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHZjcHVfcmN4KQogCWludCByZXQsIGk7CiAJdTY0IGVycjsKIAotCXBhZ2UgPSBhbGxvY19wYWdlKEdGUF9LRVJORUxfQUNDT1VOVCk7CiYjNDM7CXBhZ2UgPSB0ZHhfYWxsb2NfY29udHJvbF9wYWdlKCk7CiAJaWYgKCFwYWdlKQogCQlyZXR1cm4gLUVOT01FTTsKIAl0ZHgtJmd0O3ZwLnRkdnByX3BhZ2UgPSBwYWdlOwpAQCAtMjk3MSw3ICYjNDM7MzAxMCw3IEBAIHN0YXRpYyBpbnQgdGR4X3RkX3ZjcHVfaW5pdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB2Y3B1X3JjeCkKIAl9CiAKIAlmb3IgKGkgPSAwOyBpICZsdDsga3ZtX3RkeC0mZ3Q7dGQudGRjeF9ucl9wYWdlczsgaSYjNDM7JiM0MzspIHsKLQkJcGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTF9BQ0NPVU5UKTsKJiM0MzsJCXBhZ2UgPSB0ZHhfYWxsb2NfY29udHJvbF9wYWdlKCk7CiAJCWlmICghcGFnZSkgewogCQkJcmV0ID0gLUVOT01FTTsKIAkJCWdvdG8gZnJlZV90ZGN4OwpAQCAtMjk5Myw3ICYjNDM7MzAzMiw3IEBAIHN0YXRpYyBpbnQgdGR4X3RkX3ZjcHVfaW5pdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB2Y3B1X3JjeCkKIAkJCSAqIG1ldGhvZCwgYnV0IHRoZSByZXN0IGFyZSBmcmVlZCBoZXJlLgogCQkJICovCiAJCQlmb3IgKDsgaSAmbHQ7IGt2bV90ZHgtJmd0O3RkLnRkY3hfbnJfcGFnZXM7IGkmIzQzOyYjNDM7KSB7Ci0JCQkJX19mcmVlX3BhZ2UodGR4LSZndDt2cC50ZGN4X3BhZ2VzW2ldKTsKJiM0MzsJCQkJdGR4X2ZyZWVfY29udHJvbF9wYWdlKHRkeC0mZ3Q7dnAudGRjeF9wYWdlc1tpXSk7CiAJCQkJdGR4LSZndDt2cC50ZGN4X3BhZ2VzW2ldID0gTlVMTDsKIAkJCX0KIAkJCXJldHVybiAtRUlPOwpAQCAtMzAyMSwxNiAmIzQzOzMwNjAsMTQgQEAgc3RhdGljIGludCB0ZHhfdGRfdmNwdV9pbml0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHZjcHVfcmN4KQogCiBmcmVlX3RkY3g6CiAJZm9yIChpID0gMDsgaSAmbHQ7IGt2bV90ZHgtJmd0O3RkLnRkY3hfbnJfcGFnZXM7IGkmIzQzOyYjNDM7KSB7Ci0JCWlmICh0ZHgtJmd0O3ZwLnRkY3hfcGFnZXNbaV0pCi0JCQlfX2ZyZWVfcGFnZSh0ZHgtJmd0O3ZwLnRkY3hfcGFnZXNbaV0pOwomIzQzOwkJdGR4X2ZyZWVfY29udHJvbF9wYWdlKHRkeC0mZ3Q7dnAudGRjeF9wYWdlc1tpXSk7CiAJCXRkeC0mZ3Q7dnAudGRjeF9wYWdlc1tpXSA9IE5VTEw7CiAJfQogCWtmcmVlKHRkeC0mZ3Q7dnAudGRjeF9wYWdlcyk7CiAJdGR4LSZndDt2cC50ZGN4X3BhZ2VzID0gTlVMTDsKIAogZnJlZV90ZHZwcjoKLQlpZiAodGR4LSZndDt2cC50ZHZwcl9wYWdlKQotCQlfX2ZyZWVfcGFnZSh0ZHgtJmd0O3ZwLnRkdnByX3BhZ2UpOwomIzQzOwl0ZHhfZnJlZV9jb250cm9sX3BhZ2UodGR4LSZndDt2cC50ZHZwcl9wYWdlKTsKIAl0ZHgtJmd0O3ZwLnRkdnByX3BhZ2UgPSBOVUxMOwogCXRkeC0mZ3Q7dnAudGR2cHJfcGEgPSAwOwogCkBAIC0zNDkzLDYgJiM0MzszNTMwLDEwIEBAIGludCBfX2luaXQgdGR4X2hhcmR3YXJlX3NldHVwKHZvaWQpCiAKIAl2dF94ODZfb3BzLnNldF9leHRlcm5hbF9zcHRlID0gdGR4X3NlcHRfc2V0X3ByaXZhdGVfc3B0ZTsKIAl2dF94ODZfb3BzLmZyZWVfZXh0ZXJuYWxfc3B0ID0gdGR4X3NlcHRfZnJlZV9wcml2YXRlX3NwdDsKJiM0MzsKJiM0MzsJaWYgKHRkeF9zdXBwb3J0c19keW5hbWljX3BhbXQodGR4X3N5c2luZm8pKQomIzQzOwkJdnRfeDg2X29wcy50b3B1cF9leHRlcm5hbF9jYWNoZSA9IHRkeF90b3B1cF9leHRlcm5hbF9wYW10X2NhY2hlOwomIzQzOwogCXZ0X3g4Nl9vcHMucHJvdGVjdGVkX2FwaWNfaGFzX2ludGVycnVwdCA9IHRkeF9wcm90ZWN0ZWRfYXBpY19oYXNfaW50ZXJydXB0OwogCXJldHVybiAwOwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L3RkeC5oIGIvYXJjaC94ODYva3ZtL3ZteC90ZHguaAppbmRleCBhYzgzMjNhNjhiMTYzYS4uZmQzNjhlM2VlMDYwYjYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS92bXgvdGR4LmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3ZteC90ZHguaApAQCAtNzIsNiAmIzQzOzcyLDggQEAgc3RydWN0IHZjcHVfdGR4IHsKIAogCXU2NCBtYXBfZ3BhX25leHQ7CiAJdTY0IG1hcF9ncGFfZW5kOwomIzQzOwomIzQzOwlzdHJ1Y3QgdGR4X3BhbXRfY2FjaGUgcGFtdF9jYWNoZTsKIH07CiAKIHZvaWQgdGRoX3ZwX3JkX2ZhaWxlZChzdHJ1Y3QgdmNwdV90ZHggKnRkeCwgY2hhciAqdWNsYXNzLCB1MzIgZmllbGQsIHU2NCBlcnIpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jIGIvYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jCmluZGV4IDQyZGY4ZWE0NjRjNDcyLi5kZWM0NTcwOWU0NTRhNiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYwpAQCAtMzAsNiAmIzQzOzMwLDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9zdXNwZW5kLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc3lzY29yZV9vcHMuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9pZHIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvdm1hbGxvYy5oJmd0OwogI2luY2x1ZGUgJmx0O2FzbS9wYWdlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7YXNtL3NwZWNpYWxfaW5zbnMuaCZndDsKICNpbmNsdWRlICZsdDthc20vbXNyLWluZGV4LmgmZ3Q7CkBAIC00Niw2ICYjNDM7NDcsOCBAQAogI2luY2x1ZGUgJiMzNDtzZWFtY2FsbF9pbnRlcm5hbC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7dGR4LmgmIzM0OwogCiYjNDM7c3RhdGljIGJvb2wgdGR4X2VuYWJsZV9kcGFtdCBfX3JvX2FmdGVyX2luaXQ7CiYjNDM7CiBzdHJ1Y3QgdGR4X21vZHVsZV9zdGF0ZSB7CiAJYm9vbCBpbml0aWFsaXplZDsKIAlib29sIHN5c2luaXRfZG9uZTsKQEAgLTYzLDYgJiM0Mzs2NiwxNCBAQCBzdGF0aWMgREVGSU5FX1BFUl9DUFUoYm9vbCwgdGR4X2xwX2luaXRpYWxpemVkKTsKIAogc3RhdGljIHN0cnVjdCB0ZG1yX2luZm9fbGlzdCB0ZHhfdGRtcl9saXN0OwogCiYjNDM7LyoKJiM0MzsgKiBPbiBhIG1hY2hpbmUgd2l0aCBEeW5hbWljIFBBTVQsIHRoZSBrZXJuZWwgbWFpbnRhaW5zIGEgcmVmZXJlbmNlIGNvdW50ZXIKJiM0MzsgKiBmb3IgZXZlcnkgMk1CIHJhbmdlLiBUaGUgY291bnRlciBpbmRpY2F0ZXMgaG93IG1hbnkgdXNlcnMgdGhlcmUgYXJlIGZvcgomIzQzOyAqIHRoZSBQQU1UIG1lbW9yeSBvZiB0aGUgMk1CIHJhbmdlLiBUaGUga2VybmVsIGFsbG9jYXRlcyBQQU1UIHJlZmNvdW50cyBhdAomIzQzOyAqIGluaXRpYWxpemF0aW9uLgomIzQzOyAqLwomIzQzO3N0YXRpYyBhdG9taWNfdCAqcGFtdF9yZWZjb3VudHM7CiYjNDM7CiAvKiBBbGwgVERYLXVzYWJsZSBtZW1vcnkgcmVnaW9ucy4gIFByb3RlY3RlZCBieSBtZW1faG90cGx1Z19sb2NrLiAqLwogc3RhdGljIExJU1RfSEVBRCh0ZHhfbWVtbGlzdCk7CiAKQEAgLTI1Miw2ICYjNDM7MjYzLDQyIEBAIHN0YXRpYyBzdHJ1Y3Qgc3lzY29yZSB0ZHhfc3lzY29yZSA9IHsKIAkub3BzID0gJmFtcDt0ZHhfc3lzY29yZV9vcHMsCiB9OwogCiYjNDM7LyoKJiM0MzsgKiBBbGxvY2F0ZSBQQU1UIHJlZmVyZW5jZSBjb3VudGVycyBmb3IgYWxsIHBoeXNpY2FsIG1lbW9yeS4KJiM0MzsgKgomIzQzOyAqIEl0IGNvbnN1bWVzIDJNQiBmb3IgZXZlcnkgMVRCIG9mIHBoeXNpY2FsIG1lbW9yeS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgX19pbml0IGludCBpbml0X3BhbXRfcmVmY291bnRzKHZvaWQpCiYjNDM7ewomIzQzOwlzaXplX3Qgc2l6ZSA9IERJVl9ST1VORF9VUChtYXhfcGZuLCBQVFJTX1BFUl9QVEUpICogc2l6ZW9mKCpwYW10X3JlZmNvdW50cyk7CiYjNDM7CiYjNDM7CWlmICghdGR4X3N1cHBvcnRzX2R5bmFtaWNfcGFtdCgmYW1wO3RkeF9zeXNpbmZvKSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlwYW10X3JlZmNvdW50cyA9IHZ6YWxsb2Moc2l6ZSk7CiYjNDM7CWlmICghcGFtdF9yZWZjb3VudHMpCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBfX2luaXQgdm9pZCBmcmVlX3BhbXRfcmVmY291bnRzKHZvaWQpCiYjNDM7ewomIzQzOwlpZiAoIXRkeF9zdXBwb3J0c19keW5hbWljX3BhbXQoJmFtcDt0ZHhfc3lzaW5mbykpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CXZmcmVlKHBhbXRfcmVmY291bnRzKTsKJiM0MzsJcGFtdF9yZWZjb3VudHMgPSBOVUxMOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYXRvbWljX3QgKnRkeF9maW5kX3BhbXRfcmVmY291bnQodW5zaWduZWQgbG9uZyBwZm4pCiYjNDM7ewomIzQzOwkvKiBGaW5kIHdoaWNoIFBNRCBhIFBGTiBpcyBpbi4gKi8KJiM0MzsJdW5zaWduZWQgbG9uZyBpbmRleCA9IHBmbiAmZ3Q7Jmd0OyAoUE1EX1NISUZUIC0gUEFHRV9TSElGVCk7CiYjNDM7CiYjNDM7CXJldHVybiAmYW1wO3BhbXRfcmVmY291bnRzW2luZGV4XTsKJiM0Mzt9CiYjNDM7CiAvKgogICogQWRkIGEgbWVtb3J5IHJlZ2lvbiBhcyBhIFREWCBtZW1vcnkgYmxvY2suICBUaGUgY2FsbGVyIG11c3QgbWFrZSBzdXJlCiAgKiBhbGwgbWVtb3J5IHJlZ2lvbnMgYXJlIGFkZGVkIGluIGFkZHJlc3MgYXNjZW5kaW5nIG9yZGVyIGFuZCBkb24mIzM5O3QKQEAgLTUxMCwzNSAmIzQzOzU1NywzNyBAQCBzdGF0aWMgX19pbml0IGludCBmaWxsX291dF90ZG1ycyhzdHJ1Y3QgbGlzdF9oZWFkICp0bWJfbGlzdCwKIAlyZXR1cm4gMDsKIH0KIAomIzQzO3N0YXRpYyBfX2luaXQgdW5zaWduZWQgbG9uZyB0ZG1yX2dldF9wYW10X2JpdG1hcF9zeihzdHJ1Y3QgdGRtcl9pbmZvICp0ZG1yKQomIzQzO3sKJiM0MzsJdW5zaWduZWQgbG9uZyBwYW10X3N6LCBucl9wYW10X2VudHJpZXM7CiYjNDM7CWludCBiaXRzX3Blcl9lbnRyeTsKJiM0MzsKJiM0MzsJYml0c19wZXJfZW50cnkgPSB0ZHhfc3lzaW5mby50ZG1yLnBhbXRfcGFnZV9iaXRtYXBfZW50cnlfYml0czsKJiM0MzsJbnJfcGFtdF9lbnRyaWVzID0gdGRtci0mZ3Q7c2l6ZSAmZ3Q7Jmd0OyBQQUdFX1NISUZUOwomIzQzOwlwYW10X3N6ID0gRElWX1JPVU5EX1VQKG5yX3BhbXRfZW50cmllcyAqIGJpdHNfcGVyX2VudHJ5LCBCSVRTX1BFUl9CWVRFKTsKJiM0MzsKJiM0MzsJcmV0dXJuIFBBR0VfQUxJR04ocGFtdF9zeik7CiYjNDM7fQomIzQzOwogLyoKICAqIENhbGN1bGF0ZSBQQU1UIHNpemUgZ2l2ZW4gYSBURE1SIGFuZCBhIHBhZ2Ugc2l6ZS4gIFRoZSByZXR1cm5lZAogICogUEFNVCBzaXplIGlzIGFsd2F5cyBhbGlnbmVkIHVwIHRvIDRLIHBhZ2UgYm91bmRhcnkuCiAgKi8KLXN0YXRpYyBfX2luaXQgdW5zaWduZWQgbG9uZyB0ZG1yX2dldF9wYW10X3N6KHN0cnVjdCB0ZG1yX2luZm8gKnRkbXIsIGludCBwZ3N6LAotCQkJCQkgICAgIHUxNiBwYW10X2VudHJ5X3NpemUpCiYjNDM7c3RhdGljIF9faW5pdCB1bnNpZ25lZCBsb25nIHRkbXJfZ2V0X3BhbXRfc3ooc3RydWN0IHRkbXJfaW5mbyAqdGRtciwgaW50IHBnc3opCiB7CiAJdW5zaWduZWQgbG9uZyBwYW10X3N6LCBucl9wYW10X2VudHJpZXM7CiYjNDM7CWNvbnN0IGludCB0ZHhfcGdfc2l6ZV9zaGlmdFtURFhfUFNfTlJdID0geyBQQUdFX1NISUZULCBQTURfU0hJRlQsIFBVRF9TSElGVCB9OwomIzQzOwljb25zdCB1MTYgcGFtdF9lbnRyeV9zaXplW1REWF9QU19OUl0gPSB7CiYjNDM7CQl0ZHhfc3lzaW5mby50ZG1yLnBhbXRfNGtfZW50cnlfc2l6ZSwKJiM0MzsJCXRkeF9zeXNpbmZvLnRkbXIucGFtdF8ybV9lbnRyeV9zaXplLAomIzQzOwkJdGR4X3N5c2luZm8udGRtci5wYW10XzFnX2VudHJ5X3NpemUsCiYjNDM7CX07CiAKLQlzd2l0Y2ggKHBnc3opIHsKLQljYXNlIFREWF9QU180SzoKLQkJbnJfcGFtdF9lbnRyaWVzID0gdGRtci0mZ3Q7c2l6ZSAmZ3Q7Jmd0OyBQQUdFX1NISUZUOwotCQlicmVhazsKLQljYXNlIFREWF9QU18yTToKLQkJbnJfcGFtdF9lbnRyaWVzID0gdGRtci0mZ3Q7c2l6ZSAmZ3Q7Jmd0OyBQTURfU0hJRlQ7Ci0JCWJyZWFrOwotCWNhc2UgVERYX1BTXzFHOgotCQlucl9wYW10X2VudHJpZXMgPSB0ZG1yLSZndDtzaXplICZndDsmZ3Q7IFBVRF9TSElGVDsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJV0FSTl9PTl9PTkNFKDEpOwotCQlyZXR1cm4gMDsKLQl9CiYjNDM7CW5yX3BhbXRfZW50cmllcyA9IHRkbXItJmd0O3NpemUgJmd0OyZndDsgdGR4X3BnX3NpemVfc2hpZnRbcGdzel07CiYjNDM7CXBhbXRfc3ogPSBucl9wYW10X2VudHJpZXMgKiBwYW10X2VudHJ5X3NpemVbcGdzel07CiAKLQlwYW10X3N6ID0gbnJfcGFtdF9lbnRyaWVzICogcGFtdF9lbnRyeV9zaXplOwogCS8qIFREWCByZXF1aXJlcyBQQU1UIHNpemUgbXVzdCBiZSA0SyBhbGlnbmVkICovCi0JcGFtdF9zeiA9IEFMSUdOKHBhbXRfc3osIFBBR0VfU0laRSk7Ci0KLQlyZXR1cm4gcGFtdF9zejsKJiM0MzsJcmV0dXJuIFBBR0VfQUxJR04ocGFtdF9zeik7CiB9CiAKIC8qCkBAIC01NzYsMTUgJiM0Mzs2MjUsMTEgQEAgc3RhdGljIF9faW5pdCBpbnQgdGRtcl9nZXRfbmlkKHN0cnVjdCB0ZG1yX2luZm8gKnRkbXIsIHN0cnVjdCBsaXN0X2hlYWQgKnRtYl9saXMKICAqIHdpdGhpbiBAdGRtciwgYW5kIHNldCB1cCBQQU1UcyBmb3IgQHRkbXIuCiAgKi8KIHN0YXRpYyBfX2luaXQgaW50IHRkbXJfc2V0X3VwX3BhbXQoc3RydWN0IHRkbXJfaW5mbyAqdGRtciwKLQkJCQkgICBzdHJ1Y3QgbGlzdF9oZWFkICp0bWJfbGlzdCwKLQkJCQkgICB1MTYgcGFtdF9lbnRyeV9zaXplW10pCiYjNDM7CQkJCSAgIHN0cnVjdCBsaXN0X2hlYWQgKnRtYl9saXN0KQogewotCXVuc2lnbmVkIGxvbmcgcGFtdF9iYXNlW1REWF9QU19OUl07Ci0JdW5zaWduZWQgbG9uZyBwYW10X3NpemVbVERYX1BTX05SXTsKLQl1bnNpZ25lZCBsb25nIHRkbXJfcGFtdF9iYXNlOwogCXVuc2lnbmVkIGxvbmcgdGRtcl9wYW10X3NpemU7CiAJc3RydWN0IHBhZ2UgKnBhbXQ7Ci0JaW50IHBnc3osIG5pZDsKJiM0MzsJaW50IG5pZDsKIAogCW5pZCA9IHRkbXJfZ2V0X25pZCh0ZG1yLCB0bWJfbGlzdCk7CiAKQEAgLTU5MiwxMyAmIzQzOzYzNywxOCBAQCBzdGF0aWMgX19pbml0IGludCB0ZG1yX3NldF91cF9wYW10KHN0cnVjdCB0ZG1yX2luZm8gKnRkbXIsCiAJICogQ2FsY3VsYXRlIHRoZSBQQU1UIHNpemUgZm9yIGVhY2ggVERYIHN1cHBvcnRlZCBwYWdlIHNpemUKIAkgKiBhbmQgdGhlIHRvdGFsIFBBTVQgc2l6ZS4KIAkgKi8KLQl0ZG1yX3BhbXRfc2l6ZSA9IDA7Ci0JZm9yIChwZ3N6ID0gVERYX1BTXzRLOyBwZ3N6ICZsdDsgVERYX1BTX05SOyBwZ3N6JiM0MzsmIzQzOykgewotCQlwYW10X3NpemVbcGdzel0gPSB0ZG1yX2dldF9wYW10X3N6KHRkbXIsIHBnc3osCi0JCQkJCXBhbXRfZW50cnlfc2l6ZVtwZ3N6XSk7Ci0JCXRkbXJfcGFtdF9zaXplICYjNDM7PSBwYW10X3NpemVbcGdzel07CiYjNDM7CXRkbXItJmd0O3BhbXRfMWdfc2l6ZSA9IHRkbXJfZ2V0X3BhbXRfc3oodGRtciwgVERYX1BTXzFHKTsKJiM0MzsJdGRtci0mZ3Q7cGFtdF8ybV9zaXplID0gdGRtcl9nZXRfcGFtdF9zeih0ZG1yLCBURFhfUFNfMk0pOwomIzQzOwomIzQzOwlpZiAodGR4X3N1cHBvcnRzX2R5bmFtaWNfcGFtdCgmYW1wO3RkeF9zeXNpbmZvKSkgewomIzQzOwkJLyogV2l0aCBEeW5hbWljIFBBTVQsIFBBTVRfNEsgaXMgcmVwbGFjZWQgd2l0aCBhIGJpdG1hcCAqLwomIzQzOwkJdGRtci0mZ3Q7cGFtdF80a19zaXplID0gdGRtcl9nZXRfcGFtdF9iaXRtYXBfc3oodGRtcik7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQl0ZG1yLSZndDtwYW10XzRrX3NpemUgPSB0ZG1yX2dldF9wYW10X3N6KHRkbXIsIFREWF9QU180Syk7CiAJfQogCiYjNDM7CXRkbXJfcGFtdF9zaXplID0gdGRtci0mZ3Q7cGFtdF80a19zaXplICYjNDM7IHRkbXItJmd0O3BhbXRfMm1fc2l6ZSAmIzQzOyB0ZG1yLSZndDtwYW10XzFnX3NpemU7CiYjNDM7CiAJLyoKIAkgKiBBbGxvY2F0ZSBvbmUgY2h1bmsgb2YgcGh5c2ljYWxseSBjb250aWd1b3VzIG1lbW9yeSBmb3IgYWxsCiAJICogUEFNVHMuICBUaGlzIGhlbHBzIG1pbmltaXplIHRoZSBQQU1UJiMzOTtzIHVzZSBvZiByZXNlcnZlZCBhcmVhcwpAQCAtNjA2LDI1ICYjNDM7NjU2LDE3IEBAIHN0YXRpYyBfX2luaXQgaW50IHRkbXJfc2V0X3VwX3BhbXQoc3RydWN0IHRkbXJfaW5mbyAqdGRtciwKIAkgKi8KIAlwYW10ID0gYWxsb2NfY29udGlnX3BhZ2VzKHRkbXJfcGFtdF9zaXplICZndDsmZ3Q7IFBBR0VfU0hJRlQsIEdGUF9LRVJORUwsCiAJCQluaWQsICZhbXA7bm9kZV9vbmxpbmVfbWFwKTsKLQlpZiAoIXBhbXQpCi0JCXJldHVybiAtRU5PTUVNOwogCiAJLyoKLQkgKiBCcmVhayB0aGUgY29udGlndW91cyBhbGxvY2F0aW9uIGJhY2sgdXAgaW50byB0aGUKLQkgKiBpbmRpdmlkdWFsIFBBTVRzIGZvciBlYWNoIHBhZ2Ugc2l6ZS4KJiM0MzsJICogdGRtci0mZ3Q7cGFtdF80a19iYXNlIGlzIHN0aWxsIHplcm8gc28gdGhlIGVycm9yCiYjNDM7CSAqIHBhdGggb2YgdGhlIGNhbGxlciB3aWxsIHNraXAgZnJlZWluZyB0aGUgUEFNVC4KIAkgKi8KLQl0ZG1yX3BhbXRfYmFzZSA9IHBhZ2VfdG9fcGZuKHBhbXQpICZsdDsmbHQ7IFBBR0VfU0hJRlQ7Ci0JZm9yIChwZ3N6ID0gVERYX1BTXzRLOyBwZ3N6ICZsdDsgVERYX1BTX05SOyBwZ3N6JiM0MzsmIzQzOykgewotCQlwYW10X2Jhc2VbcGdzel0gPSB0ZG1yX3BhbXRfYmFzZTsKLQkJdGRtcl9wYW10X2Jhc2UgJiM0Mzs9IHBhbXRfc2l6ZVtwZ3N6XTsKLQl9CiYjNDM7CWlmICghcGFtdCkKJiM0MzsJCXJldHVybiAtRU5PTUVNOwogCi0JdGRtci0mZ3Q7cGFtdF80a19iYXNlID0gcGFtdF9iYXNlW1REWF9QU180S107Ci0JdGRtci0mZ3Q7cGFtdF80a19zaXplID0gcGFtdF9zaXplW1REWF9QU180S107Ci0JdGRtci0mZ3Q7cGFtdF8ybV9iYXNlID0gcGFtdF9iYXNlW1REWF9QU18yTV07Ci0JdGRtci0mZ3Q7cGFtdF8ybV9zaXplID0gcGFtdF9zaXplW1REWF9QU18yTV07Ci0JdGRtci0mZ3Q7cGFtdF8xZ19iYXNlID0gcGFtdF9iYXNlW1REWF9QU18xR107Ci0JdGRtci0mZ3Q7cGFtdF8xZ19zaXplID0gcGFtdF9zaXplW1REWF9QU18xR107CiYjNDM7CXRkbXItJmd0O3BhbXRfNGtfYmFzZSA9IHBhZ2VfdG9fcGh5cyhwYW10KTsKJiM0MzsJdGRtci0mZ3Q7cGFtdF8ybV9iYXNlID0gdGRtci0mZ3Q7cGFtdF80a19iYXNlICYjNDM7IHRkbXItJmd0O3BhbXRfNGtfc2l6ZTsKJiM0MzsJdGRtci0mZ3Q7cGFtdF8xZ19iYXNlID0gdGRtci0mZ3Q7cGFtdF8ybV9iYXNlICYjNDM7IHRkbXItJmd0O3BhbXRfMm1fc2l6ZTsKIAogCXJldHVybiAwOwogfQpAQCAtNjU1LDEwICYjNDM7Njk3LDcgQEAgc3RhdGljIF9faW5pdCB2b2lkIHRkbXJfZG9fcGFtdF9mdW5jKHN0cnVjdCB0ZG1yX2luZm8gKnRkbXIsCiAJdGRtcl9nZXRfcGFtdCh0ZG1yLCAmYW1wO3BhbXRfYmFzZSwgJmFtcDtwYW10X3NpemUpOwogCiAJLyogRG8gbm90aGluZyBpZiBQQU1UIGhhc24mIzM5O3QgYmVlbiBhbGxvY2F0ZWQgZm9yIHRoaXMgVERNUiAqLwotCWlmICghcGFtdF9zaXplKQotCQlyZXR1cm47Ci0KLQlpZiAoV0FSTl9PTl9PTkNFKCFwYW10X2Jhc2UpKQomIzQzOwlpZiAoIXBhbXRfYmFzZSkKIAkJcmV0dXJuOwogCiAJcGFtdF9mdW5jKHBhbXRfYmFzZSwgcGFtdF9zaXplKTsKQEAgLTY4NCwxNCAmIzQzOzcyMywxMiBAQCBzdGF0aWMgX19pbml0IHZvaWQgdGRtcnNfZnJlZV9wYW10X2FsbChzdHJ1Y3QgdGRtcl9pbmZvX2xpc3QgKnRkbXJfbGlzdCkKIAogLyogQWxsb2NhdGUgYW5kIHNldCB1cCBQQU1UcyBmb3IgYWxsIFRETVJzICovCiBzdGF0aWMgX19pbml0IGludCB0ZG1yc19zZXRfdXBfcGFtdF9hbGwoc3RydWN0IHRkbXJfaW5mb19saXN0ICp0ZG1yX2xpc3QsCi0JCQkJCXN0cnVjdCBsaXN0X2hlYWQgKnRtYl9saXN0LAotCQkJCQl1MTYgcGFtdF9lbnRyeV9zaXplW10pCiYjNDM7CQkJCSBzdHJ1Y3QgbGlzdF9oZWFkICp0bWJfbGlzdCkKIHsKIAlpbnQgaSwgcmV0ID0gMDsKIAogCWZvciAoaSA9IDA7IGkgJmx0OyB0ZG1yX2xpc3QtJmd0O25yX2NvbnN1bWVkX3RkbXJzOyBpJiM0MzsmIzQzOykgewotCQlyZXQgPSB0ZG1yX3NldF91cF9wYW10KHRkbXJfZW50cnkodGRtcl9saXN0LCBpKSwgdG1iX2xpc3QsCi0JCQkJcGFtdF9lbnRyeV9zaXplKTsKJiM0MzsJCXJldCA9IHRkbXJfc2V0X3VwX3BhbXQodGRtcl9lbnRyeSh0ZG1yX2xpc3QsIGkpLCB0bWJfbGlzdCk7CiAJCWlmIChyZXQpCiAJCQlnb3RvIGVycjsKIAl9CkBAIC05NjgsMTggJiM0MzsxMDA1LDEzIEBAIHN0YXRpYyBfX2luaXQgaW50IGNvbnN0cnVjdF90ZG1ycyhzdHJ1Y3QgbGlzdF9oZWFkICp0bWJfbGlzdCwKIAkJCQkgIHN0cnVjdCB0ZG1yX2luZm9fbGlzdCAqdGRtcl9saXN0LAogCQkJCSAgc3RydWN0IHRkeF9zeXNfaW5mb190ZG1yICpzeXNpbmZvX3RkbXIpCiB7Ci0JdTE2IHBhbXRfZW50cnlfc2l6ZVtURFhfUFNfTlJdID0gewotCQlzeXNpbmZvX3RkbXItJmd0O3BhbXRfNGtfZW50cnlfc2l6ZSwKLQkJc3lzaW5mb190ZG1yLSZndDtwYW10XzJtX2VudHJ5X3NpemUsCi0JCXN5c2luZm9fdGRtci0mZ3Q7cGFtdF8xZ19lbnRyeV9zaXplLAotCX07CiAJaW50IHJldDsKIAogCXJldCA9IGZpbGxfb3V0X3RkbXJzKHRtYl9saXN0LCB0ZG1yX2xpc3QpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKLQlyZXQgPSB0ZG1yc19zZXRfdXBfcGFtdF9hbGwodGRtcl9saXN0LCB0bWJfbGlzdCwgcGFtdF9lbnRyeV9zaXplKTsKJiM0MzsJcmV0ID0gdGRtcnNfc2V0X3VwX3BhbXRfYWxsKHRkbXJfbGlzdCwgdG1iX2xpc3QpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKQEAgLTk5OCw2ICYjNDM7MTAzMCw4IEBAIHN0YXRpYyBfX2luaXQgaW50IGNvbnN0cnVjdF90ZG1ycyhzdHJ1Y3QgbGlzdF9oZWFkICp0bWJfbGlzdCwKIAlyZXR1cm4gcmV0OwogfQogCiYjNDM7I2RlZmluZSBURFhfU1lTX0NPTkZJR19EWU5BTUlDX1BBTVQJQklUKDE2KQomIzQzOwogc3RhdGljIF9faW5pdCBpbnQgY29uZmlnX3RkeF9tb2R1bGUoc3RydWN0IHRkbXJfaW5mb19saXN0ICp0ZG1yX2xpc3QsCiAJCQkJICAgIHU2NCBnbG9iYWxfa2V5aWQpCiB7CkBAIC0xMDI2LDYgJiM0MzsxMDYwLDEyIEBAIHN0YXRpYyBfX2luaXQgaW50IGNvbmZpZ190ZHhfbW9kdWxlKHN0cnVjdCB0ZG1yX2luZm9fbGlzdCAqdGRtcl9saXN0LAogCWFyZ3MucmN4ID0gX19wYSh0ZG1yX3BhX2FycmF5KTsKIAlhcmdzLnJkeCA9IHRkbXJfbGlzdC0mZ3Q7bnJfY29uc3VtZWRfdGRtcnM7CiAJYXJncy5yOCA9IGdsb2JhbF9rZXlpZDsKJiM0MzsKJiM0MzsJaWYgKHRkeF9zdXBwb3J0c19keW5hbWljX3BhbXQoJmFtcDt0ZHhfc3lzaW5mbykpIHsKJiM0MzsJCXByX2luZm8oJiMzNDtFbmFibGUgRHluYW1pYyBQQU1UXG4mIzM0Oyk7CiYjNDM7CQlhcmdzLnI4IHw9IFREWF9TWVNfQ09ORklHX0RZTkFNSUNfUEFNVDsKJiM0MzsJfQomIzQzOwogCXJldCA9IHNlYW1jYWxsX3ByZXJyKFRESF9TWVNfQ09ORklHLCAmYW1wO2FyZ3MpOwogCiAJLyogRnJlZSB0aGUgYXJyYXkgYXMgaXQgaXMgbm90IHJlcXVpcmVkIGFueW1vcmUuICovCkBAIC0xMTY3LDEwICYjNDM7MTIwNywxNCBAQCBzdGF0aWMgX19pbml0IGludCBpbml0X3RkeF9tb2R1bGUodm9pZCkKIAkgKi8KIAlnZXRfb25saW5lX21lbXMoKTsKIAotCXJldCA9IGJ1aWxkX3RkeF9tZW1saXN0KCZhbXA7dGR4X21lbWxpc3QpOwomIzQzOwlyZXQgPSBpbml0X3BhbXRfcmVmY291bnRzKCk7CiAJaWYgKHJldCkKIAkJZ290byBvdXRfcHV0X3RkeG1lbTsKIAomIzQzOwlyZXQgPSBidWlsZF90ZHhfbWVtbGlzdCgmYW1wO3RkeF9tZW1saXN0KTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gZXJyX2ZyZWVfcGFtdF9yZWZjb3VudHM7CiYjNDM7CiAJLyogQWxsb2NhdGUgZW5vdWdoIHNwYWNlIGZvciBjb25zdHJ1Y3RpbmcgVERNUnMgKi8KIAlyZXQgPSBhbGxvY190ZG1yX2xpc3QoJmFtcDt0ZHhfdGRtcl9saXN0LCAmYW1wO3RkeF9zeXNpbmZvLnRkbXIpOwogCWlmIChyZXQpCkBAIC0xMjIwLDYgJiM0MzsxMjY0LDggQEAgc3RhdGljIF9faW5pdCBpbnQgaW5pdF90ZHhfbW9kdWxlKHZvaWQpCiAJZnJlZV90ZG1yX2xpc3QoJmFtcDt0ZHhfdGRtcl9saXN0KTsKIGVycl9mcmVlX3RkeG1lbToKIAlmcmVlX3RkeF9tZW1saXN0KCZhbXA7dGR4X21lbWxpc3QpOwomIzQzO2Vycl9mcmVlX3BhbXRfcmVmY291bnRzOgomIzQzOwlmcmVlX3BhbXRfcmVmY291bnRzKCk7CiAJZ290byBvdXRfcHV0X3RkeG1lbTsKIH0KIApAQCAtMjAwMyw2ICYjNDM7MjA0OSwyODggQEAgdTY0IHRkaF9waHltZW1fcGFnZV93YmludmRfaGtpZCh1NjQgaGtpZCwga3ZtX3Bmbl90IHBmbikKIH0KIEVYUE9SVF9TWU1CT0xfRk9SX0tWTSh0ZGhfcGh5bWVtX3BhZ2Vfd2JpbnZkX2hraWQpOwogCiYjNDM7Ym9vbCB0ZHhfc3VwcG9ydHNfZHluYW1pY19wYW10KGNvbnN0IHN0cnVjdCB0ZHhfc3lzX2luZm8gKnN5c2luZm8pCiYjNDM7ewomIzQzOwlyZXR1cm4gc3lzaW5mby0mZ3Q7ZmVhdHVyZXMudGR4X2ZlYXR1cmVzMCAmYW1wOyBURFhfRkVBVFVSRVMwX0RZTkFNSUNfUEFNVCAmYW1wOyZhbXA7CiYjNDM7CSAgICAgICB0ZHhfZW5hYmxlX2RwYW10OwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0ZPUl9LVk0odGR4X3N1cHBvcnRzX2R5bmFtaWNfcGFtdCk7CiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCBwYWdlICp0ZHhfYWxsb2NfcGFnZV9wYW10X2NhY2hlKHN0cnVjdCB0ZHhfcGFtdF9jYWNoZSAqY2FjaGUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcGFnZSAqcGFnZTsKJiM0MzsKJiM0MzsJcGFnZSA9IGxpc3RfZmlyc3RfZW50cnlfb3JfbnVsbCgmYW1wO2NhY2hlLSZndDtwYWdlX2xpc3QsIHN0cnVjdCBwYWdlLCBscnUpOwomIzQzOwlpZiAocGFnZSkgewomIzQzOwkJbGlzdF9kZWwoJmFtcDtwYWdlLSZndDtscnUpOwomIzQzOwkJY2FjaGUtJmd0O2NudC0tOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBwYWdlOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IHBhZ2UgKmFsbG9jX2RwYW10X3BhZ2Uoc3RydWN0IHRkeF9wYW10X2NhY2hlICpjYWNoZSkKJiM0Mzt7CiYjNDM7CWlmIChjYWNoZSkKJiM0MzsJCXJldHVybiB0ZHhfYWxsb2NfcGFnZV9wYW10X2NhY2hlKGNhY2hlKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTF9BQ0NPVU5UKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBhbGxvY19wYW10X2FycmF5KHN0cnVjdCBwYWdlICoqcGFtdF9wYWdlcywgc3RydWN0IHRkeF9wYW10X2NhY2hlICpjYWNoZSkKJiM0Mzt7CiYjNDM7CWludCBpLCBqOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgVERYX0RQQU1UX0VOVFJZX1BBR0VfQ05UOyBpJiM0MzsmIzQzOykgewomIzQzOwkJcGFtdF9wYWdlc1tpXSA9IGFsbG9jX2RwYW10X3BhZ2UoY2FjaGUpOwomIzQzOwkJaWYgKCFwYW10X3BhZ2VzW2ldKQomIzQzOwkJCWdvdG8gZXJyOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzOwomIzQzO2VycjoKJiM0MzsJZm9yIChqID0gMDsgaiAmbHQ7IGk7IGomIzQzOyYjNDM7KQomIzQzOwkJX19mcmVlX3BhZ2UocGFtdF9wYWdlc1tqXSk7CiYjNDM7CiYjNDM7CXJldHVybiAtRU5PTUVNOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBmcmVlX3BhbXRfYXJyYXkoc3RydWN0IHBhZ2UgKipwYW10X3BhZ2VzKQomIzQzO3sKJiM0MzsJZm9yIChpbnQgaSA9IDA7IGkgJmx0OyBURFhfRFBBTVRfRU5UUllfUEFHRV9DTlQ7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQkvKgomIzQzOwkJICogUmVzZXQgcGFnZXMgdW5jb25kaXRpb25hbGx5IHRvIGNvdmVyIGNhc2VzCiYjNDM7CQkgKiB3aGVyZSB0aGV5IHdlcmUgcGFzc2VkIHRvIHRoZSBURFggbW9kdWxlLgomIzQzOwkJICovCiYjNDM7CQl0ZHhfcXVpcmtfcmVzZXRfcGFkZHIocGFnZV90b19waHlzKHBhbXRfcGFnZXNbaV0pLCBQQUdFX1NJWkUpOwomIzQzOwomIzQzOwkJX19mcmVlX3BhZ2UocGFtdF9wYWdlc1tpXSk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBDYWxjdWxhdGUgdGhlIGFyZyBuZWVkZWQgZm9yIG9wZXJhdGluZyBvbiB0aGUgRFBBTVQgYmFja2luZyBmb3IKJiM0MzsgKiBhIGdpdmVuIDRLQiBwYWdlLgomIzQzOyAqLwomIzQzO3N0YXRpYyB1NjQgcGFtdF8ybWJfYXJnKGt2bV9wZm5fdCBwZm4pCiYjNDM7ewomIzQzOwkvKiBBcmcgdmFsdWUgd2lsbCBzcGVjaWZ5IGEgMk1CIHJlZ2lvbiBvZiBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlLiAqLwomIzQzOwl1bnNpZ25lZCBsb25nIGhwYV8ybWIgPSBBTElHTl9ET1dOKHBmbiAmbHQ7Jmx0OyBQQUdFX1NISUZULCBQTURfU0laRSk7CiYjNDM7CiYjNDM7CXJldHVybiBocGFfMm1iIHwgVERYX1BTXzJNOwomIzQzO30KJiM0MzsKJiM0MzsvKiBBZGQgUEFNVCBiYWNraW5nIGZvciB0aGUgMk1CIHJlZ2lvbiBzdXJyb3VuZGluZyB0aGUgZ2l2ZW4gcGZuLiAqLwomIzQzO3N0YXRpYyB1NjQgdGRoX3BoeW1lbV9wYW10X2FkZChrdm1fcGZuX3QgcGZuLCBzdHJ1Y3QgcGFnZSAqKnBhbXRfcGFnZXMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdGR4X21vZHVsZV9hcmdzIGFyZ3MgPSB7CiYjNDM7CQkucmN4ID0gcGFtdF8ybWJfYXJnKHBmbiksCiYjNDM7CQkucmR4ID0gcGFnZV90b19waHlzKHBhbXRfcGFnZXNbMF0pLAomIzQzOwkJLnI4ID0gcGFnZV90b19waHlzKHBhbXRfcGFnZXNbMV0pLAomIzQzOwl9OwomIzQzOwomIzQzOwlyZXR1cm4gc2VhbWNhbGwoVERIX1BIWU1FTV9QQU1UX0FERCwgJmFtcDthcmdzKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogUmVtb3ZlIFBBTVQgYmFja2luZyBmb3IgdGhlIDJNQiByZWdpb24gc3Vycm91bmRpbmcgdGhlIGdpdmVuIHBmbi4gKi8KJiM0MztzdGF0aWMgdTY0IHRkaF9waHltZW1fcGFtdF9yZW1vdmUoa3ZtX3Bmbl90IHBmbiwgc3RydWN0IHBhZ2UgKipwYW10X3BhZ2VzKQomIzQzO3sKJiM0MzsJc3RydWN0IHRkeF9tb2R1bGVfYXJncyBhcmdzID0gewomIzQzOwkJLnJjeCA9IHBhbXRfMm1iX2FyZyhwZm4pLAomIzQzOwl9OwomIzQzOwl1NjQgcmV0OwomIzQzOwomIzQzOwlyZXQgPSBzZWFtY2FsbF9yZXQoVERIX1BIWU1FTV9QQU1UX1JFTU9WRSwgJmFtcDthcmdzKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CS8qIENvcHkgUEFNVCBwYWdlcyBvdXQgb2YgdGhlIHN0cnVjdCBwZXIgdGhlIFREWCBBQkkgKi8KJiM0MzsJcGFtdF9wYWdlc1swXSA9IHBoeXNfdG9fcGFnZShhcmdzLnJkeCk7CiYjNDM7CXBhbXRfcGFnZXNbMV0gPSBwaHlzX3RvX3BhZ2UoYXJncy5yOCk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsvKiBTZXJpYWxpemVzIGFkZGluZy9yZW1vdmluZyBQQU1UIG1lbW9yeSAqLwomIzQzO3N0YXRpYyBERUZJTkVfU1BJTkxPQ0socGFtdF9sb2NrKTsKJiM0MzsKJiM0MzsvKiBCdW1wIFBBTVQgcmVmY291bnQgZm9yIHRoZSBnaXZlbiBwZm4gYW5kIGFsbG9jYXRlIFBBTVQgYmFja2luZyBpZiBuZWVkZWQuICovCiYjNDM7aW50IHRkeF9wYW10X2dldChrdm1fcGZuX3QgcGZuLCBzdHJ1Y3QgdGR4X3BhbXRfY2FjaGUgKmNhY2hlKQomIzQzO3sKJiM0MzsJc3RydWN0IHBhZ2UgKnBhbXRfcGFnZXNbVERYX0RQQU1UX0VOVFJZX1BBR0VfQ05UXTsKJiM0MzsJYXRvbWljX3QgKnBhbXRfcmVmY291bnQ7CiYjNDM7CXU2NCB0ZHhfc3RhdHVzOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlpZiAoIXRkeF9zdXBwb3J0c19keW5hbWljX3BhbXQoJmFtcDt0ZHhfc3lzaW5mbykpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJcGFtdF9yZWZjb3VudCA9IHRkeF9maW5kX3BhbXRfcmVmY291bnQocGZuKTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogSWYgdGhlIHBhbXQgcGFnZSBpcyBhbHJlYWR5IGFkZGVkIChpLmUuIHJlZmNvdW50ICZndDs9IDEpLAomIzQzOwkgKiB0aGVuIGp1c3QgaW5jcmVtZW50IHRoZSByZWZjb3VudC4KJiM0MzsJICovCiYjNDM7CWlmIChhdG9taWNfaW5jX25vdF96ZXJvKHBhbXRfcmVmY291bnQpKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CXJldCA9IGFsbG9jX3BhbXRfYXJyYXkocGFtdF9wYWdlcywgY2FjaGUpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJc3Bpbl9sb2NrKCZhbXA7cGFtdF9sb2NrKTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogVW5saWtlIHRkeF9wYW10X3B1dCgpIHdoaWNoIHVzZXMgYXRvbWljX2RlY19hbmRfbG9jaygpIHRvCiYjNDM7CSAqIGF0b21pY2FsbHkgaGFuZGxlIHRoZSAxLSZndDswIHRyYW5zaXRpb24sIHRoZSBnZXQgc2lkZSBoYXMgbm8KJiM0MzsJICogZXF1aXZhbGVudCBjb21iaW5lZCBwcmltaXRpdmUgZm9yIDAtJmd0OzEuIFJlY2hlY2sgdW5kZXIgdGhlCiYjNDM7CSAqIGxvY2sgc2luY2UgYW5vdGhlciBnZXQgbWF5IGhhdmUgYWxyZWFkeSBkb25lIHRoZSAwLSZndDsxCiYjNDM7CSAqIHRyYW5zaXRpb24gYWZ0ZXIgYm90aCBzYXcgYXRvbWljX2luY19ub3RfemVybygpIGZhaWwuCiYjNDM7CSAqLwomIzQzOwlpZiAoYXRvbWljX2luY19ub3RfemVybyhwYW10X3JlZmNvdW50KSkKJiM0MzsJCWdvdG8gb3V0X2ZyZWU7CiYjNDM7CiYjNDM7CXRkeF9zdGF0dXMgPSB0ZGhfcGh5bWVtX3BhbXRfYWRkKHBmbiwgcGFtdF9wYWdlcyk7CiYjNDM7CWlmIChXQVJOX09OX09OQ0UodGR4X3N0YXR1cyAhPSBURFhfU1VDQ0VTUykpIHsKJiM0MzsJCXJldCA9IC1FSU87CiYjNDM7CQlnb3RvIG91dF9mcmVlOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFRoZSByZWZjb3VudCBpcyB6ZXJvLCBhbmQgdGhpcyBsb2NrZWQgcGF0aCBpcyB0aGUKJiM0MzsJICogb25seSB3YXkgdG8gaW5jcmVhc2UgaXQgZnJvbSAwLSZndDsxLgomIzQzOwkgKi8KJiM0MzsJYXRvbWljX3NldChwYW10X3JlZmNvdW50LCAxKTsKJiM0MzsJc3Bpbl91bmxvY2soJmFtcDtwYW10X2xvY2spOwomIzQzOwlyZXR1cm4gMDsKJiM0MzsKJiM0MztvdXRfZnJlZToKJiM0MzsJc3Bpbl91bmxvY2soJmFtcDtwYW10X2xvY2spOwomIzQzOwlmcmVlX3BhbXRfYXJyYXkocGFtdF9wYWdlcyk7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfRk9SX0tWTSh0ZHhfcGFtdF9nZXQpOwomIzQzOwomIzQzOy8qIERyb3AgUEFNVCByZWZjb3VudCBmb3IgdGhlIGdpdmVuIHBmbiBhbmQgZnJlZSBQQU1UIGJhY2tpbmcgaWYgbmVlZGVkLiAqLwomIzQzO3ZvaWQgdGR4X3BhbXRfcHV0KGt2bV9wZm5fdCBwZm4pCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcGFnZSAqcGFtdF9wYWdlc1tURFhfRFBBTVRfRU5UUllfUEFHRV9DTlRdID0ge307CiYjNDM7CWF0b21pY190ICpwYW10X3JlZmNvdW50OwomIzQzOwl1NjQgdGR4X3N0YXR1czsKJiM0MzsKJiM0MzsJaWYgKCF0ZHhfc3VwcG9ydHNfZHluYW1pY19wYW10KCZhbXA7dGR4X3N5c2luZm8pKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlwYW10X3JlZmNvdW50ID0gdGR4X2ZpbmRfcGFtdF9yZWZjb3VudChwZm4pOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBJZiB0aGVyZSBpcyBtb3JlIHRoYW4gMSByZWZlcmVuY2Ugb24gdGhlIHBhbXQgcGFnZSwgZG9uJiMzOTt0CiYjNDM7CSAqIHJlbW92ZSBpdCB5ZXQuIEp1c3QgZGVjcmVtZW50IHRoZSByZWZjb3VudC4KJiM0MzsJICovCiYjNDM7CWlmICghYXRvbWljX2RlY19hbmRfbG9jayhwYW10X3JlZmNvdW50LCAmYW1wO3BhbXRfbG9jaykpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CXRkeF9zdGF0dXMgPSB0ZGhfcGh5bWVtX3BhbXRfcmVtb3ZlKHBmbiwgcGFtdF9wYWdlcyk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIERvbiYjMzk7dCBmcmVlIHBhbXRfcGFnZXMgYXMgaXQgY291bGQgaG9sZCBnYXJiYWdlIHdoZW4KJiM0MzsJICogdGRoX3BoeW1lbV9wYW10X3JlbW92ZSgpIGZhaWxzLiAgRG9uJiMzOTt0IHBhbmljL0JVR19PTigpLCBhcwomIzQzOwkgKiB0aGVyZSBpcyBubyByaXNrIG9mIGRhdGEgY29ycnVwdGlvbiwgYnV0IGRvIHllbGwgbG91ZGx5IGFzCiYjNDM7CSAqIGZhaWx1cmUgaW5kaWNhdGVzIGEga2VybmVsIGJ1ZywgbWVtb3J5IGlzIGJlaW5nIGxlYWtlZCwgYW5kCiYjNDM7CSAqIHRoZSBkYW5nbGluZyBQQU1UIGVudHJ5IG1heSBjYXVzZSBmdXR1cmUgb3BlcmF0aW9ucyB0byBmYWlsLgomIzQzOwkgKi8KJiM0MzsJaWYgKFdBUk5fT05fT05DRSh0ZHhfc3RhdHVzICE9IFREWF9TVUNDRVNTKSkgewomIzQzOwkJLyoKJiM0MzsJCSAqIGF0b21pY19kZWNfYW5kX2xvY2soKSBhbHJlYWR5IGRlY3JlbWVudGVkIGl0IHRvIDAsCiYjNDM7CQkgKiBidXQgdGhlIFBBTVQgZW50cnkgc3RpbGwgZXhpc3RzIHNpbmNlIFJFTU9WRSBmYWlsZWQuCiYjNDM7CQkgKi8KJiM0MzsJCWF0b21pY19zZXQocGFtdF9yZWZjb3VudCwgMSk7CiYjNDM7CQlnb3RvIG91dF91bmxvY2s7CiYjNDM7CX0KJiM0MzsKJiM0MzsJc3Bpbl91bmxvY2soJmFtcDtwYW10X2xvY2spOwomIzQzOwlmcmVlX3BhbXRfYXJyYXkocGFtdF9wYWdlcyk7CiYjNDM7CXJldHVybjsKJiM0MztvdXRfdW5sb2NrOgomIzQzOwlzcGluX3VubG9jaygmYW1wO3BhbXRfbG9jayk7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfRk9SX0tWTSh0ZHhfcGFtdF9wdXQpOwomIzQzOwomIzQzO3ZvaWQgdGR4X2ZyZWVfcGFtdF9jYWNoZShzdHJ1Y3QgdGR4X3BhbXRfY2FjaGUgKmNhY2hlKQomIzQzO3sKJiM0MzsJc3RydWN0IHBhZ2UgKnBhZ2U7CiYjNDM7CiYjNDM7CXdoaWxlICgocGFnZSA9IHRkeF9hbGxvY19wYWdlX3BhbXRfY2FjaGUoY2FjaGUpKSkKJiM0MzsJCV9fZnJlZV9wYWdlKHBhZ2UpOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0ZPUl9LVk0odGR4X2ZyZWVfcGFtdF9jYWNoZSk7CiYjNDM7CiYjNDM7aW50IHRkeF90b3B1cF9wYW10X2NhY2hlKHN0cnVjdCB0ZHhfcGFtdF9jYWNoZSAqY2FjaGUsIHVuc2lnbmVkIGxvbmcgbnBhZ2VzKQomIzQzO3sKJiM0MzsJaWYgKFdBUk5fT05fT05DRSghdGR4X3N1cHBvcnRzX2R5bmFtaWNfcGFtdCgmYW1wO3RkeF9zeXNpbmZvKSkpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJbnBhZ2VzICo9IFREWF9EUEFNVF9FTlRSWV9QQUdFX0NOVDsKJiM0MzsKJiM0MzsJd2hpbGUgKGNhY2hlLSZndDtjbnQgJmx0OyBucGFnZXMpIHsKJiM0MzsJCXN0cnVjdCBwYWdlICpwYWdlID0gYWxsb2NfcGFnZShHRlBfS0VSTkVMX0FDQ09VTlQpOwomIzQzOwomIzQzOwkJaWYgKCFwYWdlKQomIzQzOwkJCXJldHVybiAtRU5PTUVNOwomIzQzOwomIzQzOwkJbGlzdF9hZGQoJmFtcDtwYWdlLSZndDtscnUsICZhbXA7Y2FjaGUtJmd0O3BhZ2VfbGlzdCk7CiYjNDM7CQljYWNoZS0mZ3Q7Y250JiM0MzsmIzQzOzsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9GT1JfS1ZNKHRkeF90b3B1cF9wYW10X2NhY2hlKTsKJiM0MzsKJiM0MzsvKgomIzQzOyAqIFJldHVybiBhIHBhZ2UgdGhhdCBjYW4gYmUgZ2lmdGVkIHRvIHRoZSBURFgtTW9kdWxlIGZvciB1c2UgYXMgYSAmIzM0O2NvbnRyb2wmIzM0OwomIzQzOyAqIHBhZ2UsIGkuZS4gcGFnZXMgdGhhdCBhcmUgdXNlZCBmb3IgY29udHJvbCBzdHJ1Y3R1cmVzIGZvciBhIGdpdmVuIFREWAomIzQzOyAqIGd1ZXN0LCBhbmQgdGh1cyBvYnRhaW4gVERYIHByb3RlY3Rpb25zLCBpbmNsdWRpbmcgUEFNVCB0cmFja2luZy4KJiM0MzsgKi8KJiM0MztzdHJ1Y3QgcGFnZSAqdGR4X2FsbG9jX2NvbnRyb2xfcGFnZSh2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IHBhZ2UgKnBhZ2U7CiYjNDM7CiYjNDM7CXBhZ2UgPSBhbGxvY19wYWdlKEdGUF9LRVJORUxfQUNDT1VOVCk7CiYjNDM7CWlmICghcGFnZSkKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwomIzQzOwlpZiAodGR4X3BhbXRfZ2V0KHBhZ2VfdG9fcGZuKHBhZ2UpLCBOVUxMKSkgewomIzQzOwkJX19mcmVlX3BhZ2UocGFnZSk7CiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gcGFnZTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9GT1JfS1ZNKHRkeF9hbGxvY19jb250cm9sX3BhZ2UpOwomIzQzOwomIzQzOy8qCiYjNDM7ICogRnJlZSBhIHBhZ2UgdGhhdCB3YXMgZ2lmdGVkIHRvIHRoZSBURFgtTW9kdWxlIGZvciB1c2UgYXMgYSBjb250cm9sCiYjNDM7ICogcGFnZS4gQWZ0ZXIgdGhpcywgdGhlIHBhZ2UgaXMgbm8gbG9uZ2VyIHByb3RlY3RlZCBieSBURFguCiYjNDM7ICovCiYjNDM7dm9pZCB0ZHhfZnJlZV9jb250cm9sX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpCiYjNDM7ewomIzQzOwlpZiAoIXBhZ2UpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CXRkeF9wYW10X3B1dChwYWdlX3RvX3BmbihwYWdlKSk7CiYjNDM7CV9fZnJlZV9wYWdlKHBhZ2UpOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0ZPUl9LVk0odGR4X2ZyZWVfY29udHJvbF9wYWdlKTsKJiM0MzsKJiM0MztzdGF0aWMgaW50IF9faW5pdCB0ZHhfZHBhbXRfc2V0dXAoY2hhciAqc3RyKQomIzQzO3sKJiM0MzsJcmV0dXJuIGtzdHJ0b2Jvb2woc3RyLCAmYW1wO3RkeF9lbmFibGVfZHBhbXQpID09IDA7CiYjNDM7fQomIzQzOwomIzQzO19fc2V0dXAoJiMzNDt0ZHhfZHBhbXQ9JiMzNDssIHRkeF9kcGFtdF9zZXR1cCk7CiYjNDM7CiB2b2lkIHRkeF9zeXNfZGlzYWJsZSh2b2lkKQogewogCXN0cnVjdCB0ZHhfbW9kdWxlX2FyZ3MgYXJncyA9IHt9OwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5oIGIvYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5oCmluZGV4IGJkZmQwZTFlMzM3YWMwLi5hODg2YzU0ZGVjYWFkYyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguaApAQCAtNDgsNiAmIzQzOzQ4LDggQEAKICNkZWZpbmUgVERIX1NZU19DT05GSUcJCQk0NQogI2RlZmluZSBUREhfU1lTX1NIVVRET1dOCQk1MgogI2RlZmluZSBUREhfU1lTX1VQREFURQkJCTUzCiYjNDM7I2RlZmluZSBUREhfUEhZTUVNX1BBTVRfQURECQk1OAomIzQzOyNkZWZpbmUgVERIX1BIWU1FTV9QQU1UX1JFTU9WRQkJNTkKICNkZWZpbmUgVERIX1NZU19ESVNBQkxFCQkJNjkKIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHhfZ2xvYmFsX21ldGFkYXRhLmMgYi9hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4X2dsb2JhbF9tZXRhZGF0YS5jCmluZGV4IGU0OWMzMDBmMjNkNDM1Li44MzkzZDJhYTU5ZGJlNyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeF9nbG9iYWxfbWV0YWRhdGEuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4X2dsb2JhbF9tZXRhZGF0YS5jCkBAIC0xLDYgJiM0MzsxLDYgQEAKIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiAvKgotICogQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnVuY3Rpb25zIHRvIHJlYWQgVERYIGdsb2JhbCBtZXRhZGF0YS4KJiM0MzsgKiBGdW5jdGlvbnMgdG8gcmVhZCBURFggZ2xvYmFsIG1ldGFkYXRhLgogICoKICAqIFRoaXMgZmlsZSBkb2VzbiYjMzk7dCBjb21waWxlIG9uIGl0cyBvd24gYXMgaXQgbGFja3Mgb2YgaW5jbHVzaW9uCiAgKiBvZiBTRUFNQ0FMTCB3cmFwcGVyIHByaW1pdGl2ZSB3aGljaCByZWFkcyBnbG9iYWwgbWV0YWRhdGEuCkBAIC0zMyw2ICYjNDM7MzMsMTggQEAgc3RhdGljIF9faW5pdCBpbnQgZ2V0X3RkeF9zeXNfaW5mb19mZWF0dXJlcyhzdHJ1Y3QgdGR4X3N5c19pbmZvX2ZlYXR1cmVzICpzeXNpbmYKIAlyZXR1cm4gcmV0OwogfQogCiYjNDM7c3RhdGljIF9faW5pdCBpbnQgZ2V0X3RkeF9zeXNfaW5mb190ZG1yX2RwYW10KHN0cnVjdCB0ZHhfc3lzX2luZm9fdGRtciAqc3lzaW5mb190ZG1yKQomIzQzO3sKJiM0MzsJaW50IHJldDsKJiM0MzsJdTY0IHZhbDsKJiM0MzsKJiM0MzsJcmV0ID0gcmVhZF9zeXNfbWV0YWRhdGFfZmllbGQoMHg5MTAwMDAwMTAwMDAwMDEzLCAmYW1wO3ZhbCk7CiYjNDM7CWlmICghcmV0KQomIzQzOwkJc3lzaW5mb190ZG1yLSZndDtwYW10X3BhZ2VfYml0bWFwX2VudHJ5X2JpdHMgPSB2YWw7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwogc3RhdGljIF9faW5pdCBpbnQgZ2V0X3RkeF9zeXNfaW5mb190ZG1yKHN0cnVjdCB0ZHhfc3lzX2luZm9fdGRtciAqc3lzaW5mb190ZG1yKQogewogCWludCByZXQgPSAwOwpAQCAtMTI5LDUgJiM0MzsxNDEsMTQgQEAgc3RhdGljIF9faW5pdCBpbnQgZ2V0X3RkeF9zeXNfaW5mbyhzdHJ1Y3QgdGR4X3N5c19pbmZvICpzeXNpbmZvKQogCXJldCA9IHJldCA/OiBnZXRfdGR4X3N5c19pbmZvX3RkX2N0cmwoJmFtcDtzeXNpbmZvLSZndDt0ZF9jdHJsKTsKIAlyZXQgPSByZXQgPzogZ2V0X3RkeF9zeXNfaW5mb190ZF9jb25mKCZhbXA7c3lzaW5mby0mZ3Q7dGRfY29uZik7CiAKJiM0MzsJLyoKJiM0MzsJICogVGhlIGtlcm5lbCBzdXBwb3J0cyB1c2luZyBURFggd2l0aG91dCBEeW5hbWljIFBBTVQsIHNvCiYjNDM7CSAqIGF2b2lkIHJlcG9ydGluZyBmYWlsdXJlIGlmIGl0JiMzOTtzIG5vdCBzdXBwb3J0ZWQuIERvbiYjMzk7dCB0cnkKJiM0MzsJICogdG8gc3VwcG9ydCBidWdneSBURFggbW9kdWxlcyB0aGF0IGFkdmVydGlzZSBEeW5hbWljIFBBTVQKJiM0MzsJICogYnV0IGRvbiYjMzk7dCBleHBvc2UgdGhlIG1ldGFkYXRhLgomIzQzOwkgKi8KJiM0MzsJaWYgKCFyZXQgJmFtcDsmYW1wOyB0ZHhfc3VwcG9ydHNfZHluYW1pY19wYW10KHN5c2luZm8pKQomIzQzOwkJcmV0ID0gZ2V0X3RkeF9zeXNfaW5mb190ZG1yX2RwYW10KCZhbXA7c3lzaW5mby0mZ3Q7dGRtcik7CiYjNDM7CiAJcmV0dXJuIHJldDsKIH0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTA6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcyMzUKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA5MzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRHluYW1pYyBQQU1UIFN1cHBvcnQgZm9yIFREWCBpbiBLVk0gLSBSZWFjaGFiaWxpdHkgQW5hbHlzaXMqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggaW50cm9kdWNpbmcgJiMzNDtEeW5hbWljIFBBTVQmIzM0OyBmb3IgSW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgaW4gS1ZNL3g4Ni4gSXQmIzM5O3MgYSBzaWduaWZpY2FudCBjaGFuZ2UsIHRvdWNoaW5nIGEgbG90IG9mIGNvcmUgZmlsZXM6IGRvY3VtZW50YXRpb24sIGhlYWRlcnMsIGFuZCBzZXZlcmFsIEtWTSBtb2R1bGVzIChtbXUsIHZteCwgVERYIHNwZWNpZmljIGNvZGUsIGV0Yy4pLiBJdCBsb29rcyBsaWtlIGl0IGFkZHMgYSBuZXcga2VybmVsIHBhcmFtZXRlciwgYHRkeF9kcGFtdGAsIGFuZCBhIHN1aXRlIG9mIG5ldyBmdW5jdGlvbnMgcmVsYXRlZCB0byBQQU1UIGNhY2hlIG1hbmFnZW1lbnQgKGB0ZHhfcGFtdF9nZXRgLCBgdGR4X3BhbXRfcHV0YCwgYHRkeF90b3B1cF9wYW10X2NhY2hlYCwgZXRjLikuIFRoZSBNTVUgaXMgYWxzbyBiZWluZyB1cGRhdGVkIHRvIGNhbGwgYHRkeF90b3B1cF9leHRlcm5hbF9wYW10X2NhY2hlYC4gVGhpcyBpcyBhbGwgcHJldHR5IHN1YnN0YW50aWFsLgoKVGhlIGltbWVkaWF0ZSBxdWVzdGlvbiBpczogSXMgdGhpcyBjb2RlIHBhdGggZXZlbiAqcmVhY2hhYmxlKiBpbiBhIHN0YW5kYXJkIGVudmlyb25tZW50LCBlc3BlY2lhbGx5IHdoZW4gY29uc2lkZXJpbmcgdGhlIGNvbnRleHQgcHJvdmlkZWQ/IFREWCwgYXMgSSB1bmRlcnN0YW5kIGl0LCByZWxpZXMgb24gc3BlY2lmaWMgSW50ZWwgaGFyZHdhcmUuIEl0JiMzOTtzIGEgdmlydHVhbGl6YXRpb24gZmVhdHVyZSwgc28gSSBuZWVkIHRvIHRoaW5rIGFib3V0IGhvdyB0aGlzIGludGVyYWN0cyB3aXRoIFFFTVUgYW5kIG90aGVyIGVudmlyb25tZW50cy4gU3RhbmRhcmQgUUVNVSBkb2VzbiYjMzk7dCBlbXVsYXRlIFREWCBoYXJkd2FyZSBuYXRpdmVseSB3aXRob3V0IEtWTSBURFggc3VwcG9ydCwgYW5kIGV2ZW4gdGhlbiwgaXQgZGVwZW5kcyBvbiBhY3R1YWwgVERYIGhhcmR3YXJlIHRvIHJ1biBURFggZ3Vlc3RzLgoKQnV0LCBhbmQgdGhpcyBpcyBpbXBvcnRhbnQsIFN5emthbGxlciBoZWF2aWx5IGZ1enpleiBLVk0uIEFuZCBLVk0gVERYIHN1cHBvcnQgKmlzKiBiZWluZyB1cHN0cmVhbWVkLiBTbywgdGhlIG5leHQgdGhvdWdodCBpczogSXMgU3l6a2FsbGVyIGZ1enppbmcgVERYPyBJIG5lZWQgdG8gY2hlY2suIEV2ZW4gaWYgU3l6a2FsbGVyIGlzIGZ1enppbmcgS1ZNLCBpdCB3aWxsIHByb2JhYmx5IGRlcGVuZCBvbiBURFggaGFyZHdhcmUgc2V0dXAgdG8gYWN0dWFsbHkgZW5hYmxlIFREWC4gVGhpcyB3b3VsZCBsaWtlbHkgY2F1c2UgYHRkeF9oYXJkd2FyZV9zZXR1cGAgdG8gZmFpbCBvciBqdXN0IG5vdCBlbmFibGUgVERYLgoKVGhlbiwgdGhlcmUmIzM5O3MgdGhlIEdDRSAoR29vZ2xlIENvbXB1dGUgRW5naW5lKSBmYWN0b3IuIFN5emthbGxlciBydW5zIG9uIEdDRSwgYW5kIEdDRSAqZG9lcyogaGF2ZSBURFggaW5zdGFuY2VzIChzcGVjaWZpY2FsbHksIEMzIGluc3RhbmNlcykuIEJ1dCBkb2VzIFN5emthbGxlciBhY3R1YWxseSAqdXNlKiB0aG9zZSBURFggaW5zdGFuY2VzPyBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQuIEkgbmVlZCB0byBjaGVjayBpZiB0aGlzIGNvZGUgcGF0aCBpcyBhY3R1YWxseSByZWFjaGFibGUgd2l0aGluIFN5emthbGxlciYjMzk7cyBzZXR1cC4KCklmIFREWCBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBDUFUsIGB0ZHhfaGFyZHdhcmVfc2V0dXBgIHdpbGwgbm90IGVuYWJsZSBpdCwgc28gaWYgbXkgdGFyZ2V0IGhhcmR3YXJlIGRvZXNuJiMzOTt0IHN1cHBvcnQgVERYLCBJIGNhbiBkaXNyZWdhcmQgdGhpcy4gVGhpcyBtYXkgYmUgdGhlIGtleS4KCk5vdywgdGhlIHByb21wdCBzcGVjaWZpY2FsbHkgbWVudGlvbnMgY29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VIGlmIHRoZSBoYXJkd2FyZSBpcyBub3QgYXZhaWxhYmxlLiBUaGVuIGl0IG9mZmVycyBleGFtcGxlcywgbGlrZSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgVERYIGZhbGxzIGludG8gdGhpcyBjYXRlZ29yeS4KClREWCBpcyBhICpDUFUqIGZlYXR1cmUsIG5vdCBhIFBDSWUgY2FyZCwgc28gdGhhdCBleGFtcGxlIGRvZXNuJiMzOTt0IHF1aXRlIGFwcGx5LiBIb3dldmVyLCBpdCBzdGlsbCBkZXBlbmRzIG9uIHRoZSBDUFUgaGF2aW5nIFREWCBjYXBhYmlsaXR5LiBTbywgdGhpcyBjb21lcyBiYWNrIHRvIG15IHByZXZpb3VzIHBvaW50cy4gTGV0JiMzOTtzIGNoZWNrIGlmIHRoaXMgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gKHVzaW5nIHRoZSBgdGR4X2hhcmR3YXJlX3NldHVwYCBwYXRoKSBpcyBjb25zaWRlcmVkIHJlYWNoYWJsZS4KCkkmIzM5O2xsIHNlYXJjaCBmb3IgYHRkeF9oYXJkd2FyZV9zZXR1cGAgb3IgYHRkeF9pbml0X21vZHVsZWAuIFRoYXQgc2hvdWxkIHRlbGwgbWUgaWYgd2Ugc2hvdWxkIGNvbnNpZGVyIGl0IHJlYWNoYWJsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxMDo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0ZHhfaGFyZHdhcmVfc2V0dXAmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3ZteC9tYWluLmM9MjQ9c3RhdGljIF9faW5pdCBpbnQgdnRfaGFyZHdhcmVfc2V0dXAodm9pZClcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0zMS1cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjMyOlx0cmV0dXJuIGVuYWJsZV90ZHggPyB0ZHhfaGFyZHdhcmVfc2V0dXAoKSA6IDA7XG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0zMy19XG4tLVxuYXJjaC94ODYva3ZtL3ZteC90ZHguYz0zMzk0PXZvaWQgdGR4X2hhcmR3YXJlX3Vuc2V0dXAodm9pZClcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTMzOTgtXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jOjMzOTk6c3RhdGljIGludCBfX2luaXQgX190ZHhfaGFyZHdhcmVfc2V0dXAodm9pZClcbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMzQwMC17XG4tLVxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0zNDcyLVxuYXJjaC94ODYva3ZtL3ZteC90ZHguYzozNDczOmludCBfX2luaXQgdGR4X2hhcmR3YXJlX3NldHVwKHZvaWQpXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTM0NzQte1xuLS1cbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMzUwOC1cbmFyY2gveDg2L2t2bS92bXgvdGR4LmM6MzUwOTpcdHIgPSBfX3RkeF9oYXJkd2FyZV9zZXR1cCgpO1xuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0zNTEwLVx0aWYgKHIpIHtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5oLTktXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5oOjEwOmludCB0ZHhfaGFyZHdhcmVfc2V0dXAodm9pZCk7XG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5oLTExLXZvaWQgdGR4X2hhcmR3YXJlX3Vuc2V0dXAodm9pZCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTA6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkzNjIKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiAzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFREWCBIYXJkd2FyZSBTZXR1cCoqCgpPa2F5LCBsZXQmIzM5O3MgdHJhY2UgdGhpcyB0aHJvdWdoLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZXhlY3V0aW9uIGZsb3csIGVzcGVjaWFsbHkgYXJvdW5kIHRoZSBURFggaGFyZHdhcmUgY29uZmlndXJhdGlvbi4gVGhlIGNydWNpYWwgZnVuY3Rpb24gc2VlbXMgdG8gYmUgYHRkeF9oYXJkd2FyZV9zZXR1cGAuIEkgc2VlIGl0JiMzOTtzIGRlZmluaXRlbHkgYmVpbmcgY2FsbGVkLCBnb29kLiBgdnRfaGFyZHdhcmVfc2V0dXBgIGNhbGxzIGl0LCB3aGljaCBnaXZlcyBtZSBhIHN0YXJ0aW5nIHBvaW50LiBOb3csIGEgY3JpdGljYWwgcXVlc3Rpb24gaXMgdGhlIGluaXRpYWwgc3RhdGU6IGlzIGBlbmFibGVfdGR4YCBzZXQgdG8gdHJ1ZSBieSBkZWZhdWx0PyBUaGF0JiMzOTtzIHdoYXQgSSByZWFsbHkgbmVlZCB0byBrbm93IHRvIHVuZGVyc3RhbmQgdGhlIHN5c3RlbSYjMzk7cyBiYXNlbGluZSBiZWhhdmlvci4gSSBuZWVkIHRvIGNvbmZpcm0gaXRzIGRlZmF1bHQgdmFsdWUuIEtub3dpbmcgdGhlIGRlZmF1bHQgdmFsdWUgb2YgYGVuYWJsZV90ZHhgIHdpbGwgc2lnbmlmaWNhbnRseSBpbGx1bWluYXRlIHRoZSB1c3VhbCBoYXJkd2FyZSBjb25maWd1cmF0aW9uIHByb2ZpbGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTA6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZW5hYmxlX3RkeCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vdm14L21haW4uYz0xNj1zdGF0aWMgdm9pZCB2dF9kaXNhYmxlX3ZpcnR1YWxpemF0aW9uX2NwdSh2b2lkKVxuLS1cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTE4LVx0LyogTm90ZSwgVERYICphbmQqIFZNWCBuZWVkIHRvIGJlIGRpc2FibGVkIGlmIFREWCBpcyBlbmFibGVkLiAqL1xuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6MTk6XHRpZiAoZW5hYmxlX3RkeClcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTIwLVx0XHR0ZHhfZGlzYWJsZV92aXJ0dWFsaXphdGlvbl9jcHUoKTtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz0yND1zdGF0aWMgX19pbml0IGludCB2dF9oYXJkd2FyZV9zZXR1cCh2b2lkKVxuLS1cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTMxLVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6MzI6XHRyZXR1cm4gZW5hYmxlX3RkeCA/IHRkeF9oYXJkd2FyZV9zZXR1cCgpIDogMDtcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTMzLX1cbi0tXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz0zNT1zdGF0aWMgdm9pZCB2dF9oYXJkd2FyZV91bnNldHVwKHZvaWQpXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0zNi17XG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzozNzpcdGlmIChlbmFibGVfdGR4KVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMzgtXHRcdHRkeF9oYXJkd2FyZV91bnNldHVwKCk7XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9MTA1MD1zdGF0aWMgaW50IF9faW5pdCB2dF9pbml0KHZvaWQpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMTA2NS1cdHZjcHVfYWxpZ24gPSBfX2FsaWdub2ZfXyhzdHJ1Y3QgdmNwdV92bXgpO1xuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6MTA2NjpcdGlmIChlbmFibGVfdGR4KSB7XG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0xMDY3LVx0XHR2Y3B1X3NpemUgPSBtYXhfdCh1bnNpZ25lZCwgdmNwdV9zaXplLFxuLS1cbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtNTUtXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jOjU2OmJvb2wgZW5hYmxlX3RkeCBfX3JvX2FmdGVyX2luaXQ7XG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jOjU3Om1vZHVsZV9wYXJhbV9uYW1lZCh0ZHgsIGVuYWJsZV90ZHgsIGJvb2wsIDA0NDQpO1xuYXJjaC94ODYva3ZtL3ZteC90ZHguYy01OC1cbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jPTM0NzM9aW50IF9faW5pdCB0ZHhfaGFyZHdhcmVfc2V0dXAodm9pZClcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTM0ODAtXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jOjM0ODE6XHRpZiAoIWVuYWJsZV90ZHgpXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTM0ODItXHRcdHJldHVybiAwO1xuLS1cbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMzU0MC1zdWNjZXNzX2Rpc2FibGVfdGR4OlxuYXJjaC94ODYva3ZtL3ZteC90ZHguYzozNTQxOlx0ZW5hYmxlX3RkeCA9IDA7XG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTM1NDItXHRyZXR1cm4gMDtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5oPTExPXZvaWQgdGR4X2hhcmR3YXJlX3Vuc2V0dXAodm9pZCk7XG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5oLTEyLVxuYXJjaC94ODYva3ZtL3ZteC90ZHguaDoxMzpleHRlcm4gYm9vbCBlbmFibGVfdGR4O1xuYXJjaC94ODYva3ZtL3ZteC90ZHguaC0xNC1cbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5oPTE4Nz1URFhfQlVJTERfVERWUFNfQUNDRVNTT1JTKDY0LCBTVEFURV9OT05fQVJDSCwgc3RhdGVfbm9uX2FyY2gpO1xuLS1cbmFyY2gveDg2L2t2bS92bXgvdGR4LmgtMTg5LSNlbHNlXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5oOjE5MDojZGVmaW5lIGVuYWJsZV90ZHhcdDBcbmFyY2gveDg2L2t2bS92bXgvdGR4LmgtMTkxLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDEwOjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNjQ0CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMzU2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlREWCBGdXp6aW5nIEZlYXNpYmlsaXR5IC0gQSBRdWljayBBdWRpdCoqCgpPa2F5LCBzbyBgZW5hYmxlX3RkeGAgbWFwcyB0byBga3ZtX2ludGVsLnRkeGAsIHRoYXQmIzM5O3Mgc3RyYWlnaHRmb3J3YXJkLiBUaGUgcXVlc3Rpb24gaXM6IGNhbiB3ZSAqYWN0dWFsbHkqIGZ1enogVERYPyBJIGtub3cgZnJvbSBleHBlcmllbmNlIHRoYXQgVERYIHJlcXVpcmVzIHNwZWNpZmljIGhhcmR3YXJlIHN1cHBvcnQuIFN0YW5kYXJkIFN5emthbGxlciBHQ0UgaW5zdGFuY2VzIGFyZW4mIzM5O3QgbGlrZWx5IHRvIGhhdmUgdGhhdCB1bmxlc3Mgc29tZW9uZSBzcGVjaWZpY2FsbHkgc2V0IHRoZW0gdXAuIEFuZCwgc2luY2UgUUVNVSBkb2VzbiYjMzk7dCBlbXVsYXRlIFREWCBuYXRpdmVseSwgdGhhdCYjMzk7cyBhbm90aGVyIGh1cmRsZS4KCkJ1dCBoYW5nIG9u4oCmIGlmIFN5emthbGxlciAqd2FzKiBydW5uaW5nIG9uIFREWCBoYXJkd2FyZSAoaGlnaGx5IHVubGlrZWx5LCBidXQgcG9zc2libGUpLCB0aGVuIG1heWJlPyBBaCwgcmlnaHQsIHRoZSBwcm9tcHQgc2F5cyB0byBpZ25vcmUgdGhpbmdzIHRoYXQgYXJlIHVucmVhY2hhYmxlIGluIHZpcnR1YWxpemF0aW9uLCB3aGljaCB3b3VsZCBpbmNsdWRlIGVtdWxhdGVkIGhhcmR3YXJlLiBTbywgaXMgVERYIG9uZSBvZiB0aG9zZSDigJxpbXBvc3NpYmxl4oCdIGNhc2VzIGluIEdDRSBvciBRRU1VPwoKSG9sZCBvbi4uLiBJJiMzOTttIGdldHRpbmcgYWhlYWQgb2YgbXlzZWxmLCBHQ0UgKmRvZXMqIG9mZmVyIFREWCBpbnN0YW5jZXMgKEMzIHNlcmllcyEpLCBhbmQgUUVNVS9LVk0gKmRvZXMqIHN1cHBvcnQgVERYLiBTbywgbXkgaW5pdGlhbCBhc3N1bXB0aW9uIHdhcyB3cm9uZyEgT2theSwgdGhlIHBsb3QgdGhpY2tlbnMuIE5vdywgZG9lcyAqdGhpcyBzcGVjaWZpYyBwYXRjaCogYWN0dWFsbHkgaW50cm9kdWNlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMsIGFueXRoaW5nIHdvcnRoIGZ1enppbmc/IFllcywgaXQmIzM5O3MgYWJvdXQgRHluYW1pYyBQQU1UIHN1cHBvcnQuIFNvIGlzIGl0IHJlYWNoYWJsZT8KCklmIGl0JiMzOTtzIHJlYWNoYWJsZSwgaXQmIzM5O3Mgd29ydGggZnV6emluZy4gVG8gZmlndXJlIG91dCByZWFjaGFiaWxpdHksIEkgbmVlZCB0byBjaGVjayBgdGR4X3N1cHBvcnRzX2R5bmFtaWNfcGFtdGAsIHdoaWNoIGRlcGVuZHMgb24gYHRkeF9lbmFibGVfZHBhbXRgLiBBaCwgYW5kICp0aGF0KiBwYXJhbWV0ZXIgaXMgY29udHJvbGxlZCBieSBgdGR4X2RwYW10PW9uYCBrZXJuZWwgcGFyYW1ldGVyLiBCdXQgdGhlIHByb21wdCBpcyBhc2tpbmcgZm9yIGBFbmFibGVDb25maWdzYCBub3Qga2VybmVsIHBhcmFtZXRlcnMuIFdhaXQsIHRoYXQmIzM5O3MgS2NvbmZpZyEgSSBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIGZvciBURFggcmVsYXRlZCBvcHRpb25zIG5vdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxMDo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSU5URUxfVERYX0hPU1QmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYvS2NvbmZpZz0xODQ0PWNvbmZpZyBYODZfVVNFUl9TSEFET1dfU1RBQ0tcbi0tXG5hcmNoL3g4Ni9LY29uZmlnLTE4NjMtXG5hcmNoL3g4Ni9LY29uZmlnOjE4NjQ6Y29uZmlnIElOVEVMX1REWF9IT1NUXG5hcmNoL3g4Ni9LY29uZmlnLTE4NjUtXHRib29sIFwmIzM0O0ludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIGhvc3Qgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDEwOjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNTAwCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQXNzZXNzaW5nIElOVEVMX1REWF9IT1NUIERlcGVuZGVuY2llcyoqCgpPa2F5LCB0aW1lIHRvIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O0xldCYjMzk7cyBtYWtlIHN1cmUgdGhlIGBJTlRFTF9URFhfSE9TVGAgZGVwZW5kZW5jaWVzIGFyZSBhbGwgc3F1YXJlZCBhd2F5LiYjMzQ7IEkmIzM5O20gbWVudGFsbHkgcnVubmluZyB0aHJvdWdoIHRoZSBwcm9iYWJsZSBsaXN0OiB0aGUgaHlwZXJ2aXNvciwgdGhlIGZpcm13YXJlLCB0aGUgc3BlY2lmaWMgQ1BVIG1pY3JvY29kZSByZXZpc2lvbiwgbGlrZWx5IGNlcnRhaW4ga2VybmVsIHZlcnNpb25zLi4uIEkmIzM5O20gbG9va2luZyBmb3IgYW55IG9idmlvdXMgcmVkIGZsYWdzLCBrbm93biBpbmNvbXBhdGliaWxpdGllcywgb3Igb3Zlcmxvb2tlZCBwcmVyZXF1aXNpdGVzIHRoYXQgY291bGQgdHJpcCB1cyB1cCBsYXRlci4gSSBuZWVkIHRvIGJlIG1ldGhvZGljYWwgaGVyZTsgbWlzc2luZyBldmVuIGEgc2VlbWluZ2x5IG1pbm9yIGRlcGVuZGVuY3kgY2FuIGxlYWQgdG8gb2JzY3VyZSBhbmQgZnJ1c3RyYXRpbmcgZGVidWdnaW5nIGRvd24gdGhlIGxpbmUsIHBhcnRpY3VsYXJseSB3aXRoIHNvbWV0aGluZyBhcyBjb21wbGV4IGFzIFREWC4gQmVzdCB0byBnZXQgdGhpcyBmb3VuZGF0aW9uYWwgc3R1ZmYgdmFsaWRhdGVkIGVhcmx5LiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGRvY3VtZW50YXRpb24gc3VnZ2VzdHMgYW5kIGNyb3NzLXJlZmVyZW5jZSB0aGF0IHdpdGggdGhlIGN1cnJlbnQgcGxhdGZvcm0gY29uZmlndXJhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTA6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElOVEVMX1REWF9IT1NUJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9LY29uZmlnPTE4NDQ9Y29uZmlnIFg4Nl9VU0VSX1NIQURPV19TVEFDS1xuLS1cbmFyY2gveDg2L0tjb25maWctMTg2My1cbmFyY2gveDg2L0tjb25maWc6MTg2NDpjb25maWcgSU5URUxfVERYX0hPU1RcbmFyY2gveDg2L0tjb25maWctMTg2NS1cdGJvb2wgXCYjMzQ7SW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgaG9zdCBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDEwOjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxODM2CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBhcyBpZiB0aGV5JiMzOTtyZSBteSBvd246CgoqKkFuYWx5emluZyB0aGUgS2NvbmZpZyBmb3IgSU5URUxfVERYX0hPU1QqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgaW50byB0aGUgZGV0YWlscy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHB1bGwgdXAgdGhlIEtjb25maWcgZmlsZSBmb3IgYElOVEVMX1REWF9IT1NUYC4gSSBuZWVkIGEgY2xlYXIgdW5kZXJzdGFuZGluZyBvZiB3aGF04oCZcyBnb2luZyBvbiB3aXRoIHRoaXMgY29uZmlndXJhdGlvbiBvcHRpb24uIEtub3dpbmcgdGhpcyBpcyB0aGUgZm91bmRhdGlvbiBmb3IgZXZlcnl0aGluZyBlbHNlLCBzbyBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgd2FudCB0byBzZWUgdGhlIGRlcGVuZGVuY2llcywgdGhlIGRlZmF1bHRzLCB0aGUgaGVscCB0ZXh0IOKAkyB0aGUgd2hvbGUgc2hlYmFuZy4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBsb2dpYyBvZiB0aGUgZmVhdHVyZSBsaXZlcyBhbmQgdGhpcyBjb25maWcgaXMga2V5IGZvciBhbnl0aGluZyByZWxhdGVkIHRvIEludGVsIFREWCBob3N0IGZ1bmN0aW9uYWxpdHksIEkgbmVlZCB0byBrbm93IHdoZXJlIGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlLiBMZXTigJlzIGdldCB0byByZWFkaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxMDo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxODYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE4NjA6XHRcdCAgU2VlIERvY3VtZW50YXRpb24vYXJjaC94ODYvc2hzdGsucnN0IGZvciBtb3JlIGluZm9ybWF0aW9uLlxuMTg2MTpcdFxuMTg2MjpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuMTg2MzpcdFxuMTg2NDpcdGNvbmZpZyBJTlRFTF9URFhfSE9TVFxuMTg2NTpcdFx0Ym9vbCBcJiMzNDtJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyAoVERYKSBob3N0IHN1cHBvcnRcJiMzNDtcbjE4NjY6XHRcdGRlcGVuZHMgb24gQ1BVX1NVUF9JTlRFTFxuMTg2NzpcdFx0ZGVwZW5kcyBvbiBYODZfNjRcbjE4Njg6XHRcdGRlcGVuZHMgb24gS1ZNX0lOVEVMXG4xODY5Olx0XHRkZXBlbmRzIG9uIFg4Nl9YMkFQSUNcbjE4NzA6XHRcdHNlbGVjdCBBUkNIX0tFRVBfTUVNQkxPQ0tcbjE4NzE6XHRcdGRlcGVuZHMgb24gQ09OVElHX0FMTE9DXG4xODcyOlx0XHRkZXBlbmRzIG9uIFg4Nl9NQ0VcbjE4NzM6XHRcdGhlbHBcbjE4NzQ6XHRcdCAgSW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgcHJvdGVjdHMgZ3Vlc3QgVk1zIGZyb20gbWFsaWNpb3VzXG4xODc1Olx0XHQgIGhvc3QgYW5kIGNlcnRhaW4gcGh5c2ljYWwgYXR0YWNrcy4gIFRoaXMgb3B0aW9uIGVuYWJsZXMgbmVjZXNzYXJ5IFREWFxuMTg3NjpcdFx0ICBzdXBwb3J0IGluIHRoZSBob3N0IGtlcm5lbCB0byBydW4gY29uZmlkZW50aWFsIFZNcy5cbjE4Nzc6XHRcbjE4Nzg6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbjE4Nzk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTA6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIzNjMKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBmcmFtZWQgYXMgbXkgaW50ZXJuYWwgdGhvdWdodCBwcm9jZXNzOgoKKipURFggQ29uZmlndXJhdGlvbiBJbnF1aXJ5KioKClJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBhbmQgaXQgc2VlbXMgYElOVEVMX1REWF9IT1NUYCBpcyB0aGUga2V5IGNvbmZpZ3VyYXRpb24gc2V0dGluZyBoZXJlLiBCdXQsIGhhbmcgb24gYSBzZWNvbmQuLi4gaXMgdGhlcmUgZXZlbiBhIEtWTS1zcGVjaWZpYyBjb25maWd1cmF0aW9uIGZvciBURFg/IEkgbmVlZCB0byBjbGFyaWZ5IGlmIHRoaXMgaXMganVzdCBhIGdlbmVyYWwgc2V0dGluZyBvciBpZiBpdCBuZWVkcyB0byBiZSBpbnRlZ3JhdGVkIGludG8gdGhlIEtWTSBlbnZpcm9ubWVudC4gSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIHRoZSBLVk0gZG9jdW1lbnRhdGlvbiB0byBzZWUgaWYgdGhlcmUmIzM5O3MgYSBkZWRpY2F0ZWQgc2V0dGluZyBmb3IgVERYIHVuZGVyIHRoZSBob29kLCBvciBpZiB0aGlzIGdlbmVyYWwgc2V0dGluZyBpcyBzdWZmaWNpZW50IGZvciBlbmFibGluZyB0aGUgZmVhdHVyZSBpbiB0aGF0IGNvbnRleHQuIFRoaXMgaXMgc29tZXRoaW5nIEkgbmVlZCB0byBmdWxseSB1bmRlcnN0YW5kIGJlZm9yZSBJIHByb2NlZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDEwOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLVk1fSU5URUxfVERYJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnPTEyMj1jb25maWcgWDg2X1NHWF9LVk1cbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzMtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMzQ6Y29uZmlnIEtWTV9JTlRFTF9URFhcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzNS1cdGJvb2wgXCYjMzQ7SW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxMDo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjY3NgoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIHRoZSBtYXR0ZXIsIHN1bW1hcml6ZWQgYXMgcmVxdWVzdGVkOgoKKipLVk0gQ29uZmlndXJhdGlvbiBEZWVwIERpdmUqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgS1ZNIGNvbmZpZ3VyYXRpb24gYW5kIHdoYXQmIzM5O3MgZ29pbmcgb24gYXQgbGluZSAxMzQgaW4gYGFyY2gveDg2L2t2bS9LY29uZmlnYC4gTGV0IG1lIHB1bGwgdXAgdGhhdCBmaWxlLi4uIHJpZ2h0LCB0aGUgS2NvbmZpZyBmaWxlIGZvciB0aGUgeDg2IEtWTSBhcmNoaXRlY3R1cmUuIEnigJltIGd1ZXNzaW5nIGl0JiMzOTtzIHNvbWUgc29ydCBvZiBmZWF0dXJlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIG9yIGEgZGVwZW5kZW5jeSBjaGVjay4gSSBuZWVkIHRvIGJlIHN1cmUgSSB1bmRlcnN0YW5kIGl0cyBpbXBsaWNhdGlvbnMuIEkmIzM5O2xsIG5lZWQgdG8gcmVtZW1iZXIgdG8gY3Jvc3MtcmVmZXJlbmNlIHRoaXMgd2l0aCByZWxldmFudCBjb2RlIGluIHRoZSBga3ZtYCBkaXJlY3RvcnkgYW5kIHVuZGVyc3RhbmQgaG93IHRoZSBwYXJ0aWN1bGFyIGNvbmZpZyBpbnRlcmFjdHMgd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUgaHlwZXJ2aXNvci4gVGhpcyBpcyBob3cgSSBidWlsZCBhIGNvbXByZWhlbnNpdmUgcGljdHVyZS4gVGltZSB0byBnZXQgc3RhcnRlZCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTA6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTMwOlx0XHQgIGd1ZXN0cyB2aWEgYSBkZXZpY2Ugbm9kZSwgZS5nLiAvZGV2L3NneF92ZXBjLlxuIDEzMTpcdFxuIDEzMjpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuIDEzMzpcdFxuIDEzNDpcdGNvbmZpZyBLVk1fSU5URUxfVERYXG4gMTM1Olx0XHRib29sIFwmIzM0O0ludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIHN1cHBvcnRcJiMzNDtcbiAxMzY6XHRcdGRlZmF1bHQgeVxuIDEzNzpcdFx0ZGVwZW5kcyBvbiBJTlRFTF9URFhfSE9TVFxuIDEzODpcdFx0c2VsZWN0IEtWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTXG4gMTM5Olx0XHRzZWxlY3QgSEFWRV9LVk1fQVJDSF9HTUVNX1BPUFVMQVRFXG4gMTQwOlx0XHRoZWxwXG4gMTQxOlx0XHQgIFByb3ZpZGVzIHN1cHBvcnQgZm9yIGxhdW5jaGluZyBJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyAoVERYKVxuIDE0MjpcdFx0ICBjb25maWRlbnRpYWwgVk1zIG9uIEludGVsIHByb2Nlc3NvcnMuXG4gMTQzOlx0XG4gMTQ0Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gMTQ1Olx0XG4gMTQ2Olx0Y29uZmlnIEtWTV9BTURcbiAxNDc6XHRcdHRyaXN0YXRlIFwmIzM0O0tWTSBmb3IgQU1EIHByb2Nlc3NvcnMgc3VwcG9ydFwmIzM0O1xuIDE0ODpcdFx0ZGVwZW5kcyBvbiBLVk0gXHUwMDI2XHUwMDI2IChDUFVfU1VQX0FNRCB8fCBDUFVfU1VQX0hZR09OKVxuIDE0OTpcdFx0aGVscFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxMDo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzIxNgoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDc4OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipXb3J0aCBGdXp6aW5nIERlY2lzaW9uOiBURFggUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIHRyeWluZyB0byBkZWNpZGUgaWYgaXQmIzM5O3Mgd29ydGggZnV6emluZy4gVGhlIGtleSBoZXJlIHNlZW1zIHRvIGJlIGBLVk1fSU5URUxfVERYYCBhbmQgYElOVEVMX1REWF9IT1NUYCwgdGhlIHJlbGV2YW50IGNvbmZpZ3MuIFRoZSBwcm9tcHQgaXMgYXNraW5nIGlmIHRoaXMgY29kZSBjYW4gYmUgcmVhY2hlZCwgc3BlY2lmaWNhbGx5LCBpZiBpdCYjMzk7cyAmIzM0O2ltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUuLi4mIzM0Oy4gVERYIGlzIGEgKmhhcmR3YXJlKiBmZWF0dXJlLCBzbyB0aGF0JiMzOTtzIHRoZSBzdGlja2luZyBwb2ludC4KCkNhbiBzdGFuZGFyZCBRRU1VIGhpdCB0aGlzPyBOb3BlLCBRRU1VIGRvZXNuJiMzOTt0IGVtdWxhdGUgVERYLiBJdCAqY2FuKiBydW4gYXMgYSBURFggaG9zdCwgYnV0IG9ubHkgaWYgdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUgaGFzIHRoZSBzdXBwb3J0LiBTeXprYWxsZXIgcnVucyBvbiBHQ0UsIGFuZCBHQ0UgKmRvZXMqIGhhdmUgVERYIGluc3RhbmNlcywgc28gdGhhdOKAmXMgYSBwb3NzaWJpbGl0eS4gSSB3YXMgaW5pdGlhbGx5IGxlYW5pbmcgdG93YXJkICYjMzQ7aW1wb3NzaWJsZSB0byByZWFjaCYjMzQ7IGJ1dCB0aGVuIHJlYWxpemVkIHRoYXQgU3l6a2FsbGVyIHdpbGwgdGVzdCBURFggaWYgaXQgY2FuLiBJdCBoZWF2aWx5IHRlc3RzIEtWTSwgYW5kIGlmIFREWCBpcyBlbmFibGVkLCBpdCBzaG91bGQgYmUgdGVzdGVkLgoKQnV0IHRoZW4gSSBzYXcgdGhlIGtlcm5lbCBwYXJhbWV0ZXIsIGB0ZHhfZHBhbXQ9b25gLiBUaGF04oCZcyBhIHBvdGVudGlhbCByb2FkYmxvY2suIElmIGl04oCZcyBub3Qgc2V0LCBgdGR4X2VuYWJsZV9kcGFtdGAgaXMgZmFsc2UsIGFuZCB0aGUgY29kZSBwYXRoIGlzIHVucmVhY2hhYmxlLiBTeXprYWxsZXIgZG9lc24mIzM5O3QgYXV0b21hdGljYWxseSBwYXNzIG5ldyBrZXJuZWwgcGFyYW1ldGVycyB1bmxlc3MgaXQmIzM5O3MgY29uZmlndXJlZCB0byBkbyBzby4gSG93ZXZlciwgdGhlIHByb21wdCBpcyBhc2tpbmcgYWJvdXQgZnVuY3Rpb25hbCBjaGFuZ2VzLCBzbyB0aGUgcGFyYW1ldGVyIGFzcGVjdCBpcyBhIHNlY29uZGFyeSBjb25zaWRlcmF0aW9uIGF0IHRoaXMgc3RhZ2UuCgpUaGVuIEkgaGFkIHRvIHJlbWluZCBteXNlbGYgb2YgdGhlIHByb21wdCYjMzk7cyB3b3JkaW5nOiBpdCBzcGVjaWZpY2FsbHkgbWVudGlvbnMgJiMzNDtDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUmIzM0Oy4gTm93LCBRRU1VLCBpbiBhICpzdGFuZGFyZCogY29uZmlndXJhdGlvbiAod2l0aG91dCBLVk0gYW5kIFREWCBoYXJkd2FyZSkgY2Fu4oCZdCBlbXVsYXRlIFREWCwgc28gdGhlIGZlYXR1cmUgd291bGQgYmUgaW5hY2Nlc3NpYmxlLiBRRU1VIGRvZXMgKm5vdCogZW11bGF0ZSBpdCEgVERYIHJlcXVpcmVzIHBoeXNpY2FsIENQVSBzdXBwb3J0IGFuZCBhIFREWCBtb2R1bGUgbG9hZGVkIGJ5IHRoZSBCSU9TL2Zpcm13YXJlLiBTbywgaW4gc3RhbmRhcmQgUUVNVSBvciBldmVuIEtWTSB3aXRob3V0IHRoZSBURFggbW9kdWxlLCBpdCAqaXMqIHVucmVhY2hhYmxlLgoKSSBjaGVja2VkIGlmIFN5emthbGxlciBoYXMgYW55IHNwZWNpZmljIGBxZW11X3RkeGAgY29uZmlnLCBidXQgbm8uIEl0IHJ1bnMgS1ZNLCBhbmQgc29tZSBHQ0UgaW5zdGFuY2VzIG1pZ2h0IGhhdmUgVERYLCBidXQgbW9zdCBkZWZhdWx0IG9uZXMgcHJvYmFibHkgZG9uJiMzOTt0LiBIb3dldmVyLCB0aGUgcHJvbXB0IGFsc28gc2F5cyB0byBjb25zaWRlciBpZiBjb2RlIHJlcXVpcmVzIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzLCB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuIFREWCBpcyBhIENQVSBmZWF0dXJlLCBzbyBpdCYjMzk7cyBub3QgdGhlIHNhbWUuCgpBbmQgdGhlbiBJIGhhZCBhIGJyZWFrdGhyb3VnaCEgS1ZNIGZlYXR1cmVzIGxpa2UgU0VWIGFuZCBURFggYXJlICpvZnRlbiogdGVzdGVkIGJ5IHN5emthbGxlciBpZiB0aGV5IHJ1biBvbiBjYXBhYmxlIGhhcmR3YXJlLiBTeXprYWxsZXIgaGFzIHBvb2xzIGZvciBBTUQgU0VWIGFuZCBJbnRlbCBURFgsIHNwZWNpZmljYWxseSBmb3IgdGhpcyBwdXJwb3NlLiBUaGVzZSBhcmUgY29yZSBLVk0veDg2IGNvZGUsIG5vdCBhIHZlbmRvci1zcGVjaWZpYyBQQ0llIGNhcmQsIHNvIHRoYXQmIzM5O3MgdGhlIGRpZmZlcmVuY2UuIFRoZSBmdW5jdGlvbnMgSSBuZWVkIHRvIGZvY3VzIG9uIGFyZSBgdGR4X3BhbXRfZ2V0YCwgYHRkeF9wYW10X3B1dGAsIGB0ZHhfdG9wdXBfcGFtdF9jYWNoZWAsIGB0ZHhfYWxsb2NfY29udHJvbF9wYWdlYCwgYW5kIGB0ZHhfZnJlZV9jb250cm9sX3BhZ2VgLiBUaGVzZSBhcmUgY2FsbGVkIGZyb20gS1ZNIE1NVSBhbmQgVERYIHZjcHUvdm0gaW5pdCBjb2RlLiBTbywgSSBoYXZlIHRvIGNvbnNpZGVyIHRoaXMgaW4gdGhhdCBjb250ZXh0LCBhbmQgZ2l2ZW4gdGhhdCB0aGVzZSBhcmUgY29yZSBmdW5jdGlvbnMgb2YgdGhlIFREWCBpbXBsZW1lbnRhdGlvbiwgdGhlIGFuc3dlciBpcyBXb3J0aEZ1enppbmc9dHJ1ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTA6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTF9GT1JfS1ZNXFwodGR4X3BhbXRfZ2V0XFwpJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYz0yMTU5PWludCB0ZHhfcGFtdF9nZXQoa3ZtX3Bmbl90IHBmbiwgc3RydWN0IHRkeF9wYW10X2NhY2hlICpjYWNoZSlcbi0tXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtMjIxMy19XG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM6MjIxNDpFWFBPUlRfU1lNQk9MX0ZPUl9LVk0odGR4X3BhbXRfZ2V0KTtcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYy0yMjE1LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxMDo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDkzNgoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDY2OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipURFggU3VwcG9ydCBBbmFseXNpcyBmb3IgRnV6emluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBjb25maXJtaW5nIHRoYXQgdGhlIFREWCBmdW5jdGlvbnMgYXJlLCBpbiBmYWN0LCBleHBvcnRlZCBmb3IgS1ZNLiBUaGUgbWFpbiBvbmVzIEkmIzM5O20gc2VlaW5nIGFyZSBgdGR4X3BhbXRfZ2V0YCwgYHRkeF9wYW10X3B1dGAsIGB0ZHhfdG9wdXBfcGFtdF9jYWNoZWAsIGB0ZHhfYWxsb2NfY29udHJvbF9wYWdlYCwgYW5kIGB0ZHhfZnJlZV9jb250cm9sX3BhZ2VgLiBJIHF1aWNrbHkgc2VlIHRoYXQgYHRkeF9wYW10X2dldGAgaXMgY2FsbGVkIHdpdGhpbiBib3RoIGB0ZHhfc2VwdF9tYXBfbm9ubGVhZl9zcHRlYCBhbmQgYHRkeF9zZXB0X21hcF9sZWFmX3NwdGVgLCBhbmQgYHRkeF9hbGxvY19jb250cm9sX3BhZ2VgIGdldHMgY2FsbGVkIGZyb20gYF9fdGR4X3RkX2luaXRgIGFuZCBgdGR4X3RkX3ZjcHVfaW5pdGAuIFRoaXMgY29uZmlybXMgdGhleSBhcmUgZGVmaW5pdGVseSByZWFjaGFibGUgaWYgVERYIGlzIGVuYWJsZWQuCgpOb3csIGxldCYjMzk7cyBsb29rIGF0IHRoZSBgRW5hYmxlQ29uZmlnc2AuIEkgc2VlIGBJTlRFTF9URFhfSE9TVGAsIGBLVk1fSU5URUxfVERYYCwgYW5kIGBLVk1fSU5URUxgLiBJJiMzOTtsbCB2ZXJpZnkgdGhlIGRlcGVuZGVuY2llcyBmb3IgYEtWTV9JTlRFTF9URFhgLiBJdCBkZXBlbmRzIG9uIGBJTlRFTF9URFhfSE9TVGAsIHdoaWNoIGluIHR1cm4gZGVwZW5kcyBvbiBgQ1BVX1NVUF9JTlRFTGAsIGBYODZfNjRgLCBgS1ZNX0lOVEVMYCwgYFg4Nl9YMkFQSUNgLCBgQ09OVElHX0FMTE9DYCwgYW5kIGBYODZfTUNFYC4gVGhpcyBtZWFucyB0aGUgYEVuYWJsZUNvbmZpZ3NgIG5lZWQgdG8gaW5jbHVkZSBib3RoIGBJTlRFTF9URFhfSE9TVGAgYW5kIGBLVk1fSU5URUxfVERYYCB0byBmdW5jdGlvbi4KClRoZSBxdWVzdGlvbiB0aGVuIGlzLCBpcyB0aGVyZSBhbnkgcmVhc29uIHRvIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYD8gVGhlIGNvbmNlcm4gaXMgJiMzNDtDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUuJiMzNDsgQ2FuIFREWCBiZSByZWFjaGVkIGluIFFFTVU/IFdlbGwsIGlmIFFFTVUgaXMgcnVuIHdpdGggS1ZNIG9uIGEgVERYLWNhcGFibGUgaG9zdCwgdGhlbiB5ZXMuIElmIGl0JiMzOTtzIHJ1bm5pbmcgd2l0aCBUQ0csIHRoZW4gbm8uIFN5emthbGxlciBydW5zIFFFTVUgd2l0aCBLVk0sIHNvIGlmIHRoZSBob3N0IGhhcyBURFgsIGl0JiMzOTtzIHJlYWNoYWJsZS4gVGhlIGNydWNpYWwgcG9pbnQgaXMgdGhhdCBURFgsIGxpa2UgU0VWIG9yIFNHWCwgaXMgZ2VuZXJhbGx5IGNvbnNpZGVyZWQgcmVhY2hhYmxlIGJlY2F1c2UgU3l6a2FsbGVyIGNhbiBiZSBkZXBsb3llZCBvbiBoYXJkd2FyZSB0aGF0IHN1cHBvcnRzIHRoZXNlIENQVSBmZWF0dXJlcy4gVmVuZG9yLXNwZWNpZmljIFBDSWUgY2FyZHMgYXJlIGV4cGxpY2l0bHkgY29uc2lkZXJlZCB1bnJlYWNoYWJsZSwgYnV0IFREWCBpcyBhIENQVSBmZWF0dXJlIHRoYXQgaXMgYXZhaWxhYmxlIGluIHN0YW5kYXJkIGNsb3VkIFZNcyAobGlrZSBHQ1AgQzMgaW5zdGFuY2VzKSwgc28gdGhpcyBpcyBhIGNydWNpYWwgZGlzdGluY3Rpb24uIFRoZXJlZm9yZSwgVERYIGlzIGFic29sdXRlbHkgcmVhY2hhYmxlLgoKTGV0JiMzOTtzIGRvdWJsZS1jaGVjayBgRm9jdXNTeW1ib2xzYC4gSSBzZWUgdGhlIHNhbWUgZnVuY3Rpb25zIGFzIGJlZm9yZTogYHRkeF9wYW10X2dldGAsIGB0ZHhfcGFtdF9wdXRgLCBgdGR4X3RvcHVwX3BhbXRfY2FjaGVgLCBgdGR4X2FsbG9jX2NvbnRyb2xfcGFnZWAsIGB0ZHhfZnJlZV9jb250cm9sX3BhZ2VgLCBwbHVzIGB0ZHhfc3VwcG9ydHNfZHluYW1pY19wYW10YCBhbmQgYHRkeF90b3B1cF9leHRlcm5hbF9wYW10X2NhY2hlYCAod2hpY2ggaXMgc3RhdGljIGluIGBhcmNoL3g4Ni9rdm0vdm14L3RkeC5jYCkuIE5lZWQgdG8gcmV2aWV3IGB0ZHhfdG9wdXBfZXh0ZXJuYWxfcGFtdF9jYWNoZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDEwOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RkeF90b3B1cF9leHRlcm5hbF9wYW10X2NhY2hlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS92bXgvdGR4LmM9MTYxNz12b2lkIHRkeF9sb2FkX21tdV9wZ2Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBocGFfdCByb290X2hwYSwgaW50IHBnZF9sZXZlbClcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTE2MjctXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jOjE2Mjg6c3RhdGljIGludCB0ZHhfdG9wdXBfZXh0ZXJuYWxfcGFtdF9jYWNoZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBtaW5fbnJfc3B0cylcbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMTYyOS17XG4tLVxuYXJjaC94ODYva3ZtL3ZteC90ZHguYz0zNDczPWludCBfX2luaXQgdGR4X2hhcmR3YXJlX3NldHVwKHZvaWQpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0zNTM0LVx0aWYgKHRkeF9zdXBwb3J0c19keW5hbWljX3BhbXQodGR4X3N5c2luZm8pKVxuYXJjaC94ODYva3ZtL3ZteC90ZHguYzozNTM1Olx0XHR2dF94ODZfb3BzLnRvcHVwX2V4dGVybmFsX2NhY2hlID0gdGR4X3RvcHVwX2V4dGVybmFsX3BhbXRfY2FjaGU7XG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTM1MzYtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDEwOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2NjM4CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRXhwb3NlZCBGdW5jdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQsIHJpZ2h0IG9mZiB0aGUgYmF0LCBJIHNlZSBzb21ldGhpbmcgc3RhdGljLiBHaXZlbiBteSB1c3VhbCBwcmVmZXJlbmNlcyBmb3IgY2xhcml0eSBhbmQgdGVzdGFiaWxpdHksIEkgaW1tZWRpYXRlbHkgdGhpbmsgdGhhdCB3ZSBzaG91bGQgZXhjbHVkZSBpdCBmcm9tIHRoZSBgRm9jdXNTeW1ib2xzYCBsaXN0LiBOb24tc3RhdGljIGlzIHVzdWFsbHkgYmV0dGVyLgoKTm93LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGVzZSBleHBvcnRlZCBmdW5jdGlvbnMuIFdlIGhhdmUgYHRkeF9wYW10X2dldGAsIGB0ZHhfcGFtdF9wdXRgLCBgdGR4X3RvcHVwX3BhbXRfY2FjaGVgLCBgdGR4X2FsbG9jX2NvbnRyb2xfcGFnZWAsIGFuZCBgdGR4X2ZyZWVfY29udHJvbF9wYWdlYC4gVGhhdCYjMzk7cyBhIHNvbGlkIHNldCwgYSBnb29kIHN0YXJ0LiBJJiMzOTttIG5vdGluZyB0aGUgY2xlYXIgZ2V0L3B1dCBwYXR0ZXJuIGhlcmUsIGFuZCB0aGUgY29udHJvbCBwYWdlIGFsbG9jYXRpb24vZGVhbGxvY2F0aW9uIHBhaXIuIFRoZSBjYWNoZSB0b3AtdXAgZnVuY3Rpb24gaXMgaW50ZXJlc3Rpbmc7IGl0IHN1Z2dlc3RzIGEgcGVyZm9ybWFuY2UtZm9jdXNlZCBkZXNpZ24uCgpCdXQgaG9sZCBvbiwgYXJlIHRob3NlICphbGwqIHRoZSBleHBvcnRlZCBmdW5jdGlvbnM/IEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmcgY3J1Y2lhbC4gQWgsIHllcywgdGhlcmUgYXJlIHR3byBtb3JlOiBgdGR4X3N1cHBvcnRzX2R5bmFtaWNfcGFtdGAgYW5kIGB0ZHhfZnJlZV9wYW10X2NhY2hlYC4gKkR5bmFtaWMgcGFtdCBzdXBwb3J0KiBpcyBhbiBpbnRlcmVzdGluZyBhZGRpdGlvbiwgYW5kIGEgY2FjaGUgZGVhbGxvY2F0aW9uIGZ1bmN0aW9uIG1lYW5zIGEgY29tcGxldGUgbWVtb3J5IGxpZmVjeWNsZSBpcyBhY2NvdW50ZWQgZm9yLiBPa2F5LCB3aXRoIGFsbCBvZiB0aGlzIGluZm9ybWF0aW9uLCBJIGNhbiBtb3ZlIG9uIHRvIHRoZSBuZXh0IHN0ZXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDEwOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0xfRk9SX0tWTVxcKHRkeF9mcmVlX3BhbXRfY2FjaGVcXCkmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jPTIyNjE9dm9pZCB0ZHhfZnJlZV9wYW10X2NhY2hlKHN0cnVjdCB0ZHhfcGFtdF9jYWNoZSAqY2FjaGUpXG4tLVxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jLTIyNjctfVxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jOjIyNjg6RVhQT1JUX1NZTUJPTF9GT1JfS1ZNKHRkeF9mcmVlX3BhbXRfY2FjaGUpO1xuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jLTIyNjktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDEwOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3MjIyCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMzc3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBURFggRHluYW1pYyBQQU1UIENvZGUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGB0ZHhfZnJlZV9wYW10X2NhY2hlYCwgc3BlY2lmaWNhbGx5LiBJJiMzOTt2ZSBnb3QgYSBsaXN0IG9mIGZvY3VzIHN5bWJvbHMgaW4gbWluZDogYHRkeF9wYW10X2dldGAsIGB0ZHhfcGFtdF9wdXRgLCBgdGR4X3RvcHVwX3BhbXRfY2FjaGVgLCBgdGR4X2ZyZWVfcGFtdF9jYWNoZWAsIGB0ZHhfYWxsb2NfY29udHJvbF9wYWdlYCwgYW5kIGB0ZHhfZnJlZV9jb250cm9sX3BhZ2VgLiBNeSBpbml0aWFsIHF1ZXN0aW9uIGlzIHdoZXRoZXIgc2V0dGluZyBgdGR4X2RwYW10PW9uYCBpcyBhIHByZXJlcXVpc2l0ZSBmb3IgdGhpcyBjb2RlIHBhdGguCgpSaWdodCwgYHRkeF9zdXBwb3J0c19keW5hbWljX3BhbXRgIGNoZWNrcyBgdGR4X2VuYWJsZV9kcGFtdGAsIHdoaWNoICppcyogc2V0IGJ5IHRoZSBgdGR4X2RwYW10PW9uYCBrZXJuZWwgcGFyYW1ldGVyLiBJZiB0aGUgcGFyYW1ldGVyIGlzIGFic2VudCwgYHRkeF9zdXBwb3J0c19keW5hbWljX3BhbXRgIHJldHVybnMgZmFsc2UsIGFuZCBhIGxhcmdlIHBvcnRpb24gb2YgdGhpcyBkeW5hbWljIFBBTVQgbG9naWMgaXMgYnlwYXNzZWQuIEJ1dCB3YWl0LCBgdGR4X2FsbG9jX2NvbnRyb2xfcGFnZWAgKmNhbGxzKiBgdGR4X3BhbXRfZ2V0YC4gTm93IEkmIzM5O20gdW5kZXJzdGFuZGluZzsgZXZlbiBpZiBgdGR4X3N1cHBvcnRzX2R5bmFtaWNfcGFtdGAgaXMgZmFsc2UsIGB0ZHhfcGFtdF9nZXRgIHdpbGwgc3RpbGwgYmUgY2FsbGVkLCBidXQgaXQgd2lsbCBpbW1lZGlhdGVseSByZXR1cm4gMC4gU28sIHRoaXMgY29kZSAqaXMqIHJlYWNoYWJsZSwgZXZlbiB3aXRob3V0IGB0ZHhfZHBhbXQ9b25gLCBidXQgdGhlIGR5bmFtaWMgUEFNVCBmZWF0dXJlcyB3aWxsIG9ubHkgYmUgYWN0aXZlIGlmIHRoZSBwYXJhbWV0ZXIgaXMgYWN0dWFsbHkgc2V0LgoKTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uIGlzOiBpcyB0aGlzIGEgcG90ZW50aWFsIGlzc3VlIGZvciBmdXp6aW5nPyBUaGlua2luZyBpdCB0aHJvdWdoLCBTeXprYWxsZXIgKmNhbiogYmUgY29uZmlndXJlZCB0byBwYXNzIGtlcm5lbCBwYXJhbWV0ZXJzLCBzbyBpdCYjMzk7cyBwZXJmZWN0bHkgY2FwYWJsZSBvZiBzZXR0aW5nIGB0ZHhfZHBhbXQ9b25gLiBHaXZlbiB0aGF0LCBhbmQgdGhlIGZhY3QgdGhhdCB0aGlzIGlzIGNvcmUga2VybmVsIGZ1bmN0aW9uYWxpdHksIEkmIzM5O20gY29uZmlkZW50IHdlIHNob3VsZCBtYXJrIHRoaXMgYXMgYFdvcnRoRnV6emluZz10cnVlYC4KCkp1c3QgdG8gY292ZXIgYWxsIHRoZSBiYXNlcywgbGV0JiMzOTtzIHF1aWNrbHkgcmV2aWV3IHRoZSBFbmFibGVDb25maWdzIHRoYXQgY29tZSBpbnRvIHBsYXkgaGVyZS4gSSYjMzk7bSBzZWVpbmcgYElOVEVMX1REWF9IT1NUYCBhbmQgYEtWTV9JTlRFTF9URFhgLiBXYWl0Li4uIEkgbmVlZCB0byBkb3VibGUtY2hlY2s6IERvZXMgYEtWTV9JTlRFTF9URFhgIGhhdmUgZGVwZW5kZW5jaWVzIEkgbmVlZCB0byB0YWtlIGludG8gY29uc2lkZXJhdGlvbj8gUmlnaHQsIGJhY2sgdG8gYGFyY2gveDg2L2t2bS9LY29uZmlnYCB0byByZWZyZXNoIG15IG1lbW9yeS4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxMDo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgS1ZNX0lOVEVMX1REWCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnPTEyMj1jb25maWcgWDg2X1NHWF9LVk1cbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzMtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMzQ6Y29uZmlnIEtWTV9JTlRFTF9URFhcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzNS1cdGJvb2wgXCYjMzQ7SW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxMDo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODI0NQoJCQkJCQkJb3V0cHV0OiAyMjAKCQkJCQkJCXRob3VnaHRzOiA3NTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIFREWCBLVk0gUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIHN1cHBvcnQgZm9yIHRoZSBEeW5hbWljIFBoeXNpY2FsIEFkZHJlc3MgTWV0YWRhdGEgVGFibGUgKFBBTVQpIGZvciBJbnRlbCBURFggd2l0aGluIHRoZSBLVk0veDg2IGVudmlyb25tZW50LiAgSSBuZWVkIHRvIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnM6IGl0JiMzOTtzIGNsZWFyIHRoYXQgYEtWTV9JTlRFTF9URFhgIGRlcGVuZHMgb24gYElOVEVMX1REWF9IT1NUYCwgc28gdGhvc2UgYXJlIHRoZSBrZXkgY29uZmlndXJhdGlvbnMgSSYjMzk7bGwgbmVlZCB0byBlbmFibGUgZm9yIHRlc3RpbmcuCgpOb3csIGxldCYjMzk7cyBuYWlsIGRvd24gdGhlIGZ1bmN0aW9ucyB0aGF0IGFyZSBtb2RpZmllZCBvciBhZGRlZCBieSB0aGlzIHBhdGNoLCBzbyBJIGNhbiBmb2N1cyBteSBmdXp6aW5nIGVmZm9ydHMuICBJJiMzOTt2ZSBpZGVudGlmaWVkIHRoZXNlIGFzIHRoZSBtb3N0IGxpa2VseSBhcmVhcyBvZiBjb25jZXJuLCBiYXNlZCBvbiB0aGUgdGV4dDogYHRkeF9wYW10X2dldGAsIGB0ZHhfcGFtdF9wdXRgLCBgdGR4X3RvcHVwX3BhbXRfY2FjaGVgLCBgdGR4X2ZyZWVfcGFtdF9jYWNoZWAsIGB0ZHhfYWxsb2NfY29udHJvbF9wYWdlYCwgYW5kIGB0ZHhfZnJlZV9jb250cm9sX3BhZ2VgLiBUaGV5IGFyZSBleHBvcnRlZCBmb3IgS1ZNLgoKSSYjMzk7dmUgYWxzbyBzY2FubmVkIGBhcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmNgIGZvciBhbnkgb3RoZXIgZnVuY3Rpb25zIHRoYXQgd2VyZSBtb2RpZmllZCBvciBpbnRyb2R1Y2VkLCBidXQgdGhleSBhcHBlYXIgdG8gYmUgc3RhdGljIGhlbHBlcnMuIFRoZXNlIGFyZSB0aGUgb25lcyBJIGZvdW5kOiBgaW5pdF9wYW10X3JlZmNvdW50c2AsIGBmcmVlX3BhbXRfcmVmY291bnRzYCwgYHRkeF9maW5kX3BhbXRfcmVmY291bnRgLCBgdGRtcl9nZXRfcGFtdF9iaXRtYXBfc3pgLCBgdGRtcl9nZXRfcGFtdF9zemAsIGB0ZG1yX3NldF91cF9wYW10YCwgYHRkbXJzX3NldF91cF9wYW10X2FsbGAsIGBjb25maWdfdGR4X21vZHVsZWAsIGBpbml0X3RkeF9tb2R1bGVgLCBgdGR4X2FsbG9jX3BhZ2VfcGFtdF9jYWNoZWAsIGBhbGxvY19kcGFtdF9wYWdlYCwgYGFsbG9jX3BhbXRfYXJyYXlgLCBgZnJlZV9wYW10X2FycmF5YCwgYHBhbXRfMm1iX2FyZ2AsIGB0ZGhfcGh5bWVtX3BhbXRfYWRkYCwgYHRkaF9waHltZW1fcGFtdF9yZW1vdmVgLgoKTXkgbWFpbiBjb25jZXJuIHdpdGggdGhlIGV4cG9ydGVkIGZ1bmN0aW9ucyBpcyB0aGF0IHRoZXkgYXJlIGxpa2VseSB0byBiZSB1c2VkIGJ5IEtWTSBjb2RlLCBhbmQgYXJlIHRodXMgbW9yZSBsaWtlbHkgdG8gYmUgc3ViamVjdCB0byBhIHJhbmdlIG9mIGlucHV0cy4gU2luY2UgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGR5bmFtaWMgYWxsb2NhdGlvbiBhbmQgZnJlZWluZyBvZiBQQU1UIG1lbW9yeSwgSSBoYXZlIHRvIGVuc3VyZSB0aGF0IG1lbW9yeSBtYW5hZ2VtZW50IGlzIGNvcnJlY3QgaW4gdGhpcyBURFggaW1wbGVtZW50YXRpb24gYW5kIHRoYXQgbWVtb3J5IGxlYWtzIGFuZCBjcmFzaGVzIGFyZSBwcmV2ZW50ZWQgaW4gVERYIGhvc3Qgc3VwcG9ydC4KClRoZSBwYXRjaCBhdXRob3IgZXhwbGljaXRseSBub3RlZCB0byBleGNsdWRlIGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiAgSG93ZXZlciwgdGhpcyBURFggZmVhdHVyZSwgdW5saWtlIHZlbmRvci1zcGVjaWZpYyBoYXJkd2FyZSBkcml2ZXJzLCBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHb29nbGUgQ2xvdWQgRW5naW5lIChHQ0UpIGlmIHRoZSBoYXJkd2FyZSBzdXBwb3J0cyBURFguIFRoZXJlZm9yZSwgaXQmIzM5O3MgYWJzb2x1dGVseSB3b3J0aCBmdXp6aW5nLiBJIGNhbiByZXByb2R1Y2UgYSBURFgtY2FwYWJsZSBpbnN0YW5jZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LgoKSGVyZeKAmXMgbXkgcmVhc29uaW5nIHN1Y2NpbmN0bHk6IFRoaXMgcGF0Y2ggYnJpbmdzIER5bmFtaWMgUEFNVCBzdXBwb3J0IHRvIFREWCBpbiBLVk0veDg2LCBlbmFibGluZyBkeW5hbWljIGFsbG9jYXRpb24gYW5kIGZyZWVpbmcgb2YgUEFNVCBtZW1vcnkgcGFnZXMgZm9yIGd1ZXN0cywgdG91Y2hpbmcgS1ZNIE1NVSBhbmQgVERYIGluaXRpYWxpemF0aW9uLiBJdCAqaXMqIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgd2l0aCBURFggaGFyZHdhcmUsIHNwZWNpZmljYWxseSBpbiBURFgtY2FwYWJsZSBpbnN0YW5jZXMsIG5lY2Vzc2l0YXRpbmcgZnV6emluZyB0byBndWFyYW50ZWUgY29ycmVjdCBtZW1vcnkgbWFuYWdlbWVudCBhbmQgYXZvaWQgbGVha3Mgb3IgY3Jhc2hlcyBpbiBURFggaG9zdCBzdXBwb3J0LgoKU28sIGhlcmUmIzM5O3MgbXkgcGxhbjoKCiogICBFbmFibGUgQ29uZmlndXJhdGlvbnM6IGBJTlRFTF9URFhfSE9TVGAsIGBLVk1fSU5URUxfVERYYAoqICAgRm9jdXMgU3ltYm9scyBmb3IgZnV6emluZzogYHRkeF9wYW10X2dldGAsIGB0ZHhfcGFtdF9wdXRgLCBgdGR4X3RvcHVwX3BhbXRfY2FjaGVgLCBgdGR4X2ZyZWVfcGFtdF9jYWNoZWAsIGB0ZHhfYWxsb2NfY29udHJvbF9wYWdlYCwgYHRkeF9mcmVlX2NvbnRyb2xfcGFnZWAKCkkmIzM5O2xsIHNraXAgYHRkeF9zdXBwb3J0c19keW5hbWljX3BhbXRgIGFzIGl0IGxvb2tzIGxpa2UgYSBzaW1wbGUgZ2V0dGVyLgoKTm93LCBJJiMzOTttIHJlYWR5IHRvIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDEwOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJTlRFTF9URFhfSE9TVCYjMzQ7LAogICAgJiMzNDtLVk1fSU5URUxfVERYJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGR4X3BhbXRfZ2V0JiMzNDssCiAgICAmIzM0O3RkeF9wYW10X3B1dCYjMzQ7LAogICAgJiMzNDt0ZHhfdG9wdXBfcGFtdF9jYWNoZSYjMzQ7LAogICAgJiMzNDt0ZHhfZnJlZV9wYW10X2NhY2hlJiMzNDssCiAgICAmIzM0O3RkeF9hbGxvY19jb250cm9sX3BhZ2UmIzM0OywKICAgICYjMzQ7dGR4X2ZyZWVfY29udHJvbF9wYWdlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgRHluYW1pYyBQaHlzaWNhbCBBZGRyZXNzIE1ldGFkYXRhIFRhYmxlIChQQU1UKSBzdXBwb3J0IGZvciBJbnRlbCBURFggaW4gS1ZNL3g4Ni4gSXQgYWRkcyBmdW5jdGlvbmFsIGNvcmUga2VybmVsIGxvZ2ljIHRvIGR5bmFtaWNhbGx5IGFsbG9jYXRlIGFuZCBmcmVlIFBBTVQgbWVtb3J5IHBhZ2VzIGZvciBURFggZ3Vlc3RzLCBtb2RpZnlpbmcgS1ZNIE1NVSBhbmQgVERYIGluaXRpYWxpemF0aW9uIHBhdGhzLiBUaGlzIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgcnVubmluZyBvbiBURFgtY2FwYWJsZSBoYXJkd2FyZSAoZS5nLiwgR0NQIEMzIGluc3RhbmNlcykgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG1lbW9yeSBtYW5hZ2VtZW50IGNvcnJlY3RuZXNzIGFuZCBwcmV2ZW50IGxlYWtzIG9yIGNyYXNoZXMgaW4gdGhlIFREWCBob3N0IHN1cHBvcnQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lOVEVMX1REWF9IT1NUJiMzNDssCiAgICAmIzM0O0tWTV9JTlRFTF9URFgmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0ZHhfcGFtdF9nZXQmIzM0OywKICAgICYjMzQ7dGR4X3BhbXRfcHV0JiMzNDssCiAgICAmIzM0O3RkeF90b3B1cF9wYW10X2NhY2hlJiMzNDssCiAgICAmIzM0O3RkeF9mcmVlX3BhbXRfY2FjaGUmIzM0OywKICAgICYjMzQ7dGR4X2FsbG9jX2NvbnRyb2xfcGFnZSYjMzQ7LAogICAgJiMzNDt0ZHhfZnJlZV9jb250cm9sX3BhZ2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBEeW5hbWljIFBoeXNpY2FsIEFkZHJlc3MgTWV0YWRhdGEgVGFibGUgKFBBTVQpIHN1cHBvcnQgZm9yIEludGVsIFREWCBpbiBLVk0veDg2LiBJdCBhZGRzIGZ1bmN0aW9uYWwgY29yZSBrZXJuZWwgbG9naWMgdG8gZHluYW1pY2FsbHkgYWxsb2NhdGUgYW5kIGZyZWUgUEFNVCBtZW1vcnkgcGFnZXMgZm9yIFREWCBndWVzdHMsIG1vZGlmeWluZyBLVk0gTU1VIGFuZCBURFggaW5pdGlhbGl6YXRpb24gcGF0aHMuIFRoaXMgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBydW5uaW5nIG9uIFREWC1jYXBhYmxlIGhhcmR3YXJlIChlLmcuLCBHQ1AgQzMgaW5zdGFuY2VzKSBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbWVtb3J5IG1hbmFnZW1lbnQgY29ycmVjdG5lc3MgYW5kIHByZXZlbnQgbGVha3Mgb3IgY3Jhc2hlcyBpbiB0aGUgVERYIGhvc3Qgc3VwcG9ydC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDEwOjU1OjIyLjE5MDY0ODQwNloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk1NTMzMDcyMDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklOVEVMX1REWF9IT1NUXCIsXG4gICAgXCJLVk1fSU5URUxfVERYXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGR4X3BhbXRfZ2V0XCIsXG4gICAgXCJ0ZHhfcGFtdF9wdXRcIixcbiAgICBcInRkeF90b3B1cF9wYW10X2NhY2hlXCIsXG4gICAgXCJ0ZHhfZnJlZV9wYW10X2NhY2hlXCIsXG4gICAgXCJ0ZHhfYWxsb2NfY29udHJvbF9wYWdlXCIsXG4gICAgXCJ0ZHhfZnJlZV9jb250cm9sX3BhZ2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIER5bmFtaWMgUGh5c2ljYWwgQWRkcmVzcyBNZXRhZGF0YSBUYWJsZSAoUEFNVCkgc3VwcG9ydCBmb3IgSW50ZWwgVERYIGluIEtWTS94ODYuIEl0IGFkZHMgZnVuY3Rpb25hbCBjb3JlIGtlcm5lbCBsb2dpYyB0byBkeW5hbWljYWxseSBhbGxvY2F0ZSBhbmQgZnJlZSBQQU1UIG1lbW9yeSBwYWdlcyBmb3IgVERYIGd1ZXN0cywgbW9kaWZ5aW5nIEtWTSBNTVUgYW5kIFREWCBpbml0aWFsaXphdGlvbiBwYXRocy4gVGhpcyBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHJ1bm5pbmcgb24gVERYLWNhcGFibGUgaGFyZHdhcmUgKGUuZy4sIEdDUCBDMyBpbnN0YW5jZXMpIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBtZW1vcnkgbWFuYWdlbWVudCBjb3JyZWN0bmVzcyBhbmQgcHJldmVudCBsZWFrcyBvciBjcmFzaGVzIGluIHRoZSBURFggaG9zdCBzdXBwb3J0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxMDo1NToyMi4xOTA2NTU2NTZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg1MDA4NzIyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGNlZDI0MTAyYjEyNGM4OWE1NjYyN2U3YzlmMWEzYmE4YTdjZmYzOWFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFN1biBKdWwgMjYgMTA6NTU6MjAgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dFxcbmluZGV4IGI1NDkzYTdmOGYyMjgxLi5hMGE3NjcwMjQ2YmM1OCAxMDA2NDRcXG4tLS0gYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dFxcbisrKyBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0XFxuQEAgLTc1MTIsNiArNzUxMiwxNiBAQCBLZXJuZWwgcGFyYW1ldGVyc1xcbiBcXG4gXFx0dGRmeD1cXHRcXHRbSFcsRFJNXVxcbiBcXG4rXFx0dGR4X2RwYW10PVxcbitcXHRcXHRcXHRbWDg2XSBDb250cm9scyB3aGV0aGVyIFREWCB3aWxsIHVzZSBEeW5hbWljIFBBTVRcXG4rXFx0XFx0XFx0dG8gc2F2ZSBtZW1vcnksIHdoZW4gc3VwcG9ydGVkLlxcbitcXG4rXFx0XFx0XFx0VmFsaWQgcGFyYW1ldGVyczogXFxcIm9uXFxcIiwgXFxcIm9mZlxcXCJcXG4rXFx0XFx0XFx0RGVmYXVsdDogXFxcIm9mZlxcXCJcXG4rXFxuK1xcdFxcdFxcdEZvciBkZXRhaWxzIHNlZTpcXG4rXFx0XFx0XFx0RG9jdW1lbnRhdGlvbi9hcmNoL3g4Ni90ZHgucnN0XFxuK1xcbiBcXHR0ZXN0X3N1c3BlbmQ9XFx0W1NVU1BFTkRdXFxuIFxcdFxcdFxcdEZvcm1hdDogeyBcXFwibWVtXFxcIiB8IFxcXCJzdGFuZGJ5XFxcIiB8IFxcXCJmcmVlemVcXFwiIH1bLE5dXFxuIFxcdFxcdFxcdFNwZWNpZnkgXFxcIm1lbVxcXCIgKGZvciBTdXNwZW5kLXRvLVJBTSkgb3IgXFxcInN0YW5kYnlcXFwiIChmb3JcXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hcmNoL3g4Ni90ZHgucnN0IGIvRG9jdW1lbnRhdGlvbi9hcmNoL3g4Ni90ZHgucnN0XFxuaW5kZXggMzMwMzQ5OWFkNGM2ZjguLmExYzIzMDkyMzA1ODA3IDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vYXJjaC94ODYvdGR4LnJzdFxcbisrKyBiL0RvY3VtZW50YXRpb24vYXJjaC94ODYvdGR4LnJzdFxcbkBAIC0yMDAsNiArMjAwLDM0IEBAIHJlZmxlY3RzIHRoZSBUQ0Igb2YgdGhlIGN1cnJlbnRseSBydW5uaW5nIFREWCBtb2R1bGUgYW5kIHRoZXJlZm9yZVxcbiBjaGFuZ2VzIGFmdGVyIGFuIHVwZGF0ZS4gQnkgY29udHJhc3QsIFRFRV9UQ0JfU1ZOIHJlZmxlY3RzIHRoZSBUQ0IgYXQgVERcXG4gbGF1bmNoIHRpbWUgYW5kIGlzIG5vdCBhZmZlY3RlZC5cXG4gXFxuK0R5bmFtaWMgUEFNVFxcbistLS0tLS0tLS0tLS1cXG4rXFxuK1BoeXNpY2FsIEFkZHJlc3MgTWV0YWRhdGEgVGFibGUgKFBBTVQpIGlzIG1lbW9yeSB0aGF0IHRoZSBURFggbW9kdWxlIG5lZWRzXFxuK3RvIGtlZXAgZGF0YSBhYm91dCBlYWNoIHBhZ2UgKHRoaW5rIGxpa2Ugc3RydWN0IHBhZ2UpLiBJdCBuZWVkcyB0byBiZSBoYW5kZWRcXG4rdG8gdGhlIFREWCBtb2R1bGUgZm9yIGl0cyBleGNsdXNpdmUgdXNlLiBGb3Igbm9ybWFsIFBBTVQsIHRoaXMgaXMgaW5zdGFsbGVkXFxuK3doZW4gdGhlIFREWCBtb2R1bGUgaXMgZmlyc3QgbG9hZGVkIGFuZCBjb21lcyB0byBhYm91dCAwLjQlIG9mIHN5c3RlbSBtZW1vcnkuXFxuK1xcbitEeW5hbWljIFBBTVQgaXMgYSBURFggbW9kdWxlIGZlYXR1cmUgdGhhdCBhbGxvd3MgVk1NIHRvIGFsbG9jYXRlIHBhcnQgb2YgdGhlXFxuK1BBTVQgYXMgbmVlZGVkICh0aGUgcGFydHMgZm9yIHRyYWNraW5nIDRLQiBzaXplIHBhZ2VzKS4gVGhlIG90aGVyIHBhZ2Ugc2l6ZXNcXG4rKDFHQiBhbmQgMk1CKSBhcmUgc3RpbGwgYWxsb2NhdGVkIHN0YXRpY2FsbHkgYXQgdGhlIHRpbWUgb2YgVERYIG1vZHVsZVxcbitpbml0aWFsaXphdGlvbi4gVGhpcyByZWR1Y2VzIHRoZSBhbW91bnQgb2YgbWVtb3J5IHRoYXQgVERYIHVzZXMgd2hpbGUgVERzIGFyZVxcbitub3QgaW4gdXNlLlxcbitcXG4rV2hlbiBEeW5hbWljIFBBTVQgaXMgaW4gdXNlLCBkbWVzZyBzaG93cyBpdCBsaWtlOjpcXG4rXFxuKyAgWy4uXSB2aXJ0L3RkeDogRW5hYmxlIER5bmFtaWMgUEFNVFxcbisgIFsuLl0gdmlydC90ZHg6IDEwMDkyIEtCIGFsbG9jYXRlZCBmb3IgUEFNVFxcbisgIFsuLl0gdmlydC90ZHg6IFREWC1Nb2R1bGUgaW5pdGlhbGl6ZWRcXG4rXFxuK0R5bmFtaWMgUEFNVCBpcyBvbmx5IGVuYWJsZWQgd2hlbiBzdXBwb3J0ZWQgYW5kIHRoZSBgYHRkeF9kcGFtdD1gYCBrZXJuZWxcXG4rcGFyYW1ldGVyIGlzIHNldCB0byBcXFwib25cXFwiLiBUaGUgZmVhdHVyZSBpcyBvZmYgYnkgZGVmYXVsdCBiZWNhdXNlIFREWCBtb2R1bGVcXG4raW50ZXJuYWwgZGV0YWlscyBwcmV2ZW50IER5bmFtaWMgUEFNVCBmcm9tIHdvcmtpbmcgb24gYWxsIGtleWlkIHBhcnRpdGlvbmluZ1xcbitjb25maWd1cmF0aW9ucy4gV2hlbiB0aGUgVERYIG1vZHVsZSBpcyBmaXhlZCB0byBpbmNsdWRlIHRoZXNlIGNvbnN0cmFpbnRzIGluXFxuK2l0cyBlbnVtZXJhdGlvbiBvZiBEeW5hbWljIFBBTVQgc3VwcG9ydCwga2VybmVsIHN1cHBvcnQgY2FuIGJlIGNoYW5nZWQgdG9cXG4rZGVmYXVsdCBvbi4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIGNvbnN1bHQgdGhlIEludGVsIFREWCBkb2N1bWVudGF0aW9uIGFib3V0XFxuK0R5bmFtaWMgUEFNVC5cXG4rXFxuIFREWCBJbnRlcmFjdGlvbiB0byBPdGhlciBLZXJuZWwgQ29tcG9uZW50c1xcbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cXG4gXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oXFxuaW5kZXggODNkYzUwODYxMzhiMzkuLjU4ODU2M2RmZTg4ZDU3IDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmhcXG4rKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oXFxuQEAgLTk4LDYgKzk4LDcgQEAgS1ZNX1g4Nl9PUF9PUFRJT05BTF9SRVQwKHRkcF9oYXNfc21lcClcXG4gS1ZNX1g4Nl9PUChsb2FkX21tdV9wZ2QpXFxuIEtWTV9YODZfT1BfT1BUSU9OQUxfUkVUMChzZXRfZXh0ZXJuYWxfc3B0ZSlcXG4gS1ZNX1g4Nl9PUF9PUFRJT05BTChmcmVlX2V4dGVybmFsX3NwdClcXG4rS1ZNX1g4Nl9PUF9PUFRJT05BTF9SRVQwKHRvcHVwX2V4dGVybmFsX2NhY2hlKVxcbiBLVk1fWDg2X09QKGhhc193YmludmRfZXhpdClcXG4gS1ZNX1g4Nl9PUChnZXRfbDJfdHNjX29mZnNldClcXG4gS1ZNX1g4Nl9PUChnZXRfbDJfdHNjX211bHRpcGxpZXIpXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXFxuaW5kZXggNWY2YzFjZTk2NzNiN2YuLjBkYmY2NTY0ZGQwYzUxIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcXG4rKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXFxuQEAgLTE5MjIsNiArMTkyMiw3IEBAIHN0cnVjdCBrdm1feDg2X29wcyB7XFxuIFxcdC8qIFVwZGF0ZSBleHRlcm5hbCBwYWdlIHRhYmxlcyBmb3IgcGFnZSB0YWJsZSBhYm91dCB0byBiZSBmcmVlZC4gKi9cXG4gXFx0dm9pZCAoKmZyZWVfZXh0ZXJuYWxfc3B0KShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwKTtcXG4gXFxuK1xcdGludCAoKnRvcHVwX2V4dGVybmFsX2NhY2hlKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBtaW5fbnJfc3B0cyk7XFxuIFxcbiBcXHRib29sICgqaGFzX3diaW52ZF9leGl0KSh2b2lkKTtcXG4gXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RkeC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4LmhcXG5pbmRleCA4OWU5N2Q1NzYxZDg5ZS4uNzkxMDkwMWE3YmEyMWIgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4LmhcXG4rKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZHguaFxcbkBAIC0zNiw2ICszNiw3IEBAXFxuIC8qIEJpdCBkZWZpbml0aW9ucyBvZiBURFhfRkVBVFVSRVMwIG1ldGFkYXRhIGZpZWxkICovXFxuICNkZWZpbmUgVERYX0ZFQVRVUkVTMF9URF9QUkVTRVJWSU5HXFx0QklUX1VMTCgxKVxcbiAjZGVmaW5lIFREWF9GRUFUVVJFUzBfTk9fUkJQX01PRFxcdEJJVF9VTEwoMTgpXFxuKyNkZWZpbmUgVERYX0ZFQVRVUkVTMF9EWU5BTUlDX1BBTVRcXHRCSVRfVUxMKDM2KVxcbiBcXG4gI2lmbmRlZiBfX0FTU0VNQkxFUl9fXFxuIFxcbkBAIC0xMTgsMTIgKzExOSwzNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgdGR4X3N1cHBvcnRzX3J1bnRpbWVfdXBkYXRlKGNvbnN0IHN0cnVjdCB0ZHhfc3lzX2luZm8gKnN5c2luZlxcbiBcXHRyZXR1cm4gc3lzaW5mby1cXHUwMDNlZmVhdHVyZXMudGR4X2ZlYXR1cmVzMCBcXHUwMDI2IFREWF9GRUFUVVJFUzBfVERfUFJFU0VSVklORztcXG4gfVxcbiBcXG4rYm9vbCB0ZHhfc3VwcG9ydHNfZHluYW1pY19wYW10KGNvbnN0IHN0cnVjdCB0ZHhfc3lzX2luZm8gKnN5c2luZm8pO1xcbitcXG4rLyogU2ltcGxlIHN0cnVjdHVyZSBmb3IgcHJlLWFsbG9jYXRpbmcgRHluYW1pYyBQQU1UIHBhZ2VzIG91dHNpZGUgb2Ygc3BpbmxvY2tzLiAqL1xcbitzdHJ1Y3QgdGR4X3BhbXRfY2FjaGUge1xcbitcXHRzdHJ1Y3QgbGlzdF9oZWFkIHBhZ2VfbGlzdDtcXG4rXFx0aW50IGNudDtcXG4rfTtcXG4rXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCB0ZHhfaW5pdF9wYW10X2NhY2hlKHN0cnVjdCB0ZHhfcGFtdF9jYWNoZSAqY2FjaGUpXFxuK3tcXG4rXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNmNhY2hlLVxcdTAwM2VwYWdlX2xpc3QpO1xcbitcXHRjYWNoZS1cXHUwMDNlY250ID0gMDtcXG4rfVxcbitcXG4rdm9pZCB0ZHhfZnJlZV9wYW10X2NhY2hlKHN0cnVjdCB0ZHhfcGFtdF9jYWNoZSAqY2FjaGUpO1xcbitpbnQgdGR4X3RvcHVwX3BhbXRfY2FjaGUoc3RydWN0IHRkeF9wYW10X2NhY2hlICpjYWNoZSwgdW5zaWduZWQgbG9uZyBucGFnZXMpO1xcbitpbnQgdGR4X3BhbXRfZ2V0KGt2bV9wZm5fdCBwZm4sIHN0cnVjdCB0ZHhfcGFtdF9jYWNoZSAqY2FjaGUpO1xcbit2b2lkIHRkeF9wYW10X3B1dChrdm1fcGZuX3QgcGZuKTtcXG4rXFxuIGludCB0ZHhfZ3Vlc3Rfa2V5aWRfYWxsb2Modm9pZCk7XFxuIHUzMiB0ZHhfZ2V0X25yX2d1ZXN0X2tleWlkcyh2b2lkKTtcXG4gdm9pZCB0ZHhfZ3Vlc3Rfa2V5aWRfZnJlZSh1bnNpZ25lZCBpbnQga2V5aWQpO1xcbiBcXG4gdm9pZCB0ZHhfcXVpcmtfcmVzZXRfcGFkZHIodW5zaWduZWQgbG9uZyBiYXNlLCB1bnNpZ25lZCBsb25nIHNpemUpO1xcbiBcXG4rLyogTnVtYmVyIG9mIFBBTVQgcGFnZXMgdG8gYmUgcHJvdmlkZWQgdG8gVERYIG1vZHVsZSBwZXIgMk1CIHJlZ2lvbiBvZiBQQSAqL1xcbisjZGVmaW5lIFREWF9EUEFNVF9FTlRSWV9QQUdFX0NOVCAyXFxuK1xcbitzdHJ1Y3QgcGFnZSAqdGR4X2FsbG9jX2NvbnRyb2xfcGFnZSh2b2lkKTtcXG4rdm9pZCB0ZHhfZnJlZV9jb250cm9sX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpO1xcbitcXG4gc3RydWN0IHRkeF90ZCB7XFxuIFxcdC8qIFREIHJvb3Qgc3RydWN0dXJlOiAqL1xcbiBcXHRzdHJ1Y3QgcGFnZSAqdGRyX3BhZ2U7XFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RkeF9nbG9iYWxfbWV0YWRhdGEuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RkeF9nbG9iYWxfbWV0YWRhdGEuaFxcbmluZGV4IDQxMTUwZDU0NjU4OWMxLi4yYTQyNTUxZmMzM2NkNiAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZHhfZ2xvYmFsX21ldGFkYXRhLmhcXG4rKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZHhfZ2xvYmFsX21ldGFkYXRhLmhcXG5AQCAtMjEsNiArMjEsOSBAQCBzdHJ1Y3QgdGR4X3N5c19pbmZvX3RkbXIge1xcbiBcXHR1MTYgcGFtdF80a19lbnRyeV9zaXplO1xcbiBcXHR1MTYgcGFtdF8ybV9lbnRyeV9zaXplO1xcbiBcXHR1MTYgcGFtdF8xZ19lbnRyeV9zaXplO1xcbitcXG4rXFx0LyogT3B0aW9uYWwgbWV0YWRhdGEsIGlmIER5bmFtaWMgUEFNVCBpcyBzdXBwb3J0ZWQgKi9cXG4rXFx0dTggIHBhbXRfcGFnZV9iaXRtYXBfZW50cnlfYml0cztcXG4gfTtcXG4gXFxuIHN0cnVjdCB0ZHhfc3lzX2luZm9fdGRfY3RybCB7XFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9tbXUvbW11LmMgYi9hcmNoL3g4Ni9rdm0vbW11L21tdS5jXFxuaW5kZXggMjM0ZDBhOTVhYmY1MzQuLjZkYWI5OTY1NGYxNzAyIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2t2bS9tbXUvbW11LmNcXG4rKysgYi9hcmNoL3g4Ni9rdm0vbW11L21tdS5jXFxuQEAgLTYxNCw2ICs2MTQsMTAgQEAgc3RhdGljIGludCBtbXVfdG9wdXBfbWVtb3J5X2NhY2hlcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgbWF5YmVfaW5kaXJlY3QpXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgICBQVDY0X1JPT1RfTUFYX0xFVkVMKTtcXG4gXFx0XFx0aWYgKHIpXFxuIFxcdFxcdFxcdHJldHVybiByO1xcbitcXG4rXFx0XFx0ciA9IGt2bV94ODZfY2FsbCh0b3B1cF9leHRlcm5hbF9jYWNoZSkodmNwdSwgUFQ2NF9ST09UX01BWF9MRVZFTCk7XFxuK1xcdFxcdGlmIChyKVxcbitcXHRcXHRcXHRyZXR1cm4gcjtcXG4gXFx0fVxcbiBcXHRyID0ga3ZtX21tdV90b3B1cF9tZW1vcnlfY2FjaGUoXFx1MDAyNnZjcHUtXFx1MDAzZWFyY2gubW11X3NoYWRvd19wYWdlX2NhY2hlLFxcbiBcXHRcXHRcXHRcXHQgICAgICAgUFQ2NF9ST09UX01BWF9MRVZFTCk7XFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvdGR4LmMgYi9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jXFxuaW5kZXggNTQ1YjAzZDlkMTBiODEuLjA5NTczMTEyNTQwZTk4IDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgvdGR4LmNcXG4rKysgYi9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jXFxuQEAgLTM2Miw3ICszNjIsNyBAQCBzdGF0aWMgdm9pZCB0ZHhfcmVjbGFpbV9jb250cm9sX3BhZ2Uoc3RydWN0IHBhZ2UgKmN0cmxfcGFnZSlcXG4gXFx0aWYgKHRkeF9yZWNsYWltX3BhZ2UoY3RybF9wYWdlKSlcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4tXFx0X19mcmVlX3BhZ2UoY3RybF9wYWdlKTtcXG4rXFx0dGR4X2ZyZWVfY29udHJvbF9wYWdlKGN0cmxfcGFnZSk7XFxuIH1cXG4gXFxuIHN0cnVjdCB0ZHhfZmx1c2hfdnBfYXJnIHtcXG5AQCAtNTg5LDcgKzU4OSw3IEBAIHN0YXRpYyB2b2lkIHRkeF9yZWNsYWltX3RkX2NvbnRyb2xfcGFnZXMoc3RydWN0IGt2bSAqa3ZtKVxcbiBcXG4gXFx0dGR4X3F1aXJrX3Jlc2V0X3BhZGRyKHBhZ2VfdG9fcGh5cyhrdm1fdGR4LVxcdTAwM2V0ZC50ZHJfcGFnZSksIFBBR0VfU0laRSk7XFxuIFxcbi1cXHRfX2ZyZWVfcGFnZShrdm1fdGR4LVxcdTAwM2V0ZC50ZHJfcGFnZSk7XFxuK1xcdHRkeF9mcmVlX2NvbnRyb2xfcGFnZShrdm1fdGR4LVxcdTAwM2V0ZC50ZHJfcGFnZSk7XFxuIFxcdGt2bV90ZHgtXFx1MDAzZXRkLnRkcl9wYWdlID0gTlVMTDtcXG4gfVxcbiBcXG5AQCAtNjgxLDYgKzY4MSw4IEBAIGludCB0ZHhfdmNwdV9jcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXHRpZiAoIWlycWNoaXBfc3BsaXQodmNwdS1cXHUwMDNla3ZtKSlcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbitcXHR0ZHhfaW5pdF9wYW10X2NhY2hlKFxcdTAwMjZ0ZHgtXFx1MDAzZXBhbXRfY2FjaGUpO1xcbitcXG4gXFx0ZnBzdGF0ZV9zZXRfY29uZmlkZW50aWFsKFxcdTAwMjZ2Y3B1LVxcdTAwM2VhcmNoLmd1ZXN0X2ZwdSk7XFxuIFxcdHZjcHUtXFx1MDAzZWFyY2guYXBpYy1cXHUwMDNlZ3Vlc3RfYXBpY19wcm90ZWN0ZWQgPSB0cnVlO1xcbiBcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2dGR4LVxcdTAwM2V2dC5waV93YWtldXBfbGlzdCk7XFxuQEAgLTg2Niw2ICs4NjgsOCBAQCB2b2lkIHRkeF92Y3B1X2ZyZWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXHRzdHJ1Y3QgdmNwdV90ZHggKnRkeCA9IHRvX3RkeCh2Y3B1KTtcXG4gXFx0aW50IGk7XFxuIFxcbitcXHR0ZHhfZnJlZV9wYW10X2NhY2hlKFxcdTAwMjZ0ZHgtXFx1MDAzZXBhbXRfY2FjaGUpO1xcbitcXG4gXFx0aWYgKHZjcHUtXFx1MDAzZWNwdSAhPSAtMSkge1xcbiBcXHRcXHRLVk1fQlVHX09OKHRkeC1cXHUwMDNlc3RhdGUgPT0gVkNQVV9URF9TVEFURV9JTklUSUFMSVpFRCwgdmNwdS1cXHUwMDNla3ZtKTtcXG4gXFx0XFx0dGR4X2ZsdXNoX3ZwX29uX2NwdSh2Y3B1KTtcXG5AQCAtMTYyMSw2ICsxNjI1LDE3IEBAIHZvaWQgdGR4X2xvYWRfbW11X3BnZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGhwYV90IHJvb3RfaHBhLCBpbnQgcGdkX2xldmVsKVxcbiBcXHR0ZF92bWNzX3dyaXRlNjQodG9fdGR4KHZjcHUpLCBTSEFSRURfRVBUX1BPSU5URVIsIHJvb3RfaHBhKTtcXG4gfVxcbiBcXG4rc3RhdGljIGludCB0ZHhfdG9wdXBfZXh0ZXJuYWxfcGFtdF9jYWNoZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBtaW5fbnJfc3B0cylcXG4re1xcbitcXHQvKlxcbitcXHQgKiBNaW51cyBvbmUgcGFnZSB0byBleGNsdWRlIHRoZSByb290IFNQVCwgYnV0IHBsdXMgb25lIHBhZ2UgZm9yIGFcXG4rXFx0ICogcG9zc2libGUgNEtCIHByaXZhdGUgbWFwcGluZy5cXG4rXFx0ICovXFxuK1xcdG1pbl9ucl9zcHRzICs9IC0xICsgMTtcXG4rXFxuK1xcdHJldHVybiB0ZHhfdG9wdXBfcGFtdF9jYWNoZShcXHUwMDI2dG9fdGR4KHZjcHUpLVxcdTAwM2VwYW10X2NhY2hlLCBtaW5fbnJfc3B0cyk7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgdGR4X21lbV9wYWdlX2FkZChzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbiwgZW51bSBwZ19sZXZlbCBsZXZlbCxcXG4gXFx0XFx0XFx0ICAgIGt2bV9wZm5fdCBwZm4pXFxuIHtcXG5AQCAtMTY3OSwxNiArMTY5NCwyOCBAQCBzdGF0aWMgc3RydWN0IHBhZ2UgKnRkeF9zcHRlX3RvX3NlcHRfcHQoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4sXFxuIHN0YXRpYyBpbnQgdGR4X3NlcHRfbWFwX25vbmxlYWZfc3B0ZShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbixcXG4gXFx0XFx0XFx0XFx0ICAgICBlbnVtIHBnX2xldmVsIGxldmVsLCB1NjQgbmV3X3NwdGUpXFxuIHtcXG4rXFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1ID0ga3ZtX2dldF9ydW5uaW5nX3ZjcHUoKTtcXG4gXFx0Z3BhX3QgZ3BhID0gZ2ZuX3RvX2dwYShnZm4pO1xcbiBcXHR1NjQgZXJyLCBlbnRyeSwgbGV2ZWxfc3RhdGU7XFxuIFxcdHN0cnVjdCBwYWdlICpzZXB0X3B0O1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0aWYgKEtWTV9CVUdfT04oIXZjcHUsIGt2bSkpXFxuK1xcdFxcdHJldHVybiAtRUlPO1xcbiBcXG4gXFx0c2VwdF9wdCA9IHRkeF9zcHRlX3RvX3NlcHRfcHQoa3ZtLCBnZm4sIG5ld19zcHRlLCBsZXZlbCk7XFxuIFxcdGlmICghc2VwdF9wdClcXG4gXFx0XFx0cmV0dXJuIC1FSU87XFxuIFxcbitcXHRyZXQgPSB0ZHhfcGFtdF9nZXQocGFnZV90b19wZm4oc2VwdF9wdCksIFxcdTAwMjZ0b190ZHgodmNwdSktXFx1MDAzZXBhbXRfY2FjaGUpO1xcbitcXHRpZiAoS1ZNX0JVR19PTihyZXQsIGt2bSkpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbiBcXHRlcnIgPSB0ZGhfbWVtX3NlcHRfYWRkKFxcdTAwMjZ0b19rdm1fdGR4KGt2bSktXFx1MDAzZXRkLCBncGEsIGxldmVsLCBzZXB0X3B0LFxcbiBcXHRcXHRcXHQgICAgICAgXFx1MDAyNmVudHJ5LCBcXHUwMDI2bGV2ZWxfc3RhdGUpO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHR0ZHhfcGFtdF9wdXQocGFnZV90b19wZm4oc2VwdF9wdCkpO1xcbitcXG4gXFx0aWYgKHVubGlrZWx5KHRkeF9vcGVyYW5kX2J1c3koZXJyKSkpXFxuIFxcdFxcdHJldHVybiAtRUJVU1k7XFxuIFxcbkBAIC0xNzAxLDggKzE3MjgsMTMgQEAgc3RhdGljIGludCB0ZHhfc2VwdF9tYXBfbm9ubGVhZl9zcHRlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLFxcbiBzdGF0aWMgaW50IHRkeF9zZXB0X21hcF9sZWFmX3NwdGUoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4sIGVudW0gcGdfbGV2ZWwgbGV2ZWwsXFxuIFxcdFxcdFxcdFxcdCAgdTY0IG5ld19zcHRlKVxcbiB7XFxuK1xcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdSA9IGt2bV9nZXRfcnVubmluZ192Y3B1KCk7XFxuIFxcdHN0cnVjdCBrdm1fdGR4ICprdm1fdGR4ID0gdG9fa3ZtX3RkeChrdm0pO1xcbiBcXHRrdm1fcGZuX3QgcGZuID0gc3B0ZV90b19wZm4obmV3X3NwdGUpO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0aWYgKEtWTV9CVUdfT04oIXZjcHUsIGt2bSkpXFxuK1xcdFxcdHJldHVybiAtRUlPO1xcbiBcXG4gXFx0LyogVE9ETzogaGFuZGxlIGxhcmdlIHBhZ2VzLiAqL1xcbiBcXHRpZiAoS1ZNX0JVR19PTihsZXZlbCAhPSBQR19MRVZFTF80Sywga3ZtKSlcXG5AQCAtMTcxMCw2ICsxNzQyLDEwIEBAIHN0YXRpYyBpbnQgdGR4X3NlcHRfbWFwX2xlYWZfc3B0ZShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbiwgZW51bSBwZ19sZXZlbCBsZXZlXFxuIFxcbiBcXHRXQVJOX09OX09OQ0UoKG5ld19zcHRlIFxcdTAwMjYgVk1YX0VQVF9SV1hfTUFTSykgIT0gVk1YX0VQVF9SV1hfTUFTSyk7XFxuIFxcbitcXHRyZXQgPSB0ZHhfcGFtdF9nZXQocGZuLCBcXHUwMDI2dG9fdGR4KHZjcHUpLVxcdTAwM2VwYW10X2NhY2hlKTtcXG4rXFx0aWYgKEtWTV9CVUdfT04ocmV0LCBrdm0pKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4gXFx0LypcXG4gXFx0ICogRW5zdXJlIHByZV9mYXVsdF9hbGxvd2VkIGlzIHJlYWQgYnkga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5KClcXG4gXFx0ICogYmVmb3JlIGt2bV90ZHgtXFx1MDAzZXN0YXRlLiAgVXNlcnNwYWNlIG11c3Qgbm90IGJlIGFsbG93ZWQgdG8gcHJlLWZhdWx0XFxuQEAgLTE3MjIsMTAgKzE3NTgsMTUgQEAgc3RhdGljIGludCB0ZHhfc2VwdF9tYXBfbGVhZl9zcHRlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLCBlbnVtIHBnX2xldmVsIGxldmVcXG4gXFx0ICogSWYgdGhlIFREIGlzbid0IGZpbmFsaXplZC9ydW5uYWJsZSwgdGhlbiB1c2Vyc3BhY2UgaXMgaW5pdGlhbGl6aW5nXFxuIFxcdCAqIHRoZSBWTSBpbWFnZSB2aWEgS1ZNX1REWF9JTklUX01FTV9SRUdJT047IEFERCB0aGUgcGFnZSB0byB0aGUgVEQuXFxuIFxcdCAqL1xcbi1cXHRpZiAodW5saWtlbHkoa3ZtX3RkeC1cXHUwMDNlc3RhdGUgIT0gVERfU1RBVEVfUlVOTkFCTEUpKVxcbi1cXHRcXHRyZXR1cm4gdGR4X21lbV9wYWdlX2FkZChrdm0sIGdmbiwgbGV2ZWwsIHBmbik7XFxuK1xcdGlmIChsaWtlbHkoa3ZtX3RkeC1cXHUwMDNlc3RhdGUgPT0gVERfU1RBVEVfUlVOTkFCTEUpKVxcbitcXHRcXHRyZXQgPSB0ZHhfbWVtX3BhZ2VfYXVnKGt2bSwgZ2ZuLCBsZXZlbCwgcGZuKTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRyZXQgPSB0ZHhfbWVtX3BhZ2VfYWRkKGt2bSwgZ2ZuLCBsZXZlbCwgcGZuKTtcXG4rXFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHRkeF9wYW10X3B1dChwZm4pO1xcbiBcXG4tXFx0cmV0dXJuIHRkeF9tZW1fcGFnZV9hdWcoa3ZtLCBnZm4sIGxldmVsLCBwZm4pO1xcbitcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbiAvKlxcbkBAIC0xODIyLDYgKzE4NjMsNyBAQCBzdGF0aWMgaW50IHRkeF9zZXB0X3JlbW92ZV9sZWFmX3NwdGUoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4sXFxuIFxcdFxcdHJldHVybiAtRUlPO1xcbiBcXG4gXFx0dGR4X3F1aXJrX3Jlc2V0X3BhZGRyKFBGTl9QSFlTKHBmbiksIFBBR0VfU0laRSk7XFxuK1xcdHRkeF9wYW10X3B1dChwZm4pO1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG5AQCAtMTg2NSw2ICsxOTA3LDggQEAgc3RhdGljIGludCB0ZHhfc2VwdF9zZXRfcHJpdmF0ZV9zcHRlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLCB1NjQgb2xkX3NwdGUsXFxuICAqL1xcbiBzdGF0aWMgdm9pZCB0ZHhfc2VwdF9mcmVlX3ByaXZhdGVfc3B0KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tbXVfcGFnZSAqc3ApXFxuIHtcXG4rXFx0c3RydWN0IHBhZ2UgKnNlcHRfcHQgPSB2aXJ0X3RvX3BhZ2Uoc3AtXFx1MDAzZWV4dGVybmFsX3NwdCk7XFxuK1xcbiBcXHQvKlxcbiBcXHQgKiBLVk0gZG9lc24ndCAoeWV0KSB6YXAgcGFnZSB0YWJsZSBwYWdlcyBpbiBtaXJyb3IgcGFnZSB0YWJsZSB3aGlsZVxcbiBcXHQgKiBURCBpcyBhY3RpdmUsIHRob3VnaCBndWVzdCBwYWdlcyBtYXBwZWQgaW4gbWlycm9yIHBhZ2UgdGFibGUgY291bGQgYmVcXG5AQCAtMTg3OCwxNSArMTkyMiwxNSBAQCBzdGF0aWMgdm9pZCB0ZHhfc2VwdF9mcmVlX3ByaXZhdGVfc3B0KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tbXVfcGFnZSAqc3ApXFxuIFxcdCAqIHRoZSBwYWdlIHRvIHByZXZlbnQgdGhlIGtlcm5lbCBmcm9tIGFjY2Vzc2luZyB0aGUgZW5jcnlwdGVkIHBhZ2UuXFxuIFxcdCAqL1xcbiBcXHRpZiAoS1ZNX0JVR19PTihpc19oa2lkX2Fzc2lnbmVkKHRvX2t2bV90ZHgoa3ZtKSksIGt2bSkgfHxcXG4tXFx0ICAgIHRkeF9yZWNsYWltX3BhZ2UodmlydF90b19wYWdlKHNwLVxcdTAwM2VleHRlcm5hbF9zcHQpKSlcXG4rXFx0ICAgIHRkeF9yZWNsYWltX3BhZ2Uoc2VwdF9wdCkpXFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXG4gXFx0LypcXG4tXFx0ICogSW1tZWRpYXRlbHkgZnJlZSB0aGUgUy1FUFQgcGFnZSBiZWNhdXNlIFJDVS10aW1lIGZyZWUgaXMgdW5uZWNlc3NhcnlcXG4tXFx0ICogYWZ0ZXIgVERILlBIWU1FTS5QQUdFLlJFQ0xBSU0gZW5zdXJlcyB0aGVyZSBhcmUgbm8gb3V0c3RhbmRpbmdcXG4tXFx0ICogcmVhZGVycy5cXG4rXFx0ICogSW1tZWRpYXRlbHkgZnJlZSB0aGUgUy1FUFQgcGFnZSBhcyB0aGUgVERYIHN1YnN5c3RlbSBkb2Vzbid0IHN1cHBvcnRcXG4rXFx0ICogZnJlZWluZyBwYWdlcyBmcm9tIFJDVSBjYWxsYmFja3MsIGFuZCBtb3JlIGltcG9ydGFudGx5IGJlY2F1c2VcXG4rXFx0ICogVERILlBIWU1FTS5QQUdFLlJFQ0xBSU0gZW5zdXJlcyB0aGVyZSBhcmUgbm8gb3V0c3RhbmRpbmcgcmVhZGVycy5cXG4gXFx0ICovXFxuLVxcdGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylzcC1cXHUwMDNlZXh0ZXJuYWxfc3B0KTtcXG4rXFx0dGR4X2ZyZWVfY29udHJvbF9wYWdlKHNlcHRfcHQpO1xcbiBvdXQ6XFxuIFxcdHNwLVxcdTAwM2VleHRlcm5hbF9zcHQgPSBOVUxMO1xcbiB9XFxuQEAgLTI0NTksNyArMjUwMyw3IEBAIHN0YXRpYyBpbnQgX190ZHhfdGRfaW5pdChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCB0ZF9wYXJhbXMgKnRkX3BhcmFtcyxcXG4gXFxuIFxcdHJldCA9IC1FTk9NRU07XFxuIFxcbi1cXHR0ZHJfcGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG4rXFx0dGRyX3BhZ2UgPSB0ZHhfYWxsb2NfY29udHJvbF9wYWdlKCk7XFxuIFxcdGlmICghdGRyX3BhZ2UpXFxuIFxcdFxcdGdvdG8gZnJlZV9oa2lkO1xcbiBcXG5AQCAtMjQ3Miw3ICsyNTE2LDcgQEAgc3RhdGljIGludCBfX3RkeF90ZF9pbml0KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IHRkX3BhcmFtcyAqdGRfcGFyYW1zLFxcbiBcXHRcXHRnb3RvIGZyZWVfdGRyO1xcbiBcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGt2bV90ZHgtXFx1MDAzZXRkLnRkY3NfbnJfcGFnZXM7IGkrKykge1xcbi1cXHRcXHR0ZGNzX3BhZ2VzW2ldID0gYWxsb2NfcGFnZShHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbitcXHRcXHR0ZGNzX3BhZ2VzW2ldID0gdGR4X2FsbG9jX2NvbnRyb2xfcGFnZSgpO1xcbiBcXHRcXHRpZiAoIXRkY3NfcGFnZXNbaV0pXFxuIFxcdFxcdFxcdGdvdG8gZnJlZV90ZGNzO1xcbiBcXHR9XFxuQEAgLTI1OTAsMTAgKzI2MzQsOCBAQCBzdGF0aWMgaW50IF9fdGR4X3RkX2luaXQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3QgdGRfcGFyYW1zICp0ZF9wYXJhbXMsXFxuIHRlYXJkb3duOlxcbiBcXHQvKiBPbmx5IGZyZWUgcGFnZXMgbm90IHlldCBhZGRlZCwgc28gc3RhcnQgYXQgJ2knICovXFxuIFxcdGZvciAoOyBpIFxcdTAwM2Mga3ZtX3RkeC1cXHUwMDNldGQudGRjc19ucl9wYWdlczsgaSsrKSB7XFxuLVxcdFxcdGlmICh0ZGNzX3BhZ2VzW2ldKSB7XFxuLVxcdFxcdFxcdF9fZnJlZV9wYWdlKHRkY3NfcGFnZXNbaV0pO1xcbi1cXHRcXHRcXHR0ZGNzX3BhZ2VzW2ldID0gTlVMTDtcXG4tXFx0XFx0fVxcbitcXHRcXHR0ZHhfZnJlZV9jb250cm9sX3BhZ2UodGRjc19wYWdlc1tpXSk7XFxuK1xcdFxcdHRkY3NfcGFnZXNbaV0gPSBOVUxMO1xcbiBcXHR9XFxuIFxcdGlmICgha3ZtX3RkeC1cXHUwMDNldGQudGRjc19wYWdlcylcXG4gXFx0XFx0a2ZyZWUodGRjc19wYWdlcyk7XFxuQEAgLTI2MDgsMTYgKzI2NTAsMTMgQEAgc3RhdGljIGludCBfX3RkeF90ZF9pbml0KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IHRkX3BhcmFtcyAqdGRfcGFyYW1zLFxcbiBcXHRmcmVlX2NwdW1hc2tfdmFyKHBhY2thZ2VzKTtcXG4gXFxuIGZyZWVfdGRjczpcXG4tXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGt2bV90ZHgtXFx1MDAzZXRkLnRkY3NfbnJfcGFnZXM7IGkrKykge1xcbi1cXHRcXHRpZiAodGRjc19wYWdlc1tpXSlcXG4tXFx0XFx0XFx0X19mcmVlX3BhZ2UodGRjc19wYWdlc1tpXSk7XFxuLVxcdH1cXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGt2bV90ZHgtXFx1MDAzZXRkLnRkY3NfbnJfcGFnZXM7IGkrKylcXG4rXFx0XFx0dGR4X2ZyZWVfY29udHJvbF9wYWdlKHRkY3NfcGFnZXNbaV0pO1xcbiBcXHRrZnJlZSh0ZGNzX3BhZ2VzKTtcXG4gXFx0a3ZtX3RkeC1cXHUwMDNldGQudGRjc19wYWdlcyA9IE5VTEw7XFxuIFxcbiBmcmVlX3RkcjpcXG4tXFx0aWYgKHRkcl9wYWdlKVxcbi1cXHRcXHRfX2ZyZWVfcGFnZSh0ZHJfcGFnZSk7XFxuK1xcdHRkeF9mcmVlX2NvbnRyb2xfcGFnZSh0ZHJfcGFnZSk7XFxuIFxcdGt2bV90ZHgtXFx1MDAzZXRkLnRkcl9wYWdlID0gTlVMTDtcXG4gXFxuIGZyZWVfaGtpZDpcXG5AQCAtMjk1MSw3ICsyOTkwLDcgQEAgc3RhdGljIGludCB0ZHhfdGRfdmNwdV9pbml0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHZjcHVfcmN4KVxcbiBcXHRpbnQgcmV0LCBpO1xcbiBcXHR1NjQgZXJyO1xcbiBcXG4tXFx0cGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG4rXFx0cGFnZSA9IHRkeF9hbGxvY19jb250cm9sX3BhZ2UoKTtcXG4gXFx0aWYgKCFwYWdlKVxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFx0dGR4LVxcdTAwM2V2cC50ZHZwcl9wYWdlID0gcGFnZTtcXG5AQCAtMjk3MSw3ICszMDEwLDcgQEAgc3RhdGljIGludCB0ZHhfdGRfdmNwdV9pbml0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHZjcHVfcmN4KVxcbiBcXHR9XFxuIFxcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mga3ZtX3RkeC1cXHUwMDNldGQudGRjeF9ucl9wYWdlczsgaSsrKSB7XFxuLVxcdFxcdHBhZ2UgPSBhbGxvY19wYWdlKEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuK1xcdFxcdHBhZ2UgPSB0ZHhfYWxsb2NfY29udHJvbF9wYWdlKCk7XFxuIFxcdFxcdGlmICghcGFnZSkge1xcbiBcXHRcXHRcXHRyZXQgPSAtRU5PTUVNO1xcbiBcXHRcXHRcXHRnb3RvIGZyZWVfdGRjeDtcXG5AQCAtMjk5Myw3ICszMDMyLDcgQEAgc3RhdGljIGludCB0ZHhfdGRfdmNwdV9pbml0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHZjcHVfcmN4KVxcbiBcXHRcXHRcXHQgKiBtZXRob2QsIGJ1dCB0aGUgcmVzdCBhcmUgZnJlZWQgaGVyZS5cXG4gXFx0XFx0XFx0ICovXFxuIFxcdFxcdFxcdGZvciAoOyBpIFxcdTAwM2Mga3ZtX3RkeC1cXHUwMDNldGQudGRjeF9ucl9wYWdlczsgaSsrKSB7XFxuLVxcdFxcdFxcdFxcdF9fZnJlZV9wYWdlKHRkeC1cXHUwMDNldnAudGRjeF9wYWdlc1tpXSk7XFxuK1xcdFxcdFxcdFxcdHRkeF9mcmVlX2NvbnRyb2xfcGFnZSh0ZHgtXFx1MDAzZXZwLnRkY3hfcGFnZXNbaV0pO1xcbiBcXHRcXHRcXHRcXHR0ZHgtXFx1MDAzZXZwLnRkY3hfcGFnZXNbaV0gPSBOVUxMO1xcbiBcXHRcXHRcXHR9XFxuIFxcdFxcdFxcdHJldHVybiAtRUlPO1xcbkBAIC0zMDIxLDE2ICszMDYwLDE0IEBAIHN0YXRpYyBpbnQgdGR4X3RkX3ZjcHVfaW5pdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB2Y3B1X3JjeClcXG4gXFxuIGZyZWVfdGRjeDpcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGt2bV90ZHgtXFx1MDAzZXRkLnRkY3hfbnJfcGFnZXM7IGkrKykge1xcbi1cXHRcXHRpZiAodGR4LVxcdTAwM2V2cC50ZGN4X3BhZ2VzW2ldKVxcbi1cXHRcXHRcXHRfX2ZyZWVfcGFnZSh0ZHgtXFx1MDAzZXZwLnRkY3hfcGFnZXNbaV0pO1xcbitcXHRcXHR0ZHhfZnJlZV9jb250cm9sX3BhZ2UodGR4LVxcdTAwM2V2cC50ZGN4X3BhZ2VzW2ldKTtcXG4gXFx0XFx0dGR4LVxcdTAwM2V2cC50ZGN4X3BhZ2VzW2ldID0gTlVMTDtcXG4gXFx0fVxcbiBcXHRrZnJlZSh0ZHgtXFx1MDAzZXZwLnRkY3hfcGFnZXMpO1xcbiBcXHR0ZHgtXFx1MDAzZXZwLnRkY3hfcGFnZXMgPSBOVUxMO1xcbiBcXG4gZnJlZV90ZHZwcjpcXG4tXFx0aWYgKHRkeC1cXHUwMDNldnAudGR2cHJfcGFnZSlcXG4tXFx0XFx0X19mcmVlX3BhZ2UodGR4LVxcdTAwM2V2cC50ZHZwcl9wYWdlKTtcXG4rXFx0dGR4X2ZyZWVfY29udHJvbF9wYWdlKHRkeC1cXHUwMDNldnAudGR2cHJfcGFnZSk7XFxuIFxcdHRkeC1cXHUwMDNldnAudGR2cHJfcGFnZSA9IE5VTEw7XFxuIFxcdHRkeC1cXHUwMDNldnAudGR2cHJfcGEgPSAwO1xcbiBcXG5AQCAtMzQ5Myw2ICszNTMwLDEwIEBAIGludCBfX2luaXQgdGR4X2hhcmR3YXJlX3NldHVwKHZvaWQpXFxuIFxcbiBcXHR2dF94ODZfb3BzLnNldF9leHRlcm5hbF9zcHRlID0gdGR4X3NlcHRfc2V0X3ByaXZhdGVfc3B0ZTtcXG4gXFx0dnRfeDg2X29wcy5mcmVlX2V4dGVybmFsX3NwdCA9IHRkeF9zZXB0X2ZyZWVfcHJpdmF0ZV9zcHQ7XFxuK1xcbitcXHRpZiAodGR4X3N1cHBvcnRzX2R5bmFtaWNfcGFtdCh0ZHhfc3lzaW5mbykpXFxuK1xcdFxcdHZ0X3g4Nl9vcHMudG9wdXBfZXh0ZXJuYWxfY2FjaGUgPSB0ZHhfdG9wdXBfZXh0ZXJuYWxfcGFtdF9jYWNoZTtcXG4rXFxuIFxcdHZ0X3g4Nl9vcHMucHJvdGVjdGVkX2FwaWNfaGFzX2ludGVycnVwdCA9IHRkeF9wcm90ZWN0ZWRfYXBpY19oYXNfaW50ZXJydXB0O1xcbiBcXHRyZXR1cm4gMDtcXG4gXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvdGR4LmggYi9hcmNoL3g4Ni9rdm0vdm14L3RkeC5oXFxuaW5kZXggYWM4MzIzYTY4YjE2M2EuLmZkMzY4ZTNlZTA2MGI2IDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgvdGR4LmhcXG4rKysgYi9hcmNoL3g4Ni9rdm0vdm14L3RkeC5oXFxuQEAgLTcyLDYgKzcyLDggQEAgc3RydWN0IHZjcHVfdGR4IHtcXG4gXFxuIFxcdHU2NCBtYXBfZ3BhX25leHQ7XFxuIFxcdHU2NCBtYXBfZ3BhX2VuZDtcXG4rXFxuK1xcdHN0cnVjdCB0ZHhfcGFtdF9jYWNoZSBwYW10X2NhY2hlO1xcbiB9O1xcbiBcXG4gdm9pZCB0ZGhfdnBfcmRfZmFpbGVkKHN0cnVjdCB2Y3B1X3RkeCAqdGR4LCBjaGFyICp1Y2xhc3MsIHUzMiBmaWVsZCwgdTY0IGVycik7XFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYyBiL2FyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguY1xcbmluZGV4IDQyZGY4ZWE0NjRjNDcyLi5kZWM0NTcwOWU0NTRhNiAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmNcXG4rKysgYi9hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmNcXG5AQCAtMzAsNiArMzAsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc3VzcGVuZC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc3lzY29yZV9vcHMuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lkci5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvdm1hbGxvYy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL3BhZ2UuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS9zcGVjaWFsX2luc25zLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2Nhc20vbXNyLWluZGV4LmhcXHUwMDNlXFxuQEAgLTQ2LDYgKzQ3LDggQEBcXG4gI2luY2x1ZGUgXFxcInNlYW1jYWxsX2ludGVybmFsLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJ0ZHguaFxcXCJcXG4gXFxuK3N0YXRpYyBib29sIHRkeF9lbmFibGVfZHBhbXQgX19yb19hZnRlcl9pbml0O1xcbitcXG4gc3RydWN0IHRkeF9tb2R1bGVfc3RhdGUge1xcbiBcXHRib29sIGluaXRpYWxpemVkO1xcbiBcXHRib29sIHN5c2luaXRfZG9uZTtcXG5AQCAtNjMsNiArNjYsMTQgQEAgc3RhdGljIERFRklORV9QRVJfQ1BVKGJvb2wsIHRkeF9scF9pbml0aWFsaXplZCk7XFxuIFxcbiBzdGF0aWMgc3RydWN0IHRkbXJfaW5mb19saXN0IHRkeF90ZG1yX2xpc3Q7XFxuIFxcbisvKlxcbisgKiBPbiBhIG1hY2hpbmUgd2l0aCBEeW5hbWljIFBBTVQsIHRoZSBrZXJuZWwgbWFpbnRhaW5zIGEgcmVmZXJlbmNlIGNvdW50ZXJcXG4rICogZm9yIGV2ZXJ5IDJNQiByYW5nZS4gVGhlIGNvdW50ZXIgaW5kaWNhdGVzIGhvdyBtYW55IHVzZXJzIHRoZXJlIGFyZSBmb3JcXG4rICogdGhlIFBBTVQgbWVtb3J5IG9mIHRoZSAyTUIgcmFuZ2UuIFRoZSBrZXJuZWwgYWxsb2NhdGVzIFBBTVQgcmVmY291bnRzIGF0XFxuKyAqIGluaXRpYWxpemF0aW9uLlxcbisgKi9cXG4rc3RhdGljIGF0b21pY190ICpwYW10X3JlZmNvdW50cztcXG4rXFxuIC8qIEFsbCBURFgtdXNhYmxlIG1lbW9yeSByZWdpb25zLiAgUHJvdGVjdGVkIGJ5IG1lbV9ob3RwbHVnX2xvY2suICovXFxuIHN0YXRpYyBMSVNUX0hFQUQodGR4X21lbWxpc3QpO1xcbiBcXG5AQCAtMjUyLDYgKzI2Myw0MiBAQCBzdGF0aWMgc3RydWN0IHN5c2NvcmUgdGR4X3N5c2NvcmUgPSB7XFxuIFxcdC5vcHMgPSBcXHUwMDI2dGR4X3N5c2NvcmVfb3BzLFxcbiB9O1xcbiBcXG4rLypcXG4rICogQWxsb2NhdGUgUEFNVCByZWZlcmVuY2UgY291bnRlcnMgZm9yIGFsbCBwaHlzaWNhbCBtZW1vcnkuXFxuKyAqXFxuKyAqIEl0IGNvbnN1bWVzIDJNQiBmb3IgZXZlcnkgMVRCIG9mIHBoeXNpY2FsIG1lbW9yeS5cXG4rICovXFxuK3N0YXRpYyBfX2luaXQgaW50IGluaXRfcGFtdF9yZWZjb3VudHModm9pZClcXG4re1xcbitcXHRzaXplX3Qgc2l6ZSA9IERJVl9ST1VORF9VUChtYXhfcGZuLCBQVFJTX1BFUl9QVEUpICogc2l6ZW9mKCpwYW10X3JlZmNvdW50cyk7XFxuK1xcbitcXHRpZiAoIXRkeF9zdXBwb3J0c19keW5hbWljX3BhbXQoXFx1MDAyNnRkeF9zeXNpbmZvKSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRwYW10X3JlZmNvdW50cyA9IHZ6YWxsb2Moc2l6ZSk7XFxuK1xcdGlmICghcGFtdF9yZWZjb3VudHMpXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBfX2luaXQgdm9pZCBmcmVlX3BhbXRfcmVmY291bnRzKHZvaWQpXFxuK3tcXG4rXFx0aWYgKCF0ZHhfc3VwcG9ydHNfZHluYW1pY19wYW10KFxcdTAwMjZ0ZHhfc3lzaW5mbykpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdHZmcmVlKHBhbXRfcmVmY291bnRzKTtcXG4rXFx0cGFtdF9yZWZjb3VudHMgPSBOVUxMO1xcbit9XFxuK1xcbitzdGF0aWMgYXRvbWljX3QgKnRkeF9maW5kX3BhbXRfcmVmY291bnQodW5zaWduZWQgbG9uZyBwZm4pXFxuK3tcXG4rXFx0LyogRmluZCB3aGljaCBQTUQgYSBQRk4gaXMgaW4uICovXFxuK1xcdHVuc2lnbmVkIGxvbmcgaW5kZXggPSBwZm4gXFx1MDAzZVxcdTAwM2UgKFBNRF9TSElGVCAtIFBBR0VfU0hJRlQpO1xcbitcXG4rXFx0cmV0dXJuIFxcdTAwMjZwYW10X3JlZmNvdW50c1tpbmRleF07XFxuK31cXG4rXFxuIC8qXFxuICAqIEFkZCBhIG1lbW9yeSByZWdpb24gYXMgYSBURFggbWVtb3J5IGJsb2NrLiAgVGhlIGNhbGxlciBtdXN0IG1ha2Ugc3VyZVxcbiAgKiBhbGwgbWVtb3J5IHJlZ2lvbnMgYXJlIGFkZGVkIGluIGFkZHJlc3MgYXNjZW5kaW5nIG9yZGVyIGFuZCBkb24ndFxcbkBAIC01MTAsMzUgKzU1NywzNyBAQCBzdGF0aWMgX19pbml0IGludCBmaWxsX291dF90ZG1ycyhzdHJ1Y3QgbGlzdF9oZWFkICp0bWJfbGlzdCxcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK3N0YXRpYyBfX2luaXQgdW5zaWduZWQgbG9uZyB0ZG1yX2dldF9wYW10X2JpdG1hcF9zeihzdHJ1Y3QgdGRtcl9pbmZvICp0ZG1yKVxcbit7XFxuK1xcdHVuc2lnbmVkIGxvbmcgcGFtdF9zeiwgbnJfcGFtdF9lbnRyaWVzO1xcbitcXHRpbnQgYml0c19wZXJfZW50cnk7XFxuK1xcbitcXHRiaXRzX3Blcl9lbnRyeSA9IHRkeF9zeXNpbmZvLnRkbXIucGFtdF9wYWdlX2JpdG1hcF9lbnRyeV9iaXRzO1xcbitcXHRucl9wYW10X2VudHJpZXMgPSB0ZG1yLVxcdTAwM2VzaXplIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQ7XFxuK1xcdHBhbXRfc3ogPSBESVZfUk9VTkRfVVAobnJfcGFtdF9lbnRyaWVzICogYml0c19wZXJfZW50cnksIEJJVFNfUEVSX0JZVEUpO1xcbitcXG4rXFx0cmV0dXJuIFBBR0VfQUxJR04ocGFtdF9zeik7XFxuK31cXG4rXFxuIC8qXFxuICAqIENhbGN1bGF0ZSBQQU1UIHNpemUgZ2l2ZW4gYSBURE1SIGFuZCBhIHBhZ2Ugc2l6ZS4gIFRoZSByZXR1cm5lZFxcbiAgKiBQQU1UIHNpemUgaXMgYWx3YXlzIGFsaWduZWQgdXAgdG8gNEsgcGFnZSBib3VuZGFyeS5cXG4gICovXFxuLXN0YXRpYyBfX2luaXQgdW5zaWduZWQgbG9uZyB0ZG1yX2dldF9wYW10X3N6KHN0cnVjdCB0ZG1yX2luZm8gKnRkbXIsIGludCBwZ3N6LFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgIHUxNiBwYW10X2VudHJ5X3NpemUpXFxuK3N0YXRpYyBfX2luaXQgdW5zaWduZWQgbG9uZyB0ZG1yX2dldF9wYW10X3N6KHN0cnVjdCB0ZG1yX2luZm8gKnRkbXIsIGludCBwZ3N6KVxcbiB7XFxuIFxcdHVuc2lnbmVkIGxvbmcgcGFtdF9zeiwgbnJfcGFtdF9lbnRyaWVzO1xcbitcXHRjb25zdCBpbnQgdGR4X3BnX3NpemVfc2hpZnRbVERYX1BTX05SXSA9IHsgUEFHRV9TSElGVCwgUE1EX1NISUZULCBQVURfU0hJRlQgfTtcXG4rXFx0Y29uc3QgdTE2IHBhbXRfZW50cnlfc2l6ZVtURFhfUFNfTlJdID0ge1xcbitcXHRcXHR0ZHhfc3lzaW5mby50ZG1yLnBhbXRfNGtfZW50cnlfc2l6ZSxcXG4rXFx0XFx0dGR4X3N5c2luZm8udGRtci5wYW10XzJtX2VudHJ5X3NpemUsXFxuK1xcdFxcdHRkeF9zeXNpbmZvLnRkbXIucGFtdF8xZ19lbnRyeV9zaXplLFxcbitcXHR9O1xcbiBcXG4tXFx0c3dpdGNoIChwZ3N6KSB7XFxuLVxcdGNhc2UgVERYX1BTXzRLOlxcbi1cXHRcXHRucl9wYW10X2VudHJpZXMgPSB0ZG1yLVxcdTAwM2VzaXplIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQ7XFxuLVxcdFxcdGJyZWFrO1xcbi1cXHRjYXNlIFREWF9QU18yTTpcXG4tXFx0XFx0bnJfcGFtdF9lbnRyaWVzID0gdGRtci1cXHUwMDNlc2l6ZSBcXHUwMDNlXFx1MDAzZSBQTURfU0hJRlQ7XFxuLVxcdFxcdGJyZWFrO1xcbi1cXHRjYXNlIFREWF9QU18xRzpcXG4tXFx0XFx0bnJfcGFtdF9lbnRyaWVzID0gdGRtci1cXHUwMDNlc2l6ZSBcXHUwMDNlXFx1MDAzZSBQVURfU0hJRlQ7XFxuLVxcdFxcdGJyZWFrO1xcbi1cXHRkZWZhdWx0Olxcbi1cXHRcXHRXQVJOX09OX09OQ0UoMSk7XFxuLVxcdFxcdHJldHVybiAwO1xcbi1cXHR9XFxuK1xcdG5yX3BhbXRfZW50cmllcyA9IHRkbXItXFx1MDAzZXNpemUgXFx1MDAzZVxcdTAwM2UgdGR4X3BnX3NpemVfc2hpZnRbcGdzel07XFxuK1xcdHBhbXRfc3ogPSBucl9wYW10X2VudHJpZXMgKiBwYW10X2VudHJ5X3NpemVbcGdzel07XFxuIFxcbi1cXHRwYW10X3N6ID0gbnJfcGFtdF9lbnRyaWVzICogcGFtdF9lbnRyeV9zaXplO1xcbiBcXHQvKiBURFggcmVxdWlyZXMgUEFNVCBzaXplIG11c3QgYmUgNEsgYWxpZ25lZCAqL1xcbi1cXHRwYW10X3N6ID0gQUxJR04ocGFtdF9zeiwgUEFHRV9TSVpFKTtcXG4tXFxuLVxcdHJldHVybiBwYW10X3N6O1xcbitcXHRyZXR1cm4gUEFHRV9BTElHTihwYW10X3N6KTtcXG4gfVxcbiBcXG4gLypcXG5AQCAtNTc2LDE1ICs2MjUsMTEgQEAgc3RhdGljIF9faW5pdCBpbnQgdGRtcl9nZXRfbmlkKHN0cnVjdCB0ZG1yX2luZm8gKnRkbXIsIHN0cnVjdCBsaXN0X2hlYWQgKnRtYl9saXNcXG4gICogd2l0aGluIEB0ZG1yLCBhbmQgc2V0IHVwIFBBTVRzIGZvciBAdGRtci5cXG4gICovXFxuIHN0YXRpYyBfX2luaXQgaW50IHRkbXJfc2V0X3VwX3BhbXQoc3RydWN0IHRkbXJfaW5mbyAqdGRtcixcXG4tXFx0XFx0XFx0XFx0ICAgc3RydWN0IGxpc3RfaGVhZCAqdG1iX2xpc3QsXFxuLVxcdFxcdFxcdFxcdCAgIHUxNiBwYW10X2VudHJ5X3NpemVbXSlcXG4rXFx0XFx0XFx0XFx0ICAgc3RydWN0IGxpc3RfaGVhZCAqdG1iX2xpc3QpXFxuIHtcXG4tXFx0dW5zaWduZWQgbG9uZyBwYW10X2Jhc2VbVERYX1BTX05SXTtcXG4tXFx0dW5zaWduZWQgbG9uZyBwYW10X3NpemVbVERYX1BTX05SXTtcXG4tXFx0dW5zaWduZWQgbG9uZyB0ZG1yX3BhbXRfYmFzZTtcXG4gXFx0dW5zaWduZWQgbG9uZyB0ZG1yX3BhbXRfc2l6ZTtcXG4gXFx0c3RydWN0IHBhZ2UgKnBhbXQ7XFxuLVxcdGludCBwZ3N6LCBuaWQ7XFxuK1xcdGludCBuaWQ7XFxuIFxcbiBcXHRuaWQgPSB0ZG1yX2dldF9uaWQodGRtciwgdG1iX2xpc3QpO1xcbiBcXG5AQCAtNTkyLDEzICs2MzcsMTggQEAgc3RhdGljIF9faW5pdCBpbnQgdGRtcl9zZXRfdXBfcGFtdChzdHJ1Y3QgdGRtcl9pbmZvICp0ZG1yLFxcbiBcXHQgKiBDYWxjdWxhdGUgdGhlIFBBTVQgc2l6ZSBmb3IgZWFjaCBURFggc3VwcG9ydGVkIHBhZ2Ugc2l6ZVxcbiBcXHQgKiBhbmQgdGhlIHRvdGFsIFBBTVQgc2l6ZS5cXG4gXFx0ICovXFxuLVxcdHRkbXJfcGFtdF9zaXplID0gMDtcXG4tXFx0Zm9yIChwZ3N6ID0gVERYX1BTXzRLOyBwZ3N6IFxcdTAwM2MgVERYX1BTX05SOyBwZ3N6KyspIHtcXG4tXFx0XFx0cGFtdF9zaXplW3Bnc3pdID0gdGRtcl9nZXRfcGFtdF9zeih0ZG1yLCBwZ3N6LFxcbi1cXHRcXHRcXHRcXHRcXHRwYW10X2VudHJ5X3NpemVbcGdzel0pO1xcbi1cXHRcXHR0ZG1yX3BhbXRfc2l6ZSArPSBwYW10X3NpemVbcGdzel07XFxuK1xcdHRkbXItXFx1MDAzZXBhbXRfMWdfc2l6ZSA9IHRkbXJfZ2V0X3BhbXRfc3oodGRtciwgVERYX1BTXzFHKTtcXG4rXFx0dGRtci1cXHUwMDNlcGFtdF8ybV9zaXplID0gdGRtcl9nZXRfcGFtdF9zeih0ZG1yLCBURFhfUFNfMk0pO1xcbitcXG4rXFx0aWYgKHRkeF9zdXBwb3J0c19keW5hbWljX3BhbXQoXFx1MDAyNnRkeF9zeXNpbmZvKSkge1xcbitcXHRcXHQvKiBXaXRoIER5bmFtaWMgUEFNVCwgUEFNVF80SyBpcyByZXBsYWNlZCB3aXRoIGEgYml0bWFwICovXFxuK1xcdFxcdHRkbXItXFx1MDAzZXBhbXRfNGtfc2l6ZSA9IHRkbXJfZ2V0X3BhbXRfYml0bWFwX3N6KHRkbXIpO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHR0ZG1yLVxcdTAwM2VwYW10XzRrX3NpemUgPSB0ZG1yX2dldF9wYW10X3N6KHRkbXIsIFREWF9QU180Syk7XFxuIFxcdH1cXG4gXFxuK1xcdHRkbXJfcGFtdF9zaXplID0gdGRtci1cXHUwMDNlcGFtdF80a19zaXplICsgdGRtci1cXHUwMDNlcGFtdF8ybV9zaXplICsgdGRtci1cXHUwMDNlcGFtdF8xZ19zaXplO1xcbitcXG4gXFx0LypcXG4gXFx0ICogQWxsb2NhdGUgb25lIGNodW5rIG9mIHBoeXNpY2FsbHkgY29udGlndW91cyBtZW1vcnkgZm9yIGFsbFxcbiBcXHQgKiBQQU1Ucy4gIFRoaXMgaGVscHMgbWluaW1pemUgdGhlIFBBTVQncyB1c2Ugb2YgcmVzZXJ2ZWQgYXJlYXNcXG5AQCAtNjA2LDI1ICs2NTYsMTcgQEAgc3RhdGljIF9faW5pdCBpbnQgdGRtcl9zZXRfdXBfcGFtdChzdHJ1Y3QgdGRtcl9pbmZvICp0ZG1yLFxcbiBcXHQgKi9cXG4gXFx0cGFtdCA9IGFsbG9jX2NvbnRpZ19wYWdlcyh0ZG1yX3BhbXRfc2l6ZSBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZULCBHRlBfS0VSTkVMLFxcbiBcXHRcXHRcXHRuaWQsIFxcdTAwMjZub2RlX29ubGluZV9tYXApO1xcbi1cXHRpZiAoIXBhbXQpXFxuLVxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXG4gXFx0LypcXG4tXFx0ICogQnJlYWsgdGhlIGNvbnRpZ3VvdXMgYWxsb2NhdGlvbiBiYWNrIHVwIGludG8gdGhlXFxuLVxcdCAqIGluZGl2aWR1YWwgUEFNVHMgZm9yIGVhY2ggcGFnZSBzaXplLlxcbitcXHQgKiB0ZG1yLVxcdTAwM2VwYW10XzRrX2Jhc2UgaXMgc3RpbGwgemVybyBzbyB0aGUgZXJyb3JcXG4rXFx0ICogcGF0aCBvZiB0aGUgY2FsbGVyIHdpbGwgc2tpcCBmcmVlaW5nIHRoZSBQQU1ULlxcbiBcXHQgKi9cXG4tXFx0dGRtcl9wYW10X2Jhc2UgPSBwYWdlX3RvX3BmbihwYW10KSBcXHUwMDNjXFx1MDAzYyBQQUdFX1NISUZUO1xcbi1cXHRmb3IgKHBnc3ogPSBURFhfUFNfNEs7IHBnc3ogXFx1MDAzYyBURFhfUFNfTlI7IHBnc3orKykge1xcbi1cXHRcXHRwYW10X2Jhc2VbcGdzel0gPSB0ZG1yX3BhbXRfYmFzZTtcXG4tXFx0XFx0dGRtcl9wYW10X2Jhc2UgKz0gcGFtdF9zaXplW3Bnc3pdO1xcbi1cXHR9XFxuK1xcdGlmICghcGFtdClcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcbi1cXHR0ZG1yLVxcdTAwM2VwYW10XzRrX2Jhc2UgPSBwYW10X2Jhc2VbVERYX1BTXzRLXTtcXG4tXFx0dGRtci1cXHUwMDNlcGFtdF80a19zaXplID0gcGFtdF9zaXplW1REWF9QU180S107XFxuLVxcdHRkbXItXFx1MDAzZXBhbXRfMm1fYmFzZSA9IHBhbXRfYmFzZVtURFhfUFNfMk1dO1xcbi1cXHR0ZG1yLVxcdTAwM2VwYW10XzJtX3NpemUgPSBwYW10X3NpemVbVERYX1BTXzJNXTtcXG4tXFx0dGRtci1cXHUwMDNlcGFtdF8xZ19iYXNlID0gcGFtdF9iYXNlW1REWF9QU18xR107XFxuLVxcdHRkbXItXFx1MDAzZXBhbXRfMWdfc2l6ZSA9IHBhbXRfc2l6ZVtURFhfUFNfMUddO1xcbitcXHR0ZG1yLVxcdTAwM2VwYW10XzRrX2Jhc2UgPSBwYWdlX3RvX3BoeXMocGFtdCk7XFxuK1xcdHRkbXItXFx1MDAzZXBhbXRfMm1fYmFzZSA9IHRkbXItXFx1MDAzZXBhbXRfNGtfYmFzZSArIHRkbXItXFx1MDAzZXBhbXRfNGtfc2l6ZTtcXG4rXFx0dGRtci1cXHUwMDNlcGFtdF8xZ19iYXNlID0gdGRtci1cXHUwMDNlcGFtdF8ybV9iYXNlICsgdGRtci1cXHUwMDNlcGFtdF8ybV9zaXplO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG5AQCAtNjU1LDEwICs2OTcsNyBAQCBzdGF0aWMgX19pbml0IHZvaWQgdGRtcl9kb19wYW10X2Z1bmMoc3RydWN0IHRkbXJfaW5mbyAqdGRtcixcXG4gXFx0dGRtcl9nZXRfcGFtdCh0ZG1yLCBcXHUwMDI2cGFtdF9iYXNlLCBcXHUwMDI2cGFtdF9zaXplKTtcXG4gXFxuIFxcdC8qIERvIG5vdGhpbmcgaWYgUEFNVCBoYXNuJ3QgYmVlbiBhbGxvY2F0ZWQgZm9yIHRoaXMgVERNUiAqL1xcbi1cXHRpZiAoIXBhbXRfc2l6ZSlcXG4tXFx0XFx0cmV0dXJuO1xcbi1cXG4tXFx0aWYgKFdBUk5fT05fT05DRSghcGFtdF9iYXNlKSlcXG4rXFx0aWYgKCFwYW10X2Jhc2UpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuIFxcdHBhbXRfZnVuYyhwYW10X2Jhc2UsIHBhbXRfc2l6ZSk7XFxuQEAgLTY4NCwxNCArNzIzLDEyIEBAIHN0YXRpYyBfX2luaXQgdm9pZCB0ZG1yc19mcmVlX3BhbXRfYWxsKHN0cnVjdCB0ZG1yX2luZm9fbGlzdCAqdGRtcl9saXN0KVxcbiBcXG4gLyogQWxsb2NhdGUgYW5kIHNldCB1cCBQQU1UcyBmb3IgYWxsIFRETVJzICovXFxuIHN0YXRpYyBfX2luaXQgaW50IHRkbXJzX3NldF91cF9wYW10X2FsbChzdHJ1Y3QgdGRtcl9pbmZvX2xpc3QgKnRkbXJfbGlzdCxcXG4tXFx0XFx0XFx0XFx0XFx0c3RydWN0IGxpc3RfaGVhZCAqdG1iX2xpc3QsXFxuLVxcdFxcdFxcdFxcdFxcdHUxNiBwYW10X2VudHJ5X3NpemVbXSlcXG4rXFx0XFx0XFx0XFx0IHN0cnVjdCBsaXN0X2hlYWQgKnRtYl9saXN0KVxcbiB7XFxuIFxcdGludCBpLCByZXQgPSAwO1xcbiBcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHRkbXJfbGlzdC1cXHUwMDNlbnJfY29uc3VtZWRfdGRtcnM7IGkrKykge1xcbi1cXHRcXHRyZXQgPSB0ZG1yX3NldF91cF9wYW10KHRkbXJfZW50cnkodGRtcl9saXN0LCBpKSwgdG1iX2xpc3QsXFxuLVxcdFxcdFxcdFxcdHBhbXRfZW50cnlfc2l6ZSk7XFxuK1xcdFxcdHJldCA9IHRkbXJfc2V0X3VwX3BhbXQodGRtcl9lbnRyeSh0ZG1yX2xpc3QsIGkpLCB0bWJfbGlzdCk7XFxuIFxcdFxcdGlmIChyZXQpXFxuIFxcdFxcdFxcdGdvdG8gZXJyO1xcbiBcXHR9XFxuQEAgLTk2OCwxOCArMTAwNSwxMyBAQCBzdGF0aWMgX19pbml0IGludCBjb25zdHJ1Y3RfdGRtcnMoc3RydWN0IGxpc3RfaGVhZCAqdG1iX2xpc3QsXFxuIFxcdFxcdFxcdFxcdCAgc3RydWN0IHRkbXJfaW5mb19saXN0ICp0ZG1yX2xpc3QsXFxuIFxcdFxcdFxcdFxcdCAgc3RydWN0IHRkeF9zeXNfaW5mb190ZG1yICpzeXNpbmZvX3RkbXIpXFxuIHtcXG4tXFx0dTE2IHBhbXRfZW50cnlfc2l6ZVtURFhfUFNfTlJdID0ge1xcbi1cXHRcXHRzeXNpbmZvX3RkbXItXFx1MDAzZXBhbXRfNGtfZW50cnlfc2l6ZSxcXG4tXFx0XFx0c3lzaW5mb190ZG1yLVxcdTAwM2VwYW10XzJtX2VudHJ5X3NpemUsXFxuLVxcdFxcdHN5c2luZm9fdGRtci1cXHUwMDNlcGFtdF8xZ19lbnRyeV9zaXplLFxcbi1cXHR9O1xcbiBcXHRpbnQgcmV0O1xcbiBcXG4gXFx0cmV0ID0gZmlsbF9vdXRfdGRtcnModG1iX2xpc3QsIHRkbXJfbGlzdCk7XFxuIFxcdGlmIChyZXQpXFxuIFxcdFxcdHJldHVybiByZXQ7XFxuIFxcbi1cXHRyZXQgPSB0ZG1yc19zZXRfdXBfcGFtdF9hbGwodGRtcl9saXN0LCB0bWJfbGlzdCwgcGFtdF9lbnRyeV9zaXplKTtcXG4rXFx0cmV0ID0gdGRtcnNfc2V0X3VwX3BhbXRfYWxsKHRkbXJfbGlzdCwgdG1iX2xpc3QpO1xcbiBcXHRpZiAocmV0KVxcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXG5AQCAtOTk4LDYgKzEwMzAsOCBAQCBzdGF0aWMgX19pbml0IGludCBjb25zdHJ1Y3RfdGRtcnMoc3RydWN0IGxpc3RfaGVhZCAqdG1iX2xpc3QsXFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuKyNkZWZpbmUgVERYX1NZU19DT05GSUdfRFlOQU1JQ19QQU1UXFx0QklUKDE2KVxcbitcXG4gc3RhdGljIF9faW5pdCBpbnQgY29uZmlnX3RkeF9tb2R1bGUoc3RydWN0IHRkbXJfaW5mb19saXN0ICp0ZG1yX2xpc3QsXFxuIFxcdFxcdFxcdFxcdCAgICB1NjQgZ2xvYmFsX2tleWlkKVxcbiB7XFxuQEAgLTEwMjYsNiArMTA2MCwxMiBAQCBzdGF0aWMgX19pbml0IGludCBjb25maWdfdGR4X21vZHVsZShzdHJ1Y3QgdGRtcl9pbmZvX2xpc3QgKnRkbXJfbGlzdCxcXG4gXFx0YXJncy5yY3ggPSBfX3BhKHRkbXJfcGFfYXJyYXkpO1xcbiBcXHRhcmdzLnJkeCA9IHRkbXJfbGlzdC1cXHUwMDNlbnJfY29uc3VtZWRfdGRtcnM7XFxuIFxcdGFyZ3MucjggPSBnbG9iYWxfa2V5aWQ7XFxuK1xcbitcXHRpZiAodGR4X3N1cHBvcnRzX2R5bmFtaWNfcGFtdChcXHUwMDI2dGR4X3N5c2luZm8pKSB7XFxuK1xcdFxcdHByX2luZm8oXFxcIkVuYWJsZSBEeW5hbWljIFBBTVRcXFxcblxcXCIpO1xcbitcXHRcXHRhcmdzLnI4IHw9IFREWF9TWVNfQ09ORklHX0RZTkFNSUNfUEFNVDtcXG4rXFx0fVxcbitcXG4gXFx0cmV0ID0gc2VhbWNhbGxfcHJlcnIoVERIX1NZU19DT05GSUcsIFxcdTAwMjZhcmdzKTtcXG4gXFxuIFxcdC8qIEZyZWUgdGhlIGFycmF5IGFzIGl0IGlzIG5vdCByZXF1aXJlZCBhbnltb3JlLiAqL1xcbkBAIC0xMTY3LDEwICsxMjA3LDE0IEBAIHN0YXRpYyBfX2luaXQgaW50IGluaXRfdGR4X21vZHVsZSh2b2lkKVxcbiBcXHQgKi9cXG4gXFx0Z2V0X29ubGluZV9tZW1zKCk7XFxuIFxcbi1cXHRyZXQgPSBidWlsZF90ZHhfbWVtbGlzdChcXHUwMDI2dGR4X21lbWxpc3QpO1xcbitcXHRyZXQgPSBpbml0X3BhbXRfcmVmY291bnRzKCk7XFxuIFxcdGlmIChyZXQpXFxuIFxcdFxcdGdvdG8gb3V0X3B1dF90ZHhtZW07XFxuIFxcbitcXHRyZXQgPSBidWlsZF90ZHhfbWVtbGlzdChcXHUwMDI2dGR4X21lbWxpc3QpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIGVycl9mcmVlX3BhbXRfcmVmY291bnRzO1xcbitcXG4gXFx0LyogQWxsb2NhdGUgZW5vdWdoIHNwYWNlIGZvciBjb25zdHJ1Y3RpbmcgVERNUnMgKi9cXG4gXFx0cmV0ID0gYWxsb2NfdGRtcl9saXN0KFxcdTAwMjZ0ZHhfdGRtcl9saXN0LCBcXHUwMDI2dGR4X3N5c2luZm8udGRtcik7XFxuIFxcdGlmIChyZXQpXFxuQEAgLTEyMjAsNiArMTI2NCw4IEBAIHN0YXRpYyBfX2luaXQgaW50IGluaXRfdGR4X21vZHVsZSh2b2lkKVxcbiBcXHRmcmVlX3RkbXJfbGlzdChcXHUwMDI2dGR4X3RkbXJfbGlzdCk7XFxuIGVycl9mcmVlX3RkeG1lbTpcXG4gXFx0ZnJlZV90ZHhfbWVtbGlzdChcXHUwMDI2dGR4X21lbWxpc3QpO1xcbitlcnJfZnJlZV9wYW10X3JlZmNvdW50czpcXG4rXFx0ZnJlZV9wYW10X3JlZmNvdW50cygpO1xcbiBcXHRnb3RvIG91dF9wdXRfdGR4bWVtO1xcbiB9XFxuIFxcbkBAIC0yMDAzLDYgKzIwNDksMjg4IEBAIHU2NCB0ZGhfcGh5bWVtX3BhZ2Vfd2JpbnZkX2hraWQodTY0IGhraWQsIGt2bV9wZm5fdCBwZm4pXFxuIH1cXG4gRVhQT1JUX1NZTUJPTF9GT1JfS1ZNKHRkaF9waHltZW1fcGFnZV93YmludmRfaGtpZCk7XFxuIFxcbitib29sIHRkeF9zdXBwb3J0c19keW5hbWljX3BhbXQoY29uc3Qgc3RydWN0IHRkeF9zeXNfaW5mbyAqc3lzaW5mbylcXG4re1xcbitcXHRyZXR1cm4gc3lzaW5mby1cXHUwMDNlZmVhdHVyZXMudGR4X2ZlYXR1cmVzMCBcXHUwMDI2IFREWF9GRUFUVVJFUzBfRFlOQU1JQ19QQU1UIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAgICB0ZHhfZW5hYmxlX2RwYW10O1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfRk9SX0tWTSh0ZHhfc3VwcG9ydHNfZHluYW1pY19wYW10KTtcXG4rXFxuK3N0YXRpYyBzdHJ1Y3QgcGFnZSAqdGR4X2FsbG9jX3BhZ2VfcGFtdF9jYWNoZShzdHJ1Y3QgdGR4X3BhbXRfY2FjaGUgKmNhY2hlKVxcbit7XFxuK1xcdHN0cnVjdCBwYWdlICpwYWdlO1xcbitcXG4rXFx0cGFnZSA9IGxpc3RfZmlyc3RfZW50cnlfb3JfbnVsbChcXHUwMDI2Y2FjaGUtXFx1MDAzZXBhZ2VfbGlzdCwgc3RydWN0IHBhZ2UsIGxydSk7XFxuK1xcdGlmIChwYWdlKSB7XFxuK1xcdFxcdGxpc3RfZGVsKFxcdTAwMjZwYWdlLVxcdTAwM2VscnUpO1xcbitcXHRcXHRjYWNoZS1cXHUwMDNlY250LS07XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiBwYWdlO1xcbit9XFxuK1xcbitzdGF0aWMgc3RydWN0IHBhZ2UgKmFsbG9jX2RwYW10X3BhZ2Uoc3RydWN0IHRkeF9wYW10X2NhY2hlICpjYWNoZSlcXG4re1xcbitcXHRpZiAoY2FjaGUpXFxuK1xcdFxcdHJldHVybiB0ZHhfYWxsb2NfcGFnZV9wYW10X2NhY2hlKGNhY2hlKTtcXG4rXFxuK1xcdHJldHVybiBhbGxvY19wYWdlKEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYWxsb2NfcGFtdF9hcnJheShzdHJ1Y3QgcGFnZSAqKnBhbXRfcGFnZXMsIHN0cnVjdCB0ZHhfcGFtdF9jYWNoZSAqY2FjaGUpXFxuK3tcXG4rXFx0aW50IGksIGo7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgVERYX0RQQU1UX0VOVFJZX1BBR0VfQ05UOyBpKyspIHtcXG4rXFx0XFx0cGFtdF9wYWdlc1tpXSA9IGFsbG9jX2RwYW10X3BhZ2UoY2FjaGUpO1xcbitcXHRcXHRpZiAoIXBhbXRfcGFnZXNbaV0pXFxuK1xcdFxcdFxcdGdvdG8gZXJyO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rXFxuK2VycjpcXG4rXFx0Zm9yIChqID0gMDsgaiBcXHUwMDNjIGk7IGorKylcXG4rXFx0XFx0X19mcmVlX3BhZ2UocGFtdF9wYWdlc1tqXSk7XFxuK1xcbitcXHRyZXR1cm4gLUVOT01FTTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgZnJlZV9wYW10X2FycmF5KHN0cnVjdCBwYWdlICoqcGFtdF9wYWdlcylcXG4re1xcbitcXHRmb3IgKGludCBpID0gMDsgaSBcXHUwMDNjIFREWF9EUEFNVF9FTlRSWV9QQUdFX0NOVDsgaSsrKSB7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIFJlc2V0IHBhZ2VzIHVuY29uZGl0aW9uYWxseSB0byBjb3ZlciBjYXNlc1xcbitcXHRcXHQgKiB3aGVyZSB0aGV5IHdlcmUgcGFzc2VkIHRvIHRoZSBURFggbW9kdWxlLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0dGR4X3F1aXJrX3Jlc2V0X3BhZGRyKHBhZ2VfdG9fcGh5cyhwYW10X3BhZ2VzW2ldKSwgUEFHRV9TSVpFKTtcXG4rXFxuK1xcdFxcdF9fZnJlZV9wYWdlKHBhbXRfcGFnZXNbaV0pO1xcbitcXHR9XFxuK31cXG4rXFxuKy8qXFxuKyAqIENhbGN1bGF0ZSB0aGUgYXJnIG5lZWRlZCBmb3Igb3BlcmF0aW5nIG9uIHRoZSBEUEFNVCBiYWNraW5nIGZvclxcbisgKiBhIGdpdmVuIDRLQiBwYWdlLlxcbisgKi9cXG4rc3RhdGljIHU2NCBwYW10XzJtYl9hcmcoa3ZtX3Bmbl90IHBmbilcXG4re1xcbitcXHQvKiBBcmcgdmFsdWUgd2lsbCBzcGVjaWZ5IGEgMk1CIHJlZ2lvbiBvZiBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlLiAqL1xcbitcXHR1bnNpZ25lZCBsb25nIGhwYV8ybWIgPSBBTElHTl9ET1dOKHBmbiBcXHUwMDNjXFx1MDAzYyBQQUdFX1NISUZULCBQTURfU0laRSk7XFxuK1xcbitcXHRyZXR1cm4gaHBhXzJtYiB8IFREWF9QU18yTTtcXG4rfVxcbitcXG4rLyogQWRkIFBBTVQgYmFja2luZyBmb3IgdGhlIDJNQiByZWdpb24gc3Vycm91bmRpbmcgdGhlIGdpdmVuIHBmbi4gKi9cXG4rc3RhdGljIHU2NCB0ZGhfcGh5bWVtX3BhbXRfYWRkKGt2bV9wZm5fdCBwZm4sIHN0cnVjdCBwYWdlICoqcGFtdF9wYWdlcylcXG4re1xcbitcXHRzdHJ1Y3QgdGR4X21vZHVsZV9hcmdzIGFyZ3MgPSB7XFxuK1xcdFxcdC5yY3ggPSBwYW10XzJtYl9hcmcocGZuKSxcXG4rXFx0XFx0LnJkeCA9IHBhZ2VfdG9fcGh5cyhwYW10X3BhZ2VzWzBdKSxcXG4rXFx0XFx0LnI4ID0gcGFnZV90b19waHlzKHBhbXRfcGFnZXNbMV0pLFxcbitcXHR9O1xcbitcXG4rXFx0cmV0dXJuIHNlYW1jYWxsKFRESF9QSFlNRU1fUEFNVF9BREQsIFxcdTAwMjZhcmdzKTtcXG4rfVxcbitcXG4rLyogUmVtb3ZlIFBBTVQgYmFja2luZyBmb3IgdGhlIDJNQiByZWdpb24gc3Vycm91bmRpbmcgdGhlIGdpdmVuIHBmbi4gKi9cXG4rc3RhdGljIHU2NCB0ZGhfcGh5bWVtX3BhbXRfcmVtb3ZlKGt2bV9wZm5fdCBwZm4sIHN0cnVjdCBwYWdlICoqcGFtdF9wYWdlcylcXG4re1xcbitcXHRzdHJ1Y3QgdGR4X21vZHVsZV9hcmdzIGFyZ3MgPSB7XFxuK1xcdFxcdC5yY3ggPSBwYW10XzJtYl9hcmcocGZuKSxcXG4rXFx0fTtcXG4rXFx0dTY0IHJldDtcXG4rXFxuK1xcdHJldCA9IHNlYW1jYWxsX3JldChUREhfUEhZTUVNX1BBTVRfUkVNT1ZFLCBcXHUwMDI2YXJncyk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHQvKiBDb3B5IFBBTVQgcGFnZXMgb3V0IG9mIHRoZSBzdHJ1Y3QgcGVyIHRoZSBURFggQUJJICovXFxuK1xcdHBhbXRfcGFnZXNbMF0gPSBwaHlzX3RvX3BhZ2UoYXJncy5yZHgpO1xcbitcXHRwYW10X3BhZ2VzWzFdID0gcGh5c190b19wYWdlKGFyZ3MucjgpO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuKy8qIFNlcmlhbGl6ZXMgYWRkaW5nL3JlbW92aW5nIFBBTVQgbWVtb3J5ICovXFxuK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0socGFtdF9sb2NrKTtcXG4rXFxuKy8qIEJ1bXAgUEFNVCByZWZjb3VudCBmb3IgdGhlIGdpdmVuIHBmbiBhbmQgYWxsb2NhdGUgUEFNVCBiYWNraW5nIGlmIG5lZWRlZC4gKi9cXG4raW50IHRkeF9wYW10X2dldChrdm1fcGZuX3QgcGZuLCBzdHJ1Y3QgdGR4X3BhbXRfY2FjaGUgKmNhY2hlKVxcbit7XFxuK1xcdHN0cnVjdCBwYWdlICpwYW10X3BhZ2VzW1REWF9EUEFNVF9FTlRSWV9QQUdFX0NOVF07XFxuK1xcdGF0b21pY190ICpwYW10X3JlZmNvdW50O1xcbitcXHR1NjQgdGR4X3N0YXR1cztcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGlmICghdGR4X3N1cHBvcnRzX2R5bmFtaWNfcGFtdChcXHUwMDI2dGR4X3N5c2luZm8pKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdHBhbXRfcmVmY291bnQgPSB0ZHhfZmluZF9wYW10X3JlZmNvdW50KHBmbik7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBJZiB0aGUgcGFtdCBwYWdlIGlzIGFscmVhZHkgYWRkZWQgKGkuZS4gcmVmY291bnQgXFx1MDAzZT0gMSksXFxuK1xcdCAqIHRoZW4ganVzdCBpbmNyZW1lbnQgdGhlIHJlZmNvdW50LlxcbitcXHQgKi9cXG4rXFx0aWYgKGF0b21pY19pbmNfbm90X3plcm8ocGFtdF9yZWZjb3VudCkpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0cmV0ID0gYWxsb2NfcGFtdF9hcnJheShwYW10X3BhZ2VzLCBjYWNoZSk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRzcGluX2xvY2soXFx1MDAyNnBhbXRfbG9jayk7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBVbmxpa2UgdGR4X3BhbXRfcHV0KCkgd2hpY2ggdXNlcyBhdG9taWNfZGVjX2FuZF9sb2NrKCkgdG9cXG4rXFx0ICogYXRvbWljYWxseSBoYW5kbGUgdGhlIDEtXFx1MDAzZTAgdHJhbnNpdGlvbiwgdGhlIGdldCBzaWRlIGhhcyBub1xcbitcXHQgKiBlcXVpdmFsZW50IGNvbWJpbmVkIHByaW1pdGl2ZSBmb3IgMC1cXHUwMDNlMS4gUmVjaGVjayB1bmRlciB0aGVcXG4rXFx0ICogbG9jayBzaW5jZSBhbm90aGVyIGdldCBtYXkgaGF2ZSBhbHJlYWR5IGRvbmUgdGhlIDAtXFx1MDAzZTFcXG4rXFx0ICogdHJhbnNpdGlvbiBhZnRlciBib3RoIHNhdyBhdG9taWNfaW5jX25vdF96ZXJvKCkgZmFpbC5cXG4rXFx0ICovXFxuK1xcdGlmIChhdG9taWNfaW5jX25vdF96ZXJvKHBhbXRfcmVmY291bnQpKVxcbitcXHRcXHRnb3RvIG91dF9mcmVlO1xcbitcXG4rXFx0dGR4X3N0YXR1cyA9IHRkaF9waHltZW1fcGFtdF9hZGQocGZuLCBwYW10X3BhZ2VzKTtcXG4rXFx0aWYgKFdBUk5fT05fT05DRSh0ZHhfc3RhdHVzICE9IFREWF9TVUNDRVNTKSkge1xcbitcXHRcXHRyZXQgPSAtRUlPO1xcbitcXHRcXHRnb3RvIG91dF9mcmVlO1xcbitcXHR9XFxuK1xcbitcXHQvKlxcbitcXHQgKiBUaGUgcmVmY291bnQgaXMgemVybywgYW5kIHRoaXMgbG9ja2VkIHBhdGggaXMgdGhlXFxuK1xcdCAqIG9ubHkgd2F5IHRvIGluY3JlYXNlIGl0IGZyb20gMC1cXHUwMDNlMS5cXG4rXFx0ICovXFxuK1xcdGF0b21pY19zZXQocGFtdF9yZWZjb3VudCwgMSk7XFxuK1xcdHNwaW5fdW5sb2NrKFxcdTAwMjZwYW10X2xvY2spO1xcbitcXHRyZXR1cm4gMDtcXG4rXFxuK291dF9mcmVlOlxcbitcXHRzcGluX3VubG9jayhcXHUwMDI2cGFtdF9sb2NrKTtcXG4rXFx0ZnJlZV9wYW10X2FycmF5KHBhbXRfcGFnZXMpO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitFWFBPUlRfU1lNQk9MX0ZPUl9LVk0odGR4X3BhbXRfZ2V0KTtcXG4rXFxuKy8qIERyb3AgUEFNVCByZWZjb3VudCBmb3IgdGhlIGdpdmVuIHBmbiBhbmQgZnJlZSBQQU1UIGJhY2tpbmcgaWYgbmVlZGVkLiAqL1xcbit2b2lkIHRkeF9wYW10X3B1dChrdm1fcGZuX3QgcGZuKVxcbit7XFxuK1xcdHN0cnVjdCBwYWdlICpwYW10X3BhZ2VzW1REWF9EUEFNVF9FTlRSWV9QQUdFX0NOVF0gPSB7fTtcXG4rXFx0YXRvbWljX3QgKnBhbXRfcmVmY291bnQ7XFxuK1xcdHU2NCB0ZHhfc3RhdHVzO1xcbitcXG4rXFx0aWYgKCF0ZHhfc3VwcG9ydHNfZHluYW1pY19wYW10KFxcdTAwMjZ0ZHhfc3lzaW5mbykpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdHBhbXRfcmVmY291bnQgPSB0ZHhfZmluZF9wYW10X3JlZmNvdW50KHBmbik7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBJZiB0aGVyZSBpcyBtb3JlIHRoYW4gMSByZWZlcmVuY2Ugb24gdGhlIHBhbXQgcGFnZSwgZG9uJ3RcXG4rXFx0ICogcmVtb3ZlIGl0IHlldC4gSnVzdCBkZWNyZW1lbnQgdGhlIHJlZmNvdW50LlxcbitcXHQgKi9cXG4rXFx0aWYgKCFhdG9taWNfZGVjX2FuZF9sb2NrKHBhbXRfcmVmY291bnQsIFxcdTAwMjZwYW10X2xvY2spKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHR0ZHhfc3RhdHVzID0gdGRoX3BoeW1lbV9wYW10X3JlbW92ZShwZm4sIHBhbXRfcGFnZXMpO1xcbitcXG4rXFx0LypcXG4rXFx0ICogRG9uJ3QgZnJlZSBwYW10X3BhZ2VzIGFzIGl0IGNvdWxkIGhvbGQgZ2FyYmFnZSB3aGVuXFxuK1xcdCAqIHRkaF9waHltZW1fcGFtdF9yZW1vdmUoKSBmYWlscy4gIERvbid0IHBhbmljL0JVR19PTigpLCBhc1xcbitcXHQgKiB0aGVyZSBpcyBubyByaXNrIG9mIGRhdGEgY29ycnVwdGlvbiwgYnV0IGRvIHllbGwgbG91ZGx5IGFzXFxuK1xcdCAqIGZhaWx1cmUgaW5kaWNhdGVzIGEga2VybmVsIGJ1ZywgbWVtb3J5IGlzIGJlaW5nIGxlYWtlZCwgYW5kXFxuK1xcdCAqIHRoZSBkYW5nbGluZyBQQU1UIGVudHJ5IG1heSBjYXVzZSBmdXR1cmUgb3BlcmF0aW9ucyB0byBmYWlsLlxcbitcXHQgKi9cXG4rXFx0aWYgKFdBUk5fT05fT05DRSh0ZHhfc3RhdHVzICE9IFREWF9TVUNDRVNTKSkge1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBhdG9taWNfZGVjX2FuZF9sb2NrKCkgYWxyZWFkeSBkZWNyZW1lbnRlZCBpdCB0byAwLFxcbitcXHRcXHQgKiBidXQgdGhlIFBBTVQgZW50cnkgc3RpbGwgZXhpc3RzIHNpbmNlIFJFTU9WRSBmYWlsZWQuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRhdG9taWNfc2V0KHBhbXRfcmVmY291bnQsIDEpO1xcbitcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuK1xcdH1cXG4rXFxuK1xcdHNwaW5fdW5sb2NrKFxcdTAwMjZwYW10X2xvY2spO1xcbitcXHRmcmVlX3BhbXRfYXJyYXkocGFtdF9wYWdlcyk7XFxuK1xcdHJldHVybjtcXG4rb3V0X3VubG9jazpcXG4rXFx0c3Bpbl91bmxvY2soXFx1MDAyNnBhbXRfbG9jayk7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9GT1JfS1ZNKHRkeF9wYW10X3B1dCk7XFxuK1xcbit2b2lkIHRkeF9mcmVlX3BhbXRfY2FjaGUoc3RydWN0IHRkeF9wYW10X2NhY2hlICpjYWNoZSlcXG4re1xcbitcXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcXG4rXFxuK1xcdHdoaWxlICgocGFnZSA9IHRkeF9hbGxvY19wYWdlX3BhbXRfY2FjaGUoY2FjaGUpKSlcXG4rXFx0XFx0X19mcmVlX3BhZ2UocGFnZSk7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9GT1JfS1ZNKHRkeF9mcmVlX3BhbXRfY2FjaGUpO1xcbitcXG4raW50IHRkeF90b3B1cF9wYW10X2NhY2hlKHN0cnVjdCB0ZHhfcGFtdF9jYWNoZSAqY2FjaGUsIHVuc2lnbmVkIGxvbmcgbnBhZ2VzKVxcbit7XFxuK1xcdGlmIChXQVJOX09OX09OQ0UoIXRkeF9zdXBwb3J0c19keW5hbWljX3BhbXQoXFx1MDAyNnRkeF9zeXNpbmZvKSkpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0bnBhZ2VzICo9IFREWF9EUEFNVF9FTlRSWV9QQUdFX0NOVDtcXG4rXFxuK1xcdHdoaWxlIChjYWNoZS1cXHUwMDNlY250IFxcdTAwM2MgbnBhZ2VzKSB7XFxuK1xcdFxcdHN0cnVjdCBwYWdlICpwYWdlID0gYWxsb2NfcGFnZShHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbitcXG4rXFx0XFx0aWYgKCFwYWdlKVxcbitcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFxuK1xcdFxcdGxpc3RfYWRkKFxcdTAwMjZwYWdlLVxcdTAwM2VscnUsIFxcdTAwMjZjYWNoZS1cXHUwMDNlcGFnZV9saXN0KTtcXG4rXFx0XFx0Y2FjaGUtXFx1MDAzZWNudCsrO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitFWFBPUlRfU1lNQk9MX0ZPUl9LVk0odGR4X3RvcHVwX3BhbXRfY2FjaGUpO1xcbitcXG4rLypcXG4rICogUmV0dXJuIGEgcGFnZSB0aGF0IGNhbiBiZSBnaWZ0ZWQgdG8gdGhlIFREWC1Nb2R1bGUgZm9yIHVzZSBhcyBhIFxcXCJjb250cm9sXFxcIlxcbisgKiBwYWdlLCBpLmUuIHBhZ2VzIHRoYXQgYXJlIHVzZWQgZm9yIGNvbnRyb2wgc3RydWN0dXJlcyBmb3IgYSBnaXZlbiBURFhcXG4rICogZ3Vlc3QsIGFuZCB0aHVzIG9idGFpbiBURFggcHJvdGVjdGlvbnMsIGluY2x1ZGluZyBQQU1UIHRyYWNraW5nLlxcbisgKi9cXG4rc3RydWN0IHBhZ2UgKnRkeF9hbGxvY19jb250cm9sX3BhZ2Uodm9pZClcXG4re1xcbitcXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcXG4rXFxuK1xcdHBhZ2UgPSBhbGxvY19wYWdlKEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuK1xcdGlmICghcGFnZSlcXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcbitcXHRpZiAodGR4X3BhbXRfZ2V0KHBhZ2VfdG9fcGZuKHBhZ2UpLCBOVUxMKSkge1xcbitcXHRcXHRfX2ZyZWVfcGFnZShwYWdlKTtcXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiBwYWdlO1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfRk9SX0tWTSh0ZHhfYWxsb2NfY29udHJvbF9wYWdlKTtcXG4rXFxuKy8qXFxuKyAqIEZyZWUgYSBwYWdlIHRoYXQgd2FzIGdpZnRlZCB0byB0aGUgVERYLU1vZHVsZSBmb3IgdXNlIGFzIGEgY29udHJvbFxcbisgKiBwYWdlLiBBZnRlciB0aGlzLCB0aGUgcGFnZSBpcyBubyBsb25nZXIgcHJvdGVjdGVkIGJ5IFREWC5cXG4rICovXFxuK3ZvaWQgdGR4X2ZyZWVfY29udHJvbF9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKVxcbit7XFxuK1xcdGlmICghcGFnZSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0dGR4X3BhbXRfcHV0KHBhZ2VfdG9fcGZuKHBhZ2UpKTtcXG4rXFx0X19mcmVlX3BhZ2UocGFnZSk7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9GT1JfS1ZNKHRkeF9mcmVlX2NvbnRyb2xfcGFnZSk7XFxuK1xcbitzdGF0aWMgaW50IF9faW5pdCB0ZHhfZHBhbXRfc2V0dXAoY2hhciAqc3RyKVxcbit7XFxuK1xcdHJldHVybiBrc3RydG9ib29sKHN0ciwgXFx1MDAyNnRkeF9lbmFibGVfZHBhbXQpID09IDA7XFxuK31cXG4rXFxuK19fc2V0dXAoXFxcInRkeF9kcGFtdD1cXFwiLCB0ZHhfZHBhbXRfc2V0dXApO1xcbitcXG4gdm9pZCB0ZHhfc3lzX2Rpc2FibGUodm9pZClcXG4ge1xcbiBcXHRzdHJ1Y3QgdGR4X21vZHVsZV9hcmdzIGFyZ3MgPSB7fTtcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5oIGIvYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5oXFxuaW5kZXggYmRmZDBlMWUzMzdhYzAuLmE4ODZjNTRkZWNhYWRjIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguaFxcbisrKyBiL2FyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguaFxcbkBAIC00OCw2ICs0OCw4IEBAXFxuICNkZWZpbmUgVERIX1NZU19DT05GSUdcXHRcXHRcXHQ0NVxcbiAjZGVmaW5lIFRESF9TWVNfU0hVVERPV05cXHRcXHQ1MlxcbiAjZGVmaW5lIFRESF9TWVNfVVBEQVRFXFx0XFx0XFx0NTNcXG4rI2RlZmluZSBUREhfUEhZTUVNX1BBTVRfQUREXFx0XFx0NThcXG4rI2RlZmluZSBUREhfUEhZTUVNX1BBTVRfUkVNT1ZFXFx0XFx0NTlcXG4gI2RlZmluZSBUREhfU1lTX0RJU0FCTEVcXHRcXHRcXHQ2OVxcbiBcXG4gLypcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeF9nbG9iYWxfbWV0YWRhdGEuYyBiL2FyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHhfZ2xvYmFsX21ldGFkYXRhLmNcXG5pbmRleCBlNDljMzAwZjIzZDQzNS4uODM5M2QyYWE1OWRiZTcgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeF9nbG9iYWxfbWV0YWRhdGEuY1xcbisrKyBiL2FyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHhfZ2xvYmFsX21ldGFkYXRhLmNcXG5AQCAtMSw2ICsxLDYgQEBcXG4gLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gLypcXG4tICogQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnVuY3Rpb25zIHRvIHJlYWQgVERYIGdsb2JhbCBtZXRhZGF0YS5cXG4rICogRnVuY3Rpb25zIHRvIHJlYWQgVERYIGdsb2JhbCBtZXRhZGF0YS5cXG4gICpcXG4gICogVGhpcyBmaWxlIGRvZXNuJ3QgY29tcGlsZSBvbiBpdHMgb3duIGFzIGl0IGxhY2tzIG9mIGluY2x1c2lvblxcbiAgKiBvZiBTRUFNQ0FMTCB3cmFwcGVyIHByaW1pdGl2ZSB3aGljaCByZWFkcyBnbG9iYWwgbWV0YWRhdGEuXFxuQEAgLTMzLDYgKzMzLDE4IEBAIHN0YXRpYyBfX2luaXQgaW50IGdldF90ZHhfc3lzX2luZm9fZmVhdHVyZXMoc3RydWN0IHRkeF9zeXNfaW5mb19mZWF0dXJlcyAqc3lzaW5mXFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuK3N0YXRpYyBfX2luaXQgaW50IGdldF90ZHhfc3lzX2luZm9fdGRtcl9kcGFtdChzdHJ1Y3QgdGR4X3N5c19pbmZvX3RkbXIgKnN5c2luZm9fdGRtcilcXG4re1xcbitcXHRpbnQgcmV0O1xcbitcXHR1NjQgdmFsO1xcbitcXG4rXFx0cmV0ID0gcmVhZF9zeXNfbWV0YWRhdGFfZmllbGQoMHg5MTAwMDAwMTAwMDAwMDEzLCBcXHUwMDI2dmFsKTtcXG4rXFx0aWYgKCFyZXQpXFxuK1xcdFxcdHN5c2luZm9fdGRtci1cXHUwMDNlcGFtdF9wYWdlX2JpdG1hcF9lbnRyeV9iaXRzID0gdmFsO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4gc3RhdGljIF9faW5pdCBpbnQgZ2V0X3RkeF9zeXNfaW5mb190ZG1yKHN0cnVjdCB0ZHhfc3lzX2luZm9fdGRtciAqc3lzaW5mb190ZG1yKVxcbiB7XFxuIFxcdGludCByZXQgPSAwO1xcbkBAIC0xMjksNSArMTQxLDE0IEBAIHN0YXRpYyBfX2luaXQgaW50IGdldF90ZHhfc3lzX2luZm8oc3RydWN0IHRkeF9zeXNfaW5mbyAqc3lzaW5mbylcXG4gXFx0cmV0ID0gcmV0ID86IGdldF90ZHhfc3lzX2luZm9fdGRfY3RybChcXHUwMDI2c3lzaW5mby1cXHUwMDNldGRfY3RybCk7XFxuIFxcdHJldCA9IHJldCA/OiBnZXRfdGR4X3N5c19pbmZvX3RkX2NvbmYoXFx1MDAyNnN5c2luZm8tXFx1MDAzZXRkX2NvbmYpO1xcbiBcXG4rXFx0LypcXG4rXFx0ICogVGhlIGtlcm5lbCBzdXBwb3J0cyB1c2luZyBURFggd2l0aG91dCBEeW5hbWljIFBBTVQsIHNvXFxuK1xcdCAqIGF2b2lkIHJlcG9ydGluZyBmYWlsdXJlIGlmIGl0J3Mgbm90IHN1cHBvcnRlZC4gRG9uJ3QgdHJ5XFxuK1xcdCAqIHRvIHN1cHBvcnQgYnVnZ3kgVERYIG1vZHVsZXMgdGhhdCBhZHZlcnRpc2UgRHluYW1pYyBQQU1UXFxuK1xcdCAqIGJ1dCBkb24ndCBleHBvc2UgdGhlIG1ldGFkYXRhLlxcbitcXHQgKi9cXG4rXFx0aWYgKCFyZXQgXFx1MDAyNlxcdTAwMjYgdGR4X3N1cHBvcnRzX2R5bmFtaWNfcGFtdChzeXNpbmZvKSlcXG4rXFx0XFx0cmV0ID0gZ2V0X3RkeF9zeXNfaW5mb190ZG1yX2RwYW10KFxcdTAwMjZzeXNpbmZvLVxcdTAwM2V0ZG1yKTtcXG4rXFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTA6NTU6MjMuMDQxNzQwMTMzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6OTQ2ODE5NzIzMDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU5URUxfVERYX0hPU1RcIixcbiAgICBcIktWTV9JTlRFTF9URFhcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0ZHhfcGFtdF9nZXRcIixcbiAgICBcInRkeF9wYW10X3B1dFwiLFxuICAgIFwidGR4X3RvcHVwX3BhbXRfY2FjaGVcIixcbiAgICBcInRkeF9mcmVlX3BhbXRfY2FjaGVcIixcbiAgICBcInRkeF9hbGxvY19jb250cm9sX3BhZ2VcIixcbiAgICBcInRkeF9mcmVlX2NvbnRyb2xfcGFnZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgRHluYW1pYyBQaHlzaWNhbCBBZGRyZXNzIE1ldGFkYXRhIFRhYmxlIChQQU1UKSBzdXBwb3J0IGZvciBJbnRlbCBURFggaW4gS1ZNL3g4Ni4gSXQgYWRkcyBmdW5jdGlvbmFsIGNvcmUga2VybmVsIGxvZ2ljIHRvIGR5bmFtaWNhbGx5IGFsbG9jYXRlIGFuZCBmcmVlIFBBTVQgbWVtb3J5IHBhZ2VzIGZvciBURFggZ3Vlc3RzLCBtb2RpZnlpbmcgS1ZNIE1NVSBhbmQgVERYIGluaXRpYWxpemF0aW9uIHBhdGhzLiBUaGlzIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgcnVubmluZyBvbiBURFgtY2FwYWJsZSBoYXJkd2FyZSAoZS5nLiwgR0NQIEMzIGluc3RhbmNlcykgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG1lbW9yeSBtYW5hZ2VtZW50IGNvcnJlY3RuZXNzIGFuZCBwcmV2ZW50IGxlYWtzIG9yIGNyYXNoZXMgaW4gdGhlIFREWCBob3N0IHN1cHBvcnQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGNlZDI0MTAyYjEyNGM4OWE1NjYyN2U3YzlmMWEzYmE4YTdjZmYzOWFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEp1bCAyNiAxMDo1NToyMCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHRcbmluZGV4IGI1NDkzYTdmOGYyMjgxLi5hMGE3NjcwMjQ2YmM1OCAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0XG4rKysgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dFxuQEAgLTc1MTIsNiArNzUxMiwxNiBAQCBLZXJuZWwgcGFyYW1ldGVyc1xuIFxuIFx0dGRmeD1cdFx0W0hXLERSTV1cbiBcbitcdHRkeF9kcGFtdD1cbitcdFx0XHRbWDg2XSBDb250cm9scyB3aGV0aGVyIFREWCB3aWxsIHVzZSBEeW5hbWljIFBBTVRcbitcdFx0XHR0byBzYXZlIG1lbW9yeSwgd2hlbiBzdXBwb3J0ZWQuXG4rXG4rXHRcdFx0VmFsaWQgcGFyYW1ldGVyczogXCJvblwiLCBcIm9mZlwiXG4rXHRcdFx0RGVmYXVsdDogXCJvZmZcIlxuK1xuK1x0XHRcdEZvciBkZXRhaWxzIHNlZTpcbitcdFx0XHREb2N1bWVudGF0aW9uL2FyY2gveDg2L3RkeC5yc3RcbitcbiBcdHRlc3Rfc3VzcGVuZD1cdFtTVVNQRU5EXVxuIFx0XHRcdEZvcm1hdDogeyBcIm1lbVwiIHwgXCJzdGFuZGJ5XCIgfCBcImZyZWV6ZVwiIH1bLE5dXG4gXHRcdFx0U3BlY2lmeSBcIm1lbVwiIChmb3IgU3VzcGVuZC10by1SQU0pIG9yIFwic3RhbmRieVwiIChmb3JcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FyY2gveDg2L3RkeC5yc3QgYi9Eb2N1bWVudGF0aW9uL2FyY2gveDg2L3RkeC5yc3RcbmluZGV4IDMzMDM0OTlhZDRjNmY4Li5hMWMyMzA5MjMwNTgwNyAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vYXJjaC94ODYvdGR4LnJzdFxuKysrIGIvRG9jdW1lbnRhdGlvbi9hcmNoL3g4Ni90ZHgucnN0XG5AQCAtMjAwLDYgKzIwMCwzNCBAQCByZWZsZWN0cyB0aGUgVENCIG9mIHRoZSBjdXJyZW50bHkgcnVubmluZyBURFggbW9kdWxlIGFuZCB0aGVyZWZvcmVcbiBjaGFuZ2VzIGFmdGVyIGFuIHVwZGF0ZS4gQnkgY29udHJhc3QsIFRFRV9UQ0JfU1ZOIHJlZmxlY3RzIHRoZSBUQ0IgYXQgVERcbiBsYXVuY2ggdGltZSBhbmQgaXMgbm90IGFmZmVjdGVkLlxuIFxuK0R5bmFtaWMgUEFNVFxuKy0tLS0tLS0tLS0tLVxuK1xuK1BoeXNpY2FsIEFkZHJlc3MgTWV0YWRhdGEgVGFibGUgKFBBTVQpIGlzIG1lbW9yeSB0aGF0IHRoZSBURFggbW9kdWxlIG5lZWRzXG4rdG8ga2VlcCBkYXRhIGFib3V0IGVhY2ggcGFnZSAodGhpbmsgbGlrZSBzdHJ1Y3QgcGFnZSkuIEl0IG5lZWRzIHRvIGJlIGhhbmRlZFxuK3RvIHRoZSBURFggbW9kdWxlIGZvciBpdHMgZXhjbHVzaXZlIHVzZS4gRm9yIG5vcm1hbCBQQU1ULCB0aGlzIGlzIGluc3RhbGxlZFxuK3doZW4gdGhlIFREWCBtb2R1bGUgaXMgZmlyc3QgbG9hZGVkIGFuZCBjb21lcyB0byBhYm91dCAwLjQlIG9mIHN5c3RlbSBtZW1vcnkuXG4rXG4rRHluYW1pYyBQQU1UIGlzIGEgVERYIG1vZHVsZSBmZWF0dXJlIHRoYXQgYWxsb3dzIFZNTSB0byBhbGxvY2F0ZSBwYXJ0IG9mIHRoZVxuK1BBTVQgYXMgbmVlZGVkICh0aGUgcGFydHMgZm9yIHRyYWNraW5nIDRLQiBzaXplIHBhZ2VzKS4gVGhlIG90aGVyIHBhZ2Ugc2l6ZXNcbisoMUdCIGFuZCAyTUIpIGFyZSBzdGlsbCBhbGxvY2F0ZWQgc3RhdGljYWxseSBhdCB0aGUgdGltZSBvZiBURFggbW9kdWxlXG4raW5pdGlhbGl6YXRpb24uIFRoaXMgcmVkdWNlcyB0aGUgYW1vdW50IG9mIG1lbW9yeSB0aGF0IFREWCB1c2VzIHdoaWxlIFREcyBhcmVcbitub3QgaW4gdXNlLlxuK1xuK1doZW4gRHluYW1pYyBQQU1UIGlzIGluIHVzZSwgZG1lc2cgc2hvd3MgaXQgbGlrZTo6XG4rXG4rICBbLi5dIHZpcnQvdGR4OiBFbmFibGUgRHluYW1pYyBQQU1UXG4rICBbLi5dIHZpcnQvdGR4OiAxMDA5MiBLQiBhbGxvY2F0ZWQgZm9yIFBBTVRcbisgIFsuLl0gdmlydC90ZHg6IFREWC1Nb2R1bGUgaW5pdGlhbGl6ZWRcbitcbitEeW5hbWljIFBBTVQgaXMgb25seSBlbmFibGVkIHdoZW4gc3VwcG9ydGVkIGFuZCB0aGUgYGB0ZHhfZHBhbXQ9YGAga2VybmVsXG4rcGFyYW1ldGVyIGlzIHNldCB0byBcIm9uXCIuIFRoZSBmZWF0dXJlIGlzIG9mZiBieSBkZWZhdWx0IGJlY2F1c2UgVERYIG1vZHVsZVxuK2ludGVybmFsIGRldGFpbHMgcHJldmVudCBEeW5hbWljIFBBTVQgZnJvbSB3b3JraW5nIG9uIGFsbCBrZXlpZCBwYXJ0aXRpb25pbmdcbitjb25maWd1cmF0aW9ucy4gV2hlbiB0aGUgVERYIG1vZHVsZSBpcyBmaXhlZCB0byBpbmNsdWRlIHRoZXNlIGNvbnN0cmFpbnRzIGluXG4raXRzIGVudW1lcmF0aW9uIG9mIER5bmFtaWMgUEFNVCBzdXBwb3J0LCBrZXJuZWwgc3VwcG9ydCBjYW4gYmUgY2hhbmdlZCB0b1xuK2RlZmF1bHQgb24uIEZvciBtb3JlIGluZm9ybWF0aW9uLCBjb25zdWx0IHRoZSBJbnRlbCBURFggZG9jdW1lbnRhdGlvbiBhYm91dFxuK0R5bmFtaWMgUEFNVC5cbitcbiBURFggSW50ZXJhY3Rpb24gdG8gT3RoZXIgS2VybmVsIENvbXBvbmVudHNcbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiBcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaFxuaW5kZXggODNkYzUwODYxMzhiMzkuLjU4ODU2M2RmZTg4ZDU3IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaFxuKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaFxuQEAgLTk4LDYgKzk4LDcgQEAgS1ZNX1g4Nl9PUF9PUFRJT05BTF9SRVQwKHRkcF9oYXNfc21lcClcbiBLVk1fWDg2X09QKGxvYWRfbW11X3BnZClcbiBLVk1fWDg2X09QX09QVElPTkFMX1JFVDAoc2V0X2V4dGVybmFsX3NwdGUpXG4gS1ZNX1g4Nl9PUF9PUFRJT05BTChmcmVlX2V4dGVybmFsX3NwdClcbitLVk1fWDg2X09QX09QVElPTkFMX1JFVDAodG9wdXBfZXh0ZXJuYWxfY2FjaGUpXG4gS1ZNX1g4Nl9PUChoYXNfd2JpbnZkX2V4aXQpXG4gS1ZNX1g4Nl9PUChnZXRfbDJfdHNjX29mZnNldClcbiBLVk1fWDg2X09QKGdldF9sMl90c2NfbXVsdGlwbGllcilcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuaW5kZXggNWY2YzFjZTk2NzNiN2YuLjBkYmY2NTY0ZGQwYzUxIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuQEAgLTE5MjIsNiArMTkyMiw3IEBAIHN0cnVjdCBrdm1feDg2X29wcyB7XG4gXHQvKiBVcGRhdGUgZXh0ZXJuYWwgcGFnZSB0YWJsZXMgZm9yIHBhZ2UgdGFibGUgYWJvdXQgdG8gYmUgZnJlZWQuICovXG4gXHR2b2lkICgqZnJlZV9leHRlcm5hbF9zcHQpKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tbXVfcGFnZSAqc3ApO1xuIFxuK1x0aW50ICgqdG9wdXBfZXh0ZXJuYWxfY2FjaGUpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IG1pbl9ucl9zcHRzKTtcbiBcbiBcdGJvb2wgKCpoYXNfd2JpbnZkX2V4aXQpKHZvaWQpO1xuIFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RkeC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4LmhcbmluZGV4IDg5ZTk3ZDU3NjFkODllLi43OTEwOTAxYTdiYTIxYiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RkeC5oXG4rKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZHguaFxuQEAgLTM2LDYgKzM2LDcgQEBcbiAvKiBCaXQgZGVmaW5pdGlvbnMgb2YgVERYX0ZFQVRVUkVTMCBtZXRhZGF0YSBmaWVsZCAqL1xuICNkZWZpbmUgVERYX0ZFQVRVUkVTMF9URF9QUkVTRVJWSU5HXHRCSVRfVUxMKDEpXG4gI2RlZmluZSBURFhfRkVBVFVSRVMwX05PX1JCUF9NT0RcdEJJVF9VTEwoMTgpXG4rI2RlZmluZSBURFhfRkVBVFVSRVMwX0RZTkFNSUNfUEFNVFx0QklUX1VMTCgzNilcbiBcbiAjaWZuZGVmIF9fQVNTRU1CTEVSX19cbiBcbkBAIC0xMTgsMTIgKzExOSwzNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgdGR4X3N1cHBvcnRzX3J1bnRpbWVfdXBkYXRlKGNvbnN0IHN0cnVjdCB0ZHhfc3lzX2luZm8gKnN5c2luZlxuIFx0cmV0dXJuIHN5c2luZm8tXHUwMDNlZmVhdHVyZXMudGR4X2ZlYXR1cmVzMCBcdTAwMjYgVERYX0ZFQVRVUkVTMF9URF9QUkVTRVJWSU5HO1xuIH1cbiBcbitib29sIHRkeF9zdXBwb3J0c19keW5hbWljX3BhbXQoY29uc3Qgc3RydWN0IHRkeF9zeXNfaW5mbyAqc3lzaW5mbyk7XG4rXG4rLyogU2ltcGxlIHN0cnVjdHVyZSBmb3IgcHJlLWFsbG9jYXRpbmcgRHluYW1pYyBQQU1UIHBhZ2VzIG91dHNpZGUgb2Ygc3BpbmxvY2tzLiAqL1xuK3N0cnVjdCB0ZHhfcGFtdF9jYWNoZSB7XG4rXHRzdHJ1Y3QgbGlzdF9oZWFkIHBhZ2VfbGlzdDtcbitcdGludCBjbnQ7XG4rfTtcbitcbitzdGF0aWMgaW5saW5lIHZvaWQgdGR4X2luaXRfcGFtdF9jYWNoZShzdHJ1Y3QgdGR4X3BhbXRfY2FjaGUgKmNhY2hlKVxuK3tcbitcdElOSVRfTElTVF9IRUFEKFx1MDAyNmNhY2hlLVx1MDAzZXBhZ2VfbGlzdCk7XG4rXHRjYWNoZS1cdTAwM2VjbnQgPSAwO1xuK31cbitcbit2b2lkIHRkeF9mcmVlX3BhbXRfY2FjaGUoc3RydWN0IHRkeF9wYW10X2NhY2hlICpjYWNoZSk7XG4raW50IHRkeF90b3B1cF9wYW10X2NhY2hlKHN0cnVjdCB0ZHhfcGFtdF9jYWNoZSAqY2FjaGUsIHVuc2lnbmVkIGxvbmcgbnBhZ2VzKTtcbitpbnQgdGR4X3BhbXRfZ2V0KGt2bV9wZm5fdCBwZm4sIHN0cnVjdCB0ZHhfcGFtdF9jYWNoZSAqY2FjaGUpO1xuK3ZvaWQgdGR4X3BhbXRfcHV0KGt2bV9wZm5fdCBwZm4pO1xuK1xuIGludCB0ZHhfZ3Vlc3Rfa2V5aWRfYWxsb2Modm9pZCk7XG4gdTMyIHRkeF9nZXRfbnJfZ3Vlc3Rfa2V5aWRzKHZvaWQpO1xuIHZvaWQgdGR4X2d1ZXN0X2tleWlkX2ZyZWUodW5zaWduZWQgaW50IGtleWlkKTtcbiBcbiB2b2lkIHRkeF9xdWlya19yZXNldF9wYWRkcih1bnNpZ25lZCBsb25nIGJhc2UsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7XG4gXG4rLyogTnVtYmVyIG9mIFBBTVQgcGFnZXMgdG8gYmUgcHJvdmlkZWQgdG8gVERYIG1vZHVsZSBwZXIgMk1CIHJlZ2lvbiBvZiBQQSAqL1xuKyNkZWZpbmUgVERYX0RQQU1UX0VOVFJZX1BBR0VfQ05UIDJcbitcbitzdHJ1Y3QgcGFnZSAqdGR4X2FsbG9jX2NvbnRyb2xfcGFnZSh2b2lkKTtcbit2b2lkIHRkeF9mcmVlX2NvbnRyb2xfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSk7XG4rXG4gc3RydWN0IHRkeF90ZCB7XG4gXHQvKiBURCByb290IHN0cnVjdHVyZTogKi9cbiBcdHN0cnVjdCBwYWdlICp0ZHJfcGFnZTtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZHhfZ2xvYmFsX21ldGFkYXRhLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZHhfZ2xvYmFsX21ldGFkYXRhLmhcbmluZGV4IDQxMTUwZDU0NjU4OWMxLi4yYTQyNTUxZmMzM2NkNiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RkeF9nbG9iYWxfbWV0YWRhdGEuaFxuKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4X2dsb2JhbF9tZXRhZGF0YS5oXG5AQCAtMjEsNiArMjEsOSBAQCBzdHJ1Y3QgdGR4X3N5c19pbmZvX3RkbXIge1xuIFx0dTE2IHBhbXRfNGtfZW50cnlfc2l6ZTtcbiBcdHUxNiBwYW10XzJtX2VudHJ5X3NpemU7XG4gXHR1MTYgcGFtdF8xZ19lbnRyeV9zaXplO1xuK1xuK1x0LyogT3B0aW9uYWwgbWV0YWRhdGEsIGlmIER5bmFtaWMgUEFNVCBpcyBzdXBwb3J0ZWQgKi9cbitcdHU4ICBwYW10X3BhZ2VfYml0bWFwX2VudHJ5X2JpdHM7XG4gfTtcbiBcbiBzdHJ1Y3QgdGR4X3N5c19pbmZvX3RkX2N0cmwge1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9tbXUvbW11LmMgYi9hcmNoL3g4Ni9rdm0vbW11L21tdS5jXG5pbmRleCAyMzRkMGE5NWFiZjUzNC4uNmRhYjk5NjU0ZjE3MDIgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vbW11L21tdS5jXG4rKysgYi9hcmNoL3g4Ni9rdm0vbW11L21tdS5jXG5AQCAtNjE0LDYgKzYxNCwxMCBAQCBzdGF0aWMgaW50IG1tdV90b3B1cF9tZW1vcnlfY2FjaGVzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBtYXliZV9pbmRpcmVjdClcbiBcdFx0XHRcdFx0ICAgICAgIFBUNjRfUk9PVF9NQVhfTEVWRUwpO1xuIFx0XHRpZiAocilcbiBcdFx0XHRyZXR1cm4gcjtcbitcbitcdFx0ciA9IGt2bV94ODZfY2FsbCh0b3B1cF9leHRlcm5hbF9jYWNoZSkodmNwdSwgUFQ2NF9ST09UX01BWF9MRVZFTCk7XG4rXHRcdGlmIChyKVxuK1x0XHRcdHJldHVybiByO1xuIFx0fVxuIFx0ciA9IGt2bV9tbXVfdG9wdXBfbWVtb3J5X2NhY2hlKFx1MDAyNnZjcHUtXHUwMDNlYXJjaC5tbXVfc2hhZG93X3BhZ2VfY2FjaGUsXG4gXHRcdFx0XHQgICAgICAgUFQ2NF9ST09UX01BWF9MRVZFTCk7XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC90ZHguYyBiL2FyY2gveDg2L2t2bS92bXgvdGR4LmNcbmluZGV4IDU0NWIwM2Q5ZDEwYjgxLi4wOTU3MzExMjU0MGU5OCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgvdGR4LmNcbisrKyBiL2FyY2gveDg2L2t2bS92bXgvdGR4LmNcbkBAIC0zNjIsNyArMzYyLDcgQEAgc3RhdGljIHZvaWQgdGR4X3JlY2xhaW1fY29udHJvbF9wYWdlKHN0cnVjdCBwYWdlICpjdHJsX3BhZ2UpXG4gXHRpZiAodGR4X3JlY2xhaW1fcGFnZShjdHJsX3BhZ2UpKVxuIFx0XHRyZXR1cm47XG4gXG4tXHRfX2ZyZWVfcGFnZShjdHJsX3BhZ2UpO1xuK1x0dGR4X2ZyZWVfY29udHJvbF9wYWdlKGN0cmxfcGFnZSk7XG4gfVxuIFxuIHN0cnVjdCB0ZHhfZmx1c2hfdnBfYXJnIHtcbkBAIC01ODksNyArNTg5LDcgQEAgc3RhdGljIHZvaWQgdGR4X3JlY2xhaW1fdGRfY29udHJvbF9wYWdlcyhzdHJ1Y3Qga3ZtICprdm0pXG4gXG4gXHR0ZHhfcXVpcmtfcmVzZXRfcGFkZHIocGFnZV90b19waHlzKGt2bV90ZHgtXHUwMDNldGQudGRyX3BhZ2UpLCBQQUdFX1NJWkUpO1xuIFxuLVx0X19mcmVlX3BhZ2Uoa3ZtX3RkeC1cdTAwM2V0ZC50ZHJfcGFnZSk7XG4rXHR0ZHhfZnJlZV9jb250cm9sX3BhZ2Uoa3ZtX3RkeC1cdTAwM2V0ZC50ZHJfcGFnZSk7XG4gXHRrdm1fdGR4LVx1MDAzZXRkLnRkcl9wYWdlID0gTlVMTDtcbiB9XG4gXG5AQCAtNjgxLDYgKzY4MSw4IEBAIGludCB0ZHhfdmNwdV9jcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0aWYgKCFpcnFjaGlwX3NwbGl0KHZjcHUtXHUwMDNla3ZtKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4rXHR0ZHhfaW5pdF9wYW10X2NhY2hlKFx1MDAyNnRkeC1cdTAwM2VwYW10X2NhY2hlKTtcbitcbiBcdGZwc3RhdGVfc2V0X2NvbmZpZGVudGlhbChcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guZ3Vlc3RfZnB1KTtcbiBcdHZjcHUtXHUwMDNlYXJjaC5hcGljLVx1MDAzZWd1ZXN0X2FwaWNfcHJvdGVjdGVkID0gdHJ1ZTtcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNnRkeC1cdTAwM2V2dC5waV93YWtldXBfbGlzdCk7XG5AQCAtODY2LDYgKzg2OCw4IEBAIHZvaWQgdGR4X3ZjcHVfZnJlZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRzdHJ1Y3QgdmNwdV90ZHggKnRkeCA9IHRvX3RkeCh2Y3B1KTtcbiBcdGludCBpO1xuIFxuK1x0dGR4X2ZyZWVfcGFtdF9jYWNoZShcdTAwMjZ0ZHgtXHUwMDNlcGFtdF9jYWNoZSk7XG4rXG4gXHRpZiAodmNwdS1cdTAwM2VjcHUgIT0gLTEpIHtcbiBcdFx0S1ZNX0JVR19PTih0ZHgtXHUwMDNlc3RhdGUgPT0gVkNQVV9URF9TVEFURV9JTklUSUFMSVpFRCwgdmNwdS1cdTAwM2Vrdm0pO1xuIFx0XHR0ZHhfZmx1c2hfdnBfb25fY3B1KHZjcHUpO1xuQEAgLTE2MjEsNiArMTYyNSwxNyBAQCB2b2lkIHRkeF9sb2FkX21tdV9wZ2Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBocGFfdCByb290X2hwYSwgaW50IHBnZF9sZXZlbClcbiBcdHRkX3ZtY3Nfd3JpdGU2NCh0b190ZHgodmNwdSksIFNIQVJFRF9FUFRfUE9JTlRFUiwgcm9vdF9ocGEpO1xuIH1cbiBcbitzdGF0aWMgaW50IHRkeF90b3B1cF9leHRlcm5hbF9wYW10X2NhY2hlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IG1pbl9ucl9zcHRzKVxuK3tcbitcdC8qXG4rXHQgKiBNaW51cyBvbmUgcGFnZSB0byBleGNsdWRlIHRoZSByb290IFNQVCwgYnV0IHBsdXMgb25lIHBhZ2UgZm9yIGFcbitcdCAqIHBvc3NpYmxlIDRLQiBwcml2YXRlIG1hcHBpbmcuXG4rXHQgKi9cbitcdG1pbl9ucl9zcHRzICs9IC0xICsgMTtcbitcbitcdHJldHVybiB0ZHhfdG9wdXBfcGFtdF9jYWNoZShcdTAwMjZ0b190ZHgodmNwdSktXHUwMDNlcGFtdF9jYWNoZSwgbWluX25yX3NwdHMpO1xuK31cbitcbiBzdGF0aWMgaW50IHRkeF9tZW1fcGFnZV9hZGQoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4sIGVudW0gcGdfbGV2ZWwgbGV2ZWwsXG4gXHRcdFx0ICAgIGt2bV9wZm5fdCBwZm4pXG4ge1xuQEAgLTE2NzksMTYgKzE2OTQsMjggQEAgc3RhdGljIHN0cnVjdCBwYWdlICp0ZHhfc3B0ZV90b19zZXB0X3B0KHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLFxuIHN0YXRpYyBpbnQgdGR4X3NlcHRfbWFwX25vbmxlYWZfc3B0ZShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbixcbiBcdFx0XHRcdCAgICAgZW51bSBwZ19sZXZlbCBsZXZlbCwgdTY0IG5ld19zcHRlKVxuIHtcbitcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdSA9IGt2bV9nZXRfcnVubmluZ192Y3B1KCk7XG4gXHRncGFfdCBncGEgPSBnZm5fdG9fZ3BhKGdmbik7XG4gXHR1NjQgZXJyLCBlbnRyeSwgbGV2ZWxfc3RhdGU7XG4gXHRzdHJ1Y3QgcGFnZSAqc2VwdF9wdDtcbitcdGludCByZXQ7XG4rXG4rXHRpZiAoS1ZNX0JVR19PTighdmNwdSwga3ZtKSlcbitcdFx0cmV0dXJuIC1FSU87XG4gXG4gXHRzZXB0X3B0ID0gdGR4X3NwdGVfdG9fc2VwdF9wdChrdm0sIGdmbiwgbmV3X3NwdGUsIGxldmVsKTtcbiBcdGlmICghc2VwdF9wdClcbiBcdFx0cmV0dXJuIC1FSU87XG4gXG4rXHRyZXQgPSB0ZHhfcGFtdF9nZXQocGFnZV90b19wZm4oc2VwdF9wdCksIFx1MDAyNnRvX3RkeCh2Y3B1KS1cdTAwM2VwYW10X2NhY2hlKTtcbitcdGlmIChLVk1fQlVHX09OKHJldCwga3ZtKSlcbitcdFx0cmV0dXJuIHJldDtcbitcbiBcdGVyciA9IHRkaF9tZW1fc2VwdF9hZGQoXHUwMDI2dG9fa3ZtX3RkeChrdm0pLVx1MDAzZXRkLCBncGEsIGxldmVsLCBzZXB0X3B0LFxuIFx0XHRcdCAgICAgICBcdTAwMjZlbnRyeSwgXHUwMDI2bGV2ZWxfc3RhdGUpO1xuK1x0aWYgKGVycilcbitcdFx0dGR4X3BhbXRfcHV0KHBhZ2VfdG9fcGZuKHNlcHRfcHQpKTtcbitcbiBcdGlmICh1bmxpa2VseSh0ZHhfb3BlcmFuZF9idXN5KGVycikpKVxuIFx0XHRyZXR1cm4gLUVCVVNZO1xuIFxuQEAgLTE3MDEsOCArMTcyOCwxMyBAQCBzdGF0aWMgaW50IHRkeF9zZXB0X21hcF9ub25sZWFmX3NwdGUoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4sXG4gc3RhdGljIGludCB0ZHhfc2VwdF9tYXBfbGVhZl9zcHRlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLCBlbnVtIHBnX2xldmVsIGxldmVsLFxuIFx0XHRcdFx0ICB1NjQgbmV3X3NwdGUpXG4ge1xuK1x0c3RydWN0IGt2bV92Y3B1ICp2Y3B1ID0ga3ZtX2dldF9ydW5uaW5nX3ZjcHUoKTtcbiBcdHN0cnVjdCBrdm1fdGR4ICprdm1fdGR4ID0gdG9fa3ZtX3RkeChrdm0pO1xuIFx0a3ZtX3Bmbl90IHBmbiA9IHNwdGVfdG9fcGZuKG5ld19zcHRlKTtcbitcdGludCByZXQ7XG4rXG4rXHRpZiAoS1ZNX0JVR19PTighdmNwdSwga3ZtKSlcbitcdFx0cmV0dXJuIC1FSU87XG4gXG4gXHQvKiBUT0RPOiBoYW5kbGUgbGFyZ2UgcGFnZXMuICovXG4gXHRpZiAoS1ZNX0JVR19PTihsZXZlbCAhPSBQR19MRVZFTF80Sywga3ZtKSlcbkBAIC0xNzEwLDYgKzE3NDIsMTAgQEAgc3RhdGljIGludCB0ZHhfc2VwdF9tYXBfbGVhZl9zcHRlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLCBlbnVtIHBnX2xldmVsIGxldmVcbiBcbiBcdFdBUk5fT05fT05DRSgobmV3X3NwdGUgXHUwMDI2IFZNWF9FUFRfUldYX01BU0spICE9IFZNWF9FUFRfUldYX01BU0spO1xuIFxuK1x0cmV0ID0gdGR4X3BhbXRfZ2V0KHBmbiwgXHUwMDI2dG9fdGR4KHZjcHUpLVx1MDAzZXBhbXRfY2FjaGUpO1xuK1x0aWYgKEtWTV9CVUdfT04ocmV0LCBrdm0pKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuIFx0LypcbiBcdCAqIEVuc3VyZSBwcmVfZmF1bHRfYWxsb3dlZCBpcyByZWFkIGJ5IGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeSgpXG4gXHQgKiBiZWZvcmUga3ZtX3RkeC1cdTAwM2VzdGF0ZS4gIFVzZXJzcGFjZSBtdXN0IG5vdCBiZSBhbGxvd2VkIHRvIHByZS1mYXVsdFxuQEAgLTE3MjIsMTAgKzE3NTgsMTUgQEAgc3RhdGljIGludCB0ZHhfc2VwdF9tYXBfbGVhZl9zcHRlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLCBlbnVtIHBnX2xldmVsIGxldmVcbiBcdCAqIElmIHRoZSBURCBpc24ndCBmaW5hbGl6ZWQvcnVubmFibGUsIHRoZW4gdXNlcnNwYWNlIGlzIGluaXRpYWxpemluZ1xuIFx0ICogdGhlIFZNIGltYWdlIHZpYSBLVk1fVERYX0lOSVRfTUVNX1JFR0lPTjsgQUREIHRoZSBwYWdlIHRvIHRoZSBURC5cbiBcdCAqL1xuLVx0aWYgKHVubGlrZWx5KGt2bV90ZHgtXHUwMDNlc3RhdGUgIT0gVERfU1RBVEVfUlVOTkFCTEUpKVxuLVx0XHRyZXR1cm4gdGR4X21lbV9wYWdlX2FkZChrdm0sIGdmbiwgbGV2ZWwsIHBmbik7XG4rXHRpZiAobGlrZWx5KGt2bV90ZHgtXHUwMDNlc3RhdGUgPT0gVERfU1RBVEVfUlVOTkFCTEUpKVxuK1x0XHRyZXQgPSB0ZHhfbWVtX3BhZ2VfYXVnKGt2bSwgZ2ZuLCBsZXZlbCwgcGZuKTtcbitcdGVsc2VcbitcdFx0cmV0ID0gdGR4X21lbV9wYWdlX2FkZChrdm0sIGdmbiwgbGV2ZWwsIHBmbik7XG4rXG4rXHRpZiAocmV0KVxuK1x0XHR0ZHhfcGFtdF9wdXQocGZuKTtcbiBcbi1cdHJldHVybiB0ZHhfbWVtX3BhZ2VfYXVnKGt2bSwgZ2ZuLCBsZXZlbCwgcGZuKTtcbitcdHJldHVybiByZXQ7XG4gfVxuIFxuIC8qXG5AQCAtMTgyMiw2ICsxODYzLDcgQEAgc3RhdGljIGludCB0ZHhfc2VwdF9yZW1vdmVfbGVhZl9zcHRlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLFxuIFx0XHRyZXR1cm4gLUVJTztcbiBcbiBcdHRkeF9xdWlya19yZXNldF9wYWRkcihQRk5fUEhZUyhwZm4pLCBQQUdFX1NJWkUpO1xuK1x0dGR4X3BhbXRfcHV0KHBmbik7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtMTg2NSw2ICsxOTA3LDggQEAgc3RhdGljIGludCB0ZHhfc2VwdF9zZXRfcHJpdmF0ZV9zcHRlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLCB1NjQgb2xkX3NwdGUsXG4gICovXG4gc3RhdGljIHZvaWQgdGR4X3NlcHRfZnJlZV9wcml2YXRlX3NwdChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwKVxuIHtcbitcdHN0cnVjdCBwYWdlICpzZXB0X3B0ID0gdmlydF90b19wYWdlKHNwLVx1MDAzZWV4dGVybmFsX3NwdCk7XG4rXG4gXHQvKlxuIFx0ICogS1ZNIGRvZXNuJ3QgKHlldCkgemFwIHBhZ2UgdGFibGUgcGFnZXMgaW4gbWlycm9yIHBhZ2UgdGFibGUgd2hpbGVcbiBcdCAqIFREIGlzIGFjdGl2ZSwgdGhvdWdoIGd1ZXN0IHBhZ2VzIG1hcHBlZCBpbiBtaXJyb3IgcGFnZSB0YWJsZSBjb3VsZCBiZVxuQEAgLTE4NzgsMTUgKzE5MjIsMTUgQEAgc3RhdGljIHZvaWQgdGR4X3NlcHRfZnJlZV9wcml2YXRlX3NwdChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwKVxuIFx0ICogdGhlIHBhZ2UgdG8gcHJldmVudCB0aGUga2VybmVsIGZyb20gYWNjZXNzaW5nIHRoZSBlbmNyeXB0ZWQgcGFnZS5cbiBcdCAqL1xuIFx0aWYgKEtWTV9CVUdfT04oaXNfaGtpZF9hc3NpZ25lZCh0b19rdm1fdGR4KGt2bSkpLCBrdm0pIHx8XG4tXHQgICAgdGR4X3JlY2xhaW1fcGFnZSh2aXJ0X3RvX3BhZ2Uoc3AtXHUwMDNlZXh0ZXJuYWxfc3B0KSkpXG4rXHQgICAgdGR4X3JlY2xhaW1fcGFnZShzZXB0X3B0KSlcbiBcdFx0Z290byBvdXQ7XG4gXG4gXHQvKlxuLVx0ICogSW1tZWRpYXRlbHkgZnJlZSB0aGUgUy1FUFQgcGFnZSBiZWNhdXNlIFJDVS10aW1lIGZyZWUgaXMgdW5uZWNlc3Nhcnlcbi1cdCAqIGFmdGVyIFRESC5QSFlNRU0uUEFHRS5SRUNMQUlNIGVuc3VyZXMgdGhlcmUgYXJlIG5vIG91dHN0YW5kaW5nXG4tXHQgKiByZWFkZXJzLlxuK1x0ICogSW1tZWRpYXRlbHkgZnJlZSB0aGUgUy1FUFQgcGFnZSBhcyB0aGUgVERYIHN1YnN5c3RlbSBkb2Vzbid0IHN1cHBvcnRcbitcdCAqIGZyZWVpbmcgcGFnZXMgZnJvbSBSQ1UgY2FsbGJhY2tzLCBhbmQgbW9yZSBpbXBvcnRhbnRseSBiZWNhdXNlXG4rXHQgKiBUREguUEhZTUVNLlBBR0UuUkVDTEFJTSBlbnN1cmVzIHRoZXJlIGFyZSBubyBvdXRzdGFuZGluZyByZWFkZXJzLlxuIFx0ICovXG4tXHRmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpc3AtXHUwMDNlZXh0ZXJuYWxfc3B0KTtcbitcdHRkeF9mcmVlX2NvbnRyb2xfcGFnZShzZXB0X3B0KTtcbiBvdXQ6XG4gXHRzcC1cdTAwM2VleHRlcm5hbF9zcHQgPSBOVUxMO1xuIH1cbkBAIC0yNDU5LDcgKzI1MDMsNyBAQCBzdGF0aWMgaW50IF9fdGR4X3RkX2luaXQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3QgdGRfcGFyYW1zICp0ZF9wYXJhbXMsXG4gXG4gXHRyZXQgPSAtRU5PTUVNO1xuIFxuLVx0dGRyX3BhZ2UgPSBhbGxvY19wYWdlKEdGUF9LRVJORUxfQUNDT1VOVCk7XG4rXHR0ZHJfcGFnZSA9IHRkeF9hbGxvY19jb250cm9sX3BhZ2UoKTtcbiBcdGlmICghdGRyX3BhZ2UpXG4gXHRcdGdvdG8gZnJlZV9oa2lkO1xuIFxuQEAgLTI0NzIsNyArMjUxNiw3IEBAIHN0YXRpYyBpbnQgX190ZHhfdGRfaW5pdChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCB0ZF9wYXJhbXMgKnRkX3BhcmFtcyxcbiBcdFx0Z290byBmcmVlX3RkcjtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGt2bV90ZHgtXHUwMDNldGQudGRjc19ucl9wYWdlczsgaSsrKSB7XG4tXHRcdHRkY3NfcGFnZXNbaV0gPSBhbGxvY19wYWdlKEdGUF9LRVJORUxfQUNDT1VOVCk7XG4rXHRcdHRkY3NfcGFnZXNbaV0gPSB0ZHhfYWxsb2NfY29udHJvbF9wYWdlKCk7XG4gXHRcdGlmICghdGRjc19wYWdlc1tpXSlcbiBcdFx0XHRnb3RvIGZyZWVfdGRjcztcbiBcdH1cbkBAIC0yNTkwLDEwICsyNjM0LDggQEAgc3RhdGljIGludCBfX3RkeF90ZF9pbml0KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IHRkX3BhcmFtcyAqdGRfcGFyYW1zLFxuIHRlYXJkb3duOlxuIFx0LyogT25seSBmcmVlIHBhZ2VzIG5vdCB5ZXQgYWRkZWQsIHNvIHN0YXJ0IGF0ICdpJyAqL1xuIFx0Zm9yICg7IGkgXHUwMDNjIGt2bV90ZHgtXHUwMDNldGQudGRjc19ucl9wYWdlczsgaSsrKSB7XG4tXHRcdGlmICh0ZGNzX3BhZ2VzW2ldKSB7XG4tXHRcdFx0X19mcmVlX3BhZ2UodGRjc19wYWdlc1tpXSk7XG4tXHRcdFx0dGRjc19wYWdlc1tpXSA9IE5VTEw7XG4tXHRcdH1cbitcdFx0dGR4X2ZyZWVfY29udHJvbF9wYWdlKHRkY3NfcGFnZXNbaV0pO1xuK1x0XHR0ZGNzX3BhZ2VzW2ldID0gTlVMTDtcbiBcdH1cbiBcdGlmICgha3ZtX3RkeC1cdTAwM2V0ZC50ZGNzX3BhZ2VzKVxuIFx0XHRrZnJlZSh0ZGNzX3BhZ2VzKTtcbkBAIC0yNjA4LDE2ICsyNjUwLDEzIEBAIHN0YXRpYyBpbnQgX190ZHhfdGRfaW5pdChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCB0ZF9wYXJhbXMgKnRkX3BhcmFtcyxcbiBcdGZyZWVfY3B1bWFza192YXIocGFja2FnZXMpO1xuIFxuIGZyZWVfdGRjczpcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIGt2bV90ZHgtXHUwMDNldGQudGRjc19ucl9wYWdlczsgaSsrKSB7XG4tXHRcdGlmICh0ZGNzX3BhZ2VzW2ldKVxuLVx0XHRcdF9fZnJlZV9wYWdlKHRkY3NfcGFnZXNbaV0pO1xuLVx0fVxuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2Mga3ZtX3RkeC1cdTAwM2V0ZC50ZGNzX25yX3BhZ2VzOyBpKyspXG4rXHRcdHRkeF9mcmVlX2NvbnRyb2xfcGFnZSh0ZGNzX3BhZ2VzW2ldKTtcbiBcdGtmcmVlKHRkY3NfcGFnZXMpO1xuIFx0a3ZtX3RkeC1cdTAwM2V0ZC50ZGNzX3BhZ2VzID0gTlVMTDtcbiBcbiBmcmVlX3Rkcjpcbi1cdGlmICh0ZHJfcGFnZSlcbi1cdFx0X19mcmVlX3BhZ2UodGRyX3BhZ2UpO1xuK1x0dGR4X2ZyZWVfY29udHJvbF9wYWdlKHRkcl9wYWdlKTtcbiBcdGt2bV90ZHgtXHUwMDNldGQudGRyX3BhZ2UgPSBOVUxMO1xuIFxuIGZyZWVfaGtpZDpcbkBAIC0yOTUxLDcgKzI5OTAsNyBAQCBzdGF0aWMgaW50IHRkeF90ZF92Y3B1X2luaXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgdmNwdV9yY3gpXG4gXHRpbnQgcmV0LCBpO1xuIFx0dTY0IGVycjtcbiBcbi1cdHBhZ2UgPSBhbGxvY19wYWdlKEdGUF9LRVJORUxfQUNDT1VOVCk7XG4rXHRwYWdlID0gdGR4X2FsbG9jX2NvbnRyb2xfcGFnZSgpO1xuIFx0aWYgKCFwYWdlKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcdHRkeC1cdTAwM2V2cC50ZHZwcl9wYWdlID0gcGFnZTtcbkBAIC0yOTcxLDcgKzMwMTAsNyBAQCBzdGF0aWMgaW50IHRkeF90ZF92Y3B1X2luaXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgdmNwdV9yY3gpXG4gXHR9XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBrdm1fdGR4LVx1MDAzZXRkLnRkY3hfbnJfcGFnZXM7IGkrKykge1xuLVx0XHRwYWdlID0gYWxsb2NfcGFnZShHRlBfS0VSTkVMX0FDQ09VTlQpO1xuK1x0XHRwYWdlID0gdGR4X2FsbG9jX2NvbnRyb2xfcGFnZSgpO1xuIFx0XHRpZiAoIXBhZ2UpIHtcbiBcdFx0XHRyZXQgPSAtRU5PTUVNO1xuIFx0XHRcdGdvdG8gZnJlZV90ZGN4O1xuQEAgLTI5OTMsNyArMzAzMiw3IEBAIHN0YXRpYyBpbnQgdGR4X3RkX3ZjcHVfaW5pdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB2Y3B1X3JjeClcbiBcdFx0XHQgKiBtZXRob2QsIGJ1dCB0aGUgcmVzdCBhcmUgZnJlZWQgaGVyZS5cbiBcdFx0XHQgKi9cbiBcdFx0XHRmb3IgKDsgaSBcdTAwM2Mga3ZtX3RkeC1cdTAwM2V0ZC50ZGN4X25yX3BhZ2VzOyBpKyspIHtcbi1cdFx0XHRcdF9fZnJlZV9wYWdlKHRkeC1cdTAwM2V2cC50ZGN4X3BhZ2VzW2ldKTtcbitcdFx0XHRcdHRkeF9mcmVlX2NvbnRyb2xfcGFnZSh0ZHgtXHUwMDNldnAudGRjeF9wYWdlc1tpXSk7XG4gXHRcdFx0XHR0ZHgtXHUwMDNldnAudGRjeF9wYWdlc1tpXSA9IE5VTEw7XG4gXHRcdFx0fVxuIFx0XHRcdHJldHVybiAtRUlPO1xuQEAgLTMwMjEsMTYgKzMwNjAsMTQgQEAgc3RhdGljIGludCB0ZHhfdGRfdmNwdV9pbml0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHZjcHVfcmN4KVxuIFxuIGZyZWVfdGRjeDpcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGt2bV90ZHgtXHUwMDNldGQudGRjeF9ucl9wYWdlczsgaSsrKSB7XG4tXHRcdGlmICh0ZHgtXHUwMDNldnAudGRjeF9wYWdlc1tpXSlcbi1cdFx0XHRfX2ZyZWVfcGFnZSh0ZHgtXHUwMDNldnAudGRjeF9wYWdlc1tpXSk7XG4rXHRcdHRkeF9mcmVlX2NvbnRyb2xfcGFnZSh0ZHgtXHUwMDNldnAudGRjeF9wYWdlc1tpXSk7XG4gXHRcdHRkeC1cdTAwM2V2cC50ZGN4X3BhZ2VzW2ldID0gTlVMTDtcbiBcdH1cbiBcdGtmcmVlKHRkeC1cdTAwM2V2cC50ZGN4X3BhZ2VzKTtcbiBcdHRkeC1cdTAwM2V2cC50ZGN4X3BhZ2VzID0gTlVMTDtcbiBcbiBmcmVlX3RkdnByOlxuLVx0aWYgKHRkeC1cdTAwM2V2cC50ZHZwcl9wYWdlKVxuLVx0XHRfX2ZyZWVfcGFnZSh0ZHgtXHUwMDNldnAudGR2cHJfcGFnZSk7XG4rXHR0ZHhfZnJlZV9jb250cm9sX3BhZ2UodGR4LVx1MDAzZXZwLnRkdnByX3BhZ2UpO1xuIFx0dGR4LVx1MDAzZXZwLnRkdnByX3BhZ2UgPSBOVUxMO1xuIFx0dGR4LVx1MDAzZXZwLnRkdnByX3BhID0gMDtcbiBcbkBAIC0zNDkzLDYgKzM1MzAsMTAgQEAgaW50IF9faW5pdCB0ZHhfaGFyZHdhcmVfc2V0dXAodm9pZClcbiBcbiBcdHZ0X3g4Nl9vcHMuc2V0X2V4dGVybmFsX3NwdGUgPSB0ZHhfc2VwdF9zZXRfcHJpdmF0ZV9zcHRlO1xuIFx0dnRfeDg2X29wcy5mcmVlX2V4dGVybmFsX3NwdCA9IHRkeF9zZXB0X2ZyZWVfcHJpdmF0ZV9zcHQ7XG4rXG4rXHRpZiAodGR4X3N1cHBvcnRzX2R5bmFtaWNfcGFtdCh0ZHhfc3lzaW5mbykpXG4rXHRcdHZ0X3g4Nl9vcHMudG9wdXBfZXh0ZXJuYWxfY2FjaGUgPSB0ZHhfdG9wdXBfZXh0ZXJuYWxfcGFtdF9jYWNoZTtcbitcbiBcdHZ0X3g4Nl9vcHMucHJvdGVjdGVkX2FwaWNfaGFzX2ludGVycnVwdCA9IHRkeF9wcm90ZWN0ZWRfYXBpY19oYXNfaW50ZXJydXB0O1xuIFx0cmV0dXJuIDA7XG4gXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC90ZHguaCBiL2FyY2gveDg2L2t2bS92bXgvdGR4LmhcbmluZGV4IGFjODMyM2E2OGIxNjNhLi5mZDM2OGUzZWUwNjBiNiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgvdGR4LmhcbisrKyBiL2FyY2gveDg2L2t2bS92bXgvdGR4LmhcbkBAIC03Miw2ICs3Miw4IEBAIHN0cnVjdCB2Y3B1X3RkeCB7XG4gXG4gXHR1NjQgbWFwX2dwYV9uZXh0O1xuIFx0dTY0IG1hcF9ncGFfZW5kO1xuK1xuK1x0c3RydWN0IHRkeF9wYW10X2NhY2hlIHBhbXRfY2FjaGU7XG4gfTtcbiBcbiB2b2lkIHRkaF92cF9yZF9mYWlsZWQoc3RydWN0IHZjcHVfdGR4ICp0ZHgsIGNoYXIgKnVjbGFzcywgdTMyIGZpZWxkLCB1NjQgZXJyKTtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMgYi9hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmNcbmluZGV4IDQyZGY4ZWE0NjRjNDcyLi5kZWM0NTcwOWU0NTRhNiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguY1xuKysrIGIvYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jXG5AQCAtMzAsNiArMzAsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3N1c3BlbmQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3N5c2NvcmVfb3BzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pZHIuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3ZtYWxsb2MuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9wYWdlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20vc3BlY2lhbF9pbnNucy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL21zci1pbmRleC5oXHUwMDNlXG5AQCAtNDYsNiArNDcsOCBAQFxuICNpbmNsdWRlIFwic2VhbWNhbGxfaW50ZXJuYWwuaFwiXG4gI2luY2x1ZGUgXCJ0ZHguaFwiXG4gXG4rc3RhdGljIGJvb2wgdGR4X2VuYWJsZV9kcGFtdCBfX3JvX2FmdGVyX2luaXQ7XG4rXG4gc3RydWN0IHRkeF9tb2R1bGVfc3RhdGUge1xuIFx0Ym9vbCBpbml0aWFsaXplZDtcbiBcdGJvb2wgc3lzaW5pdF9kb25lO1xuQEAgLTYzLDYgKzY2LDE0IEBAIHN0YXRpYyBERUZJTkVfUEVSX0NQVShib29sLCB0ZHhfbHBfaW5pdGlhbGl6ZWQpO1xuIFxuIHN0YXRpYyBzdHJ1Y3QgdGRtcl9pbmZvX2xpc3QgdGR4X3RkbXJfbGlzdDtcbiBcbisvKlxuKyAqIE9uIGEgbWFjaGluZSB3aXRoIER5bmFtaWMgUEFNVCwgdGhlIGtlcm5lbCBtYWludGFpbnMgYSByZWZlcmVuY2UgY291bnRlclxuKyAqIGZvciBldmVyeSAyTUIgcmFuZ2UuIFRoZSBjb3VudGVyIGluZGljYXRlcyBob3cgbWFueSB1c2VycyB0aGVyZSBhcmUgZm9yXG4rICogdGhlIFBBTVQgbWVtb3J5IG9mIHRoZSAyTUIgcmFuZ2UuIFRoZSBrZXJuZWwgYWxsb2NhdGVzIFBBTVQgcmVmY291bnRzIGF0XG4rICogaW5pdGlhbGl6YXRpb24uXG4rICovXG4rc3RhdGljIGF0b21pY190ICpwYW10X3JlZmNvdW50cztcbitcbiAvKiBBbGwgVERYLXVzYWJsZSBtZW1vcnkgcmVnaW9ucy4gIFByb3RlY3RlZCBieSBtZW1faG90cGx1Z19sb2NrLiAqL1xuIHN0YXRpYyBMSVNUX0hFQUQodGR4X21lbWxpc3QpO1xuIFxuQEAgLTI1Miw2ICsyNjMsNDIgQEAgc3RhdGljIHN0cnVjdCBzeXNjb3JlIHRkeF9zeXNjb3JlID0ge1xuIFx0Lm9wcyA9IFx1MDAyNnRkeF9zeXNjb3JlX29wcyxcbiB9O1xuIFxuKy8qXG4rICogQWxsb2NhdGUgUEFNVCByZWZlcmVuY2UgY291bnRlcnMgZm9yIGFsbCBwaHlzaWNhbCBtZW1vcnkuXG4rICpcbisgKiBJdCBjb25zdW1lcyAyTUIgZm9yIGV2ZXJ5IDFUQiBvZiBwaHlzaWNhbCBtZW1vcnkuXG4rICovXG4rc3RhdGljIF9faW5pdCBpbnQgaW5pdF9wYW10X3JlZmNvdW50cyh2b2lkKVxuK3tcbitcdHNpemVfdCBzaXplID0gRElWX1JPVU5EX1VQKG1heF9wZm4sIFBUUlNfUEVSX1BURSkgKiBzaXplb2YoKnBhbXRfcmVmY291bnRzKTtcbitcbitcdGlmICghdGR4X3N1cHBvcnRzX2R5bmFtaWNfcGFtdChcdTAwMjZ0ZHhfc3lzaW5mbykpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0cGFtdF9yZWZjb3VudHMgPSB2emFsbG9jKHNpemUpO1xuK1x0aWYgKCFwYW10X3JlZmNvdW50cylcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIF9faW5pdCB2b2lkIGZyZWVfcGFtdF9yZWZjb3VudHModm9pZClcbit7XG4rXHRpZiAoIXRkeF9zdXBwb3J0c19keW5hbWljX3BhbXQoXHUwMDI2dGR4X3N5c2luZm8pKVxuK1x0XHRyZXR1cm47XG4rXG4rXHR2ZnJlZShwYW10X3JlZmNvdW50cyk7XG4rXHRwYW10X3JlZmNvdW50cyA9IE5VTEw7XG4rfVxuK1xuK3N0YXRpYyBhdG9taWNfdCAqdGR4X2ZpbmRfcGFtdF9yZWZjb3VudCh1bnNpZ25lZCBsb25nIHBmbilcbit7XG4rXHQvKiBGaW5kIHdoaWNoIFBNRCBhIFBGTiBpcyBpbi4gKi9cbitcdHVuc2lnbmVkIGxvbmcgaW5kZXggPSBwZm4gXHUwMDNlXHUwMDNlIChQTURfU0hJRlQgLSBQQUdFX1NISUZUKTtcbitcbitcdHJldHVybiBcdTAwMjZwYW10X3JlZmNvdW50c1tpbmRleF07XG4rfVxuK1xuIC8qXG4gICogQWRkIGEgbWVtb3J5IHJlZ2lvbiBhcyBhIFREWCBtZW1vcnkgYmxvY2suICBUaGUgY2FsbGVyIG11c3QgbWFrZSBzdXJlXG4gICogYWxsIG1lbW9yeSByZWdpb25zIGFyZSBhZGRlZCBpbiBhZGRyZXNzIGFzY2VuZGluZyBvcmRlciBhbmQgZG9uJ3RcbkBAIC01MTAsMzUgKzU1NywzNyBAQCBzdGF0aWMgX19pbml0IGludCBmaWxsX291dF90ZG1ycyhzdHJ1Y3QgbGlzdF9oZWFkICp0bWJfbGlzdCxcbiBcdHJldHVybiAwO1xuIH1cbiBcbitzdGF0aWMgX19pbml0IHVuc2lnbmVkIGxvbmcgdGRtcl9nZXRfcGFtdF9iaXRtYXBfc3ooc3RydWN0IHRkbXJfaW5mbyAqdGRtcilcbit7XG4rXHR1bnNpZ25lZCBsb25nIHBhbXRfc3osIG5yX3BhbXRfZW50cmllcztcbitcdGludCBiaXRzX3Blcl9lbnRyeTtcbitcbitcdGJpdHNfcGVyX2VudHJ5ID0gdGR4X3N5c2luZm8udGRtci5wYW10X3BhZ2VfYml0bWFwX2VudHJ5X2JpdHM7XG4rXHRucl9wYW10X2VudHJpZXMgPSB0ZG1yLVx1MDAzZXNpemUgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4rXHRwYW10X3N6ID0gRElWX1JPVU5EX1VQKG5yX3BhbXRfZW50cmllcyAqIGJpdHNfcGVyX2VudHJ5LCBCSVRTX1BFUl9CWVRFKTtcbitcbitcdHJldHVybiBQQUdFX0FMSUdOKHBhbXRfc3opO1xuK31cbitcbiAvKlxuICAqIENhbGN1bGF0ZSBQQU1UIHNpemUgZ2l2ZW4gYSBURE1SIGFuZCBhIHBhZ2Ugc2l6ZS4gIFRoZSByZXR1cm5lZFxuICAqIFBBTVQgc2l6ZSBpcyBhbHdheXMgYWxpZ25lZCB1cCB0byA0SyBwYWdlIGJvdW5kYXJ5LlxuICAqL1xuLXN0YXRpYyBfX2luaXQgdW5zaWduZWQgbG9uZyB0ZG1yX2dldF9wYW10X3N6KHN0cnVjdCB0ZG1yX2luZm8gKnRkbXIsIGludCBwZ3N6LFxuLVx0XHRcdFx0XHQgICAgIHUxNiBwYW10X2VudHJ5X3NpemUpXG4rc3RhdGljIF9faW5pdCB1bnNpZ25lZCBsb25nIHRkbXJfZ2V0X3BhbXRfc3ooc3RydWN0IHRkbXJfaW5mbyAqdGRtciwgaW50IHBnc3opXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBwYW10X3N6LCBucl9wYW10X2VudHJpZXM7XG4rXHRjb25zdCBpbnQgdGR4X3BnX3NpemVfc2hpZnRbVERYX1BTX05SXSA9IHsgUEFHRV9TSElGVCwgUE1EX1NISUZULCBQVURfU0hJRlQgfTtcbitcdGNvbnN0IHUxNiBwYW10X2VudHJ5X3NpemVbVERYX1BTX05SXSA9IHtcbitcdFx0dGR4X3N5c2luZm8udGRtci5wYW10XzRrX2VudHJ5X3NpemUsXG4rXHRcdHRkeF9zeXNpbmZvLnRkbXIucGFtdF8ybV9lbnRyeV9zaXplLFxuK1x0XHR0ZHhfc3lzaW5mby50ZG1yLnBhbXRfMWdfZW50cnlfc2l6ZSxcbitcdH07XG4gXG4tXHRzd2l0Y2ggKHBnc3opIHtcbi1cdGNhc2UgVERYX1BTXzRLOlxuLVx0XHRucl9wYW10X2VudHJpZXMgPSB0ZG1yLVx1MDAzZXNpemUgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4tXHRcdGJyZWFrO1xuLVx0Y2FzZSBURFhfUFNfMk06XG4tXHRcdG5yX3BhbXRfZW50cmllcyA9IHRkbXItXHUwMDNlc2l6ZSBcdTAwM2VcdTAwM2UgUE1EX1NISUZUO1xuLVx0XHRicmVhaztcbi1cdGNhc2UgVERYX1BTXzFHOlxuLVx0XHRucl9wYW10X2VudHJpZXMgPSB0ZG1yLVx1MDAzZXNpemUgXHUwMDNlXHUwMDNlIFBVRF9TSElGVDtcbi1cdFx0YnJlYWs7XG4tXHRkZWZhdWx0OlxuLVx0XHRXQVJOX09OX09OQ0UoMSk7XG4tXHRcdHJldHVybiAwO1xuLVx0fVxuK1x0bnJfcGFtdF9lbnRyaWVzID0gdGRtci1cdTAwM2VzaXplIFx1MDAzZVx1MDAzZSB0ZHhfcGdfc2l6ZV9zaGlmdFtwZ3N6XTtcbitcdHBhbXRfc3ogPSBucl9wYW10X2VudHJpZXMgKiBwYW10X2VudHJ5X3NpemVbcGdzel07XG4gXG4tXHRwYW10X3N6ID0gbnJfcGFtdF9lbnRyaWVzICogcGFtdF9lbnRyeV9zaXplO1xuIFx0LyogVERYIHJlcXVpcmVzIFBBTVQgc2l6ZSBtdXN0IGJlIDRLIGFsaWduZWQgKi9cbi1cdHBhbXRfc3ogPSBBTElHTihwYW10X3N6LCBQQUdFX1NJWkUpO1xuLVxuLVx0cmV0dXJuIHBhbXRfc3o7XG4rXHRyZXR1cm4gUEFHRV9BTElHTihwYW10X3N6KTtcbiB9XG4gXG4gLypcbkBAIC01NzYsMTUgKzYyNSwxMSBAQCBzdGF0aWMgX19pbml0IGludCB0ZG1yX2dldF9uaWQoc3RydWN0IHRkbXJfaW5mbyAqdGRtciwgc3RydWN0IGxpc3RfaGVhZCAqdG1iX2xpc1xuICAqIHdpdGhpbiBAdGRtciwgYW5kIHNldCB1cCBQQU1UcyBmb3IgQHRkbXIuXG4gICovXG4gc3RhdGljIF9faW5pdCBpbnQgdGRtcl9zZXRfdXBfcGFtdChzdHJ1Y3QgdGRtcl9pbmZvICp0ZG1yLFxuLVx0XHRcdFx0ICAgc3RydWN0IGxpc3RfaGVhZCAqdG1iX2xpc3QsXG4tXHRcdFx0XHQgICB1MTYgcGFtdF9lbnRyeV9zaXplW10pXG4rXHRcdFx0XHQgICBzdHJ1Y3QgbGlzdF9oZWFkICp0bWJfbGlzdClcbiB7XG4tXHR1bnNpZ25lZCBsb25nIHBhbXRfYmFzZVtURFhfUFNfTlJdO1xuLVx0dW5zaWduZWQgbG9uZyBwYW10X3NpemVbVERYX1BTX05SXTtcbi1cdHVuc2lnbmVkIGxvbmcgdGRtcl9wYW10X2Jhc2U7XG4gXHR1bnNpZ25lZCBsb25nIHRkbXJfcGFtdF9zaXplO1xuIFx0c3RydWN0IHBhZ2UgKnBhbXQ7XG4tXHRpbnQgcGdzeiwgbmlkO1xuK1x0aW50IG5pZDtcbiBcbiBcdG5pZCA9IHRkbXJfZ2V0X25pZCh0ZG1yLCB0bWJfbGlzdCk7XG4gXG5AQCAtNTkyLDEzICs2MzcsMTggQEAgc3RhdGljIF9faW5pdCBpbnQgdGRtcl9zZXRfdXBfcGFtdChzdHJ1Y3QgdGRtcl9pbmZvICp0ZG1yLFxuIFx0ICogQ2FsY3VsYXRlIHRoZSBQQU1UIHNpemUgZm9yIGVhY2ggVERYIHN1cHBvcnRlZCBwYWdlIHNpemVcbiBcdCAqIGFuZCB0aGUgdG90YWwgUEFNVCBzaXplLlxuIFx0ICovXG4tXHR0ZG1yX3BhbXRfc2l6ZSA9IDA7XG4tXHRmb3IgKHBnc3ogPSBURFhfUFNfNEs7IHBnc3ogXHUwMDNjIFREWF9QU19OUjsgcGdzeisrKSB7XG4tXHRcdHBhbXRfc2l6ZVtwZ3N6XSA9IHRkbXJfZ2V0X3BhbXRfc3oodGRtciwgcGdzeixcbi1cdFx0XHRcdFx0cGFtdF9lbnRyeV9zaXplW3Bnc3pdKTtcbi1cdFx0dGRtcl9wYW10X3NpemUgKz0gcGFtdF9zaXplW3Bnc3pdO1xuK1x0dGRtci1cdTAwM2VwYW10XzFnX3NpemUgPSB0ZG1yX2dldF9wYW10X3N6KHRkbXIsIFREWF9QU18xRyk7XG4rXHR0ZG1yLVx1MDAzZXBhbXRfMm1fc2l6ZSA9IHRkbXJfZ2V0X3BhbXRfc3oodGRtciwgVERYX1BTXzJNKTtcbitcbitcdGlmICh0ZHhfc3VwcG9ydHNfZHluYW1pY19wYW10KFx1MDAyNnRkeF9zeXNpbmZvKSkge1xuK1x0XHQvKiBXaXRoIER5bmFtaWMgUEFNVCwgUEFNVF80SyBpcyByZXBsYWNlZCB3aXRoIGEgYml0bWFwICovXG4rXHRcdHRkbXItXHUwMDNlcGFtdF80a19zaXplID0gdGRtcl9nZXRfcGFtdF9iaXRtYXBfc3oodGRtcik7XG4rXHR9IGVsc2Uge1xuK1x0XHR0ZG1yLVx1MDAzZXBhbXRfNGtfc2l6ZSA9IHRkbXJfZ2V0X3BhbXRfc3oodGRtciwgVERYX1BTXzRLKTtcbiBcdH1cbiBcbitcdHRkbXJfcGFtdF9zaXplID0gdGRtci1cdTAwM2VwYW10XzRrX3NpemUgKyB0ZG1yLVx1MDAzZXBhbXRfMm1fc2l6ZSArIHRkbXItXHUwMDNlcGFtdF8xZ19zaXplO1xuK1xuIFx0LypcbiBcdCAqIEFsbG9jYXRlIG9uZSBjaHVuayBvZiBwaHlzaWNhbGx5IGNvbnRpZ3VvdXMgbWVtb3J5IGZvciBhbGxcbiBcdCAqIFBBTVRzLiAgVGhpcyBoZWxwcyBtaW5pbWl6ZSB0aGUgUEFNVCdzIHVzZSBvZiByZXNlcnZlZCBhcmVhc1xuQEAgLTYwNiwyNSArNjU2LDE3IEBAIHN0YXRpYyBfX2luaXQgaW50IHRkbXJfc2V0X3VwX3BhbXQoc3RydWN0IHRkbXJfaW5mbyAqdGRtcixcbiBcdCAqL1xuIFx0cGFtdCA9IGFsbG9jX2NvbnRpZ19wYWdlcyh0ZG1yX3BhbXRfc2l6ZSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCwgR0ZQX0tFUk5FTCxcbiBcdFx0XHRuaWQsIFx1MDAyNm5vZGVfb25saW5lX21hcCk7XG4tXHRpZiAoIXBhbXQpXG4tXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuIFx0Lypcbi1cdCAqIEJyZWFrIHRoZSBjb250aWd1b3VzIGFsbG9jYXRpb24gYmFjayB1cCBpbnRvIHRoZVxuLVx0ICogaW5kaXZpZHVhbCBQQU1UcyBmb3IgZWFjaCBwYWdlIHNpemUuXG4rXHQgKiB0ZG1yLVx1MDAzZXBhbXRfNGtfYmFzZSBpcyBzdGlsbCB6ZXJvIHNvIHRoZSBlcnJvclxuK1x0ICogcGF0aCBvZiB0aGUgY2FsbGVyIHdpbGwgc2tpcCBmcmVlaW5nIHRoZSBQQU1ULlxuIFx0ICovXG4tXHR0ZG1yX3BhbXRfYmFzZSA9IHBhZ2VfdG9fcGZuKHBhbXQpIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUO1xuLVx0Zm9yIChwZ3N6ID0gVERYX1BTXzRLOyBwZ3N6IFx1MDAzYyBURFhfUFNfTlI7IHBnc3orKykge1xuLVx0XHRwYW10X2Jhc2VbcGdzel0gPSB0ZG1yX3BhbXRfYmFzZTtcbi1cdFx0dGRtcl9wYW10X2Jhc2UgKz0gcGFtdF9zaXplW3Bnc3pdO1xuLVx0fVxuK1x0aWYgKCFwYW10KVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbiBcbi1cdHRkbXItXHUwMDNlcGFtdF80a19iYXNlID0gcGFtdF9iYXNlW1REWF9QU180S107XG4tXHR0ZG1yLVx1MDAzZXBhbXRfNGtfc2l6ZSA9IHBhbXRfc2l6ZVtURFhfUFNfNEtdO1xuLVx0dGRtci1cdTAwM2VwYW10XzJtX2Jhc2UgPSBwYW10X2Jhc2VbVERYX1BTXzJNXTtcbi1cdHRkbXItXHUwMDNlcGFtdF8ybV9zaXplID0gcGFtdF9zaXplW1REWF9QU18yTV07XG4tXHR0ZG1yLVx1MDAzZXBhbXRfMWdfYmFzZSA9IHBhbXRfYmFzZVtURFhfUFNfMUddO1xuLVx0dGRtci1cdTAwM2VwYW10XzFnX3NpemUgPSBwYW10X3NpemVbVERYX1BTXzFHXTtcbitcdHRkbXItXHUwMDNlcGFtdF80a19iYXNlID0gcGFnZV90b19waHlzKHBhbXQpO1xuK1x0dGRtci1cdTAwM2VwYW10XzJtX2Jhc2UgPSB0ZG1yLVx1MDAzZXBhbXRfNGtfYmFzZSArIHRkbXItXHUwMDNlcGFtdF80a19zaXplO1xuK1x0dGRtci1cdTAwM2VwYW10XzFnX2Jhc2UgPSB0ZG1yLVx1MDAzZXBhbXRfMm1fYmFzZSArIHRkbXItXHUwMDNlcGFtdF8ybV9zaXplO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTY1NSwxMCArNjk3LDcgQEAgc3RhdGljIF9faW5pdCB2b2lkIHRkbXJfZG9fcGFtdF9mdW5jKHN0cnVjdCB0ZG1yX2luZm8gKnRkbXIsXG4gXHR0ZG1yX2dldF9wYW10KHRkbXIsIFx1MDAyNnBhbXRfYmFzZSwgXHUwMDI2cGFtdF9zaXplKTtcbiBcbiBcdC8qIERvIG5vdGhpbmcgaWYgUEFNVCBoYXNuJ3QgYmVlbiBhbGxvY2F0ZWQgZm9yIHRoaXMgVERNUiAqL1xuLVx0aWYgKCFwYW10X3NpemUpXG4tXHRcdHJldHVybjtcbi1cbi1cdGlmIChXQVJOX09OX09OQ0UoIXBhbXRfYmFzZSkpXG4rXHRpZiAoIXBhbXRfYmFzZSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0cGFtdF9mdW5jKHBhbXRfYmFzZSwgcGFtdF9zaXplKTtcbkBAIC02ODQsMTQgKzcyMywxMiBAQCBzdGF0aWMgX19pbml0IHZvaWQgdGRtcnNfZnJlZV9wYW10X2FsbChzdHJ1Y3QgdGRtcl9pbmZvX2xpc3QgKnRkbXJfbGlzdClcbiBcbiAvKiBBbGxvY2F0ZSBhbmQgc2V0IHVwIFBBTVRzIGZvciBhbGwgVERNUnMgKi9cbiBzdGF0aWMgX19pbml0IGludCB0ZG1yc19zZXRfdXBfcGFtdF9hbGwoc3RydWN0IHRkbXJfaW5mb19saXN0ICp0ZG1yX2xpc3QsXG4tXHRcdFx0XHRcdHN0cnVjdCBsaXN0X2hlYWQgKnRtYl9saXN0LFxuLVx0XHRcdFx0XHR1MTYgcGFtdF9lbnRyeV9zaXplW10pXG4rXHRcdFx0XHQgc3RydWN0IGxpc3RfaGVhZCAqdG1iX2xpc3QpXG4ge1xuIFx0aW50IGksIHJldCA9IDA7XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB0ZG1yX2xpc3QtXHUwMDNlbnJfY29uc3VtZWRfdGRtcnM7IGkrKykge1xuLVx0XHRyZXQgPSB0ZG1yX3NldF91cF9wYW10KHRkbXJfZW50cnkodGRtcl9saXN0LCBpKSwgdG1iX2xpc3QsXG4tXHRcdFx0XHRwYW10X2VudHJ5X3NpemUpO1xuK1x0XHRyZXQgPSB0ZG1yX3NldF91cF9wYW10KHRkbXJfZW50cnkodGRtcl9saXN0LCBpKSwgdG1iX2xpc3QpO1xuIFx0XHRpZiAocmV0KVxuIFx0XHRcdGdvdG8gZXJyO1xuIFx0fVxuQEAgLTk2OCwxOCArMTAwNSwxMyBAQCBzdGF0aWMgX19pbml0IGludCBjb25zdHJ1Y3RfdGRtcnMoc3RydWN0IGxpc3RfaGVhZCAqdG1iX2xpc3QsXG4gXHRcdFx0XHQgIHN0cnVjdCB0ZG1yX2luZm9fbGlzdCAqdGRtcl9saXN0LFxuIFx0XHRcdFx0ICBzdHJ1Y3QgdGR4X3N5c19pbmZvX3RkbXIgKnN5c2luZm9fdGRtcilcbiB7XG4tXHR1MTYgcGFtdF9lbnRyeV9zaXplW1REWF9QU19OUl0gPSB7XG4tXHRcdHN5c2luZm9fdGRtci1cdTAwM2VwYW10XzRrX2VudHJ5X3NpemUsXG4tXHRcdHN5c2luZm9fdGRtci1cdTAwM2VwYW10XzJtX2VudHJ5X3NpemUsXG4tXHRcdHN5c2luZm9fdGRtci1cdTAwM2VwYW10XzFnX2VudHJ5X3NpemUsXG4tXHR9O1xuIFx0aW50IHJldDtcbiBcbiBcdHJldCA9IGZpbGxfb3V0X3RkbXJzKHRtYl9saXN0LCB0ZG1yX2xpc3QpO1xuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbi1cdHJldCA9IHRkbXJzX3NldF91cF9wYW10X2FsbCh0ZG1yX2xpc3QsIHRtYl9saXN0LCBwYW10X2VudHJ5X3NpemUpO1xuK1x0cmV0ID0gdGRtcnNfc2V0X3VwX3BhbXRfYWxsKHRkbXJfbGlzdCwgdG1iX2xpc3QpO1xuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbkBAIC05OTgsNiArMTAzMCw4IEBAIHN0YXRpYyBfX2luaXQgaW50IGNvbnN0cnVjdF90ZG1ycyhzdHJ1Y3QgbGlzdF9oZWFkICp0bWJfbGlzdCxcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuKyNkZWZpbmUgVERYX1NZU19DT05GSUdfRFlOQU1JQ19QQU1UXHRCSVQoMTYpXG4rXG4gc3RhdGljIF9faW5pdCBpbnQgY29uZmlnX3RkeF9tb2R1bGUoc3RydWN0IHRkbXJfaW5mb19saXN0ICp0ZG1yX2xpc3QsXG4gXHRcdFx0XHQgICAgdTY0IGdsb2JhbF9rZXlpZClcbiB7XG5AQCAtMTAyNiw2ICsxMDYwLDEyIEBAIHN0YXRpYyBfX2luaXQgaW50IGNvbmZpZ190ZHhfbW9kdWxlKHN0cnVjdCB0ZG1yX2luZm9fbGlzdCAqdGRtcl9saXN0LFxuIFx0YXJncy5yY3ggPSBfX3BhKHRkbXJfcGFfYXJyYXkpO1xuIFx0YXJncy5yZHggPSB0ZG1yX2xpc3QtXHUwMDNlbnJfY29uc3VtZWRfdGRtcnM7XG4gXHRhcmdzLnI4ID0gZ2xvYmFsX2tleWlkO1xuK1xuK1x0aWYgKHRkeF9zdXBwb3J0c19keW5hbWljX3BhbXQoXHUwMDI2dGR4X3N5c2luZm8pKSB7XG4rXHRcdHByX2luZm8oXCJFbmFibGUgRHluYW1pYyBQQU1UXFxuXCIpO1xuK1x0XHRhcmdzLnI4IHw9IFREWF9TWVNfQ09ORklHX0RZTkFNSUNfUEFNVDtcbitcdH1cbitcbiBcdHJldCA9IHNlYW1jYWxsX3ByZXJyKFRESF9TWVNfQ09ORklHLCBcdTAwMjZhcmdzKTtcbiBcbiBcdC8qIEZyZWUgdGhlIGFycmF5IGFzIGl0IGlzIG5vdCByZXF1aXJlZCBhbnltb3JlLiAqL1xuQEAgLTExNjcsMTAgKzEyMDcsMTQgQEAgc3RhdGljIF9faW5pdCBpbnQgaW5pdF90ZHhfbW9kdWxlKHZvaWQpXG4gXHQgKi9cbiBcdGdldF9vbmxpbmVfbWVtcygpO1xuIFxuLVx0cmV0ID0gYnVpbGRfdGR4X21lbWxpc3QoXHUwMDI2dGR4X21lbWxpc3QpO1xuK1x0cmV0ID0gaW5pdF9wYW10X3JlZmNvdW50cygpO1xuIFx0aWYgKHJldClcbiBcdFx0Z290byBvdXRfcHV0X3RkeG1lbTtcbiBcbitcdHJldCA9IGJ1aWxkX3RkeF9tZW1saXN0KFx1MDAyNnRkeF9tZW1saXN0KTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gZXJyX2ZyZWVfcGFtdF9yZWZjb3VudHM7XG4rXG4gXHQvKiBBbGxvY2F0ZSBlbm91Z2ggc3BhY2UgZm9yIGNvbnN0cnVjdGluZyBURE1ScyAqL1xuIFx0cmV0ID0gYWxsb2NfdGRtcl9saXN0KFx1MDAyNnRkeF90ZG1yX2xpc3QsIFx1MDAyNnRkeF9zeXNpbmZvLnRkbXIpO1xuIFx0aWYgKHJldClcbkBAIC0xMjIwLDYgKzEyNjQsOCBAQCBzdGF0aWMgX19pbml0IGludCBpbml0X3RkeF9tb2R1bGUodm9pZClcbiBcdGZyZWVfdGRtcl9saXN0KFx1MDAyNnRkeF90ZG1yX2xpc3QpO1xuIGVycl9mcmVlX3RkeG1lbTpcbiBcdGZyZWVfdGR4X21lbWxpc3QoXHUwMDI2dGR4X21lbWxpc3QpO1xuK2Vycl9mcmVlX3BhbXRfcmVmY291bnRzOlxuK1x0ZnJlZV9wYW10X3JlZmNvdW50cygpO1xuIFx0Z290byBvdXRfcHV0X3RkeG1lbTtcbiB9XG4gXG5AQCAtMjAwMyw2ICsyMDQ5LDI4OCBAQCB1NjQgdGRoX3BoeW1lbV9wYWdlX3diaW52ZF9oa2lkKHU2NCBoa2lkLCBrdm1fcGZuX3QgcGZuKVxuIH1cbiBFWFBPUlRfU1lNQk9MX0ZPUl9LVk0odGRoX3BoeW1lbV9wYWdlX3diaW52ZF9oa2lkKTtcbiBcbitib29sIHRkeF9zdXBwb3J0c19keW5hbWljX3BhbXQoY29uc3Qgc3RydWN0IHRkeF9zeXNfaW5mbyAqc3lzaW5mbylcbit7XG4rXHRyZXR1cm4gc3lzaW5mby1cdTAwM2VmZWF0dXJlcy50ZHhfZmVhdHVyZXMwIFx1MDAyNiBURFhfRkVBVFVSRVMwX0RZTkFNSUNfUEFNVCBcdTAwMjZcdTAwMjZcbitcdCAgICAgICB0ZHhfZW5hYmxlX2RwYW10O1xuK31cbitFWFBPUlRfU1lNQk9MX0ZPUl9LVk0odGR4X3N1cHBvcnRzX2R5bmFtaWNfcGFtdCk7XG4rXG4rc3RhdGljIHN0cnVjdCBwYWdlICp0ZHhfYWxsb2NfcGFnZV9wYW10X2NhY2hlKHN0cnVjdCB0ZHhfcGFtdF9jYWNoZSAqY2FjaGUpXG4re1xuK1x0c3RydWN0IHBhZ2UgKnBhZ2U7XG4rXG4rXHRwYWdlID0gbGlzdF9maXJzdF9lbnRyeV9vcl9udWxsKFx1MDAyNmNhY2hlLVx1MDAzZXBhZ2VfbGlzdCwgc3RydWN0IHBhZ2UsIGxydSk7XG4rXHRpZiAocGFnZSkge1xuK1x0XHRsaXN0X2RlbChcdTAwMjZwYWdlLVx1MDAzZWxydSk7XG4rXHRcdGNhY2hlLVx1MDAzZWNudC0tO1xuK1x0fVxuK1xuK1x0cmV0dXJuIHBhZ2U7XG4rfVxuK1xuK3N0YXRpYyBzdHJ1Y3QgcGFnZSAqYWxsb2NfZHBhbXRfcGFnZShzdHJ1Y3QgdGR4X3BhbXRfY2FjaGUgKmNhY2hlKVxuK3tcbitcdGlmIChjYWNoZSlcbitcdFx0cmV0dXJuIHRkeF9hbGxvY19wYWdlX3BhbXRfY2FjaGUoY2FjaGUpO1xuK1xuK1x0cmV0dXJuIGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbit9XG4rXG4rc3RhdGljIGludCBhbGxvY19wYW10X2FycmF5KHN0cnVjdCBwYWdlICoqcGFtdF9wYWdlcywgc3RydWN0IHRkeF9wYW10X2NhY2hlICpjYWNoZSlcbit7XG4rXHRpbnQgaSwgajtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIFREWF9EUEFNVF9FTlRSWV9QQUdFX0NOVDsgaSsrKSB7XG4rXHRcdHBhbXRfcGFnZXNbaV0gPSBhbGxvY19kcGFtdF9wYWdlKGNhY2hlKTtcbitcdFx0aWYgKCFwYW10X3BhZ2VzW2ldKVxuK1x0XHRcdGdvdG8gZXJyO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rXG4rZXJyOlxuK1x0Zm9yIChqID0gMDsgaiBcdTAwM2MgaTsgaisrKVxuK1x0XHRfX2ZyZWVfcGFnZShwYW10X3BhZ2VzW2pdKTtcbitcbitcdHJldHVybiAtRU5PTUVNO1xuK31cbitcbitzdGF0aWMgdm9pZCBmcmVlX3BhbXRfYXJyYXkoc3RydWN0IHBhZ2UgKipwYW10X3BhZ2VzKVxuK3tcbitcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyBURFhfRFBBTVRfRU5UUllfUEFHRV9DTlQ7IGkrKykge1xuK1x0XHQvKlxuK1x0XHQgKiBSZXNldCBwYWdlcyB1bmNvbmRpdGlvbmFsbHkgdG8gY292ZXIgY2FzZXNcbitcdFx0ICogd2hlcmUgdGhleSB3ZXJlIHBhc3NlZCB0byB0aGUgVERYIG1vZHVsZS5cbitcdFx0ICovXG4rXHRcdHRkeF9xdWlya19yZXNldF9wYWRkcihwYWdlX3RvX3BoeXMocGFtdF9wYWdlc1tpXSksIFBBR0VfU0laRSk7XG4rXG4rXHRcdF9fZnJlZV9wYWdlKHBhbXRfcGFnZXNbaV0pO1xuK1x0fVxuK31cbitcbisvKlxuKyAqIENhbGN1bGF0ZSB0aGUgYXJnIG5lZWRlZCBmb3Igb3BlcmF0aW5nIG9uIHRoZSBEUEFNVCBiYWNraW5nIGZvclxuKyAqIGEgZ2l2ZW4gNEtCIHBhZ2UuXG4rICovXG4rc3RhdGljIHU2NCBwYW10XzJtYl9hcmcoa3ZtX3Bmbl90IHBmbilcbit7XG4rXHQvKiBBcmcgdmFsdWUgd2lsbCBzcGVjaWZ5IGEgMk1CIHJlZ2lvbiBvZiBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlLiAqL1xuK1x0dW5zaWduZWQgbG9uZyBocGFfMm1iID0gQUxJR05fRE9XTihwZm4gXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQsIFBNRF9TSVpFKTtcbitcbitcdHJldHVybiBocGFfMm1iIHwgVERYX1BTXzJNO1xuK31cbitcbisvKiBBZGQgUEFNVCBiYWNraW5nIGZvciB0aGUgMk1CIHJlZ2lvbiBzdXJyb3VuZGluZyB0aGUgZ2l2ZW4gcGZuLiAqL1xuK3N0YXRpYyB1NjQgdGRoX3BoeW1lbV9wYW10X2FkZChrdm1fcGZuX3QgcGZuLCBzdHJ1Y3QgcGFnZSAqKnBhbXRfcGFnZXMpXG4re1xuK1x0c3RydWN0IHRkeF9tb2R1bGVfYXJncyBhcmdzID0ge1xuK1x0XHQucmN4ID0gcGFtdF8ybWJfYXJnKHBmbiksXG4rXHRcdC5yZHggPSBwYWdlX3RvX3BoeXMocGFtdF9wYWdlc1swXSksXG4rXHRcdC5yOCA9IHBhZ2VfdG9fcGh5cyhwYW10X3BhZ2VzWzFdKSxcbitcdH07XG4rXG4rXHRyZXR1cm4gc2VhbWNhbGwoVERIX1BIWU1FTV9QQU1UX0FERCwgXHUwMDI2YXJncyk7XG4rfVxuK1xuKy8qIFJlbW92ZSBQQU1UIGJhY2tpbmcgZm9yIHRoZSAyTUIgcmVnaW9uIHN1cnJvdW5kaW5nIHRoZSBnaXZlbiBwZm4uICovXG4rc3RhdGljIHU2NCB0ZGhfcGh5bWVtX3BhbXRfcmVtb3ZlKGt2bV9wZm5fdCBwZm4sIHN0cnVjdCBwYWdlICoqcGFtdF9wYWdlcylcbit7XG4rXHRzdHJ1Y3QgdGR4X21vZHVsZV9hcmdzIGFyZ3MgPSB7XG4rXHRcdC5yY3ggPSBwYW10XzJtYl9hcmcocGZuKSxcbitcdH07XG4rXHR1NjQgcmV0O1xuK1xuK1x0cmV0ID0gc2VhbWNhbGxfcmV0KFRESF9QSFlNRU1fUEFNVF9SRU1PVkUsIFx1MDAyNmFyZ3MpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdC8qIENvcHkgUEFNVCBwYWdlcyBvdXQgb2YgdGhlIHN0cnVjdCBwZXIgdGhlIFREWCBBQkkgKi9cbitcdHBhbXRfcGFnZXNbMF0gPSBwaHlzX3RvX3BhZ2UoYXJncy5yZHgpO1xuK1x0cGFtdF9wYWdlc1sxXSA9IHBoeXNfdG9fcGFnZShhcmdzLnI4KTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbisvKiBTZXJpYWxpemVzIGFkZGluZy9yZW1vdmluZyBQQU1UIG1lbW9yeSAqL1xuK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0socGFtdF9sb2NrKTtcbitcbisvKiBCdW1wIFBBTVQgcmVmY291bnQgZm9yIHRoZSBnaXZlbiBwZm4gYW5kIGFsbG9jYXRlIFBBTVQgYmFja2luZyBpZiBuZWVkZWQuICovXG4raW50IHRkeF9wYW10X2dldChrdm1fcGZuX3QgcGZuLCBzdHJ1Y3QgdGR4X3BhbXRfY2FjaGUgKmNhY2hlKVxuK3tcbitcdHN0cnVjdCBwYWdlICpwYW10X3BhZ2VzW1REWF9EUEFNVF9FTlRSWV9QQUdFX0NOVF07XG4rXHRhdG9taWNfdCAqcGFtdF9yZWZjb3VudDtcbitcdHU2NCB0ZHhfc3RhdHVzO1xuK1x0aW50IHJldDtcbitcbitcdGlmICghdGR4X3N1cHBvcnRzX2R5bmFtaWNfcGFtdChcdTAwMjZ0ZHhfc3lzaW5mbykpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0cGFtdF9yZWZjb3VudCA9IHRkeF9maW5kX3BhbXRfcmVmY291bnQocGZuKTtcbitcbitcdC8qXG4rXHQgKiBJZiB0aGUgcGFtdCBwYWdlIGlzIGFscmVhZHkgYWRkZWQgKGkuZS4gcmVmY291bnQgXHUwMDNlPSAxKSxcbitcdCAqIHRoZW4ganVzdCBpbmNyZW1lbnQgdGhlIHJlZmNvdW50LlxuK1x0ICovXG4rXHRpZiAoYXRvbWljX2luY19ub3RfemVybyhwYW10X3JlZmNvdW50KSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRyZXQgPSBhbGxvY19wYW10X2FycmF5KHBhbXRfcGFnZXMsIGNhY2hlKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRzcGluX2xvY2soXHUwMDI2cGFtdF9sb2NrKTtcbitcbitcdC8qXG4rXHQgKiBVbmxpa2UgdGR4X3BhbXRfcHV0KCkgd2hpY2ggdXNlcyBhdG9taWNfZGVjX2FuZF9sb2NrKCkgdG9cbitcdCAqIGF0b21pY2FsbHkgaGFuZGxlIHRoZSAxLVx1MDAzZTAgdHJhbnNpdGlvbiwgdGhlIGdldCBzaWRlIGhhcyBub1xuK1x0ICogZXF1aXZhbGVudCBjb21iaW5lZCBwcmltaXRpdmUgZm9yIDAtXHUwMDNlMS4gUmVjaGVjayB1bmRlciB0aGVcbitcdCAqIGxvY2sgc2luY2UgYW5vdGhlciBnZXQgbWF5IGhhdmUgYWxyZWFkeSBkb25lIHRoZSAwLVx1MDAzZTFcbitcdCAqIHRyYW5zaXRpb24gYWZ0ZXIgYm90aCBzYXcgYXRvbWljX2luY19ub3RfemVybygpIGZhaWwuXG4rXHQgKi9cbitcdGlmIChhdG9taWNfaW5jX25vdF96ZXJvKHBhbXRfcmVmY291bnQpKVxuK1x0XHRnb3RvIG91dF9mcmVlO1xuK1xuK1x0dGR4X3N0YXR1cyA9IHRkaF9waHltZW1fcGFtdF9hZGQocGZuLCBwYW10X3BhZ2VzKTtcbitcdGlmIChXQVJOX09OX09OQ0UodGR4X3N0YXR1cyAhPSBURFhfU1VDQ0VTUykpIHtcbitcdFx0cmV0ID0gLUVJTztcbitcdFx0Z290byBvdXRfZnJlZTtcbitcdH1cbitcbitcdC8qXG4rXHQgKiBUaGUgcmVmY291bnQgaXMgemVybywgYW5kIHRoaXMgbG9ja2VkIHBhdGggaXMgdGhlXG4rXHQgKiBvbmx5IHdheSB0byBpbmNyZWFzZSBpdCBmcm9tIDAtXHUwMDNlMS5cbitcdCAqL1xuK1x0YXRvbWljX3NldChwYW10X3JlZmNvdW50LCAxKTtcbitcdHNwaW5fdW5sb2NrKFx1MDAyNnBhbXRfbG9jayk7XG4rXHRyZXR1cm4gMDtcbitcbitvdXRfZnJlZTpcbitcdHNwaW5fdW5sb2NrKFx1MDAyNnBhbXRfbG9jayk7XG4rXHRmcmVlX3BhbXRfYXJyYXkocGFtdF9wYWdlcyk7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitFWFBPUlRfU1lNQk9MX0ZPUl9LVk0odGR4X3BhbXRfZ2V0KTtcbitcbisvKiBEcm9wIFBBTVQgcmVmY291bnQgZm9yIHRoZSBnaXZlbiBwZm4gYW5kIGZyZWUgUEFNVCBiYWNraW5nIGlmIG5lZWRlZC4gKi9cbit2b2lkIHRkeF9wYW10X3B1dChrdm1fcGZuX3QgcGZuKVxuK3tcbitcdHN0cnVjdCBwYWdlICpwYW10X3BhZ2VzW1REWF9EUEFNVF9FTlRSWV9QQUdFX0NOVF0gPSB7fTtcbitcdGF0b21pY190ICpwYW10X3JlZmNvdW50O1xuK1x0dTY0IHRkeF9zdGF0dXM7XG4rXG4rXHRpZiAoIXRkeF9zdXBwb3J0c19keW5hbWljX3BhbXQoXHUwMDI2dGR4X3N5c2luZm8pKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRwYW10X3JlZmNvdW50ID0gdGR4X2ZpbmRfcGFtdF9yZWZjb3VudChwZm4pO1xuK1xuK1x0LypcbitcdCAqIElmIHRoZXJlIGlzIG1vcmUgdGhhbiAxIHJlZmVyZW5jZSBvbiB0aGUgcGFtdCBwYWdlLCBkb24ndFxuK1x0ICogcmVtb3ZlIGl0IHlldC4gSnVzdCBkZWNyZW1lbnQgdGhlIHJlZmNvdW50LlxuK1x0ICovXG4rXHRpZiAoIWF0b21pY19kZWNfYW5kX2xvY2socGFtdF9yZWZjb3VudCwgXHUwMDI2cGFtdF9sb2NrKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0dGR4X3N0YXR1cyA9IHRkaF9waHltZW1fcGFtdF9yZW1vdmUocGZuLCBwYW10X3BhZ2VzKTtcbitcbitcdC8qXG4rXHQgKiBEb24ndCBmcmVlIHBhbXRfcGFnZXMgYXMgaXQgY291bGQgaG9sZCBnYXJiYWdlIHdoZW5cbitcdCAqIHRkaF9waHltZW1fcGFtdF9yZW1vdmUoKSBmYWlscy4gIERvbid0IHBhbmljL0JVR19PTigpLCBhc1xuK1x0ICogdGhlcmUgaXMgbm8gcmlzayBvZiBkYXRhIGNvcnJ1cHRpb24sIGJ1dCBkbyB5ZWxsIGxvdWRseSBhc1xuK1x0ICogZmFpbHVyZSBpbmRpY2F0ZXMgYSBrZXJuZWwgYnVnLCBtZW1vcnkgaXMgYmVpbmcgbGVha2VkLCBhbmRcbitcdCAqIHRoZSBkYW5nbGluZyBQQU1UIGVudHJ5IG1heSBjYXVzZSBmdXR1cmUgb3BlcmF0aW9ucyB0byBmYWlsLlxuK1x0ICovXG4rXHRpZiAoV0FSTl9PTl9PTkNFKHRkeF9zdGF0dXMgIT0gVERYX1NVQ0NFU1MpKSB7XG4rXHRcdC8qXG4rXHRcdCAqIGF0b21pY19kZWNfYW5kX2xvY2soKSBhbHJlYWR5IGRlY3JlbWVudGVkIGl0IHRvIDAsXG4rXHRcdCAqIGJ1dCB0aGUgUEFNVCBlbnRyeSBzdGlsbCBleGlzdHMgc2luY2UgUkVNT1ZFIGZhaWxlZC5cbitcdFx0ICovXG4rXHRcdGF0b21pY19zZXQocGFtdF9yZWZjb3VudCwgMSk7XG4rXHRcdGdvdG8gb3V0X3VubG9jaztcbitcdH1cbitcbitcdHNwaW5fdW5sb2NrKFx1MDAyNnBhbXRfbG9jayk7XG4rXHRmcmVlX3BhbXRfYXJyYXkocGFtdF9wYWdlcyk7XG4rXHRyZXR1cm47XG4rb3V0X3VubG9jazpcbitcdHNwaW5fdW5sb2NrKFx1MDAyNnBhbXRfbG9jayk7XG4rfVxuK0VYUE9SVF9TWU1CT0xfRk9SX0tWTSh0ZHhfcGFtdF9wdXQpO1xuK1xuK3ZvaWQgdGR4X2ZyZWVfcGFtdF9jYWNoZShzdHJ1Y3QgdGR4X3BhbXRfY2FjaGUgKmNhY2hlKVxuK3tcbitcdHN0cnVjdCBwYWdlICpwYWdlO1xuK1xuK1x0d2hpbGUgKChwYWdlID0gdGR4X2FsbG9jX3BhZ2VfcGFtdF9jYWNoZShjYWNoZSkpKVxuK1x0XHRfX2ZyZWVfcGFnZShwYWdlKTtcbit9XG4rRVhQT1JUX1NZTUJPTF9GT1JfS1ZNKHRkeF9mcmVlX3BhbXRfY2FjaGUpO1xuK1xuK2ludCB0ZHhfdG9wdXBfcGFtdF9jYWNoZShzdHJ1Y3QgdGR4X3BhbXRfY2FjaGUgKmNhY2hlLCB1bnNpZ25lZCBsb25nIG5wYWdlcylcbit7XG4rXHRpZiAoV0FSTl9PTl9PTkNFKCF0ZHhfc3VwcG9ydHNfZHluYW1pY19wYW10KFx1MDAyNnRkeF9zeXNpbmZvKSkpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0bnBhZ2VzICo9IFREWF9EUEFNVF9FTlRSWV9QQUdFX0NOVDtcbitcbitcdHdoaWxlIChjYWNoZS1cdTAwM2VjbnQgXHUwMDNjIG5wYWdlcykge1xuK1x0XHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbitcbitcdFx0aWYgKCFwYWdlKVxuK1x0XHRcdHJldHVybiAtRU5PTUVNO1xuK1xuK1x0XHRsaXN0X2FkZChcdTAwMjZwYWdlLVx1MDAzZWxydSwgXHUwMDI2Y2FjaGUtXHUwMDNlcGFnZV9saXN0KTtcbitcdFx0Y2FjaGUtXHUwMDNlY250Kys7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rRVhQT1JUX1NZTUJPTF9GT1JfS1ZNKHRkeF90b3B1cF9wYW10X2NhY2hlKTtcbitcbisvKlxuKyAqIFJldHVybiBhIHBhZ2UgdGhhdCBjYW4gYmUgZ2lmdGVkIHRvIHRoZSBURFgtTW9kdWxlIGZvciB1c2UgYXMgYSBcImNvbnRyb2xcIlxuKyAqIHBhZ2UsIGkuZS4gcGFnZXMgdGhhdCBhcmUgdXNlZCBmb3IgY29udHJvbCBzdHJ1Y3R1cmVzIGZvciBhIGdpdmVuIFREWFxuKyAqIGd1ZXN0LCBhbmQgdGh1cyBvYnRhaW4gVERYIHByb3RlY3Rpb25zLCBpbmNsdWRpbmcgUEFNVCB0cmFja2luZy5cbisgKi9cbitzdHJ1Y3QgcGFnZSAqdGR4X2FsbG9jX2NvbnRyb2xfcGFnZSh2b2lkKVxuK3tcbitcdHN0cnVjdCBwYWdlICpwYWdlO1xuK1xuK1x0cGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbitcdGlmICghcGFnZSlcbitcdFx0cmV0dXJuIE5VTEw7XG4rXG4rXHRpZiAodGR4X3BhbXRfZ2V0KHBhZ2VfdG9fcGZuKHBhZ2UpLCBOVUxMKSkge1xuK1x0XHRfX2ZyZWVfcGFnZShwYWdlKTtcbitcdFx0cmV0dXJuIE5VTEw7XG4rXHR9XG4rXG4rXHRyZXR1cm4gcGFnZTtcbit9XG4rRVhQT1JUX1NZTUJPTF9GT1JfS1ZNKHRkeF9hbGxvY19jb250cm9sX3BhZ2UpO1xuK1xuKy8qXG4rICogRnJlZSBhIHBhZ2UgdGhhdCB3YXMgZ2lmdGVkIHRvIHRoZSBURFgtTW9kdWxlIGZvciB1c2UgYXMgYSBjb250cm9sXG4rICogcGFnZS4gQWZ0ZXIgdGhpcywgdGhlIHBhZ2UgaXMgbm8gbG9uZ2VyIHByb3RlY3RlZCBieSBURFguXG4rICovXG4rdm9pZCB0ZHhfZnJlZV9jb250cm9sX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpXG4re1xuK1x0aWYgKCFwYWdlKVxuK1x0XHRyZXR1cm47XG4rXG4rXHR0ZHhfcGFtdF9wdXQocGFnZV90b19wZm4ocGFnZSkpO1xuK1x0X19mcmVlX3BhZ2UocGFnZSk7XG4rfVxuK0VYUE9SVF9TWU1CT0xfRk9SX0tWTSh0ZHhfZnJlZV9jb250cm9sX3BhZ2UpO1xuK1xuK3N0YXRpYyBpbnQgX19pbml0IHRkeF9kcGFtdF9zZXR1cChjaGFyICpzdHIpXG4re1xuK1x0cmV0dXJuIGtzdHJ0b2Jvb2woc3RyLCBcdTAwMjZ0ZHhfZW5hYmxlX2RwYW10KSA9PSAwO1xuK31cbitcbitfX3NldHVwKFwidGR4X2RwYW10PVwiLCB0ZHhfZHBhbXRfc2V0dXApO1xuK1xuIHZvaWQgdGR4X3N5c19kaXNhYmxlKHZvaWQpXG4ge1xuIFx0c3RydWN0IHRkeF9tb2R1bGVfYXJncyBhcmdzID0ge307XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5oIGIvYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5oXG5pbmRleCBiZGZkMGUxZTMzN2FjMC4uYTg4NmM1NGRlY2FhZGMgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmhcbisrKyBiL2FyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguaFxuQEAgLTQ4LDYgKzQ4LDggQEBcbiAjZGVmaW5lIFRESF9TWVNfQ09ORklHXHRcdFx0NDVcbiAjZGVmaW5lIFRESF9TWVNfU0hVVERPV05cdFx0NTJcbiAjZGVmaW5lIFRESF9TWVNfVVBEQVRFXHRcdFx0NTNcbisjZGVmaW5lIFRESF9QSFlNRU1fUEFNVF9BRERcdFx0NThcbisjZGVmaW5lIFRESF9QSFlNRU1fUEFNVF9SRU1PVkVcdFx0NTlcbiAjZGVmaW5lIFRESF9TWVNfRElTQUJMRVx0XHRcdDY5XG4gXG4gLypcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4X2dsb2JhbF9tZXRhZGF0YS5jIGIvYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeF9nbG9iYWxfbWV0YWRhdGEuY1xuaW5kZXggZTQ5YzMwMGYyM2Q0MzUuLjgzOTNkMmFhNTlkYmU3IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeF9nbG9iYWxfbWV0YWRhdGEuY1xuKysrIGIvYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeF9nbG9iYWxfbWV0YWRhdGEuY1xuQEAgLTEsNiArMSw2IEBAXG4gLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAvKlxuLSAqIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZ1bmN0aW9ucyB0byByZWFkIFREWCBnbG9iYWwgbWV0YWRhdGEuXG4rICogRnVuY3Rpb25zIHRvIHJlYWQgVERYIGdsb2JhbCBtZXRhZGF0YS5cbiAgKlxuICAqIFRoaXMgZmlsZSBkb2Vzbid0IGNvbXBpbGUgb24gaXRzIG93biBhcyBpdCBsYWNrcyBvZiBpbmNsdXNpb25cbiAgKiBvZiBTRUFNQ0FMTCB3cmFwcGVyIHByaW1pdGl2ZSB3aGljaCByZWFkcyBnbG9iYWwgbWV0YWRhdGEuXG5AQCAtMzMsNiArMzMsMTggQEAgc3RhdGljIF9faW5pdCBpbnQgZ2V0X3RkeF9zeXNfaW5mb19mZWF0dXJlcyhzdHJ1Y3QgdGR4X3N5c19pbmZvX2ZlYXR1cmVzICpzeXNpbmZcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuK3N0YXRpYyBfX2luaXQgaW50IGdldF90ZHhfc3lzX2luZm9fdGRtcl9kcGFtdChzdHJ1Y3QgdGR4X3N5c19pbmZvX3RkbXIgKnN5c2luZm9fdGRtcilcbit7XG4rXHRpbnQgcmV0O1xuK1x0dTY0IHZhbDtcbitcbitcdHJldCA9IHJlYWRfc3lzX21ldGFkYXRhX2ZpZWxkKDB4OTEwMDAwMDEwMDAwMDAxMywgXHUwMDI2dmFsKTtcbitcdGlmICghcmV0KVxuK1x0XHRzeXNpbmZvX3RkbXItXHUwMDNlcGFtdF9wYWdlX2JpdG1hcF9lbnRyeV9iaXRzID0gdmFsO1xuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4gc3RhdGljIF9faW5pdCBpbnQgZ2V0X3RkeF9zeXNfaW5mb190ZG1yKHN0cnVjdCB0ZHhfc3lzX2luZm9fdGRtciAqc3lzaW5mb190ZG1yKVxuIHtcbiBcdGludCByZXQgPSAwO1xuQEAgLTEyOSw1ICsxNDEsMTQgQEAgc3RhdGljIF9faW5pdCBpbnQgZ2V0X3RkeF9zeXNfaW5mbyhzdHJ1Y3QgdGR4X3N5c19pbmZvICpzeXNpbmZvKVxuIFx0cmV0ID0gcmV0ID86IGdldF90ZHhfc3lzX2luZm9fdGRfY3RybChcdTAwMjZzeXNpbmZvLVx1MDAzZXRkX2N0cmwpO1xuIFx0cmV0ID0gcmV0ID86IGdldF90ZHhfc3lzX2luZm9fdGRfY29uZihcdTAwMjZzeXNpbmZvLVx1MDAzZXRkX2NvbmYpO1xuIFxuK1x0LypcbitcdCAqIFRoZSBrZXJuZWwgc3VwcG9ydHMgdXNpbmcgVERYIHdpdGhvdXQgRHluYW1pYyBQQU1ULCBzb1xuK1x0ICogYXZvaWQgcmVwb3J0aW5nIGZhaWx1cmUgaWYgaXQncyBub3Qgc3VwcG9ydGVkLiBEb24ndCB0cnlcbitcdCAqIHRvIHN1cHBvcnQgYnVnZ3kgVERYIG1vZHVsZXMgdGhhdCBhZHZlcnRpc2UgRHluYW1pYyBQQU1UXG4rXHQgKiBidXQgZG9uJ3QgZXhwb3NlIHRoZSBtZXRhZGF0YS5cbitcdCAqL1xuK1x0aWYgKCFyZXQgXHUwMDI2XHUwMDI2IHRkeF9zdXBwb3J0c19keW5hbWljX3BhbXQoc3lzaW5mbykpXG4rXHRcdHJldCA9IGdldF90ZHhfc3lzX2luZm9fdGRtcl9kcGFtdChcdTAwMjZzeXNpbmZvLVx1MDAzZXRkbXIpO1xuK1xuIFx0cmV0dXJuIHJldDtcbiB9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxMDo1NToyMy4wNDE3NDQwNzNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTcwNjA3NjA3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEeW5hbWljIFBBTVQgU3VwcG9ydCBmb3IgVERYIGluIEtWTSAtIFJlYWNoYWJpbGl0eSBBbmFseXNpcyoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggaW50cm9kdWNpbmcgXCJEeW5hbWljIFBBTVRcIiBmb3IgSW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgaW4gS1ZNL3g4Ni4gSXQncyBhIHNpZ25pZmljYW50IGNoYW5nZSwgdG91Y2hpbmcgYSBsb3Qgb2YgY29yZSBmaWxlczogZG9jdW1lbnRhdGlvbiwgaGVhZGVycywgYW5kIHNldmVyYWwgS1ZNIG1vZHVsZXMgKG1tdSwgdm14LCBURFggc3BlY2lmaWMgY29kZSwgZXRjLikuIEl0IGxvb2tzIGxpa2UgaXQgYWRkcyBhIG5ldyBrZXJuZWwgcGFyYW1ldGVyLCBgdGR4X2RwYW10YCwgYW5kIGEgc3VpdGUgb2YgbmV3IGZ1bmN0aW9ucyByZWxhdGVkIHRvIFBBTVQgY2FjaGUgbWFuYWdlbWVudCAoYHRkeF9wYW10X2dldGAsIGB0ZHhfcGFtdF9wdXRgLCBgdGR4X3RvcHVwX3BhbXRfY2FjaGVgLCBldGMuKS4gVGhlIE1NVSBpcyBhbHNvIGJlaW5nIHVwZGF0ZWQgdG8gY2FsbCBgdGR4X3RvcHVwX2V4dGVybmFsX3BhbXRfY2FjaGVgLiBUaGlzIGlzIGFsbCBwcmV0dHkgc3Vic3RhbnRpYWwuXG5cblRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gaXM6IElzIHRoaXMgY29kZSBwYXRoIGV2ZW4gKnJlYWNoYWJsZSogaW4gYSBzdGFuZGFyZCBlbnZpcm9ubWVudCwgZXNwZWNpYWxseSB3aGVuIGNvbnNpZGVyaW5nIHRoZSBjb250ZXh0IHByb3ZpZGVkPyBURFgsIGFzIEkgdW5kZXJzdGFuZCBpdCwgcmVsaWVzIG9uIHNwZWNpZmljIEludGVsIGhhcmR3YXJlLiBJdCdzIGEgdmlydHVhbGl6YXRpb24gZmVhdHVyZSwgc28gSSBuZWVkIHRvIHRoaW5rIGFib3V0IGhvdyB0aGlzIGludGVyYWN0cyB3aXRoIFFFTVUgYW5kIG90aGVyIGVudmlyb25tZW50cy4gU3RhbmRhcmQgUUVNVSBkb2Vzbid0IGVtdWxhdGUgVERYIGhhcmR3YXJlIG5hdGl2ZWx5IHdpdGhvdXQgS1ZNIFREWCBzdXBwb3J0LCBhbmQgZXZlbiB0aGVuLCBpdCBkZXBlbmRzIG9uIGFjdHVhbCBURFggaGFyZHdhcmUgdG8gcnVuIFREWCBndWVzdHMuXG5cbkJ1dCwgYW5kIHRoaXMgaXMgaW1wb3J0YW50LCBTeXprYWxsZXIgaGVhdmlseSBmdXp6ZXogS1ZNLiBBbmQgS1ZNIFREWCBzdXBwb3J0ICppcyogYmVpbmcgdXBzdHJlYW1lZC4gU28sIHRoZSBuZXh0IHRob3VnaHQgaXM6IElzIFN5emthbGxlciBmdXp6aW5nIFREWD8gSSBuZWVkIHRvIGNoZWNrLiBFdmVuIGlmIFN5emthbGxlciBpcyBmdXp6aW5nIEtWTSwgaXQgd2lsbCBwcm9iYWJseSBkZXBlbmQgb24gVERYIGhhcmR3YXJlIHNldHVwIHRvIGFjdHVhbGx5IGVuYWJsZSBURFguIFRoaXMgd291bGQgbGlrZWx5IGNhdXNlIGB0ZHhfaGFyZHdhcmVfc2V0dXBgIHRvIGZhaWwgb3IganVzdCBub3QgZW5hYmxlIFREWC5cblxuVGhlbiwgdGhlcmUncyB0aGUgR0NFIChHb29nbGUgQ29tcHV0ZSBFbmdpbmUpIGZhY3Rvci4gU3l6a2FsbGVyIHJ1bnMgb24gR0NFLCBhbmQgR0NFICpkb2VzKiBoYXZlIFREWCBpbnN0YW5jZXMgKHNwZWNpZmljYWxseSwgQzMgaW5zdGFuY2VzKS4gQnV0IGRvZXMgU3l6a2FsbGVyIGFjdHVhbGx5ICp1c2UqIHRob3NlIFREWCBpbnN0YW5jZXM/IEkgbmVlZCB0byB2ZXJpZnkgdGhhdC4gSSBuZWVkIHRvIGNoZWNrIGlmIHRoaXMgY29kZSBwYXRoIGlzIGFjdHVhbGx5IHJlYWNoYWJsZSB3aXRoaW4gU3l6a2FsbGVyJ3Mgc2V0dXAuXG5cbklmIFREWCBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBDUFUsIGB0ZHhfaGFyZHdhcmVfc2V0dXBgIHdpbGwgbm90IGVuYWJsZSBpdCwgc28gaWYgbXkgdGFyZ2V0IGhhcmR3YXJlIGRvZXNuJ3Qgc3VwcG9ydCBURFgsIEkgY2FuIGRpc3JlZ2FyZCB0aGlzLiBUaGlzIG1heSBiZSB0aGUga2V5LlxuXG5Ob3csIHRoZSBwcm9tcHQgc3BlY2lmaWNhbGx5IG1lbnRpb25zIGNvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSBpZiB0aGUgaGFyZHdhcmUgaXMgbm90IGF2YWlsYWJsZS4gVGhlbiBpdCBvZmZlcnMgZXhhbXBsZXMsIGxpa2UgdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIFREWCBmYWxscyBpbnRvIHRoaXMgY2F0ZWdvcnkuXG5cblREWCBpcyBhICpDUFUqIGZlYXR1cmUsIG5vdCBhIFBDSWUgY2FyZCwgc28gdGhhdCBleGFtcGxlIGRvZXNuJ3QgcXVpdGUgYXBwbHkuIEhvd2V2ZXIsIGl0IHN0aWxsIGRlcGVuZHMgb24gdGhlIENQVSBoYXZpbmcgVERYIGNhcGFiaWxpdHkuIFNvLCB0aGlzIGNvbWVzIGJhY2sgdG8gbXkgcHJldmlvdXMgcG9pbnRzLiBMZXQncyBjaGVjayBpZiB0aGlzIHNwZWNpZmljIGltcGxlbWVudGF0aW9uICh1c2luZyB0aGUgYHRkeF9oYXJkd2FyZV9zZXR1cGAgcGF0aCkgaXMgY29uc2lkZXJlZCByZWFjaGFibGUuXG5cbkknbGwgc2VhcmNoIGZvciBgdGR4X2hhcmR3YXJlX3NldHVwYCBvciBgdGR4X2luaXRfbW9kdWxlYC4gVGhhdCBzaG91bGQgdGVsbCBtZSBpZiB3ZSBzaG91bGQgY29uc2lkZXIgaXQgcmVhY2hhYmxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzIzNSwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkzMywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDEwOjU1OjM0Ljc0NzgyMjc0MVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjg0NDk5NTM2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRkeF9oYXJkd2FyZV9zZXR1cFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vdm14L21haW4uYz0yND1zdGF0aWMgX19pbml0IGludCB2dF9oYXJkd2FyZV9zZXR1cCh2b2lkKVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMzEtXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6MzI6XFx0cmV0dXJuIGVuYWJsZV90ZHggPyB0ZHhfaGFyZHdhcmVfc2V0dXAoKSA6IDA7XFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMzMtfVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYz0zMzk0PXZvaWQgdGR4X2hhcmR3YXJlX3Vuc2V0dXAodm9pZClcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMzM5OC1cXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jOjMzOTk6c3RhdGljIGludCBfX2luaXQgX190ZHhfaGFyZHdhcmVfc2V0dXAodm9pZClcXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTM0MDAte1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0zNDcyLVxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmM6MzQ3MzppbnQgX19pbml0IHRkeF9oYXJkd2FyZV9zZXR1cCh2b2lkKVxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMzQ3NC17XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTM1MDgtXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYzozNTA5OlxcdHIgPSBfX3RkeF9oYXJkd2FyZV9zZXR1cCgpO1xcbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMzUxMC1cXHRpZiAocikge1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguaC05LVxcbmFyY2gveDg2L2t2bS92bXgvdGR4Lmg6MTA6aW50IHRkeF9oYXJkd2FyZV9zZXR1cCh2b2lkKTtcXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5oLTExLXZvaWQgdGR4X2hhcmR3YXJlX3Vuc2V0dXAodm9pZCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDEwOjU1OjM3LjQzMjMyNzcyN1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5MDgwMTM3MDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBURFggSGFyZHdhcmUgU2V0dXAqKlxuXG5Pa2F5LCBsZXQncyB0cmFjZSB0aGlzIHRocm91Z2guIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBleGVjdXRpb24gZmxvdywgZXNwZWNpYWxseSBhcm91bmQgdGhlIFREWCBoYXJkd2FyZSBjb25maWd1cmF0aW9uLiBUaGUgY3J1Y2lhbCBmdW5jdGlvbiBzZWVtcyB0byBiZSBgdGR4X2hhcmR3YXJlX3NldHVwYC4gSSBzZWUgaXQncyBkZWZpbml0ZWx5IGJlaW5nIGNhbGxlZCwgZ29vZC4gYHZ0X2hhcmR3YXJlX3NldHVwYCBjYWxscyBpdCwgd2hpY2ggZ2l2ZXMgbWUgYSBzdGFydGluZyBwb2ludC4gTm93LCBhIGNyaXRpY2FsIHF1ZXN0aW9uIGlzIHRoZSBpbml0aWFsIHN0YXRlOiBpcyBgZW5hYmxlX3RkeGAgc2V0IHRvIHRydWUgYnkgZGVmYXVsdD8gVGhhdCdzIHdoYXQgSSByZWFsbHkgbmVlZCB0byBrbm93IHRvIHVuZGVyc3RhbmQgdGhlIHN5c3RlbSdzIGJhc2VsaW5lIGJlaGF2aW9yLiBJIG5lZWQgdG8gY29uZmlybSBpdHMgZGVmYXVsdCB2YWx1ZS4gS25vd2luZyB0aGUgZGVmYXVsdCB2YWx1ZSBvZiBgZW5hYmxlX3RkeGAgd2lsbCBzaWduaWZpY2FudGx5IGlsbHVtaW5hdGUgdGhlIHVzdWFsIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb24gcHJvZmlsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTkzNjIsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxMDo1NTo0MC4zNDAzNDUzNloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTg2NDA3NDQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImVuYWJsZV90ZHhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9MTY9c3RhdGljIHZvaWQgdnRfZGlzYWJsZV92aXJ0dWFsaXphdGlvbl9jcHUodm9pZClcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTE4LVxcdC8qIE5vdGUsIFREWCAqYW5kKiBWTVggbmVlZCB0byBiZSBkaXNhYmxlZCBpZiBURFggaXMgZW5hYmxlZC4gKi9cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzoxOTpcXHRpZiAoZW5hYmxlX3RkeClcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0yMC1cXHRcXHR0ZHhfZGlzYWJsZV92aXJ0dWFsaXphdGlvbl9jcHUoKTtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTI0PXN0YXRpYyBfX2luaXQgaW50IHZ0X2hhcmR3YXJlX3NldHVwKHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0zMS1cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzozMjpcXHRyZXR1cm4gZW5hYmxlX3RkeCA/IHRkeF9oYXJkd2FyZV9zZXR1cCgpIDogMDtcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0zMy19XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz0zNT1zdGF0aWMgdm9pZCB2dF9oYXJkd2FyZV91bnNldHVwKHZvaWQpXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMzYte1xcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjM3OlxcdGlmIChlbmFibGVfdGR4KVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTM4LVxcdFxcdHRkeF9oYXJkd2FyZV91bnNldHVwKCk7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz0xMDUwPXN0YXRpYyBpbnQgX19pbml0IHZ0X2luaXQodm9pZClcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTEwNjUtXFx0dmNwdV9hbGlnbiA9IF9fYWxpZ25vZl9fKHN0cnVjdCB2Y3B1X3ZteCk7XFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6MTA2NjpcXHRpZiAoZW5hYmxlX3RkeCkge1xcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTEwNjctXFx0XFx0dmNwdV9zaXplID0gbWF4X3QodW5zaWduZWQsIHZjcHVfc2l6ZSxcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtNTUtXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYzo1Njpib29sIGVuYWJsZV90ZHggX19yb19hZnRlcl9pbml0O1xcbmFyY2gveDg2L2t2bS92bXgvdGR4LmM6NTc6bW9kdWxlX3BhcmFtX25hbWVkKHRkeCwgZW5hYmxlX3RkeCwgYm9vbCwgMDQ0NCk7XFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy01OC1cXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmM9MzQ3Mz1pbnQgX19pbml0IHRkeF9oYXJkd2FyZV9zZXR1cCh2b2lkKVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0zNDgwLVxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmM6MzQ4MTpcXHRpZiAoIWVuYWJsZV90ZHgpXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0zNDgyLVxcdFxcdHJldHVybiAwO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0zNTQwLXN1Y2Nlc3NfZGlzYWJsZV90ZHg6XFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYzozNTQxOlxcdGVuYWJsZV90ZHggPSAwO1xcbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMzU0Mi1cXHRyZXR1cm4gMDtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdGR4Lmg9MTE9dm9pZCB0ZHhfaGFyZHdhcmVfdW5zZXR1cCh2b2lkKTtcXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5oLTEyLVxcbmFyY2gveDg2L2t2bS92bXgvdGR4Lmg6MTM6ZXh0ZXJuIGJvb2wgZW5hYmxlX3RkeDtcXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5oLTE0LVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguaD0xODc9VERYX0JVSUxEX1REVlBTX0FDQ0VTU09SUyg2NCwgU1RBVEVfTk9OX0FSQ0gsIHN0YXRlX25vbl9hcmNoKTtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmgtMTg5LSNlbHNlXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguaDoxOTA6I2RlZmluZSBlbmFibGVfdGR4XFx0MFxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmgtMTkxLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxMDo1NTo0Mi4zMjY3NTg3NzdaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NDgxMDAwMjE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlREWCBGdXp6aW5nIEZlYXNpYmlsaXR5IC0gQSBRdWljayBBdWRpdCoqXG5cbk9rYXksIHNvIGBlbmFibGVfdGR4YCBtYXBzIHRvIGBrdm1faW50ZWwudGR4YCwgdGhhdCdzIHN0cmFpZ2h0Zm9yd2FyZC4gVGhlIHF1ZXN0aW9uIGlzOiBjYW4gd2UgKmFjdHVhbGx5KiBmdXp6IFREWD8gSSBrbm93IGZyb20gZXhwZXJpZW5jZSB0aGF0IFREWCByZXF1aXJlcyBzcGVjaWZpYyBoYXJkd2FyZSBzdXBwb3J0LiBTdGFuZGFyZCBTeXprYWxsZXIgR0NFIGluc3RhbmNlcyBhcmVuJ3QgbGlrZWx5IHRvIGhhdmUgdGhhdCB1bmxlc3Mgc29tZW9uZSBzcGVjaWZpY2FsbHkgc2V0IHRoZW0gdXAuIEFuZCwgc2luY2UgUUVNVSBkb2Vzbid0IGVtdWxhdGUgVERYIG5hdGl2ZWx5LCB0aGF0J3MgYW5vdGhlciBodXJkbGUuXG5cbkJ1dCBoYW5nIG9u4oCmIGlmIFN5emthbGxlciAqd2FzKiBydW5uaW5nIG9uIFREWCBoYXJkd2FyZSAoaGlnaGx5IHVubGlrZWx5LCBidXQgcG9zc2libGUpLCB0aGVuIG1heWJlPyBBaCwgcmlnaHQsIHRoZSBwcm9tcHQgc2F5cyB0byBpZ25vcmUgdGhpbmdzIHRoYXQgYXJlIHVucmVhY2hhYmxlIGluIHZpcnR1YWxpemF0aW9uLCB3aGljaCB3b3VsZCBpbmNsdWRlIGVtdWxhdGVkIGhhcmR3YXJlLiBTbywgaXMgVERYIG9uZSBvZiB0aG9zZSDigJxpbXBvc3NpYmxl4oCdIGNhc2VzIGluIEdDRSBvciBRRU1VP1xuXG5Ib2xkIG9uLi4uIEknbSBnZXR0aW5nIGFoZWFkIG9mIG15c2VsZiwgR0NFICpkb2VzKiBvZmZlciBURFggaW5zdGFuY2VzIChDMyBzZXJpZXMhKSwgYW5kIFFFTVUvS1ZNICpkb2VzKiBzdXBwb3J0IFREWC4gU28sIG15IGluaXRpYWwgYXNzdW1wdGlvbiB3YXMgd3JvbmchIE9rYXksIHRoZSBwbG90IHRoaWNrZW5zLiBOb3csIGRvZXMgKnRoaXMgc3BlY2lmaWMgcGF0Y2gqIGFjdHVhbGx5IGludHJvZHVjZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzLCBhbnl0aGluZyB3b3J0aCBmdXp6aW5nPyBZZXMsIGl0J3MgYWJvdXQgRHluYW1pYyBQQU1UIHN1cHBvcnQuIFNvIGlzIGl0IHJlYWNoYWJsZT9cblxuSWYgaXQncyByZWFjaGFibGUsIGl0J3Mgd29ydGggZnV6emluZy4gVG8gZmlndXJlIG91dCByZWFjaGFiaWxpdHksIEkgbmVlZCB0byBjaGVjayBgdGR4X3N1cHBvcnRzX2R5bmFtaWNfcGFtdGAsIHdoaWNoIGRlcGVuZHMgb24gYHRkeF9lbmFibGVfZHBhbXRgLiBBaCwgYW5kICp0aGF0KiBwYXJhbWV0ZXIgaXMgY29udHJvbGxlZCBieSBgdGR4X2RwYW10PW9uYCBrZXJuZWwgcGFyYW1ldGVyLiBCdXQgdGhlIHByb21wdCBpcyBhc2tpbmcgZm9yIGBFbmFibGVDb25maWdzYCBub3Qga2VybmVsIHBhcmFtZXRlcnMuIFdhaXQsIHRoYXQncyBLY29uZmlnISBJIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgZm9yIFREWCByZWxhdGVkIG9wdGlvbnMgbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDY0NCwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxMDo1NTo0OC44MDc3NjA4MzZaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIwNDU4MTM2NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSU5URUxfVERYX0hPU1RcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvS2NvbmZpZz0xODQ0PWNvbmZpZyBYODZfVVNFUl9TSEFET1dfU1RBQ0tcXG4tLVxcbmFyY2gveDg2L0tjb25maWctMTg2My1cXG5hcmNoL3g4Ni9LY29uZmlnOjE4NjQ6Y29uZmlnIElOVEVMX1REWF9IT1NUXFxuYXJjaC94ODYvS2NvbmZpZy0xODY1LVxcdGJvb2wgXFxcIkludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIGhvc3Qgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTA6NTU6NTEuMDEyMzQ3MDczWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzEyNjg2MjY4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQXNzZXNzaW5nIElOVEVMX1REWF9IT1NUIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHRpbWUgdG8gZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiTGV0J3MgbWFrZSBzdXJlIHRoZSBgSU5URUxfVERYX0hPU1RgIGRlcGVuZGVuY2llcyBhcmUgYWxsIHNxdWFyZWQgYXdheS5cIiBJJ20gbWVudGFsbHkgcnVubmluZyB0aHJvdWdoIHRoZSBwcm9iYWJsZSBsaXN0OiB0aGUgaHlwZXJ2aXNvciwgdGhlIGZpcm13YXJlLCB0aGUgc3BlY2lmaWMgQ1BVIG1pY3JvY29kZSByZXZpc2lvbiwgbGlrZWx5IGNlcnRhaW4ga2VybmVsIHZlcnNpb25zLi4uIEknbSBsb29raW5nIGZvciBhbnkgb2J2aW91cyByZWQgZmxhZ3MsIGtub3duIGluY29tcGF0aWJpbGl0aWVzLCBvciBvdmVybG9va2VkIHByZXJlcXVpc2l0ZXMgdGhhdCBjb3VsZCB0cmlwIHVzIHVwIGxhdGVyLiBJIG5lZWQgdG8gYmUgbWV0aG9kaWNhbCBoZXJlOyBtaXNzaW5nIGV2ZW4gYSBzZWVtaW5nbHkgbWlub3IgZGVwZW5kZW5jeSBjYW4gbGVhZCB0byBvYnNjdXJlIGFuZCBmcnVzdHJhdGluZyBkZWJ1Z2dpbmcgZG93biB0aGUgbGluZSwgcGFydGljdWxhcmx5IHdpdGggc29tZXRoaW5nIGFzIGNvbXBsZXggYXMgVERYLiBCZXN0IHRvIGdldCB0aGlzIGZvdW5kYXRpb25hbCBzdHVmZiB2YWxpZGF0ZWQgZWFybHkuIExldCdzIHNlZSB3aGF0IHRoZSBkb2N1bWVudGF0aW9uIHN1Z2dlc3RzIGFuZCBjcm9zcy1yZWZlcmVuY2UgdGhhdCB3aXRoIHRoZSBjdXJyZW50IHBsYXRmb3JtIGNvbmZpZ3VyYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNTAwLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTA6NTU6NTQuMTM5MjEzNDA2WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MTI0MzcxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSU5URUxfVERYX0hPU1RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9LY29uZmlnPTE4NDQ9Y29uZmlnIFg4Nl9VU0VSX1NIQURPV19TVEFDS1xcbi0tXFxuYXJjaC94ODYvS2NvbmZpZy0xODYzLVxcbmFyY2gveDg2L0tjb25maWc6MTg2NDpjb25maWcgSU5URUxfVERYX0hPU1RcXG5hcmNoL3g4Ni9LY29uZmlnLTE4NjUtXFx0Ym9vbCBcXFwiSW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgaG9zdCBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxMDo1NTo1NC4yMjA0NjI1OTdaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc0MTgzODQ4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBhcyBpZiB0aGV5J3JlIG15IG93bjpcblxuKipBbmFseXppbmcgdGhlIEtjb25maWcgZm9yIElOVEVMX1REWF9IT1NUKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgaW50byB0aGUgZGV0YWlscy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHB1bGwgdXAgdGhlIEtjb25maWcgZmlsZSBmb3IgYElOVEVMX1REWF9IT1NUYC4gSSBuZWVkIGEgY2xlYXIgdW5kZXJzdGFuZGluZyBvZiB3aGF04oCZcyBnb2luZyBvbiB3aXRoIHRoaXMgY29uZmlndXJhdGlvbiBvcHRpb24uIEtub3dpbmcgdGhpcyBpcyB0aGUgZm91bmRhdGlvbiBmb3IgZXZlcnl0aGluZyBlbHNlLCBzbyBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSB3YW50IHRvIHNlZSB0aGUgZGVwZW5kZW5jaWVzLCB0aGUgZGVmYXVsdHMsIHRoZSBoZWxwIHRleHQg4oCTIHRoZSB3aG9sZSBzaGViYW5nLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIGxvZ2ljIG9mIHRoZSBmZWF0dXJlIGxpdmVzIGFuZCB0aGlzIGNvbmZpZyBpcyBrZXkgZm9yIGFueXRoaW5nIHJlbGF0ZWQgdG8gSW50ZWwgVERYIGhvc3QgZnVuY3Rpb25hbGl0eSwgSSBuZWVkIHRvIGtub3cgd2hlcmUgaXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIHBpY3R1cmUuIExldOKAmXMgZ2V0IHRvIHJlYWRpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxODM2LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTA6NTU6NTcuOTYyMzA0MDVaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDEzMzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTg2MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTg2MDpcXHRcXHQgIFNlZSBEb2N1bWVudGF0aW9uL2FyY2gveDg2L3Noc3RrLnJzdCBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cXG4xODYxOlxcdFxcbjE4NjI6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbjE4NjM6XFx0XFxuMTg2NDpcXHRjb25maWcgSU5URUxfVERYX0hPU1RcXG4xODY1OlxcdFxcdGJvb2wgXFxcIkludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIGhvc3Qgc3VwcG9ydFxcXCJcXG4xODY2OlxcdFxcdGRlcGVuZHMgb24gQ1BVX1NVUF9JTlRFTFxcbjE4Njc6XFx0XFx0ZGVwZW5kcyBvbiBYODZfNjRcXG4xODY4OlxcdFxcdGRlcGVuZHMgb24gS1ZNX0lOVEVMXFxuMTg2OTpcXHRcXHRkZXBlbmRzIG9uIFg4Nl9YMkFQSUNcXG4xODcwOlxcdFxcdHNlbGVjdCBBUkNIX0tFRVBfTUVNQkxPQ0tcXG4xODcxOlxcdFxcdGRlcGVuZHMgb24gQ09OVElHX0FMTE9DXFxuMTg3MjpcXHRcXHRkZXBlbmRzIG9uIFg4Nl9NQ0VcXG4xODczOlxcdFxcdGhlbHBcXG4xODc0OlxcdFxcdCAgSW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgcHJvdGVjdHMgZ3Vlc3QgVk1zIGZyb20gbWFsaWNpb3VzXFxuMTg3NTpcXHRcXHQgIGhvc3QgYW5kIGNlcnRhaW4gcGh5c2ljYWwgYXR0YWNrcy4gIFRoaXMgb3B0aW9uIGVuYWJsZXMgbmVjZXNzYXJ5IFREWFxcbjE4NzY6XFx0XFx0ICBzdXBwb3J0IGluIHRoZSBob3N0IGtlcm5lbCB0byBydW4gY29uZmlkZW50aWFsIFZNcy5cXG4xODc3OlxcdFxcbjE4Nzg6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbjE4Nzk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDEwOjU1OjU3Ljk2MjcyMDI0WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwOTAwNzg5NDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCBmcmFtZWQgYXMgbXkgaW50ZXJuYWwgdGhvdWdodCBwcm9jZXNzOlxuXG4qKlREWCBDb25maWd1cmF0aW9uIElucXVpcnkqKlxuXG5SaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBhbmQgaXQgc2VlbXMgYElOVEVMX1REWF9IT1NUYCBpcyB0aGUga2V5IGNvbmZpZ3VyYXRpb24gc2V0dGluZyBoZXJlLiBCdXQsIGhhbmcgb24gYSBzZWNvbmQuLi4gaXMgdGhlcmUgZXZlbiBhIEtWTS1zcGVjaWZpYyBjb25maWd1cmF0aW9uIGZvciBURFg/IEkgbmVlZCB0byBjbGFyaWZ5IGlmIHRoaXMgaXMganVzdCBhIGdlbmVyYWwgc2V0dGluZyBvciBpZiBpdCBuZWVkcyB0byBiZSBpbnRlZ3JhdGVkIGludG8gdGhlIEtWTSBlbnZpcm9ubWVudC4gSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIHRoZSBLVk0gZG9jdW1lbnRhdGlvbiB0byBzZWUgaWYgdGhlcmUncyBhIGRlZGljYXRlZCBzZXR0aW5nIGZvciBURFggdW5kZXIgdGhlIGhvb2QsIG9yIGlmIHRoaXMgZ2VuZXJhbCBzZXR0aW5nIGlzIHN1ZmZpY2llbnQgZm9yIGVuYWJsaW5nIHRoZSBmZWF0dXJlIGluIHRoYXQgY29udGV4dC4gVGhpcyBpcyBzb21ldGhpbmcgSSBuZWVkIHRvIGZ1bGx5IHVuZGVyc3RhbmQgYmVmb3JlIEkgcHJvY2VlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIzNjMsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDEwOjU2OjAxLjA1MjgwMzc0OVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI2OTMzMDgxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgS1ZNX0lOVEVMX1REWFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZz0xMjI9Y29uZmlnIFg4Nl9TR1hfS1ZNXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzMtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTM0OmNvbmZpZyBLVk1fSU5URUxfVERYXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTM1LVxcdGJvb2wgXFxcIkludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDEwOjU2OjAzLjMyMjE0MTM5OVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjY5NTE4MTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0aGUgbWF0dGVyLCBzdW1tYXJpemVkIGFzIHJlcXVlc3RlZDpcblxuKipLVk0gQ29uZmlndXJhdGlvbiBEZWVwIERpdmUqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBLVk0gY29uZmlndXJhdGlvbiBhbmQgd2hhdCdzIGdvaW5nIG9uIGF0IGxpbmUgMTM0IGluIGBhcmNoL3g4Ni9rdm0vS2NvbmZpZ2AuIExldCBtZSBwdWxsIHVwIHRoYXQgZmlsZS4uLiByaWdodCwgdGhlIEtjb25maWcgZmlsZSBmb3IgdGhlIHg4NiBLVk0gYXJjaGl0ZWN0dXJlLiBJ4oCZbSBndWVzc2luZyBpdCdzIHNvbWUgc29ydCBvZiBmZWF0dXJlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIG9yIGEgZGVwZW5kZW5jeSBjaGVjay4gSSBuZWVkIHRvIGJlIHN1cmUgSSB1bmRlcnN0YW5kIGl0cyBpbXBsaWNhdGlvbnMuIEknbGwgbmVlZCB0byByZW1lbWJlciB0byBjcm9zcy1yZWZlcmVuY2UgdGhpcyB3aXRoIHJlbGV2YW50IGNvZGUgaW4gdGhlIGBrdm1gIGRpcmVjdG9yeSBhbmQgdW5kZXJzdGFuZCBob3cgdGhlIHBhcnRpY3VsYXIgY29uZmlnIGludGVyYWN0cyB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBoeXBlcnZpc29yLiBUaGlzIGlzIGhvdyBJIGJ1aWxkIGEgY29tcHJlaGVuc2l2ZSBwaWN0dXJlLiBUaW1lIHRvIGdldCBzdGFydGVkIVxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjY3NiwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDEwOjU2OjA2LjU5MTY2MjE4OFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDg2MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTMwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTMwOlxcdFxcdCAgZ3Vlc3RzIHZpYSBhIGRldmljZSBub2RlLCBlLmcuIC9kZXYvc2d4X3ZlcGMuXFxuIDEzMTpcXHRcXG4gMTMyOlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gMTMzOlxcdFxcbiAxMzQ6XFx0Y29uZmlnIEtWTV9JTlRFTF9URFhcXG4gMTM1OlxcdFxcdGJvb2wgXFxcIkludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIHN1cHBvcnRcXFwiXFxuIDEzNjpcXHRcXHRkZWZhdWx0IHlcXG4gMTM3OlxcdFxcdGRlcGVuZHMgb24gSU5URUxfVERYX0hPU1RcXG4gMTM4OlxcdFxcdHNlbGVjdCBLVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU1xcbiAxMzk6XFx0XFx0c2VsZWN0IEhBVkVfS1ZNX0FSQ0hfR01FTV9QT1BVTEFURVxcbiAxNDA6XFx0XFx0aGVscFxcbiAxNDE6XFx0XFx0ICBQcm92aWRlcyBzdXBwb3J0IGZvciBsYXVuY2hpbmcgSW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWClcXG4gMTQyOlxcdFxcdCAgY29uZmlkZW50aWFsIFZNcyBvbiBJbnRlbCBwcm9jZXNzb3JzLlxcbiAxNDM6XFx0XFxuIDE0NDpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuIDE0NTpcXHRcXG4gMTQ2OlxcdGNvbmZpZyBLVk1fQU1EXFxuIDE0NzpcXHRcXHR0cmlzdGF0ZSBcXFwiS1ZNIGZvciBBTUQgcHJvY2Vzc29ycyBzdXBwb3J0XFxcIlxcbiAxNDg6XFx0XFx0ZGVwZW5kcyBvbiBLVk0gXFx1MDAyNlxcdTAwMjYgKENQVV9TVVBfQU1EIHx8IENQVV9TVVBfSFlHT04pXFxuIDE0OTpcXHRcXHRoZWxwXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDEwOjU2OjA2LjU5MTc3MjgwOFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTUwNzQ2MzExMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipXb3J0aCBGdXp6aW5nIERlY2lzaW9uOiBURFggUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCB0cnlpbmcgdG8gZGVjaWRlIGlmIGl0J3Mgd29ydGggZnV6emluZy4gVGhlIGtleSBoZXJlIHNlZW1zIHRvIGJlIGBLVk1fSU5URUxfVERYYCBhbmQgYElOVEVMX1REWF9IT1NUYCwgdGhlIHJlbGV2YW50IGNvbmZpZ3MuIFRoZSBwcm9tcHQgaXMgYXNraW5nIGlmIHRoaXMgY29kZSBjYW4gYmUgcmVhY2hlZCwgc3BlY2lmaWNhbGx5LCBpZiBpdCdzIFwiaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVS4uLlwiLiBURFggaXMgYSAqaGFyZHdhcmUqIGZlYXR1cmUsIHNvIHRoYXQncyB0aGUgc3RpY2tpbmcgcG9pbnQuXG5cbkNhbiBzdGFuZGFyZCBRRU1VIGhpdCB0aGlzPyBOb3BlLCBRRU1VIGRvZXNuJ3QgZW11bGF0ZSBURFguIEl0ICpjYW4qIHJ1biBhcyBhIFREWCBob3N0LCBidXQgb25seSBpZiB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSBoYXMgdGhlIHN1cHBvcnQuIFN5emthbGxlciBydW5zIG9uIEdDRSwgYW5kIEdDRSAqZG9lcyogaGF2ZSBURFggaW5zdGFuY2VzLCBzbyB0aGF04oCZcyBhIHBvc3NpYmlsaXR5LiBJIHdhcyBpbml0aWFsbHkgbGVhbmluZyB0b3dhcmQgXCJpbXBvc3NpYmxlIHRvIHJlYWNoXCIgYnV0IHRoZW4gcmVhbGl6ZWQgdGhhdCBTeXprYWxsZXIgd2lsbCB0ZXN0IFREWCBpZiBpdCBjYW4uIEl0IGhlYXZpbHkgdGVzdHMgS1ZNLCBhbmQgaWYgVERYIGlzIGVuYWJsZWQsIGl0IHNob3VsZCBiZSB0ZXN0ZWQuXG5cbkJ1dCB0aGVuIEkgc2F3IHRoZSBrZXJuZWwgcGFyYW1ldGVyLCBgdGR4X2RwYW10PW9uYC4gVGhhdOKAmXMgYSBwb3RlbnRpYWwgcm9hZGJsb2NrLiBJZiBpdOKAmXMgbm90IHNldCwgYHRkeF9lbmFibGVfZHBhbXRgIGlzIGZhbHNlLCBhbmQgdGhlIGNvZGUgcGF0aCBpcyB1bnJlYWNoYWJsZS4gU3l6a2FsbGVyIGRvZXNuJ3QgYXV0b21hdGljYWxseSBwYXNzIG5ldyBrZXJuZWwgcGFyYW1ldGVycyB1bmxlc3MgaXQncyBjb25maWd1cmVkIHRvIGRvIHNvLiBIb3dldmVyLCB0aGUgcHJvbXB0IGlzIGFza2luZyBhYm91dCBmdW5jdGlvbmFsIGNoYW5nZXMsIHNvIHRoZSBwYXJhbWV0ZXIgYXNwZWN0IGlzIGEgc2Vjb25kYXJ5IGNvbnNpZGVyYXRpb24gYXQgdGhpcyBzdGFnZS5cblxuVGhlbiBJIGhhZCB0byByZW1pbmQgbXlzZWxmIG9mIHRoZSBwcm9tcHQncyB3b3JkaW5nOiBpdCBzcGVjaWZpY2FsbHkgbWVudGlvbnMgXCJDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmVcIi4gTm93LCBRRU1VLCBpbiBhICpzdGFuZGFyZCogY29uZmlndXJhdGlvbiAod2l0aG91dCBLVk0gYW5kIFREWCBoYXJkd2FyZSkgY2Fu4oCZdCBlbXVsYXRlIFREWCwgc28gdGhlIGZlYXR1cmUgd291bGQgYmUgaW5hY2Nlc3NpYmxlLiBRRU1VIGRvZXMgKm5vdCogZW11bGF0ZSBpdCEgVERYIHJlcXVpcmVzIHBoeXNpY2FsIENQVSBzdXBwb3J0IGFuZCBhIFREWCBtb2R1bGUgbG9hZGVkIGJ5IHRoZSBCSU9TL2Zpcm13YXJlLiBTbywgaW4gc3RhbmRhcmQgUUVNVSBvciBldmVuIEtWTSB3aXRob3V0IHRoZSBURFggbW9kdWxlLCBpdCAqaXMqIHVucmVhY2hhYmxlLlxuXG5JIGNoZWNrZWQgaWYgU3l6a2FsbGVyIGhhcyBhbnkgc3BlY2lmaWMgYHFlbXVfdGR4YCBjb25maWcsIGJ1dCBuby4gSXQgcnVucyBLVk0sIGFuZCBzb21lIEdDRSBpbnN0YW5jZXMgbWlnaHQgaGF2ZSBURFgsIGJ1dCBtb3N0IGRlZmF1bHQgb25lcyBwcm9iYWJseSBkb24ndC4gSG93ZXZlciwgdGhlIHByb21wdCBhbHNvIHNheXMgdG8gY29uc2lkZXIgaWYgY29kZSByZXF1aXJlcyB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycywgdGhhdCByZXF1aXJlIHBoeXNpY2FsIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBURFggaXMgYSBDUFUgZmVhdHVyZSwgc28gaXQncyBub3QgdGhlIHNhbWUuXG5cbkFuZCB0aGVuIEkgaGFkIGEgYnJlYWt0aHJvdWdoISBLVk0gZmVhdHVyZXMgbGlrZSBTRVYgYW5kIFREWCBhcmUgKm9mdGVuKiB0ZXN0ZWQgYnkgc3l6a2FsbGVyIGlmIHRoZXkgcnVuIG9uIGNhcGFibGUgaGFyZHdhcmUuIFN5emthbGxlciBoYXMgcG9vbHMgZm9yIEFNRCBTRVYgYW5kIEludGVsIFREWCwgc3BlY2lmaWNhbGx5IGZvciB0aGlzIHB1cnBvc2UuIFRoZXNlIGFyZSBjb3JlIEtWTS94ODYgY29kZSwgbm90IGEgdmVuZG9yLXNwZWNpZmljIFBDSWUgY2FyZCwgc28gdGhhdCdzIHRoZSBkaWZmZXJlbmNlLiBUaGUgZnVuY3Rpb25zIEkgbmVlZCB0byBmb2N1cyBvbiBhcmUgYHRkeF9wYW10X2dldGAsIGB0ZHhfcGFtdF9wdXRgLCBgdGR4X3RvcHVwX3BhbXRfY2FjaGVgLCBgdGR4X2FsbG9jX2NvbnRyb2xfcGFnZWAsIGFuZCBgdGR4X2ZyZWVfY29udHJvbF9wYWdlYC4gVGhlc2UgYXJlIGNhbGxlZCBmcm9tIEtWTSBNTVUgYW5kIFREWCB2Y3B1L3ZtIGluaXQgY29kZS4gU28sIEkgaGF2ZSB0byBjb25zaWRlciB0aGlzIGluIHRoYXQgY29udGV4dCwgYW5kIGdpdmVuIHRoYXQgdGhlc2UgYXJlIGNvcmUgZnVuY3Rpb25zIG9mIHRoZSBURFggaW1wbGVtZW50YXRpb24sIHRoZSBhbnN3ZXIgaXMgV29ydGhGdXp6aW5nPXRydWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMjE2LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Nzg4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTA6NTY6MTguMDk5MjM5MTdaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2NDE0MzE1NzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTF9GT1JfS1ZNXFxcXCh0ZHhfcGFtdF9nZXRcXFxcKVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM9MjE1OT1pbnQgdGR4X3BhbXRfZ2V0KGt2bV9wZm5fdCBwZm4sIHN0cnVjdCB0ZHhfcGFtdF9jYWNoZSAqY2FjaGUpXFxuLS1cXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtMjIxMy19XFxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jOjIyMTQ6RVhQT1JUX1NZTUJPTF9GT1JfS1ZNKHRkeF9wYW10X2dldCk7XFxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jLTIyMTUtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDEwOjU2OjIwLjc0MDY3NzgwOFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4ODcxODE5NTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlREWCBTdXBwb3J0IEFuYWx5c2lzIGZvciBGdXp6aW5nKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBjb25maXJtaW5nIHRoYXQgdGhlIFREWCBmdW5jdGlvbnMgYXJlLCBpbiBmYWN0LCBleHBvcnRlZCBmb3IgS1ZNLiBUaGUgbWFpbiBvbmVzIEknbSBzZWVpbmcgYXJlIGB0ZHhfcGFtdF9nZXRgLCBgdGR4X3BhbXRfcHV0YCwgYHRkeF90b3B1cF9wYW10X2NhY2hlYCwgYHRkeF9hbGxvY19jb250cm9sX3BhZ2VgLCBhbmQgYHRkeF9mcmVlX2NvbnRyb2xfcGFnZWAuIEkgcXVpY2tseSBzZWUgdGhhdCBgdGR4X3BhbXRfZ2V0YCBpcyBjYWxsZWQgd2l0aGluIGJvdGggYHRkeF9zZXB0X21hcF9ub25sZWFmX3NwdGVgIGFuZCBgdGR4X3NlcHRfbWFwX2xlYWZfc3B0ZWAsIGFuZCBgdGR4X2FsbG9jX2NvbnRyb2xfcGFnZWAgZ2V0cyBjYWxsZWQgZnJvbSBgX190ZHhfdGRfaW5pdGAgYW5kIGB0ZHhfdGRfdmNwdV9pbml0YC4gVGhpcyBjb25maXJtcyB0aGV5IGFyZSBkZWZpbml0ZWx5IHJlYWNoYWJsZSBpZiBURFggaXMgZW5hYmxlZC5cblxuTm93LCBsZXQncyBsb29rIGF0IHRoZSBgRW5hYmxlQ29uZmlnc2AuIEkgc2VlIGBJTlRFTF9URFhfSE9TVGAsIGBLVk1fSU5URUxfVERYYCwgYW5kIGBLVk1fSU5URUxgLiBJJ2xsIHZlcmlmeSB0aGUgZGVwZW5kZW5jaWVzIGZvciBgS1ZNX0lOVEVMX1REWGAuIEl0IGRlcGVuZHMgb24gYElOVEVMX1REWF9IT1NUYCwgd2hpY2ggaW4gdHVybiBkZXBlbmRzIG9uIGBDUFVfU1VQX0lOVEVMYCwgYFg4Nl82NGAsIGBLVk1fSU5URUxgLCBgWDg2X1gyQVBJQ2AsIGBDT05USUdfQUxMT0NgLCBhbmQgYFg4Nl9NQ0VgLiBUaGlzIG1lYW5zIHRoZSBgRW5hYmxlQ29uZmlnc2AgbmVlZCB0byBpbmNsdWRlIGJvdGggYElOVEVMX1REWF9IT1NUYCBhbmQgYEtWTV9JTlRFTF9URFhgIHRvIGZ1bmN0aW9uLlxuXG5UaGUgcXVlc3Rpb24gdGhlbiBpcywgaXMgdGhlcmUgYW55IHJlYXNvbiB0byByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWA/IFRoZSBjb25jZXJuIGlzIFwiQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLlwiIENhbiBURFggYmUgcmVhY2hlZCBpbiBRRU1VPyBXZWxsLCBpZiBRRU1VIGlzIHJ1biB3aXRoIEtWTSBvbiBhIFREWC1jYXBhYmxlIGhvc3QsIHRoZW4geWVzLiBJZiBpdCdzIHJ1bm5pbmcgd2l0aCBUQ0csIHRoZW4gbm8uIFN5emthbGxlciBydW5zIFFFTVUgd2l0aCBLVk0sIHNvIGlmIHRoZSBob3N0IGhhcyBURFgsIGl0J3MgcmVhY2hhYmxlLiBUaGUgY3J1Y2lhbCBwb2ludCBpcyB0aGF0IFREWCwgbGlrZSBTRVYgb3IgU0dYLCBpcyBnZW5lcmFsbHkgY29uc2lkZXJlZCByZWFjaGFibGUgYmVjYXVzZSBTeXprYWxsZXIgY2FuIGJlIGRlcGxveWVkIG9uIGhhcmR3YXJlIHRoYXQgc3VwcG9ydHMgdGhlc2UgQ1BVIGZlYXR1cmVzLiBWZW5kb3Itc3BlY2lmaWMgUENJZSBjYXJkcyBhcmUgZXhwbGljaXRseSBjb25zaWRlcmVkIHVucmVhY2hhYmxlLCBidXQgVERYIGlzIGEgQ1BVIGZlYXR1cmUgdGhhdCBpcyBhdmFpbGFibGUgaW4gc3RhbmRhcmQgY2xvdWQgVk1zIChsaWtlIEdDUCBDMyBpbnN0YW5jZXMpLCBzbyB0aGlzIGlzIGEgY3J1Y2lhbCBkaXN0aW5jdGlvbi4gVGhlcmVmb3JlLCBURFggaXMgYWJzb2x1dGVseSByZWFjaGFibGUuXG5cbkxldCdzIGRvdWJsZS1jaGVjayBgRm9jdXNTeW1ib2xzYC4gSSBzZWUgdGhlIHNhbWUgZnVuY3Rpb25zIGFzIGJlZm9yZTogYHRkeF9wYW10X2dldGAsIGB0ZHhfcGFtdF9wdXRgLCBgdGR4X3RvcHVwX3BhbXRfY2FjaGVgLCBgdGR4X2FsbG9jX2NvbnRyb2xfcGFnZWAsIGB0ZHhfZnJlZV9jb250cm9sX3BhZ2VgLCBwbHVzIGB0ZHhfc3VwcG9ydHNfZHluYW1pY19wYW10YCBhbmQgYHRkeF90b3B1cF9leHRlcm5hbF9wYW10X2NhY2hlYCAod2hpY2ggaXMgc3RhdGljIGluIGBhcmNoL3g4Ni9rdm0vdm14L3RkeC5jYCkuIE5lZWQgdG8gcmV2aWV3IGB0ZHhfdG9wdXBfZXh0ZXJuYWxfcGFtdF9jYWNoZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0OTM2LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjY4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDEwOjU2OjI5LjYxMjQ5OTU1OFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIwNDEzMjkxNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0ZHhfdG9wdXBfZXh0ZXJuYWxfcGFtdF9jYWNoZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vdm14L3RkeC5jPTE2MTc9dm9pZCB0ZHhfbG9hZF9tbXVfcGdkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaHBhX3Qgcm9vdF9ocGEsIGludCBwZ2RfbGV2ZWwpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTE2MjctXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYzoxNjI4OnN0YXRpYyBpbnQgdGR4X3RvcHVwX2V4dGVybmFsX3BhbXRfY2FjaGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgbWluX25yX3NwdHMpXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0xNjI5LXtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmM9MzQ3Mz1pbnQgX19pbml0IHRkeF9oYXJkd2FyZV9zZXR1cCh2b2lkKVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0zNTM0LVxcdGlmICh0ZHhfc3VwcG9ydHNfZHluYW1pY19wYW10KHRkeF9zeXNpbmZvKSlcXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jOjM1MzU6XFx0XFx0dnRfeDg2X29wcy50b3B1cF9leHRlcm5hbF9jYWNoZSA9IHRkeF90b3B1cF9leHRlcm5hbF9wYW10X2NhY2hlO1xcbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMzUzNi1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTA6NTY6MzEuODE2NjM3NDg2WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzOTczNTgxMTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBFeHBvc2VkIEZ1bmN0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQsIHJpZ2h0IG9mZiB0aGUgYmF0LCBJIHNlZSBzb21ldGhpbmcgc3RhdGljLiBHaXZlbiBteSB1c3VhbCBwcmVmZXJlbmNlcyBmb3IgY2xhcml0eSBhbmQgdGVzdGFiaWxpdHksIEkgaW1tZWRpYXRlbHkgdGhpbmsgdGhhdCB3ZSBzaG91bGQgZXhjbHVkZSBpdCBmcm9tIHRoZSBgRm9jdXNTeW1ib2xzYCBsaXN0LiBOb24tc3RhdGljIGlzIHVzdWFsbHkgYmV0dGVyLlxuXG5Ob3csIGxldCdzIGJyZWFrIGRvd24gdGhlc2UgZXhwb3J0ZWQgZnVuY3Rpb25zLiBXZSBoYXZlIGB0ZHhfcGFtdF9nZXRgLCBgdGR4X3BhbXRfcHV0YCwgYHRkeF90b3B1cF9wYW10X2NhY2hlYCwgYHRkeF9hbGxvY19jb250cm9sX3BhZ2VgLCBhbmQgYHRkeF9mcmVlX2NvbnRyb2xfcGFnZWAuIFRoYXQncyBhIHNvbGlkIHNldCwgYSBnb29kIHN0YXJ0LiBJJ20gbm90aW5nIHRoZSBjbGVhciBnZXQvcHV0IHBhdHRlcm4gaGVyZSwgYW5kIHRoZSBjb250cm9sIHBhZ2UgYWxsb2NhdGlvbi9kZWFsbG9jYXRpb24gcGFpci4gVGhlIGNhY2hlIHRvcC11cCBmdW5jdGlvbiBpcyBpbnRlcmVzdGluZzsgaXQgc3VnZ2VzdHMgYSBwZXJmb3JtYW5jZS1mb2N1c2VkIGRlc2lnbi5cblxuQnV0IGhvbGQgb24sIGFyZSB0aG9zZSAqYWxsKiB0aGUgZXhwb3J0ZWQgZnVuY3Rpb25zPyBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcgY3J1Y2lhbC4gQWgsIHllcywgdGhlcmUgYXJlIHR3byBtb3JlOiBgdGR4X3N1cHBvcnRzX2R5bmFtaWNfcGFtdGAgYW5kIGB0ZHhfZnJlZV9wYW10X2NhY2hlYC4gKkR5bmFtaWMgcGFtdCBzdXBwb3J0KiBpcyBhbiBpbnRlcmVzdGluZyBhZGRpdGlvbiwgYW5kIGEgY2FjaGUgZGVhbGxvY2F0aW9uIGZ1bmN0aW9uIG1lYW5zIGEgY29tcGxldGUgbWVtb3J5IGxpZmVjeWNsZSBpcyBhY2NvdW50ZWQgZm9yLiBPa2F5LCB3aXRoIGFsbCBvZiB0aGlzIGluZm9ybWF0aW9uLCBJIGNhbiBtb3ZlIG9uIHRvIHRoZSBuZXh0IHN0ZXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2NjM4LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDEwOjU2OjM2LjIxMzk5NzY0OVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzAxNjI4NDYxMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MX0ZPUl9LVk1cXFxcKHRkeF9mcmVlX3BhbXRfY2FjaGVcXFxcKVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM9MjI2MT12b2lkIHRkeF9mcmVlX3BhbXRfY2FjaGUoc3RydWN0IHRkeF9wYW10X2NhY2hlICpjYWNoZSlcXG4tLVxcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYy0yMjY3LX1cXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM6MjI2ODpFWFBPUlRfU1lNQk9MX0ZPUl9LVk0odGR4X2ZyZWVfcGFtdF9jYWNoZSk7XFxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jLTIyNjktXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDEwOjU2OjM5LjIzMDI4NzcyM1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NzQ0NDg2MTA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBURFggRHluYW1pYyBQQU1UIENvZGUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgdGR4X2ZyZWVfcGFtdF9jYWNoZWAsIHNwZWNpZmljYWxseS4gSSd2ZSBnb3QgYSBsaXN0IG9mIGZvY3VzIHN5bWJvbHMgaW4gbWluZDogYHRkeF9wYW10X2dldGAsIGB0ZHhfcGFtdF9wdXRgLCBgdGR4X3RvcHVwX3BhbXRfY2FjaGVgLCBgdGR4X2ZyZWVfcGFtdF9jYWNoZWAsIGB0ZHhfYWxsb2NfY29udHJvbF9wYWdlYCwgYW5kIGB0ZHhfZnJlZV9jb250cm9sX3BhZ2VgLiBNeSBpbml0aWFsIHF1ZXN0aW9uIGlzIHdoZXRoZXIgc2V0dGluZyBgdGR4X2RwYW10PW9uYCBpcyBhIHByZXJlcXVpc2l0ZSBmb3IgdGhpcyBjb2RlIHBhdGguXG5cblJpZ2h0LCBgdGR4X3N1cHBvcnRzX2R5bmFtaWNfcGFtdGAgY2hlY2tzIGB0ZHhfZW5hYmxlX2RwYW10YCwgd2hpY2ggKmlzKiBzZXQgYnkgdGhlIGB0ZHhfZHBhbXQ9b25gIGtlcm5lbCBwYXJhbWV0ZXIuIElmIHRoZSBwYXJhbWV0ZXIgaXMgYWJzZW50LCBgdGR4X3N1cHBvcnRzX2R5bmFtaWNfcGFtdGAgcmV0dXJucyBmYWxzZSwgYW5kIGEgbGFyZ2UgcG9ydGlvbiBvZiB0aGlzIGR5bmFtaWMgUEFNVCBsb2dpYyBpcyBieXBhc3NlZC4gQnV0IHdhaXQsIGB0ZHhfYWxsb2NfY29udHJvbF9wYWdlYCAqY2FsbHMqIGB0ZHhfcGFtdF9nZXRgLiBOb3cgSSdtIHVuZGVyc3RhbmRpbmc7IGV2ZW4gaWYgYHRkeF9zdXBwb3J0c19keW5hbWljX3BhbXRgIGlzIGZhbHNlLCBgdGR4X3BhbXRfZ2V0YCB3aWxsIHN0aWxsIGJlIGNhbGxlZCwgYnV0IGl0IHdpbGwgaW1tZWRpYXRlbHkgcmV0dXJuIDAuIFNvLCB0aGlzIGNvZGUgKmlzKiByZWFjaGFibGUsIGV2ZW4gd2l0aG91dCBgdGR4X2RwYW10PW9uYCwgYnV0IHRoZSBkeW5hbWljIFBBTVQgZmVhdHVyZXMgd2lsbCBvbmx5IGJlIGFjdGl2ZSBpZiB0aGUgcGFyYW1ldGVyIGlzIGFjdHVhbGx5IHNldC5cblxuTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uIGlzOiBpcyB0aGlzIGEgcG90ZW50aWFsIGlzc3VlIGZvciBmdXp6aW5nPyBUaGlua2luZyBpdCB0aHJvdWdoLCBTeXprYWxsZXIgKmNhbiogYmUgY29uZmlndXJlZCB0byBwYXNzIGtlcm5lbCBwYXJhbWV0ZXJzLCBzbyBpdCdzIHBlcmZlY3RseSBjYXBhYmxlIG9mIHNldHRpbmcgYHRkeF9kcGFtdD1vbmAuIEdpdmVuIHRoYXQsIGFuZCB0aGUgZmFjdCB0aGF0IHRoaXMgaXMgY29yZSBrZXJuZWwgZnVuY3Rpb25hbGl0eSwgSSdtIGNvbmZpZGVudCB3ZSBzaG91bGQgbWFyayB0aGlzIGFzIGBXb3J0aEZ1enppbmc9dHJ1ZWAuXG5cbkp1c3QgdG8gY292ZXIgYWxsIHRoZSBiYXNlcywgbGV0J3MgcXVpY2tseSByZXZpZXcgdGhlIEVuYWJsZUNvbmZpZ3MgdGhhdCBjb21lIGludG8gcGxheSBoZXJlLiBJJ20gc2VlaW5nIGBJTlRFTF9URFhfSE9TVGAgYW5kIGBLVk1fSU5URUxfVERYYC4gV2FpdC4uLiBJIG5lZWQgdG8gZG91YmxlLWNoZWNrOiBEb2VzIGBLVk1fSU5URUxfVERYYCBoYXZlIGRlcGVuZGVuY2llcyBJIG5lZWQgdG8gdGFrZSBpbnRvIGNvbnNpZGVyYXRpb24/IFJpZ2h0LCBiYWNrIHRvIGBhcmNoL3g4Ni9rdm0vS2NvbmZpZ2AgdG8gcmVmcmVzaCBteSBtZW1vcnkuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjcyMjIsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTA6NTY6NDUuOTc0Nzc2NjVaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMDUyODgyMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgS1ZNX0lOVEVMX1REWFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZz0xMjI9Y29uZmlnIFg4Nl9TR1hfS1ZNXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzMtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTM0OmNvbmZpZyBLVk1fSU5URUxfVERYXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTM1LVxcdGJvb2wgXFxcIkludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDEwOjU2OjQ2LjA5NTMxMDY1MloiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTUwNjA2MTE5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgVERYIEtWTSBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBzdXBwb3J0IGZvciB0aGUgRHluYW1pYyBQaHlzaWNhbCBBZGRyZXNzIE1ldGFkYXRhIFRhYmxlIChQQU1UKSBmb3IgSW50ZWwgVERYIHdpdGhpbiB0aGUgS1ZNL3g4NiBlbnZpcm9ubWVudC4gIEkgbmVlZCB0byBjb25maXJtIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zOiBpdCdzIGNsZWFyIHRoYXQgYEtWTV9JTlRFTF9URFhgIGRlcGVuZHMgb24gYElOVEVMX1REWF9IT1NUYCwgc28gdGhvc2UgYXJlIHRoZSBrZXkgY29uZmlndXJhdGlvbnMgSSdsbCBuZWVkIHRvIGVuYWJsZSBmb3IgdGVzdGluZy5cblxuTm93LCBsZXQncyBuYWlsIGRvd24gdGhlIGZ1bmN0aW9ucyB0aGF0IGFyZSBtb2RpZmllZCBvciBhZGRlZCBieSB0aGlzIHBhdGNoLCBzbyBJIGNhbiBmb2N1cyBteSBmdXp6aW5nIGVmZm9ydHMuICBJJ3ZlIGlkZW50aWZpZWQgdGhlc2UgYXMgdGhlIG1vc3QgbGlrZWx5IGFyZWFzIG9mIGNvbmNlcm4sIGJhc2VkIG9uIHRoZSB0ZXh0OiBgdGR4X3BhbXRfZ2V0YCwgYHRkeF9wYW10X3B1dGAsIGB0ZHhfdG9wdXBfcGFtdF9jYWNoZWAsIGB0ZHhfZnJlZV9wYW10X2NhY2hlYCwgYHRkeF9hbGxvY19jb250cm9sX3BhZ2VgLCBhbmQgYHRkeF9mcmVlX2NvbnRyb2xfcGFnZWAuIFRoZXkgYXJlIGV4cG9ydGVkIGZvciBLVk0uXG5cbkkndmUgYWxzbyBzY2FubmVkIGBhcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmNgIGZvciBhbnkgb3RoZXIgZnVuY3Rpb25zIHRoYXQgd2VyZSBtb2RpZmllZCBvciBpbnRyb2R1Y2VkLCBidXQgdGhleSBhcHBlYXIgdG8gYmUgc3RhdGljIGhlbHBlcnMuIFRoZXNlIGFyZSB0aGUgb25lcyBJIGZvdW5kOiBgaW5pdF9wYW10X3JlZmNvdW50c2AsIGBmcmVlX3BhbXRfcmVmY291bnRzYCwgYHRkeF9maW5kX3BhbXRfcmVmY291bnRgLCBgdGRtcl9nZXRfcGFtdF9iaXRtYXBfc3pgLCBgdGRtcl9nZXRfcGFtdF9zemAsIGB0ZG1yX3NldF91cF9wYW10YCwgYHRkbXJzX3NldF91cF9wYW10X2FsbGAsIGBjb25maWdfdGR4X21vZHVsZWAsIGBpbml0X3RkeF9tb2R1bGVgLCBgdGR4X2FsbG9jX3BhZ2VfcGFtdF9jYWNoZWAsIGBhbGxvY19kcGFtdF9wYWdlYCwgYGFsbG9jX3BhbXRfYXJyYXlgLCBgZnJlZV9wYW10X2FycmF5YCwgYHBhbXRfMm1iX2FyZ2AsIGB0ZGhfcGh5bWVtX3BhbXRfYWRkYCwgYHRkaF9waHltZW1fcGFtdF9yZW1vdmVgLlxuXG5NeSBtYWluIGNvbmNlcm4gd2l0aCB0aGUgZXhwb3J0ZWQgZnVuY3Rpb25zIGlzIHRoYXQgdGhleSBhcmUgbGlrZWx5IHRvIGJlIHVzZWQgYnkgS1ZNIGNvZGUsIGFuZCBhcmUgdGh1cyBtb3JlIGxpa2VseSB0byBiZSBzdWJqZWN0IHRvIGEgcmFuZ2Ugb2YgaW5wdXRzLiBTaW5jZSB0aGlzIHBhdGNoIGludHJvZHVjZXMgZHluYW1pYyBhbGxvY2F0aW9uIGFuZCBmcmVlaW5nIG9mIFBBTVQgbWVtb3J5LCBJIGhhdmUgdG8gZW5zdXJlIHRoYXQgbWVtb3J5IG1hbmFnZW1lbnQgaXMgY29ycmVjdCBpbiB0aGlzIFREWCBpbXBsZW1lbnRhdGlvbiBhbmQgdGhhdCBtZW1vcnkgbGVha3MgYW5kIGNyYXNoZXMgYXJlIHByZXZlbnRlZCBpbiBURFggaG9zdCBzdXBwb3J0LlxuXG5UaGUgcGF0Y2ggYXV0aG9yIGV4cGxpY2l0bHkgbm90ZWQgdG8gZXhjbHVkZSBjb2RlIHBhdGhzIHVucmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gIEhvd2V2ZXIsIHRoaXMgVERYIGZlYXR1cmUsIHVubGlrZSB2ZW5kb3Itc3BlY2lmaWMgaGFyZHdhcmUgZHJpdmVycywgaXMgZGVmaW5pdGVseSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR29vZ2xlIENsb3VkIEVuZ2luZSAoR0NFKSBpZiB0aGUgaGFyZHdhcmUgc3VwcG9ydHMgVERYLiBUaGVyZWZvcmUsIGl0J3MgYWJzb2x1dGVseSB3b3J0aCBmdXp6aW5nLiBJIGNhbiByZXByb2R1Y2UgYSBURFgtY2FwYWJsZSBpbnN0YW5jZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LlxuXG5IZXJl4oCZcyBteSByZWFzb25pbmcgc3VjY2luY3RseTogVGhpcyBwYXRjaCBicmluZ3MgRHluYW1pYyBQQU1UIHN1cHBvcnQgdG8gVERYIGluIEtWTS94ODYsIGVuYWJsaW5nIGR5bmFtaWMgYWxsb2NhdGlvbiBhbmQgZnJlZWluZyBvZiBQQU1UIG1lbW9yeSBwYWdlcyBmb3IgZ3Vlc3RzLCB0b3VjaGluZyBLVk0gTU1VIGFuZCBURFggaW5pdGlhbGl6YXRpb24uIEl0ICppcyogcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB3aXRoIFREWCBoYXJkd2FyZSwgc3BlY2lmaWNhbGx5IGluIFREWC1jYXBhYmxlIGluc3RhbmNlcywgbmVjZXNzaXRhdGluZyBmdXp6aW5nIHRvIGd1YXJhbnRlZSBjb3JyZWN0IG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBhdm9pZCBsZWFrcyBvciBjcmFzaGVzIGluIFREWCBob3N0IHN1cHBvcnQuXG5cblNvLCBoZXJlJ3MgbXkgcGxhbjpcblxuKiAgIEVuYWJsZSBDb25maWd1cmF0aW9uczogYElOVEVMX1REWF9IT1NUYCwgYEtWTV9JTlRFTF9URFhgXG4qICAgRm9jdXMgU3ltYm9scyBmb3IgZnV6emluZzogYHRkeF9wYW10X2dldGAsIGB0ZHhfcGFtdF9wdXRgLCBgdGR4X3RvcHVwX3BhbXRfY2FjaGVgLCBgdGR4X2ZyZWVfcGFtdF9jYWNoZWAsIGB0ZHhfYWxsb2NfY29udHJvbF9wYWdlYCwgYHRkeF9mcmVlX2NvbnRyb2xfcGFnZWBcblxuSSdsbCBza2lwIGB0ZHhfc3VwcG9ydHNfZHluYW1pY19wYW10YCBhcyBpdCBsb29rcyBsaWtlIGEgc2ltcGxlIGdldHRlci5cblxuTm93LCBJJ20gcmVhZHkgdG8gYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjgyNDUsIk91dHB1dFRva2VucyI6MjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzUzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDEwOjU2OjU3LjYwMTM3NDc5NVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMjMzNDI4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU5URUxfVERYX0hPU1RcIixcbiAgICBcIktWTV9JTlRFTF9URFhcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0ZHhfcGFtdF9nZXRcIixcbiAgICBcInRkeF9wYW10X3B1dFwiLFxuICAgIFwidGR4X3RvcHVwX3BhbXRfY2FjaGVcIixcbiAgICBcInRkeF9mcmVlX3BhbXRfY2FjaGVcIixcbiAgICBcInRkeF9hbGxvY19jb250cm9sX3BhZ2VcIixcbiAgICBcInRkeF9mcmVlX2NvbnRyb2xfcGFnZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgRHluYW1pYyBQaHlzaWNhbCBBZGRyZXNzIE1ldGFkYXRhIFRhYmxlIChQQU1UKSBzdXBwb3J0IGZvciBJbnRlbCBURFggaW4gS1ZNL3g4Ni4gSXQgYWRkcyBmdW5jdGlvbmFsIGNvcmUga2VybmVsIGxvZ2ljIHRvIGR5bmFtaWNhbGx5IGFsbG9jYXRlIGFuZCBmcmVlIFBBTVQgbWVtb3J5IHBhZ2VzIGZvciBURFggZ3Vlc3RzLCBtb2RpZnlpbmcgS1ZNIE1NVSBhbmQgVERYIGluaXRpYWxpemF0aW9uIHBhdGhzLiBUaGlzIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgcnVubmluZyBvbiBURFgtY2FwYWJsZSBoYXJkd2FyZSAoZS5nLiwgR0NQIEMzIGluc3RhbmNlcykgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG1lbW9yeSBtYW5hZ2VtZW50IGNvcnJlY3RuZXNzIGFuZCBwcmV2ZW50IGxlYWtzIG9yIGNyYXNoZXMgaW4gdGhlIFREWCBob3N0IHN1cHBvcnQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU5URUxfVERYX0hPU1RcIixcbiAgICBcIktWTV9JTlRFTF9URFhcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0ZHhfcGFtdF9nZXRcIixcbiAgICBcInRkeF9wYW10X3B1dFwiLFxuICAgIFwidGR4X3RvcHVwX3BhbXRfY2FjaGVcIixcbiAgICBcInRkeF9mcmVlX3BhbXRfY2FjaGVcIixcbiAgICBcInRkeF9hbGxvY19jb250cm9sX3BhZ2VcIixcbiAgICBcInRkeF9mcmVlX2NvbnRyb2xfcGFnZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgRHluYW1pYyBQaHlzaWNhbCBBZGRyZXNzIE1ldGFkYXRhIFRhYmxlIChQQU1UKSBzdXBwb3J0IGZvciBJbnRlbCBURFggaW4gS1ZNL3g4Ni4gSXQgYWRkcyBmdW5jdGlvbmFsIGNvcmUga2VybmVsIGxvZ2ljIHRvIGR5bmFtaWNhbGx5IGFsbG9jYXRlIGFuZCBmcmVlIFBBTVQgbWVtb3J5IHBhZ2VzIGZvciBURFggZ3Vlc3RzLCBtb2RpZnlpbmcgS1ZNIE1NVSBhbmQgVERYIGluaXRpYWxpemF0aW9uIHBhdGhzLiBUaGlzIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgcnVubmluZyBvbiBURFgtY2FwYWJsZSBoYXJkd2FyZSAoZS5nLiwgR0NQIEMzIGluc3RhbmNlcykgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG1lbW9yeSBtYW5hZ2VtZW50IGNvcnJlY3RuZXNzIGFuZCBwcmV2ZW50IGxlYWtzIG9yIGNyYXNoZXMgaW4gdGhlIFREWCBob3N0IHN1cHBvcnQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflow59ft2[1] Phase: Succeeded StartedAt: 2026-07-26 10:57:09 +0000 UTC FinishedAt: 2026-07-26 10:57:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow59ft2[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-26 10:57:09 +0000 UTC FinishedAt: 2026-07-26 10:57:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow59ft2[2] Phase: Succeeded StartedAt: 2026-07-26 10:57:09 +0000 UTC FinishedAt: 2026-07-26 14:56:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow59ft2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2d66a033864e27ab8d5e44cb36f31d9d2413bee4","config_name":"upstream-apparmor-kasan.config","enable_configs":["INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["tdx_pamt_get","tdx_pamt_put","tdx_topup_pamt_cache","tdx_free_pamt_cache","tdx_alloc_control_page","tdx_free_control_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2d66a033864e27ab8d5e44cb36f31d9d2413bee4","config_name":"upstream-apparmor-kasan.config","enable_configs":["INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"6baf0896-34df-4358-ba93-e5b0fb6884bd","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-26 10:57:09 +0000 UTC FinishedAt: 2026-07-26 14:56:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"2d66a033864e27ab8d5e44cb36f31d9d2413bee4","config_name":"upstream-apparmor-kasan.config","enable_configs":["INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["tdx_pamt_get","tdx_pamt_put","tdx_topup_pamt_cache","tdx_free_pamt_cache","tdx_alloc_control_page","tdx_free_control_page"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"2d66a033864e27ab8d5e44cb36f31d9d2413bee4","config_name":"upstream-apparmor-kasan.config","enable_configs":["INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"6baf0896-34df-4358-ba93-e5b0fb6884bd","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow59ft2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2d66a033864e27ab8d5e44cb36f31d9d2413bee4","config_name":"upstream-apparmor-kasan.config","enable_configs":["INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["tdx_pamt_get","tdx_pamt_put","tdx_topup_pamt_cache","tdx_free_pamt_cache","tdx_alloc_control_page","tdx_free_control_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2d66a033864e27ab8d5e44cb36f31d9d2413bee4","config_name":"upstream-apparmor-kasan.config","enable_configs":["INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"6baf0896-34df-4358-ba93-e5b0fb6884bd","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-26 10:57:09 +0000 UTC FinishedAt: 2026-07-26 10:57:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow59ft2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2d66a033864e27ab8d5e44cb36f31d9d2413bee4","config_name":"upstream-apparmor-kasan.config","enable_configs":["INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["tdx_pamt_get","tdx_pamt_put","tdx_topup_pamt_cache","tdx_free_pamt_cache","tdx_alloc_control_page","tdx_free_control_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2d66a033864e27ab8d5e44cb36f31d9d2413bee4","config_name":"upstream-apparmor-kasan.config","enable_configs":["INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"6baf0896-34df-4358-ba93-e5b0fb6884bd","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-26 10:57:09 +0000 UTC FinishedAt: 2026-07-26 10:57:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"2d66a033864e27ab8d5e44cb36f31d9d2413bee4","config_name":"upstream-apparmor-kasan.config","enable_configs":["INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow59ft2/series-workflow59ft2-convert-artifact-1373749379/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow59ft2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2d66a033864e27ab8d5e44cb36f31d9d2413bee4","config_name":"upstream-apparmor-kasan.config","enable_configs":["INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["tdx_pamt_get","tdx_pamt_put","tdx_topup_pamt_cache","tdx_free_pamt_cache","tdx_alloc_control_page","tdx_free_control_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2d66a033864e27ab8d5e44cb36f31d9d2413bee4","config_name":"upstream-apparmor-kasan.config","enable_configs":["INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"6baf0896-34df-4358-ba93-e5b0fb6884bd","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-26 10:57:19 +0000 UTC FinishedAt: 2026-07-26 11:24:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow59ft2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2d66a033864e27ab8d5e44cb36f31d9d2413bee4","config_name":"upstream-apparmor-kasan.config","enable_configs":["INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["tdx_pamt_get","tdx_pamt_put","tdx_topup_pamt_cache","tdx_free_pamt_cache","tdx_alloc_control_page","tdx_free_control_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2d66a033864e27ab8d5e44cb36f31d9d2413bee4","config_name":"upstream-apparmor-kasan.config","enable_configs":["INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"6baf0896-34df-4358-ba93-e5b0fb6884bd","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-26 10:57:19 +0000 UTC FinishedAt: 2026-07-26 11:24:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*49cef5d2-0dd6-4e1e-a40d-5ce2a61d035f,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow59ft2/series-workflow59ft2-convert-artifact-1373749379/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "31687beb-ccc9-40f7-834d-fe76e1c5f78d", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow59ft2/series-workflow59ft2-build-action-3759436017/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow59ft2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2d66a033864e27ab8d5e44cb36f31d9d2413bee4","config_name":"upstream-apparmor-kasan.config","enable_configs":["INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["tdx_pamt_get","tdx_pamt_put","tdx_topup_pamt_cache","tdx_free_pamt_cache","tdx_alloc_control_page","tdx_free_control_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2d66a033864e27ab8d5e44cb36f31d9d2413bee4","config_name":"upstream-apparmor-kasan.config","enable_configs":["INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"6baf0896-34df-4358-ba93-e5b0fb6884bd","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-26 10:57:19 +0000 UTC FinishedAt: 2026-07-26 11:23:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*49cef5d2-0dd6-4e1e-a40d-5ce2a61d035f,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow59ft2/series-workflow59ft2-convert-artifact-1373749379/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "31687beb-ccc9-40f7-834d-fe76e1c5f78d", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow59ft2/series-workflow59ft2-build-action-3759436017/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow59ft2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2d66a033864e27ab8d5e44cb36f31d9d2413bee4","config_name":"upstream-apparmor-kasan.config","enable_configs":["INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["tdx_pamt_get","tdx_pamt_put","tdx_topup_pamt_cache","tdx_free_pamt_cache","tdx_alloc_control_page","tdx_free_control_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2d66a033864e27ab8d5e44cb36f31d9d2413bee4","config_name":"upstream-apparmor-kasan.config","enable_configs":["INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"6baf0896-34df-4358-ba93-e5b0fb6884bd","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-26 11:24:09 +0000 UTC FinishedAt: 2026-07-26 11:24:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow59ft2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2d66a033864e27ab8d5e44cb36f31d9d2413bee4","config_name":"upstream-apparmor-kasan.config","enable_configs":["INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["tdx_pamt_get","tdx_pamt_put","tdx_topup_pamt_cache","tdx_free_pamt_cache","tdx_alloc_control_page","tdx_free_control_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2d66a033864e27ab8d5e44cb36f31d9d2413bee4","config_name":"upstream-apparmor-kasan.config","enable_configs":["INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"6baf0896-34df-4358-ba93-e5b0fb6884bd","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-26 11:24:09 +0000 UTC FinishedAt: 2026-07-26 11:24:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow59ft2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2d66a033864e27ab8d5e44cb36f31d9d2413bee4","config_name":"upstream-apparmor-kasan.config","enable_configs":["INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["tdx_pamt_get","tdx_pamt_put","tdx_topup_pamt_cache","tdx_free_pamt_cache","tdx_alloc_control_page","tdx_free_control_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2d66a033864e27ab8d5e44cb36f31d9d2413bee4","config_name":"upstream-apparmor-kasan.config","enable_configs":["INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"6baf0896-34df-4358-ba93-e5b0fb6884bd","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-26 11:24:09 +0000 UTC FinishedAt: 2026-07-26 11:24:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow59ft2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2d66a033864e27ab8d5e44cb36f31d9d2413bee4","config_name":"upstream-apparmor-kasan.config","enable_configs":["INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["tdx_pamt_get","tdx_pamt_put","tdx_topup_pamt_cache","tdx_free_pamt_cache","tdx_alloc_control_page","tdx_free_control_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2d66a033864e27ab8d5e44cb36f31d9d2413bee4","config_name":"upstream-apparmor-kasan.config","enable_configs":["INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"6baf0896-34df-4358-ba93-e5b0fb6884bd","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-26 11:24:09 +0000 UTC FinishedAt: 2026-07-26 11:24:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"2d66a033864e27ab8d5e44cb36f31d9d2413bee4","config_name":"upstream-apparmor-kasan.config","enable_configs":["INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"6baf0896-34df-4358-ba93-e5b0fb6884bd","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow59ft2/series-workflow59ft2-convert-artifact-652783674/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow59ft2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2d66a033864e27ab8d5e44cb36f31d9d2413bee4","config_name":"upstream-apparmor-kasan.config","enable_configs":["INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["tdx_pamt_get","tdx_pamt_put","tdx_topup_pamt_cache","tdx_free_pamt_cache","tdx_alloc_control_page","tdx_free_control_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2d66a033864e27ab8d5e44cb36f31d9d2413bee4","config_name":"upstream-apparmor-kasan.config","enable_configs":["INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"6baf0896-34df-4358-ba93-e5b0fb6884bd","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-26 11:24:19 +0000 UTC FinishedAt: 2026-07-26 11:26:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow59ft2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2d66a033864e27ab8d5e44cb36f31d9d2413bee4","config_name":"upstream-apparmor-kasan.config","enable_configs":["INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["tdx_pamt_get","tdx_pamt_put","tdx_topup_pamt_cache","tdx_free_pamt_cache","tdx_alloc_control_page","tdx_free_control_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2d66a033864e27ab8d5e44cb36f31d9d2413bee4","config_name":"upstream-apparmor-kasan.config","enable_configs":["INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"6baf0896-34df-4358-ba93-e5b0fb6884bd","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-26 11:24:19 +0000 UTC FinishedAt: 2026-07-26 11:26:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*31687beb-ccc9-40f7-834d-fe76e1c5f78d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow59ft2/series-workflow59ft2-build-action-3759436017/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow59ft2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2d66a033864e27ab8d5e44cb36f31d9d2413bee4","config_name":"upstream-apparmor-kasan.config","enable_configs":["INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["tdx_pamt_get","tdx_pamt_put","tdx_topup_pamt_cache","tdx_free_pamt_cache","tdx_alloc_control_page","tdx_free_control_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2d66a033864e27ab8d5e44cb36f31d9d2413bee4","config_name":"upstream-apparmor-kasan.config","enable_configs":["INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"6baf0896-34df-4358-ba93-e5b0fb6884bd","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-26 11:26:10 +0000 UTC FinishedAt: 2026-07-26 11:26:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow59ft2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2d66a033864e27ab8d5e44cb36f31d9d2413bee4","config_name":"upstream-apparmor-kasan.config","enable_configs":["INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["tdx_pamt_get","tdx_pamt_put","tdx_topup_pamt_cache","tdx_free_pamt_cache","tdx_alloc_control_page","tdx_free_control_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2d66a033864e27ab8d5e44cb36f31d9d2413bee4","config_name":"upstream-apparmor-kasan.config","enable_configs":["INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"6baf0896-34df-4358-ba93-e5b0fb6884bd","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-26 11:26:10 +0000 UTC FinishedAt: 2026-07-26 11:26:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow59ft2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2d66a033864e27ab8d5e44cb36f31d9d2413bee4","config_name":"upstream-apparmor-kasan.config","enable_configs":["INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["tdx_pamt_get","tdx_pamt_put","tdx_topup_pamt_cache","tdx_free_pamt_cache","tdx_alloc_control_page","tdx_free_control_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2d66a033864e27ab8d5e44cb36f31d9d2413bee4","config_name":"upstream-apparmor-kasan.config","enable_configs":["INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"6baf0896-34df-4358-ba93-e5b0fb6884bd","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-26 11:26:10 +0000 UTC FinishedAt: 2026-07-26 11:51:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow59ft2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2d66a033864e27ab8d5e44cb36f31d9d2413bee4","config_name":"upstream-apparmor-kasan.config","enable_configs":["INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["tdx_pamt_get","tdx_pamt_put","tdx_topup_pamt_cache","tdx_free_pamt_cache","tdx_alloc_control_page","tdx_free_control_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2d66a033864e27ab8d5e44cb36f31d9d2413bee4","config_name":"upstream-apparmor-kasan.config","enable_configs":["INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"6baf0896-34df-4358-ba93-e5b0fb6884bd","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-26 11:26:10 +0000 UTC FinishedAt: 2026-07-26 11:51:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*49cef5d2-0dd6-4e1e-a40d-5ce2a61d035f,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow59ft2/series-workflow59ft2-convert-artifact-652783674/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "a448d411-e552-4652-ad34-1bca96595e4a", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow59ft2/series-workflow59ft2-build-action-3122093726/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow59ft2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2d66a033864e27ab8d5e44cb36f31d9d2413bee4","config_name":"upstream-apparmor-kasan.config","enable_configs":["INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["tdx_pamt_get","tdx_pamt_put","tdx_topup_pamt_cache","tdx_free_pamt_cache","tdx_alloc_control_page","tdx_free_control_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2d66a033864e27ab8d5e44cb36f31d9d2413bee4","config_name":"upstream-apparmor-kasan.config","enable_configs":["INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"6baf0896-34df-4358-ba93-e5b0fb6884bd","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-26 11:26:10 +0000 UTC FinishedAt: 2026-07-26 11:50:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*49cef5d2-0dd6-4e1e-a40d-5ce2a61d035f,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow59ft2/series-workflow59ft2-convert-artifact-652783674/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "a448d411-e552-4652-ad34-1bca96595e4a", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow59ft2/series-workflow59ft2-build-action-3122093726/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow59ft2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2d66a033864e27ab8d5e44cb36f31d9d2413bee4","config_name":"upstream-apparmor-kasan.config","enable_configs":["INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["tdx_pamt_get","tdx_pamt_put","tdx_topup_pamt_cache","tdx_free_pamt_cache","tdx_alloc_control_page","tdx_free_control_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2d66a033864e27ab8d5e44cb36f31d9d2413bee4","config_name":"upstream-apparmor-kasan.config","enable_configs":["INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"6baf0896-34df-4358-ba93-e5b0fb6884bd","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-26 11:51:56 +0000 UTC FinishedAt: 2026-07-26 11:51:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow59ft2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2d66a033864e27ab8d5e44cb36f31d9d2413bee4","config_name":"upstream-apparmor-kasan.config","enable_configs":["INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["tdx_pamt_get","tdx_pamt_put","tdx_topup_pamt_cache","tdx_free_pamt_cache","tdx_alloc_control_page","tdx_free_control_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2d66a033864e27ab8d5e44cb36f31d9d2413bee4","config_name":"upstream-apparmor-kasan.config","enable_configs":["INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"6baf0896-34df-4358-ba93-e5b0fb6884bd","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-26 11:51:56 +0000 UTC FinishedAt: 2026-07-26 11:51:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow59ft2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2d66a033864e27ab8d5e44cb36f31d9d2413bee4","config_name":"upstream-apparmor-kasan.config","enable_configs":["INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["tdx_pamt_get","tdx_pamt_put","tdx_topup_pamt_cache","tdx_free_pamt_cache","tdx_alloc_control_page","tdx_free_control_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2d66a033864e27ab8d5e44cb36f31d9d2413bee4","config_name":"upstream-apparmor-kasan.config","enable_configs":["INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"6baf0896-34df-4358-ba93-e5b0fb6884bd","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-26 11:51:56 +0000 UTC FinishedAt: 2026-07-26 11:53:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow59ft2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2d66a033864e27ab8d5e44cb36f31d9d2413bee4","config_name":"upstream-apparmor-kasan.config","enable_configs":["INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["tdx_pamt_get","tdx_pamt_put","tdx_topup_pamt_cache","tdx_free_pamt_cache","tdx_alloc_control_page","tdx_free_control_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2d66a033864e27ab8d5e44cb36f31d9d2413bee4","config_name":"upstream-apparmor-kasan.config","enable_configs":["INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"6baf0896-34df-4358-ba93-e5b0fb6884bd","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-26 11:51:56 +0000 UTC FinishedAt: 2026-07-26 11:53:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*a448d411-e552-4652-ad34-1bca96595e4a,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow59ft2/series-workflow59ft2-build-action-3122093726/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow59ft2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2d66a033864e27ab8d5e44cb36f31d9d2413bee4","config_name":"upstream-apparmor-kasan.config","enable_configs":["INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["tdx_pamt_get","tdx_pamt_put","tdx_topup_pamt_cache","tdx_free_pamt_cache","tdx_alloc_control_page","tdx_free_control_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2d66a033864e27ab8d5e44cb36f31d9d2413bee4","config_name":"upstream-apparmor-kasan.config","enable_configs":["INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"6baf0896-34df-4358-ba93-e5b0fb6884bd","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-26 11:53:53 +0000 UTC FinishedAt: 2026-07-26 14:56:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow59ft2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2d66a033864e27ab8d5e44cb36f31d9d2413bee4","config_name":"upstream-apparmor-kasan.config","enable_configs":["INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["tdx_pamt_get","tdx_pamt_put","tdx_topup_pamt_cache","tdx_free_pamt_cache","tdx_alloc_control_page","tdx_free_control_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2d66a033864e27ab8d5e44cb36f31d9d2413bee4","config_name":"upstream-apparmor-kasan.config","enable_configs":["INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"6baf0896-34df-4358-ba93-e5b0fb6884bd","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-26 11:53:53 +0000 UTC FinishedAt: 2026-07-26 14:56:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["tdx_pamt_get","tdx_pamt_put","tdx_topup_pamt_cache","tdx_free_pamt_cache","tdx_alloc_control_page","tdx_free_control_page"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*31687beb-ccc9-40f7-834d-fe76e1c5f78d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*a448d411-e552-4652-ad34-1bca96595e4a,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow59ft2/series-workflow59ft2-build-action-3759436017/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow59ft2/series-workflow59ft2-build-action-3122093726/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow59ft2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2d66a033864e27ab8d5e44cb36f31d9d2413bee4","config_name":"upstream-apparmor-kasan.config","enable_configs":["INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["tdx_pamt_get","tdx_pamt_put","tdx_topup_pamt_cache","tdx_free_pamt_cache","tdx_alloc_control_page","tdx_free_control_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2d66a033864e27ab8d5e44cb36f31d9d2413bee4","config_name":"upstream-apparmor-kasan.config","enable_configs":["INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"6baf0896-34df-4358-ba93-e5b0fb6884bd","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-26 11:53:53 +0000 UTC FinishedAt: 2026-07-26 11:54:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow59ft2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2d66a033864e27ab8d5e44cb36f31d9d2413bee4","config_name":"upstream-apparmor-kasan.config","enable_configs":["INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["tdx_pamt_get","tdx_pamt_put","tdx_topup_pamt_cache","tdx_free_pamt_cache","tdx_alloc_control_page","tdx_free_control_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2d66a033864e27ab8d5e44cb36f31d9d2413bee4","config_name":"upstream-apparmor-kasan.config","enable_configs":["INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"6baf0896-34df-4358-ba93-e5b0fb6884bd","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-26 11:53:53 +0000 UTC FinishedAt: 2026-07-26 11:53:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["tdx_pamt_get","tdx_pamt_put","tdx_topup_pamt_cache","tdx_free_pamt_cache","tdx_alloc_control_page","tdx_free_control_page"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow59ft2/series-workflow59ft2-convert-artifact-3677237615/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow59ft2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2d66a033864e27ab8d5e44cb36f31d9d2413bee4","config_name":"upstream-apparmor-kasan.config","enable_configs":["INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["tdx_pamt_get","tdx_pamt_put","tdx_topup_pamt_cache","tdx_free_pamt_cache","tdx_alloc_control_page","tdx_free_control_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2d66a033864e27ab8d5e44cb36f31d9d2413bee4","config_name":"upstream-apparmor-kasan.config","enable_configs":["INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"6baf0896-34df-4358-ba93-e5b0fb6884bd","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-26 11:53:53 +0000 UTC FinishedAt: 2026-07-26 11:53:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow59ft2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2d66a033864e27ab8d5e44cb36f31d9d2413bee4","config_name":"upstream-apparmor-kasan.config","enable_configs":["INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["tdx_pamt_get","tdx_pamt_put","tdx_topup_pamt_cache","tdx_free_pamt_cache","tdx_alloc_control_page","tdx_free_control_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2d66a033864e27ab8d5e44cb36f31d9d2413bee4","config_name":"upstream-apparmor-kasan.config","enable_configs":["INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"6baf0896-34df-4358-ba93-e5b0fb6884bd","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-26 11:53:53 +0000 UTC FinishedAt: 2026-07-26 11:53:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow59ft2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2d66a033864e27ab8d5e44cb36f31d9d2413bee4","config_name":"upstream-apparmor-kasan.config","enable_configs":["INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["tdx_pamt_get","tdx_pamt_put","tdx_topup_pamt_cache","tdx_free_pamt_cache","tdx_alloc_control_page","tdx_free_control_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2d66a033864e27ab8d5e44cb36f31d9d2413bee4","config_name":"upstream-apparmor-kasan.config","enable_configs":["INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"6baf0896-34df-4358-ba93-e5b0fb6884bd","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-26 11:53:53 +0000 UTC FinishedAt: 2026-07-26 11:53:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow59ft2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2d66a033864e27ab8d5e44cb36f31d9d2413bee4","config_name":"upstream-apparmor-kasan.config","enable_configs":["INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["tdx_pamt_get","tdx_pamt_put","tdx_topup_pamt_cache","tdx_free_pamt_cache","tdx_alloc_control_page","tdx_free_control_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2d66a033864e27ab8d5e44cb36f31d9d2413bee4","config_name":"upstream-apparmor-kasan.config","enable_configs":["INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"6baf0896-34df-4358-ba93-e5b0fb6884bd","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-26 11:54:03 +0000 UTC FinishedAt: 2026-07-26 14:56:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow59ft2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2d66a033864e27ab8d5e44cb36f31d9d2413bee4","config_name":"upstream-apparmor-kasan.config","enable_configs":["INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["tdx_pamt_get","tdx_pamt_put","tdx_topup_pamt_cache","tdx_free_pamt_cache","tdx_alloc_control_page","tdx_free_control_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2d66a033864e27ab8d5e44cb36f31d9d2413bee4","config_name":"upstream-apparmor-kasan.config","enable_configs":["INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"6baf0896-34df-4358-ba93-e5b0fb6884bd","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-26 11:54:03 +0000 UTC FinishedAt: 2026-07-26 14:56:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*31687beb-ccc9-40f7-834d-fe76e1c5f78d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*a448d411-e552-4652-ad34-1bca96595e4a,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow59ft2/series-workflow59ft2-build-action-3759436017/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow59ft2/series-workflow59ft2-build-action-3122093726/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow59ft2/series-workflow59ft2-convert-artifact-3677237615/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}