Name: series-workflow4lxk4 Phase: Succeeded StartedAt: 2026-07-17 15:42:04 +0000 UTC FinishedAt: 2026-07-17 20:33:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4lxk4[0] Phase: Succeeded StartedAt: 2026-07-17 15:42:04 +0000 UTC FinishedAt: 2026-07-17 16:06:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4lxk4[0].run-triage Phase: Succeeded StartedAt: 2026-07-17 15:42:04 +0000 UTC FinishedAt: 2026-07-17 16:06:48 +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": "fce2dfa773ced15f27dd27cd0b482a7473cdcf2a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "XFS_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "fce2dfa773ced15f27dd27cd0b482a7473cdcf2a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "XFS_FS" ], "series_id": "ac22dd9a-ac53-42b0-8fda-91face219f43" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "xfs_ioc_write_stream_open", "xfs_ioc_write_stream_set", "xfs_ioc_write_stream_get", "xfs_ioc_write_stream_get_max", "xfs_inode_write_stream_open", "xfs_inode_set_write_stream", "xfs_inode_get_write_stream", "xfs_inode_max_write_streams", "xfs_write_stream_release", "xfs_inode_write_stream_ag_set", "xfs_ag_to_ag_set" ], "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+CgkJCTx0ZD4yMDI2LzA3LzE3IDE2OjA2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1hGU19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3hmc19pb2Nfd3JpdGVfc3RyZWFtX29wZW4mIzM0OywKICAgICYjMzQ7eGZzX2lvY193cml0ZV9zdHJlYW1fc2V0JiMzNDssCiAgICAmIzM0O3hmc19pb2Nfd3JpdGVfc3RyZWFtX2dldCYjMzQ7LAogICAgJiMzNDt4ZnNfaW9jX3dyaXRlX3N0cmVhbV9nZXRfbWF4JiMzNDssCiAgICAmIzM0O3hmc19pbm9kZV93cml0ZV9zdHJlYW1fb3BlbiYjMzQ7LAogICAgJiMzNDt4ZnNfaW5vZGVfc2V0X3dyaXRlX3N0cmVhbSYjMzQ7LAogICAgJiMzNDt4ZnNfaW5vZGVfZ2V0X3dyaXRlX3N0cmVhbSYjMzQ7LAogICAgJiMzNDt4ZnNfaW5vZGVfbWF4X3dyaXRlX3N0cmVhbXMmIzM0OywKICAgICYjMzQ7eGZzX3dyaXRlX3N0cmVhbV9yZWxlYXNlJiMzNDssCiAgICAmIzM0O3hmc19pbm9kZV93cml0ZV9zdHJlYW1fYWdfc2V0JiMzNDssCiAgICAmIzM0O3hmc19hZ190b19hZ19zZXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyB3cml0ZSBzdHJlYW1zIHN1cHBvcnQgdG8gWEZTIGFuZCBpb21hcCwgaW5jbHVkaW5nIG5ldyBpb2N0bHMgZm9yIG1hbmFnaW5nIHdyaXRlIHN0cmVhbXMgYW5kIG1vZGlmaWNhdGlvbnMgdG8gYmxvY2sgYWxsb2NhdGlvbiBsb2dpYyB0byBmYW4gb3V0IGFsbG9jYXRpb25zIGFjcm9zcyBBR3MgYmFzZWQgb24gdGhlIHN0cmVhbSBJRC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgbW9kaWZpZXMgY29yZSBmaWxlc3lzdGVtIGxvZ2ljIGFuZCBpbnRyb2R1Y2VzIG5ldyB1c2VyLWZhY2luZyBBUElzLCBtYWtpbmcgaXQgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTcgMTY6MDY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAzZjE5ZjljZDFhNGU1NDQ3ZWFkMWVjZDc4MzM1ZjcwYmIzM2EzM2E0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdWwgMTcgMTY6MDY6MDIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvaW9tYXAvZGlyZWN0LWlvLmMgYi9mcy9pb21hcC9kaXJlY3QtaW8uY1xuaW5kZXggZTJjZDVmOTJiYWJlZGIuLmI3NzcxYTI1YzFjNzlmIDEwMDY0NFxuLS0tIGEvZnMvaW9tYXAvZGlyZWN0LWlvLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2lvbWFwL2RpcmVjdC1pby5jXG5AQCAtMzQ4LDYgJiM0MzszNDgsNyBAQCBzdGF0aWMgc3NpemVfdCBpb21hcF9kaW9fYmlvX2l0ZXJfb25lKHN0cnVjdCBpb21hcF9pdGVyICppdGVyLFxuIFx0ZnNjcnlwdF9zZXRfYmlvX2NyeXB0X2N0eChiaW8sIGl0ZXItXHUwMDNlaW5vZGUsIHBvcywgR0ZQX0tFUk5FTCk7XG4gXHRiaW8tXHUwMDNlYmlfaXRlci5iaV9zZWN0b3IgPSBpb21hcF9zZWN0b3IoXHUwMDI2aXRlci1cdTAwM2Vpb21hcCwgcG9zKTtcbiBcdGJpby1cdTAwM2ViaV93cml0ZV9oaW50ID0gaXRlci1cdTAwM2Vpbm9kZS1cdTAwM2VpX3dyaXRlX2hpbnQ7XG4mIzQzO1x0YmlvLVx1MDAzZWJpX3dyaXRlX3N0cmVhbSA9IGl0ZXItXHUwMDNlaW9tYXAud3JpdGVfc3RyZWFtO1xuIFx0YmlvLVx1MDAzZWJpX2lvcHJpbyA9IGRpby1cdTAwM2Vpb2NiLVx1MDAzZWtpX2lvcHJpbztcbiBcdGJpby1cdTAwM2ViaV9wcml2YXRlID0gZGlvO1xuIFx0YmlvLVx1MDAzZWJpX2VuZF9pbyA9IGlvbWFwX2Rpb19iaW9fZW5kX2lvO1xuZGlmZiAtLWdpdCBhL2ZzL2lvbWFwL2lvZW5kLmMgYi9mcy9pb21hcC9pb2VuZC5jXG5pbmRleCAwNTY1MzI4NzY0YzE3NS4uNWVhMmM2ODk5M2NmOTMgMTAwNjQ0XG4tLS0gYS9mcy9pb21hcC9pb2VuZC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9pb21hcC9pb2VuZC5jXG5AQCAtMTY1LDYgJiM0MzsxNjUsNyBAQCBzdGF0aWMgc3RydWN0IGlvbWFwX2lvZW5kICppb21hcF9hbGxvY19pb2VuZChzdHJ1Y3QgaW9tYXBfd3JpdGVwYWdlX2N0eCAqd3BjLFxuIFx0XHRcdCAgICAgICBHRlBfTk9GUywgXHUwMDI2aW9tYXBfaW9lbmRfYmlvc2V0KTtcbiBcdGJpby1cdTAwM2ViaV9pdGVyLmJpX3NlY3RvciA9IGlvbWFwX3NlY3RvcihcdTAwMjZ3cGMtXHUwMDNlaW9tYXAsIHBvcyk7XG4gXHRiaW8tXHUwMDNlYmlfd3JpdGVfaGludCA9IHdwYy1cdTAwM2Vpbm9kZS1cdTAwM2VpX3dyaXRlX2hpbnQ7XG4mIzQzO1x0YmlvLVx1MDAzZWJpX3dyaXRlX3N0cmVhbSA9IHdwYy1cdTAwM2Vpb21hcC53cml0ZV9zdHJlYW07XG4gXHR3YmNfaW5pdF9iaW8od3BjLVx1MDAzZXdiYywgYmlvKTtcbiBcdHdwYy1cdTAwM2Vucl9mb2xpb3MgPSAwO1xuIFx0cmV0dXJuIGlvbWFwX2luaXRfaW9lbmQod3BjLVx1MDAzZWlub2RlLCBiaW8sIHBvcywgaW9lbmRfZmxhZ3MpO1xuQEAgLTE4OCw2ICYjNDM7MTg5LDggQEAgc3RhdGljIGJvb2wgaW9tYXBfY2FuX2FkZF90b19pb2VuZChzdHJ1Y3QgaW9tYXBfd3JpdGVwYWdlX2N0eCAqd3BjLCBsb2ZmX3QgcG9zLFxuIFx0aWYgKCEod3BjLVx1MDAzZWlvbWFwLmZsYWdzIFx1MDAyNiBJT01BUF9GX0FOT05fV1JJVEUpIFx1MDAyNlx1MDAyNlxuIFx0ICAgIGlvbWFwX3NlY3RvcihcdTAwMjZ3cGMtXHUwMDNlaW9tYXAsIHBvcykgIT0gYmlvX2VuZF9zZWN0b3IoXHUwMDI2aW9lbmQtXHUwMDNlaW9fYmlvKSlcbiBcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdGlmICh3cGMtXHUwMDNlaW9tYXAud3JpdGVfc3RyZWFtICE9IGlvZW5kLVx1MDAzZWlvX2Jpby5iaV93cml0ZV9zdHJlYW0pXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4gXHQvKlxuIFx0ICogTGltaXQgaW9lbmQgYmlvIGNoYWluIGxlbmd0aHMgdG8gbWluaW1pc2UgSU8gY29tcGxldGlvbiBsYXRlbmN5LiBUaGlzXG4gXHQgKiBhbHNvIHByZXZlbnRzIGxvbmcgdGlnaHQgbG9vcHMgZW5kaW5nIHBhZ2Ugd3JpdGViYWNrIG9uIGFsbCB0aGVcbmRpZmYgLS1naXQgYS9mcy94ZnMvbGlieGZzL3hmc19ibWFwLmMgYi9mcy94ZnMvbGlieGZzL3hmc19ibWFwLmNcbmluZGV4IGQ2NGRlZmVkYTY0NWVkLi44NzJhNGFiZDIzMTU3YyAxMDA2NDRcbi0tLSBhL2ZzL3hmcy9saWJ4ZnMveGZzX2JtYXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMveGZzL2xpYnhmcy94ZnNfYm1hcC5jXG5AQCAtMzE5Miw2ICYjNDM7MzE5Miw3MiBAQCB4ZnNfYm1hcF9zZWxlY3RfbWlubGVuKFxuIFx0cmV0dXJuIGFyZ3MtXHUwMDNlbWF4bGVuO1xuIH1cbiBcbiYjNDM7I2RlZmluZVx0R0VORVJJQ19BR19TRVRfU1pcdCgyKVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSB4ZnNfYWdudW1iZXJfdFxuJiM0Mzt4ZnNfZGVmYXVsdF9hZ19zZXRfc2l6ZShcbiYjNDM7XHRzdHJ1Y3QgeGZzX2lub2RlXHQqaXApXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgeGZzX21vdW50XHQqbXAgPSBpcC1cdTAwM2VpX21vdW50O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gbWluX3QoeGZzX2FnbnVtYmVyX3QsIEdFTkVSSUNfQUdfU0VUX1NaLCBtcC1cdTAwM2VtX3NiLnNiX2FnY291bnQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgeGZzX2FnbnVtYmVyX3RcbiYjNDM7eGZzX2lub2RlX3dyaXRlX3N0cmVhbV9hZ19zZXQoXG4mIzQzO1x0c3RydWN0IHhmc19pbm9kZVx0KmlwLFxuJiM0MztcdHhmc19hZ251bWJlcl90XHRcdCp0YXJnZXRfYWdubylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB4ZnNfbW91bnRcdCptcCA9IGlwLVx1MDAzZWlfbW91bnQ7XG4mIzQzO1x0dWludDMyX3RcdFx0bnJfc3RyZWFtcyA9IHhmc19pbm9kZV9tYXhfd3JpdGVfc3RyZWFtcyhpcCk7XG4mIzQzO1x0dWludDMyX3RcdFx0c3RyZWFtX2lkID0gaXAtXHUwMDNlaV93cml0ZV9zdHJlYW07XG4mIzQzO1x0dWludDMyX3RcdFx0bnJfYWdzID0gbXAtXHUwMDNlbV9zYi5zYl9hZ2NvdW50O1xuJiM0MztcdHhmc19hZ251bWJlcl90XHRcdHNldF9zaXplO1xuJiM0MztcbiYjNDM7XG4mIzQzO1x0aWYgKCFucl9zdHJlYW1zKVxuJiM0MztcdFx0cmV0dXJuIHhmc19kZWZhdWx0X2FnX3NldF9zaXplKGlwKTtcbiYjNDM7XG4mIzQzO1x0c3RyZWFtX2lkIC09IDE7IC8qIEZvciAwLWJhc2VkIG1hdGg7IHN0cmVhbS1pZHMgYXJlIDEtYmFzZWQgKi9cbiYjNDM7XHRzZXRfc2l6ZSA9IG5yX2FncyAvIG5yX3N0cmVhbXM7XG4mIzQzO1xuJiM0MztcdGlmIChzZXRfc2l6ZSkge1xuJiM0MztcdFx0KnRhcmdldF9hZ25vID0gc3RyZWFtX2lkICogc2V0X3NpemU7XG4mIzQzO1x0XHQvKiB1bmV2ZW4gZGlzdHJpYnV0aW9uLCBsYXN0IHN0cmVhbSB3aWxsIGNvdmVyIGV4dHJhIEFHcyAqL1xuJiM0MztcdFx0aWYgKHN0cmVhbV9pZCA9PSBucl9zdHJlYW1zIC0gMSlcbiYjNDM7XHRcdFx0c2V0X3NpemUgPSBucl9hZ3MgLSAqdGFyZ2V0X2Fnbm87XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdC8qIGZvciB0aGUgY2FzZSB3aGVuIHdlIGhhdmUgZmV3ZXIgQUdzIHRoYW4gc3RyZWFtcyAqL1xuJiM0MztcdFx0KnRhcmdldF9hZ25vID0gc3RyZWFtX2lkICUgbnJfYWdzO1xuJiM0MztcdFx0c2V0X3NpemUgPSAxO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHNldF9zaXplO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgeGZzX2FnbnVtYmVyX3RcbiYjNDM7eGZzX2FnX3RvX2FnX3NldChcbiYjNDM7XHRzdHJ1Y3QgeGZzX2JtYWxsb2NhXHQqYXAsXG4mIzQzO1x0eGZzX2FnbnVtYmVyX3RcdFx0YmFzZV9hZ25vKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHhmc19pbm9kZVx0KmlwID0gYXAtXHUwMDNlaXA7XG4mIzQzO1x0c3RydWN0IHhmc19tb3VudFx0Km1wID0gaXAtXHUwMDNlaV9tb3VudDtcbiYjNDM7XHR4ZnNfYWdudW1iZXJfdFx0XHRzZXRfc2l6ZTtcbiYjNDM7XG4mIzQzO1x0LyogQXBwbHkgZmFubmluZyBvbmx5IGZvciByZWd1bGFyIGZpbGUgZGF0YSAqL1xuJiM0MztcdGlmICghKGFwLVx1MDAzZWRhdGF0eXBlIFx1MDAyNiBYRlNfQUxMT0NfVVNFUkRBVEEpKVxuJiM0MztcdFx0cmV0dXJuIGJhc2VfYWdubztcbiYjNDM7XG4mIzQzO1x0aWYgKGlwLVx1MDAzZWlfd3JpdGVfc3RyZWFtKVxuJiM0MztcdFx0c2V0X3NpemUgPSB4ZnNfaW5vZGVfd3JpdGVfc3RyZWFtX2FnX3NldChpcCwgXHUwMDI2YmFzZV9hZ25vKTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRzZXRfc2l6ZSA9IHhmc19kZWZhdWx0X2FnX3NldF9zaXplKGlwKTtcbiYjNDM7XG4mIzQzO1x0LyogRmFuIG91dCB3aXRoaW4gdGhlIEFHIHNldCB1c2luZyBsb3cgYml0cyBvZiB0aGUgaW5vZGUgKi9cbiYjNDM7XHRyZXR1cm4gKGJhc2VfYWdubyAmIzQzOyAoWEZTX0lOT19UT19BR0lOTyhtcCwgSV9JTk8oaXApKSAlIHNldF9zaXplKSkgJVxuJiM0MztcdFx0bXAtXHUwMDNlbV9zYi5zYl9hZ2NvdW50O1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnRcbiB4ZnNfYm1hcF9idGFsbG9jX3NlbGVjdF9sZW5ndGhzKFxuIFx0c3RydWN0IHhmc19ibWFsbG9jYVx0KmFwLFxuQEAgLTM1ODcsOCAmIzQzOzM2NTMsMTYgQEAgeGZzX2JtYXBfYnRhbGxvY19iZXN0X2xlbmd0aChcbiB7XG4gXHR4ZnNfZXh0bGVuX3RcdFx0YmxlbiA9IDA7XG4gXHRpbnRcdFx0XHRlcnJvcjtcbiYjNDM7XHR4ZnNfYWdudW1iZXJfdFx0XHR0YXJnZXRfYWcsIHN0YXJ0X2FnO1xuIFxuIFx0YXAtXHUwMDNlYmxrbm8gPSBYRlNfSU5PREVfVE9fRlNCKGFwLVx1MDAzZWlwKTtcbiYjNDM7XG4mIzQzO1x0LyogZmFuIG91dCBpbml0aWFsIEFHIGFjcm9zcyB0aGUgZ2VuZXJpYyBBRyBzZXQgKi9cbiYjNDM7XHRzdGFydF9hZyA9IFhGU19GU0JfVE9fQUdOTyhhcmdzLVx1MDAzZW1wLCBhcC1cdTAwM2VibGtubyk7XG4mIzQzO1x0dGFyZ2V0X2FnID0geGZzX2FnX3RvX2FnX3NldChhcCwgc3RhcnRfYWcpO1xuJiM0MztcdGlmICh0YXJnZXRfYWcgIT0gc3RhcnRfYWcpXG4mIzQzO1x0XHRhcC1cdTAwM2VibGtubyA9IFhGU19BR0JfVE9fRlNCKGFyZ3MtXHUwMDNlbXAsIHRhcmdldF9hZywgMCk7XG4mIzQzO1xuIFx0aWYgKCF4ZnNfYm1hcF9hZGphY2VudChhcCkpXG4gXHRcdGFwLVx1MDAzZWVvZiA9IGZhbHNlO1xuIFxuZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfaWNhY2hlLmMgYi9mcy94ZnMveGZzX2ljYWNoZS5jXG5pbmRleCA5ZDhkZDMwYmQ5MjdhMi4uN2I5ZGRhNzQxMjJmMGUgMTAwNjQ0XG4tLS0gYS9mcy94ZnMveGZzX2ljYWNoZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy94ZnMveGZzX2ljYWNoZS5jXG5AQCAtMTI5LDYgJiM0MzsxMjksNyBAQCB4ZnNfaW5vZGVfYWxsb2MoXG4gXHRzcGluX2xvY2tfaW5pdChcdTAwMjZpcC1cdTAwM2VpX2lvZW5kX2xvY2spO1xuIFx0aXAtXHUwMDNlaV9uZXh0X3VubGlua2VkID0gTlVMTEFHSU5PO1xuIFx0aXAtXHUwMDNlaV9wcmV2X3VubGlua2VkID0gMDtcbiYjNDM7XHRpcC1cdTAwM2VpX3dyaXRlX3N0cmVhbSA9IDA7XG4gXG4gXHRyZXR1cm4gaXA7XG4gfVxuZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfaW5vZGUuYyBiL2ZzL3hmcy94ZnNfaW5vZGUuY1xuaW5kZXggMTUyNzlkMjJhODk0ZmEuLjYzOGJlZTNlNGFjMjI4IDEwMDY0NFxuLS0tIGEvZnMveGZzL3hmc19pbm9kZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy94ZnMveGZzX2lub2RlLmNcbkBAIC00LDYgJiM0Mzs0LDcgQEBcbiAgKiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICAqL1xuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2l2ZXJzaW9uLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvYW5vbl9pbm9kZXMuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwmIzM0O3hmc19wbGF0Zm9ybS5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7eGZzX2ZzLmhcJiMzNDtcbkBAIC00Nyw2ICYjNDM7NDgsMTgwIEBAXG4gXG4gc3RydWN0IGttZW1fY2FjaGUgKnhmc19pbm9kZV9jYWNoZTtcbiBcbiYjNDM7aW50XG4mIzQzO3hmc19pbm9kZV9tYXhfd3JpdGVfc3RyZWFtcyhcbiYjNDM7XHRzdHJ1Y3QgeGZzX2lub2RlXHQqaXApXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYmxvY2tfZGV2aWNlXHQqYmRldjtcbiYjNDM7XHRzdHJ1Y3QgeGZzX21vdW50XHQqbXAgPSBpcC1cdTAwM2VpX21vdW50O1xuJiM0MztcdGludCBucl9zdHJlYW1zO1xuJiM0MztcdHhmc19hZ251bWJlcl90IG5yX2FncywgYWdfc2V0X3NpemU7XG4mIzQzO1x0Ym9vbFx0XHRcdGlzX2ZpbGVzdHJlYW0sIGlzX3JlYWx0aW1lO1xuJiM0MztcbiYjNDM7XHR4ZnNfaWxvY2soaXAsIFhGU19JTE9DS19TSEFSRUQpO1xuJiM0MztcdGlzX2ZpbGVzdHJlYW0gPSB4ZnNfaW5vZGVfaXNfZmlsZXN0cmVhbShpcCk7XG4mIzQzO1x0aXNfcmVhbHRpbWUgPSBYRlNfSVNfUkVBTFRJTUVfSU5PREUoaXApO1xuJiM0MztcdGJkZXYgPSB4ZnNfaW5vZGVfYnVmdGFyZyhpcCktXHUwMDNlYnRfYmRldjtcbiYjNDM7XHR4ZnNfaXVubG9jayhpcCwgWEZTX0lMT0NLX1NIQVJFRCk7XG4mIzQzO1xuJiM0MztcdGlmICghYmRldiB8fCBpc19maWxlc3RyZWFtIHx8IGlzX3JlYWx0aW1lKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdG5yX3N0cmVhbXMgPSBiZGV2X21heF93cml0ZV9zdHJlYW1zKGJkZXYpO1xuJiM0MztcdGlmIChucl9zdHJlYW1zIFx1MDAzZSAwKVxuJiM0MztcdFx0cmV0dXJuIG5yX3N0cmVhbXM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBFbmFibGUgc29mdHdhcmUtb25seSBzdHJlYW1zIGlmIGhhcmR3YXJlIHN0cmVhbXMgYXJlIG5vdCBhdmFpbGFibGUuXG4mIzQzO1x0ICogVGhpcyBoZWxwcyB0b1xuJiM0MztcdCAqIC0gaW1wcm92ZSBpc29sYXRpb247IHJlZHVjZSBhbGxvY2F0aW9uIGludGVybGVhdmluZy5cbiYjNDM7XHQgKiAtIGltcHJvdmUgY29uY3VycmVuY3kgdXNpbmcgQUctc2V0IGJhc2VkIHN0ZWVyaW5nIHdpdGhpbiBhbmQgYWNyb3NzIHN0cmVhbXMuXG4mIzQzO1x0ICovXG4mIzQzO1x0bnJfYWdzID0gbXAtXHUwMDNlbV9zYi5zYl9hZ2NvdW50O1xuJiM0MztcdGlmIChucl9hZ3MgXHUwMDNlPSAxNilcbiYjNDM7XHRcdGFnX3NldF9zaXplID0gNDtcbiYjNDM7XHRlbHNlIGlmIChucl9hZ3MgXHUwMDNlPSA4KVxuJiM0MztcdFx0YWdfc2V0X3NpemUgPSAyO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdGFnX3NldF9zaXplID0gMTtcbiYjNDM7XHRucl9zdHJlYW1zID0gbnJfYWdzIC8gYWdfc2V0X3NpemU7XG4mIzQzO1x0cmV0dXJuIG1pbl90KHVpbnQxNl90LCBucl9zdHJlYW1zLCBYRlNfU1dfV1JJVEVfU1RSRUFNU19NQVgpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt1aW50MTZfdFxuJiM0Mzt4ZnNfaW5vZGVfZ2V0X3dyaXRlX3N0cmVhbShcbiYjNDM7XHRzdHJ1Y3QgeGZzX2lub2RlXHQqaXApXG4mIzQzO3tcbiYjNDM7XHR1aW50MTZfdFx0c3RyZWFtX2lkO1xuJiM0MztcbiYjNDM7XHR4ZnNfaWxvY2soaXAsIFhGU19JTE9DS19TSEFSRUQpO1xuJiM0MztcdHN0cmVhbV9pZCA9IGlwLVx1MDAzZWlfd3JpdGVfc3RyZWFtO1xuJiM0MztcdHhmc19pdW5sb2NrKGlwLCBYRlNfSUxPQ0tfU0hBUkVEKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHN0cmVhbV9pZDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RydWN0IHhmc193cml0ZV9zdHJlYW0ge1xuJiM0MztcdHN0cnVjdCB4ZnNfbW91bnRcdCptcDtcbiYjNDM7XHR1aW50MTZfdFx0XHRzdHJlYW1faWQ7XHQvKiAxLWJhc2VkICovXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50XG4mIzQzO3hmc193cml0ZV9zdHJlYW1fcmVsZWFzZShcbiYjNDM7XHRzdHJ1Y3QgaW5vZGVcdFx0Kmlub2RlLFxuJiM0MztcdHN0cnVjdCBmaWxlXHRcdCpmaWxlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHhmc193cml0ZV9zdHJlYW1cdCp3cyA9IGZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhO1xuJiM0MztcdHN0cnVjdCB4ZnNfbW91bnRcdCptcCA9IHdzLVx1MDAzZW1wO1xuJiM0MztcbiYjNDM7XHRzcGluX2xvY2soXHUwMDI2bXAtXHUwMDNlbV9zdHJlYW1zX2xvY2spO1xuJiM0MztcdGNsZWFyX2JpdCh3cy1cdTAwM2VzdHJlYW1faWQgLSAxLCBtcC1cdTAwM2VtX3N0cmVhbXNfaW5fdXNlKTtcbiYjNDM7XHRzcGluX3VubG9jayhcdTAwMjZtcC1cdTAwM2VtX3N0cmVhbXNfbG9jayk7XG4mIzQzO1x0a2ZyZWUod3MpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB4ZnNfd3JpdGVfc3RyZWFtX2ZvcHMgPSB7XG4mIzQzO1x0LnJlbGVhc2VcdD0geGZzX3dyaXRlX3N0cmVhbV9yZWxlYXNlLFxuJiM0MztcdC5sbHNlZWtcdFx0PSBub29wX2xsc2VlayxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO2ludFxuJiM0Mzt4ZnNfaW5vZGVfd3JpdGVfc3RyZWFtX29wZW4oXG4mIzQzO1x0c3RydWN0IHhmc19pbm9kZVx0KmlwLFxuJiM0MztcdHUzMlx0XHRcdGZsYWdzLFxuJiM0MztcdHUzMlx0XHRcdCpzdHJlYW1faWRwKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHhmc19tb3VudFx0Km1wID0gaXAtXHUwMDNlaV9tb3VudDtcbiYjNDM7XHRzdHJ1Y3QgeGZzX3dyaXRlX3N0cmVhbVx0KndzO1xuJiM0MztcdGludFx0XHRcdG1heCwgc2xvdCwgZmQsIHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKGZsYWdzIFx1MDAyNiB+RlNfV1JJVEVfU1RSRUFNX09QRU5fRVhBQ1QpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0bWF4ID0geGZzX2lub2RlX21heF93cml0ZV9zdHJlYW1zKGlwKTtcbiYjNDM7XHRpZiAoIW1heClcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHRBU1NFUlQobXAtXHUwMDNlbV9zdHJlYW1zX2luX3VzZSk7XG4mIzQzO1xuJiM0MztcdHdzID0ga21hbGxvYyhzaXplb2YoKndzKSwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKCF3cylcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcbiYjNDM7XHRzcGluX2xvY2soXHUwMDI2bXAtXHUwMDNlbV9zdHJlYW1zX2xvY2spO1xuJiM0MztcdGlmIChmbGFncyBcdTAwMjYgRlNfV1JJVEVfU1RSRUFNX09QRU5fRVhBQ1QpIHtcbiYjNDM7XHRcdGlmICghKnN0cmVhbV9pZHAgfHwgKnN0cmVhbV9pZHAgXHUwMDNlIG1heCkge1xuJiM0MztcdFx0XHRyZXQgPSAtRUlOVkFMO1xuJiM0MztcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRzbG90ID0gKnN0cmVhbV9pZHAgLSAxO1xuJiM0MztcdFx0aWYgKHRlc3RfYml0KHNsb3QsIG1wLVx1MDAzZW1fc3RyZWFtc19pbl91c2UpKSB7XG4mIzQzO1x0XHRcdHJldCA9IC1FQlVTWTtcbiYjNDM7XHRcdFx0Z290byBvdXRfdW5sb2NrO1xuJiM0MztcdFx0fVxuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRzbG90ID0gZmluZF9maXJzdF96ZXJvX2JpdChtcC1cdTAwM2VtX3N0cmVhbXNfaW5fdXNlLCBtYXgpO1xuJiM0MztcdFx0aWYgKHNsb3QgXHUwMDNlPSBtYXgpIHtcbiYjNDM7XHRcdFx0cmV0ID0gLUVCVVNZO1xuJiM0MztcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcdHNldF9iaXQoc2xvdCwgbXAtXHUwMDNlbV9zdHJlYW1zX2luX3VzZSk7XG4mIzQzO1x0c3Bpbl91bmxvY2soXHUwMDI2bXAtXHUwMDNlbV9zdHJlYW1zX2xvY2spO1xuJiM0MztcbiYjNDM7XHR3cy1cdTAwM2VtcCA9IG1wO1xuJiM0MztcdHdzLVx1MDAzZXN0cmVhbV9pZCA9IHNsb3QgJiM0MzsgMTtcdC8qIGNvbnZlcnQgdG8gMS1iYXNlZCAqL1xuJiM0MztcbiYjNDM7XHRmZCA9IGFub25faW5vZGVfZ2V0ZmQoXCYjMzQ7W3hmc193cml0ZV9zdHJlYW1dXCYjMzQ7LCBcdTAwMjZ4ZnNfd3JpdGVfc3RyZWFtX2ZvcHMsIHdzLFxuJiM0MztcdFx0XHQgICAgICBPX1JET05MWSB8IE9fQ0xPRVhFQyk7XG4mIzQzO1x0aWYgKGZkIFx1MDAzYyAwKSB7XG4mIzQzO1x0XHRzcGluX2xvY2soXHUwMDI2bXAtXHUwMDNlbV9zdHJlYW1zX2xvY2spO1xuJiM0MztcdFx0Y2xlYXJfYml0KHNsb3QsIG1wLVx1MDAzZW1fc3RyZWFtc19pbl91c2UpO1xuJiM0MztcdFx0c3Bpbl91bmxvY2soXHUwMDI2bXAtXHUwMDNlbV9zdHJlYW1zX2xvY2spO1xuJiM0MztcdFx0a2ZyZWUod3MpO1xuJiM0MztcdFx0cmV0dXJuIGZkO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0KnN0cmVhbV9pZHAgPSB3cy1cdTAwM2VzdHJlYW1faWQ7XG4mIzQzO1x0cmV0dXJuIGZkO1xuJiM0MztcbiYjNDM7b3V0X3VubG9jazpcbiYjNDM7XHRzcGluX3VubG9jayhcdTAwMjZtcC1cdTAwM2VtX3N0cmVhbXNfbG9jayk7XG4mIzQzO1x0a2ZyZWUod3MpO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludFxuJiM0Mzt4ZnNfaW5vZGVfc2V0X3dyaXRlX3N0cmVhbShcbiYjNDM7XHRzdHJ1Y3QgeGZzX2lub2RlXHQqaXAsXG4mIzQzO1x0aW50XHRcdFx0c3RyZWFtX2ZkKVxuJiM0Mzt7XG4mIzQzO1x0Q0xBU1MoZmQsIGYpKHN0cmVhbV9mZCk7XG4mIzQzO1x0c3RydWN0IHhmc193cml0ZV9zdHJlYW1cdCp3cztcbiYjNDM7XHRpbnRcdFx0XHRyZXQgPSAwO1xuJiM0MztcbiYjNDM7XHRpZiAoIWZkX2ZpbGUoZikpXG4mIzQzO1x0XHRyZXR1cm4gLUVCQURGO1xuJiM0MztcdGlmIChmZF9maWxlKGYpLVx1MDAzZWZfb3AgIT0gXHUwMDI2eGZzX3dyaXRlX3N0cmVhbV9mb3BzKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdHdzID0gZmRfZmlsZShmKS1cdTAwM2Vwcml2YXRlX2RhdGE7XG4mIzQzO1x0aWYgKHdzLVx1MDAzZW1wICE9IGlwLVx1MDAzZWlfbW91bnQpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0eGZzX2lsb2NrKGlwLCBYRlNfSUxPQ0tfRVhDTCk7XG4mIzQzO1xuJiM0MztcdGlmIChYRlNfSVNfUkVBTFRJTUVfSU5PREUoaXApIHx8IHhmc19pbm9kZV9pc19maWxlc3RyZWFtKGlwKSB8fFxuJiM0MztcdCAgICBWRlNfSShpcCktXHUwMDNlaV93cml0ZV9oaW50ICE9IFdSSVRFX0xJRkVfTk9UX1NFVCkge1xuJiM0MztcdFx0cmV0ID0gLUVJTlZBTDtcbiYjNDM7XHRcdGdvdG8gb3V0X3VubG9jaztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlwLVx1MDAzZWlfd3JpdGVfc3RyZWFtID0gd3MtXHUwMDNlc3RyZWFtX2lkO1xuJiM0MztvdXRfdW5sb2NrOlxuJiM0MztcdHhmc19pdW5sb2NrKGlwLCBYRlNfSUxPQ0tfRVhDTCk7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiAvKlxuICAqIFRoZXNlIHR3byBhcmUgd3JhcHBlciByb3V0aW5lcyBhcm91bmQgdGhlIHhmc19pbG9jaygpIHJvdXRpbmUgdXNlZCB0b1xuICAqIGNlbnRyYWxpemUgc29tZSBncnVuZ3kgY29kZS4gIFRoZXkgYXJlIHVzZWQgaW4gcGxhY2VzIHRoYXQgd2lzaCB0byBsb2NrIHRoZVxuZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfaW5vZGUuaCBiL2ZzL3hmcy94ZnNfaW5vZGUuaFxuaW5kZXggMzRjMTAzOGViZmNkZTEuLjZhYmY4MmZmYmY4MmFjIDEwMDY0NFxuLS0tIGEvZnMveGZzL3hmc19pbm9kZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy94ZnMveGZzX2lub2RlLmhcbkBAIC0zNyw2ICYjNDM7MzcsOSBAQCB0eXBlZGVmIHN0cnVjdCB4ZnNfaW5vZGUge1xuIFx0c3RydWN0IHhmc19pZm9ya1x0aV9kZjtcdFx0LyogZGF0YSBmb3JrICovXG4gXHRzdHJ1Y3QgeGZzX2lmb3JrXHRpX2FmO1x0XHQvKiBhdHRyaWJ1dGUgZm9yayAqL1xuIFxuJiM0MztcdC8qIFdyaXRlIHN0cmVhbSBpbmZvcm1hdGlvbiAqL1xuJiM0MztcdHVpbnQxNl90XHRcdGlfd3JpdGVfc3RyZWFtO1xuJiM0MztcbiBcdC8qIFRyYW5zYWN0aW9uIGFuZCBsb2NraW5nIGluZm9ybWF0aW9uLiAqL1xuIFx0c3RydWN0IHhmc19pbm9kZV9sb2dfaXRlbSAqaV9pdGVtcDtcdC8qIGxvZ2dpbmcgaW5mb3JtYXRpb24gKi9cbiBcdHN0cnVjdCByd19zZW1hcGhvcmVcdGlfbG9jaztcdFx0LyogaW5vZGUgbG9jayAqL1xuQEAgLTY3Myw0ICYjNDM7Njc2LDkgQEAgaW50IHhmc19pY3JlYXRlX2RxYWxsb2MoY29uc3Qgc3RydWN0IHhmc19pY3JlYXRlX2FyZ3MgKmFyZ3MsXG4gXHRcdHN0cnVjdCB4ZnNfZHF1b3QgKip1ZHFwcCwgc3RydWN0IHhmc19kcXVvdCAqKmdkcXBwLFxuIFx0XHRzdHJ1Y3QgeGZzX2RxdW90ICoqcGRxcHApO1xuIFxuJiM0MztpbnQgeGZzX2lub2RlX21heF93cml0ZV9zdHJlYW1zKHN0cnVjdCB4ZnNfaW5vZGUgKmlwKTtcbiYjNDM7dWludDE2X3QgeGZzX2lub2RlX2dldF93cml0ZV9zdHJlYW0oc3RydWN0IHhmc19pbm9kZSAqaXApO1xuJiM0MztpbnQgeGZzX2lub2RlX3dyaXRlX3N0cmVhbV9vcGVuKHN0cnVjdCB4ZnNfaW5vZGUgKmlwLCB1MzIgZmxhZ3MsXG4mIzQzO1x0XHR1MzIgKnN0cmVhbV9pZHApO1xuJiM0MztpbnQgeGZzX2lub2RlX3NldF93cml0ZV9zdHJlYW0oc3RydWN0IHhmc19pbm9kZSAqaXAsIGludCBzdHJlYW1fZmQpO1xuICNlbmRpZlx0LyogX19YRlNfSU5PREVfSF9fICovXG5kaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19pb2N0bC5jIGIvZnMveGZzL3hmc19pb2N0bC5jXG5pbmRleCAxYjUzNzAxYmViZWExYS4uODY0MGU2Mzg5NzY4M2YgMTAwNjQ0XG4tLS0gYS9mcy94ZnMveGZzX2lvY3RsLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3hmcy94ZnNfaW9jdGwuY1xuQEAgLTU1Nyw2ICYjNDM7NTU3LDEyIEBAIHhmc19pb2N0bF9zZXRhdHRyX3hmbGFncyhcbiBcdGJvb2xcdFx0XHRydGZsYWcgPSAoZmEtXHUwMDNlZnN4X3hmbGFncyBcdTAwMjYgRlNfWEZMQUdfUkVBTFRJTUUpO1xuIFx0dWludDY0X3RcdFx0aV9mbGFnczI7XG4gXG4mIzQzO1x0aWYgKChmYS1cdTAwM2Vmc3hfeGZsYWdzIFx1MDAyNiBGU19YRkxBR19GSUxFU1RSRUFNKSBcdTAwMjZcdTAwMjYgaXAtXHUwMDNlaV93cml0ZV9zdHJlYW0pXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0aWYgKHJ0ZmxhZyBcdTAwMjZcdTAwMjYgaXAtXHUwMDNlaV93cml0ZV9zdHJlYW0pXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4gXHRpZiAocnRmbGFnICE9IFhGU19JU19SRUFMVElNRV9JTk9ERShpcCkpIHtcbiBcdFx0LyogQ2FuJiMzOTt0IGNoYW5nZSByZWFsdGltZSBmbGFnIGlmIGFueSBleHRlbnRzIGFyZSBhbGxvY2F0ZWQuICovXG4gXHRcdGlmICh4ZnNfaW5vZGVfaGFzX2ZpbGVkYXRhKGlwKSlcbkBAIC0xMjAwLDYgJiM0MzsxMjA2LDU5IEBAIHhmc19pb2N0bF9mc19jb3VudHMoXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnRcbiYjNDM7eGZzX2lvY193cml0ZV9zdHJlYW1fb3BlbihcbiYjNDM7XHRzdHJ1Y3QgZmlsZVx0XHQqZmlscCxcbiYjNDM7XHR2b2lkIF9fdXNlclx0XHQqYXJnKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHhmc19pbm9kZVx0KmlwID0gWEZTX0koZmlsZV9pbm9kZShmaWxwKSk7XG4mIzQzO1x0c3RydWN0IGZzX3dyaXRlX3N0cmVhbV9vcGVuIHdzbztcbiYjNDM7XHRpbnRcdFx0XHRmZDtcbiYjNDM7XG4mIzQzO1x0aWYgKGNvcHlfZnJvbV91c2VyKFx1MDAyNndzbywgYXJnLCBzaXplb2Yod3NvKSkpXG4mIzQzO1x0XHRyZXR1cm4gLUVGQVVMVDtcbiYjNDM7XG4mIzQzO1x0ZmQgPSB4ZnNfaW5vZGVfd3JpdGVfc3RyZWFtX29wZW4oaXAsIHdzby5mbGFncywgXHUwMDI2d3NvLnN0cmVhbV9pZCk7XG4mIzQzO1x0aWYgKGZkIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIGZkO1xuJiM0MztcbiYjNDM7XHRpZiAoY29weV90b191c2VyKGFyZywgXHUwMDI2d3NvLCBzaXplb2Yod3NvKSkpXG4mIzQzO1x0XHRyZXR1cm4gLUVGQVVMVDtcbiYjNDM7XHRyZXR1cm4gZmQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnRcbiYjNDM7eGZzX2lvY193cml0ZV9zdHJlYW1fc2V0KFxuJiM0MztcdHN0cnVjdCBmaWxlXHRcdCpmaWxwLFxuJiM0MztcdHVuc2lnbmVkIGxvbmdcdFx0YXJnKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHhmc19pbm9kZVx0KmlwID0gWEZTX0koZmlsZV9pbm9kZShmaWxwKSk7XG4mIzQzO1xuJiM0MztcdGlmICghKGZpbHAtXHUwMDNlZl9tb2RlIFx1MDAyNiBGTU9ERV9XUklURSkpXG4mIzQzO1x0XHRyZXR1cm4gLUVCQURGO1xuJiM0MztcdHJldHVybiB4ZnNfaW5vZGVfc2V0X3dyaXRlX3N0cmVhbShpcCwgKGludClhcmcpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50XG4mIzQzO3hmc19pb2Nfd3JpdGVfc3RyZWFtX2dldChcbiYjNDM7XHRzdHJ1Y3QgeGZzX2lub2RlXHQqaXAsXG4mIzQzO1x0dm9pZCBfX3VzZXJcdFx0KmFyZylcbiYjNDM7e1xuJiM0MztcdF9fdTMyIHN0cmVhbV9pZCA9IHhmc19pbm9kZV9nZXRfd3JpdGVfc3RyZWFtKGlwKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHB1dF91c2VyKHN0cmVhbV9pZCwgKF9fdTMyIF9fdXNlciAqKWFyZyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnRcbiYjNDM7eGZzX2lvY193cml0ZV9zdHJlYW1fZ2V0X21heChcbiYjNDM7XHRzdHJ1Y3QgeGZzX2lub2RlXHQqaXAsXG4mIzQzO1x0dm9pZCBfX3VzZXJcdFx0KmFyZylcbiYjNDM7e1xuJiM0MztcdF9fdTMyIG5yX3N0cmVhbXMgPSB4ZnNfaW5vZGVfbWF4X3dyaXRlX3N0cmVhbXMoaXApO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcHV0X3VzZXIobnJfc3RyZWFtcywgKF9fdTMyIF9fdXNlciAqKWFyZyk7XG4mIzQzO31cbiYjNDM7XG4gLypcbiAgKiBUaGVzZSBsb25nLXVudXNlZCBpb2N0bHMgd2VyZSByZW1vdmVkIGZyb20gdGhlIG9mZmljaWFsIGlvY3RsIEFQSSBpbiA1LjE3LFxuICAqIGJ1dCByZXRhaW4gdGhlc2UgZGVmaW5pdGlvbnMgc28gdGhhdCB3ZSBjYW4gbG9nIHdhcm5pbmdzIGFib3V0IHRoZW0uXG5AQCAtMTQ2NSw2ICYjNDM7MTUyNCwxNiBAQCB4ZnNfZmlsZV9pb2N0bChcbiBcdFx0cmV0dXJuIHhmc19pb2NfaGVhbHRoX21vbml0b3IoZmlscCwgYXJnKTtcbiBcdGNhc2UgWEZTX0lPQ19WRVJJRllfTUVESUE6XG4gXHRcdHJldHVybiB4ZnNfaW9jX3ZlcmlmeV9tZWRpYShmaWxwLCBhcmcpO1xuJiM0MztcdGNhc2UgRlNfSU9DX1dSSVRFX1NUUkVBTV9PUEVOOlxuJiM0MztcdFx0cmV0dXJuIHhmc19pb2Nfd3JpdGVfc3RyZWFtX29wZW4oZmlscCwgKHZvaWQgX191c2VyICopYXJnKTtcbiYjNDM7XHRjYXNlIEZTX0lPQ19XUklURV9TVFJFQU1fU0VUOlxuJiM0MztcdFx0cmV0dXJuIHhmc19pb2Nfd3JpdGVfc3RyZWFtX3NldChmaWxwLCBwKTtcbiYjNDM7XHRjYXNlIEZTX0lPQ19XUklURV9TVFJFQU1fR0VUOlxuJiM0MztcdFx0cmV0dXJuIHhmc19pb2Nfd3JpdGVfc3RyZWFtX2dldChYRlNfSShmaWxlX2lub2RlKGZpbHApKSxcbiYjNDM7XHRcdFx0XHRcdFx0KHZvaWQgX191c2VyICopYXJnKTtcbiYjNDM7XHRjYXNlIEZTX0lPQ19XUklURV9TVFJFQU1fR0VUX01BWDpcbiYjNDM7XHRcdHJldHVybiB4ZnNfaW9jX3dyaXRlX3N0cmVhbV9nZXRfbWF4KFhGU19JKGZpbGVfaW5vZGUoZmlscCkpLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgKHZvaWQgX191c2VyICopYXJnKTtcbiBcbiBcdGRlZmF1bHQ6XG4gXHRcdHJldHVybiAtRU5PVFRZO1xuZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfaW9tYXAuYyBiL2ZzL3hmcy94ZnNfaW9tYXAuY1xuaW5kZXggMjI1YzNkZTg4ZDAzYjEuLmJmNDIzODk3ZDkxNmRmIDEwMDY0NFxuLS0tIGEvZnMveGZzL3hmc19pb21hcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy94ZnMveGZzX2lvbWFwLmNcbkBAIC0xNDQsNiAmIzQzOzE0NCw3IEBAIHhmc19ibWJ0X3RvX2lvbWFwKFxuIFx0fVxuIFx0aW9tYXAtXHUwMDNlb2Zmc2V0ID0gWEZTX0ZTQl9UT19CKG1wLCBpbWFwLVx1MDAzZWJyX3N0YXJ0b2ZmKTtcbiBcdGlvbWFwLVx1MDAzZWxlbmd0aCA9IFhGU19GU0JfVE9fQihtcCwgaW1hcC1cdTAwM2Vicl9ibG9ja2NvdW50KTtcbiYjNDM7XHRpb21hcC1cdTAwM2V3cml0ZV9zdHJlYW0gPSBpcC1cdTAwM2VpX3dyaXRlX3N0cmVhbTtcbiBcdGlmIChtYXBwaW5nX2ZsYWdzIFx1MDAyNiBJT01BUF9EQVgpIHtcbiBcdFx0aW9tYXAtXHUwMDNlZGF4X2RldiA9IHRhcmdldC1cdTAwM2VidF9kYXhkZXY7XG4gXHR9IGVsc2Uge1xuZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfbW91bnQuaCBiL2ZzL3hmcy94ZnNfbW91bnQuaFxuaW5kZXggNjZhMDJkMWI5YWQ3YTEuLmFkNTExMTU1OTRkM2M4IDEwMDY0NFxuLS0tIGEvZnMveGZzL3hmc19tb3VudC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy94ZnMveGZzX21vdW50LmhcbkBAIC00NSw2ICYjNDM7NDUsOCBAQCBlbnVtIHtcbiBcbiAjZGVmaW5lIFhGU19FUlJfUkVUUllfRk9SRVZFUlx0LTFcbiBcbiYjNDM7I2RlZmluZSBYRlNfU1dfV1JJVEVfU1RSRUFNU19NQVhcdDE2XG4mIzQzO1xuIC8qXG4gICogQWx0aG91Z2ggcmV0cnlfdGltZW91dCBpcyBpbiBqaWZmaWVzIHdoaWNoIGlzIG5vcm1hbGx5IGFuIHVuc2lnbmVkIGxvbmcsXG4gICogd2UgbGltaXQgdGhlIHJldHJ5IHRpbWVvdXQgdG8gODY0MDAgc2Vjb25kcywgb3Igb25lIGRheS4gIFNvIGV2ZW4gYVxuQEAgLTM0OSw2ICYjNDM7MzUxLDkgQEAgdHlwZWRlZiBzdHJ1Y3QgeGZzX21vdW50IHtcbiBcbiBcdC8qIEluZGV4IG9mIHV1aWQgcmVjb3JkIGluIHRoZSB1dWlkIHhhcnJheS4gKi9cbiBcdHVuc2lnbmVkIGludFx0XHRtX3V1aWRfdGFibGVfaW5kZXg7XG4mIzQzO1xuJiM0MztcdHVuc2lnbmVkIGxvbmdcdFx0Km1fc3RyZWFtc19pbl91c2U7XG4mIzQzO1x0c3BpbmxvY2tfdFx0XHRtX3N0cmVhbXNfbG9jaztcbiB9IHhmc19tb3VudF90O1xuIFxuICNkZWZpbmUgTV9JR0VPKG1wKVx0XHQoXHUwMDI2KG1wKS1cdTAwM2VtX2lub19nZW8pXG5kaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19zdXBlci5jIGIvZnMveGZzL3hmc19zdXBlci5jXG5pbmRleCA4NTMxZDUyNmZjNDQwOS4uZDY5OGJlNTA0YzQ1NDggMTAwNjQ0XG4tLS0gYS9mcy94ZnMveGZzX3N1cGVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3hmcy94ZnNfc3VwZXIuY1xuQEAgLTgwNSw2ICYjNDM7ODA1LDcgQEAgeGZzX21vdW50X2ZyZWUoXG4gI2lmZGVmIERFQlVHXG4gXHRrZnJlZShtcC1cdTAwM2VtX2Vycm9ydGFnKTtcbiAjZW5kaWZcbiYjNDM7XHRiaXRtYXBfZnJlZShtcC1cdTAwM2VtX3N0cmVhbXNfaW5fdXNlKTtcbiBcdGtmcmVlKG1wKTtcbiB9XG4gXG5AQCAtMTY1OSw2ICYjNDM7MTY2MCw3IEBAIHhmc19mc19maWxsX3N1cGVyKFxuIFx0c3RydWN0IHhmc19tb3VudFx0Km1wID0gc2ItXHUwMDNlc19mc19pbmZvO1xuIFx0c3RydWN0IGlub2RlXHRcdCpyb290O1xuIFx0aW50XHRcdFx0ZmxhZ3MgPSAwLCBlcnJvcjtcbiYjNDM7XHRpbnRcdFx0XHRucl9zdHJlYW1zO1xuIFxuIFx0bXAtXHUwMDNlbV9zdXBlciA9IHNiO1xuIFxuQEAgLTE3MDgsNiAmIzQzOzE3MTAsMTUgQEAgeGZzX2ZzX2ZpbGxfc3VwZXIoXG4gXHRpZiAoZXJyb3IpXG4gXHRcdHJldHVybiBlcnJvcjtcbiBcbiYjNDM7XHRucl9zdHJlYW1zID0gYmRldl9tYXhfd3JpdGVfc3RyZWFtcyhtcC1cdTAwM2VtX2RkZXZfdGFyZ3AtXHUwMDNlYnRfYmRldik7XG4mIzQzO1x0aWYgKCFucl9zdHJlYW1zKVxuJiM0MztcdFx0bnJfc3RyZWFtcyA9IFhGU19TV19XUklURV9TVFJFQU1TX01BWDtcbiYjNDM7XHRtcC1cdTAwM2VtX3N0cmVhbXNfaW5fdXNlID0gYml0bWFwX3phbGxvYyhucl9zdHJlYW1zLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRpZiAoIW1wLVx1MDAzZW1fc3RyZWFtc19pbl91c2UpIHtcbiYjNDM7XHRcdGVycm9yID0gLUVOT01FTTtcbiYjNDM7XHRcdGdvdG8gb3V0X3NodXRkb3duX2RldmljZXM7XG4mIzQzO1x0fVxuJiM0MztcbiBcdGlmICh4ZnNfZGVidWdmcykge1xuIFx0XHRtcC1cdTAwM2VtX2RlYnVnZnMgPSB4ZnNfZGVidWdmc19ta2RpcihtcC1cdTAwM2VtX3N1cGVyLVx1MDAzZXNfaWQsXG4gXHRcdFx0XHRcdFx0ICB4ZnNfZGVidWdmcyk7XG5AQCAtMjI0OSw2ICYjNDM7MjI2MCw3IEBAIHhmc19pbml0X2ZzX2NvbnRleHQoXG4gI2VuZGlmXG4gXG4gXHRzcGluX2xvY2tfaW5pdChcdTAwMjZtcC1cdTAwM2VtX3NiX2xvY2spO1xuJiM0MztcdHNwaW5fbG9ja19pbml0KFx1MDAyNm1wLVx1MDAzZW1fc3RyZWFtc19sb2NrKTtcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIFhHX1RZUEVfTUFYOyBpJiM0MzsmIzQzOylcbiBcdFx0eGFfaW5pdChcdTAwMjZtcC1cdTAwM2VtX2dyb3Vwc1tpXS54YSk7XG4gXHRtdXRleF9pbml0KFx1MDAyNm1wLVx1MDAzZW1fZ3Jvd2xvY2spO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaW9tYXAuaCBiL2luY2x1ZGUvbGludXgvaW9tYXAuaFxuaW5kZXggNTZiNDNkNTk0ZTZlMjkuLjRkYzcxZGE1OThmOTlkIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9pb21hcC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2lvbWFwLmhcbkBAIC0xMzIsNiAmIzQzOzEzMiw4IEBAIHN0cnVjdCBpb21hcCB7XG4gXHR1NjRcdFx0XHRsZW5ndGg7XHQvKiBsZW5ndGggb2YgbWFwcGluZywgYnl0ZXMgKi9cbiBcdHUxNlx0XHRcdHR5cGU7XHQvKiB0eXBlIG9mIG1hcHBpbmcgKi9cbiBcdHUxNlx0XHRcdGZsYWdzO1x0LyogZmxhZ3MgZm9yIG1hcHBpbmcgKi9cbiYjNDM7XHR1MTZcdFx0XHR3cml0ZV9zdHJlYW07IC8qIHdyaXRlIHN0cmVhbSBmb3IgSS9PICovXG4mIzQzO1x0LyogMiBieXRlcyBwYWRkaW5nIGhvbGUgaGVyZSAqL1xuIFx0c3RydWN0IGJsb2NrX2RldmljZVx0KmJkZXY7XHQvKiBibG9jayBkZXZpY2UgZm9yIEkvTyAqL1xuIFx0c3RydWN0IGRheF9kZXZpY2VcdCpkYXhfZGV2OyAvKiBkYXhfZGV2IGZvciBkYXggb3BlcmF0aW9ucyAqL1xuIFx0dm9pZFx0XHRcdCppbmxpbmVfZGF0YTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvZnMuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9mcy5oXG5pbmRleCBiZDg3MjYyZjJlMzQ5NC4uYTc1NmQyN2JkZjg0MTcgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvZnMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS91YXBpL2xpbnV4L2ZzLmhcbkBAIC0zNDUsNiAmIzQzOzM0NSwyMiBAQCBzdHJ1Y3QgZmlsZV9hdHRyIHtcbiAvKiBHZXQgbG9naWNhbCBibG9jayBtZXRhZGF0YSBjYXBhYmlsaXR5IGRldGFpbHMgKi9cbiAjZGVmaW5lIEZTX0lPQ19HRVRMQk1EX0NBUFx0XHRfSU9XUigweDE1LCAyLCBzdHJ1Y3QgbG9naWNhbF9ibG9ja19tZXRhZGF0YV9jYXApXG4gXG4mIzQzO3N0cnVjdCBmc193cml0ZV9zdHJlYW1fb3BlbiB7XG4mIzQzO1x0X191MzJcdFx0c3RyZWFtX2lkO1x0LyogSU46IHJlcXVlc3RlZCBpZCBpZiBPUEVOX0VYQUNUIHNldDsgT1VUOiBhc3NpZ25lZCBpZCAqL1xuJiM0MztcdF9fdTMyXHRcdGZsYWdzO1x0XHQvKiBJTjogRlNfV1JJVEVfU1RSRUFNX09QRU5fKiAqL1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogRmxhZyB0byBhc2sgZm9yIHNwZWNpZmljIHN0cmVhbV9pZCwgb3RoZXJ3aXNlIGtlcm5lbCBjYW4gcmV0dXJuIGFueS5cbiYjNDM7ICogRmFpbHMgd2l0aCAtRUJVU1kgaWYgdGhhdCBzdHJlYW1faWQgaXMgYWxyZWFkeSBoZWxkXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIEZTX1dSSVRFX1NUUkVBTV9PUEVOX0VYQUNUXHQoMSBcdTAwM2NcdTAwM2MgMClcbiYjNDM7XG4mIzQzOyNkZWZpbmUgRlNfSU9DX1dSSVRFX1NUUkVBTV9HRVRfTUFYXHRfSU9SKCYjMzk7ZiYjMzk7LCAxMzUsIF9fdTMyKVxuJiM0MzsjZGVmaW5lIEZTX0lPQ19XUklURV9TVFJFQU1fT1BFTlx0X0lPV1IoJiMzOTtmJiMzOTssIDEzNiwgc3RydWN0IGZzX3dyaXRlX3N0cmVhbV9vcGVuKVxuJiM0MzsjZGVmaW5lIEZTX0lPQ19XUklURV9TVFJFQU1fU0VUXHRcdF9JT1coJiMzOTtmJiMzOTssIDEzNywgX19zMzIpXG4mIzQzOyNkZWZpbmUgRlNfSU9DX1dSSVRFX1NUUkVBTV9HRVRcdFx0X0lPUigmIzM5O2YmIzM5OywgMTM4LCBfX3UzMilcbiYjNDM7XG4gLypcbiAgKiBJbm9kZSBmbGFncyAoRlNfSU9DX0dFVEZMQUdTIC8gRlNfSU9DX1NFVEZMQUdTKVxuICAqXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTcgMTY6MDY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7WEZTX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7eGZzX2lvY193cml0ZV9zdHJlYW1fb3BlbiYjMzQ7LAogICAgJiMzNDt4ZnNfaW9jX3dyaXRlX3N0cmVhbV9zZXQmIzM0OywKICAgICYjMzQ7eGZzX2lvY193cml0ZV9zdHJlYW1fZ2V0JiMzNDssCiAgICAmIzM0O3hmc19pb2Nfd3JpdGVfc3RyZWFtX2dldF9tYXgmIzM0OywKICAgICYjMzQ7eGZzX2lub2RlX3dyaXRlX3N0cmVhbV9vcGVuJiMzNDssCiAgICAmIzM0O3hmc19pbm9kZV9zZXRfd3JpdGVfc3RyZWFtJiMzNDssCiAgICAmIzM0O3hmc19pbm9kZV9nZXRfd3JpdGVfc3RyZWFtJiMzNDssCiAgICAmIzM0O3hmc19pbm9kZV9tYXhfd3JpdGVfc3RyZWFtcyYjMzQ7LAogICAgJiMzNDt4ZnNfd3JpdGVfc3RyZWFtX3JlbGVhc2UmIzM0OywKICAgICYjMzQ7eGZzX2lub2RlX3dyaXRlX3N0cmVhbV9hZ19zZXQmIzM0OywKICAgICYjMzQ7eGZzX2FnX3RvX2FnX3NldCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIHdyaXRlIHN0cmVhbXMgc3VwcG9ydCB0byBYRlMgYW5kIGlvbWFwLCBpbmNsdWRpbmcgbmV3IGlvY3RscyBmb3IgbWFuYWdpbmcgd3JpdGUgc3RyZWFtcyBhbmQgbW9kaWZpY2F0aW9ucyB0byBibG9jayBhbGxvY2F0aW9uIGxvZ2ljIHRvIGZhbiBvdXQgYWxsb2NhdGlvbnMgYWNyb3NzIEFHcyBiYXNlZCBvbiB0aGUgc3RyZWFtIElELiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBtb2RpZmllcyBjb3JlIGZpbGVzeXN0ZW0gbG9naWMgYW5kIGludHJvZHVjZXMgbmV3IHVzZXItZmFjaW5nIEFQSXMsIG1ha2luZyBpdCBhIHByaW1lIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgM2YxOWY5Y2QxYTRlNTQ0N2VhZDFlY2Q3ODMzNWY3MGJiMzNhMzNhNApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgSnVsIDE3IDE2OjA2OjAyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvaW9tYXAvZGlyZWN0LWlvLmMgYi9mcy9pb21hcC9kaXJlY3QtaW8uYwppbmRleCBlMmNkNWY5MmJhYmVkYi4uYjc3NzFhMjVjMWM3OWYgMTAwNjQ0Ci0tLSBhL2ZzL2lvbWFwL2RpcmVjdC1pby5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2lvbWFwL2RpcmVjdC1pby5jCkBAIC0zNDgsNiAmIzQzOzM0OCw3IEBAIHN0YXRpYyBzc2l6ZV90IGlvbWFwX2Rpb19iaW9faXRlcl9vbmUoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsCiAJZnNjcnlwdF9zZXRfYmlvX2NyeXB0X2N0eChiaW8sIGl0ZXItJmd0O2lub2RlLCBwb3MsIEdGUF9LRVJORUwpOwogCWJpby0mZ3Q7YmlfaXRlci5iaV9zZWN0b3IgPSBpb21hcF9zZWN0b3IoJmFtcDtpdGVyLSZndDtpb21hcCwgcG9zKTsKIAliaW8tJmd0O2JpX3dyaXRlX2hpbnQgPSBpdGVyLSZndDtpbm9kZS0mZ3Q7aV93cml0ZV9oaW50OwomIzQzOwliaW8tJmd0O2JpX3dyaXRlX3N0cmVhbSA9IGl0ZXItJmd0O2lvbWFwLndyaXRlX3N0cmVhbTsKIAliaW8tJmd0O2JpX2lvcHJpbyA9IGRpby0mZ3Q7aW9jYi0mZ3Q7a2lfaW9wcmlvOwogCWJpby0mZ3Q7YmlfcHJpdmF0ZSA9IGRpbzsKIAliaW8tJmd0O2JpX2VuZF9pbyA9IGlvbWFwX2Rpb19iaW9fZW5kX2lvOwpkaWZmIC0tZ2l0IGEvZnMvaW9tYXAvaW9lbmQuYyBiL2ZzL2lvbWFwL2lvZW5kLmMKaW5kZXggMDU2NTMyODc2NGMxNzUuLjVlYTJjNjg5OTNjZjkzIDEwMDY0NAotLS0gYS9mcy9pb21hcC9pb2VuZC5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2lvbWFwL2lvZW5kLmMKQEAgLTE2NSw2ICYjNDM7MTY1LDcgQEAgc3RhdGljIHN0cnVjdCBpb21hcF9pb2VuZCAqaW9tYXBfYWxsb2NfaW9lbmQoc3RydWN0IGlvbWFwX3dyaXRlcGFnZV9jdHggKndwYywKIAkJCSAgICAgICBHRlBfTk9GUywgJmFtcDtpb21hcF9pb2VuZF9iaW9zZXQpOwogCWJpby0mZ3Q7YmlfaXRlci5iaV9zZWN0b3IgPSBpb21hcF9zZWN0b3IoJmFtcDt3cGMtJmd0O2lvbWFwLCBwb3MpOwogCWJpby0mZ3Q7Ymlfd3JpdGVfaGludCA9IHdwYy0mZ3Q7aW5vZGUtJmd0O2lfd3JpdGVfaGludDsKJiM0MzsJYmlvLSZndDtiaV93cml0ZV9zdHJlYW0gPSB3cGMtJmd0O2lvbWFwLndyaXRlX3N0cmVhbTsKIAl3YmNfaW5pdF9iaW8od3BjLSZndDt3YmMsIGJpbyk7CiAJd3BjLSZndDtucl9mb2xpb3MgPSAwOwogCXJldHVybiBpb21hcF9pbml0X2lvZW5kKHdwYy0mZ3Q7aW5vZGUsIGJpbywgcG9zLCBpb2VuZF9mbGFncyk7CkBAIC0xODgsNiAmIzQzOzE4OSw4IEBAIHN0YXRpYyBib29sIGlvbWFwX2Nhbl9hZGRfdG9faW9lbmQoc3RydWN0IGlvbWFwX3dyaXRlcGFnZV9jdHggKndwYywgbG9mZl90IHBvcywKIAlpZiAoISh3cGMtJmd0O2lvbWFwLmZsYWdzICZhbXA7IElPTUFQX0ZfQU5PTl9XUklURSkgJmFtcDsmYW1wOwogCSAgICBpb21hcF9zZWN0b3IoJmFtcDt3cGMtJmd0O2lvbWFwLCBwb3MpICE9IGJpb19lbmRfc2VjdG9yKCZhbXA7aW9lbmQtJmd0O2lvX2JpbykpCiAJCXJldHVybiBmYWxzZTsKJiM0MzsJaWYgKHdwYy0mZ3Q7aW9tYXAud3JpdGVfc3RyZWFtICE9IGlvZW5kLSZndDtpb19iaW8uYmlfd3JpdGVfc3RyZWFtKQomIzQzOwkJcmV0dXJuIGZhbHNlOwogCS8qCiAJICogTGltaXQgaW9lbmQgYmlvIGNoYWluIGxlbmd0aHMgdG8gbWluaW1pc2UgSU8gY29tcGxldGlvbiBsYXRlbmN5LiBUaGlzCiAJICogYWxzbyBwcmV2ZW50cyBsb25nIHRpZ2h0IGxvb3BzIGVuZGluZyBwYWdlIHdyaXRlYmFjayBvbiBhbGwgdGhlCmRpZmYgLS1naXQgYS9mcy94ZnMvbGlieGZzL3hmc19ibWFwLmMgYi9mcy94ZnMvbGlieGZzL3hmc19ibWFwLmMKaW5kZXggZDY0ZGVmZWRhNjQ1ZWQuLjg3MmE0YWJkMjMxNTdjIDEwMDY0NAotLS0gYS9mcy94ZnMvbGlieGZzL3hmc19ibWFwLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMveGZzL2xpYnhmcy94ZnNfYm1hcC5jCkBAIC0zMTkyLDYgJiM0MzszMTkyLDcyIEBAIHhmc19ibWFwX3NlbGVjdF9taW5sZW4oCiAJcmV0dXJuIGFyZ3MtJmd0O21heGxlbjsKIH0KIAomIzQzOyNkZWZpbmUJR0VORVJJQ19BR19TRVRfU1oJKDIpCiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSB4ZnNfYWdudW1iZXJfdAomIzQzO3hmc19kZWZhdWx0X2FnX3NldF9zaXplKAomIzQzOwlzdHJ1Y3QgeGZzX2lub2RlCSppcCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB4ZnNfbW91bnQJKm1wID0gaXAtJmd0O2lfbW91bnQ7CiYjNDM7CiYjNDM7CXJldHVybiBtaW5fdCh4ZnNfYWdudW1iZXJfdCwgR0VORVJJQ19BR19TRVRfU1osIG1wLSZndDttX3NiLnNiX2FnY291bnQpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgeGZzX2FnbnVtYmVyX3QKJiM0Mzt4ZnNfaW5vZGVfd3JpdGVfc3RyZWFtX2FnX3NldCgKJiM0MzsJc3RydWN0IHhmc19pbm9kZQkqaXAsCiYjNDM7CXhmc19hZ251bWJlcl90CQkqdGFyZ2V0X2Fnbm8pCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeGZzX21vdW50CSptcCA9IGlwLSZndDtpX21vdW50OwomIzQzOwl1aW50MzJfdAkJbnJfc3RyZWFtcyA9IHhmc19pbm9kZV9tYXhfd3JpdGVfc3RyZWFtcyhpcCk7CiYjNDM7CXVpbnQzMl90CQlzdHJlYW1faWQgPSBpcC0mZ3Q7aV93cml0ZV9zdHJlYW07CiYjNDM7CXVpbnQzMl90CQlucl9hZ3MgPSBtcC0mZ3Q7bV9zYi5zYl9hZ2NvdW50OwomIzQzOwl4ZnNfYWdudW1iZXJfdAkJc2V0X3NpemU7CiYjNDM7CiYjNDM7CiYjNDM7CWlmICghbnJfc3RyZWFtcykKJiM0MzsJCXJldHVybiB4ZnNfZGVmYXVsdF9hZ19zZXRfc2l6ZShpcCk7CiYjNDM7CiYjNDM7CXN0cmVhbV9pZCAtPSAxOyAvKiBGb3IgMC1iYXNlZCBtYXRoOyBzdHJlYW0taWRzIGFyZSAxLWJhc2VkICovCiYjNDM7CXNldF9zaXplID0gbnJfYWdzIC8gbnJfc3RyZWFtczsKJiM0MzsKJiM0MzsJaWYgKHNldF9zaXplKSB7CiYjNDM7CQkqdGFyZ2V0X2Fnbm8gPSBzdHJlYW1faWQgKiBzZXRfc2l6ZTsKJiM0MzsJCS8qIHVuZXZlbiBkaXN0cmlidXRpb24sIGxhc3Qgc3RyZWFtIHdpbGwgY292ZXIgZXh0cmEgQUdzICovCiYjNDM7CQlpZiAoc3RyZWFtX2lkID09IG5yX3N0cmVhbXMgLSAxKQomIzQzOwkJCXNldF9zaXplID0gbnJfYWdzIC0gKnRhcmdldF9hZ25vOwomIzQzOwl9IGVsc2UgewomIzQzOwkJLyogZm9yIHRoZSBjYXNlIHdoZW4gd2UgaGF2ZSBmZXdlciBBR3MgdGhhbiBzdHJlYW1zICovCiYjNDM7CQkqdGFyZ2V0X2Fnbm8gPSBzdHJlYW1faWQgJSBucl9hZ3M7CiYjNDM7CQlzZXRfc2l6ZSA9IDE7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIHNldF9zaXplOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgeGZzX2FnbnVtYmVyX3QKJiM0Mzt4ZnNfYWdfdG9fYWdfc2V0KAomIzQzOwlzdHJ1Y3QgeGZzX2JtYWxsb2NhCSphcCwKJiM0MzsJeGZzX2FnbnVtYmVyX3QJCWJhc2VfYWdubykKJiM0Mzt7CiYjNDM7CXN0cnVjdCB4ZnNfaW5vZGUJKmlwID0gYXAtJmd0O2lwOwomIzQzOwlzdHJ1Y3QgeGZzX21vdW50CSptcCA9IGlwLSZndDtpX21vdW50OwomIzQzOwl4ZnNfYWdudW1iZXJfdAkJc2V0X3NpemU7CiYjNDM7CiYjNDM7CS8qIEFwcGx5IGZhbm5pbmcgb25seSBmb3IgcmVndWxhciBmaWxlIGRhdGEgKi8KJiM0MzsJaWYgKCEoYXAtJmd0O2RhdGF0eXBlICZhbXA7IFhGU19BTExPQ19VU0VSREFUQSkpCiYjNDM7CQlyZXR1cm4gYmFzZV9hZ25vOwomIzQzOwomIzQzOwlpZiAoaXAtJmd0O2lfd3JpdGVfc3RyZWFtKQomIzQzOwkJc2V0X3NpemUgPSB4ZnNfaW5vZGVfd3JpdGVfc3RyZWFtX2FnX3NldChpcCwgJmFtcDtiYXNlX2Fnbm8pOwomIzQzOwllbHNlCiYjNDM7CQlzZXRfc2l6ZSA9IHhmc19kZWZhdWx0X2FnX3NldF9zaXplKGlwKTsKJiM0MzsKJiM0MzsJLyogRmFuIG91dCB3aXRoaW4gdGhlIEFHIHNldCB1c2luZyBsb3cgYml0cyBvZiB0aGUgaW5vZGUgKi8KJiM0MzsJcmV0dXJuIChiYXNlX2Fnbm8gJiM0MzsgKFhGU19JTk9fVE9fQUdJTk8obXAsIElfSU5PKGlwKSkgJSBzZXRfc2l6ZSkpICUKJiM0MzsJCW1wLSZndDttX3NiLnNiX2FnY291bnQ7CiYjNDM7fQomIzQzOwogc3RhdGljIGludAogeGZzX2JtYXBfYnRhbGxvY19zZWxlY3RfbGVuZ3RocygKIAlzdHJ1Y3QgeGZzX2JtYWxsb2NhCSphcCwKQEAgLTM1ODcsOCAmIzQzOzM2NTMsMTYgQEAgeGZzX2JtYXBfYnRhbGxvY19iZXN0X2xlbmd0aCgKIHsKIAl4ZnNfZXh0bGVuX3QJCWJsZW4gPSAwOwogCWludAkJCWVycm9yOwomIzQzOwl4ZnNfYWdudW1iZXJfdAkJdGFyZ2V0X2FnLCBzdGFydF9hZzsKIAogCWFwLSZndDtibGtubyA9IFhGU19JTk9ERV9UT19GU0IoYXAtJmd0O2lwKTsKJiM0MzsKJiM0MzsJLyogZmFuIG91dCBpbml0aWFsIEFHIGFjcm9zcyB0aGUgZ2VuZXJpYyBBRyBzZXQgKi8KJiM0MzsJc3RhcnRfYWcgPSBYRlNfRlNCX1RPX0FHTk8oYXJncy0mZ3Q7bXAsIGFwLSZndDtibGtubyk7CiYjNDM7CXRhcmdldF9hZyA9IHhmc19hZ190b19hZ19zZXQoYXAsIHN0YXJ0X2FnKTsKJiM0MzsJaWYgKHRhcmdldF9hZyAhPSBzdGFydF9hZykKJiM0MzsJCWFwLSZndDtibGtubyA9IFhGU19BR0JfVE9fRlNCKGFyZ3MtJmd0O21wLCB0YXJnZXRfYWcsIDApOwomIzQzOwogCWlmICgheGZzX2JtYXBfYWRqYWNlbnQoYXApKQogCQlhcC0mZ3Q7ZW9mID0gZmFsc2U7CiAKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfaWNhY2hlLmMgYi9mcy94ZnMveGZzX2ljYWNoZS5jCmluZGV4IDlkOGRkMzBiZDkyN2EyLi43YjlkZGE3NDEyMmYwZSAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19pY2FjaGUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy94ZnMveGZzX2ljYWNoZS5jCkBAIC0xMjksNiAmIzQzOzEyOSw3IEBAIHhmc19pbm9kZV9hbGxvYygKIAlzcGluX2xvY2tfaW5pdCgmYW1wO2lwLSZndDtpX2lvZW5kX2xvY2spOwogCWlwLSZndDtpX25leHRfdW5saW5rZWQgPSBOVUxMQUdJTk87CiAJaXAtJmd0O2lfcHJldl91bmxpbmtlZCA9IDA7CiYjNDM7CWlwLSZndDtpX3dyaXRlX3N0cmVhbSA9IDA7CiAKIAlyZXR1cm4gaXA7CiB9CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2lub2RlLmMgYi9mcy94ZnMveGZzX2lub2RlLmMKaW5kZXggMTUyNzlkMjJhODk0ZmEuLjYzOGJlZTNlNGFjMjI4IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2lub2RlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMveGZzL3hmc19pbm9kZS5jCkBAIC00LDYgJiM0Mzs0LDcgQEAKICAqIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKi8KICNpbmNsdWRlICZsdDtsaW51eC9pdmVyc2lvbi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9hbm9uX2lub2Rlcy5oJmd0OwogCiAjaW5jbHVkZSAmIzM0O3hmc19wbGF0Zm9ybS5oJiMzNDsKICNpbmNsdWRlICYjMzQ7eGZzX2ZzLmgmIzM0OwpAQCAtNDcsNiAmIzQzOzQ4LDE4MCBAQAogCiBzdHJ1Y3Qga21lbV9jYWNoZSAqeGZzX2lub2RlX2NhY2hlOwogCiYjNDM7aW50CiYjNDM7eGZzX2lub2RlX21heF93cml0ZV9zdHJlYW1zKAomIzQzOwlzdHJ1Y3QgeGZzX2lub2RlCSppcCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBibG9ja19kZXZpY2UJKmJkZXY7CiYjNDM7CXN0cnVjdCB4ZnNfbW91bnQJKm1wID0gaXAtJmd0O2lfbW91bnQ7CiYjNDM7CWludCBucl9zdHJlYW1zOwomIzQzOwl4ZnNfYWdudW1iZXJfdCBucl9hZ3MsIGFnX3NldF9zaXplOwomIzQzOwlib29sCQkJaXNfZmlsZXN0cmVhbSwgaXNfcmVhbHRpbWU7CiYjNDM7CiYjNDM7CXhmc19pbG9jayhpcCwgWEZTX0lMT0NLX1NIQVJFRCk7CiYjNDM7CWlzX2ZpbGVzdHJlYW0gPSB4ZnNfaW5vZGVfaXNfZmlsZXN0cmVhbShpcCk7CiYjNDM7CWlzX3JlYWx0aW1lID0gWEZTX0lTX1JFQUxUSU1FX0lOT0RFKGlwKTsKJiM0MzsJYmRldiA9IHhmc19pbm9kZV9idWZ0YXJnKGlwKS0mZ3Q7YnRfYmRldjsKJiM0MzsJeGZzX2l1bmxvY2soaXAsIFhGU19JTE9DS19TSEFSRUQpOwomIzQzOwomIzQzOwlpZiAoIWJkZXYgfHwgaXNfZmlsZXN0cmVhbSB8fCBpc19yZWFsdGltZSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlucl9zdHJlYW1zID0gYmRldl9tYXhfd3JpdGVfc3RyZWFtcyhiZGV2KTsKJiM0MzsJaWYgKG5yX3N0cmVhbXMgJmd0OyAwKQomIzQzOwkJcmV0dXJuIG5yX3N0cmVhbXM7CiYjNDM7CS8qCiYjNDM7CSAqIEVuYWJsZSBzb2Z0d2FyZS1vbmx5IHN0cmVhbXMgaWYgaGFyZHdhcmUgc3RyZWFtcyBhcmUgbm90IGF2YWlsYWJsZS4KJiM0MzsJICogVGhpcyBoZWxwcyB0bwomIzQzOwkgKiAtIGltcHJvdmUgaXNvbGF0aW9uOyByZWR1Y2UgYWxsb2NhdGlvbiBpbnRlcmxlYXZpbmcuCiYjNDM7CSAqIC0gaW1wcm92ZSBjb25jdXJyZW5jeSB1c2luZyBBRy1zZXQgYmFzZWQgc3RlZXJpbmcgd2l0aGluIGFuZCBhY3Jvc3Mgc3RyZWFtcy4KJiM0MzsJICovCiYjNDM7CW5yX2FncyA9IG1wLSZndDttX3NiLnNiX2FnY291bnQ7CiYjNDM7CWlmIChucl9hZ3MgJmd0Oz0gMTYpCiYjNDM7CQlhZ19zZXRfc2l6ZSA9IDQ7CiYjNDM7CWVsc2UgaWYgKG5yX2FncyAmZ3Q7PSA4KQomIzQzOwkJYWdfc2V0X3NpemUgPSAyOwomIzQzOwllbHNlCiYjNDM7CQlhZ19zZXRfc2l6ZSA9IDE7CiYjNDM7CW5yX3N0cmVhbXMgPSBucl9hZ3MgLyBhZ19zZXRfc2l6ZTsKJiM0MzsJcmV0dXJuIG1pbl90KHVpbnQxNl90LCBucl9zdHJlYW1zLCBYRlNfU1dfV1JJVEVfU1RSRUFNU19NQVgpOwomIzQzO30KJiM0MzsKJiM0Mzt1aW50MTZfdAomIzQzO3hmc19pbm9kZV9nZXRfd3JpdGVfc3RyZWFtKAomIzQzOwlzdHJ1Y3QgeGZzX2lub2RlCSppcCkKJiM0Mzt7CiYjNDM7CXVpbnQxNl90CXN0cmVhbV9pZDsKJiM0MzsKJiM0MzsJeGZzX2lsb2NrKGlwLCBYRlNfSUxPQ0tfU0hBUkVEKTsKJiM0MzsJc3RyZWFtX2lkID0gaXAtJmd0O2lfd3JpdGVfc3RyZWFtOwomIzQzOwl4ZnNfaXVubG9jayhpcCwgWEZTX0lMT0NLX1NIQVJFRCk7CiYjNDM7CiYjNDM7CXJldHVybiBzdHJlYW1faWQ7CiYjNDM7fQomIzQzOwomIzQzO3N0cnVjdCB4ZnNfd3JpdGVfc3RyZWFtIHsKJiM0MzsJc3RydWN0IHhmc19tb3VudAkqbXA7CiYjNDM7CXVpbnQxNl90CQlzdHJlYW1faWQ7CS8qIDEtYmFzZWQgKi8KJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBpbnQKJiM0Mzt4ZnNfd3JpdGVfc3RyZWFtX3JlbGVhc2UoCiYjNDM7CXN0cnVjdCBpbm9kZQkJKmlub2RlLAomIzQzOwlzdHJ1Y3QgZmlsZQkJKmZpbGUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeGZzX3dyaXRlX3N0cmVhbQkqd3MgPSBmaWxlLSZndDtwcml2YXRlX2RhdGE7CiYjNDM7CXN0cnVjdCB4ZnNfbW91bnQJKm1wID0gd3MtJmd0O21wOwomIzQzOwomIzQzOwlzcGluX2xvY2soJmFtcDttcC0mZ3Q7bV9zdHJlYW1zX2xvY2spOwomIzQzOwljbGVhcl9iaXQod3MtJmd0O3N0cmVhbV9pZCAtIDEsIG1wLSZndDttX3N0cmVhbXNfaW5fdXNlKTsKJiM0MzsJc3Bpbl91bmxvY2soJmFtcDttcC0mZ3Q7bV9zdHJlYW1zX2xvY2spOwomIzQzOwlrZnJlZSh3cyk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB4ZnNfd3JpdGVfc3RyZWFtX2ZvcHMgPSB7CiYjNDM7CS5yZWxlYXNlCT0geGZzX3dyaXRlX3N0cmVhbV9yZWxlYXNlLAomIzQzOwkubGxzZWVrCQk9IG5vb3BfbGxzZWVrLAomIzQzO307CiYjNDM7CiYjNDM7aW50CiYjNDM7eGZzX2lub2RlX3dyaXRlX3N0cmVhbV9vcGVuKAomIzQzOwlzdHJ1Y3QgeGZzX2lub2RlCSppcCwKJiM0MzsJdTMyCQkJZmxhZ3MsCiYjNDM7CXUzMgkJCSpzdHJlYW1faWRwKQomIzQzO3sKJiM0MzsJc3RydWN0IHhmc19tb3VudAkqbXAgPSBpcC0mZ3Q7aV9tb3VudDsKJiM0MzsJc3RydWN0IHhmc193cml0ZV9zdHJlYW0JKndzOwomIzQzOwlpbnQJCQltYXgsIHNsb3QsIGZkLCByZXQ7CiYjNDM7CiYjNDM7CWlmIChmbGFncyAmYW1wOyB+RlNfV1JJVEVfU1RSRUFNX09QRU5fRVhBQ1QpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJbWF4ID0geGZzX2lub2RlX21heF93cml0ZV9zdHJlYW1zKGlwKTsKJiM0MzsJaWYgKCFtYXgpCiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CUFTU0VSVChtcC0mZ3Q7bV9zdHJlYW1zX2luX3VzZSk7CiYjNDM7CiYjNDM7CXdzID0ga21hbGxvYyhzaXplb2YoKndzKSwgR0ZQX0tFUk5FTCk7CiYjNDM7CWlmICghd3MpCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsKJiM0MzsJc3Bpbl9sb2NrKCZhbXA7bXAtJmd0O21fc3RyZWFtc19sb2NrKTsKJiM0MzsJaWYgKGZsYWdzICZhbXA7IEZTX1dSSVRFX1NUUkVBTV9PUEVOX0VYQUNUKSB7CiYjNDM7CQlpZiAoISpzdHJlYW1faWRwIHx8ICpzdHJlYW1faWRwICZndDsgbWF4KSB7CiYjNDM7CQkJcmV0ID0gLUVJTlZBTDsKJiM0MzsJCQlnb3RvIG91dF91bmxvY2s7CiYjNDM7CQl9CiYjNDM7CQlzbG90ID0gKnN0cmVhbV9pZHAgLSAxOwomIzQzOwkJaWYgKHRlc3RfYml0KHNsb3QsIG1wLSZndDttX3N0cmVhbXNfaW5fdXNlKSkgewomIzQzOwkJCXJldCA9IC1FQlVTWTsKJiM0MzsJCQlnb3RvIG91dF91bmxvY2s7CiYjNDM7CQl9CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlzbG90ID0gZmluZF9maXJzdF96ZXJvX2JpdChtcC0mZ3Q7bV9zdHJlYW1zX2luX3VzZSwgbWF4KTsKJiM0MzsJCWlmIChzbG90ICZndDs9IG1heCkgewomIzQzOwkJCXJldCA9IC1FQlVTWTsKJiM0MzsJCQlnb3RvIG91dF91bmxvY2s7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsJc2V0X2JpdChzbG90LCBtcC0mZ3Q7bV9zdHJlYW1zX2luX3VzZSk7CiYjNDM7CXNwaW5fdW5sb2NrKCZhbXA7bXAtJmd0O21fc3RyZWFtc19sb2NrKTsKJiM0MzsKJiM0MzsJd3MtJmd0O21wID0gbXA7CiYjNDM7CXdzLSZndDtzdHJlYW1faWQgPSBzbG90ICYjNDM7IDE7CS8qIGNvbnZlcnQgdG8gMS1iYXNlZCAqLwomIzQzOwomIzQzOwlmZCA9IGFub25faW5vZGVfZ2V0ZmQoJiMzNDtbeGZzX3dyaXRlX3N0cmVhbV0mIzM0OywgJmFtcDt4ZnNfd3JpdGVfc3RyZWFtX2ZvcHMsIHdzLAomIzQzOwkJCSAgICAgIE9fUkRPTkxZIHwgT19DTE9FWEVDKTsKJiM0MzsJaWYgKGZkICZsdDsgMCkgewomIzQzOwkJc3Bpbl9sb2NrKCZhbXA7bXAtJmd0O21fc3RyZWFtc19sb2NrKTsKJiM0MzsJCWNsZWFyX2JpdChzbG90LCBtcC0mZ3Q7bV9zdHJlYW1zX2luX3VzZSk7CiYjNDM7CQlzcGluX3VubG9jaygmYW1wO21wLSZndDttX3N0cmVhbXNfbG9jayk7CiYjNDM7CQlrZnJlZSh3cyk7CiYjNDM7CQlyZXR1cm4gZmQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJKnN0cmVhbV9pZHAgPSB3cy0mZ3Q7c3RyZWFtX2lkOwomIzQzOwlyZXR1cm4gZmQ7CiYjNDM7CiYjNDM7b3V0X3VubG9jazoKJiM0MzsJc3Bpbl91bmxvY2soJmFtcDttcC0mZ3Q7bV9zdHJlYW1zX2xvY2spOwomIzQzOwlrZnJlZSh3cyk7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO2ludAomIzQzO3hmc19pbm9kZV9zZXRfd3JpdGVfc3RyZWFtKAomIzQzOwlzdHJ1Y3QgeGZzX2lub2RlCSppcCwKJiM0MzsJaW50CQkJc3RyZWFtX2ZkKQomIzQzO3sKJiM0MzsJQ0xBU1MoZmQsIGYpKHN0cmVhbV9mZCk7CiYjNDM7CXN0cnVjdCB4ZnNfd3JpdGVfc3RyZWFtCSp3czsKJiM0MzsJaW50CQkJcmV0ID0gMDsKJiM0MzsKJiM0MzsJaWYgKCFmZF9maWxlKGYpKQomIzQzOwkJcmV0dXJuIC1FQkFERjsKJiM0MzsJaWYgKGZkX2ZpbGUoZiktJmd0O2Zfb3AgIT0gJmFtcDt4ZnNfd3JpdGVfc3RyZWFtX2ZvcHMpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJd3MgPSBmZF9maWxlKGYpLSZndDtwcml2YXRlX2RhdGE7CiYjNDM7CWlmICh3cy0mZ3Q7bXAgIT0gaXAtJmd0O2lfbW91bnQpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJeGZzX2lsb2NrKGlwLCBYRlNfSUxPQ0tfRVhDTCk7CiYjNDM7CiYjNDM7CWlmIChYRlNfSVNfUkVBTFRJTUVfSU5PREUoaXApIHx8IHhmc19pbm9kZV9pc19maWxlc3RyZWFtKGlwKSB8fAomIzQzOwkgICAgVkZTX0koaXApLSZndDtpX3dyaXRlX2hpbnQgIT0gV1JJVEVfTElGRV9OT1RfU0VUKSB7CiYjNDM7CQlyZXQgPSAtRUlOVkFMOwomIzQzOwkJZ290byBvdXRfdW5sb2NrOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlwLSZndDtpX3dyaXRlX3N0cmVhbSA9IHdzLSZndDtzdHJlYW1faWQ7CiYjNDM7b3V0X3VubG9jazoKJiM0MzsJeGZzX2l1bmxvY2soaXAsIFhGU19JTE9DS19FWENMKTsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiAvKgogICogVGhlc2UgdHdvIGFyZSB3cmFwcGVyIHJvdXRpbmVzIGFyb3VuZCB0aGUgeGZzX2lsb2NrKCkgcm91dGluZSB1c2VkIHRvCiAgKiBjZW50cmFsaXplIHNvbWUgZ3J1bmd5IGNvZGUuICBUaGV5IGFyZSB1c2VkIGluIHBsYWNlcyB0aGF0IHdpc2ggdG8gbG9jayB0aGUKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfaW5vZGUuaCBiL2ZzL3hmcy94ZnNfaW5vZGUuaAppbmRleCAzNGMxMDM4ZWJmY2RlMS4uNmFiZjgyZmZiZjgyYWMgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfaW5vZGUuaAomIzQzOyYjNDM7JiM0MzsgYi9mcy94ZnMveGZzX2lub2RlLmgKQEAgLTM3LDYgJiM0MzszNyw5IEBAIHR5cGVkZWYgc3RydWN0IHhmc19pbm9kZSB7CiAJc3RydWN0IHhmc19pZm9yawlpX2RmOwkJLyogZGF0YSBmb3JrICovCiAJc3RydWN0IHhmc19pZm9yawlpX2FmOwkJLyogYXR0cmlidXRlIGZvcmsgKi8KIAomIzQzOwkvKiBXcml0ZSBzdHJlYW0gaW5mb3JtYXRpb24gKi8KJiM0MzsJdWludDE2X3QJCWlfd3JpdGVfc3RyZWFtOwomIzQzOwogCS8qIFRyYW5zYWN0aW9uIGFuZCBsb2NraW5nIGluZm9ybWF0aW9uLiAqLwogCXN0cnVjdCB4ZnNfaW5vZGVfbG9nX2l0ZW0gKmlfaXRlbXA7CS8qIGxvZ2dpbmcgaW5mb3JtYXRpb24gKi8KIAlzdHJ1Y3Qgcndfc2VtYXBob3JlCWlfbG9jazsJCS8qIGlub2RlIGxvY2sgKi8KQEAgLTY3Myw0ICYjNDM7Njc2LDkgQEAgaW50IHhmc19pY3JlYXRlX2RxYWxsb2MoY29uc3Qgc3RydWN0IHhmc19pY3JlYXRlX2FyZ3MgKmFyZ3MsCiAJCXN0cnVjdCB4ZnNfZHF1b3QgKip1ZHFwcCwgc3RydWN0IHhmc19kcXVvdCAqKmdkcXBwLAogCQlzdHJ1Y3QgeGZzX2RxdW90ICoqcGRxcHApOwogCiYjNDM7aW50IHhmc19pbm9kZV9tYXhfd3JpdGVfc3RyZWFtcyhzdHJ1Y3QgeGZzX2lub2RlICppcCk7CiYjNDM7dWludDE2X3QgeGZzX2lub2RlX2dldF93cml0ZV9zdHJlYW0oc3RydWN0IHhmc19pbm9kZSAqaXApOwomIzQzO2ludCB4ZnNfaW5vZGVfd3JpdGVfc3RyZWFtX29wZW4oc3RydWN0IHhmc19pbm9kZSAqaXAsIHUzMiBmbGFncywKJiM0MzsJCXUzMiAqc3RyZWFtX2lkcCk7CiYjNDM7aW50IHhmc19pbm9kZV9zZXRfd3JpdGVfc3RyZWFtKHN0cnVjdCB4ZnNfaW5vZGUgKmlwLCBpbnQgc3RyZWFtX2ZkKTsKICNlbmRpZgkvKiBfX1hGU19JTk9ERV9IX18gKi8KZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfaW9jdGwuYyBiL2ZzL3hmcy94ZnNfaW9jdGwuYwppbmRleCAxYjUzNzAxYmViZWExYS4uODY0MGU2Mzg5NzY4M2YgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfaW9jdGwuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy94ZnMveGZzX2lvY3RsLmMKQEAgLTU1Nyw2ICYjNDM7NTU3LDEyIEBAIHhmc19pb2N0bF9zZXRhdHRyX3hmbGFncygKIAlib29sCQkJcnRmbGFnID0gKGZhLSZndDtmc3hfeGZsYWdzICZhbXA7IEZTX1hGTEFHX1JFQUxUSU1FKTsKIAl1aW50NjRfdAkJaV9mbGFnczI7CiAKJiM0MzsJaWYgKChmYS0mZ3Q7ZnN4X3hmbGFncyAmYW1wOyBGU19YRkxBR19GSUxFU1RSRUFNKSAmYW1wOyZhbXA7IGlwLSZndDtpX3dyaXRlX3N0cmVhbSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlpZiAocnRmbGFnICZhbXA7JmFtcDsgaXAtJmd0O2lfd3JpdGVfc3RyZWFtKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiAJaWYgKHJ0ZmxhZyAhPSBYRlNfSVNfUkVBTFRJTUVfSU5PREUoaXApKSB7CiAJCS8qIENhbiYjMzk7dCBjaGFuZ2UgcmVhbHRpbWUgZmxhZyBpZiBhbnkgZXh0ZW50cyBhcmUgYWxsb2NhdGVkLiAqLwogCQlpZiAoeGZzX2lub2RlX2hhc19maWxlZGF0YShpcCkpCkBAIC0xMjAwLDYgJiM0MzsxMjA2LDU5IEBAIHhmc19pb2N0bF9mc19jb3VudHMoCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgaW50CiYjNDM7eGZzX2lvY193cml0ZV9zdHJlYW1fb3BlbigKJiM0MzsJc3RydWN0IGZpbGUJCSpmaWxwLAomIzQzOwl2b2lkIF9fdXNlcgkJKmFyZykKJiM0Mzt7CiYjNDM7CXN0cnVjdCB4ZnNfaW5vZGUJKmlwID0gWEZTX0koZmlsZV9pbm9kZShmaWxwKSk7CiYjNDM7CXN0cnVjdCBmc193cml0ZV9zdHJlYW1fb3BlbiB3c287CiYjNDM7CWludAkJCWZkOwomIzQzOwomIzQzOwlpZiAoY29weV9mcm9tX3VzZXIoJmFtcDt3c28sIGFyZywgc2l6ZW9mKHdzbykpKQomIzQzOwkJcmV0dXJuIC1FRkFVTFQ7CiYjNDM7CiYjNDM7CWZkID0geGZzX2lub2RlX3dyaXRlX3N0cmVhbV9vcGVuKGlwLCB3c28uZmxhZ3MsICZhbXA7d3NvLnN0cmVhbV9pZCk7CiYjNDM7CWlmIChmZCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gZmQ7CiYjNDM7CiYjNDM7CWlmIChjb3B5X3RvX3VzZXIoYXJnLCAmYW1wO3dzbywgc2l6ZW9mKHdzbykpKQomIzQzOwkJcmV0dXJuIC1FRkFVTFQ7CiYjNDM7CXJldHVybiBmZDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludAomIzQzO3hmc19pb2Nfd3JpdGVfc3RyZWFtX3NldCgKJiM0MzsJc3RydWN0IGZpbGUJCSpmaWxwLAomIzQzOwl1bnNpZ25lZCBsb25nCQlhcmcpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeGZzX2lub2RlCSppcCA9IFhGU19JKGZpbGVfaW5vZGUoZmlscCkpOwomIzQzOwomIzQzOwlpZiAoIShmaWxwLSZndDtmX21vZGUgJmFtcDsgRk1PREVfV1JJVEUpKQomIzQzOwkJcmV0dXJuIC1FQkFERjsKJiM0MzsJcmV0dXJuIHhmc19pbm9kZV9zZXRfd3JpdGVfc3RyZWFtKGlwLCAoaW50KWFyZyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQKJiM0Mzt4ZnNfaW9jX3dyaXRlX3N0cmVhbV9nZXQoCiYjNDM7CXN0cnVjdCB4ZnNfaW5vZGUJKmlwLAomIzQzOwl2b2lkIF9fdXNlcgkJKmFyZykKJiM0Mzt7CiYjNDM7CV9fdTMyIHN0cmVhbV9pZCA9IHhmc19pbm9kZV9nZXRfd3JpdGVfc3RyZWFtKGlwKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHB1dF91c2VyKHN0cmVhbV9pZCwgKF9fdTMyIF9fdXNlciAqKWFyZyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQKJiM0Mzt4ZnNfaW9jX3dyaXRlX3N0cmVhbV9nZXRfbWF4KAomIzQzOwlzdHJ1Y3QgeGZzX2lub2RlCSppcCwKJiM0MzsJdm9pZCBfX3VzZXIJCSphcmcpCiYjNDM7ewomIzQzOwlfX3UzMiBucl9zdHJlYW1zID0geGZzX2lub2RlX21heF93cml0ZV9zdHJlYW1zKGlwKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHB1dF91c2VyKG5yX3N0cmVhbXMsIChfX3UzMiBfX3VzZXIgKilhcmcpOwomIzQzO30KJiM0MzsKIC8qCiAgKiBUaGVzZSBsb25nLXVudXNlZCBpb2N0bHMgd2VyZSByZW1vdmVkIGZyb20gdGhlIG9mZmljaWFsIGlvY3RsIEFQSSBpbiA1LjE3LAogICogYnV0IHJldGFpbiB0aGVzZSBkZWZpbml0aW9ucyBzbyB0aGF0IHdlIGNhbiBsb2cgd2FybmluZ3MgYWJvdXQgdGhlbS4KQEAgLTE0NjUsNiAmIzQzOzE1MjQsMTYgQEAgeGZzX2ZpbGVfaW9jdGwoCiAJCXJldHVybiB4ZnNfaW9jX2hlYWx0aF9tb25pdG9yKGZpbHAsIGFyZyk7CiAJY2FzZSBYRlNfSU9DX1ZFUklGWV9NRURJQToKIAkJcmV0dXJuIHhmc19pb2NfdmVyaWZ5X21lZGlhKGZpbHAsIGFyZyk7CiYjNDM7CWNhc2UgRlNfSU9DX1dSSVRFX1NUUkVBTV9PUEVOOgomIzQzOwkJcmV0dXJuIHhmc19pb2Nfd3JpdGVfc3RyZWFtX29wZW4oZmlscCwgKHZvaWQgX191c2VyICopYXJnKTsKJiM0MzsJY2FzZSBGU19JT0NfV1JJVEVfU1RSRUFNX1NFVDoKJiM0MzsJCXJldHVybiB4ZnNfaW9jX3dyaXRlX3N0cmVhbV9zZXQoZmlscCwgcCk7CiYjNDM7CWNhc2UgRlNfSU9DX1dSSVRFX1NUUkVBTV9HRVQ6CiYjNDM7CQlyZXR1cm4geGZzX2lvY193cml0ZV9zdHJlYW1fZ2V0KFhGU19JKGZpbGVfaW5vZGUoZmlscCkpLAomIzQzOwkJCQkJCSh2b2lkIF9fdXNlciAqKWFyZyk7CiYjNDM7CWNhc2UgRlNfSU9DX1dSSVRFX1NUUkVBTV9HRVRfTUFYOgomIzQzOwkJcmV0dXJuIHhmc19pb2Nfd3JpdGVfc3RyZWFtX2dldF9tYXgoWEZTX0koZmlsZV9pbm9kZShmaWxwKSksCiYjNDM7CQkJCQkJICAgICh2b2lkIF9fdXNlciAqKWFyZyk7CiAKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVOT1RUWTsKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfaW9tYXAuYyBiL2ZzL3hmcy94ZnNfaW9tYXAuYwppbmRleCAyMjVjM2RlODhkMDNiMS4uYmY0MjM4OTdkOTE2ZGYgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfaW9tYXAuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy94ZnMveGZzX2lvbWFwLmMKQEAgLTE0NCw2ICYjNDM7MTQ0LDcgQEAgeGZzX2JtYnRfdG9faW9tYXAoCiAJfQogCWlvbWFwLSZndDtvZmZzZXQgPSBYRlNfRlNCX1RPX0IobXAsIGltYXAtJmd0O2JyX3N0YXJ0b2ZmKTsKIAlpb21hcC0mZ3Q7bGVuZ3RoID0gWEZTX0ZTQl9UT19CKG1wLCBpbWFwLSZndDticl9ibG9ja2NvdW50KTsKJiM0MzsJaW9tYXAtJmd0O3dyaXRlX3N0cmVhbSA9IGlwLSZndDtpX3dyaXRlX3N0cmVhbTsKIAlpZiAobWFwcGluZ19mbGFncyAmYW1wOyBJT01BUF9EQVgpIHsKIAkJaW9tYXAtJmd0O2RheF9kZXYgPSB0YXJnZXQtJmd0O2J0X2RheGRldjsKIAl9IGVsc2UgewpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19tb3VudC5oIGIvZnMveGZzL3hmc19tb3VudC5oCmluZGV4IDY2YTAyZDFiOWFkN2ExLi5hZDUxMTE1NTk0ZDNjOCAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19tb3VudC5oCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3hmcy94ZnNfbW91bnQuaApAQCAtNDUsNiAmIzQzOzQ1LDggQEAgZW51bSB7CiAKICNkZWZpbmUgWEZTX0VSUl9SRVRSWV9GT1JFVkVSCS0xCiAKJiM0MzsjZGVmaW5lIFhGU19TV19XUklURV9TVFJFQU1TX01BWAkxNgomIzQzOwogLyoKICAqIEFsdGhvdWdoIHJldHJ5X3RpbWVvdXQgaXMgaW4gamlmZmllcyB3aGljaCBpcyBub3JtYWxseSBhbiB1bnNpZ25lZCBsb25nLAogICogd2UgbGltaXQgdGhlIHJldHJ5IHRpbWVvdXQgdG8gODY0MDAgc2Vjb25kcywgb3Igb25lIGRheS4gIFNvIGV2ZW4gYQpAQCAtMzQ5LDYgJiM0MzszNTEsOSBAQCB0eXBlZGVmIHN0cnVjdCB4ZnNfbW91bnQgewogCiAJLyogSW5kZXggb2YgdXVpZCByZWNvcmQgaW4gdGhlIHV1aWQgeGFycmF5LiAqLwogCXVuc2lnbmVkIGludAkJbV91dWlkX3RhYmxlX2luZGV4OwomIzQzOwomIzQzOwl1bnNpZ25lZCBsb25nCQkqbV9zdHJlYW1zX2luX3VzZTsKJiM0MzsJc3BpbmxvY2tfdAkJbV9zdHJlYW1zX2xvY2s7CiB9IHhmc19tb3VudF90OwogCiAjZGVmaW5lIE1fSUdFTyhtcCkJCSgmYW1wOyhtcCktJmd0O21faW5vX2dlbykKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfc3VwZXIuYyBiL2ZzL3hmcy94ZnNfc3VwZXIuYwppbmRleCA4NTMxZDUyNmZjNDQwOS4uZDY5OGJlNTA0YzQ1NDggMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfc3VwZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy94ZnMveGZzX3N1cGVyLmMKQEAgLTgwNSw2ICYjNDM7ODA1LDcgQEAgeGZzX21vdW50X2ZyZWUoCiAjaWZkZWYgREVCVUcKIAlrZnJlZShtcC0mZ3Q7bV9lcnJvcnRhZyk7CiAjZW5kaWYKJiM0MzsJYml0bWFwX2ZyZWUobXAtJmd0O21fc3RyZWFtc19pbl91c2UpOwogCWtmcmVlKG1wKTsKIH0KIApAQCAtMTY1OSw2ICYjNDM7MTY2MCw3IEBAIHhmc19mc19maWxsX3N1cGVyKAogCXN0cnVjdCB4ZnNfbW91bnQJKm1wID0gc2ItJmd0O3NfZnNfaW5mbzsKIAlzdHJ1Y3QgaW5vZGUJCSpyb290OwogCWludAkJCWZsYWdzID0gMCwgZXJyb3I7CiYjNDM7CWludAkJCW5yX3N0cmVhbXM7CiAKIAltcC0mZ3Q7bV9zdXBlciA9IHNiOwogCkBAIC0xNzA4LDYgJiM0MzsxNzEwLDE1IEBAIHhmc19mc19maWxsX3N1cGVyKAogCWlmIChlcnJvcikKIAkJcmV0dXJuIGVycm9yOwogCiYjNDM7CW5yX3N0cmVhbXMgPSBiZGV2X21heF93cml0ZV9zdHJlYW1zKG1wLSZndDttX2RkZXZfdGFyZ3AtJmd0O2J0X2JkZXYpOwomIzQzOwlpZiAoIW5yX3N0cmVhbXMpCiYjNDM7CQlucl9zdHJlYW1zID0gWEZTX1NXX1dSSVRFX1NUUkVBTVNfTUFYOwomIzQzOwltcC0mZ3Q7bV9zdHJlYW1zX2luX3VzZSA9IGJpdG1hcF96YWxsb2MobnJfc3RyZWFtcywgR0ZQX0tFUk5FTCk7CiYjNDM7CWlmICghbXAtJmd0O21fc3RyZWFtc19pbl91c2UpIHsKJiM0MzsJCWVycm9yID0gLUVOT01FTTsKJiM0MzsJCWdvdG8gb3V0X3NodXRkb3duX2RldmljZXM7CiYjNDM7CX0KJiM0MzsKIAlpZiAoeGZzX2RlYnVnZnMpIHsKIAkJbXAtJmd0O21fZGVidWdmcyA9IHhmc19kZWJ1Z2ZzX21rZGlyKG1wLSZndDttX3N1cGVyLSZndDtzX2lkLAogCQkJCQkJICB4ZnNfZGVidWdmcyk7CkBAIC0yMjQ5LDYgJiM0MzsyMjYwLDcgQEAgeGZzX2luaXRfZnNfY29udGV4dCgKICNlbmRpZgogCiAJc3Bpbl9sb2NrX2luaXQoJmFtcDttcC0mZ3Q7bV9zYl9sb2NrKTsKJiM0MzsJc3Bpbl9sb2NrX2luaXQoJmFtcDttcC0mZ3Q7bV9zdHJlYW1zX2xvY2spOwogCWZvciAoaSA9IDA7IGkgJmx0OyBYR19UWVBFX01BWDsgaSYjNDM7JiM0MzspCiAJCXhhX2luaXQoJmFtcDttcC0mZ3Q7bV9ncm91cHNbaV0ueGEpOwogCW11dGV4X2luaXQoJmFtcDttcC0mZ3Q7bV9ncm93bG9jayk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lvbWFwLmggYi9pbmNsdWRlL2xpbnV4L2lvbWFwLmgKaW5kZXggNTZiNDNkNTk0ZTZlMjkuLjRkYzcxZGE1OThmOTlkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lvbWFwLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9pb21hcC5oCkBAIC0xMzIsNiAmIzQzOzEzMiw4IEBAIHN0cnVjdCBpb21hcCB7CiAJdTY0CQkJbGVuZ3RoOwkvKiBsZW5ndGggb2YgbWFwcGluZywgYnl0ZXMgKi8KIAl1MTYJCQl0eXBlOwkvKiB0eXBlIG9mIG1hcHBpbmcgKi8KIAl1MTYJCQlmbGFnczsJLyogZmxhZ3MgZm9yIG1hcHBpbmcgKi8KJiM0MzsJdTE2CQkJd3JpdGVfc3RyZWFtOyAvKiB3cml0ZSBzdHJlYW0gZm9yIEkvTyAqLwomIzQzOwkvKiAyIGJ5dGVzIHBhZGRpbmcgaG9sZSBoZXJlICovCiAJc3RydWN0IGJsb2NrX2RldmljZQkqYmRldjsJLyogYmxvY2sgZGV2aWNlIGZvciBJL08gKi8KIAlzdHJ1Y3QgZGF4X2RldmljZQkqZGF4X2RldjsgLyogZGF4X2RldiBmb3IgZGF4IG9wZXJhdGlvbnMgKi8KIAl2b2lkCQkJKmlubGluZV9kYXRhOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L2ZzLmggYi9pbmNsdWRlL3VhcGkvbGludXgvZnMuaAppbmRleCBiZDg3MjYyZjJlMzQ5NC4uYTc1NmQyN2JkZjg0MTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9mcy5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvdWFwaS9saW51eC9mcy5oCkBAIC0zNDUsNiAmIzQzOzM0NSwyMiBAQCBzdHJ1Y3QgZmlsZV9hdHRyIHsKIC8qIEdldCBsb2dpY2FsIGJsb2NrIG1ldGFkYXRhIGNhcGFiaWxpdHkgZGV0YWlscyAqLwogI2RlZmluZSBGU19JT0NfR0VUTEJNRF9DQVAJCV9JT1dSKDB4MTUsIDIsIHN0cnVjdCBsb2dpY2FsX2Jsb2NrX21ldGFkYXRhX2NhcCkKIAomIzQzO3N0cnVjdCBmc193cml0ZV9zdHJlYW1fb3BlbiB7CiYjNDM7CV9fdTMyCQlzdHJlYW1faWQ7CS8qIElOOiByZXF1ZXN0ZWQgaWQgaWYgT1BFTl9FWEFDVCBzZXQ7IE9VVDogYXNzaWduZWQgaWQgKi8KJiM0MzsJX191MzIJCWZsYWdzOwkJLyogSU46IEZTX1dSSVRFX1NUUkVBTV9PUEVOXyogKi8KJiM0Mzt9OwomIzQzOwomIzQzOy8qCiYjNDM7ICogRmxhZyB0byBhc2sgZm9yIHNwZWNpZmljIHN0cmVhbV9pZCwgb3RoZXJ3aXNlIGtlcm5lbCBjYW4gcmV0dXJuIGFueS4KJiM0MzsgKiBGYWlscyB3aXRoIC1FQlVTWSBpZiB0aGF0IHN0cmVhbV9pZCBpcyBhbHJlYWR5IGhlbGQKJiM0MzsgKi8KJiM0MzsjZGVmaW5lIEZTX1dSSVRFX1NUUkVBTV9PUEVOX0VYQUNUCSgxICZsdDsmbHQ7IDApCiYjNDM7CiYjNDM7I2RlZmluZSBGU19JT0NfV1JJVEVfU1RSRUFNX0dFVF9NQVgJX0lPUigmIzM5O2YmIzM5OywgMTM1LCBfX3UzMikKJiM0MzsjZGVmaW5lIEZTX0lPQ19XUklURV9TVFJFQU1fT1BFTglfSU9XUigmIzM5O2YmIzM5OywgMTM2LCBzdHJ1Y3QgZnNfd3JpdGVfc3RyZWFtX29wZW4pCiYjNDM7I2RlZmluZSBGU19JT0NfV1JJVEVfU1RSRUFNX1NFVAkJX0lPVygmIzM5O2YmIzM5OywgMTM3LCBfX3MzMikKJiM0MzsjZGVmaW5lIEZTX0lPQ19XUklURV9TVFJFQU1fR0VUCQlfSU9SKCYjMzk7ZiYjMzk7LCAxMzgsIF9fdTMyKQomIzQzOwogLyoKICAqIElub2RlIGZsYWdzIChGU19JT0NfR0VURkxBR1MgLyBGU19JT0NfU0VURkxBR1MpCiAgKgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNyAxNjowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MjY5CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNDkwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFdyaXRlIFN0cmVhbXMgUGF0Y2ggU2VyaWVzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHNlcmllcyBpbnRyb2R1Y2luZyAmIzM0O3dyaXRlIHN0cmVhbXMmIzM0OyBzdXBwb3J0IGZvciBYRlMgYW5kIGlvbWFwLiBJbW1lZGlhdGVseSwgSSBzZWUgaXQmIzM5O3MgYSBmdW5jdGlvbmFsIGFkZGl0aW9uLCBub3QganVzdCBhIGJ1ZyBmaXguIFRoYXQgbWVhbnMgSSBuZWVkIHRvIGJlIG1vcmUgdGhvcm91Z2ggaW4gbXkgYW5hbHlzaXMuIEl0JiMzOTtzIGFkZGluZyBuZXcgaW9jdGxzIOKAkyBgRlNfSU9DX1dSSVRFX1NUUkVBTV9HRVRfTUFYYCwgYEZTX0lPQ19XUklURV9TVFJFQU1fT1BFTmAsIGBGU19JT0NfV1JJVEVfU1RSRUFNX1NFVGAsIGFuZCBgRlNfSU9DX1dSSVRFX1NUUkVBTV9HRVRgIOKAkyB3aGljaCBpcyB0aGUgZmlyc3QgcmVkIGZsYWcuIE5ldyBpb2N0bHMgYWx3YXlzIHdhcnJhbnQgZXh0cmEgc2NydXRpbnksIGFzIHRoZXkgYXJlIGEgc2lnbmlmaWNhbnQgaW50ZXJmYWNlIGNoYW5nZSBhbmQgY2FuIGludHJvZHVjZSBzdWJ0bGUgaW50ZXJhY3Rpb25zIHdpdGggZXhpc3RpbmcgZnVuY3Rpb25hbGl0eS4KClRoZSBtb2RpZmljYXRpb25zIHRvIGBmcy94ZnMveGZzX2lvY3RsLmNgIGFuZCBgZnMveGZzL3hmc19pbm9kZS5jYCBhcmUgZXhwZWN0ZWQsIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIGNvcmUgaW9jdGwgaGFuZGxpbmcgYW5kIGlub2RlLWxldmVsIHN0cmVhbSBvcGVyYXRpb25zIHdvdWxkIHJlc2lkZS4gSSB3YW50IHRvIGRyaWxsIGludG8gdGhlIGB4ZnNfaW5vZGVfKmAgZnVuY3Rpb25zLiBJbXBsZW1lbnRpbmcgZnVuY3Rpb25zIHN1Y2ggYXMgYHhmc19pbm9kZV93cml0ZV9zdHJlYW1fb3BlbmAsIGB4ZnNfaW5vZGVfc2V0X3dyaXRlX3N0cmVhbWAsIGFuZCB0aGUgb3RoZXJzIGluZGljYXRlIHRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgbG9naWMgb2YgbWFuYWdpbmcgdGhlc2Ugc3RyZWFtcyB3aWxsIGJlLgoKVGhlIG1vZGlmaWNhdGlvbiB0byBgeGZzX2JtYXAuY2AgaXMgcGFydGljdWxhcmx5IGludGVyZXN0aW5nLiBUaGUgY29tbWVudCB0aGF0IHRoaXMgdXNlcyB0aGUgc3RyZWFtIElEIHRvICYjMzQ7ZmFuIG91dCBhbGxvY2F0aW9ucyBhY3Jvc3MgQUdzJiMzNDsgaXMgaW1wb3J0YW50LiBUaGlzIHN1Z2dlc3RzIGEgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGJlbmVmaXQgKGFuZCBwZXJoYXBzIGEga2V5IGRlc2lnbiBnb2FsIG9mIHRoZSBwYXRjaCksIGJ1dCBhbHNvIGFkZHMgY29tcGxleGl0eSB0byB0aGUgYmxvY2sgYWxsb2NhdGlvbiBsb2dpYy4gVGhpcyBpcyBkZWZpbml0ZWx5IHNvbWV3aGVyZSBJJiMzOTtsbCB3YW50IHRvIGZvY3VzIG9uIHdoZW4gSSYjMzk7bSBhc3Nlc3NpbmcgaXQuCgpUaGUgY2hhbmdlcyBpbiBgZnMvaW9tYXAvZGlyZWN0LWlvLmNgIGFuZCBgZnMvaW9tYXAvaW9lbmQuY2AgdGhhdCBub3cgcGFzcyB0aGUgd3JpdGUgc3RyZWFtIElEIHRvIHRoZSBiaW8gYXJlIGEgbmF0dXJhbCBjb25zZXF1ZW5jZSBvZiB0aGUgc3RyZWFtIGNvbmNlcHQuIFRoaXMgY2hhbmdlIGlzIGNydWNpYWwgdG8gZW5zdXJlIHRoYXQgdGhlIGlvbWFwIGxheWVyIHVuZGVyc3RhbmRzIHdoaWNoIHN0cmVhbSBpcyBhc3NvY2lhdGVkIHdpdGggZWFjaCBibG9jayBJL08gb3BlcmF0aW9uLgoKR2l2ZW4gdGhhdCB0aGlzIGludHJvZHVjZXMgbmV3IGlvY3RscyBhbmQgbW9kaWZpZXMgYmxvY2sgYWxsb2NhdGlvbiwgZnV6emluZyBpcyBhYnNvbHV0ZWx5IGVzc2VudGlhbC4gSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBrZXkgZnVuY3Rpb25zIHRvIHN1YmplY3QgdG8gZnV6emluZy4gTGV0JiMzOTtzIHNlZS4uLiBJJiMzOTtkIHN0YXJ0IHdpdGggdGhlc2UgaW9jdGwgaGFuZGxlcnM6IGB4ZnNfaW9jX3dyaXRlX3N0cmVhbV9vcGVuYCwgYHhmc19pb2Nfd3JpdGVfc3RyZWFtX3NldGAsIGB4ZnNfaW9jX3dyaXRlX3N0cmVhbV9nZXRgLCBgeGZzX2lvY193cml0ZV9zdHJlYW1fZ2V0X21heGAuIEkgYWxzbyBuZWVkIHRvIGZ1enogdGhlIGFzc29jaWF0ZWQgaW5vZGUgbWV0aG9kczogYHhmc19pbm9kZV93cml0ZV9zdHJlYW1fb3BlbmAsIGB4ZnNfaW5vZGVfc2V0X3dyaXRlX3N0cmVhbWAsIGB4ZnNfaW5vZGVfZ2V0X3dyaXRlX3N0cmVhbWAsIGFuZCBgeGZzX2lub2RlX21heF93cml0ZV9zdHJlYW1zYC4gSXQgbG9va3MgbGlrZSBgeGZzX3dyaXRlX3N0cmVhbV9yZWxlYXNlYCwgYHhmc19pbm9kZV93cml0ZV9zdHJlYW1fYWdfc2V0YCwgYW5kIGB4ZnNfYWdfdG9fYWdfc2V0YCBhcmUgYWxzbyBpbXBvcnRhbnQgdG8gdGVzdCwgaW4gY2FzZSB0aGV5IGFyZSB1c2VkIGluIHN0cmVhbSBtYW5hZ2VtZW50LgoKRmluYWxseSwgSSBuZWVkIHRvIHZlcmlmeSBkZXBlbmRlbmNpZXMuIFNpbmNlIHRoaXMgaXMgWEZTLXNwZWNpZmljLCBgWEZTX0ZTYCBpcyBhIGdpdmVuLiBCdXQgSSB3YW50IHRvIGNoZWNrIGZvciBhbnkgbW9yZSBzcGVjaWZpYyBjb25maWcgb3B0aW9ucy4gQSBxdWljayBncmVwIG9mIHRoZSBLY29uZmlnIGZpbGVzIGZvciAmIzM0O1dSSVRFX1NUUkVBTSYjMzQ7IHNob3VsZCBnaXZlIG1lIGEgcXVpY2sgYW5zd2VyLiBHb29kLCB0aGlzIGlzIGEgc29saWQgc3RhcnQuIE5vdywgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgY29kZS4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE3IDE2OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7V1JJVEVfU1RSRUFNJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMveGZzL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE3IDE2OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNTE2CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKktjb25maWcgRXhwbG9yYXRpb24gZm9yIFdSSVRFX1NUUkVBTSoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW50byB0aGlzIEtjb25maWcgbGFieXJpbnRoLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgd2l0aCBhIGJyb2FkIHN3ZWVwIOKAkyBhIGNsYXNzaWMgYGdyZXBgLiBJIHdhbnQgdG8gc2VlICpldmVyeXdoZXJlKiBgV1JJVEVfU1RSRUFNYCBpcyBtZW50aW9uZWQgYWNyb3NzIGFsbCB0aGUgS2NvbmZpZyBmaWxlcy4gVGhpcyB3aWxsIGJlIHRoZSBmb3VuZGF0aW9uYWwgc2Nhbi4gVGhlIGdvYWwgaXNuJiMzOTt0IG5lY2Vzc2FyaWx5IHRvIHNvbHZlIGFueXRoaW5nIGltbWVkaWF0ZWx5LCBidXQgdG8gZ2V0IGEgbGF5IG9mIHRoZSBsYW5kLCB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiB0aGUgdmFyaWFibGUmIzM5O3MgdXNhZ2UuIFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGEgcXVpY2sgYW5kIGRpcnR5IHNlYXJjaCBmb3Igb2NjdXJyZW5jZXMsIGRlcGVuZGVuY2llcywgYW5kIHBlcmhhcHMgc29tZSBpbml0aWFsIGNvbnRleHQsIEkgd2FudCB0byB1c2UgYGdyZXBgIGFzIGEgcHJpbWFyeSBpbnZlc3RpZ2F0aXZlIHRvb2wgZm9yIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTcgMTY6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7V1JJVEVfU1RSRUFNJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYXRhL2xpYmF0YS1laC5jPTI0ODc9Y29uc3QgY2hhciAqYXRhX2dldF9jbWRfbmFtZSh1OCBjb21tYW5kKVxuLS1cbmRyaXZlcnMvYXRhL2xpYmF0YS1laC5jLTI1MTUtXHRcdHsgQVRBX0NNRF9XUklURV9RVUVVRUQsXHRcdFwmIzM0O1dSSVRFIERNQSBRVUVVRUQgRVhUXCYjMzQ7IH0sXG5kcml2ZXJzL2F0YS9saWJhdGEtZWguYzoyNTE2Olx0XHR7IEFUQV9DTURfV1JJVEVfU1RSRUFNX0VYVCxcdFwmIzM0O1dSSVRFIFNUUkVBTSBFWFRcJiMzNDsgfSxcbmRyaXZlcnMvYXRhL2xpYmF0YS1laC5jOjI1MTc6XHRcdHsgQVRBX0NNRF9XUklURV9TVFJFQU1fRE1BX0VYVCwgXCYjMzQ7V1JJVEUgU1RSRUFNIERNQSBFWFRcJiMzNDsgfSxcbmRyaXZlcnMvYXRhL2xpYmF0YS1laC5jLTI1MTgtXHRcdHsgQVRBX0NNRF9XUklURV9GVUFfRVhULFx0XCYjMzQ7V1JJVEUgRE1BIEZVQSBFWFRcJiMzNDsgfSxcbi0tXG5kcml2ZXJzL2F0YS9saWJhdGEtc2NzaS5jPTMxNzI9c3RhdGljIHVuc2lnbmVkIGludCBhdGFfc2NzaV9wYXNzX3RocnUoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYylcbi0tXG5kcml2ZXJzL2F0YS9saWJhdGEtc2NzaS5jLTMzMzAtXHRjYXNlIEFUQV9DTURfUElPX1dSSVRFX0VYVDpcbmRyaXZlcnMvYXRhL2xpYmF0YS1zY3NpLmM6MzMzMTpcdGNhc2UgQVRBX0NNRF9XUklURV9TVFJFQU1fRE1BX0VYVDpcbmRyaXZlcnMvYXRhL2xpYmF0YS1zY3NpLmM6MzMzMjpcdGNhc2UgQVRBX0NNRF9XUklURV9TVFJFQU1fRVhUOlxuZHJpdmVycy9hdGEvbGliYXRhLXNjc2kuYy0zMzMzLVx0XHRxYy1cdTAwM2VzZWN0X3NpemUgPSBzY21kLVx1MDAzZWRldmljZS1cdTAwM2VzZWN0b3Jfc2l6ZTtcbi0tXG5kcml2ZXJzL3Njc2kvaGlzaV9zYXMvaGlzaV9zYXNfbWFpbi5jPTU0PXU4IGhpc2lfc2FzX2dldF9hdGFfcHJvdG9jb2woc3RydWN0IHNhc190YXNrICp0YXNrKVxuLS1cbmRyaXZlcnMvc2NzaS9oaXNpX3Nhcy9oaXNpX3Nhc19tYWluLmMtOTQtXHRjYXNlIEFUQV9DTURfV1JJVEVfTE9HX0RNQV9FWFQ6XG5kcml2ZXJzL3Njc2kvaGlzaV9zYXMvaGlzaV9zYXNfbWFpbi5jOjk1Olx0Y2FzZSBBVEFfQ01EX1dSSVRFX1NUUkVBTV9ETUFfRVhUOlxuZHJpdmVycy9zY3NpL2hpc2lfc2FzL2hpc2lfc2FzX21haW4uYy05Ni1cdGNhc2UgQVRBX0NNRF9aQUNfTUdNVF9JTjpcbi0tXG5mcy94ZnMveGZzX2lub2RlLmM9NTI9eGZzX2lub2RlX21heF93cml0ZV9zdHJlYW1zKFxuLS1cbmZzL3hmcy94ZnNfaW5vZGUuYy04Ni1cdG5yX3N0cmVhbXMgPSBucl9hZ3MgLyBhZ19zZXRfc2l6ZTtcbmZzL3hmcy94ZnNfaW5vZGUuYzo4NzpcdHJldHVybiBtaW5fdCh1aW50MTZfdCwgbnJfc3RyZWFtcywgWEZTX1NXX1dSSVRFX1NUUkVBTVNfTUFYKTtcbmZzL3hmcy94ZnNfaW5vZGUuYy04OC19XG4tLVxuZnMveGZzL3hmc19pbm9kZS5jPTEyOT14ZnNfaW5vZGVfd3JpdGVfc3RyZWFtX29wZW4oXG4tLVxuZnMveGZzL3hmc19pbm9kZS5jLTEzNy1cbmZzL3hmcy94ZnNfaW5vZGUuYzoxMzg6XHRpZiAoZmxhZ3MgXHUwMDI2IH5GU19XUklURV9TVFJFQU1fT1BFTl9FWEFDVClcbmZzL3hmcy94ZnNfaW5vZGUuYy0xMzktXHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbmZzL3hmcy94ZnNfaW5vZGUuYy0xNTAtXHRzcGluX2xvY2soXHUwMDI2bXAtXHUwMDNlbV9zdHJlYW1zX2xvY2spO1xuZnMveGZzL3hmc19pbm9kZS5jOjE1MTpcdGlmIChmbGFncyBcdTAwMjYgRlNfV1JJVEVfU1RSRUFNX09QRU5fRVhBQ1QpIHtcbmZzL3hmcy94ZnNfaW5vZGUuYy0xNTItXHRcdGlmICghKnN0cmVhbV9pZHAgfHwgKnN0cmVhbV9pZHAgXHUwMDNlIG1heCkge1xuLS1cbmZzL3hmcy94ZnNfaW9jdGwuYz0xMjc4PXhmc19maWxlX2lvY3RsKFxuLS1cbmZzL3hmcy94ZnNfaW9jdGwuYy0xNTI2LVx0XHRyZXR1cm4geGZzX2lvY192ZXJpZnlfbWVkaWEoZmlscCwgYXJnKTtcbmZzL3hmcy94ZnNfaW9jdGwuYzoxNTI3Olx0Y2FzZSBGU19JT0NfV1JJVEVfU1RSRUFNX09QRU46XG5mcy94ZnMveGZzX2lvY3RsLmMtMTUyOC1cdFx0cmV0dXJuIHhmc19pb2Nfd3JpdGVfc3RyZWFtX29wZW4oZmlscCwgKHZvaWQgX191c2VyICopYXJnKTtcbmZzL3hmcy94ZnNfaW9jdGwuYzoxNTI5Olx0Y2FzZSBGU19JT0NfV1JJVEVfU1RSRUFNX1NFVDpcbmZzL3hmcy94ZnNfaW9jdGwuYy0xNTMwLVx0XHRyZXR1cm4geGZzX2lvY193cml0ZV9zdHJlYW1fc2V0KGZpbHAsIHApO1xuZnMveGZzL3hmc19pb2N0bC5jOjE1MzE6XHRjYXNlIEZTX0lPQ19XUklURV9TVFJFQU1fR0VUOlxuZnMveGZzL3hmc19pb2N0bC5jLTE1MzItXHRcdHJldHVybiB4ZnNfaW9jX3dyaXRlX3N0cmVhbV9nZXQoWEZTX0koZmlsZV9pbm9kZShmaWxwKSksXG5mcy94ZnMveGZzX2lvY3RsLmMtMTUzMy1cdFx0XHRcdFx0XHQodm9pZCBfX3VzZXIgKilhcmcpO1xuZnMveGZzL3hmc19pb2N0bC5jOjE1MzQ6XHRjYXNlIEZTX0lPQ19XUklURV9TVFJFQU1fR0VUX01BWDpcbmZzL3hmcy94ZnNfaW9jdGwuYy0xNTM1LVx0XHRyZXR1cm4geGZzX2lvY193cml0ZV9zdHJlYW1fZ2V0X21heChYRlNfSShmaWxlX2lub2RlKGZpbHApKSxcbi0tXG5mcy94ZnMveGZzX21vdW50Lmg9Mzg9ZW51bSB7XG4tLVxuZnMveGZzL3hmc19tb3VudC5oLTQ3LVxuZnMveGZzL3hmc19tb3VudC5oOjQ4OiNkZWZpbmUgWEZTX1NXX1dSSVRFX1NUUkVBTVNfTUFYXHQxNlxuZnMveGZzL3hmc19tb3VudC5oLTQ5LVxuLS1cbmZzL3hmcy94ZnNfc3VwZXIuYz0xNjU2PXhmc19mc19maWxsX3N1cGVyKFxuLS1cbmZzL3hmcy94ZnNfc3VwZXIuYy0xNzE0LVx0aWYgKCFucl9zdHJlYW1zKVxuZnMveGZzL3hmc19zdXBlci5jOjE3MTU6XHRcdG5yX3N0cmVhbXMgPSBYRlNfU1dfV1JJVEVfU1RSRUFNU19NQVg7XG5mcy94ZnMveGZzX3N1cGVyLmMtMTcxNi1cdG1wLVx1MDAzZW1fc3RyZWFtc19pbl91c2UgPSBiaXRtYXBfemFsbG9jKG5yX3N0cmVhbXMsIEdGUF9LRVJORUwpO1xuLS1cbmluY2x1ZGUvbGludXgvYXRhLmg9MjQ9ZW51bSB7XG4tLVxuaW5jbHVkZS9saW51eC9hdGEuaC0yMjMtXHRBVEFfQ01EX1dSSVRFX1FVRVVFRFx0PSAweDM2LFxuaW5jbHVkZS9saW51eC9hdGEuaDoyMjQ6XHRBVEFfQ01EX1dSSVRFX1NUUkVBTV9FWFQgPSAweDNCLFxuaW5jbHVkZS9saW51eC9hdGEuaDoyMjU6XHRBVEFfQ01EX1dSSVRFX1NUUkVBTV9ETUFfRVhUID0gMHgzQSxcbmluY2x1ZGUvbGludXgvYXRhLmgtMjI2LVx0QVRBX0NNRF9XUklURV9GVUFfRVhUXHQ9IDB4M0QsXG4tLVxuaW5jbHVkZS90cmFjZS9ldmVudHMvbGliYXRhLmgtMzYtXHRcdCBhdGFfb3Bjb2RlX25hbWUoQVRBX0NNRF9XUklURV9RVUVVRUQpLFx0XHRcXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvbGliYXRhLmg6Mzc6XHRcdCBhdGFfb3Bjb2RlX25hbWUoQVRBX0NNRF9XUklURV9TVFJFQU1fRVhUKSxcdFxcXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9saWJhdGEuaDozODpcdFx0IGF0YV9vcGNvZGVfbmFtZShBVEFfQ01EX1dSSVRFX1NUUkVBTV9ETUFfRVhUKSwgXFxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL2xpYmF0YS5oLTM5LVx0XHQgYXRhX29wY29kZV9uYW1lKEFUQV9DTURfV1JJVEVfRlVBX0VYVCksXHRcXFxuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9mcy5oPTM0OD1zdHJ1Y3QgZnNfd3JpdGVfc3RyZWFtX29wZW4ge1xuaW5jbHVkZS91YXBpL2xpbnV4L2ZzLmgtMzQ5LVx0X191MzJcdFx0c3RyZWFtX2lkO1x0LyogSU46IHJlcXVlc3RlZCBpZCBpZiBPUEVOX0VYQUNUIHNldDsgT1VUOiBhc3NpZ25lZCBpZCAqL1xuaW5jbHVkZS91YXBpL2xpbnV4L2ZzLmg6MzUwOlx0X191MzJcdFx0ZmxhZ3M7XHRcdC8qIElOOiBGU19XUklURV9TVFJFQU1fT1BFTl8qICovXG5pbmNsdWRlL3VhcGkvbGludXgvZnMuaC0zNTEtfTtcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvZnMuaC0zNTYtICovXG5pbmNsdWRlL3VhcGkvbGludXgvZnMuaDozNTc6I2RlZmluZSBGU19XUklURV9TVFJFQU1fT1BFTl9FWEFDVFx0KDEgXHUwMDNjXHUwMDNjIDApXG5pbmNsdWRlL3VhcGkvbGludXgvZnMuaC0zNTgtXG5pbmNsdWRlL3VhcGkvbGludXgvZnMuaDozNTk6I2RlZmluZSBGU19JT0NfV1JJVEVfU1RSRUFNX0dFVF9NQVhcdF9JT1IoJiMzOTtmJiMzOTssIDEzNSwgX191MzIpXG5pbmNsdWRlL3VhcGkvbGludXgvZnMuaDozNjA6I2RlZmluZSBGU19JT0NfV1JJVEVfU1RSRUFNX09QRU5cdF9JT1dSKCYjMzk7ZiYjMzk7LCAxMzYsIHN0cnVjdCBmc193cml0ZV9zdHJlYW1fb3BlbilcbmluY2x1ZGUvdWFwaS9saW51eC9mcy5oOjM2MTojZGVmaW5lIEZTX0lPQ19XUklURV9TVFJFQU1fU0VUXHRcdF9JT1coJiMzOTtmJiMzOTssIDEzNywgX19zMzIpXG5pbmNsdWRlL3VhcGkvbGludXgvZnMuaDozNjI6I2RlZmluZSBGU19JT0NfV1JJVEVfU1RSRUFNX0dFVFx0XHRfSU9SKCYjMzk7ZiYjMzk7LCAxMzgsIF9fdTMyKVxuaW5jbHVkZS91YXBpL2xpbnV4L2ZzLmgtMzYzLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE3IDE2OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyODI4CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgV3JpdGUgU3RyZWFtIEZlYXR1cmUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgd3JpdGUgc3RyZWFtIGZlYXR1cmUgd2l0aGluIFhGUywgYW5kIGl0IHNlZW1zIHRoZXJlIGFyZW4mIzM5O3QgYW55ICpzcGVjaWZpYyogY29uZmlndXJhdGlvbiBvcHRpb25zIGRlZGljYXRlZCB0byBpdC4gSXQgYXBwZWFycyB0byBiZSBhbiBpbmhlcmVudCBwYXJ0IG9mIFhGUyBpdHNlbGYuIFRoZSBvbmx5IHJlbGV2YW50IGNvbmZpZyByZXF1aXJlZCBpcyB0aGUgY29yZSBgWEZTX0ZTYCBzZXR0aW5nLiBUaGF0JiMzOTtzIGdvb2QgdG8ga25vd+KAlGxlc3MgdG8gbWFuYWdlIGV4cGxpY2l0bHkuCgpOb3csIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCB0aGUgZm9jdXMgc3ltYm9scy4gSSYjMzk7dmUgZ290IGEgbGlzdCBoZXJlOiBgeGZzX2lvY193cml0ZV9zdHJlYW1fb3BlbmAsIGB4ZnNfaW9jX3dyaXRlX3N0cmVhbV9zZXRgLCBgeGZzX2lvY193cml0ZV9zdHJlYW1fZ2V0YCwgYHhmc19pb2Nfd3JpdGVfc3RyZWFtX2dldF9tYXhgLCBgeGZzX2lub2RlX3dyaXRlX3N0cmVhbV9vcGVuYCwgYHhmc19pbm9kZV9zZXRfd3JpdGVfc3RyZWFtYCwgYHhmc19pbm9kZV9nZXRfd3JpdGVfc3RyZWFtYCwgYHhmc19pbm9kZV9tYXhfd3JpdGVfc3RyZWFtc2AsIGB4ZnNfd3JpdGVfc3RyZWFtX3JlbGVhc2VgLCBgeGZzX2lub2RlX3dyaXRlX3N0cmVhbV9hZ19zZXRgLCBhbmQgYHhmc19hZ190b19hZ19zZXRgLiBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgdGhlc2Ugc3ltYm9scyBhcmUgYWN0dWFsbHkgZGVmaW5lZCB3aXRoaW4gdGhlIGNvbnRleHQgb2YgdGhlIFhGUyBjb2RlLiBUaGlzIGlzIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCB0byBlbnN1cmUgdGhhdCB0aGUgaW1wbGVtZW50YXRpb24gaXMgY29tcGxldGUgYW5kIHRoZSBmZWF0dXJlIGlzIHJlYWR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE3IDE2OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3hmc19pb2Nfd3JpdGVfc3RyZWFtX29wZW4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy94ZnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3hmcy94ZnNfaW9jdGwuYz0xMjA5PXN0YXRpYyBpbnRcbmZzL3hmcy94ZnNfaW9jdGwuYzoxMjEwOnhmc19pb2Nfd3JpdGVfc3RyZWFtX29wZW4oXG5mcy94ZnMveGZzX2lvY3RsLmMtMTIxMS1cdHN0cnVjdCBmaWxlXHRcdCpmaWxwLFxuLS1cbmZzL3hmcy94ZnNfaW9jdGwuYz0xMjc4PXhmc19maWxlX2lvY3RsKFxuLS1cbmZzL3hmcy94ZnNfaW9jdGwuYy0xNTI3LVx0Y2FzZSBGU19JT0NfV1JJVEVfU1RSRUFNX09QRU46XG5mcy94ZnMveGZzX2lvY3RsLmM6MTUyODpcdFx0cmV0dXJuIHhmc19pb2Nfd3JpdGVfc3RyZWFtX29wZW4oZmlscCwgKHZvaWQgX191c2VyICopYXJnKTtcbmZzL3hmcy94ZnNfaW9jdGwuYy0xNTI5LVx0Y2FzZSBGU19JT0NfV1JJVEVfU1RSRUFNX1NFVDpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNyAxNjowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzU3OQoJCQkJCQkJb3V0cHV0OiAyNTAKCQkJCQkJCXRob3VnaHRzOiAyNzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgRnV6emluZyBTdHJhdGVneTogV3JpdGUgU3RyZWFtcyBpbiBYRlMqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBhIGRlZmluaXRlIHllcyBmb3IgZnV6emluZy4gSXQmIzM5O3MgbWFraW5nIGZ1bmN0aW9uYWwgY2hhbmdlcywgc3BlY2lmaWNhbGx5IHRvIFhGUyYjMzk7cyBibG9jayBhbGxvY2F0aW9uIGFuZCBpbnRyb2R1Y2luZyB0aGVzZSBicmFuZCBuZXcgaW9jdGxzLiBUaGF0JiMzOTtzIGEgdGV4dGJvb2sgZGVmaW5pdGlvbiBvZiBhIHBvdGVudGlhbCBhdHRhY2sgc3VyZmFjZS4gV2UgbmVlZCB0byBnZXQgYSBmdXp6aW5nIGNhbXBhaWduIHNldCB1cCBmb3IgdGhpcyBpbW1lZGlhdGVseS4KClRoZSBoZWFydCBvZiBpdCBsaWVzIGluIHRoZSB3cml0ZSBzdHJlYW1zIHN1cHBvcnQgdGhleSYjMzk7cmUgYWRkaW5nIHRvIFhGUyBhbmQgaW9tYXAuIFRoaXMgaW5jbHVkZXMgdGhvc2UgbmV3IGlvY3Rscywgd2hpY2ggaW1tZWRpYXRlbHkgZmxhZ3MgaXQgYXMgc29tZXRoaW5nIG5ldyB0aGF0IG5lZWRzIHNjcnV0aW55LiBUaGUgYmxvY2sgYWxsb2NhdGlvbiBjaGFuZ2VzLCB3aGVyZSBpdCYjMzk7cyBmYW5uaW5nIG91dCBiYXNlZCBvbiB0aGUgc3RyZWFtIElELCB0aGF04oCZcyBhbm90aGVyIGNyaXRpY2FsIGFyZWEuIEFueSBtb2RpZmljYXRpb24gdG8gdGhlIGNvcmUgbG9naWMsIGVzcGVjaWFsbHkgYXJvdW5kIGFsbG9jYXRpb24sIGlzIGEgcmVkIGZsYWcuIFdlIG5lZWQgdG8gcG9rZSBhbmQgcHJvZCB0aGF0IG5ldyBhbGxvY2F0aW9uIGJlaGF2aW9yIHRob3JvdWdobHkuCgpUaGUgZm9jdXMgc2hvdWxkIGJlIG9uIHRoZXNlIHN5bWJvbHM6CgoqICAgYHhmc19pb2Nfd3JpdGVfc3RyZWFtX29wZW5gLCBgeGZzX2lvY193cml0ZV9zdHJlYW1fc2V0YCwgYHhmc19pb2Nfd3JpdGVfc3RyZWFtX2dldGAsIGB4ZnNfaW9jX3dyaXRlX3N0cmVhbV9nZXRfbWF4YCwgYHhmc19pbm9kZV93cml0ZV9zdHJlYW1fb3BlbmAsIGB4ZnNfaW5vZGVfc2V0X3dyaXRlX3N0cmVhbWAsIGB4ZnNfaW5vZGVfZ2V0X3dyaXRlX3N0cmVhbWAsIGB4ZnNfaW5vZGVfbWF4X3dyaXRlX3N0cmVhbXNgLCBgeGZzX3dyaXRlX3N0cmVhbV9yZWxlYXNlYCwgYHhmc19pbm9kZV93cml0ZV9zdHJlYW1fYWdfc2V0YCwgYHhmc19hZ190b19hZ19zZXRgLgoKVGhlc2Ugc2VlbSB0byBiZSB0aGUgY29yZSBmdW5jdGlvbnMgZm9yIG1hbmFnaW5nIHRoZSBzdHJlYW1zLCBzZXR0aW5nIHRoZW0gdXAsIHJldHJpZXZpbmcsIGV0YywgYW5kIHRoZSBhbGxvY2F0aW9uIGl0c2VsZi4gVGhlc2UgYXJlIGdvaW5nIHRvIGJlIHRoZSBwcmltZSB0YXJnZXRzIGZvciBmdXp6aW5nLgoKV2UgbmVlZCB0byBtYWtlIHN1cmUgdGhlIGZ1enplciBpcyBjb25maWd1cmVkIHdpdGggYFhGU19GU2AgZW5hYmxlZCwgb2J2aW91c2x5LiBUaGlzIGlzIGFsbCBhYm91dCB0ZXN0aW5nIHRoYXQgd3JpdGUgc3RyZWFtcyBmdW5jdGlvbmFsaXR5LiBMZXQmIzM5O3Mgc2VlIGlmIHdlIGNhbiBmaW5kIHNvbWUgZ29vZCBlZGdlIGNhc2VzIGluIHRoaXMgbmV3IGxvZ2ljLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNyAxNjowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7WEZTX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7eGZzX2lvY193cml0ZV9zdHJlYW1fb3BlbiYjMzQ7LAogICAgJiMzNDt4ZnNfaW9jX3dyaXRlX3N0cmVhbV9zZXQmIzM0OywKICAgICYjMzQ7eGZzX2lvY193cml0ZV9zdHJlYW1fZ2V0JiMzNDssCiAgICAmIzM0O3hmc19pb2Nfd3JpdGVfc3RyZWFtX2dldF9tYXgmIzM0OywKICAgICYjMzQ7eGZzX2lub2RlX3dyaXRlX3N0cmVhbV9vcGVuJiMzNDssCiAgICAmIzM0O3hmc19pbm9kZV9zZXRfd3JpdGVfc3RyZWFtJiMzNDssCiAgICAmIzM0O3hmc19pbm9kZV9nZXRfd3JpdGVfc3RyZWFtJiMzNDssCiAgICAmIzM0O3hmc19pbm9kZV9tYXhfd3JpdGVfc3RyZWFtcyYjMzQ7LAogICAgJiMzNDt4ZnNfd3JpdGVfc3RyZWFtX3JlbGVhc2UmIzM0OywKICAgICYjMzQ7eGZzX2lub2RlX3dyaXRlX3N0cmVhbV9hZ19zZXQmIzM0OywKICAgICYjMzQ7eGZzX2FnX3RvX2FnX3NldCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIHdyaXRlIHN0cmVhbXMgc3VwcG9ydCB0byBYRlMgYW5kIGlvbWFwLCBpbmNsdWRpbmcgbmV3IGlvY3RscyBmb3IgbWFuYWdpbmcgd3JpdGUgc3RyZWFtcyBhbmQgbW9kaWZpY2F0aW9ucyB0byBibG9jayBhbGxvY2F0aW9uIGxvZ2ljIHRvIGZhbiBvdXQgYWxsb2NhdGlvbnMgYWNyb3NzIEFHcyBiYXNlZCBvbiB0aGUgc3RyZWFtIElELiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBtb2RpZmllcyBjb3JlIGZpbGVzeXN0ZW0gbG9naWMgYW5kIGludHJvZHVjZXMgbmV3IHVzZXItZmFjaW5nIEFQSXMsIG1ha2luZyBpdCBhIHByaW1lIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7WEZTX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7eGZzX2lvY193cml0ZV9zdHJlYW1fb3BlbiYjMzQ7LAogICAgJiMzNDt4ZnNfaW9jX3dyaXRlX3N0cmVhbV9zZXQmIzM0OywKICAgICYjMzQ7eGZzX2lvY193cml0ZV9zdHJlYW1fZ2V0JiMzNDssCiAgICAmIzM0O3hmc19pb2Nfd3JpdGVfc3RyZWFtX2dldF9tYXgmIzM0OywKICAgICYjMzQ7eGZzX2lub2RlX3dyaXRlX3N0cmVhbV9vcGVuJiMzNDssCiAgICAmIzM0O3hmc19pbm9kZV9zZXRfd3JpdGVfc3RyZWFtJiMzNDssCiAgICAmIzM0O3hmc19pbm9kZV9nZXRfd3JpdGVfc3RyZWFtJiMzNDssCiAgICAmIzM0O3hmc19pbm9kZV9tYXhfd3JpdGVfc3RyZWFtcyYjMzQ7LAogICAgJiMzNDt4ZnNfd3JpdGVfc3RyZWFtX3JlbGVhc2UmIzM0OywKICAgICYjMzQ7eGZzX2lub2RlX3dyaXRlX3N0cmVhbV9hZ19zZXQmIzM0OywKICAgICYjMzQ7eGZzX2FnX3RvX2FnX3NldCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIHdyaXRlIHN0cmVhbXMgc3VwcG9ydCB0byBYRlMgYW5kIGlvbWFwLCBpbmNsdWRpbmcgbmV3IGlvY3RscyBmb3IgbWFuYWdpbmcgd3JpdGUgc3RyZWFtcyBhbmQgbW9kaWZpY2F0aW9ucyB0byBibG9jayBhbGxvY2F0aW9uIGxvZ2ljIHRvIGZhbiBvdXQgYWxsb2NhdGlvbnMgYWNyb3NzIEFHcyBiYXNlZCBvbiB0aGUgc3RyZWFtIElELiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBtb2RpZmllcyBjb3JlIGZpbGVzeXN0ZW0gbG9naWMgYW5kIGludHJvZHVjZXMgbmV3IHVzZXItZmFjaW5nIEFQSXMsIG1ha2luZyBpdCBhIHByaW1lIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE3VDE2OjA2OjA0LjIxNzc1ODEyOVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMyNjg2MDQ4NjM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlhGU19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInhmc19pb2Nfd3JpdGVfc3RyZWFtX29wZW5cIixcbiAgICBcInhmc19pb2Nfd3JpdGVfc3RyZWFtX3NldFwiLFxuICAgIFwieGZzX2lvY193cml0ZV9zdHJlYW1fZ2V0XCIsXG4gICAgXCJ4ZnNfaW9jX3dyaXRlX3N0cmVhbV9nZXRfbWF4XCIsXG4gICAgXCJ4ZnNfaW5vZGVfd3JpdGVfc3RyZWFtX29wZW5cIixcbiAgICBcInhmc19pbm9kZV9zZXRfd3JpdGVfc3RyZWFtXCIsXG4gICAgXCJ4ZnNfaW5vZGVfZ2V0X3dyaXRlX3N0cmVhbVwiLFxuICAgIFwieGZzX2lub2RlX21heF93cml0ZV9zdHJlYW1zXCIsXG4gICAgXCJ4ZnNfd3JpdGVfc3RyZWFtX3JlbGVhc2VcIixcbiAgICBcInhmc19pbm9kZV93cml0ZV9zdHJlYW1fYWdfc2V0XCIsXG4gICAgXCJ4ZnNfYWdfdG9fYWdfc2V0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyB3cml0ZSBzdHJlYW1zIHN1cHBvcnQgdG8gWEZTIGFuZCBpb21hcCwgaW5jbHVkaW5nIG5ldyBpb2N0bHMgZm9yIG1hbmFnaW5nIHdyaXRlIHN0cmVhbXMgYW5kIG1vZGlmaWNhdGlvbnMgdG8gYmxvY2sgYWxsb2NhdGlvbiBsb2dpYyB0byBmYW4gb3V0IGFsbG9jYXRpb25zIGFjcm9zcyBBR3MgYmFzZWQgb24gdGhlIHN0cmVhbSBJRC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgbW9kaWZpZXMgY29yZSBmaWxlc3lzdGVtIGxvZ2ljIGFuZCBpbnRyb2R1Y2VzIG5ldyB1c2VyLWZhY2luZyBBUElzLCBtYWtpbmcgaXQgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE3VDE2OjA2OjA0LjIxNzc2NzM3OVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTcxMjE0NDgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgM2YxOWY5Y2QxYTRlNTQ0N2VhZDFlY2Q3ODMzNWY3MGJiMzNhMzNhNFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIEp1bCAxNyAxNjowNjowMiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9mcy9pb21hcC9kaXJlY3QtaW8uYyBiL2ZzL2lvbWFwL2RpcmVjdC1pby5jXFxuaW5kZXggZTJjZDVmOTJiYWJlZGIuLmI3NzcxYTI1YzFjNzlmIDEwMDY0NFxcbi0tLSBhL2ZzL2lvbWFwL2RpcmVjdC1pby5jXFxuKysrIGIvZnMvaW9tYXAvZGlyZWN0LWlvLmNcXG5AQCAtMzQ4LDYgKzM0OCw3IEBAIHN0YXRpYyBzc2l6ZV90IGlvbWFwX2Rpb19iaW9faXRlcl9vbmUoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsXFxuIFxcdGZzY3J5cHRfc2V0X2Jpb19jcnlwdF9jdHgoYmlvLCBpdGVyLVxcdTAwM2Vpbm9kZSwgcG9zLCBHRlBfS0VSTkVMKTtcXG4gXFx0YmlvLVxcdTAwM2ViaV9pdGVyLmJpX3NlY3RvciA9IGlvbWFwX3NlY3RvcihcXHUwMDI2aXRlci1cXHUwMDNlaW9tYXAsIHBvcyk7XFxuIFxcdGJpby1cXHUwMDNlYmlfd3JpdGVfaGludCA9IGl0ZXItXFx1MDAzZWlub2RlLVxcdTAwM2VpX3dyaXRlX2hpbnQ7XFxuK1xcdGJpby1cXHUwMDNlYmlfd3JpdGVfc3RyZWFtID0gaXRlci1cXHUwMDNlaW9tYXAud3JpdGVfc3RyZWFtO1xcbiBcXHRiaW8tXFx1MDAzZWJpX2lvcHJpbyA9IGRpby1cXHUwMDNlaW9jYi1cXHUwMDNla2lfaW9wcmlvO1xcbiBcXHRiaW8tXFx1MDAzZWJpX3ByaXZhdGUgPSBkaW87XFxuIFxcdGJpby1cXHUwMDNlYmlfZW5kX2lvID0gaW9tYXBfZGlvX2Jpb19lbmRfaW87XFxuZGlmZiAtLWdpdCBhL2ZzL2lvbWFwL2lvZW5kLmMgYi9mcy9pb21hcC9pb2VuZC5jXFxuaW5kZXggMDU2NTMyODc2NGMxNzUuLjVlYTJjNjg5OTNjZjkzIDEwMDY0NFxcbi0tLSBhL2ZzL2lvbWFwL2lvZW5kLmNcXG4rKysgYi9mcy9pb21hcC9pb2VuZC5jXFxuQEAgLTE2NSw2ICsxNjUsNyBAQCBzdGF0aWMgc3RydWN0IGlvbWFwX2lvZW5kICppb21hcF9hbGxvY19pb2VuZChzdHJ1Y3QgaW9tYXBfd3JpdGVwYWdlX2N0eCAqd3BjLFxcbiBcXHRcXHRcXHQgICAgICAgR0ZQX05PRlMsIFxcdTAwMjZpb21hcF9pb2VuZF9iaW9zZXQpO1xcbiBcXHRiaW8tXFx1MDAzZWJpX2l0ZXIuYmlfc2VjdG9yID0gaW9tYXBfc2VjdG9yKFxcdTAwMjZ3cGMtXFx1MDAzZWlvbWFwLCBwb3MpO1xcbiBcXHRiaW8tXFx1MDAzZWJpX3dyaXRlX2hpbnQgPSB3cGMtXFx1MDAzZWlub2RlLVxcdTAwM2VpX3dyaXRlX2hpbnQ7XFxuK1xcdGJpby1cXHUwMDNlYmlfd3JpdGVfc3RyZWFtID0gd3BjLVxcdTAwM2Vpb21hcC53cml0ZV9zdHJlYW07XFxuIFxcdHdiY19pbml0X2Jpbyh3cGMtXFx1MDAzZXdiYywgYmlvKTtcXG4gXFx0d3BjLVxcdTAwM2Vucl9mb2xpb3MgPSAwO1xcbiBcXHRyZXR1cm4gaW9tYXBfaW5pdF9pb2VuZCh3cGMtXFx1MDAzZWlub2RlLCBiaW8sIHBvcywgaW9lbmRfZmxhZ3MpO1xcbkBAIC0xODgsNiArMTg5LDggQEAgc3RhdGljIGJvb2wgaW9tYXBfY2FuX2FkZF90b19pb2VuZChzdHJ1Y3QgaW9tYXBfd3JpdGVwYWdlX2N0eCAqd3BjLCBsb2ZmX3QgcG9zLFxcbiBcXHRpZiAoISh3cGMtXFx1MDAzZWlvbWFwLmZsYWdzIFxcdTAwMjYgSU9NQVBfRl9BTk9OX1dSSVRFKSBcXHUwMDI2XFx1MDAyNlxcbiBcXHQgICAgaW9tYXBfc2VjdG9yKFxcdTAwMjZ3cGMtXFx1MDAzZWlvbWFwLCBwb3MpICE9IGJpb19lbmRfc2VjdG9yKFxcdTAwMjZpb2VuZC1cXHUwMDNlaW9fYmlvKSlcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHRpZiAod3BjLVxcdTAwM2Vpb21hcC53cml0ZV9zdHJlYW0gIT0gaW9lbmQtXFx1MDAzZWlvX2Jpby5iaV93cml0ZV9zdHJlYW0pXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4gXFx0LypcXG4gXFx0ICogTGltaXQgaW9lbmQgYmlvIGNoYWluIGxlbmd0aHMgdG8gbWluaW1pc2UgSU8gY29tcGxldGlvbiBsYXRlbmN5LiBUaGlzXFxuIFxcdCAqIGFsc28gcHJldmVudHMgbG9uZyB0aWdodCBsb29wcyBlbmRpbmcgcGFnZSB3cml0ZWJhY2sgb24gYWxsIHRoZVxcbmRpZmYgLS1naXQgYS9mcy94ZnMvbGlieGZzL3hmc19ibWFwLmMgYi9mcy94ZnMvbGlieGZzL3hmc19ibWFwLmNcXG5pbmRleCBkNjRkZWZlZGE2NDVlZC4uODcyYTRhYmQyMzE1N2MgMTAwNjQ0XFxuLS0tIGEvZnMveGZzL2xpYnhmcy94ZnNfYm1hcC5jXFxuKysrIGIvZnMveGZzL2xpYnhmcy94ZnNfYm1hcC5jXFxuQEAgLTMxOTIsNiArMzE5Miw3MiBAQCB4ZnNfYm1hcF9zZWxlY3RfbWlubGVuKFxcbiBcXHRyZXR1cm4gYXJncy1cXHUwMDNlbWF4bGVuO1xcbiB9XFxuIFxcbisjZGVmaW5lXFx0R0VORVJJQ19BR19TRVRfU1pcXHQoMilcXG4rXFxuK3N0YXRpYyBpbmxpbmUgeGZzX2FnbnVtYmVyX3RcXG4reGZzX2RlZmF1bHRfYWdfc2V0X3NpemUoXFxuK1xcdHN0cnVjdCB4ZnNfaW5vZGVcXHQqaXApXFxuK3tcXG4rXFx0c3RydWN0IHhmc19tb3VudFxcdCptcCA9IGlwLVxcdTAwM2VpX21vdW50O1xcbitcXG4rXFx0cmV0dXJuIG1pbl90KHhmc19hZ251bWJlcl90LCBHRU5FUklDX0FHX1NFVF9TWiwgbXAtXFx1MDAzZW1fc2Iuc2JfYWdjb3VudCk7XFxuK31cXG4rXFxuK3N0YXRpYyB4ZnNfYWdudW1iZXJfdFxcbit4ZnNfaW5vZGVfd3JpdGVfc3RyZWFtX2FnX3NldChcXG4rXFx0c3RydWN0IHhmc19pbm9kZVxcdCppcCxcXG4rXFx0eGZzX2FnbnVtYmVyX3RcXHRcXHQqdGFyZ2V0X2Fnbm8pXFxuK3tcXG4rXFx0c3RydWN0IHhmc19tb3VudFxcdCptcCA9IGlwLVxcdTAwM2VpX21vdW50O1xcbitcXHR1aW50MzJfdFxcdFxcdG5yX3N0cmVhbXMgPSB4ZnNfaW5vZGVfbWF4X3dyaXRlX3N0cmVhbXMoaXApO1xcbitcXHR1aW50MzJfdFxcdFxcdHN0cmVhbV9pZCA9IGlwLVxcdTAwM2VpX3dyaXRlX3N0cmVhbTtcXG4rXFx0dWludDMyX3RcXHRcXHRucl9hZ3MgPSBtcC1cXHUwMDNlbV9zYi5zYl9hZ2NvdW50O1xcbitcXHR4ZnNfYWdudW1iZXJfdFxcdFxcdHNldF9zaXplO1xcbitcXG4rXFxuK1xcdGlmICghbnJfc3RyZWFtcylcXG4rXFx0XFx0cmV0dXJuIHhmc19kZWZhdWx0X2FnX3NldF9zaXplKGlwKTtcXG4rXFxuK1xcdHN0cmVhbV9pZCAtPSAxOyAvKiBGb3IgMC1iYXNlZCBtYXRoOyBzdHJlYW0taWRzIGFyZSAxLWJhc2VkICovXFxuK1xcdHNldF9zaXplID0gbnJfYWdzIC8gbnJfc3RyZWFtcztcXG4rXFxuK1xcdGlmIChzZXRfc2l6ZSkge1xcbitcXHRcXHQqdGFyZ2V0X2Fnbm8gPSBzdHJlYW1faWQgKiBzZXRfc2l6ZTtcXG4rXFx0XFx0LyogdW5ldmVuIGRpc3RyaWJ1dGlvbiwgbGFzdCBzdHJlYW0gd2lsbCBjb3ZlciBleHRyYSBBR3MgKi9cXG4rXFx0XFx0aWYgKHN0cmVhbV9pZCA9PSBucl9zdHJlYW1zIC0gMSlcXG4rXFx0XFx0XFx0c2V0X3NpemUgPSBucl9hZ3MgLSAqdGFyZ2V0X2Fnbm87XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdC8qIGZvciB0aGUgY2FzZSB3aGVuIHdlIGhhdmUgZmV3ZXIgQUdzIHRoYW4gc3RyZWFtcyAqL1xcbitcXHRcXHQqdGFyZ2V0X2Fnbm8gPSBzdHJlYW1faWQgJSBucl9hZ3M7XFxuK1xcdFxcdHNldF9zaXplID0gMTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIHNldF9zaXplO1xcbit9XFxuK1xcbitzdGF0aWMgeGZzX2FnbnVtYmVyX3RcXG4reGZzX2FnX3RvX2FnX3NldChcXG4rXFx0c3RydWN0IHhmc19ibWFsbG9jYVxcdCphcCxcXG4rXFx0eGZzX2FnbnVtYmVyX3RcXHRcXHRiYXNlX2Fnbm8pXFxuK3tcXG4rXFx0c3RydWN0IHhmc19pbm9kZVxcdCppcCA9IGFwLVxcdTAwM2VpcDtcXG4rXFx0c3RydWN0IHhmc19tb3VudFxcdCptcCA9IGlwLVxcdTAwM2VpX21vdW50O1xcbitcXHR4ZnNfYWdudW1iZXJfdFxcdFxcdHNldF9zaXplO1xcbitcXG4rXFx0LyogQXBwbHkgZmFubmluZyBvbmx5IGZvciByZWd1bGFyIGZpbGUgZGF0YSAqL1xcbitcXHRpZiAoIShhcC1cXHUwMDNlZGF0YXR5cGUgXFx1MDAyNiBYRlNfQUxMT0NfVVNFUkRBVEEpKVxcbitcXHRcXHRyZXR1cm4gYmFzZV9hZ25vO1xcbitcXG4rXFx0aWYgKGlwLVxcdTAwM2VpX3dyaXRlX3N0cmVhbSlcXG4rXFx0XFx0c2V0X3NpemUgPSB4ZnNfaW5vZGVfd3JpdGVfc3RyZWFtX2FnX3NldChpcCwgXFx1MDAyNmJhc2VfYWdubyk7XFxuK1xcdGVsc2VcXG4rXFx0XFx0c2V0X3NpemUgPSB4ZnNfZGVmYXVsdF9hZ19zZXRfc2l6ZShpcCk7XFxuK1xcbitcXHQvKiBGYW4gb3V0IHdpdGhpbiB0aGUgQUcgc2V0IHVzaW5nIGxvdyBiaXRzIG9mIHRoZSBpbm9kZSAqL1xcbitcXHRyZXR1cm4gKGJhc2VfYWdubyArIChYRlNfSU5PX1RPX0FHSU5PKG1wLCBJX0lOTyhpcCkpICUgc2V0X3NpemUpKSAlXFxuK1xcdFxcdG1wLVxcdTAwM2VtX3NiLnNiX2FnY291bnQ7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnRcXG4geGZzX2JtYXBfYnRhbGxvY19zZWxlY3RfbGVuZ3RocyhcXG4gXFx0c3RydWN0IHhmc19ibWFsbG9jYVxcdCphcCxcXG5AQCAtMzU4Nyw4ICszNjUzLDE2IEBAIHhmc19ibWFwX2J0YWxsb2NfYmVzdF9sZW5ndGgoXFxuIHtcXG4gXFx0eGZzX2V4dGxlbl90XFx0XFx0YmxlbiA9IDA7XFxuIFxcdGludFxcdFxcdFxcdGVycm9yO1xcbitcXHR4ZnNfYWdudW1iZXJfdFxcdFxcdHRhcmdldF9hZywgc3RhcnRfYWc7XFxuIFxcbiBcXHRhcC1cXHUwMDNlYmxrbm8gPSBYRlNfSU5PREVfVE9fRlNCKGFwLVxcdTAwM2VpcCk7XFxuK1xcbitcXHQvKiBmYW4gb3V0IGluaXRpYWwgQUcgYWNyb3NzIHRoZSBnZW5lcmljIEFHIHNldCAqL1xcbitcXHRzdGFydF9hZyA9IFhGU19GU0JfVE9fQUdOTyhhcmdzLVxcdTAwM2VtcCwgYXAtXFx1MDAzZWJsa25vKTtcXG4rXFx0dGFyZ2V0X2FnID0geGZzX2FnX3RvX2FnX3NldChhcCwgc3RhcnRfYWcpO1xcbitcXHRpZiAodGFyZ2V0X2FnICE9IHN0YXJ0X2FnKVxcbitcXHRcXHRhcC1cXHUwMDNlYmxrbm8gPSBYRlNfQUdCX1RPX0ZTQihhcmdzLVxcdTAwM2VtcCwgdGFyZ2V0X2FnLCAwKTtcXG4rXFxuIFxcdGlmICgheGZzX2JtYXBfYWRqYWNlbnQoYXApKVxcbiBcXHRcXHRhcC1cXHUwMDNlZW9mID0gZmFsc2U7XFxuIFxcbmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2ljYWNoZS5jIGIvZnMveGZzL3hmc19pY2FjaGUuY1xcbmluZGV4IDlkOGRkMzBiZDkyN2EyLi43YjlkZGE3NDEyMmYwZSAxMDA2NDRcXG4tLS0gYS9mcy94ZnMveGZzX2ljYWNoZS5jXFxuKysrIGIvZnMveGZzL3hmc19pY2FjaGUuY1xcbkBAIC0xMjksNiArMTI5LDcgQEAgeGZzX2lub2RlX2FsbG9jKFxcbiBcXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2aXAtXFx1MDAzZWlfaW9lbmRfbG9jayk7XFxuIFxcdGlwLVxcdTAwM2VpX25leHRfdW5saW5rZWQgPSBOVUxMQUdJTk87XFxuIFxcdGlwLVxcdTAwM2VpX3ByZXZfdW5saW5rZWQgPSAwO1xcbitcXHRpcC1cXHUwMDNlaV93cml0ZV9zdHJlYW0gPSAwO1xcbiBcXG4gXFx0cmV0dXJuIGlwO1xcbiB9XFxuZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfaW5vZGUuYyBiL2ZzL3hmcy94ZnNfaW5vZGUuY1xcbmluZGV4IDE1Mjc5ZDIyYTg5NGZhLi42MzhiZWUzZTRhYzIyOCAxMDA2NDRcXG4tLS0gYS9mcy94ZnMveGZzX2lub2RlLmNcXG4rKysgYi9mcy94ZnMveGZzX2lub2RlLmNcXG5AQCAtNCw2ICs0LDcgQEBcXG4gICogQWxsIFJpZ2h0cyBSZXNlcnZlZC5cXG4gICovXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9pdmVyc2lvbi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvYW5vbl9pbm9kZXMuaFxcdTAwM2VcXG4gXFxuICNpbmNsdWRlIFxcXCJ4ZnNfcGxhdGZvcm0uaFxcXCJcXG4gI2luY2x1ZGUgXFxcInhmc19mcy5oXFxcIlxcbkBAIC00Nyw2ICs0OCwxODAgQEBcXG4gXFxuIHN0cnVjdCBrbWVtX2NhY2hlICp4ZnNfaW5vZGVfY2FjaGU7XFxuIFxcbitpbnRcXG4reGZzX2lub2RlX21heF93cml0ZV9zdHJlYW1zKFxcbitcXHRzdHJ1Y3QgeGZzX2lub2RlXFx0KmlwKVxcbit7XFxuK1xcdHN0cnVjdCBibG9ja19kZXZpY2VcXHQqYmRldjtcXG4rXFx0c3RydWN0IHhmc19tb3VudFxcdCptcCA9IGlwLVxcdTAwM2VpX21vdW50O1xcbitcXHRpbnQgbnJfc3RyZWFtcztcXG4rXFx0eGZzX2FnbnVtYmVyX3QgbnJfYWdzLCBhZ19zZXRfc2l6ZTtcXG4rXFx0Ym9vbFxcdFxcdFxcdGlzX2ZpbGVzdHJlYW0sIGlzX3JlYWx0aW1lO1xcbitcXG4rXFx0eGZzX2lsb2NrKGlwLCBYRlNfSUxPQ0tfU0hBUkVEKTtcXG4rXFx0aXNfZmlsZXN0cmVhbSA9IHhmc19pbm9kZV9pc19maWxlc3RyZWFtKGlwKTtcXG4rXFx0aXNfcmVhbHRpbWUgPSBYRlNfSVNfUkVBTFRJTUVfSU5PREUoaXApO1xcbitcXHRiZGV2ID0geGZzX2lub2RlX2J1ZnRhcmcoaXApLVxcdTAwM2VidF9iZGV2O1xcbitcXHR4ZnNfaXVubG9jayhpcCwgWEZTX0lMT0NLX1NIQVJFRCk7XFxuK1xcbitcXHRpZiAoIWJkZXYgfHwgaXNfZmlsZXN0cmVhbSB8fCBpc19yZWFsdGltZSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRucl9zdHJlYW1zID0gYmRldl9tYXhfd3JpdGVfc3RyZWFtcyhiZGV2KTtcXG4rXFx0aWYgKG5yX3N0cmVhbXMgXFx1MDAzZSAwKVxcbitcXHRcXHRyZXR1cm4gbnJfc3RyZWFtcztcXG4rXFx0LypcXG4rXFx0ICogRW5hYmxlIHNvZnR3YXJlLW9ubHkgc3RyZWFtcyBpZiBoYXJkd2FyZSBzdHJlYW1zIGFyZSBub3QgYXZhaWxhYmxlLlxcbitcXHQgKiBUaGlzIGhlbHBzIHRvXFxuK1xcdCAqIC0gaW1wcm92ZSBpc29sYXRpb247IHJlZHVjZSBhbGxvY2F0aW9uIGludGVybGVhdmluZy5cXG4rXFx0ICogLSBpbXByb3ZlIGNvbmN1cnJlbmN5IHVzaW5nIEFHLXNldCBiYXNlZCBzdGVlcmluZyB3aXRoaW4gYW5kIGFjcm9zcyBzdHJlYW1zLlxcbitcXHQgKi9cXG4rXFx0bnJfYWdzID0gbXAtXFx1MDAzZW1fc2Iuc2JfYWdjb3VudDtcXG4rXFx0aWYgKG5yX2FncyBcXHUwMDNlPSAxNilcXG4rXFx0XFx0YWdfc2V0X3NpemUgPSA0O1xcbitcXHRlbHNlIGlmIChucl9hZ3MgXFx1MDAzZT0gOClcXG4rXFx0XFx0YWdfc2V0X3NpemUgPSAyO1xcbitcXHRlbHNlXFxuK1xcdFxcdGFnX3NldF9zaXplID0gMTtcXG4rXFx0bnJfc3RyZWFtcyA9IG5yX2FncyAvIGFnX3NldF9zaXplO1xcbitcXHRyZXR1cm4gbWluX3QodWludDE2X3QsIG5yX3N0cmVhbXMsIFhGU19TV19XUklURV9TVFJFQU1TX01BWCk7XFxuK31cXG4rXFxuK3VpbnQxNl90XFxuK3hmc19pbm9kZV9nZXRfd3JpdGVfc3RyZWFtKFxcbitcXHRzdHJ1Y3QgeGZzX2lub2RlXFx0KmlwKVxcbit7XFxuK1xcdHVpbnQxNl90XFx0c3RyZWFtX2lkO1xcbitcXG4rXFx0eGZzX2lsb2NrKGlwLCBYRlNfSUxPQ0tfU0hBUkVEKTtcXG4rXFx0c3RyZWFtX2lkID0gaXAtXFx1MDAzZWlfd3JpdGVfc3RyZWFtO1xcbitcXHR4ZnNfaXVubG9jayhpcCwgWEZTX0lMT0NLX1NIQVJFRCk7XFxuK1xcbitcXHRyZXR1cm4gc3RyZWFtX2lkO1xcbit9XFxuK1xcbitzdHJ1Y3QgeGZzX3dyaXRlX3N0cmVhbSB7XFxuK1xcdHN0cnVjdCB4ZnNfbW91bnRcXHQqbXA7XFxuK1xcdHVpbnQxNl90XFx0XFx0c3RyZWFtX2lkO1xcdC8qIDEtYmFzZWQgKi9cXG4rfTtcXG4rXFxuK3N0YXRpYyBpbnRcXG4reGZzX3dyaXRlX3N0cmVhbV9yZWxlYXNlKFxcbitcXHRzdHJ1Y3QgaW5vZGVcXHRcXHQqaW5vZGUsXFxuK1xcdHN0cnVjdCBmaWxlXFx0XFx0KmZpbGUpXFxuK3tcXG4rXFx0c3RydWN0IHhmc193cml0ZV9zdHJlYW1cXHQqd3MgPSBmaWxlLVxcdTAwM2Vwcml2YXRlX2RhdGE7XFxuK1xcdHN0cnVjdCB4ZnNfbW91bnRcXHQqbXAgPSB3cy1cXHUwMDNlbXA7XFxuK1xcbitcXHRzcGluX2xvY2soXFx1MDAyNm1wLVxcdTAwM2VtX3N0cmVhbXNfbG9jayk7XFxuK1xcdGNsZWFyX2JpdCh3cy1cXHUwMDNlc3RyZWFtX2lkIC0gMSwgbXAtXFx1MDAzZW1fc3RyZWFtc19pbl91c2UpO1xcbitcXHRzcGluX3VubG9jayhcXHUwMDI2bXAtXFx1MDAzZW1fc3RyZWFtc19sb2NrKTtcXG4rXFx0a2ZyZWUod3MpO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgeGZzX3dyaXRlX3N0cmVhbV9mb3BzID0ge1xcbitcXHQucmVsZWFzZVxcdD0geGZzX3dyaXRlX3N0cmVhbV9yZWxlYXNlLFxcbitcXHQubGxzZWVrXFx0XFx0PSBub29wX2xsc2VlayxcXG4rfTtcXG4rXFxuK2ludFxcbit4ZnNfaW5vZGVfd3JpdGVfc3RyZWFtX29wZW4oXFxuK1xcdHN0cnVjdCB4ZnNfaW5vZGVcXHQqaXAsXFxuK1xcdHUzMlxcdFxcdFxcdGZsYWdzLFxcbitcXHR1MzJcXHRcXHRcXHQqc3RyZWFtX2lkcClcXG4re1xcbitcXHRzdHJ1Y3QgeGZzX21vdW50XFx0Km1wID0gaXAtXFx1MDAzZWlfbW91bnQ7XFxuK1xcdHN0cnVjdCB4ZnNfd3JpdGVfc3RyZWFtXFx0KndzO1xcbitcXHRpbnRcXHRcXHRcXHRtYXgsIHNsb3QsIGZkLCByZXQ7XFxuK1xcbitcXHRpZiAoZmxhZ3MgXFx1MDAyNiB+RlNfV1JJVEVfU1RSRUFNX09QRU5fRVhBQ1QpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0bWF4ID0geGZzX2lub2RlX21heF93cml0ZV9zdHJlYW1zKGlwKTtcXG4rXFx0aWYgKCFtYXgpXFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0QVNTRVJUKG1wLVxcdTAwM2VtX3N0cmVhbXNfaW5fdXNlKTtcXG4rXFxuK1xcdHdzID0ga21hbGxvYyhzaXplb2YoKndzKSwgR0ZQX0tFUk5FTCk7XFxuK1xcdGlmICghd3MpXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXG4rXFx0c3Bpbl9sb2NrKFxcdTAwMjZtcC1cXHUwMDNlbV9zdHJlYW1zX2xvY2spO1xcbitcXHRpZiAoZmxhZ3MgXFx1MDAyNiBGU19XUklURV9TVFJFQU1fT1BFTl9FWEFDVCkge1xcbitcXHRcXHRpZiAoISpzdHJlYW1faWRwIHx8ICpzdHJlYW1faWRwIFxcdTAwM2UgbWF4KSB7XFxuK1xcdFxcdFxcdHJldCA9IC1FSU5WQUw7XFxuK1xcdFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4rXFx0XFx0fVxcbitcXHRcXHRzbG90ID0gKnN0cmVhbV9pZHAgLSAxO1xcbitcXHRcXHRpZiAodGVzdF9iaXQoc2xvdCwgbXAtXFx1MDAzZW1fc3RyZWFtc19pbl91c2UpKSB7XFxuK1xcdFxcdFxcdHJldCA9IC1FQlVTWTtcXG4rXFx0XFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbitcXHRcXHR9XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdHNsb3QgPSBmaW5kX2ZpcnN0X3plcm9fYml0KG1wLVxcdTAwM2VtX3N0cmVhbXNfaW5fdXNlLCBtYXgpO1xcbitcXHRcXHRpZiAoc2xvdCBcXHUwMDNlPSBtYXgpIHtcXG4rXFx0XFx0XFx0cmV0ID0gLUVCVVNZO1xcbitcXHRcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXHRzZXRfYml0KHNsb3QsIG1wLVxcdTAwM2VtX3N0cmVhbXNfaW5fdXNlKTtcXG4rXFx0c3Bpbl91bmxvY2soXFx1MDAyNm1wLVxcdTAwM2VtX3N0cmVhbXNfbG9jayk7XFxuK1xcbitcXHR3cy1cXHUwMDNlbXAgPSBtcDtcXG4rXFx0d3MtXFx1MDAzZXN0cmVhbV9pZCA9IHNsb3QgKyAxO1xcdC8qIGNvbnZlcnQgdG8gMS1iYXNlZCAqL1xcbitcXG4rXFx0ZmQgPSBhbm9uX2lub2RlX2dldGZkKFxcXCJbeGZzX3dyaXRlX3N0cmVhbV1cXFwiLCBcXHUwMDI2eGZzX3dyaXRlX3N0cmVhbV9mb3BzLCB3cyxcXG4rXFx0XFx0XFx0ICAgICAgT19SRE9OTFkgfCBPX0NMT0VYRUMpO1xcbitcXHRpZiAoZmQgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdHNwaW5fbG9jayhcXHUwMDI2bXAtXFx1MDAzZW1fc3RyZWFtc19sb2NrKTtcXG4rXFx0XFx0Y2xlYXJfYml0KHNsb3QsIG1wLVxcdTAwM2VtX3N0cmVhbXNfaW5fdXNlKTtcXG4rXFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNm1wLVxcdTAwM2VtX3N0cmVhbXNfbG9jayk7XFxuK1xcdFxcdGtmcmVlKHdzKTtcXG4rXFx0XFx0cmV0dXJuIGZkO1xcbitcXHR9XFxuK1xcbitcXHQqc3RyZWFtX2lkcCA9IHdzLVxcdTAwM2VzdHJlYW1faWQ7XFxuK1xcdHJldHVybiBmZDtcXG4rXFxuK291dF91bmxvY2s6XFxuK1xcdHNwaW5fdW5sb2NrKFxcdTAwMjZtcC1cXHUwMDNlbV9zdHJlYW1zX2xvY2spO1xcbitcXHRrZnJlZSh3cyk7XFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuK2ludFxcbit4ZnNfaW5vZGVfc2V0X3dyaXRlX3N0cmVhbShcXG4rXFx0c3RydWN0IHhmc19pbm9kZVxcdCppcCxcXG4rXFx0aW50XFx0XFx0XFx0c3RyZWFtX2ZkKVxcbit7XFxuK1xcdENMQVNTKGZkLCBmKShzdHJlYW1fZmQpO1xcbitcXHRzdHJ1Y3QgeGZzX3dyaXRlX3N0cmVhbVxcdCp3cztcXG4rXFx0aW50XFx0XFx0XFx0cmV0ID0gMDtcXG4rXFxuK1xcdGlmICghZmRfZmlsZShmKSlcXG4rXFx0XFx0cmV0dXJuIC1FQkFERjtcXG4rXFx0aWYgKGZkX2ZpbGUoZiktXFx1MDAzZWZfb3AgIT0gXFx1MDAyNnhmc193cml0ZV9zdHJlYW1fZm9wcylcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHR3cyA9IGZkX2ZpbGUoZiktXFx1MDAzZXByaXZhdGVfZGF0YTtcXG4rXFx0aWYgKHdzLVxcdTAwM2VtcCAhPSBpcC1cXHUwMDNlaV9tb3VudClcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHR4ZnNfaWxvY2soaXAsIFhGU19JTE9DS19FWENMKTtcXG4rXFxuK1xcdGlmIChYRlNfSVNfUkVBTFRJTUVfSU5PREUoaXApIHx8IHhmc19pbm9kZV9pc19maWxlc3RyZWFtKGlwKSB8fFxcbitcXHQgICAgVkZTX0koaXApLVxcdTAwM2VpX3dyaXRlX2hpbnQgIT0gV1JJVEVfTElGRV9OT1RfU0VUKSB7XFxuK1xcdFxcdHJldCA9IC1FSU5WQUw7XFxuK1xcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4rXFx0fVxcbitcXG4rXFx0aXAtXFx1MDAzZWlfd3JpdGVfc3RyZWFtID0gd3MtXFx1MDAzZXN0cmVhbV9pZDtcXG4rb3V0X3VubG9jazpcXG4rXFx0eGZzX2l1bmxvY2soaXAsIFhGU19JTE9DS19FWENMKTtcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4gLypcXG4gICogVGhlc2UgdHdvIGFyZSB3cmFwcGVyIHJvdXRpbmVzIGFyb3VuZCB0aGUgeGZzX2lsb2NrKCkgcm91dGluZSB1c2VkIHRvXFxuICAqIGNlbnRyYWxpemUgc29tZSBncnVuZ3kgY29kZS4gIFRoZXkgYXJlIHVzZWQgaW4gcGxhY2VzIHRoYXQgd2lzaCB0byBsb2NrIHRoZVxcbmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2lub2RlLmggYi9mcy94ZnMveGZzX2lub2RlLmhcXG5pbmRleCAzNGMxMDM4ZWJmY2RlMS4uNmFiZjgyZmZiZjgyYWMgMTAwNjQ0XFxuLS0tIGEvZnMveGZzL3hmc19pbm9kZS5oXFxuKysrIGIvZnMveGZzL3hmc19pbm9kZS5oXFxuQEAgLTM3LDYgKzM3LDkgQEAgdHlwZWRlZiBzdHJ1Y3QgeGZzX2lub2RlIHtcXG4gXFx0c3RydWN0IHhmc19pZm9ya1xcdGlfZGY7XFx0XFx0LyogZGF0YSBmb3JrICovXFxuIFxcdHN0cnVjdCB4ZnNfaWZvcmtcXHRpX2FmO1xcdFxcdC8qIGF0dHJpYnV0ZSBmb3JrICovXFxuIFxcbitcXHQvKiBXcml0ZSBzdHJlYW0gaW5mb3JtYXRpb24gKi9cXG4rXFx0dWludDE2X3RcXHRcXHRpX3dyaXRlX3N0cmVhbTtcXG4rXFxuIFxcdC8qIFRyYW5zYWN0aW9uIGFuZCBsb2NraW5nIGluZm9ybWF0aW9uLiAqL1xcbiBcXHRzdHJ1Y3QgeGZzX2lub2RlX2xvZ19pdGVtICppX2l0ZW1wO1xcdC8qIGxvZ2dpbmcgaW5mb3JtYXRpb24gKi9cXG4gXFx0c3RydWN0IHJ3X3NlbWFwaG9yZVxcdGlfbG9jaztcXHRcXHQvKiBpbm9kZSBsb2NrICovXFxuQEAgLTY3Myw0ICs2NzYsOSBAQCBpbnQgeGZzX2ljcmVhdGVfZHFhbGxvYyhjb25zdCBzdHJ1Y3QgeGZzX2ljcmVhdGVfYXJncyAqYXJncyxcXG4gXFx0XFx0c3RydWN0IHhmc19kcXVvdCAqKnVkcXBwLCBzdHJ1Y3QgeGZzX2RxdW90ICoqZ2RxcHAsXFxuIFxcdFxcdHN0cnVjdCB4ZnNfZHF1b3QgKipwZHFwcCk7XFxuIFxcbitpbnQgeGZzX2lub2RlX21heF93cml0ZV9zdHJlYW1zKHN0cnVjdCB4ZnNfaW5vZGUgKmlwKTtcXG4rdWludDE2X3QgeGZzX2lub2RlX2dldF93cml0ZV9zdHJlYW0oc3RydWN0IHhmc19pbm9kZSAqaXApO1xcbitpbnQgeGZzX2lub2RlX3dyaXRlX3N0cmVhbV9vcGVuKHN0cnVjdCB4ZnNfaW5vZGUgKmlwLCB1MzIgZmxhZ3MsXFxuK1xcdFxcdHUzMiAqc3RyZWFtX2lkcCk7XFxuK2ludCB4ZnNfaW5vZGVfc2V0X3dyaXRlX3N0cmVhbShzdHJ1Y3QgeGZzX2lub2RlICppcCwgaW50IHN0cmVhbV9mZCk7XFxuICNlbmRpZlxcdC8qIF9fWEZTX0lOT0RFX0hfXyAqL1xcbmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2lvY3RsLmMgYi9mcy94ZnMveGZzX2lvY3RsLmNcXG5pbmRleCAxYjUzNzAxYmViZWExYS4uODY0MGU2Mzg5NzY4M2YgMTAwNjQ0XFxuLS0tIGEvZnMveGZzL3hmc19pb2N0bC5jXFxuKysrIGIvZnMveGZzL3hmc19pb2N0bC5jXFxuQEAgLTU1Nyw2ICs1NTcsMTIgQEAgeGZzX2lvY3RsX3NldGF0dHJfeGZsYWdzKFxcbiBcXHRib29sXFx0XFx0XFx0cnRmbGFnID0gKGZhLVxcdTAwM2Vmc3hfeGZsYWdzIFxcdTAwMjYgRlNfWEZMQUdfUkVBTFRJTUUpO1xcbiBcXHR1aW50NjRfdFxcdFxcdGlfZmxhZ3MyO1xcbiBcXG4rXFx0aWYgKChmYS1cXHUwMDNlZnN4X3hmbGFncyBcXHUwMDI2IEZTX1hGTEFHX0ZJTEVTVFJFQU0pIFxcdTAwMjZcXHUwMDI2IGlwLVxcdTAwM2VpX3dyaXRlX3N0cmVhbSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRpZiAocnRmbGFnIFxcdTAwMjZcXHUwMDI2IGlwLVxcdTAwM2VpX3dyaXRlX3N0cmVhbSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbiBcXHRpZiAocnRmbGFnICE9IFhGU19JU19SRUFMVElNRV9JTk9ERShpcCkpIHtcXG4gXFx0XFx0LyogQ2FuJ3QgY2hhbmdlIHJlYWx0aW1lIGZsYWcgaWYgYW55IGV4dGVudHMgYXJlIGFsbG9jYXRlZC4gKi9cXG4gXFx0XFx0aWYgKHhmc19pbm9kZV9oYXNfZmlsZWRhdGEoaXApKVxcbkBAIC0xMjAwLDYgKzEyMDYsNTkgQEAgeGZzX2lvY3RsX2ZzX2NvdW50cyhcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnRcXG4reGZzX2lvY193cml0ZV9zdHJlYW1fb3BlbihcXG4rXFx0c3RydWN0IGZpbGVcXHRcXHQqZmlscCxcXG4rXFx0dm9pZCBfX3VzZXJcXHRcXHQqYXJnKVxcbit7XFxuK1xcdHN0cnVjdCB4ZnNfaW5vZGVcXHQqaXAgPSBYRlNfSShmaWxlX2lub2RlKGZpbHApKTtcXG4rXFx0c3RydWN0IGZzX3dyaXRlX3N0cmVhbV9vcGVuIHdzbztcXG4rXFx0aW50XFx0XFx0XFx0ZmQ7XFxuK1xcbitcXHRpZiAoY29weV9mcm9tX3VzZXIoXFx1MDAyNndzbywgYXJnLCBzaXplb2Yod3NvKSkpXFxuK1xcdFxcdHJldHVybiAtRUZBVUxUO1xcbitcXG4rXFx0ZmQgPSB4ZnNfaW5vZGVfd3JpdGVfc3RyZWFtX29wZW4oaXAsIHdzby5mbGFncywgXFx1MDAyNndzby5zdHJlYW1faWQpO1xcbitcXHRpZiAoZmQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gZmQ7XFxuK1xcbitcXHRpZiAoY29weV90b191c2VyKGFyZywgXFx1MDAyNndzbywgc2l6ZW9mKHdzbykpKVxcbitcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4rXFx0cmV0dXJuIGZkO1xcbit9XFxuK1xcbitzdGF0aWMgaW50XFxuK3hmc19pb2Nfd3JpdGVfc3RyZWFtX3NldChcXG4rXFx0c3RydWN0IGZpbGVcXHRcXHQqZmlscCxcXG4rXFx0dW5zaWduZWQgbG9uZ1xcdFxcdGFyZylcXG4re1xcbitcXHRzdHJ1Y3QgeGZzX2lub2RlXFx0KmlwID0gWEZTX0koZmlsZV9pbm9kZShmaWxwKSk7XFxuK1xcbitcXHRpZiAoIShmaWxwLVxcdTAwM2VmX21vZGUgXFx1MDAyNiBGTU9ERV9XUklURSkpXFxuK1xcdFxcdHJldHVybiAtRUJBREY7XFxuK1xcdHJldHVybiB4ZnNfaW5vZGVfc2V0X3dyaXRlX3N0cmVhbShpcCwgKGludClhcmcpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50XFxuK3hmc19pb2Nfd3JpdGVfc3RyZWFtX2dldChcXG4rXFx0c3RydWN0IHhmc19pbm9kZVxcdCppcCxcXG4rXFx0dm9pZCBfX3VzZXJcXHRcXHQqYXJnKVxcbit7XFxuK1xcdF9fdTMyIHN0cmVhbV9pZCA9IHhmc19pbm9kZV9nZXRfd3JpdGVfc3RyZWFtKGlwKTtcXG4rXFxuK1xcdHJldHVybiBwdXRfdXNlcihzdHJlYW1faWQsIChfX3UzMiBfX3VzZXIgKilhcmcpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50XFxuK3hmc19pb2Nfd3JpdGVfc3RyZWFtX2dldF9tYXgoXFxuK1xcdHN0cnVjdCB4ZnNfaW5vZGVcXHQqaXAsXFxuK1xcdHZvaWQgX191c2VyXFx0XFx0KmFyZylcXG4re1xcbitcXHRfX3UzMiBucl9zdHJlYW1zID0geGZzX2lub2RlX21heF93cml0ZV9zdHJlYW1zKGlwKTtcXG4rXFxuK1xcdHJldHVybiBwdXRfdXNlcihucl9zdHJlYW1zLCAoX191MzIgX191c2VyICopYXJnKTtcXG4rfVxcbitcXG4gLypcXG4gICogVGhlc2UgbG9uZy11bnVzZWQgaW9jdGxzIHdlcmUgcmVtb3ZlZCBmcm9tIHRoZSBvZmZpY2lhbCBpb2N0bCBBUEkgaW4gNS4xNyxcXG4gICogYnV0IHJldGFpbiB0aGVzZSBkZWZpbml0aW9ucyBzbyB0aGF0IHdlIGNhbiBsb2cgd2FybmluZ3MgYWJvdXQgdGhlbS5cXG5AQCAtMTQ2NSw2ICsxNTI0LDE2IEBAIHhmc19maWxlX2lvY3RsKFxcbiBcXHRcXHRyZXR1cm4geGZzX2lvY19oZWFsdGhfbW9uaXRvcihmaWxwLCBhcmcpO1xcbiBcXHRjYXNlIFhGU19JT0NfVkVSSUZZX01FRElBOlxcbiBcXHRcXHRyZXR1cm4geGZzX2lvY192ZXJpZnlfbWVkaWEoZmlscCwgYXJnKTtcXG4rXFx0Y2FzZSBGU19JT0NfV1JJVEVfU1RSRUFNX09QRU46XFxuK1xcdFxcdHJldHVybiB4ZnNfaW9jX3dyaXRlX3N0cmVhbV9vcGVuKGZpbHAsICh2b2lkIF9fdXNlciAqKWFyZyk7XFxuK1xcdGNhc2UgRlNfSU9DX1dSSVRFX1NUUkVBTV9TRVQ6XFxuK1xcdFxcdHJldHVybiB4ZnNfaW9jX3dyaXRlX3N0cmVhbV9zZXQoZmlscCwgcCk7XFxuK1xcdGNhc2UgRlNfSU9DX1dSSVRFX1NUUkVBTV9HRVQ6XFxuK1xcdFxcdHJldHVybiB4ZnNfaW9jX3dyaXRlX3N0cmVhbV9nZXQoWEZTX0koZmlsZV9pbm9kZShmaWxwKSksXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCh2b2lkIF9fdXNlciAqKWFyZyk7XFxuK1xcdGNhc2UgRlNfSU9DX1dSSVRFX1NUUkVBTV9HRVRfTUFYOlxcbitcXHRcXHRyZXR1cm4geGZzX2lvY193cml0ZV9zdHJlYW1fZ2V0X21heChYRlNfSShmaWxlX2lub2RlKGZpbHApKSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICh2b2lkIF9fdXNlciAqKWFyZyk7XFxuIFxcbiBcXHRkZWZhdWx0OlxcbiBcXHRcXHRyZXR1cm4gLUVOT1RUWTtcXG5kaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19pb21hcC5jIGIvZnMveGZzL3hmc19pb21hcC5jXFxuaW5kZXggMjI1YzNkZTg4ZDAzYjEuLmJmNDIzODk3ZDkxNmRmIDEwMDY0NFxcbi0tLSBhL2ZzL3hmcy94ZnNfaW9tYXAuY1xcbisrKyBiL2ZzL3hmcy94ZnNfaW9tYXAuY1xcbkBAIC0xNDQsNiArMTQ0LDcgQEAgeGZzX2JtYnRfdG9faW9tYXAoXFxuIFxcdH1cXG4gXFx0aW9tYXAtXFx1MDAzZW9mZnNldCA9IFhGU19GU0JfVE9fQihtcCwgaW1hcC1cXHUwMDNlYnJfc3RhcnRvZmYpO1xcbiBcXHRpb21hcC1cXHUwMDNlbGVuZ3RoID0gWEZTX0ZTQl9UT19CKG1wLCBpbWFwLVxcdTAwM2Vicl9ibG9ja2NvdW50KTtcXG4rXFx0aW9tYXAtXFx1MDAzZXdyaXRlX3N0cmVhbSA9IGlwLVxcdTAwM2VpX3dyaXRlX3N0cmVhbTtcXG4gXFx0aWYgKG1hcHBpbmdfZmxhZ3MgXFx1MDAyNiBJT01BUF9EQVgpIHtcXG4gXFx0XFx0aW9tYXAtXFx1MDAzZWRheF9kZXYgPSB0YXJnZXQtXFx1MDAzZWJ0X2RheGRldjtcXG4gXFx0fSBlbHNlIHtcXG5kaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19tb3VudC5oIGIvZnMveGZzL3hmc19tb3VudC5oXFxuaW5kZXggNjZhMDJkMWI5YWQ3YTEuLmFkNTExMTU1OTRkM2M4IDEwMDY0NFxcbi0tLSBhL2ZzL3hmcy94ZnNfbW91bnQuaFxcbisrKyBiL2ZzL3hmcy94ZnNfbW91bnQuaFxcbkBAIC00NSw2ICs0NSw4IEBAIGVudW0ge1xcbiBcXG4gI2RlZmluZSBYRlNfRVJSX1JFVFJZX0ZPUkVWRVJcXHQtMVxcbiBcXG4rI2RlZmluZSBYRlNfU1dfV1JJVEVfU1RSRUFNU19NQVhcXHQxNlxcbitcXG4gLypcXG4gICogQWx0aG91Z2ggcmV0cnlfdGltZW91dCBpcyBpbiBqaWZmaWVzIHdoaWNoIGlzIG5vcm1hbGx5IGFuIHVuc2lnbmVkIGxvbmcsXFxuICAqIHdlIGxpbWl0IHRoZSByZXRyeSB0aW1lb3V0IHRvIDg2NDAwIHNlY29uZHMsIG9yIG9uZSBkYXkuICBTbyBldmVuIGFcXG5AQCAtMzQ5LDYgKzM1MSw5IEBAIHR5cGVkZWYgc3RydWN0IHhmc19tb3VudCB7XFxuIFxcbiBcXHQvKiBJbmRleCBvZiB1dWlkIHJlY29yZCBpbiB0aGUgdXVpZCB4YXJyYXkuICovXFxuIFxcdHVuc2lnbmVkIGludFxcdFxcdG1fdXVpZF90YWJsZV9pbmRleDtcXG4rXFxuK1xcdHVuc2lnbmVkIGxvbmdcXHRcXHQqbV9zdHJlYW1zX2luX3VzZTtcXG4rXFx0c3BpbmxvY2tfdFxcdFxcdG1fc3RyZWFtc19sb2NrO1xcbiB9IHhmc19tb3VudF90O1xcbiBcXG4gI2RlZmluZSBNX0lHRU8obXApXFx0XFx0KFxcdTAwMjYobXApLVxcdTAwM2VtX2lub19nZW8pXFxuZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfc3VwZXIuYyBiL2ZzL3hmcy94ZnNfc3VwZXIuY1xcbmluZGV4IDg1MzFkNTI2ZmM0NDA5Li5kNjk4YmU1MDRjNDU0OCAxMDA2NDRcXG4tLS0gYS9mcy94ZnMveGZzX3N1cGVyLmNcXG4rKysgYi9mcy94ZnMveGZzX3N1cGVyLmNcXG5AQCAtODA1LDYgKzgwNSw3IEBAIHhmc19tb3VudF9mcmVlKFxcbiAjaWZkZWYgREVCVUdcXG4gXFx0a2ZyZWUobXAtXFx1MDAzZW1fZXJyb3J0YWcpO1xcbiAjZW5kaWZcXG4rXFx0Yml0bWFwX2ZyZWUobXAtXFx1MDAzZW1fc3RyZWFtc19pbl91c2UpO1xcbiBcXHRrZnJlZShtcCk7XFxuIH1cXG4gXFxuQEAgLTE2NTksNiArMTY2MCw3IEBAIHhmc19mc19maWxsX3N1cGVyKFxcbiBcXHRzdHJ1Y3QgeGZzX21vdW50XFx0Km1wID0gc2ItXFx1MDAzZXNfZnNfaW5mbztcXG4gXFx0c3RydWN0IGlub2RlXFx0XFx0KnJvb3Q7XFxuIFxcdGludFxcdFxcdFxcdGZsYWdzID0gMCwgZXJyb3I7XFxuK1xcdGludFxcdFxcdFxcdG5yX3N0cmVhbXM7XFxuIFxcbiBcXHRtcC1cXHUwMDNlbV9zdXBlciA9IHNiO1xcbiBcXG5AQCAtMTcwOCw2ICsxNzEwLDE1IEBAIHhmc19mc19maWxsX3N1cGVyKFxcbiBcXHRpZiAoZXJyb3IpXFxuIFxcdFxcdHJldHVybiBlcnJvcjtcXG4gXFxuK1xcdG5yX3N0cmVhbXMgPSBiZGV2X21heF93cml0ZV9zdHJlYW1zKG1wLVxcdTAwM2VtX2RkZXZfdGFyZ3AtXFx1MDAzZWJ0X2JkZXYpO1xcbitcXHRpZiAoIW5yX3N0cmVhbXMpXFxuK1xcdFxcdG5yX3N0cmVhbXMgPSBYRlNfU1dfV1JJVEVfU1RSRUFNU19NQVg7XFxuK1xcdG1wLVxcdTAwM2VtX3N0cmVhbXNfaW5fdXNlID0gYml0bWFwX3phbGxvYyhucl9zdHJlYW1zLCBHRlBfS0VSTkVMKTtcXG4rXFx0aWYgKCFtcC1cXHUwMDNlbV9zdHJlYW1zX2luX3VzZSkge1xcbitcXHRcXHRlcnJvciA9IC1FTk9NRU07XFxuK1xcdFxcdGdvdG8gb3V0X3NodXRkb3duX2RldmljZXM7XFxuK1xcdH1cXG4rXFxuIFxcdGlmICh4ZnNfZGVidWdmcykge1xcbiBcXHRcXHRtcC1cXHUwMDNlbV9kZWJ1Z2ZzID0geGZzX2RlYnVnZnNfbWtkaXIobXAtXFx1MDAzZW1fc3VwZXItXFx1MDAzZXNfaWQsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgeGZzX2RlYnVnZnMpO1xcbkBAIC0yMjQ5LDYgKzIyNjAsNyBAQCB4ZnNfaW5pdF9mc19jb250ZXh0KFxcbiAjZW5kaWZcXG4gXFxuIFxcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZtcC1cXHUwMDNlbV9zYl9sb2NrKTtcXG4rXFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNm1wLVxcdTAwM2VtX3N0cmVhbXNfbG9jayk7XFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBYR19UWVBFX01BWDsgaSsrKVxcbiBcXHRcXHR4YV9pbml0KFxcdTAwMjZtcC1cXHUwMDNlbV9ncm91cHNbaV0ueGEpO1xcbiBcXHRtdXRleF9pbml0KFxcdTAwMjZtcC1cXHUwMDNlbV9ncm93bG9jayk7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaW9tYXAuaCBiL2luY2x1ZGUvbGludXgvaW9tYXAuaFxcbmluZGV4IDU2YjQzZDU5NGU2ZTI5Li40ZGM3MWRhNTk4Zjk5ZCAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2lvbWFwLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2lvbWFwLmhcXG5AQCAtMTMyLDYgKzEzMiw4IEBAIHN0cnVjdCBpb21hcCB7XFxuIFxcdHU2NFxcdFxcdFxcdGxlbmd0aDtcXHQvKiBsZW5ndGggb2YgbWFwcGluZywgYnl0ZXMgKi9cXG4gXFx0dTE2XFx0XFx0XFx0dHlwZTtcXHQvKiB0eXBlIG9mIG1hcHBpbmcgKi9cXG4gXFx0dTE2XFx0XFx0XFx0ZmxhZ3M7XFx0LyogZmxhZ3MgZm9yIG1hcHBpbmcgKi9cXG4rXFx0dTE2XFx0XFx0XFx0d3JpdGVfc3RyZWFtOyAvKiB3cml0ZSBzdHJlYW0gZm9yIEkvTyAqL1xcbitcXHQvKiAyIGJ5dGVzIHBhZGRpbmcgaG9sZSBoZXJlICovXFxuIFxcdHN0cnVjdCBibG9ja19kZXZpY2VcXHQqYmRldjtcXHQvKiBibG9jayBkZXZpY2UgZm9yIEkvTyAqL1xcbiBcXHRzdHJ1Y3QgZGF4X2RldmljZVxcdCpkYXhfZGV2OyAvKiBkYXhfZGV2IGZvciBkYXggb3BlcmF0aW9ucyAqL1xcbiBcXHR2b2lkXFx0XFx0XFx0KmlubGluZV9kYXRhO1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvZnMuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9mcy5oXFxuaW5kZXggYmQ4NzI2MmYyZTM0OTQuLmE3NTZkMjdiZGY4NDE3IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9mcy5oXFxuKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L2ZzLmhcXG5AQCAtMzQ1LDYgKzM0NSwyMiBAQCBzdHJ1Y3QgZmlsZV9hdHRyIHtcXG4gLyogR2V0IGxvZ2ljYWwgYmxvY2sgbWV0YWRhdGEgY2FwYWJpbGl0eSBkZXRhaWxzICovXFxuICNkZWZpbmUgRlNfSU9DX0dFVExCTURfQ0FQXFx0XFx0X0lPV1IoMHgxNSwgMiwgc3RydWN0IGxvZ2ljYWxfYmxvY2tfbWV0YWRhdGFfY2FwKVxcbiBcXG4rc3RydWN0IGZzX3dyaXRlX3N0cmVhbV9vcGVuIHtcXG4rXFx0X191MzJcXHRcXHRzdHJlYW1faWQ7XFx0LyogSU46IHJlcXVlc3RlZCBpZCBpZiBPUEVOX0VYQUNUIHNldDsgT1VUOiBhc3NpZ25lZCBpZCAqL1xcbitcXHRfX3UzMlxcdFxcdGZsYWdzO1xcdFxcdC8qIElOOiBGU19XUklURV9TVFJFQU1fT1BFTl8qICovXFxuK307XFxuK1xcbisvKlxcbisgKiBGbGFnIHRvIGFzayBmb3Igc3BlY2lmaWMgc3RyZWFtX2lkLCBvdGhlcndpc2Uga2VybmVsIGNhbiByZXR1cm4gYW55LlxcbisgKiBGYWlscyB3aXRoIC1FQlVTWSBpZiB0aGF0IHN0cmVhbV9pZCBpcyBhbHJlYWR5IGhlbGRcXG4rICovXFxuKyNkZWZpbmUgRlNfV1JJVEVfU1RSRUFNX09QRU5fRVhBQ1RcXHQoMSBcXHUwMDNjXFx1MDAzYyAwKVxcbitcXG4rI2RlZmluZSBGU19JT0NfV1JJVEVfU1RSRUFNX0dFVF9NQVhcXHRfSU9SKCdmJywgMTM1LCBfX3UzMilcXG4rI2RlZmluZSBGU19JT0NfV1JJVEVfU1RSRUFNX09QRU5cXHRfSU9XUignZicsIDEzNiwgc3RydWN0IGZzX3dyaXRlX3N0cmVhbV9vcGVuKVxcbisjZGVmaW5lIEZTX0lPQ19XUklURV9TVFJFQU1fU0VUXFx0XFx0X0lPVygnZicsIDEzNywgX19zMzIpXFxuKyNkZWZpbmUgRlNfSU9DX1dSSVRFX1NUUkVBTV9HRVRcXHRcXHRfSU9SKCdmJywgMTM4LCBfX3UzMilcXG4rXFxuIC8qXFxuICAqIElub2RlIGZsYWdzIChGU19JT0NfR0VURkxBR1MgLyBGU19JT0NfU0VURkxBR1MpXFxuICAqXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE3VDE2OjA2OjA1LjE4OTYxMzc5MVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE3MTQxODAxNzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWEZTX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwieGZzX2lvY193cml0ZV9zdHJlYW1fb3BlblwiLFxuICAgIFwieGZzX2lvY193cml0ZV9zdHJlYW1fc2V0XCIsXG4gICAgXCJ4ZnNfaW9jX3dyaXRlX3N0cmVhbV9nZXRcIixcbiAgICBcInhmc19pb2Nfd3JpdGVfc3RyZWFtX2dldF9tYXhcIixcbiAgICBcInhmc19pbm9kZV93cml0ZV9zdHJlYW1fb3BlblwiLFxuICAgIFwieGZzX2lub2RlX3NldF93cml0ZV9zdHJlYW1cIixcbiAgICBcInhmc19pbm9kZV9nZXRfd3JpdGVfc3RyZWFtXCIsXG4gICAgXCJ4ZnNfaW5vZGVfbWF4X3dyaXRlX3N0cmVhbXNcIixcbiAgICBcInhmc193cml0ZV9zdHJlYW1fcmVsZWFzZVwiLFxuICAgIFwieGZzX2lub2RlX3dyaXRlX3N0cmVhbV9hZ19zZXRcIixcbiAgICBcInhmc19hZ190b19hZ19zZXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIHdyaXRlIHN0cmVhbXMgc3VwcG9ydCB0byBYRlMgYW5kIGlvbWFwLCBpbmNsdWRpbmcgbmV3IGlvY3RscyBmb3IgbWFuYWdpbmcgd3JpdGUgc3RyZWFtcyBhbmQgbW9kaWZpY2F0aW9ucyB0byBibG9jayBhbGxvY2F0aW9uIGxvZ2ljIHRvIGZhbiBvdXQgYWxsb2NhdGlvbnMgYWNyb3NzIEFHcyBiYXNlZCBvbiB0aGUgc3RyZWFtIElELiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBtb2RpZmllcyBjb3JlIGZpbGVzeXN0ZW0gbG9naWMgYW5kIGludHJvZHVjZXMgbmV3IHVzZXItZmFjaW5nIEFQSXMsIG1ha2luZyBpdCBhIHByaW1lIGNhbmRpZGF0ZSBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzZjE5ZjljZDFhNGU1NDQ3ZWFkMWVjZDc4MzM1ZjcwYmIzM2EzM2E0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdWwgMTcgMTY6MDY6MDIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9pb21hcC9kaXJlY3QtaW8uYyBiL2ZzL2lvbWFwL2RpcmVjdC1pby5jXG5pbmRleCBlMmNkNWY5MmJhYmVkYi4uYjc3NzFhMjVjMWM3OWYgMTAwNjQ0XG4tLS0gYS9mcy9pb21hcC9kaXJlY3QtaW8uY1xuKysrIGIvZnMvaW9tYXAvZGlyZWN0LWlvLmNcbkBAIC0zNDgsNiArMzQ4LDcgQEAgc3RhdGljIHNzaXplX3QgaW9tYXBfZGlvX2Jpb19pdGVyX29uZShzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlcixcbiBcdGZzY3J5cHRfc2V0X2Jpb19jcnlwdF9jdHgoYmlvLCBpdGVyLVx1MDAzZWlub2RlLCBwb3MsIEdGUF9LRVJORUwpO1xuIFx0YmlvLVx1MDAzZWJpX2l0ZXIuYmlfc2VjdG9yID0gaW9tYXBfc2VjdG9yKFx1MDAyNml0ZXItXHUwMDNlaW9tYXAsIHBvcyk7XG4gXHRiaW8tXHUwMDNlYmlfd3JpdGVfaGludCA9IGl0ZXItXHUwMDNlaW5vZGUtXHUwMDNlaV93cml0ZV9oaW50O1xuK1x0YmlvLVx1MDAzZWJpX3dyaXRlX3N0cmVhbSA9IGl0ZXItXHUwMDNlaW9tYXAud3JpdGVfc3RyZWFtO1xuIFx0YmlvLVx1MDAzZWJpX2lvcHJpbyA9IGRpby1cdTAwM2Vpb2NiLVx1MDAzZWtpX2lvcHJpbztcbiBcdGJpby1cdTAwM2ViaV9wcml2YXRlID0gZGlvO1xuIFx0YmlvLVx1MDAzZWJpX2VuZF9pbyA9IGlvbWFwX2Rpb19iaW9fZW5kX2lvO1xuZGlmZiAtLWdpdCBhL2ZzL2lvbWFwL2lvZW5kLmMgYi9mcy9pb21hcC9pb2VuZC5jXG5pbmRleCAwNTY1MzI4NzY0YzE3NS4uNWVhMmM2ODk5M2NmOTMgMTAwNjQ0XG4tLS0gYS9mcy9pb21hcC9pb2VuZC5jXG4rKysgYi9mcy9pb21hcC9pb2VuZC5jXG5AQCAtMTY1LDYgKzE2NSw3IEBAIHN0YXRpYyBzdHJ1Y3QgaW9tYXBfaW9lbmQgKmlvbWFwX2FsbG9jX2lvZW5kKHN0cnVjdCBpb21hcF93cml0ZXBhZ2VfY3R4ICp3cGMsXG4gXHRcdFx0ICAgICAgIEdGUF9OT0ZTLCBcdTAwMjZpb21hcF9pb2VuZF9iaW9zZXQpO1xuIFx0YmlvLVx1MDAzZWJpX2l0ZXIuYmlfc2VjdG9yID0gaW9tYXBfc2VjdG9yKFx1MDAyNndwYy1cdTAwM2Vpb21hcCwgcG9zKTtcbiBcdGJpby1cdTAwM2ViaV93cml0ZV9oaW50ID0gd3BjLVx1MDAzZWlub2RlLVx1MDAzZWlfd3JpdGVfaGludDtcbitcdGJpby1cdTAwM2ViaV93cml0ZV9zdHJlYW0gPSB3cGMtXHUwMDNlaW9tYXAud3JpdGVfc3RyZWFtO1xuIFx0d2JjX2luaXRfYmlvKHdwYy1cdTAwM2V3YmMsIGJpbyk7XG4gXHR3cGMtXHUwMDNlbnJfZm9saW9zID0gMDtcbiBcdHJldHVybiBpb21hcF9pbml0X2lvZW5kKHdwYy1cdTAwM2Vpbm9kZSwgYmlvLCBwb3MsIGlvZW5kX2ZsYWdzKTtcbkBAIC0xODgsNiArMTg5LDggQEAgc3RhdGljIGJvb2wgaW9tYXBfY2FuX2FkZF90b19pb2VuZChzdHJ1Y3QgaW9tYXBfd3JpdGVwYWdlX2N0eCAqd3BjLCBsb2ZmX3QgcG9zLFxuIFx0aWYgKCEod3BjLVx1MDAzZWlvbWFwLmZsYWdzIFx1MDAyNiBJT01BUF9GX0FOT05fV1JJVEUpIFx1MDAyNlx1MDAyNlxuIFx0ICAgIGlvbWFwX3NlY3RvcihcdTAwMjZ3cGMtXHUwMDNlaW9tYXAsIHBvcykgIT0gYmlvX2VuZF9zZWN0b3IoXHUwMDI2aW9lbmQtXHUwMDNlaW9fYmlvKSlcbiBcdFx0cmV0dXJuIGZhbHNlO1xuK1x0aWYgKHdwYy1cdTAwM2Vpb21hcC53cml0ZV9zdHJlYW0gIT0gaW9lbmQtXHUwMDNlaW9fYmlvLmJpX3dyaXRlX3N0cmVhbSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuIFx0LypcbiBcdCAqIExpbWl0IGlvZW5kIGJpbyBjaGFpbiBsZW5ndGhzIHRvIG1pbmltaXNlIElPIGNvbXBsZXRpb24gbGF0ZW5jeS4gVGhpc1xuIFx0ICogYWxzbyBwcmV2ZW50cyBsb25nIHRpZ2h0IGxvb3BzIGVuZGluZyBwYWdlIHdyaXRlYmFjayBvbiBhbGwgdGhlXG5kaWZmIC0tZ2l0IGEvZnMveGZzL2xpYnhmcy94ZnNfYm1hcC5jIGIvZnMveGZzL2xpYnhmcy94ZnNfYm1hcC5jXG5pbmRleCBkNjRkZWZlZGE2NDVlZC4uODcyYTRhYmQyMzE1N2MgMTAwNjQ0XG4tLS0gYS9mcy94ZnMvbGlieGZzL3hmc19ibWFwLmNcbisrKyBiL2ZzL3hmcy9saWJ4ZnMveGZzX2JtYXAuY1xuQEAgLTMxOTIsNiArMzE5Miw3MiBAQCB4ZnNfYm1hcF9zZWxlY3RfbWlubGVuKFxuIFx0cmV0dXJuIGFyZ3MtXHUwMDNlbWF4bGVuO1xuIH1cbiBcbisjZGVmaW5lXHRHRU5FUklDX0FHX1NFVF9TWlx0KDIpXG4rXG4rc3RhdGljIGlubGluZSB4ZnNfYWdudW1iZXJfdFxuK3hmc19kZWZhdWx0X2FnX3NldF9zaXplKFxuK1x0c3RydWN0IHhmc19pbm9kZVx0KmlwKVxuK3tcbitcdHN0cnVjdCB4ZnNfbW91bnRcdCptcCA9IGlwLVx1MDAzZWlfbW91bnQ7XG4rXG4rXHRyZXR1cm4gbWluX3QoeGZzX2FnbnVtYmVyX3QsIEdFTkVSSUNfQUdfU0VUX1NaLCBtcC1cdTAwM2VtX3NiLnNiX2FnY291bnQpO1xuK31cbitcbitzdGF0aWMgeGZzX2FnbnVtYmVyX3Rcbit4ZnNfaW5vZGVfd3JpdGVfc3RyZWFtX2FnX3NldChcbitcdHN0cnVjdCB4ZnNfaW5vZGVcdCppcCxcbitcdHhmc19hZ251bWJlcl90XHRcdCp0YXJnZXRfYWdubylcbit7XG4rXHRzdHJ1Y3QgeGZzX21vdW50XHQqbXAgPSBpcC1cdTAwM2VpX21vdW50O1xuK1x0dWludDMyX3RcdFx0bnJfc3RyZWFtcyA9IHhmc19pbm9kZV9tYXhfd3JpdGVfc3RyZWFtcyhpcCk7XG4rXHR1aW50MzJfdFx0XHRzdHJlYW1faWQgPSBpcC1cdTAwM2VpX3dyaXRlX3N0cmVhbTtcbitcdHVpbnQzMl90XHRcdG5yX2FncyA9IG1wLVx1MDAzZW1fc2Iuc2JfYWdjb3VudDtcbitcdHhmc19hZ251bWJlcl90XHRcdHNldF9zaXplO1xuK1xuK1xuK1x0aWYgKCFucl9zdHJlYW1zKVxuK1x0XHRyZXR1cm4geGZzX2RlZmF1bHRfYWdfc2V0X3NpemUoaXApO1xuK1xuK1x0c3RyZWFtX2lkIC09IDE7IC8qIEZvciAwLWJhc2VkIG1hdGg7IHN0cmVhbS1pZHMgYXJlIDEtYmFzZWQgKi9cbitcdHNldF9zaXplID0gbnJfYWdzIC8gbnJfc3RyZWFtcztcbitcbitcdGlmIChzZXRfc2l6ZSkge1xuK1x0XHQqdGFyZ2V0X2Fnbm8gPSBzdHJlYW1faWQgKiBzZXRfc2l6ZTtcbitcdFx0LyogdW5ldmVuIGRpc3RyaWJ1dGlvbiwgbGFzdCBzdHJlYW0gd2lsbCBjb3ZlciBleHRyYSBBR3MgKi9cbitcdFx0aWYgKHN0cmVhbV9pZCA9PSBucl9zdHJlYW1zIC0gMSlcbitcdFx0XHRzZXRfc2l6ZSA9IG5yX2FncyAtICp0YXJnZXRfYWdubztcbitcdH0gZWxzZSB7XG4rXHRcdC8qIGZvciB0aGUgY2FzZSB3aGVuIHdlIGhhdmUgZmV3ZXIgQUdzIHRoYW4gc3RyZWFtcyAqL1xuK1x0XHQqdGFyZ2V0X2Fnbm8gPSBzdHJlYW1faWQgJSBucl9hZ3M7XG4rXHRcdHNldF9zaXplID0gMTtcbitcdH1cbitcbitcdHJldHVybiBzZXRfc2l6ZTtcbit9XG4rXG4rc3RhdGljIHhmc19hZ251bWJlcl90XG4reGZzX2FnX3RvX2FnX3NldChcbitcdHN0cnVjdCB4ZnNfYm1hbGxvY2FcdCphcCxcbitcdHhmc19hZ251bWJlcl90XHRcdGJhc2VfYWdubylcbit7XG4rXHRzdHJ1Y3QgeGZzX2lub2RlXHQqaXAgPSBhcC1cdTAwM2VpcDtcbitcdHN0cnVjdCB4ZnNfbW91bnRcdCptcCA9IGlwLVx1MDAzZWlfbW91bnQ7XG4rXHR4ZnNfYWdudW1iZXJfdFx0XHRzZXRfc2l6ZTtcbitcbitcdC8qIEFwcGx5IGZhbm5pbmcgb25seSBmb3IgcmVndWxhciBmaWxlIGRhdGEgKi9cbitcdGlmICghKGFwLVx1MDAzZWRhdGF0eXBlIFx1MDAyNiBYRlNfQUxMT0NfVVNFUkRBVEEpKVxuK1x0XHRyZXR1cm4gYmFzZV9hZ25vO1xuK1xuK1x0aWYgKGlwLVx1MDAzZWlfd3JpdGVfc3RyZWFtKVxuK1x0XHRzZXRfc2l6ZSA9IHhmc19pbm9kZV93cml0ZV9zdHJlYW1fYWdfc2V0KGlwLCBcdTAwMjZiYXNlX2Fnbm8pO1xuK1x0ZWxzZVxuK1x0XHRzZXRfc2l6ZSA9IHhmc19kZWZhdWx0X2FnX3NldF9zaXplKGlwKTtcbitcbitcdC8qIEZhbiBvdXQgd2l0aGluIHRoZSBBRyBzZXQgdXNpbmcgbG93IGJpdHMgb2YgdGhlIGlub2RlICovXG4rXHRyZXR1cm4gKGJhc2VfYWdubyArIChYRlNfSU5PX1RPX0FHSU5PKG1wLCBJX0lOTyhpcCkpICUgc2V0X3NpemUpKSAlXG4rXHRcdG1wLVx1MDAzZW1fc2Iuc2JfYWdjb3VudDtcbit9XG4rXG4gc3RhdGljIGludFxuIHhmc19ibWFwX2J0YWxsb2Nfc2VsZWN0X2xlbmd0aHMoXG4gXHRzdHJ1Y3QgeGZzX2JtYWxsb2NhXHQqYXAsXG5AQCAtMzU4Nyw4ICszNjUzLDE2IEBAIHhmc19ibWFwX2J0YWxsb2NfYmVzdF9sZW5ndGgoXG4ge1xuIFx0eGZzX2V4dGxlbl90XHRcdGJsZW4gPSAwO1xuIFx0aW50XHRcdFx0ZXJyb3I7XG4rXHR4ZnNfYWdudW1iZXJfdFx0XHR0YXJnZXRfYWcsIHN0YXJ0X2FnO1xuIFxuIFx0YXAtXHUwMDNlYmxrbm8gPSBYRlNfSU5PREVfVE9fRlNCKGFwLVx1MDAzZWlwKTtcbitcbitcdC8qIGZhbiBvdXQgaW5pdGlhbCBBRyBhY3Jvc3MgdGhlIGdlbmVyaWMgQUcgc2V0ICovXG4rXHRzdGFydF9hZyA9IFhGU19GU0JfVE9fQUdOTyhhcmdzLVx1MDAzZW1wLCBhcC1cdTAwM2VibGtubyk7XG4rXHR0YXJnZXRfYWcgPSB4ZnNfYWdfdG9fYWdfc2V0KGFwLCBzdGFydF9hZyk7XG4rXHRpZiAodGFyZ2V0X2FnICE9IHN0YXJ0X2FnKVxuK1x0XHRhcC1cdTAwM2VibGtubyA9IFhGU19BR0JfVE9fRlNCKGFyZ3MtXHUwMDNlbXAsIHRhcmdldF9hZywgMCk7XG4rXG4gXHRpZiAoIXhmc19ibWFwX2FkamFjZW50KGFwKSlcbiBcdFx0YXAtXHUwMDNlZW9mID0gZmFsc2U7XG4gXG5kaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19pY2FjaGUuYyBiL2ZzL3hmcy94ZnNfaWNhY2hlLmNcbmluZGV4IDlkOGRkMzBiZDkyN2EyLi43YjlkZGE3NDEyMmYwZSAxMDA2NDRcbi0tLSBhL2ZzL3hmcy94ZnNfaWNhY2hlLmNcbisrKyBiL2ZzL3hmcy94ZnNfaWNhY2hlLmNcbkBAIC0xMjksNiArMTI5LDcgQEAgeGZzX2lub2RlX2FsbG9jKFxuIFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2aXAtXHUwMDNlaV9pb2VuZF9sb2NrKTtcbiBcdGlwLVx1MDAzZWlfbmV4dF91bmxpbmtlZCA9IE5VTExBR0lOTztcbiBcdGlwLVx1MDAzZWlfcHJldl91bmxpbmtlZCA9IDA7XG4rXHRpcC1cdTAwM2VpX3dyaXRlX3N0cmVhbSA9IDA7XG4gXG4gXHRyZXR1cm4gaXA7XG4gfVxuZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfaW5vZGUuYyBiL2ZzL3hmcy94ZnNfaW5vZGUuY1xuaW5kZXggMTUyNzlkMjJhODk0ZmEuLjYzOGJlZTNlNGFjMjI4IDEwMDY0NFxuLS0tIGEvZnMveGZzL3hmc19pbm9kZS5jXG4rKysgYi9mcy94ZnMveGZzX2lub2RlLmNcbkBAIC00LDYgKzQsNyBAQFxuICAqIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gICovXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaXZlcnNpb24uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2Fub25faW5vZGVzLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcInhmc19wbGF0Zm9ybS5oXCJcbiAjaW5jbHVkZSBcInhmc19mcy5oXCJcbkBAIC00Nyw2ICs0OCwxODAgQEBcbiBcbiBzdHJ1Y3Qga21lbV9jYWNoZSAqeGZzX2lub2RlX2NhY2hlO1xuIFxuK2ludFxuK3hmc19pbm9kZV9tYXhfd3JpdGVfc3RyZWFtcyhcbitcdHN0cnVjdCB4ZnNfaW5vZGVcdCppcClcbit7XG4rXHRzdHJ1Y3QgYmxvY2tfZGV2aWNlXHQqYmRldjtcbitcdHN0cnVjdCB4ZnNfbW91bnRcdCptcCA9IGlwLVx1MDAzZWlfbW91bnQ7XG4rXHRpbnQgbnJfc3RyZWFtcztcbitcdHhmc19hZ251bWJlcl90IG5yX2FncywgYWdfc2V0X3NpemU7XG4rXHRib29sXHRcdFx0aXNfZmlsZXN0cmVhbSwgaXNfcmVhbHRpbWU7XG4rXG4rXHR4ZnNfaWxvY2soaXAsIFhGU19JTE9DS19TSEFSRUQpO1xuK1x0aXNfZmlsZXN0cmVhbSA9IHhmc19pbm9kZV9pc19maWxlc3RyZWFtKGlwKTtcbitcdGlzX3JlYWx0aW1lID0gWEZTX0lTX1JFQUxUSU1FX0lOT0RFKGlwKTtcbitcdGJkZXYgPSB4ZnNfaW5vZGVfYnVmdGFyZyhpcCktXHUwMDNlYnRfYmRldjtcbitcdHhmc19pdW5sb2NrKGlwLCBYRlNfSUxPQ0tfU0hBUkVEKTtcbitcbitcdGlmICghYmRldiB8fCBpc19maWxlc3RyZWFtIHx8IGlzX3JlYWx0aW1lKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdG5yX3N0cmVhbXMgPSBiZGV2X21heF93cml0ZV9zdHJlYW1zKGJkZXYpO1xuK1x0aWYgKG5yX3N0cmVhbXMgXHUwMDNlIDApXG4rXHRcdHJldHVybiBucl9zdHJlYW1zO1xuK1x0LypcbitcdCAqIEVuYWJsZSBzb2Z0d2FyZS1vbmx5IHN0cmVhbXMgaWYgaGFyZHdhcmUgc3RyZWFtcyBhcmUgbm90IGF2YWlsYWJsZS5cbitcdCAqIFRoaXMgaGVscHMgdG9cbitcdCAqIC0gaW1wcm92ZSBpc29sYXRpb247IHJlZHVjZSBhbGxvY2F0aW9uIGludGVybGVhdmluZy5cbitcdCAqIC0gaW1wcm92ZSBjb25jdXJyZW5jeSB1c2luZyBBRy1zZXQgYmFzZWQgc3RlZXJpbmcgd2l0aGluIGFuZCBhY3Jvc3Mgc3RyZWFtcy5cbitcdCAqL1xuK1x0bnJfYWdzID0gbXAtXHUwMDNlbV9zYi5zYl9hZ2NvdW50O1xuK1x0aWYgKG5yX2FncyBcdTAwM2U9IDE2KVxuK1x0XHRhZ19zZXRfc2l6ZSA9IDQ7XG4rXHRlbHNlIGlmIChucl9hZ3MgXHUwMDNlPSA4KVxuK1x0XHRhZ19zZXRfc2l6ZSA9IDI7XG4rXHRlbHNlXG4rXHRcdGFnX3NldF9zaXplID0gMTtcbitcdG5yX3N0cmVhbXMgPSBucl9hZ3MgLyBhZ19zZXRfc2l6ZTtcbitcdHJldHVybiBtaW5fdCh1aW50MTZfdCwgbnJfc3RyZWFtcywgWEZTX1NXX1dSSVRFX1NUUkVBTVNfTUFYKTtcbit9XG4rXG4rdWludDE2X3Rcbit4ZnNfaW5vZGVfZ2V0X3dyaXRlX3N0cmVhbShcbitcdHN0cnVjdCB4ZnNfaW5vZGVcdCppcClcbit7XG4rXHR1aW50MTZfdFx0c3RyZWFtX2lkO1xuK1xuK1x0eGZzX2lsb2NrKGlwLCBYRlNfSUxPQ0tfU0hBUkVEKTtcbitcdHN0cmVhbV9pZCA9IGlwLVx1MDAzZWlfd3JpdGVfc3RyZWFtO1xuK1x0eGZzX2l1bmxvY2soaXAsIFhGU19JTE9DS19TSEFSRUQpO1xuK1xuK1x0cmV0dXJuIHN0cmVhbV9pZDtcbit9XG4rXG4rc3RydWN0IHhmc193cml0ZV9zdHJlYW0ge1xuK1x0c3RydWN0IHhmc19tb3VudFx0Km1wO1xuK1x0dWludDE2X3RcdFx0c3RyZWFtX2lkO1x0LyogMS1iYXNlZCAqL1xuK307XG4rXG4rc3RhdGljIGludFxuK3hmc193cml0ZV9zdHJlYW1fcmVsZWFzZShcbitcdHN0cnVjdCBpbm9kZVx0XHQqaW5vZGUsXG4rXHRzdHJ1Y3QgZmlsZVx0XHQqZmlsZSlcbit7XG4rXHRzdHJ1Y3QgeGZzX3dyaXRlX3N0cmVhbVx0KndzID0gZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGE7XG4rXHRzdHJ1Y3QgeGZzX21vdW50XHQqbXAgPSB3cy1cdTAwM2VtcDtcbitcbitcdHNwaW5fbG9jayhcdTAwMjZtcC1cdTAwM2VtX3N0cmVhbXNfbG9jayk7XG4rXHRjbGVhcl9iaXQod3MtXHUwMDNlc3RyZWFtX2lkIC0gMSwgbXAtXHUwMDNlbV9zdHJlYW1zX2luX3VzZSk7XG4rXHRzcGluX3VubG9jayhcdTAwMjZtcC1cdTAwM2VtX3N0cmVhbXNfbG9jayk7XG4rXHRrZnJlZSh3cyk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgeGZzX3dyaXRlX3N0cmVhbV9mb3BzID0ge1xuK1x0LnJlbGVhc2VcdD0geGZzX3dyaXRlX3N0cmVhbV9yZWxlYXNlLFxuK1x0Lmxsc2Vla1x0XHQ9IG5vb3BfbGxzZWVrLFxuK307XG4rXG4raW50XG4reGZzX2lub2RlX3dyaXRlX3N0cmVhbV9vcGVuKFxuK1x0c3RydWN0IHhmc19pbm9kZVx0KmlwLFxuK1x0dTMyXHRcdFx0ZmxhZ3MsXG4rXHR1MzJcdFx0XHQqc3RyZWFtX2lkcClcbit7XG4rXHRzdHJ1Y3QgeGZzX21vdW50XHQqbXAgPSBpcC1cdTAwM2VpX21vdW50O1xuK1x0c3RydWN0IHhmc193cml0ZV9zdHJlYW1cdCp3cztcbitcdGludFx0XHRcdG1heCwgc2xvdCwgZmQsIHJldDtcbitcbitcdGlmIChmbGFncyBcdTAwMjYgfkZTX1dSSVRFX1NUUkVBTV9PUEVOX0VYQUNUKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdG1heCA9IHhmc19pbm9kZV9tYXhfd3JpdGVfc3RyZWFtcyhpcCk7XG4rXHRpZiAoIW1heClcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1x0QVNTRVJUKG1wLVx1MDAzZW1fc3RyZWFtc19pbl91c2UpO1xuK1xuK1x0d3MgPSBrbWFsbG9jKHNpemVvZigqd3MpLCBHRlBfS0VSTkVMKTtcbitcdGlmICghd3MpXG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1xuK1x0c3Bpbl9sb2NrKFx1MDAyNm1wLVx1MDAzZW1fc3RyZWFtc19sb2NrKTtcbitcdGlmIChmbGFncyBcdTAwMjYgRlNfV1JJVEVfU1RSRUFNX09QRU5fRVhBQ1QpIHtcbitcdFx0aWYgKCEqc3RyZWFtX2lkcCB8fCAqc3RyZWFtX2lkcCBcdTAwM2UgbWF4KSB7XG4rXHRcdFx0cmV0ID0gLUVJTlZBTDtcbitcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4rXHRcdH1cbitcdFx0c2xvdCA9ICpzdHJlYW1faWRwIC0gMTtcbitcdFx0aWYgKHRlc3RfYml0KHNsb3QsIG1wLVx1MDAzZW1fc3RyZWFtc19pbl91c2UpKSB7XG4rXHRcdFx0cmV0ID0gLUVCVVNZO1xuK1x0XHRcdGdvdG8gb3V0X3VubG9jaztcbitcdFx0fVxuK1x0fSBlbHNlIHtcbitcdFx0c2xvdCA9IGZpbmRfZmlyc3RfemVyb19iaXQobXAtXHUwMDNlbV9zdHJlYW1zX2luX3VzZSwgbWF4KTtcbitcdFx0aWYgKHNsb3QgXHUwMDNlPSBtYXgpIHtcbitcdFx0XHRyZXQgPSAtRUJVU1k7XG4rXHRcdFx0Z290byBvdXRfdW5sb2NrO1xuK1x0XHR9XG4rXHR9XG4rXHRzZXRfYml0KHNsb3QsIG1wLVx1MDAzZW1fc3RyZWFtc19pbl91c2UpO1xuK1x0c3Bpbl91bmxvY2soXHUwMDI2bXAtXHUwMDNlbV9zdHJlYW1zX2xvY2spO1xuK1xuK1x0d3MtXHUwMDNlbXAgPSBtcDtcbitcdHdzLVx1MDAzZXN0cmVhbV9pZCA9IHNsb3QgKyAxO1x0LyogY29udmVydCB0byAxLWJhc2VkICovXG4rXG4rXHRmZCA9IGFub25faW5vZGVfZ2V0ZmQoXCJbeGZzX3dyaXRlX3N0cmVhbV1cIiwgXHUwMDI2eGZzX3dyaXRlX3N0cmVhbV9mb3BzLCB3cyxcbitcdFx0XHQgICAgICBPX1JET05MWSB8IE9fQ0xPRVhFQyk7XG4rXHRpZiAoZmQgXHUwMDNjIDApIHtcbitcdFx0c3Bpbl9sb2NrKFx1MDAyNm1wLVx1MDAzZW1fc3RyZWFtc19sb2NrKTtcbitcdFx0Y2xlYXJfYml0KHNsb3QsIG1wLVx1MDAzZW1fc3RyZWFtc19pbl91c2UpO1xuK1x0XHRzcGluX3VubG9jayhcdTAwMjZtcC1cdTAwM2VtX3N0cmVhbXNfbG9jayk7XG4rXHRcdGtmcmVlKHdzKTtcbitcdFx0cmV0dXJuIGZkO1xuK1x0fVxuK1xuK1x0KnN0cmVhbV9pZHAgPSB3cy1cdTAwM2VzdHJlYW1faWQ7XG4rXHRyZXR1cm4gZmQ7XG4rXG4rb3V0X3VubG9jazpcbitcdHNwaW5fdW5sb2NrKFx1MDAyNm1wLVx1MDAzZW1fc3RyZWFtc19sb2NrKTtcbitcdGtmcmVlKHdzKTtcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK2ludFxuK3hmc19pbm9kZV9zZXRfd3JpdGVfc3RyZWFtKFxuK1x0c3RydWN0IHhmc19pbm9kZVx0KmlwLFxuK1x0aW50XHRcdFx0c3RyZWFtX2ZkKVxuK3tcbitcdENMQVNTKGZkLCBmKShzdHJlYW1fZmQpO1xuK1x0c3RydWN0IHhmc193cml0ZV9zdHJlYW1cdCp3cztcbitcdGludFx0XHRcdHJldCA9IDA7XG4rXG4rXHRpZiAoIWZkX2ZpbGUoZikpXG4rXHRcdHJldHVybiAtRUJBREY7XG4rXHRpZiAoZmRfZmlsZShmKS1cdTAwM2VmX29wICE9IFx1MDAyNnhmc193cml0ZV9zdHJlYW1fZm9wcylcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHR3cyA9IGZkX2ZpbGUoZiktXHUwMDNlcHJpdmF0ZV9kYXRhO1xuK1x0aWYgKHdzLVx1MDAzZW1wICE9IGlwLVx1MDAzZWlfbW91bnQpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0eGZzX2lsb2NrKGlwLCBYRlNfSUxPQ0tfRVhDTCk7XG4rXG4rXHRpZiAoWEZTX0lTX1JFQUxUSU1FX0lOT0RFKGlwKSB8fCB4ZnNfaW5vZGVfaXNfZmlsZXN0cmVhbShpcCkgfHxcbitcdCAgICBWRlNfSShpcCktXHUwMDNlaV93cml0ZV9oaW50ICE9IFdSSVRFX0xJRkVfTk9UX1NFVCkge1xuK1x0XHRyZXQgPSAtRUlOVkFMO1xuK1x0XHRnb3RvIG91dF91bmxvY2s7XG4rXHR9XG4rXG4rXHRpcC1cdTAwM2VpX3dyaXRlX3N0cmVhbSA9IHdzLVx1MDAzZXN0cmVhbV9pZDtcbitvdXRfdW5sb2NrOlxuK1x0eGZzX2l1bmxvY2soaXAsIFhGU19JTE9DS19FWENMKTtcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuIC8qXG4gICogVGhlc2UgdHdvIGFyZSB3cmFwcGVyIHJvdXRpbmVzIGFyb3VuZCB0aGUgeGZzX2lsb2NrKCkgcm91dGluZSB1c2VkIHRvXG4gICogY2VudHJhbGl6ZSBzb21lIGdydW5neSBjb2RlLiAgVGhleSBhcmUgdXNlZCBpbiBwbGFjZXMgdGhhdCB3aXNoIHRvIGxvY2sgdGhlXG5kaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19pbm9kZS5oIGIvZnMveGZzL3hmc19pbm9kZS5oXG5pbmRleCAzNGMxMDM4ZWJmY2RlMS4uNmFiZjgyZmZiZjgyYWMgMTAwNjQ0XG4tLS0gYS9mcy94ZnMveGZzX2lub2RlLmhcbisrKyBiL2ZzL3hmcy94ZnNfaW5vZGUuaFxuQEAgLTM3LDYgKzM3LDkgQEAgdHlwZWRlZiBzdHJ1Y3QgeGZzX2lub2RlIHtcbiBcdHN0cnVjdCB4ZnNfaWZvcmtcdGlfZGY7XHRcdC8qIGRhdGEgZm9yayAqL1xuIFx0c3RydWN0IHhmc19pZm9ya1x0aV9hZjtcdFx0LyogYXR0cmlidXRlIGZvcmsgKi9cbiBcbitcdC8qIFdyaXRlIHN0cmVhbSBpbmZvcm1hdGlvbiAqL1xuK1x0dWludDE2X3RcdFx0aV93cml0ZV9zdHJlYW07XG4rXG4gXHQvKiBUcmFuc2FjdGlvbiBhbmQgbG9ja2luZyBpbmZvcm1hdGlvbi4gKi9cbiBcdHN0cnVjdCB4ZnNfaW5vZGVfbG9nX2l0ZW0gKmlfaXRlbXA7XHQvKiBsb2dnaW5nIGluZm9ybWF0aW9uICovXG4gXHRzdHJ1Y3Qgcndfc2VtYXBob3JlXHRpX2xvY2s7XHRcdC8qIGlub2RlIGxvY2sgKi9cbkBAIC02NzMsNCArNjc2LDkgQEAgaW50IHhmc19pY3JlYXRlX2RxYWxsb2MoY29uc3Qgc3RydWN0IHhmc19pY3JlYXRlX2FyZ3MgKmFyZ3MsXG4gXHRcdHN0cnVjdCB4ZnNfZHF1b3QgKip1ZHFwcCwgc3RydWN0IHhmc19kcXVvdCAqKmdkcXBwLFxuIFx0XHRzdHJ1Y3QgeGZzX2RxdW90ICoqcGRxcHApO1xuIFxuK2ludCB4ZnNfaW5vZGVfbWF4X3dyaXRlX3N0cmVhbXMoc3RydWN0IHhmc19pbm9kZSAqaXApO1xuK3VpbnQxNl90IHhmc19pbm9kZV9nZXRfd3JpdGVfc3RyZWFtKHN0cnVjdCB4ZnNfaW5vZGUgKmlwKTtcbitpbnQgeGZzX2lub2RlX3dyaXRlX3N0cmVhbV9vcGVuKHN0cnVjdCB4ZnNfaW5vZGUgKmlwLCB1MzIgZmxhZ3MsXG4rXHRcdHUzMiAqc3RyZWFtX2lkcCk7XG4raW50IHhmc19pbm9kZV9zZXRfd3JpdGVfc3RyZWFtKHN0cnVjdCB4ZnNfaW5vZGUgKmlwLCBpbnQgc3RyZWFtX2ZkKTtcbiAjZW5kaWZcdC8qIF9fWEZTX0lOT0RFX0hfXyAqL1xuZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfaW9jdGwuYyBiL2ZzL3hmcy94ZnNfaW9jdGwuY1xuaW5kZXggMWI1MzcwMWJlYmVhMWEuLjg2NDBlNjM4OTc2ODNmIDEwMDY0NFxuLS0tIGEvZnMveGZzL3hmc19pb2N0bC5jXG4rKysgYi9mcy94ZnMveGZzX2lvY3RsLmNcbkBAIC01NTcsNiArNTU3LDEyIEBAIHhmc19pb2N0bF9zZXRhdHRyX3hmbGFncyhcbiBcdGJvb2xcdFx0XHRydGZsYWcgPSAoZmEtXHUwMDNlZnN4X3hmbGFncyBcdTAwMjYgRlNfWEZMQUdfUkVBTFRJTUUpO1xuIFx0dWludDY0X3RcdFx0aV9mbGFnczI7XG4gXG4rXHRpZiAoKGZhLVx1MDAzZWZzeF94ZmxhZ3MgXHUwMDI2IEZTX1hGTEFHX0ZJTEVTVFJFQU0pIFx1MDAyNlx1MDAyNiBpcC1cdTAwM2VpX3dyaXRlX3N0cmVhbSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRpZiAocnRmbGFnIFx1MDAyNlx1MDAyNiBpcC1cdTAwM2VpX3dyaXRlX3N0cmVhbSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4gXHRpZiAocnRmbGFnICE9IFhGU19JU19SRUFMVElNRV9JTk9ERShpcCkpIHtcbiBcdFx0LyogQ2FuJ3QgY2hhbmdlIHJlYWx0aW1lIGZsYWcgaWYgYW55IGV4dGVudHMgYXJlIGFsbG9jYXRlZC4gKi9cbiBcdFx0aWYgKHhmc19pbm9kZV9oYXNfZmlsZWRhdGEoaXApKVxuQEAgLTEyMDAsNiArMTIwNiw1OSBAQCB4ZnNfaW9jdGxfZnNfY291bnRzKFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyBpbnRcbit4ZnNfaW9jX3dyaXRlX3N0cmVhbV9vcGVuKFxuK1x0c3RydWN0IGZpbGVcdFx0KmZpbHAsXG4rXHR2b2lkIF9fdXNlclx0XHQqYXJnKVxuK3tcbitcdHN0cnVjdCB4ZnNfaW5vZGVcdCppcCA9IFhGU19JKGZpbGVfaW5vZGUoZmlscCkpO1xuK1x0c3RydWN0IGZzX3dyaXRlX3N0cmVhbV9vcGVuIHdzbztcbitcdGludFx0XHRcdGZkO1xuK1xuK1x0aWYgKGNvcHlfZnJvbV91c2VyKFx1MDAyNndzbywgYXJnLCBzaXplb2Yod3NvKSkpXG4rXHRcdHJldHVybiAtRUZBVUxUO1xuK1xuK1x0ZmQgPSB4ZnNfaW5vZGVfd3JpdGVfc3RyZWFtX29wZW4oaXAsIHdzby5mbGFncywgXHUwMDI2d3NvLnN0cmVhbV9pZCk7XG4rXHRpZiAoZmQgXHUwMDNjIDApXG4rXHRcdHJldHVybiBmZDtcbitcbitcdGlmIChjb3B5X3RvX3VzZXIoYXJnLCBcdTAwMjZ3c28sIHNpemVvZih3c28pKSlcbitcdFx0cmV0dXJuIC1FRkFVTFQ7XG4rXHRyZXR1cm4gZmQ7XG4rfVxuK1xuK3N0YXRpYyBpbnRcbit4ZnNfaW9jX3dyaXRlX3N0cmVhbV9zZXQoXG4rXHRzdHJ1Y3QgZmlsZVx0XHQqZmlscCxcbitcdHVuc2lnbmVkIGxvbmdcdFx0YXJnKVxuK3tcbitcdHN0cnVjdCB4ZnNfaW5vZGVcdCppcCA9IFhGU19JKGZpbGVfaW5vZGUoZmlscCkpO1xuK1xuK1x0aWYgKCEoZmlscC1cdTAwM2VmX21vZGUgXHUwMDI2IEZNT0RFX1dSSVRFKSlcbitcdFx0cmV0dXJuIC1FQkFERjtcbitcdHJldHVybiB4ZnNfaW5vZGVfc2V0X3dyaXRlX3N0cmVhbShpcCwgKGludClhcmcpO1xuK31cbitcbitzdGF0aWMgaW50XG4reGZzX2lvY193cml0ZV9zdHJlYW1fZ2V0KFxuK1x0c3RydWN0IHhmc19pbm9kZVx0KmlwLFxuK1x0dm9pZCBfX3VzZXJcdFx0KmFyZylcbit7XG4rXHRfX3UzMiBzdHJlYW1faWQgPSB4ZnNfaW5vZGVfZ2V0X3dyaXRlX3N0cmVhbShpcCk7XG4rXG4rXHRyZXR1cm4gcHV0X3VzZXIoc3RyZWFtX2lkLCAoX191MzIgX191c2VyICopYXJnKTtcbit9XG4rXG4rc3RhdGljIGludFxuK3hmc19pb2Nfd3JpdGVfc3RyZWFtX2dldF9tYXgoXG4rXHRzdHJ1Y3QgeGZzX2lub2RlXHQqaXAsXG4rXHR2b2lkIF9fdXNlclx0XHQqYXJnKVxuK3tcbitcdF9fdTMyIG5yX3N0cmVhbXMgPSB4ZnNfaW5vZGVfbWF4X3dyaXRlX3N0cmVhbXMoaXApO1xuK1xuK1x0cmV0dXJuIHB1dF91c2VyKG5yX3N0cmVhbXMsIChfX3UzMiBfX3VzZXIgKilhcmcpO1xuK31cbitcbiAvKlxuICAqIFRoZXNlIGxvbmctdW51c2VkIGlvY3RscyB3ZXJlIHJlbW92ZWQgZnJvbSB0aGUgb2ZmaWNpYWwgaW9jdGwgQVBJIGluIDUuMTcsXG4gICogYnV0IHJldGFpbiB0aGVzZSBkZWZpbml0aW9ucyBzbyB0aGF0IHdlIGNhbiBsb2cgd2FybmluZ3MgYWJvdXQgdGhlbS5cbkBAIC0xNDY1LDYgKzE1MjQsMTYgQEAgeGZzX2ZpbGVfaW9jdGwoXG4gXHRcdHJldHVybiB4ZnNfaW9jX2hlYWx0aF9tb25pdG9yKGZpbHAsIGFyZyk7XG4gXHRjYXNlIFhGU19JT0NfVkVSSUZZX01FRElBOlxuIFx0XHRyZXR1cm4geGZzX2lvY192ZXJpZnlfbWVkaWEoZmlscCwgYXJnKTtcbitcdGNhc2UgRlNfSU9DX1dSSVRFX1NUUkVBTV9PUEVOOlxuK1x0XHRyZXR1cm4geGZzX2lvY193cml0ZV9zdHJlYW1fb3BlbihmaWxwLCAodm9pZCBfX3VzZXIgKilhcmcpO1xuK1x0Y2FzZSBGU19JT0NfV1JJVEVfU1RSRUFNX1NFVDpcbitcdFx0cmV0dXJuIHhmc19pb2Nfd3JpdGVfc3RyZWFtX3NldChmaWxwLCBwKTtcbitcdGNhc2UgRlNfSU9DX1dSSVRFX1NUUkVBTV9HRVQ6XG4rXHRcdHJldHVybiB4ZnNfaW9jX3dyaXRlX3N0cmVhbV9nZXQoWEZTX0koZmlsZV9pbm9kZShmaWxwKSksXG4rXHRcdFx0XHRcdFx0KHZvaWQgX191c2VyICopYXJnKTtcbitcdGNhc2UgRlNfSU9DX1dSSVRFX1NUUkVBTV9HRVRfTUFYOlxuK1x0XHRyZXR1cm4geGZzX2lvY193cml0ZV9zdHJlYW1fZ2V0X21heChYRlNfSShmaWxlX2lub2RlKGZpbHApKSxcbitcdFx0XHRcdFx0XHQgICAgKHZvaWQgX191c2VyICopYXJnKTtcbiBcbiBcdGRlZmF1bHQ6XG4gXHRcdHJldHVybiAtRU5PVFRZO1xuZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfaW9tYXAuYyBiL2ZzL3hmcy94ZnNfaW9tYXAuY1xuaW5kZXggMjI1YzNkZTg4ZDAzYjEuLmJmNDIzODk3ZDkxNmRmIDEwMDY0NFxuLS0tIGEvZnMveGZzL3hmc19pb21hcC5jXG4rKysgYi9mcy94ZnMveGZzX2lvbWFwLmNcbkBAIC0xNDQsNiArMTQ0LDcgQEAgeGZzX2JtYnRfdG9faW9tYXAoXG4gXHR9XG4gXHRpb21hcC1cdTAwM2VvZmZzZXQgPSBYRlNfRlNCX1RPX0IobXAsIGltYXAtXHUwMDNlYnJfc3RhcnRvZmYpO1xuIFx0aW9tYXAtXHUwMDNlbGVuZ3RoID0gWEZTX0ZTQl9UT19CKG1wLCBpbWFwLVx1MDAzZWJyX2Jsb2NrY291bnQpO1xuK1x0aW9tYXAtXHUwMDNld3JpdGVfc3RyZWFtID0gaXAtXHUwMDNlaV93cml0ZV9zdHJlYW07XG4gXHRpZiAobWFwcGluZ19mbGFncyBcdTAwMjYgSU9NQVBfREFYKSB7XG4gXHRcdGlvbWFwLVx1MDAzZWRheF9kZXYgPSB0YXJnZXQtXHUwMDNlYnRfZGF4ZGV2O1xuIFx0fSBlbHNlIHtcbmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX21vdW50LmggYi9mcy94ZnMveGZzX21vdW50LmhcbmluZGV4IDY2YTAyZDFiOWFkN2ExLi5hZDUxMTE1NTk0ZDNjOCAxMDA2NDRcbi0tLSBhL2ZzL3hmcy94ZnNfbW91bnQuaFxuKysrIGIvZnMveGZzL3hmc19tb3VudC5oXG5AQCAtNDUsNiArNDUsOCBAQCBlbnVtIHtcbiBcbiAjZGVmaW5lIFhGU19FUlJfUkVUUllfRk9SRVZFUlx0LTFcbiBcbisjZGVmaW5lIFhGU19TV19XUklURV9TVFJFQU1TX01BWFx0MTZcbitcbiAvKlxuICAqIEFsdGhvdWdoIHJldHJ5X3RpbWVvdXQgaXMgaW4gamlmZmllcyB3aGljaCBpcyBub3JtYWxseSBhbiB1bnNpZ25lZCBsb25nLFxuICAqIHdlIGxpbWl0IHRoZSByZXRyeSB0aW1lb3V0IHRvIDg2NDAwIHNlY29uZHMsIG9yIG9uZSBkYXkuICBTbyBldmVuIGFcbkBAIC0zNDksNiArMzUxLDkgQEAgdHlwZWRlZiBzdHJ1Y3QgeGZzX21vdW50IHtcbiBcbiBcdC8qIEluZGV4IG9mIHV1aWQgcmVjb3JkIGluIHRoZSB1dWlkIHhhcnJheS4gKi9cbiBcdHVuc2lnbmVkIGludFx0XHRtX3V1aWRfdGFibGVfaW5kZXg7XG4rXG4rXHR1bnNpZ25lZCBsb25nXHRcdCptX3N0cmVhbXNfaW5fdXNlO1xuK1x0c3BpbmxvY2tfdFx0XHRtX3N0cmVhbXNfbG9jaztcbiB9IHhmc19tb3VudF90O1xuIFxuICNkZWZpbmUgTV9JR0VPKG1wKVx0XHQoXHUwMDI2KG1wKS1cdTAwM2VtX2lub19nZW8pXG5kaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19zdXBlci5jIGIvZnMveGZzL3hmc19zdXBlci5jXG5pbmRleCA4NTMxZDUyNmZjNDQwOS4uZDY5OGJlNTA0YzQ1NDggMTAwNjQ0XG4tLS0gYS9mcy94ZnMveGZzX3N1cGVyLmNcbisrKyBiL2ZzL3hmcy94ZnNfc3VwZXIuY1xuQEAgLTgwNSw2ICs4MDUsNyBAQCB4ZnNfbW91bnRfZnJlZShcbiAjaWZkZWYgREVCVUdcbiBcdGtmcmVlKG1wLVx1MDAzZW1fZXJyb3J0YWcpO1xuICNlbmRpZlxuK1x0Yml0bWFwX2ZyZWUobXAtXHUwMDNlbV9zdHJlYW1zX2luX3VzZSk7XG4gXHRrZnJlZShtcCk7XG4gfVxuIFxuQEAgLTE2NTksNiArMTY2MCw3IEBAIHhmc19mc19maWxsX3N1cGVyKFxuIFx0c3RydWN0IHhmc19tb3VudFx0Km1wID0gc2ItXHUwMDNlc19mc19pbmZvO1xuIFx0c3RydWN0IGlub2RlXHRcdCpyb290O1xuIFx0aW50XHRcdFx0ZmxhZ3MgPSAwLCBlcnJvcjtcbitcdGludFx0XHRcdG5yX3N0cmVhbXM7XG4gXG4gXHRtcC1cdTAwM2VtX3N1cGVyID0gc2I7XG4gXG5AQCAtMTcwOCw2ICsxNzEwLDE1IEBAIHhmc19mc19maWxsX3N1cGVyKFxuIFx0aWYgKGVycm9yKVxuIFx0XHRyZXR1cm4gZXJyb3I7XG4gXG4rXHRucl9zdHJlYW1zID0gYmRldl9tYXhfd3JpdGVfc3RyZWFtcyhtcC1cdTAwM2VtX2RkZXZfdGFyZ3AtXHUwMDNlYnRfYmRldik7XG4rXHRpZiAoIW5yX3N0cmVhbXMpXG4rXHRcdG5yX3N0cmVhbXMgPSBYRlNfU1dfV1JJVEVfU1RSRUFNU19NQVg7XG4rXHRtcC1cdTAwM2VtX3N0cmVhbXNfaW5fdXNlID0gYml0bWFwX3phbGxvYyhucl9zdHJlYW1zLCBHRlBfS0VSTkVMKTtcbitcdGlmICghbXAtXHUwMDNlbV9zdHJlYW1zX2luX3VzZSkge1xuK1x0XHRlcnJvciA9IC1FTk9NRU07XG4rXHRcdGdvdG8gb3V0X3NodXRkb3duX2RldmljZXM7XG4rXHR9XG4rXG4gXHRpZiAoeGZzX2RlYnVnZnMpIHtcbiBcdFx0bXAtXHUwMDNlbV9kZWJ1Z2ZzID0geGZzX2RlYnVnZnNfbWtkaXIobXAtXHUwMDNlbV9zdXBlci1cdTAwM2VzX2lkLFxuIFx0XHRcdFx0XHRcdCAgeGZzX2RlYnVnZnMpO1xuQEAgLTIyNDksNiArMjI2MCw3IEBAIHhmc19pbml0X2ZzX2NvbnRleHQoXG4gI2VuZGlmXG4gXG4gXHRzcGluX2xvY2tfaW5pdChcdTAwMjZtcC1cdTAwM2VtX3NiX2xvY2spO1xuK1x0c3Bpbl9sb2NrX2luaXQoXHUwMDI2bXAtXHUwMDNlbV9zdHJlYW1zX2xvY2spO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgWEdfVFlQRV9NQVg7IGkrKylcbiBcdFx0eGFfaW5pdChcdTAwMjZtcC1cdTAwM2VtX2dyb3Vwc1tpXS54YSk7XG4gXHRtdXRleF9pbml0KFx1MDAyNm1wLVx1MDAzZW1fZ3Jvd2xvY2spO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaW9tYXAuaCBiL2luY2x1ZGUvbGludXgvaW9tYXAuaFxuaW5kZXggNTZiNDNkNTk0ZTZlMjkuLjRkYzcxZGE1OThmOTlkIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9pb21hcC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2lvbWFwLmhcbkBAIC0xMzIsNiArMTMyLDggQEAgc3RydWN0IGlvbWFwIHtcbiBcdHU2NFx0XHRcdGxlbmd0aDtcdC8qIGxlbmd0aCBvZiBtYXBwaW5nLCBieXRlcyAqL1xuIFx0dTE2XHRcdFx0dHlwZTtcdC8qIHR5cGUgb2YgbWFwcGluZyAqL1xuIFx0dTE2XHRcdFx0ZmxhZ3M7XHQvKiBmbGFncyBmb3IgbWFwcGluZyAqL1xuK1x0dTE2XHRcdFx0d3JpdGVfc3RyZWFtOyAvKiB3cml0ZSBzdHJlYW0gZm9yIEkvTyAqL1xuK1x0LyogMiBieXRlcyBwYWRkaW5nIGhvbGUgaGVyZSAqL1xuIFx0c3RydWN0IGJsb2NrX2RldmljZVx0KmJkZXY7XHQvKiBibG9jayBkZXZpY2UgZm9yIEkvTyAqL1xuIFx0c3RydWN0IGRheF9kZXZpY2VcdCpkYXhfZGV2OyAvKiBkYXhfZGV2IGZvciBkYXggb3BlcmF0aW9ucyAqL1xuIFx0dm9pZFx0XHRcdCppbmxpbmVfZGF0YTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvZnMuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9mcy5oXG5pbmRleCBiZDg3MjYyZjJlMzQ5NC4uYTc1NmQyN2JkZjg0MTcgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvZnMuaFxuKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L2ZzLmhcbkBAIC0zNDUsNiArMzQ1LDIyIEBAIHN0cnVjdCBmaWxlX2F0dHIge1xuIC8qIEdldCBsb2dpY2FsIGJsb2NrIG1ldGFkYXRhIGNhcGFiaWxpdHkgZGV0YWlscyAqL1xuICNkZWZpbmUgRlNfSU9DX0dFVExCTURfQ0FQXHRcdF9JT1dSKDB4MTUsIDIsIHN0cnVjdCBsb2dpY2FsX2Jsb2NrX21ldGFkYXRhX2NhcClcbiBcbitzdHJ1Y3QgZnNfd3JpdGVfc3RyZWFtX29wZW4ge1xuK1x0X191MzJcdFx0c3RyZWFtX2lkO1x0LyogSU46IHJlcXVlc3RlZCBpZCBpZiBPUEVOX0VYQUNUIHNldDsgT1VUOiBhc3NpZ25lZCBpZCAqL1xuK1x0X191MzJcdFx0ZmxhZ3M7XHRcdC8qIElOOiBGU19XUklURV9TVFJFQU1fT1BFTl8qICovXG4rfTtcbitcbisvKlxuKyAqIEZsYWcgdG8gYXNrIGZvciBzcGVjaWZpYyBzdHJlYW1faWQsIG90aGVyd2lzZSBrZXJuZWwgY2FuIHJldHVybiBhbnkuXG4rICogRmFpbHMgd2l0aCAtRUJVU1kgaWYgdGhhdCBzdHJlYW1faWQgaXMgYWxyZWFkeSBoZWxkXG4rICovXG4rI2RlZmluZSBGU19XUklURV9TVFJFQU1fT1BFTl9FWEFDVFx0KDEgXHUwMDNjXHUwMDNjIDApXG4rXG4rI2RlZmluZSBGU19JT0NfV1JJVEVfU1RSRUFNX0dFVF9NQVhcdF9JT1IoJ2YnLCAxMzUsIF9fdTMyKVxuKyNkZWZpbmUgRlNfSU9DX1dSSVRFX1NUUkVBTV9PUEVOXHRfSU9XUignZicsIDEzNiwgc3RydWN0IGZzX3dyaXRlX3N0cmVhbV9vcGVuKVxuKyNkZWZpbmUgRlNfSU9DX1dSSVRFX1NUUkVBTV9TRVRcdFx0X0lPVygnZicsIDEzNywgX19zMzIpXG4rI2RlZmluZSBGU19JT0NfV1JJVEVfU1RSRUFNX0dFVFx0XHRfSU9SKCdmJywgMTM4LCBfX3UzMilcbitcbiAvKlxuICAqIElub2RlIGZsYWdzIChGU19JT0NfR0VURkxBR1MgLyBGU19JT0NfU0VURkxBR1MpXG4gICpcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE3VDE2OjA2OjA1LjE4OTYxNTQyMVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg0ODg5NDEyNzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgV3JpdGUgU3RyZWFtcyBQYXRjaCBTZXJpZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHNlcmllcyBpbnRyb2R1Y2luZyBcIndyaXRlIHN0cmVhbXNcIiBzdXBwb3J0IGZvciBYRlMgYW5kIGlvbWFwLiBJbW1lZGlhdGVseSwgSSBzZWUgaXQncyBhIGZ1bmN0aW9uYWwgYWRkaXRpb24sIG5vdCBqdXN0IGEgYnVnIGZpeC4gVGhhdCBtZWFucyBJIG5lZWQgdG8gYmUgbW9yZSB0aG9yb3VnaCBpbiBteSBhbmFseXNpcy4gSXQncyBhZGRpbmcgbmV3IGlvY3RscyDigJMgYEZTX0lPQ19XUklURV9TVFJFQU1fR0VUX01BWGAsIGBGU19JT0NfV1JJVEVfU1RSRUFNX09QRU5gLCBgRlNfSU9DX1dSSVRFX1NUUkVBTV9TRVRgLCBhbmQgYEZTX0lPQ19XUklURV9TVFJFQU1fR0VUYCDigJMgd2hpY2ggaXMgdGhlIGZpcnN0IHJlZCBmbGFnLiBOZXcgaW9jdGxzIGFsd2F5cyB3YXJyYW50IGV4dHJhIHNjcnV0aW55LCBhcyB0aGV5IGFyZSBhIHNpZ25pZmljYW50IGludGVyZmFjZSBjaGFuZ2UgYW5kIGNhbiBpbnRyb2R1Y2Ugc3VidGxlIGludGVyYWN0aW9ucyB3aXRoIGV4aXN0aW5nIGZ1bmN0aW9uYWxpdHkuXG5cblRoZSBtb2RpZmljYXRpb25zIHRvIGBmcy94ZnMveGZzX2lvY3RsLmNgIGFuZCBgZnMveGZzL3hmc19pbm9kZS5jYCBhcmUgZXhwZWN0ZWQsIHRoYXQncyB3aGVyZSB0aGUgY29yZSBpb2N0bCBoYW5kbGluZyBhbmQgaW5vZGUtbGV2ZWwgc3RyZWFtIG9wZXJhdGlvbnMgd291bGQgcmVzaWRlLiBJIHdhbnQgdG8gZHJpbGwgaW50byB0aGUgYHhmc19pbm9kZV8qYCBmdW5jdGlvbnMuIEltcGxlbWVudGluZyBmdW5jdGlvbnMgc3VjaCBhcyBgeGZzX2lub2RlX3dyaXRlX3N0cmVhbV9vcGVuYCwgYHhmc19pbm9kZV9zZXRfd3JpdGVfc3RyZWFtYCwgYW5kIHRoZSBvdGhlcnMgaW5kaWNhdGUgdGhpcyBpcyB3aGVyZSB0aGUgY29yZSBsb2dpYyBvZiBtYW5hZ2luZyB0aGVzZSBzdHJlYW1zIHdpbGwgYmUuXG5cblRoZSBtb2RpZmljYXRpb24gdG8gYHhmc19ibWFwLmNgIGlzIHBhcnRpY3VsYXJseSBpbnRlcmVzdGluZy4gVGhlIGNvbW1lbnQgdGhhdCB0aGlzIHVzZXMgdGhlIHN0cmVhbSBJRCB0byBcImZhbiBvdXQgYWxsb2NhdGlvbnMgYWNyb3NzIEFHc1wiIGlzIGltcG9ydGFudC4gVGhpcyBzdWdnZXN0cyBhIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBiZW5lZml0IChhbmQgcGVyaGFwcyBhIGtleSBkZXNpZ24gZ29hbCBvZiB0aGUgcGF0Y2gpLCBidXQgYWxzbyBhZGRzIGNvbXBsZXhpdHkgdG8gdGhlIGJsb2NrIGFsbG9jYXRpb24gbG9naWMuIFRoaXMgaXMgZGVmaW5pdGVseSBzb21ld2hlcmUgSSdsbCB3YW50IHRvIGZvY3VzIG9uIHdoZW4gSSdtIGFzc2Vzc2luZyBpdC5cblxuVGhlIGNoYW5nZXMgaW4gYGZzL2lvbWFwL2RpcmVjdC1pby5jYCBhbmQgYGZzL2lvbWFwL2lvZW5kLmNgIHRoYXQgbm93IHBhc3MgdGhlIHdyaXRlIHN0cmVhbSBJRCB0byB0aGUgYmlvIGFyZSBhIG5hdHVyYWwgY29uc2VxdWVuY2Ugb2YgdGhlIHN0cmVhbSBjb25jZXB0LiBUaGlzIGNoYW5nZSBpcyBjcnVjaWFsIHRvIGVuc3VyZSB0aGF0IHRoZSBpb21hcCBsYXllciB1bmRlcnN0YW5kcyB3aGljaCBzdHJlYW0gaXMgYXNzb2NpYXRlZCB3aXRoIGVhY2ggYmxvY2sgSS9PIG9wZXJhdGlvbi5cblxuR2l2ZW4gdGhhdCB0aGlzIGludHJvZHVjZXMgbmV3IGlvY3RscyBhbmQgbW9kaWZpZXMgYmxvY2sgYWxsb2NhdGlvbiwgZnV6emluZyBpcyBhYnNvbHV0ZWx5IGVzc2VudGlhbC4gSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBrZXkgZnVuY3Rpb25zIHRvIHN1YmplY3QgdG8gZnV6emluZy4gTGV0J3Mgc2VlLi4uIEknZCBzdGFydCB3aXRoIHRoZXNlIGlvY3RsIGhhbmRsZXJzOiBgeGZzX2lvY193cml0ZV9zdHJlYW1fb3BlbmAsIGB4ZnNfaW9jX3dyaXRlX3N0cmVhbV9zZXRgLCBgeGZzX2lvY193cml0ZV9zdHJlYW1fZ2V0YCwgYHhmc19pb2Nfd3JpdGVfc3RyZWFtX2dldF9tYXhgLiBJIGFsc28gbmVlZCB0byBmdXp6IHRoZSBhc3NvY2lhdGVkIGlub2RlIG1ldGhvZHM6IGB4ZnNfaW5vZGVfd3JpdGVfc3RyZWFtX29wZW5gLCBgeGZzX2lub2RlX3NldF93cml0ZV9zdHJlYW1gLCBgeGZzX2lub2RlX2dldF93cml0ZV9zdHJlYW1gLCBhbmQgYHhmc19pbm9kZV9tYXhfd3JpdGVfc3RyZWFtc2AuIEl0IGxvb2tzIGxpa2UgYHhmc193cml0ZV9zdHJlYW1fcmVsZWFzZWAsIGB4ZnNfaW5vZGVfd3JpdGVfc3RyZWFtX2FnX3NldGAsIGFuZCBgeGZzX2FnX3RvX2FnX3NldGAgYXJlIGFsc28gaW1wb3J0YW50IHRvIHRlc3QsIGluIGNhc2UgdGhleSBhcmUgdXNlZCBpbiBzdHJlYW0gbWFuYWdlbWVudC5cblxuRmluYWxseSwgSSBuZWVkIHRvIHZlcmlmeSBkZXBlbmRlbmNpZXMuIFNpbmNlIHRoaXMgaXMgWEZTLXNwZWNpZmljLCBgWEZTX0ZTYCBpcyBhIGdpdmVuLiBCdXQgSSB3YW50IHRvIGNoZWNrIGZvciBhbnkgbW9yZSBzcGVjaWZpYyBjb25maWcgb3B0aW9ucy4gQSBxdWljayBncmVwIG9mIHRoZSBLY29uZmlnIGZpbGVzIGZvciBcIldSSVRFX1NUUkVBTVwiIHNob3VsZCBnaXZlIG1lIGEgcXVpY2sgYW5zd2VyLiBHb29kLCB0aGlzIGlzIGEgc29saWQgc3RhcnQuIE5vdywgbGV0J3MgZGl2ZSBpbnRvIHRoZSBjb2RlLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkyNjksIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OTAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xN1QxNjowNjoxMy42Nzg1NTg1NDFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTg5NjkxNTksIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIldSSVRFX1NUUkVBTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy94ZnMvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTdUMTY6MDY6MTMuNzM3NTM1MTZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODI5MzYwNzQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqS2NvbmZpZyBFeHBsb3JhdGlvbiBmb3IgV1JJVEVfU1RSRUFNKipcblxuQWxyaWdodCwgdGltZSB0byBkaXZlIGludG8gdGhpcyBLY29uZmlnIGxhYnlyaW50aC4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBnbyBzdHJhaWdodCB0byB0aGUgc291cmNlLiBJJ20gZ29pbmcgdG8gc3RhcnQgd2l0aCBhIGJyb2FkIHN3ZWVwIOKAkyBhIGNsYXNzaWMgYGdyZXBgLiBJIHdhbnQgdG8gc2VlICpldmVyeXdoZXJlKiBgV1JJVEVfU1RSRUFNYCBpcyBtZW50aW9uZWQgYWNyb3NzIGFsbCB0aGUgS2NvbmZpZyBmaWxlcy4gVGhpcyB3aWxsIGJlIHRoZSBmb3VuZGF0aW9uYWwgc2Nhbi4gVGhlIGdvYWwgaXNuJ3QgbmVjZXNzYXJpbHkgdG8gc29sdmUgYW55dGhpbmcgaW1tZWRpYXRlbHksIGJ1dCB0byBnZXQgYSBsYXkgb2YgdGhlIGxhbmQsIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoZSB2YXJpYWJsZSdzIHVzYWdlLiBXZSdyZSB0YWxraW5nIGFib3V0IGEgcXVpY2sgYW5kIGRpcnR5IHNlYXJjaCBmb3Igb2NjdXJyZW5jZXMsIGRlcGVuZGVuY2llcywgYW5kIHBlcmhhcHMgc29tZSBpbml0aWFsIGNvbnRleHQsIEkgd2FudCB0byB1c2UgYGdyZXBgIGFzIGEgcHJpbWFyeSBpbnZlc3RpZ2F0aXZlIHRvb2wgZm9yIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNTE2LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTdUMTY6MDY6MTcuNTY2ODk3OTkxWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcwMjI5ODYyMTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiV1JJVEVfU1RSRUFNXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2F0YS9saWJhdGEtZWguYz0yNDg3PWNvbnN0IGNoYXIgKmF0YV9nZXRfY21kX25hbWUodTggY29tbWFuZClcXG4tLVxcbmRyaXZlcnMvYXRhL2xpYmF0YS1laC5jLTI1MTUtXFx0XFx0eyBBVEFfQ01EX1dSSVRFX1FVRVVFRCxcXHRcXHRcXFwiV1JJVEUgRE1BIFFVRVVFRCBFWFRcXFwiIH0sXFxuZHJpdmVycy9hdGEvbGliYXRhLWVoLmM6MjUxNjpcXHRcXHR7IEFUQV9DTURfV1JJVEVfU1RSRUFNX0VYVCxcXHRcXFwiV1JJVEUgU1RSRUFNIEVYVFxcXCIgfSxcXG5kcml2ZXJzL2F0YS9saWJhdGEtZWguYzoyNTE3OlxcdFxcdHsgQVRBX0NNRF9XUklURV9TVFJFQU1fRE1BX0VYVCwgXFxcIldSSVRFIFNUUkVBTSBETUEgRVhUXFxcIiB9LFxcbmRyaXZlcnMvYXRhL2xpYmF0YS1laC5jLTI1MTgtXFx0XFx0eyBBVEFfQ01EX1dSSVRFX0ZVQV9FWFQsXFx0XFxcIldSSVRFIERNQSBGVUEgRVhUXFxcIiB9LFxcbi0tXFxuZHJpdmVycy9hdGEvbGliYXRhLXNjc2kuYz0zMTcyPXN0YXRpYyB1bnNpZ25lZCBpbnQgYXRhX3Njc2lfcGFzc190aHJ1KHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpXFxuLS1cXG5kcml2ZXJzL2F0YS9saWJhdGEtc2NzaS5jLTMzMzAtXFx0Y2FzZSBBVEFfQ01EX1BJT19XUklURV9FWFQ6XFxuZHJpdmVycy9hdGEvbGliYXRhLXNjc2kuYzozMzMxOlxcdGNhc2UgQVRBX0NNRF9XUklURV9TVFJFQU1fRE1BX0VYVDpcXG5kcml2ZXJzL2F0YS9saWJhdGEtc2NzaS5jOjMzMzI6XFx0Y2FzZSBBVEFfQ01EX1dSSVRFX1NUUkVBTV9FWFQ6XFxuZHJpdmVycy9hdGEvbGliYXRhLXNjc2kuYy0zMzMzLVxcdFxcdHFjLVxcdTAwM2VzZWN0X3NpemUgPSBzY21kLVxcdTAwM2VkZXZpY2UtXFx1MDAzZXNlY3Rvcl9zaXplO1xcbi0tXFxuZHJpdmVycy9zY3NpL2hpc2lfc2FzL2hpc2lfc2FzX21haW4uYz01ND11OCBoaXNpX3Nhc19nZXRfYXRhX3Byb3RvY29sKHN0cnVjdCBzYXNfdGFzayAqdGFzaylcXG4tLVxcbmRyaXZlcnMvc2NzaS9oaXNpX3Nhcy9oaXNpX3Nhc19tYWluLmMtOTQtXFx0Y2FzZSBBVEFfQ01EX1dSSVRFX0xPR19ETUFfRVhUOlxcbmRyaXZlcnMvc2NzaS9oaXNpX3Nhcy9oaXNpX3Nhc19tYWluLmM6OTU6XFx0Y2FzZSBBVEFfQ01EX1dSSVRFX1NUUkVBTV9ETUFfRVhUOlxcbmRyaXZlcnMvc2NzaS9oaXNpX3Nhcy9oaXNpX3Nhc19tYWluLmMtOTYtXFx0Y2FzZSBBVEFfQ01EX1pBQ19NR01UX0lOOlxcbi0tXFxuZnMveGZzL3hmc19pbm9kZS5jPTUyPXhmc19pbm9kZV9tYXhfd3JpdGVfc3RyZWFtcyhcXG4tLVxcbmZzL3hmcy94ZnNfaW5vZGUuYy04Ni1cXHRucl9zdHJlYW1zID0gbnJfYWdzIC8gYWdfc2V0X3NpemU7XFxuZnMveGZzL3hmc19pbm9kZS5jOjg3OlxcdHJldHVybiBtaW5fdCh1aW50MTZfdCwgbnJfc3RyZWFtcywgWEZTX1NXX1dSSVRFX1NUUkVBTVNfTUFYKTtcXG5mcy94ZnMveGZzX2lub2RlLmMtODgtfVxcbi0tXFxuZnMveGZzL3hmc19pbm9kZS5jPTEyOT14ZnNfaW5vZGVfd3JpdGVfc3RyZWFtX29wZW4oXFxuLS1cXG5mcy94ZnMveGZzX2lub2RlLmMtMTM3LVxcbmZzL3hmcy94ZnNfaW5vZGUuYzoxMzg6XFx0aWYgKGZsYWdzIFxcdTAwMjYgfkZTX1dSSVRFX1NUUkVBTV9PUEVOX0VYQUNUKVxcbmZzL3hmcy94ZnNfaW5vZGUuYy0xMzktXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5mcy94ZnMveGZzX2lub2RlLmMtMTUwLVxcdHNwaW5fbG9jayhcXHUwMDI2bXAtXFx1MDAzZW1fc3RyZWFtc19sb2NrKTtcXG5mcy94ZnMveGZzX2lub2RlLmM6MTUxOlxcdGlmIChmbGFncyBcXHUwMDI2IEZTX1dSSVRFX1NUUkVBTV9PUEVOX0VYQUNUKSB7XFxuZnMveGZzL3hmc19pbm9kZS5jLTE1Mi1cXHRcXHRpZiAoISpzdHJlYW1faWRwIHx8ICpzdHJlYW1faWRwIFxcdTAwM2UgbWF4KSB7XFxuLS1cXG5mcy94ZnMveGZzX2lvY3RsLmM9MTI3OD14ZnNfZmlsZV9pb2N0bChcXG4tLVxcbmZzL3hmcy94ZnNfaW9jdGwuYy0xNTI2LVxcdFxcdHJldHVybiB4ZnNfaW9jX3ZlcmlmeV9tZWRpYShmaWxwLCBhcmcpO1xcbmZzL3hmcy94ZnNfaW9jdGwuYzoxNTI3OlxcdGNhc2UgRlNfSU9DX1dSSVRFX1NUUkVBTV9PUEVOOlxcbmZzL3hmcy94ZnNfaW9jdGwuYy0xNTI4LVxcdFxcdHJldHVybiB4ZnNfaW9jX3dyaXRlX3N0cmVhbV9vcGVuKGZpbHAsICh2b2lkIF9fdXNlciAqKWFyZyk7XFxuZnMveGZzL3hmc19pb2N0bC5jOjE1Mjk6XFx0Y2FzZSBGU19JT0NfV1JJVEVfU1RSRUFNX1NFVDpcXG5mcy94ZnMveGZzX2lvY3RsLmMtMTUzMC1cXHRcXHRyZXR1cm4geGZzX2lvY193cml0ZV9zdHJlYW1fc2V0KGZpbHAsIHApO1xcbmZzL3hmcy94ZnNfaW9jdGwuYzoxNTMxOlxcdGNhc2UgRlNfSU9DX1dSSVRFX1NUUkVBTV9HRVQ6XFxuZnMveGZzL3hmc19pb2N0bC5jLTE1MzItXFx0XFx0cmV0dXJuIHhmc19pb2Nfd3JpdGVfc3RyZWFtX2dldChYRlNfSShmaWxlX2lub2RlKGZpbHApKSxcXG5mcy94ZnMveGZzX2lvY3RsLmMtMTUzMy1cXHRcXHRcXHRcXHRcXHRcXHQodm9pZCBfX3VzZXIgKilhcmcpO1xcbmZzL3hmcy94ZnNfaW9jdGwuYzoxNTM0OlxcdGNhc2UgRlNfSU9DX1dSSVRFX1NUUkVBTV9HRVRfTUFYOlxcbmZzL3hmcy94ZnNfaW9jdGwuYy0xNTM1LVxcdFxcdHJldHVybiB4ZnNfaW9jX3dyaXRlX3N0cmVhbV9nZXRfbWF4KFhGU19JKGZpbGVfaW5vZGUoZmlscCkpLFxcbi0tXFxuZnMveGZzL3hmc19tb3VudC5oPTM4PWVudW0ge1xcbi0tXFxuZnMveGZzL3hmc19tb3VudC5oLTQ3LVxcbmZzL3hmcy94ZnNfbW91bnQuaDo0ODojZGVmaW5lIFhGU19TV19XUklURV9TVFJFQU1TX01BWFxcdDE2XFxuZnMveGZzL3hmc19tb3VudC5oLTQ5LVxcbi0tXFxuZnMveGZzL3hmc19zdXBlci5jPTE2NTY9eGZzX2ZzX2ZpbGxfc3VwZXIoXFxuLS1cXG5mcy94ZnMveGZzX3N1cGVyLmMtMTcxNC1cXHRpZiAoIW5yX3N0cmVhbXMpXFxuZnMveGZzL3hmc19zdXBlci5jOjE3MTU6XFx0XFx0bnJfc3RyZWFtcyA9IFhGU19TV19XUklURV9TVFJFQU1TX01BWDtcXG5mcy94ZnMveGZzX3N1cGVyLmMtMTcxNi1cXHRtcC1cXHUwMDNlbV9zdHJlYW1zX2luX3VzZSA9IGJpdG1hcF96YWxsb2MobnJfc3RyZWFtcywgR0ZQX0tFUk5FTCk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2F0YS5oPTI0PWVudW0ge1xcbi0tXFxuaW5jbHVkZS9saW51eC9hdGEuaC0yMjMtXFx0QVRBX0NNRF9XUklURV9RVUVVRURcXHQ9IDB4MzYsXFxuaW5jbHVkZS9saW51eC9hdGEuaDoyMjQ6XFx0QVRBX0NNRF9XUklURV9TVFJFQU1fRVhUID0gMHgzQixcXG5pbmNsdWRlL2xpbnV4L2F0YS5oOjIyNTpcXHRBVEFfQ01EX1dSSVRFX1NUUkVBTV9ETUFfRVhUID0gMHgzQSxcXG5pbmNsdWRlL2xpbnV4L2F0YS5oLTIyNi1cXHRBVEFfQ01EX1dSSVRFX0ZVQV9FWFRcXHQ9IDB4M0QsXFxuLS1cXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9saWJhdGEuaC0zNi1cXHRcXHQgYXRhX29wY29kZV9uYW1lKEFUQV9DTURfV1JJVEVfUVVFVUVEKSxcXHRcXHRcXFxcXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvbGliYXRhLmg6Mzc6XFx0XFx0IGF0YV9vcGNvZGVfbmFtZShBVEFfQ01EX1dSSVRFX1NUUkVBTV9FWFQpLFxcdFxcXFxcXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9saWJhdGEuaDozODpcXHRcXHQgYXRhX29wY29kZV9uYW1lKEFUQV9DTURfV1JJVEVfU1RSRUFNX0RNQV9FWFQpLCBcXFxcXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvbGliYXRhLmgtMzktXFx0XFx0IGF0YV9vcGNvZGVfbmFtZShBVEFfQ01EX1dSSVRFX0ZVQV9FWFQpLFxcdFxcXFxcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9mcy5oPTM0OD1zdHJ1Y3QgZnNfd3JpdGVfc3RyZWFtX29wZW4ge1xcbmluY2x1ZGUvdWFwaS9saW51eC9mcy5oLTM0OS1cXHRfX3UzMlxcdFxcdHN0cmVhbV9pZDtcXHQvKiBJTjogcmVxdWVzdGVkIGlkIGlmIE9QRU5fRVhBQ1Qgc2V0OyBPVVQ6IGFzc2lnbmVkIGlkICovXFxuaW5jbHVkZS91YXBpL2xpbnV4L2ZzLmg6MzUwOlxcdF9fdTMyXFx0XFx0ZmxhZ3M7XFx0XFx0LyogSU46IEZTX1dSSVRFX1NUUkVBTV9PUEVOXyogKi9cXG5pbmNsdWRlL3VhcGkvbGludXgvZnMuaC0zNTEtfTtcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9mcy5oLTM1Ni0gKi9cXG5pbmNsdWRlL3VhcGkvbGludXgvZnMuaDozNTc6I2RlZmluZSBGU19XUklURV9TVFJFQU1fT1BFTl9FWEFDVFxcdCgxIFxcdTAwM2NcXHUwMDNjIDApXFxuaW5jbHVkZS91YXBpL2xpbnV4L2ZzLmgtMzU4LVxcbmluY2x1ZGUvdWFwaS9saW51eC9mcy5oOjM1OTojZGVmaW5lIEZTX0lPQ19XUklURV9TVFJFQU1fR0VUX01BWFxcdF9JT1IoJ2YnLCAxMzUsIF9fdTMyKVxcbmluY2x1ZGUvdWFwaS9saW51eC9mcy5oOjM2MDojZGVmaW5lIEZTX0lPQ19XUklURV9TVFJFQU1fT1BFTlxcdF9JT1dSKCdmJywgMTM2LCBzdHJ1Y3QgZnNfd3JpdGVfc3RyZWFtX29wZW4pXFxuaW5jbHVkZS91YXBpL2xpbnV4L2ZzLmg6MzYxOiNkZWZpbmUgRlNfSU9DX1dSSVRFX1NUUkVBTV9TRVRcXHRcXHRfSU9XKCdmJywgMTM3LCBfX3MzMilcXG5pbmNsdWRlL3VhcGkvbGludXgvZnMuaDozNjI6I2RlZmluZSBGU19JT0NfV1JJVEVfU1RSRUFNX0dFVFxcdFxcdF9JT1IoJ2YnLCAxMzgsIF9fdTMyKVxcbmluY2x1ZGUvdWFwaS9saW51eC9mcy5oLTM2My1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTdUMTY6MDY6MjQuNTg5ODg4OTUzWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTA3MjM3Njg1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIFdyaXRlIFN0cmVhbSBGZWF0dXJlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyB3cml0ZSBzdHJlYW0gZmVhdHVyZSB3aXRoaW4gWEZTLCBhbmQgaXQgc2VlbXMgdGhlcmUgYXJlbid0IGFueSAqc3BlY2lmaWMqIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBkZWRpY2F0ZWQgdG8gaXQuIEl0IGFwcGVhcnMgdG8gYmUgYW4gaW5oZXJlbnQgcGFydCBvZiBYRlMgaXRzZWxmLiBUaGUgb25seSByZWxldmFudCBjb25maWcgcmVxdWlyZWQgaXMgdGhlIGNvcmUgYFhGU19GU2Agc2V0dGluZy4gVGhhdCdzIGdvb2QgdG8ga25vd+KAlGxlc3MgdG8gbWFuYWdlIGV4cGxpY2l0bHkuXG5cbk5vdywgbGV0J3MgdGFrZSBhIGxvb2sgYXQgdGhlIGZvY3VzIHN5bWJvbHMuIEkndmUgZ290IGEgbGlzdCBoZXJlOiBgeGZzX2lvY193cml0ZV9zdHJlYW1fb3BlbmAsIGB4ZnNfaW9jX3dyaXRlX3N0cmVhbV9zZXRgLCBgeGZzX2lvY193cml0ZV9zdHJlYW1fZ2V0YCwgYHhmc19pb2Nfd3JpdGVfc3RyZWFtX2dldF9tYXhgLCBgeGZzX2lub2RlX3dyaXRlX3N0cmVhbV9vcGVuYCwgYHhmc19pbm9kZV9zZXRfd3JpdGVfc3RyZWFtYCwgYHhmc19pbm9kZV9nZXRfd3JpdGVfc3RyZWFtYCwgYHhmc19pbm9kZV9tYXhfd3JpdGVfc3RyZWFtc2AsIGB4ZnNfd3JpdGVfc3RyZWFtX3JlbGVhc2VgLCBgeGZzX2lub2RlX3dyaXRlX3N0cmVhbV9hZ19zZXRgLCBhbmQgYHhmc19hZ190b19hZ19zZXRgLiBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgdGhlc2Ugc3ltYm9scyBhcmUgYWN0dWFsbHkgZGVmaW5lZCB3aXRoaW4gdGhlIGNvbnRleHQgb2YgdGhlIFhGUyBjb2RlLiBUaGlzIGlzIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCB0byBlbnN1cmUgdGhhdCB0aGUgaW1wbGVtZW50YXRpb24gaXMgY29tcGxldGUgYW5kIHRoZSBmZWF0dXJlIGlzIHJlYWR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjgyOCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xN1QxNjowNjoyOS42NjIyNjc3NDlaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjEwODU1MDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieGZzX2lvY193cml0ZV9zdHJlYW1fb3BlblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy94ZnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3hmcy94ZnNfaW9jdGwuYz0xMjA5PXN0YXRpYyBpbnRcXG5mcy94ZnMveGZzX2lvY3RsLmM6MTIxMDp4ZnNfaW9jX3dyaXRlX3N0cmVhbV9vcGVuKFxcbmZzL3hmcy94ZnNfaW9jdGwuYy0xMjExLVxcdHN0cnVjdCBmaWxlXFx0XFx0KmZpbHAsXFxuLS1cXG5mcy94ZnMveGZzX2lvY3RsLmM9MTI3OD14ZnNfZmlsZV9pb2N0bChcXG4tLVxcbmZzL3hmcy94ZnNfaW9jdGwuYy0xNTI3LVxcdGNhc2UgRlNfSU9DX1dSSVRFX1NUUkVBTV9PUEVOOlxcbmZzL3hmcy94ZnNfaW9jdGwuYzoxNTI4OlxcdFxcdHJldHVybiB4ZnNfaW9jX3dyaXRlX3N0cmVhbV9vcGVuKGZpbHAsICh2b2lkIF9fdXNlciAqKWFyZyk7XFxuZnMveGZzL3hmc19pb2N0bC5jLTE1MjktXFx0Y2FzZSBGU19JT0NfV1JJVEVfU1RSRUFNX1NFVDpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTdUMTY6MDY6MjkuNzIzMzU3NjI4WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzA3ODk3MjIxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBGdXp6aW5nIFN0cmF0ZWd5OiBXcml0ZSBTdHJlYW1zIGluIFhGUyoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYSBkZWZpbml0ZSB5ZXMgZm9yIGZ1enppbmcuIEl0J3MgbWFraW5nIGZ1bmN0aW9uYWwgY2hhbmdlcywgc3BlY2lmaWNhbGx5IHRvIFhGUydzIGJsb2NrIGFsbG9jYXRpb24gYW5kIGludHJvZHVjaW5nIHRoZXNlIGJyYW5kIG5ldyBpb2N0bHMuIFRoYXQncyBhIHRleHRib29rIGRlZmluaXRpb24gb2YgYSBwb3RlbnRpYWwgYXR0YWNrIHN1cmZhY2UuIFdlIG5lZWQgdG8gZ2V0IGEgZnV6emluZyBjYW1wYWlnbiBzZXQgdXAgZm9yIHRoaXMgaW1tZWRpYXRlbHkuXG5cblRoZSBoZWFydCBvZiBpdCBsaWVzIGluIHRoZSB3cml0ZSBzdHJlYW1zIHN1cHBvcnQgdGhleSdyZSBhZGRpbmcgdG8gWEZTIGFuZCBpb21hcC4gVGhpcyBpbmNsdWRlcyB0aG9zZSBuZXcgaW9jdGxzLCB3aGljaCBpbW1lZGlhdGVseSBmbGFncyBpdCBhcyBzb21ldGhpbmcgbmV3IHRoYXQgbmVlZHMgc2NydXRpbnkuIFRoZSBibG9jayBhbGxvY2F0aW9uIGNoYW5nZXMsIHdoZXJlIGl0J3MgZmFubmluZyBvdXQgYmFzZWQgb24gdGhlIHN0cmVhbSBJRCwgdGhhdOKAmXMgYW5vdGhlciBjcml0aWNhbCBhcmVhLiBBbnkgbW9kaWZpY2F0aW9uIHRvIHRoZSBjb3JlIGxvZ2ljLCBlc3BlY2lhbGx5IGFyb3VuZCBhbGxvY2F0aW9uLCBpcyBhIHJlZCBmbGFnLiBXZSBuZWVkIHRvIHBva2UgYW5kIHByb2QgdGhhdCBuZXcgYWxsb2NhdGlvbiBiZWhhdmlvciB0aG9yb3VnaGx5LlxuXG5UaGUgZm9jdXMgc2hvdWxkIGJlIG9uIHRoZXNlIHN5bWJvbHM6XG5cbiogICBgeGZzX2lvY193cml0ZV9zdHJlYW1fb3BlbmAsIGB4ZnNfaW9jX3dyaXRlX3N0cmVhbV9zZXRgLCBgeGZzX2lvY193cml0ZV9zdHJlYW1fZ2V0YCwgYHhmc19pb2Nfd3JpdGVfc3RyZWFtX2dldF9tYXhgLCBgeGZzX2lub2RlX3dyaXRlX3N0cmVhbV9vcGVuYCwgYHhmc19pbm9kZV9zZXRfd3JpdGVfc3RyZWFtYCwgYHhmc19pbm9kZV9nZXRfd3JpdGVfc3RyZWFtYCwgYHhmc19pbm9kZV9tYXhfd3JpdGVfc3RyZWFtc2AsIGB4ZnNfd3JpdGVfc3RyZWFtX3JlbGVhc2VgLCBgeGZzX2lub2RlX3dyaXRlX3N0cmVhbV9hZ19zZXRgLCBgeGZzX2FnX3RvX2FnX3NldGAuXG5cblRoZXNlIHNlZW0gdG8gYmUgdGhlIGNvcmUgZnVuY3Rpb25zIGZvciBtYW5hZ2luZyB0aGUgc3RyZWFtcywgc2V0dGluZyB0aGVtIHVwLCByZXRyaWV2aW5nLCBldGMsIGFuZCB0aGUgYWxsb2NhdGlvbiBpdHNlbGYuIFRoZXNlIGFyZSBnb2luZyB0byBiZSB0aGUgcHJpbWUgdGFyZ2V0cyBmb3IgZnV6emluZy5cblxuV2UgbmVlZCB0byBtYWtlIHN1cmUgdGhlIGZ1enplciBpcyBjb25maWd1cmVkIHdpdGggYFhGU19GU2AgZW5hYmxlZCwgb2J2aW91c2x5LiBUaGlzIGlzIGFsbCBhYm91dCB0ZXN0aW5nIHRoYXQgd3JpdGUgc3RyZWFtcyBmdW5jdGlvbmFsaXR5LiBMZXQncyBzZWUgaWYgd2UgY2FuIGZpbmQgc29tZSBnb29kIGVkZ2UgY2FzZXMgaW4gdGhpcyBuZXcgbG9naWMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNTc5LCJPdXRwdXRUb2tlbnMiOjI1MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xN1QxNjowNjozNi44MDIzMzIzOTdaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDE0NTc1MjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlhGU19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInhmc19pb2Nfd3JpdGVfc3RyZWFtX29wZW5cIixcbiAgICBcInhmc19pb2Nfd3JpdGVfc3RyZWFtX3NldFwiLFxuICAgIFwieGZzX2lvY193cml0ZV9zdHJlYW1fZ2V0XCIsXG4gICAgXCJ4ZnNfaW9jX3dyaXRlX3N0cmVhbV9nZXRfbWF4XCIsXG4gICAgXCJ4ZnNfaW5vZGVfd3JpdGVfc3RyZWFtX29wZW5cIixcbiAgICBcInhmc19pbm9kZV9zZXRfd3JpdGVfc3RyZWFtXCIsXG4gICAgXCJ4ZnNfaW5vZGVfZ2V0X3dyaXRlX3N0cmVhbVwiLFxuICAgIFwieGZzX2lub2RlX21heF93cml0ZV9zdHJlYW1zXCIsXG4gICAgXCJ4ZnNfd3JpdGVfc3RyZWFtX3JlbGVhc2VcIixcbiAgICBcInhmc19pbm9kZV93cml0ZV9zdHJlYW1fYWdfc2V0XCIsXG4gICAgXCJ4ZnNfYWdfdG9fYWdfc2V0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyB3cml0ZSBzdHJlYW1zIHN1cHBvcnQgdG8gWEZTIGFuZCBpb21hcCwgaW5jbHVkaW5nIG5ldyBpb2N0bHMgZm9yIG1hbmFnaW5nIHdyaXRlIHN0cmVhbXMgYW5kIG1vZGlmaWNhdGlvbnMgdG8gYmxvY2sgYWxsb2NhdGlvbiBsb2dpYyB0byBmYW4gb3V0IGFsbG9jYXRpb25zIGFjcm9zcyBBR3MgYmFzZWQgb24gdGhlIHN0cmVhbSBJRC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgbW9kaWZpZXMgY29yZSBmaWxlc3lzdGVtIGxvZ2ljIGFuZCBpbnRyb2R1Y2VzIG5ldyB1c2VyLWZhY2luZyBBUElzLCBtYWtpbmcgaXQgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWEZTX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwieGZzX2lvY193cml0ZV9zdHJlYW1fb3BlblwiLFxuICAgIFwieGZzX2lvY193cml0ZV9zdHJlYW1fc2V0XCIsXG4gICAgXCJ4ZnNfaW9jX3dyaXRlX3N0cmVhbV9nZXRcIixcbiAgICBcInhmc19pb2Nfd3JpdGVfc3RyZWFtX2dldF9tYXhcIixcbiAgICBcInhmc19pbm9kZV93cml0ZV9zdHJlYW1fb3BlblwiLFxuICAgIFwieGZzX2lub2RlX3NldF93cml0ZV9zdHJlYW1cIixcbiAgICBcInhmc19pbm9kZV9nZXRfd3JpdGVfc3RyZWFtXCIsXG4gICAgXCJ4ZnNfaW5vZGVfbWF4X3dyaXRlX3N0cmVhbXNcIixcbiAgICBcInhmc193cml0ZV9zdHJlYW1fcmVsZWFzZVwiLFxuICAgIFwieGZzX2lub2RlX3dyaXRlX3N0cmVhbV9hZ19zZXRcIixcbiAgICBcInhmc19hZ190b19hZ19zZXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIHdyaXRlIHN0cmVhbXMgc3VwcG9ydCB0byBYRlMgYW5kIGlvbWFwLCBpbmNsdWRpbmcgbmV3IGlvY3RscyBmb3IgbWFuYWdpbmcgd3JpdGUgc3RyZWFtcyBhbmQgbW9kaWZpY2F0aW9ucyB0byBibG9jayBhbGxvY2F0aW9uIGxvZ2ljIHRvIGZhbiBvdXQgYWxsb2NhdGlvbnMgYWNyb3NzIEFHcyBiYXNlZCBvbiB0aGUgc3RyZWFtIElELiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBtb2RpZmllcyBjb3JlIGZpbGVzeXN0ZW0gbG9naWMgYW5kIGludHJvZHVjZXMgbmV3IHVzZXItZmFjaW5nIEFQSXMsIG1ha2luZyBpdCBhIHByaW1lIGNhbmRpZGF0ZSBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow4lxk4[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-17 15:42:04 +0000 UTC FinishedAt: 2026-07-17 16:06:38 +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": "fce2dfa773ced15f27dd27cd0b482a7473cdcf2a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "XFS_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "fce2dfa773ced15f27dd27cd0b482a7473cdcf2a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "XFS_FS" ], "series_id": "ac22dd9a-ac53-42b0-8fda-91face219f43" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "xfs_ioc_write_stream_open", "xfs_ioc_write_stream_set", "xfs_ioc_write_stream_get", "xfs_ioc_write_stream_get_max", "xfs_inode_write_stream_open", "xfs_inode_set_write_stream", "xfs_inode_get_write_stream", "xfs_inode_max_write_streams", "xfs_write_stream_release", "xfs_inode_write_stream_ag_set", "xfs_ag_to_ag_set" ], "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+CgkJCTx0ZD4yMDI2LzA3LzE3IDE2OjA2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1hGU19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3hmc19pb2Nfd3JpdGVfc3RyZWFtX29wZW4mIzM0OywKICAgICYjMzQ7eGZzX2lvY193cml0ZV9zdHJlYW1fc2V0JiMzNDssCiAgICAmIzM0O3hmc19pb2Nfd3JpdGVfc3RyZWFtX2dldCYjMzQ7LAogICAgJiMzNDt4ZnNfaW9jX3dyaXRlX3N0cmVhbV9nZXRfbWF4JiMzNDssCiAgICAmIzM0O3hmc19pbm9kZV93cml0ZV9zdHJlYW1fb3BlbiYjMzQ7LAogICAgJiMzNDt4ZnNfaW5vZGVfc2V0X3dyaXRlX3N0cmVhbSYjMzQ7LAogICAgJiMzNDt4ZnNfaW5vZGVfZ2V0X3dyaXRlX3N0cmVhbSYjMzQ7LAogICAgJiMzNDt4ZnNfaW5vZGVfbWF4X3dyaXRlX3N0cmVhbXMmIzM0OywKICAgICYjMzQ7eGZzX3dyaXRlX3N0cmVhbV9yZWxlYXNlJiMzNDssCiAgICAmIzM0O3hmc19pbm9kZV93cml0ZV9zdHJlYW1fYWdfc2V0JiMzNDssCiAgICAmIzM0O3hmc19hZ190b19hZ19zZXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyB3cml0ZSBzdHJlYW1zIHN1cHBvcnQgdG8gWEZTIGFuZCBpb21hcCwgaW5jbHVkaW5nIG5ldyBpb2N0bHMgZm9yIG1hbmFnaW5nIHdyaXRlIHN0cmVhbXMgYW5kIG1vZGlmaWNhdGlvbnMgdG8gYmxvY2sgYWxsb2NhdGlvbiBsb2dpYyB0byBmYW4gb3V0IGFsbG9jYXRpb25zIGFjcm9zcyBBR3MgYmFzZWQgb24gdGhlIHN0cmVhbSBJRC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgbW9kaWZpZXMgY29yZSBmaWxlc3lzdGVtIGxvZ2ljIGFuZCBpbnRyb2R1Y2VzIG5ldyB1c2VyLWZhY2luZyBBUElzLCBtYWtpbmcgaXQgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTcgMTY6MDY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAzZjE5ZjljZDFhNGU1NDQ3ZWFkMWVjZDc4MzM1ZjcwYmIzM2EzM2E0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdWwgMTcgMTY6MDY6MDIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvaW9tYXAvZGlyZWN0LWlvLmMgYi9mcy9pb21hcC9kaXJlY3QtaW8uY1xuaW5kZXggZTJjZDVmOTJiYWJlZGIuLmI3NzcxYTI1YzFjNzlmIDEwMDY0NFxuLS0tIGEvZnMvaW9tYXAvZGlyZWN0LWlvLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2lvbWFwL2RpcmVjdC1pby5jXG5AQCAtMzQ4LDYgJiM0MzszNDgsNyBAQCBzdGF0aWMgc3NpemVfdCBpb21hcF9kaW9fYmlvX2l0ZXJfb25lKHN0cnVjdCBpb21hcF9pdGVyICppdGVyLFxuIFx0ZnNjcnlwdF9zZXRfYmlvX2NyeXB0X2N0eChiaW8sIGl0ZXItXHUwMDNlaW5vZGUsIHBvcywgR0ZQX0tFUk5FTCk7XG4gXHRiaW8tXHUwMDNlYmlfaXRlci5iaV9zZWN0b3IgPSBpb21hcF9zZWN0b3IoXHUwMDI2aXRlci1cdTAwM2Vpb21hcCwgcG9zKTtcbiBcdGJpby1cdTAwM2ViaV93cml0ZV9oaW50ID0gaXRlci1cdTAwM2Vpbm9kZS1cdTAwM2VpX3dyaXRlX2hpbnQ7XG4mIzQzO1x0YmlvLVx1MDAzZWJpX3dyaXRlX3N0cmVhbSA9IGl0ZXItXHUwMDNlaW9tYXAud3JpdGVfc3RyZWFtO1xuIFx0YmlvLVx1MDAzZWJpX2lvcHJpbyA9IGRpby1cdTAwM2Vpb2NiLVx1MDAzZWtpX2lvcHJpbztcbiBcdGJpby1cdTAwM2ViaV9wcml2YXRlID0gZGlvO1xuIFx0YmlvLVx1MDAzZWJpX2VuZF9pbyA9IGlvbWFwX2Rpb19iaW9fZW5kX2lvO1xuZGlmZiAtLWdpdCBhL2ZzL2lvbWFwL2lvZW5kLmMgYi9mcy9pb21hcC9pb2VuZC5jXG5pbmRleCAwNTY1MzI4NzY0YzE3NS4uNWVhMmM2ODk5M2NmOTMgMTAwNjQ0XG4tLS0gYS9mcy9pb21hcC9pb2VuZC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9pb21hcC9pb2VuZC5jXG5AQCAtMTY1LDYgJiM0MzsxNjUsNyBAQCBzdGF0aWMgc3RydWN0IGlvbWFwX2lvZW5kICppb21hcF9hbGxvY19pb2VuZChzdHJ1Y3QgaW9tYXBfd3JpdGVwYWdlX2N0eCAqd3BjLFxuIFx0XHRcdCAgICAgICBHRlBfTk9GUywgXHUwMDI2aW9tYXBfaW9lbmRfYmlvc2V0KTtcbiBcdGJpby1cdTAwM2ViaV9pdGVyLmJpX3NlY3RvciA9IGlvbWFwX3NlY3RvcihcdTAwMjZ3cGMtXHUwMDNlaW9tYXAsIHBvcyk7XG4gXHRiaW8tXHUwMDNlYmlfd3JpdGVfaGludCA9IHdwYy1cdTAwM2Vpbm9kZS1cdTAwM2VpX3dyaXRlX2hpbnQ7XG4mIzQzO1x0YmlvLVx1MDAzZWJpX3dyaXRlX3N0cmVhbSA9IHdwYy1cdTAwM2Vpb21hcC53cml0ZV9zdHJlYW07XG4gXHR3YmNfaW5pdF9iaW8od3BjLVx1MDAzZXdiYywgYmlvKTtcbiBcdHdwYy1cdTAwM2Vucl9mb2xpb3MgPSAwO1xuIFx0cmV0dXJuIGlvbWFwX2luaXRfaW9lbmQod3BjLVx1MDAzZWlub2RlLCBiaW8sIHBvcywgaW9lbmRfZmxhZ3MpO1xuQEAgLTE4OCw2ICYjNDM7MTg5LDggQEAgc3RhdGljIGJvb2wgaW9tYXBfY2FuX2FkZF90b19pb2VuZChzdHJ1Y3QgaW9tYXBfd3JpdGVwYWdlX2N0eCAqd3BjLCBsb2ZmX3QgcG9zLFxuIFx0aWYgKCEod3BjLVx1MDAzZWlvbWFwLmZsYWdzIFx1MDAyNiBJT01BUF9GX0FOT05fV1JJVEUpIFx1MDAyNlx1MDAyNlxuIFx0ICAgIGlvbWFwX3NlY3RvcihcdTAwMjZ3cGMtXHUwMDNlaW9tYXAsIHBvcykgIT0gYmlvX2VuZF9zZWN0b3IoXHUwMDI2aW9lbmQtXHUwMDNlaW9fYmlvKSlcbiBcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdGlmICh3cGMtXHUwMDNlaW9tYXAud3JpdGVfc3RyZWFtICE9IGlvZW5kLVx1MDAzZWlvX2Jpby5iaV93cml0ZV9zdHJlYW0pXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4gXHQvKlxuIFx0ICogTGltaXQgaW9lbmQgYmlvIGNoYWluIGxlbmd0aHMgdG8gbWluaW1pc2UgSU8gY29tcGxldGlvbiBsYXRlbmN5LiBUaGlzXG4gXHQgKiBhbHNvIHByZXZlbnRzIGxvbmcgdGlnaHQgbG9vcHMgZW5kaW5nIHBhZ2Ugd3JpdGViYWNrIG9uIGFsbCB0aGVcbmRpZmYgLS1naXQgYS9mcy94ZnMvbGlieGZzL3hmc19ibWFwLmMgYi9mcy94ZnMvbGlieGZzL3hmc19ibWFwLmNcbmluZGV4IGQ2NGRlZmVkYTY0NWVkLi44NzJhNGFiZDIzMTU3YyAxMDA2NDRcbi0tLSBhL2ZzL3hmcy9saWJ4ZnMveGZzX2JtYXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMveGZzL2xpYnhmcy94ZnNfYm1hcC5jXG5AQCAtMzE5Miw2ICYjNDM7MzE5Miw3MiBAQCB4ZnNfYm1hcF9zZWxlY3RfbWlubGVuKFxuIFx0cmV0dXJuIGFyZ3MtXHUwMDNlbWF4bGVuO1xuIH1cbiBcbiYjNDM7I2RlZmluZVx0R0VORVJJQ19BR19TRVRfU1pcdCgyKVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSB4ZnNfYWdudW1iZXJfdFxuJiM0Mzt4ZnNfZGVmYXVsdF9hZ19zZXRfc2l6ZShcbiYjNDM7XHRzdHJ1Y3QgeGZzX2lub2RlXHQqaXApXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgeGZzX21vdW50XHQqbXAgPSBpcC1cdTAwM2VpX21vdW50O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gbWluX3QoeGZzX2FnbnVtYmVyX3QsIEdFTkVSSUNfQUdfU0VUX1NaLCBtcC1cdTAwM2VtX3NiLnNiX2FnY291bnQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgeGZzX2FnbnVtYmVyX3RcbiYjNDM7eGZzX2lub2RlX3dyaXRlX3N0cmVhbV9hZ19zZXQoXG4mIzQzO1x0c3RydWN0IHhmc19pbm9kZVx0KmlwLFxuJiM0MztcdHhmc19hZ251bWJlcl90XHRcdCp0YXJnZXRfYWdubylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB4ZnNfbW91bnRcdCptcCA9IGlwLVx1MDAzZWlfbW91bnQ7XG4mIzQzO1x0dWludDMyX3RcdFx0bnJfc3RyZWFtcyA9IHhmc19pbm9kZV9tYXhfd3JpdGVfc3RyZWFtcyhpcCk7XG4mIzQzO1x0dWludDMyX3RcdFx0c3RyZWFtX2lkID0gaXAtXHUwMDNlaV93cml0ZV9zdHJlYW07XG4mIzQzO1x0dWludDMyX3RcdFx0bnJfYWdzID0gbXAtXHUwMDNlbV9zYi5zYl9hZ2NvdW50O1xuJiM0MztcdHhmc19hZ251bWJlcl90XHRcdHNldF9zaXplO1xuJiM0MztcbiYjNDM7XG4mIzQzO1x0aWYgKCFucl9zdHJlYW1zKVxuJiM0MztcdFx0cmV0dXJuIHhmc19kZWZhdWx0X2FnX3NldF9zaXplKGlwKTtcbiYjNDM7XG4mIzQzO1x0c3RyZWFtX2lkIC09IDE7IC8qIEZvciAwLWJhc2VkIG1hdGg7IHN0cmVhbS1pZHMgYXJlIDEtYmFzZWQgKi9cbiYjNDM7XHRzZXRfc2l6ZSA9IG5yX2FncyAvIG5yX3N0cmVhbXM7XG4mIzQzO1xuJiM0MztcdGlmIChzZXRfc2l6ZSkge1xuJiM0MztcdFx0KnRhcmdldF9hZ25vID0gc3RyZWFtX2lkICogc2V0X3NpemU7XG4mIzQzO1x0XHQvKiB1bmV2ZW4gZGlzdHJpYnV0aW9uLCBsYXN0IHN0cmVhbSB3aWxsIGNvdmVyIGV4dHJhIEFHcyAqL1xuJiM0MztcdFx0aWYgKHN0cmVhbV9pZCA9PSBucl9zdHJlYW1zIC0gMSlcbiYjNDM7XHRcdFx0c2V0X3NpemUgPSBucl9hZ3MgLSAqdGFyZ2V0X2Fnbm87XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdC8qIGZvciB0aGUgY2FzZSB3aGVuIHdlIGhhdmUgZmV3ZXIgQUdzIHRoYW4gc3RyZWFtcyAqL1xuJiM0MztcdFx0KnRhcmdldF9hZ25vID0gc3RyZWFtX2lkICUgbnJfYWdzO1xuJiM0MztcdFx0c2V0X3NpemUgPSAxO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHNldF9zaXplO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgeGZzX2FnbnVtYmVyX3RcbiYjNDM7eGZzX2FnX3RvX2FnX3NldChcbiYjNDM7XHRzdHJ1Y3QgeGZzX2JtYWxsb2NhXHQqYXAsXG4mIzQzO1x0eGZzX2FnbnVtYmVyX3RcdFx0YmFzZV9hZ25vKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHhmc19pbm9kZVx0KmlwID0gYXAtXHUwMDNlaXA7XG4mIzQzO1x0c3RydWN0IHhmc19tb3VudFx0Km1wID0gaXAtXHUwMDNlaV9tb3VudDtcbiYjNDM7XHR4ZnNfYWdudW1iZXJfdFx0XHRzZXRfc2l6ZTtcbiYjNDM7XG4mIzQzO1x0LyogQXBwbHkgZmFubmluZyBvbmx5IGZvciByZWd1bGFyIGZpbGUgZGF0YSAqL1xuJiM0MztcdGlmICghKGFwLVx1MDAzZWRhdGF0eXBlIFx1MDAyNiBYRlNfQUxMT0NfVVNFUkRBVEEpKVxuJiM0MztcdFx0cmV0dXJuIGJhc2VfYWdubztcbiYjNDM7XG4mIzQzO1x0aWYgKGlwLVx1MDAzZWlfd3JpdGVfc3RyZWFtKVxuJiM0MztcdFx0c2V0X3NpemUgPSB4ZnNfaW5vZGVfd3JpdGVfc3RyZWFtX2FnX3NldChpcCwgXHUwMDI2YmFzZV9hZ25vKTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRzZXRfc2l6ZSA9IHhmc19kZWZhdWx0X2FnX3NldF9zaXplKGlwKTtcbiYjNDM7XG4mIzQzO1x0LyogRmFuIG91dCB3aXRoaW4gdGhlIEFHIHNldCB1c2luZyBsb3cgYml0cyBvZiB0aGUgaW5vZGUgKi9cbiYjNDM7XHRyZXR1cm4gKGJhc2VfYWdubyAmIzQzOyAoWEZTX0lOT19UT19BR0lOTyhtcCwgSV9JTk8oaXApKSAlIHNldF9zaXplKSkgJVxuJiM0MztcdFx0bXAtXHUwMDNlbV9zYi5zYl9hZ2NvdW50O1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnRcbiB4ZnNfYm1hcF9idGFsbG9jX3NlbGVjdF9sZW5ndGhzKFxuIFx0c3RydWN0IHhmc19ibWFsbG9jYVx0KmFwLFxuQEAgLTM1ODcsOCAmIzQzOzM2NTMsMTYgQEAgeGZzX2JtYXBfYnRhbGxvY19iZXN0X2xlbmd0aChcbiB7XG4gXHR4ZnNfZXh0bGVuX3RcdFx0YmxlbiA9IDA7XG4gXHRpbnRcdFx0XHRlcnJvcjtcbiYjNDM7XHR4ZnNfYWdudW1iZXJfdFx0XHR0YXJnZXRfYWcsIHN0YXJ0X2FnO1xuIFxuIFx0YXAtXHUwMDNlYmxrbm8gPSBYRlNfSU5PREVfVE9fRlNCKGFwLVx1MDAzZWlwKTtcbiYjNDM7XG4mIzQzO1x0LyogZmFuIG91dCBpbml0aWFsIEFHIGFjcm9zcyB0aGUgZ2VuZXJpYyBBRyBzZXQgKi9cbiYjNDM7XHRzdGFydF9hZyA9IFhGU19GU0JfVE9fQUdOTyhhcmdzLVx1MDAzZW1wLCBhcC1cdTAwM2VibGtubyk7XG4mIzQzO1x0dGFyZ2V0X2FnID0geGZzX2FnX3RvX2FnX3NldChhcCwgc3RhcnRfYWcpO1xuJiM0MztcdGlmICh0YXJnZXRfYWcgIT0gc3RhcnRfYWcpXG4mIzQzO1x0XHRhcC1cdTAwM2VibGtubyA9IFhGU19BR0JfVE9fRlNCKGFyZ3MtXHUwMDNlbXAsIHRhcmdldF9hZywgMCk7XG4mIzQzO1xuIFx0aWYgKCF4ZnNfYm1hcF9hZGphY2VudChhcCkpXG4gXHRcdGFwLVx1MDAzZWVvZiA9IGZhbHNlO1xuIFxuZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfaWNhY2hlLmMgYi9mcy94ZnMveGZzX2ljYWNoZS5jXG5pbmRleCA5ZDhkZDMwYmQ5MjdhMi4uN2I5ZGRhNzQxMjJmMGUgMTAwNjQ0XG4tLS0gYS9mcy94ZnMveGZzX2ljYWNoZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy94ZnMveGZzX2ljYWNoZS5jXG5AQCAtMTI5LDYgJiM0MzsxMjksNyBAQCB4ZnNfaW5vZGVfYWxsb2MoXG4gXHRzcGluX2xvY2tfaW5pdChcdTAwMjZpcC1cdTAwM2VpX2lvZW5kX2xvY2spO1xuIFx0aXAtXHUwMDNlaV9uZXh0X3VubGlua2VkID0gTlVMTEFHSU5PO1xuIFx0aXAtXHUwMDNlaV9wcmV2X3VubGlua2VkID0gMDtcbiYjNDM7XHRpcC1cdTAwM2VpX3dyaXRlX3N0cmVhbSA9IDA7XG4gXG4gXHRyZXR1cm4gaXA7XG4gfVxuZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfaW5vZGUuYyBiL2ZzL3hmcy94ZnNfaW5vZGUuY1xuaW5kZXggMTUyNzlkMjJhODk0ZmEuLjYzOGJlZTNlNGFjMjI4IDEwMDY0NFxuLS0tIGEvZnMveGZzL3hmc19pbm9kZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy94ZnMveGZzX2lub2RlLmNcbkBAIC00LDYgJiM0Mzs0LDcgQEBcbiAgKiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICAqL1xuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2l2ZXJzaW9uLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvYW5vbl9pbm9kZXMuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwmIzM0O3hmc19wbGF0Zm9ybS5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7eGZzX2ZzLmhcJiMzNDtcbkBAIC00Nyw2ICYjNDM7NDgsMTgwIEBAXG4gXG4gc3RydWN0IGttZW1fY2FjaGUgKnhmc19pbm9kZV9jYWNoZTtcbiBcbiYjNDM7aW50XG4mIzQzO3hmc19pbm9kZV9tYXhfd3JpdGVfc3RyZWFtcyhcbiYjNDM7XHRzdHJ1Y3QgeGZzX2lub2RlXHQqaXApXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYmxvY2tfZGV2aWNlXHQqYmRldjtcbiYjNDM7XHRzdHJ1Y3QgeGZzX21vdW50XHQqbXAgPSBpcC1cdTAwM2VpX21vdW50O1xuJiM0MztcdGludCBucl9zdHJlYW1zO1xuJiM0MztcdHhmc19hZ251bWJlcl90IG5yX2FncywgYWdfc2V0X3NpemU7XG4mIzQzO1x0Ym9vbFx0XHRcdGlzX2ZpbGVzdHJlYW0sIGlzX3JlYWx0aW1lO1xuJiM0MztcbiYjNDM7XHR4ZnNfaWxvY2soaXAsIFhGU19JTE9DS19TSEFSRUQpO1xuJiM0MztcdGlzX2ZpbGVzdHJlYW0gPSB4ZnNfaW5vZGVfaXNfZmlsZXN0cmVhbShpcCk7XG4mIzQzO1x0aXNfcmVhbHRpbWUgPSBYRlNfSVNfUkVBTFRJTUVfSU5PREUoaXApO1xuJiM0MztcdGJkZXYgPSB4ZnNfaW5vZGVfYnVmdGFyZyhpcCktXHUwMDNlYnRfYmRldjtcbiYjNDM7XHR4ZnNfaXVubG9jayhpcCwgWEZTX0lMT0NLX1NIQVJFRCk7XG4mIzQzO1xuJiM0MztcdGlmICghYmRldiB8fCBpc19maWxlc3RyZWFtIHx8IGlzX3JlYWx0aW1lKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdG5yX3N0cmVhbXMgPSBiZGV2X21heF93cml0ZV9zdHJlYW1zKGJkZXYpO1xuJiM0MztcdGlmIChucl9zdHJlYW1zIFx1MDAzZSAwKVxuJiM0MztcdFx0cmV0dXJuIG5yX3N0cmVhbXM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBFbmFibGUgc29mdHdhcmUtb25seSBzdHJlYW1zIGlmIGhhcmR3YXJlIHN0cmVhbXMgYXJlIG5vdCBhdmFpbGFibGUuXG4mIzQzO1x0ICogVGhpcyBoZWxwcyB0b1xuJiM0MztcdCAqIC0gaW1wcm92ZSBpc29sYXRpb247IHJlZHVjZSBhbGxvY2F0aW9uIGludGVybGVhdmluZy5cbiYjNDM7XHQgKiAtIGltcHJvdmUgY29uY3VycmVuY3kgdXNpbmcgQUctc2V0IGJhc2VkIHN0ZWVyaW5nIHdpdGhpbiBhbmQgYWNyb3NzIHN0cmVhbXMuXG4mIzQzO1x0ICovXG4mIzQzO1x0bnJfYWdzID0gbXAtXHUwMDNlbV9zYi5zYl9hZ2NvdW50O1xuJiM0MztcdGlmIChucl9hZ3MgXHUwMDNlPSAxNilcbiYjNDM7XHRcdGFnX3NldF9zaXplID0gNDtcbiYjNDM7XHRlbHNlIGlmIChucl9hZ3MgXHUwMDNlPSA4KVxuJiM0MztcdFx0YWdfc2V0X3NpemUgPSAyO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdGFnX3NldF9zaXplID0gMTtcbiYjNDM7XHRucl9zdHJlYW1zID0gbnJfYWdzIC8gYWdfc2V0X3NpemU7XG4mIzQzO1x0cmV0dXJuIG1pbl90KHVpbnQxNl90LCBucl9zdHJlYW1zLCBYRlNfU1dfV1JJVEVfU1RSRUFNU19NQVgpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt1aW50MTZfdFxuJiM0Mzt4ZnNfaW5vZGVfZ2V0X3dyaXRlX3N0cmVhbShcbiYjNDM7XHRzdHJ1Y3QgeGZzX2lub2RlXHQqaXApXG4mIzQzO3tcbiYjNDM7XHR1aW50MTZfdFx0c3RyZWFtX2lkO1xuJiM0MztcbiYjNDM7XHR4ZnNfaWxvY2soaXAsIFhGU19JTE9DS19TSEFSRUQpO1xuJiM0MztcdHN0cmVhbV9pZCA9IGlwLVx1MDAzZWlfd3JpdGVfc3RyZWFtO1xuJiM0MztcdHhmc19pdW5sb2NrKGlwLCBYRlNfSUxPQ0tfU0hBUkVEKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHN0cmVhbV9pZDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RydWN0IHhmc193cml0ZV9zdHJlYW0ge1xuJiM0MztcdHN0cnVjdCB4ZnNfbW91bnRcdCptcDtcbiYjNDM7XHR1aW50MTZfdFx0XHRzdHJlYW1faWQ7XHQvKiAxLWJhc2VkICovXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50XG4mIzQzO3hmc193cml0ZV9zdHJlYW1fcmVsZWFzZShcbiYjNDM7XHRzdHJ1Y3QgaW5vZGVcdFx0Kmlub2RlLFxuJiM0MztcdHN0cnVjdCBmaWxlXHRcdCpmaWxlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHhmc193cml0ZV9zdHJlYW1cdCp3cyA9IGZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhO1xuJiM0MztcdHN0cnVjdCB4ZnNfbW91bnRcdCptcCA9IHdzLVx1MDAzZW1wO1xuJiM0MztcbiYjNDM7XHRzcGluX2xvY2soXHUwMDI2bXAtXHUwMDNlbV9zdHJlYW1zX2xvY2spO1xuJiM0MztcdGNsZWFyX2JpdCh3cy1cdTAwM2VzdHJlYW1faWQgLSAxLCBtcC1cdTAwM2VtX3N0cmVhbXNfaW5fdXNlKTtcbiYjNDM7XHRzcGluX3VubG9jayhcdTAwMjZtcC1cdTAwM2VtX3N0cmVhbXNfbG9jayk7XG4mIzQzO1x0a2ZyZWUod3MpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB4ZnNfd3JpdGVfc3RyZWFtX2ZvcHMgPSB7XG4mIzQzO1x0LnJlbGVhc2VcdD0geGZzX3dyaXRlX3N0cmVhbV9yZWxlYXNlLFxuJiM0MztcdC5sbHNlZWtcdFx0PSBub29wX2xsc2VlayxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO2ludFxuJiM0Mzt4ZnNfaW5vZGVfd3JpdGVfc3RyZWFtX29wZW4oXG4mIzQzO1x0c3RydWN0IHhmc19pbm9kZVx0KmlwLFxuJiM0MztcdHUzMlx0XHRcdGZsYWdzLFxuJiM0MztcdHUzMlx0XHRcdCpzdHJlYW1faWRwKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHhmc19tb3VudFx0Km1wID0gaXAtXHUwMDNlaV9tb3VudDtcbiYjNDM7XHRzdHJ1Y3QgeGZzX3dyaXRlX3N0cmVhbVx0KndzO1xuJiM0MztcdGludFx0XHRcdG1heCwgc2xvdCwgZmQsIHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKGZsYWdzIFx1MDAyNiB+RlNfV1JJVEVfU1RSRUFNX09QRU5fRVhBQ1QpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0bWF4ID0geGZzX2lub2RlX21heF93cml0ZV9zdHJlYW1zKGlwKTtcbiYjNDM7XHRpZiAoIW1heClcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHRBU1NFUlQobXAtXHUwMDNlbV9zdHJlYW1zX2luX3VzZSk7XG4mIzQzO1xuJiM0MztcdHdzID0ga21hbGxvYyhzaXplb2YoKndzKSwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKCF3cylcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcbiYjNDM7XHRzcGluX2xvY2soXHUwMDI2bXAtXHUwMDNlbV9zdHJlYW1zX2xvY2spO1xuJiM0MztcdGlmIChmbGFncyBcdTAwMjYgRlNfV1JJVEVfU1RSRUFNX09QRU5fRVhBQ1QpIHtcbiYjNDM7XHRcdGlmICghKnN0cmVhbV9pZHAgfHwgKnN0cmVhbV9pZHAgXHUwMDNlIG1heCkge1xuJiM0MztcdFx0XHRyZXQgPSAtRUlOVkFMO1xuJiM0MztcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRzbG90ID0gKnN0cmVhbV9pZHAgLSAxO1xuJiM0MztcdFx0aWYgKHRlc3RfYml0KHNsb3QsIG1wLVx1MDAzZW1fc3RyZWFtc19pbl91c2UpKSB7XG4mIzQzO1x0XHRcdHJldCA9IC1FQlVTWTtcbiYjNDM7XHRcdFx0Z290byBvdXRfdW5sb2NrO1xuJiM0MztcdFx0fVxuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRzbG90ID0gZmluZF9maXJzdF96ZXJvX2JpdChtcC1cdTAwM2VtX3N0cmVhbXNfaW5fdXNlLCBtYXgpO1xuJiM0MztcdFx0aWYgKHNsb3QgXHUwMDNlPSBtYXgpIHtcbiYjNDM7XHRcdFx0cmV0ID0gLUVCVVNZO1xuJiM0MztcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcdHNldF9iaXQoc2xvdCwgbXAtXHUwMDNlbV9zdHJlYW1zX2luX3VzZSk7XG4mIzQzO1x0c3Bpbl91bmxvY2soXHUwMDI2bXAtXHUwMDNlbV9zdHJlYW1zX2xvY2spO1xuJiM0MztcbiYjNDM7XHR3cy1cdTAwM2VtcCA9IG1wO1xuJiM0MztcdHdzLVx1MDAzZXN0cmVhbV9pZCA9IHNsb3QgJiM0MzsgMTtcdC8qIGNvbnZlcnQgdG8gMS1iYXNlZCAqL1xuJiM0MztcbiYjNDM7XHRmZCA9IGFub25faW5vZGVfZ2V0ZmQoXCYjMzQ7W3hmc193cml0ZV9zdHJlYW1dXCYjMzQ7LCBcdTAwMjZ4ZnNfd3JpdGVfc3RyZWFtX2ZvcHMsIHdzLFxuJiM0MztcdFx0XHQgICAgICBPX1JET05MWSB8IE9fQ0xPRVhFQyk7XG4mIzQzO1x0aWYgKGZkIFx1MDAzYyAwKSB7XG4mIzQzO1x0XHRzcGluX2xvY2soXHUwMDI2bXAtXHUwMDNlbV9zdHJlYW1zX2xvY2spO1xuJiM0MztcdFx0Y2xlYXJfYml0KHNsb3QsIG1wLVx1MDAzZW1fc3RyZWFtc19pbl91c2UpO1xuJiM0MztcdFx0c3Bpbl91bmxvY2soXHUwMDI2bXAtXHUwMDNlbV9zdHJlYW1zX2xvY2spO1xuJiM0MztcdFx0a2ZyZWUod3MpO1xuJiM0MztcdFx0cmV0dXJuIGZkO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0KnN0cmVhbV9pZHAgPSB3cy1cdTAwM2VzdHJlYW1faWQ7XG4mIzQzO1x0cmV0dXJuIGZkO1xuJiM0MztcbiYjNDM7b3V0X3VubG9jazpcbiYjNDM7XHRzcGluX3VubG9jayhcdTAwMjZtcC1cdTAwM2VtX3N0cmVhbXNfbG9jayk7XG4mIzQzO1x0a2ZyZWUod3MpO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludFxuJiM0Mzt4ZnNfaW5vZGVfc2V0X3dyaXRlX3N0cmVhbShcbiYjNDM7XHRzdHJ1Y3QgeGZzX2lub2RlXHQqaXAsXG4mIzQzO1x0aW50XHRcdFx0c3RyZWFtX2ZkKVxuJiM0Mzt7XG4mIzQzO1x0Q0xBU1MoZmQsIGYpKHN0cmVhbV9mZCk7XG4mIzQzO1x0c3RydWN0IHhmc193cml0ZV9zdHJlYW1cdCp3cztcbiYjNDM7XHRpbnRcdFx0XHRyZXQgPSAwO1xuJiM0MztcbiYjNDM7XHRpZiAoIWZkX2ZpbGUoZikpXG4mIzQzO1x0XHRyZXR1cm4gLUVCQURGO1xuJiM0MztcdGlmIChmZF9maWxlKGYpLVx1MDAzZWZfb3AgIT0gXHUwMDI2eGZzX3dyaXRlX3N0cmVhbV9mb3BzKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdHdzID0gZmRfZmlsZShmKS1cdTAwM2Vwcml2YXRlX2RhdGE7XG4mIzQzO1x0aWYgKHdzLVx1MDAzZW1wICE9IGlwLVx1MDAzZWlfbW91bnQpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0eGZzX2lsb2NrKGlwLCBYRlNfSUxPQ0tfRVhDTCk7XG4mIzQzO1xuJiM0MztcdGlmIChYRlNfSVNfUkVBTFRJTUVfSU5PREUoaXApIHx8IHhmc19pbm9kZV9pc19maWxlc3RyZWFtKGlwKSB8fFxuJiM0MztcdCAgICBWRlNfSShpcCktXHUwMDNlaV93cml0ZV9oaW50ICE9IFdSSVRFX0xJRkVfTk9UX1NFVCkge1xuJiM0MztcdFx0cmV0ID0gLUVJTlZBTDtcbiYjNDM7XHRcdGdvdG8gb3V0X3VubG9jaztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlwLVx1MDAzZWlfd3JpdGVfc3RyZWFtID0gd3MtXHUwMDNlc3RyZWFtX2lkO1xuJiM0MztvdXRfdW5sb2NrOlxuJiM0MztcdHhmc19pdW5sb2NrKGlwLCBYRlNfSUxPQ0tfRVhDTCk7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiAvKlxuICAqIFRoZXNlIHR3byBhcmUgd3JhcHBlciByb3V0aW5lcyBhcm91bmQgdGhlIHhmc19pbG9jaygpIHJvdXRpbmUgdXNlZCB0b1xuICAqIGNlbnRyYWxpemUgc29tZSBncnVuZ3kgY29kZS4gIFRoZXkgYXJlIHVzZWQgaW4gcGxhY2VzIHRoYXQgd2lzaCB0byBsb2NrIHRoZVxuZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfaW5vZGUuaCBiL2ZzL3hmcy94ZnNfaW5vZGUuaFxuaW5kZXggMzRjMTAzOGViZmNkZTEuLjZhYmY4MmZmYmY4MmFjIDEwMDY0NFxuLS0tIGEvZnMveGZzL3hmc19pbm9kZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy94ZnMveGZzX2lub2RlLmhcbkBAIC0zNyw2ICYjNDM7MzcsOSBAQCB0eXBlZGVmIHN0cnVjdCB4ZnNfaW5vZGUge1xuIFx0c3RydWN0IHhmc19pZm9ya1x0aV9kZjtcdFx0LyogZGF0YSBmb3JrICovXG4gXHRzdHJ1Y3QgeGZzX2lmb3JrXHRpX2FmO1x0XHQvKiBhdHRyaWJ1dGUgZm9yayAqL1xuIFxuJiM0MztcdC8qIFdyaXRlIHN0cmVhbSBpbmZvcm1hdGlvbiAqL1xuJiM0MztcdHVpbnQxNl90XHRcdGlfd3JpdGVfc3RyZWFtO1xuJiM0MztcbiBcdC8qIFRyYW5zYWN0aW9uIGFuZCBsb2NraW5nIGluZm9ybWF0aW9uLiAqL1xuIFx0c3RydWN0IHhmc19pbm9kZV9sb2dfaXRlbSAqaV9pdGVtcDtcdC8qIGxvZ2dpbmcgaW5mb3JtYXRpb24gKi9cbiBcdHN0cnVjdCByd19zZW1hcGhvcmVcdGlfbG9jaztcdFx0LyogaW5vZGUgbG9jayAqL1xuQEAgLTY3Myw0ICYjNDM7Njc2LDkgQEAgaW50IHhmc19pY3JlYXRlX2RxYWxsb2MoY29uc3Qgc3RydWN0IHhmc19pY3JlYXRlX2FyZ3MgKmFyZ3MsXG4gXHRcdHN0cnVjdCB4ZnNfZHF1b3QgKip1ZHFwcCwgc3RydWN0IHhmc19kcXVvdCAqKmdkcXBwLFxuIFx0XHRzdHJ1Y3QgeGZzX2RxdW90ICoqcGRxcHApO1xuIFxuJiM0MztpbnQgeGZzX2lub2RlX21heF93cml0ZV9zdHJlYW1zKHN0cnVjdCB4ZnNfaW5vZGUgKmlwKTtcbiYjNDM7dWludDE2X3QgeGZzX2lub2RlX2dldF93cml0ZV9zdHJlYW0oc3RydWN0IHhmc19pbm9kZSAqaXApO1xuJiM0MztpbnQgeGZzX2lub2RlX3dyaXRlX3N0cmVhbV9vcGVuKHN0cnVjdCB4ZnNfaW5vZGUgKmlwLCB1MzIgZmxhZ3MsXG4mIzQzO1x0XHR1MzIgKnN0cmVhbV9pZHApO1xuJiM0MztpbnQgeGZzX2lub2RlX3NldF93cml0ZV9zdHJlYW0oc3RydWN0IHhmc19pbm9kZSAqaXAsIGludCBzdHJlYW1fZmQpO1xuICNlbmRpZlx0LyogX19YRlNfSU5PREVfSF9fICovXG5kaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19pb2N0bC5jIGIvZnMveGZzL3hmc19pb2N0bC5jXG5pbmRleCAxYjUzNzAxYmViZWExYS4uODY0MGU2Mzg5NzY4M2YgMTAwNjQ0XG4tLS0gYS9mcy94ZnMveGZzX2lvY3RsLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3hmcy94ZnNfaW9jdGwuY1xuQEAgLTU1Nyw2ICYjNDM7NTU3LDEyIEBAIHhmc19pb2N0bF9zZXRhdHRyX3hmbGFncyhcbiBcdGJvb2xcdFx0XHRydGZsYWcgPSAoZmEtXHUwMDNlZnN4X3hmbGFncyBcdTAwMjYgRlNfWEZMQUdfUkVBTFRJTUUpO1xuIFx0dWludDY0X3RcdFx0aV9mbGFnczI7XG4gXG4mIzQzO1x0aWYgKChmYS1cdTAwM2Vmc3hfeGZsYWdzIFx1MDAyNiBGU19YRkxBR19GSUxFU1RSRUFNKSBcdTAwMjZcdTAwMjYgaXAtXHUwMDNlaV93cml0ZV9zdHJlYW0pXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0aWYgKHJ0ZmxhZyBcdTAwMjZcdTAwMjYgaXAtXHUwMDNlaV93cml0ZV9zdHJlYW0pXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4gXHRpZiAocnRmbGFnICE9IFhGU19JU19SRUFMVElNRV9JTk9ERShpcCkpIHtcbiBcdFx0LyogQ2FuJiMzOTt0IGNoYW5nZSByZWFsdGltZSBmbGFnIGlmIGFueSBleHRlbnRzIGFyZSBhbGxvY2F0ZWQuICovXG4gXHRcdGlmICh4ZnNfaW5vZGVfaGFzX2ZpbGVkYXRhKGlwKSlcbkBAIC0xMjAwLDYgJiM0MzsxMjA2LDU5IEBAIHhmc19pb2N0bF9mc19jb3VudHMoXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnRcbiYjNDM7eGZzX2lvY193cml0ZV9zdHJlYW1fb3BlbihcbiYjNDM7XHRzdHJ1Y3QgZmlsZVx0XHQqZmlscCxcbiYjNDM7XHR2b2lkIF9fdXNlclx0XHQqYXJnKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHhmc19pbm9kZVx0KmlwID0gWEZTX0koZmlsZV9pbm9kZShmaWxwKSk7XG4mIzQzO1x0c3RydWN0IGZzX3dyaXRlX3N0cmVhbV9vcGVuIHdzbztcbiYjNDM7XHRpbnRcdFx0XHRmZDtcbiYjNDM7XG4mIzQzO1x0aWYgKGNvcHlfZnJvbV91c2VyKFx1MDAyNndzbywgYXJnLCBzaXplb2Yod3NvKSkpXG4mIzQzO1x0XHRyZXR1cm4gLUVGQVVMVDtcbiYjNDM7XG4mIzQzO1x0ZmQgPSB4ZnNfaW5vZGVfd3JpdGVfc3RyZWFtX29wZW4oaXAsIHdzby5mbGFncywgXHUwMDI2d3NvLnN0cmVhbV9pZCk7XG4mIzQzO1x0aWYgKGZkIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIGZkO1xuJiM0MztcbiYjNDM7XHRpZiAoY29weV90b191c2VyKGFyZywgXHUwMDI2d3NvLCBzaXplb2Yod3NvKSkpXG4mIzQzO1x0XHRyZXR1cm4gLUVGQVVMVDtcbiYjNDM7XHRyZXR1cm4gZmQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnRcbiYjNDM7eGZzX2lvY193cml0ZV9zdHJlYW1fc2V0KFxuJiM0MztcdHN0cnVjdCBmaWxlXHRcdCpmaWxwLFxuJiM0MztcdHVuc2lnbmVkIGxvbmdcdFx0YXJnKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHhmc19pbm9kZVx0KmlwID0gWEZTX0koZmlsZV9pbm9kZShmaWxwKSk7XG4mIzQzO1xuJiM0MztcdGlmICghKGZpbHAtXHUwMDNlZl9tb2RlIFx1MDAyNiBGTU9ERV9XUklURSkpXG4mIzQzO1x0XHRyZXR1cm4gLUVCQURGO1xuJiM0MztcdHJldHVybiB4ZnNfaW5vZGVfc2V0X3dyaXRlX3N0cmVhbShpcCwgKGludClhcmcpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50XG4mIzQzO3hmc19pb2Nfd3JpdGVfc3RyZWFtX2dldChcbiYjNDM7XHRzdHJ1Y3QgeGZzX2lub2RlXHQqaXAsXG4mIzQzO1x0dm9pZCBfX3VzZXJcdFx0KmFyZylcbiYjNDM7e1xuJiM0MztcdF9fdTMyIHN0cmVhbV9pZCA9IHhmc19pbm9kZV9nZXRfd3JpdGVfc3RyZWFtKGlwKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHB1dF91c2VyKHN0cmVhbV9pZCwgKF9fdTMyIF9fdXNlciAqKWFyZyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnRcbiYjNDM7eGZzX2lvY193cml0ZV9zdHJlYW1fZ2V0X21heChcbiYjNDM7XHRzdHJ1Y3QgeGZzX2lub2RlXHQqaXAsXG4mIzQzO1x0dm9pZCBfX3VzZXJcdFx0KmFyZylcbiYjNDM7e1xuJiM0MztcdF9fdTMyIG5yX3N0cmVhbXMgPSB4ZnNfaW5vZGVfbWF4X3dyaXRlX3N0cmVhbXMoaXApO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcHV0X3VzZXIobnJfc3RyZWFtcywgKF9fdTMyIF9fdXNlciAqKWFyZyk7XG4mIzQzO31cbiYjNDM7XG4gLypcbiAgKiBUaGVzZSBsb25nLXVudXNlZCBpb2N0bHMgd2VyZSByZW1vdmVkIGZyb20gdGhlIG9mZmljaWFsIGlvY3RsIEFQSSBpbiA1LjE3LFxuICAqIGJ1dCByZXRhaW4gdGhlc2UgZGVmaW5pdGlvbnMgc28gdGhhdCB3ZSBjYW4gbG9nIHdhcm5pbmdzIGFib3V0IHRoZW0uXG5AQCAtMTQ2NSw2ICYjNDM7MTUyNCwxNiBAQCB4ZnNfZmlsZV9pb2N0bChcbiBcdFx0cmV0dXJuIHhmc19pb2NfaGVhbHRoX21vbml0b3IoZmlscCwgYXJnKTtcbiBcdGNhc2UgWEZTX0lPQ19WRVJJRllfTUVESUE6XG4gXHRcdHJldHVybiB4ZnNfaW9jX3ZlcmlmeV9tZWRpYShmaWxwLCBhcmcpO1xuJiM0MztcdGNhc2UgRlNfSU9DX1dSSVRFX1NUUkVBTV9PUEVOOlxuJiM0MztcdFx0cmV0dXJuIHhmc19pb2Nfd3JpdGVfc3RyZWFtX29wZW4oZmlscCwgKHZvaWQgX191c2VyICopYXJnKTtcbiYjNDM7XHRjYXNlIEZTX0lPQ19XUklURV9TVFJFQU1fU0VUOlxuJiM0MztcdFx0cmV0dXJuIHhmc19pb2Nfd3JpdGVfc3RyZWFtX3NldChmaWxwLCBwKTtcbiYjNDM7XHRjYXNlIEZTX0lPQ19XUklURV9TVFJFQU1fR0VUOlxuJiM0MztcdFx0cmV0dXJuIHhmc19pb2Nfd3JpdGVfc3RyZWFtX2dldChYRlNfSShmaWxlX2lub2RlKGZpbHApKSxcbiYjNDM7XHRcdFx0XHRcdFx0KHZvaWQgX191c2VyICopYXJnKTtcbiYjNDM7XHRjYXNlIEZTX0lPQ19XUklURV9TVFJFQU1fR0VUX01BWDpcbiYjNDM7XHRcdHJldHVybiB4ZnNfaW9jX3dyaXRlX3N0cmVhbV9nZXRfbWF4KFhGU19JKGZpbGVfaW5vZGUoZmlscCkpLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgKHZvaWQgX191c2VyICopYXJnKTtcbiBcbiBcdGRlZmF1bHQ6XG4gXHRcdHJldHVybiAtRU5PVFRZO1xuZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfaW9tYXAuYyBiL2ZzL3hmcy94ZnNfaW9tYXAuY1xuaW5kZXggMjI1YzNkZTg4ZDAzYjEuLmJmNDIzODk3ZDkxNmRmIDEwMDY0NFxuLS0tIGEvZnMveGZzL3hmc19pb21hcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy94ZnMveGZzX2lvbWFwLmNcbkBAIC0xNDQsNiAmIzQzOzE0NCw3IEBAIHhmc19ibWJ0X3RvX2lvbWFwKFxuIFx0fVxuIFx0aW9tYXAtXHUwMDNlb2Zmc2V0ID0gWEZTX0ZTQl9UT19CKG1wLCBpbWFwLVx1MDAzZWJyX3N0YXJ0b2ZmKTtcbiBcdGlvbWFwLVx1MDAzZWxlbmd0aCA9IFhGU19GU0JfVE9fQihtcCwgaW1hcC1cdTAwM2Vicl9ibG9ja2NvdW50KTtcbiYjNDM7XHRpb21hcC1cdTAwM2V3cml0ZV9zdHJlYW0gPSBpcC1cdTAwM2VpX3dyaXRlX3N0cmVhbTtcbiBcdGlmIChtYXBwaW5nX2ZsYWdzIFx1MDAyNiBJT01BUF9EQVgpIHtcbiBcdFx0aW9tYXAtXHUwMDNlZGF4X2RldiA9IHRhcmdldC1cdTAwM2VidF9kYXhkZXY7XG4gXHR9IGVsc2Uge1xuZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfbW91bnQuaCBiL2ZzL3hmcy94ZnNfbW91bnQuaFxuaW5kZXggNjZhMDJkMWI5YWQ3YTEuLmFkNTExMTU1OTRkM2M4IDEwMDY0NFxuLS0tIGEvZnMveGZzL3hmc19tb3VudC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy94ZnMveGZzX21vdW50LmhcbkBAIC00NSw2ICYjNDM7NDUsOCBAQCBlbnVtIHtcbiBcbiAjZGVmaW5lIFhGU19FUlJfUkVUUllfRk9SRVZFUlx0LTFcbiBcbiYjNDM7I2RlZmluZSBYRlNfU1dfV1JJVEVfU1RSRUFNU19NQVhcdDE2XG4mIzQzO1xuIC8qXG4gICogQWx0aG91Z2ggcmV0cnlfdGltZW91dCBpcyBpbiBqaWZmaWVzIHdoaWNoIGlzIG5vcm1hbGx5IGFuIHVuc2lnbmVkIGxvbmcsXG4gICogd2UgbGltaXQgdGhlIHJldHJ5IHRpbWVvdXQgdG8gODY0MDAgc2Vjb25kcywgb3Igb25lIGRheS4gIFNvIGV2ZW4gYVxuQEAgLTM0OSw2ICYjNDM7MzUxLDkgQEAgdHlwZWRlZiBzdHJ1Y3QgeGZzX21vdW50IHtcbiBcbiBcdC8qIEluZGV4IG9mIHV1aWQgcmVjb3JkIGluIHRoZSB1dWlkIHhhcnJheS4gKi9cbiBcdHVuc2lnbmVkIGludFx0XHRtX3V1aWRfdGFibGVfaW5kZXg7XG4mIzQzO1xuJiM0MztcdHVuc2lnbmVkIGxvbmdcdFx0Km1fc3RyZWFtc19pbl91c2U7XG4mIzQzO1x0c3BpbmxvY2tfdFx0XHRtX3N0cmVhbXNfbG9jaztcbiB9IHhmc19tb3VudF90O1xuIFxuICNkZWZpbmUgTV9JR0VPKG1wKVx0XHQoXHUwMDI2KG1wKS1cdTAwM2VtX2lub19nZW8pXG5kaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19zdXBlci5jIGIvZnMveGZzL3hmc19zdXBlci5jXG5pbmRleCA4NTMxZDUyNmZjNDQwOS4uZDY5OGJlNTA0YzQ1NDggMTAwNjQ0XG4tLS0gYS9mcy94ZnMveGZzX3N1cGVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3hmcy94ZnNfc3VwZXIuY1xuQEAgLTgwNSw2ICYjNDM7ODA1LDcgQEAgeGZzX21vdW50X2ZyZWUoXG4gI2lmZGVmIERFQlVHXG4gXHRrZnJlZShtcC1cdTAwM2VtX2Vycm9ydGFnKTtcbiAjZW5kaWZcbiYjNDM7XHRiaXRtYXBfZnJlZShtcC1cdTAwM2VtX3N0cmVhbXNfaW5fdXNlKTtcbiBcdGtmcmVlKG1wKTtcbiB9XG4gXG5AQCAtMTY1OSw2ICYjNDM7MTY2MCw3IEBAIHhmc19mc19maWxsX3N1cGVyKFxuIFx0c3RydWN0IHhmc19tb3VudFx0Km1wID0gc2ItXHUwMDNlc19mc19pbmZvO1xuIFx0c3RydWN0IGlub2RlXHRcdCpyb290O1xuIFx0aW50XHRcdFx0ZmxhZ3MgPSAwLCBlcnJvcjtcbiYjNDM7XHRpbnRcdFx0XHRucl9zdHJlYW1zO1xuIFxuIFx0bXAtXHUwMDNlbV9zdXBlciA9IHNiO1xuIFxuQEAgLTE3MDgsNiAmIzQzOzE3MTAsMTUgQEAgeGZzX2ZzX2ZpbGxfc3VwZXIoXG4gXHRpZiAoZXJyb3IpXG4gXHRcdHJldHVybiBlcnJvcjtcbiBcbiYjNDM7XHRucl9zdHJlYW1zID0gYmRldl9tYXhfd3JpdGVfc3RyZWFtcyhtcC1cdTAwM2VtX2RkZXZfdGFyZ3AtXHUwMDNlYnRfYmRldik7XG4mIzQzO1x0aWYgKCFucl9zdHJlYW1zKVxuJiM0MztcdFx0bnJfc3RyZWFtcyA9IFhGU19TV19XUklURV9TVFJFQU1TX01BWDtcbiYjNDM7XHRtcC1cdTAwM2VtX3N0cmVhbXNfaW5fdXNlID0gYml0bWFwX3phbGxvYyhucl9zdHJlYW1zLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRpZiAoIW1wLVx1MDAzZW1fc3RyZWFtc19pbl91c2UpIHtcbiYjNDM7XHRcdGVycm9yID0gLUVOT01FTTtcbiYjNDM7XHRcdGdvdG8gb3V0X3NodXRkb3duX2RldmljZXM7XG4mIzQzO1x0fVxuJiM0MztcbiBcdGlmICh4ZnNfZGVidWdmcykge1xuIFx0XHRtcC1cdTAwM2VtX2RlYnVnZnMgPSB4ZnNfZGVidWdmc19ta2RpcihtcC1cdTAwM2VtX3N1cGVyLVx1MDAzZXNfaWQsXG4gXHRcdFx0XHRcdFx0ICB4ZnNfZGVidWdmcyk7XG5AQCAtMjI0OSw2ICYjNDM7MjI2MCw3IEBAIHhmc19pbml0X2ZzX2NvbnRleHQoXG4gI2VuZGlmXG4gXG4gXHRzcGluX2xvY2tfaW5pdChcdTAwMjZtcC1cdTAwM2VtX3NiX2xvY2spO1xuJiM0MztcdHNwaW5fbG9ja19pbml0KFx1MDAyNm1wLVx1MDAzZW1fc3RyZWFtc19sb2NrKTtcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIFhHX1RZUEVfTUFYOyBpJiM0MzsmIzQzOylcbiBcdFx0eGFfaW5pdChcdTAwMjZtcC1cdTAwM2VtX2dyb3Vwc1tpXS54YSk7XG4gXHRtdXRleF9pbml0KFx1MDAyNm1wLVx1MDAzZW1fZ3Jvd2xvY2spO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaW9tYXAuaCBiL2luY2x1ZGUvbGludXgvaW9tYXAuaFxuaW5kZXggNTZiNDNkNTk0ZTZlMjkuLjRkYzcxZGE1OThmOTlkIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9pb21hcC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2lvbWFwLmhcbkBAIC0xMzIsNiAmIzQzOzEzMiw4IEBAIHN0cnVjdCBpb21hcCB7XG4gXHR1NjRcdFx0XHRsZW5ndGg7XHQvKiBsZW5ndGggb2YgbWFwcGluZywgYnl0ZXMgKi9cbiBcdHUxNlx0XHRcdHR5cGU7XHQvKiB0eXBlIG9mIG1hcHBpbmcgKi9cbiBcdHUxNlx0XHRcdGZsYWdzO1x0LyogZmxhZ3MgZm9yIG1hcHBpbmcgKi9cbiYjNDM7XHR1MTZcdFx0XHR3cml0ZV9zdHJlYW07IC8qIHdyaXRlIHN0cmVhbSBmb3IgSS9PICovXG4mIzQzO1x0LyogMiBieXRlcyBwYWRkaW5nIGhvbGUgaGVyZSAqL1xuIFx0c3RydWN0IGJsb2NrX2RldmljZVx0KmJkZXY7XHQvKiBibG9jayBkZXZpY2UgZm9yIEkvTyAqL1xuIFx0c3RydWN0IGRheF9kZXZpY2VcdCpkYXhfZGV2OyAvKiBkYXhfZGV2IGZvciBkYXggb3BlcmF0aW9ucyAqL1xuIFx0dm9pZFx0XHRcdCppbmxpbmVfZGF0YTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvZnMuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9mcy5oXG5pbmRleCBiZDg3MjYyZjJlMzQ5NC4uYTc1NmQyN2JkZjg0MTcgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvZnMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS91YXBpL2xpbnV4L2ZzLmhcbkBAIC0zNDUsNiAmIzQzOzM0NSwyMiBAQCBzdHJ1Y3QgZmlsZV9hdHRyIHtcbiAvKiBHZXQgbG9naWNhbCBibG9jayBtZXRhZGF0YSBjYXBhYmlsaXR5IGRldGFpbHMgKi9cbiAjZGVmaW5lIEZTX0lPQ19HRVRMQk1EX0NBUFx0XHRfSU9XUigweDE1LCAyLCBzdHJ1Y3QgbG9naWNhbF9ibG9ja19tZXRhZGF0YV9jYXApXG4gXG4mIzQzO3N0cnVjdCBmc193cml0ZV9zdHJlYW1fb3BlbiB7XG4mIzQzO1x0X191MzJcdFx0c3RyZWFtX2lkO1x0LyogSU46IHJlcXVlc3RlZCBpZCBpZiBPUEVOX0VYQUNUIHNldDsgT1VUOiBhc3NpZ25lZCBpZCAqL1xuJiM0MztcdF9fdTMyXHRcdGZsYWdzO1x0XHQvKiBJTjogRlNfV1JJVEVfU1RSRUFNX09QRU5fKiAqL1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogRmxhZyB0byBhc2sgZm9yIHNwZWNpZmljIHN0cmVhbV9pZCwgb3RoZXJ3aXNlIGtlcm5lbCBjYW4gcmV0dXJuIGFueS5cbiYjNDM7ICogRmFpbHMgd2l0aCAtRUJVU1kgaWYgdGhhdCBzdHJlYW1faWQgaXMgYWxyZWFkeSBoZWxkXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIEZTX1dSSVRFX1NUUkVBTV9PUEVOX0VYQUNUXHQoMSBcdTAwM2NcdTAwM2MgMClcbiYjNDM7XG4mIzQzOyNkZWZpbmUgRlNfSU9DX1dSSVRFX1NUUkVBTV9HRVRfTUFYXHRfSU9SKCYjMzk7ZiYjMzk7LCAxMzUsIF9fdTMyKVxuJiM0MzsjZGVmaW5lIEZTX0lPQ19XUklURV9TVFJFQU1fT1BFTlx0X0lPV1IoJiMzOTtmJiMzOTssIDEzNiwgc3RydWN0IGZzX3dyaXRlX3N0cmVhbV9vcGVuKVxuJiM0MzsjZGVmaW5lIEZTX0lPQ19XUklURV9TVFJFQU1fU0VUXHRcdF9JT1coJiMzOTtmJiMzOTssIDEzNywgX19zMzIpXG4mIzQzOyNkZWZpbmUgRlNfSU9DX1dSSVRFX1NUUkVBTV9HRVRcdFx0X0lPUigmIzM5O2YmIzM5OywgMTM4LCBfX3UzMilcbiYjNDM7XG4gLypcbiAgKiBJbm9kZSBmbGFncyAoRlNfSU9DX0dFVEZMQUdTIC8gRlNfSU9DX1NFVEZMQUdTKVxuICAqXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTcgMTY6MDY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7WEZTX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7eGZzX2lvY193cml0ZV9zdHJlYW1fb3BlbiYjMzQ7LAogICAgJiMzNDt4ZnNfaW9jX3dyaXRlX3N0cmVhbV9zZXQmIzM0OywKICAgICYjMzQ7eGZzX2lvY193cml0ZV9zdHJlYW1fZ2V0JiMzNDssCiAgICAmIzM0O3hmc19pb2Nfd3JpdGVfc3RyZWFtX2dldF9tYXgmIzM0OywKICAgICYjMzQ7eGZzX2lub2RlX3dyaXRlX3N0cmVhbV9vcGVuJiMzNDssCiAgICAmIzM0O3hmc19pbm9kZV9zZXRfd3JpdGVfc3RyZWFtJiMzNDssCiAgICAmIzM0O3hmc19pbm9kZV9nZXRfd3JpdGVfc3RyZWFtJiMzNDssCiAgICAmIzM0O3hmc19pbm9kZV9tYXhfd3JpdGVfc3RyZWFtcyYjMzQ7LAogICAgJiMzNDt4ZnNfd3JpdGVfc3RyZWFtX3JlbGVhc2UmIzM0OywKICAgICYjMzQ7eGZzX2lub2RlX3dyaXRlX3N0cmVhbV9hZ19zZXQmIzM0OywKICAgICYjMzQ7eGZzX2FnX3RvX2FnX3NldCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIHdyaXRlIHN0cmVhbXMgc3VwcG9ydCB0byBYRlMgYW5kIGlvbWFwLCBpbmNsdWRpbmcgbmV3IGlvY3RscyBmb3IgbWFuYWdpbmcgd3JpdGUgc3RyZWFtcyBhbmQgbW9kaWZpY2F0aW9ucyB0byBibG9jayBhbGxvY2F0aW9uIGxvZ2ljIHRvIGZhbiBvdXQgYWxsb2NhdGlvbnMgYWNyb3NzIEFHcyBiYXNlZCBvbiB0aGUgc3RyZWFtIElELiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBtb2RpZmllcyBjb3JlIGZpbGVzeXN0ZW0gbG9naWMgYW5kIGludHJvZHVjZXMgbmV3IHVzZXItZmFjaW5nIEFQSXMsIG1ha2luZyBpdCBhIHByaW1lIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgM2YxOWY5Y2QxYTRlNTQ0N2VhZDFlY2Q3ODMzNWY3MGJiMzNhMzNhNApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgSnVsIDE3IDE2OjA2OjAyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvaW9tYXAvZGlyZWN0LWlvLmMgYi9mcy9pb21hcC9kaXJlY3QtaW8uYwppbmRleCBlMmNkNWY5MmJhYmVkYi4uYjc3NzFhMjVjMWM3OWYgMTAwNjQ0Ci0tLSBhL2ZzL2lvbWFwL2RpcmVjdC1pby5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2lvbWFwL2RpcmVjdC1pby5jCkBAIC0zNDgsNiAmIzQzOzM0OCw3IEBAIHN0YXRpYyBzc2l6ZV90IGlvbWFwX2Rpb19iaW9faXRlcl9vbmUoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsCiAJZnNjcnlwdF9zZXRfYmlvX2NyeXB0X2N0eChiaW8sIGl0ZXItJmd0O2lub2RlLCBwb3MsIEdGUF9LRVJORUwpOwogCWJpby0mZ3Q7YmlfaXRlci5iaV9zZWN0b3IgPSBpb21hcF9zZWN0b3IoJmFtcDtpdGVyLSZndDtpb21hcCwgcG9zKTsKIAliaW8tJmd0O2JpX3dyaXRlX2hpbnQgPSBpdGVyLSZndDtpbm9kZS0mZ3Q7aV93cml0ZV9oaW50OwomIzQzOwliaW8tJmd0O2JpX3dyaXRlX3N0cmVhbSA9IGl0ZXItJmd0O2lvbWFwLndyaXRlX3N0cmVhbTsKIAliaW8tJmd0O2JpX2lvcHJpbyA9IGRpby0mZ3Q7aW9jYi0mZ3Q7a2lfaW9wcmlvOwogCWJpby0mZ3Q7YmlfcHJpdmF0ZSA9IGRpbzsKIAliaW8tJmd0O2JpX2VuZF9pbyA9IGlvbWFwX2Rpb19iaW9fZW5kX2lvOwpkaWZmIC0tZ2l0IGEvZnMvaW9tYXAvaW9lbmQuYyBiL2ZzL2lvbWFwL2lvZW5kLmMKaW5kZXggMDU2NTMyODc2NGMxNzUuLjVlYTJjNjg5OTNjZjkzIDEwMDY0NAotLS0gYS9mcy9pb21hcC9pb2VuZC5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2lvbWFwL2lvZW5kLmMKQEAgLTE2NSw2ICYjNDM7MTY1LDcgQEAgc3RhdGljIHN0cnVjdCBpb21hcF9pb2VuZCAqaW9tYXBfYWxsb2NfaW9lbmQoc3RydWN0IGlvbWFwX3dyaXRlcGFnZV9jdHggKndwYywKIAkJCSAgICAgICBHRlBfTk9GUywgJmFtcDtpb21hcF9pb2VuZF9iaW9zZXQpOwogCWJpby0mZ3Q7YmlfaXRlci5iaV9zZWN0b3IgPSBpb21hcF9zZWN0b3IoJmFtcDt3cGMtJmd0O2lvbWFwLCBwb3MpOwogCWJpby0mZ3Q7Ymlfd3JpdGVfaGludCA9IHdwYy0mZ3Q7aW5vZGUtJmd0O2lfd3JpdGVfaGludDsKJiM0MzsJYmlvLSZndDtiaV93cml0ZV9zdHJlYW0gPSB3cGMtJmd0O2lvbWFwLndyaXRlX3N0cmVhbTsKIAl3YmNfaW5pdF9iaW8od3BjLSZndDt3YmMsIGJpbyk7CiAJd3BjLSZndDtucl9mb2xpb3MgPSAwOwogCXJldHVybiBpb21hcF9pbml0X2lvZW5kKHdwYy0mZ3Q7aW5vZGUsIGJpbywgcG9zLCBpb2VuZF9mbGFncyk7CkBAIC0xODgsNiAmIzQzOzE4OSw4IEBAIHN0YXRpYyBib29sIGlvbWFwX2Nhbl9hZGRfdG9faW9lbmQoc3RydWN0IGlvbWFwX3dyaXRlcGFnZV9jdHggKndwYywgbG9mZl90IHBvcywKIAlpZiAoISh3cGMtJmd0O2lvbWFwLmZsYWdzICZhbXA7IElPTUFQX0ZfQU5PTl9XUklURSkgJmFtcDsmYW1wOwogCSAgICBpb21hcF9zZWN0b3IoJmFtcDt3cGMtJmd0O2lvbWFwLCBwb3MpICE9IGJpb19lbmRfc2VjdG9yKCZhbXA7aW9lbmQtJmd0O2lvX2JpbykpCiAJCXJldHVybiBmYWxzZTsKJiM0MzsJaWYgKHdwYy0mZ3Q7aW9tYXAud3JpdGVfc3RyZWFtICE9IGlvZW5kLSZndDtpb19iaW8uYmlfd3JpdGVfc3RyZWFtKQomIzQzOwkJcmV0dXJuIGZhbHNlOwogCS8qCiAJICogTGltaXQgaW9lbmQgYmlvIGNoYWluIGxlbmd0aHMgdG8gbWluaW1pc2UgSU8gY29tcGxldGlvbiBsYXRlbmN5LiBUaGlzCiAJICogYWxzbyBwcmV2ZW50cyBsb25nIHRpZ2h0IGxvb3BzIGVuZGluZyBwYWdlIHdyaXRlYmFjayBvbiBhbGwgdGhlCmRpZmYgLS1naXQgYS9mcy94ZnMvbGlieGZzL3hmc19ibWFwLmMgYi9mcy94ZnMvbGlieGZzL3hmc19ibWFwLmMKaW5kZXggZDY0ZGVmZWRhNjQ1ZWQuLjg3MmE0YWJkMjMxNTdjIDEwMDY0NAotLS0gYS9mcy94ZnMvbGlieGZzL3hmc19ibWFwLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMveGZzL2xpYnhmcy94ZnNfYm1hcC5jCkBAIC0zMTkyLDYgJiM0MzszMTkyLDcyIEBAIHhmc19ibWFwX3NlbGVjdF9taW5sZW4oCiAJcmV0dXJuIGFyZ3MtJmd0O21heGxlbjsKIH0KIAomIzQzOyNkZWZpbmUJR0VORVJJQ19BR19TRVRfU1oJKDIpCiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSB4ZnNfYWdudW1iZXJfdAomIzQzO3hmc19kZWZhdWx0X2FnX3NldF9zaXplKAomIzQzOwlzdHJ1Y3QgeGZzX2lub2RlCSppcCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB4ZnNfbW91bnQJKm1wID0gaXAtJmd0O2lfbW91bnQ7CiYjNDM7CiYjNDM7CXJldHVybiBtaW5fdCh4ZnNfYWdudW1iZXJfdCwgR0VORVJJQ19BR19TRVRfU1osIG1wLSZndDttX3NiLnNiX2FnY291bnQpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgeGZzX2FnbnVtYmVyX3QKJiM0Mzt4ZnNfaW5vZGVfd3JpdGVfc3RyZWFtX2FnX3NldCgKJiM0MzsJc3RydWN0IHhmc19pbm9kZQkqaXAsCiYjNDM7CXhmc19hZ251bWJlcl90CQkqdGFyZ2V0X2Fnbm8pCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeGZzX21vdW50CSptcCA9IGlwLSZndDtpX21vdW50OwomIzQzOwl1aW50MzJfdAkJbnJfc3RyZWFtcyA9IHhmc19pbm9kZV9tYXhfd3JpdGVfc3RyZWFtcyhpcCk7CiYjNDM7CXVpbnQzMl90CQlzdHJlYW1faWQgPSBpcC0mZ3Q7aV93cml0ZV9zdHJlYW07CiYjNDM7CXVpbnQzMl90CQlucl9hZ3MgPSBtcC0mZ3Q7bV9zYi5zYl9hZ2NvdW50OwomIzQzOwl4ZnNfYWdudW1iZXJfdAkJc2V0X3NpemU7CiYjNDM7CiYjNDM7CiYjNDM7CWlmICghbnJfc3RyZWFtcykKJiM0MzsJCXJldHVybiB4ZnNfZGVmYXVsdF9hZ19zZXRfc2l6ZShpcCk7CiYjNDM7CiYjNDM7CXN0cmVhbV9pZCAtPSAxOyAvKiBGb3IgMC1iYXNlZCBtYXRoOyBzdHJlYW0taWRzIGFyZSAxLWJhc2VkICovCiYjNDM7CXNldF9zaXplID0gbnJfYWdzIC8gbnJfc3RyZWFtczsKJiM0MzsKJiM0MzsJaWYgKHNldF9zaXplKSB7CiYjNDM7CQkqdGFyZ2V0X2Fnbm8gPSBzdHJlYW1faWQgKiBzZXRfc2l6ZTsKJiM0MzsJCS8qIHVuZXZlbiBkaXN0cmlidXRpb24sIGxhc3Qgc3RyZWFtIHdpbGwgY292ZXIgZXh0cmEgQUdzICovCiYjNDM7CQlpZiAoc3RyZWFtX2lkID09IG5yX3N0cmVhbXMgLSAxKQomIzQzOwkJCXNldF9zaXplID0gbnJfYWdzIC0gKnRhcmdldF9hZ25vOwomIzQzOwl9IGVsc2UgewomIzQzOwkJLyogZm9yIHRoZSBjYXNlIHdoZW4gd2UgaGF2ZSBmZXdlciBBR3MgdGhhbiBzdHJlYW1zICovCiYjNDM7CQkqdGFyZ2V0X2Fnbm8gPSBzdHJlYW1faWQgJSBucl9hZ3M7CiYjNDM7CQlzZXRfc2l6ZSA9IDE7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIHNldF9zaXplOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgeGZzX2FnbnVtYmVyX3QKJiM0Mzt4ZnNfYWdfdG9fYWdfc2V0KAomIzQzOwlzdHJ1Y3QgeGZzX2JtYWxsb2NhCSphcCwKJiM0MzsJeGZzX2FnbnVtYmVyX3QJCWJhc2VfYWdubykKJiM0Mzt7CiYjNDM7CXN0cnVjdCB4ZnNfaW5vZGUJKmlwID0gYXAtJmd0O2lwOwomIzQzOwlzdHJ1Y3QgeGZzX21vdW50CSptcCA9IGlwLSZndDtpX21vdW50OwomIzQzOwl4ZnNfYWdudW1iZXJfdAkJc2V0X3NpemU7CiYjNDM7CiYjNDM7CS8qIEFwcGx5IGZhbm5pbmcgb25seSBmb3IgcmVndWxhciBmaWxlIGRhdGEgKi8KJiM0MzsJaWYgKCEoYXAtJmd0O2RhdGF0eXBlICZhbXA7IFhGU19BTExPQ19VU0VSREFUQSkpCiYjNDM7CQlyZXR1cm4gYmFzZV9hZ25vOwomIzQzOwomIzQzOwlpZiAoaXAtJmd0O2lfd3JpdGVfc3RyZWFtKQomIzQzOwkJc2V0X3NpemUgPSB4ZnNfaW5vZGVfd3JpdGVfc3RyZWFtX2FnX3NldChpcCwgJmFtcDtiYXNlX2Fnbm8pOwomIzQzOwllbHNlCiYjNDM7CQlzZXRfc2l6ZSA9IHhmc19kZWZhdWx0X2FnX3NldF9zaXplKGlwKTsKJiM0MzsKJiM0MzsJLyogRmFuIG91dCB3aXRoaW4gdGhlIEFHIHNldCB1c2luZyBsb3cgYml0cyBvZiB0aGUgaW5vZGUgKi8KJiM0MzsJcmV0dXJuIChiYXNlX2Fnbm8gJiM0MzsgKFhGU19JTk9fVE9fQUdJTk8obXAsIElfSU5PKGlwKSkgJSBzZXRfc2l6ZSkpICUKJiM0MzsJCW1wLSZndDttX3NiLnNiX2FnY291bnQ7CiYjNDM7fQomIzQzOwogc3RhdGljIGludAogeGZzX2JtYXBfYnRhbGxvY19zZWxlY3RfbGVuZ3RocygKIAlzdHJ1Y3QgeGZzX2JtYWxsb2NhCSphcCwKQEAgLTM1ODcsOCAmIzQzOzM2NTMsMTYgQEAgeGZzX2JtYXBfYnRhbGxvY19iZXN0X2xlbmd0aCgKIHsKIAl4ZnNfZXh0bGVuX3QJCWJsZW4gPSAwOwogCWludAkJCWVycm9yOwomIzQzOwl4ZnNfYWdudW1iZXJfdAkJdGFyZ2V0X2FnLCBzdGFydF9hZzsKIAogCWFwLSZndDtibGtubyA9IFhGU19JTk9ERV9UT19GU0IoYXAtJmd0O2lwKTsKJiM0MzsKJiM0MzsJLyogZmFuIG91dCBpbml0aWFsIEFHIGFjcm9zcyB0aGUgZ2VuZXJpYyBBRyBzZXQgKi8KJiM0MzsJc3RhcnRfYWcgPSBYRlNfRlNCX1RPX0FHTk8oYXJncy0mZ3Q7bXAsIGFwLSZndDtibGtubyk7CiYjNDM7CXRhcmdldF9hZyA9IHhmc19hZ190b19hZ19zZXQoYXAsIHN0YXJ0X2FnKTsKJiM0MzsJaWYgKHRhcmdldF9hZyAhPSBzdGFydF9hZykKJiM0MzsJCWFwLSZndDtibGtubyA9IFhGU19BR0JfVE9fRlNCKGFyZ3MtJmd0O21wLCB0YXJnZXRfYWcsIDApOwomIzQzOwogCWlmICgheGZzX2JtYXBfYWRqYWNlbnQoYXApKQogCQlhcC0mZ3Q7ZW9mID0gZmFsc2U7CiAKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfaWNhY2hlLmMgYi9mcy94ZnMveGZzX2ljYWNoZS5jCmluZGV4IDlkOGRkMzBiZDkyN2EyLi43YjlkZGE3NDEyMmYwZSAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19pY2FjaGUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy94ZnMveGZzX2ljYWNoZS5jCkBAIC0xMjksNiAmIzQzOzEyOSw3IEBAIHhmc19pbm9kZV9hbGxvYygKIAlzcGluX2xvY2tfaW5pdCgmYW1wO2lwLSZndDtpX2lvZW5kX2xvY2spOwogCWlwLSZndDtpX25leHRfdW5saW5rZWQgPSBOVUxMQUdJTk87CiAJaXAtJmd0O2lfcHJldl91bmxpbmtlZCA9IDA7CiYjNDM7CWlwLSZndDtpX3dyaXRlX3N0cmVhbSA9IDA7CiAKIAlyZXR1cm4gaXA7CiB9CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2lub2RlLmMgYi9mcy94ZnMveGZzX2lub2RlLmMKaW5kZXggMTUyNzlkMjJhODk0ZmEuLjYzOGJlZTNlNGFjMjI4IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2lub2RlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMveGZzL3hmc19pbm9kZS5jCkBAIC00LDYgJiM0Mzs0LDcgQEAKICAqIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKi8KICNpbmNsdWRlICZsdDtsaW51eC9pdmVyc2lvbi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9hbm9uX2lub2Rlcy5oJmd0OwogCiAjaW5jbHVkZSAmIzM0O3hmc19wbGF0Zm9ybS5oJiMzNDsKICNpbmNsdWRlICYjMzQ7eGZzX2ZzLmgmIzM0OwpAQCAtNDcsNiAmIzQzOzQ4LDE4MCBAQAogCiBzdHJ1Y3Qga21lbV9jYWNoZSAqeGZzX2lub2RlX2NhY2hlOwogCiYjNDM7aW50CiYjNDM7eGZzX2lub2RlX21heF93cml0ZV9zdHJlYW1zKAomIzQzOwlzdHJ1Y3QgeGZzX2lub2RlCSppcCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBibG9ja19kZXZpY2UJKmJkZXY7CiYjNDM7CXN0cnVjdCB4ZnNfbW91bnQJKm1wID0gaXAtJmd0O2lfbW91bnQ7CiYjNDM7CWludCBucl9zdHJlYW1zOwomIzQzOwl4ZnNfYWdudW1iZXJfdCBucl9hZ3MsIGFnX3NldF9zaXplOwomIzQzOwlib29sCQkJaXNfZmlsZXN0cmVhbSwgaXNfcmVhbHRpbWU7CiYjNDM7CiYjNDM7CXhmc19pbG9jayhpcCwgWEZTX0lMT0NLX1NIQVJFRCk7CiYjNDM7CWlzX2ZpbGVzdHJlYW0gPSB4ZnNfaW5vZGVfaXNfZmlsZXN0cmVhbShpcCk7CiYjNDM7CWlzX3JlYWx0aW1lID0gWEZTX0lTX1JFQUxUSU1FX0lOT0RFKGlwKTsKJiM0MzsJYmRldiA9IHhmc19pbm9kZV9idWZ0YXJnKGlwKS0mZ3Q7YnRfYmRldjsKJiM0MzsJeGZzX2l1bmxvY2soaXAsIFhGU19JTE9DS19TSEFSRUQpOwomIzQzOwomIzQzOwlpZiAoIWJkZXYgfHwgaXNfZmlsZXN0cmVhbSB8fCBpc19yZWFsdGltZSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlucl9zdHJlYW1zID0gYmRldl9tYXhfd3JpdGVfc3RyZWFtcyhiZGV2KTsKJiM0MzsJaWYgKG5yX3N0cmVhbXMgJmd0OyAwKQomIzQzOwkJcmV0dXJuIG5yX3N0cmVhbXM7CiYjNDM7CS8qCiYjNDM7CSAqIEVuYWJsZSBzb2Z0d2FyZS1vbmx5IHN0cmVhbXMgaWYgaGFyZHdhcmUgc3RyZWFtcyBhcmUgbm90IGF2YWlsYWJsZS4KJiM0MzsJICogVGhpcyBoZWxwcyB0bwomIzQzOwkgKiAtIGltcHJvdmUgaXNvbGF0aW9uOyByZWR1Y2UgYWxsb2NhdGlvbiBpbnRlcmxlYXZpbmcuCiYjNDM7CSAqIC0gaW1wcm92ZSBjb25jdXJyZW5jeSB1c2luZyBBRy1zZXQgYmFzZWQgc3RlZXJpbmcgd2l0aGluIGFuZCBhY3Jvc3Mgc3RyZWFtcy4KJiM0MzsJICovCiYjNDM7CW5yX2FncyA9IG1wLSZndDttX3NiLnNiX2FnY291bnQ7CiYjNDM7CWlmIChucl9hZ3MgJmd0Oz0gMTYpCiYjNDM7CQlhZ19zZXRfc2l6ZSA9IDQ7CiYjNDM7CWVsc2UgaWYgKG5yX2FncyAmZ3Q7PSA4KQomIzQzOwkJYWdfc2V0X3NpemUgPSAyOwomIzQzOwllbHNlCiYjNDM7CQlhZ19zZXRfc2l6ZSA9IDE7CiYjNDM7CW5yX3N0cmVhbXMgPSBucl9hZ3MgLyBhZ19zZXRfc2l6ZTsKJiM0MzsJcmV0dXJuIG1pbl90KHVpbnQxNl90LCBucl9zdHJlYW1zLCBYRlNfU1dfV1JJVEVfU1RSRUFNU19NQVgpOwomIzQzO30KJiM0MzsKJiM0Mzt1aW50MTZfdAomIzQzO3hmc19pbm9kZV9nZXRfd3JpdGVfc3RyZWFtKAomIzQzOwlzdHJ1Y3QgeGZzX2lub2RlCSppcCkKJiM0Mzt7CiYjNDM7CXVpbnQxNl90CXN0cmVhbV9pZDsKJiM0MzsKJiM0MzsJeGZzX2lsb2NrKGlwLCBYRlNfSUxPQ0tfU0hBUkVEKTsKJiM0MzsJc3RyZWFtX2lkID0gaXAtJmd0O2lfd3JpdGVfc3RyZWFtOwomIzQzOwl4ZnNfaXVubG9jayhpcCwgWEZTX0lMT0NLX1NIQVJFRCk7CiYjNDM7CiYjNDM7CXJldHVybiBzdHJlYW1faWQ7CiYjNDM7fQomIzQzOwomIzQzO3N0cnVjdCB4ZnNfd3JpdGVfc3RyZWFtIHsKJiM0MzsJc3RydWN0IHhmc19tb3VudAkqbXA7CiYjNDM7CXVpbnQxNl90CQlzdHJlYW1faWQ7CS8qIDEtYmFzZWQgKi8KJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBpbnQKJiM0Mzt4ZnNfd3JpdGVfc3RyZWFtX3JlbGVhc2UoCiYjNDM7CXN0cnVjdCBpbm9kZQkJKmlub2RlLAomIzQzOwlzdHJ1Y3QgZmlsZQkJKmZpbGUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeGZzX3dyaXRlX3N0cmVhbQkqd3MgPSBmaWxlLSZndDtwcml2YXRlX2RhdGE7CiYjNDM7CXN0cnVjdCB4ZnNfbW91bnQJKm1wID0gd3MtJmd0O21wOwomIzQzOwomIzQzOwlzcGluX2xvY2soJmFtcDttcC0mZ3Q7bV9zdHJlYW1zX2xvY2spOwomIzQzOwljbGVhcl9iaXQod3MtJmd0O3N0cmVhbV9pZCAtIDEsIG1wLSZndDttX3N0cmVhbXNfaW5fdXNlKTsKJiM0MzsJc3Bpbl91bmxvY2soJmFtcDttcC0mZ3Q7bV9zdHJlYW1zX2xvY2spOwomIzQzOwlrZnJlZSh3cyk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB4ZnNfd3JpdGVfc3RyZWFtX2ZvcHMgPSB7CiYjNDM7CS5yZWxlYXNlCT0geGZzX3dyaXRlX3N0cmVhbV9yZWxlYXNlLAomIzQzOwkubGxzZWVrCQk9IG5vb3BfbGxzZWVrLAomIzQzO307CiYjNDM7CiYjNDM7aW50CiYjNDM7eGZzX2lub2RlX3dyaXRlX3N0cmVhbV9vcGVuKAomIzQzOwlzdHJ1Y3QgeGZzX2lub2RlCSppcCwKJiM0MzsJdTMyCQkJZmxhZ3MsCiYjNDM7CXUzMgkJCSpzdHJlYW1faWRwKQomIzQzO3sKJiM0MzsJc3RydWN0IHhmc19tb3VudAkqbXAgPSBpcC0mZ3Q7aV9tb3VudDsKJiM0MzsJc3RydWN0IHhmc193cml0ZV9zdHJlYW0JKndzOwomIzQzOwlpbnQJCQltYXgsIHNsb3QsIGZkLCByZXQ7CiYjNDM7CiYjNDM7CWlmIChmbGFncyAmYW1wOyB+RlNfV1JJVEVfU1RSRUFNX09QRU5fRVhBQ1QpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJbWF4ID0geGZzX2lub2RlX21heF93cml0ZV9zdHJlYW1zKGlwKTsKJiM0MzsJaWYgKCFtYXgpCiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CUFTU0VSVChtcC0mZ3Q7bV9zdHJlYW1zX2luX3VzZSk7CiYjNDM7CiYjNDM7CXdzID0ga21hbGxvYyhzaXplb2YoKndzKSwgR0ZQX0tFUk5FTCk7CiYjNDM7CWlmICghd3MpCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsKJiM0MzsJc3Bpbl9sb2NrKCZhbXA7bXAtJmd0O21fc3RyZWFtc19sb2NrKTsKJiM0MzsJaWYgKGZsYWdzICZhbXA7IEZTX1dSSVRFX1NUUkVBTV9PUEVOX0VYQUNUKSB7CiYjNDM7CQlpZiAoISpzdHJlYW1faWRwIHx8ICpzdHJlYW1faWRwICZndDsgbWF4KSB7CiYjNDM7CQkJcmV0ID0gLUVJTlZBTDsKJiM0MzsJCQlnb3RvIG91dF91bmxvY2s7CiYjNDM7CQl9CiYjNDM7CQlzbG90ID0gKnN0cmVhbV9pZHAgLSAxOwomIzQzOwkJaWYgKHRlc3RfYml0KHNsb3QsIG1wLSZndDttX3N0cmVhbXNfaW5fdXNlKSkgewomIzQzOwkJCXJldCA9IC1FQlVTWTsKJiM0MzsJCQlnb3RvIG91dF91bmxvY2s7CiYjNDM7CQl9CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlzbG90ID0gZmluZF9maXJzdF96ZXJvX2JpdChtcC0mZ3Q7bV9zdHJlYW1zX2luX3VzZSwgbWF4KTsKJiM0MzsJCWlmIChzbG90ICZndDs9IG1heCkgewomIzQzOwkJCXJldCA9IC1FQlVTWTsKJiM0MzsJCQlnb3RvIG91dF91bmxvY2s7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsJc2V0X2JpdChzbG90LCBtcC0mZ3Q7bV9zdHJlYW1zX2luX3VzZSk7CiYjNDM7CXNwaW5fdW5sb2NrKCZhbXA7bXAtJmd0O21fc3RyZWFtc19sb2NrKTsKJiM0MzsKJiM0MzsJd3MtJmd0O21wID0gbXA7CiYjNDM7CXdzLSZndDtzdHJlYW1faWQgPSBzbG90ICYjNDM7IDE7CS8qIGNvbnZlcnQgdG8gMS1iYXNlZCAqLwomIzQzOwomIzQzOwlmZCA9IGFub25faW5vZGVfZ2V0ZmQoJiMzNDtbeGZzX3dyaXRlX3N0cmVhbV0mIzM0OywgJmFtcDt4ZnNfd3JpdGVfc3RyZWFtX2ZvcHMsIHdzLAomIzQzOwkJCSAgICAgIE9fUkRPTkxZIHwgT19DTE9FWEVDKTsKJiM0MzsJaWYgKGZkICZsdDsgMCkgewomIzQzOwkJc3Bpbl9sb2NrKCZhbXA7bXAtJmd0O21fc3RyZWFtc19sb2NrKTsKJiM0MzsJCWNsZWFyX2JpdChzbG90LCBtcC0mZ3Q7bV9zdHJlYW1zX2luX3VzZSk7CiYjNDM7CQlzcGluX3VubG9jaygmYW1wO21wLSZndDttX3N0cmVhbXNfbG9jayk7CiYjNDM7CQlrZnJlZSh3cyk7CiYjNDM7CQlyZXR1cm4gZmQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJKnN0cmVhbV9pZHAgPSB3cy0mZ3Q7c3RyZWFtX2lkOwomIzQzOwlyZXR1cm4gZmQ7CiYjNDM7CiYjNDM7b3V0X3VubG9jazoKJiM0MzsJc3Bpbl91bmxvY2soJmFtcDttcC0mZ3Q7bV9zdHJlYW1zX2xvY2spOwomIzQzOwlrZnJlZSh3cyk7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO2ludAomIzQzO3hmc19pbm9kZV9zZXRfd3JpdGVfc3RyZWFtKAomIzQzOwlzdHJ1Y3QgeGZzX2lub2RlCSppcCwKJiM0MzsJaW50CQkJc3RyZWFtX2ZkKQomIzQzO3sKJiM0MzsJQ0xBU1MoZmQsIGYpKHN0cmVhbV9mZCk7CiYjNDM7CXN0cnVjdCB4ZnNfd3JpdGVfc3RyZWFtCSp3czsKJiM0MzsJaW50CQkJcmV0ID0gMDsKJiM0MzsKJiM0MzsJaWYgKCFmZF9maWxlKGYpKQomIzQzOwkJcmV0dXJuIC1FQkFERjsKJiM0MzsJaWYgKGZkX2ZpbGUoZiktJmd0O2Zfb3AgIT0gJmFtcDt4ZnNfd3JpdGVfc3RyZWFtX2ZvcHMpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJd3MgPSBmZF9maWxlKGYpLSZndDtwcml2YXRlX2RhdGE7CiYjNDM7CWlmICh3cy0mZ3Q7bXAgIT0gaXAtJmd0O2lfbW91bnQpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJeGZzX2lsb2NrKGlwLCBYRlNfSUxPQ0tfRVhDTCk7CiYjNDM7CiYjNDM7CWlmIChYRlNfSVNfUkVBTFRJTUVfSU5PREUoaXApIHx8IHhmc19pbm9kZV9pc19maWxlc3RyZWFtKGlwKSB8fAomIzQzOwkgICAgVkZTX0koaXApLSZndDtpX3dyaXRlX2hpbnQgIT0gV1JJVEVfTElGRV9OT1RfU0VUKSB7CiYjNDM7CQlyZXQgPSAtRUlOVkFMOwomIzQzOwkJZ290byBvdXRfdW5sb2NrOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlwLSZndDtpX3dyaXRlX3N0cmVhbSA9IHdzLSZndDtzdHJlYW1faWQ7CiYjNDM7b3V0X3VubG9jazoKJiM0MzsJeGZzX2l1bmxvY2soaXAsIFhGU19JTE9DS19FWENMKTsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiAvKgogICogVGhlc2UgdHdvIGFyZSB3cmFwcGVyIHJvdXRpbmVzIGFyb3VuZCB0aGUgeGZzX2lsb2NrKCkgcm91dGluZSB1c2VkIHRvCiAgKiBjZW50cmFsaXplIHNvbWUgZ3J1bmd5IGNvZGUuICBUaGV5IGFyZSB1c2VkIGluIHBsYWNlcyB0aGF0IHdpc2ggdG8gbG9jayB0aGUKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfaW5vZGUuaCBiL2ZzL3hmcy94ZnNfaW5vZGUuaAppbmRleCAzNGMxMDM4ZWJmY2RlMS4uNmFiZjgyZmZiZjgyYWMgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfaW5vZGUuaAomIzQzOyYjNDM7JiM0MzsgYi9mcy94ZnMveGZzX2lub2RlLmgKQEAgLTM3LDYgJiM0MzszNyw5IEBAIHR5cGVkZWYgc3RydWN0IHhmc19pbm9kZSB7CiAJc3RydWN0IHhmc19pZm9yawlpX2RmOwkJLyogZGF0YSBmb3JrICovCiAJc3RydWN0IHhmc19pZm9yawlpX2FmOwkJLyogYXR0cmlidXRlIGZvcmsgKi8KIAomIzQzOwkvKiBXcml0ZSBzdHJlYW0gaW5mb3JtYXRpb24gKi8KJiM0MzsJdWludDE2X3QJCWlfd3JpdGVfc3RyZWFtOwomIzQzOwogCS8qIFRyYW5zYWN0aW9uIGFuZCBsb2NraW5nIGluZm9ybWF0aW9uLiAqLwogCXN0cnVjdCB4ZnNfaW5vZGVfbG9nX2l0ZW0gKmlfaXRlbXA7CS8qIGxvZ2dpbmcgaW5mb3JtYXRpb24gKi8KIAlzdHJ1Y3Qgcndfc2VtYXBob3JlCWlfbG9jazsJCS8qIGlub2RlIGxvY2sgKi8KQEAgLTY3Myw0ICYjNDM7Njc2LDkgQEAgaW50IHhmc19pY3JlYXRlX2RxYWxsb2MoY29uc3Qgc3RydWN0IHhmc19pY3JlYXRlX2FyZ3MgKmFyZ3MsCiAJCXN0cnVjdCB4ZnNfZHF1b3QgKip1ZHFwcCwgc3RydWN0IHhmc19kcXVvdCAqKmdkcXBwLAogCQlzdHJ1Y3QgeGZzX2RxdW90ICoqcGRxcHApOwogCiYjNDM7aW50IHhmc19pbm9kZV9tYXhfd3JpdGVfc3RyZWFtcyhzdHJ1Y3QgeGZzX2lub2RlICppcCk7CiYjNDM7dWludDE2X3QgeGZzX2lub2RlX2dldF93cml0ZV9zdHJlYW0oc3RydWN0IHhmc19pbm9kZSAqaXApOwomIzQzO2ludCB4ZnNfaW5vZGVfd3JpdGVfc3RyZWFtX29wZW4oc3RydWN0IHhmc19pbm9kZSAqaXAsIHUzMiBmbGFncywKJiM0MzsJCXUzMiAqc3RyZWFtX2lkcCk7CiYjNDM7aW50IHhmc19pbm9kZV9zZXRfd3JpdGVfc3RyZWFtKHN0cnVjdCB4ZnNfaW5vZGUgKmlwLCBpbnQgc3RyZWFtX2ZkKTsKICNlbmRpZgkvKiBfX1hGU19JTk9ERV9IX18gKi8KZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfaW9jdGwuYyBiL2ZzL3hmcy94ZnNfaW9jdGwuYwppbmRleCAxYjUzNzAxYmViZWExYS4uODY0MGU2Mzg5NzY4M2YgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfaW9jdGwuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy94ZnMveGZzX2lvY3RsLmMKQEAgLTU1Nyw2ICYjNDM7NTU3LDEyIEBAIHhmc19pb2N0bF9zZXRhdHRyX3hmbGFncygKIAlib29sCQkJcnRmbGFnID0gKGZhLSZndDtmc3hfeGZsYWdzICZhbXA7IEZTX1hGTEFHX1JFQUxUSU1FKTsKIAl1aW50NjRfdAkJaV9mbGFnczI7CiAKJiM0MzsJaWYgKChmYS0mZ3Q7ZnN4X3hmbGFncyAmYW1wOyBGU19YRkxBR19GSUxFU1RSRUFNKSAmYW1wOyZhbXA7IGlwLSZndDtpX3dyaXRlX3N0cmVhbSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlpZiAocnRmbGFnICZhbXA7JmFtcDsgaXAtJmd0O2lfd3JpdGVfc3RyZWFtKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiAJaWYgKHJ0ZmxhZyAhPSBYRlNfSVNfUkVBTFRJTUVfSU5PREUoaXApKSB7CiAJCS8qIENhbiYjMzk7dCBjaGFuZ2UgcmVhbHRpbWUgZmxhZyBpZiBhbnkgZXh0ZW50cyBhcmUgYWxsb2NhdGVkLiAqLwogCQlpZiAoeGZzX2lub2RlX2hhc19maWxlZGF0YShpcCkpCkBAIC0xMjAwLDYgJiM0MzsxMjA2LDU5IEBAIHhmc19pb2N0bF9mc19jb3VudHMoCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgaW50CiYjNDM7eGZzX2lvY193cml0ZV9zdHJlYW1fb3BlbigKJiM0MzsJc3RydWN0IGZpbGUJCSpmaWxwLAomIzQzOwl2b2lkIF9fdXNlcgkJKmFyZykKJiM0Mzt7CiYjNDM7CXN0cnVjdCB4ZnNfaW5vZGUJKmlwID0gWEZTX0koZmlsZV9pbm9kZShmaWxwKSk7CiYjNDM7CXN0cnVjdCBmc193cml0ZV9zdHJlYW1fb3BlbiB3c287CiYjNDM7CWludAkJCWZkOwomIzQzOwomIzQzOwlpZiAoY29weV9mcm9tX3VzZXIoJmFtcDt3c28sIGFyZywgc2l6ZW9mKHdzbykpKQomIzQzOwkJcmV0dXJuIC1FRkFVTFQ7CiYjNDM7CiYjNDM7CWZkID0geGZzX2lub2RlX3dyaXRlX3N0cmVhbV9vcGVuKGlwLCB3c28uZmxhZ3MsICZhbXA7d3NvLnN0cmVhbV9pZCk7CiYjNDM7CWlmIChmZCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gZmQ7CiYjNDM7CiYjNDM7CWlmIChjb3B5X3RvX3VzZXIoYXJnLCAmYW1wO3dzbywgc2l6ZW9mKHdzbykpKQomIzQzOwkJcmV0dXJuIC1FRkFVTFQ7CiYjNDM7CXJldHVybiBmZDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludAomIzQzO3hmc19pb2Nfd3JpdGVfc3RyZWFtX3NldCgKJiM0MzsJc3RydWN0IGZpbGUJCSpmaWxwLAomIzQzOwl1bnNpZ25lZCBsb25nCQlhcmcpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeGZzX2lub2RlCSppcCA9IFhGU19JKGZpbGVfaW5vZGUoZmlscCkpOwomIzQzOwomIzQzOwlpZiAoIShmaWxwLSZndDtmX21vZGUgJmFtcDsgRk1PREVfV1JJVEUpKQomIzQzOwkJcmV0dXJuIC1FQkFERjsKJiM0MzsJcmV0dXJuIHhmc19pbm9kZV9zZXRfd3JpdGVfc3RyZWFtKGlwLCAoaW50KWFyZyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQKJiM0Mzt4ZnNfaW9jX3dyaXRlX3N0cmVhbV9nZXQoCiYjNDM7CXN0cnVjdCB4ZnNfaW5vZGUJKmlwLAomIzQzOwl2b2lkIF9fdXNlcgkJKmFyZykKJiM0Mzt7CiYjNDM7CV9fdTMyIHN0cmVhbV9pZCA9IHhmc19pbm9kZV9nZXRfd3JpdGVfc3RyZWFtKGlwKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHB1dF91c2VyKHN0cmVhbV9pZCwgKF9fdTMyIF9fdXNlciAqKWFyZyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQKJiM0Mzt4ZnNfaW9jX3dyaXRlX3N0cmVhbV9nZXRfbWF4KAomIzQzOwlzdHJ1Y3QgeGZzX2lub2RlCSppcCwKJiM0MzsJdm9pZCBfX3VzZXIJCSphcmcpCiYjNDM7ewomIzQzOwlfX3UzMiBucl9zdHJlYW1zID0geGZzX2lub2RlX21heF93cml0ZV9zdHJlYW1zKGlwKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHB1dF91c2VyKG5yX3N0cmVhbXMsIChfX3UzMiBfX3VzZXIgKilhcmcpOwomIzQzO30KJiM0MzsKIC8qCiAgKiBUaGVzZSBsb25nLXVudXNlZCBpb2N0bHMgd2VyZSByZW1vdmVkIGZyb20gdGhlIG9mZmljaWFsIGlvY3RsIEFQSSBpbiA1LjE3LAogICogYnV0IHJldGFpbiB0aGVzZSBkZWZpbml0aW9ucyBzbyB0aGF0IHdlIGNhbiBsb2cgd2FybmluZ3MgYWJvdXQgdGhlbS4KQEAgLTE0NjUsNiAmIzQzOzE1MjQsMTYgQEAgeGZzX2ZpbGVfaW9jdGwoCiAJCXJldHVybiB4ZnNfaW9jX2hlYWx0aF9tb25pdG9yKGZpbHAsIGFyZyk7CiAJY2FzZSBYRlNfSU9DX1ZFUklGWV9NRURJQToKIAkJcmV0dXJuIHhmc19pb2NfdmVyaWZ5X21lZGlhKGZpbHAsIGFyZyk7CiYjNDM7CWNhc2UgRlNfSU9DX1dSSVRFX1NUUkVBTV9PUEVOOgomIzQzOwkJcmV0dXJuIHhmc19pb2Nfd3JpdGVfc3RyZWFtX29wZW4oZmlscCwgKHZvaWQgX191c2VyICopYXJnKTsKJiM0MzsJY2FzZSBGU19JT0NfV1JJVEVfU1RSRUFNX1NFVDoKJiM0MzsJCXJldHVybiB4ZnNfaW9jX3dyaXRlX3N0cmVhbV9zZXQoZmlscCwgcCk7CiYjNDM7CWNhc2UgRlNfSU9DX1dSSVRFX1NUUkVBTV9HRVQ6CiYjNDM7CQlyZXR1cm4geGZzX2lvY193cml0ZV9zdHJlYW1fZ2V0KFhGU19JKGZpbGVfaW5vZGUoZmlscCkpLAomIzQzOwkJCQkJCSh2b2lkIF9fdXNlciAqKWFyZyk7CiYjNDM7CWNhc2UgRlNfSU9DX1dSSVRFX1NUUkVBTV9HRVRfTUFYOgomIzQzOwkJcmV0dXJuIHhmc19pb2Nfd3JpdGVfc3RyZWFtX2dldF9tYXgoWEZTX0koZmlsZV9pbm9kZShmaWxwKSksCiYjNDM7CQkJCQkJICAgICh2b2lkIF9fdXNlciAqKWFyZyk7CiAKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVOT1RUWTsKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfaW9tYXAuYyBiL2ZzL3hmcy94ZnNfaW9tYXAuYwppbmRleCAyMjVjM2RlODhkMDNiMS4uYmY0MjM4OTdkOTE2ZGYgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfaW9tYXAuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy94ZnMveGZzX2lvbWFwLmMKQEAgLTE0NCw2ICYjNDM7MTQ0LDcgQEAgeGZzX2JtYnRfdG9faW9tYXAoCiAJfQogCWlvbWFwLSZndDtvZmZzZXQgPSBYRlNfRlNCX1RPX0IobXAsIGltYXAtJmd0O2JyX3N0YXJ0b2ZmKTsKIAlpb21hcC0mZ3Q7bGVuZ3RoID0gWEZTX0ZTQl9UT19CKG1wLCBpbWFwLSZndDticl9ibG9ja2NvdW50KTsKJiM0MzsJaW9tYXAtJmd0O3dyaXRlX3N0cmVhbSA9IGlwLSZndDtpX3dyaXRlX3N0cmVhbTsKIAlpZiAobWFwcGluZ19mbGFncyAmYW1wOyBJT01BUF9EQVgpIHsKIAkJaW9tYXAtJmd0O2RheF9kZXYgPSB0YXJnZXQtJmd0O2J0X2RheGRldjsKIAl9IGVsc2UgewpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19tb3VudC5oIGIvZnMveGZzL3hmc19tb3VudC5oCmluZGV4IDY2YTAyZDFiOWFkN2ExLi5hZDUxMTE1NTk0ZDNjOCAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19tb3VudC5oCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3hmcy94ZnNfbW91bnQuaApAQCAtNDUsNiAmIzQzOzQ1LDggQEAgZW51bSB7CiAKICNkZWZpbmUgWEZTX0VSUl9SRVRSWV9GT1JFVkVSCS0xCiAKJiM0MzsjZGVmaW5lIFhGU19TV19XUklURV9TVFJFQU1TX01BWAkxNgomIzQzOwogLyoKICAqIEFsdGhvdWdoIHJldHJ5X3RpbWVvdXQgaXMgaW4gamlmZmllcyB3aGljaCBpcyBub3JtYWxseSBhbiB1bnNpZ25lZCBsb25nLAogICogd2UgbGltaXQgdGhlIHJldHJ5IHRpbWVvdXQgdG8gODY0MDAgc2Vjb25kcywgb3Igb25lIGRheS4gIFNvIGV2ZW4gYQpAQCAtMzQ5LDYgJiM0MzszNTEsOSBAQCB0eXBlZGVmIHN0cnVjdCB4ZnNfbW91bnQgewogCiAJLyogSW5kZXggb2YgdXVpZCByZWNvcmQgaW4gdGhlIHV1aWQgeGFycmF5LiAqLwogCXVuc2lnbmVkIGludAkJbV91dWlkX3RhYmxlX2luZGV4OwomIzQzOwomIzQzOwl1bnNpZ25lZCBsb25nCQkqbV9zdHJlYW1zX2luX3VzZTsKJiM0MzsJc3BpbmxvY2tfdAkJbV9zdHJlYW1zX2xvY2s7CiB9IHhmc19tb3VudF90OwogCiAjZGVmaW5lIE1fSUdFTyhtcCkJCSgmYW1wOyhtcCktJmd0O21faW5vX2dlbykKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfc3VwZXIuYyBiL2ZzL3hmcy94ZnNfc3VwZXIuYwppbmRleCA4NTMxZDUyNmZjNDQwOS4uZDY5OGJlNTA0YzQ1NDggMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfc3VwZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy94ZnMveGZzX3N1cGVyLmMKQEAgLTgwNSw2ICYjNDM7ODA1LDcgQEAgeGZzX21vdW50X2ZyZWUoCiAjaWZkZWYgREVCVUcKIAlrZnJlZShtcC0mZ3Q7bV9lcnJvcnRhZyk7CiAjZW5kaWYKJiM0MzsJYml0bWFwX2ZyZWUobXAtJmd0O21fc3RyZWFtc19pbl91c2UpOwogCWtmcmVlKG1wKTsKIH0KIApAQCAtMTY1OSw2ICYjNDM7MTY2MCw3IEBAIHhmc19mc19maWxsX3N1cGVyKAogCXN0cnVjdCB4ZnNfbW91bnQJKm1wID0gc2ItJmd0O3NfZnNfaW5mbzsKIAlzdHJ1Y3QgaW5vZGUJCSpyb290OwogCWludAkJCWZsYWdzID0gMCwgZXJyb3I7CiYjNDM7CWludAkJCW5yX3N0cmVhbXM7CiAKIAltcC0mZ3Q7bV9zdXBlciA9IHNiOwogCkBAIC0xNzA4LDYgJiM0MzsxNzEwLDE1IEBAIHhmc19mc19maWxsX3N1cGVyKAogCWlmIChlcnJvcikKIAkJcmV0dXJuIGVycm9yOwogCiYjNDM7CW5yX3N0cmVhbXMgPSBiZGV2X21heF93cml0ZV9zdHJlYW1zKG1wLSZndDttX2RkZXZfdGFyZ3AtJmd0O2J0X2JkZXYpOwomIzQzOwlpZiAoIW5yX3N0cmVhbXMpCiYjNDM7CQlucl9zdHJlYW1zID0gWEZTX1NXX1dSSVRFX1NUUkVBTVNfTUFYOwomIzQzOwltcC0mZ3Q7bV9zdHJlYW1zX2luX3VzZSA9IGJpdG1hcF96YWxsb2MobnJfc3RyZWFtcywgR0ZQX0tFUk5FTCk7CiYjNDM7CWlmICghbXAtJmd0O21fc3RyZWFtc19pbl91c2UpIHsKJiM0MzsJCWVycm9yID0gLUVOT01FTTsKJiM0MzsJCWdvdG8gb3V0X3NodXRkb3duX2RldmljZXM7CiYjNDM7CX0KJiM0MzsKIAlpZiAoeGZzX2RlYnVnZnMpIHsKIAkJbXAtJmd0O21fZGVidWdmcyA9IHhmc19kZWJ1Z2ZzX21rZGlyKG1wLSZndDttX3N1cGVyLSZndDtzX2lkLAogCQkJCQkJICB4ZnNfZGVidWdmcyk7CkBAIC0yMjQ5LDYgJiM0MzsyMjYwLDcgQEAgeGZzX2luaXRfZnNfY29udGV4dCgKICNlbmRpZgogCiAJc3Bpbl9sb2NrX2luaXQoJmFtcDttcC0mZ3Q7bV9zYl9sb2NrKTsKJiM0MzsJc3Bpbl9sb2NrX2luaXQoJmFtcDttcC0mZ3Q7bV9zdHJlYW1zX2xvY2spOwogCWZvciAoaSA9IDA7IGkgJmx0OyBYR19UWVBFX01BWDsgaSYjNDM7JiM0MzspCiAJCXhhX2luaXQoJmFtcDttcC0mZ3Q7bV9ncm91cHNbaV0ueGEpOwogCW11dGV4X2luaXQoJmFtcDttcC0mZ3Q7bV9ncm93bG9jayk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lvbWFwLmggYi9pbmNsdWRlL2xpbnV4L2lvbWFwLmgKaW5kZXggNTZiNDNkNTk0ZTZlMjkuLjRkYzcxZGE1OThmOTlkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lvbWFwLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9pb21hcC5oCkBAIC0xMzIsNiAmIzQzOzEzMiw4IEBAIHN0cnVjdCBpb21hcCB7CiAJdTY0CQkJbGVuZ3RoOwkvKiBsZW5ndGggb2YgbWFwcGluZywgYnl0ZXMgKi8KIAl1MTYJCQl0eXBlOwkvKiB0eXBlIG9mIG1hcHBpbmcgKi8KIAl1MTYJCQlmbGFnczsJLyogZmxhZ3MgZm9yIG1hcHBpbmcgKi8KJiM0MzsJdTE2CQkJd3JpdGVfc3RyZWFtOyAvKiB3cml0ZSBzdHJlYW0gZm9yIEkvTyAqLwomIzQzOwkvKiAyIGJ5dGVzIHBhZGRpbmcgaG9sZSBoZXJlICovCiAJc3RydWN0IGJsb2NrX2RldmljZQkqYmRldjsJLyogYmxvY2sgZGV2aWNlIGZvciBJL08gKi8KIAlzdHJ1Y3QgZGF4X2RldmljZQkqZGF4X2RldjsgLyogZGF4X2RldiBmb3IgZGF4IG9wZXJhdGlvbnMgKi8KIAl2b2lkCQkJKmlubGluZV9kYXRhOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L2ZzLmggYi9pbmNsdWRlL3VhcGkvbGludXgvZnMuaAppbmRleCBiZDg3MjYyZjJlMzQ5NC4uYTc1NmQyN2JkZjg0MTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9mcy5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvdWFwaS9saW51eC9mcy5oCkBAIC0zNDUsNiAmIzQzOzM0NSwyMiBAQCBzdHJ1Y3QgZmlsZV9hdHRyIHsKIC8qIEdldCBsb2dpY2FsIGJsb2NrIG1ldGFkYXRhIGNhcGFiaWxpdHkgZGV0YWlscyAqLwogI2RlZmluZSBGU19JT0NfR0VUTEJNRF9DQVAJCV9JT1dSKDB4MTUsIDIsIHN0cnVjdCBsb2dpY2FsX2Jsb2NrX21ldGFkYXRhX2NhcCkKIAomIzQzO3N0cnVjdCBmc193cml0ZV9zdHJlYW1fb3BlbiB7CiYjNDM7CV9fdTMyCQlzdHJlYW1faWQ7CS8qIElOOiByZXF1ZXN0ZWQgaWQgaWYgT1BFTl9FWEFDVCBzZXQ7IE9VVDogYXNzaWduZWQgaWQgKi8KJiM0MzsJX191MzIJCWZsYWdzOwkJLyogSU46IEZTX1dSSVRFX1NUUkVBTV9PUEVOXyogKi8KJiM0Mzt9OwomIzQzOwomIzQzOy8qCiYjNDM7ICogRmxhZyB0byBhc2sgZm9yIHNwZWNpZmljIHN0cmVhbV9pZCwgb3RoZXJ3aXNlIGtlcm5lbCBjYW4gcmV0dXJuIGFueS4KJiM0MzsgKiBGYWlscyB3aXRoIC1FQlVTWSBpZiB0aGF0IHN0cmVhbV9pZCBpcyBhbHJlYWR5IGhlbGQKJiM0MzsgKi8KJiM0MzsjZGVmaW5lIEZTX1dSSVRFX1NUUkVBTV9PUEVOX0VYQUNUCSgxICZsdDsmbHQ7IDApCiYjNDM7CiYjNDM7I2RlZmluZSBGU19JT0NfV1JJVEVfU1RSRUFNX0dFVF9NQVgJX0lPUigmIzM5O2YmIzM5OywgMTM1LCBfX3UzMikKJiM0MzsjZGVmaW5lIEZTX0lPQ19XUklURV9TVFJFQU1fT1BFTglfSU9XUigmIzM5O2YmIzM5OywgMTM2LCBzdHJ1Y3QgZnNfd3JpdGVfc3RyZWFtX29wZW4pCiYjNDM7I2RlZmluZSBGU19JT0NfV1JJVEVfU1RSRUFNX1NFVAkJX0lPVygmIzM5O2YmIzM5OywgMTM3LCBfX3MzMikKJiM0MzsjZGVmaW5lIEZTX0lPQ19XUklURV9TVFJFQU1fR0VUCQlfSU9SKCYjMzk7ZiYjMzk7LCAxMzgsIF9fdTMyKQomIzQzOwogLyoKICAqIElub2RlIGZsYWdzIChGU19JT0NfR0VURkxBR1MgLyBGU19JT0NfU0VURkxBR1MpCiAgKgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNyAxNjowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MjY5CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNDkwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFdyaXRlIFN0cmVhbXMgUGF0Y2ggU2VyaWVzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHNlcmllcyBpbnRyb2R1Y2luZyAmIzM0O3dyaXRlIHN0cmVhbXMmIzM0OyBzdXBwb3J0IGZvciBYRlMgYW5kIGlvbWFwLiBJbW1lZGlhdGVseSwgSSBzZWUgaXQmIzM5O3MgYSBmdW5jdGlvbmFsIGFkZGl0aW9uLCBub3QganVzdCBhIGJ1ZyBmaXguIFRoYXQgbWVhbnMgSSBuZWVkIHRvIGJlIG1vcmUgdGhvcm91Z2ggaW4gbXkgYW5hbHlzaXMuIEl0JiMzOTtzIGFkZGluZyBuZXcgaW9jdGxzIOKAkyBgRlNfSU9DX1dSSVRFX1NUUkVBTV9HRVRfTUFYYCwgYEZTX0lPQ19XUklURV9TVFJFQU1fT1BFTmAsIGBGU19JT0NfV1JJVEVfU1RSRUFNX1NFVGAsIGFuZCBgRlNfSU9DX1dSSVRFX1NUUkVBTV9HRVRgIOKAkyB3aGljaCBpcyB0aGUgZmlyc3QgcmVkIGZsYWcuIE5ldyBpb2N0bHMgYWx3YXlzIHdhcnJhbnQgZXh0cmEgc2NydXRpbnksIGFzIHRoZXkgYXJlIGEgc2lnbmlmaWNhbnQgaW50ZXJmYWNlIGNoYW5nZSBhbmQgY2FuIGludHJvZHVjZSBzdWJ0bGUgaW50ZXJhY3Rpb25zIHdpdGggZXhpc3RpbmcgZnVuY3Rpb25hbGl0eS4KClRoZSBtb2RpZmljYXRpb25zIHRvIGBmcy94ZnMveGZzX2lvY3RsLmNgIGFuZCBgZnMveGZzL3hmc19pbm9kZS5jYCBhcmUgZXhwZWN0ZWQsIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIGNvcmUgaW9jdGwgaGFuZGxpbmcgYW5kIGlub2RlLWxldmVsIHN0cmVhbSBvcGVyYXRpb25zIHdvdWxkIHJlc2lkZS4gSSB3YW50IHRvIGRyaWxsIGludG8gdGhlIGB4ZnNfaW5vZGVfKmAgZnVuY3Rpb25zLiBJbXBsZW1lbnRpbmcgZnVuY3Rpb25zIHN1Y2ggYXMgYHhmc19pbm9kZV93cml0ZV9zdHJlYW1fb3BlbmAsIGB4ZnNfaW5vZGVfc2V0X3dyaXRlX3N0cmVhbWAsIGFuZCB0aGUgb3RoZXJzIGluZGljYXRlIHRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgbG9naWMgb2YgbWFuYWdpbmcgdGhlc2Ugc3RyZWFtcyB3aWxsIGJlLgoKVGhlIG1vZGlmaWNhdGlvbiB0byBgeGZzX2JtYXAuY2AgaXMgcGFydGljdWxhcmx5IGludGVyZXN0aW5nLiBUaGUgY29tbWVudCB0aGF0IHRoaXMgdXNlcyB0aGUgc3RyZWFtIElEIHRvICYjMzQ7ZmFuIG91dCBhbGxvY2F0aW9ucyBhY3Jvc3MgQUdzJiMzNDsgaXMgaW1wb3J0YW50LiBUaGlzIHN1Z2dlc3RzIGEgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGJlbmVmaXQgKGFuZCBwZXJoYXBzIGEga2V5IGRlc2lnbiBnb2FsIG9mIHRoZSBwYXRjaCksIGJ1dCBhbHNvIGFkZHMgY29tcGxleGl0eSB0byB0aGUgYmxvY2sgYWxsb2NhdGlvbiBsb2dpYy4gVGhpcyBpcyBkZWZpbml0ZWx5IHNvbWV3aGVyZSBJJiMzOTtsbCB3YW50IHRvIGZvY3VzIG9uIHdoZW4gSSYjMzk7bSBhc3Nlc3NpbmcgaXQuCgpUaGUgY2hhbmdlcyBpbiBgZnMvaW9tYXAvZGlyZWN0LWlvLmNgIGFuZCBgZnMvaW9tYXAvaW9lbmQuY2AgdGhhdCBub3cgcGFzcyB0aGUgd3JpdGUgc3RyZWFtIElEIHRvIHRoZSBiaW8gYXJlIGEgbmF0dXJhbCBjb25zZXF1ZW5jZSBvZiB0aGUgc3RyZWFtIGNvbmNlcHQuIFRoaXMgY2hhbmdlIGlzIGNydWNpYWwgdG8gZW5zdXJlIHRoYXQgdGhlIGlvbWFwIGxheWVyIHVuZGVyc3RhbmRzIHdoaWNoIHN0cmVhbSBpcyBhc3NvY2lhdGVkIHdpdGggZWFjaCBibG9jayBJL08gb3BlcmF0aW9uLgoKR2l2ZW4gdGhhdCB0aGlzIGludHJvZHVjZXMgbmV3IGlvY3RscyBhbmQgbW9kaWZpZXMgYmxvY2sgYWxsb2NhdGlvbiwgZnV6emluZyBpcyBhYnNvbHV0ZWx5IGVzc2VudGlhbC4gSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBrZXkgZnVuY3Rpb25zIHRvIHN1YmplY3QgdG8gZnV6emluZy4gTGV0JiMzOTtzIHNlZS4uLiBJJiMzOTtkIHN0YXJ0IHdpdGggdGhlc2UgaW9jdGwgaGFuZGxlcnM6IGB4ZnNfaW9jX3dyaXRlX3N0cmVhbV9vcGVuYCwgYHhmc19pb2Nfd3JpdGVfc3RyZWFtX3NldGAsIGB4ZnNfaW9jX3dyaXRlX3N0cmVhbV9nZXRgLCBgeGZzX2lvY193cml0ZV9zdHJlYW1fZ2V0X21heGAuIEkgYWxzbyBuZWVkIHRvIGZ1enogdGhlIGFzc29jaWF0ZWQgaW5vZGUgbWV0aG9kczogYHhmc19pbm9kZV93cml0ZV9zdHJlYW1fb3BlbmAsIGB4ZnNfaW5vZGVfc2V0X3dyaXRlX3N0cmVhbWAsIGB4ZnNfaW5vZGVfZ2V0X3dyaXRlX3N0cmVhbWAsIGFuZCBgeGZzX2lub2RlX21heF93cml0ZV9zdHJlYW1zYC4gSXQgbG9va3MgbGlrZSBgeGZzX3dyaXRlX3N0cmVhbV9yZWxlYXNlYCwgYHhmc19pbm9kZV93cml0ZV9zdHJlYW1fYWdfc2V0YCwgYW5kIGB4ZnNfYWdfdG9fYWdfc2V0YCBhcmUgYWxzbyBpbXBvcnRhbnQgdG8gdGVzdCwgaW4gY2FzZSB0aGV5IGFyZSB1c2VkIGluIHN0cmVhbSBtYW5hZ2VtZW50LgoKRmluYWxseSwgSSBuZWVkIHRvIHZlcmlmeSBkZXBlbmRlbmNpZXMuIFNpbmNlIHRoaXMgaXMgWEZTLXNwZWNpZmljLCBgWEZTX0ZTYCBpcyBhIGdpdmVuLiBCdXQgSSB3YW50IHRvIGNoZWNrIGZvciBhbnkgbW9yZSBzcGVjaWZpYyBjb25maWcgb3B0aW9ucy4gQSBxdWljayBncmVwIG9mIHRoZSBLY29uZmlnIGZpbGVzIGZvciAmIzM0O1dSSVRFX1NUUkVBTSYjMzQ7IHNob3VsZCBnaXZlIG1lIGEgcXVpY2sgYW5zd2VyLiBHb29kLCB0aGlzIGlzIGEgc29saWQgc3RhcnQuIE5vdywgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgY29kZS4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE3IDE2OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7V1JJVEVfU1RSRUFNJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMveGZzL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE3IDE2OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNTE2CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKktjb25maWcgRXhwbG9yYXRpb24gZm9yIFdSSVRFX1NUUkVBTSoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW50byB0aGlzIEtjb25maWcgbGFieXJpbnRoLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgd2l0aCBhIGJyb2FkIHN3ZWVwIOKAkyBhIGNsYXNzaWMgYGdyZXBgLiBJIHdhbnQgdG8gc2VlICpldmVyeXdoZXJlKiBgV1JJVEVfU1RSRUFNYCBpcyBtZW50aW9uZWQgYWNyb3NzIGFsbCB0aGUgS2NvbmZpZyBmaWxlcy4gVGhpcyB3aWxsIGJlIHRoZSBmb3VuZGF0aW9uYWwgc2Nhbi4gVGhlIGdvYWwgaXNuJiMzOTt0IG5lY2Vzc2FyaWx5IHRvIHNvbHZlIGFueXRoaW5nIGltbWVkaWF0ZWx5LCBidXQgdG8gZ2V0IGEgbGF5IG9mIHRoZSBsYW5kLCB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiB0aGUgdmFyaWFibGUmIzM5O3MgdXNhZ2UuIFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGEgcXVpY2sgYW5kIGRpcnR5IHNlYXJjaCBmb3Igb2NjdXJyZW5jZXMsIGRlcGVuZGVuY2llcywgYW5kIHBlcmhhcHMgc29tZSBpbml0aWFsIGNvbnRleHQsIEkgd2FudCB0byB1c2UgYGdyZXBgIGFzIGEgcHJpbWFyeSBpbnZlc3RpZ2F0aXZlIHRvb2wgZm9yIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTcgMTY6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7V1JJVEVfU1RSRUFNJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYXRhL2xpYmF0YS1laC5jPTI0ODc9Y29uc3QgY2hhciAqYXRhX2dldF9jbWRfbmFtZSh1OCBjb21tYW5kKVxuLS1cbmRyaXZlcnMvYXRhL2xpYmF0YS1laC5jLTI1MTUtXHRcdHsgQVRBX0NNRF9XUklURV9RVUVVRUQsXHRcdFwmIzM0O1dSSVRFIERNQSBRVUVVRUQgRVhUXCYjMzQ7IH0sXG5kcml2ZXJzL2F0YS9saWJhdGEtZWguYzoyNTE2Olx0XHR7IEFUQV9DTURfV1JJVEVfU1RSRUFNX0VYVCxcdFwmIzM0O1dSSVRFIFNUUkVBTSBFWFRcJiMzNDsgfSxcbmRyaXZlcnMvYXRhL2xpYmF0YS1laC5jOjI1MTc6XHRcdHsgQVRBX0NNRF9XUklURV9TVFJFQU1fRE1BX0VYVCwgXCYjMzQ7V1JJVEUgU1RSRUFNIERNQSBFWFRcJiMzNDsgfSxcbmRyaXZlcnMvYXRhL2xpYmF0YS1laC5jLTI1MTgtXHRcdHsgQVRBX0NNRF9XUklURV9GVUFfRVhULFx0XCYjMzQ7V1JJVEUgRE1BIEZVQSBFWFRcJiMzNDsgfSxcbi0tXG5kcml2ZXJzL2F0YS9saWJhdGEtc2NzaS5jPTMxNzI9c3RhdGljIHVuc2lnbmVkIGludCBhdGFfc2NzaV9wYXNzX3RocnUoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYylcbi0tXG5kcml2ZXJzL2F0YS9saWJhdGEtc2NzaS5jLTMzMzAtXHRjYXNlIEFUQV9DTURfUElPX1dSSVRFX0VYVDpcbmRyaXZlcnMvYXRhL2xpYmF0YS1zY3NpLmM6MzMzMTpcdGNhc2UgQVRBX0NNRF9XUklURV9TVFJFQU1fRE1BX0VYVDpcbmRyaXZlcnMvYXRhL2xpYmF0YS1zY3NpLmM6MzMzMjpcdGNhc2UgQVRBX0NNRF9XUklURV9TVFJFQU1fRVhUOlxuZHJpdmVycy9hdGEvbGliYXRhLXNjc2kuYy0zMzMzLVx0XHRxYy1cdTAwM2VzZWN0X3NpemUgPSBzY21kLVx1MDAzZWRldmljZS1cdTAwM2VzZWN0b3Jfc2l6ZTtcbi0tXG5kcml2ZXJzL3Njc2kvaGlzaV9zYXMvaGlzaV9zYXNfbWFpbi5jPTU0PXU4IGhpc2lfc2FzX2dldF9hdGFfcHJvdG9jb2woc3RydWN0IHNhc190YXNrICp0YXNrKVxuLS1cbmRyaXZlcnMvc2NzaS9oaXNpX3Nhcy9oaXNpX3Nhc19tYWluLmMtOTQtXHRjYXNlIEFUQV9DTURfV1JJVEVfTE9HX0RNQV9FWFQ6XG5kcml2ZXJzL3Njc2kvaGlzaV9zYXMvaGlzaV9zYXNfbWFpbi5jOjk1Olx0Y2FzZSBBVEFfQ01EX1dSSVRFX1NUUkVBTV9ETUFfRVhUOlxuZHJpdmVycy9zY3NpL2hpc2lfc2FzL2hpc2lfc2FzX21haW4uYy05Ni1cdGNhc2UgQVRBX0NNRF9aQUNfTUdNVF9JTjpcbi0tXG5mcy94ZnMveGZzX2lub2RlLmM9NTI9eGZzX2lub2RlX21heF93cml0ZV9zdHJlYW1zKFxuLS1cbmZzL3hmcy94ZnNfaW5vZGUuYy04Ni1cdG5yX3N0cmVhbXMgPSBucl9hZ3MgLyBhZ19zZXRfc2l6ZTtcbmZzL3hmcy94ZnNfaW5vZGUuYzo4NzpcdHJldHVybiBtaW5fdCh1aW50MTZfdCwgbnJfc3RyZWFtcywgWEZTX1NXX1dSSVRFX1NUUkVBTVNfTUFYKTtcbmZzL3hmcy94ZnNfaW5vZGUuYy04OC19XG4tLVxuZnMveGZzL3hmc19pbm9kZS5jPTEyOT14ZnNfaW5vZGVfd3JpdGVfc3RyZWFtX29wZW4oXG4tLVxuZnMveGZzL3hmc19pbm9kZS5jLTEzNy1cbmZzL3hmcy94ZnNfaW5vZGUuYzoxMzg6XHRpZiAoZmxhZ3MgXHUwMDI2IH5GU19XUklURV9TVFJFQU1fT1BFTl9FWEFDVClcbmZzL3hmcy94ZnNfaW5vZGUuYy0xMzktXHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbmZzL3hmcy94ZnNfaW5vZGUuYy0xNTAtXHRzcGluX2xvY2soXHUwMDI2bXAtXHUwMDNlbV9zdHJlYW1zX2xvY2spO1xuZnMveGZzL3hmc19pbm9kZS5jOjE1MTpcdGlmIChmbGFncyBcdTAwMjYgRlNfV1JJVEVfU1RSRUFNX09QRU5fRVhBQ1QpIHtcbmZzL3hmcy94ZnNfaW5vZGUuYy0xNTItXHRcdGlmICghKnN0cmVhbV9pZHAgfHwgKnN0cmVhbV9pZHAgXHUwMDNlIG1heCkge1xuLS1cbmZzL3hmcy94ZnNfaW9jdGwuYz0xMjc4PXhmc19maWxlX2lvY3RsKFxuLS1cbmZzL3hmcy94ZnNfaW9jdGwuYy0xNTI2LVx0XHRyZXR1cm4geGZzX2lvY192ZXJpZnlfbWVkaWEoZmlscCwgYXJnKTtcbmZzL3hmcy94ZnNfaW9jdGwuYzoxNTI3Olx0Y2FzZSBGU19JT0NfV1JJVEVfU1RSRUFNX09QRU46XG5mcy94ZnMveGZzX2lvY3RsLmMtMTUyOC1cdFx0cmV0dXJuIHhmc19pb2Nfd3JpdGVfc3RyZWFtX29wZW4oZmlscCwgKHZvaWQgX191c2VyICopYXJnKTtcbmZzL3hmcy94ZnNfaW9jdGwuYzoxNTI5Olx0Y2FzZSBGU19JT0NfV1JJVEVfU1RSRUFNX1NFVDpcbmZzL3hmcy94ZnNfaW9jdGwuYy0xNTMwLVx0XHRyZXR1cm4geGZzX2lvY193cml0ZV9zdHJlYW1fc2V0KGZpbHAsIHApO1xuZnMveGZzL3hmc19pb2N0bC5jOjE1MzE6XHRjYXNlIEZTX0lPQ19XUklURV9TVFJFQU1fR0VUOlxuZnMveGZzL3hmc19pb2N0bC5jLTE1MzItXHRcdHJldHVybiB4ZnNfaW9jX3dyaXRlX3N0cmVhbV9nZXQoWEZTX0koZmlsZV9pbm9kZShmaWxwKSksXG5mcy94ZnMveGZzX2lvY3RsLmMtMTUzMy1cdFx0XHRcdFx0XHQodm9pZCBfX3VzZXIgKilhcmcpO1xuZnMveGZzL3hmc19pb2N0bC5jOjE1MzQ6XHRjYXNlIEZTX0lPQ19XUklURV9TVFJFQU1fR0VUX01BWDpcbmZzL3hmcy94ZnNfaW9jdGwuYy0xNTM1LVx0XHRyZXR1cm4geGZzX2lvY193cml0ZV9zdHJlYW1fZ2V0X21heChYRlNfSShmaWxlX2lub2RlKGZpbHApKSxcbi0tXG5mcy94ZnMveGZzX21vdW50Lmg9Mzg9ZW51bSB7XG4tLVxuZnMveGZzL3hmc19tb3VudC5oLTQ3LVxuZnMveGZzL3hmc19tb3VudC5oOjQ4OiNkZWZpbmUgWEZTX1NXX1dSSVRFX1NUUkVBTVNfTUFYXHQxNlxuZnMveGZzL3hmc19tb3VudC5oLTQ5LVxuLS1cbmZzL3hmcy94ZnNfc3VwZXIuYz0xNjU2PXhmc19mc19maWxsX3N1cGVyKFxuLS1cbmZzL3hmcy94ZnNfc3VwZXIuYy0xNzE0LVx0aWYgKCFucl9zdHJlYW1zKVxuZnMveGZzL3hmc19zdXBlci5jOjE3MTU6XHRcdG5yX3N0cmVhbXMgPSBYRlNfU1dfV1JJVEVfU1RSRUFNU19NQVg7XG5mcy94ZnMveGZzX3N1cGVyLmMtMTcxNi1cdG1wLVx1MDAzZW1fc3RyZWFtc19pbl91c2UgPSBiaXRtYXBfemFsbG9jKG5yX3N0cmVhbXMsIEdGUF9LRVJORUwpO1xuLS1cbmluY2x1ZGUvbGludXgvYXRhLmg9MjQ9ZW51bSB7XG4tLVxuaW5jbHVkZS9saW51eC9hdGEuaC0yMjMtXHRBVEFfQ01EX1dSSVRFX1FVRVVFRFx0PSAweDM2LFxuaW5jbHVkZS9saW51eC9hdGEuaDoyMjQ6XHRBVEFfQ01EX1dSSVRFX1NUUkVBTV9FWFQgPSAweDNCLFxuaW5jbHVkZS9saW51eC9hdGEuaDoyMjU6XHRBVEFfQ01EX1dSSVRFX1NUUkVBTV9ETUFfRVhUID0gMHgzQSxcbmluY2x1ZGUvbGludXgvYXRhLmgtMjI2LVx0QVRBX0NNRF9XUklURV9GVUFfRVhUXHQ9IDB4M0QsXG4tLVxuaW5jbHVkZS90cmFjZS9ldmVudHMvbGliYXRhLmgtMzYtXHRcdCBhdGFfb3Bjb2RlX25hbWUoQVRBX0NNRF9XUklURV9RVUVVRUQpLFx0XHRcXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvbGliYXRhLmg6Mzc6XHRcdCBhdGFfb3Bjb2RlX25hbWUoQVRBX0NNRF9XUklURV9TVFJFQU1fRVhUKSxcdFxcXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9saWJhdGEuaDozODpcdFx0IGF0YV9vcGNvZGVfbmFtZShBVEFfQ01EX1dSSVRFX1NUUkVBTV9ETUFfRVhUKSwgXFxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL2xpYmF0YS5oLTM5LVx0XHQgYXRhX29wY29kZV9uYW1lKEFUQV9DTURfV1JJVEVfRlVBX0VYVCksXHRcXFxuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9mcy5oPTM0OD1zdHJ1Y3QgZnNfd3JpdGVfc3RyZWFtX29wZW4ge1xuaW5jbHVkZS91YXBpL2xpbnV4L2ZzLmgtMzQ5LVx0X191MzJcdFx0c3RyZWFtX2lkO1x0LyogSU46IHJlcXVlc3RlZCBpZCBpZiBPUEVOX0VYQUNUIHNldDsgT1VUOiBhc3NpZ25lZCBpZCAqL1xuaW5jbHVkZS91YXBpL2xpbnV4L2ZzLmg6MzUwOlx0X191MzJcdFx0ZmxhZ3M7XHRcdC8qIElOOiBGU19XUklURV9TVFJFQU1fT1BFTl8qICovXG5pbmNsdWRlL3VhcGkvbGludXgvZnMuaC0zNTEtfTtcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvZnMuaC0zNTYtICovXG5pbmNsdWRlL3VhcGkvbGludXgvZnMuaDozNTc6I2RlZmluZSBGU19XUklURV9TVFJFQU1fT1BFTl9FWEFDVFx0KDEgXHUwMDNjXHUwMDNjIDApXG5pbmNsdWRlL3VhcGkvbGludXgvZnMuaC0zNTgtXG5pbmNsdWRlL3VhcGkvbGludXgvZnMuaDozNTk6I2RlZmluZSBGU19JT0NfV1JJVEVfU1RSRUFNX0dFVF9NQVhcdF9JT1IoJiMzOTtmJiMzOTssIDEzNSwgX191MzIpXG5pbmNsdWRlL3VhcGkvbGludXgvZnMuaDozNjA6I2RlZmluZSBGU19JT0NfV1JJVEVfU1RSRUFNX09QRU5cdF9JT1dSKCYjMzk7ZiYjMzk7LCAxMzYsIHN0cnVjdCBmc193cml0ZV9zdHJlYW1fb3BlbilcbmluY2x1ZGUvdWFwaS9saW51eC9mcy5oOjM2MTojZGVmaW5lIEZTX0lPQ19XUklURV9TVFJFQU1fU0VUXHRcdF9JT1coJiMzOTtmJiMzOTssIDEzNywgX19zMzIpXG5pbmNsdWRlL3VhcGkvbGludXgvZnMuaDozNjI6I2RlZmluZSBGU19JT0NfV1JJVEVfU1RSRUFNX0dFVFx0XHRfSU9SKCYjMzk7ZiYjMzk7LCAxMzgsIF9fdTMyKVxuaW5jbHVkZS91YXBpL2xpbnV4L2ZzLmgtMzYzLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE3IDE2OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyODI4CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgV3JpdGUgU3RyZWFtIEZlYXR1cmUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgd3JpdGUgc3RyZWFtIGZlYXR1cmUgd2l0aGluIFhGUywgYW5kIGl0IHNlZW1zIHRoZXJlIGFyZW4mIzM5O3QgYW55ICpzcGVjaWZpYyogY29uZmlndXJhdGlvbiBvcHRpb25zIGRlZGljYXRlZCB0byBpdC4gSXQgYXBwZWFycyB0byBiZSBhbiBpbmhlcmVudCBwYXJ0IG9mIFhGUyBpdHNlbGYuIFRoZSBvbmx5IHJlbGV2YW50IGNvbmZpZyByZXF1aXJlZCBpcyB0aGUgY29yZSBgWEZTX0ZTYCBzZXR0aW5nLiBUaGF0JiMzOTtzIGdvb2QgdG8ga25vd+KAlGxlc3MgdG8gbWFuYWdlIGV4cGxpY2l0bHkuCgpOb3csIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCB0aGUgZm9jdXMgc3ltYm9scy4gSSYjMzk7dmUgZ290IGEgbGlzdCBoZXJlOiBgeGZzX2lvY193cml0ZV9zdHJlYW1fb3BlbmAsIGB4ZnNfaW9jX3dyaXRlX3N0cmVhbV9zZXRgLCBgeGZzX2lvY193cml0ZV9zdHJlYW1fZ2V0YCwgYHhmc19pb2Nfd3JpdGVfc3RyZWFtX2dldF9tYXhgLCBgeGZzX2lub2RlX3dyaXRlX3N0cmVhbV9vcGVuYCwgYHhmc19pbm9kZV9zZXRfd3JpdGVfc3RyZWFtYCwgYHhmc19pbm9kZV9nZXRfd3JpdGVfc3RyZWFtYCwgYHhmc19pbm9kZV9tYXhfd3JpdGVfc3RyZWFtc2AsIGB4ZnNfd3JpdGVfc3RyZWFtX3JlbGVhc2VgLCBgeGZzX2lub2RlX3dyaXRlX3N0cmVhbV9hZ19zZXRgLCBhbmQgYHhmc19hZ190b19hZ19zZXRgLiBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgdGhlc2Ugc3ltYm9scyBhcmUgYWN0dWFsbHkgZGVmaW5lZCB3aXRoaW4gdGhlIGNvbnRleHQgb2YgdGhlIFhGUyBjb2RlLiBUaGlzIGlzIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCB0byBlbnN1cmUgdGhhdCB0aGUgaW1wbGVtZW50YXRpb24gaXMgY29tcGxldGUgYW5kIHRoZSBmZWF0dXJlIGlzIHJlYWR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE3IDE2OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3hmc19pb2Nfd3JpdGVfc3RyZWFtX29wZW4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy94ZnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3hmcy94ZnNfaW9jdGwuYz0xMjA5PXN0YXRpYyBpbnRcbmZzL3hmcy94ZnNfaW9jdGwuYzoxMjEwOnhmc19pb2Nfd3JpdGVfc3RyZWFtX29wZW4oXG5mcy94ZnMveGZzX2lvY3RsLmMtMTIxMS1cdHN0cnVjdCBmaWxlXHRcdCpmaWxwLFxuLS1cbmZzL3hmcy94ZnNfaW9jdGwuYz0xMjc4PXhmc19maWxlX2lvY3RsKFxuLS1cbmZzL3hmcy94ZnNfaW9jdGwuYy0xNTI3LVx0Y2FzZSBGU19JT0NfV1JJVEVfU1RSRUFNX09QRU46XG5mcy94ZnMveGZzX2lvY3RsLmM6MTUyODpcdFx0cmV0dXJuIHhmc19pb2Nfd3JpdGVfc3RyZWFtX29wZW4oZmlscCwgKHZvaWQgX191c2VyICopYXJnKTtcbmZzL3hmcy94ZnNfaW9jdGwuYy0xNTI5LVx0Y2FzZSBGU19JT0NfV1JJVEVfU1RSRUFNX1NFVDpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNyAxNjowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzU3OQoJCQkJCQkJb3V0cHV0OiAyNTAKCQkJCQkJCXRob3VnaHRzOiAyNzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgRnV6emluZyBTdHJhdGVneTogV3JpdGUgU3RyZWFtcyBpbiBYRlMqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBhIGRlZmluaXRlIHllcyBmb3IgZnV6emluZy4gSXQmIzM5O3MgbWFraW5nIGZ1bmN0aW9uYWwgY2hhbmdlcywgc3BlY2lmaWNhbGx5IHRvIFhGUyYjMzk7cyBibG9jayBhbGxvY2F0aW9uIGFuZCBpbnRyb2R1Y2luZyB0aGVzZSBicmFuZCBuZXcgaW9jdGxzLiBUaGF0JiMzOTtzIGEgdGV4dGJvb2sgZGVmaW5pdGlvbiBvZiBhIHBvdGVudGlhbCBhdHRhY2sgc3VyZmFjZS4gV2UgbmVlZCB0byBnZXQgYSBmdXp6aW5nIGNhbXBhaWduIHNldCB1cCBmb3IgdGhpcyBpbW1lZGlhdGVseS4KClRoZSBoZWFydCBvZiBpdCBsaWVzIGluIHRoZSB3cml0ZSBzdHJlYW1zIHN1cHBvcnQgdGhleSYjMzk7cmUgYWRkaW5nIHRvIFhGUyBhbmQgaW9tYXAuIFRoaXMgaW5jbHVkZXMgdGhvc2UgbmV3IGlvY3Rscywgd2hpY2ggaW1tZWRpYXRlbHkgZmxhZ3MgaXQgYXMgc29tZXRoaW5nIG5ldyB0aGF0IG5lZWRzIHNjcnV0aW55LiBUaGUgYmxvY2sgYWxsb2NhdGlvbiBjaGFuZ2VzLCB3aGVyZSBpdCYjMzk7cyBmYW5uaW5nIG91dCBiYXNlZCBvbiB0aGUgc3RyZWFtIElELCB0aGF04oCZcyBhbm90aGVyIGNyaXRpY2FsIGFyZWEuIEFueSBtb2RpZmljYXRpb24gdG8gdGhlIGNvcmUgbG9naWMsIGVzcGVjaWFsbHkgYXJvdW5kIGFsbG9jYXRpb24sIGlzIGEgcmVkIGZsYWcuIFdlIG5lZWQgdG8gcG9rZSBhbmQgcHJvZCB0aGF0IG5ldyBhbGxvY2F0aW9uIGJlaGF2aW9yIHRob3JvdWdobHkuCgpUaGUgZm9jdXMgc2hvdWxkIGJlIG9uIHRoZXNlIHN5bWJvbHM6CgoqICAgYHhmc19pb2Nfd3JpdGVfc3RyZWFtX29wZW5gLCBgeGZzX2lvY193cml0ZV9zdHJlYW1fc2V0YCwgYHhmc19pb2Nfd3JpdGVfc3RyZWFtX2dldGAsIGB4ZnNfaW9jX3dyaXRlX3N0cmVhbV9nZXRfbWF4YCwgYHhmc19pbm9kZV93cml0ZV9zdHJlYW1fb3BlbmAsIGB4ZnNfaW5vZGVfc2V0X3dyaXRlX3N0cmVhbWAsIGB4ZnNfaW5vZGVfZ2V0X3dyaXRlX3N0cmVhbWAsIGB4ZnNfaW5vZGVfbWF4X3dyaXRlX3N0cmVhbXNgLCBgeGZzX3dyaXRlX3N0cmVhbV9yZWxlYXNlYCwgYHhmc19pbm9kZV93cml0ZV9zdHJlYW1fYWdfc2V0YCwgYHhmc19hZ190b19hZ19zZXRgLgoKVGhlc2Ugc2VlbSB0byBiZSB0aGUgY29yZSBmdW5jdGlvbnMgZm9yIG1hbmFnaW5nIHRoZSBzdHJlYW1zLCBzZXR0aW5nIHRoZW0gdXAsIHJldHJpZXZpbmcsIGV0YywgYW5kIHRoZSBhbGxvY2F0aW9uIGl0c2VsZi4gVGhlc2UgYXJlIGdvaW5nIHRvIGJlIHRoZSBwcmltZSB0YXJnZXRzIGZvciBmdXp6aW5nLgoKV2UgbmVlZCB0byBtYWtlIHN1cmUgdGhlIGZ1enplciBpcyBjb25maWd1cmVkIHdpdGggYFhGU19GU2AgZW5hYmxlZCwgb2J2aW91c2x5LiBUaGlzIGlzIGFsbCBhYm91dCB0ZXN0aW5nIHRoYXQgd3JpdGUgc3RyZWFtcyBmdW5jdGlvbmFsaXR5LiBMZXQmIzM5O3Mgc2VlIGlmIHdlIGNhbiBmaW5kIHNvbWUgZ29vZCBlZGdlIGNhc2VzIGluIHRoaXMgbmV3IGxvZ2ljLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNyAxNjowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7WEZTX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7eGZzX2lvY193cml0ZV9zdHJlYW1fb3BlbiYjMzQ7LAogICAgJiMzNDt4ZnNfaW9jX3dyaXRlX3N0cmVhbV9zZXQmIzM0OywKICAgICYjMzQ7eGZzX2lvY193cml0ZV9zdHJlYW1fZ2V0JiMzNDssCiAgICAmIzM0O3hmc19pb2Nfd3JpdGVfc3RyZWFtX2dldF9tYXgmIzM0OywKICAgICYjMzQ7eGZzX2lub2RlX3dyaXRlX3N0cmVhbV9vcGVuJiMzNDssCiAgICAmIzM0O3hmc19pbm9kZV9zZXRfd3JpdGVfc3RyZWFtJiMzNDssCiAgICAmIzM0O3hmc19pbm9kZV9nZXRfd3JpdGVfc3RyZWFtJiMzNDssCiAgICAmIzM0O3hmc19pbm9kZV9tYXhfd3JpdGVfc3RyZWFtcyYjMzQ7LAogICAgJiMzNDt4ZnNfd3JpdGVfc3RyZWFtX3JlbGVhc2UmIzM0OywKICAgICYjMzQ7eGZzX2lub2RlX3dyaXRlX3N0cmVhbV9hZ19zZXQmIzM0OywKICAgICYjMzQ7eGZzX2FnX3RvX2FnX3NldCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIHdyaXRlIHN0cmVhbXMgc3VwcG9ydCB0byBYRlMgYW5kIGlvbWFwLCBpbmNsdWRpbmcgbmV3IGlvY3RscyBmb3IgbWFuYWdpbmcgd3JpdGUgc3RyZWFtcyBhbmQgbW9kaWZpY2F0aW9ucyB0byBibG9jayBhbGxvY2F0aW9uIGxvZ2ljIHRvIGZhbiBvdXQgYWxsb2NhdGlvbnMgYWNyb3NzIEFHcyBiYXNlZCBvbiB0aGUgc3RyZWFtIElELiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBtb2RpZmllcyBjb3JlIGZpbGVzeXN0ZW0gbG9naWMgYW5kIGludHJvZHVjZXMgbmV3IHVzZXItZmFjaW5nIEFQSXMsIG1ha2luZyBpdCBhIHByaW1lIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7WEZTX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7eGZzX2lvY193cml0ZV9zdHJlYW1fb3BlbiYjMzQ7LAogICAgJiMzNDt4ZnNfaW9jX3dyaXRlX3N0cmVhbV9zZXQmIzM0OywKICAgICYjMzQ7eGZzX2lvY193cml0ZV9zdHJlYW1fZ2V0JiMzNDssCiAgICAmIzM0O3hmc19pb2Nfd3JpdGVfc3RyZWFtX2dldF9tYXgmIzM0OywKICAgICYjMzQ7eGZzX2lub2RlX3dyaXRlX3N0cmVhbV9vcGVuJiMzNDssCiAgICAmIzM0O3hmc19pbm9kZV9zZXRfd3JpdGVfc3RyZWFtJiMzNDssCiAgICAmIzM0O3hmc19pbm9kZV9nZXRfd3JpdGVfc3RyZWFtJiMzNDssCiAgICAmIzM0O3hmc19pbm9kZV9tYXhfd3JpdGVfc3RyZWFtcyYjMzQ7LAogICAgJiMzNDt4ZnNfd3JpdGVfc3RyZWFtX3JlbGVhc2UmIzM0OywKICAgICYjMzQ7eGZzX2lub2RlX3dyaXRlX3N0cmVhbV9hZ19zZXQmIzM0OywKICAgICYjMzQ7eGZzX2FnX3RvX2FnX3NldCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIHdyaXRlIHN0cmVhbXMgc3VwcG9ydCB0byBYRlMgYW5kIGlvbWFwLCBpbmNsdWRpbmcgbmV3IGlvY3RscyBmb3IgbWFuYWdpbmcgd3JpdGUgc3RyZWFtcyBhbmQgbW9kaWZpY2F0aW9ucyB0byBibG9jayBhbGxvY2F0aW9uIGxvZ2ljIHRvIGZhbiBvdXQgYWxsb2NhdGlvbnMgYWNyb3NzIEFHcyBiYXNlZCBvbiB0aGUgc3RyZWFtIElELiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBtb2RpZmllcyBjb3JlIGZpbGVzeXN0ZW0gbG9naWMgYW5kIGludHJvZHVjZXMgbmV3IHVzZXItZmFjaW5nIEFQSXMsIG1ha2luZyBpdCBhIHByaW1lIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE3VDE2OjA2OjA0LjIxNzc1ODEyOVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMyNjg2MDQ4NjM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlhGU19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInhmc19pb2Nfd3JpdGVfc3RyZWFtX29wZW5cIixcbiAgICBcInhmc19pb2Nfd3JpdGVfc3RyZWFtX3NldFwiLFxuICAgIFwieGZzX2lvY193cml0ZV9zdHJlYW1fZ2V0XCIsXG4gICAgXCJ4ZnNfaW9jX3dyaXRlX3N0cmVhbV9nZXRfbWF4XCIsXG4gICAgXCJ4ZnNfaW5vZGVfd3JpdGVfc3RyZWFtX29wZW5cIixcbiAgICBcInhmc19pbm9kZV9zZXRfd3JpdGVfc3RyZWFtXCIsXG4gICAgXCJ4ZnNfaW5vZGVfZ2V0X3dyaXRlX3N0cmVhbVwiLFxuICAgIFwieGZzX2lub2RlX21heF93cml0ZV9zdHJlYW1zXCIsXG4gICAgXCJ4ZnNfd3JpdGVfc3RyZWFtX3JlbGVhc2VcIixcbiAgICBcInhmc19pbm9kZV93cml0ZV9zdHJlYW1fYWdfc2V0XCIsXG4gICAgXCJ4ZnNfYWdfdG9fYWdfc2V0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyB3cml0ZSBzdHJlYW1zIHN1cHBvcnQgdG8gWEZTIGFuZCBpb21hcCwgaW5jbHVkaW5nIG5ldyBpb2N0bHMgZm9yIG1hbmFnaW5nIHdyaXRlIHN0cmVhbXMgYW5kIG1vZGlmaWNhdGlvbnMgdG8gYmxvY2sgYWxsb2NhdGlvbiBsb2dpYyB0byBmYW4gb3V0IGFsbG9jYXRpb25zIGFjcm9zcyBBR3MgYmFzZWQgb24gdGhlIHN0cmVhbSBJRC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgbW9kaWZpZXMgY29yZSBmaWxlc3lzdGVtIGxvZ2ljIGFuZCBpbnRyb2R1Y2VzIG5ldyB1c2VyLWZhY2luZyBBUElzLCBtYWtpbmcgaXQgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE3VDE2OjA2OjA0LjIxNzc2NzM3OVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTcxMjE0NDgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgM2YxOWY5Y2QxYTRlNTQ0N2VhZDFlY2Q3ODMzNWY3MGJiMzNhMzNhNFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIEp1bCAxNyAxNjowNjowMiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9mcy9pb21hcC9kaXJlY3QtaW8uYyBiL2ZzL2lvbWFwL2RpcmVjdC1pby5jXFxuaW5kZXggZTJjZDVmOTJiYWJlZGIuLmI3NzcxYTI1YzFjNzlmIDEwMDY0NFxcbi0tLSBhL2ZzL2lvbWFwL2RpcmVjdC1pby5jXFxuKysrIGIvZnMvaW9tYXAvZGlyZWN0LWlvLmNcXG5AQCAtMzQ4LDYgKzM0OCw3IEBAIHN0YXRpYyBzc2l6ZV90IGlvbWFwX2Rpb19iaW9faXRlcl9vbmUoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsXFxuIFxcdGZzY3J5cHRfc2V0X2Jpb19jcnlwdF9jdHgoYmlvLCBpdGVyLVxcdTAwM2Vpbm9kZSwgcG9zLCBHRlBfS0VSTkVMKTtcXG4gXFx0YmlvLVxcdTAwM2ViaV9pdGVyLmJpX3NlY3RvciA9IGlvbWFwX3NlY3RvcihcXHUwMDI2aXRlci1cXHUwMDNlaW9tYXAsIHBvcyk7XFxuIFxcdGJpby1cXHUwMDNlYmlfd3JpdGVfaGludCA9IGl0ZXItXFx1MDAzZWlub2RlLVxcdTAwM2VpX3dyaXRlX2hpbnQ7XFxuK1xcdGJpby1cXHUwMDNlYmlfd3JpdGVfc3RyZWFtID0gaXRlci1cXHUwMDNlaW9tYXAud3JpdGVfc3RyZWFtO1xcbiBcXHRiaW8tXFx1MDAzZWJpX2lvcHJpbyA9IGRpby1cXHUwMDNlaW9jYi1cXHUwMDNla2lfaW9wcmlvO1xcbiBcXHRiaW8tXFx1MDAzZWJpX3ByaXZhdGUgPSBkaW87XFxuIFxcdGJpby1cXHUwMDNlYmlfZW5kX2lvID0gaW9tYXBfZGlvX2Jpb19lbmRfaW87XFxuZGlmZiAtLWdpdCBhL2ZzL2lvbWFwL2lvZW5kLmMgYi9mcy9pb21hcC9pb2VuZC5jXFxuaW5kZXggMDU2NTMyODc2NGMxNzUuLjVlYTJjNjg5OTNjZjkzIDEwMDY0NFxcbi0tLSBhL2ZzL2lvbWFwL2lvZW5kLmNcXG4rKysgYi9mcy9pb21hcC9pb2VuZC5jXFxuQEAgLTE2NSw2ICsxNjUsNyBAQCBzdGF0aWMgc3RydWN0IGlvbWFwX2lvZW5kICppb21hcF9hbGxvY19pb2VuZChzdHJ1Y3QgaW9tYXBfd3JpdGVwYWdlX2N0eCAqd3BjLFxcbiBcXHRcXHRcXHQgICAgICAgR0ZQX05PRlMsIFxcdTAwMjZpb21hcF9pb2VuZF9iaW9zZXQpO1xcbiBcXHRiaW8tXFx1MDAzZWJpX2l0ZXIuYmlfc2VjdG9yID0gaW9tYXBfc2VjdG9yKFxcdTAwMjZ3cGMtXFx1MDAzZWlvbWFwLCBwb3MpO1xcbiBcXHRiaW8tXFx1MDAzZWJpX3dyaXRlX2hpbnQgPSB3cGMtXFx1MDAzZWlub2RlLVxcdTAwM2VpX3dyaXRlX2hpbnQ7XFxuK1xcdGJpby1cXHUwMDNlYmlfd3JpdGVfc3RyZWFtID0gd3BjLVxcdTAwM2Vpb21hcC53cml0ZV9zdHJlYW07XFxuIFxcdHdiY19pbml0X2Jpbyh3cGMtXFx1MDAzZXdiYywgYmlvKTtcXG4gXFx0d3BjLVxcdTAwM2Vucl9mb2xpb3MgPSAwO1xcbiBcXHRyZXR1cm4gaW9tYXBfaW5pdF9pb2VuZCh3cGMtXFx1MDAzZWlub2RlLCBiaW8sIHBvcywgaW9lbmRfZmxhZ3MpO1xcbkBAIC0xODgsNiArMTg5LDggQEAgc3RhdGljIGJvb2wgaW9tYXBfY2FuX2FkZF90b19pb2VuZChzdHJ1Y3QgaW9tYXBfd3JpdGVwYWdlX2N0eCAqd3BjLCBsb2ZmX3QgcG9zLFxcbiBcXHRpZiAoISh3cGMtXFx1MDAzZWlvbWFwLmZsYWdzIFxcdTAwMjYgSU9NQVBfRl9BTk9OX1dSSVRFKSBcXHUwMDI2XFx1MDAyNlxcbiBcXHQgICAgaW9tYXBfc2VjdG9yKFxcdTAwMjZ3cGMtXFx1MDAzZWlvbWFwLCBwb3MpICE9IGJpb19lbmRfc2VjdG9yKFxcdTAwMjZpb2VuZC1cXHUwMDNlaW9fYmlvKSlcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHRpZiAod3BjLVxcdTAwM2Vpb21hcC53cml0ZV9zdHJlYW0gIT0gaW9lbmQtXFx1MDAzZWlvX2Jpby5iaV93cml0ZV9zdHJlYW0pXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4gXFx0LypcXG4gXFx0ICogTGltaXQgaW9lbmQgYmlvIGNoYWluIGxlbmd0aHMgdG8gbWluaW1pc2UgSU8gY29tcGxldGlvbiBsYXRlbmN5LiBUaGlzXFxuIFxcdCAqIGFsc28gcHJldmVudHMgbG9uZyB0aWdodCBsb29wcyBlbmRpbmcgcGFnZSB3cml0ZWJhY2sgb24gYWxsIHRoZVxcbmRpZmYgLS1naXQgYS9mcy94ZnMvbGlieGZzL3hmc19ibWFwLmMgYi9mcy94ZnMvbGlieGZzL3hmc19ibWFwLmNcXG5pbmRleCBkNjRkZWZlZGE2NDVlZC4uODcyYTRhYmQyMzE1N2MgMTAwNjQ0XFxuLS0tIGEvZnMveGZzL2xpYnhmcy94ZnNfYm1hcC5jXFxuKysrIGIvZnMveGZzL2xpYnhmcy94ZnNfYm1hcC5jXFxuQEAgLTMxOTIsNiArMzE5Miw3MiBAQCB4ZnNfYm1hcF9zZWxlY3RfbWlubGVuKFxcbiBcXHRyZXR1cm4gYXJncy1cXHUwMDNlbWF4bGVuO1xcbiB9XFxuIFxcbisjZGVmaW5lXFx0R0VORVJJQ19BR19TRVRfU1pcXHQoMilcXG4rXFxuK3N0YXRpYyBpbmxpbmUgeGZzX2FnbnVtYmVyX3RcXG4reGZzX2RlZmF1bHRfYWdfc2V0X3NpemUoXFxuK1xcdHN0cnVjdCB4ZnNfaW5vZGVcXHQqaXApXFxuK3tcXG4rXFx0c3RydWN0IHhmc19tb3VudFxcdCptcCA9IGlwLVxcdTAwM2VpX21vdW50O1xcbitcXG4rXFx0cmV0dXJuIG1pbl90KHhmc19hZ251bWJlcl90LCBHRU5FUklDX0FHX1NFVF9TWiwgbXAtXFx1MDAzZW1fc2Iuc2JfYWdjb3VudCk7XFxuK31cXG4rXFxuK3N0YXRpYyB4ZnNfYWdudW1iZXJfdFxcbit4ZnNfaW5vZGVfd3JpdGVfc3RyZWFtX2FnX3NldChcXG4rXFx0c3RydWN0IHhmc19pbm9kZVxcdCppcCxcXG4rXFx0eGZzX2FnbnVtYmVyX3RcXHRcXHQqdGFyZ2V0X2Fnbm8pXFxuK3tcXG4rXFx0c3RydWN0IHhmc19tb3VudFxcdCptcCA9IGlwLVxcdTAwM2VpX21vdW50O1xcbitcXHR1aW50MzJfdFxcdFxcdG5yX3N0cmVhbXMgPSB4ZnNfaW5vZGVfbWF4X3dyaXRlX3N0cmVhbXMoaXApO1xcbitcXHR1aW50MzJfdFxcdFxcdHN0cmVhbV9pZCA9IGlwLVxcdTAwM2VpX3dyaXRlX3N0cmVhbTtcXG4rXFx0dWludDMyX3RcXHRcXHRucl9hZ3MgPSBtcC1cXHUwMDNlbV9zYi5zYl9hZ2NvdW50O1xcbitcXHR4ZnNfYWdudW1iZXJfdFxcdFxcdHNldF9zaXplO1xcbitcXG4rXFxuK1xcdGlmICghbnJfc3RyZWFtcylcXG4rXFx0XFx0cmV0dXJuIHhmc19kZWZhdWx0X2FnX3NldF9zaXplKGlwKTtcXG4rXFxuK1xcdHN0cmVhbV9pZCAtPSAxOyAvKiBGb3IgMC1iYXNlZCBtYXRoOyBzdHJlYW0taWRzIGFyZSAxLWJhc2VkICovXFxuK1xcdHNldF9zaXplID0gbnJfYWdzIC8gbnJfc3RyZWFtcztcXG4rXFxuK1xcdGlmIChzZXRfc2l6ZSkge1xcbitcXHRcXHQqdGFyZ2V0X2Fnbm8gPSBzdHJlYW1faWQgKiBzZXRfc2l6ZTtcXG4rXFx0XFx0LyogdW5ldmVuIGRpc3RyaWJ1dGlvbiwgbGFzdCBzdHJlYW0gd2lsbCBjb3ZlciBleHRyYSBBR3MgKi9cXG4rXFx0XFx0aWYgKHN0cmVhbV9pZCA9PSBucl9zdHJlYW1zIC0gMSlcXG4rXFx0XFx0XFx0c2V0X3NpemUgPSBucl9hZ3MgLSAqdGFyZ2V0X2Fnbm87XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdC8qIGZvciB0aGUgY2FzZSB3aGVuIHdlIGhhdmUgZmV3ZXIgQUdzIHRoYW4gc3RyZWFtcyAqL1xcbitcXHRcXHQqdGFyZ2V0X2Fnbm8gPSBzdHJlYW1faWQgJSBucl9hZ3M7XFxuK1xcdFxcdHNldF9zaXplID0gMTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIHNldF9zaXplO1xcbit9XFxuK1xcbitzdGF0aWMgeGZzX2FnbnVtYmVyX3RcXG4reGZzX2FnX3RvX2FnX3NldChcXG4rXFx0c3RydWN0IHhmc19ibWFsbG9jYVxcdCphcCxcXG4rXFx0eGZzX2FnbnVtYmVyX3RcXHRcXHRiYXNlX2Fnbm8pXFxuK3tcXG4rXFx0c3RydWN0IHhmc19pbm9kZVxcdCppcCA9IGFwLVxcdTAwM2VpcDtcXG4rXFx0c3RydWN0IHhmc19tb3VudFxcdCptcCA9IGlwLVxcdTAwM2VpX21vdW50O1xcbitcXHR4ZnNfYWdudW1iZXJfdFxcdFxcdHNldF9zaXplO1xcbitcXG4rXFx0LyogQXBwbHkgZmFubmluZyBvbmx5IGZvciByZWd1bGFyIGZpbGUgZGF0YSAqL1xcbitcXHRpZiAoIShhcC1cXHUwMDNlZGF0YXR5cGUgXFx1MDAyNiBYRlNfQUxMT0NfVVNFUkRBVEEpKVxcbitcXHRcXHRyZXR1cm4gYmFzZV9hZ25vO1xcbitcXG4rXFx0aWYgKGlwLVxcdTAwM2VpX3dyaXRlX3N0cmVhbSlcXG4rXFx0XFx0c2V0X3NpemUgPSB4ZnNfaW5vZGVfd3JpdGVfc3RyZWFtX2FnX3NldChpcCwgXFx1MDAyNmJhc2VfYWdubyk7XFxuK1xcdGVsc2VcXG4rXFx0XFx0c2V0X3NpemUgPSB4ZnNfZGVmYXVsdF9hZ19zZXRfc2l6ZShpcCk7XFxuK1xcbitcXHQvKiBGYW4gb3V0IHdpdGhpbiB0aGUgQUcgc2V0IHVzaW5nIGxvdyBiaXRzIG9mIHRoZSBpbm9kZSAqL1xcbitcXHRyZXR1cm4gKGJhc2VfYWdubyArIChYRlNfSU5PX1RPX0FHSU5PKG1wLCBJX0lOTyhpcCkpICUgc2V0X3NpemUpKSAlXFxuK1xcdFxcdG1wLVxcdTAwM2VtX3NiLnNiX2FnY291bnQ7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnRcXG4geGZzX2JtYXBfYnRhbGxvY19zZWxlY3RfbGVuZ3RocyhcXG4gXFx0c3RydWN0IHhmc19ibWFsbG9jYVxcdCphcCxcXG5AQCAtMzU4Nyw4ICszNjUzLDE2IEBAIHhmc19ibWFwX2J0YWxsb2NfYmVzdF9sZW5ndGgoXFxuIHtcXG4gXFx0eGZzX2V4dGxlbl90XFx0XFx0YmxlbiA9IDA7XFxuIFxcdGludFxcdFxcdFxcdGVycm9yO1xcbitcXHR4ZnNfYWdudW1iZXJfdFxcdFxcdHRhcmdldF9hZywgc3RhcnRfYWc7XFxuIFxcbiBcXHRhcC1cXHUwMDNlYmxrbm8gPSBYRlNfSU5PREVfVE9fRlNCKGFwLVxcdTAwM2VpcCk7XFxuK1xcbitcXHQvKiBmYW4gb3V0IGluaXRpYWwgQUcgYWNyb3NzIHRoZSBnZW5lcmljIEFHIHNldCAqL1xcbitcXHRzdGFydF9hZyA9IFhGU19GU0JfVE9fQUdOTyhhcmdzLVxcdTAwM2VtcCwgYXAtXFx1MDAzZWJsa25vKTtcXG4rXFx0dGFyZ2V0X2FnID0geGZzX2FnX3RvX2FnX3NldChhcCwgc3RhcnRfYWcpO1xcbitcXHRpZiAodGFyZ2V0X2FnICE9IHN0YXJ0X2FnKVxcbitcXHRcXHRhcC1cXHUwMDNlYmxrbm8gPSBYRlNfQUdCX1RPX0ZTQihhcmdzLVxcdTAwM2VtcCwgdGFyZ2V0X2FnLCAwKTtcXG4rXFxuIFxcdGlmICgheGZzX2JtYXBfYWRqYWNlbnQoYXApKVxcbiBcXHRcXHRhcC1cXHUwMDNlZW9mID0gZmFsc2U7XFxuIFxcbmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2ljYWNoZS5jIGIvZnMveGZzL3hmc19pY2FjaGUuY1xcbmluZGV4IDlkOGRkMzBiZDkyN2EyLi43YjlkZGE3NDEyMmYwZSAxMDA2NDRcXG4tLS0gYS9mcy94ZnMveGZzX2ljYWNoZS5jXFxuKysrIGIvZnMveGZzL3hmc19pY2FjaGUuY1xcbkBAIC0xMjksNiArMTI5LDcgQEAgeGZzX2lub2RlX2FsbG9jKFxcbiBcXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2aXAtXFx1MDAzZWlfaW9lbmRfbG9jayk7XFxuIFxcdGlwLVxcdTAwM2VpX25leHRfdW5saW5rZWQgPSBOVUxMQUdJTk87XFxuIFxcdGlwLVxcdTAwM2VpX3ByZXZfdW5saW5rZWQgPSAwO1xcbitcXHRpcC1cXHUwMDNlaV93cml0ZV9zdHJlYW0gPSAwO1xcbiBcXG4gXFx0cmV0dXJuIGlwO1xcbiB9XFxuZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfaW5vZGUuYyBiL2ZzL3hmcy94ZnNfaW5vZGUuY1xcbmluZGV4IDE1Mjc5ZDIyYTg5NGZhLi42MzhiZWUzZTRhYzIyOCAxMDA2NDRcXG4tLS0gYS9mcy94ZnMveGZzX2lub2RlLmNcXG4rKysgYi9mcy94ZnMveGZzX2lub2RlLmNcXG5AQCAtNCw2ICs0LDcgQEBcXG4gICogQWxsIFJpZ2h0cyBSZXNlcnZlZC5cXG4gICovXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9pdmVyc2lvbi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvYW5vbl9pbm9kZXMuaFxcdTAwM2VcXG4gXFxuICNpbmNsdWRlIFxcXCJ4ZnNfcGxhdGZvcm0uaFxcXCJcXG4gI2luY2x1ZGUgXFxcInhmc19mcy5oXFxcIlxcbkBAIC00Nyw2ICs0OCwxODAgQEBcXG4gXFxuIHN0cnVjdCBrbWVtX2NhY2hlICp4ZnNfaW5vZGVfY2FjaGU7XFxuIFxcbitpbnRcXG4reGZzX2lub2RlX21heF93cml0ZV9zdHJlYW1zKFxcbitcXHRzdHJ1Y3QgeGZzX2lub2RlXFx0KmlwKVxcbit7XFxuK1xcdHN0cnVjdCBibG9ja19kZXZpY2VcXHQqYmRldjtcXG4rXFx0c3RydWN0IHhmc19tb3VudFxcdCptcCA9IGlwLVxcdTAwM2VpX21vdW50O1xcbitcXHRpbnQgbnJfc3RyZWFtcztcXG4rXFx0eGZzX2FnbnVtYmVyX3QgbnJfYWdzLCBhZ19zZXRfc2l6ZTtcXG4rXFx0Ym9vbFxcdFxcdFxcdGlzX2ZpbGVzdHJlYW0sIGlzX3JlYWx0aW1lO1xcbitcXG4rXFx0eGZzX2lsb2NrKGlwLCBYRlNfSUxPQ0tfU0hBUkVEKTtcXG4rXFx0aXNfZmlsZXN0cmVhbSA9IHhmc19pbm9kZV9pc19maWxlc3RyZWFtKGlwKTtcXG4rXFx0aXNfcmVhbHRpbWUgPSBYRlNfSVNfUkVBTFRJTUVfSU5PREUoaXApO1xcbitcXHRiZGV2ID0geGZzX2lub2RlX2J1ZnRhcmcoaXApLVxcdTAwM2VidF9iZGV2O1xcbitcXHR4ZnNfaXVubG9jayhpcCwgWEZTX0lMT0NLX1NIQVJFRCk7XFxuK1xcbitcXHRpZiAoIWJkZXYgfHwgaXNfZmlsZXN0cmVhbSB8fCBpc19yZWFsdGltZSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRucl9zdHJlYW1zID0gYmRldl9tYXhfd3JpdGVfc3RyZWFtcyhiZGV2KTtcXG4rXFx0aWYgKG5yX3N0cmVhbXMgXFx1MDAzZSAwKVxcbitcXHRcXHRyZXR1cm4gbnJfc3RyZWFtcztcXG4rXFx0LypcXG4rXFx0ICogRW5hYmxlIHNvZnR3YXJlLW9ubHkgc3RyZWFtcyBpZiBoYXJkd2FyZSBzdHJlYW1zIGFyZSBub3QgYXZhaWxhYmxlLlxcbitcXHQgKiBUaGlzIGhlbHBzIHRvXFxuK1xcdCAqIC0gaW1wcm92ZSBpc29sYXRpb247IHJlZHVjZSBhbGxvY2F0aW9uIGludGVybGVhdmluZy5cXG4rXFx0ICogLSBpbXByb3ZlIGNvbmN1cnJlbmN5IHVzaW5nIEFHLXNldCBiYXNlZCBzdGVlcmluZyB3aXRoaW4gYW5kIGFjcm9zcyBzdHJlYW1zLlxcbitcXHQgKi9cXG4rXFx0bnJfYWdzID0gbXAtXFx1MDAzZW1fc2Iuc2JfYWdjb3VudDtcXG4rXFx0aWYgKG5yX2FncyBcXHUwMDNlPSAxNilcXG4rXFx0XFx0YWdfc2V0X3NpemUgPSA0O1xcbitcXHRlbHNlIGlmIChucl9hZ3MgXFx1MDAzZT0gOClcXG4rXFx0XFx0YWdfc2V0X3NpemUgPSAyO1xcbitcXHRlbHNlXFxuK1xcdFxcdGFnX3NldF9zaXplID0gMTtcXG4rXFx0bnJfc3RyZWFtcyA9IG5yX2FncyAvIGFnX3NldF9zaXplO1xcbitcXHRyZXR1cm4gbWluX3QodWludDE2X3QsIG5yX3N0cmVhbXMsIFhGU19TV19XUklURV9TVFJFQU1TX01BWCk7XFxuK31cXG4rXFxuK3VpbnQxNl90XFxuK3hmc19pbm9kZV9nZXRfd3JpdGVfc3RyZWFtKFxcbitcXHRzdHJ1Y3QgeGZzX2lub2RlXFx0KmlwKVxcbit7XFxuK1xcdHVpbnQxNl90XFx0c3RyZWFtX2lkO1xcbitcXG4rXFx0eGZzX2lsb2NrKGlwLCBYRlNfSUxPQ0tfU0hBUkVEKTtcXG4rXFx0c3RyZWFtX2lkID0gaXAtXFx1MDAzZWlfd3JpdGVfc3RyZWFtO1xcbitcXHR4ZnNfaXVubG9jayhpcCwgWEZTX0lMT0NLX1NIQVJFRCk7XFxuK1xcbitcXHRyZXR1cm4gc3RyZWFtX2lkO1xcbit9XFxuK1xcbitzdHJ1Y3QgeGZzX3dyaXRlX3N0cmVhbSB7XFxuK1xcdHN0cnVjdCB4ZnNfbW91bnRcXHQqbXA7XFxuK1xcdHVpbnQxNl90XFx0XFx0c3RyZWFtX2lkO1xcdC8qIDEtYmFzZWQgKi9cXG4rfTtcXG4rXFxuK3N0YXRpYyBpbnRcXG4reGZzX3dyaXRlX3N0cmVhbV9yZWxlYXNlKFxcbitcXHRzdHJ1Y3QgaW5vZGVcXHRcXHQqaW5vZGUsXFxuK1xcdHN0cnVjdCBmaWxlXFx0XFx0KmZpbGUpXFxuK3tcXG4rXFx0c3RydWN0IHhmc193cml0ZV9zdHJlYW1cXHQqd3MgPSBmaWxlLVxcdTAwM2Vwcml2YXRlX2RhdGE7XFxuK1xcdHN0cnVjdCB4ZnNfbW91bnRcXHQqbXAgPSB3cy1cXHUwMDNlbXA7XFxuK1xcbitcXHRzcGluX2xvY2soXFx1MDAyNm1wLVxcdTAwM2VtX3N0cmVhbXNfbG9jayk7XFxuK1xcdGNsZWFyX2JpdCh3cy1cXHUwMDNlc3RyZWFtX2lkIC0gMSwgbXAtXFx1MDAzZW1fc3RyZWFtc19pbl91c2UpO1xcbitcXHRzcGluX3VubG9jayhcXHUwMDI2bXAtXFx1MDAzZW1fc3RyZWFtc19sb2NrKTtcXG4rXFx0a2ZyZWUod3MpO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgeGZzX3dyaXRlX3N0cmVhbV9mb3BzID0ge1xcbitcXHQucmVsZWFzZVxcdD0geGZzX3dyaXRlX3N0cmVhbV9yZWxlYXNlLFxcbitcXHQubGxzZWVrXFx0XFx0PSBub29wX2xsc2VlayxcXG4rfTtcXG4rXFxuK2ludFxcbit4ZnNfaW5vZGVfd3JpdGVfc3RyZWFtX29wZW4oXFxuK1xcdHN0cnVjdCB4ZnNfaW5vZGVcXHQqaXAsXFxuK1xcdHUzMlxcdFxcdFxcdGZsYWdzLFxcbitcXHR1MzJcXHRcXHRcXHQqc3RyZWFtX2lkcClcXG4re1xcbitcXHRzdHJ1Y3QgeGZzX21vdW50XFx0Km1wID0gaXAtXFx1MDAzZWlfbW91bnQ7XFxuK1xcdHN0cnVjdCB4ZnNfd3JpdGVfc3RyZWFtXFx0KndzO1xcbitcXHRpbnRcXHRcXHRcXHRtYXgsIHNsb3QsIGZkLCByZXQ7XFxuK1xcbitcXHRpZiAoZmxhZ3MgXFx1MDAyNiB+RlNfV1JJVEVfU1RSRUFNX09QRU5fRVhBQ1QpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0bWF4ID0geGZzX2lub2RlX21heF93cml0ZV9zdHJlYW1zKGlwKTtcXG4rXFx0aWYgKCFtYXgpXFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0QVNTRVJUKG1wLVxcdTAwM2VtX3N0cmVhbXNfaW5fdXNlKTtcXG4rXFxuK1xcdHdzID0ga21hbGxvYyhzaXplb2YoKndzKSwgR0ZQX0tFUk5FTCk7XFxuK1xcdGlmICghd3MpXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXG4rXFx0c3Bpbl9sb2NrKFxcdTAwMjZtcC1cXHUwMDNlbV9zdHJlYW1zX2xvY2spO1xcbitcXHRpZiAoZmxhZ3MgXFx1MDAyNiBGU19XUklURV9TVFJFQU1fT1BFTl9FWEFDVCkge1xcbitcXHRcXHRpZiAoISpzdHJlYW1faWRwIHx8ICpzdHJlYW1faWRwIFxcdTAwM2UgbWF4KSB7XFxuK1xcdFxcdFxcdHJldCA9IC1FSU5WQUw7XFxuK1xcdFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4rXFx0XFx0fVxcbitcXHRcXHRzbG90ID0gKnN0cmVhbV9pZHAgLSAxO1xcbitcXHRcXHRpZiAodGVzdF9iaXQoc2xvdCwgbXAtXFx1MDAzZW1fc3RyZWFtc19pbl91c2UpKSB7XFxuK1xcdFxcdFxcdHJldCA9IC1FQlVTWTtcXG4rXFx0XFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbitcXHRcXHR9XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdHNsb3QgPSBmaW5kX2ZpcnN0X3plcm9fYml0KG1wLVxcdTAwM2VtX3N0cmVhbXNfaW5fdXNlLCBtYXgpO1xcbitcXHRcXHRpZiAoc2xvdCBcXHUwMDNlPSBtYXgpIHtcXG4rXFx0XFx0XFx0cmV0ID0gLUVCVVNZO1xcbitcXHRcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXHRzZXRfYml0KHNsb3QsIG1wLVxcdTAwM2VtX3N0cmVhbXNfaW5fdXNlKTtcXG4rXFx0c3Bpbl91bmxvY2soXFx1MDAyNm1wLVxcdTAwM2VtX3N0cmVhbXNfbG9jayk7XFxuK1xcbitcXHR3cy1cXHUwMDNlbXAgPSBtcDtcXG4rXFx0d3MtXFx1MDAzZXN0cmVhbV9pZCA9IHNsb3QgKyAxO1xcdC8qIGNvbnZlcnQgdG8gMS1iYXNlZCAqL1xcbitcXG4rXFx0ZmQgPSBhbm9uX2lub2RlX2dldGZkKFxcXCJbeGZzX3dyaXRlX3N0cmVhbV1cXFwiLCBcXHUwMDI2eGZzX3dyaXRlX3N0cmVhbV9mb3BzLCB3cyxcXG4rXFx0XFx0XFx0ICAgICAgT19SRE9OTFkgfCBPX0NMT0VYRUMpO1xcbitcXHRpZiAoZmQgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdHNwaW5fbG9jayhcXHUwMDI2bXAtXFx1MDAzZW1fc3RyZWFtc19sb2NrKTtcXG4rXFx0XFx0Y2xlYXJfYml0KHNsb3QsIG1wLVxcdTAwM2VtX3N0cmVhbXNfaW5fdXNlKTtcXG4rXFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNm1wLVxcdTAwM2VtX3N0cmVhbXNfbG9jayk7XFxuK1xcdFxcdGtmcmVlKHdzKTtcXG4rXFx0XFx0cmV0dXJuIGZkO1xcbitcXHR9XFxuK1xcbitcXHQqc3RyZWFtX2lkcCA9IHdzLVxcdTAwM2VzdHJlYW1faWQ7XFxuK1xcdHJldHVybiBmZDtcXG4rXFxuK291dF91bmxvY2s6XFxuK1xcdHNwaW5fdW5sb2NrKFxcdTAwMjZtcC1cXHUwMDNlbV9zdHJlYW1zX2xvY2spO1xcbitcXHRrZnJlZSh3cyk7XFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuK2ludFxcbit4ZnNfaW5vZGVfc2V0X3dyaXRlX3N0cmVhbShcXG4rXFx0c3RydWN0IHhmc19pbm9kZVxcdCppcCxcXG4rXFx0aW50XFx0XFx0XFx0c3RyZWFtX2ZkKVxcbit7XFxuK1xcdENMQVNTKGZkLCBmKShzdHJlYW1fZmQpO1xcbitcXHRzdHJ1Y3QgeGZzX3dyaXRlX3N0cmVhbVxcdCp3cztcXG4rXFx0aW50XFx0XFx0XFx0cmV0ID0gMDtcXG4rXFxuK1xcdGlmICghZmRfZmlsZShmKSlcXG4rXFx0XFx0cmV0dXJuIC1FQkFERjtcXG4rXFx0aWYgKGZkX2ZpbGUoZiktXFx1MDAzZWZfb3AgIT0gXFx1MDAyNnhmc193cml0ZV9zdHJlYW1fZm9wcylcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHR3cyA9IGZkX2ZpbGUoZiktXFx1MDAzZXByaXZhdGVfZGF0YTtcXG4rXFx0aWYgKHdzLVxcdTAwM2VtcCAhPSBpcC1cXHUwMDNlaV9tb3VudClcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHR4ZnNfaWxvY2soaXAsIFhGU19JTE9DS19FWENMKTtcXG4rXFxuK1xcdGlmIChYRlNfSVNfUkVBTFRJTUVfSU5PREUoaXApIHx8IHhmc19pbm9kZV9pc19maWxlc3RyZWFtKGlwKSB8fFxcbitcXHQgICAgVkZTX0koaXApLVxcdTAwM2VpX3dyaXRlX2hpbnQgIT0gV1JJVEVfTElGRV9OT1RfU0VUKSB7XFxuK1xcdFxcdHJldCA9IC1FSU5WQUw7XFxuK1xcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4rXFx0fVxcbitcXG4rXFx0aXAtXFx1MDAzZWlfd3JpdGVfc3RyZWFtID0gd3MtXFx1MDAzZXN0cmVhbV9pZDtcXG4rb3V0X3VubG9jazpcXG4rXFx0eGZzX2l1bmxvY2soaXAsIFhGU19JTE9DS19FWENMKTtcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4gLypcXG4gICogVGhlc2UgdHdvIGFyZSB3cmFwcGVyIHJvdXRpbmVzIGFyb3VuZCB0aGUgeGZzX2lsb2NrKCkgcm91dGluZSB1c2VkIHRvXFxuICAqIGNlbnRyYWxpemUgc29tZSBncnVuZ3kgY29kZS4gIFRoZXkgYXJlIHVzZWQgaW4gcGxhY2VzIHRoYXQgd2lzaCB0byBsb2NrIHRoZVxcbmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2lub2RlLmggYi9mcy94ZnMveGZzX2lub2RlLmhcXG5pbmRleCAzNGMxMDM4ZWJmY2RlMS4uNmFiZjgyZmZiZjgyYWMgMTAwNjQ0XFxuLS0tIGEvZnMveGZzL3hmc19pbm9kZS5oXFxuKysrIGIvZnMveGZzL3hmc19pbm9kZS5oXFxuQEAgLTM3LDYgKzM3LDkgQEAgdHlwZWRlZiBzdHJ1Y3QgeGZzX2lub2RlIHtcXG4gXFx0c3RydWN0IHhmc19pZm9ya1xcdGlfZGY7XFx0XFx0LyogZGF0YSBmb3JrICovXFxuIFxcdHN0cnVjdCB4ZnNfaWZvcmtcXHRpX2FmO1xcdFxcdC8qIGF0dHJpYnV0ZSBmb3JrICovXFxuIFxcbitcXHQvKiBXcml0ZSBzdHJlYW0gaW5mb3JtYXRpb24gKi9cXG4rXFx0dWludDE2X3RcXHRcXHRpX3dyaXRlX3N0cmVhbTtcXG4rXFxuIFxcdC8qIFRyYW5zYWN0aW9uIGFuZCBsb2NraW5nIGluZm9ybWF0aW9uLiAqL1xcbiBcXHRzdHJ1Y3QgeGZzX2lub2RlX2xvZ19pdGVtICppX2l0ZW1wO1xcdC8qIGxvZ2dpbmcgaW5mb3JtYXRpb24gKi9cXG4gXFx0c3RydWN0IHJ3X3NlbWFwaG9yZVxcdGlfbG9jaztcXHRcXHQvKiBpbm9kZSBsb2NrICovXFxuQEAgLTY3Myw0ICs2NzYsOSBAQCBpbnQgeGZzX2ljcmVhdGVfZHFhbGxvYyhjb25zdCBzdHJ1Y3QgeGZzX2ljcmVhdGVfYXJncyAqYXJncyxcXG4gXFx0XFx0c3RydWN0IHhmc19kcXVvdCAqKnVkcXBwLCBzdHJ1Y3QgeGZzX2RxdW90ICoqZ2RxcHAsXFxuIFxcdFxcdHN0cnVjdCB4ZnNfZHF1b3QgKipwZHFwcCk7XFxuIFxcbitpbnQgeGZzX2lub2RlX21heF93cml0ZV9zdHJlYW1zKHN0cnVjdCB4ZnNfaW5vZGUgKmlwKTtcXG4rdWludDE2X3QgeGZzX2lub2RlX2dldF93cml0ZV9zdHJlYW0oc3RydWN0IHhmc19pbm9kZSAqaXApO1xcbitpbnQgeGZzX2lub2RlX3dyaXRlX3N0cmVhbV9vcGVuKHN0cnVjdCB4ZnNfaW5vZGUgKmlwLCB1MzIgZmxhZ3MsXFxuK1xcdFxcdHUzMiAqc3RyZWFtX2lkcCk7XFxuK2ludCB4ZnNfaW5vZGVfc2V0X3dyaXRlX3N0cmVhbShzdHJ1Y3QgeGZzX2lub2RlICppcCwgaW50IHN0cmVhbV9mZCk7XFxuICNlbmRpZlxcdC8qIF9fWEZTX0lOT0RFX0hfXyAqL1xcbmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2lvY3RsLmMgYi9mcy94ZnMveGZzX2lvY3RsLmNcXG5pbmRleCAxYjUzNzAxYmViZWExYS4uODY0MGU2Mzg5NzY4M2YgMTAwNjQ0XFxuLS0tIGEvZnMveGZzL3hmc19pb2N0bC5jXFxuKysrIGIvZnMveGZzL3hmc19pb2N0bC5jXFxuQEAgLTU1Nyw2ICs1NTcsMTIgQEAgeGZzX2lvY3RsX3NldGF0dHJfeGZsYWdzKFxcbiBcXHRib29sXFx0XFx0XFx0cnRmbGFnID0gKGZhLVxcdTAwM2Vmc3hfeGZsYWdzIFxcdTAwMjYgRlNfWEZMQUdfUkVBTFRJTUUpO1xcbiBcXHR1aW50NjRfdFxcdFxcdGlfZmxhZ3MyO1xcbiBcXG4rXFx0aWYgKChmYS1cXHUwMDNlZnN4X3hmbGFncyBcXHUwMDI2IEZTX1hGTEFHX0ZJTEVTVFJFQU0pIFxcdTAwMjZcXHUwMDI2IGlwLVxcdTAwM2VpX3dyaXRlX3N0cmVhbSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRpZiAocnRmbGFnIFxcdTAwMjZcXHUwMDI2IGlwLVxcdTAwM2VpX3dyaXRlX3N0cmVhbSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbiBcXHRpZiAocnRmbGFnICE9IFhGU19JU19SRUFMVElNRV9JTk9ERShpcCkpIHtcXG4gXFx0XFx0LyogQ2FuJ3QgY2hhbmdlIHJlYWx0aW1lIGZsYWcgaWYgYW55IGV4dGVudHMgYXJlIGFsbG9jYXRlZC4gKi9cXG4gXFx0XFx0aWYgKHhmc19pbm9kZV9oYXNfZmlsZWRhdGEoaXApKVxcbkBAIC0xMjAwLDYgKzEyMDYsNTkgQEAgeGZzX2lvY3RsX2ZzX2NvdW50cyhcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnRcXG4reGZzX2lvY193cml0ZV9zdHJlYW1fb3BlbihcXG4rXFx0c3RydWN0IGZpbGVcXHRcXHQqZmlscCxcXG4rXFx0dm9pZCBfX3VzZXJcXHRcXHQqYXJnKVxcbit7XFxuK1xcdHN0cnVjdCB4ZnNfaW5vZGVcXHQqaXAgPSBYRlNfSShmaWxlX2lub2RlKGZpbHApKTtcXG4rXFx0c3RydWN0IGZzX3dyaXRlX3N0cmVhbV9vcGVuIHdzbztcXG4rXFx0aW50XFx0XFx0XFx0ZmQ7XFxuK1xcbitcXHRpZiAoY29weV9mcm9tX3VzZXIoXFx1MDAyNndzbywgYXJnLCBzaXplb2Yod3NvKSkpXFxuK1xcdFxcdHJldHVybiAtRUZBVUxUO1xcbitcXG4rXFx0ZmQgPSB4ZnNfaW5vZGVfd3JpdGVfc3RyZWFtX29wZW4oaXAsIHdzby5mbGFncywgXFx1MDAyNndzby5zdHJlYW1faWQpO1xcbitcXHRpZiAoZmQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gZmQ7XFxuK1xcbitcXHRpZiAoY29weV90b191c2VyKGFyZywgXFx1MDAyNndzbywgc2l6ZW9mKHdzbykpKVxcbitcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4rXFx0cmV0dXJuIGZkO1xcbit9XFxuK1xcbitzdGF0aWMgaW50XFxuK3hmc19pb2Nfd3JpdGVfc3RyZWFtX3NldChcXG4rXFx0c3RydWN0IGZpbGVcXHRcXHQqZmlscCxcXG4rXFx0dW5zaWduZWQgbG9uZ1xcdFxcdGFyZylcXG4re1xcbitcXHRzdHJ1Y3QgeGZzX2lub2RlXFx0KmlwID0gWEZTX0koZmlsZV9pbm9kZShmaWxwKSk7XFxuK1xcbitcXHRpZiAoIShmaWxwLVxcdTAwM2VmX21vZGUgXFx1MDAyNiBGTU9ERV9XUklURSkpXFxuK1xcdFxcdHJldHVybiAtRUJBREY7XFxuK1xcdHJldHVybiB4ZnNfaW5vZGVfc2V0X3dyaXRlX3N0cmVhbShpcCwgKGludClhcmcpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50XFxuK3hmc19pb2Nfd3JpdGVfc3RyZWFtX2dldChcXG4rXFx0c3RydWN0IHhmc19pbm9kZVxcdCppcCxcXG4rXFx0dm9pZCBfX3VzZXJcXHRcXHQqYXJnKVxcbit7XFxuK1xcdF9fdTMyIHN0cmVhbV9pZCA9IHhmc19pbm9kZV9nZXRfd3JpdGVfc3RyZWFtKGlwKTtcXG4rXFxuK1xcdHJldHVybiBwdXRfdXNlcihzdHJlYW1faWQsIChfX3UzMiBfX3VzZXIgKilhcmcpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50XFxuK3hmc19pb2Nfd3JpdGVfc3RyZWFtX2dldF9tYXgoXFxuK1xcdHN0cnVjdCB4ZnNfaW5vZGVcXHQqaXAsXFxuK1xcdHZvaWQgX191c2VyXFx0XFx0KmFyZylcXG4re1xcbitcXHRfX3UzMiBucl9zdHJlYW1zID0geGZzX2lub2RlX21heF93cml0ZV9zdHJlYW1zKGlwKTtcXG4rXFxuK1xcdHJldHVybiBwdXRfdXNlcihucl9zdHJlYW1zLCAoX191MzIgX191c2VyICopYXJnKTtcXG4rfVxcbitcXG4gLypcXG4gICogVGhlc2UgbG9uZy11bnVzZWQgaW9jdGxzIHdlcmUgcmVtb3ZlZCBmcm9tIHRoZSBvZmZpY2lhbCBpb2N0bCBBUEkgaW4gNS4xNyxcXG4gICogYnV0IHJldGFpbiB0aGVzZSBkZWZpbml0aW9ucyBzbyB0aGF0IHdlIGNhbiBsb2cgd2FybmluZ3MgYWJvdXQgdGhlbS5cXG5AQCAtMTQ2NSw2ICsxNTI0LDE2IEBAIHhmc19maWxlX2lvY3RsKFxcbiBcXHRcXHRyZXR1cm4geGZzX2lvY19oZWFsdGhfbW9uaXRvcihmaWxwLCBhcmcpO1xcbiBcXHRjYXNlIFhGU19JT0NfVkVSSUZZX01FRElBOlxcbiBcXHRcXHRyZXR1cm4geGZzX2lvY192ZXJpZnlfbWVkaWEoZmlscCwgYXJnKTtcXG4rXFx0Y2FzZSBGU19JT0NfV1JJVEVfU1RSRUFNX09QRU46XFxuK1xcdFxcdHJldHVybiB4ZnNfaW9jX3dyaXRlX3N0cmVhbV9vcGVuKGZpbHAsICh2b2lkIF9fdXNlciAqKWFyZyk7XFxuK1xcdGNhc2UgRlNfSU9DX1dSSVRFX1NUUkVBTV9TRVQ6XFxuK1xcdFxcdHJldHVybiB4ZnNfaW9jX3dyaXRlX3N0cmVhbV9zZXQoZmlscCwgcCk7XFxuK1xcdGNhc2UgRlNfSU9DX1dSSVRFX1NUUkVBTV9HRVQ6XFxuK1xcdFxcdHJldHVybiB4ZnNfaW9jX3dyaXRlX3N0cmVhbV9nZXQoWEZTX0koZmlsZV9pbm9kZShmaWxwKSksXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCh2b2lkIF9fdXNlciAqKWFyZyk7XFxuK1xcdGNhc2UgRlNfSU9DX1dSSVRFX1NUUkVBTV9HRVRfTUFYOlxcbitcXHRcXHRyZXR1cm4geGZzX2lvY193cml0ZV9zdHJlYW1fZ2V0X21heChYRlNfSShmaWxlX2lub2RlKGZpbHApKSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICh2b2lkIF9fdXNlciAqKWFyZyk7XFxuIFxcbiBcXHRkZWZhdWx0OlxcbiBcXHRcXHRyZXR1cm4gLUVOT1RUWTtcXG5kaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19pb21hcC5jIGIvZnMveGZzL3hmc19pb21hcC5jXFxuaW5kZXggMjI1YzNkZTg4ZDAzYjEuLmJmNDIzODk3ZDkxNmRmIDEwMDY0NFxcbi0tLSBhL2ZzL3hmcy94ZnNfaW9tYXAuY1xcbisrKyBiL2ZzL3hmcy94ZnNfaW9tYXAuY1xcbkBAIC0xNDQsNiArMTQ0LDcgQEAgeGZzX2JtYnRfdG9faW9tYXAoXFxuIFxcdH1cXG4gXFx0aW9tYXAtXFx1MDAzZW9mZnNldCA9IFhGU19GU0JfVE9fQihtcCwgaW1hcC1cXHUwMDNlYnJfc3RhcnRvZmYpO1xcbiBcXHRpb21hcC1cXHUwMDNlbGVuZ3RoID0gWEZTX0ZTQl9UT19CKG1wLCBpbWFwLVxcdTAwM2Vicl9ibG9ja2NvdW50KTtcXG4rXFx0aW9tYXAtXFx1MDAzZXdyaXRlX3N0cmVhbSA9IGlwLVxcdTAwM2VpX3dyaXRlX3N0cmVhbTtcXG4gXFx0aWYgKG1hcHBpbmdfZmxhZ3MgXFx1MDAyNiBJT01BUF9EQVgpIHtcXG4gXFx0XFx0aW9tYXAtXFx1MDAzZWRheF9kZXYgPSB0YXJnZXQtXFx1MDAzZWJ0X2RheGRldjtcXG4gXFx0fSBlbHNlIHtcXG5kaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19tb3VudC5oIGIvZnMveGZzL3hmc19tb3VudC5oXFxuaW5kZXggNjZhMDJkMWI5YWQ3YTEuLmFkNTExMTU1OTRkM2M4IDEwMDY0NFxcbi0tLSBhL2ZzL3hmcy94ZnNfbW91bnQuaFxcbisrKyBiL2ZzL3hmcy94ZnNfbW91bnQuaFxcbkBAIC00NSw2ICs0NSw4IEBAIGVudW0ge1xcbiBcXG4gI2RlZmluZSBYRlNfRVJSX1JFVFJZX0ZPUkVWRVJcXHQtMVxcbiBcXG4rI2RlZmluZSBYRlNfU1dfV1JJVEVfU1RSRUFNU19NQVhcXHQxNlxcbitcXG4gLypcXG4gICogQWx0aG91Z2ggcmV0cnlfdGltZW91dCBpcyBpbiBqaWZmaWVzIHdoaWNoIGlzIG5vcm1hbGx5IGFuIHVuc2lnbmVkIGxvbmcsXFxuICAqIHdlIGxpbWl0IHRoZSByZXRyeSB0aW1lb3V0IHRvIDg2NDAwIHNlY29uZHMsIG9yIG9uZSBkYXkuICBTbyBldmVuIGFcXG5AQCAtMzQ5LDYgKzM1MSw5IEBAIHR5cGVkZWYgc3RydWN0IHhmc19tb3VudCB7XFxuIFxcbiBcXHQvKiBJbmRleCBvZiB1dWlkIHJlY29yZCBpbiB0aGUgdXVpZCB4YXJyYXkuICovXFxuIFxcdHVuc2lnbmVkIGludFxcdFxcdG1fdXVpZF90YWJsZV9pbmRleDtcXG4rXFxuK1xcdHVuc2lnbmVkIGxvbmdcXHRcXHQqbV9zdHJlYW1zX2luX3VzZTtcXG4rXFx0c3BpbmxvY2tfdFxcdFxcdG1fc3RyZWFtc19sb2NrO1xcbiB9IHhmc19tb3VudF90O1xcbiBcXG4gI2RlZmluZSBNX0lHRU8obXApXFx0XFx0KFxcdTAwMjYobXApLVxcdTAwM2VtX2lub19nZW8pXFxuZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfc3VwZXIuYyBiL2ZzL3hmcy94ZnNfc3VwZXIuY1xcbmluZGV4IDg1MzFkNTI2ZmM0NDA5Li5kNjk4YmU1MDRjNDU0OCAxMDA2NDRcXG4tLS0gYS9mcy94ZnMveGZzX3N1cGVyLmNcXG4rKysgYi9mcy94ZnMveGZzX3N1cGVyLmNcXG5AQCAtODA1LDYgKzgwNSw3IEBAIHhmc19tb3VudF9mcmVlKFxcbiAjaWZkZWYgREVCVUdcXG4gXFx0a2ZyZWUobXAtXFx1MDAzZW1fZXJyb3J0YWcpO1xcbiAjZW5kaWZcXG4rXFx0Yml0bWFwX2ZyZWUobXAtXFx1MDAzZW1fc3RyZWFtc19pbl91c2UpO1xcbiBcXHRrZnJlZShtcCk7XFxuIH1cXG4gXFxuQEAgLTE2NTksNiArMTY2MCw3IEBAIHhmc19mc19maWxsX3N1cGVyKFxcbiBcXHRzdHJ1Y3QgeGZzX21vdW50XFx0Km1wID0gc2ItXFx1MDAzZXNfZnNfaW5mbztcXG4gXFx0c3RydWN0IGlub2RlXFx0XFx0KnJvb3Q7XFxuIFxcdGludFxcdFxcdFxcdGZsYWdzID0gMCwgZXJyb3I7XFxuK1xcdGludFxcdFxcdFxcdG5yX3N0cmVhbXM7XFxuIFxcbiBcXHRtcC1cXHUwMDNlbV9zdXBlciA9IHNiO1xcbiBcXG5AQCAtMTcwOCw2ICsxNzEwLDE1IEBAIHhmc19mc19maWxsX3N1cGVyKFxcbiBcXHRpZiAoZXJyb3IpXFxuIFxcdFxcdHJldHVybiBlcnJvcjtcXG4gXFxuK1xcdG5yX3N0cmVhbXMgPSBiZGV2X21heF93cml0ZV9zdHJlYW1zKG1wLVxcdTAwM2VtX2RkZXZfdGFyZ3AtXFx1MDAzZWJ0X2JkZXYpO1xcbitcXHRpZiAoIW5yX3N0cmVhbXMpXFxuK1xcdFxcdG5yX3N0cmVhbXMgPSBYRlNfU1dfV1JJVEVfU1RSRUFNU19NQVg7XFxuK1xcdG1wLVxcdTAwM2VtX3N0cmVhbXNfaW5fdXNlID0gYml0bWFwX3phbGxvYyhucl9zdHJlYW1zLCBHRlBfS0VSTkVMKTtcXG4rXFx0aWYgKCFtcC1cXHUwMDNlbV9zdHJlYW1zX2luX3VzZSkge1xcbitcXHRcXHRlcnJvciA9IC1FTk9NRU07XFxuK1xcdFxcdGdvdG8gb3V0X3NodXRkb3duX2RldmljZXM7XFxuK1xcdH1cXG4rXFxuIFxcdGlmICh4ZnNfZGVidWdmcykge1xcbiBcXHRcXHRtcC1cXHUwMDNlbV9kZWJ1Z2ZzID0geGZzX2RlYnVnZnNfbWtkaXIobXAtXFx1MDAzZW1fc3VwZXItXFx1MDAzZXNfaWQsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgeGZzX2RlYnVnZnMpO1xcbkBAIC0yMjQ5LDYgKzIyNjAsNyBAQCB4ZnNfaW5pdF9mc19jb250ZXh0KFxcbiAjZW5kaWZcXG4gXFxuIFxcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZtcC1cXHUwMDNlbV9zYl9sb2NrKTtcXG4rXFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNm1wLVxcdTAwM2VtX3N0cmVhbXNfbG9jayk7XFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBYR19UWVBFX01BWDsgaSsrKVxcbiBcXHRcXHR4YV9pbml0KFxcdTAwMjZtcC1cXHUwMDNlbV9ncm91cHNbaV0ueGEpO1xcbiBcXHRtdXRleF9pbml0KFxcdTAwMjZtcC1cXHUwMDNlbV9ncm93bG9jayk7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaW9tYXAuaCBiL2luY2x1ZGUvbGludXgvaW9tYXAuaFxcbmluZGV4IDU2YjQzZDU5NGU2ZTI5Li40ZGM3MWRhNTk4Zjk5ZCAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2lvbWFwLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2lvbWFwLmhcXG5AQCAtMTMyLDYgKzEzMiw4IEBAIHN0cnVjdCBpb21hcCB7XFxuIFxcdHU2NFxcdFxcdFxcdGxlbmd0aDtcXHQvKiBsZW5ndGggb2YgbWFwcGluZywgYnl0ZXMgKi9cXG4gXFx0dTE2XFx0XFx0XFx0dHlwZTtcXHQvKiB0eXBlIG9mIG1hcHBpbmcgKi9cXG4gXFx0dTE2XFx0XFx0XFx0ZmxhZ3M7XFx0LyogZmxhZ3MgZm9yIG1hcHBpbmcgKi9cXG4rXFx0dTE2XFx0XFx0XFx0d3JpdGVfc3RyZWFtOyAvKiB3cml0ZSBzdHJlYW0gZm9yIEkvTyAqL1xcbitcXHQvKiAyIGJ5dGVzIHBhZGRpbmcgaG9sZSBoZXJlICovXFxuIFxcdHN0cnVjdCBibG9ja19kZXZpY2VcXHQqYmRldjtcXHQvKiBibG9jayBkZXZpY2UgZm9yIEkvTyAqL1xcbiBcXHRzdHJ1Y3QgZGF4X2RldmljZVxcdCpkYXhfZGV2OyAvKiBkYXhfZGV2IGZvciBkYXggb3BlcmF0aW9ucyAqL1xcbiBcXHR2b2lkXFx0XFx0XFx0KmlubGluZV9kYXRhO1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvZnMuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9mcy5oXFxuaW5kZXggYmQ4NzI2MmYyZTM0OTQuLmE3NTZkMjdiZGY4NDE3IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9mcy5oXFxuKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L2ZzLmhcXG5AQCAtMzQ1LDYgKzM0NSwyMiBAQCBzdHJ1Y3QgZmlsZV9hdHRyIHtcXG4gLyogR2V0IGxvZ2ljYWwgYmxvY2sgbWV0YWRhdGEgY2FwYWJpbGl0eSBkZXRhaWxzICovXFxuICNkZWZpbmUgRlNfSU9DX0dFVExCTURfQ0FQXFx0XFx0X0lPV1IoMHgxNSwgMiwgc3RydWN0IGxvZ2ljYWxfYmxvY2tfbWV0YWRhdGFfY2FwKVxcbiBcXG4rc3RydWN0IGZzX3dyaXRlX3N0cmVhbV9vcGVuIHtcXG4rXFx0X191MzJcXHRcXHRzdHJlYW1faWQ7XFx0LyogSU46IHJlcXVlc3RlZCBpZCBpZiBPUEVOX0VYQUNUIHNldDsgT1VUOiBhc3NpZ25lZCBpZCAqL1xcbitcXHRfX3UzMlxcdFxcdGZsYWdzO1xcdFxcdC8qIElOOiBGU19XUklURV9TVFJFQU1fT1BFTl8qICovXFxuK307XFxuK1xcbisvKlxcbisgKiBGbGFnIHRvIGFzayBmb3Igc3BlY2lmaWMgc3RyZWFtX2lkLCBvdGhlcndpc2Uga2VybmVsIGNhbiByZXR1cm4gYW55LlxcbisgKiBGYWlscyB3aXRoIC1FQlVTWSBpZiB0aGF0IHN0cmVhbV9pZCBpcyBhbHJlYWR5IGhlbGRcXG4rICovXFxuKyNkZWZpbmUgRlNfV1JJVEVfU1RSRUFNX09QRU5fRVhBQ1RcXHQoMSBcXHUwMDNjXFx1MDAzYyAwKVxcbitcXG4rI2RlZmluZSBGU19JT0NfV1JJVEVfU1RSRUFNX0dFVF9NQVhcXHRfSU9SKCdmJywgMTM1LCBfX3UzMilcXG4rI2RlZmluZSBGU19JT0NfV1JJVEVfU1RSRUFNX09QRU5cXHRfSU9XUignZicsIDEzNiwgc3RydWN0IGZzX3dyaXRlX3N0cmVhbV9vcGVuKVxcbisjZGVmaW5lIEZTX0lPQ19XUklURV9TVFJFQU1fU0VUXFx0XFx0X0lPVygnZicsIDEzNywgX19zMzIpXFxuKyNkZWZpbmUgRlNfSU9DX1dSSVRFX1NUUkVBTV9HRVRcXHRcXHRfSU9SKCdmJywgMTM4LCBfX3UzMilcXG4rXFxuIC8qXFxuICAqIElub2RlIGZsYWdzIChGU19JT0NfR0VURkxBR1MgLyBGU19JT0NfU0VURkxBR1MpXFxuICAqXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE3VDE2OjA2OjA1LjE4OTYxMzc5MVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE3MTQxODAxNzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWEZTX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwieGZzX2lvY193cml0ZV9zdHJlYW1fb3BlblwiLFxuICAgIFwieGZzX2lvY193cml0ZV9zdHJlYW1fc2V0XCIsXG4gICAgXCJ4ZnNfaW9jX3dyaXRlX3N0cmVhbV9nZXRcIixcbiAgICBcInhmc19pb2Nfd3JpdGVfc3RyZWFtX2dldF9tYXhcIixcbiAgICBcInhmc19pbm9kZV93cml0ZV9zdHJlYW1fb3BlblwiLFxuICAgIFwieGZzX2lub2RlX3NldF93cml0ZV9zdHJlYW1cIixcbiAgICBcInhmc19pbm9kZV9nZXRfd3JpdGVfc3RyZWFtXCIsXG4gICAgXCJ4ZnNfaW5vZGVfbWF4X3dyaXRlX3N0cmVhbXNcIixcbiAgICBcInhmc193cml0ZV9zdHJlYW1fcmVsZWFzZVwiLFxuICAgIFwieGZzX2lub2RlX3dyaXRlX3N0cmVhbV9hZ19zZXRcIixcbiAgICBcInhmc19hZ190b19hZ19zZXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIHdyaXRlIHN0cmVhbXMgc3VwcG9ydCB0byBYRlMgYW5kIGlvbWFwLCBpbmNsdWRpbmcgbmV3IGlvY3RscyBmb3IgbWFuYWdpbmcgd3JpdGUgc3RyZWFtcyBhbmQgbW9kaWZpY2F0aW9ucyB0byBibG9jayBhbGxvY2F0aW9uIGxvZ2ljIHRvIGZhbiBvdXQgYWxsb2NhdGlvbnMgYWNyb3NzIEFHcyBiYXNlZCBvbiB0aGUgc3RyZWFtIElELiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBtb2RpZmllcyBjb3JlIGZpbGVzeXN0ZW0gbG9naWMgYW5kIGludHJvZHVjZXMgbmV3IHVzZXItZmFjaW5nIEFQSXMsIG1ha2luZyBpdCBhIHByaW1lIGNhbmRpZGF0ZSBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzZjE5ZjljZDFhNGU1NDQ3ZWFkMWVjZDc4MzM1ZjcwYmIzM2EzM2E0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdWwgMTcgMTY6MDY6MDIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9pb21hcC9kaXJlY3QtaW8uYyBiL2ZzL2lvbWFwL2RpcmVjdC1pby5jXG5pbmRleCBlMmNkNWY5MmJhYmVkYi4uYjc3NzFhMjVjMWM3OWYgMTAwNjQ0XG4tLS0gYS9mcy9pb21hcC9kaXJlY3QtaW8uY1xuKysrIGIvZnMvaW9tYXAvZGlyZWN0LWlvLmNcbkBAIC0zNDgsNiArMzQ4LDcgQEAgc3RhdGljIHNzaXplX3QgaW9tYXBfZGlvX2Jpb19pdGVyX29uZShzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlcixcbiBcdGZzY3J5cHRfc2V0X2Jpb19jcnlwdF9jdHgoYmlvLCBpdGVyLVx1MDAzZWlub2RlLCBwb3MsIEdGUF9LRVJORUwpO1xuIFx0YmlvLVx1MDAzZWJpX2l0ZXIuYmlfc2VjdG9yID0gaW9tYXBfc2VjdG9yKFx1MDAyNml0ZXItXHUwMDNlaW9tYXAsIHBvcyk7XG4gXHRiaW8tXHUwMDNlYmlfd3JpdGVfaGludCA9IGl0ZXItXHUwMDNlaW5vZGUtXHUwMDNlaV93cml0ZV9oaW50O1xuK1x0YmlvLVx1MDAzZWJpX3dyaXRlX3N0cmVhbSA9IGl0ZXItXHUwMDNlaW9tYXAud3JpdGVfc3RyZWFtO1xuIFx0YmlvLVx1MDAzZWJpX2lvcHJpbyA9IGRpby1cdTAwM2Vpb2NiLVx1MDAzZWtpX2lvcHJpbztcbiBcdGJpby1cdTAwM2ViaV9wcml2YXRlID0gZGlvO1xuIFx0YmlvLVx1MDAzZWJpX2VuZF9pbyA9IGlvbWFwX2Rpb19iaW9fZW5kX2lvO1xuZGlmZiAtLWdpdCBhL2ZzL2lvbWFwL2lvZW5kLmMgYi9mcy9pb21hcC9pb2VuZC5jXG5pbmRleCAwNTY1MzI4NzY0YzE3NS4uNWVhMmM2ODk5M2NmOTMgMTAwNjQ0XG4tLS0gYS9mcy9pb21hcC9pb2VuZC5jXG4rKysgYi9mcy9pb21hcC9pb2VuZC5jXG5AQCAtMTY1LDYgKzE2NSw3IEBAIHN0YXRpYyBzdHJ1Y3QgaW9tYXBfaW9lbmQgKmlvbWFwX2FsbG9jX2lvZW5kKHN0cnVjdCBpb21hcF93cml0ZXBhZ2VfY3R4ICp3cGMsXG4gXHRcdFx0ICAgICAgIEdGUF9OT0ZTLCBcdTAwMjZpb21hcF9pb2VuZF9iaW9zZXQpO1xuIFx0YmlvLVx1MDAzZWJpX2l0ZXIuYmlfc2VjdG9yID0gaW9tYXBfc2VjdG9yKFx1MDAyNndwYy1cdTAwM2Vpb21hcCwgcG9zKTtcbiBcdGJpby1cdTAwM2ViaV93cml0ZV9oaW50ID0gd3BjLVx1MDAzZWlub2RlLVx1MDAzZWlfd3JpdGVfaGludDtcbitcdGJpby1cdTAwM2ViaV93cml0ZV9zdHJlYW0gPSB3cGMtXHUwMDNlaW9tYXAud3JpdGVfc3RyZWFtO1xuIFx0d2JjX2luaXRfYmlvKHdwYy1cdTAwM2V3YmMsIGJpbyk7XG4gXHR3cGMtXHUwMDNlbnJfZm9saW9zID0gMDtcbiBcdHJldHVybiBpb21hcF9pbml0X2lvZW5kKHdwYy1cdTAwM2Vpbm9kZSwgYmlvLCBwb3MsIGlvZW5kX2ZsYWdzKTtcbkBAIC0xODgsNiArMTg5LDggQEAgc3RhdGljIGJvb2wgaW9tYXBfY2FuX2FkZF90b19pb2VuZChzdHJ1Y3QgaW9tYXBfd3JpdGVwYWdlX2N0eCAqd3BjLCBsb2ZmX3QgcG9zLFxuIFx0aWYgKCEod3BjLVx1MDAzZWlvbWFwLmZsYWdzIFx1MDAyNiBJT01BUF9GX0FOT05fV1JJVEUpIFx1MDAyNlx1MDAyNlxuIFx0ICAgIGlvbWFwX3NlY3RvcihcdTAwMjZ3cGMtXHUwMDNlaW9tYXAsIHBvcykgIT0gYmlvX2VuZF9zZWN0b3IoXHUwMDI2aW9lbmQtXHUwMDNlaW9fYmlvKSlcbiBcdFx0cmV0dXJuIGZhbHNlO1xuK1x0aWYgKHdwYy1cdTAwM2Vpb21hcC53cml0ZV9zdHJlYW0gIT0gaW9lbmQtXHUwMDNlaW9fYmlvLmJpX3dyaXRlX3N0cmVhbSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuIFx0LypcbiBcdCAqIExpbWl0IGlvZW5kIGJpbyBjaGFpbiBsZW5ndGhzIHRvIG1pbmltaXNlIElPIGNvbXBsZXRpb24gbGF0ZW5jeS4gVGhpc1xuIFx0ICogYWxzbyBwcmV2ZW50cyBsb25nIHRpZ2h0IGxvb3BzIGVuZGluZyBwYWdlIHdyaXRlYmFjayBvbiBhbGwgdGhlXG5kaWZmIC0tZ2l0IGEvZnMveGZzL2xpYnhmcy94ZnNfYm1hcC5jIGIvZnMveGZzL2xpYnhmcy94ZnNfYm1hcC5jXG5pbmRleCBkNjRkZWZlZGE2NDVlZC4uODcyYTRhYmQyMzE1N2MgMTAwNjQ0XG4tLS0gYS9mcy94ZnMvbGlieGZzL3hmc19ibWFwLmNcbisrKyBiL2ZzL3hmcy9saWJ4ZnMveGZzX2JtYXAuY1xuQEAgLTMxOTIsNiArMzE5Miw3MiBAQCB4ZnNfYm1hcF9zZWxlY3RfbWlubGVuKFxuIFx0cmV0dXJuIGFyZ3MtXHUwMDNlbWF4bGVuO1xuIH1cbiBcbisjZGVmaW5lXHRHRU5FUklDX0FHX1NFVF9TWlx0KDIpXG4rXG4rc3RhdGljIGlubGluZSB4ZnNfYWdudW1iZXJfdFxuK3hmc19kZWZhdWx0X2FnX3NldF9zaXplKFxuK1x0c3RydWN0IHhmc19pbm9kZVx0KmlwKVxuK3tcbitcdHN0cnVjdCB4ZnNfbW91bnRcdCptcCA9IGlwLVx1MDAzZWlfbW91bnQ7XG4rXG4rXHRyZXR1cm4gbWluX3QoeGZzX2FnbnVtYmVyX3QsIEdFTkVSSUNfQUdfU0VUX1NaLCBtcC1cdTAwM2VtX3NiLnNiX2FnY291bnQpO1xuK31cbitcbitzdGF0aWMgeGZzX2FnbnVtYmVyX3Rcbit4ZnNfaW5vZGVfd3JpdGVfc3RyZWFtX2FnX3NldChcbitcdHN0cnVjdCB4ZnNfaW5vZGVcdCppcCxcbitcdHhmc19hZ251bWJlcl90XHRcdCp0YXJnZXRfYWdubylcbit7XG4rXHRzdHJ1Y3QgeGZzX21vdW50XHQqbXAgPSBpcC1cdTAwM2VpX21vdW50O1xuK1x0dWludDMyX3RcdFx0bnJfc3RyZWFtcyA9IHhmc19pbm9kZV9tYXhfd3JpdGVfc3RyZWFtcyhpcCk7XG4rXHR1aW50MzJfdFx0XHRzdHJlYW1faWQgPSBpcC1cdTAwM2VpX3dyaXRlX3N0cmVhbTtcbitcdHVpbnQzMl90XHRcdG5yX2FncyA9IG1wLVx1MDAzZW1fc2Iuc2JfYWdjb3VudDtcbitcdHhmc19hZ251bWJlcl90XHRcdHNldF9zaXplO1xuK1xuK1xuK1x0aWYgKCFucl9zdHJlYW1zKVxuK1x0XHRyZXR1cm4geGZzX2RlZmF1bHRfYWdfc2V0X3NpemUoaXApO1xuK1xuK1x0c3RyZWFtX2lkIC09IDE7IC8qIEZvciAwLWJhc2VkIG1hdGg7IHN0cmVhbS1pZHMgYXJlIDEtYmFzZWQgKi9cbitcdHNldF9zaXplID0gbnJfYWdzIC8gbnJfc3RyZWFtcztcbitcbitcdGlmIChzZXRfc2l6ZSkge1xuK1x0XHQqdGFyZ2V0X2Fnbm8gPSBzdHJlYW1faWQgKiBzZXRfc2l6ZTtcbitcdFx0LyogdW5ldmVuIGRpc3RyaWJ1dGlvbiwgbGFzdCBzdHJlYW0gd2lsbCBjb3ZlciBleHRyYSBBR3MgKi9cbitcdFx0aWYgKHN0cmVhbV9pZCA9PSBucl9zdHJlYW1zIC0gMSlcbitcdFx0XHRzZXRfc2l6ZSA9IG5yX2FncyAtICp0YXJnZXRfYWdubztcbitcdH0gZWxzZSB7XG4rXHRcdC8qIGZvciB0aGUgY2FzZSB3aGVuIHdlIGhhdmUgZmV3ZXIgQUdzIHRoYW4gc3RyZWFtcyAqL1xuK1x0XHQqdGFyZ2V0X2Fnbm8gPSBzdHJlYW1faWQgJSBucl9hZ3M7XG4rXHRcdHNldF9zaXplID0gMTtcbitcdH1cbitcbitcdHJldHVybiBzZXRfc2l6ZTtcbit9XG4rXG4rc3RhdGljIHhmc19hZ251bWJlcl90XG4reGZzX2FnX3RvX2FnX3NldChcbitcdHN0cnVjdCB4ZnNfYm1hbGxvY2FcdCphcCxcbitcdHhmc19hZ251bWJlcl90XHRcdGJhc2VfYWdubylcbit7XG4rXHRzdHJ1Y3QgeGZzX2lub2RlXHQqaXAgPSBhcC1cdTAwM2VpcDtcbitcdHN0cnVjdCB4ZnNfbW91bnRcdCptcCA9IGlwLVx1MDAzZWlfbW91bnQ7XG4rXHR4ZnNfYWdudW1iZXJfdFx0XHRzZXRfc2l6ZTtcbitcbitcdC8qIEFwcGx5IGZhbm5pbmcgb25seSBmb3IgcmVndWxhciBmaWxlIGRhdGEgKi9cbitcdGlmICghKGFwLVx1MDAzZWRhdGF0eXBlIFx1MDAyNiBYRlNfQUxMT0NfVVNFUkRBVEEpKVxuK1x0XHRyZXR1cm4gYmFzZV9hZ25vO1xuK1xuK1x0aWYgKGlwLVx1MDAzZWlfd3JpdGVfc3RyZWFtKVxuK1x0XHRzZXRfc2l6ZSA9IHhmc19pbm9kZV93cml0ZV9zdHJlYW1fYWdfc2V0KGlwLCBcdTAwMjZiYXNlX2Fnbm8pO1xuK1x0ZWxzZVxuK1x0XHRzZXRfc2l6ZSA9IHhmc19kZWZhdWx0X2FnX3NldF9zaXplKGlwKTtcbitcbitcdC8qIEZhbiBvdXQgd2l0aGluIHRoZSBBRyBzZXQgdXNpbmcgbG93IGJpdHMgb2YgdGhlIGlub2RlICovXG4rXHRyZXR1cm4gKGJhc2VfYWdubyArIChYRlNfSU5PX1RPX0FHSU5PKG1wLCBJX0lOTyhpcCkpICUgc2V0X3NpemUpKSAlXG4rXHRcdG1wLVx1MDAzZW1fc2Iuc2JfYWdjb3VudDtcbit9XG4rXG4gc3RhdGljIGludFxuIHhmc19ibWFwX2J0YWxsb2Nfc2VsZWN0X2xlbmd0aHMoXG4gXHRzdHJ1Y3QgeGZzX2JtYWxsb2NhXHQqYXAsXG5AQCAtMzU4Nyw4ICszNjUzLDE2IEBAIHhmc19ibWFwX2J0YWxsb2NfYmVzdF9sZW5ndGgoXG4ge1xuIFx0eGZzX2V4dGxlbl90XHRcdGJsZW4gPSAwO1xuIFx0aW50XHRcdFx0ZXJyb3I7XG4rXHR4ZnNfYWdudW1iZXJfdFx0XHR0YXJnZXRfYWcsIHN0YXJ0X2FnO1xuIFxuIFx0YXAtXHUwMDNlYmxrbm8gPSBYRlNfSU5PREVfVE9fRlNCKGFwLVx1MDAzZWlwKTtcbitcbitcdC8qIGZhbiBvdXQgaW5pdGlhbCBBRyBhY3Jvc3MgdGhlIGdlbmVyaWMgQUcgc2V0ICovXG4rXHRzdGFydF9hZyA9IFhGU19GU0JfVE9fQUdOTyhhcmdzLVx1MDAzZW1wLCBhcC1cdTAwM2VibGtubyk7XG4rXHR0YXJnZXRfYWcgPSB4ZnNfYWdfdG9fYWdfc2V0KGFwLCBzdGFydF9hZyk7XG4rXHRpZiAodGFyZ2V0X2FnICE9IHN0YXJ0X2FnKVxuK1x0XHRhcC1cdTAwM2VibGtubyA9IFhGU19BR0JfVE9fRlNCKGFyZ3MtXHUwMDNlbXAsIHRhcmdldF9hZywgMCk7XG4rXG4gXHRpZiAoIXhmc19ibWFwX2FkamFjZW50KGFwKSlcbiBcdFx0YXAtXHUwMDNlZW9mID0gZmFsc2U7XG4gXG5kaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19pY2FjaGUuYyBiL2ZzL3hmcy94ZnNfaWNhY2hlLmNcbmluZGV4IDlkOGRkMzBiZDkyN2EyLi43YjlkZGE3NDEyMmYwZSAxMDA2NDRcbi0tLSBhL2ZzL3hmcy94ZnNfaWNhY2hlLmNcbisrKyBiL2ZzL3hmcy94ZnNfaWNhY2hlLmNcbkBAIC0xMjksNiArMTI5LDcgQEAgeGZzX2lub2RlX2FsbG9jKFxuIFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2aXAtXHUwMDNlaV9pb2VuZF9sb2NrKTtcbiBcdGlwLVx1MDAzZWlfbmV4dF91bmxpbmtlZCA9IE5VTExBR0lOTztcbiBcdGlwLVx1MDAzZWlfcHJldl91bmxpbmtlZCA9IDA7XG4rXHRpcC1cdTAwM2VpX3dyaXRlX3N0cmVhbSA9IDA7XG4gXG4gXHRyZXR1cm4gaXA7XG4gfVxuZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfaW5vZGUuYyBiL2ZzL3hmcy94ZnNfaW5vZGUuY1xuaW5kZXggMTUyNzlkMjJhODk0ZmEuLjYzOGJlZTNlNGFjMjI4IDEwMDY0NFxuLS0tIGEvZnMveGZzL3hmc19pbm9kZS5jXG4rKysgYi9mcy94ZnMveGZzX2lub2RlLmNcbkBAIC00LDYgKzQsNyBAQFxuICAqIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gICovXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaXZlcnNpb24uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2Fub25faW5vZGVzLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcInhmc19wbGF0Zm9ybS5oXCJcbiAjaW5jbHVkZSBcInhmc19mcy5oXCJcbkBAIC00Nyw2ICs0OCwxODAgQEBcbiBcbiBzdHJ1Y3Qga21lbV9jYWNoZSAqeGZzX2lub2RlX2NhY2hlO1xuIFxuK2ludFxuK3hmc19pbm9kZV9tYXhfd3JpdGVfc3RyZWFtcyhcbitcdHN0cnVjdCB4ZnNfaW5vZGVcdCppcClcbit7XG4rXHRzdHJ1Y3QgYmxvY2tfZGV2aWNlXHQqYmRldjtcbitcdHN0cnVjdCB4ZnNfbW91bnRcdCptcCA9IGlwLVx1MDAzZWlfbW91bnQ7XG4rXHRpbnQgbnJfc3RyZWFtcztcbitcdHhmc19hZ251bWJlcl90IG5yX2FncywgYWdfc2V0X3NpemU7XG4rXHRib29sXHRcdFx0aXNfZmlsZXN0cmVhbSwgaXNfcmVhbHRpbWU7XG4rXG4rXHR4ZnNfaWxvY2soaXAsIFhGU19JTE9DS19TSEFSRUQpO1xuK1x0aXNfZmlsZXN0cmVhbSA9IHhmc19pbm9kZV9pc19maWxlc3RyZWFtKGlwKTtcbitcdGlzX3JlYWx0aW1lID0gWEZTX0lTX1JFQUxUSU1FX0lOT0RFKGlwKTtcbitcdGJkZXYgPSB4ZnNfaW5vZGVfYnVmdGFyZyhpcCktXHUwMDNlYnRfYmRldjtcbitcdHhmc19pdW5sb2NrKGlwLCBYRlNfSUxPQ0tfU0hBUkVEKTtcbitcbitcdGlmICghYmRldiB8fCBpc19maWxlc3RyZWFtIHx8IGlzX3JlYWx0aW1lKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdG5yX3N0cmVhbXMgPSBiZGV2X21heF93cml0ZV9zdHJlYW1zKGJkZXYpO1xuK1x0aWYgKG5yX3N0cmVhbXMgXHUwMDNlIDApXG4rXHRcdHJldHVybiBucl9zdHJlYW1zO1xuK1x0LypcbitcdCAqIEVuYWJsZSBzb2Z0d2FyZS1vbmx5IHN0cmVhbXMgaWYgaGFyZHdhcmUgc3RyZWFtcyBhcmUgbm90IGF2YWlsYWJsZS5cbitcdCAqIFRoaXMgaGVscHMgdG9cbitcdCAqIC0gaW1wcm92ZSBpc29sYXRpb247IHJlZHVjZSBhbGxvY2F0aW9uIGludGVybGVhdmluZy5cbitcdCAqIC0gaW1wcm92ZSBjb25jdXJyZW5jeSB1c2luZyBBRy1zZXQgYmFzZWQgc3RlZXJpbmcgd2l0aGluIGFuZCBhY3Jvc3Mgc3RyZWFtcy5cbitcdCAqL1xuK1x0bnJfYWdzID0gbXAtXHUwMDNlbV9zYi5zYl9hZ2NvdW50O1xuK1x0aWYgKG5yX2FncyBcdTAwM2U9IDE2KVxuK1x0XHRhZ19zZXRfc2l6ZSA9IDQ7XG4rXHRlbHNlIGlmIChucl9hZ3MgXHUwMDNlPSA4KVxuK1x0XHRhZ19zZXRfc2l6ZSA9IDI7XG4rXHRlbHNlXG4rXHRcdGFnX3NldF9zaXplID0gMTtcbitcdG5yX3N0cmVhbXMgPSBucl9hZ3MgLyBhZ19zZXRfc2l6ZTtcbitcdHJldHVybiBtaW5fdCh1aW50MTZfdCwgbnJfc3RyZWFtcywgWEZTX1NXX1dSSVRFX1NUUkVBTVNfTUFYKTtcbit9XG4rXG4rdWludDE2X3Rcbit4ZnNfaW5vZGVfZ2V0X3dyaXRlX3N0cmVhbShcbitcdHN0cnVjdCB4ZnNfaW5vZGVcdCppcClcbit7XG4rXHR1aW50MTZfdFx0c3RyZWFtX2lkO1xuK1xuK1x0eGZzX2lsb2NrKGlwLCBYRlNfSUxPQ0tfU0hBUkVEKTtcbitcdHN0cmVhbV9pZCA9IGlwLVx1MDAzZWlfd3JpdGVfc3RyZWFtO1xuK1x0eGZzX2l1bmxvY2soaXAsIFhGU19JTE9DS19TSEFSRUQpO1xuK1xuK1x0cmV0dXJuIHN0cmVhbV9pZDtcbit9XG4rXG4rc3RydWN0IHhmc193cml0ZV9zdHJlYW0ge1xuK1x0c3RydWN0IHhmc19tb3VudFx0Km1wO1xuK1x0dWludDE2X3RcdFx0c3RyZWFtX2lkO1x0LyogMS1iYXNlZCAqL1xuK307XG4rXG4rc3RhdGljIGludFxuK3hmc193cml0ZV9zdHJlYW1fcmVsZWFzZShcbitcdHN0cnVjdCBpbm9kZVx0XHQqaW5vZGUsXG4rXHRzdHJ1Y3QgZmlsZVx0XHQqZmlsZSlcbit7XG4rXHRzdHJ1Y3QgeGZzX3dyaXRlX3N0cmVhbVx0KndzID0gZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGE7XG4rXHRzdHJ1Y3QgeGZzX21vdW50XHQqbXAgPSB3cy1cdTAwM2VtcDtcbitcbitcdHNwaW5fbG9jayhcdTAwMjZtcC1cdTAwM2VtX3N0cmVhbXNfbG9jayk7XG4rXHRjbGVhcl9iaXQod3MtXHUwMDNlc3RyZWFtX2lkIC0gMSwgbXAtXHUwMDNlbV9zdHJlYW1zX2luX3VzZSk7XG4rXHRzcGluX3VubG9jayhcdTAwMjZtcC1cdTAwM2VtX3N0cmVhbXNfbG9jayk7XG4rXHRrZnJlZSh3cyk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgeGZzX3dyaXRlX3N0cmVhbV9mb3BzID0ge1xuK1x0LnJlbGVhc2VcdD0geGZzX3dyaXRlX3N0cmVhbV9yZWxlYXNlLFxuK1x0Lmxsc2Vla1x0XHQ9IG5vb3BfbGxzZWVrLFxuK307XG4rXG4raW50XG4reGZzX2lub2RlX3dyaXRlX3N0cmVhbV9vcGVuKFxuK1x0c3RydWN0IHhmc19pbm9kZVx0KmlwLFxuK1x0dTMyXHRcdFx0ZmxhZ3MsXG4rXHR1MzJcdFx0XHQqc3RyZWFtX2lkcClcbit7XG4rXHRzdHJ1Y3QgeGZzX21vdW50XHQqbXAgPSBpcC1cdTAwM2VpX21vdW50O1xuK1x0c3RydWN0IHhmc193cml0ZV9zdHJlYW1cdCp3cztcbitcdGludFx0XHRcdG1heCwgc2xvdCwgZmQsIHJldDtcbitcbitcdGlmIChmbGFncyBcdTAwMjYgfkZTX1dSSVRFX1NUUkVBTV9PUEVOX0VYQUNUKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdG1heCA9IHhmc19pbm9kZV9tYXhfd3JpdGVfc3RyZWFtcyhpcCk7XG4rXHRpZiAoIW1heClcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1x0QVNTRVJUKG1wLVx1MDAzZW1fc3RyZWFtc19pbl91c2UpO1xuK1xuK1x0d3MgPSBrbWFsbG9jKHNpemVvZigqd3MpLCBHRlBfS0VSTkVMKTtcbitcdGlmICghd3MpXG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1xuK1x0c3Bpbl9sb2NrKFx1MDAyNm1wLVx1MDAzZW1fc3RyZWFtc19sb2NrKTtcbitcdGlmIChmbGFncyBcdTAwMjYgRlNfV1JJVEVfU1RSRUFNX09QRU5fRVhBQ1QpIHtcbitcdFx0aWYgKCEqc3RyZWFtX2lkcCB8fCAqc3RyZWFtX2lkcCBcdTAwM2UgbWF4KSB7XG4rXHRcdFx0cmV0ID0gLUVJTlZBTDtcbitcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4rXHRcdH1cbitcdFx0c2xvdCA9ICpzdHJlYW1faWRwIC0gMTtcbitcdFx0aWYgKHRlc3RfYml0KHNsb3QsIG1wLVx1MDAzZW1fc3RyZWFtc19pbl91c2UpKSB7XG4rXHRcdFx0cmV0ID0gLUVCVVNZO1xuK1x0XHRcdGdvdG8gb3V0X3VubG9jaztcbitcdFx0fVxuK1x0fSBlbHNlIHtcbitcdFx0c2xvdCA9IGZpbmRfZmlyc3RfemVyb19iaXQobXAtXHUwMDNlbV9zdHJlYW1zX2luX3VzZSwgbWF4KTtcbitcdFx0aWYgKHNsb3QgXHUwMDNlPSBtYXgpIHtcbitcdFx0XHRyZXQgPSAtRUJVU1k7XG4rXHRcdFx0Z290byBvdXRfdW5sb2NrO1xuK1x0XHR9XG4rXHR9XG4rXHRzZXRfYml0KHNsb3QsIG1wLVx1MDAzZW1fc3RyZWFtc19pbl91c2UpO1xuK1x0c3Bpbl91bmxvY2soXHUwMDI2bXAtXHUwMDNlbV9zdHJlYW1zX2xvY2spO1xuK1xuK1x0d3MtXHUwMDNlbXAgPSBtcDtcbitcdHdzLVx1MDAzZXN0cmVhbV9pZCA9IHNsb3QgKyAxO1x0LyogY29udmVydCB0byAxLWJhc2VkICovXG4rXG4rXHRmZCA9IGFub25faW5vZGVfZ2V0ZmQoXCJbeGZzX3dyaXRlX3N0cmVhbV1cIiwgXHUwMDI2eGZzX3dyaXRlX3N0cmVhbV9mb3BzLCB3cyxcbitcdFx0XHQgICAgICBPX1JET05MWSB8IE9fQ0xPRVhFQyk7XG4rXHRpZiAoZmQgXHUwMDNjIDApIHtcbitcdFx0c3Bpbl9sb2NrKFx1MDAyNm1wLVx1MDAzZW1fc3RyZWFtc19sb2NrKTtcbitcdFx0Y2xlYXJfYml0KHNsb3QsIG1wLVx1MDAzZW1fc3RyZWFtc19pbl91c2UpO1xuK1x0XHRzcGluX3VubG9jayhcdTAwMjZtcC1cdTAwM2VtX3N0cmVhbXNfbG9jayk7XG4rXHRcdGtmcmVlKHdzKTtcbitcdFx0cmV0dXJuIGZkO1xuK1x0fVxuK1xuK1x0KnN0cmVhbV9pZHAgPSB3cy1cdTAwM2VzdHJlYW1faWQ7XG4rXHRyZXR1cm4gZmQ7XG4rXG4rb3V0X3VubG9jazpcbitcdHNwaW5fdW5sb2NrKFx1MDAyNm1wLVx1MDAzZW1fc3RyZWFtc19sb2NrKTtcbitcdGtmcmVlKHdzKTtcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK2ludFxuK3hmc19pbm9kZV9zZXRfd3JpdGVfc3RyZWFtKFxuK1x0c3RydWN0IHhmc19pbm9kZVx0KmlwLFxuK1x0aW50XHRcdFx0c3RyZWFtX2ZkKVxuK3tcbitcdENMQVNTKGZkLCBmKShzdHJlYW1fZmQpO1xuK1x0c3RydWN0IHhmc193cml0ZV9zdHJlYW1cdCp3cztcbitcdGludFx0XHRcdHJldCA9IDA7XG4rXG4rXHRpZiAoIWZkX2ZpbGUoZikpXG4rXHRcdHJldHVybiAtRUJBREY7XG4rXHRpZiAoZmRfZmlsZShmKS1cdTAwM2VmX29wICE9IFx1MDAyNnhmc193cml0ZV9zdHJlYW1fZm9wcylcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHR3cyA9IGZkX2ZpbGUoZiktXHUwMDNlcHJpdmF0ZV9kYXRhO1xuK1x0aWYgKHdzLVx1MDAzZW1wICE9IGlwLVx1MDAzZWlfbW91bnQpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0eGZzX2lsb2NrKGlwLCBYRlNfSUxPQ0tfRVhDTCk7XG4rXG4rXHRpZiAoWEZTX0lTX1JFQUxUSU1FX0lOT0RFKGlwKSB8fCB4ZnNfaW5vZGVfaXNfZmlsZXN0cmVhbShpcCkgfHxcbitcdCAgICBWRlNfSShpcCktXHUwMDNlaV93cml0ZV9oaW50ICE9IFdSSVRFX0xJRkVfTk9UX1NFVCkge1xuK1x0XHRyZXQgPSAtRUlOVkFMO1xuK1x0XHRnb3RvIG91dF91bmxvY2s7XG4rXHR9XG4rXG4rXHRpcC1cdTAwM2VpX3dyaXRlX3N0cmVhbSA9IHdzLVx1MDAzZXN0cmVhbV9pZDtcbitvdXRfdW5sb2NrOlxuK1x0eGZzX2l1bmxvY2soaXAsIFhGU19JTE9DS19FWENMKTtcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuIC8qXG4gICogVGhlc2UgdHdvIGFyZSB3cmFwcGVyIHJvdXRpbmVzIGFyb3VuZCB0aGUgeGZzX2lsb2NrKCkgcm91dGluZSB1c2VkIHRvXG4gICogY2VudHJhbGl6ZSBzb21lIGdydW5neSBjb2RlLiAgVGhleSBhcmUgdXNlZCBpbiBwbGFjZXMgdGhhdCB3aXNoIHRvIGxvY2sgdGhlXG5kaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19pbm9kZS5oIGIvZnMveGZzL3hmc19pbm9kZS5oXG5pbmRleCAzNGMxMDM4ZWJmY2RlMS4uNmFiZjgyZmZiZjgyYWMgMTAwNjQ0XG4tLS0gYS9mcy94ZnMveGZzX2lub2RlLmhcbisrKyBiL2ZzL3hmcy94ZnNfaW5vZGUuaFxuQEAgLTM3LDYgKzM3LDkgQEAgdHlwZWRlZiBzdHJ1Y3QgeGZzX2lub2RlIHtcbiBcdHN0cnVjdCB4ZnNfaWZvcmtcdGlfZGY7XHRcdC8qIGRhdGEgZm9yayAqL1xuIFx0c3RydWN0IHhmc19pZm9ya1x0aV9hZjtcdFx0LyogYXR0cmlidXRlIGZvcmsgKi9cbiBcbitcdC8qIFdyaXRlIHN0cmVhbSBpbmZvcm1hdGlvbiAqL1xuK1x0dWludDE2X3RcdFx0aV93cml0ZV9zdHJlYW07XG4rXG4gXHQvKiBUcmFuc2FjdGlvbiBhbmQgbG9ja2luZyBpbmZvcm1hdGlvbi4gKi9cbiBcdHN0cnVjdCB4ZnNfaW5vZGVfbG9nX2l0ZW0gKmlfaXRlbXA7XHQvKiBsb2dnaW5nIGluZm9ybWF0aW9uICovXG4gXHRzdHJ1Y3Qgcndfc2VtYXBob3JlXHRpX2xvY2s7XHRcdC8qIGlub2RlIGxvY2sgKi9cbkBAIC02NzMsNCArNjc2LDkgQEAgaW50IHhmc19pY3JlYXRlX2RxYWxsb2MoY29uc3Qgc3RydWN0IHhmc19pY3JlYXRlX2FyZ3MgKmFyZ3MsXG4gXHRcdHN0cnVjdCB4ZnNfZHF1b3QgKip1ZHFwcCwgc3RydWN0IHhmc19kcXVvdCAqKmdkcXBwLFxuIFx0XHRzdHJ1Y3QgeGZzX2RxdW90ICoqcGRxcHApO1xuIFxuK2ludCB4ZnNfaW5vZGVfbWF4X3dyaXRlX3N0cmVhbXMoc3RydWN0IHhmc19pbm9kZSAqaXApO1xuK3VpbnQxNl90IHhmc19pbm9kZV9nZXRfd3JpdGVfc3RyZWFtKHN0cnVjdCB4ZnNfaW5vZGUgKmlwKTtcbitpbnQgeGZzX2lub2RlX3dyaXRlX3N0cmVhbV9vcGVuKHN0cnVjdCB4ZnNfaW5vZGUgKmlwLCB1MzIgZmxhZ3MsXG4rXHRcdHUzMiAqc3RyZWFtX2lkcCk7XG4raW50IHhmc19pbm9kZV9zZXRfd3JpdGVfc3RyZWFtKHN0cnVjdCB4ZnNfaW5vZGUgKmlwLCBpbnQgc3RyZWFtX2ZkKTtcbiAjZW5kaWZcdC8qIF9fWEZTX0lOT0RFX0hfXyAqL1xuZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfaW9jdGwuYyBiL2ZzL3hmcy94ZnNfaW9jdGwuY1xuaW5kZXggMWI1MzcwMWJlYmVhMWEuLjg2NDBlNjM4OTc2ODNmIDEwMDY0NFxuLS0tIGEvZnMveGZzL3hmc19pb2N0bC5jXG4rKysgYi9mcy94ZnMveGZzX2lvY3RsLmNcbkBAIC01NTcsNiArNTU3LDEyIEBAIHhmc19pb2N0bF9zZXRhdHRyX3hmbGFncyhcbiBcdGJvb2xcdFx0XHRydGZsYWcgPSAoZmEtXHUwMDNlZnN4X3hmbGFncyBcdTAwMjYgRlNfWEZMQUdfUkVBTFRJTUUpO1xuIFx0dWludDY0X3RcdFx0aV9mbGFnczI7XG4gXG4rXHRpZiAoKGZhLVx1MDAzZWZzeF94ZmxhZ3MgXHUwMDI2IEZTX1hGTEFHX0ZJTEVTVFJFQU0pIFx1MDAyNlx1MDAyNiBpcC1cdTAwM2VpX3dyaXRlX3N0cmVhbSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRpZiAocnRmbGFnIFx1MDAyNlx1MDAyNiBpcC1cdTAwM2VpX3dyaXRlX3N0cmVhbSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4gXHRpZiAocnRmbGFnICE9IFhGU19JU19SRUFMVElNRV9JTk9ERShpcCkpIHtcbiBcdFx0LyogQ2FuJ3QgY2hhbmdlIHJlYWx0aW1lIGZsYWcgaWYgYW55IGV4dGVudHMgYXJlIGFsbG9jYXRlZC4gKi9cbiBcdFx0aWYgKHhmc19pbm9kZV9oYXNfZmlsZWRhdGEoaXApKVxuQEAgLTEyMDAsNiArMTIwNiw1OSBAQCB4ZnNfaW9jdGxfZnNfY291bnRzKFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyBpbnRcbit4ZnNfaW9jX3dyaXRlX3N0cmVhbV9vcGVuKFxuK1x0c3RydWN0IGZpbGVcdFx0KmZpbHAsXG4rXHR2b2lkIF9fdXNlclx0XHQqYXJnKVxuK3tcbitcdHN0cnVjdCB4ZnNfaW5vZGVcdCppcCA9IFhGU19JKGZpbGVfaW5vZGUoZmlscCkpO1xuK1x0c3RydWN0IGZzX3dyaXRlX3N0cmVhbV9vcGVuIHdzbztcbitcdGludFx0XHRcdGZkO1xuK1xuK1x0aWYgKGNvcHlfZnJvbV91c2VyKFx1MDAyNndzbywgYXJnLCBzaXplb2Yod3NvKSkpXG4rXHRcdHJldHVybiAtRUZBVUxUO1xuK1xuK1x0ZmQgPSB4ZnNfaW5vZGVfd3JpdGVfc3RyZWFtX29wZW4oaXAsIHdzby5mbGFncywgXHUwMDI2d3NvLnN0cmVhbV9pZCk7XG4rXHRpZiAoZmQgXHUwMDNjIDApXG4rXHRcdHJldHVybiBmZDtcbitcbitcdGlmIChjb3B5X3RvX3VzZXIoYXJnLCBcdTAwMjZ3c28sIHNpemVvZih3c28pKSlcbitcdFx0cmV0dXJuIC1FRkFVTFQ7XG4rXHRyZXR1cm4gZmQ7XG4rfVxuK1xuK3N0YXRpYyBpbnRcbit4ZnNfaW9jX3dyaXRlX3N0cmVhbV9zZXQoXG4rXHRzdHJ1Y3QgZmlsZVx0XHQqZmlscCxcbitcdHVuc2lnbmVkIGxvbmdcdFx0YXJnKVxuK3tcbitcdHN0cnVjdCB4ZnNfaW5vZGVcdCppcCA9IFhGU19JKGZpbGVfaW5vZGUoZmlscCkpO1xuK1xuK1x0aWYgKCEoZmlscC1cdTAwM2VmX21vZGUgXHUwMDI2IEZNT0RFX1dSSVRFKSlcbitcdFx0cmV0dXJuIC1FQkFERjtcbitcdHJldHVybiB4ZnNfaW5vZGVfc2V0X3dyaXRlX3N0cmVhbShpcCwgKGludClhcmcpO1xuK31cbitcbitzdGF0aWMgaW50XG4reGZzX2lvY193cml0ZV9zdHJlYW1fZ2V0KFxuK1x0c3RydWN0IHhmc19pbm9kZVx0KmlwLFxuK1x0dm9pZCBfX3VzZXJcdFx0KmFyZylcbit7XG4rXHRfX3UzMiBzdHJlYW1faWQgPSB4ZnNfaW5vZGVfZ2V0X3dyaXRlX3N0cmVhbShpcCk7XG4rXG4rXHRyZXR1cm4gcHV0X3VzZXIoc3RyZWFtX2lkLCAoX191MzIgX191c2VyICopYXJnKTtcbit9XG4rXG4rc3RhdGljIGludFxuK3hmc19pb2Nfd3JpdGVfc3RyZWFtX2dldF9tYXgoXG4rXHRzdHJ1Y3QgeGZzX2lub2RlXHQqaXAsXG4rXHR2b2lkIF9fdXNlclx0XHQqYXJnKVxuK3tcbitcdF9fdTMyIG5yX3N0cmVhbXMgPSB4ZnNfaW5vZGVfbWF4X3dyaXRlX3N0cmVhbXMoaXApO1xuK1xuK1x0cmV0dXJuIHB1dF91c2VyKG5yX3N0cmVhbXMsIChfX3UzMiBfX3VzZXIgKilhcmcpO1xuK31cbitcbiAvKlxuICAqIFRoZXNlIGxvbmctdW51c2VkIGlvY3RscyB3ZXJlIHJlbW92ZWQgZnJvbSB0aGUgb2ZmaWNpYWwgaW9jdGwgQVBJIGluIDUuMTcsXG4gICogYnV0IHJldGFpbiB0aGVzZSBkZWZpbml0aW9ucyBzbyB0aGF0IHdlIGNhbiBsb2cgd2FybmluZ3MgYWJvdXQgdGhlbS5cbkBAIC0xNDY1LDYgKzE1MjQsMTYgQEAgeGZzX2ZpbGVfaW9jdGwoXG4gXHRcdHJldHVybiB4ZnNfaW9jX2hlYWx0aF9tb25pdG9yKGZpbHAsIGFyZyk7XG4gXHRjYXNlIFhGU19JT0NfVkVSSUZZX01FRElBOlxuIFx0XHRyZXR1cm4geGZzX2lvY192ZXJpZnlfbWVkaWEoZmlscCwgYXJnKTtcbitcdGNhc2UgRlNfSU9DX1dSSVRFX1NUUkVBTV9PUEVOOlxuK1x0XHRyZXR1cm4geGZzX2lvY193cml0ZV9zdHJlYW1fb3BlbihmaWxwLCAodm9pZCBfX3VzZXIgKilhcmcpO1xuK1x0Y2FzZSBGU19JT0NfV1JJVEVfU1RSRUFNX1NFVDpcbitcdFx0cmV0dXJuIHhmc19pb2Nfd3JpdGVfc3RyZWFtX3NldChmaWxwLCBwKTtcbitcdGNhc2UgRlNfSU9DX1dSSVRFX1NUUkVBTV9HRVQ6XG4rXHRcdHJldHVybiB4ZnNfaW9jX3dyaXRlX3N0cmVhbV9nZXQoWEZTX0koZmlsZV9pbm9kZShmaWxwKSksXG4rXHRcdFx0XHRcdFx0KHZvaWQgX191c2VyICopYXJnKTtcbitcdGNhc2UgRlNfSU9DX1dSSVRFX1NUUkVBTV9HRVRfTUFYOlxuK1x0XHRyZXR1cm4geGZzX2lvY193cml0ZV9zdHJlYW1fZ2V0X21heChYRlNfSShmaWxlX2lub2RlKGZpbHApKSxcbitcdFx0XHRcdFx0XHQgICAgKHZvaWQgX191c2VyICopYXJnKTtcbiBcbiBcdGRlZmF1bHQ6XG4gXHRcdHJldHVybiAtRU5PVFRZO1xuZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfaW9tYXAuYyBiL2ZzL3hmcy94ZnNfaW9tYXAuY1xuaW5kZXggMjI1YzNkZTg4ZDAzYjEuLmJmNDIzODk3ZDkxNmRmIDEwMDY0NFxuLS0tIGEvZnMveGZzL3hmc19pb21hcC5jXG4rKysgYi9mcy94ZnMveGZzX2lvbWFwLmNcbkBAIC0xNDQsNiArMTQ0LDcgQEAgeGZzX2JtYnRfdG9faW9tYXAoXG4gXHR9XG4gXHRpb21hcC1cdTAwM2VvZmZzZXQgPSBYRlNfRlNCX1RPX0IobXAsIGltYXAtXHUwMDNlYnJfc3RhcnRvZmYpO1xuIFx0aW9tYXAtXHUwMDNlbGVuZ3RoID0gWEZTX0ZTQl9UT19CKG1wLCBpbWFwLVx1MDAzZWJyX2Jsb2NrY291bnQpO1xuK1x0aW9tYXAtXHUwMDNld3JpdGVfc3RyZWFtID0gaXAtXHUwMDNlaV93cml0ZV9zdHJlYW07XG4gXHRpZiAobWFwcGluZ19mbGFncyBcdTAwMjYgSU9NQVBfREFYKSB7XG4gXHRcdGlvbWFwLVx1MDAzZWRheF9kZXYgPSB0YXJnZXQtXHUwMDNlYnRfZGF4ZGV2O1xuIFx0fSBlbHNlIHtcbmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX21vdW50LmggYi9mcy94ZnMveGZzX21vdW50LmhcbmluZGV4IDY2YTAyZDFiOWFkN2ExLi5hZDUxMTE1NTk0ZDNjOCAxMDA2NDRcbi0tLSBhL2ZzL3hmcy94ZnNfbW91bnQuaFxuKysrIGIvZnMveGZzL3hmc19tb3VudC5oXG5AQCAtNDUsNiArNDUsOCBAQCBlbnVtIHtcbiBcbiAjZGVmaW5lIFhGU19FUlJfUkVUUllfRk9SRVZFUlx0LTFcbiBcbisjZGVmaW5lIFhGU19TV19XUklURV9TVFJFQU1TX01BWFx0MTZcbitcbiAvKlxuICAqIEFsdGhvdWdoIHJldHJ5X3RpbWVvdXQgaXMgaW4gamlmZmllcyB3aGljaCBpcyBub3JtYWxseSBhbiB1bnNpZ25lZCBsb25nLFxuICAqIHdlIGxpbWl0IHRoZSByZXRyeSB0aW1lb3V0IHRvIDg2NDAwIHNlY29uZHMsIG9yIG9uZSBkYXkuICBTbyBldmVuIGFcbkBAIC0zNDksNiArMzUxLDkgQEAgdHlwZWRlZiBzdHJ1Y3QgeGZzX21vdW50IHtcbiBcbiBcdC8qIEluZGV4IG9mIHV1aWQgcmVjb3JkIGluIHRoZSB1dWlkIHhhcnJheS4gKi9cbiBcdHVuc2lnbmVkIGludFx0XHRtX3V1aWRfdGFibGVfaW5kZXg7XG4rXG4rXHR1bnNpZ25lZCBsb25nXHRcdCptX3N0cmVhbXNfaW5fdXNlO1xuK1x0c3BpbmxvY2tfdFx0XHRtX3N0cmVhbXNfbG9jaztcbiB9IHhmc19tb3VudF90O1xuIFxuICNkZWZpbmUgTV9JR0VPKG1wKVx0XHQoXHUwMDI2KG1wKS1cdTAwM2VtX2lub19nZW8pXG5kaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19zdXBlci5jIGIvZnMveGZzL3hmc19zdXBlci5jXG5pbmRleCA4NTMxZDUyNmZjNDQwOS4uZDY5OGJlNTA0YzQ1NDggMTAwNjQ0XG4tLS0gYS9mcy94ZnMveGZzX3N1cGVyLmNcbisrKyBiL2ZzL3hmcy94ZnNfc3VwZXIuY1xuQEAgLTgwNSw2ICs4MDUsNyBAQCB4ZnNfbW91bnRfZnJlZShcbiAjaWZkZWYgREVCVUdcbiBcdGtmcmVlKG1wLVx1MDAzZW1fZXJyb3J0YWcpO1xuICNlbmRpZlxuK1x0Yml0bWFwX2ZyZWUobXAtXHUwMDNlbV9zdHJlYW1zX2luX3VzZSk7XG4gXHRrZnJlZShtcCk7XG4gfVxuIFxuQEAgLTE2NTksNiArMTY2MCw3IEBAIHhmc19mc19maWxsX3N1cGVyKFxuIFx0c3RydWN0IHhmc19tb3VudFx0Km1wID0gc2ItXHUwMDNlc19mc19pbmZvO1xuIFx0c3RydWN0IGlub2RlXHRcdCpyb290O1xuIFx0aW50XHRcdFx0ZmxhZ3MgPSAwLCBlcnJvcjtcbitcdGludFx0XHRcdG5yX3N0cmVhbXM7XG4gXG4gXHRtcC1cdTAwM2VtX3N1cGVyID0gc2I7XG4gXG5AQCAtMTcwOCw2ICsxNzEwLDE1IEBAIHhmc19mc19maWxsX3N1cGVyKFxuIFx0aWYgKGVycm9yKVxuIFx0XHRyZXR1cm4gZXJyb3I7XG4gXG4rXHRucl9zdHJlYW1zID0gYmRldl9tYXhfd3JpdGVfc3RyZWFtcyhtcC1cdTAwM2VtX2RkZXZfdGFyZ3AtXHUwMDNlYnRfYmRldik7XG4rXHRpZiAoIW5yX3N0cmVhbXMpXG4rXHRcdG5yX3N0cmVhbXMgPSBYRlNfU1dfV1JJVEVfU1RSRUFNU19NQVg7XG4rXHRtcC1cdTAwM2VtX3N0cmVhbXNfaW5fdXNlID0gYml0bWFwX3phbGxvYyhucl9zdHJlYW1zLCBHRlBfS0VSTkVMKTtcbitcdGlmICghbXAtXHUwMDNlbV9zdHJlYW1zX2luX3VzZSkge1xuK1x0XHRlcnJvciA9IC1FTk9NRU07XG4rXHRcdGdvdG8gb3V0X3NodXRkb3duX2RldmljZXM7XG4rXHR9XG4rXG4gXHRpZiAoeGZzX2RlYnVnZnMpIHtcbiBcdFx0bXAtXHUwMDNlbV9kZWJ1Z2ZzID0geGZzX2RlYnVnZnNfbWtkaXIobXAtXHUwMDNlbV9zdXBlci1cdTAwM2VzX2lkLFxuIFx0XHRcdFx0XHRcdCAgeGZzX2RlYnVnZnMpO1xuQEAgLTIyNDksNiArMjI2MCw3IEBAIHhmc19pbml0X2ZzX2NvbnRleHQoXG4gI2VuZGlmXG4gXG4gXHRzcGluX2xvY2tfaW5pdChcdTAwMjZtcC1cdTAwM2VtX3NiX2xvY2spO1xuK1x0c3Bpbl9sb2NrX2luaXQoXHUwMDI2bXAtXHUwMDNlbV9zdHJlYW1zX2xvY2spO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgWEdfVFlQRV9NQVg7IGkrKylcbiBcdFx0eGFfaW5pdChcdTAwMjZtcC1cdTAwM2VtX2dyb3Vwc1tpXS54YSk7XG4gXHRtdXRleF9pbml0KFx1MDAyNm1wLVx1MDAzZW1fZ3Jvd2xvY2spO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaW9tYXAuaCBiL2luY2x1ZGUvbGludXgvaW9tYXAuaFxuaW5kZXggNTZiNDNkNTk0ZTZlMjkuLjRkYzcxZGE1OThmOTlkIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9pb21hcC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2lvbWFwLmhcbkBAIC0xMzIsNiArMTMyLDggQEAgc3RydWN0IGlvbWFwIHtcbiBcdHU2NFx0XHRcdGxlbmd0aDtcdC8qIGxlbmd0aCBvZiBtYXBwaW5nLCBieXRlcyAqL1xuIFx0dTE2XHRcdFx0dHlwZTtcdC8qIHR5cGUgb2YgbWFwcGluZyAqL1xuIFx0dTE2XHRcdFx0ZmxhZ3M7XHQvKiBmbGFncyBmb3IgbWFwcGluZyAqL1xuK1x0dTE2XHRcdFx0d3JpdGVfc3RyZWFtOyAvKiB3cml0ZSBzdHJlYW0gZm9yIEkvTyAqL1xuK1x0LyogMiBieXRlcyBwYWRkaW5nIGhvbGUgaGVyZSAqL1xuIFx0c3RydWN0IGJsb2NrX2RldmljZVx0KmJkZXY7XHQvKiBibG9jayBkZXZpY2UgZm9yIEkvTyAqL1xuIFx0c3RydWN0IGRheF9kZXZpY2VcdCpkYXhfZGV2OyAvKiBkYXhfZGV2IGZvciBkYXggb3BlcmF0aW9ucyAqL1xuIFx0dm9pZFx0XHRcdCppbmxpbmVfZGF0YTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvZnMuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9mcy5oXG5pbmRleCBiZDg3MjYyZjJlMzQ5NC4uYTc1NmQyN2JkZjg0MTcgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvZnMuaFxuKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L2ZzLmhcbkBAIC0zNDUsNiArMzQ1LDIyIEBAIHN0cnVjdCBmaWxlX2F0dHIge1xuIC8qIEdldCBsb2dpY2FsIGJsb2NrIG1ldGFkYXRhIGNhcGFiaWxpdHkgZGV0YWlscyAqL1xuICNkZWZpbmUgRlNfSU9DX0dFVExCTURfQ0FQXHRcdF9JT1dSKDB4MTUsIDIsIHN0cnVjdCBsb2dpY2FsX2Jsb2NrX21ldGFkYXRhX2NhcClcbiBcbitzdHJ1Y3QgZnNfd3JpdGVfc3RyZWFtX29wZW4ge1xuK1x0X191MzJcdFx0c3RyZWFtX2lkO1x0LyogSU46IHJlcXVlc3RlZCBpZCBpZiBPUEVOX0VYQUNUIHNldDsgT1VUOiBhc3NpZ25lZCBpZCAqL1xuK1x0X191MzJcdFx0ZmxhZ3M7XHRcdC8qIElOOiBGU19XUklURV9TVFJFQU1fT1BFTl8qICovXG4rfTtcbitcbisvKlxuKyAqIEZsYWcgdG8gYXNrIGZvciBzcGVjaWZpYyBzdHJlYW1faWQsIG90aGVyd2lzZSBrZXJuZWwgY2FuIHJldHVybiBhbnkuXG4rICogRmFpbHMgd2l0aCAtRUJVU1kgaWYgdGhhdCBzdHJlYW1faWQgaXMgYWxyZWFkeSBoZWxkXG4rICovXG4rI2RlZmluZSBGU19XUklURV9TVFJFQU1fT1BFTl9FWEFDVFx0KDEgXHUwMDNjXHUwMDNjIDApXG4rXG4rI2RlZmluZSBGU19JT0NfV1JJVEVfU1RSRUFNX0dFVF9NQVhcdF9JT1IoJ2YnLCAxMzUsIF9fdTMyKVxuKyNkZWZpbmUgRlNfSU9DX1dSSVRFX1NUUkVBTV9PUEVOXHRfSU9XUignZicsIDEzNiwgc3RydWN0IGZzX3dyaXRlX3N0cmVhbV9vcGVuKVxuKyNkZWZpbmUgRlNfSU9DX1dSSVRFX1NUUkVBTV9TRVRcdFx0X0lPVygnZicsIDEzNywgX19zMzIpXG4rI2RlZmluZSBGU19JT0NfV1JJVEVfU1RSRUFNX0dFVFx0XHRfSU9SKCdmJywgMTM4LCBfX3UzMilcbitcbiAvKlxuICAqIElub2RlIGZsYWdzIChGU19JT0NfR0VURkxBR1MgLyBGU19JT0NfU0VURkxBR1MpXG4gICpcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE3VDE2OjA2OjA1LjE4OTYxNTQyMVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg0ODg5NDEyNzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgV3JpdGUgU3RyZWFtcyBQYXRjaCBTZXJpZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHNlcmllcyBpbnRyb2R1Y2luZyBcIndyaXRlIHN0cmVhbXNcIiBzdXBwb3J0IGZvciBYRlMgYW5kIGlvbWFwLiBJbW1lZGlhdGVseSwgSSBzZWUgaXQncyBhIGZ1bmN0aW9uYWwgYWRkaXRpb24sIG5vdCBqdXN0IGEgYnVnIGZpeC4gVGhhdCBtZWFucyBJIG5lZWQgdG8gYmUgbW9yZSB0aG9yb3VnaCBpbiBteSBhbmFseXNpcy4gSXQncyBhZGRpbmcgbmV3IGlvY3RscyDigJMgYEZTX0lPQ19XUklURV9TVFJFQU1fR0VUX01BWGAsIGBGU19JT0NfV1JJVEVfU1RSRUFNX09QRU5gLCBgRlNfSU9DX1dSSVRFX1NUUkVBTV9TRVRgLCBhbmQgYEZTX0lPQ19XUklURV9TVFJFQU1fR0VUYCDigJMgd2hpY2ggaXMgdGhlIGZpcnN0IHJlZCBmbGFnLiBOZXcgaW9jdGxzIGFsd2F5cyB3YXJyYW50IGV4dHJhIHNjcnV0aW55LCBhcyB0aGV5IGFyZSBhIHNpZ25pZmljYW50IGludGVyZmFjZSBjaGFuZ2UgYW5kIGNhbiBpbnRyb2R1Y2Ugc3VidGxlIGludGVyYWN0aW9ucyB3aXRoIGV4aXN0aW5nIGZ1bmN0aW9uYWxpdHkuXG5cblRoZSBtb2RpZmljYXRpb25zIHRvIGBmcy94ZnMveGZzX2lvY3RsLmNgIGFuZCBgZnMveGZzL3hmc19pbm9kZS5jYCBhcmUgZXhwZWN0ZWQsIHRoYXQncyB3aGVyZSB0aGUgY29yZSBpb2N0bCBoYW5kbGluZyBhbmQgaW5vZGUtbGV2ZWwgc3RyZWFtIG9wZXJhdGlvbnMgd291bGQgcmVzaWRlLiBJIHdhbnQgdG8gZHJpbGwgaW50byB0aGUgYHhmc19pbm9kZV8qYCBmdW5jdGlvbnMuIEltcGxlbWVudGluZyBmdW5jdGlvbnMgc3VjaCBhcyBgeGZzX2lub2RlX3dyaXRlX3N0cmVhbV9vcGVuYCwgYHhmc19pbm9kZV9zZXRfd3JpdGVfc3RyZWFtYCwgYW5kIHRoZSBvdGhlcnMgaW5kaWNhdGUgdGhpcyBpcyB3aGVyZSB0aGUgY29yZSBsb2dpYyBvZiBtYW5hZ2luZyB0aGVzZSBzdHJlYW1zIHdpbGwgYmUuXG5cblRoZSBtb2RpZmljYXRpb24gdG8gYHhmc19ibWFwLmNgIGlzIHBhcnRpY3VsYXJseSBpbnRlcmVzdGluZy4gVGhlIGNvbW1lbnQgdGhhdCB0aGlzIHVzZXMgdGhlIHN0cmVhbSBJRCB0byBcImZhbiBvdXQgYWxsb2NhdGlvbnMgYWNyb3NzIEFHc1wiIGlzIGltcG9ydGFudC4gVGhpcyBzdWdnZXN0cyBhIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBiZW5lZml0IChhbmQgcGVyaGFwcyBhIGtleSBkZXNpZ24gZ29hbCBvZiB0aGUgcGF0Y2gpLCBidXQgYWxzbyBhZGRzIGNvbXBsZXhpdHkgdG8gdGhlIGJsb2NrIGFsbG9jYXRpb24gbG9naWMuIFRoaXMgaXMgZGVmaW5pdGVseSBzb21ld2hlcmUgSSdsbCB3YW50IHRvIGZvY3VzIG9uIHdoZW4gSSdtIGFzc2Vzc2luZyBpdC5cblxuVGhlIGNoYW5nZXMgaW4gYGZzL2lvbWFwL2RpcmVjdC1pby5jYCBhbmQgYGZzL2lvbWFwL2lvZW5kLmNgIHRoYXQgbm93IHBhc3MgdGhlIHdyaXRlIHN0cmVhbSBJRCB0byB0aGUgYmlvIGFyZSBhIG5hdHVyYWwgY29uc2VxdWVuY2Ugb2YgdGhlIHN0cmVhbSBjb25jZXB0LiBUaGlzIGNoYW5nZSBpcyBjcnVjaWFsIHRvIGVuc3VyZSB0aGF0IHRoZSBpb21hcCBsYXllciB1bmRlcnN0YW5kcyB3aGljaCBzdHJlYW0gaXMgYXNzb2NpYXRlZCB3aXRoIGVhY2ggYmxvY2sgSS9PIG9wZXJhdGlvbi5cblxuR2l2ZW4gdGhhdCB0aGlzIGludHJvZHVjZXMgbmV3IGlvY3RscyBhbmQgbW9kaWZpZXMgYmxvY2sgYWxsb2NhdGlvbiwgZnV6emluZyBpcyBhYnNvbHV0ZWx5IGVzc2VudGlhbC4gSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBrZXkgZnVuY3Rpb25zIHRvIHN1YmplY3QgdG8gZnV6emluZy4gTGV0J3Mgc2VlLi4uIEknZCBzdGFydCB3aXRoIHRoZXNlIGlvY3RsIGhhbmRsZXJzOiBgeGZzX2lvY193cml0ZV9zdHJlYW1fb3BlbmAsIGB4ZnNfaW9jX3dyaXRlX3N0cmVhbV9zZXRgLCBgeGZzX2lvY193cml0ZV9zdHJlYW1fZ2V0YCwgYHhmc19pb2Nfd3JpdGVfc3RyZWFtX2dldF9tYXhgLiBJIGFsc28gbmVlZCB0byBmdXp6IHRoZSBhc3NvY2lhdGVkIGlub2RlIG1ldGhvZHM6IGB4ZnNfaW5vZGVfd3JpdGVfc3RyZWFtX29wZW5gLCBgeGZzX2lub2RlX3NldF93cml0ZV9zdHJlYW1gLCBgeGZzX2lub2RlX2dldF93cml0ZV9zdHJlYW1gLCBhbmQgYHhmc19pbm9kZV9tYXhfd3JpdGVfc3RyZWFtc2AuIEl0IGxvb2tzIGxpa2UgYHhmc193cml0ZV9zdHJlYW1fcmVsZWFzZWAsIGB4ZnNfaW5vZGVfd3JpdGVfc3RyZWFtX2FnX3NldGAsIGFuZCBgeGZzX2FnX3RvX2FnX3NldGAgYXJlIGFsc28gaW1wb3J0YW50IHRvIHRlc3QsIGluIGNhc2UgdGhleSBhcmUgdXNlZCBpbiBzdHJlYW0gbWFuYWdlbWVudC5cblxuRmluYWxseSwgSSBuZWVkIHRvIHZlcmlmeSBkZXBlbmRlbmNpZXMuIFNpbmNlIHRoaXMgaXMgWEZTLXNwZWNpZmljLCBgWEZTX0ZTYCBpcyBhIGdpdmVuLiBCdXQgSSB3YW50IHRvIGNoZWNrIGZvciBhbnkgbW9yZSBzcGVjaWZpYyBjb25maWcgb3B0aW9ucy4gQSBxdWljayBncmVwIG9mIHRoZSBLY29uZmlnIGZpbGVzIGZvciBcIldSSVRFX1NUUkVBTVwiIHNob3VsZCBnaXZlIG1lIGEgcXVpY2sgYW5zd2VyLiBHb29kLCB0aGlzIGlzIGEgc29saWQgc3RhcnQuIE5vdywgbGV0J3MgZGl2ZSBpbnRvIHRoZSBjb2RlLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkyNjksIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OTAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xN1QxNjowNjoxMy42Nzg1NTg1NDFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTg5NjkxNTksIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIldSSVRFX1NUUkVBTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy94ZnMvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTdUMTY6MDY6MTMuNzM3NTM1MTZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODI5MzYwNzQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqS2NvbmZpZyBFeHBsb3JhdGlvbiBmb3IgV1JJVEVfU1RSRUFNKipcblxuQWxyaWdodCwgdGltZSB0byBkaXZlIGludG8gdGhpcyBLY29uZmlnIGxhYnlyaW50aC4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBnbyBzdHJhaWdodCB0byB0aGUgc291cmNlLiBJJ20gZ29pbmcgdG8gc3RhcnQgd2l0aCBhIGJyb2FkIHN3ZWVwIOKAkyBhIGNsYXNzaWMgYGdyZXBgLiBJIHdhbnQgdG8gc2VlICpldmVyeXdoZXJlKiBgV1JJVEVfU1RSRUFNYCBpcyBtZW50aW9uZWQgYWNyb3NzIGFsbCB0aGUgS2NvbmZpZyBmaWxlcy4gVGhpcyB3aWxsIGJlIHRoZSBmb3VuZGF0aW9uYWwgc2Nhbi4gVGhlIGdvYWwgaXNuJ3QgbmVjZXNzYXJpbHkgdG8gc29sdmUgYW55dGhpbmcgaW1tZWRpYXRlbHksIGJ1dCB0byBnZXQgYSBsYXkgb2YgdGhlIGxhbmQsIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoZSB2YXJpYWJsZSdzIHVzYWdlLiBXZSdyZSB0YWxraW5nIGFib3V0IGEgcXVpY2sgYW5kIGRpcnR5IHNlYXJjaCBmb3Igb2NjdXJyZW5jZXMsIGRlcGVuZGVuY2llcywgYW5kIHBlcmhhcHMgc29tZSBpbml0aWFsIGNvbnRleHQsIEkgd2FudCB0byB1c2UgYGdyZXBgIGFzIGEgcHJpbWFyeSBpbnZlc3RpZ2F0aXZlIHRvb2wgZm9yIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNTE2LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTdUMTY6MDY6MTcuNTY2ODk3OTkxWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcwMjI5ODYyMTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiV1JJVEVfU1RSRUFNXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2F0YS9saWJhdGEtZWguYz0yNDg3PWNvbnN0IGNoYXIgKmF0YV9nZXRfY21kX25hbWUodTggY29tbWFuZClcXG4tLVxcbmRyaXZlcnMvYXRhL2xpYmF0YS1laC5jLTI1MTUtXFx0XFx0eyBBVEFfQ01EX1dSSVRFX1FVRVVFRCxcXHRcXHRcXFwiV1JJVEUgRE1BIFFVRVVFRCBFWFRcXFwiIH0sXFxuZHJpdmVycy9hdGEvbGliYXRhLWVoLmM6MjUxNjpcXHRcXHR7IEFUQV9DTURfV1JJVEVfU1RSRUFNX0VYVCxcXHRcXFwiV1JJVEUgU1RSRUFNIEVYVFxcXCIgfSxcXG5kcml2ZXJzL2F0YS9saWJhdGEtZWguYzoyNTE3OlxcdFxcdHsgQVRBX0NNRF9XUklURV9TVFJFQU1fRE1BX0VYVCwgXFxcIldSSVRFIFNUUkVBTSBETUEgRVhUXFxcIiB9LFxcbmRyaXZlcnMvYXRhL2xpYmF0YS1laC5jLTI1MTgtXFx0XFx0eyBBVEFfQ01EX1dSSVRFX0ZVQV9FWFQsXFx0XFxcIldSSVRFIERNQSBGVUEgRVhUXFxcIiB9LFxcbi0tXFxuZHJpdmVycy9hdGEvbGliYXRhLXNjc2kuYz0zMTcyPXN0YXRpYyB1bnNpZ25lZCBpbnQgYXRhX3Njc2lfcGFzc190aHJ1KHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpXFxuLS1cXG5kcml2ZXJzL2F0YS9saWJhdGEtc2NzaS5jLTMzMzAtXFx0Y2FzZSBBVEFfQ01EX1BJT19XUklURV9FWFQ6XFxuZHJpdmVycy9hdGEvbGliYXRhLXNjc2kuYzozMzMxOlxcdGNhc2UgQVRBX0NNRF9XUklURV9TVFJFQU1fRE1BX0VYVDpcXG5kcml2ZXJzL2F0YS9saWJhdGEtc2NzaS5jOjMzMzI6XFx0Y2FzZSBBVEFfQ01EX1dSSVRFX1NUUkVBTV9FWFQ6XFxuZHJpdmVycy9hdGEvbGliYXRhLXNjc2kuYy0zMzMzLVxcdFxcdHFjLVxcdTAwM2VzZWN0X3NpemUgPSBzY21kLVxcdTAwM2VkZXZpY2UtXFx1MDAzZXNlY3Rvcl9zaXplO1xcbi0tXFxuZHJpdmVycy9zY3NpL2hpc2lfc2FzL2hpc2lfc2FzX21haW4uYz01ND11OCBoaXNpX3Nhc19nZXRfYXRhX3Byb3RvY29sKHN0cnVjdCBzYXNfdGFzayAqdGFzaylcXG4tLVxcbmRyaXZlcnMvc2NzaS9oaXNpX3Nhcy9oaXNpX3Nhc19tYWluLmMtOTQtXFx0Y2FzZSBBVEFfQ01EX1dSSVRFX0xPR19ETUFfRVhUOlxcbmRyaXZlcnMvc2NzaS9oaXNpX3Nhcy9oaXNpX3Nhc19tYWluLmM6OTU6XFx0Y2FzZSBBVEFfQ01EX1dSSVRFX1NUUkVBTV9ETUFfRVhUOlxcbmRyaXZlcnMvc2NzaS9oaXNpX3Nhcy9oaXNpX3Nhc19tYWluLmMtOTYtXFx0Y2FzZSBBVEFfQ01EX1pBQ19NR01UX0lOOlxcbi0tXFxuZnMveGZzL3hmc19pbm9kZS5jPTUyPXhmc19pbm9kZV9tYXhfd3JpdGVfc3RyZWFtcyhcXG4tLVxcbmZzL3hmcy94ZnNfaW5vZGUuYy04Ni1cXHRucl9zdHJlYW1zID0gbnJfYWdzIC8gYWdfc2V0X3NpemU7XFxuZnMveGZzL3hmc19pbm9kZS5jOjg3OlxcdHJldHVybiBtaW5fdCh1aW50MTZfdCwgbnJfc3RyZWFtcywgWEZTX1NXX1dSSVRFX1NUUkVBTVNfTUFYKTtcXG5mcy94ZnMveGZzX2lub2RlLmMtODgtfVxcbi0tXFxuZnMveGZzL3hmc19pbm9kZS5jPTEyOT14ZnNfaW5vZGVfd3JpdGVfc3RyZWFtX29wZW4oXFxuLS1cXG5mcy94ZnMveGZzX2lub2RlLmMtMTM3LVxcbmZzL3hmcy94ZnNfaW5vZGUuYzoxMzg6XFx0aWYgKGZsYWdzIFxcdTAwMjYgfkZTX1dSSVRFX1NUUkVBTV9PUEVOX0VYQUNUKVxcbmZzL3hmcy94ZnNfaW5vZGUuYy0xMzktXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5mcy94ZnMveGZzX2lub2RlLmMtMTUwLVxcdHNwaW5fbG9jayhcXHUwMDI2bXAtXFx1MDAzZW1fc3RyZWFtc19sb2NrKTtcXG5mcy94ZnMveGZzX2lub2RlLmM6MTUxOlxcdGlmIChmbGFncyBcXHUwMDI2IEZTX1dSSVRFX1NUUkVBTV9PUEVOX0VYQUNUKSB7XFxuZnMveGZzL3hmc19pbm9kZS5jLTE1Mi1cXHRcXHRpZiAoISpzdHJlYW1faWRwIHx8ICpzdHJlYW1faWRwIFxcdTAwM2UgbWF4KSB7XFxuLS1cXG5mcy94ZnMveGZzX2lvY3RsLmM9MTI3OD14ZnNfZmlsZV9pb2N0bChcXG4tLVxcbmZzL3hmcy94ZnNfaW9jdGwuYy0xNTI2LVxcdFxcdHJldHVybiB4ZnNfaW9jX3ZlcmlmeV9tZWRpYShmaWxwLCBhcmcpO1xcbmZzL3hmcy94ZnNfaW9jdGwuYzoxNTI3OlxcdGNhc2UgRlNfSU9DX1dSSVRFX1NUUkVBTV9PUEVOOlxcbmZzL3hmcy94ZnNfaW9jdGwuYy0xNTI4LVxcdFxcdHJldHVybiB4ZnNfaW9jX3dyaXRlX3N0cmVhbV9vcGVuKGZpbHAsICh2b2lkIF9fdXNlciAqKWFyZyk7XFxuZnMveGZzL3hmc19pb2N0bC5jOjE1Mjk6XFx0Y2FzZSBGU19JT0NfV1JJVEVfU1RSRUFNX1NFVDpcXG5mcy94ZnMveGZzX2lvY3RsLmMtMTUzMC1cXHRcXHRyZXR1cm4geGZzX2lvY193cml0ZV9zdHJlYW1fc2V0KGZpbHAsIHApO1xcbmZzL3hmcy94ZnNfaW9jdGwuYzoxNTMxOlxcdGNhc2UgRlNfSU9DX1dSSVRFX1NUUkVBTV9HRVQ6XFxuZnMveGZzL3hmc19pb2N0bC5jLTE1MzItXFx0XFx0cmV0dXJuIHhmc19pb2Nfd3JpdGVfc3RyZWFtX2dldChYRlNfSShmaWxlX2lub2RlKGZpbHApKSxcXG5mcy94ZnMveGZzX2lvY3RsLmMtMTUzMy1cXHRcXHRcXHRcXHRcXHRcXHQodm9pZCBfX3VzZXIgKilhcmcpO1xcbmZzL3hmcy94ZnNfaW9jdGwuYzoxNTM0OlxcdGNhc2UgRlNfSU9DX1dSSVRFX1NUUkVBTV9HRVRfTUFYOlxcbmZzL3hmcy94ZnNfaW9jdGwuYy0xNTM1LVxcdFxcdHJldHVybiB4ZnNfaW9jX3dyaXRlX3N0cmVhbV9nZXRfbWF4KFhGU19JKGZpbGVfaW5vZGUoZmlscCkpLFxcbi0tXFxuZnMveGZzL3hmc19tb3VudC5oPTM4PWVudW0ge1xcbi0tXFxuZnMveGZzL3hmc19tb3VudC5oLTQ3LVxcbmZzL3hmcy94ZnNfbW91bnQuaDo0ODojZGVmaW5lIFhGU19TV19XUklURV9TVFJFQU1TX01BWFxcdDE2XFxuZnMveGZzL3hmc19tb3VudC5oLTQ5LVxcbi0tXFxuZnMveGZzL3hmc19zdXBlci5jPTE2NTY9eGZzX2ZzX2ZpbGxfc3VwZXIoXFxuLS1cXG5mcy94ZnMveGZzX3N1cGVyLmMtMTcxNC1cXHRpZiAoIW5yX3N0cmVhbXMpXFxuZnMveGZzL3hmc19zdXBlci5jOjE3MTU6XFx0XFx0bnJfc3RyZWFtcyA9IFhGU19TV19XUklURV9TVFJFQU1TX01BWDtcXG5mcy94ZnMveGZzX3N1cGVyLmMtMTcxNi1cXHRtcC1cXHUwMDNlbV9zdHJlYW1zX2luX3VzZSA9IGJpdG1hcF96YWxsb2MobnJfc3RyZWFtcywgR0ZQX0tFUk5FTCk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2F0YS5oPTI0PWVudW0ge1xcbi0tXFxuaW5jbHVkZS9saW51eC9hdGEuaC0yMjMtXFx0QVRBX0NNRF9XUklURV9RVUVVRURcXHQ9IDB4MzYsXFxuaW5jbHVkZS9saW51eC9hdGEuaDoyMjQ6XFx0QVRBX0NNRF9XUklURV9TVFJFQU1fRVhUID0gMHgzQixcXG5pbmNsdWRlL2xpbnV4L2F0YS5oOjIyNTpcXHRBVEFfQ01EX1dSSVRFX1NUUkVBTV9ETUFfRVhUID0gMHgzQSxcXG5pbmNsdWRlL2xpbnV4L2F0YS5oLTIyNi1cXHRBVEFfQ01EX1dSSVRFX0ZVQV9FWFRcXHQ9IDB4M0QsXFxuLS1cXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9saWJhdGEuaC0zNi1cXHRcXHQgYXRhX29wY29kZV9uYW1lKEFUQV9DTURfV1JJVEVfUVVFVUVEKSxcXHRcXHRcXFxcXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvbGliYXRhLmg6Mzc6XFx0XFx0IGF0YV9vcGNvZGVfbmFtZShBVEFfQ01EX1dSSVRFX1NUUkVBTV9FWFQpLFxcdFxcXFxcXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9saWJhdGEuaDozODpcXHRcXHQgYXRhX29wY29kZV9uYW1lKEFUQV9DTURfV1JJVEVfU1RSRUFNX0RNQV9FWFQpLCBcXFxcXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvbGliYXRhLmgtMzktXFx0XFx0IGF0YV9vcGNvZGVfbmFtZShBVEFfQ01EX1dSSVRFX0ZVQV9FWFQpLFxcdFxcXFxcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9mcy5oPTM0OD1zdHJ1Y3QgZnNfd3JpdGVfc3RyZWFtX29wZW4ge1xcbmluY2x1ZGUvdWFwaS9saW51eC9mcy5oLTM0OS1cXHRfX3UzMlxcdFxcdHN0cmVhbV9pZDtcXHQvKiBJTjogcmVxdWVzdGVkIGlkIGlmIE9QRU5fRVhBQ1Qgc2V0OyBPVVQ6IGFzc2lnbmVkIGlkICovXFxuaW5jbHVkZS91YXBpL2xpbnV4L2ZzLmg6MzUwOlxcdF9fdTMyXFx0XFx0ZmxhZ3M7XFx0XFx0LyogSU46IEZTX1dSSVRFX1NUUkVBTV9PUEVOXyogKi9cXG5pbmNsdWRlL3VhcGkvbGludXgvZnMuaC0zNTEtfTtcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9mcy5oLTM1Ni0gKi9cXG5pbmNsdWRlL3VhcGkvbGludXgvZnMuaDozNTc6I2RlZmluZSBGU19XUklURV9TVFJFQU1fT1BFTl9FWEFDVFxcdCgxIFxcdTAwM2NcXHUwMDNjIDApXFxuaW5jbHVkZS91YXBpL2xpbnV4L2ZzLmgtMzU4LVxcbmluY2x1ZGUvdWFwaS9saW51eC9mcy5oOjM1OTojZGVmaW5lIEZTX0lPQ19XUklURV9TVFJFQU1fR0VUX01BWFxcdF9JT1IoJ2YnLCAxMzUsIF9fdTMyKVxcbmluY2x1ZGUvdWFwaS9saW51eC9mcy5oOjM2MDojZGVmaW5lIEZTX0lPQ19XUklURV9TVFJFQU1fT1BFTlxcdF9JT1dSKCdmJywgMTM2LCBzdHJ1Y3QgZnNfd3JpdGVfc3RyZWFtX29wZW4pXFxuaW5jbHVkZS91YXBpL2xpbnV4L2ZzLmg6MzYxOiNkZWZpbmUgRlNfSU9DX1dSSVRFX1NUUkVBTV9TRVRcXHRcXHRfSU9XKCdmJywgMTM3LCBfX3MzMilcXG5pbmNsdWRlL3VhcGkvbGludXgvZnMuaDozNjI6I2RlZmluZSBGU19JT0NfV1JJVEVfU1RSRUFNX0dFVFxcdFxcdF9JT1IoJ2YnLCAxMzgsIF9fdTMyKVxcbmluY2x1ZGUvdWFwaS9saW51eC9mcy5oLTM2My1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTdUMTY6MDY6MjQuNTg5ODg4OTUzWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTA3MjM3Njg1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIFdyaXRlIFN0cmVhbSBGZWF0dXJlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyB3cml0ZSBzdHJlYW0gZmVhdHVyZSB3aXRoaW4gWEZTLCBhbmQgaXQgc2VlbXMgdGhlcmUgYXJlbid0IGFueSAqc3BlY2lmaWMqIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBkZWRpY2F0ZWQgdG8gaXQuIEl0IGFwcGVhcnMgdG8gYmUgYW4gaW5oZXJlbnQgcGFydCBvZiBYRlMgaXRzZWxmLiBUaGUgb25seSByZWxldmFudCBjb25maWcgcmVxdWlyZWQgaXMgdGhlIGNvcmUgYFhGU19GU2Agc2V0dGluZy4gVGhhdCdzIGdvb2QgdG8ga25vd+KAlGxlc3MgdG8gbWFuYWdlIGV4cGxpY2l0bHkuXG5cbk5vdywgbGV0J3MgdGFrZSBhIGxvb2sgYXQgdGhlIGZvY3VzIHN5bWJvbHMuIEkndmUgZ290IGEgbGlzdCBoZXJlOiBgeGZzX2lvY193cml0ZV9zdHJlYW1fb3BlbmAsIGB4ZnNfaW9jX3dyaXRlX3N0cmVhbV9zZXRgLCBgeGZzX2lvY193cml0ZV9zdHJlYW1fZ2V0YCwgYHhmc19pb2Nfd3JpdGVfc3RyZWFtX2dldF9tYXhgLCBgeGZzX2lub2RlX3dyaXRlX3N0cmVhbV9vcGVuYCwgYHhmc19pbm9kZV9zZXRfd3JpdGVfc3RyZWFtYCwgYHhmc19pbm9kZV9nZXRfd3JpdGVfc3RyZWFtYCwgYHhmc19pbm9kZV9tYXhfd3JpdGVfc3RyZWFtc2AsIGB4ZnNfd3JpdGVfc3RyZWFtX3JlbGVhc2VgLCBgeGZzX2lub2RlX3dyaXRlX3N0cmVhbV9hZ19zZXRgLCBhbmQgYHhmc19hZ190b19hZ19zZXRgLiBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgdGhlc2Ugc3ltYm9scyBhcmUgYWN0dWFsbHkgZGVmaW5lZCB3aXRoaW4gdGhlIGNvbnRleHQgb2YgdGhlIFhGUyBjb2RlLiBUaGlzIGlzIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCB0byBlbnN1cmUgdGhhdCB0aGUgaW1wbGVtZW50YXRpb24gaXMgY29tcGxldGUgYW5kIHRoZSBmZWF0dXJlIGlzIHJlYWR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjgyOCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xN1QxNjowNjoyOS42NjIyNjc3NDlaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjEwODU1MDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieGZzX2lvY193cml0ZV9zdHJlYW1fb3BlblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy94ZnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3hmcy94ZnNfaW9jdGwuYz0xMjA5PXN0YXRpYyBpbnRcXG5mcy94ZnMveGZzX2lvY3RsLmM6MTIxMDp4ZnNfaW9jX3dyaXRlX3N0cmVhbV9vcGVuKFxcbmZzL3hmcy94ZnNfaW9jdGwuYy0xMjExLVxcdHN0cnVjdCBmaWxlXFx0XFx0KmZpbHAsXFxuLS1cXG5mcy94ZnMveGZzX2lvY3RsLmM9MTI3OD14ZnNfZmlsZV9pb2N0bChcXG4tLVxcbmZzL3hmcy94ZnNfaW9jdGwuYy0xNTI3LVxcdGNhc2UgRlNfSU9DX1dSSVRFX1NUUkVBTV9PUEVOOlxcbmZzL3hmcy94ZnNfaW9jdGwuYzoxNTI4OlxcdFxcdHJldHVybiB4ZnNfaW9jX3dyaXRlX3N0cmVhbV9vcGVuKGZpbHAsICh2b2lkIF9fdXNlciAqKWFyZyk7XFxuZnMveGZzL3hmc19pb2N0bC5jLTE1MjktXFx0Y2FzZSBGU19JT0NfV1JJVEVfU1RSRUFNX1NFVDpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTdUMTY6MDY6MjkuNzIzMzU3NjI4WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzA3ODk3MjIxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBGdXp6aW5nIFN0cmF0ZWd5OiBXcml0ZSBTdHJlYW1zIGluIFhGUyoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYSBkZWZpbml0ZSB5ZXMgZm9yIGZ1enppbmcuIEl0J3MgbWFraW5nIGZ1bmN0aW9uYWwgY2hhbmdlcywgc3BlY2lmaWNhbGx5IHRvIFhGUydzIGJsb2NrIGFsbG9jYXRpb24gYW5kIGludHJvZHVjaW5nIHRoZXNlIGJyYW5kIG5ldyBpb2N0bHMuIFRoYXQncyBhIHRleHRib29rIGRlZmluaXRpb24gb2YgYSBwb3RlbnRpYWwgYXR0YWNrIHN1cmZhY2UuIFdlIG5lZWQgdG8gZ2V0IGEgZnV6emluZyBjYW1wYWlnbiBzZXQgdXAgZm9yIHRoaXMgaW1tZWRpYXRlbHkuXG5cblRoZSBoZWFydCBvZiBpdCBsaWVzIGluIHRoZSB3cml0ZSBzdHJlYW1zIHN1cHBvcnQgdGhleSdyZSBhZGRpbmcgdG8gWEZTIGFuZCBpb21hcC4gVGhpcyBpbmNsdWRlcyB0aG9zZSBuZXcgaW9jdGxzLCB3aGljaCBpbW1lZGlhdGVseSBmbGFncyBpdCBhcyBzb21ldGhpbmcgbmV3IHRoYXQgbmVlZHMgc2NydXRpbnkuIFRoZSBibG9jayBhbGxvY2F0aW9uIGNoYW5nZXMsIHdoZXJlIGl0J3MgZmFubmluZyBvdXQgYmFzZWQgb24gdGhlIHN0cmVhbSBJRCwgdGhhdOKAmXMgYW5vdGhlciBjcml0aWNhbCBhcmVhLiBBbnkgbW9kaWZpY2F0aW9uIHRvIHRoZSBjb3JlIGxvZ2ljLCBlc3BlY2lhbGx5IGFyb3VuZCBhbGxvY2F0aW9uLCBpcyBhIHJlZCBmbGFnLiBXZSBuZWVkIHRvIHBva2UgYW5kIHByb2QgdGhhdCBuZXcgYWxsb2NhdGlvbiBiZWhhdmlvciB0aG9yb3VnaGx5LlxuXG5UaGUgZm9jdXMgc2hvdWxkIGJlIG9uIHRoZXNlIHN5bWJvbHM6XG5cbiogICBgeGZzX2lvY193cml0ZV9zdHJlYW1fb3BlbmAsIGB4ZnNfaW9jX3dyaXRlX3N0cmVhbV9zZXRgLCBgeGZzX2lvY193cml0ZV9zdHJlYW1fZ2V0YCwgYHhmc19pb2Nfd3JpdGVfc3RyZWFtX2dldF9tYXhgLCBgeGZzX2lub2RlX3dyaXRlX3N0cmVhbV9vcGVuYCwgYHhmc19pbm9kZV9zZXRfd3JpdGVfc3RyZWFtYCwgYHhmc19pbm9kZV9nZXRfd3JpdGVfc3RyZWFtYCwgYHhmc19pbm9kZV9tYXhfd3JpdGVfc3RyZWFtc2AsIGB4ZnNfd3JpdGVfc3RyZWFtX3JlbGVhc2VgLCBgeGZzX2lub2RlX3dyaXRlX3N0cmVhbV9hZ19zZXRgLCBgeGZzX2FnX3RvX2FnX3NldGAuXG5cblRoZXNlIHNlZW0gdG8gYmUgdGhlIGNvcmUgZnVuY3Rpb25zIGZvciBtYW5hZ2luZyB0aGUgc3RyZWFtcywgc2V0dGluZyB0aGVtIHVwLCByZXRyaWV2aW5nLCBldGMsIGFuZCB0aGUgYWxsb2NhdGlvbiBpdHNlbGYuIFRoZXNlIGFyZSBnb2luZyB0byBiZSB0aGUgcHJpbWUgdGFyZ2V0cyBmb3IgZnV6emluZy5cblxuV2UgbmVlZCB0byBtYWtlIHN1cmUgdGhlIGZ1enplciBpcyBjb25maWd1cmVkIHdpdGggYFhGU19GU2AgZW5hYmxlZCwgb2J2aW91c2x5LiBUaGlzIGlzIGFsbCBhYm91dCB0ZXN0aW5nIHRoYXQgd3JpdGUgc3RyZWFtcyBmdW5jdGlvbmFsaXR5LiBMZXQncyBzZWUgaWYgd2UgY2FuIGZpbmQgc29tZSBnb29kIGVkZ2UgY2FzZXMgaW4gdGhpcyBuZXcgbG9naWMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNTc5LCJPdXRwdXRUb2tlbnMiOjI1MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xN1QxNjowNjozNi44MDIzMzIzOTdaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDE0NTc1MjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlhGU19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInhmc19pb2Nfd3JpdGVfc3RyZWFtX29wZW5cIixcbiAgICBcInhmc19pb2Nfd3JpdGVfc3RyZWFtX3NldFwiLFxuICAgIFwieGZzX2lvY193cml0ZV9zdHJlYW1fZ2V0XCIsXG4gICAgXCJ4ZnNfaW9jX3dyaXRlX3N0cmVhbV9nZXRfbWF4XCIsXG4gICAgXCJ4ZnNfaW5vZGVfd3JpdGVfc3RyZWFtX29wZW5cIixcbiAgICBcInhmc19pbm9kZV9zZXRfd3JpdGVfc3RyZWFtXCIsXG4gICAgXCJ4ZnNfaW5vZGVfZ2V0X3dyaXRlX3N0cmVhbVwiLFxuICAgIFwieGZzX2lub2RlX21heF93cml0ZV9zdHJlYW1zXCIsXG4gICAgXCJ4ZnNfd3JpdGVfc3RyZWFtX3JlbGVhc2VcIixcbiAgICBcInhmc19pbm9kZV93cml0ZV9zdHJlYW1fYWdfc2V0XCIsXG4gICAgXCJ4ZnNfYWdfdG9fYWdfc2V0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyB3cml0ZSBzdHJlYW1zIHN1cHBvcnQgdG8gWEZTIGFuZCBpb21hcCwgaW5jbHVkaW5nIG5ldyBpb2N0bHMgZm9yIG1hbmFnaW5nIHdyaXRlIHN0cmVhbXMgYW5kIG1vZGlmaWNhdGlvbnMgdG8gYmxvY2sgYWxsb2NhdGlvbiBsb2dpYyB0byBmYW4gb3V0IGFsbG9jYXRpb25zIGFjcm9zcyBBR3MgYmFzZWQgb24gdGhlIHN0cmVhbSBJRC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgbW9kaWZpZXMgY29yZSBmaWxlc3lzdGVtIGxvZ2ljIGFuZCBpbnRyb2R1Y2VzIG5ldyB1c2VyLWZhY2luZyBBUElzLCBtYWtpbmcgaXQgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWEZTX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwieGZzX2lvY193cml0ZV9zdHJlYW1fb3BlblwiLFxuICAgIFwieGZzX2lvY193cml0ZV9zdHJlYW1fc2V0XCIsXG4gICAgXCJ4ZnNfaW9jX3dyaXRlX3N0cmVhbV9nZXRcIixcbiAgICBcInhmc19pb2Nfd3JpdGVfc3RyZWFtX2dldF9tYXhcIixcbiAgICBcInhmc19pbm9kZV93cml0ZV9zdHJlYW1fb3BlblwiLFxuICAgIFwieGZzX2lub2RlX3NldF93cml0ZV9zdHJlYW1cIixcbiAgICBcInhmc19pbm9kZV9nZXRfd3JpdGVfc3RyZWFtXCIsXG4gICAgXCJ4ZnNfaW5vZGVfbWF4X3dyaXRlX3N0cmVhbXNcIixcbiAgICBcInhmc193cml0ZV9zdHJlYW1fcmVsZWFzZVwiLFxuICAgIFwieGZzX2lub2RlX3dyaXRlX3N0cmVhbV9hZ19zZXRcIixcbiAgICBcInhmc19hZ190b19hZ19zZXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIHdyaXRlIHN0cmVhbXMgc3VwcG9ydCB0byBYRlMgYW5kIGlvbWFwLCBpbmNsdWRpbmcgbmV3IGlvY3RscyBmb3IgbWFuYWdpbmcgd3JpdGUgc3RyZWFtcyBhbmQgbW9kaWZpY2F0aW9ucyB0byBibG9jayBhbGxvY2F0aW9uIGxvZ2ljIHRvIGZhbiBvdXQgYWxsb2NhdGlvbnMgYWNyb3NzIEFHcyBiYXNlZCBvbiB0aGUgc3RyZWFtIElELiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBtb2RpZmllcyBjb3JlIGZpbGVzeXN0ZW0gbG9naWMgYW5kIGludHJvZHVjZXMgbmV3IHVzZXItZmFjaW5nIEFQSXMsIG1ha2luZyBpdCBhIHByaW1lIGNhbmRpZGF0ZSBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow4lxk4[1] Phase: Succeeded StartedAt: 2026-07-17 16:06:48 +0000 UTC FinishedAt: 2026-07-17 16:06:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4lxk4[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-17 16:06:48 +0000 UTC FinishedAt: 2026-07-17 16:06:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4lxk4[2] Phase: Succeeded StartedAt: 2026-07-17 16:06:48 +0000 UTC FinishedAt: 2026-07-17 20:33:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4lxk4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS"],"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_ioc_write_stream_open","xfs_ioc_write_stream_set","xfs_ioc_write_stream_get","xfs_ioc_write_stream_get_max","xfs_inode_write_stream_open","xfs_inode_set_write_stream","xfs_inode_get_write_stream","xfs_inode_max_write_streams","xfs_write_stream_release","xfs_inode_write_stream_ag_set","xfs_ag_to_ag_set"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS"],"series_id":"ac22dd9a-ac53-42b0-8fda-91face219f43","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-17 16:06:48 +0000 UTC FinishedAt: 2026-07-17 20:33:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS"],"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_ioc_write_stream_open","xfs_ioc_write_stream_set","xfs_ioc_write_stream_get","xfs_ioc_write_stream_get_max","xfs_inode_write_stream_open","xfs_inode_set_write_stream","xfs_inode_get_write_stream","xfs_inode_max_write_streams","xfs_write_stream_release","xfs_inode_write_stream_ag_set","xfs_ag_to_ag_set"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS"],"series_id":"ac22dd9a-ac53-42b0-8fda-91face219f43","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-workflow4lxk4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS"],"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_ioc_write_stream_open","xfs_ioc_write_stream_set","xfs_ioc_write_stream_get","xfs_ioc_write_stream_get_max","xfs_inode_write_stream_open","xfs_inode_set_write_stream","xfs_inode_get_write_stream","xfs_inode_max_write_streams","xfs_write_stream_release","xfs_inode_write_stream_ag_set","xfs_ag_to_ag_set"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS"],"series_id":"ac22dd9a-ac53-42b0-8fda-91face219f43","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-17 16:06:48 +0000 UTC FinishedAt: 2026-07-17 16:06:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4lxk4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS"],"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_ioc_write_stream_open","xfs_ioc_write_stream_set","xfs_ioc_write_stream_get","xfs_ioc_write_stream_get_max","xfs_inode_write_stream_open","xfs_inode_set_write_stream","xfs_inode_get_write_stream","xfs_inode_max_write_streams","xfs_write_stream_release","xfs_inode_write_stream_ag_set","xfs_ag_to_ag_set"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS"],"series_id":"ac22dd9a-ac53-42b0-8fda-91face219f43","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-17 16:06:48 +0000 UTC FinishedAt: 2026-07-17 16:06:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS"],"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-workflow4lxk4/series-workflow4lxk4-convert-artifact-3183468448/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4lxk4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS"],"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_ioc_write_stream_open","xfs_ioc_write_stream_set","xfs_ioc_write_stream_get","xfs_ioc_write_stream_get_max","xfs_inode_write_stream_open","xfs_inode_set_write_stream","xfs_inode_get_write_stream","xfs_inode_max_write_streams","xfs_write_stream_release","xfs_inode_write_stream_ag_set","xfs_ag_to_ag_set"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS"],"series_id":"ac22dd9a-ac53-42b0-8fda-91face219f43","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-17 16:06:58 +0000 UTC FinishedAt: 2026-07-17 16:40:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4lxk4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS"],"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_ioc_write_stream_open","xfs_ioc_write_stream_set","xfs_ioc_write_stream_get","xfs_ioc_write_stream_get_max","xfs_inode_write_stream_open","xfs_inode_set_write_stream","xfs_inode_get_write_stream","xfs_inode_max_write_streams","xfs_write_stream_release","xfs_inode_write_stream_ag_set","xfs_ag_to_ag_set"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS"],"series_id":"ac22dd9a-ac53-42b0-8fda-91face219f43","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-17 16:06:58 +0000 UTC FinishedAt: 2026-07-17 16:40:31 +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:*f4cc73b6-a1d4-418b-85ab-eb3e8ca01e65,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-workflow4lxk4/series-workflow4lxk4-convert-artifact-3183468448/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": "21fce405-d645-431c-8ae9-f743e846386a", "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-workflow4lxk4/series-workflow4lxk4-build-action-3576741478/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4lxk4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS"],"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_ioc_write_stream_open","xfs_ioc_write_stream_set","xfs_ioc_write_stream_get","xfs_ioc_write_stream_get_max","xfs_inode_write_stream_open","xfs_inode_set_write_stream","xfs_inode_get_write_stream","xfs_inode_max_write_streams","xfs_write_stream_release","xfs_inode_write_stream_ag_set","xfs_ag_to_ag_set"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS"],"series_id":"ac22dd9a-ac53-42b0-8fda-91face219f43","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-17 16:06:58 +0000 UTC FinishedAt: 2026-07-17 16:40:19 +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:*f4cc73b6-a1d4-418b-85ab-eb3e8ca01e65,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-workflow4lxk4/series-workflow4lxk4-convert-artifact-3183468448/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": "21fce405-d645-431c-8ae9-f743e846386a", "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-workflow4lxk4/series-workflow4lxk4-build-action-3576741478/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4lxk4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS"],"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_ioc_write_stream_open","xfs_ioc_write_stream_set","xfs_ioc_write_stream_get","xfs_ioc_write_stream_get_max","xfs_inode_write_stream_open","xfs_inode_set_write_stream","xfs_inode_get_write_stream","xfs_inode_max_write_streams","xfs_write_stream_release","xfs_inode_write_stream_ag_set","xfs_ag_to_ag_set"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS"],"series_id":"ac22dd9a-ac53-42b0-8fda-91face219f43","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-17 16:40:31 +0000 UTC FinishedAt: 2026-07-17 16:40:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4lxk4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS"],"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_ioc_write_stream_open","xfs_ioc_write_stream_set","xfs_ioc_write_stream_get","xfs_ioc_write_stream_get_max","xfs_inode_write_stream_open","xfs_inode_set_write_stream","xfs_inode_get_write_stream","xfs_inode_max_write_streams","xfs_write_stream_release","xfs_inode_write_stream_ag_set","xfs_ag_to_ag_set"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS"],"series_id":"ac22dd9a-ac53-42b0-8fda-91face219f43","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-17 16:40:31 +0000 UTC FinishedAt: 2026-07-17 16:40:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4lxk4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS"],"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_ioc_write_stream_open","xfs_ioc_write_stream_set","xfs_ioc_write_stream_get","xfs_ioc_write_stream_get_max","xfs_inode_write_stream_open","xfs_inode_set_write_stream","xfs_inode_get_write_stream","xfs_inode_max_write_streams","xfs_write_stream_release","xfs_inode_write_stream_ag_set","xfs_ag_to_ag_set"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS"],"series_id":"ac22dd9a-ac53-42b0-8fda-91face219f43","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-17 16:40:31 +0000 UTC FinishedAt: 2026-07-17 16:41:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4lxk4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS"],"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_ioc_write_stream_open","xfs_ioc_write_stream_set","xfs_ioc_write_stream_get","xfs_ioc_write_stream_get_max","xfs_inode_write_stream_open","xfs_inode_set_write_stream","xfs_inode_get_write_stream","xfs_inode_max_write_streams","xfs_write_stream_release","xfs_inode_write_stream_ag_set","xfs_ag_to_ag_set"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS"],"series_id":"ac22dd9a-ac53-42b0-8fda-91face219f43","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-17 16:40:31 +0000 UTC FinishedAt: 2026-07-17 16:40:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS"],"series_id":"ac22dd9a-ac53-42b0-8fda-91face219f43","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-workflow4lxk4/series-workflow4lxk4-convert-artifact-924555975/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4lxk4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS"],"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_ioc_write_stream_open","xfs_ioc_write_stream_set","xfs_ioc_write_stream_get","xfs_ioc_write_stream_get_max","xfs_inode_write_stream_open","xfs_inode_set_write_stream","xfs_inode_get_write_stream","xfs_inode_max_write_streams","xfs_write_stream_release","xfs_inode_write_stream_ag_set","xfs_ag_to_ag_set"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS"],"series_id":"ac22dd9a-ac53-42b0-8fda-91face219f43","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-17 16:41:02 +0000 UTC FinishedAt: 2026-07-17 16:43:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4lxk4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS"],"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_ioc_write_stream_open","xfs_ioc_write_stream_set","xfs_ioc_write_stream_get","xfs_ioc_write_stream_get_max","xfs_inode_write_stream_open","xfs_inode_set_write_stream","xfs_inode_get_write_stream","xfs_inode_max_write_streams","xfs_write_stream_release","xfs_inode_write_stream_ag_set","xfs_ag_to_ag_set"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS"],"series_id":"ac22dd9a-ac53-42b0-8fda-91face219f43","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-17 16:41:02 +0000 UTC FinishedAt: 2026-07-17 16:43:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*21fce405-d645-431c-8ae9-f743e846386a,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-workflow4lxk4/series-workflow4lxk4-build-action-3576741478/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-workflow4lxk4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS"],"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_ioc_write_stream_open","xfs_ioc_write_stream_set","xfs_ioc_write_stream_get","xfs_ioc_write_stream_get_max","xfs_inode_write_stream_open","xfs_inode_set_write_stream","xfs_inode_get_write_stream","xfs_inode_max_write_streams","xfs_write_stream_release","xfs_inode_write_stream_ag_set","xfs_ag_to_ag_set"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS"],"series_id":"ac22dd9a-ac53-42b0-8fda-91face219f43","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-17 16:43:18 +0000 UTC FinishedAt: 2026-07-17 16:43:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4lxk4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS"],"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_ioc_write_stream_open","xfs_ioc_write_stream_set","xfs_ioc_write_stream_get","xfs_ioc_write_stream_get_max","xfs_inode_write_stream_open","xfs_inode_set_write_stream","xfs_inode_get_write_stream","xfs_inode_max_write_streams","xfs_write_stream_release","xfs_inode_write_stream_ag_set","xfs_ag_to_ag_set"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS"],"series_id":"ac22dd9a-ac53-42b0-8fda-91face219f43","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-17 16:43:18 +0000 UTC FinishedAt: 2026-07-17 16:43:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4lxk4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS"],"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_ioc_write_stream_open","xfs_ioc_write_stream_set","xfs_ioc_write_stream_get","xfs_ioc_write_stream_get_max","xfs_inode_write_stream_open","xfs_inode_set_write_stream","xfs_inode_get_write_stream","xfs_inode_max_write_streams","xfs_write_stream_release","xfs_inode_write_stream_ag_set","xfs_ag_to_ag_set"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS"],"series_id":"ac22dd9a-ac53-42b0-8fda-91face219f43","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-17 16:43:18 +0000 UTC FinishedAt: 2026-07-17 17:28:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4lxk4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS"],"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_ioc_write_stream_open","xfs_ioc_write_stream_set","xfs_ioc_write_stream_get","xfs_ioc_write_stream_get_max","xfs_inode_write_stream_open","xfs_inode_set_write_stream","xfs_inode_get_write_stream","xfs_inode_max_write_streams","xfs_write_stream_release","xfs_inode_write_stream_ag_set","xfs_ag_to_ag_set"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS"],"series_id":"ac22dd9a-ac53-42b0-8fda-91face219f43","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-17 16:43:18 +0000 UTC FinishedAt: 2026-07-17 17:28:14 +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:*f4cc73b6-a1d4-418b-85ab-eb3e8ca01e65,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-workflow4lxk4/series-workflow4lxk4-convert-artifact-924555975/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": "3a0a785c-964a-451a-bd6b-459af46caa1a", "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-workflow4lxk4/series-workflow4lxk4-build-action-402119243/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4lxk4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS"],"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_ioc_write_stream_open","xfs_ioc_write_stream_set","xfs_ioc_write_stream_get","xfs_ioc_write_stream_get_max","xfs_inode_write_stream_open","xfs_inode_set_write_stream","xfs_inode_get_write_stream","xfs_inode_max_write_streams","xfs_write_stream_release","xfs_inode_write_stream_ag_set","xfs_ag_to_ag_set"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS"],"series_id":"ac22dd9a-ac53-42b0-8fda-91face219f43","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-17 16:43:18 +0000 UTC FinishedAt: 2026-07-17 17:28:04 +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:*f4cc73b6-a1d4-418b-85ab-eb3e8ca01e65,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-workflow4lxk4/series-workflow4lxk4-convert-artifact-924555975/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": "3a0a785c-964a-451a-bd6b-459af46caa1a", "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-workflow4lxk4/series-workflow4lxk4-build-action-402119243/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4lxk4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS"],"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_ioc_write_stream_open","xfs_ioc_write_stream_set","xfs_ioc_write_stream_get","xfs_ioc_write_stream_get_max","xfs_inode_write_stream_open","xfs_inode_set_write_stream","xfs_inode_get_write_stream","xfs_inode_max_write_streams","xfs_write_stream_release","xfs_inode_write_stream_ag_set","xfs_ag_to_ag_set"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS"],"series_id":"ac22dd9a-ac53-42b0-8fda-91face219f43","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-17 17:28:14 +0000 UTC FinishedAt: 2026-07-17 17:28:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4lxk4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS"],"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_ioc_write_stream_open","xfs_ioc_write_stream_set","xfs_ioc_write_stream_get","xfs_ioc_write_stream_get_max","xfs_inode_write_stream_open","xfs_inode_set_write_stream","xfs_inode_get_write_stream","xfs_inode_max_write_streams","xfs_write_stream_release","xfs_inode_write_stream_ag_set","xfs_ag_to_ag_set"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS"],"series_id":"ac22dd9a-ac53-42b0-8fda-91face219f43","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-17 17:28:14 +0000 UTC FinishedAt: 2026-07-17 17:28:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4lxk4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS"],"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_ioc_write_stream_open","xfs_ioc_write_stream_set","xfs_ioc_write_stream_get","xfs_ioc_write_stream_get_max","xfs_inode_write_stream_open","xfs_inode_set_write_stream","xfs_inode_get_write_stream","xfs_inode_max_write_streams","xfs_write_stream_release","xfs_inode_write_stream_ag_set","xfs_ag_to_ag_set"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS"],"series_id":"ac22dd9a-ac53-42b0-8fda-91face219f43","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-17 17:28:14 +0000 UTC FinishedAt: 2026-07-17 17:30:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4lxk4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS"],"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_ioc_write_stream_open","xfs_ioc_write_stream_set","xfs_ioc_write_stream_get","xfs_ioc_write_stream_get_max","xfs_inode_write_stream_open","xfs_inode_set_write_stream","xfs_inode_get_write_stream","xfs_inode_max_write_streams","xfs_write_stream_release","xfs_inode_write_stream_ag_set","xfs_ag_to_ag_set"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS"],"series_id":"ac22dd9a-ac53-42b0-8fda-91face219f43","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-17 17:28:14 +0000 UTC FinishedAt: 2026-07-17 17:30:17 +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:*3a0a785c-964a-451a-bd6b-459af46caa1a,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-workflow4lxk4/series-workflow4lxk4-build-action-402119243/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-workflow4lxk4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS"],"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_ioc_write_stream_open","xfs_ioc_write_stream_set","xfs_ioc_write_stream_get","xfs_ioc_write_stream_get_max","xfs_inode_write_stream_open","xfs_inode_set_write_stream","xfs_inode_get_write_stream","xfs_inode_max_write_streams","xfs_write_stream_release","xfs_inode_write_stream_ag_set","xfs_ag_to_ag_set"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS"],"series_id":"ac22dd9a-ac53-42b0-8fda-91face219f43","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-17 17:30:27 +0000 UTC FinishedAt: 2026-07-17 20:33:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4lxk4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS"],"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_ioc_write_stream_open","xfs_ioc_write_stream_set","xfs_ioc_write_stream_get","xfs_ioc_write_stream_get_max","xfs_inode_write_stream_open","xfs_inode_set_write_stream","xfs_inode_get_write_stream","xfs_inode_max_write_streams","xfs_write_stream_release","xfs_inode_write_stream_ag_set","xfs_ag_to_ag_set"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS"],"series_id":"ac22dd9a-ac53-42b0-8fda-91face219f43","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-17 17:30:27 +0000 UTC FinishedAt: 2026-07-17 20:33:30 +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_ioc_write_stream_open","xfs_ioc_write_stream_set","xfs_ioc_write_stream_get","xfs_ioc_write_stream_get_max","xfs_inode_write_stream_open","xfs_inode_set_write_stream","xfs_inode_get_write_stream","xfs_inode_max_write_streams","xfs_write_stream_release","xfs_inode_write_stream_ag_set","xfs_ag_to_ag_set"],"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:*21fce405-d645-431c-8ae9-f743e846386a,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*3a0a785c-964a-451a-bd6b-459af46caa1a,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-workflow4lxk4/series-workflow4lxk4-build-action-3576741478/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-workflow4lxk4/series-workflow4lxk4-build-action-402119243/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow4lxk4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS"],"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_ioc_write_stream_open","xfs_ioc_write_stream_set","xfs_ioc_write_stream_get","xfs_ioc_write_stream_get_max","xfs_inode_write_stream_open","xfs_inode_set_write_stream","xfs_inode_get_write_stream","xfs_inode_max_write_streams","xfs_write_stream_release","xfs_inode_write_stream_ag_set","xfs_ag_to_ag_set"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS"],"series_id":"ac22dd9a-ac53-42b0-8fda-91face219f43","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-17 17:30:27 +0000 UTC FinishedAt: 2026-07-17 17:30:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4lxk4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS"],"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_ioc_write_stream_open","xfs_ioc_write_stream_set","xfs_ioc_write_stream_get","xfs_ioc_write_stream_get_max","xfs_inode_write_stream_open","xfs_inode_set_write_stream","xfs_inode_get_write_stream","xfs_inode_max_write_streams","xfs_write_stream_release","xfs_inode_write_stream_ag_set","xfs_ag_to_ag_set"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS"],"series_id":"ac22dd9a-ac53-42b0-8fda-91face219f43","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-17 17:30:27 +0000 UTC FinishedAt: 2026-07-17 17:30:31 +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_ioc_write_stream_open","xfs_ioc_write_stream_set","xfs_ioc_write_stream_get","xfs_ioc_write_stream_get_max","xfs_inode_write_stream_open","xfs_inode_set_write_stream","xfs_inode_get_write_stream","xfs_inode_max_write_streams","xfs_write_stream_release","xfs_inode_write_stream_ag_set","xfs_ag_to_ag_set"],"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-workflow4lxk4/series-workflow4lxk4-convert-artifact-2022688416/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4lxk4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS"],"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_ioc_write_stream_open","xfs_ioc_write_stream_set","xfs_ioc_write_stream_get","xfs_ioc_write_stream_get_max","xfs_inode_write_stream_open","xfs_inode_set_write_stream","xfs_inode_get_write_stream","xfs_inode_max_write_streams","xfs_write_stream_release","xfs_inode_write_stream_ag_set","xfs_ag_to_ag_set"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS"],"series_id":"ac22dd9a-ac53-42b0-8fda-91face219f43","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-17 17:30:27 +0000 UTC FinishedAt: 2026-07-17 17:30:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4lxk4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS"],"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_ioc_write_stream_open","xfs_ioc_write_stream_set","xfs_ioc_write_stream_get","xfs_ioc_write_stream_get_max","xfs_inode_write_stream_open","xfs_inode_set_write_stream","xfs_inode_get_write_stream","xfs_inode_max_write_streams","xfs_write_stream_release","xfs_inode_write_stream_ag_set","xfs_ag_to_ag_set"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS"],"series_id":"ac22dd9a-ac53-42b0-8fda-91face219f43","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-17 17:30:27 +0000 UTC FinishedAt: 2026-07-17 17:30:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4lxk4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS"],"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_ioc_write_stream_open","xfs_ioc_write_stream_set","xfs_ioc_write_stream_get","xfs_ioc_write_stream_get_max","xfs_inode_write_stream_open","xfs_inode_set_write_stream","xfs_inode_get_write_stream","xfs_inode_max_write_streams","xfs_write_stream_release","xfs_inode_write_stream_ag_set","xfs_ag_to_ag_set"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS"],"series_id":"ac22dd9a-ac53-42b0-8fda-91face219f43","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-17 17:30:27 +0000 UTC FinishedAt: 2026-07-17 17:30:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4lxk4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS"],"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_ioc_write_stream_open","xfs_ioc_write_stream_set","xfs_ioc_write_stream_get","xfs_ioc_write_stream_get_max","xfs_inode_write_stream_open","xfs_inode_set_write_stream","xfs_inode_get_write_stream","xfs_inode_max_write_streams","xfs_write_stream_release","xfs_inode_write_stream_ag_set","xfs_ag_to_ag_set"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS"],"series_id":"ac22dd9a-ac53-42b0-8fda-91face219f43","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-17 17:30:37 +0000 UTC FinishedAt: 2026-07-17 20:33:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4lxk4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS"],"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_ioc_write_stream_open","xfs_ioc_write_stream_set","xfs_ioc_write_stream_get","xfs_ioc_write_stream_get_max","xfs_inode_write_stream_open","xfs_inode_set_write_stream","xfs_inode_get_write_stream","xfs_inode_max_write_streams","xfs_write_stream_release","xfs_inode_write_stream_ag_set","xfs_ag_to_ag_set"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS"],"series_id":"ac22dd9a-ac53-42b0-8fda-91face219f43","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-17 17:30:37 +0000 UTC FinishedAt: 2026-07-17 20:33:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*21fce405-d645-431c-8ae9-f743e846386a,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*3a0a785c-964a-451a-bd6b-459af46caa1a,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-workflow4lxk4/series-workflow4lxk4-build-action-3576741478/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-workflow4lxk4/series-workflow4lxk4-build-action-402119243/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-workflow4lxk4/series-workflow4lxk4-convert-artifact-2022688416/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,}