Name: series-workflowz52hp Phase: Succeeded StartedAt: 2026-07-02 17:16:58 +0000 UTC FinishedAt: 2026-07-02 21:52:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz52hp[0] Phase: Succeeded StartedAt: 2026-07-02 17:16:58 +0000 UTC FinishedAt: 2026-07-02 17:27:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz52hp[0].run-triage Phase: Succeeded StartedAt: 2026-07-02 17:16:58 +0000 UTC FinishedAt: 2026-07-02 17:27:51 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "drm-next", "tree_url": "https://gitlab.freedesktop.org/drm/kernel.git", "commit_hash": "dc59e4fea9d83f03bad6bddf3fa2e52491777482", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "drm-next", "tree_url": "https://gitlab.freedesktop.org/drm/kernel.git", "commit_hash": "dc59e4fea9d83f03bad6bddf3fa2e52491777482", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "5a624959-c01e-4998-aec4-273ce396d195" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "kvm_gmem_change_flags", "kvm_gmem_check_no_change", "__kvm_gmem_invalidate_start", "__kvm_gmem_invalidate_end", "kvm_gmem_error_folio" ], "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+CgkJCTx0ZD4yMDI2LzA3LzAyIDE3OjI2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9nbWVtX2NoYW5nZV9mbGFncyYjMzQ7LAogICAgJiMzNDtrdm1fZ21lbV9jaGVja19ub19jaGFuZ2UmIzM0OywKICAgICYjMzQ7X19rdm1fZ21lbV9pbnZhbGlkYXRlX3N0YXJ0JiMzNDssCiAgICAmIzM0O19fa3ZtX2dtZW1faW52YWxpZGF0ZV9lbmQmIzM0OywKICAgICYjMzQ7a3ZtX2dtZW1fZXJyb3JfZm9saW8mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBzdXBwb3J0IGZvciBkaXJ0eSBwYWdlIGxvZ2dpbmcgZm9yIGBndWVzdF9tZW1mZGAgYmFja2VkIG1lbXNsb3RzIGluIEtWTS4gSXQgbW9kaWZpZXMgdGhlIEtWTSBtZW1vcnkgcmVnaW9uIGNvbmZpZ3VyYXRpb24gbG9naWMgYW5kIHRoZSBpbnZhbGlkYXRpb24gcGF0aHMgZm9yIGd1ZXN0IG1lbW9yeS4gVGhlc2UgYXJlIGNvcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIEtWTSB0aGF0IGNhbiBiZSByZWFjaGVkIHZpYSBLVk0gaW9jdGxzIChlLmcuLCBgS1ZNX1NFVF9VU0VSX01FTU9SWV9SRUdJT04yYCkgYW5kIG1lbW9yeSBpbnZhbGlkYXRpb24gZXZlbnRzLCBtYWtpbmcgdGhlbSBoaWdobHkgcmVsZXZhbnQgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTc6MjY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAxZjNjN2FjNTU3MTc4OTljNGM5MWFjNDlmZGUzNjQ4ODVkODhlZTY5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgMiAxNzoyNjo1MyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QgYi9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3RcbmluZGV4IGE1ZjllZTkyZjQzZThkLi41MDEyYWZlNmE5YjU1OSAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0XG5AQCAtOTQ5Myw2ICYjNDM7OTQ5MywxNSBAQCB0YWtlIGNhcmUgdG8gZGlmZmVyZW50aWF0ZSBiZXR3ZWVuIHRoZXNlIGNhc2VzLlxuIFRoZSBwcmVzZW5jZSBvZiB0aGlzIGNhcGFiaWxpdHkgaW5kaWNhdGVzIHRoYXQgdGhlIG5lc3RlZCBLVk0gZ3Vlc3QgY2FuXG4gc3RhcnQgaW4gRVNBIG1vZGUuXG4gXG4mIzQzOzguNDggS1ZNX0NBUF9HVUVTVF9NRU1GRF9NTUFQX0xPR19ESVJUWV9QQUdFU1xuJiM0MzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiYjNDM7XG4mIzQzOzpBcmNoaXRlY3R1cmVzOiBhbGxcbiYjNDM7XG4mIzQzO1RoZSBwcmVzZW5jZSBvZiB0aGlzIGNhcGFiaWxpdHkgaW5kaWNhdGVzIHRoYXQgbWVtc2xvdHMgYmFja2VkIGJ5IGEgZ3Vlc3RfbWVtZmRcbiYjNDM7ZmlsZSBkZXNjcmlwdG9yIGNyZWF0ZWQgd2l0aCB0aGUgR1VFU1RfTUVNRkRfRkxBR19NTUFQIGZsYWcgY2FuIGhhdmUgZGlydHlcbiYjNDM7cGFnZSBsb2dnaW5nIGVuYWJsZWQuXG4mIzQzO1xuIDkuIEtub3duIEtWTSBBUEkgcHJvYmxlbXNcbiA9PT09PT09PT09PT09PT09PT09PT09PT09XG4gXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vYXJtLmMgYi9hcmNoL2FybTY0L2t2bS9hcm0uY1xuaW5kZXggNTBhZGZmZjc1YmU4MmUuLmU5MmU1ZDdiNTMzYWRhIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9rdm0vYXJtLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQva3ZtL2FybS5jXG5AQCAtMzkzLDYgJiM0MzszOTMsOSBAQCBpbnQga3ZtX3ZtX2lvY3RsX2NoZWNrX2V4dGVuc2lvbihzdHJ1Y3Qga3ZtICprdm0sIGxvbmcgZXh0KVxuIFx0Y2FzZSBLVk1fQ0FQX0NPVU5URVJfT0ZGU0VUOlxuIFx0Y2FzZSBLVk1fQ0FQX0FSTV9XUklUQUJMRV9JTVBfSURfUkVHUzpcbiBcdGNhc2UgS1ZNX0NBUF9BUk1fU0VBX1RPX1VTRVI6XG4mIzQzOyNpZmRlZiBDT05GSUdfS1ZNX0dVRVNUX01FTUZEXG4mIzQzO1x0Y2FzZSBLVk1fQ0FQX0dVRVNUX01FTUZEX01NQVBfTE9HX0RJUlRZX1BBR0VTOlxuJiM0MzsjZW5kaWZcbiBcdFx0ciA9IDE7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBLVk1fQ0FQX1NFVF9HVUVTVF9ERUJVRzI6XG5AQCAtNDkzLDYgJiM0Mzs0OTYsMjUgQEAgaW50IGt2bV92bV9pb2N0bF9jaGVja19leHRlbnNpb24oc3RydWN0IGt2bSAqa3ZtLCBsb25nIGV4dClcbiBcdHJldHVybiByO1xuIH1cbiBcbiYjNDM7I2lmZGVmIENPTkZJR19LVk1fR1VFU1RfTUVNRkRcbiYjNDM7Ym9vbCBrdm1fYXJjaF9zdXBwb3J0c19nbWVtX21tYXBfZGlydHlfbG9nZ2luZyhzdHJ1Y3Qga3ZtICprdm0pXG4mIzQzO3tcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFByb3RlY3RlZCBwS1ZNIFZNcyBkb24mIzM5O3QgYWxsb3cgZGlydHkgcGFnZSBsb2dnaW5nLCBmYWlsIGVhcmx5IGhlcmVcbiYjNDM7XHQgKiBpbnN0ZWFkIG9mIGluIGt2bV9hcmNoX3ByZXBhcmVfbWVtb3J5X3JlZ2lvbigpLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogS1ZNX0NBUF9HVUVTVF9NRU1GRF9NTUFQX0xPR19ESVJUWV9QQUdFUyBpcyBub3QgYXZhaWxhYmxlIGZvciBhXG4mIzQzO1x0ICogcHJvdGVjdGVkIHBLVk0gVk0sIGFuZCByZXR1cm5pbmcgZmFsc2UgbWVhbnMgdGhhdFxuJiM0MztcdCAqIEtWTV9TRVRfVVNFUl9NRU1PUllfUkVHSU9OMiBmYWlscyB3aXRoIEVJTlZBTCwgd2hpY2ggaXMgY29uc2lzdGVudFxuJiM0MztcdCAqIHdpdGggdW5zdXBwb3J0ZWQgbWVtc2xvdCBmbGFncy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoIWlzX3Byb3RlY3RlZF9rdm1fZW5hYmxlZCgpKVxuJiM0MztcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1xuJiM0MztcdHJldHVybiBrdm1fcGt2bV9leHRfYWxsb3dlZChrdm0sIEtWTV9DQVBfR1VFU1RfTUVNRkRfTU1BUF9MT0dfRElSVFlfUEFHRVMpO1xuJiM0Mzt9XG4mIzQzOyNlbmRpZlxuJiM0MztcbiBsb25nIGt2bV9hcmNoX2Rldl9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCxcbiBcdFx0XHR1bnNpZ25lZCBpbnQgaW9jdGwsIHVuc2lnbmVkIGxvbmcgYXJnKVxuIHtcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9tbXUuYyBiL2FyY2gvYXJtNjQva3ZtL21tdS5jXG5pbmRleCA2Yzk0MWFhYTEwYzYzOS4uZjZlNmRlMTUzY2UyNTMgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2t2bS9tbXUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9rdm0vbW11LmNcbkBAIC0xNjQ4LDcgJiM0MzsxNjQ4LDggQEAgc3RhdGljIGludCBnbWVtX2Fib3J0KGNvbnN0IHN0cnVjdCBrdm1fczJfZmF1bHRfZGVzYyAqczJmZClcbiBcdFx0cmV0dXJuIHJldDtcbiBcdH1cbiBcbi1cdGlmICghKHMyZmQtXHUwMDNlbWVtc2xvdC1cdTAwM2VmbGFncyBcdTAwMjYgS1ZNX01FTV9SRUFET05MWSkpXG4mIzQzO1x0aWYgKCEoczJmZC1cdTAwM2VtZW1zbG90LVx1MDAzZWZsYWdzIFx1MDAyNiBLVk1fTUVNX1JFQURPTkxZKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgKCFrdm1fc2xvdF9kaXJ0eV90cmFja19lbmFibGVkKHMyZmQtXHUwMDNlbWVtc2xvdCkgfHwgd3JpdGVfZmF1bHQpKVxuIFx0XHRwcm90IHw9IEtWTV9QR1RBQkxFX1BST1RfVztcbiBcbiBcdGlmIChzMmZkLVx1MDAzZW5lc3RlZClcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmggYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhcbmluZGV4IGFiOGNmYWVjODJkMzFlLi5jNDRlOTI1M2ViNDAwYSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oXG5AQCAtNTYsNiAmIzQzOzU2LDcgQEBcbiAgKi9cbiAjZGVmaW5lIEtWTV9NRU1TTE9UX0lOVkFMSURcdFx0XHQoMVVMIFx1MDAzY1x1MDAzYyAxNilcbiAjZGVmaW5lIEtWTV9NRU1TTE9UX0dNRU1fT05MWVx0XHRcdCgxVUwgXHUwMDNjXHUwMDNjIDE3KVxuJiM0MzsjZGVmaW5lIE1FTVNMT1RfVVNFUl9GTEFHU19NQVNLXHRcdFx0MHhmZmZmXG4gXG4gLypcbiAgKiBCaXQgNjMgb2YgdGhlIG1lbXNsb3QgZ2VuZXJhdGlvbiBudW1iZXIgaXMgYW4gXCYjMzQ7dXBkYXRlIGluLXByb2dyZXNzIGZsYWdcJiMzNDssXG5AQCAtNzMxLDYgJiM0Mzs3MzIsOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wga3ZtX2FyY2hfaGFzX3ByaXZhdGVfbWVtKHN0cnVjdCBrdm0gKmt2bSlcbiBcbiAjaWZkZWYgQ09ORklHX0tWTV9HVUVTVF9NRU1GRFxuIGJvb2wga3ZtX2FyY2hfc3VwcG9ydHNfZ21lbV9pbml0X3NoYXJlZChzdHJ1Y3Qga3ZtICprdm0pO1xuJiM0Mztib29sIGt2bV9hcmNoX3N1cHBvcnRzX2dtZW1fbW1hcF9kaXJ0eV9sb2dnaW5nKHN0cnVjdCBrdm0gKmt2bSk7XG4mIzQzO2ludCBrdm1fZ21lbV9jaGVja19ub19jaGFuZ2Uoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LFxuJiM0MztcdFx0XHQgICAgIHVuc2lnbmVkIGludCBmZCwgbG9mZl90IG9mZnNldCk7XG4gXG4gc3RhdGljIGlubGluZSB1NjQga3ZtX2dtZW1fZ2V0X3N1cHBvcnRlZF9mbGFncyhzdHJ1Y3Qga3ZtICprdm0pXG4ge1xuQEAgLTc0MSw2ICYjNDM7NzQ1LDE3IEBAIHN0YXRpYyBpbmxpbmUgdTY0IGt2bV9nbWVtX2dldF9zdXBwb3J0ZWRfZmxhZ3Moc3RydWN0IGt2bSAqa3ZtKVxuIFxuIFx0cmV0dXJuIGZsYWdzO1xuIH1cbiYjNDM7I2Vsc2VcbiYjNDM7c3RhdGljIGlubGluZSBib29sIGt2bV9hcmNoX3N1cHBvcnRzX2dtZW1fbW1hcF9kaXJ0eV9sb2dnaW5nKHN0cnVjdCBrdm0gKmt2bSlcbiYjNDM7e1xuJiM0MztcdHJldHVybiBmYWxzZTtcbiYjNDM7fVxuJiM0MztzdGF0aWMgaW5saW5lIGludCBrdm1fZ21lbV9jaGVja19ub19jaGFuZ2Uoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LFxuJiM0MztcdFx0XHRcdFx0ICAgdW5zaWduZWQgaW50IGZkLCBsb2ZmX3Qgb2Zmc2V0KVxuJiM0Mzt7XG4mIzQzO1x0V0FSTl9PTl9PTkNFKDEpO1xuJiM0MztcdHJldHVybiAtRUlPO1xuJiM0Mzt9XG4gI2VuZGlmXG4gXG4gI2lmbmRlZiBrdm1fYXJjaF9oYXNfcmVhZG9ubHlfbWVtXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oXG5pbmRleCA0MTkwMTEwOTdmYThlMi4uNWE1M2UyZTE5YjJmYjIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgva3ZtLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaFxuQEAgLTk5Nyw2ICYjNDM7OTk3LDcgQEAgc3RydWN0IGt2bV9lbmFibGVfY2FwIHtcbiAjZGVmaW5lIEtWTV9DQVBfUzM5MF9LRVlPUCAyNDdcbiAjZGVmaW5lIEtWTV9DQVBfUzM5MF9WU0lFX0VTQU1PREUgMjQ4XG4gI2RlZmluZSBLVk1fQ0FQX1MzOTBfSFBBR0VfMkcgMjQ5XG4mIzQzOyNkZWZpbmUgS1ZNX0NBUF9HVUVTVF9NRU1GRF9NTUFQX0xPR19ESVJUWV9QQUdFUyAyNTBcbiBcbiBzdHJ1Y3Qga3ZtX2lycV9yb3V0aW5nX2lycWNoaXAge1xuIFx0X191MzIgaXJxY2hpcDtcbmRpZmYgLS1naXQgYS92aXJ0L2t2bS9ndWVzdF9tZW1mZC5jIGIvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuY1xuaW5kZXggZGI1N2M1NzY2YWI2MDQuLjIxMGJkZDc2ZjBhYWQ3IDEwMDY0NFxuLS0tIGEvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuY1xuQEAgLTI1LDYgJiM0MzsyNSw3IEBAIHN0cnVjdCBnbWVtX2ZpbGUge1xuIFx0c3RydWN0IGt2bSAqa3ZtO1xuIFx0c3RydWN0IHhhcnJheSBiaW5kaW5ncztcbiBcdHN0cnVjdCBsaXN0X2hlYWQgZW50cnk7XG4mIzQzO1x0Ym9vbCBmb3VuZF9tZW1zbG90O1x0LyogVXNlZCBmb3IgYmFsYW5jaW5nIGludmFsaWRhdGlvbnMgd2hlbiBwdW5jaGluZyBhIGhvbGUgKi9cbiB9O1xuIFxuIHN0cnVjdCBnbWVtX2lub2RlIHtcbkBAIC00Myw2ICYjNDM7NDQsMjkgQEAgc3RhdGljIF9fYWx3YXlzX2lubGluZSBzdHJ1Y3QgZ21lbV9pbm9kZSAqR01FTV9JKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4gI2RlZmluZSBrdm1fZ21lbV9mb3JfZWFjaF9maWxlKGYsIGlub2RlKSBcXFxuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeShmLCBcdTAwMjZHTUVNX0koaW5vZGUpLVx1MDAzZWdtZW1fZmlsZV9saXN0LCBlbnRyeSlcbiBcbiYjNDM7c3RhdGljIHZvaWQgKm1lbXNsb3RfdG9feGFfdmFsdWUoc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdClcbiYjNDM7e1xuJiM0MztcdFdBUk5fT05fT05DRShzaXplb2Yoc2xvdC1cdTAwM2Vhc19pZCkgXHUwMDNlIDE2KTtcbiYjNDM7XHRXQVJOX09OX09OQ0Uoc2l6ZW9mKHNsb3QtXHUwMDNlaWQpIFx1MDAzZSAxNik7XG4mIzQzO1x0V0FSTl9PTl9PTkNFKHNpemVvZihzbG90LVx1MDAzZWFzX2lkKSAmIzQzOyBzaXplb2Yoc2xvdC1cdTAwM2VpZCkgXHUwMDNlIHNpemVvZih1bnNpZ25lZCBsb25nKSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiB4YV9ta192YWx1ZSgoKHVuc2lnbmVkIGxvbmcpc2xvdC1cdTAwM2Vhc19pZCkgXHUwMDNjXHUwMDNjIDE2IHwgKHVuc2lnbmVkIGxvbmcpc2xvdC1cdTAwM2VpZCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICp4YV92YWx1ZV90b19tZW1zbG90KHN0cnVjdCBrdm0gKmt2bSwgY29uc3Qgdm9pZCAqZW50cnkpXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGZ1bGxfaWQgPSB4YV90b192YWx1ZShlbnRyeSk7XG4mIzQzO1x0dTE2IGFzX2lkID0gKGZ1bGxfaWQgXHUwMDNlXHUwMDNlIDE2KSBcdTAwMjYgVTE2X01BWDtcbiYjNDM7XHRzaG9ydCBpZCA9IGZ1bGxfaWQgXHUwMDI2IFUxNl9NQVg7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogRG8gbm90IGlnbm9yZSBLVk1fTUVNU0xPVF9JTlZBTElEIG1lbXNsb3RzLCBhcyB3ZSB3YW50XG4mIzQzO1x0ICogLVx1MDAzZWVycm9yX3JlbW92ZV9mb2xpbygpLCB3aGVuIGl0IHJhY2VzIHdpdGggbWVtc2xvdCBkZWxldGlvbiwgdG8gaGF2ZVxuJiM0MztcdCAqICB1bm1hcHBlZCB0aGUgbWVtb3J5IHVwb24gY29tcGxldGlvbi5cbiYjNDM7XHQgKi9cbiYjNDM7XHRyZXR1cm4gaWRfdG9fbWVtc2xvdChfX2t2bV9tZW1zbG90cyhrdm0sIGFzX2lkKSwgaWQpO1xuJiM0Mzt9XG4mIzQzO1xuIC8qKlxuICAqIGZvbGlvX2ZpbGVfcGZuIC0gbGlrZSBmb2xpb19maWxlX3BhZ2UsIGJ1dCByZXR1cm4gYSBwZm4uXG4gICogQGZvbGlvOiBUaGUgZm9saW8gd2hpY2ggY29udGFpbnMgdGhpcyBpbmRleC5cbkBAIC0xNTcsNyAmIzQzOzE4MSw3IEBAIHN0YXRpYyBlbnVtIGt2bV9nZm5fcmFuZ2VfZmlsdGVyIGt2bV9nbWVtX2dldF9pbnZhbGlkYXRlX2ZpbHRlcihzdHJ1Y3QgaW5vZGUgKmluXG4gXHRyZXR1cm4gS1ZNX0ZJTFRFUl9QUklWQVRFO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBfX2t2bV9nbWVtX2ludmFsaWRhdGVfc3RhcnQoc3RydWN0IGdtZW1fZmlsZSAqZiwgcGdvZmZfdCBzdGFydCxcbiYjNDM7c3RhdGljIGJvb2wgX19rdm1fZ21lbV9pbnZhbGlkYXRlX3N0YXJ0KHN0cnVjdCBnbWVtX2ZpbGUgKmYsIHBnb2ZmX3Qgc3RhcnQsXG4gXHRcdFx0XHRcdHBnb2ZmX3QgZW5kLFxuIFx0XHRcdFx0XHRlbnVtIGt2bV9nZm5fcmFuZ2VfZmlsdGVyIGF0dHJfZmlsdGVyKVxuIHtcbkBAIC0xNjUsOSAmIzQzOzE4OSwxNSBAQCBzdGF0aWMgdm9pZCBfX2t2bV9nbWVtX2ludmFsaWRhdGVfc3RhcnQoc3RydWN0IGdtZW1fZmlsZSAqZiwgcGdvZmZfdCBzdGFydCxcbiBcdHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3Q7XG4gXHRzdHJ1Y3Qga3ZtICprdm0gPSBmLVx1MDAzZWt2bTtcbiBcdHVuc2lnbmVkIGxvbmcgaW5kZXg7XG4mIzQzO1x0dm9pZCAqZW50cnk7XG4gXG4tXHR4YV9mb3JfZWFjaF9yYW5nZShcdTAwMjZmLVx1MDAzZWJpbmRpbmdzLCBpbmRleCwgc2xvdCwgc3RhcnQsIGVuZCAtIDEpIHtcbi1cdFx0cGdvZmZfdCBwZ29mZiA9IHNsb3QtXHUwMDNlZ21lbS5wZ29mZjtcbiYjNDM7XHR4YV9mb3JfZWFjaF9yYW5nZShcdTAwMjZmLVx1MDAzZWJpbmRpbmdzLCBpbmRleCwgZW50cnksIHN0YXJ0LCBlbmQgLSAxKSB7XG4mIzQzO1x0XHRwZ29mZl90IHBnb2ZmO1xuJiM0MztcbiYjNDM7XHRcdHNsb3QgPSB4YV92YWx1ZV90b19tZW1zbG90KGt2bSwgZW50cnkpO1xuJiM0MztcdFx0aWYgKCFzbG90KVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdHBnb2ZmID0gc2xvdC1cdTAwM2VnbWVtLnBnb2ZmO1xuIFxuIFx0XHRzdHJ1Y3Qga3ZtX2dmbl9yYW5nZSBnZm5fcmFuZ2UgPSB7XG4gXHRcdFx0LnN0YXJ0ID0gc2xvdC1cdTAwM2ViYXNlX2dmbiAmIzQzOyBtYXgocGdvZmYsIHN0YXJ0KSAtIHBnb2ZmLFxuQEAgLTE5Miw2ICYjNDM7MjIyLDggQEAgc3RhdGljIHZvaWQgX19rdm1fZ21lbV9pbnZhbGlkYXRlX3N0YXJ0KHN0cnVjdCBnbWVtX2ZpbGUgKmYsIHBnb2ZmX3Qgc3RhcnQsXG4gXG4gXHRpZiAoZm91bmRfbWVtc2xvdClcbiBcdFx0S1ZNX01NVV9VTkxPQ0soa3ZtKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGZvdW5kX21lbXNsb3Q7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGt2bV9nbWVtX2ludmFsaWRhdGVfc3RhcnQoc3RydWN0IGlub2RlICppbm9kZSwgcGdvZmZfdCBzdGFydCxcbkBAIC0xOTksMTEgJiM0MzsyMzEsMjIgQEAgc3RhdGljIHZvaWQga3ZtX2dtZW1faW52YWxpZGF0ZV9zdGFydChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IHN0YXJ0LFxuIHtcbiBcdGVudW0ga3ZtX2dmbl9yYW5nZV9maWx0ZXIgYXR0cl9maWx0ZXI7XG4gXHRzdHJ1Y3QgZ21lbV9maWxlICpmO1xuJiM0MztcdHN0cnVjdCBrdm0gKmt2bTtcbiYjNDM7XHRpbnQgaWR4O1xuIFxuIFx0YXR0cl9maWx0ZXIgPSBrdm1fZ21lbV9nZXRfaW52YWxpZGF0ZV9maWx0ZXIoaW5vZGUpO1xuIFxuLVx0a3ZtX2dtZW1fZm9yX2VhY2hfZmlsZShmLCBpbm9kZSlcbi1cdFx0X19rdm1fZ21lbV9pbnZhbGlkYXRlX3N0YXJ0KGYsIHN0YXJ0LCBlbmQsIGF0dHJfZmlsdGVyKTtcbiYjNDM7XHRrdm1fZ21lbV9mb3JfZWFjaF9maWxlKGYsIGlub2RlKSB7XG4mIzQzO1x0XHRrdm0gPSBmLVx1MDAzZWt2bTtcbiYjNDM7XHRcdGlkeCA9IHNyY3VfcmVhZF9sb2NrKFx1MDAyNmt2bS1cdTAwM2VzcmN1KTtcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBUaGlzIGlzIHNhZmUgdG8gZG8gYmVjYXVzZSBjYWxscyB0b1xuJiM0MztcdFx0ICoga3ZtX2dtZW1faW52YWxpZGF0ZV9zdGFydCgpIGFyZSBzZXJpYWxpemVkIGJ5XG4mIzQzO1x0XHQgKiBmaWxlbWFwX2ludmFsaWRhdGVfbG9jaygpLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRmLVx1MDAzZWZvdW5kX21lbXNsb3QgPSBfX2t2bV9nbWVtX2ludmFsaWRhdGVfc3RhcnQoZiwgc3RhcnQsIGVuZCwgYXR0cl9maWx0ZXIpO1xuJiM0MztcdFx0c3JjdV9yZWFkX3VubG9jayhcdTAwMjZrdm0tXHUwMDNlc3JjdSwgaWR4KTtcbiYjNDM7XHR9XG4gfVxuIFxuIHN0YXRpYyB2b2lkIF9fa3ZtX2dtZW1faW52YWxpZGF0ZV9lbmQoc3RydWN0IGdtZW1fZmlsZSAqZiwgcGdvZmZfdCBzdGFydCxcbkBAIC0yMjMsOCAmIzQzOzI2NiwxMSBAQCBzdGF0aWMgdm9pZCBrdm1fZ21lbV9pbnZhbGlkYXRlX2VuZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IHN0YXJ0LFxuIHtcbiBcdHN0cnVjdCBnbWVtX2ZpbGUgKmY7XG4gXG4tXHRrdm1fZ21lbV9mb3JfZWFjaF9maWxlKGYsIGlub2RlKVxuJiM0MztcdGt2bV9nbWVtX2Zvcl9lYWNoX2ZpbGUoZiwgaW5vZGUpIHtcbiYjNDM7XHRcdGlmICghZi1cdTAwM2Vmb3VuZF9tZW1zbG90KVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiBcdFx0X19rdm1fZ21lbV9pbnZhbGlkYXRlX2VuZChmLCBzdGFydCwgZW5kKTtcbiYjNDM7XHR9XG4gfVxuIFxuIHN0YXRpYyBsb25nIGt2bV9nbWVtX3B1bmNoX2hvbGUoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG9mZnNldCwgbG9mZl90IGxlbilcbkBAIC0zMjYsNiAmIzQzOzM3Miw3IEBAIHN0YXRpYyBpbnQga3ZtX2dtZW1fcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbiBcdHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3Q7XG4gXHRzdHJ1Y3Qga3ZtICprdm0gPSBmLVx1MDAzZWt2bTtcbiBcdHVuc2lnbmVkIGxvbmcgaW5kZXg7XG4mIzQzO1x0dm9pZCAqZW50cnk7XG4gXG4gXHQvKlxuIFx0ICogUHJldmVudCBjb25jdXJyZW50IGF0dGVtcHRzIHRvICp1bmJpbmQqIGEgbWVtc2xvdC4gIFRoaXMgaXMgdGhlIGxhc3RcbkBAIC0zNDQsMTcgJiM0MzszOTEsMTggQEAgc3RhdGljIGludCBrdm1fZ21lbV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuIFxuIFx0ZmlsZW1hcF9pbnZhbGlkYXRlX2xvY2soaW5vZGUtXHUwMDNlaV9tYXBwaW5nKTtcbiBcbi1cdHhhX2Zvcl9lYWNoKFx1MDAyNmYtXHUwMDNlYmluZGluZ3MsIGluZGV4LCBzbG90KVxuJiM0MztcdHhhX2Zvcl9lYWNoKFx1MDAyNmYtXHUwMDNlYmluZGluZ3MsIGluZGV4LCBlbnRyeSkge1xuJiM0MztcdFx0c2xvdCA9IHhhX3ZhbHVlX3RvX21lbXNsb3Qoa3ZtLCBlbnRyeSk7XG4gXHRcdFdSSVRFX09OQ0Uoc2xvdC1cdTAwM2VnbWVtLmZpbGUsIE5VTEwpO1xuJiM0MztcdH1cbiBcbiBcdC8qXG4gXHQgKiBBbGwgaW4tZmxpZ2h0IG9wZXJhdGlvbnMgYXJlIGdvbmUgYW5kIG5ldyBiaW5kaW5ncyBjYW4gYmUgY3JlYXRlZC5cbiBcdCAqIFphcCBhbGwgU1BURXMgcG9pbnRlZCBhdCBieSB0aGlzIGZpbGUuICBEbyBub3QgZnJlZSB0aGUgYmFja2luZ1xuIFx0ICogbWVtb3J5LCBhcyBpdHMgbGlmZXRpbWUgaXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBpbm9kZSwgbm90IHRoZSBmaWxlLlxuIFx0ICovXG4tXHRfX2t2bV9nbWVtX2ludmFsaWRhdGVfc3RhcnQoZiwgMCwgLTF1bCxcbi1cdFx0XHRcdCAgICBrdm1fZ21lbV9nZXRfaW52YWxpZGF0ZV9maWx0ZXIoaW5vZGUpKTtcbi1cdF9fa3ZtX2dtZW1faW52YWxpZGF0ZV9lbmQoZiwgMCwgLTF1bCk7XG4mIzQzO1x0aWYgKF9fa3ZtX2dtZW1faW52YWxpZGF0ZV9zdGFydChmLCAwLCAtMXVsLCBrdm1fZ21lbV9nZXRfaW52YWxpZGF0ZV9maWx0ZXIoaW5vZGUpKSlcbiYjNDM7XHRcdF9fa3ZtX2dtZW1faW52YWxpZGF0ZV9lbmQoZiwgMCwgLTF1bCk7XG4gXG4gXHRsaXN0X2RlbChcdTAwMjZmLVx1MDAzZWVudHJ5KTtcbiBcbkBAIC00OTgsMTQgJiM0Mzs1NDYsMjAgQEAgc3RhdGljIGludCBrdm1fZ21lbV9taWdyYXRlX2ZvbGlvKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuIFxuIHN0YXRpYyBpbnQga3ZtX2dtZW1fZXJyb3JfZm9saW8oc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuJiM0MztcdGVudW0ga3ZtX2dmbl9yYW5nZV9maWx0ZXIgYXR0cl9maWx0ZXI7XG4mIzQzO1x0c3RydWN0IGlub2RlICppbm9kZSA9IG1hcHBpbmctXHUwMDNlaG9zdDtcbiYjNDM7XHRzdHJ1Y3QgZ21lbV9maWxlICpmO1xuIFx0cGdvZmZfdCBzdGFydCwgZW5kO1xuJiM0MztcdGJvb2wgZm91bmRfbWVtc2xvdDtcbiYjNDM7XHRzdHJ1Y3Qga3ZtICprdm07XG4mIzQzO1x0aW50IGlkeDtcbiBcbiBcdGZpbGVtYXBfaW52YWxpZGF0ZV9sb2NrX3NoYXJlZChtYXBwaW5nKTtcbiBcbiBcdHN0YXJ0ID0gZm9saW8tXHUwMDNlaW5kZXg7XG4gXHRlbmQgPSBzdGFydCAmIzQzOyBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG4gXG4tXHRrdm1fZ21lbV9pbnZhbGlkYXRlX3N0YXJ0KG1hcHBpbmctXHUwMDNlaG9zdCwgc3RhcnQsIGVuZCk7XG4mIzQzO1x0YXR0cl9maWx0ZXIgPSBrdm1fZ21lbV9nZXRfaW52YWxpZGF0ZV9maWx0ZXIoaW5vZGUpO1xuIFxuIFx0LypcbiBcdCAqIERvIG5vdCB0cnVuY2F0ZSB0aGUgcmFuZ2UsIHdoYXQgYWN0aW9uIGlzIHRha2VuIGluIHJlc3BvbnNlIHRvIHRoZVxuQEAgLTUxNSw4ICYjNDM7NTY5LDE5IEBAIHN0YXRpYyBpbnQga3ZtX2dtZW1fZXJyb3JfZm9saW8oc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9sXG4gXHQgKiBhdCB3aGljaCBwb2ludCBLVk0gY2FuIGVpdGhlciB0ZXJtaW5hdGUgdGhlIFZNIG9yIHByb3BhZ2F0ZSB0aGVcbiBcdCAqIGVycm9yIHRvIHVzZXJzcGFjZS5cbiBcdCAqL1xuJiM0MztcdGt2bV9nbWVtX2Zvcl9lYWNoX2ZpbGUoZiwgaW5vZGUpIHtcbiYjNDM7XHRcdGt2bSA9IGYtXHUwMDNla3ZtO1xuIFxuLVx0a3ZtX2dtZW1faW52YWxpZGF0ZV9lbmQobWFwcGluZy1cdTAwM2Vob3N0LCBzdGFydCwgZW5kKTtcbiYjNDM7XHRcdGlkeCA9IHNyY3VfcmVhZF9sb2NrKFx1MDAyNmt2bS1cdTAwM2VzcmN1KTtcbiYjNDM7XHRcdGZvdW5kX21lbXNsb3QgPSBfX2t2bV9nbWVtX2ludmFsaWRhdGVfc3RhcnQoZiwgc3RhcnQsIGVuZCwgYXR0cl9maWx0ZXIpO1xuJiM0MztcdFx0c3JjdV9yZWFkX3VubG9jayhcdTAwMjZrdm0tXHUwMDNlc3JjdSwgaWR4KTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoZm91bmRfbWVtc2xvdCkge1xuJiM0MztcdFx0XHRLVk1fTU1VX0xPQ0soa3ZtKTtcbiYjNDM7XHRcdFx0a3ZtX21tdV9pbnZhbGlkYXRlX2VuZChrdm0pO1xuJiM0MztcdFx0XHRLVk1fTU1VX1VOTE9DSyhrdm0pO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiBcbiBcdGZpbGVtYXBfaW52YWxpZGF0ZV91bmxvY2tfc2hhcmVkKG1hcHBpbmcpO1xuIFxuQEAgLTU1Nyw2ICYjNDM7NjIyLDExIEBAIGJvb2wgX193ZWFrIGt2bV9hcmNoX3N1cHBvcnRzX2dtZW1faW5pdF9zaGFyZWQoc3RydWN0IGt2bSAqa3ZtKVxuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuJiM0Mztib29sIF9fd2VhayBrdm1fYXJjaF9zdXBwb3J0c19nbWVtX21tYXBfZGlydHlfbG9nZ2luZyhzdHJ1Y3Qga3ZtICprdm0pXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBfX2t2bV9nbWVtX2NyZWF0ZShzdHJ1Y3Qga3ZtICprdm0sIGxvZmZfdCBzaXplLCB1NjQgZmxhZ3MpXG4ge1xuIFx0c3RhdGljIGNvbnN0IGNoYXIgKm5hbWUgPSBcJiMzNDtba3ZtLWdtZW1dXCYjMzQ7O1xuQEAgLTY0MCw2ICYjNDM7NzEwLDY2IEBAIGludCBrdm1fZ21lbV9jcmVhdGUoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2NyZWF0ZV9ndWVzdF9tZW1mZCAqYXJncylcbiBcdHJldHVybiBfX2t2bV9nbWVtX2NyZWF0ZShrdm0sIHNpemUsIGZsYWdzKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgX19rdm1fZ21lbV9jaGVja19ub19jaGFuZ2Uoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpvbGQsXG4mIzQzO1x0XHRcdFx0ICAgICAgc3RydWN0IGZpbGUgKm9sZF9maWxlLCB1bnNpZ25lZCBpbnQgZmQsXG4mIzQzO1x0XHRcdFx0ICAgICAgbG9mZl90IG9mZnNldClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBmaWxlICpuZXdfZmlsZTtcbiYjNDM7XG4mIzQzO1x0bmV3X2ZpbGUgPSBmZ2V0KGZkKTtcbiYjNDM7XHRpZiAoIW5ld19maWxlKVxuJiM0MztcdFx0cmV0dXJuIC1FQkFERjtcbiYjNDM7XHRpZiAobmV3X2ZpbGUgIT0gb2xkX2ZpbGUpIHtcbiYjNDM7XHRcdGZwdXQobmV3X2ZpbGUpO1xuJiM0MztcdFx0cmV0dXJuIC1FQkFERjtcbiYjNDM7XHR9XG4mIzQzO1x0ZnB1dChuZXdfZmlsZSk7XG4mIzQzO1xuJiM0MztcdGlmIChvbGQtXHUwMDNlZ21lbS5wZ29mZiAhPSBvZmZzZXQgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCBrdm1fZ21lbV9jaGVja19ub19jaGFuZ2Uoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpvbGQsXG4mIzQzO1x0XHRcdCAgICAgdW5zaWduZWQgaW50IGZkLCBsb2ZmX3Qgb2Zmc2V0KVxuJiM0Mzt7XG4mIzQzO1x0Q0xBU1MoZ21lbV9nZXRfZmlsZSwgb2xkX2ZpbGUpKG9sZCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBfX2t2bV9nbWVtX2NoZWNrX25vX2NoYW5nZShrdm0sIG9sZCwgb2xkX2ZpbGUsIGZkLCBvZmZzZXQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQga3ZtX2dtZW1fY2hhbmdlX2ZsYWdzKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqb2xkLFxuJiM0MztcdFx0XHQgIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm5ldywgdW5zaWduZWQgaW50IGZkLFxuJiM0MztcdFx0XHQgIGxvZmZfdCBvZmZzZXQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZ21lbV9maWxlICpvbGRfZjtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNmt2bS1cdTAwM2VzbG90c19sb2NrKTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFrdm1fbWVtc2xvdF9pc19nbWVtX29ubHkob2xkKSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRDTEFTUyhnbWVtX2dldF9maWxlLCBvbGRfZmlsZSkob2xkKTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gX19rdm1fZ21lbV9jaGVja19ub19jaGFuZ2Uoa3ZtLCBvbGQsIG9sZF9maWxlLCBmZCwgb2Zmc2V0KTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0b2xkX2YgPSBvbGRfZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGE7XG4mIzQzO1x0aWYgKHhhX2xvYWQoXHUwMDI2b2xkX2YtXHUwMDNlYmluZGluZ3MsIG9sZC1cdTAwM2VnbWVtLnBnb2ZmKSAhPSBtZW1zbG90X3RvX3hhX3ZhbHVlKG5ldykpIHtcbiYjNDM7XHRcdFdBUk5fT05fT05DRSh4YV90b192YWx1ZSh4YV9sb2FkKFx1MDAyNm9sZF9mLVx1MDAzZWJpbmRpbmdzLCBvbGQtXHUwMDNlZ21lbS5wZ29mZikpKTtcbiYjNDM7XHRcdHJldHVybiAtRUlPO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0bmV3LVx1MDAzZWdtZW0uZmlsZSA9IG9sZC1cdTAwM2VnbWVtLmZpbGU7XG4mIzQzO1x0bmV3LVx1MDAzZWdtZW0ucGdvZmYgPSBvbGQtXHUwMDNlZ21lbS5wZ29mZjtcbiYjNDM7XHRuZXctXHUwMDNlZmxhZ3MgfD0gS1ZNX01FTVNMT1RfR01FTV9PTkxZO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiBpbnQga3ZtX2dtZW1fYmluZChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QsXG4gXHRcdCAgdW5zaWduZWQgaW50IGZkLCB1b2ZmX3Qgb2Zmc2V0KVxuIHtcbkBAIC02NjksNiAmIzQzOzc5OSwxMSBAQCBpbnQga3ZtX2dtZW1fYmluZChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QsXG4gXHRpZiAoIVBBR0VfQUxJR05FRChvZmZzZXQpIHx8IG9mZnNldCAmIzQzOyBzaXplIFx1MDAzZSBpX3NpemVfcmVhZChpbm9kZSkpXG4gXHRcdGdvdG8gZXJyO1xuIFxuJiM0MztcdGlmIChzbG90LVx1MDAzZWZsYWdzIFx1MDAyNiBLVk1fTUVNX0xPR19ESVJUWV9QQUdFUyBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgKCFrdm1fZ21lbV9zdXBwb3J0c19tbWFwKGlub2RlKSB8fFxuJiM0MztcdCAgICAgIWt2bV9hcmNoX3N1cHBvcnRzX2dtZW1fbW1hcF9kaXJ0eV9sb2dnaW5nKGt2bSkpKVxuJiM0MztcdFx0Z290byBlcnI7XG4mIzQzO1xuIFx0ZmlsZW1hcF9pbnZhbGlkYXRlX2xvY2soaW5vZGUtXHUwMDNlaV9tYXBwaW5nKTtcbiBcbiBcdHN0YXJ0ID0gb2Zmc2V0IFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuQEAgLTY5MSw3ICYjNDM7ODI2LDcgQEAgaW50IGt2bV9nbWVtX2JpbmQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LFxuIFx0aWYgKGt2bV9nbWVtX3N1cHBvcnRzX21tYXAoaW5vZGUpKVxuIFx0XHRzbG90LVx1MDAzZWZsYWdzIHw9IEtWTV9NRU1TTE9UX0dNRU1fT05MWTtcbiBcbi1cdHhhX3N0b3JlX3JhbmdlKFx1MDAyNmYtXHUwMDNlYmluZGluZ3MsIHN0YXJ0LCBlbmQgLSAxLCBzbG90LCBHRlBfS0VSTkVMKTtcbiYjNDM7XHR4YV9zdG9yZV9yYW5nZShcdTAwMjZmLVx1MDAzZWJpbmRpbmdzLCBzdGFydCwgZW5kIC0gMSwgbWVtc2xvdF90b194YV92YWx1ZShzbG90KSwgR0ZQX0tFUk5FTCk7XG4gXHRmaWxlbWFwX2ludmFsaWRhdGVfdW5sb2NrKGlub2RlLVx1MDAzZWlfbWFwcGluZyk7XG4gXG4gXHQvKlxuQEAgLTc2NSw4ICYjNDM7OTAwLDggQEAgc3RhdGljIHN0cnVjdCBmb2xpbyAqX19rdm1fZ21lbV9nZXRfcGZuKHN0cnVjdCBmaWxlICpmaWxlLFxuIFx0XHRyZXR1cm4gRVJSX1BUUigtRUZBVUxUKTtcbiBcdH1cbiBcbi1cdGlmICh4YV9sb2FkKFx1MDAyNmYtXHUwMDNlYmluZGluZ3MsIGluZGV4KSAhPSBzbG90KSB7XG4tXHRcdFdBUk5fT05fT05DRSh4YV9sb2FkKFx1MDAyNmYtXHUwMDNlYmluZGluZ3MsIGluZGV4KSk7XG4mIzQzO1x0aWYgKHhhX2xvYWQoXHUwMDI2Zi1cdTAwM2ViaW5kaW5ncywgaW5kZXgpICE9IG1lbXNsb3RfdG9feGFfdmFsdWUoc2xvdCkpIHtcbiYjNDM7XHRcdFdBUk5fT05fT05DRSh4YV90b192YWx1ZSh4YV9sb2FkKFx1MDAyNmYtXHUwMDNlYmluZGluZ3MsIGluZGV4KSkpO1xuIFx0XHRyZXR1cm4gRVJSX1BUUigtRUlPKTtcbiBcdH1cbiBcbmRpZmYgLS1naXQgYS92aXJ0L2t2bS9rdm1fbWFpbi5jIGIvdmlydC9rdm0va3ZtX21haW4uY1xuaW5kZXggZTQ0YzIwYzA0OTYxMGQuLmFmMzgwZThmMmI2OGQ0IDEwMDY0NFxuLS0tIGEvdmlydC9rdm0va3ZtX21haW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvdmlydC9rdm0va3ZtX21haW4uY1xuQEAgLTE1NzMsMTQgJiM0MzsxNTczLDE0IEBAIHN0YXRpYyB2b2lkIGt2bV9yZXBsYWNlX21lbXNsb3Qoc3RydWN0IGt2bSAqa3ZtLFxuIHN0YXRpYyBpbnQgY2hlY2tfbWVtb3J5X3JlZ2lvbl9mbGFncyhzdHJ1Y3Qga3ZtICprdm0sXG4gXHRcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBrdm1fdXNlcnNwYWNlX21lbW9yeV9yZWdpb24yICptZW0pXG4ge1xuLVx0dTMyIHZhbGlkX2ZsYWdzID0gS1ZNX01FTV9MT0dfRElSVFlfUEFHRVM7XG4mIzQzO1x0dTMyIHZhbGlkX2ZsYWdzID0gMDtcbiBcbiBcdGlmIChJU19FTkFCTEVEKENPTkZJR19LVk1fR1VFU1RfTUVNRkQpKVxuIFx0XHR2YWxpZF9mbGFncyB8PSBLVk1fTUVNX0dVRVNUX01FTUZEO1xuIFxuLVx0LyogRGlydHkgbG9nZ2luZyBwcml2YXRlIG1lbW9yeSBpcyBub3QgY3VycmVudGx5IHN1cHBvcnRlZC4gKi9cbi1cdGlmIChtZW0tXHUwMDNlZmxhZ3MgXHUwMDI2IEtWTV9NRU1fR1VFU1RfTUVNRkQpXG4tXHRcdHZhbGlkX2ZsYWdzIFx1MDAyNj0gfktWTV9NRU1fTE9HX0RJUlRZX1BBR0VTO1xuJiM0MztcdGlmICghKG1lbS1cdTAwM2VmbGFncyBcdTAwMjYgS1ZNX01FTV9HVUVTVF9NRU1GRCkgfHxcbiYjNDM7XHQgICAga3ZtX2FyY2hfc3VwcG9ydHNfZ21lbV9tbWFwX2RpcnR5X2xvZ2dpbmcoa3ZtKSlcbiYjNDM7XHRcdHZhbGlkX2ZsYWdzIHw9IEtWTV9NRU1fTE9HX0RJUlRZX1BBR0VTO1xuIFxuIFx0LypcbiBcdCAqIEdVRVNUX01FTUZEIGlzIGluY29tcGF0aWJsZSB3aXRoIHJlYWQtb25seSBtZW1zbG90cywgYXMgd3JpdGVzIHRvXG5AQCAtMTczOSwxNiAmIzQzOzE3MzksNiBAQCBzdGF0aWMgdm9pZCBrdm1fY29tbWl0X21lbW9yeV9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLFxuIFx0XHQgKi9cbiBcdFx0aWYgKG9sZC1cdTAwM2VkaXJ0eV9iaXRtYXAgXHUwMDI2XHUwMDI2ICFuZXctXHUwMDNlZGlydHlfYml0bWFwKVxuIFx0XHRcdGt2bV9kZXN0cm95X2RpcnR5X2JpdG1hcChvbGQpO1xuLVxuLVx0XHQvKlxuLVx0XHQgKiBVbmJpbmQgdGhlIGd1ZXN0X21lbWZkIGluc3RhbmNlIGFzIG5lZWRlZDsgdGhlIEBuZXcgc2xvdCBoYXNcbi1cdFx0ICogYWxyZWFkeSBjcmVhdGVkIGl0cyBvd24gYmluZGluZy4gIFRPRE86IERyb3AgdGhlIFdBUk4gd2hlblxuLVx0XHQgKiBkaXJ0eSBsb2dnaW5nIGd1ZXN0X21lbWZkIG1lbXNsb3RzIGlzIHN1cHBvcnRlZC4gIFVudGlsIHRoZW4sXG4tXHRcdCAqIGZsYWdzLW9ubHkgY2hhbmdlcyBvbiBndWVzdF9tZW1mZCBzbG90cyBzaG91bGQgYmUgaW1wb3NzaWJsZS5cbi1cdFx0ICovXG4tXHRcdGlmIChXQVJOX09OX09OQ0Uob2xkLVx1MDAzZWZsYWdzIFx1MDAyNiBLVk1fTUVNX0dVRVNUX01FTUZEKSlcbi1cdFx0XHRrdm1fZ21lbV91bmJpbmQob2xkKTtcbi1cbiBcdFx0LypcbiBcdFx0ICogVGhlIGZpbmFsIHF1aXJrLiAgRnJlZSB0aGUgZGV0YWNoZWQsIG9sZCBzbG90LCBidXQgb25seSBpdHNcbiBcdFx0ICogbWVtb3J5LCBub3QgYW55IG1ldGFkYXRhLiAgTWV0YWRhdGEsIGluY2x1ZGluZyBhcmNoIHNwZWNpZmljXG5AQCAtMjA3MywyMiAmIzQzOzIwNjMsMjcgQEAgc3RhdGljIGludCBrdm1fc2V0X21lbW9yeV9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLFxuIFx0XHRpZiAoKGt2bS1cdTAwM2Vucl9tZW1zbG90X3BhZ2VzICYjNDM7IG5wYWdlcykgXHUwMDNjIGt2bS1cdTAwM2Vucl9tZW1zbG90X3BhZ2VzKVxuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fSBlbHNlIHsgLyogTW9kaWZ5IGFuIGV4aXN0aW5nIHNsb3QuICovXG4tXHRcdC8qIFByaXZhdGUgbWVtc2xvdHMgYXJlIGltbXV0YWJsZSwgdGhleSBjYW4gb25seSBiZSBkZWxldGVkLiAqL1xuLVx0XHRpZiAobWVtLVx1MDAzZWZsYWdzIFx1MDAyNiBLVk1fTUVNX0dVRVNUX01FTUZEKVxuLVx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHRpZiAoKG1lbS1cdTAwM2V1c2Vyc3BhY2VfYWRkciAhPSBvbGQtXHUwMDNldXNlcnNwYWNlX2FkZHIpIHx8XG4gXHRcdCAgICAobnBhZ2VzICE9IG9sZC1cdTAwM2VucGFnZXMpIHx8XG4gXHRcdCAgICAoKG1lbS1cdTAwM2VmbGFncyBeIG9sZC1cdTAwM2VmbGFncykgXHUwMDI2IChLVk1fTUVNX1JFQURPTkxZIHwgS1ZNX01FTV9HVUVTVF9NRU1GRCkpKVxuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFxuLVx0XHRpZiAoYmFzZV9nZm4gIT0gb2xkLVx1MDAzZWJhc2VfZ2ZuKVxuJiM0MztcdFx0aWYgKGJhc2VfZ2ZuICE9IG9sZC1cdTAwM2ViYXNlX2dmbikge1xuIFx0XHRcdGNoYW5nZSA9IEtWTV9NUl9NT1ZFO1xuLVx0XHRlbHNlIGlmIChtZW0tXHUwMDNlZmxhZ3MgIT0gb2xkLVx1MDAzZWZsYWdzKVxuJiM0MztcdFx0fSBlbHNlIGlmIChtZW0tXHUwMDNlZmxhZ3MgIT0gKG9sZC1cdTAwM2VmbGFncyBcdTAwMjYgTUVNU0xPVF9VU0VSX0ZMQUdTX01BU0spKSB7XG4gXHRcdFx0Y2hhbmdlID0gS1ZNX01SX0ZMQUdTX09OTFk7XG4tXHRcdGVsc2UgLyogTm90aGluZyB0byBjaGFuZ2UuICovXG4mIzQzO1x0XHR9IGVsc2UgaWYgKG1lbS1cdTAwM2VmbGFncyBcdTAwMjYgS1ZNX01FTV9HVUVTVF9NRU1GRCkge1xuJiM0MztcdFx0XHRyZXR1cm4ga3ZtX2dtZW1fY2hlY2tfbm9fY2hhbmdlKGt2bSwgb2xkLCBtZW0tXHUwMDNlZ3Vlc3RfbWVtZmQsXG4mIzQzO1x0XHRcdFx0XHRcdFx0bWVtLVx1MDAzZWd1ZXN0X21lbWZkX29mZnNldCk7XG4mIzQzO1x0XHR9IGVsc2Uge1xuIFx0XHRcdHJldHVybiAwO1xuJiM0MztcdFx0fVxuIFx0fVxuIFxuJiM0MztcdGlmIChtZW0tXHUwMDNlZmxhZ3MgXHUwMDI2IEtWTV9NRU1fR1VFU1RfTUVNRkQgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIGNoYW5nZSAhPSBLVk1fTVJfQ1JFQVRFIFx1MDAyNlx1MDAyNiBjaGFuZ2UgIT0gS1ZNX01SX0ZMQUdTX09OTFkpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4gXHRpZiAoKGNoYW5nZSA9PSBLVk1fTVJfQ1JFQVRFIHx8IGNoYW5nZSA9PSBLVk1fTVJfTU9WRSkgXHUwMDI2XHUwMDI2XG4gXHQgICAga3ZtX2NoZWNrX21lbXNsb3Rfb3ZlcmxhcChzbG90cywgaWQsIGJhc2VfZ2ZuLCBiYXNlX2dmbiAmIzQzOyBucGFnZXMpKVxuIFx0XHRyZXR1cm4gLUVFWElTVDtcbkBAIC0yMTA1LDcgJiM0MzsyMTAwLDEyIEBAIHN0YXRpYyBpbnQga3ZtX3NldF9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSxcbiBcdG5ldy1cdTAwM2VmbGFncyA9IG1lbS1cdTAwM2VmbGFncztcbiBcdG5ldy1cdTAwM2V1c2Vyc3BhY2VfYWRkciA9IG1lbS1cdTAwM2V1c2Vyc3BhY2VfYWRkcjtcbiBcdGlmIChtZW0tXHUwMDNlZmxhZ3MgXHUwMDI2IEtWTV9NRU1fR1VFU1RfTUVNRkQpIHtcbi1cdFx0ciA9IGt2bV9nbWVtX2JpbmQoa3ZtLCBuZXcsIG1lbS1cdTAwM2VndWVzdF9tZW1mZCwgbWVtLVx1MDAzZWd1ZXN0X21lbWZkX29mZnNldCk7XG4mIzQzO1x0XHRpZiAoY2hhbmdlID09IEtWTV9NUl9DUkVBVEUpIHtcbiYjNDM7XHRcdFx0ciA9IGt2bV9nbWVtX2JpbmQoa3ZtLCBuZXcsIG1lbS1cdTAwM2VndWVzdF9tZW1mZCwgbWVtLVx1MDAzZWd1ZXN0X21lbWZkX29mZnNldCk7XG4mIzQzO1x0XHR9IGVsc2UgaWYgKGNoYW5nZSA9PSBLVk1fTVJfRkxBR1NfT05MWSkge1xuJiM0MztcdFx0XHRyID0ga3ZtX2dtZW1fY2hhbmdlX2ZsYWdzKGt2bSwgb2xkLCBuZXcsIG1lbS1cdTAwM2VndWVzdF9tZW1mZCxcbiYjNDM7XHRcdFx0XHRcdFx0ICBtZW0tXHUwMDNlZ3Vlc3RfbWVtZmRfb2Zmc2V0KTtcbiYjNDM7XHRcdH1cbiBcdFx0aWYgKHIpXG4gXHRcdFx0Z290byBvdXQ7XG4gXHR9XG5AQCAtMjExNyw3ICYjNDM7MjExNyw3IEBAIHN0YXRpYyBpbnQga3ZtX3NldF9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSxcbiBcdHJldHVybiAwO1xuIFxuIG91dF91bmJpbmQ6XG4tXHRpZiAobWVtLVx1MDAzZWZsYWdzIFx1MDAyNiBLVk1fTUVNX0dVRVNUX01FTUZEKVxuJiM0MztcdGlmICgobWVtLVx1MDAzZWZsYWdzIFx1MDAyNiBLVk1fTUVNX0dVRVNUX01FTUZEKSBcdTAwMjZcdTAwMjYgY2hhbmdlID09IEtWTV9NUl9DUkVBVEUpXG4gXHRcdGt2bV9nbWVtX3VuYmluZChuZXcpO1xuIG91dDpcbiBcdGtmcmVlKG5ldyk7XG5kaWZmIC0tZ2l0IGEvdmlydC9rdm0va3ZtX21tLmggYi92aXJ0L2t2bS9rdm1fbW0uaFxuaW5kZXggNzUxMGNhOTE1ZGQxYWEuLmM1OGRmZWIwZjNkZjU1IDEwMDY0NFxuLS0tIGEvdmlydC9rdm0va3ZtX21tLmhcbiYjNDM7JiM0MzsmIzQzOyBiL3ZpcnQva3ZtL2t2bV9tbS5oXG5AQCAtNzcsNiAmIzQzOzc3LDkgQEAgaW50IGt2bV9nbWVtX2NyZWF0ZShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fY3JlYXRlX2d1ZXN0X21lbWZkICphcmdzKTtcbiBpbnQga3ZtX2dtZW1fYmluZChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QsXG4gXHRcdCAgdW5zaWduZWQgaW50IGZkLCB1b2ZmX3Qgb2Zmc2V0KTtcbiB2b2lkIGt2bV9nbWVtX3VuYmluZChzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90KTtcbiYjNDM7aW50IGt2bV9nbWVtX2NoYW5nZV9mbGFncyhzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm9sZCxcbiYjNDM7XHRcdFx0ICBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpuZXcsIHVuc2lnbmVkIGludCBmZCxcbiYjNDM7XHRcdFx0ICBsb2ZmX3Qgb2Zmc2V0KTtcbiAjZWxzZVxuIHN0YXRpYyBpbmxpbmUgaW50IGt2bV9nbWVtX2luaXQoc3RydWN0IG1vZHVsZSAqbW9kdWxlKVxuIHtcbkBAIC05NSw2ICYjNDM7OTgsMTQgQEAgc3RhdGljIGlubGluZSB2b2lkIGt2bV9nbWVtX3VuYmluZChzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90KVxuIHtcbiBcdFdBUk5fT05fT05DRSgxKTtcbiB9XG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IGt2bV9nbWVtX2NoYW5nZV9mbGFncyhzdHJ1Y3Qga3ZtICprdm0sXG4mIzQzO1x0XHRcdFx0XHRzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpvbGQsXG4mIzQzO1x0XHRcdFx0XHRzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpuZXcsXG4mIzQzO1x0XHRcdFx0XHR1bnNpZ25lZCBpbnQgZmQsIGxvZmZfdCBvZmZzZXQpXG4mIzQzO3tcbiYjNDM7XHRXQVJOX09OX09OQ0UoMSk7XG4mIzQzO1x0cmV0dXJuIC1FSU87XG4mIzQzO31cbiAjZW5kaWYgLyogQ09ORklHX0tWTV9HVUVTVF9NRU1GRCAqL1xuIFxuICNlbmRpZiAvKiBfX0tWTV9NTV9IX18gKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxNzoyNjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1fZ21lbV9jaGFuZ2VfZmxhZ3MmIzM0OywKICAgICYjMzQ7a3ZtX2dtZW1fY2hlY2tfbm9fY2hhbmdlJiMzNDssCiAgICAmIzM0O19fa3ZtX2dtZW1faW52YWxpZGF0ZV9zdGFydCYjMzQ7LAogICAgJiMzNDtfX2t2bV9nbWVtX2ludmFsaWRhdGVfZW5kJiMzNDssCiAgICAmIzM0O2t2bV9nbWVtX2Vycm9yX2ZvbGlvJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgc3VwcG9ydCBmb3IgZGlydHkgcGFnZSBsb2dnaW5nIGZvciBgZ3Vlc3RfbWVtZmRgIGJhY2tlZCBtZW1zbG90cyBpbiBLVk0uIEl0IG1vZGlmaWVzIHRoZSBLVk0gbWVtb3J5IHJlZ2lvbiBjb25maWd1cmF0aW9uIGxvZ2ljIGFuZCB0aGUgaW52YWxpZGF0aW9uIHBhdGhzIGZvciBndWVzdCBtZW1vcnkuIFRoZXNlIGFyZSBjb3JlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiBLVk0gdGhhdCBjYW4gYmUgcmVhY2hlZCB2aWEgS1ZNIGlvY3RscyAoZS5nLiwgYEtWTV9TRVRfVVNFUl9NRU1PUllfUkVHSU9OMmApIGFuZCBtZW1vcnkgaW52YWxpZGF0aW9uIGV2ZW50cywgbWFraW5nIHRoZW0gaGlnaGx5IHJlbGV2YW50IGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAxZjNjN2FjNTU3MTc4OTljNGM5MWFjNDlmZGUzNjQ4ODVkODhlZTY5CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBKdWwgMiAxNzoyNjo1MyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdCBiL0RvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdAppbmRleCBhNWY5ZWU5MmY0M2U4ZC4uNTAxMmFmZTZhOWI1NTkgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QKQEAgLTk0OTMsNiAmIzQzOzk0OTMsMTUgQEAgdGFrZSBjYXJlIHRvIGRpZmZlcmVudGlhdGUgYmV0d2VlbiB0aGVzZSBjYXNlcy4KIFRoZSBwcmVzZW5jZSBvZiB0aGlzIGNhcGFiaWxpdHkgaW5kaWNhdGVzIHRoYXQgdGhlIG5lc3RlZCBLVk0gZ3Vlc3QgY2FuCiBzdGFydCBpbiBFU0EgbW9kZS4KIAomIzQzOzguNDggS1ZNX0NBUF9HVUVTVF9NRU1GRF9NTUFQX0xPR19ESVJUWV9QQUdFUwomIzQzOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQomIzQzOwomIzQzOzpBcmNoaXRlY3R1cmVzOiBhbGwKJiM0MzsKJiM0MztUaGUgcHJlc2VuY2Ugb2YgdGhpcyBjYXBhYmlsaXR5IGluZGljYXRlcyB0aGF0IG1lbXNsb3RzIGJhY2tlZCBieSBhIGd1ZXN0X21lbWZkCiYjNDM7ZmlsZSBkZXNjcmlwdG9yIGNyZWF0ZWQgd2l0aCB0aGUgR1VFU1RfTUVNRkRfRkxBR19NTUFQIGZsYWcgY2FuIGhhdmUgZGlydHkKJiM0MztwYWdlIGxvZ2dpbmcgZW5hYmxlZC4KJiM0MzsKIDkuIEtub3duIEtWTSBBUEkgcHJvYmxlbXMKID09PT09PT09PT09PT09PT09PT09PT09PT0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vYXJtLmMgYi9hcmNoL2FybTY0L2t2bS9hcm0uYwppbmRleCA1MGFkZmZmNzViZTgyZS4uZTkyZTVkN2I1MzNhZGEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQva3ZtL2FybS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQva3ZtL2FybS5jCkBAIC0zOTMsNiAmIzQzOzM5Myw5IEBAIGludCBrdm1fdm1faW9jdGxfY2hlY2tfZXh0ZW5zaW9uKHN0cnVjdCBrdm0gKmt2bSwgbG9uZyBleHQpCiAJY2FzZSBLVk1fQ0FQX0NPVU5URVJfT0ZGU0VUOgogCWNhc2UgS1ZNX0NBUF9BUk1fV1JJVEFCTEVfSU1QX0lEX1JFR1M6CiAJY2FzZSBLVk1fQ0FQX0FSTV9TRUFfVE9fVVNFUjoKJiM0MzsjaWZkZWYgQ09ORklHX0tWTV9HVUVTVF9NRU1GRAomIzQzOwljYXNlIEtWTV9DQVBfR1VFU1RfTUVNRkRfTU1BUF9MT0dfRElSVFlfUEFHRVM6CiYjNDM7I2VuZGlmCiAJCXIgPSAxOwogCQlicmVhazsKIAljYXNlIEtWTV9DQVBfU0VUX0dVRVNUX0RFQlVHMjoKQEAgLTQ5Myw2ICYjNDM7NDk2LDI1IEBAIGludCBrdm1fdm1faW9jdGxfY2hlY2tfZXh0ZW5zaW9uKHN0cnVjdCBrdm0gKmt2bSwgbG9uZyBleHQpCiAJcmV0dXJuIHI7CiB9CiAKJiM0MzsjaWZkZWYgQ09ORklHX0tWTV9HVUVTVF9NRU1GRAomIzQzO2Jvb2wga3ZtX2FyY2hfc3VwcG9ydHNfZ21lbV9tbWFwX2RpcnR5X2xvZ2dpbmcoc3RydWN0IGt2bSAqa3ZtKQomIzQzO3sKJiM0MzsJLyoKJiM0MzsJICogUHJvdGVjdGVkIHBLVk0gVk1zIGRvbiYjMzk7dCBhbGxvdyBkaXJ0eSBwYWdlIGxvZ2dpbmcsIGZhaWwgZWFybHkgaGVyZQomIzQzOwkgKiBpbnN0ZWFkIG9mIGluIGt2bV9hcmNoX3ByZXBhcmVfbWVtb3J5X3JlZ2lvbigpLgomIzQzOwkgKgomIzQzOwkgKiBLVk1fQ0FQX0dVRVNUX01FTUZEX01NQVBfTE9HX0RJUlRZX1BBR0VTIGlzIG5vdCBhdmFpbGFibGUgZm9yIGEKJiM0MzsJICogcHJvdGVjdGVkIHBLVk0gVk0sIGFuZCByZXR1cm5pbmcgZmFsc2UgbWVhbnMgdGhhdAomIzQzOwkgKiBLVk1fU0VUX1VTRVJfTUVNT1JZX1JFR0lPTjIgZmFpbHMgd2l0aCBFSU5WQUwsIHdoaWNoIGlzIGNvbnNpc3RlbnQKJiM0MzsJICogd2l0aCB1bnN1cHBvcnRlZCBtZW1zbG90IGZsYWdzLgomIzQzOwkgKi8KJiM0MzsJaWYgKCFpc19wcm90ZWN0ZWRfa3ZtX2VuYWJsZWQoKSkKJiM0MzsJCXJldHVybiB0cnVlOwomIzQzOwomIzQzOwlyZXR1cm4ga3ZtX3Brdm1fZXh0X2FsbG93ZWQoa3ZtLCBLVk1fQ0FQX0dVRVNUX01FTUZEX01NQVBfTE9HX0RJUlRZX1BBR0VTKTsKJiM0Mzt9CiYjNDM7I2VuZGlmCiYjNDM7CiBsb25nIGt2bV9hcmNoX2Rldl9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwKIAkJCXVuc2lnbmVkIGludCBpb2N0bCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7CmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9tbXUuYyBiL2FyY2gvYXJtNjQva3ZtL21tdS5jCmluZGV4IDZjOTQxYWFhMTBjNjM5Li5mNmU2ZGUxNTNjZTI1MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9rdm0vbW11LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9rdm0vbW11LmMKQEAgLTE2NDgsNyAmIzQzOzE2NDgsOCBAQCBzdGF0aWMgaW50IGdtZW1fYWJvcnQoY29uc3Qgc3RydWN0IGt2bV9zMl9mYXVsdF9kZXNjICpzMmZkKQogCQlyZXR1cm4gcmV0OwogCX0KIAotCWlmICghKHMyZmQtJmd0O21lbXNsb3QtJmd0O2ZsYWdzICZhbXA7IEtWTV9NRU1fUkVBRE9OTFkpKQomIzQzOwlpZiAoIShzMmZkLSZndDttZW1zbG90LSZndDtmbGFncyAmYW1wOyBLVk1fTUVNX1JFQURPTkxZKSAmYW1wOyZhbXA7CiYjNDM7CSAgICAoIWt2bV9zbG90X2RpcnR5X3RyYWNrX2VuYWJsZWQoczJmZC0mZ3Q7bWVtc2xvdCkgfHwgd3JpdGVfZmF1bHQpKQogCQlwcm90IHw9IEtWTV9QR1RBQkxFX1BST1RfVzsKIAogCWlmIChzMmZkLSZndDtuZXN0ZWQpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmggYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgKaW5kZXggYWI4Y2ZhZWM4MmQzMWUuLmM0NGU5MjUzZWI0MDBhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oCkBAIC01Niw2ICYjNDM7NTYsNyBAQAogICovCiAjZGVmaW5lIEtWTV9NRU1TTE9UX0lOVkFMSUQJCQkoMVVMICZsdDsmbHQ7IDE2KQogI2RlZmluZSBLVk1fTUVNU0xPVF9HTUVNX09OTFkJCQkoMVVMICZsdDsmbHQ7IDE3KQomIzQzOyNkZWZpbmUgTUVNU0xPVF9VU0VSX0ZMQUdTX01BU0sJCQkweGZmZmYKIAogLyoKICAqIEJpdCA2MyBvZiB0aGUgbWVtc2xvdCBnZW5lcmF0aW9uIG51bWJlciBpcyBhbiAmIzM0O3VwZGF0ZSBpbi1wcm9ncmVzcyBmbGFnJiMzNDssCkBAIC03MzEsNiAmIzQzOzczMiw5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBrdm1fYXJjaF9oYXNfcHJpdmF0ZV9tZW0oc3RydWN0IGt2bSAqa3ZtKQogCiAjaWZkZWYgQ09ORklHX0tWTV9HVUVTVF9NRU1GRAogYm9vbCBrdm1fYXJjaF9zdXBwb3J0c19nbWVtX2luaXRfc2hhcmVkKHN0cnVjdCBrdm0gKmt2bSk7CiYjNDM7Ym9vbCBrdm1fYXJjaF9zdXBwb3J0c19nbWVtX21tYXBfZGlydHlfbG9nZ2luZyhzdHJ1Y3Qga3ZtICprdm0pOwomIzQzO2ludCBrdm1fZ21lbV9jaGVja19ub19jaGFuZ2Uoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LAomIzQzOwkJCSAgICAgdW5zaWduZWQgaW50IGZkLCBsb2ZmX3Qgb2Zmc2V0KTsKIAogc3RhdGljIGlubGluZSB1NjQga3ZtX2dtZW1fZ2V0X3N1cHBvcnRlZF9mbGFncyhzdHJ1Y3Qga3ZtICprdm0pCiB7CkBAIC03NDEsNiAmIzQzOzc0NSwxNyBAQCBzdGF0aWMgaW5saW5lIHU2NCBrdm1fZ21lbV9nZXRfc3VwcG9ydGVkX2ZsYWdzKHN0cnVjdCBrdm0gKmt2bSkKIAogCXJldHVybiBmbGFnczsKIH0KJiM0MzsjZWxzZQomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBrdm1fYXJjaF9zdXBwb3J0c19nbWVtX21tYXBfZGlydHlfbG9nZ2luZyhzdHJ1Y3Qga3ZtICprdm0pCiYjNDM7ewomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzO3N0YXRpYyBpbmxpbmUgaW50IGt2bV9nbWVtX2NoZWNrX25vX2NoYW5nZShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QsCiYjNDM7CQkJCQkgICB1bnNpZ25lZCBpbnQgZmQsIGxvZmZfdCBvZmZzZXQpCiYjNDM7ewomIzQzOwlXQVJOX09OX09OQ0UoMSk7CiYjNDM7CXJldHVybiAtRUlPOwomIzQzO30KICNlbmRpZgogCiAjaWZuZGVmIGt2bV9hcmNoX2hhc19yZWFkb25seV9tZW0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaCBiL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaAppbmRleCA0MTkwMTEwOTdmYThlMi4uNWE1M2UyZTE5YjJmYjIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3VhcGkvbGludXgva3ZtLmgKQEAgLTk5Nyw2ICYjNDM7OTk3LDcgQEAgc3RydWN0IGt2bV9lbmFibGVfY2FwIHsKICNkZWZpbmUgS1ZNX0NBUF9TMzkwX0tFWU9QIDI0NwogI2RlZmluZSBLVk1fQ0FQX1MzOTBfVlNJRV9FU0FNT0RFIDI0OAogI2RlZmluZSBLVk1fQ0FQX1MzOTBfSFBBR0VfMkcgMjQ5CiYjNDM7I2RlZmluZSBLVk1fQ0FQX0dVRVNUX01FTUZEX01NQVBfTE9HX0RJUlRZX1BBR0VTIDI1MAogCiBzdHJ1Y3Qga3ZtX2lycV9yb3V0aW5nX2lycWNoaXAgewogCV9fdTMyIGlycWNoaXA7CmRpZmYgLS1naXQgYS92aXJ0L2t2bS9ndWVzdF9tZW1mZC5jIGIvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuYwppbmRleCBkYjU3YzU3NjZhYjYwNC4uMjEwYmRkNzZmMGFhZDcgMTAwNjQ0Ci0tLSBhL3ZpcnQva3ZtL2d1ZXN0X21lbWZkLmMKJiM0MzsmIzQzOyYjNDM7IGIvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuYwpAQCAtMjUsNiAmIzQzOzI1LDcgQEAgc3RydWN0IGdtZW1fZmlsZSB7CiAJc3RydWN0IGt2bSAqa3ZtOwogCXN0cnVjdCB4YXJyYXkgYmluZGluZ3M7CiAJc3RydWN0IGxpc3RfaGVhZCBlbnRyeTsKJiM0MzsJYm9vbCBmb3VuZF9tZW1zbG90OwkvKiBVc2VkIGZvciBiYWxhbmNpbmcgaW52YWxpZGF0aW9ucyB3aGVuIHB1bmNoaW5nIGEgaG9sZSAqLwogfTsKIAogc3RydWN0IGdtZW1faW5vZGUgewpAQCAtNDMsNiAmIzQzOzQ0LDI5IEBAIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgc3RydWN0IGdtZW1faW5vZGUgKkdNRU1fSShzdHJ1Y3QgaW5vZGUgKmlub2RlKQogI2RlZmluZSBrdm1fZ21lbV9mb3JfZWFjaF9maWxlKGYsIGlub2RlKSBcCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShmLCAmYW1wO0dNRU1fSShpbm9kZSktJmd0O2dtZW1fZmlsZV9saXN0LCBlbnRyeSkKIAomIzQzO3N0YXRpYyB2b2lkICptZW1zbG90X3RvX3hhX3ZhbHVlKHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QpCiYjNDM7ewomIzQzOwlXQVJOX09OX09OQ0Uoc2l6ZW9mKHNsb3QtJmd0O2FzX2lkKSAmZ3Q7IDE2KTsKJiM0MzsJV0FSTl9PTl9PTkNFKHNpemVvZihzbG90LSZndDtpZCkgJmd0OyAxNik7CiYjNDM7CVdBUk5fT05fT05DRShzaXplb2Yoc2xvdC0mZ3Q7YXNfaWQpICYjNDM7IHNpemVvZihzbG90LSZndDtpZCkgJmd0OyBzaXplb2YodW5zaWduZWQgbG9uZykpOwomIzQzOwomIzQzOwlyZXR1cm4geGFfbWtfdmFsdWUoKCh1bnNpZ25lZCBsb25nKXNsb3QtJmd0O2FzX2lkKSAmbHQ7Jmx0OyAxNiB8ICh1bnNpZ25lZCBsb25nKXNsb3QtJmd0O2lkKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnhhX3ZhbHVlX3RvX21lbXNsb3Qoc3RydWN0IGt2bSAqa3ZtLCBjb25zdCB2b2lkICplbnRyeSkKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZnVsbF9pZCA9IHhhX3RvX3ZhbHVlKGVudHJ5KTsKJiM0MzsJdTE2IGFzX2lkID0gKGZ1bGxfaWQgJmd0OyZndDsgMTYpICZhbXA7IFUxNl9NQVg7CiYjNDM7CXNob3J0IGlkID0gZnVsbF9pZCAmYW1wOyBVMTZfTUFYOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBEbyBub3QgaWdub3JlIEtWTV9NRU1TTE9UX0lOVkFMSUQgbWVtc2xvdHMsIGFzIHdlIHdhbnQKJiM0MzsJICogLSZndDtlcnJvcl9yZW1vdmVfZm9saW8oKSwgd2hlbiBpdCByYWNlcyB3aXRoIG1lbXNsb3QgZGVsZXRpb24sIHRvIGhhdmUKJiM0MzsJICogIHVubWFwcGVkIHRoZSBtZW1vcnkgdXBvbiBjb21wbGV0aW9uLgomIzQzOwkgKi8KJiM0MzsJcmV0dXJuIGlkX3RvX21lbXNsb3QoX19rdm1fbWVtc2xvdHMoa3ZtLCBhc19pZCksIGlkKTsKJiM0Mzt9CiYjNDM7CiAvKioKICAqIGZvbGlvX2ZpbGVfcGZuIC0gbGlrZSBmb2xpb19maWxlX3BhZ2UsIGJ1dCByZXR1cm4gYSBwZm4uCiAgKiBAZm9saW86IFRoZSBmb2xpbyB3aGljaCBjb250YWlucyB0aGlzIGluZGV4LgpAQCAtMTU3LDcgJiM0MzsxODEsNyBAQCBzdGF0aWMgZW51bSBrdm1fZ2ZuX3JhbmdlX2ZpbHRlciBrdm1fZ21lbV9nZXRfaW52YWxpZGF0ZV9maWx0ZXIoc3RydWN0IGlub2RlICppbgogCXJldHVybiBLVk1fRklMVEVSX1BSSVZBVEU7CiB9CiAKLXN0YXRpYyB2b2lkIF9fa3ZtX2dtZW1faW52YWxpZGF0ZV9zdGFydChzdHJ1Y3QgZ21lbV9maWxlICpmLCBwZ29mZl90IHN0YXJ0LAomIzQzO3N0YXRpYyBib29sIF9fa3ZtX2dtZW1faW52YWxpZGF0ZV9zdGFydChzdHJ1Y3QgZ21lbV9maWxlICpmLCBwZ29mZl90IHN0YXJ0LAogCQkJCQlwZ29mZl90IGVuZCwKIAkJCQkJZW51bSBrdm1fZ2ZuX3JhbmdlX2ZpbHRlciBhdHRyX2ZpbHRlcikKIHsKQEAgLTE2NSw5ICYjNDM7MTg5LDE1IEBAIHN0YXRpYyB2b2lkIF9fa3ZtX2dtZW1faW52YWxpZGF0ZV9zdGFydChzdHJ1Y3QgZ21lbV9maWxlICpmLCBwZ29mZl90IHN0YXJ0LAogCXN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3Q7CiAJc3RydWN0IGt2bSAqa3ZtID0gZi0mZ3Q7a3ZtOwogCXVuc2lnbmVkIGxvbmcgaW5kZXg7CiYjNDM7CXZvaWQgKmVudHJ5OwogCi0JeGFfZm9yX2VhY2hfcmFuZ2UoJmFtcDtmLSZndDtiaW5kaW5ncywgaW5kZXgsIHNsb3QsIHN0YXJ0LCBlbmQgLSAxKSB7Ci0JCXBnb2ZmX3QgcGdvZmYgPSBzbG90LSZndDtnbWVtLnBnb2ZmOwomIzQzOwl4YV9mb3JfZWFjaF9yYW5nZSgmYW1wO2YtJmd0O2JpbmRpbmdzLCBpbmRleCwgZW50cnksIHN0YXJ0LCBlbmQgLSAxKSB7CiYjNDM7CQlwZ29mZl90IHBnb2ZmOwomIzQzOwomIzQzOwkJc2xvdCA9IHhhX3ZhbHVlX3RvX21lbXNsb3Qoa3ZtLCBlbnRyeSk7CiYjNDM7CQlpZiAoIXNsb3QpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CQlwZ29mZiA9IHNsb3QtJmd0O2dtZW0ucGdvZmY7CiAKIAkJc3RydWN0IGt2bV9nZm5fcmFuZ2UgZ2ZuX3JhbmdlID0gewogCQkJLnN0YXJ0ID0gc2xvdC0mZ3Q7YmFzZV9nZm4gJiM0MzsgbWF4KHBnb2ZmLCBzdGFydCkgLSBwZ29mZiwKQEAgLTE5Miw2ICYjNDM7MjIyLDggQEAgc3RhdGljIHZvaWQgX19rdm1fZ21lbV9pbnZhbGlkYXRlX3N0YXJ0KHN0cnVjdCBnbWVtX2ZpbGUgKmYsIHBnb2ZmX3Qgc3RhcnQsCiAKIAlpZiAoZm91bmRfbWVtc2xvdCkKIAkJS1ZNX01NVV9VTkxPQ0soa3ZtKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGZvdW5kX21lbXNsb3Q7CiB9CiAKIHN0YXRpYyB2b2lkIGt2bV9nbWVtX2ludmFsaWRhdGVfc3RhcnQoc3RydWN0IGlub2RlICppbm9kZSwgcGdvZmZfdCBzdGFydCwKQEAgLTE5OSwxMSAmIzQzOzIzMSwyMiBAQCBzdGF0aWMgdm9pZCBrdm1fZ21lbV9pbnZhbGlkYXRlX3N0YXJ0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHBnb2ZmX3Qgc3RhcnQsCiB7CiAJZW51bSBrdm1fZ2ZuX3JhbmdlX2ZpbHRlciBhdHRyX2ZpbHRlcjsKIAlzdHJ1Y3QgZ21lbV9maWxlICpmOwomIzQzOwlzdHJ1Y3Qga3ZtICprdm07CiYjNDM7CWludCBpZHg7CiAKIAlhdHRyX2ZpbHRlciA9IGt2bV9nbWVtX2dldF9pbnZhbGlkYXRlX2ZpbHRlcihpbm9kZSk7CiAKLQlrdm1fZ21lbV9mb3JfZWFjaF9maWxlKGYsIGlub2RlKQotCQlfX2t2bV9nbWVtX2ludmFsaWRhdGVfc3RhcnQoZiwgc3RhcnQsIGVuZCwgYXR0cl9maWx0ZXIpOwomIzQzOwlrdm1fZ21lbV9mb3JfZWFjaF9maWxlKGYsIGlub2RlKSB7CiYjNDM7CQlrdm0gPSBmLSZndDtrdm07CiYjNDM7CQlpZHggPSBzcmN1X3JlYWRfbG9jaygmYW1wO2t2bS0mZ3Q7c3JjdSk7CiYjNDM7CQkvKgomIzQzOwkJICogVGhpcyBpcyBzYWZlIHRvIGRvIGJlY2F1c2UgY2FsbHMgdG8KJiM0MzsJCSAqIGt2bV9nbWVtX2ludmFsaWRhdGVfc3RhcnQoKSBhcmUgc2VyaWFsaXplZCBieQomIzQzOwkJICogZmlsZW1hcF9pbnZhbGlkYXRlX2xvY2soKS4KJiM0MzsJCSAqLwomIzQzOwkJZi0mZ3Q7Zm91bmRfbWVtc2xvdCA9IF9fa3ZtX2dtZW1faW52YWxpZGF0ZV9zdGFydChmLCBzdGFydCwgZW5kLCBhdHRyX2ZpbHRlcik7CiYjNDM7CQlzcmN1X3JlYWRfdW5sb2NrKCZhbXA7a3ZtLSZndDtzcmN1LCBpZHgpOwomIzQzOwl9CiB9CiAKIHN0YXRpYyB2b2lkIF9fa3ZtX2dtZW1faW52YWxpZGF0ZV9lbmQoc3RydWN0IGdtZW1fZmlsZSAqZiwgcGdvZmZfdCBzdGFydCwKQEAgLTIyMyw4ICYjNDM7MjY2LDExIEBAIHN0YXRpYyB2b2lkIGt2bV9nbWVtX2ludmFsaWRhdGVfZW5kKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHBnb2ZmX3Qgc3RhcnQsCiB7CiAJc3RydWN0IGdtZW1fZmlsZSAqZjsKIAotCWt2bV9nbWVtX2Zvcl9lYWNoX2ZpbGUoZiwgaW5vZGUpCiYjNDM7CWt2bV9nbWVtX2Zvcl9lYWNoX2ZpbGUoZiwgaW5vZGUpIHsKJiM0MzsJCWlmICghZi0mZ3Q7Zm91bmRfbWVtc2xvdCkKJiM0MzsJCQljb250aW51ZTsKIAkJX19rdm1fZ21lbV9pbnZhbGlkYXRlX2VuZChmLCBzdGFydCwgZW5kKTsKJiM0MzsJfQogfQogCiBzdGF0aWMgbG9uZyBrdm1fZ21lbV9wdW5jaF9ob2xlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBsZW4pCkBAIC0zMjYsNiAmIzQzOzM3Miw3IEBAIHN0YXRpYyBpbnQga3ZtX2dtZW1fcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIAlzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90OwogCXN0cnVjdCBrdm0gKmt2bSA9IGYtJmd0O2t2bTsKIAl1bnNpZ25lZCBsb25nIGluZGV4OwomIzQzOwl2b2lkICplbnRyeTsKIAogCS8qCiAJICogUHJldmVudCBjb25jdXJyZW50IGF0dGVtcHRzIHRvICp1bmJpbmQqIGEgbWVtc2xvdC4gIFRoaXMgaXMgdGhlIGxhc3QKQEAgLTM0NCwxNyAmIzQzOzM5MSwxOCBAQCBzdGF0aWMgaW50IGt2bV9nbWVtX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiAKIAlmaWxlbWFwX2ludmFsaWRhdGVfbG9jayhpbm9kZS0mZ3Q7aV9tYXBwaW5nKTsKIAotCXhhX2Zvcl9lYWNoKCZhbXA7Zi0mZ3Q7YmluZGluZ3MsIGluZGV4LCBzbG90KQomIzQzOwl4YV9mb3JfZWFjaCgmYW1wO2YtJmd0O2JpbmRpbmdzLCBpbmRleCwgZW50cnkpIHsKJiM0MzsJCXNsb3QgPSB4YV92YWx1ZV90b19tZW1zbG90KGt2bSwgZW50cnkpOwogCQlXUklURV9PTkNFKHNsb3QtJmd0O2dtZW0uZmlsZSwgTlVMTCk7CiYjNDM7CX0KIAogCS8qCiAJICogQWxsIGluLWZsaWdodCBvcGVyYXRpb25zIGFyZSBnb25lIGFuZCBuZXcgYmluZGluZ3MgY2FuIGJlIGNyZWF0ZWQuCiAJICogWmFwIGFsbCBTUFRFcyBwb2ludGVkIGF0IGJ5IHRoaXMgZmlsZS4gIERvIG5vdCBmcmVlIHRoZSBiYWNraW5nCiAJICogbWVtb3J5LCBhcyBpdHMgbGlmZXRpbWUgaXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBpbm9kZSwgbm90IHRoZSBmaWxlLgogCSAqLwotCV9fa3ZtX2dtZW1faW52YWxpZGF0ZV9zdGFydChmLCAwLCAtMXVsLAotCQkJCSAgICBrdm1fZ21lbV9nZXRfaW52YWxpZGF0ZV9maWx0ZXIoaW5vZGUpKTsKLQlfX2t2bV9nbWVtX2ludmFsaWRhdGVfZW5kKGYsIDAsIC0xdWwpOwomIzQzOwlpZiAoX19rdm1fZ21lbV9pbnZhbGlkYXRlX3N0YXJ0KGYsIDAsIC0xdWwsIGt2bV9nbWVtX2dldF9pbnZhbGlkYXRlX2ZpbHRlcihpbm9kZSkpKQomIzQzOwkJX19rdm1fZ21lbV9pbnZhbGlkYXRlX2VuZChmLCAwLCAtMXVsKTsKIAogCWxpc3RfZGVsKCZhbXA7Zi0mZ3Q7ZW50cnkpOwogCkBAIC00OTgsMTQgJiM0Mzs1NDYsMjAgQEAgc3RhdGljIGludCBrdm1fZ21lbV9taWdyYXRlX2ZvbGlvKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAogCiBzdGF0aWMgaW50IGt2bV9nbWVtX2Vycm9yX2ZvbGlvKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogewomIzQzOwllbnVtIGt2bV9nZm5fcmFuZ2VfZmlsdGVyIGF0dHJfZmlsdGVyOwomIzQzOwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gbWFwcGluZy0mZ3Q7aG9zdDsKJiM0MzsJc3RydWN0IGdtZW1fZmlsZSAqZjsKIAlwZ29mZl90IHN0YXJ0LCBlbmQ7CiYjNDM7CWJvb2wgZm91bmRfbWVtc2xvdDsKJiM0MzsJc3RydWN0IGt2bSAqa3ZtOwomIzQzOwlpbnQgaWR4OwogCiAJZmlsZW1hcF9pbnZhbGlkYXRlX2xvY2tfc2hhcmVkKG1hcHBpbmcpOwogCiAJc3RhcnQgPSBmb2xpby0mZ3Q7aW5kZXg7CiAJZW5kID0gc3RhcnQgJiM0MzsgZm9saW9fbnJfcGFnZXMoZm9saW8pOwogCi0Ja3ZtX2dtZW1faW52YWxpZGF0ZV9zdGFydChtYXBwaW5nLSZndDtob3N0LCBzdGFydCwgZW5kKTsKJiM0MzsJYXR0cl9maWx0ZXIgPSBrdm1fZ21lbV9nZXRfaW52YWxpZGF0ZV9maWx0ZXIoaW5vZGUpOwogCiAJLyoKIAkgKiBEbyBub3QgdHJ1bmNhdGUgdGhlIHJhbmdlLCB3aGF0IGFjdGlvbiBpcyB0YWtlbiBpbiByZXNwb25zZSB0byB0aGUKQEAgLTUxNSw4ICYjNDM7NTY5LDE5IEBAIHN0YXRpYyBpbnQga3ZtX2dtZW1fZXJyb3JfZm9saW8oc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9sCiAJICogYXQgd2hpY2ggcG9pbnQgS1ZNIGNhbiBlaXRoZXIgdGVybWluYXRlIHRoZSBWTSBvciBwcm9wYWdhdGUgdGhlCiAJICogZXJyb3IgdG8gdXNlcnNwYWNlLgogCSAqLwomIzQzOwlrdm1fZ21lbV9mb3JfZWFjaF9maWxlKGYsIGlub2RlKSB7CiYjNDM7CQlrdm0gPSBmLSZndDtrdm07CiAKLQlrdm1fZ21lbV9pbnZhbGlkYXRlX2VuZChtYXBwaW5nLSZndDtob3N0LCBzdGFydCwgZW5kKTsKJiM0MzsJCWlkeCA9IHNyY3VfcmVhZF9sb2NrKCZhbXA7a3ZtLSZndDtzcmN1KTsKJiM0MzsJCWZvdW5kX21lbXNsb3QgPSBfX2t2bV9nbWVtX2ludmFsaWRhdGVfc3RhcnQoZiwgc3RhcnQsIGVuZCwgYXR0cl9maWx0ZXIpOwomIzQzOwkJc3JjdV9yZWFkX3VubG9jaygmYW1wO2t2bS0mZ3Q7c3JjdSwgaWR4KTsKJiM0MzsKJiM0MzsJCWlmIChmb3VuZF9tZW1zbG90KSB7CiYjNDM7CQkJS1ZNX01NVV9MT0NLKGt2bSk7CiYjNDM7CQkJa3ZtX21tdV9pbnZhbGlkYXRlX2VuZChrdm0pOwomIzQzOwkJCUtWTV9NTVVfVU5MT0NLKGt2bSk7CiYjNDM7CQl9CiYjNDM7CX0KIAogCWZpbGVtYXBfaW52YWxpZGF0ZV91bmxvY2tfc2hhcmVkKG1hcHBpbmcpOwogCkBAIC01NTcsNiAmIzQzOzYyMiwxMSBAQCBib29sIF9fd2VhayBrdm1fYXJjaF9zdXBwb3J0c19nbWVtX2luaXRfc2hhcmVkKHN0cnVjdCBrdm0gKmt2bSkKIAlyZXR1cm4gdHJ1ZTsKIH0KIAomIzQzO2Jvb2wgX193ZWFrIGt2bV9hcmNoX3N1cHBvcnRzX2dtZW1fbW1hcF9kaXJ0eV9sb2dnaW5nKHN0cnVjdCBrdm0gKmt2bSkKJiM0Mzt7CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IF9fa3ZtX2dtZW1fY3JlYXRlKHN0cnVjdCBrdm0gKmt2bSwgbG9mZl90IHNpemUsIHU2NCBmbGFncykKIHsKIAlzdGF0aWMgY29uc3QgY2hhciAqbmFtZSA9ICYjMzQ7W2t2bS1nbWVtXSYjMzQ7OwpAQCAtNjQwLDYgJiM0Mzs3MTAsNjYgQEAgaW50IGt2bV9nbWVtX2NyZWF0ZShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fY3JlYXRlX2d1ZXN0X21lbWZkICphcmdzKQogCXJldHVybiBfX2t2bV9nbWVtX2NyZWF0ZShrdm0sIHNpemUsIGZsYWdzKTsKIH0KIAomIzQzO3N0YXRpYyBpbnQgX19rdm1fZ21lbV9jaGVja19ub19jaGFuZ2Uoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpvbGQsCiYjNDM7CQkJCSAgICAgIHN0cnVjdCBmaWxlICpvbGRfZmlsZSwgdW5zaWduZWQgaW50IGZkLAomIzQzOwkJCQkgICAgICBsb2ZmX3Qgb2Zmc2V0KQomIzQzO3sKJiM0MzsJc3RydWN0IGZpbGUgKm5ld19maWxlOwomIzQzOwomIzQzOwluZXdfZmlsZSA9IGZnZXQoZmQpOwomIzQzOwlpZiAoIW5ld19maWxlKQomIzQzOwkJcmV0dXJuIC1FQkFERjsKJiM0MzsJaWYgKG5ld19maWxlICE9IG9sZF9maWxlKSB7CiYjNDM7CQlmcHV0KG5ld19maWxlKTsKJiM0MzsJCXJldHVybiAtRUJBREY7CiYjNDM7CX0KJiM0MzsJZnB1dChuZXdfZmlsZSk7CiYjNDM7CiYjNDM7CWlmIChvbGQtJmd0O2dtZW0ucGdvZmYgIT0gb2Zmc2V0ICZndDsmZ3Q7IFBBR0VfU0hJRlQpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO2ludCBrdm1fZ21lbV9jaGVja19ub19jaGFuZ2Uoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpvbGQsCiYjNDM7CQkJICAgICB1bnNpZ25lZCBpbnQgZmQsIGxvZmZfdCBvZmZzZXQpCiYjNDM7ewomIzQzOwlDTEFTUyhnbWVtX2dldF9maWxlLCBvbGRfZmlsZSkob2xkKTsKJiM0MzsKJiM0MzsJcmV0dXJuIF9fa3ZtX2dtZW1fY2hlY2tfbm9fY2hhbmdlKGt2bSwgb2xkLCBvbGRfZmlsZSwgZmQsIG9mZnNldCk7CiYjNDM7fQomIzQzOwomIzQzO2ludCBrdm1fZ21lbV9jaGFuZ2VfZmxhZ3Moc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpvbGQsCiYjNDM7CQkJICBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpuZXcsIHVuc2lnbmVkIGludCBmZCwKJiM0MzsJCQkgIGxvZmZfdCBvZmZzZXQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZ21lbV9maWxlICpvbGRfZjsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJbG9ja2RlcF9hc3NlcnRfaGVsZCgmYW1wO2t2bS0mZ3Q7c2xvdHNfbG9jayk7CiYjNDM7CiYjNDM7CWlmICgha3ZtX21lbXNsb3RfaXNfZ21lbV9vbmx5KG9sZCkpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJQ0xBU1MoZ21lbV9nZXRfZmlsZSwgb2xkX2ZpbGUpKG9sZCk7CiYjNDM7CiYjNDM7CXJldCA9IF9fa3ZtX2dtZW1fY2hlY2tfbm9fY2hhbmdlKGt2bSwgb2xkLCBvbGRfZmlsZSwgZmQsIG9mZnNldCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlvbGRfZiA9IG9sZF9maWxlLSZndDtwcml2YXRlX2RhdGE7CiYjNDM7CWlmICh4YV9sb2FkKCZhbXA7b2xkX2YtJmd0O2JpbmRpbmdzLCBvbGQtJmd0O2dtZW0ucGdvZmYpICE9IG1lbXNsb3RfdG9feGFfdmFsdWUobmV3KSkgewomIzQzOwkJV0FSTl9PTl9PTkNFKHhhX3RvX3ZhbHVlKHhhX2xvYWQoJmFtcDtvbGRfZi0mZ3Q7YmluZGluZ3MsIG9sZC0mZ3Q7Z21lbS5wZ29mZikpKTsKJiM0MzsJCXJldHVybiAtRUlPOwomIzQzOwl9CiYjNDM7CiYjNDM7CW5ldy0mZ3Q7Z21lbS5maWxlID0gb2xkLSZndDtnbWVtLmZpbGU7CiYjNDM7CW5ldy0mZ3Q7Z21lbS5wZ29mZiA9IG9sZC0mZ3Q7Z21lbS5wZ29mZjsKJiM0MzsJbmV3LSZndDtmbGFncyB8PSBLVk1fTUVNU0xPVF9HTUVNX09OTFk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIGludCBrdm1fZ21lbV9iaW5kKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCwKIAkJICB1bnNpZ25lZCBpbnQgZmQsIHVvZmZfdCBvZmZzZXQpCiB7CkBAIC02NjksNiAmIzQzOzc5OSwxMSBAQCBpbnQga3ZtX2dtZW1fYmluZChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QsCiAJaWYgKCFQQUdFX0FMSUdORUQob2Zmc2V0KSB8fCBvZmZzZXQgJiM0Mzsgc2l6ZSAmZ3Q7IGlfc2l6ZV9yZWFkKGlub2RlKSkKIAkJZ290byBlcnI7CiAKJiM0MzsJaWYgKHNsb3QtJmd0O2ZsYWdzICZhbXA7IEtWTV9NRU1fTE9HX0RJUlRZX1BBR0VTICZhbXA7JmFtcDsKJiM0MzsJICAgICgha3ZtX2dtZW1fc3VwcG9ydHNfbW1hcChpbm9kZSkgfHwKJiM0MzsJICAgICAha3ZtX2FyY2hfc3VwcG9ydHNfZ21lbV9tbWFwX2RpcnR5X2xvZ2dpbmcoa3ZtKSkpCiYjNDM7CQlnb3RvIGVycjsKJiM0MzsKIAlmaWxlbWFwX2ludmFsaWRhdGVfbG9jayhpbm9kZS0mZ3Q7aV9tYXBwaW5nKTsKIAogCXN0YXJ0ID0gb2Zmc2V0ICZndDsmZ3Q7IFBBR0VfU0hJRlQ7CkBAIC02OTEsNyAmIzQzOzgyNiw3IEBAIGludCBrdm1fZ21lbV9iaW5kKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCwKIAlpZiAoa3ZtX2dtZW1fc3VwcG9ydHNfbW1hcChpbm9kZSkpCiAJCXNsb3QtJmd0O2ZsYWdzIHw9IEtWTV9NRU1TTE9UX0dNRU1fT05MWTsKIAotCXhhX3N0b3JlX3JhbmdlKCZhbXA7Zi0mZ3Q7YmluZGluZ3MsIHN0YXJ0LCBlbmQgLSAxLCBzbG90LCBHRlBfS0VSTkVMKTsKJiM0MzsJeGFfc3RvcmVfcmFuZ2UoJmFtcDtmLSZndDtiaW5kaW5ncywgc3RhcnQsIGVuZCAtIDEsIG1lbXNsb3RfdG9feGFfdmFsdWUoc2xvdCksIEdGUF9LRVJORUwpOwogCWZpbGVtYXBfaW52YWxpZGF0ZV91bmxvY2soaW5vZGUtJmd0O2lfbWFwcGluZyk7CiAKIAkvKgpAQCAtNzY1LDggJiM0Mzs5MDAsOCBAQCBzdGF0aWMgc3RydWN0IGZvbGlvICpfX2t2bV9nbWVtX2dldF9wZm4oc3RydWN0IGZpbGUgKmZpbGUsCiAJCXJldHVybiBFUlJfUFRSKC1FRkFVTFQpOwogCX0KIAotCWlmICh4YV9sb2FkKCZhbXA7Zi0mZ3Q7YmluZGluZ3MsIGluZGV4KSAhPSBzbG90KSB7Ci0JCVdBUk5fT05fT05DRSh4YV9sb2FkKCZhbXA7Zi0mZ3Q7YmluZGluZ3MsIGluZGV4KSk7CiYjNDM7CWlmICh4YV9sb2FkKCZhbXA7Zi0mZ3Q7YmluZGluZ3MsIGluZGV4KSAhPSBtZW1zbG90X3RvX3hhX3ZhbHVlKHNsb3QpKSB7CiYjNDM7CQlXQVJOX09OX09OQ0UoeGFfdG9fdmFsdWUoeGFfbG9hZCgmYW1wO2YtJmd0O2JpbmRpbmdzLCBpbmRleCkpKTsKIAkJcmV0dXJuIEVSUl9QVFIoLUVJTyk7CiAJfQogCmRpZmYgLS1naXQgYS92aXJ0L2t2bS9rdm1fbWFpbi5jIGIvdmlydC9rdm0va3ZtX21haW4uYwppbmRleCBlNDRjMjBjMDQ5NjEwZC4uYWYzODBlOGYyYjY4ZDQgMTAwNjQ0Ci0tLSBhL3ZpcnQva3ZtL2t2bV9tYWluLmMKJiM0MzsmIzQzOyYjNDM7IGIvdmlydC9rdm0va3ZtX21haW4uYwpAQCAtMTU3MywxNCAmIzQzOzE1NzMsMTQgQEAgc3RhdGljIHZvaWQga3ZtX3JlcGxhY2VfbWVtc2xvdChzdHJ1Y3Qga3ZtICprdm0sCiBzdGF0aWMgaW50IGNoZWNrX21lbW9yeV9yZWdpb25fZmxhZ3Moc3RydWN0IGt2bSAqa3ZtLAogCQkJCSAgICAgY29uc3Qgc3RydWN0IGt2bV91c2Vyc3BhY2VfbWVtb3J5X3JlZ2lvbjIgKm1lbSkKIHsKLQl1MzIgdmFsaWRfZmxhZ3MgPSBLVk1fTUVNX0xPR19ESVJUWV9QQUdFUzsKJiM0MzsJdTMyIHZhbGlkX2ZsYWdzID0gMDsKIAogCWlmIChJU19FTkFCTEVEKENPTkZJR19LVk1fR1VFU1RfTUVNRkQpKQogCQl2YWxpZF9mbGFncyB8PSBLVk1fTUVNX0dVRVNUX01FTUZEOwogCi0JLyogRGlydHkgbG9nZ2luZyBwcml2YXRlIG1lbW9yeSBpcyBub3QgY3VycmVudGx5IHN1cHBvcnRlZC4gKi8KLQlpZiAobWVtLSZndDtmbGFncyAmYW1wOyBLVk1fTUVNX0dVRVNUX01FTUZEKQotCQl2YWxpZF9mbGFncyAmYW1wOz0gfktWTV9NRU1fTE9HX0RJUlRZX1BBR0VTOwomIzQzOwlpZiAoIShtZW0tJmd0O2ZsYWdzICZhbXA7IEtWTV9NRU1fR1VFU1RfTUVNRkQpIHx8CiYjNDM7CSAgICBrdm1fYXJjaF9zdXBwb3J0c19nbWVtX21tYXBfZGlydHlfbG9nZ2luZyhrdm0pKQomIzQzOwkJdmFsaWRfZmxhZ3MgfD0gS1ZNX01FTV9MT0dfRElSVFlfUEFHRVM7CiAKIAkvKgogCSAqIEdVRVNUX01FTUZEIGlzIGluY29tcGF0aWJsZSB3aXRoIHJlYWQtb25seSBtZW1zbG90cywgYXMgd3JpdGVzIHRvCkBAIC0xNzM5LDE2ICYjNDM7MTczOSw2IEBAIHN0YXRpYyB2b2lkIGt2bV9jb21taXRfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sCiAJCSAqLwogCQlpZiAob2xkLSZndDtkaXJ0eV9iaXRtYXAgJmFtcDsmYW1wOyAhbmV3LSZndDtkaXJ0eV9iaXRtYXApCiAJCQlrdm1fZGVzdHJveV9kaXJ0eV9iaXRtYXAob2xkKTsKLQotCQkvKgotCQkgKiBVbmJpbmQgdGhlIGd1ZXN0X21lbWZkIGluc3RhbmNlIGFzIG5lZWRlZDsgdGhlIEBuZXcgc2xvdCBoYXMKLQkJICogYWxyZWFkeSBjcmVhdGVkIGl0cyBvd24gYmluZGluZy4gIFRPRE86IERyb3AgdGhlIFdBUk4gd2hlbgotCQkgKiBkaXJ0eSBsb2dnaW5nIGd1ZXN0X21lbWZkIG1lbXNsb3RzIGlzIHN1cHBvcnRlZC4gIFVudGlsIHRoZW4sCi0JCSAqIGZsYWdzLW9ubHkgY2hhbmdlcyBvbiBndWVzdF9tZW1mZCBzbG90cyBzaG91bGQgYmUgaW1wb3NzaWJsZS4KLQkJICovCi0JCWlmIChXQVJOX09OX09OQ0Uob2xkLSZndDtmbGFncyAmYW1wOyBLVk1fTUVNX0dVRVNUX01FTUZEKSkKLQkJCWt2bV9nbWVtX3VuYmluZChvbGQpOwotCiAJCS8qCiAJCSAqIFRoZSBmaW5hbCBxdWlyay4gIEZyZWUgdGhlIGRldGFjaGVkLCBvbGQgc2xvdCwgYnV0IG9ubHkgaXRzCiAJCSAqIG1lbW9yeSwgbm90IGFueSBtZXRhZGF0YS4gIE1ldGFkYXRhLCBpbmNsdWRpbmcgYXJjaCBzcGVjaWZpYwpAQCAtMjA3MywyMiAmIzQzOzIwNjMsMjcgQEAgc3RhdGljIGludCBrdm1fc2V0X21lbW9yeV9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLAogCQlpZiAoKGt2bS0mZ3Q7bnJfbWVtc2xvdF9wYWdlcyAmIzQzOyBucGFnZXMpICZsdDsga3ZtLSZndDtucl9tZW1zbG90X3BhZ2VzKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAJfSBlbHNlIHsgLyogTW9kaWZ5IGFuIGV4aXN0aW5nIHNsb3QuICovCi0JCS8qIFByaXZhdGUgbWVtc2xvdHMgYXJlIGltbXV0YWJsZSwgdGhleSBjYW4gb25seSBiZSBkZWxldGVkLiAqLwotCQlpZiAobWVtLSZndDtmbGFncyAmYW1wOyBLVk1fTUVNX0dVRVNUX01FTUZEKQotCQkJcmV0dXJuIC1FSU5WQUw7CiAJCWlmICgobWVtLSZndDt1c2Vyc3BhY2VfYWRkciAhPSBvbGQtJmd0O3VzZXJzcGFjZV9hZGRyKSB8fAogCQkgICAgKG5wYWdlcyAhPSBvbGQtJmd0O25wYWdlcykgfHwKIAkJICAgICgobWVtLSZndDtmbGFncyBeIG9sZC0mZ3Q7ZmxhZ3MpICZhbXA7IChLVk1fTUVNX1JFQURPTkxZIHwgS1ZNX01FTV9HVUVTVF9NRU1GRCkpKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAKLQkJaWYgKGJhc2VfZ2ZuICE9IG9sZC0mZ3Q7YmFzZV9nZm4pCiYjNDM7CQlpZiAoYmFzZV9nZm4gIT0gb2xkLSZndDtiYXNlX2dmbikgewogCQkJY2hhbmdlID0gS1ZNX01SX01PVkU7Ci0JCWVsc2UgaWYgKG1lbS0mZ3Q7ZmxhZ3MgIT0gb2xkLSZndDtmbGFncykKJiM0MzsJCX0gZWxzZSBpZiAobWVtLSZndDtmbGFncyAhPSAob2xkLSZndDtmbGFncyAmYW1wOyBNRU1TTE9UX1VTRVJfRkxBR1NfTUFTSykpIHsKIAkJCWNoYW5nZSA9IEtWTV9NUl9GTEFHU19PTkxZOwotCQllbHNlIC8qIE5vdGhpbmcgdG8gY2hhbmdlLiAqLwomIzQzOwkJfSBlbHNlIGlmIChtZW0tJmd0O2ZsYWdzICZhbXA7IEtWTV9NRU1fR1VFU1RfTUVNRkQpIHsKJiM0MzsJCQlyZXR1cm4ga3ZtX2dtZW1fY2hlY2tfbm9fY2hhbmdlKGt2bSwgb2xkLCBtZW0tJmd0O2d1ZXN0X21lbWZkLAomIzQzOwkJCQkJCQltZW0tJmd0O2d1ZXN0X21lbWZkX29mZnNldCk7CiYjNDM7CQl9IGVsc2UgewogCQkJcmV0dXJuIDA7CiYjNDM7CQl9CiAJfQogCiYjNDM7CWlmIChtZW0tJmd0O2ZsYWdzICZhbXA7IEtWTV9NRU1fR1VFU1RfTUVNRkQgJmFtcDsmYW1wOwomIzQzOwkgICAgY2hhbmdlICE9IEtWTV9NUl9DUkVBVEUgJmFtcDsmYW1wOyBjaGFuZ2UgIT0gS1ZNX01SX0ZMQUdTX09OTFkpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKIAlpZiAoKGNoYW5nZSA9PSBLVk1fTVJfQ1JFQVRFIHx8IGNoYW5nZSA9PSBLVk1fTVJfTU9WRSkgJmFtcDsmYW1wOwogCSAgICBrdm1fY2hlY2tfbWVtc2xvdF9vdmVybGFwKHNsb3RzLCBpZCwgYmFzZV9nZm4sIGJhc2VfZ2ZuICYjNDM7IG5wYWdlcykpCiAJCXJldHVybiAtRUVYSVNUOwpAQCAtMjEwNSw3ICYjNDM7MjEwMCwxMiBAQCBzdGF0aWMgaW50IGt2bV9zZXRfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sCiAJbmV3LSZndDtmbGFncyA9IG1lbS0mZ3Q7ZmxhZ3M7CiAJbmV3LSZndDt1c2Vyc3BhY2VfYWRkciA9IG1lbS0mZ3Q7dXNlcnNwYWNlX2FkZHI7CiAJaWYgKG1lbS0mZ3Q7ZmxhZ3MgJmFtcDsgS1ZNX01FTV9HVUVTVF9NRU1GRCkgewotCQlyID0ga3ZtX2dtZW1fYmluZChrdm0sIG5ldywgbWVtLSZndDtndWVzdF9tZW1mZCwgbWVtLSZndDtndWVzdF9tZW1mZF9vZmZzZXQpOwomIzQzOwkJaWYgKGNoYW5nZSA9PSBLVk1fTVJfQ1JFQVRFKSB7CiYjNDM7CQkJciA9IGt2bV9nbWVtX2JpbmQoa3ZtLCBuZXcsIG1lbS0mZ3Q7Z3Vlc3RfbWVtZmQsIG1lbS0mZ3Q7Z3Vlc3RfbWVtZmRfb2Zmc2V0KTsKJiM0MzsJCX0gZWxzZSBpZiAoY2hhbmdlID09IEtWTV9NUl9GTEFHU19PTkxZKSB7CiYjNDM7CQkJciA9IGt2bV9nbWVtX2NoYW5nZV9mbGFncyhrdm0sIG9sZCwgbmV3LCBtZW0tJmd0O2d1ZXN0X21lbWZkLAomIzQzOwkJCQkJCSAgbWVtLSZndDtndWVzdF9tZW1mZF9vZmZzZXQpOwomIzQzOwkJfQogCQlpZiAocikKIAkJCWdvdG8gb3V0OwogCX0KQEAgLTIxMTcsNyAmIzQzOzIxMTcsNyBAQCBzdGF0aWMgaW50IGt2bV9zZXRfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sCiAJcmV0dXJuIDA7CiAKIG91dF91bmJpbmQ6Ci0JaWYgKG1lbS0mZ3Q7ZmxhZ3MgJmFtcDsgS1ZNX01FTV9HVUVTVF9NRU1GRCkKJiM0MzsJaWYgKChtZW0tJmd0O2ZsYWdzICZhbXA7IEtWTV9NRU1fR1VFU1RfTUVNRkQpICZhbXA7JmFtcDsgY2hhbmdlID09IEtWTV9NUl9DUkVBVEUpCiAJCWt2bV9nbWVtX3VuYmluZChuZXcpOwogb3V0OgogCWtmcmVlKG5ldyk7CmRpZmYgLS1naXQgYS92aXJ0L2t2bS9rdm1fbW0uaCBiL3ZpcnQva3ZtL2t2bV9tbS5oCmluZGV4IDc1MTBjYTkxNWRkMWFhLi5jNThkZmViMGYzZGY1NSAxMDA2NDQKLS0tIGEvdmlydC9rdm0va3ZtX21tLmgKJiM0MzsmIzQzOyYjNDM7IGIvdmlydC9rdm0va3ZtX21tLmgKQEAgLTc3LDYgJiM0Mzs3Nyw5IEBAIGludCBrdm1fZ21lbV9jcmVhdGUoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2NyZWF0ZV9ndWVzdF9tZW1mZCAqYXJncyk7CiBpbnQga3ZtX2dtZW1fYmluZChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QsCiAJCSAgdW5zaWduZWQgaW50IGZkLCB1b2ZmX3Qgb2Zmc2V0KTsKIHZvaWQga3ZtX2dtZW1fdW5iaW5kKHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QpOwomIzQzO2ludCBrdm1fZ21lbV9jaGFuZ2VfZmxhZ3Moc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpvbGQsCiYjNDM7CQkJICBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpuZXcsIHVuc2lnbmVkIGludCBmZCwKJiM0MzsJCQkgIGxvZmZfdCBvZmZzZXQpOwogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgaW50IGt2bV9nbWVtX2luaXQoc3RydWN0IG1vZHVsZSAqbW9kdWxlKQogewpAQCAtOTUsNiAmIzQzOzk4LDE0IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBrdm1fZ21lbV91bmJpbmQoc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCkKIHsKIAlXQVJOX09OX09OQ0UoMSk7CiB9CiYjNDM7c3RhdGljIGlubGluZSBpbnQga3ZtX2dtZW1fY2hhbmdlX2ZsYWdzKHN0cnVjdCBrdm0gKmt2bSwKJiM0MzsJCQkJCXN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm9sZCwKJiM0MzsJCQkJCXN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm5ldywKJiM0MzsJCQkJCXVuc2lnbmVkIGludCBmZCwgbG9mZl90IG9mZnNldCkKJiM0Mzt7CiYjNDM7CVdBUk5fT05fT05DRSgxKTsKJiM0MzsJcmV0dXJuIC1FSU87CiYjNDM7fQogI2VuZGlmIC8qIENPTkZJR19LVk1fR1VFU1RfTUVNRkQgKi8KIAogI2VuZGlmIC8qIF9fS1ZNX01NX0hfXyAqLwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxNzoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NTE1CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogNDExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uOiBLVk0gR3Vlc3QgTWVtZmQgRGlydHkgUGFnZSBMb2dnaW5nKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBpZGVudGlmeSB3aGV0aGVyIHRoaXMgcGF0Y2ggc2VyaWVzIGludHJvZHVjZXMgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgd2FycmFudCBmdXp6aW5nLiBGcm9tIHdoYXQgSSBzZWUsIGl0IGFkZHMgc3VwcG9ydCBmb3IgZGlydHkgcGFnZSBsb2dnaW5nIHNwZWNpZmljYWxseSBmb3IgYGd1ZXN0X21lbWZkYCBiYWNrZWQgbWVtc2xvdHMgd2l0aGluIEtWTS4gVGhpcyBsb29rcyBpbnRlcmVzdGluZy4KClRoZSBwYXRjaCBpbnRyb2R1Y2VzIGBLVk1fQ0FQX0dVRVNUX01FTUZEX01NQVBfTE9HX0RJUlRZX1BBR0VTYC4gU28gdGhpcyBpcyBzb21ldGhpbmcgbmV3IHRoYXQgY2FuIGJlIGVuYWJsZWQsIGFuZCB0aGF0JiMzOTtzIHVzdWFsbHkgd2hlcmUgdGhlIGJ1Z3MgaGlkZS4gTG9va2luZyBhdCB0aGUgY29kZSBtb2RpZmljYXRpb25zLCBpdCB0b3VjaGVzIHNldmVyYWwgS1ZNIGZ1bmN0aW9ucy4gSXQgc2VlbXMgdG8gaGF2ZSBhIGxvdCBvZiBjaGFuZ2VzIHJlbGF0ZWQgdG8gYGt2bV92bV9pb2N0bF9jaGVja19leHRlbnNpb25gLCBgZ21lbV9hYm9ydGAgKGFybTY0KSwgYGt2bV9nbWVtX2ludmFsaWRhdGVfc3RhcnRgLCBga3ZtX2dtZW1faW52YWxpZGF0ZV9lbmRgLCBga3ZtX2dtZW1fcmVsZWFzZWAsIGBrdm1fZ21lbV9lcnJvcl9mb2xpb2AsIGBrdm1fZ21lbV9iaW5kYCwgYGt2bV9zZXRfbWVtb3J5X3JlZ2lvbmAsIGFuZCBvdGhlcnMuIFRoaXMgaW5kaWNhdGVzIGEgc2lnbmlmaWNhbnQgc2hpZnQgaW4gaG93IG1lbW9yeSBpcyBtYW5hZ2VkIHdpdGhpbiB0aGUgZ3Vlc3QgY29udGV4dC4KClRoaXMgcGF0Y2ggc2VyaWVzIGlzIGFsbG93aW5nIHRoZSBgS1ZNX01FTV9MT0dfRElSVFlfUEFHRVNgIGZsYWcgdG8gYmUgc2V0IGZvciBtZW1zbG90cyB1c2luZyBgS1ZNX01FTV9HVUVTVF9NRU1GRGAgaWYgdGhlIGFyY2hpdGVjdHVyZSBzdXBwb3J0cyBpdC4gQ3VycmVudGx5LCBpdCBzZWVtcyB0aGF0IGBhcm02NGAgc3VwcG9ydHMgaXQsIHByb3ZpZGVkIGl0JiMzOTtzIG5vdCBhIHByb3RlY3RlZCBwS1ZNIFZNLiBUaGlzIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBjb25kaXRpb24gaXMgYWx3YXlzIHNvbWV0aGluZyB0byB0YWtlIG5vdGUgb2YgZHVyaW5nIGZ1enppbmcuCgpNeSBuZXh0IHN0ZXAgaXMgdG8gbmFpbCBkb3duIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMuIEkgc2VlIHRoYXQgYENPTkZJR19LVk1fR1VFU1RfTUVNRkRgIGFuZCBgQ09ORklHX0tWTWAgYXJlIHJlcXVpcmVkLiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gdGhlc2UgYXJlIGluZGVlZCB0aGUgcmlnaHQgY29uZmlndXJhdGlvbiBmbGFncyB0byBlbmFibGUgdGhpcyBmdW5jdGlvbmFsaXR5IGZvciBmdXp6aW5nLgoKTm93LCBsZXQmIzM5O3MgaWRlbnRpZnkgdGhlIGtleSBmb2N1cyBzeW1ib2xzIHRvIHRhcmdldCBpbiB0aGUgZnV6emluZyBoYXJuZXNzLiBJJiMzOTttIGZvY3VzaW5nIG9uIGZ1bmN0aW9ucyByZWxhdGVkIHRvIHRoZSBjb3JlIGxvZ2ljLCB3aGljaCBhcmU6IGBrdm1fZ21lbV9jaGFuZ2VfZmxhZ3NgLCBga3ZtX2dtZW1fY2hlY2tfbm9fY2hhbmdlYCwgYGt2bV9nbWVtX2JpbmRgLCBga3ZtX3NldF9tZW1vcnlfcmVnaW9uYCwgYF9fa3ZtX2dtZW1faW52YWxpZGF0ZV9zdGFydGAsIGBfX2t2bV9nbWVtX2ludmFsaWRhdGVfZW5kYCwgYGt2bV9nbWVtX2Vycm9yX2ZvbGlvYCwgYW5kIGBrdm1fZ21lbV9yZWxlYXNlYC4gVGhlc2UgbG9vayBsaWtlIHRoZSBlbnRyeSBwb2ludHMgZm9yIHRoZSBuZXcgZmVhdHVyZSBvciBzaWduaWZpY2FudGx5IG1vZGlmaWVkIG9uZXMsIGJhc2VkIG9uIHRoZSBwYXRjaC4KCkkgd2lsbCB1c2UgYGdyZXBwZXJgIHRvIGNvbmZpcm0gdGhhdCBgQ09ORklHX0tWTV9HVUVTVF9NRU1GRGAgaXMgdGhlIGNvcnJlY3QgY29uZmlnLCBhbmQgSSYjMzk7bGwgc2VlIHdoZXJlIHRoaXMgaXMgZGVmaW5lZCBhbmQgdXNlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxNzoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgS1ZNX0dVRVNUX01FTUZEJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O3ZpcnQva3ZtL0tjb25maWc9MTAzPWNvbmZpZyBLVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU1xuLS1cbnZpcnQva3ZtL0tjb25maWctMTA1LVxudmlydC9rdm0vS2NvbmZpZzoxMDY6Y29uZmlnIEtWTV9HVUVTVF9NRU1GRFxudmlydC9rdm0vS2NvbmZpZy0xMDctICAgICAgIHNlbGVjdCBYQVJSQVlfTVVMVElcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxNzoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDYyNgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIEtWTV9HVUVTVF9NRU1GRCBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIGBLVk1fR1VFU1RfTUVNRkRgLi4uIHRoYXQmIzM5O3MgYSBjb25maWcgb3B0aW9uLiBSaWdodC4gQmVmb3JlIEkgZGl2ZSB0b28gZGVlcCBpbnRvIGl0cyBzcGVjaWZpY3MsIG15IGZpcnN0IGluc3RpbmN0IGlzIGFsd2F5cyB0byB1bmRlcnN0YW5kIGl0cyBkZXBlbmRlbmNpZXMuIEl0JiMzOTtzIGNydWNpYWwsIGVzcGVjaWFsbHkgaW4ga2VybmVsIGNvbmZpZ3VyYXRpb25zLCB0byBzZWUgaWYgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIHRoaXMgZmVhdHVyZSBoYXMgY2FzY2FkaW5nIGVmZmVjdHMuIERvZXMgaXQgaGluZ2Ugb24gb3RoZXIgc3BlY2lmaWMgb3B0aW9ucz8gSXMgaXQgdGllZCB0byBhIHBhcnRpY3VsYXIgaGFyZHdhcmUgYXJjaGl0ZWN0dXJlLCBvciBhIHNwZWNpZmljIGtlcm5lbCB2ZXJzaW9uPyBVbmRlcnN0YW5kaW5nIHRoZXNlIGRlcGVuZGVuY2llcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBpdHMgb3ZlcmFsbCBpbXBhY3QgYW5kIHBvcnRhYmlsaXR5LiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGNvbmZpZyBzeXN0ZW0gdGVsbHMgdXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTc6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEtWTV9HVUVTVF9NRU1GRCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O3ZpcnQva3ZtL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7dmlydC9rdm0vS2NvbmZpZz0xMDM9Y29uZmlnIEtWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTXG4tLVxudmlydC9rdm0vS2NvbmZpZy0xMDUtXG52aXJ0L2t2bS9LY29uZmlnOjEwNjpjb25maWcgS1ZNX0dVRVNUX01FTUZEXG52aXJ0L2t2bS9LY29uZmlnLTEwNy0gICAgICAgc2VsZWN0IFhBUlJBWV9NVUxUSVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE3OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwOTI4CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIEtWTSBDb25maWd1cmF0aW9uIE9wdGlvbnMqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiBgdmlydC9rdm0vS2NvbmZpZ2AgYXJvdW5kIGxpbmUgMTA2LiBJJiMzOTttIGFzc3VtaW5nIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggdGhlIGNvcmUgS1ZNIGNvbmZpZ3VyYXRpb24gaGVyZSwgcHJvYmFibHkgdGhlIHRvcC1sZXZlbCBvcHRpb25zIHRoYXQgZGljdGF0ZSB3aGV0aGVyIG9yIG5vdCBLVk0gaXRzZWxmIGlzIGJ1aWx0IGludG8gdGhlIGtlcm5lbCwgb3IgYXMgYSBtb2R1bGUsIGFuZCBwb3NzaWJseSBzb21lIGZ1bmRhbWVudGFsIGFyY2hpdGVjdHVyYWwgY2hvaWNlcy4gQXQgbGluZSAxMDYsIEkgZXhwZWN0IHRvIGVuY291bnRlciB0aGUgZm91bmRhdGlvbmFsIHRvZ2dsZXMsIHRoZSBiYXNlIGBib29sYCBvciBgdHJpc3RhdGVgIG9wdGlvbnMgdGhhdCBlbmFibGUgb3IgZGlzYWJsZSBLVk0gc3VwcG9ydCBhdCBhIHZlcnkgYnJvYWQgbGV2ZWwuIEkmIzM5O20gbG9va2luZyBmb3IgdGhpbmdzIGxpa2UgYENPTkZJR19LVk1gLCBhbmQgbWF5YmUgaXRzIGRlcGVuZGVuY3kgb24gdGhpbmdzIGxpa2UgcHJvY2Vzc29yIHZpcnR1YWxpemF0aW9uIGV4dGVuc2lvbnMgKFZULXggb3IgQU1ELVYpLiBJJiMzOTtsbCBhbHNvIGJlIHNjYW5uaW5nIGZvciBob3cgdGhpcyBiYXNlIGNvbmZpZ3VyYXRpb24gaXMgdGhlbiByZWZpbmVkIGludG8gbW9yZSBncmFudWxhciBjb250cm9scy4gVGhlIGdvYWwgaXMgdG8gaW1tZWRpYXRlbHkgdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgS1ZNJiMzOTtzIGJ1aWxkIGNvbmZpZ3VyYXRpb24sIHdoYXQgdGhlIGluaXRpYWwgc2V0dGluZ3MgZG8sIGFuZCB0aGVpciByZWxhdGlvbnNoaXAgdG8gdmFyaW91cyBoYXJkd2FyZSBhbmQgYXJjaGl0ZWN0dXJlIGNob2ljZXMuIEkgYW0gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gY29uZGl0aW9uYWwgc2VsZWN0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxNzoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O3ZpcnQva3ZtL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDEwMDpcdGNvbmZpZyBLVk1fTU1VX0xPQ0tMRVNTX0FHSU5HXG4gMTAxOlx0ICAgICAgIGJvb2xcbiAxMDI6XHRcbiAxMDM6XHRjb25maWcgS1ZNX0dFTkVSSUNfTUVNT1JZX0FUVFJJQlVURVNcbiAxMDQ6XHQgICAgICAgYm9vbFxuIDEwNTpcdFxuIDEwNjpcdGNvbmZpZyBLVk1fR1VFU1RfTUVNRkRcbiAxMDc6XHQgICAgICAgc2VsZWN0IFhBUlJBWV9NVUxUSVxuIDEwODpcdCAgICAgICBib29sXG4gMTA5Olx0XG4gMTEwOlx0Y29uZmlnIEhBVkVfS1ZNX0FSQ0hfR01FTV9QUkVQQVJFXG4gMTExOlx0ICAgICAgIGJvb2xcbiAxMTI6XHQgICAgICAgZGVwZW5kcyBvbiBLVk1fR1VFU1RfTUVNRkRcbiAxMTM6XHRcbiAxMTQ6XHRjb25maWcgSEFWRV9LVk1fQVJDSF9HTUVNX0lOVkFMSURBVEVcbiAxMTU6XHQgICAgICAgYm9vbFxuIDExNjpcdCAgICAgICBkZXBlbmRzIG9uIEtWTV9HVUVTVF9NRU1GRFxuIDExNzpcdFxuIDExODpcdGNvbmZpZyBIQVZFX0tWTV9BUkNIX0dNRU1fUE9QVUxBVEVcbiAxMTk6XHQgICAgICAgYm9vbFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE3OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNDg1CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqSW52ZXN0aWdhdGluZyB0aGUgS1ZNX0dVRVNUX01FTUZEIENvbmZpZ3VyYXRpb24gT3B0aW9uKioKCk9rYXksIHNvIHRoZXJlJiMzOTtzIHRoaXMgYEtWTV9HVUVTVF9NRU1GRGAgc2V0dGluZywgdHVja2VkIGF3YXkgYXMgYSBib29sZWFuIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBJdCYjMzk7cyBtYXJrZWQgYXMgaGlkZGVuLCB3aGljaCBtZWFucyBpdCYjMzk7cyBwcm9iYWJseSBub3Qgc29tZXRoaW5nIGVuZC11c2VycyBhcmUgbWVhbnQgdG8gZGlyZWN0bHkgbWFuaXB1bGF0ZSwgYnV0IHJhdGhlciBzb21ldGhpbmcgc2VsZWN0ZWQgYnkgdGhlIGFyY2hpdGVjdHVyZS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7QWxyaWdodCwgbGV0JiMzOTtzIGZpZ3VyZSBvdXQgKndobyogZXhhY3RseSBpcyBtYWtpbmcgdXNlIG9mIHRoaXMgdGhpbmcuJiMzNDsgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hpY2ggYXJjaGl0ZWN0dXJlcyBjb25zaWRlciB0aGlzIG9wdGlvbiByZWxldmFudC4gRGl2aW5nIGludG8gdGhlIGNvZGUgdG8gZmluZCB0aGUgc2VsZWN0IHN0YXRlbWVudHMgaXMgdGhlIG5leHQgbG9naWNhbCBzdGVwLiBGcm9tIHRoZXJlLCBJIGNhbiBiZWdpbiB0byB1bnBhY2sgKndoeSogdGhleSBuZWVkIGl0LiBJIGFtIGtlZW4gdG8gbGVhcm4gdGhlIGltcGxpY2F0aW9ucyB0aGlzIG1pZ2h0IGhhdmUgb24gdGhlIHZpcnR1YWxpc2F0aW9uIGxhbmRzY2FwZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTc6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2VsZWN0IEtWTV9HVUVTVF9NRU1GRCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybTY0L2t2bS9LY29uZmlnPTIwPW1lbnVjb25maWcgS1ZNXG4tLVxuYXJjaC9hcm02NC9rdm0vS2NvbmZpZy0zOC1cdHNlbGVjdCBHVUVTVF9QRVJGX0VWRU5UUyBpZiBQRVJGX0VWRU5UU1xuYXJjaC9hcm02NC9rdm0vS2NvbmZpZzozOTpcdHNlbGVjdCBLVk1fR1VFU1RfTUVNRkRcbmFyY2gvYXJtNjQva3ZtL0tjb25maWctNDAtXHRoZWxwXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWc9MjA9Y29uZmlnIEtWTV9YODZcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy00OS1cdHNlbGVjdCBLVk1fV0VSUk9SIGlmIFdFUlJPUlxuYXJjaC94ODYva3ZtL0tjb25maWc6NTA6XHRzZWxlY3QgS1ZNX0dVRVNUX01FTUZEIGlmIFg4Nl82NFxuYXJjaC94ODYva3ZtL0tjb25maWctNTEtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE3OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExOTE1CgkJCQkJCQlvdXRwdXQ6IDE4OAoJCQkJCQkJdGhvdWdodHM6IDUzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBLVk0gR3Vlc3QgTWVtb3J5IE1hbmFnZW1lbnQgUGF0Y2gqKgoKT2theSwgaGVyZSYjMzk7cyB3aGF0IEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhpcyBwYXRjaC4gRnJvbSBhIGhpZ2ggbGV2ZWwsIGl0IGxvb2tzIGxpa2UgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGNoYW5nZXMgdG8gS1ZNJiMzOTtzIGd1ZXN0IG1lbW9yeSBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHkgY29uY2VybmluZyBkaXJ0eSBwYWdlIGxvZ2dpbmcgZm9yIGBndWVzdF9tZW1mZGAgYmFzZWQgbWVtc2xvdHMuIE9uIGFybTY0IGFuZCB4ODZfNjQsIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucyBhcmUgc2VsZWN0ZWQgYnkgYEtWTWAuIFRoZSBtYWluIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRvIGVuYWJsZSBpcyBgS1ZNYC4KCkdpdmVuIHRoZSBjb3JlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBtZW1vcnkgbWFuYWdlbWVudCwgdGhpcyBpcyAqZGVmaW5pdGVseSogd29ydGggZnV6emluZy4gVGhlIHBhdGNoIGlzIHRvdWNoaW5nIEtWTSBtZW1vcnkgcmVnaW9uIGNvbmZpZ3VyYXRpb24gYW5kIGludmFsaWRhdGlvbiwgd2hpY2ggaW1tZWRpYXRlbHkgbWFrZXMgbWUgdGhpbmsgb2YgS1ZNIGlvY3RscyBsaWtlIGBLVk1fU0VUX1VTRVJfTUVNT1JZX1JFR0lPTjJgIGFuZCBwb3RlbnRpYWwgbWVtb3J5IGludmFsaWRhdGlvbiBldmVudHMuIEl0JiMzOTtzIGEgcHJpbWUgdGFyZ2V0LgoKTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0byBjaGVjayB3aGV0aGVyIGBrdm1fc2V0X21lbW9yeV9yZWdpb25gIHdhcyBhIGhvdCBwYXRoLiBCdXQgbm93LCBhZnRlciByZXZpZXdpbmcgdGhlIG90aGVyIGZ1bmN0aW9ucywgSSB0aGluayBpdCBpcyBsZXNzIGludGVyZXN0aW5nLiBJIGFsc28gdG9vayBhIGxvb2sgYXQgb3RoZXIgZnVuY3Rpb24sIHN1Y2ggYXMgYGt2bV9nbWVtX2NoYW5nZV9mbGFnc2AgYW5kIGBrdm1fZ21lbV9jaGVja19ub19jaGFuZ2VgIHdoaWNoIHNlZW0gc3BlY2lmaWMgdG8gdGhpcyBwYXRjaC4gSSBhbHNvIHNhdyB0aGF0IGBfX2t2bV9nbWVtX2ludmFsaWRhdGVfc3RhcnRgIGFuZCBgX19rdm1fZ21lbV9pbnZhbGlkYXRlX2VuZGAgaGF2ZSBhbHNvIGJlZW4gbW9kaWZpZWQuCgpTbywgbGV0JiMzOTtzIHJlZmluZSB0aGUgc3ltYm9sIGxpc3QgdGhhdCBzaG91bGQgYmUgdGhlIGZvY3VzIG9mIHRoZSBmdXp6aW5nIGVmZm9ydHMuIEkmIzM5O2xsIGluY2x1ZGUgdGhlIGZvbGxvd2luZzoKCiogICBga3ZtX2dtZW1fY2hhbmdlX2ZsYWdzYAoqICAgYGt2bV9nbWVtX2NoZWNrX25vX2NoYW5nZWAKKiAgIGBfX2t2bV9nbWVtX2ludmFsaWRhdGVfc3RhcnRgCiogICBgX19rdm1fZ21lbV9pbnZhbGlkYXRlX2VuZGAKKiAgIGBrdm1fZ21lbV9lcnJvcl9mb2xpb2AKCkkmIzM5O3ZlIGFsc28gY29uZmlybWVkIHRoYXQgYGt2bV9nbWVtX2NoYW5nZV9mbGFnc2AgaXMgZXhwb3J0ZWQgdG8gYHZpcnQva3ZtL2t2bV9tbS5oYCwgd2hpY2ggaXMgaW1wb3J0YW50IGZvciB1bmRlcnN0YW5kaW5nIGhvdyBpdCYjMzk7cyBiZWluZyB1c2VkLiBTaW1pbGFybHksIGBrdm1fZ21lbV9jaGVja19ub19jaGFuZ2VgIGlzIGFsc28gZXhwb3J0ZWQsIHdoaWNoIGNvbmZpcm1zIGl0cyBpbXBvcnRhbmNlIGluIHRoZSBicm9hZGVyIEtWTSBhcmNoaXRlY3R1cmUuCgpNeSByZWFzb25pbmcgYm9pbHMgZG93biB0byB0aGlzOiB0aGUgcGF0Y2ggZnVuZGFtZW50YWxseSBhbHRlcnMgbWVtb3J5IHJlZ2lvbiBtYW5hZ2VtZW50IGFuZCBpbnZhbGlkYXRpb24gd2l0aGluIEtWTS4gVGhpcyBoYXMgZGlyZWN0IGltcGxpY2F0aW9ucyBmb3IgaG93IGd1ZXN0cyBpbnRlcmFjdCB3aXRoIG1lbW9yeSBhbmQsIHRoZXJlZm9yZSwgaXMgYSBwcmltZSB0YXJnZXQgZm9yIHZ1bG5lcmFiaWxpdHkgcmVzZWFyY2guIFNwZWNpZmljYWxseSwgaW9jdGwgY2FsbHMgcmVsYXRlZCB0byBtZW1vcnkgcmVnaW9uIGNvbmZpZ3VyYXRpb24gYW5kIGFueXRoaW5nIHRoYXQgY2FuIHRyaWdnZXIgbWVtb3J5IGludmFsaWRhdGlvbiB3b3VsZCBiZSBwcmltYXJ5IGFyZWFzIGZvciBmdXp6aW5nIGFuZCBhdWRpdC4gVGhlIGNvbmZpZ3Mgd2lsbCBiZSBgS1ZNYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTc6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9nbWVtX2NoYW5nZV9mbGFncyYjMzQ7LAogICAgJiMzNDtrdm1fZ21lbV9jaGVja19ub19jaGFuZ2UmIzM0OywKICAgICYjMzQ7X19rdm1fZ21lbV9pbnZhbGlkYXRlX3N0YXJ0JiMzNDssCiAgICAmIzM0O19fa3ZtX2dtZW1faW52YWxpZGF0ZV9lbmQmIzM0OywKICAgICYjMzQ7a3ZtX2dtZW1fZXJyb3JfZm9saW8mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBzdXBwb3J0IGZvciBkaXJ0eSBwYWdlIGxvZ2dpbmcgZm9yIGBndWVzdF9tZW1mZGAgYmFja2VkIG1lbXNsb3RzIGluIEtWTS4gSXQgbW9kaWZpZXMgdGhlIEtWTSBtZW1vcnkgcmVnaW9uIGNvbmZpZ3VyYXRpb24gbG9naWMgYW5kIHRoZSBpbnZhbGlkYXRpb24gcGF0aHMgZm9yIGd1ZXN0IG1lbW9yeS4gVGhlc2UgYXJlIGNvcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIEtWTSB0aGF0IGNhbiBiZSByZWFjaGVkIHZpYSBLVk0gaW9jdGxzIChlLmcuLCBgS1ZNX1NFVF9VU0VSX01FTU9SWV9SRUdJT04yYCkgYW5kIG1lbW9yeSBpbnZhbGlkYXRpb24gZXZlbnRzLCBtYWtpbmcgdGhlbSBoaWdobHkgcmVsZXZhbnQgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9nbWVtX2NoYW5nZV9mbGFncyYjMzQ7LAogICAgJiMzNDtrdm1fZ21lbV9jaGVja19ub19jaGFuZ2UmIzM0OywKICAgICYjMzQ7X19rdm1fZ21lbV9pbnZhbGlkYXRlX3N0YXJ0JiMzNDssCiAgICAmIzM0O19fa3ZtX2dtZW1faW52YWxpZGF0ZV9lbmQmIzM0OywKICAgICYjMzQ7a3ZtX2dtZW1fZXJyb3JfZm9saW8mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBzdXBwb3J0IGZvciBkaXJ0eSBwYWdlIGxvZ2dpbmcgZm9yIGBndWVzdF9tZW1mZGAgYmFja2VkIG1lbXNsb3RzIGluIEtWTS4gSXQgbW9kaWZpZXMgdGhlIEtWTSBtZW1vcnkgcmVnaW9uIGNvbmZpZ3VyYXRpb24gbG9naWMgYW5kIHRoZSBpbnZhbGlkYXRpb24gcGF0aHMgZm9yIGd1ZXN0IG1lbW9yeS4gVGhlc2UgYXJlIGNvcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIEtWTSB0aGF0IGNhbiBiZSByZWFjaGVkIHZpYSBLVk0gaW9jdGxzIChlLmcuLCBgS1ZNX1NFVF9VU0VSX01FTU9SWV9SRUdJT04yYCkgYW5kIG1lbW9yeSBpbnZhbGlkYXRpb24gZXZlbnRzLCBtYWtpbmcgdGhlbSBoaWdobHkgcmVsZXZhbnQgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxNzoyNjo1NC41MDYyMzMzNzdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMzY0MTU1MjA5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fZ21lbV9jaGFuZ2VfZmxhZ3NcIixcbiAgICBcImt2bV9nbWVtX2NoZWNrX25vX2NoYW5nZVwiLFxuICAgIFwiX19rdm1fZ21lbV9pbnZhbGlkYXRlX3N0YXJ0XCIsXG4gICAgXCJfX2t2bV9nbWVtX2ludmFsaWRhdGVfZW5kXCIsXG4gICAgXCJrdm1fZ21lbV9lcnJvcl9mb2xpb1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgc3VwcG9ydCBmb3IgZGlydHkgcGFnZSBsb2dnaW5nIGZvciBgZ3Vlc3RfbWVtZmRgIGJhY2tlZCBtZW1zbG90cyBpbiBLVk0uIEl0IG1vZGlmaWVzIHRoZSBLVk0gbWVtb3J5IHJlZ2lvbiBjb25maWd1cmF0aW9uIGxvZ2ljIGFuZCB0aGUgaW52YWxpZGF0aW9uIHBhdGhzIGZvciBndWVzdCBtZW1vcnkuIFRoZXNlIGFyZSBjb3JlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiBLVk0gdGhhdCBjYW4gYmUgcmVhY2hlZCB2aWEgS1ZNIGlvY3RscyAoZS5nLiwgYEtWTV9TRVRfVVNFUl9NRU1PUllfUkVHSU9OMmApIGFuZCBtZW1vcnkgaW52YWxpZGF0aW9uIGV2ZW50cywgbWFraW5nIHRoZW0gaGlnaGx5IHJlbGV2YW50IGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxNzoyNjo1NC41MDYyMzkyNjhaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc3MDI0MDU3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDFmM2M3YWM1NTcxNzg5OWM0YzkxYWM0OWZkZTM2NDg4NWQ4OGVlNjlcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBKdWwgMiAxNzoyNjo1MyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QgYi9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3RcXG5pbmRleCBhNWY5ZWU5MmY0M2U4ZC4uNTAxMmFmZTZhOWI1NTkgMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0XFxuKysrIGIvRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0XFxuQEAgLTk0OTMsNiArOTQ5MywxNSBAQCB0YWtlIGNhcmUgdG8gZGlmZmVyZW50aWF0ZSBiZXR3ZWVuIHRoZXNlIGNhc2VzLlxcbiBUaGUgcHJlc2VuY2Ugb2YgdGhpcyBjYXBhYmlsaXR5IGluZGljYXRlcyB0aGF0IHRoZSBuZXN0ZWQgS1ZNIGd1ZXN0IGNhblxcbiBzdGFydCBpbiBFU0EgbW9kZS5cXG4gXFxuKzguNDggS1ZNX0NBUF9HVUVTVF9NRU1GRF9NTUFQX0xPR19ESVJUWV9QQUdFU1xcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cXG4rXFxuKzpBcmNoaXRlY3R1cmVzOiBhbGxcXG4rXFxuK1RoZSBwcmVzZW5jZSBvZiB0aGlzIGNhcGFiaWxpdHkgaW5kaWNhdGVzIHRoYXQgbWVtc2xvdHMgYmFja2VkIGJ5IGEgZ3Vlc3RfbWVtZmRcXG4rZmlsZSBkZXNjcmlwdG9yIGNyZWF0ZWQgd2l0aCB0aGUgR1VFU1RfTUVNRkRfRkxBR19NTUFQIGZsYWcgY2FuIGhhdmUgZGlydHlcXG4rcGFnZSBsb2dnaW5nIGVuYWJsZWQuXFxuK1xcbiA5LiBLbm93biBLVk0gQVBJIHByb2JsZW1zXFxuID09PT09PT09PT09PT09PT09PT09PT09PT1cXG4gXFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL2FybS5jIGIvYXJjaC9hcm02NC9rdm0vYXJtLmNcXG5pbmRleCA1MGFkZmZmNzViZTgyZS4uZTkyZTVkN2I1MzNhZGEgMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm02NC9rdm0vYXJtLmNcXG4rKysgYi9hcmNoL2FybTY0L2t2bS9hcm0uY1xcbkBAIC0zOTMsNiArMzkzLDkgQEAgaW50IGt2bV92bV9pb2N0bF9jaGVja19leHRlbnNpb24oc3RydWN0IGt2bSAqa3ZtLCBsb25nIGV4dClcXG4gXFx0Y2FzZSBLVk1fQ0FQX0NPVU5URVJfT0ZGU0VUOlxcbiBcXHRjYXNlIEtWTV9DQVBfQVJNX1dSSVRBQkxFX0lNUF9JRF9SRUdTOlxcbiBcXHRjYXNlIEtWTV9DQVBfQVJNX1NFQV9UT19VU0VSOlxcbisjaWZkZWYgQ09ORklHX0tWTV9HVUVTVF9NRU1GRFxcbitcXHRjYXNlIEtWTV9DQVBfR1VFU1RfTUVNRkRfTU1BUF9MT0dfRElSVFlfUEFHRVM6XFxuKyNlbmRpZlxcbiBcXHRcXHRyID0gMTtcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdGNhc2UgS1ZNX0NBUF9TRVRfR1VFU1RfREVCVUcyOlxcbkBAIC00OTMsNiArNDk2LDI1IEBAIGludCBrdm1fdm1faW9jdGxfY2hlY2tfZXh0ZW5zaW9uKHN0cnVjdCBrdm0gKmt2bSwgbG9uZyBleHQpXFxuIFxcdHJldHVybiByO1xcbiB9XFxuIFxcbisjaWZkZWYgQ09ORklHX0tWTV9HVUVTVF9NRU1GRFxcbitib29sIGt2bV9hcmNoX3N1cHBvcnRzX2dtZW1fbW1hcF9kaXJ0eV9sb2dnaW5nKHN0cnVjdCBrdm0gKmt2bSlcXG4re1xcbitcXHQvKlxcbitcXHQgKiBQcm90ZWN0ZWQgcEtWTSBWTXMgZG9uJ3QgYWxsb3cgZGlydHkgcGFnZSBsb2dnaW5nLCBmYWlsIGVhcmx5IGhlcmVcXG4rXFx0ICogaW5zdGVhZCBvZiBpbiBrdm1fYXJjaF9wcmVwYXJlX21lbW9yeV9yZWdpb24oKS5cXG4rXFx0ICpcXG4rXFx0ICogS1ZNX0NBUF9HVUVTVF9NRU1GRF9NTUFQX0xPR19ESVJUWV9QQUdFUyBpcyBub3QgYXZhaWxhYmxlIGZvciBhXFxuK1xcdCAqIHByb3RlY3RlZCBwS1ZNIFZNLCBhbmQgcmV0dXJuaW5nIGZhbHNlIG1lYW5zIHRoYXRcXG4rXFx0ICogS1ZNX1NFVF9VU0VSX01FTU9SWV9SRUdJT04yIGZhaWxzIHdpdGggRUlOVkFMLCB3aGljaCBpcyBjb25zaXN0ZW50XFxuK1xcdCAqIHdpdGggdW5zdXBwb3J0ZWQgbWVtc2xvdCBmbGFncy5cXG4rXFx0ICovXFxuK1xcdGlmICghaXNfcHJvdGVjdGVkX2t2bV9lbmFibGVkKCkpXFxuK1xcdFxcdHJldHVybiB0cnVlO1xcbitcXG4rXFx0cmV0dXJuIGt2bV9wa3ZtX2V4dF9hbGxvd2VkKGt2bSwgS1ZNX0NBUF9HVUVTVF9NRU1GRF9NTUFQX0xPR19ESVJUWV9QQUdFUyk7XFxuK31cXG4rI2VuZGlmXFxuK1xcbiBsb25nIGt2bV9hcmNoX2Rldl9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCxcXG4gXFx0XFx0XFx0dW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZylcXG4ge1xcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9tbXUuYyBiL2FyY2gvYXJtNjQva3ZtL21tdS5jXFxuaW5kZXggNmM5NDFhYWExMGM2MzkuLmY2ZTZkZTE1M2NlMjUzIDEwMDY0NFxcbi0tLSBhL2FyY2gvYXJtNjQva3ZtL21tdS5jXFxuKysrIGIvYXJjaC9hcm02NC9rdm0vbW11LmNcXG5AQCAtMTY0OCw3ICsxNjQ4LDggQEAgc3RhdGljIGludCBnbWVtX2Fib3J0KGNvbnN0IHN0cnVjdCBrdm1fczJfZmF1bHRfZGVzYyAqczJmZClcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4gXFx0fVxcbiBcXG4tXFx0aWYgKCEoczJmZC1cXHUwMDNlbWVtc2xvdC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBLVk1fTUVNX1JFQURPTkxZKSlcXG4rXFx0aWYgKCEoczJmZC1cXHUwMDNlbWVtc2xvdC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBLVk1fTUVNX1JFQURPTkxZKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgKCFrdm1fc2xvdF9kaXJ0eV90cmFja19lbmFibGVkKHMyZmQtXFx1MDAzZW1lbXNsb3QpIHx8IHdyaXRlX2ZhdWx0KSlcXG4gXFx0XFx0cHJvdCB8PSBLVk1fUEdUQUJMRV9QUk9UX1c7XFxuIFxcbiBcXHRpZiAoczJmZC1cXHUwMDNlbmVzdGVkKVxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmggYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhcXG5pbmRleCBhYjhjZmFlYzgyZDMxZS4uYzQ0ZTkyNTNlYjQwMGEgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oXFxuQEAgLTU2LDYgKzU2LDcgQEBcXG4gICovXFxuICNkZWZpbmUgS1ZNX01FTVNMT1RfSU5WQUxJRFxcdFxcdFxcdCgxVUwgXFx1MDAzY1xcdTAwM2MgMTYpXFxuICNkZWZpbmUgS1ZNX01FTVNMT1RfR01FTV9PTkxZXFx0XFx0XFx0KDFVTCBcXHUwMDNjXFx1MDAzYyAxNylcXG4rI2RlZmluZSBNRU1TTE9UX1VTRVJfRkxBR1NfTUFTS1xcdFxcdFxcdDB4ZmZmZlxcbiBcXG4gLypcXG4gICogQml0IDYzIG9mIHRoZSBtZW1zbG90IGdlbmVyYXRpb24gbnVtYmVyIGlzIGFuIFxcXCJ1cGRhdGUgaW4tcHJvZ3Jlc3MgZmxhZ1xcXCIsXFxuQEAgLTczMSw2ICs3MzIsOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wga3ZtX2FyY2hfaGFzX3ByaXZhdGVfbWVtKHN0cnVjdCBrdm0gKmt2bSlcXG4gXFxuICNpZmRlZiBDT05GSUdfS1ZNX0dVRVNUX01FTUZEXFxuIGJvb2wga3ZtX2FyY2hfc3VwcG9ydHNfZ21lbV9pbml0X3NoYXJlZChzdHJ1Y3Qga3ZtICprdm0pO1xcbitib29sIGt2bV9hcmNoX3N1cHBvcnRzX2dtZW1fbW1hcF9kaXJ0eV9sb2dnaW5nKHN0cnVjdCBrdm0gKmt2bSk7XFxuK2ludCBrdm1fZ21lbV9jaGVja19ub19jaGFuZ2Uoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LFxcbitcXHRcXHRcXHQgICAgIHVuc2lnbmVkIGludCBmZCwgbG9mZl90IG9mZnNldCk7XFxuIFxcbiBzdGF0aWMgaW5saW5lIHU2NCBrdm1fZ21lbV9nZXRfc3VwcG9ydGVkX2ZsYWdzKHN0cnVjdCBrdm0gKmt2bSlcXG4ge1xcbkBAIC03NDEsNiArNzQ1LDE3IEBAIHN0YXRpYyBpbmxpbmUgdTY0IGt2bV9nbWVtX2dldF9zdXBwb3J0ZWRfZmxhZ3Moc3RydWN0IGt2bSAqa3ZtKVxcbiBcXG4gXFx0cmV0dXJuIGZsYWdzO1xcbiB9XFxuKyNlbHNlXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBrdm1fYXJjaF9zdXBwb3J0c19nbWVtX21tYXBfZGlydHlfbG9nZ2luZyhzdHJ1Y3Qga3ZtICprdm0pXFxuK3tcXG4rXFx0cmV0dXJuIGZhbHNlO1xcbit9XFxuK3N0YXRpYyBpbmxpbmUgaW50IGt2bV9nbWVtX2NoZWNrX25vX2NoYW5nZShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIHVuc2lnbmVkIGludCBmZCwgbG9mZl90IG9mZnNldClcXG4re1xcbitcXHRXQVJOX09OX09OQ0UoMSk7XFxuK1xcdHJldHVybiAtRUlPO1xcbit9XFxuICNlbmRpZlxcbiBcXG4gI2lmbmRlZiBrdm1fYXJjaF9oYXNfcmVhZG9ubHlfbWVtXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaCBiL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaFxcbmluZGV4IDQxOTAxMTA5N2ZhOGUyLi41YTUzZTJlMTliMmZiMiAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgva3ZtLmhcXG4rKysgYi9pbmNsdWRlL3VhcGkvbGludXgva3ZtLmhcXG5AQCAtOTk3LDYgKzk5Nyw3IEBAIHN0cnVjdCBrdm1fZW5hYmxlX2NhcCB7XFxuICNkZWZpbmUgS1ZNX0NBUF9TMzkwX0tFWU9QIDI0N1xcbiAjZGVmaW5lIEtWTV9DQVBfUzM5MF9WU0lFX0VTQU1PREUgMjQ4XFxuICNkZWZpbmUgS1ZNX0NBUF9TMzkwX0hQQUdFXzJHIDI0OVxcbisjZGVmaW5lIEtWTV9DQVBfR1VFU1RfTUVNRkRfTU1BUF9MT0dfRElSVFlfUEFHRVMgMjUwXFxuIFxcbiBzdHJ1Y3Qga3ZtX2lycV9yb3V0aW5nX2lycWNoaXAge1xcbiBcXHRfX3UzMiBpcnFjaGlwO1xcbmRpZmYgLS1naXQgYS92aXJ0L2t2bS9ndWVzdF9tZW1mZC5jIGIvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuY1xcbmluZGV4IGRiNTdjNTc2NmFiNjA0Li4yMTBiZGQ3NmYwYWFkNyAxMDA2NDRcXG4tLS0gYS92aXJ0L2t2bS9ndWVzdF9tZW1mZC5jXFxuKysrIGIvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuY1xcbkBAIC0yNSw2ICsyNSw3IEBAIHN0cnVjdCBnbWVtX2ZpbGUge1xcbiBcXHRzdHJ1Y3Qga3ZtICprdm07XFxuIFxcdHN0cnVjdCB4YXJyYXkgYmluZGluZ3M7XFxuIFxcdHN0cnVjdCBsaXN0X2hlYWQgZW50cnk7XFxuK1xcdGJvb2wgZm91bmRfbWVtc2xvdDtcXHQvKiBVc2VkIGZvciBiYWxhbmNpbmcgaW52YWxpZGF0aW9ucyB3aGVuIHB1bmNoaW5nIGEgaG9sZSAqL1xcbiB9O1xcbiBcXG4gc3RydWN0IGdtZW1faW5vZGUge1xcbkBAIC00Myw2ICs0NCwyOSBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIHN0cnVjdCBnbWVtX2lub2RlICpHTUVNX0koc3RydWN0IGlub2RlICppbm9kZSlcXG4gI2RlZmluZSBrdm1fZ21lbV9mb3JfZWFjaF9maWxlKGYsIGlub2RlKSBcXFxcXFxuIFxcdGxpc3RfZm9yX2VhY2hfZW50cnkoZiwgXFx1MDAyNkdNRU1fSShpbm9kZSktXFx1MDAzZWdtZW1fZmlsZV9saXN0LCBlbnRyeSlcXG4gXFxuK3N0YXRpYyB2b2lkICptZW1zbG90X3RvX3hhX3ZhbHVlKHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QpXFxuK3tcXG4rXFx0V0FSTl9PTl9PTkNFKHNpemVvZihzbG90LVxcdTAwM2Vhc19pZCkgXFx1MDAzZSAxNik7XFxuK1xcdFdBUk5fT05fT05DRShzaXplb2Yoc2xvdC1cXHUwMDNlaWQpIFxcdTAwM2UgMTYpO1xcbitcXHRXQVJOX09OX09OQ0Uoc2l6ZW9mKHNsb3QtXFx1MDAzZWFzX2lkKSArIHNpemVvZihzbG90LVxcdTAwM2VpZCkgXFx1MDAzZSBzaXplb2YodW5zaWduZWQgbG9uZykpO1xcbitcXG4rXFx0cmV0dXJuIHhhX21rX3ZhbHVlKCgodW5zaWduZWQgbG9uZylzbG90LVxcdTAwM2Vhc19pZCkgXFx1MDAzY1xcdTAwM2MgMTYgfCAodW5zaWduZWQgbG9uZylzbG90LVxcdTAwM2VpZCk7XFxuK31cXG4rXFxuK3N0YXRpYyBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICp4YV92YWx1ZV90b19tZW1zbG90KHN0cnVjdCBrdm0gKmt2bSwgY29uc3Qgdm9pZCAqZW50cnkpXFxuK3tcXG4rXFx0dW5zaWduZWQgbG9uZyBmdWxsX2lkID0geGFfdG9fdmFsdWUoZW50cnkpO1xcbitcXHR1MTYgYXNfaWQgPSAoZnVsbF9pZCBcXHUwMDNlXFx1MDAzZSAxNikgXFx1MDAyNiBVMTZfTUFYO1xcbitcXHRzaG9ydCBpZCA9IGZ1bGxfaWQgXFx1MDAyNiBVMTZfTUFYO1xcbitcXG4rXFx0LypcXG4rXFx0ICogRG8gbm90IGlnbm9yZSBLVk1fTUVNU0xPVF9JTlZBTElEIG1lbXNsb3RzLCBhcyB3ZSB3YW50XFxuK1xcdCAqIC1cXHUwMDNlZXJyb3JfcmVtb3ZlX2ZvbGlvKCksIHdoZW4gaXQgcmFjZXMgd2l0aCBtZW1zbG90IGRlbGV0aW9uLCB0byBoYXZlXFxuK1xcdCAqICB1bm1hcHBlZCB0aGUgbWVtb3J5IHVwb24gY29tcGxldGlvbi5cXG4rXFx0ICovXFxuK1xcdHJldHVybiBpZF90b19tZW1zbG90KF9fa3ZtX21lbXNsb3RzKGt2bSwgYXNfaWQpLCBpZCk7XFxuK31cXG4rXFxuIC8qKlxcbiAgKiBmb2xpb19maWxlX3BmbiAtIGxpa2UgZm9saW9fZmlsZV9wYWdlLCBidXQgcmV0dXJuIGEgcGZuLlxcbiAgKiBAZm9saW86IFRoZSBmb2xpbyB3aGljaCBjb250YWlucyB0aGlzIGluZGV4LlxcbkBAIC0xNTcsNyArMTgxLDcgQEAgc3RhdGljIGVudW0ga3ZtX2dmbl9yYW5nZV9maWx0ZXIga3ZtX2dtZW1fZ2V0X2ludmFsaWRhdGVfZmlsdGVyKHN0cnVjdCBpbm9kZSAqaW5cXG4gXFx0cmV0dXJuIEtWTV9GSUxURVJfUFJJVkFURTtcXG4gfVxcbiBcXG4tc3RhdGljIHZvaWQgX19rdm1fZ21lbV9pbnZhbGlkYXRlX3N0YXJ0KHN0cnVjdCBnbWVtX2ZpbGUgKmYsIHBnb2ZmX3Qgc3RhcnQsXFxuK3N0YXRpYyBib29sIF9fa3ZtX2dtZW1faW52YWxpZGF0ZV9zdGFydChzdHJ1Y3QgZ21lbV9maWxlICpmLCBwZ29mZl90IHN0YXJ0LFxcbiBcXHRcXHRcXHRcXHRcXHRwZ29mZl90IGVuZCxcXG4gXFx0XFx0XFx0XFx0XFx0ZW51bSBrdm1fZ2ZuX3JhbmdlX2ZpbHRlciBhdHRyX2ZpbHRlcilcXG4ge1xcbkBAIC0xNjUsOSArMTg5LDE1IEBAIHN0YXRpYyB2b2lkIF9fa3ZtX2dtZW1faW52YWxpZGF0ZV9zdGFydChzdHJ1Y3QgZ21lbV9maWxlICpmLCBwZ29mZl90IHN0YXJ0LFxcbiBcXHRzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90O1xcbiBcXHRzdHJ1Y3Qga3ZtICprdm0gPSBmLVxcdTAwM2Vrdm07XFxuIFxcdHVuc2lnbmVkIGxvbmcgaW5kZXg7XFxuK1xcdHZvaWQgKmVudHJ5O1xcbiBcXG4tXFx0eGFfZm9yX2VhY2hfcmFuZ2UoXFx1MDAyNmYtXFx1MDAzZWJpbmRpbmdzLCBpbmRleCwgc2xvdCwgc3RhcnQsIGVuZCAtIDEpIHtcXG4tXFx0XFx0cGdvZmZfdCBwZ29mZiA9IHNsb3QtXFx1MDAzZWdtZW0ucGdvZmY7XFxuK1xcdHhhX2Zvcl9lYWNoX3JhbmdlKFxcdTAwMjZmLVxcdTAwM2ViaW5kaW5ncywgaW5kZXgsIGVudHJ5LCBzdGFydCwgZW5kIC0gMSkge1xcbitcXHRcXHRwZ29mZl90IHBnb2ZmO1xcbitcXG4rXFx0XFx0c2xvdCA9IHhhX3ZhbHVlX3RvX21lbXNsb3Qoa3ZtLCBlbnRyeSk7XFxuK1xcdFxcdGlmICghc2xvdClcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdHBnb2ZmID0gc2xvdC1cXHUwMDNlZ21lbS5wZ29mZjtcXG4gXFxuIFxcdFxcdHN0cnVjdCBrdm1fZ2ZuX3JhbmdlIGdmbl9yYW5nZSA9IHtcXG4gXFx0XFx0XFx0LnN0YXJ0ID0gc2xvdC1cXHUwMDNlYmFzZV9nZm4gKyBtYXgocGdvZmYsIHN0YXJ0KSAtIHBnb2ZmLFxcbkBAIC0xOTIsNiArMjIyLDggQEAgc3RhdGljIHZvaWQgX19rdm1fZ21lbV9pbnZhbGlkYXRlX3N0YXJ0KHN0cnVjdCBnbWVtX2ZpbGUgKmYsIHBnb2ZmX3Qgc3RhcnQsXFxuIFxcbiBcXHRpZiAoZm91bmRfbWVtc2xvdClcXG4gXFx0XFx0S1ZNX01NVV9VTkxPQ0soa3ZtKTtcXG4rXFxuK1xcdHJldHVybiBmb3VuZF9tZW1zbG90O1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBrdm1fZ21lbV9pbnZhbGlkYXRlX3N0YXJ0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHBnb2ZmX3Qgc3RhcnQsXFxuQEAgLTE5OSwxMSArMjMxLDIyIEBAIHN0YXRpYyB2b2lkIGt2bV9nbWVtX2ludmFsaWRhdGVfc3RhcnQoc3RydWN0IGlub2RlICppbm9kZSwgcGdvZmZfdCBzdGFydCxcXG4ge1xcbiBcXHRlbnVtIGt2bV9nZm5fcmFuZ2VfZmlsdGVyIGF0dHJfZmlsdGVyO1xcbiBcXHRzdHJ1Y3QgZ21lbV9maWxlICpmO1xcbitcXHRzdHJ1Y3Qga3ZtICprdm07XFxuK1xcdGludCBpZHg7XFxuIFxcbiBcXHRhdHRyX2ZpbHRlciA9IGt2bV9nbWVtX2dldF9pbnZhbGlkYXRlX2ZpbHRlcihpbm9kZSk7XFxuIFxcbi1cXHRrdm1fZ21lbV9mb3JfZWFjaF9maWxlKGYsIGlub2RlKVxcbi1cXHRcXHRfX2t2bV9nbWVtX2ludmFsaWRhdGVfc3RhcnQoZiwgc3RhcnQsIGVuZCwgYXR0cl9maWx0ZXIpO1xcbitcXHRrdm1fZ21lbV9mb3JfZWFjaF9maWxlKGYsIGlub2RlKSB7XFxuK1xcdFxcdGt2bSA9IGYtXFx1MDAzZWt2bTtcXG4rXFx0XFx0aWR4ID0gc3JjdV9yZWFkX2xvY2soXFx1MDAyNmt2bS1cXHUwMDNlc3JjdSk7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIFRoaXMgaXMgc2FmZSB0byBkbyBiZWNhdXNlIGNhbGxzIHRvXFxuK1xcdFxcdCAqIGt2bV9nbWVtX2ludmFsaWRhdGVfc3RhcnQoKSBhcmUgc2VyaWFsaXplZCBieVxcbitcXHRcXHQgKiBmaWxlbWFwX2ludmFsaWRhdGVfbG9jaygpLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0Zi1cXHUwMDNlZm91bmRfbWVtc2xvdCA9IF9fa3ZtX2dtZW1faW52YWxpZGF0ZV9zdGFydChmLCBzdGFydCwgZW5kLCBhdHRyX2ZpbHRlcik7XFxuK1xcdFxcdHNyY3VfcmVhZF91bmxvY2soXFx1MDAyNmt2bS1cXHUwMDNlc3JjdSwgaWR4KTtcXG4rXFx0fVxcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBfX2t2bV9nbWVtX2ludmFsaWRhdGVfZW5kKHN0cnVjdCBnbWVtX2ZpbGUgKmYsIHBnb2ZmX3Qgc3RhcnQsXFxuQEAgLTIyMyw4ICsyNjYsMTEgQEAgc3RhdGljIHZvaWQga3ZtX2dtZW1faW52YWxpZGF0ZV9lbmQoc3RydWN0IGlub2RlICppbm9kZSwgcGdvZmZfdCBzdGFydCxcXG4ge1xcbiBcXHRzdHJ1Y3QgZ21lbV9maWxlICpmO1xcbiBcXG4tXFx0a3ZtX2dtZW1fZm9yX2VhY2hfZmlsZShmLCBpbm9kZSlcXG4rXFx0a3ZtX2dtZW1fZm9yX2VhY2hfZmlsZShmLCBpbm9kZSkge1xcbitcXHRcXHRpZiAoIWYtXFx1MDAzZWZvdW5kX21lbXNsb3QpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXHRcXHRfX2t2bV9nbWVtX2ludmFsaWRhdGVfZW5kKGYsIHN0YXJ0LCBlbmQpO1xcbitcXHR9XFxuIH1cXG4gXFxuIHN0YXRpYyBsb25nIGt2bV9nbWVtX3B1bmNoX2hvbGUoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG9mZnNldCwgbG9mZl90IGxlbilcXG5AQCAtMzI2LDYgKzM3Miw3IEBAIHN0YXRpYyBpbnQga3ZtX2dtZW1fcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4gXFx0c3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdDtcXG4gXFx0c3RydWN0IGt2bSAqa3ZtID0gZi1cXHUwMDNla3ZtO1xcbiBcXHR1bnNpZ25lZCBsb25nIGluZGV4O1xcbitcXHR2b2lkICplbnRyeTtcXG4gXFxuIFxcdC8qXFxuIFxcdCAqIFByZXZlbnQgY29uY3VycmVudCBhdHRlbXB0cyB0byAqdW5iaW5kKiBhIG1lbXNsb3QuICBUaGlzIGlzIHRoZSBsYXN0XFxuQEAgLTM0NCwxNyArMzkxLDE4IEBAIHN0YXRpYyBpbnQga3ZtX2dtZW1fcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4gXFxuIFxcdGZpbGVtYXBfaW52YWxpZGF0ZV9sb2NrKGlub2RlLVxcdTAwM2VpX21hcHBpbmcpO1xcbiBcXG4tXFx0eGFfZm9yX2VhY2goXFx1MDAyNmYtXFx1MDAzZWJpbmRpbmdzLCBpbmRleCwgc2xvdClcXG4rXFx0eGFfZm9yX2VhY2goXFx1MDAyNmYtXFx1MDAzZWJpbmRpbmdzLCBpbmRleCwgZW50cnkpIHtcXG4rXFx0XFx0c2xvdCA9IHhhX3ZhbHVlX3RvX21lbXNsb3Qoa3ZtLCBlbnRyeSk7XFxuIFxcdFxcdFdSSVRFX09OQ0Uoc2xvdC1cXHUwMDNlZ21lbS5maWxlLCBOVUxMKTtcXG4rXFx0fVxcbiBcXG4gXFx0LypcXG4gXFx0ICogQWxsIGluLWZsaWdodCBvcGVyYXRpb25zIGFyZSBnb25lIGFuZCBuZXcgYmluZGluZ3MgY2FuIGJlIGNyZWF0ZWQuXFxuIFxcdCAqIFphcCBhbGwgU1BURXMgcG9pbnRlZCBhdCBieSB0aGlzIGZpbGUuICBEbyBub3QgZnJlZSB0aGUgYmFja2luZ1xcbiBcXHQgKiBtZW1vcnksIGFzIGl0cyBsaWZldGltZSBpcyBhc3NvY2lhdGVkIHdpdGggdGhlIGlub2RlLCBub3QgdGhlIGZpbGUuXFxuIFxcdCAqL1xcbi1cXHRfX2t2bV9nbWVtX2ludmFsaWRhdGVfc3RhcnQoZiwgMCwgLTF1bCxcXG4tXFx0XFx0XFx0XFx0ICAgIGt2bV9nbWVtX2dldF9pbnZhbGlkYXRlX2ZpbHRlcihpbm9kZSkpO1xcbi1cXHRfX2t2bV9nbWVtX2ludmFsaWRhdGVfZW5kKGYsIDAsIC0xdWwpO1xcbitcXHRpZiAoX19rdm1fZ21lbV9pbnZhbGlkYXRlX3N0YXJ0KGYsIDAsIC0xdWwsIGt2bV9nbWVtX2dldF9pbnZhbGlkYXRlX2ZpbHRlcihpbm9kZSkpKVxcbitcXHRcXHRfX2t2bV9nbWVtX2ludmFsaWRhdGVfZW5kKGYsIDAsIC0xdWwpO1xcbiBcXG4gXFx0bGlzdF9kZWwoXFx1MDAyNmYtXFx1MDAzZWVudHJ5KTtcXG4gXFxuQEAgLTQ5OCwxNCArNTQ2LDIwIEBAIHN0YXRpYyBpbnQga3ZtX2dtZW1fbWlncmF0ZV9mb2xpbyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4gXFxuIHN0YXRpYyBpbnQga3ZtX2dtZW1fZXJyb3JfZm9saW8oc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIHtcXG4rXFx0ZW51bSBrdm1fZ2ZuX3JhbmdlX2ZpbHRlciBhdHRyX2ZpbHRlcjtcXG4rXFx0c3RydWN0IGlub2RlICppbm9kZSA9IG1hcHBpbmctXFx1MDAzZWhvc3Q7XFxuK1xcdHN0cnVjdCBnbWVtX2ZpbGUgKmY7XFxuIFxcdHBnb2ZmX3Qgc3RhcnQsIGVuZDtcXG4rXFx0Ym9vbCBmb3VuZF9tZW1zbG90O1xcbitcXHRzdHJ1Y3Qga3ZtICprdm07XFxuK1xcdGludCBpZHg7XFxuIFxcbiBcXHRmaWxlbWFwX2ludmFsaWRhdGVfbG9ja19zaGFyZWQobWFwcGluZyk7XFxuIFxcbiBcXHRzdGFydCA9IGZvbGlvLVxcdTAwM2VpbmRleDtcXG4gXFx0ZW5kID0gc3RhcnQgKyBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XFxuIFxcbi1cXHRrdm1fZ21lbV9pbnZhbGlkYXRlX3N0YXJ0KG1hcHBpbmctXFx1MDAzZWhvc3QsIHN0YXJ0LCBlbmQpO1xcbitcXHRhdHRyX2ZpbHRlciA9IGt2bV9nbWVtX2dldF9pbnZhbGlkYXRlX2ZpbHRlcihpbm9kZSk7XFxuIFxcbiBcXHQvKlxcbiBcXHQgKiBEbyBub3QgdHJ1bmNhdGUgdGhlIHJhbmdlLCB3aGF0IGFjdGlvbiBpcyB0YWtlbiBpbiByZXNwb25zZSB0byB0aGVcXG5AQCAtNTE1LDggKzU2OSwxOSBAQCBzdGF0aWMgaW50IGt2bV9nbWVtX2Vycm9yX2ZvbGlvKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbFxcbiBcXHQgKiBhdCB3aGljaCBwb2ludCBLVk0gY2FuIGVpdGhlciB0ZXJtaW5hdGUgdGhlIFZNIG9yIHByb3BhZ2F0ZSB0aGVcXG4gXFx0ICogZXJyb3IgdG8gdXNlcnNwYWNlLlxcbiBcXHQgKi9cXG4rXFx0a3ZtX2dtZW1fZm9yX2VhY2hfZmlsZShmLCBpbm9kZSkge1xcbitcXHRcXHRrdm0gPSBmLVxcdTAwM2Vrdm07XFxuIFxcbi1cXHRrdm1fZ21lbV9pbnZhbGlkYXRlX2VuZChtYXBwaW5nLVxcdTAwM2Vob3N0LCBzdGFydCwgZW5kKTtcXG4rXFx0XFx0aWR4ID0gc3JjdV9yZWFkX2xvY2soXFx1MDAyNmt2bS1cXHUwMDNlc3JjdSk7XFxuK1xcdFxcdGZvdW5kX21lbXNsb3QgPSBfX2t2bV9nbWVtX2ludmFsaWRhdGVfc3RhcnQoZiwgc3RhcnQsIGVuZCwgYXR0cl9maWx0ZXIpO1xcbitcXHRcXHRzcmN1X3JlYWRfdW5sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZXNyY3UsIGlkeCk7XFxuK1xcbitcXHRcXHRpZiAoZm91bmRfbWVtc2xvdCkge1xcbitcXHRcXHRcXHRLVk1fTU1VX0xPQ0soa3ZtKTtcXG4rXFx0XFx0XFx0a3ZtX21tdV9pbnZhbGlkYXRlX2VuZChrdm0pO1xcbitcXHRcXHRcXHRLVk1fTU1VX1VOTE9DSyhrdm0pO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4gXFxuIFxcdGZpbGVtYXBfaW52YWxpZGF0ZV91bmxvY2tfc2hhcmVkKG1hcHBpbmcpO1xcbiBcXG5AQCAtNTU3LDYgKzYyMiwxMSBAQCBib29sIF9fd2VhayBrdm1fYXJjaF9zdXBwb3J0c19nbWVtX2luaXRfc2hhcmVkKHN0cnVjdCBrdm0gKmt2bSlcXG4gXFx0cmV0dXJuIHRydWU7XFxuIH1cXG4gXFxuK2Jvb2wgX193ZWFrIGt2bV9hcmNoX3N1cHBvcnRzX2dtZW1fbW1hcF9kaXJ0eV9sb2dnaW5nKHN0cnVjdCBrdm0gKmt2bSlcXG4re1xcbitcXHRyZXR1cm4gZmFsc2U7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgX19rdm1fZ21lbV9jcmVhdGUoc3RydWN0IGt2bSAqa3ZtLCBsb2ZmX3Qgc2l6ZSwgdTY0IGZsYWdzKVxcbiB7XFxuIFxcdHN0YXRpYyBjb25zdCBjaGFyICpuYW1lID0gXFxcIltrdm0tZ21lbV1cXFwiO1xcbkBAIC02NDAsNiArNzEwLDY2IEBAIGludCBrdm1fZ21lbV9jcmVhdGUoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2NyZWF0ZV9ndWVzdF9tZW1mZCAqYXJncylcXG4gXFx0cmV0dXJuIF9fa3ZtX2dtZW1fY3JlYXRlKGt2bSwgc2l6ZSwgZmxhZ3MpO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IF9fa3ZtX2dtZW1fY2hlY2tfbm9fY2hhbmdlKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqb2xkLFxcbitcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgZmlsZSAqb2xkX2ZpbGUsIHVuc2lnbmVkIGludCBmZCxcXG4rXFx0XFx0XFx0XFx0ICAgICAgbG9mZl90IG9mZnNldClcXG4re1xcbitcXHRzdHJ1Y3QgZmlsZSAqbmV3X2ZpbGU7XFxuK1xcbitcXHRuZXdfZmlsZSA9IGZnZXQoZmQpO1xcbitcXHRpZiAoIW5ld19maWxlKVxcbitcXHRcXHRyZXR1cm4gLUVCQURGO1xcbitcXHRpZiAobmV3X2ZpbGUgIT0gb2xkX2ZpbGUpIHtcXG4rXFx0XFx0ZnB1dChuZXdfZmlsZSk7XFxuK1xcdFxcdHJldHVybiAtRUJBREY7XFxuK1xcdH1cXG4rXFx0ZnB1dChuZXdfZmlsZSk7XFxuK1xcbitcXHRpZiAob2xkLVxcdTAwM2VnbWVtLnBnb2ZmICE9IG9mZnNldCBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitpbnQga3ZtX2dtZW1fY2hlY2tfbm9fY2hhbmdlKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqb2xkLFxcbitcXHRcXHRcXHQgICAgIHVuc2lnbmVkIGludCBmZCwgbG9mZl90IG9mZnNldClcXG4re1xcbitcXHRDTEFTUyhnbWVtX2dldF9maWxlLCBvbGRfZmlsZSkob2xkKTtcXG4rXFxuK1xcdHJldHVybiBfX2t2bV9nbWVtX2NoZWNrX25vX2NoYW5nZShrdm0sIG9sZCwgb2xkX2ZpbGUsIGZkLCBvZmZzZXQpO1xcbit9XFxuK1xcbitpbnQga3ZtX2dtZW1fY2hhbmdlX2ZsYWdzKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqb2xkLFxcbitcXHRcXHRcXHQgIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm5ldywgdW5zaWduZWQgaW50IGZkLFxcbitcXHRcXHRcXHQgIGxvZmZfdCBvZmZzZXQpXFxuK3tcXG4rXFx0c3RydWN0IGdtZW1fZmlsZSAqb2xkX2Y7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZrdm0tXFx1MDAzZXNsb3RzX2xvY2spO1xcbitcXG4rXFx0aWYgKCFrdm1fbWVtc2xvdF9pc19nbWVtX29ubHkob2xkKSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRDTEFTUyhnbWVtX2dldF9maWxlLCBvbGRfZmlsZSkob2xkKTtcXG4rXFxuK1xcdHJldCA9IF9fa3ZtX2dtZW1fY2hlY2tfbm9fY2hhbmdlKGt2bSwgb2xkLCBvbGRfZmlsZSwgZmQsIG9mZnNldCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRvbGRfZiA9IG9sZF9maWxlLVxcdTAwM2Vwcml2YXRlX2RhdGE7XFxuK1xcdGlmICh4YV9sb2FkKFxcdTAwMjZvbGRfZi1cXHUwMDNlYmluZGluZ3MsIG9sZC1cXHUwMDNlZ21lbS5wZ29mZikgIT0gbWVtc2xvdF90b194YV92YWx1ZShuZXcpKSB7XFxuK1xcdFxcdFdBUk5fT05fT05DRSh4YV90b192YWx1ZSh4YV9sb2FkKFxcdTAwMjZvbGRfZi1cXHUwMDNlYmluZGluZ3MsIG9sZC1cXHUwMDNlZ21lbS5wZ29mZikpKTtcXG4rXFx0XFx0cmV0dXJuIC1FSU87XFxuK1xcdH1cXG4rXFxuK1xcdG5ldy1cXHUwMDNlZ21lbS5maWxlID0gb2xkLVxcdTAwM2VnbWVtLmZpbGU7XFxuK1xcdG5ldy1cXHUwMDNlZ21lbS5wZ29mZiA9IG9sZC1cXHUwMDNlZ21lbS5wZ29mZjtcXG4rXFx0bmV3LVxcdTAwM2VmbGFncyB8PSBLVk1fTUVNU0xPVF9HTUVNX09OTFk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gaW50IGt2bV9nbWVtX2JpbmQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LFxcbiBcXHRcXHQgIHVuc2lnbmVkIGludCBmZCwgdW9mZl90IG9mZnNldClcXG4ge1xcbkBAIC02NjksNiArNzk5LDExIEBAIGludCBrdm1fZ21lbV9iaW5kKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCxcXG4gXFx0aWYgKCFQQUdFX0FMSUdORUQob2Zmc2V0KSB8fCBvZmZzZXQgKyBzaXplIFxcdTAwM2UgaV9zaXplX3JlYWQoaW5vZGUpKVxcbiBcXHRcXHRnb3RvIGVycjtcXG4gXFxuK1xcdGlmIChzbG90LVxcdTAwM2VmbGFncyBcXHUwMDI2IEtWTV9NRU1fTE9HX0RJUlRZX1BBR0VTIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAoIWt2bV9nbWVtX3N1cHBvcnRzX21tYXAoaW5vZGUpIHx8XFxuK1xcdCAgICAgIWt2bV9hcmNoX3N1cHBvcnRzX2dtZW1fbW1hcF9kaXJ0eV9sb2dnaW5nKGt2bSkpKVxcbitcXHRcXHRnb3RvIGVycjtcXG4rXFxuIFxcdGZpbGVtYXBfaW52YWxpZGF0ZV9sb2NrKGlub2RlLVxcdTAwM2VpX21hcHBpbmcpO1xcbiBcXG4gXFx0c3RhcnQgPSBvZmZzZXQgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVDtcXG5AQCAtNjkxLDcgKzgyNiw3IEBAIGludCBrdm1fZ21lbV9iaW5kKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCxcXG4gXFx0aWYgKGt2bV9nbWVtX3N1cHBvcnRzX21tYXAoaW5vZGUpKVxcbiBcXHRcXHRzbG90LVxcdTAwM2VmbGFncyB8PSBLVk1fTUVNU0xPVF9HTUVNX09OTFk7XFxuIFxcbi1cXHR4YV9zdG9yZV9yYW5nZShcXHUwMDI2Zi1cXHUwMDNlYmluZGluZ3MsIHN0YXJ0LCBlbmQgLSAxLCBzbG90LCBHRlBfS0VSTkVMKTtcXG4rXFx0eGFfc3RvcmVfcmFuZ2UoXFx1MDAyNmYtXFx1MDAzZWJpbmRpbmdzLCBzdGFydCwgZW5kIC0gMSwgbWVtc2xvdF90b194YV92YWx1ZShzbG90KSwgR0ZQX0tFUk5FTCk7XFxuIFxcdGZpbGVtYXBfaW52YWxpZGF0ZV91bmxvY2soaW5vZGUtXFx1MDAzZWlfbWFwcGluZyk7XFxuIFxcbiBcXHQvKlxcbkBAIC03NjUsOCArOTAwLDggQEAgc3RhdGljIHN0cnVjdCBmb2xpbyAqX19rdm1fZ21lbV9nZXRfcGZuKHN0cnVjdCBmaWxlICpmaWxlLFxcbiBcXHRcXHRyZXR1cm4gRVJSX1BUUigtRUZBVUxUKTtcXG4gXFx0fVxcbiBcXG4tXFx0aWYgKHhhX2xvYWQoXFx1MDAyNmYtXFx1MDAzZWJpbmRpbmdzLCBpbmRleCkgIT0gc2xvdCkge1xcbi1cXHRcXHRXQVJOX09OX09OQ0UoeGFfbG9hZChcXHUwMDI2Zi1cXHUwMDNlYmluZGluZ3MsIGluZGV4KSk7XFxuK1xcdGlmICh4YV9sb2FkKFxcdTAwMjZmLVxcdTAwM2ViaW5kaW5ncywgaW5kZXgpICE9IG1lbXNsb3RfdG9feGFfdmFsdWUoc2xvdCkpIHtcXG4rXFx0XFx0V0FSTl9PTl9PTkNFKHhhX3RvX3ZhbHVlKHhhX2xvYWQoXFx1MDAyNmYtXFx1MDAzZWJpbmRpbmdzLCBpbmRleCkpKTtcXG4gXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVJTyk7XFxuIFxcdH1cXG4gXFxuZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL2t2bV9tYWluLmMgYi92aXJ0L2t2bS9rdm1fbWFpbi5jXFxuaW5kZXggZTQ0YzIwYzA0OTYxMGQuLmFmMzgwZThmMmI2OGQ0IDEwMDY0NFxcbi0tLSBhL3ZpcnQva3ZtL2t2bV9tYWluLmNcXG4rKysgYi92aXJ0L2t2bS9rdm1fbWFpbi5jXFxuQEAgLTE1NzMsMTQgKzE1NzMsMTQgQEAgc3RhdGljIHZvaWQga3ZtX3JlcGxhY2VfbWVtc2xvdChzdHJ1Y3Qga3ZtICprdm0sXFxuIHN0YXRpYyBpbnQgY2hlY2tfbWVtb3J5X3JlZ2lvbl9mbGFncyhzdHJ1Y3Qga3ZtICprdm0sXFxuIFxcdFxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IGt2bV91c2Vyc3BhY2VfbWVtb3J5X3JlZ2lvbjIgKm1lbSlcXG4ge1xcbi1cXHR1MzIgdmFsaWRfZmxhZ3MgPSBLVk1fTUVNX0xPR19ESVJUWV9QQUdFUztcXG4rXFx0dTMyIHZhbGlkX2ZsYWdzID0gMDtcXG4gXFxuIFxcdGlmIChJU19FTkFCTEVEKENPTkZJR19LVk1fR1VFU1RfTUVNRkQpKVxcbiBcXHRcXHR2YWxpZF9mbGFncyB8PSBLVk1fTUVNX0dVRVNUX01FTUZEO1xcbiBcXG4tXFx0LyogRGlydHkgbG9nZ2luZyBwcml2YXRlIG1lbW9yeSBpcyBub3QgY3VycmVudGx5IHN1cHBvcnRlZC4gKi9cXG4tXFx0aWYgKG1lbS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBLVk1fTUVNX0dVRVNUX01FTUZEKVxcbi1cXHRcXHR2YWxpZF9mbGFncyBcXHUwMDI2PSB+S1ZNX01FTV9MT0dfRElSVFlfUEFHRVM7XFxuK1xcdGlmICghKG1lbS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBLVk1fTUVNX0dVRVNUX01FTUZEKSB8fFxcbitcXHQgICAga3ZtX2FyY2hfc3VwcG9ydHNfZ21lbV9tbWFwX2RpcnR5X2xvZ2dpbmcoa3ZtKSlcXG4rXFx0XFx0dmFsaWRfZmxhZ3MgfD0gS1ZNX01FTV9MT0dfRElSVFlfUEFHRVM7XFxuIFxcbiBcXHQvKlxcbiBcXHQgKiBHVUVTVF9NRU1GRCBpcyBpbmNvbXBhdGlibGUgd2l0aCByZWFkLW9ubHkgbWVtc2xvdHMsIGFzIHdyaXRlcyB0b1xcbkBAIC0xNzM5LDE2ICsxNzM5LDYgQEAgc3RhdGljIHZvaWQga3ZtX2NvbW1pdF9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSxcXG4gXFx0XFx0ICovXFxuIFxcdFxcdGlmIChvbGQtXFx1MDAzZWRpcnR5X2JpdG1hcCBcXHUwMDI2XFx1MDAyNiAhbmV3LVxcdTAwM2VkaXJ0eV9iaXRtYXApXFxuIFxcdFxcdFxcdGt2bV9kZXN0cm95X2RpcnR5X2JpdG1hcChvbGQpO1xcbi1cXG4tXFx0XFx0LypcXG4tXFx0XFx0ICogVW5iaW5kIHRoZSBndWVzdF9tZW1mZCBpbnN0YW5jZSBhcyBuZWVkZWQ7IHRoZSBAbmV3IHNsb3QgaGFzXFxuLVxcdFxcdCAqIGFscmVhZHkgY3JlYXRlZCBpdHMgb3duIGJpbmRpbmcuICBUT0RPOiBEcm9wIHRoZSBXQVJOIHdoZW5cXG4tXFx0XFx0ICogZGlydHkgbG9nZ2luZyBndWVzdF9tZW1mZCBtZW1zbG90cyBpcyBzdXBwb3J0ZWQuICBVbnRpbCB0aGVuLFxcbi1cXHRcXHQgKiBmbGFncy1vbmx5IGNoYW5nZXMgb24gZ3Vlc3RfbWVtZmQgc2xvdHMgc2hvdWxkIGJlIGltcG9zc2libGUuXFxuLVxcdFxcdCAqL1xcbi1cXHRcXHRpZiAoV0FSTl9PTl9PTkNFKG9sZC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBLVk1fTUVNX0dVRVNUX01FTUZEKSlcXG4tXFx0XFx0XFx0a3ZtX2dtZW1fdW5iaW5kKG9sZCk7XFxuLVxcbiBcXHRcXHQvKlxcbiBcXHRcXHQgKiBUaGUgZmluYWwgcXVpcmsuICBGcmVlIHRoZSBkZXRhY2hlZCwgb2xkIHNsb3QsIGJ1dCBvbmx5IGl0c1xcbiBcXHRcXHQgKiBtZW1vcnksIG5vdCBhbnkgbWV0YWRhdGEuICBNZXRhZGF0YSwgaW5jbHVkaW5nIGFyY2ggc3BlY2lmaWNcXG5AQCAtMjA3MywyMiArMjA2MywyNyBAQCBzdGF0aWMgaW50IGt2bV9zZXRfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sXFxuIFxcdFxcdGlmICgoa3ZtLVxcdTAwM2Vucl9tZW1zbG90X3BhZ2VzICsgbnBhZ2VzKSBcXHUwMDNjIGt2bS1cXHUwMDNlbnJfbWVtc2xvdF9wYWdlcylcXG4gXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdH0gZWxzZSB7IC8qIE1vZGlmeSBhbiBleGlzdGluZyBzbG90LiAqL1xcbi1cXHRcXHQvKiBQcml2YXRlIG1lbXNsb3RzIGFyZSBpbW11dGFibGUsIHRoZXkgY2FuIG9ubHkgYmUgZGVsZXRlZC4gKi9cXG4tXFx0XFx0aWYgKG1lbS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBLVk1fTUVNX0dVRVNUX01FTUZEKVxcbi1cXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0XFx0aWYgKChtZW0tXFx1MDAzZXVzZXJzcGFjZV9hZGRyICE9IG9sZC1cXHUwMDNldXNlcnNwYWNlX2FkZHIpIHx8XFxuIFxcdFxcdCAgICAobnBhZ2VzICE9IG9sZC1cXHUwMDNlbnBhZ2VzKSB8fFxcbiBcXHRcXHQgICAgKChtZW0tXFx1MDAzZWZsYWdzIF4gb2xkLVxcdTAwM2VmbGFncykgXFx1MDAyNiAoS1ZNX01FTV9SRUFET05MWSB8IEtWTV9NRU1fR1VFU1RfTUVNRkQpKSlcXG4gXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbi1cXHRcXHRpZiAoYmFzZV9nZm4gIT0gb2xkLVxcdTAwM2ViYXNlX2dmbilcXG4rXFx0XFx0aWYgKGJhc2VfZ2ZuICE9IG9sZC1cXHUwMDNlYmFzZV9nZm4pIHtcXG4gXFx0XFx0XFx0Y2hhbmdlID0gS1ZNX01SX01PVkU7XFxuLVxcdFxcdGVsc2UgaWYgKG1lbS1cXHUwMDNlZmxhZ3MgIT0gb2xkLVxcdTAwM2VmbGFncylcXG4rXFx0XFx0fSBlbHNlIGlmIChtZW0tXFx1MDAzZWZsYWdzICE9IChvbGQtXFx1MDAzZWZsYWdzIFxcdTAwMjYgTUVNU0xPVF9VU0VSX0ZMQUdTX01BU0spKSB7XFxuIFxcdFxcdFxcdGNoYW5nZSA9IEtWTV9NUl9GTEFHU19PTkxZO1xcbi1cXHRcXHRlbHNlIC8qIE5vdGhpbmcgdG8gY2hhbmdlLiAqL1xcbitcXHRcXHR9IGVsc2UgaWYgKG1lbS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBLVk1fTUVNX0dVRVNUX01FTUZEKSB7XFxuK1xcdFxcdFxcdHJldHVybiBrdm1fZ21lbV9jaGVja19ub19jaGFuZ2Uoa3ZtLCBvbGQsIG1lbS1cXHUwMDNlZ3Vlc3RfbWVtZmQsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdG1lbS1cXHUwMDNlZ3Vlc3RfbWVtZmRfb2Zmc2V0KTtcXG4rXFx0XFx0fSBlbHNlIHtcXG4gXFx0XFx0XFx0cmV0dXJuIDA7XFxuK1xcdFxcdH1cXG4gXFx0fVxcbiBcXG4rXFx0aWYgKG1lbS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBLVk1fTUVNX0dVRVNUX01FTUZEIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBjaGFuZ2UgIT0gS1ZNX01SX0NSRUFURSBcXHUwMDI2XFx1MDAyNiBjaGFuZ2UgIT0gS1ZNX01SX0ZMQUdTX09OTFkpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4gXFx0aWYgKChjaGFuZ2UgPT0gS1ZNX01SX0NSRUFURSB8fCBjaGFuZ2UgPT0gS1ZNX01SX01PVkUpIFxcdTAwMjZcXHUwMDI2XFxuIFxcdCAgICBrdm1fY2hlY2tfbWVtc2xvdF9vdmVybGFwKHNsb3RzLCBpZCwgYmFzZV9nZm4sIGJhc2VfZ2ZuICsgbnBhZ2VzKSlcXG4gXFx0XFx0cmV0dXJuIC1FRVhJU1Q7XFxuQEAgLTIxMDUsNyArMjEwMCwxMiBAQCBzdGF0aWMgaW50IGt2bV9zZXRfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sXFxuIFxcdG5ldy1cXHUwMDNlZmxhZ3MgPSBtZW0tXFx1MDAzZWZsYWdzO1xcbiBcXHRuZXctXFx1MDAzZXVzZXJzcGFjZV9hZGRyID0gbWVtLVxcdTAwM2V1c2Vyc3BhY2VfYWRkcjtcXG4gXFx0aWYgKG1lbS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBLVk1fTUVNX0dVRVNUX01FTUZEKSB7XFxuLVxcdFxcdHIgPSBrdm1fZ21lbV9iaW5kKGt2bSwgbmV3LCBtZW0tXFx1MDAzZWd1ZXN0X21lbWZkLCBtZW0tXFx1MDAzZWd1ZXN0X21lbWZkX29mZnNldCk7XFxuK1xcdFxcdGlmIChjaGFuZ2UgPT0gS1ZNX01SX0NSRUFURSkge1xcbitcXHRcXHRcXHRyID0ga3ZtX2dtZW1fYmluZChrdm0sIG5ldywgbWVtLVxcdTAwM2VndWVzdF9tZW1mZCwgbWVtLVxcdTAwM2VndWVzdF9tZW1mZF9vZmZzZXQpO1xcbitcXHRcXHR9IGVsc2UgaWYgKGNoYW5nZSA9PSBLVk1fTVJfRkxBR1NfT05MWSkge1xcbitcXHRcXHRcXHRyID0ga3ZtX2dtZW1fY2hhbmdlX2ZsYWdzKGt2bSwgb2xkLCBuZXcsIG1lbS1cXHUwMDNlZ3Vlc3RfbWVtZmQsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgbWVtLVxcdTAwM2VndWVzdF9tZW1mZF9vZmZzZXQpO1xcbitcXHRcXHR9XFxuIFxcdFxcdGlmIChyKVxcbiBcXHRcXHRcXHRnb3RvIG91dDtcXG4gXFx0fVxcbkBAIC0yMTE3LDcgKzIxMTcsNyBAQCBzdGF0aWMgaW50IGt2bV9zZXRfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sXFxuIFxcdHJldHVybiAwO1xcbiBcXG4gb3V0X3VuYmluZDpcXG4tXFx0aWYgKG1lbS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBLVk1fTUVNX0dVRVNUX01FTUZEKVxcbitcXHRpZiAoKG1lbS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBLVk1fTUVNX0dVRVNUX01FTUZEKSBcXHUwMDI2XFx1MDAyNiBjaGFuZ2UgPT0gS1ZNX01SX0NSRUFURSlcXG4gXFx0XFx0a3ZtX2dtZW1fdW5iaW5kKG5ldyk7XFxuIG91dDpcXG4gXFx0a2ZyZWUobmV3KTtcXG5kaWZmIC0tZ2l0IGEvdmlydC9rdm0va3ZtX21tLmggYi92aXJ0L2t2bS9rdm1fbW0uaFxcbmluZGV4IDc1MTBjYTkxNWRkMWFhLi5jNThkZmViMGYzZGY1NSAxMDA2NDRcXG4tLS0gYS92aXJ0L2t2bS9rdm1fbW0uaFxcbisrKyBiL3ZpcnQva3ZtL2t2bV9tbS5oXFxuQEAgLTc3LDYgKzc3LDkgQEAgaW50IGt2bV9nbWVtX2NyZWF0ZShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fY3JlYXRlX2d1ZXN0X21lbWZkICphcmdzKTtcXG4gaW50IGt2bV9nbWVtX2JpbmQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LFxcbiBcXHRcXHQgIHVuc2lnbmVkIGludCBmZCwgdW9mZl90IG9mZnNldCk7XFxuIHZvaWQga3ZtX2dtZW1fdW5iaW5kKHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QpO1xcbitpbnQga3ZtX2dtZW1fY2hhbmdlX2ZsYWdzKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqb2xkLFxcbitcXHRcXHRcXHQgIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm5ldywgdW5zaWduZWQgaW50IGZkLFxcbitcXHRcXHRcXHQgIGxvZmZfdCBvZmZzZXQpO1xcbiAjZWxzZVxcbiBzdGF0aWMgaW5saW5lIGludCBrdm1fZ21lbV9pbml0KHN0cnVjdCBtb2R1bGUgKm1vZHVsZSlcXG4ge1xcbkBAIC05NSw2ICs5OCwxNCBAQCBzdGF0aWMgaW5saW5lIHZvaWQga3ZtX2dtZW1fdW5iaW5kKHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QpXFxuIHtcXG4gXFx0V0FSTl9PTl9PTkNFKDEpO1xcbiB9XFxuK3N0YXRpYyBpbmxpbmUgaW50IGt2bV9nbWVtX2NoYW5nZV9mbGFncyhzdHJ1Y3Qga3ZtICprdm0sXFxuK1xcdFxcdFxcdFxcdFxcdHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm9sZCxcXG4rXFx0XFx0XFx0XFx0XFx0c3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbmV3LFxcbitcXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgZmQsIGxvZmZfdCBvZmZzZXQpXFxuK3tcXG4rXFx0V0FSTl9PTl9PTkNFKDEpO1xcbitcXHRyZXR1cm4gLUVJTztcXG4rfVxcbiAjZW5kaWYgLyogQ09ORklHX0tWTV9HVUVTVF9NRU1GRCAqL1xcbiBcXG4gI2VuZGlmIC8qIF9fS1ZNX01NX0hfXyAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxNzoyNjo1NS4yNzcxMTc3ODRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyODcwNjYwMzAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV9nbWVtX2NoYW5nZV9mbGFnc1wiLFxuICAgIFwia3ZtX2dtZW1fY2hlY2tfbm9fY2hhbmdlXCIsXG4gICAgXCJfX2t2bV9nbWVtX2ludmFsaWRhdGVfc3RhcnRcIixcbiAgICBcIl9fa3ZtX2dtZW1faW52YWxpZGF0ZV9lbmRcIixcbiAgICBcImt2bV9nbWVtX2Vycm9yX2ZvbGlvXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBzdXBwb3J0IGZvciBkaXJ0eSBwYWdlIGxvZ2dpbmcgZm9yIGBndWVzdF9tZW1mZGAgYmFja2VkIG1lbXNsb3RzIGluIEtWTS4gSXQgbW9kaWZpZXMgdGhlIEtWTSBtZW1vcnkgcmVnaW9uIGNvbmZpZ3VyYXRpb24gbG9naWMgYW5kIHRoZSBpbnZhbGlkYXRpb24gcGF0aHMgZm9yIGd1ZXN0IG1lbW9yeS4gVGhlc2UgYXJlIGNvcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIEtWTSB0aGF0IGNhbiBiZSByZWFjaGVkIHZpYSBLVk0gaW9jdGxzIChlLmcuLCBgS1ZNX1NFVF9VU0VSX01FTU9SWV9SRUdJT04yYCkgYW5kIG1lbW9yeSBpbnZhbGlkYXRpb24gZXZlbnRzLCBtYWtpbmcgdGhlbSBoaWdobHkgcmVsZXZhbnQgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMWYzYzdhYzU1NzE3ODk5YzRjOTFhYzQ5ZmRlMzY0ODg1ZDg4ZWU2OVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDIgMTc6MjY6NTMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QgYi9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3RcbmluZGV4IGE1ZjllZTkyZjQzZThkLi41MDEyYWZlNmE5YjU1OSAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdFxuKysrIGIvRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0XG5AQCAtOTQ5Myw2ICs5NDkzLDE1IEBAIHRha2UgY2FyZSB0byBkaWZmZXJlbnRpYXRlIGJldHdlZW4gdGhlc2UgY2FzZXMuXG4gVGhlIHByZXNlbmNlIG9mIHRoaXMgY2FwYWJpbGl0eSBpbmRpY2F0ZXMgdGhhdCB0aGUgbmVzdGVkIEtWTSBndWVzdCBjYW5cbiBzdGFydCBpbiBFU0EgbW9kZS5cbiBcbis4LjQ4IEtWTV9DQVBfR1VFU1RfTUVNRkRfTU1BUF9MT0dfRElSVFlfUEFHRVNcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbitcbis6QXJjaGl0ZWN0dXJlczogYWxsXG4rXG4rVGhlIHByZXNlbmNlIG9mIHRoaXMgY2FwYWJpbGl0eSBpbmRpY2F0ZXMgdGhhdCBtZW1zbG90cyBiYWNrZWQgYnkgYSBndWVzdF9tZW1mZFxuK2ZpbGUgZGVzY3JpcHRvciBjcmVhdGVkIHdpdGggdGhlIEdVRVNUX01FTUZEX0ZMQUdfTU1BUCBmbGFnIGNhbiBoYXZlIGRpcnR5XG4rcGFnZSBsb2dnaW5nIGVuYWJsZWQuXG4rXG4gOS4gS25vd24gS1ZNIEFQSSBwcm9ibGVtc1xuID09PT09PT09PT09PT09PT09PT09PT09PT1cbiBcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9hcm0uYyBiL2FyY2gvYXJtNjQva3ZtL2FybS5jXG5pbmRleCA1MGFkZmZmNzViZTgyZS4uZTkyZTVkN2I1MzNhZGEgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2t2bS9hcm0uY1xuKysrIGIvYXJjaC9hcm02NC9rdm0vYXJtLmNcbkBAIC0zOTMsNiArMzkzLDkgQEAgaW50IGt2bV92bV9pb2N0bF9jaGVja19leHRlbnNpb24oc3RydWN0IGt2bSAqa3ZtLCBsb25nIGV4dClcbiBcdGNhc2UgS1ZNX0NBUF9DT1VOVEVSX09GRlNFVDpcbiBcdGNhc2UgS1ZNX0NBUF9BUk1fV1JJVEFCTEVfSU1QX0lEX1JFR1M6XG4gXHRjYXNlIEtWTV9DQVBfQVJNX1NFQV9UT19VU0VSOlxuKyNpZmRlZiBDT05GSUdfS1ZNX0dVRVNUX01FTUZEXG4rXHRjYXNlIEtWTV9DQVBfR1VFU1RfTUVNRkRfTU1BUF9MT0dfRElSVFlfUEFHRVM6XG4rI2VuZGlmXG4gXHRcdHIgPSAxO1xuIFx0XHRicmVhaztcbiBcdGNhc2UgS1ZNX0NBUF9TRVRfR1VFU1RfREVCVUcyOlxuQEAgLTQ5Myw2ICs0OTYsMjUgQEAgaW50IGt2bV92bV9pb2N0bF9jaGVja19leHRlbnNpb24oc3RydWN0IGt2bSAqa3ZtLCBsb25nIGV4dClcbiBcdHJldHVybiByO1xuIH1cbiBcbisjaWZkZWYgQ09ORklHX0tWTV9HVUVTVF9NRU1GRFxuK2Jvb2wga3ZtX2FyY2hfc3VwcG9ydHNfZ21lbV9tbWFwX2RpcnR5X2xvZ2dpbmcoc3RydWN0IGt2bSAqa3ZtKVxuK3tcbitcdC8qXG4rXHQgKiBQcm90ZWN0ZWQgcEtWTSBWTXMgZG9uJ3QgYWxsb3cgZGlydHkgcGFnZSBsb2dnaW5nLCBmYWlsIGVhcmx5IGhlcmVcbitcdCAqIGluc3RlYWQgb2YgaW4ga3ZtX2FyY2hfcHJlcGFyZV9tZW1vcnlfcmVnaW9uKCkuXG4rXHQgKlxuK1x0ICogS1ZNX0NBUF9HVUVTVF9NRU1GRF9NTUFQX0xPR19ESVJUWV9QQUdFUyBpcyBub3QgYXZhaWxhYmxlIGZvciBhXG4rXHQgKiBwcm90ZWN0ZWQgcEtWTSBWTSwgYW5kIHJldHVybmluZyBmYWxzZSBtZWFucyB0aGF0XG4rXHQgKiBLVk1fU0VUX1VTRVJfTUVNT1JZX1JFR0lPTjIgZmFpbHMgd2l0aCBFSU5WQUwsIHdoaWNoIGlzIGNvbnNpc3RlbnRcbitcdCAqIHdpdGggdW5zdXBwb3J0ZWQgbWVtc2xvdCBmbGFncy5cbitcdCAqL1xuK1x0aWYgKCFpc19wcm90ZWN0ZWRfa3ZtX2VuYWJsZWQoKSlcbitcdFx0cmV0dXJuIHRydWU7XG4rXG4rXHRyZXR1cm4ga3ZtX3Brdm1fZXh0X2FsbG93ZWQoa3ZtLCBLVk1fQ0FQX0dVRVNUX01FTUZEX01NQVBfTE9HX0RJUlRZX1BBR0VTKTtcbit9XG4rI2VuZGlmXG4rXG4gbG9uZyBrdm1fYXJjaF9kZXZfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsXG4gXHRcdFx0dW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZylcbiB7XG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vbW11LmMgYi9hcmNoL2FybTY0L2t2bS9tbXUuY1xuaW5kZXggNmM5NDFhYWExMGM2MzkuLmY2ZTZkZTE1M2NlMjUzIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9rdm0vbW11LmNcbisrKyBiL2FyY2gvYXJtNjQva3ZtL21tdS5jXG5AQCAtMTY0OCw3ICsxNjQ4LDggQEAgc3RhdGljIGludCBnbWVtX2Fib3J0KGNvbnN0IHN0cnVjdCBrdm1fczJfZmF1bHRfZGVzYyAqczJmZClcbiBcdFx0cmV0dXJuIHJldDtcbiBcdH1cbiBcbi1cdGlmICghKHMyZmQtXHUwMDNlbWVtc2xvdC1cdTAwM2VmbGFncyBcdTAwMjYgS1ZNX01FTV9SRUFET05MWSkpXG4rXHRpZiAoIShzMmZkLVx1MDAzZW1lbXNsb3QtXHUwMDNlZmxhZ3MgXHUwMDI2IEtWTV9NRU1fUkVBRE9OTFkpIFx1MDAyNlx1MDAyNlxuK1x0ICAgICgha3ZtX3Nsb3RfZGlydHlfdHJhY2tfZW5hYmxlZChzMmZkLVx1MDAzZW1lbXNsb3QpIHx8IHdyaXRlX2ZhdWx0KSlcbiBcdFx0cHJvdCB8PSBLVk1fUEdUQUJMRV9QUk9UX1c7XG4gXG4gXHRpZiAoczJmZC1cdTAwM2VuZXN0ZWQpXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oIGIvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oXG5pbmRleCBhYjhjZmFlYzgyZDMxZS4uYzQ0ZTkyNTNlYjQwMGEgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhcbisrKyBiL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaFxuQEAgLTU2LDYgKzU2LDcgQEBcbiAgKi9cbiAjZGVmaW5lIEtWTV9NRU1TTE9UX0lOVkFMSURcdFx0XHQoMVVMIFx1MDAzY1x1MDAzYyAxNilcbiAjZGVmaW5lIEtWTV9NRU1TTE9UX0dNRU1fT05MWVx0XHRcdCgxVUwgXHUwMDNjXHUwMDNjIDE3KVxuKyNkZWZpbmUgTUVNU0xPVF9VU0VSX0ZMQUdTX01BU0tcdFx0XHQweGZmZmZcbiBcbiAvKlxuICAqIEJpdCA2MyBvZiB0aGUgbWVtc2xvdCBnZW5lcmF0aW9uIG51bWJlciBpcyBhbiBcInVwZGF0ZSBpbi1wcm9ncmVzcyBmbGFnXCIsXG5AQCAtNzMxLDYgKzczMiw5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBrdm1fYXJjaF9oYXNfcHJpdmF0ZV9tZW0oc3RydWN0IGt2bSAqa3ZtKVxuIFxuICNpZmRlZiBDT05GSUdfS1ZNX0dVRVNUX01FTUZEXG4gYm9vbCBrdm1fYXJjaF9zdXBwb3J0c19nbWVtX2luaXRfc2hhcmVkKHN0cnVjdCBrdm0gKmt2bSk7XG4rYm9vbCBrdm1fYXJjaF9zdXBwb3J0c19nbWVtX21tYXBfZGlydHlfbG9nZ2luZyhzdHJ1Y3Qga3ZtICprdm0pO1xuK2ludCBrdm1fZ21lbV9jaGVja19ub19jaGFuZ2Uoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LFxuK1x0XHRcdCAgICAgdW5zaWduZWQgaW50IGZkLCBsb2ZmX3Qgb2Zmc2V0KTtcbiBcbiBzdGF0aWMgaW5saW5lIHU2NCBrdm1fZ21lbV9nZXRfc3VwcG9ydGVkX2ZsYWdzKHN0cnVjdCBrdm0gKmt2bSlcbiB7XG5AQCAtNzQxLDYgKzc0NSwxNyBAQCBzdGF0aWMgaW5saW5lIHU2NCBrdm1fZ21lbV9nZXRfc3VwcG9ydGVkX2ZsYWdzKHN0cnVjdCBrdm0gKmt2bSlcbiBcbiBcdHJldHVybiBmbGFncztcbiB9XG4rI2Vsc2VcbitzdGF0aWMgaW5saW5lIGJvb2wga3ZtX2FyY2hfc3VwcG9ydHNfZ21lbV9tbWFwX2RpcnR5X2xvZ2dpbmcoc3RydWN0IGt2bSAqa3ZtKVxuK3tcbitcdHJldHVybiBmYWxzZTtcbit9XG4rc3RhdGljIGlubGluZSBpbnQga3ZtX2dtZW1fY2hlY2tfbm9fY2hhbmdlKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCxcbitcdFx0XHRcdFx0ICAgdW5zaWduZWQgaW50IGZkLCBsb2ZmX3Qgb2Zmc2V0KVxuK3tcbitcdFdBUk5fT05fT05DRSgxKTtcbitcdHJldHVybiAtRUlPO1xuK31cbiAjZW5kaWZcbiBcbiAjaWZuZGVmIGt2bV9hcmNoX2hhc19yZWFkb25seV9tZW1cbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgva3ZtLmggYi9pbmNsdWRlL3VhcGkvbGludXgva3ZtLmhcbmluZGV4IDQxOTAxMTA5N2ZhOGUyLi41YTUzZTJlMTliMmZiMiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaFxuKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oXG5AQCAtOTk3LDYgKzk5Nyw3IEBAIHN0cnVjdCBrdm1fZW5hYmxlX2NhcCB7XG4gI2RlZmluZSBLVk1fQ0FQX1MzOTBfS0VZT1AgMjQ3XG4gI2RlZmluZSBLVk1fQ0FQX1MzOTBfVlNJRV9FU0FNT0RFIDI0OFxuICNkZWZpbmUgS1ZNX0NBUF9TMzkwX0hQQUdFXzJHIDI0OVxuKyNkZWZpbmUgS1ZNX0NBUF9HVUVTVF9NRU1GRF9NTUFQX0xPR19ESVJUWV9QQUdFUyAyNTBcbiBcbiBzdHJ1Y3Qga3ZtX2lycV9yb3V0aW5nX2lycWNoaXAge1xuIFx0X191MzIgaXJxY2hpcDtcbmRpZmYgLS1naXQgYS92aXJ0L2t2bS9ndWVzdF9tZW1mZC5jIGIvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuY1xuaW5kZXggZGI1N2M1NzY2YWI2MDQuLjIxMGJkZDc2ZjBhYWQ3IDEwMDY0NFxuLS0tIGEvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuY1xuKysrIGIvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuY1xuQEAgLTI1LDYgKzI1LDcgQEAgc3RydWN0IGdtZW1fZmlsZSB7XG4gXHRzdHJ1Y3Qga3ZtICprdm07XG4gXHRzdHJ1Y3QgeGFycmF5IGJpbmRpbmdzO1xuIFx0c3RydWN0IGxpc3RfaGVhZCBlbnRyeTtcbitcdGJvb2wgZm91bmRfbWVtc2xvdDtcdC8qIFVzZWQgZm9yIGJhbGFuY2luZyBpbnZhbGlkYXRpb25zIHdoZW4gcHVuY2hpbmcgYSBob2xlICovXG4gfTtcbiBcbiBzdHJ1Y3QgZ21lbV9pbm9kZSB7XG5AQCAtNDMsNiArNDQsMjkgQEAgc3RhdGljIF9fYWx3YXlzX2lubGluZSBzdHJ1Y3QgZ21lbV9pbm9kZSAqR01FTV9JKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4gI2RlZmluZSBrdm1fZ21lbV9mb3JfZWFjaF9maWxlKGYsIGlub2RlKSBcXFxuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeShmLCBcdTAwMjZHTUVNX0koaW5vZGUpLVx1MDAzZWdtZW1fZmlsZV9saXN0LCBlbnRyeSlcbiBcbitzdGF0aWMgdm9pZCAqbWVtc2xvdF90b194YV92YWx1ZShzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90KVxuK3tcbitcdFdBUk5fT05fT05DRShzaXplb2Yoc2xvdC1cdTAwM2Vhc19pZCkgXHUwMDNlIDE2KTtcbitcdFdBUk5fT05fT05DRShzaXplb2Yoc2xvdC1cdTAwM2VpZCkgXHUwMDNlIDE2KTtcbitcdFdBUk5fT05fT05DRShzaXplb2Yoc2xvdC1cdTAwM2Vhc19pZCkgKyBzaXplb2Yoc2xvdC1cdTAwM2VpZCkgXHUwMDNlIHNpemVvZih1bnNpZ25lZCBsb25nKSk7XG4rXG4rXHRyZXR1cm4geGFfbWtfdmFsdWUoKCh1bnNpZ25lZCBsb25nKXNsb3QtXHUwMDNlYXNfaWQpIFx1MDAzY1x1MDAzYyAxNiB8ICh1bnNpZ25lZCBsb25nKXNsb3QtXHUwMDNlaWQpO1xuK31cbitcbitzdGF0aWMgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqeGFfdmFsdWVfdG9fbWVtc2xvdChzdHJ1Y3Qga3ZtICprdm0sIGNvbnN0IHZvaWQgKmVudHJ5KVxuK3tcbitcdHVuc2lnbmVkIGxvbmcgZnVsbF9pZCA9IHhhX3RvX3ZhbHVlKGVudHJ5KTtcbitcdHUxNiBhc19pZCA9IChmdWxsX2lkIFx1MDAzZVx1MDAzZSAxNikgXHUwMDI2IFUxNl9NQVg7XG4rXHRzaG9ydCBpZCA9IGZ1bGxfaWQgXHUwMDI2IFUxNl9NQVg7XG4rXG4rXHQvKlxuK1x0ICogRG8gbm90IGlnbm9yZSBLVk1fTUVNU0xPVF9JTlZBTElEIG1lbXNsb3RzLCBhcyB3ZSB3YW50XG4rXHQgKiAtXHUwMDNlZXJyb3JfcmVtb3ZlX2ZvbGlvKCksIHdoZW4gaXQgcmFjZXMgd2l0aCBtZW1zbG90IGRlbGV0aW9uLCB0byBoYXZlXG4rXHQgKiAgdW5tYXBwZWQgdGhlIG1lbW9yeSB1cG9uIGNvbXBsZXRpb24uXG4rXHQgKi9cbitcdHJldHVybiBpZF90b19tZW1zbG90KF9fa3ZtX21lbXNsb3RzKGt2bSwgYXNfaWQpLCBpZCk7XG4rfVxuK1xuIC8qKlxuICAqIGZvbGlvX2ZpbGVfcGZuIC0gbGlrZSBmb2xpb19maWxlX3BhZ2UsIGJ1dCByZXR1cm4gYSBwZm4uXG4gICogQGZvbGlvOiBUaGUgZm9saW8gd2hpY2ggY29udGFpbnMgdGhpcyBpbmRleC5cbkBAIC0xNTcsNyArMTgxLDcgQEAgc3RhdGljIGVudW0ga3ZtX2dmbl9yYW5nZV9maWx0ZXIga3ZtX2dtZW1fZ2V0X2ludmFsaWRhdGVfZmlsdGVyKHN0cnVjdCBpbm9kZSAqaW5cbiBcdHJldHVybiBLVk1fRklMVEVSX1BSSVZBVEU7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIF9fa3ZtX2dtZW1faW52YWxpZGF0ZV9zdGFydChzdHJ1Y3QgZ21lbV9maWxlICpmLCBwZ29mZl90IHN0YXJ0LFxuK3N0YXRpYyBib29sIF9fa3ZtX2dtZW1faW52YWxpZGF0ZV9zdGFydChzdHJ1Y3QgZ21lbV9maWxlICpmLCBwZ29mZl90IHN0YXJ0LFxuIFx0XHRcdFx0XHRwZ29mZl90IGVuZCxcbiBcdFx0XHRcdFx0ZW51bSBrdm1fZ2ZuX3JhbmdlX2ZpbHRlciBhdHRyX2ZpbHRlcilcbiB7XG5AQCAtMTY1LDkgKzE4OSwxNSBAQCBzdGF0aWMgdm9pZCBfX2t2bV9nbWVtX2ludmFsaWRhdGVfc3RhcnQoc3RydWN0IGdtZW1fZmlsZSAqZiwgcGdvZmZfdCBzdGFydCxcbiBcdHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3Q7XG4gXHRzdHJ1Y3Qga3ZtICprdm0gPSBmLVx1MDAzZWt2bTtcbiBcdHVuc2lnbmVkIGxvbmcgaW5kZXg7XG4rXHR2b2lkICplbnRyeTtcbiBcbi1cdHhhX2Zvcl9lYWNoX3JhbmdlKFx1MDAyNmYtXHUwMDNlYmluZGluZ3MsIGluZGV4LCBzbG90LCBzdGFydCwgZW5kIC0gMSkge1xuLVx0XHRwZ29mZl90IHBnb2ZmID0gc2xvdC1cdTAwM2VnbWVtLnBnb2ZmO1xuK1x0eGFfZm9yX2VhY2hfcmFuZ2UoXHUwMDI2Zi1cdTAwM2ViaW5kaW5ncywgaW5kZXgsIGVudHJ5LCBzdGFydCwgZW5kIC0gMSkge1xuK1x0XHRwZ29mZl90IHBnb2ZmO1xuK1xuK1x0XHRzbG90ID0geGFfdmFsdWVfdG9fbWVtc2xvdChrdm0sIGVudHJ5KTtcbitcdFx0aWYgKCFzbG90KVxuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHRwZ29mZiA9IHNsb3QtXHUwMDNlZ21lbS5wZ29mZjtcbiBcbiBcdFx0c3RydWN0IGt2bV9nZm5fcmFuZ2UgZ2ZuX3JhbmdlID0ge1xuIFx0XHRcdC5zdGFydCA9IHNsb3QtXHUwMDNlYmFzZV9nZm4gKyBtYXgocGdvZmYsIHN0YXJ0KSAtIHBnb2ZmLFxuQEAgLTE5Miw2ICsyMjIsOCBAQCBzdGF0aWMgdm9pZCBfX2t2bV9nbWVtX2ludmFsaWRhdGVfc3RhcnQoc3RydWN0IGdtZW1fZmlsZSAqZiwgcGdvZmZfdCBzdGFydCxcbiBcbiBcdGlmIChmb3VuZF9tZW1zbG90KVxuIFx0XHRLVk1fTU1VX1VOTE9DSyhrdm0pO1xuK1xuK1x0cmV0dXJuIGZvdW5kX21lbXNsb3Q7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGt2bV9nbWVtX2ludmFsaWRhdGVfc3RhcnQoc3RydWN0IGlub2RlICppbm9kZSwgcGdvZmZfdCBzdGFydCxcbkBAIC0xOTksMTEgKzIzMSwyMiBAQCBzdGF0aWMgdm9pZCBrdm1fZ21lbV9pbnZhbGlkYXRlX3N0YXJ0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHBnb2ZmX3Qgc3RhcnQsXG4ge1xuIFx0ZW51bSBrdm1fZ2ZuX3JhbmdlX2ZpbHRlciBhdHRyX2ZpbHRlcjtcbiBcdHN0cnVjdCBnbWVtX2ZpbGUgKmY7XG4rXHRzdHJ1Y3Qga3ZtICprdm07XG4rXHRpbnQgaWR4O1xuIFxuIFx0YXR0cl9maWx0ZXIgPSBrdm1fZ21lbV9nZXRfaW52YWxpZGF0ZV9maWx0ZXIoaW5vZGUpO1xuIFxuLVx0a3ZtX2dtZW1fZm9yX2VhY2hfZmlsZShmLCBpbm9kZSlcbi1cdFx0X19rdm1fZ21lbV9pbnZhbGlkYXRlX3N0YXJ0KGYsIHN0YXJ0LCBlbmQsIGF0dHJfZmlsdGVyKTtcbitcdGt2bV9nbWVtX2Zvcl9lYWNoX2ZpbGUoZiwgaW5vZGUpIHtcbitcdFx0a3ZtID0gZi1cdTAwM2Vrdm07XG4rXHRcdGlkeCA9IHNyY3VfcmVhZF9sb2NrKFx1MDAyNmt2bS1cdTAwM2VzcmN1KTtcbitcdFx0LypcbitcdFx0ICogVGhpcyBpcyBzYWZlIHRvIGRvIGJlY2F1c2UgY2FsbHMgdG9cbitcdFx0ICoga3ZtX2dtZW1faW52YWxpZGF0ZV9zdGFydCgpIGFyZSBzZXJpYWxpemVkIGJ5XG4rXHRcdCAqIGZpbGVtYXBfaW52YWxpZGF0ZV9sb2NrKCkuXG4rXHRcdCAqL1xuK1x0XHRmLVx1MDAzZWZvdW5kX21lbXNsb3QgPSBfX2t2bV9nbWVtX2ludmFsaWRhdGVfc3RhcnQoZiwgc3RhcnQsIGVuZCwgYXR0cl9maWx0ZXIpO1xuK1x0XHRzcmN1X3JlYWRfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2VzcmN1LCBpZHgpO1xuK1x0fVxuIH1cbiBcbiBzdGF0aWMgdm9pZCBfX2t2bV9nbWVtX2ludmFsaWRhdGVfZW5kKHN0cnVjdCBnbWVtX2ZpbGUgKmYsIHBnb2ZmX3Qgc3RhcnQsXG5AQCAtMjIzLDggKzI2NiwxMSBAQCBzdGF0aWMgdm9pZCBrdm1fZ21lbV9pbnZhbGlkYXRlX2VuZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IHN0YXJ0LFxuIHtcbiBcdHN0cnVjdCBnbWVtX2ZpbGUgKmY7XG4gXG4tXHRrdm1fZ21lbV9mb3JfZWFjaF9maWxlKGYsIGlub2RlKVxuK1x0a3ZtX2dtZW1fZm9yX2VhY2hfZmlsZShmLCBpbm9kZSkge1xuK1x0XHRpZiAoIWYtXHUwMDNlZm91bmRfbWVtc2xvdClcbitcdFx0XHRjb250aW51ZTtcbiBcdFx0X19rdm1fZ21lbV9pbnZhbGlkYXRlX2VuZChmLCBzdGFydCwgZW5kKTtcbitcdH1cbiB9XG4gXG4gc3RhdGljIGxvbmcga3ZtX2dtZW1fcHVuY2hfaG9sZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuKVxuQEAgLTMyNiw2ICszNzIsNyBAQCBzdGF0aWMgaW50IGt2bV9nbWVtX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG4gXHRzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90O1xuIFx0c3RydWN0IGt2bSAqa3ZtID0gZi1cdTAwM2Vrdm07XG4gXHR1bnNpZ25lZCBsb25nIGluZGV4O1xuK1x0dm9pZCAqZW50cnk7XG4gXG4gXHQvKlxuIFx0ICogUHJldmVudCBjb25jdXJyZW50IGF0dGVtcHRzIHRvICp1bmJpbmQqIGEgbWVtc2xvdC4gIFRoaXMgaXMgdGhlIGxhc3RcbkBAIC0zNDQsMTcgKzM5MSwxOCBAQCBzdGF0aWMgaW50IGt2bV9nbWVtX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG4gXG4gXHRmaWxlbWFwX2ludmFsaWRhdGVfbG9jayhpbm9kZS1cdTAwM2VpX21hcHBpbmcpO1xuIFxuLVx0eGFfZm9yX2VhY2goXHUwMDI2Zi1cdTAwM2ViaW5kaW5ncywgaW5kZXgsIHNsb3QpXG4rXHR4YV9mb3JfZWFjaChcdTAwMjZmLVx1MDAzZWJpbmRpbmdzLCBpbmRleCwgZW50cnkpIHtcbitcdFx0c2xvdCA9IHhhX3ZhbHVlX3RvX21lbXNsb3Qoa3ZtLCBlbnRyeSk7XG4gXHRcdFdSSVRFX09OQ0Uoc2xvdC1cdTAwM2VnbWVtLmZpbGUsIE5VTEwpO1xuK1x0fVxuIFxuIFx0LypcbiBcdCAqIEFsbCBpbi1mbGlnaHQgb3BlcmF0aW9ucyBhcmUgZ29uZSBhbmQgbmV3IGJpbmRpbmdzIGNhbiBiZSBjcmVhdGVkLlxuIFx0ICogWmFwIGFsbCBTUFRFcyBwb2ludGVkIGF0IGJ5IHRoaXMgZmlsZS4gIERvIG5vdCBmcmVlIHRoZSBiYWNraW5nXG4gXHQgKiBtZW1vcnksIGFzIGl0cyBsaWZldGltZSBpcyBhc3NvY2lhdGVkIHdpdGggdGhlIGlub2RlLCBub3QgdGhlIGZpbGUuXG4gXHQgKi9cbi1cdF9fa3ZtX2dtZW1faW52YWxpZGF0ZV9zdGFydChmLCAwLCAtMXVsLFxuLVx0XHRcdFx0ICAgIGt2bV9nbWVtX2dldF9pbnZhbGlkYXRlX2ZpbHRlcihpbm9kZSkpO1xuLVx0X19rdm1fZ21lbV9pbnZhbGlkYXRlX2VuZChmLCAwLCAtMXVsKTtcbitcdGlmIChfX2t2bV9nbWVtX2ludmFsaWRhdGVfc3RhcnQoZiwgMCwgLTF1bCwga3ZtX2dtZW1fZ2V0X2ludmFsaWRhdGVfZmlsdGVyKGlub2RlKSkpXG4rXHRcdF9fa3ZtX2dtZW1faW52YWxpZGF0ZV9lbmQoZiwgMCwgLTF1bCk7XG4gXG4gXHRsaXN0X2RlbChcdTAwMjZmLVx1MDAzZWVudHJ5KTtcbiBcbkBAIC00OTgsMTQgKzU0NiwyMCBAQCBzdGF0aWMgaW50IGt2bV9nbWVtX21pZ3JhdGVfZm9saW8oc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4gXG4gc3RhdGljIGludCBrdm1fZ21lbV9lcnJvcl9mb2xpbyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4rXHRlbnVtIGt2bV9nZm5fcmFuZ2VfZmlsdGVyIGF0dHJfZmlsdGVyO1xuK1x0c3RydWN0IGlub2RlICppbm9kZSA9IG1hcHBpbmctXHUwMDNlaG9zdDtcbitcdHN0cnVjdCBnbWVtX2ZpbGUgKmY7XG4gXHRwZ29mZl90IHN0YXJ0LCBlbmQ7XG4rXHRib29sIGZvdW5kX21lbXNsb3Q7XG4rXHRzdHJ1Y3Qga3ZtICprdm07XG4rXHRpbnQgaWR4O1xuIFxuIFx0ZmlsZW1hcF9pbnZhbGlkYXRlX2xvY2tfc2hhcmVkKG1hcHBpbmcpO1xuIFxuIFx0c3RhcnQgPSBmb2xpby1cdTAwM2VpbmRleDtcbiBcdGVuZCA9IHN0YXJ0ICsgZm9saW9fbnJfcGFnZXMoZm9saW8pO1xuIFxuLVx0a3ZtX2dtZW1faW52YWxpZGF0ZV9zdGFydChtYXBwaW5nLVx1MDAzZWhvc3QsIHN0YXJ0LCBlbmQpO1xuK1x0YXR0cl9maWx0ZXIgPSBrdm1fZ21lbV9nZXRfaW52YWxpZGF0ZV9maWx0ZXIoaW5vZGUpO1xuIFxuIFx0LypcbiBcdCAqIERvIG5vdCB0cnVuY2F0ZSB0aGUgcmFuZ2UsIHdoYXQgYWN0aW9uIGlzIHRha2VuIGluIHJlc3BvbnNlIHRvIHRoZVxuQEAgLTUxNSw4ICs1NjksMTkgQEAgc3RhdGljIGludCBrdm1fZ21lbV9lcnJvcl9mb2xpbyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xcbiBcdCAqIGF0IHdoaWNoIHBvaW50IEtWTSBjYW4gZWl0aGVyIHRlcm1pbmF0ZSB0aGUgVk0gb3IgcHJvcGFnYXRlIHRoZVxuIFx0ICogZXJyb3IgdG8gdXNlcnNwYWNlLlxuIFx0ICovXG4rXHRrdm1fZ21lbV9mb3JfZWFjaF9maWxlKGYsIGlub2RlKSB7XG4rXHRcdGt2bSA9IGYtXHUwMDNla3ZtO1xuIFxuLVx0a3ZtX2dtZW1faW52YWxpZGF0ZV9lbmQobWFwcGluZy1cdTAwM2Vob3N0LCBzdGFydCwgZW5kKTtcbitcdFx0aWR4ID0gc3JjdV9yZWFkX2xvY2soXHUwMDI2a3ZtLVx1MDAzZXNyY3UpO1xuK1x0XHRmb3VuZF9tZW1zbG90ID0gX19rdm1fZ21lbV9pbnZhbGlkYXRlX3N0YXJ0KGYsIHN0YXJ0LCBlbmQsIGF0dHJfZmlsdGVyKTtcbitcdFx0c3JjdV9yZWFkX3VubG9jayhcdTAwMjZrdm0tXHUwMDNlc3JjdSwgaWR4KTtcbitcbitcdFx0aWYgKGZvdW5kX21lbXNsb3QpIHtcbitcdFx0XHRLVk1fTU1VX0xPQ0soa3ZtKTtcbitcdFx0XHRrdm1fbW11X2ludmFsaWRhdGVfZW5kKGt2bSk7XG4rXHRcdFx0S1ZNX01NVV9VTkxPQ0soa3ZtKTtcbitcdFx0fVxuK1x0fVxuIFxuIFx0ZmlsZW1hcF9pbnZhbGlkYXRlX3VubG9ja19zaGFyZWQobWFwcGluZyk7XG4gXG5AQCAtNTU3LDYgKzYyMiwxMSBAQCBib29sIF9fd2VhayBrdm1fYXJjaF9zdXBwb3J0c19nbWVtX2luaXRfc2hhcmVkKHN0cnVjdCBrdm0gKmt2bSlcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbitib29sIF9fd2VhayBrdm1fYXJjaF9zdXBwb3J0c19nbWVtX21tYXBfZGlydHlfbG9nZ2luZyhzdHJ1Y3Qga3ZtICprdm0pXG4re1xuK1x0cmV0dXJuIGZhbHNlO1xuK31cbitcbiBzdGF0aWMgaW50IF9fa3ZtX2dtZW1fY3JlYXRlKHN0cnVjdCBrdm0gKmt2bSwgbG9mZl90IHNpemUsIHU2NCBmbGFncylcbiB7XG4gXHRzdGF0aWMgY29uc3QgY2hhciAqbmFtZSA9IFwiW2t2bS1nbWVtXVwiO1xuQEAgLTY0MCw2ICs3MTAsNjYgQEAgaW50IGt2bV9nbWVtX2NyZWF0ZShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fY3JlYXRlX2d1ZXN0X21lbWZkICphcmdzKVxuIFx0cmV0dXJuIF9fa3ZtX2dtZW1fY3JlYXRlKGt2bSwgc2l6ZSwgZmxhZ3MpO1xuIH1cbiBcbitzdGF0aWMgaW50IF9fa3ZtX2dtZW1fY2hlY2tfbm9fY2hhbmdlKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqb2xkLFxuK1x0XHRcdFx0ICAgICAgc3RydWN0IGZpbGUgKm9sZF9maWxlLCB1bnNpZ25lZCBpbnQgZmQsXG4rXHRcdFx0XHQgICAgICBsb2ZmX3Qgb2Zmc2V0KVxuK3tcbitcdHN0cnVjdCBmaWxlICpuZXdfZmlsZTtcbitcbitcdG5ld19maWxlID0gZmdldChmZCk7XG4rXHRpZiAoIW5ld19maWxlKVxuK1x0XHRyZXR1cm4gLUVCQURGO1xuK1x0aWYgKG5ld19maWxlICE9IG9sZF9maWxlKSB7XG4rXHRcdGZwdXQobmV3X2ZpbGUpO1xuK1x0XHRyZXR1cm4gLUVCQURGO1xuK1x0fVxuK1x0ZnB1dChuZXdfZmlsZSk7XG4rXG4rXHRpZiAob2xkLVx1MDAzZWdtZW0ucGdvZmYgIT0gb2Zmc2V0IFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitpbnQga3ZtX2dtZW1fY2hlY2tfbm9fY2hhbmdlKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqb2xkLFxuK1x0XHRcdCAgICAgdW5zaWduZWQgaW50IGZkLCBsb2ZmX3Qgb2Zmc2V0KVxuK3tcbitcdENMQVNTKGdtZW1fZ2V0X2ZpbGUsIG9sZF9maWxlKShvbGQpO1xuK1xuK1x0cmV0dXJuIF9fa3ZtX2dtZW1fY2hlY2tfbm9fY2hhbmdlKGt2bSwgb2xkLCBvbGRfZmlsZSwgZmQsIG9mZnNldCk7XG4rfVxuK1xuK2ludCBrdm1fZ21lbV9jaGFuZ2VfZmxhZ3Moc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpvbGQsXG4rXHRcdFx0ICBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpuZXcsIHVuc2lnbmVkIGludCBmZCxcbitcdFx0XHQgIGxvZmZfdCBvZmZzZXQpXG4re1xuK1x0c3RydWN0IGdtZW1fZmlsZSAqb2xkX2Y7XG4rXHRpbnQgcmV0O1xuK1xuK1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZrdm0tXHUwMDNlc2xvdHNfbG9jayk7XG4rXG4rXHRpZiAoIWt2bV9tZW1zbG90X2lzX2dtZW1fb25seShvbGQpKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdENMQVNTKGdtZW1fZ2V0X2ZpbGUsIG9sZF9maWxlKShvbGQpO1xuK1xuK1x0cmV0ID0gX19rdm1fZ21lbV9jaGVja19ub19jaGFuZ2Uoa3ZtLCBvbGQsIG9sZF9maWxlLCBmZCwgb2Zmc2V0KTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRvbGRfZiA9IG9sZF9maWxlLVx1MDAzZXByaXZhdGVfZGF0YTtcbitcdGlmICh4YV9sb2FkKFx1MDAyNm9sZF9mLVx1MDAzZWJpbmRpbmdzLCBvbGQtXHUwMDNlZ21lbS5wZ29mZikgIT0gbWVtc2xvdF90b194YV92YWx1ZShuZXcpKSB7XG4rXHRcdFdBUk5fT05fT05DRSh4YV90b192YWx1ZSh4YV9sb2FkKFx1MDAyNm9sZF9mLVx1MDAzZWJpbmRpbmdzLCBvbGQtXHUwMDNlZ21lbS5wZ29mZikpKTtcbitcdFx0cmV0dXJuIC1FSU87XG4rXHR9XG4rXG4rXHRuZXctXHUwMDNlZ21lbS5maWxlID0gb2xkLVx1MDAzZWdtZW0uZmlsZTtcbitcdG5ldy1cdTAwM2VnbWVtLnBnb2ZmID0gb2xkLVx1MDAzZWdtZW0ucGdvZmY7XG4rXHRuZXctXHUwMDNlZmxhZ3MgfD0gS1ZNX01FTVNMT1RfR01FTV9PTkxZO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIGludCBrdm1fZ21lbV9iaW5kKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCxcbiBcdFx0ICB1bnNpZ25lZCBpbnQgZmQsIHVvZmZfdCBvZmZzZXQpXG4ge1xuQEAgLTY2OSw2ICs3OTksMTEgQEAgaW50IGt2bV9nbWVtX2JpbmQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LFxuIFx0aWYgKCFQQUdFX0FMSUdORUQob2Zmc2V0KSB8fCBvZmZzZXQgKyBzaXplIFx1MDAzZSBpX3NpemVfcmVhZChpbm9kZSkpXG4gXHRcdGdvdG8gZXJyO1xuIFxuK1x0aWYgKHNsb3QtXHUwMDNlZmxhZ3MgXHUwMDI2IEtWTV9NRU1fTE9HX0RJUlRZX1BBR0VTIFx1MDAyNlx1MDAyNlxuK1x0ICAgICgha3ZtX2dtZW1fc3VwcG9ydHNfbW1hcChpbm9kZSkgfHxcbitcdCAgICAgIWt2bV9hcmNoX3N1cHBvcnRzX2dtZW1fbW1hcF9kaXJ0eV9sb2dnaW5nKGt2bSkpKVxuK1x0XHRnb3RvIGVycjtcbitcbiBcdGZpbGVtYXBfaW52YWxpZGF0ZV9sb2NrKGlub2RlLVx1MDAzZWlfbWFwcGluZyk7XG4gXG4gXHRzdGFydCA9IG9mZnNldCBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbkBAIC02OTEsNyArODI2LDcgQEAgaW50IGt2bV9nbWVtX2JpbmQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LFxuIFx0aWYgKGt2bV9nbWVtX3N1cHBvcnRzX21tYXAoaW5vZGUpKVxuIFx0XHRzbG90LVx1MDAzZWZsYWdzIHw9IEtWTV9NRU1TTE9UX0dNRU1fT05MWTtcbiBcbi1cdHhhX3N0b3JlX3JhbmdlKFx1MDAyNmYtXHUwMDNlYmluZGluZ3MsIHN0YXJ0LCBlbmQgLSAxLCBzbG90LCBHRlBfS0VSTkVMKTtcbitcdHhhX3N0b3JlX3JhbmdlKFx1MDAyNmYtXHUwMDNlYmluZGluZ3MsIHN0YXJ0LCBlbmQgLSAxLCBtZW1zbG90X3RvX3hhX3ZhbHVlKHNsb3QpLCBHRlBfS0VSTkVMKTtcbiBcdGZpbGVtYXBfaW52YWxpZGF0ZV91bmxvY2soaW5vZGUtXHUwMDNlaV9tYXBwaW5nKTtcbiBcbiBcdC8qXG5AQCAtNzY1LDggKzkwMCw4IEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKl9fa3ZtX2dtZW1fZ2V0X3BmbihzdHJ1Y3QgZmlsZSAqZmlsZSxcbiBcdFx0cmV0dXJuIEVSUl9QVFIoLUVGQVVMVCk7XG4gXHR9XG4gXG4tXHRpZiAoeGFfbG9hZChcdTAwMjZmLVx1MDAzZWJpbmRpbmdzLCBpbmRleCkgIT0gc2xvdCkge1xuLVx0XHRXQVJOX09OX09OQ0UoeGFfbG9hZChcdTAwMjZmLVx1MDAzZWJpbmRpbmdzLCBpbmRleCkpO1xuK1x0aWYgKHhhX2xvYWQoXHUwMDI2Zi1cdTAwM2ViaW5kaW5ncywgaW5kZXgpICE9IG1lbXNsb3RfdG9feGFfdmFsdWUoc2xvdCkpIHtcbitcdFx0V0FSTl9PTl9PTkNFKHhhX3RvX3ZhbHVlKHhhX2xvYWQoXHUwMDI2Zi1cdTAwM2ViaW5kaW5ncywgaW5kZXgpKSk7XG4gXHRcdHJldHVybiBFUlJfUFRSKC1FSU8pO1xuIFx0fVxuIFxuZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL2t2bV9tYWluLmMgYi92aXJ0L2t2bS9rdm1fbWFpbi5jXG5pbmRleCBlNDRjMjBjMDQ5NjEwZC4uYWYzODBlOGYyYjY4ZDQgMTAwNjQ0XG4tLS0gYS92aXJ0L2t2bS9rdm1fbWFpbi5jXG4rKysgYi92aXJ0L2t2bS9rdm1fbWFpbi5jXG5AQCAtMTU3MywxNCArMTU3MywxNCBAQCBzdGF0aWMgdm9pZCBrdm1fcmVwbGFjZV9tZW1zbG90KHN0cnVjdCBrdm0gKmt2bSxcbiBzdGF0aWMgaW50IGNoZWNrX21lbW9yeV9yZWdpb25fZmxhZ3Moc3RydWN0IGt2bSAqa3ZtLFxuIFx0XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3Qga3ZtX3VzZXJzcGFjZV9tZW1vcnlfcmVnaW9uMiAqbWVtKVxuIHtcbi1cdHUzMiB2YWxpZF9mbGFncyA9IEtWTV9NRU1fTE9HX0RJUlRZX1BBR0VTO1xuK1x0dTMyIHZhbGlkX2ZsYWdzID0gMDtcbiBcbiBcdGlmIChJU19FTkFCTEVEKENPTkZJR19LVk1fR1VFU1RfTUVNRkQpKVxuIFx0XHR2YWxpZF9mbGFncyB8PSBLVk1fTUVNX0dVRVNUX01FTUZEO1xuIFxuLVx0LyogRGlydHkgbG9nZ2luZyBwcml2YXRlIG1lbW9yeSBpcyBub3QgY3VycmVudGx5IHN1cHBvcnRlZC4gKi9cbi1cdGlmIChtZW0tXHUwMDNlZmxhZ3MgXHUwMDI2IEtWTV9NRU1fR1VFU1RfTUVNRkQpXG4tXHRcdHZhbGlkX2ZsYWdzIFx1MDAyNj0gfktWTV9NRU1fTE9HX0RJUlRZX1BBR0VTO1xuK1x0aWYgKCEobWVtLVx1MDAzZWZsYWdzIFx1MDAyNiBLVk1fTUVNX0dVRVNUX01FTUZEKSB8fFxuK1x0ICAgIGt2bV9hcmNoX3N1cHBvcnRzX2dtZW1fbW1hcF9kaXJ0eV9sb2dnaW5nKGt2bSkpXG4rXHRcdHZhbGlkX2ZsYWdzIHw9IEtWTV9NRU1fTE9HX0RJUlRZX1BBR0VTO1xuIFxuIFx0LypcbiBcdCAqIEdVRVNUX01FTUZEIGlzIGluY29tcGF0aWJsZSB3aXRoIHJlYWQtb25seSBtZW1zbG90cywgYXMgd3JpdGVzIHRvXG5AQCAtMTczOSwxNiArMTczOSw2IEBAIHN0YXRpYyB2b2lkIGt2bV9jb21taXRfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sXG4gXHRcdCAqL1xuIFx0XHRpZiAob2xkLVx1MDAzZWRpcnR5X2JpdG1hcCBcdTAwMjZcdTAwMjYgIW5ldy1cdTAwM2VkaXJ0eV9iaXRtYXApXG4gXHRcdFx0a3ZtX2Rlc3Ryb3lfZGlydHlfYml0bWFwKG9sZCk7XG4tXG4tXHRcdC8qXG4tXHRcdCAqIFVuYmluZCB0aGUgZ3Vlc3RfbWVtZmQgaW5zdGFuY2UgYXMgbmVlZGVkOyB0aGUgQG5ldyBzbG90IGhhc1xuLVx0XHQgKiBhbHJlYWR5IGNyZWF0ZWQgaXRzIG93biBiaW5kaW5nLiAgVE9ETzogRHJvcCB0aGUgV0FSTiB3aGVuXG4tXHRcdCAqIGRpcnR5IGxvZ2dpbmcgZ3Vlc3RfbWVtZmQgbWVtc2xvdHMgaXMgc3VwcG9ydGVkLiAgVW50aWwgdGhlbixcbi1cdFx0ICogZmxhZ3Mtb25seSBjaGFuZ2VzIG9uIGd1ZXN0X21lbWZkIHNsb3RzIHNob3VsZCBiZSBpbXBvc3NpYmxlLlxuLVx0XHQgKi9cbi1cdFx0aWYgKFdBUk5fT05fT05DRShvbGQtXHUwMDNlZmxhZ3MgXHUwMDI2IEtWTV9NRU1fR1VFU1RfTUVNRkQpKVxuLVx0XHRcdGt2bV9nbWVtX3VuYmluZChvbGQpO1xuLVxuIFx0XHQvKlxuIFx0XHQgKiBUaGUgZmluYWwgcXVpcmsuICBGcmVlIHRoZSBkZXRhY2hlZCwgb2xkIHNsb3QsIGJ1dCBvbmx5IGl0c1xuIFx0XHQgKiBtZW1vcnksIG5vdCBhbnkgbWV0YWRhdGEuICBNZXRhZGF0YSwgaW5jbHVkaW5nIGFyY2ggc3BlY2lmaWNcbkBAIC0yMDczLDIyICsyMDYzLDI3IEBAIHN0YXRpYyBpbnQga3ZtX3NldF9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSxcbiBcdFx0aWYgKChrdm0tXHUwMDNlbnJfbWVtc2xvdF9wYWdlcyArIG5wYWdlcykgXHUwMDNjIGt2bS1cdTAwM2Vucl9tZW1zbG90X3BhZ2VzKVxuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fSBlbHNlIHsgLyogTW9kaWZ5IGFuIGV4aXN0aW5nIHNsb3QuICovXG4tXHRcdC8qIFByaXZhdGUgbWVtc2xvdHMgYXJlIGltbXV0YWJsZSwgdGhleSBjYW4gb25seSBiZSBkZWxldGVkLiAqL1xuLVx0XHRpZiAobWVtLVx1MDAzZWZsYWdzIFx1MDAyNiBLVk1fTUVNX0dVRVNUX01FTUZEKVxuLVx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHRpZiAoKG1lbS1cdTAwM2V1c2Vyc3BhY2VfYWRkciAhPSBvbGQtXHUwMDNldXNlcnNwYWNlX2FkZHIpIHx8XG4gXHRcdCAgICAobnBhZ2VzICE9IG9sZC1cdTAwM2VucGFnZXMpIHx8XG4gXHRcdCAgICAoKG1lbS1cdTAwM2VmbGFncyBeIG9sZC1cdTAwM2VmbGFncykgXHUwMDI2IChLVk1fTUVNX1JFQURPTkxZIHwgS1ZNX01FTV9HVUVTVF9NRU1GRCkpKVxuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFxuLVx0XHRpZiAoYmFzZV9nZm4gIT0gb2xkLVx1MDAzZWJhc2VfZ2ZuKVxuK1x0XHRpZiAoYmFzZV9nZm4gIT0gb2xkLVx1MDAzZWJhc2VfZ2ZuKSB7XG4gXHRcdFx0Y2hhbmdlID0gS1ZNX01SX01PVkU7XG4tXHRcdGVsc2UgaWYgKG1lbS1cdTAwM2VmbGFncyAhPSBvbGQtXHUwMDNlZmxhZ3MpXG4rXHRcdH0gZWxzZSBpZiAobWVtLVx1MDAzZWZsYWdzICE9IChvbGQtXHUwMDNlZmxhZ3MgXHUwMDI2IE1FTVNMT1RfVVNFUl9GTEFHU19NQVNLKSkge1xuIFx0XHRcdGNoYW5nZSA9IEtWTV9NUl9GTEFHU19PTkxZO1xuLVx0XHRlbHNlIC8qIE5vdGhpbmcgdG8gY2hhbmdlLiAqL1xuK1x0XHR9IGVsc2UgaWYgKG1lbS1cdTAwM2VmbGFncyBcdTAwMjYgS1ZNX01FTV9HVUVTVF9NRU1GRCkge1xuK1x0XHRcdHJldHVybiBrdm1fZ21lbV9jaGVja19ub19jaGFuZ2Uoa3ZtLCBvbGQsIG1lbS1cdTAwM2VndWVzdF9tZW1mZCxcbitcdFx0XHRcdFx0XHRcdG1lbS1cdTAwM2VndWVzdF9tZW1mZF9vZmZzZXQpO1xuK1x0XHR9IGVsc2Uge1xuIFx0XHRcdHJldHVybiAwO1xuK1x0XHR9XG4gXHR9XG4gXG4rXHRpZiAobWVtLVx1MDAzZWZsYWdzIFx1MDAyNiBLVk1fTUVNX0dVRVNUX01FTUZEIFx1MDAyNlx1MDAyNlxuK1x0ICAgIGNoYW5nZSAhPSBLVk1fTVJfQ1JFQVRFIFx1MDAyNlx1MDAyNiBjaGFuZ2UgIT0gS1ZNX01SX0ZMQUdTX09OTFkpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuIFx0aWYgKChjaGFuZ2UgPT0gS1ZNX01SX0NSRUFURSB8fCBjaGFuZ2UgPT0gS1ZNX01SX01PVkUpIFx1MDAyNlx1MDAyNlxuIFx0ICAgIGt2bV9jaGVja19tZW1zbG90X292ZXJsYXAoc2xvdHMsIGlkLCBiYXNlX2dmbiwgYmFzZV9nZm4gKyBucGFnZXMpKVxuIFx0XHRyZXR1cm4gLUVFWElTVDtcbkBAIC0yMTA1LDcgKzIxMDAsMTIgQEAgc3RhdGljIGludCBrdm1fc2V0X21lbW9yeV9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLFxuIFx0bmV3LVx1MDAzZWZsYWdzID0gbWVtLVx1MDAzZWZsYWdzO1xuIFx0bmV3LVx1MDAzZXVzZXJzcGFjZV9hZGRyID0gbWVtLVx1MDAzZXVzZXJzcGFjZV9hZGRyO1xuIFx0aWYgKG1lbS1cdTAwM2VmbGFncyBcdTAwMjYgS1ZNX01FTV9HVUVTVF9NRU1GRCkge1xuLVx0XHRyID0ga3ZtX2dtZW1fYmluZChrdm0sIG5ldywgbWVtLVx1MDAzZWd1ZXN0X21lbWZkLCBtZW0tXHUwMDNlZ3Vlc3RfbWVtZmRfb2Zmc2V0KTtcbitcdFx0aWYgKGNoYW5nZSA9PSBLVk1fTVJfQ1JFQVRFKSB7XG4rXHRcdFx0ciA9IGt2bV9nbWVtX2JpbmQoa3ZtLCBuZXcsIG1lbS1cdTAwM2VndWVzdF9tZW1mZCwgbWVtLVx1MDAzZWd1ZXN0X21lbWZkX29mZnNldCk7XG4rXHRcdH0gZWxzZSBpZiAoY2hhbmdlID09IEtWTV9NUl9GTEFHU19PTkxZKSB7XG4rXHRcdFx0ciA9IGt2bV9nbWVtX2NoYW5nZV9mbGFncyhrdm0sIG9sZCwgbmV3LCBtZW0tXHUwMDNlZ3Vlc3RfbWVtZmQsXG4rXHRcdFx0XHRcdFx0ICBtZW0tXHUwMDNlZ3Vlc3RfbWVtZmRfb2Zmc2V0KTtcbitcdFx0fVxuIFx0XHRpZiAocilcbiBcdFx0XHRnb3RvIG91dDtcbiBcdH1cbkBAIC0yMTE3LDcgKzIxMTcsNyBAQCBzdGF0aWMgaW50IGt2bV9zZXRfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sXG4gXHRyZXR1cm4gMDtcbiBcbiBvdXRfdW5iaW5kOlxuLVx0aWYgKG1lbS1cdTAwM2VmbGFncyBcdTAwMjYgS1ZNX01FTV9HVUVTVF9NRU1GRClcbitcdGlmICgobWVtLVx1MDAzZWZsYWdzIFx1MDAyNiBLVk1fTUVNX0dVRVNUX01FTUZEKSBcdTAwMjZcdTAwMjYgY2hhbmdlID09IEtWTV9NUl9DUkVBVEUpXG4gXHRcdGt2bV9nbWVtX3VuYmluZChuZXcpO1xuIG91dDpcbiBcdGtmcmVlKG5ldyk7XG5kaWZmIC0tZ2l0IGEvdmlydC9rdm0va3ZtX21tLmggYi92aXJ0L2t2bS9rdm1fbW0uaFxuaW5kZXggNzUxMGNhOTE1ZGQxYWEuLmM1OGRmZWIwZjNkZjU1IDEwMDY0NFxuLS0tIGEvdmlydC9rdm0va3ZtX21tLmhcbisrKyBiL3ZpcnQva3ZtL2t2bV9tbS5oXG5AQCAtNzcsNiArNzcsOSBAQCBpbnQga3ZtX2dtZW1fY3JlYXRlKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9jcmVhdGVfZ3Vlc3RfbWVtZmQgKmFyZ3MpO1xuIGludCBrdm1fZ21lbV9iaW5kKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCxcbiBcdFx0ICB1bnNpZ25lZCBpbnQgZmQsIHVvZmZfdCBvZmZzZXQpO1xuIHZvaWQga3ZtX2dtZW1fdW5iaW5kKHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QpO1xuK2ludCBrdm1fZ21lbV9jaGFuZ2VfZmxhZ3Moc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpvbGQsXG4rXHRcdFx0ICBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpuZXcsIHVuc2lnbmVkIGludCBmZCxcbitcdFx0XHQgIGxvZmZfdCBvZmZzZXQpO1xuICNlbHNlXG4gc3RhdGljIGlubGluZSBpbnQga3ZtX2dtZW1faW5pdChzdHJ1Y3QgbW9kdWxlICptb2R1bGUpXG4ge1xuQEAgLTk1LDYgKzk4LDE0IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBrdm1fZ21lbV91bmJpbmQoc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdClcbiB7XG4gXHRXQVJOX09OX09OQ0UoMSk7XG4gfVxuK3N0YXRpYyBpbmxpbmUgaW50IGt2bV9nbWVtX2NoYW5nZV9mbGFncyhzdHJ1Y3Qga3ZtICprdm0sXG4rXHRcdFx0XHRcdHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm9sZCxcbitcdFx0XHRcdFx0c3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbmV3LFxuK1x0XHRcdFx0XHR1bnNpZ25lZCBpbnQgZmQsIGxvZmZfdCBvZmZzZXQpXG4re1xuK1x0V0FSTl9PTl9PTkNFKDEpO1xuK1x0cmV0dXJuIC1FSU87XG4rfVxuICNlbmRpZiAvKiBDT05GSUdfS1ZNX0dVRVNUX01FTUZEICovXG4gXG4gI2VuZGlmIC8qIF9fS1ZNX01NX0hfXyAqL1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTc6MjY6NTUuMjc3MTE4OTI0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzQ3Mzk0NzE4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbjogS1ZNIEd1ZXN0IE1lbWZkIERpcnR5IFBhZ2UgTG9nZ2luZyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93biBmcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGlkZW50aWZ5IHdoZXRoZXIgdGhpcyBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCB3YXJyYW50IGZ1enppbmcuIEZyb20gd2hhdCBJIHNlZSwgaXQgYWRkcyBzdXBwb3J0IGZvciBkaXJ0eSBwYWdlIGxvZ2dpbmcgc3BlY2lmaWNhbGx5IGZvciBgZ3Vlc3RfbWVtZmRgIGJhY2tlZCBtZW1zbG90cyB3aXRoaW4gS1ZNLiBUaGlzIGxvb2tzIGludGVyZXN0aW5nLlxuXG5UaGUgcGF0Y2ggaW50cm9kdWNlcyBgS1ZNX0NBUF9HVUVTVF9NRU1GRF9NTUFQX0xPR19ESVJUWV9QQUdFU2AuIFNvIHRoaXMgaXMgc29tZXRoaW5nIG5ldyB0aGF0IGNhbiBiZSBlbmFibGVkLCBhbmQgdGhhdCdzIHVzdWFsbHkgd2hlcmUgdGhlIGJ1Z3MgaGlkZS4gTG9va2luZyBhdCB0aGUgY29kZSBtb2RpZmljYXRpb25zLCBpdCB0b3VjaGVzIHNldmVyYWwgS1ZNIGZ1bmN0aW9ucy4gSXQgc2VlbXMgdG8gaGF2ZSBhIGxvdCBvZiBjaGFuZ2VzIHJlbGF0ZWQgdG8gYGt2bV92bV9pb2N0bF9jaGVja19leHRlbnNpb25gLCBgZ21lbV9hYm9ydGAgKGFybTY0KSwgYGt2bV9nbWVtX2ludmFsaWRhdGVfc3RhcnRgLCBga3ZtX2dtZW1faW52YWxpZGF0ZV9lbmRgLCBga3ZtX2dtZW1fcmVsZWFzZWAsIGBrdm1fZ21lbV9lcnJvcl9mb2xpb2AsIGBrdm1fZ21lbV9iaW5kYCwgYGt2bV9zZXRfbWVtb3J5X3JlZ2lvbmAsIGFuZCBvdGhlcnMuIFRoaXMgaW5kaWNhdGVzIGEgc2lnbmlmaWNhbnQgc2hpZnQgaW4gaG93IG1lbW9yeSBpcyBtYW5hZ2VkIHdpdGhpbiB0aGUgZ3Vlc3QgY29udGV4dC5cblxuVGhpcyBwYXRjaCBzZXJpZXMgaXMgYWxsb3dpbmcgdGhlIGBLVk1fTUVNX0xPR19ESVJUWV9QQUdFU2AgZmxhZyB0byBiZSBzZXQgZm9yIG1lbXNsb3RzIHVzaW5nIGBLVk1fTUVNX0dVRVNUX01FTUZEYCBpZiB0aGUgYXJjaGl0ZWN0dXJlIHN1cHBvcnRzIGl0LiBDdXJyZW50bHksIGl0IHNlZW1zIHRoYXQgYGFybTY0YCBzdXBwb3J0cyBpdCwgcHJvdmlkZWQgaXQncyBub3QgYSBwcm90ZWN0ZWQgcEtWTSBWTS4gVGhpcyBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgY29uZGl0aW9uIGlzIGFsd2F5cyBzb21ldGhpbmcgdG8gdGFrZSBub3RlIG9mIGR1cmluZyBmdXp6aW5nLlxuXG5NeSBuZXh0IHN0ZXAgaXMgdG8gbmFpbCBkb3duIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMuIEkgc2VlIHRoYXQgYENPTkZJR19LVk1fR1VFU1RfTUVNRkRgIGFuZCBgQ09ORklHX0tWTWAgYXJlIHJlcXVpcmVkLiBJJ2xsIG5lZWQgdG8gY29uZmlybSB0aGVzZSBhcmUgaW5kZWVkIHRoZSByaWdodCBjb25maWd1cmF0aW9uIGZsYWdzIHRvIGVuYWJsZSB0aGlzIGZ1bmN0aW9uYWxpdHkgZm9yIGZ1enppbmcuXG5cbk5vdywgbGV0J3MgaWRlbnRpZnkgdGhlIGtleSBmb2N1cyBzeW1ib2xzIHRvIHRhcmdldCBpbiB0aGUgZnV6emluZyBoYXJuZXNzLiBJJ20gZm9jdXNpbmcgb24gZnVuY3Rpb25zIHJlbGF0ZWQgdG8gdGhlIGNvcmUgbG9naWMsIHdoaWNoIGFyZTogYGt2bV9nbWVtX2NoYW5nZV9mbGFnc2AsIGBrdm1fZ21lbV9jaGVja19ub19jaGFuZ2VgLCBga3ZtX2dtZW1fYmluZGAsIGBrdm1fc2V0X21lbW9yeV9yZWdpb25gLCBgX19rdm1fZ21lbV9pbnZhbGlkYXRlX3N0YXJ0YCwgYF9fa3ZtX2dtZW1faW52YWxpZGF0ZV9lbmRgLCBga3ZtX2dtZW1fZXJyb3JfZm9saW9gLCBhbmQgYGt2bV9nbWVtX3JlbGVhc2VgLiBUaGVzZSBsb29rIGxpa2UgdGhlIGVudHJ5IHBvaW50cyBmb3IgdGhlIG5ldyBmZWF0dXJlIG9yIHNpZ25pZmljYW50bHkgbW9kaWZpZWQgb25lcywgYmFzZWQgb24gdGhlIHBhdGNoLlxuXG5JIHdpbGwgdXNlIGBncmVwcGVyYCB0byBjb25maXJtIHRoYXQgYENPTkZJR19LVk1fR1VFU1RfTUVNRkRgIGlzIHRoZSBjb3JyZWN0IGNvbmZpZywgYW5kIEknbGwgc2VlIHdoZXJlIHRoaXMgaXMgZGVmaW5lZCBhbmQgdXNlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTUxNSwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxMSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE3OjI3OjAyLjc1MTA2ODQyNloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozODY4OTU1NjMyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBLVk1fR1VFU1RfTUVNRkRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwidmlydC9rdm0vS2NvbmZpZz0xMDM9Y29uZmlnIEtWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTXFxuLS1cXG52aXJ0L2t2bS9LY29uZmlnLTEwNS1cXG52aXJ0L2t2bS9LY29uZmlnOjEwNjpjb25maWcgS1ZNX0dVRVNUX01FTUZEXFxudmlydC9rdm0vS2NvbmZpZy0xMDctICAgICAgIHNlbGVjdCBYQVJSQVlfTVVMVElcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTc6Mjc6MDYuNjIwMDMwMTQ4WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk5OTUzMTY5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBLVk1fR1VFU1RfTUVNRkQgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIGBLVk1fR1VFU1RfTUVNRkRgLi4uIHRoYXQncyBhIGNvbmZpZyBvcHRpb24uIFJpZ2h0LiBCZWZvcmUgSSBkaXZlIHRvbyBkZWVwIGludG8gaXRzIHNwZWNpZmljcywgbXkgZmlyc3QgaW5zdGluY3QgaXMgYWx3YXlzIHRvIHVuZGVyc3RhbmQgaXRzIGRlcGVuZGVuY2llcy4gSXQncyBjcnVjaWFsLCBlc3BlY2lhbGx5IGluIGtlcm5lbCBjb25maWd1cmF0aW9ucywgdG8gc2VlIGlmIGVuYWJsaW5nIG9yIGRpc2FibGluZyB0aGlzIGZlYXR1cmUgaGFzIGNhc2NhZGluZyBlZmZlY3RzLiBEb2VzIGl0IGhpbmdlIG9uIG90aGVyIHNwZWNpZmljIG9wdGlvbnM/IElzIGl0IHRpZWQgdG8gYSBwYXJ0aWN1bGFyIGhhcmR3YXJlIGFyY2hpdGVjdHVyZSwgb3IgYSBzcGVjaWZpYyBrZXJuZWwgdmVyc2lvbj8gVW5kZXJzdGFuZGluZyB0aGVzZSBkZXBlbmRlbmNpZXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaXRzIG92ZXJhbGwgaW1wYWN0IGFuZCBwb3J0YWJpbGl0eS4gTGV0J3Mgc2VlIHdoYXQgdGhlIGNvbmZpZyBzeXN0ZW0gdGVsbHMgdXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNjI2LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTc6Mjc6MDkuNjE5NTYzNTVaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY0MTkxODM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBLVk1fR1VFU1RfTUVNRkRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwidmlydC9rdm0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJ2aXJ0L2t2bS9LY29uZmlnPTEwMz1jb25maWcgS1ZNX0dFTkVSSUNfTUVNT1JZX0FUVFJJQlVURVNcXG4tLVxcbnZpcnQva3ZtL0tjb25maWctMTA1LVxcbnZpcnQva3ZtL0tjb25maWc6MTA2OmNvbmZpZyBLVk1fR1VFU1RfTUVNRkRcXG52aXJ0L2t2bS9LY29uZmlnLTEwNy0gICAgICAgc2VsZWN0IFhBUlJBWV9NVUxUSVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxNzoyNzowOS43ODM3NjA2MDhaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDk5NDI0ODg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgS1ZNIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiBgdmlydC9rdm0vS2NvbmZpZ2AgYXJvdW5kIGxpbmUgMTA2LiBJJ20gYXNzdW1pbmcgd2UncmUgZGVhbGluZyB3aXRoIHRoZSBjb3JlIEtWTSBjb25maWd1cmF0aW9uIGhlcmUsIHByb2JhYmx5IHRoZSB0b3AtbGV2ZWwgb3B0aW9ucyB0aGF0IGRpY3RhdGUgd2hldGhlciBvciBub3QgS1ZNIGl0c2VsZiBpcyBidWlsdCBpbnRvIHRoZSBrZXJuZWwsIG9yIGFzIGEgbW9kdWxlLCBhbmQgcG9zc2libHkgc29tZSBmdW5kYW1lbnRhbCBhcmNoaXRlY3R1cmFsIGNob2ljZXMuIEF0IGxpbmUgMTA2LCBJIGV4cGVjdCB0byBlbmNvdW50ZXIgdGhlIGZvdW5kYXRpb25hbCB0b2dnbGVzLCB0aGUgYmFzZSBgYm9vbGAgb3IgYHRyaXN0YXRlYCBvcHRpb25zIHRoYXQgZW5hYmxlIG9yIGRpc2FibGUgS1ZNIHN1cHBvcnQgYXQgYSB2ZXJ5IGJyb2FkIGxldmVsLiBJJ20gbG9va2luZyBmb3IgdGhpbmdzIGxpa2UgYENPTkZJR19LVk1gLCBhbmQgbWF5YmUgaXRzIGRlcGVuZGVuY3kgb24gdGhpbmdzIGxpa2UgcHJvY2Vzc29yIHZpcnR1YWxpemF0aW9uIGV4dGVuc2lvbnMgKFZULXggb3IgQU1ELVYpLiBJJ2xsIGFsc28gYmUgc2Nhbm5pbmcgZm9yIGhvdyB0aGlzIGJhc2UgY29uZmlndXJhdGlvbiBpcyB0aGVuIHJlZmluZWQgaW50byBtb3JlIGdyYW51bGFyIGNvbnRyb2xzLiBUaGUgZ29hbCBpcyB0byBpbW1lZGlhdGVseSB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiBLVk0ncyBidWlsZCBjb25maWd1cmF0aW9uLCB3aGF0IHRoZSBpbml0aWFsIHNldHRpbmdzIGRvLCBhbmQgdGhlaXIgcmVsYXRpb25zaGlwIHRvIHZhcmlvdXMgaGFyZHdhcmUgYW5kIGFyY2hpdGVjdHVyZSBjaG9pY2VzLiBJIGFtIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGNvbmRpdGlvbmFsIHNlbGVjdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwOTI4LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTc6Mjc6MTIuODgzMTg3MTAzWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTUxMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwidmlydC9rdm0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMDA6XFx0Y29uZmlnIEtWTV9NTVVfTE9DS0xFU1NfQUdJTkdcXG4gMTAxOlxcdCAgICAgICBib29sXFxuIDEwMjpcXHRcXG4gMTAzOlxcdGNvbmZpZyBLVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU1xcbiAxMDQ6XFx0ICAgICAgIGJvb2xcXG4gMTA1OlxcdFxcbiAxMDY6XFx0Y29uZmlnIEtWTV9HVUVTVF9NRU1GRFxcbiAxMDc6XFx0ICAgICAgIHNlbGVjdCBYQVJSQVlfTVVMVElcXG4gMTA4OlxcdCAgICAgICBib29sXFxuIDEwOTpcXHRcXG4gMTEwOlxcdGNvbmZpZyBIQVZFX0tWTV9BUkNIX0dNRU1fUFJFUEFSRVxcbiAxMTE6XFx0ICAgICAgIGJvb2xcXG4gMTEyOlxcdCAgICAgICBkZXBlbmRzIG9uIEtWTV9HVUVTVF9NRU1GRFxcbiAxMTM6XFx0XFxuIDExNDpcXHRjb25maWcgSEFWRV9LVk1fQVJDSF9HTUVNX0lOVkFMSURBVEVcXG4gMTE1OlxcdCAgICAgICBib29sXFxuIDExNjpcXHQgICAgICAgZGVwZW5kcyBvbiBLVk1fR1VFU1RfTUVNRkRcXG4gMTE3OlxcdFxcbiAxMTg6XFx0Y29uZmlnIEhBVkVfS1ZNX0FSQ0hfR01FTV9QT1BVTEFURVxcbiAxMTk6XFx0ICAgICAgIGJvb2xcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTc6Mjc6MTIuODgzMjQzNDYzWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzgwOTc2OTI5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgS1ZNX0dVRVNUX01FTUZEIENvbmZpZ3VyYXRpb24gT3B0aW9uKipcblxuT2theSwgc28gdGhlcmUncyB0aGlzIGBLVk1fR1VFU1RfTUVNRkRgIHNldHRpbmcsIHR1Y2tlZCBhd2F5IGFzIGEgYm9vbGVhbiBjb25maWd1cmF0aW9uIG9wdGlvbi4gSXQncyBtYXJrZWQgYXMgaGlkZGVuLCB3aGljaCBtZWFucyBpdCdzIHByb2JhYmx5IG5vdCBzb21ldGhpbmcgZW5kLXVzZXJzIGFyZSBtZWFudCB0byBkaXJlY3RseSBtYW5pcHVsYXRlLCBidXQgcmF0aGVyIHNvbWV0aGluZyBzZWxlY3RlZCBieSB0aGUgYXJjaGl0ZWN0dXJlLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJBbHJpZ2h0LCBsZXQncyBmaWd1cmUgb3V0ICp3aG8qIGV4YWN0bHkgaXMgbWFraW5nIHVzZSBvZiB0aGlzIHRoaW5nLlwiIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoaWNoIGFyY2hpdGVjdHVyZXMgY29uc2lkZXIgdGhpcyBvcHRpb24gcmVsZXZhbnQuIERpdmluZyBpbnRvIHRoZSBjb2RlIHRvIGZpbmQgdGhlIHNlbGVjdCBzdGF0ZW1lbnRzIGlzIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcC4gRnJvbSB0aGVyZSwgSSBjYW4gYmVnaW4gdG8gdW5wYWNrICp3aHkqIHRoZXkgbmVlZCBpdC4gSSBhbSBrZWVuIHRvIGxlYXJuIHRoZSBpbXBsaWNhdGlvbnMgdGhpcyBtaWdodCBoYXZlIG9uIHRoZSB2aXJ0dWFsaXNhdGlvbiBsYW5kc2NhcGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNDg1LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxNzoyNzoxNi42OTMwMTc2NDlaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNjQzNTk3MzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VsZWN0IEtWTV9HVUVTVF9NRU1GRFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybTY0L2t2bS9LY29uZmlnPTIwPW1lbnVjb25maWcgS1ZNXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9LY29uZmlnLTM4LVxcdHNlbGVjdCBHVUVTVF9QRVJGX0VWRU5UUyBpZiBQRVJGX0VWRU5UU1xcbmFyY2gvYXJtNjQva3ZtL0tjb25maWc6Mzk6XFx0c2VsZWN0IEtWTV9HVUVTVF9NRU1GRFxcbmFyY2gvYXJtNjQva3ZtL0tjb25maWctNDAtXFx0aGVscFxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWc9MjA9Y29uZmlnIEtWTV9YODZcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTQ5LVxcdHNlbGVjdCBLVk1fV0VSUk9SIGlmIFdFUlJPUlxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjUwOlxcdHNlbGVjdCBLVk1fR1VFU1RfTUVNRkQgaWYgWDg2XzY0XFxuYXJjaC94ODYva3ZtL0tjb25maWctNTEtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE3OjI3OjE4Ljc1NzM4NDk5NloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MzE1MjU0Njg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEtWTSBHdWVzdCBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaCoqXG5cbk9rYXksIGhlcmUncyB3aGF0IEknbSB0aGlua2luZyBhYm91dCB0aGlzIHBhdGNoLiBGcm9tIGEgaGlnaCBsZXZlbCwgaXQgbG9va3MgbGlrZSB0aGlzIHBhdGNoIGludHJvZHVjZXMgY2hhbmdlcyB0byBLVk0ncyBndWVzdCBtZW1vcnkgbWFuYWdlbWVudCwgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgZGlydHkgcGFnZSBsb2dnaW5nIGZvciBgZ3Vlc3RfbWVtZmRgIGJhc2VkIG1lbXNsb3RzLiBPbiBhcm02NCBhbmQgeDg2XzY0LCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgYXJlIHNlbGVjdGVkIGJ5IGBLVk1gLiBUaGUgbWFpbiBjb25maWd1cmF0aW9uIG9wdGlvbiB0byBlbmFibGUgaXMgYEtWTWAuXG5cbkdpdmVuIHRoZSBjb3JlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBtZW1vcnkgbWFuYWdlbWVudCwgdGhpcyBpcyAqZGVmaW5pdGVseSogd29ydGggZnV6emluZy4gVGhlIHBhdGNoIGlzIHRvdWNoaW5nIEtWTSBtZW1vcnkgcmVnaW9uIGNvbmZpZ3VyYXRpb24gYW5kIGludmFsaWRhdGlvbiwgd2hpY2ggaW1tZWRpYXRlbHkgbWFrZXMgbWUgdGhpbmsgb2YgS1ZNIGlvY3RscyBsaWtlIGBLVk1fU0VUX1VTRVJfTUVNT1JZX1JFR0lPTjJgIGFuZCBwb3RlbnRpYWwgbWVtb3J5IGludmFsaWRhdGlvbiBldmVudHMuIEl0J3MgYSBwcmltZSB0YXJnZXQuXG5cbk15IGluaXRpYWwgdGhvdWdodCB3YXMgdG8gY2hlY2sgd2hldGhlciBga3ZtX3NldF9tZW1vcnlfcmVnaW9uYCB3YXMgYSBob3QgcGF0aC4gQnV0IG5vdywgYWZ0ZXIgcmV2aWV3aW5nIHRoZSBvdGhlciBmdW5jdGlvbnMsIEkgdGhpbmsgaXQgaXMgbGVzcyBpbnRlcmVzdGluZy4gSSBhbHNvIHRvb2sgYSBsb29rIGF0IG90aGVyIGZ1bmN0aW9uLCBzdWNoIGFzIGBrdm1fZ21lbV9jaGFuZ2VfZmxhZ3NgIGFuZCBga3ZtX2dtZW1fY2hlY2tfbm9fY2hhbmdlYCB3aGljaCBzZWVtIHNwZWNpZmljIHRvIHRoaXMgcGF0Y2guIEkgYWxzbyBzYXcgdGhhdCBgX19rdm1fZ21lbV9pbnZhbGlkYXRlX3N0YXJ0YCBhbmQgYF9fa3ZtX2dtZW1faW52YWxpZGF0ZV9lbmRgIGhhdmUgYWxzbyBiZWVuIG1vZGlmaWVkLlxuXG5TbywgbGV0J3MgcmVmaW5lIHRoZSBzeW1ib2wgbGlzdCB0aGF0IHNob3VsZCBiZSB0aGUgZm9jdXMgb2YgdGhlIGZ1enppbmcgZWZmb3J0cy4gSSdsbCBpbmNsdWRlIHRoZSBmb2xsb3dpbmc6XG5cbiogICBga3ZtX2dtZW1fY2hhbmdlX2ZsYWdzYFxuKiAgIGBrdm1fZ21lbV9jaGVja19ub19jaGFuZ2VgXG4qICAgYF9fa3ZtX2dtZW1faW52YWxpZGF0ZV9zdGFydGBcbiogICBgX19rdm1fZ21lbV9pbnZhbGlkYXRlX2VuZGBcbiogICBga3ZtX2dtZW1fZXJyb3JfZm9saW9gXG5cbkkndmUgYWxzbyBjb25maXJtZWQgdGhhdCBga3ZtX2dtZW1fY2hhbmdlX2ZsYWdzYCBpcyBleHBvcnRlZCB0byBgdmlydC9rdm0va3ZtX21tLmhgLCB3aGljaCBpcyBpbXBvcnRhbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IGl0J3MgYmVpbmcgdXNlZC4gU2ltaWxhcmx5LCBga3ZtX2dtZW1fY2hlY2tfbm9fY2hhbmdlYCBpcyBhbHNvIGV4cG9ydGVkLCB3aGljaCBjb25maXJtcyBpdHMgaW1wb3J0YW5jZSBpbiB0aGUgYnJvYWRlciBLVk0gYXJjaGl0ZWN0dXJlLlxuXG5NeSByZWFzb25pbmcgYm9pbHMgZG93biB0byB0aGlzOiB0aGUgcGF0Y2ggZnVuZGFtZW50YWxseSBhbHRlcnMgbWVtb3J5IHJlZ2lvbiBtYW5hZ2VtZW50IGFuZCBpbnZhbGlkYXRpb24gd2l0aGluIEtWTS4gVGhpcyBoYXMgZGlyZWN0IGltcGxpY2F0aW9ucyBmb3IgaG93IGd1ZXN0cyBpbnRlcmFjdCB3aXRoIG1lbW9yeSBhbmQsIHRoZXJlZm9yZSwgaXMgYSBwcmltZSB0YXJnZXQgZm9yIHZ1bG5lcmFiaWxpdHkgcmVzZWFyY2guIFNwZWNpZmljYWxseSwgaW9jdGwgY2FsbHMgcmVsYXRlZCB0byBtZW1vcnkgcmVnaW9uIGNvbmZpZ3VyYXRpb24gYW5kIGFueXRoaW5nIHRoYXQgY2FuIHRyaWdnZXIgbWVtb3J5IGludmFsaWRhdGlvbiB3b3VsZCBiZSBwcmltYXJ5IGFyZWFzIGZvciBmdXp6aW5nIGFuZCBhdWRpdC4gVGhlIGNvbmZpZ3Mgd2lsbCBiZSBgS1ZNYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE5MTUsIk91dHB1dFRva2VucyI6MTg4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE3OjI3OjI4LjA3MjY0MTcxWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzUxMzM2MzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV9nbWVtX2NoYW5nZV9mbGFnc1wiLFxuICAgIFwia3ZtX2dtZW1fY2hlY2tfbm9fY2hhbmdlXCIsXG4gICAgXCJfX2t2bV9nbWVtX2ludmFsaWRhdGVfc3RhcnRcIixcbiAgICBcIl9fa3ZtX2dtZW1faW52YWxpZGF0ZV9lbmRcIixcbiAgICBcImt2bV9nbWVtX2Vycm9yX2ZvbGlvXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBzdXBwb3J0IGZvciBkaXJ0eSBwYWdlIGxvZ2dpbmcgZm9yIGBndWVzdF9tZW1mZGAgYmFja2VkIG1lbXNsb3RzIGluIEtWTS4gSXQgbW9kaWZpZXMgdGhlIEtWTSBtZW1vcnkgcmVnaW9uIGNvbmZpZ3VyYXRpb24gbG9naWMgYW5kIHRoZSBpbnZhbGlkYXRpb24gcGF0aHMgZm9yIGd1ZXN0IG1lbW9yeS4gVGhlc2UgYXJlIGNvcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIEtWTSB0aGF0IGNhbiBiZSByZWFjaGVkIHZpYSBLVk0gaW9jdGxzIChlLmcuLCBgS1ZNX1NFVF9VU0VSX01FTU9SWV9SRUdJT04yYCkgYW5kIG1lbW9yeSBpbnZhbGlkYXRpb24gZXZlbnRzLCBtYWtpbmcgdGhlbSBoaWdobHkgcmVsZXZhbnQgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX2dtZW1fY2hhbmdlX2ZsYWdzXCIsXG4gICAgXCJrdm1fZ21lbV9jaGVja19ub19jaGFuZ2VcIixcbiAgICBcIl9fa3ZtX2dtZW1faW52YWxpZGF0ZV9zdGFydFwiLFxuICAgIFwiX19rdm1fZ21lbV9pbnZhbGlkYXRlX2VuZFwiLFxuICAgIFwia3ZtX2dtZW1fZXJyb3JfZm9saW9cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIHN1cHBvcnQgZm9yIGRpcnR5IHBhZ2UgbG9nZ2luZyBmb3IgYGd1ZXN0X21lbWZkYCBiYWNrZWQgbWVtc2xvdHMgaW4gS1ZNLiBJdCBtb2RpZmllcyB0aGUgS1ZNIG1lbW9yeSByZWdpb24gY29uZmlndXJhdGlvbiBsb2dpYyBhbmQgdGhlIGludmFsaWRhdGlvbiBwYXRocyBmb3IgZ3Vlc3QgbWVtb3J5LiBUaGVzZSBhcmUgY29yZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gS1ZNIHRoYXQgY2FuIGJlIHJlYWNoZWQgdmlhIEtWTSBpb2N0bHMgKGUuZy4sIGBLVk1fU0VUX1VTRVJfTUVNT1JZX1JFR0lPTjJgKSBhbmQgbWVtb3J5IGludmFsaWRhdGlvbiBldmVudHMsIG1ha2luZyB0aGVtIGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowz52hp[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-02 17:16:58 +0000 UTC FinishedAt: 2026-07-02 17:27:29 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "drm-next", "tree_url": "https://gitlab.freedesktop.org/drm/kernel.git", "commit_hash": "dc59e4fea9d83f03bad6bddf3fa2e52491777482", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "drm-next", "tree_url": "https://gitlab.freedesktop.org/drm/kernel.git", "commit_hash": "dc59e4fea9d83f03bad6bddf3fa2e52491777482", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "5a624959-c01e-4998-aec4-273ce396d195" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "kvm_gmem_change_flags", "kvm_gmem_check_no_change", "__kvm_gmem_invalidate_start", "__kvm_gmem_invalidate_end", "kvm_gmem_error_folio" ], "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+CgkJCTx0ZD4yMDI2LzA3LzAyIDE3OjI2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9nbWVtX2NoYW5nZV9mbGFncyYjMzQ7LAogICAgJiMzNDtrdm1fZ21lbV9jaGVja19ub19jaGFuZ2UmIzM0OywKICAgICYjMzQ7X19rdm1fZ21lbV9pbnZhbGlkYXRlX3N0YXJ0JiMzNDssCiAgICAmIzM0O19fa3ZtX2dtZW1faW52YWxpZGF0ZV9lbmQmIzM0OywKICAgICYjMzQ7a3ZtX2dtZW1fZXJyb3JfZm9saW8mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBzdXBwb3J0IGZvciBkaXJ0eSBwYWdlIGxvZ2dpbmcgZm9yIGBndWVzdF9tZW1mZGAgYmFja2VkIG1lbXNsb3RzIGluIEtWTS4gSXQgbW9kaWZpZXMgdGhlIEtWTSBtZW1vcnkgcmVnaW9uIGNvbmZpZ3VyYXRpb24gbG9naWMgYW5kIHRoZSBpbnZhbGlkYXRpb24gcGF0aHMgZm9yIGd1ZXN0IG1lbW9yeS4gVGhlc2UgYXJlIGNvcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIEtWTSB0aGF0IGNhbiBiZSByZWFjaGVkIHZpYSBLVk0gaW9jdGxzIChlLmcuLCBgS1ZNX1NFVF9VU0VSX01FTU9SWV9SRUdJT04yYCkgYW5kIG1lbW9yeSBpbnZhbGlkYXRpb24gZXZlbnRzLCBtYWtpbmcgdGhlbSBoaWdobHkgcmVsZXZhbnQgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTc6MjY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAxZjNjN2FjNTU3MTc4OTljNGM5MWFjNDlmZGUzNjQ4ODVkODhlZTY5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgMiAxNzoyNjo1MyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QgYi9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3RcbmluZGV4IGE1ZjllZTkyZjQzZThkLi41MDEyYWZlNmE5YjU1OSAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0XG5AQCAtOTQ5Myw2ICYjNDM7OTQ5MywxNSBAQCB0YWtlIGNhcmUgdG8gZGlmZmVyZW50aWF0ZSBiZXR3ZWVuIHRoZXNlIGNhc2VzLlxuIFRoZSBwcmVzZW5jZSBvZiB0aGlzIGNhcGFiaWxpdHkgaW5kaWNhdGVzIHRoYXQgdGhlIG5lc3RlZCBLVk0gZ3Vlc3QgY2FuXG4gc3RhcnQgaW4gRVNBIG1vZGUuXG4gXG4mIzQzOzguNDggS1ZNX0NBUF9HVUVTVF9NRU1GRF9NTUFQX0xPR19ESVJUWV9QQUdFU1xuJiM0MzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiYjNDM7XG4mIzQzOzpBcmNoaXRlY3R1cmVzOiBhbGxcbiYjNDM7XG4mIzQzO1RoZSBwcmVzZW5jZSBvZiB0aGlzIGNhcGFiaWxpdHkgaW5kaWNhdGVzIHRoYXQgbWVtc2xvdHMgYmFja2VkIGJ5IGEgZ3Vlc3RfbWVtZmRcbiYjNDM7ZmlsZSBkZXNjcmlwdG9yIGNyZWF0ZWQgd2l0aCB0aGUgR1VFU1RfTUVNRkRfRkxBR19NTUFQIGZsYWcgY2FuIGhhdmUgZGlydHlcbiYjNDM7cGFnZSBsb2dnaW5nIGVuYWJsZWQuXG4mIzQzO1xuIDkuIEtub3duIEtWTSBBUEkgcHJvYmxlbXNcbiA9PT09PT09PT09PT09PT09PT09PT09PT09XG4gXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vYXJtLmMgYi9hcmNoL2FybTY0L2t2bS9hcm0uY1xuaW5kZXggNTBhZGZmZjc1YmU4MmUuLmU5MmU1ZDdiNTMzYWRhIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9rdm0vYXJtLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQva3ZtL2FybS5jXG5AQCAtMzkzLDYgJiM0MzszOTMsOSBAQCBpbnQga3ZtX3ZtX2lvY3RsX2NoZWNrX2V4dGVuc2lvbihzdHJ1Y3Qga3ZtICprdm0sIGxvbmcgZXh0KVxuIFx0Y2FzZSBLVk1fQ0FQX0NPVU5URVJfT0ZGU0VUOlxuIFx0Y2FzZSBLVk1fQ0FQX0FSTV9XUklUQUJMRV9JTVBfSURfUkVHUzpcbiBcdGNhc2UgS1ZNX0NBUF9BUk1fU0VBX1RPX1VTRVI6XG4mIzQzOyNpZmRlZiBDT05GSUdfS1ZNX0dVRVNUX01FTUZEXG4mIzQzO1x0Y2FzZSBLVk1fQ0FQX0dVRVNUX01FTUZEX01NQVBfTE9HX0RJUlRZX1BBR0VTOlxuJiM0MzsjZW5kaWZcbiBcdFx0ciA9IDE7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBLVk1fQ0FQX1NFVF9HVUVTVF9ERUJVRzI6XG5AQCAtNDkzLDYgJiM0Mzs0OTYsMjUgQEAgaW50IGt2bV92bV9pb2N0bF9jaGVja19leHRlbnNpb24oc3RydWN0IGt2bSAqa3ZtLCBsb25nIGV4dClcbiBcdHJldHVybiByO1xuIH1cbiBcbiYjNDM7I2lmZGVmIENPTkZJR19LVk1fR1VFU1RfTUVNRkRcbiYjNDM7Ym9vbCBrdm1fYXJjaF9zdXBwb3J0c19nbWVtX21tYXBfZGlydHlfbG9nZ2luZyhzdHJ1Y3Qga3ZtICprdm0pXG4mIzQzO3tcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFByb3RlY3RlZCBwS1ZNIFZNcyBkb24mIzM5O3QgYWxsb3cgZGlydHkgcGFnZSBsb2dnaW5nLCBmYWlsIGVhcmx5IGhlcmVcbiYjNDM7XHQgKiBpbnN0ZWFkIG9mIGluIGt2bV9hcmNoX3ByZXBhcmVfbWVtb3J5X3JlZ2lvbigpLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogS1ZNX0NBUF9HVUVTVF9NRU1GRF9NTUFQX0xPR19ESVJUWV9QQUdFUyBpcyBub3QgYXZhaWxhYmxlIGZvciBhXG4mIzQzO1x0ICogcHJvdGVjdGVkIHBLVk0gVk0sIGFuZCByZXR1cm5pbmcgZmFsc2UgbWVhbnMgdGhhdFxuJiM0MztcdCAqIEtWTV9TRVRfVVNFUl9NRU1PUllfUkVHSU9OMiBmYWlscyB3aXRoIEVJTlZBTCwgd2hpY2ggaXMgY29uc2lzdGVudFxuJiM0MztcdCAqIHdpdGggdW5zdXBwb3J0ZWQgbWVtc2xvdCBmbGFncy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoIWlzX3Byb3RlY3RlZF9rdm1fZW5hYmxlZCgpKVxuJiM0MztcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1xuJiM0MztcdHJldHVybiBrdm1fcGt2bV9leHRfYWxsb3dlZChrdm0sIEtWTV9DQVBfR1VFU1RfTUVNRkRfTU1BUF9MT0dfRElSVFlfUEFHRVMpO1xuJiM0Mzt9XG4mIzQzOyNlbmRpZlxuJiM0MztcbiBsb25nIGt2bV9hcmNoX2Rldl9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCxcbiBcdFx0XHR1bnNpZ25lZCBpbnQgaW9jdGwsIHVuc2lnbmVkIGxvbmcgYXJnKVxuIHtcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9tbXUuYyBiL2FyY2gvYXJtNjQva3ZtL21tdS5jXG5pbmRleCA2Yzk0MWFhYTEwYzYzOS4uZjZlNmRlMTUzY2UyNTMgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2t2bS9tbXUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9rdm0vbW11LmNcbkBAIC0xNjQ4LDcgJiM0MzsxNjQ4LDggQEAgc3RhdGljIGludCBnbWVtX2Fib3J0KGNvbnN0IHN0cnVjdCBrdm1fczJfZmF1bHRfZGVzYyAqczJmZClcbiBcdFx0cmV0dXJuIHJldDtcbiBcdH1cbiBcbi1cdGlmICghKHMyZmQtXHUwMDNlbWVtc2xvdC1cdTAwM2VmbGFncyBcdTAwMjYgS1ZNX01FTV9SRUFET05MWSkpXG4mIzQzO1x0aWYgKCEoczJmZC1cdTAwM2VtZW1zbG90LVx1MDAzZWZsYWdzIFx1MDAyNiBLVk1fTUVNX1JFQURPTkxZKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgKCFrdm1fc2xvdF9kaXJ0eV90cmFja19lbmFibGVkKHMyZmQtXHUwMDNlbWVtc2xvdCkgfHwgd3JpdGVfZmF1bHQpKVxuIFx0XHRwcm90IHw9IEtWTV9QR1RBQkxFX1BST1RfVztcbiBcbiBcdGlmIChzMmZkLVx1MDAzZW5lc3RlZClcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmggYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhcbmluZGV4IGFiOGNmYWVjODJkMzFlLi5jNDRlOTI1M2ViNDAwYSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oXG5AQCAtNTYsNiAmIzQzOzU2LDcgQEBcbiAgKi9cbiAjZGVmaW5lIEtWTV9NRU1TTE9UX0lOVkFMSURcdFx0XHQoMVVMIFx1MDAzY1x1MDAzYyAxNilcbiAjZGVmaW5lIEtWTV9NRU1TTE9UX0dNRU1fT05MWVx0XHRcdCgxVUwgXHUwMDNjXHUwMDNjIDE3KVxuJiM0MzsjZGVmaW5lIE1FTVNMT1RfVVNFUl9GTEFHU19NQVNLXHRcdFx0MHhmZmZmXG4gXG4gLypcbiAgKiBCaXQgNjMgb2YgdGhlIG1lbXNsb3QgZ2VuZXJhdGlvbiBudW1iZXIgaXMgYW4gXCYjMzQ7dXBkYXRlIGluLXByb2dyZXNzIGZsYWdcJiMzNDssXG5AQCAtNzMxLDYgJiM0Mzs3MzIsOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wga3ZtX2FyY2hfaGFzX3ByaXZhdGVfbWVtKHN0cnVjdCBrdm0gKmt2bSlcbiBcbiAjaWZkZWYgQ09ORklHX0tWTV9HVUVTVF9NRU1GRFxuIGJvb2wga3ZtX2FyY2hfc3VwcG9ydHNfZ21lbV9pbml0X3NoYXJlZChzdHJ1Y3Qga3ZtICprdm0pO1xuJiM0Mztib29sIGt2bV9hcmNoX3N1cHBvcnRzX2dtZW1fbW1hcF9kaXJ0eV9sb2dnaW5nKHN0cnVjdCBrdm0gKmt2bSk7XG4mIzQzO2ludCBrdm1fZ21lbV9jaGVja19ub19jaGFuZ2Uoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LFxuJiM0MztcdFx0XHQgICAgIHVuc2lnbmVkIGludCBmZCwgbG9mZl90IG9mZnNldCk7XG4gXG4gc3RhdGljIGlubGluZSB1NjQga3ZtX2dtZW1fZ2V0X3N1cHBvcnRlZF9mbGFncyhzdHJ1Y3Qga3ZtICprdm0pXG4ge1xuQEAgLTc0MSw2ICYjNDM7NzQ1LDE3IEBAIHN0YXRpYyBpbmxpbmUgdTY0IGt2bV9nbWVtX2dldF9zdXBwb3J0ZWRfZmxhZ3Moc3RydWN0IGt2bSAqa3ZtKVxuIFxuIFx0cmV0dXJuIGZsYWdzO1xuIH1cbiYjNDM7I2Vsc2VcbiYjNDM7c3RhdGljIGlubGluZSBib29sIGt2bV9hcmNoX3N1cHBvcnRzX2dtZW1fbW1hcF9kaXJ0eV9sb2dnaW5nKHN0cnVjdCBrdm0gKmt2bSlcbiYjNDM7e1xuJiM0MztcdHJldHVybiBmYWxzZTtcbiYjNDM7fVxuJiM0MztzdGF0aWMgaW5saW5lIGludCBrdm1fZ21lbV9jaGVja19ub19jaGFuZ2Uoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LFxuJiM0MztcdFx0XHRcdFx0ICAgdW5zaWduZWQgaW50IGZkLCBsb2ZmX3Qgb2Zmc2V0KVxuJiM0Mzt7XG4mIzQzO1x0V0FSTl9PTl9PTkNFKDEpO1xuJiM0MztcdHJldHVybiAtRUlPO1xuJiM0Mzt9XG4gI2VuZGlmXG4gXG4gI2lmbmRlZiBrdm1fYXJjaF9oYXNfcmVhZG9ubHlfbWVtXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oXG5pbmRleCA0MTkwMTEwOTdmYThlMi4uNWE1M2UyZTE5YjJmYjIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgva3ZtLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaFxuQEAgLTk5Nyw2ICYjNDM7OTk3LDcgQEAgc3RydWN0IGt2bV9lbmFibGVfY2FwIHtcbiAjZGVmaW5lIEtWTV9DQVBfUzM5MF9LRVlPUCAyNDdcbiAjZGVmaW5lIEtWTV9DQVBfUzM5MF9WU0lFX0VTQU1PREUgMjQ4XG4gI2RlZmluZSBLVk1fQ0FQX1MzOTBfSFBBR0VfMkcgMjQ5XG4mIzQzOyNkZWZpbmUgS1ZNX0NBUF9HVUVTVF9NRU1GRF9NTUFQX0xPR19ESVJUWV9QQUdFUyAyNTBcbiBcbiBzdHJ1Y3Qga3ZtX2lycV9yb3V0aW5nX2lycWNoaXAge1xuIFx0X191MzIgaXJxY2hpcDtcbmRpZmYgLS1naXQgYS92aXJ0L2t2bS9ndWVzdF9tZW1mZC5jIGIvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuY1xuaW5kZXggZGI1N2M1NzY2YWI2MDQuLjIxMGJkZDc2ZjBhYWQ3IDEwMDY0NFxuLS0tIGEvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuY1xuQEAgLTI1LDYgJiM0MzsyNSw3IEBAIHN0cnVjdCBnbWVtX2ZpbGUge1xuIFx0c3RydWN0IGt2bSAqa3ZtO1xuIFx0c3RydWN0IHhhcnJheSBiaW5kaW5ncztcbiBcdHN0cnVjdCBsaXN0X2hlYWQgZW50cnk7XG4mIzQzO1x0Ym9vbCBmb3VuZF9tZW1zbG90O1x0LyogVXNlZCBmb3IgYmFsYW5jaW5nIGludmFsaWRhdGlvbnMgd2hlbiBwdW5jaGluZyBhIGhvbGUgKi9cbiB9O1xuIFxuIHN0cnVjdCBnbWVtX2lub2RlIHtcbkBAIC00Myw2ICYjNDM7NDQsMjkgQEAgc3RhdGljIF9fYWx3YXlzX2lubGluZSBzdHJ1Y3QgZ21lbV9pbm9kZSAqR01FTV9JKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4gI2RlZmluZSBrdm1fZ21lbV9mb3JfZWFjaF9maWxlKGYsIGlub2RlKSBcXFxuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeShmLCBcdTAwMjZHTUVNX0koaW5vZGUpLVx1MDAzZWdtZW1fZmlsZV9saXN0LCBlbnRyeSlcbiBcbiYjNDM7c3RhdGljIHZvaWQgKm1lbXNsb3RfdG9feGFfdmFsdWUoc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdClcbiYjNDM7e1xuJiM0MztcdFdBUk5fT05fT05DRShzaXplb2Yoc2xvdC1cdTAwM2Vhc19pZCkgXHUwMDNlIDE2KTtcbiYjNDM7XHRXQVJOX09OX09OQ0Uoc2l6ZW9mKHNsb3QtXHUwMDNlaWQpIFx1MDAzZSAxNik7XG4mIzQzO1x0V0FSTl9PTl9PTkNFKHNpemVvZihzbG90LVx1MDAzZWFzX2lkKSAmIzQzOyBzaXplb2Yoc2xvdC1cdTAwM2VpZCkgXHUwMDNlIHNpemVvZih1bnNpZ25lZCBsb25nKSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiB4YV9ta192YWx1ZSgoKHVuc2lnbmVkIGxvbmcpc2xvdC1cdTAwM2Vhc19pZCkgXHUwMDNjXHUwMDNjIDE2IHwgKHVuc2lnbmVkIGxvbmcpc2xvdC1cdTAwM2VpZCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICp4YV92YWx1ZV90b19tZW1zbG90KHN0cnVjdCBrdm0gKmt2bSwgY29uc3Qgdm9pZCAqZW50cnkpXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGZ1bGxfaWQgPSB4YV90b192YWx1ZShlbnRyeSk7XG4mIzQzO1x0dTE2IGFzX2lkID0gKGZ1bGxfaWQgXHUwMDNlXHUwMDNlIDE2KSBcdTAwMjYgVTE2X01BWDtcbiYjNDM7XHRzaG9ydCBpZCA9IGZ1bGxfaWQgXHUwMDI2IFUxNl9NQVg7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogRG8gbm90IGlnbm9yZSBLVk1fTUVNU0xPVF9JTlZBTElEIG1lbXNsb3RzLCBhcyB3ZSB3YW50XG4mIzQzO1x0ICogLVx1MDAzZWVycm9yX3JlbW92ZV9mb2xpbygpLCB3aGVuIGl0IHJhY2VzIHdpdGggbWVtc2xvdCBkZWxldGlvbiwgdG8gaGF2ZVxuJiM0MztcdCAqICB1bm1hcHBlZCB0aGUgbWVtb3J5IHVwb24gY29tcGxldGlvbi5cbiYjNDM7XHQgKi9cbiYjNDM7XHRyZXR1cm4gaWRfdG9fbWVtc2xvdChfX2t2bV9tZW1zbG90cyhrdm0sIGFzX2lkKSwgaWQpO1xuJiM0Mzt9XG4mIzQzO1xuIC8qKlxuICAqIGZvbGlvX2ZpbGVfcGZuIC0gbGlrZSBmb2xpb19maWxlX3BhZ2UsIGJ1dCByZXR1cm4gYSBwZm4uXG4gICogQGZvbGlvOiBUaGUgZm9saW8gd2hpY2ggY29udGFpbnMgdGhpcyBpbmRleC5cbkBAIC0xNTcsNyAmIzQzOzE4MSw3IEBAIHN0YXRpYyBlbnVtIGt2bV9nZm5fcmFuZ2VfZmlsdGVyIGt2bV9nbWVtX2dldF9pbnZhbGlkYXRlX2ZpbHRlcihzdHJ1Y3QgaW5vZGUgKmluXG4gXHRyZXR1cm4gS1ZNX0ZJTFRFUl9QUklWQVRFO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBfX2t2bV9nbWVtX2ludmFsaWRhdGVfc3RhcnQoc3RydWN0IGdtZW1fZmlsZSAqZiwgcGdvZmZfdCBzdGFydCxcbiYjNDM7c3RhdGljIGJvb2wgX19rdm1fZ21lbV9pbnZhbGlkYXRlX3N0YXJ0KHN0cnVjdCBnbWVtX2ZpbGUgKmYsIHBnb2ZmX3Qgc3RhcnQsXG4gXHRcdFx0XHRcdHBnb2ZmX3QgZW5kLFxuIFx0XHRcdFx0XHRlbnVtIGt2bV9nZm5fcmFuZ2VfZmlsdGVyIGF0dHJfZmlsdGVyKVxuIHtcbkBAIC0xNjUsOSAmIzQzOzE4OSwxNSBAQCBzdGF0aWMgdm9pZCBfX2t2bV9nbWVtX2ludmFsaWRhdGVfc3RhcnQoc3RydWN0IGdtZW1fZmlsZSAqZiwgcGdvZmZfdCBzdGFydCxcbiBcdHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3Q7XG4gXHRzdHJ1Y3Qga3ZtICprdm0gPSBmLVx1MDAzZWt2bTtcbiBcdHVuc2lnbmVkIGxvbmcgaW5kZXg7XG4mIzQzO1x0dm9pZCAqZW50cnk7XG4gXG4tXHR4YV9mb3JfZWFjaF9yYW5nZShcdTAwMjZmLVx1MDAzZWJpbmRpbmdzLCBpbmRleCwgc2xvdCwgc3RhcnQsIGVuZCAtIDEpIHtcbi1cdFx0cGdvZmZfdCBwZ29mZiA9IHNsb3QtXHUwMDNlZ21lbS5wZ29mZjtcbiYjNDM7XHR4YV9mb3JfZWFjaF9yYW5nZShcdTAwMjZmLVx1MDAzZWJpbmRpbmdzLCBpbmRleCwgZW50cnksIHN0YXJ0LCBlbmQgLSAxKSB7XG4mIzQzO1x0XHRwZ29mZl90IHBnb2ZmO1xuJiM0MztcbiYjNDM7XHRcdHNsb3QgPSB4YV92YWx1ZV90b19tZW1zbG90KGt2bSwgZW50cnkpO1xuJiM0MztcdFx0aWYgKCFzbG90KVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdHBnb2ZmID0gc2xvdC1cdTAwM2VnbWVtLnBnb2ZmO1xuIFxuIFx0XHRzdHJ1Y3Qga3ZtX2dmbl9yYW5nZSBnZm5fcmFuZ2UgPSB7XG4gXHRcdFx0LnN0YXJ0ID0gc2xvdC1cdTAwM2ViYXNlX2dmbiAmIzQzOyBtYXgocGdvZmYsIHN0YXJ0KSAtIHBnb2ZmLFxuQEAgLTE5Miw2ICYjNDM7MjIyLDggQEAgc3RhdGljIHZvaWQgX19rdm1fZ21lbV9pbnZhbGlkYXRlX3N0YXJ0KHN0cnVjdCBnbWVtX2ZpbGUgKmYsIHBnb2ZmX3Qgc3RhcnQsXG4gXG4gXHRpZiAoZm91bmRfbWVtc2xvdClcbiBcdFx0S1ZNX01NVV9VTkxPQ0soa3ZtKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGZvdW5kX21lbXNsb3Q7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGt2bV9nbWVtX2ludmFsaWRhdGVfc3RhcnQoc3RydWN0IGlub2RlICppbm9kZSwgcGdvZmZfdCBzdGFydCxcbkBAIC0xOTksMTEgJiM0MzsyMzEsMjIgQEAgc3RhdGljIHZvaWQga3ZtX2dtZW1faW52YWxpZGF0ZV9zdGFydChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IHN0YXJ0LFxuIHtcbiBcdGVudW0ga3ZtX2dmbl9yYW5nZV9maWx0ZXIgYXR0cl9maWx0ZXI7XG4gXHRzdHJ1Y3QgZ21lbV9maWxlICpmO1xuJiM0MztcdHN0cnVjdCBrdm0gKmt2bTtcbiYjNDM7XHRpbnQgaWR4O1xuIFxuIFx0YXR0cl9maWx0ZXIgPSBrdm1fZ21lbV9nZXRfaW52YWxpZGF0ZV9maWx0ZXIoaW5vZGUpO1xuIFxuLVx0a3ZtX2dtZW1fZm9yX2VhY2hfZmlsZShmLCBpbm9kZSlcbi1cdFx0X19rdm1fZ21lbV9pbnZhbGlkYXRlX3N0YXJ0KGYsIHN0YXJ0LCBlbmQsIGF0dHJfZmlsdGVyKTtcbiYjNDM7XHRrdm1fZ21lbV9mb3JfZWFjaF9maWxlKGYsIGlub2RlKSB7XG4mIzQzO1x0XHRrdm0gPSBmLVx1MDAzZWt2bTtcbiYjNDM7XHRcdGlkeCA9IHNyY3VfcmVhZF9sb2NrKFx1MDAyNmt2bS1cdTAwM2VzcmN1KTtcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBUaGlzIGlzIHNhZmUgdG8gZG8gYmVjYXVzZSBjYWxscyB0b1xuJiM0MztcdFx0ICoga3ZtX2dtZW1faW52YWxpZGF0ZV9zdGFydCgpIGFyZSBzZXJpYWxpemVkIGJ5XG4mIzQzO1x0XHQgKiBmaWxlbWFwX2ludmFsaWRhdGVfbG9jaygpLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRmLVx1MDAzZWZvdW5kX21lbXNsb3QgPSBfX2t2bV9nbWVtX2ludmFsaWRhdGVfc3RhcnQoZiwgc3RhcnQsIGVuZCwgYXR0cl9maWx0ZXIpO1xuJiM0MztcdFx0c3JjdV9yZWFkX3VubG9jayhcdTAwMjZrdm0tXHUwMDNlc3JjdSwgaWR4KTtcbiYjNDM7XHR9XG4gfVxuIFxuIHN0YXRpYyB2b2lkIF9fa3ZtX2dtZW1faW52YWxpZGF0ZV9lbmQoc3RydWN0IGdtZW1fZmlsZSAqZiwgcGdvZmZfdCBzdGFydCxcbkBAIC0yMjMsOCAmIzQzOzI2NiwxMSBAQCBzdGF0aWMgdm9pZCBrdm1fZ21lbV9pbnZhbGlkYXRlX2VuZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IHN0YXJ0LFxuIHtcbiBcdHN0cnVjdCBnbWVtX2ZpbGUgKmY7XG4gXG4tXHRrdm1fZ21lbV9mb3JfZWFjaF9maWxlKGYsIGlub2RlKVxuJiM0MztcdGt2bV9nbWVtX2Zvcl9lYWNoX2ZpbGUoZiwgaW5vZGUpIHtcbiYjNDM7XHRcdGlmICghZi1cdTAwM2Vmb3VuZF9tZW1zbG90KVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiBcdFx0X19rdm1fZ21lbV9pbnZhbGlkYXRlX2VuZChmLCBzdGFydCwgZW5kKTtcbiYjNDM7XHR9XG4gfVxuIFxuIHN0YXRpYyBsb25nIGt2bV9nbWVtX3B1bmNoX2hvbGUoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG9mZnNldCwgbG9mZl90IGxlbilcbkBAIC0zMjYsNiAmIzQzOzM3Miw3IEBAIHN0YXRpYyBpbnQga3ZtX2dtZW1fcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbiBcdHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3Q7XG4gXHRzdHJ1Y3Qga3ZtICprdm0gPSBmLVx1MDAzZWt2bTtcbiBcdHVuc2lnbmVkIGxvbmcgaW5kZXg7XG4mIzQzO1x0dm9pZCAqZW50cnk7XG4gXG4gXHQvKlxuIFx0ICogUHJldmVudCBjb25jdXJyZW50IGF0dGVtcHRzIHRvICp1bmJpbmQqIGEgbWVtc2xvdC4gIFRoaXMgaXMgdGhlIGxhc3RcbkBAIC0zNDQsMTcgJiM0MzszOTEsMTggQEAgc3RhdGljIGludCBrdm1fZ21lbV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuIFxuIFx0ZmlsZW1hcF9pbnZhbGlkYXRlX2xvY2soaW5vZGUtXHUwMDNlaV9tYXBwaW5nKTtcbiBcbi1cdHhhX2Zvcl9lYWNoKFx1MDAyNmYtXHUwMDNlYmluZGluZ3MsIGluZGV4LCBzbG90KVxuJiM0MztcdHhhX2Zvcl9lYWNoKFx1MDAyNmYtXHUwMDNlYmluZGluZ3MsIGluZGV4LCBlbnRyeSkge1xuJiM0MztcdFx0c2xvdCA9IHhhX3ZhbHVlX3RvX21lbXNsb3Qoa3ZtLCBlbnRyeSk7XG4gXHRcdFdSSVRFX09OQ0Uoc2xvdC1cdTAwM2VnbWVtLmZpbGUsIE5VTEwpO1xuJiM0MztcdH1cbiBcbiBcdC8qXG4gXHQgKiBBbGwgaW4tZmxpZ2h0IG9wZXJhdGlvbnMgYXJlIGdvbmUgYW5kIG5ldyBiaW5kaW5ncyBjYW4gYmUgY3JlYXRlZC5cbiBcdCAqIFphcCBhbGwgU1BURXMgcG9pbnRlZCBhdCBieSB0aGlzIGZpbGUuICBEbyBub3QgZnJlZSB0aGUgYmFja2luZ1xuIFx0ICogbWVtb3J5LCBhcyBpdHMgbGlmZXRpbWUgaXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBpbm9kZSwgbm90IHRoZSBmaWxlLlxuIFx0ICovXG4tXHRfX2t2bV9nbWVtX2ludmFsaWRhdGVfc3RhcnQoZiwgMCwgLTF1bCxcbi1cdFx0XHRcdCAgICBrdm1fZ21lbV9nZXRfaW52YWxpZGF0ZV9maWx0ZXIoaW5vZGUpKTtcbi1cdF9fa3ZtX2dtZW1faW52YWxpZGF0ZV9lbmQoZiwgMCwgLTF1bCk7XG4mIzQzO1x0aWYgKF9fa3ZtX2dtZW1faW52YWxpZGF0ZV9zdGFydChmLCAwLCAtMXVsLCBrdm1fZ21lbV9nZXRfaW52YWxpZGF0ZV9maWx0ZXIoaW5vZGUpKSlcbiYjNDM7XHRcdF9fa3ZtX2dtZW1faW52YWxpZGF0ZV9lbmQoZiwgMCwgLTF1bCk7XG4gXG4gXHRsaXN0X2RlbChcdTAwMjZmLVx1MDAzZWVudHJ5KTtcbiBcbkBAIC00OTgsMTQgJiM0Mzs1NDYsMjAgQEAgc3RhdGljIGludCBrdm1fZ21lbV9taWdyYXRlX2ZvbGlvKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuIFxuIHN0YXRpYyBpbnQga3ZtX2dtZW1fZXJyb3JfZm9saW8oc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuJiM0MztcdGVudW0ga3ZtX2dmbl9yYW5nZV9maWx0ZXIgYXR0cl9maWx0ZXI7XG4mIzQzO1x0c3RydWN0IGlub2RlICppbm9kZSA9IG1hcHBpbmctXHUwMDNlaG9zdDtcbiYjNDM7XHRzdHJ1Y3QgZ21lbV9maWxlICpmO1xuIFx0cGdvZmZfdCBzdGFydCwgZW5kO1xuJiM0MztcdGJvb2wgZm91bmRfbWVtc2xvdDtcbiYjNDM7XHRzdHJ1Y3Qga3ZtICprdm07XG4mIzQzO1x0aW50IGlkeDtcbiBcbiBcdGZpbGVtYXBfaW52YWxpZGF0ZV9sb2NrX3NoYXJlZChtYXBwaW5nKTtcbiBcbiBcdHN0YXJ0ID0gZm9saW8tXHUwMDNlaW5kZXg7XG4gXHRlbmQgPSBzdGFydCAmIzQzOyBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG4gXG4tXHRrdm1fZ21lbV9pbnZhbGlkYXRlX3N0YXJ0KG1hcHBpbmctXHUwMDNlaG9zdCwgc3RhcnQsIGVuZCk7XG4mIzQzO1x0YXR0cl9maWx0ZXIgPSBrdm1fZ21lbV9nZXRfaW52YWxpZGF0ZV9maWx0ZXIoaW5vZGUpO1xuIFxuIFx0LypcbiBcdCAqIERvIG5vdCB0cnVuY2F0ZSB0aGUgcmFuZ2UsIHdoYXQgYWN0aW9uIGlzIHRha2VuIGluIHJlc3BvbnNlIHRvIHRoZVxuQEAgLTUxNSw4ICYjNDM7NTY5LDE5IEBAIHN0YXRpYyBpbnQga3ZtX2dtZW1fZXJyb3JfZm9saW8oc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9sXG4gXHQgKiBhdCB3aGljaCBwb2ludCBLVk0gY2FuIGVpdGhlciB0ZXJtaW5hdGUgdGhlIFZNIG9yIHByb3BhZ2F0ZSB0aGVcbiBcdCAqIGVycm9yIHRvIHVzZXJzcGFjZS5cbiBcdCAqL1xuJiM0MztcdGt2bV9nbWVtX2Zvcl9lYWNoX2ZpbGUoZiwgaW5vZGUpIHtcbiYjNDM7XHRcdGt2bSA9IGYtXHUwMDNla3ZtO1xuIFxuLVx0a3ZtX2dtZW1faW52YWxpZGF0ZV9lbmQobWFwcGluZy1cdTAwM2Vob3N0LCBzdGFydCwgZW5kKTtcbiYjNDM7XHRcdGlkeCA9IHNyY3VfcmVhZF9sb2NrKFx1MDAyNmt2bS1cdTAwM2VzcmN1KTtcbiYjNDM7XHRcdGZvdW5kX21lbXNsb3QgPSBfX2t2bV9nbWVtX2ludmFsaWRhdGVfc3RhcnQoZiwgc3RhcnQsIGVuZCwgYXR0cl9maWx0ZXIpO1xuJiM0MztcdFx0c3JjdV9yZWFkX3VubG9jayhcdTAwMjZrdm0tXHUwMDNlc3JjdSwgaWR4KTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoZm91bmRfbWVtc2xvdCkge1xuJiM0MztcdFx0XHRLVk1fTU1VX0xPQ0soa3ZtKTtcbiYjNDM7XHRcdFx0a3ZtX21tdV9pbnZhbGlkYXRlX2VuZChrdm0pO1xuJiM0MztcdFx0XHRLVk1fTU1VX1VOTE9DSyhrdm0pO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiBcbiBcdGZpbGVtYXBfaW52YWxpZGF0ZV91bmxvY2tfc2hhcmVkKG1hcHBpbmcpO1xuIFxuQEAgLTU1Nyw2ICYjNDM7NjIyLDExIEBAIGJvb2wgX193ZWFrIGt2bV9hcmNoX3N1cHBvcnRzX2dtZW1faW5pdF9zaGFyZWQoc3RydWN0IGt2bSAqa3ZtKVxuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuJiM0Mztib29sIF9fd2VhayBrdm1fYXJjaF9zdXBwb3J0c19nbWVtX21tYXBfZGlydHlfbG9nZ2luZyhzdHJ1Y3Qga3ZtICprdm0pXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBfX2t2bV9nbWVtX2NyZWF0ZShzdHJ1Y3Qga3ZtICprdm0sIGxvZmZfdCBzaXplLCB1NjQgZmxhZ3MpXG4ge1xuIFx0c3RhdGljIGNvbnN0IGNoYXIgKm5hbWUgPSBcJiMzNDtba3ZtLWdtZW1dXCYjMzQ7O1xuQEAgLTY0MCw2ICYjNDM7NzEwLDY2IEBAIGludCBrdm1fZ21lbV9jcmVhdGUoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2NyZWF0ZV9ndWVzdF9tZW1mZCAqYXJncylcbiBcdHJldHVybiBfX2t2bV9nbWVtX2NyZWF0ZShrdm0sIHNpemUsIGZsYWdzKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgX19rdm1fZ21lbV9jaGVja19ub19jaGFuZ2Uoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpvbGQsXG4mIzQzO1x0XHRcdFx0ICAgICAgc3RydWN0IGZpbGUgKm9sZF9maWxlLCB1bnNpZ25lZCBpbnQgZmQsXG4mIzQzO1x0XHRcdFx0ICAgICAgbG9mZl90IG9mZnNldClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBmaWxlICpuZXdfZmlsZTtcbiYjNDM7XG4mIzQzO1x0bmV3X2ZpbGUgPSBmZ2V0KGZkKTtcbiYjNDM7XHRpZiAoIW5ld19maWxlKVxuJiM0MztcdFx0cmV0dXJuIC1FQkFERjtcbiYjNDM7XHRpZiAobmV3X2ZpbGUgIT0gb2xkX2ZpbGUpIHtcbiYjNDM7XHRcdGZwdXQobmV3X2ZpbGUpO1xuJiM0MztcdFx0cmV0dXJuIC1FQkFERjtcbiYjNDM7XHR9XG4mIzQzO1x0ZnB1dChuZXdfZmlsZSk7XG4mIzQzO1xuJiM0MztcdGlmIChvbGQtXHUwMDNlZ21lbS5wZ29mZiAhPSBvZmZzZXQgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCBrdm1fZ21lbV9jaGVja19ub19jaGFuZ2Uoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpvbGQsXG4mIzQzO1x0XHRcdCAgICAgdW5zaWduZWQgaW50IGZkLCBsb2ZmX3Qgb2Zmc2V0KVxuJiM0Mzt7XG4mIzQzO1x0Q0xBU1MoZ21lbV9nZXRfZmlsZSwgb2xkX2ZpbGUpKG9sZCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBfX2t2bV9nbWVtX2NoZWNrX25vX2NoYW5nZShrdm0sIG9sZCwgb2xkX2ZpbGUsIGZkLCBvZmZzZXQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQga3ZtX2dtZW1fY2hhbmdlX2ZsYWdzKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqb2xkLFxuJiM0MztcdFx0XHQgIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm5ldywgdW5zaWduZWQgaW50IGZkLFxuJiM0MztcdFx0XHQgIGxvZmZfdCBvZmZzZXQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZ21lbV9maWxlICpvbGRfZjtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNmt2bS1cdTAwM2VzbG90c19sb2NrKTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFrdm1fbWVtc2xvdF9pc19nbWVtX29ubHkob2xkKSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRDTEFTUyhnbWVtX2dldF9maWxlLCBvbGRfZmlsZSkob2xkKTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gX19rdm1fZ21lbV9jaGVja19ub19jaGFuZ2Uoa3ZtLCBvbGQsIG9sZF9maWxlLCBmZCwgb2Zmc2V0KTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0b2xkX2YgPSBvbGRfZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGE7XG4mIzQzO1x0aWYgKHhhX2xvYWQoXHUwMDI2b2xkX2YtXHUwMDNlYmluZGluZ3MsIG9sZC1cdTAwM2VnbWVtLnBnb2ZmKSAhPSBtZW1zbG90X3RvX3hhX3ZhbHVlKG5ldykpIHtcbiYjNDM7XHRcdFdBUk5fT05fT05DRSh4YV90b192YWx1ZSh4YV9sb2FkKFx1MDAyNm9sZF9mLVx1MDAzZWJpbmRpbmdzLCBvbGQtXHUwMDNlZ21lbS5wZ29mZikpKTtcbiYjNDM7XHRcdHJldHVybiAtRUlPO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0bmV3LVx1MDAzZWdtZW0uZmlsZSA9IG9sZC1cdTAwM2VnbWVtLmZpbGU7XG4mIzQzO1x0bmV3LVx1MDAzZWdtZW0ucGdvZmYgPSBvbGQtXHUwMDNlZ21lbS5wZ29mZjtcbiYjNDM7XHRuZXctXHUwMDNlZmxhZ3MgfD0gS1ZNX01FTVNMT1RfR01FTV9PTkxZO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiBpbnQga3ZtX2dtZW1fYmluZChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QsXG4gXHRcdCAgdW5zaWduZWQgaW50IGZkLCB1b2ZmX3Qgb2Zmc2V0KVxuIHtcbkBAIC02NjksNiAmIzQzOzc5OSwxMSBAQCBpbnQga3ZtX2dtZW1fYmluZChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QsXG4gXHRpZiAoIVBBR0VfQUxJR05FRChvZmZzZXQpIHx8IG9mZnNldCAmIzQzOyBzaXplIFx1MDAzZSBpX3NpemVfcmVhZChpbm9kZSkpXG4gXHRcdGdvdG8gZXJyO1xuIFxuJiM0MztcdGlmIChzbG90LVx1MDAzZWZsYWdzIFx1MDAyNiBLVk1fTUVNX0xPR19ESVJUWV9QQUdFUyBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgKCFrdm1fZ21lbV9zdXBwb3J0c19tbWFwKGlub2RlKSB8fFxuJiM0MztcdCAgICAgIWt2bV9hcmNoX3N1cHBvcnRzX2dtZW1fbW1hcF9kaXJ0eV9sb2dnaW5nKGt2bSkpKVxuJiM0MztcdFx0Z290byBlcnI7XG4mIzQzO1xuIFx0ZmlsZW1hcF9pbnZhbGlkYXRlX2xvY2soaW5vZGUtXHUwMDNlaV9tYXBwaW5nKTtcbiBcbiBcdHN0YXJ0ID0gb2Zmc2V0IFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuQEAgLTY5MSw3ICYjNDM7ODI2LDcgQEAgaW50IGt2bV9nbWVtX2JpbmQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LFxuIFx0aWYgKGt2bV9nbWVtX3N1cHBvcnRzX21tYXAoaW5vZGUpKVxuIFx0XHRzbG90LVx1MDAzZWZsYWdzIHw9IEtWTV9NRU1TTE9UX0dNRU1fT05MWTtcbiBcbi1cdHhhX3N0b3JlX3JhbmdlKFx1MDAyNmYtXHUwMDNlYmluZGluZ3MsIHN0YXJ0LCBlbmQgLSAxLCBzbG90LCBHRlBfS0VSTkVMKTtcbiYjNDM7XHR4YV9zdG9yZV9yYW5nZShcdTAwMjZmLVx1MDAzZWJpbmRpbmdzLCBzdGFydCwgZW5kIC0gMSwgbWVtc2xvdF90b194YV92YWx1ZShzbG90KSwgR0ZQX0tFUk5FTCk7XG4gXHRmaWxlbWFwX2ludmFsaWRhdGVfdW5sb2NrKGlub2RlLVx1MDAzZWlfbWFwcGluZyk7XG4gXG4gXHQvKlxuQEAgLTc2NSw4ICYjNDM7OTAwLDggQEAgc3RhdGljIHN0cnVjdCBmb2xpbyAqX19rdm1fZ21lbV9nZXRfcGZuKHN0cnVjdCBmaWxlICpmaWxlLFxuIFx0XHRyZXR1cm4gRVJSX1BUUigtRUZBVUxUKTtcbiBcdH1cbiBcbi1cdGlmICh4YV9sb2FkKFx1MDAyNmYtXHUwMDNlYmluZGluZ3MsIGluZGV4KSAhPSBzbG90KSB7XG4tXHRcdFdBUk5fT05fT05DRSh4YV9sb2FkKFx1MDAyNmYtXHUwMDNlYmluZGluZ3MsIGluZGV4KSk7XG4mIzQzO1x0aWYgKHhhX2xvYWQoXHUwMDI2Zi1cdTAwM2ViaW5kaW5ncywgaW5kZXgpICE9IG1lbXNsb3RfdG9feGFfdmFsdWUoc2xvdCkpIHtcbiYjNDM7XHRcdFdBUk5fT05fT05DRSh4YV90b192YWx1ZSh4YV9sb2FkKFx1MDAyNmYtXHUwMDNlYmluZGluZ3MsIGluZGV4KSkpO1xuIFx0XHRyZXR1cm4gRVJSX1BUUigtRUlPKTtcbiBcdH1cbiBcbmRpZmYgLS1naXQgYS92aXJ0L2t2bS9rdm1fbWFpbi5jIGIvdmlydC9rdm0va3ZtX21haW4uY1xuaW5kZXggZTQ0YzIwYzA0OTYxMGQuLmFmMzgwZThmMmI2OGQ0IDEwMDY0NFxuLS0tIGEvdmlydC9rdm0va3ZtX21haW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvdmlydC9rdm0va3ZtX21haW4uY1xuQEAgLTE1NzMsMTQgJiM0MzsxNTczLDE0IEBAIHN0YXRpYyB2b2lkIGt2bV9yZXBsYWNlX21lbXNsb3Qoc3RydWN0IGt2bSAqa3ZtLFxuIHN0YXRpYyBpbnQgY2hlY2tfbWVtb3J5X3JlZ2lvbl9mbGFncyhzdHJ1Y3Qga3ZtICprdm0sXG4gXHRcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBrdm1fdXNlcnNwYWNlX21lbW9yeV9yZWdpb24yICptZW0pXG4ge1xuLVx0dTMyIHZhbGlkX2ZsYWdzID0gS1ZNX01FTV9MT0dfRElSVFlfUEFHRVM7XG4mIzQzO1x0dTMyIHZhbGlkX2ZsYWdzID0gMDtcbiBcbiBcdGlmIChJU19FTkFCTEVEKENPTkZJR19LVk1fR1VFU1RfTUVNRkQpKVxuIFx0XHR2YWxpZF9mbGFncyB8PSBLVk1fTUVNX0dVRVNUX01FTUZEO1xuIFxuLVx0LyogRGlydHkgbG9nZ2luZyBwcml2YXRlIG1lbW9yeSBpcyBub3QgY3VycmVudGx5IHN1cHBvcnRlZC4gKi9cbi1cdGlmIChtZW0tXHUwMDNlZmxhZ3MgXHUwMDI2IEtWTV9NRU1fR1VFU1RfTUVNRkQpXG4tXHRcdHZhbGlkX2ZsYWdzIFx1MDAyNj0gfktWTV9NRU1fTE9HX0RJUlRZX1BBR0VTO1xuJiM0MztcdGlmICghKG1lbS1cdTAwM2VmbGFncyBcdTAwMjYgS1ZNX01FTV9HVUVTVF9NRU1GRCkgfHxcbiYjNDM7XHQgICAga3ZtX2FyY2hfc3VwcG9ydHNfZ21lbV9tbWFwX2RpcnR5X2xvZ2dpbmcoa3ZtKSlcbiYjNDM7XHRcdHZhbGlkX2ZsYWdzIHw9IEtWTV9NRU1fTE9HX0RJUlRZX1BBR0VTO1xuIFxuIFx0LypcbiBcdCAqIEdVRVNUX01FTUZEIGlzIGluY29tcGF0aWJsZSB3aXRoIHJlYWQtb25seSBtZW1zbG90cywgYXMgd3JpdGVzIHRvXG5AQCAtMTczOSwxNiAmIzQzOzE3MzksNiBAQCBzdGF0aWMgdm9pZCBrdm1fY29tbWl0X21lbW9yeV9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLFxuIFx0XHQgKi9cbiBcdFx0aWYgKG9sZC1cdTAwM2VkaXJ0eV9iaXRtYXAgXHUwMDI2XHUwMDI2ICFuZXctXHUwMDNlZGlydHlfYml0bWFwKVxuIFx0XHRcdGt2bV9kZXN0cm95X2RpcnR5X2JpdG1hcChvbGQpO1xuLVxuLVx0XHQvKlxuLVx0XHQgKiBVbmJpbmQgdGhlIGd1ZXN0X21lbWZkIGluc3RhbmNlIGFzIG5lZWRlZDsgdGhlIEBuZXcgc2xvdCBoYXNcbi1cdFx0ICogYWxyZWFkeSBjcmVhdGVkIGl0cyBvd24gYmluZGluZy4gIFRPRE86IERyb3AgdGhlIFdBUk4gd2hlblxuLVx0XHQgKiBkaXJ0eSBsb2dnaW5nIGd1ZXN0X21lbWZkIG1lbXNsb3RzIGlzIHN1cHBvcnRlZC4gIFVudGlsIHRoZW4sXG4tXHRcdCAqIGZsYWdzLW9ubHkgY2hhbmdlcyBvbiBndWVzdF9tZW1mZCBzbG90cyBzaG91bGQgYmUgaW1wb3NzaWJsZS5cbi1cdFx0ICovXG4tXHRcdGlmIChXQVJOX09OX09OQ0Uob2xkLVx1MDAzZWZsYWdzIFx1MDAyNiBLVk1fTUVNX0dVRVNUX01FTUZEKSlcbi1cdFx0XHRrdm1fZ21lbV91bmJpbmQob2xkKTtcbi1cbiBcdFx0LypcbiBcdFx0ICogVGhlIGZpbmFsIHF1aXJrLiAgRnJlZSB0aGUgZGV0YWNoZWQsIG9sZCBzbG90LCBidXQgb25seSBpdHNcbiBcdFx0ICogbWVtb3J5LCBub3QgYW55IG1ldGFkYXRhLiAgTWV0YWRhdGEsIGluY2x1ZGluZyBhcmNoIHNwZWNpZmljXG5AQCAtMjA3MywyMiAmIzQzOzIwNjMsMjcgQEAgc3RhdGljIGludCBrdm1fc2V0X21lbW9yeV9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLFxuIFx0XHRpZiAoKGt2bS1cdTAwM2Vucl9tZW1zbG90X3BhZ2VzICYjNDM7IG5wYWdlcykgXHUwMDNjIGt2bS1cdTAwM2Vucl9tZW1zbG90X3BhZ2VzKVxuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fSBlbHNlIHsgLyogTW9kaWZ5IGFuIGV4aXN0aW5nIHNsb3QuICovXG4tXHRcdC8qIFByaXZhdGUgbWVtc2xvdHMgYXJlIGltbXV0YWJsZSwgdGhleSBjYW4gb25seSBiZSBkZWxldGVkLiAqL1xuLVx0XHRpZiAobWVtLVx1MDAzZWZsYWdzIFx1MDAyNiBLVk1fTUVNX0dVRVNUX01FTUZEKVxuLVx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHRpZiAoKG1lbS1cdTAwM2V1c2Vyc3BhY2VfYWRkciAhPSBvbGQtXHUwMDNldXNlcnNwYWNlX2FkZHIpIHx8XG4gXHRcdCAgICAobnBhZ2VzICE9IG9sZC1cdTAwM2VucGFnZXMpIHx8XG4gXHRcdCAgICAoKG1lbS1cdTAwM2VmbGFncyBeIG9sZC1cdTAwM2VmbGFncykgXHUwMDI2IChLVk1fTUVNX1JFQURPTkxZIHwgS1ZNX01FTV9HVUVTVF9NRU1GRCkpKVxuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFxuLVx0XHRpZiAoYmFzZV9nZm4gIT0gb2xkLVx1MDAzZWJhc2VfZ2ZuKVxuJiM0MztcdFx0aWYgKGJhc2VfZ2ZuICE9IG9sZC1cdTAwM2ViYXNlX2dmbikge1xuIFx0XHRcdGNoYW5nZSA9IEtWTV9NUl9NT1ZFO1xuLVx0XHRlbHNlIGlmIChtZW0tXHUwMDNlZmxhZ3MgIT0gb2xkLVx1MDAzZWZsYWdzKVxuJiM0MztcdFx0fSBlbHNlIGlmIChtZW0tXHUwMDNlZmxhZ3MgIT0gKG9sZC1cdTAwM2VmbGFncyBcdTAwMjYgTUVNU0xPVF9VU0VSX0ZMQUdTX01BU0spKSB7XG4gXHRcdFx0Y2hhbmdlID0gS1ZNX01SX0ZMQUdTX09OTFk7XG4tXHRcdGVsc2UgLyogTm90aGluZyB0byBjaGFuZ2UuICovXG4mIzQzO1x0XHR9IGVsc2UgaWYgKG1lbS1cdTAwM2VmbGFncyBcdTAwMjYgS1ZNX01FTV9HVUVTVF9NRU1GRCkge1xuJiM0MztcdFx0XHRyZXR1cm4ga3ZtX2dtZW1fY2hlY2tfbm9fY2hhbmdlKGt2bSwgb2xkLCBtZW0tXHUwMDNlZ3Vlc3RfbWVtZmQsXG4mIzQzO1x0XHRcdFx0XHRcdFx0bWVtLVx1MDAzZWd1ZXN0X21lbWZkX29mZnNldCk7XG4mIzQzO1x0XHR9IGVsc2Uge1xuIFx0XHRcdHJldHVybiAwO1xuJiM0MztcdFx0fVxuIFx0fVxuIFxuJiM0MztcdGlmIChtZW0tXHUwMDNlZmxhZ3MgXHUwMDI2IEtWTV9NRU1fR1VFU1RfTUVNRkQgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIGNoYW5nZSAhPSBLVk1fTVJfQ1JFQVRFIFx1MDAyNlx1MDAyNiBjaGFuZ2UgIT0gS1ZNX01SX0ZMQUdTX09OTFkpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4gXHRpZiAoKGNoYW5nZSA9PSBLVk1fTVJfQ1JFQVRFIHx8IGNoYW5nZSA9PSBLVk1fTVJfTU9WRSkgXHUwMDI2XHUwMDI2XG4gXHQgICAga3ZtX2NoZWNrX21lbXNsb3Rfb3ZlcmxhcChzbG90cywgaWQsIGJhc2VfZ2ZuLCBiYXNlX2dmbiAmIzQzOyBucGFnZXMpKVxuIFx0XHRyZXR1cm4gLUVFWElTVDtcbkBAIC0yMTA1LDcgJiM0MzsyMTAwLDEyIEBAIHN0YXRpYyBpbnQga3ZtX3NldF9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSxcbiBcdG5ldy1cdTAwM2VmbGFncyA9IG1lbS1cdTAwM2VmbGFncztcbiBcdG5ldy1cdTAwM2V1c2Vyc3BhY2VfYWRkciA9IG1lbS1cdTAwM2V1c2Vyc3BhY2VfYWRkcjtcbiBcdGlmIChtZW0tXHUwMDNlZmxhZ3MgXHUwMDI2IEtWTV9NRU1fR1VFU1RfTUVNRkQpIHtcbi1cdFx0ciA9IGt2bV9nbWVtX2JpbmQoa3ZtLCBuZXcsIG1lbS1cdTAwM2VndWVzdF9tZW1mZCwgbWVtLVx1MDAzZWd1ZXN0X21lbWZkX29mZnNldCk7XG4mIzQzO1x0XHRpZiAoY2hhbmdlID09IEtWTV9NUl9DUkVBVEUpIHtcbiYjNDM7XHRcdFx0ciA9IGt2bV9nbWVtX2JpbmQoa3ZtLCBuZXcsIG1lbS1cdTAwM2VndWVzdF9tZW1mZCwgbWVtLVx1MDAzZWd1ZXN0X21lbWZkX29mZnNldCk7XG4mIzQzO1x0XHR9IGVsc2UgaWYgKGNoYW5nZSA9PSBLVk1fTVJfRkxBR1NfT05MWSkge1xuJiM0MztcdFx0XHRyID0ga3ZtX2dtZW1fY2hhbmdlX2ZsYWdzKGt2bSwgb2xkLCBuZXcsIG1lbS1cdTAwM2VndWVzdF9tZW1mZCxcbiYjNDM7XHRcdFx0XHRcdFx0ICBtZW0tXHUwMDNlZ3Vlc3RfbWVtZmRfb2Zmc2V0KTtcbiYjNDM7XHRcdH1cbiBcdFx0aWYgKHIpXG4gXHRcdFx0Z290byBvdXQ7XG4gXHR9XG5AQCAtMjExNyw3ICYjNDM7MjExNyw3IEBAIHN0YXRpYyBpbnQga3ZtX3NldF9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSxcbiBcdHJldHVybiAwO1xuIFxuIG91dF91bmJpbmQ6XG4tXHRpZiAobWVtLVx1MDAzZWZsYWdzIFx1MDAyNiBLVk1fTUVNX0dVRVNUX01FTUZEKVxuJiM0MztcdGlmICgobWVtLVx1MDAzZWZsYWdzIFx1MDAyNiBLVk1fTUVNX0dVRVNUX01FTUZEKSBcdTAwMjZcdTAwMjYgY2hhbmdlID09IEtWTV9NUl9DUkVBVEUpXG4gXHRcdGt2bV9nbWVtX3VuYmluZChuZXcpO1xuIG91dDpcbiBcdGtmcmVlKG5ldyk7XG5kaWZmIC0tZ2l0IGEvdmlydC9rdm0va3ZtX21tLmggYi92aXJ0L2t2bS9rdm1fbW0uaFxuaW5kZXggNzUxMGNhOTE1ZGQxYWEuLmM1OGRmZWIwZjNkZjU1IDEwMDY0NFxuLS0tIGEvdmlydC9rdm0va3ZtX21tLmhcbiYjNDM7JiM0MzsmIzQzOyBiL3ZpcnQva3ZtL2t2bV9tbS5oXG5AQCAtNzcsNiAmIzQzOzc3LDkgQEAgaW50IGt2bV9nbWVtX2NyZWF0ZShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fY3JlYXRlX2d1ZXN0X21lbWZkICphcmdzKTtcbiBpbnQga3ZtX2dtZW1fYmluZChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QsXG4gXHRcdCAgdW5zaWduZWQgaW50IGZkLCB1b2ZmX3Qgb2Zmc2V0KTtcbiB2b2lkIGt2bV9nbWVtX3VuYmluZChzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90KTtcbiYjNDM7aW50IGt2bV9nbWVtX2NoYW5nZV9mbGFncyhzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm9sZCxcbiYjNDM7XHRcdFx0ICBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpuZXcsIHVuc2lnbmVkIGludCBmZCxcbiYjNDM7XHRcdFx0ICBsb2ZmX3Qgb2Zmc2V0KTtcbiAjZWxzZVxuIHN0YXRpYyBpbmxpbmUgaW50IGt2bV9nbWVtX2luaXQoc3RydWN0IG1vZHVsZSAqbW9kdWxlKVxuIHtcbkBAIC05NSw2ICYjNDM7OTgsMTQgQEAgc3RhdGljIGlubGluZSB2b2lkIGt2bV9nbWVtX3VuYmluZChzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90KVxuIHtcbiBcdFdBUk5fT05fT05DRSgxKTtcbiB9XG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IGt2bV9nbWVtX2NoYW5nZV9mbGFncyhzdHJ1Y3Qga3ZtICprdm0sXG4mIzQzO1x0XHRcdFx0XHRzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpvbGQsXG4mIzQzO1x0XHRcdFx0XHRzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpuZXcsXG4mIzQzO1x0XHRcdFx0XHR1bnNpZ25lZCBpbnQgZmQsIGxvZmZfdCBvZmZzZXQpXG4mIzQzO3tcbiYjNDM7XHRXQVJOX09OX09OQ0UoMSk7XG4mIzQzO1x0cmV0dXJuIC1FSU87XG4mIzQzO31cbiAjZW5kaWYgLyogQ09ORklHX0tWTV9HVUVTVF9NRU1GRCAqL1xuIFxuICNlbmRpZiAvKiBfX0tWTV9NTV9IX18gKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxNzoyNjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1fZ21lbV9jaGFuZ2VfZmxhZ3MmIzM0OywKICAgICYjMzQ7a3ZtX2dtZW1fY2hlY2tfbm9fY2hhbmdlJiMzNDssCiAgICAmIzM0O19fa3ZtX2dtZW1faW52YWxpZGF0ZV9zdGFydCYjMzQ7LAogICAgJiMzNDtfX2t2bV9nbWVtX2ludmFsaWRhdGVfZW5kJiMzNDssCiAgICAmIzM0O2t2bV9nbWVtX2Vycm9yX2ZvbGlvJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgc3VwcG9ydCBmb3IgZGlydHkgcGFnZSBsb2dnaW5nIGZvciBgZ3Vlc3RfbWVtZmRgIGJhY2tlZCBtZW1zbG90cyBpbiBLVk0uIEl0IG1vZGlmaWVzIHRoZSBLVk0gbWVtb3J5IHJlZ2lvbiBjb25maWd1cmF0aW9uIGxvZ2ljIGFuZCB0aGUgaW52YWxpZGF0aW9uIHBhdGhzIGZvciBndWVzdCBtZW1vcnkuIFRoZXNlIGFyZSBjb3JlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiBLVk0gdGhhdCBjYW4gYmUgcmVhY2hlZCB2aWEgS1ZNIGlvY3RscyAoZS5nLiwgYEtWTV9TRVRfVVNFUl9NRU1PUllfUkVHSU9OMmApIGFuZCBtZW1vcnkgaW52YWxpZGF0aW9uIGV2ZW50cywgbWFraW5nIHRoZW0gaGlnaGx5IHJlbGV2YW50IGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAxZjNjN2FjNTU3MTc4OTljNGM5MWFjNDlmZGUzNjQ4ODVkODhlZTY5CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBKdWwgMiAxNzoyNjo1MyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdCBiL0RvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdAppbmRleCBhNWY5ZWU5MmY0M2U4ZC4uNTAxMmFmZTZhOWI1NTkgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QKQEAgLTk0OTMsNiAmIzQzOzk0OTMsMTUgQEAgdGFrZSBjYXJlIHRvIGRpZmZlcmVudGlhdGUgYmV0d2VlbiB0aGVzZSBjYXNlcy4KIFRoZSBwcmVzZW5jZSBvZiB0aGlzIGNhcGFiaWxpdHkgaW5kaWNhdGVzIHRoYXQgdGhlIG5lc3RlZCBLVk0gZ3Vlc3QgY2FuCiBzdGFydCBpbiBFU0EgbW9kZS4KIAomIzQzOzguNDggS1ZNX0NBUF9HVUVTVF9NRU1GRF9NTUFQX0xPR19ESVJUWV9QQUdFUwomIzQzOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQomIzQzOwomIzQzOzpBcmNoaXRlY3R1cmVzOiBhbGwKJiM0MzsKJiM0MztUaGUgcHJlc2VuY2Ugb2YgdGhpcyBjYXBhYmlsaXR5IGluZGljYXRlcyB0aGF0IG1lbXNsb3RzIGJhY2tlZCBieSBhIGd1ZXN0X21lbWZkCiYjNDM7ZmlsZSBkZXNjcmlwdG9yIGNyZWF0ZWQgd2l0aCB0aGUgR1VFU1RfTUVNRkRfRkxBR19NTUFQIGZsYWcgY2FuIGhhdmUgZGlydHkKJiM0MztwYWdlIGxvZ2dpbmcgZW5hYmxlZC4KJiM0MzsKIDkuIEtub3duIEtWTSBBUEkgcHJvYmxlbXMKID09PT09PT09PT09PT09PT09PT09PT09PT0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vYXJtLmMgYi9hcmNoL2FybTY0L2t2bS9hcm0uYwppbmRleCA1MGFkZmZmNzViZTgyZS4uZTkyZTVkN2I1MzNhZGEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQva3ZtL2FybS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQva3ZtL2FybS5jCkBAIC0zOTMsNiAmIzQzOzM5Myw5IEBAIGludCBrdm1fdm1faW9jdGxfY2hlY2tfZXh0ZW5zaW9uKHN0cnVjdCBrdm0gKmt2bSwgbG9uZyBleHQpCiAJY2FzZSBLVk1fQ0FQX0NPVU5URVJfT0ZGU0VUOgogCWNhc2UgS1ZNX0NBUF9BUk1fV1JJVEFCTEVfSU1QX0lEX1JFR1M6CiAJY2FzZSBLVk1fQ0FQX0FSTV9TRUFfVE9fVVNFUjoKJiM0MzsjaWZkZWYgQ09ORklHX0tWTV9HVUVTVF9NRU1GRAomIzQzOwljYXNlIEtWTV9DQVBfR1VFU1RfTUVNRkRfTU1BUF9MT0dfRElSVFlfUEFHRVM6CiYjNDM7I2VuZGlmCiAJCXIgPSAxOwogCQlicmVhazsKIAljYXNlIEtWTV9DQVBfU0VUX0dVRVNUX0RFQlVHMjoKQEAgLTQ5Myw2ICYjNDM7NDk2LDI1IEBAIGludCBrdm1fdm1faW9jdGxfY2hlY2tfZXh0ZW5zaW9uKHN0cnVjdCBrdm0gKmt2bSwgbG9uZyBleHQpCiAJcmV0dXJuIHI7CiB9CiAKJiM0MzsjaWZkZWYgQ09ORklHX0tWTV9HVUVTVF9NRU1GRAomIzQzO2Jvb2wga3ZtX2FyY2hfc3VwcG9ydHNfZ21lbV9tbWFwX2RpcnR5X2xvZ2dpbmcoc3RydWN0IGt2bSAqa3ZtKQomIzQzO3sKJiM0MzsJLyoKJiM0MzsJICogUHJvdGVjdGVkIHBLVk0gVk1zIGRvbiYjMzk7dCBhbGxvdyBkaXJ0eSBwYWdlIGxvZ2dpbmcsIGZhaWwgZWFybHkgaGVyZQomIzQzOwkgKiBpbnN0ZWFkIG9mIGluIGt2bV9hcmNoX3ByZXBhcmVfbWVtb3J5X3JlZ2lvbigpLgomIzQzOwkgKgomIzQzOwkgKiBLVk1fQ0FQX0dVRVNUX01FTUZEX01NQVBfTE9HX0RJUlRZX1BBR0VTIGlzIG5vdCBhdmFpbGFibGUgZm9yIGEKJiM0MzsJICogcHJvdGVjdGVkIHBLVk0gVk0sIGFuZCByZXR1cm5pbmcgZmFsc2UgbWVhbnMgdGhhdAomIzQzOwkgKiBLVk1fU0VUX1VTRVJfTUVNT1JZX1JFR0lPTjIgZmFpbHMgd2l0aCBFSU5WQUwsIHdoaWNoIGlzIGNvbnNpc3RlbnQKJiM0MzsJICogd2l0aCB1bnN1cHBvcnRlZCBtZW1zbG90IGZsYWdzLgomIzQzOwkgKi8KJiM0MzsJaWYgKCFpc19wcm90ZWN0ZWRfa3ZtX2VuYWJsZWQoKSkKJiM0MzsJCXJldHVybiB0cnVlOwomIzQzOwomIzQzOwlyZXR1cm4ga3ZtX3Brdm1fZXh0X2FsbG93ZWQoa3ZtLCBLVk1fQ0FQX0dVRVNUX01FTUZEX01NQVBfTE9HX0RJUlRZX1BBR0VTKTsKJiM0Mzt9CiYjNDM7I2VuZGlmCiYjNDM7CiBsb25nIGt2bV9hcmNoX2Rldl9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwKIAkJCXVuc2lnbmVkIGludCBpb2N0bCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7CmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9tbXUuYyBiL2FyY2gvYXJtNjQva3ZtL21tdS5jCmluZGV4IDZjOTQxYWFhMTBjNjM5Li5mNmU2ZGUxNTNjZTI1MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9rdm0vbW11LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9rdm0vbW11LmMKQEAgLTE2NDgsNyAmIzQzOzE2NDgsOCBAQCBzdGF0aWMgaW50IGdtZW1fYWJvcnQoY29uc3Qgc3RydWN0IGt2bV9zMl9mYXVsdF9kZXNjICpzMmZkKQogCQlyZXR1cm4gcmV0OwogCX0KIAotCWlmICghKHMyZmQtJmd0O21lbXNsb3QtJmd0O2ZsYWdzICZhbXA7IEtWTV9NRU1fUkVBRE9OTFkpKQomIzQzOwlpZiAoIShzMmZkLSZndDttZW1zbG90LSZndDtmbGFncyAmYW1wOyBLVk1fTUVNX1JFQURPTkxZKSAmYW1wOyZhbXA7CiYjNDM7CSAgICAoIWt2bV9zbG90X2RpcnR5X3RyYWNrX2VuYWJsZWQoczJmZC0mZ3Q7bWVtc2xvdCkgfHwgd3JpdGVfZmF1bHQpKQogCQlwcm90IHw9IEtWTV9QR1RBQkxFX1BST1RfVzsKIAogCWlmIChzMmZkLSZndDtuZXN0ZWQpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmggYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgKaW5kZXggYWI4Y2ZhZWM4MmQzMWUuLmM0NGU5MjUzZWI0MDBhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oCkBAIC01Niw2ICYjNDM7NTYsNyBAQAogICovCiAjZGVmaW5lIEtWTV9NRU1TTE9UX0lOVkFMSUQJCQkoMVVMICZsdDsmbHQ7IDE2KQogI2RlZmluZSBLVk1fTUVNU0xPVF9HTUVNX09OTFkJCQkoMVVMICZsdDsmbHQ7IDE3KQomIzQzOyNkZWZpbmUgTUVNU0xPVF9VU0VSX0ZMQUdTX01BU0sJCQkweGZmZmYKIAogLyoKICAqIEJpdCA2MyBvZiB0aGUgbWVtc2xvdCBnZW5lcmF0aW9uIG51bWJlciBpcyBhbiAmIzM0O3VwZGF0ZSBpbi1wcm9ncmVzcyBmbGFnJiMzNDssCkBAIC03MzEsNiAmIzQzOzczMiw5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBrdm1fYXJjaF9oYXNfcHJpdmF0ZV9tZW0oc3RydWN0IGt2bSAqa3ZtKQogCiAjaWZkZWYgQ09ORklHX0tWTV9HVUVTVF9NRU1GRAogYm9vbCBrdm1fYXJjaF9zdXBwb3J0c19nbWVtX2luaXRfc2hhcmVkKHN0cnVjdCBrdm0gKmt2bSk7CiYjNDM7Ym9vbCBrdm1fYXJjaF9zdXBwb3J0c19nbWVtX21tYXBfZGlydHlfbG9nZ2luZyhzdHJ1Y3Qga3ZtICprdm0pOwomIzQzO2ludCBrdm1fZ21lbV9jaGVja19ub19jaGFuZ2Uoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LAomIzQzOwkJCSAgICAgdW5zaWduZWQgaW50IGZkLCBsb2ZmX3Qgb2Zmc2V0KTsKIAogc3RhdGljIGlubGluZSB1NjQga3ZtX2dtZW1fZ2V0X3N1cHBvcnRlZF9mbGFncyhzdHJ1Y3Qga3ZtICprdm0pCiB7CkBAIC03NDEsNiAmIzQzOzc0NSwxNyBAQCBzdGF0aWMgaW5saW5lIHU2NCBrdm1fZ21lbV9nZXRfc3VwcG9ydGVkX2ZsYWdzKHN0cnVjdCBrdm0gKmt2bSkKIAogCXJldHVybiBmbGFnczsKIH0KJiM0MzsjZWxzZQomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBrdm1fYXJjaF9zdXBwb3J0c19nbWVtX21tYXBfZGlydHlfbG9nZ2luZyhzdHJ1Y3Qga3ZtICprdm0pCiYjNDM7ewomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzO3N0YXRpYyBpbmxpbmUgaW50IGt2bV9nbWVtX2NoZWNrX25vX2NoYW5nZShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QsCiYjNDM7CQkJCQkgICB1bnNpZ25lZCBpbnQgZmQsIGxvZmZfdCBvZmZzZXQpCiYjNDM7ewomIzQzOwlXQVJOX09OX09OQ0UoMSk7CiYjNDM7CXJldHVybiAtRUlPOwomIzQzO30KICNlbmRpZgogCiAjaWZuZGVmIGt2bV9hcmNoX2hhc19yZWFkb25seV9tZW0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaCBiL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaAppbmRleCA0MTkwMTEwOTdmYThlMi4uNWE1M2UyZTE5YjJmYjIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3VhcGkvbGludXgva3ZtLmgKQEAgLTk5Nyw2ICYjNDM7OTk3LDcgQEAgc3RydWN0IGt2bV9lbmFibGVfY2FwIHsKICNkZWZpbmUgS1ZNX0NBUF9TMzkwX0tFWU9QIDI0NwogI2RlZmluZSBLVk1fQ0FQX1MzOTBfVlNJRV9FU0FNT0RFIDI0OAogI2RlZmluZSBLVk1fQ0FQX1MzOTBfSFBBR0VfMkcgMjQ5CiYjNDM7I2RlZmluZSBLVk1fQ0FQX0dVRVNUX01FTUZEX01NQVBfTE9HX0RJUlRZX1BBR0VTIDI1MAogCiBzdHJ1Y3Qga3ZtX2lycV9yb3V0aW5nX2lycWNoaXAgewogCV9fdTMyIGlycWNoaXA7CmRpZmYgLS1naXQgYS92aXJ0L2t2bS9ndWVzdF9tZW1mZC5jIGIvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuYwppbmRleCBkYjU3YzU3NjZhYjYwNC4uMjEwYmRkNzZmMGFhZDcgMTAwNjQ0Ci0tLSBhL3ZpcnQva3ZtL2d1ZXN0X21lbWZkLmMKJiM0MzsmIzQzOyYjNDM7IGIvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuYwpAQCAtMjUsNiAmIzQzOzI1LDcgQEAgc3RydWN0IGdtZW1fZmlsZSB7CiAJc3RydWN0IGt2bSAqa3ZtOwogCXN0cnVjdCB4YXJyYXkgYmluZGluZ3M7CiAJc3RydWN0IGxpc3RfaGVhZCBlbnRyeTsKJiM0MzsJYm9vbCBmb3VuZF9tZW1zbG90OwkvKiBVc2VkIGZvciBiYWxhbmNpbmcgaW52YWxpZGF0aW9ucyB3aGVuIHB1bmNoaW5nIGEgaG9sZSAqLwogfTsKIAogc3RydWN0IGdtZW1faW5vZGUgewpAQCAtNDMsNiAmIzQzOzQ0LDI5IEBAIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgc3RydWN0IGdtZW1faW5vZGUgKkdNRU1fSShzdHJ1Y3QgaW5vZGUgKmlub2RlKQogI2RlZmluZSBrdm1fZ21lbV9mb3JfZWFjaF9maWxlKGYsIGlub2RlKSBcCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShmLCAmYW1wO0dNRU1fSShpbm9kZSktJmd0O2dtZW1fZmlsZV9saXN0LCBlbnRyeSkKIAomIzQzO3N0YXRpYyB2b2lkICptZW1zbG90X3RvX3hhX3ZhbHVlKHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QpCiYjNDM7ewomIzQzOwlXQVJOX09OX09OQ0Uoc2l6ZW9mKHNsb3QtJmd0O2FzX2lkKSAmZ3Q7IDE2KTsKJiM0MzsJV0FSTl9PTl9PTkNFKHNpemVvZihzbG90LSZndDtpZCkgJmd0OyAxNik7CiYjNDM7CVdBUk5fT05fT05DRShzaXplb2Yoc2xvdC0mZ3Q7YXNfaWQpICYjNDM7IHNpemVvZihzbG90LSZndDtpZCkgJmd0OyBzaXplb2YodW5zaWduZWQgbG9uZykpOwomIzQzOwomIzQzOwlyZXR1cm4geGFfbWtfdmFsdWUoKCh1bnNpZ25lZCBsb25nKXNsb3QtJmd0O2FzX2lkKSAmbHQ7Jmx0OyAxNiB8ICh1bnNpZ25lZCBsb25nKXNsb3QtJmd0O2lkKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnhhX3ZhbHVlX3RvX21lbXNsb3Qoc3RydWN0IGt2bSAqa3ZtLCBjb25zdCB2b2lkICplbnRyeSkKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZnVsbF9pZCA9IHhhX3RvX3ZhbHVlKGVudHJ5KTsKJiM0MzsJdTE2IGFzX2lkID0gKGZ1bGxfaWQgJmd0OyZndDsgMTYpICZhbXA7IFUxNl9NQVg7CiYjNDM7CXNob3J0IGlkID0gZnVsbF9pZCAmYW1wOyBVMTZfTUFYOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBEbyBub3QgaWdub3JlIEtWTV9NRU1TTE9UX0lOVkFMSUQgbWVtc2xvdHMsIGFzIHdlIHdhbnQKJiM0MzsJICogLSZndDtlcnJvcl9yZW1vdmVfZm9saW8oKSwgd2hlbiBpdCByYWNlcyB3aXRoIG1lbXNsb3QgZGVsZXRpb24sIHRvIGhhdmUKJiM0MzsJICogIHVubWFwcGVkIHRoZSBtZW1vcnkgdXBvbiBjb21wbGV0aW9uLgomIzQzOwkgKi8KJiM0MzsJcmV0dXJuIGlkX3RvX21lbXNsb3QoX19rdm1fbWVtc2xvdHMoa3ZtLCBhc19pZCksIGlkKTsKJiM0Mzt9CiYjNDM7CiAvKioKICAqIGZvbGlvX2ZpbGVfcGZuIC0gbGlrZSBmb2xpb19maWxlX3BhZ2UsIGJ1dCByZXR1cm4gYSBwZm4uCiAgKiBAZm9saW86IFRoZSBmb2xpbyB3aGljaCBjb250YWlucyB0aGlzIGluZGV4LgpAQCAtMTU3LDcgJiM0MzsxODEsNyBAQCBzdGF0aWMgZW51bSBrdm1fZ2ZuX3JhbmdlX2ZpbHRlciBrdm1fZ21lbV9nZXRfaW52YWxpZGF0ZV9maWx0ZXIoc3RydWN0IGlub2RlICppbgogCXJldHVybiBLVk1fRklMVEVSX1BSSVZBVEU7CiB9CiAKLXN0YXRpYyB2b2lkIF9fa3ZtX2dtZW1faW52YWxpZGF0ZV9zdGFydChzdHJ1Y3QgZ21lbV9maWxlICpmLCBwZ29mZl90IHN0YXJ0LAomIzQzO3N0YXRpYyBib29sIF9fa3ZtX2dtZW1faW52YWxpZGF0ZV9zdGFydChzdHJ1Y3QgZ21lbV9maWxlICpmLCBwZ29mZl90IHN0YXJ0LAogCQkJCQlwZ29mZl90IGVuZCwKIAkJCQkJZW51bSBrdm1fZ2ZuX3JhbmdlX2ZpbHRlciBhdHRyX2ZpbHRlcikKIHsKQEAgLTE2NSw5ICYjNDM7MTg5LDE1IEBAIHN0YXRpYyB2b2lkIF9fa3ZtX2dtZW1faW52YWxpZGF0ZV9zdGFydChzdHJ1Y3QgZ21lbV9maWxlICpmLCBwZ29mZl90IHN0YXJ0LAogCXN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3Q7CiAJc3RydWN0IGt2bSAqa3ZtID0gZi0mZ3Q7a3ZtOwogCXVuc2lnbmVkIGxvbmcgaW5kZXg7CiYjNDM7CXZvaWQgKmVudHJ5OwogCi0JeGFfZm9yX2VhY2hfcmFuZ2UoJmFtcDtmLSZndDtiaW5kaW5ncywgaW5kZXgsIHNsb3QsIHN0YXJ0LCBlbmQgLSAxKSB7Ci0JCXBnb2ZmX3QgcGdvZmYgPSBzbG90LSZndDtnbWVtLnBnb2ZmOwomIzQzOwl4YV9mb3JfZWFjaF9yYW5nZSgmYW1wO2YtJmd0O2JpbmRpbmdzLCBpbmRleCwgZW50cnksIHN0YXJ0LCBlbmQgLSAxKSB7CiYjNDM7CQlwZ29mZl90IHBnb2ZmOwomIzQzOwomIzQzOwkJc2xvdCA9IHhhX3ZhbHVlX3RvX21lbXNsb3Qoa3ZtLCBlbnRyeSk7CiYjNDM7CQlpZiAoIXNsb3QpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CQlwZ29mZiA9IHNsb3QtJmd0O2dtZW0ucGdvZmY7CiAKIAkJc3RydWN0IGt2bV9nZm5fcmFuZ2UgZ2ZuX3JhbmdlID0gewogCQkJLnN0YXJ0ID0gc2xvdC0mZ3Q7YmFzZV9nZm4gJiM0MzsgbWF4KHBnb2ZmLCBzdGFydCkgLSBwZ29mZiwKQEAgLTE5Miw2ICYjNDM7MjIyLDggQEAgc3RhdGljIHZvaWQgX19rdm1fZ21lbV9pbnZhbGlkYXRlX3N0YXJ0KHN0cnVjdCBnbWVtX2ZpbGUgKmYsIHBnb2ZmX3Qgc3RhcnQsCiAKIAlpZiAoZm91bmRfbWVtc2xvdCkKIAkJS1ZNX01NVV9VTkxPQ0soa3ZtKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGZvdW5kX21lbXNsb3Q7CiB9CiAKIHN0YXRpYyB2b2lkIGt2bV9nbWVtX2ludmFsaWRhdGVfc3RhcnQoc3RydWN0IGlub2RlICppbm9kZSwgcGdvZmZfdCBzdGFydCwKQEAgLTE5OSwxMSAmIzQzOzIzMSwyMiBAQCBzdGF0aWMgdm9pZCBrdm1fZ21lbV9pbnZhbGlkYXRlX3N0YXJ0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHBnb2ZmX3Qgc3RhcnQsCiB7CiAJZW51bSBrdm1fZ2ZuX3JhbmdlX2ZpbHRlciBhdHRyX2ZpbHRlcjsKIAlzdHJ1Y3QgZ21lbV9maWxlICpmOwomIzQzOwlzdHJ1Y3Qga3ZtICprdm07CiYjNDM7CWludCBpZHg7CiAKIAlhdHRyX2ZpbHRlciA9IGt2bV9nbWVtX2dldF9pbnZhbGlkYXRlX2ZpbHRlcihpbm9kZSk7CiAKLQlrdm1fZ21lbV9mb3JfZWFjaF9maWxlKGYsIGlub2RlKQotCQlfX2t2bV9nbWVtX2ludmFsaWRhdGVfc3RhcnQoZiwgc3RhcnQsIGVuZCwgYXR0cl9maWx0ZXIpOwomIzQzOwlrdm1fZ21lbV9mb3JfZWFjaF9maWxlKGYsIGlub2RlKSB7CiYjNDM7CQlrdm0gPSBmLSZndDtrdm07CiYjNDM7CQlpZHggPSBzcmN1X3JlYWRfbG9jaygmYW1wO2t2bS0mZ3Q7c3JjdSk7CiYjNDM7CQkvKgomIzQzOwkJICogVGhpcyBpcyBzYWZlIHRvIGRvIGJlY2F1c2UgY2FsbHMgdG8KJiM0MzsJCSAqIGt2bV9nbWVtX2ludmFsaWRhdGVfc3RhcnQoKSBhcmUgc2VyaWFsaXplZCBieQomIzQzOwkJICogZmlsZW1hcF9pbnZhbGlkYXRlX2xvY2soKS4KJiM0MzsJCSAqLwomIzQzOwkJZi0mZ3Q7Zm91bmRfbWVtc2xvdCA9IF9fa3ZtX2dtZW1faW52YWxpZGF0ZV9zdGFydChmLCBzdGFydCwgZW5kLCBhdHRyX2ZpbHRlcik7CiYjNDM7CQlzcmN1X3JlYWRfdW5sb2NrKCZhbXA7a3ZtLSZndDtzcmN1LCBpZHgpOwomIzQzOwl9CiB9CiAKIHN0YXRpYyB2b2lkIF9fa3ZtX2dtZW1faW52YWxpZGF0ZV9lbmQoc3RydWN0IGdtZW1fZmlsZSAqZiwgcGdvZmZfdCBzdGFydCwKQEAgLTIyMyw4ICYjNDM7MjY2LDExIEBAIHN0YXRpYyB2b2lkIGt2bV9nbWVtX2ludmFsaWRhdGVfZW5kKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHBnb2ZmX3Qgc3RhcnQsCiB7CiAJc3RydWN0IGdtZW1fZmlsZSAqZjsKIAotCWt2bV9nbWVtX2Zvcl9lYWNoX2ZpbGUoZiwgaW5vZGUpCiYjNDM7CWt2bV9nbWVtX2Zvcl9lYWNoX2ZpbGUoZiwgaW5vZGUpIHsKJiM0MzsJCWlmICghZi0mZ3Q7Zm91bmRfbWVtc2xvdCkKJiM0MzsJCQljb250aW51ZTsKIAkJX19rdm1fZ21lbV9pbnZhbGlkYXRlX2VuZChmLCBzdGFydCwgZW5kKTsKJiM0MzsJfQogfQogCiBzdGF0aWMgbG9uZyBrdm1fZ21lbV9wdW5jaF9ob2xlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBsZW4pCkBAIC0zMjYsNiAmIzQzOzM3Miw3IEBAIHN0YXRpYyBpbnQga3ZtX2dtZW1fcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIAlzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90OwogCXN0cnVjdCBrdm0gKmt2bSA9IGYtJmd0O2t2bTsKIAl1bnNpZ25lZCBsb25nIGluZGV4OwomIzQzOwl2b2lkICplbnRyeTsKIAogCS8qCiAJICogUHJldmVudCBjb25jdXJyZW50IGF0dGVtcHRzIHRvICp1bmJpbmQqIGEgbWVtc2xvdC4gIFRoaXMgaXMgdGhlIGxhc3QKQEAgLTM0NCwxNyAmIzQzOzM5MSwxOCBAQCBzdGF0aWMgaW50IGt2bV9nbWVtX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiAKIAlmaWxlbWFwX2ludmFsaWRhdGVfbG9jayhpbm9kZS0mZ3Q7aV9tYXBwaW5nKTsKIAotCXhhX2Zvcl9lYWNoKCZhbXA7Zi0mZ3Q7YmluZGluZ3MsIGluZGV4LCBzbG90KQomIzQzOwl4YV9mb3JfZWFjaCgmYW1wO2YtJmd0O2JpbmRpbmdzLCBpbmRleCwgZW50cnkpIHsKJiM0MzsJCXNsb3QgPSB4YV92YWx1ZV90b19tZW1zbG90KGt2bSwgZW50cnkpOwogCQlXUklURV9PTkNFKHNsb3QtJmd0O2dtZW0uZmlsZSwgTlVMTCk7CiYjNDM7CX0KIAogCS8qCiAJICogQWxsIGluLWZsaWdodCBvcGVyYXRpb25zIGFyZSBnb25lIGFuZCBuZXcgYmluZGluZ3MgY2FuIGJlIGNyZWF0ZWQuCiAJICogWmFwIGFsbCBTUFRFcyBwb2ludGVkIGF0IGJ5IHRoaXMgZmlsZS4gIERvIG5vdCBmcmVlIHRoZSBiYWNraW5nCiAJICogbWVtb3J5LCBhcyBpdHMgbGlmZXRpbWUgaXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBpbm9kZSwgbm90IHRoZSBmaWxlLgogCSAqLwotCV9fa3ZtX2dtZW1faW52YWxpZGF0ZV9zdGFydChmLCAwLCAtMXVsLAotCQkJCSAgICBrdm1fZ21lbV9nZXRfaW52YWxpZGF0ZV9maWx0ZXIoaW5vZGUpKTsKLQlfX2t2bV9nbWVtX2ludmFsaWRhdGVfZW5kKGYsIDAsIC0xdWwpOwomIzQzOwlpZiAoX19rdm1fZ21lbV9pbnZhbGlkYXRlX3N0YXJ0KGYsIDAsIC0xdWwsIGt2bV9nbWVtX2dldF9pbnZhbGlkYXRlX2ZpbHRlcihpbm9kZSkpKQomIzQzOwkJX19rdm1fZ21lbV9pbnZhbGlkYXRlX2VuZChmLCAwLCAtMXVsKTsKIAogCWxpc3RfZGVsKCZhbXA7Zi0mZ3Q7ZW50cnkpOwogCkBAIC00OTgsMTQgJiM0Mzs1NDYsMjAgQEAgc3RhdGljIGludCBrdm1fZ21lbV9taWdyYXRlX2ZvbGlvKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAogCiBzdGF0aWMgaW50IGt2bV9nbWVtX2Vycm9yX2ZvbGlvKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogewomIzQzOwllbnVtIGt2bV9nZm5fcmFuZ2VfZmlsdGVyIGF0dHJfZmlsdGVyOwomIzQzOwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gbWFwcGluZy0mZ3Q7aG9zdDsKJiM0MzsJc3RydWN0IGdtZW1fZmlsZSAqZjsKIAlwZ29mZl90IHN0YXJ0LCBlbmQ7CiYjNDM7CWJvb2wgZm91bmRfbWVtc2xvdDsKJiM0MzsJc3RydWN0IGt2bSAqa3ZtOwomIzQzOwlpbnQgaWR4OwogCiAJZmlsZW1hcF9pbnZhbGlkYXRlX2xvY2tfc2hhcmVkKG1hcHBpbmcpOwogCiAJc3RhcnQgPSBmb2xpby0mZ3Q7aW5kZXg7CiAJZW5kID0gc3RhcnQgJiM0MzsgZm9saW9fbnJfcGFnZXMoZm9saW8pOwogCi0Ja3ZtX2dtZW1faW52YWxpZGF0ZV9zdGFydChtYXBwaW5nLSZndDtob3N0LCBzdGFydCwgZW5kKTsKJiM0MzsJYXR0cl9maWx0ZXIgPSBrdm1fZ21lbV9nZXRfaW52YWxpZGF0ZV9maWx0ZXIoaW5vZGUpOwogCiAJLyoKIAkgKiBEbyBub3QgdHJ1bmNhdGUgdGhlIHJhbmdlLCB3aGF0IGFjdGlvbiBpcyB0YWtlbiBpbiByZXNwb25zZSB0byB0aGUKQEAgLTUxNSw4ICYjNDM7NTY5LDE5IEBAIHN0YXRpYyBpbnQga3ZtX2dtZW1fZXJyb3JfZm9saW8oc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9sCiAJICogYXQgd2hpY2ggcG9pbnQgS1ZNIGNhbiBlaXRoZXIgdGVybWluYXRlIHRoZSBWTSBvciBwcm9wYWdhdGUgdGhlCiAJICogZXJyb3IgdG8gdXNlcnNwYWNlLgogCSAqLwomIzQzOwlrdm1fZ21lbV9mb3JfZWFjaF9maWxlKGYsIGlub2RlKSB7CiYjNDM7CQlrdm0gPSBmLSZndDtrdm07CiAKLQlrdm1fZ21lbV9pbnZhbGlkYXRlX2VuZChtYXBwaW5nLSZndDtob3N0LCBzdGFydCwgZW5kKTsKJiM0MzsJCWlkeCA9IHNyY3VfcmVhZF9sb2NrKCZhbXA7a3ZtLSZndDtzcmN1KTsKJiM0MzsJCWZvdW5kX21lbXNsb3QgPSBfX2t2bV9nbWVtX2ludmFsaWRhdGVfc3RhcnQoZiwgc3RhcnQsIGVuZCwgYXR0cl9maWx0ZXIpOwomIzQzOwkJc3JjdV9yZWFkX3VubG9jaygmYW1wO2t2bS0mZ3Q7c3JjdSwgaWR4KTsKJiM0MzsKJiM0MzsJCWlmIChmb3VuZF9tZW1zbG90KSB7CiYjNDM7CQkJS1ZNX01NVV9MT0NLKGt2bSk7CiYjNDM7CQkJa3ZtX21tdV9pbnZhbGlkYXRlX2VuZChrdm0pOwomIzQzOwkJCUtWTV9NTVVfVU5MT0NLKGt2bSk7CiYjNDM7CQl9CiYjNDM7CX0KIAogCWZpbGVtYXBfaW52YWxpZGF0ZV91bmxvY2tfc2hhcmVkKG1hcHBpbmcpOwogCkBAIC01NTcsNiAmIzQzOzYyMiwxMSBAQCBib29sIF9fd2VhayBrdm1fYXJjaF9zdXBwb3J0c19nbWVtX2luaXRfc2hhcmVkKHN0cnVjdCBrdm0gKmt2bSkKIAlyZXR1cm4gdHJ1ZTsKIH0KIAomIzQzO2Jvb2wgX193ZWFrIGt2bV9hcmNoX3N1cHBvcnRzX2dtZW1fbW1hcF9kaXJ0eV9sb2dnaW5nKHN0cnVjdCBrdm0gKmt2bSkKJiM0Mzt7CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IF9fa3ZtX2dtZW1fY3JlYXRlKHN0cnVjdCBrdm0gKmt2bSwgbG9mZl90IHNpemUsIHU2NCBmbGFncykKIHsKIAlzdGF0aWMgY29uc3QgY2hhciAqbmFtZSA9ICYjMzQ7W2t2bS1nbWVtXSYjMzQ7OwpAQCAtNjQwLDYgJiM0Mzs3MTAsNjYgQEAgaW50IGt2bV9nbWVtX2NyZWF0ZShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fY3JlYXRlX2d1ZXN0X21lbWZkICphcmdzKQogCXJldHVybiBfX2t2bV9nbWVtX2NyZWF0ZShrdm0sIHNpemUsIGZsYWdzKTsKIH0KIAomIzQzO3N0YXRpYyBpbnQgX19rdm1fZ21lbV9jaGVja19ub19jaGFuZ2Uoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpvbGQsCiYjNDM7CQkJCSAgICAgIHN0cnVjdCBmaWxlICpvbGRfZmlsZSwgdW5zaWduZWQgaW50IGZkLAomIzQzOwkJCQkgICAgICBsb2ZmX3Qgb2Zmc2V0KQomIzQzO3sKJiM0MzsJc3RydWN0IGZpbGUgKm5ld19maWxlOwomIzQzOwomIzQzOwluZXdfZmlsZSA9IGZnZXQoZmQpOwomIzQzOwlpZiAoIW5ld19maWxlKQomIzQzOwkJcmV0dXJuIC1FQkFERjsKJiM0MzsJaWYgKG5ld19maWxlICE9IG9sZF9maWxlKSB7CiYjNDM7CQlmcHV0KG5ld19maWxlKTsKJiM0MzsJCXJldHVybiAtRUJBREY7CiYjNDM7CX0KJiM0MzsJZnB1dChuZXdfZmlsZSk7CiYjNDM7CiYjNDM7CWlmIChvbGQtJmd0O2dtZW0ucGdvZmYgIT0gb2Zmc2V0ICZndDsmZ3Q7IFBBR0VfU0hJRlQpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO2ludCBrdm1fZ21lbV9jaGVja19ub19jaGFuZ2Uoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpvbGQsCiYjNDM7CQkJICAgICB1bnNpZ25lZCBpbnQgZmQsIGxvZmZfdCBvZmZzZXQpCiYjNDM7ewomIzQzOwlDTEFTUyhnbWVtX2dldF9maWxlLCBvbGRfZmlsZSkob2xkKTsKJiM0MzsKJiM0MzsJcmV0dXJuIF9fa3ZtX2dtZW1fY2hlY2tfbm9fY2hhbmdlKGt2bSwgb2xkLCBvbGRfZmlsZSwgZmQsIG9mZnNldCk7CiYjNDM7fQomIzQzOwomIzQzO2ludCBrdm1fZ21lbV9jaGFuZ2VfZmxhZ3Moc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpvbGQsCiYjNDM7CQkJICBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpuZXcsIHVuc2lnbmVkIGludCBmZCwKJiM0MzsJCQkgIGxvZmZfdCBvZmZzZXQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZ21lbV9maWxlICpvbGRfZjsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJbG9ja2RlcF9hc3NlcnRfaGVsZCgmYW1wO2t2bS0mZ3Q7c2xvdHNfbG9jayk7CiYjNDM7CiYjNDM7CWlmICgha3ZtX21lbXNsb3RfaXNfZ21lbV9vbmx5KG9sZCkpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJQ0xBU1MoZ21lbV9nZXRfZmlsZSwgb2xkX2ZpbGUpKG9sZCk7CiYjNDM7CiYjNDM7CXJldCA9IF9fa3ZtX2dtZW1fY2hlY2tfbm9fY2hhbmdlKGt2bSwgb2xkLCBvbGRfZmlsZSwgZmQsIG9mZnNldCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlvbGRfZiA9IG9sZF9maWxlLSZndDtwcml2YXRlX2RhdGE7CiYjNDM7CWlmICh4YV9sb2FkKCZhbXA7b2xkX2YtJmd0O2JpbmRpbmdzLCBvbGQtJmd0O2dtZW0ucGdvZmYpICE9IG1lbXNsb3RfdG9feGFfdmFsdWUobmV3KSkgewomIzQzOwkJV0FSTl9PTl9PTkNFKHhhX3RvX3ZhbHVlKHhhX2xvYWQoJmFtcDtvbGRfZi0mZ3Q7YmluZGluZ3MsIG9sZC0mZ3Q7Z21lbS5wZ29mZikpKTsKJiM0MzsJCXJldHVybiAtRUlPOwomIzQzOwl9CiYjNDM7CiYjNDM7CW5ldy0mZ3Q7Z21lbS5maWxlID0gb2xkLSZndDtnbWVtLmZpbGU7CiYjNDM7CW5ldy0mZ3Q7Z21lbS5wZ29mZiA9IG9sZC0mZ3Q7Z21lbS5wZ29mZjsKJiM0MzsJbmV3LSZndDtmbGFncyB8PSBLVk1fTUVNU0xPVF9HTUVNX09OTFk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIGludCBrdm1fZ21lbV9iaW5kKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCwKIAkJICB1bnNpZ25lZCBpbnQgZmQsIHVvZmZfdCBvZmZzZXQpCiB7CkBAIC02NjksNiAmIzQzOzc5OSwxMSBAQCBpbnQga3ZtX2dtZW1fYmluZChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QsCiAJaWYgKCFQQUdFX0FMSUdORUQob2Zmc2V0KSB8fCBvZmZzZXQgJiM0Mzsgc2l6ZSAmZ3Q7IGlfc2l6ZV9yZWFkKGlub2RlKSkKIAkJZ290byBlcnI7CiAKJiM0MzsJaWYgKHNsb3QtJmd0O2ZsYWdzICZhbXA7IEtWTV9NRU1fTE9HX0RJUlRZX1BBR0VTICZhbXA7JmFtcDsKJiM0MzsJICAgICgha3ZtX2dtZW1fc3VwcG9ydHNfbW1hcChpbm9kZSkgfHwKJiM0MzsJICAgICAha3ZtX2FyY2hfc3VwcG9ydHNfZ21lbV9tbWFwX2RpcnR5X2xvZ2dpbmcoa3ZtKSkpCiYjNDM7CQlnb3RvIGVycjsKJiM0MzsKIAlmaWxlbWFwX2ludmFsaWRhdGVfbG9jayhpbm9kZS0mZ3Q7aV9tYXBwaW5nKTsKIAogCXN0YXJ0ID0gb2Zmc2V0ICZndDsmZ3Q7IFBBR0VfU0hJRlQ7CkBAIC02OTEsNyAmIzQzOzgyNiw3IEBAIGludCBrdm1fZ21lbV9iaW5kKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCwKIAlpZiAoa3ZtX2dtZW1fc3VwcG9ydHNfbW1hcChpbm9kZSkpCiAJCXNsb3QtJmd0O2ZsYWdzIHw9IEtWTV9NRU1TTE9UX0dNRU1fT05MWTsKIAotCXhhX3N0b3JlX3JhbmdlKCZhbXA7Zi0mZ3Q7YmluZGluZ3MsIHN0YXJ0LCBlbmQgLSAxLCBzbG90LCBHRlBfS0VSTkVMKTsKJiM0MzsJeGFfc3RvcmVfcmFuZ2UoJmFtcDtmLSZndDtiaW5kaW5ncywgc3RhcnQsIGVuZCAtIDEsIG1lbXNsb3RfdG9feGFfdmFsdWUoc2xvdCksIEdGUF9LRVJORUwpOwogCWZpbGVtYXBfaW52YWxpZGF0ZV91bmxvY2soaW5vZGUtJmd0O2lfbWFwcGluZyk7CiAKIAkvKgpAQCAtNzY1LDggJiM0Mzs5MDAsOCBAQCBzdGF0aWMgc3RydWN0IGZvbGlvICpfX2t2bV9nbWVtX2dldF9wZm4oc3RydWN0IGZpbGUgKmZpbGUsCiAJCXJldHVybiBFUlJfUFRSKC1FRkFVTFQpOwogCX0KIAotCWlmICh4YV9sb2FkKCZhbXA7Zi0mZ3Q7YmluZGluZ3MsIGluZGV4KSAhPSBzbG90KSB7Ci0JCVdBUk5fT05fT05DRSh4YV9sb2FkKCZhbXA7Zi0mZ3Q7YmluZGluZ3MsIGluZGV4KSk7CiYjNDM7CWlmICh4YV9sb2FkKCZhbXA7Zi0mZ3Q7YmluZGluZ3MsIGluZGV4KSAhPSBtZW1zbG90X3RvX3hhX3ZhbHVlKHNsb3QpKSB7CiYjNDM7CQlXQVJOX09OX09OQ0UoeGFfdG9fdmFsdWUoeGFfbG9hZCgmYW1wO2YtJmd0O2JpbmRpbmdzLCBpbmRleCkpKTsKIAkJcmV0dXJuIEVSUl9QVFIoLUVJTyk7CiAJfQogCmRpZmYgLS1naXQgYS92aXJ0L2t2bS9rdm1fbWFpbi5jIGIvdmlydC9rdm0va3ZtX21haW4uYwppbmRleCBlNDRjMjBjMDQ5NjEwZC4uYWYzODBlOGYyYjY4ZDQgMTAwNjQ0Ci0tLSBhL3ZpcnQva3ZtL2t2bV9tYWluLmMKJiM0MzsmIzQzOyYjNDM7IGIvdmlydC9rdm0va3ZtX21haW4uYwpAQCAtMTU3MywxNCAmIzQzOzE1NzMsMTQgQEAgc3RhdGljIHZvaWQga3ZtX3JlcGxhY2VfbWVtc2xvdChzdHJ1Y3Qga3ZtICprdm0sCiBzdGF0aWMgaW50IGNoZWNrX21lbW9yeV9yZWdpb25fZmxhZ3Moc3RydWN0IGt2bSAqa3ZtLAogCQkJCSAgICAgY29uc3Qgc3RydWN0IGt2bV91c2Vyc3BhY2VfbWVtb3J5X3JlZ2lvbjIgKm1lbSkKIHsKLQl1MzIgdmFsaWRfZmxhZ3MgPSBLVk1fTUVNX0xPR19ESVJUWV9QQUdFUzsKJiM0MzsJdTMyIHZhbGlkX2ZsYWdzID0gMDsKIAogCWlmIChJU19FTkFCTEVEKENPTkZJR19LVk1fR1VFU1RfTUVNRkQpKQogCQl2YWxpZF9mbGFncyB8PSBLVk1fTUVNX0dVRVNUX01FTUZEOwogCi0JLyogRGlydHkgbG9nZ2luZyBwcml2YXRlIG1lbW9yeSBpcyBub3QgY3VycmVudGx5IHN1cHBvcnRlZC4gKi8KLQlpZiAobWVtLSZndDtmbGFncyAmYW1wOyBLVk1fTUVNX0dVRVNUX01FTUZEKQotCQl2YWxpZF9mbGFncyAmYW1wOz0gfktWTV9NRU1fTE9HX0RJUlRZX1BBR0VTOwomIzQzOwlpZiAoIShtZW0tJmd0O2ZsYWdzICZhbXA7IEtWTV9NRU1fR1VFU1RfTUVNRkQpIHx8CiYjNDM7CSAgICBrdm1fYXJjaF9zdXBwb3J0c19nbWVtX21tYXBfZGlydHlfbG9nZ2luZyhrdm0pKQomIzQzOwkJdmFsaWRfZmxhZ3MgfD0gS1ZNX01FTV9MT0dfRElSVFlfUEFHRVM7CiAKIAkvKgogCSAqIEdVRVNUX01FTUZEIGlzIGluY29tcGF0aWJsZSB3aXRoIHJlYWQtb25seSBtZW1zbG90cywgYXMgd3JpdGVzIHRvCkBAIC0xNzM5LDE2ICYjNDM7MTczOSw2IEBAIHN0YXRpYyB2b2lkIGt2bV9jb21taXRfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sCiAJCSAqLwogCQlpZiAob2xkLSZndDtkaXJ0eV9iaXRtYXAgJmFtcDsmYW1wOyAhbmV3LSZndDtkaXJ0eV9iaXRtYXApCiAJCQlrdm1fZGVzdHJveV9kaXJ0eV9iaXRtYXAob2xkKTsKLQotCQkvKgotCQkgKiBVbmJpbmQgdGhlIGd1ZXN0X21lbWZkIGluc3RhbmNlIGFzIG5lZWRlZDsgdGhlIEBuZXcgc2xvdCBoYXMKLQkJICogYWxyZWFkeSBjcmVhdGVkIGl0cyBvd24gYmluZGluZy4gIFRPRE86IERyb3AgdGhlIFdBUk4gd2hlbgotCQkgKiBkaXJ0eSBsb2dnaW5nIGd1ZXN0X21lbWZkIG1lbXNsb3RzIGlzIHN1cHBvcnRlZC4gIFVudGlsIHRoZW4sCi0JCSAqIGZsYWdzLW9ubHkgY2hhbmdlcyBvbiBndWVzdF9tZW1mZCBzbG90cyBzaG91bGQgYmUgaW1wb3NzaWJsZS4KLQkJICovCi0JCWlmIChXQVJOX09OX09OQ0Uob2xkLSZndDtmbGFncyAmYW1wOyBLVk1fTUVNX0dVRVNUX01FTUZEKSkKLQkJCWt2bV9nbWVtX3VuYmluZChvbGQpOwotCiAJCS8qCiAJCSAqIFRoZSBmaW5hbCBxdWlyay4gIEZyZWUgdGhlIGRldGFjaGVkLCBvbGQgc2xvdCwgYnV0IG9ubHkgaXRzCiAJCSAqIG1lbW9yeSwgbm90IGFueSBtZXRhZGF0YS4gIE1ldGFkYXRhLCBpbmNsdWRpbmcgYXJjaCBzcGVjaWZpYwpAQCAtMjA3MywyMiAmIzQzOzIwNjMsMjcgQEAgc3RhdGljIGludCBrdm1fc2V0X21lbW9yeV9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLAogCQlpZiAoKGt2bS0mZ3Q7bnJfbWVtc2xvdF9wYWdlcyAmIzQzOyBucGFnZXMpICZsdDsga3ZtLSZndDtucl9tZW1zbG90X3BhZ2VzKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAJfSBlbHNlIHsgLyogTW9kaWZ5IGFuIGV4aXN0aW5nIHNsb3QuICovCi0JCS8qIFByaXZhdGUgbWVtc2xvdHMgYXJlIGltbXV0YWJsZSwgdGhleSBjYW4gb25seSBiZSBkZWxldGVkLiAqLwotCQlpZiAobWVtLSZndDtmbGFncyAmYW1wOyBLVk1fTUVNX0dVRVNUX01FTUZEKQotCQkJcmV0dXJuIC1FSU5WQUw7CiAJCWlmICgobWVtLSZndDt1c2Vyc3BhY2VfYWRkciAhPSBvbGQtJmd0O3VzZXJzcGFjZV9hZGRyKSB8fAogCQkgICAgKG5wYWdlcyAhPSBvbGQtJmd0O25wYWdlcykgfHwKIAkJICAgICgobWVtLSZndDtmbGFncyBeIG9sZC0mZ3Q7ZmxhZ3MpICZhbXA7IChLVk1fTUVNX1JFQURPTkxZIHwgS1ZNX01FTV9HVUVTVF9NRU1GRCkpKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAKLQkJaWYgKGJhc2VfZ2ZuICE9IG9sZC0mZ3Q7YmFzZV9nZm4pCiYjNDM7CQlpZiAoYmFzZV9nZm4gIT0gb2xkLSZndDtiYXNlX2dmbikgewogCQkJY2hhbmdlID0gS1ZNX01SX01PVkU7Ci0JCWVsc2UgaWYgKG1lbS0mZ3Q7ZmxhZ3MgIT0gb2xkLSZndDtmbGFncykKJiM0MzsJCX0gZWxzZSBpZiAobWVtLSZndDtmbGFncyAhPSAob2xkLSZndDtmbGFncyAmYW1wOyBNRU1TTE9UX1VTRVJfRkxBR1NfTUFTSykpIHsKIAkJCWNoYW5nZSA9IEtWTV9NUl9GTEFHU19PTkxZOwotCQllbHNlIC8qIE5vdGhpbmcgdG8gY2hhbmdlLiAqLwomIzQzOwkJfSBlbHNlIGlmIChtZW0tJmd0O2ZsYWdzICZhbXA7IEtWTV9NRU1fR1VFU1RfTUVNRkQpIHsKJiM0MzsJCQlyZXR1cm4ga3ZtX2dtZW1fY2hlY2tfbm9fY2hhbmdlKGt2bSwgb2xkLCBtZW0tJmd0O2d1ZXN0X21lbWZkLAomIzQzOwkJCQkJCQltZW0tJmd0O2d1ZXN0X21lbWZkX29mZnNldCk7CiYjNDM7CQl9IGVsc2UgewogCQkJcmV0dXJuIDA7CiYjNDM7CQl9CiAJfQogCiYjNDM7CWlmIChtZW0tJmd0O2ZsYWdzICZhbXA7IEtWTV9NRU1fR1VFU1RfTUVNRkQgJmFtcDsmYW1wOwomIzQzOwkgICAgY2hhbmdlICE9IEtWTV9NUl9DUkVBVEUgJmFtcDsmYW1wOyBjaGFuZ2UgIT0gS1ZNX01SX0ZMQUdTX09OTFkpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKIAlpZiAoKGNoYW5nZSA9PSBLVk1fTVJfQ1JFQVRFIHx8IGNoYW5nZSA9PSBLVk1fTVJfTU9WRSkgJmFtcDsmYW1wOwogCSAgICBrdm1fY2hlY2tfbWVtc2xvdF9vdmVybGFwKHNsb3RzLCBpZCwgYmFzZV9nZm4sIGJhc2VfZ2ZuICYjNDM7IG5wYWdlcykpCiAJCXJldHVybiAtRUVYSVNUOwpAQCAtMjEwNSw3ICYjNDM7MjEwMCwxMiBAQCBzdGF0aWMgaW50IGt2bV9zZXRfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sCiAJbmV3LSZndDtmbGFncyA9IG1lbS0mZ3Q7ZmxhZ3M7CiAJbmV3LSZndDt1c2Vyc3BhY2VfYWRkciA9IG1lbS0mZ3Q7dXNlcnNwYWNlX2FkZHI7CiAJaWYgKG1lbS0mZ3Q7ZmxhZ3MgJmFtcDsgS1ZNX01FTV9HVUVTVF9NRU1GRCkgewotCQlyID0ga3ZtX2dtZW1fYmluZChrdm0sIG5ldywgbWVtLSZndDtndWVzdF9tZW1mZCwgbWVtLSZndDtndWVzdF9tZW1mZF9vZmZzZXQpOwomIzQzOwkJaWYgKGNoYW5nZSA9PSBLVk1fTVJfQ1JFQVRFKSB7CiYjNDM7CQkJciA9IGt2bV9nbWVtX2JpbmQoa3ZtLCBuZXcsIG1lbS0mZ3Q7Z3Vlc3RfbWVtZmQsIG1lbS0mZ3Q7Z3Vlc3RfbWVtZmRfb2Zmc2V0KTsKJiM0MzsJCX0gZWxzZSBpZiAoY2hhbmdlID09IEtWTV9NUl9GTEFHU19PTkxZKSB7CiYjNDM7CQkJciA9IGt2bV9nbWVtX2NoYW5nZV9mbGFncyhrdm0sIG9sZCwgbmV3LCBtZW0tJmd0O2d1ZXN0X21lbWZkLAomIzQzOwkJCQkJCSAgbWVtLSZndDtndWVzdF9tZW1mZF9vZmZzZXQpOwomIzQzOwkJfQogCQlpZiAocikKIAkJCWdvdG8gb3V0OwogCX0KQEAgLTIxMTcsNyAmIzQzOzIxMTcsNyBAQCBzdGF0aWMgaW50IGt2bV9zZXRfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sCiAJcmV0dXJuIDA7CiAKIG91dF91bmJpbmQ6Ci0JaWYgKG1lbS0mZ3Q7ZmxhZ3MgJmFtcDsgS1ZNX01FTV9HVUVTVF9NRU1GRCkKJiM0MzsJaWYgKChtZW0tJmd0O2ZsYWdzICZhbXA7IEtWTV9NRU1fR1VFU1RfTUVNRkQpICZhbXA7JmFtcDsgY2hhbmdlID09IEtWTV9NUl9DUkVBVEUpCiAJCWt2bV9nbWVtX3VuYmluZChuZXcpOwogb3V0OgogCWtmcmVlKG5ldyk7CmRpZmYgLS1naXQgYS92aXJ0L2t2bS9rdm1fbW0uaCBiL3ZpcnQva3ZtL2t2bV9tbS5oCmluZGV4IDc1MTBjYTkxNWRkMWFhLi5jNThkZmViMGYzZGY1NSAxMDA2NDQKLS0tIGEvdmlydC9rdm0va3ZtX21tLmgKJiM0MzsmIzQzOyYjNDM7IGIvdmlydC9rdm0va3ZtX21tLmgKQEAgLTc3LDYgJiM0Mzs3Nyw5IEBAIGludCBrdm1fZ21lbV9jcmVhdGUoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2NyZWF0ZV9ndWVzdF9tZW1mZCAqYXJncyk7CiBpbnQga3ZtX2dtZW1fYmluZChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QsCiAJCSAgdW5zaWduZWQgaW50IGZkLCB1b2ZmX3Qgb2Zmc2V0KTsKIHZvaWQga3ZtX2dtZW1fdW5iaW5kKHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QpOwomIzQzO2ludCBrdm1fZ21lbV9jaGFuZ2VfZmxhZ3Moc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpvbGQsCiYjNDM7CQkJICBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpuZXcsIHVuc2lnbmVkIGludCBmZCwKJiM0MzsJCQkgIGxvZmZfdCBvZmZzZXQpOwogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgaW50IGt2bV9nbWVtX2luaXQoc3RydWN0IG1vZHVsZSAqbW9kdWxlKQogewpAQCAtOTUsNiAmIzQzOzk4LDE0IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBrdm1fZ21lbV91bmJpbmQoc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCkKIHsKIAlXQVJOX09OX09OQ0UoMSk7CiB9CiYjNDM7c3RhdGljIGlubGluZSBpbnQga3ZtX2dtZW1fY2hhbmdlX2ZsYWdzKHN0cnVjdCBrdm0gKmt2bSwKJiM0MzsJCQkJCXN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm9sZCwKJiM0MzsJCQkJCXN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm5ldywKJiM0MzsJCQkJCXVuc2lnbmVkIGludCBmZCwgbG9mZl90IG9mZnNldCkKJiM0Mzt7CiYjNDM7CVdBUk5fT05fT05DRSgxKTsKJiM0MzsJcmV0dXJuIC1FSU87CiYjNDM7fQogI2VuZGlmIC8qIENPTkZJR19LVk1fR1VFU1RfTUVNRkQgKi8KIAogI2VuZGlmIC8qIF9fS1ZNX01NX0hfXyAqLwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxNzoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NTE1CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogNDExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uOiBLVk0gR3Vlc3QgTWVtZmQgRGlydHkgUGFnZSBMb2dnaW5nKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBpZGVudGlmeSB3aGV0aGVyIHRoaXMgcGF0Y2ggc2VyaWVzIGludHJvZHVjZXMgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgd2FycmFudCBmdXp6aW5nLiBGcm9tIHdoYXQgSSBzZWUsIGl0IGFkZHMgc3VwcG9ydCBmb3IgZGlydHkgcGFnZSBsb2dnaW5nIHNwZWNpZmljYWxseSBmb3IgYGd1ZXN0X21lbWZkYCBiYWNrZWQgbWVtc2xvdHMgd2l0aGluIEtWTS4gVGhpcyBsb29rcyBpbnRlcmVzdGluZy4KClRoZSBwYXRjaCBpbnRyb2R1Y2VzIGBLVk1fQ0FQX0dVRVNUX01FTUZEX01NQVBfTE9HX0RJUlRZX1BBR0VTYC4gU28gdGhpcyBpcyBzb21ldGhpbmcgbmV3IHRoYXQgY2FuIGJlIGVuYWJsZWQsIGFuZCB0aGF0JiMzOTtzIHVzdWFsbHkgd2hlcmUgdGhlIGJ1Z3MgaGlkZS4gTG9va2luZyBhdCB0aGUgY29kZSBtb2RpZmljYXRpb25zLCBpdCB0b3VjaGVzIHNldmVyYWwgS1ZNIGZ1bmN0aW9ucy4gSXQgc2VlbXMgdG8gaGF2ZSBhIGxvdCBvZiBjaGFuZ2VzIHJlbGF0ZWQgdG8gYGt2bV92bV9pb2N0bF9jaGVja19leHRlbnNpb25gLCBgZ21lbV9hYm9ydGAgKGFybTY0KSwgYGt2bV9nbWVtX2ludmFsaWRhdGVfc3RhcnRgLCBga3ZtX2dtZW1faW52YWxpZGF0ZV9lbmRgLCBga3ZtX2dtZW1fcmVsZWFzZWAsIGBrdm1fZ21lbV9lcnJvcl9mb2xpb2AsIGBrdm1fZ21lbV9iaW5kYCwgYGt2bV9zZXRfbWVtb3J5X3JlZ2lvbmAsIGFuZCBvdGhlcnMuIFRoaXMgaW5kaWNhdGVzIGEgc2lnbmlmaWNhbnQgc2hpZnQgaW4gaG93IG1lbW9yeSBpcyBtYW5hZ2VkIHdpdGhpbiB0aGUgZ3Vlc3QgY29udGV4dC4KClRoaXMgcGF0Y2ggc2VyaWVzIGlzIGFsbG93aW5nIHRoZSBgS1ZNX01FTV9MT0dfRElSVFlfUEFHRVNgIGZsYWcgdG8gYmUgc2V0IGZvciBtZW1zbG90cyB1c2luZyBgS1ZNX01FTV9HVUVTVF9NRU1GRGAgaWYgdGhlIGFyY2hpdGVjdHVyZSBzdXBwb3J0cyBpdC4gQ3VycmVudGx5LCBpdCBzZWVtcyB0aGF0IGBhcm02NGAgc3VwcG9ydHMgaXQsIHByb3ZpZGVkIGl0JiMzOTtzIG5vdCBhIHByb3RlY3RlZCBwS1ZNIFZNLiBUaGlzIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBjb25kaXRpb24gaXMgYWx3YXlzIHNvbWV0aGluZyB0byB0YWtlIG5vdGUgb2YgZHVyaW5nIGZ1enppbmcuCgpNeSBuZXh0IHN0ZXAgaXMgdG8gbmFpbCBkb3duIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMuIEkgc2VlIHRoYXQgYENPTkZJR19LVk1fR1VFU1RfTUVNRkRgIGFuZCBgQ09ORklHX0tWTWAgYXJlIHJlcXVpcmVkLiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gdGhlc2UgYXJlIGluZGVlZCB0aGUgcmlnaHQgY29uZmlndXJhdGlvbiBmbGFncyB0byBlbmFibGUgdGhpcyBmdW5jdGlvbmFsaXR5IGZvciBmdXp6aW5nLgoKTm93LCBsZXQmIzM5O3MgaWRlbnRpZnkgdGhlIGtleSBmb2N1cyBzeW1ib2xzIHRvIHRhcmdldCBpbiB0aGUgZnV6emluZyBoYXJuZXNzLiBJJiMzOTttIGZvY3VzaW5nIG9uIGZ1bmN0aW9ucyByZWxhdGVkIHRvIHRoZSBjb3JlIGxvZ2ljLCB3aGljaCBhcmU6IGBrdm1fZ21lbV9jaGFuZ2VfZmxhZ3NgLCBga3ZtX2dtZW1fY2hlY2tfbm9fY2hhbmdlYCwgYGt2bV9nbWVtX2JpbmRgLCBga3ZtX3NldF9tZW1vcnlfcmVnaW9uYCwgYF9fa3ZtX2dtZW1faW52YWxpZGF0ZV9zdGFydGAsIGBfX2t2bV9nbWVtX2ludmFsaWRhdGVfZW5kYCwgYGt2bV9nbWVtX2Vycm9yX2ZvbGlvYCwgYW5kIGBrdm1fZ21lbV9yZWxlYXNlYC4gVGhlc2UgbG9vayBsaWtlIHRoZSBlbnRyeSBwb2ludHMgZm9yIHRoZSBuZXcgZmVhdHVyZSBvciBzaWduaWZpY2FudGx5IG1vZGlmaWVkIG9uZXMsIGJhc2VkIG9uIHRoZSBwYXRjaC4KCkkgd2lsbCB1c2UgYGdyZXBwZXJgIHRvIGNvbmZpcm0gdGhhdCBgQ09ORklHX0tWTV9HVUVTVF9NRU1GRGAgaXMgdGhlIGNvcnJlY3QgY29uZmlnLCBhbmQgSSYjMzk7bGwgc2VlIHdoZXJlIHRoaXMgaXMgZGVmaW5lZCBhbmQgdXNlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxNzoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgS1ZNX0dVRVNUX01FTUZEJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O3ZpcnQva3ZtL0tjb25maWc9MTAzPWNvbmZpZyBLVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU1xuLS1cbnZpcnQva3ZtL0tjb25maWctMTA1LVxudmlydC9rdm0vS2NvbmZpZzoxMDY6Y29uZmlnIEtWTV9HVUVTVF9NRU1GRFxudmlydC9rdm0vS2NvbmZpZy0xMDctICAgICAgIHNlbGVjdCBYQVJSQVlfTVVMVElcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxNzoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDYyNgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIEtWTV9HVUVTVF9NRU1GRCBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIGBLVk1fR1VFU1RfTUVNRkRgLi4uIHRoYXQmIzM5O3MgYSBjb25maWcgb3B0aW9uLiBSaWdodC4gQmVmb3JlIEkgZGl2ZSB0b28gZGVlcCBpbnRvIGl0cyBzcGVjaWZpY3MsIG15IGZpcnN0IGluc3RpbmN0IGlzIGFsd2F5cyB0byB1bmRlcnN0YW5kIGl0cyBkZXBlbmRlbmNpZXMuIEl0JiMzOTtzIGNydWNpYWwsIGVzcGVjaWFsbHkgaW4ga2VybmVsIGNvbmZpZ3VyYXRpb25zLCB0byBzZWUgaWYgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIHRoaXMgZmVhdHVyZSBoYXMgY2FzY2FkaW5nIGVmZmVjdHMuIERvZXMgaXQgaGluZ2Ugb24gb3RoZXIgc3BlY2lmaWMgb3B0aW9ucz8gSXMgaXQgdGllZCB0byBhIHBhcnRpY3VsYXIgaGFyZHdhcmUgYXJjaGl0ZWN0dXJlLCBvciBhIHNwZWNpZmljIGtlcm5lbCB2ZXJzaW9uPyBVbmRlcnN0YW5kaW5nIHRoZXNlIGRlcGVuZGVuY2llcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBpdHMgb3ZlcmFsbCBpbXBhY3QgYW5kIHBvcnRhYmlsaXR5LiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGNvbmZpZyBzeXN0ZW0gdGVsbHMgdXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTc6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEtWTV9HVUVTVF9NRU1GRCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O3ZpcnQva3ZtL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7dmlydC9rdm0vS2NvbmZpZz0xMDM9Y29uZmlnIEtWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTXG4tLVxudmlydC9rdm0vS2NvbmZpZy0xMDUtXG52aXJ0L2t2bS9LY29uZmlnOjEwNjpjb25maWcgS1ZNX0dVRVNUX01FTUZEXG52aXJ0L2t2bS9LY29uZmlnLTEwNy0gICAgICAgc2VsZWN0IFhBUlJBWV9NVUxUSVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE3OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwOTI4CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIEtWTSBDb25maWd1cmF0aW9uIE9wdGlvbnMqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiBgdmlydC9rdm0vS2NvbmZpZ2AgYXJvdW5kIGxpbmUgMTA2LiBJJiMzOTttIGFzc3VtaW5nIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggdGhlIGNvcmUgS1ZNIGNvbmZpZ3VyYXRpb24gaGVyZSwgcHJvYmFibHkgdGhlIHRvcC1sZXZlbCBvcHRpb25zIHRoYXQgZGljdGF0ZSB3aGV0aGVyIG9yIG5vdCBLVk0gaXRzZWxmIGlzIGJ1aWx0IGludG8gdGhlIGtlcm5lbCwgb3IgYXMgYSBtb2R1bGUsIGFuZCBwb3NzaWJseSBzb21lIGZ1bmRhbWVudGFsIGFyY2hpdGVjdHVyYWwgY2hvaWNlcy4gQXQgbGluZSAxMDYsIEkgZXhwZWN0IHRvIGVuY291bnRlciB0aGUgZm91bmRhdGlvbmFsIHRvZ2dsZXMsIHRoZSBiYXNlIGBib29sYCBvciBgdHJpc3RhdGVgIG9wdGlvbnMgdGhhdCBlbmFibGUgb3IgZGlzYWJsZSBLVk0gc3VwcG9ydCBhdCBhIHZlcnkgYnJvYWQgbGV2ZWwuIEkmIzM5O20gbG9va2luZyBmb3IgdGhpbmdzIGxpa2UgYENPTkZJR19LVk1gLCBhbmQgbWF5YmUgaXRzIGRlcGVuZGVuY3kgb24gdGhpbmdzIGxpa2UgcHJvY2Vzc29yIHZpcnR1YWxpemF0aW9uIGV4dGVuc2lvbnMgKFZULXggb3IgQU1ELVYpLiBJJiMzOTtsbCBhbHNvIGJlIHNjYW5uaW5nIGZvciBob3cgdGhpcyBiYXNlIGNvbmZpZ3VyYXRpb24gaXMgdGhlbiByZWZpbmVkIGludG8gbW9yZSBncmFudWxhciBjb250cm9scy4gVGhlIGdvYWwgaXMgdG8gaW1tZWRpYXRlbHkgdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgS1ZNJiMzOTtzIGJ1aWxkIGNvbmZpZ3VyYXRpb24sIHdoYXQgdGhlIGluaXRpYWwgc2V0dGluZ3MgZG8sIGFuZCB0aGVpciByZWxhdGlvbnNoaXAgdG8gdmFyaW91cyBoYXJkd2FyZSBhbmQgYXJjaGl0ZWN0dXJlIGNob2ljZXMuIEkgYW0gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gY29uZGl0aW9uYWwgc2VsZWN0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxNzoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O3ZpcnQva3ZtL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDEwMDpcdGNvbmZpZyBLVk1fTU1VX0xPQ0tMRVNTX0FHSU5HXG4gMTAxOlx0ICAgICAgIGJvb2xcbiAxMDI6XHRcbiAxMDM6XHRjb25maWcgS1ZNX0dFTkVSSUNfTUVNT1JZX0FUVFJJQlVURVNcbiAxMDQ6XHQgICAgICAgYm9vbFxuIDEwNTpcdFxuIDEwNjpcdGNvbmZpZyBLVk1fR1VFU1RfTUVNRkRcbiAxMDc6XHQgICAgICAgc2VsZWN0IFhBUlJBWV9NVUxUSVxuIDEwODpcdCAgICAgICBib29sXG4gMTA5Olx0XG4gMTEwOlx0Y29uZmlnIEhBVkVfS1ZNX0FSQ0hfR01FTV9QUkVQQVJFXG4gMTExOlx0ICAgICAgIGJvb2xcbiAxMTI6XHQgICAgICAgZGVwZW5kcyBvbiBLVk1fR1VFU1RfTUVNRkRcbiAxMTM6XHRcbiAxMTQ6XHRjb25maWcgSEFWRV9LVk1fQVJDSF9HTUVNX0lOVkFMSURBVEVcbiAxMTU6XHQgICAgICAgYm9vbFxuIDExNjpcdCAgICAgICBkZXBlbmRzIG9uIEtWTV9HVUVTVF9NRU1GRFxuIDExNzpcdFxuIDExODpcdGNvbmZpZyBIQVZFX0tWTV9BUkNIX0dNRU1fUE9QVUxBVEVcbiAxMTk6XHQgICAgICAgYm9vbFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE3OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNDg1CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqSW52ZXN0aWdhdGluZyB0aGUgS1ZNX0dVRVNUX01FTUZEIENvbmZpZ3VyYXRpb24gT3B0aW9uKioKCk9rYXksIHNvIHRoZXJlJiMzOTtzIHRoaXMgYEtWTV9HVUVTVF9NRU1GRGAgc2V0dGluZywgdHVja2VkIGF3YXkgYXMgYSBib29sZWFuIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBJdCYjMzk7cyBtYXJrZWQgYXMgaGlkZGVuLCB3aGljaCBtZWFucyBpdCYjMzk7cyBwcm9iYWJseSBub3Qgc29tZXRoaW5nIGVuZC11c2VycyBhcmUgbWVhbnQgdG8gZGlyZWN0bHkgbWFuaXB1bGF0ZSwgYnV0IHJhdGhlciBzb21ldGhpbmcgc2VsZWN0ZWQgYnkgdGhlIGFyY2hpdGVjdHVyZS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7QWxyaWdodCwgbGV0JiMzOTtzIGZpZ3VyZSBvdXQgKndobyogZXhhY3RseSBpcyBtYWtpbmcgdXNlIG9mIHRoaXMgdGhpbmcuJiMzNDsgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hpY2ggYXJjaGl0ZWN0dXJlcyBjb25zaWRlciB0aGlzIG9wdGlvbiByZWxldmFudC4gRGl2aW5nIGludG8gdGhlIGNvZGUgdG8gZmluZCB0aGUgc2VsZWN0IHN0YXRlbWVudHMgaXMgdGhlIG5leHQgbG9naWNhbCBzdGVwLiBGcm9tIHRoZXJlLCBJIGNhbiBiZWdpbiB0byB1bnBhY2sgKndoeSogdGhleSBuZWVkIGl0LiBJIGFtIGtlZW4gdG8gbGVhcm4gdGhlIGltcGxpY2F0aW9ucyB0aGlzIG1pZ2h0IGhhdmUgb24gdGhlIHZpcnR1YWxpc2F0aW9uIGxhbmRzY2FwZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTc6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2VsZWN0IEtWTV9HVUVTVF9NRU1GRCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybTY0L2t2bS9LY29uZmlnPTIwPW1lbnVjb25maWcgS1ZNXG4tLVxuYXJjaC9hcm02NC9rdm0vS2NvbmZpZy0zOC1cdHNlbGVjdCBHVUVTVF9QRVJGX0VWRU5UUyBpZiBQRVJGX0VWRU5UU1xuYXJjaC9hcm02NC9rdm0vS2NvbmZpZzozOTpcdHNlbGVjdCBLVk1fR1VFU1RfTUVNRkRcbmFyY2gvYXJtNjQva3ZtL0tjb25maWctNDAtXHRoZWxwXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWc9MjA9Y29uZmlnIEtWTV9YODZcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy00OS1cdHNlbGVjdCBLVk1fV0VSUk9SIGlmIFdFUlJPUlxuYXJjaC94ODYva3ZtL0tjb25maWc6NTA6XHRzZWxlY3QgS1ZNX0dVRVNUX01FTUZEIGlmIFg4Nl82NFxuYXJjaC94ODYva3ZtL0tjb25maWctNTEtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE3OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExOTE1CgkJCQkJCQlvdXRwdXQ6IDE4OAoJCQkJCQkJdGhvdWdodHM6IDUzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBLVk0gR3Vlc3QgTWVtb3J5IE1hbmFnZW1lbnQgUGF0Y2gqKgoKT2theSwgaGVyZSYjMzk7cyB3aGF0IEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhpcyBwYXRjaC4gRnJvbSBhIGhpZ2ggbGV2ZWwsIGl0IGxvb2tzIGxpa2UgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGNoYW5nZXMgdG8gS1ZNJiMzOTtzIGd1ZXN0IG1lbW9yeSBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHkgY29uY2VybmluZyBkaXJ0eSBwYWdlIGxvZ2dpbmcgZm9yIGBndWVzdF9tZW1mZGAgYmFzZWQgbWVtc2xvdHMuIE9uIGFybTY0IGFuZCB4ODZfNjQsIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucyBhcmUgc2VsZWN0ZWQgYnkgYEtWTWAuIFRoZSBtYWluIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRvIGVuYWJsZSBpcyBgS1ZNYC4KCkdpdmVuIHRoZSBjb3JlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBtZW1vcnkgbWFuYWdlbWVudCwgdGhpcyBpcyAqZGVmaW5pdGVseSogd29ydGggZnV6emluZy4gVGhlIHBhdGNoIGlzIHRvdWNoaW5nIEtWTSBtZW1vcnkgcmVnaW9uIGNvbmZpZ3VyYXRpb24gYW5kIGludmFsaWRhdGlvbiwgd2hpY2ggaW1tZWRpYXRlbHkgbWFrZXMgbWUgdGhpbmsgb2YgS1ZNIGlvY3RscyBsaWtlIGBLVk1fU0VUX1VTRVJfTUVNT1JZX1JFR0lPTjJgIGFuZCBwb3RlbnRpYWwgbWVtb3J5IGludmFsaWRhdGlvbiBldmVudHMuIEl0JiMzOTtzIGEgcHJpbWUgdGFyZ2V0LgoKTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0byBjaGVjayB3aGV0aGVyIGBrdm1fc2V0X21lbW9yeV9yZWdpb25gIHdhcyBhIGhvdCBwYXRoLiBCdXQgbm93LCBhZnRlciByZXZpZXdpbmcgdGhlIG90aGVyIGZ1bmN0aW9ucywgSSB0aGluayBpdCBpcyBsZXNzIGludGVyZXN0aW5nLiBJIGFsc28gdG9vayBhIGxvb2sgYXQgb3RoZXIgZnVuY3Rpb24sIHN1Y2ggYXMgYGt2bV9nbWVtX2NoYW5nZV9mbGFnc2AgYW5kIGBrdm1fZ21lbV9jaGVja19ub19jaGFuZ2VgIHdoaWNoIHNlZW0gc3BlY2lmaWMgdG8gdGhpcyBwYXRjaC4gSSBhbHNvIHNhdyB0aGF0IGBfX2t2bV9nbWVtX2ludmFsaWRhdGVfc3RhcnRgIGFuZCBgX19rdm1fZ21lbV9pbnZhbGlkYXRlX2VuZGAgaGF2ZSBhbHNvIGJlZW4gbW9kaWZpZWQuCgpTbywgbGV0JiMzOTtzIHJlZmluZSB0aGUgc3ltYm9sIGxpc3QgdGhhdCBzaG91bGQgYmUgdGhlIGZvY3VzIG9mIHRoZSBmdXp6aW5nIGVmZm9ydHMuIEkmIzM5O2xsIGluY2x1ZGUgdGhlIGZvbGxvd2luZzoKCiogICBga3ZtX2dtZW1fY2hhbmdlX2ZsYWdzYAoqICAgYGt2bV9nbWVtX2NoZWNrX25vX2NoYW5nZWAKKiAgIGBfX2t2bV9nbWVtX2ludmFsaWRhdGVfc3RhcnRgCiogICBgX19rdm1fZ21lbV9pbnZhbGlkYXRlX2VuZGAKKiAgIGBrdm1fZ21lbV9lcnJvcl9mb2xpb2AKCkkmIzM5O3ZlIGFsc28gY29uZmlybWVkIHRoYXQgYGt2bV9nbWVtX2NoYW5nZV9mbGFnc2AgaXMgZXhwb3J0ZWQgdG8gYHZpcnQva3ZtL2t2bV9tbS5oYCwgd2hpY2ggaXMgaW1wb3J0YW50IGZvciB1bmRlcnN0YW5kaW5nIGhvdyBpdCYjMzk7cyBiZWluZyB1c2VkLiBTaW1pbGFybHksIGBrdm1fZ21lbV9jaGVja19ub19jaGFuZ2VgIGlzIGFsc28gZXhwb3J0ZWQsIHdoaWNoIGNvbmZpcm1zIGl0cyBpbXBvcnRhbmNlIGluIHRoZSBicm9hZGVyIEtWTSBhcmNoaXRlY3R1cmUuCgpNeSByZWFzb25pbmcgYm9pbHMgZG93biB0byB0aGlzOiB0aGUgcGF0Y2ggZnVuZGFtZW50YWxseSBhbHRlcnMgbWVtb3J5IHJlZ2lvbiBtYW5hZ2VtZW50IGFuZCBpbnZhbGlkYXRpb24gd2l0aGluIEtWTS4gVGhpcyBoYXMgZGlyZWN0IGltcGxpY2F0aW9ucyBmb3IgaG93IGd1ZXN0cyBpbnRlcmFjdCB3aXRoIG1lbW9yeSBhbmQsIHRoZXJlZm9yZSwgaXMgYSBwcmltZSB0YXJnZXQgZm9yIHZ1bG5lcmFiaWxpdHkgcmVzZWFyY2guIFNwZWNpZmljYWxseSwgaW9jdGwgY2FsbHMgcmVsYXRlZCB0byBtZW1vcnkgcmVnaW9uIGNvbmZpZ3VyYXRpb24gYW5kIGFueXRoaW5nIHRoYXQgY2FuIHRyaWdnZXIgbWVtb3J5IGludmFsaWRhdGlvbiB3b3VsZCBiZSBwcmltYXJ5IGFyZWFzIGZvciBmdXp6aW5nIGFuZCBhdWRpdC4gVGhlIGNvbmZpZ3Mgd2lsbCBiZSBgS1ZNYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTc6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9nbWVtX2NoYW5nZV9mbGFncyYjMzQ7LAogICAgJiMzNDtrdm1fZ21lbV9jaGVja19ub19jaGFuZ2UmIzM0OywKICAgICYjMzQ7X19rdm1fZ21lbV9pbnZhbGlkYXRlX3N0YXJ0JiMzNDssCiAgICAmIzM0O19fa3ZtX2dtZW1faW52YWxpZGF0ZV9lbmQmIzM0OywKICAgICYjMzQ7a3ZtX2dtZW1fZXJyb3JfZm9saW8mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBzdXBwb3J0IGZvciBkaXJ0eSBwYWdlIGxvZ2dpbmcgZm9yIGBndWVzdF9tZW1mZGAgYmFja2VkIG1lbXNsb3RzIGluIEtWTS4gSXQgbW9kaWZpZXMgdGhlIEtWTSBtZW1vcnkgcmVnaW9uIGNvbmZpZ3VyYXRpb24gbG9naWMgYW5kIHRoZSBpbnZhbGlkYXRpb24gcGF0aHMgZm9yIGd1ZXN0IG1lbW9yeS4gVGhlc2UgYXJlIGNvcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIEtWTSB0aGF0IGNhbiBiZSByZWFjaGVkIHZpYSBLVk0gaW9jdGxzIChlLmcuLCBgS1ZNX1NFVF9VU0VSX01FTU9SWV9SRUdJT04yYCkgYW5kIG1lbW9yeSBpbnZhbGlkYXRpb24gZXZlbnRzLCBtYWtpbmcgdGhlbSBoaWdobHkgcmVsZXZhbnQgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9nbWVtX2NoYW5nZV9mbGFncyYjMzQ7LAogICAgJiMzNDtrdm1fZ21lbV9jaGVja19ub19jaGFuZ2UmIzM0OywKICAgICYjMzQ7X19rdm1fZ21lbV9pbnZhbGlkYXRlX3N0YXJ0JiMzNDssCiAgICAmIzM0O19fa3ZtX2dtZW1faW52YWxpZGF0ZV9lbmQmIzM0OywKICAgICYjMzQ7a3ZtX2dtZW1fZXJyb3JfZm9saW8mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBzdXBwb3J0IGZvciBkaXJ0eSBwYWdlIGxvZ2dpbmcgZm9yIGBndWVzdF9tZW1mZGAgYmFja2VkIG1lbXNsb3RzIGluIEtWTS4gSXQgbW9kaWZpZXMgdGhlIEtWTSBtZW1vcnkgcmVnaW9uIGNvbmZpZ3VyYXRpb24gbG9naWMgYW5kIHRoZSBpbnZhbGlkYXRpb24gcGF0aHMgZm9yIGd1ZXN0IG1lbW9yeS4gVGhlc2UgYXJlIGNvcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIEtWTSB0aGF0IGNhbiBiZSByZWFjaGVkIHZpYSBLVk0gaW9jdGxzIChlLmcuLCBgS1ZNX1NFVF9VU0VSX01FTU9SWV9SRUdJT04yYCkgYW5kIG1lbW9yeSBpbnZhbGlkYXRpb24gZXZlbnRzLCBtYWtpbmcgdGhlbSBoaWdobHkgcmVsZXZhbnQgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxNzoyNjo1NC41MDYyMzMzNzdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMzY0MTU1MjA5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fZ21lbV9jaGFuZ2VfZmxhZ3NcIixcbiAgICBcImt2bV9nbWVtX2NoZWNrX25vX2NoYW5nZVwiLFxuICAgIFwiX19rdm1fZ21lbV9pbnZhbGlkYXRlX3N0YXJ0XCIsXG4gICAgXCJfX2t2bV9nbWVtX2ludmFsaWRhdGVfZW5kXCIsXG4gICAgXCJrdm1fZ21lbV9lcnJvcl9mb2xpb1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgc3VwcG9ydCBmb3IgZGlydHkgcGFnZSBsb2dnaW5nIGZvciBgZ3Vlc3RfbWVtZmRgIGJhY2tlZCBtZW1zbG90cyBpbiBLVk0uIEl0IG1vZGlmaWVzIHRoZSBLVk0gbWVtb3J5IHJlZ2lvbiBjb25maWd1cmF0aW9uIGxvZ2ljIGFuZCB0aGUgaW52YWxpZGF0aW9uIHBhdGhzIGZvciBndWVzdCBtZW1vcnkuIFRoZXNlIGFyZSBjb3JlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiBLVk0gdGhhdCBjYW4gYmUgcmVhY2hlZCB2aWEgS1ZNIGlvY3RscyAoZS5nLiwgYEtWTV9TRVRfVVNFUl9NRU1PUllfUkVHSU9OMmApIGFuZCBtZW1vcnkgaW52YWxpZGF0aW9uIGV2ZW50cywgbWFraW5nIHRoZW0gaGlnaGx5IHJlbGV2YW50IGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxNzoyNjo1NC41MDYyMzkyNjhaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc3MDI0MDU3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDFmM2M3YWM1NTcxNzg5OWM0YzkxYWM0OWZkZTM2NDg4NWQ4OGVlNjlcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBKdWwgMiAxNzoyNjo1MyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QgYi9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3RcXG5pbmRleCBhNWY5ZWU5MmY0M2U4ZC4uNTAxMmFmZTZhOWI1NTkgMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0XFxuKysrIGIvRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0XFxuQEAgLTk0OTMsNiArOTQ5MywxNSBAQCB0YWtlIGNhcmUgdG8gZGlmZmVyZW50aWF0ZSBiZXR3ZWVuIHRoZXNlIGNhc2VzLlxcbiBUaGUgcHJlc2VuY2Ugb2YgdGhpcyBjYXBhYmlsaXR5IGluZGljYXRlcyB0aGF0IHRoZSBuZXN0ZWQgS1ZNIGd1ZXN0IGNhblxcbiBzdGFydCBpbiBFU0EgbW9kZS5cXG4gXFxuKzguNDggS1ZNX0NBUF9HVUVTVF9NRU1GRF9NTUFQX0xPR19ESVJUWV9QQUdFU1xcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cXG4rXFxuKzpBcmNoaXRlY3R1cmVzOiBhbGxcXG4rXFxuK1RoZSBwcmVzZW5jZSBvZiB0aGlzIGNhcGFiaWxpdHkgaW5kaWNhdGVzIHRoYXQgbWVtc2xvdHMgYmFja2VkIGJ5IGEgZ3Vlc3RfbWVtZmRcXG4rZmlsZSBkZXNjcmlwdG9yIGNyZWF0ZWQgd2l0aCB0aGUgR1VFU1RfTUVNRkRfRkxBR19NTUFQIGZsYWcgY2FuIGhhdmUgZGlydHlcXG4rcGFnZSBsb2dnaW5nIGVuYWJsZWQuXFxuK1xcbiA5LiBLbm93biBLVk0gQVBJIHByb2JsZW1zXFxuID09PT09PT09PT09PT09PT09PT09PT09PT1cXG4gXFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL2FybS5jIGIvYXJjaC9hcm02NC9rdm0vYXJtLmNcXG5pbmRleCA1MGFkZmZmNzViZTgyZS4uZTkyZTVkN2I1MzNhZGEgMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm02NC9rdm0vYXJtLmNcXG4rKysgYi9hcmNoL2FybTY0L2t2bS9hcm0uY1xcbkBAIC0zOTMsNiArMzkzLDkgQEAgaW50IGt2bV92bV9pb2N0bF9jaGVja19leHRlbnNpb24oc3RydWN0IGt2bSAqa3ZtLCBsb25nIGV4dClcXG4gXFx0Y2FzZSBLVk1fQ0FQX0NPVU5URVJfT0ZGU0VUOlxcbiBcXHRjYXNlIEtWTV9DQVBfQVJNX1dSSVRBQkxFX0lNUF9JRF9SRUdTOlxcbiBcXHRjYXNlIEtWTV9DQVBfQVJNX1NFQV9UT19VU0VSOlxcbisjaWZkZWYgQ09ORklHX0tWTV9HVUVTVF9NRU1GRFxcbitcXHRjYXNlIEtWTV9DQVBfR1VFU1RfTUVNRkRfTU1BUF9MT0dfRElSVFlfUEFHRVM6XFxuKyNlbmRpZlxcbiBcXHRcXHRyID0gMTtcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdGNhc2UgS1ZNX0NBUF9TRVRfR1VFU1RfREVCVUcyOlxcbkBAIC00OTMsNiArNDk2LDI1IEBAIGludCBrdm1fdm1faW9jdGxfY2hlY2tfZXh0ZW5zaW9uKHN0cnVjdCBrdm0gKmt2bSwgbG9uZyBleHQpXFxuIFxcdHJldHVybiByO1xcbiB9XFxuIFxcbisjaWZkZWYgQ09ORklHX0tWTV9HVUVTVF9NRU1GRFxcbitib29sIGt2bV9hcmNoX3N1cHBvcnRzX2dtZW1fbW1hcF9kaXJ0eV9sb2dnaW5nKHN0cnVjdCBrdm0gKmt2bSlcXG4re1xcbitcXHQvKlxcbitcXHQgKiBQcm90ZWN0ZWQgcEtWTSBWTXMgZG9uJ3QgYWxsb3cgZGlydHkgcGFnZSBsb2dnaW5nLCBmYWlsIGVhcmx5IGhlcmVcXG4rXFx0ICogaW5zdGVhZCBvZiBpbiBrdm1fYXJjaF9wcmVwYXJlX21lbW9yeV9yZWdpb24oKS5cXG4rXFx0ICpcXG4rXFx0ICogS1ZNX0NBUF9HVUVTVF9NRU1GRF9NTUFQX0xPR19ESVJUWV9QQUdFUyBpcyBub3QgYXZhaWxhYmxlIGZvciBhXFxuK1xcdCAqIHByb3RlY3RlZCBwS1ZNIFZNLCBhbmQgcmV0dXJuaW5nIGZhbHNlIG1lYW5zIHRoYXRcXG4rXFx0ICogS1ZNX1NFVF9VU0VSX01FTU9SWV9SRUdJT04yIGZhaWxzIHdpdGggRUlOVkFMLCB3aGljaCBpcyBjb25zaXN0ZW50XFxuK1xcdCAqIHdpdGggdW5zdXBwb3J0ZWQgbWVtc2xvdCBmbGFncy5cXG4rXFx0ICovXFxuK1xcdGlmICghaXNfcHJvdGVjdGVkX2t2bV9lbmFibGVkKCkpXFxuK1xcdFxcdHJldHVybiB0cnVlO1xcbitcXG4rXFx0cmV0dXJuIGt2bV9wa3ZtX2V4dF9hbGxvd2VkKGt2bSwgS1ZNX0NBUF9HVUVTVF9NRU1GRF9NTUFQX0xPR19ESVJUWV9QQUdFUyk7XFxuK31cXG4rI2VuZGlmXFxuK1xcbiBsb25nIGt2bV9hcmNoX2Rldl9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCxcXG4gXFx0XFx0XFx0dW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZylcXG4ge1xcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9tbXUuYyBiL2FyY2gvYXJtNjQva3ZtL21tdS5jXFxuaW5kZXggNmM5NDFhYWExMGM2MzkuLmY2ZTZkZTE1M2NlMjUzIDEwMDY0NFxcbi0tLSBhL2FyY2gvYXJtNjQva3ZtL21tdS5jXFxuKysrIGIvYXJjaC9hcm02NC9rdm0vbW11LmNcXG5AQCAtMTY0OCw3ICsxNjQ4LDggQEAgc3RhdGljIGludCBnbWVtX2Fib3J0KGNvbnN0IHN0cnVjdCBrdm1fczJfZmF1bHRfZGVzYyAqczJmZClcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4gXFx0fVxcbiBcXG4tXFx0aWYgKCEoczJmZC1cXHUwMDNlbWVtc2xvdC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBLVk1fTUVNX1JFQURPTkxZKSlcXG4rXFx0aWYgKCEoczJmZC1cXHUwMDNlbWVtc2xvdC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBLVk1fTUVNX1JFQURPTkxZKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgKCFrdm1fc2xvdF9kaXJ0eV90cmFja19lbmFibGVkKHMyZmQtXFx1MDAzZW1lbXNsb3QpIHx8IHdyaXRlX2ZhdWx0KSlcXG4gXFx0XFx0cHJvdCB8PSBLVk1fUEdUQUJMRV9QUk9UX1c7XFxuIFxcbiBcXHRpZiAoczJmZC1cXHUwMDNlbmVzdGVkKVxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmggYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhcXG5pbmRleCBhYjhjZmFlYzgyZDMxZS4uYzQ0ZTkyNTNlYjQwMGEgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oXFxuQEAgLTU2LDYgKzU2LDcgQEBcXG4gICovXFxuICNkZWZpbmUgS1ZNX01FTVNMT1RfSU5WQUxJRFxcdFxcdFxcdCgxVUwgXFx1MDAzY1xcdTAwM2MgMTYpXFxuICNkZWZpbmUgS1ZNX01FTVNMT1RfR01FTV9PTkxZXFx0XFx0XFx0KDFVTCBcXHUwMDNjXFx1MDAzYyAxNylcXG4rI2RlZmluZSBNRU1TTE9UX1VTRVJfRkxBR1NfTUFTS1xcdFxcdFxcdDB4ZmZmZlxcbiBcXG4gLypcXG4gICogQml0IDYzIG9mIHRoZSBtZW1zbG90IGdlbmVyYXRpb24gbnVtYmVyIGlzIGFuIFxcXCJ1cGRhdGUgaW4tcHJvZ3Jlc3MgZmxhZ1xcXCIsXFxuQEAgLTczMSw2ICs3MzIsOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wga3ZtX2FyY2hfaGFzX3ByaXZhdGVfbWVtKHN0cnVjdCBrdm0gKmt2bSlcXG4gXFxuICNpZmRlZiBDT05GSUdfS1ZNX0dVRVNUX01FTUZEXFxuIGJvb2wga3ZtX2FyY2hfc3VwcG9ydHNfZ21lbV9pbml0X3NoYXJlZChzdHJ1Y3Qga3ZtICprdm0pO1xcbitib29sIGt2bV9hcmNoX3N1cHBvcnRzX2dtZW1fbW1hcF9kaXJ0eV9sb2dnaW5nKHN0cnVjdCBrdm0gKmt2bSk7XFxuK2ludCBrdm1fZ21lbV9jaGVja19ub19jaGFuZ2Uoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LFxcbitcXHRcXHRcXHQgICAgIHVuc2lnbmVkIGludCBmZCwgbG9mZl90IG9mZnNldCk7XFxuIFxcbiBzdGF0aWMgaW5saW5lIHU2NCBrdm1fZ21lbV9nZXRfc3VwcG9ydGVkX2ZsYWdzKHN0cnVjdCBrdm0gKmt2bSlcXG4ge1xcbkBAIC03NDEsNiArNzQ1LDE3IEBAIHN0YXRpYyBpbmxpbmUgdTY0IGt2bV9nbWVtX2dldF9zdXBwb3J0ZWRfZmxhZ3Moc3RydWN0IGt2bSAqa3ZtKVxcbiBcXG4gXFx0cmV0dXJuIGZsYWdzO1xcbiB9XFxuKyNlbHNlXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBrdm1fYXJjaF9zdXBwb3J0c19nbWVtX21tYXBfZGlydHlfbG9nZ2luZyhzdHJ1Y3Qga3ZtICprdm0pXFxuK3tcXG4rXFx0cmV0dXJuIGZhbHNlO1xcbit9XFxuK3N0YXRpYyBpbmxpbmUgaW50IGt2bV9nbWVtX2NoZWNrX25vX2NoYW5nZShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIHVuc2lnbmVkIGludCBmZCwgbG9mZl90IG9mZnNldClcXG4re1xcbitcXHRXQVJOX09OX09OQ0UoMSk7XFxuK1xcdHJldHVybiAtRUlPO1xcbit9XFxuICNlbmRpZlxcbiBcXG4gI2lmbmRlZiBrdm1fYXJjaF9oYXNfcmVhZG9ubHlfbWVtXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaCBiL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaFxcbmluZGV4IDQxOTAxMTA5N2ZhOGUyLi41YTUzZTJlMTliMmZiMiAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgva3ZtLmhcXG4rKysgYi9pbmNsdWRlL3VhcGkvbGludXgva3ZtLmhcXG5AQCAtOTk3LDYgKzk5Nyw3IEBAIHN0cnVjdCBrdm1fZW5hYmxlX2NhcCB7XFxuICNkZWZpbmUgS1ZNX0NBUF9TMzkwX0tFWU9QIDI0N1xcbiAjZGVmaW5lIEtWTV9DQVBfUzM5MF9WU0lFX0VTQU1PREUgMjQ4XFxuICNkZWZpbmUgS1ZNX0NBUF9TMzkwX0hQQUdFXzJHIDI0OVxcbisjZGVmaW5lIEtWTV9DQVBfR1VFU1RfTUVNRkRfTU1BUF9MT0dfRElSVFlfUEFHRVMgMjUwXFxuIFxcbiBzdHJ1Y3Qga3ZtX2lycV9yb3V0aW5nX2lycWNoaXAge1xcbiBcXHRfX3UzMiBpcnFjaGlwO1xcbmRpZmYgLS1naXQgYS92aXJ0L2t2bS9ndWVzdF9tZW1mZC5jIGIvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuY1xcbmluZGV4IGRiNTdjNTc2NmFiNjA0Li4yMTBiZGQ3NmYwYWFkNyAxMDA2NDRcXG4tLS0gYS92aXJ0L2t2bS9ndWVzdF9tZW1mZC5jXFxuKysrIGIvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuY1xcbkBAIC0yNSw2ICsyNSw3IEBAIHN0cnVjdCBnbWVtX2ZpbGUge1xcbiBcXHRzdHJ1Y3Qga3ZtICprdm07XFxuIFxcdHN0cnVjdCB4YXJyYXkgYmluZGluZ3M7XFxuIFxcdHN0cnVjdCBsaXN0X2hlYWQgZW50cnk7XFxuK1xcdGJvb2wgZm91bmRfbWVtc2xvdDtcXHQvKiBVc2VkIGZvciBiYWxhbmNpbmcgaW52YWxpZGF0aW9ucyB3aGVuIHB1bmNoaW5nIGEgaG9sZSAqL1xcbiB9O1xcbiBcXG4gc3RydWN0IGdtZW1faW5vZGUge1xcbkBAIC00Myw2ICs0NCwyOSBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIHN0cnVjdCBnbWVtX2lub2RlICpHTUVNX0koc3RydWN0IGlub2RlICppbm9kZSlcXG4gI2RlZmluZSBrdm1fZ21lbV9mb3JfZWFjaF9maWxlKGYsIGlub2RlKSBcXFxcXFxuIFxcdGxpc3RfZm9yX2VhY2hfZW50cnkoZiwgXFx1MDAyNkdNRU1fSShpbm9kZSktXFx1MDAzZWdtZW1fZmlsZV9saXN0LCBlbnRyeSlcXG4gXFxuK3N0YXRpYyB2b2lkICptZW1zbG90X3RvX3hhX3ZhbHVlKHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QpXFxuK3tcXG4rXFx0V0FSTl9PTl9PTkNFKHNpemVvZihzbG90LVxcdTAwM2Vhc19pZCkgXFx1MDAzZSAxNik7XFxuK1xcdFdBUk5fT05fT05DRShzaXplb2Yoc2xvdC1cXHUwMDNlaWQpIFxcdTAwM2UgMTYpO1xcbitcXHRXQVJOX09OX09OQ0Uoc2l6ZW9mKHNsb3QtXFx1MDAzZWFzX2lkKSArIHNpemVvZihzbG90LVxcdTAwM2VpZCkgXFx1MDAzZSBzaXplb2YodW5zaWduZWQgbG9uZykpO1xcbitcXG4rXFx0cmV0dXJuIHhhX21rX3ZhbHVlKCgodW5zaWduZWQgbG9uZylzbG90LVxcdTAwM2Vhc19pZCkgXFx1MDAzY1xcdTAwM2MgMTYgfCAodW5zaWduZWQgbG9uZylzbG90LVxcdTAwM2VpZCk7XFxuK31cXG4rXFxuK3N0YXRpYyBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICp4YV92YWx1ZV90b19tZW1zbG90KHN0cnVjdCBrdm0gKmt2bSwgY29uc3Qgdm9pZCAqZW50cnkpXFxuK3tcXG4rXFx0dW5zaWduZWQgbG9uZyBmdWxsX2lkID0geGFfdG9fdmFsdWUoZW50cnkpO1xcbitcXHR1MTYgYXNfaWQgPSAoZnVsbF9pZCBcXHUwMDNlXFx1MDAzZSAxNikgXFx1MDAyNiBVMTZfTUFYO1xcbitcXHRzaG9ydCBpZCA9IGZ1bGxfaWQgXFx1MDAyNiBVMTZfTUFYO1xcbitcXG4rXFx0LypcXG4rXFx0ICogRG8gbm90IGlnbm9yZSBLVk1fTUVNU0xPVF9JTlZBTElEIG1lbXNsb3RzLCBhcyB3ZSB3YW50XFxuK1xcdCAqIC1cXHUwMDNlZXJyb3JfcmVtb3ZlX2ZvbGlvKCksIHdoZW4gaXQgcmFjZXMgd2l0aCBtZW1zbG90IGRlbGV0aW9uLCB0byBoYXZlXFxuK1xcdCAqICB1bm1hcHBlZCB0aGUgbWVtb3J5IHVwb24gY29tcGxldGlvbi5cXG4rXFx0ICovXFxuK1xcdHJldHVybiBpZF90b19tZW1zbG90KF9fa3ZtX21lbXNsb3RzKGt2bSwgYXNfaWQpLCBpZCk7XFxuK31cXG4rXFxuIC8qKlxcbiAgKiBmb2xpb19maWxlX3BmbiAtIGxpa2UgZm9saW9fZmlsZV9wYWdlLCBidXQgcmV0dXJuIGEgcGZuLlxcbiAgKiBAZm9saW86IFRoZSBmb2xpbyB3aGljaCBjb250YWlucyB0aGlzIGluZGV4LlxcbkBAIC0xNTcsNyArMTgxLDcgQEAgc3RhdGljIGVudW0ga3ZtX2dmbl9yYW5nZV9maWx0ZXIga3ZtX2dtZW1fZ2V0X2ludmFsaWRhdGVfZmlsdGVyKHN0cnVjdCBpbm9kZSAqaW5cXG4gXFx0cmV0dXJuIEtWTV9GSUxURVJfUFJJVkFURTtcXG4gfVxcbiBcXG4tc3RhdGljIHZvaWQgX19rdm1fZ21lbV9pbnZhbGlkYXRlX3N0YXJ0KHN0cnVjdCBnbWVtX2ZpbGUgKmYsIHBnb2ZmX3Qgc3RhcnQsXFxuK3N0YXRpYyBib29sIF9fa3ZtX2dtZW1faW52YWxpZGF0ZV9zdGFydChzdHJ1Y3QgZ21lbV9maWxlICpmLCBwZ29mZl90IHN0YXJ0LFxcbiBcXHRcXHRcXHRcXHRcXHRwZ29mZl90IGVuZCxcXG4gXFx0XFx0XFx0XFx0XFx0ZW51bSBrdm1fZ2ZuX3JhbmdlX2ZpbHRlciBhdHRyX2ZpbHRlcilcXG4ge1xcbkBAIC0xNjUsOSArMTg5LDE1IEBAIHN0YXRpYyB2b2lkIF9fa3ZtX2dtZW1faW52YWxpZGF0ZV9zdGFydChzdHJ1Y3QgZ21lbV9maWxlICpmLCBwZ29mZl90IHN0YXJ0LFxcbiBcXHRzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90O1xcbiBcXHRzdHJ1Y3Qga3ZtICprdm0gPSBmLVxcdTAwM2Vrdm07XFxuIFxcdHVuc2lnbmVkIGxvbmcgaW5kZXg7XFxuK1xcdHZvaWQgKmVudHJ5O1xcbiBcXG4tXFx0eGFfZm9yX2VhY2hfcmFuZ2UoXFx1MDAyNmYtXFx1MDAzZWJpbmRpbmdzLCBpbmRleCwgc2xvdCwgc3RhcnQsIGVuZCAtIDEpIHtcXG4tXFx0XFx0cGdvZmZfdCBwZ29mZiA9IHNsb3QtXFx1MDAzZWdtZW0ucGdvZmY7XFxuK1xcdHhhX2Zvcl9lYWNoX3JhbmdlKFxcdTAwMjZmLVxcdTAwM2ViaW5kaW5ncywgaW5kZXgsIGVudHJ5LCBzdGFydCwgZW5kIC0gMSkge1xcbitcXHRcXHRwZ29mZl90IHBnb2ZmO1xcbitcXG4rXFx0XFx0c2xvdCA9IHhhX3ZhbHVlX3RvX21lbXNsb3Qoa3ZtLCBlbnRyeSk7XFxuK1xcdFxcdGlmICghc2xvdClcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdHBnb2ZmID0gc2xvdC1cXHUwMDNlZ21lbS5wZ29mZjtcXG4gXFxuIFxcdFxcdHN0cnVjdCBrdm1fZ2ZuX3JhbmdlIGdmbl9yYW5nZSA9IHtcXG4gXFx0XFx0XFx0LnN0YXJ0ID0gc2xvdC1cXHUwMDNlYmFzZV9nZm4gKyBtYXgocGdvZmYsIHN0YXJ0KSAtIHBnb2ZmLFxcbkBAIC0xOTIsNiArMjIyLDggQEAgc3RhdGljIHZvaWQgX19rdm1fZ21lbV9pbnZhbGlkYXRlX3N0YXJ0KHN0cnVjdCBnbWVtX2ZpbGUgKmYsIHBnb2ZmX3Qgc3RhcnQsXFxuIFxcbiBcXHRpZiAoZm91bmRfbWVtc2xvdClcXG4gXFx0XFx0S1ZNX01NVV9VTkxPQ0soa3ZtKTtcXG4rXFxuK1xcdHJldHVybiBmb3VuZF9tZW1zbG90O1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBrdm1fZ21lbV9pbnZhbGlkYXRlX3N0YXJ0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHBnb2ZmX3Qgc3RhcnQsXFxuQEAgLTE5OSwxMSArMjMxLDIyIEBAIHN0YXRpYyB2b2lkIGt2bV9nbWVtX2ludmFsaWRhdGVfc3RhcnQoc3RydWN0IGlub2RlICppbm9kZSwgcGdvZmZfdCBzdGFydCxcXG4ge1xcbiBcXHRlbnVtIGt2bV9nZm5fcmFuZ2VfZmlsdGVyIGF0dHJfZmlsdGVyO1xcbiBcXHRzdHJ1Y3QgZ21lbV9maWxlICpmO1xcbitcXHRzdHJ1Y3Qga3ZtICprdm07XFxuK1xcdGludCBpZHg7XFxuIFxcbiBcXHRhdHRyX2ZpbHRlciA9IGt2bV9nbWVtX2dldF9pbnZhbGlkYXRlX2ZpbHRlcihpbm9kZSk7XFxuIFxcbi1cXHRrdm1fZ21lbV9mb3JfZWFjaF9maWxlKGYsIGlub2RlKVxcbi1cXHRcXHRfX2t2bV9nbWVtX2ludmFsaWRhdGVfc3RhcnQoZiwgc3RhcnQsIGVuZCwgYXR0cl9maWx0ZXIpO1xcbitcXHRrdm1fZ21lbV9mb3JfZWFjaF9maWxlKGYsIGlub2RlKSB7XFxuK1xcdFxcdGt2bSA9IGYtXFx1MDAzZWt2bTtcXG4rXFx0XFx0aWR4ID0gc3JjdV9yZWFkX2xvY2soXFx1MDAyNmt2bS1cXHUwMDNlc3JjdSk7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIFRoaXMgaXMgc2FmZSB0byBkbyBiZWNhdXNlIGNhbGxzIHRvXFxuK1xcdFxcdCAqIGt2bV9nbWVtX2ludmFsaWRhdGVfc3RhcnQoKSBhcmUgc2VyaWFsaXplZCBieVxcbitcXHRcXHQgKiBmaWxlbWFwX2ludmFsaWRhdGVfbG9jaygpLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0Zi1cXHUwMDNlZm91bmRfbWVtc2xvdCA9IF9fa3ZtX2dtZW1faW52YWxpZGF0ZV9zdGFydChmLCBzdGFydCwgZW5kLCBhdHRyX2ZpbHRlcik7XFxuK1xcdFxcdHNyY3VfcmVhZF91bmxvY2soXFx1MDAyNmt2bS1cXHUwMDNlc3JjdSwgaWR4KTtcXG4rXFx0fVxcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBfX2t2bV9nbWVtX2ludmFsaWRhdGVfZW5kKHN0cnVjdCBnbWVtX2ZpbGUgKmYsIHBnb2ZmX3Qgc3RhcnQsXFxuQEAgLTIyMyw4ICsyNjYsMTEgQEAgc3RhdGljIHZvaWQga3ZtX2dtZW1faW52YWxpZGF0ZV9lbmQoc3RydWN0IGlub2RlICppbm9kZSwgcGdvZmZfdCBzdGFydCxcXG4ge1xcbiBcXHRzdHJ1Y3QgZ21lbV9maWxlICpmO1xcbiBcXG4tXFx0a3ZtX2dtZW1fZm9yX2VhY2hfZmlsZShmLCBpbm9kZSlcXG4rXFx0a3ZtX2dtZW1fZm9yX2VhY2hfZmlsZShmLCBpbm9kZSkge1xcbitcXHRcXHRpZiAoIWYtXFx1MDAzZWZvdW5kX21lbXNsb3QpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXHRcXHRfX2t2bV9nbWVtX2ludmFsaWRhdGVfZW5kKGYsIHN0YXJ0LCBlbmQpO1xcbitcXHR9XFxuIH1cXG4gXFxuIHN0YXRpYyBsb25nIGt2bV9nbWVtX3B1bmNoX2hvbGUoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG9mZnNldCwgbG9mZl90IGxlbilcXG5AQCAtMzI2LDYgKzM3Miw3IEBAIHN0YXRpYyBpbnQga3ZtX2dtZW1fcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4gXFx0c3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdDtcXG4gXFx0c3RydWN0IGt2bSAqa3ZtID0gZi1cXHUwMDNla3ZtO1xcbiBcXHR1bnNpZ25lZCBsb25nIGluZGV4O1xcbitcXHR2b2lkICplbnRyeTtcXG4gXFxuIFxcdC8qXFxuIFxcdCAqIFByZXZlbnQgY29uY3VycmVudCBhdHRlbXB0cyB0byAqdW5iaW5kKiBhIG1lbXNsb3QuICBUaGlzIGlzIHRoZSBsYXN0XFxuQEAgLTM0NCwxNyArMzkxLDE4IEBAIHN0YXRpYyBpbnQga3ZtX2dtZW1fcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4gXFxuIFxcdGZpbGVtYXBfaW52YWxpZGF0ZV9sb2NrKGlub2RlLVxcdTAwM2VpX21hcHBpbmcpO1xcbiBcXG4tXFx0eGFfZm9yX2VhY2goXFx1MDAyNmYtXFx1MDAzZWJpbmRpbmdzLCBpbmRleCwgc2xvdClcXG4rXFx0eGFfZm9yX2VhY2goXFx1MDAyNmYtXFx1MDAzZWJpbmRpbmdzLCBpbmRleCwgZW50cnkpIHtcXG4rXFx0XFx0c2xvdCA9IHhhX3ZhbHVlX3RvX21lbXNsb3Qoa3ZtLCBlbnRyeSk7XFxuIFxcdFxcdFdSSVRFX09OQ0Uoc2xvdC1cXHUwMDNlZ21lbS5maWxlLCBOVUxMKTtcXG4rXFx0fVxcbiBcXG4gXFx0LypcXG4gXFx0ICogQWxsIGluLWZsaWdodCBvcGVyYXRpb25zIGFyZSBnb25lIGFuZCBuZXcgYmluZGluZ3MgY2FuIGJlIGNyZWF0ZWQuXFxuIFxcdCAqIFphcCBhbGwgU1BURXMgcG9pbnRlZCBhdCBieSB0aGlzIGZpbGUuICBEbyBub3QgZnJlZSB0aGUgYmFja2luZ1xcbiBcXHQgKiBtZW1vcnksIGFzIGl0cyBsaWZldGltZSBpcyBhc3NvY2lhdGVkIHdpdGggdGhlIGlub2RlLCBub3QgdGhlIGZpbGUuXFxuIFxcdCAqL1xcbi1cXHRfX2t2bV9nbWVtX2ludmFsaWRhdGVfc3RhcnQoZiwgMCwgLTF1bCxcXG4tXFx0XFx0XFx0XFx0ICAgIGt2bV9nbWVtX2dldF9pbnZhbGlkYXRlX2ZpbHRlcihpbm9kZSkpO1xcbi1cXHRfX2t2bV9nbWVtX2ludmFsaWRhdGVfZW5kKGYsIDAsIC0xdWwpO1xcbitcXHRpZiAoX19rdm1fZ21lbV9pbnZhbGlkYXRlX3N0YXJ0KGYsIDAsIC0xdWwsIGt2bV9nbWVtX2dldF9pbnZhbGlkYXRlX2ZpbHRlcihpbm9kZSkpKVxcbitcXHRcXHRfX2t2bV9nbWVtX2ludmFsaWRhdGVfZW5kKGYsIDAsIC0xdWwpO1xcbiBcXG4gXFx0bGlzdF9kZWwoXFx1MDAyNmYtXFx1MDAzZWVudHJ5KTtcXG4gXFxuQEAgLTQ5OCwxNCArNTQ2LDIwIEBAIHN0YXRpYyBpbnQga3ZtX2dtZW1fbWlncmF0ZV9mb2xpbyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4gXFxuIHN0YXRpYyBpbnQga3ZtX2dtZW1fZXJyb3JfZm9saW8oc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIHtcXG4rXFx0ZW51bSBrdm1fZ2ZuX3JhbmdlX2ZpbHRlciBhdHRyX2ZpbHRlcjtcXG4rXFx0c3RydWN0IGlub2RlICppbm9kZSA9IG1hcHBpbmctXFx1MDAzZWhvc3Q7XFxuK1xcdHN0cnVjdCBnbWVtX2ZpbGUgKmY7XFxuIFxcdHBnb2ZmX3Qgc3RhcnQsIGVuZDtcXG4rXFx0Ym9vbCBmb3VuZF9tZW1zbG90O1xcbitcXHRzdHJ1Y3Qga3ZtICprdm07XFxuK1xcdGludCBpZHg7XFxuIFxcbiBcXHRmaWxlbWFwX2ludmFsaWRhdGVfbG9ja19zaGFyZWQobWFwcGluZyk7XFxuIFxcbiBcXHRzdGFydCA9IGZvbGlvLVxcdTAwM2VpbmRleDtcXG4gXFx0ZW5kID0gc3RhcnQgKyBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XFxuIFxcbi1cXHRrdm1fZ21lbV9pbnZhbGlkYXRlX3N0YXJ0KG1hcHBpbmctXFx1MDAzZWhvc3QsIHN0YXJ0LCBlbmQpO1xcbitcXHRhdHRyX2ZpbHRlciA9IGt2bV9nbWVtX2dldF9pbnZhbGlkYXRlX2ZpbHRlcihpbm9kZSk7XFxuIFxcbiBcXHQvKlxcbiBcXHQgKiBEbyBub3QgdHJ1bmNhdGUgdGhlIHJhbmdlLCB3aGF0IGFjdGlvbiBpcyB0YWtlbiBpbiByZXNwb25zZSB0byB0aGVcXG5AQCAtNTE1LDggKzU2OSwxOSBAQCBzdGF0aWMgaW50IGt2bV9nbWVtX2Vycm9yX2ZvbGlvKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbFxcbiBcXHQgKiBhdCB3aGljaCBwb2ludCBLVk0gY2FuIGVpdGhlciB0ZXJtaW5hdGUgdGhlIFZNIG9yIHByb3BhZ2F0ZSB0aGVcXG4gXFx0ICogZXJyb3IgdG8gdXNlcnNwYWNlLlxcbiBcXHQgKi9cXG4rXFx0a3ZtX2dtZW1fZm9yX2VhY2hfZmlsZShmLCBpbm9kZSkge1xcbitcXHRcXHRrdm0gPSBmLVxcdTAwM2Vrdm07XFxuIFxcbi1cXHRrdm1fZ21lbV9pbnZhbGlkYXRlX2VuZChtYXBwaW5nLVxcdTAwM2Vob3N0LCBzdGFydCwgZW5kKTtcXG4rXFx0XFx0aWR4ID0gc3JjdV9yZWFkX2xvY2soXFx1MDAyNmt2bS1cXHUwMDNlc3JjdSk7XFxuK1xcdFxcdGZvdW5kX21lbXNsb3QgPSBfX2t2bV9nbWVtX2ludmFsaWRhdGVfc3RhcnQoZiwgc3RhcnQsIGVuZCwgYXR0cl9maWx0ZXIpO1xcbitcXHRcXHRzcmN1X3JlYWRfdW5sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZXNyY3UsIGlkeCk7XFxuK1xcbitcXHRcXHRpZiAoZm91bmRfbWVtc2xvdCkge1xcbitcXHRcXHRcXHRLVk1fTU1VX0xPQ0soa3ZtKTtcXG4rXFx0XFx0XFx0a3ZtX21tdV9pbnZhbGlkYXRlX2VuZChrdm0pO1xcbitcXHRcXHRcXHRLVk1fTU1VX1VOTE9DSyhrdm0pO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4gXFxuIFxcdGZpbGVtYXBfaW52YWxpZGF0ZV91bmxvY2tfc2hhcmVkKG1hcHBpbmcpO1xcbiBcXG5AQCAtNTU3LDYgKzYyMiwxMSBAQCBib29sIF9fd2VhayBrdm1fYXJjaF9zdXBwb3J0c19nbWVtX2luaXRfc2hhcmVkKHN0cnVjdCBrdm0gKmt2bSlcXG4gXFx0cmV0dXJuIHRydWU7XFxuIH1cXG4gXFxuK2Jvb2wgX193ZWFrIGt2bV9hcmNoX3N1cHBvcnRzX2dtZW1fbW1hcF9kaXJ0eV9sb2dnaW5nKHN0cnVjdCBrdm0gKmt2bSlcXG4re1xcbitcXHRyZXR1cm4gZmFsc2U7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgX19rdm1fZ21lbV9jcmVhdGUoc3RydWN0IGt2bSAqa3ZtLCBsb2ZmX3Qgc2l6ZSwgdTY0IGZsYWdzKVxcbiB7XFxuIFxcdHN0YXRpYyBjb25zdCBjaGFyICpuYW1lID0gXFxcIltrdm0tZ21lbV1cXFwiO1xcbkBAIC02NDAsNiArNzEwLDY2IEBAIGludCBrdm1fZ21lbV9jcmVhdGUoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2NyZWF0ZV9ndWVzdF9tZW1mZCAqYXJncylcXG4gXFx0cmV0dXJuIF9fa3ZtX2dtZW1fY3JlYXRlKGt2bSwgc2l6ZSwgZmxhZ3MpO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IF9fa3ZtX2dtZW1fY2hlY2tfbm9fY2hhbmdlKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqb2xkLFxcbitcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgZmlsZSAqb2xkX2ZpbGUsIHVuc2lnbmVkIGludCBmZCxcXG4rXFx0XFx0XFx0XFx0ICAgICAgbG9mZl90IG9mZnNldClcXG4re1xcbitcXHRzdHJ1Y3QgZmlsZSAqbmV3X2ZpbGU7XFxuK1xcbitcXHRuZXdfZmlsZSA9IGZnZXQoZmQpO1xcbitcXHRpZiAoIW5ld19maWxlKVxcbitcXHRcXHRyZXR1cm4gLUVCQURGO1xcbitcXHRpZiAobmV3X2ZpbGUgIT0gb2xkX2ZpbGUpIHtcXG4rXFx0XFx0ZnB1dChuZXdfZmlsZSk7XFxuK1xcdFxcdHJldHVybiAtRUJBREY7XFxuK1xcdH1cXG4rXFx0ZnB1dChuZXdfZmlsZSk7XFxuK1xcbitcXHRpZiAob2xkLVxcdTAwM2VnbWVtLnBnb2ZmICE9IG9mZnNldCBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitpbnQga3ZtX2dtZW1fY2hlY2tfbm9fY2hhbmdlKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqb2xkLFxcbitcXHRcXHRcXHQgICAgIHVuc2lnbmVkIGludCBmZCwgbG9mZl90IG9mZnNldClcXG4re1xcbitcXHRDTEFTUyhnbWVtX2dldF9maWxlLCBvbGRfZmlsZSkob2xkKTtcXG4rXFxuK1xcdHJldHVybiBfX2t2bV9nbWVtX2NoZWNrX25vX2NoYW5nZShrdm0sIG9sZCwgb2xkX2ZpbGUsIGZkLCBvZmZzZXQpO1xcbit9XFxuK1xcbitpbnQga3ZtX2dtZW1fY2hhbmdlX2ZsYWdzKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqb2xkLFxcbitcXHRcXHRcXHQgIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm5ldywgdW5zaWduZWQgaW50IGZkLFxcbitcXHRcXHRcXHQgIGxvZmZfdCBvZmZzZXQpXFxuK3tcXG4rXFx0c3RydWN0IGdtZW1fZmlsZSAqb2xkX2Y7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZrdm0tXFx1MDAzZXNsb3RzX2xvY2spO1xcbitcXG4rXFx0aWYgKCFrdm1fbWVtc2xvdF9pc19nbWVtX29ubHkob2xkKSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRDTEFTUyhnbWVtX2dldF9maWxlLCBvbGRfZmlsZSkob2xkKTtcXG4rXFxuK1xcdHJldCA9IF9fa3ZtX2dtZW1fY2hlY2tfbm9fY2hhbmdlKGt2bSwgb2xkLCBvbGRfZmlsZSwgZmQsIG9mZnNldCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRvbGRfZiA9IG9sZF9maWxlLVxcdTAwM2Vwcml2YXRlX2RhdGE7XFxuK1xcdGlmICh4YV9sb2FkKFxcdTAwMjZvbGRfZi1cXHUwMDNlYmluZGluZ3MsIG9sZC1cXHUwMDNlZ21lbS5wZ29mZikgIT0gbWVtc2xvdF90b194YV92YWx1ZShuZXcpKSB7XFxuK1xcdFxcdFdBUk5fT05fT05DRSh4YV90b192YWx1ZSh4YV9sb2FkKFxcdTAwMjZvbGRfZi1cXHUwMDNlYmluZGluZ3MsIG9sZC1cXHUwMDNlZ21lbS5wZ29mZikpKTtcXG4rXFx0XFx0cmV0dXJuIC1FSU87XFxuK1xcdH1cXG4rXFxuK1xcdG5ldy1cXHUwMDNlZ21lbS5maWxlID0gb2xkLVxcdTAwM2VnbWVtLmZpbGU7XFxuK1xcdG5ldy1cXHUwMDNlZ21lbS5wZ29mZiA9IG9sZC1cXHUwMDNlZ21lbS5wZ29mZjtcXG4rXFx0bmV3LVxcdTAwM2VmbGFncyB8PSBLVk1fTUVNU0xPVF9HTUVNX09OTFk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gaW50IGt2bV9nbWVtX2JpbmQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LFxcbiBcXHRcXHQgIHVuc2lnbmVkIGludCBmZCwgdW9mZl90IG9mZnNldClcXG4ge1xcbkBAIC02NjksNiArNzk5LDExIEBAIGludCBrdm1fZ21lbV9iaW5kKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCxcXG4gXFx0aWYgKCFQQUdFX0FMSUdORUQob2Zmc2V0KSB8fCBvZmZzZXQgKyBzaXplIFxcdTAwM2UgaV9zaXplX3JlYWQoaW5vZGUpKVxcbiBcXHRcXHRnb3RvIGVycjtcXG4gXFxuK1xcdGlmIChzbG90LVxcdTAwM2VmbGFncyBcXHUwMDI2IEtWTV9NRU1fTE9HX0RJUlRZX1BBR0VTIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAoIWt2bV9nbWVtX3N1cHBvcnRzX21tYXAoaW5vZGUpIHx8XFxuK1xcdCAgICAgIWt2bV9hcmNoX3N1cHBvcnRzX2dtZW1fbW1hcF9kaXJ0eV9sb2dnaW5nKGt2bSkpKVxcbitcXHRcXHRnb3RvIGVycjtcXG4rXFxuIFxcdGZpbGVtYXBfaW52YWxpZGF0ZV9sb2NrKGlub2RlLVxcdTAwM2VpX21hcHBpbmcpO1xcbiBcXG4gXFx0c3RhcnQgPSBvZmZzZXQgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVDtcXG5AQCAtNjkxLDcgKzgyNiw3IEBAIGludCBrdm1fZ21lbV9iaW5kKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCxcXG4gXFx0aWYgKGt2bV9nbWVtX3N1cHBvcnRzX21tYXAoaW5vZGUpKVxcbiBcXHRcXHRzbG90LVxcdTAwM2VmbGFncyB8PSBLVk1fTUVNU0xPVF9HTUVNX09OTFk7XFxuIFxcbi1cXHR4YV9zdG9yZV9yYW5nZShcXHUwMDI2Zi1cXHUwMDNlYmluZGluZ3MsIHN0YXJ0LCBlbmQgLSAxLCBzbG90LCBHRlBfS0VSTkVMKTtcXG4rXFx0eGFfc3RvcmVfcmFuZ2UoXFx1MDAyNmYtXFx1MDAzZWJpbmRpbmdzLCBzdGFydCwgZW5kIC0gMSwgbWVtc2xvdF90b194YV92YWx1ZShzbG90KSwgR0ZQX0tFUk5FTCk7XFxuIFxcdGZpbGVtYXBfaW52YWxpZGF0ZV91bmxvY2soaW5vZGUtXFx1MDAzZWlfbWFwcGluZyk7XFxuIFxcbiBcXHQvKlxcbkBAIC03NjUsOCArOTAwLDggQEAgc3RhdGljIHN0cnVjdCBmb2xpbyAqX19rdm1fZ21lbV9nZXRfcGZuKHN0cnVjdCBmaWxlICpmaWxlLFxcbiBcXHRcXHRyZXR1cm4gRVJSX1BUUigtRUZBVUxUKTtcXG4gXFx0fVxcbiBcXG4tXFx0aWYgKHhhX2xvYWQoXFx1MDAyNmYtXFx1MDAzZWJpbmRpbmdzLCBpbmRleCkgIT0gc2xvdCkge1xcbi1cXHRcXHRXQVJOX09OX09OQ0UoeGFfbG9hZChcXHUwMDI2Zi1cXHUwMDNlYmluZGluZ3MsIGluZGV4KSk7XFxuK1xcdGlmICh4YV9sb2FkKFxcdTAwMjZmLVxcdTAwM2ViaW5kaW5ncywgaW5kZXgpICE9IG1lbXNsb3RfdG9feGFfdmFsdWUoc2xvdCkpIHtcXG4rXFx0XFx0V0FSTl9PTl9PTkNFKHhhX3RvX3ZhbHVlKHhhX2xvYWQoXFx1MDAyNmYtXFx1MDAzZWJpbmRpbmdzLCBpbmRleCkpKTtcXG4gXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVJTyk7XFxuIFxcdH1cXG4gXFxuZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL2t2bV9tYWluLmMgYi92aXJ0L2t2bS9rdm1fbWFpbi5jXFxuaW5kZXggZTQ0YzIwYzA0OTYxMGQuLmFmMzgwZThmMmI2OGQ0IDEwMDY0NFxcbi0tLSBhL3ZpcnQva3ZtL2t2bV9tYWluLmNcXG4rKysgYi92aXJ0L2t2bS9rdm1fbWFpbi5jXFxuQEAgLTE1NzMsMTQgKzE1NzMsMTQgQEAgc3RhdGljIHZvaWQga3ZtX3JlcGxhY2VfbWVtc2xvdChzdHJ1Y3Qga3ZtICprdm0sXFxuIHN0YXRpYyBpbnQgY2hlY2tfbWVtb3J5X3JlZ2lvbl9mbGFncyhzdHJ1Y3Qga3ZtICprdm0sXFxuIFxcdFxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IGt2bV91c2Vyc3BhY2VfbWVtb3J5X3JlZ2lvbjIgKm1lbSlcXG4ge1xcbi1cXHR1MzIgdmFsaWRfZmxhZ3MgPSBLVk1fTUVNX0xPR19ESVJUWV9QQUdFUztcXG4rXFx0dTMyIHZhbGlkX2ZsYWdzID0gMDtcXG4gXFxuIFxcdGlmIChJU19FTkFCTEVEKENPTkZJR19LVk1fR1VFU1RfTUVNRkQpKVxcbiBcXHRcXHR2YWxpZF9mbGFncyB8PSBLVk1fTUVNX0dVRVNUX01FTUZEO1xcbiBcXG4tXFx0LyogRGlydHkgbG9nZ2luZyBwcml2YXRlIG1lbW9yeSBpcyBub3QgY3VycmVudGx5IHN1cHBvcnRlZC4gKi9cXG4tXFx0aWYgKG1lbS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBLVk1fTUVNX0dVRVNUX01FTUZEKVxcbi1cXHRcXHR2YWxpZF9mbGFncyBcXHUwMDI2PSB+S1ZNX01FTV9MT0dfRElSVFlfUEFHRVM7XFxuK1xcdGlmICghKG1lbS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBLVk1fTUVNX0dVRVNUX01FTUZEKSB8fFxcbitcXHQgICAga3ZtX2FyY2hfc3VwcG9ydHNfZ21lbV9tbWFwX2RpcnR5X2xvZ2dpbmcoa3ZtKSlcXG4rXFx0XFx0dmFsaWRfZmxhZ3MgfD0gS1ZNX01FTV9MT0dfRElSVFlfUEFHRVM7XFxuIFxcbiBcXHQvKlxcbiBcXHQgKiBHVUVTVF9NRU1GRCBpcyBpbmNvbXBhdGlibGUgd2l0aCByZWFkLW9ubHkgbWVtc2xvdHMsIGFzIHdyaXRlcyB0b1xcbkBAIC0xNzM5LDE2ICsxNzM5LDYgQEAgc3RhdGljIHZvaWQga3ZtX2NvbW1pdF9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSxcXG4gXFx0XFx0ICovXFxuIFxcdFxcdGlmIChvbGQtXFx1MDAzZWRpcnR5X2JpdG1hcCBcXHUwMDI2XFx1MDAyNiAhbmV3LVxcdTAwM2VkaXJ0eV9iaXRtYXApXFxuIFxcdFxcdFxcdGt2bV9kZXN0cm95X2RpcnR5X2JpdG1hcChvbGQpO1xcbi1cXG4tXFx0XFx0LypcXG4tXFx0XFx0ICogVW5iaW5kIHRoZSBndWVzdF9tZW1mZCBpbnN0YW5jZSBhcyBuZWVkZWQ7IHRoZSBAbmV3IHNsb3QgaGFzXFxuLVxcdFxcdCAqIGFscmVhZHkgY3JlYXRlZCBpdHMgb3duIGJpbmRpbmcuICBUT0RPOiBEcm9wIHRoZSBXQVJOIHdoZW5cXG4tXFx0XFx0ICogZGlydHkgbG9nZ2luZyBndWVzdF9tZW1mZCBtZW1zbG90cyBpcyBzdXBwb3J0ZWQuICBVbnRpbCB0aGVuLFxcbi1cXHRcXHQgKiBmbGFncy1vbmx5IGNoYW5nZXMgb24gZ3Vlc3RfbWVtZmQgc2xvdHMgc2hvdWxkIGJlIGltcG9zc2libGUuXFxuLVxcdFxcdCAqL1xcbi1cXHRcXHRpZiAoV0FSTl9PTl9PTkNFKG9sZC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBLVk1fTUVNX0dVRVNUX01FTUZEKSlcXG4tXFx0XFx0XFx0a3ZtX2dtZW1fdW5iaW5kKG9sZCk7XFxuLVxcbiBcXHRcXHQvKlxcbiBcXHRcXHQgKiBUaGUgZmluYWwgcXVpcmsuICBGcmVlIHRoZSBkZXRhY2hlZCwgb2xkIHNsb3QsIGJ1dCBvbmx5IGl0c1xcbiBcXHRcXHQgKiBtZW1vcnksIG5vdCBhbnkgbWV0YWRhdGEuICBNZXRhZGF0YSwgaW5jbHVkaW5nIGFyY2ggc3BlY2lmaWNcXG5AQCAtMjA3MywyMiArMjA2MywyNyBAQCBzdGF0aWMgaW50IGt2bV9zZXRfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sXFxuIFxcdFxcdGlmICgoa3ZtLVxcdTAwM2Vucl9tZW1zbG90X3BhZ2VzICsgbnBhZ2VzKSBcXHUwMDNjIGt2bS1cXHUwMDNlbnJfbWVtc2xvdF9wYWdlcylcXG4gXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdH0gZWxzZSB7IC8qIE1vZGlmeSBhbiBleGlzdGluZyBzbG90LiAqL1xcbi1cXHRcXHQvKiBQcml2YXRlIG1lbXNsb3RzIGFyZSBpbW11dGFibGUsIHRoZXkgY2FuIG9ubHkgYmUgZGVsZXRlZC4gKi9cXG4tXFx0XFx0aWYgKG1lbS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBLVk1fTUVNX0dVRVNUX01FTUZEKVxcbi1cXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0XFx0aWYgKChtZW0tXFx1MDAzZXVzZXJzcGFjZV9hZGRyICE9IG9sZC1cXHUwMDNldXNlcnNwYWNlX2FkZHIpIHx8XFxuIFxcdFxcdCAgICAobnBhZ2VzICE9IG9sZC1cXHUwMDNlbnBhZ2VzKSB8fFxcbiBcXHRcXHQgICAgKChtZW0tXFx1MDAzZWZsYWdzIF4gb2xkLVxcdTAwM2VmbGFncykgXFx1MDAyNiAoS1ZNX01FTV9SRUFET05MWSB8IEtWTV9NRU1fR1VFU1RfTUVNRkQpKSlcXG4gXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbi1cXHRcXHRpZiAoYmFzZV9nZm4gIT0gb2xkLVxcdTAwM2ViYXNlX2dmbilcXG4rXFx0XFx0aWYgKGJhc2VfZ2ZuICE9IG9sZC1cXHUwMDNlYmFzZV9nZm4pIHtcXG4gXFx0XFx0XFx0Y2hhbmdlID0gS1ZNX01SX01PVkU7XFxuLVxcdFxcdGVsc2UgaWYgKG1lbS1cXHUwMDNlZmxhZ3MgIT0gb2xkLVxcdTAwM2VmbGFncylcXG4rXFx0XFx0fSBlbHNlIGlmIChtZW0tXFx1MDAzZWZsYWdzICE9IChvbGQtXFx1MDAzZWZsYWdzIFxcdTAwMjYgTUVNU0xPVF9VU0VSX0ZMQUdTX01BU0spKSB7XFxuIFxcdFxcdFxcdGNoYW5nZSA9IEtWTV9NUl9GTEFHU19PTkxZO1xcbi1cXHRcXHRlbHNlIC8qIE5vdGhpbmcgdG8gY2hhbmdlLiAqL1xcbitcXHRcXHR9IGVsc2UgaWYgKG1lbS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBLVk1fTUVNX0dVRVNUX01FTUZEKSB7XFxuK1xcdFxcdFxcdHJldHVybiBrdm1fZ21lbV9jaGVja19ub19jaGFuZ2Uoa3ZtLCBvbGQsIG1lbS1cXHUwMDNlZ3Vlc3RfbWVtZmQsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdG1lbS1cXHUwMDNlZ3Vlc3RfbWVtZmRfb2Zmc2V0KTtcXG4rXFx0XFx0fSBlbHNlIHtcXG4gXFx0XFx0XFx0cmV0dXJuIDA7XFxuK1xcdFxcdH1cXG4gXFx0fVxcbiBcXG4rXFx0aWYgKG1lbS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBLVk1fTUVNX0dVRVNUX01FTUZEIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBjaGFuZ2UgIT0gS1ZNX01SX0NSRUFURSBcXHUwMDI2XFx1MDAyNiBjaGFuZ2UgIT0gS1ZNX01SX0ZMQUdTX09OTFkpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4gXFx0aWYgKChjaGFuZ2UgPT0gS1ZNX01SX0NSRUFURSB8fCBjaGFuZ2UgPT0gS1ZNX01SX01PVkUpIFxcdTAwMjZcXHUwMDI2XFxuIFxcdCAgICBrdm1fY2hlY2tfbWVtc2xvdF9vdmVybGFwKHNsb3RzLCBpZCwgYmFzZV9nZm4sIGJhc2VfZ2ZuICsgbnBhZ2VzKSlcXG4gXFx0XFx0cmV0dXJuIC1FRVhJU1Q7XFxuQEAgLTIxMDUsNyArMjEwMCwxMiBAQCBzdGF0aWMgaW50IGt2bV9zZXRfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sXFxuIFxcdG5ldy1cXHUwMDNlZmxhZ3MgPSBtZW0tXFx1MDAzZWZsYWdzO1xcbiBcXHRuZXctXFx1MDAzZXVzZXJzcGFjZV9hZGRyID0gbWVtLVxcdTAwM2V1c2Vyc3BhY2VfYWRkcjtcXG4gXFx0aWYgKG1lbS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBLVk1fTUVNX0dVRVNUX01FTUZEKSB7XFxuLVxcdFxcdHIgPSBrdm1fZ21lbV9iaW5kKGt2bSwgbmV3LCBtZW0tXFx1MDAzZWd1ZXN0X21lbWZkLCBtZW0tXFx1MDAzZWd1ZXN0X21lbWZkX29mZnNldCk7XFxuK1xcdFxcdGlmIChjaGFuZ2UgPT0gS1ZNX01SX0NSRUFURSkge1xcbitcXHRcXHRcXHRyID0ga3ZtX2dtZW1fYmluZChrdm0sIG5ldywgbWVtLVxcdTAwM2VndWVzdF9tZW1mZCwgbWVtLVxcdTAwM2VndWVzdF9tZW1mZF9vZmZzZXQpO1xcbitcXHRcXHR9IGVsc2UgaWYgKGNoYW5nZSA9PSBLVk1fTVJfRkxBR1NfT05MWSkge1xcbitcXHRcXHRcXHRyID0ga3ZtX2dtZW1fY2hhbmdlX2ZsYWdzKGt2bSwgb2xkLCBuZXcsIG1lbS1cXHUwMDNlZ3Vlc3RfbWVtZmQsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgbWVtLVxcdTAwM2VndWVzdF9tZW1mZF9vZmZzZXQpO1xcbitcXHRcXHR9XFxuIFxcdFxcdGlmIChyKVxcbiBcXHRcXHRcXHRnb3RvIG91dDtcXG4gXFx0fVxcbkBAIC0yMTE3LDcgKzIxMTcsNyBAQCBzdGF0aWMgaW50IGt2bV9zZXRfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sXFxuIFxcdHJldHVybiAwO1xcbiBcXG4gb3V0X3VuYmluZDpcXG4tXFx0aWYgKG1lbS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBLVk1fTUVNX0dVRVNUX01FTUZEKVxcbitcXHRpZiAoKG1lbS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBLVk1fTUVNX0dVRVNUX01FTUZEKSBcXHUwMDI2XFx1MDAyNiBjaGFuZ2UgPT0gS1ZNX01SX0NSRUFURSlcXG4gXFx0XFx0a3ZtX2dtZW1fdW5iaW5kKG5ldyk7XFxuIG91dDpcXG4gXFx0a2ZyZWUobmV3KTtcXG5kaWZmIC0tZ2l0IGEvdmlydC9rdm0va3ZtX21tLmggYi92aXJ0L2t2bS9rdm1fbW0uaFxcbmluZGV4IDc1MTBjYTkxNWRkMWFhLi5jNThkZmViMGYzZGY1NSAxMDA2NDRcXG4tLS0gYS92aXJ0L2t2bS9rdm1fbW0uaFxcbisrKyBiL3ZpcnQva3ZtL2t2bV9tbS5oXFxuQEAgLTc3LDYgKzc3LDkgQEAgaW50IGt2bV9nbWVtX2NyZWF0ZShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fY3JlYXRlX2d1ZXN0X21lbWZkICphcmdzKTtcXG4gaW50IGt2bV9nbWVtX2JpbmQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LFxcbiBcXHRcXHQgIHVuc2lnbmVkIGludCBmZCwgdW9mZl90IG9mZnNldCk7XFxuIHZvaWQga3ZtX2dtZW1fdW5iaW5kKHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QpO1xcbitpbnQga3ZtX2dtZW1fY2hhbmdlX2ZsYWdzKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqb2xkLFxcbitcXHRcXHRcXHQgIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm5ldywgdW5zaWduZWQgaW50IGZkLFxcbitcXHRcXHRcXHQgIGxvZmZfdCBvZmZzZXQpO1xcbiAjZWxzZVxcbiBzdGF0aWMgaW5saW5lIGludCBrdm1fZ21lbV9pbml0KHN0cnVjdCBtb2R1bGUgKm1vZHVsZSlcXG4ge1xcbkBAIC05NSw2ICs5OCwxNCBAQCBzdGF0aWMgaW5saW5lIHZvaWQga3ZtX2dtZW1fdW5iaW5kKHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QpXFxuIHtcXG4gXFx0V0FSTl9PTl9PTkNFKDEpO1xcbiB9XFxuK3N0YXRpYyBpbmxpbmUgaW50IGt2bV9nbWVtX2NoYW5nZV9mbGFncyhzdHJ1Y3Qga3ZtICprdm0sXFxuK1xcdFxcdFxcdFxcdFxcdHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm9sZCxcXG4rXFx0XFx0XFx0XFx0XFx0c3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbmV3LFxcbitcXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgZmQsIGxvZmZfdCBvZmZzZXQpXFxuK3tcXG4rXFx0V0FSTl9PTl9PTkNFKDEpO1xcbitcXHRyZXR1cm4gLUVJTztcXG4rfVxcbiAjZW5kaWYgLyogQ09ORklHX0tWTV9HVUVTVF9NRU1GRCAqL1xcbiBcXG4gI2VuZGlmIC8qIF9fS1ZNX01NX0hfXyAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxNzoyNjo1NS4yNzcxMTc3ODRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyODcwNjYwMzAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV9nbWVtX2NoYW5nZV9mbGFnc1wiLFxuICAgIFwia3ZtX2dtZW1fY2hlY2tfbm9fY2hhbmdlXCIsXG4gICAgXCJfX2t2bV9nbWVtX2ludmFsaWRhdGVfc3RhcnRcIixcbiAgICBcIl9fa3ZtX2dtZW1faW52YWxpZGF0ZV9lbmRcIixcbiAgICBcImt2bV9nbWVtX2Vycm9yX2ZvbGlvXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBzdXBwb3J0IGZvciBkaXJ0eSBwYWdlIGxvZ2dpbmcgZm9yIGBndWVzdF9tZW1mZGAgYmFja2VkIG1lbXNsb3RzIGluIEtWTS4gSXQgbW9kaWZpZXMgdGhlIEtWTSBtZW1vcnkgcmVnaW9uIGNvbmZpZ3VyYXRpb24gbG9naWMgYW5kIHRoZSBpbnZhbGlkYXRpb24gcGF0aHMgZm9yIGd1ZXN0IG1lbW9yeS4gVGhlc2UgYXJlIGNvcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIEtWTSB0aGF0IGNhbiBiZSByZWFjaGVkIHZpYSBLVk0gaW9jdGxzIChlLmcuLCBgS1ZNX1NFVF9VU0VSX01FTU9SWV9SRUdJT04yYCkgYW5kIG1lbW9yeSBpbnZhbGlkYXRpb24gZXZlbnRzLCBtYWtpbmcgdGhlbSBoaWdobHkgcmVsZXZhbnQgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMWYzYzdhYzU1NzE3ODk5YzRjOTFhYzQ5ZmRlMzY0ODg1ZDg4ZWU2OVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDIgMTc6MjY6NTMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QgYi9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3RcbmluZGV4IGE1ZjllZTkyZjQzZThkLi41MDEyYWZlNmE5YjU1OSAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdFxuKysrIGIvRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0XG5AQCAtOTQ5Myw2ICs5NDkzLDE1IEBAIHRha2UgY2FyZSB0byBkaWZmZXJlbnRpYXRlIGJldHdlZW4gdGhlc2UgY2FzZXMuXG4gVGhlIHByZXNlbmNlIG9mIHRoaXMgY2FwYWJpbGl0eSBpbmRpY2F0ZXMgdGhhdCB0aGUgbmVzdGVkIEtWTSBndWVzdCBjYW5cbiBzdGFydCBpbiBFU0EgbW9kZS5cbiBcbis4LjQ4IEtWTV9DQVBfR1VFU1RfTUVNRkRfTU1BUF9MT0dfRElSVFlfUEFHRVNcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbitcbis6QXJjaGl0ZWN0dXJlczogYWxsXG4rXG4rVGhlIHByZXNlbmNlIG9mIHRoaXMgY2FwYWJpbGl0eSBpbmRpY2F0ZXMgdGhhdCBtZW1zbG90cyBiYWNrZWQgYnkgYSBndWVzdF9tZW1mZFxuK2ZpbGUgZGVzY3JpcHRvciBjcmVhdGVkIHdpdGggdGhlIEdVRVNUX01FTUZEX0ZMQUdfTU1BUCBmbGFnIGNhbiBoYXZlIGRpcnR5XG4rcGFnZSBsb2dnaW5nIGVuYWJsZWQuXG4rXG4gOS4gS25vd24gS1ZNIEFQSSBwcm9ibGVtc1xuID09PT09PT09PT09PT09PT09PT09PT09PT1cbiBcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9hcm0uYyBiL2FyY2gvYXJtNjQva3ZtL2FybS5jXG5pbmRleCA1MGFkZmZmNzViZTgyZS4uZTkyZTVkN2I1MzNhZGEgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2t2bS9hcm0uY1xuKysrIGIvYXJjaC9hcm02NC9rdm0vYXJtLmNcbkBAIC0zOTMsNiArMzkzLDkgQEAgaW50IGt2bV92bV9pb2N0bF9jaGVja19leHRlbnNpb24oc3RydWN0IGt2bSAqa3ZtLCBsb25nIGV4dClcbiBcdGNhc2UgS1ZNX0NBUF9DT1VOVEVSX09GRlNFVDpcbiBcdGNhc2UgS1ZNX0NBUF9BUk1fV1JJVEFCTEVfSU1QX0lEX1JFR1M6XG4gXHRjYXNlIEtWTV9DQVBfQVJNX1NFQV9UT19VU0VSOlxuKyNpZmRlZiBDT05GSUdfS1ZNX0dVRVNUX01FTUZEXG4rXHRjYXNlIEtWTV9DQVBfR1VFU1RfTUVNRkRfTU1BUF9MT0dfRElSVFlfUEFHRVM6XG4rI2VuZGlmXG4gXHRcdHIgPSAxO1xuIFx0XHRicmVhaztcbiBcdGNhc2UgS1ZNX0NBUF9TRVRfR1VFU1RfREVCVUcyOlxuQEAgLTQ5Myw2ICs0OTYsMjUgQEAgaW50IGt2bV92bV9pb2N0bF9jaGVja19leHRlbnNpb24oc3RydWN0IGt2bSAqa3ZtLCBsb25nIGV4dClcbiBcdHJldHVybiByO1xuIH1cbiBcbisjaWZkZWYgQ09ORklHX0tWTV9HVUVTVF9NRU1GRFxuK2Jvb2wga3ZtX2FyY2hfc3VwcG9ydHNfZ21lbV9tbWFwX2RpcnR5X2xvZ2dpbmcoc3RydWN0IGt2bSAqa3ZtKVxuK3tcbitcdC8qXG4rXHQgKiBQcm90ZWN0ZWQgcEtWTSBWTXMgZG9uJ3QgYWxsb3cgZGlydHkgcGFnZSBsb2dnaW5nLCBmYWlsIGVhcmx5IGhlcmVcbitcdCAqIGluc3RlYWQgb2YgaW4ga3ZtX2FyY2hfcHJlcGFyZV9tZW1vcnlfcmVnaW9uKCkuXG4rXHQgKlxuK1x0ICogS1ZNX0NBUF9HVUVTVF9NRU1GRF9NTUFQX0xPR19ESVJUWV9QQUdFUyBpcyBub3QgYXZhaWxhYmxlIGZvciBhXG4rXHQgKiBwcm90ZWN0ZWQgcEtWTSBWTSwgYW5kIHJldHVybmluZyBmYWxzZSBtZWFucyB0aGF0XG4rXHQgKiBLVk1fU0VUX1VTRVJfTUVNT1JZX1JFR0lPTjIgZmFpbHMgd2l0aCBFSU5WQUwsIHdoaWNoIGlzIGNvbnNpc3RlbnRcbitcdCAqIHdpdGggdW5zdXBwb3J0ZWQgbWVtc2xvdCBmbGFncy5cbitcdCAqL1xuK1x0aWYgKCFpc19wcm90ZWN0ZWRfa3ZtX2VuYWJsZWQoKSlcbitcdFx0cmV0dXJuIHRydWU7XG4rXG4rXHRyZXR1cm4ga3ZtX3Brdm1fZXh0X2FsbG93ZWQoa3ZtLCBLVk1fQ0FQX0dVRVNUX01FTUZEX01NQVBfTE9HX0RJUlRZX1BBR0VTKTtcbit9XG4rI2VuZGlmXG4rXG4gbG9uZyBrdm1fYXJjaF9kZXZfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsXG4gXHRcdFx0dW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZylcbiB7XG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vbW11LmMgYi9hcmNoL2FybTY0L2t2bS9tbXUuY1xuaW5kZXggNmM5NDFhYWExMGM2MzkuLmY2ZTZkZTE1M2NlMjUzIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9rdm0vbW11LmNcbisrKyBiL2FyY2gvYXJtNjQva3ZtL21tdS5jXG5AQCAtMTY0OCw3ICsxNjQ4LDggQEAgc3RhdGljIGludCBnbWVtX2Fib3J0KGNvbnN0IHN0cnVjdCBrdm1fczJfZmF1bHRfZGVzYyAqczJmZClcbiBcdFx0cmV0dXJuIHJldDtcbiBcdH1cbiBcbi1cdGlmICghKHMyZmQtXHUwMDNlbWVtc2xvdC1cdTAwM2VmbGFncyBcdTAwMjYgS1ZNX01FTV9SRUFET05MWSkpXG4rXHRpZiAoIShzMmZkLVx1MDAzZW1lbXNsb3QtXHUwMDNlZmxhZ3MgXHUwMDI2IEtWTV9NRU1fUkVBRE9OTFkpIFx1MDAyNlx1MDAyNlxuK1x0ICAgICgha3ZtX3Nsb3RfZGlydHlfdHJhY2tfZW5hYmxlZChzMmZkLVx1MDAzZW1lbXNsb3QpIHx8IHdyaXRlX2ZhdWx0KSlcbiBcdFx0cHJvdCB8PSBLVk1fUEdUQUJMRV9QUk9UX1c7XG4gXG4gXHRpZiAoczJmZC1cdTAwM2VuZXN0ZWQpXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oIGIvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oXG5pbmRleCBhYjhjZmFlYzgyZDMxZS4uYzQ0ZTkyNTNlYjQwMGEgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhcbisrKyBiL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaFxuQEAgLTU2LDYgKzU2LDcgQEBcbiAgKi9cbiAjZGVmaW5lIEtWTV9NRU1TTE9UX0lOVkFMSURcdFx0XHQoMVVMIFx1MDAzY1x1MDAzYyAxNilcbiAjZGVmaW5lIEtWTV9NRU1TTE9UX0dNRU1fT05MWVx0XHRcdCgxVUwgXHUwMDNjXHUwMDNjIDE3KVxuKyNkZWZpbmUgTUVNU0xPVF9VU0VSX0ZMQUdTX01BU0tcdFx0XHQweGZmZmZcbiBcbiAvKlxuICAqIEJpdCA2MyBvZiB0aGUgbWVtc2xvdCBnZW5lcmF0aW9uIG51bWJlciBpcyBhbiBcInVwZGF0ZSBpbi1wcm9ncmVzcyBmbGFnXCIsXG5AQCAtNzMxLDYgKzczMiw5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBrdm1fYXJjaF9oYXNfcHJpdmF0ZV9tZW0oc3RydWN0IGt2bSAqa3ZtKVxuIFxuICNpZmRlZiBDT05GSUdfS1ZNX0dVRVNUX01FTUZEXG4gYm9vbCBrdm1fYXJjaF9zdXBwb3J0c19nbWVtX2luaXRfc2hhcmVkKHN0cnVjdCBrdm0gKmt2bSk7XG4rYm9vbCBrdm1fYXJjaF9zdXBwb3J0c19nbWVtX21tYXBfZGlydHlfbG9nZ2luZyhzdHJ1Y3Qga3ZtICprdm0pO1xuK2ludCBrdm1fZ21lbV9jaGVja19ub19jaGFuZ2Uoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LFxuK1x0XHRcdCAgICAgdW5zaWduZWQgaW50IGZkLCBsb2ZmX3Qgb2Zmc2V0KTtcbiBcbiBzdGF0aWMgaW5saW5lIHU2NCBrdm1fZ21lbV9nZXRfc3VwcG9ydGVkX2ZsYWdzKHN0cnVjdCBrdm0gKmt2bSlcbiB7XG5AQCAtNzQxLDYgKzc0NSwxNyBAQCBzdGF0aWMgaW5saW5lIHU2NCBrdm1fZ21lbV9nZXRfc3VwcG9ydGVkX2ZsYWdzKHN0cnVjdCBrdm0gKmt2bSlcbiBcbiBcdHJldHVybiBmbGFncztcbiB9XG4rI2Vsc2VcbitzdGF0aWMgaW5saW5lIGJvb2wga3ZtX2FyY2hfc3VwcG9ydHNfZ21lbV9tbWFwX2RpcnR5X2xvZ2dpbmcoc3RydWN0IGt2bSAqa3ZtKVxuK3tcbitcdHJldHVybiBmYWxzZTtcbit9XG4rc3RhdGljIGlubGluZSBpbnQga3ZtX2dtZW1fY2hlY2tfbm9fY2hhbmdlKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCxcbitcdFx0XHRcdFx0ICAgdW5zaWduZWQgaW50IGZkLCBsb2ZmX3Qgb2Zmc2V0KVxuK3tcbitcdFdBUk5fT05fT05DRSgxKTtcbitcdHJldHVybiAtRUlPO1xuK31cbiAjZW5kaWZcbiBcbiAjaWZuZGVmIGt2bV9hcmNoX2hhc19yZWFkb25seV9tZW1cbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgva3ZtLmggYi9pbmNsdWRlL3VhcGkvbGludXgva3ZtLmhcbmluZGV4IDQxOTAxMTA5N2ZhOGUyLi41YTUzZTJlMTliMmZiMiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaFxuKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oXG5AQCAtOTk3LDYgKzk5Nyw3IEBAIHN0cnVjdCBrdm1fZW5hYmxlX2NhcCB7XG4gI2RlZmluZSBLVk1fQ0FQX1MzOTBfS0VZT1AgMjQ3XG4gI2RlZmluZSBLVk1fQ0FQX1MzOTBfVlNJRV9FU0FNT0RFIDI0OFxuICNkZWZpbmUgS1ZNX0NBUF9TMzkwX0hQQUdFXzJHIDI0OVxuKyNkZWZpbmUgS1ZNX0NBUF9HVUVTVF9NRU1GRF9NTUFQX0xPR19ESVJUWV9QQUdFUyAyNTBcbiBcbiBzdHJ1Y3Qga3ZtX2lycV9yb3V0aW5nX2lycWNoaXAge1xuIFx0X191MzIgaXJxY2hpcDtcbmRpZmYgLS1naXQgYS92aXJ0L2t2bS9ndWVzdF9tZW1mZC5jIGIvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuY1xuaW5kZXggZGI1N2M1NzY2YWI2MDQuLjIxMGJkZDc2ZjBhYWQ3IDEwMDY0NFxuLS0tIGEvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuY1xuKysrIGIvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuY1xuQEAgLTI1LDYgKzI1LDcgQEAgc3RydWN0IGdtZW1fZmlsZSB7XG4gXHRzdHJ1Y3Qga3ZtICprdm07XG4gXHRzdHJ1Y3QgeGFycmF5IGJpbmRpbmdzO1xuIFx0c3RydWN0IGxpc3RfaGVhZCBlbnRyeTtcbitcdGJvb2wgZm91bmRfbWVtc2xvdDtcdC8qIFVzZWQgZm9yIGJhbGFuY2luZyBpbnZhbGlkYXRpb25zIHdoZW4gcHVuY2hpbmcgYSBob2xlICovXG4gfTtcbiBcbiBzdHJ1Y3QgZ21lbV9pbm9kZSB7XG5AQCAtNDMsNiArNDQsMjkgQEAgc3RhdGljIF9fYWx3YXlzX2lubGluZSBzdHJ1Y3QgZ21lbV9pbm9kZSAqR01FTV9JKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4gI2RlZmluZSBrdm1fZ21lbV9mb3JfZWFjaF9maWxlKGYsIGlub2RlKSBcXFxuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeShmLCBcdTAwMjZHTUVNX0koaW5vZGUpLVx1MDAzZWdtZW1fZmlsZV9saXN0LCBlbnRyeSlcbiBcbitzdGF0aWMgdm9pZCAqbWVtc2xvdF90b194YV92YWx1ZShzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90KVxuK3tcbitcdFdBUk5fT05fT05DRShzaXplb2Yoc2xvdC1cdTAwM2Vhc19pZCkgXHUwMDNlIDE2KTtcbitcdFdBUk5fT05fT05DRShzaXplb2Yoc2xvdC1cdTAwM2VpZCkgXHUwMDNlIDE2KTtcbitcdFdBUk5fT05fT05DRShzaXplb2Yoc2xvdC1cdTAwM2Vhc19pZCkgKyBzaXplb2Yoc2xvdC1cdTAwM2VpZCkgXHUwMDNlIHNpemVvZih1bnNpZ25lZCBsb25nKSk7XG4rXG4rXHRyZXR1cm4geGFfbWtfdmFsdWUoKCh1bnNpZ25lZCBsb25nKXNsb3QtXHUwMDNlYXNfaWQpIFx1MDAzY1x1MDAzYyAxNiB8ICh1bnNpZ25lZCBsb25nKXNsb3QtXHUwMDNlaWQpO1xuK31cbitcbitzdGF0aWMgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqeGFfdmFsdWVfdG9fbWVtc2xvdChzdHJ1Y3Qga3ZtICprdm0sIGNvbnN0IHZvaWQgKmVudHJ5KVxuK3tcbitcdHVuc2lnbmVkIGxvbmcgZnVsbF9pZCA9IHhhX3RvX3ZhbHVlKGVudHJ5KTtcbitcdHUxNiBhc19pZCA9IChmdWxsX2lkIFx1MDAzZVx1MDAzZSAxNikgXHUwMDI2IFUxNl9NQVg7XG4rXHRzaG9ydCBpZCA9IGZ1bGxfaWQgXHUwMDI2IFUxNl9NQVg7XG4rXG4rXHQvKlxuK1x0ICogRG8gbm90IGlnbm9yZSBLVk1fTUVNU0xPVF9JTlZBTElEIG1lbXNsb3RzLCBhcyB3ZSB3YW50XG4rXHQgKiAtXHUwMDNlZXJyb3JfcmVtb3ZlX2ZvbGlvKCksIHdoZW4gaXQgcmFjZXMgd2l0aCBtZW1zbG90IGRlbGV0aW9uLCB0byBoYXZlXG4rXHQgKiAgdW5tYXBwZWQgdGhlIG1lbW9yeSB1cG9uIGNvbXBsZXRpb24uXG4rXHQgKi9cbitcdHJldHVybiBpZF90b19tZW1zbG90KF9fa3ZtX21lbXNsb3RzKGt2bSwgYXNfaWQpLCBpZCk7XG4rfVxuK1xuIC8qKlxuICAqIGZvbGlvX2ZpbGVfcGZuIC0gbGlrZSBmb2xpb19maWxlX3BhZ2UsIGJ1dCByZXR1cm4gYSBwZm4uXG4gICogQGZvbGlvOiBUaGUgZm9saW8gd2hpY2ggY29udGFpbnMgdGhpcyBpbmRleC5cbkBAIC0xNTcsNyArMTgxLDcgQEAgc3RhdGljIGVudW0ga3ZtX2dmbl9yYW5nZV9maWx0ZXIga3ZtX2dtZW1fZ2V0X2ludmFsaWRhdGVfZmlsdGVyKHN0cnVjdCBpbm9kZSAqaW5cbiBcdHJldHVybiBLVk1fRklMVEVSX1BSSVZBVEU7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIF9fa3ZtX2dtZW1faW52YWxpZGF0ZV9zdGFydChzdHJ1Y3QgZ21lbV9maWxlICpmLCBwZ29mZl90IHN0YXJ0LFxuK3N0YXRpYyBib29sIF9fa3ZtX2dtZW1faW52YWxpZGF0ZV9zdGFydChzdHJ1Y3QgZ21lbV9maWxlICpmLCBwZ29mZl90IHN0YXJ0LFxuIFx0XHRcdFx0XHRwZ29mZl90IGVuZCxcbiBcdFx0XHRcdFx0ZW51bSBrdm1fZ2ZuX3JhbmdlX2ZpbHRlciBhdHRyX2ZpbHRlcilcbiB7XG5AQCAtMTY1LDkgKzE4OSwxNSBAQCBzdGF0aWMgdm9pZCBfX2t2bV9nbWVtX2ludmFsaWRhdGVfc3RhcnQoc3RydWN0IGdtZW1fZmlsZSAqZiwgcGdvZmZfdCBzdGFydCxcbiBcdHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3Q7XG4gXHRzdHJ1Y3Qga3ZtICprdm0gPSBmLVx1MDAzZWt2bTtcbiBcdHVuc2lnbmVkIGxvbmcgaW5kZXg7XG4rXHR2b2lkICplbnRyeTtcbiBcbi1cdHhhX2Zvcl9lYWNoX3JhbmdlKFx1MDAyNmYtXHUwMDNlYmluZGluZ3MsIGluZGV4LCBzbG90LCBzdGFydCwgZW5kIC0gMSkge1xuLVx0XHRwZ29mZl90IHBnb2ZmID0gc2xvdC1cdTAwM2VnbWVtLnBnb2ZmO1xuK1x0eGFfZm9yX2VhY2hfcmFuZ2UoXHUwMDI2Zi1cdTAwM2ViaW5kaW5ncywgaW5kZXgsIGVudHJ5LCBzdGFydCwgZW5kIC0gMSkge1xuK1x0XHRwZ29mZl90IHBnb2ZmO1xuK1xuK1x0XHRzbG90ID0geGFfdmFsdWVfdG9fbWVtc2xvdChrdm0sIGVudHJ5KTtcbitcdFx0aWYgKCFzbG90KVxuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHRwZ29mZiA9IHNsb3QtXHUwMDNlZ21lbS5wZ29mZjtcbiBcbiBcdFx0c3RydWN0IGt2bV9nZm5fcmFuZ2UgZ2ZuX3JhbmdlID0ge1xuIFx0XHRcdC5zdGFydCA9IHNsb3QtXHUwMDNlYmFzZV9nZm4gKyBtYXgocGdvZmYsIHN0YXJ0KSAtIHBnb2ZmLFxuQEAgLTE5Miw2ICsyMjIsOCBAQCBzdGF0aWMgdm9pZCBfX2t2bV9nbWVtX2ludmFsaWRhdGVfc3RhcnQoc3RydWN0IGdtZW1fZmlsZSAqZiwgcGdvZmZfdCBzdGFydCxcbiBcbiBcdGlmIChmb3VuZF9tZW1zbG90KVxuIFx0XHRLVk1fTU1VX1VOTE9DSyhrdm0pO1xuK1xuK1x0cmV0dXJuIGZvdW5kX21lbXNsb3Q7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGt2bV9nbWVtX2ludmFsaWRhdGVfc3RhcnQoc3RydWN0IGlub2RlICppbm9kZSwgcGdvZmZfdCBzdGFydCxcbkBAIC0xOTksMTEgKzIzMSwyMiBAQCBzdGF0aWMgdm9pZCBrdm1fZ21lbV9pbnZhbGlkYXRlX3N0YXJ0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHBnb2ZmX3Qgc3RhcnQsXG4ge1xuIFx0ZW51bSBrdm1fZ2ZuX3JhbmdlX2ZpbHRlciBhdHRyX2ZpbHRlcjtcbiBcdHN0cnVjdCBnbWVtX2ZpbGUgKmY7XG4rXHRzdHJ1Y3Qga3ZtICprdm07XG4rXHRpbnQgaWR4O1xuIFxuIFx0YXR0cl9maWx0ZXIgPSBrdm1fZ21lbV9nZXRfaW52YWxpZGF0ZV9maWx0ZXIoaW5vZGUpO1xuIFxuLVx0a3ZtX2dtZW1fZm9yX2VhY2hfZmlsZShmLCBpbm9kZSlcbi1cdFx0X19rdm1fZ21lbV9pbnZhbGlkYXRlX3N0YXJ0KGYsIHN0YXJ0LCBlbmQsIGF0dHJfZmlsdGVyKTtcbitcdGt2bV9nbWVtX2Zvcl9lYWNoX2ZpbGUoZiwgaW5vZGUpIHtcbitcdFx0a3ZtID0gZi1cdTAwM2Vrdm07XG4rXHRcdGlkeCA9IHNyY3VfcmVhZF9sb2NrKFx1MDAyNmt2bS1cdTAwM2VzcmN1KTtcbitcdFx0LypcbitcdFx0ICogVGhpcyBpcyBzYWZlIHRvIGRvIGJlY2F1c2UgY2FsbHMgdG9cbitcdFx0ICoga3ZtX2dtZW1faW52YWxpZGF0ZV9zdGFydCgpIGFyZSBzZXJpYWxpemVkIGJ5XG4rXHRcdCAqIGZpbGVtYXBfaW52YWxpZGF0ZV9sb2NrKCkuXG4rXHRcdCAqL1xuK1x0XHRmLVx1MDAzZWZvdW5kX21lbXNsb3QgPSBfX2t2bV9nbWVtX2ludmFsaWRhdGVfc3RhcnQoZiwgc3RhcnQsIGVuZCwgYXR0cl9maWx0ZXIpO1xuK1x0XHRzcmN1X3JlYWRfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2VzcmN1LCBpZHgpO1xuK1x0fVxuIH1cbiBcbiBzdGF0aWMgdm9pZCBfX2t2bV9nbWVtX2ludmFsaWRhdGVfZW5kKHN0cnVjdCBnbWVtX2ZpbGUgKmYsIHBnb2ZmX3Qgc3RhcnQsXG5AQCAtMjIzLDggKzI2NiwxMSBAQCBzdGF0aWMgdm9pZCBrdm1fZ21lbV9pbnZhbGlkYXRlX2VuZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IHN0YXJ0LFxuIHtcbiBcdHN0cnVjdCBnbWVtX2ZpbGUgKmY7XG4gXG4tXHRrdm1fZ21lbV9mb3JfZWFjaF9maWxlKGYsIGlub2RlKVxuK1x0a3ZtX2dtZW1fZm9yX2VhY2hfZmlsZShmLCBpbm9kZSkge1xuK1x0XHRpZiAoIWYtXHUwMDNlZm91bmRfbWVtc2xvdClcbitcdFx0XHRjb250aW51ZTtcbiBcdFx0X19rdm1fZ21lbV9pbnZhbGlkYXRlX2VuZChmLCBzdGFydCwgZW5kKTtcbitcdH1cbiB9XG4gXG4gc3RhdGljIGxvbmcga3ZtX2dtZW1fcHVuY2hfaG9sZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuKVxuQEAgLTMyNiw2ICszNzIsNyBAQCBzdGF0aWMgaW50IGt2bV9nbWVtX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG4gXHRzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90O1xuIFx0c3RydWN0IGt2bSAqa3ZtID0gZi1cdTAwM2Vrdm07XG4gXHR1bnNpZ25lZCBsb25nIGluZGV4O1xuK1x0dm9pZCAqZW50cnk7XG4gXG4gXHQvKlxuIFx0ICogUHJldmVudCBjb25jdXJyZW50IGF0dGVtcHRzIHRvICp1bmJpbmQqIGEgbWVtc2xvdC4gIFRoaXMgaXMgdGhlIGxhc3RcbkBAIC0zNDQsMTcgKzM5MSwxOCBAQCBzdGF0aWMgaW50IGt2bV9nbWVtX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG4gXG4gXHRmaWxlbWFwX2ludmFsaWRhdGVfbG9jayhpbm9kZS1cdTAwM2VpX21hcHBpbmcpO1xuIFxuLVx0eGFfZm9yX2VhY2goXHUwMDI2Zi1cdTAwM2ViaW5kaW5ncywgaW5kZXgsIHNsb3QpXG4rXHR4YV9mb3JfZWFjaChcdTAwMjZmLVx1MDAzZWJpbmRpbmdzLCBpbmRleCwgZW50cnkpIHtcbitcdFx0c2xvdCA9IHhhX3ZhbHVlX3RvX21lbXNsb3Qoa3ZtLCBlbnRyeSk7XG4gXHRcdFdSSVRFX09OQ0Uoc2xvdC1cdTAwM2VnbWVtLmZpbGUsIE5VTEwpO1xuK1x0fVxuIFxuIFx0LypcbiBcdCAqIEFsbCBpbi1mbGlnaHQgb3BlcmF0aW9ucyBhcmUgZ29uZSBhbmQgbmV3IGJpbmRpbmdzIGNhbiBiZSBjcmVhdGVkLlxuIFx0ICogWmFwIGFsbCBTUFRFcyBwb2ludGVkIGF0IGJ5IHRoaXMgZmlsZS4gIERvIG5vdCBmcmVlIHRoZSBiYWNraW5nXG4gXHQgKiBtZW1vcnksIGFzIGl0cyBsaWZldGltZSBpcyBhc3NvY2lhdGVkIHdpdGggdGhlIGlub2RlLCBub3QgdGhlIGZpbGUuXG4gXHQgKi9cbi1cdF9fa3ZtX2dtZW1faW52YWxpZGF0ZV9zdGFydChmLCAwLCAtMXVsLFxuLVx0XHRcdFx0ICAgIGt2bV9nbWVtX2dldF9pbnZhbGlkYXRlX2ZpbHRlcihpbm9kZSkpO1xuLVx0X19rdm1fZ21lbV9pbnZhbGlkYXRlX2VuZChmLCAwLCAtMXVsKTtcbitcdGlmIChfX2t2bV9nbWVtX2ludmFsaWRhdGVfc3RhcnQoZiwgMCwgLTF1bCwga3ZtX2dtZW1fZ2V0X2ludmFsaWRhdGVfZmlsdGVyKGlub2RlKSkpXG4rXHRcdF9fa3ZtX2dtZW1faW52YWxpZGF0ZV9lbmQoZiwgMCwgLTF1bCk7XG4gXG4gXHRsaXN0X2RlbChcdTAwMjZmLVx1MDAzZWVudHJ5KTtcbiBcbkBAIC00OTgsMTQgKzU0NiwyMCBAQCBzdGF0aWMgaW50IGt2bV9nbWVtX21pZ3JhdGVfZm9saW8oc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4gXG4gc3RhdGljIGludCBrdm1fZ21lbV9lcnJvcl9mb2xpbyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4rXHRlbnVtIGt2bV9nZm5fcmFuZ2VfZmlsdGVyIGF0dHJfZmlsdGVyO1xuK1x0c3RydWN0IGlub2RlICppbm9kZSA9IG1hcHBpbmctXHUwMDNlaG9zdDtcbitcdHN0cnVjdCBnbWVtX2ZpbGUgKmY7XG4gXHRwZ29mZl90IHN0YXJ0LCBlbmQ7XG4rXHRib29sIGZvdW5kX21lbXNsb3Q7XG4rXHRzdHJ1Y3Qga3ZtICprdm07XG4rXHRpbnQgaWR4O1xuIFxuIFx0ZmlsZW1hcF9pbnZhbGlkYXRlX2xvY2tfc2hhcmVkKG1hcHBpbmcpO1xuIFxuIFx0c3RhcnQgPSBmb2xpby1cdTAwM2VpbmRleDtcbiBcdGVuZCA9IHN0YXJ0ICsgZm9saW9fbnJfcGFnZXMoZm9saW8pO1xuIFxuLVx0a3ZtX2dtZW1faW52YWxpZGF0ZV9zdGFydChtYXBwaW5nLVx1MDAzZWhvc3QsIHN0YXJ0LCBlbmQpO1xuK1x0YXR0cl9maWx0ZXIgPSBrdm1fZ21lbV9nZXRfaW52YWxpZGF0ZV9maWx0ZXIoaW5vZGUpO1xuIFxuIFx0LypcbiBcdCAqIERvIG5vdCB0cnVuY2F0ZSB0aGUgcmFuZ2UsIHdoYXQgYWN0aW9uIGlzIHRha2VuIGluIHJlc3BvbnNlIHRvIHRoZVxuQEAgLTUxNSw4ICs1NjksMTkgQEAgc3RhdGljIGludCBrdm1fZ21lbV9lcnJvcl9mb2xpbyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xcbiBcdCAqIGF0IHdoaWNoIHBvaW50IEtWTSBjYW4gZWl0aGVyIHRlcm1pbmF0ZSB0aGUgVk0gb3IgcHJvcGFnYXRlIHRoZVxuIFx0ICogZXJyb3IgdG8gdXNlcnNwYWNlLlxuIFx0ICovXG4rXHRrdm1fZ21lbV9mb3JfZWFjaF9maWxlKGYsIGlub2RlKSB7XG4rXHRcdGt2bSA9IGYtXHUwMDNla3ZtO1xuIFxuLVx0a3ZtX2dtZW1faW52YWxpZGF0ZV9lbmQobWFwcGluZy1cdTAwM2Vob3N0LCBzdGFydCwgZW5kKTtcbitcdFx0aWR4ID0gc3JjdV9yZWFkX2xvY2soXHUwMDI2a3ZtLVx1MDAzZXNyY3UpO1xuK1x0XHRmb3VuZF9tZW1zbG90ID0gX19rdm1fZ21lbV9pbnZhbGlkYXRlX3N0YXJ0KGYsIHN0YXJ0LCBlbmQsIGF0dHJfZmlsdGVyKTtcbitcdFx0c3JjdV9yZWFkX3VubG9jayhcdTAwMjZrdm0tXHUwMDNlc3JjdSwgaWR4KTtcbitcbitcdFx0aWYgKGZvdW5kX21lbXNsb3QpIHtcbitcdFx0XHRLVk1fTU1VX0xPQ0soa3ZtKTtcbitcdFx0XHRrdm1fbW11X2ludmFsaWRhdGVfZW5kKGt2bSk7XG4rXHRcdFx0S1ZNX01NVV9VTkxPQ0soa3ZtKTtcbitcdFx0fVxuK1x0fVxuIFxuIFx0ZmlsZW1hcF9pbnZhbGlkYXRlX3VubG9ja19zaGFyZWQobWFwcGluZyk7XG4gXG5AQCAtNTU3LDYgKzYyMiwxMSBAQCBib29sIF9fd2VhayBrdm1fYXJjaF9zdXBwb3J0c19nbWVtX2luaXRfc2hhcmVkKHN0cnVjdCBrdm0gKmt2bSlcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbitib29sIF9fd2VhayBrdm1fYXJjaF9zdXBwb3J0c19nbWVtX21tYXBfZGlydHlfbG9nZ2luZyhzdHJ1Y3Qga3ZtICprdm0pXG4re1xuK1x0cmV0dXJuIGZhbHNlO1xuK31cbitcbiBzdGF0aWMgaW50IF9fa3ZtX2dtZW1fY3JlYXRlKHN0cnVjdCBrdm0gKmt2bSwgbG9mZl90IHNpemUsIHU2NCBmbGFncylcbiB7XG4gXHRzdGF0aWMgY29uc3QgY2hhciAqbmFtZSA9IFwiW2t2bS1nbWVtXVwiO1xuQEAgLTY0MCw2ICs3MTAsNjYgQEAgaW50IGt2bV9nbWVtX2NyZWF0ZShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fY3JlYXRlX2d1ZXN0X21lbWZkICphcmdzKVxuIFx0cmV0dXJuIF9fa3ZtX2dtZW1fY3JlYXRlKGt2bSwgc2l6ZSwgZmxhZ3MpO1xuIH1cbiBcbitzdGF0aWMgaW50IF9fa3ZtX2dtZW1fY2hlY2tfbm9fY2hhbmdlKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqb2xkLFxuK1x0XHRcdFx0ICAgICAgc3RydWN0IGZpbGUgKm9sZF9maWxlLCB1bnNpZ25lZCBpbnQgZmQsXG4rXHRcdFx0XHQgICAgICBsb2ZmX3Qgb2Zmc2V0KVxuK3tcbitcdHN0cnVjdCBmaWxlICpuZXdfZmlsZTtcbitcbitcdG5ld19maWxlID0gZmdldChmZCk7XG4rXHRpZiAoIW5ld19maWxlKVxuK1x0XHRyZXR1cm4gLUVCQURGO1xuK1x0aWYgKG5ld19maWxlICE9IG9sZF9maWxlKSB7XG4rXHRcdGZwdXQobmV3X2ZpbGUpO1xuK1x0XHRyZXR1cm4gLUVCQURGO1xuK1x0fVxuK1x0ZnB1dChuZXdfZmlsZSk7XG4rXG4rXHRpZiAob2xkLVx1MDAzZWdtZW0ucGdvZmYgIT0gb2Zmc2V0IFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitpbnQga3ZtX2dtZW1fY2hlY2tfbm9fY2hhbmdlKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqb2xkLFxuK1x0XHRcdCAgICAgdW5zaWduZWQgaW50IGZkLCBsb2ZmX3Qgb2Zmc2V0KVxuK3tcbitcdENMQVNTKGdtZW1fZ2V0X2ZpbGUsIG9sZF9maWxlKShvbGQpO1xuK1xuK1x0cmV0dXJuIF9fa3ZtX2dtZW1fY2hlY2tfbm9fY2hhbmdlKGt2bSwgb2xkLCBvbGRfZmlsZSwgZmQsIG9mZnNldCk7XG4rfVxuK1xuK2ludCBrdm1fZ21lbV9jaGFuZ2VfZmxhZ3Moc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpvbGQsXG4rXHRcdFx0ICBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpuZXcsIHVuc2lnbmVkIGludCBmZCxcbitcdFx0XHQgIGxvZmZfdCBvZmZzZXQpXG4re1xuK1x0c3RydWN0IGdtZW1fZmlsZSAqb2xkX2Y7XG4rXHRpbnQgcmV0O1xuK1xuK1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZrdm0tXHUwMDNlc2xvdHNfbG9jayk7XG4rXG4rXHRpZiAoIWt2bV9tZW1zbG90X2lzX2dtZW1fb25seShvbGQpKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdENMQVNTKGdtZW1fZ2V0X2ZpbGUsIG9sZF9maWxlKShvbGQpO1xuK1xuK1x0cmV0ID0gX19rdm1fZ21lbV9jaGVja19ub19jaGFuZ2Uoa3ZtLCBvbGQsIG9sZF9maWxlLCBmZCwgb2Zmc2V0KTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRvbGRfZiA9IG9sZF9maWxlLVx1MDAzZXByaXZhdGVfZGF0YTtcbitcdGlmICh4YV9sb2FkKFx1MDAyNm9sZF9mLVx1MDAzZWJpbmRpbmdzLCBvbGQtXHUwMDNlZ21lbS5wZ29mZikgIT0gbWVtc2xvdF90b194YV92YWx1ZShuZXcpKSB7XG4rXHRcdFdBUk5fT05fT05DRSh4YV90b192YWx1ZSh4YV9sb2FkKFx1MDAyNm9sZF9mLVx1MDAzZWJpbmRpbmdzLCBvbGQtXHUwMDNlZ21lbS5wZ29mZikpKTtcbitcdFx0cmV0dXJuIC1FSU87XG4rXHR9XG4rXG4rXHRuZXctXHUwMDNlZ21lbS5maWxlID0gb2xkLVx1MDAzZWdtZW0uZmlsZTtcbitcdG5ldy1cdTAwM2VnbWVtLnBnb2ZmID0gb2xkLVx1MDAzZWdtZW0ucGdvZmY7XG4rXHRuZXctXHUwMDNlZmxhZ3MgfD0gS1ZNX01FTVNMT1RfR01FTV9PTkxZO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIGludCBrdm1fZ21lbV9iaW5kKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCxcbiBcdFx0ICB1bnNpZ25lZCBpbnQgZmQsIHVvZmZfdCBvZmZzZXQpXG4ge1xuQEAgLTY2OSw2ICs3OTksMTEgQEAgaW50IGt2bV9nbWVtX2JpbmQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LFxuIFx0aWYgKCFQQUdFX0FMSUdORUQob2Zmc2V0KSB8fCBvZmZzZXQgKyBzaXplIFx1MDAzZSBpX3NpemVfcmVhZChpbm9kZSkpXG4gXHRcdGdvdG8gZXJyO1xuIFxuK1x0aWYgKHNsb3QtXHUwMDNlZmxhZ3MgXHUwMDI2IEtWTV9NRU1fTE9HX0RJUlRZX1BBR0VTIFx1MDAyNlx1MDAyNlxuK1x0ICAgICgha3ZtX2dtZW1fc3VwcG9ydHNfbW1hcChpbm9kZSkgfHxcbitcdCAgICAgIWt2bV9hcmNoX3N1cHBvcnRzX2dtZW1fbW1hcF9kaXJ0eV9sb2dnaW5nKGt2bSkpKVxuK1x0XHRnb3RvIGVycjtcbitcbiBcdGZpbGVtYXBfaW52YWxpZGF0ZV9sb2NrKGlub2RlLVx1MDAzZWlfbWFwcGluZyk7XG4gXG4gXHRzdGFydCA9IG9mZnNldCBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbkBAIC02OTEsNyArODI2LDcgQEAgaW50IGt2bV9nbWVtX2JpbmQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LFxuIFx0aWYgKGt2bV9nbWVtX3N1cHBvcnRzX21tYXAoaW5vZGUpKVxuIFx0XHRzbG90LVx1MDAzZWZsYWdzIHw9IEtWTV9NRU1TTE9UX0dNRU1fT05MWTtcbiBcbi1cdHhhX3N0b3JlX3JhbmdlKFx1MDAyNmYtXHUwMDNlYmluZGluZ3MsIHN0YXJ0LCBlbmQgLSAxLCBzbG90LCBHRlBfS0VSTkVMKTtcbitcdHhhX3N0b3JlX3JhbmdlKFx1MDAyNmYtXHUwMDNlYmluZGluZ3MsIHN0YXJ0LCBlbmQgLSAxLCBtZW1zbG90X3RvX3hhX3ZhbHVlKHNsb3QpLCBHRlBfS0VSTkVMKTtcbiBcdGZpbGVtYXBfaW52YWxpZGF0ZV91bmxvY2soaW5vZGUtXHUwMDNlaV9tYXBwaW5nKTtcbiBcbiBcdC8qXG5AQCAtNzY1LDggKzkwMCw4IEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKl9fa3ZtX2dtZW1fZ2V0X3BmbihzdHJ1Y3QgZmlsZSAqZmlsZSxcbiBcdFx0cmV0dXJuIEVSUl9QVFIoLUVGQVVMVCk7XG4gXHR9XG4gXG4tXHRpZiAoeGFfbG9hZChcdTAwMjZmLVx1MDAzZWJpbmRpbmdzLCBpbmRleCkgIT0gc2xvdCkge1xuLVx0XHRXQVJOX09OX09OQ0UoeGFfbG9hZChcdTAwMjZmLVx1MDAzZWJpbmRpbmdzLCBpbmRleCkpO1xuK1x0aWYgKHhhX2xvYWQoXHUwMDI2Zi1cdTAwM2ViaW5kaW5ncywgaW5kZXgpICE9IG1lbXNsb3RfdG9feGFfdmFsdWUoc2xvdCkpIHtcbitcdFx0V0FSTl9PTl9PTkNFKHhhX3RvX3ZhbHVlKHhhX2xvYWQoXHUwMDI2Zi1cdTAwM2ViaW5kaW5ncywgaW5kZXgpKSk7XG4gXHRcdHJldHVybiBFUlJfUFRSKC1FSU8pO1xuIFx0fVxuIFxuZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL2t2bV9tYWluLmMgYi92aXJ0L2t2bS9rdm1fbWFpbi5jXG5pbmRleCBlNDRjMjBjMDQ5NjEwZC4uYWYzODBlOGYyYjY4ZDQgMTAwNjQ0XG4tLS0gYS92aXJ0L2t2bS9rdm1fbWFpbi5jXG4rKysgYi92aXJ0L2t2bS9rdm1fbWFpbi5jXG5AQCAtMTU3MywxNCArMTU3MywxNCBAQCBzdGF0aWMgdm9pZCBrdm1fcmVwbGFjZV9tZW1zbG90KHN0cnVjdCBrdm0gKmt2bSxcbiBzdGF0aWMgaW50IGNoZWNrX21lbW9yeV9yZWdpb25fZmxhZ3Moc3RydWN0IGt2bSAqa3ZtLFxuIFx0XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3Qga3ZtX3VzZXJzcGFjZV9tZW1vcnlfcmVnaW9uMiAqbWVtKVxuIHtcbi1cdHUzMiB2YWxpZF9mbGFncyA9IEtWTV9NRU1fTE9HX0RJUlRZX1BBR0VTO1xuK1x0dTMyIHZhbGlkX2ZsYWdzID0gMDtcbiBcbiBcdGlmIChJU19FTkFCTEVEKENPTkZJR19LVk1fR1VFU1RfTUVNRkQpKVxuIFx0XHR2YWxpZF9mbGFncyB8PSBLVk1fTUVNX0dVRVNUX01FTUZEO1xuIFxuLVx0LyogRGlydHkgbG9nZ2luZyBwcml2YXRlIG1lbW9yeSBpcyBub3QgY3VycmVudGx5IHN1cHBvcnRlZC4gKi9cbi1cdGlmIChtZW0tXHUwMDNlZmxhZ3MgXHUwMDI2IEtWTV9NRU1fR1VFU1RfTUVNRkQpXG4tXHRcdHZhbGlkX2ZsYWdzIFx1MDAyNj0gfktWTV9NRU1fTE9HX0RJUlRZX1BBR0VTO1xuK1x0aWYgKCEobWVtLVx1MDAzZWZsYWdzIFx1MDAyNiBLVk1fTUVNX0dVRVNUX01FTUZEKSB8fFxuK1x0ICAgIGt2bV9hcmNoX3N1cHBvcnRzX2dtZW1fbW1hcF9kaXJ0eV9sb2dnaW5nKGt2bSkpXG4rXHRcdHZhbGlkX2ZsYWdzIHw9IEtWTV9NRU1fTE9HX0RJUlRZX1BBR0VTO1xuIFxuIFx0LypcbiBcdCAqIEdVRVNUX01FTUZEIGlzIGluY29tcGF0aWJsZSB3aXRoIHJlYWQtb25seSBtZW1zbG90cywgYXMgd3JpdGVzIHRvXG5AQCAtMTczOSwxNiArMTczOSw2IEBAIHN0YXRpYyB2b2lkIGt2bV9jb21taXRfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sXG4gXHRcdCAqL1xuIFx0XHRpZiAob2xkLVx1MDAzZWRpcnR5X2JpdG1hcCBcdTAwMjZcdTAwMjYgIW5ldy1cdTAwM2VkaXJ0eV9iaXRtYXApXG4gXHRcdFx0a3ZtX2Rlc3Ryb3lfZGlydHlfYml0bWFwKG9sZCk7XG4tXG4tXHRcdC8qXG4tXHRcdCAqIFVuYmluZCB0aGUgZ3Vlc3RfbWVtZmQgaW5zdGFuY2UgYXMgbmVlZGVkOyB0aGUgQG5ldyBzbG90IGhhc1xuLVx0XHQgKiBhbHJlYWR5IGNyZWF0ZWQgaXRzIG93biBiaW5kaW5nLiAgVE9ETzogRHJvcCB0aGUgV0FSTiB3aGVuXG4tXHRcdCAqIGRpcnR5IGxvZ2dpbmcgZ3Vlc3RfbWVtZmQgbWVtc2xvdHMgaXMgc3VwcG9ydGVkLiAgVW50aWwgdGhlbixcbi1cdFx0ICogZmxhZ3Mtb25seSBjaGFuZ2VzIG9uIGd1ZXN0X21lbWZkIHNsb3RzIHNob3VsZCBiZSBpbXBvc3NpYmxlLlxuLVx0XHQgKi9cbi1cdFx0aWYgKFdBUk5fT05fT05DRShvbGQtXHUwMDNlZmxhZ3MgXHUwMDI2IEtWTV9NRU1fR1VFU1RfTUVNRkQpKVxuLVx0XHRcdGt2bV9nbWVtX3VuYmluZChvbGQpO1xuLVxuIFx0XHQvKlxuIFx0XHQgKiBUaGUgZmluYWwgcXVpcmsuICBGcmVlIHRoZSBkZXRhY2hlZCwgb2xkIHNsb3QsIGJ1dCBvbmx5IGl0c1xuIFx0XHQgKiBtZW1vcnksIG5vdCBhbnkgbWV0YWRhdGEuICBNZXRhZGF0YSwgaW5jbHVkaW5nIGFyY2ggc3BlY2lmaWNcbkBAIC0yMDczLDIyICsyMDYzLDI3IEBAIHN0YXRpYyBpbnQga3ZtX3NldF9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSxcbiBcdFx0aWYgKChrdm0tXHUwMDNlbnJfbWVtc2xvdF9wYWdlcyArIG5wYWdlcykgXHUwMDNjIGt2bS1cdTAwM2Vucl9tZW1zbG90X3BhZ2VzKVxuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fSBlbHNlIHsgLyogTW9kaWZ5IGFuIGV4aXN0aW5nIHNsb3QuICovXG4tXHRcdC8qIFByaXZhdGUgbWVtc2xvdHMgYXJlIGltbXV0YWJsZSwgdGhleSBjYW4gb25seSBiZSBkZWxldGVkLiAqL1xuLVx0XHRpZiAobWVtLVx1MDAzZWZsYWdzIFx1MDAyNiBLVk1fTUVNX0dVRVNUX01FTUZEKVxuLVx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHRpZiAoKG1lbS1cdTAwM2V1c2Vyc3BhY2VfYWRkciAhPSBvbGQtXHUwMDNldXNlcnNwYWNlX2FkZHIpIHx8XG4gXHRcdCAgICAobnBhZ2VzICE9IG9sZC1cdTAwM2VucGFnZXMpIHx8XG4gXHRcdCAgICAoKG1lbS1cdTAwM2VmbGFncyBeIG9sZC1cdTAwM2VmbGFncykgXHUwMDI2IChLVk1fTUVNX1JFQURPTkxZIHwgS1ZNX01FTV9HVUVTVF9NRU1GRCkpKVxuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFxuLVx0XHRpZiAoYmFzZV9nZm4gIT0gb2xkLVx1MDAzZWJhc2VfZ2ZuKVxuK1x0XHRpZiAoYmFzZV9nZm4gIT0gb2xkLVx1MDAzZWJhc2VfZ2ZuKSB7XG4gXHRcdFx0Y2hhbmdlID0gS1ZNX01SX01PVkU7XG4tXHRcdGVsc2UgaWYgKG1lbS1cdTAwM2VmbGFncyAhPSBvbGQtXHUwMDNlZmxhZ3MpXG4rXHRcdH0gZWxzZSBpZiAobWVtLVx1MDAzZWZsYWdzICE9IChvbGQtXHUwMDNlZmxhZ3MgXHUwMDI2IE1FTVNMT1RfVVNFUl9GTEFHU19NQVNLKSkge1xuIFx0XHRcdGNoYW5nZSA9IEtWTV9NUl9GTEFHU19PTkxZO1xuLVx0XHRlbHNlIC8qIE5vdGhpbmcgdG8gY2hhbmdlLiAqL1xuK1x0XHR9IGVsc2UgaWYgKG1lbS1cdTAwM2VmbGFncyBcdTAwMjYgS1ZNX01FTV9HVUVTVF9NRU1GRCkge1xuK1x0XHRcdHJldHVybiBrdm1fZ21lbV9jaGVja19ub19jaGFuZ2Uoa3ZtLCBvbGQsIG1lbS1cdTAwM2VndWVzdF9tZW1mZCxcbitcdFx0XHRcdFx0XHRcdG1lbS1cdTAwM2VndWVzdF9tZW1mZF9vZmZzZXQpO1xuK1x0XHR9IGVsc2Uge1xuIFx0XHRcdHJldHVybiAwO1xuK1x0XHR9XG4gXHR9XG4gXG4rXHRpZiAobWVtLVx1MDAzZWZsYWdzIFx1MDAyNiBLVk1fTUVNX0dVRVNUX01FTUZEIFx1MDAyNlx1MDAyNlxuK1x0ICAgIGNoYW5nZSAhPSBLVk1fTVJfQ1JFQVRFIFx1MDAyNlx1MDAyNiBjaGFuZ2UgIT0gS1ZNX01SX0ZMQUdTX09OTFkpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuIFx0aWYgKChjaGFuZ2UgPT0gS1ZNX01SX0NSRUFURSB8fCBjaGFuZ2UgPT0gS1ZNX01SX01PVkUpIFx1MDAyNlx1MDAyNlxuIFx0ICAgIGt2bV9jaGVja19tZW1zbG90X292ZXJsYXAoc2xvdHMsIGlkLCBiYXNlX2dmbiwgYmFzZV9nZm4gKyBucGFnZXMpKVxuIFx0XHRyZXR1cm4gLUVFWElTVDtcbkBAIC0yMTA1LDcgKzIxMDAsMTIgQEAgc3RhdGljIGludCBrdm1fc2V0X21lbW9yeV9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLFxuIFx0bmV3LVx1MDAzZWZsYWdzID0gbWVtLVx1MDAzZWZsYWdzO1xuIFx0bmV3LVx1MDAzZXVzZXJzcGFjZV9hZGRyID0gbWVtLVx1MDAzZXVzZXJzcGFjZV9hZGRyO1xuIFx0aWYgKG1lbS1cdTAwM2VmbGFncyBcdTAwMjYgS1ZNX01FTV9HVUVTVF9NRU1GRCkge1xuLVx0XHRyID0ga3ZtX2dtZW1fYmluZChrdm0sIG5ldywgbWVtLVx1MDAzZWd1ZXN0X21lbWZkLCBtZW0tXHUwMDNlZ3Vlc3RfbWVtZmRfb2Zmc2V0KTtcbitcdFx0aWYgKGNoYW5nZSA9PSBLVk1fTVJfQ1JFQVRFKSB7XG4rXHRcdFx0ciA9IGt2bV9nbWVtX2JpbmQoa3ZtLCBuZXcsIG1lbS1cdTAwM2VndWVzdF9tZW1mZCwgbWVtLVx1MDAzZWd1ZXN0X21lbWZkX29mZnNldCk7XG4rXHRcdH0gZWxzZSBpZiAoY2hhbmdlID09IEtWTV9NUl9GTEFHU19PTkxZKSB7XG4rXHRcdFx0ciA9IGt2bV9nbWVtX2NoYW5nZV9mbGFncyhrdm0sIG9sZCwgbmV3LCBtZW0tXHUwMDNlZ3Vlc3RfbWVtZmQsXG4rXHRcdFx0XHRcdFx0ICBtZW0tXHUwMDNlZ3Vlc3RfbWVtZmRfb2Zmc2V0KTtcbitcdFx0fVxuIFx0XHRpZiAocilcbiBcdFx0XHRnb3RvIG91dDtcbiBcdH1cbkBAIC0yMTE3LDcgKzIxMTcsNyBAQCBzdGF0aWMgaW50IGt2bV9zZXRfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sXG4gXHRyZXR1cm4gMDtcbiBcbiBvdXRfdW5iaW5kOlxuLVx0aWYgKG1lbS1cdTAwM2VmbGFncyBcdTAwMjYgS1ZNX01FTV9HVUVTVF9NRU1GRClcbitcdGlmICgobWVtLVx1MDAzZWZsYWdzIFx1MDAyNiBLVk1fTUVNX0dVRVNUX01FTUZEKSBcdTAwMjZcdTAwMjYgY2hhbmdlID09IEtWTV9NUl9DUkVBVEUpXG4gXHRcdGt2bV9nbWVtX3VuYmluZChuZXcpO1xuIG91dDpcbiBcdGtmcmVlKG5ldyk7XG5kaWZmIC0tZ2l0IGEvdmlydC9rdm0va3ZtX21tLmggYi92aXJ0L2t2bS9rdm1fbW0uaFxuaW5kZXggNzUxMGNhOTE1ZGQxYWEuLmM1OGRmZWIwZjNkZjU1IDEwMDY0NFxuLS0tIGEvdmlydC9rdm0va3ZtX21tLmhcbisrKyBiL3ZpcnQva3ZtL2t2bV9tbS5oXG5AQCAtNzcsNiArNzcsOSBAQCBpbnQga3ZtX2dtZW1fY3JlYXRlKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9jcmVhdGVfZ3Vlc3RfbWVtZmQgKmFyZ3MpO1xuIGludCBrdm1fZ21lbV9iaW5kKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCxcbiBcdFx0ICB1bnNpZ25lZCBpbnQgZmQsIHVvZmZfdCBvZmZzZXQpO1xuIHZvaWQga3ZtX2dtZW1fdW5iaW5kKHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QpO1xuK2ludCBrdm1fZ21lbV9jaGFuZ2VfZmxhZ3Moc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpvbGQsXG4rXHRcdFx0ICBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpuZXcsIHVuc2lnbmVkIGludCBmZCxcbitcdFx0XHQgIGxvZmZfdCBvZmZzZXQpO1xuICNlbHNlXG4gc3RhdGljIGlubGluZSBpbnQga3ZtX2dtZW1faW5pdChzdHJ1Y3QgbW9kdWxlICptb2R1bGUpXG4ge1xuQEAgLTk1LDYgKzk4LDE0IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBrdm1fZ21lbV91bmJpbmQoc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdClcbiB7XG4gXHRXQVJOX09OX09OQ0UoMSk7XG4gfVxuK3N0YXRpYyBpbmxpbmUgaW50IGt2bV9nbWVtX2NoYW5nZV9mbGFncyhzdHJ1Y3Qga3ZtICprdm0sXG4rXHRcdFx0XHRcdHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm9sZCxcbitcdFx0XHRcdFx0c3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbmV3LFxuK1x0XHRcdFx0XHR1bnNpZ25lZCBpbnQgZmQsIGxvZmZfdCBvZmZzZXQpXG4re1xuK1x0V0FSTl9PTl9PTkNFKDEpO1xuK1x0cmV0dXJuIC1FSU87XG4rfVxuICNlbmRpZiAvKiBDT05GSUdfS1ZNX0dVRVNUX01FTUZEICovXG4gXG4gI2VuZGlmIC8qIF9fS1ZNX01NX0hfXyAqL1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTc6MjY6NTUuMjc3MTE4OTI0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzQ3Mzk0NzE4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbjogS1ZNIEd1ZXN0IE1lbWZkIERpcnR5IFBhZ2UgTG9nZ2luZyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93biBmcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGlkZW50aWZ5IHdoZXRoZXIgdGhpcyBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCB3YXJyYW50IGZ1enppbmcuIEZyb20gd2hhdCBJIHNlZSwgaXQgYWRkcyBzdXBwb3J0IGZvciBkaXJ0eSBwYWdlIGxvZ2dpbmcgc3BlY2lmaWNhbGx5IGZvciBgZ3Vlc3RfbWVtZmRgIGJhY2tlZCBtZW1zbG90cyB3aXRoaW4gS1ZNLiBUaGlzIGxvb2tzIGludGVyZXN0aW5nLlxuXG5UaGUgcGF0Y2ggaW50cm9kdWNlcyBgS1ZNX0NBUF9HVUVTVF9NRU1GRF9NTUFQX0xPR19ESVJUWV9QQUdFU2AuIFNvIHRoaXMgaXMgc29tZXRoaW5nIG5ldyB0aGF0IGNhbiBiZSBlbmFibGVkLCBhbmQgdGhhdCdzIHVzdWFsbHkgd2hlcmUgdGhlIGJ1Z3MgaGlkZS4gTG9va2luZyBhdCB0aGUgY29kZSBtb2RpZmljYXRpb25zLCBpdCB0b3VjaGVzIHNldmVyYWwgS1ZNIGZ1bmN0aW9ucy4gSXQgc2VlbXMgdG8gaGF2ZSBhIGxvdCBvZiBjaGFuZ2VzIHJlbGF0ZWQgdG8gYGt2bV92bV9pb2N0bF9jaGVja19leHRlbnNpb25gLCBgZ21lbV9hYm9ydGAgKGFybTY0KSwgYGt2bV9nbWVtX2ludmFsaWRhdGVfc3RhcnRgLCBga3ZtX2dtZW1faW52YWxpZGF0ZV9lbmRgLCBga3ZtX2dtZW1fcmVsZWFzZWAsIGBrdm1fZ21lbV9lcnJvcl9mb2xpb2AsIGBrdm1fZ21lbV9iaW5kYCwgYGt2bV9zZXRfbWVtb3J5X3JlZ2lvbmAsIGFuZCBvdGhlcnMuIFRoaXMgaW5kaWNhdGVzIGEgc2lnbmlmaWNhbnQgc2hpZnQgaW4gaG93IG1lbW9yeSBpcyBtYW5hZ2VkIHdpdGhpbiB0aGUgZ3Vlc3QgY29udGV4dC5cblxuVGhpcyBwYXRjaCBzZXJpZXMgaXMgYWxsb3dpbmcgdGhlIGBLVk1fTUVNX0xPR19ESVJUWV9QQUdFU2AgZmxhZyB0byBiZSBzZXQgZm9yIG1lbXNsb3RzIHVzaW5nIGBLVk1fTUVNX0dVRVNUX01FTUZEYCBpZiB0aGUgYXJjaGl0ZWN0dXJlIHN1cHBvcnRzIGl0LiBDdXJyZW50bHksIGl0IHNlZW1zIHRoYXQgYGFybTY0YCBzdXBwb3J0cyBpdCwgcHJvdmlkZWQgaXQncyBub3QgYSBwcm90ZWN0ZWQgcEtWTSBWTS4gVGhpcyBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgY29uZGl0aW9uIGlzIGFsd2F5cyBzb21ldGhpbmcgdG8gdGFrZSBub3RlIG9mIGR1cmluZyBmdXp6aW5nLlxuXG5NeSBuZXh0IHN0ZXAgaXMgdG8gbmFpbCBkb3duIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMuIEkgc2VlIHRoYXQgYENPTkZJR19LVk1fR1VFU1RfTUVNRkRgIGFuZCBgQ09ORklHX0tWTWAgYXJlIHJlcXVpcmVkLiBJJ2xsIG5lZWQgdG8gY29uZmlybSB0aGVzZSBhcmUgaW5kZWVkIHRoZSByaWdodCBjb25maWd1cmF0aW9uIGZsYWdzIHRvIGVuYWJsZSB0aGlzIGZ1bmN0aW9uYWxpdHkgZm9yIGZ1enppbmcuXG5cbk5vdywgbGV0J3MgaWRlbnRpZnkgdGhlIGtleSBmb2N1cyBzeW1ib2xzIHRvIHRhcmdldCBpbiB0aGUgZnV6emluZyBoYXJuZXNzLiBJJ20gZm9jdXNpbmcgb24gZnVuY3Rpb25zIHJlbGF0ZWQgdG8gdGhlIGNvcmUgbG9naWMsIHdoaWNoIGFyZTogYGt2bV9nbWVtX2NoYW5nZV9mbGFnc2AsIGBrdm1fZ21lbV9jaGVja19ub19jaGFuZ2VgLCBga3ZtX2dtZW1fYmluZGAsIGBrdm1fc2V0X21lbW9yeV9yZWdpb25gLCBgX19rdm1fZ21lbV9pbnZhbGlkYXRlX3N0YXJ0YCwgYF9fa3ZtX2dtZW1faW52YWxpZGF0ZV9lbmRgLCBga3ZtX2dtZW1fZXJyb3JfZm9saW9gLCBhbmQgYGt2bV9nbWVtX3JlbGVhc2VgLiBUaGVzZSBsb29rIGxpa2UgdGhlIGVudHJ5IHBvaW50cyBmb3IgdGhlIG5ldyBmZWF0dXJlIG9yIHNpZ25pZmljYW50bHkgbW9kaWZpZWQgb25lcywgYmFzZWQgb24gdGhlIHBhdGNoLlxuXG5JIHdpbGwgdXNlIGBncmVwcGVyYCB0byBjb25maXJtIHRoYXQgYENPTkZJR19LVk1fR1VFU1RfTUVNRkRgIGlzIHRoZSBjb3JyZWN0IGNvbmZpZywgYW5kIEknbGwgc2VlIHdoZXJlIHRoaXMgaXMgZGVmaW5lZCBhbmQgdXNlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTUxNSwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxMSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE3OjI3OjAyLjc1MTA2ODQyNloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozODY4OTU1NjMyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBLVk1fR1VFU1RfTUVNRkRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwidmlydC9rdm0vS2NvbmZpZz0xMDM9Y29uZmlnIEtWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTXFxuLS1cXG52aXJ0L2t2bS9LY29uZmlnLTEwNS1cXG52aXJ0L2t2bS9LY29uZmlnOjEwNjpjb25maWcgS1ZNX0dVRVNUX01FTUZEXFxudmlydC9rdm0vS2NvbmZpZy0xMDctICAgICAgIHNlbGVjdCBYQVJSQVlfTVVMVElcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTc6Mjc6MDYuNjIwMDMwMTQ4WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk5OTUzMTY5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBLVk1fR1VFU1RfTUVNRkQgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIGBLVk1fR1VFU1RfTUVNRkRgLi4uIHRoYXQncyBhIGNvbmZpZyBvcHRpb24uIFJpZ2h0LiBCZWZvcmUgSSBkaXZlIHRvbyBkZWVwIGludG8gaXRzIHNwZWNpZmljcywgbXkgZmlyc3QgaW5zdGluY3QgaXMgYWx3YXlzIHRvIHVuZGVyc3RhbmQgaXRzIGRlcGVuZGVuY2llcy4gSXQncyBjcnVjaWFsLCBlc3BlY2lhbGx5IGluIGtlcm5lbCBjb25maWd1cmF0aW9ucywgdG8gc2VlIGlmIGVuYWJsaW5nIG9yIGRpc2FibGluZyB0aGlzIGZlYXR1cmUgaGFzIGNhc2NhZGluZyBlZmZlY3RzLiBEb2VzIGl0IGhpbmdlIG9uIG90aGVyIHNwZWNpZmljIG9wdGlvbnM/IElzIGl0IHRpZWQgdG8gYSBwYXJ0aWN1bGFyIGhhcmR3YXJlIGFyY2hpdGVjdHVyZSwgb3IgYSBzcGVjaWZpYyBrZXJuZWwgdmVyc2lvbj8gVW5kZXJzdGFuZGluZyB0aGVzZSBkZXBlbmRlbmNpZXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaXRzIG92ZXJhbGwgaW1wYWN0IGFuZCBwb3J0YWJpbGl0eS4gTGV0J3Mgc2VlIHdoYXQgdGhlIGNvbmZpZyBzeXN0ZW0gdGVsbHMgdXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNjI2LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTc6Mjc6MDkuNjE5NTYzNTVaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY0MTkxODM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBLVk1fR1VFU1RfTUVNRkRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwidmlydC9rdm0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJ2aXJ0L2t2bS9LY29uZmlnPTEwMz1jb25maWcgS1ZNX0dFTkVSSUNfTUVNT1JZX0FUVFJJQlVURVNcXG4tLVxcbnZpcnQva3ZtL0tjb25maWctMTA1LVxcbnZpcnQva3ZtL0tjb25maWc6MTA2OmNvbmZpZyBLVk1fR1VFU1RfTUVNRkRcXG52aXJ0L2t2bS9LY29uZmlnLTEwNy0gICAgICAgc2VsZWN0IFhBUlJBWV9NVUxUSVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxNzoyNzowOS43ODM3NjA2MDhaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDk5NDI0ODg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgS1ZNIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiBgdmlydC9rdm0vS2NvbmZpZ2AgYXJvdW5kIGxpbmUgMTA2LiBJJ20gYXNzdW1pbmcgd2UncmUgZGVhbGluZyB3aXRoIHRoZSBjb3JlIEtWTSBjb25maWd1cmF0aW9uIGhlcmUsIHByb2JhYmx5IHRoZSB0b3AtbGV2ZWwgb3B0aW9ucyB0aGF0IGRpY3RhdGUgd2hldGhlciBvciBub3QgS1ZNIGl0c2VsZiBpcyBidWlsdCBpbnRvIHRoZSBrZXJuZWwsIG9yIGFzIGEgbW9kdWxlLCBhbmQgcG9zc2libHkgc29tZSBmdW5kYW1lbnRhbCBhcmNoaXRlY3R1cmFsIGNob2ljZXMuIEF0IGxpbmUgMTA2LCBJIGV4cGVjdCB0byBlbmNvdW50ZXIgdGhlIGZvdW5kYXRpb25hbCB0b2dnbGVzLCB0aGUgYmFzZSBgYm9vbGAgb3IgYHRyaXN0YXRlYCBvcHRpb25zIHRoYXQgZW5hYmxlIG9yIGRpc2FibGUgS1ZNIHN1cHBvcnQgYXQgYSB2ZXJ5IGJyb2FkIGxldmVsLiBJJ20gbG9va2luZyBmb3IgdGhpbmdzIGxpa2UgYENPTkZJR19LVk1gLCBhbmQgbWF5YmUgaXRzIGRlcGVuZGVuY3kgb24gdGhpbmdzIGxpa2UgcHJvY2Vzc29yIHZpcnR1YWxpemF0aW9uIGV4dGVuc2lvbnMgKFZULXggb3IgQU1ELVYpLiBJJ2xsIGFsc28gYmUgc2Nhbm5pbmcgZm9yIGhvdyB0aGlzIGJhc2UgY29uZmlndXJhdGlvbiBpcyB0aGVuIHJlZmluZWQgaW50byBtb3JlIGdyYW51bGFyIGNvbnRyb2xzLiBUaGUgZ29hbCBpcyB0byBpbW1lZGlhdGVseSB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiBLVk0ncyBidWlsZCBjb25maWd1cmF0aW9uLCB3aGF0IHRoZSBpbml0aWFsIHNldHRpbmdzIGRvLCBhbmQgdGhlaXIgcmVsYXRpb25zaGlwIHRvIHZhcmlvdXMgaGFyZHdhcmUgYW5kIGFyY2hpdGVjdHVyZSBjaG9pY2VzLiBJIGFtIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGNvbmRpdGlvbmFsIHNlbGVjdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwOTI4LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTc6Mjc6MTIuODgzMTg3MTAzWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTUxMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwidmlydC9rdm0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMDA6XFx0Y29uZmlnIEtWTV9NTVVfTE9DS0xFU1NfQUdJTkdcXG4gMTAxOlxcdCAgICAgICBib29sXFxuIDEwMjpcXHRcXG4gMTAzOlxcdGNvbmZpZyBLVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU1xcbiAxMDQ6XFx0ICAgICAgIGJvb2xcXG4gMTA1OlxcdFxcbiAxMDY6XFx0Y29uZmlnIEtWTV9HVUVTVF9NRU1GRFxcbiAxMDc6XFx0ICAgICAgIHNlbGVjdCBYQVJSQVlfTVVMVElcXG4gMTA4OlxcdCAgICAgICBib29sXFxuIDEwOTpcXHRcXG4gMTEwOlxcdGNvbmZpZyBIQVZFX0tWTV9BUkNIX0dNRU1fUFJFUEFSRVxcbiAxMTE6XFx0ICAgICAgIGJvb2xcXG4gMTEyOlxcdCAgICAgICBkZXBlbmRzIG9uIEtWTV9HVUVTVF9NRU1GRFxcbiAxMTM6XFx0XFxuIDExNDpcXHRjb25maWcgSEFWRV9LVk1fQVJDSF9HTUVNX0lOVkFMSURBVEVcXG4gMTE1OlxcdCAgICAgICBib29sXFxuIDExNjpcXHQgICAgICAgZGVwZW5kcyBvbiBLVk1fR1VFU1RfTUVNRkRcXG4gMTE3OlxcdFxcbiAxMTg6XFx0Y29uZmlnIEhBVkVfS1ZNX0FSQ0hfR01FTV9QT1BVTEFURVxcbiAxMTk6XFx0ICAgICAgIGJvb2xcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTc6Mjc6MTIuODgzMjQzNDYzWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzgwOTc2OTI5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgS1ZNX0dVRVNUX01FTUZEIENvbmZpZ3VyYXRpb24gT3B0aW9uKipcblxuT2theSwgc28gdGhlcmUncyB0aGlzIGBLVk1fR1VFU1RfTUVNRkRgIHNldHRpbmcsIHR1Y2tlZCBhd2F5IGFzIGEgYm9vbGVhbiBjb25maWd1cmF0aW9uIG9wdGlvbi4gSXQncyBtYXJrZWQgYXMgaGlkZGVuLCB3aGljaCBtZWFucyBpdCdzIHByb2JhYmx5IG5vdCBzb21ldGhpbmcgZW5kLXVzZXJzIGFyZSBtZWFudCB0byBkaXJlY3RseSBtYW5pcHVsYXRlLCBidXQgcmF0aGVyIHNvbWV0aGluZyBzZWxlY3RlZCBieSB0aGUgYXJjaGl0ZWN0dXJlLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJBbHJpZ2h0LCBsZXQncyBmaWd1cmUgb3V0ICp3aG8qIGV4YWN0bHkgaXMgbWFraW5nIHVzZSBvZiB0aGlzIHRoaW5nLlwiIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoaWNoIGFyY2hpdGVjdHVyZXMgY29uc2lkZXIgdGhpcyBvcHRpb24gcmVsZXZhbnQuIERpdmluZyBpbnRvIHRoZSBjb2RlIHRvIGZpbmQgdGhlIHNlbGVjdCBzdGF0ZW1lbnRzIGlzIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcC4gRnJvbSB0aGVyZSwgSSBjYW4gYmVnaW4gdG8gdW5wYWNrICp3aHkqIHRoZXkgbmVlZCBpdC4gSSBhbSBrZWVuIHRvIGxlYXJuIHRoZSBpbXBsaWNhdGlvbnMgdGhpcyBtaWdodCBoYXZlIG9uIHRoZSB2aXJ0dWFsaXNhdGlvbiBsYW5kc2NhcGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNDg1LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxNzoyNzoxNi42OTMwMTc2NDlaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNjQzNTk3MzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VsZWN0IEtWTV9HVUVTVF9NRU1GRFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybTY0L2t2bS9LY29uZmlnPTIwPW1lbnVjb25maWcgS1ZNXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9LY29uZmlnLTM4LVxcdHNlbGVjdCBHVUVTVF9QRVJGX0VWRU5UUyBpZiBQRVJGX0VWRU5UU1xcbmFyY2gvYXJtNjQva3ZtL0tjb25maWc6Mzk6XFx0c2VsZWN0IEtWTV9HVUVTVF9NRU1GRFxcbmFyY2gvYXJtNjQva3ZtL0tjb25maWctNDAtXFx0aGVscFxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWc9MjA9Y29uZmlnIEtWTV9YODZcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTQ5LVxcdHNlbGVjdCBLVk1fV0VSUk9SIGlmIFdFUlJPUlxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjUwOlxcdHNlbGVjdCBLVk1fR1VFU1RfTUVNRkQgaWYgWDg2XzY0XFxuYXJjaC94ODYva3ZtL0tjb25maWctNTEtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE3OjI3OjE4Ljc1NzM4NDk5NloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MzE1MjU0Njg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEtWTSBHdWVzdCBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaCoqXG5cbk9rYXksIGhlcmUncyB3aGF0IEknbSB0aGlua2luZyBhYm91dCB0aGlzIHBhdGNoLiBGcm9tIGEgaGlnaCBsZXZlbCwgaXQgbG9va3MgbGlrZSB0aGlzIHBhdGNoIGludHJvZHVjZXMgY2hhbmdlcyB0byBLVk0ncyBndWVzdCBtZW1vcnkgbWFuYWdlbWVudCwgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgZGlydHkgcGFnZSBsb2dnaW5nIGZvciBgZ3Vlc3RfbWVtZmRgIGJhc2VkIG1lbXNsb3RzLiBPbiBhcm02NCBhbmQgeDg2XzY0LCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgYXJlIHNlbGVjdGVkIGJ5IGBLVk1gLiBUaGUgbWFpbiBjb25maWd1cmF0aW9uIG9wdGlvbiB0byBlbmFibGUgaXMgYEtWTWAuXG5cbkdpdmVuIHRoZSBjb3JlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBtZW1vcnkgbWFuYWdlbWVudCwgdGhpcyBpcyAqZGVmaW5pdGVseSogd29ydGggZnV6emluZy4gVGhlIHBhdGNoIGlzIHRvdWNoaW5nIEtWTSBtZW1vcnkgcmVnaW9uIGNvbmZpZ3VyYXRpb24gYW5kIGludmFsaWRhdGlvbiwgd2hpY2ggaW1tZWRpYXRlbHkgbWFrZXMgbWUgdGhpbmsgb2YgS1ZNIGlvY3RscyBsaWtlIGBLVk1fU0VUX1VTRVJfTUVNT1JZX1JFR0lPTjJgIGFuZCBwb3RlbnRpYWwgbWVtb3J5IGludmFsaWRhdGlvbiBldmVudHMuIEl0J3MgYSBwcmltZSB0YXJnZXQuXG5cbk15IGluaXRpYWwgdGhvdWdodCB3YXMgdG8gY2hlY2sgd2hldGhlciBga3ZtX3NldF9tZW1vcnlfcmVnaW9uYCB3YXMgYSBob3QgcGF0aC4gQnV0IG5vdywgYWZ0ZXIgcmV2aWV3aW5nIHRoZSBvdGhlciBmdW5jdGlvbnMsIEkgdGhpbmsgaXQgaXMgbGVzcyBpbnRlcmVzdGluZy4gSSBhbHNvIHRvb2sgYSBsb29rIGF0IG90aGVyIGZ1bmN0aW9uLCBzdWNoIGFzIGBrdm1fZ21lbV9jaGFuZ2VfZmxhZ3NgIGFuZCBga3ZtX2dtZW1fY2hlY2tfbm9fY2hhbmdlYCB3aGljaCBzZWVtIHNwZWNpZmljIHRvIHRoaXMgcGF0Y2guIEkgYWxzbyBzYXcgdGhhdCBgX19rdm1fZ21lbV9pbnZhbGlkYXRlX3N0YXJ0YCBhbmQgYF9fa3ZtX2dtZW1faW52YWxpZGF0ZV9lbmRgIGhhdmUgYWxzbyBiZWVuIG1vZGlmaWVkLlxuXG5TbywgbGV0J3MgcmVmaW5lIHRoZSBzeW1ib2wgbGlzdCB0aGF0IHNob3VsZCBiZSB0aGUgZm9jdXMgb2YgdGhlIGZ1enppbmcgZWZmb3J0cy4gSSdsbCBpbmNsdWRlIHRoZSBmb2xsb3dpbmc6XG5cbiogICBga3ZtX2dtZW1fY2hhbmdlX2ZsYWdzYFxuKiAgIGBrdm1fZ21lbV9jaGVja19ub19jaGFuZ2VgXG4qICAgYF9fa3ZtX2dtZW1faW52YWxpZGF0ZV9zdGFydGBcbiogICBgX19rdm1fZ21lbV9pbnZhbGlkYXRlX2VuZGBcbiogICBga3ZtX2dtZW1fZXJyb3JfZm9saW9gXG5cbkkndmUgYWxzbyBjb25maXJtZWQgdGhhdCBga3ZtX2dtZW1fY2hhbmdlX2ZsYWdzYCBpcyBleHBvcnRlZCB0byBgdmlydC9rdm0va3ZtX21tLmhgLCB3aGljaCBpcyBpbXBvcnRhbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IGl0J3MgYmVpbmcgdXNlZC4gU2ltaWxhcmx5LCBga3ZtX2dtZW1fY2hlY2tfbm9fY2hhbmdlYCBpcyBhbHNvIGV4cG9ydGVkLCB3aGljaCBjb25maXJtcyBpdHMgaW1wb3J0YW5jZSBpbiB0aGUgYnJvYWRlciBLVk0gYXJjaGl0ZWN0dXJlLlxuXG5NeSByZWFzb25pbmcgYm9pbHMgZG93biB0byB0aGlzOiB0aGUgcGF0Y2ggZnVuZGFtZW50YWxseSBhbHRlcnMgbWVtb3J5IHJlZ2lvbiBtYW5hZ2VtZW50IGFuZCBpbnZhbGlkYXRpb24gd2l0aGluIEtWTS4gVGhpcyBoYXMgZGlyZWN0IGltcGxpY2F0aW9ucyBmb3IgaG93IGd1ZXN0cyBpbnRlcmFjdCB3aXRoIG1lbW9yeSBhbmQsIHRoZXJlZm9yZSwgaXMgYSBwcmltZSB0YXJnZXQgZm9yIHZ1bG5lcmFiaWxpdHkgcmVzZWFyY2guIFNwZWNpZmljYWxseSwgaW9jdGwgY2FsbHMgcmVsYXRlZCB0byBtZW1vcnkgcmVnaW9uIGNvbmZpZ3VyYXRpb24gYW5kIGFueXRoaW5nIHRoYXQgY2FuIHRyaWdnZXIgbWVtb3J5IGludmFsaWRhdGlvbiB3b3VsZCBiZSBwcmltYXJ5IGFyZWFzIGZvciBmdXp6aW5nIGFuZCBhdWRpdC4gVGhlIGNvbmZpZ3Mgd2lsbCBiZSBgS1ZNYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE5MTUsIk91dHB1dFRva2VucyI6MTg4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE3OjI3OjI4LjA3MjY0MTcxWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzUxMzM2MzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV9nbWVtX2NoYW5nZV9mbGFnc1wiLFxuICAgIFwia3ZtX2dtZW1fY2hlY2tfbm9fY2hhbmdlXCIsXG4gICAgXCJfX2t2bV9nbWVtX2ludmFsaWRhdGVfc3RhcnRcIixcbiAgICBcIl9fa3ZtX2dtZW1faW52YWxpZGF0ZV9lbmRcIixcbiAgICBcImt2bV9nbWVtX2Vycm9yX2ZvbGlvXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBzdXBwb3J0IGZvciBkaXJ0eSBwYWdlIGxvZ2dpbmcgZm9yIGBndWVzdF9tZW1mZGAgYmFja2VkIG1lbXNsb3RzIGluIEtWTS4gSXQgbW9kaWZpZXMgdGhlIEtWTSBtZW1vcnkgcmVnaW9uIGNvbmZpZ3VyYXRpb24gbG9naWMgYW5kIHRoZSBpbnZhbGlkYXRpb24gcGF0aHMgZm9yIGd1ZXN0IG1lbW9yeS4gVGhlc2UgYXJlIGNvcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIEtWTSB0aGF0IGNhbiBiZSByZWFjaGVkIHZpYSBLVk0gaW9jdGxzIChlLmcuLCBgS1ZNX1NFVF9VU0VSX01FTU9SWV9SRUdJT04yYCkgYW5kIG1lbW9yeSBpbnZhbGlkYXRpb24gZXZlbnRzLCBtYWtpbmcgdGhlbSBoaWdobHkgcmVsZXZhbnQgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX2dtZW1fY2hhbmdlX2ZsYWdzXCIsXG4gICAgXCJrdm1fZ21lbV9jaGVja19ub19jaGFuZ2VcIixcbiAgICBcIl9fa3ZtX2dtZW1faW52YWxpZGF0ZV9zdGFydFwiLFxuICAgIFwiX19rdm1fZ21lbV9pbnZhbGlkYXRlX2VuZFwiLFxuICAgIFwia3ZtX2dtZW1fZXJyb3JfZm9saW9cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIHN1cHBvcnQgZm9yIGRpcnR5IHBhZ2UgbG9nZ2luZyBmb3IgYGd1ZXN0X21lbWZkYCBiYWNrZWQgbWVtc2xvdHMgaW4gS1ZNLiBJdCBtb2RpZmllcyB0aGUgS1ZNIG1lbW9yeSByZWdpb24gY29uZmlndXJhdGlvbiBsb2dpYyBhbmQgdGhlIGludmFsaWRhdGlvbiBwYXRocyBmb3IgZ3Vlc3QgbWVtb3J5LiBUaGVzZSBhcmUgY29yZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gS1ZNIHRoYXQgY2FuIGJlIHJlYWNoZWQgdmlhIEtWTSBpb2N0bHMgKGUuZy4sIGBLVk1fU0VUX1VTRVJfTUVNT1JZX1JFR0lPTjJgKSBhbmQgbWVtb3J5IGludmFsaWRhdGlvbiBldmVudHMsIG1ha2luZyB0aGVtIGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowz52hp[1] Phase: Succeeded StartedAt: 2026-07-02 17:27:51 +0000 UTC FinishedAt: 2026-07-02 17:27:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz52hp[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-02 17:27:51 +0000 UTC FinishedAt: 2026-07-02 17:27:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz52hp[2] Phase: Succeeded StartedAt: 2026-07-02 17:27:51 +0000 UTC FinishedAt: 2026-07-02 21:52:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz52hp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_gmem_change_flags","kvm_gmem_check_no_change","__kvm_gmem_invalidate_start","__kvm_gmem_invalidate_end","kvm_gmem_error_folio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"5a624959-c01e-4998-aec4-273ce396d195","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-02 17:27:51 +0000 UTC FinishedAt: 2026-07-02 21:52:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_gmem_change_flags","kvm_gmem_check_no_change","__kvm_gmem_invalidate_start","__kvm_gmem_invalidate_end","kvm_gmem_error_folio"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"5a624959-c01e-4998-aec4-273ce396d195","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowz52hp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_gmem_change_flags","kvm_gmem_check_no_change","__kvm_gmem_invalidate_start","__kvm_gmem_invalidate_end","kvm_gmem_error_folio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"5a624959-c01e-4998-aec4-273ce396d195","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-02 17:27:51 +0000 UTC FinishedAt: 2026-07-02 17:28:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz52hp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_gmem_change_flags","kvm_gmem_check_no_change","__kvm_gmem_invalidate_start","__kvm_gmem_invalidate_end","kvm_gmem_error_folio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"5a624959-c01e-4998-aec4-273ce396d195","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-02 17:27:51 +0000 UTC FinishedAt: 2026-07-02 17:27:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},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-workflowz52hp/series-workflowz52hp-convert-artifact-2902053616/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowz52hp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_gmem_change_flags","kvm_gmem_check_no_change","__kvm_gmem_invalidate_start","__kvm_gmem_invalidate_end","kvm_gmem_error_folio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"5a624959-c01e-4998-aec4-273ce396d195","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-02 17:28:01 +0000 UTC FinishedAt: 2026-07-02 18:05:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz52hp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_gmem_change_flags","kvm_gmem_check_no_change","__kvm_gmem_invalidate_start","__kvm_gmem_invalidate_end","kvm_gmem_error_folio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"5a624959-c01e-4998-aec4-273ce396d195","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-02 17:28:01 +0000 UTC FinishedAt: 2026-07-02 18:05:57 +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:*345c8f37-722b-4ddb-b012-1d7d9e169412,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-workflowz52hp/series-workflowz52hp-convert-artifact-2902053616/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": "30d9b751-5241-4357-88f8-9efd0276934a", "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-workflowz52hp/series-workflowz52hp-build-action-1200807414/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowz52hp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_gmem_change_flags","kvm_gmem_check_no_change","__kvm_gmem_invalidate_start","__kvm_gmem_invalidate_end","kvm_gmem_error_folio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"5a624959-c01e-4998-aec4-273ce396d195","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-02 17:28:01 +0000 UTC FinishedAt: 2026-07-02 18:03:46 +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:*345c8f37-722b-4ddb-b012-1d7d9e169412,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-workflowz52hp/series-workflowz52hp-convert-artifact-2902053616/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": "30d9b751-5241-4357-88f8-9efd0276934a", "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-workflowz52hp/series-workflowz52hp-build-action-1200807414/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowz52hp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_gmem_change_flags","kvm_gmem_check_no_change","__kvm_gmem_invalidate_start","__kvm_gmem_invalidate_end","kvm_gmem_error_folio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"5a624959-c01e-4998-aec4-273ce396d195","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-02 18:05:57 +0000 UTC FinishedAt: 2026-07-02 18:05:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz52hp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_gmem_change_flags","kvm_gmem_check_no_change","__kvm_gmem_invalidate_start","__kvm_gmem_invalidate_end","kvm_gmem_error_folio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"5a624959-c01e-4998-aec4-273ce396d195","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-02 18:05:57 +0000 UTC FinishedAt: 2026-07-02 18:05:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz52hp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_gmem_change_flags","kvm_gmem_check_no_change","__kvm_gmem_invalidate_start","__kvm_gmem_invalidate_end","kvm_gmem_error_folio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"5a624959-c01e-4998-aec4-273ce396d195","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-02 18:05:57 +0000 UTC FinishedAt: 2026-07-02 18:06:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz52hp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_gmem_change_flags","kvm_gmem_check_no_change","__kvm_gmem_invalidate_start","__kvm_gmem_invalidate_end","kvm_gmem_error_folio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"5a624959-c01e-4998-aec4-273ce396d195","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-02 18:05:57 +0000 UTC FinishedAt: 2026-07-02 18:06:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"5a624959-c01e-4998-aec4-273ce396d195","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},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-workflowz52hp/series-workflowz52hp-convert-artifact-314031831/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowz52hp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_gmem_change_flags","kvm_gmem_check_no_change","__kvm_gmem_invalidate_start","__kvm_gmem_invalidate_end","kvm_gmem_error_folio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"5a624959-c01e-4998-aec4-273ce396d195","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-02 18:06:18 +0000 UTC FinishedAt: 2026-07-02 18:08:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz52hp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_gmem_change_flags","kvm_gmem_check_no_change","__kvm_gmem_invalidate_start","__kvm_gmem_invalidate_end","kvm_gmem_error_folio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"5a624959-c01e-4998-aec4-273ce396d195","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-02 18:06:18 +0000 UTC FinishedAt: 2026-07-02 18:08:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*30d9b751-5241-4357-88f8-9efd0276934a,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-workflowz52hp/series-workflowz52hp-build-action-1200807414/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-workflowz52hp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_gmem_change_flags","kvm_gmem_check_no_change","__kvm_gmem_invalidate_start","__kvm_gmem_invalidate_end","kvm_gmem_error_folio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"5a624959-c01e-4998-aec4-273ce396d195","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-02 18:08:25 +0000 UTC FinishedAt: 2026-07-02 18:08:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz52hp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_gmem_change_flags","kvm_gmem_check_no_change","__kvm_gmem_invalidate_start","__kvm_gmem_invalidate_end","kvm_gmem_error_folio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"5a624959-c01e-4998-aec4-273ce396d195","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-02 18:08:25 +0000 UTC FinishedAt: 2026-07-02 18:08:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz52hp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_gmem_change_flags","kvm_gmem_check_no_change","__kvm_gmem_invalidate_start","__kvm_gmem_invalidate_end","kvm_gmem_error_folio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"5a624959-c01e-4998-aec4-273ce396d195","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-02 18:08:25 +0000 UTC FinishedAt: 2026-07-02 18:46:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz52hp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_gmem_change_flags","kvm_gmem_check_no_change","__kvm_gmem_invalidate_start","__kvm_gmem_invalidate_end","kvm_gmem_error_folio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"5a624959-c01e-4998-aec4-273ce396d195","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-02 18:08:25 +0000 UTC FinishedAt: 2026-07-02 18:46:59 +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:*345c8f37-722b-4ddb-b012-1d7d9e169412,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-workflowz52hp/series-workflowz52hp-convert-artifact-314031831/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": "9b2da249-9733-4682-a890-13d529b0d428", "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-workflowz52hp/series-workflowz52hp-build-action-3550098971/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowz52hp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_gmem_change_flags","kvm_gmem_check_no_change","__kvm_gmem_invalidate_start","__kvm_gmem_invalidate_end","kvm_gmem_error_folio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"5a624959-c01e-4998-aec4-273ce396d195","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-02 18:08:25 +0000 UTC FinishedAt: 2026-07-02 18:46:36 +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:*345c8f37-722b-4ddb-b012-1d7d9e169412,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-workflowz52hp/series-workflowz52hp-convert-artifact-314031831/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": "9b2da249-9733-4682-a890-13d529b0d428", "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-workflowz52hp/series-workflowz52hp-build-action-3550098971/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowz52hp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_gmem_change_flags","kvm_gmem_check_no_change","__kvm_gmem_invalidate_start","__kvm_gmem_invalidate_end","kvm_gmem_error_folio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"5a624959-c01e-4998-aec4-273ce396d195","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-02 18:46:59 +0000 UTC FinishedAt: 2026-07-02 18:46:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz52hp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_gmem_change_flags","kvm_gmem_check_no_change","__kvm_gmem_invalidate_start","__kvm_gmem_invalidate_end","kvm_gmem_error_folio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"5a624959-c01e-4998-aec4-273ce396d195","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-02 18:46:59 +0000 UTC FinishedAt: 2026-07-02 18:46:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz52hp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_gmem_change_flags","kvm_gmem_check_no_change","__kvm_gmem_invalidate_start","__kvm_gmem_invalidate_end","kvm_gmem_error_folio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"5a624959-c01e-4998-aec4-273ce396d195","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-02 18:46:59 +0000 UTC FinishedAt: 2026-07-02 18:49:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz52hp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_gmem_change_flags","kvm_gmem_check_no_change","__kvm_gmem_invalidate_start","__kvm_gmem_invalidate_end","kvm_gmem_error_folio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"5a624959-c01e-4998-aec4-273ce396d195","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-02 18:46:59 +0000 UTC FinishedAt: 2026-07-02 18:49:02 +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:*9b2da249-9733-4682-a890-13d529b0d428,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-workflowz52hp/series-workflowz52hp-build-action-3550098971/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-workflowz52hp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_gmem_change_flags","kvm_gmem_check_no_change","__kvm_gmem_invalidate_start","__kvm_gmem_invalidate_end","kvm_gmem_error_folio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"5a624959-c01e-4998-aec4-273ce396d195","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-02 18:49:12 +0000 UTC FinishedAt: 2026-07-02 21:52:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz52hp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_gmem_change_flags","kvm_gmem_check_no_change","__kvm_gmem_invalidate_start","__kvm_gmem_invalidate_end","kvm_gmem_error_folio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"5a624959-c01e-4998-aec4-273ce396d195","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-02 18:49:12 +0000 UTC FinishedAt: 2026-07-02 21:52:48 +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":["kvm_gmem_change_flags","kvm_gmem_check_no_change","__kvm_gmem_invalidate_start","__kvm_gmem_invalidate_end","kvm_gmem_error_folio"],"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:*30d9b751-5241-4357-88f8-9efd0276934a,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*9b2da249-9733-4682-a890-13d529b0d428,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-workflowz52hp/series-workflowz52hp-build-action-1200807414/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-workflowz52hp/series-workflowz52hp-build-action-3550098971/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowz52hp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_gmem_change_flags","kvm_gmem_check_no_change","__kvm_gmem_invalidate_start","__kvm_gmem_invalidate_end","kvm_gmem_error_folio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"5a624959-c01e-4998-aec4-273ce396d195","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-02 18:49:12 +0000 UTC FinishedAt: 2026-07-02 18:50:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz52hp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_gmem_change_flags","kvm_gmem_check_no_change","__kvm_gmem_invalidate_start","__kvm_gmem_invalidate_end","kvm_gmem_error_folio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"5a624959-c01e-4998-aec4-273ce396d195","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-02 18:49:12 +0000 UTC FinishedAt: 2026-07-02 18:49:40 +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":["kvm_gmem_change_flags","kvm_gmem_check_no_change","__kvm_gmem_invalidate_start","__kvm_gmem_invalidate_end","kvm_gmem_error_folio"],"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-workflowz52hp/series-workflowz52hp-convert-artifact-2360968336/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowz52hp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_gmem_change_flags","kvm_gmem_check_no_change","__kvm_gmem_invalidate_start","__kvm_gmem_invalidate_end","kvm_gmem_error_folio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"5a624959-c01e-4998-aec4-273ce396d195","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-02 18:49:12 +0000 UTC FinishedAt: 2026-07-02 18:49:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz52hp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_gmem_change_flags","kvm_gmem_check_no_change","__kvm_gmem_invalidate_start","__kvm_gmem_invalidate_end","kvm_gmem_error_folio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"5a624959-c01e-4998-aec4-273ce396d195","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-02 18:49:12 +0000 UTC FinishedAt: 2026-07-02 18:49:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz52hp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_gmem_change_flags","kvm_gmem_check_no_change","__kvm_gmem_invalidate_start","__kvm_gmem_invalidate_end","kvm_gmem_error_folio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"5a624959-c01e-4998-aec4-273ce396d195","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-02 18:49:12 +0000 UTC FinishedAt: 2026-07-02 18:49:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz52hp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_gmem_change_flags","kvm_gmem_check_no_change","__kvm_gmem_invalidate_start","__kvm_gmem_invalidate_end","kvm_gmem_error_folio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"5a624959-c01e-4998-aec4-273ce396d195","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-02 18:50:29 +0000 UTC FinishedAt: 2026-07-02 21:52:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz52hp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_gmem_change_flags","kvm_gmem_check_no_change","__kvm_gmem_invalidate_start","__kvm_gmem_invalidate_end","kvm_gmem_error_folio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"5a624959-c01e-4998-aec4-273ce396d195","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-02 18:50:29 +0000 UTC FinishedAt: 2026-07-02 21:52:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*30d9b751-5241-4357-88f8-9efd0276934a,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*9b2da249-9733-4682-a890-13d529b0d428,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-workflowz52hp/series-workflowz52hp-build-action-1200807414/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-workflowz52hp/series-workflowz52hp-build-action-3550098971/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-workflowz52hp/series-workflowz52hp-convert-artifact-2360968336/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,}