Name: series-workflowcnk2z Phase: Succeeded StartedAt: 2026-07-11 04:07:40 +0000 UTC FinishedAt: 2026-07-11 08:39:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcnk2z[0] Phase: Succeeded StartedAt: 2026-07-11 04:07:40 +0000 UTC FinishedAt: 2026-07-11 04:19:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcnk2z[0].run-triage Phase: Succeeded StartedAt: 2026-07-11 04:07:40 +0000 UTC FinishedAt: 2026-07-11 04:19:40 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "d96fcfe1b7f94ac742984ae7986b94a116abff1b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "FS_VERITY", "XFS_FS", "XFS_ONLINE_SCRUB" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "d96fcfe1b7f94ac742984ae7986b94a116abff1b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "FS_VERITY", "XFS_FS", "XFS_ONLINE_SCRUB" ], "series_id": "12fa9d7b-406b-4d7f-ab3f-bf059d63fbdd" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "xfs_fsverity_begin_enable", "xfs_fsverity_end_enable", "xfs_fsverity_get_descriptor", "xfs_fsverity_write_descriptor", "xfs_fsverity_delete_metadata", "xfs_fsverity_cancel_unwritten", "xfs_fsverity_read_merkle", "xfs_fsverity_readahead_merkle_tree", "xfs_fsverity_write_merkle", "fsverity_pagecache_read", "xchk_inode_setup_verity", "xchk_inode_verity_broken", "xrep_inode_verity" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDA0OjE5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0ZTX1ZFUklUWSYjMzQ7LAogICAgJiMzNDtYRlNfRlMmIzM0OywKICAgICYjMzQ7WEZTX09OTElORV9TQ1JVQiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3hmc19mc3Zlcml0eV9iZWdpbl9lbmFibGUmIzM0OywKICAgICYjMzQ7eGZzX2ZzdmVyaXR5X2VuZF9lbmFibGUmIzM0OywKICAgICYjMzQ7eGZzX2ZzdmVyaXR5X2dldF9kZXNjcmlwdG9yJiMzNDssCiAgICAmIzM0O3hmc19mc3Zlcml0eV93cml0ZV9kZXNjcmlwdG9yJiMzNDssCiAgICAmIzM0O3hmc19mc3Zlcml0eV9kZWxldGVfbWV0YWRhdGEmIzM0OywKICAgICYjMzQ7eGZzX2ZzdmVyaXR5X2NhbmNlbF91bndyaXR0ZW4mIzM0OywKICAgICYjMzQ7eGZzX2ZzdmVyaXR5X3JlYWRfbWVya2xlJiMzNDssCiAgICAmIzM0O3hmc19mc3Zlcml0eV9yZWFkYWhlYWRfbWVya2xlX3RyZWUmIzM0OywKICAgICYjMzQ7eGZzX2ZzdmVyaXR5X3dyaXRlX21lcmtsZSYjMzQ7LAogICAgJiMzNDtmc3Zlcml0eV9wYWdlY2FjaGVfcmVhZCYjMzQ7LAogICAgJiMzNDt4Y2hrX2lub2RlX3NldHVwX3Zlcml0eSYjMzQ7LAogICAgJiMzNDt4Y2hrX2lub2RlX3Zlcml0eV9icm9rZW4mIzM0OywKICAgICYjMzQ7eHJlcF9pbm9kZV92ZXJpdHkmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGlzIHBhdGNoIHNlcmllcyBpbXBsZW1lbnRzIGZzLXZlcml0eSBzdXBwb3J0IGZvciB0aGUgWEZTIGZpbGVzeXN0ZW0uIEl0IGludHJvZHVjZXMgbmV3IG1ldGFkYXRhIGhhbmRsaW5nLCBpb2N0bCBvcGVyYXRpb25zLCBhbmQgaW50ZWdyYXRpb24gd2l0aCBYRlMmIzM5O3MgaW9tYXAgYW5kIHNjcnViIGluZnJhc3RydWN0dXJlLiBUaGlzIGlzIGEgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBhZGRpdGlvbiB0byBhIGNvcmUgZmlsZXN5c3RlbSBhbmQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIHRvIGVuc3VyZSBkYXRhIGludGVncml0eSBhbmQgcHJldmVudCB2dWxuZXJhYmlsaXRpZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMDQ6MTk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA1ODIyZDFjYjFlZDgyODc5OTY4MWU2Mzc0NzIzN2UzNjk1YzM4NzQxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBKdWwgMTEgMDQ6MTk6MDUgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvYnRyZnMvdmVyaXR5LmMgYi9mcy9idHJmcy92ZXJpdHkuY1xuaW5kZXggOTgzMzY1YTczNTQxNjguLmJkNzllMzQzYWUyMzdmIDEwMDY0NFxuLS0tIGEvZnMvYnRyZnMvdmVyaXR5LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2J0cmZzL3Zlcml0eS5jXG5AQCAtNzczLDExICYjNDM7NzczLDE1IEBAIHN0YXRpYyBzdHJ1Y3QgcGFnZSAqYnRyZnNfcmVhZF9tZXJrbGVfdHJlZV9wYWdlKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gICogQGJ1ZjpcdE1lcmtsZSB0cmVlIGJsb2NrIHRvIHdyaXRlXG4gICogQHBvczpcdHRoZSBwb3NpdGlvbiBvZiB0aGUgYmxvY2sgaW4gdGhlIE1lcmtsZSB0cmVlIChpbiBieXRlcylcbiAgKiBAc2l6ZTpcdHRoZSBNZXJrbGUgdHJlZSBibG9jayBzaXplIChpbiBieXRlcylcbiYjNDM7ICogQHplcm9fZGlnZXN0Olx0dGhlIGhhc2ggb2YgdGhlIGFsbC16ZXJvZXMgYmxvY2tcbiYjNDM7ICogQGRpZ2VzdF9zaXplOlx0c2l6ZSBvZiB6ZXJvX2RpZ2VzdCwgaW4gYnl0ZXNcbiAgKlxuICAqIFJldHVybnMgMCBvbiBzdWNjZXNzIG9yIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZVxuICAqL1xuIHN0YXRpYyBpbnQgYnRyZnNfd3JpdGVfbWVya2xlX3RyZWVfYmxvY2soc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IHZvaWQgKmJ1Zixcbi1cdFx0XHRcdFx0IHU2NCBwb3MsIHVuc2lnbmVkIGludCBzaXplKVxuJiM0MztcdFx0XHRcdFx0IHU2NCBwb3MsIHVuc2lnbmVkIGludCBzaXplLFxuJiM0MztcdFx0XHRcdFx0IGNvbnN0IHU4ICp6ZXJvX2RpZ2VzdCxcbiYjNDM7XHRcdFx0XHRcdCB1bnNpZ25lZCBpbnQgZGlnZXN0X3NpemUpXG4ge1xuIFx0c3RydWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5vZGUoZmlsZSk7XG4gXHRsb2ZmX3QgbWVya2xlX3BvcyA9IG1lcmtsZV9maWxlX3Bvcyhpbm9kZSk7XG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC92ZXJpdHkuYyBiL2ZzL2V4dDQvdmVyaXR5LmNcbmluZGV4IGNhNjFkYTUzZjMxM2ZhLi5hYzVjMTMzZjU1MjkyNSAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQvdmVyaXR5LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDQvdmVyaXR5LmNcbkBAIC0zNCwzMiAmIzQzOzM0LDYgQEAgc3RhdGljIGlubGluZSBsb2ZmX3QgZXh0NF92ZXJpdHlfbWV0YWRhdGFfcG9zKGNvbnN0IHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4gXHRyZXR1cm4gcm91bmRfdXAoaW5vZGUtXHUwMDNlaV9zaXplLCA2NTUzNik7XG4gfVxuIFxuLS8qXG4tICogUmVhZCBzb21lIHZlcml0eSBtZXRhZGF0YSBmcm9tIHRoZSBpbm9kZS4gIF9fdmZzX3JlYWQoKSBjYW4mIzM5O3QgYmUgdXNlZCBiZWNhdXNlXG4tICogd2UgbmVlZCB0byByZWFkIGJleW9uZCBpX3NpemUuXG4tICovXG4tc3RhdGljIGludCBwYWdlY2FjaGVfcmVhZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCB2b2lkICpidWYsIHNpemVfdCBjb3VudCxcbi1cdFx0XHQgIGxvZmZfdCBwb3MpXG4te1xuLVx0d2hpbGUgKGNvdW50KSB7XG4tXHRcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4tXHRcdHNpemVfdCBuO1xuLVxuLVx0XHRmb2xpbyA9IHJlYWRfbWFwcGluZ19mb2xpbyhpbm9kZS1cdTAwM2VpX21hcHBpbmcsIHBvcyBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCxcbi1cdFx0XHRcdFx0IE5VTEwpO1xuLVx0XHRpZiAoSVNfRVJSKGZvbGlvKSlcbi1cdFx0XHRyZXR1cm4gUFRSX0VSUihmb2xpbyk7XG4tXG4tXHRcdG4gPSBtZW1jcHlfZnJvbV9maWxlX2ZvbGlvKGJ1ZiwgZm9saW8sIHBvcywgY291bnQpO1xuLVx0XHRmb2xpb19wdXQoZm9saW8pO1xuLVxuLVx0XHRidWYgJiM0Mzs9IG47XG4tXHRcdHBvcyAmIzQzOz0gbjtcbi1cdFx0Y291bnQgLT0gbjtcbi1cdH1cbi1cdHJldHVybiAwO1xuLX1cbi1cbiAvKlxuICAqIFdyaXRlIHNvbWUgdmVyaXR5IG1ldGFkYXRhIHRvIHRoZSBpbm9kZSBmb3IgRlNfSU9DX0VOQUJMRV9WRVJJVFkuXG4gICoga2VybmVsX3dyaXRlKCkgY2FuJiMzOTt0IGJlIHVzZWQgYmVjYXVzZSB0aGUgZmlsZSBkZXNjcmlwdG9yIGlzIHJlYWRvbmx5LlxuQEAgLTMxMSw4ICYjNDM7Mjg1LDggQEAgc3RhdGljIGludCBleHQ0X2dldF92ZXJpdHlfZGVzY3JpcHRvcl9sb2NhdGlvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0XHRnb3RvIGJhZDtcbiBcdGRlc2Nfc2l6ZV9wb3MgLT0gc2l6ZW9mKGRlc2Nfc2l6ZV9kaXNrKTtcbiBcbi1cdGVyciA9IHBhZ2VjYWNoZV9yZWFkKGlub2RlLCBcdTAwMjZkZXNjX3NpemVfZGlzaywgc2l6ZW9mKGRlc2Nfc2l6ZV9kaXNrKSxcbi1cdFx0XHQgICAgIGRlc2Nfc2l6ZV9wb3MpO1xuJiM0MztcdGVyciA9IGZzdmVyaXR5X3BhZ2VjYWNoZV9yZWFkKGlub2RlLCBcdTAwMjZkZXNjX3NpemVfZGlzayxcbiYjNDM7XHRcdFx0XHQgICAgICBzaXplb2YoZGVzY19zaXplX2Rpc2spLCBkZXNjX3NpemVfcG9zKTtcbiBcdGlmIChlcnIpXG4gXHRcdHJldHVybiBlcnI7XG4gXHRkZXNjX3NpemUgPSBsZTMyX3RvX2NwdShkZXNjX3NpemVfZGlzayk7XG5AQCAtMzUyLDcgJiM0MzszMjYsNyBAQCBzdGF0aWMgaW50IGV4dDRfZ2V0X3Zlcml0eV9kZXNjcmlwdG9yKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHZvaWQgKmJ1ZixcbiBcdGlmIChidWZfc2l6ZSkge1xuIFx0XHRpZiAoZGVzY19zaXplIFx1MDAzZSBidWZfc2l6ZSlcbiBcdFx0XHRyZXR1cm4gLUVSQU5HRTtcbi1cdFx0ZXJyID0gcGFnZWNhY2hlX3JlYWQoaW5vZGUsIGJ1ZiwgZGVzY19zaXplLCBkZXNjX3Bvcyk7XG4mIzQzO1x0XHRlcnIgPSBmc3Zlcml0eV9wYWdlY2FjaGVfcmVhZChpbm9kZSwgYnVmLCBkZXNjX3NpemUsIGRlc2NfcG9zKTtcbiBcdFx0aWYgKGVycilcbiBcdFx0XHRyZXR1cm4gZXJyO1xuIFx0fVxuQEAgLTM3NCw3ICYjNDM7MzQ4LDkgQEAgc3RhdGljIHZvaWQgZXh0NF9yZWFkYWhlYWRfbWVya2xlX3RyZWUoc3RydWN0IGlub2RlICppbm9kZSwgcGdvZmZfdCBpbmRleCxcbiB9XG4gXG4gc3RhdGljIGludCBleHQ0X3dyaXRlX21lcmtsZV90cmVlX2Jsb2NrKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCB2b2lkICpidWYsXG4tXHRcdFx0XHRcdHU2NCBwb3MsIHVuc2lnbmVkIGludCBzaXplKVxuJiM0MztcdFx0XHRcdFx0dTY0IHBvcywgdW5zaWduZWQgaW50IHNpemUsXG4mIzQzO1x0XHRcdFx0XHRjb25zdCB1OCAqemVyb19kaWdlc3QsXG4mIzQzO1x0XHRcdFx0XHR1bnNpZ25lZCBpbnQgZGlnZXN0X3NpemUpXG4ge1xuIFx0cG9zICYjNDM7PSBleHQ0X3Zlcml0eV9tZXRhZGF0YV9wb3MoZmlsZV9pbm9kZShmaWxlKSk7XG4gXG5kaWZmIC0tZ2l0IGEvZnMvZjJmcy92ZXJpdHkuYyBiL2ZzL2YyZnMvdmVyaXR5LmNcbmluZGV4IDM5ZjQ4MjUxNTQ0NTJhLi5mM2E0NjE3NjU2ZGI5YiAxMDA2NDRcbi0tLSBhL2ZzL2YyZnMvdmVyaXR5LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2YyZnMvdmVyaXR5LmNcbkBAIC0zNywzNCAmIzQzOzM3LDYgQEAgc3RhdGljIGlubGluZSBsb2ZmX3QgZjJmc192ZXJpdHlfbWV0YWRhdGFfcG9zKGNvbnN0IHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4gXHRyZXR1cm4gcm91bmRfdXAoaW5vZGUtXHUwMDNlaV9zaXplLCA2NTUzNik7XG4gfVxuIFxuLS8qXG4tICogUmVhZCBzb21lIHZlcml0eSBtZXRhZGF0YSBmcm9tIHRoZSBpbm9kZS4gIF9fdmZzX3JlYWQoKSBjYW4mIzM5O3QgYmUgdXNlZCBiZWNhdXNlXG4tICogd2UgbmVlZCB0byByZWFkIGJleW9uZCBpX3NpemUuXG4tICovXG4tc3RhdGljIGludCBwYWdlY2FjaGVfcmVhZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCB2b2lkICpidWYsIHNpemVfdCBjb3VudCxcbi1cdFx0XHQgIGxvZmZfdCBwb3MpXG4te1xuLVx0d2hpbGUgKGNvdW50KSB7XG4tXHRcdHNpemVfdCBuID0gbWluX3Qoc2l6ZV90LCBjb3VudCxcbi1cdFx0XHRcdCBQQUdFX1NJWkUgLSBvZmZzZXRfaW5fcGFnZShwb3MpKTtcbi1cdFx0c3RydWN0IHBhZ2UgKnBhZ2U7XG4tXG4tXHRcdHBhZ2UgPSByZWFkX21hcHBpbmdfcGFnZShpbm9kZS1cdTAwM2VpX21hcHBpbmcsIHBvcyBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCxcbi1cdFx0XHRcdFx0IE5VTEwpO1xuLVx0XHRpZiAoSVNfRVJSKHBhZ2UpKVxuLVx0XHRcdHJldHVybiBQVFJfRVJSKHBhZ2UpO1xuLVxuLVx0XHRtZW1jcHlfZnJvbV9wYWdlKGJ1ZiwgcGFnZSwgb2Zmc2V0X2luX3BhZ2UocG9zKSwgbik7XG4tXG4tXHRcdHB1dF9wYWdlKHBhZ2UpO1xuLVxuLVx0XHRidWYgJiM0Mzs9IG47XG4tXHRcdHBvcyAmIzQzOz0gbjtcbi1cdFx0Y291bnQgLT0gbjtcbi1cdH1cbi1cdHJldHVybiAwO1xuLX1cbi1cbiAvKlxuICAqIFdyaXRlIHNvbWUgdmVyaXR5IG1ldGFkYXRhIHRvIHRoZSBpbm9kZSBmb3IgRlNfSU9DX0VOQUJMRV9WRVJJVFkuXG4gICoga2VybmVsX3dyaXRlKCkgY2FuJiMzOTt0IGJlIHVzZWQgYmVjYXVzZSB0aGUgZmlsZSBkZXNjcmlwdG9yIGlzIHJlYWRvbmx5LlxuQEAgLTI1MCw3ICYjNDM7MjIyLDcgQEAgc3RhdGljIGludCBmMmZzX2dldF92ZXJpdHlfZGVzY3JpcHRvcihzdHJ1Y3QgaW5vZGUgKmlub2RlLCB2b2lkICpidWYsXG4gXHRpZiAoYnVmX3NpemUpIHtcbiBcdFx0aWYgKHNpemUgXHUwMDNlIGJ1Zl9zaXplKVxuIFx0XHRcdHJldHVybiAtRVJBTkdFO1xuLVx0XHRyZXMgPSBwYWdlY2FjaGVfcmVhZChpbm9kZSwgYnVmLCBzaXplLCBwb3MpO1xuJiM0MztcdFx0cmVzID0gZnN2ZXJpdHlfcGFnZWNhY2hlX3JlYWQoaW5vZGUsIGJ1Ziwgc2l6ZSwgcG9zKTtcbiBcdFx0aWYgKHJlcylcbiBcdFx0XHRyZXR1cm4gcmVzO1xuIFx0fVxuQEAgLTI3Miw3ICYjNDM7MjQ0LDkgQEAgc3RhdGljIHZvaWQgZjJmc19yZWFkYWhlYWRfbWVya2xlX3RyZWUoc3RydWN0IGlub2RlICppbm9kZSwgcGdvZmZfdCBpbmRleCxcbiB9XG4gXG4gc3RhdGljIGludCBmMmZzX3dyaXRlX21lcmtsZV90cmVlX2Jsb2NrKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCB2b2lkICpidWYsXG4tXHRcdFx0XHRcdHU2NCBwb3MsIHVuc2lnbmVkIGludCBzaXplKVxuJiM0MztcdFx0XHRcdFx0dTY0IHBvcywgdW5zaWduZWQgaW50IHNpemUsXG4mIzQzO1x0XHRcdFx0XHRjb25zdCB1OCAqemVyb19kaWdlc3QsXG4mIzQzO1x0XHRcdFx0XHR1bnNpZ25lZCBpbnQgZGlnZXN0X3NpemUpXG4ge1xuIFx0cG9zICYjNDM7PSBmMmZzX3Zlcml0eV9tZXRhZGF0YV9wb3MoZmlsZV9pbm9kZShmaWxlKSk7XG4gXG5kaWZmIC0tZ2l0IGEvZnMvZmlsZV9hdHRyLmMgYi9mcy9maWxlX2F0dHIuY1xuaW5kZXggYmZiMDBkMjU2ZGQ1NjAuLjU0MjRlYzRlMzk0OTNmIDEwMDY0NFxuLS0tIGEvZnMvZmlsZV9hdHRyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2ZpbGVfYXR0ci5jXG5AQCAtMjQ2LDYgJiM0MzsyNDYsMTEgQEAgc3RhdGljIGludCBmaWxlYXR0cl9zZXRfcHJlcGFyZShzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0aWYgKGZhLVx1MDAzZWZzeF9jb3dleHRzaXplID09IDApXG4gXHRcdGZhLVx1MDAzZWZzeF94ZmxhZ3MgXHUwMDI2PSB+RlNfWEZMQUdfQ09XRVhUU0laRTtcbiBcbiYjNDM7XHQvKiBDYW4gbm90IGVuYWJsZSBEQVggb24gZnN2ZXJpdHkgZmlsZSAqL1xuJiM0MztcdGlmICgob2xkX21hLVx1MDAzZWZzeF94ZmxhZ3MgXHUwMDI2IEZTX1hGTEFHX1ZFUklUWSkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRcdGZhLVx1MDAzZWZzeF94ZmxhZ3MgXHUwMDI2IEZTX1hGTEFHX0RBWClcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiBcdHJldHVybiAwO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9mcy92ZXJpdHkvZW5hYmxlLmMgYi9mcy92ZXJpdHkvZW5hYmxlLmNcbmluZGV4IDQyZGZlZDFjZTBjZTY2Li5hZDRmZjcxZDdkZDk1YiAxMDA2NDRcbi0tLSBhL2ZzL3Zlcml0eS9lbmFibGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvdmVyaXR5L2VuYWJsZS5jXG5AQCAtNTAsNyAmIzQzOzUwLDkgQEAgc3RhdGljIGludCB3cml0ZV9tZXJrbGVfdHJlZV9ibG9jayhzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgdTggKmJ1ZixcbiBcdGludCBlcnI7XG4gXG4gXHRlcnIgPSBpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfdm9wLVx1MDAzZXdyaXRlX21lcmtsZV90cmVlX2Jsb2NrKGZpbGUsIGJ1ZiwgcG9zLFxuLVx0XHRcdFx0XHRcdFx0ICBwYXJhbXMtXHUwMDNlYmxvY2tfc2l6ZSk7XG4mIzQzO1x0XHRcdFx0XHRcdFx0ICBwYXJhbXMtXHUwMDNlYmxvY2tfc2l6ZSxcbiYjNDM7XHRcdFx0XHRcdFx0XHQgIHBhcmFtcy1cdTAwM2V6ZXJvX2RpZ2VzdCxcbiYjNDM7XHRcdFx0XHRcdFx0XHQgIHBhcmFtcy1cdTAwM2VkaWdlc3Rfc2l6ZSk7XG4gXHRpZiAoZXJyKVxuIFx0XHRmc3Zlcml0eV9lcnIoaW5vZGUsIFwmIzM0O0Vycm9yICVkIHdyaXRpbmcgTWVya2xlIHRyZWUgYmxvY2sgJWx1XCYjMzQ7LFxuIFx0XHRcdCAgICAgZXJyLCBpbmRleCk7XG5kaWZmIC0tZ2l0IGEvZnMvdmVyaXR5L29wZW4uYyBiL2ZzL3Zlcml0eS9vcGVuLmNcbmluZGV4IGQwYzU2YTdmYWEzYmIxLi44NzVlODg1MGNjYmFjZSAxMDA2NDRcbi0tLSBhL2ZzL3Zlcml0eS9vcGVuLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3Zlcml0eS9vcGVuLmNcbkBAIC0zNDcsNyAmIzQzOzM0NywyNCBAQCBpbnQgZnN2ZXJpdHlfZ2V0X2Rlc2NyaXB0b3Ioc3RydWN0IGlub2RlICppbm9kZSxcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgaW50IGVuc3VyZV92ZXJpdHlfaW5mbyhzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuJiM0MzsvKipcbiYjNDM7ICogZnN2ZXJpdHlfZW5zdXJlX3Zlcml0eV9pbmZvKCkgLSBjYWNoZSB2ZXJpdHkgaW5mbyBpZiBpdCYjMzk7cyBub3QgYWxyZWFkeSBjYWNoZWRcbiYjNDM7ICogQGlub2RlOiB0aGUgaW5vZGUgZm9yIHdoaWNoIHZlcml0eSBpbmZvIHNob3VsZCBiZSBjYWNoZWRcbiYjNDM7ICpcbiYjNDM7ICogRW5zdXJlIHRoaXMgaW5vZGUgaGFzIHZlcml0eSBpbmZvIGF0dGFjaGVkIHRvIGl0LCBpdCYjMzk7cyBhc3N1bWVkIHRoZSBpbm9kZVxuJiM0MzsgKiBhbHJlYWR5IGhhcyBmc3Zlcml0eSBlbmFibGVkLiBSZWFkIGZzdmVyaXR5IGRlc2NyaXB0b3IgYW5kIGNyZWF0ZXMgdmVyaXR5XG4mIzQzOyAqIGJhc2VkIG9uIHRoYXQuXG4mIzQzOyAqXG4mIzQzOyAqIFRoaXMgbmVlZHMgdG8gYmUgY2FsbGVkIGF0IGxlYXN0IG9uY2UgYmVmb3JlIGFueSBvZiB0aGUgaW5vZGUmIzM5O3MgZGF0YVxuJiM0MzsgKiBjYW4gYmUgdmVyaWZpZWQgKGFuZCB0aHVzIHJlYWQgYXQgYWxsKSBvciB0aGUgaW5vZGUmIzM5O3MgZnN2ZXJpdHkgZGlnZXN0XG4mIzQzOyAqIHJldHJpZXZlZC4gIGZzdmVyaXR5X2ZpbGVfb3BlbigpIGNhbGxzIHRoaXMgYWxyZWFkeSwgd2hpY2ggaGFuZGxlc1xuJiM0MzsgKiBub3JtYWwgZmlsZSBhY2Nlc3Nlcy4gIElmIGEgZmlsZXN5c3RlbSBkb2VzIGFueSBpbnRlcm5hbCAoaS5lLiBub3RcbiYjNDM7ICogYXNzb2NpYXRlZCB3aXRoIGEgZmlsZSBkZXNjcmlwdG9yKSByZWFkcyBvZiB0aGUgZmlsZSYjMzk7cyBkYXRhIG9yXG4mIzQzOyAqIGZzdmVyaXR5IGRpZ2VzdCwgaXQgbXVzdCBjYWxsIHRoaXMgZXhwbGljaXRseSBiZWZvcmUgZG9pbmcgc28uXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAtZXJybm8gb24gZmFpbHVyZVxuJiM0MzsgKi9cbiYjNDM7aW50IGZzdmVyaXR5X2Vuc3VyZV92ZXJpdHlfaW5mbyhzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIHtcbiBcdHN0cnVjdCBmc3Zlcml0eV9pbmZvICp2aSA9IGZzdmVyaXR5X2dldF9pbmZvKGlub2RlKSwgKmZvdW5kO1xuIFx0c3RydWN0IGZzdmVyaXR5X2Rlc2NyaXB0b3IgKmRlc2M7XG5AQCAtMzgzLDEyICYjNDM7NDAwLDEzIEBAIHN0YXRpYyBpbnQgZW5zdXJlX3Zlcml0eV9pbmZvKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4gXHRrZnJlZShkZXNjKTtcbiBcdHJldHVybiBlcnI7XG4gfVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChmc3Zlcml0eV9lbnN1cmVfdmVyaXR5X2luZm8pO1xuIFxuIGludCBfX2ZzdmVyaXR5X2ZpbGVfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscClcbiB7XG4gXHRpZiAoZmlscC1cdTAwM2VmX21vZGUgXHUwMDI2IEZNT0RFX1dSSVRFKVxuIFx0XHRyZXR1cm4gLUVQRVJNO1xuLVx0cmV0dXJuIGVuc3VyZV92ZXJpdHlfaW5mbyhpbm9kZSk7XG4mIzQzO1x0cmV0dXJuIGZzdmVyaXR5X2Vuc3VyZV92ZXJpdHlfaW5mbyhpbm9kZSk7XG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKF9fZnN2ZXJpdHlfZmlsZV9vcGVuKTtcbiBcbmRpZmYgLS1naXQgYS9mcy92ZXJpdHkvcGFnZWNhY2hlLmMgYi9mcy92ZXJpdHkvcGFnZWNhY2hlLmNcbmluZGV4IDk5ZjVmNTNlZWE5ODVmLi4yNzBhYmQ2NTJlNDhjNiAxMDA2NDRcbi0tLSBhL2ZzL3Zlcml0eS9wYWdlY2FjaGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvdmVyaXR5L3BhZ2VjYWNoZS5jXG5AQCAtNjgsMTMgJiM0Mzs2OCw2NCBAQCBFWFBPUlRfU1lNQk9MX0dQTChnZW5lcmljX3JlYWRhaGVhZF9tZXJrbGVfdHJlZSk7XG4gdm9pZCBmc3Zlcml0eV9maWxsX3plcm9oYXNoKHN0cnVjdCBmb2xpbyAqZm9saW8sIHNpemVfdCBvZmZzZXQsIHNpemVfdCBsZW4sXG4gXHRcdFx0ICAgICAgc3RydWN0IGZzdmVyaXR5X2luZm8gKnZpKVxuIHtcbi1cdHNpemVfdCBvZmYgPSBvZmZzZXQ7XG4mIzQzO1x0dm9pZCAqdmFkZHI7XG4mIzQzO1x0dm9pZCAqdG87XG4mIzQzO1x0c2l6ZV90IGNodW5rO1xuIFxuIFx0V0FSTl9PTl9PTkNFKCFJU19BTElHTkVEKG9mZnNldCwgdmktXHUwMDNldHJlZV9wYXJhbXMuZGlnZXN0X3NpemUpKTtcbiBcdFdBUk5fT05fT05DRSghSVNfQUxJR05FRChsZW4sIHZpLVx1MDAzZXRyZWVfcGFyYW1zLmRpZ2VzdF9zaXplKSk7XG4mIzQzO1x0V0FSTl9PTl9PTkNFKG9mZnNldCAmIzQzOyBsZW4gXHUwMDNlIGZvbGlvX3NpemUoZm9saW8pKTtcbiBcbi1cdGZvciAoOyBvZmYgXHUwMDNjIChvZmZzZXQgJiM0MzsgbGVuKTsgb2ZmICYjNDM7PSB2aS1cdTAwM2V0cmVlX3BhcmFtcy5kaWdlc3Rfc2l6ZSlcbi1cdFx0bWVtY3B5X3RvX2ZvbGlvKGZvbGlvLCBvZmYsIHZpLVx1MDAzZXRyZWVfcGFyYW1zLnplcm9fZGlnZXN0LFxuJiM0MztcdGRvIHtcbiYjNDM7XHRcdHZhZGRyID0ga21hcF9sb2NhbF9mb2xpbyhmb2xpbywgb2Zmc2V0KTtcbiYjNDM7XHRcdGNodW5rID0gbGVuO1xuJiM0MztcdFx0dG8gPSB2YWRkcjtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoZm9saW9fdGVzdF9wYXJ0aWFsX2ttYXAoZm9saW8pIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgIGNodW5rIFx1MDAzZSBQQUdFX1NJWkUgLSBvZmZzZXRfaW5fcGFnZShvZmZzZXQpKVxuJiM0MztcdFx0XHRjaHVuayA9IFBBR0VfU0laRSAtIG9mZnNldF9pbl9wYWdlKG9mZnNldCk7XG4mIzQzO1x0XHRmb3IgKDsgdG8gXHUwMDNjICh2YWRkciAmIzQzOyBjaHVuayk7IHRvICYjNDM7PSB2aS1cdTAwM2V0cmVlX3BhcmFtcy5kaWdlc3Rfc2l6ZSlcbiYjNDM7XHRcdFx0bWVtY3B5KHRvLCB2aS1cdTAwM2V0cmVlX3BhcmFtcy56ZXJvX2RpZ2VzdCxcbiBcdFx0XHRcdHZpLVx1MDAzZXRyZWVfcGFyYW1zLmRpZ2VzdF9zaXplKTtcbiYjNDM7XHRcdGt1bm1hcF9sb2NhbCh2YWRkcik7XG4mIzQzO1xuJiM0MztcdFx0b2Zmc2V0ICYjNDM7PSBjaHVuaztcbiYjNDM7XHRcdGxlbiAtPSBjaHVuaztcbiYjNDM7XHR9IHdoaWxlIChsZW4gXHUwMDNlIDApO1xuJiM0MztcbiYjNDM7XHRmbHVzaF9kY2FjaGVfZm9saW8oZm9saW8pO1xuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChmc3Zlcml0eV9maWxsX3plcm9oYXNoKTtcbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBmc3Zlcml0eV9wYWdlY2FjaGVfcmVhZCgpIC0gcmVhZCBwYWdlIGFuZCBjb3B5IGRhdGEgdG8gYnVmZmVyXG4mIzQzOyAqIEBpbm9kZTpcdGNvcHkgZnJvbSB0aGlzIGlub2RlJiMzOTtzIGFkZHJlc3Mgc3BhY2VcbiYjNDM7ICogQGJ1ZjpcdGJ1ZmZlciB0byBjb3B5IHRvXG4mIzQzOyAqIEBjb3VudDpcdG51bWJlciBvZiBieXRlcyB0byBjb3B5XG4mIzQzOyAqIEBwb3M6XHRwb3NpdGlvbiBvZiB0aGUgZm9saW8gdG8gY29weSBmcm9tXG4mIzQzOyAqXG4mIzQzOyAqIFJlYWQgc29tZSB2ZXJpdHkgbWV0YWRhdGEgZnJvbSB0aGUgaW5vZGUuICBfX3Zmc19yZWFkKCkgY2FuJiMzOTt0IGJlIHVzZWQgYmVjYXVzZVxuJiM0MzsgKiB3ZSBuZWVkIHRvIHJlYWQgYmV5b25kIGlfc2l6ZS5cbiYjNDM7ICovXG4mIzQzO2ludCBmc3Zlcml0eV9wYWdlY2FjaGVfcmVhZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCB2b2lkICpidWYsIHNpemVfdCBjb3VudCxcbiYjNDM7XHRcdFx0ICBsb2ZmX3QgcG9zKVxuJiM0Mzt7XG4mIzQzO1x0d2hpbGUgKGNvdW50KSB7XG4mIzQzO1x0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuJiM0MztcdFx0c2l6ZV90IG47XG4mIzQzO1xuJiM0MztcdFx0Zm9saW8gPSByZWFkX21hcHBpbmdfZm9saW8oaW5vZGUtXHUwMDNlaV9tYXBwaW5nLCBwb3MgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQsXG4mIzQzO1x0XHRcdFx0XHQgTlVMTCk7XG4mIzQzO1x0XHRpZiAoSVNfRVJSKGZvbGlvKSlcbiYjNDM7XHRcdFx0cmV0dXJuIFBUUl9FUlIoZm9saW8pO1xuJiM0MztcbiYjNDM7XHRcdG4gPSBtZW1jcHlfZnJvbV9maWxlX2ZvbGlvKGJ1ZiwgZm9saW8sIHBvcywgY291bnQpO1xuJiM0MztcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbiYjNDM7XG4mIzQzO1x0XHRidWYgJiM0Mzs9IG47XG4mIzQzO1x0XHRwb3MgJiM0Mzs9IG47XG4mIzQzO1x0XHRjb3VudCAtPSBuO1xuJiM0MztcdH1cbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChmc3Zlcml0eV9wYWdlY2FjaGVfcmVhZCk7XG5kaWZmIC0tZ2l0IGEvZnMvdmVyaXR5L3ZlcmlmeS5jIGIvZnMvdmVyaXR5L3ZlcmlmeS5jXG5pbmRleCA0MDA0YTFkNDI4NzUxZi4uZGI4YzM1MDIzNGJiNzEgMTAwNjQ0XG4tLS0gYS9mcy92ZXJpdHkvdmVyaWZ5LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3Zlcml0eS92ZXJpZnkuY1xuQEAgLTksNiAmIzQzOzksNyBAQFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Jpby5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZXhwb3J0LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvZnNlcnJvci5oXHUwMDNlXG4gXG4gI2RlZmluZSBGU19WRVJJVFlfTUFYX1BFTkRJTkdfQkxPQ0tTIDJcbiBcbkBAIC0yMDUsNiAmIzQzOzIwNiw4IEBAIHN0YXRpYyBib29sIHZlcmlmeV9kYXRhX2Jsb2NrKHN0cnVjdCBmc3Zlcml0eV9pbmZvICp2aSxcbiBcdFx0aWYgKG1lbWNocl9pbnYoZGJsb2NrLVx1MDAzZWRhdGEsIDAsIHBhcmFtcy1cdTAwM2VibG9ja19zaXplKSkge1xuIFx0XHRcdGZzdmVyaXR5X2Vycihpbm9kZSxcbiBcdFx0XHRcdCAgICAgXCYjMzQ7RklMRSBDT1JSVVBURUQhICBEYXRhIHBhc3QgRU9GIGlzIG5vdCB6ZXJvZWRcJiMzNDspO1xuJiM0MztcdFx0XHRmc2Vycm9yX3JlcG9ydF9kYXRhX2xvc3QoaW5vZGUsIGRhdGFfcG9zLFxuJiM0MztcdFx0XHRcdFx0XHQgcGFyYW1zLVx1MDAzZWJsb2NrX3NpemUsIEdGUF9OT0ZTKTtcbiBcdFx0XHRyZXR1cm4gZmFsc2U7XG4gXHRcdH1cbiBcdFx0cmV0dXJuIHRydWU7XG5AQCAtMzEyLDYgJiM0MzszMTUsNyBAQCBzdGF0aWMgYm9vbCB2ZXJpZnlfZGF0YV9ibG9jayhzdHJ1Y3QgZnN2ZXJpdHlfaW5mbyAqdmksXG4gXHRcdGRhdGFfcG9zLCBsZXZlbCAtIDEsIHBhcmFtcy1cdTAwM2VoYXNoX2FsZy1cdTAwM2VuYW1lLCBoc2l6ZSwgd2FudF9oYXNoLFxuIFx0XHRwYXJhbXMtXHUwMDNlaGFzaF9hbGctXHUwMDNlbmFtZSwgaHNpemUsXG4gXHRcdGxldmVsID09IDAgPyBkYmxvY2stXHUwMDNlcmVhbF9oYXNoIDogcmVhbF9oYXNoKTtcbiYjNDM7XHRmc2Vycm9yX3JlcG9ydF9kYXRhX2xvc3QoaW5vZGUsIGRhdGFfcG9zLCBwYXJhbXMtXHUwMDNlYmxvY2tfc2l6ZSwgR0ZQX05PRlMpO1xuIGVycm9yOlxuIFx0Zm9yICg7IGxldmVsIFx1MDAzZSAwOyBsZXZlbC0tKSB7XG4gXHRcdGt1bm1hcF9sb2NhbChoYmxvY2tzW2xldmVsIC0gMV0uYWRkcik7XG5kaWZmIC0tZ2l0IGEvZnMveGZzL01ha2VmaWxlIGIvZnMveGZzL01ha2VmaWxlXG5pbmRleCA5ZjcxMzNlMDI1NzY4ZC4uMzhiN2Y1MWU1ZDg0MDUgMTAwNjQ0XG4tLS0gYS9mcy94ZnMvTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3hmcy9NYWtlZmlsZVxuQEAgLTE0OSw2ICYjNDM7MTQ5LDcgQEAgeGZzLSQoQ09ORklHX1hGU19QT1NJWF9BQ0wpXHQmIzQzOz0geGZzX2FjbC5vXG4geGZzLSQoQ09ORklHX1NZU0NUTClcdFx0JiM0Mzs9IHhmc19zeXNjdGwub1xuIHhmcy0kKENPTkZJR19DT01QQVQpXHRcdCYjNDM7PSB4ZnNfaW9jdGwzMi5vXG4geGZzLSQoQ09ORklHX0VYUE9SVEZTX0JMT0NLX09QUylcdCYjNDM7PSB4ZnNfcG5mcy5vXG4mIzQzO3hmcy0kKENPTkZJR19GU19WRVJJVFkpXHRcdCYjNDM7PSB4ZnNfZnN2ZXJpdHkub1xuIFxuICMgbm90aWZ5IGZhaWx1cmVcbiBpZmVxICgkKENPTkZJR19NRU1PUllfRkFJTFVSRSkseSlcbmRpZmYgLS1naXQgYS9mcy94ZnMvbGlieGZzL3hmc19ibWFwLmMgYi9mcy94ZnMvbGlieGZzL3hmc19ibWFwLmNcbmluZGV4IGQ2NGRlZmVkYTY0NWVkLi5jYzQ4ZjZlMjBlODAwMCAxMDA2NDRcbi0tLSBhL2ZzL3hmcy9saWJ4ZnMveGZzX2JtYXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMveGZzL2xpYnhmcy94ZnNfYm1hcC5jXG5AQCAtNDEsNiAmIzQzOzQxLDggQEBcbiAjaW5jbHVkZSBcJiMzNDt4ZnNfaW5vZGVfdXRpbC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7eGZzX3J0Z3JvdXAuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3hmc196b25lX2FsbG9jLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7eGZzX2ZzdmVyaXR5LmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvZnN2ZXJpdHkuaFx1MDAzZVxuIFxuIHN0cnVjdCBrbWVtX2NhY2hlXHRcdCp4ZnNfYm1hcF9pbnRlbnRfY2FjaGU7XG4gXG5AQCAtNDQwMiw2ICYjNDM7NDQwNCwxMCBAQCB4ZnNfYm1hcGlfY29udmVydF9vbmVfZGVsYWxsb2MoXG4gXHQgKiB0aGUgZXh0ZW50LiAgSnVzdCByZXR1cm4gdGhlIHJlYWwgZXh0ZW50IGF0IHRoaXMgb2Zmc2V0LlxuIFx0ICovXG4gXHRpZiAoIWlzbnVsbHN0YXJ0YmxvY2soYm1hLmdvdC5icl9zdGFydGJsb2NrKSkge1xuJiM0MztcdFx0aWYgKHhmc19pZmxhZ3NfdGVzdChpcCwgWEZTX1ZFUklUWV9DT05TVFJVQ1RJT04pIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgIFhGU19GU0JfVE9fQihtcCwgYm1hLmdvdC5icl9zdGFydG9mZikgXHUwMDNlPVxuJiM0MztcdFx0XHQgICAgeGZzX2ZzdmVyaXR5X21ldGFkYXRhX29mZnNldChpcCkpXG4mIzQzO1x0XHRcdGZsYWdzIHw9IElPTUFQX0ZfRlNWRVJJVFk7XG4gXHRcdHhmc19ibWJ0X3RvX2lvbWFwKGlwLCBpb21hcCwgXHUwMDI2Ym1hLmdvdCwgMCwgZmxhZ3MsXG4gXHRcdFx0XHR4ZnNfaW9tYXBfaW5vZGVfc2VxdWVuY2UoaXAsIGZsYWdzKSk7XG4gXHRcdGlmIChzZXEpXG5AQCAtNDQ0OSw2ICYjNDM7NDQ1NSwxMSBAQCB4ZnNfYm1hcGlfY29udmVydF9vbmVfZGVsYWxsb2MoXG4gXHRYRlNfU1RBVFNfQUREKG1wLCB4c194c3RyYXRfYnl0ZXMsIFhGU19GU0JfVE9fQihtcCwgYm1hLmxlbmd0aCkpO1xuIFx0WEZTX1NUQVRTX0lOQyhtcCwgeHNfeHN0cmF0X3F1aWNrKTtcbiBcbiYjNDM7XHRpZiAoeGZzX2lmbGFnc190ZXN0KGlwLCBYRlNfVkVSSVRZX0NPTlNUUlVDVElPTikgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIFhGU19GU0JfVE9fQihtcCwgYm1hLmdvdC5icl9zdGFydG9mZikgXHUwMDNlPVxuJiM0MztcdFx0ICAgIHhmc19mc3Zlcml0eV9tZXRhZGF0YV9vZmZzZXQoaXApKVxuJiM0MztcdFx0ZmxhZ3MgfD0gSU9NQVBfRl9GU1ZFUklUWTtcbiYjNDM7XG4gXHRBU1NFUlQoIWlzbnVsbHN0YXJ0YmxvY2soYm1hLmdvdC5icl9zdGFydGJsb2NrKSk7XG4gXHR4ZnNfYm1idF90b19pb21hcChpcCwgaW9tYXAsIFx1MDAyNmJtYS5nb3QsIDAsIGZsYWdzLFxuIFx0XHRcdFx0eGZzX2lvbWFwX2lub2RlX3NlcXVlbmNlKGlwLCBmbGFncykpO1xuZGlmZiAtLWdpdCBhL2ZzL3hmcy9saWJ4ZnMveGZzX2Zvcm1hdC5oIGIvZnMveGZzL2xpYnhmcy94ZnNfZm9ybWF0LmhcbmluZGV4IGRkMGVkMDQ2ZmJlOWM5Li4yODc4YmM5Y2I2NTY0ZSAxMDA2NDRcbi0tLSBhL2ZzL3hmcy9saWJ4ZnMveGZzX2Zvcm1hdC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy94ZnMvbGlieGZzL3hmc19mb3JtYXQuaFxuQEAgLTM3NCwxMSAmIzQzOzM3NCwxMyBAQCB4ZnNfc2JfaGFzX2NvbXBhdF9mZWF0dXJlKFxuICNkZWZpbmUgWEZTX1NCX0ZFQVRfUk9fQ09NUEFUX1JNQVBCVCAgICgxIFx1MDAzY1x1MDAzYyAxKVx0XHQvKiByZXZlcnNlIG1hcCBidHJlZSAqL1xuICNkZWZpbmUgWEZTX1NCX0ZFQVRfUk9fQ09NUEFUX1JFRkxJTksgICgxIFx1MDAzY1x1MDAzYyAyKVx0XHQvKiByZWZsaW5rZWQgZmlsZXMgKi9cbiAjZGVmaW5lIFhGU19TQl9GRUFUX1JPX0NPTVBBVF9JTk9CVENOVCAoMSBcdTAwM2NcdTAwM2MgMylcdFx0LyogaW5vYnQgYmxvY2sgY291bnRzICovXG4mIzQzOyNkZWZpbmUgWEZTX1NCX0ZFQVRfUk9fQ09NUEFUX1ZFUklUWSAgICgxIFx1MDAzY1x1MDAzYyA0KVx0XHQvKiBmcy12ZXJpdHkgKi9cbiAjZGVmaW5lIFhGU19TQl9GRUFUX1JPX0NPTVBBVF9BTEwgXFxcbiBcdFx0KFhGU19TQl9GRUFUX1JPX0NPTVBBVF9GSU5PQlQgfCBcXFxuIFx0XHQgWEZTX1NCX0ZFQVRfUk9fQ09NUEFUX1JNQVBCVCB8IFxcXG4tXHRcdCBYRlNfU0JfRkVBVF9ST19DT01QQVRfUkVGTElOS3wgXFxcbi1cdFx0IFhGU19TQl9GRUFUX1JPX0NPTVBBVF9JTk9CVENOVClcbiYjNDM7XHRcdCBYRlNfU0JfRkVBVF9ST19DT01QQVRfUkVGTElOSyB8IFxcXG4mIzQzO1x0XHQgWEZTX1NCX0ZFQVRfUk9fQ09NUEFUX0lOT0JUQ05UIHwgXFxcbiYjNDM7XHRcdCBYRlNfU0JfRkVBVF9ST19DT01QQVRfVkVSSVRZKVxuICNkZWZpbmUgWEZTX1NCX0ZFQVRfUk9fQ09NUEFUX1VOS05PV05cdH5YRlNfU0JfRkVBVF9ST19DT01QQVRfQUxMXG4gc3RhdGljIGlubGluZSBib29sXG4geGZzX3NiX2hhc19yb19jb21wYXRfZmVhdHVyZShcbkBAIC0xMjMwLDE2ICYjNDM7MTIzMiwyMSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgeGZzX2Rpbm9kZV9wdXRfcmRldihzdHJ1Y3QgeGZzX2Rpbm9kZSAqZGlwLCB4ZnNfZGV2X3QgcmRldilcbiAgKi9cbiAjZGVmaW5lIFhGU19ESUZMQUcyX01FVEFEQVRBX0JJVFx0NVxuIFxuJiM0MzsvKiBpbm9kZXMgc2VhbGVkIHdpdGggZnMtdmVyaXR5ICovXG4mIzQzOyNkZWZpbmUgWEZTX0RJRkxBRzJfVkVSSVRZX0JJVFx0XHQ2XG4mIzQzO1xuICNkZWZpbmUgWEZTX0RJRkxBRzJfREFYXHRcdCgxVUxMIFx1MDAzY1x1MDAzYyBYRlNfRElGTEFHMl9EQVhfQklUKVxuICNkZWZpbmUgWEZTX0RJRkxBRzJfUkVGTElOS1x0KDFVTEwgXHUwMDNjXHUwMDNjIFhGU19ESUZMQUcyX1JFRkxJTktfQklUKVxuICNkZWZpbmUgWEZTX0RJRkxBRzJfQ09XRVhUU0laRVx0KDFVTEwgXHUwMDNjXHUwMDNjIFhGU19ESUZMQUcyX0NPV0VYVFNJWkVfQklUKVxuICNkZWZpbmUgWEZTX0RJRkxBRzJfQklHVElNRVx0KDFVTEwgXHUwMDNjXHUwMDNjIFhGU19ESUZMQUcyX0JJR1RJTUVfQklUKVxuICNkZWZpbmUgWEZTX0RJRkxBRzJfTlJFWFQ2NFx0KDFVTEwgXHUwMDNjXHUwMDNjIFhGU19ESUZMQUcyX05SRVhUNjRfQklUKVxuICNkZWZpbmUgWEZTX0RJRkxBRzJfTUVUQURBVEFcdCgxVUxMIFx1MDAzY1x1MDAzYyBYRlNfRElGTEFHMl9NRVRBREFUQV9CSVQpXG4mIzQzOyNkZWZpbmUgWEZTX0RJRkxBRzJfVkVSSVRZXHQoMVVMTCBcdTAwM2NcdTAwM2MgWEZTX0RJRkxBRzJfVkVSSVRZX0JJVClcbiBcbiAjZGVmaW5lIFhGU19ESUZMQUcyX0FOWSBcXFxuIFx0KFhGU19ESUZMQUcyX0RBWCB8IFhGU19ESUZMQUcyX1JFRkxJTksgfCBYRlNfRElGTEFHMl9DT1dFWFRTSVpFIHwgXFxcbi1cdCBYRlNfRElGTEFHMl9CSUdUSU1FIHwgWEZTX0RJRkxBRzJfTlJFWFQ2NCB8IFhGU19ESUZMQUcyX01FVEFEQVRBKVxuJiM0MztcdCBYRlNfRElGTEFHMl9CSUdUSU1FIHwgWEZTX0RJRkxBRzJfTlJFWFQ2NCB8IFhGU19ESUZMQUcyX01FVEFEQVRBIHwgXFxcbiYjNDM7XHQgWEZTX0RJRkxBRzJfVkVSSVRZKVxuIFxuIHN0YXRpYyBpbmxpbmUgYm9vbCB4ZnNfZGlub2RlX2hhc19iaWd0aW1lKGNvbnN0IHN0cnVjdCB4ZnNfZGlub2RlICpkaXApXG4ge1xuQEAgLTIwMjcsNCAmIzQzOzIwMzQsMjYgQEAgc3RydWN0IHhmc19hY2wge1xuICNkZWZpbmUgU0dJX0FDTF9GSUxFX1NJWkVcdChzaXplb2YoU0dJX0FDTF9GSUxFKS0xKVxuICNkZWZpbmUgU0dJX0FDTF9ERUZBVUxUX1NJWkVcdChzaXplb2YoU0dJX0FDTF9ERUZBVUxUKS0xKVxuIFxuJiM0MzsvKlxuJiM0MzsgKiBBdCBtYXhpbXVtIG9mIDggbGV2ZWxzIHdpdGggMTI4IGhhc2hlcyBwZXIgYmxvY2sgKDMyIGJ5dGVzIFNIQS0yNTYpIG1heGltdW1cbiYjNDM7ICogdHJlZSBzaXplIGlzICgoMTI4Xjgg4oiSIDEpLygxMjgg4oiSIDEpKSA9IDU2NyoxMF4xMiBibG9ja3MuIFRoaXMgc2hvdWxkIGZpdCBpblxuJiM0MzsgKiA1MyBiaXRzIGFkZHJlc3Mgc3BhY2UuXG4mIzQzOyAqXG4mIzQzOyAqIEF0IHRoaXMgTWVya2xlIHRyZWUgc2l6ZSB3ZSBjYW4gY292ZXIgMjk1RUIgbGFyZ2UgZmlsZS4gVGhpcyBpcyBtdWNoIGxhcmdlclxuJiM0MzsgKiB0aGFuIHRoZSBjdXJyZW50bHkgc3VwcG9ydGVkIGZpbGUgc2l6ZS5cbiYjNDM7ICpcbiYjNDM7ICogRm9yIHNoYTUxMiB0aGUgbGFyZ2VzdCBmaWxlIHdlIGNhbiBjb3ZlciBlbmRzIGF0IDEgXHUwMDNjXHUwMDNjIDUwIG9mZnNldCwgdGhpcyBpcyBhbHNvXG4mIzQzOyAqIGdvb2QuXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIFhGU19GU1ZFUklUWV9MQVJHRVNUX0ZJTEVcdCgobG9mZl90KTFVTEwgXHUwMDNjXHUwMDNjIDUzKVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogQWxpZ25tZW50IG9mIHRoZSBmc3Zlcml0eSBtZXRhZGF0YSBwbGFjZW1lbnQuIFRoaXMgaXMgbGFyZ2VzdCBzdXBwb3J0ZWQgUEFHRVxuJiM0MzsgKiBTSVpFIGZvciBmc3Zlcml0eS4gVGhpcyBpcyB1c2VkIHRvIHNwYWNlIG91dCBkYXRhIGFuZCBtZXRhZGF0YSBpbiBwYWdlIGNhY2hlLlxuJiM0MzsgKiBUaGUgc3BhY2luZyBpcyBuZWNlc3NhcnkgZm9yIG5vbi1leHBvc3VyZSBvZiBtZXRhZGF0YSB0byB1c2Vyc3BhY2UgYW5kXG4mIzQzOyAqIGNvcnJlY3QgbWVya2xlIHRyZWUgc3luZXRoZXNpcyBpbiB0aGUgaW9tYXAuXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIFhGU19GU1ZFUklUWV9TVEFSVF9BTElHTlx0KDY1NTM2KVxuJiM0MztcbiYjNDM7XG4gI2VuZGlmIC8qIF9fWEZTX0ZPUk1BVF9IX18gKi9cbmRpZmYgLS1naXQgYS9mcy94ZnMvbGlieGZzL3hmc19mcy5oIGIvZnMveGZzL2xpYnhmcy94ZnNfZnMuaFxuaW5kZXggMTg1ZjA5ZjMyN2MwMGMuLjg0ZDYyYjc1MDZhOWFkIDEwMDY0NFxuLS0tIGEvZnMveGZzL2xpYnhmcy94ZnNfZnMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZnMveGZzL2xpYnhmcy94ZnNfZnMuaFxuQEAgLTI1MCw2ICYjNDM7MjUwLDcgQEAgdHlwZWRlZiBzdHJ1Y3QgeGZzX2Zzb3BfcmVzYmxrcyB7XG4gI2RlZmluZSBYRlNfRlNPUF9HRU9NX0ZMQUdTX1BBUkVOVFx0KDEgXHUwMDNjXHUwMDNjIDI1KSAvKiBsaW51eCBwYXJlbnQgcG9pbnRlcnMgKi9cbiAjZGVmaW5lIFhGU19GU09QX0dFT01fRkxBR1NfTUVUQURJUlx0KDEgXHUwMDNjXHUwMDNjIDI2KSAvKiBtZXRhZGF0YSBkaXJlY3RvcmllcyAqL1xuICNkZWZpbmUgWEZTX0ZTT1BfR0VPTV9GTEFHU19aT05FRFx0KDEgXHUwMDNjXHUwMDNjIDI3KSAvKiB6b25lZCBydCBkZXZpY2UgKi9cbiYjNDM7I2RlZmluZSBYRlNfRlNPUF9HRU9NX0ZMQUdTX1ZFUklUWVx0KDEgXHUwMDNjXHUwMDNjIDI4KSAvKiBmcy12ZXJpdHkgKi9cbiBcbiAvKlxuICAqIE1pbmltdW0gYW5kIG1heGltdW0gc2l6ZXMgbmVlZCBmb3IgZ3Jvd3RoIGNoZWNrcy5cbkBAIC00MjEsNiAmIzQzOzQyMiw3IEBAIHN0cnVjdCB4ZnNfYnVsa3N0YXQge1xuICNkZWZpbmUgWEZTX0JTX1NJQ0tfU1lNTElOS1x0KDEgXHUwMDNjXHUwMDNjIDYpICAvKiBzeW1ib2xpYyBsaW5rIHJlbW90ZSB0YXJnZXQgKi9cbiAjZGVmaW5lIFhGU19CU19TSUNLX1BBUkVOVFx0KDEgXHUwMDNjXHUwMDNjIDcpICAvKiBwYXJlbnQgcG9pbnRlcnMgKi9cbiAjZGVmaW5lIFhGU19CU19TSUNLX0RJUlRSRUVcdCgxIFx1MDAzY1x1MDAzYyA4KSAgLyogZGlyZWN0b3J5IHRyZWUgc3RydWN0dXJlICovXG4mIzQzOyNkZWZpbmUgWEZTX0JTX1NJQ0tfRlNWRVJJVFlcdCgxIFx1MDAzY1x1MDAzYyA5KSAgLyogZnN2ZXJpdHkgbWV0YWRhdGEgKi9cbiBcbiAvKlxuICAqIFByb2plY3QgcXVvdGEgaWQgaGVscGVycyAocHJldmlvdXNseSBwcm9qaWQgd2FzIDE2Yml0IG9ubHlcbmRpZmYgLS1naXQgYS9mcy94ZnMvbGlieGZzL3hmc19oZWFsdGguaCBiL2ZzL3hmcy9saWJ4ZnMveGZzX2hlYWx0aC5oXG5pbmRleCAxZDQ1Y2Y1Nzg5ZTg2NC4uOTMyYjQ0NzE5MGRhNzYgMTAwNjQ0XG4tLS0gYS9mcy94ZnMvbGlieGZzL3hmc19oZWFsdGguaFxuJiM0MzsmIzQzOyYjNDM7IGIvZnMveGZzL2xpYnhmcy94ZnNfaGVhbHRoLmhcbkBAIC0xMDQsNiAmIzQzOzEwNCw3IEBAIHN0cnVjdCB4ZnNfcnRncm91cDtcbiAvKiBEb24mIzM5O3QgcHJvcGFnYXRlIHNpY2sgc3RhdHVzIHRvIGFnIGhlYWx0aCBzdW1tYXJ5IGR1cmluZyBpbmFjdGl2YXRpb24gKi9cbiAjZGVmaW5lIFhGU19TSUNLX0lOT19GT1JHRVRcdCgxIFx1MDAzY1x1MDAzYyAxMilcbiAjZGVmaW5lIFhGU19TSUNLX0lOT19ESVJUUkVFXHQoMSBcdTAwM2NcdTAwM2MgMTMpICAvKiBkaXJlY3RvcnkgdHJlZSBzdHJ1Y3R1cmUgKi9cbiYjNDM7I2RlZmluZSBYRlNfU0lDS19JTk9fRlNWRVJJVFlcdCgxIFx1MDAzY1x1MDAzYyAxNCkgIC8qIGZzdmVyaXR5IG1ldGFkYXRhICovXG4gXG4gLyogUHJpbWFyeSBldmlkZW5jZSBvZiBoZWFsdGggcHJvYmxlbXMgaW4gYSBnaXZlbiBncm91cC4gKi9cbiAjZGVmaW5lIFhGU19TSUNLX0ZTX1BSSU1BUllcdChYRlNfU0lDS19GU19DT1VOVEVSUyB8IFxcXG5AQCAtMTQwLDcgJiM0MzsxNDEsOCBAQCBzdHJ1Y3QgeGZzX3J0Z3JvdXA7XG4gXHRcdFx0XHQgWEZTX1NJQ0tfSU5PX1hBVFRSIHwgXFxcbiBcdFx0XHRcdCBYRlNfU0lDS19JTk9fU1lNTElOSyB8IFxcXG4gXHRcdFx0XHQgWEZTX1NJQ0tfSU5PX1BBUkVOVCB8IFxcXG4tXHRcdFx0XHQgWEZTX1NJQ0tfSU5PX0RJUlRSRUUpXG4mIzQzO1x0XHRcdFx0IFhGU19TSUNLX0lOT19ESVJUUkVFIHwgXFxcbiYjNDM7XHRcdFx0XHQgWEZTX1NJQ0tfSU5PX0ZTVkVSSVRZKVxuIFxuICNkZWZpbmUgWEZTX1NJQ0tfSU5PX1pBUFBFRFx0KFhGU19TSUNLX0lOT19CTUJURF9aQVBQRUQgfCBcXFxuIFx0XHRcdFx0IFhGU19TSUNLX0lOT19CTUJUQV9aQVBQRUQgfCBcXFxuZGlmZiAtLWdpdCBhL2ZzL3hmcy9saWJ4ZnMveGZzX2lub2RlX2J1Zi5jIGIvZnMveGZzL2xpYnhmcy94ZnNfaW5vZGVfYnVmLmNcbmluZGV4IDMzNmVmODQzZjJmZTRmLi5iZDgwYTE5ZjJlMDkyOSAxMDA2NDRcbi0tLSBhL2ZzL3hmcy9saWJ4ZnMveGZzX2lub2RlX2J1Zi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy94ZnMvbGlieGZzL3hmc19pbm9kZV9idWYuY1xuQEAgLTc2MCw2ICYjNDM7NzYwLDE0IEBAIHhmc19kaW5vZGVfdmVyaWZ5KFxuIFx0ICAgICF4ZnNfaGFzX3J0cmVmbGluayhtcCkpXG4gXHRcdHJldHVybiBfX3RoaXNfYWRkcmVzcztcbiBcbiYjNDM7XHQvKiBvbmx5IHJlZ3VsYXIgZmlsZXMgY2FuIGhhdmUgZnN2ZXJpdHkgKi9cbiYjNDM7XHRpZiAoZmxhZ3MyIFx1MDAyNiBYRlNfRElGTEFHMl9WRVJJVFkpIHtcbiYjNDM7XHRcdGlmICgheGZzX2hhc192ZXJpdHkobXApKVxuJiM0MztcdFx0XHRyZXR1cm4gX190aGlzX2FkZHJlc3M7XG4mIzQzO1x0XHRpZiAoIVNfSVNSRUcobW9kZSkpXG4mIzQzO1x0XHRcdHJldHVybiBfX3RoaXNfYWRkcmVzcztcbiYjNDM7XHR9XG4mIzQzO1xuIFx0aWYgKHhmc19oYXNfem9uZWQobXApIFx1MDAyNlx1MDAyNlxuIFx0ICAgIGRpcC1cdTAwM2VkaV9tZXRhdHlwZSA9PSBjcHVfdG9fYmUxNihYRlNfTUVUQUZJTEVfUlRSTUFQKSkge1xuIFx0XHRpZiAoYmUzMl90b19jcHUoZGlwLVx1MDAzZWRpX3VzZWRfYmxvY2tzKSBcdTAwM2UgbXAtXHUwMDNlbV9zYi5zYl9yZ2V4dGVudHMpXG5kaWZmIC0tZ2l0IGEvZnMveGZzL2xpYnhmcy94ZnNfaW5vZGVfdXRpbC5jIGIvZnMveGZzL2xpYnhmcy94ZnNfaW5vZGVfdXRpbC5jXG5pbmRleCAyNThhYzNkMGQ0ODZlNi4uNWE1MTZiZDMxYzMxNzUgMTAwNjQ0XG4tLS0gYS9mcy94ZnMvbGlieGZzL3hmc19pbm9kZV91dGlsLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3hmcy9saWJ4ZnMveGZzX2lub2RlX3V0aWwuY1xuQEAgLTc0LDcgJiM0Mzs3NCw4IEBAIHhmc19mbGFnczJkaWZsYWdzMihcbiBcdHVpbnQ2NF90XHRcdGRpX2ZsYWdzMiA9XG4gXHRcdChpcC1cdTAwM2VpX2RpZmxhZ3MyIFx1MDAyNiAoWEZTX0RJRkxBRzJfUkVGTElOSyB8XG4gXHRcdFx0XHQgICBYRlNfRElGTEFHMl9CSUdUSU1FIHxcbi1cdFx0XHRcdCAgIFhGU19ESUZMQUcyX05SRVhUNjQpKTtcbiYjNDM7XHRcdFx0XHQgICBYRlNfRElGTEFHMl9OUkVYVDY0IHxcbiYjNDM7XHRcdFx0XHQgICBYRlNfRElGTEFHMl9WRVJJVFkpKTtcbiBcbiBcdGlmICh4ZmxhZ3MgXHUwMDI2IEZTX1hGTEFHX0RBWClcbiBcdFx0ZGlfZmxhZ3MyIHw9IFhGU19ESUZMQUcyX0RBWDtcbkBAIC0xMjYsNiAmIzQzOzEyNyw4IEBAIHhmc19pcDJ4ZmxhZ3MoXG4gXHRcdFx0ZmxhZ3MgfD0gRlNfWEZMQUdfREFYO1xuIFx0XHRpZiAoaXAtXHUwMDNlaV9kaWZsYWdzMiBcdTAwMjYgWEZTX0RJRkxBRzJfQ09XRVhUU0laRSlcbiBcdFx0XHRmbGFncyB8PSBGU19YRkxBR19DT1dFWFRTSVpFO1xuJiM0MztcdFx0aWYgKGlwLVx1MDAzZWlfZGlmbGFnczIgXHUwMDI2IFhGU19ESUZMQUcyX1ZFUklUWSlcbiYjNDM7XHRcdFx0ZmxhZ3MgfD0gRlNfWEZMQUdfVkVSSVRZO1xuIFx0fVxuIFxuIFx0aWYgKHhmc19pbm9kZV9oYXNfYXR0cl9mb3JrKGlwKSlcbmRpZmYgLS1naXQgYS9mcy94ZnMvbGlieGZzL3hmc19zYi5jIGIvZnMveGZzL2xpYnhmcy94ZnNfc2IuY1xuaW5kZXggNDczMjJhZGI3NjkwNTkuLjIyMmJiZTU1NTlkZjQ3IDEwMDY0NFxuLS0tIGEvZnMveGZzL2xpYnhmcy94ZnNfc2IuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMveGZzL2xpYnhmcy94ZnNfc2IuY1xuQEAgLTE2NSw2ICYjNDM7MTY1LDggQEAgeGZzX3NiX3ZlcnNpb25fdG9fZmVhdHVyZXMoXG4gXHRcdGZlYXR1cmVzIHw9IFhGU19GRUFUX1JFRkxJTks7XG4gXHRpZiAoc2JwLVx1MDAzZXNiX2ZlYXR1cmVzX3JvX2NvbXBhdCBcdTAwMjYgWEZTX1NCX0ZFQVRfUk9fQ09NUEFUX0lOT0JUQ05UKVxuIFx0XHRmZWF0dXJlcyB8PSBYRlNfRkVBVF9JTk9CVENOVDtcbiYjNDM7XHRpZiAoc2JwLVx1MDAzZXNiX2ZlYXR1cmVzX3JvX2NvbXBhdCBcdTAwMjYgWEZTX1NCX0ZFQVRfUk9fQ09NUEFUX1ZFUklUWSlcbiYjNDM7XHRcdGZlYXR1cmVzIHw9IFhGU19GRUFUX1ZFUklUWTtcbiBcdGlmIChzYnAtXHUwMDNlc2JfZmVhdHVyZXNfaW5jb21wYXQgXHUwMDI2IFhGU19TQl9GRUFUX0lOQ09NUEFUX0ZUWVBFKVxuIFx0XHRmZWF0dXJlcyB8PSBYRlNfRkVBVF9GVFlQRTtcbiBcdGlmIChzYnAtXHUwMDNlc2JfZmVhdHVyZXNfaW5jb21wYXQgXHUwMDI2IFhGU19TQl9GRUFUX0lOQ09NUEFUX1NQSU5PREVTKVxuQEAgLTE1ODgsNiAmIzQzOzE1OTAsOCBAQCB4ZnNfZnNfZ2VvbWV0cnkoXG4gXHRcdGdlby1cdTAwM2VmbGFncyB8PSBYRlNfRlNPUF9HRU9NX0ZMQUdTX01FVEFESVI7XG4gXHRpZiAoeGZzX2hhc196b25lZChtcCkpXG4gXHRcdGdlby1cdTAwM2VmbGFncyB8PSBYRlNfRlNPUF9HRU9NX0ZMQUdTX1pPTkVEO1xuJiM0MztcdGlmICh4ZnNfaGFzX3Zlcml0eShtcCkpXG4mIzQzO1x0XHRnZW8tXHUwMDNlZmxhZ3MgfD0gWEZTX0ZTT1BfR0VPTV9GTEFHU19WRVJJVFk7XG4gXHRnZW8tXHUwMDNlcnRzZWN0c2l6ZSA9IHNicC1cdTAwM2VzYl9ibG9ja3NpemU7XG4gXHRnZW8tXHUwMDNlZGlyYmxvY2tzaXplID0geGZzX2RpcjJfZGlyYmxvY2tfYnl0ZXMoc2JwKTtcbiBcbmRpZmYgLS1naXQgYS9mcy94ZnMvc2NydWIvY29tbW9uLmMgYi9mcy94ZnMvc2NydWIvY29tbW9uLmNcbmluZGV4IGU1MjMzZTMxYWJiNzUwLi4xNjczYjUyMjI0NGQ3NCAxMDA2NDRcbi0tLSBhL2ZzL3hmcy9zY3J1Yi9jb21tb24uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMveGZzL3NjcnViL2NvbW1vbi5jXG5AQCAtNDUsNiAmIzQzOzQ1LDggQEBcbiAjaW5jbHVkZSBcJiMzNDtzY3J1Yi9oZWFsdGguaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3NjcnViL3RlbXBmaWxlLmhcJiMzNDtcbiBcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvZnN2ZXJpdHkuaFx1MDAzZVxuJiM0MztcbiAvKiBDb21tb24gY29kZSBmb3IgdGhlIG1ldGFkYXRhIHNjcnViYmVycy4gKi9cbiBcbiAvKlxuQEAgLTE3NTQsMyAmIzQzOzE3NTYsNTQgQEAgeGNoa19pbm9kZV9jb3VudF9ibG9ja3MoXG4gXHRyZXR1cm4geGZzX2JtYXBfY291bnRfYmxvY2tzKHNjLVx1MDAzZXRwLCBzYy1cdTAwM2VpcCwgd2hpY2hmb3JrLCBuZXh0ZW50cyxcbiBcdFx0XHRjb3VudCk7XG4gfVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogSWYgdGhpcyBpbm9kZSBoYXMgU19WRVJJVFkgc2V0IG9uIGl0LCByZWFkIHRoZSB2ZXJpdHkgaW5mby4gSWYgdGhlIHJlYWRpbmdcbiYjNDM7ICogZmFpbHMgd2l0aCBhbnl0aGluZyBvdGhlciB0aGFuIEVOT01FTSwgdGhlIGZpbGUgaXMgY29ycnVwdCwgd2hpY2ggd2UgY2FuXG4mIzQzOyAqIGRldGVjdCBsYXRlciB3aXRoIGZzdmVyaXR5X2FjdGl2ZS5cbiYjNDM7ICpcbiYjNDM7ICogQ2FsbGVycyBtdXN0IGhvbGQgdGhlIElPTE9DSyBhbmQgbXVzdCBub3QgaG9sZCB0aGUgSUxPQ0sgb2Ygc2MtXHUwMDNlaXAgYmVjYXVzZVxuJiM0MzsgKiBhY3RpdmF0aW9uIHJlYWRzIGlub2RlIGRhdGEuXG4mIzQzOyAqL1xuJiM0MztpbnRcbiYjNDM7eGNoa19pbm9kZV9zZXR1cF92ZXJpdHkoXG4mIzQzO1x0c3RydWN0IHhmc19zY3J1Ylx0KnNjKVxuJiM0Mzt7XG4mIzQzO1x0aW50XHRcdFx0ZXJyb3I7XG4mIzQzO1xuJiM0MztcdGlmICghZnN2ZXJpdHlfYWN0aXZlKFZGU19JKHNjLVx1MDAzZWlwKSkpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0ZXJyb3IgPSBmc3Zlcml0eV9lbnN1cmVfdmVyaXR5X2luZm8oVkZTX0koc2MtXHUwMDNlaXApKTtcbiYjNDM7XHRzd2l0Y2ggKGVycm9yKSB7XG4mIzQzO1x0Y2FzZSAwOlxuJiM0MztcdFx0LyogZnN2ZXJpdHkgaXMgYWN0aXZlICovXG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIC1FTk9EQVRBOlxuJiM0MztcdGNhc2UgLUVNU0dTSVpFOlxuJiM0MztcdGNhc2UgLUVJTlZBTDpcbiYjNDM7XHRjYXNlIC1FRlNDT1JSVVBURUQ6XG4mIzQzO1x0Y2FzZSAtRUZCSUc6XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogVGhlIG5vbnplcm8gZXJybm8gY29kZXMgYWJvdmUgYXJlIHRoZSBlcnJvciBjb2RlcyB0aGF0IGNhblxuJiM0MztcdFx0ICogYmUgcmV0dXJuZWQgZnJvbSBmc3Zlcml0eSBvbiBtZXRhZGF0YSB2YWxpZGF0aW9uIGVycm9ycy5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdC8qIHJ1bnRpbWUgZXJyb3JzICovXG4mIzQzO1x0XHRyZXR1cm4gZXJyb3I7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogSXMgdGhpcyBhIHZlcml0eSBmaWxlIHRoYXQgZmFpbGVkIHRvIGFjdGl2YXRlPyAgQ2FsbGVycyBtdXN0IGhhdmUgdHJpZWQgdG9cbiYjNDM7ICogYWN0aXZhdGUgZnN2ZXJpdHkgdmlhIHhjaGtfaW5vZGVfc2V0dXBfdmVyaXR5LlxuJiM0MzsgKi9cbiYjNDM7Ym9vbFxuJiM0Mzt4Y2hrX2lub2RlX3Zlcml0eV9icm9rZW4oXG4mIzQzO1x0c3RydWN0IHhmc19pbm9kZVx0KmlwKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGZzdmVyaXR5X2FjdGl2ZShWRlNfSShpcCkpIFx1MDAyNlx1MDAyNiAhZnN2ZXJpdHlfZ2V0X2luZm8oVkZTX0koaXApKTtcbiYjNDM7fVxuZGlmZiAtLWdpdCBhL2ZzL3hmcy9zY3J1Yi9jb21tb24uaCBiL2ZzL3hmcy9zY3J1Yi9jb21tb24uaFxuaW5kZXggOWQ2MjdmZDUwNjg3ZTQuLjNkZTJiNjAwOWE5OTQxIDEwMDY0NFxuLS0tIGEvZnMveGZzL3NjcnViL2NvbW1vbi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy94ZnMvc2NydWIvY29tbW9uLmhcbkBAIC0yNjgsNiAmIzQzOzI2OCw4IEBAIGludCB4Y2hrX2lub2RlX2lzX2FsbG9jYXRlZChzdHJ1Y3QgeGZzX3NjcnViICpzYywgeGZzX2FnaW5vX3QgYWdpbm8sXG4gXHRcdGJvb2wgKmludXNlKTtcbiBpbnQgeGNoa19pbm9kZV9jb3VudF9ibG9ja3Moc3RydWN0IHhmc19zY3J1YiAqc2MsIGludCB3aGljaGZvcmssXG4gXHRcdHhmc19leHRudW1fdCAqbmV4dGVudHMsIHhmc19maWxibGtzX3QgKmNvdW50KTtcbiYjNDM7aW50IHhjaGtfaW5vZGVfc2V0dXBfdmVyaXR5KHN0cnVjdCB4ZnNfc2NydWIgKnNjKTtcbiYjNDM7Ym9vbCB4Y2hrX2lub2RlX3Zlcml0eV9icm9rZW4oc3RydWN0IHhmc19pbm9kZSAqaXApO1xuIFxuIGJvb2wgeGNoa19pbm9kZV9pc19kaXJ0cmVlX3Jvb3QoY29uc3Qgc3RydWN0IHhmc19pbm9kZSAqaXApO1xuIGJvb2wgeGNoa19pbm9kZV9pc19zYl9yb290ZWQoY29uc3Qgc3RydWN0IHhmc19pbm9kZSAqaXApO1xuZGlmZiAtLWdpdCBhL2ZzL3hmcy9zY3J1Yi9pbm9kZS5jIGIvZnMveGZzL3NjcnViL2lub2RlLmNcbmluZGV4IDY1YjEzZTMxMTkxNjgxLi5kMWNkZDZiNDQ1ZDAxNyAxMDA2NDRcbi0tLSBhL2ZzL3hmcy9zY3J1Yi9pbm9kZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy94ZnMvc2NydWIvaW5vZGUuY1xuQEAgLTM2LDYgJiM0MzszNiwxMCBAQCB4Y2hrX3ByZXBhcmVfaXNjcnViKFxuIFxuIFx0eGNoa19pbG9jayhzYywgWEZTX0lPTE9DS19FWENMKTtcbiBcbiYjNDM7XHRlcnJvciA9IHhjaGtfaW5vZGVfc2V0dXBfdmVyaXR5KHNjKTtcbiYjNDM7XHRpZiAoZXJyb3IpXG4mIzQzO1x0XHRyZXR1cm4gZXJyb3I7XG4mIzQzO1xuIFx0ZXJyb3IgPSB4Y2hrX3RyYW5zX2FsbG9jKHNjLCAwKTtcbiBcdGlmIChlcnJvcilcbiBcdFx0cmV0dXJuIGVycm9yO1xuQEAgLTgzMyw2ICYjNDM7ODM3LDkgQEAgeGNoa19pbm9kZShcbiBcdGlmIChTX0lTUkVHKFZGU19JKHNjLVx1MDAzZWlwKS1cdTAwM2VpX21vZGUpKVxuIFx0XHR4Y2hrX2lub2RlX2NoZWNrX3JlZmxpbmtfaWZsYWcoc2MsIElfSU5PKHNjLVx1MDAzZWlwKSk7XG4gXG4mIzQzO1x0aWYgKHhjaGtfaW5vZGVfdmVyaXR5X2Jyb2tlbihzYy1cdTAwM2VpcCkpXG4mIzQzO1x0XHR4Y2hrX2lub19zZXRfY29ycnVwdChzYywgc2MtXHUwMDNlc20tXHUwMDNlc21faW5vKTtcbiYjNDM7XG4gXHR4Y2hrX2lub2RlX2NoZWNrX3VubGlua2VkKHNjKTtcbiBcbiBcdHhjaGtfaW5vZGVfeHJlZihzYywgSV9JTk8oc2MtXHUwMDNlaXApLCBcdTAwMjZkaSk7XG5kaWZmIC0tZ2l0IGEvZnMveGZzL3NjcnViL2lub2RlX3JlcGFpci5jIGIvZnMveGZzL3NjcnViL2lub2RlX3JlcGFpci5jXG5pbmRleCA0OTNkY2Y1Y2M2YzE1OS4uOTBmODYxYmI0ZWY4NDggMTAwNjQ0XG4tLS0gYS9mcy94ZnMvc2NydWIvaW5vZGVfcmVwYWlyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3hmcy9zY3J1Yi9pbm9kZV9yZXBhaXIuY1xuQEAgLTU3Myw2ICYjNDM7NTczLDggQEAgeHJlcF9kaW5vZGVfZmxhZ3MoXG4gXHRcdGRpcC1cdTAwM2VkaV9ucmV4dDY0X3BhZCA9IDA7XG4gXHRlbHNlIGlmIChkaXAtXHUwMDNlZGlfdmVyc2lvbiBcdTAwM2U9IDMpXG4gXHRcdGRpcC1cdTAwM2VkaV92M19wYWQgPSAwO1xuJiM0MztcdGlmICgheGZzX2hhc192ZXJpdHkobXApIHx8ICFTX0lTUkVHKG1vZGUpKVxuJiM0MztcdFx0ZmxhZ3MyIFx1MDAyNj0gflhGU19ESUZMQUcyX1ZFUklUWTtcbiBcbiBcdGlmIChmbGFnczIgXHUwMDI2IFhGU19ESUZMQUcyX01FVEFEQVRBKSB7XG4gXHRcdHhmc19mYWlsYWRkcl90XHRmYTtcbkBAIC0xNjE3LDYgJiM0MzsxNjE5LDEwIEBAIHhyZXBfZGlub2RlX2NvcmUoXG4gXHRpZiAoaWdldF9lcnJvcilcbiBcdFx0cmV0dXJuIGlnZXRfZXJyb3I7XG4gXG4mIzQzO1x0ZXJyb3IgPSB4Y2hrX2lub2RlX3NldHVwX3Zlcml0eShzYyk7XG4mIzQzO1x0aWYgKGVycm9yKVxuJiM0MztcdFx0cmV0dXJuIGVycm9yO1xuJiM0MztcbiBcdGVycm9yID0geGNoa190cmFuc19hbGxvYyhzYywgMCk7XG4gXHRpZiAoZXJyb3IpXG4gXHRcdHJldHVybiBlcnJvcjtcbkBAIC0yMDM1LDYgJiM0MzsyMDQxLDI3IEBAIHhyZXBfaW5vZGVfdW5saW5rZWQoXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzOy8qXG4mIzQzOyAqIElmIHRoaXMgZmlsZSBpcyBhIGZzdmVyaXR5IGZpbGUsIHhjaGtfcHJlcGFyZV9pc2NydWIgb3IgeHJlcF9kaW5vZGVfY29yZVxuJiM0MzsgKiBzaG91bGQgaGF2ZSBhY3RpdmF0ZWQgaXQuICBJZiBpdCYjMzk7cyBzdGlsbCBub3QgYWN0aXZlLCB0aGVuIHRoZXJlJiMzOTtzIHNvbWV0aGluZ1xuJiM0MzsgKiB3cm9uZyB3aXRoIHRoZSB2ZXJpdHkgZGVzY3JpcHRvciBhbmQgd2Ugc2hvdWxkIHR1cm4gaXQgb2ZmLlxuJiM0MzsgKi9cbiYjNDM7U1RBVElDIGludFxuJiM0Mzt4cmVwX2lub2RlX3Zlcml0eShcbiYjNDM7XHRzdHJ1Y3QgeGZzX3NjcnViXHQqc2MpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaW5vZGVcdFx0Kmlub2RlID0gVkZTX0koc2MtXHUwMDNlaXApO1xuJiM0MztcbiYjNDM7XHRpZiAoeGNoa19pbm9kZV92ZXJpdHlfYnJva2VuKHNjLVx1MDAzZWlwKSkge1xuJiM0MztcdFx0c2MtXHUwMDNlaXAtXHUwMDNlaV9kaWZsYWdzMiBcdTAwMjY9IH5YRlNfRElGTEFHMl9WRVJJVFk7XG4mIzQzO1x0XHRpbm9kZS1cdTAwM2VpX2ZsYWdzIFx1MDAyNj0gflNfVkVSSVRZO1xuJiM0MztcbiYjNDM7XHRcdHhmc190cmFuc19sb2dfaW5vZGUoc2MtXHUwMDNldHAsIHNjLVx1MDAzZWlwLCBYRlNfSUxPR19DT1JFKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuIC8qIFJlcGFpciBhbiBpbm9kZSYjMzk7cyBmaWVsZHMuICovXG4gaW50XG4geHJlcF9pbm9kZShcbkBAIC0yMDg0LDYgJiM0MzsyMTExLDE1IEBAIHhyZXBfaW5vZGUoXG4gXHRcdFx0cmV0dXJuIGVycm9yO1xuIFx0fVxuIFxuJiM0MztcdC8qXG4mIzQzO1x0ICogRGlzYWJsZSBmc3Zlcml0eSBpZiBpdCBjYW5ub3QgYmUgYWN0aXZhdGVkLiAgQWN0aXZhdGlvbiBmYWlsdXJlXG4mIzQzO1x0ICogcHJvaGliaXRzIHRoZSBmaWxlIGZyb20gYmVpbmcgb3BlbmVkLCBzbyB0aGVyZSBjYW5ub3QgYmUgYW5vdGhlclxuJiM0MztcdCAqIHByb2dyYW0gd2l0aCBhbiBvcGVuIGZkIHRvIHdoYXQgaXQgdGhpbmtzIGlzIGEgdmVyaXR5IGZpbGUuXG4mIzQzO1x0ICovXG4mIzQzO1x0ZXJyb3IgPSB4cmVwX2lub2RlX3Zlcml0eShzYyk7XG4mIzQzO1x0aWYgKGVycm9yKVxuJiM0MztcdFx0cmV0dXJuIGVycm9yO1xuJiM0MztcbiBcdC8qIFJlY29ubmVjdCBpbmNvcmUgdW5saW5rZWQgbGlzdCAqL1xuIFx0ZXJyb3IgPSB4cmVwX2lub2RlX3VubGlua2VkKHNjKTtcbiBcdGlmIChlcnJvcilcbmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2FvcHMuYyBiL2ZzL3hmcy94ZnNfYW9wcy5jXG5pbmRleCA1MTI5M2I2ZjMzMWYwYi4uYjA1MzdjNjdlOTYwZTEgMTAwNjQ0XG4tLS0gYS9mcy94ZnMveGZzX2FvcHMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMveGZzL3hmc19hb3BzLmNcbkBAIC0yMiw3ICYjNDM7MjIsOSBAQFxuICNpbmNsdWRlIFwmIzM0O3hmc19pY2FjaGUuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3hmc196b25lX2FsbG9jLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDt4ZnNfcnRncm91cC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3hmc19mc3Zlcml0eS5oXCYjMzQ7XG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYmlvLWludGVncml0eS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZzdmVyaXR5LmhcdTAwM2VcbiBcbiBzdHJ1Y3QgeGZzX3dyaXRlcGFnZV9jdHgge1xuIFx0c3RydWN0IGlvbWFwX3dyaXRlcGFnZV9jdHggY3R4O1xuQEAgLTE4MSw2ICYjNDM7MTgzLDIzIEBAIHhmc19lbmRfaW9lbmRfd3JpdGUoXG4gXHRtZW1hbGxvY19ub2ZzX3Jlc3RvcmUobm9mc19mbGFnKTtcbiB9XG4gXG4mIzQzOy8qXG4mIzQzOyAqIElPIHJlYWQgY29tcGxldGlvbi5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkXG4mIzQzO3hmc19lbmRfaW9lbmRfcmVhZChcbiYjNDM7XHRzdHJ1Y3QgaW9tYXBfaW9lbmRcdCppb2VuZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB4ZnNfaW5vZGVcdCppcCA9IFhGU19JKGlvZW5kLVx1MDAzZWlvX2lub2RlKTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFpb2VuZC1cdTAwM2Vpb19iaW8uYmlfc3RhdHVzIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHR4ZnNfZnN2ZXJpdHlfaXNfZmlsZV9kYXRhKGlwLCBpb2VuZC1cdTAwM2Vpb19vZmZzZXQpKVxuJiM0MztcdFx0ZnN2ZXJpdHlfdmVyaWZ5X2Jpbyhpb2VuZC1cdTAwM2Vpb192aSxcbiYjNDM7XHRcdFx0XHQgICAgXHUwMDI2aW9lbmQtXHUwMDNlaW9fYmlvKTtcbiYjNDM7XHRpb21hcF9maW5pc2hfaW9lbmRzKGlvZW5kLFxuJiM0MztcdFx0YmxrX3N0YXR1c190b19lcnJubyhpb2VuZC1cdTAwM2Vpb19iaW8uYmlfc3RhdHVzKSk7XG4mIzQzO31cbiYjNDM7XG4gLypcbiAgKiBGaW5pc2ggYWxsIHBlbmRpbmcgSU8gY29tcGxldGlvbnMgdGhhdCByZXF1aXJlIHRyYW5zYWN0aW9uYWwgbW9kaWZpY2F0aW9ucy5cbiAgKlxuQEAgLTIxNSw4ICYjNDM7MjM0LDcgQEAgeGZzX2VuZF9pbyhcbiBcdFx0bGlzdF9kZWxfaW5pdChcdTAwMjZpb2VuZC1cdTAwM2Vpb19saXN0KTtcbiBcdFx0aW9tYXBfaW9lbmRfdHJ5X21lcmdlKGlvZW5kLCBcdTAwMjZ0bXApO1xuIFx0XHRpZiAoYmlvX29wKFx1MDAyNmlvZW5kLVx1MDAzZWlvX2JpbykgPT0gUkVRX09QX1JFQUQpXG4tXHRcdFx0aW9tYXBfZmluaXNoX2lvZW5kcyhpb2VuZCxcbi1cdFx0XHRcdGJsa19zdGF0dXNfdG9fZXJybm8oaW9lbmQtXHUwMDNlaW9fYmlvLmJpX3N0YXR1cykpO1xuJiM0MztcdFx0XHR4ZnNfZW5kX2lvZW5kX3JlYWQoaW9lbmQpO1xuIFx0XHRlbHNlXG4gXHRcdFx0eGZzX2VuZF9pb2VuZF93cml0ZShpb2VuZCk7XG4gXHRcdGNvbmRfcmVzY2hlZCgpO1xuQEAgLTI0Miw5ICYjNDM7MjYwLDE0IEBAIHhmc19lbmRfYmlvKFxuIFx0fVxuIFxuIFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2aXAtXHUwMDNlaV9pb2VuZF9sb2NrLCBmbGFncyk7XG4tXHRpZiAobGlzdF9lbXB0eShcdTAwMjZpcC1cdTAwM2VpX2lvZW5kX2xpc3QpKVxuLVx0XHRXQVJOX09OX09OQ0UoIXF1ZXVlX3dvcmsobXAtXHUwMDNlbV91bndyaXR0ZW5fd29ya3F1ZXVlLFxuJiM0MztcdGlmIChsaXN0X2VtcHR5KFx1MDAyNmlwLVx1MDAzZWlfaW9lbmRfbGlzdCkpIHtcbiYjNDM7XHRcdGlmIChJU19FTkFCTEVEKENPTkZJR19GU19WRVJJVFkpIFx1MDAyNlx1MDAyNiBpb2VuZC1cdTAwM2Vpb192aSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICBpb2VuZC1cdTAwM2Vpb19vZmZzZXQgXHUwMDNjIHhmc19mc3Zlcml0eV9tZXRhZGF0YV9vZmZzZXQoaXApKVxuJiM0MztcdFx0XHRmc3Zlcml0eV9lbnF1ZXVlX3ZlcmlmeV93b3JrKFx1MDAyNmlwLVx1MDAzZWlfaW9lbmRfd29yayk7XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdFdBUk5fT05fT05DRSghcXVldWVfd29yayhtcC1cdTAwM2VtX3Vud3JpdHRlbl93b3JrcXVldWUsXG4gXHRcdFx0XHRcdCBcdTAwMjZpcC1cdTAwM2VpX2lvZW5kX3dvcmspKTtcbiYjNDM7XHR9XG4gXHRsaXN0X2FkZF90YWlsKFx1MDAyNmlvZW5kLVx1MDAzZWlvX2xpc3QsIFx1MDAyNmlwLVx1MDAzZWlfaW9lbmRfbGlzdCk7XG4gXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmlwLVx1MDAzZWlfaW9lbmRfbG9jaywgZmxhZ3MpO1xuIH1cbkBAIC0zNTAsMTIgJiM0MzszNzMsMTYgQEAgeGZzX21hcF9ibG9ja3MoXG4gXHRpbnRcdFx0XHRyZXRyaWVzID0gMDtcbiBcdGludFx0XHRcdGVycm9yID0gMDtcbiBcdHVuc2lnbmVkIGludFx0XHQqc2VxO1xuJiM0MztcdHVuc2lnbmVkIGludFx0XHRpb21hcF9mbGFncyA9IDA7XG4gXG4gXHRpZiAoeGZzX2lzX3NodXRkb3duKG1wKSlcbiBcdFx0cmV0dXJuIC1FSU87XG4gXG4gXHRYRlNfRVJST1JUQUdfREVMQVkobXAsIFhGU19FUlJUQUdfV0JfREVMQVlfTVMpO1xuIFxuJiM0MztcdGlmICh4ZnNfaWZsYWdzX3Rlc3QoaXAsIFhGU19WRVJJVFlfQ09OU1RSVUNUSU9OKSlcbiYjNDM7XHRcdGlvbWFwX2ZsYWdzIHw9IElPTUFQX0ZfRlNWRVJJVFk7XG4mIzQzO1xuIFx0LypcbiBcdCAqIENPVyBmb3JrIGJsb2NrcyBjYW4gb3ZlcmxhcCBkYXRhIGZvcmsgYmxvY2tzIGV2ZW4gaWYgdGhlIGJsb2Nrc1xuIFx0ICogYXJlbiYjMzk7dCBzaGFyZWQuICBDT1cgSS9PIGFsd2F5cyB0YWtlcyBwcmVjZWRlbnQsIHNvIHdlIG11c3QgYWx3YXlzXG5AQCAtNDQzLDcgJiM0Mzs0NzAsOCBAQCB4ZnNfbWFwX2Jsb2NrcyhcbiBcdCAgICBpc251bGxzdGFydGJsb2NrKGltYXAuYnJfc3RhcnRibG9jaykpXG4gXHRcdGdvdG8gYWxsb2NhdGVfYmxvY2tzO1xuIFxuLVx0eGZzX2JtYnRfdG9faW9tYXAoaXAsIFx1MDAyNndwYy1cdTAwM2Vpb21hcCwgXHUwMDI2aW1hcCwgMCwgMCwgWEZTX1dQQyh3cGMpLVx1MDAzZWRhdGFfc2VxKTtcbiYjNDM7XHR4ZnNfYm1idF90b19pb21hcChpcCwgXHUwMDI2d3BjLVx1MDAzZWlvbWFwLCBcdTAwMjZpbWFwLCAwLCBpb21hcF9mbGFncyxcbiYjNDM7XHRcdFx0ICBYRlNfV1BDKHdwYyktXHUwMDNlZGF0YV9zZXEpO1xuIFx0dHJhY2VfeGZzX21hcF9ibG9ja3NfZm91bmQoaXAsIG9mZnNldCwgY291bnQsIHdoaWNoZm9yaywgXHUwMDI2aW1hcCk7XG4gXHRyZXR1cm4gMDtcbiBhbGxvY2F0ZV9ibG9ja3M6XG5AQCAtNTkwLDEyICYjNDM7NjE4LDE2IEBAIHhmc196b25lZF9tYXBfYmxvY2tzKFxuIFx0eGZzX2ZpbGJsa3NfdFx0XHRjb3VudF9mc2I7XG4gXHRzdHJ1Y3QgeGZzX2JtYnRfaXJlY1x0aW1hcCwgZGVsO1xuIFx0c3RydWN0IHhmc19pZXh0X2N1cnNvclx0aWN1cjtcbiYjNDM7XHR1MTZcdFx0XHRpb21hcF9mbGFncyA9IDA7XG4gXG4gXHRpZiAoeGZzX2lzX3NodXRkb3duKG1wKSlcbiBcdFx0cmV0dXJuIC1FSU87XG4gXG4gXHRYRlNfRVJST1JUQUdfREVMQVkobXAsIFhGU19FUlJUQUdfV0JfREVMQVlfTVMpO1xuIFxuJiM0MztcdGlmICh4ZnNfaWZsYWdzX3Rlc3QoaXAsIFhGU19WRVJJVFlfQ09OU1RSVUNUSU9OKSlcbiYjNDM7XHRcdGlvbWFwX2ZsYWdzIHw9IElPTUFQX0ZfRlNWRVJJVFk7XG4mIzQzO1xuIFx0LypcbiBcdCAqIEFsbCBkaXJ0eSBkYXRhIG11c3QgYmUgY292ZXJlZCBieSBkZWxhbGxvYyBleHRlbnRzLiAgQnV0IHRydW5jYXRlIGNhblxuIFx0ICogcmVtb3ZlIGRlbGFsbG9jIGV4dGVudHMgdW5kZXJuZWF0aCB1cyBvciByZWR1Y2UgdGhlaXIgc2l6ZS5cbkBAIC02MTksNyAmIzQzOzY1MSw3IEBAIHhmc196b25lZF9tYXBfYmxvY2tzKFxuIFx0XHRpbWFwLmJyX3N0YXJ0YmxvY2sgPSBIT0xFU1RBUlRCTE9DSztcbiBcdFx0aW1hcC5icl9zdGF0ZSA9IFhGU19FWFRfTk9STTtcbiBcdFx0eGZzX2l1bmxvY2soaXAsIFhGU19JTE9DS19FWENMKTtcbi1cdFx0eGZzX2JtYnRfdG9faW9tYXAoaXAsIFx1MDAyNndwYy1cdTAwM2Vpb21hcCwgXHUwMDI2aW1hcCwgMCwgMCwgMCk7XG4mIzQzO1x0XHR4ZnNfYm1idF90b19pb21hcChpcCwgXHUwMDI2d3BjLVx1MDAzZWlvbWFwLCBcdTAwMjZpbWFwLCAwLCBpb21hcF9mbGFncywgMCk7XG4gXHRcdHJldHVybiAwO1xuIFx0fVxuIFx0ZW5kX2ZzYiA9IG1pbihlbmRfZnNiLCBpbWFwLmJyX3N0YXJ0b2ZmICYjNDM7IGltYXAuYnJfYmxvY2tjb3VudCk7XG5AQCAtNjMyLDcgJiM0Mzs2NjQsNyBAQCB4ZnNfem9uZWRfbWFwX2Jsb2NrcyhcbiBcdHhmc19pdW5sb2NrKGlwLCBYRlNfSUxPQ0tfRVhDTCk7XG4gXG4gXHR3cGMtXHUwMDNlaW9tYXAudHlwZSA9IElPTUFQX01BUFBFRDtcbi1cdHdwYy1cdTAwM2Vpb21hcC5mbGFncyA9IElPTUFQX0ZfRElSVFk7XG4mIzQzO1x0d3BjLVx1MDAzZWlvbWFwLmZsYWdzID0gaW9tYXBfZmxhZ3MgfCBJT01BUF9GX0RJUlRZO1xuIFx0d3BjLVx1MDAzZWlvbWFwLmJkZXYgPSBtcC1cdTAwM2VtX3J0ZGV2X3RhcmdwLVx1MDAzZWJ0X2JkZXY7XG4gXHR3cGMtXHUwMDNlaW9tYXAub2Zmc2V0ID0gb2Zmc2V0O1xuIFx0d3BjLVx1MDAzZWlvbWFwLmxlbmd0aCA9IFhGU19GU0JfVE9fQihtcCwgY291bnRfZnNiKTtcbkBAIC02ODQsNiAmIzQzOzcxNiwyMiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGlvbWFwX3dyaXRlYmFja19vcHMgeGZzX3pvbmVkX3dyaXRlYmFja19vcHMgPSB7XG4gXHQud3JpdGViYWNrX3N1Ym1pdFx0PSB4ZnNfem9uZWRfd3JpdGViYWNrX3N1Ym1pdCxcbiB9O1xuIFxuJiM0MztzdGF0aWMgaW50XG4mIzQzO3hmc19pb21hcF93cml0ZXBhZ2VzKFxuJiM0MztcdHN0cnVjdCB4ZnNfaW5vZGVcdFx0KmlwLFxuJiM0MztcdHN0cnVjdCBpb21hcF93cml0ZXBhZ2VfY3R4XHQqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBXcml0ZWJhY2sgZG9lcyBub3Qgd29yayBmb3IgZm9saW9zIHBhc3QgRU9GLCBsZXQgaXQga25vdyB0aGF0XG4mIzQzO1x0ICogSS9PIGhhcHBlbnMgZm9yIGZzdmVyaXR5IG1ldGFkYXRhIGFuZCB0aGlzIHJlc3RyaWN0aW9uIG5lZWRcbiYjNDM7XHQgKiB0byBiZSBza2lwcGVkXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHhmc19pZmxhZ3NfdGVzdChpcCwgWEZTX1ZFUklUWV9DT05TVFJVQ1RJT04pKVxuJiM0MztcdFx0Y3R4LVx1MDAzZWlvbWFwLmZsYWdzIHw9IElPTUFQX0ZfRlNWRVJJVFk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBpb21hcF93cml0ZXBhZ2VzKGN0eCk7XG4mIzQzO31cbiYjNDM7XG4gU1RBVElDIGludFxuIHhmc192bV93cml0ZXBhZ2VzKFxuIFx0c3RydWN0IGFkZHJlc3Nfc3BhY2VcdCptYXBwaW5nLFxuQEAgLTcwMyw3ICYjNDM7NzUxLDcgQEAgeGZzX3ZtX3dyaXRlcGFnZXMoXG4gXHRcdH07XG4gXHRcdGludFx0XHRcdFx0ZXJyb3I7XG4gXG4tXHRcdGVycm9yID0gaW9tYXBfd3JpdGVwYWdlcyhcdTAwMjZ4Yy5jdHgpO1xuJiM0MztcdFx0ZXJyb3IgPSB4ZnNfaW9tYXBfd3JpdGVwYWdlcyhpcCwgXHUwMDI2eGMuY3R4KTtcbiBcdFx0aWYgKHhjLm9wZW5fem9uZSlcbiBcdFx0XHR4ZnNfb3Blbl96b25lX3B1dCh4Yy5vcGVuX3pvbmUpO1xuIFx0XHRyZXR1cm4gZXJyb3I7XG5AQCAtNzE2LDcgJiM0Mzs3NjQsNyBAQCB4ZnNfdm1fd3JpdGVwYWdlcyhcbiBcdFx0XHR9LFxuIFx0XHR9O1xuIFxuLVx0XHRyZXR1cm4gaW9tYXBfd3JpdGVwYWdlcyhcdTAwMjZ3cGMuY3R4KTtcbiYjNDM7XHRcdHJldHVybiB4ZnNfaW9tYXBfd3JpdGVwYWdlcyhpcCwgXHUwMDI2d3BjLmN0eCk7XG4gXHR9XG4gfVxuIFxuQEAgLTc2MSw5ICYjNDM7ODA5LDEyIEBAIHhmc19iaW9fc3VibWl0X3JlYWQoXG4gXHRzdHJ1Y3QgaW9tYXBfcmVhZF9mb2xpb19jdHhcdCpjdHgpXG4ge1xuIFx0c3RydWN0IGJpb1x0XHRcdCpiaW8gPSBjdHgtXHUwMDNlcmVhZF9jdHg7XG4mIzQzO1x0c3RydWN0IGlvbWFwX2lvZW5kXHRcdCppb2VuZDtcbiBcbiBcdC8qIGRlZmVyIHJlYWQgY29tcGxldGlvbnMgdG8gdGhlIGlvZW5kIHdvcmtxdWV1ZSAqL1xuLVx0aW9tYXBfaW5pdF9pb2VuZChpdGVyLVx1MDAzZWlub2RlLCBiaW8sIGN0eC1cdTAwM2VyZWFkX2N0eF9maWxlX29mZnNldCwgMCk7XG4mIzQzO1x0aW9lbmQgPSBpb21hcF9pbml0X2lvZW5kKGl0ZXItXHUwMDNlaW5vZGUsIGJpbywgY3R4LVx1MDAzZXJlYWRfY3R4X2ZpbGVfb2Zmc2V0LFxuJiM0MztcdFx0XHQwKTtcbiYjNDM7XHRpb2VuZC1cdTAwM2Vpb192aSA9IGN0eC1cdTAwM2V2aTtcbiBcdGlvbWFwX2Jpb19zdWJtaXRfcmVhZF9lbmRpbyhpdGVyLCBjdHgsIHhmc19lbmRfYmlvKTtcbiB9XG4gXG5AQCAtNzc1LDExICYjNDM7ODI2LDEzIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaW9tYXBfcmVhZF9vcHMgeGZzX2lvbWFwX3JlYWRfb3BzID0ge1xuIFxuIHN0YXRpYyBpbmxpbmUgY29uc3Qgc3RydWN0IGlvbWFwX3JlYWRfb3BzICpcbiB4ZnNfZ2V0X2lvbWFwX3JlYWRfb3BzKFxuLVx0Y29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2VcdCptYXBwaW5nKVxuJiM0MztcdGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlXHQqbWFwcGluZyxcbiYjNDM7XHRsb2ZmX3RcdFx0XHRcdHBvc2l0aW9uKVxuIHtcbiBcdHN0cnVjdCB4ZnNfaW5vZGVcdFx0KmlwID0gWEZTX0kobWFwcGluZy1cdTAwM2Vob3N0KTtcbiBcbi1cdGlmIChiZGV2X2hhc19pbnRlZ3JpdHlfY3N1bSh4ZnNfaW5vZGVfYnVmdGFyZyhpcCktXHUwMDNlYnRfYmRldikpXG4mIzQzO1x0aWYgKGJkZXZfaGFzX2ludGVncml0eV9jc3VtKHhmc19pbm9kZV9idWZ0YXJnKGlwKS1cdTAwM2VidF9iZGV2KSB8fFxuJiM0MztcdFx0XHR4ZnNfZnN2ZXJpdHlfaXNfZmlsZV9kYXRhKGlwLCBwb3NpdGlvbikpXG4gXHRcdHJldHVybiBcdTAwMjZ4ZnNfaW9tYXBfcmVhZF9vcHM7XG4gXHRyZXR1cm4gXHUwMDI2aW9tYXBfYmlvX3JlYWRfb3BzO1xuIH1cbkBAIC03OTEsNyAmIzQzOzg0NCw3IEBAIHhmc192bV9yZWFkX2ZvbGlvKFxuIHtcbiBcdHN0cnVjdCBpb21hcF9yZWFkX2ZvbGlvX2N0eFx0Y3R4ID0geyAuY3VyX2ZvbGlvID0gZm9saW8gfTtcbiBcbi1cdGN0eC5vcHMgPSB4ZnNfZ2V0X2lvbWFwX3JlYWRfb3BzKGZvbGlvLVx1MDAzZW1hcHBpbmcpO1xuJiM0MztcdGN0eC5vcHMgPSB4ZnNfZ2V0X2lvbWFwX3JlYWRfb3BzKGZvbGlvLVx1MDAzZW1hcHBpbmcsIGZvbGlvX3Bvcyhmb2xpbykpO1xuIFx0aW9tYXBfcmVhZF9mb2xpbyhcdTAwMjZ4ZnNfcmVhZF9pb21hcF9vcHMsIFx1MDAyNmN0eCwgTlVMTCk7XG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtODAyLDcgJiM0Mzs4NTUsNyBAQCB4ZnNfdm1fcmVhZGFoZWFkKFxuIHtcbiBcdHN0cnVjdCBpb21hcF9yZWFkX2ZvbGlvX2N0eFx0Y3R4ID0geyAucmFjID0gcmFjIH07XG4gXG4tXHRjdHgub3BzID0geGZzX2dldF9pb21hcF9yZWFkX29wcyhyYWMtXHUwMDNlbWFwcGluZyksXG4mIzQzO1x0Y3R4Lm9wcyA9IHhmc19nZXRfaW9tYXBfcmVhZF9vcHMocmFjLVx1MDAzZW1hcHBpbmcsIHJlYWRhaGVhZF9wb3MocmFjKSk7XG4gXHRpb21hcF9yZWFkYWhlYWQoXHUwMDI2eGZzX3JlYWRfaW9tYXBfb3BzLCBcdTAwMjZjdHgsIE5VTEwpO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2JtYXBfdXRpbC5jIGIvZnMveGZzL3hmc19ibWFwX3V0aWwuY1xuaW5kZXggM2I5ZjI2MmY4ZTkxMjguLmIzNGYyZjI3Y2M5M2E4IDEwMDY0NFxuLS0tIGEvZnMveGZzL3hmc19ibWFwX3V0aWwuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMveGZzL3hmc19ibWFwX3V0aWwuY1xuQEAgLTMxLDYgJiM0MzszMSw3IEBAXG4gI2luY2x1ZGUgXCYjMzQ7eGZzX3J0Yml0bWFwLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDt4ZnNfcnRncm91cC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7eGZzX3pvbmVfYWxsb2MuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9mc3Zlcml0eS5oXHUwMDNlXG4gXG4gLyogS2VybmVsIG9ubHkgQk1BUCByZWxhdGVkIGRlZmluaXRpb25zIGFuZCBmdW5jdGlvbnMgKi9cbiBcbkBAIC01NTMsNiAmIzQzOzU1NCwxMyBAQCB4ZnNfY2FuX2ZyZWVfZW9mYmxvY2tzKFxuIFx0aWYgKGxhc3RfZnNiIFx1MDAzYz0gZW5kX2ZzYilcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuJiM0MztcdC8qXG4mIzQzO1x0ICogTm90aGluZyB0byBjbGVhbiBvbiBmc3Zlcml0eSBpbm9kZXMgYXMgdGhleSBkb24mIzM5O3QgdXNlIHByZWFsbG9jIGFuZFxuJiM0MztcdCAqIHRoZXJlIG5vIGRlbGFsbG9jIGFzIG9ubHkgd3JpdHRlbiBkYXRhIGlzIGZzdmVyaXR5IG1ldGFkYXRhXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKElTX1ZFUklUWShWRlNfSShpcCkpKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiBcdC8qXG4gXHQgKiBDaGVjayBpZiB0aGVyZSBpcyBhbiBwb3N0LUVPRiBleHRlbnQgdG8gZnJlZS4gIElmIHRoZXJlIGFyZSBhbnlcbiBcdCAqIGRlbGFsbG9jIGJsb2NrcyBhdHRhY2hlZCB0byB0aGUgaW5vZGUgKGRhdGEgZm9yayBkZWxhbGxvY1xuZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfZmlsZS5jIGIvZnMveGZzL3hmc19maWxlLmNcbmluZGV4IDg0NWE5N2M5YjA2MzBiLi5jYmExOTRkNjc4ZmM3NyAxMDA2NDRcbi0tLSBhL2ZzL3hmcy94ZnNfZmlsZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy94ZnMveGZzX2ZpbGUuY1xuQEAgLTM3LDYgJiM0MzszNyw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZmFkdmlzZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbW91bnQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZpbGVsb2NrLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvZnN2ZXJpdHkuaFx1MDAzZVxuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgeGZzX2ZpbGVfdm1fb3BzO1xuIFxuQEAgLTI0NSw2ICYjNDM7MjQ2LDI1IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaW9tYXBfZGlvX29wcyB4ZnNfZGlvX3JlYWRfYm91bmNlX29wcyA9IHtcbiBcdC5iaW9fc2V0XHQ9IFx1MDAyNmlvbWFwX2lvZW5kX2Jpb3NldCxcbiB9O1xuIFxuJiM0MztTVEFUSUMgc3NpemVfdFxuJiM0Mzt4ZnNfZmlsZV9idWZmZXJlZF9yZWFkKFxuJiM0MztcdHN0cnVjdCBraW9jYlx0XHQqaW9jYixcbiYjNDM7XHRzdHJ1Y3QgaW92X2l0ZXJcdFx0KnRvKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHhmc19pbm9kZVx0KmlwID0gWEZTX0koZmlsZV9pbm9kZShpb2NiLVx1MDAzZWtpX2ZpbHApKTtcbiYjNDM7XHRzc2l6ZV90XHRcdFx0cmV0O1xuJiM0MztcbiYjNDM7XHR0cmFjZV94ZnNfZmlsZV9idWZmZXJlZF9yZWFkKGlvY2IsIHRvKTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geGZzX2lsb2NrX2lvY2IoaW9jYiwgWEZTX0lPTE9DS19TSEFSRUQpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdHJldCA9IGdlbmVyaWNfZmlsZV9yZWFkX2l0ZXIoaW9jYiwgdG8pO1xuJiM0MztcdHhmc19pdW5sb2NrKGlwLCBYRlNfSU9MT0NLX1NIQVJFRCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4gU1RBVElDIHNzaXplX3RcbiB4ZnNfZmlsZV9kaW9fcmVhZChcbiBcdHN0cnVjdCBraW9jYlx0XHQqaW9jYixcbkBAIC0yNjUsNiAmIzQzOzI4NSwxNiBAQCB4ZnNfZmlsZV9kaW9fcmVhZChcbiBcdHJldCA9IHhmc19pbG9ja19pb2NiKGlvY2IsIFhGU19JT0xPQ0tfU0hBUkVEKTtcbiBcdGlmIChyZXQpXG4gXHRcdHJldHVybiByZXQ7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBSZS1jaGVjayB2ZXJpdHkgc3RhdHVzIGFmdGVyIGFjcXVpcmluZyBsb2NrLiBUaGlzIHByZXZlbnRzIFRPQ1RPVSBpblxuJiM0MztcdCAqIHhmc19maWxlX3JlYWRfaXRlcigpIHdoaWxlIGZhbGxpbmcgYmFjayBmcm9tIERJTyB0byBidWZmZXJlZCBJL08gYXNcbiYjNDM7XHQgKiBub3cgd2UgYXJlIGhvbGRpbmcgYSBsb2NrXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKGZzdmVyaXR5X2FjdGl2ZShWRlNfSShpcCkpKSB7XG4mIzQzO1x0XHR4ZnNfaXVubG9jayhpcCwgWEZTX0lPTE9DS19TSEFSRUQpO1xuJiM0MztcdFx0aW9jYi1cdTAwM2VraV9mbGFncyBcdTAwMjY9IH5JT0NCX0RJUkVDVDtcbiYjNDM7XHRcdHJldHVybiB4ZnNfZmlsZV9idWZmZXJlZF9yZWFkKGlvY2IsIHRvKTtcbiYjNDM7XHR9XG4gXHRpZiAobWFwcGluZ19zdGFibGVfd3JpdGVzKGlvY2ItXHUwMDNla2lfZmlscC1cdTAwM2VmX21hcHBpbmcpKSB7XG4gXHRcdGRpb19vcHMgPSBcdTAwMjZ4ZnNfZGlvX3JlYWRfYm91bmNlX29wcztcbiBcdFx0ZGlvX2ZsYWdzIHw9IElPTUFQX0RJT19CT1VOQ0U7XG5AQCAtMjgxLDcgJiM0MzszMTEsOCBAQCB4ZnNfZmlsZV9kYXhfcmVhZChcbiBcdHN0cnVjdCBraW9jYlx0XHQqaW9jYixcbiBcdHN0cnVjdCBpb3ZfaXRlclx0XHQqdG8pXG4ge1xuLVx0c3RydWN0IHhmc19pbm9kZVx0KmlwID0gWEZTX0koaW9jYi1cdTAwM2VraV9maWxwLVx1MDAzZWZfbWFwcGluZy1cdTAwM2Vob3N0KTtcbiYjNDM7XHRzdHJ1Y3QgaW5vZGVcdFx0Kmlub2RlID0gaW9jYi1cdTAwM2VraV9maWxwLVx1MDAzZWZfbWFwcGluZy1cdTAwM2Vob3N0O1xuJiM0MztcdHN0cnVjdCB4ZnNfaW5vZGVcdCppcCA9IFhGU19JKGlub2RlKTtcbiBcdHNzaXplX3RcdFx0XHRyZXQgPSAwO1xuIFxuIFx0dHJhY2VfeGZzX2ZpbGVfZGF4X3JlYWQoaW9jYiwgdG8pO1xuQEAgLTI5OSwyNSAmIzQzOzMzMCw2IEBAIHhmc19maWxlX2RheF9yZWFkKFxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4tU1RBVElDIHNzaXplX3Rcbi14ZnNfZmlsZV9idWZmZXJlZF9yZWFkKFxuLVx0c3RydWN0IGtpb2NiXHRcdCppb2NiLFxuLVx0c3RydWN0IGlvdl9pdGVyXHRcdCp0bylcbi17XG4tXHRzdHJ1Y3QgeGZzX2lub2RlXHQqaXAgPSBYRlNfSShmaWxlX2lub2RlKGlvY2ItXHUwMDNla2lfZmlscCkpO1xuLVx0c3NpemVfdFx0XHRcdHJldDtcbi1cbi1cdHRyYWNlX3hmc19maWxlX2J1ZmZlcmVkX3JlYWQoaW9jYiwgdG8pO1xuLVxuLVx0cmV0ID0geGZzX2lsb2NrX2lvY2IoaW9jYiwgWEZTX0lPTE9DS19TSEFSRUQpO1xuLVx0aWYgKHJldClcbi1cdFx0cmV0dXJuIHJldDtcbi1cdHJldCA9IGdlbmVyaWNfZmlsZV9yZWFkX2l0ZXIoaW9jYiwgdG8pO1xuLVx0eGZzX2l1bmxvY2soaXAsIFhGU19JT0xPQ0tfU0hBUkVEKTtcbi1cbi1cdHJldHVybiByZXQ7XG4tfVxuLVxuIFNUQVRJQyBzc2l6ZV90XG4geGZzX2ZpbGVfcmVhZF9pdGVyKFxuIFx0c3RydWN0IGtpb2NiXHRcdCppb2NiLFxuQEAgLTMzMiw2ICYjNDM7MzQ0LDE0IEBAIHhmc19maWxlX3JlYWRfaXRlcihcbiBcdGlmICh4ZnNfaXNfc2h1dGRvd24obXApKVxuIFx0XHRyZXR1cm4gLUVJTztcbiBcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEluIGNhc2UgZnMtdmVyaXR5IGlzIGVuYWJsZWQsIHdlIGFsc28gZmFsbGJhY2sgdG8gdGhlIGJ1ZmZlcmVkIHJlYWRcbiYjNDM7XHQgKiBmcm9tIHRoZSBkaXJlY3QgcmVhZCBwYXRoLiBUaGVyZWZvcmUsIElPQ0JfRElSRUNUIGlzIHNldCBhbmQgbmVlZCB0b1xuJiM0MztcdCAqIGJlIGNsZWFyZWQgKHNlZSBnZW5lcmljX2ZpbGVfcmVhZF9pdGVyKCkpXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKGZzdmVyaXR5X2FjdGl2ZShpbm9kZSkpXG4mIzQzO1x0XHRpb2NiLVx1MDAzZWtpX2ZsYWdzIFx1MDAyNj0gfklPQ0JfRElSRUNUO1xuJiM0MztcbiBcdGlmIChJU19EQVgoaW5vZGUpKVxuIFx0XHRyZXQgPSB4ZnNfZmlsZV9kYXhfcmVhZChpb2NiLCB0byk7XG4gXHRlbHNlIGlmIChpb2NiLVx1MDAzZWtpX2ZsYWdzIFx1MDAyNiBJT0NCX0RJUkVDVClcbkBAIC0xNzAwLDExICYjNDM7MTcyMCwxOCBAQCB4ZnNfZmlsZV9vcGVuKFxuIFx0c3RydWN0IGlub2RlXHQqaW5vZGUsXG4gXHRzdHJ1Y3QgZmlsZVx0KmZpbGUpXG4ge1xuJiM0MztcdGludFx0XHRlcnJvcjtcbiYjNDM7XG4gXHRpZiAoeGZzX2lzX3NodXRkb3duKFhGU19NKGlub2RlLVx1MDAzZWlfc2IpKSlcbiBcdFx0cmV0dXJuIC1FSU87XG4gXHRmaWxlLVx1MDAzZWZfbW9kZSB8PSBGTU9ERV9OT1dBSVQgfCBGTU9ERV9DQU5fT0RJUkVDVDtcbiBcdGlmICh4ZnNfZ2V0X2F0b21pY193cml0ZV9taW4oWEZTX0koaW5vZGUpKSBcdTAwM2UgMClcbiBcdFx0ZmlsZS1cdTAwM2VmX21vZGUgfD0gRk1PREVfQ0FOX0FUT01JQ19XUklURTtcbiYjNDM7XG4mIzQzO1x0ZXJyb3IgPSBmc3Zlcml0eV9maWxlX29wZW4oaW5vZGUsIGZpbGUpO1xuJiM0MztcdGlmIChlcnJvcilcbiYjNDM7XHRcdHJldHVybiBlcnJvcjtcbiYjNDM7XG4gXHRyZXR1cm4gZ2VuZXJpY19maWxlX29wZW4oaW5vZGUsIGZpbGUpO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2ZzdmVyaXR5LmMgYi9mcy94ZnMveGZzX2ZzdmVyaXR5LmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uOTczMjgxMWExNDQ0ZTZcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3hmcy94ZnNfZnN2ZXJpdHkuY1xuQEAgLTAsMCAmIzQzOzEsNDczIEBAXG4mIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXG4mIzQzOy8qXG4mIzQzOyAqIENvcHlyaWdodCAoQykgMjAyNiBSZWQgSGF0LCBJbmMuXG4mIzQzOyAqL1xuJiM0MzsjaW5jbHVkZSBcJiMzNDt4ZnNfcGxhdGZvcm0uaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDt4ZnNfZm9ybWF0LmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7eGZzX3NoYXJlZC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3hmc190cmFuc19yZXN2LmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7eGZzX21vdW50LmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7eGZzX2RhX2Zvcm1hdC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3hmc19kYV9idHJlZS5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3hmc19pbm9kZS5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3hmc19sb2dfZm9ybWF0LmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7eGZzX2JtYXBfdXRpbC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3hmc190cmFucy5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3hmc190cmFjZS5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3hmc19xdW90YS5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3hmc19mc3Zlcml0eS5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3hmc19pb21hcC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3hmc19lcnJvci5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3hmc19oZWFsdGguaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDt4ZnNfYm1hcC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3hmc19ibWFwX3V0aWwuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9mc3Zlcml0eS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2lvbWFwLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcGFnZW1hcC5oXHUwMDNlXG4mIzQzO1xuJiM0Mztsb2ZmX3RcbiYjNDM7eGZzX2ZzdmVyaXR5X21ldGFkYXRhX29mZnNldChcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgeGZzX2lub2RlXHQqaXApXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gcm91bmRfdXAoaV9zaXplX3JlYWQoVkZTX0lDKGlwKSksIFhGU19GU1ZFUklUWV9TVEFSVF9BTElHTik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2Jvb2xcbiYjNDM7eGZzX2ZzdmVyaXR5X2lzX2ZpbGVfZGF0YShcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgeGZzX2lub2RlXHQqaXAsXG4mIzQzO1x0bG9mZl90XHRcdFx0b2Zmc2V0KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGZzdmVyaXR5X2FjdGl2ZShWRlNfSUMoaXApKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0b2Zmc2V0IFx1MDAzYyB4ZnNfZnN2ZXJpdHlfbWV0YWRhdGFfb2Zmc2V0KGlwKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogUmV0cmlldmUgdGhlIHZlcml0eSBkZXNjcmlwdG9yLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludFxuJiM0Mzt4ZnNfZnN2ZXJpdHlfZ2V0X2Rlc2NyaXB0b3IoXG4mIzQzO1x0c3RydWN0IGlub2RlXHRcdCppbm9kZSxcbiYjNDM7XHR2b2lkXHRcdFx0KmJ1ZixcbiYjNDM7XHRzaXplX3RcdFx0XHRidWZfc2l6ZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB4ZnNfaW5vZGVcdCppcCA9IFhGU19JKGlub2RlKTtcbiYjNDM7XHRzdHJ1Y3QgeGZzX21vdW50XHQqbXAgPSBpcC1cdTAwM2VpX21vdW50O1xuJiM0MztcdF9fYmUzMlx0XHRcdGRfZGVzY19zaXplO1xuJiM0MztcdHUzMlx0XHRcdGRlc2Nfc2l6ZTtcbiYjNDM7XHR1NjRcdFx0XHRkZXNjX3NpemVfcG9zO1xuJiM0MztcdGludFx0XHRcdGVycm9yO1xuJiM0MztcdHU2NFx0XHRcdGRlc2NfcG9zO1xuJiM0MztcdHN0cnVjdCB4ZnNfYm1idF9pcmVjXHRyZWM7XG4mIzQzO1x0aW50XHRcdFx0aXNfZW1wdHk7XG4mIzQzO1x0dWludDMyX3RcdFx0YmxvY2tzaXplID0gaV9ibG9ja3NpemUoVkZTX0koaXApKTtcbiYjNDM7XHR4ZnNfZmlsZW9mZl90XHRcdGxhc3RfYmxvY2tfb2Zmc2V0O1xuJiM0MztcbiYjNDM7XHRBU1NFUlQoaW5vZGUtXHUwMDNlaV9mbGFncyBcdTAwMjYgU19WRVJJVFkpO1xuJiM0MztcdHhmc19pbG9jayhpcCwgWEZTX0lMT0NLX1NIQVJFRCk7XG4mIzQzO1x0ZXJyb3IgPSB4ZnNfYm1hcF9sYXN0X2V4dGVudChOVUxMLCBpcCwgWEZTX0RBVEFfRk9SSywgXHUwMDI2cmVjLCBcdTAwMjZpc19lbXB0eSk7XG4mIzQzO1x0eGZzX2l1bmxvY2soaXAsIFhGU19JTE9DS19TSEFSRUQpO1xuJiM0MztcdGlmIChlcnJvcilcbiYjNDM7XHRcdHJldHVybiBlcnJvcjtcbiYjNDM7XG4mIzQzO1x0aWYgKGlzX2VtcHR5KVxuJiM0MztcdFx0cmV0dXJuIC1FTk9EQVRBO1xuJiM0MztcbiYjNDM7XHRsYXN0X2Jsb2NrX29mZnNldCA9XG4mIzQzO1x0XHRYRlNfRlNCX1RPX0IobXAsIHJlYy5icl9zdGFydG9mZiAmIzQzOyByZWMuYnJfYmxvY2tjb3VudCk7XG4mIzQzO1x0aWYgKGxhc3RfYmxvY2tfb2Zmc2V0IFx1MDAzYz0geGZzX2ZzdmVyaXR5X21ldGFkYXRhX29mZnNldChpcCkpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT0RBVEE7XG4mIzQzO1xuJiM0MztcdGRlc2Nfc2l6ZV9wb3MgPSBsYXN0X2Jsb2NrX29mZnNldCAtIHNpemVvZihfX2JlMzIpO1xuJiM0MztcdGVycm9yID0gZnN2ZXJpdHlfcGFnZWNhY2hlX3JlYWQoaW5vZGUsIChjaGFyICopXHUwMDI2ZF9kZXNjX3NpemUsXG4mIzQzO1x0XHRcdHNpemVvZihkX2Rlc2Nfc2l6ZSksIGRlc2Nfc2l6ZV9wb3MpO1xuJiM0MztcdGlmIChlcnJvcilcbiYjNDM7XHRcdHJldHVybiBlcnJvcjtcbiYjNDM7XG4mIzQzO1x0ZGVzY19zaXplID0gYmUzMl90b19jcHUoZF9kZXNjX3NpemUpO1xuJiM0MztcdGlmIChYRlNfSVNfQ09SUlVQVChtcCwgZGVzY19zaXplIFx1MDAzZSBGU19WRVJJVFlfTUFYX0RFU0NSSVBUT1JfU0laRSkpIHtcbiYjNDM7XHRcdHhmc19pbm9kZV9tYXJrX3NpY2soWEZTX0koaW5vZGUpLCBYRlNfU0lDS19JTk9fRlNWRVJJVFkpO1xuJiM0MztcdFx0cmV0dXJuIC1FUkFOR0U7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoWEZTX0lTX0NPUlJVUFQobXAsIGRlc2Nfc2l6ZSBcdTAwM2UgZGVzY19zaXplX3BvcykpIHtcbiYjNDM7XHRcdHhmc19pbm9kZV9tYXJrX3NpY2soWEZTX0koaW5vZGUpLCBYRlNfU0lDS19JTk9fRlNWRVJJVFkpO1xuJiM0MztcdFx0cmV0dXJuIC1FUkFOR0U7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoIWJ1Zl9zaXplKVxuJiM0MztcdFx0cmV0dXJuIGRlc2Nfc2l6ZTtcbiYjNDM7XG4mIzQzO1x0aWYgKFhGU19JU19DT1JSVVBUKG1wLCBkZXNjX3NpemUgXHUwMDNlIGJ1Zl9zaXplKSkge1xuJiM0MztcdFx0eGZzX2lub2RlX21hcmtfc2ljayhYRlNfSShpbm9kZSksIFhGU19TSUNLX0lOT19GU1ZFUklUWSk7XG4mIzQzO1x0XHRyZXR1cm4gLUVSQU5HRTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGRlc2NfcG9zID0gcm91bmRfZG93bihkZXNjX3NpemVfcG9zIC0gZGVzY19zaXplLCBibG9ja3NpemUpO1xuJiM0MztcdGlmIChkZXNjX3BvcyBcdTAwM2MgeGZzX2ZzdmVyaXR5X21ldGFkYXRhX29mZnNldChpcCkpIHtcbiYjNDM7XHRcdHhmc19pbm9kZV9tYXJrX3NpY2soWEZTX0koaW5vZGUpLCBYRlNfU0lDS19JTk9fRlNWRVJJVFkpO1xuJiM0MztcdFx0cmV0dXJuIC1FUkFOR0U7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRlcnJvciA9IGZzdmVyaXR5X3BhZ2VjYWNoZV9yZWFkKGlub2RlLCBidWYsIGRlc2Nfc2l6ZSwgZGVzY19wb3MpO1xuJiM0MztcdGlmIChlcnJvcilcbiYjNDM7XHRcdHJldHVybiBlcnJvcjtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGRlc2Nfc2l6ZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludFxuJiM0Mzt4ZnNfZnN2ZXJpdHlfd3JpdGVfZGVzY3JpcHRvcihcbiYjNDM7XHRzdHJ1Y3QgZmlsZVx0XHQqZmlsZSxcbiYjNDM7XHRjb25zdCB2b2lkXHRcdCpkZXNjLFxuJiM0MztcdHUzMlx0XHRcdGRlc2Nfc2l6ZSxcbiYjNDM7XHR1NjRcdFx0XHRtZXJrbGVfdHJlZV9zaXplKVxuJiM0Mzt7XG4mIzQzO1x0aW50XHRcdFx0ZXJyb3I7XG4mIzQzO1x0c3RydWN0IGlub2RlXHRcdCppbm9kZSA9IGZpbGVfaW5vZGUoZmlsZSk7XG4mIzQzO1x0c3RydWN0IHhmc19pbm9kZVx0KmlwID0gWEZTX0koaW5vZGUpO1xuJiM0MztcdHVuc2lnbmVkIGludFx0XHRibGtzaXplID0gaXAtXHUwMDNlaV9tb3VudC1cdTAwM2VtX3NiLnNiX2Jsb2Nrc2l6ZTtcbiYjNDM7XHR1NjRcdFx0XHR0cmVlX2xhc3RfYmxvY2sgPVxuJiM0MztcdFx0XHR4ZnNfZnN2ZXJpdHlfbWV0YWRhdGFfb2Zmc2V0KGlwKSAmIzQzOyBtZXJrbGVfdHJlZV9zaXplO1xuJiM0MztcdHU2NFx0XHRcdGRlc2NfcG9zID1cbiYjNDM7XHRcdFx0cm91bmRfdXAodHJlZV9sYXN0X2Jsb2NrLCBYRlNfRlNWRVJJVFlfU1RBUlRfQUxJR04pO1xuJiM0MztcdHU2NFx0XHRcdGRlc2NfZW5kID0gZGVzY19wb3MgJiM0MzsgZGVzY19zaXplO1xuJiM0MztcdF9fYmUzMlx0XHRcdGRlc2Nfc2l6ZV9kaXNrID0gY3B1X3RvX2JlMzIoZGVzY19zaXplKTtcbiYjNDM7XHR1NjRcdFx0XHRkZXNjX3NpemVfcG9zID1cbiYjNDM7XHRcdFx0cm91bmRfdXAoZGVzY19lbmQgJiM0Mzsgc2l6ZW9mKGRlc2Nfc2l6ZV9kaXNrKSwgYmxrc2l6ZSkgLVxuJiM0MztcdFx0XHRzaXplb2YoZGVzY19zaXplX2Rpc2spO1xuJiM0MztcbiYjNDM7XHRlcnJvciA9IGlvbWFwX2ZzdmVyaXR5X3dyaXRlKGZpbGUsIGRlc2Nfc2l6ZV9wb3MsIHNpemVvZihfX2JlMzIpLFxuJiM0MztcdFx0XHQoY29uc3Qgdm9pZCAqKVx1MDAyNmRlc2Nfc2l6ZV9kaXNrLFxuJiM0MztcdFx0XHRcdTAwMjZ4ZnNfYnVmZmVyZWRfd3JpdGVfaW9tYXBfb3BzLFxuJiM0MztcdFx0XHRcdTAwMjZ4ZnNfaW9tYXBfd3JpdGVfb3BzKTtcbiYjNDM7XHRpZiAoZXJyb3IpXG4mIzQzO1x0XHRyZXR1cm4gZXJyb3I7XG4mIzQzO1xuJiM0MztcdHJldHVybiBpb21hcF9mc3Zlcml0eV93cml0ZShmaWxlLCBkZXNjX3BvcywgZGVzY19zaXplLCBkZXNjLFxuJiM0MztcdFx0XHRcdTAwMjZ4ZnNfYnVmZmVyZWRfd3JpdGVfaW9tYXBfb3BzLFxuJiM0MztcdFx0XHRcdTAwMjZ4ZnNfaW9tYXBfd3JpdGVfb3BzKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogVHJ5IHRvIHJlbW92ZSBhbGwgdGhlIGZzdmVyaXR5IG1ldGFkYXRhIGFmdGVyIGEgZmFpbGVkIGVuYWJsZW1lbnQuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50XG4mIzQzO3hmc19mc3Zlcml0eV9kZWxldGVfbWV0YWRhdGEoXG4mIzQzO1x0c3RydWN0IHhmc19pbm9kZVx0KmlwKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHhmc190cmFuc1x0KnRwO1xuJiM0MztcdHN0cnVjdCB4ZnNfbW91bnRcdCptcCA9IGlwLVx1MDAzZWlfbW91bnQ7XG4mIzQzO1x0aW50XHRcdFx0ZXJyb3I7XG4mIzQzO1xuJiM0MztcdGVycm9yID0geGZzX3RyYW5zX2FsbG9jKG1wLCBcdTAwMjZNX1JFUyhtcCktXHUwMDNldHJfaXRydW5jYXRlLCAwLCAwLCAwLCBcdTAwMjZ0cCk7XG4mIzQzO1x0aWYgKGVycm9yKVxuJiM0MztcdFx0cmV0dXJuIGVycm9yO1xuJiM0MztcbiYjNDM7XHR4ZnNfaWxvY2soaXAsIFhGU19JTE9DS19FWENMKTtcbiYjNDM7XHR4ZnNfdHJhbnNfaWpvaW4odHAsIGlwLCAwKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBXZSByZW1vdmluZyBwb3N0IEVPRiBkYXRhLCBubyBuZWVkIHRvIHVwZGF0ZSBpX3NpemUgYXMgZnN2ZXJpdHlcbiYjNDM7XHQgKiBkaWRuJiMzOTt0IG1vdmUgaV9zaXplIGluIHRoZSBmaXJzdCBwbGFjZVxuJiM0MztcdCAqL1xuJiM0MztcdGVycm9yID0geGZzX2l0cnVuY2F0ZV9leHRlbnRzKFx1MDAyNnRwLCBpcCwgWEZTX0RBVEFfRk9SSywgWEZTX0lTSVpFKGlwKSk7XG4mIzQzO1x0aWYgKGVycm9yKVxuJiM0MztcdFx0Z290byBlcnJfY2FuY2VsO1xuJiM0MztcbiYjNDM7XHRlcnJvciA9IHhmc190cmFuc19jb21taXQodHApO1xuJiM0MztcdGlmIChlcnJvcilcbiYjNDM7XHRcdGdvdG8gb3V0X3VubG9jaztcbiYjNDM7b3V0X3VubG9jazpcbiYjNDM7XHR4ZnNfaXVubG9jayhpcCwgWEZTX0lMT0NLX0VYQ0wpO1xuJiM0MztcdHJldHVybiBlcnJvcjtcbiYjNDM7XG4mIzQzO2Vycl9jYW5jZWw6XG4mIzQzO1x0eGZzX3RyYW5zX2NhbmNlbCh0cCk7XG4mIzQzO1x0eGZzX2l1bmxvY2soaXAsIFhGU19JTE9DS19FWENMKTtcbiYjNDM7XHRyZXR1cm4gZXJyb3I7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnRcbiYjNDM7eGZzX2ZzdmVyaXR5X2NhbmNlbF91bndyaXR0ZW4oXG4mIzQzO1x0c3RydWN0IHhmc19pbm9kZVx0KmlwLFxuJiM0MztcdGxvZmZfdFx0XHRcdHN0YXJ0LFxuJiM0MztcdGxvZmZfdFx0XHRcdGVuZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB4ZnNfbW91bnRcdCptcCA9IGlwLVx1MDAzZWlfbW91bnQ7XG4mIzQzO1x0c3RydWN0IHhmc190cmFuc1x0KnRwO1xuJiM0MztcdHhmc19maWxlb2ZmX3RcdFx0b2Zmc2V0X2ZzYiA9IFhGU19CX1RPX0ZTQihtcCwgc3RhcnQpO1xuJiM0MztcdHhmc19maWxlb2ZmX3RcdFx0ZW5kX2ZzYiA9IFhGU19CX1RPX0ZTQihtcCwgZW5kKTtcbiYjNDM7XHRzdHJ1Y3QgeGZzX2JtYnRfaXJlY1x0aW1hcDtcbiYjNDM7XHRpbnRcdFx0XHRuaW1hcHM7XG4mIzQzO1x0aW50XHRcdFx0ZXJyb3IgPSAwO1xuJiM0MztcdGludFx0XHRcdGRvbmU7XG4mIzQzO1xuJiM0MztcbiYjNDM7XHR3aGlsZSAob2Zmc2V0X2ZzYiBcdTAwM2MgZW5kX2ZzYikge1xuJiM0MztcdFx0bmltYXBzID0gMTtcbiYjNDM7XG4mIzQzO1x0XHRlcnJvciA9IHhmc190cmFuc19hbGxvYyhtcCwgXHUwMDI2TV9SRVMobXApLVx1MDAzZXRyX3dyaXRlLCAwLCAwLFxuJiM0MztcdFx0XHRcdDAsIFx1MDAyNnRwKTtcbiYjNDM7XHRcdGlmIChlcnJvcilcbiYjNDM7XHRcdFx0cmV0dXJuIGVycm9yO1xuJiM0MztcbiYjNDM7XHRcdHhmc19pbG9jayhpcCwgWEZTX0lMT0NLX0VYQ0wpO1xuJiM0MztcdFx0ZXJyb3IgPSB4ZnNfYm1hcGlfcmVhZChpcCwgb2Zmc2V0X2ZzYiwgZW5kX2ZzYiAtIG9mZnNldF9mc2IsXG4mIzQzO1x0XHRcdFx0XHUwMDI2aW1hcCwgXHUwMDI2bmltYXBzLCAwKTtcbiYjNDM7XHRcdGlmIChlcnJvcilcbiYjNDM7XHRcdFx0Z290byBvdXRfY2FuY2VsO1xuJiM0MztcbiYjNDM7XHRcdGlmIChuaW1hcHMgPT0gMClcbiYjNDM7XHRcdFx0Z290byBvdXRfY2FuY2VsO1xuJiM0MztcbiYjNDM7XHRcdGlmIChpbWFwLmJyX3N0YXRlID09IFhGU19FWFRfVU5XUklUVEVOKSB7XG4mIzQzO1x0XHRcdHhmc190cmFuc19pam9pbih0cCwgaXAsIFhGU19JTE9DS19FWENMKTtcbiYjNDM7XG4mIzQzO1x0XHRcdGVycm9yID0geGZzX2J1bm1hcGkodHAsIGlwLCBpbWFwLmJyX3N0YXJ0b2ZmLFxuJiM0MztcdFx0XHRcdFx0aW1hcC5icl9ibG9ja2NvdW50LCAwLCAxLCBcdTAwMjZkb25lKTtcbiYjNDM7XHRcdFx0aWYgKGVycm9yKVxuJiM0MztcdFx0XHRcdGdvdG8gb3V0X2NhbmNlbDtcbiYjNDM7XG4mIzQzO1x0XHRcdGVycm9yID0geGZzX3RyYW5zX2NvbW1pdCh0cCk7XG4mIzQzO1x0XHRcdGlmIChlcnJvcilcbiYjNDM7XHRcdFx0XHRyZXR1cm4gZXJyb3I7XG4mIzQzO1x0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHR4ZnNfdHJhbnNfY2FuY2VsKHRwKTtcbiYjNDM7XHRcdFx0eGZzX2l1bmxvY2soaXAsIFhGU19JTE9DS19FWENMKTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRvZmZzZXRfZnNiID0gaW1hcC5icl9zdGFydG9mZiAmIzQzOyBpbWFwLmJyX2Jsb2NrY291bnQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gZXJyb3I7XG4mIzQzO291dF9jYW5jZWw6XG4mIzQzO1x0eGZzX3RyYW5zX2NhbmNlbCh0cCk7XG4mIzQzO1x0eGZzX2l1bmxvY2soaXAsIFhGU19JTE9DS19FWENMKTtcbiYjNDM7XHRyZXR1cm4gZXJyb3I7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBQcmVwYXJlIHRvIGVuYWJsZSBmc3Zlcml0eSBieSBjbGVhcmluZyBvbGQgbWV0YWRhdGEuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50XG4mIzQzO3hmc19mc3Zlcml0eV9iZWdpbl9lbmFibGUoXG4mIzQzO1x0c3RydWN0IGZpbGVcdFx0KmZpbHApXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaW5vZGVcdFx0Kmlub2RlID0gZmlsZV9pbm9kZShmaWxwKTtcbiYjNDM7XHRzdHJ1Y3QgeGZzX2lub2RlXHQqaXAgPSBYRlNfSShpbm9kZSk7XG4mIzQzO1x0aW50XHRcdFx0ZXJyb3I7XG4mIzQzO1xuJiM0MztcdHhmc19hc3NlcnRfaWxvY2tlZChpcCwgWEZTX0lPTE9DS19FWENMKTtcbiYjNDM7XG4mIzQzO1x0aWYgKElTX0RBWChpbm9kZSkgfHwgaXAtXHUwMDNlaV9kaWZsYWdzMiBcdTAwMjYgWEZTX0RJRkxBRzJfREFYKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdGlmIChpbm9kZS1cdTAwM2VpX3NpemUgXHUwMDNlIFhGU19GU1ZFUklUWV9MQVJHRVNUX0ZJTEUpXG4mIzQzO1x0XHRyZXR1cm4gLUVGQklHO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEZsdXNoIHBhZ2VjYWNoZSBiZWZvcmUgYnVpbGRpbmcgTWVya2xlIHRyZWUuIElub2RlIGlzIGxvY2tlZCBhbmQgbm9cbiYjNDM7XHQgKiBmdXJ0aGVyIHdyaXRlcyB3aWxsIGhhcHBlbiB0byB0aGUgZmlsZSBleGNlcHQgZnN2ZXJpdHkgbWV0YWRhdGFcbiYjNDM7XHQgKi9cbiYjNDM7XHRlcnJvciA9IGZpbGVtYXBfd3JpdGVfYW5kX3dhaXQoaW5vZGUtXHUwMDNlaV9tYXBwaW5nKTtcbiYjNDM7XHRpZiAoZXJyb3IpXG4mIzQzO1x0XHRyZXR1cm4gZXJyb3I7XG4mIzQzO1xuJiM0MztcdGlmICh4ZnNfaWZsYWdzX3Rlc3RfYW5kX3NldChpcCwgWEZTX1ZFUklUWV9DT05TVFJVQ1RJT04pKVxuJiM0MztcdFx0cmV0dXJuIC1FQlVTWTtcbiYjNDM7XG4mIzQzO1x0ZXJyb3IgPSB4ZnNfcW1fZHFhdHRhY2goaXApO1xuJiM0MztcdGlmIChlcnJvcilcbiYjNDM7XHRcdGdvdG8gb3V0X2NsZWFyO1xuJiM0MztcbiYjNDM7XHRlcnJvciA9IHhmc19mc3Zlcml0eV9kZWxldGVfbWV0YWRhdGEoaXApO1xuJiM0MztcdGlmIChlcnJvcilcbiYjNDM7XHRcdGdvdG8gb3V0X2NsZWFyO1xuJiM0MztcdHJldHVybiBlcnJvcjtcbiYjNDM7b3V0X2NsZWFyOlxuJiM0MztcdHhmc19pZmxhZ3NfY2xlYXIoaXAsIFhGU19WRVJJVFlfQ09OU1RSVUNUSU9OKTtcbiYjNDM7XHRyZXR1cm4gZXJyb3I7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIENvbXBsZXRlIChvciBmYWlsKSB0aGUgcHJvY2VzcyBvZiBlbmFibGluZyBmc3Zlcml0eS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnRcbiYjNDM7eGZzX2ZzdmVyaXR5X2VuZF9lbmFibGUoXG4mIzQzO1x0c3RydWN0IGZpbGVcdFx0KmZpbGUsXG4mIzQzO1x0Y29uc3Qgdm9pZFx0XHQqZGVzYyxcbiYjNDM7XHRzaXplX3RcdFx0XHRkZXNjX3NpemUsXG4mIzQzO1x0dTY0XHRcdFx0bWVya2xlX3RyZWVfc2l6ZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBpbm9kZVx0XHQqaW5vZGUgPSBmaWxlX2lub2RlKGZpbGUpO1xuJiM0MztcdHN0cnVjdCB4ZnNfaW5vZGVcdCppcCA9IFhGU19JKGlub2RlKTtcbiYjNDM7XHRzdHJ1Y3QgeGZzX21vdW50XHQqbXAgPSBpcC1cdTAwM2VpX21vdW50O1xuJiM0MztcdHN0cnVjdCB4ZnNfdHJhbnNcdCp0cDtcbiYjNDM7XHRpbnRcdFx0XHRlcnJvciA9IDA7XG4mIzQzO1x0bG9mZl90XHRcdFx0cmFuZ2Vfc3RhcnQgPSB4ZnNfZnN2ZXJpdHlfbWV0YWRhdGFfb2Zmc2V0KGlwKTtcbiYjNDM7XG4mIzQzO1x0eGZzX2Fzc2VydF9pbG9ja2VkKGlwLCBYRlNfSU9MT0NLX0VYQ0wpO1xuJiM0MztcbiYjNDM7XHQvKiBmcy12ZXJpdHkgZmFpbGVkLCBqdXN0IGNsZWFudXAgKi9cbiYjNDM7XHRpZiAoZGVzYyA9PSBOVUxMKSB7XG4mIzQzO1x0XHRlcnJvciA9IHhmc19mc3Zlcml0eV9kZWxldGVfbWV0YWRhdGEoaXApO1xuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRlcnJvciA9IHhmc19mc3Zlcml0eV93cml0ZV9kZXNjcmlwdG9yKGZpbGUsIGRlc2MsIGRlc2Nfc2l6ZSxcbiYjNDM7XHRcdFx0bWVya2xlX3RyZWVfc2l6ZSk7XG4mIzQzO1x0aWYgKGVycm9yKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogV2FpdCBmb3IgTWVya2xlIHRyZWUgZ2V0IHdyaXR0ZW4gdG8gZGlzayBiZWZvcmUgc2V0dGluZyBvbi1kaXNrIGlub2RlXG4mIzQzO1x0ICogZmxhZyBhbmQgY2xlYXJpbmcgWEZTX1ZFUklUWV9DT05TVFJVQ1RJT05cbiYjNDM7XHQgKi9cbiYjNDM7XHRlcnJvciA9IGZpbGVtYXBfd3JpdGVfYW5kX3dhaXRfcmFuZ2UoaW5vZGUtXHUwMDNlaV9tYXBwaW5nLCByYW5nZV9zdGFydCxcbiYjNDM7XHRcdFx0TExPTkdfTUFYKTtcbiYjNDM7XHRpZiAoZXJyb3IpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBSZW1vdmUgdW53cml0dGVuIGV4dGVudHMgbGVmdCBieSBDT1cgcHJlYWxsb2NhdGlvbnMgYW5kIHdyaXRlXG4mIzQzO1x0ICogcHJlYWxsb2NhdGlvbiBpbiB0aGUgbWVya2xlIHRyZWUgaG9sZXMgYW5kIHBhc3QgZGVzY3JpcHRvclxuJiM0MztcdCAqL1xuJiM0MztcdGVycm9yID0geGZzX2ZzdmVyaXR5X2NhbmNlbF91bndyaXR0ZW4oaXAsIHJhbmdlX3N0YXJ0LCBMTE9OR19NQVgpO1xuJiM0MztcdGlmIChlcnJvcilcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFByb2FjdGl2ZWx5IGRyb3AgYW55IGRlbGF5ZWQgYWxsb2NhdGlvbnMgaW4gQ09XIGZvcmssIHRoZSBmc3Zlcml0eVxuJiM0MztcdCAqIGZpbGVzIGFyZSByZWFkLW9ubHlcbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoeGZzX2lzX2Nvd19pbm9kZShpcCkpIHtcbiYjNDM7XHRcdGlmICghaXAtXHUwMDNlaV9jb3dmcClcbiYjNDM7XHRcdFx0eGZzX2lmb3JrX2luaXRfY293KGlwKTtcbiYjNDM7XHRcdHhmc19ibWFwX3B1bmNoX2RlbGFsbG9jX3JhbmdlKGlwLCBYRlNfQ09XX0ZPUkssIDAsIExMT05HX01BWCxcbiYjNDM7XHRcdFx0XHROVUxMKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogU2V0IGZzdmVyaXR5IGlub2RlIGZsYWdcbiYjNDM7XHQgKi9cbiYjNDM7XHRlcnJvciA9IHhmc190cmFuc19hbGxvY19pbm9kZShpcCwgXHUwMDI2TV9SRVMobXApLVx1MDAzZXRyX2ljaGFuZ2UsXG4mIzQzO1x0XHRcdDAsIDAsIGZhbHNlLCBcdTAwMjZ0cCk7XG4mIzQzO1x0aWYgKGVycm9yKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogRW5zdXJlIHRoYXQgd2UmIzM5O3ZlIHBlcnNpc3RlZCB0aGUgdmVyaXR5IGluZm9ybWF0aW9uIGJlZm9yZSB3ZSBlbmFibGVcbiYjNDM7XHQgKiBpdCBvbiB0aGUgaW5vZGUgYW5kIHRlbGwgdGhlIGNhbGxlciB3ZSBoYXZlIHNlYWxlZCB0aGUgaW5vZGUuXG4mIzQzO1x0ICovXG4mIzQzO1x0aXAtXHUwMDNlaV9kaWZsYWdzMiB8PSBYRlNfRElGTEFHMl9WRVJJVFk7XG4mIzQzO1xuJiM0MztcdHhmc190cmFuc19sb2dfaW5vZGUodHAsIGlwLCBYRlNfSUxPR19DT1JFKTtcbiYjNDM7XHR4ZnNfdHJhbnNfc2V0X3N5bmModHApO1xuJiM0MztcbiYjNDM7XHRlcnJvciA9IHhmc190cmFuc19jb21taXQodHApO1xuJiM0MztcdHhmc19pdW5sb2NrKGlwLCBYRlNfSUxPQ0tfRVhDTCk7XG4mIzQzO1xuJiM0MztcdGlmICghZXJyb3IpXG4mIzQzO1x0XHRpbm9kZS1cdTAwM2VpX2ZsYWdzIHw9IFNfVkVSSVRZO1xuJiM0MztcbiYjNDM7b3V0OlxuJiM0MztcdGlmIChlcnJvcikge1xuJiM0MztcdFx0aW50XHRlcnJvcjI7XG4mIzQzO1xuJiM0MztcdFx0ZXJyb3IyID0geGZzX2ZzdmVyaXR5X2RlbGV0ZV9tZXRhZGF0YShpcCk7XG4mIzQzO1x0XHRpZiAoZXJyb3IyKVxuJiM0MztcdFx0XHR4ZnNfYWxlcnQoaXAtXHUwMDNlaV9tb3VudCxcbiYjNDM7XCYjMzQ7aW5vIDB4JWxseCBmYWlsZWQgdG8gY2xlYW4gdXAgbmV3IGZzdmVyaXR5IG1ldGFkYXRhLCBlcnIgJWRcJiMzNDssXG4mIzQzO1x0XHRcdFx0XHRJX0lOTyhpcCksIGVycm9yMik7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHR4ZnNfaWZsYWdzX2NsZWFyKGlwLCBYRlNfVkVSSVRZX0NPTlNUUlVDVElPTik7XG4mIzQzO1x0cmV0dXJuIGVycm9yO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBSZXRyaWV2ZSBhIG1lcmtsZSB0cmVlIGJsb2NrLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHN0cnVjdCBwYWdlICpcbiYjNDM7eGZzX2ZzdmVyaXR5X3JlYWRfbWVya2xlKFxuJiM0MztcdHN0cnVjdCBpbm9kZVx0XHQqaW5vZGUsXG4mIzQzO1x0cGdvZmZfdFx0XHRcdGluZGV4KVxuJiM0Mzt7XG4mIzQzO1x0aW5kZXggJiM0Mzs9IHhmc19mc3Zlcml0eV9tZXRhZGF0YV9vZmZzZXQoWEZTX0koaW5vZGUpKSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGdlbmVyaWNfcmVhZF9tZXJrbGVfdHJlZV9wYWdlKGlub2RlLCBpbmRleCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIFJldHJpZXZlIGEgbWVya2xlIHRyZWUgYmxvY2suXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZFxuJiM0Mzt4ZnNfZnN2ZXJpdHlfcmVhZGFoZWFkX21lcmtsZV90cmVlKFxuJiM0MztcdHN0cnVjdCBpbm9kZVx0XHQqaW5vZGUsXG4mIzQzO1x0cGdvZmZfdFx0XHRcdGluZGV4LFxuJiM0MztcdHVuc2lnbmVkIGxvbmdcdFx0bnJfcGFnZXMpXG4mIzQzO3tcbiYjNDM7XHRpbmRleCAmIzQzOz0geGZzX2ZzdmVyaXR5X21ldGFkYXRhX29mZnNldChYRlNfSShpbm9kZSkpIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuJiM0MztcbiYjNDM7XHRnZW5lcmljX3JlYWRhaGVhZF9tZXJrbGVfdHJlZShpbm9kZSwgaW5kZXgsIG5yX3BhZ2VzKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogV3JpdGUgYSBtZXJrbGUgdHJlZSBibG9jay5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnRcbiYjNDM7eGZzX2ZzdmVyaXR5X3dyaXRlX21lcmtsZShcbiYjNDM7XHRzdHJ1Y3QgZmlsZVx0XHQqZmlsZSxcbiYjNDM7XHRjb25zdCB2b2lkXHRcdCpidWYsXG4mIzQzO1x0dTY0XHRcdFx0cG9zLFxuJiM0MztcdHVuc2lnbmVkIGludFx0XHRzaXplLFxuJiM0MztcdGNvbnN0IHU4XHRcdCp6ZXJvX2RpZ2VzdCxcbiYjNDM7XHR1bnNpZ25lZCBpbnRcdFx0ZGlnZXN0X3NpemUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaW5vZGVcdFx0Kmlub2RlID0gZmlsZV9pbm9kZShmaWxlKTtcbiYjNDM7XHRzdHJ1Y3QgeGZzX2lub2RlXHQqaXAgPSBYRlNfSShpbm9kZSk7XG4mIzQzO1x0bG9mZl90XHRcdFx0cG9zaXRpb24gPSBwb3MgJiM0MztcbiYjNDM7XHRcdHhmc19mc3Zlcml0eV9tZXRhZGF0YV9vZmZzZXQoaXApO1xuJiM0MztcbiYjNDM7XHRpZiAocG9zaXRpb24gJiM0Mzsgc2l6ZSBcdTAwM2UgaW5vZGUtXHUwMDNlaV9zYi1cdTAwM2VzX21heGJ5dGVzKVxuJiM0MztcdFx0cmV0dXJuIC1FRkJJRztcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBJZiB0aGlzIGlzIGEgYmxvY2sgZnVsbCBvZiBoYXNoZXMgb2YgemVyb2VkIGJsb2NrcywgZG9uJiMzOTt0IGJvdGhlclxuJiM0MztcdCAqIHN0b3JpbmcgdGhlIGJsb2NrLiBXZSBjYW4gc3ludGhlc2l6ZSB0aGVtIGxhdGVyLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogSG93ZXZlciwgZG8gdGhpcyBvbmx5IGluIGNhc2UgTWVya2xlIHRyZWUgYmxvY2sgPT0gZnMgYmxvY2sgc2l6ZS5cbiYjNDM7XHQgKiBJb21hcCBzeW50aGVzaXplcyB0aGVzZSBibG9ja3MgYmFzZWQgb24gaG9sZXMgaW4gdGhlIG1lcmtsZSB0cmVlLiBXZVxuJiM0MztcdCAqIHdvbiYjMzk7dCBiZSBhYmxlIHRvIHRlbGwgaWYgc29tZXRoaW5nIG5lZWQgdG8gYmUgc3ludGhlc2l6ZXMgZm9yIHRoZVxuJiM0MztcdCAqIHJhbmdlIGluIHRoZSBmcyBibG9jay4gRm9yIGV4YW1wbGUsIGZvciA0ayBmaWxlc3lzdGVtIGJsb2NrXG4mIzQzO1x0ICpcbiYjNDM7XHQgKlx0WyAxayB8IHplcm8gaGFzaGVzIHwgemVybyBoYXNoZXMgfCAxayBdXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBJb21hcCB3b24mIzM5O3Qga25vdyBhYm91dCB0aGVzZSBlbXB0eSBibG9ja3MuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHNpemUgPT0gaXAtXHUwMDNlaV9tb3VudC1cdTAwM2VtX3NiLnNiX2Jsb2Nrc2l6ZSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0LypcbiYjNDM7XHRcdFx0ICogRmlyc3QgZGlnZXN0IGlzIHplcm9fZGlnZXN0XG4mIzQzO1x0XHRcdCAqL1xuJiM0MztcdFx0XHRtZW1jbXAoYnVmLCB6ZXJvX2RpZ2VzdCwgZGlnZXN0X3NpemUpID09IDAgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRcdC8qXG4mIzQzO1x0XHRcdCAqIEV2ZXJ5IGRpZ2VzdCBpcyBzYW1lIGFzIHByZXZpb3VzLCB0aHVzIGFsbCBhcmVcbiYjNDM7XHRcdFx0ICogemVyb19kaWdlc3RcbiYjNDM7XHRcdFx0ICovXG4mIzQzO1x0XHRcdG1lbWNtcChidWYgJiM0MzsgZGlnZXN0X3NpemUsIGJ1Ziwgc2l6ZSAtIGRpZ2VzdF9zaXplKSA9PSAwKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdHJldHVybiBpb21hcF9mc3Zlcml0eV93cml0ZShmaWxlLCBwb3NpdGlvbiwgc2l6ZSwgYnVmLFxuJiM0MztcdFx0XHRcdTAwMjZ4ZnNfYnVmZmVyZWRfd3JpdGVfaW9tYXBfb3BzLFxuJiM0MztcdFx0XHRcdTAwMjZ4ZnNfaW9tYXBfd3JpdGVfb3BzKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7Y29uc3Qgc3RydWN0IGZzdmVyaXR5X29wZXJhdGlvbnMgeGZzX2ZzdmVyaXR5X29wcyA9IHtcbiYjNDM7XHQuYmVnaW5fZW5hYmxlX3Zlcml0eVx0XHQ9IHhmc19mc3Zlcml0eV9iZWdpbl9lbmFibGUsXG4mIzQzO1x0LmVuZF9lbmFibGVfdmVyaXR5XHRcdD0geGZzX2ZzdmVyaXR5X2VuZF9lbmFibGUsXG4mIzQzO1x0LmdldF92ZXJpdHlfZGVzY3JpcHRvclx0XHQ9IHhmc19mc3Zlcml0eV9nZXRfZGVzY3JpcHRvcixcbiYjNDM7XHQucmVhZF9tZXJrbGVfdHJlZV9wYWdlXHRcdD0geGZzX2ZzdmVyaXR5X3JlYWRfbWVya2xlLFxuJiM0MztcdC5yZWFkYWhlYWRfbWVya2xlX3RyZWVcdFx0PSB4ZnNfZnN2ZXJpdHlfcmVhZGFoZWFkX21lcmtsZV90cmVlLFxuJiM0MztcdC53cml0ZV9tZXJrbGVfdHJlZV9ibG9ja1x0PSB4ZnNfZnN2ZXJpdHlfd3JpdGVfbWVya2xlLFxuJiM0Mzt9O1xuZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfZnN2ZXJpdHkuaCBiL2ZzL3hmcy94ZnNfZnN2ZXJpdHkuaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi42YTk4MWUyMGE3NWJiOFxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvZnMveGZzL3hmc19mc3Zlcml0eS5oXG5AQCAtMCwwICYjNDM7MSwyOCBAQFxuJiM0MzsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xuJiM0MzsvKlxuJiM0MzsgKiBDb3B5cmlnaHQgKEMpIDIwMjYgUmVkIEhhdCwgSW5jLlxuJiM0MzsgKi9cbiYjNDM7I2lmbmRlZiBfX1hGU19GU1ZFUklUWV9IX19cbiYjNDM7I2RlZmluZSBfX1hGU19GU1ZFUklUWV9IX19cbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3hmc19wbGF0Zm9ybS5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZzdmVyaXR5LmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNpZmRlZiBDT05GSUdfRlNfVkVSSVRZXG4mIzQzO2V4dGVybiBjb25zdCBzdHJ1Y3QgZnN2ZXJpdHlfb3BlcmF0aW9ucyB4ZnNfZnN2ZXJpdHlfb3BzO1xuJiM0Mztsb2ZmX3QgeGZzX2ZzdmVyaXR5X21ldGFkYXRhX29mZnNldChjb25zdCBzdHJ1Y3QgeGZzX2lub2RlICppcCk7XG4mIzQzO2Jvb2wgeGZzX2ZzdmVyaXR5X2lzX2ZpbGVfZGF0YShjb25zdCBzdHJ1Y3QgeGZzX2lub2RlICppcCwgbG9mZl90IG9mZnNldCk7XG4mIzQzOyNlbHNlXG4mIzQzO3N0YXRpYyBpbmxpbmUgbG9mZl90IHhmc19mc3Zlcml0eV9tZXRhZGF0YV9vZmZzZXQoY29uc3Qgc3RydWN0IHhmc19pbm9kZSAqaXApXG4mIzQzO3tcbiYjNDM7XHRXQVJOX09OX09OQ0UoMSk7XG4mIzQzO1x0cmV0dXJuIFVMTE9OR19NQVg7XG4mIzQzO31cbiYjNDM7c3RhdGljIGlubGluZSBib29sIHhmc19mc3Zlcml0eV9pc19maWxlX2RhdGEoY29uc3Qgc3RydWN0IHhmc19pbm9kZSAqaXAsXG4mIzQzO1x0XHRcdFx0XHQgICAgbG9mZl90IG9mZnNldClcbiYjNDM7e1xuJiM0MztcdHJldHVybiBmYWxzZTtcbiYjNDM7fVxuJiM0MzsjZW5kaWZcdC8qIENPTkZJR19GU19WRVJJVFkgKi9cbiYjNDM7XG4mIzQzOyNlbmRpZlx0LyogX19YRlNfRlNWRVJJVFlfSF9fICovXG5kaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19oZWFsdGguYyBiL2ZzL3hmcy94ZnNfaGVhbHRoLmNcbmluZGV4IDIzOWI4NDNlODNkNDJhLi5iZTY2NzYwZmIxMjBmNyAxMDA2NDRcbi0tLSBhL2ZzL3hmcy94ZnNfaGVhbHRoLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3hmcy94ZnNfaGVhbHRoLmNcbkBAIC02MjUsNiAmIzQzOzYyNSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaW9jdGxfc2lja19tYXAgaW5vX21hcFtdID0ge1xuIFx0eyBYRlNfU0lDS19JTk9fRElSX1pBUFBFRCxcdFhGU19CU19TSUNLX0RJUiB9LFxuIFx0eyBYRlNfU0lDS19JTk9fU1lNTElOS19aQVBQRUQsXHRYRlNfQlNfU0lDS19TWU1MSU5LIH0sXG4gXHR7IFhGU19TSUNLX0lOT19ESVJUUkVFLFx0WEZTX0JTX1NJQ0tfRElSVFJFRSB9LFxuJiM0MztcdHsgWEZTX1NJQ0tfSU5PX0ZTVkVSSVRZLFx0WEZTX0JTX1NJQ0tfRlNWRVJJVFkgfSxcbiB9O1xuIFxuIC8qIEZpbGwgb3V0IGJ1bGtzdGF0IGhlYWx0aCBpbmZvLiAqL1xuZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfaW5vZGUuaCBiL2ZzL3hmcy94ZnNfaW5vZGUuaFxuaW5kZXggMzRjMTAzOGViZmNkZTEuLjE3Y2UwODM1OTFmNDA4IDEwMDY0NFxuLS0tIGEvZnMveGZzL3hmc19pbm9kZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy94ZnMveGZzX2lub2RlLmhcbkBAIC00MTksNiAmIzQzOzQxOSwxMiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgeGZzX2lub2RlX2Nhbl9zd19hdG9taWNfd3JpdGUoY29uc3Qgc3RydWN0IHhmc19pbm9kZSAqaXApXG4gICovXG4gI2RlZmluZSBYRlNfSVJFTUFQUElOR1x0XHQoMVUgXHUwMDNjXHUwMDNjIDE1KVxuIFxuJiM0MzsvKlxuJiM0MzsgKiBmcy12ZXJpdHkmIzM5O3MgTWVya2xlIHRyZWUgaXMgdW5kZXIgY29uc3RydWN0aW9uLiBUaGUgZmlsZSBpcyByZWFkLW9ubHksIHRoZVxuJiM0MzsgKiBvbmx5IHdyaXRlcyBoYXBwZW5pbmcgYXJlIGZvciB0aGUgZnN2ZXJpdHkgbWV0YWRhdGEuXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIFhGU19WRVJJVFlfQ09OU1RSVUNUSU9OXHQoMVUgXHUwMDNjXHUwMDNjIDE2KVxuJiM0MztcbiAvKiBBbGwgaW5vZGUgc3RhdGUgZmxhZ3MgcmVsYXRlZCB0byBpbm9kZSByZWNsYWltLiAqL1xuICNkZWZpbmUgWEZTX0FMTF9JUkVDTEFJTV9GTEFHU1x0KFhGU19JUkVDTEFJTUFCTEUgfCBcXFxuIFx0XHRcdFx0IFhGU19JUkVDTEFJTSB8IFxcXG5kaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19pb2N0bC5jIGIvZnMveGZzL3hmc19pb2N0bC5jXG5pbmRleCAxYjUzNzAxYmViZWExYS4uZmM3ODYwYThiNWFiYjEgMTAwNjQ0XG4tLS0gYS9mcy94ZnMveGZzX2lvY3RsLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3hmcy94ZnNfaW9jdGwuY1xuQEAgLTQ5LDYgJiM0Mzs0OSw3IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbW91bnQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZpbGVhdHRyLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvZnN2ZXJpdHkuaFx1MDAzZVxuIFxuIC8qIFJldHVybiAwIG9uIHN1Y2Nlc3Mgb3IgcG9zaXRpdmUgZXJyb3IgKi9cbiBpbnRcbkBAIC0xNDY2LDYgJiM0MzsxNDY3LDE5IEBAIHhmc19maWxlX2lvY3RsKFxuIFx0Y2FzZSBYRlNfSU9DX1ZFUklGWV9NRURJQTpcbiBcdFx0cmV0dXJuIHhmc19pb2NfdmVyaWZ5X21lZGlhKGZpbHAsIGFyZyk7XG4gXG4mIzQzO1x0Y2FzZSBGU19JT0NfRU5BQkxFX1ZFUklUWTpcbiYjNDM7XHRcdGlmICgheGZzX2hhc192ZXJpdHkobXApKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1x0XHRyZXR1cm4gZnN2ZXJpdHlfaW9jdGxfZW5hYmxlKGZpbHAsIGFyZyk7XG4mIzQzO1x0Y2FzZSBGU19JT0NfTUVBU1VSRV9WRVJJVFk6XG4mIzQzO1x0XHRpZiAoIXhmc19oYXNfdmVyaXR5KG1wKSlcbiYjNDM7XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcdFx0cmV0dXJuIGZzdmVyaXR5X2lvY3RsX21lYXN1cmUoZmlscCwgYXJnKTtcbiYjNDM7XHRjYXNlIEZTX0lPQ19SRUFEX1ZFUklUWV9NRVRBREFUQTpcbiYjNDM7XHRcdGlmICgheGZzX2hhc192ZXJpdHkobXApKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1x0XHRyZXR1cm4gZnN2ZXJpdHlfaW9jdGxfcmVhZF9tZXRhZGF0YShmaWxwLCBhcmcpO1xuJiM0MztcbiBcdGRlZmF1bHQ6XG4gXHRcdHJldHVybiAtRU5PVFRZO1xuIFx0fVxuZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfaW9tYXAuYyBiL2ZzL3hmcy94ZnNfaW9tYXAuY1xuaW5kZXggMjI1YzNkZTg4ZDAzYjEuLmZiYTUxOTAyNDE2YjAyIDEwMDY0NFxuLS0tIGEvZnMveGZzL3hmc19pb21hcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy94ZnMveGZzX2lvbWFwLmNcbkBAIC0zMiw2ICYjNDM7MzIsOCBAQFxuICNpbmNsdWRlIFwmIzM0O3hmc19ydGJpdG1hcC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7eGZzX2ljYWNoZS5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7eGZzX3pvbmVfYWxsb2MuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDt4ZnNfZnN2ZXJpdHkuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9mc3Zlcml0eS5oXHUwMDNlXG4gXG4gI2RlZmluZSBYRlNfQUxMT0NfQUxJR04obXAsIG9mZikgXFxcbiBcdCgoKG9mZikgXHUwMDNlXHUwMDNlIG1wLVx1MDAzZW1fYWxsb2NzaXplX2xvZykgXHUwMDNjXHUwMDNjIG1wLVx1MDAzZW1fYWxsb2NzaXplX2xvZylcbkBAIC0xNTg5LDcgJiM0MzsxNTkxLDggQEAgeGZzX3pvbmVkX2J1ZmZlcmVkX3dyaXRlX2lvbWFwX2JlZ2luKFxuIFx0bG9mZl90XHRcdFx0Y291bnQsXG4gXHR1bnNpZ25lZFx0XHRmbGFncyxcbiBcdHN0cnVjdCBpb21hcFx0XHQqaW9tYXAsXG4tXHRzdHJ1Y3QgaW9tYXBcdFx0KnNyY21hcClcbiYjNDM7XHRzdHJ1Y3QgaW9tYXBcdFx0KnNyY21hcCxcbiYjNDM7XHR1MTZcdFx0XHRpb21hcF9mbGFncylcbiB7XG4gXHRzdHJ1Y3QgaW9tYXBfaXRlclx0Kml0ZXIgPVxuIFx0XHRjb250YWluZXJfb2YoaW9tYXAsIHN0cnVjdCBpb21hcF9pdGVyLCBpb21hcCk7XG5AQCAtMTU5OSw3ICYjNDM7MTYwMiw2IEBAIHhmc196b25lZF9idWZmZXJlZF93cml0ZV9pb21hcF9iZWdpbihcbiBcdHN0cnVjdCB4ZnNfbW91bnRcdCptcCA9IGlwLVx1MDAzZWlfbW91bnQ7XG4gXHR4ZnNfZmlsZW9mZl90XHRcdG9mZnNldF9mc2IgPSBYRlNfQl9UT19GU0JUKG1wLCBvZmZzZXQpO1xuIFx0eGZzX2ZpbGVvZmZfdFx0XHRlbmRfZnNiID0geGZzX2lvbWFwX2VuZF9mc2IobXAsIG9mZnNldCwgY291bnQpO1xuLVx0dTE2XHRcdFx0aW9tYXBfZmxhZ3MgPSBJT01BUF9GX1NIQVJFRDtcbiBcdHVuc2lnbmVkIGludFx0XHRsb2NrbW9kZSA9IFhGU19JTE9DS19FWENMO1xuIFx0eGZzX2ZpbGJsa3NfdFx0XHRjb3VudF9mc2I7XG4gXHR4ZnNfZXh0bGVuX3RcdFx0aW5kbGVuO1xuQEAgLTE2MDcsNiAmIzQzOzE2MDksOCBAQCB4ZnNfem9uZWRfYnVmZmVyZWRfd3JpdGVfaW9tYXBfYmVnaW4oXG4gXHRzdHJ1Y3QgeGZzX2lleHRfY3Vyc29yXHRpY3VyO1xuIFx0aW50XHRcdFx0ZXJyb3IgPSAwO1xuIFxuJiM0MztcdGlvbWFwX2ZsYWdzID0gaW9tYXBfZmxhZ3MgfCBJT01BUF9GX1NIQVJFRDtcbiYjNDM7XG4gXHRBU1NFUlQoIXhmc19nZXRfZXh0c3pfaGludChpcCkpO1xuIFx0QVNTRVJUKCEoZmxhZ3MgXHUwMDI2IElPTUFQX1VOU0hBUkUpKTtcbiBcdEFTU0VSVChhYyk7XG5AQCAtMTgwMyw5ICYjNDM7MTgwNywxMiBAQCB4ZnNfYnVmZmVyZWRfd3JpdGVfaW9tYXBfYmVnaW4oXG4gXHRpZiAoeGZzX2lzX3NodXRkb3duKG1wKSlcbiBcdFx0cmV0dXJuIC1FSU87XG4gXG4mIzQzO1x0aWYgKHhmc19pZmxhZ3NfdGVzdChpcCwgWEZTX1ZFUklUWV9DT05TVFJVQ1RJT04pKVxuJiM0MztcdFx0aW9tYXBfZmxhZ3MgfD0gSU9NQVBfRl9GU1ZFUklUWTtcbiYjNDM7XG4gXHRpZiAoeGZzX2lzX3pvbmVkX2lub2RlKGlwKSlcbiBcdFx0cmV0dXJuIHhmc196b25lZF9idWZmZXJlZF93cml0ZV9pb21hcF9iZWdpbihpbm9kZSwgb2Zmc2V0LFxuLVx0XHRcdFx0Y291bnQsIGZsYWdzLCBpb21hcCwgc3JjbWFwKTtcbiYjNDM7XHRcdFx0XHRjb3VudCwgZmxhZ3MsIGlvbWFwLCBzcmNtYXAsIGlvbWFwX2ZsYWdzKTtcbiBcbiBcdC8qIHdlIGNhbiYjMzk7dCB1c2UgZGVsYXllZCBhbGxvY2F0aW9ucyB3aGVuIHVzaW5nIGV4dGVudCBzaXplIGhpbnRzICovXG4gXHRpZiAoeGZzX2dldF9leHRzel9oaW50KGlwKSlcbkBAIC0yMTkxLDEyICYjNDM7MjE5OCwxNyBAQCB4ZnNfcmVhZF9pb21hcF9iZWdpbihcbiBcdGJvb2xcdFx0XHRzaGFyZWQgPSBmYWxzZTtcbiBcdHVuc2lnbmVkIGludFx0XHRsb2NrbW9kZSA9IFhGU19JTE9DS19TSEFSRUQ7XG4gXHR1NjRcdFx0XHRzZXE7XG4mIzQzO1x0dW5zaWduZWQgaW50XHRcdGlvbWFwX2ZsYWdzID0gMDtcbiBcbiBcdEFTU0VSVCghKGZsYWdzIFx1MDAyNiAoSU9NQVBfV1JJVEUgfCBJT01BUF9aRVJPKSkpO1xuIFxuIFx0aWYgKHhmc19pc19zaHV0ZG93bihtcCkpXG4gXHRcdHJldHVybiAtRUlPO1xuIFxuJiM0MztcdGlmIChmc3Zlcml0eV9hY3RpdmUoaW5vZGUpIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAob2Zmc2V0IFx1MDAzZT0geGZzX2ZzdmVyaXR5X21ldGFkYXRhX29mZnNldChpcCkpKVxuJiM0MztcdFx0aW9tYXBfZmxhZ3MgfD0gSU9NQVBfRl9GU1ZFUklUWTtcbiYjNDM7XG4gXHRlcnJvciA9IHhmc19pbG9ja19mb3JfaW9tYXAoaXAsIGZsYWdzLCBcdTAwMjZsb2NrbW9kZSk7XG4gXHRpZiAoZXJyb3IpXG4gXHRcdHJldHVybiBlcnJvcjtcbkBAIC0yMjEwLDggJiM0MzsyMjIyLDkgQEAgeGZzX3JlYWRfaW9tYXBfYmVnaW4oXG4gXHRpZiAoZXJyb3IpXG4gXHRcdHJldHVybiBlcnJvcjtcbiBcdHRyYWNlX3hmc19pb21hcF9mb3VuZChpcCwgb2Zmc2V0LCBsZW5ndGgsIFhGU19EQVRBX0ZPUkssIFx1MDAyNmltYXApO1xuLVx0cmV0dXJuIHhmc19ibWJ0X3RvX2lvbWFwKGlwLCBpb21hcCwgXHUwMDI2aW1hcCwgZmxhZ3MsXG4tXHRcdFx0XHQgc2hhcmVkID8gSU9NQVBfRl9TSEFSRUQgOiAwLCBzZXEpO1xuJiM0MztcdGlvbWFwX2ZsYWdzIHw9IHNoYXJlZCA/IElPTUFQX0ZfU0hBUkVEIDogMDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHhmc19ibWJ0X3RvX2lvbWFwKGlwLCBpb21hcCwgXHUwMDI2aW1hcCwgZmxhZ3MsIGlvbWFwX2ZsYWdzLCBzZXEpO1xuIH1cbiBcbiBjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzIHhmc19yZWFkX2lvbWFwX29wcyA9IHtcbmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2lvcHMuYyBiL2ZzL3hmcy94ZnNfaW9wcy5jXG5pbmRleCA2MzM5ZjQ5NTZlY2IzOS4uNzA2MzdjZGNjMjk5NzIgMTAwNjQ0XG4tLS0gYS9mcy94ZnMveGZzX2lvcHMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMveGZzL3hmc19pb3BzLmNcbkBAIC0zNSw2ICYjNDM7MzUsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NlY3VyaXR5LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pdmVyc2lvbi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZmllbWFwLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvZnN2ZXJpdHkuaFx1MDAzZVxuIFxuIC8qXG4gICogRGlyZWN0b3JpZXMgaGF2ZSBkaWZmZXJlbnQgbG9jayBvcmRlciB3LnIudC4gbW1hcF9sb2NrIGNvbXBhcmVkIHRvIHJlZ3VsYXJcbkBAIC01ODAsNiAmIzQzOzU4MSwxMCBAQCB4ZnNfcmVwb3J0X2Rpb2FsaWduKFxuIFx0c3RydWN0IGJsb2NrX2RldmljZVx0KmJkZXYgPSB0YXJnZXQtXHUwMDNlYnRfYmRldjtcbiBcbiBcdHN0YXQtXHUwMDNlcmVzdWx0X21hc2sgfD0gU1RBVFhfRElPQUxJR04gfCBTVEFUWF9ESU9fUkVBRF9BTElHTjtcbiYjNDM7XG4mIzQzO1x0aWYgKGZzdmVyaXR5X2FjdGl2ZShWRlNfSShpcCkpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiBcdHN0YXQtXHUwMDNlZGlvX21lbV9hbGlnbiA9IGJkZXZfZG1hX2FsaWdubWVudChiZGV2KSAmIzQzOyAxO1xuIFxuIFx0LypcbkBAIC0xMzcwLDYgJiM0MzsxMzc1LDggQEAgeGZzX2lub2RlX3Nob3VsZF9lbmFibGVfZGF4KFxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXHRpZiAoIXhmc19pbm9kZV9zdXBwb3J0c19kYXgoaXApKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0aWYgKGlwLVx1MDAzZWlfZGlmbGFnczIgXHUwMDI2IFhGU19ESUZMQUcyX1ZFUklUWSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiBcdGlmICh4ZnNfaGFzX2RheF9hbHdheXMoaXAtXHUwMDNlaV9tb3VudCkpXG4gXHRcdHJldHVybiB0cnVlO1xuIFx0aWYgKGlwLVx1MDAzZWlfZGlmbGFnczIgXHUwMDI2IFhGU19ESUZMQUcyX0RBWClcbkBAIC0xMzk4LDEyICYjNDM7MTQwNSwxNSBAQCB4ZnNfZGlmbGFnc190b19pZmxhZ3MoXG4gXHRcdGZsYWdzIHw9IFNfTk9BVElNRTtcbiBcdGlmIChpbml0IFx1MDAyNlx1MDAyNiB4ZnNfaW5vZGVfc2hvdWxkX2VuYWJsZV9kYXgoaXApKVxuIFx0XHRmbGFncyB8PSBTX0RBWDtcbiYjNDM7XHRpZiAoeGZsYWdzIFx1MDAyNiBGU19YRkxBR19WRVJJVFkpXG4mIzQzO1x0XHRmbGFncyB8PSBTX1ZFUklUWTtcbiBcbiBcdC8qXG4gXHQgKiBTX0RBWCBjYW4gb25seSBiZSBzZXQgZHVyaW5nIGlub2RlIGluaXRpYWxpemF0aW9uIGFuZCBpcyBuZXZlciBzZXQgYnlcbiBcdCAqIHRoZSBWRlMsIHNvIHdlIGNhbm5vdCBtYXNrIG9mZiBTX0RBWCBpbiBpX2ZsYWdzLlxuIFx0ICovXG4tXHRpbm9kZS1cdTAwM2VpX2ZsYWdzIFx1MDAyNj0gfihTX0lNTVVUQUJMRSB8IFNfQVBQRU5EIHwgU19TWU5DIHwgU19OT0FUSU1FKTtcbiYjNDM7XHRpbm9kZS1cdTAwM2VpX2ZsYWdzIFx1MDAyNj1cbiYjNDM7XHRcdH4oU19JTU1VVEFCTEUgfCBTX0FQUEVORCB8IFNfU1lOQyB8IFNfTk9BVElNRSB8IFNfVkVSSVRZKTtcbiBcdGlub2RlLVx1MDAzZWlfZmxhZ3MgfD0gZmxhZ3M7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfbWVzc2FnZS5jIGIvZnMveGZzL3hmc19tZXNzYWdlLmNcbmluZGV4IDAyNDNlNTA5YTQ2ODkxLi40NGIxM2Q0NjA0OWM2MiAxMDA2NDRcbi0tLSBhL2ZzL3hmcy94ZnNfbWVzc2FnZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy94ZnMveGZzX21lc3NhZ2UuY1xuQEAgLTE0OSw2ICYjNDM7MTQ5LDEwIEBAIHhmc193YXJuX2V4cGVyaW1lbnRhbChcbiBcdFx0XHQub3BzdGF0ZVx0PSBYRlNfT1BTVEFURV9XQVJORURfTEFSUCxcbiBcdFx0XHQubmFtZVx0XHQ9IFwmIzM0O2xvZ2dlZCBleHRlbmRlZCBhdHRyaWJ1dGVzXCYjMzQ7LFxuIFx0XHR9LFxuJiM0MztcdFx0W1hGU19FWFBFUklNRU5UQUxfRlNWRVJJVFldID0ge1xuJiM0MztcdFx0XHQub3BzdGF0ZVx0PSBYRlNfT1BTVEFURV9XQVJORURfRlNWRVJJVFksXG4mIzQzO1x0XHRcdC5uYW1lXHRcdD0gXCYjMzQ7ZnN2ZXJpdHlcJiMzNDssXG4mIzQzO1x0XHR9LFxuIFx0fTtcbiBcdEFTU0VSVChmZWF0IFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgZmVhdCBcdTAwM2MgWEZTX0VYUEVSSU1FTlRBTF9NQVgpO1xuIFx0QlVJTERfQlVHX09OKEFSUkFZX1NJWkUoZmVhdHVyZXMpICE9IFhGU19FWFBFUklNRU5UQUxfTUFYKTtcbmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX21lc3NhZ2UuaCBiL2ZzL3hmcy94ZnNfbWVzc2FnZS5oXG5pbmRleCA4MTFiODg1ZjQxYzM1YS4uMzY0ZmNjN2U0MmIwODQgMTAwNjQ0XG4tLS0gYS9mcy94ZnMveGZzX21lc3NhZ2UuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZnMveGZzL3hmc19tZXNzYWdlLmhcbkBAIC05Myw2ICYjNDM7OTMsNyBAQCB2b2lkIHhmc19idWZfYWxlcnRfcmF0ZWxpbWl0ZWQoc3RydWN0IHhmc19idWYgKmJwLCBjb25zdCBjaGFyICpybG1zZyxcbiBlbnVtIHhmc19leHBlcmltZW50YWxfZmVhdCB7XG4gXHRYRlNfRVhQRVJJTUVOVEFMX1NIUklOSyxcbiBcdFhGU19FWFBFUklNRU5UQUxfTEFSUCxcbiYjNDM7XHRYRlNfRVhQRVJJTUVOVEFMX0ZTVkVSSVRZLFxuIFxuIFx0WEZTX0VYUEVSSU1FTlRBTF9NQVgsXG4gfTtcbmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX21vdW50LmggYi9mcy94ZnMveGZzX21vdW50LmhcbmluZGV4IDY2YTAyZDFiOWFkN2ExLi44NzVjOWIwZjhlOTkxZiAxMDA2NDRcbi0tLSBhL2ZzL3hmcy94ZnNfbW91bnQuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZnMveGZzL3hmc19tb3VudC5oXG5AQCAtMzg4LDYgJiM0MzszODgsNyBAQCB0eXBlZGVmIHN0cnVjdCB4ZnNfbW91bnQge1xuICNkZWZpbmUgWEZTX0ZFQVRfRVhDSEFOR0VfUkFOR0VcdCgxVUxMIFx1MDAzY1x1MDAzYyAyNylcdC8qIGV4Y2hhbmdlIHJhbmdlICovXG4gI2RlZmluZSBYRlNfRkVBVF9NRVRBRElSXHQoMVVMTCBcdTAwM2NcdTAwM2MgMjgpXHQvKiBtZXRhZGF0YSBkaXJlY3RvcnkgdHJlZSAqL1xuICNkZWZpbmUgWEZTX0ZFQVRfWk9ORURcdFx0KDFVTEwgXHUwMDNjXHUwMDNjIDI5KVx0Lyogem9uZWQgUlQgZGV2aWNlICovXG4mIzQzOyNkZWZpbmUgWEZTX0ZFQVRfVkVSSVRZXHRcdCgxVUxMIFx1MDAzY1x1MDAzYyAzMClcdC8qIGZzLXZlcml0eSAqL1xuIFxuIC8qIE1vdW50IGZlYXR1cmVzICovXG4gI2RlZmluZSBYRlNfRkVBVF9OT0xJRkVUSU1FXHQoMVVMTCBcdTAwM2NcdTAwM2MgNDcpXHQvKiBkaXNhYmxlIGxpZmV0aW1lIGhpbnRzICovXG5AQCAtNDQ1LDYgJiM0Mzs0NDYsNyBAQCBfX1hGU19IQVNfRkVBVChleGNoYW5nZV9yYW5nZSwgRVhDSEFOR0VfUkFOR0UpXG4gX19YRlNfSEFTX0ZFQVQobWV0YWRpciwgTUVUQURJUilcbiBfX1hGU19IQVNfRkVBVCh6b25lZCwgWk9ORUQpXG4gX19YRlNfSEFTX0ZFQVQobm9saWZldGltZSwgTk9MSUZFVElNRSlcbiYjNDM7X19YRlNfSEFTX0ZFQVQodmVyaXR5LCBWRVJJVFkpXG4gXG4gc3RhdGljIGlubGluZSBib29sIHhmc19oYXNfcnRncm91cHMoY29uc3Qgc3RydWN0IHhmc19tb3VudCAqbXApXG4ge1xuQEAgLTU4Miw2ICYjNDM7NTg0LDggQEAgX19YRlNfSEFTX0ZFQVQobm91dWlkLCBOT1VVSUQpXG4gI2RlZmluZSBYRlNfT1BTVEFURV9SRVNVTUlOR19RVU9UQU9OXHQxOFxuIC8qIChab25lZCkgR0MgaXMgaW4gcHJvZ3Jlc3MgKi9cbiAjZGVmaW5lIFhGU19PUFNUQVRFX1pPTkVHQ19SVU5OSU5HXHQyMFxuJiM0MzsvKiBLZXJuZWwgaGFzIGxvZ2dlZCBhIHdhcm5pbmcgYWJvdXQgZnN2ZXJpdHkgc3VwcG9ydCAqL1xuJiM0MzsjZGVmaW5lIFhGU19PUFNUQVRFX1dBUk5FRF9GU1ZFUklUWVx0MjFcbiBcbiAjZGVmaW5lIF9fWEZTX0lTX09QU1RBVEUobmFtZSwgTkFNRSkgXFxcbiBzdGF0aWMgaW5saW5lIGJvb2wgeGZzX2lzXyAjIyBuYW1lIChzdHJ1Y3QgeGZzX21vdW50ICptcCkgXFxcbmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX3N1cGVyLmMgYi9mcy94ZnMveGZzX3N1cGVyLmNcbmluZGV4IDg1MzFkNTI2ZmM0NDA5Li5hNzc3NGQyZDZiMjNmYyAxMDA2NDRcbi0tLSBhL2ZzL3hmcy94ZnNfc3VwZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMveGZzL3hmc19zdXBlci5jXG5AQCAtMzAsNiAmIzQzOzMwLDcgQEBcbiAjaW5jbHVkZSBcJiMzNDt4ZnNfZmlsZXN0cmVhbS5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7eGZzX3F1b3RhLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDt4ZnNfc3lzZnMuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDt4ZnNfZnN2ZXJpdHkuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3hmc19vbmRpc2suaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3hmc19ybWFwX2l0ZW0uaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3hmc19yZWZjb3VudF9pdGVtLmhcJiMzNDtcbkBAIC0xNjg5LDYgJiM0MzsxNjkwLDkgQEAgeGZzX2ZzX2ZpbGxfc3VwZXIoXG4gXHRzYi1cdTAwM2VzX3F1b3RhX3R5cGVzID0gUVRZUEVfTUFTS19VU1IgfCBRVFlQRV9NQVNLX0dSUCB8IFFUWVBFX01BU0tfUFJKO1xuICNlbmRpZlxuIFx0c2ItXHUwMDNlc19vcCA9IFx1MDAyNnhmc19zdXBlcl9vcGVyYXRpb25zO1xuJiM0MzsjaWZkZWYgQ09ORklHX0ZTX1ZFUklUWVxuJiM0MztcdHNiLVx1MDAzZXNfdm9wID0gXHUwMDI2eGZzX2ZzdmVyaXR5X29wcztcbiYjNDM7I2VuZGlmXG4gXG4gXHQvKlxuIFx0ICogRGVsYXkgbW91bnQgd29yayBpZiB0aGUgZGVidWcgaG9vayBpcyBzZXQuIFRoaXMgaXMgZGVidWdcbkBAIC0xOTQxLDYgJiM0MzsxOTQ1LDkgQEAgeGZzX2ZzX2ZpbGxfc3VwZXIoXG4gXHRpZiAoZXJyb3IpXG4gXHRcdGdvdG8gb3V0X2ZpbGVzdHJlYW1fdW5tb3VudDtcbiBcbiYjNDM7XHRpZiAoeGZzX2hhc192ZXJpdHkobXApKVxuJiM0MztcdFx0eGZzX3dhcm5fZXhwZXJpbWVudGFsKG1wLCBYRlNfRVhQRVJJTUVOVEFMX0ZTVkVSSVRZKTtcbiYjNDM7XG4gXHRyb290ID0gaWdyYWIoVkZTX0kobXAtXHUwMDNlbV9yb290aXApKTtcbiBcdGlmICghcm9vdCkge1xuIFx0XHRlcnJvciA9IC1FTk9FTlQ7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mc3Zlcml0eS5oIGIvaW5jbHVkZS9saW51eC9mc3Zlcml0eS5oXG5pbmRleCA2YzQ2N2RlZDk3NTFmYy4uZjk0MzMzMzJjMjc0YmIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2ZzdmVyaXR5LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvZnN2ZXJpdHkuaFxuQEAgLTEyNCw2ICYjNDM7MTI0LDggQEAgc3RydWN0IGZzdmVyaXR5X29wZXJhdGlvbnMge1xuIFx0ICogQGJ1ZjogdGhlIE1lcmtsZSB0cmVlIGJsb2NrIHRvIHdyaXRlXG4gXHQgKiBAcG9zOiB0aGUgcG9zaXRpb24gb2YgdGhlIGJsb2NrIGluIHRoZSBNZXJrbGUgdHJlZSAoaW4gYnl0ZXMpXG4gXHQgKiBAc2l6ZTogdGhlIE1lcmtsZSB0cmVlIGJsb2NrIHNpemUgKGluIGJ5dGVzKVxuJiM0MztcdCAqIEB6ZXJvX2RpZ2VzdDogdGhlIGhhc2ggb2YgdGhlIGFsbC16ZXJvZXMgYmxvY2tcbiYjNDM7XHQgKiBAZGlnZXN0X3NpemU6IHNpemUgb2YgemVyb19kaWdlc3QsIGluIGJ5dGVzXG4gXHQgKlxuIFx0ICogVGhpcyBpcyBvbmx5IGNhbGxlZCBiZXR3ZWVuIC1cdTAwM2ViZWdpbl9lbmFibGVfdmVyaXR5KCkgYW5kXG4gXHQgKiAtXHUwMDNlZW5kX2VuYWJsZV92ZXJpdHkoKS5cbkBAIC0xMzEsNyAmIzQzOzEzMyw5IEBAIHN0cnVjdCBmc3Zlcml0eV9vcGVyYXRpb25zIHtcbiBcdCAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAtZXJybm8gb24gZmFpbHVyZVxuIFx0ICovXG4gXHRpbnQgKCp3cml0ZV9tZXJrbGVfdHJlZV9ibG9jaykoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IHZvaWQgKmJ1Zixcbi1cdFx0XHRcdCAgICAgICB1NjQgcG9zLCB1bnNpZ25lZCBpbnQgc2l6ZSk7XG4mIzQzO1x0XHRcdFx0ICAgICAgIHU2NCBwb3MsIHVuc2lnbmVkIGludCBzaXplLFxuJiM0MztcdFx0XHRcdCAgICAgICBjb25zdCB1OCAqemVyb19kaWdlc3QsXG4mIzQzO1x0XHRcdFx0ICAgICAgIHVuc2lnbmVkIGludCBkaWdlc3Rfc2l6ZSk7XG4gfTtcbiBcbiAjaWZkZWYgQ09ORklHX0ZTX1ZFUklUWVxuQEAgLTMxNywxMCAmIzQzOzMyMSwxNCBAQCBzdGF0aWMgaW5saW5lIGludCBmc3Zlcml0eV9maWxlX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO2ludCBmc3Zlcml0eV9lbnN1cmVfdmVyaXR5X2luZm8oc3RydWN0IGlub2RlICppbm9kZSk7XG4mIzQzO1xuIHZvaWQgZnN2ZXJpdHlfY2xlYW51cF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbiBcbiBzdHJ1Y3QgcGFnZSAqZ2VuZXJpY19yZWFkX21lcmtsZV90cmVlX3BhZ2Uoc3RydWN0IGlub2RlICppbm9kZSwgcGdvZmZfdCBpbmRleCk7XG4gdm9pZCBnZW5lcmljX3JlYWRhaGVhZF9tZXJrbGVfdHJlZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IGluZGV4LFxuIFx0XHRcdFx0ICAgdW5zaWduZWQgbG9uZyBucl9wYWdlcyk7XG4mIzQzO2ludCBmc3Zlcml0eV9wYWdlY2FjaGVfcmVhZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCB2b2lkICpidWYsIHNpemVfdCBjb3VudCxcbiYjNDM7XHRcdFx0ICAgIGxvZmZfdCBwb3MpO1xuIFxuICNlbmRpZlx0LyogX0xJTlVYX0ZTVkVSSVRZX0ggKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAwNDoxOTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtGU19WRVJJVFkmIzM0OywKICAgICYjMzQ7WEZTX0ZTJiMzNDssCiAgICAmIzM0O1hGU19PTkxJTkVfU0NSVUImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt4ZnNfZnN2ZXJpdHlfYmVnaW5fZW5hYmxlJiMzNDssCiAgICAmIzM0O3hmc19mc3Zlcml0eV9lbmRfZW5hYmxlJiMzNDssCiAgICAmIzM0O3hmc19mc3Zlcml0eV9nZXRfZGVzY3JpcHRvciYjMzQ7LAogICAgJiMzNDt4ZnNfZnN2ZXJpdHlfd3JpdGVfZGVzY3JpcHRvciYjMzQ7LAogICAgJiMzNDt4ZnNfZnN2ZXJpdHlfZGVsZXRlX21ldGFkYXRhJiMzNDssCiAgICAmIzM0O3hmc19mc3Zlcml0eV9jYW5jZWxfdW53cml0dGVuJiMzNDssCiAgICAmIzM0O3hmc19mc3Zlcml0eV9yZWFkX21lcmtsZSYjMzQ7LAogICAgJiMzNDt4ZnNfZnN2ZXJpdHlfcmVhZGFoZWFkX21lcmtsZV90cmVlJiMzNDssCiAgICAmIzM0O3hmc19mc3Zlcml0eV93cml0ZV9tZXJrbGUmIzM0OywKICAgICYjMzQ7ZnN2ZXJpdHlfcGFnZWNhY2hlX3JlYWQmIzM0OywKICAgICYjMzQ7eGNoa19pbm9kZV9zZXR1cF92ZXJpdHkmIzM0OywKICAgICYjMzQ7eGNoa19pbm9kZV92ZXJpdHlfYnJva2VuJiMzNDssCiAgICAmIzM0O3hyZXBfaW5vZGVfdmVyaXR5JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhpcyBwYXRjaCBzZXJpZXMgaW1wbGVtZW50cyBmcy12ZXJpdHkgc3VwcG9ydCBmb3IgdGhlIFhGUyBmaWxlc3lzdGVtLiBJdCBpbnRyb2R1Y2VzIG5ldyBtZXRhZGF0YSBoYW5kbGluZywgaW9jdGwgb3BlcmF0aW9ucywgYW5kIGludGVncmF0aW9uIHdpdGggWEZTJiMzOTtzIGlvbWFwIGFuZCBzY3J1YiBpbmZyYXN0cnVjdHVyZS4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgYWRkaXRpb24gdG8gYSBjb3JlIGZpbGVzeXN0ZW0gYW5kIHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCB0byBlbnN1cmUgZGF0YSBpbnRlZ3JpdHkgYW5kIHByZXZlbnQgdnVsbmVyYWJpbGl0aWVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA1ODIyZDFjYjFlZDgyODc5OTY4MWU2Mzc0NzIzN2UzNjk1YzM4NzQxCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBKdWwgMTEgMDQ6MTk6MDUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9idHJmcy92ZXJpdHkuYyBiL2ZzL2J0cmZzL3Zlcml0eS5jCmluZGV4IDk4MzM2NWE3MzU0MTY4Li5iZDc5ZTM0M2FlMjM3ZiAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvdmVyaXR5LmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvYnRyZnMvdmVyaXR5LmMKQEAgLTc3MywxMSAmIzQzOzc3MywxNSBAQCBzdGF0aWMgc3RydWN0IHBhZ2UgKmJ0cmZzX3JlYWRfbWVya2xlX3RyZWVfcGFnZShzdHJ1Y3QgaW5vZGUgKmlub2RlLAogICogQGJ1ZjoJTWVya2xlIHRyZWUgYmxvY2sgdG8gd3JpdGUKICAqIEBwb3M6CXRoZSBwb3NpdGlvbiBvZiB0aGUgYmxvY2sgaW4gdGhlIE1lcmtsZSB0cmVlIChpbiBieXRlcykKICAqIEBzaXplOgl0aGUgTWVya2xlIHRyZWUgYmxvY2sgc2l6ZSAoaW4gYnl0ZXMpCiYjNDM7ICogQHplcm9fZGlnZXN0Ogl0aGUgaGFzaCBvZiB0aGUgYWxsLXplcm9lcyBibG9jawomIzQzOyAqIEBkaWdlc3Rfc2l6ZToJc2l6ZSBvZiB6ZXJvX2RpZ2VzdCwgaW4gYnl0ZXMKICAqCiAgKiBSZXR1cm5zIDAgb24gc3VjY2VzcyBvciBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUKICAqLwogc3RhdGljIGludCBidHJmc193cml0ZV9tZXJrbGVfdHJlZV9ibG9jayhzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3Qgdm9pZCAqYnVmLAotCQkJCQkgdTY0IHBvcywgdW5zaWduZWQgaW50IHNpemUpCiYjNDM7CQkJCQkgdTY0IHBvcywgdW5zaWduZWQgaW50IHNpemUsCiYjNDM7CQkJCQkgY29uc3QgdTggKnplcm9fZGlnZXN0LAomIzQzOwkJCQkJIHVuc2lnbmVkIGludCBkaWdlc3Rfc2l6ZSkKIHsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZV9pbm9kZShmaWxlKTsKIAlsb2ZmX3QgbWVya2xlX3BvcyA9IG1lcmtsZV9maWxlX3Bvcyhpbm9kZSk7CmRpZmYgLS1naXQgYS9mcy9leHQ0L3Zlcml0eS5jIGIvZnMvZXh0NC92ZXJpdHkuYwppbmRleCBjYTYxZGE1M2YzMTNmYS4uYWM1YzEzM2Y1NTI5MjUgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvdmVyaXR5LmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0NC92ZXJpdHkuYwpAQCAtMzQsMzIgJiM0MzszNCw2IEBAIHN0YXRpYyBpbmxpbmUgbG9mZl90IGV4dDRfdmVyaXR5X21ldGFkYXRhX3Bvcyhjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlKQogCXJldHVybiByb3VuZF91cChpbm9kZS0mZ3Q7aV9zaXplLCA2NTUzNik7CiB9CiAKLS8qCi0gKiBSZWFkIHNvbWUgdmVyaXR5IG1ldGFkYXRhIGZyb20gdGhlIGlub2RlLiAgX192ZnNfcmVhZCgpIGNhbiYjMzk7dCBiZSB1c2VkIGJlY2F1c2UKLSAqIHdlIG5lZWQgdG8gcmVhZCBiZXlvbmQgaV9zaXplLgotICovCi1zdGF0aWMgaW50IHBhZ2VjYWNoZV9yZWFkKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHZvaWQgKmJ1Ziwgc2l6ZV90IGNvdW50LAotCQkJICBsb2ZmX3QgcG9zKQotewotCXdoaWxlIChjb3VudCkgewotCQlzdHJ1Y3QgZm9saW8gKmZvbGlvOwotCQlzaXplX3QgbjsKLQotCQlmb2xpbyA9IHJlYWRfbWFwcGluZ19mb2xpbyhpbm9kZS0mZ3Q7aV9tYXBwaW5nLCBwb3MgJmd0OyZndDsgUEFHRV9TSElGVCwKLQkJCQkJIE5VTEwpOwotCQlpZiAoSVNfRVJSKGZvbGlvKSkKLQkJCXJldHVybiBQVFJfRVJSKGZvbGlvKTsKLQotCQluID0gbWVtY3B5X2Zyb21fZmlsZV9mb2xpbyhidWYsIGZvbGlvLCBwb3MsIGNvdW50KTsKLQkJZm9saW9fcHV0KGZvbGlvKTsKLQotCQlidWYgJiM0Mzs9IG47Ci0JCXBvcyAmIzQzOz0gbjsKLQkJY291bnQgLT0gbjsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KIC8qCiAgKiBXcml0ZSBzb21lIHZlcml0eSBtZXRhZGF0YSB0byB0aGUgaW5vZGUgZm9yIEZTX0lPQ19FTkFCTEVfVkVSSVRZLgogICoga2VybmVsX3dyaXRlKCkgY2FuJiMzOTt0IGJlIHVzZWQgYmVjYXVzZSB0aGUgZmlsZSBkZXNjcmlwdG9yIGlzIHJlYWRvbmx5LgpAQCAtMzExLDggJiM0MzsyODUsOCBAQCBzdGF0aWMgaW50IGV4dDRfZ2V0X3Zlcml0eV9kZXNjcmlwdG9yX2xvY2F0aW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCWdvdG8gYmFkOwogCWRlc2Nfc2l6ZV9wb3MgLT0gc2l6ZW9mKGRlc2Nfc2l6ZV9kaXNrKTsKIAotCWVyciA9IHBhZ2VjYWNoZV9yZWFkKGlub2RlLCAmYW1wO2Rlc2Nfc2l6ZV9kaXNrLCBzaXplb2YoZGVzY19zaXplX2Rpc2spLAotCQkJICAgICBkZXNjX3NpemVfcG9zKTsKJiM0MzsJZXJyID0gZnN2ZXJpdHlfcGFnZWNhY2hlX3JlYWQoaW5vZGUsICZhbXA7ZGVzY19zaXplX2Rpc2ssCiYjNDM7CQkJCSAgICAgIHNpemVvZihkZXNjX3NpemVfZGlzayksIGRlc2Nfc2l6ZV9wb3MpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAJZGVzY19zaXplID0gbGUzMl90b19jcHUoZGVzY19zaXplX2Rpc2spOwpAQCAtMzUyLDcgJiM0MzszMjYsNyBAQCBzdGF0aWMgaW50IGV4dDRfZ2V0X3Zlcml0eV9kZXNjcmlwdG9yKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHZvaWQgKmJ1ZiwKIAlpZiAoYnVmX3NpemUpIHsKIAkJaWYgKGRlc2Nfc2l6ZSAmZ3Q7IGJ1Zl9zaXplKQogCQkJcmV0dXJuIC1FUkFOR0U7Ci0JCWVyciA9IHBhZ2VjYWNoZV9yZWFkKGlub2RlLCBidWYsIGRlc2Nfc2l6ZSwgZGVzY19wb3MpOwomIzQzOwkJZXJyID0gZnN2ZXJpdHlfcGFnZWNhY2hlX3JlYWQoaW5vZGUsIGJ1ZiwgZGVzY19zaXplLCBkZXNjX3Bvcyk7CiAJCWlmIChlcnIpCiAJCQlyZXR1cm4gZXJyOwogCX0KQEAgLTM3NCw3ICYjNDM7MzQ4LDkgQEAgc3RhdGljIHZvaWQgZXh0NF9yZWFkYWhlYWRfbWVya2xlX3RyZWUoc3RydWN0IGlub2RlICppbm9kZSwgcGdvZmZfdCBpbmRleCwKIH0KIAogc3RhdGljIGludCBleHQ0X3dyaXRlX21lcmtsZV90cmVlX2Jsb2NrKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCB2b2lkICpidWYsCi0JCQkJCXU2NCBwb3MsIHVuc2lnbmVkIGludCBzaXplKQomIzQzOwkJCQkJdTY0IHBvcywgdW5zaWduZWQgaW50IHNpemUsCiYjNDM7CQkJCQljb25zdCB1OCAqemVyb19kaWdlc3QsCiYjNDM7CQkJCQl1bnNpZ25lZCBpbnQgZGlnZXN0X3NpemUpCiB7CiAJcG9zICYjNDM7PSBleHQ0X3Zlcml0eV9tZXRhZGF0YV9wb3MoZmlsZV9pbm9kZShmaWxlKSk7CiAKZGlmZiAtLWdpdCBhL2ZzL2YyZnMvdmVyaXR5LmMgYi9mcy9mMmZzL3Zlcml0eS5jCmluZGV4IDM5ZjQ4MjUxNTQ0NTJhLi5mM2E0NjE3NjU2ZGI5YiAxMDA2NDQKLS0tIGEvZnMvZjJmcy92ZXJpdHkuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9mMmZzL3Zlcml0eS5jCkBAIC0zNywzNCAmIzQzOzM3LDYgQEAgc3RhdGljIGlubGluZSBsb2ZmX3QgZjJmc192ZXJpdHlfbWV0YWRhdGFfcG9zKGNvbnN0IHN0cnVjdCBpbm9kZSAqaW5vZGUpCiAJcmV0dXJuIHJvdW5kX3VwKGlub2RlLSZndDtpX3NpemUsIDY1NTM2KTsKIH0KIAotLyoKLSAqIFJlYWQgc29tZSB2ZXJpdHkgbWV0YWRhdGEgZnJvbSB0aGUgaW5vZGUuICBfX3Zmc19yZWFkKCkgY2FuJiMzOTt0IGJlIHVzZWQgYmVjYXVzZQotICogd2UgbmVlZCB0byByZWFkIGJleW9uZCBpX3NpemUuCi0gKi8KLXN0YXRpYyBpbnQgcGFnZWNhY2hlX3JlYWQoc3RydWN0IGlub2RlICppbm9kZSwgdm9pZCAqYnVmLCBzaXplX3QgY291bnQsCi0JCQkgIGxvZmZfdCBwb3MpCi17Ci0Jd2hpbGUgKGNvdW50KSB7Ci0JCXNpemVfdCBuID0gbWluX3Qoc2l6ZV90LCBjb3VudCwKLQkJCQkgUEFHRV9TSVpFIC0gb2Zmc2V0X2luX3BhZ2UocG9zKSk7Ci0JCXN0cnVjdCBwYWdlICpwYWdlOwotCi0JCXBhZ2UgPSByZWFkX21hcHBpbmdfcGFnZShpbm9kZS0mZ3Q7aV9tYXBwaW5nLCBwb3MgJmd0OyZndDsgUEFHRV9TSElGVCwKLQkJCQkJIE5VTEwpOwotCQlpZiAoSVNfRVJSKHBhZ2UpKQotCQkJcmV0dXJuIFBUUl9FUlIocGFnZSk7Ci0KLQkJbWVtY3B5X2Zyb21fcGFnZShidWYsIHBhZ2UsIG9mZnNldF9pbl9wYWdlKHBvcyksIG4pOwotCi0JCXB1dF9wYWdlKHBhZ2UpOwotCi0JCWJ1ZiAmIzQzOz0gbjsKLQkJcG9zICYjNDM7PSBuOwotCQljb3VudCAtPSBuOwotCX0KLQlyZXR1cm4gMDsKLX0KLQogLyoKICAqIFdyaXRlIHNvbWUgdmVyaXR5IG1ldGFkYXRhIHRvIHRoZSBpbm9kZSBmb3IgRlNfSU9DX0VOQUJMRV9WRVJJVFkuCiAgKiBrZXJuZWxfd3JpdGUoKSBjYW4mIzM5O3QgYmUgdXNlZCBiZWNhdXNlIHRoZSBmaWxlIGRlc2NyaXB0b3IgaXMgcmVhZG9ubHkuCkBAIC0yNTAsNyAmIzQzOzIyMiw3IEBAIHN0YXRpYyBpbnQgZjJmc19nZXRfdmVyaXR5X2Rlc2NyaXB0b3Ioc3RydWN0IGlub2RlICppbm9kZSwgdm9pZCAqYnVmLAogCWlmIChidWZfc2l6ZSkgewogCQlpZiAoc2l6ZSAmZ3Q7IGJ1Zl9zaXplKQogCQkJcmV0dXJuIC1FUkFOR0U7Ci0JCXJlcyA9IHBhZ2VjYWNoZV9yZWFkKGlub2RlLCBidWYsIHNpemUsIHBvcyk7CiYjNDM7CQlyZXMgPSBmc3Zlcml0eV9wYWdlY2FjaGVfcmVhZChpbm9kZSwgYnVmLCBzaXplLCBwb3MpOwogCQlpZiAocmVzKQogCQkJcmV0dXJuIHJlczsKIAl9CkBAIC0yNzIsNyAmIzQzOzI0NCw5IEBAIHN0YXRpYyB2b2lkIGYyZnNfcmVhZGFoZWFkX21lcmtsZV90cmVlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHBnb2ZmX3QgaW5kZXgsCiB9CiAKIHN0YXRpYyBpbnQgZjJmc193cml0ZV9tZXJrbGVfdHJlZV9ibG9jayhzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3Qgdm9pZCAqYnVmLAotCQkJCQl1NjQgcG9zLCB1bnNpZ25lZCBpbnQgc2l6ZSkKJiM0MzsJCQkJCXU2NCBwb3MsIHVuc2lnbmVkIGludCBzaXplLAomIzQzOwkJCQkJY29uc3QgdTggKnplcm9fZGlnZXN0LAomIzQzOwkJCQkJdW5zaWduZWQgaW50IGRpZ2VzdF9zaXplKQogewogCXBvcyAmIzQzOz0gZjJmc192ZXJpdHlfbWV0YWRhdGFfcG9zKGZpbGVfaW5vZGUoZmlsZSkpOwogCmRpZmYgLS1naXQgYS9mcy9maWxlX2F0dHIuYyBiL2ZzL2ZpbGVfYXR0ci5jCmluZGV4IGJmYjAwZDI1NmRkNTYwLi41NDI0ZWM0ZTM5NDkzZiAxMDA2NDQKLS0tIGEvZnMvZmlsZV9hdHRyLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvZmlsZV9hdHRyLmMKQEAgLTI0Niw2ICYjNDM7MjQ2LDExIEBAIHN0YXRpYyBpbnQgZmlsZWF0dHJfc2V0X3ByZXBhcmUoc3RydWN0IGlub2RlICppbm9kZSwKIAlpZiAoZmEtJmd0O2ZzeF9jb3dleHRzaXplID09IDApCiAJCWZhLSZndDtmc3hfeGZsYWdzICZhbXA7PSB+RlNfWEZMQUdfQ09XRVhUU0laRTsKIAomIzQzOwkvKiBDYW4gbm90IGVuYWJsZSBEQVggb24gZnN2ZXJpdHkgZmlsZSAqLwomIzQzOwlpZiAoKG9sZF9tYS0mZ3Q7ZnN4X3hmbGFncyAmYW1wOyBGU19YRkxBR19WRVJJVFkpICZhbXA7JmFtcDsKJiM0MzsJCQlmYS0mZ3Q7ZnN4X3hmbGFncyAmYW1wOyBGU19YRkxBR19EQVgpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvdmVyaXR5L2VuYWJsZS5jIGIvZnMvdmVyaXR5L2VuYWJsZS5jCmluZGV4IDQyZGZlZDFjZTBjZTY2Li5hZDRmZjcxZDdkZDk1YiAxMDA2NDQKLS0tIGEvZnMvdmVyaXR5L2VuYWJsZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3Zlcml0eS9lbmFibGUuYwpAQCAtNTAsNyAmIzQzOzUwLDkgQEAgc3RhdGljIGludCB3cml0ZV9tZXJrbGVfdHJlZV9ibG9jayhzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgdTggKmJ1ZiwKIAlpbnQgZXJyOwogCiAJZXJyID0gaW5vZGUtJmd0O2lfc2ItJmd0O3Nfdm9wLSZndDt3cml0ZV9tZXJrbGVfdHJlZV9ibG9jayhmaWxlLCBidWYsIHBvcywKLQkJCQkJCQkgIHBhcmFtcy0mZ3Q7YmxvY2tfc2l6ZSk7CiYjNDM7CQkJCQkJCSAgcGFyYW1zLSZndDtibG9ja19zaXplLAomIzQzOwkJCQkJCQkgIHBhcmFtcy0mZ3Q7emVyb19kaWdlc3QsCiYjNDM7CQkJCQkJCSAgcGFyYW1zLSZndDtkaWdlc3Rfc2l6ZSk7CiAJaWYgKGVycikKIAkJZnN2ZXJpdHlfZXJyKGlub2RlLCAmIzM0O0Vycm9yICVkIHdyaXRpbmcgTWVya2xlIHRyZWUgYmxvY2sgJWx1JiMzNDssCiAJCQkgICAgIGVyciwgaW5kZXgpOwpkaWZmIC0tZ2l0IGEvZnMvdmVyaXR5L29wZW4uYyBiL2ZzL3Zlcml0eS9vcGVuLmMKaW5kZXggZDBjNTZhN2ZhYTNiYjEuLjg3NWU4ODUwY2NiYWNlIDEwMDY0NAotLS0gYS9mcy92ZXJpdHkvb3Blbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3Zlcml0eS9vcGVuLmMKQEAgLTM0Nyw3ICYjNDM7MzQ3LDI0IEBAIGludCBmc3Zlcml0eV9nZXRfZGVzY3JpcHRvcihzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGVuc3VyZV92ZXJpdHlfaW5mbyhzdHJ1Y3QgaW5vZGUgKmlub2RlKQomIzQzOy8qKgomIzQzOyAqIGZzdmVyaXR5X2Vuc3VyZV92ZXJpdHlfaW5mbygpIC0gY2FjaGUgdmVyaXR5IGluZm8gaWYgaXQmIzM5O3Mgbm90IGFscmVhZHkgY2FjaGVkCiYjNDM7ICogQGlub2RlOiB0aGUgaW5vZGUgZm9yIHdoaWNoIHZlcml0eSBpbmZvIHNob3VsZCBiZSBjYWNoZWQKJiM0MzsgKgomIzQzOyAqIEVuc3VyZSB0aGlzIGlub2RlIGhhcyB2ZXJpdHkgaW5mbyBhdHRhY2hlZCB0byBpdCwgaXQmIzM5O3MgYXNzdW1lZCB0aGUgaW5vZGUKJiM0MzsgKiBhbHJlYWR5IGhhcyBmc3Zlcml0eSBlbmFibGVkLiBSZWFkIGZzdmVyaXR5IGRlc2NyaXB0b3IgYW5kIGNyZWF0ZXMgdmVyaXR5CiYjNDM7ICogYmFzZWQgb24gdGhhdC4KJiM0MzsgKgomIzQzOyAqIFRoaXMgbmVlZHMgdG8gYmUgY2FsbGVkIGF0IGxlYXN0IG9uY2UgYmVmb3JlIGFueSBvZiB0aGUgaW5vZGUmIzM5O3MgZGF0YQomIzQzOyAqIGNhbiBiZSB2ZXJpZmllZCAoYW5kIHRodXMgcmVhZCBhdCBhbGwpIG9yIHRoZSBpbm9kZSYjMzk7cyBmc3Zlcml0eSBkaWdlc3QKJiM0MzsgKiByZXRyaWV2ZWQuICBmc3Zlcml0eV9maWxlX29wZW4oKSBjYWxscyB0aGlzIGFscmVhZHksIHdoaWNoIGhhbmRsZXMKJiM0MzsgKiBub3JtYWwgZmlsZSBhY2Nlc3Nlcy4gIElmIGEgZmlsZXN5c3RlbSBkb2VzIGFueSBpbnRlcm5hbCAoaS5lLiBub3QKJiM0MzsgKiBhc3NvY2lhdGVkIHdpdGggYSBmaWxlIGRlc2NyaXB0b3IpIHJlYWRzIG9mIHRoZSBmaWxlJiMzOTtzIGRhdGEgb3IKJiM0MzsgKiBmc3Zlcml0eSBkaWdlc3QsIGl0IG11c3QgY2FsbCB0aGlzIGV4cGxpY2l0bHkgYmVmb3JlIGRvaW5nIHNvLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIC1lcnJubyBvbiBmYWlsdXJlCiYjNDM7ICovCiYjNDM7aW50IGZzdmVyaXR5X2Vuc3VyZV92ZXJpdHlfaW5mbyhzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewogCXN0cnVjdCBmc3Zlcml0eV9pbmZvICp2aSA9IGZzdmVyaXR5X2dldF9pbmZvKGlub2RlKSwgKmZvdW5kOwogCXN0cnVjdCBmc3Zlcml0eV9kZXNjcmlwdG9yICpkZXNjOwpAQCAtMzgzLDEyICYjNDM7NDAwLDEzIEBAIHN0YXRpYyBpbnQgZW5zdXJlX3Zlcml0eV9pbmZvKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiAJa2ZyZWUoZGVzYyk7CiAJcmV0dXJuIGVycjsKIH0KJiM0MztFWFBPUlRfU1lNQk9MX0dQTChmc3Zlcml0eV9lbnN1cmVfdmVyaXR5X2luZm8pOwogCiBpbnQgX19mc3Zlcml0eV9maWxlX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCiB7CiAJaWYgKGZpbHAtJmd0O2ZfbW9kZSAmYW1wOyBGTU9ERV9XUklURSkKIAkJcmV0dXJuIC1FUEVSTTsKLQlyZXR1cm4gZW5zdXJlX3Zlcml0eV9pbmZvKGlub2RlKTsKJiM0MzsJcmV0dXJuIGZzdmVyaXR5X2Vuc3VyZV92ZXJpdHlfaW5mbyhpbm9kZSk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChfX2ZzdmVyaXR5X2ZpbGVfb3Blbik7CiAKZGlmZiAtLWdpdCBhL2ZzL3Zlcml0eS9wYWdlY2FjaGUuYyBiL2ZzL3Zlcml0eS9wYWdlY2FjaGUuYwppbmRleCA5OWY1ZjUzZWVhOTg1Zi4uMjcwYWJkNjUyZTQ4YzYgMTAwNjQ0Ci0tLSBhL2ZzL3Zlcml0eS9wYWdlY2FjaGUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy92ZXJpdHkvcGFnZWNhY2hlLmMKQEAgLTY4LDEzICYjNDM7NjgsNjQgQEAgRVhQT1JUX1NZTUJPTF9HUEwoZ2VuZXJpY19yZWFkYWhlYWRfbWVya2xlX3RyZWUpOwogdm9pZCBmc3Zlcml0eV9maWxsX3plcm9oYXNoKHN0cnVjdCBmb2xpbyAqZm9saW8sIHNpemVfdCBvZmZzZXQsIHNpemVfdCBsZW4sCiAJCQkgICAgICBzdHJ1Y3QgZnN2ZXJpdHlfaW5mbyAqdmkpCiB7Ci0Jc2l6ZV90IG9mZiA9IG9mZnNldDsKJiM0MzsJdm9pZCAqdmFkZHI7CiYjNDM7CXZvaWQgKnRvOwomIzQzOwlzaXplX3QgY2h1bms7CiAKIAlXQVJOX09OX09OQ0UoIUlTX0FMSUdORUQob2Zmc2V0LCB2aS0mZ3Q7dHJlZV9wYXJhbXMuZGlnZXN0X3NpemUpKTsKIAlXQVJOX09OX09OQ0UoIUlTX0FMSUdORUQobGVuLCB2aS0mZ3Q7dHJlZV9wYXJhbXMuZGlnZXN0X3NpemUpKTsKJiM0MzsJV0FSTl9PTl9PTkNFKG9mZnNldCAmIzQzOyBsZW4gJmd0OyBmb2xpb19zaXplKGZvbGlvKSk7CiAKLQlmb3IgKDsgb2ZmICZsdDsgKG9mZnNldCAmIzQzOyBsZW4pOyBvZmYgJiM0Mzs9IHZpLSZndDt0cmVlX3BhcmFtcy5kaWdlc3Rfc2l6ZSkKLQkJbWVtY3B5X3RvX2ZvbGlvKGZvbGlvLCBvZmYsIHZpLSZndDt0cmVlX3BhcmFtcy56ZXJvX2RpZ2VzdCwKJiM0MzsJZG8gewomIzQzOwkJdmFkZHIgPSBrbWFwX2xvY2FsX2ZvbGlvKGZvbGlvLCBvZmZzZXQpOwomIzQzOwkJY2h1bmsgPSBsZW47CiYjNDM7CQl0byA9IHZhZGRyOwomIzQzOwomIzQzOwkJaWYgKGZvbGlvX3Rlc3RfcGFydGlhbF9rbWFwKGZvbGlvKSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgY2h1bmsgJmd0OyBQQUdFX1NJWkUgLSBvZmZzZXRfaW5fcGFnZShvZmZzZXQpKQomIzQzOwkJCWNodW5rID0gUEFHRV9TSVpFIC0gb2Zmc2V0X2luX3BhZ2Uob2Zmc2V0KTsKJiM0MzsJCWZvciAoOyB0byAmbHQ7ICh2YWRkciAmIzQzOyBjaHVuayk7IHRvICYjNDM7PSB2aS0mZ3Q7dHJlZV9wYXJhbXMuZGlnZXN0X3NpemUpCiYjNDM7CQkJbWVtY3B5KHRvLCB2aS0mZ3Q7dHJlZV9wYXJhbXMuemVyb19kaWdlc3QsCiAJCQkJdmktJmd0O3RyZWVfcGFyYW1zLmRpZ2VzdF9zaXplKTsKJiM0MzsJCWt1bm1hcF9sb2NhbCh2YWRkcik7CiYjNDM7CiYjNDM7CQlvZmZzZXQgJiM0Mzs9IGNodW5rOwomIzQzOwkJbGVuIC09IGNodW5rOwomIzQzOwl9IHdoaWxlIChsZW4gJmd0OyAwKTsKJiM0MzsKJiM0MzsJZmx1c2hfZGNhY2hlX2ZvbGlvKGZvbGlvKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGZzdmVyaXR5X2ZpbGxfemVyb2hhc2gpOwomIzQzOwomIzQzOy8qKgomIzQzOyAqIGZzdmVyaXR5X3BhZ2VjYWNoZV9yZWFkKCkgLSByZWFkIHBhZ2UgYW5kIGNvcHkgZGF0YSB0byBidWZmZXIKJiM0MzsgKiBAaW5vZGU6CWNvcHkgZnJvbSB0aGlzIGlub2RlJiMzOTtzIGFkZHJlc3Mgc3BhY2UKJiM0MzsgKiBAYnVmOglidWZmZXIgdG8gY29weSB0bwomIzQzOyAqIEBjb3VudDoJbnVtYmVyIG9mIGJ5dGVzIHRvIGNvcHkKJiM0MzsgKiBAcG9zOglwb3NpdGlvbiBvZiB0aGUgZm9saW8gdG8gY29weSBmcm9tCiYjNDM7ICoKJiM0MzsgKiBSZWFkIHNvbWUgdmVyaXR5IG1ldGFkYXRhIGZyb20gdGhlIGlub2RlLiAgX192ZnNfcmVhZCgpIGNhbiYjMzk7dCBiZSB1c2VkIGJlY2F1c2UKJiM0MzsgKiB3ZSBuZWVkIHRvIHJlYWQgYmV5b25kIGlfc2l6ZS4KJiM0MzsgKi8KJiM0MztpbnQgZnN2ZXJpdHlfcGFnZWNhY2hlX3JlYWQoc3RydWN0IGlub2RlICppbm9kZSwgdm9pZCAqYnVmLCBzaXplX3QgY291bnQsCiYjNDM7CQkJICBsb2ZmX3QgcG9zKQomIzQzO3sKJiM0MzsJd2hpbGUgKGNvdW50KSB7CiYjNDM7CQlzdHJ1Y3QgZm9saW8gKmZvbGlvOwomIzQzOwkJc2l6ZV90IG47CiYjNDM7CiYjNDM7CQlmb2xpbyA9IHJlYWRfbWFwcGluZ19mb2xpbyhpbm9kZS0mZ3Q7aV9tYXBwaW5nLCBwb3MgJmd0OyZndDsgUEFHRV9TSElGVCwKJiM0MzsJCQkJCSBOVUxMKTsKJiM0MzsJCWlmIChJU19FUlIoZm9saW8pKQomIzQzOwkJCXJldHVybiBQVFJfRVJSKGZvbGlvKTsKJiM0MzsKJiM0MzsJCW4gPSBtZW1jcHlfZnJvbV9maWxlX2ZvbGlvKGJ1ZiwgZm9saW8sIHBvcywgY291bnQpOwomIzQzOwkJZm9saW9fcHV0KGZvbGlvKTsKJiM0MzsKJiM0MzsJCWJ1ZiAmIzQzOz0gbjsKJiM0MzsJCXBvcyAmIzQzOz0gbjsKJiM0MzsJCWNvdW50IC09IG47CiYjNDM7CX0KJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKGZzdmVyaXR5X3BhZ2VjYWNoZV9yZWFkKTsKZGlmZiAtLWdpdCBhL2ZzL3Zlcml0eS92ZXJpZnkuYyBiL2ZzL3Zlcml0eS92ZXJpZnkuYwppbmRleCA0MDA0YTFkNDI4NzUxZi4uZGI4YzM1MDIzNGJiNzEgMTAwNjQ0Ci0tLSBhL2ZzL3Zlcml0eS92ZXJpZnkuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy92ZXJpdHkvdmVyaWZ5LmMKQEAgLTksNiAmIzQzOzksNyBAQAogCiAjaW5jbHVkZSAmbHQ7bGludXgvYmlvLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZXhwb3J0LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2ZzZXJyb3IuaCZndDsKIAogI2RlZmluZSBGU19WRVJJVFlfTUFYX1BFTkRJTkdfQkxPQ0tTIDIKIApAQCAtMjA1LDYgJiM0MzsyMDYsOCBAQCBzdGF0aWMgYm9vbCB2ZXJpZnlfZGF0YV9ibG9jayhzdHJ1Y3QgZnN2ZXJpdHlfaW5mbyAqdmksCiAJCWlmIChtZW1jaHJfaW52KGRibG9jay0mZ3Q7ZGF0YSwgMCwgcGFyYW1zLSZndDtibG9ja19zaXplKSkgewogCQkJZnN2ZXJpdHlfZXJyKGlub2RlLAogCQkJCSAgICAgJiMzNDtGSUxFIENPUlJVUFRFRCEgIERhdGEgcGFzdCBFT0YgaXMgbm90IHplcm9lZCYjMzQ7KTsKJiM0MzsJCQlmc2Vycm9yX3JlcG9ydF9kYXRhX2xvc3QoaW5vZGUsIGRhdGFfcG9zLAomIzQzOwkJCQkJCSBwYXJhbXMtJmd0O2Jsb2NrX3NpemUsIEdGUF9OT0ZTKTsKIAkJCXJldHVybiBmYWxzZTsKIAkJfQogCQlyZXR1cm4gdHJ1ZTsKQEAgLTMxMiw2ICYjNDM7MzE1LDcgQEAgc3RhdGljIGJvb2wgdmVyaWZ5X2RhdGFfYmxvY2soc3RydWN0IGZzdmVyaXR5X2luZm8gKnZpLAogCQlkYXRhX3BvcywgbGV2ZWwgLSAxLCBwYXJhbXMtJmd0O2hhc2hfYWxnLSZndDtuYW1lLCBoc2l6ZSwgd2FudF9oYXNoLAogCQlwYXJhbXMtJmd0O2hhc2hfYWxnLSZndDtuYW1lLCBoc2l6ZSwKIAkJbGV2ZWwgPT0gMCA/IGRibG9jay0mZ3Q7cmVhbF9oYXNoIDogcmVhbF9oYXNoKTsKJiM0MzsJZnNlcnJvcl9yZXBvcnRfZGF0YV9sb3N0KGlub2RlLCBkYXRhX3BvcywgcGFyYW1zLSZndDtibG9ja19zaXplLCBHRlBfTk9GUyk7CiBlcnJvcjoKIAlmb3IgKDsgbGV2ZWwgJmd0OyAwOyBsZXZlbC0tKSB7CiAJCWt1bm1hcF9sb2NhbChoYmxvY2tzW2xldmVsIC0gMV0uYWRkcik7CmRpZmYgLS1naXQgYS9mcy94ZnMvTWFrZWZpbGUgYi9mcy94ZnMvTWFrZWZpbGUKaW5kZXggOWY3MTMzZTAyNTc2OGQuLjM4YjdmNTFlNWQ4NDA1IDEwMDY0NAotLS0gYS9mcy94ZnMvTWFrZWZpbGUKJiM0MzsmIzQzOyYjNDM7IGIvZnMveGZzL01ha2VmaWxlCkBAIC0xNDksNiAmIzQzOzE0OSw3IEBAIHhmcy0kKENPTkZJR19YRlNfUE9TSVhfQUNMKQkmIzQzOz0geGZzX2FjbC5vCiB4ZnMtJChDT05GSUdfU1lTQ1RMKQkJJiM0Mzs9IHhmc19zeXNjdGwubwogeGZzLSQoQ09ORklHX0NPTVBBVCkJCSYjNDM7PSB4ZnNfaW9jdGwzMi5vCiB4ZnMtJChDT05GSUdfRVhQT1JURlNfQkxPQ0tfT1BTKQkmIzQzOz0geGZzX3BuZnMubwomIzQzO3hmcy0kKENPTkZJR19GU19WRVJJVFkpCQkmIzQzOz0geGZzX2ZzdmVyaXR5Lm8KIAogIyBub3RpZnkgZmFpbHVyZQogaWZlcSAoJChDT05GSUdfTUVNT1JZX0ZBSUxVUkUpLHkpCmRpZmYgLS1naXQgYS9mcy94ZnMvbGlieGZzL3hmc19ibWFwLmMgYi9mcy94ZnMvbGlieGZzL3hmc19ibWFwLmMKaW5kZXggZDY0ZGVmZWRhNjQ1ZWQuLmNjNDhmNmUyMGU4MDAwIDEwMDY0NAotLS0gYS9mcy94ZnMvbGlieGZzL3hmc19ibWFwLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMveGZzL2xpYnhmcy94ZnNfYm1hcC5jCkBAIC00MSw2ICYjNDM7NDEsOCBAQAogI2luY2x1ZGUgJiMzNDt4ZnNfaW5vZGVfdXRpbC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7eGZzX3J0Z3JvdXAuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3hmc196b25lX2FsbG9jLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7eGZzX2ZzdmVyaXR5LmgmIzM0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9mc3Zlcml0eS5oJmd0OwogCiBzdHJ1Y3Qga21lbV9jYWNoZQkJKnhmc19ibWFwX2ludGVudF9jYWNoZTsKIApAQCAtNDQwMiw2ICYjNDM7NDQwNCwxMCBAQCB4ZnNfYm1hcGlfY29udmVydF9vbmVfZGVsYWxsb2MoCiAJICogdGhlIGV4dGVudC4gIEp1c3QgcmV0dXJuIHRoZSByZWFsIGV4dGVudCBhdCB0aGlzIG9mZnNldC4KIAkgKi8KIAlpZiAoIWlzbnVsbHN0YXJ0YmxvY2soYm1hLmdvdC5icl9zdGFydGJsb2NrKSkgewomIzQzOwkJaWYgKHhmc19pZmxhZ3NfdGVzdChpcCwgWEZTX1ZFUklUWV9DT05TVFJVQ1RJT04pICZhbXA7JmFtcDsKJiM0MzsJCSAgICBYRlNfRlNCX1RPX0IobXAsIGJtYS5nb3QuYnJfc3RhcnRvZmYpICZndDs9CiYjNDM7CQkJICAgIHhmc19mc3Zlcml0eV9tZXRhZGF0YV9vZmZzZXQoaXApKQomIzQzOwkJCWZsYWdzIHw9IElPTUFQX0ZfRlNWRVJJVFk7CiAJCXhmc19ibWJ0X3RvX2lvbWFwKGlwLCBpb21hcCwgJmFtcDtibWEuZ290LCAwLCBmbGFncywKIAkJCQl4ZnNfaW9tYXBfaW5vZGVfc2VxdWVuY2UoaXAsIGZsYWdzKSk7CiAJCWlmIChzZXEpCkBAIC00NDQ5LDYgJiM0Mzs0NDU1LDExIEBAIHhmc19ibWFwaV9jb252ZXJ0X29uZV9kZWxhbGxvYygKIAlYRlNfU1RBVFNfQUREKG1wLCB4c194c3RyYXRfYnl0ZXMsIFhGU19GU0JfVE9fQihtcCwgYm1hLmxlbmd0aCkpOwogCVhGU19TVEFUU19JTkMobXAsIHhzX3hzdHJhdF9xdWljayk7CiAKJiM0MzsJaWYgKHhmc19pZmxhZ3NfdGVzdChpcCwgWEZTX1ZFUklUWV9DT05TVFJVQ1RJT04pICZhbXA7JmFtcDsKJiM0MzsJICAgIFhGU19GU0JfVE9fQihtcCwgYm1hLmdvdC5icl9zdGFydG9mZikgJmd0Oz0KJiM0MzsJCSAgICB4ZnNfZnN2ZXJpdHlfbWV0YWRhdGFfb2Zmc2V0KGlwKSkKJiM0MzsJCWZsYWdzIHw9IElPTUFQX0ZfRlNWRVJJVFk7CiYjNDM7CiAJQVNTRVJUKCFpc251bGxzdGFydGJsb2NrKGJtYS5nb3QuYnJfc3RhcnRibG9jaykpOwogCXhmc19ibWJ0X3RvX2lvbWFwKGlwLCBpb21hcCwgJmFtcDtibWEuZ290LCAwLCBmbGFncywKIAkJCQl4ZnNfaW9tYXBfaW5vZGVfc2VxdWVuY2UoaXAsIGZsYWdzKSk7CmRpZmYgLS1naXQgYS9mcy94ZnMvbGlieGZzL3hmc19mb3JtYXQuaCBiL2ZzL3hmcy9saWJ4ZnMveGZzX2Zvcm1hdC5oCmluZGV4IGRkMGVkMDQ2ZmJlOWM5Li4yODc4YmM5Y2I2NTY0ZSAxMDA2NDQKLS0tIGEvZnMveGZzL2xpYnhmcy94ZnNfZm9ybWF0LmgKJiM0MzsmIzQzOyYjNDM7IGIvZnMveGZzL2xpYnhmcy94ZnNfZm9ybWF0LmgKQEAgLTM3NCwxMSAmIzQzOzM3NCwxMyBAQCB4ZnNfc2JfaGFzX2NvbXBhdF9mZWF0dXJlKAogI2RlZmluZSBYRlNfU0JfRkVBVF9ST19DT01QQVRfUk1BUEJUICAgKDEgJmx0OyZsdDsgMSkJCS8qIHJldmVyc2UgbWFwIGJ0cmVlICovCiAjZGVmaW5lIFhGU19TQl9GRUFUX1JPX0NPTVBBVF9SRUZMSU5LICAoMSAmbHQ7Jmx0OyAyKQkJLyogcmVmbGlua2VkIGZpbGVzICovCiAjZGVmaW5lIFhGU19TQl9GRUFUX1JPX0NPTVBBVF9JTk9CVENOVCAoMSAmbHQ7Jmx0OyAzKQkJLyogaW5vYnQgYmxvY2sgY291bnRzICovCiYjNDM7I2RlZmluZSBYRlNfU0JfRkVBVF9ST19DT01QQVRfVkVSSVRZICAgKDEgJmx0OyZsdDsgNCkJCS8qIGZzLXZlcml0eSAqLwogI2RlZmluZSBYRlNfU0JfRkVBVF9ST19DT01QQVRfQUxMIFwKIAkJKFhGU19TQl9GRUFUX1JPX0NPTVBBVF9GSU5PQlQgfCBcCiAJCSBYRlNfU0JfRkVBVF9ST19DT01QQVRfUk1BUEJUIHwgXAotCQkgWEZTX1NCX0ZFQVRfUk9fQ09NUEFUX1JFRkxJTkt8IFwKLQkJIFhGU19TQl9GRUFUX1JPX0NPTVBBVF9JTk9CVENOVCkKJiM0MzsJCSBYRlNfU0JfRkVBVF9ST19DT01QQVRfUkVGTElOSyB8IFwKJiM0MzsJCSBYRlNfU0JfRkVBVF9ST19DT01QQVRfSU5PQlRDTlQgfCBcCiYjNDM7CQkgWEZTX1NCX0ZFQVRfUk9fQ09NUEFUX1ZFUklUWSkKICNkZWZpbmUgWEZTX1NCX0ZFQVRfUk9fQ09NUEFUX1VOS05PV04JflhGU19TQl9GRUFUX1JPX0NPTVBBVF9BTEwKIHN0YXRpYyBpbmxpbmUgYm9vbAogeGZzX3NiX2hhc19yb19jb21wYXRfZmVhdHVyZSgKQEAgLTEyMzAsMTYgJiM0MzsxMjMyLDIxIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB4ZnNfZGlub2RlX3B1dF9yZGV2KHN0cnVjdCB4ZnNfZGlub2RlICpkaXAsIHhmc19kZXZfdCByZGV2KQogICovCiAjZGVmaW5lIFhGU19ESUZMQUcyX01FVEFEQVRBX0JJVAk1CiAKJiM0MzsvKiBpbm9kZXMgc2VhbGVkIHdpdGggZnMtdmVyaXR5ICovCiYjNDM7I2RlZmluZSBYRlNfRElGTEFHMl9WRVJJVFlfQklUCQk2CiYjNDM7CiAjZGVmaW5lIFhGU19ESUZMQUcyX0RBWAkJKDFVTEwgJmx0OyZsdDsgWEZTX0RJRkxBRzJfREFYX0JJVCkKICNkZWZpbmUgWEZTX0RJRkxBRzJfUkVGTElOSwkoMVVMTCAmbHQ7Jmx0OyBYRlNfRElGTEFHMl9SRUZMSU5LX0JJVCkKICNkZWZpbmUgWEZTX0RJRkxBRzJfQ09XRVhUU0laRQkoMVVMTCAmbHQ7Jmx0OyBYRlNfRElGTEFHMl9DT1dFWFRTSVpFX0JJVCkKICNkZWZpbmUgWEZTX0RJRkxBRzJfQklHVElNRQkoMVVMTCAmbHQ7Jmx0OyBYRlNfRElGTEFHMl9CSUdUSU1FX0JJVCkKICNkZWZpbmUgWEZTX0RJRkxBRzJfTlJFWFQ2NAkoMVVMTCAmbHQ7Jmx0OyBYRlNfRElGTEFHMl9OUkVYVDY0X0JJVCkKICNkZWZpbmUgWEZTX0RJRkxBRzJfTUVUQURBVEEJKDFVTEwgJmx0OyZsdDsgWEZTX0RJRkxBRzJfTUVUQURBVEFfQklUKQomIzQzOyNkZWZpbmUgWEZTX0RJRkxBRzJfVkVSSVRZCSgxVUxMICZsdDsmbHQ7IFhGU19ESUZMQUcyX1ZFUklUWV9CSVQpCiAKICNkZWZpbmUgWEZTX0RJRkxBRzJfQU5ZIFwKIAkoWEZTX0RJRkxBRzJfREFYIHwgWEZTX0RJRkxBRzJfUkVGTElOSyB8IFhGU19ESUZMQUcyX0NPV0VYVFNJWkUgfCBcCi0JIFhGU19ESUZMQUcyX0JJR1RJTUUgfCBYRlNfRElGTEFHMl9OUkVYVDY0IHwgWEZTX0RJRkxBRzJfTUVUQURBVEEpCiYjNDM7CSBYRlNfRElGTEFHMl9CSUdUSU1FIHwgWEZTX0RJRkxBRzJfTlJFWFQ2NCB8IFhGU19ESUZMQUcyX01FVEFEQVRBIHwgXAomIzQzOwkgWEZTX0RJRkxBRzJfVkVSSVRZKQogCiBzdGF0aWMgaW5saW5lIGJvb2wgeGZzX2Rpbm9kZV9oYXNfYmlndGltZShjb25zdCBzdHJ1Y3QgeGZzX2Rpbm9kZSAqZGlwKQogewpAQCAtMjAyNyw0ICYjNDM7MjAzNCwyNiBAQCBzdHJ1Y3QgeGZzX2FjbCB7CiAjZGVmaW5lIFNHSV9BQ0xfRklMRV9TSVpFCShzaXplb2YoU0dJX0FDTF9GSUxFKS0xKQogI2RlZmluZSBTR0lfQUNMX0RFRkFVTFRfU0laRQkoc2l6ZW9mKFNHSV9BQ0xfREVGQVVMVCktMSkKIAomIzQzOy8qCiYjNDM7ICogQXQgbWF4aW11bSBvZiA4IGxldmVscyB3aXRoIDEyOCBoYXNoZXMgcGVyIGJsb2NrICgzMiBieXRlcyBTSEEtMjU2KSBtYXhpbXVtCiYjNDM7ICogdHJlZSBzaXplIGlzICgoMTI4Xjgg4oiSIDEpLygxMjgg4oiSIDEpKSA9IDU2NyoxMF4xMiBibG9ja3MuIFRoaXMgc2hvdWxkIGZpdCBpbgomIzQzOyAqIDUzIGJpdHMgYWRkcmVzcyBzcGFjZS4KJiM0MzsgKgomIzQzOyAqIEF0IHRoaXMgTWVya2xlIHRyZWUgc2l6ZSB3ZSBjYW4gY292ZXIgMjk1RUIgbGFyZ2UgZmlsZS4gVGhpcyBpcyBtdWNoIGxhcmdlcgomIzQzOyAqIHRoYW4gdGhlIGN1cnJlbnRseSBzdXBwb3J0ZWQgZmlsZSBzaXplLgomIzQzOyAqCiYjNDM7ICogRm9yIHNoYTUxMiB0aGUgbGFyZ2VzdCBmaWxlIHdlIGNhbiBjb3ZlciBlbmRzIGF0IDEgJmx0OyZsdDsgNTAgb2Zmc2V0LCB0aGlzIGlzIGFsc28KJiM0MzsgKiBnb29kLgomIzQzOyAqLwomIzQzOyNkZWZpbmUgWEZTX0ZTVkVSSVRZX0xBUkdFU1RfRklMRQkoKGxvZmZfdCkxVUxMICZsdDsmbHQ7IDUzKQomIzQzOwomIzQzOy8qCiYjNDM7ICogQWxpZ25tZW50IG9mIHRoZSBmc3Zlcml0eSBtZXRhZGF0YSBwbGFjZW1lbnQuIFRoaXMgaXMgbGFyZ2VzdCBzdXBwb3J0ZWQgUEFHRQomIzQzOyAqIFNJWkUgZm9yIGZzdmVyaXR5LiBUaGlzIGlzIHVzZWQgdG8gc3BhY2Ugb3V0IGRhdGEgYW5kIG1ldGFkYXRhIGluIHBhZ2UgY2FjaGUuCiYjNDM7ICogVGhlIHNwYWNpbmcgaXMgbmVjZXNzYXJ5IGZvciBub24tZXhwb3N1cmUgb2YgbWV0YWRhdGEgdG8gdXNlcnNwYWNlIGFuZAomIzQzOyAqIGNvcnJlY3QgbWVya2xlIHRyZWUgc3luZXRoZXNpcyBpbiB0aGUgaW9tYXAuCiYjNDM7ICovCiYjNDM7I2RlZmluZSBYRlNfRlNWRVJJVFlfU1RBUlRfQUxJR04JKDY1NTM2KQomIzQzOwomIzQzOwogI2VuZGlmIC8qIF9fWEZTX0ZPUk1BVF9IX18gKi8KZGlmZiAtLWdpdCBhL2ZzL3hmcy9saWJ4ZnMveGZzX2ZzLmggYi9mcy94ZnMvbGlieGZzL3hmc19mcy5oCmluZGV4IDE4NWYwOWYzMjdjMDBjLi44NGQ2MmI3NTA2YTlhZCAxMDA2NDQKLS0tIGEvZnMveGZzL2xpYnhmcy94ZnNfZnMuaAomIzQzOyYjNDM7JiM0MzsgYi9mcy94ZnMvbGlieGZzL3hmc19mcy5oCkBAIC0yNTAsNiAmIzQzOzI1MCw3IEBAIHR5cGVkZWYgc3RydWN0IHhmc19mc29wX3Jlc2Jsa3MgewogI2RlZmluZSBYRlNfRlNPUF9HRU9NX0ZMQUdTX1BBUkVOVAkoMSAmbHQ7Jmx0OyAyNSkgLyogbGludXggcGFyZW50IHBvaW50ZXJzICovCiAjZGVmaW5lIFhGU19GU09QX0dFT01fRkxBR1NfTUVUQURJUgkoMSAmbHQ7Jmx0OyAyNikgLyogbWV0YWRhdGEgZGlyZWN0b3JpZXMgKi8KICNkZWZpbmUgWEZTX0ZTT1BfR0VPTV9GTEFHU19aT05FRAkoMSAmbHQ7Jmx0OyAyNykgLyogem9uZWQgcnQgZGV2aWNlICovCiYjNDM7I2RlZmluZSBYRlNfRlNPUF9HRU9NX0ZMQUdTX1ZFUklUWQkoMSAmbHQ7Jmx0OyAyOCkgLyogZnMtdmVyaXR5ICovCiAKIC8qCiAgKiBNaW5pbXVtIGFuZCBtYXhpbXVtIHNpemVzIG5lZWQgZm9yIGdyb3d0aCBjaGVja3MuCkBAIC00MjEsNiAmIzQzOzQyMiw3IEBAIHN0cnVjdCB4ZnNfYnVsa3N0YXQgewogI2RlZmluZSBYRlNfQlNfU0lDS19TWU1MSU5LCSgxICZsdDsmbHQ7IDYpICAvKiBzeW1ib2xpYyBsaW5rIHJlbW90ZSB0YXJnZXQgKi8KICNkZWZpbmUgWEZTX0JTX1NJQ0tfUEFSRU5UCSgxICZsdDsmbHQ7IDcpICAvKiBwYXJlbnQgcG9pbnRlcnMgKi8KICNkZWZpbmUgWEZTX0JTX1NJQ0tfRElSVFJFRQkoMSAmbHQ7Jmx0OyA4KSAgLyogZGlyZWN0b3J5IHRyZWUgc3RydWN0dXJlICovCiYjNDM7I2RlZmluZSBYRlNfQlNfU0lDS19GU1ZFUklUWQkoMSAmbHQ7Jmx0OyA5KSAgLyogZnN2ZXJpdHkgbWV0YWRhdGEgKi8KIAogLyoKICAqIFByb2plY3QgcXVvdGEgaWQgaGVscGVycyAocHJldmlvdXNseSBwcm9qaWQgd2FzIDE2Yml0IG9ubHkKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saWJ4ZnMveGZzX2hlYWx0aC5oIGIvZnMveGZzL2xpYnhmcy94ZnNfaGVhbHRoLmgKaW5kZXggMWQ0NWNmNTc4OWU4NjQuLjkzMmI0NDcxOTBkYTc2IDEwMDY0NAotLS0gYS9mcy94ZnMvbGlieGZzL3hmc19oZWFsdGguaAomIzQzOyYjNDM7JiM0MzsgYi9mcy94ZnMvbGlieGZzL3hmc19oZWFsdGguaApAQCAtMTA0LDYgJiM0MzsxMDQsNyBAQCBzdHJ1Y3QgeGZzX3J0Z3JvdXA7CiAvKiBEb24mIzM5O3QgcHJvcGFnYXRlIHNpY2sgc3RhdHVzIHRvIGFnIGhlYWx0aCBzdW1tYXJ5IGR1cmluZyBpbmFjdGl2YXRpb24gKi8KICNkZWZpbmUgWEZTX1NJQ0tfSU5PX0ZPUkdFVAkoMSAmbHQ7Jmx0OyAxMikKICNkZWZpbmUgWEZTX1NJQ0tfSU5PX0RJUlRSRUUJKDEgJmx0OyZsdDsgMTMpICAvKiBkaXJlY3RvcnkgdHJlZSBzdHJ1Y3R1cmUgKi8KJiM0MzsjZGVmaW5lIFhGU19TSUNLX0lOT19GU1ZFUklUWQkoMSAmbHQ7Jmx0OyAxNCkgIC8qIGZzdmVyaXR5IG1ldGFkYXRhICovCiAKIC8qIFByaW1hcnkgZXZpZGVuY2Ugb2YgaGVhbHRoIHByb2JsZW1zIGluIGEgZ2l2ZW4gZ3JvdXAuICovCiAjZGVmaW5lIFhGU19TSUNLX0ZTX1BSSU1BUlkJKFhGU19TSUNLX0ZTX0NPVU5URVJTIHwgXApAQCAtMTQwLDcgJiM0MzsxNDEsOCBAQCBzdHJ1Y3QgeGZzX3J0Z3JvdXA7CiAJCQkJIFhGU19TSUNLX0lOT19YQVRUUiB8IFwKIAkJCQkgWEZTX1NJQ0tfSU5PX1NZTUxJTksgfCBcCiAJCQkJIFhGU19TSUNLX0lOT19QQVJFTlQgfCBcCi0JCQkJIFhGU19TSUNLX0lOT19ESVJUUkVFKQomIzQzOwkJCQkgWEZTX1NJQ0tfSU5PX0RJUlRSRUUgfCBcCiYjNDM7CQkJCSBYRlNfU0lDS19JTk9fRlNWRVJJVFkpCiAKICNkZWZpbmUgWEZTX1NJQ0tfSU5PX1pBUFBFRAkoWEZTX1NJQ0tfSU5PX0JNQlREX1pBUFBFRCB8IFwKIAkJCQkgWEZTX1NJQ0tfSU5PX0JNQlRBX1pBUFBFRCB8IFwKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saWJ4ZnMveGZzX2lub2RlX2J1Zi5jIGIvZnMveGZzL2xpYnhmcy94ZnNfaW5vZGVfYnVmLmMKaW5kZXggMzM2ZWY4NDNmMmZlNGYuLmJkODBhMTlmMmUwOTI5IDEwMDY0NAotLS0gYS9mcy94ZnMvbGlieGZzL3hmc19pbm9kZV9idWYuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy94ZnMvbGlieGZzL3hmc19pbm9kZV9idWYuYwpAQCAtNzYwLDYgJiM0Mzs3NjAsMTQgQEAgeGZzX2Rpbm9kZV92ZXJpZnkoCiAJICAgICF4ZnNfaGFzX3J0cmVmbGluayhtcCkpCiAJCXJldHVybiBfX3RoaXNfYWRkcmVzczsKIAomIzQzOwkvKiBvbmx5IHJlZ3VsYXIgZmlsZXMgY2FuIGhhdmUgZnN2ZXJpdHkgKi8KJiM0MzsJaWYgKGZsYWdzMiAmYW1wOyBYRlNfRElGTEFHMl9WRVJJVFkpIHsKJiM0MzsJCWlmICgheGZzX2hhc192ZXJpdHkobXApKQomIzQzOwkJCXJldHVybiBfX3RoaXNfYWRkcmVzczsKJiM0MzsJCWlmICghU19JU1JFRyhtb2RlKSkKJiM0MzsJCQlyZXR1cm4gX190aGlzX2FkZHJlc3M7CiYjNDM7CX0KJiM0MzsKIAlpZiAoeGZzX2hhc196b25lZChtcCkgJmFtcDsmYW1wOwogCSAgICBkaXAtJmd0O2RpX21ldGF0eXBlID09IGNwdV90b19iZTE2KFhGU19NRVRBRklMRV9SVFJNQVApKSB7CiAJCWlmIChiZTMyX3RvX2NwdShkaXAtJmd0O2RpX3VzZWRfYmxvY2tzKSAmZ3Q7IG1wLSZndDttX3NiLnNiX3JnZXh0ZW50cykKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saWJ4ZnMveGZzX2lub2RlX3V0aWwuYyBiL2ZzL3hmcy9saWJ4ZnMveGZzX2lub2RlX3V0aWwuYwppbmRleCAyNThhYzNkMGQ0ODZlNi4uNWE1MTZiZDMxYzMxNzUgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saWJ4ZnMveGZzX2lub2RlX3V0aWwuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy94ZnMvbGlieGZzL3hmc19pbm9kZV91dGlsLmMKQEAgLTc0LDcgJiM0Mzs3NCw4IEBAIHhmc19mbGFnczJkaWZsYWdzMigKIAl1aW50NjRfdAkJZGlfZmxhZ3MyID0KIAkJKGlwLSZndDtpX2RpZmxhZ3MyICZhbXA7IChYRlNfRElGTEFHMl9SRUZMSU5LIHwKIAkJCQkgICBYRlNfRElGTEFHMl9CSUdUSU1FIHwKLQkJCQkgICBYRlNfRElGTEFHMl9OUkVYVDY0KSk7CiYjNDM7CQkJCSAgIFhGU19ESUZMQUcyX05SRVhUNjQgfAomIzQzOwkJCQkgICBYRlNfRElGTEFHMl9WRVJJVFkpKTsKIAogCWlmICh4ZmxhZ3MgJmFtcDsgRlNfWEZMQUdfREFYKQogCQlkaV9mbGFnczIgfD0gWEZTX0RJRkxBRzJfREFYOwpAQCAtMTI2LDYgJiM0MzsxMjcsOCBAQCB4ZnNfaXAyeGZsYWdzKAogCQkJZmxhZ3MgfD0gRlNfWEZMQUdfREFYOwogCQlpZiAoaXAtJmd0O2lfZGlmbGFnczIgJmFtcDsgWEZTX0RJRkxBRzJfQ09XRVhUU0laRSkKIAkJCWZsYWdzIHw9IEZTX1hGTEFHX0NPV0VYVFNJWkU7CiYjNDM7CQlpZiAoaXAtJmd0O2lfZGlmbGFnczIgJmFtcDsgWEZTX0RJRkxBRzJfVkVSSVRZKQomIzQzOwkJCWZsYWdzIHw9IEZTX1hGTEFHX1ZFUklUWTsKIAl9CiAKIAlpZiAoeGZzX2lub2RlX2hhc19hdHRyX2ZvcmsoaXApKQpkaWZmIC0tZ2l0IGEvZnMveGZzL2xpYnhmcy94ZnNfc2IuYyBiL2ZzL3hmcy9saWJ4ZnMveGZzX3NiLmMKaW5kZXggNDczMjJhZGI3NjkwNTkuLjIyMmJiZTU1NTlkZjQ3IDEwMDY0NAotLS0gYS9mcy94ZnMvbGlieGZzL3hmc19zYi5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3hmcy9saWJ4ZnMveGZzX3NiLmMKQEAgLTE2NSw2ICYjNDM7MTY1LDggQEAgeGZzX3NiX3ZlcnNpb25fdG9fZmVhdHVyZXMoCiAJCWZlYXR1cmVzIHw9IFhGU19GRUFUX1JFRkxJTks7CiAJaWYgKHNicC0mZ3Q7c2JfZmVhdHVyZXNfcm9fY29tcGF0ICZhbXA7IFhGU19TQl9GRUFUX1JPX0NPTVBBVF9JTk9CVENOVCkKIAkJZmVhdHVyZXMgfD0gWEZTX0ZFQVRfSU5PQlRDTlQ7CiYjNDM7CWlmIChzYnAtJmd0O3NiX2ZlYXR1cmVzX3JvX2NvbXBhdCAmYW1wOyBYRlNfU0JfRkVBVF9ST19DT01QQVRfVkVSSVRZKQomIzQzOwkJZmVhdHVyZXMgfD0gWEZTX0ZFQVRfVkVSSVRZOwogCWlmIChzYnAtJmd0O3NiX2ZlYXR1cmVzX2luY29tcGF0ICZhbXA7IFhGU19TQl9GRUFUX0lOQ09NUEFUX0ZUWVBFKQogCQlmZWF0dXJlcyB8PSBYRlNfRkVBVF9GVFlQRTsKIAlpZiAoc2JwLSZndDtzYl9mZWF0dXJlc19pbmNvbXBhdCAmYW1wOyBYRlNfU0JfRkVBVF9JTkNPTVBBVF9TUElOT0RFUykKQEAgLTE1ODgsNiAmIzQzOzE1OTAsOCBAQCB4ZnNfZnNfZ2VvbWV0cnkoCiAJCWdlby0mZ3Q7ZmxhZ3MgfD0gWEZTX0ZTT1BfR0VPTV9GTEFHU19NRVRBRElSOwogCWlmICh4ZnNfaGFzX3pvbmVkKG1wKSkKIAkJZ2VvLSZndDtmbGFncyB8PSBYRlNfRlNPUF9HRU9NX0ZMQUdTX1pPTkVEOwomIzQzOwlpZiAoeGZzX2hhc192ZXJpdHkobXApKQomIzQzOwkJZ2VvLSZndDtmbGFncyB8PSBYRlNfRlNPUF9HRU9NX0ZMQUdTX1ZFUklUWTsKIAlnZW8tJmd0O3J0c2VjdHNpemUgPSBzYnAtJmd0O3NiX2Jsb2Nrc2l6ZTsKIAlnZW8tJmd0O2RpcmJsb2Nrc2l6ZSA9IHhmc19kaXIyX2RpcmJsb2NrX2J5dGVzKHNicCk7CiAKZGlmZiAtLWdpdCBhL2ZzL3hmcy9zY3J1Yi9jb21tb24uYyBiL2ZzL3hmcy9zY3J1Yi9jb21tb24uYwppbmRleCBlNTIzM2UzMWFiYjc1MC4uMTY3M2I1MjIyNDRkNzQgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9zY3J1Yi9jb21tb24uYwomIzQzOyYjNDM7JiM0MzsgYi9mcy94ZnMvc2NydWIvY29tbW9uLmMKQEAgLTQ1LDYgJiM0Mzs0NSw4IEBACiAjaW5jbHVkZSAmIzM0O3NjcnViL2hlYWx0aC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7c2NydWIvdGVtcGZpbGUuaCYjMzQ7CiAKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvZnN2ZXJpdHkuaCZndDsKJiM0MzsKIC8qIENvbW1vbiBjb2RlIGZvciB0aGUgbWV0YWRhdGEgc2NydWJiZXJzLiAqLwogCiAvKgpAQCAtMTc1NCwzICYjNDM7MTc1Niw1NCBAQCB4Y2hrX2lub2RlX2NvdW50X2Jsb2NrcygKIAlyZXR1cm4geGZzX2JtYXBfY291bnRfYmxvY2tzKHNjLSZndDt0cCwgc2MtJmd0O2lwLCB3aGljaGZvcmssIG5leHRlbnRzLAogCQkJY291bnQpOwogfQomIzQzOwomIzQzOy8qCiYjNDM7ICogSWYgdGhpcyBpbm9kZSBoYXMgU19WRVJJVFkgc2V0IG9uIGl0LCByZWFkIHRoZSB2ZXJpdHkgaW5mby4gSWYgdGhlIHJlYWRpbmcKJiM0MzsgKiBmYWlscyB3aXRoIGFueXRoaW5nIG90aGVyIHRoYW4gRU5PTUVNLCB0aGUgZmlsZSBpcyBjb3JydXB0LCB3aGljaCB3ZSBjYW4KJiM0MzsgKiBkZXRlY3QgbGF0ZXIgd2l0aCBmc3Zlcml0eV9hY3RpdmUuCiYjNDM7ICoKJiM0MzsgKiBDYWxsZXJzIG11c3QgaG9sZCB0aGUgSU9MT0NLIGFuZCBtdXN0IG5vdCBob2xkIHRoZSBJTE9DSyBvZiBzYy0mZ3Q7aXAgYmVjYXVzZQomIzQzOyAqIGFjdGl2YXRpb24gcmVhZHMgaW5vZGUgZGF0YS4KJiM0MzsgKi8KJiM0MztpbnQKJiM0Mzt4Y2hrX2lub2RlX3NldHVwX3Zlcml0eSgKJiM0MzsJc3RydWN0IHhmc19zY3J1Ygkqc2MpCiYjNDM7ewomIzQzOwlpbnQJCQllcnJvcjsKJiM0MzsKJiM0MzsJaWYgKCFmc3Zlcml0eV9hY3RpdmUoVkZTX0koc2MtJmd0O2lwKSkpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJZXJyb3IgPSBmc3Zlcml0eV9lbnN1cmVfdmVyaXR5X2luZm8oVkZTX0koc2MtJmd0O2lwKSk7CiYjNDM7CXN3aXRjaCAoZXJyb3IpIHsKJiM0MzsJY2FzZSAwOgomIzQzOwkJLyogZnN2ZXJpdHkgaXMgYWN0aXZlICovCiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSAtRU5PREFUQToKJiM0MzsJY2FzZSAtRU1TR1NJWkU6CiYjNDM7CWNhc2UgLUVJTlZBTDoKJiM0MzsJY2FzZSAtRUZTQ09SUlVQVEVEOgomIzQzOwljYXNlIC1FRkJJRzoKJiM0MzsJCS8qCiYjNDM7CQkgKiBUaGUgbm9uemVybyBlcnJubyBjb2RlcyBhYm92ZSBhcmUgdGhlIGVycm9yIGNvZGVzIHRoYXQgY2FuCiYjNDM7CQkgKiBiZSByZXR1cm5lZCBmcm9tIGZzdmVyaXR5IG9uIG1ldGFkYXRhIHZhbGlkYXRpb24gZXJyb3JzLgomIzQzOwkJICovCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCS8qIHJ1bnRpbWUgZXJyb3JzICovCiYjNDM7CQlyZXR1cm4gZXJyb3I7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogSXMgdGhpcyBhIHZlcml0eSBmaWxlIHRoYXQgZmFpbGVkIHRvIGFjdGl2YXRlPyAgQ2FsbGVycyBtdXN0IGhhdmUgdHJpZWQgdG8KJiM0MzsgKiBhY3RpdmF0ZSBmc3Zlcml0eSB2aWEgeGNoa19pbm9kZV9zZXR1cF92ZXJpdHkuCiYjNDM7ICovCiYjNDM7Ym9vbAomIzQzO3hjaGtfaW5vZGVfdmVyaXR5X2Jyb2tlbigKJiM0MzsJc3RydWN0IHhmc19pbm9kZQkqaXApCiYjNDM7ewomIzQzOwlyZXR1cm4gZnN2ZXJpdHlfYWN0aXZlKFZGU19JKGlwKSkgJmFtcDsmYW1wOyAhZnN2ZXJpdHlfZ2V0X2luZm8oVkZTX0koaXApKTsKJiM0Mzt9CmRpZmYgLS1naXQgYS9mcy94ZnMvc2NydWIvY29tbW9uLmggYi9mcy94ZnMvc2NydWIvY29tbW9uLmgKaW5kZXggOWQ2MjdmZDUwNjg3ZTQuLjNkZTJiNjAwOWE5OTQxIDEwMDY0NAotLS0gYS9mcy94ZnMvc2NydWIvY29tbW9uLmgKJiM0MzsmIzQzOyYjNDM7IGIvZnMveGZzL3NjcnViL2NvbW1vbi5oCkBAIC0yNjgsNiAmIzQzOzI2OCw4IEBAIGludCB4Y2hrX2lub2RlX2lzX2FsbG9jYXRlZChzdHJ1Y3QgeGZzX3NjcnViICpzYywgeGZzX2FnaW5vX3QgYWdpbm8sCiAJCWJvb2wgKmludXNlKTsKIGludCB4Y2hrX2lub2RlX2NvdW50X2Jsb2NrcyhzdHJ1Y3QgeGZzX3NjcnViICpzYywgaW50IHdoaWNoZm9yaywKIAkJeGZzX2V4dG51bV90ICpuZXh0ZW50cywgeGZzX2ZpbGJsa3NfdCAqY291bnQpOwomIzQzO2ludCB4Y2hrX2lub2RlX3NldHVwX3Zlcml0eShzdHJ1Y3QgeGZzX3NjcnViICpzYyk7CiYjNDM7Ym9vbCB4Y2hrX2lub2RlX3Zlcml0eV9icm9rZW4oc3RydWN0IHhmc19pbm9kZSAqaXApOwogCiBib29sIHhjaGtfaW5vZGVfaXNfZGlydHJlZV9yb290KGNvbnN0IHN0cnVjdCB4ZnNfaW5vZGUgKmlwKTsKIGJvb2wgeGNoa19pbm9kZV9pc19zYl9yb290ZWQoY29uc3Qgc3RydWN0IHhmc19pbm9kZSAqaXApOwpkaWZmIC0tZ2l0IGEvZnMveGZzL3NjcnViL2lub2RlLmMgYi9mcy94ZnMvc2NydWIvaW5vZGUuYwppbmRleCA2NWIxM2UzMTE5MTY4MS4uZDFjZGQ2YjQ0NWQwMTcgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9zY3J1Yi9pbm9kZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3hmcy9zY3J1Yi9pbm9kZS5jCkBAIC0zNiw2ICYjNDM7MzYsMTAgQEAgeGNoa19wcmVwYXJlX2lzY3J1YigKIAogCXhjaGtfaWxvY2soc2MsIFhGU19JT0xPQ0tfRVhDTCk7CiAKJiM0MzsJZXJyb3IgPSB4Y2hrX2lub2RlX3NldHVwX3Zlcml0eShzYyk7CiYjNDM7CWlmIChlcnJvcikKJiM0MzsJCXJldHVybiBlcnJvcjsKJiM0MzsKIAllcnJvciA9IHhjaGtfdHJhbnNfYWxsb2Moc2MsIDApOwogCWlmIChlcnJvcikKIAkJcmV0dXJuIGVycm9yOwpAQCAtODMzLDYgJiM0Mzs4MzcsOSBAQCB4Y2hrX2lub2RlKAogCWlmIChTX0lTUkVHKFZGU19JKHNjLSZndDtpcCktJmd0O2lfbW9kZSkpCiAJCXhjaGtfaW5vZGVfY2hlY2tfcmVmbGlua19pZmxhZyhzYywgSV9JTk8oc2MtJmd0O2lwKSk7CiAKJiM0MzsJaWYgKHhjaGtfaW5vZGVfdmVyaXR5X2Jyb2tlbihzYy0mZ3Q7aXApKQomIzQzOwkJeGNoa19pbm9fc2V0X2NvcnJ1cHQoc2MsIHNjLSZndDtzbS0mZ3Q7c21faW5vKTsKJiM0MzsKIAl4Y2hrX2lub2RlX2NoZWNrX3VubGlua2VkKHNjKTsKIAogCXhjaGtfaW5vZGVfeHJlZihzYywgSV9JTk8oc2MtJmd0O2lwKSwgJmFtcDtkaSk7CmRpZmYgLS1naXQgYS9mcy94ZnMvc2NydWIvaW5vZGVfcmVwYWlyLmMgYi9mcy94ZnMvc2NydWIvaW5vZGVfcmVwYWlyLmMKaW5kZXggNDkzZGNmNWNjNmMxNTkuLjkwZjg2MWJiNGVmODQ4IDEwMDY0NAotLS0gYS9mcy94ZnMvc2NydWIvaW5vZGVfcmVwYWlyLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMveGZzL3NjcnViL2lub2RlX3JlcGFpci5jCkBAIC01NzMsNiAmIzQzOzU3Myw4IEBAIHhyZXBfZGlub2RlX2ZsYWdzKAogCQlkaXAtJmd0O2RpX25yZXh0NjRfcGFkID0gMDsKIAllbHNlIGlmIChkaXAtJmd0O2RpX3ZlcnNpb24gJmd0Oz0gMykKIAkJZGlwLSZndDtkaV92M19wYWQgPSAwOwomIzQzOwlpZiAoIXhmc19oYXNfdmVyaXR5KG1wKSB8fCAhU19JU1JFRyhtb2RlKSkKJiM0MzsJCWZsYWdzMiAmYW1wOz0gflhGU19ESUZMQUcyX1ZFUklUWTsKIAogCWlmIChmbGFnczIgJmFtcDsgWEZTX0RJRkxBRzJfTUVUQURBVEEpIHsKIAkJeGZzX2ZhaWxhZGRyX3QJZmE7CkBAIC0xNjE3LDYgJiM0MzsxNjE5LDEwIEBAIHhyZXBfZGlub2RlX2NvcmUoCiAJaWYgKGlnZXRfZXJyb3IpCiAJCXJldHVybiBpZ2V0X2Vycm9yOwogCiYjNDM7CWVycm9yID0geGNoa19pbm9kZV9zZXR1cF92ZXJpdHkoc2MpOwomIzQzOwlpZiAoZXJyb3IpCiYjNDM7CQlyZXR1cm4gZXJyb3I7CiYjNDM7CiAJZXJyb3IgPSB4Y2hrX3RyYW5zX2FsbG9jKHNjLCAwKTsKIAlpZiAoZXJyb3IpCiAJCXJldHVybiBlcnJvcjsKQEAgLTIwMzUsNiAmIzQzOzIwNDEsMjcgQEAgeHJlcF9pbm9kZV91bmxpbmtlZCgKIAlyZXR1cm4gMDsKIH0KIAomIzQzOy8qCiYjNDM7ICogSWYgdGhpcyBmaWxlIGlzIGEgZnN2ZXJpdHkgZmlsZSwgeGNoa19wcmVwYXJlX2lzY3J1YiBvciB4cmVwX2Rpbm9kZV9jb3JlCiYjNDM7ICogc2hvdWxkIGhhdmUgYWN0aXZhdGVkIGl0LiAgSWYgaXQmIzM5O3Mgc3RpbGwgbm90IGFjdGl2ZSwgdGhlbiB0aGVyZSYjMzk7cyBzb21ldGhpbmcKJiM0MzsgKiB3cm9uZyB3aXRoIHRoZSB2ZXJpdHkgZGVzY3JpcHRvciBhbmQgd2Ugc2hvdWxkIHR1cm4gaXQgb2ZmLgomIzQzOyAqLwomIzQzO1NUQVRJQyBpbnQKJiM0Mzt4cmVwX2lub2RlX3Zlcml0eSgKJiM0MzsJc3RydWN0IHhmc19zY3J1Ygkqc2MpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaW5vZGUJCSppbm9kZSA9IFZGU19JKHNjLSZndDtpcCk7CiYjNDM7CiYjNDM7CWlmICh4Y2hrX2lub2RlX3Zlcml0eV9icm9rZW4oc2MtJmd0O2lwKSkgewomIzQzOwkJc2MtJmd0O2lwLSZndDtpX2RpZmxhZ3MyICZhbXA7PSB+WEZTX0RJRkxBRzJfVkVSSVRZOwomIzQzOwkJaW5vZGUtJmd0O2lfZmxhZ3MgJmFtcDs9IH5TX1ZFUklUWTsKJiM0MzsKJiM0MzsJCXhmc190cmFuc19sb2dfaW5vZGUoc2MtJmd0O3RwLCBzYy0mZ3Q7aXAsIFhGU19JTE9HX0NPUkUpOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIC8qIFJlcGFpciBhbiBpbm9kZSYjMzk7cyBmaWVsZHMuICovCiBpbnQKIHhyZXBfaW5vZGUoCkBAIC0yMDg0LDYgJiM0MzsyMTExLDE1IEBAIHhyZXBfaW5vZGUoCiAJCQlyZXR1cm4gZXJyb3I7CiAJfQogCiYjNDM7CS8qCiYjNDM7CSAqIERpc2FibGUgZnN2ZXJpdHkgaWYgaXQgY2Fubm90IGJlIGFjdGl2YXRlZC4gIEFjdGl2YXRpb24gZmFpbHVyZQomIzQzOwkgKiBwcm9oaWJpdHMgdGhlIGZpbGUgZnJvbSBiZWluZyBvcGVuZWQsIHNvIHRoZXJlIGNhbm5vdCBiZSBhbm90aGVyCiYjNDM7CSAqIHByb2dyYW0gd2l0aCBhbiBvcGVuIGZkIHRvIHdoYXQgaXQgdGhpbmtzIGlzIGEgdmVyaXR5IGZpbGUuCiYjNDM7CSAqLwomIzQzOwllcnJvciA9IHhyZXBfaW5vZGVfdmVyaXR5KHNjKTsKJiM0MzsJaWYgKGVycm9yKQomIzQzOwkJcmV0dXJuIGVycm9yOwomIzQzOwogCS8qIFJlY29ubmVjdCBpbmNvcmUgdW5saW5rZWQgbGlzdCAqLwogCWVycm9yID0geHJlcF9pbm9kZV91bmxpbmtlZChzYyk7CiAJaWYgKGVycm9yKQpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19hb3BzLmMgYi9mcy94ZnMveGZzX2FvcHMuYwppbmRleCA1MTI5M2I2ZjMzMWYwYi4uYjA1MzdjNjdlOTYwZTEgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfYW9wcy5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3hmcy94ZnNfYW9wcy5jCkBAIC0yMiw3ICYjNDM7MjIsOSBAQAogI2luY2x1ZGUgJiMzNDt4ZnNfaWNhY2hlLmgmIzM0OwogI2luY2x1ZGUgJiMzNDt4ZnNfem9uZV9hbGxvYy5oJiMzNDsKICNpbmNsdWRlICYjMzQ7eGZzX3J0Z3JvdXAuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDt4ZnNfZnN2ZXJpdHkuaCYjMzQ7CiAjaW5jbHVkZSAmbHQ7bGludXgvYmlvLWludGVncml0eS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9mc3Zlcml0eS5oJmd0OwogCiBzdHJ1Y3QgeGZzX3dyaXRlcGFnZV9jdHggewogCXN0cnVjdCBpb21hcF93cml0ZXBhZ2VfY3R4IGN0eDsKQEAgLTE4MSw2ICYjNDM7MTgzLDIzIEBAIHhmc19lbmRfaW9lbmRfd3JpdGUoCiAJbWVtYWxsb2Nfbm9mc19yZXN0b3JlKG5vZnNfZmxhZyk7CiB9CiAKJiM0MzsvKgomIzQzOyAqIElPIHJlYWQgY29tcGxldGlvbi4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZAomIzQzO3hmc19lbmRfaW9lbmRfcmVhZCgKJiM0MzsJc3RydWN0IGlvbWFwX2lvZW5kCSppb2VuZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB4ZnNfaW5vZGUJKmlwID0gWEZTX0koaW9lbmQtJmd0O2lvX2lub2RlKTsKJiM0MzsKJiM0MzsJaWYgKCFpb2VuZC0mZ3Q7aW9fYmlvLmJpX3N0YXR1cyAmYW1wOyZhbXA7CiYjNDM7CQkJeGZzX2ZzdmVyaXR5X2lzX2ZpbGVfZGF0YShpcCwgaW9lbmQtJmd0O2lvX29mZnNldCkpCiYjNDM7CQlmc3Zlcml0eV92ZXJpZnlfYmlvKGlvZW5kLSZndDtpb192aSwKJiM0MzsJCQkJICAgICZhbXA7aW9lbmQtJmd0O2lvX2Jpbyk7CiYjNDM7CWlvbWFwX2ZpbmlzaF9pb2VuZHMoaW9lbmQsCiYjNDM7CQlibGtfc3RhdHVzX3RvX2Vycm5vKGlvZW5kLSZndDtpb19iaW8uYmlfc3RhdHVzKSk7CiYjNDM7fQomIzQzOwogLyoKICAqIEZpbmlzaCBhbGwgcGVuZGluZyBJTyBjb21wbGV0aW9ucyB0aGF0IHJlcXVpcmUgdHJhbnNhY3Rpb25hbCBtb2RpZmljYXRpb25zLgogICoKQEAgLTIxNSw4ICYjNDM7MjM0LDcgQEAgeGZzX2VuZF9pbygKIAkJbGlzdF9kZWxfaW5pdCgmYW1wO2lvZW5kLSZndDtpb19saXN0KTsKIAkJaW9tYXBfaW9lbmRfdHJ5X21lcmdlKGlvZW5kLCAmYW1wO3RtcCk7CiAJCWlmIChiaW9fb3AoJmFtcDtpb2VuZC0mZ3Q7aW9fYmlvKSA9PSBSRVFfT1BfUkVBRCkKLQkJCWlvbWFwX2ZpbmlzaF9pb2VuZHMoaW9lbmQsCi0JCQkJYmxrX3N0YXR1c190b19lcnJubyhpb2VuZC0mZ3Q7aW9fYmlvLmJpX3N0YXR1cykpOwomIzQzOwkJCXhmc19lbmRfaW9lbmRfcmVhZChpb2VuZCk7CiAJCWVsc2UKIAkJCXhmc19lbmRfaW9lbmRfd3JpdGUoaW9lbmQpOwogCQljb25kX3Jlc2NoZWQoKTsKQEAgLTI0Miw5ICYjNDM7MjYwLDE0IEBAIHhmc19lbmRfYmlvKAogCX0KIAogCXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7aXAtJmd0O2lfaW9lbmRfbG9jaywgZmxhZ3MpOwotCWlmIChsaXN0X2VtcHR5KCZhbXA7aXAtJmd0O2lfaW9lbmRfbGlzdCkpCi0JCVdBUk5fT05fT05DRSghcXVldWVfd29yayhtcC0mZ3Q7bV91bndyaXR0ZW5fd29ya3F1ZXVlLAomIzQzOwlpZiAobGlzdF9lbXB0eSgmYW1wO2lwLSZndDtpX2lvZW5kX2xpc3QpKSB7CiYjNDM7CQlpZiAoSVNfRU5BQkxFRChDT05GSUdfRlNfVkVSSVRZKSAmYW1wOyZhbXA7IGlvZW5kLSZndDtpb192aSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgaW9lbmQtJmd0O2lvX29mZnNldCAmbHQ7IHhmc19mc3Zlcml0eV9tZXRhZGF0YV9vZmZzZXQoaXApKQomIzQzOwkJCWZzdmVyaXR5X2VucXVldWVfdmVyaWZ5X3dvcmsoJmFtcDtpcC0mZ3Q7aV9pb2VuZF93b3JrKTsKJiM0MzsJCWVsc2UKJiM0MzsJCQlXQVJOX09OX09OQ0UoIXF1ZXVlX3dvcmsobXAtJmd0O21fdW53cml0dGVuX3dvcmtxdWV1ZSwKIAkJCQkJICZhbXA7aXAtJmd0O2lfaW9lbmRfd29yaykpOwomIzQzOwl9CiAJbGlzdF9hZGRfdGFpbCgmYW1wO2lvZW5kLSZndDtpb19saXN0LCAmYW1wO2lwLSZndDtpX2lvZW5kX2xpc3QpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtpcC0mZ3Q7aV9pb2VuZF9sb2NrLCBmbGFncyk7CiB9CkBAIC0zNTAsMTIgJiM0MzszNzMsMTYgQEAgeGZzX21hcF9ibG9ja3MoCiAJaW50CQkJcmV0cmllcyA9IDA7CiAJaW50CQkJZXJyb3IgPSAwOwogCXVuc2lnbmVkIGludAkJKnNlcTsKJiM0MzsJdW5zaWduZWQgaW50CQlpb21hcF9mbGFncyA9IDA7CiAKIAlpZiAoeGZzX2lzX3NodXRkb3duKG1wKSkKIAkJcmV0dXJuIC1FSU87CiAKIAlYRlNfRVJST1JUQUdfREVMQVkobXAsIFhGU19FUlJUQUdfV0JfREVMQVlfTVMpOwogCiYjNDM7CWlmICh4ZnNfaWZsYWdzX3Rlc3QoaXAsIFhGU19WRVJJVFlfQ09OU1RSVUNUSU9OKSkKJiM0MzsJCWlvbWFwX2ZsYWdzIHw9IElPTUFQX0ZfRlNWRVJJVFk7CiYjNDM7CiAJLyoKIAkgKiBDT1cgZm9yayBibG9ja3MgY2FuIG92ZXJsYXAgZGF0YSBmb3JrIGJsb2NrcyBldmVuIGlmIHRoZSBibG9ja3MKIAkgKiBhcmVuJiMzOTt0IHNoYXJlZC4gIENPVyBJL08gYWx3YXlzIHRha2VzIHByZWNlZGVudCwgc28gd2UgbXVzdCBhbHdheXMKQEAgLTQ0Myw3ICYjNDM7NDcwLDggQEAgeGZzX21hcF9ibG9ja3MoCiAJICAgIGlzbnVsbHN0YXJ0YmxvY2soaW1hcC5icl9zdGFydGJsb2NrKSkKIAkJZ290byBhbGxvY2F0ZV9ibG9ja3M7CiAKLQl4ZnNfYm1idF90b19pb21hcChpcCwgJmFtcDt3cGMtJmd0O2lvbWFwLCAmYW1wO2ltYXAsIDAsIDAsIFhGU19XUEMod3BjKS0mZ3Q7ZGF0YV9zZXEpOwomIzQzOwl4ZnNfYm1idF90b19pb21hcChpcCwgJmFtcDt3cGMtJmd0O2lvbWFwLCAmYW1wO2ltYXAsIDAsIGlvbWFwX2ZsYWdzLAomIzQzOwkJCSAgWEZTX1dQQyh3cGMpLSZndDtkYXRhX3NlcSk7CiAJdHJhY2VfeGZzX21hcF9ibG9ja3NfZm91bmQoaXAsIG9mZnNldCwgY291bnQsIHdoaWNoZm9yaywgJmFtcDtpbWFwKTsKIAlyZXR1cm4gMDsKIGFsbG9jYXRlX2Jsb2NrczoKQEAgLTU5MCwxMiAmIzQzOzYxOCwxNiBAQCB4ZnNfem9uZWRfbWFwX2Jsb2NrcygKIAl4ZnNfZmlsYmxrc190CQljb3VudF9mc2I7CiAJc3RydWN0IHhmc19ibWJ0X2lyZWMJaW1hcCwgZGVsOwogCXN0cnVjdCB4ZnNfaWV4dF9jdXJzb3IJaWN1cjsKJiM0MzsJdTE2CQkJaW9tYXBfZmxhZ3MgPSAwOwogCiAJaWYgKHhmc19pc19zaHV0ZG93bihtcCkpCiAJCXJldHVybiAtRUlPOwogCiAJWEZTX0VSUk9SVEFHX0RFTEFZKG1wLCBYRlNfRVJSVEFHX1dCX0RFTEFZX01TKTsKIAomIzQzOwlpZiAoeGZzX2lmbGFnc190ZXN0KGlwLCBYRlNfVkVSSVRZX0NPTlNUUlVDVElPTikpCiYjNDM7CQlpb21hcF9mbGFncyB8PSBJT01BUF9GX0ZTVkVSSVRZOwomIzQzOwogCS8qCiAJICogQWxsIGRpcnR5IGRhdGEgbXVzdCBiZSBjb3ZlcmVkIGJ5IGRlbGFsbG9jIGV4dGVudHMuICBCdXQgdHJ1bmNhdGUgY2FuCiAJICogcmVtb3ZlIGRlbGFsbG9jIGV4dGVudHMgdW5kZXJuZWF0aCB1cyBvciByZWR1Y2UgdGhlaXIgc2l6ZS4KQEAgLTYxOSw3ICYjNDM7NjUxLDcgQEAgeGZzX3pvbmVkX21hcF9ibG9ja3MoCiAJCWltYXAuYnJfc3RhcnRibG9jayA9IEhPTEVTVEFSVEJMT0NLOwogCQlpbWFwLmJyX3N0YXRlID0gWEZTX0VYVF9OT1JNOwogCQl4ZnNfaXVubG9jayhpcCwgWEZTX0lMT0NLX0VYQ0wpOwotCQl4ZnNfYm1idF90b19pb21hcChpcCwgJmFtcDt3cGMtJmd0O2lvbWFwLCAmYW1wO2ltYXAsIDAsIDAsIDApOwomIzQzOwkJeGZzX2JtYnRfdG9faW9tYXAoaXAsICZhbXA7d3BjLSZndDtpb21hcCwgJmFtcDtpbWFwLCAwLCBpb21hcF9mbGFncywgMCk7CiAJCXJldHVybiAwOwogCX0KIAllbmRfZnNiID0gbWluKGVuZF9mc2IsIGltYXAuYnJfc3RhcnRvZmYgJiM0MzsgaW1hcC5icl9ibG9ja2NvdW50KTsKQEAgLTYzMiw3ICYjNDM7NjY0LDcgQEAgeGZzX3pvbmVkX21hcF9ibG9ja3MoCiAJeGZzX2l1bmxvY2soaXAsIFhGU19JTE9DS19FWENMKTsKIAogCXdwYy0mZ3Q7aW9tYXAudHlwZSA9IElPTUFQX01BUFBFRDsKLQl3cGMtJmd0O2lvbWFwLmZsYWdzID0gSU9NQVBfRl9ESVJUWTsKJiM0MzsJd3BjLSZndDtpb21hcC5mbGFncyA9IGlvbWFwX2ZsYWdzIHwgSU9NQVBfRl9ESVJUWTsKIAl3cGMtJmd0O2lvbWFwLmJkZXYgPSBtcC0mZ3Q7bV9ydGRldl90YXJncC0mZ3Q7YnRfYmRldjsKIAl3cGMtJmd0O2lvbWFwLm9mZnNldCA9IG9mZnNldDsKIAl3cGMtJmd0O2lvbWFwLmxlbmd0aCA9IFhGU19GU0JfVE9fQihtcCwgY291bnRfZnNiKTsKQEAgLTY4NCw2ICYjNDM7NzE2LDIyIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaW9tYXBfd3JpdGViYWNrX29wcyB4ZnNfem9uZWRfd3JpdGViYWNrX29wcyA9IHsKIAkud3JpdGViYWNrX3N1Ym1pdAk9IHhmc196b25lZF93cml0ZWJhY2tfc3VibWl0LAogfTsKIAomIzQzO3N0YXRpYyBpbnQKJiM0Mzt4ZnNfaW9tYXBfd3JpdGVwYWdlcygKJiM0MzsJc3RydWN0IHhmc19pbm9kZQkJKmlwLAomIzQzOwlzdHJ1Y3QgaW9tYXBfd3JpdGVwYWdlX2N0eAkqY3R4KQomIzQzO3sKJiM0MzsJLyoKJiM0MzsJICogV3JpdGViYWNrIGRvZXMgbm90IHdvcmsgZm9yIGZvbGlvcyBwYXN0IEVPRiwgbGV0IGl0IGtub3cgdGhhdAomIzQzOwkgKiBJL08gaGFwcGVucyBmb3IgZnN2ZXJpdHkgbWV0YWRhdGEgYW5kIHRoaXMgcmVzdHJpY3Rpb24gbmVlZAomIzQzOwkgKiB0byBiZSBza2lwcGVkCiYjNDM7CSAqLwomIzQzOwlpZiAoeGZzX2lmbGFnc190ZXN0KGlwLCBYRlNfVkVSSVRZX0NPTlNUUlVDVElPTikpCiYjNDM7CQljdHgtJmd0O2lvbWFwLmZsYWdzIHw9IElPTUFQX0ZfRlNWRVJJVFk7CiYjNDM7CiYjNDM7CXJldHVybiBpb21hcF93cml0ZXBhZ2VzKGN0eCk7CiYjNDM7fQomIzQzOwogU1RBVElDIGludAogeGZzX3ZtX3dyaXRlcGFnZXMoCiAJc3RydWN0IGFkZHJlc3Nfc3BhY2UJKm1hcHBpbmcsCkBAIC03MDMsNyAmIzQzOzc1MSw3IEBAIHhmc192bV93cml0ZXBhZ2VzKAogCQl9OwogCQlpbnQJCQkJZXJyb3I7CiAKLQkJZXJyb3IgPSBpb21hcF93cml0ZXBhZ2VzKCZhbXA7eGMuY3R4KTsKJiM0MzsJCWVycm9yID0geGZzX2lvbWFwX3dyaXRlcGFnZXMoaXAsICZhbXA7eGMuY3R4KTsKIAkJaWYgKHhjLm9wZW5fem9uZSkKIAkJCXhmc19vcGVuX3pvbmVfcHV0KHhjLm9wZW5fem9uZSk7CiAJCXJldHVybiBlcnJvcjsKQEAgLTcxNiw3ICYjNDM7NzY0LDcgQEAgeGZzX3ZtX3dyaXRlcGFnZXMoCiAJCQl9LAogCQl9OwogCi0JCXJldHVybiBpb21hcF93cml0ZXBhZ2VzKCZhbXA7d3BjLmN0eCk7CiYjNDM7CQlyZXR1cm4geGZzX2lvbWFwX3dyaXRlcGFnZXMoaXAsICZhbXA7d3BjLmN0eCk7CiAJfQogfQogCkBAIC03NjEsOSAmIzQzOzgwOSwxMiBAQCB4ZnNfYmlvX3N1Ym1pdF9yZWFkKAogCXN0cnVjdCBpb21hcF9yZWFkX2ZvbGlvX2N0eAkqY3R4KQogewogCXN0cnVjdCBiaW8JCQkqYmlvID0gY3R4LSZndDtyZWFkX2N0eDsKJiM0MzsJc3RydWN0IGlvbWFwX2lvZW5kCQkqaW9lbmQ7CiAKIAkvKiBkZWZlciByZWFkIGNvbXBsZXRpb25zIHRvIHRoZSBpb2VuZCB3b3JrcXVldWUgKi8KLQlpb21hcF9pbml0X2lvZW5kKGl0ZXItJmd0O2lub2RlLCBiaW8sIGN0eC0mZ3Q7cmVhZF9jdHhfZmlsZV9vZmZzZXQsIDApOwomIzQzOwlpb2VuZCA9IGlvbWFwX2luaXRfaW9lbmQoaXRlci0mZ3Q7aW5vZGUsIGJpbywgY3R4LSZndDtyZWFkX2N0eF9maWxlX29mZnNldCwKJiM0MzsJCQkwKTsKJiM0MzsJaW9lbmQtJmd0O2lvX3ZpID0gY3R4LSZndDt2aTsKIAlpb21hcF9iaW9fc3VibWl0X3JlYWRfZW5kaW8oaXRlciwgY3R4LCB4ZnNfZW5kX2Jpbyk7CiB9CiAKQEAgLTc3NSwxMSAmIzQzOzgyNiwxMyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGlvbWFwX3JlYWRfb3BzIHhmc19pb21hcF9yZWFkX29wcyA9IHsKIAogc3RhdGljIGlubGluZSBjb25zdCBzdHJ1Y3QgaW9tYXBfcmVhZF9vcHMgKgogeGZzX2dldF9pb21hcF9yZWFkX29wcygKLQljb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZQkqbWFwcGluZykKJiM0MzsJY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2UJKm1hcHBpbmcsCiYjNDM7CWxvZmZfdAkJCQlwb3NpdGlvbikKIHsKIAlzdHJ1Y3QgeGZzX2lub2RlCQkqaXAgPSBYRlNfSShtYXBwaW5nLSZndDtob3N0KTsKIAotCWlmIChiZGV2X2hhc19pbnRlZ3JpdHlfY3N1bSh4ZnNfaW5vZGVfYnVmdGFyZyhpcCktJmd0O2J0X2JkZXYpKQomIzQzOwlpZiAoYmRldl9oYXNfaW50ZWdyaXR5X2NzdW0oeGZzX2lub2RlX2J1ZnRhcmcoaXApLSZndDtidF9iZGV2KSB8fAomIzQzOwkJCXhmc19mc3Zlcml0eV9pc19maWxlX2RhdGEoaXAsIHBvc2l0aW9uKSkKIAkJcmV0dXJuICZhbXA7eGZzX2lvbWFwX3JlYWRfb3BzOwogCXJldHVybiAmYW1wO2lvbWFwX2Jpb19yZWFkX29wczsKIH0KQEAgLTc5MSw3ICYjNDM7ODQ0LDcgQEAgeGZzX3ZtX3JlYWRfZm9saW8oCiB7CiAJc3RydWN0IGlvbWFwX3JlYWRfZm9saW9fY3R4CWN0eCA9IHsgLmN1cl9mb2xpbyA9IGZvbGlvIH07CiAKLQljdHgub3BzID0geGZzX2dldF9pb21hcF9yZWFkX29wcyhmb2xpby0mZ3Q7bWFwcGluZyk7CiYjNDM7CWN0eC5vcHMgPSB4ZnNfZ2V0X2lvbWFwX3JlYWRfb3BzKGZvbGlvLSZndDttYXBwaW5nLCBmb2xpb19wb3MoZm9saW8pKTsKIAlpb21hcF9yZWFkX2ZvbGlvKCZhbXA7eGZzX3JlYWRfaW9tYXBfb3BzLCAmYW1wO2N0eCwgTlVMTCk7CiAJcmV0dXJuIDA7CiB9CkBAIC04MDIsNyAmIzQzOzg1NSw3IEBAIHhmc192bV9yZWFkYWhlYWQoCiB7CiAJc3RydWN0IGlvbWFwX3JlYWRfZm9saW9fY3R4CWN0eCA9IHsgLnJhYyA9IHJhYyB9OwogCi0JY3R4Lm9wcyA9IHhmc19nZXRfaW9tYXBfcmVhZF9vcHMocmFjLSZndDttYXBwaW5nKSwKJiM0MzsJY3R4Lm9wcyA9IHhmc19nZXRfaW9tYXBfcmVhZF9vcHMocmFjLSZndDttYXBwaW5nLCByZWFkYWhlYWRfcG9zKHJhYykpOwogCWlvbWFwX3JlYWRhaGVhZCgmYW1wO3hmc19yZWFkX2lvbWFwX29wcywgJmFtcDtjdHgsIE5VTEwpOwogfQogCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2JtYXBfdXRpbC5jIGIvZnMveGZzL3hmc19ibWFwX3V0aWwuYwppbmRleCAzYjlmMjYyZjhlOTEyOC4uYjM0ZjJmMjdjYzkzYTggMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfYm1hcF91dGlsLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMveGZzL3hmc19ibWFwX3V0aWwuYwpAQCAtMzEsNiAmIzQzOzMxLDcgQEAKICNpbmNsdWRlICYjMzQ7eGZzX3J0Yml0bWFwLmgmIzM0OwogI2luY2x1ZGUgJiMzNDt4ZnNfcnRncm91cC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7eGZzX3pvbmVfYWxsb2MuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2ZzdmVyaXR5LmgmZ3Q7CiAKIC8qIEtlcm5lbCBvbmx5IEJNQVAgcmVsYXRlZCBkZWZpbml0aW9ucyBhbmQgZnVuY3Rpb25zICovCiAKQEAgLTU1Myw2ICYjNDM7NTU0LDEzIEBAIHhmc19jYW5fZnJlZV9lb2ZibG9ja3MoCiAJaWYgKGxhc3RfZnNiICZsdDs9IGVuZF9mc2IpCiAJCXJldHVybiBmYWxzZTsKIAomIzQzOwkvKgomIzQzOwkgKiBOb3RoaW5nIHRvIGNsZWFuIG9uIGZzdmVyaXR5IGlub2RlcyBhcyB0aGV5IGRvbiYjMzk7dCB1c2UgcHJlYWxsb2MgYW5kCiYjNDM7CSAqIHRoZXJlIG5vIGRlbGFsbG9jIGFzIG9ubHkgd3JpdHRlbiBkYXRhIGlzIGZzdmVyaXR5IG1ldGFkYXRhCiYjNDM7CSAqLwomIzQzOwlpZiAoSVNfVkVSSVRZKFZGU19JKGlwKSkpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiAJLyoKIAkgKiBDaGVjayBpZiB0aGVyZSBpcyBhbiBwb3N0LUVPRiBleHRlbnQgdG8gZnJlZS4gIElmIHRoZXJlIGFyZSBhbnkKIAkgKiBkZWxhbGxvYyBibG9ja3MgYXR0YWNoZWQgdG8gdGhlIGlub2RlIChkYXRhIGZvcmsgZGVsYWxsb2MKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfZmlsZS5jIGIvZnMveGZzL3hmc19maWxlLmMKaW5kZXggODQ1YTk3YzliMDYzMGIuLmNiYTE5NGQ2NzhmYzc3IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2ZpbGUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy94ZnMveGZzX2ZpbGUuYwpAQCAtMzcsNiAmIzQzOzM3LDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9mYWR2aXNlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbW91bnQuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9maWxlbG9jay5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9mc3Zlcml0eS5oJmd0OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHhmc19maWxlX3ZtX29wczsKIApAQCAtMjQ1LDYgJiM0MzsyNDYsMjUgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBpb21hcF9kaW9fb3BzIHhmc19kaW9fcmVhZF9ib3VuY2Vfb3BzID0gewogCS5iaW9fc2V0CT0gJmFtcDtpb21hcF9pb2VuZF9iaW9zZXQsCiB9OwogCiYjNDM7U1RBVElDIHNzaXplX3QKJiM0Mzt4ZnNfZmlsZV9idWZmZXJlZF9yZWFkKAomIzQzOwlzdHJ1Y3Qga2lvY2IJCSppb2NiLAomIzQzOwlzdHJ1Y3QgaW92X2l0ZXIJCSp0bykKJiM0Mzt7CiYjNDM7CXN0cnVjdCB4ZnNfaW5vZGUJKmlwID0gWEZTX0koZmlsZV9pbm9kZShpb2NiLSZndDtraV9maWxwKSk7CiYjNDM7CXNzaXplX3QJCQlyZXQ7CiYjNDM7CiYjNDM7CXRyYWNlX3hmc19maWxlX2J1ZmZlcmVkX3JlYWQoaW9jYiwgdG8pOwomIzQzOwomIzQzOwlyZXQgPSB4ZnNfaWxvY2tfaW9jYihpb2NiLCBYRlNfSU9MT0NLX1NIQVJFRCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwlyZXQgPSBnZW5lcmljX2ZpbGVfcmVhZF9pdGVyKGlvY2IsIHRvKTsKJiM0MzsJeGZzX2l1bmxvY2soaXAsIFhGU19JT0xPQ0tfU0hBUkVEKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiBTVEFUSUMgc3NpemVfdAogeGZzX2ZpbGVfZGlvX3JlYWQoCiAJc3RydWN0IGtpb2NiCQkqaW9jYiwKQEAgLTI2NSw2ICYjNDM7Mjg1LDE2IEBAIHhmc19maWxlX2Rpb19yZWFkKAogCXJldCA9IHhmc19pbG9ja19pb2NiKGlvY2IsIFhGU19JT0xPQ0tfU0hBUkVEKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwomIzQzOwkvKgomIzQzOwkgKiBSZS1jaGVjayB2ZXJpdHkgc3RhdHVzIGFmdGVyIGFjcXVpcmluZyBsb2NrLiBUaGlzIHByZXZlbnRzIFRPQ1RPVSBpbgomIzQzOwkgKiB4ZnNfZmlsZV9yZWFkX2l0ZXIoKSB3aGlsZSBmYWxsaW5nIGJhY2sgZnJvbSBESU8gdG8gYnVmZmVyZWQgSS9PIGFzCiYjNDM7CSAqIG5vdyB3ZSBhcmUgaG9sZGluZyBhIGxvY2sKJiM0MzsJICovCiYjNDM7CWlmIChmc3Zlcml0eV9hY3RpdmUoVkZTX0koaXApKSkgewomIzQzOwkJeGZzX2l1bmxvY2soaXAsIFhGU19JT0xPQ0tfU0hBUkVEKTsKJiM0MzsJCWlvY2ItJmd0O2tpX2ZsYWdzICZhbXA7PSB+SU9DQl9ESVJFQ1Q7CiYjNDM7CQlyZXR1cm4geGZzX2ZpbGVfYnVmZmVyZWRfcmVhZChpb2NiLCB0byk7CiYjNDM7CX0KIAlpZiAobWFwcGluZ19zdGFibGVfd3JpdGVzKGlvY2ItJmd0O2tpX2ZpbHAtJmd0O2ZfbWFwcGluZykpIHsKIAkJZGlvX29wcyA9ICZhbXA7eGZzX2Rpb19yZWFkX2JvdW5jZV9vcHM7CiAJCWRpb19mbGFncyB8PSBJT01BUF9ESU9fQk9VTkNFOwpAQCAtMjgxLDcgJiM0MzszMTEsOCBAQCB4ZnNfZmlsZV9kYXhfcmVhZCgKIAlzdHJ1Y3Qga2lvY2IJCSppb2NiLAogCXN0cnVjdCBpb3ZfaXRlcgkJKnRvKQogewotCXN0cnVjdCB4ZnNfaW5vZGUJKmlwID0gWEZTX0koaW9jYi0mZ3Q7a2lfZmlscC0mZ3Q7Zl9tYXBwaW5nLSZndDtob3N0KTsKJiM0MzsJc3RydWN0IGlub2RlCQkqaW5vZGUgPSBpb2NiLSZndDtraV9maWxwLSZndDtmX21hcHBpbmctJmd0O2hvc3Q7CiYjNDM7CXN0cnVjdCB4ZnNfaW5vZGUJKmlwID0gWEZTX0koaW5vZGUpOwogCXNzaXplX3QJCQlyZXQgPSAwOwogCiAJdHJhY2VfeGZzX2ZpbGVfZGF4X3JlYWQoaW9jYiwgdG8pOwpAQCAtMjk5LDI1ICYjNDM7MzMwLDYgQEAgeGZzX2ZpbGVfZGF4X3JlYWQoCiAJcmV0dXJuIHJldDsKIH0KIAotU1RBVElDIHNzaXplX3QKLXhmc19maWxlX2J1ZmZlcmVkX3JlYWQoCi0Jc3RydWN0IGtpb2NiCQkqaW9jYiwKLQlzdHJ1Y3QgaW92X2l0ZXIJCSp0bykKLXsKLQlzdHJ1Y3QgeGZzX2lub2RlCSppcCA9IFhGU19JKGZpbGVfaW5vZGUoaW9jYi0mZ3Q7a2lfZmlscCkpOwotCXNzaXplX3QJCQlyZXQ7Ci0KLQl0cmFjZV94ZnNfZmlsZV9idWZmZXJlZF9yZWFkKGlvY2IsIHRvKTsKLQotCXJldCA9IHhmc19pbG9ja19pb2NiKGlvY2IsIFhGU19JT0xPQ0tfU0hBUkVEKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCXJldCA9IGdlbmVyaWNfZmlsZV9yZWFkX2l0ZXIoaW9jYiwgdG8pOwotCXhmc19pdW5sb2NrKGlwLCBYRlNfSU9MT0NLX1NIQVJFRCk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCiBTVEFUSUMgc3NpemVfdAogeGZzX2ZpbGVfcmVhZF9pdGVyKAogCXN0cnVjdCBraW9jYgkJKmlvY2IsCkBAIC0zMzIsNiAmIzQzOzM0NCwxNCBAQCB4ZnNfZmlsZV9yZWFkX2l0ZXIoCiAJaWYgKHhmc19pc19zaHV0ZG93bihtcCkpCiAJCXJldHVybiAtRUlPOwogCiYjNDM7CS8qCiYjNDM7CSAqIEluIGNhc2UgZnMtdmVyaXR5IGlzIGVuYWJsZWQsIHdlIGFsc28gZmFsbGJhY2sgdG8gdGhlIGJ1ZmZlcmVkIHJlYWQKJiM0MzsJICogZnJvbSB0aGUgZGlyZWN0IHJlYWQgcGF0aC4gVGhlcmVmb3JlLCBJT0NCX0RJUkVDVCBpcyBzZXQgYW5kIG5lZWQgdG8KJiM0MzsJICogYmUgY2xlYXJlZCAoc2VlIGdlbmVyaWNfZmlsZV9yZWFkX2l0ZXIoKSkKJiM0MzsJICovCiYjNDM7CWlmIChmc3Zlcml0eV9hY3RpdmUoaW5vZGUpKQomIzQzOwkJaW9jYi0mZ3Q7a2lfZmxhZ3MgJmFtcDs9IH5JT0NCX0RJUkVDVDsKJiM0MzsKIAlpZiAoSVNfREFYKGlub2RlKSkKIAkJcmV0ID0geGZzX2ZpbGVfZGF4X3JlYWQoaW9jYiwgdG8pOwogCWVsc2UgaWYgKGlvY2ItJmd0O2tpX2ZsYWdzICZhbXA7IElPQ0JfRElSRUNUKQpAQCAtMTcwMCwxMSAmIzQzOzE3MjAsMTggQEAgeGZzX2ZpbGVfb3BlbigKIAlzdHJ1Y3QgaW5vZGUJKmlub2RlLAogCXN0cnVjdCBmaWxlCSpmaWxlKQogewomIzQzOwlpbnQJCWVycm9yOwomIzQzOwogCWlmICh4ZnNfaXNfc2h1dGRvd24oWEZTX00oaW5vZGUtJmd0O2lfc2IpKSkKIAkJcmV0dXJuIC1FSU87CiAJZmlsZS0mZ3Q7Zl9tb2RlIHw9IEZNT0RFX05PV0FJVCB8IEZNT0RFX0NBTl9PRElSRUNUOwogCWlmICh4ZnNfZ2V0X2F0b21pY193cml0ZV9taW4oWEZTX0koaW5vZGUpKSAmZ3Q7IDApCiAJCWZpbGUtJmd0O2ZfbW9kZSB8PSBGTU9ERV9DQU5fQVRPTUlDX1dSSVRFOwomIzQzOwomIzQzOwllcnJvciA9IGZzdmVyaXR5X2ZpbGVfb3Blbihpbm9kZSwgZmlsZSk7CiYjNDM7CWlmIChlcnJvcikKJiM0MzsJCXJldHVybiBlcnJvcjsKJiM0MzsKIAlyZXR1cm4gZ2VuZXJpY19maWxlX29wZW4oaW5vZGUsIGZpbGUpOwogfQogCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2ZzdmVyaXR5LmMgYi9mcy94ZnMveGZzX2ZzdmVyaXR5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAuLjk3MzI4MTFhMTQ0NGU2Ci0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvZnMveGZzL3hmc19mc3Zlcml0eS5jCkBAIC0wLDAgJiM0MzsxLDQ3MyBAQAomIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovCiYjNDM7LyoKJiM0MzsgKiBDb3B5cmlnaHQgKEMpIDIwMjYgUmVkIEhhdCwgSW5jLgomIzQzOyAqLwomIzQzOyNpbmNsdWRlICYjMzQ7eGZzX3BsYXRmb3JtLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7eGZzX2Zvcm1hdC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O3hmc19zaGFyZWQuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDt4ZnNfdHJhbnNfcmVzdi5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O3hmc19tb3VudC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O3hmc19kYV9mb3JtYXQuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDt4ZnNfZGFfYnRyZWUuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDt4ZnNfaW5vZGUuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDt4ZnNfbG9nX2Zvcm1hdC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O3hmc19ibWFwX3V0aWwuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDt4ZnNfdHJhbnMuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDt4ZnNfdHJhY2UuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDt4ZnNfcXVvdGEuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDt4ZnNfZnN2ZXJpdHkuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDt4ZnNfaW9tYXAuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDt4ZnNfZXJyb3IuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDt4ZnNfaGVhbHRoLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7eGZzX2JtYXAuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDt4ZnNfYm1hcF91dGlsLmgmIzM0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9mc3Zlcml0eS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9pb21hcC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9wYWdlbWFwLmgmZ3Q7CiYjNDM7CiYjNDM7bG9mZl90CiYjNDM7eGZzX2ZzdmVyaXR5X21ldGFkYXRhX29mZnNldCgKJiM0MzsJY29uc3Qgc3RydWN0IHhmc19pbm9kZQkqaXApCiYjNDM7ewomIzQzOwlyZXR1cm4gcm91bmRfdXAoaV9zaXplX3JlYWQoVkZTX0lDKGlwKSksIFhGU19GU1ZFUklUWV9TVEFSVF9BTElHTik7CiYjNDM7fQomIzQzOwomIzQzO2Jvb2wKJiM0Mzt4ZnNfZnN2ZXJpdHlfaXNfZmlsZV9kYXRhKAomIzQzOwljb25zdCBzdHJ1Y3QgeGZzX2lub2RlCSppcCwKJiM0MzsJbG9mZl90CQkJb2Zmc2V0KQomIzQzO3sKJiM0MzsJcmV0dXJuIGZzdmVyaXR5X2FjdGl2ZShWRlNfSUMoaXApKSAmYW1wOyZhbXA7CiYjNDM7CQkJb2Zmc2V0ICZsdDsgeGZzX2ZzdmVyaXR5X21ldGFkYXRhX29mZnNldChpcCk7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogUmV0cmlldmUgdGhlIHZlcml0eSBkZXNjcmlwdG9yLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQKJiM0Mzt4ZnNfZnN2ZXJpdHlfZ2V0X2Rlc2NyaXB0b3IoCiYjNDM7CXN0cnVjdCBpbm9kZQkJKmlub2RlLAomIzQzOwl2b2lkCQkJKmJ1ZiwKJiM0MzsJc2l6ZV90CQkJYnVmX3NpemUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeGZzX2lub2RlCSppcCA9IFhGU19JKGlub2RlKTsKJiM0MzsJc3RydWN0IHhmc19tb3VudAkqbXAgPSBpcC0mZ3Q7aV9tb3VudDsKJiM0MzsJX19iZTMyCQkJZF9kZXNjX3NpemU7CiYjNDM7CXUzMgkJCWRlc2Nfc2l6ZTsKJiM0MzsJdTY0CQkJZGVzY19zaXplX3BvczsKJiM0MzsJaW50CQkJZXJyb3I7CiYjNDM7CXU2NAkJCWRlc2NfcG9zOwomIzQzOwlzdHJ1Y3QgeGZzX2JtYnRfaXJlYwlyZWM7CiYjNDM7CWludAkJCWlzX2VtcHR5OwomIzQzOwl1aW50MzJfdAkJYmxvY2tzaXplID0gaV9ibG9ja3NpemUoVkZTX0koaXApKTsKJiM0MzsJeGZzX2ZpbGVvZmZfdAkJbGFzdF9ibG9ja19vZmZzZXQ7CiYjNDM7CiYjNDM7CUFTU0VSVChpbm9kZS0mZ3Q7aV9mbGFncyAmYW1wOyBTX1ZFUklUWSk7CiYjNDM7CXhmc19pbG9jayhpcCwgWEZTX0lMT0NLX1NIQVJFRCk7CiYjNDM7CWVycm9yID0geGZzX2JtYXBfbGFzdF9leHRlbnQoTlVMTCwgaXAsIFhGU19EQVRBX0ZPUkssICZhbXA7cmVjLCAmYW1wO2lzX2VtcHR5KTsKJiM0MzsJeGZzX2l1bmxvY2soaXAsIFhGU19JTE9DS19TSEFSRUQpOwomIzQzOwlpZiAoZXJyb3IpCiYjNDM7CQlyZXR1cm4gZXJyb3I7CiYjNDM7CiYjNDM7CWlmIChpc19lbXB0eSkKJiM0MzsJCXJldHVybiAtRU5PREFUQTsKJiM0MzsKJiM0MzsJbGFzdF9ibG9ja19vZmZzZXQgPQomIzQzOwkJWEZTX0ZTQl9UT19CKG1wLCByZWMuYnJfc3RhcnRvZmYgJiM0MzsgcmVjLmJyX2Jsb2NrY291bnQpOwomIzQzOwlpZiAobGFzdF9ibG9ja19vZmZzZXQgJmx0Oz0geGZzX2ZzdmVyaXR5X21ldGFkYXRhX29mZnNldChpcCkpCiYjNDM7CQlyZXR1cm4gLUVOT0RBVEE7CiYjNDM7CiYjNDM7CWRlc2Nfc2l6ZV9wb3MgPSBsYXN0X2Jsb2NrX29mZnNldCAtIHNpemVvZihfX2JlMzIpOwomIzQzOwllcnJvciA9IGZzdmVyaXR5X3BhZ2VjYWNoZV9yZWFkKGlub2RlLCAoY2hhciAqKSZhbXA7ZF9kZXNjX3NpemUsCiYjNDM7CQkJc2l6ZW9mKGRfZGVzY19zaXplKSwgZGVzY19zaXplX3Bvcyk7CiYjNDM7CWlmIChlcnJvcikKJiM0MzsJCXJldHVybiBlcnJvcjsKJiM0MzsKJiM0MzsJZGVzY19zaXplID0gYmUzMl90b19jcHUoZF9kZXNjX3NpemUpOwomIzQzOwlpZiAoWEZTX0lTX0NPUlJVUFQobXAsIGRlc2Nfc2l6ZSAmZ3Q7IEZTX1ZFUklUWV9NQVhfREVTQ1JJUFRPUl9TSVpFKSkgewomIzQzOwkJeGZzX2lub2RlX21hcmtfc2ljayhYRlNfSShpbm9kZSksIFhGU19TSUNLX0lOT19GU1ZFUklUWSk7CiYjNDM7CQlyZXR1cm4gLUVSQU5HRTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoWEZTX0lTX0NPUlJVUFQobXAsIGRlc2Nfc2l6ZSAmZ3Q7IGRlc2Nfc2l6ZV9wb3MpKSB7CiYjNDM7CQl4ZnNfaW5vZGVfbWFya19zaWNrKFhGU19JKGlub2RlKSwgWEZTX1NJQ0tfSU5PX0ZTVkVSSVRZKTsKJiM0MzsJCXJldHVybiAtRVJBTkdFOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICghYnVmX3NpemUpCiYjNDM7CQlyZXR1cm4gZGVzY19zaXplOwomIzQzOwomIzQzOwlpZiAoWEZTX0lTX0NPUlJVUFQobXAsIGRlc2Nfc2l6ZSAmZ3Q7IGJ1Zl9zaXplKSkgewomIzQzOwkJeGZzX2lub2RlX21hcmtfc2ljayhYRlNfSShpbm9kZSksIFhGU19TSUNLX0lOT19GU1ZFUklUWSk7CiYjNDM7CQlyZXR1cm4gLUVSQU5HRTsKJiM0MzsJfQomIzQzOwomIzQzOwlkZXNjX3BvcyA9IHJvdW5kX2Rvd24oZGVzY19zaXplX3BvcyAtIGRlc2Nfc2l6ZSwgYmxvY2tzaXplKTsKJiM0MzsJaWYgKGRlc2NfcG9zICZsdDsgeGZzX2ZzdmVyaXR5X21ldGFkYXRhX29mZnNldChpcCkpIHsKJiM0MzsJCXhmc19pbm9kZV9tYXJrX3NpY2soWEZTX0koaW5vZGUpLCBYRlNfU0lDS19JTk9fRlNWRVJJVFkpOwomIzQzOwkJcmV0dXJuIC1FUkFOR0U7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZXJyb3IgPSBmc3Zlcml0eV9wYWdlY2FjaGVfcmVhZChpbm9kZSwgYnVmLCBkZXNjX3NpemUsIGRlc2NfcG9zKTsKJiM0MzsJaWYgKGVycm9yKQomIzQzOwkJcmV0dXJuIGVycm9yOwomIzQzOwomIzQzOwlyZXR1cm4gZGVzY19zaXplOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50CiYjNDM7eGZzX2ZzdmVyaXR5X3dyaXRlX2Rlc2NyaXB0b3IoCiYjNDM7CXN0cnVjdCBmaWxlCQkqZmlsZSwKJiM0MzsJY29uc3Qgdm9pZAkJKmRlc2MsCiYjNDM7CXUzMgkJCWRlc2Nfc2l6ZSwKJiM0MzsJdTY0CQkJbWVya2xlX3RyZWVfc2l6ZSkKJiM0Mzt7CiYjNDM7CWludAkJCWVycm9yOwomIzQzOwlzdHJ1Y3QgaW5vZGUJCSppbm9kZSA9IGZpbGVfaW5vZGUoZmlsZSk7CiYjNDM7CXN0cnVjdCB4ZnNfaW5vZGUJKmlwID0gWEZTX0koaW5vZGUpOwomIzQzOwl1bnNpZ25lZCBpbnQJCWJsa3NpemUgPSBpcC0mZ3Q7aV9tb3VudC0mZ3Q7bV9zYi5zYl9ibG9ja3NpemU7CiYjNDM7CXU2NAkJCXRyZWVfbGFzdF9ibG9jayA9CiYjNDM7CQkJeGZzX2ZzdmVyaXR5X21ldGFkYXRhX29mZnNldChpcCkgJiM0MzsgbWVya2xlX3RyZWVfc2l6ZTsKJiM0MzsJdTY0CQkJZGVzY19wb3MgPQomIzQzOwkJCXJvdW5kX3VwKHRyZWVfbGFzdF9ibG9jaywgWEZTX0ZTVkVSSVRZX1NUQVJUX0FMSUdOKTsKJiM0MzsJdTY0CQkJZGVzY19lbmQgPSBkZXNjX3BvcyAmIzQzOyBkZXNjX3NpemU7CiYjNDM7CV9fYmUzMgkJCWRlc2Nfc2l6ZV9kaXNrID0gY3B1X3RvX2JlMzIoZGVzY19zaXplKTsKJiM0MzsJdTY0CQkJZGVzY19zaXplX3BvcyA9CiYjNDM7CQkJcm91bmRfdXAoZGVzY19lbmQgJiM0Mzsgc2l6ZW9mKGRlc2Nfc2l6ZV9kaXNrKSwgYmxrc2l6ZSkgLQomIzQzOwkJCXNpemVvZihkZXNjX3NpemVfZGlzayk7CiYjNDM7CiYjNDM7CWVycm9yID0gaW9tYXBfZnN2ZXJpdHlfd3JpdGUoZmlsZSwgZGVzY19zaXplX3Bvcywgc2l6ZW9mKF9fYmUzMiksCiYjNDM7CQkJKGNvbnN0IHZvaWQgKikmYW1wO2Rlc2Nfc2l6ZV9kaXNrLAomIzQzOwkJCSZhbXA7eGZzX2J1ZmZlcmVkX3dyaXRlX2lvbWFwX29wcywKJiM0MzsJCQkmYW1wO3hmc19pb21hcF93cml0ZV9vcHMpOwomIzQzOwlpZiAoZXJyb3IpCiYjNDM7CQlyZXR1cm4gZXJyb3I7CiYjNDM7CiYjNDM7CXJldHVybiBpb21hcF9mc3Zlcml0eV93cml0ZShmaWxlLCBkZXNjX3BvcywgZGVzY19zaXplLCBkZXNjLAomIzQzOwkJCSZhbXA7eGZzX2J1ZmZlcmVkX3dyaXRlX2lvbWFwX29wcywKJiM0MzsJCQkmYW1wO3hmc19pb21hcF93cml0ZV9vcHMpOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIFRyeSB0byByZW1vdmUgYWxsIHRoZSBmc3Zlcml0eSBtZXRhZGF0YSBhZnRlciBhIGZhaWxlZCBlbmFibGVtZW50LgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQKJiM0Mzt4ZnNfZnN2ZXJpdHlfZGVsZXRlX21ldGFkYXRhKAomIzQzOwlzdHJ1Y3QgeGZzX2lub2RlCSppcCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB4ZnNfdHJhbnMJKnRwOwomIzQzOwlzdHJ1Y3QgeGZzX21vdW50CSptcCA9IGlwLSZndDtpX21vdW50OwomIzQzOwlpbnQJCQllcnJvcjsKJiM0MzsKJiM0MzsJZXJyb3IgPSB4ZnNfdHJhbnNfYWxsb2MobXAsICZhbXA7TV9SRVMobXApLSZndDt0cl9pdHJ1bmNhdGUsIDAsIDAsIDAsICZhbXA7dHApOwomIzQzOwlpZiAoZXJyb3IpCiYjNDM7CQlyZXR1cm4gZXJyb3I7CiYjNDM7CiYjNDM7CXhmc19pbG9jayhpcCwgWEZTX0lMT0NLX0VYQ0wpOwomIzQzOwl4ZnNfdHJhbnNfaWpvaW4odHAsIGlwLCAwKTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogV2UgcmVtb3ZpbmcgcG9zdCBFT0YgZGF0YSwgbm8gbmVlZCB0byB1cGRhdGUgaV9zaXplIGFzIGZzdmVyaXR5CiYjNDM7CSAqIGRpZG4mIzM5O3QgbW92ZSBpX3NpemUgaW4gdGhlIGZpcnN0IHBsYWNlCiYjNDM7CSAqLwomIzQzOwllcnJvciA9IHhmc19pdHJ1bmNhdGVfZXh0ZW50cygmYW1wO3RwLCBpcCwgWEZTX0RBVEFfRk9SSywgWEZTX0lTSVpFKGlwKSk7CiYjNDM7CWlmIChlcnJvcikKJiM0MzsJCWdvdG8gZXJyX2NhbmNlbDsKJiM0MzsKJiM0MzsJZXJyb3IgPSB4ZnNfdHJhbnNfY29tbWl0KHRwKTsKJiM0MzsJaWYgKGVycm9yKQomIzQzOwkJZ290byBvdXRfdW5sb2NrOwomIzQzO291dF91bmxvY2s6CiYjNDM7CXhmc19pdW5sb2NrKGlwLCBYRlNfSUxPQ0tfRVhDTCk7CiYjNDM7CXJldHVybiBlcnJvcjsKJiM0MzsKJiM0MztlcnJfY2FuY2VsOgomIzQzOwl4ZnNfdHJhbnNfY2FuY2VsKHRwKTsKJiM0MzsJeGZzX2l1bmxvY2soaXAsIFhGU19JTE9DS19FWENMKTsKJiM0MzsJcmV0dXJuIGVycm9yOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50CiYjNDM7eGZzX2ZzdmVyaXR5X2NhbmNlbF91bndyaXR0ZW4oCiYjNDM7CXN0cnVjdCB4ZnNfaW5vZGUJKmlwLAomIzQzOwlsb2ZmX3QJCQlzdGFydCwKJiM0MzsJbG9mZl90CQkJZW5kKQomIzQzO3sKJiM0MzsJc3RydWN0IHhmc19tb3VudAkqbXAgPSBpcC0mZ3Q7aV9tb3VudDsKJiM0MzsJc3RydWN0IHhmc190cmFucwkqdHA7CiYjNDM7CXhmc19maWxlb2ZmX3QJCW9mZnNldF9mc2IgPSBYRlNfQl9UT19GU0IobXAsIHN0YXJ0KTsKJiM0MzsJeGZzX2ZpbGVvZmZfdAkJZW5kX2ZzYiA9IFhGU19CX1RPX0ZTQihtcCwgZW5kKTsKJiM0MzsJc3RydWN0IHhmc19ibWJ0X2lyZWMJaW1hcDsKJiM0MzsJaW50CQkJbmltYXBzOwomIzQzOwlpbnQJCQllcnJvciA9IDA7CiYjNDM7CWludAkJCWRvbmU7CiYjNDM7CiYjNDM7CiYjNDM7CXdoaWxlIChvZmZzZXRfZnNiICZsdDsgZW5kX2ZzYikgewomIzQzOwkJbmltYXBzID0gMTsKJiM0MzsKJiM0MzsJCWVycm9yID0geGZzX3RyYW5zX2FsbG9jKG1wLCAmYW1wO01fUkVTKG1wKS0mZ3Q7dHJfd3JpdGUsIDAsIDAsCiYjNDM7CQkJCTAsICZhbXA7dHApOwomIzQzOwkJaWYgKGVycm9yKQomIzQzOwkJCXJldHVybiBlcnJvcjsKJiM0MzsKJiM0MzsJCXhmc19pbG9jayhpcCwgWEZTX0lMT0NLX0VYQ0wpOwomIzQzOwkJZXJyb3IgPSB4ZnNfYm1hcGlfcmVhZChpcCwgb2Zmc2V0X2ZzYiwgZW5kX2ZzYiAtIG9mZnNldF9mc2IsCiYjNDM7CQkJCSZhbXA7aW1hcCwgJmFtcDtuaW1hcHMsIDApOwomIzQzOwkJaWYgKGVycm9yKQomIzQzOwkJCWdvdG8gb3V0X2NhbmNlbDsKJiM0MzsKJiM0MzsJCWlmIChuaW1hcHMgPT0gMCkKJiM0MzsJCQlnb3RvIG91dF9jYW5jZWw7CiYjNDM7CiYjNDM7CQlpZiAoaW1hcC5icl9zdGF0ZSA9PSBYRlNfRVhUX1VOV1JJVFRFTikgewomIzQzOwkJCXhmc190cmFuc19pam9pbih0cCwgaXAsIFhGU19JTE9DS19FWENMKTsKJiM0MzsKJiM0MzsJCQllcnJvciA9IHhmc19idW5tYXBpKHRwLCBpcCwgaW1hcC5icl9zdGFydG9mZiwKJiM0MzsJCQkJCWltYXAuYnJfYmxvY2tjb3VudCwgMCwgMSwgJmFtcDtkb25lKTsKJiM0MzsJCQlpZiAoZXJyb3IpCiYjNDM7CQkJCWdvdG8gb3V0X2NhbmNlbDsKJiM0MzsKJiM0MzsJCQllcnJvciA9IHhmc190cmFuc19jb21taXQodHApOwomIzQzOwkJCWlmIChlcnJvcikKJiM0MzsJCQkJcmV0dXJuIGVycm9yOwomIzQzOwkJfSBlbHNlIHsKJiM0MzsJCQl4ZnNfdHJhbnNfY2FuY2VsKHRwKTsKJiM0MzsJCQl4ZnNfaXVubG9jayhpcCwgWEZTX0lMT0NLX0VYQ0wpOwomIzQzOwkJfQomIzQzOwomIzQzOwkJb2Zmc2V0X2ZzYiA9IGltYXAuYnJfc3RhcnRvZmYgJiM0MzsgaW1hcC5icl9ibG9ja2NvdW50OwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBlcnJvcjsKJiM0MztvdXRfY2FuY2VsOgomIzQzOwl4ZnNfdHJhbnNfY2FuY2VsKHRwKTsKJiM0MzsJeGZzX2l1bmxvY2soaXAsIFhGU19JTE9DS19FWENMKTsKJiM0MzsJcmV0dXJuIGVycm9yOwomIzQzO30KJiM0MzsKJiM0MzsKJiM0MzsvKgomIzQzOyAqIFByZXBhcmUgdG8gZW5hYmxlIGZzdmVyaXR5IGJ5IGNsZWFyaW5nIG9sZCBtZXRhZGF0YS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50CiYjNDM7eGZzX2ZzdmVyaXR5X2JlZ2luX2VuYWJsZSgKJiM0MzsJc3RydWN0IGZpbGUJCSpmaWxwKQomIzQzO3sKJiM0MzsJc3RydWN0IGlub2RlCQkqaW5vZGUgPSBmaWxlX2lub2RlKGZpbHApOwomIzQzOwlzdHJ1Y3QgeGZzX2lub2RlCSppcCA9IFhGU19JKGlub2RlKTsKJiM0MzsJaW50CQkJZXJyb3I7CiYjNDM7CiYjNDM7CXhmc19hc3NlcnRfaWxvY2tlZChpcCwgWEZTX0lPTE9DS19FWENMKTsKJiM0MzsKJiM0MzsJaWYgKElTX0RBWChpbm9kZSkgfHwgaXAtJmd0O2lfZGlmbGFnczIgJmFtcDsgWEZTX0RJRkxBRzJfREFYKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CWlmIChpbm9kZS0mZ3Q7aV9zaXplICZndDsgWEZTX0ZTVkVSSVRZX0xBUkdFU1RfRklMRSkKJiM0MzsJCXJldHVybiAtRUZCSUc7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIEZsdXNoIHBhZ2VjYWNoZSBiZWZvcmUgYnVpbGRpbmcgTWVya2xlIHRyZWUuIElub2RlIGlzIGxvY2tlZCBhbmQgbm8KJiM0MzsJICogZnVydGhlciB3cml0ZXMgd2lsbCBoYXBwZW4gdG8gdGhlIGZpbGUgZXhjZXB0IGZzdmVyaXR5IG1ldGFkYXRhCiYjNDM7CSAqLwomIzQzOwllcnJvciA9IGZpbGVtYXBfd3JpdGVfYW5kX3dhaXQoaW5vZGUtJmd0O2lfbWFwcGluZyk7CiYjNDM7CWlmIChlcnJvcikKJiM0MzsJCXJldHVybiBlcnJvcjsKJiM0MzsKJiM0MzsJaWYgKHhmc19pZmxhZ3NfdGVzdF9hbmRfc2V0KGlwLCBYRlNfVkVSSVRZX0NPTlNUUlVDVElPTikpCiYjNDM7CQlyZXR1cm4gLUVCVVNZOwomIzQzOwomIzQzOwllcnJvciA9IHhmc19xbV9kcWF0dGFjaChpcCk7CiYjNDM7CWlmIChlcnJvcikKJiM0MzsJCWdvdG8gb3V0X2NsZWFyOwomIzQzOwomIzQzOwllcnJvciA9IHhmc19mc3Zlcml0eV9kZWxldGVfbWV0YWRhdGEoaXApOwomIzQzOwlpZiAoZXJyb3IpCiYjNDM7CQlnb3RvIG91dF9jbGVhcjsKJiM0MzsJcmV0dXJuIGVycm9yOwomIzQzO291dF9jbGVhcjoKJiM0MzsJeGZzX2lmbGFnc19jbGVhcihpcCwgWEZTX1ZFUklUWV9DT05TVFJVQ1RJT04pOwomIzQzOwlyZXR1cm4gZXJyb3I7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogQ29tcGxldGUgKG9yIGZhaWwpIHRoZSBwcm9jZXNzIG9mIGVuYWJsaW5nIGZzdmVyaXR5LgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQKJiM0Mzt4ZnNfZnN2ZXJpdHlfZW5kX2VuYWJsZSgKJiM0MzsJc3RydWN0IGZpbGUJCSpmaWxlLAomIzQzOwljb25zdCB2b2lkCQkqZGVzYywKJiM0MzsJc2l6ZV90CQkJZGVzY19zaXplLAomIzQzOwl1NjQJCQltZXJrbGVfdHJlZV9zaXplKQomIzQzO3sKJiM0MzsJc3RydWN0IGlub2RlCQkqaW5vZGUgPSBmaWxlX2lub2RlKGZpbGUpOwomIzQzOwlzdHJ1Y3QgeGZzX2lub2RlCSppcCA9IFhGU19JKGlub2RlKTsKJiM0MzsJc3RydWN0IHhmc19tb3VudAkqbXAgPSBpcC0mZ3Q7aV9tb3VudDsKJiM0MzsJc3RydWN0IHhmc190cmFucwkqdHA7CiYjNDM7CWludAkJCWVycm9yID0gMDsKJiM0MzsJbG9mZl90CQkJcmFuZ2Vfc3RhcnQgPSB4ZnNfZnN2ZXJpdHlfbWV0YWRhdGFfb2Zmc2V0KGlwKTsKJiM0MzsKJiM0MzsJeGZzX2Fzc2VydF9pbG9ja2VkKGlwLCBYRlNfSU9MT0NLX0VYQ0wpOwomIzQzOwomIzQzOwkvKiBmcy12ZXJpdHkgZmFpbGVkLCBqdXN0IGNsZWFudXAgKi8KJiM0MzsJaWYgKGRlc2MgPT0gTlVMTCkgewomIzQzOwkJZXJyb3IgPSB4ZnNfZnN2ZXJpdHlfZGVsZXRlX21ldGFkYXRhKGlwKTsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CiYjNDM7CWVycm9yID0geGZzX2ZzdmVyaXR5X3dyaXRlX2Rlc2NyaXB0b3IoZmlsZSwgZGVzYywgZGVzY19zaXplLAomIzQzOwkJCW1lcmtsZV90cmVlX3NpemUpOwomIzQzOwlpZiAoZXJyb3IpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogV2FpdCBmb3IgTWVya2xlIHRyZWUgZ2V0IHdyaXR0ZW4gdG8gZGlzayBiZWZvcmUgc2V0dGluZyBvbi1kaXNrIGlub2RlCiYjNDM7CSAqIGZsYWcgYW5kIGNsZWFyaW5nIFhGU19WRVJJVFlfQ09OU1RSVUNUSU9OCiYjNDM7CSAqLwomIzQzOwllcnJvciA9IGZpbGVtYXBfd3JpdGVfYW5kX3dhaXRfcmFuZ2UoaW5vZGUtJmd0O2lfbWFwcGluZywgcmFuZ2Vfc3RhcnQsCiYjNDM7CQkJTExPTkdfTUFYKTsKJiM0MzsJaWYgKGVycm9yKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFJlbW92ZSB1bndyaXR0ZW4gZXh0ZW50cyBsZWZ0IGJ5IENPVyBwcmVhbGxvY2F0aW9ucyBhbmQgd3JpdGUKJiM0MzsJICogcHJlYWxsb2NhdGlvbiBpbiB0aGUgbWVya2xlIHRyZWUgaG9sZXMgYW5kIHBhc3QgZGVzY3JpcHRvcgomIzQzOwkgKi8KJiM0MzsJZXJyb3IgPSB4ZnNfZnN2ZXJpdHlfY2FuY2VsX3Vud3JpdHRlbihpcCwgcmFuZ2Vfc3RhcnQsIExMT05HX01BWCk7CiYjNDM7CWlmIChlcnJvcikKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBQcm9hY3RpdmVseSBkcm9wIGFueSBkZWxheWVkIGFsbG9jYXRpb25zIGluIENPVyBmb3JrLCB0aGUgZnN2ZXJpdHkKJiM0MzsJICogZmlsZXMgYXJlIHJlYWQtb25seQomIzQzOwkgKi8KJiM0MzsJaWYgKHhmc19pc19jb3dfaW5vZGUoaXApKSB7CiYjNDM7CQlpZiAoIWlwLSZndDtpX2Nvd2ZwKQomIzQzOwkJCXhmc19pZm9ya19pbml0X2NvdyhpcCk7CiYjNDM7CQl4ZnNfYm1hcF9wdW5jaF9kZWxhbGxvY19yYW5nZShpcCwgWEZTX0NPV19GT1JLLCAwLCBMTE9OR19NQVgsCiYjNDM7CQkJCU5VTEwpOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFNldCBmc3Zlcml0eSBpbm9kZSBmbGFnCiYjNDM7CSAqLwomIzQzOwllcnJvciA9IHhmc190cmFuc19hbGxvY19pbm9kZShpcCwgJmFtcDtNX1JFUyhtcCktJmd0O3RyX2ljaGFuZ2UsCiYjNDM7CQkJMCwgMCwgZmFsc2UsICZhbXA7dHApOwomIzQzOwlpZiAoZXJyb3IpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogRW5zdXJlIHRoYXQgd2UmIzM5O3ZlIHBlcnNpc3RlZCB0aGUgdmVyaXR5IGluZm9ybWF0aW9uIGJlZm9yZSB3ZSBlbmFibGUKJiM0MzsJICogaXQgb24gdGhlIGlub2RlIGFuZCB0ZWxsIHRoZSBjYWxsZXIgd2UgaGF2ZSBzZWFsZWQgdGhlIGlub2RlLgomIzQzOwkgKi8KJiM0MzsJaXAtJmd0O2lfZGlmbGFnczIgfD0gWEZTX0RJRkxBRzJfVkVSSVRZOwomIzQzOwomIzQzOwl4ZnNfdHJhbnNfbG9nX2lub2RlKHRwLCBpcCwgWEZTX0lMT0dfQ09SRSk7CiYjNDM7CXhmc190cmFuc19zZXRfc3luYyh0cCk7CiYjNDM7CiYjNDM7CWVycm9yID0geGZzX3RyYW5zX2NvbW1pdCh0cCk7CiYjNDM7CXhmc19pdW5sb2NrKGlwLCBYRlNfSUxPQ0tfRVhDTCk7CiYjNDM7CiYjNDM7CWlmICghZXJyb3IpCiYjNDM7CQlpbm9kZS0mZ3Q7aV9mbGFncyB8PSBTX1ZFUklUWTsKJiM0MzsKJiM0MztvdXQ6CiYjNDM7CWlmIChlcnJvcikgewomIzQzOwkJaW50CWVycm9yMjsKJiM0MzsKJiM0MzsJCWVycm9yMiA9IHhmc19mc3Zlcml0eV9kZWxldGVfbWV0YWRhdGEoaXApOwomIzQzOwkJaWYgKGVycm9yMikKJiM0MzsJCQl4ZnNfYWxlcnQoaXAtJmd0O2lfbW91bnQsCiYjNDM7JiMzNDtpbm8gMHglbGx4IGZhaWxlZCB0byBjbGVhbiB1cCBuZXcgZnN2ZXJpdHkgbWV0YWRhdGEsIGVyciAlZCYjMzQ7LAomIzQzOwkJCQkJSV9JTk8oaXApLCBlcnJvcjIpOwomIzQzOwl9CiYjNDM7CiYjNDM7CXhmc19pZmxhZ3NfY2xlYXIoaXAsIFhGU19WRVJJVFlfQ09OU1RSVUNUSU9OKTsKJiM0MzsJcmV0dXJuIGVycm9yOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIFJldHJpZXZlIGEgbWVya2xlIHRyZWUgYmxvY2suCiYjNDM7ICovCiYjNDM7c3RhdGljIHN0cnVjdCBwYWdlICoKJiM0Mzt4ZnNfZnN2ZXJpdHlfcmVhZF9tZXJrbGUoCiYjNDM7CXN0cnVjdCBpbm9kZQkJKmlub2RlLAomIzQzOwlwZ29mZl90CQkJaW5kZXgpCiYjNDM7ewomIzQzOwlpbmRleCAmIzQzOz0geGZzX2ZzdmVyaXR5X21ldGFkYXRhX29mZnNldChYRlNfSShpbm9kZSkpICZndDsmZ3Q7IFBBR0VfU0hJRlQ7CiYjNDM7CiYjNDM7CXJldHVybiBnZW5lcmljX3JlYWRfbWVya2xlX3RyZWVfcGFnZShpbm9kZSwgaW5kZXgpOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIFJldHJpZXZlIGEgbWVya2xlIHRyZWUgYmxvY2suCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQKJiM0Mzt4ZnNfZnN2ZXJpdHlfcmVhZGFoZWFkX21lcmtsZV90cmVlKAomIzQzOwlzdHJ1Y3QgaW5vZGUJCSppbm9kZSwKJiM0MzsJcGdvZmZfdAkJCWluZGV4LAomIzQzOwl1bnNpZ25lZCBsb25nCQlucl9wYWdlcykKJiM0Mzt7CiYjNDM7CWluZGV4ICYjNDM7PSB4ZnNfZnN2ZXJpdHlfbWV0YWRhdGFfb2Zmc2V0KFhGU19JKGlub2RlKSkgJmd0OyZndDsgUEFHRV9TSElGVDsKJiM0MzsKJiM0MzsJZ2VuZXJpY19yZWFkYWhlYWRfbWVya2xlX3RyZWUoaW5vZGUsIGluZGV4LCBucl9wYWdlcyk7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogV3JpdGUgYSBtZXJrbGUgdHJlZSBibG9jay4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50CiYjNDM7eGZzX2ZzdmVyaXR5X3dyaXRlX21lcmtsZSgKJiM0MzsJc3RydWN0IGZpbGUJCSpmaWxlLAomIzQzOwljb25zdCB2b2lkCQkqYnVmLAomIzQzOwl1NjQJCQlwb3MsCiYjNDM7CXVuc2lnbmVkIGludAkJc2l6ZSwKJiM0MzsJY29uc3QgdTgJCSp6ZXJvX2RpZ2VzdCwKJiM0MzsJdW5zaWduZWQgaW50CQlkaWdlc3Rfc2l6ZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpbm9kZQkJKmlub2RlID0gZmlsZV9pbm9kZShmaWxlKTsKJiM0MzsJc3RydWN0IHhmc19pbm9kZQkqaXAgPSBYRlNfSShpbm9kZSk7CiYjNDM7CWxvZmZfdAkJCXBvc2l0aW9uID0gcG9zICYjNDM7CiYjNDM7CQl4ZnNfZnN2ZXJpdHlfbWV0YWRhdGFfb2Zmc2V0KGlwKTsKJiM0MzsKJiM0MzsJaWYgKHBvc2l0aW9uICYjNDM7IHNpemUgJmd0OyBpbm9kZS0mZ3Q7aV9zYi0mZ3Q7c19tYXhieXRlcykKJiM0MzsJCXJldHVybiAtRUZCSUc7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIElmIHRoaXMgaXMgYSBibG9jayBmdWxsIG9mIGhhc2hlcyBvZiB6ZXJvZWQgYmxvY2tzLCBkb24mIzM5O3QgYm90aGVyCiYjNDM7CSAqIHN0b3JpbmcgdGhlIGJsb2NrLiBXZSBjYW4gc3ludGhlc2l6ZSB0aGVtIGxhdGVyLgomIzQzOwkgKgomIzQzOwkgKiBIb3dldmVyLCBkbyB0aGlzIG9ubHkgaW4gY2FzZSBNZXJrbGUgdHJlZSBibG9jayA9PSBmcyBibG9jayBzaXplLgomIzQzOwkgKiBJb21hcCBzeW50aGVzaXplcyB0aGVzZSBibG9ja3MgYmFzZWQgb24gaG9sZXMgaW4gdGhlIG1lcmtsZSB0cmVlLiBXZQomIzQzOwkgKiB3b24mIzM5O3QgYmUgYWJsZSB0byB0ZWxsIGlmIHNvbWV0aGluZyBuZWVkIHRvIGJlIHN5bnRoZXNpemVzIGZvciB0aGUKJiM0MzsJICogcmFuZ2UgaW4gdGhlIGZzIGJsb2NrLiBGb3IgZXhhbXBsZSwgZm9yIDRrIGZpbGVzeXN0ZW0gYmxvY2sKJiM0MzsJICoKJiM0MzsJICoJWyAxayB8IHplcm8gaGFzaGVzIHwgemVybyBoYXNoZXMgfCAxayBdCiYjNDM7CSAqCiYjNDM7CSAqIElvbWFwIHdvbiYjMzk7dCBrbm93IGFib3V0IHRoZXNlIGVtcHR5IGJsb2Nrcy4KJiM0MzsJICovCiYjNDM7CWlmIChzaXplID09IGlwLSZndDtpX21vdW50LSZndDttX3NiLnNiX2Jsb2Nrc2l6ZSAmYW1wOyZhbXA7CiYjNDM7CQkJLyoKJiM0MzsJCQkgKiBGaXJzdCBkaWdlc3QgaXMgemVyb19kaWdlc3QKJiM0MzsJCQkgKi8KJiM0MzsJCQltZW1jbXAoYnVmLCB6ZXJvX2RpZ2VzdCwgZGlnZXN0X3NpemUpID09IDAgJmFtcDsmYW1wOwomIzQzOwkJCS8qCiYjNDM7CQkJICogRXZlcnkgZGlnZXN0IGlzIHNhbWUgYXMgcHJldmlvdXMsIHRodXMgYWxsIGFyZQomIzQzOwkJCSAqIHplcm9fZGlnZXN0CiYjNDM7CQkJICovCiYjNDM7CQkJbWVtY21wKGJ1ZiAmIzQzOyBkaWdlc3Rfc2l6ZSwgYnVmLCBzaXplIC0gZGlnZXN0X3NpemUpID09IDApCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJcmV0dXJuIGlvbWFwX2ZzdmVyaXR5X3dyaXRlKGZpbGUsIHBvc2l0aW9uLCBzaXplLCBidWYsCiYjNDM7CQkJJmFtcDt4ZnNfYnVmZmVyZWRfd3JpdGVfaW9tYXBfb3BzLAomIzQzOwkJCSZhbXA7eGZzX2lvbWFwX3dyaXRlX29wcyk7CiYjNDM7fQomIzQzOwomIzQzO2NvbnN0IHN0cnVjdCBmc3Zlcml0eV9vcGVyYXRpb25zIHhmc19mc3Zlcml0eV9vcHMgPSB7CiYjNDM7CS5iZWdpbl9lbmFibGVfdmVyaXR5CQk9IHhmc19mc3Zlcml0eV9iZWdpbl9lbmFibGUsCiYjNDM7CS5lbmRfZW5hYmxlX3Zlcml0eQkJPSB4ZnNfZnN2ZXJpdHlfZW5kX2VuYWJsZSwKJiM0MzsJLmdldF92ZXJpdHlfZGVzY3JpcHRvcgkJPSB4ZnNfZnN2ZXJpdHlfZ2V0X2Rlc2NyaXB0b3IsCiYjNDM7CS5yZWFkX21lcmtsZV90cmVlX3BhZ2UJCT0geGZzX2ZzdmVyaXR5X3JlYWRfbWVya2xlLAomIzQzOwkucmVhZGFoZWFkX21lcmtsZV90cmVlCQk9IHhmc19mc3Zlcml0eV9yZWFkYWhlYWRfbWVya2xlX3RyZWUsCiYjNDM7CS53cml0ZV9tZXJrbGVfdHJlZV9ibG9jawk9IHhmc19mc3Zlcml0eV93cml0ZV9tZXJrbGUsCiYjNDM7fTsKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfZnN2ZXJpdHkuaCBiL2ZzL3hmcy94ZnNfZnN2ZXJpdHkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uNmE5ODFlMjBhNzViYjgKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9mcy94ZnMveGZzX2ZzdmVyaXR5LmgKQEAgLTAsMCAmIzQzOzEsMjggQEAKJiM0MzsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLwomIzQzOy8qCiYjNDM7ICogQ29weXJpZ2h0IChDKSAyMDI2IFJlZCBIYXQsIEluYy4KJiM0MzsgKi8KJiM0MzsjaWZuZGVmIF9fWEZTX0ZTVkVSSVRZX0hfXwomIzQzOyNkZWZpbmUgX19YRlNfRlNWRVJJVFlfSF9fCiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDt4ZnNfcGxhdGZvcm0uaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2ZzdmVyaXR5LmgmZ3Q7CiYjNDM7CiYjNDM7I2lmZGVmIENPTkZJR19GU19WRVJJVFkKJiM0MztleHRlcm4gY29uc3Qgc3RydWN0IGZzdmVyaXR5X29wZXJhdGlvbnMgeGZzX2ZzdmVyaXR5X29wczsKJiM0Mztsb2ZmX3QgeGZzX2ZzdmVyaXR5X21ldGFkYXRhX29mZnNldChjb25zdCBzdHJ1Y3QgeGZzX2lub2RlICppcCk7CiYjNDM7Ym9vbCB4ZnNfZnN2ZXJpdHlfaXNfZmlsZV9kYXRhKGNvbnN0IHN0cnVjdCB4ZnNfaW5vZGUgKmlwLCBsb2ZmX3Qgb2Zmc2V0KTsKJiM0MzsjZWxzZQomIzQzO3N0YXRpYyBpbmxpbmUgbG9mZl90IHhmc19mc3Zlcml0eV9tZXRhZGF0YV9vZmZzZXQoY29uc3Qgc3RydWN0IHhmc19pbm9kZSAqaXApCiYjNDM7ewomIzQzOwlXQVJOX09OX09OQ0UoMSk7CiYjNDM7CXJldHVybiBVTExPTkdfTUFYOwomIzQzO30KJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgeGZzX2ZzdmVyaXR5X2lzX2ZpbGVfZGF0YShjb25zdCBzdHJ1Y3QgeGZzX2lub2RlICppcCwKJiM0MzsJCQkJCSAgICBsb2ZmX3Qgb2Zmc2V0KQomIzQzO3sKJiM0MzsJcmV0dXJuIGZhbHNlOwomIzQzO30KJiM0MzsjZW5kaWYJLyogQ09ORklHX0ZTX1ZFUklUWSAqLwomIzQzOwomIzQzOyNlbmRpZgkvKiBfX1hGU19GU1ZFUklUWV9IX18gKi8KZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfaGVhbHRoLmMgYi9mcy94ZnMveGZzX2hlYWx0aC5jCmluZGV4IDIzOWI4NDNlODNkNDJhLi5iZTY2NzYwZmIxMjBmNyAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19oZWFsdGguYwomIzQzOyYjNDM7JiM0MzsgYi9mcy94ZnMveGZzX2hlYWx0aC5jCkBAIC02MjUsNiAmIzQzOzYyNSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaW9jdGxfc2lja19tYXAgaW5vX21hcFtdID0gewogCXsgWEZTX1NJQ0tfSU5PX0RJUl9aQVBQRUQsCVhGU19CU19TSUNLX0RJUiB9LAogCXsgWEZTX1NJQ0tfSU5PX1NZTUxJTktfWkFQUEVELAlYRlNfQlNfU0lDS19TWU1MSU5LIH0sCiAJeyBYRlNfU0lDS19JTk9fRElSVFJFRSwJWEZTX0JTX1NJQ0tfRElSVFJFRSB9LAomIzQzOwl7IFhGU19TSUNLX0lOT19GU1ZFUklUWSwJWEZTX0JTX1NJQ0tfRlNWRVJJVFkgfSwKIH07CiAKIC8qIEZpbGwgb3V0IGJ1bGtzdGF0IGhlYWx0aCBpbmZvLiAqLwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19pbm9kZS5oIGIvZnMveGZzL3hmc19pbm9kZS5oCmluZGV4IDM0YzEwMzhlYmZjZGUxLi4xN2NlMDgzNTkxZjQwOCAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19pbm9kZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3hmcy94ZnNfaW5vZGUuaApAQCAtNDE5LDYgJiM0Mzs0MTksMTIgQEAgc3RhdGljIGlubGluZSBib29sIHhmc19pbm9kZV9jYW5fc3dfYXRvbWljX3dyaXRlKGNvbnN0IHN0cnVjdCB4ZnNfaW5vZGUgKmlwKQogICovCiAjZGVmaW5lIFhGU19JUkVNQVBQSU5HCQkoMVUgJmx0OyZsdDsgMTUpCiAKJiM0MzsvKgomIzQzOyAqIGZzLXZlcml0eSYjMzk7cyBNZXJrbGUgdHJlZSBpcyB1bmRlciBjb25zdHJ1Y3Rpb24uIFRoZSBmaWxlIGlzIHJlYWQtb25seSwgdGhlCiYjNDM7ICogb25seSB3cml0ZXMgaGFwcGVuaW5nIGFyZSBmb3IgdGhlIGZzdmVyaXR5IG1ldGFkYXRhLgomIzQzOyAqLwomIzQzOyNkZWZpbmUgWEZTX1ZFUklUWV9DT05TVFJVQ1RJT04JKDFVICZsdDsmbHQ7IDE2KQomIzQzOwogLyogQWxsIGlub2RlIHN0YXRlIGZsYWdzIHJlbGF0ZWQgdG8gaW5vZGUgcmVjbGFpbS4gKi8KICNkZWZpbmUgWEZTX0FMTF9JUkVDTEFJTV9GTEFHUwkoWEZTX0lSRUNMQUlNQUJMRSB8IFwKIAkJCQkgWEZTX0lSRUNMQUlNIHwgXApkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19pb2N0bC5jIGIvZnMveGZzL3hmc19pb2N0bC5jCmluZGV4IDFiNTM3MDFiZWJlYTFhLi5mYzc4NjBhOGI1YWJiMSAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19pb2N0bC5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3hmcy94ZnNfaW9jdGwuYwpAQCAtNDksNiAmIzQzOzQ5LDcgQEAKIAogI2luY2x1ZGUgJmx0O2xpbnV4L21vdW50LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZmlsZWF0dHIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvZnN2ZXJpdHkuaCZndDsKIAogLyogUmV0dXJuIDAgb24gc3VjY2VzcyBvciBwb3NpdGl2ZSBlcnJvciAqLwogaW50CkBAIC0xNDY2LDYgJiM0MzsxNDY3LDE5IEBAIHhmc19maWxlX2lvY3RsKAogCWNhc2UgWEZTX0lPQ19WRVJJRllfTUVESUE6CiAJCXJldHVybiB4ZnNfaW9jX3ZlcmlmeV9tZWRpYShmaWxwLCBhcmcpOwogCiYjNDM7CWNhc2UgRlNfSU9DX0VOQUJMRV9WRVJJVFk6CiYjNDM7CQlpZiAoIXhmc19oYXNfdmVyaXR5KG1wKSkKJiM0MzsJCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CQlyZXR1cm4gZnN2ZXJpdHlfaW9jdGxfZW5hYmxlKGZpbHAsIGFyZyk7CiYjNDM7CWNhc2UgRlNfSU9DX01FQVNVUkVfVkVSSVRZOgomIzQzOwkJaWYgKCF4ZnNfaGFzX3Zlcml0eShtcCkpCiYjNDM7CQkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwkJcmV0dXJuIGZzdmVyaXR5X2lvY3RsX21lYXN1cmUoZmlscCwgYXJnKTsKJiM0MzsJY2FzZSBGU19JT0NfUkVBRF9WRVJJVFlfTUVUQURBVEE6CiYjNDM7CQlpZiAoIXhmc19oYXNfdmVyaXR5KG1wKSkKJiM0MzsJCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CQlyZXR1cm4gZnN2ZXJpdHlfaW9jdGxfcmVhZF9tZXRhZGF0YShmaWxwLCBhcmcpOwomIzQzOwogCWRlZmF1bHQ6CiAJCXJldHVybiAtRU5PVFRZOwogCX0KZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfaW9tYXAuYyBiL2ZzL3hmcy94ZnNfaW9tYXAuYwppbmRleCAyMjVjM2RlODhkMDNiMS4uZmJhNTE5MDI0MTZiMDIgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfaW9tYXAuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy94ZnMveGZzX2lvbWFwLmMKQEAgLTMyLDYgJiM0MzszMiw4IEBACiAjaW5jbHVkZSAmIzM0O3hmc19ydGJpdG1hcC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7eGZzX2ljYWNoZS5oJiMzNDsKICNpbmNsdWRlICYjMzQ7eGZzX3pvbmVfYWxsb2MuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDt4ZnNfZnN2ZXJpdHkuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2ZzdmVyaXR5LmgmZ3Q7CiAKICNkZWZpbmUgWEZTX0FMTE9DX0FMSUdOKG1wLCBvZmYpIFwKIAkoKChvZmYpICZndDsmZ3Q7IG1wLSZndDttX2FsbG9jc2l6ZV9sb2cpICZsdDsmbHQ7IG1wLSZndDttX2FsbG9jc2l6ZV9sb2cpCkBAIC0xNTg5LDcgJiM0MzsxNTkxLDggQEAgeGZzX3pvbmVkX2J1ZmZlcmVkX3dyaXRlX2lvbWFwX2JlZ2luKAogCWxvZmZfdAkJCWNvdW50LAogCXVuc2lnbmVkCQlmbGFncywKIAlzdHJ1Y3QgaW9tYXAJCSppb21hcCwKLQlzdHJ1Y3QgaW9tYXAJCSpzcmNtYXApCiYjNDM7CXN0cnVjdCBpb21hcAkJKnNyY21hcCwKJiM0MzsJdTE2CQkJaW9tYXBfZmxhZ3MpCiB7CiAJc3RydWN0IGlvbWFwX2l0ZXIJKml0ZXIgPQogCQljb250YWluZXJfb2YoaW9tYXAsIHN0cnVjdCBpb21hcF9pdGVyLCBpb21hcCk7CkBAIC0xNTk5LDcgJiM0MzsxNjAyLDYgQEAgeGZzX3pvbmVkX2J1ZmZlcmVkX3dyaXRlX2lvbWFwX2JlZ2luKAogCXN0cnVjdCB4ZnNfbW91bnQJKm1wID0gaXAtJmd0O2lfbW91bnQ7CiAJeGZzX2ZpbGVvZmZfdAkJb2Zmc2V0X2ZzYiA9IFhGU19CX1RPX0ZTQlQobXAsIG9mZnNldCk7CiAJeGZzX2ZpbGVvZmZfdAkJZW5kX2ZzYiA9IHhmc19pb21hcF9lbmRfZnNiKG1wLCBvZmZzZXQsIGNvdW50KTsKLQl1MTYJCQlpb21hcF9mbGFncyA9IElPTUFQX0ZfU0hBUkVEOwogCXVuc2lnbmVkIGludAkJbG9ja21vZGUgPSBYRlNfSUxPQ0tfRVhDTDsKIAl4ZnNfZmlsYmxrc190CQljb3VudF9mc2I7CiAJeGZzX2V4dGxlbl90CQlpbmRsZW47CkBAIC0xNjA3LDYgJiM0MzsxNjA5LDggQEAgeGZzX3pvbmVkX2J1ZmZlcmVkX3dyaXRlX2lvbWFwX2JlZ2luKAogCXN0cnVjdCB4ZnNfaWV4dF9jdXJzb3IJaWN1cjsKIAlpbnQJCQllcnJvciA9IDA7CiAKJiM0MzsJaW9tYXBfZmxhZ3MgPSBpb21hcF9mbGFncyB8IElPTUFQX0ZfU0hBUkVEOwomIzQzOwogCUFTU0VSVCgheGZzX2dldF9leHRzel9oaW50KGlwKSk7CiAJQVNTRVJUKCEoZmxhZ3MgJmFtcDsgSU9NQVBfVU5TSEFSRSkpOwogCUFTU0VSVChhYyk7CkBAIC0xODAzLDkgJiM0MzsxODA3LDEyIEBAIHhmc19idWZmZXJlZF93cml0ZV9pb21hcF9iZWdpbigKIAlpZiAoeGZzX2lzX3NodXRkb3duKG1wKSkKIAkJcmV0dXJuIC1FSU87CiAKJiM0MzsJaWYgKHhmc19pZmxhZ3NfdGVzdChpcCwgWEZTX1ZFUklUWV9DT05TVFJVQ1RJT04pKQomIzQzOwkJaW9tYXBfZmxhZ3MgfD0gSU9NQVBfRl9GU1ZFUklUWTsKJiM0MzsKIAlpZiAoeGZzX2lzX3pvbmVkX2lub2RlKGlwKSkKIAkJcmV0dXJuIHhmc196b25lZF9idWZmZXJlZF93cml0ZV9pb21hcF9iZWdpbihpbm9kZSwgb2Zmc2V0LAotCQkJCWNvdW50LCBmbGFncywgaW9tYXAsIHNyY21hcCk7CiYjNDM7CQkJCWNvdW50LCBmbGFncywgaW9tYXAsIHNyY21hcCwgaW9tYXBfZmxhZ3MpOwogCiAJLyogd2UgY2FuJiMzOTt0IHVzZSBkZWxheWVkIGFsbG9jYXRpb25zIHdoZW4gdXNpbmcgZXh0ZW50IHNpemUgaGludHMgKi8KIAlpZiAoeGZzX2dldF9leHRzel9oaW50KGlwKSkKQEAgLTIxOTEsMTIgJiM0MzsyMTk4LDE3IEBAIHhmc19yZWFkX2lvbWFwX2JlZ2luKAogCWJvb2wJCQlzaGFyZWQgPSBmYWxzZTsKIAl1bnNpZ25lZCBpbnQJCWxvY2ttb2RlID0gWEZTX0lMT0NLX1NIQVJFRDsKIAl1NjQJCQlzZXE7CiYjNDM7CXVuc2lnbmVkIGludAkJaW9tYXBfZmxhZ3MgPSAwOwogCiAJQVNTRVJUKCEoZmxhZ3MgJmFtcDsgKElPTUFQX1dSSVRFIHwgSU9NQVBfWkVSTykpKTsKIAogCWlmICh4ZnNfaXNfc2h1dGRvd24obXApKQogCQlyZXR1cm4gLUVJTzsKIAomIzQzOwlpZiAoZnN2ZXJpdHlfYWN0aXZlKGlub2RlKSAmYW1wOyZhbXA7CiYjNDM7CSAgICAob2Zmc2V0ICZndDs9IHhmc19mc3Zlcml0eV9tZXRhZGF0YV9vZmZzZXQoaXApKSkKJiM0MzsJCWlvbWFwX2ZsYWdzIHw9IElPTUFQX0ZfRlNWRVJJVFk7CiYjNDM7CiAJZXJyb3IgPSB4ZnNfaWxvY2tfZm9yX2lvbWFwKGlwLCBmbGFncywgJmFtcDtsb2NrbW9kZSk7CiAJaWYgKGVycm9yKQogCQlyZXR1cm4gZXJyb3I7CkBAIC0yMjEwLDggJiM0MzsyMjIyLDkgQEAgeGZzX3JlYWRfaW9tYXBfYmVnaW4oCiAJaWYgKGVycm9yKQogCQlyZXR1cm4gZXJyb3I7CiAJdHJhY2VfeGZzX2lvbWFwX2ZvdW5kKGlwLCBvZmZzZXQsIGxlbmd0aCwgWEZTX0RBVEFfRk9SSywgJmFtcDtpbWFwKTsKLQlyZXR1cm4geGZzX2JtYnRfdG9faW9tYXAoaXAsIGlvbWFwLCAmYW1wO2ltYXAsIGZsYWdzLAotCQkJCSBzaGFyZWQgPyBJT01BUF9GX1NIQVJFRCA6IDAsIHNlcSk7CiYjNDM7CWlvbWFwX2ZsYWdzIHw9IHNoYXJlZCA/IElPTUFQX0ZfU0hBUkVEIDogMDsKJiM0MzsKJiM0MzsJcmV0dXJuIHhmc19ibWJ0X3RvX2lvbWFwKGlwLCBpb21hcCwgJmFtcDtpbWFwLCBmbGFncywgaW9tYXBfZmxhZ3MsIHNlcSk7CiB9CiAKIGNvbnN0IHN0cnVjdCBpb21hcF9vcHMgeGZzX3JlYWRfaW9tYXBfb3BzID0gewpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19pb3BzLmMgYi9mcy94ZnMveGZzX2lvcHMuYwppbmRleCA2MzM5ZjQ5NTZlY2IzOS4uNzA2MzdjZGNjMjk5NzIgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfaW9wcy5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3hmcy94ZnNfaW9wcy5jCkBAIC0zNSw2ICYjNDM7MzUsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L3NlY3VyaXR5LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvaXZlcnNpb24uaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9maWVtYXAuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvZnN2ZXJpdHkuaCZndDsKIAogLyoKICAqIERpcmVjdG9yaWVzIGhhdmUgZGlmZmVyZW50IGxvY2sgb3JkZXIgdy5yLnQuIG1tYXBfbG9jayBjb21wYXJlZCB0byByZWd1bGFyCkBAIC01ODAsNiAmIzQzOzU4MSwxMCBAQCB4ZnNfcmVwb3J0X2Rpb2FsaWduKAogCXN0cnVjdCBibG9ja19kZXZpY2UJKmJkZXYgPSB0YXJnZXQtJmd0O2J0X2JkZXY7CiAKIAlzdGF0LSZndDtyZXN1bHRfbWFzayB8PSBTVEFUWF9ESU9BTElHTiB8IFNUQVRYX0RJT19SRUFEX0FMSUdOOwomIzQzOwomIzQzOwlpZiAoZnN2ZXJpdHlfYWN0aXZlKFZGU19JKGlwKSkpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiAJc3RhdC0mZ3Q7ZGlvX21lbV9hbGlnbiA9IGJkZXZfZG1hX2FsaWdubWVudChiZGV2KSAmIzQzOyAxOwogCiAJLyoKQEAgLTEzNzAsNiAmIzQzOzEzNzUsOCBAQCB4ZnNfaW5vZGVfc2hvdWxkX2VuYWJsZV9kYXgoCiAJCXJldHVybiBmYWxzZTsKIAlpZiAoIXhmc19pbm9kZV9zdXBwb3J0c19kYXgoaXApKQogCQlyZXR1cm4gZmFsc2U7CiYjNDM7CWlmIChpcC0mZ3Q7aV9kaWZsYWdzMiAmYW1wOyBYRlNfRElGTEFHMl9WRVJJVFkpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiAJaWYgKHhmc19oYXNfZGF4X2Fsd2F5cyhpcC0mZ3Q7aV9tb3VudCkpCiAJCXJldHVybiB0cnVlOwogCWlmIChpcC0mZ3Q7aV9kaWZsYWdzMiAmYW1wOyBYRlNfRElGTEFHMl9EQVgpCkBAIC0xMzk4LDEyICYjNDM7MTQwNSwxNSBAQCB4ZnNfZGlmbGFnc190b19pZmxhZ3MoCiAJCWZsYWdzIHw9IFNfTk9BVElNRTsKIAlpZiAoaW5pdCAmYW1wOyZhbXA7IHhmc19pbm9kZV9zaG91bGRfZW5hYmxlX2RheChpcCkpCiAJCWZsYWdzIHw9IFNfREFYOwomIzQzOwlpZiAoeGZsYWdzICZhbXA7IEZTX1hGTEFHX1ZFUklUWSkKJiM0MzsJCWZsYWdzIHw9IFNfVkVSSVRZOwogCiAJLyoKIAkgKiBTX0RBWCBjYW4gb25seSBiZSBzZXQgZHVyaW5nIGlub2RlIGluaXRpYWxpemF0aW9uIGFuZCBpcyBuZXZlciBzZXQgYnkKIAkgKiB0aGUgVkZTLCBzbyB3ZSBjYW5ub3QgbWFzayBvZmYgU19EQVggaW4gaV9mbGFncy4KIAkgKi8KLQlpbm9kZS0mZ3Q7aV9mbGFncyAmYW1wOz0gfihTX0lNTVVUQUJMRSB8IFNfQVBQRU5EIHwgU19TWU5DIHwgU19OT0FUSU1FKTsKJiM0MzsJaW5vZGUtJmd0O2lfZmxhZ3MgJmFtcDs9CiYjNDM7CQl+KFNfSU1NVVRBQkxFIHwgU19BUFBFTkQgfCBTX1NZTkMgfCBTX05PQVRJTUUgfCBTX1ZFUklUWSk7CiAJaW5vZGUtJmd0O2lfZmxhZ3MgfD0gZmxhZ3M7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfbWVzc2FnZS5jIGIvZnMveGZzL3hmc19tZXNzYWdlLmMKaW5kZXggMDI0M2U1MDlhNDY4OTEuLjQ0YjEzZDQ2MDQ5YzYyIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX21lc3NhZ2UuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy94ZnMveGZzX21lc3NhZ2UuYwpAQCAtMTQ5LDYgJiM0MzsxNDksMTAgQEAgeGZzX3dhcm5fZXhwZXJpbWVudGFsKAogCQkJLm9wc3RhdGUJPSBYRlNfT1BTVEFURV9XQVJORURfTEFSUCwKIAkJCS5uYW1lCQk9ICYjMzQ7bG9nZ2VkIGV4dGVuZGVkIGF0dHJpYnV0ZXMmIzM0OywKIAkJfSwKJiM0MzsJCVtYRlNfRVhQRVJJTUVOVEFMX0ZTVkVSSVRZXSA9IHsKJiM0MzsJCQkub3BzdGF0ZQk9IFhGU19PUFNUQVRFX1dBUk5FRF9GU1ZFUklUWSwKJiM0MzsJCQkubmFtZQkJPSAmIzM0O2ZzdmVyaXR5JiMzNDssCiYjNDM7CQl9LAogCX07CiAJQVNTRVJUKGZlYXQgJmd0Oz0gMCAmYW1wOyZhbXA7IGZlYXQgJmx0OyBYRlNfRVhQRVJJTUVOVEFMX01BWCk7CiAJQlVJTERfQlVHX09OKEFSUkFZX1NJWkUoZmVhdHVyZXMpICE9IFhGU19FWFBFUklNRU5UQUxfTUFYKTsKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfbWVzc2FnZS5oIGIvZnMveGZzL3hmc19tZXNzYWdlLmgKaW5kZXggODExYjg4NWY0MWMzNWEuLjM2NGZjYzdlNDJiMDg0IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX21lc3NhZ2UuaAomIzQzOyYjNDM7JiM0MzsgYi9mcy94ZnMveGZzX21lc3NhZ2UuaApAQCAtOTMsNiAmIzQzOzkzLDcgQEAgdm9pZCB4ZnNfYnVmX2FsZXJ0X3JhdGVsaW1pdGVkKHN0cnVjdCB4ZnNfYnVmICpicCwgY29uc3QgY2hhciAqcmxtc2csCiBlbnVtIHhmc19leHBlcmltZW50YWxfZmVhdCB7CiAJWEZTX0VYUEVSSU1FTlRBTF9TSFJJTkssCiAJWEZTX0VYUEVSSU1FTlRBTF9MQVJQLAomIzQzOwlYRlNfRVhQRVJJTUVOVEFMX0ZTVkVSSVRZLAogCiAJWEZTX0VYUEVSSU1FTlRBTF9NQVgsCiB9OwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19tb3VudC5oIGIvZnMveGZzL3hmc19tb3VudC5oCmluZGV4IDY2YTAyZDFiOWFkN2ExLi44NzVjOWIwZjhlOTkxZiAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19tb3VudC5oCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3hmcy94ZnNfbW91bnQuaApAQCAtMzg4LDYgJiM0MzszODgsNyBAQCB0eXBlZGVmIHN0cnVjdCB4ZnNfbW91bnQgewogI2RlZmluZSBYRlNfRkVBVF9FWENIQU5HRV9SQU5HRQkoMVVMTCAmbHQ7Jmx0OyAyNykJLyogZXhjaGFuZ2UgcmFuZ2UgKi8KICNkZWZpbmUgWEZTX0ZFQVRfTUVUQURJUgkoMVVMTCAmbHQ7Jmx0OyAyOCkJLyogbWV0YWRhdGEgZGlyZWN0b3J5IHRyZWUgKi8KICNkZWZpbmUgWEZTX0ZFQVRfWk9ORUQJCSgxVUxMICZsdDsmbHQ7IDI5KQkvKiB6b25lZCBSVCBkZXZpY2UgKi8KJiM0MzsjZGVmaW5lIFhGU19GRUFUX1ZFUklUWQkJKDFVTEwgJmx0OyZsdDsgMzApCS8qIGZzLXZlcml0eSAqLwogCiAvKiBNb3VudCBmZWF0dXJlcyAqLwogI2RlZmluZSBYRlNfRkVBVF9OT0xJRkVUSU1FCSgxVUxMICZsdDsmbHQ7IDQ3KQkvKiBkaXNhYmxlIGxpZmV0aW1lIGhpbnRzICovCkBAIC00NDUsNiAmIzQzOzQ0Niw3IEBAIF9fWEZTX0hBU19GRUFUKGV4Y2hhbmdlX3JhbmdlLCBFWENIQU5HRV9SQU5HRSkKIF9fWEZTX0hBU19GRUFUKG1ldGFkaXIsIE1FVEFESVIpCiBfX1hGU19IQVNfRkVBVCh6b25lZCwgWk9ORUQpCiBfX1hGU19IQVNfRkVBVChub2xpZmV0aW1lLCBOT0xJRkVUSU1FKQomIzQzO19fWEZTX0hBU19GRUFUKHZlcml0eSwgVkVSSVRZKQogCiBzdGF0aWMgaW5saW5lIGJvb2wgeGZzX2hhc19ydGdyb3Vwcyhjb25zdCBzdHJ1Y3QgeGZzX21vdW50ICptcCkKIHsKQEAgLTU4Miw2ICYjNDM7NTg0LDggQEAgX19YRlNfSEFTX0ZFQVQobm91dWlkLCBOT1VVSUQpCiAjZGVmaW5lIFhGU19PUFNUQVRFX1JFU1VNSU5HX1FVT1RBT04JMTgKIC8qIChab25lZCkgR0MgaXMgaW4gcHJvZ3Jlc3MgKi8KICNkZWZpbmUgWEZTX09QU1RBVEVfWk9ORUdDX1JVTk5JTkcJMjAKJiM0MzsvKiBLZXJuZWwgaGFzIGxvZ2dlZCBhIHdhcm5pbmcgYWJvdXQgZnN2ZXJpdHkgc3VwcG9ydCAqLwomIzQzOyNkZWZpbmUgWEZTX09QU1RBVEVfV0FSTkVEX0ZTVkVSSVRZCTIxCiAKICNkZWZpbmUgX19YRlNfSVNfT1BTVEFURShuYW1lLCBOQU1FKSBcCiBzdGF0aWMgaW5saW5lIGJvb2wgeGZzX2lzXyAjIyBuYW1lIChzdHJ1Y3QgeGZzX21vdW50ICptcCkgXApkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19zdXBlci5jIGIvZnMveGZzL3hmc19zdXBlci5jCmluZGV4IDg1MzFkNTI2ZmM0NDA5Li5hNzc3NGQyZDZiMjNmYyAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19zdXBlci5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3hmcy94ZnNfc3VwZXIuYwpAQCAtMzAsNiAmIzQzOzMwLDcgQEAKICNpbmNsdWRlICYjMzQ7eGZzX2ZpbGVzdHJlYW0uaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3hmc19xdW90YS5oJiMzNDsKICNpbmNsdWRlICYjMzQ7eGZzX3N5c2ZzLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7eGZzX2ZzdmVyaXR5LmgmIzM0OwogI2luY2x1ZGUgJiMzNDt4ZnNfb25kaXNrLmgmIzM0OwogI2luY2x1ZGUgJiMzNDt4ZnNfcm1hcF9pdGVtLmgmIzM0OwogI2luY2x1ZGUgJiMzNDt4ZnNfcmVmY291bnRfaXRlbS5oJiMzNDsKQEAgLTE2ODksNiAmIzQzOzE2OTAsOSBAQCB4ZnNfZnNfZmlsbF9zdXBlcigKIAlzYi0mZ3Q7c19xdW90YV90eXBlcyA9IFFUWVBFX01BU0tfVVNSIHwgUVRZUEVfTUFTS19HUlAgfCBRVFlQRV9NQVNLX1BSSjsKICNlbmRpZgogCXNiLSZndDtzX29wID0gJmFtcDt4ZnNfc3VwZXJfb3BlcmF0aW9uczsKJiM0MzsjaWZkZWYgQ09ORklHX0ZTX1ZFUklUWQomIzQzOwlzYi0mZ3Q7c192b3AgPSAmYW1wO3hmc19mc3Zlcml0eV9vcHM7CiYjNDM7I2VuZGlmCiAKIAkvKgogCSAqIERlbGF5IG1vdW50IHdvcmsgaWYgdGhlIGRlYnVnIGhvb2sgaXMgc2V0LiBUaGlzIGlzIGRlYnVnCkBAIC0xOTQxLDYgJiM0MzsxOTQ1LDkgQEAgeGZzX2ZzX2ZpbGxfc3VwZXIoCiAJaWYgKGVycm9yKQogCQlnb3RvIG91dF9maWxlc3RyZWFtX3VubW91bnQ7CiAKJiM0MzsJaWYgKHhmc19oYXNfdmVyaXR5KG1wKSkKJiM0MzsJCXhmc193YXJuX2V4cGVyaW1lbnRhbChtcCwgWEZTX0VYUEVSSU1FTlRBTF9GU1ZFUklUWSk7CiYjNDM7CiAJcm9vdCA9IGlncmFiKFZGU19JKG1wLSZndDttX3Jvb3RpcCkpOwogCWlmICghcm9vdCkgewogCQllcnJvciA9IC1FTk9FTlQ7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZzdmVyaXR5LmggYi9pbmNsdWRlL2xpbnV4L2ZzdmVyaXR5LmgKaW5kZXggNmM0NjdkZWQ5NzUxZmMuLmY5NDMzMzMyYzI3NGJiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ZzdmVyaXR5LmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9mc3Zlcml0eS5oCkBAIC0xMjQsNiAmIzQzOzEyNCw4IEBAIHN0cnVjdCBmc3Zlcml0eV9vcGVyYXRpb25zIHsKIAkgKiBAYnVmOiB0aGUgTWVya2xlIHRyZWUgYmxvY2sgdG8gd3JpdGUKIAkgKiBAcG9zOiB0aGUgcG9zaXRpb24gb2YgdGhlIGJsb2NrIGluIHRoZSBNZXJrbGUgdHJlZSAoaW4gYnl0ZXMpCiAJICogQHNpemU6IHRoZSBNZXJrbGUgdHJlZSBibG9jayBzaXplIChpbiBieXRlcykKJiM0MzsJICogQHplcm9fZGlnZXN0OiB0aGUgaGFzaCBvZiB0aGUgYWxsLXplcm9lcyBibG9jawomIzQzOwkgKiBAZGlnZXN0X3NpemU6IHNpemUgb2YgemVyb19kaWdlc3QsIGluIGJ5dGVzCiAJICoKIAkgKiBUaGlzIGlzIG9ubHkgY2FsbGVkIGJldHdlZW4gLSZndDtiZWdpbl9lbmFibGVfdmVyaXR5KCkgYW5kCiAJICogLSZndDtlbmRfZW5hYmxlX3Zlcml0eSgpLgpAQCAtMTMxLDcgJiM0MzsxMzMsOSBAQCBzdHJ1Y3QgZnN2ZXJpdHlfb3BlcmF0aW9ucyB7CiAJICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIC1lcnJubyBvbiBmYWlsdXJlCiAJICovCiAJaW50ICgqd3JpdGVfbWVya2xlX3RyZWVfYmxvY2spKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCB2b2lkICpidWYsCi0JCQkJICAgICAgIHU2NCBwb3MsIHVuc2lnbmVkIGludCBzaXplKTsKJiM0MzsJCQkJICAgICAgIHU2NCBwb3MsIHVuc2lnbmVkIGludCBzaXplLAomIzQzOwkJCQkgICAgICAgY29uc3QgdTggKnplcm9fZGlnZXN0LAomIzQzOwkJCQkgICAgICAgdW5zaWduZWQgaW50IGRpZ2VzdF9zaXplKTsKIH07CiAKICNpZmRlZiBDT05GSUdfRlNfVkVSSVRZCkBAIC0zMTcsMTAgJiM0MzszMjEsMTQgQEAgc3RhdGljIGlubGluZSBpbnQgZnN2ZXJpdHlfZmlsZV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQogCXJldHVybiAwOwogfQogCiYjNDM7aW50IGZzdmVyaXR5X2Vuc3VyZV92ZXJpdHlfaW5mbyhzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKJiM0MzsKIHZvaWQgZnN2ZXJpdHlfY2xlYW51cF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKIAogc3RydWN0IHBhZ2UgKmdlbmVyaWNfcmVhZF9tZXJrbGVfdHJlZV9wYWdlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHBnb2ZmX3QgaW5kZXgpOwogdm9pZCBnZW5lcmljX3JlYWRhaGVhZF9tZXJrbGVfdHJlZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IGluZGV4LAogCQkJCSAgIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpOwomIzQzO2ludCBmc3Zlcml0eV9wYWdlY2FjaGVfcmVhZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCB2b2lkICpidWYsIHNpemVfdCBjb3VudCwKJiM0MzsJCQkgICAgbG9mZl90IHBvcyk7CiAKICNlbmRpZgkvKiBfTElOVVhfRlNWRVJJVFlfSCAqLwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAwNDoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzk0NgoJCQkJCQkJb3V0cHV0OiAyODYKCQkJCQkJCXRob3VnaHRzOiA2MjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBYRlMgZnMtdmVyaXR5IFBhdGNoIGZvciBGdXp6aW5nKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIHNlcmllcyB0aGF0IGJyaW5ncyBmcy12ZXJpdHkgdG8gWEZTLiBJdCYjMzk7cyBhIHNpZ25pZmljYW50IGNoYW5nZSwgdG91Y2hpbmcgY29yZSBrZXJuZWwgbG9naWMgaW4gYm90aCBYRlMgaXRzZWxmIGFuZCB0aGUgYGZzL3Zlcml0eWAgc3Vic3lzdGVtLiBEZWZpbml0ZWx5IGZ1enotd29ydGh5LgoKRmlyc3QsIGxldCYjMzk7cyBuYWlsIGRvd24gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB3ZSBuZWVkLiBJdCYjMzk7cyBhIG5vLWJyYWluZXIgdGhhdCBgQ09ORklHX0ZTX1ZFUklUWWAgaXMgZXNzZW50aWFsLiBOYXR1cmFsbHksIGBDT05GSUdfWEZTX0ZTYCBpcyBhbHNvIHJlcXVpcmVkIGZvciBYRlMgc3VwcG9ydC4gRGlnZ2luZyBpbnRvIHRoZSBgZnMveGZzL01ha2VmaWxlYCBhbmQgYGZzL3hmcy9LY29uZmlnYCwgSSBzZWUgdGhhdCBgeGZzLSQoQ09ORklHX0ZTX1ZFUklUWSkgJiM0Mzs9IHhmc19mc3Zlcml0eS5vYCBjb25maXJtcyB0aGF0IGBDT05GSUdfRlNfVkVSSVRZYCBpcyB0aGUgbWFpbiBlbmFibGVyLgoKTmV4dCwgSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBrZXkgc3ltYm9scyB0byBmb2N1cyBvbiBkdXJpbmcgZnV6emluZy4gSW4gYGZzL3hmcy94ZnNfZnN2ZXJpdHkuY2AsIHRoZSBmdW5jdGlvbnMgdGhhdCBzdGljayBvdXQgYXJlOiBgeGZzX2ZzdmVyaXR5X2dldF9kZXNjcmlwdG9yYCwgYHhmc19mc3Zlcml0eV93cml0ZV9kZXNjcmlwdG9yYCwgYHhmc19mc3Zlcml0eV9kZWxldGVfbWV0YWRhdGFgLCBgeGZzX2ZzdmVyaXR5X2NhbmNlbF91bndyaXR0ZW5gLCBgeGZzX2ZzdmVyaXR5X2JlZ2luX2VuYWJsZWAsIGB4ZnNfZnN2ZXJpdHlfZW5kX2VuYWJsZWAsIGB4ZnNfZnN2ZXJpdHlfcmVhZF9tZXJrbGVgLCBgeGZzX2ZzdmVyaXR5X3JlYWRhaGVhZF9tZXJrbGVfdHJlZWAsIGFuZCBgeGZzX2ZzdmVyaXR5X3dyaXRlX21lcmtsZWAuIFRoZW4sIHRoZXJlJiMzOTtzIGBmc3Zlcml0eV9wYWdlY2FjaGVfcmVhZGAgaW4gYGZzL3Zlcml0eS9wYWdlY2FjaGUuY2AuIEFuZCBmaW5hbGx5LCBpbiB0aGUgWEZTIHNjcnViIGNvZGUg4oCTIGBmcy94ZnMvc2NydWIvaW5vZGUuY2AsIGBmcy94ZnMvc2NydWIvaW5vZGVfcmVwYWlyLmNgLCBgZnMveGZzL3NjcnViL2NvbW1vbi5jYCDigJMgSSBzZWUgYHhjaGtfaW5vZGVfc2V0dXBfdmVyaXR5YCwgYHhjaGtfaW5vZGVfdmVyaXR5X2Jyb2tlbmAsIGFuZCBgeHJlcF9pbm9kZV92ZXJpdHlgLiBJIGNvbmZpcm1lZCB0aGUgeGZzIG9uZXMgYXJlIHJlYWNoYWJsZSB0aHJvdWdoIGBmc3Zlcml0eV9vcGVyYXRpb25zIHhmc19mc3Zlcml0eV9vcHNgLgoKQWxyaWdodCwgYSBmaW5hbCBjaGVjayBvbiB0aGUgY29uZmlnIG9wdGlvbnM6IGBDT05GSUdfRlNfVkVSSVRZYCwgYENPTkZJR19YRlNfRlNgLCBhbmQgZ2l2ZW4gdGhlIGludm9sdmVtZW50IG9mIHRoZSBzY3J1YiBjb2RlLCBsZXQmIzM5O3MgaW5jbHVkZSBgQ09ORklHX1hGU19PTkxJTkVfU0NSVUJgIHRvIGJlIHRob3JvdWdoLgoKTm93LCBsZXQmIzM5O3MgZ2V0IHRoZSByZXN1bHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDA0OjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtGU19WRVJJVFkmIzM0OywKICAgICYjMzQ7WEZTX0ZTJiMzNDssCiAgICAmIzM0O1hGU19PTkxJTkVfU0NSVUImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt4ZnNfZnN2ZXJpdHlfYmVnaW5fZW5hYmxlJiMzNDssCiAgICAmIzM0O3hmc19mc3Zlcml0eV9lbmRfZW5hYmxlJiMzNDssCiAgICAmIzM0O3hmc19mc3Zlcml0eV9nZXRfZGVzY3JpcHRvciYjMzQ7LAogICAgJiMzNDt4ZnNfZnN2ZXJpdHlfd3JpdGVfZGVzY3JpcHRvciYjMzQ7LAogICAgJiMzNDt4ZnNfZnN2ZXJpdHlfZGVsZXRlX21ldGFkYXRhJiMzNDssCiAgICAmIzM0O3hmc19mc3Zlcml0eV9jYW5jZWxfdW53cml0dGVuJiMzNDssCiAgICAmIzM0O3hmc19mc3Zlcml0eV9yZWFkX21lcmtsZSYjMzQ7LAogICAgJiMzNDt4ZnNfZnN2ZXJpdHlfcmVhZGFoZWFkX21lcmtsZV90cmVlJiMzNDssCiAgICAmIzM0O3hmc19mc3Zlcml0eV93cml0ZV9tZXJrbGUmIzM0OywKICAgICYjMzQ7ZnN2ZXJpdHlfcGFnZWNhY2hlX3JlYWQmIzM0OywKICAgICYjMzQ7eGNoa19pbm9kZV9zZXR1cF92ZXJpdHkmIzM0OywKICAgICYjMzQ7eGNoa19pbm9kZV92ZXJpdHlfYnJva2VuJiMzNDssCiAgICAmIzM0O3hyZXBfaW5vZGVfdmVyaXR5JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhpcyBwYXRjaCBzZXJpZXMgaW1wbGVtZW50cyBmcy12ZXJpdHkgc3VwcG9ydCBmb3IgdGhlIFhGUyBmaWxlc3lzdGVtLiBJdCBpbnRyb2R1Y2VzIG5ldyBtZXRhZGF0YSBoYW5kbGluZywgaW9jdGwgb3BlcmF0aW9ucywgYW5kIGludGVncmF0aW9uIHdpdGggWEZTJiMzOTtzIGlvbWFwIGFuZCBzY3J1YiBpbmZyYXN0cnVjdHVyZS4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgYWRkaXRpb24gdG8gYSBjb3JlIGZpbGVzeXN0ZW0gYW5kIHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCB0byBlbnN1cmUgZGF0YSBpbnRlZ3JpdHkgYW5kIHByZXZlbnQgdnVsbmVyYWJpbGl0aWVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtGU19WRVJJVFkmIzM0OywKICAgICYjMzQ7WEZTX0ZTJiMzNDssCiAgICAmIzM0O1hGU19PTkxJTkVfU0NSVUImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt4ZnNfZnN2ZXJpdHlfYmVnaW5fZW5hYmxlJiMzNDssCiAgICAmIzM0O3hmc19mc3Zlcml0eV9lbmRfZW5hYmxlJiMzNDssCiAgICAmIzM0O3hmc19mc3Zlcml0eV9nZXRfZGVzY3JpcHRvciYjMzQ7LAogICAgJiMzNDt4ZnNfZnN2ZXJpdHlfd3JpdGVfZGVzY3JpcHRvciYjMzQ7LAogICAgJiMzNDt4ZnNfZnN2ZXJpdHlfZGVsZXRlX21ldGFkYXRhJiMzNDssCiAgICAmIzM0O3hmc19mc3Zlcml0eV9jYW5jZWxfdW53cml0dGVuJiMzNDssCiAgICAmIzM0O3hmc19mc3Zlcml0eV9yZWFkX21lcmtsZSYjMzQ7LAogICAgJiMzNDt4ZnNfZnN2ZXJpdHlfcmVhZGFoZWFkX21lcmtsZV90cmVlJiMzNDssCiAgICAmIzM0O3hmc19mc3Zlcml0eV93cml0ZV9tZXJrbGUmIzM0OywKICAgICYjMzQ7ZnN2ZXJpdHlfcGFnZWNhY2hlX3JlYWQmIzM0OywKICAgICYjMzQ7eGNoa19pbm9kZV9zZXR1cF92ZXJpdHkmIzM0OywKICAgICYjMzQ7eGNoa19pbm9kZV92ZXJpdHlfYnJva2VuJiMzNDssCiAgICAmIzM0O3hyZXBfaW5vZGVfdmVyaXR5JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhpcyBwYXRjaCBzZXJpZXMgaW1wbGVtZW50cyBmcy12ZXJpdHkgc3VwcG9ydCBmb3IgdGhlIFhGUyBmaWxlc3lzdGVtLiBJdCBpbnRyb2R1Y2VzIG5ldyBtZXRhZGF0YSBoYW5kbGluZywgaW9jdGwgb3BlcmF0aW9ucywgYW5kIGludGVncmF0aW9uIHdpdGggWEZTJiMzOTtzIGlvbWFwIGFuZCBzY3J1YiBpbmZyYXN0cnVjdHVyZS4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgYWRkaXRpb24gdG8gYSBjb3JlIGZpbGVzeXN0ZW0gYW5kIHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCB0byBlbnN1cmUgZGF0YSBpbnRlZ3JpdHkgYW5kIHByZXZlbnQgdnVsbmVyYWJpbGl0aWVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMTFUMDQ6MTk6MDYuNTg3ODgwMTkyWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTkyOTkyMTQzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJGU19WRVJJVFlcIixcbiAgICBcIlhGU19GU1wiLFxuICAgIFwiWEZTX09OTElORV9TQ1JVQlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInhmc19mc3Zlcml0eV9iZWdpbl9lbmFibGVcIixcbiAgICBcInhmc19mc3Zlcml0eV9lbmRfZW5hYmxlXCIsXG4gICAgXCJ4ZnNfZnN2ZXJpdHlfZ2V0X2Rlc2NyaXB0b3JcIixcbiAgICBcInhmc19mc3Zlcml0eV93cml0ZV9kZXNjcmlwdG9yXCIsXG4gICAgXCJ4ZnNfZnN2ZXJpdHlfZGVsZXRlX21ldGFkYXRhXCIsXG4gICAgXCJ4ZnNfZnN2ZXJpdHlfY2FuY2VsX3Vud3JpdHRlblwiLFxuICAgIFwieGZzX2ZzdmVyaXR5X3JlYWRfbWVya2xlXCIsXG4gICAgXCJ4ZnNfZnN2ZXJpdHlfcmVhZGFoZWFkX21lcmtsZV90cmVlXCIsXG4gICAgXCJ4ZnNfZnN2ZXJpdHlfd3JpdGVfbWVya2xlXCIsXG4gICAgXCJmc3Zlcml0eV9wYWdlY2FjaGVfcmVhZFwiLFxuICAgIFwieGNoa19pbm9kZV9zZXR1cF92ZXJpdHlcIixcbiAgICBcInhjaGtfaW5vZGVfdmVyaXR5X2Jyb2tlblwiLFxuICAgIFwieHJlcF9pbm9kZV92ZXJpdHlcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoaXMgcGF0Y2ggc2VyaWVzIGltcGxlbWVudHMgZnMtdmVyaXR5IHN1cHBvcnQgZm9yIHRoZSBYRlMgZmlsZXN5c3RlbS4gSXQgaW50cm9kdWNlcyBuZXcgbWV0YWRhdGEgaGFuZGxpbmcsIGlvY3RsIG9wZXJhdGlvbnMsIGFuZCBpbnRlZ3JhdGlvbiB3aXRoIFhGUydzIGlvbWFwIGFuZCBzY3J1YiBpbmZyYXN0cnVjdHVyZS4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgYWRkaXRpb24gdG8gYSBjb3JlIGZpbGVzeXN0ZW0gYW5kIHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCB0byBlbnN1cmUgZGF0YSBpbnRlZ3JpdHkgYW5kIHByZXZlbnQgdnVsbmVyYWJpbGl0aWVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQwNDoxOTowNi41ODc4ODYzODJaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3Njc3MTIxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDU4MjJkMWNiMWVkODI4Nzk5NjgxZTYzNzQ3MjM3ZTM2OTVjMzg3NDFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBKdWwgMTEgMDQ6MTk6MDUgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZnMvYnRyZnMvdmVyaXR5LmMgYi9mcy9idHJmcy92ZXJpdHkuY1xcbmluZGV4IDk4MzM2NWE3MzU0MTY4Li5iZDc5ZTM0M2FlMjM3ZiAxMDA2NDRcXG4tLS0gYS9mcy9idHJmcy92ZXJpdHkuY1xcbisrKyBiL2ZzL2J0cmZzL3Zlcml0eS5jXFxuQEAgLTc3MywxMSArNzczLDE1IEBAIHN0YXRpYyBzdHJ1Y3QgcGFnZSAqYnRyZnNfcmVhZF9tZXJrbGVfdHJlZV9wYWdlKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuICAqIEBidWY6XFx0TWVya2xlIHRyZWUgYmxvY2sgdG8gd3JpdGVcXG4gICogQHBvczpcXHR0aGUgcG9zaXRpb24gb2YgdGhlIGJsb2NrIGluIHRoZSBNZXJrbGUgdHJlZSAoaW4gYnl0ZXMpXFxuICAqIEBzaXplOlxcdHRoZSBNZXJrbGUgdHJlZSBibG9jayBzaXplIChpbiBieXRlcylcXG4rICogQHplcm9fZGlnZXN0OlxcdHRoZSBoYXNoIG9mIHRoZSBhbGwtemVyb2VzIGJsb2NrXFxuKyAqIEBkaWdlc3Rfc2l6ZTpcXHRzaXplIG9mIHplcm9fZGlnZXN0LCBpbiBieXRlc1xcbiAgKlxcbiAgKiBSZXR1cm5zIDAgb24gc3VjY2VzcyBvciBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmVcXG4gICovXFxuIHN0YXRpYyBpbnQgYnRyZnNfd3JpdGVfbWVya2xlX3RyZWVfYmxvY2soc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IHZvaWQgKmJ1ZixcXG4tXFx0XFx0XFx0XFx0XFx0IHU2NCBwb3MsIHVuc2lnbmVkIGludCBzaXplKVxcbitcXHRcXHRcXHRcXHRcXHQgdTY0IHBvcywgdW5zaWduZWQgaW50IHNpemUsXFxuK1xcdFxcdFxcdFxcdFxcdCBjb25zdCB1OCAqemVyb19kaWdlc3QsXFxuK1xcdFxcdFxcdFxcdFxcdCB1bnNpZ25lZCBpbnQgZGlnZXN0X3NpemUpXFxuIHtcXG4gXFx0c3RydWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5vZGUoZmlsZSk7XFxuIFxcdGxvZmZfdCBtZXJrbGVfcG9zID0gbWVya2xlX2ZpbGVfcG9zKGlub2RlKTtcXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC92ZXJpdHkuYyBiL2ZzL2V4dDQvdmVyaXR5LmNcXG5pbmRleCBjYTYxZGE1M2YzMTNmYS4uYWM1YzEzM2Y1NTI5MjUgMTAwNjQ0XFxuLS0tIGEvZnMvZXh0NC92ZXJpdHkuY1xcbisrKyBiL2ZzL2V4dDQvdmVyaXR5LmNcXG5AQCAtMzQsMzIgKzM0LDYgQEAgc3RhdGljIGlubGluZSBsb2ZmX3QgZXh0NF92ZXJpdHlfbWV0YWRhdGFfcG9zKGNvbnN0IHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuIFxcdHJldHVybiByb3VuZF91cChpbm9kZS1cXHUwMDNlaV9zaXplLCA2NTUzNik7XFxuIH1cXG4gXFxuLS8qXFxuLSAqIFJlYWQgc29tZSB2ZXJpdHkgbWV0YWRhdGEgZnJvbSB0aGUgaW5vZGUuICBfX3Zmc19yZWFkKCkgY2FuJ3QgYmUgdXNlZCBiZWNhdXNlXFxuLSAqIHdlIG5lZWQgdG8gcmVhZCBiZXlvbmQgaV9zaXplLlxcbi0gKi9cXG4tc3RhdGljIGludCBwYWdlY2FjaGVfcmVhZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCB2b2lkICpidWYsIHNpemVfdCBjb3VudCxcXG4tXFx0XFx0XFx0ICBsb2ZmX3QgcG9zKVxcbi17XFxuLVxcdHdoaWxlIChjb3VudCkge1xcbi1cXHRcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xcbi1cXHRcXHRzaXplX3QgbjtcXG4tXFxuLVxcdFxcdGZvbGlvID0gcmVhZF9tYXBwaW5nX2ZvbGlvKGlub2RlLVxcdTAwM2VpX21hcHBpbmcsIHBvcyBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZULFxcbi1cXHRcXHRcXHRcXHRcXHQgTlVMTCk7XFxuLVxcdFxcdGlmIChJU19FUlIoZm9saW8pKVxcbi1cXHRcXHRcXHRyZXR1cm4gUFRSX0VSUihmb2xpbyk7XFxuLVxcbi1cXHRcXHRuID0gbWVtY3B5X2Zyb21fZmlsZV9mb2xpbyhidWYsIGZvbGlvLCBwb3MsIGNvdW50KTtcXG4tXFx0XFx0Zm9saW9fcHV0KGZvbGlvKTtcXG4tXFxuLVxcdFxcdGJ1ZiArPSBuO1xcbi1cXHRcXHRwb3MgKz0gbjtcXG4tXFx0XFx0Y291bnQgLT0gbjtcXG4tXFx0fVxcbi1cXHRyZXR1cm4gMDtcXG4tfVxcbi1cXG4gLypcXG4gICogV3JpdGUgc29tZSB2ZXJpdHkgbWV0YWRhdGEgdG8gdGhlIGlub2RlIGZvciBGU19JT0NfRU5BQkxFX1ZFUklUWS5cXG4gICoga2VybmVsX3dyaXRlKCkgY2FuJ3QgYmUgdXNlZCBiZWNhdXNlIHRoZSBmaWxlIGRlc2NyaXB0b3IgaXMgcmVhZG9ubHkuXFxuQEAgLTMxMSw4ICsyODUsOCBAQCBzdGF0aWMgaW50IGV4dDRfZ2V0X3Zlcml0eV9kZXNjcmlwdG9yX2xvY2F0aW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuIFxcdFxcdGdvdG8gYmFkO1xcbiBcXHRkZXNjX3NpemVfcG9zIC09IHNpemVvZihkZXNjX3NpemVfZGlzayk7XFxuIFxcbi1cXHRlcnIgPSBwYWdlY2FjaGVfcmVhZChpbm9kZSwgXFx1MDAyNmRlc2Nfc2l6ZV9kaXNrLCBzaXplb2YoZGVzY19zaXplX2Rpc2spLFxcbi1cXHRcXHRcXHQgICAgIGRlc2Nfc2l6ZV9wb3MpO1xcbitcXHRlcnIgPSBmc3Zlcml0eV9wYWdlY2FjaGVfcmVhZChpbm9kZSwgXFx1MDAyNmRlc2Nfc2l6ZV9kaXNrLFxcbitcXHRcXHRcXHRcXHQgICAgICBzaXplb2YoZGVzY19zaXplX2Rpc2spLCBkZXNjX3NpemVfcG9zKTtcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG4gXFx0ZGVzY19zaXplID0gbGUzMl90b19jcHUoZGVzY19zaXplX2Rpc2spO1xcbkBAIC0zNTIsNyArMzI2LDcgQEAgc3RhdGljIGludCBleHQ0X2dldF92ZXJpdHlfZGVzY3JpcHRvcihzdHJ1Y3QgaW5vZGUgKmlub2RlLCB2b2lkICpidWYsXFxuIFxcdGlmIChidWZfc2l6ZSkge1xcbiBcXHRcXHRpZiAoZGVzY19zaXplIFxcdTAwM2UgYnVmX3NpemUpXFxuIFxcdFxcdFxcdHJldHVybiAtRVJBTkdFO1xcbi1cXHRcXHRlcnIgPSBwYWdlY2FjaGVfcmVhZChpbm9kZSwgYnVmLCBkZXNjX3NpemUsIGRlc2NfcG9zKTtcXG4rXFx0XFx0ZXJyID0gZnN2ZXJpdHlfcGFnZWNhY2hlX3JlYWQoaW5vZGUsIGJ1ZiwgZGVzY19zaXplLCBkZXNjX3Bvcyk7XFxuIFxcdFxcdGlmIChlcnIpXFxuIFxcdFxcdFxcdHJldHVybiBlcnI7XFxuIFxcdH1cXG5AQCAtMzc0LDcgKzM0OCw5IEBAIHN0YXRpYyB2b2lkIGV4dDRfcmVhZGFoZWFkX21lcmtsZV90cmVlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHBnb2ZmX3QgaW5kZXgsXFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgZXh0NF93cml0ZV9tZXJrbGVfdHJlZV9ibG9jayhzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3Qgdm9pZCAqYnVmLFxcbi1cXHRcXHRcXHRcXHRcXHR1NjQgcG9zLCB1bnNpZ25lZCBpbnQgc2l6ZSlcXG4rXFx0XFx0XFx0XFx0XFx0dTY0IHBvcywgdW5zaWduZWQgaW50IHNpemUsXFxuK1xcdFxcdFxcdFxcdFxcdGNvbnN0IHU4ICp6ZXJvX2RpZ2VzdCxcXG4rXFx0XFx0XFx0XFx0XFx0dW5zaWduZWQgaW50IGRpZ2VzdF9zaXplKVxcbiB7XFxuIFxcdHBvcyArPSBleHQ0X3Zlcml0eV9tZXRhZGF0YV9wb3MoZmlsZV9pbm9kZShmaWxlKSk7XFxuIFxcbmRpZmYgLS1naXQgYS9mcy9mMmZzL3Zlcml0eS5jIGIvZnMvZjJmcy92ZXJpdHkuY1xcbmluZGV4IDM5ZjQ4MjUxNTQ0NTJhLi5mM2E0NjE3NjU2ZGI5YiAxMDA2NDRcXG4tLS0gYS9mcy9mMmZzL3Zlcml0eS5jXFxuKysrIGIvZnMvZjJmcy92ZXJpdHkuY1xcbkBAIC0zNywzNCArMzcsNiBAQCBzdGF0aWMgaW5saW5lIGxvZmZfdCBmMmZzX3Zlcml0eV9tZXRhZGF0YV9wb3MoY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSlcXG4gXFx0cmV0dXJuIHJvdW5kX3VwKGlub2RlLVxcdTAwM2VpX3NpemUsIDY1NTM2KTtcXG4gfVxcbiBcXG4tLypcXG4tICogUmVhZCBzb21lIHZlcml0eSBtZXRhZGF0YSBmcm9tIHRoZSBpbm9kZS4gIF9fdmZzX3JlYWQoKSBjYW4ndCBiZSB1c2VkIGJlY2F1c2VcXG4tICogd2UgbmVlZCB0byByZWFkIGJleW9uZCBpX3NpemUuXFxuLSAqL1xcbi1zdGF0aWMgaW50IHBhZ2VjYWNoZV9yZWFkKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHZvaWQgKmJ1Ziwgc2l6ZV90IGNvdW50LFxcbi1cXHRcXHRcXHQgIGxvZmZfdCBwb3MpXFxuLXtcXG4tXFx0d2hpbGUgKGNvdW50KSB7XFxuLVxcdFxcdHNpemVfdCBuID0gbWluX3Qoc2l6ZV90LCBjb3VudCxcXG4tXFx0XFx0XFx0XFx0IFBBR0VfU0laRSAtIG9mZnNldF9pbl9wYWdlKHBvcykpO1xcbi1cXHRcXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcXG4tXFxuLVxcdFxcdHBhZ2UgPSByZWFkX21hcHBpbmdfcGFnZShpbm9kZS1cXHUwMDNlaV9tYXBwaW5nLCBwb3MgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVCxcXG4tXFx0XFx0XFx0XFx0XFx0IE5VTEwpO1xcbi1cXHRcXHRpZiAoSVNfRVJSKHBhZ2UpKVxcbi1cXHRcXHRcXHRyZXR1cm4gUFRSX0VSUihwYWdlKTtcXG4tXFxuLVxcdFxcdG1lbWNweV9mcm9tX3BhZ2UoYnVmLCBwYWdlLCBvZmZzZXRfaW5fcGFnZShwb3MpLCBuKTtcXG4tXFxuLVxcdFxcdHB1dF9wYWdlKHBhZ2UpO1xcbi1cXG4tXFx0XFx0YnVmICs9IG47XFxuLVxcdFxcdHBvcyArPSBuO1xcbi1cXHRcXHRjb3VudCAtPSBuO1xcbi1cXHR9XFxuLVxcdHJldHVybiAwO1xcbi19XFxuLVxcbiAvKlxcbiAgKiBXcml0ZSBzb21lIHZlcml0eSBtZXRhZGF0YSB0byB0aGUgaW5vZGUgZm9yIEZTX0lPQ19FTkFCTEVfVkVSSVRZLlxcbiAgKiBrZXJuZWxfd3JpdGUoKSBjYW4ndCBiZSB1c2VkIGJlY2F1c2UgdGhlIGZpbGUgZGVzY3JpcHRvciBpcyByZWFkb25seS5cXG5AQCAtMjUwLDcgKzIyMiw3IEBAIHN0YXRpYyBpbnQgZjJmc19nZXRfdmVyaXR5X2Rlc2NyaXB0b3Ioc3RydWN0IGlub2RlICppbm9kZSwgdm9pZCAqYnVmLFxcbiBcXHRpZiAoYnVmX3NpemUpIHtcXG4gXFx0XFx0aWYgKHNpemUgXFx1MDAzZSBidWZfc2l6ZSlcXG4gXFx0XFx0XFx0cmV0dXJuIC1FUkFOR0U7XFxuLVxcdFxcdHJlcyA9IHBhZ2VjYWNoZV9yZWFkKGlub2RlLCBidWYsIHNpemUsIHBvcyk7XFxuK1xcdFxcdHJlcyA9IGZzdmVyaXR5X3BhZ2VjYWNoZV9yZWFkKGlub2RlLCBidWYsIHNpemUsIHBvcyk7XFxuIFxcdFxcdGlmIChyZXMpXFxuIFxcdFxcdFxcdHJldHVybiByZXM7XFxuIFxcdH1cXG5AQCAtMjcyLDcgKzI0NCw5IEBAIHN0YXRpYyB2b2lkIGYyZnNfcmVhZGFoZWFkX21lcmtsZV90cmVlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHBnb2ZmX3QgaW5kZXgsXFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgZjJmc193cml0ZV9tZXJrbGVfdHJlZV9ibG9jayhzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3Qgdm9pZCAqYnVmLFxcbi1cXHRcXHRcXHRcXHRcXHR1NjQgcG9zLCB1bnNpZ25lZCBpbnQgc2l6ZSlcXG4rXFx0XFx0XFx0XFx0XFx0dTY0IHBvcywgdW5zaWduZWQgaW50IHNpemUsXFxuK1xcdFxcdFxcdFxcdFxcdGNvbnN0IHU4ICp6ZXJvX2RpZ2VzdCxcXG4rXFx0XFx0XFx0XFx0XFx0dW5zaWduZWQgaW50IGRpZ2VzdF9zaXplKVxcbiB7XFxuIFxcdHBvcyArPSBmMmZzX3Zlcml0eV9tZXRhZGF0YV9wb3MoZmlsZV9pbm9kZShmaWxlKSk7XFxuIFxcbmRpZmYgLS1naXQgYS9mcy9maWxlX2F0dHIuYyBiL2ZzL2ZpbGVfYXR0ci5jXFxuaW5kZXggYmZiMDBkMjU2ZGQ1NjAuLjU0MjRlYzRlMzk0OTNmIDEwMDY0NFxcbi0tLSBhL2ZzL2ZpbGVfYXR0ci5jXFxuKysrIGIvZnMvZmlsZV9hdHRyLmNcXG5AQCAtMjQ2LDYgKzI0NiwxMSBAQCBzdGF0aWMgaW50IGZpbGVhdHRyX3NldF9wcmVwYXJlKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuIFxcdGlmIChmYS1cXHUwMDNlZnN4X2Nvd2V4dHNpemUgPT0gMClcXG4gXFx0XFx0ZmEtXFx1MDAzZWZzeF94ZmxhZ3MgXFx1MDAyNj0gfkZTX1hGTEFHX0NPV0VYVFNJWkU7XFxuIFxcbitcXHQvKiBDYW4gbm90IGVuYWJsZSBEQVggb24gZnN2ZXJpdHkgZmlsZSAqL1xcbitcXHRpZiAoKG9sZF9tYS1cXHUwMDNlZnN4X3hmbGFncyBcXHUwMDI2IEZTX1hGTEFHX1ZFUklUWSkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0XFx0ZmEtXFx1MDAzZWZzeF94ZmxhZ3MgXFx1MDAyNiBGU19YRkxBR19EQVgpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL2ZzL3Zlcml0eS9lbmFibGUuYyBiL2ZzL3Zlcml0eS9lbmFibGUuY1xcbmluZGV4IDQyZGZlZDFjZTBjZTY2Li5hZDRmZjcxZDdkZDk1YiAxMDA2NDRcXG4tLS0gYS9mcy92ZXJpdHkvZW5hYmxlLmNcXG4rKysgYi9mcy92ZXJpdHkvZW5hYmxlLmNcXG5AQCAtNTAsNyArNTAsOSBAQCBzdGF0aWMgaW50IHdyaXRlX21lcmtsZV90cmVlX2Jsb2NrKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCB1OCAqYnVmLFxcbiBcXHRpbnQgZXJyO1xcbiBcXG4gXFx0ZXJyID0gaW5vZGUtXFx1MDAzZWlfc2ItXFx1MDAzZXNfdm9wLVxcdTAwM2V3cml0ZV9tZXJrbGVfdHJlZV9ibG9jayhmaWxlLCBidWYsIHBvcyxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBwYXJhbXMtXFx1MDAzZWJsb2NrX3NpemUpO1xcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgIHBhcmFtcy1cXHUwMDNlYmxvY2tfc2l6ZSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBwYXJhbXMtXFx1MDAzZXplcm9fZGlnZXN0LFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgIHBhcmFtcy1cXHUwMDNlZGlnZXN0X3NpemUpO1xcbiBcXHRpZiAoZXJyKVxcbiBcXHRcXHRmc3Zlcml0eV9lcnIoaW5vZGUsIFxcXCJFcnJvciAlZCB3cml0aW5nIE1lcmtsZSB0cmVlIGJsb2NrICVsdVxcXCIsXFxuIFxcdFxcdFxcdCAgICAgZXJyLCBpbmRleCk7XFxuZGlmZiAtLWdpdCBhL2ZzL3Zlcml0eS9vcGVuLmMgYi9mcy92ZXJpdHkvb3Blbi5jXFxuaW5kZXggZDBjNTZhN2ZhYTNiYjEuLjg3NWU4ODUwY2NiYWNlIDEwMDY0NFxcbi0tLSBhL2ZzL3Zlcml0eS9vcGVuLmNcXG4rKysgYi9mcy92ZXJpdHkvb3Blbi5jXFxuQEAgLTM0Nyw3ICszNDcsMjQgQEAgaW50IGZzdmVyaXR5X2dldF9kZXNjcmlwdG9yKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IGVuc3VyZV92ZXJpdHlfaW5mbyhzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbisvKipcXG4rICogZnN2ZXJpdHlfZW5zdXJlX3Zlcml0eV9pbmZvKCkgLSBjYWNoZSB2ZXJpdHkgaW5mbyBpZiBpdCdzIG5vdCBhbHJlYWR5IGNhY2hlZFxcbisgKiBAaW5vZGU6IHRoZSBpbm9kZSBmb3Igd2hpY2ggdmVyaXR5IGluZm8gc2hvdWxkIGJlIGNhY2hlZFxcbisgKlxcbisgKiBFbnN1cmUgdGhpcyBpbm9kZSBoYXMgdmVyaXR5IGluZm8gYXR0YWNoZWQgdG8gaXQsIGl0J3MgYXNzdW1lZCB0aGUgaW5vZGVcXG4rICogYWxyZWFkeSBoYXMgZnN2ZXJpdHkgZW5hYmxlZC4gUmVhZCBmc3Zlcml0eSBkZXNjcmlwdG9yIGFuZCBjcmVhdGVzIHZlcml0eVxcbisgKiBiYXNlZCBvbiB0aGF0LlxcbisgKlxcbisgKiBUaGlzIG5lZWRzIHRvIGJlIGNhbGxlZCBhdCBsZWFzdCBvbmNlIGJlZm9yZSBhbnkgb2YgdGhlIGlub2RlJ3MgZGF0YVxcbisgKiBjYW4gYmUgdmVyaWZpZWQgKGFuZCB0aHVzIHJlYWQgYXQgYWxsKSBvciB0aGUgaW5vZGUncyBmc3Zlcml0eSBkaWdlc3RcXG4rICogcmV0cmlldmVkLiAgZnN2ZXJpdHlfZmlsZV9vcGVuKCkgY2FsbHMgdGhpcyBhbHJlYWR5LCB3aGljaCBoYW5kbGVzXFxuKyAqIG5vcm1hbCBmaWxlIGFjY2Vzc2VzLiAgSWYgYSBmaWxlc3lzdGVtIGRvZXMgYW55IGludGVybmFsIChpLmUuIG5vdFxcbisgKiBhc3NvY2lhdGVkIHdpdGggYSBmaWxlIGRlc2NyaXB0b3IpIHJlYWRzIG9mIHRoZSBmaWxlJ3MgZGF0YSBvclxcbisgKiBmc3Zlcml0eSBkaWdlc3QsIGl0IG11c3QgY2FsbCB0aGlzIGV4cGxpY2l0bHkgYmVmb3JlIGRvaW5nIHNvLlxcbisgKlxcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgLWVycm5vIG9uIGZhaWx1cmVcXG4rICovXFxuK2ludCBmc3Zlcml0eV9lbnN1cmVfdmVyaXR5X2luZm8oc3RydWN0IGlub2RlICppbm9kZSlcXG4ge1xcbiBcXHRzdHJ1Y3QgZnN2ZXJpdHlfaW5mbyAqdmkgPSBmc3Zlcml0eV9nZXRfaW5mbyhpbm9kZSksICpmb3VuZDtcXG4gXFx0c3RydWN0IGZzdmVyaXR5X2Rlc2NyaXB0b3IgKmRlc2M7XFxuQEAgLTM4MywxMiArNDAwLDEzIEBAIHN0YXRpYyBpbnQgZW5zdXJlX3Zlcml0eV9pbmZvKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuIFxcdGtmcmVlKGRlc2MpO1xcbiBcXHRyZXR1cm4gZXJyO1xcbiB9XFxuK0VYUE9SVF9TWU1CT0xfR1BMKGZzdmVyaXR5X2Vuc3VyZV92ZXJpdHlfaW5mbyk7XFxuIFxcbiBpbnQgX19mc3Zlcml0eV9maWxlX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApXFxuIHtcXG4gXFx0aWYgKGZpbHAtXFx1MDAzZWZfbW9kZSBcXHUwMDI2IEZNT0RFX1dSSVRFKVxcbiBcXHRcXHRyZXR1cm4gLUVQRVJNO1xcbi1cXHRyZXR1cm4gZW5zdXJlX3Zlcml0eV9pbmZvKGlub2RlKTtcXG4rXFx0cmV0dXJuIGZzdmVyaXR5X2Vuc3VyZV92ZXJpdHlfaW5mbyhpbm9kZSk7XFxuIH1cXG4gRVhQT1JUX1NZTUJPTF9HUEwoX19mc3Zlcml0eV9maWxlX29wZW4pO1xcbiBcXG5kaWZmIC0tZ2l0IGEvZnMvdmVyaXR5L3BhZ2VjYWNoZS5jIGIvZnMvdmVyaXR5L3BhZ2VjYWNoZS5jXFxuaW5kZXggOTlmNWY1M2VlYTk4NWYuLjI3MGFiZDY1MmU0OGM2IDEwMDY0NFxcbi0tLSBhL2ZzL3Zlcml0eS9wYWdlY2FjaGUuY1xcbisrKyBiL2ZzL3Zlcml0eS9wYWdlY2FjaGUuY1xcbkBAIC02OCwxMyArNjgsNjQgQEAgRVhQT1JUX1NZTUJPTF9HUEwoZ2VuZXJpY19yZWFkYWhlYWRfbWVya2xlX3RyZWUpO1xcbiB2b2lkIGZzdmVyaXR5X2ZpbGxfemVyb2hhc2goc3RydWN0IGZvbGlvICpmb2xpbywgc2l6ZV90IG9mZnNldCwgc2l6ZV90IGxlbixcXG4gXFx0XFx0XFx0ICAgICAgc3RydWN0IGZzdmVyaXR5X2luZm8gKnZpKVxcbiB7XFxuLVxcdHNpemVfdCBvZmYgPSBvZmZzZXQ7XFxuK1xcdHZvaWQgKnZhZGRyO1xcbitcXHR2b2lkICp0bztcXG4rXFx0c2l6ZV90IGNodW5rO1xcbiBcXG4gXFx0V0FSTl9PTl9PTkNFKCFJU19BTElHTkVEKG9mZnNldCwgdmktXFx1MDAzZXRyZWVfcGFyYW1zLmRpZ2VzdF9zaXplKSk7XFxuIFxcdFdBUk5fT05fT05DRSghSVNfQUxJR05FRChsZW4sIHZpLVxcdTAwM2V0cmVlX3BhcmFtcy5kaWdlc3Rfc2l6ZSkpO1xcbitcXHRXQVJOX09OX09OQ0Uob2Zmc2V0ICsgbGVuIFxcdTAwM2UgZm9saW9fc2l6ZShmb2xpbykpO1xcbiBcXG4tXFx0Zm9yICg7IG9mZiBcXHUwMDNjIChvZmZzZXQgKyBsZW4pOyBvZmYgKz0gdmktXFx1MDAzZXRyZWVfcGFyYW1zLmRpZ2VzdF9zaXplKVxcbi1cXHRcXHRtZW1jcHlfdG9fZm9saW8oZm9saW8sIG9mZiwgdmktXFx1MDAzZXRyZWVfcGFyYW1zLnplcm9fZGlnZXN0LFxcbitcXHRkbyB7XFxuK1xcdFxcdHZhZGRyID0ga21hcF9sb2NhbF9mb2xpbyhmb2xpbywgb2Zmc2V0KTtcXG4rXFx0XFx0Y2h1bmsgPSBsZW47XFxuK1xcdFxcdHRvID0gdmFkZHI7XFxuK1xcbitcXHRcXHRpZiAoZm9saW9fdGVzdF9wYXJ0aWFsX2ttYXAoZm9saW8pIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICBjaHVuayBcXHUwMDNlIFBBR0VfU0laRSAtIG9mZnNldF9pbl9wYWdlKG9mZnNldCkpXFxuK1xcdFxcdFxcdGNodW5rID0gUEFHRV9TSVpFIC0gb2Zmc2V0X2luX3BhZ2Uob2Zmc2V0KTtcXG4rXFx0XFx0Zm9yICg7IHRvIFxcdTAwM2MgKHZhZGRyICsgY2h1bmspOyB0byArPSB2aS1cXHUwMDNldHJlZV9wYXJhbXMuZGlnZXN0X3NpemUpXFxuK1xcdFxcdFxcdG1lbWNweSh0bywgdmktXFx1MDAzZXRyZWVfcGFyYW1zLnplcm9fZGlnZXN0LFxcbiBcXHRcXHRcXHRcXHR2aS1cXHUwMDNldHJlZV9wYXJhbXMuZGlnZXN0X3NpemUpO1xcbitcXHRcXHRrdW5tYXBfbG9jYWwodmFkZHIpO1xcbitcXG4rXFx0XFx0b2Zmc2V0ICs9IGNodW5rO1xcbitcXHRcXHRsZW4gLT0gY2h1bms7XFxuK1xcdH0gd2hpbGUgKGxlbiBcXHUwMDNlIDApO1xcbitcXG4rXFx0Zmx1c2hfZGNhY2hlX2ZvbGlvKGZvbGlvKTtcXG4gfVxcbiBFWFBPUlRfU1lNQk9MX0dQTChmc3Zlcml0eV9maWxsX3plcm9oYXNoKTtcXG4rXFxuKy8qKlxcbisgKiBmc3Zlcml0eV9wYWdlY2FjaGVfcmVhZCgpIC0gcmVhZCBwYWdlIGFuZCBjb3B5IGRhdGEgdG8gYnVmZmVyXFxuKyAqIEBpbm9kZTpcXHRjb3B5IGZyb20gdGhpcyBpbm9kZSdzIGFkZHJlc3Mgc3BhY2VcXG4rICogQGJ1ZjpcXHRidWZmZXIgdG8gY29weSB0b1xcbisgKiBAY291bnQ6XFx0bnVtYmVyIG9mIGJ5dGVzIHRvIGNvcHlcXG4rICogQHBvczpcXHRwb3NpdGlvbiBvZiB0aGUgZm9saW8gdG8gY29weSBmcm9tXFxuKyAqXFxuKyAqIFJlYWQgc29tZSB2ZXJpdHkgbWV0YWRhdGEgZnJvbSB0aGUgaW5vZGUuICBfX3Zmc19yZWFkKCkgY2FuJ3QgYmUgdXNlZCBiZWNhdXNlXFxuKyAqIHdlIG5lZWQgdG8gcmVhZCBiZXlvbmQgaV9zaXplLlxcbisgKi9cXG4raW50IGZzdmVyaXR5X3BhZ2VjYWNoZV9yZWFkKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHZvaWQgKmJ1Ziwgc2l6ZV90IGNvdW50LFxcbitcXHRcXHRcXHQgIGxvZmZfdCBwb3MpXFxuK3tcXG4rXFx0d2hpbGUgKGNvdW50KSB7XFxuK1xcdFxcdHN0cnVjdCBmb2xpbyAqZm9saW87XFxuK1xcdFxcdHNpemVfdCBuO1xcbitcXG4rXFx0XFx0Zm9saW8gPSByZWFkX21hcHBpbmdfZm9saW8oaW5vZGUtXFx1MDAzZWlfbWFwcGluZywgcG9zIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQsXFxuK1xcdFxcdFxcdFxcdFxcdCBOVUxMKTtcXG4rXFx0XFx0aWYgKElTX0VSUihmb2xpbykpXFxuK1xcdFxcdFxcdHJldHVybiBQVFJfRVJSKGZvbGlvKTtcXG4rXFxuK1xcdFxcdG4gPSBtZW1jcHlfZnJvbV9maWxlX2ZvbGlvKGJ1ZiwgZm9saW8sIHBvcywgY291bnQpO1xcbitcXHRcXHRmb2xpb19wdXQoZm9saW8pO1xcbitcXG4rXFx0XFx0YnVmICs9IG47XFxuK1xcdFxcdHBvcyArPSBuO1xcbitcXHRcXHRjb3VudCAtPSBuO1xcbitcXHR9XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfR1BMKGZzdmVyaXR5X3BhZ2VjYWNoZV9yZWFkKTtcXG5kaWZmIC0tZ2l0IGEvZnMvdmVyaXR5L3ZlcmlmeS5jIGIvZnMvdmVyaXR5L3ZlcmlmeS5jXFxuaW5kZXggNDAwNGExZDQyODc1MWYuLmRiOGMzNTAyMzRiYjcxIDEwMDY0NFxcbi0tLSBhL2ZzL3Zlcml0eS92ZXJpZnkuY1xcbisrKyBiL2ZzL3Zlcml0eS92ZXJpZnkuY1xcbkBAIC05LDYgKzksNyBAQFxcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Jpby5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZXhwb3J0LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9mc2Vycm9yLmhcXHUwMDNlXFxuIFxcbiAjZGVmaW5lIEZTX1ZFUklUWV9NQVhfUEVORElOR19CTE9DS1MgMlxcbiBcXG5AQCAtMjA1LDYgKzIwNiw4IEBAIHN0YXRpYyBib29sIHZlcmlmeV9kYXRhX2Jsb2NrKHN0cnVjdCBmc3Zlcml0eV9pbmZvICp2aSxcXG4gXFx0XFx0aWYgKG1lbWNocl9pbnYoZGJsb2NrLVxcdTAwM2VkYXRhLCAwLCBwYXJhbXMtXFx1MDAzZWJsb2NrX3NpemUpKSB7XFxuIFxcdFxcdFxcdGZzdmVyaXR5X2Vycihpbm9kZSxcXG4gXFx0XFx0XFx0XFx0ICAgICBcXFwiRklMRSBDT1JSVVBURUQhICBEYXRhIHBhc3QgRU9GIGlzIG5vdCB6ZXJvZWRcXFwiKTtcXG4rXFx0XFx0XFx0ZnNlcnJvcl9yZXBvcnRfZGF0YV9sb3N0KGlub2RlLCBkYXRhX3BvcyxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0IHBhcmFtcy1cXHUwMDNlYmxvY2tfc2l6ZSwgR0ZQX05PRlMpO1xcbiBcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcdFxcdH1cXG4gXFx0XFx0cmV0dXJuIHRydWU7XFxuQEAgLTMxMiw2ICszMTUsNyBAQCBzdGF0aWMgYm9vbCB2ZXJpZnlfZGF0YV9ibG9jayhzdHJ1Y3QgZnN2ZXJpdHlfaW5mbyAqdmksXFxuIFxcdFxcdGRhdGFfcG9zLCBsZXZlbCAtIDEsIHBhcmFtcy1cXHUwMDNlaGFzaF9hbGctXFx1MDAzZW5hbWUsIGhzaXplLCB3YW50X2hhc2gsXFxuIFxcdFxcdHBhcmFtcy1cXHUwMDNlaGFzaF9hbGctXFx1MDAzZW5hbWUsIGhzaXplLFxcbiBcXHRcXHRsZXZlbCA9PSAwID8gZGJsb2NrLVxcdTAwM2VyZWFsX2hhc2ggOiByZWFsX2hhc2gpO1xcbitcXHRmc2Vycm9yX3JlcG9ydF9kYXRhX2xvc3QoaW5vZGUsIGRhdGFfcG9zLCBwYXJhbXMtXFx1MDAzZWJsb2NrX3NpemUsIEdGUF9OT0ZTKTtcXG4gZXJyb3I6XFxuIFxcdGZvciAoOyBsZXZlbCBcXHUwMDNlIDA7IGxldmVsLS0pIHtcXG4gXFx0XFx0a3VubWFwX2xvY2FsKGhibG9ja3NbbGV2ZWwgLSAxXS5hZGRyKTtcXG5kaWZmIC0tZ2l0IGEvZnMveGZzL01ha2VmaWxlIGIvZnMveGZzL01ha2VmaWxlXFxuaW5kZXggOWY3MTMzZTAyNTc2OGQuLjM4YjdmNTFlNWQ4NDA1IDEwMDY0NFxcbi0tLSBhL2ZzL3hmcy9NYWtlZmlsZVxcbisrKyBiL2ZzL3hmcy9NYWtlZmlsZVxcbkBAIC0xNDksNiArMTQ5LDcgQEAgeGZzLSQoQ09ORklHX1hGU19QT1NJWF9BQ0wpXFx0Kz0geGZzX2FjbC5vXFxuIHhmcy0kKENPTkZJR19TWVNDVEwpXFx0XFx0Kz0geGZzX3N5c2N0bC5vXFxuIHhmcy0kKENPTkZJR19DT01QQVQpXFx0XFx0Kz0geGZzX2lvY3RsMzIub1xcbiB4ZnMtJChDT05GSUdfRVhQT1JURlNfQkxPQ0tfT1BTKVxcdCs9IHhmc19wbmZzLm9cXG4reGZzLSQoQ09ORklHX0ZTX1ZFUklUWSlcXHRcXHQrPSB4ZnNfZnN2ZXJpdHkub1xcbiBcXG4gIyBub3RpZnkgZmFpbHVyZVxcbiBpZmVxICgkKENPTkZJR19NRU1PUllfRkFJTFVSRSkseSlcXG5kaWZmIC0tZ2l0IGEvZnMveGZzL2xpYnhmcy94ZnNfYm1hcC5jIGIvZnMveGZzL2xpYnhmcy94ZnNfYm1hcC5jXFxuaW5kZXggZDY0ZGVmZWRhNjQ1ZWQuLmNjNDhmNmUyMGU4MDAwIDEwMDY0NFxcbi0tLSBhL2ZzL3hmcy9saWJ4ZnMveGZzX2JtYXAuY1xcbisrKyBiL2ZzL3hmcy9saWJ4ZnMveGZzX2JtYXAuY1xcbkBAIC00MSw2ICs0MSw4IEBAXFxuICNpbmNsdWRlIFxcXCJ4ZnNfaW5vZGVfdXRpbC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwieGZzX3J0Z3JvdXAuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInhmc196b25lX2FsbG9jLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJ4ZnNfZnN2ZXJpdHkuaFxcXCJcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ZzdmVyaXR5LmhcXHUwMDNlXFxuIFxcbiBzdHJ1Y3Qga21lbV9jYWNoZVxcdFxcdCp4ZnNfYm1hcF9pbnRlbnRfY2FjaGU7XFxuIFxcbkBAIC00NDAyLDYgKzQ0MDQsMTAgQEAgeGZzX2JtYXBpX2NvbnZlcnRfb25lX2RlbGFsbG9jKFxcbiBcXHQgKiB0aGUgZXh0ZW50LiAgSnVzdCByZXR1cm4gdGhlIHJlYWwgZXh0ZW50IGF0IHRoaXMgb2Zmc2V0LlxcbiBcXHQgKi9cXG4gXFx0aWYgKCFpc251bGxzdGFydGJsb2NrKGJtYS5nb3QuYnJfc3RhcnRibG9jaykpIHtcXG4rXFx0XFx0aWYgKHhmc19pZmxhZ3NfdGVzdChpcCwgWEZTX1ZFUklUWV9DT05TVFJVQ1RJT04pIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICBYRlNfRlNCX1RPX0IobXAsIGJtYS5nb3QuYnJfc3RhcnRvZmYpIFxcdTAwM2U9XFxuK1xcdFxcdFxcdCAgICB4ZnNfZnN2ZXJpdHlfbWV0YWRhdGFfb2Zmc2V0KGlwKSlcXG4rXFx0XFx0XFx0ZmxhZ3MgfD0gSU9NQVBfRl9GU1ZFUklUWTtcXG4gXFx0XFx0eGZzX2JtYnRfdG9faW9tYXAoaXAsIGlvbWFwLCBcXHUwMDI2Ym1hLmdvdCwgMCwgZmxhZ3MsXFxuIFxcdFxcdFxcdFxcdHhmc19pb21hcF9pbm9kZV9zZXF1ZW5jZShpcCwgZmxhZ3MpKTtcXG4gXFx0XFx0aWYgKHNlcSlcXG5AQCAtNDQ0OSw2ICs0NDU1LDExIEBAIHhmc19ibWFwaV9jb252ZXJ0X29uZV9kZWxhbGxvYyhcXG4gXFx0WEZTX1NUQVRTX0FERChtcCwgeHNfeHN0cmF0X2J5dGVzLCBYRlNfRlNCX1RPX0IobXAsIGJtYS5sZW5ndGgpKTtcXG4gXFx0WEZTX1NUQVRTX0lOQyhtcCwgeHNfeHN0cmF0X3F1aWNrKTtcXG4gXFxuK1xcdGlmICh4ZnNfaWZsYWdzX3Rlc3QoaXAsIFhGU19WRVJJVFlfQ09OU1RSVUNUSU9OKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgWEZTX0ZTQl9UT19CKG1wLCBibWEuZ290LmJyX3N0YXJ0b2ZmKSBcXHUwMDNlPVxcbitcXHRcXHQgICAgeGZzX2ZzdmVyaXR5X21ldGFkYXRhX29mZnNldChpcCkpXFxuK1xcdFxcdGZsYWdzIHw9IElPTUFQX0ZfRlNWRVJJVFk7XFxuK1xcbiBcXHRBU1NFUlQoIWlzbnVsbHN0YXJ0YmxvY2soYm1hLmdvdC5icl9zdGFydGJsb2NrKSk7XFxuIFxcdHhmc19ibWJ0X3RvX2lvbWFwKGlwLCBpb21hcCwgXFx1MDAyNmJtYS5nb3QsIDAsIGZsYWdzLFxcbiBcXHRcXHRcXHRcXHR4ZnNfaW9tYXBfaW5vZGVfc2VxdWVuY2UoaXAsIGZsYWdzKSk7XFxuZGlmZiAtLWdpdCBhL2ZzL3hmcy9saWJ4ZnMveGZzX2Zvcm1hdC5oIGIvZnMveGZzL2xpYnhmcy94ZnNfZm9ybWF0LmhcXG5pbmRleCBkZDBlZDA0NmZiZTljOS4uMjg3OGJjOWNiNjU2NGUgMTAwNjQ0XFxuLS0tIGEvZnMveGZzL2xpYnhmcy94ZnNfZm9ybWF0LmhcXG4rKysgYi9mcy94ZnMvbGlieGZzL3hmc19mb3JtYXQuaFxcbkBAIC0zNzQsMTEgKzM3NCwxMyBAQCB4ZnNfc2JfaGFzX2NvbXBhdF9mZWF0dXJlKFxcbiAjZGVmaW5lIFhGU19TQl9GRUFUX1JPX0NPTVBBVF9STUFQQlQgICAoMSBcXHUwMDNjXFx1MDAzYyAxKVxcdFxcdC8qIHJldmVyc2UgbWFwIGJ0cmVlICovXFxuICNkZWZpbmUgWEZTX1NCX0ZFQVRfUk9fQ09NUEFUX1JFRkxJTksgICgxIFxcdTAwM2NcXHUwMDNjIDIpXFx0XFx0LyogcmVmbGlua2VkIGZpbGVzICovXFxuICNkZWZpbmUgWEZTX1NCX0ZFQVRfUk9fQ09NUEFUX0lOT0JUQ05UICgxIFxcdTAwM2NcXHUwMDNjIDMpXFx0XFx0LyogaW5vYnQgYmxvY2sgY291bnRzICovXFxuKyNkZWZpbmUgWEZTX1NCX0ZFQVRfUk9fQ09NUEFUX1ZFUklUWSAgICgxIFxcdTAwM2NcXHUwMDNjIDQpXFx0XFx0LyogZnMtdmVyaXR5ICovXFxuICNkZWZpbmUgWEZTX1NCX0ZFQVRfUk9fQ09NUEFUX0FMTCBcXFxcXFxuIFxcdFxcdChYRlNfU0JfRkVBVF9ST19DT01QQVRfRklOT0JUIHwgXFxcXFxcbiBcXHRcXHQgWEZTX1NCX0ZFQVRfUk9fQ09NUEFUX1JNQVBCVCB8IFxcXFxcXG4tXFx0XFx0IFhGU19TQl9GRUFUX1JPX0NPTVBBVF9SRUZMSU5LfCBcXFxcXFxuLVxcdFxcdCBYRlNfU0JfRkVBVF9ST19DT01QQVRfSU5PQlRDTlQpXFxuK1xcdFxcdCBYRlNfU0JfRkVBVF9ST19DT01QQVRfUkVGTElOSyB8IFxcXFxcXG4rXFx0XFx0IFhGU19TQl9GRUFUX1JPX0NPTVBBVF9JTk9CVENOVCB8IFxcXFxcXG4rXFx0XFx0IFhGU19TQl9GRUFUX1JPX0NPTVBBVF9WRVJJVFkpXFxuICNkZWZpbmUgWEZTX1NCX0ZFQVRfUk9fQ09NUEFUX1VOS05PV05cXHR+WEZTX1NCX0ZFQVRfUk9fQ09NUEFUX0FMTFxcbiBzdGF0aWMgaW5saW5lIGJvb2xcXG4geGZzX3NiX2hhc19yb19jb21wYXRfZmVhdHVyZShcXG5AQCAtMTIzMCwxNiArMTIzMiwyMSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgeGZzX2Rpbm9kZV9wdXRfcmRldihzdHJ1Y3QgeGZzX2Rpbm9kZSAqZGlwLCB4ZnNfZGV2X3QgcmRldilcXG4gICovXFxuICNkZWZpbmUgWEZTX0RJRkxBRzJfTUVUQURBVEFfQklUXFx0NVxcbiBcXG4rLyogaW5vZGVzIHNlYWxlZCB3aXRoIGZzLXZlcml0eSAqL1xcbisjZGVmaW5lIFhGU19ESUZMQUcyX1ZFUklUWV9CSVRcXHRcXHQ2XFxuK1xcbiAjZGVmaW5lIFhGU19ESUZMQUcyX0RBWFxcdFxcdCgxVUxMIFxcdTAwM2NcXHUwMDNjIFhGU19ESUZMQUcyX0RBWF9CSVQpXFxuICNkZWZpbmUgWEZTX0RJRkxBRzJfUkVGTElOS1xcdCgxVUxMIFxcdTAwM2NcXHUwMDNjIFhGU19ESUZMQUcyX1JFRkxJTktfQklUKVxcbiAjZGVmaW5lIFhGU19ESUZMQUcyX0NPV0VYVFNJWkVcXHQoMVVMTCBcXHUwMDNjXFx1MDAzYyBYRlNfRElGTEFHMl9DT1dFWFRTSVpFX0JJVClcXG4gI2RlZmluZSBYRlNfRElGTEFHMl9CSUdUSU1FXFx0KDFVTEwgXFx1MDAzY1xcdTAwM2MgWEZTX0RJRkxBRzJfQklHVElNRV9CSVQpXFxuICNkZWZpbmUgWEZTX0RJRkxBRzJfTlJFWFQ2NFxcdCgxVUxMIFxcdTAwM2NcXHUwMDNjIFhGU19ESUZMQUcyX05SRVhUNjRfQklUKVxcbiAjZGVmaW5lIFhGU19ESUZMQUcyX01FVEFEQVRBXFx0KDFVTEwgXFx1MDAzY1xcdTAwM2MgWEZTX0RJRkxBRzJfTUVUQURBVEFfQklUKVxcbisjZGVmaW5lIFhGU19ESUZMQUcyX1ZFUklUWVxcdCgxVUxMIFxcdTAwM2NcXHUwMDNjIFhGU19ESUZMQUcyX1ZFUklUWV9CSVQpXFxuIFxcbiAjZGVmaW5lIFhGU19ESUZMQUcyX0FOWSBcXFxcXFxuIFxcdChYRlNfRElGTEFHMl9EQVggfCBYRlNfRElGTEFHMl9SRUZMSU5LIHwgWEZTX0RJRkxBRzJfQ09XRVhUU0laRSB8IFxcXFxcXG4tXFx0IFhGU19ESUZMQUcyX0JJR1RJTUUgfCBYRlNfRElGTEFHMl9OUkVYVDY0IHwgWEZTX0RJRkxBRzJfTUVUQURBVEEpXFxuK1xcdCBYRlNfRElGTEFHMl9CSUdUSU1FIHwgWEZTX0RJRkxBRzJfTlJFWFQ2NCB8IFhGU19ESUZMQUcyX01FVEFEQVRBIHwgXFxcXFxcbitcXHQgWEZTX0RJRkxBRzJfVkVSSVRZKVxcbiBcXG4gc3RhdGljIGlubGluZSBib29sIHhmc19kaW5vZGVfaGFzX2JpZ3RpbWUoY29uc3Qgc3RydWN0IHhmc19kaW5vZGUgKmRpcClcXG4ge1xcbkBAIC0yMDI3LDQgKzIwMzQsMjYgQEAgc3RydWN0IHhmc19hY2wge1xcbiAjZGVmaW5lIFNHSV9BQ0xfRklMRV9TSVpFXFx0KHNpemVvZihTR0lfQUNMX0ZJTEUpLTEpXFxuICNkZWZpbmUgU0dJX0FDTF9ERUZBVUxUX1NJWkVcXHQoc2l6ZW9mKFNHSV9BQ0xfREVGQVVMVCktMSlcXG4gXFxuKy8qXFxuKyAqIEF0IG1heGltdW0gb2YgOCBsZXZlbHMgd2l0aCAxMjggaGFzaGVzIHBlciBibG9jayAoMzIgYnl0ZXMgU0hBLTI1NikgbWF4aW11bVxcbisgKiB0cmVlIHNpemUgaXMgKCgxMjheOCDiiJIgMSkvKDEyOCDiiJIgMSkpID0gNTY3KjEwXjEyIGJsb2Nrcy4gVGhpcyBzaG91bGQgZml0IGluXFxuKyAqIDUzIGJpdHMgYWRkcmVzcyBzcGFjZS5cXG4rICpcXG4rICogQXQgdGhpcyBNZXJrbGUgdHJlZSBzaXplIHdlIGNhbiBjb3ZlciAyOTVFQiBsYXJnZSBmaWxlLiBUaGlzIGlzIG11Y2ggbGFyZ2VyXFxuKyAqIHRoYW4gdGhlIGN1cnJlbnRseSBzdXBwb3J0ZWQgZmlsZSBzaXplLlxcbisgKlxcbisgKiBGb3Igc2hhNTEyIHRoZSBsYXJnZXN0IGZpbGUgd2UgY2FuIGNvdmVyIGVuZHMgYXQgMSBcXHUwMDNjXFx1MDAzYyA1MCBvZmZzZXQsIHRoaXMgaXMgYWxzb1xcbisgKiBnb29kLlxcbisgKi9cXG4rI2RlZmluZSBYRlNfRlNWRVJJVFlfTEFSR0VTVF9GSUxFXFx0KChsb2ZmX3QpMVVMTCBcXHUwMDNjXFx1MDAzYyA1MylcXG4rXFxuKy8qXFxuKyAqIEFsaWdubWVudCBvZiB0aGUgZnN2ZXJpdHkgbWV0YWRhdGEgcGxhY2VtZW50LiBUaGlzIGlzIGxhcmdlc3Qgc3VwcG9ydGVkIFBBR0VcXG4rICogU0laRSBmb3IgZnN2ZXJpdHkuIFRoaXMgaXMgdXNlZCB0byBzcGFjZSBvdXQgZGF0YSBhbmQgbWV0YWRhdGEgaW4gcGFnZSBjYWNoZS5cXG4rICogVGhlIHNwYWNpbmcgaXMgbmVjZXNzYXJ5IGZvciBub24tZXhwb3N1cmUgb2YgbWV0YWRhdGEgdG8gdXNlcnNwYWNlIGFuZFxcbisgKiBjb3JyZWN0IG1lcmtsZSB0cmVlIHN5bmV0aGVzaXMgaW4gdGhlIGlvbWFwLlxcbisgKi9cXG4rI2RlZmluZSBYRlNfRlNWRVJJVFlfU1RBUlRfQUxJR05cXHQoNjU1MzYpXFxuK1xcbitcXG4gI2VuZGlmIC8qIF9fWEZTX0ZPUk1BVF9IX18gKi9cXG5kaWZmIC0tZ2l0IGEvZnMveGZzL2xpYnhmcy94ZnNfZnMuaCBiL2ZzL3hmcy9saWJ4ZnMveGZzX2ZzLmhcXG5pbmRleCAxODVmMDlmMzI3YzAwYy4uODRkNjJiNzUwNmE5YWQgMTAwNjQ0XFxuLS0tIGEvZnMveGZzL2xpYnhmcy94ZnNfZnMuaFxcbisrKyBiL2ZzL3hmcy9saWJ4ZnMveGZzX2ZzLmhcXG5AQCAtMjUwLDYgKzI1MCw3IEBAIHR5cGVkZWYgc3RydWN0IHhmc19mc29wX3Jlc2Jsa3Mge1xcbiAjZGVmaW5lIFhGU19GU09QX0dFT01fRkxBR1NfUEFSRU5UXFx0KDEgXFx1MDAzY1xcdTAwM2MgMjUpIC8qIGxpbnV4IHBhcmVudCBwb2ludGVycyAqL1xcbiAjZGVmaW5lIFhGU19GU09QX0dFT01fRkxBR1NfTUVUQURJUlxcdCgxIFxcdTAwM2NcXHUwMDNjIDI2KSAvKiBtZXRhZGF0YSBkaXJlY3RvcmllcyAqL1xcbiAjZGVmaW5lIFhGU19GU09QX0dFT01fRkxBR1NfWk9ORURcXHQoMSBcXHUwMDNjXFx1MDAzYyAyNykgLyogem9uZWQgcnQgZGV2aWNlICovXFxuKyNkZWZpbmUgWEZTX0ZTT1BfR0VPTV9GTEFHU19WRVJJVFlcXHQoMSBcXHUwMDNjXFx1MDAzYyAyOCkgLyogZnMtdmVyaXR5ICovXFxuIFxcbiAvKlxcbiAgKiBNaW5pbXVtIGFuZCBtYXhpbXVtIHNpemVzIG5lZWQgZm9yIGdyb3d0aCBjaGVja3MuXFxuQEAgLTQyMSw2ICs0MjIsNyBAQCBzdHJ1Y3QgeGZzX2J1bGtzdGF0IHtcXG4gI2RlZmluZSBYRlNfQlNfU0lDS19TWU1MSU5LXFx0KDEgXFx1MDAzY1xcdTAwM2MgNikgIC8qIHN5bWJvbGljIGxpbmsgcmVtb3RlIHRhcmdldCAqL1xcbiAjZGVmaW5lIFhGU19CU19TSUNLX1BBUkVOVFxcdCgxIFxcdTAwM2NcXHUwMDNjIDcpICAvKiBwYXJlbnQgcG9pbnRlcnMgKi9cXG4gI2RlZmluZSBYRlNfQlNfU0lDS19ESVJUUkVFXFx0KDEgXFx1MDAzY1xcdTAwM2MgOCkgIC8qIGRpcmVjdG9yeSB0cmVlIHN0cnVjdHVyZSAqL1xcbisjZGVmaW5lIFhGU19CU19TSUNLX0ZTVkVSSVRZXFx0KDEgXFx1MDAzY1xcdTAwM2MgOSkgIC8qIGZzdmVyaXR5IG1ldGFkYXRhICovXFxuIFxcbiAvKlxcbiAgKiBQcm9qZWN0IHF1b3RhIGlkIGhlbHBlcnMgKHByZXZpb3VzbHkgcHJvamlkIHdhcyAxNmJpdCBvbmx5XFxuZGlmZiAtLWdpdCBhL2ZzL3hmcy9saWJ4ZnMveGZzX2hlYWx0aC5oIGIvZnMveGZzL2xpYnhmcy94ZnNfaGVhbHRoLmhcXG5pbmRleCAxZDQ1Y2Y1Nzg5ZTg2NC4uOTMyYjQ0NzE5MGRhNzYgMTAwNjQ0XFxuLS0tIGEvZnMveGZzL2xpYnhmcy94ZnNfaGVhbHRoLmhcXG4rKysgYi9mcy94ZnMvbGlieGZzL3hmc19oZWFsdGguaFxcbkBAIC0xMDQsNiArMTA0LDcgQEAgc3RydWN0IHhmc19ydGdyb3VwO1xcbiAvKiBEb24ndCBwcm9wYWdhdGUgc2ljayBzdGF0dXMgdG8gYWcgaGVhbHRoIHN1bW1hcnkgZHVyaW5nIGluYWN0aXZhdGlvbiAqL1xcbiAjZGVmaW5lIFhGU19TSUNLX0lOT19GT1JHRVRcXHQoMSBcXHUwMDNjXFx1MDAzYyAxMilcXG4gI2RlZmluZSBYRlNfU0lDS19JTk9fRElSVFJFRVxcdCgxIFxcdTAwM2NcXHUwMDNjIDEzKSAgLyogZGlyZWN0b3J5IHRyZWUgc3RydWN0dXJlICovXFxuKyNkZWZpbmUgWEZTX1NJQ0tfSU5PX0ZTVkVSSVRZXFx0KDEgXFx1MDAzY1xcdTAwM2MgMTQpICAvKiBmc3Zlcml0eSBtZXRhZGF0YSAqL1xcbiBcXG4gLyogUHJpbWFyeSBldmlkZW5jZSBvZiBoZWFsdGggcHJvYmxlbXMgaW4gYSBnaXZlbiBncm91cC4gKi9cXG4gI2RlZmluZSBYRlNfU0lDS19GU19QUklNQVJZXFx0KFhGU19TSUNLX0ZTX0NPVU5URVJTIHwgXFxcXFxcbkBAIC0xNDAsNyArMTQxLDggQEAgc3RydWN0IHhmc19ydGdyb3VwO1xcbiBcXHRcXHRcXHRcXHQgWEZTX1NJQ0tfSU5PX1hBVFRSIHwgXFxcXFxcbiBcXHRcXHRcXHRcXHQgWEZTX1NJQ0tfSU5PX1NZTUxJTksgfCBcXFxcXFxuIFxcdFxcdFxcdFxcdCBYRlNfU0lDS19JTk9fUEFSRU5UIHwgXFxcXFxcbi1cXHRcXHRcXHRcXHQgWEZTX1NJQ0tfSU5PX0RJUlRSRUUpXFxuK1xcdFxcdFxcdFxcdCBYRlNfU0lDS19JTk9fRElSVFJFRSB8IFxcXFxcXG4rXFx0XFx0XFx0XFx0IFhGU19TSUNLX0lOT19GU1ZFUklUWSlcXG4gXFxuICNkZWZpbmUgWEZTX1NJQ0tfSU5PX1pBUFBFRFxcdChYRlNfU0lDS19JTk9fQk1CVERfWkFQUEVEIHwgXFxcXFxcbiBcXHRcXHRcXHRcXHQgWEZTX1NJQ0tfSU5PX0JNQlRBX1pBUFBFRCB8IFxcXFxcXG5kaWZmIC0tZ2l0IGEvZnMveGZzL2xpYnhmcy94ZnNfaW5vZGVfYnVmLmMgYi9mcy94ZnMvbGlieGZzL3hmc19pbm9kZV9idWYuY1xcbmluZGV4IDMzNmVmODQzZjJmZTRmLi5iZDgwYTE5ZjJlMDkyOSAxMDA2NDRcXG4tLS0gYS9mcy94ZnMvbGlieGZzL3hmc19pbm9kZV9idWYuY1xcbisrKyBiL2ZzL3hmcy9saWJ4ZnMveGZzX2lub2RlX2J1Zi5jXFxuQEAgLTc2MCw2ICs3NjAsMTQgQEAgeGZzX2Rpbm9kZV92ZXJpZnkoXFxuIFxcdCAgICAheGZzX2hhc19ydHJlZmxpbmsobXApKVxcbiBcXHRcXHRyZXR1cm4gX190aGlzX2FkZHJlc3M7XFxuIFxcbitcXHQvKiBvbmx5IHJlZ3VsYXIgZmlsZXMgY2FuIGhhdmUgZnN2ZXJpdHkgKi9cXG4rXFx0aWYgKGZsYWdzMiBcXHUwMDI2IFhGU19ESUZMQUcyX1ZFUklUWSkge1xcbitcXHRcXHRpZiAoIXhmc19oYXNfdmVyaXR5KG1wKSlcXG4rXFx0XFx0XFx0cmV0dXJuIF9fdGhpc19hZGRyZXNzO1xcbitcXHRcXHRpZiAoIVNfSVNSRUcobW9kZSkpXFxuK1xcdFxcdFxcdHJldHVybiBfX3RoaXNfYWRkcmVzcztcXG4rXFx0fVxcbitcXG4gXFx0aWYgKHhmc19oYXNfem9uZWQobXApIFxcdTAwMjZcXHUwMDI2XFxuIFxcdCAgICBkaXAtXFx1MDAzZWRpX21ldGF0eXBlID09IGNwdV90b19iZTE2KFhGU19NRVRBRklMRV9SVFJNQVApKSB7XFxuIFxcdFxcdGlmIChiZTMyX3RvX2NwdShkaXAtXFx1MDAzZWRpX3VzZWRfYmxvY2tzKSBcXHUwMDNlIG1wLVxcdTAwM2VtX3NiLnNiX3JnZXh0ZW50cylcXG5kaWZmIC0tZ2l0IGEvZnMveGZzL2xpYnhmcy94ZnNfaW5vZGVfdXRpbC5jIGIvZnMveGZzL2xpYnhmcy94ZnNfaW5vZGVfdXRpbC5jXFxuaW5kZXggMjU4YWMzZDBkNDg2ZTYuLjVhNTE2YmQzMWMzMTc1IDEwMDY0NFxcbi0tLSBhL2ZzL3hmcy9saWJ4ZnMveGZzX2lub2RlX3V0aWwuY1xcbisrKyBiL2ZzL3hmcy9saWJ4ZnMveGZzX2lub2RlX3V0aWwuY1xcbkBAIC03NCw3ICs3NCw4IEBAIHhmc19mbGFnczJkaWZsYWdzMihcXG4gXFx0dWludDY0X3RcXHRcXHRkaV9mbGFnczIgPVxcbiBcXHRcXHQoaXAtXFx1MDAzZWlfZGlmbGFnczIgXFx1MDAyNiAoWEZTX0RJRkxBRzJfUkVGTElOSyB8XFxuIFxcdFxcdFxcdFxcdCAgIFhGU19ESUZMQUcyX0JJR1RJTUUgfFxcbi1cXHRcXHRcXHRcXHQgICBYRlNfRElGTEFHMl9OUkVYVDY0KSk7XFxuK1xcdFxcdFxcdFxcdCAgIFhGU19ESUZMQUcyX05SRVhUNjQgfFxcbitcXHRcXHRcXHRcXHQgICBYRlNfRElGTEFHMl9WRVJJVFkpKTtcXG4gXFxuIFxcdGlmICh4ZmxhZ3MgXFx1MDAyNiBGU19YRkxBR19EQVgpXFxuIFxcdFxcdGRpX2ZsYWdzMiB8PSBYRlNfRElGTEFHMl9EQVg7XFxuQEAgLTEyNiw2ICsxMjcsOCBAQCB4ZnNfaXAyeGZsYWdzKFxcbiBcXHRcXHRcXHRmbGFncyB8PSBGU19YRkxBR19EQVg7XFxuIFxcdFxcdGlmIChpcC1cXHUwMDNlaV9kaWZsYWdzMiBcXHUwMDI2IFhGU19ESUZMQUcyX0NPV0VYVFNJWkUpXFxuIFxcdFxcdFxcdGZsYWdzIHw9IEZTX1hGTEFHX0NPV0VYVFNJWkU7XFxuK1xcdFxcdGlmIChpcC1cXHUwMDNlaV9kaWZsYWdzMiBcXHUwMDI2IFhGU19ESUZMQUcyX1ZFUklUWSlcXG4rXFx0XFx0XFx0ZmxhZ3MgfD0gRlNfWEZMQUdfVkVSSVRZO1xcbiBcXHR9XFxuIFxcbiBcXHRpZiAoeGZzX2lub2RlX2hhc19hdHRyX2ZvcmsoaXApKVxcbmRpZmYgLS1naXQgYS9mcy94ZnMvbGlieGZzL3hmc19zYi5jIGIvZnMveGZzL2xpYnhmcy94ZnNfc2IuY1xcbmluZGV4IDQ3MzIyYWRiNzY5MDU5Li4yMjJiYmU1NTU5ZGY0NyAxMDA2NDRcXG4tLS0gYS9mcy94ZnMvbGlieGZzL3hmc19zYi5jXFxuKysrIGIvZnMveGZzL2xpYnhmcy94ZnNfc2IuY1xcbkBAIC0xNjUsNiArMTY1LDggQEAgeGZzX3NiX3ZlcnNpb25fdG9fZmVhdHVyZXMoXFxuIFxcdFxcdGZlYXR1cmVzIHw9IFhGU19GRUFUX1JFRkxJTks7XFxuIFxcdGlmIChzYnAtXFx1MDAzZXNiX2ZlYXR1cmVzX3JvX2NvbXBhdCBcXHUwMDI2IFhGU19TQl9GRUFUX1JPX0NPTVBBVF9JTk9CVENOVClcXG4gXFx0XFx0ZmVhdHVyZXMgfD0gWEZTX0ZFQVRfSU5PQlRDTlQ7XFxuK1xcdGlmIChzYnAtXFx1MDAzZXNiX2ZlYXR1cmVzX3JvX2NvbXBhdCBcXHUwMDI2IFhGU19TQl9GRUFUX1JPX0NPTVBBVF9WRVJJVFkpXFxuK1xcdFxcdGZlYXR1cmVzIHw9IFhGU19GRUFUX1ZFUklUWTtcXG4gXFx0aWYgKHNicC1cXHUwMDNlc2JfZmVhdHVyZXNfaW5jb21wYXQgXFx1MDAyNiBYRlNfU0JfRkVBVF9JTkNPTVBBVF9GVFlQRSlcXG4gXFx0XFx0ZmVhdHVyZXMgfD0gWEZTX0ZFQVRfRlRZUEU7XFxuIFxcdGlmIChzYnAtXFx1MDAzZXNiX2ZlYXR1cmVzX2luY29tcGF0IFxcdTAwMjYgWEZTX1NCX0ZFQVRfSU5DT01QQVRfU1BJTk9ERVMpXFxuQEAgLTE1ODgsNiArMTU5MCw4IEBAIHhmc19mc19nZW9tZXRyeShcXG4gXFx0XFx0Z2VvLVxcdTAwM2VmbGFncyB8PSBYRlNfRlNPUF9HRU9NX0ZMQUdTX01FVEFESVI7XFxuIFxcdGlmICh4ZnNfaGFzX3pvbmVkKG1wKSlcXG4gXFx0XFx0Z2VvLVxcdTAwM2VmbGFncyB8PSBYRlNfRlNPUF9HRU9NX0ZMQUdTX1pPTkVEO1xcbitcXHRpZiAoeGZzX2hhc192ZXJpdHkobXApKVxcbitcXHRcXHRnZW8tXFx1MDAzZWZsYWdzIHw9IFhGU19GU09QX0dFT01fRkxBR1NfVkVSSVRZO1xcbiBcXHRnZW8tXFx1MDAzZXJ0c2VjdHNpemUgPSBzYnAtXFx1MDAzZXNiX2Jsb2Nrc2l6ZTtcXG4gXFx0Z2VvLVxcdTAwM2VkaXJibG9ja3NpemUgPSB4ZnNfZGlyMl9kaXJibG9ja19ieXRlcyhzYnApO1xcbiBcXG5kaWZmIC0tZ2l0IGEvZnMveGZzL3NjcnViL2NvbW1vbi5jIGIvZnMveGZzL3NjcnViL2NvbW1vbi5jXFxuaW5kZXggZTUyMzNlMzFhYmI3NTAuLjE2NzNiNTIyMjQ0ZDc0IDEwMDY0NFxcbi0tLSBhL2ZzL3hmcy9zY3J1Yi9jb21tb24uY1xcbisrKyBiL2ZzL3hmcy9zY3J1Yi9jb21tb24uY1xcbkBAIC00NSw2ICs0NSw4IEBAXFxuICNpbmNsdWRlIFxcXCJzY3J1Yi9oZWFsdGguaFxcXCJcXG4gI2luY2x1ZGUgXFxcInNjcnViL3RlbXBmaWxlLmhcXFwiXFxuIFxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvZnN2ZXJpdHkuaFxcdTAwM2VcXG4rXFxuIC8qIENvbW1vbiBjb2RlIGZvciB0aGUgbWV0YWRhdGEgc2NydWJiZXJzLiAqL1xcbiBcXG4gLypcXG5AQCAtMTc1NCwzICsxNzU2LDU0IEBAIHhjaGtfaW5vZGVfY291bnRfYmxvY2tzKFxcbiBcXHRyZXR1cm4geGZzX2JtYXBfY291bnRfYmxvY2tzKHNjLVxcdTAwM2V0cCwgc2MtXFx1MDAzZWlwLCB3aGljaGZvcmssIG5leHRlbnRzLFxcbiBcXHRcXHRcXHRjb3VudCk7XFxuIH1cXG4rXFxuKy8qXFxuKyAqIElmIHRoaXMgaW5vZGUgaGFzIFNfVkVSSVRZIHNldCBvbiBpdCwgcmVhZCB0aGUgdmVyaXR5IGluZm8uIElmIHRoZSByZWFkaW5nXFxuKyAqIGZhaWxzIHdpdGggYW55dGhpbmcgb3RoZXIgdGhhbiBFTk9NRU0sIHRoZSBmaWxlIGlzIGNvcnJ1cHQsIHdoaWNoIHdlIGNhblxcbisgKiBkZXRlY3QgbGF0ZXIgd2l0aCBmc3Zlcml0eV9hY3RpdmUuXFxuKyAqXFxuKyAqIENhbGxlcnMgbXVzdCBob2xkIHRoZSBJT0xPQ0sgYW5kIG11c3Qgbm90IGhvbGQgdGhlIElMT0NLIG9mIHNjLVxcdTAwM2VpcCBiZWNhdXNlXFxuKyAqIGFjdGl2YXRpb24gcmVhZHMgaW5vZGUgZGF0YS5cXG4rICovXFxuK2ludFxcbit4Y2hrX2lub2RlX3NldHVwX3Zlcml0eShcXG4rXFx0c3RydWN0IHhmc19zY3J1YlxcdCpzYylcXG4re1xcbitcXHRpbnRcXHRcXHRcXHRlcnJvcjtcXG4rXFxuK1xcdGlmICghZnN2ZXJpdHlfYWN0aXZlKFZGU19JKHNjLVxcdTAwM2VpcCkpKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGVycm9yID0gZnN2ZXJpdHlfZW5zdXJlX3Zlcml0eV9pbmZvKFZGU19JKHNjLVxcdTAwM2VpcCkpO1xcbitcXHRzd2l0Y2ggKGVycm9yKSB7XFxuK1xcdGNhc2UgMDpcXG4rXFx0XFx0LyogZnN2ZXJpdHkgaXMgYWN0aXZlICovXFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIC1FTk9EQVRBOlxcbitcXHRjYXNlIC1FTVNHU0laRTpcXG4rXFx0Y2FzZSAtRUlOVkFMOlxcbitcXHRjYXNlIC1FRlNDT1JSVVBURUQ6XFxuK1xcdGNhc2UgLUVGQklHOlxcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBUaGUgbm9uemVybyBlcnJubyBjb2RlcyBhYm92ZSBhcmUgdGhlIGVycm9yIGNvZGVzIHRoYXQgY2FuXFxuK1xcdFxcdCAqIGJlIHJldHVybmVkIGZyb20gZnN2ZXJpdHkgb24gbWV0YWRhdGEgdmFsaWRhdGlvbiBlcnJvcnMuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0LyogcnVudGltZSBlcnJvcnMgKi9cXG4rXFx0XFx0cmV0dXJuIGVycm9yO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rLypcXG4rICogSXMgdGhpcyBhIHZlcml0eSBmaWxlIHRoYXQgZmFpbGVkIHRvIGFjdGl2YXRlPyAgQ2FsbGVycyBtdXN0IGhhdmUgdHJpZWQgdG9cXG4rICogYWN0aXZhdGUgZnN2ZXJpdHkgdmlhIHhjaGtfaW5vZGVfc2V0dXBfdmVyaXR5LlxcbisgKi9cXG4rYm9vbFxcbit4Y2hrX2lub2RlX3Zlcml0eV9icm9rZW4oXFxuK1xcdHN0cnVjdCB4ZnNfaW5vZGVcXHQqaXApXFxuK3tcXG4rXFx0cmV0dXJuIGZzdmVyaXR5X2FjdGl2ZShWRlNfSShpcCkpIFxcdTAwMjZcXHUwMDI2ICFmc3Zlcml0eV9nZXRfaW5mbyhWRlNfSShpcCkpO1xcbit9XFxuZGlmZiAtLWdpdCBhL2ZzL3hmcy9zY3J1Yi9jb21tb24uaCBiL2ZzL3hmcy9zY3J1Yi9jb21tb24uaFxcbmluZGV4IDlkNjI3ZmQ1MDY4N2U0Li4zZGUyYjYwMDlhOTk0MSAxMDA2NDRcXG4tLS0gYS9mcy94ZnMvc2NydWIvY29tbW9uLmhcXG4rKysgYi9mcy94ZnMvc2NydWIvY29tbW9uLmhcXG5AQCAtMjY4LDYgKzI2OCw4IEBAIGludCB4Y2hrX2lub2RlX2lzX2FsbG9jYXRlZChzdHJ1Y3QgeGZzX3NjcnViICpzYywgeGZzX2FnaW5vX3QgYWdpbm8sXFxuIFxcdFxcdGJvb2wgKmludXNlKTtcXG4gaW50IHhjaGtfaW5vZGVfY291bnRfYmxvY2tzKHN0cnVjdCB4ZnNfc2NydWIgKnNjLCBpbnQgd2hpY2hmb3JrLFxcbiBcXHRcXHR4ZnNfZXh0bnVtX3QgKm5leHRlbnRzLCB4ZnNfZmlsYmxrc190ICpjb3VudCk7XFxuK2ludCB4Y2hrX2lub2RlX3NldHVwX3Zlcml0eShzdHJ1Y3QgeGZzX3NjcnViICpzYyk7XFxuK2Jvb2wgeGNoa19pbm9kZV92ZXJpdHlfYnJva2VuKHN0cnVjdCB4ZnNfaW5vZGUgKmlwKTtcXG4gXFxuIGJvb2wgeGNoa19pbm9kZV9pc19kaXJ0cmVlX3Jvb3QoY29uc3Qgc3RydWN0IHhmc19pbm9kZSAqaXApO1xcbiBib29sIHhjaGtfaW5vZGVfaXNfc2Jfcm9vdGVkKGNvbnN0IHN0cnVjdCB4ZnNfaW5vZGUgKmlwKTtcXG5kaWZmIC0tZ2l0IGEvZnMveGZzL3NjcnViL2lub2RlLmMgYi9mcy94ZnMvc2NydWIvaW5vZGUuY1xcbmluZGV4IDY1YjEzZTMxMTkxNjgxLi5kMWNkZDZiNDQ1ZDAxNyAxMDA2NDRcXG4tLS0gYS9mcy94ZnMvc2NydWIvaW5vZGUuY1xcbisrKyBiL2ZzL3hmcy9zY3J1Yi9pbm9kZS5jXFxuQEAgLTM2LDYgKzM2LDEwIEBAIHhjaGtfcHJlcGFyZV9pc2NydWIoXFxuIFxcbiBcXHR4Y2hrX2lsb2NrKHNjLCBYRlNfSU9MT0NLX0VYQ0wpO1xcbiBcXG4rXFx0ZXJyb3IgPSB4Y2hrX2lub2RlX3NldHVwX3Zlcml0eShzYyk7XFxuK1xcdGlmIChlcnJvcilcXG4rXFx0XFx0cmV0dXJuIGVycm9yO1xcbitcXG4gXFx0ZXJyb3IgPSB4Y2hrX3RyYW5zX2FsbG9jKHNjLCAwKTtcXG4gXFx0aWYgKGVycm9yKVxcbiBcXHRcXHRyZXR1cm4gZXJyb3I7XFxuQEAgLTgzMyw2ICs4MzcsOSBAQCB4Y2hrX2lub2RlKFxcbiBcXHRpZiAoU19JU1JFRyhWRlNfSShzYy1cXHUwMDNlaXApLVxcdTAwM2VpX21vZGUpKVxcbiBcXHRcXHR4Y2hrX2lub2RlX2NoZWNrX3JlZmxpbmtfaWZsYWcoc2MsIElfSU5PKHNjLVxcdTAwM2VpcCkpO1xcbiBcXG4rXFx0aWYgKHhjaGtfaW5vZGVfdmVyaXR5X2Jyb2tlbihzYy1cXHUwMDNlaXApKVxcbitcXHRcXHR4Y2hrX2lub19zZXRfY29ycnVwdChzYywgc2MtXFx1MDAzZXNtLVxcdTAwM2VzbV9pbm8pO1xcbitcXG4gXFx0eGNoa19pbm9kZV9jaGVja191bmxpbmtlZChzYyk7XFxuIFxcbiBcXHR4Y2hrX2lub2RlX3hyZWYoc2MsIElfSU5PKHNjLVxcdTAwM2VpcCksIFxcdTAwMjZkaSk7XFxuZGlmZiAtLWdpdCBhL2ZzL3hmcy9zY3J1Yi9pbm9kZV9yZXBhaXIuYyBiL2ZzL3hmcy9zY3J1Yi9pbm9kZV9yZXBhaXIuY1xcbmluZGV4IDQ5M2RjZjVjYzZjMTU5Li45MGY4NjFiYjRlZjg0OCAxMDA2NDRcXG4tLS0gYS9mcy94ZnMvc2NydWIvaW5vZGVfcmVwYWlyLmNcXG4rKysgYi9mcy94ZnMvc2NydWIvaW5vZGVfcmVwYWlyLmNcXG5AQCAtNTczLDYgKzU3Myw4IEBAIHhyZXBfZGlub2RlX2ZsYWdzKFxcbiBcXHRcXHRkaXAtXFx1MDAzZWRpX25yZXh0NjRfcGFkID0gMDtcXG4gXFx0ZWxzZSBpZiAoZGlwLVxcdTAwM2VkaV92ZXJzaW9uIFxcdTAwM2U9IDMpXFxuIFxcdFxcdGRpcC1cXHUwMDNlZGlfdjNfcGFkID0gMDtcXG4rXFx0aWYgKCF4ZnNfaGFzX3Zlcml0eShtcCkgfHwgIVNfSVNSRUcobW9kZSkpXFxuK1xcdFxcdGZsYWdzMiBcXHUwMDI2PSB+WEZTX0RJRkxBRzJfVkVSSVRZO1xcbiBcXG4gXFx0aWYgKGZsYWdzMiBcXHUwMDI2IFhGU19ESUZMQUcyX01FVEFEQVRBKSB7XFxuIFxcdFxcdHhmc19mYWlsYWRkcl90XFx0ZmE7XFxuQEAgLTE2MTcsNiArMTYxOSwxMCBAQCB4cmVwX2Rpbm9kZV9jb3JlKFxcbiBcXHRpZiAoaWdldF9lcnJvcilcXG4gXFx0XFx0cmV0dXJuIGlnZXRfZXJyb3I7XFxuIFxcbitcXHRlcnJvciA9IHhjaGtfaW5vZGVfc2V0dXBfdmVyaXR5KHNjKTtcXG4rXFx0aWYgKGVycm9yKVxcbitcXHRcXHRyZXR1cm4gZXJyb3I7XFxuK1xcbiBcXHRlcnJvciA9IHhjaGtfdHJhbnNfYWxsb2Moc2MsIDApO1xcbiBcXHRpZiAoZXJyb3IpXFxuIFxcdFxcdHJldHVybiBlcnJvcjtcXG5AQCAtMjAzNSw2ICsyMDQxLDI3IEBAIHhyZXBfaW5vZGVfdW5saW5rZWQoXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbisvKlxcbisgKiBJZiB0aGlzIGZpbGUgaXMgYSBmc3Zlcml0eSBmaWxlLCB4Y2hrX3ByZXBhcmVfaXNjcnViIG9yIHhyZXBfZGlub2RlX2NvcmVcXG4rICogc2hvdWxkIGhhdmUgYWN0aXZhdGVkIGl0LiAgSWYgaXQncyBzdGlsbCBub3QgYWN0aXZlLCB0aGVuIHRoZXJlJ3Mgc29tZXRoaW5nXFxuKyAqIHdyb25nIHdpdGggdGhlIHZlcml0eSBkZXNjcmlwdG9yIGFuZCB3ZSBzaG91bGQgdHVybiBpdCBvZmYuXFxuKyAqL1xcbitTVEFUSUMgaW50XFxuK3hyZXBfaW5vZGVfdmVyaXR5KFxcbitcXHRzdHJ1Y3QgeGZzX3NjcnViXFx0KnNjKVxcbit7XFxuK1xcdHN0cnVjdCBpbm9kZVxcdFxcdCppbm9kZSA9IFZGU19JKHNjLVxcdTAwM2VpcCk7XFxuK1xcbitcXHRpZiAoeGNoa19pbm9kZV92ZXJpdHlfYnJva2VuKHNjLVxcdTAwM2VpcCkpIHtcXG4rXFx0XFx0c2MtXFx1MDAzZWlwLVxcdTAwM2VpX2RpZmxhZ3MyIFxcdTAwMjY9IH5YRlNfRElGTEFHMl9WRVJJVFk7XFxuK1xcdFxcdGlub2RlLVxcdTAwM2VpX2ZsYWdzIFxcdTAwMjY9IH5TX1ZFUklUWTtcXG4rXFxuK1xcdFxcdHhmc190cmFuc19sb2dfaW5vZGUoc2MtXFx1MDAzZXRwLCBzYy1cXHUwMDNlaXAsIFhGU19JTE9HX0NPUkUpO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gLyogUmVwYWlyIGFuIGlub2RlJ3MgZmllbGRzLiAqL1xcbiBpbnRcXG4geHJlcF9pbm9kZShcXG5AQCAtMjA4NCw2ICsyMTExLDE1IEBAIHhyZXBfaW5vZGUoXFxuIFxcdFxcdFxcdHJldHVybiBlcnJvcjtcXG4gXFx0fVxcbiBcXG4rXFx0LypcXG4rXFx0ICogRGlzYWJsZSBmc3Zlcml0eSBpZiBpdCBjYW5ub3QgYmUgYWN0aXZhdGVkLiAgQWN0aXZhdGlvbiBmYWlsdXJlXFxuK1xcdCAqIHByb2hpYml0cyB0aGUgZmlsZSBmcm9tIGJlaW5nIG9wZW5lZCwgc28gdGhlcmUgY2Fubm90IGJlIGFub3RoZXJcXG4rXFx0ICogcHJvZ3JhbSB3aXRoIGFuIG9wZW4gZmQgdG8gd2hhdCBpdCB0aGlua3MgaXMgYSB2ZXJpdHkgZmlsZS5cXG4rXFx0ICovXFxuK1xcdGVycm9yID0geHJlcF9pbm9kZV92ZXJpdHkoc2MpO1xcbitcXHRpZiAoZXJyb3IpXFxuK1xcdFxcdHJldHVybiBlcnJvcjtcXG4rXFxuIFxcdC8qIFJlY29ubmVjdCBpbmNvcmUgdW5saW5rZWQgbGlzdCAqL1xcbiBcXHRlcnJvciA9IHhyZXBfaW5vZGVfdW5saW5rZWQoc2MpO1xcbiBcXHRpZiAoZXJyb3IpXFxuZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfYW9wcy5jIGIvZnMveGZzL3hmc19hb3BzLmNcXG5pbmRleCA1MTI5M2I2ZjMzMWYwYi4uYjA1MzdjNjdlOTYwZTEgMTAwNjQ0XFxuLS0tIGEvZnMveGZzL3hmc19hb3BzLmNcXG4rKysgYi9mcy94ZnMveGZzX2FvcHMuY1xcbkBAIC0yMiw3ICsyMiw5IEBAXFxuICNpbmNsdWRlIFxcXCJ4ZnNfaWNhY2hlLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJ4ZnNfem9uZV9hbGxvYy5oXFxcIlxcbiAjaW5jbHVkZSBcXFwieGZzX3J0Z3JvdXAuaFxcXCJcXG4rI2luY2x1ZGUgXFxcInhmc19mc3Zlcml0eS5oXFxcIlxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvYmlvLWludGVncml0eS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvZnN2ZXJpdHkuaFxcdTAwM2VcXG4gXFxuIHN0cnVjdCB4ZnNfd3JpdGVwYWdlX2N0eCB7XFxuIFxcdHN0cnVjdCBpb21hcF93cml0ZXBhZ2VfY3R4IGN0eDtcXG5AQCAtMTgxLDYgKzE4MywyMyBAQCB4ZnNfZW5kX2lvZW5kX3dyaXRlKFxcbiBcXHRtZW1hbGxvY19ub2ZzX3Jlc3RvcmUobm9mc19mbGFnKTtcXG4gfVxcbiBcXG4rLypcXG4rICogSU8gcmVhZCBjb21wbGV0aW9uLlxcbisgKi9cXG4rc3RhdGljIHZvaWRcXG4reGZzX2VuZF9pb2VuZF9yZWFkKFxcbitcXHRzdHJ1Y3QgaW9tYXBfaW9lbmRcXHQqaW9lbmQpXFxuK3tcXG4rXFx0c3RydWN0IHhmc19pbm9kZVxcdCppcCA9IFhGU19JKGlvZW5kLVxcdTAwM2Vpb19pbm9kZSk7XFxuK1xcbitcXHRpZiAoIWlvZW5kLVxcdTAwM2Vpb19iaW8uYmlfc3RhdHVzIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdHhmc19mc3Zlcml0eV9pc19maWxlX2RhdGEoaXAsIGlvZW5kLVxcdTAwM2Vpb19vZmZzZXQpKVxcbitcXHRcXHRmc3Zlcml0eV92ZXJpZnlfYmlvKGlvZW5kLVxcdTAwM2Vpb192aSxcXG4rXFx0XFx0XFx0XFx0ICAgIFxcdTAwMjZpb2VuZC1cXHUwMDNlaW9fYmlvKTtcXG4rXFx0aW9tYXBfZmluaXNoX2lvZW5kcyhpb2VuZCxcXG4rXFx0XFx0YmxrX3N0YXR1c190b19lcnJubyhpb2VuZC1cXHUwMDNlaW9fYmlvLmJpX3N0YXR1cykpO1xcbit9XFxuK1xcbiAvKlxcbiAgKiBGaW5pc2ggYWxsIHBlbmRpbmcgSU8gY29tcGxldGlvbnMgdGhhdCByZXF1aXJlIHRyYW5zYWN0aW9uYWwgbW9kaWZpY2F0aW9ucy5cXG4gICpcXG5AQCAtMjE1LDggKzIzNCw3IEBAIHhmc19lbmRfaW8oXFxuIFxcdFxcdGxpc3RfZGVsX2luaXQoXFx1MDAyNmlvZW5kLVxcdTAwM2Vpb19saXN0KTtcXG4gXFx0XFx0aW9tYXBfaW9lbmRfdHJ5X21lcmdlKGlvZW5kLCBcXHUwMDI2dG1wKTtcXG4gXFx0XFx0aWYgKGJpb19vcChcXHUwMDI2aW9lbmQtXFx1MDAzZWlvX2JpbykgPT0gUkVRX09QX1JFQUQpXFxuLVxcdFxcdFxcdGlvbWFwX2ZpbmlzaF9pb2VuZHMoaW9lbmQsXFxuLVxcdFxcdFxcdFxcdGJsa19zdGF0dXNfdG9fZXJybm8oaW9lbmQtXFx1MDAzZWlvX2Jpby5iaV9zdGF0dXMpKTtcXG4rXFx0XFx0XFx0eGZzX2VuZF9pb2VuZF9yZWFkKGlvZW5kKTtcXG4gXFx0XFx0ZWxzZVxcbiBcXHRcXHRcXHR4ZnNfZW5kX2lvZW5kX3dyaXRlKGlvZW5kKTtcXG4gXFx0XFx0Y29uZF9yZXNjaGVkKCk7XFxuQEAgLTI0Miw5ICsyNjAsMTQgQEAgeGZzX2VuZF9iaW8oXFxuIFxcdH1cXG4gXFxuIFxcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZpcC1cXHUwMDNlaV9pb2VuZF9sb2NrLCBmbGFncyk7XFxuLVxcdGlmIChsaXN0X2VtcHR5KFxcdTAwMjZpcC1cXHUwMDNlaV9pb2VuZF9saXN0KSlcXG4tXFx0XFx0V0FSTl9PTl9PTkNFKCFxdWV1ZV93b3JrKG1wLVxcdTAwM2VtX3Vud3JpdHRlbl93b3JrcXVldWUsXFxuK1xcdGlmIChsaXN0X2VtcHR5KFxcdTAwMjZpcC1cXHUwMDNlaV9pb2VuZF9saXN0KSkge1xcbitcXHRcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfRlNfVkVSSVRZKSBcXHUwMDI2XFx1MDAyNiBpb2VuZC1cXHUwMDNlaW9fdmkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgIGlvZW5kLVxcdTAwM2Vpb19vZmZzZXQgXFx1MDAzYyB4ZnNfZnN2ZXJpdHlfbWV0YWRhdGFfb2Zmc2V0KGlwKSlcXG4rXFx0XFx0XFx0ZnN2ZXJpdHlfZW5xdWV1ZV92ZXJpZnlfd29yayhcXHUwMDI2aXAtXFx1MDAzZWlfaW9lbmRfd29yayk7XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0V0FSTl9PTl9PTkNFKCFxdWV1ZV93b3JrKG1wLVxcdTAwM2VtX3Vud3JpdHRlbl93b3JrcXVldWUsXFxuIFxcdFxcdFxcdFxcdFxcdCBcXHUwMDI2aXAtXFx1MDAzZWlfaW9lbmRfd29yaykpO1xcbitcXHR9XFxuIFxcdGxpc3RfYWRkX3RhaWwoXFx1MDAyNmlvZW5kLVxcdTAwM2Vpb19saXN0LCBcXHUwMDI2aXAtXFx1MDAzZWlfaW9lbmRfbGlzdCk7XFxuIFxcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNmlwLVxcdTAwM2VpX2lvZW5kX2xvY2ssIGZsYWdzKTtcXG4gfVxcbkBAIC0zNTAsMTIgKzM3MywxNiBAQCB4ZnNfbWFwX2Jsb2NrcyhcXG4gXFx0aW50XFx0XFx0XFx0cmV0cmllcyA9IDA7XFxuIFxcdGludFxcdFxcdFxcdGVycm9yID0gMDtcXG4gXFx0dW5zaWduZWQgaW50XFx0XFx0KnNlcTtcXG4rXFx0dW5zaWduZWQgaW50XFx0XFx0aW9tYXBfZmxhZ3MgPSAwO1xcbiBcXG4gXFx0aWYgKHhmc19pc19zaHV0ZG93bihtcCkpXFxuIFxcdFxcdHJldHVybiAtRUlPO1xcbiBcXG4gXFx0WEZTX0VSUk9SVEFHX0RFTEFZKG1wLCBYRlNfRVJSVEFHX1dCX0RFTEFZX01TKTtcXG4gXFxuK1xcdGlmICh4ZnNfaWZsYWdzX3Rlc3QoaXAsIFhGU19WRVJJVFlfQ09OU1RSVUNUSU9OKSlcXG4rXFx0XFx0aW9tYXBfZmxhZ3MgfD0gSU9NQVBfRl9GU1ZFUklUWTtcXG4rXFxuIFxcdC8qXFxuIFxcdCAqIENPVyBmb3JrIGJsb2NrcyBjYW4gb3ZlcmxhcCBkYXRhIGZvcmsgYmxvY2tzIGV2ZW4gaWYgdGhlIGJsb2Nrc1xcbiBcXHQgKiBhcmVuJ3Qgc2hhcmVkLiAgQ09XIEkvTyBhbHdheXMgdGFrZXMgcHJlY2VkZW50LCBzbyB3ZSBtdXN0IGFsd2F5c1xcbkBAIC00NDMsNyArNDcwLDggQEAgeGZzX21hcF9ibG9ja3MoXFxuIFxcdCAgICBpc251bGxzdGFydGJsb2NrKGltYXAuYnJfc3RhcnRibG9jaykpXFxuIFxcdFxcdGdvdG8gYWxsb2NhdGVfYmxvY2tzO1xcbiBcXG4tXFx0eGZzX2JtYnRfdG9faW9tYXAoaXAsIFxcdTAwMjZ3cGMtXFx1MDAzZWlvbWFwLCBcXHUwMDI2aW1hcCwgMCwgMCwgWEZTX1dQQyh3cGMpLVxcdTAwM2VkYXRhX3NlcSk7XFxuK1xcdHhmc19ibWJ0X3RvX2lvbWFwKGlwLCBcXHUwMDI2d3BjLVxcdTAwM2Vpb21hcCwgXFx1MDAyNmltYXAsIDAsIGlvbWFwX2ZsYWdzLFxcbitcXHRcXHRcXHQgIFhGU19XUEMod3BjKS1cXHUwMDNlZGF0YV9zZXEpO1xcbiBcXHR0cmFjZV94ZnNfbWFwX2Jsb2Nrc19mb3VuZChpcCwgb2Zmc2V0LCBjb3VudCwgd2hpY2hmb3JrLCBcXHUwMDI2aW1hcCk7XFxuIFxcdHJldHVybiAwO1xcbiBhbGxvY2F0ZV9ibG9ja3M6XFxuQEAgLTU5MCwxMiArNjE4LDE2IEBAIHhmc196b25lZF9tYXBfYmxvY2tzKFxcbiBcXHR4ZnNfZmlsYmxrc190XFx0XFx0Y291bnRfZnNiO1xcbiBcXHRzdHJ1Y3QgeGZzX2JtYnRfaXJlY1xcdGltYXAsIGRlbDtcXG4gXFx0c3RydWN0IHhmc19pZXh0X2N1cnNvclxcdGljdXI7XFxuK1xcdHUxNlxcdFxcdFxcdGlvbWFwX2ZsYWdzID0gMDtcXG4gXFxuIFxcdGlmICh4ZnNfaXNfc2h1dGRvd24obXApKVxcbiBcXHRcXHRyZXR1cm4gLUVJTztcXG4gXFxuIFxcdFhGU19FUlJPUlRBR19ERUxBWShtcCwgWEZTX0VSUlRBR19XQl9ERUxBWV9NUyk7XFxuIFxcbitcXHRpZiAoeGZzX2lmbGFnc190ZXN0KGlwLCBYRlNfVkVSSVRZX0NPTlNUUlVDVElPTikpXFxuK1xcdFxcdGlvbWFwX2ZsYWdzIHw9IElPTUFQX0ZfRlNWRVJJVFk7XFxuK1xcbiBcXHQvKlxcbiBcXHQgKiBBbGwgZGlydHkgZGF0YSBtdXN0IGJlIGNvdmVyZWQgYnkgZGVsYWxsb2MgZXh0ZW50cy4gIEJ1dCB0cnVuY2F0ZSBjYW5cXG4gXFx0ICogcmVtb3ZlIGRlbGFsbG9jIGV4dGVudHMgdW5kZXJuZWF0aCB1cyBvciByZWR1Y2UgdGhlaXIgc2l6ZS5cXG5AQCAtNjE5LDcgKzY1MSw3IEBAIHhmc196b25lZF9tYXBfYmxvY2tzKFxcbiBcXHRcXHRpbWFwLmJyX3N0YXJ0YmxvY2sgPSBIT0xFU1RBUlRCTE9DSztcXG4gXFx0XFx0aW1hcC5icl9zdGF0ZSA9IFhGU19FWFRfTk9STTtcXG4gXFx0XFx0eGZzX2l1bmxvY2soaXAsIFhGU19JTE9DS19FWENMKTtcXG4tXFx0XFx0eGZzX2JtYnRfdG9faW9tYXAoaXAsIFxcdTAwMjZ3cGMtXFx1MDAzZWlvbWFwLCBcXHUwMDI2aW1hcCwgMCwgMCwgMCk7XFxuK1xcdFxcdHhmc19ibWJ0X3RvX2lvbWFwKGlwLCBcXHUwMDI2d3BjLVxcdTAwM2Vpb21hcCwgXFx1MDAyNmltYXAsIDAsIGlvbWFwX2ZsYWdzLCAwKTtcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcdH1cXG4gXFx0ZW5kX2ZzYiA9IG1pbihlbmRfZnNiLCBpbWFwLmJyX3N0YXJ0b2ZmICsgaW1hcC5icl9ibG9ja2NvdW50KTtcXG5AQCAtNjMyLDcgKzY2NCw3IEBAIHhmc196b25lZF9tYXBfYmxvY2tzKFxcbiBcXHR4ZnNfaXVubG9jayhpcCwgWEZTX0lMT0NLX0VYQ0wpO1xcbiBcXG4gXFx0d3BjLVxcdTAwM2Vpb21hcC50eXBlID0gSU9NQVBfTUFQUEVEO1xcbi1cXHR3cGMtXFx1MDAzZWlvbWFwLmZsYWdzID0gSU9NQVBfRl9ESVJUWTtcXG4rXFx0d3BjLVxcdTAwM2Vpb21hcC5mbGFncyA9IGlvbWFwX2ZsYWdzIHwgSU9NQVBfRl9ESVJUWTtcXG4gXFx0d3BjLVxcdTAwM2Vpb21hcC5iZGV2ID0gbXAtXFx1MDAzZW1fcnRkZXZfdGFyZ3AtXFx1MDAzZWJ0X2JkZXY7XFxuIFxcdHdwYy1cXHUwMDNlaW9tYXAub2Zmc2V0ID0gb2Zmc2V0O1xcbiBcXHR3cGMtXFx1MDAzZWlvbWFwLmxlbmd0aCA9IFhGU19GU0JfVE9fQihtcCwgY291bnRfZnNiKTtcXG5AQCAtNjg0LDYgKzcxNiwyMiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGlvbWFwX3dyaXRlYmFja19vcHMgeGZzX3pvbmVkX3dyaXRlYmFja19vcHMgPSB7XFxuIFxcdC53cml0ZWJhY2tfc3VibWl0XFx0PSB4ZnNfem9uZWRfd3JpdGViYWNrX3N1Ym1pdCxcXG4gfTtcXG4gXFxuK3N0YXRpYyBpbnRcXG4reGZzX2lvbWFwX3dyaXRlcGFnZXMoXFxuK1xcdHN0cnVjdCB4ZnNfaW5vZGVcXHRcXHQqaXAsXFxuK1xcdHN0cnVjdCBpb21hcF93cml0ZXBhZ2VfY3R4XFx0KmN0eClcXG4re1xcbitcXHQvKlxcbitcXHQgKiBXcml0ZWJhY2sgZG9lcyBub3Qgd29yayBmb3IgZm9saW9zIHBhc3QgRU9GLCBsZXQgaXQga25vdyB0aGF0XFxuK1xcdCAqIEkvTyBoYXBwZW5zIGZvciBmc3Zlcml0eSBtZXRhZGF0YSBhbmQgdGhpcyByZXN0cmljdGlvbiBuZWVkXFxuK1xcdCAqIHRvIGJlIHNraXBwZWRcXG4rXFx0ICovXFxuK1xcdGlmICh4ZnNfaWZsYWdzX3Rlc3QoaXAsIFhGU19WRVJJVFlfQ09OU1RSVUNUSU9OKSlcXG4rXFx0XFx0Y3R4LVxcdTAwM2Vpb21hcC5mbGFncyB8PSBJT01BUF9GX0ZTVkVSSVRZO1xcbitcXG4rXFx0cmV0dXJuIGlvbWFwX3dyaXRlcGFnZXMoY3R4KTtcXG4rfVxcbitcXG4gU1RBVElDIGludFxcbiB4ZnNfdm1fd3JpdGVwYWdlcyhcXG4gXFx0c3RydWN0IGFkZHJlc3Nfc3BhY2VcXHQqbWFwcGluZyxcXG5AQCAtNzAzLDcgKzc1MSw3IEBAIHhmc192bV93cml0ZXBhZ2VzKFxcbiBcXHRcXHR9O1xcbiBcXHRcXHRpbnRcXHRcXHRcXHRcXHRlcnJvcjtcXG4gXFxuLVxcdFxcdGVycm9yID0gaW9tYXBfd3JpdGVwYWdlcyhcXHUwMDI2eGMuY3R4KTtcXG4rXFx0XFx0ZXJyb3IgPSB4ZnNfaW9tYXBfd3JpdGVwYWdlcyhpcCwgXFx1MDAyNnhjLmN0eCk7XFxuIFxcdFxcdGlmICh4Yy5vcGVuX3pvbmUpXFxuIFxcdFxcdFxcdHhmc19vcGVuX3pvbmVfcHV0KHhjLm9wZW5fem9uZSk7XFxuIFxcdFxcdHJldHVybiBlcnJvcjtcXG5AQCAtNzE2LDcgKzc2NCw3IEBAIHhmc192bV93cml0ZXBhZ2VzKFxcbiBcXHRcXHRcXHR9LFxcbiBcXHRcXHR9O1xcbiBcXG4tXFx0XFx0cmV0dXJuIGlvbWFwX3dyaXRlcGFnZXMoXFx1MDAyNndwYy5jdHgpO1xcbitcXHRcXHRyZXR1cm4geGZzX2lvbWFwX3dyaXRlcGFnZXMoaXAsIFxcdTAwMjZ3cGMuY3R4KTtcXG4gXFx0fVxcbiB9XFxuIFxcbkBAIC03NjEsOSArODA5LDEyIEBAIHhmc19iaW9fc3VibWl0X3JlYWQoXFxuIFxcdHN0cnVjdCBpb21hcF9yZWFkX2ZvbGlvX2N0eFxcdCpjdHgpXFxuIHtcXG4gXFx0c3RydWN0IGJpb1xcdFxcdFxcdCpiaW8gPSBjdHgtXFx1MDAzZXJlYWRfY3R4O1xcbitcXHRzdHJ1Y3QgaW9tYXBfaW9lbmRcXHRcXHQqaW9lbmQ7XFxuIFxcbiBcXHQvKiBkZWZlciByZWFkIGNvbXBsZXRpb25zIHRvIHRoZSBpb2VuZCB3b3JrcXVldWUgKi9cXG4tXFx0aW9tYXBfaW5pdF9pb2VuZChpdGVyLVxcdTAwM2Vpbm9kZSwgYmlvLCBjdHgtXFx1MDAzZXJlYWRfY3R4X2ZpbGVfb2Zmc2V0LCAwKTtcXG4rXFx0aW9lbmQgPSBpb21hcF9pbml0X2lvZW5kKGl0ZXItXFx1MDAzZWlub2RlLCBiaW8sIGN0eC1cXHUwMDNlcmVhZF9jdHhfZmlsZV9vZmZzZXQsXFxuK1xcdFxcdFxcdDApO1xcbitcXHRpb2VuZC1cXHUwMDNlaW9fdmkgPSBjdHgtXFx1MDAzZXZpO1xcbiBcXHRpb21hcF9iaW9fc3VibWl0X3JlYWRfZW5kaW8oaXRlciwgY3R4LCB4ZnNfZW5kX2Jpbyk7XFxuIH1cXG4gXFxuQEAgLTc3NSwxMSArODI2LDEzIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaW9tYXBfcmVhZF9vcHMgeGZzX2lvbWFwX3JlYWRfb3BzID0ge1xcbiBcXG4gc3RhdGljIGlubGluZSBjb25zdCBzdHJ1Y3QgaW9tYXBfcmVhZF9vcHMgKlxcbiB4ZnNfZ2V0X2lvbWFwX3JlYWRfb3BzKFxcbi1cXHRjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZVxcdCptYXBwaW5nKVxcbitcXHRjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZVxcdCptYXBwaW5nLFxcbitcXHRsb2ZmX3RcXHRcXHRcXHRcXHRwb3NpdGlvbilcXG4ge1xcbiBcXHRzdHJ1Y3QgeGZzX2lub2RlXFx0XFx0KmlwID0gWEZTX0kobWFwcGluZy1cXHUwMDNlaG9zdCk7XFxuIFxcbi1cXHRpZiAoYmRldl9oYXNfaW50ZWdyaXR5X2NzdW0oeGZzX2lub2RlX2J1ZnRhcmcoaXApLVxcdTAwM2VidF9iZGV2KSlcXG4rXFx0aWYgKGJkZXZfaGFzX2ludGVncml0eV9jc3VtKHhmc19pbm9kZV9idWZ0YXJnKGlwKS1cXHUwMDNlYnRfYmRldikgfHxcXG4rXFx0XFx0XFx0eGZzX2ZzdmVyaXR5X2lzX2ZpbGVfZGF0YShpcCwgcG9zaXRpb24pKVxcbiBcXHRcXHRyZXR1cm4gXFx1MDAyNnhmc19pb21hcF9yZWFkX29wcztcXG4gXFx0cmV0dXJuIFxcdTAwMjZpb21hcF9iaW9fcmVhZF9vcHM7XFxuIH1cXG5AQCAtNzkxLDcgKzg0NCw3IEBAIHhmc192bV9yZWFkX2ZvbGlvKFxcbiB7XFxuIFxcdHN0cnVjdCBpb21hcF9yZWFkX2ZvbGlvX2N0eFxcdGN0eCA9IHsgLmN1cl9mb2xpbyA9IGZvbGlvIH07XFxuIFxcbi1cXHRjdHgub3BzID0geGZzX2dldF9pb21hcF9yZWFkX29wcyhmb2xpby1cXHUwMDNlbWFwcGluZyk7XFxuK1xcdGN0eC5vcHMgPSB4ZnNfZ2V0X2lvbWFwX3JlYWRfb3BzKGZvbGlvLVxcdTAwM2VtYXBwaW5nLCBmb2xpb19wb3MoZm9saW8pKTtcXG4gXFx0aW9tYXBfcmVhZF9mb2xpbyhcXHUwMDI2eGZzX3JlYWRfaW9tYXBfb3BzLCBcXHUwMDI2Y3R4LCBOVUxMKTtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG5AQCAtODAyLDcgKzg1NSw3IEBAIHhmc192bV9yZWFkYWhlYWQoXFxuIHtcXG4gXFx0c3RydWN0IGlvbWFwX3JlYWRfZm9saW9fY3R4XFx0Y3R4ID0geyAucmFjID0gcmFjIH07XFxuIFxcbi1cXHRjdHgub3BzID0geGZzX2dldF9pb21hcF9yZWFkX29wcyhyYWMtXFx1MDAzZW1hcHBpbmcpLFxcbitcXHRjdHgub3BzID0geGZzX2dldF9pb21hcF9yZWFkX29wcyhyYWMtXFx1MDAzZW1hcHBpbmcsIHJlYWRhaGVhZF9wb3MocmFjKSk7XFxuIFxcdGlvbWFwX3JlYWRhaGVhZChcXHUwMDI2eGZzX3JlYWRfaW9tYXBfb3BzLCBcXHUwMDI2Y3R4LCBOVUxMKTtcXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19ibWFwX3V0aWwuYyBiL2ZzL3hmcy94ZnNfYm1hcF91dGlsLmNcXG5pbmRleCAzYjlmMjYyZjhlOTEyOC4uYjM0ZjJmMjdjYzkzYTggMTAwNjQ0XFxuLS0tIGEvZnMveGZzL3hmc19ibWFwX3V0aWwuY1xcbisrKyBiL2ZzL3hmcy94ZnNfYm1hcF91dGlsLmNcXG5AQCAtMzEsNiArMzEsNyBAQFxcbiAjaW5jbHVkZSBcXFwieGZzX3J0Yml0bWFwLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJ4ZnNfcnRncm91cC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwieGZzX3pvbmVfYWxsb2MuaFxcXCJcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ZzdmVyaXR5LmhcXHUwMDNlXFxuIFxcbiAvKiBLZXJuZWwgb25seSBCTUFQIHJlbGF0ZWQgZGVmaW5pdGlvbnMgYW5kIGZ1bmN0aW9ucyAqL1xcbiBcXG5AQCAtNTUzLDYgKzU1NCwxMyBAQCB4ZnNfY2FuX2ZyZWVfZW9mYmxvY2tzKFxcbiBcXHRpZiAobGFzdF9mc2IgXFx1MDAzYz0gZW5kX2ZzYilcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXG4rXFx0LypcXG4rXFx0ICogTm90aGluZyB0byBjbGVhbiBvbiBmc3Zlcml0eSBpbm9kZXMgYXMgdGhleSBkb24ndCB1c2UgcHJlYWxsb2MgYW5kXFxuK1xcdCAqIHRoZXJlIG5vIGRlbGFsbG9jIGFzIG9ubHkgd3JpdHRlbiBkYXRhIGlzIGZzdmVyaXR5IG1ldGFkYXRhXFxuK1xcdCAqL1xcbitcXHRpZiAoSVNfVkVSSVRZKFZGU19JKGlwKSkpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuIFxcdC8qXFxuIFxcdCAqIENoZWNrIGlmIHRoZXJlIGlzIGFuIHBvc3QtRU9GIGV4dGVudCB0byBmcmVlLiAgSWYgdGhlcmUgYXJlIGFueVxcbiBcXHQgKiBkZWxhbGxvYyBibG9ja3MgYXR0YWNoZWQgdG8gdGhlIGlub2RlIChkYXRhIGZvcmsgZGVsYWxsb2NcXG5kaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19maWxlLmMgYi9mcy94ZnMveGZzX2ZpbGUuY1xcbmluZGV4IDg0NWE5N2M5YjA2MzBiLi5jYmExOTRkNjc4ZmM3NyAxMDA2NDRcXG4tLS0gYS9mcy94ZnMveGZzX2ZpbGUuY1xcbisrKyBiL2ZzL3hmcy94ZnNfZmlsZS5jXFxuQEAgLTM3LDYgKzM3LDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ZhZHZpc2UuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21vdW50LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9maWxlbG9jay5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvZnN2ZXJpdHkuaFxcdTAwM2VcXG4gXFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgeGZzX2ZpbGVfdm1fb3BzO1xcbiBcXG5AQCAtMjQ1LDYgKzI0NiwyNSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGlvbWFwX2Rpb19vcHMgeGZzX2Rpb19yZWFkX2JvdW5jZV9vcHMgPSB7XFxuIFxcdC5iaW9fc2V0XFx0PSBcXHUwMDI2aW9tYXBfaW9lbmRfYmlvc2V0LFxcbiB9O1xcbiBcXG4rU1RBVElDIHNzaXplX3RcXG4reGZzX2ZpbGVfYnVmZmVyZWRfcmVhZChcXG4rXFx0c3RydWN0IGtpb2NiXFx0XFx0KmlvY2IsXFxuK1xcdHN0cnVjdCBpb3ZfaXRlclxcdFxcdCp0bylcXG4re1xcbitcXHRzdHJ1Y3QgeGZzX2lub2RlXFx0KmlwID0gWEZTX0koZmlsZV9pbm9kZShpb2NiLVxcdTAwM2VraV9maWxwKSk7XFxuK1xcdHNzaXplX3RcXHRcXHRcXHRyZXQ7XFxuK1xcbitcXHR0cmFjZV94ZnNfZmlsZV9idWZmZXJlZF9yZWFkKGlvY2IsIHRvKTtcXG4rXFxuK1xcdHJldCA9IHhmc19pbG9ja19pb2NiKGlvY2IsIFhGU19JT0xPQ0tfU0hBUkVEKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0cmV0ID0gZ2VuZXJpY19maWxlX3JlYWRfaXRlcihpb2NiLCB0byk7XFxuK1xcdHhmc19pdW5sb2NrKGlwLCBYRlNfSU9MT0NLX1NIQVJFRCk7XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbiBTVEFUSUMgc3NpemVfdFxcbiB4ZnNfZmlsZV9kaW9fcmVhZChcXG4gXFx0c3RydWN0IGtpb2NiXFx0XFx0KmlvY2IsXFxuQEAgLTI2NSw2ICsyODUsMTYgQEAgeGZzX2ZpbGVfZGlvX3JlYWQoXFxuIFxcdHJldCA9IHhmc19pbG9ja19pb2NiKGlvY2IsIFhGU19JT0xPQ0tfU0hBUkVEKTtcXG4gXFx0aWYgKHJldClcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0LypcXG4rXFx0ICogUmUtY2hlY2sgdmVyaXR5IHN0YXR1cyBhZnRlciBhY3F1aXJpbmcgbG9jay4gVGhpcyBwcmV2ZW50cyBUT0NUT1UgaW5cXG4rXFx0ICogeGZzX2ZpbGVfcmVhZF9pdGVyKCkgd2hpbGUgZmFsbGluZyBiYWNrIGZyb20gRElPIHRvIGJ1ZmZlcmVkIEkvTyBhc1xcbitcXHQgKiBub3cgd2UgYXJlIGhvbGRpbmcgYSBsb2NrXFxuK1xcdCAqL1xcbitcXHRpZiAoZnN2ZXJpdHlfYWN0aXZlKFZGU19JKGlwKSkpIHtcXG4rXFx0XFx0eGZzX2l1bmxvY2soaXAsIFhGU19JT0xPQ0tfU0hBUkVEKTtcXG4rXFx0XFx0aW9jYi1cXHUwMDNla2lfZmxhZ3MgXFx1MDAyNj0gfklPQ0JfRElSRUNUO1xcbitcXHRcXHRyZXR1cm4geGZzX2ZpbGVfYnVmZmVyZWRfcmVhZChpb2NiLCB0byk7XFxuK1xcdH1cXG4gXFx0aWYgKG1hcHBpbmdfc3RhYmxlX3dyaXRlcyhpb2NiLVxcdTAwM2VraV9maWxwLVxcdTAwM2VmX21hcHBpbmcpKSB7XFxuIFxcdFxcdGRpb19vcHMgPSBcXHUwMDI2eGZzX2Rpb19yZWFkX2JvdW5jZV9vcHM7XFxuIFxcdFxcdGRpb19mbGFncyB8PSBJT01BUF9ESU9fQk9VTkNFO1xcbkBAIC0yODEsNyArMzExLDggQEAgeGZzX2ZpbGVfZGF4X3JlYWQoXFxuIFxcdHN0cnVjdCBraW9jYlxcdFxcdCppb2NiLFxcbiBcXHRzdHJ1Y3QgaW92X2l0ZXJcXHRcXHQqdG8pXFxuIHtcXG4tXFx0c3RydWN0IHhmc19pbm9kZVxcdCppcCA9IFhGU19JKGlvY2ItXFx1MDAzZWtpX2ZpbHAtXFx1MDAzZWZfbWFwcGluZy1cXHUwMDNlaG9zdCk7XFxuK1xcdHN0cnVjdCBpbm9kZVxcdFxcdCppbm9kZSA9IGlvY2ItXFx1MDAzZWtpX2ZpbHAtXFx1MDAzZWZfbWFwcGluZy1cXHUwMDNlaG9zdDtcXG4rXFx0c3RydWN0IHhmc19pbm9kZVxcdCppcCA9IFhGU19JKGlub2RlKTtcXG4gXFx0c3NpemVfdFxcdFxcdFxcdHJldCA9IDA7XFxuIFxcbiBcXHR0cmFjZV94ZnNfZmlsZV9kYXhfcmVhZChpb2NiLCB0byk7XFxuQEAgLTI5OSwyNSArMzMwLDYgQEAgeGZzX2ZpbGVfZGF4X3JlYWQoXFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuLVNUQVRJQyBzc2l6ZV90XFxuLXhmc19maWxlX2J1ZmZlcmVkX3JlYWQoXFxuLVxcdHN0cnVjdCBraW9jYlxcdFxcdCppb2NiLFxcbi1cXHRzdHJ1Y3QgaW92X2l0ZXJcXHRcXHQqdG8pXFxuLXtcXG4tXFx0c3RydWN0IHhmc19pbm9kZVxcdCppcCA9IFhGU19JKGZpbGVfaW5vZGUoaW9jYi1cXHUwMDNla2lfZmlscCkpO1xcbi1cXHRzc2l6ZV90XFx0XFx0XFx0cmV0O1xcbi1cXG4tXFx0dHJhY2VfeGZzX2ZpbGVfYnVmZmVyZWRfcmVhZChpb2NiLCB0byk7XFxuLVxcbi1cXHRyZXQgPSB4ZnNfaWxvY2tfaW9jYihpb2NiLCBYRlNfSU9MT0NLX1NIQVJFRCk7XFxuLVxcdGlmIChyZXQpXFxuLVxcdFxcdHJldHVybiByZXQ7XFxuLVxcdHJldCA9IGdlbmVyaWNfZmlsZV9yZWFkX2l0ZXIoaW9jYiwgdG8pO1xcbi1cXHR4ZnNfaXVubG9jayhpcCwgWEZTX0lPTE9DS19TSEFSRUQpO1xcbi1cXG4tXFx0cmV0dXJuIHJldDtcXG4tfVxcbi1cXG4gU1RBVElDIHNzaXplX3RcXG4geGZzX2ZpbGVfcmVhZF9pdGVyKFxcbiBcXHRzdHJ1Y3Qga2lvY2JcXHRcXHQqaW9jYixcXG5AQCAtMzMyLDYgKzM0NCwxNCBAQCB4ZnNfZmlsZV9yZWFkX2l0ZXIoXFxuIFxcdGlmICh4ZnNfaXNfc2h1dGRvd24obXApKVxcbiBcXHRcXHRyZXR1cm4gLUVJTztcXG4gXFxuK1xcdC8qXFxuK1xcdCAqIEluIGNhc2UgZnMtdmVyaXR5IGlzIGVuYWJsZWQsIHdlIGFsc28gZmFsbGJhY2sgdG8gdGhlIGJ1ZmZlcmVkIHJlYWRcXG4rXFx0ICogZnJvbSB0aGUgZGlyZWN0IHJlYWQgcGF0aC4gVGhlcmVmb3JlLCBJT0NCX0RJUkVDVCBpcyBzZXQgYW5kIG5lZWQgdG9cXG4rXFx0ICogYmUgY2xlYXJlZCAoc2VlIGdlbmVyaWNfZmlsZV9yZWFkX2l0ZXIoKSlcXG4rXFx0ICovXFxuK1xcdGlmIChmc3Zlcml0eV9hY3RpdmUoaW5vZGUpKVxcbitcXHRcXHRpb2NiLVxcdTAwM2VraV9mbGFncyBcXHUwMDI2PSB+SU9DQl9ESVJFQ1Q7XFxuK1xcbiBcXHRpZiAoSVNfREFYKGlub2RlKSlcXG4gXFx0XFx0cmV0ID0geGZzX2ZpbGVfZGF4X3JlYWQoaW9jYiwgdG8pO1xcbiBcXHRlbHNlIGlmIChpb2NiLVxcdTAwM2VraV9mbGFncyBcXHUwMDI2IElPQ0JfRElSRUNUKVxcbkBAIC0xNzAwLDExICsxNzIwLDE4IEBAIHhmc19maWxlX29wZW4oXFxuIFxcdHN0cnVjdCBpbm9kZVxcdCppbm9kZSxcXG4gXFx0c3RydWN0IGZpbGVcXHQqZmlsZSlcXG4ge1xcbitcXHRpbnRcXHRcXHRlcnJvcjtcXG4rXFxuIFxcdGlmICh4ZnNfaXNfc2h1dGRvd24oWEZTX00oaW5vZGUtXFx1MDAzZWlfc2IpKSlcXG4gXFx0XFx0cmV0dXJuIC1FSU87XFxuIFxcdGZpbGUtXFx1MDAzZWZfbW9kZSB8PSBGTU9ERV9OT1dBSVQgfCBGTU9ERV9DQU5fT0RJUkVDVDtcXG4gXFx0aWYgKHhmc19nZXRfYXRvbWljX3dyaXRlX21pbihYRlNfSShpbm9kZSkpIFxcdTAwM2UgMClcXG4gXFx0XFx0ZmlsZS1cXHUwMDNlZl9tb2RlIHw9IEZNT0RFX0NBTl9BVE9NSUNfV1JJVEU7XFxuK1xcbitcXHRlcnJvciA9IGZzdmVyaXR5X2ZpbGVfb3Blbihpbm9kZSwgZmlsZSk7XFxuK1xcdGlmIChlcnJvcilcXG4rXFx0XFx0cmV0dXJuIGVycm9yO1xcbitcXG4gXFx0cmV0dXJuIGdlbmVyaWNfZmlsZV9vcGVuKGlub2RlLCBmaWxlKTtcXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19mc3Zlcml0eS5jIGIvZnMveGZzL3hmc19mc3Zlcml0eS5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uOTczMjgxMWExNDQ0ZTZcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvZnMveGZzL3hmc19mc3Zlcml0eS5jXFxuQEAgLTAsMCArMSw0NzMgQEBcXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cXG4rLypcXG4rICogQ29weXJpZ2h0IChDKSAyMDI2IFJlZCBIYXQsIEluYy5cXG4rICovXFxuKyNpbmNsdWRlIFxcXCJ4ZnNfcGxhdGZvcm0uaFxcXCJcXG4rI2luY2x1ZGUgXFxcInhmc19mb3JtYXQuaFxcXCJcXG4rI2luY2x1ZGUgXFxcInhmc19zaGFyZWQuaFxcXCJcXG4rI2luY2x1ZGUgXFxcInhmc190cmFuc19yZXN2LmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJ4ZnNfbW91bnQuaFxcXCJcXG4rI2luY2x1ZGUgXFxcInhmc19kYV9mb3JtYXQuaFxcXCJcXG4rI2luY2x1ZGUgXFxcInhmc19kYV9idHJlZS5oXFxcIlxcbisjaW5jbHVkZSBcXFwieGZzX2lub2RlLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJ4ZnNfbG9nX2Zvcm1hdC5oXFxcIlxcbisjaW5jbHVkZSBcXFwieGZzX2JtYXBfdXRpbC5oXFxcIlxcbisjaW5jbHVkZSBcXFwieGZzX3RyYW5zLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJ4ZnNfdHJhY2UuaFxcXCJcXG4rI2luY2x1ZGUgXFxcInhmc19xdW90YS5oXFxcIlxcbisjaW5jbHVkZSBcXFwieGZzX2ZzdmVyaXR5LmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJ4ZnNfaW9tYXAuaFxcXCJcXG4rI2luY2x1ZGUgXFxcInhmc19lcnJvci5oXFxcIlxcbisjaW5jbHVkZSBcXFwieGZzX2hlYWx0aC5oXFxcIlxcbisjaW5jbHVkZSBcXFwieGZzX2JtYXAuaFxcXCJcXG4rI2luY2x1ZGUgXFxcInhmc19ibWFwX3V0aWwuaFxcXCJcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ZzdmVyaXR5LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9pb21hcC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcGFnZW1hcC5oXFx1MDAzZVxcbitcXG4rbG9mZl90XFxuK3hmc19mc3Zlcml0eV9tZXRhZGF0YV9vZmZzZXQoXFxuK1xcdGNvbnN0IHN0cnVjdCB4ZnNfaW5vZGVcXHQqaXApXFxuK3tcXG4rXFx0cmV0dXJuIHJvdW5kX3VwKGlfc2l6ZV9yZWFkKFZGU19JQyhpcCkpLCBYRlNfRlNWRVJJVFlfU1RBUlRfQUxJR04pO1xcbit9XFxuK1xcbitib29sXFxuK3hmc19mc3Zlcml0eV9pc19maWxlX2RhdGEoXFxuK1xcdGNvbnN0IHN0cnVjdCB4ZnNfaW5vZGVcXHQqaXAsXFxuK1xcdGxvZmZfdFxcdFxcdFxcdG9mZnNldClcXG4re1xcbitcXHRyZXR1cm4gZnN2ZXJpdHlfYWN0aXZlKFZGU19JQyhpcCkpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdG9mZnNldCBcXHUwMDNjIHhmc19mc3Zlcml0eV9tZXRhZGF0YV9vZmZzZXQoaXApO1xcbit9XFxuK1xcbisvKlxcbisgKiBSZXRyaWV2ZSB0aGUgdmVyaXR5IGRlc2NyaXB0b3IuXFxuKyAqL1xcbitzdGF0aWMgaW50XFxuK3hmc19mc3Zlcml0eV9nZXRfZGVzY3JpcHRvcihcXG4rXFx0c3RydWN0IGlub2RlXFx0XFx0Kmlub2RlLFxcbitcXHR2b2lkXFx0XFx0XFx0KmJ1ZixcXG4rXFx0c2l6ZV90XFx0XFx0XFx0YnVmX3NpemUpXFxuK3tcXG4rXFx0c3RydWN0IHhmc19pbm9kZVxcdCppcCA9IFhGU19JKGlub2RlKTtcXG4rXFx0c3RydWN0IHhmc19tb3VudFxcdCptcCA9IGlwLVxcdTAwM2VpX21vdW50O1xcbitcXHRfX2JlMzJcXHRcXHRcXHRkX2Rlc2Nfc2l6ZTtcXG4rXFx0dTMyXFx0XFx0XFx0ZGVzY19zaXplO1xcbitcXHR1NjRcXHRcXHRcXHRkZXNjX3NpemVfcG9zO1xcbitcXHRpbnRcXHRcXHRcXHRlcnJvcjtcXG4rXFx0dTY0XFx0XFx0XFx0ZGVzY19wb3M7XFxuK1xcdHN0cnVjdCB4ZnNfYm1idF9pcmVjXFx0cmVjO1xcbitcXHRpbnRcXHRcXHRcXHRpc19lbXB0eTtcXG4rXFx0dWludDMyX3RcXHRcXHRibG9ja3NpemUgPSBpX2Jsb2Nrc2l6ZShWRlNfSShpcCkpO1xcbitcXHR4ZnNfZmlsZW9mZl90XFx0XFx0bGFzdF9ibG9ja19vZmZzZXQ7XFxuK1xcbitcXHRBU1NFUlQoaW5vZGUtXFx1MDAzZWlfZmxhZ3MgXFx1MDAyNiBTX1ZFUklUWSk7XFxuK1xcdHhmc19pbG9jayhpcCwgWEZTX0lMT0NLX1NIQVJFRCk7XFxuK1xcdGVycm9yID0geGZzX2JtYXBfbGFzdF9leHRlbnQoTlVMTCwgaXAsIFhGU19EQVRBX0ZPUkssIFxcdTAwMjZyZWMsIFxcdTAwMjZpc19lbXB0eSk7XFxuK1xcdHhmc19pdW5sb2NrKGlwLCBYRlNfSUxPQ0tfU0hBUkVEKTtcXG4rXFx0aWYgKGVycm9yKVxcbitcXHRcXHRyZXR1cm4gZXJyb3I7XFxuK1xcbitcXHRpZiAoaXNfZW1wdHkpXFxuK1xcdFxcdHJldHVybiAtRU5PREFUQTtcXG4rXFxuK1xcdGxhc3RfYmxvY2tfb2Zmc2V0ID1cXG4rXFx0XFx0WEZTX0ZTQl9UT19CKG1wLCByZWMuYnJfc3RhcnRvZmYgKyByZWMuYnJfYmxvY2tjb3VudCk7XFxuK1xcdGlmIChsYXN0X2Jsb2NrX29mZnNldCBcXHUwMDNjPSB4ZnNfZnN2ZXJpdHlfbWV0YWRhdGFfb2Zmc2V0KGlwKSlcXG4rXFx0XFx0cmV0dXJuIC1FTk9EQVRBO1xcbitcXG4rXFx0ZGVzY19zaXplX3BvcyA9IGxhc3RfYmxvY2tfb2Zmc2V0IC0gc2l6ZW9mKF9fYmUzMik7XFxuK1xcdGVycm9yID0gZnN2ZXJpdHlfcGFnZWNhY2hlX3JlYWQoaW5vZGUsIChjaGFyICopXFx1MDAyNmRfZGVzY19zaXplLFxcbitcXHRcXHRcXHRzaXplb2YoZF9kZXNjX3NpemUpLCBkZXNjX3NpemVfcG9zKTtcXG4rXFx0aWYgKGVycm9yKVxcbitcXHRcXHRyZXR1cm4gZXJyb3I7XFxuK1xcbitcXHRkZXNjX3NpemUgPSBiZTMyX3RvX2NwdShkX2Rlc2Nfc2l6ZSk7XFxuK1xcdGlmIChYRlNfSVNfQ09SUlVQVChtcCwgZGVzY19zaXplIFxcdTAwM2UgRlNfVkVSSVRZX01BWF9ERVNDUklQVE9SX1NJWkUpKSB7XFxuK1xcdFxcdHhmc19pbm9kZV9tYXJrX3NpY2soWEZTX0koaW5vZGUpLCBYRlNfU0lDS19JTk9fRlNWRVJJVFkpO1xcbitcXHRcXHRyZXR1cm4gLUVSQU5HRTtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKFhGU19JU19DT1JSVVBUKG1wLCBkZXNjX3NpemUgXFx1MDAzZSBkZXNjX3NpemVfcG9zKSkge1xcbitcXHRcXHR4ZnNfaW5vZGVfbWFya19zaWNrKFhGU19JKGlub2RlKSwgWEZTX1NJQ0tfSU5PX0ZTVkVSSVRZKTtcXG4rXFx0XFx0cmV0dXJuIC1FUkFOR0U7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICghYnVmX3NpemUpXFxuK1xcdFxcdHJldHVybiBkZXNjX3NpemU7XFxuK1xcbitcXHRpZiAoWEZTX0lTX0NPUlJVUFQobXAsIGRlc2Nfc2l6ZSBcXHUwMDNlIGJ1Zl9zaXplKSkge1xcbitcXHRcXHR4ZnNfaW5vZGVfbWFya19zaWNrKFhGU19JKGlub2RlKSwgWEZTX1NJQ0tfSU5PX0ZTVkVSSVRZKTtcXG4rXFx0XFx0cmV0dXJuIC1FUkFOR0U7XFxuK1xcdH1cXG4rXFxuK1xcdGRlc2NfcG9zID0gcm91bmRfZG93bihkZXNjX3NpemVfcG9zIC0gZGVzY19zaXplLCBibG9ja3NpemUpO1xcbitcXHRpZiAoZGVzY19wb3MgXFx1MDAzYyB4ZnNfZnN2ZXJpdHlfbWV0YWRhdGFfb2Zmc2V0KGlwKSkge1xcbitcXHRcXHR4ZnNfaW5vZGVfbWFya19zaWNrKFhGU19JKGlub2RlKSwgWEZTX1NJQ0tfSU5PX0ZTVkVSSVRZKTtcXG4rXFx0XFx0cmV0dXJuIC1FUkFOR0U7XFxuK1xcdH1cXG4rXFxuK1xcdGVycm9yID0gZnN2ZXJpdHlfcGFnZWNhY2hlX3JlYWQoaW5vZGUsIGJ1ZiwgZGVzY19zaXplLCBkZXNjX3Bvcyk7XFxuK1xcdGlmIChlcnJvcilcXG4rXFx0XFx0cmV0dXJuIGVycm9yO1xcbitcXG4rXFx0cmV0dXJuIGRlc2Nfc2l6ZTtcXG4rfVxcbitcXG4rc3RhdGljIGludFxcbit4ZnNfZnN2ZXJpdHlfd3JpdGVfZGVzY3JpcHRvcihcXG4rXFx0c3RydWN0IGZpbGVcXHRcXHQqZmlsZSxcXG4rXFx0Y29uc3Qgdm9pZFxcdFxcdCpkZXNjLFxcbitcXHR1MzJcXHRcXHRcXHRkZXNjX3NpemUsXFxuK1xcdHU2NFxcdFxcdFxcdG1lcmtsZV90cmVlX3NpemUpXFxuK3tcXG4rXFx0aW50XFx0XFx0XFx0ZXJyb3I7XFxuK1xcdHN0cnVjdCBpbm9kZVxcdFxcdCppbm9kZSA9IGZpbGVfaW5vZGUoZmlsZSk7XFxuK1xcdHN0cnVjdCB4ZnNfaW5vZGVcXHQqaXAgPSBYRlNfSShpbm9kZSk7XFxuK1xcdHVuc2lnbmVkIGludFxcdFxcdGJsa3NpemUgPSBpcC1cXHUwMDNlaV9tb3VudC1cXHUwMDNlbV9zYi5zYl9ibG9ja3NpemU7XFxuK1xcdHU2NFxcdFxcdFxcdHRyZWVfbGFzdF9ibG9jayA9XFxuK1xcdFxcdFxcdHhmc19mc3Zlcml0eV9tZXRhZGF0YV9vZmZzZXQoaXApICsgbWVya2xlX3RyZWVfc2l6ZTtcXG4rXFx0dTY0XFx0XFx0XFx0ZGVzY19wb3MgPVxcbitcXHRcXHRcXHRyb3VuZF91cCh0cmVlX2xhc3RfYmxvY2ssIFhGU19GU1ZFUklUWV9TVEFSVF9BTElHTik7XFxuK1xcdHU2NFxcdFxcdFxcdGRlc2NfZW5kID0gZGVzY19wb3MgKyBkZXNjX3NpemU7XFxuK1xcdF9fYmUzMlxcdFxcdFxcdGRlc2Nfc2l6ZV9kaXNrID0gY3B1X3RvX2JlMzIoZGVzY19zaXplKTtcXG4rXFx0dTY0XFx0XFx0XFx0ZGVzY19zaXplX3BvcyA9XFxuK1xcdFxcdFxcdHJvdW5kX3VwKGRlc2NfZW5kICsgc2l6ZW9mKGRlc2Nfc2l6ZV9kaXNrKSwgYmxrc2l6ZSkgLVxcbitcXHRcXHRcXHRzaXplb2YoZGVzY19zaXplX2Rpc2spO1xcbitcXG4rXFx0ZXJyb3IgPSBpb21hcF9mc3Zlcml0eV93cml0ZShmaWxlLCBkZXNjX3NpemVfcG9zLCBzaXplb2YoX19iZTMyKSxcXG4rXFx0XFx0XFx0KGNvbnN0IHZvaWQgKilcXHUwMDI2ZGVzY19zaXplX2Rpc2ssXFxuK1xcdFxcdFxcdFxcdTAwMjZ4ZnNfYnVmZmVyZWRfd3JpdGVfaW9tYXBfb3BzLFxcbitcXHRcXHRcXHRcXHUwMDI2eGZzX2lvbWFwX3dyaXRlX29wcyk7XFxuK1xcdGlmIChlcnJvcilcXG4rXFx0XFx0cmV0dXJuIGVycm9yO1xcbitcXG4rXFx0cmV0dXJuIGlvbWFwX2ZzdmVyaXR5X3dyaXRlKGZpbGUsIGRlc2NfcG9zLCBkZXNjX3NpemUsIGRlc2MsXFxuK1xcdFxcdFxcdFxcdTAwMjZ4ZnNfYnVmZmVyZWRfd3JpdGVfaW9tYXBfb3BzLFxcbitcXHRcXHRcXHRcXHUwMDI2eGZzX2lvbWFwX3dyaXRlX29wcyk7XFxuK31cXG4rXFxuKy8qXFxuKyAqIFRyeSB0byByZW1vdmUgYWxsIHRoZSBmc3Zlcml0eSBtZXRhZGF0YSBhZnRlciBhIGZhaWxlZCBlbmFibGVtZW50LlxcbisgKi9cXG4rc3RhdGljIGludFxcbit4ZnNfZnN2ZXJpdHlfZGVsZXRlX21ldGFkYXRhKFxcbitcXHRzdHJ1Y3QgeGZzX2lub2RlXFx0KmlwKVxcbit7XFxuK1xcdHN0cnVjdCB4ZnNfdHJhbnNcXHQqdHA7XFxuK1xcdHN0cnVjdCB4ZnNfbW91bnRcXHQqbXAgPSBpcC1cXHUwMDNlaV9tb3VudDtcXG4rXFx0aW50XFx0XFx0XFx0ZXJyb3I7XFxuK1xcbitcXHRlcnJvciA9IHhmc190cmFuc19hbGxvYyhtcCwgXFx1MDAyNk1fUkVTKG1wKS1cXHUwMDNldHJfaXRydW5jYXRlLCAwLCAwLCAwLCBcXHUwMDI2dHApO1xcbitcXHRpZiAoZXJyb3IpXFxuK1xcdFxcdHJldHVybiBlcnJvcjtcXG4rXFxuK1xcdHhmc19pbG9jayhpcCwgWEZTX0lMT0NLX0VYQ0wpO1xcbitcXHR4ZnNfdHJhbnNfaWpvaW4odHAsIGlwLCAwKTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFdlIHJlbW92aW5nIHBvc3QgRU9GIGRhdGEsIG5vIG5lZWQgdG8gdXBkYXRlIGlfc2l6ZSBhcyBmc3Zlcml0eVxcbitcXHQgKiBkaWRuJ3QgbW92ZSBpX3NpemUgaW4gdGhlIGZpcnN0IHBsYWNlXFxuK1xcdCAqL1xcbitcXHRlcnJvciA9IHhmc19pdHJ1bmNhdGVfZXh0ZW50cyhcXHUwMDI2dHAsIGlwLCBYRlNfREFUQV9GT1JLLCBYRlNfSVNJWkUoaXApKTtcXG4rXFx0aWYgKGVycm9yKVxcbitcXHRcXHRnb3RvIGVycl9jYW5jZWw7XFxuK1xcbitcXHRlcnJvciA9IHhmc190cmFuc19jb21taXQodHApO1xcbitcXHRpZiAoZXJyb3IpXFxuK1xcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4rb3V0X3VubG9jazpcXG4rXFx0eGZzX2l1bmxvY2soaXAsIFhGU19JTE9DS19FWENMKTtcXG4rXFx0cmV0dXJuIGVycm9yO1xcbitcXG4rZXJyX2NhbmNlbDpcXG4rXFx0eGZzX3RyYW5zX2NhbmNlbCh0cCk7XFxuK1xcdHhmc19pdW5sb2NrKGlwLCBYRlNfSUxPQ0tfRVhDTCk7XFxuK1xcdHJldHVybiBlcnJvcjtcXG4rfVxcbitcXG4rc3RhdGljIGludFxcbit4ZnNfZnN2ZXJpdHlfY2FuY2VsX3Vud3JpdHRlbihcXG4rXFx0c3RydWN0IHhmc19pbm9kZVxcdCppcCxcXG4rXFx0bG9mZl90XFx0XFx0XFx0c3RhcnQsXFxuK1xcdGxvZmZfdFxcdFxcdFxcdGVuZClcXG4re1xcbitcXHRzdHJ1Y3QgeGZzX21vdW50XFx0Km1wID0gaXAtXFx1MDAzZWlfbW91bnQ7XFxuK1xcdHN0cnVjdCB4ZnNfdHJhbnNcXHQqdHA7XFxuK1xcdHhmc19maWxlb2ZmX3RcXHRcXHRvZmZzZXRfZnNiID0gWEZTX0JfVE9fRlNCKG1wLCBzdGFydCk7XFxuK1xcdHhmc19maWxlb2ZmX3RcXHRcXHRlbmRfZnNiID0gWEZTX0JfVE9fRlNCKG1wLCBlbmQpO1xcbitcXHRzdHJ1Y3QgeGZzX2JtYnRfaXJlY1xcdGltYXA7XFxuK1xcdGludFxcdFxcdFxcdG5pbWFwcztcXG4rXFx0aW50XFx0XFx0XFx0ZXJyb3IgPSAwO1xcbitcXHRpbnRcXHRcXHRcXHRkb25lO1xcbitcXG4rXFxuK1xcdHdoaWxlIChvZmZzZXRfZnNiIFxcdTAwM2MgZW5kX2ZzYikge1xcbitcXHRcXHRuaW1hcHMgPSAxO1xcbitcXG4rXFx0XFx0ZXJyb3IgPSB4ZnNfdHJhbnNfYWxsb2MobXAsIFxcdTAwMjZNX1JFUyhtcCktXFx1MDAzZXRyX3dyaXRlLCAwLCAwLFxcbitcXHRcXHRcXHRcXHQwLCBcXHUwMDI2dHApO1xcbitcXHRcXHRpZiAoZXJyb3IpXFxuK1xcdFxcdFxcdHJldHVybiBlcnJvcjtcXG4rXFxuK1xcdFxcdHhmc19pbG9jayhpcCwgWEZTX0lMT0NLX0VYQ0wpO1xcbitcXHRcXHRlcnJvciA9IHhmc19ibWFwaV9yZWFkKGlwLCBvZmZzZXRfZnNiLCBlbmRfZnNiIC0gb2Zmc2V0X2ZzYixcXG4rXFx0XFx0XFx0XFx0XFx1MDAyNmltYXAsIFxcdTAwMjZuaW1hcHMsIDApO1xcbitcXHRcXHRpZiAoZXJyb3IpXFxuK1xcdFxcdFxcdGdvdG8gb3V0X2NhbmNlbDtcXG4rXFxuK1xcdFxcdGlmIChuaW1hcHMgPT0gMClcXG4rXFx0XFx0XFx0Z290byBvdXRfY2FuY2VsO1xcbitcXG4rXFx0XFx0aWYgKGltYXAuYnJfc3RhdGUgPT0gWEZTX0VYVF9VTldSSVRURU4pIHtcXG4rXFx0XFx0XFx0eGZzX3RyYW5zX2lqb2luKHRwLCBpcCwgWEZTX0lMT0NLX0VYQ0wpO1xcbitcXG4rXFx0XFx0XFx0ZXJyb3IgPSB4ZnNfYnVubWFwaSh0cCwgaXAsIGltYXAuYnJfc3RhcnRvZmYsXFxuK1xcdFxcdFxcdFxcdFxcdGltYXAuYnJfYmxvY2tjb3VudCwgMCwgMSwgXFx1MDAyNmRvbmUpO1xcbitcXHRcXHRcXHRpZiAoZXJyb3IpXFxuK1xcdFxcdFxcdFxcdGdvdG8gb3V0X2NhbmNlbDtcXG4rXFxuK1xcdFxcdFxcdGVycm9yID0geGZzX3RyYW5zX2NvbW1pdCh0cCk7XFxuK1xcdFxcdFxcdGlmIChlcnJvcilcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIGVycm9yO1xcbitcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHR4ZnNfdHJhbnNfY2FuY2VsKHRwKTtcXG4rXFx0XFx0XFx0eGZzX2l1bmxvY2soaXAsIFhGU19JTE9DS19FWENMKTtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0b2Zmc2V0X2ZzYiA9IGltYXAuYnJfc3RhcnRvZmYgKyBpbWFwLmJyX2Jsb2NrY291bnQ7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiBlcnJvcjtcXG4rb3V0X2NhbmNlbDpcXG4rXFx0eGZzX3RyYW5zX2NhbmNlbCh0cCk7XFxuK1xcdHhmc19pdW5sb2NrKGlwLCBYRlNfSUxPQ0tfRVhDTCk7XFxuK1xcdHJldHVybiBlcnJvcjtcXG4rfVxcbitcXG4rXFxuKy8qXFxuKyAqIFByZXBhcmUgdG8gZW5hYmxlIGZzdmVyaXR5IGJ5IGNsZWFyaW5nIG9sZCBtZXRhZGF0YS5cXG4rICovXFxuK3N0YXRpYyBpbnRcXG4reGZzX2ZzdmVyaXR5X2JlZ2luX2VuYWJsZShcXG4rXFx0c3RydWN0IGZpbGVcXHRcXHQqZmlscClcXG4re1xcbitcXHRzdHJ1Y3QgaW5vZGVcXHRcXHQqaW5vZGUgPSBmaWxlX2lub2RlKGZpbHApO1xcbitcXHRzdHJ1Y3QgeGZzX2lub2RlXFx0KmlwID0gWEZTX0koaW5vZGUpO1xcbitcXHRpbnRcXHRcXHRcXHRlcnJvcjtcXG4rXFxuK1xcdHhmc19hc3NlcnRfaWxvY2tlZChpcCwgWEZTX0lPTE9DS19FWENMKTtcXG4rXFxuK1xcdGlmIChJU19EQVgoaW5vZGUpIHx8IGlwLVxcdTAwM2VpX2RpZmxhZ3MyIFxcdTAwMjYgWEZTX0RJRkxBRzJfREFYKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdGlmIChpbm9kZS1cXHUwMDNlaV9zaXplIFxcdTAwM2UgWEZTX0ZTVkVSSVRZX0xBUkdFU1RfRklMRSlcXG4rXFx0XFx0cmV0dXJuIC1FRkJJRztcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIEZsdXNoIHBhZ2VjYWNoZSBiZWZvcmUgYnVpbGRpbmcgTWVya2xlIHRyZWUuIElub2RlIGlzIGxvY2tlZCBhbmQgbm9cXG4rXFx0ICogZnVydGhlciB3cml0ZXMgd2lsbCBoYXBwZW4gdG8gdGhlIGZpbGUgZXhjZXB0IGZzdmVyaXR5IG1ldGFkYXRhXFxuK1xcdCAqL1xcbitcXHRlcnJvciA9IGZpbGVtYXBfd3JpdGVfYW5kX3dhaXQoaW5vZGUtXFx1MDAzZWlfbWFwcGluZyk7XFxuK1xcdGlmIChlcnJvcilcXG4rXFx0XFx0cmV0dXJuIGVycm9yO1xcbitcXG4rXFx0aWYgKHhmc19pZmxhZ3NfdGVzdF9hbmRfc2V0KGlwLCBYRlNfVkVSSVRZX0NPTlNUUlVDVElPTikpXFxuK1xcdFxcdHJldHVybiAtRUJVU1k7XFxuK1xcbitcXHRlcnJvciA9IHhmc19xbV9kcWF0dGFjaChpcCk7XFxuK1xcdGlmIChlcnJvcilcXG4rXFx0XFx0Z290byBvdXRfY2xlYXI7XFxuK1xcbitcXHRlcnJvciA9IHhmc19mc3Zlcml0eV9kZWxldGVfbWV0YWRhdGEoaXApO1xcbitcXHRpZiAoZXJyb3IpXFxuK1xcdFxcdGdvdG8gb3V0X2NsZWFyO1xcbitcXHRyZXR1cm4gZXJyb3I7XFxuK291dF9jbGVhcjpcXG4rXFx0eGZzX2lmbGFnc19jbGVhcihpcCwgWEZTX1ZFUklUWV9DT05TVFJVQ1RJT04pO1xcbitcXHRyZXR1cm4gZXJyb3I7XFxuK31cXG4rXFxuKy8qXFxuKyAqIENvbXBsZXRlIChvciBmYWlsKSB0aGUgcHJvY2VzcyBvZiBlbmFibGluZyBmc3Zlcml0eS5cXG4rICovXFxuK3N0YXRpYyBpbnRcXG4reGZzX2ZzdmVyaXR5X2VuZF9lbmFibGUoXFxuK1xcdHN0cnVjdCBmaWxlXFx0XFx0KmZpbGUsXFxuK1xcdGNvbnN0IHZvaWRcXHRcXHQqZGVzYyxcXG4rXFx0c2l6ZV90XFx0XFx0XFx0ZGVzY19zaXplLFxcbitcXHR1NjRcXHRcXHRcXHRtZXJrbGVfdHJlZV9zaXplKVxcbit7XFxuK1xcdHN0cnVjdCBpbm9kZVxcdFxcdCppbm9kZSA9IGZpbGVfaW5vZGUoZmlsZSk7XFxuK1xcdHN0cnVjdCB4ZnNfaW5vZGVcXHQqaXAgPSBYRlNfSShpbm9kZSk7XFxuK1xcdHN0cnVjdCB4ZnNfbW91bnRcXHQqbXAgPSBpcC1cXHUwMDNlaV9tb3VudDtcXG4rXFx0c3RydWN0IHhmc190cmFuc1xcdCp0cDtcXG4rXFx0aW50XFx0XFx0XFx0ZXJyb3IgPSAwO1xcbitcXHRsb2ZmX3RcXHRcXHRcXHRyYW5nZV9zdGFydCA9IHhmc19mc3Zlcml0eV9tZXRhZGF0YV9vZmZzZXQoaXApO1xcbitcXG4rXFx0eGZzX2Fzc2VydF9pbG9ja2VkKGlwLCBYRlNfSU9MT0NLX0VYQ0wpO1xcbitcXG4rXFx0LyogZnMtdmVyaXR5IGZhaWxlZCwganVzdCBjbGVhbnVwICovXFxuK1xcdGlmIChkZXNjID09IE5VTEwpIHtcXG4rXFx0XFx0ZXJyb3IgPSB4ZnNfZnN2ZXJpdHlfZGVsZXRlX21ldGFkYXRhKGlwKTtcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdH1cXG4rXFxuK1xcdGVycm9yID0geGZzX2ZzdmVyaXR5X3dyaXRlX2Rlc2NyaXB0b3IoZmlsZSwgZGVzYywgZGVzY19zaXplLFxcbitcXHRcXHRcXHRtZXJrbGVfdHJlZV9zaXplKTtcXG4rXFx0aWYgKGVycm9yKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFdhaXQgZm9yIE1lcmtsZSB0cmVlIGdldCB3cml0dGVuIHRvIGRpc2sgYmVmb3JlIHNldHRpbmcgb24tZGlzayBpbm9kZVxcbitcXHQgKiBmbGFnIGFuZCBjbGVhcmluZyBYRlNfVkVSSVRZX0NPTlNUUlVDVElPTlxcbitcXHQgKi9cXG4rXFx0ZXJyb3IgPSBmaWxlbWFwX3dyaXRlX2FuZF93YWl0X3JhbmdlKGlub2RlLVxcdTAwM2VpX21hcHBpbmcsIHJhbmdlX3N0YXJ0LFxcbitcXHRcXHRcXHRMTE9OR19NQVgpO1xcbitcXHRpZiAoZXJyb3IpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0LypcXG4rXFx0ICogUmVtb3ZlIHVud3JpdHRlbiBleHRlbnRzIGxlZnQgYnkgQ09XIHByZWFsbG9jYXRpb25zIGFuZCB3cml0ZVxcbitcXHQgKiBwcmVhbGxvY2F0aW9uIGluIHRoZSBtZXJrbGUgdHJlZSBob2xlcyBhbmQgcGFzdCBkZXNjcmlwdG9yXFxuK1xcdCAqL1xcbitcXHRlcnJvciA9IHhmc19mc3Zlcml0eV9jYW5jZWxfdW53cml0dGVuKGlwLCByYW5nZV9zdGFydCwgTExPTkdfTUFYKTtcXG4rXFx0aWYgKGVycm9yKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFByb2FjdGl2ZWx5IGRyb3AgYW55IGRlbGF5ZWQgYWxsb2NhdGlvbnMgaW4gQ09XIGZvcmssIHRoZSBmc3Zlcml0eVxcbitcXHQgKiBmaWxlcyBhcmUgcmVhZC1vbmx5XFxuK1xcdCAqL1xcbitcXHRpZiAoeGZzX2lzX2Nvd19pbm9kZShpcCkpIHtcXG4rXFx0XFx0aWYgKCFpcC1cXHUwMDNlaV9jb3dmcClcXG4rXFx0XFx0XFx0eGZzX2lmb3JrX2luaXRfY293KGlwKTtcXG4rXFx0XFx0eGZzX2JtYXBfcHVuY2hfZGVsYWxsb2NfcmFuZ2UoaXAsIFhGU19DT1dfRk9SSywgMCwgTExPTkdfTUFYLFxcbitcXHRcXHRcXHRcXHROVUxMKTtcXG4rXFx0fVxcbitcXG4rXFx0LypcXG4rXFx0ICogU2V0IGZzdmVyaXR5IGlub2RlIGZsYWdcXG4rXFx0ICovXFxuK1xcdGVycm9yID0geGZzX3RyYW5zX2FsbG9jX2lub2RlKGlwLCBcXHUwMDI2TV9SRVMobXApLVxcdTAwM2V0cl9pY2hhbmdlLFxcbitcXHRcXHRcXHQwLCAwLCBmYWxzZSwgXFx1MDAyNnRwKTtcXG4rXFx0aWYgKGVycm9yKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIEVuc3VyZSB0aGF0IHdlJ3ZlIHBlcnNpc3RlZCB0aGUgdmVyaXR5IGluZm9ybWF0aW9uIGJlZm9yZSB3ZSBlbmFibGVcXG4rXFx0ICogaXQgb24gdGhlIGlub2RlIGFuZCB0ZWxsIHRoZSBjYWxsZXIgd2UgaGF2ZSBzZWFsZWQgdGhlIGlub2RlLlxcbitcXHQgKi9cXG4rXFx0aXAtXFx1MDAzZWlfZGlmbGFnczIgfD0gWEZTX0RJRkxBRzJfVkVSSVRZO1xcbitcXG4rXFx0eGZzX3RyYW5zX2xvZ19pbm9kZSh0cCwgaXAsIFhGU19JTE9HX0NPUkUpO1xcbitcXHR4ZnNfdHJhbnNfc2V0X3N5bmModHApO1xcbitcXG4rXFx0ZXJyb3IgPSB4ZnNfdHJhbnNfY29tbWl0KHRwKTtcXG4rXFx0eGZzX2l1bmxvY2soaXAsIFhGU19JTE9DS19FWENMKTtcXG4rXFxuK1xcdGlmICghZXJyb3IpXFxuK1xcdFxcdGlub2RlLVxcdTAwM2VpX2ZsYWdzIHw9IFNfVkVSSVRZO1xcbitcXG4rb3V0OlxcbitcXHRpZiAoZXJyb3IpIHtcXG4rXFx0XFx0aW50XFx0ZXJyb3IyO1xcbitcXG4rXFx0XFx0ZXJyb3IyID0geGZzX2ZzdmVyaXR5X2RlbGV0ZV9tZXRhZGF0YShpcCk7XFxuK1xcdFxcdGlmIChlcnJvcjIpXFxuK1xcdFxcdFxcdHhmc19hbGVydChpcC1cXHUwMDNlaV9tb3VudCxcXG4rXFxcImlubyAweCVsbHggZmFpbGVkIHRvIGNsZWFuIHVwIG5ldyBmc3Zlcml0eSBtZXRhZGF0YSwgZXJyICVkXFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0SV9JTk8oaXApLCBlcnJvcjIpO1xcbitcXHR9XFxuK1xcbitcXHR4ZnNfaWZsYWdzX2NsZWFyKGlwLCBYRlNfVkVSSVRZX0NPTlNUUlVDVElPTik7XFxuK1xcdHJldHVybiBlcnJvcjtcXG4rfVxcbitcXG4rLypcXG4rICogUmV0cmlldmUgYSBtZXJrbGUgdHJlZSBibG9jay5cXG4rICovXFxuK3N0YXRpYyBzdHJ1Y3QgcGFnZSAqXFxuK3hmc19mc3Zlcml0eV9yZWFkX21lcmtsZShcXG4rXFx0c3RydWN0IGlub2RlXFx0XFx0Kmlub2RlLFxcbitcXHRwZ29mZl90XFx0XFx0XFx0aW5kZXgpXFxuK3tcXG4rXFx0aW5kZXggKz0geGZzX2ZzdmVyaXR5X21ldGFkYXRhX29mZnNldChYRlNfSShpbm9kZSkpIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQ7XFxuK1xcbitcXHRyZXR1cm4gZ2VuZXJpY19yZWFkX21lcmtsZV90cmVlX3BhZ2UoaW5vZGUsIGluZGV4KTtcXG4rfVxcbitcXG4rLypcXG4rICogUmV0cmlldmUgYSBtZXJrbGUgdHJlZSBibG9jay5cXG4rICovXFxuK3N0YXRpYyB2b2lkXFxuK3hmc19mc3Zlcml0eV9yZWFkYWhlYWRfbWVya2xlX3RyZWUoXFxuK1xcdHN0cnVjdCBpbm9kZVxcdFxcdCppbm9kZSxcXG4rXFx0cGdvZmZfdFxcdFxcdFxcdGluZGV4LFxcbitcXHR1bnNpZ25lZCBsb25nXFx0XFx0bnJfcGFnZXMpXFxuK3tcXG4rXFx0aW5kZXggKz0geGZzX2ZzdmVyaXR5X21ldGFkYXRhX29mZnNldChYRlNfSShpbm9kZSkpIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQ7XFxuK1xcbitcXHRnZW5lcmljX3JlYWRhaGVhZF9tZXJrbGVfdHJlZShpbm9kZSwgaW5kZXgsIG5yX3BhZ2VzKTtcXG4rfVxcbitcXG4rLypcXG4rICogV3JpdGUgYSBtZXJrbGUgdHJlZSBibG9jay5cXG4rICovXFxuK3N0YXRpYyBpbnRcXG4reGZzX2ZzdmVyaXR5X3dyaXRlX21lcmtsZShcXG4rXFx0c3RydWN0IGZpbGVcXHRcXHQqZmlsZSxcXG4rXFx0Y29uc3Qgdm9pZFxcdFxcdCpidWYsXFxuK1xcdHU2NFxcdFxcdFxcdHBvcyxcXG4rXFx0dW5zaWduZWQgaW50XFx0XFx0c2l6ZSxcXG4rXFx0Y29uc3QgdThcXHRcXHQqemVyb19kaWdlc3QsXFxuK1xcdHVuc2lnbmVkIGludFxcdFxcdGRpZ2VzdF9zaXplKVxcbit7XFxuK1xcdHN0cnVjdCBpbm9kZVxcdFxcdCppbm9kZSA9IGZpbGVfaW5vZGUoZmlsZSk7XFxuK1xcdHN0cnVjdCB4ZnNfaW5vZGVcXHQqaXAgPSBYRlNfSShpbm9kZSk7XFxuK1xcdGxvZmZfdFxcdFxcdFxcdHBvc2l0aW9uID0gcG9zICtcXG4rXFx0XFx0eGZzX2ZzdmVyaXR5X21ldGFkYXRhX29mZnNldChpcCk7XFxuK1xcbitcXHRpZiAocG9zaXRpb24gKyBzaXplIFxcdTAwM2UgaW5vZGUtXFx1MDAzZWlfc2ItXFx1MDAzZXNfbWF4Ynl0ZXMpXFxuK1xcdFxcdHJldHVybiAtRUZCSUc7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBJZiB0aGlzIGlzIGEgYmxvY2sgZnVsbCBvZiBoYXNoZXMgb2YgemVyb2VkIGJsb2NrcywgZG9uJ3QgYm90aGVyXFxuK1xcdCAqIHN0b3JpbmcgdGhlIGJsb2NrLiBXZSBjYW4gc3ludGhlc2l6ZSB0aGVtIGxhdGVyLlxcbitcXHQgKlxcbitcXHQgKiBIb3dldmVyLCBkbyB0aGlzIG9ubHkgaW4gY2FzZSBNZXJrbGUgdHJlZSBibG9jayA9PSBmcyBibG9jayBzaXplLlxcbitcXHQgKiBJb21hcCBzeW50aGVzaXplcyB0aGVzZSBibG9ja3MgYmFzZWQgb24gaG9sZXMgaW4gdGhlIG1lcmtsZSB0cmVlLiBXZVxcbitcXHQgKiB3b24ndCBiZSBhYmxlIHRvIHRlbGwgaWYgc29tZXRoaW5nIG5lZWQgdG8gYmUgc3ludGhlc2l6ZXMgZm9yIHRoZVxcbitcXHQgKiByYW5nZSBpbiB0aGUgZnMgYmxvY2suIEZvciBleGFtcGxlLCBmb3IgNGsgZmlsZXN5c3RlbSBibG9ja1xcbitcXHQgKlxcbitcXHQgKlxcdFsgMWsgfCB6ZXJvIGhhc2hlcyB8IHplcm8gaGFzaGVzIHwgMWsgXVxcbitcXHQgKlxcbitcXHQgKiBJb21hcCB3b24ndCBrbm93IGFib3V0IHRoZXNlIGVtcHR5IGJsb2Nrcy5cXG4rXFx0ICovXFxuK1xcdGlmIChzaXplID09IGlwLVxcdTAwM2VpX21vdW50LVxcdTAwM2VtX3NiLnNiX2Jsb2Nrc2l6ZSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHQvKlxcbitcXHRcXHRcXHQgKiBGaXJzdCBkaWdlc3QgaXMgemVyb19kaWdlc3RcXG4rXFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdG1lbWNtcChidWYsIHplcm9fZGlnZXN0LCBkaWdlc3Rfc2l6ZSkgPT0gMCBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHQvKlxcbitcXHRcXHRcXHQgKiBFdmVyeSBkaWdlc3QgaXMgc2FtZSBhcyBwcmV2aW91cywgdGh1cyBhbGwgYXJlXFxuK1xcdFxcdFxcdCAqIHplcm9fZGlnZXN0XFxuK1xcdFxcdFxcdCAqL1xcbitcXHRcXHRcXHRtZW1jbXAoYnVmICsgZGlnZXN0X3NpemUsIGJ1Ziwgc2l6ZSAtIGRpZ2VzdF9zaXplKSA9PSAwKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdHJldHVybiBpb21hcF9mc3Zlcml0eV93cml0ZShmaWxlLCBwb3NpdGlvbiwgc2l6ZSwgYnVmLFxcbitcXHRcXHRcXHRcXHUwMDI2eGZzX2J1ZmZlcmVkX3dyaXRlX2lvbWFwX29wcyxcXG4rXFx0XFx0XFx0XFx1MDAyNnhmc19pb21hcF93cml0ZV9vcHMpO1xcbit9XFxuK1xcbitjb25zdCBzdHJ1Y3QgZnN2ZXJpdHlfb3BlcmF0aW9ucyB4ZnNfZnN2ZXJpdHlfb3BzID0ge1xcbitcXHQuYmVnaW5fZW5hYmxlX3Zlcml0eVxcdFxcdD0geGZzX2ZzdmVyaXR5X2JlZ2luX2VuYWJsZSxcXG4rXFx0LmVuZF9lbmFibGVfdmVyaXR5XFx0XFx0PSB4ZnNfZnN2ZXJpdHlfZW5kX2VuYWJsZSxcXG4rXFx0LmdldF92ZXJpdHlfZGVzY3JpcHRvclxcdFxcdD0geGZzX2ZzdmVyaXR5X2dldF9kZXNjcmlwdG9yLFxcbitcXHQucmVhZF9tZXJrbGVfdHJlZV9wYWdlXFx0XFx0PSB4ZnNfZnN2ZXJpdHlfcmVhZF9tZXJrbGUsXFxuK1xcdC5yZWFkYWhlYWRfbWVya2xlX3RyZWVcXHRcXHQ9IHhmc19mc3Zlcml0eV9yZWFkYWhlYWRfbWVya2xlX3RyZWUsXFxuK1xcdC53cml0ZV9tZXJrbGVfdHJlZV9ibG9ja1xcdD0geGZzX2ZzdmVyaXR5X3dyaXRlX21lcmtsZSxcXG4rfTtcXG5kaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19mc3Zlcml0eS5oIGIvZnMveGZzL3hmc19mc3Zlcml0eS5oXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uNmE5ODFlMjBhNzViYjhcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvZnMveGZzL3hmc19mc3Zlcml0eS5oXFxuQEAgLTAsMCArMSwyOCBAQFxcbisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xcbisvKlxcbisgKiBDb3B5cmlnaHQgKEMpIDIwMjYgUmVkIEhhdCwgSW5jLlxcbisgKi9cXG4rI2lmbmRlZiBfX1hGU19GU1ZFUklUWV9IX19cXG4rI2RlZmluZSBfX1hGU19GU1ZFUklUWV9IX19cXG4rXFxuKyNpbmNsdWRlIFxcXCJ4ZnNfcGxhdGZvcm0uaFxcXCJcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ZzdmVyaXR5LmhcXHUwMDNlXFxuK1xcbisjaWZkZWYgQ09ORklHX0ZTX1ZFUklUWVxcbitleHRlcm4gY29uc3Qgc3RydWN0IGZzdmVyaXR5X29wZXJhdGlvbnMgeGZzX2ZzdmVyaXR5X29wcztcXG4rbG9mZl90IHhmc19mc3Zlcml0eV9tZXRhZGF0YV9vZmZzZXQoY29uc3Qgc3RydWN0IHhmc19pbm9kZSAqaXApO1xcbitib29sIHhmc19mc3Zlcml0eV9pc19maWxlX2RhdGEoY29uc3Qgc3RydWN0IHhmc19pbm9kZSAqaXAsIGxvZmZfdCBvZmZzZXQpO1xcbisjZWxzZVxcbitzdGF0aWMgaW5saW5lIGxvZmZfdCB4ZnNfZnN2ZXJpdHlfbWV0YWRhdGFfb2Zmc2V0KGNvbnN0IHN0cnVjdCB4ZnNfaW5vZGUgKmlwKVxcbit7XFxuK1xcdFdBUk5fT05fT05DRSgxKTtcXG4rXFx0cmV0dXJuIFVMTE9OR19NQVg7XFxuK31cXG4rc3RhdGljIGlubGluZSBib29sIHhmc19mc3Zlcml0eV9pc19maWxlX2RhdGEoY29uc3Qgc3RydWN0IHhmc19pbm9kZSAqaXAsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICBsb2ZmX3Qgb2Zmc2V0KVxcbit7XFxuK1xcdHJldHVybiBmYWxzZTtcXG4rfVxcbisjZW5kaWZcXHQvKiBDT05GSUdfRlNfVkVSSVRZICovXFxuK1xcbisjZW5kaWZcXHQvKiBfX1hGU19GU1ZFUklUWV9IX18gKi9cXG5kaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19oZWFsdGguYyBiL2ZzL3hmcy94ZnNfaGVhbHRoLmNcXG5pbmRleCAyMzliODQzZTgzZDQyYS4uYmU2Njc2MGZiMTIwZjcgMTAwNjQ0XFxuLS0tIGEvZnMveGZzL3hmc19oZWFsdGguY1xcbisrKyBiL2ZzL3hmcy94ZnNfaGVhbHRoLmNcXG5AQCAtNjI1LDYgKzYyNSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaW9jdGxfc2lja19tYXAgaW5vX21hcFtdID0ge1xcbiBcXHR7IFhGU19TSUNLX0lOT19ESVJfWkFQUEVELFxcdFhGU19CU19TSUNLX0RJUiB9LFxcbiBcXHR7IFhGU19TSUNLX0lOT19TWU1MSU5LX1pBUFBFRCxcXHRYRlNfQlNfU0lDS19TWU1MSU5LIH0sXFxuIFxcdHsgWEZTX1NJQ0tfSU5PX0RJUlRSRUUsXFx0WEZTX0JTX1NJQ0tfRElSVFJFRSB9LFxcbitcXHR7IFhGU19TSUNLX0lOT19GU1ZFUklUWSxcXHRYRlNfQlNfU0lDS19GU1ZFUklUWSB9LFxcbiB9O1xcbiBcXG4gLyogRmlsbCBvdXQgYnVsa3N0YXQgaGVhbHRoIGluZm8uICovXFxuZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfaW5vZGUuaCBiL2ZzL3hmcy94ZnNfaW5vZGUuaFxcbmluZGV4IDM0YzEwMzhlYmZjZGUxLi4xN2NlMDgzNTkxZjQwOCAxMDA2NDRcXG4tLS0gYS9mcy94ZnMveGZzX2lub2RlLmhcXG4rKysgYi9mcy94ZnMveGZzX2lub2RlLmhcXG5AQCAtNDE5LDYgKzQxOSwxMiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgeGZzX2lub2RlX2Nhbl9zd19hdG9taWNfd3JpdGUoY29uc3Qgc3RydWN0IHhmc19pbm9kZSAqaXApXFxuICAqL1xcbiAjZGVmaW5lIFhGU19JUkVNQVBQSU5HXFx0XFx0KDFVIFxcdTAwM2NcXHUwMDNjIDE1KVxcbiBcXG4rLypcXG4rICogZnMtdmVyaXR5J3MgTWVya2xlIHRyZWUgaXMgdW5kZXIgY29uc3RydWN0aW9uLiBUaGUgZmlsZSBpcyByZWFkLW9ubHksIHRoZVxcbisgKiBvbmx5IHdyaXRlcyBoYXBwZW5pbmcgYXJlIGZvciB0aGUgZnN2ZXJpdHkgbWV0YWRhdGEuXFxuKyAqL1xcbisjZGVmaW5lIFhGU19WRVJJVFlfQ09OU1RSVUNUSU9OXFx0KDFVIFxcdTAwM2NcXHUwMDNjIDE2KVxcbitcXG4gLyogQWxsIGlub2RlIHN0YXRlIGZsYWdzIHJlbGF0ZWQgdG8gaW5vZGUgcmVjbGFpbS4gKi9cXG4gI2RlZmluZSBYRlNfQUxMX0lSRUNMQUlNX0ZMQUdTXFx0KFhGU19JUkVDTEFJTUFCTEUgfCBcXFxcXFxuIFxcdFxcdFxcdFxcdCBYRlNfSVJFQ0xBSU0gfCBcXFxcXFxuZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfaW9jdGwuYyBiL2ZzL3hmcy94ZnNfaW9jdGwuY1xcbmluZGV4IDFiNTM3MDFiZWJlYTFhLi5mYzc4NjBhOGI1YWJiMSAxMDA2NDRcXG4tLS0gYS9mcy94ZnMveGZzX2lvY3RsLmNcXG4rKysgYi9mcy94ZnMveGZzX2lvY3RsLmNcXG5AQCAtNDksNiArNDksNyBAQFxcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21vdW50LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9maWxlYXR0ci5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvZnN2ZXJpdHkuaFxcdTAwM2VcXG4gXFxuIC8qIFJldHVybiAwIG9uIHN1Y2Nlc3Mgb3IgcG9zaXRpdmUgZXJyb3IgKi9cXG4gaW50XFxuQEAgLTE0NjYsNiArMTQ2NywxOSBAQCB4ZnNfZmlsZV9pb2N0bChcXG4gXFx0Y2FzZSBYRlNfSU9DX1ZFUklGWV9NRURJQTpcXG4gXFx0XFx0cmV0dXJuIHhmc19pb2NfdmVyaWZ5X21lZGlhKGZpbHAsIGFyZyk7XFxuIFxcbitcXHRjYXNlIEZTX0lPQ19FTkFCTEVfVkVSSVRZOlxcbitcXHRcXHRpZiAoIXhmc19oYXNfdmVyaXR5KG1wKSlcXG4rXFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHRcXHRyZXR1cm4gZnN2ZXJpdHlfaW9jdGxfZW5hYmxlKGZpbHAsIGFyZyk7XFxuK1xcdGNhc2UgRlNfSU9DX01FQVNVUkVfVkVSSVRZOlxcbitcXHRcXHRpZiAoIXhmc19oYXNfdmVyaXR5KG1wKSlcXG4rXFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHRcXHRyZXR1cm4gZnN2ZXJpdHlfaW9jdGxfbWVhc3VyZShmaWxwLCBhcmcpO1xcbitcXHRjYXNlIEZTX0lPQ19SRUFEX1ZFUklUWV9NRVRBREFUQTpcXG4rXFx0XFx0aWYgKCF4ZnNfaGFzX3Zlcml0eShtcCkpXFxuK1xcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0XFx0cmV0dXJuIGZzdmVyaXR5X2lvY3RsX3JlYWRfbWV0YWRhdGEoZmlscCwgYXJnKTtcXG4rXFxuIFxcdGRlZmF1bHQ6XFxuIFxcdFxcdHJldHVybiAtRU5PVFRZO1xcbiBcXHR9XFxuZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfaW9tYXAuYyBiL2ZzL3hmcy94ZnNfaW9tYXAuY1xcbmluZGV4IDIyNWMzZGU4OGQwM2IxLi5mYmE1MTkwMjQxNmIwMiAxMDA2NDRcXG4tLS0gYS9mcy94ZnMveGZzX2lvbWFwLmNcXG4rKysgYi9mcy94ZnMveGZzX2lvbWFwLmNcXG5AQCAtMzIsNiArMzIsOCBAQFxcbiAjaW5jbHVkZSBcXFwieGZzX3J0Yml0bWFwLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJ4ZnNfaWNhY2hlLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJ4ZnNfem9uZV9hbGxvYy5oXFxcIlxcbisjaW5jbHVkZSBcXFwieGZzX2ZzdmVyaXR5LmhcXFwiXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9mc3Zlcml0eS5oXFx1MDAzZVxcbiBcXG4gI2RlZmluZSBYRlNfQUxMT0NfQUxJR04obXAsIG9mZikgXFxcXFxcbiBcXHQoKChvZmYpIFxcdTAwM2VcXHUwMDNlIG1wLVxcdTAwM2VtX2FsbG9jc2l6ZV9sb2cpIFxcdTAwM2NcXHUwMDNjIG1wLVxcdTAwM2VtX2FsbG9jc2l6ZV9sb2cpXFxuQEAgLTE1ODksNyArMTU5MSw4IEBAIHhmc196b25lZF9idWZmZXJlZF93cml0ZV9pb21hcF9iZWdpbihcXG4gXFx0bG9mZl90XFx0XFx0XFx0Y291bnQsXFxuIFxcdHVuc2lnbmVkXFx0XFx0ZmxhZ3MsXFxuIFxcdHN0cnVjdCBpb21hcFxcdFxcdCppb21hcCxcXG4tXFx0c3RydWN0IGlvbWFwXFx0XFx0KnNyY21hcClcXG4rXFx0c3RydWN0IGlvbWFwXFx0XFx0KnNyY21hcCxcXG4rXFx0dTE2XFx0XFx0XFx0aW9tYXBfZmxhZ3MpXFxuIHtcXG4gXFx0c3RydWN0IGlvbWFwX2l0ZXJcXHQqaXRlciA9XFxuIFxcdFxcdGNvbnRhaW5lcl9vZihpb21hcCwgc3RydWN0IGlvbWFwX2l0ZXIsIGlvbWFwKTtcXG5AQCAtMTU5OSw3ICsxNjAyLDYgQEAgeGZzX3pvbmVkX2J1ZmZlcmVkX3dyaXRlX2lvbWFwX2JlZ2luKFxcbiBcXHRzdHJ1Y3QgeGZzX21vdW50XFx0Km1wID0gaXAtXFx1MDAzZWlfbW91bnQ7XFxuIFxcdHhmc19maWxlb2ZmX3RcXHRcXHRvZmZzZXRfZnNiID0gWEZTX0JfVE9fRlNCVChtcCwgb2Zmc2V0KTtcXG4gXFx0eGZzX2ZpbGVvZmZfdFxcdFxcdGVuZF9mc2IgPSB4ZnNfaW9tYXBfZW5kX2ZzYihtcCwgb2Zmc2V0LCBjb3VudCk7XFxuLVxcdHUxNlxcdFxcdFxcdGlvbWFwX2ZsYWdzID0gSU9NQVBfRl9TSEFSRUQ7XFxuIFxcdHVuc2lnbmVkIGludFxcdFxcdGxvY2ttb2RlID0gWEZTX0lMT0NLX0VYQ0w7XFxuIFxcdHhmc19maWxibGtzX3RcXHRcXHRjb3VudF9mc2I7XFxuIFxcdHhmc19leHRsZW5fdFxcdFxcdGluZGxlbjtcXG5AQCAtMTYwNyw2ICsxNjA5LDggQEAgeGZzX3pvbmVkX2J1ZmZlcmVkX3dyaXRlX2lvbWFwX2JlZ2luKFxcbiBcXHRzdHJ1Y3QgeGZzX2lleHRfY3Vyc29yXFx0aWN1cjtcXG4gXFx0aW50XFx0XFx0XFx0ZXJyb3IgPSAwO1xcbiBcXG4rXFx0aW9tYXBfZmxhZ3MgPSBpb21hcF9mbGFncyB8IElPTUFQX0ZfU0hBUkVEO1xcbitcXG4gXFx0QVNTRVJUKCF4ZnNfZ2V0X2V4dHN6X2hpbnQoaXApKTtcXG4gXFx0QVNTRVJUKCEoZmxhZ3MgXFx1MDAyNiBJT01BUF9VTlNIQVJFKSk7XFxuIFxcdEFTU0VSVChhYyk7XFxuQEAgLTE4MDMsOSArMTgwNywxMiBAQCB4ZnNfYnVmZmVyZWRfd3JpdGVfaW9tYXBfYmVnaW4oXFxuIFxcdGlmICh4ZnNfaXNfc2h1dGRvd24obXApKVxcbiBcXHRcXHRyZXR1cm4gLUVJTztcXG4gXFxuK1xcdGlmICh4ZnNfaWZsYWdzX3Rlc3QoaXAsIFhGU19WRVJJVFlfQ09OU1RSVUNUSU9OKSlcXG4rXFx0XFx0aW9tYXBfZmxhZ3MgfD0gSU9NQVBfRl9GU1ZFUklUWTtcXG4rXFxuIFxcdGlmICh4ZnNfaXNfem9uZWRfaW5vZGUoaXApKVxcbiBcXHRcXHRyZXR1cm4geGZzX3pvbmVkX2J1ZmZlcmVkX3dyaXRlX2lvbWFwX2JlZ2luKGlub2RlLCBvZmZzZXQsXFxuLVxcdFxcdFxcdFxcdGNvdW50LCBmbGFncywgaW9tYXAsIHNyY21hcCk7XFxuK1xcdFxcdFxcdFxcdGNvdW50LCBmbGFncywgaW9tYXAsIHNyY21hcCwgaW9tYXBfZmxhZ3MpO1xcbiBcXG4gXFx0Lyogd2UgY2FuJ3QgdXNlIGRlbGF5ZWQgYWxsb2NhdGlvbnMgd2hlbiB1c2luZyBleHRlbnQgc2l6ZSBoaW50cyAqL1xcbiBcXHRpZiAoeGZzX2dldF9leHRzel9oaW50KGlwKSlcXG5AQCAtMjE5MSwxMiArMjE5OCwxNyBAQCB4ZnNfcmVhZF9pb21hcF9iZWdpbihcXG4gXFx0Ym9vbFxcdFxcdFxcdHNoYXJlZCA9IGZhbHNlO1xcbiBcXHR1bnNpZ25lZCBpbnRcXHRcXHRsb2NrbW9kZSA9IFhGU19JTE9DS19TSEFSRUQ7XFxuIFxcdHU2NFxcdFxcdFxcdHNlcTtcXG4rXFx0dW5zaWduZWQgaW50XFx0XFx0aW9tYXBfZmxhZ3MgPSAwO1xcbiBcXG4gXFx0QVNTRVJUKCEoZmxhZ3MgXFx1MDAyNiAoSU9NQVBfV1JJVEUgfCBJT01BUF9aRVJPKSkpO1xcbiBcXG4gXFx0aWYgKHhmc19pc19zaHV0ZG93bihtcCkpXFxuIFxcdFxcdHJldHVybiAtRUlPO1xcbiBcXG4rXFx0aWYgKGZzdmVyaXR5X2FjdGl2ZShpbm9kZSkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIChvZmZzZXQgXFx1MDAzZT0geGZzX2ZzdmVyaXR5X21ldGFkYXRhX29mZnNldChpcCkpKVxcbitcXHRcXHRpb21hcF9mbGFncyB8PSBJT01BUF9GX0ZTVkVSSVRZO1xcbitcXG4gXFx0ZXJyb3IgPSB4ZnNfaWxvY2tfZm9yX2lvbWFwKGlwLCBmbGFncywgXFx1MDAyNmxvY2ttb2RlKTtcXG4gXFx0aWYgKGVycm9yKVxcbiBcXHRcXHRyZXR1cm4gZXJyb3I7XFxuQEAgLTIyMTAsOCArMjIyMiw5IEBAIHhmc19yZWFkX2lvbWFwX2JlZ2luKFxcbiBcXHRpZiAoZXJyb3IpXFxuIFxcdFxcdHJldHVybiBlcnJvcjtcXG4gXFx0dHJhY2VfeGZzX2lvbWFwX2ZvdW5kKGlwLCBvZmZzZXQsIGxlbmd0aCwgWEZTX0RBVEFfRk9SSywgXFx1MDAyNmltYXApO1xcbi1cXHRyZXR1cm4geGZzX2JtYnRfdG9faW9tYXAoaXAsIGlvbWFwLCBcXHUwMDI2aW1hcCwgZmxhZ3MsXFxuLVxcdFxcdFxcdFxcdCBzaGFyZWQgPyBJT01BUF9GX1NIQVJFRCA6IDAsIHNlcSk7XFxuK1xcdGlvbWFwX2ZsYWdzIHw9IHNoYXJlZCA/IElPTUFQX0ZfU0hBUkVEIDogMDtcXG4rXFxuK1xcdHJldHVybiB4ZnNfYm1idF90b19pb21hcChpcCwgaW9tYXAsIFxcdTAwMjZpbWFwLCBmbGFncywgaW9tYXBfZmxhZ3MsIHNlcSk7XFxuIH1cXG4gXFxuIGNvbnN0IHN0cnVjdCBpb21hcF9vcHMgeGZzX3JlYWRfaW9tYXBfb3BzID0ge1xcbmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2lvcHMuYyBiL2ZzL3hmcy94ZnNfaW9wcy5jXFxuaW5kZXggNjMzOWY0OTU2ZWNiMzkuLjcwNjM3Y2RjYzI5OTcyIDEwMDY0NFxcbi0tLSBhL2ZzL3hmcy94ZnNfaW9wcy5jXFxuKysrIGIvZnMveGZzL3hmc19pb3BzLmNcXG5AQCAtMzUsNiArMzUsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc2VjdXJpdHkuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2l2ZXJzaW9uLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9maWVtYXAuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ZzdmVyaXR5LmhcXHUwMDNlXFxuIFxcbiAvKlxcbiAgKiBEaXJlY3RvcmllcyBoYXZlIGRpZmZlcmVudCBsb2NrIG9yZGVyIHcuci50LiBtbWFwX2xvY2sgY29tcGFyZWQgdG8gcmVndWxhclxcbkBAIC01ODAsNiArNTgxLDEwIEBAIHhmc19yZXBvcnRfZGlvYWxpZ24oXFxuIFxcdHN0cnVjdCBibG9ja19kZXZpY2VcXHQqYmRldiA9IHRhcmdldC1cXHUwMDNlYnRfYmRldjtcXG4gXFxuIFxcdHN0YXQtXFx1MDAzZXJlc3VsdF9tYXNrIHw9IFNUQVRYX0RJT0FMSUdOIHwgU1RBVFhfRElPX1JFQURfQUxJR047XFxuK1xcbitcXHRpZiAoZnN2ZXJpdHlfYWN0aXZlKFZGU19JKGlwKSkpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuIFxcdHN0YXQtXFx1MDAzZWRpb19tZW1fYWxpZ24gPSBiZGV2X2RtYV9hbGlnbm1lbnQoYmRldikgKyAxO1xcbiBcXG4gXFx0LypcXG5AQCAtMTM3MCw2ICsxMzc1LDggQEAgeGZzX2lub2RlX3Nob3VsZF9lbmFibGVfZGF4KFxcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcdGlmICgheGZzX2lub2RlX3N1cHBvcnRzX2RheChpcCkpXFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0aWYgKGlwLVxcdTAwM2VpX2RpZmxhZ3MyIFxcdTAwMjYgWEZTX0RJRkxBRzJfVkVSSVRZKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcdGlmICh4ZnNfaGFzX2RheF9hbHdheXMoaXAtXFx1MDAzZWlfbW91bnQpKVxcbiBcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gXFx0aWYgKGlwLVxcdTAwM2VpX2RpZmxhZ3MyIFxcdTAwMjYgWEZTX0RJRkxBRzJfREFYKVxcbkBAIC0xMzk4LDEyICsxNDA1LDE1IEBAIHhmc19kaWZsYWdzX3RvX2lmbGFncyhcXG4gXFx0XFx0ZmxhZ3MgfD0gU19OT0FUSU1FO1xcbiBcXHRpZiAoaW5pdCBcXHUwMDI2XFx1MDAyNiB4ZnNfaW5vZGVfc2hvdWxkX2VuYWJsZV9kYXgoaXApKVxcbiBcXHRcXHRmbGFncyB8PSBTX0RBWDtcXG4rXFx0aWYgKHhmbGFncyBcXHUwMDI2IEZTX1hGTEFHX1ZFUklUWSlcXG4rXFx0XFx0ZmxhZ3MgfD0gU19WRVJJVFk7XFxuIFxcbiBcXHQvKlxcbiBcXHQgKiBTX0RBWCBjYW4gb25seSBiZSBzZXQgZHVyaW5nIGlub2RlIGluaXRpYWxpemF0aW9uIGFuZCBpcyBuZXZlciBzZXQgYnlcXG4gXFx0ICogdGhlIFZGUywgc28gd2UgY2Fubm90IG1hc2sgb2ZmIFNfREFYIGluIGlfZmxhZ3MuXFxuIFxcdCAqL1xcbi1cXHRpbm9kZS1cXHUwMDNlaV9mbGFncyBcXHUwMDI2PSB+KFNfSU1NVVRBQkxFIHwgU19BUFBFTkQgfCBTX1NZTkMgfCBTX05PQVRJTUUpO1xcbitcXHRpbm9kZS1cXHUwMDNlaV9mbGFncyBcXHUwMDI2PVxcbitcXHRcXHR+KFNfSU1NVVRBQkxFIHwgU19BUFBFTkQgfCBTX1NZTkMgfCBTX05PQVRJTUUgfCBTX1ZFUklUWSk7XFxuIFxcdGlub2RlLVxcdTAwM2VpX2ZsYWdzIHw9IGZsYWdzO1xcbiB9XFxuIFxcbmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX21lc3NhZ2UuYyBiL2ZzL3hmcy94ZnNfbWVzc2FnZS5jXFxuaW5kZXggMDI0M2U1MDlhNDY4OTEuLjQ0YjEzZDQ2MDQ5YzYyIDEwMDY0NFxcbi0tLSBhL2ZzL3hmcy94ZnNfbWVzc2FnZS5jXFxuKysrIGIvZnMveGZzL3hmc19tZXNzYWdlLmNcXG5AQCAtMTQ5LDYgKzE0OSwxMCBAQCB4ZnNfd2Fybl9leHBlcmltZW50YWwoXFxuIFxcdFxcdFxcdC5vcHN0YXRlXFx0PSBYRlNfT1BTVEFURV9XQVJORURfTEFSUCxcXG4gXFx0XFx0XFx0Lm5hbWVcXHRcXHQ9IFxcXCJsb2dnZWQgZXh0ZW5kZWQgYXR0cmlidXRlc1xcXCIsXFxuIFxcdFxcdH0sXFxuK1xcdFxcdFtYRlNfRVhQRVJJTUVOVEFMX0ZTVkVSSVRZXSA9IHtcXG4rXFx0XFx0XFx0Lm9wc3RhdGVcXHQ9IFhGU19PUFNUQVRFX1dBUk5FRF9GU1ZFUklUWSxcXG4rXFx0XFx0XFx0Lm5hbWVcXHRcXHQ9IFxcXCJmc3Zlcml0eVxcXCIsXFxuK1xcdFxcdH0sXFxuIFxcdH07XFxuIFxcdEFTU0VSVChmZWF0IFxcdTAwM2U9IDAgXFx1MDAyNlxcdTAwMjYgZmVhdCBcXHUwMDNjIFhGU19FWFBFUklNRU5UQUxfTUFYKTtcXG4gXFx0QlVJTERfQlVHX09OKEFSUkFZX1NJWkUoZmVhdHVyZXMpICE9IFhGU19FWFBFUklNRU5UQUxfTUFYKTtcXG5kaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19tZXNzYWdlLmggYi9mcy94ZnMveGZzX21lc3NhZ2UuaFxcbmluZGV4IDgxMWI4ODVmNDFjMzVhLi4zNjRmY2M3ZTQyYjA4NCAxMDA2NDRcXG4tLS0gYS9mcy94ZnMveGZzX21lc3NhZ2UuaFxcbisrKyBiL2ZzL3hmcy94ZnNfbWVzc2FnZS5oXFxuQEAgLTkzLDYgKzkzLDcgQEAgdm9pZCB4ZnNfYnVmX2FsZXJ0X3JhdGVsaW1pdGVkKHN0cnVjdCB4ZnNfYnVmICpicCwgY29uc3QgY2hhciAqcmxtc2csXFxuIGVudW0geGZzX2V4cGVyaW1lbnRhbF9mZWF0IHtcXG4gXFx0WEZTX0VYUEVSSU1FTlRBTF9TSFJJTkssXFxuIFxcdFhGU19FWFBFUklNRU5UQUxfTEFSUCxcXG4rXFx0WEZTX0VYUEVSSU1FTlRBTF9GU1ZFUklUWSxcXG4gXFxuIFxcdFhGU19FWFBFUklNRU5UQUxfTUFYLFxcbiB9O1xcbmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX21vdW50LmggYi9mcy94ZnMveGZzX21vdW50LmhcXG5pbmRleCA2NmEwMmQxYjlhZDdhMS4uODc1YzliMGY4ZTk5MWYgMTAwNjQ0XFxuLS0tIGEvZnMveGZzL3hmc19tb3VudC5oXFxuKysrIGIvZnMveGZzL3hmc19tb3VudC5oXFxuQEAgLTM4OCw2ICszODgsNyBAQCB0eXBlZGVmIHN0cnVjdCB4ZnNfbW91bnQge1xcbiAjZGVmaW5lIFhGU19GRUFUX0VYQ0hBTkdFX1JBTkdFXFx0KDFVTEwgXFx1MDAzY1xcdTAwM2MgMjcpXFx0LyogZXhjaGFuZ2UgcmFuZ2UgKi9cXG4gI2RlZmluZSBYRlNfRkVBVF9NRVRBRElSXFx0KDFVTEwgXFx1MDAzY1xcdTAwM2MgMjgpXFx0LyogbWV0YWRhdGEgZGlyZWN0b3J5IHRyZWUgKi9cXG4gI2RlZmluZSBYRlNfRkVBVF9aT05FRFxcdFxcdCgxVUxMIFxcdTAwM2NcXHUwMDNjIDI5KVxcdC8qIHpvbmVkIFJUIGRldmljZSAqL1xcbisjZGVmaW5lIFhGU19GRUFUX1ZFUklUWVxcdFxcdCgxVUxMIFxcdTAwM2NcXHUwMDNjIDMwKVxcdC8qIGZzLXZlcml0eSAqL1xcbiBcXG4gLyogTW91bnQgZmVhdHVyZXMgKi9cXG4gI2RlZmluZSBYRlNfRkVBVF9OT0xJRkVUSU1FXFx0KDFVTEwgXFx1MDAzY1xcdTAwM2MgNDcpXFx0LyogZGlzYWJsZSBsaWZldGltZSBoaW50cyAqL1xcbkBAIC00NDUsNiArNDQ2LDcgQEAgX19YRlNfSEFTX0ZFQVQoZXhjaGFuZ2VfcmFuZ2UsIEVYQ0hBTkdFX1JBTkdFKVxcbiBfX1hGU19IQVNfRkVBVChtZXRhZGlyLCBNRVRBRElSKVxcbiBfX1hGU19IQVNfRkVBVCh6b25lZCwgWk9ORUQpXFxuIF9fWEZTX0hBU19GRUFUKG5vbGlmZXRpbWUsIE5PTElGRVRJTUUpXFxuK19fWEZTX0hBU19GRUFUKHZlcml0eSwgVkVSSVRZKVxcbiBcXG4gc3RhdGljIGlubGluZSBib29sIHhmc19oYXNfcnRncm91cHMoY29uc3Qgc3RydWN0IHhmc19tb3VudCAqbXApXFxuIHtcXG5AQCAtNTgyLDYgKzU4NCw4IEBAIF9fWEZTX0hBU19GRUFUKG5vdXVpZCwgTk9VVUlEKVxcbiAjZGVmaW5lIFhGU19PUFNUQVRFX1JFU1VNSU5HX1FVT1RBT05cXHQxOFxcbiAvKiAoWm9uZWQpIEdDIGlzIGluIHByb2dyZXNzICovXFxuICNkZWZpbmUgWEZTX09QU1RBVEVfWk9ORUdDX1JVTk5JTkdcXHQyMFxcbisvKiBLZXJuZWwgaGFzIGxvZ2dlZCBhIHdhcm5pbmcgYWJvdXQgZnN2ZXJpdHkgc3VwcG9ydCAqL1xcbisjZGVmaW5lIFhGU19PUFNUQVRFX1dBUk5FRF9GU1ZFUklUWVxcdDIxXFxuIFxcbiAjZGVmaW5lIF9fWEZTX0lTX09QU1RBVEUobmFtZSwgTkFNRSkgXFxcXFxcbiBzdGF0aWMgaW5saW5lIGJvb2wgeGZzX2lzXyAjIyBuYW1lIChzdHJ1Y3QgeGZzX21vdW50ICptcCkgXFxcXFxcbmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX3N1cGVyLmMgYi9mcy94ZnMveGZzX3N1cGVyLmNcXG5pbmRleCA4NTMxZDUyNmZjNDQwOS4uYTc3NzRkMmQ2YjIzZmMgMTAwNjQ0XFxuLS0tIGEvZnMveGZzL3hmc19zdXBlci5jXFxuKysrIGIvZnMveGZzL3hmc19zdXBlci5jXFxuQEAgLTMwLDYgKzMwLDcgQEBcXG4gI2luY2x1ZGUgXFxcInhmc19maWxlc3RyZWFtLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJ4ZnNfcXVvdGEuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInhmc19zeXNmcy5oXFxcIlxcbisjaW5jbHVkZSBcXFwieGZzX2ZzdmVyaXR5LmhcXFwiXFxuICNpbmNsdWRlIFxcXCJ4ZnNfb25kaXNrLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJ4ZnNfcm1hcF9pdGVtLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJ4ZnNfcmVmY291bnRfaXRlbS5oXFxcIlxcbkBAIC0xNjg5LDYgKzE2OTAsOSBAQCB4ZnNfZnNfZmlsbF9zdXBlcihcXG4gXFx0c2ItXFx1MDAzZXNfcXVvdGFfdHlwZXMgPSBRVFlQRV9NQVNLX1VTUiB8IFFUWVBFX01BU0tfR1JQIHwgUVRZUEVfTUFTS19QUko7XFxuICNlbmRpZlxcbiBcXHRzYi1cXHUwMDNlc19vcCA9IFxcdTAwMjZ4ZnNfc3VwZXJfb3BlcmF0aW9ucztcXG4rI2lmZGVmIENPTkZJR19GU19WRVJJVFlcXG4rXFx0c2ItXFx1MDAzZXNfdm9wID0gXFx1MDAyNnhmc19mc3Zlcml0eV9vcHM7XFxuKyNlbmRpZlxcbiBcXG4gXFx0LypcXG4gXFx0ICogRGVsYXkgbW91bnQgd29yayBpZiB0aGUgZGVidWcgaG9vayBpcyBzZXQuIFRoaXMgaXMgZGVidWdcXG5AQCAtMTk0MSw2ICsxOTQ1LDkgQEAgeGZzX2ZzX2ZpbGxfc3VwZXIoXFxuIFxcdGlmIChlcnJvcilcXG4gXFx0XFx0Z290byBvdXRfZmlsZXN0cmVhbV91bm1vdW50O1xcbiBcXG4rXFx0aWYgKHhmc19oYXNfdmVyaXR5KG1wKSlcXG4rXFx0XFx0eGZzX3dhcm5fZXhwZXJpbWVudGFsKG1wLCBYRlNfRVhQRVJJTUVOVEFMX0ZTVkVSSVRZKTtcXG4rXFxuIFxcdHJvb3QgPSBpZ3JhYihWRlNfSShtcC1cXHUwMDNlbV9yb290aXApKTtcXG4gXFx0aWYgKCFyb290KSB7XFxuIFxcdFxcdGVycm9yID0gLUVOT0VOVDtcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mc3Zlcml0eS5oIGIvaW5jbHVkZS9saW51eC9mc3Zlcml0eS5oXFxuaW5kZXggNmM0NjdkZWQ5NzUxZmMuLmY5NDMzMzMyYzI3NGJiIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvZnN2ZXJpdHkuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvZnN2ZXJpdHkuaFxcbkBAIC0xMjQsNiArMTI0LDggQEAgc3RydWN0IGZzdmVyaXR5X29wZXJhdGlvbnMge1xcbiBcXHQgKiBAYnVmOiB0aGUgTWVya2xlIHRyZWUgYmxvY2sgdG8gd3JpdGVcXG4gXFx0ICogQHBvczogdGhlIHBvc2l0aW9uIG9mIHRoZSBibG9jayBpbiB0aGUgTWVya2xlIHRyZWUgKGluIGJ5dGVzKVxcbiBcXHQgKiBAc2l6ZTogdGhlIE1lcmtsZSB0cmVlIGJsb2NrIHNpemUgKGluIGJ5dGVzKVxcbitcXHQgKiBAemVyb19kaWdlc3Q6IHRoZSBoYXNoIG9mIHRoZSBhbGwtemVyb2VzIGJsb2NrXFxuK1xcdCAqIEBkaWdlc3Rfc2l6ZTogc2l6ZSBvZiB6ZXJvX2RpZ2VzdCwgaW4gYnl0ZXNcXG4gXFx0ICpcXG4gXFx0ICogVGhpcyBpcyBvbmx5IGNhbGxlZCBiZXR3ZWVuIC1cXHUwMDNlYmVnaW5fZW5hYmxlX3Zlcml0eSgpIGFuZFxcbiBcXHQgKiAtXFx1MDAzZWVuZF9lbmFibGVfdmVyaXR5KCkuXFxuQEAgLTEzMSw3ICsxMzMsOSBAQCBzdHJ1Y3QgZnN2ZXJpdHlfb3BlcmF0aW9ucyB7XFxuIFxcdCAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAtZXJybm8gb24gZmFpbHVyZVxcbiBcXHQgKi9cXG4gXFx0aW50ICgqd3JpdGVfbWVya2xlX3RyZWVfYmxvY2spKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCB2b2lkICpidWYsXFxuLVxcdFxcdFxcdFxcdCAgICAgICB1NjQgcG9zLCB1bnNpZ25lZCBpbnQgc2l6ZSk7XFxuK1xcdFxcdFxcdFxcdCAgICAgICB1NjQgcG9zLCB1bnNpZ25lZCBpbnQgc2l6ZSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIGNvbnN0IHU4ICp6ZXJvX2RpZ2VzdCxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIHVuc2lnbmVkIGludCBkaWdlc3Rfc2l6ZSk7XFxuIH07XFxuIFxcbiAjaWZkZWYgQ09ORklHX0ZTX1ZFUklUWVxcbkBAIC0zMTcsMTAgKzMyMSwxNCBAQCBzdGF0aWMgaW5saW5lIGludCBmc3Zlcml0eV9maWxlX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitpbnQgZnN2ZXJpdHlfZW5zdXJlX3Zlcml0eV9pbmZvKHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xcbitcXG4gdm9pZCBmc3Zlcml0eV9jbGVhbnVwX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xcbiBcXG4gc3RydWN0IHBhZ2UgKmdlbmVyaWNfcmVhZF9tZXJrbGVfdHJlZV9wYWdlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHBnb2ZmX3QgaW5kZXgpO1xcbiB2b2lkIGdlbmVyaWNfcmVhZGFoZWFkX21lcmtsZV90cmVlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHBnb2ZmX3QgaW5kZXgsXFxuIFxcdFxcdFxcdFxcdCAgIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpO1xcbitpbnQgZnN2ZXJpdHlfcGFnZWNhY2hlX3JlYWQoc3RydWN0IGlub2RlICppbm9kZSwgdm9pZCAqYnVmLCBzaXplX3QgY291bnQsXFxuK1xcdFxcdFxcdCAgICBsb2ZmX3QgcG9zKTtcXG4gXFxuICNlbmRpZlxcdC8qIF9MSU5VWF9GU1ZFUklUWV9IICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDA0OjE5OjA3LjA2NjEwMDM1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NDUxNjkyMDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkZTX1ZFUklUWVwiLFxuICAgIFwiWEZTX0ZTXCIsXG4gICAgXCJYRlNfT05MSU5FX1NDUlVCXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwieGZzX2ZzdmVyaXR5X2JlZ2luX2VuYWJsZVwiLFxuICAgIFwieGZzX2ZzdmVyaXR5X2VuZF9lbmFibGVcIixcbiAgICBcInhmc19mc3Zlcml0eV9nZXRfZGVzY3JpcHRvclwiLFxuICAgIFwieGZzX2ZzdmVyaXR5X3dyaXRlX2Rlc2NyaXB0b3JcIixcbiAgICBcInhmc19mc3Zlcml0eV9kZWxldGVfbWV0YWRhdGFcIixcbiAgICBcInhmc19mc3Zlcml0eV9jYW5jZWxfdW53cml0dGVuXCIsXG4gICAgXCJ4ZnNfZnN2ZXJpdHlfcmVhZF9tZXJrbGVcIixcbiAgICBcInhmc19mc3Zlcml0eV9yZWFkYWhlYWRfbWVya2xlX3RyZWVcIixcbiAgICBcInhmc19mc3Zlcml0eV93cml0ZV9tZXJrbGVcIixcbiAgICBcImZzdmVyaXR5X3BhZ2VjYWNoZV9yZWFkXCIsXG4gICAgXCJ4Y2hrX2lub2RlX3NldHVwX3Zlcml0eVwiLFxuICAgIFwieGNoa19pbm9kZV92ZXJpdHlfYnJva2VuXCIsXG4gICAgXCJ4cmVwX2lub2RlX3Zlcml0eVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhpcyBwYXRjaCBzZXJpZXMgaW1wbGVtZW50cyBmcy12ZXJpdHkgc3VwcG9ydCBmb3IgdGhlIFhGUyBmaWxlc3lzdGVtLiBJdCBpbnRyb2R1Y2VzIG5ldyBtZXRhZGF0YSBoYW5kbGluZywgaW9jdGwgb3BlcmF0aW9ucywgYW5kIGludGVncmF0aW9uIHdpdGggWEZTJ3MgaW9tYXAgYW5kIHNjcnViIGluZnJhc3RydWN0dXJlLiBUaGlzIGlzIGEgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBhZGRpdGlvbiB0byBhIGNvcmUgZmlsZXN5c3RlbSBhbmQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIHRvIGVuc3VyZSBkYXRhIGludGVncml0eSBhbmQgcHJldmVudCB2dWxuZXJhYmlsaXRpZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNTgyMmQxY2IxZWQ4Mjg3OTk2ODFlNjM3NDcyMzdlMzY5NWMzODc0MVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgSnVsIDExIDA0OjE5OjA1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvYnRyZnMvdmVyaXR5LmMgYi9mcy9idHJmcy92ZXJpdHkuY1xuaW5kZXggOTgzMzY1YTczNTQxNjguLmJkNzllMzQzYWUyMzdmIDEwMDY0NFxuLS0tIGEvZnMvYnRyZnMvdmVyaXR5LmNcbisrKyBiL2ZzL2J0cmZzL3Zlcml0eS5jXG5AQCAtNzczLDExICs3NzMsMTUgQEAgc3RhdGljIHN0cnVjdCBwYWdlICpidHJmc19yZWFkX21lcmtsZV90cmVlX3BhZ2Uoc3RydWN0IGlub2RlICppbm9kZSxcbiAgKiBAYnVmOlx0TWVya2xlIHRyZWUgYmxvY2sgdG8gd3JpdGVcbiAgKiBAcG9zOlx0dGhlIHBvc2l0aW9uIG9mIHRoZSBibG9jayBpbiB0aGUgTWVya2xlIHRyZWUgKGluIGJ5dGVzKVxuICAqIEBzaXplOlx0dGhlIE1lcmtsZSB0cmVlIGJsb2NrIHNpemUgKGluIGJ5dGVzKVxuKyAqIEB6ZXJvX2RpZ2VzdDpcdHRoZSBoYXNoIG9mIHRoZSBhbGwtemVyb2VzIGJsb2NrXG4rICogQGRpZ2VzdF9zaXplOlx0c2l6ZSBvZiB6ZXJvX2RpZ2VzdCwgaW4gYnl0ZXNcbiAgKlxuICAqIFJldHVybnMgMCBvbiBzdWNjZXNzIG9yIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZVxuICAqL1xuIHN0YXRpYyBpbnQgYnRyZnNfd3JpdGVfbWVya2xlX3RyZWVfYmxvY2soc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IHZvaWQgKmJ1Zixcbi1cdFx0XHRcdFx0IHU2NCBwb3MsIHVuc2lnbmVkIGludCBzaXplKVxuK1x0XHRcdFx0XHQgdTY0IHBvcywgdW5zaWduZWQgaW50IHNpemUsXG4rXHRcdFx0XHRcdCBjb25zdCB1OCAqemVyb19kaWdlc3QsXG4rXHRcdFx0XHRcdCB1bnNpZ25lZCBpbnQgZGlnZXN0X3NpemUpXG4ge1xuIFx0c3RydWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5vZGUoZmlsZSk7XG4gXHRsb2ZmX3QgbWVya2xlX3BvcyA9IG1lcmtsZV9maWxlX3Bvcyhpbm9kZSk7XG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC92ZXJpdHkuYyBiL2ZzL2V4dDQvdmVyaXR5LmNcbmluZGV4IGNhNjFkYTUzZjMxM2ZhLi5hYzVjMTMzZjU1MjkyNSAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQvdmVyaXR5LmNcbisrKyBiL2ZzL2V4dDQvdmVyaXR5LmNcbkBAIC0zNCwzMiArMzQsNiBAQCBzdGF0aWMgaW5saW5lIGxvZmZfdCBleHQ0X3Zlcml0eV9tZXRhZGF0YV9wb3MoY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSlcbiBcdHJldHVybiByb3VuZF91cChpbm9kZS1cdTAwM2VpX3NpemUsIDY1NTM2KTtcbiB9XG4gXG4tLypcbi0gKiBSZWFkIHNvbWUgdmVyaXR5IG1ldGFkYXRhIGZyb20gdGhlIGlub2RlLiAgX192ZnNfcmVhZCgpIGNhbid0IGJlIHVzZWQgYmVjYXVzZVxuLSAqIHdlIG5lZWQgdG8gcmVhZCBiZXlvbmQgaV9zaXplLlxuLSAqL1xuLXN0YXRpYyBpbnQgcGFnZWNhY2hlX3JlYWQoc3RydWN0IGlub2RlICppbm9kZSwgdm9pZCAqYnVmLCBzaXplX3QgY291bnQsXG4tXHRcdFx0ICBsb2ZmX3QgcG9zKVxuLXtcbi1cdHdoaWxlIChjb3VudCkge1xuLVx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuLVx0XHRzaXplX3Qgbjtcbi1cbi1cdFx0Zm9saW8gPSByZWFkX21hcHBpbmdfZm9saW8oaW5vZGUtXHUwMDNlaV9tYXBwaW5nLCBwb3MgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQsXG4tXHRcdFx0XHRcdCBOVUxMKTtcbi1cdFx0aWYgKElTX0VSUihmb2xpbykpXG4tXHRcdFx0cmV0dXJuIFBUUl9FUlIoZm9saW8pO1xuLVxuLVx0XHRuID0gbWVtY3B5X2Zyb21fZmlsZV9mb2xpbyhidWYsIGZvbGlvLCBwb3MsIGNvdW50KTtcbi1cdFx0Zm9saW9fcHV0KGZvbGlvKTtcbi1cbi1cdFx0YnVmICs9IG47XG4tXHRcdHBvcyArPSBuO1xuLVx0XHRjb3VudCAtPSBuO1xuLVx0fVxuLVx0cmV0dXJuIDA7XG4tfVxuLVxuIC8qXG4gICogV3JpdGUgc29tZSB2ZXJpdHkgbWV0YWRhdGEgdG8gdGhlIGlub2RlIGZvciBGU19JT0NfRU5BQkxFX1ZFUklUWS5cbiAgKiBrZXJuZWxfd3JpdGUoKSBjYW4ndCBiZSB1c2VkIGJlY2F1c2UgdGhlIGZpbGUgZGVzY3JpcHRvciBpcyByZWFkb25seS5cbkBAIC0zMTEsOCArMjg1LDggQEAgc3RhdGljIGludCBleHQ0X2dldF92ZXJpdHlfZGVzY3JpcHRvcl9sb2NhdGlvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0XHRnb3RvIGJhZDtcbiBcdGRlc2Nfc2l6ZV9wb3MgLT0gc2l6ZW9mKGRlc2Nfc2l6ZV9kaXNrKTtcbiBcbi1cdGVyciA9IHBhZ2VjYWNoZV9yZWFkKGlub2RlLCBcdTAwMjZkZXNjX3NpemVfZGlzaywgc2l6ZW9mKGRlc2Nfc2l6ZV9kaXNrKSxcbi1cdFx0XHQgICAgIGRlc2Nfc2l6ZV9wb3MpO1xuK1x0ZXJyID0gZnN2ZXJpdHlfcGFnZWNhY2hlX3JlYWQoaW5vZGUsIFx1MDAyNmRlc2Nfc2l6ZV9kaXNrLFxuK1x0XHRcdFx0ICAgICAgc2l6ZW9mKGRlc2Nfc2l6ZV9kaXNrKSwgZGVzY19zaXplX3Bvcyk7XG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuIFx0ZGVzY19zaXplID0gbGUzMl90b19jcHUoZGVzY19zaXplX2Rpc2spO1xuQEAgLTM1Miw3ICszMjYsNyBAQCBzdGF0aWMgaW50IGV4dDRfZ2V0X3Zlcml0eV9kZXNjcmlwdG9yKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHZvaWQgKmJ1ZixcbiBcdGlmIChidWZfc2l6ZSkge1xuIFx0XHRpZiAoZGVzY19zaXplIFx1MDAzZSBidWZfc2l6ZSlcbiBcdFx0XHRyZXR1cm4gLUVSQU5HRTtcbi1cdFx0ZXJyID0gcGFnZWNhY2hlX3JlYWQoaW5vZGUsIGJ1ZiwgZGVzY19zaXplLCBkZXNjX3Bvcyk7XG4rXHRcdGVyciA9IGZzdmVyaXR5X3BhZ2VjYWNoZV9yZWFkKGlub2RlLCBidWYsIGRlc2Nfc2l6ZSwgZGVzY19wb3MpO1xuIFx0XHRpZiAoZXJyKVxuIFx0XHRcdHJldHVybiBlcnI7XG4gXHR9XG5AQCAtMzc0LDcgKzM0OCw5IEBAIHN0YXRpYyB2b2lkIGV4dDRfcmVhZGFoZWFkX21lcmtsZV90cmVlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHBnb2ZmX3QgaW5kZXgsXG4gfVxuIFxuIHN0YXRpYyBpbnQgZXh0NF93cml0ZV9tZXJrbGVfdHJlZV9ibG9jayhzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3Qgdm9pZCAqYnVmLFxuLVx0XHRcdFx0XHR1NjQgcG9zLCB1bnNpZ25lZCBpbnQgc2l6ZSlcbitcdFx0XHRcdFx0dTY0IHBvcywgdW5zaWduZWQgaW50IHNpemUsXG4rXHRcdFx0XHRcdGNvbnN0IHU4ICp6ZXJvX2RpZ2VzdCxcbitcdFx0XHRcdFx0dW5zaWduZWQgaW50IGRpZ2VzdF9zaXplKVxuIHtcbiBcdHBvcyArPSBleHQ0X3Zlcml0eV9tZXRhZGF0YV9wb3MoZmlsZV9pbm9kZShmaWxlKSk7XG4gXG5kaWZmIC0tZ2l0IGEvZnMvZjJmcy92ZXJpdHkuYyBiL2ZzL2YyZnMvdmVyaXR5LmNcbmluZGV4IDM5ZjQ4MjUxNTQ0NTJhLi5mM2E0NjE3NjU2ZGI5YiAxMDA2NDRcbi0tLSBhL2ZzL2YyZnMvdmVyaXR5LmNcbisrKyBiL2ZzL2YyZnMvdmVyaXR5LmNcbkBAIC0zNywzNCArMzcsNiBAQCBzdGF0aWMgaW5saW5lIGxvZmZfdCBmMmZzX3Zlcml0eV9tZXRhZGF0YV9wb3MoY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSlcbiBcdHJldHVybiByb3VuZF91cChpbm9kZS1cdTAwM2VpX3NpemUsIDY1NTM2KTtcbiB9XG4gXG4tLypcbi0gKiBSZWFkIHNvbWUgdmVyaXR5IG1ldGFkYXRhIGZyb20gdGhlIGlub2RlLiAgX192ZnNfcmVhZCgpIGNhbid0IGJlIHVzZWQgYmVjYXVzZVxuLSAqIHdlIG5lZWQgdG8gcmVhZCBiZXlvbmQgaV9zaXplLlxuLSAqL1xuLXN0YXRpYyBpbnQgcGFnZWNhY2hlX3JlYWQoc3RydWN0IGlub2RlICppbm9kZSwgdm9pZCAqYnVmLCBzaXplX3QgY291bnQsXG4tXHRcdFx0ICBsb2ZmX3QgcG9zKVxuLXtcbi1cdHdoaWxlIChjb3VudCkge1xuLVx0XHRzaXplX3QgbiA9IG1pbl90KHNpemVfdCwgY291bnQsXG4tXHRcdFx0XHQgUEFHRV9TSVpFIC0gb2Zmc2V0X2luX3BhZ2UocG9zKSk7XG4tXHRcdHN0cnVjdCBwYWdlICpwYWdlO1xuLVxuLVx0XHRwYWdlID0gcmVhZF9tYXBwaW5nX3BhZ2UoaW5vZGUtXHUwMDNlaV9tYXBwaW5nLCBwb3MgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQsXG4tXHRcdFx0XHRcdCBOVUxMKTtcbi1cdFx0aWYgKElTX0VSUihwYWdlKSlcbi1cdFx0XHRyZXR1cm4gUFRSX0VSUihwYWdlKTtcbi1cbi1cdFx0bWVtY3B5X2Zyb21fcGFnZShidWYsIHBhZ2UsIG9mZnNldF9pbl9wYWdlKHBvcyksIG4pO1xuLVxuLVx0XHRwdXRfcGFnZShwYWdlKTtcbi1cbi1cdFx0YnVmICs9IG47XG4tXHRcdHBvcyArPSBuO1xuLVx0XHRjb3VudCAtPSBuO1xuLVx0fVxuLVx0cmV0dXJuIDA7XG4tfVxuLVxuIC8qXG4gICogV3JpdGUgc29tZSB2ZXJpdHkgbWV0YWRhdGEgdG8gdGhlIGlub2RlIGZvciBGU19JT0NfRU5BQkxFX1ZFUklUWS5cbiAgKiBrZXJuZWxfd3JpdGUoKSBjYW4ndCBiZSB1c2VkIGJlY2F1c2UgdGhlIGZpbGUgZGVzY3JpcHRvciBpcyByZWFkb25seS5cbkBAIC0yNTAsNyArMjIyLDcgQEAgc3RhdGljIGludCBmMmZzX2dldF92ZXJpdHlfZGVzY3JpcHRvcihzdHJ1Y3QgaW5vZGUgKmlub2RlLCB2b2lkICpidWYsXG4gXHRpZiAoYnVmX3NpemUpIHtcbiBcdFx0aWYgKHNpemUgXHUwMDNlIGJ1Zl9zaXplKVxuIFx0XHRcdHJldHVybiAtRVJBTkdFO1xuLVx0XHRyZXMgPSBwYWdlY2FjaGVfcmVhZChpbm9kZSwgYnVmLCBzaXplLCBwb3MpO1xuK1x0XHRyZXMgPSBmc3Zlcml0eV9wYWdlY2FjaGVfcmVhZChpbm9kZSwgYnVmLCBzaXplLCBwb3MpO1xuIFx0XHRpZiAocmVzKVxuIFx0XHRcdHJldHVybiByZXM7XG4gXHR9XG5AQCAtMjcyLDcgKzI0NCw5IEBAIHN0YXRpYyB2b2lkIGYyZnNfcmVhZGFoZWFkX21lcmtsZV90cmVlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHBnb2ZmX3QgaW5kZXgsXG4gfVxuIFxuIHN0YXRpYyBpbnQgZjJmc193cml0ZV9tZXJrbGVfdHJlZV9ibG9jayhzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3Qgdm9pZCAqYnVmLFxuLVx0XHRcdFx0XHR1NjQgcG9zLCB1bnNpZ25lZCBpbnQgc2l6ZSlcbitcdFx0XHRcdFx0dTY0IHBvcywgdW5zaWduZWQgaW50IHNpemUsXG4rXHRcdFx0XHRcdGNvbnN0IHU4ICp6ZXJvX2RpZ2VzdCxcbitcdFx0XHRcdFx0dW5zaWduZWQgaW50IGRpZ2VzdF9zaXplKVxuIHtcbiBcdHBvcyArPSBmMmZzX3Zlcml0eV9tZXRhZGF0YV9wb3MoZmlsZV9pbm9kZShmaWxlKSk7XG4gXG5kaWZmIC0tZ2l0IGEvZnMvZmlsZV9hdHRyLmMgYi9mcy9maWxlX2F0dHIuY1xuaW5kZXggYmZiMDBkMjU2ZGQ1NjAuLjU0MjRlYzRlMzk0OTNmIDEwMDY0NFxuLS0tIGEvZnMvZmlsZV9hdHRyLmNcbisrKyBiL2ZzL2ZpbGVfYXR0ci5jXG5AQCAtMjQ2LDYgKzI0NiwxMSBAQCBzdGF0aWMgaW50IGZpbGVhdHRyX3NldF9wcmVwYXJlKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRpZiAoZmEtXHUwMDNlZnN4X2Nvd2V4dHNpemUgPT0gMClcbiBcdFx0ZmEtXHUwMDNlZnN4X3hmbGFncyBcdTAwMjY9IH5GU19YRkxBR19DT1dFWFRTSVpFO1xuIFxuK1x0LyogQ2FuIG5vdCBlbmFibGUgREFYIG9uIGZzdmVyaXR5IGZpbGUgKi9cbitcdGlmICgob2xkX21hLVx1MDAzZWZzeF94ZmxhZ3MgXHUwMDI2IEZTX1hGTEFHX1ZFUklUWSkgXHUwMDI2XHUwMDI2XG4rXHRcdFx0ZmEtXHUwMDNlZnN4X3hmbGFncyBcdTAwMjYgRlNfWEZMQUdfREFYKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbiBcdHJldHVybiAwO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9mcy92ZXJpdHkvZW5hYmxlLmMgYi9mcy92ZXJpdHkvZW5hYmxlLmNcbmluZGV4IDQyZGZlZDFjZTBjZTY2Li5hZDRmZjcxZDdkZDk1YiAxMDA2NDRcbi0tLSBhL2ZzL3Zlcml0eS9lbmFibGUuY1xuKysrIGIvZnMvdmVyaXR5L2VuYWJsZS5jXG5AQCAtNTAsNyArNTAsOSBAQCBzdGF0aWMgaW50IHdyaXRlX21lcmtsZV90cmVlX2Jsb2NrKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCB1OCAqYnVmLFxuIFx0aW50IGVycjtcbiBcbiBcdGVyciA9IGlub2RlLVx1MDAzZWlfc2ItXHUwMDNlc192b3AtXHUwMDNld3JpdGVfbWVya2xlX3RyZWVfYmxvY2soZmlsZSwgYnVmLCBwb3MsXG4tXHRcdFx0XHRcdFx0XHQgIHBhcmFtcy1cdTAwM2VibG9ja19zaXplKTtcbitcdFx0XHRcdFx0XHRcdCAgcGFyYW1zLVx1MDAzZWJsb2NrX3NpemUsXG4rXHRcdFx0XHRcdFx0XHQgIHBhcmFtcy1cdTAwM2V6ZXJvX2RpZ2VzdCxcbitcdFx0XHRcdFx0XHRcdCAgcGFyYW1zLVx1MDAzZWRpZ2VzdF9zaXplKTtcbiBcdGlmIChlcnIpXG4gXHRcdGZzdmVyaXR5X2Vycihpbm9kZSwgXCJFcnJvciAlZCB3cml0aW5nIE1lcmtsZSB0cmVlIGJsb2NrICVsdVwiLFxuIFx0XHRcdCAgICAgZXJyLCBpbmRleCk7XG5kaWZmIC0tZ2l0IGEvZnMvdmVyaXR5L29wZW4uYyBiL2ZzL3Zlcml0eS9vcGVuLmNcbmluZGV4IGQwYzU2YTdmYWEzYmIxLi44NzVlODg1MGNjYmFjZSAxMDA2NDRcbi0tLSBhL2ZzL3Zlcml0eS9vcGVuLmNcbisrKyBiL2ZzL3Zlcml0eS9vcGVuLmNcbkBAIC0zNDcsNyArMzQ3LDI0IEBAIGludCBmc3Zlcml0eV9nZXRfZGVzY3JpcHRvcihzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbnQgZW5zdXJlX3Zlcml0eV9pbmZvKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4rLyoqXG4rICogZnN2ZXJpdHlfZW5zdXJlX3Zlcml0eV9pbmZvKCkgLSBjYWNoZSB2ZXJpdHkgaW5mbyBpZiBpdCdzIG5vdCBhbHJlYWR5IGNhY2hlZFxuKyAqIEBpbm9kZTogdGhlIGlub2RlIGZvciB3aGljaCB2ZXJpdHkgaW5mbyBzaG91bGQgYmUgY2FjaGVkXG4rICpcbisgKiBFbnN1cmUgdGhpcyBpbm9kZSBoYXMgdmVyaXR5IGluZm8gYXR0YWNoZWQgdG8gaXQsIGl0J3MgYXNzdW1lZCB0aGUgaW5vZGVcbisgKiBhbHJlYWR5IGhhcyBmc3Zlcml0eSBlbmFibGVkLiBSZWFkIGZzdmVyaXR5IGRlc2NyaXB0b3IgYW5kIGNyZWF0ZXMgdmVyaXR5XG4rICogYmFzZWQgb24gdGhhdC5cbisgKlxuKyAqIFRoaXMgbmVlZHMgdG8gYmUgY2FsbGVkIGF0IGxlYXN0IG9uY2UgYmVmb3JlIGFueSBvZiB0aGUgaW5vZGUncyBkYXRhXG4rICogY2FuIGJlIHZlcmlmaWVkIChhbmQgdGh1cyByZWFkIGF0IGFsbCkgb3IgdGhlIGlub2RlJ3MgZnN2ZXJpdHkgZGlnZXN0XG4rICogcmV0cmlldmVkLiAgZnN2ZXJpdHlfZmlsZV9vcGVuKCkgY2FsbHMgdGhpcyBhbHJlYWR5LCB3aGljaCBoYW5kbGVzXG4rICogbm9ybWFsIGZpbGUgYWNjZXNzZXMuICBJZiBhIGZpbGVzeXN0ZW0gZG9lcyBhbnkgaW50ZXJuYWwgKGkuZS4gbm90XG4rICogYXNzb2NpYXRlZCB3aXRoIGEgZmlsZSBkZXNjcmlwdG9yKSByZWFkcyBvZiB0aGUgZmlsZSdzIGRhdGEgb3JcbisgKiBmc3Zlcml0eSBkaWdlc3QsIGl0IG11c3QgY2FsbCB0aGlzIGV4cGxpY2l0bHkgYmVmb3JlIGRvaW5nIHNvLlxuKyAqXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIC1lcnJubyBvbiBmYWlsdXJlXG4rICovXG4raW50IGZzdmVyaXR5X2Vuc3VyZV92ZXJpdHlfaW5mbyhzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIHtcbiBcdHN0cnVjdCBmc3Zlcml0eV9pbmZvICp2aSA9IGZzdmVyaXR5X2dldF9pbmZvKGlub2RlKSwgKmZvdW5kO1xuIFx0c3RydWN0IGZzdmVyaXR5X2Rlc2NyaXB0b3IgKmRlc2M7XG5AQCAtMzgzLDEyICs0MDAsMTMgQEAgc3RhdGljIGludCBlbnN1cmVfdmVyaXR5X2luZm8oc3RydWN0IGlub2RlICppbm9kZSlcbiBcdGtmcmVlKGRlc2MpO1xuIFx0cmV0dXJuIGVycjtcbiB9XG4rRVhQT1JUX1NZTUJPTF9HUEwoZnN2ZXJpdHlfZW5zdXJlX3Zlcml0eV9pbmZvKTtcbiBcbiBpbnQgX19mc3Zlcml0eV9maWxlX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApXG4ge1xuIFx0aWYgKGZpbHAtXHUwMDNlZl9tb2RlIFx1MDAyNiBGTU9ERV9XUklURSlcbiBcdFx0cmV0dXJuIC1FUEVSTTtcbi1cdHJldHVybiBlbnN1cmVfdmVyaXR5X2luZm8oaW5vZGUpO1xuK1x0cmV0dXJuIGZzdmVyaXR5X2Vuc3VyZV92ZXJpdHlfaW5mbyhpbm9kZSk7XG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKF9fZnN2ZXJpdHlfZmlsZV9vcGVuKTtcbiBcbmRpZmYgLS1naXQgYS9mcy92ZXJpdHkvcGFnZWNhY2hlLmMgYi9mcy92ZXJpdHkvcGFnZWNhY2hlLmNcbmluZGV4IDk5ZjVmNTNlZWE5ODVmLi4yNzBhYmQ2NTJlNDhjNiAxMDA2NDRcbi0tLSBhL2ZzL3Zlcml0eS9wYWdlY2FjaGUuY1xuKysrIGIvZnMvdmVyaXR5L3BhZ2VjYWNoZS5jXG5AQCAtNjgsMTMgKzY4LDY0IEBAIEVYUE9SVF9TWU1CT0xfR1BMKGdlbmVyaWNfcmVhZGFoZWFkX21lcmtsZV90cmVlKTtcbiB2b2lkIGZzdmVyaXR5X2ZpbGxfemVyb2hhc2goc3RydWN0IGZvbGlvICpmb2xpbywgc2l6ZV90IG9mZnNldCwgc2l6ZV90IGxlbixcbiBcdFx0XHQgICAgICBzdHJ1Y3QgZnN2ZXJpdHlfaW5mbyAqdmkpXG4ge1xuLVx0c2l6ZV90IG9mZiA9IG9mZnNldDtcbitcdHZvaWQgKnZhZGRyO1xuK1x0dm9pZCAqdG87XG4rXHRzaXplX3QgY2h1bms7XG4gXG4gXHRXQVJOX09OX09OQ0UoIUlTX0FMSUdORUQob2Zmc2V0LCB2aS1cdTAwM2V0cmVlX3BhcmFtcy5kaWdlc3Rfc2l6ZSkpO1xuIFx0V0FSTl9PTl9PTkNFKCFJU19BTElHTkVEKGxlbiwgdmktXHUwMDNldHJlZV9wYXJhbXMuZGlnZXN0X3NpemUpKTtcbitcdFdBUk5fT05fT05DRShvZmZzZXQgKyBsZW4gXHUwMDNlIGZvbGlvX3NpemUoZm9saW8pKTtcbiBcbi1cdGZvciAoOyBvZmYgXHUwMDNjIChvZmZzZXQgKyBsZW4pOyBvZmYgKz0gdmktXHUwMDNldHJlZV9wYXJhbXMuZGlnZXN0X3NpemUpXG4tXHRcdG1lbWNweV90b19mb2xpbyhmb2xpbywgb2ZmLCB2aS1cdTAwM2V0cmVlX3BhcmFtcy56ZXJvX2RpZ2VzdCxcbitcdGRvIHtcbitcdFx0dmFkZHIgPSBrbWFwX2xvY2FsX2ZvbGlvKGZvbGlvLCBvZmZzZXQpO1xuK1x0XHRjaHVuayA9IGxlbjtcbitcdFx0dG8gPSB2YWRkcjtcbitcbitcdFx0aWYgKGZvbGlvX3Rlc3RfcGFydGlhbF9rbWFwKGZvbGlvKSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIGNodW5rIFx1MDAzZSBQQUdFX1NJWkUgLSBvZmZzZXRfaW5fcGFnZShvZmZzZXQpKVxuK1x0XHRcdGNodW5rID0gUEFHRV9TSVpFIC0gb2Zmc2V0X2luX3BhZ2Uob2Zmc2V0KTtcbitcdFx0Zm9yICg7IHRvIFx1MDAzYyAodmFkZHIgKyBjaHVuayk7IHRvICs9IHZpLVx1MDAzZXRyZWVfcGFyYW1zLmRpZ2VzdF9zaXplKVxuK1x0XHRcdG1lbWNweSh0bywgdmktXHUwMDNldHJlZV9wYXJhbXMuemVyb19kaWdlc3QsXG4gXHRcdFx0XHR2aS1cdTAwM2V0cmVlX3BhcmFtcy5kaWdlc3Rfc2l6ZSk7XG4rXHRcdGt1bm1hcF9sb2NhbCh2YWRkcik7XG4rXG4rXHRcdG9mZnNldCArPSBjaHVuaztcbitcdFx0bGVuIC09IGNodW5rO1xuK1x0fSB3aGlsZSAobGVuIFx1MDAzZSAwKTtcbitcbitcdGZsdXNoX2RjYWNoZV9mb2xpbyhmb2xpbyk7XG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKGZzdmVyaXR5X2ZpbGxfemVyb2hhc2gpO1xuK1xuKy8qKlxuKyAqIGZzdmVyaXR5X3BhZ2VjYWNoZV9yZWFkKCkgLSByZWFkIHBhZ2UgYW5kIGNvcHkgZGF0YSB0byBidWZmZXJcbisgKiBAaW5vZGU6XHRjb3B5IGZyb20gdGhpcyBpbm9kZSdzIGFkZHJlc3Mgc3BhY2VcbisgKiBAYnVmOlx0YnVmZmVyIHRvIGNvcHkgdG9cbisgKiBAY291bnQ6XHRudW1iZXIgb2YgYnl0ZXMgdG8gY29weVxuKyAqIEBwb3M6XHRwb3NpdGlvbiBvZiB0aGUgZm9saW8gdG8gY29weSBmcm9tXG4rICpcbisgKiBSZWFkIHNvbWUgdmVyaXR5IG1ldGFkYXRhIGZyb20gdGhlIGlub2RlLiAgX192ZnNfcmVhZCgpIGNhbid0IGJlIHVzZWQgYmVjYXVzZVxuKyAqIHdlIG5lZWQgdG8gcmVhZCBiZXlvbmQgaV9zaXplLlxuKyAqL1xuK2ludCBmc3Zlcml0eV9wYWdlY2FjaGVfcmVhZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCB2b2lkICpidWYsIHNpemVfdCBjb3VudCxcbitcdFx0XHQgIGxvZmZfdCBwb3MpXG4re1xuK1x0d2hpbGUgKGNvdW50KSB7XG4rXHRcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4rXHRcdHNpemVfdCBuO1xuK1xuK1x0XHRmb2xpbyA9IHJlYWRfbWFwcGluZ19mb2xpbyhpbm9kZS1cdTAwM2VpX21hcHBpbmcsIHBvcyBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCxcbitcdFx0XHRcdFx0IE5VTEwpO1xuK1x0XHRpZiAoSVNfRVJSKGZvbGlvKSlcbitcdFx0XHRyZXR1cm4gUFRSX0VSUihmb2xpbyk7XG4rXG4rXHRcdG4gPSBtZW1jcHlfZnJvbV9maWxlX2ZvbGlvKGJ1ZiwgZm9saW8sIHBvcywgY291bnQpO1xuK1x0XHRmb2xpb19wdXQoZm9saW8pO1xuK1xuK1x0XHRidWYgKz0gbjtcbitcdFx0cG9zICs9IG47XG4rXHRcdGNvdW50IC09IG47XG4rXHR9XG4rXHRyZXR1cm4gMDtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwoZnN2ZXJpdHlfcGFnZWNhY2hlX3JlYWQpO1xuZGlmZiAtLWdpdCBhL2ZzL3Zlcml0eS92ZXJpZnkuYyBiL2ZzL3Zlcml0eS92ZXJpZnkuY1xuaW5kZXggNDAwNGExZDQyODc1MWYuLmRiOGMzNTAyMzRiYjcxIDEwMDY0NFxuLS0tIGEvZnMvdmVyaXR5L3ZlcmlmeS5jXG4rKysgYi9mcy92ZXJpdHkvdmVyaWZ5LmNcbkBAIC05LDYgKzksNyBAQFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Jpby5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZXhwb3J0LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9mc2Vycm9yLmhcdTAwM2VcbiBcbiAjZGVmaW5lIEZTX1ZFUklUWV9NQVhfUEVORElOR19CTE9DS1MgMlxuIFxuQEAgLTIwNSw2ICsyMDYsOCBAQCBzdGF0aWMgYm9vbCB2ZXJpZnlfZGF0YV9ibG9jayhzdHJ1Y3QgZnN2ZXJpdHlfaW5mbyAqdmksXG4gXHRcdGlmIChtZW1jaHJfaW52KGRibG9jay1cdTAwM2VkYXRhLCAwLCBwYXJhbXMtXHUwMDNlYmxvY2tfc2l6ZSkpIHtcbiBcdFx0XHRmc3Zlcml0eV9lcnIoaW5vZGUsXG4gXHRcdFx0XHQgICAgIFwiRklMRSBDT1JSVVBURUQhICBEYXRhIHBhc3QgRU9GIGlzIG5vdCB6ZXJvZWRcIik7XG4rXHRcdFx0ZnNlcnJvcl9yZXBvcnRfZGF0YV9sb3N0KGlub2RlLCBkYXRhX3BvcyxcbitcdFx0XHRcdFx0XHQgcGFyYW1zLVx1MDAzZWJsb2NrX3NpemUsIEdGUF9OT0ZTKTtcbiBcdFx0XHRyZXR1cm4gZmFsc2U7XG4gXHRcdH1cbiBcdFx0cmV0dXJuIHRydWU7XG5AQCAtMzEyLDYgKzMxNSw3IEBAIHN0YXRpYyBib29sIHZlcmlmeV9kYXRhX2Jsb2NrKHN0cnVjdCBmc3Zlcml0eV9pbmZvICp2aSxcbiBcdFx0ZGF0YV9wb3MsIGxldmVsIC0gMSwgcGFyYW1zLVx1MDAzZWhhc2hfYWxnLVx1MDAzZW5hbWUsIGhzaXplLCB3YW50X2hhc2gsXG4gXHRcdHBhcmFtcy1cdTAwM2VoYXNoX2FsZy1cdTAwM2VuYW1lLCBoc2l6ZSxcbiBcdFx0bGV2ZWwgPT0gMCA/IGRibG9jay1cdTAwM2VyZWFsX2hhc2ggOiByZWFsX2hhc2gpO1xuK1x0ZnNlcnJvcl9yZXBvcnRfZGF0YV9sb3N0KGlub2RlLCBkYXRhX3BvcywgcGFyYW1zLVx1MDAzZWJsb2NrX3NpemUsIEdGUF9OT0ZTKTtcbiBlcnJvcjpcbiBcdGZvciAoOyBsZXZlbCBcdTAwM2UgMDsgbGV2ZWwtLSkge1xuIFx0XHRrdW5tYXBfbG9jYWwoaGJsb2Nrc1tsZXZlbCAtIDFdLmFkZHIpO1xuZGlmZiAtLWdpdCBhL2ZzL3hmcy9NYWtlZmlsZSBiL2ZzL3hmcy9NYWtlZmlsZVxuaW5kZXggOWY3MTMzZTAyNTc2OGQuLjM4YjdmNTFlNWQ4NDA1IDEwMDY0NFxuLS0tIGEvZnMveGZzL01ha2VmaWxlXG4rKysgYi9mcy94ZnMvTWFrZWZpbGVcbkBAIC0xNDksNiArMTQ5LDcgQEAgeGZzLSQoQ09ORklHX1hGU19QT1NJWF9BQ0wpXHQrPSB4ZnNfYWNsLm9cbiB4ZnMtJChDT05GSUdfU1lTQ1RMKVx0XHQrPSB4ZnNfc3lzY3RsLm9cbiB4ZnMtJChDT05GSUdfQ09NUEFUKVx0XHQrPSB4ZnNfaW9jdGwzMi5vXG4geGZzLSQoQ09ORklHX0VYUE9SVEZTX0JMT0NLX09QUylcdCs9IHhmc19wbmZzLm9cbit4ZnMtJChDT05GSUdfRlNfVkVSSVRZKVx0XHQrPSB4ZnNfZnN2ZXJpdHkub1xuIFxuICMgbm90aWZ5IGZhaWx1cmVcbiBpZmVxICgkKENPTkZJR19NRU1PUllfRkFJTFVSRSkseSlcbmRpZmYgLS1naXQgYS9mcy94ZnMvbGlieGZzL3hmc19ibWFwLmMgYi9mcy94ZnMvbGlieGZzL3hmc19ibWFwLmNcbmluZGV4IGQ2NGRlZmVkYTY0NWVkLi5jYzQ4ZjZlMjBlODAwMCAxMDA2NDRcbi0tLSBhL2ZzL3hmcy9saWJ4ZnMveGZzX2JtYXAuY1xuKysrIGIvZnMveGZzL2xpYnhmcy94ZnNfYm1hcC5jXG5AQCAtNDEsNiArNDEsOCBAQFxuICNpbmNsdWRlIFwieGZzX2lub2RlX3V0aWwuaFwiXG4gI2luY2x1ZGUgXCJ4ZnNfcnRncm91cC5oXCJcbiAjaW5jbHVkZSBcInhmc196b25lX2FsbG9jLmhcIlxuKyNpbmNsdWRlIFwieGZzX2ZzdmVyaXR5LmhcIlxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZzdmVyaXR5LmhcdTAwM2VcbiBcbiBzdHJ1Y3Qga21lbV9jYWNoZVx0XHQqeGZzX2JtYXBfaW50ZW50X2NhY2hlO1xuIFxuQEAgLTQ0MDIsNiArNDQwNCwxMCBAQCB4ZnNfYm1hcGlfY29udmVydF9vbmVfZGVsYWxsb2MoXG4gXHQgKiB0aGUgZXh0ZW50LiAgSnVzdCByZXR1cm4gdGhlIHJlYWwgZXh0ZW50IGF0IHRoaXMgb2Zmc2V0LlxuIFx0ICovXG4gXHRpZiAoIWlzbnVsbHN0YXJ0YmxvY2soYm1hLmdvdC5icl9zdGFydGJsb2NrKSkge1xuK1x0XHRpZiAoeGZzX2lmbGFnc190ZXN0KGlwLCBYRlNfVkVSSVRZX0NPTlNUUlVDVElPTikgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICBYRlNfRlNCX1RPX0IobXAsIGJtYS5nb3QuYnJfc3RhcnRvZmYpIFx1MDAzZT1cbitcdFx0XHQgICAgeGZzX2ZzdmVyaXR5X21ldGFkYXRhX29mZnNldChpcCkpXG4rXHRcdFx0ZmxhZ3MgfD0gSU9NQVBfRl9GU1ZFUklUWTtcbiBcdFx0eGZzX2JtYnRfdG9faW9tYXAoaXAsIGlvbWFwLCBcdTAwMjZibWEuZ290LCAwLCBmbGFncyxcbiBcdFx0XHRcdHhmc19pb21hcF9pbm9kZV9zZXF1ZW5jZShpcCwgZmxhZ3MpKTtcbiBcdFx0aWYgKHNlcSlcbkBAIC00NDQ5LDYgKzQ0NTUsMTEgQEAgeGZzX2JtYXBpX2NvbnZlcnRfb25lX2RlbGFsbG9jKFxuIFx0WEZTX1NUQVRTX0FERChtcCwgeHNfeHN0cmF0X2J5dGVzLCBYRlNfRlNCX1RPX0IobXAsIGJtYS5sZW5ndGgpKTtcbiBcdFhGU19TVEFUU19JTkMobXAsIHhzX3hzdHJhdF9xdWljayk7XG4gXG4rXHRpZiAoeGZzX2lmbGFnc190ZXN0KGlwLCBYRlNfVkVSSVRZX0NPTlNUUlVDVElPTikgXHUwMDI2XHUwMDI2XG4rXHQgICAgWEZTX0ZTQl9UT19CKG1wLCBibWEuZ290LmJyX3N0YXJ0b2ZmKSBcdTAwM2U9XG4rXHRcdCAgICB4ZnNfZnN2ZXJpdHlfbWV0YWRhdGFfb2Zmc2V0KGlwKSlcbitcdFx0ZmxhZ3MgfD0gSU9NQVBfRl9GU1ZFUklUWTtcbitcbiBcdEFTU0VSVCghaXNudWxsc3RhcnRibG9jayhibWEuZ290LmJyX3N0YXJ0YmxvY2spKTtcbiBcdHhmc19ibWJ0X3RvX2lvbWFwKGlwLCBpb21hcCwgXHUwMDI2Ym1hLmdvdCwgMCwgZmxhZ3MsXG4gXHRcdFx0XHR4ZnNfaW9tYXBfaW5vZGVfc2VxdWVuY2UoaXAsIGZsYWdzKSk7XG5kaWZmIC0tZ2l0IGEvZnMveGZzL2xpYnhmcy94ZnNfZm9ybWF0LmggYi9mcy94ZnMvbGlieGZzL3hmc19mb3JtYXQuaFxuaW5kZXggZGQwZWQwNDZmYmU5YzkuLjI4NzhiYzljYjY1NjRlIDEwMDY0NFxuLS0tIGEvZnMveGZzL2xpYnhmcy94ZnNfZm9ybWF0LmhcbisrKyBiL2ZzL3hmcy9saWJ4ZnMveGZzX2Zvcm1hdC5oXG5AQCAtMzc0LDExICszNzQsMTMgQEAgeGZzX3NiX2hhc19jb21wYXRfZmVhdHVyZShcbiAjZGVmaW5lIFhGU19TQl9GRUFUX1JPX0NPTVBBVF9STUFQQlQgICAoMSBcdTAwM2NcdTAwM2MgMSlcdFx0LyogcmV2ZXJzZSBtYXAgYnRyZWUgKi9cbiAjZGVmaW5lIFhGU19TQl9GRUFUX1JPX0NPTVBBVF9SRUZMSU5LICAoMSBcdTAwM2NcdTAwM2MgMilcdFx0LyogcmVmbGlua2VkIGZpbGVzICovXG4gI2RlZmluZSBYRlNfU0JfRkVBVF9ST19DT01QQVRfSU5PQlRDTlQgKDEgXHUwMDNjXHUwMDNjIDMpXHRcdC8qIGlub2J0IGJsb2NrIGNvdW50cyAqL1xuKyNkZWZpbmUgWEZTX1NCX0ZFQVRfUk9fQ09NUEFUX1ZFUklUWSAgICgxIFx1MDAzY1x1MDAzYyA0KVx0XHQvKiBmcy12ZXJpdHkgKi9cbiAjZGVmaW5lIFhGU19TQl9GRUFUX1JPX0NPTVBBVF9BTEwgXFxcbiBcdFx0KFhGU19TQl9GRUFUX1JPX0NPTVBBVF9GSU5PQlQgfCBcXFxuIFx0XHQgWEZTX1NCX0ZFQVRfUk9fQ09NUEFUX1JNQVBCVCB8IFxcXG4tXHRcdCBYRlNfU0JfRkVBVF9ST19DT01QQVRfUkVGTElOS3wgXFxcbi1cdFx0IFhGU19TQl9GRUFUX1JPX0NPTVBBVF9JTk9CVENOVClcbitcdFx0IFhGU19TQl9GRUFUX1JPX0NPTVBBVF9SRUZMSU5LIHwgXFxcbitcdFx0IFhGU19TQl9GRUFUX1JPX0NPTVBBVF9JTk9CVENOVCB8IFxcXG4rXHRcdCBYRlNfU0JfRkVBVF9ST19DT01QQVRfVkVSSVRZKVxuICNkZWZpbmUgWEZTX1NCX0ZFQVRfUk9fQ09NUEFUX1VOS05PV05cdH5YRlNfU0JfRkVBVF9ST19DT01QQVRfQUxMXG4gc3RhdGljIGlubGluZSBib29sXG4geGZzX3NiX2hhc19yb19jb21wYXRfZmVhdHVyZShcbkBAIC0xMjMwLDE2ICsxMjMyLDIxIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB4ZnNfZGlub2RlX3B1dF9yZGV2KHN0cnVjdCB4ZnNfZGlub2RlICpkaXAsIHhmc19kZXZfdCByZGV2KVxuICAqL1xuICNkZWZpbmUgWEZTX0RJRkxBRzJfTUVUQURBVEFfQklUXHQ1XG4gXG4rLyogaW5vZGVzIHNlYWxlZCB3aXRoIGZzLXZlcml0eSAqL1xuKyNkZWZpbmUgWEZTX0RJRkxBRzJfVkVSSVRZX0JJVFx0XHQ2XG4rXG4gI2RlZmluZSBYRlNfRElGTEFHMl9EQVhcdFx0KDFVTEwgXHUwMDNjXHUwMDNjIFhGU19ESUZMQUcyX0RBWF9CSVQpXG4gI2RlZmluZSBYRlNfRElGTEFHMl9SRUZMSU5LXHQoMVVMTCBcdTAwM2NcdTAwM2MgWEZTX0RJRkxBRzJfUkVGTElOS19CSVQpXG4gI2RlZmluZSBYRlNfRElGTEFHMl9DT1dFWFRTSVpFXHQoMVVMTCBcdTAwM2NcdTAwM2MgWEZTX0RJRkxBRzJfQ09XRVhUU0laRV9CSVQpXG4gI2RlZmluZSBYRlNfRElGTEFHMl9CSUdUSU1FXHQoMVVMTCBcdTAwM2NcdTAwM2MgWEZTX0RJRkxBRzJfQklHVElNRV9CSVQpXG4gI2RlZmluZSBYRlNfRElGTEFHMl9OUkVYVDY0XHQoMVVMTCBcdTAwM2NcdTAwM2MgWEZTX0RJRkxBRzJfTlJFWFQ2NF9CSVQpXG4gI2RlZmluZSBYRlNfRElGTEFHMl9NRVRBREFUQVx0KDFVTEwgXHUwMDNjXHUwMDNjIFhGU19ESUZMQUcyX01FVEFEQVRBX0JJVClcbisjZGVmaW5lIFhGU19ESUZMQUcyX1ZFUklUWVx0KDFVTEwgXHUwMDNjXHUwMDNjIFhGU19ESUZMQUcyX1ZFUklUWV9CSVQpXG4gXG4gI2RlZmluZSBYRlNfRElGTEFHMl9BTlkgXFxcbiBcdChYRlNfRElGTEFHMl9EQVggfCBYRlNfRElGTEFHMl9SRUZMSU5LIHwgWEZTX0RJRkxBRzJfQ09XRVhUU0laRSB8IFxcXG4tXHQgWEZTX0RJRkxBRzJfQklHVElNRSB8IFhGU19ESUZMQUcyX05SRVhUNjQgfCBYRlNfRElGTEFHMl9NRVRBREFUQSlcbitcdCBYRlNfRElGTEFHMl9CSUdUSU1FIHwgWEZTX0RJRkxBRzJfTlJFWFQ2NCB8IFhGU19ESUZMQUcyX01FVEFEQVRBIHwgXFxcbitcdCBYRlNfRElGTEFHMl9WRVJJVFkpXG4gXG4gc3RhdGljIGlubGluZSBib29sIHhmc19kaW5vZGVfaGFzX2JpZ3RpbWUoY29uc3Qgc3RydWN0IHhmc19kaW5vZGUgKmRpcClcbiB7XG5AQCAtMjAyNyw0ICsyMDM0LDI2IEBAIHN0cnVjdCB4ZnNfYWNsIHtcbiAjZGVmaW5lIFNHSV9BQ0xfRklMRV9TSVpFXHQoc2l6ZW9mKFNHSV9BQ0xfRklMRSktMSlcbiAjZGVmaW5lIFNHSV9BQ0xfREVGQVVMVF9TSVpFXHQoc2l6ZW9mKFNHSV9BQ0xfREVGQVVMVCktMSlcbiBcbisvKlxuKyAqIEF0IG1heGltdW0gb2YgOCBsZXZlbHMgd2l0aCAxMjggaGFzaGVzIHBlciBibG9jayAoMzIgYnl0ZXMgU0hBLTI1NikgbWF4aW11bVxuKyAqIHRyZWUgc2l6ZSBpcyAoKDEyOF44IOKIkiAxKS8oMTI4IOKIkiAxKSkgPSA1NjcqMTBeMTIgYmxvY2tzLiBUaGlzIHNob3VsZCBmaXQgaW5cbisgKiA1MyBiaXRzIGFkZHJlc3Mgc3BhY2UuXG4rICpcbisgKiBBdCB0aGlzIE1lcmtsZSB0cmVlIHNpemUgd2UgY2FuIGNvdmVyIDI5NUVCIGxhcmdlIGZpbGUuIFRoaXMgaXMgbXVjaCBsYXJnZXJcbisgKiB0aGFuIHRoZSBjdXJyZW50bHkgc3VwcG9ydGVkIGZpbGUgc2l6ZS5cbisgKlxuKyAqIEZvciBzaGE1MTIgdGhlIGxhcmdlc3QgZmlsZSB3ZSBjYW4gY292ZXIgZW5kcyBhdCAxIFx1MDAzY1x1MDAzYyA1MCBvZmZzZXQsIHRoaXMgaXMgYWxzb1xuKyAqIGdvb2QuXG4rICovXG4rI2RlZmluZSBYRlNfRlNWRVJJVFlfTEFSR0VTVF9GSUxFXHQoKGxvZmZfdCkxVUxMIFx1MDAzY1x1MDAzYyA1MylcbitcbisvKlxuKyAqIEFsaWdubWVudCBvZiB0aGUgZnN2ZXJpdHkgbWV0YWRhdGEgcGxhY2VtZW50LiBUaGlzIGlzIGxhcmdlc3Qgc3VwcG9ydGVkIFBBR0VcbisgKiBTSVpFIGZvciBmc3Zlcml0eS4gVGhpcyBpcyB1c2VkIHRvIHNwYWNlIG91dCBkYXRhIGFuZCBtZXRhZGF0YSBpbiBwYWdlIGNhY2hlLlxuKyAqIFRoZSBzcGFjaW5nIGlzIG5lY2Vzc2FyeSBmb3Igbm9uLWV4cG9zdXJlIG9mIG1ldGFkYXRhIHRvIHVzZXJzcGFjZSBhbmRcbisgKiBjb3JyZWN0IG1lcmtsZSB0cmVlIHN5bmV0aGVzaXMgaW4gdGhlIGlvbWFwLlxuKyAqL1xuKyNkZWZpbmUgWEZTX0ZTVkVSSVRZX1NUQVJUX0FMSUdOXHQoNjU1MzYpXG4rXG4rXG4gI2VuZGlmIC8qIF9fWEZTX0ZPUk1BVF9IX18gKi9cbmRpZmYgLS1naXQgYS9mcy94ZnMvbGlieGZzL3hmc19mcy5oIGIvZnMveGZzL2xpYnhmcy94ZnNfZnMuaFxuaW5kZXggMTg1ZjA5ZjMyN2MwMGMuLjg0ZDYyYjc1MDZhOWFkIDEwMDY0NFxuLS0tIGEvZnMveGZzL2xpYnhmcy94ZnNfZnMuaFxuKysrIGIvZnMveGZzL2xpYnhmcy94ZnNfZnMuaFxuQEAgLTI1MCw2ICsyNTAsNyBAQCB0eXBlZGVmIHN0cnVjdCB4ZnNfZnNvcF9yZXNibGtzIHtcbiAjZGVmaW5lIFhGU19GU09QX0dFT01fRkxBR1NfUEFSRU5UXHQoMSBcdTAwM2NcdTAwM2MgMjUpIC8qIGxpbnV4IHBhcmVudCBwb2ludGVycyAqL1xuICNkZWZpbmUgWEZTX0ZTT1BfR0VPTV9GTEFHU19NRVRBRElSXHQoMSBcdTAwM2NcdTAwM2MgMjYpIC8qIG1ldGFkYXRhIGRpcmVjdG9yaWVzICovXG4gI2RlZmluZSBYRlNfRlNPUF9HRU9NX0ZMQUdTX1pPTkVEXHQoMSBcdTAwM2NcdTAwM2MgMjcpIC8qIHpvbmVkIHJ0IGRldmljZSAqL1xuKyNkZWZpbmUgWEZTX0ZTT1BfR0VPTV9GTEFHU19WRVJJVFlcdCgxIFx1MDAzY1x1MDAzYyAyOCkgLyogZnMtdmVyaXR5ICovXG4gXG4gLypcbiAgKiBNaW5pbXVtIGFuZCBtYXhpbXVtIHNpemVzIG5lZWQgZm9yIGdyb3d0aCBjaGVja3MuXG5AQCAtNDIxLDYgKzQyMiw3IEBAIHN0cnVjdCB4ZnNfYnVsa3N0YXQge1xuICNkZWZpbmUgWEZTX0JTX1NJQ0tfU1lNTElOS1x0KDEgXHUwMDNjXHUwMDNjIDYpICAvKiBzeW1ib2xpYyBsaW5rIHJlbW90ZSB0YXJnZXQgKi9cbiAjZGVmaW5lIFhGU19CU19TSUNLX1BBUkVOVFx0KDEgXHUwMDNjXHUwMDNjIDcpICAvKiBwYXJlbnQgcG9pbnRlcnMgKi9cbiAjZGVmaW5lIFhGU19CU19TSUNLX0RJUlRSRUVcdCgxIFx1MDAzY1x1MDAzYyA4KSAgLyogZGlyZWN0b3J5IHRyZWUgc3RydWN0dXJlICovXG4rI2RlZmluZSBYRlNfQlNfU0lDS19GU1ZFUklUWVx0KDEgXHUwMDNjXHUwMDNjIDkpICAvKiBmc3Zlcml0eSBtZXRhZGF0YSAqL1xuIFxuIC8qXG4gICogUHJvamVjdCBxdW90YSBpZCBoZWxwZXJzIChwcmV2aW91c2x5IHByb2ppZCB3YXMgMTZiaXQgb25seVxuZGlmZiAtLWdpdCBhL2ZzL3hmcy9saWJ4ZnMveGZzX2hlYWx0aC5oIGIvZnMveGZzL2xpYnhmcy94ZnNfaGVhbHRoLmhcbmluZGV4IDFkNDVjZjU3ODllODY0Li45MzJiNDQ3MTkwZGE3NiAxMDA2NDRcbi0tLSBhL2ZzL3hmcy9saWJ4ZnMveGZzX2hlYWx0aC5oXG4rKysgYi9mcy94ZnMvbGlieGZzL3hmc19oZWFsdGguaFxuQEAgLTEwNCw2ICsxMDQsNyBAQCBzdHJ1Y3QgeGZzX3J0Z3JvdXA7XG4gLyogRG9uJ3QgcHJvcGFnYXRlIHNpY2sgc3RhdHVzIHRvIGFnIGhlYWx0aCBzdW1tYXJ5IGR1cmluZyBpbmFjdGl2YXRpb24gKi9cbiAjZGVmaW5lIFhGU19TSUNLX0lOT19GT1JHRVRcdCgxIFx1MDAzY1x1MDAzYyAxMilcbiAjZGVmaW5lIFhGU19TSUNLX0lOT19ESVJUUkVFXHQoMSBcdTAwM2NcdTAwM2MgMTMpICAvKiBkaXJlY3RvcnkgdHJlZSBzdHJ1Y3R1cmUgKi9cbisjZGVmaW5lIFhGU19TSUNLX0lOT19GU1ZFUklUWVx0KDEgXHUwMDNjXHUwMDNjIDE0KSAgLyogZnN2ZXJpdHkgbWV0YWRhdGEgKi9cbiBcbiAvKiBQcmltYXJ5IGV2aWRlbmNlIG9mIGhlYWx0aCBwcm9ibGVtcyBpbiBhIGdpdmVuIGdyb3VwLiAqL1xuICNkZWZpbmUgWEZTX1NJQ0tfRlNfUFJJTUFSWVx0KFhGU19TSUNLX0ZTX0NPVU5URVJTIHwgXFxcbkBAIC0xNDAsNyArMTQxLDggQEAgc3RydWN0IHhmc19ydGdyb3VwO1xuIFx0XHRcdFx0IFhGU19TSUNLX0lOT19YQVRUUiB8IFxcXG4gXHRcdFx0XHQgWEZTX1NJQ0tfSU5PX1NZTUxJTksgfCBcXFxuIFx0XHRcdFx0IFhGU19TSUNLX0lOT19QQVJFTlQgfCBcXFxuLVx0XHRcdFx0IFhGU19TSUNLX0lOT19ESVJUUkVFKVxuK1x0XHRcdFx0IFhGU19TSUNLX0lOT19ESVJUUkVFIHwgXFxcbitcdFx0XHRcdCBYRlNfU0lDS19JTk9fRlNWRVJJVFkpXG4gXG4gI2RlZmluZSBYRlNfU0lDS19JTk9fWkFQUEVEXHQoWEZTX1NJQ0tfSU5PX0JNQlREX1pBUFBFRCB8IFxcXG4gXHRcdFx0XHQgWEZTX1NJQ0tfSU5PX0JNQlRBX1pBUFBFRCB8IFxcXG5kaWZmIC0tZ2l0IGEvZnMveGZzL2xpYnhmcy94ZnNfaW5vZGVfYnVmLmMgYi9mcy94ZnMvbGlieGZzL3hmc19pbm9kZV9idWYuY1xuaW5kZXggMzM2ZWY4NDNmMmZlNGYuLmJkODBhMTlmMmUwOTI5IDEwMDY0NFxuLS0tIGEvZnMveGZzL2xpYnhmcy94ZnNfaW5vZGVfYnVmLmNcbisrKyBiL2ZzL3hmcy9saWJ4ZnMveGZzX2lub2RlX2J1Zi5jXG5AQCAtNzYwLDYgKzc2MCwxNCBAQCB4ZnNfZGlub2RlX3ZlcmlmeShcbiBcdCAgICAheGZzX2hhc19ydHJlZmxpbmsobXApKVxuIFx0XHRyZXR1cm4gX190aGlzX2FkZHJlc3M7XG4gXG4rXHQvKiBvbmx5IHJlZ3VsYXIgZmlsZXMgY2FuIGhhdmUgZnN2ZXJpdHkgKi9cbitcdGlmIChmbGFnczIgXHUwMDI2IFhGU19ESUZMQUcyX1ZFUklUWSkge1xuK1x0XHRpZiAoIXhmc19oYXNfdmVyaXR5KG1wKSlcbitcdFx0XHRyZXR1cm4gX190aGlzX2FkZHJlc3M7XG4rXHRcdGlmICghU19JU1JFRyhtb2RlKSlcbitcdFx0XHRyZXR1cm4gX190aGlzX2FkZHJlc3M7XG4rXHR9XG4rXG4gXHRpZiAoeGZzX2hhc196b25lZChtcCkgXHUwMDI2XHUwMDI2XG4gXHQgICAgZGlwLVx1MDAzZWRpX21ldGF0eXBlID09IGNwdV90b19iZTE2KFhGU19NRVRBRklMRV9SVFJNQVApKSB7XG4gXHRcdGlmIChiZTMyX3RvX2NwdShkaXAtXHUwMDNlZGlfdXNlZF9ibG9ja3MpIFx1MDAzZSBtcC1cdTAwM2VtX3NiLnNiX3JnZXh0ZW50cylcbmRpZmYgLS1naXQgYS9mcy94ZnMvbGlieGZzL3hmc19pbm9kZV91dGlsLmMgYi9mcy94ZnMvbGlieGZzL3hmc19pbm9kZV91dGlsLmNcbmluZGV4IDI1OGFjM2QwZDQ4NmU2Li41YTUxNmJkMzFjMzE3NSAxMDA2NDRcbi0tLSBhL2ZzL3hmcy9saWJ4ZnMveGZzX2lub2RlX3V0aWwuY1xuKysrIGIvZnMveGZzL2xpYnhmcy94ZnNfaW5vZGVfdXRpbC5jXG5AQCAtNzQsNyArNzQsOCBAQCB4ZnNfZmxhZ3MyZGlmbGFnczIoXG4gXHR1aW50NjRfdFx0XHRkaV9mbGFnczIgPVxuIFx0XHQoaXAtXHUwMDNlaV9kaWZsYWdzMiBcdTAwMjYgKFhGU19ESUZMQUcyX1JFRkxJTksgfFxuIFx0XHRcdFx0ICAgWEZTX0RJRkxBRzJfQklHVElNRSB8XG4tXHRcdFx0XHQgICBYRlNfRElGTEFHMl9OUkVYVDY0KSk7XG4rXHRcdFx0XHQgICBYRlNfRElGTEFHMl9OUkVYVDY0IHxcbitcdFx0XHRcdCAgIFhGU19ESUZMQUcyX1ZFUklUWSkpO1xuIFxuIFx0aWYgKHhmbGFncyBcdTAwMjYgRlNfWEZMQUdfREFYKVxuIFx0XHRkaV9mbGFnczIgfD0gWEZTX0RJRkxBRzJfREFYO1xuQEAgLTEyNiw2ICsxMjcsOCBAQCB4ZnNfaXAyeGZsYWdzKFxuIFx0XHRcdGZsYWdzIHw9IEZTX1hGTEFHX0RBWDtcbiBcdFx0aWYgKGlwLVx1MDAzZWlfZGlmbGFnczIgXHUwMDI2IFhGU19ESUZMQUcyX0NPV0VYVFNJWkUpXG4gXHRcdFx0ZmxhZ3MgfD0gRlNfWEZMQUdfQ09XRVhUU0laRTtcbitcdFx0aWYgKGlwLVx1MDAzZWlfZGlmbGFnczIgXHUwMDI2IFhGU19ESUZMQUcyX1ZFUklUWSlcbitcdFx0XHRmbGFncyB8PSBGU19YRkxBR19WRVJJVFk7XG4gXHR9XG4gXG4gXHRpZiAoeGZzX2lub2RlX2hhc19hdHRyX2ZvcmsoaXApKVxuZGlmZiAtLWdpdCBhL2ZzL3hmcy9saWJ4ZnMveGZzX3NiLmMgYi9mcy94ZnMvbGlieGZzL3hmc19zYi5jXG5pbmRleCA0NzMyMmFkYjc2OTA1OS4uMjIyYmJlNTU1OWRmNDcgMTAwNjQ0XG4tLS0gYS9mcy94ZnMvbGlieGZzL3hmc19zYi5jXG4rKysgYi9mcy94ZnMvbGlieGZzL3hmc19zYi5jXG5AQCAtMTY1LDYgKzE2NSw4IEBAIHhmc19zYl92ZXJzaW9uX3RvX2ZlYXR1cmVzKFxuIFx0XHRmZWF0dXJlcyB8PSBYRlNfRkVBVF9SRUZMSU5LO1xuIFx0aWYgKHNicC1cdTAwM2VzYl9mZWF0dXJlc19yb19jb21wYXQgXHUwMDI2IFhGU19TQl9GRUFUX1JPX0NPTVBBVF9JTk9CVENOVClcbiBcdFx0ZmVhdHVyZXMgfD0gWEZTX0ZFQVRfSU5PQlRDTlQ7XG4rXHRpZiAoc2JwLVx1MDAzZXNiX2ZlYXR1cmVzX3JvX2NvbXBhdCBcdTAwMjYgWEZTX1NCX0ZFQVRfUk9fQ09NUEFUX1ZFUklUWSlcbitcdFx0ZmVhdHVyZXMgfD0gWEZTX0ZFQVRfVkVSSVRZO1xuIFx0aWYgKHNicC1cdTAwM2VzYl9mZWF0dXJlc19pbmNvbXBhdCBcdTAwMjYgWEZTX1NCX0ZFQVRfSU5DT01QQVRfRlRZUEUpXG4gXHRcdGZlYXR1cmVzIHw9IFhGU19GRUFUX0ZUWVBFO1xuIFx0aWYgKHNicC1cdTAwM2VzYl9mZWF0dXJlc19pbmNvbXBhdCBcdTAwMjYgWEZTX1NCX0ZFQVRfSU5DT01QQVRfU1BJTk9ERVMpXG5AQCAtMTU4OCw2ICsxNTkwLDggQEAgeGZzX2ZzX2dlb21ldHJ5KFxuIFx0XHRnZW8tXHUwMDNlZmxhZ3MgfD0gWEZTX0ZTT1BfR0VPTV9GTEFHU19NRVRBRElSO1xuIFx0aWYgKHhmc19oYXNfem9uZWQobXApKVxuIFx0XHRnZW8tXHUwMDNlZmxhZ3MgfD0gWEZTX0ZTT1BfR0VPTV9GTEFHU19aT05FRDtcbitcdGlmICh4ZnNfaGFzX3Zlcml0eShtcCkpXG4rXHRcdGdlby1cdTAwM2VmbGFncyB8PSBYRlNfRlNPUF9HRU9NX0ZMQUdTX1ZFUklUWTtcbiBcdGdlby1cdTAwM2VydHNlY3RzaXplID0gc2JwLVx1MDAzZXNiX2Jsb2Nrc2l6ZTtcbiBcdGdlby1cdTAwM2VkaXJibG9ja3NpemUgPSB4ZnNfZGlyMl9kaXJibG9ja19ieXRlcyhzYnApO1xuIFxuZGlmZiAtLWdpdCBhL2ZzL3hmcy9zY3J1Yi9jb21tb24uYyBiL2ZzL3hmcy9zY3J1Yi9jb21tb24uY1xuaW5kZXggZTUyMzNlMzFhYmI3NTAuLjE2NzNiNTIyMjQ0ZDc0IDEwMDY0NFxuLS0tIGEvZnMveGZzL3NjcnViL2NvbW1vbi5jXG4rKysgYi9mcy94ZnMvc2NydWIvY29tbW9uLmNcbkBAIC00NSw2ICs0NSw4IEBAXG4gI2luY2x1ZGUgXCJzY3J1Yi9oZWFsdGguaFwiXG4gI2luY2x1ZGUgXCJzY3J1Yi90ZW1wZmlsZS5oXCJcbiBcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9mc3Zlcml0eS5oXHUwMDNlXG4rXG4gLyogQ29tbW9uIGNvZGUgZm9yIHRoZSBtZXRhZGF0YSBzY3J1YmJlcnMuICovXG4gXG4gLypcbkBAIC0xNzU0LDMgKzE3NTYsNTQgQEAgeGNoa19pbm9kZV9jb3VudF9ibG9ja3MoXG4gXHRyZXR1cm4geGZzX2JtYXBfY291bnRfYmxvY2tzKHNjLVx1MDAzZXRwLCBzYy1cdTAwM2VpcCwgd2hpY2hmb3JrLCBuZXh0ZW50cyxcbiBcdFx0XHRjb3VudCk7XG4gfVxuK1xuKy8qXG4rICogSWYgdGhpcyBpbm9kZSBoYXMgU19WRVJJVFkgc2V0IG9uIGl0LCByZWFkIHRoZSB2ZXJpdHkgaW5mby4gSWYgdGhlIHJlYWRpbmdcbisgKiBmYWlscyB3aXRoIGFueXRoaW5nIG90aGVyIHRoYW4gRU5PTUVNLCB0aGUgZmlsZSBpcyBjb3JydXB0LCB3aGljaCB3ZSBjYW5cbisgKiBkZXRlY3QgbGF0ZXIgd2l0aCBmc3Zlcml0eV9hY3RpdmUuXG4rICpcbisgKiBDYWxsZXJzIG11c3QgaG9sZCB0aGUgSU9MT0NLIGFuZCBtdXN0IG5vdCBob2xkIHRoZSBJTE9DSyBvZiBzYy1cdTAwM2VpcCBiZWNhdXNlXG4rICogYWN0aXZhdGlvbiByZWFkcyBpbm9kZSBkYXRhLlxuKyAqL1xuK2ludFxuK3hjaGtfaW5vZGVfc2V0dXBfdmVyaXR5KFxuK1x0c3RydWN0IHhmc19zY3J1Ylx0KnNjKVxuK3tcbitcdGludFx0XHRcdGVycm9yO1xuK1xuK1x0aWYgKCFmc3Zlcml0eV9hY3RpdmUoVkZTX0koc2MtXHUwMDNlaXApKSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRlcnJvciA9IGZzdmVyaXR5X2Vuc3VyZV92ZXJpdHlfaW5mbyhWRlNfSShzYy1cdTAwM2VpcCkpO1xuK1x0c3dpdGNoIChlcnJvcikge1xuK1x0Y2FzZSAwOlxuK1x0XHQvKiBmc3Zlcml0eSBpcyBhY3RpdmUgKi9cbitcdFx0YnJlYWs7XG4rXHRjYXNlIC1FTk9EQVRBOlxuK1x0Y2FzZSAtRU1TR1NJWkU6XG4rXHRjYXNlIC1FSU5WQUw6XG4rXHRjYXNlIC1FRlNDT1JSVVBURUQ6XG4rXHRjYXNlIC1FRkJJRzpcbitcdFx0LypcbitcdFx0ICogVGhlIG5vbnplcm8gZXJybm8gY29kZXMgYWJvdmUgYXJlIHRoZSBlcnJvciBjb2RlcyB0aGF0IGNhblxuK1x0XHQgKiBiZSByZXR1cm5lZCBmcm9tIGZzdmVyaXR5IG9uIG1ldGFkYXRhIHZhbGlkYXRpb24gZXJyb3JzLlxuK1x0XHQgKi9cbitcdFx0cmV0dXJuIDA7XG4rXHRkZWZhdWx0OlxuK1x0XHQvKiBydW50aW1lIGVycm9ycyAqL1xuK1x0XHRyZXR1cm4gZXJyb3I7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rLypcbisgKiBJcyB0aGlzIGEgdmVyaXR5IGZpbGUgdGhhdCBmYWlsZWQgdG8gYWN0aXZhdGU/ICBDYWxsZXJzIG11c3QgaGF2ZSB0cmllZCB0b1xuKyAqIGFjdGl2YXRlIGZzdmVyaXR5IHZpYSB4Y2hrX2lub2RlX3NldHVwX3Zlcml0eS5cbisgKi9cbitib29sXG4reGNoa19pbm9kZV92ZXJpdHlfYnJva2VuKFxuK1x0c3RydWN0IHhmc19pbm9kZVx0KmlwKVxuK3tcbitcdHJldHVybiBmc3Zlcml0eV9hY3RpdmUoVkZTX0koaXApKSBcdTAwMjZcdTAwMjYgIWZzdmVyaXR5X2dldF9pbmZvKFZGU19JKGlwKSk7XG4rfVxuZGlmZiAtLWdpdCBhL2ZzL3hmcy9zY3J1Yi9jb21tb24uaCBiL2ZzL3hmcy9zY3J1Yi9jb21tb24uaFxuaW5kZXggOWQ2MjdmZDUwNjg3ZTQuLjNkZTJiNjAwOWE5OTQxIDEwMDY0NFxuLS0tIGEvZnMveGZzL3NjcnViL2NvbW1vbi5oXG4rKysgYi9mcy94ZnMvc2NydWIvY29tbW9uLmhcbkBAIC0yNjgsNiArMjY4LDggQEAgaW50IHhjaGtfaW5vZGVfaXNfYWxsb2NhdGVkKHN0cnVjdCB4ZnNfc2NydWIgKnNjLCB4ZnNfYWdpbm9fdCBhZ2lubyxcbiBcdFx0Ym9vbCAqaW51c2UpO1xuIGludCB4Y2hrX2lub2RlX2NvdW50X2Jsb2NrcyhzdHJ1Y3QgeGZzX3NjcnViICpzYywgaW50IHdoaWNoZm9yayxcbiBcdFx0eGZzX2V4dG51bV90ICpuZXh0ZW50cywgeGZzX2ZpbGJsa3NfdCAqY291bnQpO1xuK2ludCB4Y2hrX2lub2RlX3NldHVwX3Zlcml0eShzdHJ1Y3QgeGZzX3NjcnViICpzYyk7XG4rYm9vbCB4Y2hrX2lub2RlX3Zlcml0eV9icm9rZW4oc3RydWN0IHhmc19pbm9kZSAqaXApO1xuIFxuIGJvb2wgeGNoa19pbm9kZV9pc19kaXJ0cmVlX3Jvb3QoY29uc3Qgc3RydWN0IHhmc19pbm9kZSAqaXApO1xuIGJvb2wgeGNoa19pbm9kZV9pc19zYl9yb290ZWQoY29uc3Qgc3RydWN0IHhmc19pbm9kZSAqaXApO1xuZGlmZiAtLWdpdCBhL2ZzL3hmcy9zY3J1Yi9pbm9kZS5jIGIvZnMveGZzL3NjcnViL2lub2RlLmNcbmluZGV4IDY1YjEzZTMxMTkxNjgxLi5kMWNkZDZiNDQ1ZDAxNyAxMDA2NDRcbi0tLSBhL2ZzL3hmcy9zY3J1Yi9pbm9kZS5jXG4rKysgYi9mcy94ZnMvc2NydWIvaW5vZGUuY1xuQEAgLTM2LDYgKzM2LDEwIEBAIHhjaGtfcHJlcGFyZV9pc2NydWIoXG4gXG4gXHR4Y2hrX2lsb2NrKHNjLCBYRlNfSU9MT0NLX0VYQ0wpO1xuIFxuK1x0ZXJyb3IgPSB4Y2hrX2lub2RlX3NldHVwX3Zlcml0eShzYyk7XG4rXHRpZiAoZXJyb3IpXG4rXHRcdHJldHVybiBlcnJvcjtcbitcbiBcdGVycm9yID0geGNoa190cmFuc19hbGxvYyhzYywgMCk7XG4gXHRpZiAoZXJyb3IpXG4gXHRcdHJldHVybiBlcnJvcjtcbkBAIC04MzMsNiArODM3LDkgQEAgeGNoa19pbm9kZShcbiBcdGlmIChTX0lTUkVHKFZGU19JKHNjLVx1MDAzZWlwKS1cdTAwM2VpX21vZGUpKVxuIFx0XHR4Y2hrX2lub2RlX2NoZWNrX3JlZmxpbmtfaWZsYWcoc2MsIElfSU5PKHNjLVx1MDAzZWlwKSk7XG4gXG4rXHRpZiAoeGNoa19pbm9kZV92ZXJpdHlfYnJva2VuKHNjLVx1MDAzZWlwKSlcbitcdFx0eGNoa19pbm9fc2V0X2NvcnJ1cHQoc2MsIHNjLVx1MDAzZXNtLVx1MDAzZXNtX2lubyk7XG4rXG4gXHR4Y2hrX2lub2RlX2NoZWNrX3VubGlua2VkKHNjKTtcbiBcbiBcdHhjaGtfaW5vZGVfeHJlZihzYywgSV9JTk8oc2MtXHUwMDNlaXApLCBcdTAwMjZkaSk7XG5kaWZmIC0tZ2l0IGEvZnMveGZzL3NjcnViL2lub2RlX3JlcGFpci5jIGIvZnMveGZzL3NjcnViL2lub2RlX3JlcGFpci5jXG5pbmRleCA0OTNkY2Y1Y2M2YzE1OS4uOTBmODYxYmI0ZWY4NDggMTAwNjQ0XG4tLS0gYS9mcy94ZnMvc2NydWIvaW5vZGVfcmVwYWlyLmNcbisrKyBiL2ZzL3hmcy9zY3J1Yi9pbm9kZV9yZXBhaXIuY1xuQEAgLTU3Myw2ICs1NzMsOCBAQCB4cmVwX2Rpbm9kZV9mbGFncyhcbiBcdFx0ZGlwLVx1MDAzZWRpX25yZXh0NjRfcGFkID0gMDtcbiBcdGVsc2UgaWYgKGRpcC1cdTAwM2VkaV92ZXJzaW9uIFx1MDAzZT0gMylcbiBcdFx0ZGlwLVx1MDAzZWRpX3YzX3BhZCA9IDA7XG4rXHRpZiAoIXhmc19oYXNfdmVyaXR5KG1wKSB8fCAhU19JU1JFRyhtb2RlKSlcbitcdFx0ZmxhZ3MyIFx1MDAyNj0gflhGU19ESUZMQUcyX1ZFUklUWTtcbiBcbiBcdGlmIChmbGFnczIgXHUwMDI2IFhGU19ESUZMQUcyX01FVEFEQVRBKSB7XG4gXHRcdHhmc19mYWlsYWRkcl90XHRmYTtcbkBAIC0xNjE3LDYgKzE2MTksMTAgQEAgeHJlcF9kaW5vZGVfY29yZShcbiBcdGlmIChpZ2V0X2Vycm9yKVxuIFx0XHRyZXR1cm4gaWdldF9lcnJvcjtcbiBcbitcdGVycm9yID0geGNoa19pbm9kZV9zZXR1cF92ZXJpdHkoc2MpO1xuK1x0aWYgKGVycm9yKVxuK1x0XHRyZXR1cm4gZXJyb3I7XG4rXG4gXHRlcnJvciA9IHhjaGtfdHJhbnNfYWxsb2Moc2MsIDApO1xuIFx0aWYgKGVycm9yKVxuIFx0XHRyZXR1cm4gZXJyb3I7XG5AQCAtMjAzNSw2ICsyMDQxLDI3IEBAIHhyZXBfaW5vZGVfdW5saW5rZWQoXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rLypcbisgKiBJZiB0aGlzIGZpbGUgaXMgYSBmc3Zlcml0eSBmaWxlLCB4Y2hrX3ByZXBhcmVfaXNjcnViIG9yIHhyZXBfZGlub2RlX2NvcmVcbisgKiBzaG91bGQgaGF2ZSBhY3RpdmF0ZWQgaXQuICBJZiBpdCdzIHN0aWxsIG5vdCBhY3RpdmUsIHRoZW4gdGhlcmUncyBzb21ldGhpbmdcbisgKiB3cm9uZyB3aXRoIHRoZSB2ZXJpdHkgZGVzY3JpcHRvciBhbmQgd2Ugc2hvdWxkIHR1cm4gaXQgb2ZmLlxuKyAqL1xuK1NUQVRJQyBpbnRcbit4cmVwX2lub2RlX3Zlcml0eShcbitcdHN0cnVjdCB4ZnNfc2NydWJcdCpzYylcbit7XG4rXHRzdHJ1Y3QgaW5vZGVcdFx0Kmlub2RlID0gVkZTX0koc2MtXHUwMDNlaXApO1xuK1xuK1x0aWYgKHhjaGtfaW5vZGVfdmVyaXR5X2Jyb2tlbihzYy1cdTAwM2VpcCkpIHtcbitcdFx0c2MtXHUwMDNlaXAtXHUwMDNlaV9kaWZsYWdzMiBcdTAwMjY9IH5YRlNfRElGTEFHMl9WRVJJVFk7XG4rXHRcdGlub2RlLVx1MDAzZWlfZmxhZ3MgXHUwMDI2PSB+U19WRVJJVFk7XG4rXG4rXHRcdHhmc190cmFuc19sb2dfaW5vZGUoc2MtXHUwMDNldHAsIHNjLVx1MDAzZWlwLCBYRlNfSUxPR19DT1JFKTtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbiAvKiBSZXBhaXIgYW4gaW5vZGUncyBmaWVsZHMuICovXG4gaW50XG4geHJlcF9pbm9kZShcbkBAIC0yMDg0LDYgKzIxMTEsMTUgQEAgeHJlcF9pbm9kZShcbiBcdFx0XHRyZXR1cm4gZXJyb3I7XG4gXHR9XG4gXG4rXHQvKlxuK1x0ICogRGlzYWJsZSBmc3Zlcml0eSBpZiBpdCBjYW5ub3QgYmUgYWN0aXZhdGVkLiAgQWN0aXZhdGlvbiBmYWlsdXJlXG4rXHQgKiBwcm9oaWJpdHMgdGhlIGZpbGUgZnJvbSBiZWluZyBvcGVuZWQsIHNvIHRoZXJlIGNhbm5vdCBiZSBhbm90aGVyXG4rXHQgKiBwcm9ncmFtIHdpdGggYW4gb3BlbiBmZCB0byB3aGF0IGl0IHRoaW5rcyBpcyBhIHZlcml0eSBmaWxlLlxuK1x0ICovXG4rXHRlcnJvciA9IHhyZXBfaW5vZGVfdmVyaXR5KHNjKTtcbitcdGlmIChlcnJvcilcbitcdFx0cmV0dXJuIGVycm9yO1xuK1xuIFx0LyogUmVjb25uZWN0IGluY29yZSB1bmxpbmtlZCBsaXN0ICovXG4gXHRlcnJvciA9IHhyZXBfaW5vZGVfdW5saW5rZWQoc2MpO1xuIFx0aWYgKGVycm9yKVxuZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfYW9wcy5jIGIvZnMveGZzL3hmc19hb3BzLmNcbmluZGV4IDUxMjkzYjZmMzMxZjBiLi5iMDUzN2M2N2U5NjBlMSAxMDA2NDRcbi0tLSBhL2ZzL3hmcy94ZnNfYW9wcy5jXG4rKysgYi9mcy94ZnMveGZzX2FvcHMuY1xuQEAgLTIyLDcgKzIyLDkgQEBcbiAjaW5jbHVkZSBcInhmc19pY2FjaGUuaFwiXG4gI2luY2x1ZGUgXCJ4ZnNfem9uZV9hbGxvYy5oXCJcbiAjaW5jbHVkZSBcInhmc19ydGdyb3VwLmhcIlxuKyNpbmNsdWRlIFwieGZzX2ZzdmVyaXR5LmhcIlxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Jpby1pbnRlZ3JpdHkuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZzdmVyaXR5LmhcdTAwM2VcbiBcbiBzdHJ1Y3QgeGZzX3dyaXRlcGFnZV9jdHgge1xuIFx0c3RydWN0IGlvbWFwX3dyaXRlcGFnZV9jdHggY3R4O1xuQEAgLTE4MSw2ICsxODMsMjMgQEAgeGZzX2VuZF9pb2VuZF93cml0ZShcbiBcdG1lbWFsbG9jX25vZnNfcmVzdG9yZShub2ZzX2ZsYWcpO1xuIH1cbiBcbisvKlxuKyAqIElPIHJlYWQgY29tcGxldGlvbi5cbisgKi9cbitzdGF0aWMgdm9pZFxuK3hmc19lbmRfaW9lbmRfcmVhZChcbitcdHN0cnVjdCBpb21hcF9pb2VuZFx0KmlvZW5kKVxuK3tcbitcdHN0cnVjdCB4ZnNfaW5vZGVcdCppcCA9IFhGU19JKGlvZW5kLVx1MDAzZWlvX2lub2RlKTtcbitcbitcdGlmICghaW9lbmQtXHUwMDNlaW9fYmlvLmJpX3N0YXR1cyBcdTAwMjZcdTAwMjZcbitcdFx0XHR4ZnNfZnN2ZXJpdHlfaXNfZmlsZV9kYXRhKGlwLCBpb2VuZC1cdTAwM2Vpb19vZmZzZXQpKVxuK1x0XHRmc3Zlcml0eV92ZXJpZnlfYmlvKGlvZW5kLVx1MDAzZWlvX3ZpLFxuK1x0XHRcdFx0ICAgIFx1MDAyNmlvZW5kLVx1MDAzZWlvX2Jpbyk7XG4rXHRpb21hcF9maW5pc2hfaW9lbmRzKGlvZW5kLFxuK1x0XHRibGtfc3RhdHVzX3RvX2Vycm5vKGlvZW5kLVx1MDAzZWlvX2Jpby5iaV9zdGF0dXMpKTtcbit9XG4rXG4gLypcbiAgKiBGaW5pc2ggYWxsIHBlbmRpbmcgSU8gY29tcGxldGlvbnMgdGhhdCByZXF1aXJlIHRyYW5zYWN0aW9uYWwgbW9kaWZpY2F0aW9ucy5cbiAgKlxuQEAgLTIxNSw4ICsyMzQsNyBAQCB4ZnNfZW5kX2lvKFxuIFx0XHRsaXN0X2RlbF9pbml0KFx1MDAyNmlvZW5kLVx1MDAzZWlvX2xpc3QpO1xuIFx0XHRpb21hcF9pb2VuZF90cnlfbWVyZ2UoaW9lbmQsIFx1MDAyNnRtcCk7XG4gXHRcdGlmIChiaW9fb3AoXHUwMDI2aW9lbmQtXHUwMDNlaW9fYmlvKSA9PSBSRVFfT1BfUkVBRClcbi1cdFx0XHRpb21hcF9maW5pc2hfaW9lbmRzKGlvZW5kLFxuLVx0XHRcdFx0YmxrX3N0YXR1c190b19lcnJubyhpb2VuZC1cdTAwM2Vpb19iaW8uYmlfc3RhdHVzKSk7XG4rXHRcdFx0eGZzX2VuZF9pb2VuZF9yZWFkKGlvZW5kKTtcbiBcdFx0ZWxzZVxuIFx0XHRcdHhmc19lbmRfaW9lbmRfd3JpdGUoaW9lbmQpO1xuIFx0XHRjb25kX3Jlc2NoZWQoKTtcbkBAIC0yNDIsOSArMjYwLDE0IEBAIHhmc19lbmRfYmlvKFxuIFx0fVxuIFxuIFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2aXAtXHUwMDNlaV9pb2VuZF9sb2NrLCBmbGFncyk7XG4tXHRpZiAobGlzdF9lbXB0eShcdTAwMjZpcC1cdTAwM2VpX2lvZW5kX2xpc3QpKVxuLVx0XHRXQVJOX09OX09OQ0UoIXF1ZXVlX3dvcmsobXAtXHUwMDNlbV91bndyaXR0ZW5fd29ya3F1ZXVlLFxuK1x0aWYgKGxpc3RfZW1wdHkoXHUwMDI2aXAtXHUwMDNlaV9pb2VuZF9saXN0KSkge1xuK1x0XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfRlNfVkVSSVRZKSBcdTAwMjZcdTAwMjYgaW9lbmQtXHUwMDNlaW9fdmkgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICBpb2VuZC1cdTAwM2Vpb19vZmZzZXQgXHUwMDNjIHhmc19mc3Zlcml0eV9tZXRhZGF0YV9vZmZzZXQoaXApKVxuK1x0XHRcdGZzdmVyaXR5X2VucXVldWVfdmVyaWZ5X3dvcmsoXHUwMDI2aXAtXHUwMDNlaV9pb2VuZF93b3JrKTtcbitcdFx0ZWxzZVxuK1x0XHRcdFdBUk5fT05fT05DRSghcXVldWVfd29yayhtcC1cdTAwM2VtX3Vud3JpdHRlbl93b3JrcXVldWUsXG4gXHRcdFx0XHRcdCBcdTAwMjZpcC1cdTAwM2VpX2lvZW5kX3dvcmspKTtcbitcdH1cbiBcdGxpc3RfYWRkX3RhaWwoXHUwMDI2aW9lbmQtXHUwMDNlaW9fbGlzdCwgXHUwMDI2aXAtXHUwMDNlaV9pb2VuZF9saXN0KTtcbiBcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2aXAtXHUwMDNlaV9pb2VuZF9sb2NrLCBmbGFncyk7XG4gfVxuQEAgLTM1MCwxMiArMzczLDE2IEBAIHhmc19tYXBfYmxvY2tzKFxuIFx0aW50XHRcdFx0cmV0cmllcyA9IDA7XG4gXHRpbnRcdFx0XHRlcnJvciA9IDA7XG4gXHR1bnNpZ25lZCBpbnRcdFx0KnNlcTtcbitcdHVuc2lnbmVkIGludFx0XHRpb21hcF9mbGFncyA9IDA7XG4gXG4gXHRpZiAoeGZzX2lzX3NodXRkb3duKG1wKSlcbiBcdFx0cmV0dXJuIC1FSU87XG4gXG4gXHRYRlNfRVJST1JUQUdfREVMQVkobXAsIFhGU19FUlJUQUdfV0JfREVMQVlfTVMpO1xuIFxuK1x0aWYgKHhmc19pZmxhZ3NfdGVzdChpcCwgWEZTX1ZFUklUWV9DT05TVFJVQ1RJT04pKVxuK1x0XHRpb21hcF9mbGFncyB8PSBJT01BUF9GX0ZTVkVSSVRZO1xuK1xuIFx0LypcbiBcdCAqIENPVyBmb3JrIGJsb2NrcyBjYW4gb3ZlcmxhcCBkYXRhIGZvcmsgYmxvY2tzIGV2ZW4gaWYgdGhlIGJsb2Nrc1xuIFx0ICogYXJlbid0IHNoYXJlZC4gIENPVyBJL08gYWx3YXlzIHRha2VzIHByZWNlZGVudCwgc28gd2UgbXVzdCBhbHdheXNcbkBAIC00NDMsNyArNDcwLDggQEAgeGZzX21hcF9ibG9ja3MoXG4gXHQgICAgaXNudWxsc3RhcnRibG9jayhpbWFwLmJyX3N0YXJ0YmxvY2spKVxuIFx0XHRnb3RvIGFsbG9jYXRlX2Jsb2NrcztcbiBcbi1cdHhmc19ibWJ0X3RvX2lvbWFwKGlwLCBcdTAwMjZ3cGMtXHUwMDNlaW9tYXAsIFx1MDAyNmltYXAsIDAsIDAsIFhGU19XUEMod3BjKS1cdTAwM2VkYXRhX3NlcSk7XG4rXHR4ZnNfYm1idF90b19pb21hcChpcCwgXHUwMDI2d3BjLVx1MDAzZWlvbWFwLCBcdTAwMjZpbWFwLCAwLCBpb21hcF9mbGFncyxcbitcdFx0XHQgIFhGU19XUEMod3BjKS1cdTAwM2VkYXRhX3NlcSk7XG4gXHR0cmFjZV94ZnNfbWFwX2Jsb2Nrc19mb3VuZChpcCwgb2Zmc2V0LCBjb3VudCwgd2hpY2hmb3JrLCBcdTAwMjZpbWFwKTtcbiBcdHJldHVybiAwO1xuIGFsbG9jYXRlX2Jsb2NrczpcbkBAIC01OTAsMTIgKzYxOCwxNiBAQCB4ZnNfem9uZWRfbWFwX2Jsb2NrcyhcbiBcdHhmc19maWxibGtzX3RcdFx0Y291bnRfZnNiO1xuIFx0c3RydWN0IHhmc19ibWJ0X2lyZWNcdGltYXAsIGRlbDtcbiBcdHN0cnVjdCB4ZnNfaWV4dF9jdXJzb3JcdGljdXI7XG4rXHR1MTZcdFx0XHRpb21hcF9mbGFncyA9IDA7XG4gXG4gXHRpZiAoeGZzX2lzX3NodXRkb3duKG1wKSlcbiBcdFx0cmV0dXJuIC1FSU87XG4gXG4gXHRYRlNfRVJST1JUQUdfREVMQVkobXAsIFhGU19FUlJUQUdfV0JfREVMQVlfTVMpO1xuIFxuK1x0aWYgKHhmc19pZmxhZ3NfdGVzdChpcCwgWEZTX1ZFUklUWV9DT05TVFJVQ1RJT04pKVxuK1x0XHRpb21hcF9mbGFncyB8PSBJT01BUF9GX0ZTVkVSSVRZO1xuK1xuIFx0LypcbiBcdCAqIEFsbCBkaXJ0eSBkYXRhIG11c3QgYmUgY292ZXJlZCBieSBkZWxhbGxvYyBleHRlbnRzLiAgQnV0IHRydW5jYXRlIGNhblxuIFx0ICogcmVtb3ZlIGRlbGFsbG9jIGV4dGVudHMgdW5kZXJuZWF0aCB1cyBvciByZWR1Y2UgdGhlaXIgc2l6ZS5cbkBAIC02MTksNyArNjUxLDcgQEAgeGZzX3pvbmVkX21hcF9ibG9ja3MoXG4gXHRcdGltYXAuYnJfc3RhcnRibG9jayA9IEhPTEVTVEFSVEJMT0NLO1xuIFx0XHRpbWFwLmJyX3N0YXRlID0gWEZTX0VYVF9OT1JNO1xuIFx0XHR4ZnNfaXVubG9jayhpcCwgWEZTX0lMT0NLX0VYQ0wpO1xuLVx0XHR4ZnNfYm1idF90b19pb21hcChpcCwgXHUwMDI2d3BjLVx1MDAzZWlvbWFwLCBcdTAwMjZpbWFwLCAwLCAwLCAwKTtcbitcdFx0eGZzX2JtYnRfdG9faW9tYXAoaXAsIFx1MDAyNndwYy1cdTAwM2Vpb21hcCwgXHUwMDI2aW1hcCwgMCwgaW9tYXBfZmxhZ3MsIDApO1xuIFx0XHRyZXR1cm4gMDtcbiBcdH1cbiBcdGVuZF9mc2IgPSBtaW4oZW5kX2ZzYiwgaW1hcC5icl9zdGFydG9mZiArIGltYXAuYnJfYmxvY2tjb3VudCk7XG5AQCAtNjMyLDcgKzY2NCw3IEBAIHhmc196b25lZF9tYXBfYmxvY2tzKFxuIFx0eGZzX2l1bmxvY2soaXAsIFhGU19JTE9DS19FWENMKTtcbiBcbiBcdHdwYy1cdTAwM2Vpb21hcC50eXBlID0gSU9NQVBfTUFQUEVEO1xuLVx0d3BjLVx1MDAzZWlvbWFwLmZsYWdzID0gSU9NQVBfRl9ESVJUWTtcbitcdHdwYy1cdTAwM2Vpb21hcC5mbGFncyA9IGlvbWFwX2ZsYWdzIHwgSU9NQVBfRl9ESVJUWTtcbiBcdHdwYy1cdTAwM2Vpb21hcC5iZGV2ID0gbXAtXHUwMDNlbV9ydGRldl90YXJncC1cdTAwM2VidF9iZGV2O1xuIFx0d3BjLVx1MDAzZWlvbWFwLm9mZnNldCA9IG9mZnNldDtcbiBcdHdwYy1cdTAwM2Vpb21hcC5sZW5ndGggPSBYRlNfRlNCX1RPX0IobXAsIGNvdW50X2ZzYik7XG5AQCAtNjg0LDYgKzcxNiwyMiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGlvbWFwX3dyaXRlYmFja19vcHMgeGZzX3pvbmVkX3dyaXRlYmFja19vcHMgPSB7XG4gXHQud3JpdGViYWNrX3N1Ym1pdFx0PSB4ZnNfem9uZWRfd3JpdGViYWNrX3N1Ym1pdCxcbiB9O1xuIFxuK3N0YXRpYyBpbnRcbit4ZnNfaW9tYXBfd3JpdGVwYWdlcyhcbitcdHN0cnVjdCB4ZnNfaW5vZGVcdFx0KmlwLFxuK1x0c3RydWN0IGlvbWFwX3dyaXRlcGFnZV9jdHhcdCpjdHgpXG4re1xuK1x0LypcbitcdCAqIFdyaXRlYmFjayBkb2VzIG5vdCB3b3JrIGZvciBmb2xpb3MgcGFzdCBFT0YsIGxldCBpdCBrbm93IHRoYXRcbitcdCAqIEkvTyBoYXBwZW5zIGZvciBmc3Zlcml0eSBtZXRhZGF0YSBhbmQgdGhpcyByZXN0cmljdGlvbiBuZWVkXG4rXHQgKiB0byBiZSBza2lwcGVkXG4rXHQgKi9cbitcdGlmICh4ZnNfaWZsYWdzX3Rlc3QoaXAsIFhGU19WRVJJVFlfQ09OU1RSVUNUSU9OKSlcbitcdFx0Y3R4LVx1MDAzZWlvbWFwLmZsYWdzIHw9IElPTUFQX0ZfRlNWRVJJVFk7XG4rXG4rXHRyZXR1cm4gaW9tYXBfd3JpdGVwYWdlcyhjdHgpO1xuK31cbitcbiBTVEFUSUMgaW50XG4geGZzX3ZtX3dyaXRlcGFnZXMoXG4gXHRzdHJ1Y3QgYWRkcmVzc19zcGFjZVx0Km1hcHBpbmcsXG5AQCAtNzAzLDcgKzc1MSw3IEBAIHhmc192bV93cml0ZXBhZ2VzKFxuIFx0XHR9O1xuIFx0XHRpbnRcdFx0XHRcdGVycm9yO1xuIFxuLVx0XHRlcnJvciA9IGlvbWFwX3dyaXRlcGFnZXMoXHUwMDI2eGMuY3R4KTtcbitcdFx0ZXJyb3IgPSB4ZnNfaW9tYXBfd3JpdGVwYWdlcyhpcCwgXHUwMDI2eGMuY3R4KTtcbiBcdFx0aWYgKHhjLm9wZW5fem9uZSlcbiBcdFx0XHR4ZnNfb3Blbl96b25lX3B1dCh4Yy5vcGVuX3pvbmUpO1xuIFx0XHRyZXR1cm4gZXJyb3I7XG5AQCAtNzE2LDcgKzc2NCw3IEBAIHhmc192bV93cml0ZXBhZ2VzKFxuIFx0XHRcdH0sXG4gXHRcdH07XG4gXG4tXHRcdHJldHVybiBpb21hcF93cml0ZXBhZ2VzKFx1MDAyNndwYy5jdHgpO1xuK1x0XHRyZXR1cm4geGZzX2lvbWFwX3dyaXRlcGFnZXMoaXAsIFx1MDAyNndwYy5jdHgpO1xuIFx0fVxuIH1cbiBcbkBAIC03NjEsOSArODA5LDEyIEBAIHhmc19iaW9fc3VibWl0X3JlYWQoXG4gXHRzdHJ1Y3QgaW9tYXBfcmVhZF9mb2xpb19jdHhcdCpjdHgpXG4ge1xuIFx0c3RydWN0IGJpb1x0XHRcdCpiaW8gPSBjdHgtXHUwMDNlcmVhZF9jdHg7XG4rXHRzdHJ1Y3QgaW9tYXBfaW9lbmRcdFx0KmlvZW5kO1xuIFxuIFx0LyogZGVmZXIgcmVhZCBjb21wbGV0aW9ucyB0byB0aGUgaW9lbmQgd29ya3F1ZXVlICovXG4tXHRpb21hcF9pbml0X2lvZW5kKGl0ZXItXHUwMDNlaW5vZGUsIGJpbywgY3R4LVx1MDAzZXJlYWRfY3R4X2ZpbGVfb2Zmc2V0LCAwKTtcbitcdGlvZW5kID0gaW9tYXBfaW5pdF9pb2VuZChpdGVyLVx1MDAzZWlub2RlLCBiaW8sIGN0eC1cdTAwM2VyZWFkX2N0eF9maWxlX29mZnNldCxcbitcdFx0XHQwKTtcbitcdGlvZW5kLVx1MDAzZWlvX3ZpID0gY3R4LVx1MDAzZXZpO1xuIFx0aW9tYXBfYmlvX3N1Ym1pdF9yZWFkX2VuZGlvKGl0ZXIsIGN0eCwgeGZzX2VuZF9iaW8pO1xuIH1cbiBcbkBAIC03NzUsMTEgKzgyNiwxMyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGlvbWFwX3JlYWRfb3BzIHhmc19pb21hcF9yZWFkX29wcyA9IHtcbiBcbiBzdGF0aWMgaW5saW5lIGNvbnN0IHN0cnVjdCBpb21hcF9yZWFkX29wcyAqXG4geGZzX2dldF9pb21hcF9yZWFkX29wcyhcbi1cdGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlXHQqbWFwcGluZylcbitcdGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlXHQqbWFwcGluZyxcbitcdGxvZmZfdFx0XHRcdFx0cG9zaXRpb24pXG4ge1xuIFx0c3RydWN0IHhmc19pbm9kZVx0XHQqaXAgPSBYRlNfSShtYXBwaW5nLVx1MDAzZWhvc3QpO1xuIFxuLVx0aWYgKGJkZXZfaGFzX2ludGVncml0eV9jc3VtKHhmc19pbm9kZV9idWZ0YXJnKGlwKS1cdTAwM2VidF9iZGV2KSlcbitcdGlmIChiZGV2X2hhc19pbnRlZ3JpdHlfY3N1bSh4ZnNfaW5vZGVfYnVmdGFyZyhpcCktXHUwMDNlYnRfYmRldikgfHxcbitcdFx0XHR4ZnNfZnN2ZXJpdHlfaXNfZmlsZV9kYXRhKGlwLCBwb3NpdGlvbikpXG4gXHRcdHJldHVybiBcdTAwMjZ4ZnNfaW9tYXBfcmVhZF9vcHM7XG4gXHRyZXR1cm4gXHUwMDI2aW9tYXBfYmlvX3JlYWRfb3BzO1xuIH1cbkBAIC03OTEsNyArODQ0LDcgQEAgeGZzX3ZtX3JlYWRfZm9saW8oXG4ge1xuIFx0c3RydWN0IGlvbWFwX3JlYWRfZm9saW9fY3R4XHRjdHggPSB7IC5jdXJfZm9saW8gPSBmb2xpbyB9O1xuIFxuLVx0Y3R4Lm9wcyA9IHhmc19nZXRfaW9tYXBfcmVhZF9vcHMoZm9saW8tXHUwMDNlbWFwcGluZyk7XG4rXHRjdHgub3BzID0geGZzX2dldF9pb21hcF9yZWFkX29wcyhmb2xpby1cdTAwM2VtYXBwaW5nLCBmb2xpb19wb3MoZm9saW8pKTtcbiBcdGlvbWFwX3JlYWRfZm9saW8oXHUwMDI2eGZzX3JlYWRfaW9tYXBfb3BzLCBcdTAwMjZjdHgsIE5VTEwpO1xuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTgwMiw3ICs4NTUsNyBAQCB4ZnNfdm1fcmVhZGFoZWFkKFxuIHtcbiBcdHN0cnVjdCBpb21hcF9yZWFkX2ZvbGlvX2N0eFx0Y3R4ID0geyAucmFjID0gcmFjIH07XG4gXG4tXHRjdHgub3BzID0geGZzX2dldF9pb21hcF9yZWFkX29wcyhyYWMtXHUwMDNlbWFwcGluZyksXG4rXHRjdHgub3BzID0geGZzX2dldF9pb21hcF9yZWFkX29wcyhyYWMtXHUwMDNlbWFwcGluZywgcmVhZGFoZWFkX3BvcyhyYWMpKTtcbiBcdGlvbWFwX3JlYWRhaGVhZChcdTAwMjZ4ZnNfcmVhZF9pb21hcF9vcHMsIFx1MDAyNmN0eCwgTlVMTCk7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfYm1hcF91dGlsLmMgYi9mcy94ZnMveGZzX2JtYXBfdXRpbC5jXG5pbmRleCAzYjlmMjYyZjhlOTEyOC4uYjM0ZjJmMjdjYzkzYTggMTAwNjQ0XG4tLS0gYS9mcy94ZnMveGZzX2JtYXBfdXRpbC5jXG4rKysgYi9mcy94ZnMveGZzX2JtYXBfdXRpbC5jXG5AQCAtMzEsNiArMzEsNyBAQFxuICNpbmNsdWRlIFwieGZzX3J0Yml0bWFwLmhcIlxuICNpbmNsdWRlIFwieGZzX3J0Z3JvdXAuaFwiXG4gI2luY2x1ZGUgXCJ4ZnNfem9uZV9hbGxvYy5oXCJcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9mc3Zlcml0eS5oXHUwMDNlXG4gXG4gLyogS2VybmVsIG9ubHkgQk1BUCByZWxhdGVkIGRlZmluaXRpb25zIGFuZCBmdW5jdGlvbnMgKi9cbiBcbkBAIC01NTMsNiArNTU0LDEzIEBAIHhmc19jYW5fZnJlZV9lb2ZibG9ja3MoXG4gXHRpZiAobGFzdF9mc2IgXHUwMDNjPSBlbmRfZnNiKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4rXHQvKlxuK1x0ICogTm90aGluZyB0byBjbGVhbiBvbiBmc3Zlcml0eSBpbm9kZXMgYXMgdGhleSBkb24ndCB1c2UgcHJlYWxsb2MgYW5kXG4rXHQgKiB0aGVyZSBubyBkZWxhbGxvYyBhcyBvbmx5IHdyaXR0ZW4gZGF0YSBpcyBmc3Zlcml0eSBtZXRhZGF0YVxuK1x0ICovXG4rXHRpZiAoSVNfVkVSSVRZKFZGU19JKGlwKSkpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbiBcdC8qXG4gXHQgKiBDaGVjayBpZiB0aGVyZSBpcyBhbiBwb3N0LUVPRiBleHRlbnQgdG8gZnJlZS4gIElmIHRoZXJlIGFyZSBhbnlcbiBcdCAqIGRlbGFsbG9jIGJsb2NrcyBhdHRhY2hlZCB0byB0aGUgaW5vZGUgKGRhdGEgZm9yayBkZWxhbGxvY1xuZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfZmlsZS5jIGIvZnMveGZzL3hmc19maWxlLmNcbmluZGV4IDg0NWE5N2M5YjA2MzBiLi5jYmExOTRkNjc4ZmM3NyAxMDA2NDRcbi0tLSBhL2ZzL3hmcy94ZnNfZmlsZS5jXG4rKysgYi9mcy94ZnMveGZzX2ZpbGUuY1xuQEAgLTM3LDYgKzM3LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9mYWR2aXNlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tb3VudC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZmlsZWxvY2suaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZzdmVyaXR5LmhcdTAwM2VcbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHhmc19maWxlX3ZtX29wcztcbiBcbkBAIC0yNDUsNiArMjQ2LDI1IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaW9tYXBfZGlvX29wcyB4ZnNfZGlvX3JlYWRfYm91bmNlX29wcyA9IHtcbiBcdC5iaW9fc2V0XHQ9IFx1MDAyNmlvbWFwX2lvZW5kX2Jpb3NldCxcbiB9O1xuIFxuK1NUQVRJQyBzc2l6ZV90XG4reGZzX2ZpbGVfYnVmZmVyZWRfcmVhZChcbitcdHN0cnVjdCBraW9jYlx0XHQqaW9jYixcbitcdHN0cnVjdCBpb3ZfaXRlclx0XHQqdG8pXG4re1xuK1x0c3RydWN0IHhmc19pbm9kZVx0KmlwID0gWEZTX0koZmlsZV9pbm9kZShpb2NiLVx1MDAzZWtpX2ZpbHApKTtcbitcdHNzaXplX3RcdFx0XHRyZXQ7XG4rXG4rXHR0cmFjZV94ZnNfZmlsZV9idWZmZXJlZF9yZWFkKGlvY2IsIHRvKTtcbitcbitcdHJldCA9IHhmc19pbG9ja19pb2NiKGlvY2IsIFhGU19JT0xPQ0tfU0hBUkVEKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXHRyZXQgPSBnZW5lcmljX2ZpbGVfcmVhZF9pdGVyKGlvY2IsIHRvKTtcbitcdHhmc19pdW5sb2NrKGlwLCBYRlNfSU9MT0NLX1NIQVJFRCk7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbiBTVEFUSUMgc3NpemVfdFxuIHhmc19maWxlX2Rpb19yZWFkKFxuIFx0c3RydWN0IGtpb2NiXHRcdCppb2NiLFxuQEAgLTI2NSw2ICsyODUsMTYgQEAgeGZzX2ZpbGVfZGlvX3JlYWQoXG4gXHRyZXQgPSB4ZnNfaWxvY2tfaW9jYihpb2NiLCBYRlNfSU9MT0NLX1NIQVJFRCk7XG4gXHRpZiAocmV0KVxuIFx0XHRyZXR1cm4gcmV0O1xuK1x0LypcbitcdCAqIFJlLWNoZWNrIHZlcml0eSBzdGF0dXMgYWZ0ZXIgYWNxdWlyaW5nIGxvY2suIFRoaXMgcHJldmVudHMgVE9DVE9VIGluXG4rXHQgKiB4ZnNfZmlsZV9yZWFkX2l0ZXIoKSB3aGlsZSBmYWxsaW5nIGJhY2sgZnJvbSBESU8gdG8gYnVmZmVyZWQgSS9PIGFzXG4rXHQgKiBub3cgd2UgYXJlIGhvbGRpbmcgYSBsb2NrXG4rXHQgKi9cbitcdGlmIChmc3Zlcml0eV9hY3RpdmUoVkZTX0koaXApKSkge1xuK1x0XHR4ZnNfaXVubG9jayhpcCwgWEZTX0lPTE9DS19TSEFSRUQpO1xuK1x0XHRpb2NiLVx1MDAzZWtpX2ZsYWdzIFx1MDAyNj0gfklPQ0JfRElSRUNUO1xuK1x0XHRyZXR1cm4geGZzX2ZpbGVfYnVmZmVyZWRfcmVhZChpb2NiLCB0byk7XG4rXHR9XG4gXHRpZiAobWFwcGluZ19zdGFibGVfd3JpdGVzKGlvY2ItXHUwMDNla2lfZmlscC1cdTAwM2VmX21hcHBpbmcpKSB7XG4gXHRcdGRpb19vcHMgPSBcdTAwMjZ4ZnNfZGlvX3JlYWRfYm91bmNlX29wcztcbiBcdFx0ZGlvX2ZsYWdzIHw9IElPTUFQX0RJT19CT1VOQ0U7XG5AQCAtMjgxLDcgKzMxMSw4IEBAIHhmc19maWxlX2RheF9yZWFkKFxuIFx0c3RydWN0IGtpb2NiXHRcdCppb2NiLFxuIFx0c3RydWN0IGlvdl9pdGVyXHRcdCp0bylcbiB7XG4tXHRzdHJ1Y3QgeGZzX2lub2RlXHQqaXAgPSBYRlNfSShpb2NiLVx1MDAzZWtpX2ZpbHAtXHUwMDNlZl9tYXBwaW5nLVx1MDAzZWhvc3QpO1xuK1x0c3RydWN0IGlub2RlXHRcdCppbm9kZSA9IGlvY2ItXHUwMDNla2lfZmlscC1cdTAwM2VmX21hcHBpbmctXHUwMDNlaG9zdDtcbitcdHN0cnVjdCB4ZnNfaW5vZGVcdCppcCA9IFhGU19JKGlub2RlKTtcbiBcdHNzaXplX3RcdFx0XHRyZXQgPSAwO1xuIFxuIFx0dHJhY2VfeGZzX2ZpbGVfZGF4X3JlYWQoaW9jYiwgdG8pO1xuQEAgLTI5OSwyNSArMzMwLDYgQEAgeGZzX2ZpbGVfZGF4X3JlYWQoXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbi1TVEFUSUMgc3NpemVfdFxuLXhmc19maWxlX2J1ZmZlcmVkX3JlYWQoXG4tXHRzdHJ1Y3Qga2lvY2JcdFx0KmlvY2IsXG4tXHRzdHJ1Y3QgaW92X2l0ZXJcdFx0KnRvKVxuLXtcbi1cdHN0cnVjdCB4ZnNfaW5vZGVcdCppcCA9IFhGU19JKGZpbGVfaW5vZGUoaW9jYi1cdTAwM2VraV9maWxwKSk7XG4tXHRzc2l6ZV90XHRcdFx0cmV0O1xuLVxuLVx0dHJhY2VfeGZzX2ZpbGVfYnVmZmVyZWRfcmVhZChpb2NiLCB0byk7XG4tXG4tXHRyZXQgPSB4ZnNfaWxvY2tfaW9jYihpb2NiLCBYRlNfSU9MT0NLX1NIQVJFRCk7XG4tXHRpZiAocmV0KVxuLVx0XHRyZXR1cm4gcmV0O1xuLVx0cmV0ID0gZ2VuZXJpY19maWxlX3JlYWRfaXRlcihpb2NiLCB0byk7XG4tXHR4ZnNfaXVubG9jayhpcCwgWEZTX0lPTE9DS19TSEFSRUQpO1xuLVxuLVx0cmV0dXJuIHJldDtcbi19XG4tXG4gU1RBVElDIHNzaXplX3RcbiB4ZnNfZmlsZV9yZWFkX2l0ZXIoXG4gXHRzdHJ1Y3Qga2lvY2JcdFx0KmlvY2IsXG5AQCAtMzMyLDYgKzM0NCwxNCBAQCB4ZnNfZmlsZV9yZWFkX2l0ZXIoXG4gXHRpZiAoeGZzX2lzX3NodXRkb3duKG1wKSlcbiBcdFx0cmV0dXJuIC1FSU87XG4gXG4rXHQvKlxuK1x0ICogSW4gY2FzZSBmcy12ZXJpdHkgaXMgZW5hYmxlZCwgd2UgYWxzbyBmYWxsYmFjayB0byB0aGUgYnVmZmVyZWQgcmVhZFxuK1x0ICogZnJvbSB0aGUgZGlyZWN0IHJlYWQgcGF0aC4gVGhlcmVmb3JlLCBJT0NCX0RJUkVDVCBpcyBzZXQgYW5kIG5lZWQgdG9cbitcdCAqIGJlIGNsZWFyZWQgKHNlZSBnZW5lcmljX2ZpbGVfcmVhZF9pdGVyKCkpXG4rXHQgKi9cbitcdGlmIChmc3Zlcml0eV9hY3RpdmUoaW5vZGUpKVxuK1x0XHRpb2NiLVx1MDAzZWtpX2ZsYWdzIFx1MDAyNj0gfklPQ0JfRElSRUNUO1xuK1xuIFx0aWYgKElTX0RBWChpbm9kZSkpXG4gXHRcdHJldCA9IHhmc19maWxlX2RheF9yZWFkKGlvY2IsIHRvKTtcbiBcdGVsc2UgaWYgKGlvY2ItXHUwMDNla2lfZmxhZ3MgXHUwMDI2IElPQ0JfRElSRUNUKVxuQEAgLTE3MDAsMTEgKzE3MjAsMTggQEAgeGZzX2ZpbGVfb3BlbihcbiBcdHN0cnVjdCBpbm9kZVx0Kmlub2RlLFxuIFx0c3RydWN0IGZpbGVcdCpmaWxlKVxuIHtcbitcdGludFx0XHRlcnJvcjtcbitcbiBcdGlmICh4ZnNfaXNfc2h1dGRvd24oWEZTX00oaW5vZGUtXHUwMDNlaV9zYikpKVxuIFx0XHRyZXR1cm4gLUVJTztcbiBcdGZpbGUtXHUwMDNlZl9tb2RlIHw9IEZNT0RFX05PV0FJVCB8IEZNT0RFX0NBTl9PRElSRUNUO1xuIFx0aWYgKHhmc19nZXRfYXRvbWljX3dyaXRlX21pbihYRlNfSShpbm9kZSkpIFx1MDAzZSAwKVxuIFx0XHRmaWxlLVx1MDAzZWZfbW9kZSB8PSBGTU9ERV9DQU5fQVRPTUlDX1dSSVRFO1xuK1xuK1x0ZXJyb3IgPSBmc3Zlcml0eV9maWxlX29wZW4oaW5vZGUsIGZpbGUpO1xuK1x0aWYgKGVycm9yKVxuK1x0XHRyZXR1cm4gZXJyb3I7XG4rXG4gXHRyZXR1cm4gZ2VuZXJpY19maWxlX29wZW4oaW5vZGUsIGZpbGUpO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2ZzdmVyaXR5LmMgYi9mcy94ZnMveGZzX2ZzdmVyaXR5LmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uOTczMjgxMWExNDQ0ZTZcbi0tLSAvZGV2L251bGxcbisrKyBiL2ZzL3hmcy94ZnNfZnN2ZXJpdHkuY1xuQEAgLTAsMCArMSw0NzMgQEBcbisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xuKy8qXG4rICogQ29weXJpZ2h0IChDKSAyMDI2IFJlZCBIYXQsIEluYy5cbisgKi9cbisjaW5jbHVkZSBcInhmc19wbGF0Zm9ybS5oXCJcbisjaW5jbHVkZSBcInhmc19mb3JtYXQuaFwiXG4rI2luY2x1ZGUgXCJ4ZnNfc2hhcmVkLmhcIlxuKyNpbmNsdWRlIFwieGZzX3RyYW5zX3Jlc3YuaFwiXG4rI2luY2x1ZGUgXCJ4ZnNfbW91bnQuaFwiXG4rI2luY2x1ZGUgXCJ4ZnNfZGFfZm9ybWF0LmhcIlxuKyNpbmNsdWRlIFwieGZzX2RhX2J0cmVlLmhcIlxuKyNpbmNsdWRlIFwieGZzX2lub2RlLmhcIlxuKyNpbmNsdWRlIFwieGZzX2xvZ19mb3JtYXQuaFwiXG4rI2luY2x1ZGUgXCJ4ZnNfYm1hcF91dGlsLmhcIlxuKyNpbmNsdWRlIFwieGZzX3RyYW5zLmhcIlxuKyNpbmNsdWRlIFwieGZzX3RyYWNlLmhcIlxuKyNpbmNsdWRlIFwieGZzX3F1b3RhLmhcIlxuKyNpbmNsdWRlIFwieGZzX2ZzdmVyaXR5LmhcIlxuKyNpbmNsdWRlIFwieGZzX2lvbWFwLmhcIlxuKyNpbmNsdWRlIFwieGZzX2Vycm9yLmhcIlxuKyNpbmNsdWRlIFwieGZzX2hlYWx0aC5oXCJcbisjaW5jbHVkZSBcInhmc19ibWFwLmhcIlxuKyNpbmNsdWRlIFwieGZzX2JtYXBfdXRpbC5oXCJcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9mc3Zlcml0eS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaW9tYXAuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BhZ2VtYXAuaFx1MDAzZVxuK1xuK2xvZmZfdFxuK3hmc19mc3Zlcml0eV9tZXRhZGF0YV9vZmZzZXQoXG4rXHRjb25zdCBzdHJ1Y3QgeGZzX2lub2RlXHQqaXApXG4re1xuK1x0cmV0dXJuIHJvdW5kX3VwKGlfc2l6ZV9yZWFkKFZGU19JQyhpcCkpLCBYRlNfRlNWRVJJVFlfU1RBUlRfQUxJR04pO1xuK31cbitcbitib29sXG4reGZzX2ZzdmVyaXR5X2lzX2ZpbGVfZGF0YShcbitcdGNvbnN0IHN0cnVjdCB4ZnNfaW5vZGVcdCppcCxcbitcdGxvZmZfdFx0XHRcdG9mZnNldClcbit7XG4rXHRyZXR1cm4gZnN2ZXJpdHlfYWN0aXZlKFZGU19JQyhpcCkpIFx1MDAyNlx1MDAyNlxuK1x0XHRcdG9mZnNldCBcdTAwM2MgeGZzX2ZzdmVyaXR5X21ldGFkYXRhX29mZnNldChpcCk7XG4rfVxuK1xuKy8qXG4rICogUmV0cmlldmUgdGhlIHZlcml0eSBkZXNjcmlwdG9yLlxuKyAqL1xuK3N0YXRpYyBpbnRcbit4ZnNfZnN2ZXJpdHlfZ2V0X2Rlc2NyaXB0b3IoXG4rXHRzdHJ1Y3QgaW5vZGVcdFx0Kmlub2RlLFxuK1x0dm9pZFx0XHRcdCpidWYsXG4rXHRzaXplX3RcdFx0XHRidWZfc2l6ZSlcbit7XG4rXHRzdHJ1Y3QgeGZzX2lub2RlXHQqaXAgPSBYRlNfSShpbm9kZSk7XG4rXHRzdHJ1Y3QgeGZzX21vdW50XHQqbXAgPSBpcC1cdTAwM2VpX21vdW50O1xuK1x0X19iZTMyXHRcdFx0ZF9kZXNjX3NpemU7XG4rXHR1MzJcdFx0XHRkZXNjX3NpemU7XG4rXHR1NjRcdFx0XHRkZXNjX3NpemVfcG9zO1xuK1x0aW50XHRcdFx0ZXJyb3I7XG4rXHR1NjRcdFx0XHRkZXNjX3BvcztcbitcdHN0cnVjdCB4ZnNfYm1idF9pcmVjXHRyZWM7XG4rXHRpbnRcdFx0XHRpc19lbXB0eTtcbitcdHVpbnQzMl90XHRcdGJsb2Nrc2l6ZSA9IGlfYmxvY2tzaXplKFZGU19JKGlwKSk7XG4rXHR4ZnNfZmlsZW9mZl90XHRcdGxhc3RfYmxvY2tfb2Zmc2V0O1xuK1xuK1x0QVNTRVJUKGlub2RlLVx1MDAzZWlfZmxhZ3MgXHUwMDI2IFNfVkVSSVRZKTtcbitcdHhmc19pbG9jayhpcCwgWEZTX0lMT0NLX1NIQVJFRCk7XG4rXHRlcnJvciA9IHhmc19ibWFwX2xhc3RfZXh0ZW50KE5VTEwsIGlwLCBYRlNfREFUQV9GT1JLLCBcdTAwMjZyZWMsIFx1MDAyNmlzX2VtcHR5KTtcbitcdHhmc19pdW5sb2NrKGlwLCBYRlNfSUxPQ0tfU0hBUkVEKTtcbitcdGlmIChlcnJvcilcbitcdFx0cmV0dXJuIGVycm9yO1xuK1xuK1x0aWYgKGlzX2VtcHR5KVxuK1x0XHRyZXR1cm4gLUVOT0RBVEE7XG4rXG4rXHRsYXN0X2Jsb2NrX29mZnNldCA9XG4rXHRcdFhGU19GU0JfVE9fQihtcCwgcmVjLmJyX3N0YXJ0b2ZmICsgcmVjLmJyX2Jsb2NrY291bnQpO1xuK1x0aWYgKGxhc3RfYmxvY2tfb2Zmc2V0IFx1MDAzYz0geGZzX2ZzdmVyaXR5X21ldGFkYXRhX29mZnNldChpcCkpXG4rXHRcdHJldHVybiAtRU5PREFUQTtcbitcbitcdGRlc2Nfc2l6ZV9wb3MgPSBsYXN0X2Jsb2NrX29mZnNldCAtIHNpemVvZihfX2JlMzIpO1xuK1x0ZXJyb3IgPSBmc3Zlcml0eV9wYWdlY2FjaGVfcmVhZChpbm9kZSwgKGNoYXIgKilcdTAwMjZkX2Rlc2Nfc2l6ZSxcbitcdFx0XHRzaXplb2YoZF9kZXNjX3NpemUpLCBkZXNjX3NpemVfcG9zKTtcbitcdGlmIChlcnJvcilcbitcdFx0cmV0dXJuIGVycm9yO1xuK1xuK1x0ZGVzY19zaXplID0gYmUzMl90b19jcHUoZF9kZXNjX3NpemUpO1xuK1x0aWYgKFhGU19JU19DT1JSVVBUKG1wLCBkZXNjX3NpemUgXHUwMDNlIEZTX1ZFUklUWV9NQVhfREVTQ1JJUFRPUl9TSVpFKSkge1xuK1x0XHR4ZnNfaW5vZGVfbWFya19zaWNrKFhGU19JKGlub2RlKSwgWEZTX1NJQ0tfSU5PX0ZTVkVSSVRZKTtcbitcdFx0cmV0dXJuIC1FUkFOR0U7XG4rXHR9XG4rXG4rXHRpZiAoWEZTX0lTX0NPUlJVUFQobXAsIGRlc2Nfc2l6ZSBcdTAwM2UgZGVzY19zaXplX3BvcykpIHtcbitcdFx0eGZzX2lub2RlX21hcmtfc2ljayhYRlNfSShpbm9kZSksIFhGU19TSUNLX0lOT19GU1ZFUklUWSk7XG4rXHRcdHJldHVybiAtRVJBTkdFO1xuK1x0fVxuK1xuK1x0aWYgKCFidWZfc2l6ZSlcbitcdFx0cmV0dXJuIGRlc2Nfc2l6ZTtcbitcbitcdGlmIChYRlNfSVNfQ09SUlVQVChtcCwgZGVzY19zaXplIFx1MDAzZSBidWZfc2l6ZSkpIHtcbitcdFx0eGZzX2lub2RlX21hcmtfc2ljayhYRlNfSShpbm9kZSksIFhGU19TSUNLX0lOT19GU1ZFUklUWSk7XG4rXHRcdHJldHVybiAtRVJBTkdFO1xuK1x0fVxuK1xuK1x0ZGVzY19wb3MgPSByb3VuZF9kb3duKGRlc2Nfc2l6ZV9wb3MgLSBkZXNjX3NpemUsIGJsb2Nrc2l6ZSk7XG4rXHRpZiAoZGVzY19wb3MgXHUwMDNjIHhmc19mc3Zlcml0eV9tZXRhZGF0YV9vZmZzZXQoaXApKSB7XG4rXHRcdHhmc19pbm9kZV9tYXJrX3NpY2soWEZTX0koaW5vZGUpLCBYRlNfU0lDS19JTk9fRlNWRVJJVFkpO1xuK1x0XHRyZXR1cm4gLUVSQU5HRTtcbitcdH1cbitcbitcdGVycm9yID0gZnN2ZXJpdHlfcGFnZWNhY2hlX3JlYWQoaW5vZGUsIGJ1ZiwgZGVzY19zaXplLCBkZXNjX3Bvcyk7XG4rXHRpZiAoZXJyb3IpXG4rXHRcdHJldHVybiBlcnJvcjtcbitcbitcdHJldHVybiBkZXNjX3NpemU7XG4rfVxuK1xuK3N0YXRpYyBpbnRcbit4ZnNfZnN2ZXJpdHlfd3JpdGVfZGVzY3JpcHRvcihcbitcdHN0cnVjdCBmaWxlXHRcdCpmaWxlLFxuK1x0Y29uc3Qgdm9pZFx0XHQqZGVzYyxcbitcdHUzMlx0XHRcdGRlc2Nfc2l6ZSxcbitcdHU2NFx0XHRcdG1lcmtsZV90cmVlX3NpemUpXG4re1xuK1x0aW50XHRcdFx0ZXJyb3I7XG4rXHRzdHJ1Y3QgaW5vZGVcdFx0Kmlub2RlID0gZmlsZV9pbm9kZShmaWxlKTtcbitcdHN0cnVjdCB4ZnNfaW5vZGVcdCppcCA9IFhGU19JKGlub2RlKTtcbitcdHVuc2lnbmVkIGludFx0XHRibGtzaXplID0gaXAtXHUwMDNlaV9tb3VudC1cdTAwM2VtX3NiLnNiX2Jsb2Nrc2l6ZTtcbitcdHU2NFx0XHRcdHRyZWVfbGFzdF9ibG9jayA9XG4rXHRcdFx0eGZzX2ZzdmVyaXR5X21ldGFkYXRhX29mZnNldChpcCkgKyBtZXJrbGVfdHJlZV9zaXplO1xuK1x0dTY0XHRcdFx0ZGVzY19wb3MgPVxuK1x0XHRcdHJvdW5kX3VwKHRyZWVfbGFzdF9ibG9jaywgWEZTX0ZTVkVSSVRZX1NUQVJUX0FMSUdOKTtcbitcdHU2NFx0XHRcdGRlc2NfZW5kID0gZGVzY19wb3MgKyBkZXNjX3NpemU7XG4rXHRfX2JlMzJcdFx0XHRkZXNjX3NpemVfZGlzayA9IGNwdV90b19iZTMyKGRlc2Nfc2l6ZSk7XG4rXHR1NjRcdFx0XHRkZXNjX3NpemVfcG9zID1cbitcdFx0XHRyb3VuZF91cChkZXNjX2VuZCArIHNpemVvZihkZXNjX3NpemVfZGlzayksIGJsa3NpemUpIC1cbitcdFx0XHRzaXplb2YoZGVzY19zaXplX2Rpc2spO1xuK1xuK1x0ZXJyb3IgPSBpb21hcF9mc3Zlcml0eV93cml0ZShmaWxlLCBkZXNjX3NpemVfcG9zLCBzaXplb2YoX19iZTMyKSxcbitcdFx0XHQoY29uc3Qgdm9pZCAqKVx1MDAyNmRlc2Nfc2l6ZV9kaXNrLFxuK1x0XHRcdFx1MDAyNnhmc19idWZmZXJlZF93cml0ZV9pb21hcF9vcHMsXG4rXHRcdFx0XHUwMDI2eGZzX2lvbWFwX3dyaXRlX29wcyk7XG4rXHRpZiAoZXJyb3IpXG4rXHRcdHJldHVybiBlcnJvcjtcbitcbitcdHJldHVybiBpb21hcF9mc3Zlcml0eV93cml0ZShmaWxlLCBkZXNjX3BvcywgZGVzY19zaXplLCBkZXNjLFxuK1x0XHRcdFx1MDAyNnhmc19idWZmZXJlZF93cml0ZV9pb21hcF9vcHMsXG4rXHRcdFx0XHUwMDI2eGZzX2lvbWFwX3dyaXRlX29wcyk7XG4rfVxuK1xuKy8qXG4rICogVHJ5IHRvIHJlbW92ZSBhbGwgdGhlIGZzdmVyaXR5IG1ldGFkYXRhIGFmdGVyIGEgZmFpbGVkIGVuYWJsZW1lbnQuXG4rICovXG4rc3RhdGljIGludFxuK3hmc19mc3Zlcml0eV9kZWxldGVfbWV0YWRhdGEoXG4rXHRzdHJ1Y3QgeGZzX2lub2RlXHQqaXApXG4re1xuK1x0c3RydWN0IHhmc190cmFuc1x0KnRwO1xuK1x0c3RydWN0IHhmc19tb3VudFx0Km1wID0gaXAtXHUwMDNlaV9tb3VudDtcbitcdGludFx0XHRcdGVycm9yO1xuK1xuK1x0ZXJyb3IgPSB4ZnNfdHJhbnNfYWxsb2MobXAsIFx1MDAyNk1fUkVTKG1wKS1cdTAwM2V0cl9pdHJ1bmNhdGUsIDAsIDAsIDAsIFx1MDAyNnRwKTtcbitcdGlmIChlcnJvcilcbitcdFx0cmV0dXJuIGVycm9yO1xuK1xuK1x0eGZzX2lsb2NrKGlwLCBYRlNfSUxPQ0tfRVhDTCk7XG4rXHR4ZnNfdHJhbnNfaWpvaW4odHAsIGlwLCAwKTtcbitcbitcdC8qXG4rXHQgKiBXZSByZW1vdmluZyBwb3N0IEVPRiBkYXRhLCBubyBuZWVkIHRvIHVwZGF0ZSBpX3NpemUgYXMgZnN2ZXJpdHlcbitcdCAqIGRpZG4ndCBtb3ZlIGlfc2l6ZSBpbiB0aGUgZmlyc3QgcGxhY2VcbitcdCAqL1xuK1x0ZXJyb3IgPSB4ZnNfaXRydW5jYXRlX2V4dGVudHMoXHUwMDI2dHAsIGlwLCBYRlNfREFUQV9GT1JLLCBYRlNfSVNJWkUoaXApKTtcbitcdGlmIChlcnJvcilcbitcdFx0Z290byBlcnJfY2FuY2VsO1xuK1xuK1x0ZXJyb3IgPSB4ZnNfdHJhbnNfY29tbWl0KHRwKTtcbitcdGlmIChlcnJvcilcbitcdFx0Z290byBvdXRfdW5sb2NrO1xuK291dF91bmxvY2s6XG4rXHR4ZnNfaXVubG9jayhpcCwgWEZTX0lMT0NLX0VYQ0wpO1xuK1x0cmV0dXJuIGVycm9yO1xuK1xuK2Vycl9jYW5jZWw6XG4rXHR4ZnNfdHJhbnNfY2FuY2VsKHRwKTtcbitcdHhmc19pdW5sb2NrKGlwLCBYRlNfSUxPQ0tfRVhDTCk7XG4rXHRyZXR1cm4gZXJyb3I7XG4rfVxuK1xuK3N0YXRpYyBpbnRcbit4ZnNfZnN2ZXJpdHlfY2FuY2VsX3Vud3JpdHRlbihcbitcdHN0cnVjdCB4ZnNfaW5vZGVcdCppcCxcbitcdGxvZmZfdFx0XHRcdHN0YXJ0LFxuK1x0bG9mZl90XHRcdFx0ZW5kKVxuK3tcbitcdHN0cnVjdCB4ZnNfbW91bnRcdCptcCA9IGlwLVx1MDAzZWlfbW91bnQ7XG4rXHRzdHJ1Y3QgeGZzX3RyYW5zXHQqdHA7XG4rXHR4ZnNfZmlsZW9mZl90XHRcdG9mZnNldF9mc2IgPSBYRlNfQl9UT19GU0IobXAsIHN0YXJ0KTtcbitcdHhmc19maWxlb2ZmX3RcdFx0ZW5kX2ZzYiA9IFhGU19CX1RPX0ZTQihtcCwgZW5kKTtcbitcdHN0cnVjdCB4ZnNfYm1idF9pcmVjXHRpbWFwO1xuK1x0aW50XHRcdFx0bmltYXBzO1xuK1x0aW50XHRcdFx0ZXJyb3IgPSAwO1xuK1x0aW50XHRcdFx0ZG9uZTtcbitcbitcbitcdHdoaWxlIChvZmZzZXRfZnNiIFx1MDAzYyBlbmRfZnNiKSB7XG4rXHRcdG5pbWFwcyA9IDE7XG4rXG4rXHRcdGVycm9yID0geGZzX3RyYW5zX2FsbG9jKG1wLCBcdTAwMjZNX1JFUyhtcCktXHUwMDNldHJfd3JpdGUsIDAsIDAsXG4rXHRcdFx0XHQwLCBcdTAwMjZ0cCk7XG4rXHRcdGlmIChlcnJvcilcbitcdFx0XHRyZXR1cm4gZXJyb3I7XG4rXG4rXHRcdHhmc19pbG9jayhpcCwgWEZTX0lMT0NLX0VYQ0wpO1xuK1x0XHRlcnJvciA9IHhmc19ibWFwaV9yZWFkKGlwLCBvZmZzZXRfZnNiLCBlbmRfZnNiIC0gb2Zmc2V0X2ZzYixcbitcdFx0XHRcdFx1MDAyNmltYXAsIFx1MDAyNm5pbWFwcywgMCk7XG4rXHRcdGlmIChlcnJvcilcbitcdFx0XHRnb3RvIG91dF9jYW5jZWw7XG4rXG4rXHRcdGlmIChuaW1hcHMgPT0gMClcbitcdFx0XHRnb3RvIG91dF9jYW5jZWw7XG4rXG4rXHRcdGlmIChpbWFwLmJyX3N0YXRlID09IFhGU19FWFRfVU5XUklUVEVOKSB7XG4rXHRcdFx0eGZzX3RyYW5zX2lqb2luKHRwLCBpcCwgWEZTX0lMT0NLX0VYQ0wpO1xuK1xuK1x0XHRcdGVycm9yID0geGZzX2J1bm1hcGkodHAsIGlwLCBpbWFwLmJyX3N0YXJ0b2ZmLFxuK1x0XHRcdFx0XHRpbWFwLmJyX2Jsb2NrY291bnQsIDAsIDEsIFx1MDAyNmRvbmUpO1xuK1x0XHRcdGlmIChlcnJvcilcbitcdFx0XHRcdGdvdG8gb3V0X2NhbmNlbDtcbitcbitcdFx0XHRlcnJvciA9IHhmc190cmFuc19jb21taXQodHApO1xuK1x0XHRcdGlmIChlcnJvcilcbitcdFx0XHRcdHJldHVybiBlcnJvcjtcbitcdFx0fSBlbHNlIHtcbitcdFx0XHR4ZnNfdHJhbnNfY2FuY2VsKHRwKTtcbitcdFx0XHR4ZnNfaXVubG9jayhpcCwgWEZTX0lMT0NLX0VYQ0wpO1xuK1x0XHR9XG4rXG4rXHRcdG9mZnNldF9mc2IgPSBpbWFwLmJyX3N0YXJ0b2ZmICsgaW1hcC5icl9ibG9ja2NvdW50O1xuK1x0fVxuK1xuK1x0cmV0dXJuIGVycm9yO1xuK291dF9jYW5jZWw6XG4rXHR4ZnNfdHJhbnNfY2FuY2VsKHRwKTtcbitcdHhmc19pdW5sb2NrKGlwLCBYRlNfSUxPQ0tfRVhDTCk7XG4rXHRyZXR1cm4gZXJyb3I7XG4rfVxuK1xuK1xuKy8qXG4rICogUHJlcGFyZSB0byBlbmFibGUgZnN2ZXJpdHkgYnkgY2xlYXJpbmcgb2xkIG1ldGFkYXRhLlxuKyAqL1xuK3N0YXRpYyBpbnRcbit4ZnNfZnN2ZXJpdHlfYmVnaW5fZW5hYmxlKFxuK1x0c3RydWN0IGZpbGVcdFx0KmZpbHApXG4re1xuK1x0c3RydWN0IGlub2RlXHRcdCppbm9kZSA9IGZpbGVfaW5vZGUoZmlscCk7XG4rXHRzdHJ1Y3QgeGZzX2lub2RlXHQqaXAgPSBYRlNfSShpbm9kZSk7XG4rXHRpbnRcdFx0XHRlcnJvcjtcbitcbitcdHhmc19hc3NlcnRfaWxvY2tlZChpcCwgWEZTX0lPTE9DS19FWENMKTtcbitcbitcdGlmIChJU19EQVgoaW5vZGUpIHx8IGlwLVx1MDAzZWlfZGlmbGFnczIgXHUwMDI2IFhGU19ESUZMQUcyX0RBWClcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRpZiAoaW5vZGUtXHUwMDNlaV9zaXplIFx1MDAzZSBYRlNfRlNWRVJJVFlfTEFSR0VTVF9GSUxFKVxuK1x0XHRyZXR1cm4gLUVGQklHO1xuK1xuK1x0LypcbitcdCAqIEZsdXNoIHBhZ2VjYWNoZSBiZWZvcmUgYnVpbGRpbmcgTWVya2xlIHRyZWUuIElub2RlIGlzIGxvY2tlZCBhbmQgbm9cbitcdCAqIGZ1cnRoZXIgd3JpdGVzIHdpbGwgaGFwcGVuIHRvIHRoZSBmaWxlIGV4Y2VwdCBmc3Zlcml0eSBtZXRhZGF0YVxuK1x0ICovXG4rXHRlcnJvciA9IGZpbGVtYXBfd3JpdGVfYW5kX3dhaXQoaW5vZGUtXHUwMDNlaV9tYXBwaW5nKTtcbitcdGlmIChlcnJvcilcbitcdFx0cmV0dXJuIGVycm9yO1xuK1xuK1x0aWYgKHhmc19pZmxhZ3NfdGVzdF9hbmRfc2V0KGlwLCBYRlNfVkVSSVRZX0NPTlNUUlVDVElPTikpXG4rXHRcdHJldHVybiAtRUJVU1k7XG4rXG4rXHRlcnJvciA9IHhmc19xbV9kcWF0dGFjaChpcCk7XG4rXHRpZiAoZXJyb3IpXG4rXHRcdGdvdG8gb3V0X2NsZWFyO1xuK1xuK1x0ZXJyb3IgPSB4ZnNfZnN2ZXJpdHlfZGVsZXRlX21ldGFkYXRhKGlwKTtcbitcdGlmIChlcnJvcilcbitcdFx0Z290byBvdXRfY2xlYXI7XG4rXHRyZXR1cm4gZXJyb3I7XG4rb3V0X2NsZWFyOlxuK1x0eGZzX2lmbGFnc19jbGVhcihpcCwgWEZTX1ZFUklUWV9DT05TVFJVQ1RJT04pO1xuK1x0cmV0dXJuIGVycm9yO1xuK31cbitcbisvKlxuKyAqIENvbXBsZXRlIChvciBmYWlsKSB0aGUgcHJvY2VzcyBvZiBlbmFibGluZyBmc3Zlcml0eS5cbisgKi9cbitzdGF0aWMgaW50XG4reGZzX2ZzdmVyaXR5X2VuZF9lbmFibGUoXG4rXHRzdHJ1Y3QgZmlsZVx0XHQqZmlsZSxcbitcdGNvbnN0IHZvaWRcdFx0KmRlc2MsXG4rXHRzaXplX3RcdFx0XHRkZXNjX3NpemUsXG4rXHR1NjRcdFx0XHRtZXJrbGVfdHJlZV9zaXplKVxuK3tcbitcdHN0cnVjdCBpbm9kZVx0XHQqaW5vZGUgPSBmaWxlX2lub2RlKGZpbGUpO1xuK1x0c3RydWN0IHhmc19pbm9kZVx0KmlwID0gWEZTX0koaW5vZGUpO1xuK1x0c3RydWN0IHhmc19tb3VudFx0Km1wID0gaXAtXHUwMDNlaV9tb3VudDtcbitcdHN0cnVjdCB4ZnNfdHJhbnNcdCp0cDtcbitcdGludFx0XHRcdGVycm9yID0gMDtcbitcdGxvZmZfdFx0XHRcdHJhbmdlX3N0YXJ0ID0geGZzX2ZzdmVyaXR5X21ldGFkYXRhX29mZnNldChpcCk7XG4rXG4rXHR4ZnNfYXNzZXJ0X2lsb2NrZWQoaXAsIFhGU19JT0xPQ0tfRVhDTCk7XG4rXG4rXHQvKiBmcy12ZXJpdHkgZmFpbGVkLCBqdXN0IGNsZWFudXAgKi9cbitcdGlmIChkZXNjID09IE5VTEwpIHtcbitcdFx0ZXJyb3IgPSB4ZnNfZnN2ZXJpdHlfZGVsZXRlX21ldGFkYXRhKGlwKTtcbitcdFx0Z290byBvdXQ7XG4rXHR9XG4rXG4rXHRlcnJvciA9IHhmc19mc3Zlcml0eV93cml0ZV9kZXNjcmlwdG9yKGZpbGUsIGRlc2MsIGRlc2Nfc2l6ZSxcbitcdFx0XHRtZXJrbGVfdHJlZV9zaXplKTtcbitcdGlmIChlcnJvcilcbitcdFx0Z290byBvdXQ7XG4rXG4rXHQvKlxuK1x0ICogV2FpdCBmb3IgTWVya2xlIHRyZWUgZ2V0IHdyaXR0ZW4gdG8gZGlzayBiZWZvcmUgc2V0dGluZyBvbi1kaXNrIGlub2RlXG4rXHQgKiBmbGFnIGFuZCBjbGVhcmluZyBYRlNfVkVSSVRZX0NPTlNUUlVDVElPTlxuK1x0ICovXG4rXHRlcnJvciA9IGZpbGVtYXBfd3JpdGVfYW5kX3dhaXRfcmFuZ2UoaW5vZGUtXHUwMDNlaV9tYXBwaW5nLCByYW5nZV9zdGFydCxcbitcdFx0XHRMTE9OR19NQVgpO1xuK1x0aWYgKGVycm9yKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdC8qXG4rXHQgKiBSZW1vdmUgdW53cml0dGVuIGV4dGVudHMgbGVmdCBieSBDT1cgcHJlYWxsb2NhdGlvbnMgYW5kIHdyaXRlXG4rXHQgKiBwcmVhbGxvY2F0aW9uIGluIHRoZSBtZXJrbGUgdHJlZSBob2xlcyBhbmQgcGFzdCBkZXNjcmlwdG9yXG4rXHQgKi9cbitcdGVycm9yID0geGZzX2ZzdmVyaXR5X2NhbmNlbF91bndyaXR0ZW4oaXAsIHJhbmdlX3N0YXJ0LCBMTE9OR19NQVgpO1xuK1x0aWYgKGVycm9yKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdC8qXG4rXHQgKiBQcm9hY3RpdmVseSBkcm9wIGFueSBkZWxheWVkIGFsbG9jYXRpb25zIGluIENPVyBmb3JrLCB0aGUgZnN2ZXJpdHlcbitcdCAqIGZpbGVzIGFyZSByZWFkLW9ubHlcbitcdCAqL1xuK1x0aWYgKHhmc19pc19jb3dfaW5vZGUoaXApKSB7XG4rXHRcdGlmICghaXAtXHUwMDNlaV9jb3dmcClcbitcdFx0XHR4ZnNfaWZvcmtfaW5pdF9jb3coaXApO1xuK1x0XHR4ZnNfYm1hcF9wdW5jaF9kZWxhbGxvY19yYW5nZShpcCwgWEZTX0NPV19GT1JLLCAwLCBMTE9OR19NQVgsXG4rXHRcdFx0XHROVUxMKTtcbitcdH1cbitcbitcdC8qXG4rXHQgKiBTZXQgZnN2ZXJpdHkgaW5vZGUgZmxhZ1xuK1x0ICovXG4rXHRlcnJvciA9IHhmc190cmFuc19hbGxvY19pbm9kZShpcCwgXHUwMDI2TV9SRVMobXApLVx1MDAzZXRyX2ljaGFuZ2UsXG4rXHRcdFx0MCwgMCwgZmFsc2UsIFx1MDAyNnRwKTtcbitcdGlmIChlcnJvcilcbitcdFx0Z290byBvdXQ7XG4rXG4rXHQvKlxuK1x0ICogRW5zdXJlIHRoYXQgd2UndmUgcGVyc2lzdGVkIHRoZSB2ZXJpdHkgaW5mb3JtYXRpb24gYmVmb3JlIHdlIGVuYWJsZVxuK1x0ICogaXQgb24gdGhlIGlub2RlIGFuZCB0ZWxsIHRoZSBjYWxsZXIgd2UgaGF2ZSBzZWFsZWQgdGhlIGlub2RlLlxuK1x0ICovXG4rXHRpcC1cdTAwM2VpX2RpZmxhZ3MyIHw9IFhGU19ESUZMQUcyX1ZFUklUWTtcbitcbitcdHhmc190cmFuc19sb2dfaW5vZGUodHAsIGlwLCBYRlNfSUxPR19DT1JFKTtcbitcdHhmc190cmFuc19zZXRfc3luYyh0cCk7XG4rXG4rXHRlcnJvciA9IHhmc190cmFuc19jb21taXQodHApO1xuK1x0eGZzX2l1bmxvY2soaXAsIFhGU19JTE9DS19FWENMKTtcbitcbitcdGlmICghZXJyb3IpXG4rXHRcdGlub2RlLVx1MDAzZWlfZmxhZ3MgfD0gU19WRVJJVFk7XG4rXG4rb3V0OlxuK1x0aWYgKGVycm9yKSB7XG4rXHRcdGludFx0ZXJyb3IyO1xuK1xuK1x0XHRlcnJvcjIgPSB4ZnNfZnN2ZXJpdHlfZGVsZXRlX21ldGFkYXRhKGlwKTtcbitcdFx0aWYgKGVycm9yMilcbitcdFx0XHR4ZnNfYWxlcnQoaXAtXHUwMDNlaV9tb3VudCxcbitcImlubyAweCVsbHggZmFpbGVkIHRvIGNsZWFuIHVwIG5ldyBmc3Zlcml0eSBtZXRhZGF0YSwgZXJyICVkXCIsXG4rXHRcdFx0XHRcdElfSU5PKGlwKSwgZXJyb3IyKTtcbitcdH1cbitcbitcdHhmc19pZmxhZ3NfY2xlYXIoaXAsIFhGU19WRVJJVFlfQ09OU1RSVUNUSU9OKTtcbitcdHJldHVybiBlcnJvcjtcbit9XG4rXG4rLypcbisgKiBSZXRyaWV2ZSBhIG1lcmtsZSB0cmVlIGJsb2NrLlxuKyAqL1xuK3N0YXRpYyBzdHJ1Y3QgcGFnZSAqXG4reGZzX2ZzdmVyaXR5X3JlYWRfbWVya2xlKFxuK1x0c3RydWN0IGlub2RlXHRcdCppbm9kZSxcbitcdHBnb2ZmX3RcdFx0XHRpbmRleClcbit7XG4rXHRpbmRleCArPSB4ZnNfZnN2ZXJpdHlfbWV0YWRhdGFfb2Zmc2V0KFhGU19JKGlub2RlKSkgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4rXG4rXHRyZXR1cm4gZ2VuZXJpY19yZWFkX21lcmtsZV90cmVlX3BhZ2UoaW5vZGUsIGluZGV4KTtcbit9XG4rXG4rLypcbisgKiBSZXRyaWV2ZSBhIG1lcmtsZSB0cmVlIGJsb2NrLlxuKyAqL1xuK3N0YXRpYyB2b2lkXG4reGZzX2ZzdmVyaXR5X3JlYWRhaGVhZF9tZXJrbGVfdHJlZShcbitcdHN0cnVjdCBpbm9kZVx0XHQqaW5vZGUsXG4rXHRwZ29mZl90XHRcdFx0aW5kZXgsXG4rXHR1bnNpZ25lZCBsb25nXHRcdG5yX3BhZ2VzKVxuK3tcbitcdGluZGV4ICs9IHhmc19mc3Zlcml0eV9tZXRhZGF0YV9vZmZzZXQoWEZTX0koaW5vZGUpKSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbitcbitcdGdlbmVyaWNfcmVhZGFoZWFkX21lcmtsZV90cmVlKGlub2RlLCBpbmRleCwgbnJfcGFnZXMpO1xuK31cbitcbisvKlxuKyAqIFdyaXRlIGEgbWVya2xlIHRyZWUgYmxvY2suXG4rICovXG4rc3RhdGljIGludFxuK3hmc19mc3Zlcml0eV93cml0ZV9tZXJrbGUoXG4rXHRzdHJ1Y3QgZmlsZVx0XHQqZmlsZSxcbitcdGNvbnN0IHZvaWRcdFx0KmJ1ZixcbitcdHU2NFx0XHRcdHBvcyxcbitcdHVuc2lnbmVkIGludFx0XHRzaXplLFxuK1x0Y29uc3QgdThcdFx0Knplcm9fZGlnZXN0LFxuK1x0dW5zaWduZWQgaW50XHRcdGRpZ2VzdF9zaXplKVxuK3tcbitcdHN0cnVjdCBpbm9kZVx0XHQqaW5vZGUgPSBmaWxlX2lub2RlKGZpbGUpO1xuK1x0c3RydWN0IHhmc19pbm9kZVx0KmlwID0gWEZTX0koaW5vZGUpO1xuK1x0bG9mZl90XHRcdFx0cG9zaXRpb24gPSBwb3MgK1xuK1x0XHR4ZnNfZnN2ZXJpdHlfbWV0YWRhdGFfb2Zmc2V0KGlwKTtcbitcbitcdGlmIChwb3NpdGlvbiArIHNpemUgXHUwMDNlIGlub2RlLVx1MDAzZWlfc2ItXHUwMDNlc19tYXhieXRlcylcbitcdFx0cmV0dXJuIC1FRkJJRztcbitcbitcdC8qXG4rXHQgKiBJZiB0aGlzIGlzIGEgYmxvY2sgZnVsbCBvZiBoYXNoZXMgb2YgemVyb2VkIGJsb2NrcywgZG9uJ3QgYm90aGVyXG4rXHQgKiBzdG9yaW5nIHRoZSBibG9jay4gV2UgY2FuIHN5bnRoZXNpemUgdGhlbSBsYXRlci5cbitcdCAqXG4rXHQgKiBIb3dldmVyLCBkbyB0aGlzIG9ubHkgaW4gY2FzZSBNZXJrbGUgdHJlZSBibG9jayA9PSBmcyBibG9jayBzaXplLlxuK1x0ICogSW9tYXAgc3ludGhlc2l6ZXMgdGhlc2UgYmxvY2tzIGJhc2VkIG9uIGhvbGVzIGluIHRoZSBtZXJrbGUgdHJlZS4gV2VcbitcdCAqIHdvbid0IGJlIGFibGUgdG8gdGVsbCBpZiBzb21ldGhpbmcgbmVlZCB0byBiZSBzeW50aGVzaXplcyBmb3IgdGhlXG4rXHQgKiByYW5nZSBpbiB0aGUgZnMgYmxvY2suIEZvciBleGFtcGxlLCBmb3IgNGsgZmlsZXN5c3RlbSBibG9ja1xuK1x0ICpcbitcdCAqXHRbIDFrIHwgemVybyBoYXNoZXMgfCB6ZXJvIGhhc2hlcyB8IDFrIF1cbitcdCAqXG4rXHQgKiBJb21hcCB3b24ndCBrbm93IGFib3V0IHRoZXNlIGVtcHR5IGJsb2Nrcy5cbitcdCAqL1xuK1x0aWYgKHNpemUgPT0gaXAtXHUwMDNlaV9tb3VudC1cdTAwM2VtX3NiLnNiX2Jsb2Nrc2l6ZSBcdTAwMjZcdTAwMjZcbitcdFx0XHQvKlxuK1x0XHRcdCAqIEZpcnN0IGRpZ2VzdCBpcyB6ZXJvX2RpZ2VzdFxuK1x0XHRcdCAqL1xuK1x0XHRcdG1lbWNtcChidWYsIHplcm9fZGlnZXN0LCBkaWdlc3Rfc2l6ZSkgPT0gMCBcdTAwMjZcdTAwMjZcbitcdFx0XHQvKlxuK1x0XHRcdCAqIEV2ZXJ5IGRpZ2VzdCBpcyBzYW1lIGFzIHByZXZpb3VzLCB0aHVzIGFsbCBhcmVcbitcdFx0XHQgKiB6ZXJvX2RpZ2VzdFxuK1x0XHRcdCAqL1xuK1x0XHRcdG1lbWNtcChidWYgKyBkaWdlc3Rfc2l6ZSwgYnVmLCBzaXplIC0gZGlnZXN0X3NpemUpID09IDApXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0cmV0dXJuIGlvbWFwX2ZzdmVyaXR5X3dyaXRlKGZpbGUsIHBvc2l0aW9uLCBzaXplLCBidWYsXG4rXHRcdFx0XHUwMDI2eGZzX2J1ZmZlcmVkX3dyaXRlX2lvbWFwX29wcyxcbitcdFx0XHRcdTAwMjZ4ZnNfaW9tYXBfd3JpdGVfb3BzKTtcbit9XG4rXG4rY29uc3Qgc3RydWN0IGZzdmVyaXR5X29wZXJhdGlvbnMgeGZzX2ZzdmVyaXR5X29wcyA9IHtcbitcdC5iZWdpbl9lbmFibGVfdmVyaXR5XHRcdD0geGZzX2ZzdmVyaXR5X2JlZ2luX2VuYWJsZSxcbitcdC5lbmRfZW5hYmxlX3Zlcml0eVx0XHQ9IHhmc19mc3Zlcml0eV9lbmRfZW5hYmxlLFxuK1x0LmdldF92ZXJpdHlfZGVzY3JpcHRvclx0XHQ9IHhmc19mc3Zlcml0eV9nZXRfZGVzY3JpcHRvcixcbitcdC5yZWFkX21lcmtsZV90cmVlX3BhZ2VcdFx0PSB4ZnNfZnN2ZXJpdHlfcmVhZF9tZXJrbGUsXG4rXHQucmVhZGFoZWFkX21lcmtsZV90cmVlXHRcdD0geGZzX2ZzdmVyaXR5X3JlYWRhaGVhZF9tZXJrbGVfdHJlZSxcbitcdC53cml0ZV9tZXJrbGVfdHJlZV9ibG9ja1x0PSB4ZnNfZnN2ZXJpdHlfd3JpdGVfbWVya2xlLFxuK307XG5kaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19mc3Zlcml0eS5oIGIvZnMveGZzL3hmc19mc3Zlcml0eS5oXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjZhOTgxZTIwYTc1YmI4XG4tLS0gL2Rldi9udWxsXG4rKysgYi9mcy94ZnMveGZzX2ZzdmVyaXR5LmhcbkBAIC0wLDAgKzEsMjggQEBcbisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xuKy8qXG4rICogQ29weXJpZ2h0IChDKSAyMDI2IFJlZCBIYXQsIEluYy5cbisgKi9cbisjaWZuZGVmIF9fWEZTX0ZTVkVSSVRZX0hfX1xuKyNkZWZpbmUgX19YRlNfRlNWRVJJVFlfSF9fXG4rXG4rI2luY2x1ZGUgXCJ4ZnNfcGxhdGZvcm0uaFwiXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvZnN2ZXJpdHkuaFx1MDAzZVxuK1xuKyNpZmRlZiBDT05GSUdfRlNfVkVSSVRZXG4rZXh0ZXJuIGNvbnN0IHN0cnVjdCBmc3Zlcml0eV9vcGVyYXRpb25zIHhmc19mc3Zlcml0eV9vcHM7XG4rbG9mZl90IHhmc19mc3Zlcml0eV9tZXRhZGF0YV9vZmZzZXQoY29uc3Qgc3RydWN0IHhmc19pbm9kZSAqaXApO1xuK2Jvb2wgeGZzX2ZzdmVyaXR5X2lzX2ZpbGVfZGF0YShjb25zdCBzdHJ1Y3QgeGZzX2lub2RlICppcCwgbG9mZl90IG9mZnNldCk7XG4rI2Vsc2VcbitzdGF0aWMgaW5saW5lIGxvZmZfdCB4ZnNfZnN2ZXJpdHlfbWV0YWRhdGFfb2Zmc2V0KGNvbnN0IHN0cnVjdCB4ZnNfaW5vZGUgKmlwKVxuK3tcbitcdFdBUk5fT05fT05DRSgxKTtcbitcdHJldHVybiBVTExPTkdfTUFYO1xuK31cbitzdGF0aWMgaW5saW5lIGJvb2wgeGZzX2ZzdmVyaXR5X2lzX2ZpbGVfZGF0YShjb25zdCBzdHJ1Y3QgeGZzX2lub2RlICppcCxcbitcdFx0XHRcdFx0ICAgIGxvZmZfdCBvZmZzZXQpXG4re1xuK1x0cmV0dXJuIGZhbHNlO1xuK31cbisjZW5kaWZcdC8qIENPTkZJR19GU19WRVJJVFkgKi9cbitcbisjZW5kaWZcdC8qIF9fWEZTX0ZTVkVSSVRZX0hfXyAqL1xuZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfaGVhbHRoLmMgYi9mcy94ZnMveGZzX2hlYWx0aC5jXG5pbmRleCAyMzliODQzZTgzZDQyYS4uYmU2Njc2MGZiMTIwZjcgMTAwNjQ0XG4tLS0gYS9mcy94ZnMveGZzX2hlYWx0aC5jXG4rKysgYi9mcy94ZnMveGZzX2hlYWx0aC5jXG5AQCAtNjI1LDYgKzYyNSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaW9jdGxfc2lja19tYXAgaW5vX21hcFtdID0ge1xuIFx0eyBYRlNfU0lDS19JTk9fRElSX1pBUFBFRCxcdFhGU19CU19TSUNLX0RJUiB9LFxuIFx0eyBYRlNfU0lDS19JTk9fU1lNTElOS19aQVBQRUQsXHRYRlNfQlNfU0lDS19TWU1MSU5LIH0sXG4gXHR7IFhGU19TSUNLX0lOT19ESVJUUkVFLFx0WEZTX0JTX1NJQ0tfRElSVFJFRSB9LFxuK1x0eyBYRlNfU0lDS19JTk9fRlNWRVJJVFksXHRYRlNfQlNfU0lDS19GU1ZFUklUWSB9LFxuIH07XG4gXG4gLyogRmlsbCBvdXQgYnVsa3N0YXQgaGVhbHRoIGluZm8uICovXG5kaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19pbm9kZS5oIGIvZnMveGZzL3hmc19pbm9kZS5oXG5pbmRleCAzNGMxMDM4ZWJmY2RlMS4uMTdjZTA4MzU5MWY0MDggMTAwNjQ0XG4tLS0gYS9mcy94ZnMveGZzX2lub2RlLmhcbisrKyBiL2ZzL3hmcy94ZnNfaW5vZGUuaFxuQEAgLTQxOSw2ICs0MTksMTIgQEAgc3RhdGljIGlubGluZSBib29sIHhmc19pbm9kZV9jYW5fc3dfYXRvbWljX3dyaXRlKGNvbnN0IHN0cnVjdCB4ZnNfaW5vZGUgKmlwKVxuICAqL1xuICNkZWZpbmUgWEZTX0lSRU1BUFBJTkdcdFx0KDFVIFx1MDAzY1x1MDAzYyAxNSlcbiBcbisvKlxuKyAqIGZzLXZlcml0eSdzIE1lcmtsZSB0cmVlIGlzIHVuZGVyIGNvbnN0cnVjdGlvbi4gVGhlIGZpbGUgaXMgcmVhZC1vbmx5LCB0aGVcbisgKiBvbmx5IHdyaXRlcyBoYXBwZW5pbmcgYXJlIGZvciB0aGUgZnN2ZXJpdHkgbWV0YWRhdGEuXG4rICovXG4rI2RlZmluZSBYRlNfVkVSSVRZX0NPTlNUUlVDVElPTlx0KDFVIFx1MDAzY1x1MDAzYyAxNilcbitcbiAvKiBBbGwgaW5vZGUgc3RhdGUgZmxhZ3MgcmVsYXRlZCB0byBpbm9kZSByZWNsYWltLiAqL1xuICNkZWZpbmUgWEZTX0FMTF9JUkVDTEFJTV9GTEFHU1x0KFhGU19JUkVDTEFJTUFCTEUgfCBcXFxuIFx0XHRcdFx0IFhGU19JUkVDTEFJTSB8IFxcXG5kaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19pb2N0bC5jIGIvZnMveGZzL3hmc19pb2N0bC5jXG5pbmRleCAxYjUzNzAxYmViZWExYS4uZmM3ODYwYThiNWFiYjEgMTAwNjQ0XG4tLS0gYS9mcy94ZnMveGZzX2lvY3RsLmNcbisrKyBiL2ZzL3hmcy94ZnNfaW9jdGwuY1xuQEAgLTQ5LDYgKzQ5LDcgQEBcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tb3VudC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZmlsZWF0dHIuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZzdmVyaXR5LmhcdTAwM2VcbiBcbiAvKiBSZXR1cm4gMCBvbiBzdWNjZXNzIG9yIHBvc2l0aXZlIGVycm9yICovXG4gaW50XG5AQCAtMTQ2Niw2ICsxNDY3LDE5IEBAIHhmc19maWxlX2lvY3RsKFxuIFx0Y2FzZSBYRlNfSU9DX1ZFUklGWV9NRURJQTpcbiBcdFx0cmV0dXJuIHhmc19pb2NfdmVyaWZ5X21lZGlhKGZpbHAsIGFyZyk7XG4gXG4rXHRjYXNlIEZTX0lPQ19FTkFCTEVfVkVSSVRZOlxuK1x0XHRpZiAoIXhmc19oYXNfdmVyaXR5KG1wKSlcbitcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHRcdHJldHVybiBmc3Zlcml0eV9pb2N0bF9lbmFibGUoZmlscCwgYXJnKTtcbitcdGNhc2UgRlNfSU9DX01FQVNVUkVfVkVSSVRZOlxuK1x0XHRpZiAoIXhmc19oYXNfdmVyaXR5KG1wKSlcbitcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHRcdHJldHVybiBmc3Zlcml0eV9pb2N0bF9tZWFzdXJlKGZpbHAsIGFyZyk7XG4rXHRjYXNlIEZTX0lPQ19SRUFEX1ZFUklUWV9NRVRBREFUQTpcbitcdFx0aWYgKCF4ZnNfaGFzX3Zlcml0eShtcCkpXG4rXHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1x0XHRyZXR1cm4gZnN2ZXJpdHlfaW9jdGxfcmVhZF9tZXRhZGF0YShmaWxwLCBhcmcpO1xuK1xuIFx0ZGVmYXVsdDpcbiBcdFx0cmV0dXJuIC1FTk9UVFk7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19pb21hcC5jIGIvZnMveGZzL3hmc19pb21hcC5jXG5pbmRleCAyMjVjM2RlODhkMDNiMS4uZmJhNTE5MDI0MTZiMDIgMTAwNjQ0XG4tLS0gYS9mcy94ZnMveGZzX2lvbWFwLmNcbisrKyBiL2ZzL3hmcy94ZnNfaW9tYXAuY1xuQEAgLTMyLDYgKzMyLDggQEBcbiAjaW5jbHVkZSBcInhmc19ydGJpdG1hcC5oXCJcbiAjaW5jbHVkZSBcInhmc19pY2FjaGUuaFwiXG4gI2luY2x1ZGUgXCJ4ZnNfem9uZV9hbGxvYy5oXCJcbisjaW5jbHVkZSBcInhmc19mc3Zlcml0eS5oXCJcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9mc3Zlcml0eS5oXHUwMDNlXG4gXG4gI2RlZmluZSBYRlNfQUxMT0NfQUxJR04obXAsIG9mZikgXFxcbiBcdCgoKG9mZikgXHUwMDNlXHUwMDNlIG1wLVx1MDAzZW1fYWxsb2NzaXplX2xvZykgXHUwMDNjXHUwMDNjIG1wLVx1MDAzZW1fYWxsb2NzaXplX2xvZylcbkBAIC0xNTg5LDcgKzE1OTEsOCBAQCB4ZnNfem9uZWRfYnVmZmVyZWRfd3JpdGVfaW9tYXBfYmVnaW4oXG4gXHRsb2ZmX3RcdFx0XHRjb3VudCxcbiBcdHVuc2lnbmVkXHRcdGZsYWdzLFxuIFx0c3RydWN0IGlvbWFwXHRcdCppb21hcCxcbi1cdHN0cnVjdCBpb21hcFx0XHQqc3JjbWFwKVxuK1x0c3RydWN0IGlvbWFwXHRcdCpzcmNtYXAsXG4rXHR1MTZcdFx0XHRpb21hcF9mbGFncylcbiB7XG4gXHRzdHJ1Y3QgaW9tYXBfaXRlclx0Kml0ZXIgPVxuIFx0XHRjb250YWluZXJfb2YoaW9tYXAsIHN0cnVjdCBpb21hcF9pdGVyLCBpb21hcCk7XG5AQCAtMTU5OSw3ICsxNjAyLDYgQEAgeGZzX3pvbmVkX2J1ZmZlcmVkX3dyaXRlX2lvbWFwX2JlZ2luKFxuIFx0c3RydWN0IHhmc19tb3VudFx0Km1wID0gaXAtXHUwMDNlaV9tb3VudDtcbiBcdHhmc19maWxlb2ZmX3RcdFx0b2Zmc2V0X2ZzYiA9IFhGU19CX1RPX0ZTQlQobXAsIG9mZnNldCk7XG4gXHR4ZnNfZmlsZW9mZl90XHRcdGVuZF9mc2IgPSB4ZnNfaW9tYXBfZW5kX2ZzYihtcCwgb2Zmc2V0LCBjb3VudCk7XG4tXHR1MTZcdFx0XHRpb21hcF9mbGFncyA9IElPTUFQX0ZfU0hBUkVEO1xuIFx0dW5zaWduZWQgaW50XHRcdGxvY2ttb2RlID0gWEZTX0lMT0NLX0VYQ0w7XG4gXHR4ZnNfZmlsYmxrc190XHRcdGNvdW50X2ZzYjtcbiBcdHhmc19leHRsZW5fdFx0XHRpbmRsZW47XG5AQCAtMTYwNyw2ICsxNjA5LDggQEAgeGZzX3pvbmVkX2J1ZmZlcmVkX3dyaXRlX2lvbWFwX2JlZ2luKFxuIFx0c3RydWN0IHhmc19pZXh0X2N1cnNvclx0aWN1cjtcbiBcdGludFx0XHRcdGVycm9yID0gMDtcbiBcbitcdGlvbWFwX2ZsYWdzID0gaW9tYXBfZmxhZ3MgfCBJT01BUF9GX1NIQVJFRDtcbitcbiBcdEFTU0VSVCgheGZzX2dldF9leHRzel9oaW50KGlwKSk7XG4gXHRBU1NFUlQoIShmbGFncyBcdTAwMjYgSU9NQVBfVU5TSEFSRSkpO1xuIFx0QVNTRVJUKGFjKTtcbkBAIC0xODAzLDkgKzE4MDcsMTIgQEAgeGZzX2J1ZmZlcmVkX3dyaXRlX2lvbWFwX2JlZ2luKFxuIFx0aWYgKHhmc19pc19zaHV0ZG93bihtcCkpXG4gXHRcdHJldHVybiAtRUlPO1xuIFxuK1x0aWYgKHhmc19pZmxhZ3NfdGVzdChpcCwgWEZTX1ZFUklUWV9DT05TVFJVQ1RJT04pKVxuK1x0XHRpb21hcF9mbGFncyB8PSBJT01BUF9GX0ZTVkVSSVRZO1xuK1xuIFx0aWYgKHhmc19pc196b25lZF9pbm9kZShpcCkpXG4gXHRcdHJldHVybiB4ZnNfem9uZWRfYnVmZmVyZWRfd3JpdGVfaW9tYXBfYmVnaW4oaW5vZGUsIG9mZnNldCxcbi1cdFx0XHRcdGNvdW50LCBmbGFncywgaW9tYXAsIHNyY21hcCk7XG4rXHRcdFx0XHRjb3VudCwgZmxhZ3MsIGlvbWFwLCBzcmNtYXAsIGlvbWFwX2ZsYWdzKTtcbiBcbiBcdC8qIHdlIGNhbid0IHVzZSBkZWxheWVkIGFsbG9jYXRpb25zIHdoZW4gdXNpbmcgZXh0ZW50IHNpemUgaGludHMgKi9cbiBcdGlmICh4ZnNfZ2V0X2V4dHN6X2hpbnQoaXApKVxuQEAgLTIxOTEsMTIgKzIxOTgsMTcgQEAgeGZzX3JlYWRfaW9tYXBfYmVnaW4oXG4gXHRib29sXHRcdFx0c2hhcmVkID0gZmFsc2U7XG4gXHR1bnNpZ25lZCBpbnRcdFx0bG9ja21vZGUgPSBYRlNfSUxPQ0tfU0hBUkVEO1xuIFx0dTY0XHRcdFx0c2VxO1xuK1x0dW5zaWduZWQgaW50XHRcdGlvbWFwX2ZsYWdzID0gMDtcbiBcbiBcdEFTU0VSVCghKGZsYWdzIFx1MDAyNiAoSU9NQVBfV1JJVEUgfCBJT01BUF9aRVJPKSkpO1xuIFxuIFx0aWYgKHhmc19pc19zaHV0ZG93bihtcCkpXG4gXHRcdHJldHVybiAtRUlPO1xuIFxuK1x0aWYgKGZzdmVyaXR5X2FjdGl2ZShpbm9kZSkgXHUwMDI2XHUwMDI2XG4rXHQgICAgKG9mZnNldCBcdTAwM2U9IHhmc19mc3Zlcml0eV9tZXRhZGF0YV9vZmZzZXQoaXApKSlcbitcdFx0aW9tYXBfZmxhZ3MgfD0gSU9NQVBfRl9GU1ZFUklUWTtcbitcbiBcdGVycm9yID0geGZzX2lsb2NrX2Zvcl9pb21hcChpcCwgZmxhZ3MsIFx1MDAyNmxvY2ttb2RlKTtcbiBcdGlmIChlcnJvcilcbiBcdFx0cmV0dXJuIGVycm9yO1xuQEAgLTIyMTAsOCArMjIyMiw5IEBAIHhmc19yZWFkX2lvbWFwX2JlZ2luKFxuIFx0aWYgKGVycm9yKVxuIFx0XHRyZXR1cm4gZXJyb3I7XG4gXHR0cmFjZV94ZnNfaW9tYXBfZm91bmQoaXAsIG9mZnNldCwgbGVuZ3RoLCBYRlNfREFUQV9GT1JLLCBcdTAwMjZpbWFwKTtcbi1cdHJldHVybiB4ZnNfYm1idF90b19pb21hcChpcCwgaW9tYXAsIFx1MDAyNmltYXAsIGZsYWdzLFxuLVx0XHRcdFx0IHNoYXJlZCA/IElPTUFQX0ZfU0hBUkVEIDogMCwgc2VxKTtcbitcdGlvbWFwX2ZsYWdzIHw9IHNoYXJlZCA/IElPTUFQX0ZfU0hBUkVEIDogMDtcbitcbitcdHJldHVybiB4ZnNfYm1idF90b19pb21hcChpcCwgaW9tYXAsIFx1MDAyNmltYXAsIGZsYWdzLCBpb21hcF9mbGFncywgc2VxKTtcbiB9XG4gXG4gY29uc3Qgc3RydWN0IGlvbWFwX29wcyB4ZnNfcmVhZF9pb21hcF9vcHMgPSB7XG5kaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19pb3BzLmMgYi9mcy94ZnMveGZzX2lvcHMuY1xuaW5kZXggNjMzOWY0OTU2ZWNiMzkuLjcwNjM3Y2RjYzI5OTcyIDEwMDY0NFxuLS0tIGEvZnMveGZzL3hmc19pb3BzLmNcbisrKyBiL2ZzL3hmcy94ZnNfaW9wcy5jXG5AQCAtMzUsNiArMzUsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NlY3VyaXR5LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pdmVyc2lvbi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZmllbWFwLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9mc3Zlcml0eS5oXHUwMDNlXG4gXG4gLypcbiAgKiBEaXJlY3RvcmllcyBoYXZlIGRpZmZlcmVudCBsb2NrIG9yZGVyIHcuci50LiBtbWFwX2xvY2sgY29tcGFyZWQgdG8gcmVndWxhclxuQEAgLTU4MCw2ICs1ODEsMTAgQEAgeGZzX3JlcG9ydF9kaW9hbGlnbihcbiBcdHN0cnVjdCBibG9ja19kZXZpY2VcdCpiZGV2ID0gdGFyZ2V0LVx1MDAzZWJ0X2JkZXY7XG4gXG4gXHRzdGF0LVx1MDAzZXJlc3VsdF9tYXNrIHw9IFNUQVRYX0RJT0FMSUdOIHwgU1RBVFhfRElPX1JFQURfQUxJR047XG4rXG4rXHRpZiAoZnN2ZXJpdHlfYWN0aXZlKFZGU19JKGlwKSkpXG4rXHRcdHJldHVybjtcbitcbiBcdHN0YXQtXHUwMDNlZGlvX21lbV9hbGlnbiA9IGJkZXZfZG1hX2FsaWdubWVudChiZGV2KSArIDE7XG4gXG4gXHQvKlxuQEAgLTEzNzAsNiArMTM3NSw4IEBAIHhmc19pbm9kZV9zaG91bGRfZW5hYmxlX2RheChcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFx0aWYgKCF4ZnNfaW5vZGVfc3VwcG9ydHNfZGF4KGlwKSlcbiBcdFx0cmV0dXJuIGZhbHNlO1xuK1x0aWYgKGlwLVx1MDAzZWlfZGlmbGFnczIgXHUwMDI2IFhGU19ESUZMQUcyX1ZFUklUWSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuIFx0aWYgKHhmc19oYXNfZGF4X2Fsd2F5cyhpcC1cdTAwM2VpX21vdW50KSlcbiBcdFx0cmV0dXJuIHRydWU7XG4gXHRpZiAoaXAtXHUwMDNlaV9kaWZsYWdzMiBcdTAwMjYgWEZTX0RJRkxBRzJfREFYKVxuQEAgLTEzOTgsMTIgKzE0MDUsMTUgQEAgeGZzX2RpZmxhZ3NfdG9faWZsYWdzKFxuIFx0XHRmbGFncyB8PSBTX05PQVRJTUU7XG4gXHRpZiAoaW5pdCBcdTAwMjZcdTAwMjYgeGZzX2lub2RlX3Nob3VsZF9lbmFibGVfZGF4KGlwKSlcbiBcdFx0ZmxhZ3MgfD0gU19EQVg7XG4rXHRpZiAoeGZsYWdzIFx1MDAyNiBGU19YRkxBR19WRVJJVFkpXG4rXHRcdGZsYWdzIHw9IFNfVkVSSVRZO1xuIFxuIFx0LypcbiBcdCAqIFNfREFYIGNhbiBvbmx5IGJlIHNldCBkdXJpbmcgaW5vZGUgaW5pdGlhbGl6YXRpb24gYW5kIGlzIG5ldmVyIHNldCBieVxuIFx0ICogdGhlIFZGUywgc28gd2UgY2Fubm90IG1hc2sgb2ZmIFNfREFYIGluIGlfZmxhZ3MuXG4gXHQgKi9cbi1cdGlub2RlLVx1MDAzZWlfZmxhZ3MgXHUwMDI2PSB+KFNfSU1NVVRBQkxFIHwgU19BUFBFTkQgfCBTX1NZTkMgfCBTX05PQVRJTUUpO1xuK1x0aW5vZGUtXHUwMDNlaV9mbGFncyBcdTAwMjY9XG4rXHRcdH4oU19JTU1VVEFCTEUgfCBTX0FQUEVORCB8IFNfU1lOQyB8IFNfTk9BVElNRSB8IFNfVkVSSVRZKTtcbiBcdGlub2RlLVx1MDAzZWlfZmxhZ3MgfD0gZmxhZ3M7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfbWVzc2FnZS5jIGIvZnMveGZzL3hmc19tZXNzYWdlLmNcbmluZGV4IDAyNDNlNTA5YTQ2ODkxLi40NGIxM2Q0NjA0OWM2MiAxMDA2NDRcbi0tLSBhL2ZzL3hmcy94ZnNfbWVzc2FnZS5jXG4rKysgYi9mcy94ZnMveGZzX21lc3NhZ2UuY1xuQEAgLTE0OSw2ICsxNDksMTAgQEAgeGZzX3dhcm5fZXhwZXJpbWVudGFsKFxuIFx0XHRcdC5vcHN0YXRlXHQ9IFhGU19PUFNUQVRFX1dBUk5FRF9MQVJQLFxuIFx0XHRcdC5uYW1lXHRcdD0gXCJsb2dnZWQgZXh0ZW5kZWQgYXR0cmlidXRlc1wiLFxuIFx0XHR9LFxuK1x0XHRbWEZTX0VYUEVSSU1FTlRBTF9GU1ZFUklUWV0gPSB7XG4rXHRcdFx0Lm9wc3RhdGVcdD0gWEZTX09QU1RBVEVfV0FSTkVEX0ZTVkVSSVRZLFxuK1x0XHRcdC5uYW1lXHRcdD0gXCJmc3Zlcml0eVwiLFxuK1x0XHR9LFxuIFx0fTtcbiBcdEFTU0VSVChmZWF0IFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgZmVhdCBcdTAwM2MgWEZTX0VYUEVSSU1FTlRBTF9NQVgpO1xuIFx0QlVJTERfQlVHX09OKEFSUkFZX1NJWkUoZmVhdHVyZXMpICE9IFhGU19FWFBFUklNRU5UQUxfTUFYKTtcbmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX21lc3NhZ2UuaCBiL2ZzL3hmcy94ZnNfbWVzc2FnZS5oXG5pbmRleCA4MTFiODg1ZjQxYzM1YS4uMzY0ZmNjN2U0MmIwODQgMTAwNjQ0XG4tLS0gYS9mcy94ZnMveGZzX21lc3NhZ2UuaFxuKysrIGIvZnMveGZzL3hmc19tZXNzYWdlLmhcbkBAIC05Myw2ICs5Myw3IEBAIHZvaWQgeGZzX2J1Zl9hbGVydF9yYXRlbGltaXRlZChzdHJ1Y3QgeGZzX2J1ZiAqYnAsIGNvbnN0IGNoYXIgKnJsbXNnLFxuIGVudW0geGZzX2V4cGVyaW1lbnRhbF9mZWF0IHtcbiBcdFhGU19FWFBFUklNRU5UQUxfU0hSSU5LLFxuIFx0WEZTX0VYUEVSSU1FTlRBTF9MQVJQLFxuK1x0WEZTX0VYUEVSSU1FTlRBTF9GU1ZFUklUWSxcbiBcbiBcdFhGU19FWFBFUklNRU5UQUxfTUFYLFxuIH07XG5kaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19tb3VudC5oIGIvZnMveGZzL3hmc19tb3VudC5oXG5pbmRleCA2NmEwMmQxYjlhZDdhMS4uODc1YzliMGY4ZTk5MWYgMTAwNjQ0XG4tLS0gYS9mcy94ZnMveGZzX21vdW50LmhcbisrKyBiL2ZzL3hmcy94ZnNfbW91bnQuaFxuQEAgLTM4OCw2ICszODgsNyBAQCB0eXBlZGVmIHN0cnVjdCB4ZnNfbW91bnQge1xuICNkZWZpbmUgWEZTX0ZFQVRfRVhDSEFOR0VfUkFOR0VcdCgxVUxMIFx1MDAzY1x1MDAzYyAyNylcdC8qIGV4Y2hhbmdlIHJhbmdlICovXG4gI2RlZmluZSBYRlNfRkVBVF9NRVRBRElSXHQoMVVMTCBcdTAwM2NcdTAwM2MgMjgpXHQvKiBtZXRhZGF0YSBkaXJlY3RvcnkgdHJlZSAqL1xuICNkZWZpbmUgWEZTX0ZFQVRfWk9ORURcdFx0KDFVTEwgXHUwMDNjXHUwMDNjIDI5KVx0Lyogem9uZWQgUlQgZGV2aWNlICovXG4rI2RlZmluZSBYRlNfRkVBVF9WRVJJVFlcdFx0KDFVTEwgXHUwMDNjXHUwMDNjIDMwKVx0LyogZnMtdmVyaXR5ICovXG4gXG4gLyogTW91bnQgZmVhdHVyZXMgKi9cbiAjZGVmaW5lIFhGU19GRUFUX05PTElGRVRJTUVcdCgxVUxMIFx1MDAzY1x1MDAzYyA0NylcdC8qIGRpc2FibGUgbGlmZXRpbWUgaGludHMgKi9cbkBAIC00NDUsNiArNDQ2LDcgQEAgX19YRlNfSEFTX0ZFQVQoZXhjaGFuZ2VfcmFuZ2UsIEVYQ0hBTkdFX1JBTkdFKVxuIF9fWEZTX0hBU19GRUFUKG1ldGFkaXIsIE1FVEFESVIpXG4gX19YRlNfSEFTX0ZFQVQoem9uZWQsIFpPTkVEKVxuIF9fWEZTX0hBU19GRUFUKG5vbGlmZXRpbWUsIE5PTElGRVRJTUUpXG4rX19YRlNfSEFTX0ZFQVQodmVyaXR5LCBWRVJJVFkpXG4gXG4gc3RhdGljIGlubGluZSBib29sIHhmc19oYXNfcnRncm91cHMoY29uc3Qgc3RydWN0IHhmc19tb3VudCAqbXApXG4ge1xuQEAgLTU4Miw2ICs1ODQsOCBAQCBfX1hGU19IQVNfRkVBVChub3V1aWQsIE5PVVVJRClcbiAjZGVmaW5lIFhGU19PUFNUQVRFX1JFU1VNSU5HX1FVT1RBT05cdDE4XG4gLyogKFpvbmVkKSBHQyBpcyBpbiBwcm9ncmVzcyAqL1xuICNkZWZpbmUgWEZTX09QU1RBVEVfWk9ORUdDX1JVTk5JTkdcdDIwXG4rLyogS2VybmVsIGhhcyBsb2dnZWQgYSB3YXJuaW5nIGFib3V0IGZzdmVyaXR5IHN1cHBvcnQgKi9cbisjZGVmaW5lIFhGU19PUFNUQVRFX1dBUk5FRF9GU1ZFUklUWVx0MjFcbiBcbiAjZGVmaW5lIF9fWEZTX0lTX09QU1RBVEUobmFtZSwgTkFNRSkgXFxcbiBzdGF0aWMgaW5saW5lIGJvb2wgeGZzX2lzXyAjIyBuYW1lIChzdHJ1Y3QgeGZzX21vdW50ICptcCkgXFxcbmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX3N1cGVyLmMgYi9mcy94ZnMveGZzX3N1cGVyLmNcbmluZGV4IDg1MzFkNTI2ZmM0NDA5Li5hNzc3NGQyZDZiMjNmYyAxMDA2NDRcbi0tLSBhL2ZzL3hmcy94ZnNfc3VwZXIuY1xuKysrIGIvZnMveGZzL3hmc19zdXBlci5jXG5AQCAtMzAsNiArMzAsNyBAQFxuICNpbmNsdWRlIFwieGZzX2ZpbGVzdHJlYW0uaFwiXG4gI2luY2x1ZGUgXCJ4ZnNfcXVvdGEuaFwiXG4gI2luY2x1ZGUgXCJ4ZnNfc3lzZnMuaFwiXG4rI2luY2x1ZGUgXCJ4ZnNfZnN2ZXJpdHkuaFwiXG4gI2luY2x1ZGUgXCJ4ZnNfb25kaXNrLmhcIlxuICNpbmNsdWRlIFwieGZzX3JtYXBfaXRlbS5oXCJcbiAjaW5jbHVkZSBcInhmc19yZWZjb3VudF9pdGVtLmhcIlxuQEAgLTE2ODksNiArMTY5MCw5IEBAIHhmc19mc19maWxsX3N1cGVyKFxuIFx0c2ItXHUwMDNlc19xdW90YV90eXBlcyA9IFFUWVBFX01BU0tfVVNSIHwgUVRZUEVfTUFTS19HUlAgfCBRVFlQRV9NQVNLX1BSSjtcbiAjZW5kaWZcbiBcdHNiLVx1MDAzZXNfb3AgPSBcdTAwMjZ4ZnNfc3VwZXJfb3BlcmF0aW9ucztcbisjaWZkZWYgQ09ORklHX0ZTX1ZFUklUWVxuK1x0c2ItXHUwMDNlc192b3AgPSBcdTAwMjZ4ZnNfZnN2ZXJpdHlfb3BzO1xuKyNlbmRpZlxuIFxuIFx0LypcbiBcdCAqIERlbGF5IG1vdW50IHdvcmsgaWYgdGhlIGRlYnVnIGhvb2sgaXMgc2V0LiBUaGlzIGlzIGRlYnVnXG5AQCAtMTk0MSw2ICsxOTQ1LDkgQEAgeGZzX2ZzX2ZpbGxfc3VwZXIoXG4gXHRpZiAoZXJyb3IpXG4gXHRcdGdvdG8gb3V0X2ZpbGVzdHJlYW1fdW5tb3VudDtcbiBcbitcdGlmICh4ZnNfaGFzX3Zlcml0eShtcCkpXG4rXHRcdHhmc193YXJuX2V4cGVyaW1lbnRhbChtcCwgWEZTX0VYUEVSSU1FTlRBTF9GU1ZFUklUWSk7XG4rXG4gXHRyb290ID0gaWdyYWIoVkZTX0kobXAtXHUwMDNlbV9yb290aXApKTtcbiBcdGlmICghcm9vdCkge1xuIFx0XHRlcnJvciA9IC1FTk9FTlQ7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mc3Zlcml0eS5oIGIvaW5jbHVkZS9saW51eC9mc3Zlcml0eS5oXG5pbmRleCA2YzQ2N2RlZDk3NTFmYy4uZjk0MzMzMzJjMjc0YmIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2ZzdmVyaXR5LmhcbisrKyBiL2luY2x1ZGUvbGludXgvZnN2ZXJpdHkuaFxuQEAgLTEyNCw2ICsxMjQsOCBAQCBzdHJ1Y3QgZnN2ZXJpdHlfb3BlcmF0aW9ucyB7XG4gXHQgKiBAYnVmOiB0aGUgTWVya2xlIHRyZWUgYmxvY2sgdG8gd3JpdGVcbiBcdCAqIEBwb3M6IHRoZSBwb3NpdGlvbiBvZiB0aGUgYmxvY2sgaW4gdGhlIE1lcmtsZSB0cmVlIChpbiBieXRlcylcbiBcdCAqIEBzaXplOiB0aGUgTWVya2xlIHRyZWUgYmxvY2sgc2l6ZSAoaW4gYnl0ZXMpXG4rXHQgKiBAemVyb19kaWdlc3Q6IHRoZSBoYXNoIG9mIHRoZSBhbGwtemVyb2VzIGJsb2NrXG4rXHQgKiBAZGlnZXN0X3NpemU6IHNpemUgb2YgemVyb19kaWdlc3QsIGluIGJ5dGVzXG4gXHQgKlxuIFx0ICogVGhpcyBpcyBvbmx5IGNhbGxlZCBiZXR3ZWVuIC1cdTAwM2ViZWdpbl9lbmFibGVfdmVyaXR5KCkgYW5kXG4gXHQgKiAtXHUwMDNlZW5kX2VuYWJsZV92ZXJpdHkoKS5cbkBAIC0xMzEsNyArMTMzLDkgQEAgc3RydWN0IGZzdmVyaXR5X29wZXJhdGlvbnMge1xuIFx0ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIC1lcnJubyBvbiBmYWlsdXJlXG4gXHQgKi9cbiBcdGludCAoKndyaXRlX21lcmtsZV90cmVlX2Jsb2NrKShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3Qgdm9pZCAqYnVmLFxuLVx0XHRcdFx0ICAgICAgIHU2NCBwb3MsIHVuc2lnbmVkIGludCBzaXplKTtcbitcdFx0XHRcdCAgICAgICB1NjQgcG9zLCB1bnNpZ25lZCBpbnQgc2l6ZSxcbitcdFx0XHRcdCAgICAgICBjb25zdCB1OCAqemVyb19kaWdlc3QsXG4rXHRcdFx0XHQgICAgICAgdW5zaWduZWQgaW50IGRpZ2VzdF9zaXplKTtcbiB9O1xuIFxuICNpZmRlZiBDT05GSUdfRlNfVkVSSVRZXG5AQCAtMzE3LDEwICszMjEsMTQgQEAgc3RhdGljIGlubGluZSBpbnQgZnN2ZXJpdHlfZmlsZV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK2ludCBmc3Zlcml0eV9lbnN1cmVfdmVyaXR5X2luZm8oc3RydWN0IGlub2RlICppbm9kZSk7XG4rXG4gdm9pZCBmc3Zlcml0eV9jbGVhbnVwX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xuIFxuIHN0cnVjdCBwYWdlICpnZW5lcmljX3JlYWRfbWVya2xlX3RyZWVfcGFnZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IGluZGV4KTtcbiB2b2lkIGdlbmVyaWNfcmVhZGFoZWFkX21lcmtsZV90cmVlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHBnb2ZmX3QgaW5kZXgsXG4gXHRcdFx0XHQgICB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTtcbitpbnQgZnN2ZXJpdHlfcGFnZWNhY2hlX3JlYWQoc3RydWN0IGlub2RlICppbm9kZSwgdm9pZCAqYnVmLCBzaXplX3QgY291bnQsXG4rXHRcdFx0ICAgIGxvZmZfdCBwb3MpO1xuIFxuICNlbmRpZlx0LyogX0xJTlVYX0ZTVkVSSVRZX0ggKi9cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDA0OjE5OjA3LjA2NjEwMjM4WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTM3MTQwNTU5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFhGUyBmcy12ZXJpdHkgUGF0Y2ggZm9yIEZ1enppbmcqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIHNlcmllcyB0aGF0IGJyaW5ncyBmcy12ZXJpdHkgdG8gWEZTLiBJdCdzIGEgc2lnbmlmaWNhbnQgY2hhbmdlLCB0b3VjaGluZyBjb3JlIGtlcm5lbCBsb2dpYyBpbiBib3RoIFhGUyBpdHNlbGYgYW5kIHRoZSBgZnMvdmVyaXR5YCBzdWJzeXN0ZW0uIERlZmluaXRlbHkgZnV6ei13b3J0aHkuXG5cbkZpcnN0LCBsZXQncyBuYWlsIGRvd24gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB3ZSBuZWVkLiBJdCdzIGEgbm8tYnJhaW5lciB0aGF0IGBDT05GSUdfRlNfVkVSSVRZYCBpcyBlc3NlbnRpYWwuIE5hdHVyYWxseSwgYENPTkZJR19YRlNfRlNgIGlzIGFsc28gcmVxdWlyZWQgZm9yIFhGUyBzdXBwb3J0LiBEaWdnaW5nIGludG8gdGhlIGBmcy94ZnMvTWFrZWZpbGVgIGFuZCBgZnMveGZzL0tjb25maWdgLCBJIHNlZSB0aGF0IGB4ZnMtJChDT05GSUdfRlNfVkVSSVRZKSArPSB4ZnNfZnN2ZXJpdHkub2AgY29uZmlybXMgdGhhdCBgQ09ORklHX0ZTX1ZFUklUWWAgaXMgdGhlIG1haW4gZW5hYmxlci5cblxuTmV4dCwgSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBrZXkgc3ltYm9scyB0byBmb2N1cyBvbiBkdXJpbmcgZnV6emluZy4gSW4gYGZzL3hmcy94ZnNfZnN2ZXJpdHkuY2AsIHRoZSBmdW5jdGlvbnMgdGhhdCBzdGljayBvdXQgYXJlOiBgeGZzX2ZzdmVyaXR5X2dldF9kZXNjcmlwdG9yYCwgYHhmc19mc3Zlcml0eV93cml0ZV9kZXNjcmlwdG9yYCwgYHhmc19mc3Zlcml0eV9kZWxldGVfbWV0YWRhdGFgLCBgeGZzX2ZzdmVyaXR5X2NhbmNlbF91bndyaXR0ZW5gLCBgeGZzX2ZzdmVyaXR5X2JlZ2luX2VuYWJsZWAsIGB4ZnNfZnN2ZXJpdHlfZW5kX2VuYWJsZWAsIGB4ZnNfZnN2ZXJpdHlfcmVhZF9tZXJrbGVgLCBgeGZzX2ZzdmVyaXR5X3JlYWRhaGVhZF9tZXJrbGVfdHJlZWAsIGFuZCBgeGZzX2ZzdmVyaXR5X3dyaXRlX21lcmtsZWAuIFRoZW4sIHRoZXJlJ3MgYGZzdmVyaXR5X3BhZ2VjYWNoZV9yZWFkYCBpbiBgZnMvdmVyaXR5L3BhZ2VjYWNoZS5jYC4gQW5kIGZpbmFsbHksIGluIHRoZSBYRlMgc2NydWIgY29kZSDigJMgYGZzL3hmcy9zY3J1Yi9pbm9kZS5jYCwgYGZzL3hmcy9zY3J1Yi9pbm9kZV9yZXBhaXIuY2AsIGBmcy94ZnMvc2NydWIvY29tbW9uLmNgIOKAkyBJIHNlZSBgeGNoa19pbm9kZV9zZXR1cF92ZXJpdHlgLCBgeGNoa19pbm9kZV92ZXJpdHlfYnJva2VuYCwgYW5kIGB4cmVwX2lub2RlX3Zlcml0eWAuIEkgY29uZmlybWVkIHRoZSB4ZnMgb25lcyBhcmUgcmVhY2hhYmxlIHRocm91Z2ggYGZzdmVyaXR5X29wZXJhdGlvbnMgeGZzX2ZzdmVyaXR5X29wc2AuXG5cbkFscmlnaHQsIGEgZmluYWwgY2hlY2sgb24gdGhlIGNvbmZpZyBvcHRpb25zOiBgQ09ORklHX0ZTX1ZFUklUWWAsIGBDT05GSUdfWEZTX0ZTYCwgYW5kIGdpdmVuIHRoZSBpbnZvbHZlbWVudCBvZiB0aGUgc2NydWIgY29kZSwgbGV0J3MgaW5jbHVkZSBgQ09ORklHX1hGU19PTkxJTkVfU0NSVUJgIHRvIGJlIHRob3JvdWdoLlxuXG5Ob3csIGxldCdzIGdldCB0aGUgcmVzdWx0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc5NDYsIk91dHB1dFRva2VucyI6Mjg2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjI3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMDQ6MTk6MTYuNDM3NTA5NzQ0WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MDI3NzI0NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRlNfVkVSSVRZXCIsXG4gICAgXCJYRlNfRlNcIixcbiAgICBcIlhGU19PTkxJTkVfU0NSVUJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ4ZnNfZnN2ZXJpdHlfYmVnaW5fZW5hYmxlXCIsXG4gICAgXCJ4ZnNfZnN2ZXJpdHlfZW5kX2VuYWJsZVwiLFxuICAgIFwieGZzX2ZzdmVyaXR5X2dldF9kZXNjcmlwdG9yXCIsXG4gICAgXCJ4ZnNfZnN2ZXJpdHlfd3JpdGVfZGVzY3JpcHRvclwiLFxuICAgIFwieGZzX2ZzdmVyaXR5X2RlbGV0ZV9tZXRhZGF0YVwiLFxuICAgIFwieGZzX2ZzdmVyaXR5X2NhbmNlbF91bndyaXR0ZW5cIixcbiAgICBcInhmc19mc3Zlcml0eV9yZWFkX21lcmtsZVwiLFxuICAgIFwieGZzX2ZzdmVyaXR5X3JlYWRhaGVhZF9tZXJrbGVfdHJlZVwiLFxuICAgIFwieGZzX2ZzdmVyaXR5X3dyaXRlX21lcmtsZVwiLFxuICAgIFwiZnN2ZXJpdHlfcGFnZWNhY2hlX3JlYWRcIixcbiAgICBcInhjaGtfaW5vZGVfc2V0dXBfdmVyaXR5XCIsXG4gICAgXCJ4Y2hrX2lub2RlX3Zlcml0eV9icm9rZW5cIixcbiAgICBcInhyZXBfaW5vZGVfdmVyaXR5XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGlzIHBhdGNoIHNlcmllcyBpbXBsZW1lbnRzIGZzLXZlcml0eSBzdXBwb3J0IGZvciB0aGUgWEZTIGZpbGVzeXN0ZW0uIEl0IGludHJvZHVjZXMgbmV3IG1ldGFkYXRhIGhhbmRsaW5nLCBpb2N0bCBvcGVyYXRpb25zLCBhbmQgaW50ZWdyYXRpb24gd2l0aCBYRlMncyBpb21hcCBhbmQgc2NydWIgaW5mcmFzdHJ1Y3R1cmUuIFRoaXMgaXMgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGFkZGl0aW9uIHRvIGEgY29yZSBmaWxlc3lzdGVtIGFuZCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgdG8gZW5zdXJlIGRhdGEgaW50ZWdyaXR5IGFuZCBwcmV2ZW50IHZ1bG5lcmFiaWxpdGllcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJGU19WRVJJVFlcIixcbiAgICBcIlhGU19GU1wiLFxuICAgIFwiWEZTX09OTElORV9TQ1JVQlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInhmc19mc3Zlcml0eV9iZWdpbl9lbmFibGVcIixcbiAgICBcInhmc19mc3Zlcml0eV9lbmRfZW5hYmxlXCIsXG4gICAgXCJ4ZnNfZnN2ZXJpdHlfZ2V0X2Rlc2NyaXB0b3JcIixcbiAgICBcInhmc19mc3Zlcml0eV93cml0ZV9kZXNjcmlwdG9yXCIsXG4gICAgXCJ4ZnNfZnN2ZXJpdHlfZGVsZXRlX21ldGFkYXRhXCIsXG4gICAgXCJ4ZnNfZnN2ZXJpdHlfY2FuY2VsX3Vud3JpdHRlblwiLFxuICAgIFwieGZzX2ZzdmVyaXR5X3JlYWRfbWVya2xlXCIsXG4gICAgXCJ4ZnNfZnN2ZXJpdHlfcmVhZGFoZWFkX21lcmtsZV90cmVlXCIsXG4gICAgXCJ4ZnNfZnN2ZXJpdHlfd3JpdGVfbWVya2xlXCIsXG4gICAgXCJmc3Zlcml0eV9wYWdlY2FjaGVfcmVhZFwiLFxuICAgIFwieGNoa19pbm9kZV9zZXR1cF92ZXJpdHlcIixcbiAgICBcInhjaGtfaW5vZGVfdmVyaXR5X2Jyb2tlblwiLFxuICAgIFwieHJlcF9pbm9kZV92ZXJpdHlcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoaXMgcGF0Y2ggc2VyaWVzIGltcGxlbWVudHMgZnMtdmVyaXR5IHN1cHBvcnQgZm9yIHRoZSBYRlMgZmlsZXN5c3RlbS4gSXQgaW50cm9kdWNlcyBuZXcgbWV0YWRhdGEgaGFuZGxpbmcsIGlvY3RsIG9wZXJhdGlvbnMsIGFuZCBpbnRlZ3JhdGlvbiB3aXRoIFhGUydzIGlvbWFwIGFuZCBzY3J1YiBpbmZyYXN0cnVjdHVyZS4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgYWRkaXRpb24gdG8gYSBjb3JlIGZpbGVzeXN0ZW0gYW5kIHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCB0byBlbnN1cmUgZGF0YSBpbnRlZ3JpdHkgYW5kIHByZXZlbnQgdnVsbmVyYWJpbGl0aWVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflowcnk2z[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-11 04:07:40 +0000 UTC FinishedAt: 2026-07-11 04:19:18 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "d96fcfe1b7f94ac742984ae7986b94a116abff1b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "FS_VERITY", "XFS_FS", "XFS_ONLINE_SCRUB" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "d96fcfe1b7f94ac742984ae7986b94a116abff1b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "FS_VERITY", "XFS_FS", "XFS_ONLINE_SCRUB" ], "series_id": "12fa9d7b-406b-4d7f-ab3f-bf059d63fbdd" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "xfs_fsverity_begin_enable", "xfs_fsverity_end_enable", "xfs_fsverity_get_descriptor", "xfs_fsverity_write_descriptor", "xfs_fsverity_delete_metadata", "xfs_fsverity_cancel_unwritten", "xfs_fsverity_read_merkle", "xfs_fsverity_readahead_merkle_tree", "xfs_fsverity_write_merkle", "fsverity_pagecache_read", "xchk_inode_setup_verity", "xchk_inode_verity_broken", "xrep_inode_verity" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDA0OjE5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0ZTX1ZFUklUWSYjMzQ7LAogICAgJiMzNDtYRlNfRlMmIzM0OywKICAgICYjMzQ7WEZTX09OTElORV9TQ1JVQiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3hmc19mc3Zlcml0eV9iZWdpbl9lbmFibGUmIzM0OywKICAgICYjMzQ7eGZzX2ZzdmVyaXR5X2VuZF9lbmFibGUmIzM0OywKICAgICYjMzQ7eGZzX2ZzdmVyaXR5X2dldF9kZXNjcmlwdG9yJiMzNDssCiAgICAmIzM0O3hmc19mc3Zlcml0eV93cml0ZV9kZXNjcmlwdG9yJiMzNDssCiAgICAmIzM0O3hmc19mc3Zlcml0eV9kZWxldGVfbWV0YWRhdGEmIzM0OywKICAgICYjMzQ7eGZzX2ZzdmVyaXR5X2NhbmNlbF91bndyaXR0ZW4mIzM0OywKICAgICYjMzQ7eGZzX2ZzdmVyaXR5X3JlYWRfbWVya2xlJiMzNDssCiAgICAmIzM0O3hmc19mc3Zlcml0eV9yZWFkYWhlYWRfbWVya2xlX3RyZWUmIzM0OywKICAgICYjMzQ7eGZzX2ZzdmVyaXR5X3dyaXRlX21lcmtsZSYjMzQ7LAogICAgJiMzNDtmc3Zlcml0eV9wYWdlY2FjaGVfcmVhZCYjMzQ7LAogICAgJiMzNDt4Y2hrX2lub2RlX3NldHVwX3Zlcml0eSYjMzQ7LAogICAgJiMzNDt4Y2hrX2lub2RlX3Zlcml0eV9icm9rZW4mIzM0OywKICAgICYjMzQ7eHJlcF9pbm9kZV92ZXJpdHkmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGlzIHBhdGNoIHNlcmllcyBpbXBsZW1lbnRzIGZzLXZlcml0eSBzdXBwb3J0IGZvciB0aGUgWEZTIGZpbGVzeXN0ZW0uIEl0IGludHJvZHVjZXMgbmV3IG1ldGFkYXRhIGhhbmRsaW5nLCBpb2N0bCBvcGVyYXRpb25zLCBhbmQgaW50ZWdyYXRpb24gd2l0aCBYRlMmIzM5O3MgaW9tYXAgYW5kIHNjcnViIGluZnJhc3RydWN0dXJlLiBUaGlzIGlzIGEgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBhZGRpdGlvbiB0byBhIGNvcmUgZmlsZXN5c3RlbSBhbmQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIHRvIGVuc3VyZSBkYXRhIGludGVncml0eSBhbmQgcHJldmVudCB2dWxuZXJhYmlsaXRpZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMDQ6MTk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA1ODIyZDFjYjFlZDgyODc5OTY4MWU2Mzc0NzIzN2UzNjk1YzM4NzQxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBKdWwgMTEgMDQ6MTk6MDUgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvYnRyZnMvdmVyaXR5LmMgYi9mcy9idHJmcy92ZXJpdHkuY1xuaW5kZXggOTgzMzY1YTczNTQxNjguLmJkNzllMzQzYWUyMzdmIDEwMDY0NFxuLS0tIGEvZnMvYnRyZnMvdmVyaXR5LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2J0cmZzL3Zlcml0eS5jXG5AQCAtNzczLDExICYjNDM7NzczLDE1IEBAIHN0YXRpYyBzdHJ1Y3QgcGFnZSAqYnRyZnNfcmVhZF9tZXJrbGVfdHJlZV9wYWdlKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gICogQGJ1ZjpcdE1lcmtsZSB0cmVlIGJsb2NrIHRvIHdyaXRlXG4gICogQHBvczpcdHRoZSBwb3NpdGlvbiBvZiB0aGUgYmxvY2sgaW4gdGhlIE1lcmtsZSB0cmVlIChpbiBieXRlcylcbiAgKiBAc2l6ZTpcdHRoZSBNZXJrbGUgdHJlZSBibG9jayBzaXplIChpbiBieXRlcylcbiYjNDM7ICogQHplcm9fZGlnZXN0Olx0dGhlIGhhc2ggb2YgdGhlIGFsbC16ZXJvZXMgYmxvY2tcbiYjNDM7ICogQGRpZ2VzdF9zaXplOlx0c2l6ZSBvZiB6ZXJvX2RpZ2VzdCwgaW4gYnl0ZXNcbiAgKlxuICAqIFJldHVybnMgMCBvbiBzdWNjZXNzIG9yIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZVxuICAqL1xuIHN0YXRpYyBpbnQgYnRyZnNfd3JpdGVfbWVya2xlX3RyZWVfYmxvY2soc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IHZvaWQgKmJ1Zixcbi1cdFx0XHRcdFx0IHU2NCBwb3MsIHVuc2lnbmVkIGludCBzaXplKVxuJiM0MztcdFx0XHRcdFx0IHU2NCBwb3MsIHVuc2lnbmVkIGludCBzaXplLFxuJiM0MztcdFx0XHRcdFx0IGNvbnN0IHU4ICp6ZXJvX2RpZ2VzdCxcbiYjNDM7XHRcdFx0XHRcdCB1bnNpZ25lZCBpbnQgZGlnZXN0X3NpemUpXG4ge1xuIFx0c3RydWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5vZGUoZmlsZSk7XG4gXHRsb2ZmX3QgbWVya2xlX3BvcyA9IG1lcmtsZV9maWxlX3Bvcyhpbm9kZSk7XG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC92ZXJpdHkuYyBiL2ZzL2V4dDQvdmVyaXR5LmNcbmluZGV4IGNhNjFkYTUzZjMxM2ZhLi5hYzVjMTMzZjU1MjkyNSAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQvdmVyaXR5LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDQvdmVyaXR5LmNcbkBAIC0zNCwzMiAmIzQzOzM0LDYgQEAgc3RhdGljIGlubGluZSBsb2ZmX3QgZXh0NF92ZXJpdHlfbWV0YWRhdGFfcG9zKGNvbnN0IHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4gXHRyZXR1cm4gcm91bmRfdXAoaW5vZGUtXHUwMDNlaV9zaXplLCA2NTUzNik7XG4gfVxuIFxuLS8qXG4tICogUmVhZCBzb21lIHZlcml0eSBtZXRhZGF0YSBmcm9tIHRoZSBpbm9kZS4gIF9fdmZzX3JlYWQoKSBjYW4mIzM5O3QgYmUgdXNlZCBiZWNhdXNlXG4tICogd2UgbmVlZCB0byByZWFkIGJleW9uZCBpX3NpemUuXG4tICovXG4tc3RhdGljIGludCBwYWdlY2FjaGVfcmVhZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCB2b2lkICpidWYsIHNpemVfdCBjb3VudCxcbi1cdFx0XHQgIGxvZmZfdCBwb3MpXG4te1xuLVx0d2hpbGUgKGNvdW50KSB7XG4tXHRcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4tXHRcdHNpemVfdCBuO1xuLVxuLVx0XHRmb2xpbyA9IHJlYWRfbWFwcGluZ19mb2xpbyhpbm9kZS1cdTAwM2VpX21hcHBpbmcsIHBvcyBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCxcbi1cdFx0XHRcdFx0IE5VTEwpO1xuLVx0XHRpZiAoSVNfRVJSKGZvbGlvKSlcbi1cdFx0XHRyZXR1cm4gUFRSX0VSUihmb2xpbyk7XG4tXG4tXHRcdG4gPSBtZW1jcHlfZnJvbV9maWxlX2ZvbGlvKGJ1ZiwgZm9saW8sIHBvcywgY291bnQpO1xuLVx0XHRmb2xpb19wdXQoZm9saW8pO1xuLVxuLVx0XHRidWYgJiM0Mzs9IG47XG4tXHRcdHBvcyAmIzQzOz0gbjtcbi1cdFx0Y291bnQgLT0gbjtcbi1cdH1cbi1cdHJldHVybiAwO1xuLX1cbi1cbiAvKlxuICAqIFdyaXRlIHNvbWUgdmVyaXR5IG1ldGFkYXRhIHRvIHRoZSBpbm9kZSBmb3IgRlNfSU9DX0VOQUJMRV9WRVJJVFkuXG4gICoga2VybmVsX3dyaXRlKCkgY2FuJiMzOTt0IGJlIHVzZWQgYmVjYXVzZSB0aGUgZmlsZSBkZXNjcmlwdG9yIGlzIHJlYWRvbmx5LlxuQEAgLTMxMSw4ICYjNDM7Mjg1LDggQEAgc3RhdGljIGludCBleHQ0X2dldF92ZXJpdHlfZGVzY3JpcHRvcl9sb2NhdGlvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0XHRnb3RvIGJhZDtcbiBcdGRlc2Nfc2l6ZV9wb3MgLT0gc2l6ZW9mKGRlc2Nfc2l6ZV9kaXNrKTtcbiBcbi1cdGVyciA9IHBhZ2VjYWNoZV9yZWFkKGlub2RlLCBcdTAwMjZkZXNjX3NpemVfZGlzaywgc2l6ZW9mKGRlc2Nfc2l6ZV9kaXNrKSxcbi1cdFx0XHQgICAgIGRlc2Nfc2l6ZV9wb3MpO1xuJiM0MztcdGVyciA9IGZzdmVyaXR5X3BhZ2VjYWNoZV9yZWFkKGlub2RlLCBcdTAwMjZkZXNjX3NpemVfZGlzayxcbiYjNDM7XHRcdFx0XHQgICAgICBzaXplb2YoZGVzY19zaXplX2Rpc2spLCBkZXNjX3NpemVfcG9zKTtcbiBcdGlmIChlcnIpXG4gXHRcdHJldHVybiBlcnI7XG4gXHRkZXNjX3NpemUgPSBsZTMyX3RvX2NwdShkZXNjX3NpemVfZGlzayk7XG5AQCAtMzUyLDcgJiM0MzszMjYsNyBAQCBzdGF0aWMgaW50IGV4dDRfZ2V0X3Zlcml0eV9kZXNjcmlwdG9yKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHZvaWQgKmJ1ZixcbiBcdGlmIChidWZfc2l6ZSkge1xuIFx0XHRpZiAoZGVzY19zaXplIFx1MDAzZSBidWZfc2l6ZSlcbiBcdFx0XHRyZXR1cm4gLUVSQU5HRTtcbi1cdFx0ZXJyID0gcGFnZWNhY2hlX3JlYWQoaW5vZGUsIGJ1ZiwgZGVzY19zaXplLCBkZXNjX3Bvcyk7XG4mIzQzO1x0XHRlcnIgPSBmc3Zlcml0eV9wYWdlY2FjaGVfcmVhZChpbm9kZSwgYnVmLCBkZXNjX3NpemUsIGRlc2NfcG9zKTtcbiBcdFx0aWYgKGVycilcbiBcdFx0XHRyZXR1cm4gZXJyO1xuIFx0fVxuQEAgLTM3NCw3ICYjNDM7MzQ4LDkgQEAgc3RhdGljIHZvaWQgZXh0NF9yZWFkYWhlYWRfbWVya2xlX3RyZWUoc3RydWN0IGlub2RlICppbm9kZSwgcGdvZmZfdCBpbmRleCxcbiB9XG4gXG4gc3RhdGljIGludCBleHQ0X3dyaXRlX21lcmtsZV90cmVlX2Jsb2NrKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCB2b2lkICpidWYsXG4tXHRcdFx0XHRcdHU2NCBwb3MsIHVuc2lnbmVkIGludCBzaXplKVxuJiM0MztcdFx0XHRcdFx0dTY0IHBvcywgdW5zaWduZWQgaW50IHNpemUsXG4mIzQzO1x0XHRcdFx0XHRjb25zdCB1OCAqemVyb19kaWdlc3QsXG4mIzQzO1x0XHRcdFx0XHR1bnNpZ25lZCBpbnQgZGlnZXN0X3NpemUpXG4ge1xuIFx0cG9zICYjNDM7PSBleHQ0X3Zlcml0eV9tZXRhZGF0YV9wb3MoZmlsZV9pbm9kZShmaWxlKSk7XG4gXG5kaWZmIC0tZ2l0IGEvZnMvZjJmcy92ZXJpdHkuYyBiL2ZzL2YyZnMvdmVyaXR5LmNcbmluZGV4IDM5ZjQ4MjUxNTQ0NTJhLi5mM2E0NjE3NjU2ZGI5YiAxMDA2NDRcbi0tLSBhL2ZzL2YyZnMvdmVyaXR5LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2YyZnMvdmVyaXR5LmNcbkBAIC0zNywzNCAmIzQzOzM3LDYgQEAgc3RhdGljIGlubGluZSBsb2ZmX3QgZjJmc192ZXJpdHlfbWV0YWRhdGFfcG9zKGNvbnN0IHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4gXHRyZXR1cm4gcm91bmRfdXAoaW5vZGUtXHUwMDNlaV9zaXplLCA2NTUzNik7XG4gfVxuIFxuLS8qXG4tICogUmVhZCBzb21lIHZlcml0eSBtZXRhZGF0YSBmcm9tIHRoZSBpbm9kZS4gIF9fdmZzX3JlYWQoKSBjYW4mIzM5O3QgYmUgdXNlZCBiZWNhdXNlXG4tICogd2UgbmVlZCB0byByZWFkIGJleW9uZCBpX3NpemUuXG4tICovXG4tc3RhdGljIGludCBwYWdlY2FjaGVfcmVhZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCB2b2lkICpidWYsIHNpemVfdCBjb3VudCxcbi1cdFx0XHQgIGxvZmZfdCBwb3MpXG4te1xuLVx0d2hpbGUgKGNvdW50KSB7XG4tXHRcdHNpemVfdCBuID0gbWluX3Qoc2l6ZV90LCBjb3VudCxcbi1cdFx0XHRcdCBQQUdFX1NJWkUgLSBvZmZzZXRfaW5fcGFnZShwb3MpKTtcbi1cdFx0c3RydWN0IHBhZ2UgKnBhZ2U7XG4tXG4tXHRcdHBhZ2UgPSByZWFkX21hcHBpbmdfcGFnZShpbm9kZS1cdTAwM2VpX21hcHBpbmcsIHBvcyBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCxcbi1cdFx0XHRcdFx0IE5VTEwpO1xuLVx0XHRpZiAoSVNfRVJSKHBhZ2UpKVxuLVx0XHRcdHJldHVybiBQVFJfRVJSKHBhZ2UpO1xuLVxuLVx0XHRtZW1jcHlfZnJvbV9wYWdlKGJ1ZiwgcGFnZSwgb2Zmc2V0X2luX3BhZ2UocG9zKSwgbik7XG4tXG4tXHRcdHB1dF9wYWdlKHBhZ2UpO1xuLVxuLVx0XHRidWYgJiM0Mzs9IG47XG4tXHRcdHBvcyAmIzQzOz0gbjtcbi1cdFx0Y291bnQgLT0gbjtcbi1cdH1cbi1cdHJldHVybiAwO1xuLX1cbi1cbiAvKlxuICAqIFdyaXRlIHNvbWUgdmVyaXR5IG1ldGFkYXRhIHRvIHRoZSBpbm9kZSBmb3IgRlNfSU9DX0VOQUJMRV9WRVJJVFkuXG4gICoga2VybmVsX3dyaXRlKCkgY2FuJiMzOTt0IGJlIHVzZWQgYmVjYXVzZSB0aGUgZmlsZSBkZXNjcmlwdG9yIGlzIHJlYWRvbmx5LlxuQEAgLTI1MCw3ICYjNDM7MjIyLDcgQEAgc3RhdGljIGludCBmMmZzX2dldF92ZXJpdHlfZGVzY3JpcHRvcihzdHJ1Y3QgaW5vZGUgKmlub2RlLCB2b2lkICpidWYsXG4gXHRpZiAoYnVmX3NpemUpIHtcbiBcdFx0aWYgKHNpemUgXHUwMDNlIGJ1Zl9zaXplKVxuIFx0XHRcdHJldHVybiAtRVJBTkdFO1xuLVx0XHRyZXMgPSBwYWdlY2FjaGVfcmVhZChpbm9kZSwgYnVmLCBzaXplLCBwb3MpO1xuJiM0MztcdFx0cmVzID0gZnN2ZXJpdHlfcGFnZWNhY2hlX3JlYWQoaW5vZGUsIGJ1Ziwgc2l6ZSwgcG9zKTtcbiBcdFx0aWYgKHJlcylcbiBcdFx0XHRyZXR1cm4gcmVzO1xuIFx0fVxuQEAgLTI3Miw3ICYjNDM7MjQ0LDkgQEAgc3RhdGljIHZvaWQgZjJmc19yZWFkYWhlYWRfbWVya2xlX3RyZWUoc3RydWN0IGlub2RlICppbm9kZSwgcGdvZmZfdCBpbmRleCxcbiB9XG4gXG4gc3RhdGljIGludCBmMmZzX3dyaXRlX21lcmtsZV90cmVlX2Jsb2NrKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCB2b2lkICpidWYsXG4tXHRcdFx0XHRcdHU2NCBwb3MsIHVuc2lnbmVkIGludCBzaXplKVxuJiM0MztcdFx0XHRcdFx0dTY0IHBvcywgdW5zaWduZWQgaW50IHNpemUsXG4mIzQzO1x0XHRcdFx0XHRjb25zdCB1OCAqemVyb19kaWdlc3QsXG4mIzQzO1x0XHRcdFx0XHR1bnNpZ25lZCBpbnQgZGlnZXN0X3NpemUpXG4ge1xuIFx0cG9zICYjNDM7PSBmMmZzX3Zlcml0eV9tZXRhZGF0YV9wb3MoZmlsZV9pbm9kZShmaWxlKSk7XG4gXG5kaWZmIC0tZ2l0IGEvZnMvZmlsZV9hdHRyLmMgYi9mcy9maWxlX2F0dHIuY1xuaW5kZXggYmZiMDBkMjU2ZGQ1NjAuLjU0MjRlYzRlMzk0OTNmIDEwMDY0NFxuLS0tIGEvZnMvZmlsZV9hdHRyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2ZpbGVfYXR0ci5jXG5AQCAtMjQ2LDYgJiM0MzsyNDYsMTEgQEAgc3RhdGljIGludCBmaWxlYXR0cl9zZXRfcHJlcGFyZShzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0aWYgKGZhLVx1MDAzZWZzeF9jb3dleHRzaXplID09IDApXG4gXHRcdGZhLVx1MDAzZWZzeF94ZmxhZ3MgXHUwMDI2PSB+RlNfWEZMQUdfQ09XRVhUU0laRTtcbiBcbiYjNDM7XHQvKiBDYW4gbm90IGVuYWJsZSBEQVggb24gZnN2ZXJpdHkgZmlsZSAqL1xuJiM0MztcdGlmICgob2xkX21hLVx1MDAzZWZzeF94ZmxhZ3MgXHUwMDI2IEZTX1hGTEFHX1ZFUklUWSkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRcdGZhLVx1MDAzZWZzeF94ZmxhZ3MgXHUwMDI2IEZTX1hGTEFHX0RBWClcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiBcdHJldHVybiAwO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9mcy92ZXJpdHkvZW5hYmxlLmMgYi9mcy92ZXJpdHkvZW5hYmxlLmNcbmluZGV4IDQyZGZlZDFjZTBjZTY2Li5hZDRmZjcxZDdkZDk1YiAxMDA2NDRcbi0tLSBhL2ZzL3Zlcml0eS9lbmFibGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvdmVyaXR5L2VuYWJsZS5jXG5AQCAtNTAsNyAmIzQzOzUwLDkgQEAgc3RhdGljIGludCB3cml0ZV9tZXJrbGVfdHJlZV9ibG9jayhzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgdTggKmJ1ZixcbiBcdGludCBlcnI7XG4gXG4gXHRlcnIgPSBpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfdm9wLVx1MDAzZXdyaXRlX21lcmtsZV90cmVlX2Jsb2NrKGZpbGUsIGJ1ZiwgcG9zLFxuLVx0XHRcdFx0XHRcdFx0ICBwYXJhbXMtXHUwMDNlYmxvY2tfc2l6ZSk7XG4mIzQzO1x0XHRcdFx0XHRcdFx0ICBwYXJhbXMtXHUwMDNlYmxvY2tfc2l6ZSxcbiYjNDM7XHRcdFx0XHRcdFx0XHQgIHBhcmFtcy1cdTAwM2V6ZXJvX2RpZ2VzdCxcbiYjNDM7XHRcdFx0XHRcdFx0XHQgIHBhcmFtcy1cdTAwM2VkaWdlc3Rfc2l6ZSk7XG4gXHRpZiAoZXJyKVxuIFx0XHRmc3Zlcml0eV9lcnIoaW5vZGUsIFwmIzM0O0Vycm9yICVkIHdyaXRpbmcgTWVya2xlIHRyZWUgYmxvY2sgJWx1XCYjMzQ7LFxuIFx0XHRcdCAgICAgZXJyLCBpbmRleCk7XG5kaWZmIC0tZ2l0IGEvZnMvdmVyaXR5L29wZW4uYyBiL2ZzL3Zlcml0eS9vcGVuLmNcbmluZGV4IGQwYzU2YTdmYWEzYmIxLi44NzVlODg1MGNjYmFjZSAxMDA2NDRcbi0tLSBhL2ZzL3Zlcml0eS9vcGVuLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3Zlcml0eS9vcGVuLmNcbkBAIC0zNDcsNyAmIzQzOzM0NywyNCBAQCBpbnQgZnN2ZXJpdHlfZ2V0X2Rlc2NyaXB0b3Ioc3RydWN0IGlub2RlICppbm9kZSxcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgaW50IGVuc3VyZV92ZXJpdHlfaW5mbyhzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuJiM0MzsvKipcbiYjNDM7ICogZnN2ZXJpdHlfZW5zdXJlX3Zlcml0eV9pbmZvKCkgLSBjYWNoZSB2ZXJpdHkgaW5mbyBpZiBpdCYjMzk7cyBub3QgYWxyZWFkeSBjYWNoZWRcbiYjNDM7ICogQGlub2RlOiB0aGUgaW5vZGUgZm9yIHdoaWNoIHZlcml0eSBpbmZvIHNob3VsZCBiZSBjYWNoZWRcbiYjNDM7ICpcbiYjNDM7ICogRW5zdXJlIHRoaXMgaW5vZGUgaGFzIHZlcml0eSBpbmZvIGF0dGFjaGVkIHRvIGl0LCBpdCYjMzk7cyBhc3N1bWVkIHRoZSBpbm9kZVxuJiM0MzsgKiBhbHJlYWR5IGhhcyBmc3Zlcml0eSBlbmFibGVkLiBSZWFkIGZzdmVyaXR5IGRlc2NyaXB0b3IgYW5kIGNyZWF0ZXMgdmVyaXR5XG4mIzQzOyAqIGJhc2VkIG9uIHRoYXQuXG4mIzQzOyAqXG4mIzQzOyAqIFRoaXMgbmVlZHMgdG8gYmUgY2FsbGVkIGF0IGxlYXN0IG9uY2UgYmVmb3JlIGFueSBvZiB0aGUgaW5vZGUmIzM5O3MgZGF0YVxuJiM0MzsgKiBjYW4gYmUgdmVyaWZpZWQgKGFuZCB0aHVzIHJlYWQgYXQgYWxsKSBvciB0aGUgaW5vZGUmIzM5O3MgZnN2ZXJpdHkgZGlnZXN0XG4mIzQzOyAqIHJldHJpZXZlZC4gIGZzdmVyaXR5X2ZpbGVfb3BlbigpIGNhbGxzIHRoaXMgYWxyZWFkeSwgd2hpY2ggaGFuZGxlc1xuJiM0MzsgKiBub3JtYWwgZmlsZSBhY2Nlc3Nlcy4gIElmIGEgZmlsZXN5c3RlbSBkb2VzIGFueSBpbnRlcm5hbCAoaS5lLiBub3RcbiYjNDM7ICogYXNzb2NpYXRlZCB3aXRoIGEgZmlsZSBkZXNjcmlwdG9yKSByZWFkcyBvZiB0aGUgZmlsZSYjMzk7cyBkYXRhIG9yXG4mIzQzOyAqIGZzdmVyaXR5IGRpZ2VzdCwgaXQgbXVzdCBjYWxsIHRoaXMgZXhwbGljaXRseSBiZWZvcmUgZG9pbmcgc28uXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAtZXJybm8gb24gZmFpbHVyZVxuJiM0MzsgKi9cbiYjNDM7aW50IGZzdmVyaXR5X2Vuc3VyZV92ZXJpdHlfaW5mbyhzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIHtcbiBcdHN0cnVjdCBmc3Zlcml0eV9pbmZvICp2aSA9IGZzdmVyaXR5X2dldF9pbmZvKGlub2RlKSwgKmZvdW5kO1xuIFx0c3RydWN0IGZzdmVyaXR5X2Rlc2NyaXB0b3IgKmRlc2M7XG5AQCAtMzgzLDEyICYjNDM7NDAwLDEzIEBAIHN0YXRpYyBpbnQgZW5zdXJlX3Zlcml0eV9pbmZvKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4gXHRrZnJlZShkZXNjKTtcbiBcdHJldHVybiBlcnI7XG4gfVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChmc3Zlcml0eV9lbnN1cmVfdmVyaXR5X2luZm8pO1xuIFxuIGludCBfX2ZzdmVyaXR5X2ZpbGVfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscClcbiB7XG4gXHRpZiAoZmlscC1cdTAwM2VmX21vZGUgXHUwMDI2IEZNT0RFX1dSSVRFKVxuIFx0XHRyZXR1cm4gLUVQRVJNO1xuLVx0cmV0dXJuIGVuc3VyZV92ZXJpdHlfaW5mbyhpbm9kZSk7XG4mIzQzO1x0cmV0dXJuIGZzdmVyaXR5X2Vuc3VyZV92ZXJpdHlfaW5mbyhpbm9kZSk7XG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKF9fZnN2ZXJpdHlfZmlsZV9vcGVuKTtcbiBcbmRpZmYgLS1naXQgYS9mcy92ZXJpdHkvcGFnZWNhY2hlLmMgYi9mcy92ZXJpdHkvcGFnZWNhY2hlLmNcbmluZGV4IDk5ZjVmNTNlZWE5ODVmLi4yNzBhYmQ2NTJlNDhjNiAxMDA2NDRcbi0tLSBhL2ZzL3Zlcml0eS9wYWdlY2FjaGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvdmVyaXR5L3BhZ2VjYWNoZS5jXG5AQCAtNjgsMTMgJiM0Mzs2OCw2NCBAQCBFWFBPUlRfU1lNQk9MX0dQTChnZW5lcmljX3JlYWRhaGVhZF9tZXJrbGVfdHJlZSk7XG4gdm9pZCBmc3Zlcml0eV9maWxsX3plcm9oYXNoKHN0cnVjdCBmb2xpbyAqZm9saW8sIHNpemVfdCBvZmZzZXQsIHNpemVfdCBsZW4sXG4gXHRcdFx0ICAgICAgc3RydWN0IGZzdmVyaXR5X2luZm8gKnZpKVxuIHtcbi1cdHNpemVfdCBvZmYgPSBvZmZzZXQ7XG4mIzQzO1x0dm9pZCAqdmFkZHI7XG4mIzQzO1x0dm9pZCAqdG87XG4mIzQzO1x0c2l6ZV90IGNodW5rO1xuIFxuIFx0V0FSTl9PTl9PTkNFKCFJU19BTElHTkVEKG9mZnNldCwgdmktXHUwMDNldHJlZV9wYXJhbXMuZGlnZXN0X3NpemUpKTtcbiBcdFdBUk5fT05fT05DRSghSVNfQUxJR05FRChsZW4sIHZpLVx1MDAzZXRyZWVfcGFyYW1zLmRpZ2VzdF9zaXplKSk7XG4mIzQzO1x0V0FSTl9PTl9PTkNFKG9mZnNldCAmIzQzOyBsZW4gXHUwMDNlIGZvbGlvX3NpemUoZm9saW8pKTtcbiBcbi1cdGZvciAoOyBvZmYgXHUwMDNjIChvZmZzZXQgJiM0MzsgbGVuKTsgb2ZmICYjNDM7PSB2aS1cdTAwM2V0cmVlX3BhcmFtcy5kaWdlc3Rfc2l6ZSlcbi1cdFx0bWVtY3B5X3RvX2ZvbGlvKGZvbGlvLCBvZmYsIHZpLVx1MDAzZXRyZWVfcGFyYW1zLnplcm9fZGlnZXN0LFxuJiM0MztcdGRvIHtcbiYjNDM7XHRcdHZhZGRyID0ga21hcF9sb2NhbF9mb2xpbyhmb2xpbywgb2Zmc2V0KTtcbiYjNDM7XHRcdGNodW5rID0gbGVuO1xuJiM0MztcdFx0dG8gPSB2YWRkcjtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoZm9saW9fdGVzdF9wYXJ0aWFsX2ttYXAoZm9saW8pIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgIGNodW5rIFx1MDAzZSBQQUdFX1NJWkUgLSBvZmZzZXRfaW5fcGFnZShvZmZzZXQpKVxuJiM0MztcdFx0XHRjaHVuayA9IFBBR0VfU0laRSAtIG9mZnNldF9pbl9wYWdlKG9mZnNldCk7XG4mIzQzO1x0XHRmb3IgKDsgdG8gXHUwMDNjICh2YWRkciAmIzQzOyBjaHVuayk7IHRvICYjNDM7PSB2aS1cdTAwM2V0cmVlX3BhcmFtcy5kaWdlc3Rfc2l6ZSlcbiYjNDM7XHRcdFx0bWVtY3B5KHRvLCB2aS1cdTAwM2V0cmVlX3BhcmFtcy56ZXJvX2RpZ2VzdCxcbiBcdFx0XHRcdHZpLVx1MDAzZXRyZWVfcGFyYW1zLmRpZ2VzdF9zaXplKTtcbiYjNDM7XHRcdGt1bm1hcF9sb2NhbCh2YWRkcik7XG4mIzQzO1xuJiM0MztcdFx0b2Zmc2V0ICYjNDM7PSBjaHVuaztcbiYjNDM7XHRcdGxlbiAtPSBjaHVuaztcbiYjNDM7XHR9IHdoaWxlIChsZW4gXHUwMDNlIDApO1xuJiM0MztcbiYjNDM7XHRmbHVzaF9kY2FjaGVfZm9saW8oZm9saW8pO1xuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChmc3Zlcml0eV9maWxsX3plcm9oYXNoKTtcbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBmc3Zlcml0eV9wYWdlY2FjaGVfcmVhZCgpIC0gcmVhZCBwYWdlIGFuZCBjb3B5IGRhdGEgdG8gYnVmZmVyXG4mIzQzOyAqIEBpbm9kZTpcdGNvcHkgZnJvbSB0aGlzIGlub2RlJiMzOTtzIGFkZHJlc3Mgc3BhY2VcbiYjNDM7ICogQGJ1ZjpcdGJ1ZmZlciB0byBjb3B5IHRvXG4mIzQzOyAqIEBjb3VudDpcdG51bWJlciBvZiBieXRlcyB0byBjb3B5XG4mIzQzOyAqIEBwb3M6XHRwb3NpdGlvbiBvZiB0aGUgZm9saW8gdG8gY29weSBmcm9tXG4mIzQzOyAqXG4mIzQzOyAqIFJlYWQgc29tZSB2ZXJpdHkgbWV0YWRhdGEgZnJvbSB0aGUgaW5vZGUuICBfX3Zmc19yZWFkKCkgY2FuJiMzOTt0IGJlIHVzZWQgYmVjYXVzZVxuJiM0MzsgKiB3ZSBuZWVkIHRvIHJlYWQgYmV5b25kIGlfc2l6ZS5cbiYjNDM7ICovXG4mIzQzO2ludCBmc3Zlcml0eV9wYWdlY2FjaGVfcmVhZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCB2b2lkICpidWYsIHNpemVfdCBjb3VudCxcbiYjNDM7XHRcdFx0ICBsb2ZmX3QgcG9zKVxuJiM0Mzt7XG4mIzQzO1x0d2hpbGUgKGNvdW50KSB7XG4mIzQzO1x0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuJiM0MztcdFx0c2l6ZV90IG47XG4mIzQzO1xuJiM0MztcdFx0Zm9saW8gPSByZWFkX21hcHBpbmdfZm9saW8oaW5vZGUtXHUwMDNlaV9tYXBwaW5nLCBwb3MgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQsXG4mIzQzO1x0XHRcdFx0XHQgTlVMTCk7XG4mIzQzO1x0XHRpZiAoSVNfRVJSKGZvbGlvKSlcbiYjNDM7XHRcdFx0cmV0dXJuIFBUUl9FUlIoZm9saW8pO1xuJiM0MztcbiYjNDM7XHRcdG4gPSBtZW1jcHlfZnJvbV9maWxlX2ZvbGlvKGJ1ZiwgZm9saW8sIHBvcywgY291bnQpO1xuJiM0MztcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbiYjNDM7XG4mIzQzO1x0XHRidWYgJiM0Mzs9IG47XG4mIzQzO1x0XHRwb3MgJiM0Mzs9IG47XG4mIzQzO1x0XHRjb3VudCAtPSBuO1xuJiM0MztcdH1cbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChmc3Zlcml0eV9wYWdlY2FjaGVfcmVhZCk7XG5kaWZmIC0tZ2l0IGEvZnMvdmVyaXR5L3ZlcmlmeS5jIGIvZnMvdmVyaXR5L3ZlcmlmeS5jXG5pbmRleCA0MDA0YTFkNDI4NzUxZi4uZGI4YzM1MDIzNGJiNzEgMTAwNjQ0XG4tLS0gYS9mcy92ZXJpdHkvdmVyaWZ5LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3Zlcml0eS92ZXJpZnkuY1xuQEAgLTksNiAmIzQzOzksNyBAQFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Jpby5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZXhwb3J0LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvZnNlcnJvci5oXHUwMDNlXG4gXG4gI2RlZmluZSBGU19WRVJJVFlfTUFYX1BFTkRJTkdfQkxPQ0tTIDJcbiBcbkBAIC0yMDUsNiAmIzQzOzIwNiw4IEBAIHN0YXRpYyBib29sIHZlcmlmeV9kYXRhX2Jsb2NrKHN0cnVjdCBmc3Zlcml0eV9pbmZvICp2aSxcbiBcdFx0aWYgKG1lbWNocl9pbnYoZGJsb2NrLVx1MDAzZWRhdGEsIDAsIHBhcmFtcy1cdTAwM2VibG9ja19zaXplKSkge1xuIFx0XHRcdGZzdmVyaXR5X2Vycihpbm9kZSxcbiBcdFx0XHRcdCAgICAgXCYjMzQ7RklMRSBDT1JSVVBURUQhICBEYXRhIHBhc3QgRU9GIGlzIG5vdCB6ZXJvZWRcJiMzNDspO1xuJiM0MztcdFx0XHRmc2Vycm9yX3JlcG9ydF9kYXRhX2xvc3QoaW5vZGUsIGRhdGFfcG9zLFxuJiM0MztcdFx0XHRcdFx0XHQgcGFyYW1zLVx1MDAzZWJsb2NrX3NpemUsIEdGUF9OT0ZTKTtcbiBcdFx0XHRyZXR1cm4gZmFsc2U7XG4gXHRcdH1cbiBcdFx0cmV0dXJuIHRydWU7XG5AQCAtMzEyLDYgJiM0MzszMTUsNyBAQCBzdGF0aWMgYm9vbCB2ZXJpZnlfZGF0YV9ibG9jayhzdHJ1Y3QgZnN2ZXJpdHlfaW5mbyAqdmksXG4gXHRcdGRhdGFfcG9zLCBsZXZlbCAtIDEsIHBhcmFtcy1cdTAwM2VoYXNoX2FsZy1cdTAwM2VuYW1lLCBoc2l6ZSwgd2FudF9oYXNoLFxuIFx0XHRwYXJhbXMtXHUwMDNlaGFzaF9hbGctXHUwMDNlbmFtZSwgaHNpemUsXG4gXHRcdGxldmVsID09IDAgPyBkYmxvY2stXHUwMDNlcmVhbF9oYXNoIDogcmVhbF9oYXNoKTtcbiYjNDM7XHRmc2Vycm9yX3JlcG9ydF9kYXRhX2xvc3QoaW5vZGUsIGRhdGFfcG9zLCBwYXJhbXMtXHUwMDNlYmxvY2tfc2l6ZSwgR0ZQX05PRlMpO1xuIGVycm9yOlxuIFx0Zm9yICg7IGxldmVsIFx1MDAzZSAwOyBsZXZlbC0tKSB7XG4gXHRcdGt1bm1hcF9sb2NhbChoYmxvY2tzW2xldmVsIC0gMV0uYWRkcik7XG5kaWZmIC0tZ2l0IGEvZnMveGZzL01ha2VmaWxlIGIvZnMveGZzL01ha2VmaWxlXG5pbmRleCA5ZjcxMzNlMDI1NzY4ZC4uMzhiN2Y1MWU1ZDg0MDUgMTAwNjQ0XG4tLS0gYS9mcy94ZnMvTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3hmcy9NYWtlZmlsZVxuQEAgLTE0OSw2ICYjNDM7MTQ5LDcgQEAgeGZzLSQoQ09ORklHX1hGU19QT1NJWF9BQ0wpXHQmIzQzOz0geGZzX2FjbC5vXG4geGZzLSQoQ09ORklHX1NZU0NUTClcdFx0JiM0Mzs9IHhmc19zeXNjdGwub1xuIHhmcy0kKENPTkZJR19DT01QQVQpXHRcdCYjNDM7PSB4ZnNfaW9jdGwzMi5vXG4geGZzLSQoQ09ORklHX0VYUE9SVEZTX0JMT0NLX09QUylcdCYjNDM7PSB4ZnNfcG5mcy5vXG4mIzQzO3hmcy0kKENPTkZJR19GU19WRVJJVFkpXHRcdCYjNDM7PSB4ZnNfZnN2ZXJpdHkub1xuIFxuICMgbm90aWZ5IGZhaWx1cmVcbiBpZmVxICgkKENPTkZJR19NRU1PUllfRkFJTFVSRSkseSlcbmRpZmYgLS1naXQgYS9mcy94ZnMvbGlieGZzL3hmc19ibWFwLmMgYi9mcy94ZnMvbGlieGZzL3hmc19ibWFwLmNcbmluZGV4IGQ2NGRlZmVkYTY0NWVkLi5jYzQ4ZjZlMjBlODAwMCAxMDA2NDRcbi0tLSBhL2ZzL3hmcy9saWJ4ZnMveGZzX2JtYXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMveGZzL2xpYnhmcy94ZnNfYm1hcC5jXG5AQCAtNDEsNiAmIzQzOzQxLDggQEBcbiAjaW5jbHVkZSBcJiMzNDt4ZnNfaW5vZGVfdXRpbC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7eGZzX3J0Z3JvdXAuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3hmc196b25lX2FsbG9jLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7eGZzX2ZzdmVyaXR5LmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvZnN2ZXJpdHkuaFx1MDAzZVxuIFxuIHN0cnVjdCBrbWVtX2NhY2hlXHRcdCp4ZnNfYm1hcF9pbnRlbnRfY2FjaGU7XG4gXG5AQCAtNDQwMiw2ICYjNDM7NDQwNCwxMCBAQCB4ZnNfYm1hcGlfY29udmVydF9vbmVfZGVsYWxsb2MoXG4gXHQgKiB0aGUgZXh0ZW50LiAgSnVzdCByZXR1cm4gdGhlIHJlYWwgZXh0ZW50IGF0IHRoaXMgb2Zmc2V0LlxuIFx0ICovXG4gXHRpZiAoIWlzbnVsbHN0YXJ0YmxvY2soYm1hLmdvdC5icl9zdGFydGJsb2NrKSkge1xuJiM0MztcdFx0aWYgKHhmc19pZmxhZ3NfdGVzdChpcCwgWEZTX1ZFUklUWV9DT05TVFJVQ1RJT04pIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgIFhGU19GU0JfVE9fQihtcCwgYm1hLmdvdC5icl9zdGFydG9mZikgXHUwMDNlPVxuJiM0MztcdFx0XHQgICAgeGZzX2ZzdmVyaXR5X21ldGFkYXRhX29mZnNldChpcCkpXG4mIzQzO1x0XHRcdGZsYWdzIHw9IElPTUFQX0ZfRlNWRVJJVFk7XG4gXHRcdHhmc19ibWJ0X3RvX2lvbWFwKGlwLCBpb21hcCwgXHUwMDI2Ym1hLmdvdCwgMCwgZmxhZ3MsXG4gXHRcdFx0XHR4ZnNfaW9tYXBfaW5vZGVfc2VxdWVuY2UoaXAsIGZsYWdzKSk7XG4gXHRcdGlmIChzZXEpXG5AQCAtNDQ0OSw2ICYjNDM7NDQ1NSwxMSBAQCB4ZnNfYm1hcGlfY29udmVydF9vbmVfZGVsYWxsb2MoXG4gXHRYRlNfU1RBVFNfQUREKG1wLCB4c194c3RyYXRfYnl0ZXMsIFhGU19GU0JfVE9fQihtcCwgYm1hLmxlbmd0aCkpO1xuIFx0WEZTX1NUQVRTX0lOQyhtcCwgeHNfeHN0cmF0X3F1aWNrKTtcbiBcbiYjNDM7XHRpZiAoeGZzX2lmbGFnc190ZXN0KGlwLCBYRlNfVkVSSVRZX0NPTlNUUlVDVElPTikgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIFhGU19GU0JfVE9fQihtcCwgYm1hLmdvdC5icl9zdGFydG9mZikgXHUwMDNlPVxuJiM0MztcdFx0ICAgIHhmc19mc3Zlcml0eV9tZXRhZGF0YV9vZmZzZXQoaXApKVxuJiM0MztcdFx0ZmxhZ3MgfD0gSU9NQVBfRl9GU1ZFUklUWTtcbiYjNDM7XG4gXHRBU1NFUlQoIWlzbnVsbHN0YXJ0YmxvY2soYm1hLmdvdC5icl9zdGFydGJsb2NrKSk7XG4gXHR4ZnNfYm1idF90b19pb21hcChpcCwgaW9tYXAsIFx1MDAyNmJtYS5nb3QsIDAsIGZsYWdzLFxuIFx0XHRcdFx0eGZzX2lvbWFwX2lub2RlX3NlcXVlbmNlKGlwLCBmbGFncykpO1xuZGlmZiAtLWdpdCBhL2ZzL3hmcy9saWJ4ZnMveGZzX2Zvcm1hdC5oIGIvZnMveGZzL2xpYnhmcy94ZnNfZm9ybWF0LmhcbmluZGV4IGRkMGVkMDQ2ZmJlOWM5Li4yODc4YmM5Y2I2NTY0ZSAxMDA2NDRcbi0tLSBhL2ZzL3hmcy9saWJ4ZnMveGZzX2Zvcm1hdC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy94ZnMvbGlieGZzL3hmc19mb3JtYXQuaFxuQEAgLTM3NCwxMSAmIzQzOzM3NCwxMyBAQCB4ZnNfc2JfaGFzX2NvbXBhdF9mZWF0dXJlKFxuICNkZWZpbmUgWEZTX1NCX0ZFQVRfUk9fQ09NUEFUX1JNQVBCVCAgICgxIFx1MDAzY1x1MDAzYyAxKVx0XHQvKiByZXZlcnNlIG1hcCBidHJlZSAqL1xuICNkZWZpbmUgWEZTX1NCX0ZFQVRfUk9fQ09NUEFUX1JFRkxJTksgICgxIFx1MDAzY1x1MDAzYyAyKVx0XHQvKiByZWZsaW5rZWQgZmlsZXMgKi9cbiAjZGVmaW5lIFhGU19TQl9GRUFUX1JPX0NPTVBBVF9JTk9CVENOVCAoMSBcdTAwM2NcdTAwM2MgMylcdFx0LyogaW5vYnQgYmxvY2sgY291bnRzICovXG4mIzQzOyNkZWZpbmUgWEZTX1NCX0ZFQVRfUk9fQ09NUEFUX1ZFUklUWSAgICgxIFx1MDAzY1x1MDAzYyA0KVx0XHQvKiBmcy12ZXJpdHkgKi9cbiAjZGVmaW5lIFhGU19TQl9GRUFUX1JPX0NPTVBBVF9BTEwgXFxcbiBcdFx0KFhGU19TQl9GRUFUX1JPX0NPTVBBVF9GSU5PQlQgfCBcXFxuIFx0XHQgWEZTX1NCX0ZFQVRfUk9fQ09NUEFUX1JNQVBCVCB8IFxcXG4tXHRcdCBYRlNfU0JfRkVBVF9ST19DT01QQVRfUkVGTElOS3wgXFxcbi1cdFx0IFhGU19TQl9GRUFUX1JPX0NPTVBBVF9JTk9CVENOVClcbiYjNDM7XHRcdCBYRlNfU0JfRkVBVF9ST19DT01QQVRfUkVGTElOSyB8IFxcXG4mIzQzO1x0XHQgWEZTX1NCX0ZFQVRfUk9fQ09NUEFUX0lOT0JUQ05UIHwgXFxcbiYjNDM7XHRcdCBYRlNfU0JfRkVBVF9ST19DT01QQVRfVkVSSVRZKVxuICNkZWZpbmUgWEZTX1NCX0ZFQVRfUk9fQ09NUEFUX1VOS05PV05cdH5YRlNfU0JfRkVBVF9ST19DT01QQVRfQUxMXG4gc3RhdGljIGlubGluZSBib29sXG4geGZzX3NiX2hhc19yb19jb21wYXRfZmVhdHVyZShcbkBAIC0xMjMwLDE2ICYjNDM7MTIzMiwyMSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgeGZzX2Rpbm9kZV9wdXRfcmRldihzdHJ1Y3QgeGZzX2Rpbm9kZSAqZGlwLCB4ZnNfZGV2X3QgcmRldilcbiAgKi9cbiAjZGVmaW5lIFhGU19ESUZMQUcyX01FVEFEQVRBX0JJVFx0NVxuIFxuJiM0MzsvKiBpbm9kZXMgc2VhbGVkIHdpdGggZnMtdmVyaXR5ICovXG4mIzQzOyNkZWZpbmUgWEZTX0RJRkxBRzJfVkVSSVRZX0JJVFx0XHQ2XG4mIzQzO1xuICNkZWZpbmUgWEZTX0RJRkxBRzJfREFYXHRcdCgxVUxMIFx1MDAzY1x1MDAzYyBYRlNfRElGTEFHMl9EQVhfQklUKVxuICNkZWZpbmUgWEZTX0RJRkxBRzJfUkVGTElOS1x0KDFVTEwgXHUwMDNjXHUwMDNjIFhGU19ESUZMQUcyX1JFRkxJTktfQklUKVxuICNkZWZpbmUgWEZTX0RJRkxBRzJfQ09XRVhUU0laRVx0KDFVTEwgXHUwMDNjXHUwMDNjIFhGU19ESUZMQUcyX0NPV0VYVFNJWkVfQklUKVxuICNkZWZpbmUgWEZTX0RJRkxBRzJfQklHVElNRVx0KDFVTEwgXHUwMDNjXHUwMDNjIFhGU19ESUZMQUcyX0JJR1RJTUVfQklUKVxuICNkZWZpbmUgWEZTX0RJRkxBRzJfTlJFWFQ2NFx0KDFVTEwgXHUwMDNjXHUwMDNjIFhGU19ESUZMQUcyX05SRVhUNjRfQklUKVxuICNkZWZpbmUgWEZTX0RJRkxBRzJfTUVUQURBVEFcdCgxVUxMIFx1MDAzY1x1MDAzYyBYRlNfRElGTEFHMl9NRVRBREFUQV9CSVQpXG4mIzQzOyNkZWZpbmUgWEZTX0RJRkxBRzJfVkVSSVRZXHQoMVVMTCBcdTAwM2NcdTAwM2MgWEZTX0RJRkxBRzJfVkVSSVRZX0JJVClcbiBcbiAjZGVmaW5lIFhGU19ESUZMQUcyX0FOWSBcXFxuIFx0KFhGU19ESUZMQUcyX0RBWCB8IFhGU19ESUZMQUcyX1JFRkxJTksgfCBYRlNfRElGTEFHMl9DT1dFWFRTSVpFIHwgXFxcbi1cdCBYRlNfRElGTEFHMl9CSUdUSU1FIHwgWEZTX0RJRkxBRzJfTlJFWFQ2NCB8IFhGU19ESUZMQUcyX01FVEFEQVRBKVxuJiM0MztcdCBYRlNfRElGTEFHMl9CSUdUSU1FIHwgWEZTX0RJRkxBRzJfTlJFWFQ2NCB8IFhGU19ESUZMQUcyX01FVEFEQVRBIHwgXFxcbiYjNDM7XHQgWEZTX0RJRkxBRzJfVkVSSVRZKVxuIFxuIHN0YXRpYyBpbmxpbmUgYm9vbCB4ZnNfZGlub2RlX2hhc19iaWd0aW1lKGNvbnN0IHN0cnVjdCB4ZnNfZGlub2RlICpkaXApXG4ge1xuQEAgLTIwMjcsNCAmIzQzOzIwMzQsMjYgQEAgc3RydWN0IHhmc19hY2wge1xuICNkZWZpbmUgU0dJX0FDTF9GSUxFX1NJWkVcdChzaXplb2YoU0dJX0FDTF9GSUxFKS0xKVxuICNkZWZpbmUgU0dJX0FDTF9ERUZBVUxUX1NJWkVcdChzaXplb2YoU0dJX0FDTF9ERUZBVUxUKS0xKVxuIFxuJiM0MzsvKlxuJiM0MzsgKiBBdCBtYXhpbXVtIG9mIDggbGV2ZWxzIHdpdGggMTI4IGhhc2hlcyBwZXIgYmxvY2sgKDMyIGJ5dGVzIFNIQS0yNTYpIG1heGltdW1cbiYjNDM7ICogdHJlZSBzaXplIGlzICgoMTI4Xjgg4oiSIDEpLygxMjgg4oiSIDEpKSA9IDU2NyoxMF4xMiBibG9ja3MuIFRoaXMgc2hvdWxkIGZpdCBpblxuJiM0MzsgKiA1MyBiaXRzIGFkZHJlc3Mgc3BhY2UuXG4mIzQzOyAqXG4mIzQzOyAqIEF0IHRoaXMgTWVya2xlIHRyZWUgc2l6ZSB3ZSBjYW4gY292ZXIgMjk1RUIgbGFyZ2UgZmlsZS4gVGhpcyBpcyBtdWNoIGxhcmdlclxuJiM0MzsgKiB0aGFuIHRoZSBjdXJyZW50bHkgc3VwcG9ydGVkIGZpbGUgc2l6ZS5cbiYjNDM7ICpcbiYjNDM7ICogRm9yIHNoYTUxMiB0aGUgbGFyZ2VzdCBmaWxlIHdlIGNhbiBjb3ZlciBlbmRzIGF0IDEgXHUwMDNjXHUwMDNjIDUwIG9mZnNldCwgdGhpcyBpcyBhbHNvXG4mIzQzOyAqIGdvb2QuXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIFhGU19GU1ZFUklUWV9MQVJHRVNUX0ZJTEVcdCgobG9mZl90KTFVTEwgXHUwMDNjXHUwMDNjIDUzKVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogQWxpZ25tZW50IG9mIHRoZSBmc3Zlcml0eSBtZXRhZGF0YSBwbGFjZW1lbnQuIFRoaXMgaXMgbGFyZ2VzdCBzdXBwb3J0ZWQgUEFHRVxuJiM0MzsgKiBTSVpFIGZvciBmc3Zlcml0eS4gVGhpcyBpcyB1c2VkIHRvIHNwYWNlIG91dCBkYXRhIGFuZCBtZXRhZGF0YSBpbiBwYWdlIGNhY2hlLlxuJiM0MzsgKiBUaGUgc3BhY2luZyBpcyBuZWNlc3NhcnkgZm9yIG5vbi1leHBvc3VyZSBvZiBtZXRhZGF0YSB0byB1c2Vyc3BhY2UgYW5kXG4mIzQzOyAqIGNvcnJlY3QgbWVya2xlIHRyZWUgc3luZXRoZXNpcyBpbiB0aGUgaW9tYXAuXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIFhGU19GU1ZFUklUWV9TVEFSVF9BTElHTlx0KDY1NTM2KVxuJiM0MztcbiYjNDM7XG4gI2VuZGlmIC8qIF9fWEZTX0ZPUk1BVF9IX18gKi9cbmRpZmYgLS1naXQgYS9mcy94ZnMvbGlieGZzL3hmc19mcy5oIGIvZnMveGZzL2xpYnhmcy94ZnNfZnMuaFxuaW5kZXggMTg1ZjA5ZjMyN2MwMGMuLjg0ZDYyYjc1MDZhOWFkIDEwMDY0NFxuLS0tIGEvZnMveGZzL2xpYnhmcy94ZnNfZnMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZnMveGZzL2xpYnhmcy94ZnNfZnMuaFxuQEAgLTI1MCw2ICYjNDM7MjUwLDcgQEAgdHlwZWRlZiBzdHJ1Y3QgeGZzX2Zzb3BfcmVzYmxrcyB7XG4gI2RlZmluZSBYRlNfRlNPUF9HRU9NX0ZMQUdTX1BBUkVOVFx0KDEgXHUwMDNjXHUwMDNjIDI1KSAvKiBsaW51eCBwYXJlbnQgcG9pbnRlcnMgKi9cbiAjZGVmaW5lIFhGU19GU09QX0dFT01fRkxBR1NfTUVUQURJUlx0KDEgXHUwMDNjXHUwMDNjIDI2KSAvKiBtZXRhZGF0YSBkaXJlY3RvcmllcyAqL1xuICNkZWZpbmUgWEZTX0ZTT1BfR0VPTV9GTEFHU19aT05FRFx0KDEgXHUwMDNjXHUwMDNjIDI3KSAvKiB6b25lZCBydCBkZXZpY2UgKi9cbiYjNDM7I2RlZmluZSBYRlNfRlNPUF9HRU9NX0ZMQUdTX1ZFUklUWVx0KDEgXHUwMDNjXHUwMDNjIDI4KSAvKiBmcy12ZXJpdHkgKi9cbiBcbiAvKlxuICAqIE1pbmltdW0gYW5kIG1heGltdW0gc2l6ZXMgbmVlZCBmb3IgZ3Jvd3RoIGNoZWNrcy5cbkBAIC00MjEsNiAmIzQzOzQyMiw3IEBAIHN0cnVjdCB4ZnNfYnVsa3N0YXQge1xuICNkZWZpbmUgWEZTX0JTX1NJQ0tfU1lNTElOS1x0KDEgXHUwMDNjXHUwMDNjIDYpICAvKiBzeW1ib2xpYyBsaW5rIHJlbW90ZSB0YXJnZXQgKi9cbiAjZGVmaW5lIFhGU19CU19TSUNLX1BBUkVOVFx0KDEgXHUwMDNjXHUwMDNjIDcpICAvKiBwYXJlbnQgcG9pbnRlcnMgKi9cbiAjZGVmaW5lIFhGU19CU19TSUNLX0RJUlRSRUVcdCgxIFx1MDAzY1x1MDAzYyA4KSAgLyogZGlyZWN0b3J5IHRyZWUgc3RydWN0dXJlICovXG4mIzQzOyNkZWZpbmUgWEZTX0JTX1NJQ0tfRlNWRVJJVFlcdCgxIFx1MDAzY1x1MDAzYyA5KSAgLyogZnN2ZXJpdHkgbWV0YWRhdGEgKi9cbiBcbiAvKlxuICAqIFByb2plY3QgcXVvdGEgaWQgaGVscGVycyAocHJldmlvdXNseSBwcm9qaWQgd2FzIDE2Yml0IG9ubHlcbmRpZmYgLS1naXQgYS9mcy94ZnMvbGlieGZzL3hmc19oZWFsdGguaCBiL2ZzL3hmcy9saWJ4ZnMveGZzX2hlYWx0aC5oXG5pbmRleCAxZDQ1Y2Y1Nzg5ZTg2NC4uOTMyYjQ0NzE5MGRhNzYgMTAwNjQ0XG4tLS0gYS9mcy94ZnMvbGlieGZzL3hmc19oZWFsdGguaFxuJiM0MzsmIzQzOyYjNDM7IGIvZnMveGZzL2xpYnhmcy94ZnNfaGVhbHRoLmhcbkBAIC0xMDQsNiAmIzQzOzEwNCw3IEBAIHN0cnVjdCB4ZnNfcnRncm91cDtcbiAvKiBEb24mIzM5O3QgcHJvcGFnYXRlIHNpY2sgc3RhdHVzIHRvIGFnIGhlYWx0aCBzdW1tYXJ5IGR1cmluZyBpbmFjdGl2YXRpb24gKi9cbiAjZGVmaW5lIFhGU19TSUNLX0lOT19GT1JHRVRcdCgxIFx1MDAzY1x1MDAzYyAxMilcbiAjZGVmaW5lIFhGU19TSUNLX0lOT19ESVJUUkVFXHQoMSBcdTAwM2NcdTAwM2MgMTMpICAvKiBkaXJlY3RvcnkgdHJlZSBzdHJ1Y3R1cmUgKi9cbiYjNDM7I2RlZmluZSBYRlNfU0lDS19JTk9fRlNWRVJJVFlcdCgxIFx1MDAzY1x1MDAzYyAxNCkgIC8qIGZzdmVyaXR5IG1ldGFkYXRhICovXG4gXG4gLyogUHJpbWFyeSBldmlkZW5jZSBvZiBoZWFsdGggcHJvYmxlbXMgaW4gYSBnaXZlbiBncm91cC4gKi9cbiAjZGVmaW5lIFhGU19TSUNLX0ZTX1BSSU1BUllcdChYRlNfU0lDS19GU19DT1VOVEVSUyB8IFxcXG5AQCAtMTQwLDcgJiM0MzsxNDEsOCBAQCBzdHJ1Y3QgeGZzX3J0Z3JvdXA7XG4gXHRcdFx0XHQgWEZTX1NJQ0tfSU5PX1hBVFRSIHwgXFxcbiBcdFx0XHRcdCBYRlNfU0lDS19JTk9fU1lNTElOSyB8IFxcXG4gXHRcdFx0XHQgWEZTX1NJQ0tfSU5PX1BBUkVOVCB8IFxcXG4tXHRcdFx0XHQgWEZTX1NJQ0tfSU5PX0RJUlRSRUUpXG4mIzQzO1x0XHRcdFx0IFhGU19TSUNLX0lOT19ESVJUUkVFIHwgXFxcbiYjNDM7XHRcdFx0XHQgWEZTX1NJQ0tfSU5PX0ZTVkVSSVRZKVxuIFxuICNkZWZpbmUgWEZTX1NJQ0tfSU5PX1pBUFBFRFx0KFhGU19TSUNLX0lOT19CTUJURF9aQVBQRUQgfCBcXFxuIFx0XHRcdFx0IFhGU19TSUNLX0lOT19CTUJUQV9aQVBQRUQgfCBcXFxuZGlmZiAtLWdpdCBhL2ZzL3hmcy9saWJ4ZnMveGZzX2lub2RlX2J1Zi5jIGIvZnMveGZzL2xpYnhmcy94ZnNfaW5vZGVfYnVmLmNcbmluZGV4IDMzNmVmODQzZjJmZTRmLi5iZDgwYTE5ZjJlMDkyOSAxMDA2NDRcbi0tLSBhL2ZzL3hmcy9saWJ4ZnMveGZzX2lub2RlX2J1Zi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy94ZnMvbGlieGZzL3hmc19pbm9kZV9idWYuY1xuQEAgLTc2MCw2ICYjNDM7NzYwLDE0IEBAIHhmc19kaW5vZGVfdmVyaWZ5KFxuIFx0ICAgICF4ZnNfaGFzX3J0cmVmbGluayhtcCkpXG4gXHRcdHJldHVybiBfX3RoaXNfYWRkcmVzcztcbiBcbiYjNDM7XHQvKiBvbmx5IHJlZ3VsYXIgZmlsZXMgY2FuIGhhdmUgZnN2ZXJpdHkgKi9cbiYjNDM7XHRpZiAoZmxhZ3MyIFx1MDAyNiBYRlNfRElGTEFHMl9WRVJJVFkpIHtcbiYjNDM7XHRcdGlmICgheGZzX2hhc192ZXJpdHkobXApKVxuJiM0MztcdFx0XHRyZXR1cm4gX190aGlzX2FkZHJlc3M7XG4mIzQzO1x0XHRpZiAoIVNfSVNSRUcobW9kZSkpXG4mIzQzO1x0XHRcdHJldHVybiBfX3RoaXNfYWRkcmVzcztcbiYjNDM7XHR9XG4mIzQzO1xuIFx0aWYgKHhmc19oYXNfem9uZWQobXApIFx1MDAyNlx1MDAyNlxuIFx0ICAgIGRpcC1cdTAwM2VkaV9tZXRhdHlwZSA9PSBjcHVfdG9fYmUxNihYRlNfTUVUQUZJTEVfUlRSTUFQKSkge1xuIFx0XHRpZiAoYmUzMl90b19jcHUoZGlwLVx1MDAzZWRpX3VzZWRfYmxvY2tzKSBcdTAwM2UgbXAtXHUwMDNlbV9zYi5zYl9yZ2V4dGVudHMpXG5kaWZmIC0tZ2l0IGEvZnMveGZzL2xpYnhmcy94ZnNfaW5vZGVfdXRpbC5jIGIvZnMveGZzL2xpYnhmcy94ZnNfaW5vZGVfdXRpbC5jXG5pbmRleCAyNThhYzNkMGQ0ODZlNi4uNWE1MTZiZDMxYzMxNzUgMTAwNjQ0XG4tLS0gYS9mcy94ZnMvbGlieGZzL3hmc19pbm9kZV91dGlsLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3hmcy9saWJ4ZnMveGZzX2lub2RlX3V0aWwuY1xuQEAgLTc0LDcgJiM0Mzs3NCw4IEBAIHhmc19mbGFnczJkaWZsYWdzMihcbiBcdHVpbnQ2NF90XHRcdGRpX2ZsYWdzMiA9XG4gXHRcdChpcC1cdTAwM2VpX2RpZmxhZ3MyIFx1MDAyNiAoWEZTX0RJRkxBRzJfUkVGTElOSyB8XG4gXHRcdFx0XHQgICBYRlNfRElGTEFHMl9CSUdUSU1FIHxcbi1cdFx0XHRcdCAgIFhGU19ESUZMQUcyX05SRVhUNjQpKTtcbiYjNDM7XHRcdFx0XHQgICBYRlNfRElGTEFHMl9OUkVYVDY0IHxcbiYjNDM7XHRcdFx0XHQgICBYRlNfRElGTEFHMl9WRVJJVFkpKTtcbiBcbiBcdGlmICh4ZmxhZ3MgXHUwMDI2IEZTX1hGTEFHX0RBWClcbiBcdFx0ZGlfZmxhZ3MyIHw9IFhGU19ESUZMQUcyX0RBWDtcbkBAIC0xMjYsNiAmIzQzOzEyNyw4IEBAIHhmc19pcDJ4ZmxhZ3MoXG4gXHRcdFx0ZmxhZ3MgfD0gRlNfWEZMQUdfREFYO1xuIFx0XHRpZiAoaXAtXHUwMDNlaV9kaWZsYWdzMiBcdTAwMjYgWEZTX0RJRkxBRzJfQ09XRVhUU0laRSlcbiBcdFx0XHRmbGFncyB8PSBGU19YRkxBR19DT1dFWFRTSVpFO1xuJiM0MztcdFx0aWYgKGlwLVx1MDAzZWlfZGlmbGFnczIgXHUwMDI2IFhGU19ESUZMQUcyX1ZFUklUWSlcbiYjNDM7XHRcdFx0ZmxhZ3MgfD0gRlNfWEZMQUdfVkVSSVRZO1xuIFx0fVxuIFxuIFx0aWYgKHhmc19pbm9kZV9oYXNfYXR0cl9mb3JrKGlwKSlcbmRpZmYgLS1naXQgYS9mcy94ZnMvbGlieGZzL3hmc19zYi5jIGIvZnMveGZzL2xpYnhmcy94ZnNfc2IuY1xuaW5kZXggNDczMjJhZGI3NjkwNTkuLjIyMmJiZTU1NTlkZjQ3IDEwMDY0NFxuLS0tIGEvZnMveGZzL2xpYnhmcy94ZnNfc2IuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMveGZzL2xpYnhmcy94ZnNfc2IuY1xuQEAgLTE2NSw2ICYjNDM7MTY1LDggQEAgeGZzX3NiX3ZlcnNpb25fdG9fZmVhdHVyZXMoXG4gXHRcdGZlYXR1cmVzIHw9IFhGU19GRUFUX1JFRkxJTks7XG4gXHRpZiAoc2JwLVx1MDAzZXNiX2ZlYXR1cmVzX3JvX2NvbXBhdCBcdTAwMjYgWEZTX1NCX0ZFQVRfUk9fQ09NUEFUX0lOT0JUQ05UKVxuIFx0XHRmZWF0dXJlcyB8PSBYRlNfRkVBVF9JTk9CVENOVDtcbiYjNDM7XHRpZiAoc2JwLVx1MDAzZXNiX2ZlYXR1cmVzX3JvX2NvbXBhdCBcdTAwMjYgWEZTX1NCX0ZFQVRfUk9fQ09NUEFUX1ZFUklUWSlcbiYjNDM7XHRcdGZlYXR1cmVzIHw9IFhGU19GRUFUX1ZFUklUWTtcbiBcdGlmIChzYnAtXHUwMDNlc2JfZmVhdHVyZXNfaW5jb21wYXQgXHUwMDI2IFhGU19TQl9GRUFUX0lOQ09NUEFUX0ZUWVBFKVxuIFx0XHRmZWF0dXJlcyB8PSBYRlNfRkVBVF9GVFlQRTtcbiBcdGlmIChzYnAtXHUwMDNlc2JfZmVhdHVyZXNfaW5jb21wYXQgXHUwMDI2IFhGU19TQl9GRUFUX0lOQ09NUEFUX1NQSU5PREVTKVxuQEAgLTE1ODgsNiAmIzQzOzE1OTAsOCBAQCB4ZnNfZnNfZ2VvbWV0cnkoXG4gXHRcdGdlby1cdTAwM2VmbGFncyB8PSBYRlNfRlNPUF9HRU9NX0ZMQUdTX01FVEFESVI7XG4gXHRpZiAoeGZzX2hhc196b25lZChtcCkpXG4gXHRcdGdlby1cdTAwM2VmbGFncyB8PSBYRlNfRlNPUF9HRU9NX0ZMQUdTX1pPTkVEO1xuJiM0MztcdGlmICh4ZnNfaGFzX3Zlcml0eShtcCkpXG4mIzQzO1x0XHRnZW8tXHUwMDNlZmxhZ3MgfD0gWEZTX0ZTT1BfR0VPTV9GTEFHU19WRVJJVFk7XG4gXHRnZW8tXHUwMDNlcnRzZWN0c2l6ZSA9IHNicC1cdTAwM2VzYl9ibG9ja3NpemU7XG4gXHRnZW8tXHUwMDNlZGlyYmxvY2tzaXplID0geGZzX2RpcjJfZGlyYmxvY2tfYnl0ZXMoc2JwKTtcbiBcbmRpZmYgLS1naXQgYS9mcy94ZnMvc2NydWIvY29tbW9uLmMgYi9mcy94ZnMvc2NydWIvY29tbW9uLmNcbmluZGV4IGU1MjMzZTMxYWJiNzUwLi4xNjczYjUyMjI0NGQ3NCAxMDA2NDRcbi0tLSBhL2ZzL3hmcy9zY3J1Yi9jb21tb24uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMveGZzL3NjcnViL2NvbW1vbi5jXG5AQCAtNDUsNiAmIzQzOzQ1LDggQEBcbiAjaW5jbHVkZSBcJiMzNDtzY3J1Yi9oZWFsdGguaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3NjcnViL3RlbXBmaWxlLmhcJiMzNDtcbiBcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvZnN2ZXJpdHkuaFx1MDAzZVxuJiM0MztcbiAvKiBDb21tb24gY29kZSBmb3IgdGhlIG1ldGFkYXRhIHNjcnViYmVycy4gKi9cbiBcbiAvKlxuQEAgLTE3NTQsMyAmIzQzOzE3NTYsNTQgQEAgeGNoa19pbm9kZV9jb3VudF9ibG9ja3MoXG4gXHRyZXR1cm4geGZzX2JtYXBfY291bnRfYmxvY2tzKHNjLVx1MDAzZXRwLCBzYy1cdTAwM2VpcCwgd2hpY2hmb3JrLCBuZXh0ZW50cyxcbiBcdFx0XHRjb3VudCk7XG4gfVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogSWYgdGhpcyBpbm9kZSBoYXMgU19WRVJJVFkgc2V0IG9uIGl0LCByZWFkIHRoZSB2ZXJpdHkgaW5mby4gSWYgdGhlIHJlYWRpbmdcbiYjNDM7ICogZmFpbHMgd2l0aCBhbnl0aGluZyBvdGhlciB0aGFuIEVOT01FTSwgdGhlIGZpbGUgaXMgY29ycnVwdCwgd2hpY2ggd2UgY2FuXG4mIzQzOyAqIGRldGVjdCBsYXRlciB3aXRoIGZzdmVyaXR5X2FjdGl2ZS5cbiYjNDM7ICpcbiYjNDM7ICogQ2FsbGVycyBtdXN0IGhvbGQgdGhlIElPTE9DSyBhbmQgbXVzdCBub3QgaG9sZCB0aGUgSUxPQ0sgb2Ygc2MtXHUwMDNlaXAgYmVjYXVzZVxuJiM0MzsgKiBhY3RpdmF0aW9uIHJlYWRzIGlub2RlIGRhdGEuXG4mIzQzOyAqL1xuJiM0MztpbnRcbiYjNDM7eGNoa19pbm9kZV9zZXR1cF92ZXJpdHkoXG4mIzQzO1x0c3RydWN0IHhmc19zY3J1Ylx0KnNjKVxuJiM0Mzt7XG4mIzQzO1x0aW50XHRcdFx0ZXJyb3I7XG4mIzQzO1xuJiM0MztcdGlmICghZnN2ZXJpdHlfYWN0aXZlKFZGU19JKHNjLVx1MDAzZWlwKSkpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0ZXJyb3IgPSBmc3Zlcml0eV9lbnN1cmVfdmVyaXR5X2luZm8oVkZTX0koc2MtXHUwMDNlaXApKTtcbiYjNDM7XHRzd2l0Y2ggKGVycm9yKSB7XG4mIzQzO1x0Y2FzZSAwOlxuJiM0MztcdFx0LyogZnN2ZXJpdHkgaXMgYWN0aXZlICovXG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIC1FTk9EQVRBOlxuJiM0MztcdGNhc2UgLUVNU0dTSVpFOlxuJiM0MztcdGNhc2UgLUVJTlZBTDpcbiYjNDM7XHRjYXNlIC1FRlNDT1JSVVBURUQ6XG4mIzQzO1x0Y2FzZSAtRUZCSUc6XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogVGhlIG5vbnplcm8gZXJybm8gY29kZXMgYWJvdmUgYXJlIHRoZSBlcnJvciBjb2RlcyB0aGF0IGNhblxuJiM0MztcdFx0ICogYmUgcmV0dXJuZWQgZnJvbSBmc3Zlcml0eSBvbiBtZXRhZGF0YSB2YWxpZGF0aW9uIGVycm9ycy5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdC8qIHJ1bnRpbWUgZXJyb3JzICovXG4mIzQzO1x0XHRyZXR1cm4gZXJyb3I7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogSXMgdGhpcyBhIHZlcml0eSBmaWxlIHRoYXQgZmFpbGVkIHRvIGFjdGl2YXRlPyAgQ2FsbGVycyBtdXN0IGhhdmUgdHJpZWQgdG9cbiYjNDM7ICogYWN0aXZhdGUgZnN2ZXJpdHkgdmlhIHhjaGtfaW5vZGVfc2V0dXBfdmVyaXR5LlxuJiM0MzsgKi9cbiYjNDM7Ym9vbFxuJiM0Mzt4Y2hrX2lub2RlX3Zlcml0eV9icm9rZW4oXG4mIzQzO1x0c3RydWN0IHhmc19pbm9kZVx0KmlwKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGZzdmVyaXR5X2FjdGl2ZShWRlNfSShpcCkpIFx1MDAyNlx1MDAyNiAhZnN2ZXJpdHlfZ2V0X2luZm8oVkZTX0koaXApKTtcbiYjNDM7fVxuZGlmZiAtLWdpdCBhL2ZzL3hmcy9zY3J1Yi9jb21tb24uaCBiL2ZzL3hmcy9zY3J1Yi9jb21tb24uaFxuaW5kZXggOWQ2MjdmZDUwNjg3ZTQuLjNkZTJiNjAwOWE5OTQxIDEwMDY0NFxuLS0tIGEvZnMveGZzL3NjcnViL2NvbW1vbi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy94ZnMvc2NydWIvY29tbW9uLmhcbkBAIC0yNjgsNiAmIzQzOzI2OCw4IEBAIGludCB4Y2hrX2lub2RlX2lzX2FsbG9jYXRlZChzdHJ1Y3QgeGZzX3NjcnViICpzYywgeGZzX2FnaW5vX3QgYWdpbm8sXG4gXHRcdGJvb2wgKmludXNlKTtcbiBpbnQgeGNoa19pbm9kZV9jb3VudF9ibG9ja3Moc3RydWN0IHhmc19zY3J1YiAqc2MsIGludCB3aGljaGZvcmssXG4gXHRcdHhmc19leHRudW1fdCAqbmV4dGVudHMsIHhmc19maWxibGtzX3QgKmNvdW50KTtcbiYjNDM7aW50IHhjaGtfaW5vZGVfc2V0dXBfdmVyaXR5KHN0cnVjdCB4ZnNfc2NydWIgKnNjKTtcbiYjNDM7Ym9vbCB4Y2hrX2lub2RlX3Zlcml0eV9icm9rZW4oc3RydWN0IHhmc19pbm9kZSAqaXApO1xuIFxuIGJvb2wgeGNoa19pbm9kZV9pc19kaXJ0cmVlX3Jvb3QoY29uc3Qgc3RydWN0IHhmc19pbm9kZSAqaXApO1xuIGJvb2wgeGNoa19pbm9kZV9pc19zYl9yb290ZWQoY29uc3Qgc3RydWN0IHhmc19pbm9kZSAqaXApO1xuZGlmZiAtLWdpdCBhL2ZzL3hmcy9zY3J1Yi9pbm9kZS5jIGIvZnMveGZzL3NjcnViL2lub2RlLmNcbmluZGV4IDY1YjEzZTMxMTkxNjgxLi5kMWNkZDZiNDQ1ZDAxNyAxMDA2NDRcbi0tLSBhL2ZzL3hmcy9zY3J1Yi9pbm9kZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy94ZnMvc2NydWIvaW5vZGUuY1xuQEAgLTM2LDYgJiM0MzszNiwxMCBAQCB4Y2hrX3ByZXBhcmVfaXNjcnViKFxuIFxuIFx0eGNoa19pbG9jayhzYywgWEZTX0lPTE9DS19FWENMKTtcbiBcbiYjNDM7XHRlcnJvciA9IHhjaGtfaW5vZGVfc2V0dXBfdmVyaXR5KHNjKTtcbiYjNDM7XHRpZiAoZXJyb3IpXG4mIzQzO1x0XHRyZXR1cm4gZXJyb3I7XG4mIzQzO1xuIFx0ZXJyb3IgPSB4Y2hrX3RyYW5zX2FsbG9jKHNjLCAwKTtcbiBcdGlmIChlcnJvcilcbiBcdFx0cmV0dXJuIGVycm9yO1xuQEAgLTgzMyw2ICYjNDM7ODM3LDkgQEAgeGNoa19pbm9kZShcbiBcdGlmIChTX0lTUkVHKFZGU19JKHNjLVx1MDAzZWlwKS1cdTAwM2VpX21vZGUpKVxuIFx0XHR4Y2hrX2lub2RlX2NoZWNrX3JlZmxpbmtfaWZsYWcoc2MsIElfSU5PKHNjLVx1MDAzZWlwKSk7XG4gXG4mIzQzO1x0aWYgKHhjaGtfaW5vZGVfdmVyaXR5X2Jyb2tlbihzYy1cdTAwM2VpcCkpXG4mIzQzO1x0XHR4Y2hrX2lub19zZXRfY29ycnVwdChzYywgc2MtXHUwMDNlc20tXHUwMDNlc21faW5vKTtcbiYjNDM7XG4gXHR4Y2hrX2lub2RlX2NoZWNrX3VubGlua2VkKHNjKTtcbiBcbiBcdHhjaGtfaW5vZGVfeHJlZihzYywgSV9JTk8oc2MtXHUwMDNlaXApLCBcdTAwMjZkaSk7XG5kaWZmIC0tZ2l0IGEvZnMveGZzL3NjcnViL2lub2RlX3JlcGFpci5jIGIvZnMveGZzL3NjcnViL2lub2RlX3JlcGFpci5jXG5pbmRleCA0OTNkY2Y1Y2M2YzE1OS4uOTBmODYxYmI0ZWY4NDggMTAwNjQ0XG4tLS0gYS9mcy94ZnMvc2NydWIvaW5vZGVfcmVwYWlyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3hmcy9zY3J1Yi9pbm9kZV9yZXBhaXIuY1xuQEAgLTU3Myw2ICYjNDM7NTczLDggQEAgeHJlcF9kaW5vZGVfZmxhZ3MoXG4gXHRcdGRpcC1cdTAwM2VkaV9ucmV4dDY0X3BhZCA9IDA7XG4gXHRlbHNlIGlmIChkaXAtXHUwMDNlZGlfdmVyc2lvbiBcdTAwM2U9IDMpXG4gXHRcdGRpcC1cdTAwM2VkaV92M19wYWQgPSAwO1xuJiM0MztcdGlmICgheGZzX2hhc192ZXJpdHkobXApIHx8ICFTX0lTUkVHKG1vZGUpKVxuJiM0MztcdFx0ZmxhZ3MyIFx1MDAyNj0gflhGU19ESUZMQUcyX1ZFUklUWTtcbiBcbiBcdGlmIChmbGFnczIgXHUwMDI2IFhGU19ESUZMQUcyX01FVEFEQVRBKSB7XG4gXHRcdHhmc19mYWlsYWRkcl90XHRmYTtcbkBAIC0xNjE3LDYgJiM0MzsxNjE5LDEwIEBAIHhyZXBfZGlub2RlX2NvcmUoXG4gXHRpZiAoaWdldF9lcnJvcilcbiBcdFx0cmV0dXJuIGlnZXRfZXJyb3I7XG4gXG4mIzQzO1x0ZXJyb3IgPSB4Y2hrX2lub2RlX3NldHVwX3Zlcml0eShzYyk7XG4mIzQzO1x0aWYgKGVycm9yKVxuJiM0MztcdFx0cmV0dXJuIGVycm9yO1xuJiM0MztcbiBcdGVycm9yID0geGNoa190cmFuc19hbGxvYyhzYywgMCk7XG4gXHRpZiAoZXJyb3IpXG4gXHRcdHJldHVybiBlcnJvcjtcbkBAIC0yMDM1LDYgJiM0MzsyMDQxLDI3IEBAIHhyZXBfaW5vZGVfdW5saW5rZWQoXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzOy8qXG4mIzQzOyAqIElmIHRoaXMgZmlsZSBpcyBhIGZzdmVyaXR5IGZpbGUsIHhjaGtfcHJlcGFyZV9pc2NydWIgb3IgeHJlcF9kaW5vZGVfY29yZVxuJiM0MzsgKiBzaG91bGQgaGF2ZSBhY3RpdmF0ZWQgaXQuICBJZiBpdCYjMzk7cyBzdGlsbCBub3QgYWN0aXZlLCB0aGVuIHRoZXJlJiMzOTtzIHNvbWV0aGluZ1xuJiM0MzsgKiB3cm9uZyB3aXRoIHRoZSB2ZXJpdHkgZGVzY3JpcHRvciBhbmQgd2Ugc2hvdWxkIHR1cm4gaXQgb2ZmLlxuJiM0MzsgKi9cbiYjNDM7U1RBVElDIGludFxuJiM0Mzt4cmVwX2lub2RlX3Zlcml0eShcbiYjNDM7XHRzdHJ1Y3QgeGZzX3NjcnViXHQqc2MpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaW5vZGVcdFx0Kmlub2RlID0gVkZTX0koc2MtXHUwMDNlaXApO1xuJiM0MztcbiYjNDM7XHRpZiAoeGNoa19pbm9kZV92ZXJpdHlfYnJva2VuKHNjLVx1MDAzZWlwKSkge1xuJiM0MztcdFx0c2MtXHUwMDNlaXAtXHUwMDNlaV9kaWZsYWdzMiBcdTAwMjY9IH5YRlNfRElGTEFHMl9WRVJJVFk7XG4mIzQzO1x0XHRpbm9kZS1cdTAwM2VpX2ZsYWdzIFx1MDAyNj0gflNfVkVSSVRZO1xuJiM0MztcbiYjNDM7XHRcdHhmc190cmFuc19sb2dfaW5vZGUoc2MtXHUwMDNldHAsIHNjLVx1MDAzZWlwLCBYRlNfSUxPR19DT1JFKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuIC8qIFJlcGFpciBhbiBpbm9kZSYjMzk7cyBmaWVsZHMuICovXG4gaW50XG4geHJlcF9pbm9kZShcbkBAIC0yMDg0LDYgJiM0MzsyMTExLDE1IEBAIHhyZXBfaW5vZGUoXG4gXHRcdFx0cmV0dXJuIGVycm9yO1xuIFx0fVxuIFxuJiM0MztcdC8qXG4mIzQzO1x0ICogRGlzYWJsZSBmc3Zlcml0eSBpZiBpdCBjYW5ub3QgYmUgYWN0aXZhdGVkLiAgQWN0aXZhdGlvbiBmYWlsdXJlXG4mIzQzO1x0ICogcHJvaGliaXRzIHRoZSBmaWxlIGZyb20gYmVpbmcgb3BlbmVkLCBzbyB0aGVyZSBjYW5ub3QgYmUgYW5vdGhlclxuJiM0MztcdCAqIHByb2dyYW0gd2l0aCBhbiBvcGVuIGZkIHRvIHdoYXQgaXQgdGhpbmtzIGlzIGEgdmVyaXR5IGZpbGUuXG4mIzQzO1x0ICovXG4mIzQzO1x0ZXJyb3IgPSB4cmVwX2lub2RlX3Zlcml0eShzYyk7XG4mIzQzO1x0aWYgKGVycm9yKVxuJiM0MztcdFx0cmV0dXJuIGVycm9yO1xuJiM0MztcbiBcdC8qIFJlY29ubmVjdCBpbmNvcmUgdW5saW5rZWQgbGlzdCAqL1xuIFx0ZXJyb3IgPSB4cmVwX2lub2RlX3VubGlua2VkKHNjKTtcbiBcdGlmIChlcnJvcilcbmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2FvcHMuYyBiL2ZzL3hmcy94ZnNfYW9wcy5jXG5pbmRleCA1MTI5M2I2ZjMzMWYwYi4uYjA1MzdjNjdlOTYwZTEgMTAwNjQ0XG4tLS0gYS9mcy94ZnMveGZzX2FvcHMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMveGZzL3hmc19hb3BzLmNcbkBAIC0yMiw3ICYjNDM7MjIsOSBAQFxuICNpbmNsdWRlIFwmIzM0O3hmc19pY2FjaGUuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3hmc196b25lX2FsbG9jLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDt4ZnNfcnRncm91cC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3hmc19mc3Zlcml0eS5oXCYjMzQ7XG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYmlvLWludGVncml0eS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZzdmVyaXR5LmhcdTAwM2VcbiBcbiBzdHJ1Y3QgeGZzX3dyaXRlcGFnZV9jdHgge1xuIFx0c3RydWN0IGlvbWFwX3dyaXRlcGFnZV9jdHggY3R4O1xuQEAgLTE4MSw2ICYjNDM7MTgzLDIzIEBAIHhmc19lbmRfaW9lbmRfd3JpdGUoXG4gXHRtZW1hbGxvY19ub2ZzX3Jlc3RvcmUobm9mc19mbGFnKTtcbiB9XG4gXG4mIzQzOy8qXG4mIzQzOyAqIElPIHJlYWQgY29tcGxldGlvbi5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkXG4mIzQzO3hmc19lbmRfaW9lbmRfcmVhZChcbiYjNDM7XHRzdHJ1Y3QgaW9tYXBfaW9lbmRcdCppb2VuZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB4ZnNfaW5vZGVcdCppcCA9IFhGU19JKGlvZW5kLVx1MDAzZWlvX2lub2RlKTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFpb2VuZC1cdTAwM2Vpb19iaW8uYmlfc3RhdHVzIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHR4ZnNfZnN2ZXJpdHlfaXNfZmlsZV9kYXRhKGlwLCBpb2VuZC1cdTAwM2Vpb19vZmZzZXQpKVxuJiM0MztcdFx0ZnN2ZXJpdHlfdmVyaWZ5X2Jpbyhpb2VuZC1cdTAwM2Vpb192aSxcbiYjNDM7XHRcdFx0XHQgICAgXHUwMDI2aW9lbmQtXHUwMDNlaW9fYmlvKTtcbiYjNDM7XHRpb21hcF9maW5pc2hfaW9lbmRzKGlvZW5kLFxuJiM0MztcdFx0YmxrX3N0YXR1c190b19lcnJubyhpb2VuZC1cdTAwM2Vpb19iaW8uYmlfc3RhdHVzKSk7XG4mIzQzO31cbiYjNDM7XG4gLypcbiAgKiBGaW5pc2ggYWxsIHBlbmRpbmcgSU8gY29tcGxldGlvbnMgdGhhdCByZXF1aXJlIHRyYW5zYWN0aW9uYWwgbW9kaWZpY2F0aW9ucy5cbiAgKlxuQEAgLTIxNSw4ICYjNDM7MjM0LDcgQEAgeGZzX2VuZF9pbyhcbiBcdFx0bGlzdF9kZWxfaW5pdChcdTAwMjZpb2VuZC1cdTAwM2Vpb19saXN0KTtcbiBcdFx0aW9tYXBfaW9lbmRfdHJ5X21lcmdlKGlvZW5kLCBcdTAwMjZ0bXApO1xuIFx0XHRpZiAoYmlvX29wKFx1MDAyNmlvZW5kLVx1MDAzZWlvX2JpbykgPT0gUkVRX09QX1JFQUQpXG4tXHRcdFx0aW9tYXBfZmluaXNoX2lvZW5kcyhpb2VuZCxcbi1cdFx0XHRcdGJsa19zdGF0dXNfdG9fZXJybm8oaW9lbmQtXHUwMDNlaW9fYmlvLmJpX3N0YXR1cykpO1xuJiM0MztcdFx0XHR4ZnNfZW5kX2lvZW5kX3JlYWQoaW9lbmQpO1xuIFx0XHRlbHNlXG4gXHRcdFx0eGZzX2VuZF9pb2VuZF93cml0ZShpb2VuZCk7XG4gXHRcdGNvbmRfcmVzY2hlZCgpO1xuQEAgLTI0Miw5ICYjNDM7MjYwLDE0IEBAIHhmc19lbmRfYmlvKFxuIFx0fVxuIFxuIFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2aXAtXHUwMDNlaV9pb2VuZF9sb2NrLCBmbGFncyk7XG4tXHRpZiAobGlzdF9lbXB0eShcdTAwMjZpcC1cdTAwM2VpX2lvZW5kX2xpc3QpKVxuLVx0XHRXQVJOX09OX09OQ0UoIXF1ZXVlX3dvcmsobXAtXHUwMDNlbV91bndyaXR0ZW5fd29ya3F1ZXVlLFxuJiM0MztcdGlmIChsaXN0X2VtcHR5KFx1MDAyNmlwLVx1MDAzZWlfaW9lbmRfbGlzdCkpIHtcbiYjNDM7XHRcdGlmIChJU19FTkFCTEVEKENPTkZJR19GU19WRVJJVFkpIFx1MDAyNlx1MDAyNiBpb2VuZC1cdTAwM2Vpb192aSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICBpb2VuZC1cdTAwM2Vpb19vZmZzZXQgXHUwMDNjIHhmc19mc3Zlcml0eV9tZXRhZGF0YV9vZmZzZXQoaXApKVxuJiM0MztcdFx0XHRmc3Zlcml0eV9lbnF1ZXVlX3ZlcmlmeV93b3JrKFx1MDAyNmlwLVx1MDAzZWlfaW9lbmRfd29yayk7XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdFdBUk5fT05fT05DRSghcXVldWVfd29yayhtcC1cdTAwM2VtX3Vud3JpdHRlbl93b3JrcXVldWUsXG4gXHRcdFx0XHRcdCBcdTAwMjZpcC1cdTAwM2VpX2lvZW5kX3dvcmspKTtcbiYjNDM7XHR9XG4gXHRsaXN0X2FkZF90YWlsKFx1MDAyNmlvZW5kLVx1MDAzZWlvX2xpc3QsIFx1MDAyNmlwLVx1MDAzZWlfaW9lbmRfbGlzdCk7XG4gXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmlwLVx1MDAzZWlfaW9lbmRfbG9jaywgZmxhZ3MpO1xuIH1cbkBAIC0zNTAsMTIgJiM0MzszNzMsMTYgQEAgeGZzX21hcF9ibG9ja3MoXG4gXHRpbnRcdFx0XHRyZXRyaWVzID0gMDtcbiBcdGludFx0XHRcdGVycm9yID0gMDtcbiBcdHVuc2lnbmVkIGludFx0XHQqc2VxO1xuJiM0MztcdHVuc2lnbmVkIGludFx0XHRpb21hcF9mbGFncyA9IDA7XG4gXG4gXHRpZiAoeGZzX2lzX3NodXRkb3duKG1wKSlcbiBcdFx0cmV0dXJuIC1FSU87XG4gXG4gXHRYRlNfRVJST1JUQUdfREVMQVkobXAsIFhGU19FUlJUQUdfV0JfREVMQVlfTVMpO1xuIFxuJiM0MztcdGlmICh4ZnNfaWZsYWdzX3Rlc3QoaXAsIFhGU19WRVJJVFlfQ09OU1RSVUNUSU9OKSlcbiYjNDM7XHRcdGlvbWFwX2ZsYWdzIHw9IElPTUFQX0ZfRlNWRVJJVFk7XG4mIzQzO1xuIFx0LypcbiBcdCAqIENPVyBmb3JrIGJsb2NrcyBjYW4gb3ZlcmxhcCBkYXRhIGZvcmsgYmxvY2tzIGV2ZW4gaWYgdGhlIGJsb2Nrc1xuIFx0ICogYXJlbiYjMzk7dCBzaGFyZWQuICBDT1cgSS9PIGFsd2F5cyB0YWtlcyBwcmVjZWRlbnQsIHNvIHdlIG11c3QgYWx3YXlzXG5AQCAtNDQzLDcgJiM0Mzs0NzAsOCBAQCB4ZnNfbWFwX2Jsb2NrcyhcbiBcdCAgICBpc251bGxzdGFydGJsb2NrKGltYXAuYnJfc3RhcnRibG9jaykpXG4gXHRcdGdvdG8gYWxsb2NhdGVfYmxvY2tzO1xuIFxuLVx0eGZzX2JtYnRfdG9faW9tYXAoaXAsIFx1MDAyNndwYy1cdTAwM2Vpb21hcCwgXHUwMDI2aW1hcCwgMCwgMCwgWEZTX1dQQyh3cGMpLVx1MDAzZWRhdGFfc2VxKTtcbiYjNDM7XHR4ZnNfYm1idF90b19pb21hcChpcCwgXHUwMDI2d3BjLVx1MDAzZWlvbWFwLCBcdTAwMjZpbWFwLCAwLCBpb21hcF9mbGFncyxcbiYjNDM7XHRcdFx0ICBYRlNfV1BDKHdwYyktXHUwMDNlZGF0YV9zZXEpO1xuIFx0dHJhY2VfeGZzX21hcF9ibG9ja3NfZm91bmQoaXAsIG9mZnNldCwgY291bnQsIHdoaWNoZm9yaywgXHUwMDI2aW1hcCk7XG4gXHRyZXR1cm4gMDtcbiBhbGxvY2F0ZV9ibG9ja3M6XG5AQCAtNTkwLDEyICYjNDM7NjE4LDE2IEBAIHhmc196b25lZF9tYXBfYmxvY2tzKFxuIFx0eGZzX2ZpbGJsa3NfdFx0XHRjb3VudF9mc2I7XG4gXHRzdHJ1Y3QgeGZzX2JtYnRfaXJlY1x0aW1hcCwgZGVsO1xuIFx0c3RydWN0IHhmc19pZXh0X2N1cnNvclx0aWN1cjtcbiYjNDM7XHR1MTZcdFx0XHRpb21hcF9mbGFncyA9IDA7XG4gXG4gXHRpZiAoeGZzX2lzX3NodXRkb3duKG1wKSlcbiBcdFx0cmV0dXJuIC1FSU87XG4gXG4gXHRYRlNfRVJST1JUQUdfREVMQVkobXAsIFhGU19FUlJUQUdfV0JfREVMQVlfTVMpO1xuIFxuJiM0MztcdGlmICh4ZnNfaWZsYWdzX3Rlc3QoaXAsIFhGU19WRVJJVFlfQ09OU1RSVUNUSU9OKSlcbiYjNDM7XHRcdGlvbWFwX2ZsYWdzIHw9IElPTUFQX0ZfRlNWRVJJVFk7XG4mIzQzO1xuIFx0LypcbiBcdCAqIEFsbCBkaXJ0eSBkYXRhIG11c3QgYmUgY292ZXJlZCBieSBkZWxhbGxvYyBleHRlbnRzLiAgQnV0IHRydW5jYXRlIGNhblxuIFx0ICogcmVtb3ZlIGRlbGFsbG9jIGV4dGVudHMgdW5kZXJuZWF0aCB1cyBvciByZWR1Y2UgdGhlaXIgc2l6ZS5cbkBAIC02MTksNyAmIzQzOzY1MSw3IEBAIHhmc196b25lZF9tYXBfYmxvY2tzKFxuIFx0XHRpbWFwLmJyX3N0YXJ0YmxvY2sgPSBIT0xFU1RBUlRCTE9DSztcbiBcdFx0aW1hcC5icl9zdGF0ZSA9IFhGU19FWFRfTk9STTtcbiBcdFx0eGZzX2l1bmxvY2soaXAsIFhGU19JTE9DS19FWENMKTtcbi1cdFx0eGZzX2JtYnRfdG9faW9tYXAoaXAsIFx1MDAyNndwYy1cdTAwM2Vpb21hcCwgXHUwMDI2aW1hcCwgMCwgMCwgMCk7XG4mIzQzO1x0XHR4ZnNfYm1idF90b19pb21hcChpcCwgXHUwMDI2d3BjLVx1MDAzZWlvbWFwLCBcdTAwMjZpbWFwLCAwLCBpb21hcF9mbGFncywgMCk7XG4gXHRcdHJldHVybiAwO1xuIFx0fVxuIFx0ZW5kX2ZzYiA9IG1pbihlbmRfZnNiLCBpbWFwLmJyX3N0YXJ0b2ZmICYjNDM7IGltYXAuYnJfYmxvY2tjb3VudCk7XG5AQCAtNjMyLDcgJiM0Mzs2NjQsNyBAQCB4ZnNfem9uZWRfbWFwX2Jsb2NrcyhcbiBcdHhmc19pdW5sb2NrKGlwLCBYRlNfSUxPQ0tfRVhDTCk7XG4gXG4gXHR3cGMtXHUwMDNlaW9tYXAudHlwZSA9IElPTUFQX01BUFBFRDtcbi1cdHdwYy1cdTAwM2Vpb21hcC5mbGFncyA9IElPTUFQX0ZfRElSVFk7XG4mIzQzO1x0d3BjLVx1MDAzZWlvbWFwLmZsYWdzID0gaW9tYXBfZmxhZ3MgfCBJT01BUF9GX0RJUlRZO1xuIFx0d3BjLVx1MDAzZWlvbWFwLmJkZXYgPSBtcC1cdTAwM2VtX3J0ZGV2X3RhcmdwLVx1MDAzZWJ0X2JkZXY7XG4gXHR3cGMtXHUwMDNlaW9tYXAub2Zmc2V0ID0gb2Zmc2V0O1xuIFx0d3BjLVx1MDAzZWlvbWFwLmxlbmd0aCA9IFhGU19GU0JfVE9fQihtcCwgY291bnRfZnNiKTtcbkBAIC02ODQsNiAmIzQzOzcxNiwyMiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGlvbWFwX3dyaXRlYmFja19vcHMgeGZzX3pvbmVkX3dyaXRlYmFja19vcHMgPSB7XG4gXHQud3JpdGViYWNrX3N1Ym1pdFx0PSB4ZnNfem9uZWRfd3JpdGViYWNrX3N1Ym1pdCxcbiB9O1xuIFxuJiM0MztzdGF0aWMgaW50XG4mIzQzO3hmc19pb21hcF93cml0ZXBhZ2VzKFxuJiM0MztcdHN0cnVjdCB4ZnNfaW5vZGVcdFx0KmlwLFxuJiM0MztcdHN0cnVjdCBpb21hcF93cml0ZXBhZ2VfY3R4XHQqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBXcml0ZWJhY2sgZG9lcyBub3Qgd29yayBmb3IgZm9saW9zIHBhc3QgRU9GLCBsZXQgaXQga25vdyB0aGF0XG4mIzQzO1x0ICogSS9PIGhhcHBlbnMgZm9yIGZzdmVyaXR5IG1ldGFkYXRhIGFuZCB0aGlzIHJlc3RyaWN0aW9uIG5lZWRcbiYjNDM7XHQgKiB0byBiZSBza2lwcGVkXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHhmc19pZmxhZ3NfdGVzdChpcCwgWEZTX1ZFUklUWV9DT05TVFJVQ1RJT04pKVxuJiM0MztcdFx0Y3R4LVx1MDAzZWlvbWFwLmZsYWdzIHw9IElPTUFQX0ZfRlNWRVJJVFk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBpb21hcF93cml0ZXBhZ2VzKGN0eCk7XG4mIzQzO31cbiYjNDM7XG4gU1RBVElDIGludFxuIHhmc192bV93cml0ZXBhZ2VzKFxuIFx0c3RydWN0IGFkZHJlc3Nfc3BhY2VcdCptYXBwaW5nLFxuQEAgLTcwMyw3ICYjNDM7NzUxLDcgQEAgeGZzX3ZtX3dyaXRlcGFnZXMoXG4gXHRcdH07XG4gXHRcdGludFx0XHRcdFx0ZXJyb3I7XG4gXG4tXHRcdGVycm9yID0gaW9tYXBfd3JpdGVwYWdlcyhcdTAwMjZ4Yy5jdHgpO1xuJiM0MztcdFx0ZXJyb3IgPSB4ZnNfaW9tYXBfd3JpdGVwYWdlcyhpcCwgXHUwMDI2eGMuY3R4KTtcbiBcdFx0aWYgKHhjLm9wZW5fem9uZSlcbiBcdFx0XHR4ZnNfb3Blbl96b25lX3B1dCh4Yy5vcGVuX3pvbmUpO1xuIFx0XHRyZXR1cm4gZXJyb3I7XG5AQCAtNzE2LDcgJiM0Mzs3NjQsNyBAQCB4ZnNfdm1fd3JpdGVwYWdlcyhcbiBcdFx0XHR9LFxuIFx0XHR9O1xuIFxuLVx0XHRyZXR1cm4gaW9tYXBfd3JpdGVwYWdlcyhcdTAwMjZ3cGMuY3R4KTtcbiYjNDM7XHRcdHJldHVybiB4ZnNfaW9tYXBfd3JpdGVwYWdlcyhpcCwgXHUwMDI2d3BjLmN0eCk7XG4gXHR9XG4gfVxuIFxuQEAgLTc2MSw5ICYjNDM7ODA5LDEyIEBAIHhmc19iaW9fc3VibWl0X3JlYWQoXG4gXHRzdHJ1Y3QgaW9tYXBfcmVhZF9mb2xpb19jdHhcdCpjdHgpXG4ge1xuIFx0c3RydWN0IGJpb1x0XHRcdCpiaW8gPSBjdHgtXHUwMDNlcmVhZF9jdHg7XG4mIzQzO1x0c3RydWN0IGlvbWFwX2lvZW5kXHRcdCppb2VuZDtcbiBcbiBcdC8qIGRlZmVyIHJlYWQgY29tcGxldGlvbnMgdG8gdGhlIGlvZW5kIHdvcmtxdWV1ZSAqL1xuLVx0aW9tYXBfaW5pdF9pb2VuZChpdGVyLVx1MDAzZWlub2RlLCBiaW8sIGN0eC1cdTAwM2VyZWFkX2N0eF9maWxlX29mZnNldCwgMCk7XG4mIzQzO1x0aW9lbmQgPSBpb21hcF9pbml0X2lvZW5kKGl0ZXItXHUwMDNlaW5vZGUsIGJpbywgY3R4LVx1MDAzZXJlYWRfY3R4X2ZpbGVfb2Zmc2V0LFxuJiM0MztcdFx0XHQwKTtcbiYjNDM7XHRpb2VuZC1cdTAwM2Vpb192aSA9IGN0eC1cdTAwM2V2aTtcbiBcdGlvbWFwX2Jpb19zdWJtaXRfcmVhZF9lbmRpbyhpdGVyLCBjdHgsIHhmc19lbmRfYmlvKTtcbiB9XG4gXG5AQCAtNzc1LDExICYjNDM7ODI2LDEzIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaW9tYXBfcmVhZF9vcHMgeGZzX2lvbWFwX3JlYWRfb3BzID0ge1xuIFxuIHN0YXRpYyBpbmxpbmUgY29uc3Qgc3RydWN0IGlvbWFwX3JlYWRfb3BzICpcbiB4ZnNfZ2V0X2lvbWFwX3JlYWRfb3BzKFxuLVx0Y29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2VcdCptYXBwaW5nKVxuJiM0MztcdGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlXHQqbWFwcGluZyxcbiYjNDM7XHRsb2ZmX3RcdFx0XHRcdHBvc2l0aW9uKVxuIHtcbiBcdHN0cnVjdCB4ZnNfaW5vZGVcdFx0KmlwID0gWEZTX0kobWFwcGluZy1cdTAwM2Vob3N0KTtcbiBcbi1cdGlmIChiZGV2X2hhc19pbnRlZ3JpdHlfY3N1bSh4ZnNfaW5vZGVfYnVmdGFyZyhpcCktXHUwMDNlYnRfYmRldikpXG4mIzQzO1x0aWYgKGJkZXZfaGFzX2ludGVncml0eV9jc3VtKHhmc19pbm9kZV9idWZ0YXJnKGlwKS1cdTAwM2VidF9iZGV2KSB8fFxuJiM0MztcdFx0XHR4ZnNfZnN2ZXJpdHlfaXNfZmlsZV9kYXRhKGlwLCBwb3NpdGlvbikpXG4gXHRcdHJldHVybiBcdTAwMjZ4ZnNfaW9tYXBfcmVhZF9vcHM7XG4gXHRyZXR1cm4gXHUwMDI2aW9tYXBfYmlvX3JlYWRfb3BzO1xuIH1cbkBAIC03OTEsNyAmIzQzOzg0NCw3IEBAIHhmc192bV9yZWFkX2ZvbGlvKFxuIHtcbiBcdHN0cnVjdCBpb21hcF9yZWFkX2ZvbGlvX2N0eFx0Y3R4ID0geyAuY3VyX2ZvbGlvID0gZm9saW8gfTtcbiBcbi1cdGN0eC5vcHMgPSB4ZnNfZ2V0X2lvbWFwX3JlYWRfb3BzKGZvbGlvLVx1MDAzZW1hcHBpbmcpO1xuJiM0MztcdGN0eC5vcHMgPSB4ZnNfZ2V0X2lvbWFwX3JlYWRfb3BzKGZvbGlvLVx1MDAzZW1hcHBpbmcsIGZvbGlvX3Bvcyhmb2xpbykpO1xuIFx0aW9tYXBfcmVhZF9mb2xpbyhcdTAwMjZ4ZnNfcmVhZF9pb21hcF9vcHMsIFx1MDAyNmN0eCwgTlVMTCk7XG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtODAyLDcgJiM0Mzs4NTUsNyBAQCB4ZnNfdm1fcmVhZGFoZWFkKFxuIHtcbiBcdHN0cnVjdCBpb21hcF9yZWFkX2ZvbGlvX2N0eFx0Y3R4ID0geyAucmFjID0gcmFjIH07XG4gXG4tXHRjdHgub3BzID0geGZzX2dldF9pb21hcF9yZWFkX29wcyhyYWMtXHUwMDNlbWFwcGluZyksXG4mIzQzO1x0Y3R4Lm9wcyA9IHhmc19nZXRfaW9tYXBfcmVhZF9vcHMocmFjLVx1MDAzZW1hcHBpbmcsIHJlYWRhaGVhZF9wb3MocmFjKSk7XG4gXHRpb21hcF9yZWFkYWhlYWQoXHUwMDI2eGZzX3JlYWRfaW9tYXBfb3BzLCBcdTAwMjZjdHgsIE5VTEwpO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2JtYXBfdXRpbC5jIGIvZnMveGZzL3hmc19ibWFwX3V0aWwuY1xuaW5kZXggM2I5ZjI2MmY4ZTkxMjguLmIzNGYyZjI3Y2M5M2E4IDEwMDY0NFxuLS0tIGEvZnMveGZzL3hmc19ibWFwX3V0aWwuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMveGZzL3hmc19ibWFwX3V0aWwuY1xuQEAgLTMxLDYgJiM0MzszMSw3IEBAXG4gI2luY2x1ZGUgXCYjMzQ7eGZzX3J0Yml0bWFwLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDt4ZnNfcnRncm91cC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7eGZzX3pvbmVfYWxsb2MuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9mc3Zlcml0eS5oXHUwMDNlXG4gXG4gLyogS2VybmVsIG9ubHkgQk1BUCByZWxhdGVkIGRlZmluaXRpb25zIGFuZCBmdW5jdGlvbnMgKi9cbiBcbkBAIC01NTMsNiAmIzQzOzU1NCwxMyBAQCB4ZnNfY2FuX2ZyZWVfZW9mYmxvY2tzKFxuIFx0aWYgKGxhc3RfZnNiIFx1MDAzYz0gZW5kX2ZzYilcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuJiM0MztcdC8qXG4mIzQzO1x0ICogTm90aGluZyB0byBjbGVhbiBvbiBmc3Zlcml0eSBpbm9kZXMgYXMgdGhleSBkb24mIzM5O3QgdXNlIHByZWFsbG9jIGFuZFxuJiM0MztcdCAqIHRoZXJlIG5vIGRlbGFsbG9jIGFzIG9ubHkgd3JpdHRlbiBkYXRhIGlzIGZzdmVyaXR5IG1ldGFkYXRhXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKElTX1ZFUklUWShWRlNfSShpcCkpKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiBcdC8qXG4gXHQgKiBDaGVjayBpZiB0aGVyZSBpcyBhbiBwb3N0LUVPRiBleHRlbnQgdG8gZnJlZS4gIElmIHRoZXJlIGFyZSBhbnlcbiBcdCAqIGRlbGFsbG9jIGJsb2NrcyBhdHRhY2hlZCB0byB0aGUgaW5vZGUgKGRhdGEgZm9yayBkZWxhbGxvY1xuZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfZmlsZS5jIGIvZnMveGZzL3hmc19maWxlLmNcbmluZGV4IDg0NWE5N2M5YjA2MzBiLi5jYmExOTRkNjc4ZmM3NyAxMDA2NDRcbi0tLSBhL2ZzL3hmcy94ZnNfZmlsZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy94ZnMveGZzX2ZpbGUuY1xuQEAgLTM3LDYgJiM0MzszNyw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZmFkdmlzZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbW91bnQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZpbGVsb2NrLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvZnN2ZXJpdHkuaFx1MDAzZVxuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgeGZzX2ZpbGVfdm1fb3BzO1xuIFxuQEAgLTI0NSw2ICYjNDM7MjQ2LDI1IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaW9tYXBfZGlvX29wcyB4ZnNfZGlvX3JlYWRfYm91bmNlX29wcyA9IHtcbiBcdC5iaW9fc2V0XHQ9IFx1MDAyNmlvbWFwX2lvZW5kX2Jpb3NldCxcbiB9O1xuIFxuJiM0MztTVEFUSUMgc3NpemVfdFxuJiM0Mzt4ZnNfZmlsZV9idWZmZXJlZF9yZWFkKFxuJiM0MztcdHN0cnVjdCBraW9jYlx0XHQqaW9jYixcbiYjNDM7XHRzdHJ1Y3QgaW92X2l0ZXJcdFx0KnRvKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHhmc19pbm9kZVx0KmlwID0gWEZTX0koZmlsZV9pbm9kZShpb2NiLVx1MDAzZWtpX2ZpbHApKTtcbiYjNDM7XHRzc2l6ZV90XHRcdFx0cmV0O1xuJiM0MztcbiYjNDM7XHR0cmFjZV94ZnNfZmlsZV9idWZmZXJlZF9yZWFkKGlvY2IsIHRvKTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geGZzX2lsb2NrX2lvY2IoaW9jYiwgWEZTX0lPTE9DS19TSEFSRUQpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdHJldCA9IGdlbmVyaWNfZmlsZV9yZWFkX2l0ZXIoaW9jYiwgdG8pO1xuJiM0MztcdHhmc19pdW5sb2NrKGlwLCBYRlNfSU9MT0NLX1NIQVJFRCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4gU1RBVElDIHNzaXplX3RcbiB4ZnNfZmlsZV9kaW9fcmVhZChcbiBcdHN0cnVjdCBraW9jYlx0XHQqaW9jYixcbkBAIC0yNjUsNiAmIzQzOzI4NSwxNiBAQCB4ZnNfZmlsZV9kaW9fcmVhZChcbiBcdHJldCA9IHhmc19pbG9ja19pb2NiKGlvY2IsIFhGU19JT0xPQ0tfU0hBUkVEKTtcbiBcdGlmIChyZXQpXG4gXHRcdHJldHVybiByZXQ7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBSZS1jaGVjayB2ZXJpdHkgc3RhdHVzIGFmdGVyIGFjcXVpcmluZyBsb2NrLiBUaGlzIHByZXZlbnRzIFRPQ1RPVSBpblxuJiM0MztcdCAqIHhmc19maWxlX3JlYWRfaXRlcigpIHdoaWxlIGZhbGxpbmcgYmFjayBmcm9tIERJTyB0byBidWZmZXJlZCBJL08gYXNcbiYjNDM7XHQgKiBub3cgd2UgYXJlIGhvbGRpbmcgYSBsb2NrXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKGZzdmVyaXR5X2FjdGl2ZShWRlNfSShpcCkpKSB7XG4mIzQzO1x0XHR4ZnNfaXVubG9jayhpcCwgWEZTX0lPTE9DS19TSEFSRUQpO1xuJiM0MztcdFx0aW9jYi1cdTAwM2VraV9mbGFncyBcdTAwMjY9IH5JT0NCX0RJUkVDVDtcbiYjNDM7XHRcdHJldHVybiB4ZnNfZmlsZV9idWZmZXJlZF9yZWFkKGlvY2IsIHRvKTtcbiYjNDM7XHR9XG4gXHRpZiAobWFwcGluZ19zdGFibGVfd3JpdGVzKGlvY2ItXHUwMDNla2lfZmlscC1cdTAwM2VmX21hcHBpbmcpKSB7XG4gXHRcdGRpb19vcHMgPSBcdTAwMjZ4ZnNfZGlvX3JlYWRfYm91bmNlX29wcztcbiBcdFx0ZGlvX2ZsYWdzIHw9IElPTUFQX0RJT19CT1VOQ0U7XG5AQCAtMjgxLDcgJiM0MzszMTEsOCBAQCB4ZnNfZmlsZV9kYXhfcmVhZChcbiBcdHN0cnVjdCBraW9jYlx0XHQqaW9jYixcbiBcdHN0cnVjdCBpb3ZfaXRlclx0XHQqdG8pXG4ge1xuLVx0c3RydWN0IHhmc19pbm9kZVx0KmlwID0gWEZTX0koaW9jYi1cdTAwM2VraV9maWxwLVx1MDAzZWZfbWFwcGluZy1cdTAwM2Vob3N0KTtcbiYjNDM7XHRzdHJ1Y3QgaW5vZGVcdFx0Kmlub2RlID0gaW9jYi1cdTAwM2VraV9maWxwLVx1MDAzZWZfbWFwcGluZy1cdTAwM2Vob3N0O1xuJiM0MztcdHN0cnVjdCB4ZnNfaW5vZGVcdCppcCA9IFhGU19JKGlub2RlKTtcbiBcdHNzaXplX3RcdFx0XHRyZXQgPSAwO1xuIFxuIFx0dHJhY2VfeGZzX2ZpbGVfZGF4X3JlYWQoaW9jYiwgdG8pO1xuQEAgLTI5OSwyNSAmIzQzOzMzMCw2IEBAIHhmc19maWxlX2RheF9yZWFkKFxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4tU1RBVElDIHNzaXplX3Rcbi14ZnNfZmlsZV9idWZmZXJlZF9yZWFkKFxuLVx0c3RydWN0IGtpb2NiXHRcdCppb2NiLFxuLVx0c3RydWN0IGlvdl9pdGVyXHRcdCp0bylcbi17XG4tXHRzdHJ1Y3QgeGZzX2lub2RlXHQqaXAgPSBYRlNfSShmaWxlX2lub2RlKGlvY2ItXHUwMDNla2lfZmlscCkpO1xuLVx0c3NpemVfdFx0XHRcdHJldDtcbi1cbi1cdHRyYWNlX3hmc19maWxlX2J1ZmZlcmVkX3JlYWQoaW9jYiwgdG8pO1xuLVxuLVx0cmV0ID0geGZzX2lsb2NrX2lvY2IoaW9jYiwgWEZTX0lPTE9DS19TSEFSRUQpO1xuLVx0aWYgKHJldClcbi1cdFx0cmV0dXJuIHJldDtcbi1cdHJldCA9IGdlbmVyaWNfZmlsZV9yZWFkX2l0ZXIoaW9jYiwgdG8pO1xuLVx0eGZzX2l1bmxvY2soaXAsIFhGU19JT0xPQ0tfU0hBUkVEKTtcbi1cbi1cdHJldHVybiByZXQ7XG4tfVxuLVxuIFNUQVRJQyBzc2l6ZV90XG4geGZzX2ZpbGVfcmVhZF9pdGVyKFxuIFx0c3RydWN0IGtpb2NiXHRcdCppb2NiLFxuQEAgLTMzMiw2ICYjNDM7MzQ0LDE0IEBAIHhmc19maWxlX3JlYWRfaXRlcihcbiBcdGlmICh4ZnNfaXNfc2h1dGRvd24obXApKVxuIFx0XHRyZXR1cm4gLUVJTztcbiBcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEluIGNhc2UgZnMtdmVyaXR5IGlzIGVuYWJsZWQsIHdlIGFsc28gZmFsbGJhY2sgdG8gdGhlIGJ1ZmZlcmVkIHJlYWRcbiYjNDM7XHQgKiBmcm9tIHRoZSBkaXJlY3QgcmVhZCBwYXRoLiBUaGVyZWZvcmUsIElPQ0JfRElSRUNUIGlzIHNldCBhbmQgbmVlZCB0b1xuJiM0MztcdCAqIGJlIGNsZWFyZWQgKHNlZSBnZW5lcmljX2ZpbGVfcmVhZF9pdGVyKCkpXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKGZzdmVyaXR5X2FjdGl2ZShpbm9kZSkpXG4mIzQzO1x0XHRpb2NiLVx1MDAzZWtpX2ZsYWdzIFx1MDAyNj0gfklPQ0JfRElSRUNUO1xuJiM0MztcbiBcdGlmIChJU19EQVgoaW5vZGUpKVxuIFx0XHRyZXQgPSB4ZnNfZmlsZV9kYXhfcmVhZChpb2NiLCB0byk7XG4gXHRlbHNlIGlmIChpb2NiLVx1MDAzZWtpX2ZsYWdzIFx1MDAyNiBJT0NCX0RJUkVDVClcbkBAIC0xNzAwLDExICYjNDM7MTcyMCwxOCBAQCB4ZnNfZmlsZV9vcGVuKFxuIFx0c3RydWN0IGlub2RlXHQqaW5vZGUsXG4gXHRzdHJ1Y3QgZmlsZVx0KmZpbGUpXG4ge1xuJiM0MztcdGludFx0XHRlcnJvcjtcbiYjNDM7XG4gXHRpZiAoeGZzX2lzX3NodXRkb3duKFhGU19NKGlub2RlLVx1MDAzZWlfc2IpKSlcbiBcdFx0cmV0dXJuIC1FSU87XG4gXHRmaWxlLVx1MDAzZWZfbW9kZSB8PSBGTU9ERV9OT1dBSVQgfCBGTU9ERV9DQU5fT0RJUkVDVDtcbiBcdGlmICh4ZnNfZ2V0X2F0b21pY193cml0ZV9taW4oWEZTX0koaW5vZGUpKSBcdTAwM2UgMClcbiBcdFx0ZmlsZS1cdTAwM2VmX21vZGUgfD0gRk1PREVfQ0FOX0FUT01JQ19XUklURTtcbiYjNDM7XG4mIzQzO1x0ZXJyb3IgPSBmc3Zlcml0eV9maWxlX29wZW4oaW5vZGUsIGZpbGUpO1xuJiM0MztcdGlmIChlcnJvcilcbiYjNDM7XHRcdHJldHVybiBlcnJvcjtcbiYjNDM7XG4gXHRyZXR1cm4gZ2VuZXJpY19maWxlX29wZW4oaW5vZGUsIGZpbGUpO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2ZzdmVyaXR5LmMgYi9mcy94ZnMveGZzX2ZzdmVyaXR5LmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uOTczMjgxMWExNDQ0ZTZcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3hmcy94ZnNfZnN2ZXJpdHkuY1xuQEAgLTAsMCAmIzQzOzEsNDczIEBAXG4mIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXG4mIzQzOy8qXG4mIzQzOyAqIENvcHlyaWdodCAoQykgMjAyNiBSZWQgSGF0LCBJbmMuXG4mIzQzOyAqL1xuJiM0MzsjaW5jbHVkZSBcJiMzNDt4ZnNfcGxhdGZvcm0uaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDt4ZnNfZm9ybWF0LmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7eGZzX3NoYXJlZC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3hmc190cmFuc19yZXN2LmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7eGZzX21vdW50LmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7eGZzX2RhX2Zvcm1hdC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3hmc19kYV9idHJlZS5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3hmc19pbm9kZS5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3hmc19sb2dfZm9ybWF0LmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7eGZzX2JtYXBfdXRpbC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3hmc190cmFucy5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3hmc190cmFjZS5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3hmc19xdW90YS5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3hmc19mc3Zlcml0eS5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3hmc19pb21hcC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3hmc19lcnJvci5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3hmc19oZWFsdGguaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDt4ZnNfYm1hcC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3hmc19ibWFwX3V0aWwuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9mc3Zlcml0eS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2lvbWFwLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcGFnZW1hcC5oXHUwMDNlXG4mIzQzO1xuJiM0Mztsb2ZmX3RcbiYjNDM7eGZzX2ZzdmVyaXR5X21ldGFkYXRhX29mZnNldChcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgeGZzX2lub2RlXHQqaXApXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gcm91bmRfdXAoaV9zaXplX3JlYWQoVkZTX0lDKGlwKSksIFhGU19GU1ZFUklUWV9TVEFSVF9BTElHTik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2Jvb2xcbiYjNDM7eGZzX2ZzdmVyaXR5X2lzX2ZpbGVfZGF0YShcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgeGZzX2lub2RlXHQqaXAsXG4mIzQzO1x0bG9mZl90XHRcdFx0b2Zmc2V0KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGZzdmVyaXR5X2FjdGl2ZShWRlNfSUMoaXApKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0b2Zmc2V0IFx1MDAzYyB4ZnNfZnN2ZXJpdHlfbWV0YWRhdGFfb2Zmc2V0KGlwKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogUmV0cmlldmUgdGhlIHZlcml0eSBkZXNjcmlwdG9yLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludFxuJiM0Mzt4ZnNfZnN2ZXJpdHlfZ2V0X2Rlc2NyaXB0b3IoXG4mIzQzO1x0c3RydWN0IGlub2RlXHRcdCppbm9kZSxcbiYjNDM7XHR2b2lkXHRcdFx0KmJ1ZixcbiYjNDM7XHRzaXplX3RcdFx0XHRidWZfc2l6ZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB4ZnNfaW5vZGVcdCppcCA9IFhGU19JKGlub2RlKTtcbiYjNDM7XHRzdHJ1Y3QgeGZzX21vdW50XHQqbXAgPSBpcC1cdTAwM2VpX21vdW50O1xuJiM0MztcdF9fYmUzMlx0XHRcdGRfZGVzY19zaXplO1xuJiM0MztcdHUzMlx0XHRcdGRlc2Nfc2l6ZTtcbiYjNDM7XHR1NjRcdFx0XHRkZXNjX3NpemVfcG9zO1xuJiM0MztcdGludFx0XHRcdGVycm9yO1xuJiM0MztcdHU2NFx0XHRcdGRlc2NfcG9zO1xuJiM0MztcdHN0cnVjdCB4ZnNfYm1idF9pcmVjXHRyZWM7XG4mIzQzO1x0aW50XHRcdFx0aXNfZW1wdHk7XG4mIzQzO1x0dWludDMyX3RcdFx0YmxvY2tzaXplID0gaV9ibG9ja3NpemUoVkZTX0koaXApKTtcbiYjNDM7XHR4ZnNfZmlsZW9mZl90XHRcdGxhc3RfYmxvY2tfb2Zmc2V0O1xuJiM0MztcbiYjNDM7XHRBU1NFUlQoaW5vZGUtXHUwMDNlaV9mbGFncyBcdTAwMjYgU19WRVJJVFkpO1xuJiM0MztcdHhmc19pbG9jayhpcCwgWEZTX0lMT0NLX1NIQVJFRCk7XG4mIzQzO1x0ZXJyb3IgPSB4ZnNfYm1hcF9sYXN0X2V4dGVudChOVUxMLCBpcCwgWEZTX0RBVEFfRk9SSywgXHUwMDI2cmVjLCBcdTAwMjZpc19lbXB0eSk7XG4mIzQzO1x0eGZzX2l1bmxvY2soaXAsIFhGU19JTE9DS19TSEFSRUQpO1xuJiM0MztcdGlmIChlcnJvcilcbiYjNDM7XHRcdHJldHVybiBlcnJvcjtcbiYjNDM7XG4mIzQzO1x0aWYgKGlzX2VtcHR5KVxuJiM0MztcdFx0cmV0dXJuIC1FTk9EQVRBO1xuJiM0MztcbiYjNDM7XHRsYXN0X2Jsb2NrX29mZnNldCA9XG4mIzQzO1x0XHRYRlNfRlNCX1RPX0IobXAsIHJlYy5icl9zdGFydG9mZiAmIzQzOyByZWMuYnJfYmxvY2tjb3VudCk7XG4mIzQzO1x0aWYgKGxhc3RfYmxvY2tfb2Zmc2V0IFx1MDAzYz0geGZzX2ZzdmVyaXR5X21ldGFkYXRhX29mZnNldChpcCkpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT0RBVEE7XG4mIzQzO1xuJiM0MztcdGRlc2Nfc2l6ZV9wb3MgPSBsYXN0X2Jsb2NrX29mZnNldCAtIHNpemVvZihfX2JlMzIpO1xuJiM0MztcdGVycm9yID0gZnN2ZXJpdHlfcGFnZWNhY2hlX3JlYWQoaW5vZGUsIChjaGFyICopXHUwMDI2ZF9kZXNjX3NpemUsXG4mIzQzO1x0XHRcdHNpemVvZihkX2Rlc2Nfc2l6ZSksIGRlc2Nfc2l6ZV9wb3MpO1xuJiM0MztcdGlmIChlcnJvcilcbiYjNDM7XHRcdHJldHVybiBlcnJvcjtcbiYjNDM7XG4mIzQzO1x0ZGVzY19zaXplID0gYmUzMl90b19jcHUoZF9kZXNjX3NpemUpO1xuJiM0MztcdGlmIChYRlNfSVNfQ09SUlVQVChtcCwgZGVzY19zaXplIFx1MDAzZSBGU19WRVJJVFlfTUFYX0RFU0NSSVBUT1JfU0laRSkpIHtcbiYjNDM7XHRcdHhmc19pbm9kZV9tYXJrX3NpY2soWEZTX0koaW5vZGUpLCBYRlNfU0lDS19JTk9fRlNWRVJJVFkpO1xuJiM0MztcdFx0cmV0dXJuIC1FUkFOR0U7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoWEZTX0lTX0NPUlJVUFQobXAsIGRlc2Nfc2l6ZSBcdTAwM2UgZGVzY19zaXplX3BvcykpIHtcbiYjNDM7XHRcdHhmc19pbm9kZV9tYXJrX3NpY2soWEZTX0koaW5vZGUpLCBYRlNfU0lDS19JTk9fRlNWRVJJVFkpO1xuJiM0MztcdFx0cmV0dXJuIC1FUkFOR0U7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoIWJ1Zl9zaXplKVxuJiM0MztcdFx0cmV0dXJuIGRlc2Nfc2l6ZTtcbiYjNDM7XG4mIzQzO1x0aWYgKFhGU19JU19DT1JSVVBUKG1wLCBkZXNjX3NpemUgXHUwMDNlIGJ1Zl9zaXplKSkge1xuJiM0MztcdFx0eGZzX2lub2RlX21hcmtfc2ljayhYRlNfSShpbm9kZSksIFhGU19TSUNLX0lOT19GU1ZFUklUWSk7XG4mIzQzO1x0XHRyZXR1cm4gLUVSQU5HRTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGRlc2NfcG9zID0gcm91bmRfZG93bihkZXNjX3NpemVfcG9zIC0gZGVzY19zaXplLCBibG9ja3NpemUpO1xuJiM0MztcdGlmIChkZXNjX3BvcyBcdTAwM2MgeGZzX2ZzdmVyaXR5X21ldGFkYXRhX29mZnNldChpcCkpIHtcbiYjNDM7XHRcdHhmc19pbm9kZV9tYXJrX3NpY2soWEZTX0koaW5vZGUpLCBYRlNfU0lDS19JTk9fRlNWRVJJVFkpO1xuJiM0MztcdFx0cmV0dXJuIC1FUkFOR0U7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRlcnJvciA9IGZzdmVyaXR5X3BhZ2VjYWNoZV9yZWFkKGlub2RlLCBidWYsIGRlc2Nfc2l6ZSwgZGVzY19wb3MpO1xuJiM0MztcdGlmIChlcnJvcilcbiYjNDM7XHRcdHJldHVybiBlcnJvcjtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGRlc2Nfc2l6ZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludFxuJiM0Mzt4ZnNfZnN2ZXJpdHlfd3JpdGVfZGVzY3JpcHRvcihcbiYjNDM7XHRzdHJ1Y3QgZmlsZVx0XHQqZmlsZSxcbiYjNDM7XHRjb25zdCB2b2lkXHRcdCpkZXNjLFxuJiM0MztcdHUzMlx0XHRcdGRlc2Nfc2l6ZSxcbiYjNDM7XHR1NjRcdFx0XHRtZXJrbGVfdHJlZV9zaXplKVxuJiM0Mzt7XG4mIzQzO1x0aW50XHRcdFx0ZXJyb3I7XG4mIzQzO1x0c3RydWN0IGlub2RlXHRcdCppbm9kZSA9IGZpbGVfaW5vZGUoZmlsZSk7XG4mIzQzO1x0c3RydWN0IHhmc19pbm9kZVx0KmlwID0gWEZTX0koaW5vZGUpO1xuJiM0MztcdHVuc2lnbmVkIGludFx0XHRibGtzaXplID0gaXAtXHUwMDNlaV9tb3VudC1cdTAwM2VtX3NiLnNiX2Jsb2Nrc2l6ZTtcbiYjNDM7XHR1NjRcdFx0XHR0cmVlX2xhc3RfYmxvY2sgPVxuJiM0MztcdFx0XHR4ZnNfZnN2ZXJpdHlfbWV0YWRhdGFfb2Zmc2V0KGlwKSAmIzQzOyBtZXJrbGVfdHJlZV9zaXplO1xuJiM0MztcdHU2NFx0XHRcdGRlc2NfcG9zID1cbiYjNDM7XHRcdFx0cm91bmRfdXAodHJlZV9sYXN0X2Jsb2NrLCBYRlNfRlNWRVJJVFlfU1RBUlRfQUxJR04pO1xuJiM0MztcdHU2NFx0XHRcdGRlc2NfZW5kID0gZGVzY19wb3MgJiM0MzsgZGVzY19zaXplO1xuJiM0MztcdF9fYmUzMlx0XHRcdGRlc2Nfc2l6ZV9kaXNrID0gY3B1X3RvX2JlMzIoZGVzY19zaXplKTtcbiYjNDM7XHR1NjRcdFx0XHRkZXNjX3NpemVfcG9zID1cbiYjNDM7XHRcdFx0cm91bmRfdXAoZGVzY19lbmQgJiM0Mzsgc2l6ZW9mKGRlc2Nfc2l6ZV9kaXNrKSwgYmxrc2l6ZSkgLVxuJiM0MztcdFx0XHRzaXplb2YoZGVzY19zaXplX2Rpc2spO1xuJiM0MztcbiYjNDM7XHRlcnJvciA9IGlvbWFwX2ZzdmVyaXR5X3dyaXRlKGZpbGUsIGRlc2Nfc2l6ZV9wb3MsIHNpemVvZihfX2JlMzIpLFxuJiM0MztcdFx0XHQoY29uc3Qgdm9pZCAqKVx1MDAyNmRlc2Nfc2l6ZV9kaXNrLFxuJiM0MztcdFx0XHRcdTAwMjZ4ZnNfYnVmZmVyZWRfd3JpdGVfaW9tYXBfb3BzLFxuJiM0MztcdFx0XHRcdTAwMjZ4ZnNfaW9tYXBfd3JpdGVfb3BzKTtcbiYjNDM7XHRpZiAoZXJyb3IpXG4mIzQzO1x0XHRyZXR1cm4gZXJyb3I7XG4mIzQzO1xuJiM0MztcdHJldHVybiBpb21hcF9mc3Zlcml0eV93cml0ZShmaWxlLCBkZXNjX3BvcywgZGVzY19zaXplLCBkZXNjLFxuJiM0MztcdFx0XHRcdTAwMjZ4ZnNfYnVmZmVyZWRfd3JpdGVfaW9tYXBfb3BzLFxuJiM0MztcdFx0XHRcdTAwMjZ4ZnNfaW9tYXBfd3JpdGVfb3BzKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogVHJ5IHRvIHJlbW92ZSBhbGwgdGhlIGZzdmVyaXR5IG1ldGFkYXRhIGFmdGVyIGEgZmFpbGVkIGVuYWJsZW1lbnQuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50XG4mIzQzO3hmc19mc3Zlcml0eV9kZWxldGVfbWV0YWRhdGEoXG4mIzQzO1x0c3RydWN0IHhmc19pbm9kZVx0KmlwKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHhmc190cmFuc1x0KnRwO1xuJiM0MztcdHN0cnVjdCB4ZnNfbW91bnRcdCptcCA9IGlwLVx1MDAzZWlfbW91bnQ7XG4mIzQzO1x0aW50XHRcdFx0ZXJyb3I7XG4mIzQzO1xuJiM0MztcdGVycm9yID0geGZzX3RyYW5zX2FsbG9jKG1wLCBcdTAwMjZNX1JFUyhtcCktXHUwMDNldHJfaXRydW5jYXRlLCAwLCAwLCAwLCBcdTAwMjZ0cCk7XG4mIzQzO1x0aWYgKGVycm9yKVxuJiM0MztcdFx0cmV0dXJuIGVycm9yO1xuJiM0MztcbiYjNDM7XHR4ZnNfaWxvY2soaXAsIFhGU19JTE9DS19FWENMKTtcbiYjNDM7XHR4ZnNfdHJhbnNfaWpvaW4odHAsIGlwLCAwKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBXZSByZW1vdmluZyBwb3N0IEVPRiBkYXRhLCBubyBuZWVkIHRvIHVwZGF0ZSBpX3NpemUgYXMgZnN2ZXJpdHlcbiYjNDM7XHQgKiBkaWRuJiMzOTt0IG1vdmUgaV9zaXplIGluIHRoZSBmaXJzdCBwbGFjZVxuJiM0MztcdCAqL1xuJiM0MztcdGVycm9yID0geGZzX2l0cnVuY2F0ZV9leHRlbnRzKFx1MDAyNnRwLCBpcCwgWEZTX0RBVEFfRk9SSywgWEZTX0lTSVpFKGlwKSk7XG4mIzQzO1x0aWYgKGVycm9yKVxuJiM0MztcdFx0Z290byBlcnJfY2FuY2VsO1xuJiM0MztcbiYjNDM7XHRlcnJvciA9IHhmc190cmFuc19jb21taXQodHApO1xuJiM0MztcdGlmIChlcnJvcilcbiYjNDM7XHRcdGdvdG8gb3V0X3VubG9jaztcbiYjNDM7b3V0X3VubG9jazpcbiYjNDM7XHR4ZnNfaXVubG9jayhpcCwgWEZTX0lMT0NLX0VYQ0wpO1xuJiM0MztcdHJldHVybiBlcnJvcjtcbiYjNDM7XG4mIzQzO2Vycl9jYW5jZWw6XG4mIzQzO1x0eGZzX3RyYW5zX2NhbmNlbCh0cCk7XG4mIzQzO1x0eGZzX2l1bmxvY2soaXAsIFhGU19JTE9DS19FWENMKTtcbiYjNDM7XHRyZXR1cm4gZXJyb3I7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnRcbiYjNDM7eGZzX2ZzdmVyaXR5X2NhbmNlbF91bndyaXR0ZW4oXG4mIzQzO1x0c3RydWN0IHhmc19pbm9kZVx0KmlwLFxuJiM0MztcdGxvZmZfdFx0XHRcdHN0YXJ0LFxuJiM0MztcdGxvZmZfdFx0XHRcdGVuZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB4ZnNfbW91bnRcdCptcCA9IGlwLVx1MDAzZWlfbW91bnQ7XG4mIzQzO1x0c3RydWN0IHhmc190cmFuc1x0KnRwO1xuJiM0MztcdHhmc19maWxlb2ZmX3RcdFx0b2Zmc2V0X2ZzYiA9IFhGU19CX1RPX0ZTQihtcCwgc3RhcnQpO1xuJiM0MztcdHhmc19maWxlb2ZmX3RcdFx0ZW5kX2ZzYiA9IFhGU19CX1RPX0ZTQihtcCwgZW5kKTtcbiYjNDM7XHRzdHJ1Y3QgeGZzX2JtYnRfaXJlY1x0aW1hcDtcbiYjNDM7XHRpbnRcdFx0XHRuaW1hcHM7XG4mIzQzO1x0aW50XHRcdFx0ZXJyb3IgPSAwO1xuJiM0MztcdGludFx0XHRcdGRvbmU7XG4mIzQzO1xuJiM0MztcbiYjNDM7XHR3aGlsZSAob2Zmc2V0X2ZzYiBcdTAwM2MgZW5kX2ZzYikge1xuJiM0MztcdFx0bmltYXBzID0gMTtcbiYjNDM7XG4mIzQzO1x0XHRlcnJvciA9IHhmc190cmFuc19hbGxvYyhtcCwgXHUwMDI2TV9SRVMobXApLVx1MDAzZXRyX3dyaXRlLCAwLCAwLFxuJiM0MztcdFx0XHRcdDAsIFx1MDAyNnRwKTtcbiYjNDM7XHRcdGlmIChlcnJvcilcbiYjNDM7XHRcdFx0cmV0dXJuIGVycm9yO1xuJiM0MztcbiYjNDM7XHRcdHhmc19pbG9jayhpcCwgWEZTX0lMT0NLX0VYQ0wpO1xuJiM0MztcdFx0ZXJyb3IgPSB4ZnNfYm1hcGlfcmVhZChpcCwgb2Zmc2V0X2ZzYiwgZW5kX2ZzYiAtIG9mZnNldF9mc2IsXG4mIzQzO1x0XHRcdFx0XHUwMDI2aW1hcCwgXHUwMDI2bmltYXBzLCAwKTtcbiYjNDM7XHRcdGlmIChlcnJvcilcbiYjNDM7XHRcdFx0Z290byBvdXRfY2FuY2VsO1xuJiM0MztcbiYjNDM7XHRcdGlmIChuaW1hcHMgPT0gMClcbiYjNDM7XHRcdFx0Z290byBvdXRfY2FuY2VsO1xuJiM0MztcbiYjNDM7XHRcdGlmIChpbWFwLmJyX3N0YXRlID09IFhGU19FWFRfVU5XUklUVEVOKSB7XG4mIzQzO1x0XHRcdHhmc190cmFuc19pam9pbih0cCwgaXAsIFhGU19JTE9DS19FWENMKTtcbiYjNDM7XG4mIzQzO1x0XHRcdGVycm9yID0geGZzX2J1bm1hcGkodHAsIGlwLCBpbWFwLmJyX3N0YXJ0b2ZmLFxuJiM0MztcdFx0XHRcdFx0aW1hcC5icl9ibG9ja2NvdW50LCAwLCAxLCBcdTAwMjZkb25lKTtcbiYjNDM7XHRcdFx0aWYgKGVycm9yKVxuJiM0MztcdFx0XHRcdGdvdG8gb3V0X2NhbmNlbDtcbiYjNDM7XG4mIzQzO1x0XHRcdGVycm9yID0geGZzX3RyYW5zX2NvbW1pdCh0cCk7XG4mIzQzO1x0XHRcdGlmIChlcnJvcilcbiYjNDM7XHRcdFx0XHRyZXR1cm4gZXJyb3I7XG4mIzQzO1x0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHR4ZnNfdHJhbnNfY2FuY2VsKHRwKTtcbiYjNDM7XHRcdFx0eGZzX2l1bmxvY2soaXAsIFhGU19JTE9DS19FWENMKTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRvZmZzZXRfZnNiID0gaW1hcC5icl9zdGFydG9mZiAmIzQzOyBpbWFwLmJyX2Jsb2NrY291bnQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gZXJyb3I7XG4mIzQzO291dF9jYW5jZWw6XG4mIzQzO1x0eGZzX3RyYW5zX2NhbmNlbCh0cCk7XG4mIzQzO1x0eGZzX2l1bmxvY2soaXAsIFhGU19JTE9DS19FWENMKTtcbiYjNDM7XHRyZXR1cm4gZXJyb3I7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBQcmVwYXJlIHRvIGVuYWJsZSBmc3Zlcml0eSBieSBjbGVhcmluZyBvbGQgbWV0YWRhdGEuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50XG4mIzQzO3hmc19mc3Zlcml0eV9iZWdpbl9lbmFibGUoXG4mIzQzO1x0c3RydWN0IGZpbGVcdFx0KmZpbHApXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaW5vZGVcdFx0Kmlub2RlID0gZmlsZV9pbm9kZShmaWxwKTtcbiYjNDM7XHRzdHJ1Y3QgeGZzX2lub2RlXHQqaXAgPSBYRlNfSShpbm9kZSk7XG4mIzQzO1x0aW50XHRcdFx0ZXJyb3I7XG4mIzQzO1xuJiM0MztcdHhmc19hc3NlcnRfaWxvY2tlZChpcCwgWEZTX0lPTE9DS19FWENMKTtcbiYjNDM7XG4mIzQzO1x0aWYgKElTX0RBWChpbm9kZSkgfHwgaXAtXHUwMDNlaV9kaWZsYWdzMiBcdTAwMjYgWEZTX0RJRkxBRzJfREFYKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdGlmIChpbm9kZS1cdTAwM2VpX3NpemUgXHUwMDNlIFhGU19GU1ZFUklUWV9MQVJHRVNUX0ZJTEUpXG4mIzQzO1x0XHRyZXR1cm4gLUVGQklHO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEZsdXNoIHBhZ2VjYWNoZSBiZWZvcmUgYnVpbGRpbmcgTWVya2xlIHRyZWUuIElub2RlIGlzIGxvY2tlZCBhbmQgbm9cbiYjNDM7XHQgKiBmdXJ0aGVyIHdyaXRlcyB3aWxsIGhhcHBlbiB0byB0aGUgZmlsZSBleGNlcHQgZnN2ZXJpdHkgbWV0YWRhdGFcbiYjNDM7XHQgKi9cbiYjNDM7XHRlcnJvciA9IGZpbGVtYXBfd3JpdGVfYW5kX3dhaXQoaW5vZGUtXHUwMDNlaV9tYXBwaW5nKTtcbiYjNDM7XHRpZiAoZXJyb3IpXG4mIzQzO1x0XHRyZXR1cm4gZXJyb3I7XG4mIzQzO1xuJiM0MztcdGlmICh4ZnNfaWZsYWdzX3Rlc3RfYW5kX3NldChpcCwgWEZTX1ZFUklUWV9DT05TVFJVQ1RJT04pKVxuJiM0MztcdFx0cmV0dXJuIC1FQlVTWTtcbiYjNDM7XG4mIzQzO1x0ZXJyb3IgPSB4ZnNfcW1fZHFhdHRhY2goaXApO1xuJiM0MztcdGlmIChlcnJvcilcbiYjNDM7XHRcdGdvdG8gb3V0X2NsZWFyO1xuJiM0MztcbiYjNDM7XHRlcnJvciA9IHhmc19mc3Zlcml0eV9kZWxldGVfbWV0YWRhdGEoaXApO1xuJiM0MztcdGlmIChlcnJvcilcbiYjNDM7XHRcdGdvdG8gb3V0X2NsZWFyO1xuJiM0MztcdHJldHVybiBlcnJvcjtcbiYjNDM7b3V0X2NsZWFyOlxuJiM0MztcdHhmc19pZmxhZ3NfY2xlYXIoaXAsIFhGU19WRVJJVFlfQ09OU1RSVUNUSU9OKTtcbiYjNDM7XHRyZXR1cm4gZXJyb3I7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIENvbXBsZXRlIChvciBmYWlsKSB0aGUgcHJvY2VzcyBvZiBlbmFibGluZyBmc3Zlcml0eS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnRcbiYjNDM7eGZzX2ZzdmVyaXR5X2VuZF9lbmFibGUoXG4mIzQzO1x0c3RydWN0IGZpbGVcdFx0KmZpbGUsXG4mIzQzO1x0Y29uc3Qgdm9pZFx0XHQqZGVzYyxcbiYjNDM7XHRzaXplX3RcdFx0XHRkZXNjX3NpemUsXG4mIzQzO1x0dTY0XHRcdFx0bWVya2xlX3RyZWVfc2l6ZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBpbm9kZVx0XHQqaW5vZGUgPSBmaWxlX2lub2RlKGZpbGUpO1xuJiM0MztcdHN0cnVjdCB4ZnNfaW5vZGVcdCppcCA9IFhGU19JKGlub2RlKTtcbiYjNDM7XHRzdHJ1Y3QgeGZzX21vdW50XHQqbXAgPSBpcC1cdTAwM2VpX21vdW50O1xuJiM0MztcdHN0cnVjdCB4ZnNfdHJhbnNcdCp0cDtcbiYjNDM7XHRpbnRcdFx0XHRlcnJvciA9IDA7XG4mIzQzO1x0bG9mZl90XHRcdFx0cmFuZ2Vfc3RhcnQgPSB4ZnNfZnN2ZXJpdHlfbWV0YWRhdGFfb2Zmc2V0KGlwKTtcbiYjNDM7XG4mIzQzO1x0eGZzX2Fzc2VydF9pbG9ja2VkKGlwLCBYRlNfSU9MT0NLX0VYQ0wpO1xuJiM0MztcbiYjNDM7XHQvKiBmcy12ZXJpdHkgZmFpbGVkLCBqdXN0IGNsZWFudXAgKi9cbiYjNDM7XHRpZiAoZGVzYyA9PSBOVUxMKSB7XG4mIzQzO1x0XHRlcnJvciA9IHhmc19mc3Zlcml0eV9kZWxldGVfbWV0YWRhdGEoaXApO1xuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRlcnJvciA9IHhmc19mc3Zlcml0eV93cml0ZV9kZXNjcmlwdG9yKGZpbGUsIGRlc2MsIGRlc2Nfc2l6ZSxcbiYjNDM7XHRcdFx0bWVya2xlX3RyZWVfc2l6ZSk7XG4mIzQzO1x0aWYgKGVycm9yKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogV2FpdCBmb3IgTWVya2xlIHRyZWUgZ2V0IHdyaXR0ZW4gdG8gZGlzayBiZWZvcmUgc2V0dGluZyBvbi1kaXNrIGlub2RlXG4mIzQzO1x0ICogZmxhZyBhbmQgY2xlYXJpbmcgWEZTX1ZFUklUWV9DT05TVFJVQ1RJT05cbiYjNDM7XHQgKi9cbiYjNDM7XHRlcnJvciA9IGZpbGVtYXBfd3JpdGVfYW5kX3dhaXRfcmFuZ2UoaW5vZGUtXHUwMDNlaV9tYXBwaW5nLCByYW5nZV9zdGFydCxcbiYjNDM7XHRcdFx0TExPTkdfTUFYKTtcbiYjNDM7XHRpZiAoZXJyb3IpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBSZW1vdmUgdW53cml0dGVuIGV4dGVudHMgbGVmdCBieSBDT1cgcHJlYWxsb2NhdGlvbnMgYW5kIHdyaXRlXG4mIzQzO1x0ICogcHJlYWxsb2NhdGlvbiBpbiB0aGUgbWVya2xlIHRyZWUgaG9sZXMgYW5kIHBhc3QgZGVzY3JpcHRvclxuJiM0MztcdCAqL1xuJiM0MztcdGVycm9yID0geGZzX2ZzdmVyaXR5X2NhbmNlbF91bndyaXR0ZW4oaXAsIHJhbmdlX3N0YXJ0LCBMTE9OR19NQVgpO1xuJiM0MztcdGlmIChlcnJvcilcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFByb2FjdGl2ZWx5IGRyb3AgYW55IGRlbGF5ZWQgYWxsb2NhdGlvbnMgaW4gQ09XIGZvcmssIHRoZSBmc3Zlcml0eVxuJiM0MztcdCAqIGZpbGVzIGFyZSByZWFkLW9ubHlcbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoeGZzX2lzX2Nvd19pbm9kZShpcCkpIHtcbiYjNDM7XHRcdGlmICghaXAtXHUwMDNlaV9jb3dmcClcbiYjNDM7XHRcdFx0eGZzX2lmb3JrX2luaXRfY293KGlwKTtcbiYjNDM7XHRcdHhmc19ibWFwX3B1bmNoX2RlbGFsbG9jX3JhbmdlKGlwLCBYRlNfQ09XX0ZPUkssIDAsIExMT05HX01BWCxcbiYjNDM7XHRcdFx0XHROVUxMKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogU2V0IGZzdmVyaXR5IGlub2RlIGZsYWdcbiYjNDM7XHQgKi9cbiYjNDM7XHRlcnJvciA9IHhmc190cmFuc19hbGxvY19pbm9kZShpcCwgXHUwMDI2TV9SRVMobXApLVx1MDAzZXRyX2ljaGFuZ2UsXG4mIzQzO1x0XHRcdDAsIDAsIGZhbHNlLCBcdTAwMjZ0cCk7XG4mIzQzO1x0aWYgKGVycm9yKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogRW5zdXJlIHRoYXQgd2UmIzM5O3ZlIHBlcnNpc3RlZCB0aGUgdmVyaXR5IGluZm9ybWF0aW9uIGJlZm9yZSB3ZSBlbmFibGVcbiYjNDM7XHQgKiBpdCBvbiB0aGUgaW5vZGUgYW5kIHRlbGwgdGhlIGNhbGxlciB3ZSBoYXZlIHNlYWxlZCB0aGUgaW5vZGUuXG4mIzQzO1x0ICovXG4mIzQzO1x0aXAtXHUwMDNlaV9kaWZsYWdzMiB8PSBYRlNfRElGTEFHMl9WRVJJVFk7XG4mIzQzO1xuJiM0MztcdHhmc190cmFuc19sb2dfaW5vZGUodHAsIGlwLCBYRlNfSUxPR19DT1JFKTtcbiYjNDM7XHR4ZnNfdHJhbnNfc2V0X3N5bmModHApO1xuJiM0MztcbiYjNDM7XHRlcnJvciA9IHhmc190cmFuc19jb21taXQodHApO1xuJiM0MztcdHhmc19pdW5sb2NrKGlwLCBYRlNfSUxPQ0tfRVhDTCk7XG4mIzQzO1xuJiM0MztcdGlmICghZXJyb3IpXG4mIzQzO1x0XHRpbm9kZS1cdTAwM2VpX2ZsYWdzIHw9IFNfVkVSSVRZO1xuJiM0MztcbiYjNDM7b3V0OlxuJiM0MztcdGlmIChlcnJvcikge1xuJiM0MztcdFx0aW50XHRlcnJvcjI7XG4mIzQzO1xuJiM0MztcdFx0ZXJyb3IyID0geGZzX2ZzdmVyaXR5X2RlbGV0ZV9tZXRhZGF0YShpcCk7XG4mIzQzO1x0XHRpZiAoZXJyb3IyKVxuJiM0MztcdFx0XHR4ZnNfYWxlcnQoaXAtXHUwMDNlaV9tb3VudCxcbiYjNDM7XCYjMzQ7aW5vIDB4JWxseCBmYWlsZWQgdG8gY2xlYW4gdXAgbmV3IGZzdmVyaXR5IG1ldGFkYXRhLCBlcnIgJWRcJiMzNDssXG4mIzQzO1x0XHRcdFx0XHRJX0lOTyhpcCksIGVycm9yMik7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHR4ZnNfaWZsYWdzX2NsZWFyKGlwLCBYRlNfVkVSSVRZX0NPTlNUUlVDVElPTik7XG4mIzQzO1x0cmV0dXJuIGVycm9yO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBSZXRyaWV2ZSBhIG1lcmtsZSB0cmVlIGJsb2NrLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHN0cnVjdCBwYWdlICpcbiYjNDM7eGZzX2ZzdmVyaXR5X3JlYWRfbWVya2xlKFxuJiM0MztcdHN0cnVjdCBpbm9kZVx0XHQqaW5vZGUsXG4mIzQzO1x0cGdvZmZfdFx0XHRcdGluZGV4KVxuJiM0Mzt7XG4mIzQzO1x0aW5kZXggJiM0Mzs9IHhmc19mc3Zlcml0eV9tZXRhZGF0YV9vZmZzZXQoWEZTX0koaW5vZGUpKSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGdlbmVyaWNfcmVhZF9tZXJrbGVfdHJlZV9wYWdlKGlub2RlLCBpbmRleCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIFJldHJpZXZlIGEgbWVya2xlIHRyZWUgYmxvY2suXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZFxuJiM0Mzt4ZnNfZnN2ZXJpdHlfcmVhZGFoZWFkX21lcmtsZV90cmVlKFxuJiM0MztcdHN0cnVjdCBpbm9kZVx0XHQqaW5vZGUsXG4mIzQzO1x0cGdvZmZfdFx0XHRcdGluZGV4LFxuJiM0MztcdHVuc2lnbmVkIGxvbmdcdFx0bnJfcGFnZXMpXG4mIzQzO3tcbiYjNDM7XHRpbmRleCAmIzQzOz0geGZzX2ZzdmVyaXR5X21ldGFkYXRhX29mZnNldChYRlNfSShpbm9kZSkpIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuJiM0MztcbiYjNDM7XHRnZW5lcmljX3JlYWRhaGVhZF9tZXJrbGVfdHJlZShpbm9kZSwgaW5kZXgsIG5yX3BhZ2VzKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogV3JpdGUgYSBtZXJrbGUgdHJlZSBibG9jay5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnRcbiYjNDM7eGZzX2ZzdmVyaXR5X3dyaXRlX21lcmtsZShcbiYjNDM7XHRzdHJ1Y3QgZmlsZVx0XHQqZmlsZSxcbiYjNDM7XHRjb25zdCB2b2lkXHRcdCpidWYsXG4mIzQzO1x0dTY0XHRcdFx0cG9zLFxuJiM0MztcdHVuc2lnbmVkIGludFx0XHRzaXplLFxuJiM0MztcdGNvbnN0IHU4XHRcdCp6ZXJvX2RpZ2VzdCxcbiYjNDM7XHR1bnNpZ25lZCBpbnRcdFx0ZGlnZXN0X3NpemUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaW5vZGVcdFx0Kmlub2RlID0gZmlsZV9pbm9kZShmaWxlKTtcbiYjNDM7XHRzdHJ1Y3QgeGZzX2lub2RlXHQqaXAgPSBYRlNfSShpbm9kZSk7XG4mIzQzO1x0bG9mZl90XHRcdFx0cG9zaXRpb24gPSBwb3MgJiM0MztcbiYjNDM7XHRcdHhmc19mc3Zlcml0eV9tZXRhZGF0YV9vZmZzZXQoaXApO1xuJiM0MztcbiYjNDM7XHRpZiAocG9zaXRpb24gJiM0Mzsgc2l6ZSBcdTAwM2UgaW5vZGUtXHUwMDNlaV9zYi1cdTAwM2VzX21heGJ5dGVzKVxuJiM0MztcdFx0cmV0dXJuIC1FRkJJRztcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBJZiB0aGlzIGlzIGEgYmxvY2sgZnVsbCBvZiBoYXNoZXMgb2YgemVyb2VkIGJsb2NrcywgZG9uJiMzOTt0IGJvdGhlclxuJiM0MztcdCAqIHN0b3JpbmcgdGhlIGJsb2NrLiBXZSBjYW4gc3ludGhlc2l6ZSB0aGVtIGxhdGVyLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogSG93ZXZlciwgZG8gdGhpcyBvbmx5IGluIGNhc2UgTWVya2xlIHRyZWUgYmxvY2sgPT0gZnMgYmxvY2sgc2l6ZS5cbiYjNDM7XHQgKiBJb21hcCBzeW50aGVzaXplcyB0aGVzZSBibG9ja3MgYmFzZWQgb24gaG9sZXMgaW4gdGhlIG1lcmtsZSB0cmVlLiBXZVxuJiM0MztcdCAqIHdvbiYjMzk7dCBiZSBhYmxlIHRvIHRlbGwgaWYgc29tZXRoaW5nIG5lZWQgdG8gYmUgc3ludGhlc2l6ZXMgZm9yIHRoZVxuJiM0MztcdCAqIHJhbmdlIGluIHRoZSBmcyBibG9jay4gRm9yIGV4YW1wbGUsIGZvciA0ayBmaWxlc3lzdGVtIGJsb2NrXG4mIzQzO1x0ICpcbiYjNDM7XHQgKlx0WyAxayB8IHplcm8gaGFzaGVzIHwgemVybyBoYXNoZXMgfCAxayBdXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBJb21hcCB3b24mIzM5O3Qga25vdyBhYm91dCB0aGVzZSBlbXB0eSBibG9ja3MuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHNpemUgPT0gaXAtXHUwMDNlaV9tb3VudC1cdTAwM2VtX3NiLnNiX2Jsb2Nrc2l6ZSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0LypcbiYjNDM7XHRcdFx0ICogRmlyc3QgZGlnZXN0IGlzIHplcm9fZGlnZXN0XG4mIzQzO1x0XHRcdCAqL1xuJiM0MztcdFx0XHRtZW1jbXAoYnVmLCB6ZXJvX2RpZ2VzdCwgZGlnZXN0X3NpemUpID09IDAgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRcdC8qXG4mIzQzO1x0XHRcdCAqIEV2ZXJ5IGRpZ2VzdCBpcyBzYW1lIGFzIHByZXZpb3VzLCB0aHVzIGFsbCBhcmVcbiYjNDM7XHRcdFx0ICogemVyb19kaWdlc3RcbiYjNDM7XHRcdFx0ICovXG4mIzQzO1x0XHRcdG1lbWNtcChidWYgJiM0MzsgZGlnZXN0X3NpemUsIGJ1Ziwgc2l6ZSAtIGRpZ2VzdF9zaXplKSA9PSAwKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdHJldHVybiBpb21hcF9mc3Zlcml0eV93cml0ZShmaWxlLCBwb3NpdGlvbiwgc2l6ZSwgYnVmLFxuJiM0MztcdFx0XHRcdTAwMjZ4ZnNfYnVmZmVyZWRfd3JpdGVfaW9tYXBfb3BzLFxuJiM0MztcdFx0XHRcdTAwMjZ4ZnNfaW9tYXBfd3JpdGVfb3BzKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7Y29uc3Qgc3RydWN0IGZzdmVyaXR5X29wZXJhdGlvbnMgeGZzX2ZzdmVyaXR5X29wcyA9IHtcbiYjNDM7XHQuYmVnaW5fZW5hYmxlX3Zlcml0eVx0XHQ9IHhmc19mc3Zlcml0eV9iZWdpbl9lbmFibGUsXG4mIzQzO1x0LmVuZF9lbmFibGVfdmVyaXR5XHRcdD0geGZzX2ZzdmVyaXR5X2VuZF9lbmFibGUsXG4mIzQzO1x0LmdldF92ZXJpdHlfZGVzY3JpcHRvclx0XHQ9IHhmc19mc3Zlcml0eV9nZXRfZGVzY3JpcHRvcixcbiYjNDM7XHQucmVhZF9tZXJrbGVfdHJlZV9wYWdlXHRcdD0geGZzX2ZzdmVyaXR5X3JlYWRfbWVya2xlLFxuJiM0MztcdC5yZWFkYWhlYWRfbWVya2xlX3RyZWVcdFx0PSB4ZnNfZnN2ZXJpdHlfcmVhZGFoZWFkX21lcmtsZV90cmVlLFxuJiM0MztcdC53cml0ZV9tZXJrbGVfdHJlZV9ibG9ja1x0PSB4ZnNfZnN2ZXJpdHlfd3JpdGVfbWVya2xlLFxuJiM0Mzt9O1xuZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfZnN2ZXJpdHkuaCBiL2ZzL3hmcy94ZnNfZnN2ZXJpdHkuaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi42YTk4MWUyMGE3NWJiOFxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvZnMveGZzL3hmc19mc3Zlcml0eS5oXG5AQCAtMCwwICYjNDM7MSwyOCBAQFxuJiM0MzsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xuJiM0MzsvKlxuJiM0MzsgKiBDb3B5cmlnaHQgKEMpIDIwMjYgUmVkIEhhdCwgSW5jLlxuJiM0MzsgKi9cbiYjNDM7I2lmbmRlZiBfX1hGU19GU1ZFUklUWV9IX19cbiYjNDM7I2RlZmluZSBfX1hGU19GU1ZFUklUWV9IX19cbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3hmc19wbGF0Zm9ybS5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZzdmVyaXR5LmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNpZmRlZiBDT05GSUdfRlNfVkVSSVRZXG4mIzQzO2V4dGVybiBjb25zdCBzdHJ1Y3QgZnN2ZXJpdHlfb3BlcmF0aW9ucyB4ZnNfZnN2ZXJpdHlfb3BzO1xuJiM0Mztsb2ZmX3QgeGZzX2ZzdmVyaXR5X21ldGFkYXRhX29mZnNldChjb25zdCBzdHJ1Y3QgeGZzX2lub2RlICppcCk7XG4mIzQzO2Jvb2wgeGZzX2ZzdmVyaXR5X2lzX2ZpbGVfZGF0YShjb25zdCBzdHJ1Y3QgeGZzX2lub2RlICppcCwgbG9mZl90IG9mZnNldCk7XG4mIzQzOyNlbHNlXG4mIzQzO3N0YXRpYyBpbmxpbmUgbG9mZl90IHhmc19mc3Zlcml0eV9tZXRhZGF0YV9vZmZzZXQoY29uc3Qgc3RydWN0IHhmc19pbm9kZSAqaXApXG4mIzQzO3tcbiYjNDM7XHRXQVJOX09OX09OQ0UoMSk7XG4mIzQzO1x0cmV0dXJuIFVMTE9OR19NQVg7XG4mIzQzO31cbiYjNDM7c3RhdGljIGlubGluZSBib29sIHhmc19mc3Zlcml0eV9pc19maWxlX2RhdGEoY29uc3Qgc3RydWN0IHhmc19pbm9kZSAqaXAsXG4mIzQzO1x0XHRcdFx0XHQgICAgbG9mZl90IG9mZnNldClcbiYjNDM7e1xuJiM0MztcdHJldHVybiBmYWxzZTtcbiYjNDM7fVxuJiM0MzsjZW5kaWZcdC8qIENPTkZJR19GU19WRVJJVFkgKi9cbiYjNDM7XG4mIzQzOyNlbmRpZlx0LyogX19YRlNfRlNWRVJJVFlfSF9fICovXG5kaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19oZWFsdGguYyBiL2ZzL3hmcy94ZnNfaGVhbHRoLmNcbmluZGV4IDIzOWI4NDNlODNkNDJhLi5iZTY2NzYwZmIxMjBmNyAxMDA2NDRcbi0tLSBhL2ZzL3hmcy94ZnNfaGVhbHRoLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3hmcy94ZnNfaGVhbHRoLmNcbkBAIC02MjUsNiAmIzQzOzYyNSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaW9jdGxfc2lja19tYXAgaW5vX21hcFtdID0ge1xuIFx0eyBYRlNfU0lDS19JTk9fRElSX1pBUFBFRCxcdFhGU19CU19TSUNLX0RJUiB9LFxuIFx0eyBYRlNfU0lDS19JTk9fU1lNTElOS19aQVBQRUQsXHRYRlNfQlNfU0lDS19TWU1MSU5LIH0sXG4gXHR7IFhGU19TSUNLX0lOT19ESVJUUkVFLFx0WEZTX0JTX1NJQ0tfRElSVFJFRSB9LFxuJiM0MztcdHsgWEZTX1NJQ0tfSU5PX0ZTVkVSSVRZLFx0WEZTX0JTX1NJQ0tfRlNWRVJJVFkgfSxcbiB9O1xuIFxuIC8qIEZpbGwgb3V0IGJ1bGtzdGF0IGhlYWx0aCBpbmZvLiAqL1xuZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfaW5vZGUuaCBiL2ZzL3hmcy94ZnNfaW5vZGUuaFxuaW5kZXggMzRjMTAzOGViZmNkZTEuLjE3Y2UwODM1OTFmNDA4IDEwMDY0NFxuLS0tIGEvZnMveGZzL3hmc19pbm9kZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy94ZnMveGZzX2lub2RlLmhcbkBAIC00MTksNiAmIzQzOzQxOSwxMiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgeGZzX2lub2RlX2Nhbl9zd19hdG9taWNfd3JpdGUoY29uc3Qgc3RydWN0IHhmc19pbm9kZSAqaXApXG4gICovXG4gI2RlZmluZSBYRlNfSVJFTUFQUElOR1x0XHQoMVUgXHUwMDNjXHUwMDNjIDE1KVxuIFxuJiM0MzsvKlxuJiM0MzsgKiBmcy12ZXJpdHkmIzM5O3MgTWVya2xlIHRyZWUgaXMgdW5kZXIgY29uc3RydWN0aW9uLiBUaGUgZmlsZSBpcyByZWFkLW9ubHksIHRoZVxuJiM0MzsgKiBvbmx5IHdyaXRlcyBoYXBwZW5pbmcgYXJlIGZvciB0aGUgZnN2ZXJpdHkgbWV0YWRhdGEuXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIFhGU19WRVJJVFlfQ09OU1RSVUNUSU9OXHQoMVUgXHUwMDNjXHUwMDNjIDE2KVxuJiM0MztcbiAvKiBBbGwgaW5vZGUgc3RhdGUgZmxhZ3MgcmVsYXRlZCB0byBpbm9kZSByZWNsYWltLiAqL1xuICNkZWZpbmUgWEZTX0FMTF9JUkVDTEFJTV9GTEFHU1x0KFhGU19JUkVDTEFJTUFCTEUgfCBcXFxuIFx0XHRcdFx0IFhGU19JUkVDTEFJTSB8IFxcXG5kaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19pb2N0bC5jIGIvZnMveGZzL3hmc19pb2N0bC5jXG5pbmRleCAxYjUzNzAxYmViZWExYS4uZmM3ODYwYThiNWFiYjEgMTAwNjQ0XG4tLS0gYS9mcy94ZnMveGZzX2lvY3RsLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3hmcy94ZnNfaW9jdGwuY1xuQEAgLTQ5LDYgJiM0Mzs0OSw3IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbW91bnQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZpbGVhdHRyLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvZnN2ZXJpdHkuaFx1MDAzZVxuIFxuIC8qIFJldHVybiAwIG9uIHN1Y2Nlc3Mgb3IgcG9zaXRpdmUgZXJyb3IgKi9cbiBpbnRcbkBAIC0xNDY2LDYgJiM0MzsxNDY3LDE5IEBAIHhmc19maWxlX2lvY3RsKFxuIFx0Y2FzZSBYRlNfSU9DX1ZFUklGWV9NRURJQTpcbiBcdFx0cmV0dXJuIHhmc19pb2NfdmVyaWZ5X21lZGlhKGZpbHAsIGFyZyk7XG4gXG4mIzQzO1x0Y2FzZSBGU19JT0NfRU5BQkxFX1ZFUklUWTpcbiYjNDM7XHRcdGlmICgheGZzX2hhc192ZXJpdHkobXApKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1x0XHRyZXR1cm4gZnN2ZXJpdHlfaW9jdGxfZW5hYmxlKGZpbHAsIGFyZyk7XG4mIzQzO1x0Y2FzZSBGU19JT0NfTUVBU1VSRV9WRVJJVFk6XG4mIzQzO1x0XHRpZiAoIXhmc19oYXNfdmVyaXR5KG1wKSlcbiYjNDM7XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcdFx0cmV0dXJuIGZzdmVyaXR5X2lvY3RsX21lYXN1cmUoZmlscCwgYXJnKTtcbiYjNDM7XHRjYXNlIEZTX0lPQ19SRUFEX1ZFUklUWV9NRVRBREFUQTpcbiYjNDM7XHRcdGlmICgheGZzX2hhc192ZXJpdHkobXApKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1x0XHRyZXR1cm4gZnN2ZXJpdHlfaW9jdGxfcmVhZF9tZXRhZGF0YShmaWxwLCBhcmcpO1xuJiM0MztcbiBcdGRlZmF1bHQ6XG4gXHRcdHJldHVybiAtRU5PVFRZO1xuIFx0fVxuZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfaW9tYXAuYyBiL2ZzL3hmcy94ZnNfaW9tYXAuY1xuaW5kZXggMjI1YzNkZTg4ZDAzYjEuLmZiYTUxOTAyNDE2YjAyIDEwMDY0NFxuLS0tIGEvZnMveGZzL3hmc19pb21hcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy94ZnMveGZzX2lvbWFwLmNcbkBAIC0zMiw2ICYjNDM7MzIsOCBAQFxuICNpbmNsdWRlIFwmIzM0O3hmc19ydGJpdG1hcC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7eGZzX2ljYWNoZS5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7eGZzX3pvbmVfYWxsb2MuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDt4ZnNfZnN2ZXJpdHkuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9mc3Zlcml0eS5oXHUwMDNlXG4gXG4gI2RlZmluZSBYRlNfQUxMT0NfQUxJR04obXAsIG9mZikgXFxcbiBcdCgoKG9mZikgXHUwMDNlXHUwMDNlIG1wLVx1MDAzZW1fYWxsb2NzaXplX2xvZykgXHUwMDNjXHUwMDNjIG1wLVx1MDAzZW1fYWxsb2NzaXplX2xvZylcbkBAIC0xNTg5LDcgJiM0MzsxNTkxLDggQEAgeGZzX3pvbmVkX2J1ZmZlcmVkX3dyaXRlX2lvbWFwX2JlZ2luKFxuIFx0bG9mZl90XHRcdFx0Y291bnQsXG4gXHR1bnNpZ25lZFx0XHRmbGFncyxcbiBcdHN0cnVjdCBpb21hcFx0XHQqaW9tYXAsXG4tXHRzdHJ1Y3QgaW9tYXBcdFx0KnNyY21hcClcbiYjNDM7XHRzdHJ1Y3QgaW9tYXBcdFx0KnNyY21hcCxcbiYjNDM7XHR1MTZcdFx0XHRpb21hcF9mbGFncylcbiB7XG4gXHRzdHJ1Y3QgaW9tYXBfaXRlclx0Kml0ZXIgPVxuIFx0XHRjb250YWluZXJfb2YoaW9tYXAsIHN0cnVjdCBpb21hcF9pdGVyLCBpb21hcCk7XG5AQCAtMTU5OSw3ICYjNDM7MTYwMiw2IEBAIHhmc196b25lZF9idWZmZXJlZF93cml0ZV9pb21hcF9iZWdpbihcbiBcdHN0cnVjdCB4ZnNfbW91bnRcdCptcCA9IGlwLVx1MDAzZWlfbW91bnQ7XG4gXHR4ZnNfZmlsZW9mZl90XHRcdG9mZnNldF9mc2IgPSBYRlNfQl9UT19GU0JUKG1wLCBvZmZzZXQpO1xuIFx0eGZzX2ZpbGVvZmZfdFx0XHRlbmRfZnNiID0geGZzX2lvbWFwX2VuZF9mc2IobXAsIG9mZnNldCwgY291bnQpO1xuLVx0dTE2XHRcdFx0aW9tYXBfZmxhZ3MgPSBJT01BUF9GX1NIQVJFRDtcbiBcdHVuc2lnbmVkIGludFx0XHRsb2NrbW9kZSA9IFhGU19JTE9DS19FWENMO1xuIFx0eGZzX2ZpbGJsa3NfdFx0XHRjb3VudF9mc2I7XG4gXHR4ZnNfZXh0bGVuX3RcdFx0aW5kbGVuO1xuQEAgLTE2MDcsNiAmIzQzOzE2MDksOCBAQCB4ZnNfem9uZWRfYnVmZmVyZWRfd3JpdGVfaW9tYXBfYmVnaW4oXG4gXHRzdHJ1Y3QgeGZzX2lleHRfY3Vyc29yXHRpY3VyO1xuIFx0aW50XHRcdFx0ZXJyb3IgPSAwO1xuIFxuJiM0MztcdGlvbWFwX2ZsYWdzID0gaW9tYXBfZmxhZ3MgfCBJT01BUF9GX1NIQVJFRDtcbiYjNDM7XG4gXHRBU1NFUlQoIXhmc19nZXRfZXh0c3pfaGludChpcCkpO1xuIFx0QVNTRVJUKCEoZmxhZ3MgXHUwMDI2IElPTUFQX1VOU0hBUkUpKTtcbiBcdEFTU0VSVChhYyk7XG5AQCAtMTgwMyw5ICYjNDM7MTgwNywxMiBAQCB4ZnNfYnVmZmVyZWRfd3JpdGVfaW9tYXBfYmVnaW4oXG4gXHRpZiAoeGZzX2lzX3NodXRkb3duKG1wKSlcbiBcdFx0cmV0dXJuIC1FSU87XG4gXG4mIzQzO1x0aWYgKHhmc19pZmxhZ3NfdGVzdChpcCwgWEZTX1ZFUklUWV9DT05TVFJVQ1RJT04pKVxuJiM0MztcdFx0aW9tYXBfZmxhZ3MgfD0gSU9NQVBfRl9GU1ZFUklUWTtcbiYjNDM7XG4gXHRpZiAoeGZzX2lzX3pvbmVkX2lub2RlKGlwKSlcbiBcdFx0cmV0dXJuIHhmc196b25lZF9idWZmZXJlZF93cml0ZV9pb21hcF9iZWdpbihpbm9kZSwgb2Zmc2V0LFxuLVx0XHRcdFx0Y291bnQsIGZsYWdzLCBpb21hcCwgc3JjbWFwKTtcbiYjNDM7XHRcdFx0XHRjb3VudCwgZmxhZ3MsIGlvbWFwLCBzcmNtYXAsIGlvbWFwX2ZsYWdzKTtcbiBcbiBcdC8qIHdlIGNhbiYjMzk7dCB1c2UgZGVsYXllZCBhbGxvY2F0aW9ucyB3aGVuIHVzaW5nIGV4dGVudCBzaXplIGhpbnRzICovXG4gXHRpZiAoeGZzX2dldF9leHRzel9oaW50KGlwKSlcbkBAIC0yMTkxLDEyICYjNDM7MjE5OCwxNyBAQCB4ZnNfcmVhZF9pb21hcF9iZWdpbihcbiBcdGJvb2xcdFx0XHRzaGFyZWQgPSBmYWxzZTtcbiBcdHVuc2lnbmVkIGludFx0XHRsb2NrbW9kZSA9IFhGU19JTE9DS19TSEFSRUQ7XG4gXHR1NjRcdFx0XHRzZXE7XG4mIzQzO1x0dW5zaWduZWQgaW50XHRcdGlvbWFwX2ZsYWdzID0gMDtcbiBcbiBcdEFTU0VSVCghKGZsYWdzIFx1MDAyNiAoSU9NQVBfV1JJVEUgfCBJT01BUF9aRVJPKSkpO1xuIFxuIFx0aWYgKHhmc19pc19zaHV0ZG93bihtcCkpXG4gXHRcdHJldHVybiAtRUlPO1xuIFxuJiM0MztcdGlmIChmc3Zlcml0eV9hY3RpdmUoaW5vZGUpIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAob2Zmc2V0IFx1MDAzZT0geGZzX2ZzdmVyaXR5X21ldGFkYXRhX29mZnNldChpcCkpKVxuJiM0MztcdFx0aW9tYXBfZmxhZ3MgfD0gSU9NQVBfRl9GU1ZFUklUWTtcbiYjNDM7XG4gXHRlcnJvciA9IHhmc19pbG9ja19mb3JfaW9tYXAoaXAsIGZsYWdzLCBcdTAwMjZsb2NrbW9kZSk7XG4gXHRpZiAoZXJyb3IpXG4gXHRcdHJldHVybiBlcnJvcjtcbkBAIC0yMjEwLDggJiM0MzsyMjIyLDkgQEAgeGZzX3JlYWRfaW9tYXBfYmVnaW4oXG4gXHRpZiAoZXJyb3IpXG4gXHRcdHJldHVybiBlcnJvcjtcbiBcdHRyYWNlX3hmc19pb21hcF9mb3VuZChpcCwgb2Zmc2V0LCBsZW5ndGgsIFhGU19EQVRBX0ZPUkssIFx1MDAyNmltYXApO1xuLVx0cmV0dXJuIHhmc19ibWJ0X3RvX2lvbWFwKGlwLCBpb21hcCwgXHUwMDI2aW1hcCwgZmxhZ3MsXG4tXHRcdFx0XHQgc2hhcmVkID8gSU9NQVBfRl9TSEFSRUQgOiAwLCBzZXEpO1xuJiM0MztcdGlvbWFwX2ZsYWdzIHw9IHNoYXJlZCA/IElPTUFQX0ZfU0hBUkVEIDogMDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHhmc19ibWJ0X3RvX2lvbWFwKGlwLCBpb21hcCwgXHUwMDI2aW1hcCwgZmxhZ3MsIGlvbWFwX2ZsYWdzLCBzZXEpO1xuIH1cbiBcbiBjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzIHhmc19yZWFkX2lvbWFwX29wcyA9IHtcbmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2lvcHMuYyBiL2ZzL3hmcy94ZnNfaW9wcy5jXG5pbmRleCA2MzM5ZjQ5NTZlY2IzOS4uNzA2MzdjZGNjMjk5NzIgMTAwNjQ0XG4tLS0gYS9mcy94ZnMveGZzX2lvcHMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMveGZzL3hmc19pb3BzLmNcbkBAIC0zNSw2ICYjNDM7MzUsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NlY3VyaXR5LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pdmVyc2lvbi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZmllbWFwLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvZnN2ZXJpdHkuaFx1MDAzZVxuIFxuIC8qXG4gICogRGlyZWN0b3JpZXMgaGF2ZSBkaWZmZXJlbnQgbG9jayBvcmRlciB3LnIudC4gbW1hcF9sb2NrIGNvbXBhcmVkIHRvIHJlZ3VsYXJcbkBAIC01ODAsNiAmIzQzOzU4MSwxMCBAQCB4ZnNfcmVwb3J0X2Rpb2FsaWduKFxuIFx0c3RydWN0IGJsb2NrX2RldmljZVx0KmJkZXYgPSB0YXJnZXQtXHUwMDNlYnRfYmRldjtcbiBcbiBcdHN0YXQtXHUwMDNlcmVzdWx0X21hc2sgfD0gU1RBVFhfRElPQUxJR04gfCBTVEFUWF9ESU9fUkVBRF9BTElHTjtcbiYjNDM7XG4mIzQzO1x0aWYgKGZzdmVyaXR5X2FjdGl2ZShWRlNfSShpcCkpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiBcdHN0YXQtXHUwMDNlZGlvX21lbV9hbGlnbiA9IGJkZXZfZG1hX2FsaWdubWVudChiZGV2KSAmIzQzOyAxO1xuIFxuIFx0LypcbkBAIC0xMzcwLDYgJiM0MzsxMzc1LDggQEAgeGZzX2lub2RlX3Nob3VsZF9lbmFibGVfZGF4KFxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXHRpZiAoIXhmc19pbm9kZV9zdXBwb3J0c19kYXgoaXApKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0aWYgKGlwLVx1MDAzZWlfZGlmbGFnczIgXHUwMDI2IFhGU19ESUZMQUcyX1ZFUklUWSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiBcdGlmICh4ZnNfaGFzX2RheF9hbHdheXMoaXAtXHUwMDNlaV9tb3VudCkpXG4gXHRcdHJldHVybiB0cnVlO1xuIFx0aWYgKGlwLVx1MDAzZWlfZGlmbGFnczIgXHUwMDI2IFhGU19ESUZMQUcyX0RBWClcbkBAIC0xMzk4LDEyICYjNDM7MTQwNSwxNSBAQCB4ZnNfZGlmbGFnc190b19pZmxhZ3MoXG4gXHRcdGZsYWdzIHw9IFNfTk9BVElNRTtcbiBcdGlmIChpbml0IFx1MDAyNlx1MDAyNiB4ZnNfaW5vZGVfc2hvdWxkX2VuYWJsZV9kYXgoaXApKVxuIFx0XHRmbGFncyB8PSBTX0RBWDtcbiYjNDM7XHRpZiAoeGZsYWdzIFx1MDAyNiBGU19YRkxBR19WRVJJVFkpXG4mIzQzO1x0XHRmbGFncyB8PSBTX1ZFUklUWTtcbiBcbiBcdC8qXG4gXHQgKiBTX0RBWCBjYW4gb25seSBiZSBzZXQgZHVyaW5nIGlub2RlIGluaXRpYWxpemF0aW9uIGFuZCBpcyBuZXZlciBzZXQgYnlcbiBcdCAqIHRoZSBWRlMsIHNvIHdlIGNhbm5vdCBtYXNrIG9mZiBTX0RBWCBpbiBpX2ZsYWdzLlxuIFx0ICovXG4tXHRpbm9kZS1cdTAwM2VpX2ZsYWdzIFx1MDAyNj0gfihTX0lNTVVUQUJMRSB8IFNfQVBQRU5EIHwgU19TWU5DIHwgU19OT0FUSU1FKTtcbiYjNDM7XHRpbm9kZS1cdTAwM2VpX2ZsYWdzIFx1MDAyNj1cbiYjNDM7XHRcdH4oU19JTU1VVEFCTEUgfCBTX0FQUEVORCB8IFNfU1lOQyB8IFNfTk9BVElNRSB8IFNfVkVSSVRZKTtcbiBcdGlub2RlLVx1MDAzZWlfZmxhZ3MgfD0gZmxhZ3M7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfbWVzc2FnZS5jIGIvZnMveGZzL3hmc19tZXNzYWdlLmNcbmluZGV4IDAyNDNlNTA5YTQ2ODkxLi40NGIxM2Q0NjA0OWM2MiAxMDA2NDRcbi0tLSBhL2ZzL3hmcy94ZnNfbWVzc2FnZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy94ZnMveGZzX21lc3NhZ2UuY1xuQEAgLTE0OSw2ICYjNDM7MTQ5LDEwIEBAIHhmc193YXJuX2V4cGVyaW1lbnRhbChcbiBcdFx0XHQub3BzdGF0ZVx0PSBYRlNfT1BTVEFURV9XQVJORURfTEFSUCxcbiBcdFx0XHQubmFtZVx0XHQ9IFwmIzM0O2xvZ2dlZCBleHRlbmRlZCBhdHRyaWJ1dGVzXCYjMzQ7LFxuIFx0XHR9LFxuJiM0MztcdFx0W1hGU19FWFBFUklNRU5UQUxfRlNWRVJJVFldID0ge1xuJiM0MztcdFx0XHQub3BzdGF0ZVx0PSBYRlNfT1BTVEFURV9XQVJORURfRlNWRVJJVFksXG4mIzQzO1x0XHRcdC5uYW1lXHRcdD0gXCYjMzQ7ZnN2ZXJpdHlcJiMzNDssXG4mIzQzO1x0XHR9LFxuIFx0fTtcbiBcdEFTU0VSVChmZWF0IFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgZmVhdCBcdTAwM2MgWEZTX0VYUEVSSU1FTlRBTF9NQVgpO1xuIFx0QlVJTERfQlVHX09OKEFSUkFZX1NJWkUoZmVhdHVyZXMpICE9IFhGU19FWFBFUklNRU5UQUxfTUFYKTtcbmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX21lc3NhZ2UuaCBiL2ZzL3hmcy94ZnNfbWVzc2FnZS5oXG5pbmRleCA4MTFiODg1ZjQxYzM1YS4uMzY0ZmNjN2U0MmIwODQgMTAwNjQ0XG4tLS0gYS9mcy94ZnMveGZzX21lc3NhZ2UuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZnMveGZzL3hmc19tZXNzYWdlLmhcbkBAIC05Myw2ICYjNDM7OTMsNyBAQCB2b2lkIHhmc19idWZfYWxlcnRfcmF0ZWxpbWl0ZWQoc3RydWN0IHhmc19idWYgKmJwLCBjb25zdCBjaGFyICpybG1zZyxcbiBlbnVtIHhmc19leHBlcmltZW50YWxfZmVhdCB7XG4gXHRYRlNfRVhQRVJJTUVOVEFMX1NIUklOSyxcbiBcdFhGU19FWFBFUklNRU5UQUxfTEFSUCxcbiYjNDM7XHRYRlNfRVhQRVJJTUVOVEFMX0ZTVkVSSVRZLFxuIFxuIFx0WEZTX0VYUEVSSU1FTlRBTF9NQVgsXG4gfTtcbmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX21vdW50LmggYi9mcy94ZnMveGZzX21vdW50LmhcbmluZGV4IDY2YTAyZDFiOWFkN2ExLi44NzVjOWIwZjhlOTkxZiAxMDA2NDRcbi0tLSBhL2ZzL3hmcy94ZnNfbW91bnQuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZnMveGZzL3hmc19tb3VudC5oXG5AQCAtMzg4LDYgJiM0MzszODgsNyBAQCB0eXBlZGVmIHN0cnVjdCB4ZnNfbW91bnQge1xuICNkZWZpbmUgWEZTX0ZFQVRfRVhDSEFOR0VfUkFOR0VcdCgxVUxMIFx1MDAzY1x1MDAzYyAyNylcdC8qIGV4Y2hhbmdlIHJhbmdlICovXG4gI2RlZmluZSBYRlNfRkVBVF9NRVRBRElSXHQoMVVMTCBcdTAwM2NcdTAwM2MgMjgpXHQvKiBtZXRhZGF0YSBkaXJlY3RvcnkgdHJlZSAqL1xuICNkZWZpbmUgWEZTX0ZFQVRfWk9ORURcdFx0KDFVTEwgXHUwMDNjXHUwMDNjIDI5KVx0Lyogem9uZWQgUlQgZGV2aWNlICovXG4mIzQzOyNkZWZpbmUgWEZTX0ZFQVRfVkVSSVRZXHRcdCgxVUxMIFx1MDAzY1x1MDAzYyAzMClcdC8qIGZzLXZlcml0eSAqL1xuIFxuIC8qIE1vdW50IGZlYXR1cmVzICovXG4gI2RlZmluZSBYRlNfRkVBVF9OT0xJRkVUSU1FXHQoMVVMTCBcdTAwM2NcdTAwM2MgNDcpXHQvKiBkaXNhYmxlIGxpZmV0aW1lIGhpbnRzICovXG5AQCAtNDQ1LDYgJiM0Mzs0NDYsNyBAQCBfX1hGU19IQVNfRkVBVChleGNoYW5nZV9yYW5nZSwgRVhDSEFOR0VfUkFOR0UpXG4gX19YRlNfSEFTX0ZFQVQobWV0YWRpciwgTUVUQURJUilcbiBfX1hGU19IQVNfRkVBVCh6b25lZCwgWk9ORUQpXG4gX19YRlNfSEFTX0ZFQVQobm9saWZldGltZSwgTk9MSUZFVElNRSlcbiYjNDM7X19YRlNfSEFTX0ZFQVQodmVyaXR5LCBWRVJJVFkpXG4gXG4gc3RhdGljIGlubGluZSBib29sIHhmc19oYXNfcnRncm91cHMoY29uc3Qgc3RydWN0IHhmc19tb3VudCAqbXApXG4ge1xuQEAgLTU4Miw2ICYjNDM7NTg0LDggQEAgX19YRlNfSEFTX0ZFQVQobm91dWlkLCBOT1VVSUQpXG4gI2RlZmluZSBYRlNfT1BTVEFURV9SRVNVTUlOR19RVU9UQU9OXHQxOFxuIC8qIChab25lZCkgR0MgaXMgaW4gcHJvZ3Jlc3MgKi9cbiAjZGVmaW5lIFhGU19PUFNUQVRFX1pPTkVHQ19SVU5OSU5HXHQyMFxuJiM0MzsvKiBLZXJuZWwgaGFzIGxvZ2dlZCBhIHdhcm5pbmcgYWJvdXQgZnN2ZXJpdHkgc3VwcG9ydCAqL1xuJiM0MzsjZGVmaW5lIFhGU19PUFNUQVRFX1dBUk5FRF9GU1ZFUklUWVx0MjFcbiBcbiAjZGVmaW5lIF9fWEZTX0lTX09QU1RBVEUobmFtZSwgTkFNRSkgXFxcbiBzdGF0aWMgaW5saW5lIGJvb2wgeGZzX2lzXyAjIyBuYW1lIChzdHJ1Y3QgeGZzX21vdW50ICptcCkgXFxcbmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX3N1cGVyLmMgYi9mcy94ZnMveGZzX3N1cGVyLmNcbmluZGV4IDg1MzFkNTI2ZmM0NDA5Li5hNzc3NGQyZDZiMjNmYyAxMDA2NDRcbi0tLSBhL2ZzL3hmcy94ZnNfc3VwZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMveGZzL3hmc19zdXBlci5jXG5AQCAtMzAsNiAmIzQzOzMwLDcgQEBcbiAjaW5jbHVkZSBcJiMzNDt4ZnNfZmlsZXN0cmVhbS5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7eGZzX3F1b3RhLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDt4ZnNfc3lzZnMuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDt4ZnNfZnN2ZXJpdHkuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3hmc19vbmRpc2suaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3hmc19ybWFwX2l0ZW0uaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3hmc19yZWZjb3VudF9pdGVtLmhcJiMzNDtcbkBAIC0xNjg5LDYgJiM0MzsxNjkwLDkgQEAgeGZzX2ZzX2ZpbGxfc3VwZXIoXG4gXHRzYi1cdTAwM2VzX3F1b3RhX3R5cGVzID0gUVRZUEVfTUFTS19VU1IgfCBRVFlQRV9NQVNLX0dSUCB8IFFUWVBFX01BU0tfUFJKO1xuICNlbmRpZlxuIFx0c2ItXHUwMDNlc19vcCA9IFx1MDAyNnhmc19zdXBlcl9vcGVyYXRpb25zO1xuJiM0MzsjaWZkZWYgQ09ORklHX0ZTX1ZFUklUWVxuJiM0MztcdHNiLVx1MDAzZXNfdm9wID0gXHUwMDI2eGZzX2ZzdmVyaXR5X29wcztcbiYjNDM7I2VuZGlmXG4gXG4gXHQvKlxuIFx0ICogRGVsYXkgbW91bnQgd29yayBpZiB0aGUgZGVidWcgaG9vayBpcyBzZXQuIFRoaXMgaXMgZGVidWdcbkBAIC0xOTQxLDYgJiM0MzsxOTQ1LDkgQEAgeGZzX2ZzX2ZpbGxfc3VwZXIoXG4gXHRpZiAoZXJyb3IpXG4gXHRcdGdvdG8gb3V0X2ZpbGVzdHJlYW1fdW5tb3VudDtcbiBcbiYjNDM7XHRpZiAoeGZzX2hhc192ZXJpdHkobXApKVxuJiM0MztcdFx0eGZzX3dhcm5fZXhwZXJpbWVudGFsKG1wLCBYRlNfRVhQRVJJTUVOVEFMX0ZTVkVSSVRZKTtcbiYjNDM7XG4gXHRyb290ID0gaWdyYWIoVkZTX0kobXAtXHUwMDNlbV9yb290aXApKTtcbiBcdGlmICghcm9vdCkge1xuIFx0XHRlcnJvciA9IC1FTk9FTlQ7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mc3Zlcml0eS5oIGIvaW5jbHVkZS9saW51eC9mc3Zlcml0eS5oXG5pbmRleCA2YzQ2N2RlZDk3NTFmYy4uZjk0MzMzMzJjMjc0YmIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2ZzdmVyaXR5LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvZnN2ZXJpdHkuaFxuQEAgLTEyNCw2ICYjNDM7MTI0LDggQEAgc3RydWN0IGZzdmVyaXR5X29wZXJhdGlvbnMge1xuIFx0ICogQGJ1ZjogdGhlIE1lcmtsZSB0cmVlIGJsb2NrIHRvIHdyaXRlXG4gXHQgKiBAcG9zOiB0aGUgcG9zaXRpb24gb2YgdGhlIGJsb2NrIGluIHRoZSBNZXJrbGUgdHJlZSAoaW4gYnl0ZXMpXG4gXHQgKiBAc2l6ZTogdGhlIE1lcmtsZSB0cmVlIGJsb2NrIHNpemUgKGluIGJ5dGVzKVxuJiM0MztcdCAqIEB6ZXJvX2RpZ2VzdDogdGhlIGhhc2ggb2YgdGhlIGFsbC16ZXJvZXMgYmxvY2tcbiYjNDM7XHQgKiBAZGlnZXN0X3NpemU6IHNpemUgb2YgemVyb19kaWdlc3QsIGluIGJ5dGVzXG4gXHQgKlxuIFx0ICogVGhpcyBpcyBvbmx5IGNhbGxlZCBiZXR3ZWVuIC1cdTAwM2ViZWdpbl9lbmFibGVfdmVyaXR5KCkgYW5kXG4gXHQgKiAtXHUwMDNlZW5kX2VuYWJsZV92ZXJpdHkoKS5cbkBAIC0xMzEsNyAmIzQzOzEzMyw5IEBAIHN0cnVjdCBmc3Zlcml0eV9vcGVyYXRpb25zIHtcbiBcdCAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAtZXJybm8gb24gZmFpbHVyZVxuIFx0ICovXG4gXHRpbnQgKCp3cml0ZV9tZXJrbGVfdHJlZV9ibG9jaykoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IHZvaWQgKmJ1Zixcbi1cdFx0XHRcdCAgICAgICB1NjQgcG9zLCB1bnNpZ25lZCBpbnQgc2l6ZSk7XG4mIzQzO1x0XHRcdFx0ICAgICAgIHU2NCBwb3MsIHVuc2lnbmVkIGludCBzaXplLFxuJiM0MztcdFx0XHRcdCAgICAgICBjb25zdCB1OCAqemVyb19kaWdlc3QsXG4mIzQzO1x0XHRcdFx0ICAgICAgIHVuc2lnbmVkIGludCBkaWdlc3Rfc2l6ZSk7XG4gfTtcbiBcbiAjaWZkZWYgQ09ORklHX0ZTX1ZFUklUWVxuQEAgLTMxNywxMCAmIzQzOzMyMSwxNCBAQCBzdGF0aWMgaW5saW5lIGludCBmc3Zlcml0eV9maWxlX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO2ludCBmc3Zlcml0eV9lbnN1cmVfdmVyaXR5X2luZm8oc3RydWN0IGlub2RlICppbm9kZSk7XG4mIzQzO1xuIHZvaWQgZnN2ZXJpdHlfY2xlYW51cF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbiBcbiBzdHJ1Y3QgcGFnZSAqZ2VuZXJpY19yZWFkX21lcmtsZV90cmVlX3BhZ2Uoc3RydWN0IGlub2RlICppbm9kZSwgcGdvZmZfdCBpbmRleCk7XG4gdm9pZCBnZW5lcmljX3JlYWRhaGVhZF9tZXJrbGVfdHJlZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IGluZGV4LFxuIFx0XHRcdFx0ICAgdW5zaWduZWQgbG9uZyBucl9wYWdlcyk7XG4mIzQzO2ludCBmc3Zlcml0eV9wYWdlY2FjaGVfcmVhZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCB2b2lkICpidWYsIHNpemVfdCBjb3VudCxcbiYjNDM7XHRcdFx0ICAgIGxvZmZfdCBwb3MpO1xuIFxuICNlbmRpZlx0LyogX0xJTlVYX0ZTVkVSSVRZX0ggKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAwNDoxOTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtGU19WRVJJVFkmIzM0OywKICAgICYjMzQ7WEZTX0ZTJiMzNDssCiAgICAmIzM0O1hGU19PTkxJTkVfU0NSVUImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt4ZnNfZnN2ZXJpdHlfYmVnaW5fZW5hYmxlJiMzNDssCiAgICAmIzM0O3hmc19mc3Zlcml0eV9lbmRfZW5hYmxlJiMzNDssCiAgICAmIzM0O3hmc19mc3Zlcml0eV9nZXRfZGVzY3JpcHRvciYjMzQ7LAogICAgJiMzNDt4ZnNfZnN2ZXJpdHlfd3JpdGVfZGVzY3JpcHRvciYjMzQ7LAogICAgJiMzNDt4ZnNfZnN2ZXJpdHlfZGVsZXRlX21ldGFkYXRhJiMzNDssCiAgICAmIzM0O3hmc19mc3Zlcml0eV9jYW5jZWxfdW53cml0dGVuJiMzNDssCiAgICAmIzM0O3hmc19mc3Zlcml0eV9yZWFkX21lcmtsZSYjMzQ7LAogICAgJiMzNDt4ZnNfZnN2ZXJpdHlfcmVhZGFoZWFkX21lcmtsZV90cmVlJiMzNDssCiAgICAmIzM0O3hmc19mc3Zlcml0eV93cml0ZV9tZXJrbGUmIzM0OywKICAgICYjMzQ7ZnN2ZXJpdHlfcGFnZWNhY2hlX3JlYWQmIzM0OywKICAgICYjMzQ7eGNoa19pbm9kZV9zZXR1cF92ZXJpdHkmIzM0OywKICAgICYjMzQ7eGNoa19pbm9kZV92ZXJpdHlfYnJva2VuJiMzNDssCiAgICAmIzM0O3hyZXBfaW5vZGVfdmVyaXR5JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhpcyBwYXRjaCBzZXJpZXMgaW1wbGVtZW50cyBmcy12ZXJpdHkgc3VwcG9ydCBmb3IgdGhlIFhGUyBmaWxlc3lzdGVtLiBJdCBpbnRyb2R1Y2VzIG5ldyBtZXRhZGF0YSBoYW5kbGluZywgaW9jdGwgb3BlcmF0aW9ucywgYW5kIGludGVncmF0aW9uIHdpdGggWEZTJiMzOTtzIGlvbWFwIGFuZCBzY3J1YiBpbmZyYXN0cnVjdHVyZS4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgYWRkaXRpb24gdG8gYSBjb3JlIGZpbGVzeXN0ZW0gYW5kIHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCB0byBlbnN1cmUgZGF0YSBpbnRlZ3JpdHkgYW5kIHByZXZlbnQgdnVsbmVyYWJpbGl0aWVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA1ODIyZDFjYjFlZDgyODc5OTY4MWU2Mzc0NzIzN2UzNjk1YzM4NzQxCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBKdWwgMTEgMDQ6MTk6MDUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9idHJmcy92ZXJpdHkuYyBiL2ZzL2J0cmZzL3Zlcml0eS5jCmluZGV4IDk4MzM2NWE3MzU0MTY4Li5iZDc5ZTM0M2FlMjM3ZiAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvdmVyaXR5LmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvYnRyZnMvdmVyaXR5LmMKQEAgLTc3MywxMSAmIzQzOzc3MywxNSBAQCBzdGF0aWMgc3RydWN0IHBhZ2UgKmJ0cmZzX3JlYWRfbWVya2xlX3RyZWVfcGFnZShzdHJ1Y3QgaW5vZGUgKmlub2RlLAogICogQGJ1ZjoJTWVya2xlIHRyZWUgYmxvY2sgdG8gd3JpdGUKICAqIEBwb3M6CXRoZSBwb3NpdGlvbiBvZiB0aGUgYmxvY2sgaW4gdGhlIE1lcmtsZSB0cmVlIChpbiBieXRlcykKICAqIEBzaXplOgl0aGUgTWVya2xlIHRyZWUgYmxvY2sgc2l6ZSAoaW4gYnl0ZXMpCiYjNDM7ICogQHplcm9fZGlnZXN0Ogl0aGUgaGFzaCBvZiB0aGUgYWxsLXplcm9lcyBibG9jawomIzQzOyAqIEBkaWdlc3Rfc2l6ZToJc2l6ZSBvZiB6ZXJvX2RpZ2VzdCwgaW4gYnl0ZXMKICAqCiAgKiBSZXR1cm5zIDAgb24gc3VjY2VzcyBvciBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUKICAqLwogc3RhdGljIGludCBidHJmc193cml0ZV9tZXJrbGVfdHJlZV9ibG9jayhzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3Qgdm9pZCAqYnVmLAotCQkJCQkgdTY0IHBvcywgdW5zaWduZWQgaW50IHNpemUpCiYjNDM7CQkJCQkgdTY0IHBvcywgdW5zaWduZWQgaW50IHNpemUsCiYjNDM7CQkJCQkgY29uc3QgdTggKnplcm9fZGlnZXN0LAomIzQzOwkJCQkJIHVuc2lnbmVkIGludCBkaWdlc3Rfc2l6ZSkKIHsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZV9pbm9kZShmaWxlKTsKIAlsb2ZmX3QgbWVya2xlX3BvcyA9IG1lcmtsZV9maWxlX3Bvcyhpbm9kZSk7CmRpZmYgLS1naXQgYS9mcy9leHQ0L3Zlcml0eS5jIGIvZnMvZXh0NC92ZXJpdHkuYwppbmRleCBjYTYxZGE1M2YzMTNmYS4uYWM1YzEzM2Y1NTI5MjUgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvdmVyaXR5LmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0NC92ZXJpdHkuYwpAQCAtMzQsMzIgJiM0MzszNCw2IEBAIHN0YXRpYyBpbmxpbmUgbG9mZl90IGV4dDRfdmVyaXR5X21ldGFkYXRhX3Bvcyhjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlKQogCXJldHVybiByb3VuZF91cChpbm9kZS0mZ3Q7aV9zaXplLCA2NTUzNik7CiB9CiAKLS8qCi0gKiBSZWFkIHNvbWUgdmVyaXR5IG1ldGFkYXRhIGZyb20gdGhlIGlub2RlLiAgX192ZnNfcmVhZCgpIGNhbiYjMzk7dCBiZSB1c2VkIGJlY2F1c2UKLSAqIHdlIG5lZWQgdG8gcmVhZCBiZXlvbmQgaV9zaXplLgotICovCi1zdGF0aWMgaW50IHBhZ2VjYWNoZV9yZWFkKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHZvaWQgKmJ1Ziwgc2l6ZV90IGNvdW50LAotCQkJICBsb2ZmX3QgcG9zKQotewotCXdoaWxlIChjb3VudCkgewotCQlzdHJ1Y3QgZm9saW8gKmZvbGlvOwotCQlzaXplX3QgbjsKLQotCQlmb2xpbyA9IHJlYWRfbWFwcGluZ19mb2xpbyhpbm9kZS0mZ3Q7aV9tYXBwaW5nLCBwb3MgJmd0OyZndDsgUEFHRV9TSElGVCwKLQkJCQkJIE5VTEwpOwotCQlpZiAoSVNfRVJSKGZvbGlvKSkKLQkJCXJldHVybiBQVFJfRVJSKGZvbGlvKTsKLQotCQluID0gbWVtY3B5X2Zyb21fZmlsZV9mb2xpbyhidWYsIGZvbGlvLCBwb3MsIGNvdW50KTsKLQkJZm9saW9fcHV0KGZvbGlvKTsKLQotCQlidWYgJiM0Mzs9IG47Ci0JCXBvcyAmIzQzOz0gbjsKLQkJY291bnQgLT0gbjsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KIC8qCiAgKiBXcml0ZSBzb21lIHZlcml0eSBtZXRhZGF0YSB0byB0aGUgaW5vZGUgZm9yIEZTX0lPQ19FTkFCTEVfVkVSSVRZLgogICoga2VybmVsX3dyaXRlKCkgY2FuJiMzOTt0IGJlIHVzZWQgYmVjYXVzZSB0aGUgZmlsZSBkZXNjcmlwdG9yIGlzIHJlYWRvbmx5LgpAQCAtMzExLDggJiM0MzsyODUsOCBAQCBzdGF0aWMgaW50IGV4dDRfZ2V0X3Zlcml0eV9kZXNjcmlwdG9yX2xvY2F0aW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCWdvdG8gYmFkOwogCWRlc2Nfc2l6ZV9wb3MgLT0gc2l6ZW9mKGRlc2Nfc2l6ZV9kaXNrKTsKIAotCWVyciA9IHBhZ2VjYWNoZV9yZWFkKGlub2RlLCAmYW1wO2Rlc2Nfc2l6ZV9kaXNrLCBzaXplb2YoZGVzY19zaXplX2Rpc2spLAotCQkJICAgICBkZXNjX3NpemVfcG9zKTsKJiM0MzsJZXJyID0gZnN2ZXJpdHlfcGFnZWNhY2hlX3JlYWQoaW5vZGUsICZhbXA7ZGVzY19zaXplX2Rpc2ssCiYjNDM7CQkJCSAgICAgIHNpemVvZihkZXNjX3NpemVfZGlzayksIGRlc2Nfc2l6ZV9wb3MpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAJZGVzY19zaXplID0gbGUzMl90b19jcHUoZGVzY19zaXplX2Rpc2spOwpAQCAtMzUyLDcgJiM0MzszMjYsNyBAQCBzdGF0aWMgaW50IGV4dDRfZ2V0X3Zlcml0eV9kZXNjcmlwdG9yKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHZvaWQgKmJ1ZiwKIAlpZiAoYnVmX3NpemUpIHsKIAkJaWYgKGRlc2Nfc2l6ZSAmZ3Q7IGJ1Zl9zaXplKQogCQkJcmV0dXJuIC1FUkFOR0U7Ci0JCWVyciA9IHBhZ2VjYWNoZV9yZWFkKGlub2RlLCBidWYsIGRlc2Nfc2l6ZSwgZGVzY19wb3MpOwomIzQzOwkJZXJyID0gZnN2ZXJpdHlfcGFnZWNhY2hlX3JlYWQoaW5vZGUsIGJ1ZiwgZGVzY19zaXplLCBkZXNjX3Bvcyk7CiAJCWlmIChlcnIpCiAJCQlyZXR1cm4gZXJyOwogCX0KQEAgLTM3NCw3ICYjNDM7MzQ4LDkgQEAgc3RhdGljIHZvaWQgZXh0NF9yZWFkYWhlYWRfbWVya2xlX3RyZWUoc3RydWN0IGlub2RlICppbm9kZSwgcGdvZmZfdCBpbmRleCwKIH0KIAogc3RhdGljIGludCBleHQ0X3dyaXRlX21lcmtsZV90cmVlX2Jsb2NrKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCB2b2lkICpidWYsCi0JCQkJCXU2NCBwb3MsIHVuc2lnbmVkIGludCBzaXplKQomIzQzOwkJCQkJdTY0IHBvcywgdW5zaWduZWQgaW50IHNpemUsCiYjNDM7CQkJCQljb25zdCB1OCAqemVyb19kaWdlc3QsCiYjNDM7CQkJCQl1bnNpZ25lZCBpbnQgZGlnZXN0X3NpemUpCiB7CiAJcG9zICYjNDM7PSBleHQ0X3Zlcml0eV9tZXRhZGF0YV9wb3MoZmlsZV9pbm9kZShmaWxlKSk7CiAKZGlmZiAtLWdpdCBhL2ZzL2YyZnMvdmVyaXR5LmMgYi9mcy9mMmZzL3Zlcml0eS5jCmluZGV4IDM5ZjQ4MjUxNTQ0NTJhLi5mM2E0NjE3NjU2ZGI5YiAxMDA2NDQKLS0tIGEvZnMvZjJmcy92ZXJpdHkuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9mMmZzL3Zlcml0eS5jCkBAIC0zNywzNCAmIzQzOzM3LDYgQEAgc3RhdGljIGlubGluZSBsb2ZmX3QgZjJmc192ZXJpdHlfbWV0YWRhdGFfcG9zKGNvbnN0IHN0cnVjdCBpbm9kZSAqaW5vZGUpCiAJcmV0dXJuIHJvdW5kX3VwKGlub2RlLSZndDtpX3NpemUsIDY1NTM2KTsKIH0KIAotLyoKLSAqIFJlYWQgc29tZSB2ZXJpdHkgbWV0YWRhdGEgZnJvbSB0aGUgaW5vZGUuICBfX3Zmc19yZWFkKCkgY2FuJiMzOTt0IGJlIHVzZWQgYmVjYXVzZQotICogd2UgbmVlZCB0byByZWFkIGJleW9uZCBpX3NpemUuCi0gKi8KLXN0YXRpYyBpbnQgcGFnZWNhY2hlX3JlYWQoc3RydWN0IGlub2RlICppbm9kZSwgdm9pZCAqYnVmLCBzaXplX3QgY291bnQsCi0JCQkgIGxvZmZfdCBwb3MpCi17Ci0Jd2hpbGUgKGNvdW50KSB7Ci0JCXNpemVfdCBuID0gbWluX3Qoc2l6ZV90LCBjb3VudCwKLQkJCQkgUEFHRV9TSVpFIC0gb2Zmc2V0X2luX3BhZ2UocG9zKSk7Ci0JCXN0cnVjdCBwYWdlICpwYWdlOwotCi0JCXBhZ2UgPSByZWFkX21hcHBpbmdfcGFnZShpbm9kZS0mZ3Q7aV9tYXBwaW5nLCBwb3MgJmd0OyZndDsgUEFHRV9TSElGVCwKLQkJCQkJIE5VTEwpOwotCQlpZiAoSVNfRVJSKHBhZ2UpKQotCQkJcmV0dXJuIFBUUl9FUlIocGFnZSk7Ci0KLQkJbWVtY3B5X2Zyb21fcGFnZShidWYsIHBhZ2UsIG9mZnNldF9pbl9wYWdlKHBvcyksIG4pOwotCi0JCXB1dF9wYWdlKHBhZ2UpOwotCi0JCWJ1ZiAmIzQzOz0gbjsKLQkJcG9zICYjNDM7PSBuOwotCQljb3VudCAtPSBuOwotCX0KLQlyZXR1cm4gMDsKLX0KLQogLyoKICAqIFdyaXRlIHNvbWUgdmVyaXR5IG1ldGFkYXRhIHRvIHRoZSBpbm9kZSBmb3IgRlNfSU9DX0VOQUJMRV9WRVJJVFkuCiAgKiBrZXJuZWxfd3JpdGUoKSBjYW4mIzM5O3QgYmUgdXNlZCBiZWNhdXNlIHRoZSBmaWxlIGRlc2NyaXB0b3IgaXMgcmVhZG9ubHkuCkBAIC0yNTAsNyAmIzQzOzIyMiw3IEBAIHN0YXRpYyBpbnQgZjJmc19nZXRfdmVyaXR5X2Rlc2NyaXB0b3Ioc3RydWN0IGlub2RlICppbm9kZSwgdm9pZCAqYnVmLAogCWlmIChidWZfc2l6ZSkgewogCQlpZiAoc2l6ZSAmZ3Q7IGJ1Zl9zaXplKQogCQkJcmV0dXJuIC1FUkFOR0U7Ci0JCXJlcyA9IHBhZ2VjYWNoZV9yZWFkKGlub2RlLCBidWYsIHNpemUsIHBvcyk7CiYjNDM7CQlyZXMgPSBmc3Zlcml0eV9wYWdlY2FjaGVfcmVhZChpbm9kZSwgYnVmLCBzaXplLCBwb3MpOwogCQlpZiAocmVzKQogCQkJcmV0dXJuIHJlczsKIAl9CkBAIC0yNzIsNyAmIzQzOzI0NCw5IEBAIHN0YXRpYyB2b2lkIGYyZnNfcmVhZGFoZWFkX21lcmtsZV90cmVlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHBnb2ZmX3QgaW5kZXgsCiB9CiAKIHN0YXRpYyBpbnQgZjJmc193cml0ZV9tZXJrbGVfdHJlZV9ibG9jayhzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3Qgdm9pZCAqYnVmLAotCQkJCQl1NjQgcG9zLCB1bnNpZ25lZCBpbnQgc2l6ZSkKJiM0MzsJCQkJCXU2NCBwb3MsIHVuc2lnbmVkIGludCBzaXplLAomIzQzOwkJCQkJY29uc3QgdTggKnplcm9fZGlnZXN0LAomIzQzOwkJCQkJdW5zaWduZWQgaW50IGRpZ2VzdF9zaXplKQogewogCXBvcyAmIzQzOz0gZjJmc192ZXJpdHlfbWV0YWRhdGFfcG9zKGZpbGVfaW5vZGUoZmlsZSkpOwogCmRpZmYgLS1naXQgYS9mcy9maWxlX2F0dHIuYyBiL2ZzL2ZpbGVfYXR0ci5jCmluZGV4IGJmYjAwZDI1NmRkNTYwLi41NDI0ZWM0ZTM5NDkzZiAxMDA2NDQKLS0tIGEvZnMvZmlsZV9hdHRyLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvZmlsZV9hdHRyLmMKQEAgLTI0Niw2ICYjNDM7MjQ2LDExIEBAIHN0YXRpYyBpbnQgZmlsZWF0dHJfc2V0X3ByZXBhcmUoc3RydWN0IGlub2RlICppbm9kZSwKIAlpZiAoZmEtJmd0O2ZzeF9jb3dleHRzaXplID09IDApCiAJCWZhLSZndDtmc3hfeGZsYWdzICZhbXA7PSB+RlNfWEZMQUdfQ09XRVhUU0laRTsKIAomIzQzOwkvKiBDYW4gbm90IGVuYWJsZSBEQVggb24gZnN2ZXJpdHkgZmlsZSAqLwomIzQzOwlpZiAoKG9sZF9tYS0mZ3Q7ZnN4X3hmbGFncyAmYW1wOyBGU19YRkxBR19WRVJJVFkpICZhbXA7JmFtcDsKJiM0MzsJCQlmYS0mZ3Q7ZnN4X3hmbGFncyAmYW1wOyBGU19YRkxBR19EQVgpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvdmVyaXR5L2VuYWJsZS5jIGIvZnMvdmVyaXR5L2VuYWJsZS5jCmluZGV4IDQyZGZlZDFjZTBjZTY2Li5hZDRmZjcxZDdkZDk1YiAxMDA2NDQKLS0tIGEvZnMvdmVyaXR5L2VuYWJsZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3Zlcml0eS9lbmFibGUuYwpAQCAtNTAsNyAmIzQzOzUwLDkgQEAgc3RhdGljIGludCB3cml0ZV9tZXJrbGVfdHJlZV9ibG9jayhzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgdTggKmJ1ZiwKIAlpbnQgZXJyOwogCiAJZXJyID0gaW5vZGUtJmd0O2lfc2ItJmd0O3Nfdm9wLSZndDt3cml0ZV9tZXJrbGVfdHJlZV9ibG9jayhmaWxlLCBidWYsIHBvcywKLQkJCQkJCQkgIHBhcmFtcy0mZ3Q7YmxvY2tfc2l6ZSk7CiYjNDM7CQkJCQkJCSAgcGFyYW1zLSZndDtibG9ja19zaXplLAomIzQzOwkJCQkJCQkgIHBhcmFtcy0mZ3Q7emVyb19kaWdlc3QsCiYjNDM7CQkJCQkJCSAgcGFyYW1zLSZndDtkaWdlc3Rfc2l6ZSk7CiAJaWYgKGVycikKIAkJZnN2ZXJpdHlfZXJyKGlub2RlLCAmIzM0O0Vycm9yICVkIHdyaXRpbmcgTWVya2xlIHRyZWUgYmxvY2sgJWx1JiMzNDssCiAJCQkgICAgIGVyciwgaW5kZXgpOwpkaWZmIC0tZ2l0IGEvZnMvdmVyaXR5L29wZW4uYyBiL2ZzL3Zlcml0eS9vcGVuLmMKaW5kZXggZDBjNTZhN2ZhYTNiYjEuLjg3NWU4ODUwY2NiYWNlIDEwMDY0NAotLS0gYS9mcy92ZXJpdHkvb3Blbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3Zlcml0eS9vcGVuLmMKQEAgLTM0Nyw3ICYjNDM7MzQ3LDI0IEBAIGludCBmc3Zlcml0eV9nZXRfZGVzY3JpcHRvcihzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGVuc3VyZV92ZXJpdHlfaW5mbyhzdHJ1Y3QgaW5vZGUgKmlub2RlKQomIzQzOy8qKgomIzQzOyAqIGZzdmVyaXR5X2Vuc3VyZV92ZXJpdHlfaW5mbygpIC0gY2FjaGUgdmVyaXR5IGluZm8gaWYgaXQmIzM5O3Mgbm90IGFscmVhZHkgY2FjaGVkCiYjNDM7ICogQGlub2RlOiB0aGUgaW5vZGUgZm9yIHdoaWNoIHZlcml0eSBpbmZvIHNob3VsZCBiZSBjYWNoZWQKJiM0MzsgKgomIzQzOyAqIEVuc3VyZSB0aGlzIGlub2RlIGhhcyB2ZXJpdHkgaW5mbyBhdHRhY2hlZCB0byBpdCwgaXQmIzM5O3MgYXNzdW1lZCB0aGUgaW5vZGUKJiM0MzsgKiBhbHJlYWR5IGhhcyBmc3Zlcml0eSBlbmFibGVkLiBSZWFkIGZzdmVyaXR5IGRlc2NyaXB0b3IgYW5kIGNyZWF0ZXMgdmVyaXR5CiYjNDM7ICogYmFzZWQgb24gdGhhdC4KJiM0MzsgKgomIzQzOyAqIFRoaXMgbmVlZHMgdG8gYmUgY2FsbGVkIGF0IGxlYXN0IG9uY2UgYmVmb3JlIGFueSBvZiB0aGUgaW5vZGUmIzM5O3MgZGF0YQomIzQzOyAqIGNhbiBiZSB2ZXJpZmllZCAoYW5kIHRodXMgcmVhZCBhdCBhbGwpIG9yIHRoZSBpbm9kZSYjMzk7cyBmc3Zlcml0eSBkaWdlc3QKJiM0MzsgKiByZXRyaWV2ZWQuICBmc3Zlcml0eV9maWxlX29wZW4oKSBjYWxscyB0aGlzIGFscmVhZHksIHdoaWNoIGhhbmRsZXMKJiM0MzsgKiBub3JtYWwgZmlsZSBhY2Nlc3Nlcy4gIElmIGEgZmlsZXN5c3RlbSBkb2VzIGFueSBpbnRlcm5hbCAoaS5lLiBub3QKJiM0MzsgKiBhc3NvY2lhdGVkIHdpdGggYSBmaWxlIGRlc2NyaXB0b3IpIHJlYWRzIG9mIHRoZSBmaWxlJiMzOTtzIGRhdGEgb3IKJiM0MzsgKiBmc3Zlcml0eSBkaWdlc3QsIGl0IG11c3QgY2FsbCB0aGlzIGV4cGxpY2l0bHkgYmVmb3JlIGRvaW5nIHNvLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIC1lcnJubyBvbiBmYWlsdXJlCiYjNDM7ICovCiYjNDM7aW50IGZzdmVyaXR5X2Vuc3VyZV92ZXJpdHlfaW5mbyhzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewogCXN0cnVjdCBmc3Zlcml0eV9pbmZvICp2aSA9IGZzdmVyaXR5X2dldF9pbmZvKGlub2RlKSwgKmZvdW5kOwogCXN0cnVjdCBmc3Zlcml0eV9kZXNjcmlwdG9yICpkZXNjOwpAQCAtMzgzLDEyICYjNDM7NDAwLDEzIEBAIHN0YXRpYyBpbnQgZW5zdXJlX3Zlcml0eV9pbmZvKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiAJa2ZyZWUoZGVzYyk7CiAJcmV0dXJuIGVycjsKIH0KJiM0MztFWFBPUlRfU1lNQk9MX0dQTChmc3Zlcml0eV9lbnN1cmVfdmVyaXR5X2luZm8pOwogCiBpbnQgX19mc3Zlcml0eV9maWxlX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCiB7CiAJaWYgKGZpbHAtJmd0O2ZfbW9kZSAmYW1wOyBGTU9ERV9XUklURSkKIAkJcmV0dXJuIC1FUEVSTTsKLQlyZXR1cm4gZW5zdXJlX3Zlcml0eV9pbmZvKGlub2RlKTsKJiM0MzsJcmV0dXJuIGZzdmVyaXR5X2Vuc3VyZV92ZXJpdHlfaW5mbyhpbm9kZSk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChfX2ZzdmVyaXR5X2ZpbGVfb3Blbik7CiAKZGlmZiAtLWdpdCBhL2ZzL3Zlcml0eS9wYWdlY2FjaGUuYyBiL2ZzL3Zlcml0eS9wYWdlY2FjaGUuYwppbmRleCA5OWY1ZjUzZWVhOTg1Zi4uMjcwYWJkNjUyZTQ4YzYgMTAwNjQ0Ci0tLSBhL2ZzL3Zlcml0eS9wYWdlY2FjaGUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy92ZXJpdHkvcGFnZWNhY2hlLmMKQEAgLTY4LDEzICYjNDM7NjgsNjQgQEAgRVhQT1JUX1NZTUJPTF9HUEwoZ2VuZXJpY19yZWFkYWhlYWRfbWVya2xlX3RyZWUpOwogdm9pZCBmc3Zlcml0eV9maWxsX3plcm9oYXNoKHN0cnVjdCBmb2xpbyAqZm9saW8sIHNpemVfdCBvZmZzZXQsIHNpemVfdCBsZW4sCiAJCQkgICAgICBzdHJ1Y3QgZnN2ZXJpdHlfaW5mbyAqdmkpCiB7Ci0Jc2l6ZV90IG9mZiA9IG9mZnNldDsKJiM0MzsJdm9pZCAqdmFkZHI7CiYjNDM7CXZvaWQgKnRvOwomIzQzOwlzaXplX3QgY2h1bms7CiAKIAlXQVJOX09OX09OQ0UoIUlTX0FMSUdORUQob2Zmc2V0LCB2aS0mZ3Q7dHJlZV9wYXJhbXMuZGlnZXN0X3NpemUpKTsKIAlXQVJOX09OX09OQ0UoIUlTX0FMSUdORUQobGVuLCB2aS0mZ3Q7dHJlZV9wYXJhbXMuZGlnZXN0X3NpemUpKTsKJiM0MzsJV0FSTl9PTl9PTkNFKG9mZnNldCAmIzQzOyBsZW4gJmd0OyBmb2xpb19zaXplKGZvbGlvKSk7CiAKLQlmb3IgKDsgb2ZmICZsdDsgKG9mZnNldCAmIzQzOyBsZW4pOyBvZmYgJiM0Mzs9IHZpLSZndDt0cmVlX3BhcmFtcy5kaWdlc3Rfc2l6ZSkKLQkJbWVtY3B5X3RvX2ZvbGlvKGZvbGlvLCBvZmYsIHZpLSZndDt0cmVlX3BhcmFtcy56ZXJvX2RpZ2VzdCwKJiM0MzsJZG8gewomIzQzOwkJdmFkZHIgPSBrbWFwX2xvY2FsX2ZvbGlvKGZvbGlvLCBvZmZzZXQpOwomIzQzOwkJY2h1bmsgPSBsZW47CiYjNDM7CQl0byA9IHZhZGRyOwomIzQzOwomIzQzOwkJaWYgKGZvbGlvX3Rlc3RfcGFydGlhbF9rbWFwKGZvbGlvKSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgY2h1bmsgJmd0OyBQQUdFX1NJWkUgLSBvZmZzZXRfaW5fcGFnZShvZmZzZXQpKQomIzQzOwkJCWNodW5rID0gUEFHRV9TSVpFIC0gb2Zmc2V0X2luX3BhZ2Uob2Zmc2V0KTsKJiM0MzsJCWZvciAoOyB0byAmbHQ7ICh2YWRkciAmIzQzOyBjaHVuayk7IHRvICYjNDM7PSB2aS0mZ3Q7dHJlZV9wYXJhbXMuZGlnZXN0X3NpemUpCiYjNDM7CQkJbWVtY3B5KHRvLCB2aS0mZ3Q7dHJlZV9wYXJhbXMuemVyb19kaWdlc3QsCiAJCQkJdmktJmd0O3RyZWVfcGFyYW1zLmRpZ2VzdF9zaXplKTsKJiM0MzsJCWt1bm1hcF9sb2NhbCh2YWRkcik7CiYjNDM7CiYjNDM7CQlvZmZzZXQgJiM0Mzs9IGNodW5rOwomIzQzOwkJbGVuIC09IGNodW5rOwomIzQzOwl9IHdoaWxlIChsZW4gJmd0OyAwKTsKJiM0MzsKJiM0MzsJZmx1c2hfZGNhY2hlX2ZvbGlvKGZvbGlvKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGZzdmVyaXR5X2ZpbGxfemVyb2hhc2gpOwomIzQzOwomIzQzOy8qKgomIzQzOyAqIGZzdmVyaXR5X3BhZ2VjYWNoZV9yZWFkKCkgLSByZWFkIHBhZ2UgYW5kIGNvcHkgZGF0YSB0byBidWZmZXIKJiM0MzsgKiBAaW5vZGU6CWNvcHkgZnJvbSB0aGlzIGlub2RlJiMzOTtzIGFkZHJlc3Mgc3BhY2UKJiM0MzsgKiBAYnVmOglidWZmZXIgdG8gY29weSB0bwomIzQzOyAqIEBjb3VudDoJbnVtYmVyIG9mIGJ5dGVzIHRvIGNvcHkKJiM0MzsgKiBAcG9zOglwb3NpdGlvbiBvZiB0aGUgZm9saW8gdG8gY29weSBmcm9tCiYjNDM7ICoKJiM0MzsgKiBSZWFkIHNvbWUgdmVyaXR5IG1ldGFkYXRhIGZyb20gdGhlIGlub2RlLiAgX192ZnNfcmVhZCgpIGNhbiYjMzk7dCBiZSB1c2VkIGJlY2F1c2UKJiM0MzsgKiB3ZSBuZWVkIHRvIHJlYWQgYmV5b25kIGlfc2l6ZS4KJiM0MzsgKi8KJiM0MztpbnQgZnN2ZXJpdHlfcGFnZWNhY2hlX3JlYWQoc3RydWN0IGlub2RlICppbm9kZSwgdm9pZCAqYnVmLCBzaXplX3QgY291bnQsCiYjNDM7CQkJICBsb2ZmX3QgcG9zKQomIzQzO3sKJiM0MzsJd2hpbGUgKGNvdW50KSB7CiYjNDM7CQlzdHJ1Y3QgZm9saW8gKmZvbGlvOwomIzQzOwkJc2l6ZV90IG47CiYjNDM7CiYjNDM7CQlmb2xpbyA9IHJlYWRfbWFwcGluZ19mb2xpbyhpbm9kZS0mZ3Q7aV9tYXBwaW5nLCBwb3MgJmd0OyZndDsgUEFHRV9TSElGVCwKJiM0MzsJCQkJCSBOVUxMKTsKJiM0MzsJCWlmIChJU19FUlIoZm9saW8pKQomIzQzOwkJCXJldHVybiBQVFJfRVJSKGZvbGlvKTsKJiM0MzsKJiM0MzsJCW4gPSBtZW1jcHlfZnJvbV9maWxlX2ZvbGlvKGJ1ZiwgZm9saW8sIHBvcywgY291bnQpOwomIzQzOwkJZm9saW9fcHV0KGZvbGlvKTsKJiM0MzsKJiM0MzsJCWJ1ZiAmIzQzOz0gbjsKJiM0MzsJCXBvcyAmIzQzOz0gbjsKJiM0MzsJCWNvdW50IC09IG47CiYjNDM7CX0KJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKGZzdmVyaXR5X3BhZ2VjYWNoZV9yZWFkKTsKZGlmZiAtLWdpdCBhL2ZzL3Zlcml0eS92ZXJpZnkuYyBiL2ZzL3Zlcml0eS92ZXJpZnkuYwppbmRleCA0MDA0YTFkNDI4NzUxZi4uZGI4YzM1MDIzNGJiNzEgMTAwNjQ0Ci0tLSBhL2ZzL3Zlcml0eS92ZXJpZnkuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy92ZXJpdHkvdmVyaWZ5LmMKQEAgLTksNiAmIzQzOzksNyBAQAogCiAjaW5jbHVkZSAmbHQ7bGludXgvYmlvLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZXhwb3J0LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2ZzZXJyb3IuaCZndDsKIAogI2RlZmluZSBGU19WRVJJVFlfTUFYX1BFTkRJTkdfQkxPQ0tTIDIKIApAQCAtMjA1LDYgJiM0MzsyMDYsOCBAQCBzdGF0aWMgYm9vbCB2ZXJpZnlfZGF0YV9ibG9jayhzdHJ1Y3QgZnN2ZXJpdHlfaW5mbyAqdmksCiAJCWlmIChtZW1jaHJfaW52KGRibG9jay0mZ3Q7ZGF0YSwgMCwgcGFyYW1zLSZndDtibG9ja19zaXplKSkgewogCQkJZnN2ZXJpdHlfZXJyKGlub2RlLAogCQkJCSAgICAgJiMzNDtGSUxFIENPUlJVUFRFRCEgIERhdGEgcGFzdCBFT0YgaXMgbm90IHplcm9lZCYjMzQ7KTsKJiM0MzsJCQlmc2Vycm9yX3JlcG9ydF9kYXRhX2xvc3QoaW5vZGUsIGRhdGFfcG9zLAomIzQzOwkJCQkJCSBwYXJhbXMtJmd0O2Jsb2NrX3NpemUsIEdGUF9OT0ZTKTsKIAkJCXJldHVybiBmYWxzZTsKIAkJfQogCQlyZXR1cm4gdHJ1ZTsKQEAgLTMxMiw2ICYjNDM7MzE1LDcgQEAgc3RhdGljIGJvb2wgdmVyaWZ5X2RhdGFfYmxvY2soc3RydWN0IGZzdmVyaXR5X2luZm8gKnZpLAogCQlkYXRhX3BvcywgbGV2ZWwgLSAxLCBwYXJhbXMtJmd0O2hhc2hfYWxnLSZndDtuYW1lLCBoc2l6ZSwgd2FudF9oYXNoLAogCQlwYXJhbXMtJmd0O2hhc2hfYWxnLSZndDtuYW1lLCBoc2l6ZSwKIAkJbGV2ZWwgPT0gMCA/IGRibG9jay0mZ3Q7cmVhbF9oYXNoIDogcmVhbF9oYXNoKTsKJiM0MzsJZnNlcnJvcl9yZXBvcnRfZGF0YV9sb3N0KGlub2RlLCBkYXRhX3BvcywgcGFyYW1zLSZndDtibG9ja19zaXplLCBHRlBfTk9GUyk7CiBlcnJvcjoKIAlmb3IgKDsgbGV2ZWwgJmd0OyAwOyBsZXZlbC0tKSB7CiAJCWt1bm1hcF9sb2NhbChoYmxvY2tzW2xldmVsIC0gMV0uYWRkcik7CmRpZmYgLS1naXQgYS9mcy94ZnMvTWFrZWZpbGUgYi9mcy94ZnMvTWFrZWZpbGUKaW5kZXggOWY3MTMzZTAyNTc2OGQuLjM4YjdmNTFlNWQ4NDA1IDEwMDY0NAotLS0gYS9mcy94ZnMvTWFrZWZpbGUKJiM0MzsmIzQzOyYjNDM7IGIvZnMveGZzL01ha2VmaWxlCkBAIC0xNDksNiAmIzQzOzE0OSw3IEBAIHhmcy0kKENPTkZJR19YRlNfUE9TSVhfQUNMKQkmIzQzOz0geGZzX2FjbC5vCiB4ZnMtJChDT05GSUdfU1lTQ1RMKQkJJiM0Mzs9IHhmc19zeXNjdGwubwogeGZzLSQoQ09ORklHX0NPTVBBVCkJCSYjNDM7PSB4ZnNfaW9jdGwzMi5vCiB4ZnMtJChDT05GSUdfRVhQT1JURlNfQkxPQ0tfT1BTKQkmIzQzOz0geGZzX3BuZnMubwomIzQzO3hmcy0kKENPTkZJR19GU19WRVJJVFkpCQkmIzQzOz0geGZzX2ZzdmVyaXR5Lm8KIAogIyBub3RpZnkgZmFpbHVyZQogaWZlcSAoJChDT05GSUdfTUVNT1JZX0ZBSUxVUkUpLHkpCmRpZmYgLS1naXQgYS9mcy94ZnMvbGlieGZzL3hmc19ibWFwLmMgYi9mcy94ZnMvbGlieGZzL3hmc19ibWFwLmMKaW5kZXggZDY0ZGVmZWRhNjQ1ZWQuLmNjNDhmNmUyMGU4MDAwIDEwMDY0NAotLS0gYS9mcy94ZnMvbGlieGZzL3hmc19ibWFwLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMveGZzL2xpYnhmcy94ZnNfYm1hcC5jCkBAIC00MSw2ICYjNDM7NDEsOCBAQAogI2luY2x1ZGUgJiMzNDt4ZnNfaW5vZGVfdXRpbC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7eGZzX3J0Z3JvdXAuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3hmc196b25lX2FsbG9jLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7eGZzX2ZzdmVyaXR5LmgmIzM0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9mc3Zlcml0eS5oJmd0OwogCiBzdHJ1Y3Qga21lbV9jYWNoZQkJKnhmc19ibWFwX2ludGVudF9jYWNoZTsKIApAQCAtNDQwMiw2ICYjNDM7NDQwNCwxMCBAQCB4ZnNfYm1hcGlfY29udmVydF9vbmVfZGVsYWxsb2MoCiAJICogdGhlIGV4dGVudC4gIEp1c3QgcmV0dXJuIHRoZSByZWFsIGV4dGVudCBhdCB0aGlzIG9mZnNldC4KIAkgKi8KIAlpZiAoIWlzbnVsbHN0YXJ0YmxvY2soYm1hLmdvdC5icl9zdGFydGJsb2NrKSkgewomIzQzOwkJaWYgKHhmc19pZmxhZ3NfdGVzdChpcCwgWEZTX1ZFUklUWV9DT05TVFJVQ1RJT04pICZhbXA7JmFtcDsKJiM0MzsJCSAgICBYRlNfRlNCX1RPX0IobXAsIGJtYS5nb3QuYnJfc3RhcnRvZmYpICZndDs9CiYjNDM7CQkJICAgIHhmc19mc3Zlcml0eV9tZXRhZGF0YV9vZmZzZXQoaXApKQomIzQzOwkJCWZsYWdzIHw9IElPTUFQX0ZfRlNWRVJJVFk7CiAJCXhmc19ibWJ0X3RvX2lvbWFwKGlwLCBpb21hcCwgJmFtcDtibWEuZ290LCAwLCBmbGFncywKIAkJCQl4ZnNfaW9tYXBfaW5vZGVfc2VxdWVuY2UoaXAsIGZsYWdzKSk7CiAJCWlmIChzZXEpCkBAIC00NDQ5LDYgJiM0Mzs0NDU1LDExIEBAIHhmc19ibWFwaV9jb252ZXJ0X29uZV9kZWxhbGxvYygKIAlYRlNfU1RBVFNfQUREKG1wLCB4c194c3RyYXRfYnl0ZXMsIFhGU19GU0JfVE9fQihtcCwgYm1hLmxlbmd0aCkpOwogCVhGU19TVEFUU19JTkMobXAsIHhzX3hzdHJhdF9xdWljayk7CiAKJiM0MzsJaWYgKHhmc19pZmxhZ3NfdGVzdChpcCwgWEZTX1ZFUklUWV9DT05TVFJVQ1RJT04pICZhbXA7JmFtcDsKJiM0MzsJICAgIFhGU19GU0JfVE9fQihtcCwgYm1hLmdvdC5icl9zdGFydG9mZikgJmd0Oz0KJiM0MzsJCSAgICB4ZnNfZnN2ZXJpdHlfbWV0YWRhdGFfb2Zmc2V0KGlwKSkKJiM0MzsJCWZsYWdzIHw9IElPTUFQX0ZfRlNWRVJJVFk7CiYjNDM7CiAJQVNTRVJUKCFpc251bGxzdGFydGJsb2NrKGJtYS5nb3QuYnJfc3RhcnRibG9jaykpOwogCXhmc19ibWJ0X3RvX2lvbWFwKGlwLCBpb21hcCwgJmFtcDtibWEuZ290LCAwLCBmbGFncywKIAkJCQl4ZnNfaW9tYXBfaW5vZGVfc2VxdWVuY2UoaXAsIGZsYWdzKSk7CmRpZmYgLS1naXQgYS9mcy94ZnMvbGlieGZzL3hmc19mb3JtYXQuaCBiL2ZzL3hmcy9saWJ4ZnMveGZzX2Zvcm1hdC5oCmluZGV4IGRkMGVkMDQ2ZmJlOWM5Li4yODc4YmM5Y2I2NTY0ZSAxMDA2NDQKLS0tIGEvZnMveGZzL2xpYnhmcy94ZnNfZm9ybWF0LmgKJiM0MzsmIzQzOyYjNDM7IGIvZnMveGZzL2xpYnhmcy94ZnNfZm9ybWF0LmgKQEAgLTM3NCwxMSAmIzQzOzM3NCwxMyBAQCB4ZnNfc2JfaGFzX2NvbXBhdF9mZWF0dXJlKAogI2RlZmluZSBYRlNfU0JfRkVBVF9ST19DT01QQVRfUk1BUEJUICAgKDEgJmx0OyZsdDsgMSkJCS8qIHJldmVyc2UgbWFwIGJ0cmVlICovCiAjZGVmaW5lIFhGU19TQl9GRUFUX1JPX0NPTVBBVF9SRUZMSU5LICAoMSAmbHQ7Jmx0OyAyKQkJLyogcmVmbGlua2VkIGZpbGVzICovCiAjZGVmaW5lIFhGU19TQl9GRUFUX1JPX0NPTVBBVF9JTk9CVENOVCAoMSAmbHQ7Jmx0OyAzKQkJLyogaW5vYnQgYmxvY2sgY291bnRzICovCiYjNDM7I2RlZmluZSBYRlNfU0JfRkVBVF9ST19DT01QQVRfVkVSSVRZICAgKDEgJmx0OyZsdDsgNCkJCS8qIGZzLXZlcml0eSAqLwogI2RlZmluZSBYRlNfU0JfRkVBVF9ST19DT01QQVRfQUxMIFwKIAkJKFhGU19TQl9GRUFUX1JPX0NPTVBBVF9GSU5PQlQgfCBcCiAJCSBYRlNfU0JfRkVBVF9ST19DT01QQVRfUk1BUEJUIHwgXAotCQkgWEZTX1NCX0ZFQVRfUk9fQ09NUEFUX1JFRkxJTkt8IFwKLQkJIFhGU19TQl9GRUFUX1JPX0NPTVBBVF9JTk9CVENOVCkKJiM0MzsJCSBYRlNfU0JfRkVBVF9ST19DT01QQVRfUkVGTElOSyB8IFwKJiM0MzsJCSBYRlNfU0JfRkVBVF9ST19DT01QQVRfSU5PQlRDTlQgfCBcCiYjNDM7CQkgWEZTX1NCX0ZFQVRfUk9fQ09NUEFUX1ZFUklUWSkKICNkZWZpbmUgWEZTX1NCX0ZFQVRfUk9fQ09NUEFUX1VOS05PV04JflhGU19TQl9GRUFUX1JPX0NPTVBBVF9BTEwKIHN0YXRpYyBpbmxpbmUgYm9vbAogeGZzX3NiX2hhc19yb19jb21wYXRfZmVhdHVyZSgKQEAgLTEyMzAsMTYgJiM0MzsxMjMyLDIxIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB4ZnNfZGlub2RlX3B1dF9yZGV2KHN0cnVjdCB4ZnNfZGlub2RlICpkaXAsIHhmc19kZXZfdCByZGV2KQogICovCiAjZGVmaW5lIFhGU19ESUZMQUcyX01FVEFEQVRBX0JJVAk1CiAKJiM0MzsvKiBpbm9kZXMgc2VhbGVkIHdpdGggZnMtdmVyaXR5ICovCiYjNDM7I2RlZmluZSBYRlNfRElGTEFHMl9WRVJJVFlfQklUCQk2CiYjNDM7CiAjZGVmaW5lIFhGU19ESUZMQUcyX0RBWAkJKDFVTEwgJmx0OyZsdDsgWEZTX0RJRkxBRzJfREFYX0JJVCkKICNkZWZpbmUgWEZTX0RJRkxBRzJfUkVGTElOSwkoMVVMTCAmbHQ7Jmx0OyBYRlNfRElGTEFHMl9SRUZMSU5LX0JJVCkKICNkZWZpbmUgWEZTX0RJRkxBRzJfQ09XRVhUU0laRQkoMVVMTCAmbHQ7Jmx0OyBYRlNfRElGTEFHMl9DT1dFWFRTSVpFX0JJVCkKICNkZWZpbmUgWEZTX0RJRkxBRzJfQklHVElNRQkoMVVMTCAmbHQ7Jmx0OyBYRlNfRElGTEFHMl9CSUdUSU1FX0JJVCkKICNkZWZpbmUgWEZTX0RJRkxBRzJfTlJFWFQ2NAkoMVVMTCAmbHQ7Jmx0OyBYRlNfRElGTEFHMl9OUkVYVDY0X0JJVCkKICNkZWZpbmUgWEZTX0RJRkxBRzJfTUVUQURBVEEJKDFVTEwgJmx0OyZsdDsgWEZTX0RJRkxBRzJfTUVUQURBVEFfQklUKQomIzQzOyNkZWZpbmUgWEZTX0RJRkxBRzJfVkVSSVRZCSgxVUxMICZsdDsmbHQ7IFhGU19ESUZMQUcyX1ZFUklUWV9CSVQpCiAKICNkZWZpbmUgWEZTX0RJRkxBRzJfQU5ZIFwKIAkoWEZTX0RJRkxBRzJfREFYIHwgWEZTX0RJRkxBRzJfUkVGTElOSyB8IFhGU19ESUZMQUcyX0NPV0VYVFNJWkUgfCBcCi0JIFhGU19ESUZMQUcyX0JJR1RJTUUgfCBYRlNfRElGTEFHMl9OUkVYVDY0IHwgWEZTX0RJRkxBRzJfTUVUQURBVEEpCiYjNDM7CSBYRlNfRElGTEFHMl9CSUdUSU1FIHwgWEZTX0RJRkxBRzJfTlJFWFQ2NCB8IFhGU19ESUZMQUcyX01FVEFEQVRBIHwgXAomIzQzOwkgWEZTX0RJRkxBRzJfVkVSSVRZKQogCiBzdGF0aWMgaW5saW5lIGJvb2wgeGZzX2Rpbm9kZV9oYXNfYmlndGltZShjb25zdCBzdHJ1Y3QgeGZzX2Rpbm9kZSAqZGlwKQogewpAQCAtMjAyNyw0ICYjNDM7MjAzNCwyNiBAQCBzdHJ1Y3QgeGZzX2FjbCB7CiAjZGVmaW5lIFNHSV9BQ0xfRklMRV9TSVpFCShzaXplb2YoU0dJX0FDTF9GSUxFKS0xKQogI2RlZmluZSBTR0lfQUNMX0RFRkFVTFRfU0laRQkoc2l6ZW9mKFNHSV9BQ0xfREVGQVVMVCktMSkKIAomIzQzOy8qCiYjNDM7ICogQXQgbWF4aW11bSBvZiA4IGxldmVscyB3aXRoIDEyOCBoYXNoZXMgcGVyIGJsb2NrICgzMiBieXRlcyBTSEEtMjU2KSBtYXhpbXVtCiYjNDM7ICogdHJlZSBzaXplIGlzICgoMTI4Xjgg4oiSIDEpLygxMjgg4oiSIDEpKSA9IDU2NyoxMF4xMiBibG9ja3MuIFRoaXMgc2hvdWxkIGZpdCBpbgomIzQzOyAqIDUzIGJpdHMgYWRkcmVzcyBzcGFjZS4KJiM0MzsgKgomIzQzOyAqIEF0IHRoaXMgTWVya2xlIHRyZWUgc2l6ZSB3ZSBjYW4gY292ZXIgMjk1RUIgbGFyZ2UgZmlsZS4gVGhpcyBpcyBtdWNoIGxhcmdlcgomIzQzOyAqIHRoYW4gdGhlIGN1cnJlbnRseSBzdXBwb3J0ZWQgZmlsZSBzaXplLgomIzQzOyAqCiYjNDM7ICogRm9yIHNoYTUxMiB0aGUgbGFyZ2VzdCBmaWxlIHdlIGNhbiBjb3ZlciBlbmRzIGF0IDEgJmx0OyZsdDsgNTAgb2Zmc2V0LCB0aGlzIGlzIGFsc28KJiM0MzsgKiBnb29kLgomIzQzOyAqLwomIzQzOyNkZWZpbmUgWEZTX0ZTVkVSSVRZX0xBUkdFU1RfRklMRQkoKGxvZmZfdCkxVUxMICZsdDsmbHQ7IDUzKQomIzQzOwomIzQzOy8qCiYjNDM7ICogQWxpZ25tZW50IG9mIHRoZSBmc3Zlcml0eSBtZXRhZGF0YSBwbGFjZW1lbnQuIFRoaXMgaXMgbGFyZ2VzdCBzdXBwb3J0ZWQgUEFHRQomIzQzOyAqIFNJWkUgZm9yIGZzdmVyaXR5LiBUaGlzIGlzIHVzZWQgdG8gc3BhY2Ugb3V0IGRhdGEgYW5kIG1ldGFkYXRhIGluIHBhZ2UgY2FjaGUuCiYjNDM7ICogVGhlIHNwYWNpbmcgaXMgbmVjZXNzYXJ5IGZvciBub24tZXhwb3N1cmUgb2YgbWV0YWRhdGEgdG8gdXNlcnNwYWNlIGFuZAomIzQzOyAqIGNvcnJlY3QgbWVya2xlIHRyZWUgc3luZXRoZXNpcyBpbiB0aGUgaW9tYXAuCiYjNDM7ICovCiYjNDM7I2RlZmluZSBYRlNfRlNWRVJJVFlfU1RBUlRfQUxJR04JKDY1NTM2KQomIzQzOwomIzQzOwogI2VuZGlmIC8qIF9fWEZTX0ZPUk1BVF9IX18gKi8KZGlmZiAtLWdpdCBhL2ZzL3hmcy9saWJ4ZnMveGZzX2ZzLmggYi9mcy94ZnMvbGlieGZzL3hmc19mcy5oCmluZGV4IDE4NWYwOWYzMjdjMDBjLi44NGQ2MmI3NTA2YTlhZCAxMDA2NDQKLS0tIGEvZnMveGZzL2xpYnhmcy94ZnNfZnMuaAomIzQzOyYjNDM7JiM0MzsgYi9mcy94ZnMvbGlieGZzL3hmc19mcy5oCkBAIC0yNTAsNiAmIzQzOzI1MCw3IEBAIHR5cGVkZWYgc3RydWN0IHhmc19mc29wX3Jlc2Jsa3MgewogI2RlZmluZSBYRlNfRlNPUF9HRU9NX0ZMQUdTX1BBUkVOVAkoMSAmbHQ7Jmx0OyAyNSkgLyogbGludXggcGFyZW50IHBvaW50ZXJzICovCiAjZGVmaW5lIFhGU19GU09QX0dFT01fRkxBR1NfTUVUQURJUgkoMSAmbHQ7Jmx0OyAyNikgLyogbWV0YWRhdGEgZGlyZWN0b3JpZXMgKi8KICNkZWZpbmUgWEZTX0ZTT1BfR0VPTV9GTEFHU19aT05FRAkoMSAmbHQ7Jmx0OyAyNykgLyogem9uZWQgcnQgZGV2aWNlICovCiYjNDM7I2RlZmluZSBYRlNfRlNPUF9HRU9NX0ZMQUdTX1ZFUklUWQkoMSAmbHQ7Jmx0OyAyOCkgLyogZnMtdmVyaXR5ICovCiAKIC8qCiAgKiBNaW5pbXVtIGFuZCBtYXhpbXVtIHNpemVzIG5lZWQgZm9yIGdyb3d0aCBjaGVja3MuCkBAIC00MjEsNiAmIzQzOzQyMiw3IEBAIHN0cnVjdCB4ZnNfYnVsa3N0YXQgewogI2RlZmluZSBYRlNfQlNfU0lDS19TWU1MSU5LCSgxICZsdDsmbHQ7IDYpICAvKiBzeW1ib2xpYyBsaW5rIHJlbW90ZSB0YXJnZXQgKi8KICNkZWZpbmUgWEZTX0JTX1NJQ0tfUEFSRU5UCSgxICZsdDsmbHQ7IDcpICAvKiBwYXJlbnQgcG9pbnRlcnMgKi8KICNkZWZpbmUgWEZTX0JTX1NJQ0tfRElSVFJFRQkoMSAmbHQ7Jmx0OyA4KSAgLyogZGlyZWN0b3J5IHRyZWUgc3RydWN0dXJlICovCiYjNDM7I2RlZmluZSBYRlNfQlNfU0lDS19GU1ZFUklUWQkoMSAmbHQ7Jmx0OyA5KSAgLyogZnN2ZXJpdHkgbWV0YWRhdGEgKi8KIAogLyoKICAqIFByb2plY3QgcXVvdGEgaWQgaGVscGVycyAocHJldmlvdXNseSBwcm9qaWQgd2FzIDE2Yml0IG9ubHkKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saWJ4ZnMveGZzX2hlYWx0aC5oIGIvZnMveGZzL2xpYnhmcy94ZnNfaGVhbHRoLmgKaW5kZXggMWQ0NWNmNTc4OWU4NjQuLjkzMmI0NDcxOTBkYTc2IDEwMDY0NAotLS0gYS9mcy94ZnMvbGlieGZzL3hmc19oZWFsdGguaAomIzQzOyYjNDM7JiM0MzsgYi9mcy94ZnMvbGlieGZzL3hmc19oZWFsdGguaApAQCAtMTA0LDYgJiM0MzsxMDQsNyBAQCBzdHJ1Y3QgeGZzX3J0Z3JvdXA7CiAvKiBEb24mIzM5O3QgcHJvcGFnYXRlIHNpY2sgc3RhdHVzIHRvIGFnIGhlYWx0aCBzdW1tYXJ5IGR1cmluZyBpbmFjdGl2YXRpb24gKi8KICNkZWZpbmUgWEZTX1NJQ0tfSU5PX0ZPUkdFVAkoMSAmbHQ7Jmx0OyAxMikKICNkZWZpbmUgWEZTX1NJQ0tfSU5PX0RJUlRSRUUJKDEgJmx0OyZsdDsgMTMpICAvKiBkaXJlY3RvcnkgdHJlZSBzdHJ1Y3R1cmUgKi8KJiM0MzsjZGVmaW5lIFhGU19TSUNLX0lOT19GU1ZFUklUWQkoMSAmbHQ7Jmx0OyAxNCkgIC8qIGZzdmVyaXR5IG1ldGFkYXRhICovCiAKIC8qIFByaW1hcnkgZXZpZGVuY2Ugb2YgaGVhbHRoIHByb2JsZW1zIGluIGEgZ2l2ZW4gZ3JvdXAuICovCiAjZGVmaW5lIFhGU19TSUNLX0ZTX1BSSU1BUlkJKFhGU19TSUNLX0ZTX0NPVU5URVJTIHwgXApAQCAtMTQwLDcgJiM0MzsxNDEsOCBAQCBzdHJ1Y3QgeGZzX3J0Z3JvdXA7CiAJCQkJIFhGU19TSUNLX0lOT19YQVRUUiB8IFwKIAkJCQkgWEZTX1NJQ0tfSU5PX1NZTUxJTksgfCBcCiAJCQkJIFhGU19TSUNLX0lOT19QQVJFTlQgfCBcCi0JCQkJIFhGU19TSUNLX0lOT19ESVJUUkVFKQomIzQzOwkJCQkgWEZTX1NJQ0tfSU5PX0RJUlRSRUUgfCBcCiYjNDM7CQkJCSBYRlNfU0lDS19JTk9fRlNWRVJJVFkpCiAKICNkZWZpbmUgWEZTX1NJQ0tfSU5PX1pBUFBFRAkoWEZTX1NJQ0tfSU5PX0JNQlREX1pBUFBFRCB8IFwKIAkJCQkgWEZTX1NJQ0tfSU5PX0JNQlRBX1pBUFBFRCB8IFwKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saWJ4ZnMveGZzX2lub2RlX2J1Zi5jIGIvZnMveGZzL2xpYnhmcy94ZnNfaW5vZGVfYnVmLmMKaW5kZXggMzM2ZWY4NDNmMmZlNGYuLmJkODBhMTlmMmUwOTI5IDEwMDY0NAotLS0gYS9mcy94ZnMvbGlieGZzL3hmc19pbm9kZV9idWYuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy94ZnMvbGlieGZzL3hmc19pbm9kZV9idWYuYwpAQCAtNzYwLDYgJiM0Mzs3NjAsMTQgQEAgeGZzX2Rpbm9kZV92ZXJpZnkoCiAJICAgICF4ZnNfaGFzX3J0cmVmbGluayhtcCkpCiAJCXJldHVybiBfX3RoaXNfYWRkcmVzczsKIAomIzQzOwkvKiBvbmx5IHJlZ3VsYXIgZmlsZXMgY2FuIGhhdmUgZnN2ZXJpdHkgKi8KJiM0MzsJaWYgKGZsYWdzMiAmYW1wOyBYRlNfRElGTEFHMl9WRVJJVFkpIHsKJiM0MzsJCWlmICgheGZzX2hhc192ZXJpdHkobXApKQomIzQzOwkJCXJldHVybiBfX3RoaXNfYWRkcmVzczsKJiM0MzsJCWlmICghU19JU1JFRyhtb2RlKSkKJiM0MzsJCQlyZXR1cm4gX190aGlzX2FkZHJlc3M7CiYjNDM7CX0KJiM0MzsKIAlpZiAoeGZzX2hhc196b25lZChtcCkgJmFtcDsmYW1wOwogCSAgICBkaXAtJmd0O2RpX21ldGF0eXBlID09IGNwdV90b19iZTE2KFhGU19NRVRBRklMRV9SVFJNQVApKSB7CiAJCWlmIChiZTMyX3RvX2NwdShkaXAtJmd0O2RpX3VzZWRfYmxvY2tzKSAmZ3Q7IG1wLSZndDttX3NiLnNiX3JnZXh0ZW50cykKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saWJ4ZnMveGZzX2lub2RlX3V0aWwuYyBiL2ZzL3hmcy9saWJ4ZnMveGZzX2lub2RlX3V0aWwuYwppbmRleCAyNThhYzNkMGQ0ODZlNi4uNWE1MTZiZDMxYzMxNzUgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saWJ4ZnMveGZzX2lub2RlX3V0aWwuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy94ZnMvbGlieGZzL3hmc19pbm9kZV91dGlsLmMKQEAgLTc0LDcgJiM0Mzs3NCw4IEBAIHhmc19mbGFnczJkaWZsYWdzMigKIAl1aW50NjRfdAkJZGlfZmxhZ3MyID0KIAkJKGlwLSZndDtpX2RpZmxhZ3MyICZhbXA7IChYRlNfRElGTEFHMl9SRUZMSU5LIHwKIAkJCQkgICBYRlNfRElGTEFHMl9CSUdUSU1FIHwKLQkJCQkgICBYRlNfRElGTEFHMl9OUkVYVDY0KSk7CiYjNDM7CQkJCSAgIFhGU19ESUZMQUcyX05SRVhUNjQgfAomIzQzOwkJCQkgICBYRlNfRElGTEFHMl9WRVJJVFkpKTsKIAogCWlmICh4ZmxhZ3MgJmFtcDsgRlNfWEZMQUdfREFYKQogCQlkaV9mbGFnczIgfD0gWEZTX0RJRkxBRzJfREFYOwpAQCAtMTI2LDYgJiM0MzsxMjcsOCBAQCB4ZnNfaXAyeGZsYWdzKAogCQkJZmxhZ3MgfD0gRlNfWEZMQUdfREFYOwogCQlpZiAoaXAtJmd0O2lfZGlmbGFnczIgJmFtcDsgWEZTX0RJRkxBRzJfQ09XRVhUU0laRSkKIAkJCWZsYWdzIHw9IEZTX1hGTEFHX0NPV0VYVFNJWkU7CiYjNDM7CQlpZiAoaXAtJmd0O2lfZGlmbGFnczIgJmFtcDsgWEZTX0RJRkxBRzJfVkVSSVRZKQomIzQzOwkJCWZsYWdzIHw9IEZTX1hGTEFHX1ZFUklUWTsKIAl9CiAKIAlpZiAoeGZzX2lub2RlX2hhc19hdHRyX2ZvcmsoaXApKQpkaWZmIC0tZ2l0IGEvZnMveGZzL2xpYnhmcy94ZnNfc2IuYyBiL2ZzL3hmcy9saWJ4ZnMveGZzX3NiLmMKaW5kZXggNDczMjJhZGI3NjkwNTkuLjIyMmJiZTU1NTlkZjQ3IDEwMDY0NAotLS0gYS9mcy94ZnMvbGlieGZzL3hmc19zYi5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3hmcy9saWJ4ZnMveGZzX3NiLmMKQEAgLTE2NSw2ICYjNDM7MTY1LDggQEAgeGZzX3NiX3ZlcnNpb25fdG9fZmVhdHVyZXMoCiAJCWZlYXR1cmVzIHw9IFhGU19GRUFUX1JFRkxJTks7CiAJaWYgKHNicC0mZ3Q7c2JfZmVhdHVyZXNfcm9fY29tcGF0ICZhbXA7IFhGU19TQl9GRUFUX1JPX0NPTVBBVF9JTk9CVENOVCkKIAkJZmVhdHVyZXMgfD0gWEZTX0ZFQVRfSU5PQlRDTlQ7CiYjNDM7CWlmIChzYnAtJmd0O3NiX2ZlYXR1cmVzX3JvX2NvbXBhdCAmYW1wOyBYRlNfU0JfRkVBVF9ST19DT01QQVRfVkVSSVRZKQomIzQzOwkJZmVhdHVyZXMgfD0gWEZTX0ZFQVRfVkVSSVRZOwogCWlmIChzYnAtJmd0O3NiX2ZlYXR1cmVzX2luY29tcGF0ICZhbXA7IFhGU19TQl9GRUFUX0lOQ09NUEFUX0ZUWVBFKQogCQlmZWF0dXJlcyB8PSBYRlNfRkVBVF9GVFlQRTsKIAlpZiAoc2JwLSZndDtzYl9mZWF0dXJlc19pbmNvbXBhdCAmYW1wOyBYRlNfU0JfRkVBVF9JTkNPTVBBVF9TUElOT0RFUykKQEAgLTE1ODgsNiAmIzQzOzE1OTAsOCBAQCB4ZnNfZnNfZ2VvbWV0cnkoCiAJCWdlby0mZ3Q7ZmxhZ3MgfD0gWEZTX0ZTT1BfR0VPTV9GTEFHU19NRVRBRElSOwogCWlmICh4ZnNfaGFzX3pvbmVkKG1wKSkKIAkJZ2VvLSZndDtmbGFncyB8PSBYRlNfRlNPUF9HRU9NX0ZMQUdTX1pPTkVEOwomIzQzOwlpZiAoeGZzX2hhc192ZXJpdHkobXApKQomIzQzOwkJZ2VvLSZndDtmbGFncyB8PSBYRlNfRlNPUF9HRU9NX0ZMQUdTX1ZFUklUWTsKIAlnZW8tJmd0O3J0c2VjdHNpemUgPSBzYnAtJmd0O3NiX2Jsb2Nrc2l6ZTsKIAlnZW8tJmd0O2RpcmJsb2Nrc2l6ZSA9IHhmc19kaXIyX2RpcmJsb2NrX2J5dGVzKHNicCk7CiAKZGlmZiAtLWdpdCBhL2ZzL3hmcy9zY3J1Yi9jb21tb24uYyBiL2ZzL3hmcy9zY3J1Yi9jb21tb24uYwppbmRleCBlNTIzM2UzMWFiYjc1MC4uMTY3M2I1MjIyNDRkNzQgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9zY3J1Yi9jb21tb24uYwomIzQzOyYjNDM7JiM0MzsgYi9mcy94ZnMvc2NydWIvY29tbW9uLmMKQEAgLTQ1LDYgJiM0Mzs0NSw4IEBACiAjaW5jbHVkZSAmIzM0O3NjcnViL2hlYWx0aC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7c2NydWIvdGVtcGZpbGUuaCYjMzQ7CiAKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvZnN2ZXJpdHkuaCZndDsKJiM0MzsKIC8qIENvbW1vbiBjb2RlIGZvciB0aGUgbWV0YWRhdGEgc2NydWJiZXJzLiAqLwogCiAvKgpAQCAtMTc1NCwzICYjNDM7MTc1Niw1NCBAQCB4Y2hrX2lub2RlX2NvdW50X2Jsb2NrcygKIAlyZXR1cm4geGZzX2JtYXBfY291bnRfYmxvY2tzKHNjLSZndDt0cCwgc2MtJmd0O2lwLCB3aGljaGZvcmssIG5leHRlbnRzLAogCQkJY291bnQpOwogfQomIzQzOwomIzQzOy8qCiYjNDM7ICogSWYgdGhpcyBpbm9kZSBoYXMgU19WRVJJVFkgc2V0IG9uIGl0LCByZWFkIHRoZSB2ZXJpdHkgaW5mby4gSWYgdGhlIHJlYWRpbmcKJiM0MzsgKiBmYWlscyB3aXRoIGFueXRoaW5nIG90aGVyIHRoYW4gRU5PTUVNLCB0aGUgZmlsZSBpcyBjb3JydXB0LCB3aGljaCB3ZSBjYW4KJiM0MzsgKiBkZXRlY3QgbGF0ZXIgd2l0aCBmc3Zlcml0eV9hY3RpdmUuCiYjNDM7ICoKJiM0MzsgKiBDYWxsZXJzIG11c3QgaG9sZCB0aGUgSU9MT0NLIGFuZCBtdXN0IG5vdCBob2xkIHRoZSBJTE9DSyBvZiBzYy0mZ3Q7aXAgYmVjYXVzZQomIzQzOyAqIGFjdGl2YXRpb24gcmVhZHMgaW5vZGUgZGF0YS4KJiM0MzsgKi8KJiM0MztpbnQKJiM0Mzt4Y2hrX2lub2RlX3NldHVwX3Zlcml0eSgKJiM0MzsJc3RydWN0IHhmc19zY3J1Ygkqc2MpCiYjNDM7ewomIzQzOwlpbnQJCQllcnJvcjsKJiM0MzsKJiM0MzsJaWYgKCFmc3Zlcml0eV9hY3RpdmUoVkZTX0koc2MtJmd0O2lwKSkpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJZXJyb3IgPSBmc3Zlcml0eV9lbnN1cmVfdmVyaXR5X2luZm8oVkZTX0koc2MtJmd0O2lwKSk7CiYjNDM7CXN3aXRjaCAoZXJyb3IpIHsKJiM0MzsJY2FzZSAwOgomIzQzOwkJLyogZnN2ZXJpdHkgaXMgYWN0aXZlICovCiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSAtRU5PREFUQToKJiM0MzsJY2FzZSAtRU1TR1NJWkU6CiYjNDM7CWNhc2UgLUVJTlZBTDoKJiM0MzsJY2FzZSAtRUZTQ09SUlVQVEVEOgomIzQzOwljYXNlIC1FRkJJRzoKJiM0MzsJCS8qCiYjNDM7CQkgKiBUaGUgbm9uemVybyBlcnJubyBjb2RlcyBhYm92ZSBhcmUgdGhlIGVycm9yIGNvZGVzIHRoYXQgY2FuCiYjNDM7CQkgKiBiZSByZXR1cm5lZCBmcm9tIGZzdmVyaXR5IG9uIG1ldGFkYXRhIHZhbGlkYXRpb24gZXJyb3JzLgomIzQzOwkJICovCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCS8qIHJ1bnRpbWUgZXJyb3JzICovCiYjNDM7CQlyZXR1cm4gZXJyb3I7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogSXMgdGhpcyBhIHZlcml0eSBmaWxlIHRoYXQgZmFpbGVkIHRvIGFjdGl2YXRlPyAgQ2FsbGVycyBtdXN0IGhhdmUgdHJpZWQgdG8KJiM0MzsgKiBhY3RpdmF0ZSBmc3Zlcml0eSB2aWEgeGNoa19pbm9kZV9zZXR1cF92ZXJpdHkuCiYjNDM7ICovCiYjNDM7Ym9vbAomIzQzO3hjaGtfaW5vZGVfdmVyaXR5X2Jyb2tlbigKJiM0MzsJc3RydWN0IHhmc19pbm9kZQkqaXApCiYjNDM7ewomIzQzOwlyZXR1cm4gZnN2ZXJpdHlfYWN0aXZlKFZGU19JKGlwKSkgJmFtcDsmYW1wOyAhZnN2ZXJpdHlfZ2V0X2luZm8oVkZTX0koaXApKTsKJiM0Mzt9CmRpZmYgLS1naXQgYS9mcy94ZnMvc2NydWIvY29tbW9uLmggYi9mcy94ZnMvc2NydWIvY29tbW9uLmgKaW5kZXggOWQ2MjdmZDUwNjg3ZTQuLjNkZTJiNjAwOWE5OTQxIDEwMDY0NAotLS0gYS9mcy94ZnMvc2NydWIvY29tbW9uLmgKJiM0MzsmIzQzOyYjNDM7IGIvZnMveGZzL3NjcnViL2NvbW1vbi5oCkBAIC0yNjgsNiAmIzQzOzI2OCw4IEBAIGludCB4Y2hrX2lub2RlX2lzX2FsbG9jYXRlZChzdHJ1Y3QgeGZzX3NjcnViICpzYywgeGZzX2FnaW5vX3QgYWdpbm8sCiAJCWJvb2wgKmludXNlKTsKIGludCB4Y2hrX2lub2RlX2NvdW50X2Jsb2NrcyhzdHJ1Y3QgeGZzX3NjcnViICpzYywgaW50IHdoaWNoZm9yaywKIAkJeGZzX2V4dG51bV90ICpuZXh0ZW50cywgeGZzX2ZpbGJsa3NfdCAqY291bnQpOwomIzQzO2ludCB4Y2hrX2lub2RlX3NldHVwX3Zlcml0eShzdHJ1Y3QgeGZzX3NjcnViICpzYyk7CiYjNDM7Ym9vbCB4Y2hrX2lub2RlX3Zlcml0eV9icm9rZW4oc3RydWN0IHhmc19pbm9kZSAqaXApOwogCiBib29sIHhjaGtfaW5vZGVfaXNfZGlydHJlZV9yb290KGNvbnN0IHN0cnVjdCB4ZnNfaW5vZGUgKmlwKTsKIGJvb2wgeGNoa19pbm9kZV9pc19zYl9yb290ZWQoY29uc3Qgc3RydWN0IHhmc19pbm9kZSAqaXApOwpkaWZmIC0tZ2l0IGEvZnMveGZzL3NjcnViL2lub2RlLmMgYi9mcy94ZnMvc2NydWIvaW5vZGUuYwppbmRleCA2NWIxM2UzMTE5MTY4MS4uZDFjZGQ2YjQ0NWQwMTcgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9zY3J1Yi9pbm9kZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3hmcy9zY3J1Yi9pbm9kZS5jCkBAIC0zNiw2ICYjNDM7MzYsMTAgQEAgeGNoa19wcmVwYXJlX2lzY3J1YigKIAogCXhjaGtfaWxvY2soc2MsIFhGU19JT0xPQ0tfRVhDTCk7CiAKJiM0MzsJZXJyb3IgPSB4Y2hrX2lub2RlX3NldHVwX3Zlcml0eShzYyk7CiYjNDM7CWlmIChlcnJvcikKJiM0MzsJCXJldHVybiBlcnJvcjsKJiM0MzsKIAllcnJvciA9IHhjaGtfdHJhbnNfYWxsb2Moc2MsIDApOwogCWlmIChlcnJvcikKIAkJcmV0dXJuIGVycm9yOwpAQCAtODMzLDYgJiM0Mzs4MzcsOSBAQCB4Y2hrX2lub2RlKAogCWlmIChTX0lTUkVHKFZGU19JKHNjLSZndDtpcCktJmd0O2lfbW9kZSkpCiAJCXhjaGtfaW5vZGVfY2hlY2tfcmVmbGlua19pZmxhZyhzYywgSV9JTk8oc2MtJmd0O2lwKSk7CiAKJiM0MzsJaWYgKHhjaGtfaW5vZGVfdmVyaXR5X2Jyb2tlbihzYy0mZ3Q7aXApKQomIzQzOwkJeGNoa19pbm9fc2V0X2NvcnJ1cHQoc2MsIHNjLSZndDtzbS0mZ3Q7c21faW5vKTsKJiM0MzsKIAl4Y2hrX2lub2RlX2NoZWNrX3VubGlua2VkKHNjKTsKIAogCXhjaGtfaW5vZGVfeHJlZihzYywgSV9JTk8oc2MtJmd0O2lwKSwgJmFtcDtkaSk7CmRpZmYgLS1naXQgYS9mcy94ZnMvc2NydWIvaW5vZGVfcmVwYWlyLmMgYi9mcy94ZnMvc2NydWIvaW5vZGVfcmVwYWlyLmMKaW5kZXggNDkzZGNmNWNjNmMxNTkuLjkwZjg2MWJiNGVmODQ4IDEwMDY0NAotLS0gYS9mcy94ZnMvc2NydWIvaW5vZGVfcmVwYWlyLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMveGZzL3NjcnViL2lub2RlX3JlcGFpci5jCkBAIC01NzMsNiAmIzQzOzU3Myw4IEBAIHhyZXBfZGlub2RlX2ZsYWdzKAogCQlkaXAtJmd0O2RpX25yZXh0NjRfcGFkID0gMDsKIAllbHNlIGlmIChkaXAtJmd0O2RpX3ZlcnNpb24gJmd0Oz0gMykKIAkJZGlwLSZndDtkaV92M19wYWQgPSAwOwomIzQzOwlpZiAoIXhmc19oYXNfdmVyaXR5KG1wKSB8fCAhU19JU1JFRyhtb2RlKSkKJiM0MzsJCWZsYWdzMiAmYW1wOz0gflhGU19ESUZMQUcyX1ZFUklUWTsKIAogCWlmIChmbGFnczIgJmFtcDsgWEZTX0RJRkxBRzJfTUVUQURBVEEpIHsKIAkJeGZzX2ZhaWxhZGRyX3QJZmE7CkBAIC0xNjE3LDYgJiM0MzsxNjE5LDEwIEBAIHhyZXBfZGlub2RlX2NvcmUoCiAJaWYgKGlnZXRfZXJyb3IpCiAJCXJldHVybiBpZ2V0X2Vycm9yOwogCiYjNDM7CWVycm9yID0geGNoa19pbm9kZV9zZXR1cF92ZXJpdHkoc2MpOwomIzQzOwlpZiAoZXJyb3IpCiYjNDM7CQlyZXR1cm4gZXJyb3I7CiYjNDM7CiAJZXJyb3IgPSB4Y2hrX3RyYW5zX2FsbG9jKHNjLCAwKTsKIAlpZiAoZXJyb3IpCiAJCXJldHVybiBlcnJvcjsKQEAgLTIwMzUsNiAmIzQzOzIwNDEsMjcgQEAgeHJlcF9pbm9kZV91bmxpbmtlZCgKIAlyZXR1cm4gMDsKIH0KIAomIzQzOy8qCiYjNDM7ICogSWYgdGhpcyBmaWxlIGlzIGEgZnN2ZXJpdHkgZmlsZSwgeGNoa19wcmVwYXJlX2lzY3J1YiBvciB4cmVwX2Rpbm9kZV9jb3JlCiYjNDM7ICogc2hvdWxkIGhhdmUgYWN0aXZhdGVkIGl0LiAgSWYgaXQmIzM5O3Mgc3RpbGwgbm90IGFjdGl2ZSwgdGhlbiB0aGVyZSYjMzk7cyBzb21ldGhpbmcKJiM0MzsgKiB3cm9uZyB3aXRoIHRoZSB2ZXJpdHkgZGVzY3JpcHRvciBhbmQgd2Ugc2hvdWxkIHR1cm4gaXQgb2ZmLgomIzQzOyAqLwomIzQzO1NUQVRJQyBpbnQKJiM0Mzt4cmVwX2lub2RlX3Zlcml0eSgKJiM0MzsJc3RydWN0IHhmc19zY3J1Ygkqc2MpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaW5vZGUJCSppbm9kZSA9IFZGU19JKHNjLSZndDtpcCk7CiYjNDM7CiYjNDM7CWlmICh4Y2hrX2lub2RlX3Zlcml0eV9icm9rZW4oc2MtJmd0O2lwKSkgewomIzQzOwkJc2MtJmd0O2lwLSZndDtpX2RpZmxhZ3MyICZhbXA7PSB+WEZTX0RJRkxBRzJfVkVSSVRZOwomIzQzOwkJaW5vZGUtJmd0O2lfZmxhZ3MgJmFtcDs9IH5TX1ZFUklUWTsKJiM0MzsKJiM0MzsJCXhmc190cmFuc19sb2dfaW5vZGUoc2MtJmd0O3RwLCBzYy0mZ3Q7aXAsIFhGU19JTE9HX0NPUkUpOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIC8qIFJlcGFpciBhbiBpbm9kZSYjMzk7cyBmaWVsZHMuICovCiBpbnQKIHhyZXBfaW5vZGUoCkBAIC0yMDg0LDYgJiM0MzsyMTExLDE1IEBAIHhyZXBfaW5vZGUoCiAJCQlyZXR1cm4gZXJyb3I7CiAJfQogCiYjNDM7CS8qCiYjNDM7CSAqIERpc2FibGUgZnN2ZXJpdHkgaWYgaXQgY2Fubm90IGJlIGFjdGl2YXRlZC4gIEFjdGl2YXRpb24gZmFpbHVyZQomIzQzOwkgKiBwcm9oaWJpdHMgdGhlIGZpbGUgZnJvbSBiZWluZyBvcGVuZWQsIHNvIHRoZXJlIGNhbm5vdCBiZSBhbm90aGVyCiYjNDM7CSAqIHByb2dyYW0gd2l0aCBhbiBvcGVuIGZkIHRvIHdoYXQgaXQgdGhpbmtzIGlzIGEgdmVyaXR5IGZpbGUuCiYjNDM7CSAqLwomIzQzOwllcnJvciA9IHhyZXBfaW5vZGVfdmVyaXR5KHNjKTsKJiM0MzsJaWYgKGVycm9yKQomIzQzOwkJcmV0dXJuIGVycm9yOwomIzQzOwogCS8qIFJlY29ubmVjdCBpbmNvcmUgdW5saW5rZWQgbGlzdCAqLwogCWVycm9yID0geHJlcF9pbm9kZV91bmxpbmtlZChzYyk7CiAJaWYgKGVycm9yKQpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19hb3BzLmMgYi9mcy94ZnMveGZzX2FvcHMuYwppbmRleCA1MTI5M2I2ZjMzMWYwYi4uYjA1MzdjNjdlOTYwZTEgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfYW9wcy5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3hmcy94ZnNfYW9wcy5jCkBAIC0yMiw3ICYjNDM7MjIsOSBAQAogI2luY2x1ZGUgJiMzNDt4ZnNfaWNhY2hlLmgmIzM0OwogI2luY2x1ZGUgJiMzNDt4ZnNfem9uZV9hbGxvYy5oJiMzNDsKICNpbmNsdWRlICYjMzQ7eGZzX3J0Z3JvdXAuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDt4ZnNfZnN2ZXJpdHkuaCYjMzQ7CiAjaW5jbHVkZSAmbHQ7bGludXgvYmlvLWludGVncml0eS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9mc3Zlcml0eS5oJmd0OwogCiBzdHJ1Y3QgeGZzX3dyaXRlcGFnZV9jdHggewogCXN0cnVjdCBpb21hcF93cml0ZXBhZ2VfY3R4IGN0eDsKQEAgLTE4MSw2ICYjNDM7MTgzLDIzIEBAIHhmc19lbmRfaW9lbmRfd3JpdGUoCiAJbWVtYWxsb2Nfbm9mc19yZXN0b3JlKG5vZnNfZmxhZyk7CiB9CiAKJiM0MzsvKgomIzQzOyAqIElPIHJlYWQgY29tcGxldGlvbi4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZAomIzQzO3hmc19lbmRfaW9lbmRfcmVhZCgKJiM0MzsJc3RydWN0IGlvbWFwX2lvZW5kCSppb2VuZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB4ZnNfaW5vZGUJKmlwID0gWEZTX0koaW9lbmQtJmd0O2lvX2lub2RlKTsKJiM0MzsKJiM0MzsJaWYgKCFpb2VuZC0mZ3Q7aW9fYmlvLmJpX3N0YXR1cyAmYW1wOyZhbXA7CiYjNDM7CQkJeGZzX2ZzdmVyaXR5X2lzX2ZpbGVfZGF0YShpcCwgaW9lbmQtJmd0O2lvX29mZnNldCkpCiYjNDM7CQlmc3Zlcml0eV92ZXJpZnlfYmlvKGlvZW5kLSZndDtpb192aSwKJiM0MzsJCQkJICAgICZhbXA7aW9lbmQtJmd0O2lvX2Jpbyk7CiYjNDM7CWlvbWFwX2ZpbmlzaF9pb2VuZHMoaW9lbmQsCiYjNDM7CQlibGtfc3RhdHVzX3RvX2Vycm5vKGlvZW5kLSZndDtpb19iaW8uYmlfc3RhdHVzKSk7CiYjNDM7fQomIzQzOwogLyoKICAqIEZpbmlzaCBhbGwgcGVuZGluZyBJTyBjb21wbGV0aW9ucyB0aGF0IHJlcXVpcmUgdHJhbnNhY3Rpb25hbCBtb2RpZmljYXRpb25zLgogICoKQEAgLTIxNSw4ICYjNDM7MjM0LDcgQEAgeGZzX2VuZF9pbygKIAkJbGlzdF9kZWxfaW5pdCgmYW1wO2lvZW5kLSZndDtpb19saXN0KTsKIAkJaW9tYXBfaW9lbmRfdHJ5X21lcmdlKGlvZW5kLCAmYW1wO3RtcCk7CiAJCWlmIChiaW9fb3AoJmFtcDtpb2VuZC0mZ3Q7aW9fYmlvKSA9PSBSRVFfT1BfUkVBRCkKLQkJCWlvbWFwX2ZpbmlzaF9pb2VuZHMoaW9lbmQsCi0JCQkJYmxrX3N0YXR1c190b19lcnJubyhpb2VuZC0mZ3Q7aW9fYmlvLmJpX3N0YXR1cykpOwomIzQzOwkJCXhmc19lbmRfaW9lbmRfcmVhZChpb2VuZCk7CiAJCWVsc2UKIAkJCXhmc19lbmRfaW9lbmRfd3JpdGUoaW9lbmQpOwogCQljb25kX3Jlc2NoZWQoKTsKQEAgLTI0Miw5ICYjNDM7MjYwLDE0IEBAIHhmc19lbmRfYmlvKAogCX0KIAogCXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7aXAtJmd0O2lfaW9lbmRfbG9jaywgZmxhZ3MpOwotCWlmIChsaXN0X2VtcHR5KCZhbXA7aXAtJmd0O2lfaW9lbmRfbGlzdCkpCi0JCVdBUk5fT05fT05DRSghcXVldWVfd29yayhtcC0mZ3Q7bV91bndyaXR0ZW5fd29ya3F1ZXVlLAomIzQzOwlpZiAobGlzdF9lbXB0eSgmYW1wO2lwLSZndDtpX2lvZW5kX2xpc3QpKSB7CiYjNDM7CQlpZiAoSVNfRU5BQkxFRChDT05GSUdfRlNfVkVSSVRZKSAmYW1wOyZhbXA7IGlvZW5kLSZndDtpb192aSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgaW9lbmQtJmd0O2lvX29mZnNldCAmbHQ7IHhmc19mc3Zlcml0eV9tZXRhZGF0YV9vZmZzZXQoaXApKQomIzQzOwkJCWZzdmVyaXR5X2VucXVldWVfdmVyaWZ5X3dvcmsoJmFtcDtpcC0mZ3Q7aV9pb2VuZF93b3JrKTsKJiM0MzsJCWVsc2UKJiM0MzsJCQlXQVJOX09OX09OQ0UoIXF1ZXVlX3dvcmsobXAtJmd0O21fdW53cml0dGVuX3dvcmtxdWV1ZSwKIAkJCQkJICZhbXA7aXAtJmd0O2lfaW9lbmRfd29yaykpOwomIzQzOwl9CiAJbGlzdF9hZGRfdGFpbCgmYW1wO2lvZW5kLSZndDtpb19saXN0LCAmYW1wO2lwLSZndDtpX2lvZW5kX2xpc3QpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtpcC0mZ3Q7aV9pb2VuZF9sb2NrLCBmbGFncyk7CiB9CkBAIC0zNTAsMTIgJiM0MzszNzMsMTYgQEAgeGZzX21hcF9ibG9ja3MoCiAJaW50CQkJcmV0cmllcyA9IDA7CiAJaW50CQkJZXJyb3IgPSAwOwogCXVuc2lnbmVkIGludAkJKnNlcTsKJiM0MzsJdW5zaWduZWQgaW50CQlpb21hcF9mbGFncyA9IDA7CiAKIAlpZiAoeGZzX2lzX3NodXRkb3duKG1wKSkKIAkJcmV0dXJuIC1FSU87CiAKIAlYRlNfRVJST1JUQUdfREVMQVkobXAsIFhGU19FUlJUQUdfV0JfREVMQVlfTVMpOwogCiYjNDM7CWlmICh4ZnNfaWZsYWdzX3Rlc3QoaXAsIFhGU19WRVJJVFlfQ09OU1RSVUNUSU9OKSkKJiM0MzsJCWlvbWFwX2ZsYWdzIHw9IElPTUFQX0ZfRlNWRVJJVFk7CiYjNDM7CiAJLyoKIAkgKiBDT1cgZm9yayBibG9ja3MgY2FuIG92ZXJsYXAgZGF0YSBmb3JrIGJsb2NrcyBldmVuIGlmIHRoZSBibG9ja3MKIAkgKiBhcmVuJiMzOTt0IHNoYXJlZC4gIENPVyBJL08gYWx3YXlzIHRha2VzIHByZWNlZGVudCwgc28gd2UgbXVzdCBhbHdheXMKQEAgLTQ0Myw3ICYjNDM7NDcwLDggQEAgeGZzX21hcF9ibG9ja3MoCiAJICAgIGlzbnVsbHN0YXJ0YmxvY2soaW1hcC5icl9zdGFydGJsb2NrKSkKIAkJZ290byBhbGxvY2F0ZV9ibG9ja3M7CiAKLQl4ZnNfYm1idF90b19pb21hcChpcCwgJmFtcDt3cGMtJmd0O2lvbWFwLCAmYW1wO2ltYXAsIDAsIDAsIFhGU19XUEMod3BjKS0mZ3Q7ZGF0YV9zZXEpOwomIzQzOwl4ZnNfYm1idF90b19pb21hcChpcCwgJmFtcDt3cGMtJmd0O2lvbWFwLCAmYW1wO2ltYXAsIDAsIGlvbWFwX2ZsYWdzLAomIzQzOwkJCSAgWEZTX1dQQyh3cGMpLSZndDtkYXRhX3NlcSk7CiAJdHJhY2VfeGZzX21hcF9ibG9ja3NfZm91bmQoaXAsIG9mZnNldCwgY291bnQsIHdoaWNoZm9yaywgJmFtcDtpbWFwKTsKIAlyZXR1cm4gMDsKIGFsbG9jYXRlX2Jsb2NrczoKQEAgLTU5MCwxMiAmIzQzOzYxOCwxNiBAQCB4ZnNfem9uZWRfbWFwX2Jsb2NrcygKIAl4ZnNfZmlsYmxrc190CQljb3VudF9mc2I7CiAJc3RydWN0IHhmc19ibWJ0X2lyZWMJaW1hcCwgZGVsOwogCXN0cnVjdCB4ZnNfaWV4dF9jdXJzb3IJaWN1cjsKJiM0MzsJdTE2CQkJaW9tYXBfZmxhZ3MgPSAwOwogCiAJaWYgKHhmc19pc19zaHV0ZG93bihtcCkpCiAJCXJldHVybiAtRUlPOwogCiAJWEZTX0VSUk9SVEFHX0RFTEFZKG1wLCBYRlNfRVJSVEFHX1dCX0RFTEFZX01TKTsKIAomIzQzOwlpZiAoeGZzX2lmbGFnc190ZXN0KGlwLCBYRlNfVkVSSVRZX0NPTlNUUlVDVElPTikpCiYjNDM7CQlpb21hcF9mbGFncyB8PSBJT01BUF9GX0ZTVkVSSVRZOwomIzQzOwogCS8qCiAJICogQWxsIGRpcnR5IGRhdGEgbXVzdCBiZSBjb3ZlcmVkIGJ5IGRlbGFsbG9jIGV4dGVudHMuICBCdXQgdHJ1bmNhdGUgY2FuCiAJICogcmVtb3ZlIGRlbGFsbG9jIGV4dGVudHMgdW5kZXJuZWF0aCB1cyBvciByZWR1Y2UgdGhlaXIgc2l6ZS4KQEAgLTYxOSw3ICYjNDM7NjUxLDcgQEAgeGZzX3pvbmVkX21hcF9ibG9ja3MoCiAJCWltYXAuYnJfc3RhcnRibG9jayA9IEhPTEVTVEFSVEJMT0NLOwogCQlpbWFwLmJyX3N0YXRlID0gWEZTX0VYVF9OT1JNOwogCQl4ZnNfaXVubG9jayhpcCwgWEZTX0lMT0NLX0VYQ0wpOwotCQl4ZnNfYm1idF90b19pb21hcChpcCwgJmFtcDt3cGMtJmd0O2lvbWFwLCAmYW1wO2ltYXAsIDAsIDAsIDApOwomIzQzOwkJeGZzX2JtYnRfdG9faW9tYXAoaXAsICZhbXA7d3BjLSZndDtpb21hcCwgJmFtcDtpbWFwLCAwLCBpb21hcF9mbGFncywgMCk7CiAJCXJldHVybiAwOwogCX0KIAllbmRfZnNiID0gbWluKGVuZF9mc2IsIGltYXAuYnJfc3RhcnRvZmYgJiM0MzsgaW1hcC5icl9ibG9ja2NvdW50KTsKQEAgLTYzMiw3ICYjNDM7NjY0LDcgQEAgeGZzX3pvbmVkX21hcF9ibG9ja3MoCiAJeGZzX2l1bmxvY2soaXAsIFhGU19JTE9DS19FWENMKTsKIAogCXdwYy0mZ3Q7aW9tYXAudHlwZSA9IElPTUFQX01BUFBFRDsKLQl3cGMtJmd0O2lvbWFwLmZsYWdzID0gSU9NQVBfRl9ESVJUWTsKJiM0MzsJd3BjLSZndDtpb21hcC5mbGFncyA9IGlvbWFwX2ZsYWdzIHwgSU9NQVBfRl9ESVJUWTsKIAl3cGMtJmd0O2lvbWFwLmJkZXYgPSBtcC0mZ3Q7bV9ydGRldl90YXJncC0mZ3Q7YnRfYmRldjsKIAl3cGMtJmd0O2lvbWFwLm9mZnNldCA9IG9mZnNldDsKIAl3cGMtJmd0O2lvbWFwLmxlbmd0aCA9IFhGU19GU0JfVE9fQihtcCwgY291bnRfZnNiKTsKQEAgLTY4NCw2ICYjNDM7NzE2LDIyIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaW9tYXBfd3JpdGViYWNrX29wcyB4ZnNfem9uZWRfd3JpdGViYWNrX29wcyA9IHsKIAkud3JpdGViYWNrX3N1Ym1pdAk9IHhmc196b25lZF93cml0ZWJhY2tfc3VibWl0LAogfTsKIAomIzQzO3N0YXRpYyBpbnQKJiM0Mzt4ZnNfaW9tYXBfd3JpdGVwYWdlcygKJiM0MzsJc3RydWN0IHhmc19pbm9kZQkJKmlwLAomIzQzOwlzdHJ1Y3QgaW9tYXBfd3JpdGVwYWdlX2N0eAkqY3R4KQomIzQzO3sKJiM0MzsJLyoKJiM0MzsJICogV3JpdGViYWNrIGRvZXMgbm90IHdvcmsgZm9yIGZvbGlvcyBwYXN0IEVPRiwgbGV0IGl0IGtub3cgdGhhdAomIzQzOwkgKiBJL08gaGFwcGVucyBmb3IgZnN2ZXJpdHkgbWV0YWRhdGEgYW5kIHRoaXMgcmVzdHJpY3Rpb24gbmVlZAomIzQzOwkgKiB0byBiZSBza2lwcGVkCiYjNDM7CSAqLwomIzQzOwlpZiAoeGZzX2lmbGFnc190ZXN0KGlwLCBYRlNfVkVSSVRZX0NPTlNUUlVDVElPTikpCiYjNDM7CQljdHgtJmd0O2lvbWFwLmZsYWdzIHw9IElPTUFQX0ZfRlNWRVJJVFk7CiYjNDM7CiYjNDM7CXJldHVybiBpb21hcF93cml0ZXBhZ2VzKGN0eCk7CiYjNDM7fQomIzQzOwogU1RBVElDIGludAogeGZzX3ZtX3dyaXRlcGFnZXMoCiAJc3RydWN0IGFkZHJlc3Nfc3BhY2UJKm1hcHBpbmcsCkBAIC03MDMsNyAmIzQzOzc1MSw3IEBAIHhmc192bV93cml0ZXBhZ2VzKAogCQl9OwogCQlpbnQJCQkJZXJyb3I7CiAKLQkJZXJyb3IgPSBpb21hcF93cml0ZXBhZ2VzKCZhbXA7eGMuY3R4KTsKJiM0MzsJCWVycm9yID0geGZzX2lvbWFwX3dyaXRlcGFnZXMoaXAsICZhbXA7eGMuY3R4KTsKIAkJaWYgKHhjLm9wZW5fem9uZSkKIAkJCXhmc19vcGVuX3pvbmVfcHV0KHhjLm9wZW5fem9uZSk7CiAJCXJldHVybiBlcnJvcjsKQEAgLTcxNiw3ICYjNDM7NzY0LDcgQEAgeGZzX3ZtX3dyaXRlcGFnZXMoCiAJCQl9LAogCQl9OwogCi0JCXJldHVybiBpb21hcF93cml0ZXBhZ2VzKCZhbXA7d3BjLmN0eCk7CiYjNDM7CQlyZXR1cm4geGZzX2lvbWFwX3dyaXRlcGFnZXMoaXAsICZhbXA7d3BjLmN0eCk7CiAJfQogfQogCkBAIC03NjEsOSAmIzQzOzgwOSwxMiBAQCB4ZnNfYmlvX3N1Ym1pdF9yZWFkKAogCXN0cnVjdCBpb21hcF9yZWFkX2ZvbGlvX2N0eAkqY3R4KQogewogCXN0cnVjdCBiaW8JCQkqYmlvID0gY3R4LSZndDtyZWFkX2N0eDsKJiM0MzsJc3RydWN0IGlvbWFwX2lvZW5kCQkqaW9lbmQ7CiAKIAkvKiBkZWZlciByZWFkIGNvbXBsZXRpb25zIHRvIHRoZSBpb2VuZCB3b3JrcXVldWUgKi8KLQlpb21hcF9pbml0X2lvZW5kKGl0ZXItJmd0O2lub2RlLCBiaW8sIGN0eC0mZ3Q7cmVhZF9jdHhfZmlsZV9vZmZzZXQsIDApOwomIzQzOwlpb2VuZCA9IGlvbWFwX2luaXRfaW9lbmQoaXRlci0mZ3Q7aW5vZGUsIGJpbywgY3R4LSZndDtyZWFkX2N0eF9maWxlX29mZnNldCwKJiM0MzsJCQkwKTsKJiM0MzsJaW9lbmQtJmd0O2lvX3ZpID0gY3R4LSZndDt2aTsKIAlpb21hcF9iaW9fc3VibWl0X3JlYWRfZW5kaW8oaXRlciwgY3R4LCB4ZnNfZW5kX2Jpbyk7CiB9CiAKQEAgLTc3NSwxMSAmIzQzOzgyNiwxMyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGlvbWFwX3JlYWRfb3BzIHhmc19pb21hcF9yZWFkX29wcyA9IHsKIAogc3RhdGljIGlubGluZSBjb25zdCBzdHJ1Y3QgaW9tYXBfcmVhZF9vcHMgKgogeGZzX2dldF9pb21hcF9yZWFkX29wcygKLQljb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZQkqbWFwcGluZykKJiM0MzsJY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2UJKm1hcHBpbmcsCiYjNDM7CWxvZmZfdAkJCQlwb3NpdGlvbikKIHsKIAlzdHJ1Y3QgeGZzX2lub2RlCQkqaXAgPSBYRlNfSShtYXBwaW5nLSZndDtob3N0KTsKIAotCWlmIChiZGV2X2hhc19pbnRlZ3JpdHlfY3N1bSh4ZnNfaW5vZGVfYnVmdGFyZyhpcCktJmd0O2J0X2JkZXYpKQomIzQzOwlpZiAoYmRldl9oYXNfaW50ZWdyaXR5X2NzdW0oeGZzX2lub2RlX2J1ZnRhcmcoaXApLSZndDtidF9iZGV2KSB8fAomIzQzOwkJCXhmc19mc3Zlcml0eV9pc19maWxlX2RhdGEoaXAsIHBvc2l0aW9uKSkKIAkJcmV0dXJuICZhbXA7eGZzX2lvbWFwX3JlYWRfb3BzOwogCXJldHVybiAmYW1wO2lvbWFwX2Jpb19yZWFkX29wczsKIH0KQEAgLTc5MSw3ICYjNDM7ODQ0LDcgQEAgeGZzX3ZtX3JlYWRfZm9saW8oCiB7CiAJc3RydWN0IGlvbWFwX3JlYWRfZm9saW9fY3R4CWN0eCA9IHsgLmN1cl9mb2xpbyA9IGZvbGlvIH07CiAKLQljdHgub3BzID0geGZzX2dldF9pb21hcF9yZWFkX29wcyhmb2xpby0mZ3Q7bWFwcGluZyk7CiYjNDM7CWN0eC5vcHMgPSB4ZnNfZ2V0X2lvbWFwX3JlYWRfb3BzKGZvbGlvLSZndDttYXBwaW5nLCBmb2xpb19wb3MoZm9saW8pKTsKIAlpb21hcF9yZWFkX2ZvbGlvKCZhbXA7eGZzX3JlYWRfaW9tYXBfb3BzLCAmYW1wO2N0eCwgTlVMTCk7CiAJcmV0dXJuIDA7CiB9CkBAIC04MDIsNyAmIzQzOzg1NSw3IEBAIHhmc192bV9yZWFkYWhlYWQoCiB7CiAJc3RydWN0IGlvbWFwX3JlYWRfZm9saW9fY3R4CWN0eCA9IHsgLnJhYyA9IHJhYyB9OwogCi0JY3R4Lm9wcyA9IHhmc19nZXRfaW9tYXBfcmVhZF9vcHMocmFjLSZndDttYXBwaW5nKSwKJiM0MzsJY3R4Lm9wcyA9IHhmc19nZXRfaW9tYXBfcmVhZF9vcHMocmFjLSZndDttYXBwaW5nLCByZWFkYWhlYWRfcG9zKHJhYykpOwogCWlvbWFwX3JlYWRhaGVhZCgmYW1wO3hmc19yZWFkX2lvbWFwX29wcywgJmFtcDtjdHgsIE5VTEwpOwogfQogCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2JtYXBfdXRpbC5jIGIvZnMveGZzL3hmc19ibWFwX3V0aWwuYwppbmRleCAzYjlmMjYyZjhlOTEyOC4uYjM0ZjJmMjdjYzkzYTggMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfYm1hcF91dGlsLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMveGZzL3hmc19ibWFwX3V0aWwuYwpAQCAtMzEsNiAmIzQzOzMxLDcgQEAKICNpbmNsdWRlICYjMzQ7eGZzX3J0Yml0bWFwLmgmIzM0OwogI2luY2x1ZGUgJiMzNDt4ZnNfcnRncm91cC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7eGZzX3pvbmVfYWxsb2MuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2ZzdmVyaXR5LmgmZ3Q7CiAKIC8qIEtlcm5lbCBvbmx5IEJNQVAgcmVsYXRlZCBkZWZpbml0aW9ucyBhbmQgZnVuY3Rpb25zICovCiAKQEAgLTU1Myw2ICYjNDM7NTU0LDEzIEBAIHhmc19jYW5fZnJlZV9lb2ZibG9ja3MoCiAJaWYgKGxhc3RfZnNiICZsdDs9IGVuZF9mc2IpCiAJCXJldHVybiBmYWxzZTsKIAomIzQzOwkvKgomIzQzOwkgKiBOb3RoaW5nIHRvIGNsZWFuIG9uIGZzdmVyaXR5IGlub2RlcyBhcyB0aGV5IGRvbiYjMzk7dCB1c2UgcHJlYWxsb2MgYW5kCiYjNDM7CSAqIHRoZXJlIG5vIGRlbGFsbG9jIGFzIG9ubHkgd3JpdHRlbiBkYXRhIGlzIGZzdmVyaXR5IG1ldGFkYXRhCiYjNDM7CSAqLwomIzQzOwlpZiAoSVNfVkVSSVRZKFZGU19JKGlwKSkpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiAJLyoKIAkgKiBDaGVjayBpZiB0aGVyZSBpcyBhbiBwb3N0LUVPRiBleHRlbnQgdG8gZnJlZS4gIElmIHRoZXJlIGFyZSBhbnkKIAkgKiBkZWxhbGxvYyBibG9ja3MgYXR0YWNoZWQgdG8gdGhlIGlub2RlIChkYXRhIGZvcmsgZGVsYWxsb2MKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfZmlsZS5jIGIvZnMveGZzL3hmc19maWxlLmMKaW5kZXggODQ1YTk3YzliMDYzMGIuLmNiYTE5NGQ2NzhmYzc3IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2ZpbGUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy94ZnMveGZzX2ZpbGUuYwpAQCAtMzcsNiAmIzQzOzM3LDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9mYWR2aXNlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbW91bnQuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9maWxlbG9jay5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9mc3Zlcml0eS5oJmd0OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHhmc19maWxlX3ZtX29wczsKIApAQCAtMjQ1LDYgJiM0MzsyNDYsMjUgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBpb21hcF9kaW9fb3BzIHhmc19kaW9fcmVhZF9ib3VuY2Vfb3BzID0gewogCS5iaW9fc2V0CT0gJmFtcDtpb21hcF9pb2VuZF9iaW9zZXQsCiB9OwogCiYjNDM7U1RBVElDIHNzaXplX3QKJiM0Mzt4ZnNfZmlsZV9idWZmZXJlZF9yZWFkKAomIzQzOwlzdHJ1Y3Qga2lvY2IJCSppb2NiLAomIzQzOwlzdHJ1Y3QgaW92X2l0ZXIJCSp0bykKJiM0Mzt7CiYjNDM7CXN0cnVjdCB4ZnNfaW5vZGUJKmlwID0gWEZTX0koZmlsZV9pbm9kZShpb2NiLSZndDtraV9maWxwKSk7CiYjNDM7CXNzaXplX3QJCQlyZXQ7CiYjNDM7CiYjNDM7CXRyYWNlX3hmc19maWxlX2J1ZmZlcmVkX3JlYWQoaW9jYiwgdG8pOwomIzQzOwomIzQzOwlyZXQgPSB4ZnNfaWxvY2tfaW9jYihpb2NiLCBYRlNfSU9MT0NLX1NIQVJFRCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwlyZXQgPSBnZW5lcmljX2ZpbGVfcmVhZF9pdGVyKGlvY2IsIHRvKTsKJiM0MzsJeGZzX2l1bmxvY2soaXAsIFhGU19JT0xPQ0tfU0hBUkVEKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiBTVEFUSUMgc3NpemVfdAogeGZzX2ZpbGVfZGlvX3JlYWQoCiAJc3RydWN0IGtpb2NiCQkqaW9jYiwKQEAgLTI2NSw2ICYjNDM7Mjg1LDE2IEBAIHhmc19maWxlX2Rpb19yZWFkKAogCXJldCA9IHhmc19pbG9ja19pb2NiKGlvY2IsIFhGU19JT0xPQ0tfU0hBUkVEKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwomIzQzOwkvKgomIzQzOwkgKiBSZS1jaGVjayB2ZXJpdHkgc3RhdHVzIGFmdGVyIGFjcXVpcmluZyBsb2NrLiBUaGlzIHByZXZlbnRzIFRPQ1RPVSBpbgomIzQzOwkgKiB4ZnNfZmlsZV9yZWFkX2l0ZXIoKSB3aGlsZSBmYWxsaW5nIGJhY2sgZnJvbSBESU8gdG8gYnVmZmVyZWQgSS9PIGFzCiYjNDM7CSAqIG5vdyB3ZSBhcmUgaG9sZGluZyBhIGxvY2sKJiM0MzsJICovCiYjNDM7CWlmIChmc3Zlcml0eV9hY3RpdmUoVkZTX0koaXApKSkgewomIzQzOwkJeGZzX2l1bmxvY2soaXAsIFhGU19JT0xPQ0tfU0hBUkVEKTsKJiM0MzsJCWlvY2ItJmd0O2tpX2ZsYWdzICZhbXA7PSB+SU9DQl9ESVJFQ1Q7CiYjNDM7CQlyZXR1cm4geGZzX2ZpbGVfYnVmZmVyZWRfcmVhZChpb2NiLCB0byk7CiYjNDM7CX0KIAlpZiAobWFwcGluZ19zdGFibGVfd3JpdGVzKGlvY2ItJmd0O2tpX2ZpbHAtJmd0O2ZfbWFwcGluZykpIHsKIAkJZGlvX29wcyA9ICZhbXA7eGZzX2Rpb19yZWFkX2JvdW5jZV9vcHM7CiAJCWRpb19mbGFncyB8PSBJT01BUF9ESU9fQk9VTkNFOwpAQCAtMjgxLDcgJiM0MzszMTEsOCBAQCB4ZnNfZmlsZV9kYXhfcmVhZCgKIAlzdHJ1Y3Qga2lvY2IJCSppb2NiLAogCXN0cnVjdCBpb3ZfaXRlcgkJKnRvKQogewotCXN0cnVjdCB4ZnNfaW5vZGUJKmlwID0gWEZTX0koaW9jYi0mZ3Q7a2lfZmlscC0mZ3Q7Zl9tYXBwaW5nLSZndDtob3N0KTsKJiM0MzsJc3RydWN0IGlub2RlCQkqaW5vZGUgPSBpb2NiLSZndDtraV9maWxwLSZndDtmX21hcHBpbmctJmd0O2hvc3Q7CiYjNDM7CXN0cnVjdCB4ZnNfaW5vZGUJKmlwID0gWEZTX0koaW5vZGUpOwogCXNzaXplX3QJCQlyZXQgPSAwOwogCiAJdHJhY2VfeGZzX2ZpbGVfZGF4X3JlYWQoaW9jYiwgdG8pOwpAQCAtMjk5LDI1ICYjNDM7MzMwLDYgQEAgeGZzX2ZpbGVfZGF4X3JlYWQoCiAJcmV0dXJuIHJldDsKIH0KIAotU1RBVElDIHNzaXplX3QKLXhmc19maWxlX2J1ZmZlcmVkX3JlYWQoCi0Jc3RydWN0IGtpb2NiCQkqaW9jYiwKLQlzdHJ1Y3QgaW92X2l0ZXIJCSp0bykKLXsKLQlzdHJ1Y3QgeGZzX2lub2RlCSppcCA9IFhGU19JKGZpbGVfaW5vZGUoaW9jYi0mZ3Q7a2lfZmlscCkpOwotCXNzaXplX3QJCQlyZXQ7Ci0KLQl0cmFjZV94ZnNfZmlsZV9idWZmZXJlZF9yZWFkKGlvY2IsIHRvKTsKLQotCXJldCA9IHhmc19pbG9ja19pb2NiKGlvY2IsIFhGU19JT0xPQ0tfU0hBUkVEKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCXJldCA9IGdlbmVyaWNfZmlsZV9yZWFkX2l0ZXIoaW9jYiwgdG8pOwotCXhmc19pdW5sb2NrKGlwLCBYRlNfSU9MT0NLX1NIQVJFRCk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCiBTVEFUSUMgc3NpemVfdAogeGZzX2ZpbGVfcmVhZF9pdGVyKAogCXN0cnVjdCBraW9jYgkJKmlvY2IsCkBAIC0zMzIsNiAmIzQzOzM0NCwxNCBAQCB4ZnNfZmlsZV9yZWFkX2l0ZXIoCiAJaWYgKHhmc19pc19zaHV0ZG93bihtcCkpCiAJCXJldHVybiAtRUlPOwogCiYjNDM7CS8qCiYjNDM7CSAqIEluIGNhc2UgZnMtdmVyaXR5IGlzIGVuYWJsZWQsIHdlIGFsc28gZmFsbGJhY2sgdG8gdGhlIGJ1ZmZlcmVkIHJlYWQKJiM0MzsJICogZnJvbSB0aGUgZGlyZWN0IHJlYWQgcGF0aC4gVGhlcmVmb3JlLCBJT0NCX0RJUkVDVCBpcyBzZXQgYW5kIG5lZWQgdG8KJiM0MzsJICogYmUgY2xlYXJlZCAoc2VlIGdlbmVyaWNfZmlsZV9yZWFkX2l0ZXIoKSkKJiM0MzsJICovCiYjNDM7CWlmIChmc3Zlcml0eV9hY3RpdmUoaW5vZGUpKQomIzQzOwkJaW9jYi0mZ3Q7a2lfZmxhZ3MgJmFtcDs9IH5JT0NCX0RJUkVDVDsKJiM0MzsKIAlpZiAoSVNfREFYKGlub2RlKSkKIAkJcmV0ID0geGZzX2ZpbGVfZGF4X3JlYWQoaW9jYiwgdG8pOwogCWVsc2UgaWYgKGlvY2ItJmd0O2tpX2ZsYWdzICZhbXA7IElPQ0JfRElSRUNUKQpAQCAtMTcwMCwxMSAmIzQzOzE3MjAsMTggQEAgeGZzX2ZpbGVfb3BlbigKIAlzdHJ1Y3QgaW5vZGUJKmlub2RlLAogCXN0cnVjdCBmaWxlCSpmaWxlKQogewomIzQzOwlpbnQJCWVycm9yOwomIzQzOwogCWlmICh4ZnNfaXNfc2h1dGRvd24oWEZTX00oaW5vZGUtJmd0O2lfc2IpKSkKIAkJcmV0dXJuIC1FSU87CiAJZmlsZS0mZ3Q7Zl9tb2RlIHw9IEZNT0RFX05PV0FJVCB8IEZNT0RFX0NBTl9PRElSRUNUOwogCWlmICh4ZnNfZ2V0X2F0b21pY193cml0ZV9taW4oWEZTX0koaW5vZGUpKSAmZ3Q7IDApCiAJCWZpbGUtJmd0O2ZfbW9kZSB8PSBGTU9ERV9DQU5fQVRPTUlDX1dSSVRFOwomIzQzOwomIzQzOwllcnJvciA9IGZzdmVyaXR5X2ZpbGVfb3Blbihpbm9kZSwgZmlsZSk7CiYjNDM7CWlmIChlcnJvcikKJiM0MzsJCXJldHVybiBlcnJvcjsKJiM0MzsKIAlyZXR1cm4gZ2VuZXJpY19maWxlX29wZW4oaW5vZGUsIGZpbGUpOwogfQogCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2ZzdmVyaXR5LmMgYi9mcy94ZnMveGZzX2ZzdmVyaXR5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAuLjk3MzI4MTFhMTQ0NGU2Ci0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvZnMveGZzL3hmc19mc3Zlcml0eS5jCkBAIC0wLDAgJiM0MzsxLDQ3MyBAQAomIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovCiYjNDM7LyoKJiM0MzsgKiBDb3B5cmlnaHQgKEMpIDIwMjYgUmVkIEhhdCwgSW5jLgomIzQzOyAqLwomIzQzOyNpbmNsdWRlICYjMzQ7eGZzX3BsYXRmb3JtLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7eGZzX2Zvcm1hdC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O3hmc19zaGFyZWQuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDt4ZnNfdHJhbnNfcmVzdi5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O3hmc19tb3VudC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O3hmc19kYV9mb3JtYXQuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDt4ZnNfZGFfYnRyZWUuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDt4ZnNfaW5vZGUuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDt4ZnNfbG9nX2Zvcm1hdC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O3hmc19ibWFwX3V0aWwuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDt4ZnNfdHJhbnMuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDt4ZnNfdHJhY2UuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDt4ZnNfcXVvdGEuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDt4ZnNfZnN2ZXJpdHkuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDt4ZnNfaW9tYXAuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDt4ZnNfZXJyb3IuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDt4ZnNfaGVhbHRoLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7eGZzX2JtYXAuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDt4ZnNfYm1hcF91dGlsLmgmIzM0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9mc3Zlcml0eS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9pb21hcC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9wYWdlbWFwLmgmZ3Q7CiYjNDM7CiYjNDM7bG9mZl90CiYjNDM7eGZzX2ZzdmVyaXR5X21ldGFkYXRhX29mZnNldCgKJiM0MzsJY29uc3Qgc3RydWN0IHhmc19pbm9kZQkqaXApCiYjNDM7ewomIzQzOwlyZXR1cm4gcm91bmRfdXAoaV9zaXplX3JlYWQoVkZTX0lDKGlwKSksIFhGU19GU1ZFUklUWV9TVEFSVF9BTElHTik7CiYjNDM7fQomIzQzOwomIzQzO2Jvb2wKJiM0Mzt4ZnNfZnN2ZXJpdHlfaXNfZmlsZV9kYXRhKAomIzQzOwljb25zdCBzdHJ1Y3QgeGZzX2lub2RlCSppcCwKJiM0MzsJbG9mZl90CQkJb2Zmc2V0KQomIzQzO3sKJiM0MzsJcmV0dXJuIGZzdmVyaXR5X2FjdGl2ZShWRlNfSUMoaXApKSAmYW1wOyZhbXA7CiYjNDM7CQkJb2Zmc2V0ICZsdDsgeGZzX2ZzdmVyaXR5X21ldGFkYXRhX29mZnNldChpcCk7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogUmV0cmlldmUgdGhlIHZlcml0eSBkZXNjcmlwdG9yLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQKJiM0Mzt4ZnNfZnN2ZXJpdHlfZ2V0X2Rlc2NyaXB0b3IoCiYjNDM7CXN0cnVjdCBpbm9kZQkJKmlub2RlLAomIzQzOwl2b2lkCQkJKmJ1ZiwKJiM0MzsJc2l6ZV90CQkJYnVmX3NpemUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeGZzX2lub2RlCSppcCA9IFhGU19JKGlub2RlKTsKJiM0MzsJc3RydWN0IHhmc19tb3VudAkqbXAgPSBpcC0mZ3Q7aV9tb3VudDsKJiM0MzsJX19iZTMyCQkJZF9kZXNjX3NpemU7CiYjNDM7CXUzMgkJCWRlc2Nfc2l6ZTsKJiM0MzsJdTY0CQkJZGVzY19zaXplX3BvczsKJiM0MzsJaW50CQkJZXJyb3I7CiYjNDM7CXU2NAkJCWRlc2NfcG9zOwomIzQzOwlzdHJ1Y3QgeGZzX2JtYnRfaXJlYwlyZWM7CiYjNDM7CWludAkJCWlzX2VtcHR5OwomIzQzOwl1aW50MzJfdAkJYmxvY2tzaXplID0gaV9ibG9ja3NpemUoVkZTX0koaXApKTsKJiM0MzsJeGZzX2ZpbGVvZmZfdAkJbGFzdF9ibG9ja19vZmZzZXQ7CiYjNDM7CiYjNDM7CUFTU0VSVChpbm9kZS0mZ3Q7aV9mbGFncyAmYW1wOyBTX1ZFUklUWSk7CiYjNDM7CXhmc19pbG9jayhpcCwgWEZTX0lMT0NLX1NIQVJFRCk7CiYjNDM7CWVycm9yID0geGZzX2JtYXBfbGFzdF9leHRlbnQoTlVMTCwgaXAsIFhGU19EQVRBX0ZPUkssICZhbXA7cmVjLCAmYW1wO2lzX2VtcHR5KTsKJiM0MzsJeGZzX2l1bmxvY2soaXAsIFhGU19JTE9DS19TSEFSRUQpOwomIzQzOwlpZiAoZXJyb3IpCiYjNDM7CQlyZXR1cm4gZXJyb3I7CiYjNDM7CiYjNDM7CWlmIChpc19lbXB0eSkKJiM0MzsJCXJldHVybiAtRU5PREFUQTsKJiM0MzsKJiM0MzsJbGFzdF9ibG9ja19vZmZzZXQgPQomIzQzOwkJWEZTX0ZTQl9UT19CKG1wLCByZWMuYnJfc3RhcnRvZmYgJiM0MzsgcmVjLmJyX2Jsb2NrY291bnQpOwomIzQzOwlpZiAobGFzdF9ibG9ja19vZmZzZXQgJmx0Oz0geGZzX2ZzdmVyaXR5X21ldGFkYXRhX29mZnNldChpcCkpCiYjNDM7CQlyZXR1cm4gLUVOT0RBVEE7CiYjNDM7CiYjNDM7CWRlc2Nfc2l6ZV9wb3MgPSBsYXN0X2Jsb2NrX29mZnNldCAtIHNpemVvZihfX2JlMzIpOwomIzQzOwllcnJvciA9IGZzdmVyaXR5X3BhZ2VjYWNoZV9yZWFkKGlub2RlLCAoY2hhciAqKSZhbXA7ZF9kZXNjX3NpemUsCiYjNDM7CQkJc2l6ZW9mKGRfZGVzY19zaXplKSwgZGVzY19zaXplX3Bvcyk7CiYjNDM7CWlmIChlcnJvcikKJiM0MzsJCXJldHVybiBlcnJvcjsKJiM0MzsKJiM0MzsJZGVzY19zaXplID0gYmUzMl90b19jcHUoZF9kZXNjX3NpemUpOwomIzQzOwlpZiAoWEZTX0lTX0NPUlJVUFQobXAsIGRlc2Nfc2l6ZSAmZ3Q7IEZTX1ZFUklUWV9NQVhfREVTQ1JJUFRPUl9TSVpFKSkgewomIzQzOwkJeGZzX2lub2RlX21hcmtfc2ljayhYRlNfSShpbm9kZSksIFhGU19TSUNLX0lOT19GU1ZFUklUWSk7CiYjNDM7CQlyZXR1cm4gLUVSQU5HRTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoWEZTX0lTX0NPUlJVUFQobXAsIGRlc2Nfc2l6ZSAmZ3Q7IGRlc2Nfc2l6ZV9wb3MpKSB7CiYjNDM7CQl4ZnNfaW5vZGVfbWFya19zaWNrKFhGU19JKGlub2RlKSwgWEZTX1NJQ0tfSU5PX0ZTVkVSSVRZKTsKJiM0MzsJCXJldHVybiAtRVJBTkdFOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICghYnVmX3NpemUpCiYjNDM7CQlyZXR1cm4gZGVzY19zaXplOwomIzQzOwomIzQzOwlpZiAoWEZTX0lTX0NPUlJVUFQobXAsIGRlc2Nfc2l6ZSAmZ3Q7IGJ1Zl9zaXplKSkgewomIzQzOwkJeGZzX2lub2RlX21hcmtfc2ljayhYRlNfSShpbm9kZSksIFhGU19TSUNLX0lOT19GU1ZFUklUWSk7CiYjNDM7CQlyZXR1cm4gLUVSQU5HRTsKJiM0MzsJfQomIzQzOwomIzQzOwlkZXNjX3BvcyA9IHJvdW5kX2Rvd24oZGVzY19zaXplX3BvcyAtIGRlc2Nfc2l6ZSwgYmxvY2tzaXplKTsKJiM0MzsJaWYgKGRlc2NfcG9zICZsdDsgeGZzX2ZzdmVyaXR5X21ldGFkYXRhX29mZnNldChpcCkpIHsKJiM0MzsJCXhmc19pbm9kZV9tYXJrX3NpY2soWEZTX0koaW5vZGUpLCBYRlNfU0lDS19JTk9fRlNWRVJJVFkpOwomIzQzOwkJcmV0dXJuIC1FUkFOR0U7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZXJyb3IgPSBmc3Zlcml0eV9wYWdlY2FjaGVfcmVhZChpbm9kZSwgYnVmLCBkZXNjX3NpemUsIGRlc2NfcG9zKTsKJiM0MzsJaWYgKGVycm9yKQomIzQzOwkJcmV0dXJuIGVycm9yOwomIzQzOwomIzQzOwlyZXR1cm4gZGVzY19zaXplOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50CiYjNDM7eGZzX2ZzdmVyaXR5X3dyaXRlX2Rlc2NyaXB0b3IoCiYjNDM7CXN0cnVjdCBmaWxlCQkqZmlsZSwKJiM0MzsJY29uc3Qgdm9pZAkJKmRlc2MsCiYjNDM7CXUzMgkJCWRlc2Nfc2l6ZSwKJiM0MzsJdTY0CQkJbWVya2xlX3RyZWVfc2l6ZSkKJiM0Mzt7CiYjNDM7CWludAkJCWVycm9yOwomIzQzOwlzdHJ1Y3QgaW5vZGUJCSppbm9kZSA9IGZpbGVfaW5vZGUoZmlsZSk7CiYjNDM7CXN0cnVjdCB4ZnNfaW5vZGUJKmlwID0gWEZTX0koaW5vZGUpOwomIzQzOwl1bnNpZ25lZCBpbnQJCWJsa3NpemUgPSBpcC0mZ3Q7aV9tb3VudC0mZ3Q7bV9zYi5zYl9ibG9ja3NpemU7CiYjNDM7CXU2NAkJCXRyZWVfbGFzdF9ibG9jayA9CiYjNDM7CQkJeGZzX2ZzdmVyaXR5X21ldGFkYXRhX29mZnNldChpcCkgJiM0MzsgbWVya2xlX3RyZWVfc2l6ZTsKJiM0MzsJdTY0CQkJZGVzY19wb3MgPQomIzQzOwkJCXJvdW5kX3VwKHRyZWVfbGFzdF9ibG9jaywgWEZTX0ZTVkVSSVRZX1NUQVJUX0FMSUdOKTsKJiM0MzsJdTY0CQkJZGVzY19lbmQgPSBkZXNjX3BvcyAmIzQzOyBkZXNjX3NpemU7CiYjNDM7CV9fYmUzMgkJCWRlc2Nfc2l6ZV9kaXNrID0gY3B1X3RvX2JlMzIoZGVzY19zaXplKTsKJiM0MzsJdTY0CQkJZGVzY19zaXplX3BvcyA9CiYjNDM7CQkJcm91bmRfdXAoZGVzY19lbmQgJiM0Mzsgc2l6ZW9mKGRlc2Nfc2l6ZV9kaXNrKSwgYmxrc2l6ZSkgLQomIzQzOwkJCXNpemVvZihkZXNjX3NpemVfZGlzayk7CiYjNDM7CiYjNDM7CWVycm9yID0gaW9tYXBfZnN2ZXJpdHlfd3JpdGUoZmlsZSwgZGVzY19zaXplX3Bvcywgc2l6ZW9mKF9fYmUzMiksCiYjNDM7CQkJKGNvbnN0IHZvaWQgKikmYW1wO2Rlc2Nfc2l6ZV9kaXNrLAomIzQzOwkJCSZhbXA7eGZzX2J1ZmZlcmVkX3dyaXRlX2lvbWFwX29wcywKJiM0MzsJCQkmYW1wO3hmc19pb21hcF93cml0ZV9vcHMpOwomIzQzOwlpZiAoZXJyb3IpCiYjNDM7CQlyZXR1cm4gZXJyb3I7CiYjNDM7CiYjNDM7CXJldHVybiBpb21hcF9mc3Zlcml0eV93cml0ZShmaWxlLCBkZXNjX3BvcywgZGVzY19zaXplLCBkZXNjLAomIzQzOwkJCSZhbXA7eGZzX2J1ZmZlcmVkX3dyaXRlX2lvbWFwX29wcywKJiM0MzsJCQkmYW1wO3hmc19pb21hcF93cml0ZV9vcHMpOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIFRyeSB0byByZW1vdmUgYWxsIHRoZSBmc3Zlcml0eSBtZXRhZGF0YSBhZnRlciBhIGZhaWxlZCBlbmFibGVtZW50LgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQKJiM0Mzt4ZnNfZnN2ZXJpdHlfZGVsZXRlX21ldGFkYXRhKAomIzQzOwlzdHJ1Y3QgeGZzX2lub2RlCSppcCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB4ZnNfdHJhbnMJKnRwOwomIzQzOwlzdHJ1Y3QgeGZzX21vdW50CSptcCA9IGlwLSZndDtpX21vdW50OwomIzQzOwlpbnQJCQllcnJvcjsKJiM0MzsKJiM0MzsJZXJyb3IgPSB4ZnNfdHJhbnNfYWxsb2MobXAsICZhbXA7TV9SRVMobXApLSZndDt0cl9pdHJ1bmNhdGUsIDAsIDAsIDAsICZhbXA7dHApOwomIzQzOwlpZiAoZXJyb3IpCiYjNDM7CQlyZXR1cm4gZXJyb3I7CiYjNDM7CiYjNDM7CXhmc19pbG9jayhpcCwgWEZTX0lMT0NLX0VYQ0wpOwomIzQzOwl4ZnNfdHJhbnNfaWpvaW4odHAsIGlwLCAwKTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogV2UgcmVtb3ZpbmcgcG9zdCBFT0YgZGF0YSwgbm8gbmVlZCB0byB1cGRhdGUgaV9zaXplIGFzIGZzdmVyaXR5CiYjNDM7CSAqIGRpZG4mIzM5O3QgbW92ZSBpX3NpemUgaW4gdGhlIGZpcnN0IHBsYWNlCiYjNDM7CSAqLwomIzQzOwllcnJvciA9IHhmc19pdHJ1bmNhdGVfZXh0ZW50cygmYW1wO3RwLCBpcCwgWEZTX0RBVEFfRk9SSywgWEZTX0lTSVpFKGlwKSk7CiYjNDM7CWlmIChlcnJvcikKJiM0MzsJCWdvdG8gZXJyX2NhbmNlbDsKJiM0MzsKJiM0MzsJZXJyb3IgPSB4ZnNfdHJhbnNfY29tbWl0KHRwKTsKJiM0MzsJaWYgKGVycm9yKQomIzQzOwkJZ290byBvdXRfdW5sb2NrOwomIzQzO291dF91bmxvY2s6CiYjNDM7CXhmc19pdW5sb2NrKGlwLCBYRlNfSUxPQ0tfRVhDTCk7CiYjNDM7CXJldHVybiBlcnJvcjsKJiM0MzsKJiM0MztlcnJfY2FuY2VsOgomIzQzOwl4ZnNfdHJhbnNfY2FuY2VsKHRwKTsKJiM0MzsJeGZzX2l1bmxvY2soaXAsIFhGU19JTE9DS19FWENMKTsKJiM0MzsJcmV0dXJuIGVycm9yOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50CiYjNDM7eGZzX2ZzdmVyaXR5X2NhbmNlbF91bndyaXR0ZW4oCiYjNDM7CXN0cnVjdCB4ZnNfaW5vZGUJKmlwLAomIzQzOwlsb2ZmX3QJCQlzdGFydCwKJiM0MzsJbG9mZl90CQkJZW5kKQomIzQzO3sKJiM0MzsJc3RydWN0IHhmc19tb3VudAkqbXAgPSBpcC0mZ3Q7aV9tb3VudDsKJiM0MzsJc3RydWN0IHhmc190cmFucwkqdHA7CiYjNDM7CXhmc19maWxlb2ZmX3QJCW9mZnNldF9mc2IgPSBYRlNfQl9UT19GU0IobXAsIHN0YXJ0KTsKJiM0MzsJeGZzX2ZpbGVvZmZfdAkJZW5kX2ZzYiA9IFhGU19CX1RPX0ZTQihtcCwgZW5kKTsKJiM0MzsJc3RydWN0IHhmc19ibWJ0X2lyZWMJaW1hcDsKJiM0MzsJaW50CQkJbmltYXBzOwomIzQzOwlpbnQJCQllcnJvciA9IDA7CiYjNDM7CWludAkJCWRvbmU7CiYjNDM7CiYjNDM7CiYjNDM7CXdoaWxlIChvZmZzZXRfZnNiICZsdDsgZW5kX2ZzYikgewomIzQzOwkJbmltYXBzID0gMTsKJiM0MzsKJiM0MzsJCWVycm9yID0geGZzX3RyYW5zX2FsbG9jKG1wLCAmYW1wO01fUkVTKG1wKS0mZ3Q7dHJfd3JpdGUsIDAsIDAsCiYjNDM7CQkJCTAsICZhbXA7dHApOwomIzQzOwkJaWYgKGVycm9yKQomIzQzOwkJCXJldHVybiBlcnJvcjsKJiM0MzsKJiM0MzsJCXhmc19pbG9jayhpcCwgWEZTX0lMT0NLX0VYQ0wpOwomIzQzOwkJZXJyb3IgPSB4ZnNfYm1hcGlfcmVhZChpcCwgb2Zmc2V0X2ZzYiwgZW5kX2ZzYiAtIG9mZnNldF9mc2IsCiYjNDM7CQkJCSZhbXA7aW1hcCwgJmFtcDtuaW1hcHMsIDApOwomIzQzOwkJaWYgKGVycm9yKQomIzQzOwkJCWdvdG8gb3V0X2NhbmNlbDsKJiM0MzsKJiM0MzsJCWlmIChuaW1hcHMgPT0gMCkKJiM0MzsJCQlnb3RvIG91dF9jYW5jZWw7CiYjNDM7CiYjNDM7CQlpZiAoaW1hcC5icl9zdGF0ZSA9PSBYRlNfRVhUX1VOV1JJVFRFTikgewomIzQzOwkJCXhmc190cmFuc19pam9pbih0cCwgaXAsIFhGU19JTE9DS19FWENMKTsKJiM0MzsKJiM0MzsJCQllcnJvciA9IHhmc19idW5tYXBpKHRwLCBpcCwgaW1hcC5icl9zdGFydG9mZiwKJiM0MzsJCQkJCWltYXAuYnJfYmxvY2tjb3VudCwgMCwgMSwgJmFtcDtkb25lKTsKJiM0MzsJCQlpZiAoZXJyb3IpCiYjNDM7CQkJCWdvdG8gb3V0X2NhbmNlbDsKJiM0MzsKJiM0MzsJCQllcnJvciA9IHhmc190cmFuc19jb21taXQodHApOwomIzQzOwkJCWlmIChlcnJvcikKJiM0MzsJCQkJcmV0dXJuIGVycm9yOwomIzQzOwkJfSBlbHNlIHsKJiM0MzsJCQl4ZnNfdHJhbnNfY2FuY2VsKHRwKTsKJiM0MzsJCQl4ZnNfaXVubG9jayhpcCwgWEZTX0lMT0NLX0VYQ0wpOwomIzQzOwkJfQomIzQzOwomIzQzOwkJb2Zmc2V0X2ZzYiA9IGltYXAuYnJfc3RhcnRvZmYgJiM0MzsgaW1hcC5icl9ibG9ja2NvdW50OwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBlcnJvcjsKJiM0MztvdXRfY2FuY2VsOgomIzQzOwl4ZnNfdHJhbnNfY2FuY2VsKHRwKTsKJiM0MzsJeGZzX2l1bmxvY2soaXAsIFhGU19JTE9DS19FWENMKTsKJiM0MzsJcmV0dXJuIGVycm9yOwomIzQzO30KJiM0MzsKJiM0MzsKJiM0MzsvKgomIzQzOyAqIFByZXBhcmUgdG8gZW5hYmxlIGZzdmVyaXR5IGJ5IGNsZWFyaW5nIG9sZCBtZXRhZGF0YS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50CiYjNDM7eGZzX2ZzdmVyaXR5X2JlZ2luX2VuYWJsZSgKJiM0MzsJc3RydWN0IGZpbGUJCSpmaWxwKQomIzQzO3sKJiM0MzsJc3RydWN0IGlub2RlCQkqaW5vZGUgPSBmaWxlX2lub2RlKGZpbHApOwomIzQzOwlzdHJ1Y3QgeGZzX2lub2RlCSppcCA9IFhGU19JKGlub2RlKTsKJiM0MzsJaW50CQkJZXJyb3I7CiYjNDM7CiYjNDM7CXhmc19hc3NlcnRfaWxvY2tlZChpcCwgWEZTX0lPTE9DS19FWENMKTsKJiM0MzsKJiM0MzsJaWYgKElTX0RBWChpbm9kZSkgfHwgaXAtJmd0O2lfZGlmbGFnczIgJmFtcDsgWEZTX0RJRkxBRzJfREFYKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CWlmIChpbm9kZS0mZ3Q7aV9zaXplICZndDsgWEZTX0ZTVkVSSVRZX0xBUkdFU1RfRklMRSkKJiM0MzsJCXJldHVybiAtRUZCSUc7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIEZsdXNoIHBhZ2VjYWNoZSBiZWZvcmUgYnVpbGRpbmcgTWVya2xlIHRyZWUuIElub2RlIGlzIGxvY2tlZCBhbmQgbm8KJiM0MzsJICogZnVydGhlciB3cml0ZXMgd2lsbCBoYXBwZW4gdG8gdGhlIGZpbGUgZXhjZXB0IGZzdmVyaXR5IG1ldGFkYXRhCiYjNDM7CSAqLwomIzQzOwllcnJvciA9IGZpbGVtYXBfd3JpdGVfYW5kX3dhaXQoaW5vZGUtJmd0O2lfbWFwcGluZyk7CiYjNDM7CWlmIChlcnJvcikKJiM0MzsJCXJldHVybiBlcnJvcjsKJiM0MzsKJiM0MzsJaWYgKHhmc19pZmxhZ3NfdGVzdF9hbmRfc2V0KGlwLCBYRlNfVkVSSVRZX0NPTlNUUlVDVElPTikpCiYjNDM7CQlyZXR1cm4gLUVCVVNZOwomIzQzOwomIzQzOwllcnJvciA9IHhmc19xbV9kcWF0dGFjaChpcCk7CiYjNDM7CWlmIChlcnJvcikKJiM0MzsJCWdvdG8gb3V0X2NsZWFyOwomIzQzOwomIzQzOwllcnJvciA9IHhmc19mc3Zlcml0eV9kZWxldGVfbWV0YWRhdGEoaXApOwomIzQzOwlpZiAoZXJyb3IpCiYjNDM7CQlnb3RvIG91dF9jbGVhcjsKJiM0MzsJcmV0dXJuIGVycm9yOwomIzQzO291dF9jbGVhcjoKJiM0MzsJeGZzX2lmbGFnc19jbGVhcihpcCwgWEZTX1ZFUklUWV9DT05TVFJVQ1RJT04pOwomIzQzOwlyZXR1cm4gZXJyb3I7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogQ29tcGxldGUgKG9yIGZhaWwpIHRoZSBwcm9jZXNzIG9mIGVuYWJsaW5nIGZzdmVyaXR5LgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQKJiM0Mzt4ZnNfZnN2ZXJpdHlfZW5kX2VuYWJsZSgKJiM0MzsJc3RydWN0IGZpbGUJCSpmaWxlLAomIzQzOwljb25zdCB2b2lkCQkqZGVzYywKJiM0MzsJc2l6ZV90CQkJZGVzY19zaXplLAomIzQzOwl1NjQJCQltZXJrbGVfdHJlZV9zaXplKQomIzQzO3sKJiM0MzsJc3RydWN0IGlub2RlCQkqaW5vZGUgPSBmaWxlX2lub2RlKGZpbGUpOwomIzQzOwlzdHJ1Y3QgeGZzX2lub2RlCSppcCA9IFhGU19JKGlub2RlKTsKJiM0MzsJc3RydWN0IHhmc19tb3VudAkqbXAgPSBpcC0mZ3Q7aV9tb3VudDsKJiM0MzsJc3RydWN0IHhmc190cmFucwkqdHA7CiYjNDM7CWludAkJCWVycm9yID0gMDsKJiM0MzsJbG9mZl90CQkJcmFuZ2Vfc3RhcnQgPSB4ZnNfZnN2ZXJpdHlfbWV0YWRhdGFfb2Zmc2V0KGlwKTsKJiM0MzsKJiM0MzsJeGZzX2Fzc2VydF9pbG9ja2VkKGlwLCBYRlNfSU9MT0NLX0VYQ0wpOwomIzQzOwomIzQzOwkvKiBmcy12ZXJpdHkgZmFpbGVkLCBqdXN0IGNsZWFudXAgKi8KJiM0MzsJaWYgKGRlc2MgPT0gTlVMTCkgewomIzQzOwkJZXJyb3IgPSB4ZnNfZnN2ZXJpdHlfZGVsZXRlX21ldGFkYXRhKGlwKTsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CiYjNDM7CWVycm9yID0geGZzX2ZzdmVyaXR5X3dyaXRlX2Rlc2NyaXB0b3IoZmlsZSwgZGVzYywgZGVzY19zaXplLAomIzQzOwkJCW1lcmtsZV90cmVlX3NpemUpOwomIzQzOwlpZiAoZXJyb3IpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogV2FpdCBmb3IgTWVya2xlIHRyZWUgZ2V0IHdyaXR0ZW4gdG8gZGlzayBiZWZvcmUgc2V0dGluZyBvbi1kaXNrIGlub2RlCiYjNDM7CSAqIGZsYWcgYW5kIGNsZWFyaW5nIFhGU19WRVJJVFlfQ09OU1RSVUNUSU9OCiYjNDM7CSAqLwomIzQzOwllcnJvciA9IGZpbGVtYXBfd3JpdGVfYW5kX3dhaXRfcmFuZ2UoaW5vZGUtJmd0O2lfbWFwcGluZywgcmFuZ2Vfc3RhcnQsCiYjNDM7CQkJTExPTkdfTUFYKTsKJiM0MzsJaWYgKGVycm9yKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFJlbW92ZSB1bndyaXR0ZW4gZXh0ZW50cyBsZWZ0IGJ5IENPVyBwcmVhbGxvY2F0aW9ucyBhbmQgd3JpdGUKJiM0MzsJICogcHJlYWxsb2NhdGlvbiBpbiB0aGUgbWVya2xlIHRyZWUgaG9sZXMgYW5kIHBhc3QgZGVzY3JpcHRvcgomIzQzOwkgKi8KJiM0MzsJZXJyb3IgPSB4ZnNfZnN2ZXJpdHlfY2FuY2VsX3Vud3JpdHRlbihpcCwgcmFuZ2Vfc3RhcnQsIExMT05HX01BWCk7CiYjNDM7CWlmIChlcnJvcikKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBQcm9hY3RpdmVseSBkcm9wIGFueSBkZWxheWVkIGFsbG9jYXRpb25zIGluIENPVyBmb3JrLCB0aGUgZnN2ZXJpdHkKJiM0MzsJICogZmlsZXMgYXJlIHJlYWQtb25seQomIzQzOwkgKi8KJiM0MzsJaWYgKHhmc19pc19jb3dfaW5vZGUoaXApKSB7CiYjNDM7CQlpZiAoIWlwLSZndDtpX2Nvd2ZwKQomIzQzOwkJCXhmc19pZm9ya19pbml0X2NvdyhpcCk7CiYjNDM7CQl4ZnNfYm1hcF9wdW5jaF9kZWxhbGxvY19yYW5nZShpcCwgWEZTX0NPV19GT1JLLCAwLCBMTE9OR19NQVgsCiYjNDM7CQkJCU5VTEwpOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFNldCBmc3Zlcml0eSBpbm9kZSBmbGFnCiYjNDM7CSAqLwomIzQzOwllcnJvciA9IHhmc190cmFuc19hbGxvY19pbm9kZShpcCwgJmFtcDtNX1JFUyhtcCktJmd0O3RyX2ljaGFuZ2UsCiYjNDM7CQkJMCwgMCwgZmFsc2UsICZhbXA7dHApOwomIzQzOwlpZiAoZXJyb3IpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogRW5zdXJlIHRoYXQgd2UmIzM5O3ZlIHBlcnNpc3RlZCB0aGUgdmVyaXR5IGluZm9ybWF0aW9uIGJlZm9yZSB3ZSBlbmFibGUKJiM0MzsJICogaXQgb24gdGhlIGlub2RlIGFuZCB0ZWxsIHRoZSBjYWxsZXIgd2UgaGF2ZSBzZWFsZWQgdGhlIGlub2RlLgomIzQzOwkgKi8KJiM0MzsJaXAtJmd0O2lfZGlmbGFnczIgfD0gWEZTX0RJRkxBRzJfVkVSSVRZOwomIzQzOwomIzQzOwl4ZnNfdHJhbnNfbG9nX2lub2RlKHRwLCBpcCwgWEZTX0lMT0dfQ09SRSk7CiYjNDM7CXhmc190cmFuc19zZXRfc3luYyh0cCk7CiYjNDM7CiYjNDM7CWVycm9yID0geGZzX3RyYW5zX2NvbW1pdCh0cCk7CiYjNDM7CXhmc19pdW5sb2NrKGlwLCBYRlNfSUxPQ0tfRVhDTCk7CiYjNDM7CiYjNDM7CWlmICghZXJyb3IpCiYjNDM7CQlpbm9kZS0mZ3Q7aV9mbGFncyB8PSBTX1ZFUklUWTsKJiM0MzsKJiM0MztvdXQ6CiYjNDM7CWlmIChlcnJvcikgewomIzQzOwkJaW50CWVycm9yMjsKJiM0MzsKJiM0MzsJCWVycm9yMiA9IHhmc19mc3Zlcml0eV9kZWxldGVfbWV0YWRhdGEoaXApOwomIzQzOwkJaWYgKGVycm9yMikKJiM0MzsJCQl4ZnNfYWxlcnQoaXAtJmd0O2lfbW91bnQsCiYjNDM7JiMzNDtpbm8gMHglbGx4IGZhaWxlZCB0byBjbGVhbiB1cCBuZXcgZnN2ZXJpdHkgbWV0YWRhdGEsIGVyciAlZCYjMzQ7LAomIzQzOwkJCQkJSV9JTk8oaXApLCBlcnJvcjIpOwomIzQzOwl9CiYjNDM7CiYjNDM7CXhmc19pZmxhZ3NfY2xlYXIoaXAsIFhGU19WRVJJVFlfQ09OU1RSVUNUSU9OKTsKJiM0MzsJcmV0dXJuIGVycm9yOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIFJldHJpZXZlIGEgbWVya2xlIHRyZWUgYmxvY2suCiYjNDM7ICovCiYjNDM7c3RhdGljIHN0cnVjdCBwYWdlICoKJiM0Mzt4ZnNfZnN2ZXJpdHlfcmVhZF9tZXJrbGUoCiYjNDM7CXN0cnVjdCBpbm9kZQkJKmlub2RlLAomIzQzOwlwZ29mZl90CQkJaW5kZXgpCiYjNDM7ewomIzQzOwlpbmRleCAmIzQzOz0geGZzX2ZzdmVyaXR5X21ldGFkYXRhX29mZnNldChYRlNfSShpbm9kZSkpICZndDsmZ3Q7IFBBR0VfU0hJRlQ7CiYjNDM7CiYjNDM7CXJldHVybiBnZW5lcmljX3JlYWRfbWVya2xlX3RyZWVfcGFnZShpbm9kZSwgaW5kZXgpOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIFJldHJpZXZlIGEgbWVya2xlIHRyZWUgYmxvY2suCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQKJiM0Mzt4ZnNfZnN2ZXJpdHlfcmVhZGFoZWFkX21lcmtsZV90cmVlKAomIzQzOwlzdHJ1Y3QgaW5vZGUJCSppbm9kZSwKJiM0MzsJcGdvZmZfdAkJCWluZGV4LAomIzQzOwl1bnNpZ25lZCBsb25nCQlucl9wYWdlcykKJiM0Mzt7CiYjNDM7CWluZGV4ICYjNDM7PSB4ZnNfZnN2ZXJpdHlfbWV0YWRhdGFfb2Zmc2V0KFhGU19JKGlub2RlKSkgJmd0OyZndDsgUEFHRV9TSElGVDsKJiM0MzsKJiM0MzsJZ2VuZXJpY19yZWFkYWhlYWRfbWVya2xlX3RyZWUoaW5vZGUsIGluZGV4LCBucl9wYWdlcyk7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogV3JpdGUgYSBtZXJrbGUgdHJlZSBibG9jay4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50CiYjNDM7eGZzX2ZzdmVyaXR5X3dyaXRlX21lcmtsZSgKJiM0MzsJc3RydWN0IGZpbGUJCSpmaWxlLAomIzQzOwljb25zdCB2b2lkCQkqYnVmLAomIzQzOwl1NjQJCQlwb3MsCiYjNDM7CXVuc2lnbmVkIGludAkJc2l6ZSwKJiM0MzsJY29uc3QgdTgJCSp6ZXJvX2RpZ2VzdCwKJiM0MzsJdW5zaWduZWQgaW50CQlkaWdlc3Rfc2l6ZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpbm9kZQkJKmlub2RlID0gZmlsZV9pbm9kZShmaWxlKTsKJiM0MzsJc3RydWN0IHhmc19pbm9kZQkqaXAgPSBYRlNfSShpbm9kZSk7CiYjNDM7CWxvZmZfdAkJCXBvc2l0aW9uID0gcG9zICYjNDM7CiYjNDM7CQl4ZnNfZnN2ZXJpdHlfbWV0YWRhdGFfb2Zmc2V0KGlwKTsKJiM0MzsKJiM0MzsJaWYgKHBvc2l0aW9uICYjNDM7IHNpemUgJmd0OyBpbm9kZS0mZ3Q7aV9zYi0mZ3Q7c19tYXhieXRlcykKJiM0MzsJCXJldHVybiAtRUZCSUc7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIElmIHRoaXMgaXMgYSBibG9jayBmdWxsIG9mIGhhc2hlcyBvZiB6ZXJvZWQgYmxvY2tzLCBkb24mIzM5O3QgYm90aGVyCiYjNDM7CSAqIHN0b3JpbmcgdGhlIGJsb2NrLiBXZSBjYW4gc3ludGhlc2l6ZSB0aGVtIGxhdGVyLgomIzQzOwkgKgomIzQzOwkgKiBIb3dldmVyLCBkbyB0aGlzIG9ubHkgaW4gY2FzZSBNZXJrbGUgdHJlZSBibG9jayA9PSBmcyBibG9jayBzaXplLgomIzQzOwkgKiBJb21hcCBzeW50aGVzaXplcyB0aGVzZSBibG9ja3MgYmFzZWQgb24gaG9sZXMgaW4gdGhlIG1lcmtsZSB0cmVlLiBXZQomIzQzOwkgKiB3b24mIzM5O3QgYmUgYWJsZSB0byB0ZWxsIGlmIHNvbWV0aGluZyBuZWVkIHRvIGJlIHN5bnRoZXNpemVzIGZvciB0aGUKJiM0MzsJICogcmFuZ2UgaW4gdGhlIGZzIGJsb2NrLiBGb3IgZXhhbXBsZSwgZm9yIDRrIGZpbGVzeXN0ZW0gYmxvY2sKJiM0MzsJICoKJiM0MzsJICoJWyAxayB8IHplcm8gaGFzaGVzIHwgemVybyBoYXNoZXMgfCAxayBdCiYjNDM7CSAqCiYjNDM7CSAqIElvbWFwIHdvbiYjMzk7dCBrbm93IGFib3V0IHRoZXNlIGVtcHR5IGJsb2Nrcy4KJiM0MzsJICovCiYjNDM7CWlmIChzaXplID09IGlwLSZndDtpX21vdW50LSZndDttX3NiLnNiX2Jsb2Nrc2l6ZSAmYW1wOyZhbXA7CiYjNDM7CQkJLyoKJiM0MzsJCQkgKiBGaXJzdCBkaWdlc3QgaXMgemVyb19kaWdlc3QKJiM0MzsJCQkgKi8KJiM0MzsJCQltZW1jbXAoYnVmLCB6ZXJvX2RpZ2VzdCwgZGlnZXN0X3NpemUpID09IDAgJmFtcDsmYW1wOwomIzQzOwkJCS8qCiYjNDM7CQkJICogRXZlcnkgZGlnZXN0IGlzIHNhbWUgYXMgcHJldmlvdXMsIHRodXMgYWxsIGFyZQomIzQzOwkJCSAqIHplcm9fZGlnZXN0CiYjNDM7CQkJICovCiYjNDM7CQkJbWVtY21wKGJ1ZiAmIzQzOyBkaWdlc3Rfc2l6ZSwgYnVmLCBzaXplIC0gZGlnZXN0X3NpemUpID09IDApCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJcmV0dXJuIGlvbWFwX2ZzdmVyaXR5X3dyaXRlKGZpbGUsIHBvc2l0aW9uLCBzaXplLCBidWYsCiYjNDM7CQkJJmFtcDt4ZnNfYnVmZmVyZWRfd3JpdGVfaW9tYXBfb3BzLAomIzQzOwkJCSZhbXA7eGZzX2lvbWFwX3dyaXRlX29wcyk7CiYjNDM7fQomIzQzOwomIzQzO2NvbnN0IHN0cnVjdCBmc3Zlcml0eV9vcGVyYXRpb25zIHhmc19mc3Zlcml0eV9vcHMgPSB7CiYjNDM7CS5iZWdpbl9lbmFibGVfdmVyaXR5CQk9IHhmc19mc3Zlcml0eV9iZWdpbl9lbmFibGUsCiYjNDM7CS5lbmRfZW5hYmxlX3Zlcml0eQkJPSB4ZnNfZnN2ZXJpdHlfZW5kX2VuYWJsZSwKJiM0MzsJLmdldF92ZXJpdHlfZGVzY3JpcHRvcgkJPSB4ZnNfZnN2ZXJpdHlfZ2V0X2Rlc2NyaXB0b3IsCiYjNDM7CS5yZWFkX21lcmtsZV90cmVlX3BhZ2UJCT0geGZzX2ZzdmVyaXR5X3JlYWRfbWVya2xlLAomIzQzOwkucmVhZGFoZWFkX21lcmtsZV90cmVlCQk9IHhmc19mc3Zlcml0eV9yZWFkYWhlYWRfbWVya2xlX3RyZWUsCiYjNDM7CS53cml0ZV9tZXJrbGVfdHJlZV9ibG9jawk9IHhmc19mc3Zlcml0eV93cml0ZV9tZXJrbGUsCiYjNDM7fTsKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfZnN2ZXJpdHkuaCBiL2ZzL3hmcy94ZnNfZnN2ZXJpdHkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uNmE5ODFlMjBhNzViYjgKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9mcy94ZnMveGZzX2ZzdmVyaXR5LmgKQEAgLTAsMCAmIzQzOzEsMjggQEAKJiM0MzsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLwomIzQzOy8qCiYjNDM7ICogQ29weXJpZ2h0IChDKSAyMDI2IFJlZCBIYXQsIEluYy4KJiM0MzsgKi8KJiM0MzsjaWZuZGVmIF9fWEZTX0ZTVkVSSVRZX0hfXwomIzQzOyNkZWZpbmUgX19YRlNfRlNWRVJJVFlfSF9fCiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDt4ZnNfcGxhdGZvcm0uaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2ZzdmVyaXR5LmgmZ3Q7CiYjNDM7CiYjNDM7I2lmZGVmIENPTkZJR19GU19WRVJJVFkKJiM0MztleHRlcm4gY29uc3Qgc3RydWN0IGZzdmVyaXR5X29wZXJhdGlvbnMgeGZzX2ZzdmVyaXR5X29wczsKJiM0Mztsb2ZmX3QgeGZzX2ZzdmVyaXR5X21ldGFkYXRhX29mZnNldChjb25zdCBzdHJ1Y3QgeGZzX2lub2RlICppcCk7CiYjNDM7Ym9vbCB4ZnNfZnN2ZXJpdHlfaXNfZmlsZV9kYXRhKGNvbnN0IHN0cnVjdCB4ZnNfaW5vZGUgKmlwLCBsb2ZmX3Qgb2Zmc2V0KTsKJiM0MzsjZWxzZQomIzQzO3N0YXRpYyBpbmxpbmUgbG9mZl90IHhmc19mc3Zlcml0eV9tZXRhZGF0YV9vZmZzZXQoY29uc3Qgc3RydWN0IHhmc19pbm9kZSAqaXApCiYjNDM7ewomIzQzOwlXQVJOX09OX09OQ0UoMSk7CiYjNDM7CXJldHVybiBVTExPTkdfTUFYOwomIzQzO30KJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgeGZzX2ZzdmVyaXR5X2lzX2ZpbGVfZGF0YShjb25zdCBzdHJ1Y3QgeGZzX2lub2RlICppcCwKJiM0MzsJCQkJCSAgICBsb2ZmX3Qgb2Zmc2V0KQomIzQzO3sKJiM0MzsJcmV0dXJuIGZhbHNlOwomIzQzO30KJiM0MzsjZW5kaWYJLyogQ09ORklHX0ZTX1ZFUklUWSAqLwomIzQzOwomIzQzOyNlbmRpZgkvKiBfX1hGU19GU1ZFUklUWV9IX18gKi8KZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfaGVhbHRoLmMgYi9mcy94ZnMveGZzX2hlYWx0aC5jCmluZGV4IDIzOWI4NDNlODNkNDJhLi5iZTY2NzYwZmIxMjBmNyAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19oZWFsdGguYwomIzQzOyYjNDM7JiM0MzsgYi9mcy94ZnMveGZzX2hlYWx0aC5jCkBAIC02MjUsNiAmIzQzOzYyNSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaW9jdGxfc2lja19tYXAgaW5vX21hcFtdID0gewogCXsgWEZTX1NJQ0tfSU5PX0RJUl9aQVBQRUQsCVhGU19CU19TSUNLX0RJUiB9LAogCXsgWEZTX1NJQ0tfSU5PX1NZTUxJTktfWkFQUEVELAlYRlNfQlNfU0lDS19TWU1MSU5LIH0sCiAJeyBYRlNfU0lDS19JTk9fRElSVFJFRSwJWEZTX0JTX1NJQ0tfRElSVFJFRSB9LAomIzQzOwl7IFhGU19TSUNLX0lOT19GU1ZFUklUWSwJWEZTX0JTX1NJQ0tfRlNWRVJJVFkgfSwKIH07CiAKIC8qIEZpbGwgb3V0IGJ1bGtzdGF0IGhlYWx0aCBpbmZvLiAqLwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19pbm9kZS5oIGIvZnMveGZzL3hmc19pbm9kZS5oCmluZGV4IDM0YzEwMzhlYmZjZGUxLi4xN2NlMDgzNTkxZjQwOCAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19pbm9kZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3hmcy94ZnNfaW5vZGUuaApAQCAtNDE5LDYgJiM0Mzs0MTksMTIgQEAgc3RhdGljIGlubGluZSBib29sIHhmc19pbm9kZV9jYW5fc3dfYXRvbWljX3dyaXRlKGNvbnN0IHN0cnVjdCB4ZnNfaW5vZGUgKmlwKQogICovCiAjZGVmaW5lIFhGU19JUkVNQVBQSU5HCQkoMVUgJmx0OyZsdDsgMTUpCiAKJiM0MzsvKgomIzQzOyAqIGZzLXZlcml0eSYjMzk7cyBNZXJrbGUgdHJlZSBpcyB1bmRlciBjb25zdHJ1Y3Rpb24uIFRoZSBmaWxlIGlzIHJlYWQtb25seSwgdGhlCiYjNDM7ICogb25seSB3cml0ZXMgaGFwcGVuaW5nIGFyZSBmb3IgdGhlIGZzdmVyaXR5IG1ldGFkYXRhLgomIzQzOyAqLwomIzQzOyNkZWZpbmUgWEZTX1ZFUklUWV9DT05TVFJVQ1RJT04JKDFVICZsdDsmbHQ7IDE2KQomIzQzOwogLyogQWxsIGlub2RlIHN0YXRlIGZsYWdzIHJlbGF0ZWQgdG8gaW5vZGUgcmVjbGFpbS4gKi8KICNkZWZpbmUgWEZTX0FMTF9JUkVDTEFJTV9GTEFHUwkoWEZTX0lSRUNMQUlNQUJMRSB8IFwKIAkJCQkgWEZTX0lSRUNMQUlNIHwgXApkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19pb2N0bC5jIGIvZnMveGZzL3hmc19pb2N0bC5jCmluZGV4IDFiNTM3MDFiZWJlYTFhLi5mYzc4NjBhOGI1YWJiMSAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19pb2N0bC5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3hmcy94ZnNfaW9jdGwuYwpAQCAtNDksNiAmIzQzOzQ5LDcgQEAKIAogI2luY2x1ZGUgJmx0O2xpbnV4L21vdW50LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZmlsZWF0dHIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvZnN2ZXJpdHkuaCZndDsKIAogLyogUmV0dXJuIDAgb24gc3VjY2VzcyBvciBwb3NpdGl2ZSBlcnJvciAqLwogaW50CkBAIC0xNDY2LDYgJiM0MzsxNDY3LDE5IEBAIHhmc19maWxlX2lvY3RsKAogCWNhc2UgWEZTX0lPQ19WRVJJRllfTUVESUE6CiAJCXJldHVybiB4ZnNfaW9jX3ZlcmlmeV9tZWRpYShmaWxwLCBhcmcpOwogCiYjNDM7CWNhc2UgRlNfSU9DX0VOQUJMRV9WRVJJVFk6CiYjNDM7CQlpZiAoIXhmc19oYXNfdmVyaXR5KG1wKSkKJiM0MzsJCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CQlyZXR1cm4gZnN2ZXJpdHlfaW9jdGxfZW5hYmxlKGZpbHAsIGFyZyk7CiYjNDM7CWNhc2UgRlNfSU9DX01FQVNVUkVfVkVSSVRZOgomIzQzOwkJaWYgKCF4ZnNfaGFzX3Zlcml0eShtcCkpCiYjNDM7CQkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwkJcmV0dXJuIGZzdmVyaXR5X2lvY3RsX21lYXN1cmUoZmlscCwgYXJnKTsKJiM0MzsJY2FzZSBGU19JT0NfUkVBRF9WRVJJVFlfTUVUQURBVEE6CiYjNDM7CQlpZiAoIXhmc19oYXNfdmVyaXR5KG1wKSkKJiM0MzsJCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CQlyZXR1cm4gZnN2ZXJpdHlfaW9jdGxfcmVhZF9tZXRhZGF0YShmaWxwLCBhcmcpOwomIzQzOwogCWRlZmF1bHQ6CiAJCXJldHVybiAtRU5PVFRZOwogCX0KZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfaW9tYXAuYyBiL2ZzL3hmcy94ZnNfaW9tYXAuYwppbmRleCAyMjVjM2RlODhkMDNiMS4uZmJhNTE5MDI0MTZiMDIgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfaW9tYXAuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy94ZnMveGZzX2lvbWFwLmMKQEAgLTMyLDYgJiM0MzszMiw4IEBACiAjaW5jbHVkZSAmIzM0O3hmc19ydGJpdG1hcC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7eGZzX2ljYWNoZS5oJiMzNDsKICNpbmNsdWRlICYjMzQ7eGZzX3pvbmVfYWxsb2MuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDt4ZnNfZnN2ZXJpdHkuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2ZzdmVyaXR5LmgmZ3Q7CiAKICNkZWZpbmUgWEZTX0FMTE9DX0FMSUdOKG1wLCBvZmYpIFwKIAkoKChvZmYpICZndDsmZ3Q7IG1wLSZndDttX2FsbG9jc2l6ZV9sb2cpICZsdDsmbHQ7IG1wLSZndDttX2FsbG9jc2l6ZV9sb2cpCkBAIC0xNTg5LDcgJiM0MzsxNTkxLDggQEAgeGZzX3pvbmVkX2J1ZmZlcmVkX3dyaXRlX2lvbWFwX2JlZ2luKAogCWxvZmZfdAkJCWNvdW50LAogCXVuc2lnbmVkCQlmbGFncywKIAlzdHJ1Y3QgaW9tYXAJCSppb21hcCwKLQlzdHJ1Y3QgaW9tYXAJCSpzcmNtYXApCiYjNDM7CXN0cnVjdCBpb21hcAkJKnNyY21hcCwKJiM0MzsJdTE2CQkJaW9tYXBfZmxhZ3MpCiB7CiAJc3RydWN0IGlvbWFwX2l0ZXIJKml0ZXIgPQogCQljb250YWluZXJfb2YoaW9tYXAsIHN0cnVjdCBpb21hcF9pdGVyLCBpb21hcCk7CkBAIC0xNTk5LDcgJiM0MzsxNjAyLDYgQEAgeGZzX3pvbmVkX2J1ZmZlcmVkX3dyaXRlX2lvbWFwX2JlZ2luKAogCXN0cnVjdCB4ZnNfbW91bnQJKm1wID0gaXAtJmd0O2lfbW91bnQ7CiAJeGZzX2ZpbGVvZmZfdAkJb2Zmc2V0X2ZzYiA9IFhGU19CX1RPX0ZTQlQobXAsIG9mZnNldCk7CiAJeGZzX2ZpbGVvZmZfdAkJZW5kX2ZzYiA9IHhmc19pb21hcF9lbmRfZnNiKG1wLCBvZmZzZXQsIGNvdW50KTsKLQl1MTYJCQlpb21hcF9mbGFncyA9IElPTUFQX0ZfU0hBUkVEOwogCXVuc2lnbmVkIGludAkJbG9ja21vZGUgPSBYRlNfSUxPQ0tfRVhDTDsKIAl4ZnNfZmlsYmxrc190CQljb3VudF9mc2I7CiAJeGZzX2V4dGxlbl90CQlpbmRsZW47CkBAIC0xNjA3LDYgJiM0MzsxNjA5LDggQEAgeGZzX3pvbmVkX2J1ZmZlcmVkX3dyaXRlX2lvbWFwX2JlZ2luKAogCXN0cnVjdCB4ZnNfaWV4dF9jdXJzb3IJaWN1cjsKIAlpbnQJCQllcnJvciA9IDA7CiAKJiM0MzsJaW9tYXBfZmxhZ3MgPSBpb21hcF9mbGFncyB8IElPTUFQX0ZfU0hBUkVEOwomIzQzOwogCUFTU0VSVCgheGZzX2dldF9leHRzel9oaW50KGlwKSk7CiAJQVNTRVJUKCEoZmxhZ3MgJmFtcDsgSU9NQVBfVU5TSEFSRSkpOwogCUFTU0VSVChhYyk7CkBAIC0xODAzLDkgJiM0MzsxODA3LDEyIEBAIHhmc19idWZmZXJlZF93cml0ZV9pb21hcF9iZWdpbigKIAlpZiAoeGZzX2lzX3NodXRkb3duKG1wKSkKIAkJcmV0dXJuIC1FSU87CiAKJiM0MzsJaWYgKHhmc19pZmxhZ3NfdGVzdChpcCwgWEZTX1ZFUklUWV9DT05TVFJVQ1RJT04pKQomIzQzOwkJaW9tYXBfZmxhZ3MgfD0gSU9NQVBfRl9GU1ZFUklUWTsKJiM0MzsKIAlpZiAoeGZzX2lzX3pvbmVkX2lub2RlKGlwKSkKIAkJcmV0dXJuIHhmc196b25lZF9idWZmZXJlZF93cml0ZV9pb21hcF9iZWdpbihpbm9kZSwgb2Zmc2V0LAotCQkJCWNvdW50LCBmbGFncywgaW9tYXAsIHNyY21hcCk7CiYjNDM7CQkJCWNvdW50LCBmbGFncywgaW9tYXAsIHNyY21hcCwgaW9tYXBfZmxhZ3MpOwogCiAJLyogd2UgY2FuJiMzOTt0IHVzZSBkZWxheWVkIGFsbG9jYXRpb25zIHdoZW4gdXNpbmcgZXh0ZW50IHNpemUgaGludHMgKi8KIAlpZiAoeGZzX2dldF9leHRzel9oaW50KGlwKSkKQEAgLTIxOTEsMTIgJiM0MzsyMTk4LDE3IEBAIHhmc19yZWFkX2lvbWFwX2JlZ2luKAogCWJvb2wJCQlzaGFyZWQgPSBmYWxzZTsKIAl1bnNpZ25lZCBpbnQJCWxvY2ttb2RlID0gWEZTX0lMT0NLX1NIQVJFRDsKIAl1NjQJCQlzZXE7CiYjNDM7CXVuc2lnbmVkIGludAkJaW9tYXBfZmxhZ3MgPSAwOwogCiAJQVNTRVJUKCEoZmxhZ3MgJmFtcDsgKElPTUFQX1dSSVRFIHwgSU9NQVBfWkVSTykpKTsKIAogCWlmICh4ZnNfaXNfc2h1dGRvd24obXApKQogCQlyZXR1cm4gLUVJTzsKIAomIzQzOwlpZiAoZnN2ZXJpdHlfYWN0aXZlKGlub2RlKSAmYW1wOyZhbXA7CiYjNDM7CSAgICAob2Zmc2V0ICZndDs9IHhmc19mc3Zlcml0eV9tZXRhZGF0YV9vZmZzZXQoaXApKSkKJiM0MzsJCWlvbWFwX2ZsYWdzIHw9IElPTUFQX0ZfRlNWRVJJVFk7CiYjNDM7CiAJZXJyb3IgPSB4ZnNfaWxvY2tfZm9yX2lvbWFwKGlwLCBmbGFncywgJmFtcDtsb2NrbW9kZSk7CiAJaWYgKGVycm9yKQogCQlyZXR1cm4gZXJyb3I7CkBAIC0yMjEwLDggJiM0MzsyMjIyLDkgQEAgeGZzX3JlYWRfaW9tYXBfYmVnaW4oCiAJaWYgKGVycm9yKQogCQlyZXR1cm4gZXJyb3I7CiAJdHJhY2VfeGZzX2lvbWFwX2ZvdW5kKGlwLCBvZmZzZXQsIGxlbmd0aCwgWEZTX0RBVEFfRk9SSywgJmFtcDtpbWFwKTsKLQlyZXR1cm4geGZzX2JtYnRfdG9faW9tYXAoaXAsIGlvbWFwLCAmYW1wO2ltYXAsIGZsYWdzLAotCQkJCSBzaGFyZWQgPyBJT01BUF9GX1NIQVJFRCA6IDAsIHNlcSk7CiYjNDM7CWlvbWFwX2ZsYWdzIHw9IHNoYXJlZCA/IElPTUFQX0ZfU0hBUkVEIDogMDsKJiM0MzsKJiM0MzsJcmV0dXJuIHhmc19ibWJ0X3RvX2lvbWFwKGlwLCBpb21hcCwgJmFtcDtpbWFwLCBmbGFncywgaW9tYXBfZmxhZ3MsIHNlcSk7CiB9CiAKIGNvbnN0IHN0cnVjdCBpb21hcF9vcHMgeGZzX3JlYWRfaW9tYXBfb3BzID0gewpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19pb3BzLmMgYi9mcy94ZnMveGZzX2lvcHMuYwppbmRleCA2MzM5ZjQ5NTZlY2IzOS4uNzA2MzdjZGNjMjk5NzIgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfaW9wcy5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3hmcy94ZnNfaW9wcy5jCkBAIC0zNSw2ICYjNDM7MzUsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L3NlY3VyaXR5LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvaXZlcnNpb24uaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9maWVtYXAuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvZnN2ZXJpdHkuaCZndDsKIAogLyoKICAqIERpcmVjdG9yaWVzIGhhdmUgZGlmZmVyZW50IGxvY2sgb3JkZXIgdy5yLnQuIG1tYXBfbG9jayBjb21wYXJlZCB0byByZWd1bGFyCkBAIC01ODAsNiAmIzQzOzU4MSwxMCBAQCB4ZnNfcmVwb3J0X2Rpb2FsaWduKAogCXN0cnVjdCBibG9ja19kZXZpY2UJKmJkZXYgPSB0YXJnZXQtJmd0O2J0X2JkZXY7CiAKIAlzdGF0LSZndDtyZXN1bHRfbWFzayB8PSBTVEFUWF9ESU9BTElHTiB8IFNUQVRYX0RJT19SRUFEX0FMSUdOOwomIzQzOwomIzQzOwlpZiAoZnN2ZXJpdHlfYWN0aXZlKFZGU19JKGlwKSkpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiAJc3RhdC0mZ3Q7ZGlvX21lbV9hbGlnbiA9IGJkZXZfZG1hX2FsaWdubWVudChiZGV2KSAmIzQzOyAxOwogCiAJLyoKQEAgLTEzNzAsNiAmIzQzOzEzNzUsOCBAQCB4ZnNfaW5vZGVfc2hvdWxkX2VuYWJsZV9kYXgoCiAJCXJldHVybiBmYWxzZTsKIAlpZiAoIXhmc19pbm9kZV9zdXBwb3J0c19kYXgoaXApKQogCQlyZXR1cm4gZmFsc2U7CiYjNDM7CWlmIChpcC0mZ3Q7aV9kaWZsYWdzMiAmYW1wOyBYRlNfRElGTEFHMl9WRVJJVFkpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiAJaWYgKHhmc19oYXNfZGF4X2Fsd2F5cyhpcC0mZ3Q7aV9tb3VudCkpCiAJCXJldHVybiB0cnVlOwogCWlmIChpcC0mZ3Q7aV9kaWZsYWdzMiAmYW1wOyBYRlNfRElGTEFHMl9EQVgpCkBAIC0xMzk4LDEyICYjNDM7MTQwNSwxNSBAQCB4ZnNfZGlmbGFnc190b19pZmxhZ3MoCiAJCWZsYWdzIHw9IFNfTk9BVElNRTsKIAlpZiAoaW5pdCAmYW1wOyZhbXA7IHhmc19pbm9kZV9zaG91bGRfZW5hYmxlX2RheChpcCkpCiAJCWZsYWdzIHw9IFNfREFYOwomIzQzOwlpZiAoeGZsYWdzICZhbXA7IEZTX1hGTEFHX1ZFUklUWSkKJiM0MzsJCWZsYWdzIHw9IFNfVkVSSVRZOwogCiAJLyoKIAkgKiBTX0RBWCBjYW4gb25seSBiZSBzZXQgZHVyaW5nIGlub2RlIGluaXRpYWxpemF0aW9uIGFuZCBpcyBuZXZlciBzZXQgYnkKIAkgKiB0aGUgVkZTLCBzbyB3ZSBjYW5ub3QgbWFzayBvZmYgU19EQVggaW4gaV9mbGFncy4KIAkgKi8KLQlpbm9kZS0mZ3Q7aV9mbGFncyAmYW1wOz0gfihTX0lNTVVUQUJMRSB8IFNfQVBQRU5EIHwgU19TWU5DIHwgU19OT0FUSU1FKTsKJiM0MzsJaW5vZGUtJmd0O2lfZmxhZ3MgJmFtcDs9CiYjNDM7CQl+KFNfSU1NVVRBQkxFIHwgU19BUFBFTkQgfCBTX1NZTkMgfCBTX05PQVRJTUUgfCBTX1ZFUklUWSk7CiAJaW5vZGUtJmd0O2lfZmxhZ3MgfD0gZmxhZ3M7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfbWVzc2FnZS5jIGIvZnMveGZzL3hmc19tZXNzYWdlLmMKaW5kZXggMDI0M2U1MDlhNDY4OTEuLjQ0YjEzZDQ2MDQ5YzYyIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX21lc3NhZ2UuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy94ZnMveGZzX21lc3NhZ2UuYwpAQCAtMTQ5LDYgJiM0MzsxNDksMTAgQEAgeGZzX3dhcm5fZXhwZXJpbWVudGFsKAogCQkJLm9wc3RhdGUJPSBYRlNfT1BTVEFURV9XQVJORURfTEFSUCwKIAkJCS5uYW1lCQk9ICYjMzQ7bG9nZ2VkIGV4dGVuZGVkIGF0dHJpYnV0ZXMmIzM0OywKIAkJfSwKJiM0MzsJCVtYRlNfRVhQRVJJTUVOVEFMX0ZTVkVSSVRZXSA9IHsKJiM0MzsJCQkub3BzdGF0ZQk9IFhGU19PUFNUQVRFX1dBUk5FRF9GU1ZFUklUWSwKJiM0MzsJCQkubmFtZQkJPSAmIzM0O2ZzdmVyaXR5JiMzNDssCiYjNDM7CQl9LAogCX07CiAJQVNTRVJUKGZlYXQgJmd0Oz0gMCAmYW1wOyZhbXA7IGZlYXQgJmx0OyBYRlNfRVhQRVJJTUVOVEFMX01BWCk7CiAJQlVJTERfQlVHX09OKEFSUkFZX1NJWkUoZmVhdHVyZXMpICE9IFhGU19FWFBFUklNRU5UQUxfTUFYKTsKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfbWVzc2FnZS5oIGIvZnMveGZzL3hmc19tZXNzYWdlLmgKaW5kZXggODExYjg4NWY0MWMzNWEuLjM2NGZjYzdlNDJiMDg0IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX21lc3NhZ2UuaAomIzQzOyYjNDM7JiM0MzsgYi9mcy94ZnMveGZzX21lc3NhZ2UuaApAQCAtOTMsNiAmIzQzOzkzLDcgQEAgdm9pZCB4ZnNfYnVmX2FsZXJ0X3JhdGVsaW1pdGVkKHN0cnVjdCB4ZnNfYnVmICpicCwgY29uc3QgY2hhciAqcmxtc2csCiBlbnVtIHhmc19leHBlcmltZW50YWxfZmVhdCB7CiAJWEZTX0VYUEVSSU1FTlRBTF9TSFJJTkssCiAJWEZTX0VYUEVSSU1FTlRBTF9MQVJQLAomIzQzOwlYRlNfRVhQRVJJTUVOVEFMX0ZTVkVSSVRZLAogCiAJWEZTX0VYUEVSSU1FTlRBTF9NQVgsCiB9OwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19tb3VudC5oIGIvZnMveGZzL3hmc19tb3VudC5oCmluZGV4IDY2YTAyZDFiOWFkN2ExLi44NzVjOWIwZjhlOTkxZiAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19tb3VudC5oCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3hmcy94ZnNfbW91bnQuaApAQCAtMzg4LDYgJiM0MzszODgsNyBAQCB0eXBlZGVmIHN0cnVjdCB4ZnNfbW91bnQgewogI2RlZmluZSBYRlNfRkVBVF9FWENIQU5HRV9SQU5HRQkoMVVMTCAmbHQ7Jmx0OyAyNykJLyogZXhjaGFuZ2UgcmFuZ2UgKi8KICNkZWZpbmUgWEZTX0ZFQVRfTUVUQURJUgkoMVVMTCAmbHQ7Jmx0OyAyOCkJLyogbWV0YWRhdGEgZGlyZWN0b3J5IHRyZWUgKi8KICNkZWZpbmUgWEZTX0ZFQVRfWk9ORUQJCSgxVUxMICZsdDsmbHQ7IDI5KQkvKiB6b25lZCBSVCBkZXZpY2UgKi8KJiM0MzsjZGVmaW5lIFhGU19GRUFUX1ZFUklUWQkJKDFVTEwgJmx0OyZsdDsgMzApCS8qIGZzLXZlcml0eSAqLwogCiAvKiBNb3VudCBmZWF0dXJlcyAqLwogI2RlZmluZSBYRlNfRkVBVF9OT0xJRkVUSU1FCSgxVUxMICZsdDsmbHQ7IDQ3KQkvKiBkaXNhYmxlIGxpZmV0aW1lIGhpbnRzICovCkBAIC00NDUsNiAmIzQzOzQ0Niw3IEBAIF9fWEZTX0hBU19GRUFUKGV4Y2hhbmdlX3JhbmdlLCBFWENIQU5HRV9SQU5HRSkKIF9fWEZTX0hBU19GRUFUKG1ldGFkaXIsIE1FVEFESVIpCiBfX1hGU19IQVNfRkVBVCh6b25lZCwgWk9ORUQpCiBfX1hGU19IQVNfRkVBVChub2xpZmV0aW1lLCBOT0xJRkVUSU1FKQomIzQzO19fWEZTX0hBU19GRUFUKHZlcml0eSwgVkVSSVRZKQogCiBzdGF0aWMgaW5saW5lIGJvb2wgeGZzX2hhc19ydGdyb3Vwcyhjb25zdCBzdHJ1Y3QgeGZzX21vdW50ICptcCkKIHsKQEAgLTU4Miw2ICYjNDM7NTg0LDggQEAgX19YRlNfSEFTX0ZFQVQobm91dWlkLCBOT1VVSUQpCiAjZGVmaW5lIFhGU19PUFNUQVRFX1JFU1VNSU5HX1FVT1RBT04JMTgKIC8qIChab25lZCkgR0MgaXMgaW4gcHJvZ3Jlc3MgKi8KICNkZWZpbmUgWEZTX09QU1RBVEVfWk9ORUdDX1JVTk5JTkcJMjAKJiM0MzsvKiBLZXJuZWwgaGFzIGxvZ2dlZCBhIHdhcm5pbmcgYWJvdXQgZnN2ZXJpdHkgc3VwcG9ydCAqLwomIzQzOyNkZWZpbmUgWEZTX09QU1RBVEVfV0FSTkVEX0ZTVkVSSVRZCTIxCiAKICNkZWZpbmUgX19YRlNfSVNfT1BTVEFURShuYW1lLCBOQU1FKSBcCiBzdGF0aWMgaW5saW5lIGJvb2wgeGZzX2lzXyAjIyBuYW1lIChzdHJ1Y3QgeGZzX21vdW50ICptcCkgXApkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19zdXBlci5jIGIvZnMveGZzL3hmc19zdXBlci5jCmluZGV4IDg1MzFkNTI2ZmM0NDA5Li5hNzc3NGQyZDZiMjNmYyAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19zdXBlci5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3hmcy94ZnNfc3VwZXIuYwpAQCAtMzAsNiAmIzQzOzMwLDcgQEAKICNpbmNsdWRlICYjMzQ7eGZzX2ZpbGVzdHJlYW0uaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3hmc19xdW90YS5oJiMzNDsKICNpbmNsdWRlICYjMzQ7eGZzX3N5c2ZzLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7eGZzX2ZzdmVyaXR5LmgmIzM0OwogI2luY2x1ZGUgJiMzNDt4ZnNfb25kaXNrLmgmIzM0OwogI2luY2x1ZGUgJiMzNDt4ZnNfcm1hcF9pdGVtLmgmIzM0OwogI2luY2x1ZGUgJiMzNDt4ZnNfcmVmY291bnRfaXRlbS5oJiMzNDsKQEAgLTE2ODksNiAmIzQzOzE2OTAsOSBAQCB4ZnNfZnNfZmlsbF9zdXBlcigKIAlzYi0mZ3Q7c19xdW90YV90eXBlcyA9IFFUWVBFX01BU0tfVVNSIHwgUVRZUEVfTUFTS19HUlAgfCBRVFlQRV9NQVNLX1BSSjsKICNlbmRpZgogCXNiLSZndDtzX29wID0gJmFtcDt4ZnNfc3VwZXJfb3BlcmF0aW9uczsKJiM0MzsjaWZkZWYgQ09ORklHX0ZTX1ZFUklUWQomIzQzOwlzYi0mZ3Q7c192b3AgPSAmYW1wO3hmc19mc3Zlcml0eV9vcHM7CiYjNDM7I2VuZGlmCiAKIAkvKgogCSAqIERlbGF5IG1vdW50IHdvcmsgaWYgdGhlIGRlYnVnIGhvb2sgaXMgc2V0LiBUaGlzIGlzIGRlYnVnCkBAIC0xOTQxLDYgJiM0MzsxOTQ1LDkgQEAgeGZzX2ZzX2ZpbGxfc3VwZXIoCiAJaWYgKGVycm9yKQogCQlnb3RvIG91dF9maWxlc3RyZWFtX3VubW91bnQ7CiAKJiM0MzsJaWYgKHhmc19oYXNfdmVyaXR5KG1wKSkKJiM0MzsJCXhmc193YXJuX2V4cGVyaW1lbnRhbChtcCwgWEZTX0VYUEVSSU1FTlRBTF9GU1ZFUklUWSk7CiYjNDM7CiAJcm9vdCA9IGlncmFiKFZGU19JKG1wLSZndDttX3Jvb3RpcCkpOwogCWlmICghcm9vdCkgewogCQllcnJvciA9IC1FTk9FTlQ7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZzdmVyaXR5LmggYi9pbmNsdWRlL2xpbnV4L2ZzdmVyaXR5LmgKaW5kZXggNmM0NjdkZWQ5NzUxZmMuLmY5NDMzMzMyYzI3NGJiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ZzdmVyaXR5LmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9mc3Zlcml0eS5oCkBAIC0xMjQsNiAmIzQzOzEyNCw4IEBAIHN0cnVjdCBmc3Zlcml0eV9vcGVyYXRpb25zIHsKIAkgKiBAYnVmOiB0aGUgTWVya2xlIHRyZWUgYmxvY2sgdG8gd3JpdGUKIAkgKiBAcG9zOiB0aGUgcG9zaXRpb24gb2YgdGhlIGJsb2NrIGluIHRoZSBNZXJrbGUgdHJlZSAoaW4gYnl0ZXMpCiAJICogQHNpemU6IHRoZSBNZXJrbGUgdHJlZSBibG9jayBzaXplIChpbiBieXRlcykKJiM0MzsJICogQHplcm9fZGlnZXN0OiB0aGUgaGFzaCBvZiB0aGUgYWxsLXplcm9lcyBibG9jawomIzQzOwkgKiBAZGlnZXN0X3NpemU6IHNpemUgb2YgemVyb19kaWdlc3QsIGluIGJ5dGVzCiAJICoKIAkgKiBUaGlzIGlzIG9ubHkgY2FsbGVkIGJldHdlZW4gLSZndDtiZWdpbl9lbmFibGVfdmVyaXR5KCkgYW5kCiAJICogLSZndDtlbmRfZW5hYmxlX3Zlcml0eSgpLgpAQCAtMTMxLDcgJiM0MzsxMzMsOSBAQCBzdHJ1Y3QgZnN2ZXJpdHlfb3BlcmF0aW9ucyB7CiAJICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIC1lcnJubyBvbiBmYWlsdXJlCiAJICovCiAJaW50ICgqd3JpdGVfbWVya2xlX3RyZWVfYmxvY2spKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCB2b2lkICpidWYsCi0JCQkJICAgICAgIHU2NCBwb3MsIHVuc2lnbmVkIGludCBzaXplKTsKJiM0MzsJCQkJICAgICAgIHU2NCBwb3MsIHVuc2lnbmVkIGludCBzaXplLAomIzQzOwkJCQkgICAgICAgY29uc3QgdTggKnplcm9fZGlnZXN0LAomIzQzOwkJCQkgICAgICAgdW5zaWduZWQgaW50IGRpZ2VzdF9zaXplKTsKIH07CiAKICNpZmRlZiBDT05GSUdfRlNfVkVSSVRZCkBAIC0zMTcsMTAgJiM0MzszMjEsMTQgQEAgc3RhdGljIGlubGluZSBpbnQgZnN2ZXJpdHlfZmlsZV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQogCXJldHVybiAwOwogfQogCiYjNDM7aW50IGZzdmVyaXR5X2Vuc3VyZV92ZXJpdHlfaW5mbyhzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKJiM0MzsKIHZvaWQgZnN2ZXJpdHlfY2xlYW51cF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKIAogc3RydWN0IHBhZ2UgKmdlbmVyaWNfcmVhZF9tZXJrbGVfdHJlZV9wYWdlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHBnb2ZmX3QgaW5kZXgpOwogdm9pZCBnZW5lcmljX3JlYWRhaGVhZF9tZXJrbGVfdHJlZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IGluZGV4LAogCQkJCSAgIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpOwomIzQzO2ludCBmc3Zlcml0eV9wYWdlY2FjaGVfcmVhZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCB2b2lkICpidWYsIHNpemVfdCBjb3VudCwKJiM0MzsJCQkgICAgbG9mZl90IHBvcyk7CiAKICNlbmRpZgkvKiBfTElOVVhfRlNWRVJJVFlfSCAqLwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAwNDoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzk0NgoJCQkJCQkJb3V0cHV0OiAyODYKCQkJCQkJCXRob3VnaHRzOiA2MjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBYRlMgZnMtdmVyaXR5IFBhdGNoIGZvciBGdXp6aW5nKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIHNlcmllcyB0aGF0IGJyaW5ncyBmcy12ZXJpdHkgdG8gWEZTLiBJdCYjMzk7cyBhIHNpZ25pZmljYW50IGNoYW5nZSwgdG91Y2hpbmcgY29yZSBrZXJuZWwgbG9naWMgaW4gYm90aCBYRlMgaXRzZWxmIGFuZCB0aGUgYGZzL3Zlcml0eWAgc3Vic3lzdGVtLiBEZWZpbml0ZWx5IGZ1enotd29ydGh5LgoKRmlyc3QsIGxldCYjMzk7cyBuYWlsIGRvd24gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB3ZSBuZWVkLiBJdCYjMzk7cyBhIG5vLWJyYWluZXIgdGhhdCBgQ09ORklHX0ZTX1ZFUklUWWAgaXMgZXNzZW50aWFsLiBOYXR1cmFsbHksIGBDT05GSUdfWEZTX0ZTYCBpcyBhbHNvIHJlcXVpcmVkIGZvciBYRlMgc3VwcG9ydC4gRGlnZ2luZyBpbnRvIHRoZSBgZnMveGZzL01ha2VmaWxlYCBhbmQgYGZzL3hmcy9LY29uZmlnYCwgSSBzZWUgdGhhdCBgeGZzLSQoQ09ORklHX0ZTX1ZFUklUWSkgJiM0Mzs9IHhmc19mc3Zlcml0eS5vYCBjb25maXJtcyB0aGF0IGBDT05GSUdfRlNfVkVSSVRZYCBpcyB0aGUgbWFpbiBlbmFibGVyLgoKTmV4dCwgSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBrZXkgc3ltYm9scyB0byBmb2N1cyBvbiBkdXJpbmcgZnV6emluZy4gSW4gYGZzL3hmcy94ZnNfZnN2ZXJpdHkuY2AsIHRoZSBmdW5jdGlvbnMgdGhhdCBzdGljayBvdXQgYXJlOiBgeGZzX2ZzdmVyaXR5X2dldF9kZXNjcmlwdG9yYCwgYHhmc19mc3Zlcml0eV93cml0ZV9kZXNjcmlwdG9yYCwgYHhmc19mc3Zlcml0eV9kZWxldGVfbWV0YWRhdGFgLCBgeGZzX2ZzdmVyaXR5X2NhbmNlbF91bndyaXR0ZW5gLCBgeGZzX2ZzdmVyaXR5X2JlZ2luX2VuYWJsZWAsIGB4ZnNfZnN2ZXJpdHlfZW5kX2VuYWJsZWAsIGB4ZnNfZnN2ZXJpdHlfcmVhZF9tZXJrbGVgLCBgeGZzX2ZzdmVyaXR5X3JlYWRhaGVhZF9tZXJrbGVfdHJlZWAsIGFuZCBgeGZzX2ZzdmVyaXR5X3dyaXRlX21lcmtsZWAuIFRoZW4sIHRoZXJlJiMzOTtzIGBmc3Zlcml0eV9wYWdlY2FjaGVfcmVhZGAgaW4gYGZzL3Zlcml0eS9wYWdlY2FjaGUuY2AuIEFuZCBmaW5hbGx5LCBpbiB0aGUgWEZTIHNjcnViIGNvZGUg4oCTIGBmcy94ZnMvc2NydWIvaW5vZGUuY2AsIGBmcy94ZnMvc2NydWIvaW5vZGVfcmVwYWlyLmNgLCBgZnMveGZzL3NjcnViL2NvbW1vbi5jYCDigJMgSSBzZWUgYHhjaGtfaW5vZGVfc2V0dXBfdmVyaXR5YCwgYHhjaGtfaW5vZGVfdmVyaXR5X2Jyb2tlbmAsIGFuZCBgeHJlcF9pbm9kZV92ZXJpdHlgLiBJIGNvbmZpcm1lZCB0aGUgeGZzIG9uZXMgYXJlIHJlYWNoYWJsZSB0aHJvdWdoIGBmc3Zlcml0eV9vcGVyYXRpb25zIHhmc19mc3Zlcml0eV9vcHNgLgoKQWxyaWdodCwgYSBmaW5hbCBjaGVjayBvbiB0aGUgY29uZmlnIG9wdGlvbnM6IGBDT05GSUdfRlNfVkVSSVRZYCwgYENPTkZJR19YRlNfRlNgLCBhbmQgZ2l2ZW4gdGhlIGludm9sdmVtZW50IG9mIHRoZSBzY3J1YiBjb2RlLCBsZXQmIzM5O3MgaW5jbHVkZSBgQ09ORklHX1hGU19PTkxJTkVfU0NSVUJgIHRvIGJlIHRob3JvdWdoLgoKTm93LCBsZXQmIzM5O3MgZ2V0IHRoZSByZXN1bHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDA0OjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtGU19WRVJJVFkmIzM0OywKICAgICYjMzQ7WEZTX0ZTJiMzNDssCiAgICAmIzM0O1hGU19PTkxJTkVfU0NSVUImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt4ZnNfZnN2ZXJpdHlfYmVnaW5fZW5hYmxlJiMzNDssCiAgICAmIzM0O3hmc19mc3Zlcml0eV9lbmRfZW5hYmxlJiMzNDssCiAgICAmIzM0O3hmc19mc3Zlcml0eV9nZXRfZGVzY3JpcHRvciYjMzQ7LAogICAgJiMzNDt4ZnNfZnN2ZXJpdHlfd3JpdGVfZGVzY3JpcHRvciYjMzQ7LAogICAgJiMzNDt4ZnNfZnN2ZXJpdHlfZGVsZXRlX21ldGFkYXRhJiMzNDssCiAgICAmIzM0O3hmc19mc3Zlcml0eV9jYW5jZWxfdW53cml0dGVuJiMzNDssCiAgICAmIzM0O3hmc19mc3Zlcml0eV9yZWFkX21lcmtsZSYjMzQ7LAogICAgJiMzNDt4ZnNfZnN2ZXJpdHlfcmVhZGFoZWFkX21lcmtsZV90cmVlJiMzNDssCiAgICAmIzM0O3hmc19mc3Zlcml0eV93cml0ZV9tZXJrbGUmIzM0OywKICAgICYjMzQ7ZnN2ZXJpdHlfcGFnZWNhY2hlX3JlYWQmIzM0OywKICAgICYjMzQ7eGNoa19pbm9kZV9zZXR1cF92ZXJpdHkmIzM0OywKICAgICYjMzQ7eGNoa19pbm9kZV92ZXJpdHlfYnJva2VuJiMzNDssCiAgICAmIzM0O3hyZXBfaW5vZGVfdmVyaXR5JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhpcyBwYXRjaCBzZXJpZXMgaW1wbGVtZW50cyBmcy12ZXJpdHkgc3VwcG9ydCBmb3IgdGhlIFhGUyBmaWxlc3lzdGVtLiBJdCBpbnRyb2R1Y2VzIG5ldyBtZXRhZGF0YSBoYW5kbGluZywgaW9jdGwgb3BlcmF0aW9ucywgYW5kIGludGVncmF0aW9uIHdpdGggWEZTJiMzOTtzIGlvbWFwIGFuZCBzY3J1YiBpbmZyYXN0cnVjdHVyZS4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgYWRkaXRpb24gdG8gYSBjb3JlIGZpbGVzeXN0ZW0gYW5kIHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCB0byBlbnN1cmUgZGF0YSBpbnRlZ3JpdHkgYW5kIHByZXZlbnQgdnVsbmVyYWJpbGl0aWVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtGU19WRVJJVFkmIzM0OywKICAgICYjMzQ7WEZTX0ZTJiMzNDssCiAgICAmIzM0O1hGU19PTkxJTkVfU0NSVUImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt4ZnNfZnN2ZXJpdHlfYmVnaW5fZW5hYmxlJiMzNDssCiAgICAmIzM0O3hmc19mc3Zlcml0eV9lbmRfZW5hYmxlJiMzNDssCiAgICAmIzM0O3hmc19mc3Zlcml0eV9nZXRfZGVzY3JpcHRvciYjMzQ7LAogICAgJiMzNDt4ZnNfZnN2ZXJpdHlfd3JpdGVfZGVzY3JpcHRvciYjMzQ7LAogICAgJiMzNDt4ZnNfZnN2ZXJpdHlfZGVsZXRlX21ldGFkYXRhJiMzNDssCiAgICAmIzM0O3hmc19mc3Zlcml0eV9jYW5jZWxfdW53cml0dGVuJiMzNDssCiAgICAmIzM0O3hmc19mc3Zlcml0eV9yZWFkX21lcmtsZSYjMzQ7LAogICAgJiMzNDt4ZnNfZnN2ZXJpdHlfcmVhZGFoZWFkX21lcmtsZV90cmVlJiMzNDssCiAgICAmIzM0O3hmc19mc3Zlcml0eV93cml0ZV9tZXJrbGUmIzM0OywKICAgICYjMzQ7ZnN2ZXJpdHlfcGFnZWNhY2hlX3JlYWQmIzM0OywKICAgICYjMzQ7eGNoa19pbm9kZV9zZXR1cF92ZXJpdHkmIzM0OywKICAgICYjMzQ7eGNoa19pbm9kZV92ZXJpdHlfYnJva2VuJiMzNDssCiAgICAmIzM0O3hyZXBfaW5vZGVfdmVyaXR5JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhpcyBwYXRjaCBzZXJpZXMgaW1wbGVtZW50cyBmcy12ZXJpdHkgc3VwcG9ydCBmb3IgdGhlIFhGUyBmaWxlc3lzdGVtLiBJdCBpbnRyb2R1Y2VzIG5ldyBtZXRhZGF0YSBoYW5kbGluZywgaW9jdGwgb3BlcmF0aW9ucywgYW5kIGludGVncmF0aW9uIHdpdGggWEZTJiMzOTtzIGlvbWFwIGFuZCBzY3J1YiBpbmZyYXN0cnVjdHVyZS4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgYWRkaXRpb24gdG8gYSBjb3JlIGZpbGVzeXN0ZW0gYW5kIHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCB0byBlbnN1cmUgZGF0YSBpbnRlZ3JpdHkgYW5kIHByZXZlbnQgdnVsbmVyYWJpbGl0aWVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMTFUMDQ6MTk6MDYuNTg3ODgwMTkyWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTkyOTkyMTQzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJGU19WRVJJVFlcIixcbiAgICBcIlhGU19GU1wiLFxuICAgIFwiWEZTX09OTElORV9TQ1JVQlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInhmc19mc3Zlcml0eV9iZWdpbl9lbmFibGVcIixcbiAgICBcInhmc19mc3Zlcml0eV9lbmRfZW5hYmxlXCIsXG4gICAgXCJ4ZnNfZnN2ZXJpdHlfZ2V0X2Rlc2NyaXB0b3JcIixcbiAgICBcInhmc19mc3Zlcml0eV93cml0ZV9kZXNjcmlwdG9yXCIsXG4gICAgXCJ4ZnNfZnN2ZXJpdHlfZGVsZXRlX21ldGFkYXRhXCIsXG4gICAgXCJ4ZnNfZnN2ZXJpdHlfY2FuY2VsX3Vud3JpdHRlblwiLFxuICAgIFwieGZzX2ZzdmVyaXR5X3JlYWRfbWVya2xlXCIsXG4gICAgXCJ4ZnNfZnN2ZXJpdHlfcmVhZGFoZWFkX21lcmtsZV90cmVlXCIsXG4gICAgXCJ4ZnNfZnN2ZXJpdHlfd3JpdGVfbWVya2xlXCIsXG4gICAgXCJmc3Zlcml0eV9wYWdlY2FjaGVfcmVhZFwiLFxuICAgIFwieGNoa19pbm9kZV9zZXR1cF92ZXJpdHlcIixcbiAgICBcInhjaGtfaW5vZGVfdmVyaXR5X2Jyb2tlblwiLFxuICAgIFwieHJlcF9pbm9kZV92ZXJpdHlcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoaXMgcGF0Y2ggc2VyaWVzIGltcGxlbWVudHMgZnMtdmVyaXR5IHN1cHBvcnQgZm9yIHRoZSBYRlMgZmlsZXN5c3RlbS4gSXQgaW50cm9kdWNlcyBuZXcgbWV0YWRhdGEgaGFuZGxpbmcsIGlvY3RsIG9wZXJhdGlvbnMsIGFuZCBpbnRlZ3JhdGlvbiB3aXRoIFhGUydzIGlvbWFwIGFuZCBzY3J1YiBpbmZyYXN0cnVjdHVyZS4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgYWRkaXRpb24gdG8gYSBjb3JlIGZpbGVzeXN0ZW0gYW5kIHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCB0byBlbnN1cmUgZGF0YSBpbnRlZ3JpdHkgYW5kIHByZXZlbnQgdnVsbmVyYWJpbGl0aWVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQwNDoxOTowNi41ODc4ODYzODJaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3Njc3MTIxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDU4MjJkMWNiMWVkODI4Nzk5NjgxZTYzNzQ3MjM3ZTM2OTVjMzg3NDFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBKdWwgMTEgMDQ6MTk6MDUgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZnMvYnRyZnMvdmVyaXR5LmMgYi9mcy9idHJmcy92ZXJpdHkuY1xcbmluZGV4IDk4MzM2NWE3MzU0MTY4Li5iZDc5ZTM0M2FlMjM3ZiAxMDA2NDRcXG4tLS0gYS9mcy9idHJmcy92ZXJpdHkuY1xcbisrKyBiL2ZzL2J0cmZzL3Zlcml0eS5jXFxuQEAgLTc3MywxMSArNzczLDE1IEBAIHN0YXRpYyBzdHJ1Y3QgcGFnZSAqYnRyZnNfcmVhZF9tZXJrbGVfdHJlZV9wYWdlKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuICAqIEBidWY6XFx0TWVya2xlIHRyZWUgYmxvY2sgdG8gd3JpdGVcXG4gICogQHBvczpcXHR0aGUgcG9zaXRpb24gb2YgdGhlIGJsb2NrIGluIHRoZSBNZXJrbGUgdHJlZSAoaW4gYnl0ZXMpXFxuICAqIEBzaXplOlxcdHRoZSBNZXJrbGUgdHJlZSBibG9jayBzaXplIChpbiBieXRlcylcXG4rICogQHplcm9fZGlnZXN0OlxcdHRoZSBoYXNoIG9mIHRoZSBhbGwtemVyb2VzIGJsb2NrXFxuKyAqIEBkaWdlc3Rfc2l6ZTpcXHRzaXplIG9mIHplcm9fZGlnZXN0LCBpbiBieXRlc1xcbiAgKlxcbiAgKiBSZXR1cm5zIDAgb24gc3VjY2VzcyBvciBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmVcXG4gICovXFxuIHN0YXRpYyBpbnQgYnRyZnNfd3JpdGVfbWVya2xlX3RyZWVfYmxvY2soc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IHZvaWQgKmJ1ZixcXG4tXFx0XFx0XFx0XFx0XFx0IHU2NCBwb3MsIHVuc2lnbmVkIGludCBzaXplKVxcbitcXHRcXHRcXHRcXHRcXHQgdTY0IHBvcywgdW5zaWduZWQgaW50IHNpemUsXFxuK1xcdFxcdFxcdFxcdFxcdCBjb25zdCB1OCAqemVyb19kaWdlc3QsXFxuK1xcdFxcdFxcdFxcdFxcdCB1bnNpZ25lZCBpbnQgZGlnZXN0X3NpemUpXFxuIHtcXG4gXFx0c3RydWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5vZGUoZmlsZSk7XFxuIFxcdGxvZmZfdCBtZXJrbGVfcG9zID0gbWVya2xlX2ZpbGVfcG9zKGlub2RlKTtcXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC92ZXJpdHkuYyBiL2ZzL2V4dDQvdmVyaXR5LmNcXG5pbmRleCBjYTYxZGE1M2YzMTNmYS4uYWM1YzEzM2Y1NTI5MjUgMTAwNjQ0XFxuLS0tIGEvZnMvZXh0NC92ZXJpdHkuY1xcbisrKyBiL2ZzL2V4dDQvdmVyaXR5LmNcXG5AQCAtMzQsMzIgKzM0LDYgQEAgc3RhdGljIGlubGluZSBsb2ZmX3QgZXh0NF92ZXJpdHlfbWV0YWRhdGFfcG9zKGNvbnN0IHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuIFxcdHJldHVybiByb3VuZF91cChpbm9kZS1cXHUwMDNlaV9zaXplLCA2NTUzNik7XFxuIH1cXG4gXFxuLS8qXFxuLSAqIFJlYWQgc29tZSB2ZXJpdHkgbWV0YWRhdGEgZnJvbSB0aGUgaW5vZGUuICBfX3Zmc19yZWFkKCkgY2FuJ3QgYmUgdXNlZCBiZWNhdXNlXFxuLSAqIHdlIG5lZWQgdG8gcmVhZCBiZXlvbmQgaV9zaXplLlxcbi0gKi9cXG4tc3RhdGljIGludCBwYWdlY2FjaGVfcmVhZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCB2b2lkICpidWYsIHNpemVfdCBjb3VudCxcXG4tXFx0XFx0XFx0ICBsb2ZmX3QgcG9zKVxcbi17XFxuLVxcdHdoaWxlIChjb3VudCkge1xcbi1cXHRcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xcbi1cXHRcXHRzaXplX3QgbjtcXG4tXFxuLVxcdFxcdGZvbGlvID0gcmVhZF9tYXBwaW5nX2ZvbGlvKGlub2RlLVxcdTAwM2VpX21hcHBpbmcsIHBvcyBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZULFxcbi1cXHRcXHRcXHRcXHRcXHQgTlVMTCk7XFxuLVxcdFxcdGlmIChJU19FUlIoZm9saW8pKVxcbi1cXHRcXHRcXHRyZXR1cm4gUFRSX0VSUihmb2xpbyk7XFxuLVxcbi1cXHRcXHRuID0gbWVtY3B5X2Zyb21fZmlsZV9mb2xpbyhidWYsIGZvbGlvLCBwb3MsIGNvdW50KTtcXG4tXFx0XFx0Zm9saW9fcHV0KGZvbGlvKTtcXG4tXFxuLVxcdFxcdGJ1ZiArPSBuO1xcbi1cXHRcXHRwb3MgKz0gbjtcXG4tXFx0XFx0Y291bnQgLT0gbjtcXG4tXFx0fVxcbi1cXHRyZXR1cm4gMDtcXG4tfVxcbi1cXG4gLypcXG4gICogV3JpdGUgc29tZSB2ZXJpdHkgbWV0YWRhdGEgdG8gdGhlIGlub2RlIGZvciBGU19JT0NfRU5BQkxFX1ZFUklUWS5cXG4gICoga2VybmVsX3dyaXRlKCkgY2FuJ3QgYmUgdXNlZCBiZWNhdXNlIHRoZSBmaWxlIGRlc2NyaXB0b3IgaXMgcmVhZG9ubHkuXFxuQEAgLTMxMSw4ICsyODUsOCBAQCBzdGF0aWMgaW50IGV4dDRfZ2V0X3Zlcml0eV9kZXNjcmlwdG9yX2xvY2F0aW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuIFxcdFxcdGdvdG8gYmFkO1xcbiBcXHRkZXNjX3NpemVfcG9zIC09IHNpemVvZihkZXNjX3NpemVfZGlzayk7XFxuIFxcbi1cXHRlcnIgPSBwYWdlY2FjaGVfcmVhZChpbm9kZSwgXFx1MDAyNmRlc2Nfc2l6ZV9kaXNrLCBzaXplb2YoZGVzY19zaXplX2Rpc2spLFxcbi1cXHRcXHRcXHQgICAgIGRlc2Nfc2l6ZV9wb3MpO1xcbitcXHRlcnIgPSBmc3Zlcml0eV9wYWdlY2FjaGVfcmVhZChpbm9kZSwgXFx1MDAyNmRlc2Nfc2l6ZV9kaXNrLFxcbitcXHRcXHRcXHRcXHQgICAgICBzaXplb2YoZGVzY19zaXplX2Rpc2spLCBkZXNjX3NpemVfcG9zKTtcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG4gXFx0ZGVzY19zaXplID0gbGUzMl90b19jcHUoZGVzY19zaXplX2Rpc2spO1xcbkBAIC0zNTIsNyArMzI2LDcgQEAgc3RhdGljIGludCBleHQ0X2dldF92ZXJpdHlfZGVzY3JpcHRvcihzdHJ1Y3QgaW5vZGUgKmlub2RlLCB2b2lkICpidWYsXFxuIFxcdGlmIChidWZfc2l6ZSkge1xcbiBcXHRcXHRpZiAoZGVzY19zaXplIFxcdTAwM2UgYnVmX3NpemUpXFxuIFxcdFxcdFxcdHJldHVybiAtRVJBTkdFO1xcbi1cXHRcXHRlcnIgPSBwYWdlY2FjaGVfcmVhZChpbm9kZSwgYnVmLCBkZXNjX3NpemUsIGRlc2NfcG9zKTtcXG4rXFx0XFx0ZXJyID0gZnN2ZXJpdHlfcGFnZWNhY2hlX3JlYWQoaW5vZGUsIGJ1ZiwgZGVzY19zaXplLCBkZXNjX3Bvcyk7XFxuIFxcdFxcdGlmIChlcnIpXFxuIFxcdFxcdFxcdHJldHVybiBlcnI7XFxuIFxcdH1cXG5AQCAtMzc0LDcgKzM0OCw5IEBAIHN0YXRpYyB2b2lkIGV4dDRfcmVhZGFoZWFkX21lcmtsZV90cmVlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHBnb2ZmX3QgaW5kZXgsXFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgZXh0NF93cml0ZV9tZXJrbGVfdHJlZV9ibG9jayhzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3Qgdm9pZCAqYnVmLFxcbi1cXHRcXHRcXHRcXHRcXHR1NjQgcG9zLCB1bnNpZ25lZCBpbnQgc2l6ZSlcXG4rXFx0XFx0XFx0XFx0XFx0dTY0IHBvcywgdW5zaWduZWQgaW50IHNpemUsXFxuK1xcdFxcdFxcdFxcdFxcdGNvbnN0IHU4ICp6ZXJvX2RpZ2VzdCxcXG4rXFx0XFx0XFx0XFx0XFx0dW5zaWduZWQgaW50IGRpZ2VzdF9zaXplKVxcbiB7XFxuIFxcdHBvcyArPSBleHQ0X3Zlcml0eV9tZXRhZGF0YV9wb3MoZmlsZV9pbm9kZShmaWxlKSk7XFxuIFxcbmRpZmYgLS1naXQgYS9mcy9mMmZzL3Zlcml0eS5jIGIvZnMvZjJmcy92ZXJpdHkuY1xcbmluZGV4IDM5ZjQ4MjUxNTQ0NTJhLi5mM2E0NjE3NjU2ZGI5YiAxMDA2NDRcXG4tLS0gYS9mcy9mMmZzL3Zlcml0eS5jXFxuKysrIGIvZnMvZjJmcy92ZXJpdHkuY1xcbkBAIC0zNywzNCArMzcsNiBAQCBzdGF0aWMgaW5saW5lIGxvZmZfdCBmMmZzX3Zlcml0eV9tZXRhZGF0YV9wb3MoY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSlcXG4gXFx0cmV0dXJuIHJvdW5kX3VwKGlub2RlLVxcdTAwM2VpX3NpemUsIDY1NTM2KTtcXG4gfVxcbiBcXG4tLypcXG4tICogUmVhZCBzb21lIHZlcml0eSBtZXRhZGF0YSBmcm9tIHRoZSBpbm9kZS4gIF9fdmZzX3JlYWQoKSBjYW4ndCBiZSB1c2VkIGJlY2F1c2VcXG4tICogd2UgbmVlZCB0byByZWFkIGJleW9uZCBpX3NpemUuXFxuLSAqL1xcbi1zdGF0aWMgaW50IHBhZ2VjYWNoZV9yZWFkKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHZvaWQgKmJ1Ziwgc2l6ZV90IGNvdW50LFxcbi1cXHRcXHRcXHQgIGxvZmZfdCBwb3MpXFxuLXtcXG4tXFx0d2hpbGUgKGNvdW50KSB7XFxuLVxcdFxcdHNpemVfdCBuID0gbWluX3Qoc2l6ZV90LCBjb3VudCxcXG4tXFx0XFx0XFx0XFx0IFBBR0VfU0laRSAtIG9mZnNldF9pbl9wYWdlKHBvcykpO1xcbi1cXHRcXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcXG4tXFxuLVxcdFxcdHBhZ2UgPSByZWFkX21hcHBpbmdfcGFnZShpbm9kZS1cXHUwMDNlaV9tYXBwaW5nLCBwb3MgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVCxcXG4tXFx0XFx0XFx0XFx0XFx0IE5VTEwpO1xcbi1cXHRcXHRpZiAoSVNfRVJSKHBhZ2UpKVxcbi1cXHRcXHRcXHRyZXR1cm4gUFRSX0VSUihwYWdlKTtcXG4tXFxuLVxcdFxcdG1lbWNweV9mcm9tX3BhZ2UoYnVmLCBwYWdlLCBvZmZzZXRfaW5fcGFnZShwb3MpLCBuKTtcXG4tXFxuLVxcdFxcdHB1dF9wYWdlKHBhZ2UpO1xcbi1cXG4tXFx0XFx0YnVmICs9IG47XFxuLVxcdFxcdHBvcyArPSBuO1xcbi1cXHRcXHRjb3VudCAtPSBuO1xcbi1cXHR9XFxuLVxcdHJldHVybiAwO1xcbi19XFxuLVxcbiAvKlxcbiAgKiBXcml0ZSBzb21lIHZlcml0eSBtZXRhZGF0YSB0byB0aGUgaW5vZGUgZm9yIEZTX0lPQ19FTkFCTEVfVkVSSVRZLlxcbiAgKiBrZXJuZWxfd3JpdGUoKSBjYW4ndCBiZSB1c2VkIGJlY2F1c2UgdGhlIGZpbGUgZGVzY3JpcHRvciBpcyByZWFkb25seS5cXG5AQCAtMjUwLDcgKzIyMiw3IEBAIHN0YXRpYyBpbnQgZjJmc19nZXRfdmVyaXR5X2Rlc2NyaXB0b3Ioc3RydWN0IGlub2RlICppbm9kZSwgdm9pZCAqYnVmLFxcbiBcXHRpZiAoYnVmX3NpemUpIHtcXG4gXFx0XFx0aWYgKHNpemUgXFx1MDAzZSBidWZfc2l6ZSlcXG4gXFx0XFx0XFx0cmV0dXJuIC1FUkFOR0U7XFxuLVxcdFxcdHJlcyA9IHBhZ2VjYWNoZV9yZWFkKGlub2RlLCBidWYsIHNpemUsIHBvcyk7XFxuK1xcdFxcdHJlcyA9IGZzdmVyaXR5X3BhZ2VjYWNoZV9yZWFkKGlub2RlLCBidWYsIHNpemUsIHBvcyk7XFxuIFxcdFxcdGlmIChyZXMpXFxuIFxcdFxcdFxcdHJldHVybiByZXM7XFxuIFxcdH1cXG5AQCAtMjcyLDcgKzI0NCw5IEBAIHN0YXRpYyB2b2lkIGYyZnNfcmVhZGFoZWFkX21lcmtsZV90cmVlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHBnb2ZmX3QgaW5kZXgsXFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgZjJmc193cml0ZV9tZXJrbGVfdHJlZV9ibG9jayhzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3Qgdm9pZCAqYnVmLFxcbi1cXHRcXHRcXHRcXHRcXHR1NjQgcG9zLCB1bnNpZ25lZCBpbnQgc2l6ZSlcXG4rXFx0XFx0XFx0XFx0XFx0dTY0IHBvcywgdW5zaWduZWQgaW50IHNpemUsXFxuK1xcdFxcdFxcdFxcdFxcdGNvbnN0IHU4ICp6ZXJvX2RpZ2VzdCxcXG4rXFx0XFx0XFx0XFx0XFx0dW5zaWduZWQgaW50IGRpZ2VzdF9zaXplKVxcbiB7XFxuIFxcdHBvcyArPSBmMmZzX3Zlcml0eV9tZXRhZGF0YV9wb3MoZmlsZV9pbm9kZShmaWxlKSk7XFxuIFxcbmRpZmYgLS1naXQgYS9mcy9maWxlX2F0dHIuYyBiL2ZzL2ZpbGVfYXR0ci5jXFxuaW5kZXggYmZiMDBkMjU2ZGQ1NjAuLjU0MjRlYzRlMzk0OTNmIDEwMDY0NFxcbi0tLSBhL2ZzL2ZpbGVfYXR0ci5jXFxuKysrIGIvZnMvZmlsZV9hdHRyLmNcXG5AQCAtMjQ2LDYgKzI0NiwxMSBAQCBzdGF0aWMgaW50IGZpbGVhdHRyX3NldF9wcmVwYXJlKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuIFxcdGlmIChmYS1cXHUwMDNlZnN4X2Nvd2V4dHNpemUgPT0gMClcXG4gXFx0XFx0ZmEtXFx1MDAzZWZzeF94ZmxhZ3MgXFx1MDAyNj0gfkZTX1hGTEFHX0NPV0VYVFNJWkU7XFxuIFxcbitcXHQvKiBDYW4gbm90IGVuYWJsZSBEQVggb24gZnN2ZXJpdHkgZmlsZSAqL1xcbitcXHRpZiAoKG9sZF9tYS1cXHUwMDNlZnN4X3hmbGFncyBcXHUwMDI2IEZTX1hGTEFHX1ZFUklUWSkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0XFx0ZmEtXFx1MDAzZWZzeF94ZmxhZ3MgXFx1MDAyNiBGU19YRkxBR19EQVgpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL2ZzL3Zlcml0eS9lbmFibGUuYyBiL2ZzL3Zlcml0eS9lbmFibGUuY1xcbmluZGV4IDQyZGZlZDFjZTBjZTY2Li5hZDRmZjcxZDdkZDk1YiAxMDA2NDRcXG4tLS0gYS9mcy92ZXJpdHkvZW5hYmxlLmNcXG4rKysgYi9mcy92ZXJpdHkvZW5hYmxlLmNcXG5AQCAtNTAsNyArNTAsOSBAQCBzdGF0aWMgaW50IHdyaXRlX21lcmtsZV90cmVlX2Jsb2NrKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCB1OCAqYnVmLFxcbiBcXHRpbnQgZXJyO1xcbiBcXG4gXFx0ZXJyID0gaW5vZGUtXFx1MDAzZWlfc2ItXFx1MDAzZXNfdm9wLVxcdTAwM2V3cml0ZV9tZXJrbGVfdHJlZV9ibG9jayhmaWxlLCBidWYsIHBvcyxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBwYXJhbXMtXFx1MDAzZWJsb2NrX3NpemUpO1xcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgIHBhcmFtcy1cXHUwMDNlYmxvY2tfc2l6ZSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBwYXJhbXMtXFx1MDAzZXplcm9fZGlnZXN0LFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgIHBhcmFtcy1cXHUwMDNlZGlnZXN0X3NpemUpO1xcbiBcXHRpZiAoZXJyKVxcbiBcXHRcXHRmc3Zlcml0eV9lcnIoaW5vZGUsIFxcXCJFcnJvciAlZCB3cml0aW5nIE1lcmtsZSB0cmVlIGJsb2NrICVsdVxcXCIsXFxuIFxcdFxcdFxcdCAgICAgZXJyLCBpbmRleCk7XFxuZGlmZiAtLWdpdCBhL2ZzL3Zlcml0eS9vcGVuLmMgYi9mcy92ZXJpdHkvb3Blbi5jXFxuaW5kZXggZDBjNTZhN2ZhYTNiYjEuLjg3NWU4ODUwY2NiYWNlIDEwMDY0NFxcbi0tLSBhL2ZzL3Zlcml0eS9vcGVuLmNcXG4rKysgYi9mcy92ZXJpdHkvb3Blbi5jXFxuQEAgLTM0Nyw3ICszNDcsMjQgQEAgaW50IGZzdmVyaXR5X2dldF9kZXNjcmlwdG9yKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IGVuc3VyZV92ZXJpdHlfaW5mbyhzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbisvKipcXG4rICogZnN2ZXJpdHlfZW5zdXJlX3Zlcml0eV9pbmZvKCkgLSBjYWNoZSB2ZXJpdHkgaW5mbyBpZiBpdCdzIG5vdCBhbHJlYWR5IGNhY2hlZFxcbisgKiBAaW5vZGU6IHRoZSBpbm9kZSBmb3Igd2hpY2ggdmVyaXR5IGluZm8gc2hvdWxkIGJlIGNhY2hlZFxcbisgKlxcbisgKiBFbnN1cmUgdGhpcyBpbm9kZSBoYXMgdmVyaXR5IGluZm8gYXR0YWNoZWQgdG8gaXQsIGl0J3MgYXNzdW1lZCB0aGUgaW5vZGVcXG4rICogYWxyZWFkeSBoYXMgZnN2ZXJpdHkgZW5hYmxlZC4gUmVhZCBmc3Zlcml0eSBkZXNjcmlwdG9yIGFuZCBjcmVhdGVzIHZlcml0eVxcbisgKiBiYXNlZCBvbiB0aGF0LlxcbisgKlxcbisgKiBUaGlzIG5lZWRzIHRvIGJlIGNhbGxlZCBhdCBsZWFzdCBvbmNlIGJlZm9yZSBhbnkgb2YgdGhlIGlub2RlJ3MgZGF0YVxcbisgKiBjYW4gYmUgdmVyaWZpZWQgKGFuZCB0aHVzIHJlYWQgYXQgYWxsKSBvciB0aGUgaW5vZGUncyBmc3Zlcml0eSBkaWdlc3RcXG4rICogcmV0cmlldmVkLiAgZnN2ZXJpdHlfZmlsZV9vcGVuKCkgY2FsbHMgdGhpcyBhbHJlYWR5LCB3aGljaCBoYW5kbGVzXFxuKyAqIG5vcm1hbCBmaWxlIGFjY2Vzc2VzLiAgSWYgYSBmaWxlc3lzdGVtIGRvZXMgYW55IGludGVybmFsIChpLmUuIG5vdFxcbisgKiBhc3NvY2lhdGVkIHdpdGggYSBmaWxlIGRlc2NyaXB0b3IpIHJlYWRzIG9mIHRoZSBmaWxlJ3MgZGF0YSBvclxcbisgKiBmc3Zlcml0eSBkaWdlc3QsIGl0IG11c3QgY2FsbCB0aGlzIGV4cGxpY2l0bHkgYmVmb3JlIGRvaW5nIHNvLlxcbisgKlxcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgLWVycm5vIG9uIGZhaWx1cmVcXG4rICovXFxuK2ludCBmc3Zlcml0eV9lbnN1cmVfdmVyaXR5X2luZm8oc3RydWN0IGlub2RlICppbm9kZSlcXG4ge1xcbiBcXHRzdHJ1Y3QgZnN2ZXJpdHlfaW5mbyAqdmkgPSBmc3Zlcml0eV9nZXRfaW5mbyhpbm9kZSksICpmb3VuZDtcXG4gXFx0c3RydWN0IGZzdmVyaXR5X2Rlc2NyaXB0b3IgKmRlc2M7XFxuQEAgLTM4MywxMiArNDAwLDEzIEBAIHN0YXRpYyBpbnQgZW5zdXJlX3Zlcml0eV9pbmZvKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuIFxcdGtmcmVlKGRlc2MpO1xcbiBcXHRyZXR1cm4gZXJyO1xcbiB9XFxuK0VYUE9SVF9TWU1CT0xfR1BMKGZzdmVyaXR5X2Vuc3VyZV92ZXJpdHlfaW5mbyk7XFxuIFxcbiBpbnQgX19mc3Zlcml0eV9maWxlX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApXFxuIHtcXG4gXFx0aWYgKGZpbHAtXFx1MDAzZWZfbW9kZSBcXHUwMDI2IEZNT0RFX1dSSVRFKVxcbiBcXHRcXHRyZXR1cm4gLUVQRVJNO1xcbi1cXHRyZXR1cm4gZW5zdXJlX3Zlcml0eV9pbmZvKGlub2RlKTtcXG4rXFx0cmV0dXJuIGZzdmVyaXR5X2Vuc3VyZV92ZXJpdHlfaW5mbyhpbm9kZSk7XFxuIH1cXG4gRVhQT1JUX1NZTUJPTF9HUEwoX19mc3Zlcml0eV9maWxlX29wZW4pO1xcbiBcXG5kaWZmIC0tZ2l0IGEvZnMvdmVyaXR5L3BhZ2VjYWNoZS5jIGIvZnMvdmVyaXR5L3BhZ2VjYWNoZS5jXFxuaW5kZXggOTlmNWY1M2VlYTk4NWYuLjI3MGFiZDY1MmU0OGM2IDEwMDY0NFxcbi0tLSBhL2ZzL3Zlcml0eS9wYWdlY2FjaGUuY1xcbisrKyBiL2ZzL3Zlcml0eS9wYWdlY2FjaGUuY1xcbkBAIC02OCwxMyArNjgsNjQgQEAgRVhQT1JUX1NZTUJPTF9HUEwoZ2VuZXJpY19yZWFkYWhlYWRfbWVya2xlX3RyZWUpO1xcbiB2b2lkIGZzdmVyaXR5X2ZpbGxfemVyb2hhc2goc3RydWN0IGZvbGlvICpmb2xpbywgc2l6ZV90IG9mZnNldCwgc2l6ZV90IGxlbixcXG4gXFx0XFx0XFx0ICAgICAgc3RydWN0IGZzdmVyaXR5X2luZm8gKnZpKVxcbiB7XFxuLVxcdHNpemVfdCBvZmYgPSBvZmZzZXQ7XFxuK1xcdHZvaWQgKnZhZGRyO1xcbitcXHR2b2lkICp0bztcXG4rXFx0c2l6ZV90IGNodW5rO1xcbiBcXG4gXFx0V0FSTl9PTl9PTkNFKCFJU19BTElHTkVEKG9mZnNldCwgdmktXFx1MDAzZXRyZWVfcGFyYW1zLmRpZ2VzdF9zaXplKSk7XFxuIFxcdFdBUk5fT05fT05DRSghSVNfQUxJR05FRChsZW4sIHZpLVxcdTAwM2V0cmVlX3BhcmFtcy5kaWdlc3Rfc2l6ZSkpO1xcbitcXHRXQVJOX09OX09OQ0Uob2Zmc2V0ICsgbGVuIFxcdTAwM2UgZm9saW9fc2l6ZShmb2xpbykpO1xcbiBcXG4tXFx0Zm9yICg7IG9mZiBcXHUwMDNjIChvZmZzZXQgKyBsZW4pOyBvZmYgKz0gdmktXFx1MDAzZXRyZWVfcGFyYW1zLmRpZ2VzdF9zaXplKVxcbi1cXHRcXHRtZW1jcHlfdG9fZm9saW8oZm9saW8sIG9mZiwgdmktXFx1MDAzZXRyZWVfcGFyYW1zLnplcm9fZGlnZXN0LFxcbitcXHRkbyB7XFxuK1xcdFxcdHZhZGRyID0ga21hcF9sb2NhbF9mb2xpbyhmb2xpbywgb2Zmc2V0KTtcXG4rXFx0XFx0Y2h1bmsgPSBsZW47XFxuK1xcdFxcdHRvID0gdmFkZHI7XFxuK1xcbitcXHRcXHRpZiAoZm9saW9fdGVzdF9wYXJ0aWFsX2ttYXAoZm9saW8pIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICBjaHVuayBcXHUwMDNlIFBBR0VfU0laRSAtIG9mZnNldF9pbl9wYWdlKG9mZnNldCkpXFxuK1xcdFxcdFxcdGNodW5rID0gUEFHRV9TSVpFIC0gb2Zmc2V0X2luX3BhZ2Uob2Zmc2V0KTtcXG4rXFx0XFx0Zm9yICg7IHRvIFxcdTAwM2MgKHZhZGRyICsgY2h1bmspOyB0byArPSB2aS1cXHUwMDNldHJlZV9wYXJhbXMuZGlnZXN0X3NpemUpXFxuK1xcdFxcdFxcdG1lbWNweSh0bywgdmktXFx1MDAzZXRyZWVfcGFyYW1zLnplcm9fZGlnZXN0LFxcbiBcXHRcXHRcXHRcXHR2aS1cXHUwMDNldHJlZV9wYXJhbXMuZGlnZXN0X3NpemUpO1xcbitcXHRcXHRrdW5tYXBfbG9jYWwodmFkZHIpO1xcbitcXG4rXFx0XFx0b2Zmc2V0ICs9IGNodW5rO1xcbitcXHRcXHRsZW4gLT0gY2h1bms7XFxuK1xcdH0gd2hpbGUgKGxlbiBcXHUwMDNlIDApO1xcbitcXG4rXFx0Zmx1c2hfZGNhY2hlX2ZvbGlvKGZvbGlvKTtcXG4gfVxcbiBFWFBPUlRfU1lNQk9MX0dQTChmc3Zlcml0eV9maWxsX3plcm9oYXNoKTtcXG4rXFxuKy8qKlxcbisgKiBmc3Zlcml0eV9wYWdlY2FjaGVfcmVhZCgpIC0gcmVhZCBwYWdlIGFuZCBjb3B5IGRhdGEgdG8gYnVmZmVyXFxuKyAqIEBpbm9kZTpcXHRjb3B5IGZyb20gdGhpcyBpbm9kZSdzIGFkZHJlc3Mgc3BhY2VcXG4rICogQGJ1ZjpcXHRidWZmZXIgdG8gY29weSB0b1xcbisgKiBAY291bnQ6XFx0bnVtYmVyIG9mIGJ5dGVzIHRvIGNvcHlcXG4rICogQHBvczpcXHRwb3NpdGlvbiBvZiB0aGUgZm9saW8gdG8gY29weSBmcm9tXFxuKyAqXFxuKyAqIFJlYWQgc29tZSB2ZXJpdHkgbWV0YWRhdGEgZnJvbSB0aGUgaW5vZGUuICBfX3Zmc19yZWFkKCkgY2FuJ3QgYmUgdXNlZCBiZWNhdXNlXFxuKyAqIHdlIG5lZWQgdG8gcmVhZCBiZXlvbmQgaV9zaXplLlxcbisgKi9cXG4raW50IGZzdmVyaXR5X3BhZ2VjYWNoZV9yZWFkKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHZvaWQgKmJ1Ziwgc2l6ZV90IGNvdW50LFxcbitcXHRcXHRcXHQgIGxvZmZfdCBwb3MpXFxuK3tcXG4rXFx0d2hpbGUgKGNvdW50KSB7XFxuK1xcdFxcdHN0cnVjdCBmb2xpbyAqZm9saW87XFxuK1xcdFxcdHNpemVfdCBuO1xcbitcXG4rXFx0XFx0Zm9saW8gPSByZWFkX21hcHBpbmdfZm9saW8oaW5vZGUtXFx1MDAzZWlfbWFwcGluZywgcG9zIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQsXFxuK1xcdFxcdFxcdFxcdFxcdCBOVUxMKTtcXG4rXFx0XFx0aWYgKElTX0VSUihmb2xpbykpXFxuK1xcdFxcdFxcdHJldHVybiBQVFJfRVJSKGZvbGlvKTtcXG4rXFxuK1xcdFxcdG4gPSBtZW1jcHlfZnJvbV9maWxlX2ZvbGlvKGJ1ZiwgZm9saW8sIHBvcywgY291bnQpO1xcbitcXHRcXHRmb2xpb19wdXQoZm9saW8pO1xcbitcXG4rXFx0XFx0YnVmICs9IG47XFxuK1xcdFxcdHBvcyArPSBuO1xcbitcXHRcXHRjb3VudCAtPSBuO1xcbitcXHR9XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfR1BMKGZzdmVyaXR5X3BhZ2VjYWNoZV9yZWFkKTtcXG5kaWZmIC0tZ2l0IGEvZnMvdmVyaXR5L3ZlcmlmeS5jIGIvZnMvdmVyaXR5L3ZlcmlmeS5jXFxuaW5kZXggNDAwNGExZDQyODc1MWYuLmRiOGMzNTAyMzRiYjcxIDEwMDY0NFxcbi0tLSBhL2ZzL3Zlcml0eS92ZXJpZnkuY1xcbisrKyBiL2ZzL3Zlcml0eS92ZXJpZnkuY1xcbkBAIC05LDYgKzksNyBAQFxcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Jpby5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZXhwb3J0LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9mc2Vycm9yLmhcXHUwMDNlXFxuIFxcbiAjZGVmaW5lIEZTX1ZFUklUWV9NQVhfUEVORElOR19CTE9DS1MgMlxcbiBcXG5AQCAtMjA1LDYgKzIwNiw4IEBAIHN0YXRpYyBib29sIHZlcmlmeV9kYXRhX2Jsb2NrKHN0cnVjdCBmc3Zlcml0eV9pbmZvICp2aSxcXG4gXFx0XFx0aWYgKG1lbWNocl9pbnYoZGJsb2NrLVxcdTAwM2VkYXRhLCAwLCBwYXJhbXMtXFx1MDAzZWJsb2NrX3NpemUpKSB7XFxuIFxcdFxcdFxcdGZzdmVyaXR5X2Vycihpbm9kZSxcXG4gXFx0XFx0XFx0XFx0ICAgICBcXFwiRklMRSBDT1JSVVBURUQhICBEYXRhIHBhc3QgRU9GIGlzIG5vdCB6ZXJvZWRcXFwiKTtcXG4rXFx0XFx0XFx0ZnNlcnJvcl9yZXBvcnRfZGF0YV9sb3N0KGlub2RlLCBkYXRhX3BvcyxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0IHBhcmFtcy1cXHUwMDNlYmxvY2tfc2l6ZSwgR0ZQX05PRlMpO1xcbiBcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcdFxcdH1cXG4gXFx0XFx0cmV0dXJuIHRydWU7XFxuQEAgLTMxMiw2ICszMTUsNyBAQCBzdGF0aWMgYm9vbCB2ZXJpZnlfZGF0YV9ibG9jayhzdHJ1Y3QgZnN2ZXJpdHlfaW5mbyAqdmksXFxuIFxcdFxcdGRhdGFfcG9zLCBsZXZlbCAtIDEsIHBhcmFtcy1cXHUwMDNlaGFzaF9hbGctXFx1MDAzZW5hbWUsIGhzaXplLCB3YW50X2hhc2gsXFxuIFxcdFxcdHBhcmFtcy1cXHUwMDNlaGFzaF9hbGctXFx1MDAzZW5hbWUsIGhzaXplLFxcbiBcXHRcXHRsZXZlbCA9PSAwID8gZGJsb2NrLVxcdTAwM2VyZWFsX2hhc2ggOiByZWFsX2hhc2gpO1xcbitcXHRmc2Vycm9yX3JlcG9ydF9kYXRhX2xvc3QoaW5vZGUsIGRhdGFfcG9zLCBwYXJhbXMtXFx1MDAzZWJsb2NrX3NpemUsIEdGUF9OT0ZTKTtcXG4gZXJyb3I6XFxuIFxcdGZvciAoOyBsZXZlbCBcXHUwMDNlIDA7IGxldmVsLS0pIHtcXG4gXFx0XFx0a3VubWFwX2xvY2FsKGhibG9ja3NbbGV2ZWwgLSAxXS5hZGRyKTtcXG5kaWZmIC0tZ2l0IGEvZnMveGZzL01ha2VmaWxlIGIvZnMveGZzL01ha2VmaWxlXFxuaW5kZXggOWY3MTMzZTAyNTc2OGQuLjM4YjdmNTFlNWQ4NDA1IDEwMDY0NFxcbi0tLSBhL2ZzL3hmcy9NYWtlZmlsZVxcbisrKyBiL2ZzL3hmcy9NYWtlZmlsZVxcbkBAIC0xNDksNiArMTQ5LDcgQEAgeGZzLSQoQ09ORklHX1hGU19QT1NJWF9BQ0wpXFx0Kz0geGZzX2FjbC5vXFxuIHhmcy0kKENPTkZJR19TWVNDVEwpXFx0XFx0Kz0geGZzX3N5c2N0bC5vXFxuIHhmcy0kKENPTkZJR19DT01QQVQpXFx0XFx0Kz0geGZzX2lvY3RsMzIub1xcbiB4ZnMtJChDT05GSUdfRVhQT1JURlNfQkxPQ0tfT1BTKVxcdCs9IHhmc19wbmZzLm9cXG4reGZzLSQoQ09ORklHX0ZTX1ZFUklUWSlcXHRcXHQrPSB4ZnNfZnN2ZXJpdHkub1xcbiBcXG4gIyBub3RpZnkgZmFpbHVyZVxcbiBpZmVxICgkKENPTkZJR19NRU1PUllfRkFJTFVSRSkseSlcXG5kaWZmIC0tZ2l0IGEvZnMveGZzL2xpYnhmcy94ZnNfYm1hcC5jIGIvZnMveGZzL2xpYnhmcy94ZnNfYm1hcC5jXFxuaW5kZXggZDY0ZGVmZWRhNjQ1ZWQuLmNjNDhmNmUyMGU4MDAwIDEwMDY0NFxcbi0tLSBhL2ZzL3hmcy9saWJ4ZnMveGZzX2JtYXAuY1xcbisrKyBiL2ZzL3hmcy9saWJ4ZnMveGZzX2JtYXAuY1xcbkBAIC00MSw2ICs0MSw4IEBAXFxuICNpbmNsdWRlIFxcXCJ4ZnNfaW5vZGVfdXRpbC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwieGZzX3J0Z3JvdXAuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInhmc196b25lX2FsbG9jLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJ4ZnNfZnN2ZXJpdHkuaFxcXCJcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ZzdmVyaXR5LmhcXHUwMDNlXFxuIFxcbiBzdHJ1Y3Qga21lbV9jYWNoZVxcdFxcdCp4ZnNfYm1hcF9pbnRlbnRfY2FjaGU7XFxuIFxcbkBAIC00NDAyLDYgKzQ0MDQsMTAgQEAgeGZzX2JtYXBpX2NvbnZlcnRfb25lX2RlbGFsbG9jKFxcbiBcXHQgKiB0aGUgZXh0ZW50LiAgSnVzdCByZXR1cm4gdGhlIHJlYWwgZXh0ZW50IGF0IHRoaXMgb2Zmc2V0LlxcbiBcXHQgKi9cXG4gXFx0aWYgKCFpc251bGxzdGFydGJsb2NrKGJtYS5nb3QuYnJfc3RhcnRibG9jaykpIHtcXG4rXFx0XFx0aWYgKHhmc19pZmxhZ3NfdGVzdChpcCwgWEZTX1ZFUklUWV9DT05TVFJVQ1RJT04pIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICBYRlNfRlNCX1RPX0IobXAsIGJtYS5nb3QuYnJfc3RhcnRvZmYpIFxcdTAwM2U9XFxuK1xcdFxcdFxcdCAgICB4ZnNfZnN2ZXJpdHlfbWV0YWRhdGFfb2Zmc2V0KGlwKSlcXG4rXFx0XFx0XFx0ZmxhZ3MgfD0gSU9NQVBfRl9GU1ZFUklUWTtcXG4gXFx0XFx0eGZzX2JtYnRfdG9faW9tYXAoaXAsIGlvbWFwLCBcXHUwMDI2Ym1hLmdvdCwgMCwgZmxhZ3MsXFxuIFxcdFxcdFxcdFxcdHhmc19pb21hcF9pbm9kZV9zZXF1ZW5jZShpcCwgZmxhZ3MpKTtcXG4gXFx0XFx0aWYgKHNlcSlcXG5AQCAtNDQ0OSw2ICs0NDU1LDExIEBAIHhmc19ibWFwaV9jb252ZXJ0X29uZV9kZWxhbGxvYyhcXG4gXFx0WEZTX1NUQVRTX0FERChtcCwgeHNfeHN0cmF0X2J5dGVzLCBYRlNfRlNCX1RPX0IobXAsIGJtYS5sZW5ndGgpKTtcXG4gXFx0WEZTX1NUQVRTX0lOQyhtcCwgeHNfeHN0cmF0X3F1aWNrKTtcXG4gXFxuK1xcdGlmICh4ZnNfaWZsYWdzX3Rlc3QoaXAsIFhGU19WRVJJVFlfQ09OU1RSVUNUSU9OKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgWEZTX0ZTQl9UT19CKG1wLCBibWEuZ290LmJyX3N0YXJ0b2ZmKSBcXHUwMDNlPVxcbitcXHRcXHQgICAgeGZzX2ZzdmVyaXR5X21ldGFkYXRhX29mZnNldChpcCkpXFxuK1xcdFxcdGZsYWdzIHw9IElPTUFQX0ZfRlNWRVJJVFk7XFxuK1xcbiBcXHRBU1NFUlQoIWlzbnVsbHN0YXJ0YmxvY2soYm1hLmdvdC5icl9zdGFydGJsb2NrKSk7XFxuIFxcdHhmc19ibWJ0X3RvX2lvbWFwKGlwLCBpb21hcCwgXFx1MDAyNmJtYS5nb3QsIDAsIGZsYWdzLFxcbiBcXHRcXHRcXHRcXHR4ZnNfaW9tYXBfaW5vZGVfc2VxdWVuY2UoaXAsIGZsYWdzKSk7XFxuZGlmZiAtLWdpdCBhL2ZzL3hmcy9saWJ4ZnMveGZzX2Zvcm1hdC5oIGIvZnMveGZzL2xpYnhmcy94ZnNfZm9ybWF0LmhcXG5pbmRleCBkZDBlZDA0NmZiZTljOS4uMjg3OGJjOWNiNjU2NGUgMTAwNjQ0XFxuLS0tIGEvZnMveGZzL2xpYnhmcy94ZnNfZm9ybWF0LmhcXG4rKysgYi9mcy94ZnMvbGlieGZzL3hmc19mb3JtYXQuaFxcbkBAIC0zNzQsMTEgKzM3NCwxMyBAQCB4ZnNfc2JfaGFzX2NvbXBhdF9mZWF0dXJlKFxcbiAjZGVmaW5lIFhGU19TQl9GRUFUX1JPX0NPTVBBVF9STUFQQlQgICAoMSBcXHUwMDNjXFx1MDAzYyAxKVxcdFxcdC8qIHJldmVyc2UgbWFwIGJ0cmVlICovXFxuICNkZWZpbmUgWEZTX1NCX0ZFQVRfUk9fQ09NUEFUX1JFRkxJTksgICgxIFxcdTAwM2NcXHUwMDNjIDIpXFx0XFx0LyogcmVmbGlua2VkIGZpbGVzICovXFxuICNkZWZpbmUgWEZTX1NCX0ZFQVRfUk9fQ09NUEFUX0lOT0JUQ05UICgxIFxcdTAwM2NcXHUwMDNjIDMpXFx0XFx0LyogaW5vYnQgYmxvY2sgY291bnRzICovXFxuKyNkZWZpbmUgWEZTX1NCX0ZFQVRfUk9fQ09NUEFUX1ZFUklUWSAgICgxIFxcdTAwM2NcXHUwMDNjIDQpXFx0XFx0LyogZnMtdmVyaXR5ICovXFxuICNkZWZpbmUgWEZTX1NCX0ZFQVRfUk9fQ09NUEFUX0FMTCBcXFxcXFxuIFxcdFxcdChYRlNfU0JfRkVBVF9ST19DT01QQVRfRklOT0JUIHwgXFxcXFxcbiBcXHRcXHQgWEZTX1NCX0ZFQVRfUk9fQ09NUEFUX1JNQVBCVCB8IFxcXFxcXG4tXFx0XFx0IFhGU19TQl9GRUFUX1JPX0NPTVBBVF9SRUZMSU5LfCBcXFxcXFxuLVxcdFxcdCBYRlNfU0JfRkVBVF9ST19DT01QQVRfSU5PQlRDTlQpXFxuK1xcdFxcdCBYRlNfU0JfRkVBVF9ST19DT01QQVRfUkVGTElOSyB8IFxcXFxcXG4rXFx0XFx0IFhGU19TQl9GRUFUX1JPX0NPTVBBVF9JTk9CVENOVCB8IFxcXFxcXG4rXFx0XFx0IFhGU19TQl9GRUFUX1JPX0NPTVBBVF9WRVJJVFkpXFxuICNkZWZpbmUgWEZTX1NCX0ZFQVRfUk9fQ09NUEFUX1VOS05PV05cXHR+WEZTX1NCX0ZFQVRfUk9fQ09NUEFUX0FMTFxcbiBzdGF0aWMgaW5saW5lIGJvb2xcXG4geGZzX3NiX2hhc19yb19jb21wYXRfZmVhdHVyZShcXG5AQCAtMTIzMCwxNiArMTIzMiwyMSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgeGZzX2Rpbm9kZV9wdXRfcmRldihzdHJ1Y3QgeGZzX2Rpbm9kZSAqZGlwLCB4ZnNfZGV2X3QgcmRldilcXG4gICovXFxuICNkZWZpbmUgWEZTX0RJRkxBRzJfTUVUQURBVEFfQklUXFx0NVxcbiBcXG4rLyogaW5vZGVzIHNlYWxlZCB3aXRoIGZzLXZlcml0eSAqL1xcbisjZGVmaW5lIFhGU19ESUZMQUcyX1ZFUklUWV9CSVRcXHRcXHQ2XFxuK1xcbiAjZGVmaW5lIFhGU19ESUZMQUcyX0RBWFxcdFxcdCgxVUxMIFxcdTAwM2NcXHUwMDNjIFhGU19ESUZMQUcyX0RBWF9CSVQpXFxuICNkZWZpbmUgWEZTX0RJRkxBRzJfUkVGTElOS1xcdCgxVUxMIFxcdTAwM2NcXHUwMDNjIFhGU19ESUZMQUcyX1JFRkxJTktfQklUKVxcbiAjZGVmaW5lIFhGU19ESUZMQUcyX0NPV0VYVFNJWkVcXHQoMVVMTCBcXHUwMDNjXFx1MDAzYyBYRlNfRElGTEFHMl9DT1dFWFRTSVpFX0JJVClcXG4gI2RlZmluZSBYRlNfRElGTEFHMl9CSUdUSU1FXFx0KDFVTEwgXFx1MDAzY1xcdTAwM2MgWEZTX0RJRkxBRzJfQklHVElNRV9CSVQpXFxuICNkZWZpbmUgWEZTX0RJRkxBRzJfTlJFWFQ2NFxcdCgxVUxMIFxcdTAwM2NcXHUwMDNjIFhGU19ESUZMQUcyX05SRVhUNjRfQklUKVxcbiAjZGVmaW5lIFhGU19ESUZMQUcyX01FVEFEQVRBXFx0KDFVTEwgXFx1MDAzY1xcdTAwM2MgWEZTX0RJRkxBRzJfTUVUQURBVEFfQklUKVxcbisjZGVmaW5lIFhGU19ESUZMQUcyX1ZFUklUWVxcdCgxVUxMIFxcdTAwM2NcXHUwMDNjIFhGU19ESUZMQUcyX1ZFUklUWV9CSVQpXFxuIFxcbiAjZGVmaW5lIFhGU19ESUZMQUcyX0FOWSBcXFxcXFxuIFxcdChYRlNfRElGTEFHMl9EQVggfCBYRlNfRElGTEFHMl9SRUZMSU5LIHwgWEZTX0RJRkxBRzJfQ09XRVhUU0laRSB8IFxcXFxcXG4tXFx0IFhGU19ESUZMQUcyX0JJR1RJTUUgfCBYRlNfRElGTEFHMl9OUkVYVDY0IHwgWEZTX0RJRkxBRzJfTUVUQURBVEEpXFxuK1xcdCBYRlNfRElGTEFHMl9CSUdUSU1FIHwgWEZTX0RJRkxBRzJfTlJFWFQ2NCB8IFhGU19ESUZMQUcyX01FVEFEQVRBIHwgXFxcXFxcbitcXHQgWEZTX0RJRkxBRzJfVkVSSVRZKVxcbiBcXG4gc3RhdGljIGlubGluZSBib29sIHhmc19kaW5vZGVfaGFzX2JpZ3RpbWUoY29uc3Qgc3RydWN0IHhmc19kaW5vZGUgKmRpcClcXG4ge1xcbkBAIC0yMDI3LDQgKzIwMzQsMjYgQEAgc3RydWN0IHhmc19hY2wge1xcbiAjZGVmaW5lIFNHSV9BQ0xfRklMRV9TSVpFXFx0KHNpemVvZihTR0lfQUNMX0ZJTEUpLTEpXFxuICNkZWZpbmUgU0dJX0FDTF9ERUZBVUxUX1NJWkVcXHQoc2l6ZW9mKFNHSV9BQ0xfREVGQVVMVCktMSlcXG4gXFxuKy8qXFxuKyAqIEF0IG1heGltdW0gb2YgOCBsZXZlbHMgd2l0aCAxMjggaGFzaGVzIHBlciBibG9jayAoMzIgYnl0ZXMgU0hBLTI1NikgbWF4aW11bVxcbisgKiB0cmVlIHNpemUgaXMgKCgxMjheOCDiiJIgMSkvKDEyOCDiiJIgMSkpID0gNTY3KjEwXjEyIGJsb2Nrcy4gVGhpcyBzaG91bGQgZml0IGluXFxuKyAqIDUzIGJpdHMgYWRkcmVzcyBzcGFjZS5cXG4rICpcXG4rICogQXQgdGhpcyBNZXJrbGUgdHJlZSBzaXplIHdlIGNhbiBjb3ZlciAyOTVFQiBsYXJnZSBmaWxlLiBUaGlzIGlzIG11Y2ggbGFyZ2VyXFxuKyAqIHRoYW4gdGhlIGN1cnJlbnRseSBzdXBwb3J0ZWQgZmlsZSBzaXplLlxcbisgKlxcbisgKiBGb3Igc2hhNTEyIHRoZSBsYXJnZXN0IGZpbGUgd2UgY2FuIGNvdmVyIGVuZHMgYXQgMSBcXHUwMDNjXFx1MDAzYyA1MCBvZmZzZXQsIHRoaXMgaXMgYWxzb1xcbisgKiBnb29kLlxcbisgKi9cXG4rI2RlZmluZSBYRlNfRlNWRVJJVFlfTEFSR0VTVF9GSUxFXFx0KChsb2ZmX3QpMVVMTCBcXHUwMDNjXFx1MDAzYyA1MylcXG4rXFxuKy8qXFxuKyAqIEFsaWdubWVudCBvZiB0aGUgZnN2ZXJpdHkgbWV0YWRhdGEgcGxhY2VtZW50LiBUaGlzIGlzIGxhcmdlc3Qgc3VwcG9ydGVkIFBBR0VcXG4rICogU0laRSBmb3IgZnN2ZXJpdHkuIFRoaXMgaXMgdXNlZCB0byBzcGFjZSBvdXQgZGF0YSBhbmQgbWV0YWRhdGEgaW4gcGFnZSBjYWNoZS5cXG4rICogVGhlIHNwYWNpbmcgaXMgbmVjZXNzYXJ5IGZvciBub24tZXhwb3N1cmUgb2YgbWV0YWRhdGEgdG8gdXNlcnNwYWNlIGFuZFxcbisgKiBjb3JyZWN0IG1lcmtsZSB0cmVlIHN5bmV0aGVzaXMgaW4gdGhlIGlvbWFwLlxcbisgKi9cXG4rI2RlZmluZSBYRlNfRlNWRVJJVFlfU1RBUlRfQUxJR05cXHQoNjU1MzYpXFxuK1xcbitcXG4gI2VuZGlmIC8qIF9fWEZTX0ZPUk1BVF9IX18gKi9cXG5kaWZmIC0tZ2l0IGEvZnMveGZzL2xpYnhmcy94ZnNfZnMuaCBiL2ZzL3hmcy9saWJ4ZnMveGZzX2ZzLmhcXG5pbmRleCAxODVmMDlmMzI3YzAwYy4uODRkNjJiNzUwNmE5YWQgMTAwNjQ0XFxuLS0tIGEvZnMveGZzL2xpYnhmcy94ZnNfZnMuaFxcbisrKyBiL2ZzL3hmcy9saWJ4ZnMveGZzX2ZzLmhcXG5AQCAtMjUwLDYgKzI1MCw3IEBAIHR5cGVkZWYgc3RydWN0IHhmc19mc29wX3Jlc2Jsa3Mge1xcbiAjZGVmaW5lIFhGU19GU09QX0dFT01fRkxBR1NfUEFSRU5UXFx0KDEgXFx1MDAzY1xcdTAwM2MgMjUpIC8qIGxpbnV4IHBhcmVudCBwb2ludGVycyAqL1xcbiAjZGVmaW5lIFhGU19GU09QX0dFT01fRkxBR1NfTUVUQURJUlxcdCgxIFxcdTAwM2NcXHUwMDNjIDI2KSAvKiBtZXRhZGF0YSBkaXJlY3RvcmllcyAqL1xcbiAjZGVmaW5lIFhGU19GU09QX0dFT01fRkxBR1NfWk9ORURcXHQoMSBcXHUwMDNjXFx1MDAzYyAyNykgLyogem9uZWQgcnQgZGV2aWNlICovXFxuKyNkZWZpbmUgWEZTX0ZTT1BfR0VPTV9GTEFHU19WRVJJVFlcXHQoMSBcXHUwMDNjXFx1MDAzYyAyOCkgLyogZnMtdmVyaXR5ICovXFxuIFxcbiAvKlxcbiAgKiBNaW5pbXVtIGFuZCBtYXhpbXVtIHNpemVzIG5lZWQgZm9yIGdyb3d0aCBjaGVja3MuXFxuQEAgLTQyMSw2ICs0MjIsNyBAQCBzdHJ1Y3QgeGZzX2J1bGtzdGF0IHtcXG4gI2RlZmluZSBYRlNfQlNfU0lDS19TWU1MSU5LXFx0KDEgXFx1MDAzY1xcdTAwM2MgNikgIC8qIHN5bWJvbGljIGxpbmsgcmVtb3RlIHRhcmdldCAqL1xcbiAjZGVmaW5lIFhGU19CU19TSUNLX1BBUkVOVFxcdCgxIFxcdTAwM2NcXHUwMDNjIDcpICAvKiBwYXJlbnQgcG9pbnRlcnMgKi9cXG4gI2RlZmluZSBYRlNfQlNfU0lDS19ESVJUUkVFXFx0KDEgXFx1MDAzY1xcdTAwM2MgOCkgIC8qIGRpcmVjdG9yeSB0cmVlIHN0cnVjdHVyZSAqL1xcbisjZGVmaW5lIFhGU19CU19TSUNLX0ZTVkVSSVRZXFx0KDEgXFx1MDAzY1xcdTAwM2MgOSkgIC8qIGZzdmVyaXR5IG1ldGFkYXRhICovXFxuIFxcbiAvKlxcbiAgKiBQcm9qZWN0IHF1b3RhIGlkIGhlbHBlcnMgKHByZXZpb3VzbHkgcHJvamlkIHdhcyAxNmJpdCBvbmx5XFxuZGlmZiAtLWdpdCBhL2ZzL3hmcy9saWJ4ZnMveGZzX2hlYWx0aC5oIGIvZnMveGZzL2xpYnhmcy94ZnNfaGVhbHRoLmhcXG5pbmRleCAxZDQ1Y2Y1Nzg5ZTg2NC4uOTMyYjQ0NzE5MGRhNzYgMTAwNjQ0XFxuLS0tIGEvZnMveGZzL2xpYnhmcy94ZnNfaGVhbHRoLmhcXG4rKysgYi9mcy94ZnMvbGlieGZzL3hmc19oZWFsdGguaFxcbkBAIC0xMDQsNiArMTA0LDcgQEAgc3RydWN0IHhmc19ydGdyb3VwO1xcbiAvKiBEb24ndCBwcm9wYWdhdGUgc2ljayBzdGF0dXMgdG8gYWcgaGVhbHRoIHN1bW1hcnkgZHVyaW5nIGluYWN0aXZhdGlvbiAqL1xcbiAjZGVmaW5lIFhGU19TSUNLX0lOT19GT1JHRVRcXHQoMSBcXHUwMDNjXFx1MDAzYyAxMilcXG4gI2RlZmluZSBYRlNfU0lDS19JTk9fRElSVFJFRVxcdCgxIFxcdTAwM2NcXHUwMDNjIDEzKSAgLyogZGlyZWN0b3J5IHRyZWUgc3RydWN0dXJlICovXFxuKyNkZWZpbmUgWEZTX1NJQ0tfSU5PX0ZTVkVSSVRZXFx0KDEgXFx1MDAzY1xcdTAwM2MgMTQpICAvKiBmc3Zlcml0eSBtZXRhZGF0YSAqL1xcbiBcXG4gLyogUHJpbWFyeSBldmlkZW5jZSBvZiBoZWFsdGggcHJvYmxlbXMgaW4gYSBnaXZlbiBncm91cC4gKi9cXG4gI2RlZmluZSBYRlNfU0lDS19GU19QUklNQVJZXFx0KFhGU19TSUNLX0ZTX0NPVU5URVJTIHwgXFxcXFxcbkBAIC0xNDAsNyArMTQxLDggQEAgc3RydWN0IHhmc19ydGdyb3VwO1xcbiBcXHRcXHRcXHRcXHQgWEZTX1NJQ0tfSU5PX1hBVFRSIHwgXFxcXFxcbiBcXHRcXHRcXHRcXHQgWEZTX1NJQ0tfSU5PX1NZTUxJTksgfCBcXFxcXFxuIFxcdFxcdFxcdFxcdCBYRlNfU0lDS19JTk9fUEFSRU5UIHwgXFxcXFxcbi1cXHRcXHRcXHRcXHQgWEZTX1NJQ0tfSU5PX0RJUlRSRUUpXFxuK1xcdFxcdFxcdFxcdCBYRlNfU0lDS19JTk9fRElSVFJFRSB8IFxcXFxcXG4rXFx0XFx0XFx0XFx0IFhGU19TSUNLX0lOT19GU1ZFUklUWSlcXG4gXFxuICNkZWZpbmUgWEZTX1NJQ0tfSU5PX1pBUFBFRFxcdChYRlNfU0lDS19JTk9fQk1CVERfWkFQUEVEIHwgXFxcXFxcbiBcXHRcXHRcXHRcXHQgWEZTX1NJQ0tfSU5PX0JNQlRBX1pBUFBFRCB8IFxcXFxcXG5kaWZmIC0tZ2l0IGEvZnMveGZzL2xpYnhmcy94ZnNfaW5vZGVfYnVmLmMgYi9mcy94ZnMvbGlieGZzL3hmc19pbm9kZV9idWYuY1xcbmluZGV4IDMzNmVmODQzZjJmZTRmLi5iZDgwYTE5ZjJlMDkyOSAxMDA2NDRcXG4tLS0gYS9mcy94ZnMvbGlieGZzL3hmc19pbm9kZV9idWYuY1xcbisrKyBiL2ZzL3hmcy9saWJ4ZnMveGZzX2lub2RlX2J1Zi5jXFxuQEAgLTc2MCw2ICs3NjAsMTQgQEAgeGZzX2Rpbm9kZV92ZXJpZnkoXFxuIFxcdCAgICAheGZzX2hhc19ydHJlZmxpbmsobXApKVxcbiBcXHRcXHRyZXR1cm4gX190aGlzX2FkZHJlc3M7XFxuIFxcbitcXHQvKiBvbmx5IHJlZ3VsYXIgZmlsZXMgY2FuIGhhdmUgZnN2ZXJpdHkgKi9cXG4rXFx0aWYgKGZsYWdzMiBcXHUwMDI2IFhGU19ESUZMQUcyX1ZFUklUWSkge1xcbitcXHRcXHRpZiAoIXhmc19oYXNfdmVyaXR5KG1wKSlcXG4rXFx0XFx0XFx0cmV0dXJuIF9fdGhpc19hZGRyZXNzO1xcbitcXHRcXHRpZiAoIVNfSVNSRUcobW9kZSkpXFxuK1xcdFxcdFxcdHJldHVybiBfX3RoaXNfYWRkcmVzcztcXG4rXFx0fVxcbitcXG4gXFx0aWYgKHhmc19oYXNfem9uZWQobXApIFxcdTAwMjZcXHUwMDI2XFxuIFxcdCAgICBkaXAtXFx1MDAzZWRpX21ldGF0eXBlID09IGNwdV90b19iZTE2KFhGU19NRVRBRklMRV9SVFJNQVApKSB7XFxuIFxcdFxcdGlmIChiZTMyX3RvX2NwdShkaXAtXFx1MDAzZWRpX3VzZWRfYmxvY2tzKSBcXHUwMDNlIG1wLVxcdTAwM2VtX3NiLnNiX3JnZXh0ZW50cylcXG5kaWZmIC0tZ2l0IGEvZnMveGZzL2xpYnhmcy94ZnNfaW5vZGVfdXRpbC5jIGIvZnMveGZzL2xpYnhmcy94ZnNfaW5vZGVfdXRpbC5jXFxuaW5kZXggMjU4YWMzZDBkNDg2ZTYuLjVhNTE2YmQzMWMzMTc1IDEwMDY0NFxcbi0tLSBhL2ZzL3hmcy9saWJ4ZnMveGZzX2lub2RlX3V0aWwuY1xcbisrKyBiL2ZzL3hmcy9saWJ4ZnMveGZzX2lub2RlX3V0aWwuY1xcbkBAIC03NCw3ICs3NCw4IEBAIHhmc19mbGFnczJkaWZsYWdzMihcXG4gXFx0dWludDY0X3RcXHRcXHRkaV9mbGFnczIgPVxcbiBcXHRcXHQoaXAtXFx1MDAzZWlfZGlmbGFnczIgXFx1MDAyNiAoWEZTX0RJRkxBRzJfUkVGTElOSyB8XFxuIFxcdFxcdFxcdFxcdCAgIFhGU19ESUZMQUcyX0JJR1RJTUUgfFxcbi1cXHRcXHRcXHRcXHQgICBYRlNfRElGTEFHMl9OUkVYVDY0KSk7XFxuK1xcdFxcdFxcdFxcdCAgIFhGU19ESUZMQUcyX05SRVhUNjQgfFxcbitcXHRcXHRcXHRcXHQgICBYRlNfRElGTEFHMl9WRVJJVFkpKTtcXG4gXFxuIFxcdGlmICh4ZmxhZ3MgXFx1MDAyNiBGU19YRkxBR19EQVgpXFxuIFxcdFxcdGRpX2ZsYWdzMiB8PSBYRlNfRElGTEFHMl9EQVg7XFxuQEAgLTEyNiw2ICsxMjcsOCBAQCB4ZnNfaXAyeGZsYWdzKFxcbiBcXHRcXHRcXHRmbGFncyB8PSBGU19YRkxBR19EQVg7XFxuIFxcdFxcdGlmIChpcC1cXHUwMDNlaV9kaWZsYWdzMiBcXHUwMDI2IFhGU19ESUZMQUcyX0NPV0VYVFNJWkUpXFxuIFxcdFxcdFxcdGZsYWdzIHw9IEZTX1hGTEFHX0NPV0VYVFNJWkU7XFxuK1xcdFxcdGlmIChpcC1cXHUwMDNlaV9kaWZsYWdzMiBcXHUwMDI2IFhGU19ESUZMQUcyX1ZFUklUWSlcXG4rXFx0XFx0XFx0ZmxhZ3MgfD0gRlNfWEZMQUdfVkVSSVRZO1xcbiBcXHR9XFxuIFxcbiBcXHRpZiAoeGZzX2lub2RlX2hhc19hdHRyX2ZvcmsoaXApKVxcbmRpZmYgLS1naXQgYS9mcy94ZnMvbGlieGZzL3hmc19zYi5jIGIvZnMveGZzL2xpYnhmcy94ZnNfc2IuY1xcbmluZGV4IDQ3MzIyYWRiNzY5MDU5Li4yMjJiYmU1NTU5ZGY0NyAxMDA2NDRcXG4tLS0gYS9mcy94ZnMvbGlieGZzL3hmc19zYi5jXFxuKysrIGIvZnMveGZzL2xpYnhmcy94ZnNfc2IuY1xcbkBAIC0xNjUsNiArMTY1LDggQEAgeGZzX3NiX3ZlcnNpb25fdG9fZmVhdHVyZXMoXFxuIFxcdFxcdGZlYXR1cmVzIHw9IFhGU19GRUFUX1JFRkxJTks7XFxuIFxcdGlmIChzYnAtXFx1MDAzZXNiX2ZlYXR1cmVzX3JvX2NvbXBhdCBcXHUwMDI2IFhGU19TQl9GRUFUX1JPX0NPTVBBVF9JTk9CVENOVClcXG4gXFx0XFx0ZmVhdHVyZXMgfD0gWEZTX0ZFQVRfSU5PQlRDTlQ7XFxuK1xcdGlmIChzYnAtXFx1MDAzZXNiX2ZlYXR1cmVzX3JvX2NvbXBhdCBcXHUwMDI2IFhGU19TQl9GRUFUX1JPX0NPTVBBVF9WRVJJVFkpXFxuK1xcdFxcdGZlYXR1cmVzIHw9IFhGU19GRUFUX1ZFUklUWTtcXG4gXFx0aWYgKHNicC1cXHUwMDNlc2JfZmVhdHVyZXNfaW5jb21wYXQgXFx1MDAyNiBYRlNfU0JfRkVBVF9JTkNPTVBBVF9GVFlQRSlcXG4gXFx0XFx0ZmVhdHVyZXMgfD0gWEZTX0ZFQVRfRlRZUEU7XFxuIFxcdGlmIChzYnAtXFx1MDAzZXNiX2ZlYXR1cmVzX2luY29tcGF0IFxcdTAwMjYgWEZTX1NCX0ZFQVRfSU5DT01QQVRfU1BJTk9ERVMpXFxuQEAgLTE1ODgsNiArMTU5MCw4IEBAIHhmc19mc19nZW9tZXRyeShcXG4gXFx0XFx0Z2VvLVxcdTAwM2VmbGFncyB8PSBYRlNfRlNPUF9HRU9NX0ZMQUdTX01FVEFESVI7XFxuIFxcdGlmICh4ZnNfaGFzX3pvbmVkKG1wKSlcXG4gXFx0XFx0Z2VvLVxcdTAwM2VmbGFncyB8PSBYRlNfRlNPUF9HRU9NX0ZMQUdTX1pPTkVEO1xcbitcXHRpZiAoeGZzX2hhc192ZXJpdHkobXApKVxcbitcXHRcXHRnZW8tXFx1MDAzZWZsYWdzIHw9IFhGU19GU09QX0dFT01fRkxBR1NfVkVSSVRZO1xcbiBcXHRnZW8tXFx1MDAzZXJ0c2VjdHNpemUgPSBzYnAtXFx1MDAzZXNiX2Jsb2Nrc2l6ZTtcXG4gXFx0Z2VvLVxcdTAwM2VkaXJibG9ja3NpemUgPSB4ZnNfZGlyMl9kaXJibG9ja19ieXRlcyhzYnApO1xcbiBcXG5kaWZmIC0tZ2l0IGEvZnMveGZzL3NjcnViL2NvbW1vbi5jIGIvZnMveGZzL3NjcnViL2NvbW1vbi5jXFxuaW5kZXggZTUyMzNlMzFhYmI3NTAuLjE2NzNiNTIyMjQ0ZDc0IDEwMDY0NFxcbi0tLSBhL2ZzL3hmcy9zY3J1Yi9jb21tb24uY1xcbisrKyBiL2ZzL3hmcy9zY3J1Yi9jb21tb24uY1xcbkBAIC00NSw2ICs0NSw4IEBAXFxuICNpbmNsdWRlIFxcXCJzY3J1Yi9oZWFsdGguaFxcXCJcXG4gI2luY2x1ZGUgXFxcInNjcnViL3RlbXBmaWxlLmhcXFwiXFxuIFxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvZnN2ZXJpdHkuaFxcdTAwM2VcXG4rXFxuIC8qIENvbW1vbiBjb2RlIGZvciB0aGUgbWV0YWRhdGEgc2NydWJiZXJzLiAqL1xcbiBcXG4gLypcXG5AQCAtMTc1NCwzICsxNzU2LDU0IEBAIHhjaGtfaW5vZGVfY291bnRfYmxvY2tzKFxcbiBcXHRyZXR1cm4geGZzX2JtYXBfY291bnRfYmxvY2tzKHNjLVxcdTAwM2V0cCwgc2MtXFx1MDAzZWlwLCB3aGljaGZvcmssIG5leHRlbnRzLFxcbiBcXHRcXHRcXHRjb3VudCk7XFxuIH1cXG4rXFxuKy8qXFxuKyAqIElmIHRoaXMgaW5vZGUgaGFzIFNfVkVSSVRZIHNldCBvbiBpdCwgcmVhZCB0aGUgdmVyaXR5IGluZm8uIElmIHRoZSByZWFkaW5nXFxuKyAqIGZhaWxzIHdpdGggYW55dGhpbmcgb3RoZXIgdGhhbiBFTk9NRU0sIHRoZSBmaWxlIGlzIGNvcnJ1cHQsIHdoaWNoIHdlIGNhblxcbisgKiBkZXRlY3QgbGF0ZXIgd2l0aCBmc3Zlcml0eV9hY3RpdmUuXFxuKyAqXFxuKyAqIENhbGxlcnMgbXVzdCBob2xkIHRoZSBJT0xPQ0sgYW5kIG11c3Qgbm90IGhvbGQgdGhlIElMT0NLIG9mIHNjLVxcdTAwM2VpcCBiZWNhdXNlXFxuKyAqIGFjdGl2YXRpb24gcmVhZHMgaW5vZGUgZGF0YS5cXG4rICovXFxuK2ludFxcbit4Y2hrX2lub2RlX3NldHVwX3Zlcml0eShcXG4rXFx0c3RydWN0IHhmc19zY3J1YlxcdCpzYylcXG4re1xcbitcXHRpbnRcXHRcXHRcXHRlcnJvcjtcXG4rXFxuK1xcdGlmICghZnN2ZXJpdHlfYWN0aXZlKFZGU19JKHNjLVxcdTAwM2VpcCkpKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGVycm9yID0gZnN2ZXJpdHlfZW5zdXJlX3Zlcml0eV9pbmZvKFZGU19JKHNjLVxcdTAwM2VpcCkpO1xcbitcXHRzd2l0Y2ggKGVycm9yKSB7XFxuK1xcdGNhc2UgMDpcXG4rXFx0XFx0LyogZnN2ZXJpdHkgaXMgYWN0aXZlICovXFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIC1FTk9EQVRBOlxcbitcXHRjYXNlIC1FTVNHU0laRTpcXG4rXFx0Y2FzZSAtRUlOVkFMOlxcbitcXHRjYXNlIC1FRlNDT1JSVVBURUQ6XFxuK1xcdGNhc2UgLUVGQklHOlxcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBUaGUgbm9uemVybyBlcnJubyBjb2RlcyBhYm92ZSBhcmUgdGhlIGVycm9yIGNvZGVzIHRoYXQgY2FuXFxuK1xcdFxcdCAqIGJlIHJldHVybmVkIGZyb20gZnN2ZXJpdHkgb24gbWV0YWRhdGEgdmFsaWRhdGlvbiBlcnJvcnMuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0LyogcnVudGltZSBlcnJvcnMgKi9cXG4rXFx0XFx0cmV0dXJuIGVycm9yO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rLypcXG4rICogSXMgdGhpcyBhIHZlcml0eSBmaWxlIHRoYXQgZmFpbGVkIHRvIGFjdGl2YXRlPyAgQ2FsbGVycyBtdXN0IGhhdmUgdHJpZWQgdG9cXG4rICogYWN0aXZhdGUgZnN2ZXJpdHkgdmlhIHhjaGtfaW5vZGVfc2V0dXBfdmVyaXR5LlxcbisgKi9cXG4rYm9vbFxcbit4Y2hrX2lub2RlX3Zlcml0eV9icm9rZW4oXFxuK1xcdHN0cnVjdCB4ZnNfaW5vZGVcXHQqaXApXFxuK3tcXG4rXFx0cmV0dXJuIGZzdmVyaXR5X2FjdGl2ZShWRlNfSShpcCkpIFxcdTAwMjZcXHUwMDI2ICFmc3Zlcml0eV9nZXRfaW5mbyhWRlNfSShpcCkpO1xcbit9XFxuZGlmZiAtLWdpdCBhL2ZzL3hmcy9zY3J1Yi9jb21tb24uaCBiL2ZzL3hmcy9zY3J1Yi9jb21tb24uaFxcbmluZGV4IDlkNjI3ZmQ1MDY4N2U0Li4zZGUyYjYwMDlhOTk0MSAxMDA2NDRcXG4tLS0gYS9mcy94ZnMvc2NydWIvY29tbW9uLmhcXG4rKysgYi9mcy94ZnMvc2NydWIvY29tbW9uLmhcXG5AQCAtMjY4LDYgKzI2OCw4IEBAIGludCB4Y2hrX2lub2RlX2lzX2FsbG9jYXRlZChzdHJ1Y3QgeGZzX3NjcnViICpzYywgeGZzX2FnaW5vX3QgYWdpbm8sXFxuIFxcdFxcdGJvb2wgKmludXNlKTtcXG4gaW50IHhjaGtfaW5vZGVfY291bnRfYmxvY2tzKHN0cnVjdCB4ZnNfc2NydWIgKnNjLCBpbnQgd2hpY2hmb3JrLFxcbiBcXHRcXHR4ZnNfZXh0bnVtX3QgKm5leHRlbnRzLCB4ZnNfZmlsYmxrc190ICpjb3VudCk7XFxuK2ludCB4Y2hrX2lub2RlX3NldHVwX3Zlcml0eShzdHJ1Y3QgeGZzX3NjcnViICpzYyk7XFxuK2Jvb2wgeGNoa19pbm9kZV92ZXJpdHlfYnJva2VuKHN0cnVjdCB4ZnNfaW5vZGUgKmlwKTtcXG4gXFxuIGJvb2wgeGNoa19pbm9kZV9pc19kaXJ0cmVlX3Jvb3QoY29uc3Qgc3RydWN0IHhmc19pbm9kZSAqaXApO1xcbiBib29sIHhjaGtfaW5vZGVfaXNfc2Jfcm9vdGVkKGNvbnN0IHN0cnVjdCB4ZnNfaW5vZGUgKmlwKTtcXG5kaWZmIC0tZ2l0IGEvZnMveGZzL3NjcnViL2lub2RlLmMgYi9mcy94ZnMvc2NydWIvaW5vZGUuY1xcbmluZGV4IDY1YjEzZTMxMTkxNjgxLi5kMWNkZDZiNDQ1ZDAxNyAxMDA2NDRcXG4tLS0gYS9mcy94ZnMvc2NydWIvaW5vZGUuY1xcbisrKyBiL2ZzL3hmcy9zY3J1Yi9pbm9kZS5jXFxuQEAgLTM2LDYgKzM2LDEwIEBAIHhjaGtfcHJlcGFyZV9pc2NydWIoXFxuIFxcbiBcXHR4Y2hrX2lsb2NrKHNjLCBYRlNfSU9MT0NLX0VYQ0wpO1xcbiBcXG4rXFx0ZXJyb3IgPSB4Y2hrX2lub2RlX3NldHVwX3Zlcml0eShzYyk7XFxuK1xcdGlmIChlcnJvcilcXG4rXFx0XFx0cmV0dXJuIGVycm9yO1xcbitcXG4gXFx0ZXJyb3IgPSB4Y2hrX3RyYW5zX2FsbG9jKHNjLCAwKTtcXG4gXFx0aWYgKGVycm9yKVxcbiBcXHRcXHRyZXR1cm4gZXJyb3I7XFxuQEAgLTgzMyw2ICs4MzcsOSBAQCB4Y2hrX2lub2RlKFxcbiBcXHRpZiAoU19JU1JFRyhWRlNfSShzYy1cXHUwMDNlaXApLVxcdTAwM2VpX21vZGUpKVxcbiBcXHRcXHR4Y2hrX2lub2RlX2NoZWNrX3JlZmxpbmtfaWZsYWcoc2MsIElfSU5PKHNjLVxcdTAwM2VpcCkpO1xcbiBcXG4rXFx0aWYgKHhjaGtfaW5vZGVfdmVyaXR5X2Jyb2tlbihzYy1cXHUwMDNlaXApKVxcbitcXHRcXHR4Y2hrX2lub19zZXRfY29ycnVwdChzYywgc2MtXFx1MDAzZXNtLVxcdTAwM2VzbV9pbm8pO1xcbitcXG4gXFx0eGNoa19pbm9kZV9jaGVja191bmxpbmtlZChzYyk7XFxuIFxcbiBcXHR4Y2hrX2lub2RlX3hyZWYoc2MsIElfSU5PKHNjLVxcdTAwM2VpcCksIFxcdTAwMjZkaSk7XFxuZGlmZiAtLWdpdCBhL2ZzL3hmcy9zY3J1Yi9pbm9kZV9yZXBhaXIuYyBiL2ZzL3hmcy9zY3J1Yi9pbm9kZV9yZXBhaXIuY1xcbmluZGV4IDQ5M2RjZjVjYzZjMTU5Li45MGY4NjFiYjRlZjg0OCAxMDA2NDRcXG4tLS0gYS9mcy94ZnMvc2NydWIvaW5vZGVfcmVwYWlyLmNcXG4rKysgYi9mcy94ZnMvc2NydWIvaW5vZGVfcmVwYWlyLmNcXG5AQCAtNTczLDYgKzU3Myw4IEBAIHhyZXBfZGlub2RlX2ZsYWdzKFxcbiBcXHRcXHRkaXAtXFx1MDAzZWRpX25yZXh0NjRfcGFkID0gMDtcXG4gXFx0ZWxzZSBpZiAoZGlwLVxcdTAwM2VkaV92ZXJzaW9uIFxcdTAwM2U9IDMpXFxuIFxcdFxcdGRpcC1cXHUwMDNlZGlfdjNfcGFkID0gMDtcXG4rXFx0aWYgKCF4ZnNfaGFzX3Zlcml0eShtcCkgfHwgIVNfSVNSRUcobW9kZSkpXFxuK1xcdFxcdGZsYWdzMiBcXHUwMDI2PSB+WEZTX0RJRkxBRzJfVkVSSVRZO1xcbiBcXG4gXFx0aWYgKGZsYWdzMiBcXHUwMDI2IFhGU19ESUZMQUcyX01FVEFEQVRBKSB7XFxuIFxcdFxcdHhmc19mYWlsYWRkcl90XFx0ZmE7XFxuQEAgLTE2MTcsNiArMTYxOSwxMCBAQCB4cmVwX2Rpbm9kZV9jb3JlKFxcbiBcXHRpZiAoaWdldF9lcnJvcilcXG4gXFx0XFx0cmV0dXJuIGlnZXRfZXJyb3I7XFxuIFxcbitcXHRlcnJvciA9IHhjaGtfaW5vZGVfc2V0dXBfdmVyaXR5KHNjKTtcXG4rXFx0aWYgKGVycm9yKVxcbitcXHRcXHRyZXR1cm4gZXJyb3I7XFxuK1xcbiBcXHRlcnJvciA9IHhjaGtfdHJhbnNfYWxsb2Moc2MsIDApO1xcbiBcXHRpZiAoZXJyb3IpXFxuIFxcdFxcdHJldHVybiBlcnJvcjtcXG5AQCAtMjAzNSw2ICsyMDQxLDI3IEBAIHhyZXBfaW5vZGVfdW5saW5rZWQoXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbisvKlxcbisgKiBJZiB0aGlzIGZpbGUgaXMgYSBmc3Zlcml0eSBmaWxlLCB4Y2hrX3ByZXBhcmVfaXNjcnViIG9yIHhyZXBfZGlub2RlX2NvcmVcXG4rICogc2hvdWxkIGhhdmUgYWN0aXZhdGVkIGl0LiAgSWYgaXQncyBzdGlsbCBub3QgYWN0aXZlLCB0aGVuIHRoZXJlJ3Mgc29tZXRoaW5nXFxuKyAqIHdyb25nIHdpdGggdGhlIHZlcml0eSBkZXNjcmlwdG9yIGFuZCB3ZSBzaG91bGQgdHVybiBpdCBvZmYuXFxuKyAqL1xcbitTVEFUSUMgaW50XFxuK3hyZXBfaW5vZGVfdmVyaXR5KFxcbitcXHRzdHJ1Y3QgeGZzX3NjcnViXFx0KnNjKVxcbit7XFxuK1xcdHN0cnVjdCBpbm9kZVxcdFxcdCppbm9kZSA9IFZGU19JKHNjLVxcdTAwM2VpcCk7XFxuK1xcbitcXHRpZiAoeGNoa19pbm9kZV92ZXJpdHlfYnJva2VuKHNjLVxcdTAwM2VpcCkpIHtcXG4rXFx0XFx0c2MtXFx1MDAzZWlwLVxcdTAwM2VpX2RpZmxhZ3MyIFxcdTAwMjY9IH5YRlNfRElGTEFHMl9WRVJJVFk7XFxuK1xcdFxcdGlub2RlLVxcdTAwM2VpX2ZsYWdzIFxcdTAwMjY9IH5TX1ZFUklUWTtcXG4rXFxuK1xcdFxcdHhmc190cmFuc19sb2dfaW5vZGUoc2MtXFx1MDAzZXRwLCBzYy1cXHUwMDNlaXAsIFhGU19JTE9HX0NPUkUpO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gLyogUmVwYWlyIGFuIGlub2RlJ3MgZmllbGRzLiAqL1xcbiBpbnRcXG4geHJlcF9pbm9kZShcXG5AQCAtMjA4NCw2ICsyMTExLDE1IEBAIHhyZXBfaW5vZGUoXFxuIFxcdFxcdFxcdHJldHVybiBlcnJvcjtcXG4gXFx0fVxcbiBcXG4rXFx0LypcXG4rXFx0ICogRGlzYWJsZSBmc3Zlcml0eSBpZiBpdCBjYW5ub3QgYmUgYWN0aXZhdGVkLiAgQWN0aXZhdGlvbiBmYWlsdXJlXFxuK1xcdCAqIHByb2hpYml0cyB0aGUgZmlsZSBmcm9tIGJlaW5nIG9wZW5lZCwgc28gdGhlcmUgY2Fubm90IGJlIGFub3RoZXJcXG4rXFx0ICogcHJvZ3JhbSB3aXRoIGFuIG9wZW4gZmQgdG8gd2hhdCBpdCB0aGlua3MgaXMgYSB2ZXJpdHkgZmlsZS5cXG4rXFx0ICovXFxuK1xcdGVycm9yID0geHJlcF9pbm9kZV92ZXJpdHkoc2MpO1xcbitcXHRpZiAoZXJyb3IpXFxuK1xcdFxcdHJldHVybiBlcnJvcjtcXG4rXFxuIFxcdC8qIFJlY29ubmVjdCBpbmNvcmUgdW5saW5rZWQgbGlzdCAqL1xcbiBcXHRlcnJvciA9IHhyZXBfaW5vZGVfdW5saW5rZWQoc2MpO1xcbiBcXHRpZiAoZXJyb3IpXFxuZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfYW9wcy5jIGIvZnMveGZzL3hmc19hb3BzLmNcXG5pbmRleCA1MTI5M2I2ZjMzMWYwYi4uYjA1MzdjNjdlOTYwZTEgMTAwNjQ0XFxuLS0tIGEvZnMveGZzL3hmc19hb3BzLmNcXG4rKysgYi9mcy94ZnMveGZzX2FvcHMuY1xcbkBAIC0yMiw3ICsyMiw5IEBAXFxuICNpbmNsdWRlIFxcXCJ4ZnNfaWNhY2hlLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJ4ZnNfem9uZV9hbGxvYy5oXFxcIlxcbiAjaW5jbHVkZSBcXFwieGZzX3J0Z3JvdXAuaFxcXCJcXG4rI2luY2x1ZGUgXFxcInhmc19mc3Zlcml0eS5oXFxcIlxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvYmlvLWludGVncml0eS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvZnN2ZXJpdHkuaFxcdTAwM2VcXG4gXFxuIHN0cnVjdCB4ZnNfd3JpdGVwYWdlX2N0eCB7XFxuIFxcdHN0cnVjdCBpb21hcF93cml0ZXBhZ2VfY3R4IGN0eDtcXG5AQCAtMTgxLDYgKzE4MywyMyBAQCB4ZnNfZW5kX2lvZW5kX3dyaXRlKFxcbiBcXHRtZW1hbGxvY19ub2ZzX3Jlc3RvcmUobm9mc19mbGFnKTtcXG4gfVxcbiBcXG4rLypcXG4rICogSU8gcmVhZCBjb21wbGV0aW9uLlxcbisgKi9cXG4rc3RhdGljIHZvaWRcXG4reGZzX2VuZF9pb2VuZF9yZWFkKFxcbitcXHRzdHJ1Y3QgaW9tYXBfaW9lbmRcXHQqaW9lbmQpXFxuK3tcXG4rXFx0c3RydWN0IHhmc19pbm9kZVxcdCppcCA9IFhGU19JKGlvZW5kLVxcdTAwM2Vpb19pbm9kZSk7XFxuK1xcbitcXHRpZiAoIWlvZW5kLVxcdTAwM2Vpb19iaW8uYmlfc3RhdHVzIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdHhmc19mc3Zlcml0eV9pc19maWxlX2RhdGEoaXAsIGlvZW5kLVxcdTAwM2Vpb19vZmZzZXQpKVxcbitcXHRcXHRmc3Zlcml0eV92ZXJpZnlfYmlvKGlvZW5kLVxcdTAwM2Vpb192aSxcXG4rXFx0XFx0XFx0XFx0ICAgIFxcdTAwMjZpb2VuZC1cXHUwMDNlaW9fYmlvKTtcXG4rXFx0aW9tYXBfZmluaXNoX2lvZW5kcyhpb2VuZCxcXG4rXFx0XFx0YmxrX3N0YXR1c190b19lcnJubyhpb2VuZC1cXHUwMDNlaW9fYmlvLmJpX3N0YXR1cykpO1xcbit9XFxuK1xcbiAvKlxcbiAgKiBGaW5pc2ggYWxsIHBlbmRpbmcgSU8gY29tcGxldGlvbnMgdGhhdCByZXF1aXJlIHRyYW5zYWN0aW9uYWwgbW9kaWZpY2F0aW9ucy5cXG4gICpcXG5AQCAtMjE1LDggKzIzNCw3IEBAIHhmc19lbmRfaW8oXFxuIFxcdFxcdGxpc3RfZGVsX2luaXQoXFx1MDAyNmlvZW5kLVxcdTAwM2Vpb19saXN0KTtcXG4gXFx0XFx0aW9tYXBfaW9lbmRfdHJ5X21lcmdlKGlvZW5kLCBcXHUwMDI2dG1wKTtcXG4gXFx0XFx0aWYgKGJpb19vcChcXHUwMDI2aW9lbmQtXFx1MDAzZWlvX2JpbykgPT0gUkVRX09QX1JFQUQpXFxuLVxcdFxcdFxcdGlvbWFwX2ZpbmlzaF9pb2VuZHMoaW9lbmQsXFxuLVxcdFxcdFxcdFxcdGJsa19zdGF0dXNfdG9fZXJybm8oaW9lbmQtXFx1MDAzZWlvX2Jpby5iaV9zdGF0dXMpKTtcXG4rXFx0XFx0XFx0eGZzX2VuZF9pb2VuZF9yZWFkKGlvZW5kKTtcXG4gXFx0XFx0ZWxzZVxcbiBcXHRcXHRcXHR4ZnNfZW5kX2lvZW5kX3dyaXRlKGlvZW5kKTtcXG4gXFx0XFx0Y29uZF9yZXNjaGVkKCk7XFxuQEAgLTI0Miw5ICsyNjAsMTQgQEAgeGZzX2VuZF9iaW8oXFxuIFxcdH1cXG4gXFxuIFxcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZpcC1cXHUwMDNlaV9pb2VuZF9sb2NrLCBmbGFncyk7XFxuLVxcdGlmIChsaXN0X2VtcHR5KFxcdTAwMjZpcC1cXHUwMDNlaV9pb2VuZF9saXN0KSlcXG4tXFx0XFx0V0FSTl9PTl9PTkNFKCFxdWV1ZV93b3JrKG1wLVxcdTAwM2VtX3Vud3JpdHRlbl93b3JrcXVldWUsXFxuK1xcdGlmIChsaXN0X2VtcHR5KFxcdTAwMjZpcC1cXHUwMDNlaV9pb2VuZF9saXN0KSkge1xcbitcXHRcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfRlNfVkVSSVRZKSBcXHUwMDI2XFx1MDAyNiBpb2VuZC1cXHUwMDNlaW9fdmkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgIGlvZW5kLVxcdTAwM2Vpb19vZmZzZXQgXFx1MDAzYyB4ZnNfZnN2ZXJpdHlfbWV0YWRhdGFfb2Zmc2V0KGlwKSlcXG4rXFx0XFx0XFx0ZnN2ZXJpdHlfZW5xdWV1ZV92ZXJpZnlfd29yayhcXHUwMDI2aXAtXFx1MDAzZWlfaW9lbmRfd29yayk7XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0V0FSTl9PTl9PTkNFKCFxdWV1ZV93b3JrKG1wLVxcdTAwM2VtX3Vud3JpdHRlbl93b3JrcXVldWUsXFxuIFxcdFxcdFxcdFxcdFxcdCBcXHUwMDI2aXAtXFx1MDAzZWlfaW9lbmRfd29yaykpO1xcbitcXHR9XFxuIFxcdGxpc3RfYWRkX3RhaWwoXFx1MDAyNmlvZW5kLVxcdTAwM2Vpb19saXN0LCBcXHUwMDI2aXAtXFx1MDAzZWlfaW9lbmRfbGlzdCk7XFxuIFxcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNmlwLVxcdTAwM2VpX2lvZW5kX2xvY2ssIGZsYWdzKTtcXG4gfVxcbkBAIC0zNTAsMTIgKzM3MywxNiBAQCB4ZnNfbWFwX2Jsb2NrcyhcXG4gXFx0aW50XFx0XFx0XFx0cmV0cmllcyA9IDA7XFxuIFxcdGludFxcdFxcdFxcdGVycm9yID0gMDtcXG4gXFx0dW5zaWduZWQgaW50XFx0XFx0KnNlcTtcXG4rXFx0dW5zaWduZWQgaW50XFx0XFx0aW9tYXBfZmxhZ3MgPSAwO1xcbiBcXG4gXFx0aWYgKHhmc19pc19zaHV0ZG93bihtcCkpXFxuIFxcdFxcdHJldHVybiAtRUlPO1xcbiBcXG4gXFx0WEZTX0VSUk9SVEFHX0RFTEFZKG1wLCBYRlNfRVJSVEFHX1dCX0RFTEFZX01TKTtcXG4gXFxuK1xcdGlmICh4ZnNfaWZsYWdzX3Rlc3QoaXAsIFhGU19WRVJJVFlfQ09OU1RSVUNUSU9OKSlcXG4rXFx0XFx0aW9tYXBfZmxhZ3MgfD0gSU9NQVBfRl9GU1ZFUklUWTtcXG4rXFxuIFxcdC8qXFxuIFxcdCAqIENPVyBmb3JrIGJsb2NrcyBjYW4gb3ZlcmxhcCBkYXRhIGZvcmsgYmxvY2tzIGV2ZW4gaWYgdGhlIGJsb2Nrc1xcbiBcXHQgKiBhcmVuJ3Qgc2hhcmVkLiAgQ09XIEkvTyBhbHdheXMgdGFrZXMgcHJlY2VkZW50LCBzbyB3ZSBtdXN0IGFsd2F5c1xcbkBAIC00NDMsNyArNDcwLDggQEAgeGZzX21hcF9ibG9ja3MoXFxuIFxcdCAgICBpc251bGxzdGFydGJsb2NrKGltYXAuYnJfc3RhcnRibG9jaykpXFxuIFxcdFxcdGdvdG8gYWxsb2NhdGVfYmxvY2tzO1xcbiBcXG4tXFx0eGZzX2JtYnRfdG9faW9tYXAoaXAsIFxcdTAwMjZ3cGMtXFx1MDAzZWlvbWFwLCBcXHUwMDI2aW1hcCwgMCwgMCwgWEZTX1dQQyh3cGMpLVxcdTAwM2VkYXRhX3NlcSk7XFxuK1xcdHhmc19ibWJ0X3RvX2lvbWFwKGlwLCBcXHUwMDI2d3BjLVxcdTAwM2Vpb21hcCwgXFx1MDAyNmltYXAsIDAsIGlvbWFwX2ZsYWdzLFxcbitcXHRcXHRcXHQgIFhGU19XUEMod3BjKS1cXHUwMDNlZGF0YV9zZXEpO1xcbiBcXHR0cmFjZV94ZnNfbWFwX2Jsb2Nrc19mb3VuZChpcCwgb2Zmc2V0LCBjb3VudCwgd2hpY2hmb3JrLCBcXHUwMDI2aW1hcCk7XFxuIFxcdHJldHVybiAwO1xcbiBhbGxvY2F0ZV9ibG9ja3M6XFxuQEAgLTU5MCwxMiArNjE4LDE2IEBAIHhmc196b25lZF9tYXBfYmxvY2tzKFxcbiBcXHR4ZnNfZmlsYmxrc190XFx0XFx0Y291bnRfZnNiO1xcbiBcXHRzdHJ1Y3QgeGZzX2JtYnRfaXJlY1xcdGltYXAsIGRlbDtcXG4gXFx0c3RydWN0IHhmc19pZXh0X2N1cnNvclxcdGljdXI7XFxuK1xcdHUxNlxcdFxcdFxcdGlvbWFwX2ZsYWdzID0gMDtcXG4gXFxuIFxcdGlmICh4ZnNfaXNfc2h1dGRvd24obXApKVxcbiBcXHRcXHRyZXR1cm4gLUVJTztcXG4gXFxuIFxcdFhGU19FUlJPUlRBR19ERUxBWShtcCwgWEZTX0VSUlRBR19XQl9ERUxBWV9NUyk7XFxuIFxcbitcXHRpZiAoeGZzX2lmbGFnc190ZXN0KGlwLCBYRlNfVkVSSVRZX0NPTlNUUlVDVElPTikpXFxuK1xcdFxcdGlvbWFwX2ZsYWdzIHw9IElPTUFQX0ZfRlNWRVJJVFk7XFxuK1xcbiBcXHQvKlxcbiBcXHQgKiBBbGwgZGlydHkgZGF0YSBtdXN0IGJlIGNvdmVyZWQgYnkgZGVsYWxsb2MgZXh0ZW50cy4gIEJ1dCB0cnVuY2F0ZSBjYW5cXG4gXFx0ICogcmVtb3ZlIGRlbGFsbG9jIGV4dGVudHMgdW5kZXJuZWF0aCB1cyBvciByZWR1Y2UgdGhlaXIgc2l6ZS5cXG5AQCAtNjE5LDcgKzY1MSw3IEBAIHhmc196b25lZF9tYXBfYmxvY2tzKFxcbiBcXHRcXHRpbWFwLmJyX3N0YXJ0YmxvY2sgPSBIT0xFU1RBUlRCTE9DSztcXG4gXFx0XFx0aW1hcC5icl9zdGF0ZSA9IFhGU19FWFRfTk9STTtcXG4gXFx0XFx0eGZzX2l1bmxvY2soaXAsIFhGU19JTE9DS19FWENMKTtcXG4tXFx0XFx0eGZzX2JtYnRfdG9faW9tYXAoaXAsIFxcdTAwMjZ3cGMtXFx1MDAzZWlvbWFwLCBcXHUwMDI2aW1hcCwgMCwgMCwgMCk7XFxuK1xcdFxcdHhmc19ibWJ0X3RvX2lvbWFwKGlwLCBcXHUwMDI2d3BjLVxcdTAwM2Vpb21hcCwgXFx1MDAyNmltYXAsIDAsIGlvbWFwX2ZsYWdzLCAwKTtcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcdH1cXG4gXFx0ZW5kX2ZzYiA9IG1pbihlbmRfZnNiLCBpbWFwLmJyX3N0YXJ0b2ZmICsgaW1hcC5icl9ibG9ja2NvdW50KTtcXG5AQCAtNjMyLDcgKzY2NCw3IEBAIHhmc196b25lZF9tYXBfYmxvY2tzKFxcbiBcXHR4ZnNfaXVubG9jayhpcCwgWEZTX0lMT0NLX0VYQ0wpO1xcbiBcXG4gXFx0d3BjLVxcdTAwM2Vpb21hcC50eXBlID0gSU9NQVBfTUFQUEVEO1xcbi1cXHR3cGMtXFx1MDAzZWlvbWFwLmZsYWdzID0gSU9NQVBfRl9ESVJUWTtcXG4rXFx0d3BjLVxcdTAwM2Vpb21hcC5mbGFncyA9IGlvbWFwX2ZsYWdzIHwgSU9NQVBfRl9ESVJUWTtcXG4gXFx0d3BjLVxcdTAwM2Vpb21hcC5iZGV2ID0gbXAtXFx1MDAzZW1fcnRkZXZfdGFyZ3AtXFx1MDAzZWJ0X2JkZXY7XFxuIFxcdHdwYy1cXHUwMDNlaW9tYXAub2Zmc2V0ID0gb2Zmc2V0O1xcbiBcXHR3cGMtXFx1MDAzZWlvbWFwLmxlbmd0aCA9IFhGU19GU0JfVE9fQihtcCwgY291bnRfZnNiKTtcXG5AQCAtNjg0LDYgKzcxNiwyMiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGlvbWFwX3dyaXRlYmFja19vcHMgeGZzX3pvbmVkX3dyaXRlYmFja19vcHMgPSB7XFxuIFxcdC53cml0ZWJhY2tfc3VibWl0XFx0PSB4ZnNfem9uZWRfd3JpdGViYWNrX3N1Ym1pdCxcXG4gfTtcXG4gXFxuK3N0YXRpYyBpbnRcXG4reGZzX2lvbWFwX3dyaXRlcGFnZXMoXFxuK1xcdHN0cnVjdCB4ZnNfaW5vZGVcXHRcXHQqaXAsXFxuK1xcdHN0cnVjdCBpb21hcF93cml0ZXBhZ2VfY3R4XFx0KmN0eClcXG4re1xcbitcXHQvKlxcbitcXHQgKiBXcml0ZWJhY2sgZG9lcyBub3Qgd29yayBmb3IgZm9saW9zIHBhc3QgRU9GLCBsZXQgaXQga25vdyB0aGF0XFxuK1xcdCAqIEkvTyBoYXBwZW5zIGZvciBmc3Zlcml0eSBtZXRhZGF0YSBhbmQgdGhpcyByZXN0cmljdGlvbiBuZWVkXFxuK1xcdCAqIHRvIGJlIHNraXBwZWRcXG4rXFx0ICovXFxuK1xcdGlmICh4ZnNfaWZsYWdzX3Rlc3QoaXAsIFhGU19WRVJJVFlfQ09OU1RSVUNUSU9OKSlcXG4rXFx0XFx0Y3R4LVxcdTAwM2Vpb21hcC5mbGFncyB8PSBJT01BUF9GX0ZTVkVSSVRZO1xcbitcXG4rXFx0cmV0dXJuIGlvbWFwX3dyaXRlcGFnZXMoY3R4KTtcXG4rfVxcbitcXG4gU1RBVElDIGludFxcbiB4ZnNfdm1fd3JpdGVwYWdlcyhcXG4gXFx0c3RydWN0IGFkZHJlc3Nfc3BhY2VcXHQqbWFwcGluZyxcXG5AQCAtNzAzLDcgKzc1MSw3IEBAIHhmc192bV93cml0ZXBhZ2VzKFxcbiBcXHRcXHR9O1xcbiBcXHRcXHRpbnRcXHRcXHRcXHRcXHRlcnJvcjtcXG4gXFxuLVxcdFxcdGVycm9yID0gaW9tYXBfd3JpdGVwYWdlcyhcXHUwMDI2eGMuY3R4KTtcXG4rXFx0XFx0ZXJyb3IgPSB4ZnNfaW9tYXBfd3JpdGVwYWdlcyhpcCwgXFx1MDAyNnhjLmN0eCk7XFxuIFxcdFxcdGlmICh4Yy5vcGVuX3pvbmUpXFxuIFxcdFxcdFxcdHhmc19vcGVuX3pvbmVfcHV0KHhjLm9wZW5fem9uZSk7XFxuIFxcdFxcdHJldHVybiBlcnJvcjtcXG5AQCAtNzE2LDcgKzc2NCw3IEBAIHhmc192bV93cml0ZXBhZ2VzKFxcbiBcXHRcXHRcXHR9LFxcbiBcXHRcXHR9O1xcbiBcXG4tXFx0XFx0cmV0dXJuIGlvbWFwX3dyaXRlcGFnZXMoXFx1MDAyNndwYy5jdHgpO1xcbitcXHRcXHRyZXR1cm4geGZzX2lvbWFwX3dyaXRlcGFnZXMoaXAsIFxcdTAwMjZ3cGMuY3R4KTtcXG4gXFx0fVxcbiB9XFxuIFxcbkBAIC03NjEsOSArODA5LDEyIEBAIHhmc19iaW9fc3VibWl0X3JlYWQoXFxuIFxcdHN0cnVjdCBpb21hcF9yZWFkX2ZvbGlvX2N0eFxcdCpjdHgpXFxuIHtcXG4gXFx0c3RydWN0IGJpb1xcdFxcdFxcdCpiaW8gPSBjdHgtXFx1MDAzZXJlYWRfY3R4O1xcbitcXHRzdHJ1Y3QgaW9tYXBfaW9lbmRcXHRcXHQqaW9lbmQ7XFxuIFxcbiBcXHQvKiBkZWZlciByZWFkIGNvbXBsZXRpb25zIHRvIHRoZSBpb2VuZCB3b3JrcXVldWUgKi9cXG4tXFx0aW9tYXBfaW5pdF9pb2VuZChpdGVyLVxcdTAwM2Vpbm9kZSwgYmlvLCBjdHgtXFx1MDAzZXJlYWRfY3R4X2ZpbGVfb2Zmc2V0LCAwKTtcXG4rXFx0aW9lbmQgPSBpb21hcF9pbml0X2lvZW5kKGl0ZXItXFx1MDAzZWlub2RlLCBiaW8sIGN0eC1cXHUwMDNlcmVhZF9jdHhfZmlsZV9vZmZzZXQsXFxuK1xcdFxcdFxcdDApO1xcbitcXHRpb2VuZC1cXHUwMDNlaW9fdmkgPSBjdHgtXFx1MDAzZXZpO1xcbiBcXHRpb21hcF9iaW9fc3VibWl0X3JlYWRfZW5kaW8oaXRlciwgY3R4LCB4ZnNfZW5kX2Jpbyk7XFxuIH1cXG4gXFxuQEAgLTc3NSwxMSArODI2LDEzIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaW9tYXBfcmVhZF9vcHMgeGZzX2lvbWFwX3JlYWRfb3BzID0ge1xcbiBcXG4gc3RhdGljIGlubGluZSBjb25zdCBzdHJ1Y3QgaW9tYXBfcmVhZF9vcHMgKlxcbiB4ZnNfZ2V0X2lvbWFwX3JlYWRfb3BzKFxcbi1cXHRjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZVxcdCptYXBwaW5nKVxcbitcXHRjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZVxcdCptYXBwaW5nLFxcbitcXHRsb2ZmX3RcXHRcXHRcXHRcXHRwb3NpdGlvbilcXG4ge1xcbiBcXHRzdHJ1Y3QgeGZzX2lub2RlXFx0XFx0KmlwID0gWEZTX0kobWFwcGluZy1cXHUwMDNlaG9zdCk7XFxuIFxcbi1cXHRpZiAoYmRldl9oYXNfaW50ZWdyaXR5X2NzdW0oeGZzX2lub2RlX2J1ZnRhcmcoaXApLVxcdTAwM2VidF9iZGV2KSlcXG4rXFx0aWYgKGJkZXZfaGFzX2ludGVncml0eV9jc3VtKHhmc19pbm9kZV9idWZ0YXJnKGlwKS1cXHUwMDNlYnRfYmRldikgfHxcXG4rXFx0XFx0XFx0eGZzX2ZzdmVyaXR5X2lzX2ZpbGVfZGF0YShpcCwgcG9zaXRpb24pKVxcbiBcXHRcXHRyZXR1cm4gXFx1MDAyNnhmc19pb21hcF9yZWFkX29wcztcXG4gXFx0cmV0dXJuIFxcdTAwMjZpb21hcF9iaW9fcmVhZF9vcHM7XFxuIH1cXG5AQCAtNzkxLDcgKzg0NCw3IEBAIHhmc192bV9yZWFkX2ZvbGlvKFxcbiB7XFxuIFxcdHN0cnVjdCBpb21hcF9yZWFkX2ZvbGlvX2N0eFxcdGN0eCA9IHsgLmN1cl9mb2xpbyA9IGZvbGlvIH07XFxuIFxcbi1cXHRjdHgub3BzID0geGZzX2dldF9pb21hcF9yZWFkX29wcyhmb2xpby1cXHUwMDNlbWFwcGluZyk7XFxuK1xcdGN0eC5vcHMgPSB4ZnNfZ2V0X2lvbWFwX3JlYWRfb3BzKGZvbGlvLVxcdTAwM2VtYXBwaW5nLCBmb2xpb19wb3MoZm9saW8pKTtcXG4gXFx0aW9tYXBfcmVhZF9mb2xpbyhcXHUwMDI2eGZzX3JlYWRfaW9tYXBfb3BzLCBcXHUwMDI2Y3R4LCBOVUxMKTtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG5AQCAtODAyLDcgKzg1NSw3IEBAIHhmc192bV9yZWFkYWhlYWQoXFxuIHtcXG4gXFx0c3RydWN0IGlvbWFwX3JlYWRfZm9saW9fY3R4XFx0Y3R4ID0geyAucmFjID0gcmFjIH07XFxuIFxcbi1cXHRjdHgub3BzID0geGZzX2dldF9pb21hcF9yZWFkX29wcyhyYWMtXFx1MDAzZW1hcHBpbmcpLFxcbitcXHRjdHgub3BzID0geGZzX2dldF9pb21hcF9yZWFkX29wcyhyYWMtXFx1MDAzZW1hcHBpbmcsIHJlYWRhaGVhZF9wb3MocmFjKSk7XFxuIFxcdGlvbWFwX3JlYWRhaGVhZChcXHUwMDI2eGZzX3JlYWRfaW9tYXBfb3BzLCBcXHUwMDI2Y3R4LCBOVUxMKTtcXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19ibWFwX3V0aWwuYyBiL2ZzL3hmcy94ZnNfYm1hcF91dGlsLmNcXG5pbmRleCAzYjlmMjYyZjhlOTEyOC4uYjM0ZjJmMjdjYzkzYTggMTAwNjQ0XFxuLS0tIGEvZnMveGZzL3hmc19ibWFwX3V0aWwuY1xcbisrKyBiL2ZzL3hmcy94ZnNfYm1hcF91dGlsLmNcXG5AQCAtMzEsNiArMzEsNyBAQFxcbiAjaW5jbHVkZSBcXFwieGZzX3J0Yml0bWFwLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJ4ZnNfcnRncm91cC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwieGZzX3pvbmVfYWxsb2MuaFxcXCJcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ZzdmVyaXR5LmhcXHUwMDNlXFxuIFxcbiAvKiBLZXJuZWwgb25seSBCTUFQIHJlbGF0ZWQgZGVmaW5pdGlvbnMgYW5kIGZ1bmN0aW9ucyAqL1xcbiBcXG5AQCAtNTUzLDYgKzU1NCwxMyBAQCB4ZnNfY2FuX2ZyZWVfZW9mYmxvY2tzKFxcbiBcXHRpZiAobGFzdF9mc2IgXFx1MDAzYz0gZW5kX2ZzYilcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXG4rXFx0LypcXG4rXFx0ICogTm90aGluZyB0byBjbGVhbiBvbiBmc3Zlcml0eSBpbm9kZXMgYXMgdGhleSBkb24ndCB1c2UgcHJlYWxsb2MgYW5kXFxuK1xcdCAqIHRoZXJlIG5vIGRlbGFsbG9jIGFzIG9ubHkgd3JpdHRlbiBkYXRhIGlzIGZzdmVyaXR5IG1ldGFkYXRhXFxuK1xcdCAqL1xcbitcXHRpZiAoSVNfVkVSSVRZKFZGU19JKGlwKSkpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuIFxcdC8qXFxuIFxcdCAqIENoZWNrIGlmIHRoZXJlIGlzIGFuIHBvc3QtRU9GIGV4dGVudCB0byBmcmVlLiAgSWYgdGhlcmUgYXJlIGFueVxcbiBcXHQgKiBkZWxhbGxvYyBibG9ja3MgYXR0YWNoZWQgdG8gdGhlIGlub2RlIChkYXRhIGZvcmsgZGVsYWxsb2NcXG5kaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19maWxlLmMgYi9mcy94ZnMveGZzX2ZpbGUuY1xcbmluZGV4IDg0NWE5N2M5YjA2MzBiLi5jYmExOTRkNjc4ZmM3NyAxMDA2NDRcXG4tLS0gYS9mcy94ZnMveGZzX2ZpbGUuY1xcbisrKyBiL2ZzL3hmcy94ZnNfZmlsZS5jXFxuQEAgLTM3LDYgKzM3LDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ZhZHZpc2UuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21vdW50LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9maWxlbG9jay5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvZnN2ZXJpdHkuaFxcdTAwM2VcXG4gXFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgeGZzX2ZpbGVfdm1fb3BzO1xcbiBcXG5AQCAtMjQ1LDYgKzI0NiwyNSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGlvbWFwX2Rpb19vcHMgeGZzX2Rpb19yZWFkX2JvdW5jZV9vcHMgPSB7XFxuIFxcdC5iaW9fc2V0XFx0PSBcXHUwMDI2aW9tYXBfaW9lbmRfYmlvc2V0LFxcbiB9O1xcbiBcXG4rU1RBVElDIHNzaXplX3RcXG4reGZzX2ZpbGVfYnVmZmVyZWRfcmVhZChcXG4rXFx0c3RydWN0IGtpb2NiXFx0XFx0KmlvY2IsXFxuK1xcdHN0cnVjdCBpb3ZfaXRlclxcdFxcdCp0bylcXG4re1xcbitcXHRzdHJ1Y3QgeGZzX2lub2RlXFx0KmlwID0gWEZTX0koZmlsZV9pbm9kZShpb2NiLVxcdTAwM2VraV9maWxwKSk7XFxuK1xcdHNzaXplX3RcXHRcXHRcXHRyZXQ7XFxuK1xcbitcXHR0cmFjZV94ZnNfZmlsZV9idWZmZXJlZF9yZWFkKGlvY2IsIHRvKTtcXG4rXFxuK1xcdHJldCA9IHhmc19pbG9ja19pb2NiKGlvY2IsIFhGU19JT0xPQ0tfU0hBUkVEKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0cmV0ID0gZ2VuZXJpY19maWxlX3JlYWRfaXRlcihpb2NiLCB0byk7XFxuK1xcdHhmc19pdW5sb2NrKGlwLCBYRlNfSU9MT0NLX1NIQVJFRCk7XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbiBTVEFUSUMgc3NpemVfdFxcbiB4ZnNfZmlsZV9kaW9fcmVhZChcXG4gXFx0c3RydWN0IGtpb2NiXFx0XFx0KmlvY2IsXFxuQEAgLTI2NSw2ICsyODUsMTYgQEAgeGZzX2ZpbGVfZGlvX3JlYWQoXFxuIFxcdHJldCA9IHhmc19pbG9ja19pb2NiKGlvY2IsIFhGU19JT0xPQ0tfU0hBUkVEKTtcXG4gXFx0aWYgKHJldClcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0LypcXG4rXFx0ICogUmUtY2hlY2sgdmVyaXR5IHN0YXR1cyBhZnRlciBhY3F1aXJpbmcgbG9jay4gVGhpcyBwcmV2ZW50cyBUT0NUT1UgaW5cXG4rXFx0ICogeGZzX2ZpbGVfcmVhZF9pdGVyKCkgd2hpbGUgZmFsbGluZyBiYWNrIGZyb20gRElPIHRvIGJ1ZmZlcmVkIEkvTyBhc1xcbitcXHQgKiBub3cgd2UgYXJlIGhvbGRpbmcgYSBsb2NrXFxuK1xcdCAqL1xcbitcXHRpZiAoZnN2ZXJpdHlfYWN0aXZlKFZGU19JKGlwKSkpIHtcXG4rXFx0XFx0eGZzX2l1bmxvY2soaXAsIFhGU19JT0xPQ0tfU0hBUkVEKTtcXG4rXFx0XFx0aW9jYi1cXHUwMDNla2lfZmxhZ3MgXFx1MDAyNj0gfklPQ0JfRElSRUNUO1xcbitcXHRcXHRyZXR1cm4geGZzX2ZpbGVfYnVmZmVyZWRfcmVhZChpb2NiLCB0byk7XFxuK1xcdH1cXG4gXFx0aWYgKG1hcHBpbmdfc3RhYmxlX3dyaXRlcyhpb2NiLVxcdTAwM2VraV9maWxwLVxcdTAwM2VmX21hcHBpbmcpKSB7XFxuIFxcdFxcdGRpb19vcHMgPSBcXHUwMDI2eGZzX2Rpb19yZWFkX2JvdW5jZV9vcHM7XFxuIFxcdFxcdGRpb19mbGFncyB8PSBJT01BUF9ESU9fQk9VTkNFO1xcbkBAIC0yODEsNyArMzExLDggQEAgeGZzX2ZpbGVfZGF4X3JlYWQoXFxuIFxcdHN0cnVjdCBraW9jYlxcdFxcdCppb2NiLFxcbiBcXHRzdHJ1Y3QgaW92X2l0ZXJcXHRcXHQqdG8pXFxuIHtcXG4tXFx0c3RydWN0IHhmc19pbm9kZVxcdCppcCA9IFhGU19JKGlvY2ItXFx1MDAzZWtpX2ZpbHAtXFx1MDAzZWZfbWFwcGluZy1cXHUwMDNlaG9zdCk7XFxuK1xcdHN0cnVjdCBpbm9kZVxcdFxcdCppbm9kZSA9IGlvY2ItXFx1MDAzZWtpX2ZpbHAtXFx1MDAzZWZfbWFwcGluZy1cXHUwMDNlaG9zdDtcXG4rXFx0c3RydWN0IHhmc19pbm9kZVxcdCppcCA9IFhGU19JKGlub2RlKTtcXG4gXFx0c3NpemVfdFxcdFxcdFxcdHJldCA9IDA7XFxuIFxcbiBcXHR0cmFjZV94ZnNfZmlsZV9kYXhfcmVhZChpb2NiLCB0byk7XFxuQEAgLTI5OSwyNSArMzMwLDYgQEAgeGZzX2ZpbGVfZGF4X3JlYWQoXFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuLVNUQVRJQyBzc2l6ZV90XFxuLXhmc19maWxlX2J1ZmZlcmVkX3JlYWQoXFxuLVxcdHN0cnVjdCBraW9jYlxcdFxcdCppb2NiLFxcbi1cXHRzdHJ1Y3QgaW92X2l0ZXJcXHRcXHQqdG8pXFxuLXtcXG4tXFx0c3RydWN0IHhmc19pbm9kZVxcdCppcCA9IFhGU19JKGZpbGVfaW5vZGUoaW9jYi1cXHUwMDNla2lfZmlscCkpO1xcbi1cXHRzc2l6ZV90XFx0XFx0XFx0cmV0O1xcbi1cXG4tXFx0dHJhY2VfeGZzX2ZpbGVfYnVmZmVyZWRfcmVhZChpb2NiLCB0byk7XFxuLVxcbi1cXHRyZXQgPSB4ZnNfaWxvY2tfaW9jYihpb2NiLCBYRlNfSU9MT0NLX1NIQVJFRCk7XFxuLVxcdGlmIChyZXQpXFxuLVxcdFxcdHJldHVybiByZXQ7XFxuLVxcdHJldCA9IGdlbmVyaWNfZmlsZV9yZWFkX2l0ZXIoaW9jYiwgdG8pO1xcbi1cXHR4ZnNfaXVubG9jayhpcCwgWEZTX0lPTE9DS19TSEFSRUQpO1xcbi1cXG4tXFx0cmV0dXJuIHJldDtcXG4tfVxcbi1cXG4gU1RBVElDIHNzaXplX3RcXG4geGZzX2ZpbGVfcmVhZF9pdGVyKFxcbiBcXHRzdHJ1Y3Qga2lvY2JcXHRcXHQqaW9jYixcXG5AQCAtMzMyLDYgKzM0NCwxNCBAQCB4ZnNfZmlsZV9yZWFkX2l0ZXIoXFxuIFxcdGlmICh4ZnNfaXNfc2h1dGRvd24obXApKVxcbiBcXHRcXHRyZXR1cm4gLUVJTztcXG4gXFxuK1xcdC8qXFxuK1xcdCAqIEluIGNhc2UgZnMtdmVyaXR5IGlzIGVuYWJsZWQsIHdlIGFsc28gZmFsbGJhY2sgdG8gdGhlIGJ1ZmZlcmVkIHJlYWRcXG4rXFx0ICogZnJvbSB0aGUgZGlyZWN0IHJlYWQgcGF0aC4gVGhlcmVmb3JlLCBJT0NCX0RJUkVDVCBpcyBzZXQgYW5kIG5lZWQgdG9cXG4rXFx0ICogYmUgY2xlYXJlZCAoc2VlIGdlbmVyaWNfZmlsZV9yZWFkX2l0ZXIoKSlcXG4rXFx0ICovXFxuK1xcdGlmIChmc3Zlcml0eV9hY3RpdmUoaW5vZGUpKVxcbitcXHRcXHRpb2NiLVxcdTAwM2VraV9mbGFncyBcXHUwMDI2PSB+SU9DQl9ESVJFQ1Q7XFxuK1xcbiBcXHRpZiAoSVNfREFYKGlub2RlKSlcXG4gXFx0XFx0cmV0ID0geGZzX2ZpbGVfZGF4X3JlYWQoaW9jYiwgdG8pO1xcbiBcXHRlbHNlIGlmIChpb2NiLVxcdTAwM2VraV9mbGFncyBcXHUwMDI2IElPQ0JfRElSRUNUKVxcbkBAIC0xNzAwLDExICsxNzIwLDE4IEBAIHhmc19maWxlX29wZW4oXFxuIFxcdHN0cnVjdCBpbm9kZVxcdCppbm9kZSxcXG4gXFx0c3RydWN0IGZpbGVcXHQqZmlsZSlcXG4ge1xcbitcXHRpbnRcXHRcXHRlcnJvcjtcXG4rXFxuIFxcdGlmICh4ZnNfaXNfc2h1dGRvd24oWEZTX00oaW5vZGUtXFx1MDAzZWlfc2IpKSlcXG4gXFx0XFx0cmV0dXJuIC1FSU87XFxuIFxcdGZpbGUtXFx1MDAzZWZfbW9kZSB8PSBGTU9ERV9OT1dBSVQgfCBGTU9ERV9DQU5fT0RJUkVDVDtcXG4gXFx0aWYgKHhmc19nZXRfYXRvbWljX3dyaXRlX21pbihYRlNfSShpbm9kZSkpIFxcdTAwM2UgMClcXG4gXFx0XFx0ZmlsZS1cXHUwMDNlZl9tb2RlIHw9IEZNT0RFX0NBTl9BVE9NSUNfV1JJVEU7XFxuK1xcbitcXHRlcnJvciA9IGZzdmVyaXR5X2ZpbGVfb3Blbihpbm9kZSwgZmlsZSk7XFxuK1xcdGlmIChlcnJvcilcXG4rXFx0XFx0cmV0dXJuIGVycm9yO1xcbitcXG4gXFx0cmV0dXJuIGdlbmVyaWNfZmlsZV9vcGVuKGlub2RlLCBmaWxlKTtcXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19mc3Zlcml0eS5jIGIvZnMveGZzL3hmc19mc3Zlcml0eS5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uOTczMjgxMWExNDQ0ZTZcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvZnMveGZzL3hmc19mc3Zlcml0eS5jXFxuQEAgLTAsMCArMSw0NzMgQEBcXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cXG4rLypcXG4rICogQ29weXJpZ2h0IChDKSAyMDI2IFJlZCBIYXQsIEluYy5cXG4rICovXFxuKyNpbmNsdWRlIFxcXCJ4ZnNfcGxhdGZvcm0uaFxcXCJcXG4rI2luY2x1ZGUgXFxcInhmc19mb3JtYXQuaFxcXCJcXG4rI2luY2x1ZGUgXFxcInhmc19zaGFyZWQuaFxcXCJcXG4rI2luY2x1ZGUgXFxcInhmc190cmFuc19yZXN2LmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJ4ZnNfbW91bnQuaFxcXCJcXG4rI2luY2x1ZGUgXFxcInhmc19kYV9mb3JtYXQuaFxcXCJcXG4rI2luY2x1ZGUgXFxcInhmc19kYV9idHJlZS5oXFxcIlxcbisjaW5jbHVkZSBcXFwieGZzX2lub2RlLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJ4ZnNfbG9nX2Zvcm1hdC5oXFxcIlxcbisjaW5jbHVkZSBcXFwieGZzX2JtYXBfdXRpbC5oXFxcIlxcbisjaW5jbHVkZSBcXFwieGZzX3RyYW5zLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJ4ZnNfdHJhY2UuaFxcXCJcXG4rI2luY2x1ZGUgXFxcInhmc19xdW90YS5oXFxcIlxcbisjaW5jbHVkZSBcXFwieGZzX2ZzdmVyaXR5LmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJ4ZnNfaW9tYXAuaFxcXCJcXG4rI2luY2x1ZGUgXFxcInhmc19lcnJvci5oXFxcIlxcbisjaW5jbHVkZSBcXFwieGZzX2hlYWx0aC5oXFxcIlxcbisjaW5jbHVkZSBcXFwieGZzX2JtYXAuaFxcXCJcXG4rI2luY2x1ZGUgXFxcInhmc19ibWFwX3V0aWwuaFxcXCJcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ZzdmVyaXR5LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9pb21hcC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcGFnZW1hcC5oXFx1MDAzZVxcbitcXG4rbG9mZl90XFxuK3hmc19mc3Zlcml0eV9tZXRhZGF0YV9vZmZzZXQoXFxuK1xcdGNvbnN0IHN0cnVjdCB4ZnNfaW5vZGVcXHQqaXApXFxuK3tcXG4rXFx0cmV0dXJuIHJvdW5kX3VwKGlfc2l6ZV9yZWFkKFZGU19JQyhpcCkpLCBYRlNfRlNWRVJJVFlfU1RBUlRfQUxJR04pO1xcbit9XFxuK1xcbitib29sXFxuK3hmc19mc3Zlcml0eV9pc19maWxlX2RhdGEoXFxuK1xcdGNvbnN0IHN0cnVjdCB4ZnNfaW5vZGVcXHQqaXAsXFxuK1xcdGxvZmZfdFxcdFxcdFxcdG9mZnNldClcXG4re1xcbitcXHRyZXR1cm4gZnN2ZXJpdHlfYWN0aXZlKFZGU19JQyhpcCkpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdG9mZnNldCBcXHUwMDNjIHhmc19mc3Zlcml0eV9tZXRhZGF0YV9vZmZzZXQoaXApO1xcbit9XFxuK1xcbisvKlxcbisgKiBSZXRyaWV2ZSB0aGUgdmVyaXR5IGRlc2NyaXB0b3IuXFxuKyAqL1xcbitzdGF0aWMgaW50XFxuK3hmc19mc3Zlcml0eV9nZXRfZGVzY3JpcHRvcihcXG4rXFx0c3RydWN0IGlub2RlXFx0XFx0Kmlub2RlLFxcbitcXHR2b2lkXFx0XFx0XFx0KmJ1ZixcXG4rXFx0c2l6ZV90XFx0XFx0XFx0YnVmX3NpemUpXFxuK3tcXG4rXFx0c3RydWN0IHhmc19pbm9kZVxcdCppcCA9IFhGU19JKGlub2RlKTtcXG4rXFx0c3RydWN0IHhmc19tb3VudFxcdCptcCA9IGlwLVxcdTAwM2VpX21vdW50O1xcbitcXHRfX2JlMzJcXHRcXHRcXHRkX2Rlc2Nfc2l6ZTtcXG4rXFx0dTMyXFx0XFx0XFx0ZGVzY19zaXplO1xcbitcXHR1NjRcXHRcXHRcXHRkZXNjX3NpemVfcG9zO1xcbitcXHRpbnRcXHRcXHRcXHRlcnJvcjtcXG4rXFx0dTY0XFx0XFx0XFx0ZGVzY19wb3M7XFxuK1xcdHN0cnVjdCB4ZnNfYm1idF9pcmVjXFx0cmVjO1xcbitcXHRpbnRcXHRcXHRcXHRpc19lbXB0eTtcXG4rXFx0dWludDMyX3RcXHRcXHRibG9ja3NpemUgPSBpX2Jsb2Nrc2l6ZShWRlNfSShpcCkpO1xcbitcXHR4ZnNfZmlsZW9mZl90XFx0XFx0bGFzdF9ibG9ja19vZmZzZXQ7XFxuK1xcbitcXHRBU1NFUlQoaW5vZGUtXFx1MDAzZWlfZmxhZ3MgXFx1MDAyNiBTX1ZFUklUWSk7XFxuK1xcdHhmc19pbG9jayhpcCwgWEZTX0lMT0NLX1NIQVJFRCk7XFxuK1xcdGVycm9yID0geGZzX2JtYXBfbGFzdF9leHRlbnQoTlVMTCwgaXAsIFhGU19EQVRBX0ZPUkssIFxcdTAwMjZyZWMsIFxcdTAwMjZpc19lbXB0eSk7XFxuK1xcdHhmc19pdW5sb2NrKGlwLCBYRlNfSUxPQ0tfU0hBUkVEKTtcXG4rXFx0aWYgKGVycm9yKVxcbitcXHRcXHRyZXR1cm4gZXJyb3I7XFxuK1xcbitcXHRpZiAoaXNfZW1wdHkpXFxuK1xcdFxcdHJldHVybiAtRU5PREFUQTtcXG4rXFxuK1xcdGxhc3RfYmxvY2tfb2Zmc2V0ID1cXG4rXFx0XFx0WEZTX0ZTQl9UT19CKG1wLCByZWMuYnJfc3RhcnRvZmYgKyByZWMuYnJfYmxvY2tjb3VudCk7XFxuK1xcdGlmIChsYXN0X2Jsb2NrX29mZnNldCBcXHUwMDNjPSB4ZnNfZnN2ZXJpdHlfbWV0YWRhdGFfb2Zmc2V0KGlwKSlcXG4rXFx0XFx0cmV0dXJuIC1FTk9EQVRBO1xcbitcXG4rXFx0ZGVzY19zaXplX3BvcyA9IGxhc3RfYmxvY2tfb2Zmc2V0IC0gc2l6ZW9mKF9fYmUzMik7XFxuK1xcdGVycm9yID0gZnN2ZXJpdHlfcGFnZWNhY2hlX3JlYWQoaW5vZGUsIChjaGFyICopXFx1MDAyNmRfZGVzY19zaXplLFxcbitcXHRcXHRcXHRzaXplb2YoZF9kZXNjX3NpemUpLCBkZXNjX3NpemVfcG9zKTtcXG4rXFx0aWYgKGVycm9yKVxcbitcXHRcXHRyZXR1cm4gZXJyb3I7XFxuK1xcbitcXHRkZXNjX3NpemUgPSBiZTMyX3RvX2NwdShkX2Rlc2Nfc2l6ZSk7XFxuK1xcdGlmIChYRlNfSVNfQ09SUlVQVChtcCwgZGVzY19zaXplIFxcdTAwM2UgRlNfVkVSSVRZX01BWF9ERVNDUklQVE9SX1NJWkUpKSB7XFxuK1xcdFxcdHhmc19pbm9kZV9tYXJrX3NpY2soWEZTX0koaW5vZGUpLCBYRlNfU0lDS19JTk9fRlNWRVJJVFkpO1xcbitcXHRcXHRyZXR1cm4gLUVSQU5HRTtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKFhGU19JU19DT1JSVVBUKG1wLCBkZXNjX3NpemUgXFx1MDAzZSBkZXNjX3NpemVfcG9zKSkge1xcbitcXHRcXHR4ZnNfaW5vZGVfbWFya19zaWNrKFhGU19JKGlub2RlKSwgWEZTX1NJQ0tfSU5PX0ZTVkVSSVRZKTtcXG4rXFx0XFx0cmV0dXJuIC1FUkFOR0U7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICghYnVmX3NpemUpXFxuK1xcdFxcdHJldHVybiBkZXNjX3NpemU7XFxuK1xcbitcXHRpZiAoWEZTX0lTX0NPUlJVUFQobXAsIGRlc2Nfc2l6ZSBcXHUwMDNlIGJ1Zl9zaXplKSkge1xcbitcXHRcXHR4ZnNfaW5vZGVfbWFya19zaWNrKFhGU19JKGlub2RlKSwgWEZTX1NJQ0tfSU5PX0ZTVkVSSVRZKTtcXG4rXFx0XFx0cmV0dXJuIC1FUkFOR0U7XFxuK1xcdH1cXG4rXFxuK1xcdGRlc2NfcG9zID0gcm91bmRfZG93bihkZXNjX3NpemVfcG9zIC0gZGVzY19zaXplLCBibG9ja3NpemUpO1xcbitcXHRpZiAoZGVzY19wb3MgXFx1MDAzYyB4ZnNfZnN2ZXJpdHlfbWV0YWRhdGFfb2Zmc2V0KGlwKSkge1xcbitcXHRcXHR4ZnNfaW5vZGVfbWFya19zaWNrKFhGU19JKGlub2RlKSwgWEZTX1NJQ0tfSU5PX0ZTVkVSSVRZKTtcXG4rXFx0XFx0cmV0dXJuIC1FUkFOR0U7XFxuK1xcdH1cXG4rXFxuK1xcdGVycm9yID0gZnN2ZXJpdHlfcGFnZWNhY2hlX3JlYWQoaW5vZGUsIGJ1ZiwgZGVzY19zaXplLCBkZXNjX3Bvcyk7XFxuK1xcdGlmIChlcnJvcilcXG4rXFx0XFx0cmV0dXJuIGVycm9yO1xcbitcXG4rXFx0cmV0dXJuIGRlc2Nfc2l6ZTtcXG4rfVxcbitcXG4rc3RhdGljIGludFxcbit4ZnNfZnN2ZXJpdHlfd3JpdGVfZGVzY3JpcHRvcihcXG4rXFx0c3RydWN0IGZpbGVcXHRcXHQqZmlsZSxcXG4rXFx0Y29uc3Qgdm9pZFxcdFxcdCpkZXNjLFxcbitcXHR1MzJcXHRcXHRcXHRkZXNjX3NpemUsXFxuK1xcdHU2NFxcdFxcdFxcdG1lcmtsZV90cmVlX3NpemUpXFxuK3tcXG4rXFx0aW50XFx0XFx0XFx0ZXJyb3I7XFxuK1xcdHN0cnVjdCBpbm9kZVxcdFxcdCppbm9kZSA9IGZpbGVfaW5vZGUoZmlsZSk7XFxuK1xcdHN0cnVjdCB4ZnNfaW5vZGVcXHQqaXAgPSBYRlNfSShpbm9kZSk7XFxuK1xcdHVuc2lnbmVkIGludFxcdFxcdGJsa3NpemUgPSBpcC1cXHUwMDNlaV9tb3VudC1cXHUwMDNlbV9zYi5zYl9ibG9ja3NpemU7XFxuK1xcdHU2NFxcdFxcdFxcdHRyZWVfbGFzdF9ibG9jayA9XFxuK1xcdFxcdFxcdHhmc19mc3Zlcml0eV9tZXRhZGF0YV9vZmZzZXQoaXApICsgbWVya2xlX3RyZWVfc2l6ZTtcXG4rXFx0dTY0XFx0XFx0XFx0ZGVzY19wb3MgPVxcbitcXHRcXHRcXHRyb3VuZF91cCh0cmVlX2xhc3RfYmxvY2ssIFhGU19GU1ZFUklUWV9TVEFSVF9BTElHTik7XFxuK1xcdHU2NFxcdFxcdFxcdGRlc2NfZW5kID0gZGVzY19wb3MgKyBkZXNjX3NpemU7XFxuK1xcdF9fYmUzMlxcdFxcdFxcdGRlc2Nfc2l6ZV9kaXNrID0gY3B1X3RvX2JlMzIoZGVzY19zaXplKTtcXG4rXFx0dTY0XFx0XFx0XFx0ZGVzY19zaXplX3BvcyA9XFxuK1xcdFxcdFxcdHJvdW5kX3VwKGRlc2NfZW5kICsgc2l6ZW9mKGRlc2Nfc2l6ZV9kaXNrKSwgYmxrc2l6ZSkgLVxcbitcXHRcXHRcXHRzaXplb2YoZGVzY19zaXplX2Rpc2spO1xcbitcXG4rXFx0ZXJyb3IgPSBpb21hcF9mc3Zlcml0eV93cml0ZShmaWxlLCBkZXNjX3NpemVfcG9zLCBzaXplb2YoX19iZTMyKSxcXG4rXFx0XFx0XFx0KGNvbnN0IHZvaWQgKilcXHUwMDI2ZGVzY19zaXplX2Rpc2ssXFxuK1xcdFxcdFxcdFxcdTAwMjZ4ZnNfYnVmZmVyZWRfd3JpdGVfaW9tYXBfb3BzLFxcbitcXHRcXHRcXHRcXHUwMDI2eGZzX2lvbWFwX3dyaXRlX29wcyk7XFxuK1xcdGlmIChlcnJvcilcXG4rXFx0XFx0cmV0dXJuIGVycm9yO1xcbitcXG4rXFx0cmV0dXJuIGlvbWFwX2ZzdmVyaXR5X3dyaXRlKGZpbGUsIGRlc2NfcG9zLCBkZXNjX3NpemUsIGRlc2MsXFxuK1xcdFxcdFxcdFxcdTAwMjZ4ZnNfYnVmZmVyZWRfd3JpdGVfaW9tYXBfb3BzLFxcbitcXHRcXHRcXHRcXHUwMDI2eGZzX2lvbWFwX3dyaXRlX29wcyk7XFxuK31cXG4rXFxuKy8qXFxuKyAqIFRyeSB0byByZW1vdmUgYWxsIHRoZSBmc3Zlcml0eSBtZXRhZGF0YSBhZnRlciBhIGZhaWxlZCBlbmFibGVtZW50LlxcbisgKi9cXG4rc3RhdGljIGludFxcbit4ZnNfZnN2ZXJpdHlfZGVsZXRlX21ldGFkYXRhKFxcbitcXHRzdHJ1Y3QgeGZzX2lub2RlXFx0KmlwKVxcbit7XFxuK1xcdHN0cnVjdCB4ZnNfdHJhbnNcXHQqdHA7XFxuK1xcdHN0cnVjdCB4ZnNfbW91bnRcXHQqbXAgPSBpcC1cXHUwMDNlaV9tb3VudDtcXG4rXFx0aW50XFx0XFx0XFx0ZXJyb3I7XFxuK1xcbitcXHRlcnJvciA9IHhmc190cmFuc19hbGxvYyhtcCwgXFx1MDAyNk1fUkVTKG1wKS1cXHUwMDNldHJfaXRydW5jYXRlLCAwLCAwLCAwLCBcXHUwMDI2dHApO1xcbitcXHRpZiAoZXJyb3IpXFxuK1xcdFxcdHJldHVybiBlcnJvcjtcXG4rXFxuK1xcdHhmc19pbG9jayhpcCwgWEZTX0lMT0NLX0VYQ0wpO1xcbitcXHR4ZnNfdHJhbnNfaWpvaW4odHAsIGlwLCAwKTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFdlIHJlbW92aW5nIHBvc3QgRU9GIGRhdGEsIG5vIG5lZWQgdG8gdXBkYXRlIGlfc2l6ZSBhcyBmc3Zlcml0eVxcbitcXHQgKiBkaWRuJ3QgbW92ZSBpX3NpemUgaW4gdGhlIGZpcnN0IHBsYWNlXFxuK1xcdCAqL1xcbitcXHRlcnJvciA9IHhmc19pdHJ1bmNhdGVfZXh0ZW50cyhcXHUwMDI2dHAsIGlwLCBYRlNfREFUQV9GT1JLLCBYRlNfSVNJWkUoaXApKTtcXG4rXFx0aWYgKGVycm9yKVxcbitcXHRcXHRnb3RvIGVycl9jYW5jZWw7XFxuK1xcbitcXHRlcnJvciA9IHhmc190cmFuc19jb21taXQodHApO1xcbitcXHRpZiAoZXJyb3IpXFxuK1xcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4rb3V0X3VubG9jazpcXG4rXFx0eGZzX2l1bmxvY2soaXAsIFhGU19JTE9DS19FWENMKTtcXG4rXFx0cmV0dXJuIGVycm9yO1xcbitcXG4rZXJyX2NhbmNlbDpcXG4rXFx0eGZzX3RyYW5zX2NhbmNlbCh0cCk7XFxuK1xcdHhmc19pdW5sb2NrKGlwLCBYRlNfSUxPQ0tfRVhDTCk7XFxuK1xcdHJldHVybiBlcnJvcjtcXG4rfVxcbitcXG4rc3RhdGljIGludFxcbit4ZnNfZnN2ZXJpdHlfY2FuY2VsX3Vud3JpdHRlbihcXG4rXFx0c3RydWN0IHhmc19pbm9kZVxcdCppcCxcXG4rXFx0bG9mZl90XFx0XFx0XFx0c3RhcnQsXFxuK1xcdGxvZmZfdFxcdFxcdFxcdGVuZClcXG4re1xcbitcXHRzdHJ1Y3QgeGZzX21vdW50XFx0Km1wID0gaXAtXFx1MDAzZWlfbW91bnQ7XFxuK1xcdHN0cnVjdCB4ZnNfdHJhbnNcXHQqdHA7XFxuK1xcdHhmc19maWxlb2ZmX3RcXHRcXHRvZmZzZXRfZnNiID0gWEZTX0JfVE9fRlNCKG1wLCBzdGFydCk7XFxuK1xcdHhmc19maWxlb2ZmX3RcXHRcXHRlbmRfZnNiID0gWEZTX0JfVE9fRlNCKG1wLCBlbmQpO1xcbitcXHRzdHJ1Y3QgeGZzX2JtYnRfaXJlY1xcdGltYXA7XFxuK1xcdGludFxcdFxcdFxcdG5pbWFwcztcXG4rXFx0aW50XFx0XFx0XFx0ZXJyb3IgPSAwO1xcbitcXHRpbnRcXHRcXHRcXHRkb25lO1xcbitcXG4rXFxuK1xcdHdoaWxlIChvZmZzZXRfZnNiIFxcdTAwM2MgZW5kX2ZzYikge1xcbitcXHRcXHRuaW1hcHMgPSAxO1xcbitcXG4rXFx0XFx0ZXJyb3IgPSB4ZnNfdHJhbnNfYWxsb2MobXAsIFxcdTAwMjZNX1JFUyhtcCktXFx1MDAzZXRyX3dyaXRlLCAwLCAwLFxcbitcXHRcXHRcXHRcXHQwLCBcXHUwMDI2dHApO1xcbitcXHRcXHRpZiAoZXJyb3IpXFxuK1xcdFxcdFxcdHJldHVybiBlcnJvcjtcXG4rXFxuK1xcdFxcdHhmc19pbG9jayhpcCwgWEZTX0lMT0NLX0VYQ0wpO1xcbitcXHRcXHRlcnJvciA9IHhmc19ibWFwaV9yZWFkKGlwLCBvZmZzZXRfZnNiLCBlbmRfZnNiIC0gb2Zmc2V0X2ZzYixcXG4rXFx0XFx0XFx0XFx0XFx1MDAyNmltYXAsIFxcdTAwMjZuaW1hcHMsIDApO1xcbitcXHRcXHRpZiAoZXJyb3IpXFxuK1xcdFxcdFxcdGdvdG8gb3V0X2NhbmNlbDtcXG4rXFxuK1xcdFxcdGlmIChuaW1hcHMgPT0gMClcXG4rXFx0XFx0XFx0Z290byBvdXRfY2FuY2VsO1xcbitcXG4rXFx0XFx0aWYgKGltYXAuYnJfc3RhdGUgPT0gWEZTX0VYVF9VTldSSVRURU4pIHtcXG4rXFx0XFx0XFx0eGZzX3RyYW5zX2lqb2luKHRwLCBpcCwgWEZTX0lMT0NLX0VYQ0wpO1xcbitcXG4rXFx0XFx0XFx0ZXJyb3IgPSB4ZnNfYnVubWFwaSh0cCwgaXAsIGltYXAuYnJfc3RhcnRvZmYsXFxuK1xcdFxcdFxcdFxcdFxcdGltYXAuYnJfYmxvY2tjb3VudCwgMCwgMSwgXFx1MDAyNmRvbmUpO1xcbitcXHRcXHRcXHRpZiAoZXJyb3IpXFxuK1xcdFxcdFxcdFxcdGdvdG8gb3V0X2NhbmNlbDtcXG4rXFxuK1xcdFxcdFxcdGVycm9yID0geGZzX3RyYW5zX2NvbW1pdCh0cCk7XFxuK1xcdFxcdFxcdGlmIChlcnJvcilcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIGVycm9yO1xcbitcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHR4ZnNfdHJhbnNfY2FuY2VsKHRwKTtcXG4rXFx0XFx0XFx0eGZzX2l1bmxvY2soaXAsIFhGU19JTE9DS19FWENMKTtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0b2Zmc2V0X2ZzYiA9IGltYXAuYnJfc3RhcnRvZmYgKyBpbWFwLmJyX2Jsb2NrY291bnQ7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiBlcnJvcjtcXG4rb3V0X2NhbmNlbDpcXG4rXFx0eGZzX3RyYW5zX2NhbmNlbCh0cCk7XFxuK1xcdHhmc19pdW5sb2NrKGlwLCBYRlNfSUxPQ0tfRVhDTCk7XFxuK1xcdHJldHVybiBlcnJvcjtcXG4rfVxcbitcXG4rXFxuKy8qXFxuKyAqIFByZXBhcmUgdG8gZW5hYmxlIGZzdmVyaXR5IGJ5IGNsZWFyaW5nIG9sZCBtZXRhZGF0YS5cXG4rICovXFxuK3N0YXRpYyBpbnRcXG4reGZzX2ZzdmVyaXR5X2JlZ2luX2VuYWJsZShcXG4rXFx0c3RydWN0IGZpbGVcXHRcXHQqZmlscClcXG4re1xcbitcXHRzdHJ1Y3QgaW5vZGVcXHRcXHQqaW5vZGUgPSBmaWxlX2lub2RlKGZpbHApO1xcbitcXHRzdHJ1Y3QgeGZzX2lub2RlXFx0KmlwID0gWEZTX0koaW5vZGUpO1xcbitcXHRpbnRcXHRcXHRcXHRlcnJvcjtcXG4rXFxuK1xcdHhmc19hc3NlcnRfaWxvY2tlZChpcCwgWEZTX0lPTE9DS19FWENMKTtcXG4rXFxuK1xcdGlmIChJU19EQVgoaW5vZGUpIHx8IGlwLVxcdTAwM2VpX2RpZmxhZ3MyIFxcdTAwMjYgWEZTX0RJRkxBRzJfREFYKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdGlmIChpbm9kZS1cXHUwMDNlaV9zaXplIFxcdTAwM2UgWEZTX0ZTVkVSSVRZX0xBUkdFU1RfRklMRSlcXG4rXFx0XFx0cmV0dXJuIC1FRkJJRztcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIEZsdXNoIHBhZ2VjYWNoZSBiZWZvcmUgYnVpbGRpbmcgTWVya2xlIHRyZWUuIElub2RlIGlzIGxvY2tlZCBhbmQgbm9cXG4rXFx0ICogZnVydGhlciB3cml0ZXMgd2lsbCBoYXBwZW4gdG8gdGhlIGZpbGUgZXhjZXB0IGZzdmVyaXR5IG1ldGFkYXRhXFxuK1xcdCAqL1xcbitcXHRlcnJvciA9IGZpbGVtYXBfd3JpdGVfYW5kX3dhaXQoaW5vZGUtXFx1MDAzZWlfbWFwcGluZyk7XFxuK1xcdGlmIChlcnJvcilcXG4rXFx0XFx0cmV0dXJuIGVycm9yO1xcbitcXG4rXFx0aWYgKHhmc19pZmxhZ3NfdGVzdF9hbmRfc2V0KGlwLCBYRlNfVkVSSVRZX0NPTlNUUlVDVElPTikpXFxuK1xcdFxcdHJldHVybiAtRUJVU1k7XFxuK1xcbitcXHRlcnJvciA9IHhmc19xbV9kcWF0dGFjaChpcCk7XFxuK1xcdGlmIChlcnJvcilcXG4rXFx0XFx0Z290byBvdXRfY2xlYXI7XFxuK1xcbitcXHRlcnJvciA9IHhmc19mc3Zlcml0eV9kZWxldGVfbWV0YWRhdGEoaXApO1xcbitcXHRpZiAoZXJyb3IpXFxuK1xcdFxcdGdvdG8gb3V0X2NsZWFyO1xcbitcXHRyZXR1cm4gZXJyb3I7XFxuK291dF9jbGVhcjpcXG4rXFx0eGZzX2lmbGFnc19jbGVhcihpcCwgWEZTX1ZFUklUWV9DT05TVFJVQ1RJT04pO1xcbitcXHRyZXR1cm4gZXJyb3I7XFxuK31cXG4rXFxuKy8qXFxuKyAqIENvbXBsZXRlIChvciBmYWlsKSB0aGUgcHJvY2VzcyBvZiBlbmFibGluZyBmc3Zlcml0eS5cXG4rICovXFxuK3N0YXRpYyBpbnRcXG4reGZzX2ZzdmVyaXR5X2VuZF9lbmFibGUoXFxuK1xcdHN0cnVjdCBmaWxlXFx0XFx0KmZpbGUsXFxuK1xcdGNvbnN0IHZvaWRcXHRcXHQqZGVzYyxcXG4rXFx0c2l6ZV90XFx0XFx0XFx0ZGVzY19zaXplLFxcbitcXHR1NjRcXHRcXHRcXHRtZXJrbGVfdHJlZV9zaXplKVxcbit7XFxuK1xcdHN0cnVjdCBpbm9kZVxcdFxcdCppbm9kZSA9IGZpbGVfaW5vZGUoZmlsZSk7XFxuK1xcdHN0cnVjdCB4ZnNfaW5vZGVcXHQqaXAgPSBYRlNfSShpbm9kZSk7XFxuK1xcdHN0cnVjdCB4ZnNfbW91bnRcXHQqbXAgPSBpcC1cXHUwMDNlaV9tb3VudDtcXG4rXFx0c3RydWN0IHhmc190cmFuc1xcdCp0cDtcXG4rXFx0aW50XFx0XFx0XFx0ZXJyb3IgPSAwO1xcbitcXHRsb2ZmX3RcXHRcXHRcXHRyYW5nZV9zdGFydCA9IHhmc19mc3Zlcml0eV9tZXRhZGF0YV9vZmZzZXQoaXApO1xcbitcXG4rXFx0eGZzX2Fzc2VydF9pbG9ja2VkKGlwLCBYRlNfSU9MT0NLX0VYQ0wpO1xcbitcXG4rXFx0LyogZnMtdmVyaXR5IGZhaWxlZCwganVzdCBjbGVhbnVwICovXFxuK1xcdGlmIChkZXNjID09IE5VTEwpIHtcXG4rXFx0XFx0ZXJyb3IgPSB4ZnNfZnN2ZXJpdHlfZGVsZXRlX21ldGFkYXRhKGlwKTtcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdH1cXG4rXFxuK1xcdGVycm9yID0geGZzX2ZzdmVyaXR5X3dyaXRlX2Rlc2NyaXB0b3IoZmlsZSwgZGVzYywgZGVzY19zaXplLFxcbitcXHRcXHRcXHRtZXJrbGVfdHJlZV9zaXplKTtcXG4rXFx0aWYgKGVycm9yKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFdhaXQgZm9yIE1lcmtsZSB0cmVlIGdldCB3cml0dGVuIHRvIGRpc2sgYmVmb3JlIHNldHRpbmcgb24tZGlzayBpbm9kZVxcbitcXHQgKiBmbGFnIGFuZCBjbGVhcmluZyBYRlNfVkVSSVRZX0NPTlNUUlVDVElPTlxcbitcXHQgKi9cXG4rXFx0ZXJyb3IgPSBmaWxlbWFwX3dyaXRlX2FuZF93YWl0X3JhbmdlKGlub2RlLVxcdTAwM2VpX21hcHBpbmcsIHJhbmdlX3N0YXJ0LFxcbitcXHRcXHRcXHRMTE9OR19NQVgpO1xcbitcXHRpZiAoZXJyb3IpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0LypcXG4rXFx0ICogUmVtb3ZlIHVud3JpdHRlbiBleHRlbnRzIGxlZnQgYnkgQ09XIHByZWFsbG9jYXRpb25zIGFuZCB3cml0ZVxcbitcXHQgKiBwcmVhbGxvY2F0aW9uIGluIHRoZSBtZXJrbGUgdHJlZSBob2xlcyBhbmQgcGFzdCBkZXNjcmlwdG9yXFxuK1xcdCAqL1xcbitcXHRlcnJvciA9IHhmc19mc3Zlcml0eV9jYW5jZWxfdW53cml0dGVuKGlwLCByYW5nZV9zdGFydCwgTExPTkdfTUFYKTtcXG4rXFx0aWYgKGVycm9yKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFByb2FjdGl2ZWx5IGRyb3AgYW55IGRlbGF5ZWQgYWxsb2NhdGlvbnMgaW4gQ09XIGZvcmssIHRoZSBmc3Zlcml0eVxcbitcXHQgKiBmaWxlcyBhcmUgcmVhZC1vbmx5XFxuK1xcdCAqL1xcbitcXHRpZiAoeGZzX2lzX2Nvd19pbm9kZShpcCkpIHtcXG4rXFx0XFx0aWYgKCFpcC1cXHUwMDNlaV9jb3dmcClcXG4rXFx0XFx0XFx0eGZzX2lmb3JrX2luaXRfY293KGlwKTtcXG4rXFx0XFx0eGZzX2JtYXBfcHVuY2hfZGVsYWxsb2NfcmFuZ2UoaXAsIFhGU19DT1dfRk9SSywgMCwgTExPTkdfTUFYLFxcbitcXHRcXHRcXHRcXHROVUxMKTtcXG4rXFx0fVxcbitcXG4rXFx0LypcXG4rXFx0ICogU2V0IGZzdmVyaXR5IGlub2RlIGZsYWdcXG4rXFx0ICovXFxuK1xcdGVycm9yID0geGZzX3RyYW5zX2FsbG9jX2lub2RlKGlwLCBcXHUwMDI2TV9SRVMobXApLVxcdTAwM2V0cl9pY2hhbmdlLFxcbitcXHRcXHRcXHQwLCAwLCBmYWxzZSwgXFx1MDAyNnRwKTtcXG4rXFx0aWYgKGVycm9yKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIEVuc3VyZSB0aGF0IHdlJ3ZlIHBlcnNpc3RlZCB0aGUgdmVyaXR5IGluZm9ybWF0aW9uIGJlZm9yZSB3ZSBlbmFibGVcXG4rXFx0ICogaXQgb24gdGhlIGlub2RlIGFuZCB0ZWxsIHRoZSBjYWxsZXIgd2UgaGF2ZSBzZWFsZWQgdGhlIGlub2RlLlxcbitcXHQgKi9cXG4rXFx0aXAtXFx1MDAzZWlfZGlmbGFnczIgfD0gWEZTX0RJRkxBRzJfVkVSSVRZO1xcbitcXG4rXFx0eGZzX3RyYW5zX2xvZ19pbm9kZSh0cCwgaXAsIFhGU19JTE9HX0NPUkUpO1xcbitcXHR4ZnNfdHJhbnNfc2V0X3N5bmModHApO1xcbitcXG4rXFx0ZXJyb3IgPSB4ZnNfdHJhbnNfY29tbWl0KHRwKTtcXG4rXFx0eGZzX2l1bmxvY2soaXAsIFhGU19JTE9DS19FWENMKTtcXG4rXFxuK1xcdGlmICghZXJyb3IpXFxuK1xcdFxcdGlub2RlLVxcdTAwM2VpX2ZsYWdzIHw9IFNfVkVSSVRZO1xcbitcXG4rb3V0OlxcbitcXHRpZiAoZXJyb3IpIHtcXG4rXFx0XFx0aW50XFx0ZXJyb3IyO1xcbitcXG4rXFx0XFx0ZXJyb3IyID0geGZzX2ZzdmVyaXR5X2RlbGV0ZV9tZXRhZGF0YShpcCk7XFxuK1xcdFxcdGlmIChlcnJvcjIpXFxuK1xcdFxcdFxcdHhmc19hbGVydChpcC1cXHUwMDNlaV9tb3VudCxcXG4rXFxcImlubyAweCVsbHggZmFpbGVkIHRvIGNsZWFuIHVwIG5ldyBmc3Zlcml0eSBtZXRhZGF0YSwgZXJyICVkXFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0SV9JTk8oaXApLCBlcnJvcjIpO1xcbitcXHR9XFxuK1xcbitcXHR4ZnNfaWZsYWdzX2NsZWFyKGlwLCBYRlNfVkVSSVRZX0NPTlNUUlVDVElPTik7XFxuK1xcdHJldHVybiBlcnJvcjtcXG4rfVxcbitcXG4rLypcXG4rICogUmV0cmlldmUgYSBtZXJrbGUgdHJlZSBibG9jay5cXG4rICovXFxuK3N0YXRpYyBzdHJ1Y3QgcGFnZSAqXFxuK3hmc19mc3Zlcml0eV9yZWFkX21lcmtsZShcXG4rXFx0c3RydWN0IGlub2RlXFx0XFx0Kmlub2RlLFxcbitcXHRwZ29mZl90XFx0XFx0XFx0aW5kZXgpXFxuK3tcXG4rXFx0aW5kZXggKz0geGZzX2ZzdmVyaXR5X21ldGFkYXRhX29mZnNldChYRlNfSShpbm9kZSkpIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQ7XFxuK1xcbitcXHRyZXR1cm4gZ2VuZXJpY19yZWFkX21lcmtsZV90cmVlX3BhZ2UoaW5vZGUsIGluZGV4KTtcXG4rfVxcbitcXG4rLypcXG4rICogUmV0cmlldmUgYSBtZXJrbGUgdHJlZSBibG9jay5cXG4rICovXFxuK3N0YXRpYyB2b2lkXFxuK3hmc19mc3Zlcml0eV9yZWFkYWhlYWRfbWVya2xlX3RyZWUoXFxuK1xcdHN0cnVjdCBpbm9kZVxcdFxcdCppbm9kZSxcXG4rXFx0cGdvZmZfdFxcdFxcdFxcdGluZGV4LFxcbitcXHR1bnNpZ25lZCBsb25nXFx0XFx0bnJfcGFnZXMpXFxuK3tcXG4rXFx0aW5kZXggKz0geGZzX2ZzdmVyaXR5X21ldGFkYXRhX29mZnNldChYRlNfSShpbm9kZSkpIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQ7XFxuK1xcbitcXHRnZW5lcmljX3JlYWRhaGVhZF9tZXJrbGVfdHJlZShpbm9kZSwgaW5kZXgsIG5yX3BhZ2VzKTtcXG4rfVxcbitcXG4rLypcXG4rICogV3JpdGUgYSBtZXJrbGUgdHJlZSBibG9jay5cXG4rICovXFxuK3N0YXRpYyBpbnRcXG4reGZzX2ZzdmVyaXR5X3dyaXRlX21lcmtsZShcXG4rXFx0c3RydWN0IGZpbGVcXHRcXHQqZmlsZSxcXG4rXFx0Y29uc3Qgdm9pZFxcdFxcdCpidWYsXFxuK1xcdHU2NFxcdFxcdFxcdHBvcyxcXG4rXFx0dW5zaWduZWQgaW50XFx0XFx0c2l6ZSxcXG4rXFx0Y29uc3QgdThcXHRcXHQqemVyb19kaWdlc3QsXFxuK1xcdHVuc2lnbmVkIGludFxcdFxcdGRpZ2VzdF9zaXplKVxcbit7XFxuK1xcdHN0cnVjdCBpbm9kZVxcdFxcdCppbm9kZSA9IGZpbGVfaW5vZGUoZmlsZSk7XFxuK1xcdHN0cnVjdCB4ZnNfaW5vZGVcXHQqaXAgPSBYRlNfSShpbm9kZSk7XFxuK1xcdGxvZmZfdFxcdFxcdFxcdHBvc2l0aW9uID0gcG9zICtcXG4rXFx0XFx0eGZzX2ZzdmVyaXR5X21ldGFkYXRhX29mZnNldChpcCk7XFxuK1xcbitcXHRpZiAocG9zaXRpb24gKyBzaXplIFxcdTAwM2UgaW5vZGUtXFx1MDAzZWlfc2ItXFx1MDAzZXNfbWF4Ynl0ZXMpXFxuK1xcdFxcdHJldHVybiAtRUZCSUc7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBJZiB0aGlzIGlzIGEgYmxvY2sgZnVsbCBvZiBoYXNoZXMgb2YgemVyb2VkIGJsb2NrcywgZG9uJ3QgYm90aGVyXFxuK1xcdCAqIHN0b3JpbmcgdGhlIGJsb2NrLiBXZSBjYW4gc3ludGhlc2l6ZSB0aGVtIGxhdGVyLlxcbitcXHQgKlxcbitcXHQgKiBIb3dldmVyLCBkbyB0aGlzIG9ubHkgaW4gY2FzZSBNZXJrbGUgdHJlZSBibG9jayA9PSBmcyBibG9jayBzaXplLlxcbitcXHQgKiBJb21hcCBzeW50aGVzaXplcyB0aGVzZSBibG9ja3MgYmFzZWQgb24gaG9sZXMgaW4gdGhlIG1lcmtsZSB0cmVlLiBXZVxcbitcXHQgKiB3b24ndCBiZSBhYmxlIHRvIHRlbGwgaWYgc29tZXRoaW5nIG5lZWQgdG8gYmUgc3ludGhlc2l6ZXMgZm9yIHRoZVxcbitcXHQgKiByYW5nZSBpbiB0aGUgZnMgYmxvY2suIEZvciBleGFtcGxlLCBmb3IgNGsgZmlsZXN5c3RlbSBibG9ja1xcbitcXHQgKlxcbitcXHQgKlxcdFsgMWsgfCB6ZXJvIGhhc2hlcyB8IHplcm8gaGFzaGVzIHwgMWsgXVxcbitcXHQgKlxcbitcXHQgKiBJb21hcCB3b24ndCBrbm93IGFib3V0IHRoZXNlIGVtcHR5IGJsb2Nrcy5cXG4rXFx0ICovXFxuK1xcdGlmIChzaXplID09IGlwLVxcdTAwM2VpX21vdW50LVxcdTAwM2VtX3NiLnNiX2Jsb2Nrc2l6ZSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHQvKlxcbitcXHRcXHRcXHQgKiBGaXJzdCBkaWdlc3QgaXMgemVyb19kaWdlc3RcXG4rXFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdG1lbWNtcChidWYsIHplcm9fZGlnZXN0LCBkaWdlc3Rfc2l6ZSkgPT0gMCBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHQvKlxcbitcXHRcXHRcXHQgKiBFdmVyeSBkaWdlc3QgaXMgc2FtZSBhcyBwcmV2aW91cywgdGh1cyBhbGwgYXJlXFxuK1xcdFxcdFxcdCAqIHplcm9fZGlnZXN0XFxuK1xcdFxcdFxcdCAqL1xcbitcXHRcXHRcXHRtZW1jbXAoYnVmICsgZGlnZXN0X3NpemUsIGJ1Ziwgc2l6ZSAtIGRpZ2VzdF9zaXplKSA9PSAwKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdHJldHVybiBpb21hcF9mc3Zlcml0eV93cml0ZShmaWxlLCBwb3NpdGlvbiwgc2l6ZSwgYnVmLFxcbitcXHRcXHRcXHRcXHUwMDI2eGZzX2J1ZmZlcmVkX3dyaXRlX2lvbWFwX29wcyxcXG4rXFx0XFx0XFx0XFx1MDAyNnhmc19pb21hcF93cml0ZV9vcHMpO1xcbit9XFxuK1xcbitjb25zdCBzdHJ1Y3QgZnN2ZXJpdHlfb3BlcmF0aW9ucyB4ZnNfZnN2ZXJpdHlfb3BzID0ge1xcbitcXHQuYmVnaW5fZW5hYmxlX3Zlcml0eVxcdFxcdD0geGZzX2ZzdmVyaXR5X2JlZ2luX2VuYWJsZSxcXG4rXFx0LmVuZF9lbmFibGVfdmVyaXR5XFx0XFx0PSB4ZnNfZnN2ZXJpdHlfZW5kX2VuYWJsZSxcXG4rXFx0LmdldF92ZXJpdHlfZGVzY3JpcHRvclxcdFxcdD0geGZzX2ZzdmVyaXR5X2dldF9kZXNjcmlwdG9yLFxcbitcXHQucmVhZF9tZXJrbGVfdHJlZV9wYWdlXFx0XFx0PSB4ZnNfZnN2ZXJpdHlfcmVhZF9tZXJrbGUsXFxuK1xcdC5yZWFkYWhlYWRfbWVya2xlX3RyZWVcXHRcXHQ9IHhmc19mc3Zlcml0eV9yZWFkYWhlYWRfbWVya2xlX3RyZWUsXFxuK1xcdC53cml0ZV9tZXJrbGVfdHJlZV9ibG9ja1xcdD0geGZzX2ZzdmVyaXR5X3dyaXRlX21lcmtsZSxcXG4rfTtcXG5kaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19mc3Zlcml0eS5oIGIvZnMveGZzL3hmc19mc3Zlcml0eS5oXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uNmE5ODFlMjBhNzViYjhcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvZnMveGZzL3hmc19mc3Zlcml0eS5oXFxuQEAgLTAsMCArMSwyOCBAQFxcbisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xcbisvKlxcbisgKiBDb3B5cmlnaHQgKEMpIDIwMjYgUmVkIEhhdCwgSW5jLlxcbisgKi9cXG4rI2lmbmRlZiBfX1hGU19GU1ZFUklUWV9IX19cXG4rI2RlZmluZSBfX1hGU19GU1ZFUklUWV9IX19cXG4rXFxuKyNpbmNsdWRlIFxcXCJ4ZnNfcGxhdGZvcm0uaFxcXCJcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ZzdmVyaXR5LmhcXHUwMDNlXFxuK1xcbisjaWZkZWYgQ09ORklHX0ZTX1ZFUklUWVxcbitleHRlcm4gY29uc3Qgc3RydWN0IGZzdmVyaXR5X29wZXJhdGlvbnMgeGZzX2ZzdmVyaXR5X29wcztcXG4rbG9mZl90IHhmc19mc3Zlcml0eV9tZXRhZGF0YV9vZmZzZXQoY29uc3Qgc3RydWN0IHhmc19pbm9kZSAqaXApO1xcbitib29sIHhmc19mc3Zlcml0eV9pc19maWxlX2RhdGEoY29uc3Qgc3RydWN0IHhmc19pbm9kZSAqaXAsIGxvZmZfdCBvZmZzZXQpO1xcbisjZWxzZVxcbitzdGF0aWMgaW5saW5lIGxvZmZfdCB4ZnNfZnN2ZXJpdHlfbWV0YWRhdGFfb2Zmc2V0KGNvbnN0IHN0cnVjdCB4ZnNfaW5vZGUgKmlwKVxcbit7XFxuK1xcdFdBUk5fT05fT05DRSgxKTtcXG4rXFx0cmV0dXJuIFVMTE9OR19NQVg7XFxuK31cXG4rc3RhdGljIGlubGluZSBib29sIHhmc19mc3Zlcml0eV9pc19maWxlX2RhdGEoY29uc3Qgc3RydWN0IHhmc19pbm9kZSAqaXAsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICBsb2ZmX3Qgb2Zmc2V0KVxcbit7XFxuK1xcdHJldHVybiBmYWxzZTtcXG4rfVxcbisjZW5kaWZcXHQvKiBDT05GSUdfRlNfVkVSSVRZICovXFxuK1xcbisjZW5kaWZcXHQvKiBfX1hGU19GU1ZFUklUWV9IX18gKi9cXG5kaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19oZWFsdGguYyBiL2ZzL3hmcy94ZnNfaGVhbHRoLmNcXG5pbmRleCAyMzliODQzZTgzZDQyYS4uYmU2Njc2MGZiMTIwZjcgMTAwNjQ0XFxuLS0tIGEvZnMveGZzL3hmc19oZWFsdGguY1xcbisrKyBiL2ZzL3hmcy94ZnNfaGVhbHRoLmNcXG5AQCAtNjI1LDYgKzYyNSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaW9jdGxfc2lja19tYXAgaW5vX21hcFtdID0ge1xcbiBcXHR7IFhGU19TSUNLX0lOT19ESVJfWkFQUEVELFxcdFhGU19CU19TSUNLX0RJUiB9LFxcbiBcXHR7IFhGU19TSUNLX0lOT19TWU1MSU5LX1pBUFBFRCxcXHRYRlNfQlNfU0lDS19TWU1MSU5LIH0sXFxuIFxcdHsgWEZTX1NJQ0tfSU5PX0RJUlRSRUUsXFx0WEZTX0JTX1NJQ0tfRElSVFJFRSB9LFxcbitcXHR7IFhGU19TSUNLX0lOT19GU1ZFUklUWSxcXHRYRlNfQlNfU0lDS19GU1ZFUklUWSB9LFxcbiB9O1xcbiBcXG4gLyogRmlsbCBvdXQgYnVsa3N0YXQgaGVhbHRoIGluZm8uICovXFxuZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfaW5vZGUuaCBiL2ZzL3hmcy94ZnNfaW5vZGUuaFxcbmluZGV4IDM0YzEwMzhlYmZjZGUxLi4xN2NlMDgzNTkxZjQwOCAxMDA2NDRcXG4tLS0gYS9mcy94ZnMveGZzX2lub2RlLmhcXG4rKysgYi9mcy94ZnMveGZzX2lub2RlLmhcXG5AQCAtNDE5LDYgKzQxOSwxMiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgeGZzX2lub2RlX2Nhbl9zd19hdG9taWNfd3JpdGUoY29uc3Qgc3RydWN0IHhmc19pbm9kZSAqaXApXFxuICAqL1xcbiAjZGVmaW5lIFhGU19JUkVNQVBQSU5HXFx0XFx0KDFVIFxcdTAwM2NcXHUwMDNjIDE1KVxcbiBcXG4rLypcXG4rICogZnMtdmVyaXR5J3MgTWVya2xlIHRyZWUgaXMgdW5kZXIgY29uc3RydWN0aW9uLiBUaGUgZmlsZSBpcyByZWFkLW9ubHksIHRoZVxcbisgKiBvbmx5IHdyaXRlcyBoYXBwZW5pbmcgYXJlIGZvciB0aGUgZnN2ZXJpdHkgbWV0YWRhdGEuXFxuKyAqL1xcbisjZGVmaW5lIFhGU19WRVJJVFlfQ09OU1RSVUNUSU9OXFx0KDFVIFxcdTAwM2NcXHUwMDNjIDE2KVxcbitcXG4gLyogQWxsIGlub2RlIHN0YXRlIGZsYWdzIHJlbGF0ZWQgdG8gaW5vZGUgcmVjbGFpbS4gKi9cXG4gI2RlZmluZSBYRlNfQUxMX0lSRUNMQUlNX0ZMQUdTXFx0KFhGU19JUkVDTEFJTUFCTEUgfCBcXFxcXFxuIFxcdFxcdFxcdFxcdCBYRlNfSVJFQ0xBSU0gfCBcXFxcXFxuZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfaW9jdGwuYyBiL2ZzL3hmcy94ZnNfaW9jdGwuY1xcbmluZGV4IDFiNTM3MDFiZWJlYTFhLi5mYzc4NjBhOGI1YWJiMSAxMDA2NDRcXG4tLS0gYS9mcy94ZnMveGZzX2lvY3RsLmNcXG4rKysgYi9mcy94ZnMveGZzX2lvY3RsLmNcXG5AQCAtNDksNiArNDksNyBAQFxcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21vdW50LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9maWxlYXR0ci5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvZnN2ZXJpdHkuaFxcdTAwM2VcXG4gXFxuIC8qIFJldHVybiAwIG9uIHN1Y2Nlc3Mgb3IgcG9zaXRpdmUgZXJyb3IgKi9cXG4gaW50XFxuQEAgLTE0NjYsNiArMTQ2NywxOSBAQCB4ZnNfZmlsZV9pb2N0bChcXG4gXFx0Y2FzZSBYRlNfSU9DX1ZFUklGWV9NRURJQTpcXG4gXFx0XFx0cmV0dXJuIHhmc19pb2NfdmVyaWZ5X21lZGlhKGZpbHAsIGFyZyk7XFxuIFxcbitcXHRjYXNlIEZTX0lPQ19FTkFCTEVfVkVSSVRZOlxcbitcXHRcXHRpZiAoIXhmc19oYXNfdmVyaXR5KG1wKSlcXG4rXFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHRcXHRyZXR1cm4gZnN2ZXJpdHlfaW9jdGxfZW5hYmxlKGZpbHAsIGFyZyk7XFxuK1xcdGNhc2UgRlNfSU9DX01FQVNVUkVfVkVSSVRZOlxcbitcXHRcXHRpZiAoIXhmc19oYXNfdmVyaXR5KG1wKSlcXG4rXFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHRcXHRyZXR1cm4gZnN2ZXJpdHlfaW9jdGxfbWVhc3VyZShmaWxwLCBhcmcpO1xcbitcXHRjYXNlIEZTX0lPQ19SRUFEX1ZFUklUWV9NRVRBREFUQTpcXG4rXFx0XFx0aWYgKCF4ZnNfaGFzX3Zlcml0eShtcCkpXFxuK1xcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0XFx0cmV0dXJuIGZzdmVyaXR5X2lvY3RsX3JlYWRfbWV0YWRhdGEoZmlscCwgYXJnKTtcXG4rXFxuIFxcdGRlZmF1bHQ6XFxuIFxcdFxcdHJldHVybiAtRU5PVFRZO1xcbiBcXHR9XFxuZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfaW9tYXAuYyBiL2ZzL3hmcy94ZnNfaW9tYXAuY1xcbmluZGV4IDIyNWMzZGU4OGQwM2IxLi5mYmE1MTkwMjQxNmIwMiAxMDA2NDRcXG4tLS0gYS9mcy94ZnMveGZzX2lvbWFwLmNcXG4rKysgYi9mcy94ZnMveGZzX2lvbWFwLmNcXG5AQCAtMzIsNiArMzIsOCBAQFxcbiAjaW5jbHVkZSBcXFwieGZzX3J0Yml0bWFwLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJ4ZnNfaWNhY2hlLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJ4ZnNfem9uZV9hbGxvYy5oXFxcIlxcbisjaW5jbHVkZSBcXFwieGZzX2ZzdmVyaXR5LmhcXFwiXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9mc3Zlcml0eS5oXFx1MDAzZVxcbiBcXG4gI2RlZmluZSBYRlNfQUxMT0NfQUxJR04obXAsIG9mZikgXFxcXFxcbiBcXHQoKChvZmYpIFxcdTAwM2VcXHUwMDNlIG1wLVxcdTAwM2VtX2FsbG9jc2l6ZV9sb2cpIFxcdTAwM2NcXHUwMDNjIG1wLVxcdTAwM2VtX2FsbG9jc2l6ZV9sb2cpXFxuQEAgLTE1ODksNyArMTU5MSw4IEBAIHhmc196b25lZF9idWZmZXJlZF93cml0ZV9pb21hcF9iZWdpbihcXG4gXFx0bG9mZl90XFx0XFx0XFx0Y291bnQsXFxuIFxcdHVuc2lnbmVkXFx0XFx0ZmxhZ3MsXFxuIFxcdHN0cnVjdCBpb21hcFxcdFxcdCppb21hcCxcXG4tXFx0c3RydWN0IGlvbWFwXFx0XFx0KnNyY21hcClcXG4rXFx0c3RydWN0IGlvbWFwXFx0XFx0KnNyY21hcCxcXG4rXFx0dTE2XFx0XFx0XFx0aW9tYXBfZmxhZ3MpXFxuIHtcXG4gXFx0c3RydWN0IGlvbWFwX2l0ZXJcXHQqaXRlciA9XFxuIFxcdFxcdGNvbnRhaW5lcl9vZihpb21hcCwgc3RydWN0IGlvbWFwX2l0ZXIsIGlvbWFwKTtcXG5AQCAtMTU5OSw3ICsxNjAyLDYgQEAgeGZzX3pvbmVkX2J1ZmZlcmVkX3dyaXRlX2lvbWFwX2JlZ2luKFxcbiBcXHRzdHJ1Y3QgeGZzX21vdW50XFx0Km1wID0gaXAtXFx1MDAzZWlfbW91bnQ7XFxuIFxcdHhmc19maWxlb2ZmX3RcXHRcXHRvZmZzZXRfZnNiID0gWEZTX0JfVE9fRlNCVChtcCwgb2Zmc2V0KTtcXG4gXFx0eGZzX2ZpbGVvZmZfdFxcdFxcdGVuZF9mc2IgPSB4ZnNfaW9tYXBfZW5kX2ZzYihtcCwgb2Zmc2V0LCBjb3VudCk7XFxuLVxcdHUxNlxcdFxcdFxcdGlvbWFwX2ZsYWdzID0gSU9NQVBfRl9TSEFSRUQ7XFxuIFxcdHVuc2lnbmVkIGludFxcdFxcdGxvY2ttb2RlID0gWEZTX0lMT0NLX0VYQ0w7XFxuIFxcdHhmc19maWxibGtzX3RcXHRcXHRjb3VudF9mc2I7XFxuIFxcdHhmc19leHRsZW5fdFxcdFxcdGluZGxlbjtcXG5AQCAtMTYwNyw2ICsxNjA5LDggQEAgeGZzX3pvbmVkX2J1ZmZlcmVkX3dyaXRlX2lvbWFwX2JlZ2luKFxcbiBcXHRzdHJ1Y3QgeGZzX2lleHRfY3Vyc29yXFx0aWN1cjtcXG4gXFx0aW50XFx0XFx0XFx0ZXJyb3IgPSAwO1xcbiBcXG4rXFx0aW9tYXBfZmxhZ3MgPSBpb21hcF9mbGFncyB8IElPTUFQX0ZfU0hBUkVEO1xcbitcXG4gXFx0QVNTRVJUKCF4ZnNfZ2V0X2V4dHN6X2hpbnQoaXApKTtcXG4gXFx0QVNTRVJUKCEoZmxhZ3MgXFx1MDAyNiBJT01BUF9VTlNIQVJFKSk7XFxuIFxcdEFTU0VSVChhYyk7XFxuQEAgLTE4MDMsOSArMTgwNywxMiBAQCB4ZnNfYnVmZmVyZWRfd3JpdGVfaW9tYXBfYmVnaW4oXFxuIFxcdGlmICh4ZnNfaXNfc2h1dGRvd24obXApKVxcbiBcXHRcXHRyZXR1cm4gLUVJTztcXG4gXFxuK1xcdGlmICh4ZnNfaWZsYWdzX3Rlc3QoaXAsIFhGU19WRVJJVFlfQ09OU1RSVUNUSU9OKSlcXG4rXFx0XFx0aW9tYXBfZmxhZ3MgfD0gSU9NQVBfRl9GU1ZFUklUWTtcXG4rXFxuIFxcdGlmICh4ZnNfaXNfem9uZWRfaW5vZGUoaXApKVxcbiBcXHRcXHRyZXR1cm4geGZzX3pvbmVkX2J1ZmZlcmVkX3dyaXRlX2lvbWFwX2JlZ2luKGlub2RlLCBvZmZzZXQsXFxuLVxcdFxcdFxcdFxcdGNvdW50LCBmbGFncywgaW9tYXAsIHNyY21hcCk7XFxuK1xcdFxcdFxcdFxcdGNvdW50LCBmbGFncywgaW9tYXAsIHNyY21hcCwgaW9tYXBfZmxhZ3MpO1xcbiBcXG4gXFx0Lyogd2UgY2FuJ3QgdXNlIGRlbGF5ZWQgYWxsb2NhdGlvbnMgd2hlbiB1c2luZyBleHRlbnQgc2l6ZSBoaW50cyAqL1xcbiBcXHRpZiAoeGZzX2dldF9leHRzel9oaW50KGlwKSlcXG5AQCAtMjE5MSwxMiArMjE5OCwxNyBAQCB4ZnNfcmVhZF9pb21hcF9iZWdpbihcXG4gXFx0Ym9vbFxcdFxcdFxcdHNoYXJlZCA9IGZhbHNlO1xcbiBcXHR1bnNpZ25lZCBpbnRcXHRcXHRsb2NrbW9kZSA9IFhGU19JTE9DS19TSEFSRUQ7XFxuIFxcdHU2NFxcdFxcdFxcdHNlcTtcXG4rXFx0dW5zaWduZWQgaW50XFx0XFx0aW9tYXBfZmxhZ3MgPSAwO1xcbiBcXG4gXFx0QVNTRVJUKCEoZmxhZ3MgXFx1MDAyNiAoSU9NQVBfV1JJVEUgfCBJT01BUF9aRVJPKSkpO1xcbiBcXG4gXFx0aWYgKHhmc19pc19zaHV0ZG93bihtcCkpXFxuIFxcdFxcdHJldHVybiAtRUlPO1xcbiBcXG4rXFx0aWYgKGZzdmVyaXR5X2FjdGl2ZShpbm9kZSkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIChvZmZzZXQgXFx1MDAzZT0geGZzX2ZzdmVyaXR5X21ldGFkYXRhX29mZnNldChpcCkpKVxcbitcXHRcXHRpb21hcF9mbGFncyB8PSBJT01BUF9GX0ZTVkVSSVRZO1xcbitcXG4gXFx0ZXJyb3IgPSB4ZnNfaWxvY2tfZm9yX2lvbWFwKGlwLCBmbGFncywgXFx1MDAyNmxvY2ttb2RlKTtcXG4gXFx0aWYgKGVycm9yKVxcbiBcXHRcXHRyZXR1cm4gZXJyb3I7XFxuQEAgLTIyMTAsOCArMjIyMiw5IEBAIHhmc19yZWFkX2lvbWFwX2JlZ2luKFxcbiBcXHRpZiAoZXJyb3IpXFxuIFxcdFxcdHJldHVybiBlcnJvcjtcXG4gXFx0dHJhY2VfeGZzX2lvbWFwX2ZvdW5kKGlwLCBvZmZzZXQsIGxlbmd0aCwgWEZTX0RBVEFfRk9SSywgXFx1MDAyNmltYXApO1xcbi1cXHRyZXR1cm4geGZzX2JtYnRfdG9faW9tYXAoaXAsIGlvbWFwLCBcXHUwMDI2aW1hcCwgZmxhZ3MsXFxuLVxcdFxcdFxcdFxcdCBzaGFyZWQgPyBJT01BUF9GX1NIQVJFRCA6IDAsIHNlcSk7XFxuK1xcdGlvbWFwX2ZsYWdzIHw9IHNoYXJlZCA/IElPTUFQX0ZfU0hBUkVEIDogMDtcXG4rXFxuK1xcdHJldHVybiB4ZnNfYm1idF90b19pb21hcChpcCwgaW9tYXAsIFxcdTAwMjZpbWFwLCBmbGFncywgaW9tYXBfZmxhZ3MsIHNlcSk7XFxuIH1cXG4gXFxuIGNvbnN0IHN0cnVjdCBpb21hcF9vcHMgeGZzX3JlYWRfaW9tYXBfb3BzID0ge1xcbmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2lvcHMuYyBiL2ZzL3hmcy94ZnNfaW9wcy5jXFxuaW5kZXggNjMzOWY0OTU2ZWNiMzkuLjcwNjM3Y2RjYzI5OTcyIDEwMDY0NFxcbi0tLSBhL2ZzL3hmcy94ZnNfaW9wcy5jXFxuKysrIGIvZnMveGZzL3hmc19pb3BzLmNcXG5AQCAtMzUsNiArMzUsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc2VjdXJpdHkuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2l2ZXJzaW9uLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9maWVtYXAuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ZzdmVyaXR5LmhcXHUwMDNlXFxuIFxcbiAvKlxcbiAgKiBEaXJlY3RvcmllcyBoYXZlIGRpZmZlcmVudCBsb2NrIG9yZGVyIHcuci50LiBtbWFwX2xvY2sgY29tcGFyZWQgdG8gcmVndWxhclxcbkBAIC01ODAsNiArNTgxLDEwIEBAIHhmc19yZXBvcnRfZGlvYWxpZ24oXFxuIFxcdHN0cnVjdCBibG9ja19kZXZpY2VcXHQqYmRldiA9IHRhcmdldC1cXHUwMDNlYnRfYmRldjtcXG4gXFxuIFxcdHN0YXQtXFx1MDAzZXJlc3VsdF9tYXNrIHw9IFNUQVRYX0RJT0FMSUdOIHwgU1RBVFhfRElPX1JFQURfQUxJR047XFxuK1xcbitcXHRpZiAoZnN2ZXJpdHlfYWN0aXZlKFZGU19JKGlwKSkpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuIFxcdHN0YXQtXFx1MDAzZWRpb19tZW1fYWxpZ24gPSBiZGV2X2RtYV9hbGlnbm1lbnQoYmRldikgKyAxO1xcbiBcXG4gXFx0LypcXG5AQCAtMTM3MCw2ICsxMzc1LDggQEAgeGZzX2lub2RlX3Nob3VsZF9lbmFibGVfZGF4KFxcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcdGlmICgheGZzX2lub2RlX3N1cHBvcnRzX2RheChpcCkpXFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0aWYgKGlwLVxcdTAwM2VpX2RpZmxhZ3MyIFxcdTAwMjYgWEZTX0RJRkxBRzJfVkVSSVRZKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcdGlmICh4ZnNfaGFzX2RheF9hbHdheXMoaXAtXFx1MDAzZWlfbW91bnQpKVxcbiBcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gXFx0aWYgKGlwLVxcdTAwM2VpX2RpZmxhZ3MyIFxcdTAwMjYgWEZTX0RJRkxBRzJfREFYKVxcbkBAIC0xMzk4LDEyICsxNDA1LDE1IEBAIHhmc19kaWZsYWdzX3RvX2lmbGFncyhcXG4gXFx0XFx0ZmxhZ3MgfD0gU19OT0FUSU1FO1xcbiBcXHRpZiAoaW5pdCBcXHUwMDI2XFx1MDAyNiB4ZnNfaW5vZGVfc2hvdWxkX2VuYWJsZV9kYXgoaXApKVxcbiBcXHRcXHRmbGFncyB8PSBTX0RBWDtcXG4rXFx0aWYgKHhmbGFncyBcXHUwMDI2IEZTX1hGTEFHX1ZFUklUWSlcXG4rXFx0XFx0ZmxhZ3MgfD0gU19WRVJJVFk7XFxuIFxcbiBcXHQvKlxcbiBcXHQgKiBTX0RBWCBjYW4gb25seSBiZSBzZXQgZHVyaW5nIGlub2RlIGluaXRpYWxpemF0aW9uIGFuZCBpcyBuZXZlciBzZXQgYnlcXG4gXFx0ICogdGhlIFZGUywgc28gd2UgY2Fubm90IG1hc2sgb2ZmIFNfREFYIGluIGlfZmxhZ3MuXFxuIFxcdCAqL1xcbi1cXHRpbm9kZS1cXHUwMDNlaV9mbGFncyBcXHUwMDI2PSB+KFNfSU1NVVRBQkxFIHwgU19BUFBFTkQgfCBTX1NZTkMgfCBTX05PQVRJTUUpO1xcbitcXHRpbm9kZS1cXHUwMDNlaV9mbGFncyBcXHUwMDI2PVxcbitcXHRcXHR+KFNfSU1NVVRBQkxFIHwgU19BUFBFTkQgfCBTX1NZTkMgfCBTX05PQVRJTUUgfCBTX1ZFUklUWSk7XFxuIFxcdGlub2RlLVxcdTAwM2VpX2ZsYWdzIHw9IGZsYWdzO1xcbiB9XFxuIFxcbmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX21lc3NhZ2UuYyBiL2ZzL3hmcy94ZnNfbWVzc2FnZS5jXFxuaW5kZXggMDI0M2U1MDlhNDY4OTEuLjQ0YjEzZDQ2MDQ5YzYyIDEwMDY0NFxcbi0tLSBhL2ZzL3hmcy94ZnNfbWVzc2FnZS5jXFxuKysrIGIvZnMveGZzL3hmc19tZXNzYWdlLmNcXG5AQCAtMTQ5LDYgKzE0OSwxMCBAQCB4ZnNfd2Fybl9leHBlcmltZW50YWwoXFxuIFxcdFxcdFxcdC5vcHN0YXRlXFx0PSBYRlNfT1BTVEFURV9XQVJORURfTEFSUCxcXG4gXFx0XFx0XFx0Lm5hbWVcXHRcXHQ9IFxcXCJsb2dnZWQgZXh0ZW5kZWQgYXR0cmlidXRlc1xcXCIsXFxuIFxcdFxcdH0sXFxuK1xcdFxcdFtYRlNfRVhQRVJJTUVOVEFMX0ZTVkVSSVRZXSA9IHtcXG4rXFx0XFx0XFx0Lm9wc3RhdGVcXHQ9IFhGU19PUFNUQVRFX1dBUk5FRF9GU1ZFUklUWSxcXG4rXFx0XFx0XFx0Lm5hbWVcXHRcXHQ9IFxcXCJmc3Zlcml0eVxcXCIsXFxuK1xcdFxcdH0sXFxuIFxcdH07XFxuIFxcdEFTU0VSVChmZWF0IFxcdTAwM2U9IDAgXFx1MDAyNlxcdTAwMjYgZmVhdCBcXHUwMDNjIFhGU19FWFBFUklNRU5UQUxfTUFYKTtcXG4gXFx0QlVJTERfQlVHX09OKEFSUkFZX1NJWkUoZmVhdHVyZXMpICE9IFhGU19FWFBFUklNRU5UQUxfTUFYKTtcXG5kaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19tZXNzYWdlLmggYi9mcy94ZnMveGZzX21lc3NhZ2UuaFxcbmluZGV4IDgxMWI4ODVmNDFjMzVhLi4zNjRmY2M3ZTQyYjA4NCAxMDA2NDRcXG4tLS0gYS9mcy94ZnMveGZzX21lc3NhZ2UuaFxcbisrKyBiL2ZzL3hmcy94ZnNfbWVzc2FnZS5oXFxuQEAgLTkzLDYgKzkzLDcgQEAgdm9pZCB4ZnNfYnVmX2FsZXJ0X3JhdGVsaW1pdGVkKHN0cnVjdCB4ZnNfYnVmICpicCwgY29uc3QgY2hhciAqcmxtc2csXFxuIGVudW0geGZzX2V4cGVyaW1lbnRhbF9mZWF0IHtcXG4gXFx0WEZTX0VYUEVSSU1FTlRBTF9TSFJJTkssXFxuIFxcdFhGU19FWFBFUklNRU5UQUxfTEFSUCxcXG4rXFx0WEZTX0VYUEVSSU1FTlRBTF9GU1ZFUklUWSxcXG4gXFxuIFxcdFhGU19FWFBFUklNRU5UQUxfTUFYLFxcbiB9O1xcbmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX21vdW50LmggYi9mcy94ZnMveGZzX21vdW50LmhcXG5pbmRleCA2NmEwMmQxYjlhZDdhMS4uODc1YzliMGY4ZTk5MWYgMTAwNjQ0XFxuLS0tIGEvZnMveGZzL3hmc19tb3VudC5oXFxuKysrIGIvZnMveGZzL3hmc19tb3VudC5oXFxuQEAgLTM4OCw2ICszODgsNyBAQCB0eXBlZGVmIHN0cnVjdCB4ZnNfbW91bnQge1xcbiAjZGVmaW5lIFhGU19GRUFUX0VYQ0hBTkdFX1JBTkdFXFx0KDFVTEwgXFx1MDAzY1xcdTAwM2MgMjcpXFx0LyogZXhjaGFuZ2UgcmFuZ2UgKi9cXG4gI2RlZmluZSBYRlNfRkVBVF9NRVRBRElSXFx0KDFVTEwgXFx1MDAzY1xcdTAwM2MgMjgpXFx0LyogbWV0YWRhdGEgZGlyZWN0b3J5IHRyZWUgKi9cXG4gI2RlZmluZSBYRlNfRkVBVF9aT05FRFxcdFxcdCgxVUxMIFxcdTAwM2NcXHUwMDNjIDI5KVxcdC8qIHpvbmVkIFJUIGRldmljZSAqL1xcbisjZGVmaW5lIFhGU19GRUFUX1ZFUklUWVxcdFxcdCgxVUxMIFxcdTAwM2NcXHUwMDNjIDMwKVxcdC8qIGZzLXZlcml0eSAqL1xcbiBcXG4gLyogTW91bnQgZmVhdHVyZXMgKi9cXG4gI2RlZmluZSBYRlNfRkVBVF9OT0xJRkVUSU1FXFx0KDFVTEwgXFx1MDAzY1xcdTAwM2MgNDcpXFx0LyogZGlzYWJsZSBsaWZldGltZSBoaW50cyAqL1xcbkBAIC00NDUsNiArNDQ2LDcgQEAgX19YRlNfSEFTX0ZFQVQoZXhjaGFuZ2VfcmFuZ2UsIEVYQ0hBTkdFX1JBTkdFKVxcbiBfX1hGU19IQVNfRkVBVChtZXRhZGlyLCBNRVRBRElSKVxcbiBfX1hGU19IQVNfRkVBVCh6b25lZCwgWk9ORUQpXFxuIF9fWEZTX0hBU19GRUFUKG5vbGlmZXRpbWUsIE5PTElGRVRJTUUpXFxuK19fWEZTX0hBU19GRUFUKHZlcml0eSwgVkVSSVRZKVxcbiBcXG4gc3RhdGljIGlubGluZSBib29sIHhmc19oYXNfcnRncm91cHMoY29uc3Qgc3RydWN0IHhmc19tb3VudCAqbXApXFxuIHtcXG5AQCAtNTgyLDYgKzU4NCw4IEBAIF9fWEZTX0hBU19GRUFUKG5vdXVpZCwgTk9VVUlEKVxcbiAjZGVmaW5lIFhGU19PUFNUQVRFX1JFU1VNSU5HX1FVT1RBT05cXHQxOFxcbiAvKiAoWm9uZWQpIEdDIGlzIGluIHByb2dyZXNzICovXFxuICNkZWZpbmUgWEZTX09QU1RBVEVfWk9ORUdDX1JVTk5JTkdcXHQyMFxcbisvKiBLZXJuZWwgaGFzIGxvZ2dlZCBhIHdhcm5pbmcgYWJvdXQgZnN2ZXJpdHkgc3VwcG9ydCAqL1xcbisjZGVmaW5lIFhGU19PUFNUQVRFX1dBUk5FRF9GU1ZFUklUWVxcdDIxXFxuIFxcbiAjZGVmaW5lIF9fWEZTX0lTX09QU1RBVEUobmFtZSwgTkFNRSkgXFxcXFxcbiBzdGF0aWMgaW5saW5lIGJvb2wgeGZzX2lzXyAjIyBuYW1lIChzdHJ1Y3QgeGZzX21vdW50ICptcCkgXFxcXFxcbmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX3N1cGVyLmMgYi9mcy94ZnMveGZzX3N1cGVyLmNcXG5pbmRleCA4NTMxZDUyNmZjNDQwOS4uYTc3NzRkMmQ2YjIzZmMgMTAwNjQ0XFxuLS0tIGEvZnMveGZzL3hmc19zdXBlci5jXFxuKysrIGIvZnMveGZzL3hmc19zdXBlci5jXFxuQEAgLTMwLDYgKzMwLDcgQEBcXG4gI2luY2x1ZGUgXFxcInhmc19maWxlc3RyZWFtLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJ4ZnNfcXVvdGEuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInhmc19zeXNmcy5oXFxcIlxcbisjaW5jbHVkZSBcXFwieGZzX2ZzdmVyaXR5LmhcXFwiXFxuICNpbmNsdWRlIFxcXCJ4ZnNfb25kaXNrLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJ4ZnNfcm1hcF9pdGVtLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJ4ZnNfcmVmY291bnRfaXRlbS5oXFxcIlxcbkBAIC0xNjg5LDYgKzE2OTAsOSBAQCB4ZnNfZnNfZmlsbF9zdXBlcihcXG4gXFx0c2ItXFx1MDAzZXNfcXVvdGFfdHlwZXMgPSBRVFlQRV9NQVNLX1VTUiB8IFFUWVBFX01BU0tfR1JQIHwgUVRZUEVfTUFTS19QUko7XFxuICNlbmRpZlxcbiBcXHRzYi1cXHUwMDNlc19vcCA9IFxcdTAwMjZ4ZnNfc3VwZXJfb3BlcmF0aW9ucztcXG4rI2lmZGVmIENPTkZJR19GU19WRVJJVFlcXG4rXFx0c2ItXFx1MDAzZXNfdm9wID0gXFx1MDAyNnhmc19mc3Zlcml0eV9vcHM7XFxuKyNlbmRpZlxcbiBcXG4gXFx0LypcXG4gXFx0ICogRGVsYXkgbW91bnQgd29yayBpZiB0aGUgZGVidWcgaG9vayBpcyBzZXQuIFRoaXMgaXMgZGVidWdcXG5AQCAtMTk0MSw2ICsxOTQ1LDkgQEAgeGZzX2ZzX2ZpbGxfc3VwZXIoXFxuIFxcdGlmIChlcnJvcilcXG4gXFx0XFx0Z290byBvdXRfZmlsZXN0cmVhbV91bm1vdW50O1xcbiBcXG4rXFx0aWYgKHhmc19oYXNfdmVyaXR5KG1wKSlcXG4rXFx0XFx0eGZzX3dhcm5fZXhwZXJpbWVudGFsKG1wLCBYRlNfRVhQRVJJTUVOVEFMX0ZTVkVSSVRZKTtcXG4rXFxuIFxcdHJvb3QgPSBpZ3JhYihWRlNfSShtcC1cXHUwMDNlbV9yb290aXApKTtcXG4gXFx0aWYgKCFyb290KSB7XFxuIFxcdFxcdGVycm9yID0gLUVOT0VOVDtcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mc3Zlcml0eS5oIGIvaW5jbHVkZS9saW51eC9mc3Zlcml0eS5oXFxuaW5kZXggNmM0NjdkZWQ5NzUxZmMuLmY5NDMzMzMyYzI3NGJiIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvZnN2ZXJpdHkuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvZnN2ZXJpdHkuaFxcbkBAIC0xMjQsNiArMTI0LDggQEAgc3RydWN0IGZzdmVyaXR5X29wZXJhdGlvbnMge1xcbiBcXHQgKiBAYnVmOiB0aGUgTWVya2xlIHRyZWUgYmxvY2sgdG8gd3JpdGVcXG4gXFx0ICogQHBvczogdGhlIHBvc2l0aW9uIG9mIHRoZSBibG9jayBpbiB0aGUgTWVya2xlIHRyZWUgKGluIGJ5dGVzKVxcbiBcXHQgKiBAc2l6ZTogdGhlIE1lcmtsZSB0cmVlIGJsb2NrIHNpemUgKGluIGJ5dGVzKVxcbitcXHQgKiBAemVyb19kaWdlc3Q6IHRoZSBoYXNoIG9mIHRoZSBhbGwtemVyb2VzIGJsb2NrXFxuK1xcdCAqIEBkaWdlc3Rfc2l6ZTogc2l6ZSBvZiB6ZXJvX2RpZ2VzdCwgaW4gYnl0ZXNcXG4gXFx0ICpcXG4gXFx0ICogVGhpcyBpcyBvbmx5IGNhbGxlZCBiZXR3ZWVuIC1cXHUwMDNlYmVnaW5fZW5hYmxlX3Zlcml0eSgpIGFuZFxcbiBcXHQgKiAtXFx1MDAzZWVuZF9lbmFibGVfdmVyaXR5KCkuXFxuQEAgLTEzMSw3ICsxMzMsOSBAQCBzdHJ1Y3QgZnN2ZXJpdHlfb3BlcmF0aW9ucyB7XFxuIFxcdCAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAtZXJybm8gb24gZmFpbHVyZVxcbiBcXHQgKi9cXG4gXFx0aW50ICgqd3JpdGVfbWVya2xlX3RyZWVfYmxvY2spKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCB2b2lkICpidWYsXFxuLVxcdFxcdFxcdFxcdCAgICAgICB1NjQgcG9zLCB1bnNpZ25lZCBpbnQgc2l6ZSk7XFxuK1xcdFxcdFxcdFxcdCAgICAgICB1NjQgcG9zLCB1bnNpZ25lZCBpbnQgc2l6ZSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIGNvbnN0IHU4ICp6ZXJvX2RpZ2VzdCxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIHVuc2lnbmVkIGludCBkaWdlc3Rfc2l6ZSk7XFxuIH07XFxuIFxcbiAjaWZkZWYgQ09ORklHX0ZTX1ZFUklUWVxcbkBAIC0zMTcsMTAgKzMyMSwxNCBAQCBzdGF0aWMgaW5saW5lIGludCBmc3Zlcml0eV9maWxlX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitpbnQgZnN2ZXJpdHlfZW5zdXJlX3Zlcml0eV9pbmZvKHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xcbitcXG4gdm9pZCBmc3Zlcml0eV9jbGVhbnVwX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xcbiBcXG4gc3RydWN0IHBhZ2UgKmdlbmVyaWNfcmVhZF9tZXJrbGVfdHJlZV9wYWdlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHBnb2ZmX3QgaW5kZXgpO1xcbiB2b2lkIGdlbmVyaWNfcmVhZGFoZWFkX21lcmtsZV90cmVlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHBnb2ZmX3QgaW5kZXgsXFxuIFxcdFxcdFxcdFxcdCAgIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpO1xcbitpbnQgZnN2ZXJpdHlfcGFnZWNhY2hlX3JlYWQoc3RydWN0IGlub2RlICppbm9kZSwgdm9pZCAqYnVmLCBzaXplX3QgY291bnQsXFxuK1xcdFxcdFxcdCAgICBsb2ZmX3QgcG9zKTtcXG4gXFxuICNlbmRpZlxcdC8qIF9MSU5VWF9GU1ZFUklUWV9IICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDA0OjE5OjA3LjA2NjEwMDM1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NDUxNjkyMDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkZTX1ZFUklUWVwiLFxuICAgIFwiWEZTX0ZTXCIsXG4gICAgXCJYRlNfT05MSU5FX1NDUlVCXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwieGZzX2ZzdmVyaXR5X2JlZ2luX2VuYWJsZVwiLFxuICAgIFwieGZzX2ZzdmVyaXR5X2VuZF9lbmFibGVcIixcbiAgICBcInhmc19mc3Zlcml0eV9nZXRfZGVzY3JpcHRvclwiLFxuICAgIFwieGZzX2ZzdmVyaXR5X3dyaXRlX2Rlc2NyaXB0b3JcIixcbiAgICBcInhmc19mc3Zlcml0eV9kZWxldGVfbWV0YWRhdGFcIixcbiAgICBcInhmc19mc3Zlcml0eV9jYW5jZWxfdW53cml0dGVuXCIsXG4gICAgXCJ4ZnNfZnN2ZXJpdHlfcmVhZF9tZXJrbGVcIixcbiAgICBcInhmc19mc3Zlcml0eV9yZWFkYWhlYWRfbWVya2xlX3RyZWVcIixcbiAgICBcInhmc19mc3Zlcml0eV93cml0ZV9tZXJrbGVcIixcbiAgICBcImZzdmVyaXR5X3BhZ2VjYWNoZV9yZWFkXCIsXG4gICAgXCJ4Y2hrX2lub2RlX3NldHVwX3Zlcml0eVwiLFxuICAgIFwieGNoa19pbm9kZV92ZXJpdHlfYnJva2VuXCIsXG4gICAgXCJ4cmVwX2lub2RlX3Zlcml0eVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhpcyBwYXRjaCBzZXJpZXMgaW1wbGVtZW50cyBmcy12ZXJpdHkgc3VwcG9ydCBmb3IgdGhlIFhGUyBmaWxlc3lzdGVtLiBJdCBpbnRyb2R1Y2VzIG5ldyBtZXRhZGF0YSBoYW5kbGluZywgaW9jdGwgb3BlcmF0aW9ucywgYW5kIGludGVncmF0aW9uIHdpdGggWEZTJ3MgaW9tYXAgYW5kIHNjcnViIGluZnJhc3RydWN0dXJlLiBUaGlzIGlzIGEgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBhZGRpdGlvbiB0byBhIGNvcmUgZmlsZXN5c3RlbSBhbmQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIHRvIGVuc3VyZSBkYXRhIGludGVncml0eSBhbmQgcHJldmVudCB2dWxuZXJhYmlsaXRpZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNTgyMmQxY2IxZWQ4Mjg3OTk2ODFlNjM3NDcyMzdlMzY5NWMzODc0MVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgSnVsIDExIDA0OjE5OjA1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvYnRyZnMvdmVyaXR5LmMgYi9mcy9idHJmcy92ZXJpdHkuY1xuaW5kZXggOTgzMzY1YTczNTQxNjguLmJkNzllMzQzYWUyMzdmIDEwMDY0NFxuLS0tIGEvZnMvYnRyZnMvdmVyaXR5LmNcbisrKyBiL2ZzL2J0cmZzL3Zlcml0eS5jXG5AQCAtNzczLDExICs3NzMsMTUgQEAgc3RhdGljIHN0cnVjdCBwYWdlICpidHJmc19yZWFkX21lcmtsZV90cmVlX3BhZ2Uoc3RydWN0IGlub2RlICppbm9kZSxcbiAgKiBAYnVmOlx0TWVya2xlIHRyZWUgYmxvY2sgdG8gd3JpdGVcbiAgKiBAcG9zOlx0dGhlIHBvc2l0aW9uIG9mIHRoZSBibG9jayBpbiB0aGUgTWVya2xlIHRyZWUgKGluIGJ5dGVzKVxuICAqIEBzaXplOlx0dGhlIE1lcmtsZSB0cmVlIGJsb2NrIHNpemUgKGluIGJ5dGVzKVxuKyAqIEB6ZXJvX2RpZ2VzdDpcdHRoZSBoYXNoIG9mIHRoZSBhbGwtemVyb2VzIGJsb2NrXG4rICogQGRpZ2VzdF9zaXplOlx0c2l6ZSBvZiB6ZXJvX2RpZ2VzdCwgaW4gYnl0ZXNcbiAgKlxuICAqIFJldHVybnMgMCBvbiBzdWNjZXNzIG9yIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZVxuICAqL1xuIHN0YXRpYyBpbnQgYnRyZnNfd3JpdGVfbWVya2xlX3RyZWVfYmxvY2soc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IHZvaWQgKmJ1Zixcbi1cdFx0XHRcdFx0IHU2NCBwb3MsIHVuc2lnbmVkIGludCBzaXplKVxuK1x0XHRcdFx0XHQgdTY0IHBvcywgdW5zaWduZWQgaW50IHNpemUsXG4rXHRcdFx0XHRcdCBjb25zdCB1OCAqemVyb19kaWdlc3QsXG4rXHRcdFx0XHRcdCB1bnNpZ25lZCBpbnQgZGlnZXN0X3NpemUpXG4ge1xuIFx0c3RydWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5vZGUoZmlsZSk7XG4gXHRsb2ZmX3QgbWVya2xlX3BvcyA9IG1lcmtsZV9maWxlX3Bvcyhpbm9kZSk7XG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC92ZXJpdHkuYyBiL2ZzL2V4dDQvdmVyaXR5LmNcbmluZGV4IGNhNjFkYTUzZjMxM2ZhLi5hYzVjMTMzZjU1MjkyNSAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQvdmVyaXR5LmNcbisrKyBiL2ZzL2V4dDQvdmVyaXR5LmNcbkBAIC0zNCwzMiArMzQsNiBAQCBzdGF0aWMgaW5saW5lIGxvZmZfdCBleHQ0X3Zlcml0eV9tZXRhZGF0YV9wb3MoY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSlcbiBcdHJldHVybiByb3VuZF91cChpbm9kZS1cdTAwM2VpX3NpemUsIDY1NTM2KTtcbiB9XG4gXG4tLypcbi0gKiBSZWFkIHNvbWUgdmVyaXR5IG1ldGFkYXRhIGZyb20gdGhlIGlub2RlLiAgX192ZnNfcmVhZCgpIGNhbid0IGJlIHVzZWQgYmVjYXVzZVxuLSAqIHdlIG5lZWQgdG8gcmVhZCBiZXlvbmQgaV9zaXplLlxuLSAqL1xuLXN0YXRpYyBpbnQgcGFnZWNhY2hlX3JlYWQoc3RydWN0IGlub2RlICppbm9kZSwgdm9pZCAqYnVmLCBzaXplX3QgY291bnQsXG4tXHRcdFx0ICBsb2ZmX3QgcG9zKVxuLXtcbi1cdHdoaWxlIChjb3VudCkge1xuLVx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuLVx0XHRzaXplX3Qgbjtcbi1cbi1cdFx0Zm9saW8gPSByZWFkX21hcHBpbmdfZm9saW8oaW5vZGUtXHUwMDNlaV9tYXBwaW5nLCBwb3MgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQsXG4tXHRcdFx0XHRcdCBOVUxMKTtcbi1cdFx0aWYgKElTX0VSUihmb2xpbykpXG4tXHRcdFx0cmV0dXJuIFBUUl9FUlIoZm9saW8pO1xuLVxuLVx0XHRuID0gbWVtY3B5X2Zyb21fZmlsZV9mb2xpbyhidWYsIGZvbGlvLCBwb3MsIGNvdW50KTtcbi1cdFx0Zm9saW9fcHV0KGZvbGlvKTtcbi1cbi1cdFx0YnVmICs9IG47XG4tXHRcdHBvcyArPSBuO1xuLVx0XHRjb3VudCAtPSBuO1xuLVx0fVxuLVx0cmV0dXJuIDA7XG4tfVxuLVxuIC8qXG4gICogV3JpdGUgc29tZSB2ZXJpdHkgbWV0YWRhdGEgdG8gdGhlIGlub2RlIGZvciBGU19JT0NfRU5BQkxFX1ZFUklUWS5cbiAgKiBrZXJuZWxfd3JpdGUoKSBjYW4ndCBiZSB1c2VkIGJlY2F1c2UgdGhlIGZpbGUgZGVzY3JpcHRvciBpcyByZWFkb25seS5cbkBAIC0zMTEsOCArMjg1LDggQEAgc3RhdGljIGludCBleHQ0X2dldF92ZXJpdHlfZGVzY3JpcHRvcl9sb2NhdGlvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0XHRnb3RvIGJhZDtcbiBcdGRlc2Nfc2l6ZV9wb3MgLT0gc2l6ZW9mKGRlc2Nfc2l6ZV9kaXNrKTtcbiBcbi1cdGVyciA9IHBhZ2VjYWNoZV9yZWFkKGlub2RlLCBcdTAwMjZkZXNjX3NpemVfZGlzaywgc2l6ZW9mKGRlc2Nfc2l6ZV9kaXNrKSxcbi1cdFx0XHQgICAgIGRlc2Nfc2l6ZV9wb3MpO1xuK1x0ZXJyID0gZnN2ZXJpdHlfcGFnZWNhY2hlX3JlYWQoaW5vZGUsIFx1MDAyNmRlc2Nfc2l6ZV9kaXNrLFxuK1x0XHRcdFx0ICAgICAgc2l6ZW9mKGRlc2Nfc2l6ZV9kaXNrKSwgZGVzY19zaXplX3Bvcyk7XG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuIFx0ZGVzY19zaXplID0gbGUzMl90b19jcHUoZGVzY19zaXplX2Rpc2spO1xuQEAgLTM1Miw3ICszMjYsNyBAQCBzdGF0aWMgaW50IGV4dDRfZ2V0X3Zlcml0eV9kZXNjcmlwdG9yKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHZvaWQgKmJ1ZixcbiBcdGlmIChidWZfc2l6ZSkge1xuIFx0XHRpZiAoZGVzY19zaXplIFx1MDAzZSBidWZfc2l6ZSlcbiBcdFx0XHRyZXR1cm4gLUVSQU5HRTtcbi1cdFx0ZXJyID0gcGFnZWNhY2hlX3JlYWQoaW5vZGUsIGJ1ZiwgZGVzY19zaXplLCBkZXNjX3Bvcyk7XG4rXHRcdGVyciA9IGZzdmVyaXR5X3BhZ2VjYWNoZV9yZWFkKGlub2RlLCBidWYsIGRlc2Nfc2l6ZSwgZGVzY19wb3MpO1xuIFx0XHRpZiAoZXJyKVxuIFx0XHRcdHJldHVybiBlcnI7XG4gXHR9XG5AQCAtMzc0LDcgKzM0OCw5IEBAIHN0YXRpYyB2b2lkIGV4dDRfcmVhZGFoZWFkX21lcmtsZV90cmVlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHBnb2ZmX3QgaW5kZXgsXG4gfVxuIFxuIHN0YXRpYyBpbnQgZXh0NF93cml0ZV9tZXJrbGVfdHJlZV9ibG9jayhzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3Qgdm9pZCAqYnVmLFxuLVx0XHRcdFx0XHR1NjQgcG9zLCB1bnNpZ25lZCBpbnQgc2l6ZSlcbitcdFx0XHRcdFx0dTY0IHBvcywgdW5zaWduZWQgaW50IHNpemUsXG4rXHRcdFx0XHRcdGNvbnN0IHU4ICp6ZXJvX2RpZ2VzdCxcbitcdFx0XHRcdFx0dW5zaWduZWQgaW50IGRpZ2VzdF9zaXplKVxuIHtcbiBcdHBvcyArPSBleHQ0X3Zlcml0eV9tZXRhZGF0YV9wb3MoZmlsZV9pbm9kZShmaWxlKSk7XG4gXG5kaWZmIC0tZ2l0IGEvZnMvZjJmcy92ZXJpdHkuYyBiL2ZzL2YyZnMvdmVyaXR5LmNcbmluZGV4IDM5ZjQ4MjUxNTQ0NTJhLi5mM2E0NjE3NjU2ZGI5YiAxMDA2NDRcbi0tLSBhL2ZzL2YyZnMvdmVyaXR5LmNcbisrKyBiL2ZzL2YyZnMvdmVyaXR5LmNcbkBAIC0zNywzNCArMzcsNiBAQCBzdGF0aWMgaW5saW5lIGxvZmZfdCBmMmZzX3Zlcml0eV9tZXRhZGF0YV9wb3MoY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSlcbiBcdHJldHVybiByb3VuZF91cChpbm9kZS1cdTAwM2VpX3NpemUsIDY1NTM2KTtcbiB9XG4gXG4tLypcbi0gKiBSZWFkIHNvbWUgdmVyaXR5IG1ldGFkYXRhIGZyb20gdGhlIGlub2RlLiAgX192ZnNfcmVhZCgpIGNhbid0IGJlIHVzZWQgYmVjYXVzZVxuLSAqIHdlIG5lZWQgdG8gcmVhZCBiZXlvbmQgaV9zaXplLlxuLSAqL1xuLXN0YXRpYyBpbnQgcGFnZWNhY2hlX3JlYWQoc3RydWN0IGlub2RlICppbm9kZSwgdm9pZCAqYnVmLCBzaXplX3QgY291bnQsXG4tXHRcdFx0ICBsb2ZmX3QgcG9zKVxuLXtcbi1cdHdoaWxlIChjb3VudCkge1xuLVx0XHRzaXplX3QgbiA9IG1pbl90KHNpemVfdCwgY291bnQsXG4tXHRcdFx0XHQgUEFHRV9TSVpFIC0gb2Zmc2V0X2luX3BhZ2UocG9zKSk7XG4tXHRcdHN0cnVjdCBwYWdlICpwYWdlO1xuLVxuLVx0XHRwYWdlID0gcmVhZF9tYXBwaW5nX3BhZ2UoaW5vZGUtXHUwMDNlaV9tYXBwaW5nLCBwb3MgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQsXG4tXHRcdFx0XHRcdCBOVUxMKTtcbi1cdFx0aWYgKElTX0VSUihwYWdlKSlcbi1cdFx0XHRyZXR1cm4gUFRSX0VSUihwYWdlKTtcbi1cbi1cdFx0bWVtY3B5X2Zyb21fcGFnZShidWYsIHBhZ2UsIG9mZnNldF9pbl9wYWdlKHBvcyksIG4pO1xuLVxuLVx0XHRwdXRfcGFnZShwYWdlKTtcbi1cbi1cdFx0YnVmICs9IG47XG4tXHRcdHBvcyArPSBuO1xuLVx0XHRjb3VudCAtPSBuO1xuLVx0fVxuLVx0cmV0dXJuIDA7XG4tfVxuLVxuIC8qXG4gICogV3JpdGUgc29tZSB2ZXJpdHkgbWV0YWRhdGEgdG8gdGhlIGlub2RlIGZvciBGU19JT0NfRU5BQkxFX1ZFUklUWS5cbiAgKiBrZXJuZWxfd3JpdGUoKSBjYW4ndCBiZSB1c2VkIGJlY2F1c2UgdGhlIGZpbGUgZGVzY3JpcHRvciBpcyByZWFkb25seS5cbkBAIC0yNTAsNyArMjIyLDcgQEAgc3RhdGljIGludCBmMmZzX2dldF92ZXJpdHlfZGVzY3JpcHRvcihzdHJ1Y3QgaW5vZGUgKmlub2RlLCB2b2lkICpidWYsXG4gXHRpZiAoYnVmX3NpemUpIHtcbiBcdFx0aWYgKHNpemUgXHUwMDNlIGJ1Zl9zaXplKVxuIFx0XHRcdHJldHVybiAtRVJBTkdFO1xuLVx0XHRyZXMgPSBwYWdlY2FjaGVfcmVhZChpbm9kZSwgYnVmLCBzaXplLCBwb3MpO1xuK1x0XHRyZXMgPSBmc3Zlcml0eV9wYWdlY2FjaGVfcmVhZChpbm9kZSwgYnVmLCBzaXplLCBwb3MpO1xuIFx0XHRpZiAocmVzKVxuIFx0XHRcdHJldHVybiByZXM7XG4gXHR9XG5AQCAtMjcyLDcgKzI0NCw5IEBAIHN0YXRpYyB2b2lkIGYyZnNfcmVhZGFoZWFkX21lcmtsZV90cmVlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHBnb2ZmX3QgaW5kZXgsXG4gfVxuIFxuIHN0YXRpYyBpbnQgZjJmc193cml0ZV9tZXJrbGVfdHJlZV9ibG9jayhzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3Qgdm9pZCAqYnVmLFxuLVx0XHRcdFx0XHR1NjQgcG9zLCB1bnNpZ25lZCBpbnQgc2l6ZSlcbitcdFx0XHRcdFx0dTY0IHBvcywgdW5zaWduZWQgaW50IHNpemUsXG4rXHRcdFx0XHRcdGNvbnN0IHU4ICp6ZXJvX2RpZ2VzdCxcbitcdFx0XHRcdFx0dW5zaWduZWQgaW50IGRpZ2VzdF9zaXplKVxuIHtcbiBcdHBvcyArPSBmMmZzX3Zlcml0eV9tZXRhZGF0YV9wb3MoZmlsZV9pbm9kZShmaWxlKSk7XG4gXG5kaWZmIC0tZ2l0IGEvZnMvZmlsZV9hdHRyLmMgYi9mcy9maWxlX2F0dHIuY1xuaW5kZXggYmZiMDBkMjU2ZGQ1NjAuLjU0MjRlYzRlMzk0OTNmIDEwMDY0NFxuLS0tIGEvZnMvZmlsZV9hdHRyLmNcbisrKyBiL2ZzL2ZpbGVfYXR0ci5jXG5AQCAtMjQ2LDYgKzI0NiwxMSBAQCBzdGF0aWMgaW50IGZpbGVhdHRyX3NldF9wcmVwYXJlKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRpZiAoZmEtXHUwMDNlZnN4X2Nvd2V4dHNpemUgPT0gMClcbiBcdFx0ZmEtXHUwMDNlZnN4X3hmbGFncyBcdTAwMjY9IH5GU19YRkxBR19DT1dFWFRTSVpFO1xuIFxuK1x0LyogQ2FuIG5vdCBlbmFibGUgREFYIG9uIGZzdmVyaXR5IGZpbGUgKi9cbitcdGlmICgob2xkX21hLVx1MDAzZWZzeF94ZmxhZ3MgXHUwMDI2IEZTX1hGTEFHX1ZFUklUWSkgXHUwMDI2XHUwMDI2XG4rXHRcdFx0ZmEtXHUwMDNlZnN4X3hmbGFncyBcdTAwMjYgRlNfWEZMQUdfREFYKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbiBcdHJldHVybiAwO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9mcy92ZXJpdHkvZW5hYmxlLmMgYi9mcy92ZXJpdHkvZW5hYmxlLmNcbmluZGV4IDQyZGZlZDFjZTBjZTY2Li5hZDRmZjcxZDdkZDk1YiAxMDA2NDRcbi0tLSBhL2ZzL3Zlcml0eS9lbmFibGUuY1xuKysrIGIvZnMvdmVyaXR5L2VuYWJsZS5jXG5AQCAtNTAsNyArNTAsOSBAQCBzdGF0aWMgaW50IHdyaXRlX21lcmtsZV90cmVlX2Jsb2NrKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCB1OCAqYnVmLFxuIFx0aW50IGVycjtcbiBcbiBcdGVyciA9IGlub2RlLVx1MDAzZWlfc2ItXHUwMDNlc192b3AtXHUwMDNld3JpdGVfbWVya2xlX3RyZWVfYmxvY2soZmlsZSwgYnVmLCBwb3MsXG4tXHRcdFx0XHRcdFx0XHQgIHBhcmFtcy1cdTAwM2VibG9ja19zaXplKTtcbitcdFx0XHRcdFx0XHRcdCAgcGFyYW1zLVx1MDAzZWJsb2NrX3NpemUsXG4rXHRcdFx0XHRcdFx0XHQgIHBhcmFtcy1cdTAwM2V6ZXJvX2RpZ2VzdCxcbitcdFx0XHRcdFx0XHRcdCAgcGFyYW1zLVx1MDAzZWRpZ2VzdF9zaXplKTtcbiBcdGlmIChlcnIpXG4gXHRcdGZzdmVyaXR5X2Vycihpbm9kZSwgXCJFcnJvciAlZCB3cml0aW5nIE1lcmtsZSB0cmVlIGJsb2NrICVsdVwiLFxuIFx0XHRcdCAgICAgZXJyLCBpbmRleCk7XG5kaWZmIC0tZ2l0IGEvZnMvdmVyaXR5L29wZW4uYyBiL2ZzL3Zlcml0eS9vcGVuLmNcbmluZGV4IGQwYzU2YTdmYWEzYmIxLi44NzVlODg1MGNjYmFjZSAxMDA2NDRcbi0tLSBhL2ZzL3Zlcml0eS9vcGVuLmNcbisrKyBiL2ZzL3Zlcml0eS9vcGVuLmNcbkBAIC0zNDcsNyArMzQ3LDI0IEBAIGludCBmc3Zlcml0eV9nZXRfZGVzY3JpcHRvcihzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbnQgZW5zdXJlX3Zlcml0eV9pbmZvKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4rLyoqXG4rICogZnN2ZXJpdHlfZW5zdXJlX3Zlcml0eV9pbmZvKCkgLSBjYWNoZSB2ZXJpdHkgaW5mbyBpZiBpdCdzIG5vdCBhbHJlYWR5IGNhY2hlZFxuKyAqIEBpbm9kZTogdGhlIGlub2RlIGZvciB3aGljaCB2ZXJpdHkgaW5mbyBzaG91bGQgYmUgY2FjaGVkXG4rICpcbisgKiBFbnN1cmUgdGhpcyBpbm9kZSBoYXMgdmVyaXR5IGluZm8gYXR0YWNoZWQgdG8gaXQsIGl0J3MgYXNzdW1lZCB0aGUgaW5vZGVcbisgKiBhbHJlYWR5IGhhcyBmc3Zlcml0eSBlbmFibGVkLiBSZWFkIGZzdmVyaXR5IGRlc2NyaXB0b3IgYW5kIGNyZWF0ZXMgdmVyaXR5XG4rICogYmFzZWQgb24gdGhhdC5cbisgKlxuKyAqIFRoaXMgbmVlZHMgdG8gYmUgY2FsbGVkIGF0IGxlYXN0IG9uY2UgYmVmb3JlIGFueSBvZiB0aGUgaW5vZGUncyBkYXRhXG4rICogY2FuIGJlIHZlcmlmaWVkIChhbmQgdGh1cyByZWFkIGF0IGFsbCkgb3IgdGhlIGlub2RlJ3MgZnN2ZXJpdHkgZGlnZXN0XG4rICogcmV0cmlldmVkLiAgZnN2ZXJpdHlfZmlsZV9vcGVuKCkgY2FsbHMgdGhpcyBhbHJlYWR5LCB3aGljaCBoYW5kbGVzXG4rICogbm9ybWFsIGZpbGUgYWNjZXNzZXMuICBJZiBhIGZpbGVzeXN0ZW0gZG9lcyBhbnkgaW50ZXJuYWwgKGkuZS4gbm90XG4rICogYXNzb2NpYXRlZCB3aXRoIGEgZmlsZSBkZXNjcmlwdG9yKSByZWFkcyBvZiB0aGUgZmlsZSdzIGRhdGEgb3JcbisgKiBmc3Zlcml0eSBkaWdlc3QsIGl0IG11c3QgY2FsbCB0aGlzIGV4cGxpY2l0bHkgYmVmb3JlIGRvaW5nIHNvLlxuKyAqXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIC1lcnJubyBvbiBmYWlsdXJlXG4rICovXG4raW50IGZzdmVyaXR5X2Vuc3VyZV92ZXJpdHlfaW5mbyhzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIHtcbiBcdHN0cnVjdCBmc3Zlcml0eV9pbmZvICp2aSA9IGZzdmVyaXR5X2dldF9pbmZvKGlub2RlKSwgKmZvdW5kO1xuIFx0c3RydWN0IGZzdmVyaXR5X2Rlc2NyaXB0b3IgKmRlc2M7XG5AQCAtMzgzLDEyICs0MDAsMTMgQEAgc3RhdGljIGludCBlbnN1cmVfdmVyaXR5X2luZm8oc3RydWN0IGlub2RlICppbm9kZSlcbiBcdGtmcmVlKGRlc2MpO1xuIFx0cmV0dXJuIGVycjtcbiB9XG4rRVhQT1JUX1NZTUJPTF9HUEwoZnN2ZXJpdHlfZW5zdXJlX3Zlcml0eV9pbmZvKTtcbiBcbiBpbnQgX19mc3Zlcml0eV9maWxlX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApXG4ge1xuIFx0aWYgKGZpbHAtXHUwMDNlZl9tb2RlIFx1MDAyNiBGTU9ERV9XUklURSlcbiBcdFx0cmV0dXJuIC1FUEVSTTtcbi1cdHJldHVybiBlbnN1cmVfdmVyaXR5X2luZm8oaW5vZGUpO1xuK1x0cmV0dXJuIGZzdmVyaXR5X2Vuc3VyZV92ZXJpdHlfaW5mbyhpbm9kZSk7XG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKF9fZnN2ZXJpdHlfZmlsZV9vcGVuKTtcbiBcbmRpZmYgLS1naXQgYS9mcy92ZXJpdHkvcGFnZWNhY2hlLmMgYi9mcy92ZXJpdHkvcGFnZWNhY2hlLmNcbmluZGV4IDk5ZjVmNTNlZWE5ODVmLi4yNzBhYmQ2NTJlNDhjNiAxMDA2NDRcbi0tLSBhL2ZzL3Zlcml0eS9wYWdlY2FjaGUuY1xuKysrIGIvZnMvdmVyaXR5L3BhZ2VjYWNoZS5jXG5AQCAtNjgsMTMgKzY4LDY0IEBAIEVYUE9SVF9TWU1CT0xfR1BMKGdlbmVyaWNfcmVhZGFoZWFkX21lcmtsZV90cmVlKTtcbiB2b2lkIGZzdmVyaXR5X2ZpbGxfemVyb2hhc2goc3RydWN0IGZvbGlvICpmb2xpbywgc2l6ZV90IG9mZnNldCwgc2l6ZV90IGxlbixcbiBcdFx0XHQgICAgICBzdHJ1Y3QgZnN2ZXJpdHlfaW5mbyAqdmkpXG4ge1xuLVx0c2l6ZV90IG9mZiA9IG9mZnNldDtcbitcdHZvaWQgKnZhZGRyO1xuK1x0dm9pZCAqdG87XG4rXHRzaXplX3QgY2h1bms7XG4gXG4gXHRXQVJOX09OX09OQ0UoIUlTX0FMSUdORUQob2Zmc2V0LCB2aS1cdTAwM2V0cmVlX3BhcmFtcy5kaWdlc3Rfc2l6ZSkpO1xuIFx0V0FSTl9PTl9PTkNFKCFJU19BTElHTkVEKGxlbiwgdmktXHUwMDNldHJlZV9wYXJhbXMuZGlnZXN0X3NpemUpKTtcbitcdFdBUk5fT05fT05DRShvZmZzZXQgKyBsZW4gXHUwMDNlIGZvbGlvX3NpemUoZm9saW8pKTtcbiBcbi1cdGZvciAoOyBvZmYgXHUwMDNjIChvZmZzZXQgKyBsZW4pOyBvZmYgKz0gdmktXHUwMDNldHJlZV9wYXJhbXMuZGlnZXN0X3NpemUpXG4tXHRcdG1lbWNweV90b19mb2xpbyhmb2xpbywgb2ZmLCB2aS1cdTAwM2V0cmVlX3BhcmFtcy56ZXJvX2RpZ2VzdCxcbitcdGRvIHtcbitcdFx0dmFkZHIgPSBrbWFwX2xvY2FsX2ZvbGlvKGZvbGlvLCBvZmZzZXQpO1xuK1x0XHRjaHVuayA9IGxlbjtcbitcdFx0dG8gPSB2YWRkcjtcbitcbitcdFx0aWYgKGZvbGlvX3Rlc3RfcGFydGlhbF9rbWFwKGZvbGlvKSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIGNodW5rIFx1MDAzZSBQQUdFX1NJWkUgLSBvZmZzZXRfaW5fcGFnZShvZmZzZXQpKVxuK1x0XHRcdGNodW5rID0gUEFHRV9TSVpFIC0gb2Zmc2V0X2luX3BhZ2Uob2Zmc2V0KTtcbitcdFx0Zm9yICg7IHRvIFx1MDAzYyAodmFkZHIgKyBjaHVuayk7IHRvICs9IHZpLVx1MDAzZXRyZWVfcGFyYW1zLmRpZ2VzdF9zaXplKVxuK1x0XHRcdG1lbWNweSh0bywgdmktXHUwMDNldHJlZV9wYXJhbXMuemVyb19kaWdlc3QsXG4gXHRcdFx0XHR2aS1cdTAwM2V0cmVlX3BhcmFtcy5kaWdlc3Rfc2l6ZSk7XG4rXHRcdGt1bm1hcF9sb2NhbCh2YWRkcik7XG4rXG4rXHRcdG9mZnNldCArPSBjaHVuaztcbitcdFx0bGVuIC09IGNodW5rO1xuK1x0fSB3aGlsZSAobGVuIFx1MDAzZSAwKTtcbitcbitcdGZsdXNoX2RjYWNoZV9mb2xpbyhmb2xpbyk7XG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKGZzdmVyaXR5X2ZpbGxfemVyb2hhc2gpO1xuK1xuKy8qKlxuKyAqIGZzdmVyaXR5X3BhZ2VjYWNoZV9yZWFkKCkgLSByZWFkIHBhZ2UgYW5kIGNvcHkgZGF0YSB0byBidWZmZXJcbisgKiBAaW5vZGU6XHRjb3B5IGZyb20gdGhpcyBpbm9kZSdzIGFkZHJlc3Mgc3BhY2VcbisgKiBAYnVmOlx0YnVmZmVyIHRvIGNvcHkgdG9cbisgKiBAY291bnQ6XHRudW1iZXIgb2YgYnl0ZXMgdG8gY29weVxuKyAqIEBwb3M6XHRwb3NpdGlvbiBvZiB0aGUgZm9saW8gdG8gY29weSBmcm9tXG4rICpcbisgKiBSZWFkIHNvbWUgdmVyaXR5IG1ldGFkYXRhIGZyb20gdGhlIGlub2RlLiAgX192ZnNfcmVhZCgpIGNhbid0IGJlIHVzZWQgYmVjYXVzZVxuKyAqIHdlIG5lZWQgdG8gcmVhZCBiZXlvbmQgaV9zaXplLlxuKyAqL1xuK2ludCBmc3Zlcml0eV9wYWdlY2FjaGVfcmVhZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCB2b2lkICpidWYsIHNpemVfdCBjb3VudCxcbitcdFx0XHQgIGxvZmZfdCBwb3MpXG4re1xuK1x0d2hpbGUgKGNvdW50KSB7XG4rXHRcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4rXHRcdHNpemVfdCBuO1xuK1xuK1x0XHRmb2xpbyA9IHJlYWRfbWFwcGluZ19mb2xpbyhpbm9kZS1cdTAwM2VpX21hcHBpbmcsIHBvcyBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCxcbitcdFx0XHRcdFx0IE5VTEwpO1xuK1x0XHRpZiAoSVNfRVJSKGZvbGlvKSlcbitcdFx0XHRyZXR1cm4gUFRSX0VSUihmb2xpbyk7XG4rXG4rXHRcdG4gPSBtZW1jcHlfZnJvbV9maWxlX2ZvbGlvKGJ1ZiwgZm9saW8sIHBvcywgY291bnQpO1xuK1x0XHRmb2xpb19wdXQoZm9saW8pO1xuK1xuK1x0XHRidWYgKz0gbjtcbitcdFx0cG9zICs9IG47XG4rXHRcdGNvdW50IC09IG47XG4rXHR9XG4rXHRyZXR1cm4gMDtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwoZnN2ZXJpdHlfcGFnZWNhY2hlX3JlYWQpO1xuZGlmZiAtLWdpdCBhL2ZzL3Zlcml0eS92ZXJpZnkuYyBiL2ZzL3Zlcml0eS92ZXJpZnkuY1xuaW5kZXggNDAwNGExZDQyODc1MWYuLmRiOGMzNTAyMzRiYjcxIDEwMDY0NFxuLS0tIGEvZnMvdmVyaXR5L3ZlcmlmeS5jXG4rKysgYi9mcy92ZXJpdHkvdmVyaWZ5LmNcbkBAIC05LDYgKzksNyBAQFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Jpby5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZXhwb3J0LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9mc2Vycm9yLmhcdTAwM2VcbiBcbiAjZGVmaW5lIEZTX1ZFUklUWV9NQVhfUEVORElOR19CTE9DS1MgMlxuIFxuQEAgLTIwNSw2ICsyMDYsOCBAQCBzdGF0aWMgYm9vbCB2ZXJpZnlfZGF0YV9ibG9jayhzdHJ1Y3QgZnN2ZXJpdHlfaW5mbyAqdmksXG4gXHRcdGlmIChtZW1jaHJfaW52KGRibG9jay1cdTAwM2VkYXRhLCAwLCBwYXJhbXMtXHUwMDNlYmxvY2tfc2l6ZSkpIHtcbiBcdFx0XHRmc3Zlcml0eV9lcnIoaW5vZGUsXG4gXHRcdFx0XHQgICAgIFwiRklMRSBDT1JSVVBURUQhICBEYXRhIHBhc3QgRU9GIGlzIG5vdCB6ZXJvZWRcIik7XG4rXHRcdFx0ZnNlcnJvcl9yZXBvcnRfZGF0YV9sb3N0KGlub2RlLCBkYXRhX3BvcyxcbitcdFx0XHRcdFx0XHQgcGFyYW1zLVx1MDAzZWJsb2NrX3NpemUsIEdGUF9OT0ZTKTtcbiBcdFx0XHRyZXR1cm4gZmFsc2U7XG4gXHRcdH1cbiBcdFx0cmV0dXJuIHRydWU7XG5AQCAtMzEyLDYgKzMxNSw3IEBAIHN0YXRpYyBib29sIHZlcmlmeV9kYXRhX2Jsb2NrKHN0cnVjdCBmc3Zlcml0eV9pbmZvICp2aSxcbiBcdFx0ZGF0YV9wb3MsIGxldmVsIC0gMSwgcGFyYW1zLVx1MDAzZWhhc2hfYWxnLVx1MDAzZW5hbWUsIGhzaXplLCB3YW50X2hhc2gsXG4gXHRcdHBhcmFtcy1cdTAwM2VoYXNoX2FsZy1cdTAwM2VuYW1lLCBoc2l6ZSxcbiBcdFx0bGV2ZWwgPT0gMCA/IGRibG9jay1cdTAwM2VyZWFsX2hhc2ggOiByZWFsX2hhc2gpO1xuK1x0ZnNlcnJvcl9yZXBvcnRfZGF0YV9sb3N0KGlub2RlLCBkYXRhX3BvcywgcGFyYW1zLVx1MDAzZWJsb2NrX3NpemUsIEdGUF9OT0ZTKTtcbiBlcnJvcjpcbiBcdGZvciAoOyBsZXZlbCBcdTAwM2UgMDsgbGV2ZWwtLSkge1xuIFx0XHRrdW5tYXBfbG9jYWwoaGJsb2Nrc1tsZXZlbCAtIDFdLmFkZHIpO1xuZGlmZiAtLWdpdCBhL2ZzL3hmcy9NYWtlZmlsZSBiL2ZzL3hmcy9NYWtlZmlsZVxuaW5kZXggOWY3MTMzZTAyNTc2OGQuLjM4YjdmNTFlNWQ4NDA1IDEwMDY0NFxuLS0tIGEvZnMveGZzL01ha2VmaWxlXG4rKysgYi9mcy94ZnMvTWFrZWZpbGVcbkBAIC0xNDksNiArMTQ5LDcgQEAgeGZzLSQoQ09ORklHX1hGU19QT1NJWF9BQ0wpXHQrPSB4ZnNfYWNsLm9cbiB4ZnMtJChDT05GSUdfU1lTQ1RMKVx0XHQrPSB4ZnNfc3lzY3RsLm9cbiB4ZnMtJChDT05GSUdfQ09NUEFUKVx0XHQrPSB4ZnNfaW9jdGwzMi5vXG4geGZzLSQoQ09ORklHX0VYUE9SVEZTX0JMT0NLX09QUylcdCs9IHhmc19wbmZzLm9cbit4ZnMtJChDT05GSUdfRlNfVkVSSVRZKVx0XHQrPSB4ZnNfZnN2ZXJpdHkub1xuIFxuICMgbm90aWZ5IGZhaWx1cmVcbiBpZmVxICgkKENPTkZJR19NRU1PUllfRkFJTFVSRSkseSlcbmRpZmYgLS1naXQgYS9mcy94ZnMvbGlieGZzL3hmc19ibWFwLmMgYi9mcy94ZnMvbGlieGZzL3hmc19ibWFwLmNcbmluZGV4IGQ2NGRlZmVkYTY0NWVkLi5jYzQ4ZjZlMjBlODAwMCAxMDA2NDRcbi0tLSBhL2ZzL3hmcy9saWJ4ZnMveGZzX2JtYXAuY1xuKysrIGIvZnMveGZzL2xpYnhmcy94ZnNfYm1hcC5jXG5AQCAtNDEsNiArNDEsOCBAQFxuICNpbmNsdWRlIFwieGZzX2lub2RlX3V0aWwuaFwiXG4gI2luY2x1ZGUgXCJ4ZnNfcnRncm91cC5oXCJcbiAjaW5jbHVkZSBcInhmc196b25lX2FsbG9jLmhcIlxuKyNpbmNsdWRlIFwieGZzX2ZzdmVyaXR5LmhcIlxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZzdmVyaXR5LmhcdTAwM2VcbiBcbiBzdHJ1Y3Qga21lbV9jYWNoZVx0XHQqeGZzX2JtYXBfaW50ZW50X2NhY2hlO1xuIFxuQEAgLTQ0MDIsNiArNDQwNCwxMCBAQCB4ZnNfYm1hcGlfY29udmVydF9vbmVfZGVsYWxsb2MoXG4gXHQgKiB0aGUgZXh0ZW50LiAgSnVzdCByZXR1cm4gdGhlIHJlYWwgZXh0ZW50IGF0IHRoaXMgb2Zmc2V0LlxuIFx0ICovXG4gXHRpZiAoIWlzbnVsbHN0YXJ0YmxvY2soYm1hLmdvdC5icl9zdGFydGJsb2NrKSkge1xuK1x0XHRpZiAoeGZzX2lmbGFnc190ZXN0KGlwLCBYRlNfVkVSSVRZX0NPTlNUUlVDVElPTikgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICBYRlNfRlNCX1RPX0IobXAsIGJtYS5nb3QuYnJfc3RhcnRvZmYpIFx1MDAzZT1cbitcdFx0XHQgICAgeGZzX2ZzdmVyaXR5X21ldGFkYXRhX29mZnNldChpcCkpXG4rXHRcdFx0ZmxhZ3MgfD0gSU9NQVBfRl9GU1ZFUklUWTtcbiBcdFx0eGZzX2JtYnRfdG9faW9tYXAoaXAsIGlvbWFwLCBcdTAwMjZibWEuZ290LCAwLCBmbGFncyxcbiBcdFx0XHRcdHhmc19pb21hcF9pbm9kZV9zZXF1ZW5jZShpcCwgZmxhZ3MpKTtcbiBcdFx0aWYgKHNlcSlcbkBAIC00NDQ5LDYgKzQ0NTUsMTEgQEAgeGZzX2JtYXBpX2NvbnZlcnRfb25lX2RlbGFsbG9jKFxuIFx0WEZTX1NUQVRTX0FERChtcCwgeHNfeHN0cmF0X2J5dGVzLCBYRlNfRlNCX1RPX0IobXAsIGJtYS5sZW5ndGgpKTtcbiBcdFhGU19TVEFUU19JTkMobXAsIHhzX3hzdHJhdF9xdWljayk7XG4gXG4rXHRpZiAoeGZzX2lmbGFnc190ZXN0KGlwLCBYRlNfVkVSSVRZX0NPTlNUUlVDVElPTikgXHUwMDI2XHUwMDI2XG4rXHQgICAgWEZTX0ZTQl9UT19CKG1wLCBibWEuZ290LmJyX3N0YXJ0b2ZmKSBcdTAwM2U9XG4rXHRcdCAgICB4ZnNfZnN2ZXJpdHlfbWV0YWRhdGFfb2Zmc2V0KGlwKSlcbitcdFx0ZmxhZ3MgfD0gSU9NQVBfRl9GU1ZFUklUWTtcbitcbiBcdEFTU0VSVCghaXNudWxsc3RhcnRibG9jayhibWEuZ290LmJyX3N0YXJ0YmxvY2spKTtcbiBcdHhmc19ibWJ0X3RvX2lvbWFwKGlwLCBpb21hcCwgXHUwMDI2Ym1hLmdvdCwgMCwgZmxhZ3MsXG4gXHRcdFx0XHR4ZnNfaW9tYXBfaW5vZGVfc2VxdWVuY2UoaXAsIGZsYWdzKSk7XG5kaWZmIC0tZ2l0IGEvZnMveGZzL2xpYnhmcy94ZnNfZm9ybWF0LmggYi9mcy94ZnMvbGlieGZzL3hmc19mb3JtYXQuaFxuaW5kZXggZGQwZWQwNDZmYmU5YzkuLjI4NzhiYzljYjY1NjRlIDEwMDY0NFxuLS0tIGEvZnMveGZzL2xpYnhmcy94ZnNfZm9ybWF0LmhcbisrKyBiL2ZzL3hmcy9saWJ4ZnMveGZzX2Zvcm1hdC5oXG5AQCAtMzc0LDExICszNzQsMTMgQEAgeGZzX3NiX2hhc19jb21wYXRfZmVhdHVyZShcbiAjZGVmaW5lIFhGU19TQl9GRUFUX1JPX0NPTVBBVF9STUFQQlQgICAoMSBcdTAwM2NcdTAwM2MgMSlcdFx0LyogcmV2ZXJzZSBtYXAgYnRyZWUgKi9cbiAjZGVmaW5lIFhGU19TQl9GRUFUX1JPX0NPTVBBVF9SRUZMSU5LICAoMSBcdTAwM2NcdTAwM2MgMilcdFx0LyogcmVmbGlua2VkIGZpbGVzICovXG4gI2RlZmluZSBYRlNfU0JfRkVBVF9ST19DT01QQVRfSU5PQlRDTlQgKDEgXHUwMDNjXHUwMDNjIDMpXHRcdC8qIGlub2J0IGJsb2NrIGNvdW50cyAqL1xuKyNkZWZpbmUgWEZTX1NCX0ZFQVRfUk9fQ09NUEFUX1ZFUklUWSAgICgxIFx1MDAzY1x1MDAzYyA0KVx0XHQvKiBmcy12ZXJpdHkgKi9cbiAjZGVmaW5lIFhGU19TQl9GRUFUX1JPX0NPTVBBVF9BTEwgXFxcbiBcdFx0KFhGU19TQl9GRUFUX1JPX0NPTVBBVF9GSU5PQlQgfCBcXFxuIFx0XHQgWEZTX1NCX0ZFQVRfUk9fQ09NUEFUX1JNQVBCVCB8IFxcXG4tXHRcdCBYRlNfU0JfRkVBVF9ST19DT01QQVRfUkVGTElOS3wgXFxcbi1cdFx0IFhGU19TQl9GRUFUX1JPX0NPTVBBVF9JTk9CVENOVClcbitcdFx0IFhGU19TQl9GRUFUX1JPX0NPTVBBVF9SRUZMSU5LIHwgXFxcbitcdFx0IFhGU19TQl9GRUFUX1JPX0NPTVBBVF9JTk9CVENOVCB8IFxcXG4rXHRcdCBYRlNfU0JfRkVBVF9ST19DT01QQVRfVkVSSVRZKVxuICNkZWZpbmUgWEZTX1NCX0ZFQVRfUk9fQ09NUEFUX1VOS05PV05cdH5YRlNfU0JfRkVBVF9ST19DT01QQVRfQUxMXG4gc3RhdGljIGlubGluZSBib29sXG4geGZzX3NiX2hhc19yb19jb21wYXRfZmVhdHVyZShcbkBAIC0xMjMwLDE2ICsxMjMyLDIxIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB4ZnNfZGlub2RlX3B1dF9yZGV2KHN0cnVjdCB4ZnNfZGlub2RlICpkaXAsIHhmc19kZXZfdCByZGV2KVxuICAqL1xuICNkZWZpbmUgWEZTX0RJRkxBRzJfTUVUQURBVEFfQklUXHQ1XG4gXG4rLyogaW5vZGVzIHNlYWxlZCB3aXRoIGZzLXZlcml0eSAqL1xuKyNkZWZpbmUgWEZTX0RJRkxBRzJfVkVSSVRZX0JJVFx0XHQ2XG4rXG4gI2RlZmluZSBYRlNfRElGTEFHMl9EQVhcdFx0KDFVTEwgXHUwMDNjXHUwMDNjIFhGU19ESUZMQUcyX0RBWF9CSVQpXG4gI2RlZmluZSBYRlNfRElGTEFHMl9SRUZMSU5LXHQoMVVMTCBcdTAwM2NcdTAwM2MgWEZTX0RJRkxBRzJfUkVGTElOS19CSVQpXG4gI2RlZmluZSBYRlNfRElGTEFHMl9DT1dFWFRTSVpFXHQoMVVMTCBcdTAwM2NcdTAwM2MgWEZTX0RJRkxBRzJfQ09XRVhUU0laRV9CSVQpXG4gI2RlZmluZSBYRlNfRElGTEFHMl9CSUdUSU1FXHQoMVVMTCBcdTAwM2NcdTAwM2MgWEZTX0RJRkxBRzJfQklHVElNRV9CSVQpXG4gI2RlZmluZSBYRlNfRElGTEFHMl9OUkVYVDY0XHQoMVVMTCBcdTAwM2NcdTAwM2MgWEZTX0RJRkxBRzJfTlJFWFQ2NF9CSVQpXG4gI2RlZmluZSBYRlNfRElGTEFHMl9NRVRBREFUQVx0KDFVTEwgXHUwMDNjXHUwMDNjIFhGU19ESUZMQUcyX01FVEFEQVRBX0JJVClcbisjZGVmaW5lIFhGU19ESUZMQUcyX1ZFUklUWVx0KDFVTEwgXHUwMDNjXHUwMDNjIFhGU19ESUZMQUcyX1ZFUklUWV9CSVQpXG4gXG4gI2RlZmluZSBYRlNfRElGTEFHMl9BTlkgXFxcbiBcdChYRlNfRElGTEFHMl9EQVggfCBYRlNfRElGTEFHMl9SRUZMSU5LIHwgWEZTX0RJRkxBRzJfQ09XRVhUU0laRSB8IFxcXG4tXHQgWEZTX0RJRkxBRzJfQklHVElNRSB8IFhGU19ESUZMQUcyX05SRVhUNjQgfCBYRlNfRElGTEFHMl9NRVRBREFUQSlcbitcdCBYRlNfRElGTEFHMl9CSUdUSU1FIHwgWEZTX0RJRkxBRzJfTlJFWFQ2NCB8IFhGU19ESUZMQUcyX01FVEFEQVRBIHwgXFxcbitcdCBYRlNfRElGTEFHMl9WRVJJVFkpXG4gXG4gc3RhdGljIGlubGluZSBib29sIHhmc19kaW5vZGVfaGFzX2JpZ3RpbWUoY29uc3Qgc3RydWN0IHhmc19kaW5vZGUgKmRpcClcbiB7XG5AQCAtMjAyNyw0ICsyMDM0LDI2IEBAIHN0cnVjdCB4ZnNfYWNsIHtcbiAjZGVmaW5lIFNHSV9BQ0xfRklMRV9TSVpFXHQoc2l6ZW9mKFNHSV9BQ0xfRklMRSktMSlcbiAjZGVmaW5lIFNHSV9BQ0xfREVGQVVMVF9TSVpFXHQoc2l6ZW9mKFNHSV9BQ0xfREVGQVVMVCktMSlcbiBcbisvKlxuKyAqIEF0IG1heGltdW0gb2YgOCBsZXZlbHMgd2l0aCAxMjggaGFzaGVzIHBlciBibG9jayAoMzIgYnl0ZXMgU0hBLTI1NikgbWF4aW11bVxuKyAqIHRyZWUgc2l6ZSBpcyAoKDEyOF44IOKIkiAxKS8oMTI4IOKIkiAxKSkgPSA1NjcqMTBeMTIgYmxvY2tzLiBUaGlzIHNob3VsZCBmaXQgaW5cbisgKiA1MyBiaXRzIGFkZHJlc3Mgc3BhY2UuXG4rICpcbisgKiBBdCB0aGlzIE1lcmtsZSB0cmVlIHNpemUgd2UgY2FuIGNvdmVyIDI5NUVCIGxhcmdlIGZpbGUuIFRoaXMgaXMgbXVjaCBsYXJnZXJcbisgKiB0aGFuIHRoZSBjdXJyZW50bHkgc3VwcG9ydGVkIGZpbGUgc2l6ZS5cbisgKlxuKyAqIEZvciBzaGE1MTIgdGhlIGxhcmdlc3QgZmlsZSB3ZSBjYW4gY292ZXIgZW5kcyBhdCAxIFx1MDAzY1x1MDAzYyA1MCBvZmZzZXQsIHRoaXMgaXMgYWxzb1xuKyAqIGdvb2QuXG4rICovXG4rI2RlZmluZSBYRlNfRlNWRVJJVFlfTEFSR0VTVF9GSUxFXHQoKGxvZmZfdCkxVUxMIFx1MDAzY1x1MDAzYyA1MylcbitcbisvKlxuKyAqIEFsaWdubWVudCBvZiB0aGUgZnN2ZXJpdHkgbWV0YWRhdGEgcGxhY2VtZW50LiBUaGlzIGlzIGxhcmdlc3Qgc3VwcG9ydGVkIFBBR0VcbisgKiBTSVpFIGZvciBmc3Zlcml0eS4gVGhpcyBpcyB1c2VkIHRvIHNwYWNlIG91dCBkYXRhIGFuZCBtZXRhZGF0YSBpbiBwYWdlIGNhY2hlLlxuKyAqIFRoZSBzcGFjaW5nIGlzIG5lY2Vzc2FyeSBmb3Igbm9uLWV4cG9zdXJlIG9mIG1ldGFkYXRhIHRvIHVzZXJzcGFjZSBhbmRcbisgKiBjb3JyZWN0IG1lcmtsZSB0cmVlIHN5bmV0aGVzaXMgaW4gdGhlIGlvbWFwLlxuKyAqL1xuKyNkZWZpbmUgWEZTX0ZTVkVSSVRZX1NUQVJUX0FMSUdOXHQoNjU1MzYpXG4rXG4rXG4gI2VuZGlmIC8qIF9fWEZTX0ZPUk1BVF9IX18gKi9cbmRpZmYgLS1naXQgYS9mcy94ZnMvbGlieGZzL3hmc19mcy5oIGIvZnMveGZzL2xpYnhmcy94ZnNfZnMuaFxuaW5kZXggMTg1ZjA5ZjMyN2MwMGMuLjg0ZDYyYjc1MDZhOWFkIDEwMDY0NFxuLS0tIGEvZnMveGZzL2xpYnhmcy94ZnNfZnMuaFxuKysrIGIvZnMveGZzL2xpYnhmcy94ZnNfZnMuaFxuQEAgLTI1MCw2ICsyNTAsNyBAQCB0eXBlZGVmIHN0cnVjdCB4ZnNfZnNvcF9yZXNibGtzIHtcbiAjZGVmaW5lIFhGU19GU09QX0dFT01fRkxBR1NfUEFSRU5UXHQoMSBcdTAwM2NcdTAwM2MgMjUpIC8qIGxpbnV4IHBhcmVudCBwb2ludGVycyAqL1xuICNkZWZpbmUgWEZTX0ZTT1BfR0VPTV9GTEFHU19NRVRBRElSXHQoMSBcdTAwM2NcdTAwM2MgMjYpIC8qIG1ldGFkYXRhIGRpcmVjdG9yaWVzICovXG4gI2RlZmluZSBYRlNfRlNPUF9HRU9NX0ZMQUdTX1pPTkVEXHQoMSBcdTAwM2NcdTAwM2MgMjcpIC8qIHpvbmVkIHJ0IGRldmljZSAqL1xuKyNkZWZpbmUgWEZTX0ZTT1BfR0VPTV9GTEFHU19WRVJJVFlcdCgxIFx1MDAzY1x1MDAzYyAyOCkgLyogZnMtdmVyaXR5ICovXG4gXG4gLypcbiAgKiBNaW5pbXVtIGFuZCBtYXhpbXVtIHNpemVzIG5lZWQgZm9yIGdyb3d0aCBjaGVja3MuXG5AQCAtNDIxLDYgKzQyMiw3IEBAIHN0cnVjdCB4ZnNfYnVsa3N0YXQge1xuICNkZWZpbmUgWEZTX0JTX1NJQ0tfU1lNTElOS1x0KDEgXHUwMDNjXHUwMDNjIDYpICAvKiBzeW1ib2xpYyBsaW5rIHJlbW90ZSB0YXJnZXQgKi9cbiAjZGVmaW5lIFhGU19CU19TSUNLX1BBUkVOVFx0KDEgXHUwMDNjXHUwMDNjIDcpICAvKiBwYXJlbnQgcG9pbnRlcnMgKi9cbiAjZGVmaW5lIFhGU19CU19TSUNLX0RJUlRSRUVcdCgxIFx1MDAzY1x1MDAzYyA4KSAgLyogZGlyZWN0b3J5IHRyZWUgc3RydWN0dXJlICovXG4rI2RlZmluZSBYRlNfQlNfU0lDS19GU1ZFUklUWVx0KDEgXHUwMDNjXHUwMDNjIDkpICAvKiBmc3Zlcml0eSBtZXRhZGF0YSAqL1xuIFxuIC8qXG4gICogUHJvamVjdCBxdW90YSBpZCBoZWxwZXJzIChwcmV2aW91c2x5IHByb2ppZCB3YXMgMTZiaXQgb25seVxuZGlmZiAtLWdpdCBhL2ZzL3hmcy9saWJ4ZnMveGZzX2hlYWx0aC5oIGIvZnMveGZzL2xpYnhmcy94ZnNfaGVhbHRoLmhcbmluZGV4IDFkNDVjZjU3ODllODY0Li45MzJiNDQ3MTkwZGE3NiAxMDA2NDRcbi0tLSBhL2ZzL3hmcy9saWJ4ZnMveGZzX2hlYWx0aC5oXG4rKysgYi9mcy94ZnMvbGlieGZzL3hmc19oZWFsdGguaFxuQEAgLTEwNCw2ICsxMDQsNyBAQCBzdHJ1Y3QgeGZzX3J0Z3JvdXA7XG4gLyogRG9uJ3QgcHJvcGFnYXRlIHNpY2sgc3RhdHVzIHRvIGFnIGhlYWx0aCBzdW1tYXJ5IGR1cmluZyBpbmFjdGl2YXRpb24gKi9cbiAjZGVmaW5lIFhGU19TSUNLX0lOT19GT1JHRVRcdCgxIFx1MDAzY1x1MDAzYyAxMilcbiAjZGVmaW5lIFhGU19TSUNLX0lOT19ESVJUUkVFXHQoMSBcdTAwM2NcdTAwM2MgMTMpICAvKiBkaXJlY3RvcnkgdHJlZSBzdHJ1Y3R1cmUgKi9cbisjZGVmaW5lIFhGU19TSUNLX0lOT19GU1ZFUklUWVx0KDEgXHUwMDNjXHUwMDNjIDE0KSAgLyogZnN2ZXJpdHkgbWV0YWRhdGEgKi9cbiBcbiAvKiBQcmltYXJ5IGV2aWRlbmNlIG9mIGhlYWx0aCBwcm9ibGVtcyBpbiBhIGdpdmVuIGdyb3VwLiAqL1xuICNkZWZpbmUgWEZTX1NJQ0tfRlNfUFJJTUFSWVx0KFhGU19TSUNLX0ZTX0NPVU5URVJTIHwgXFxcbkBAIC0xNDAsNyArMTQxLDggQEAgc3RydWN0IHhmc19ydGdyb3VwO1xuIFx0XHRcdFx0IFhGU19TSUNLX0lOT19YQVRUUiB8IFxcXG4gXHRcdFx0XHQgWEZTX1NJQ0tfSU5PX1NZTUxJTksgfCBcXFxuIFx0XHRcdFx0IFhGU19TSUNLX0lOT19QQVJFTlQgfCBcXFxuLVx0XHRcdFx0IFhGU19TSUNLX0lOT19ESVJUUkVFKVxuK1x0XHRcdFx0IFhGU19TSUNLX0lOT19ESVJUUkVFIHwgXFxcbitcdFx0XHRcdCBYRlNfU0lDS19JTk9fRlNWRVJJVFkpXG4gXG4gI2RlZmluZSBYRlNfU0lDS19JTk9fWkFQUEVEXHQoWEZTX1NJQ0tfSU5PX0JNQlREX1pBUFBFRCB8IFxcXG4gXHRcdFx0XHQgWEZTX1NJQ0tfSU5PX0JNQlRBX1pBUFBFRCB8IFxcXG5kaWZmIC0tZ2l0IGEvZnMveGZzL2xpYnhmcy94ZnNfaW5vZGVfYnVmLmMgYi9mcy94ZnMvbGlieGZzL3hmc19pbm9kZV9idWYuY1xuaW5kZXggMzM2ZWY4NDNmMmZlNGYuLmJkODBhMTlmMmUwOTI5IDEwMDY0NFxuLS0tIGEvZnMveGZzL2xpYnhmcy94ZnNfaW5vZGVfYnVmLmNcbisrKyBiL2ZzL3hmcy9saWJ4ZnMveGZzX2lub2RlX2J1Zi5jXG5AQCAtNzYwLDYgKzc2MCwxNCBAQCB4ZnNfZGlub2RlX3ZlcmlmeShcbiBcdCAgICAheGZzX2hhc19ydHJlZmxpbmsobXApKVxuIFx0XHRyZXR1cm4gX190aGlzX2FkZHJlc3M7XG4gXG4rXHQvKiBvbmx5IHJlZ3VsYXIgZmlsZXMgY2FuIGhhdmUgZnN2ZXJpdHkgKi9cbitcdGlmIChmbGFnczIgXHUwMDI2IFhGU19ESUZMQUcyX1ZFUklUWSkge1xuK1x0XHRpZiAoIXhmc19oYXNfdmVyaXR5KG1wKSlcbitcdFx0XHRyZXR1cm4gX190aGlzX2FkZHJlc3M7XG4rXHRcdGlmICghU19JU1JFRyhtb2RlKSlcbitcdFx0XHRyZXR1cm4gX190aGlzX2FkZHJlc3M7XG4rXHR9XG4rXG4gXHRpZiAoeGZzX2hhc196b25lZChtcCkgXHUwMDI2XHUwMDI2XG4gXHQgICAgZGlwLVx1MDAzZWRpX21ldGF0eXBlID09IGNwdV90b19iZTE2KFhGU19NRVRBRklMRV9SVFJNQVApKSB7XG4gXHRcdGlmIChiZTMyX3RvX2NwdShkaXAtXHUwMDNlZGlfdXNlZF9ibG9ja3MpIFx1MDAzZSBtcC1cdTAwM2VtX3NiLnNiX3JnZXh0ZW50cylcbmRpZmYgLS1naXQgYS9mcy94ZnMvbGlieGZzL3hmc19pbm9kZV91dGlsLmMgYi9mcy94ZnMvbGlieGZzL3hmc19pbm9kZV91dGlsLmNcbmluZGV4IDI1OGFjM2QwZDQ4NmU2Li41YTUxNmJkMzFjMzE3NSAxMDA2NDRcbi0tLSBhL2ZzL3hmcy9saWJ4ZnMveGZzX2lub2RlX3V0aWwuY1xuKysrIGIvZnMveGZzL2xpYnhmcy94ZnNfaW5vZGVfdXRpbC5jXG5AQCAtNzQsNyArNzQsOCBAQCB4ZnNfZmxhZ3MyZGlmbGFnczIoXG4gXHR1aW50NjRfdFx0XHRkaV9mbGFnczIgPVxuIFx0XHQoaXAtXHUwMDNlaV9kaWZsYWdzMiBcdTAwMjYgKFhGU19ESUZMQUcyX1JFRkxJTksgfFxuIFx0XHRcdFx0ICAgWEZTX0RJRkxBRzJfQklHVElNRSB8XG4tXHRcdFx0XHQgICBYRlNfRElGTEFHMl9OUkVYVDY0KSk7XG4rXHRcdFx0XHQgICBYRlNfRElGTEFHMl9OUkVYVDY0IHxcbitcdFx0XHRcdCAgIFhGU19ESUZMQUcyX1ZFUklUWSkpO1xuIFxuIFx0aWYgKHhmbGFncyBcdTAwMjYgRlNfWEZMQUdfREFYKVxuIFx0XHRkaV9mbGFnczIgfD0gWEZTX0RJRkxBRzJfREFYO1xuQEAgLTEyNiw2ICsxMjcsOCBAQCB4ZnNfaXAyeGZsYWdzKFxuIFx0XHRcdGZsYWdzIHw9IEZTX1hGTEFHX0RBWDtcbiBcdFx0aWYgKGlwLVx1MDAzZWlfZGlmbGFnczIgXHUwMDI2IFhGU19ESUZMQUcyX0NPV0VYVFNJWkUpXG4gXHRcdFx0ZmxhZ3MgfD0gRlNfWEZMQUdfQ09XRVhUU0laRTtcbitcdFx0aWYgKGlwLVx1MDAzZWlfZGlmbGFnczIgXHUwMDI2IFhGU19ESUZMQUcyX1ZFUklUWSlcbitcdFx0XHRmbGFncyB8PSBGU19YRkxBR19WRVJJVFk7XG4gXHR9XG4gXG4gXHRpZiAoeGZzX2lub2RlX2hhc19hdHRyX2ZvcmsoaXApKVxuZGlmZiAtLWdpdCBhL2ZzL3hmcy9saWJ4ZnMveGZzX3NiLmMgYi9mcy94ZnMvbGlieGZzL3hmc19zYi5jXG5pbmRleCA0NzMyMmFkYjc2OTA1OS4uMjIyYmJlNTU1OWRmNDcgMTAwNjQ0XG4tLS0gYS9mcy94ZnMvbGlieGZzL3hmc19zYi5jXG4rKysgYi9mcy94ZnMvbGlieGZzL3hmc19zYi5jXG5AQCAtMTY1LDYgKzE2NSw4IEBAIHhmc19zYl92ZXJzaW9uX3RvX2ZlYXR1cmVzKFxuIFx0XHRmZWF0dXJlcyB8PSBYRlNfRkVBVF9SRUZMSU5LO1xuIFx0aWYgKHNicC1cdTAwM2VzYl9mZWF0dXJlc19yb19jb21wYXQgXHUwMDI2IFhGU19TQl9GRUFUX1JPX0NPTVBBVF9JTk9CVENOVClcbiBcdFx0ZmVhdHVyZXMgfD0gWEZTX0ZFQVRfSU5PQlRDTlQ7XG4rXHRpZiAoc2JwLVx1MDAzZXNiX2ZlYXR1cmVzX3JvX2NvbXBhdCBcdTAwMjYgWEZTX1NCX0ZFQVRfUk9fQ09NUEFUX1ZFUklUWSlcbitcdFx0ZmVhdHVyZXMgfD0gWEZTX0ZFQVRfVkVSSVRZO1xuIFx0aWYgKHNicC1cdTAwM2VzYl9mZWF0dXJlc19pbmNvbXBhdCBcdTAwMjYgWEZTX1NCX0ZFQVRfSU5DT01QQVRfRlRZUEUpXG4gXHRcdGZlYXR1cmVzIHw9IFhGU19GRUFUX0ZUWVBFO1xuIFx0aWYgKHNicC1cdTAwM2VzYl9mZWF0dXJlc19pbmNvbXBhdCBcdTAwMjYgWEZTX1NCX0ZFQVRfSU5DT01QQVRfU1BJTk9ERVMpXG5AQCAtMTU4OCw2ICsxNTkwLDggQEAgeGZzX2ZzX2dlb21ldHJ5KFxuIFx0XHRnZW8tXHUwMDNlZmxhZ3MgfD0gWEZTX0ZTT1BfR0VPTV9GTEFHU19NRVRBRElSO1xuIFx0aWYgKHhmc19oYXNfem9uZWQobXApKVxuIFx0XHRnZW8tXHUwMDNlZmxhZ3MgfD0gWEZTX0ZTT1BfR0VPTV9GTEFHU19aT05FRDtcbitcdGlmICh4ZnNfaGFzX3Zlcml0eShtcCkpXG4rXHRcdGdlby1cdTAwM2VmbGFncyB8PSBYRlNfRlNPUF9HRU9NX0ZMQUdTX1ZFUklUWTtcbiBcdGdlby1cdTAwM2VydHNlY3RzaXplID0gc2JwLVx1MDAzZXNiX2Jsb2Nrc2l6ZTtcbiBcdGdlby1cdTAwM2VkaXJibG9ja3NpemUgPSB4ZnNfZGlyMl9kaXJibG9ja19ieXRlcyhzYnApO1xuIFxuZGlmZiAtLWdpdCBhL2ZzL3hmcy9zY3J1Yi9jb21tb24uYyBiL2ZzL3hmcy9zY3J1Yi9jb21tb24uY1xuaW5kZXggZTUyMzNlMzFhYmI3NTAuLjE2NzNiNTIyMjQ0ZDc0IDEwMDY0NFxuLS0tIGEvZnMveGZzL3NjcnViL2NvbW1vbi5jXG4rKysgYi9mcy94ZnMvc2NydWIvY29tbW9uLmNcbkBAIC00NSw2ICs0NSw4IEBAXG4gI2luY2x1ZGUgXCJzY3J1Yi9oZWFsdGguaFwiXG4gI2luY2x1ZGUgXCJzY3J1Yi90ZW1wZmlsZS5oXCJcbiBcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9mc3Zlcml0eS5oXHUwMDNlXG4rXG4gLyogQ29tbW9uIGNvZGUgZm9yIHRoZSBtZXRhZGF0YSBzY3J1YmJlcnMuICovXG4gXG4gLypcbkBAIC0xNzU0LDMgKzE3NTYsNTQgQEAgeGNoa19pbm9kZV9jb3VudF9ibG9ja3MoXG4gXHRyZXR1cm4geGZzX2JtYXBfY291bnRfYmxvY2tzKHNjLVx1MDAzZXRwLCBzYy1cdTAwM2VpcCwgd2hpY2hmb3JrLCBuZXh0ZW50cyxcbiBcdFx0XHRjb3VudCk7XG4gfVxuK1xuKy8qXG4rICogSWYgdGhpcyBpbm9kZSBoYXMgU19WRVJJVFkgc2V0IG9uIGl0LCByZWFkIHRoZSB2ZXJpdHkgaW5mby4gSWYgdGhlIHJlYWRpbmdcbisgKiBmYWlscyB3aXRoIGFueXRoaW5nIG90aGVyIHRoYW4gRU5PTUVNLCB0aGUgZmlsZSBpcyBjb3JydXB0LCB3aGljaCB3ZSBjYW5cbisgKiBkZXRlY3QgbGF0ZXIgd2l0aCBmc3Zlcml0eV9hY3RpdmUuXG4rICpcbisgKiBDYWxsZXJzIG11c3QgaG9sZCB0aGUgSU9MT0NLIGFuZCBtdXN0IG5vdCBob2xkIHRoZSBJTE9DSyBvZiBzYy1cdTAwM2VpcCBiZWNhdXNlXG4rICogYWN0aXZhdGlvbiByZWFkcyBpbm9kZSBkYXRhLlxuKyAqL1xuK2ludFxuK3hjaGtfaW5vZGVfc2V0dXBfdmVyaXR5KFxuK1x0c3RydWN0IHhmc19zY3J1Ylx0KnNjKVxuK3tcbitcdGludFx0XHRcdGVycm9yO1xuK1xuK1x0aWYgKCFmc3Zlcml0eV9hY3RpdmUoVkZTX0koc2MtXHUwMDNlaXApKSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRlcnJvciA9IGZzdmVyaXR5X2Vuc3VyZV92ZXJpdHlfaW5mbyhWRlNfSShzYy1cdTAwM2VpcCkpO1xuK1x0c3dpdGNoIChlcnJvcikge1xuK1x0Y2FzZSAwOlxuK1x0XHQvKiBmc3Zlcml0eSBpcyBhY3RpdmUgKi9cbitcdFx0YnJlYWs7XG4rXHRjYXNlIC1FTk9EQVRBOlxuK1x0Y2FzZSAtRU1TR1NJWkU6XG4rXHRjYXNlIC1FSU5WQUw6XG4rXHRjYXNlIC1FRlNDT1JSVVBURUQ6XG4rXHRjYXNlIC1FRkJJRzpcbitcdFx0LypcbitcdFx0ICogVGhlIG5vbnplcm8gZXJybm8gY29kZXMgYWJvdmUgYXJlIHRoZSBlcnJvciBjb2RlcyB0aGF0IGNhblxuK1x0XHQgKiBiZSByZXR1cm5lZCBmcm9tIGZzdmVyaXR5IG9uIG1ldGFkYXRhIHZhbGlkYXRpb24gZXJyb3JzLlxuK1x0XHQgKi9cbitcdFx0cmV0dXJuIDA7XG4rXHRkZWZhdWx0OlxuK1x0XHQvKiBydW50aW1lIGVycm9ycyAqL1xuK1x0XHRyZXR1cm4gZXJyb3I7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rLypcbisgKiBJcyB0aGlzIGEgdmVyaXR5IGZpbGUgdGhhdCBmYWlsZWQgdG8gYWN0aXZhdGU/ICBDYWxsZXJzIG11c3QgaGF2ZSB0cmllZCB0b1xuKyAqIGFjdGl2YXRlIGZzdmVyaXR5IHZpYSB4Y2hrX2lub2RlX3NldHVwX3Zlcml0eS5cbisgKi9cbitib29sXG4reGNoa19pbm9kZV92ZXJpdHlfYnJva2VuKFxuK1x0c3RydWN0IHhmc19pbm9kZVx0KmlwKVxuK3tcbitcdHJldHVybiBmc3Zlcml0eV9hY3RpdmUoVkZTX0koaXApKSBcdTAwMjZcdTAwMjYgIWZzdmVyaXR5X2dldF9pbmZvKFZGU19JKGlwKSk7XG4rfVxuZGlmZiAtLWdpdCBhL2ZzL3hmcy9zY3J1Yi9jb21tb24uaCBiL2ZzL3hmcy9zY3J1Yi9jb21tb24uaFxuaW5kZXggOWQ2MjdmZDUwNjg3ZTQuLjNkZTJiNjAwOWE5OTQxIDEwMDY0NFxuLS0tIGEvZnMveGZzL3NjcnViL2NvbW1vbi5oXG4rKysgYi9mcy94ZnMvc2NydWIvY29tbW9uLmhcbkBAIC0yNjgsNiArMjY4LDggQEAgaW50IHhjaGtfaW5vZGVfaXNfYWxsb2NhdGVkKHN0cnVjdCB4ZnNfc2NydWIgKnNjLCB4ZnNfYWdpbm9fdCBhZ2lubyxcbiBcdFx0Ym9vbCAqaW51c2UpO1xuIGludCB4Y2hrX2lub2RlX2NvdW50X2Jsb2NrcyhzdHJ1Y3QgeGZzX3NjcnViICpzYywgaW50IHdoaWNoZm9yayxcbiBcdFx0eGZzX2V4dG51bV90ICpuZXh0ZW50cywgeGZzX2ZpbGJsa3NfdCAqY291bnQpO1xuK2ludCB4Y2hrX2lub2RlX3NldHVwX3Zlcml0eShzdHJ1Y3QgeGZzX3NjcnViICpzYyk7XG4rYm9vbCB4Y2hrX2lub2RlX3Zlcml0eV9icm9rZW4oc3RydWN0IHhmc19pbm9kZSAqaXApO1xuIFxuIGJvb2wgeGNoa19pbm9kZV9pc19kaXJ0cmVlX3Jvb3QoY29uc3Qgc3RydWN0IHhmc19pbm9kZSAqaXApO1xuIGJvb2wgeGNoa19pbm9kZV9pc19zYl9yb290ZWQoY29uc3Qgc3RydWN0IHhmc19pbm9kZSAqaXApO1xuZGlmZiAtLWdpdCBhL2ZzL3hmcy9zY3J1Yi9pbm9kZS5jIGIvZnMveGZzL3NjcnViL2lub2RlLmNcbmluZGV4IDY1YjEzZTMxMTkxNjgxLi5kMWNkZDZiNDQ1ZDAxNyAxMDA2NDRcbi0tLSBhL2ZzL3hmcy9zY3J1Yi9pbm9kZS5jXG4rKysgYi9mcy94ZnMvc2NydWIvaW5vZGUuY1xuQEAgLTM2LDYgKzM2LDEwIEBAIHhjaGtfcHJlcGFyZV9pc2NydWIoXG4gXG4gXHR4Y2hrX2lsb2NrKHNjLCBYRlNfSU9MT0NLX0VYQ0wpO1xuIFxuK1x0ZXJyb3IgPSB4Y2hrX2lub2RlX3NldHVwX3Zlcml0eShzYyk7XG4rXHRpZiAoZXJyb3IpXG4rXHRcdHJldHVybiBlcnJvcjtcbitcbiBcdGVycm9yID0geGNoa190cmFuc19hbGxvYyhzYywgMCk7XG4gXHRpZiAoZXJyb3IpXG4gXHRcdHJldHVybiBlcnJvcjtcbkBAIC04MzMsNiArODM3LDkgQEAgeGNoa19pbm9kZShcbiBcdGlmIChTX0lTUkVHKFZGU19JKHNjLVx1MDAzZWlwKS1cdTAwM2VpX21vZGUpKVxuIFx0XHR4Y2hrX2lub2RlX2NoZWNrX3JlZmxpbmtfaWZsYWcoc2MsIElfSU5PKHNjLVx1MDAzZWlwKSk7XG4gXG4rXHRpZiAoeGNoa19pbm9kZV92ZXJpdHlfYnJva2VuKHNjLVx1MDAzZWlwKSlcbitcdFx0eGNoa19pbm9fc2V0X2NvcnJ1cHQoc2MsIHNjLVx1MDAzZXNtLVx1MDAzZXNtX2lubyk7XG4rXG4gXHR4Y2hrX2lub2RlX2NoZWNrX3VubGlua2VkKHNjKTtcbiBcbiBcdHhjaGtfaW5vZGVfeHJlZihzYywgSV9JTk8oc2MtXHUwMDNlaXApLCBcdTAwMjZkaSk7XG5kaWZmIC0tZ2l0IGEvZnMveGZzL3NjcnViL2lub2RlX3JlcGFpci5jIGIvZnMveGZzL3NjcnViL2lub2RlX3JlcGFpci5jXG5pbmRleCA0OTNkY2Y1Y2M2YzE1OS4uOTBmODYxYmI0ZWY4NDggMTAwNjQ0XG4tLS0gYS9mcy94ZnMvc2NydWIvaW5vZGVfcmVwYWlyLmNcbisrKyBiL2ZzL3hmcy9zY3J1Yi9pbm9kZV9yZXBhaXIuY1xuQEAgLTU3Myw2ICs1NzMsOCBAQCB4cmVwX2Rpbm9kZV9mbGFncyhcbiBcdFx0ZGlwLVx1MDAzZWRpX25yZXh0NjRfcGFkID0gMDtcbiBcdGVsc2UgaWYgKGRpcC1cdTAwM2VkaV92ZXJzaW9uIFx1MDAzZT0gMylcbiBcdFx0ZGlwLVx1MDAzZWRpX3YzX3BhZCA9IDA7XG4rXHRpZiAoIXhmc19oYXNfdmVyaXR5KG1wKSB8fCAhU19JU1JFRyhtb2RlKSlcbitcdFx0ZmxhZ3MyIFx1MDAyNj0gflhGU19ESUZMQUcyX1ZFUklUWTtcbiBcbiBcdGlmIChmbGFnczIgXHUwMDI2IFhGU19ESUZMQUcyX01FVEFEQVRBKSB7XG4gXHRcdHhmc19mYWlsYWRkcl90XHRmYTtcbkBAIC0xNjE3LDYgKzE2MTksMTAgQEAgeHJlcF9kaW5vZGVfY29yZShcbiBcdGlmIChpZ2V0X2Vycm9yKVxuIFx0XHRyZXR1cm4gaWdldF9lcnJvcjtcbiBcbitcdGVycm9yID0geGNoa19pbm9kZV9zZXR1cF92ZXJpdHkoc2MpO1xuK1x0aWYgKGVycm9yKVxuK1x0XHRyZXR1cm4gZXJyb3I7XG4rXG4gXHRlcnJvciA9IHhjaGtfdHJhbnNfYWxsb2Moc2MsIDApO1xuIFx0aWYgKGVycm9yKVxuIFx0XHRyZXR1cm4gZXJyb3I7XG5AQCAtMjAzNSw2ICsyMDQxLDI3IEBAIHhyZXBfaW5vZGVfdW5saW5rZWQoXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rLypcbisgKiBJZiB0aGlzIGZpbGUgaXMgYSBmc3Zlcml0eSBmaWxlLCB4Y2hrX3ByZXBhcmVfaXNjcnViIG9yIHhyZXBfZGlub2RlX2NvcmVcbisgKiBzaG91bGQgaGF2ZSBhY3RpdmF0ZWQgaXQuICBJZiBpdCdzIHN0aWxsIG5vdCBhY3RpdmUsIHRoZW4gdGhlcmUncyBzb21ldGhpbmdcbisgKiB3cm9uZyB3aXRoIHRoZSB2ZXJpdHkgZGVzY3JpcHRvciBhbmQgd2Ugc2hvdWxkIHR1cm4gaXQgb2ZmLlxuKyAqL1xuK1NUQVRJQyBpbnRcbit4cmVwX2lub2RlX3Zlcml0eShcbitcdHN0cnVjdCB4ZnNfc2NydWJcdCpzYylcbit7XG4rXHRzdHJ1Y3QgaW5vZGVcdFx0Kmlub2RlID0gVkZTX0koc2MtXHUwMDNlaXApO1xuK1xuK1x0aWYgKHhjaGtfaW5vZGVfdmVyaXR5X2Jyb2tlbihzYy1cdTAwM2VpcCkpIHtcbitcdFx0c2MtXHUwMDNlaXAtXHUwMDNlaV9kaWZsYWdzMiBcdTAwMjY9IH5YRlNfRElGTEFHMl9WRVJJVFk7XG4rXHRcdGlub2RlLVx1MDAzZWlfZmxhZ3MgXHUwMDI2PSB+U19WRVJJVFk7XG4rXG4rXHRcdHhmc190cmFuc19sb2dfaW5vZGUoc2MtXHUwMDNldHAsIHNjLVx1MDAzZWlwLCBYRlNfSUxPR19DT1JFKTtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbiAvKiBSZXBhaXIgYW4gaW5vZGUncyBmaWVsZHMuICovXG4gaW50XG4geHJlcF9pbm9kZShcbkBAIC0yMDg0LDYgKzIxMTEsMTUgQEAgeHJlcF9pbm9kZShcbiBcdFx0XHRyZXR1cm4gZXJyb3I7XG4gXHR9XG4gXG4rXHQvKlxuK1x0ICogRGlzYWJsZSBmc3Zlcml0eSBpZiBpdCBjYW5ub3QgYmUgYWN0aXZhdGVkLiAgQWN0aXZhdGlvbiBmYWlsdXJlXG4rXHQgKiBwcm9oaWJpdHMgdGhlIGZpbGUgZnJvbSBiZWluZyBvcGVuZWQsIHNvIHRoZXJlIGNhbm5vdCBiZSBhbm90aGVyXG4rXHQgKiBwcm9ncmFtIHdpdGggYW4gb3BlbiBmZCB0byB3aGF0IGl0IHRoaW5rcyBpcyBhIHZlcml0eSBmaWxlLlxuK1x0ICovXG4rXHRlcnJvciA9IHhyZXBfaW5vZGVfdmVyaXR5KHNjKTtcbitcdGlmIChlcnJvcilcbitcdFx0cmV0dXJuIGVycm9yO1xuK1xuIFx0LyogUmVjb25uZWN0IGluY29yZSB1bmxpbmtlZCBsaXN0ICovXG4gXHRlcnJvciA9IHhyZXBfaW5vZGVfdW5saW5rZWQoc2MpO1xuIFx0aWYgKGVycm9yKVxuZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfYW9wcy5jIGIvZnMveGZzL3hmc19hb3BzLmNcbmluZGV4IDUxMjkzYjZmMzMxZjBiLi5iMDUzN2M2N2U5NjBlMSAxMDA2NDRcbi0tLSBhL2ZzL3hmcy94ZnNfYW9wcy5jXG4rKysgYi9mcy94ZnMveGZzX2FvcHMuY1xuQEAgLTIyLDcgKzIyLDkgQEBcbiAjaW5jbHVkZSBcInhmc19pY2FjaGUuaFwiXG4gI2luY2x1ZGUgXCJ4ZnNfem9uZV9hbGxvYy5oXCJcbiAjaW5jbHVkZSBcInhmc19ydGdyb3VwLmhcIlxuKyNpbmNsdWRlIFwieGZzX2ZzdmVyaXR5LmhcIlxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Jpby1pbnRlZ3JpdHkuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZzdmVyaXR5LmhcdTAwM2VcbiBcbiBzdHJ1Y3QgeGZzX3dyaXRlcGFnZV9jdHgge1xuIFx0c3RydWN0IGlvbWFwX3dyaXRlcGFnZV9jdHggY3R4O1xuQEAgLTE4MSw2ICsxODMsMjMgQEAgeGZzX2VuZF9pb2VuZF93cml0ZShcbiBcdG1lbWFsbG9jX25vZnNfcmVzdG9yZShub2ZzX2ZsYWcpO1xuIH1cbiBcbisvKlxuKyAqIElPIHJlYWQgY29tcGxldGlvbi5cbisgKi9cbitzdGF0aWMgdm9pZFxuK3hmc19lbmRfaW9lbmRfcmVhZChcbitcdHN0cnVjdCBpb21hcF9pb2VuZFx0KmlvZW5kKVxuK3tcbitcdHN0cnVjdCB4ZnNfaW5vZGVcdCppcCA9IFhGU19JKGlvZW5kLVx1MDAzZWlvX2lub2RlKTtcbitcbitcdGlmICghaW9lbmQtXHUwMDNlaW9fYmlvLmJpX3N0YXR1cyBcdTAwMjZcdTAwMjZcbitcdFx0XHR4ZnNfZnN2ZXJpdHlfaXNfZmlsZV9kYXRhKGlwLCBpb2VuZC1cdTAwM2Vpb19vZmZzZXQpKVxuK1x0XHRmc3Zlcml0eV92ZXJpZnlfYmlvKGlvZW5kLVx1MDAzZWlvX3ZpLFxuK1x0XHRcdFx0ICAgIFx1MDAyNmlvZW5kLVx1MDAzZWlvX2Jpbyk7XG4rXHRpb21hcF9maW5pc2hfaW9lbmRzKGlvZW5kLFxuK1x0XHRibGtfc3RhdHVzX3RvX2Vycm5vKGlvZW5kLVx1MDAzZWlvX2Jpby5iaV9zdGF0dXMpKTtcbit9XG4rXG4gLypcbiAgKiBGaW5pc2ggYWxsIHBlbmRpbmcgSU8gY29tcGxldGlvbnMgdGhhdCByZXF1aXJlIHRyYW5zYWN0aW9uYWwgbW9kaWZpY2F0aW9ucy5cbiAgKlxuQEAgLTIxNSw4ICsyMzQsNyBAQCB4ZnNfZW5kX2lvKFxuIFx0XHRsaXN0X2RlbF9pbml0KFx1MDAyNmlvZW5kLVx1MDAzZWlvX2xpc3QpO1xuIFx0XHRpb21hcF9pb2VuZF90cnlfbWVyZ2UoaW9lbmQsIFx1MDAyNnRtcCk7XG4gXHRcdGlmIChiaW9fb3AoXHUwMDI2aW9lbmQtXHUwMDNlaW9fYmlvKSA9PSBSRVFfT1BfUkVBRClcbi1cdFx0XHRpb21hcF9maW5pc2hfaW9lbmRzKGlvZW5kLFxuLVx0XHRcdFx0YmxrX3N0YXR1c190b19lcnJubyhpb2VuZC1cdTAwM2Vpb19iaW8uYmlfc3RhdHVzKSk7XG4rXHRcdFx0eGZzX2VuZF9pb2VuZF9yZWFkKGlvZW5kKTtcbiBcdFx0ZWxzZVxuIFx0XHRcdHhmc19lbmRfaW9lbmRfd3JpdGUoaW9lbmQpO1xuIFx0XHRjb25kX3Jlc2NoZWQoKTtcbkBAIC0yNDIsOSArMjYwLDE0IEBAIHhmc19lbmRfYmlvKFxuIFx0fVxuIFxuIFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2aXAtXHUwMDNlaV9pb2VuZF9sb2NrLCBmbGFncyk7XG4tXHRpZiAobGlzdF9lbXB0eShcdTAwMjZpcC1cdTAwM2VpX2lvZW5kX2xpc3QpKVxuLVx0XHRXQVJOX09OX09OQ0UoIXF1ZXVlX3dvcmsobXAtXHUwMDNlbV91bndyaXR0ZW5fd29ya3F1ZXVlLFxuK1x0aWYgKGxpc3RfZW1wdHkoXHUwMDI2aXAtXHUwMDNlaV9pb2VuZF9saXN0KSkge1xuK1x0XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfRlNfVkVSSVRZKSBcdTAwMjZcdTAwMjYgaW9lbmQtXHUwMDNlaW9fdmkgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICBpb2VuZC1cdTAwM2Vpb19vZmZzZXQgXHUwMDNjIHhmc19mc3Zlcml0eV9tZXRhZGF0YV9vZmZzZXQoaXApKVxuK1x0XHRcdGZzdmVyaXR5X2VucXVldWVfdmVyaWZ5X3dvcmsoXHUwMDI2aXAtXHUwMDNlaV9pb2VuZF93b3JrKTtcbitcdFx0ZWxzZVxuK1x0XHRcdFdBUk5fT05fT05DRSghcXVldWVfd29yayhtcC1cdTAwM2VtX3Vud3JpdHRlbl93b3JrcXVldWUsXG4gXHRcdFx0XHRcdCBcdTAwMjZpcC1cdTAwM2VpX2lvZW5kX3dvcmspKTtcbitcdH1cbiBcdGxpc3RfYWRkX3RhaWwoXHUwMDI2aW9lbmQtXHUwMDNlaW9fbGlzdCwgXHUwMDI2aXAtXHUwMDNlaV9pb2VuZF9saXN0KTtcbiBcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2aXAtXHUwMDNlaV9pb2VuZF9sb2NrLCBmbGFncyk7XG4gfVxuQEAgLTM1MCwxMiArMzczLDE2IEBAIHhmc19tYXBfYmxvY2tzKFxuIFx0aW50XHRcdFx0cmV0cmllcyA9IDA7XG4gXHRpbnRcdFx0XHRlcnJvciA9IDA7XG4gXHR1bnNpZ25lZCBpbnRcdFx0KnNlcTtcbitcdHVuc2lnbmVkIGludFx0XHRpb21hcF9mbGFncyA9IDA7XG4gXG4gXHRpZiAoeGZzX2lzX3NodXRkb3duKG1wKSlcbiBcdFx0cmV0dXJuIC1FSU87XG4gXG4gXHRYRlNfRVJST1JUQUdfREVMQVkobXAsIFhGU19FUlJUQUdfV0JfREVMQVlfTVMpO1xuIFxuK1x0aWYgKHhmc19pZmxhZ3NfdGVzdChpcCwgWEZTX1ZFUklUWV9DT05TVFJVQ1RJT04pKVxuK1x0XHRpb21hcF9mbGFncyB8PSBJT01BUF9GX0ZTVkVSSVRZO1xuK1xuIFx0LypcbiBcdCAqIENPVyBmb3JrIGJsb2NrcyBjYW4gb3ZlcmxhcCBkYXRhIGZvcmsgYmxvY2tzIGV2ZW4gaWYgdGhlIGJsb2Nrc1xuIFx0ICogYXJlbid0IHNoYXJlZC4gIENPVyBJL08gYWx3YXlzIHRha2VzIHByZWNlZGVudCwgc28gd2UgbXVzdCBhbHdheXNcbkBAIC00NDMsNyArNDcwLDggQEAgeGZzX21hcF9ibG9ja3MoXG4gXHQgICAgaXNudWxsc3RhcnRibG9jayhpbWFwLmJyX3N0YXJ0YmxvY2spKVxuIFx0XHRnb3RvIGFsbG9jYXRlX2Jsb2NrcztcbiBcbi1cdHhmc19ibWJ0X3RvX2lvbWFwKGlwLCBcdTAwMjZ3cGMtXHUwMDNlaW9tYXAsIFx1MDAyNmltYXAsIDAsIDAsIFhGU19XUEMod3BjKS1cdTAwM2VkYXRhX3NlcSk7XG4rXHR4ZnNfYm1idF90b19pb21hcChpcCwgXHUwMDI2d3BjLVx1MDAzZWlvbWFwLCBcdTAwMjZpbWFwLCAwLCBpb21hcF9mbGFncyxcbitcdFx0XHQgIFhGU19XUEMod3BjKS1cdTAwM2VkYXRhX3NlcSk7XG4gXHR0cmFjZV94ZnNfbWFwX2Jsb2Nrc19mb3VuZChpcCwgb2Zmc2V0LCBjb3VudCwgd2hpY2hmb3JrLCBcdTAwMjZpbWFwKTtcbiBcdHJldHVybiAwO1xuIGFsbG9jYXRlX2Jsb2NrczpcbkBAIC01OTAsMTIgKzYxOCwxNiBAQCB4ZnNfem9uZWRfbWFwX2Jsb2NrcyhcbiBcdHhmc19maWxibGtzX3RcdFx0Y291bnRfZnNiO1xuIFx0c3RydWN0IHhmc19ibWJ0X2lyZWNcdGltYXAsIGRlbDtcbiBcdHN0cnVjdCB4ZnNfaWV4dF9jdXJzb3JcdGljdXI7XG4rXHR1MTZcdFx0XHRpb21hcF9mbGFncyA9IDA7XG4gXG4gXHRpZiAoeGZzX2lzX3NodXRkb3duKG1wKSlcbiBcdFx0cmV0dXJuIC1FSU87XG4gXG4gXHRYRlNfRVJST1JUQUdfREVMQVkobXAsIFhGU19FUlJUQUdfV0JfREVMQVlfTVMpO1xuIFxuK1x0aWYgKHhmc19pZmxhZ3NfdGVzdChpcCwgWEZTX1ZFUklUWV9DT05TVFJVQ1RJT04pKVxuK1x0XHRpb21hcF9mbGFncyB8PSBJT01BUF9GX0ZTVkVSSVRZO1xuK1xuIFx0LypcbiBcdCAqIEFsbCBkaXJ0eSBkYXRhIG11c3QgYmUgY292ZXJlZCBieSBkZWxhbGxvYyBleHRlbnRzLiAgQnV0IHRydW5jYXRlIGNhblxuIFx0ICogcmVtb3ZlIGRlbGFsbG9jIGV4dGVudHMgdW5kZXJuZWF0aCB1cyBvciByZWR1Y2UgdGhlaXIgc2l6ZS5cbkBAIC02MTksNyArNjUxLDcgQEAgeGZzX3pvbmVkX21hcF9ibG9ja3MoXG4gXHRcdGltYXAuYnJfc3RhcnRibG9jayA9IEhPTEVTVEFSVEJMT0NLO1xuIFx0XHRpbWFwLmJyX3N0YXRlID0gWEZTX0VYVF9OT1JNO1xuIFx0XHR4ZnNfaXVubG9jayhpcCwgWEZTX0lMT0NLX0VYQ0wpO1xuLVx0XHR4ZnNfYm1idF90b19pb21hcChpcCwgXHUwMDI2d3BjLVx1MDAzZWlvbWFwLCBcdTAwMjZpbWFwLCAwLCAwLCAwKTtcbitcdFx0eGZzX2JtYnRfdG9faW9tYXAoaXAsIFx1MDAyNndwYy1cdTAwM2Vpb21hcCwgXHUwMDI2aW1hcCwgMCwgaW9tYXBfZmxhZ3MsIDApO1xuIFx0XHRyZXR1cm4gMDtcbiBcdH1cbiBcdGVuZF9mc2IgPSBtaW4oZW5kX2ZzYiwgaW1hcC5icl9zdGFydG9mZiArIGltYXAuYnJfYmxvY2tjb3VudCk7XG5AQCAtNjMyLDcgKzY2NCw3IEBAIHhmc196b25lZF9tYXBfYmxvY2tzKFxuIFx0eGZzX2l1bmxvY2soaXAsIFhGU19JTE9DS19FWENMKTtcbiBcbiBcdHdwYy1cdTAwM2Vpb21hcC50eXBlID0gSU9NQVBfTUFQUEVEO1xuLVx0d3BjLVx1MDAzZWlvbWFwLmZsYWdzID0gSU9NQVBfRl9ESVJUWTtcbitcdHdwYy1cdTAwM2Vpb21hcC5mbGFncyA9IGlvbWFwX2ZsYWdzIHwgSU9NQVBfRl9ESVJUWTtcbiBcdHdwYy1cdTAwM2Vpb21hcC5iZGV2ID0gbXAtXHUwMDNlbV9ydGRldl90YXJncC1cdTAwM2VidF9iZGV2O1xuIFx0d3BjLVx1MDAzZWlvbWFwLm9mZnNldCA9IG9mZnNldDtcbiBcdHdwYy1cdTAwM2Vpb21hcC5sZW5ndGggPSBYRlNfRlNCX1RPX0IobXAsIGNvdW50X2ZzYik7XG5AQCAtNjg0LDYgKzcxNiwyMiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGlvbWFwX3dyaXRlYmFja19vcHMgeGZzX3pvbmVkX3dyaXRlYmFja19vcHMgPSB7XG4gXHQud3JpdGViYWNrX3N1Ym1pdFx0PSB4ZnNfem9uZWRfd3JpdGViYWNrX3N1Ym1pdCxcbiB9O1xuIFxuK3N0YXRpYyBpbnRcbit4ZnNfaW9tYXBfd3JpdGVwYWdlcyhcbitcdHN0cnVjdCB4ZnNfaW5vZGVcdFx0KmlwLFxuK1x0c3RydWN0IGlvbWFwX3dyaXRlcGFnZV9jdHhcdCpjdHgpXG4re1xuK1x0LypcbitcdCAqIFdyaXRlYmFjayBkb2VzIG5vdCB3b3JrIGZvciBmb2xpb3MgcGFzdCBFT0YsIGxldCBpdCBrbm93IHRoYXRcbitcdCAqIEkvTyBoYXBwZW5zIGZvciBmc3Zlcml0eSBtZXRhZGF0YSBhbmQgdGhpcyByZXN0cmljdGlvbiBuZWVkXG4rXHQgKiB0byBiZSBza2lwcGVkXG4rXHQgKi9cbitcdGlmICh4ZnNfaWZsYWdzX3Rlc3QoaXAsIFhGU19WRVJJVFlfQ09OU1RSVUNUSU9OKSlcbitcdFx0Y3R4LVx1MDAzZWlvbWFwLmZsYWdzIHw9IElPTUFQX0ZfRlNWRVJJVFk7XG4rXG4rXHRyZXR1cm4gaW9tYXBfd3JpdGVwYWdlcyhjdHgpO1xuK31cbitcbiBTVEFUSUMgaW50XG4geGZzX3ZtX3dyaXRlcGFnZXMoXG4gXHRzdHJ1Y3QgYWRkcmVzc19zcGFjZVx0Km1hcHBpbmcsXG5AQCAtNzAzLDcgKzc1MSw3IEBAIHhmc192bV93cml0ZXBhZ2VzKFxuIFx0XHR9O1xuIFx0XHRpbnRcdFx0XHRcdGVycm9yO1xuIFxuLVx0XHRlcnJvciA9IGlvbWFwX3dyaXRlcGFnZXMoXHUwMDI2eGMuY3R4KTtcbitcdFx0ZXJyb3IgPSB4ZnNfaW9tYXBfd3JpdGVwYWdlcyhpcCwgXHUwMDI2eGMuY3R4KTtcbiBcdFx0aWYgKHhjLm9wZW5fem9uZSlcbiBcdFx0XHR4ZnNfb3Blbl96b25lX3B1dCh4Yy5vcGVuX3pvbmUpO1xuIFx0XHRyZXR1cm4gZXJyb3I7XG5AQCAtNzE2LDcgKzc2NCw3IEBAIHhmc192bV93cml0ZXBhZ2VzKFxuIFx0XHRcdH0sXG4gXHRcdH07XG4gXG4tXHRcdHJldHVybiBpb21hcF93cml0ZXBhZ2VzKFx1MDAyNndwYy5jdHgpO1xuK1x0XHRyZXR1cm4geGZzX2lvbWFwX3dyaXRlcGFnZXMoaXAsIFx1MDAyNndwYy5jdHgpO1xuIFx0fVxuIH1cbiBcbkBAIC03NjEsOSArODA5LDEyIEBAIHhmc19iaW9fc3VibWl0X3JlYWQoXG4gXHRzdHJ1Y3QgaW9tYXBfcmVhZF9mb2xpb19jdHhcdCpjdHgpXG4ge1xuIFx0c3RydWN0IGJpb1x0XHRcdCpiaW8gPSBjdHgtXHUwMDNlcmVhZF9jdHg7XG4rXHRzdHJ1Y3QgaW9tYXBfaW9lbmRcdFx0KmlvZW5kO1xuIFxuIFx0LyogZGVmZXIgcmVhZCBjb21wbGV0aW9ucyB0byB0aGUgaW9lbmQgd29ya3F1ZXVlICovXG4tXHRpb21hcF9pbml0X2lvZW5kKGl0ZXItXHUwMDNlaW5vZGUsIGJpbywgY3R4LVx1MDAzZXJlYWRfY3R4X2ZpbGVfb2Zmc2V0LCAwKTtcbitcdGlvZW5kID0gaW9tYXBfaW5pdF9pb2VuZChpdGVyLVx1MDAzZWlub2RlLCBiaW8sIGN0eC1cdTAwM2VyZWFkX2N0eF9maWxlX29mZnNldCxcbitcdFx0XHQwKTtcbitcdGlvZW5kLVx1MDAzZWlvX3ZpID0gY3R4LVx1MDAzZXZpO1xuIFx0aW9tYXBfYmlvX3N1Ym1pdF9yZWFkX2VuZGlvKGl0ZXIsIGN0eCwgeGZzX2VuZF9iaW8pO1xuIH1cbiBcbkBAIC03NzUsMTEgKzgyNiwxMyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGlvbWFwX3JlYWRfb3BzIHhmc19pb21hcF9yZWFkX29wcyA9IHtcbiBcbiBzdGF0aWMgaW5saW5lIGNvbnN0IHN0cnVjdCBpb21hcF9yZWFkX29wcyAqXG4geGZzX2dldF9pb21hcF9yZWFkX29wcyhcbi1cdGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlXHQqbWFwcGluZylcbitcdGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlXHQqbWFwcGluZyxcbitcdGxvZmZfdFx0XHRcdFx0cG9zaXRpb24pXG4ge1xuIFx0c3RydWN0IHhmc19pbm9kZVx0XHQqaXAgPSBYRlNfSShtYXBwaW5nLVx1MDAzZWhvc3QpO1xuIFxuLVx0aWYgKGJkZXZfaGFzX2ludGVncml0eV9jc3VtKHhmc19pbm9kZV9idWZ0YXJnKGlwKS1cdTAwM2VidF9iZGV2KSlcbitcdGlmIChiZGV2X2hhc19pbnRlZ3JpdHlfY3N1bSh4ZnNfaW5vZGVfYnVmdGFyZyhpcCktXHUwMDNlYnRfYmRldikgfHxcbitcdFx0XHR4ZnNfZnN2ZXJpdHlfaXNfZmlsZV9kYXRhKGlwLCBwb3NpdGlvbikpXG4gXHRcdHJldHVybiBcdTAwMjZ4ZnNfaW9tYXBfcmVhZF9vcHM7XG4gXHRyZXR1cm4gXHUwMDI2aW9tYXBfYmlvX3JlYWRfb3BzO1xuIH1cbkBAIC03OTEsNyArODQ0LDcgQEAgeGZzX3ZtX3JlYWRfZm9saW8oXG4ge1xuIFx0c3RydWN0IGlvbWFwX3JlYWRfZm9saW9fY3R4XHRjdHggPSB7IC5jdXJfZm9saW8gPSBmb2xpbyB9O1xuIFxuLVx0Y3R4Lm9wcyA9IHhmc19nZXRfaW9tYXBfcmVhZF9vcHMoZm9saW8tXHUwMDNlbWFwcGluZyk7XG4rXHRjdHgub3BzID0geGZzX2dldF9pb21hcF9yZWFkX29wcyhmb2xpby1cdTAwM2VtYXBwaW5nLCBmb2xpb19wb3MoZm9saW8pKTtcbiBcdGlvbWFwX3JlYWRfZm9saW8oXHUwMDI2eGZzX3JlYWRfaW9tYXBfb3BzLCBcdTAwMjZjdHgsIE5VTEwpO1xuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTgwMiw3ICs4NTUsNyBAQCB4ZnNfdm1fcmVhZGFoZWFkKFxuIHtcbiBcdHN0cnVjdCBpb21hcF9yZWFkX2ZvbGlvX2N0eFx0Y3R4ID0geyAucmFjID0gcmFjIH07XG4gXG4tXHRjdHgub3BzID0geGZzX2dldF9pb21hcF9yZWFkX29wcyhyYWMtXHUwMDNlbWFwcGluZyksXG4rXHRjdHgub3BzID0geGZzX2dldF9pb21hcF9yZWFkX29wcyhyYWMtXHUwMDNlbWFwcGluZywgcmVhZGFoZWFkX3BvcyhyYWMpKTtcbiBcdGlvbWFwX3JlYWRhaGVhZChcdTAwMjZ4ZnNfcmVhZF9pb21hcF9vcHMsIFx1MDAyNmN0eCwgTlVMTCk7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfYm1hcF91dGlsLmMgYi9mcy94ZnMveGZzX2JtYXBfdXRpbC5jXG5pbmRleCAzYjlmMjYyZjhlOTEyOC4uYjM0ZjJmMjdjYzkzYTggMTAwNjQ0XG4tLS0gYS9mcy94ZnMveGZzX2JtYXBfdXRpbC5jXG4rKysgYi9mcy94ZnMveGZzX2JtYXBfdXRpbC5jXG5AQCAtMzEsNiArMzEsNyBAQFxuICNpbmNsdWRlIFwieGZzX3J0Yml0bWFwLmhcIlxuICNpbmNsdWRlIFwieGZzX3J0Z3JvdXAuaFwiXG4gI2luY2x1ZGUgXCJ4ZnNfem9uZV9hbGxvYy5oXCJcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9mc3Zlcml0eS5oXHUwMDNlXG4gXG4gLyogS2VybmVsIG9ubHkgQk1BUCByZWxhdGVkIGRlZmluaXRpb25zIGFuZCBmdW5jdGlvbnMgKi9cbiBcbkBAIC01NTMsNiArNTU0LDEzIEBAIHhmc19jYW5fZnJlZV9lb2ZibG9ja3MoXG4gXHRpZiAobGFzdF9mc2IgXHUwMDNjPSBlbmRfZnNiKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4rXHQvKlxuK1x0ICogTm90aGluZyB0byBjbGVhbiBvbiBmc3Zlcml0eSBpbm9kZXMgYXMgdGhleSBkb24ndCB1c2UgcHJlYWxsb2MgYW5kXG4rXHQgKiB0aGVyZSBubyBkZWxhbGxvYyBhcyBvbmx5IHdyaXR0ZW4gZGF0YSBpcyBmc3Zlcml0eSBtZXRhZGF0YVxuK1x0ICovXG4rXHRpZiAoSVNfVkVSSVRZKFZGU19JKGlwKSkpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbiBcdC8qXG4gXHQgKiBDaGVjayBpZiB0aGVyZSBpcyBhbiBwb3N0LUVPRiBleHRlbnQgdG8gZnJlZS4gIElmIHRoZXJlIGFyZSBhbnlcbiBcdCAqIGRlbGFsbG9jIGJsb2NrcyBhdHRhY2hlZCB0byB0aGUgaW5vZGUgKGRhdGEgZm9yayBkZWxhbGxvY1xuZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfZmlsZS5jIGIvZnMveGZzL3hmc19maWxlLmNcbmluZGV4IDg0NWE5N2M5YjA2MzBiLi5jYmExOTRkNjc4ZmM3NyAxMDA2NDRcbi0tLSBhL2ZzL3hmcy94ZnNfZmlsZS5jXG4rKysgYi9mcy94ZnMveGZzX2ZpbGUuY1xuQEAgLTM3LDYgKzM3LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9mYWR2aXNlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tb3VudC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZmlsZWxvY2suaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZzdmVyaXR5LmhcdTAwM2VcbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHhmc19maWxlX3ZtX29wcztcbiBcbkBAIC0yNDUsNiArMjQ2LDI1IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaW9tYXBfZGlvX29wcyB4ZnNfZGlvX3JlYWRfYm91bmNlX29wcyA9IHtcbiBcdC5iaW9fc2V0XHQ9IFx1MDAyNmlvbWFwX2lvZW5kX2Jpb3NldCxcbiB9O1xuIFxuK1NUQVRJQyBzc2l6ZV90XG4reGZzX2ZpbGVfYnVmZmVyZWRfcmVhZChcbitcdHN0cnVjdCBraW9jYlx0XHQqaW9jYixcbitcdHN0cnVjdCBpb3ZfaXRlclx0XHQqdG8pXG4re1xuK1x0c3RydWN0IHhmc19pbm9kZVx0KmlwID0gWEZTX0koZmlsZV9pbm9kZShpb2NiLVx1MDAzZWtpX2ZpbHApKTtcbitcdHNzaXplX3RcdFx0XHRyZXQ7XG4rXG4rXHR0cmFjZV94ZnNfZmlsZV9idWZmZXJlZF9yZWFkKGlvY2IsIHRvKTtcbitcbitcdHJldCA9IHhmc19pbG9ja19pb2NiKGlvY2IsIFhGU19JT0xPQ0tfU0hBUkVEKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXHRyZXQgPSBnZW5lcmljX2ZpbGVfcmVhZF9pdGVyKGlvY2IsIHRvKTtcbitcdHhmc19pdW5sb2NrKGlwLCBYRlNfSU9MT0NLX1NIQVJFRCk7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbiBTVEFUSUMgc3NpemVfdFxuIHhmc19maWxlX2Rpb19yZWFkKFxuIFx0c3RydWN0IGtpb2NiXHRcdCppb2NiLFxuQEAgLTI2NSw2ICsyODUsMTYgQEAgeGZzX2ZpbGVfZGlvX3JlYWQoXG4gXHRyZXQgPSB4ZnNfaWxvY2tfaW9jYihpb2NiLCBYRlNfSU9MT0NLX1NIQVJFRCk7XG4gXHRpZiAocmV0KVxuIFx0XHRyZXR1cm4gcmV0O1xuK1x0LypcbitcdCAqIFJlLWNoZWNrIHZlcml0eSBzdGF0dXMgYWZ0ZXIgYWNxdWlyaW5nIGxvY2suIFRoaXMgcHJldmVudHMgVE9DVE9VIGluXG4rXHQgKiB4ZnNfZmlsZV9yZWFkX2l0ZXIoKSB3aGlsZSBmYWxsaW5nIGJhY2sgZnJvbSBESU8gdG8gYnVmZmVyZWQgSS9PIGFzXG4rXHQgKiBub3cgd2UgYXJlIGhvbGRpbmcgYSBsb2NrXG4rXHQgKi9cbitcdGlmIChmc3Zlcml0eV9hY3RpdmUoVkZTX0koaXApKSkge1xuK1x0XHR4ZnNfaXVubG9jayhpcCwgWEZTX0lPTE9DS19TSEFSRUQpO1xuK1x0XHRpb2NiLVx1MDAzZWtpX2ZsYWdzIFx1MDAyNj0gfklPQ0JfRElSRUNUO1xuK1x0XHRyZXR1cm4geGZzX2ZpbGVfYnVmZmVyZWRfcmVhZChpb2NiLCB0byk7XG4rXHR9XG4gXHRpZiAobWFwcGluZ19zdGFibGVfd3JpdGVzKGlvY2ItXHUwMDNla2lfZmlscC1cdTAwM2VmX21hcHBpbmcpKSB7XG4gXHRcdGRpb19vcHMgPSBcdTAwMjZ4ZnNfZGlvX3JlYWRfYm91bmNlX29wcztcbiBcdFx0ZGlvX2ZsYWdzIHw9IElPTUFQX0RJT19CT1VOQ0U7XG5AQCAtMjgxLDcgKzMxMSw4IEBAIHhmc19maWxlX2RheF9yZWFkKFxuIFx0c3RydWN0IGtpb2NiXHRcdCppb2NiLFxuIFx0c3RydWN0IGlvdl9pdGVyXHRcdCp0bylcbiB7XG4tXHRzdHJ1Y3QgeGZzX2lub2RlXHQqaXAgPSBYRlNfSShpb2NiLVx1MDAzZWtpX2ZpbHAtXHUwMDNlZl9tYXBwaW5nLVx1MDAzZWhvc3QpO1xuK1x0c3RydWN0IGlub2RlXHRcdCppbm9kZSA9IGlvY2ItXHUwMDNla2lfZmlscC1cdTAwM2VmX21hcHBpbmctXHUwMDNlaG9zdDtcbitcdHN0cnVjdCB4ZnNfaW5vZGVcdCppcCA9IFhGU19JKGlub2RlKTtcbiBcdHNzaXplX3RcdFx0XHRyZXQgPSAwO1xuIFxuIFx0dHJhY2VfeGZzX2ZpbGVfZGF4X3JlYWQoaW9jYiwgdG8pO1xuQEAgLTI5OSwyNSArMzMwLDYgQEAgeGZzX2ZpbGVfZGF4X3JlYWQoXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbi1TVEFUSUMgc3NpemVfdFxuLXhmc19maWxlX2J1ZmZlcmVkX3JlYWQoXG4tXHRzdHJ1Y3Qga2lvY2JcdFx0KmlvY2IsXG4tXHRzdHJ1Y3QgaW92X2l0ZXJcdFx0KnRvKVxuLXtcbi1cdHN0cnVjdCB4ZnNfaW5vZGVcdCppcCA9IFhGU19JKGZpbGVfaW5vZGUoaW9jYi1cdTAwM2VraV9maWxwKSk7XG4tXHRzc2l6ZV90XHRcdFx0cmV0O1xuLVxuLVx0dHJhY2VfeGZzX2ZpbGVfYnVmZmVyZWRfcmVhZChpb2NiLCB0byk7XG4tXG4tXHRyZXQgPSB4ZnNfaWxvY2tfaW9jYihpb2NiLCBYRlNfSU9MT0NLX1NIQVJFRCk7XG4tXHRpZiAocmV0KVxuLVx0XHRyZXR1cm4gcmV0O1xuLVx0cmV0ID0gZ2VuZXJpY19maWxlX3JlYWRfaXRlcihpb2NiLCB0byk7XG4tXHR4ZnNfaXVubG9jayhpcCwgWEZTX0lPTE9DS19TSEFSRUQpO1xuLVxuLVx0cmV0dXJuIHJldDtcbi19XG4tXG4gU1RBVElDIHNzaXplX3RcbiB4ZnNfZmlsZV9yZWFkX2l0ZXIoXG4gXHRzdHJ1Y3Qga2lvY2JcdFx0KmlvY2IsXG5AQCAtMzMyLDYgKzM0NCwxNCBAQCB4ZnNfZmlsZV9yZWFkX2l0ZXIoXG4gXHRpZiAoeGZzX2lzX3NodXRkb3duKG1wKSlcbiBcdFx0cmV0dXJuIC1FSU87XG4gXG4rXHQvKlxuK1x0ICogSW4gY2FzZSBmcy12ZXJpdHkgaXMgZW5hYmxlZCwgd2UgYWxzbyBmYWxsYmFjayB0byB0aGUgYnVmZmVyZWQgcmVhZFxuK1x0ICogZnJvbSB0aGUgZGlyZWN0IHJlYWQgcGF0aC4gVGhlcmVmb3JlLCBJT0NCX0RJUkVDVCBpcyBzZXQgYW5kIG5lZWQgdG9cbitcdCAqIGJlIGNsZWFyZWQgKHNlZSBnZW5lcmljX2ZpbGVfcmVhZF9pdGVyKCkpXG4rXHQgKi9cbitcdGlmIChmc3Zlcml0eV9hY3RpdmUoaW5vZGUpKVxuK1x0XHRpb2NiLVx1MDAzZWtpX2ZsYWdzIFx1MDAyNj0gfklPQ0JfRElSRUNUO1xuK1xuIFx0aWYgKElTX0RBWChpbm9kZSkpXG4gXHRcdHJldCA9IHhmc19maWxlX2RheF9yZWFkKGlvY2IsIHRvKTtcbiBcdGVsc2UgaWYgKGlvY2ItXHUwMDNla2lfZmxhZ3MgXHUwMDI2IElPQ0JfRElSRUNUKVxuQEAgLTE3MDAsMTEgKzE3MjAsMTggQEAgeGZzX2ZpbGVfb3BlbihcbiBcdHN0cnVjdCBpbm9kZVx0Kmlub2RlLFxuIFx0c3RydWN0IGZpbGVcdCpmaWxlKVxuIHtcbitcdGludFx0XHRlcnJvcjtcbitcbiBcdGlmICh4ZnNfaXNfc2h1dGRvd24oWEZTX00oaW5vZGUtXHUwMDNlaV9zYikpKVxuIFx0XHRyZXR1cm4gLUVJTztcbiBcdGZpbGUtXHUwMDNlZl9tb2RlIHw9IEZNT0RFX05PV0FJVCB8IEZNT0RFX0NBTl9PRElSRUNUO1xuIFx0aWYgKHhmc19nZXRfYXRvbWljX3dyaXRlX21pbihYRlNfSShpbm9kZSkpIFx1MDAzZSAwKVxuIFx0XHRmaWxlLVx1MDAzZWZfbW9kZSB8PSBGTU9ERV9DQU5fQVRPTUlDX1dSSVRFO1xuK1xuK1x0ZXJyb3IgPSBmc3Zlcml0eV9maWxlX29wZW4oaW5vZGUsIGZpbGUpO1xuK1x0aWYgKGVycm9yKVxuK1x0XHRyZXR1cm4gZXJyb3I7XG4rXG4gXHRyZXR1cm4gZ2VuZXJpY19maWxlX29wZW4oaW5vZGUsIGZpbGUpO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2ZzdmVyaXR5LmMgYi9mcy94ZnMveGZzX2ZzdmVyaXR5LmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uOTczMjgxMWExNDQ0ZTZcbi0tLSAvZGV2L251bGxcbisrKyBiL2ZzL3hmcy94ZnNfZnN2ZXJpdHkuY1xuQEAgLTAsMCArMSw0NzMgQEBcbisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xuKy8qXG4rICogQ29weXJpZ2h0IChDKSAyMDI2IFJlZCBIYXQsIEluYy5cbisgKi9cbisjaW5jbHVkZSBcInhmc19wbGF0Zm9ybS5oXCJcbisjaW5jbHVkZSBcInhmc19mb3JtYXQuaFwiXG4rI2luY2x1ZGUgXCJ4ZnNfc2hhcmVkLmhcIlxuKyNpbmNsdWRlIFwieGZzX3RyYW5zX3Jlc3YuaFwiXG4rI2luY2x1ZGUgXCJ4ZnNfbW91bnQuaFwiXG4rI2luY2x1ZGUgXCJ4ZnNfZGFfZm9ybWF0LmhcIlxuKyNpbmNsdWRlIFwieGZzX2RhX2J0cmVlLmhcIlxuKyNpbmNsdWRlIFwieGZzX2lub2RlLmhcIlxuKyNpbmNsdWRlIFwieGZzX2xvZ19mb3JtYXQuaFwiXG4rI2luY2x1ZGUgXCJ4ZnNfYm1hcF91dGlsLmhcIlxuKyNpbmNsdWRlIFwieGZzX3RyYW5zLmhcIlxuKyNpbmNsdWRlIFwieGZzX3RyYWNlLmhcIlxuKyNpbmNsdWRlIFwieGZzX3F1b3RhLmhcIlxuKyNpbmNsdWRlIFwieGZzX2ZzdmVyaXR5LmhcIlxuKyNpbmNsdWRlIFwieGZzX2lvbWFwLmhcIlxuKyNpbmNsdWRlIFwieGZzX2Vycm9yLmhcIlxuKyNpbmNsdWRlIFwieGZzX2hlYWx0aC5oXCJcbisjaW5jbHVkZSBcInhmc19ibWFwLmhcIlxuKyNpbmNsdWRlIFwieGZzX2JtYXBfdXRpbC5oXCJcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9mc3Zlcml0eS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaW9tYXAuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BhZ2VtYXAuaFx1MDAzZVxuK1xuK2xvZmZfdFxuK3hmc19mc3Zlcml0eV9tZXRhZGF0YV9vZmZzZXQoXG4rXHRjb25zdCBzdHJ1Y3QgeGZzX2lub2RlXHQqaXApXG4re1xuK1x0cmV0dXJuIHJvdW5kX3VwKGlfc2l6ZV9yZWFkKFZGU19JQyhpcCkpLCBYRlNfRlNWRVJJVFlfU1RBUlRfQUxJR04pO1xuK31cbitcbitib29sXG4reGZzX2ZzdmVyaXR5X2lzX2ZpbGVfZGF0YShcbitcdGNvbnN0IHN0cnVjdCB4ZnNfaW5vZGVcdCppcCxcbitcdGxvZmZfdFx0XHRcdG9mZnNldClcbit7XG4rXHRyZXR1cm4gZnN2ZXJpdHlfYWN0aXZlKFZGU19JQyhpcCkpIFx1MDAyNlx1MDAyNlxuK1x0XHRcdG9mZnNldCBcdTAwM2MgeGZzX2ZzdmVyaXR5X21ldGFkYXRhX29mZnNldChpcCk7XG4rfVxuK1xuKy8qXG4rICogUmV0cmlldmUgdGhlIHZlcml0eSBkZXNjcmlwdG9yLlxuKyAqL1xuK3N0YXRpYyBpbnRcbit4ZnNfZnN2ZXJpdHlfZ2V0X2Rlc2NyaXB0b3IoXG4rXHRzdHJ1Y3QgaW5vZGVcdFx0Kmlub2RlLFxuK1x0dm9pZFx0XHRcdCpidWYsXG4rXHRzaXplX3RcdFx0XHRidWZfc2l6ZSlcbit7XG4rXHRzdHJ1Y3QgeGZzX2lub2RlXHQqaXAgPSBYRlNfSShpbm9kZSk7XG4rXHRzdHJ1Y3QgeGZzX21vdW50XHQqbXAgPSBpcC1cdTAwM2VpX21vdW50O1xuK1x0X19iZTMyXHRcdFx0ZF9kZXNjX3NpemU7XG4rXHR1MzJcdFx0XHRkZXNjX3NpemU7XG4rXHR1NjRcdFx0XHRkZXNjX3NpemVfcG9zO1xuK1x0aW50XHRcdFx0ZXJyb3I7XG4rXHR1NjRcdFx0XHRkZXNjX3BvcztcbitcdHN0cnVjdCB4ZnNfYm1idF9pcmVjXHRyZWM7XG4rXHRpbnRcdFx0XHRpc19lbXB0eTtcbitcdHVpbnQzMl90XHRcdGJsb2Nrc2l6ZSA9IGlfYmxvY2tzaXplKFZGU19JKGlwKSk7XG4rXHR4ZnNfZmlsZW9mZl90XHRcdGxhc3RfYmxvY2tfb2Zmc2V0O1xuK1xuK1x0QVNTRVJUKGlub2RlLVx1MDAzZWlfZmxhZ3MgXHUwMDI2IFNfVkVSSVRZKTtcbitcdHhmc19pbG9jayhpcCwgWEZTX0lMT0NLX1NIQVJFRCk7XG4rXHRlcnJvciA9IHhmc19ibWFwX2xhc3RfZXh0ZW50KE5VTEwsIGlwLCBYRlNfREFUQV9GT1JLLCBcdTAwMjZyZWMsIFx1MDAyNmlzX2VtcHR5KTtcbitcdHhmc19pdW5sb2NrKGlwLCBYRlNfSUxPQ0tfU0hBUkVEKTtcbitcdGlmIChlcnJvcilcbitcdFx0cmV0dXJuIGVycm9yO1xuK1xuK1x0aWYgKGlzX2VtcHR5KVxuK1x0XHRyZXR1cm4gLUVOT0RBVEE7XG4rXG4rXHRsYXN0X2Jsb2NrX29mZnNldCA9XG4rXHRcdFhGU19GU0JfVE9fQihtcCwgcmVjLmJyX3N0YXJ0b2ZmICsgcmVjLmJyX2Jsb2NrY291bnQpO1xuK1x0aWYgKGxhc3RfYmxvY2tfb2Zmc2V0IFx1MDAzYz0geGZzX2ZzdmVyaXR5X21ldGFkYXRhX29mZnNldChpcCkpXG4rXHRcdHJldHVybiAtRU5PREFUQTtcbitcbitcdGRlc2Nfc2l6ZV9wb3MgPSBsYXN0X2Jsb2NrX29mZnNldCAtIHNpemVvZihfX2JlMzIpO1xuK1x0ZXJyb3IgPSBmc3Zlcml0eV9wYWdlY2FjaGVfcmVhZChpbm9kZSwgKGNoYXIgKilcdTAwMjZkX2Rlc2Nfc2l6ZSxcbitcdFx0XHRzaXplb2YoZF9kZXNjX3NpemUpLCBkZXNjX3NpemVfcG9zKTtcbitcdGlmIChlcnJvcilcbitcdFx0cmV0dXJuIGVycm9yO1xuK1xuK1x0ZGVzY19zaXplID0gYmUzMl90b19jcHUoZF9kZXNjX3NpemUpO1xuK1x0aWYgKFhGU19JU19DT1JSVVBUKG1wLCBkZXNjX3NpemUgXHUwMDNlIEZTX1ZFUklUWV9NQVhfREVTQ1JJUFRPUl9TSVpFKSkge1xuK1x0XHR4ZnNfaW5vZGVfbWFya19zaWNrKFhGU19JKGlub2RlKSwgWEZTX1NJQ0tfSU5PX0ZTVkVSSVRZKTtcbitcdFx0cmV0dXJuIC1FUkFOR0U7XG4rXHR9XG4rXG4rXHRpZiAoWEZTX0lTX0NPUlJVUFQobXAsIGRlc2Nfc2l6ZSBcdTAwM2UgZGVzY19zaXplX3BvcykpIHtcbitcdFx0eGZzX2lub2RlX21hcmtfc2ljayhYRlNfSShpbm9kZSksIFhGU19TSUNLX0lOT19GU1ZFUklUWSk7XG4rXHRcdHJldHVybiAtRVJBTkdFO1xuK1x0fVxuK1xuK1x0aWYgKCFidWZfc2l6ZSlcbitcdFx0cmV0dXJuIGRlc2Nfc2l6ZTtcbitcbitcdGlmIChYRlNfSVNfQ09SUlVQVChtcCwgZGVzY19zaXplIFx1MDAzZSBidWZfc2l6ZSkpIHtcbitcdFx0eGZzX2lub2RlX21hcmtfc2ljayhYRlNfSShpbm9kZSksIFhGU19TSUNLX0lOT19GU1ZFUklUWSk7XG4rXHRcdHJldHVybiAtRVJBTkdFO1xuK1x0fVxuK1xuK1x0ZGVzY19wb3MgPSByb3VuZF9kb3duKGRlc2Nfc2l6ZV9wb3MgLSBkZXNjX3NpemUsIGJsb2Nrc2l6ZSk7XG4rXHRpZiAoZGVzY19wb3MgXHUwMDNjIHhmc19mc3Zlcml0eV9tZXRhZGF0YV9vZmZzZXQoaXApKSB7XG4rXHRcdHhmc19pbm9kZV9tYXJrX3NpY2soWEZTX0koaW5vZGUpLCBYRlNfU0lDS19JTk9fRlNWRVJJVFkpO1xuK1x0XHRyZXR1cm4gLUVSQU5HRTtcbitcdH1cbitcbitcdGVycm9yID0gZnN2ZXJpdHlfcGFnZWNhY2hlX3JlYWQoaW5vZGUsIGJ1ZiwgZGVzY19zaXplLCBkZXNjX3Bvcyk7XG4rXHRpZiAoZXJyb3IpXG4rXHRcdHJldHVybiBlcnJvcjtcbitcbitcdHJldHVybiBkZXNjX3NpemU7XG4rfVxuK1xuK3N0YXRpYyBpbnRcbit4ZnNfZnN2ZXJpdHlfd3JpdGVfZGVzY3JpcHRvcihcbitcdHN0cnVjdCBmaWxlXHRcdCpmaWxlLFxuK1x0Y29uc3Qgdm9pZFx0XHQqZGVzYyxcbitcdHUzMlx0XHRcdGRlc2Nfc2l6ZSxcbitcdHU2NFx0XHRcdG1lcmtsZV90cmVlX3NpemUpXG4re1xuK1x0aW50XHRcdFx0ZXJyb3I7XG4rXHRzdHJ1Y3QgaW5vZGVcdFx0Kmlub2RlID0gZmlsZV9pbm9kZShmaWxlKTtcbitcdHN0cnVjdCB4ZnNfaW5vZGVcdCppcCA9IFhGU19JKGlub2RlKTtcbitcdHVuc2lnbmVkIGludFx0XHRibGtzaXplID0gaXAtXHUwMDNlaV9tb3VudC1cdTAwM2VtX3NiLnNiX2Jsb2Nrc2l6ZTtcbitcdHU2NFx0XHRcdHRyZWVfbGFzdF9ibG9jayA9XG4rXHRcdFx0eGZzX2ZzdmVyaXR5X21ldGFkYXRhX29mZnNldChpcCkgKyBtZXJrbGVfdHJlZV9zaXplO1xuK1x0dTY0XHRcdFx0ZGVzY19wb3MgPVxuK1x0XHRcdHJvdW5kX3VwKHRyZWVfbGFzdF9ibG9jaywgWEZTX0ZTVkVSSVRZX1NUQVJUX0FMSUdOKTtcbitcdHU2NFx0XHRcdGRlc2NfZW5kID0gZGVzY19wb3MgKyBkZXNjX3NpemU7XG4rXHRfX2JlMzJcdFx0XHRkZXNjX3NpemVfZGlzayA9IGNwdV90b19iZTMyKGRlc2Nfc2l6ZSk7XG4rXHR1NjRcdFx0XHRkZXNjX3NpemVfcG9zID1cbitcdFx0XHRyb3VuZF91cChkZXNjX2VuZCArIHNpemVvZihkZXNjX3NpemVfZGlzayksIGJsa3NpemUpIC1cbitcdFx0XHRzaXplb2YoZGVzY19zaXplX2Rpc2spO1xuK1xuK1x0ZXJyb3IgPSBpb21hcF9mc3Zlcml0eV93cml0ZShmaWxlLCBkZXNjX3NpemVfcG9zLCBzaXplb2YoX19iZTMyKSxcbitcdFx0XHQoY29uc3Qgdm9pZCAqKVx1MDAyNmRlc2Nfc2l6ZV9kaXNrLFxuK1x0XHRcdFx1MDAyNnhmc19idWZmZXJlZF93cml0ZV9pb21hcF9vcHMsXG4rXHRcdFx0XHUwMDI2eGZzX2lvbWFwX3dyaXRlX29wcyk7XG4rXHRpZiAoZXJyb3IpXG4rXHRcdHJldHVybiBlcnJvcjtcbitcbitcdHJldHVybiBpb21hcF9mc3Zlcml0eV93cml0ZShmaWxlLCBkZXNjX3BvcywgZGVzY19zaXplLCBkZXNjLFxuK1x0XHRcdFx1MDAyNnhmc19idWZmZXJlZF93cml0ZV9pb21hcF9vcHMsXG4rXHRcdFx0XHUwMDI2eGZzX2lvbWFwX3dyaXRlX29wcyk7XG4rfVxuK1xuKy8qXG4rICogVHJ5IHRvIHJlbW92ZSBhbGwgdGhlIGZzdmVyaXR5IG1ldGFkYXRhIGFmdGVyIGEgZmFpbGVkIGVuYWJsZW1lbnQuXG4rICovXG4rc3RhdGljIGludFxuK3hmc19mc3Zlcml0eV9kZWxldGVfbWV0YWRhdGEoXG4rXHRzdHJ1Y3QgeGZzX2lub2RlXHQqaXApXG4re1xuK1x0c3RydWN0IHhmc190cmFuc1x0KnRwO1xuK1x0c3RydWN0IHhmc19tb3VudFx0Km1wID0gaXAtXHUwMDNlaV9tb3VudDtcbitcdGludFx0XHRcdGVycm9yO1xuK1xuK1x0ZXJyb3IgPSB4ZnNfdHJhbnNfYWxsb2MobXAsIFx1MDAyNk1fUkVTKG1wKS1cdTAwM2V0cl9pdHJ1bmNhdGUsIDAsIDAsIDAsIFx1MDAyNnRwKTtcbitcdGlmIChlcnJvcilcbitcdFx0cmV0dXJuIGVycm9yO1xuK1xuK1x0eGZzX2lsb2NrKGlwLCBYRlNfSUxPQ0tfRVhDTCk7XG4rXHR4ZnNfdHJhbnNfaWpvaW4odHAsIGlwLCAwKTtcbitcbitcdC8qXG4rXHQgKiBXZSByZW1vdmluZyBwb3N0IEVPRiBkYXRhLCBubyBuZWVkIHRvIHVwZGF0ZSBpX3NpemUgYXMgZnN2ZXJpdHlcbitcdCAqIGRpZG4ndCBtb3ZlIGlfc2l6ZSBpbiB0aGUgZmlyc3QgcGxhY2VcbitcdCAqL1xuK1x0ZXJyb3IgPSB4ZnNfaXRydW5jYXRlX2V4dGVudHMoXHUwMDI2dHAsIGlwLCBYRlNfREFUQV9GT1JLLCBYRlNfSVNJWkUoaXApKTtcbitcdGlmIChlcnJvcilcbitcdFx0Z290byBlcnJfY2FuY2VsO1xuK1xuK1x0ZXJyb3IgPSB4ZnNfdHJhbnNfY29tbWl0KHRwKTtcbitcdGlmIChlcnJvcilcbitcdFx0Z290byBvdXRfdW5sb2NrO1xuK291dF91bmxvY2s6XG4rXHR4ZnNfaXVubG9jayhpcCwgWEZTX0lMT0NLX0VYQ0wpO1xuK1x0cmV0dXJuIGVycm9yO1xuK1xuK2Vycl9jYW5jZWw6XG4rXHR4ZnNfdHJhbnNfY2FuY2VsKHRwKTtcbitcdHhmc19pdW5sb2NrKGlwLCBYRlNfSUxPQ0tfRVhDTCk7XG4rXHRyZXR1cm4gZXJyb3I7XG4rfVxuK1xuK3N0YXRpYyBpbnRcbit4ZnNfZnN2ZXJpdHlfY2FuY2VsX3Vud3JpdHRlbihcbitcdHN0cnVjdCB4ZnNfaW5vZGVcdCppcCxcbitcdGxvZmZfdFx0XHRcdHN0YXJ0LFxuK1x0bG9mZl90XHRcdFx0ZW5kKVxuK3tcbitcdHN0cnVjdCB4ZnNfbW91bnRcdCptcCA9IGlwLVx1MDAzZWlfbW91bnQ7XG4rXHRzdHJ1Y3QgeGZzX3RyYW5zXHQqdHA7XG4rXHR4ZnNfZmlsZW9mZl90XHRcdG9mZnNldF9mc2IgPSBYRlNfQl9UT19GU0IobXAsIHN0YXJ0KTtcbitcdHhmc19maWxlb2ZmX3RcdFx0ZW5kX2ZzYiA9IFhGU19CX1RPX0ZTQihtcCwgZW5kKTtcbitcdHN0cnVjdCB4ZnNfYm1idF9pcmVjXHRpbWFwO1xuK1x0aW50XHRcdFx0bmltYXBzO1xuK1x0aW50XHRcdFx0ZXJyb3IgPSAwO1xuK1x0aW50XHRcdFx0ZG9uZTtcbitcbitcbitcdHdoaWxlIChvZmZzZXRfZnNiIFx1MDAzYyBlbmRfZnNiKSB7XG4rXHRcdG5pbWFwcyA9IDE7XG4rXG4rXHRcdGVycm9yID0geGZzX3RyYW5zX2FsbG9jKG1wLCBcdTAwMjZNX1JFUyhtcCktXHUwMDNldHJfd3JpdGUsIDAsIDAsXG4rXHRcdFx0XHQwLCBcdTAwMjZ0cCk7XG4rXHRcdGlmIChlcnJvcilcbitcdFx0XHRyZXR1cm4gZXJyb3I7XG4rXG4rXHRcdHhmc19pbG9jayhpcCwgWEZTX0lMT0NLX0VYQ0wpO1xuK1x0XHRlcnJvciA9IHhmc19ibWFwaV9yZWFkKGlwLCBvZmZzZXRfZnNiLCBlbmRfZnNiIC0gb2Zmc2V0X2ZzYixcbitcdFx0XHRcdFx1MDAyNmltYXAsIFx1MDAyNm5pbWFwcywgMCk7XG4rXHRcdGlmIChlcnJvcilcbitcdFx0XHRnb3RvIG91dF9jYW5jZWw7XG4rXG4rXHRcdGlmIChuaW1hcHMgPT0gMClcbitcdFx0XHRnb3RvIG91dF9jYW5jZWw7XG4rXG4rXHRcdGlmIChpbWFwLmJyX3N0YXRlID09IFhGU19FWFRfVU5XUklUVEVOKSB7XG4rXHRcdFx0eGZzX3RyYW5zX2lqb2luKHRwLCBpcCwgWEZTX0lMT0NLX0VYQ0wpO1xuK1xuK1x0XHRcdGVycm9yID0geGZzX2J1bm1hcGkodHAsIGlwLCBpbWFwLmJyX3N0YXJ0b2ZmLFxuK1x0XHRcdFx0XHRpbWFwLmJyX2Jsb2NrY291bnQsIDAsIDEsIFx1MDAyNmRvbmUpO1xuK1x0XHRcdGlmIChlcnJvcilcbitcdFx0XHRcdGdvdG8gb3V0X2NhbmNlbDtcbitcbitcdFx0XHRlcnJvciA9IHhmc190cmFuc19jb21taXQodHApO1xuK1x0XHRcdGlmIChlcnJvcilcbitcdFx0XHRcdHJldHVybiBlcnJvcjtcbitcdFx0fSBlbHNlIHtcbitcdFx0XHR4ZnNfdHJhbnNfY2FuY2VsKHRwKTtcbitcdFx0XHR4ZnNfaXVubG9jayhpcCwgWEZTX0lMT0NLX0VYQ0wpO1xuK1x0XHR9XG4rXG4rXHRcdG9mZnNldF9mc2IgPSBpbWFwLmJyX3N0YXJ0b2ZmICsgaW1hcC5icl9ibG9ja2NvdW50O1xuK1x0fVxuK1xuK1x0cmV0dXJuIGVycm9yO1xuK291dF9jYW5jZWw6XG4rXHR4ZnNfdHJhbnNfY2FuY2VsKHRwKTtcbitcdHhmc19pdW5sb2NrKGlwLCBYRlNfSUxPQ0tfRVhDTCk7XG4rXHRyZXR1cm4gZXJyb3I7XG4rfVxuK1xuK1xuKy8qXG4rICogUHJlcGFyZSB0byBlbmFibGUgZnN2ZXJpdHkgYnkgY2xlYXJpbmcgb2xkIG1ldGFkYXRhLlxuKyAqL1xuK3N0YXRpYyBpbnRcbit4ZnNfZnN2ZXJpdHlfYmVnaW5fZW5hYmxlKFxuK1x0c3RydWN0IGZpbGVcdFx0KmZpbHApXG4re1xuK1x0c3RydWN0IGlub2RlXHRcdCppbm9kZSA9IGZpbGVfaW5vZGUoZmlscCk7XG4rXHRzdHJ1Y3QgeGZzX2lub2RlXHQqaXAgPSBYRlNfSShpbm9kZSk7XG4rXHRpbnRcdFx0XHRlcnJvcjtcbitcbitcdHhmc19hc3NlcnRfaWxvY2tlZChpcCwgWEZTX0lPTE9DS19FWENMKTtcbitcbitcdGlmIChJU19EQVgoaW5vZGUpIHx8IGlwLVx1MDAzZWlfZGlmbGFnczIgXHUwMDI2IFhGU19ESUZMQUcyX0RBWClcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRpZiAoaW5vZGUtXHUwMDNlaV9zaXplIFx1MDAzZSBYRlNfRlNWRVJJVFlfTEFSR0VTVF9GSUxFKVxuK1x0XHRyZXR1cm4gLUVGQklHO1xuK1xuK1x0LypcbitcdCAqIEZsdXNoIHBhZ2VjYWNoZSBiZWZvcmUgYnVpbGRpbmcgTWVya2xlIHRyZWUuIElub2RlIGlzIGxvY2tlZCBhbmQgbm9cbitcdCAqIGZ1cnRoZXIgd3JpdGVzIHdpbGwgaGFwcGVuIHRvIHRoZSBmaWxlIGV4Y2VwdCBmc3Zlcml0eSBtZXRhZGF0YVxuK1x0ICovXG4rXHRlcnJvciA9IGZpbGVtYXBfd3JpdGVfYW5kX3dhaXQoaW5vZGUtXHUwMDNlaV9tYXBwaW5nKTtcbitcdGlmIChlcnJvcilcbitcdFx0cmV0dXJuIGVycm9yO1xuK1xuK1x0aWYgKHhmc19pZmxhZ3NfdGVzdF9hbmRfc2V0KGlwLCBYRlNfVkVSSVRZX0NPTlNUUlVDVElPTikpXG4rXHRcdHJldHVybiAtRUJVU1k7XG4rXG4rXHRlcnJvciA9IHhmc19xbV9kcWF0dGFjaChpcCk7XG4rXHRpZiAoZXJyb3IpXG4rXHRcdGdvdG8gb3V0X2NsZWFyO1xuK1xuK1x0ZXJyb3IgPSB4ZnNfZnN2ZXJpdHlfZGVsZXRlX21ldGFkYXRhKGlwKTtcbitcdGlmIChlcnJvcilcbitcdFx0Z290byBvdXRfY2xlYXI7XG4rXHRyZXR1cm4gZXJyb3I7XG4rb3V0X2NsZWFyOlxuK1x0eGZzX2lmbGFnc19jbGVhcihpcCwgWEZTX1ZFUklUWV9DT05TVFJVQ1RJT04pO1xuK1x0cmV0dXJuIGVycm9yO1xuK31cbitcbisvKlxuKyAqIENvbXBsZXRlIChvciBmYWlsKSB0aGUgcHJvY2VzcyBvZiBlbmFibGluZyBmc3Zlcml0eS5cbisgKi9cbitzdGF0aWMgaW50XG4reGZzX2ZzdmVyaXR5X2VuZF9lbmFibGUoXG4rXHRzdHJ1Y3QgZmlsZVx0XHQqZmlsZSxcbitcdGNvbnN0IHZvaWRcdFx0KmRlc2MsXG4rXHRzaXplX3RcdFx0XHRkZXNjX3NpemUsXG4rXHR1NjRcdFx0XHRtZXJrbGVfdHJlZV9zaXplKVxuK3tcbitcdHN0cnVjdCBpbm9kZVx0XHQqaW5vZGUgPSBmaWxlX2lub2RlKGZpbGUpO1xuK1x0c3RydWN0IHhmc19pbm9kZVx0KmlwID0gWEZTX0koaW5vZGUpO1xuK1x0c3RydWN0IHhmc19tb3VudFx0Km1wID0gaXAtXHUwMDNlaV9tb3VudDtcbitcdHN0cnVjdCB4ZnNfdHJhbnNcdCp0cDtcbitcdGludFx0XHRcdGVycm9yID0gMDtcbitcdGxvZmZfdFx0XHRcdHJhbmdlX3N0YXJ0ID0geGZzX2ZzdmVyaXR5X21ldGFkYXRhX29mZnNldChpcCk7XG4rXG4rXHR4ZnNfYXNzZXJ0X2lsb2NrZWQoaXAsIFhGU19JT0xPQ0tfRVhDTCk7XG4rXG4rXHQvKiBmcy12ZXJpdHkgZmFpbGVkLCBqdXN0IGNsZWFudXAgKi9cbitcdGlmIChkZXNjID09IE5VTEwpIHtcbitcdFx0ZXJyb3IgPSB4ZnNfZnN2ZXJpdHlfZGVsZXRlX21ldGFkYXRhKGlwKTtcbitcdFx0Z290byBvdXQ7XG4rXHR9XG4rXG4rXHRlcnJvciA9IHhmc19mc3Zlcml0eV93cml0ZV9kZXNjcmlwdG9yKGZpbGUsIGRlc2MsIGRlc2Nfc2l6ZSxcbitcdFx0XHRtZXJrbGVfdHJlZV9zaXplKTtcbitcdGlmIChlcnJvcilcbitcdFx0Z290byBvdXQ7XG4rXG4rXHQvKlxuK1x0ICogV2FpdCBmb3IgTWVya2xlIHRyZWUgZ2V0IHdyaXR0ZW4gdG8gZGlzayBiZWZvcmUgc2V0dGluZyBvbi1kaXNrIGlub2RlXG4rXHQgKiBmbGFnIGFuZCBjbGVhcmluZyBYRlNfVkVSSVRZX0NPTlNUUlVDVElPTlxuK1x0ICovXG4rXHRlcnJvciA9IGZpbGVtYXBfd3JpdGVfYW5kX3dhaXRfcmFuZ2UoaW5vZGUtXHUwMDNlaV9tYXBwaW5nLCByYW5nZV9zdGFydCxcbitcdFx0XHRMTE9OR19NQVgpO1xuK1x0aWYgKGVycm9yKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdC8qXG4rXHQgKiBSZW1vdmUgdW53cml0dGVuIGV4dGVudHMgbGVmdCBieSBDT1cgcHJlYWxsb2NhdGlvbnMgYW5kIHdyaXRlXG4rXHQgKiBwcmVhbGxvY2F0aW9uIGluIHRoZSBtZXJrbGUgdHJlZSBob2xlcyBhbmQgcGFzdCBkZXNjcmlwdG9yXG4rXHQgKi9cbitcdGVycm9yID0geGZzX2ZzdmVyaXR5X2NhbmNlbF91bndyaXR0ZW4oaXAsIHJhbmdlX3N0YXJ0LCBMTE9OR19NQVgpO1xuK1x0aWYgKGVycm9yKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdC8qXG4rXHQgKiBQcm9hY3RpdmVseSBkcm9wIGFueSBkZWxheWVkIGFsbG9jYXRpb25zIGluIENPVyBmb3JrLCB0aGUgZnN2ZXJpdHlcbitcdCAqIGZpbGVzIGFyZSByZWFkLW9ubHlcbitcdCAqL1xuK1x0aWYgKHhmc19pc19jb3dfaW5vZGUoaXApKSB7XG4rXHRcdGlmICghaXAtXHUwMDNlaV9jb3dmcClcbitcdFx0XHR4ZnNfaWZvcmtfaW5pdF9jb3coaXApO1xuK1x0XHR4ZnNfYm1hcF9wdW5jaF9kZWxhbGxvY19yYW5nZShpcCwgWEZTX0NPV19GT1JLLCAwLCBMTE9OR19NQVgsXG4rXHRcdFx0XHROVUxMKTtcbitcdH1cbitcbitcdC8qXG4rXHQgKiBTZXQgZnN2ZXJpdHkgaW5vZGUgZmxhZ1xuK1x0ICovXG4rXHRlcnJvciA9IHhmc190cmFuc19hbGxvY19pbm9kZShpcCwgXHUwMDI2TV9SRVMobXApLVx1MDAzZXRyX2ljaGFuZ2UsXG4rXHRcdFx0MCwgMCwgZmFsc2UsIFx1MDAyNnRwKTtcbitcdGlmIChlcnJvcilcbitcdFx0Z290byBvdXQ7XG4rXG4rXHQvKlxuK1x0ICogRW5zdXJlIHRoYXQgd2UndmUgcGVyc2lzdGVkIHRoZSB2ZXJpdHkgaW5mb3JtYXRpb24gYmVmb3JlIHdlIGVuYWJsZVxuK1x0ICogaXQgb24gdGhlIGlub2RlIGFuZCB0ZWxsIHRoZSBjYWxsZXIgd2UgaGF2ZSBzZWFsZWQgdGhlIGlub2RlLlxuK1x0ICovXG4rXHRpcC1cdTAwM2VpX2RpZmxhZ3MyIHw9IFhGU19ESUZMQUcyX1ZFUklUWTtcbitcbitcdHhmc190cmFuc19sb2dfaW5vZGUodHAsIGlwLCBYRlNfSUxPR19DT1JFKTtcbitcdHhmc190cmFuc19zZXRfc3luYyh0cCk7XG4rXG4rXHRlcnJvciA9IHhmc190cmFuc19jb21taXQodHApO1xuK1x0eGZzX2l1bmxvY2soaXAsIFhGU19JTE9DS19FWENMKTtcbitcbitcdGlmICghZXJyb3IpXG4rXHRcdGlub2RlLVx1MDAzZWlfZmxhZ3MgfD0gU19WRVJJVFk7XG4rXG4rb3V0OlxuK1x0aWYgKGVycm9yKSB7XG4rXHRcdGludFx0ZXJyb3IyO1xuK1xuK1x0XHRlcnJvcjIgPSB4ZnNfZnN2ZXJpdHlfZGVsZXRlX21ldGFkYXRhKGlwKTtcbitcdFx0aWYgKGVycm9yMilcbitcdFx0XHR4ZnNfYWxlcnQoaXAtXHUwMDNlaV9tb3VudCxcbitcImlubyAweCVsbHggZmFpbGVkIHRvIGNsZWFuIHVwIG5ldyBmc3Zlcml0eSBtZXRhZGF0YSwgZXJyICVkXCIsXG4rXHRcdFx0XHRcdElfSU5PKGlwKSwgZXJyb3IyKTtcbitcdH1cbitcbitcdHhmc19pZmxhZ3NfY2xlYXIoaXAsIFhGU19WRVJJVFlfQ09OU1RSVUNUSU9OKTtcbitcdHJldHVybiBlcnJvcjtcbit9XG4rXG4rLypcbisgKiBSZXRyaWV2ZSBhIG1lcmtsZSB0cmVlIGJsb2NrLlxuKyAqL1xuK3N0YXRpYyBzdHJ1Y3QgcGFnZSAqXG4reGZzX2ZzdmVyaXR5X3JlYWRfbWVya2xlKFxuK1x0c3RydWN0IGlub2RlXHRcdCppbm9kZSxcbitcdHBnb2ZmX3RcdFx0XHRpbmRleClcbit7XG4rXHRpbmRleCArPSB4ZnNfZnN2ZXJpdHlfbWV0YWRhdGFfb2Zmc2V0KFhGU19JKGlub2RlKSkgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4rXG4rXHRyZXR1cm4gZ2VuZXJpY19yZWFkX21lcmtsZV90cmVlX3BhZ2UoaW5vZGUsIGluZGV4KTtcbit9XG4rXG4rLypcbisgKiBSZXRyaWV2ZSBhIG1lcmtsZSB0cmVlIGJsb2NrLlxuKyAqL1xuK3N0YXRpYyB2b2lkXG4reGZzX2ZzdmVyaXR5X3JlYWRhaGVhZF9tZXJrbGVfdHJlZShcbitcdHN0cnVjdCBpbm9kZVx0XHQqaW5vZGUsXG4rXHRwZ29mZl90XHRcdFx0aW5kZXgsXG4rXHR1bnNpZ25lZCBsb25nXHRcdG5yX3BhZ2VzKVxuK3tcbitcdGluZGV4ICs9IHhmc19mc3Zlcml0eV9tZXRhZGF0YV9vZmZzZXQoWEZTX0koaW5vZGUpKSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbitcbitcdGdlbmVyaWNfcmVhZGFoZWFkX21lcmtsZV90cmVlKGlub2RlLCBpbmRleCwgbnJfcGFnZXMpO1xuK31cbitcbisvKlxuKyAqIFdyaXRlIGEgbWVya2xlIHRyZWUgYmxvY2suXG4rICovXG4rc3RhdGljIGludFxuK3hmc19mc3Zlcml0eV93cml0ZV9tZXJrbGUoXG4rXHRzdHJ1Y3QgZmlsZVx0XHQqZmlsZSxcbitcdGNvbnN0IHZvaWRcdFx0KmJ1ZixcbitcdHU2NFx0XHRcdHBvcyxcbitcdHVuc2lnbmVkIGludFx0XHRzaXplLFxuK1x0Y29uc3QgdThcdFx0Knplcm9fZGlnZXN0LFxuK1x0dW5zaWduZWQgaW50XHRcdGRpZ2VzdF9zaXplKVxuK3tcbitcdHN0cnVjdCBpbm9kZVx0XHQqaW5vZGUgPSBmaWxlX2lub2RlKGZpbGUpO1xuK1x0c3RydWN0IHhmc19pbm9kZVx0KmlwID0gWEZTX0koaW5vZGUpO1xuK1x0bG9mZl90XHRcdFx0cG9zaXRpb24gPSBwb3MgK1xuK1x0XHR4ZnNfZnN2ZXJpdHlfbWV0YWRhdGFfb2Zmc2V0KGlwKTtcbitcbitcdGlmIChwb3NpdGlvbiArIHNpemUgXHUwMDNlIGlub2RlLVx1MDAzZWlfc2ItXHUwMDNlc19tYXhieXRlcylcbitcdFx0cmV0dXJuIC1FRkJJRztcbitcbitcdC8qXG4rXHQgKiBJZiB0aGlzIGlzIGEgYmxvY2sgZnVsbCBvZiBoYXNoZXMgb2YgemVyb2VkIGJsb2NrcywgZG9uJ3QgYm90aGVyXG4rXHQgKiBzdG9yaW5nIHRoZSBibG9jay4gV2UgY2FuIHN5bnRoZXNpemUgdGhlbSBsYXRlci5cbitcdCAqXG4rXHQgKiBIb3dldmVyLCBkbyB0aGlzIG9ubHkgaW4gY2FzZSBNZXJrbGUgdHJlZSBibG9jayA9PSBmcyBibG9jayBzaXplLlxuK1x0ICogSW9tYXAgc3ludGhlc2l6ZXMgdGhlc2UgYmxvY2tzIGJhc2VkIG9uIGhvbGVzIGluIHRoZSBtZXJrbGUgdHJlZS4gV2VcbitcdCAqIHdvbid0IGJlIGFibGUgdG8gdGVsbCBpZiBzb21ldGhpbmcgbmVlZCB0byBiZSBzeW50aGVzaXplcyBmb3IgdGhlXG4rXHQgKiByYW5nZSBpbiB0aGUgZnMgYmxvY2suIEZvciBleGFtcGxlLCBmb3IgNGsgZmlsZXN5c3RlbSBibG9ja1xuK1x0ICpcbitcdCAqXHRbIDFrIHwgemVybyBoYXNoZXMgfCB6ZXJvIGhhc2hlcyB8IDFrIF1cbitcdCAqXG4rXHQgKiBJb21hcCB3b24ndCBrbm93IGFib3V0IHRoZXNlIGVtcHR5IGJsb2Nrcy5cbitcdCAqL1xuK1x0aWYgKHNpemUgPT0gaXAtXHUwMDNlaV9tb3VudC1cdTAwM2VtX3NiLnNiX2Jsb2Nrc2l6ZSBcdTAwMjZcdTAwMjZcbitcdFx0XHQvKlxuK1x0XHRcdCAqIEZpcnN0IGRpZ2VzdCBpcyB6ZXJvX2RpZ2VzdFxuK1x0XHRcdCAqL1xuK1x0XHRcdG1lbWNtcChidWYsIHplcm9fZGlnZXN0LCBkaWdlc3Rfc2l6ZSkgPT0gMCBcdTAwMjZcdTAwMjZcbitcdFx0XHQvKlxuK1x0XHRcdCAqIEV2ZXJ5IGRpZ2VzdCBpcyBzYW1lIGFzIHByZXZpb3VzLCB0aHVzIGFsbCBhcmVcbitcdFx0XHQgKiB6ZXJvX2RpZ2VzdFxuK1x0XHRcdCAqL1xuK1x0XHRcdG1lbWNtcChidWYgKyBkaWdlc3Rfc2l6ZSwgYnVmLCBzaXplIC0gZGlnZXN0X3NpemUpID09IDApXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0cmV0dXJuIGlvbWFwX2ZzdmVyaXR5X3dyaXRlKGZpbGUsIHBvc2l0aW9uLCBzaXplLCBidWYsXG4rXHRcdFx0XHUwMDI2eGZzX2J1ZmZlcmVkX3dyaXRlX2lvbWFwX29wcyxcbitcdFx0XHRcdTAwMjZ4ZnNfaW9tYXBfd3JpdGVfb3BzKTtcbit9XG4rXG4rY29uc3Qgc3RydWN0IGZzdmVyaXR5X29wZXJhdGlvbnMgeGZzX2ZzdmVyaXR5X29wcyA9IHtcbitcdC5iZWdpbl9lbmFibGVfdmVyaXR5XHRcdD0geGZzX2ZzdmVyaXR5X2JlZ2luX2VuYWJsZSxcbitcdC5lbmRfZW5hYmxlX3Zlcml0eVx0XHQ9IHhmc19mc3Zlcml0eV9lbmRfZW5hYmxlLFxuK1x0LmdldF92ZXJpdHlfZGVzY3JpcHRvclx0XHQ9IHhmc19mc3Zlcml0eV9nZXRfZGVzY3JpcHRvcixcbitcdC5yZWFkX21lcmtsZV90cmVlX3BhZ2VcdFx0PSB4ZnNfZnN2ZXJpdHlfcmVhZF9tZXJrbGUsXG4rXHQucmVhZGFoZWFkX21lcmtsZV90cmVlXHRcdD0geGZzX2ZzdmVyaXR5X3JlYWRhaGVhZF9tZXJrbGVfdHJlZSxcbitcdC53cml0ZV9tZXJrbGVfdHJlZV9ibG9ja1x0PSB4ZnNfZnN2ZXJpdHlfd3JpdGVfbWVya2xlLFxuK307XG5kaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19mc3Zlcml0eS5oIGIvZnMveGZzL3hmc19mc3Zlcml0eS5oXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjZhOTgxZTIwYTc1YmI4XG4tLS0gL2Rldi9udWxsXG4rKysgYi9mcy94ZnMveGZzX2ZzdmVyaXR5LmhcbkBAIC0wLDAgKzEsMjggQEBcbisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xuKy8qXG4rICogQ29weXJpZ2h0IChDKSAyMDI2IFJlZCBIYXQsIEluYy5cbisgKi9cbisjaWZuZGVmIF9fWEZTX0ZTVkVSSVRZX0hfX1xuKyNkZWZpbmUgX19YRlNfRlNWRVJJVFlfSF9fXG4rXG4rI2luY2x1ZGUgXCJ4ZnNfcGxhdGZvcm0uaFwiXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvZnN2ZXJpdHkuaFx1MDAzZVxuK1xuKyNpZmRlZiBDT05GSUdfRlNfVkVSSVRZXG4rZXh0ZXJuIGNvbnN0IHN0cnVjdCBmc3Zlcml0eV9vcGVyYXRpb25zIHhmc19mc3Zlcml0eV9vcHM7XG4rbG9mZl90IHhmc19mc3Zlcml0eV9tZXRhZGF0YV9vZmZzZXQoY29uc3Qgc3RydWN0IHhmc19pbm9kZSAqaXApO1xuK2Jvb2wgeGZzX2ZzdmVyaXR5X2lzX2ZpbGVfZGF0YShjb25zdCBzdHJ1Y3QgeGZzX2lub2RlICppcCwgbG9mZl90IG9mZnNldCk7XG4rI2Vsc2VcbitzdGF0aWMgaW5saW5lIGxvZmZfdCB4ZnNfZnN2ZXJpdHlfbWV0YWRhdGFfb2Zmc2V0KGNvbnN0IHN0cnVjdCB4ZnNfaW5vZGUgKmlwKVxuK3tcbitcdFdBUk5fT05fT05DRSgxKTtcbitcdHJldHVybiBVTExPTkdfTUFYO1xuK31cbitzdGF0aWMgaW5saW5lIGJvb2wgeGZzX2ZzdmVyaXR5X2lzX2ZpbGVfZGF0YShjb25zdCBzdHJ1Y3QgeGZzX2lub2RlICppcCxcbitcdFx0XHRcdFx0ICAgIGxvZmZfdCBvZmZzZXQpXG4re1xuK1x0cmV0dXJuIGZhbHNlO1xuK31cbisjZW5kaWZcdC8qIENPTkZJR19GU19WRVJJVFkgKi9cbitcbisjZW5kaWZcdC8qIF9fWEZTX0ZTVkVSSVRZX0hfXyAqL1xuZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfaGVhbHRoLmMgYi9mcy94ZnMveGZzX2hlYWx0aC5jXG5pbmRleCAyMzliODQzZTgzZDQyYS4uYmU2Njc2MGZiMTIwZjcgMTAwNjQ0XG4tLS0gYS9mcy94ZnMveGZzX2hlYWx0aC5jXG4rKysgYi9mcy94ZnMveGZzX2hlYWx0aC5jXG5AQCAtNjI1LDYgKzYyNSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaW9jdGxfc2lja19tYXAgaW5vX21hcFtdID0ge1xuIFx0eyBYRlNfU0lDS19JTk9fRElSX1pBUFBFRCxcdFhGU19CU19TSUNLX0RJUiB9LFxuIFx0eyBYRlNfU0lDS19JTk9fU1lNTElOS19aQVBQRUQsXHRYRlNfQlNfU0lDS19TWU1MSU5LIH0sXG4gXHR7IFhGU19TSUNLX0lOT19ESVJUUkVFLFx0WEZTX0JTX1NJQ0tfRElSVFJFRSB9LFxuK1x0eyBYRlNfU0lDS19JTk9fRlNWRVJJVFksXHRYRlNfQlNfU0lDS19GU1ZFUklUWSB9LFxuIH07XG4gXG4gLyogRmlsbCBvdXQgYnVsa3N0YXQgaGVhbHRoIGluZm8uICovXG5kaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19pbm9kZS5oIGIvZnMveGZzL3hmc19pbm9kZS5oXG5pbmRleCAzNGMxMDM4ZWJmY2RlMS4uMTdjZTA4MzU5MWY0MDggMTAwNjQ0XG4tLS0gYS9mcy94ZnMveGZzX2lub2RlLmhcbisrKyBiL2ZzL3hmcy94ZnNfaW5vZGUuaFxuQEAgLTQxOSw2ICs0MTksMTIgQEAgc3RhdGljIGlubGluZSBib29sIHhmc19pbm9kZV9jYW5fc3dfYXRvbWljX3dyaXRlKGNvbnN0IHN0cnVjdCB4ZnNfaW5vZGUgKmlwKVxuICAqL1xuICNkZWZpbmUgWEZTX0lSRU1BUFBJTkdcdFx0KDFVIFx1MDAzY1x1MDAzYyAxNSlcbiBcbisvKlxuKyAqIGZzLXZlcml0eSdzIE1lcmtsZSB0cmVlIGlzIHVuZGVyIGNvbnN0cnVjdGlvbi4gVGhlIGZpbGUgaXMgcmVhZC1vbmx5LCB0aGVcbisgKiBvbmx5IHdyaXRlcyBoYXBwZW5pbmcgYXJlIGZvciB0aGUgZnN2ZXJpdHkgbWV0YWRhdGEuXG4rICovXG4rI2RlZmluZSBYRlNfVkVSSVRZX0NPTlNUUlVDVElPTlx0KDFVIFx1MDAzY1x1MDAzYyAxNilcbitcbiAvKiBBbGwgaW5vZGUgc3RhdGUgZmxhZ3MgcmVsYXRlZCB0byBpbm9kZSByZWNsYWltLiAqL1xuICNkZWZpbmUgWEZTX0FMTF9JUkVDTEFJTV9GTEFHU1x0KFhGU19JUkVDTEFJTUFCTEUgfCBcXFxuIFx0XHRcdFx0IFhGU19JUkVDTEFJTSB8IFxcXG5kaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19pb2N0bC5jIGIvZnMveGZzL3hmc19pb2N0bC5jXG5pbmRleCAxYjUzNzAxYmViZWExYS4uZmM3ODYwYThiNWFiYjEgMTAwNjQ0XG4tLS0gYS9mcy94ZnMveGZzX2lvY3RsLmNcbisrKyBiL2ZzL3hmcy94ZnNfaW9jdGwuY1xuQEAgLTQ5LDYgKzQ5LDcgQEBcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tb3VudC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZmlsZWF0dHIuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZzdmVyaXR5LmhcdTAwM2VcbiBcbiAvKiBSZXR1cm4gMCBvbiBzdWNjZXNzIG9yIHBvc2l0aXZlIGVycm9yICovXG4gaW50XG5AQCAtMTQ2Niw2ICsxNDY3LDE5IEBAIHhmc19maWxlX2lvY3RsKFxuIFx0Y2FzZSBYRlNfSU9DX1ZFUklGWV9NRURJQTpcbiBcdFx0cmV0dXJuIHhmc19pb2NfdmVyaWZ5X21lZGlhKGZpbHAsIGFyZyk7XG4gXG4rXHRjYXNlIEZTX0lPQ19FTkFCTEVfVkVSSVRZOlxuK1x0XHRpZiAoIXhmc19oYXNfdmVyaXR5KG1wKSlcbitcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHRcdHJldHVybiBmc3Zlcml0eV9pb2N0bF9lbmFibGUoZmlscCwgYXJnKTtcbitcdGNhc2UgRlNfSU9DX01FQVNVUkVfVkVSSVRZOlxuK1x0XHRpZiAoIXhmc19oYXNfdmVyaXR5KG1wKSlcbitcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHRcdHJldHVybiBmc3Zlcml0eV9pb2N0bF9tZWFzdXJlKGZpbHAsIGFyZyk7XG4rXHRjYXNlIEZTX0lPQ19SRUFEX1ZFUklUWV9NRVRBREFUQTpcbitcdFx0aWYgKCF4ZnNfaGFzX3Zlcml0eShtcCkpXG4rXHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1x0XHRyZXR1cm4gZnN2ZXJpdHlfaW9jdGxfcmVhZF9tZXRhZGF0YShmaWxwLCBhcmcpO1xuK1xuIFx0ZGVmYXVsdDpcbiBcdFx0cmV0dXJuIC1FTk9UVFk7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19pb21hcC5jIGIvZnMveGZzL3hmc19pb21hcC5jXG5pbmRleCAyMjVjM2RlODhkMDNiMS4uZmJhNTE5MDI0MTZiMDIgMTAwNjQ0XG4tLS0gYS9mcy94ZnMveGZzX2lvbWFwLmNcbisrKyBiL2ZzL3hmcy94ZnNfaW9tYXAuY1xuQEAgLTMyLDYgKzMyLDggQEBcbiAjaW5jbHVkZSBcInhmc19ydGJpdG1hcC5oXCJcbiAjaW5jbHVkZSBcInhmc19pY2FjaGUuaFwiXG4gI2luY2x1ZGUgXCJ4ZnNfem9uZV9hbGxvYy5oXCJcbisjaW5jbHVkZSBcInhmc19mc3Zlcml0eS5oXCJcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9mc3Zlcml0eS5oXHUwMDNlXG4gXG4gI2RlZmluZSBYRlNfQUxMT0NfQUxJR04obXAsIG9mZikgXFxcbiBcdCgoKG9mZikgXHUwMDNlXHUwMDNlIG1wLVx1MDAzZW1fYWxsb2NzaXplX2xvZykgXHUwMDNjXHUwMDNjIG1wLVx1MDAzZW1fYWxsb2NzaXplX2xvZylcbkBAIC0xNTg5LDcgKzE1OTEsOCBAQCB4ZnNfem9uZWRfYnVmZmVyZWRfd3JpdGVfaW9tYXBfYmVnaW4oXG4gXHRsb2ZmX3RcdFx0XHRjb3VudCxcbiBcdHVuc2lnbmVkXHRcdGZsYWdzLFxuIFx0c3RydWN0IGlvbWFwXHRcdCppb21hcCxcbi1cdHN0cnVjdCBpb21hcFx0XHQqc3JjbWFwKVxuK1x0c3RydWN0IGlvbWFwXHRcdCpzcmNtYXAsXG4rXHR1MTZcdFx0XHRpb21hcF9mbGFncylcbiB7XG4gXHRzdHJ1Y3QgaW9tYXBfaXRlclx0Kml0ZXIgPVxuIFx0XHRjb250YWluZXJfb2YoaW9tYXAsIHN0cnVjdCBpb21hcF9pdGVyLCBpb21hcCk7XG5AQCAtMTU5OSw3ICsxNjAyLDYgQEAgeGZzX3pvbmVkX2J1ZmZlcmVkX3dyaXRlX2lvbWFwX2JlZ2luKFxuIFx0c3RydWN0IHhmc19tb3VudFx0Km1wID0gaXAtXHUwMDNlaV9tb3VudDtcbiBcdHhmc19maWxlb2ZmX3RcdFx0b2Zmc2V0X2ZzYiA9IFhGU19CX1RPX0ZTQlQobXAsIG9mZnNldCk7XG4gXHR4ZnNfZmlsZW9mZl90XHRcdGVuZF9mc2IgPSB4ZnNfaW9tYXBfZW5kX2ZzYihtcCwgb2Zmc2V0LCBjb3VudCk7XG4tXHR1MTZcdFx0XHRpb21hcF9mbGFncyA9IElPTUFQX0ZfU0hBUkVEO1xuIFx0dW5zaWduZWQgaW50XHRcdGxvY2ttb2RlID0gWEZTX0lMT0NLX0VYQ0w7XG4gXHR4ZnNfZmlsYmxrc190XHRcdGNvdW50X2ZzYjtcbiBcdHhmc19leHRsZW5fdFx0XHRpbmRsZW47XG5AQCAtMTYwNyw2ICsxNjA5LDggQEAgeGZzX3pvbmVkX2J1ZmZlcmVkX3dyaXRlX2lvbWFwX2JlZ2luKFxuIFx0c3RydWN0IHhmc19pZXh0X2N1cnNvclx0aWN1cjtcbiBcdGludFx0XHRcdGVycm9yID0gMDtcbiBcbitcdGlvbWFwX2ZsYWdzID0gaW9tYXBfZmxhZ3MgfCBJT01BUF9GX1NIQVJFRDtcbitcbiBcdEFTU0VSVCgheGZzX2dldF9leHRzel9oaW50KGlwKSk7XG4gXHRBU1NFUlQoIShmbGFncyBcdTAwMjYgSU9NQVBfVU5TSEFSRSkpO1xuIFx0QVNTRVJUKGFjKTtcbkBAIC0xODAzLDkgKzE4MDcsMTIgQEAgeGZzX2J1ZmZlcmVkX3dyaXRlX2lvbWFwX2JlZ2luKFxuIFx0aWYgKHhmc19pc19zaHV0ZG93bihtcCkpXG4gXHRcdHJldHVybiAtRUlPO1xuIFxuK1x0aWYgKHhmc19pZmxhZ3NfdGVzdChpcCwgWEZTX1ZFUklUWV9DT05TVFJVQ1RJT04pKVxuK1x0XHRpb21hcF9mbGFncyB8PSBJT01BUF9GX0ZTVkVSSVRZO1xuK1xuIFx0aWYgKHhmc19pc196b25lZF9pbm9kZShpcCkpXG4gXHRcdHJldHVybiB4ZnNfem9uZWRfYnVmZmVyZWRfd3JpdGVfaW9tYXBfYmVnaW4oaW5vZGUsIG9mZnNldCxcbi1cdFx0XHRcdGNvdW50LCBmbGFncywgaW9tYXAsIHNyY21hcCk7XG4rXHRcdFx0XHRjb3VudCwgZmxhZ3MsIGlvbWFwLCBzcmNtYXAsIGlvbWFwX2ZsYWdzKTtcbiBcbiBcdC8qIHdlIGNhbid0IHVzZSBkZWxheWVkIGFsbG9jYXRpb25zIHdoZW4gdXNpbmcgZXh0ZW50IHNpemUgaGludHMgKi9cbiBcdGlmICh4ZnNfZ2V0X2V4dHN6X2hpbnQoaXApKVxuQEAgLTIxOTEsMTIgKzIxOTgsMTcgQEAgeGZzX3JlYWRfaW9tYXBfYmVnaW4oXG4gXHRib29sXHRcdFx0c2hhcmVkID0gZmFsc2U7XG4gXHR1bnNpZ25lZCBpbnRcdFx0bG9ja21vZGUgPSBYRlNfSUxPQ0tfU0hBUkVEO1xuIFx0dTY0XHRcdFx0c2VxO1xuK1x0dW5zaWduZWQgaW50XHRcdGlvbWFwX2ZsYWdzID0gMDtcbiBcbiBcdEFTU0VSVCghKGZsYWdzIFx1MDAyNiAoSU9NQVBfV1JJVEUgfCBJT01BUF9aRVJPKSkpO1xuIFxuIFx0aWYgKHhmc19pc19zaHV0ZG93bihtcCkpXG4gXHRcdHJldHVybiAtRUlPO1xuIFxuK1x0aWYgKGZzdmVyaXR5X2FjdGl2ZShpbm9kZSkgXHUwMDI2XHUwMDI2XG4rXHQgICAgKG9mZnNldCBcdTAwM2U9IHhmc19mc3Zlcml0eV9tZXRhZGF0YV9vZmZzZXQoaXApKSlcbitcdFx0aW9tYXBfZmxhZ3MgfD0gSU9NQVBfRl9GU1ZFUklUWTtcbitcbiBcdGVycm9yID0geGZzX2lsb2NrX2Zvcl9pb21hcChpcCwgZmxhZ3MsIFx1MDAyNmxvY2ttb2RlKTtcbiBcdGlmIChlcnJvcilcbiBcdFx0cmV0dXJuIGVycm9yO1xuQEAgLTIyMTAsOCArMjIyMiw5IEBAIHhmc19yZWFkX2lvbWFwX2JlZ2luKFxuIFx0aWYgKGVycm9yKVxuIFx0XHRyZXR1cm4gZXJyb3I7XG4gXHR0cmFjZV94ZnNfaW9tYXBfZm91bmQoaXAsIG9mZnNldCwgbGVuZ3RoLCBYRlNfREFUQV9GT1JLLCBcdTAwMjZpbWFwKTtcbi1cdHJldHVybiB4ZnNfYm1idF90b19pb21hcChpcCwgaW9tYXAsIFx1MDAyNmltYXAsIGZsYWdzLFxuLVx0XHRcdFx0IHNoYXJlZCA/IElPTUFQX0ZfU0hBUkVEIDogMCwgc2VxKTtcbitcdGlvbWFwX2ZsYWdzIHw9IHNoYXJlZCA/IElPTUFQX0ZfU0hBUkVEIDogMDtcbitcbitcdHJldHVybiB4ZnNfYm1idF90b19pb21hcChpcCwgaW9tYXAsIFx1MDAyNmltYXAsIGZsYWdzLCBpb21hcF9mbGFncywgc2VxKTtcbiB9XG4gXG4gY29uc3Qgc3RydWN0IGlvbWFwX29wcyB4ZnNfcmVhZF9pb21hcF9vcHMgPSB7XG5kaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19pb3BzLmMgYi9mcy94ZnMveGZzX2lvcHMuY1xuaW5kZXggNjMzOWY0OTU2ZWNiMzkuLjcwNjM3Y2RjYzI5OTcyIDEwMDY0NFxuLS0tIGEvZnMveGZzL3hmc19pb3BzLmNcbisrKyBiL2ZzL3hmcy94ZnNfaW9wcy5jXG5AQCAtMzUsNiArMzUsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NlY3VyaXR5LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pdmVyc2lvbi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZmllbWFwLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9mc3Zlcml0eS5oXHUwMDNlXG4gXG4gLypcbiAgKiBEaXJlY3RvcmllcyBoYXZlIGRpZmZlcmVudCBsb2NrIG9yZGVyIHcuci50LiBtbWFwX2xvY2sgY29tcGFyZWQgdG8gcmVndWxhclxuQEAgLTU4MCw2ICs1ODEsMTAgQEAgeGZzX3JlcG9ydF9kaW9hbGlnbihcbiBcdHN0cnVjdCBibG9ja19kZXZpY2VcdCpiZGV2ID0gdGFyZ2V0LVx1MDAzZWJ0X2JkZXY7XG4gXG4gXHRzdGF0LVx1MDAzZXJlc3VsdF9tYXNrIHw9IFNUQVRYX0RJT0FMSUdOIHwgU1RBVFhfRElPX1JFQURfQUxJR047XG4rXG4rXHRpZiAoZnN2ZXJpdHlfYWN0aXZlKFZGU19JKGlwKSkpXG4rXHRcdHJldHVybjtcbitcbiBcdHN0YXQtXHUwMDNlZGlvX21lbV9hbGlnbiA9IGJkZXZfZG1hX2FsaWdubWVudChiZGV2KSArIDE7XG4gXG4gXHQvKlxuQEAgLTEzNzAsNiArMTM3NSw4IEBAIHhmc19pbm9kZV9zaG91bGRfZW5hYmxlX2RheChcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFx0aWYgKCF4ZnNfaW5vZGVfc3VwcG9ydHNfZGF4KGlwKSlcbiBcdFx0cmV0dXJuIGZhbHNlO1xuK1x0aWYgKGlwLVx1MDAzZWlfZGlmbGFnczIgXHUwMDI2IFhGU19ESUZMQUcyX1ZFUklUWSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuIFx0aWYgKHhmc19oYXNfZGF4X2Fsd2F5cyhpcC1cdTAwM2VpX21vdW50KSlcbiBcdFx0cmV0dXJuIHRydWU7XG4gXHRpZiAoaXAtXHUwMDNlaV9kaWZsYWdzMiBcdTAwMjYgWEZTX0RJRkxBRzJfREFYKVxuQEAgLTEzOTgsMTIgKzE0MDUsMTUgQEAgeGZzX2RpZmxhZ3NfdG9faWZsYWdzKFxuIFx0XHRmbGFncyB8PSBTX05PQVRJTUU7XG4gXHRpZiAoaW5pdCBcdTAwMjZcdTAwMjYgeGZzX2lub2RlX3Nob3VsZF9lbmFibGVfZGF4KGlwKSlcbiBcdFx0ZmxhZ3MgfD0gU19EQVg7XG4rXHRpZiAoeGZsYWdzIFx1MDAyNiBGU19YRkxBR19WRVJJVFkpXG4rXHRcdGZsYWdzIHw9IFNfVkVSSVRZO1xuIFxuIFx0LypcbiBcdCAqIFNfREFYIGNhbiBvbmx5IGJlIHNldCBkdXJpbmcgaW5vZGUgaW5pdGlhbGl6YXRpb24gYW5kIGlzIG5ldmVyIHNldCBieVxuIFx0ICogdGhlIFZGUywgc28gd2UgY2Fubm90IG1hc2sgb2ZmIFNfREFYIGluIGlfZmxhZ3MuXG4gXHQgKi9cbi1cdGlub2RlLVx1MDAzZWlfZmxhZ3MgXHUwMDI2PSB+KFNfSU1NVVRBQkxFIHwgU19BUFBFTkQgfCBTX1NZTkMgfCBTX05PQVRJTUUpO1xuK1x0aW5vZGUtXHUwMDNlaV9mbGFncyBcdTAwMjY9XG4rXHRcdH4oU19JTU1VVEFCTEUgfCBTX0FQUEVORCB8IFNfU1lOQyB8IFNfTk9BVElNRSB8IFNfVkVSSVRZKTtcbiBcdGlub2RlLVx1MDAzZWlfZmxhZ3MgfD0gZmxhZ3M7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfbWVzc2FnZS5jIGIvZnMveGZzL3hmc19tZXNzYWdlLmNcbmluZGV4IDAyNDNlNTA5YTQ2ODkxLi40NGIxM2Q0NjA0OWM2MiAxMDA2NDRcbi0tLSBhL2ZzL3hmcy94ZnNfbWVzc2FnZS5jXG4rKysgYi9mcy94ZnMveGZzX21lc3NhZ2UuY1xuQEAgLTE0OSw2ICsxNDksMTAgQEAgeGZzX3dhcm5fZXhwZXJpbWVudGFsKFxuIFx0XHRcdC5vcHN0YXRlXHQ9IFhGU19PUFNUQVRFX1dBUk5FRF9MQVJQLFxuIFx0XHRcdC5uYW1lXHRcdD0gXCJsb2dnZWQgZXh0ZW5kZWQgYXR0cmlidXRlc1wiLFxuIFx0XHR9LFxuK1x0XHRbWEZTX0VYUEVSSU1FTlRBTF9GU1ZFUklUWV0gPSB7XG4rXHRcdFx0Lm9wc3RhdGVcdD0gWEZTX09QU1RBVEVfV0FSTkVEX0ZTVkVSSVRZLFxuK1x0XHRcdC5uYW1lXHRcdD0gXCJmc3Zlcml0eVwiLFxuK1x0XHR9LFxuIFx0fTtcbiBcdEFTU0VSVChmZWF0IFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgZmVhdCBcdTAwM2MgWEZTX0VYUEVSSU1FTlRBTF9NQVgpO1xuIFx0QlVJTERfQlVHX09OKEFSUkFZX1NJWkUoZmVhdHVyZXMpICE9IFhGU19FWFBFUklNRU5UQUxfTUFYKTtcbmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX21lc3NhZ2UuaCBiL2ZzL3hmcy94ZnNfbWVzc2FnZS5oXG5pbmRleCA4MTFiODg1ZjQxYzM1YS4uMzY0ZmNjN2U0MmIwODQgMTAwNjQ0XG4tLS0gYS9mcy94ZnMveGZzX21lc3NhZ2UuaFxuKysrIGIvZnMveGZzL3hmc19tZXNzYWdlLmhcbkBAIC05Myw2ICs5Myw3IEBAIHZvaWQgeGZzX2J1Zl9hbGVydF9yYXRlbGltaXRlZChzdHJ1Y3QgeGZzX2J1ZiAqYnAsIGNvbnN0IGNoYXIgKnJsbXNnLFxuIGVudW0geGZzX2V4cGVyaW1lbnRhbF9mZWF0IHtcbiBcdFhGU19FWFBFUklNRU5UQUxfU0hSSU5LLFxuIFx0WEZTX0VYUEVSSU1FTlRBTF9MQVJQLFxuK1x0WEZTX0VYUEVSSU1FTlRBTF9GU1ZFUklUWSxcbiBcbiBcdFhGU19FWFBFUklNRU5UQUxfTUFYLFxuIH07XG5kaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19tb3VudC5oIGIvZnMveGZzL3hmc19tb3VudC5oXG5pbmRleCA2NmEwMmQxYjlhZDdhMS4uODc1YzliMGY4ZTk5MWYgMTAwNjQ0XG4tLS0gYS9mcy94ZnMveGZzX21vdW50LmhcbisrKyBiL2ZzL3hmcy94ZnNfbW91bnQuaFxuQEAgLTM4OCw2ICszODgsNyBAQCB0eXBlZGVmIHN0cnVjdCB4ZnNfbW91bnQge1xuICNkZWZpbmUgWEZTX0ZFQVRfRVhDSEFOR0VfUkFOR0VcdCgxVUxMIFx1MDAzY1x1MDAzYyAyNylcdC8qIGV4Y2hhbmdlIHJhbmdlICovXG4gI2RlZmluZSBYRlNfRkVBVF9NRVRBRElSXHQoMVVMTCBcdTAwM2NcdTAwM2MgMjgpXHQvKiBtZXRhZGF0YSBkaXJlY3RvcnkgdHJlZSAqL1xuICNkZWZpbmUgWEZTX0ZFQVRfWk9ORURcdFx0KDFVTEwgXHUwMDNjXHUwMDNjIDI5KVx0Lyogem9uZWQgUlQgZGV2aWNlICovXG4rI2RlZmluZSBYRlNfRkVBVF9WRVJJVFlcdFx0KDFVTEwgXHUwMDNjXHUwMDNjIDMwKVx0LyogZnMtdmVyaXR5ICovXG4gXG4gLyogTW91bnQgZmVhdHVyZXMgKi9cbiAjZGVmaW5lIFhGU19GRUFUX05PTElGRVRJTUVcdCgxVUxMIFx1MDAzY1x1MDAzYyA0NylcdC8qIGRpc2FibGUgbGlmZXRpbWUgaGludHMgKi9cbkBAIC00NDUsNiArNDQ2LDcgQEAgX19YRlNfSEFTX0ZFQVQoZXhjaGFuZ2VfcmFuZ2UsIEVYQ0hBTkdFX1JBTkdFKVxuIF9fWEZTX0hBU19GRUFUKG1ldGFkaXIsIE1FVEFESVIpXG4gX19YRlNfSEFTX0ZFQVQoem9uZWQsIFpPTkVEKVxuIF9fWEZTX0hBU19GRUFUKG5vbGlmZXRpbWUsIE5PTElGRVRJTUUpXG4rX19YRlNfSEFTX0ZFQVQodmVyaXR5LCBWRVJJVFkpXG4gXG4gc3RhdGljIGlubGluZSBib29sIHhmc19oYXNfcnRncm91cHMoY29uc3Qgc3RydWN0IHhmc19tb3VudCAqbXApXG4ge1xuQEAgLTU4Miw2ICs1ODQsOCBAQCBfX1hGU19IQVNfRkVBVChub3V1aWQsIE5PVVVJRClcbiAjZGVmaW5lIFhGU19PUFNUQVRFX1JFU1VNSU5HX1FVT1RBT05cdDE4XG4gLyogKFpvbmVkKSBHQyBpcyBpbiBwcm9ncmVzcyAqL1xuICNkZWZpbmUgWEZTX09QU1RBVEVfWk9ORUdDX1JVTk5JTkdcdDIwXG4rLyogS2VybmVsIGhhcyBsb2dnZWQgYSB3YXJuaW5nIGFib3V0IGZzdmVyaXR5IHN1cHBvcnQgKi9cbisjZGVmaW5lIFhGU19PUFNUQVRFX1dBUk5FRF9GU1ZFUklUWVx0MjFcbiBcbiAjZGVmaW5lIF9fWEZTX0lTX09QU1RBVEUobmFtZSwgTkFNRSkgXFxcbiBzdGF0aWMgaW5saW5lIGJvb2wgeGZzX2lzXyAjIyBuYW1lIChzdHJ1Y3QgeGZzX21vdW50ICptcCkgXFxcbmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX3N1cGVyLmMgYi9mcy94ZnMveGZzX3N1cGVyLmNcbmluZGV4IDg1MzFkNTI2ZmM0NDA5Li5hNzc3NGQyZDZiMjNmYyAxMDA2NDRcbi0tLSBhL2ZzL3hmcy94ZnNfc3VwZXIuY1xuKysrIGIvZnMveGZzL3hmc19zdXBlci5jXG5AQCAtMzAsNiArMzAsNyBAQFxuICNpbmNsdWRlIFwieGZzX2ZpbGVzdHJlYW0uaFwiXG4gI2luY2x1ZGUgXCJ4ZnNfcXVvdGEuaFwiXG4gI2luY2x1ZGUgXCJ4ZnNfc3lzZnMuaFwiXG4rI2luY2x1ZGUgXCJ4ZnNfZnN2ZXJpdHkuaFwiXG4gI2luY2x1ZGUgXCJ4ZnNfb25kaXNrLmhcIlxuICNpbmNsdWRlIFwieGZzX3JtYXBfaXRlbS5oXCJcbiAjaW5jbHVkZSBcInhmc19yZWZjb3VudF9pdGVtLmhcIlxuQEAgLTE2ODksNiArMTY5MCw5IEBAIHhmc19mc19maWxsX3N1cGVyKFxuIFx0c2ItXHUwMDNlc19xdW90YV90eXBlcyA9IFFUWVBFX01BU0tfVVNSIHwgUVRZUEVfTUFTS19HUlAgfCBRVFlQRV9NQVNLX1BSSjtcbiAjZW5kaWZcbiBcdHNiLVx1MDAzZXNfb3AgPSBcdTAwMjZ4ZnNfc3VwZXJfb3BlcmF0aW9ucztcbisjaWZkZWYgQ09ORklHX0ZTX1ZFUklUWVxuK1x0c2ItXHUwMDNlc192b3AgPSBcdTAwMjZ4ZnNfZnN2ZXJpdHlfb3BzO1xuKyNlbmRpZlxuIFxuIFx0LypcbiBcdCAqIERlbGF5IG1vdW50IHdvcmsgaWYgdGhlIGRlYnVnIGhvb2sgaXMgc2V0LiBUaGlzIGlzIGRlYnVnXG5AQCAtMTk0MSw2ICsxOTQ1LDkgQEAgeGZzX2ZzX2ZpbGxfc3VwZXIoXG4gXHRpZiAoZXJyb3IpXG4gXHRcdGdvdG8gb3V0X2ZpbGVzdHJlYW1fdW5tb3VudDtcbiBcbitcdGlmICh4ZnNfaGFzX3Zlcml0eShtcCkpXG4rXHRcdHhmc193YXJuX2V4cGVyaW1lbnRhbChtcCwgWEZTX0VYUEVSSU1FTlRBTF9GU1ZFUklUWSk7XG4rXG4gXHRyb290ID0gaWdyYWIoVkZTX0kobXAtXHUwMDNlbV9yb290aXApKTtcbiBcdGlmICghcm9vdCkge1xuIFx0XHRlcnJvciA9IC1FTk9FTlQ7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mc3Zlcml0eS5oIGIvaW5jbHVkZS9saW51eC9mc3Zlcml0eS5oXG5pbmRleCA2YzQ2N2RlZDk3NTFmYy4uZjk0MzMzMzJjMjc0YmIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2ZzdmVyaXR5LmhcbisrKyBiL2luY2x1ZGUvbGludXgvZnN2ZXJpdHkuaFxuQEAgLTEyNCw2ICsxMjQsOCBAQCBzdHJ1Y3QgZnN2ZXJpdHlfb3BlcmF0aW9ucyB7XG4gXHQgKiBAYnVmOiB0aGUgTWVya2xlIHRyZWUgYmxvY2sgdG8gd3JpdGVcbiBcdCAqIEBwb3M6IHRoZSBwb3NpdGlvbiBvZiB0aGUgYmxvY2sgaW4gdGhlIE1lcmtsZSB0cmVlIChpbiBieXRlcylcbiBcdCAqIEBzaXplOiB0aGUgTWVya2xlIHRyZWUgYmxvY2sgc2l6ZSAoaW4gYnl0ZXMpXG4rXHQgKiBAemVyb19kaWdlc3Q6IHRoZSBoYXNoIG9mIHRoZSBhbGwtemVyb2VzIGJsb2NrXG4rXHQgKiBAZGlnZXN0X3NpemU6IHNpemUgb2YgemVyb19kaWdlc3QsIGluIGJ5dGVzXG4gXHQgKlxuIFx0ICogVGhpcyBpcyBvbmx5IGNhbGxlZCBiZXR3ZWVuIC1cdTAwM2ViZWdpbl9lbmFibGVfdmVyaXR5KCkgYW5kXG4gXHQgKiAtXHUwMDNlZW5kX2VuYWJsZV92ZXJpdHkoKS5cbkBAIC0xMzEsNyArMTMzLDkgQEAgc3RydWN0IGZzdmVyaXR5X29wZXJhdGlvbnMge1xuIFx0ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIC1lcnJubyBvbiBmYWlsdXJlXG4gXHQgKi9cbiBcdGludCAoKndyaXRlX21lcmtsZV90cmVlX2Jsb2NrKShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3Qgdm9pZCAqYnVmLFxuLVx0XHRcdFx0ICAgICAgIHU2NCBwb3MsIHVuc2lnbmVkIGludCBzaXplKTtcbitcdFx0XHRcdCAgICAgICB1NjQgcG9zLCB1bnNpZ25lZCBpbnQgc2l6ZSxcbitcdFx0XHRcdCAgICAgICBjb25zdCB1OCAqemVyb19kaWdlc3QsXG4rXHRcdFx0XHQgICAgICAgdW5zaWduZWQgaW50IGRpZ2VzdF9zaXplKTtcbiB9O1xuIFxuICNpZmRlZiBDT05GSUdfRlNfVkVSSVRZXG5AQCAtMzE3LDEwICszMjEsMTQgQEAgc3RhdGljIGlubGluZSBpbnQgZnN2ZXJpdHlfZmlsZV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK2ludCBmc3Zlcml0eV9lbnN1cmVfdmVyaXR5X2luZm8oc3RydWN0IGlub2RlICppbm9kZSk7XG4rXG4gdm9pZCBmc3Zlcml0eV9jbGVhbnVwX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xuIFxuIHN0cnVjdCBwYWdlICpnZW5lcmljX3JlYWRfbWVya2xlX3RyZWVfcGFnZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IGluZGV4KTtcbiB2b2lkIGdlbmVyaWNfcmVhZGFoZWFkX21lcmtsZV90cmVlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHBnb2ZmX3QgaW5kZXgsXG4gXHRcdFx0XHQgICB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTtcbitpbnQgZnN2ZXJpdHlfcGFnZWNhY2hlX3JlYWQoc3RydWN0IGlub2RlICppbm9kZSwgdm9pZCAqYnVmLCBzaXplX3QgY291bnQsXG4rXHRcdFx0ICAgIGxvZmZfdCBwb3MpO1xuIFxuICNlbmRpZlx0LyogX0xJTlVYX0ZTVkVSSVRZX0ggKi9cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDA0OjE5OjA3LjA2NjEwMjM4WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTM3MTQwNTU5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFhGUyBmcy12ZXJpdHkgUGF0Y2ggZm9yIEZ1enppbmcqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIHNlcmllcyB0aGF0IGJyaW5ncyBmcy12ZXJpdHkgdG8gWEZTLiBJdCdzIGEgc2lnbmlmaWNhbnQgY2hhbmdlLCB0b3VjaGluZyBjb3JlIGtlcm5lbCBsb2dpYyBpbiBib3RoIFhGUyBpdHNlbGYgYW5kIHRoZSBgZnMvdmVyaXR5YCBzdWJzeXN0ZW0uIERlZmluaXRlbHkgZnV6ei13b3J0aHkuXG5cbkZpcnN0LCBsZXQncyBuYWlsIGRvd24gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB3ZSBuZWVkLiBJdCdzIGEgbm8tYnJhaW5lciB0aGF0IGBDT05GSUdfRlNfVkVSSVRZYCBpcyBlc3NlbnRpYWwuIE5hdHVyYWxseSwgYENPTkZJR19YRlNfRlNgIGlzIGFsc28gcmVxdWlyZWQgZm9yIFhGUyBzdXBwb3J0LiBEaWdnaW5nIGludG8gdGhlIGBmcy94ZnMvTWFrZWZpbGVgIGFuZCBgZnMveGZzL0tjb25maWdgLCBJIHNlZSB0aGF0IGB4ZnMtJChDT05GSUdfRlNfVkVSSVRZKSArPSB4ZnNfZnN2ZXJpdHkub2AgY29uZmlybXMgdGhhdCBgQ09ORklHX0ZTX1ZFUklUWWAgaXMgdGhlIG1haW4gZW5hYmxlci5cblxuTmV4dCwgSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBrZXkgc3ltYm9scyB0byBmb2N1cyBvbiBkdXJpbmcgZnV6emluZy4gSW4gYGZzL3hmcy94ZnNfZnN2ZXJpdHkuY2AsIHRoZSBmdW5jdGlvbnMgdGhhdCBzdGljayBvdXQgYXJlOiBgeGZzX2ZzdmVyaXR5X2dldF9kZXNjcmlwdG9yYCwgYHhmc19mc3Zlcml0eV93cml0ZV9kZXNjcmlwdG9yYCwgYHhmc19mc3Zlcml0eV9kZWxldGVfbWV0YWRhdGFgLCBgeGZzX2ZzdmVyaXR5X2NhbmNlbF91bndyaXR0ZW5gLCBgeGZzX2ZzdmVyaXR5X2JlZ2luX2VuYWJsZWAsIGB4ZnNfZnN2ZXJpdHlfZW5kX2VuYWJsZWAsIGB4ZnNfZnN2ZXJpdHlfcmVhZF9tZXJrbGVgLCBgeGZzX2ZzdmVyaXR5X3JlYWRhaGVhZF9tZXJrbGVfdHJlZWAsIGFuZCBgeGZzX2ZzdmVyaXR5X3dyaXRlX21lcmtsZWAuIFRoZW4sIHRoZXJlJ3MgYGZzdmVyaXR5X3BhZ2VjYWNoZV9yZWFkYCBpbiBgZnMvdmVyaXR5L3BhZ2VjYWNoZS5jYC4gQW5kIGZpbmFsbHksIGluIHRoZSBYRlMgc2NydWIgY29kZSDigJMgYGZzL3hmcy9zY3J1Yi9pbm9kZS5jYCwgYGZzL3hmcy9zY3J1Yi9pbm9kZV9yZXBhaXIuY2AsIGBmcy94ZnMvc2NydWIvY29tbW9uLmNgIOKAkyBJIHNlZSBgeGNoa19pbm9kZV9zZXR1cF92ZXJpdHlgLCBgeGNoa19pbm9kZV92ZXJpdHlfYnJva2VuYCwgYW5kIGB4cmVwX2lub2RlX3Zlcml0eWAuIEkgY29uZmlybWVkIHRoZSB4ZnMgb25lcyBhcmUgcmVhY2hhYmxlIHRocm91Z2ggYGZzdmVyaXR5X29wZXJhdGlvbnMgeGZzX2ZzdmVyaXR5X29wc2AuXG5cbkFscmlnaHQsIGEgZmluYWwgY2hlY2sgb24gdGhlIGNvbmZpZyBvcHRpb25zOiBgQ09ORklHX0ZTX1ZFUklUWWAsIGBDT05GSUdfWEZTX0ZTYCwgYW5kIGdpdmVuIHRoZSBpbnZvbHZlbWVudCBvZiB0aGUgc2NydWIgY29kZSwgbGV0J3MgaW5jbHVkZSBgQ09ORklHX1hGU19PTkxJTkVfU0NSVUJgIHRvIGJlIHRob3JvdWdoLlxuXG5Ob3csIGxldCdzIGdldCB0aGUgcmVzdWx0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc5NDYsIk91dHB1dFRva2VucyI6Mjg2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjI3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMDQ6MTk6MTYuNDM3NTA5NzQ0WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MDI3NzI0NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRlNfVkVSSVRZXCIsXG4gICAgXCJYRlNfRlNcIixcbiAgICBcIlhGU19PTkxJTkVfU0NSVUJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ4ZnNfZnN2ZXJpdHlfYmVnaW5fZW5hYmxlXCIsXG4gICAgXCJ4ZnNfZnN2ZXJpdHlfZW5kX2VuYWJsZVwiLFxuICAgIFwieGZzX2ZzdmVyaXR5X2dldF9kZXNjcmlwdG9yXCIsXG4gICAgXCJ4ZnNfZnN2ZXJpdHlfd3JpdGVfZGVzY3JpcHRvclwiLFxuICAgIFwieGZzX2ZzdmVyaXR5X2RlbGV0ZV9tZXRhZGF0YVwiLFxuICAgIFwieGZzX2ZzdmVyaXR5X2NhbmNlbF91bndyaXR0ZW5cIixcbiAgICBcInhmc19mc3Zlcml0eV9yZWFkX21lcmtsZVwiLFxuICAgIFwieGZzX2ZzdmVyaXR5X3JlYWRhaGVhZF9tZXJrbGVfdHJlZVwiLFxuICAgIFwieGZzX2ZzdmVyaXR5X3dyaXRlX21lcmtsZVwiLFxuICAgIFwiZnN2ZXJpdHlfcGFnZWNhY2hlX3JlYWRcIixcbiAgICBcInhjaGtfaW5vZGVfc2V0dXBfdmVyaXR5XCIsXG4gICAgXCJ4Y2hrX2lub2RlX3Zlcml0eV9icm9rZW5cIixcbiAgICBcInhyZXBfaW5vZGVfdmVyaXR5XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGlzIHBhdGNoIHNlcmllcyBpbXBsZW1lbnRzIGZzLXZlcml0eSBzdXBwb3J0IGZvciB0aGUgWEZTIGZpbGVzeXN0ZW0uIEl0IGludHJvZHVjZXMgbmV3IG1ldGFkYXRhIGhhbmRsaW5nLCBpb2N0bCBvcGVyYXRpb25zLCBhbmQgaW50ZWdyYXRpb24gd2l0aCBYRlMncyBpb21hcCBhbmQgc2NydWIgaW5mcmFzdHJ1Y3R1cmUuIFRoaXMgaXMgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGFkZGl0aW9uIHRvIGEgY29yZSBmaWxlc3lzdGVtIGFuZCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgdG8gZW5zdXJlIGRhdGEgaW50ZWdyaXR5IGFuZCBwcmV2ZW50IHZ1bG5lcmFiaWxpdGllcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJGU19WRVJJVFlcIixcbiAgICBcIlhGU19GU1wiLFxuICAgIFwiWEZTX09OTElORV9TQ1JVQlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInhmc19mc3Zlcml0eV9iZWdpbl9lbmFibGVcIixcbiAgICBcInhmc19mc3Zlcml0eV9lbmRfZW5hYmxlXCIsXG4gICAgXCJ4ZnNfZnN2ZXJpdHlfZ2V0X2Rlc2NyaXB0b3JcIixcbiAgICBcInhmc19mc3Zlcml0eV93cml0ZV9kZXNjcmlwdG9yXCIsXG4gICAgXCJ4ZnNfZnN2ZXJpdHlfZGVsZXRlX21ldGFkYXRhXCIsXG4gICAgXCJ4ZnNfZnN2ZXJpdHlfY2FuY2VsX3Vud3JpdHRlblwiLFxuICAgIFwieGZzX2ZzdmVyaXR5X3JlYWRfbWVya2xlXCIsXG4gICAgXCJ4ZnNfZnN2ZXJpdHlfcmVhZGFoZWFkX21lcmtsZV90cmVlXCIsXG4gICAgXCJ4ZnNfZnN2ZXJpdHlfd3JpdGVfbWVya2xlXCIsXG4gICAgXCJmc3Zlcml0eV9wYWdlY2FjaGVfcmVhZFwiLFxuICAgIFwieGNoa19pbm9kZV9zZXR1cF92ZXJpdHlcIixcbiAgICBcInhjaGtfaW5vZGVfdmVyaXR5X2Jyb2tlblwiLFxuICAgIFwieHJlcF9pbm9kZV92ZXJpdHlcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoaXMgcGF0Y2ggc2VyaWVzIGltcGxlbWVudHMgZnMtdmVyaXR5IHN1cHBvcnQgZm9yIHRoZSBYRlMgZmlsZXN5c3RlbS4gSXQgaW50cm9kdWNlcyBuZXcgbWV0YWRhdGEgaGFuZGxpbmcsIGlvY3RsIG9wZXJhdGlvbnMsIGFuZCBpbnRlZ3JhdGlvbiB3aXRoIFhGUydzIGlvbWFwIGFuZCBzY3J1YiBpbmZyYXN0cnVjdHVyZS4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgYWRkaXRpb24gdG8gYSBjb3JlIGZpbGVzeXN0ZW0gYW5kIHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCB0byBlbnN1cmUgZGF0YSBpbnRlZ3JpdHkgYW5kIHByZXZlbnQgdnVsbmVyYWJpbGl0aWVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflowcnk2z[1] Phase: Succeeded StartedAt: 2026-07-11 04:19:40 +0000 UTC FinishedAt: 2026-07-11 04:19:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcnk2z[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-11 04:19:40 +0000 UTC FinishedAt: 2026-07-11 04:19:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcnk2z[2] Phase: Succeeded StartedAt: 2026-07-11 04:19:40 +0000 UTC FinishedAt: 2026-07-11 08:39:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcnk2z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d96fcfe1b7f94ac742984ae7986b94a116abff1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","XFS_FS","XFS_ONLINE_SCRUB"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["xfs_fsverity_begin_enable","xfs_fsverity_end_enable","xfs_fsverity_get_descriptor","xfs_fsverity_write_descriptor","xfs_fsverity_delete_metadata","xfs_fsverity_cancel_unwritten","xfs_fsverity_read_merkle","xfs_fsverity_readahead_merkle_tree","xfs_fsverity_write_merkle","fsverity_pagecache_read","xchk_inode_setup_verity","xchk_inode_verity_broken","xrep_inode_verity"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d96fcfe1b7f94ac742984ae7986b94a116abff1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","XFS_FS","XFS_ONLINE_SCRUB"],"series_id":"12fa9d7b-406b-4d7f-ab3f-bf059d63fbdd","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-11 04:19:40 +0000 UTC FinishedAt: 2026-07-11 08:39:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"d96fcfe1b7f94ac742984ae7986b94a116abff1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","XFS_FS","XFS_ONLINE_SCRUB"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["xfs_fsverity_begin_enable","xfs_fsverity_end_enable","xfs_fsverity_get_descriptor","xfs_fsverity_write_descriptor","xfs_fsverity_delete_metadata","xfs_fsverity_cancel_unwritten","xfs_fsverity_read_merkle","xfs_fsverity_readahead_merkle_tree","xfs_fsverity_write_merkle","fsverity_pagecache_read","xchk_inode_setup_verity","xchk_inode_verity_broken","xrep_inode_verity"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"d96fcfe1b7f94ac742984ae7986b94a116abff1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","XFS_FS","XFS_ONLINE_SCRUB"],"series_id":"12fa9d7b-406b-4d7f-ab3f-bf059d63fbdd","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowcnk2z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d96fcfe1b7f94ac742984ae7986b94a116abff1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","XFS_FS","XFS_ONLINE_SCRUB"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["xfs_fsverity_begin_enable","xfs_fsverity_end_enable","xfs_fsverity_get_descriptor","xfs_fsverity_write_descriptor","xfs_fsverity_delete_metadata","xfs_fsverity_cancel_unwritten","xfs_fsverity_read_merkle","xfs_fsverity_readahead_merkle_tree","xfs_fsverity_write_merkle","fsverity_pagecache_read","xchk_inode_setup_verity","xchk_inode_verity_broken","xrep_inode_verity"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d96fcfe1b7f94ac742984ae7986b94a116abff1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","XFS_FS","XFS_ONLINE_SCRUB"],"series_id":"12fa9d7b-406b-4d7f-ab3f-bf059d63fbdd","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-11 04:19:40 +0000 UTC FinishedAt: 2026-07-11 04:19:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcnk2z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d96fcfe1b7f94ac742984ae7986b94a116abff1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","XFS_FS","XFS_ONLINE_SCRUB"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["xfs_fsverity_begin_enable","xfs_fsverity_end_enable","xfs_fsverity_get_descriptor","xfs_fsverity_write_descriptor","xfs_fsverity_delete_metadata","xfs_fsverity_cancel_unwritten","xfs_fsverity_read_merkle","xfs_fsverity_readahead_merkle_tree","xfs_fsverity_write_merkle","fsverity_pagecache_read","xchk_inode_setup_verity","xchk_inode_verity_broken","xrep_inode_verity"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d96fcfe1b7f94ac742984ae7986b94a116abff1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","XFS_FS","XFS_ONLINE_SCRUB"],"series_id":"12fa9d7b-406b-4d7f-ab3f-bf059d63fbdd","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-11 04:19:40 +0000 UTC FinishedAt: 2026-07-11 04:19:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"d96fcfe1b7f94ac742984ae7986b94a116abff1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","XFS_FS","XFS_ONLINE_SCRUB"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowcnk2z/series-workflowcnk2z-convert-artifact-2152022980/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcnk2z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d96fcfe1b7f94ac742984ae7986b94a116abff1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","XFS_FS","XFS_ONLINE_SCRUB"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["xfs_fsverity_begin_enable","xfs_fsverity_end_enable","xfs_fsverity_get_descriptor","xfs_fsverity_write_descriptor","xfs_fsverity_delete_metadata","xfs_fsverity_cancel_unwritten","xfs_fsverity_read_merkle","xfs_fsverity_readahead_merkle_tree","xfs_fsverity_write_merkle","fsverity_pagecache_read","xchk_inode_setup_verity","xchk_inode_verity_broken","xrep_inode_verity"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d96fcfe1b7f94ac742984ae7986b94a116abff1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","XFS_FS","XFS_ONLINE_SCRUB"],"series_id":"12fa9d7b-406b-4d7f-ab3f-bf059d63fbdd","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-11 04:19:50 +0000 UTC FinishedAt: 2026-07-11 04:52:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcnk2z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d96fcfe1b7f94ac742984ae7986b94a116abff1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","XFS_FS","XFS_ONLINE_SCRUB"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["xfs_fsverity_begin_enable","xfs_fsverity_end_enable","xfs_fsverity_get_descriptor","xfs_fsverity_write_descriptor","xfs_fsverity_delete_metadata","xfs_fsverity_cancel_unwritten","xfs_fsverity_read_merkle","xfs_fsverity_readahead_merkle_tree","xfs_fsverity_write_merkle","fsverity_pagecache_read","xchk_inode_setup_verity","xchk_inode_verity_broken","xrep_inode_verity"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d96fcfe1b7f94ac742984ae7986b94a116abff1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","XFS_FS","XFS_ONLINE_SCRUB"],"series_id":"12fa9d7b-406b-4d7f-ab3f-bf059d63fbdd","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-11 04:19:50 +0000 UTC FinishedAt: 2026-07-11 04:52:23 +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:*afe6ef7e-8ead-4b8c-acfa-1ebb6591aa8d,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-workflowcnk2z/series-workflowcnk2z-convert-artifact-2152022980/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": "09a4c93a-aa87-42d1-ab57-c3960b3db0bd", "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-workflowcnk2z/series-workflowcnk2z-build-action-1805354754/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcnk2z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d96fcfe1b7f94ac742984ae7986b94a116abff1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","XFS_FS","XFS_ONLINE_SCRUB"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["xfs_fsverity_begin_enable","xfs_fsverity_end_enable","xfs_fsverity_get_descriptor","xfs_fsverity_write_descriptor","xfs_fsverity_delete_metadata","xfs_fsverity_cancel_unwritten","xfs_fsverity_read_merkle","xfs_fsverity_readahead_merkle_tree","xfs_fsverity_write_merkle","fsverity_pagecache_read","xchk_inode_setup_verity","xchk_inode_verity_broken","xrep_inode_verity"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d96fcfe1b7f94ac742984ae7986b94a116abff1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","XFS_FS","XFS_ONLINE_SCRUB"],"series_id":"12fa9d7b-406b-4d7f-ab3f-bf059d63fbdd","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-11 04:19:50 +0000 UTC FinishedAt: 2026-07-11 04:52:13 +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:*afe6ef7e-8ead-4b8c-acfa-1ebb6591aa8d,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-workflowcnk2z/series-workflowcnk2z-convert-artifact-2152022980/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": "09a4c93a-aa87-42d1-ab57-c3960b3db0bd", "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-workflowcnk2z/series-workflowcnk2z-build-action-1805354754/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcnk2z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d96fcfe1b7f94ac742984ae7986b94a116abff1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","XFS_FS","XFS_ONLINE_SCRUB"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["xfs_fsverity_begin_enable","xfs_fsverity_end_enable","xfs_fsverity_get_descriptor","xfs_fsverity_write_descriptor","xfs_fsverity_delete_metadata","xfs_fsverity_cancel_unwritten","xfs_fsverity_read_merkle","xfs_fsverity_readahead_merkle_tree","xfs_fsverity_write_merkle","fsverity_pagecache_read","xchk_inode_setup_verity","xchk_inode_verity_broken","xrep_inode_verity"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d96fcfe1b7f94ac742984ae7986b94a116abff1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","XFS_FS","XFS_ONLINE_SCRUB"],"series_id":"12fa9d7b-406b-4d7f-ab3f-bf059d63fbdd","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-11 04:52:23 +0000 UTC FinishedAt: 2026-07-11 04:52:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcnk2z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d96fcfe1b7f94ac742984ae7986b94a116abff1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","XFS_FS","XFS_ONLINE_SCRUB"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["xfs_fsverity_begin_enable","xfs_fsverity_end_enable","xfs_fsverity_get_descriptor","xfs_fsverity_write_descriptor","xfs_fsverity_delete_metadata","xfs_fsverity_cancel_unwritten","xfs_fsverity_read_merkle","xfs_fsverity_readahead_merkle_tree","xfs_fsverity_write_merkle","fsverity_pagecache_read","xchk_inode_setup_verity","xchk_inode_verity_broken","xrep_inode_verity"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d96fcfe1b7f94ac742984ae7986b94a116abff1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","XFS_FS","XFS_ONLINE_SCRUB"],"series_id":"12fa9d7b-406b-4d7f-ab3f-bf059d63fbdd","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-11 04:52:23 +0000 UTC FinishedAt: 2026-07-11 04:52:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcnk2z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d96fcfe1b7f94ac742984ae7986b94a116abff1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","XFS_FS","XFS_ONLINE_SCRUB"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["xfs_fsverity_begin_enable","xfs_fsverity_end_enable","xfs_fsverity_get_descriptor","xfs_fsverity_write_descriptor","xfs_fsverity_delete_metadata","xfs_fsverity_cancel_unwritten","xfs_fsverity_read_merkle","xfs_fsverity_readahead_merkle_tree","xfs_fsverity_write_merkle","fsverity_pagecache_read","xchk_inode_setup_verity","xchk_inode_verity_broken","xrep_inode_verity"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d96fcfe1b7f94ac742984ae7986b94a116abff1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","XFS_FS","XFS_ONLINE_SCRUB"],"series_id":"12fa9d7b-406b-4d7f-ab3f-bf059d63fbdd","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-11 04:52:23 +0000 UTC FinishedAt: 2026-07-11 04:52:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcnk2z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d96fcfe1b7f94ac742984ae7986b94a116abff1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","XFS_FS","XFS_ONLINE_SCRUB"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["xfs_fsverity_begin_enable","xfs_fsverity_end_enable","xfs_fsverity_get_descriptor","xfs_fsverity_write_descriptor","xfs_fsverity_delete_metadata","xfs_fsverity_cancel_unwritten","xfs_fsverity_read_merkle","xfs_fsverity_readahead_merkle_tree","xfs_fsverity_write_merkle","fsverity_pagecache_read","xchk_inode_setup_verity","xchk_inode_verity_broken","xrep_inode_verity"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d96fcfe1b7f94ac742984ae7986b94a116abff1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","XFS_FS","XFS_ONLINE_SCRUB"],"series_id":"12fa9d7b-406b-4d7f-ab3f-bf059d63fbdd","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-11 04:52:23 +0000 UTC FinishedAt: 2026-07-11 04:52:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"d96fcfe1b7f94ac742984ae7986b94a116abff1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","XFS_FS","XFS_ONLINE_SCRUB"],"series_id":"12fa9d7b-406b-4d7f-ab3f-bf059d63fbdd","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowcnk2z/series-workflowcnk2z-convert-artifact-3366305091/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcnk2z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d96fcfe1b7f94ac742984ae7986b94a116abff1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","XFS_FS","XFS_ONLINE_SCRUB"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["xfs_fsverity_begin_enable","xfs_fsverity_end_enable","xfs_fsverity_get_descriptor","xfs_fsverity_write_descriptor","xfs_fsverity_delete_metadata","xfs_fsverity_cancel_unwritten","xfs_fsverity_read_merkle","xfs_fsverity_readahead_merkle_tree","xfs_fsverity_write_merkle","fsverity_pagecache_read","xchk_inode_setup_verity","xchk_inode_verity_broken","xrep_inode_verity"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d96fcfe1b7f94ac742984ae7986b94a116abff1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","XFS_FS","XFS_ONLINE_SCRUB"],"series_id":"12fa9d7b-406b-4d7f-ab3f-bf059d63fbdd","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-11 04:52:44 +0000 UTC FinishedAt: 2026-07-11 04:54:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcnk2z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d96fcfe1b7f94ac742984ae7986b94a116abff1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","XFS_FS","XFS_ONLINE_SCRUB"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["xfs_fsverity_begin_enable","xfs_fsverity_end_enable","xfs_fsverity_get_descriptor","xfs_fsverity_write_descriptor","xfs_fsverity_delete_metadata","xfs_fsverity_cancel_unwritten","xfs_fsverity_read_merkle","xfs_fsverity_readahead_merkle_tree","xfs_fsverity_write_merkle","fsverity_pagecache_read","xchk_inode_setup_verity","xchk_inode_verity_broken","xrep_inode_verity"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d96fcfe1b7f94ac742984ae7986b94a116abff1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","XFS_FS","XFS_ONLINE_SCRUB"],"series_id":"12fa9d7b-406b-4d7f-ab3f-bf059d63fbdd","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-11 04:52:44 +0000 UTC FinishedAt: 2026-07-11 04:54:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*09a4c93a-aa87-42d1-ab57-c3960b3db0bd,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-workflowcnk2z/series-workflowcnk2z-build-action-1805354754/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-workflowcnk2z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d96fcfe1b7f94ac742984ae7986b94a116abff1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","XFS_FS","XFS_ONLINE_SCRUB"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["xfs_fsverity_begin_enable","xfs_fsverity_end_enable","xfs_fsverity_get_descriptor","xfs_fsverity_write_descriptor","xfs_fsverity_delete_metadata","xfs_fsverity_cancel_unwritten","xfs_fsverity_read_merkle","xfs_fsverity_readahead_merkle_tree","xfs_fsverity_write_merkle","fsverity_pagecache_read","xchk_inode_setup_verity","xchk_inode_verity_broken","xrep_inode_verity"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d96fcfe1b7f94ac742984ae7986b94a116abff1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","XFS_FS","XFS_ONLINE_SCRUB"],"series_id":"12fa9d7b-406b-4d7f-ab3f-bf059d63fbdd","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-11 04:54:40 +0000 UTC FinishedAt: 2026-07-11 04:54:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcnk2z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d96fcfe1b7f94ac742984ae7986b94a116abff1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","XFS_FS","XFS_ONLINE_SCRUB"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["xfs_fsverity_begin_enable","xfs_fsverity_end_enable","xfs_fsverity_get_descriptor","xfs_fsverity_write_descriptor","xfs_fsverity_delete_metadata","xfs_fsverity_cancel_unwritten","xfs_fsverity_read_merkle","xfs_fsverity_readahead_merkle_tree","xfs_fsverity_write_merkle","fsverity_pagecache_read","xchk_inode_setup_verity","xchk_inode_verity_broken","xrep_inode_verity"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d96fcfe1b7f94ac742984ae7986b94a116abff1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","XFS_FS","XFS_ONLINE_SCRUB"],"series_id":"12fa9d7b-406b-4d7f-ab3f-bf059d63fbdd","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-11 04:54:40 +0000 UTC FinishedAt: 2026-07-11 04:54:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcnk2z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d96fcfe1b7f94ac742984ae7986b94a116abff1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","XFS_FS","XFS_ONLINE_SCRUB"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["xfs_fsverity_begin_enable","xfs_fsverity_end_enable","xfs_fsverity_get_descriptor","xfs_fsverity_write_descriptor","xfs_fsverity_delete_metadata","xfs_fsverity_cancel_unwritten","xfs_fsverity_read_merkle","xfs_fsverity_readahead_merkle_tree","xfs_fsverity_write_merkle","fsverity_pagecache_read","xchk_inode_setup_verity","xchk_inode_verity_broken","xrep_inode_verity"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d96fcfe1b7f94ac742984ae7986b94a116abff1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","XFS_FS","XFS_ONLINE_SCRUB"],"series_id":"12fa9d7b-406b-4d7f-ab3f-bf059d63fbdd","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-11 04:54:40 +0000 UTC FinishedAt: 2026-07-11 05:35:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcnk2z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d96fcfe1b7f94ac742984ae7986b94a116abff1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","XFS_FS","XFS_ONLINE_SCRUB"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["xfs_fsverity_begin_enable","xfs_fsverity_end_enable","xfs_fsverity_get_descriptor","xfs_fsverity_write_descriptor","xfs_fsverity_delete_metadata","xfs_fsverity_cancel_unwritten","xfs_fsverity_read_merkle","xfs_fsverity_readahead_merkle_tree","xfs_fsverity_write_merkle","fsverity_pagecache_read","xchk_inode_setup_verity","xchk_inode_verity_broken","xrep_inode_verity"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d96fcfe1b7f94ac742984ae7986b94a116abff1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","XFS_FS","XFS_ONLINE_SCRUB"],"series_id":"12fa9d7b-406b-4d7f-ab3f-bf059d63fbdd","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-11 04:54:40 +0000 UTC FinishedAt: 2026-07-11 05:35:27 +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:*afe6ef7e-8ead-4b8c-acfa-1ebb6591aa8d,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-workflowcnk2z/series-workflowcnk2z-convert-artifact-3366305091/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": "f104eae4-2467-483e-a20b-e2621817dfae", "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-workflowcnk2z/series-workflowcnk2z-build-action-426059767/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcnk2z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d96fcfe1b7f94ac742984ae7986b94a116abff1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","XFS_FS","XFS_ONLINE_SCRUB"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["xfs_fsverity_begin_enable","xfs_fsverity_end_enable","xfs_fsverity_get_descriptor","xfs_fsverity_write_descriptor","xfs_fsverity_delete_metadata","xfs_fsverity_cancel_unwritten","xfs_fsverity_read_merkle","xfs_fsverity_readahead_merkle_tree","xfs_fsverity_write_merkle","fsverity_pagecache_read","xchk_inode_setup_verity","xchk_inode_verity_broken","xrep_inode_verity"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d96fcfe1b7f94ac742984ae7986b94a116abff1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","XFS_FS","XFS_ONLINE_SCRUB"],"series_id":"12fa9d7b-406b-4d7f-ab3f-bf059d63fbdd","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-11 04:54:40 +0000 UTC FinishedAt: 2026-07-11 05:35:17 +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:*afe6ef7e-8ead-4b8c-acfa-1ebb6591aa8d,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-workflowcnk2z/series-workflowcnk2z-convert-artifact-3366305091/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": "f104eae4-2467-483e-a20b-e2621817dfae", "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-workflowcnk2z/series-workflowcnk2z-build-action-426059767/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcnk2z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d96fcfe1b7f94ac742984ae7986b94a116abff1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","XFS_FS","XFS_ONLINE_SCRUB"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["xfs_fsverity_begin_enable","xfs_fsverity_end_enable","xfs_fsverity_get_descriptor","xfs_fsverity_write_descriptor","xfs_fsverity_delete_metadata","xfs_fsverity_cancel_unwritten","xfs_fsverity_read_merkle","xfs_fsverity_readahead_merkle_tree","xfs_fsverity_write_merkle","fsverity_pagecache_read","xchk_inode_setup_verity","xchk_inode_verity_broken","xrep_inode_verity"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d96fcfe1b7f94ac742984ae7986b94a116abff1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","XFS_FS","XFS_ONLINE_SCRUB"],"series_id":"12fa9d7b-406b-4d7f-ab3f-bf059d63fbdd","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-11 05:35:27 +0000 UTC FinishedAt: 2026-07-11 05:35:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcnk2z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d96fcfe1b7f94ac742984ae7986b94a116abff1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","XFS_FS","XFS_ONLINE_SCRUB"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["xfs_fsverity_begin_enable","xfs_fsverity_end_enable","xfs_fsverity_get_descriptor","xfs_fsverity_write_descriptor","xfs_fsverity_delete_metadata","xfs_fsverity_cancel_unwritten","xfs_fsverity_read_merkle","xfs_fsverity_readahead_merkle_tree","xfs_fsverity_write_merkle","fsverity_pagecache_read","xchk_inode_setup_verity","xchk_inode_verity_broken","xrep_inode_verity"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d96fcfe1b7f94ac742984ae7986b94a116abff1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","XFS_FS","XFS_ONLINE_SCRUB"],"series_id":"12fa9d7b-406b-4d7f-ab3f-bf059d63fbdd","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-11 05:35:27 +0000 UTC FinishedAt: 2026-07-11 05:35:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcnk2z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d96fcfe1b7f94ac742984ae7986b94a116abff1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","XFS_FS","XFS_ONLINE_SCRUB"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["xfs_fsverity_begin_enable","xfs_fsverity_end_enable","xfs_fsverity_get_descriptor","xfs_fsverity_write_descriptor","xfs_fsverity_delete_metadata","xfs_fsverity_cancel_unwritten","xfs_fsverity_read_merkle","xfs_fsverity_readahead_merkle_tree","xfs_fsverity_write_merkle","fsverity_pagecache_read","xchk_inode_setup_verity","xchk_inode_verity_broken","xrep_inode_verity"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d96fcfe1b7f94ac742984ae7986b94a116abff1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","XFS_FS","XFS_ONLINE_SCRUB"],"series_id":"12fa9d7b-406b-4d7f-ab3f-bf059d63fbdd","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-11 05:35:27 +0000 UTC FinishedAt: 2026-07-11 05:37:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcnk2z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d96fcfe1b7f94ac742984ae7986b94a116abff1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","XFS_FS","XFS_ONLINE_SCRUB"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["xfs_fsverity_begin_enable","xfs_fsverity_end_enable","xfs_fsverity_get_descriptor","xfs_fsverity_write_descriptor","xfs_fsverity_delete_metadata","xfs_fsverity_cancel_unwritten","xfs_fsverity_read_merkle","xfs_fsverity_readahead_merkle_tree","xfs_fsverity_write_merkle","fsverity_pagecache_read","xchk_inode_setup_verity","xchk_inode_verity_broken","xrep_inode_verity"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d96fcfe1b7f94ac742984ae7986b94a116abff1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","XFS_FS","XFS_ONLINE_SCRUB"],"series_id":"12fa9d7b-406b-4d7f-ab3f-bf059d63fbdd","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-11 05:35:27 +0000 UTC FinishedAt: 2026-07-11 05:37:23 +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:*f104eae4-2467-483e-a20b-e2621817dfae,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-workflowcnk2z/series-workflowcnk2z-build-action-426059767/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-workflowcnk2z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d96fcfe1b7f94ac742984ae7986b94a116abff1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","XFS_FS","XFS_ONLINE_SCRUB"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["xfs_fsverity_begin_enable","xfs_fsverity_end_enable","xfs_fsverity_get_descriptor","xfs_fsverity_write_descriptor","xfs_fsverity_delete_metadata","xfs_fsverity_cancel_unwritten","xfs_fsverity_read_merkle","xfs_fsverity_readahead_merkle_tree","xfs_fsverity_write_merkle","fsverity_pagecache_read","xchk_inode_setup_verity","xchk_inode_verity_broken","xrep_inode_verity"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d96fcfe1b7f94ac742984ae7986b94a116abff1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","XFS_FS","XFS_ONLINE_SCRUB"],"series_id":"12fa9d7b-406b-4d7f-ab3f-bf059d63fbdd","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-11 05:37:33 +0000 UTC FinishedAt: 2026-07-11 08:39:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcnk2z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d96fcfe1b7f94ac742984ae7986b94a116abff1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","XFS_FS","XFS_ONLINE_SCRUB"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["xfs_fsverity_begin_enable","xfs_fsverity_end_enable","xfs_fsverity_get_descriptor","xfs_fsverity_write_descriptor","xfs_fsverity_delete_metadata","xfs_fsverity_cancel_unwritten","xfs_fsverity_read_merkle","xfs_fsverity_readahead_merkle_tree","xfs_fsverity_write_merkle","fsverity_pagecache_read","xchk_inode_setup_verity","xchk_inode_verity_broken","xrep_inode_verity"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d96fcfe1b7f94ac742984ae7986b94a116abff1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","XFS_FS","XFS_ONLINE_SCRUB"],"series_id":"12fa9d7b-406b-4d7f-ab3f-bf059d63fbdd","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-11 05:37:33 +0000 UTC FinishedAt: 2026-07-11 08:39:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["xfs_fsverity_begin_enable","xfs_fsverity_end_enable","xfs_fsverity_get_descriptor","xfs_fsverity_write_descriptor","xfs_fsverity_delete_metadata","xfs_fsverity_cancel_unwritten","xfs_fsverity_read_merkle","xfs_fsverity_readahead_merkle_tree","xfs_fsverity_write_merkle","fsverity_pagecache_read","xchk_inode_setup_verity","xchk_inode_verity_broken","xrep_inode_verity"],"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:*09a4c93a-aa87-42d1-ab57-c3960b3db0bd,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*f104eae4-2467-483e-a20b-e2621817dfae,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-workflowcnk2z/series-workflowcnk2z-build-action-1805354754/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-workflowcnk2z/series-workflowcnk2z-build-action-426059767/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowcnk2z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d96fcfe1b7f94ac742984ae7986b94a116abff1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","XFS_FS","XFS_ONLINE_SCRUB"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["xfs_fsverity_begin_enable","xfs_fsverity_end_enable","xfs_fsverity_get_descriptor","xfs_fsverity_write_descriptor","xfs_fsverity_delete_metadata","xfs_fsverity_cancel_unwritten","xfs_fsverity_read_merkle","xfs_fsverity_readahead_merkle_tree","xfs_fsverity_write_merkle","fsverity_pagecache_read","xchk_inode_setup_verity","xchk_inode_verity_broken","xrep_inode_verity"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d96fcfe1b7f94ac742984ae7986b94a116abff1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","XFS_FS","XFS_ONLINE_SCRUB"],"series_id":"12fa9d7b-406b-4d7f-ab3f-bf059d63fbdd","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-11 05:37:33 +0000 UTC FinishedAt: 2026-07-11 05:37:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcnk2z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d96fcfe1b7f94ac742984ae7986b94a116abff1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","XFS_FS","XFS_ONLINE_SCRUB"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["xfs_fsverity_begin_enable","xfs_fsverity_end_enable","xfs_fsverity_get_descriptor","xfs_fsverity_write_descriptor","xfs_fsverity_delete_metadata","xfs_fsverity_cancel_unwritten","xfs_fsverity_read_merkle","xfs_fsverity_readahead_merkle_tree","xfs_fsverity_write_merkle","fsverity_pagecache_read","xchk_inode_setup_verity","xchk_inode_verity_broken","xrep_inode_verity"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d96fcfe1b7f94ac742984ae7986b94a116abff1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","XFS_FS","XFS_ONLINE_SCRUB"],"series_id":"12fa9d7b-406b-4d7f-ab3f-bf059d63fbdd","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-11 05:37:33 +0000 UTC FinishedAt: 2026-07-11 05:37:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["xfs_fsverity_begin_enable","xfs_fsverity_end_enable","xfs_fsverity_get_descriptor","xfs_fsverity_write_descriptor","xfs_fsverity_delete_metadata","xfs_fsverity_cancel_unwritten","xfs_fsverity_read_merkle","xfs_fsverity_readahead_merkle_tree","xfs_fsverity_write_merkle","fsverity_pagecache_read","xchk_inode_setup_verity","xchk_inode_verity_broken","xrep_inode_verity"],"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-workflowcnk2z/series-workflowcnk2z-convert-artifact-3873941340/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcnk2z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d96fcfe1b7f94ac742984ae7986b94a116abff1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","XFS_FS","XFS_ONLINE_SCRUB"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["xfs_fsverity_begin_enable","xfs_fsverity_end_enable","xfs_fsverity_get_descriptor","xfs_fsverity_write_descriptor","xfs_fsverity_delete_metadata","xfs_fsverity_cancel_unwritten","xfs_fsverity_read_merkle","xfs_fsverity_readahead_merkle_tree","xfs_fsverity_write_merkle","fsverity_pagecache_read","xchk_inode_setup_verity","xchk_inode_verity_broken","xrep_inode_verity"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d96fcfe1b7f94ac742984ae7986b94a116abff1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","XFS_FS","XFS_ONLINE_SCRUB"],"series_id":"12fa9d7b-406b-4d7f-ab3f-bf059d63fbdd","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-11 05:37:33 +0000 UTC FinishedAt: 2026-07-11 05:37:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcnk2z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d96fcfe1b7f94ac742984ae7986b94a116abff1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","XFS_FS","XFS_ONLINE_SCRUB"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["xfs_fsverity_begin_enable","xfs_fsverity_end_enable","xfs_fsverity_get_descriptor","xfs_fsverity_write_descriptor","xfs_fsverity_delete_metadata","xfs_fsverity_cancel_unwritten","xfs_fsverity_read_merkle","xfs_fsverity_readahead_merkle_tree","xfs_fsverity_write_merkle","fsverity_pagecache_read","xchk_inode_setup_verity","xchk_inode_verity_broken","xrep_inode_verity"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d96fcfe1b7f94ac742984ae7986b94a116abff1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","XFS_FS","XFS_ONLINE_SCRUB"],"series_id":"12fa9d7b-406b-4d7f-ab3f-bf059d63fbdd","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-11 05:37:33 +0000 UTC FinishedAt: 2026-07-11 05:37:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcnk2z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d96fcfe1b7f94ac742984ae7986b94a116abff1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","XFS_FS","XFS_ONLINE_SCRUB"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["xfs_fsverity_begin_enable","xfs_fsverity_end_enable","xfs_fsverity_get_descriptor","xfs_fsverity_write_descriptor","xfs_fsverity_delete_metadata","xfs_fsverity_cancel_unwritten","xfs_fsverity_read_merkle","xfs_fsverity_readahead_merkle_tree","xfs_fsverity_write_merkle","fsverity_pagecache_read","xchk_inode_setup_verity","xchk_inode_verity_broken","xrep_inode_verity"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d96fcfe1b7f94ac742984ae7986b94a116abff1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","XFS_FS","XFS_ONLINE_SCRUB"],"series_id":"12fa9d7b-406b-4d7f-ab3f-bf059d63fbdd","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-11 05:37:33 +0000 UTC FinishedAt: 2026-07-11 05:37:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcnk2z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d96fcfe1b7f94ac742984ae7986b94a116abff1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","XFS_FS","XFS_ONLINE_SCRUB"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["xfs_fsverity_begin_enable","xfs_fsverity_end_enable","xfs_fsverity_get_descriptor","xfs_fsverity_write_descriptor","xfs_fsverity_delete_metadata","xfs_fsverity_cancel_unwritten","xfs_fsverity_read_merkle","xfs_fsverity_readahead_merkle_tree","xfs_fsverity_write_merkle","fsverity_pagecache_read","xchk_inode_setup_verity","xchk_inode_verity_broken","xrep_inode_verity"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d96fcfe1b7f94ac742984ae7986b94a116abff1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","XFS_FS","XFS_ONLINE_SCRUB"],"series_id":"12fa9d7b-406b-4d7f-ab3f-bf059d63fbdd","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-11 05:37:44 +0000 UTC FinishedAt: 2026-07-11 08:39:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcnk2z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d96fcfe1b7f94ac742984ae7986b94a116abff1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","XFS_FS","XFS_ONLINE_SCRUB"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["xfs_fsverity_begin_enable","xfs_fsverity_end_enable","xfs_fsverity_get_descriptor","xfs_fsverity_write_descriptor","xfs_fsverity_delete_metadata","xfs_fsverity_cancel_unwritten","xfs_fsverity_read_merkle","xfs_fsverity_readahead_merkle_tree","xfs_fsverity_write_merkle","fsverity_pagecache_read","xchk_inode_setup_verity","xchk_inode_verity_broken","xrep_inode_verity"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d96fcfe1b7f94ac742984ae7986b94a116abff1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","XFS_FS","XFS_ONLINE_SCRUB"],"series_id":"12fa9d7b-406b-4d7f-ab3f-bf059d63fbdd","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-11 05:37:44 +0000 UTC FinishedAt: 2026-07-11 08:39:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*09a4c93a-aa87-42d1-ab57-c3960b3db0bd,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*f104eae4-2467-483e-a20b-e2621817dfae,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-workflowcnk2z/series-workflowcnk2z-build-action-1805354754/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-workflowcnk2z/series-workflowcnk2z-build-action-426059767/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-workflowcnk2z/series-workflowcnk2z-convert-artifact-3873941340/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,}