Name: series-workflowlcth5 Phase: Running StartedAt: 2026-08-02 14:17:06 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlcth5[0] Phase: Running StartedAt: 2026-08-02 14:17:06 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlcth5[0].run-triage Phase: Running StartedAt: 2026-08-02 14:17:06 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlcth5[0].run-triage(0) Phase: Running StartedAt: 2026-08-02 14:17:06 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DMA_SHARED_BUFFER", "IO_URING", "BLK_DEV_NVME" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DMA_SHARED_BUFFER", "IO_URING", "BLK_DEV_NVME" ], "series_id": "bf5cb22a-04b0-4fc8-bafa-7df9f86604f8" }, "track": "KASAN", "fuzz": { "focus": [ "fs", "io_uring" ], "focus_symbols": [ "dma_buf_io_ctx_create", "dma_buf_io_ctx_release", "dma_buf_io_create_map", "dma_buf_io_invalidate_mappings", "dma_buf_io_init_map", "bio_iov_iter_set", "__io_import_reg_buf", "io_drop_dmabuf_node", "iov_iter_dmabuf_map" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db", "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+CgkJCTx0ZD4yMDI2LzA4LzAyIDE0OjM3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RNQV9TSEFSRURfQlVGRkVSJiMzNDssCiAgICAmIzM0O0lPX1VSSU5HJiMzNDssCiAgICAmIzM0O0JMS19ERVZfTlZNRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RtYV9idWZfaW9fY3R4X2NyZWF0ZSYjMzQ7LAogICAgJiMzNDtkbWFfYnVmX2lvX2N0eF9yZWxlYXNlJiMzNDssCiAgICAmIzM0O2RtYV9idWZfaW9fY3JlYXRlX21hcCYjMzQ7LAogICAgJiMzNDtkbWFfYnVmX2lvX2ludmFsaWRhdGVfbWFwcGluZ3MmIzM0OywKICAgICYjMzQ7ZG1hX2J1Zl9pb19pbml0X21hcCYjMzQ7LAogICAgJiMzNDtiaW9faW92X2l0ZXJfc2V0JiMzNDssCiAgICAmIzM0O19faW9faW1wb3J0X3JlZ19idWYmIzM0OywKICAgICYjMzQ7aW9fZHJvcF9kbWFidWZfbm9kZSYjMzQ7LAogICAgJiMzNDtpb3ZfaXRlcl9kbWFidWZfbWFwJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgZG1hLWJ1ZiBzdXBwb3J0IGluIHRoZSBibG9jayBsYXllciwgTlZNZSBQQ0kgZHJpdmVyLCBhbmQgaW9fdXJpbmcuIEl0IGFkZHMgYSBuZXcgZG1hLWJ1ZiBJL08gbWFwcGluZyBpbmZyYXN0cnVjdHVyZSBhbmQgbW9kaWZpZXMgY29yZSBiaW8gYW5kIGlvdl9pdGVyIGxvZ2ljIHRvIGhhbmRsZSBkbWEtYnVmIG1hcHMuIFRoaXMgaXMgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGV4cG9zZXMgbmV3IHJlYWNoYWJsZSBjb2RlIHBhdGhzIHZpYSBpb191cmluZyBhbmQgTlZNZSwgd2hpY2ggc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxNDozNzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDJjZWE2NmQxOWY1ZTYxNTk2ZDRkMDMyNmFlZTU3NTI1NjZmNzViYzdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEF1ZyAyIDE0OjM3OjM1IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYmxvY2svYmlvdmVjcy5yc3QgYi9Eb2N1bWVudGF0aW9uL2Jsb2NrL2Jpb3ZlY3MucnN0XG5pbmRleCAxMTEyNmVkNmY0MGY3Li40OWRhMjE0N2I3ZDg2IDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9ibG9jay9iaW92ZWNzLnJzdFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9ibG9jay9iaW92ZWNzLnJzdFxuQEAgLTE2LDE2ICYjNDM7MTYsMTYgQEAgYnZfbGVuIGJ5IHRoZSBudW1iZXIgb2YgYnl0ZXMgY29tcGxldGVkIGluIHRoYXQgYmlvdmVjLlxuIEluIHRoZSBuZXcgc2NoZW1lIG9mIHRoaW5ncywgZXZlcnl0aGluZyB0aGF0IG11c3QgYmUgbXV0YXRlZCBpbiBvcmRlciB0b1xuIHBhcnRpYWxseSBjb21wbGV0ZSBhIGJpbyBpcyBzZWdyZWdhdGVkIGludG8gc3RydWN0IGJ2ZWNfaXRlcjogYmlfc2VjdG9yLFxuIGJpX3NpemUgYW5kIGJpX2lkeCBoYXZlIGJlZW4gbW92ZWQgdGhlcmU7IGFuZCBpbnN0ZWFkIG9mIG1vZGlmeWluZyBidl9vZmZzZXRcbi1hbmQgYnZfbGVuLCBzdHJ1Y3QgYnZlY19pdGVyIGhhcyBiaV9idmVjX2RvbmUsIHdoaWNoIHJlcHJlc2VudHMgdGhlIG51bWJlciBvZlxuJiM0MzthbmQgYnZfbGVuLCBzdHJ1Y3QgYnZlY19pdGVyIGhhcyBiaV9vZmZzZXQsIHdoaWNoIHJlcHJlc2VudHMgdGhlIG51bWJlciBvZlxuIGJ5dGVzIGNvbXBsZXRlZCBpbiB0aGUgY3VycmVudCBidmVjLlxuIFxuIFRoZXJlIGFyZSBhIGJ1bmNoIG9mIG5ldyBoZWxwZXIgbWFjcm9zIGZvciBoaWRpbmcgdGhlIGdvcnkgZGV0YWlscyAtIGluXG4gcGFydGljdWxhciwgcHJlc2VudGluZyB0aGUgaWxsdXNpb24gb2YgcGFydGlhbGx5IGNvbXBsZXRlZCBiaW92ZWNzIHNvIHRoYXRcbi1ub3JtYWwgY29kZSBkb2VzbiYjMzk7dCBoYXZlIHRvIGRlYWwgd2l0aCBiaV9idmVjX2RvbmUuXG4mIzQzO25vcm1hbCBjb2RlIGRvZXNuJiMzOTt0IGhhdmUgdG8gZGVhbCB3aXRoIGJpX29mZnNldC5cbiBcbiAgKiBEcml2ZXIgY29kZSBzaG91bGQgbm8gbG9uZ2VyIHJlZmVyIHRvIGJpb3ZlY3MgZGlyZWN0bHk7IHdlIG5vdyBoYXZlXG4gICAgYmlvX2lvdmVjKCkgYW5kIGJpb19pdGVyX2lvdmVjKCkgbWFjcm9zIHRoYXQgcmV0dXJuIGxpdGVyYWwgc3RydWN0IGJpb3ZlY3MsXG4tICAgY29uc3RydWN0ZWQgZnJvbSB0aGUgcmF3IGJpb3ZlY3MgYnV0IHRha2luZyBpbnRvIGFjY291bnQgYmlfYnZlY19kb25lIGFuZFxuJiM0MzsgICBjb25zdHJ1Y3RlZCBmcm9tIHRoZSByYXcgYmlvdmVjcyBidXQgdGFraW5nIGludG8gYWNjb3VudCBiaV9vZmZzZXQgYW5kXG4gICAgYmlfc2l6ZS5cbiBcbiAgICBiaW9fZm9yX2VhY2hfc2VnbWVudCgpIGhhcyBiZWVuIHVwZGF0ZWQgdG8gdGFrZSBhIGJ2ZWNfaXRlciBhcmd1bWVudFxuQEAgLTEwMSw3ICYjNDM7MTAxLDcgQEAgT3RoZXIgaW1wbGljYXRpb25zOlxuICAgIEkuZS4gaW5zdGVhZCBvZiB1c2luZyBiaW9faW92ZWNfaWR4KCkgKG9yIGJpby1cdTAwM2ViaV9pb3ZlY1tiaW8tXHUwMDNlYmlfaWR4XSksIHlvdVxuICAgIG5vdyB1c2UgYmlvX2l0ZXJfaW92ZWMoKSwgd2hpY2ggdGFrZXMgYSBidmVjX2l0ZXIgYW5kIHJldHVybnMgYVxuICAgIGxpdGVyYWwgc3RydWN0IGJpb192ZWMgLSBjb25zdHJ1Y3RlZCBvbiB0aGUgZmx5IGZyb20gdGhlIHJhdyBiaW92ZWMgYnV0XG4tICAgdGFraW5nIGludG8gYWNjb3VudCBiaV9idmVjX2RvbmUgKGFuZCBiaV9zaXplKS5cbiYjNDM7ICAgdGFraW5nIGludG8gYWNjb3VudCBiaV9vZmZzZXQgKGFuZCBiaV9zaXplKS5cbiBcbiAgKiBiaV92Y250IGNhbiYjMzk7dCBiZSB0cnVzdGVkIG9yIHJlbGllZCB1cG9uIGJ5IGRyaXZlciBjb2RlIC0gaS5lLiBhbnl0aGluZyB0aGF0XG4gICAgZG9lc24mIzM5O3QgYWN0dWFsbHkgb3duIHRoZSBiaW8uIFRoZSByZWFzb24gaXMgdHdvZm9sZDogZmlyc3RseSwgaXQmIzM5O3Mgbm90XG5kaWZmIC0tZ2l0IGEvYmxvY2svYmlvLmMgYi9ibG9jay9iaW8uY1xuaW5kZXggNTAwMzg5ZjMzMmQ5OS4uMTYwMmVhYjA1NzYxZiAxMDA2NDRcbi0tLSBhL2Jsb2NrL2Jpby5jXG4mIzQzOyYjNDM7JiM0MzsgYi9ibG9jay9iaW8uY1xuQEAgLTIyOSw3ICYjNDM7MjI5LDcgQEAgdm9pZCBiaW9faW5pdChzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHN0cnVjdCBiaW9fdmVjICp0YWJsZSxcbiBcdGJpby1cdTAwM2ViaV9pdGVyLmJpX3NlY3RvciA9IDA7XG4gXHRiaW8tXHUwMDNlYmlfaXRlci5iaV9zaXplID0gMDtcbiBcdGJpby1cdTAwM2ViaV9pdGVyLmJpX2lkeCA9IDA7XG4tXHRiaW8tXHUwMDNlYmlfaXRlci5iaV9idmVjX2RvbmUgPSAwO1xuJiM0MztcdGJpby1cdTAwM2ViaV9pdGVyLmJpX29mZnNldCA9IDA7XG4gXHRiaW8tXHUwMDNlYmlfZW5kX2lvID0gTlVMTDtcbiBcdGJpby1cdTAwM2ViaV9wcml2YXRlID0gTlVMTDtcbiAjaWZkZWYgQ09ORklHX0JMS19DR1JPVVBcbkBAIC04NjEsNiAmIzQzOzg2MSwxMSBAQCBzdGF0aWMgaW50IF9fYmlvX2Nsb25lKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGJpbyAqYmlvX3NyYywgZ2ZwX3QgZ2ZwKVxuIFx0YmlvLVx1MDAzZWJpX3dyaXRlX3N0cmVhbSA9IGJpb19zcmMtXHUwMDNlYmlfd3JpdGVfc3RyZWFtO1xuIFx0YmlvLVx1MDAzZWJpX2l0ZXIgPSBiaW9fc3JjLVx1MDAzZWJpX2l0ZXI7XG4gXG4mIzQzO1x0aWYgKG9wX2lzX2RtYWJ1ZihiaW8tXHUwMDNlYmlfb3BmKSlcbiYjNDM7XHRcdGJpby1cdTAwM2ViaV9kbWFidWZfbWFwID0gYmlvX3NyYy1cdTAwM2ViaV9kbWFidWZfbWFwO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdGJpby1cdTAwM2ViaV9pb192ZWMgPSBiaW9fc3JjLVx1MDAzZWJpX2lvX3ZlYztcbiYjNDM7XG4gXHRpZiAoYmlvLVx1MDAzZWJpX2JkZXYpIHtcbiBcdFx0aWYgKGJpby1cdTAwM2ViaV9iZGV2ID09IGJpb19zcmMtXHUwMDNlYmlfYmRldiBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgIGJpb19mbGFnZ2VkKGJpb19zcmMsIEJJT19SRU1BUFBFRCkpXG5AQCAtOTAyLDggJiM0Mzs5MDcsNiBAQCBzdHJ1Y3QgYmlvICpiaW9fYWxsb2NfY2xvbmUoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc3RydWN0IGJpbyAqYmlvX3NyYyxcbiBcdFx0YmlvX3B1dChiaW8pO1xuIFx0XHRyZXR1cm4gTlVMTDtcbiBcdH1cbi1cdGJpby1cdTAwM2ViaV9pb192ZWMgPSBiaW9fc3JjLVx1MDAzZWJpX2lvX3ZlYztcbi1cbiBcdHJldHVybiBiaW87XG4gfVxuIEVYUE9SVF9TWU1CT0woYmlvX2FsbG9jX2Nsb25lKTtcbkBAIC05MjMsNyAmIzQzOzkyNiw3IEBAIGludCBiaW9faW5pdF9jbG9uZShzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBzdHJ1Y3QgYmlvICpiaW8sXG4ge1xuIFx0aW50IHJldDtcbiBcbi1cdGJpb19pbml0KGJpbywgYmRldiwgYmlvX3NyYy1cdTAwM2ViaV9pb192ZWMsIDAsIGJpb19zcmMtXHUwMDNlYmlfb3BmKTtcbiYjNDM7XHRiaW9faW5pdChiaW8sIGJkZXYsIE5VTEwsIDAsIGJpb19zcmMtXHUwMDNlYmlfb3BmKTtcbiBcdHJldCA9IF9fYmlvX2Nsb25lKGJpbywgYmlvX3NyYywgZ2ZwKTtcbiBcdGlmIChyZXQpXG4gXHRcdGJpb191bmluaXQoYmlvKTtcbkBAIC0xMTgyLDE1ICYjNDM7MTE4NSwyNiBAQCB2b2lkIF9fYmlvX3JlbGVhc2VfcGFnZXMoc3RydWN0IGJpbyAqYmlvLCBib29sIG1hcmtfZGlydHkpXG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKF9fYmlvX3JlbGVhc2VfcGFnZXMpO1xuIFxuLXZvaWQgYmlvX2lvdl9idmVjX3NldChzdHJ1Y3QgYmlvICpiaW8sIGNvbnN0IHN0cnVjdCBpb3ZfaXRlciAqaXRlcilcbiYjNDM7Ym9vbCBiaW9faW92X2l0ZXJfc2V0KHN0cnVjdCBiaW8gKmJpbywgY29uc3Qgc3RydWN0IGlvdl9pdGVyICppdGVyKVxuIHtcbiYjNDM7XHRpZiAoIWlvdl9pdGVyX2lzX2J2ZWMoaXRlcikgXHUwMDI2XHUwMDI2ICFpb3ZfaXRlcl9pc19kbWFidWZfbWFwKGl0ZXIpKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiBcdFdBUk5fT05fT05DRShiaW8tXHUwMDNlYmlfbWF4X3ZlY3MpO1xuIFxuJiM0MztcdHN0YXRpY19hc3NlcnQob2Zmc2V0b2Yoc3RydWN0IGJpbywgYmlfaW9fdmVjKSA9PVxuJiM0MztcdFx0ICAgICAgb2Zmc2V0b2Yoc3RydWN0IGJpbywgYmlfZG1hYnVmX21hcCkpO1xuJiM0MztcdHN0YXRpY19hc3NlcnQob2Zmc2V0b2Yoc3RydWN0IGlvdl9pdGVyLCBidmVjKSA9PVxuJiM0MztcdFx0ICAgICAgb2Zmc2V0b2Yoc3RydWN0IGlvdl9pdGVyLCBkbWFidWZfbWFwKSk7XG4mIzQzO1xuIFx0YmlvLVx1MDAzZWJpX2lvX3ZlYyA9IChzdHJ1Y3QgYmlvX3ZlYyAqKWl0ZXItXHUwMDNlYnZlYztcbiBcdGJpby1cdTAwM2ViaV9pdGVyLmJpX2lkeCA9IDA7XG4tXHRiaW8tXHUwMDNlYmlfaXRlci5iaV9idmVjX2RvbmUgPSBpdGVyLVx1MDAzZWlvdl9vZmZzZXQ7XG4mIzQzO1x0YmlvLVx1MDAzZWJpX2l0ZXIuYmlfb2Zmc2V0ID0gaXRlci1cdTAwM2Vpb3Zfb2Zmc2V0O1xuIFx0YmlvLVx1MDAzZWJpX2l0ZXIuYmlfc2l6ZSA9IGlvdl9pdGVyX2NvdW50KGl0ZXIpO1xuIFx0YmlvX3NldF9mbGFnKGJpbywgQklPX0NMT05FRCk7XG4mIzQzO1x0aWYgKGlvdl9pdGVyX2lzX2RtYWJ1Zl9tYXAoaXRlcikpXG4mIzQzO1x0XHRiaW8tXHUwMDNlYmlfb3BmIHw9IFJFUV9OT01FUkdFIHwgUkVRX0RNQUJVRjtcbiYjNDM7XHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG4gLypcbkBAIC0xMjg1LDEwICYjNDM7MTI5OSw5IEBAIGludCBiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuIFx0aWYgKFdBUk5fT05fT05DRShiaW9fZmxhZ2dlZChiaW8sIEJJT19DTE9ORUQpKSlcbiBcdFx0cmV0dXJuIC1FSU87XG4gXG4tXHRpZiAoaW92X2l0ZXJfaXNfYnZlYyhpdGVyKSkge1xuLVx0XHRiaW9faW92X2J2ZWNfc2V0KGJpbywgaXRlcik7XG4tXG4tXHRcdGlmICghYmlvX2lvdl9idmVjX2FsaWduZWQoYmlvLCBtZW1fYWxpZ25fbWFzaykpXG4mIzQzO1x0aWYgKGJpb19pb3ZfaXRlcl9zZXQoYmlvLCBpdGVyKSkge1xuJiM0MztcdFx0aWYgKGlvdl9pdGVyX2lzX2J2ZWMoaXRlcikgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgIWJpb19pb3ZfYnZlY19hbGlnbmVkKGJpbywgbWVtX2FsaWduX21hc2spKVxuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0XHRpb3ZfaXRlcl9hZHZhbmNlKGl0ZXIsIGJpby1cdTAwM2ViaV9pdGVyLmJpX3NpemUpO1xuZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay1tYXAuYyBiL2Jsb2NrL2Jsay1tYXAuY1xuaW5kZXggNjE1ZDI5YmI4NDBlYi4uOWNiOTYwNWQxZjYyZCAxMDA2NDRcbi0tLSBhL2Jsb2NrL2Jsay1tYXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYmxvY2svYmxrLW1hcC5jXG5AQCAtNDczLDcgJiM0Mzs0NzMsNyBAQCBzdGF0aWMgaW50IGJsa19ycV9tYXBfdXNlcl9idmVjKHN0cnVjdCByZXF1ZXN0ICpycSwgY29uc3Qgc3RydWN0IGlvdl9pdGVyICppdGVyKVxuIFx0YmlvID0gYmxrX3JxX21hcF9iaW9fYWxsb2MocnEsIDAsIEdGUF9LRVJORUwpO1xuIFx0aWYgKCFiaW8pXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuLVx0YmlvX2lvdl9idmVjX3NldChiaW8sIGl0ZXIpO1xuJiM0MztcdGJpb19pb3ZfaXRlcl9zZXQoYmlvLCBpdGVyKTtcbiBcbiBcdHJldCA9IGJsa19ycV9hcHBlbmRfYmlvKHJxLCBiaW8pO1xuIFx0aWYgKHJldClcbmRpZmYgLS1naXQgYS9ibG9jay9ibGstbWVyZ2UuYyBiL2Jsb2NrL2Jsay1tZXJnZS5jXG5pbmRleCBhYjExNjFjYTY5ZjFlLi4xYmVlZGM0MmE4NWQ1IDEwMDY0NFxuLS0tIGEvYmxvY2svYmxrLW1lcmdlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2Jsb2NrL2Jsay1tZXJnZS5jXG5AQCAtOSw2ICYjNDM7OSw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYmxrLWludGVncml0eS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGFydF9zdGF0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ibGstY2dyb3VwLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvZG1hLWJ1Zi1pby5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXHUwMDNjdHJhY2UvZXZlbnRzL2Jsb2NrLmhcdTAwM2VcbiBcbkBAIC0zMyw3ICYjNDM7MzQsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgYmlvX2dldF9sYXN0X2J2ZWMoc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgYmlvX3ZlYyAqYnYpXG4gXG4gXHRiaW9fYWR2YW5jZV9pdGVyKGJpbywgXHUwMDI2aXRlciwgaXRlci5iaV9zaXplKTtcbiBcbi1cdGlmICghaXRlci5iaV9idmVjX2RvbmUpXG4mIzQzO1x0aWYgKCFpdGVyLmJpX29mZnNldClcbiBcdFx0aWR4ID0gaXRlci5iaV9pZHggLSAxO1xuIFx0ZWxzZVx0LyogaW4gdGhlIG1pZGRsZSBvZiBidmVjICovXG4gXHRcdGlkeCA9IGl0ZXIuYmlfaWR4O1xuQEAgLTQxLDExICYjNDM7NDIsMTEgQEAgc3RhdGljIGlubGluZSB2b2lkIGJpb19nZXRfbGFzdF9idmVjKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGJpb192ZWMgKmJ2KVxuIFx0KmJ2ID0gYmlvLVx1MDAzZWJpX2lvX3ZlY1tpZHhdO1xuIFxuIFx0Lypcbi1cdCAqIGl0ZXIuYmlfYnZlY19kb25lIHJlY29yZHMgYWN0dWFsIGxlbmd0aCBvZiB0aGUgbGFzdCBidmVjXG4mIzQzO1x0ICogaXRlci5iaV9vZmZzZXQgcmVjb3JkcyBhY3R1YWwgbGVuZ3RoIG9mIHRoZSBsYXN0IGJ2ZWNcbiBcdCAqIGlmIHRoaXMgYmlvIGVuZHMgaW4gdGhlIG1pZGRsZSBvZiBvbmUgaW8gdmVjdG9yXG4gXHQgKi9cbi1cdGlmIChpdGVyLmJpX2J2ZWNfZG9uZSlcbi1cdFx0YnYtXHUwMDNlYnZfbGVuID0gaXRlci5iaV9idmVjX2RvbmU7XG4mIzQzO1x0aWYgKGl0ZXIuYmlfb2Zmc2V0KVxuJiM0MztcdFx0YnYtXHUwMDNlYnZfbGVuID0gaXRlci5iaV9vZmZzZXQ7XG4gfVxuIFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBiaW9fd2lsbF9nYXAoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsXG5AQCAtMzE5LDYgJiM0MzszMjAsMjggQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgYnZlY19zZWdfZ2FwKHN0cnVjdCBiaW9fdmVjICpidnBydixcbiBcdHJldHVybiBidi1cdTAwM2Vidl9vZmZzZXQgfCAoYnZwcnYtXHUwMDNlYnZfb2Zmc2V0ICYjNDM7IGJ2cHJ2LVx1MDAzZWJ2X2xlbik7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW5saW5lIGludCBiaW9fc3BsaXRfaW9fYXRfZG1hYnVmKHN0cnVjdCBiaW8gKmJpbyxcbiYjNDM7XHRcdGNvbnN0IHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSwgdW5zaWduZWQgKnNlZ3MsXG4mIzQzO1x0XHR1bnNpZ25lZCBtYXhfYnl0ZXMsIHVuc2lnbmVkIGxlbl9hbGlnbl9tYXNrLFxuJiM0MztcdFx0dW5zaWduZWQgc3RhcnRfYWxpZ25fbWFzaylcbiYjNDM7e1xuJiM0MztcdHVuc2lnbmVkIGJ5dGVzID0gbWluKGJpby1cdTAwM2ViaV9pdGVyLmJpX3NpemUsIG1heF9ieXRlcyk7XG4mIzQzO1x0dW5zaWduZWQgc2VnX3NoaWZ0ID0gYmlvLVx1MDAzZWJpX2RtYWJ1Zl9tYXAtXHUwMDNlc2VnX3NoaWZ0O1xuJiM0MztcdHVuc2lnbmVkIG9mZnNldCA9IGJpby1cdTAwM2ViaV9pdGVyLmJpX29mZnNldCBcdTAwMjYgKCgxVSBcdTAwM2NcdTAwM2Mgc2VnX3NoaWZ0KSAtIDEpO1xuJiM0MztcbiYjNDM7XHRpZiAoKGJpby1cdTAwM2ViaV9pdGVyLmJpX29mZnNldCBcdTAwMjYgc3RhcnRfYWxpZ25fbWFzaykgfHxcbiYjNDM7XHQgICAgKGJpby1cdTAwM2ViaV9pdGVyLmJpX3NpemUgXHUwMDI2IGxlbl9hbGlnbl9tYXNrKSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHQvKiBzaW5nbGUgY29udGlndW91cyByYW5nZSBpbnRvIHRoZSBkbWEtYnVmICovXG4mIzQzO1x0KnNlZ3MgPSAxO1xuJiM0MztcbiYjNDM7XHRieXRlcyA9IG1pbihieXRlcywgKCh1bnNpZ25lZClsaW0tXHUwMDNlbWF4X3NlZ21lbnRzIFx1MDAzY1x1MDAzYyBzZWdfc2hpZnQpIC0gb2Zmc2V0KTtcbiYjNDM7XHRpZiAoYnl0ZXMgIT0gYmlvLVx1MDAzZWJpX2l0ZXIuYmlfc2l6ZSlcbiYjNDM7XHRcdHJldHVybiBieXRlcztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiAvKipcbiAgKiBiaW9fc3BsaXRfaW9fYXQgLSBjaGVjayBpZiBhbmQgd2hlcmUgdG8gc3BsaXQgYSBiaW9cbiAgKiBAYmlvOiAgW2luXSBiaW8gdG8gYmUgc3BsaXRcbkBAIC0zNDYsNiAmIzQzOzM2OSwxOSBAQCBpbnQgYmlvX3NwbGl0X2lvX2F0KHN0cnVjdCBiaW8gKmJpbywgY29uc3Qgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltLFxuIFx0XHRsZW5fYWxpZ25fbWFzayB8PSAoYmMtXHUwMDNlYmNfa2V5LVx1MDAzZWNyeXB0b19jZmcuZGF0YV91bml0X3NpemUgLSAxKTtcbiBcdH1cbiBcbiYjNDM7XHRpZiAob3BfaXNfZG1hYnVmKGJpby1cdTAwM2ViaV9vcGYpKSB7XG4mIzQzO1x0XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRcdHJldCA9IGJpb19zcGxpdF9pb19hdF9kbWFidWYoYmlvLCBsaW0sIFx1MDAyNm5zZWdzLCBtYXhfYnl0ZXMsXG4mIzQzO1x0XHRcdFx0XHQgICAgIGxlbl9hbGlnbl9tYXNrLCBzdGFydF9hbGlnbl9tYXNrKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0XHRpZiAoIXJldClcbiYjNDM7XHRcdFx0Z290byBvdXQ7XG4mIzQzO1x0XHRieXRlcyA9IHJldDtcbiYjNDM7XHRcdGdvdG8gc3BsaXQ7XG4mIzQzO1x0fVxuJiM0MztcbiBcdGJpb19mb3JfZWFjaF9idmVjKGJ2LCBiaW8sIGl0ZXIpIHtcbiBcdFx0aWYgKGJ2LmJ2X29mZnNldCBcdTAwMjYgc3RhcnRfYWxpZ25fbWFzayB8fFxuIFx0XHQgICAgYnYuYnZfbGVuIFx1MDAyNiBsZW5fYWxpZ25fbWFzaylcbkBAIC0zNzYsNiAmIzQzOzQxMiw3IEBAIGludCBiaW9fc3BsaXRfaW9fYXQoc3RydWN0IGJpbyAqYmlvLCBjb25zdCBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0sXG4gXHRcdGJ2cHJ2cCA9IFx1MDAyNmJ2cHJ2O1xuIFx0fVxuIFxuJiM0MztvdXQ6XG4gXHQqc2VncyA9IG5zZWdzO1xuIFx0YmlvLVx1MDAzZWJpX2J2ZWNfZ2FwX2JpdCA9IGZmcyhnYXBzKTtcbiBcdHJldHVybiAwO1xuZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay1tcS1kbWEuYyBiL2Jsb2NrL2Jsay1tcS1kbWEuY1xuaW5kZXggYmZkYjllZDcwNzQxMS4uODhmZDljYmM5NTFmNCAxMDA2NDRcbi0tLSBhL2Jsb2NrL2Jsay1tcS1kbWEuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYmxvY2svYmxrLW1xLWRtYS5jXG5AQCAtNDQsNyAmIzQzOzQ0LDcgQEAgc3RhdGljIGJvb2wgYmxrX21hcF9pdGVyX25leHQoc3RydWN0IHJlcXVlc3QgKnJlcSwgc3RydWN0IGJsa19tYXBfaXRlciAqaXRlcixcbiBcdCAqIG9uZSBjb3VsZCBiZSBtZXJnZWQgaW50byBpdC4gIFRoaXMgdHlwaWNhbGx5IGhhcHBlbnMgd2hlbiBtb3ZpbmcgdG9cbiBcdCAqIHRoZSBuZXh0IGJpbywgYnV0IHNvbWUgY2FsbGVycyBhbHNvIGRvbiYjMzk7dCBwYWNrIGJ2ZWNzIHRpZ2h0LlxuIFx0ICovXG4tXHR3aGlsZSAoIWl0ZXItXHUwMDNlaXRlci5iaV9zaXplIHx8ICFpdGVyLVx1MDAzZWl0ZXIuYmlfYnZlY19kb25lKSB7XG4mIzQzO1x0d2hpbGUgKCFpdGVyLVx1MDAzZWl0ZXIuYmlfc2l6ZSB8fCAhaXRlci1cdTAwM2VpdGVyLmJpX29mZnNldCkge1xuIFx0XHRzdHJ1Y3QgYmlvX3ZlYyBuZXh0O1xuIFxuIFx0XHRpZiAoIV9fYmxrX21hcF9pdGVyX25leHQoaXRlcikpXG5kaWZmIC0tZ2l0IGEvYmxvY2svYmxrLmggYi9ibG9jay9ibGsuaFxuaW5kZXggZWFhYzA1ODE1Y2IwMy4uNTBhYmZkOTMyODg2MSAxMDA2NDRcbi0tLSBhL2Jsb2NrL2Jsay5oXG4mIzQzOyYjNDM7JiM0MzsgYi9ibG9jay9ibGsuaFxuQEAgLTQwNiw3ICYjNDM7NDA2LDcgQEAgc3RhdGljIGlubGluZSBib29sIGJpb19tYXlfbmVlZF9zcGxpdChzdHJ1Y3QgYmlvICpiaW8sXG4gXHRcdHJldHVybiB0cnVlO1xuIFxuIFx0YnYgPSBfX2J2ZWNfaXRlcl9idmVjKGJpby1cdTAwM2ViaV9pb192ZWMsIGJpby1cdTAwM2ViaV9pdGVyKTtcbi1cdGlmIChiaW8tXHUwMDNlYmlfaXRlci5iaV9zaXplIFx1MDAzZSBidi1cdTAwM2Vidl9sZW4gLSBiaW8tXHUwMDNlYmlfaXRlci5iaV9idmVjX2RvbmUpXG4mIzQzO1x0aWYgKGJpby1cdTAwM2ViaV9pdGVyLmJpX3NpemUgXHUwMDNlIGJ2LVx1MDAzZWJ2X2xlbiAtIGJpby1cdTAwM2ViaV9pdGVyLmJpX29mZnNldClcbiBcdFx0cmV0dXJuIHRydWU7XG4gXHRpZiAoKGJ2LVx1MDAzZWJ2X29mZnNldCB8IGJ2LVx1MDAzZWJ2X2xlbikgXHUwMDI2IGxpbS1cdTAwM2VkbWFfYWxpZ25tZW50KVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbmRpZmYgLS1naXQgYS9ibG9jay9mb3BzLmMgYi9ibG9jay9mb3BzLmNcbmluZGV4IDNjMjA5OWRmZWYxZDUuLjNjNDAzYWZiMGY2NDYgMTAwNjQ0XG4tLS0gYS9ibG9jay9mb3BzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2Jsb2NrL2ZvcHMuY1xuQEAgLTM0MiwxNSAmIzQzOzM0MiwxMyBAQCBzdGF0aWMgc3NpemVfdCBfX2Jsa2Rldl9kaXJlY3RfSU9fYXN5bmMoc3RydWN0IGtpb2NiICppb2NiLFxuIFx0YmlvLVx1MDAzZWJpX2VuZF9pbyA9IGJsa2Rldl9iaW9fZW5kX2lvX2FzeW5jO1xuIFx0YmlvLVx1MDAzZWJpX2lvcHJpbyA9IGlvY2ItXHUwMDNla2lfaW9wcmlvO1xuIFxuLVx0aWYgKGlvdl9pdGVyX2lzX2J2ZWMoaXRlcikpIHtcbi1cdFx0Lypcbi1cdFx0ICogVXNlcnMgZG9uJiMzOTt0IHJlbHkgb24gdGhlIGl0ZXJhdG9yIGJlaW5nIGluIGFueSBwYXJ0aWN1bGFyXG4tXHRcdCAqIHN0YXRlIGZvciBhc3luYyBJL08gcmV0dXJuaW5nIC1FSU9DQlFVRVVFRCwgaGVuY2Ugd2UgY2FuXG4tXHRcdCAqIGF2b2lkIGV4cGVuc2l2ZSBpb3ZfaXRlcl9hZHZhbmNlKCkuIEJ5cGFzc1xuLVx0XHQgKiBiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzKCkgYW5kIHNldCB0aGUgYnZlYyBkaXJlY3RseS5cbi1cdFx0ICovXG4tXHRcdGJpb19pb3ZfYnZlY19zZXQoYmlvLCBpdGVyKTtcbi1cdH0gZWxzZSB7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBVc2VycyBkb24mIzM5O3QgcmVseSBvbiB0aGUgaXRlcmF0b3IgYmVpbmcgaW4gYW55IHBhcnRpY3VsYXJcbiYjNDM7XHQgKiBzdGF0ZSBmb3IgYXN5bmMgSS9PIHJldHVybmluZyAtRUlPQ0JRVUVVRUQsIGhlbmNlIHdlIGNhblxuJiM0MztcdCAqIGF2b2lkIGV4cGVuc2l2ZSBpb3ZfaXRlcl9hZHZhbmNlKCkuIEJ5cGFzc1xuJiM0MztcdCAqIGJpb19pb3ZfaXRlcl9nZXRfcGFnZXMoKSBhbmQgc2V0IHRoZSBidmVjL2RtYWJ1ZiBkaXJlY3RseS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoIWJpb19pb3ZfaXRlcl9zZXQoYmlvLCBpdGVyKSkge1xuIFx0XHRyZXQgPSBibGtkZXZfaW92X2l0ZXJfZ2V0X3BhZ2VzKGJpbywgaXRlciwgYmRldik7XG4gXHRcdGlmICh1bmxpa2VseShyZXQpKVxuIFx0XHRcdGdvdG8gb3V0X2Jpb19wdXQ7XG5AQCAtNzY5LDYgJiM0Mzs3NjcsOSBAQCBzdGF0aWMgc3NpemVfdCBibGtkZXZfd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcbiBcdFx0XHRyZXQgPSBkaXJlY3Rfd3JpdGVfZmFsbGJhY2soaW9jYiwgZnJvbSwgcmV0LFxuIFx0XHRcdFx0XHRibGtkZXZfYnVmZmVyZWRfd3JpdGUoaW9jYiwgZnJvbSkpO1xuIFx0fSBlbHNlIHtcbiYjNDM7XHRcdGlmICh1bmxpa2VseShpb3ZfaXRlcl9pc19kbWFidWZfbWFwKGZyb20pKSlcbiYjNDM7XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcbiBcdFx0LypcbiBcdFx0ICogVGFrZSBpX3J3c2VtIGFuZCBpbnZhbGlkYXRlX2xvY2sgdG8gYXZvaWQgcmFjaW5nIHdpdGhcbiBcdFx0ICogc2V0X2Jsb2Nrc2l6ZSBjaGFuZ2luZyBpX2Jsa2JpdHMvZm9saW8gb3JkZXIgYW5kIHB1bmNoaW5nXG5AQCAtODIzLDYgJiM0Mzs4MjQsOCBAQCBzdGF0aWMgc3NpemVfdCBibGtkZXZfcmVhZF9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICp0bylcbiBcdFx0aWYgKHJldCBcdTAwM2MgMCB8fCAhY291bnQpXG4gXHRcdFx0Z290byByZWV4cGFuZDtcbiBcdH1cbiYjNDM7XHRpZiAodW5saWtlbHkoaW92X2l0ZXJfaXNfZG1hYnVmX21hcCh0bykpKVxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIFxuIFx0LypcbiBcdCAqIFRha2UgaV9yd3NlbSBhbmQgaW52YWxpZGF0ZV9sb2NrIHRvIGF2b2lkIHJhY2luZyB3aXRoIHNldF9ibG9ja3NpemVcbkBAIC05MjYsNiAmIzQzOzkyOSwxOSBAQCBzdGF0aWMgaW50IGJsa2Rldl9tbWFwX3ByZXBhcmUoc3RydWN0IHZtX2FyZWFfZGVzYyAqZGVzYylcbiBcdHJldHVybiBnZW5lcmljX2ZpbGVfbW1hcF9wcmVwYXJlKGRlc2MpO1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCBibGtkZXZfaW5pdF9kbWFfYnVmX2lvX2N0eChzdHJ1Y3QgZmlsZSAqZmlsZSxcbiYjNDM7XHRcdFx0XHQgICAgICBzdHJ1Y3QgZG1hX2J1Zl9pb19jdHggKmN0eClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYgPSBmaWxlX2JkZXYoZmlsZSk7XG4mIzQzO1x0c3RydWN0IGdlbmRpc2sgKmRpc2sgPSBiZGV2LVx1MDAzZWJkX2Rpc2s7XG4mIzQzO1xuJiM0MztcdGlmICghKGZpbGUtXHUwMDNlZl9mbGFncyBcdTAwMjYgT19ESVJFQ1QpKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0aWYgKCFkaXNrLVx1MDAzZWZvcHMtXHUwMDNlaW5pdF9kbWFfYnVmX2lvX2N0eClcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdHJldHVybiBkaXNrLVx1MDAzZWZvcHMtXHUwMDNlaW5pdF9kbWFfYnVmX2lvX2N0eChiZGV2LCBjdHgpO1xuJiM0Mzt9XG4mIzQzO1xuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZGVmX2Jsa19mb3BzID0ge1xuIFx0Lm9wZW5cdFx0PSBibGtkZXZfb3BlbixcbiBcdC5yZWxlYXNlXHQ9IGJsa2Rldl9yZWxlYXNlLFxuQEAgLTk0NCw2ICYjNDM7OTYwLDcgQEAgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkZWZfYmxrX2ZvcHMgPSB7XG4gXHQuZmFsbG9jYXRlXHQ9IGJsa2Rldl9mYWxsb2NhdGUsXG4gXHQudXJpbmdfY21kXHQ9IGJsa2Rldl91cmluZ19jbWQsXG4gXHQuZm9wX2ZsYWdzXHQ9IEZPUF9CVUZGRVJfUkFTWU5DIHwgRk9QX0RPTlRDQUNIRSxcbiYjNDM7XHQuaW5pdF9kbWFfYnVmX2lvX2N0eCA9IGJsa2Rldl9pbml0X2RtYV9idWZfaW9fY3R4LFxuIH07XG4gXG4gc3RhdGljIF9faW5pdCBpbnQgYmxrZGV2X2luaXQodm9pZClcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL2xvb3AuYyBiL2RyaXZlcnMvYmxvY2svbG9vcC5jXG5pbmRleCAyNmQ3MTMwYzNmNTU5Li44NjM5ZmEzNGI4NDcwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ibG9jay9sb29wLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmxvY2svbG9vcC5jXG5AQCAtMzc5LDcgJiM0MzszNzksNyBAQCBzdGF0aWMgaW50IGxvX3J3X2FpbyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBzdHJ1Y3QgbG9vcF9jbWQgKmNtZCxcbiBcdFx0aW92X2l0ZXJfYnZlYyhcdTAwMjZpdGVyLCBydyxcbiBcdFx0XHRfX2J2ZWNfaXRlcl9idmVjKHJxLVx1MDAzZWJpby1cdTAwM2ViaV9pb192ZWMsIHJxLVx1MDAzZWJpby1cdTAwM2ViaV9pdGVyKSxcbiBcdFx0XHRucl9idmVjLCBibGtfcnFfYnl0ZXMocnEpKTtcbi1cdFx0aXRlci5pb3Zfb2Zmc2V0ID0gcnEtXHUwMDNlYmlvLVx1MDAzZWJpX2l0ZXIuYmlfYnZlY19kb25lO1xuJiM0MztcdFx0aXRlci5pb3Zfb2Zmc2V0ID0gcnEtXHUwMDNlYmlvLVx1MDAzZWJpX2l0ZXIuYmlfb2Zmc2V0O1xuIFx0fVxuIFx0YXRvbWljX3NldChcdTAwMjZjbWQtXHUwMDNlcmVmLCAyKTtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3psb29wLmMgYi9kcml2ZXJzL2Jsb2NrL3psb29wLmNcbmluZGV4IGY5N2EyMGNmZGI3Y2UuLjBmZWY1ZGI4ZTViODAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Jsb2NrL3psb29wLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmxvY2svemxvb3AuY1xuQEAgLTU1NCw3ICYjNDM7NTU0LDcgQEAgc3RhdGljIGludCB6bG9vcF9kb19ydyhzdHJ1Y3Qgemxvb3BfY21kICpjbWQpXG4gXHRcdGlvdl9pdGVyX2J2ZWMoXHUwMDI2aXRlciwgcncsXG4gXHRcdFx0X19idmVjX2l0ZXJfYnZlYyhycS1cdTAwM2ViaW8tXHUwMDNlYmlfaW9fdmVjLCBycS1cdTAwM2ViaW8tXHUwMDNlYmlfaXRlciksXG4gXHRcdFx0XHRcdG5yX2J2ZWMsIGJsa19ycV9ieXRlcyhycSkpO1xuLVx0XHRpdGVyLmlvdl9vZmZzZXQgPSBycS1cdTAwM2ViaW8tXHUwMDNlYmlfaXRlci5iaV9idmVjX2RvbmU7XG4mIzQzO1x0XHRpdGVyLmlvdl9vZmZzZXQgPSBycS1cdTAwM2ViaW8tXHUwMDNlYmlfaXRlci5iaV9vZmZzZXQ7XG4gXHR9XG4gXG4gXHRjbWQtXHUwMDNlaW9jYi5raV9wb3MgPSAoY21kLVx1MDAzZXNlY3RvciAtIHpvbmUtXHUwMDNlc3RhcnQpIFx1MDAzY1x1MDAzYyBTRUNUT1JfU0hJRlQ7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEtYnVmL01ha2VmaWxlIGIvZHJpdmVycy9kbWEtYnVmL01ha2VmaWxlXG5pbmRleCBiMjVkNzU1MGJhY2ZkLi41MjM3MzFiMGY4M2VlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9kbWEtYnVmL01ha2VmaWxlXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2RtYS1idWYvTWFrZWZpbGVcbkBAIC0xLDYgJiM0MzsxLDYgQEBcbiAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiBvYmoteSA6PSBkbWEtYnVmLm8gZG1hLWZlbmNlLm8gZG1hLWZlbmNlLWFycmF5Lm8gZG1hLWZlbmNlLWNoYWluLm8gXFxcbi1cdCBkbWEtZmVuY2UtdW53cmFwLm8gZG1hLXJlc3YubyBkbWEtYnVmLW1hcHBpbmcub1xuJiM0MztcdCBkbWEtZmVuY2UtdW53cmFwLm8gZG1hLXJlc3YubyBkbWEtYnVmLW1hcHBpbmcubyBkbWEtYnVmLWlvLm9cbiBvYmotJChDT05GSUdfRE1BQlVGX0hFQVBTKVx0JiM0Mzs9IGRtYS1oZWFwLm9cbiBvYmotJChDT05GSUdfRE1BQlVGX0hFQVBTKVx0JiM0Mzs9IGhlYXBzL1xuIG9iai0kKENPTkZJR19TWU5DX0ZJTEUpXHRcdCYjNDM7PSBzeW5jX2ZpbGUub1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hLWJ1Zi9kbWEtYnVmLWlvLmMgYi9kcml2ZXJzL2RtYS1idWYvZG1hLWJ1Zi1pby5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uMjRmNThmODBjNDVjNFxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9kbWEtYnVmL2RtYS1idWYtaW8uY1xuQEAgLTAsMCAmIzQzOzEsMjc4IEBAXG4mIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXG4mIzQzOy8qXG4mIzQzOyAqIENvbW1vbiBpbmZyYXN0cnVjdHVyZSBmb3Igc3VwcG9yaW5nIGRtYS1idWYgaW4gdGhlIEkvTyBwYXRoLlxuJiM0MzsgKlxuJiM0MzsgKiBDb3B5cmlnaHQgKEMpIDIwMjYgUGF2ZWwgQmVndW5rb3YgXHUwMDNjYXNtbC5zaWxlbmNlQGdtYWlsLmNvbVx1MDAzZVxuJiM0MzsgKi9cbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvZG1hLWJ1Zi1pby5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2RtYS1yZXN2LmhcdTAwM2VcbiYjNDM7XG4mIzQzO3N0cnVjdCBkbWFfYnVmX2lvX2ZlbmNlIHtcbiYjNDM7XHRzdHJ1Y3QgZG1hX2ZlbmNlIGJhc2U7XG4mIzQzO1x0c3BpbmxvY2tfdCBsb2NrO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IGNoYXIgKmRtYV9idWZfaW9fZmVuY2VfZHJ2X25hbWUoc3RydWN0IGRtYV9mZW5jZSAqZmVuY2UpXG4mIzQzO3tcbiYjNDM7XHQvKiBkZWZhdWx0IGZlbmNlIHJlbGVhc2Uga2ZyZWUmIzM5O3MgdGhlIGJhc2UgcG9pbnRlciAqL1xuJiM0MztcdEJVSUxEX0JVR19PTihvZmZzZXRvZihzdHJ1Y3QgZG1hX2J1Zl9pb19mZW5jZSwgYmFzZSkpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gXCYjMzQ7ZG1hLWJ1Zi1pby1jdHhcJiMzNDs7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBjaGFyICpkbWFfYnVmX2lvX2ZlbmNlX3RpbWVsaW5lX25hbWUoc3RydWN0IGRtYV9mZW5jZSAqZmVuY2UpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gXCYjMzQ7ZG1hLWJ1Zi1pby1jdHhcJiMzNDs7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2NvbnN0IHN0cnVjdCBkbWFfZmVuY2Vfb3BzIGRtYV9idWZfaW9fZmVuY2Vfb3BzID0ge1xuJiM0MztcdC5nZXRfZHJpdmVyX25hbWUgPSBkbWFfYnVmX2lvX2ZlbmNlX2Rydl9uYW1lLFxuJiM0MztcdC5nZXRfdGltZWxpbmVfbmFtZSA9IGRtYV9idWZfaW9fZmVuY2VfdGltZWxpbmVfbmFtZSxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGRtYV9idWZfaW9fY3R4X2Rlc3Ryb3lfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZG1hX2J1Zl9pb19jdHggKmN0eCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZG1hX2J1Zl9pb19jdHgsXG4mIzQzO1x0XHRcdFx0XHRcdCAgcmVsZWFzZV93b3JrKTtcbiYjNDM7XG4mIzQzO1x0aWYgKFdBUk5fT05fT05DRShyZWZjb3VudF9yZWFkKFx1MDAyNmN0eC1cdTAwM2VyZWZzKSkpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGN0eC1cdTAwM2VkZXZfb3BzLVx1MDAzZXJlbGVhc2UoY3R4KTtcbiYjNDM7XHRkbWFfYnVmX3B1dChjdHgtXHUwMDNlZG1hYnVmKTtcbiYjNDM7XHRrZnJlZShjdHgpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBkbWFfYnVmX2lvX21hcF9yZWxlYXNlX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRtYV9idWZfaW9fbWFwICptYXAgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGRtYV9idWZfaW9fbWFwLFxuJiM0MztcdFx0XHRcdFx0XHQgIHJlbGVhc2Vfd29yayk7XG4mIzQzO1x0c3RydWN0IGRtYV9idWZfaW9fZmVuY2UgKmZlbmNlID0gbWFwLVx1MDAzZWZlbmNlO1xuJiM0MztcdHN0cnVjdCBkbWFfYnVmX2lvX2N0eCAqY3R4ID0gbWFwLVx1MDAzZWN0eDtcbiYjNDM7XHRzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmID0gY3R4LVx1MDAzZWRtYWJ1ZjtcbiYjNDM7XG4mIzQzO1x0LyogdGhlIHJlbGVhc2UgcGF0aCBtdXN0IHdhaXQgZm9yIGZlbmNlcyAqL1xuJiM0MztcdGlmIChXQVJOX09OX09OQ0UocmVmY291bnRfcmVhZChcdTAwMjZjdHgtXHUwMDNlcmVmcykgPT0gMCkpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdC8qIFByZXZlbnQgZnJvbSBkZXN0b3lpbmcgdGhlIGN0eCB3aGlsZSB1bm1hcHBpbmcgKi9cbiYjNDM7XHRyZWZjb3VudF9pbmMoXHUwMDI2Y3R4LVx1MDAzZXJlZnMpO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFRoZXJlIGFyZSBubyBtb3JlIHJlcXVlc3RzIHVzaW5nIHRoZSBtYXAsIHdlIGNhbiBzaWduYWwgdGhlIGZlbmNlLlxuJiM0MztcdCAqIEl0IHNob3VsZCBiZSBkb25lIGJlZm9yZSB0YWtpbmcgdGhlIHJlc3YgbG9jayBhcyBzb21lb25lIGNvdWxkIGJlXG4mIzQzO1x0ICogd2FpdGluZyBmb3IgdGhlIGZlbmNlIHdoaWxlIGhvbGRpbmcgdGhlIGxvY2suXG4mIzQzO1x0ICovXG4mIzQzO1x0ZG1hX2ZlbmNlX3NpZ25hbChcdTAwMjZmZW5jZS1cdTAwM2ViYXNlKTtcbiYjNDM7XG4mIzQzO1x0ZG1hX3Jlc3ZfbG9jayhkbWFidWYtXHUwMDNlcmVzdiwgTlVMTCk7XG4mIzQzO1x0Y3R4LVx1MDAzZWRldl9vcHMtXHUwMDNldW5tYXAoY3R4LCBtYXApO1xuJiM0MztcdGRtYV9yZXN2X3VubG9jayhkbWFidWYtXHUwMDNlcmVzdik7XG4mIzQzO1xuJiM0MztcdGRtYV9mZW5jZV9wdXQoXHUwMDI2ZmVuY2UtXHUwMDNlYmFzZSk7XG4mIzQzO1x0cGVyY3B1X3JlZl9leGl0KFx1MDAyNm1hcC1cdTAwM2VyZWZzKTtcbiYjNDM7XHRrZnJlZShtYXApO1xuJiM0MztcbiYjNDM7XHRpZiAocmVmY291bnRfZGVjX2FuZF90ZXN0KFx1MDAyNmN0eC1cdTAwM2VyZWZzKSkge1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIERlc3RydWN0aW9uIG5lZWRzIHRvIHdhaXQgZm9yIEkvTyBhbmQgZG1hIGZlbmNlcy4gRGVmZXIgaXQgdG9cbiYjNDM7XHRcdCAqIHNpbXBsaWZ5IGxvY2tpbmcuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdElOSVRfV09SSyhcdTAwMjZjdHgtXHUwMDNlcmVsZWFzZV93b3JrLCBkbWFfYnVmX2lvX2N0eF9kZXN0cm95X3dvcmspO1xuJiM0MztcdFx0cXVldWVfd29yayhzeXN0ZW1fd3EsIFx1MDAyNmN0eC1cdTAwM2VyZWxlYXNlX3dvcmspO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgZG1hX2J1Zl9pb19tYXBfcmVmc19yZWxlYXNlKHN0cnVjdCBwZXJjcHVfcmVmICpyZWYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZG1hX2J1Zl9pb19tYXAgKm1hcCA9IGNvbnRhaW5lcl9vZihyZWYsIHN0cnVjdCBkbWFfYnVmX2lvX21hcCwgcmVmcyk7XG4mIzQzO1xuJiM0MztcdC8qIG1pZ2h0IHNsZWVwLCB1c2UgYSB3b3JrZXIgKi9cbiYjNDM7XHRJTklUX1dPUksoXHUwMDI2bWFwLVx1MDAzZXJlbGVhc2Vfd29yaywgZG1hX2J1Zl9pb19tYXBfcmVsZWFzZV93b3JrKTtcbiYjNDM7XHRxdWV1ZV93b3JrKHN5c3RlbV93cSwgXHUwMDI2bWFwLVx1MDAzZXJlbGVhc2Vfd29yayk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCBkbWFfYnVmX2lvX2luaXRfbWFwKHN0cnVjdCBkbWFfYnVmX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZG1hX2J1Zl9pb19tYXAgKm1hcClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkbWFfYnVmX2lvX2ZlbmNlICpmZW5jZSA9IE5VTEw7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0ZmVuY2UgPSBremFsbG9jKHNpemVvZigqZmVuY2UpLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRpZiAoIWZlbmNlKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1xuJiM0MztcdHJldCA9IHBlcmNwdV9yZWZfaW5pdChcdTAwMjZtYXAtXHUwMDNlcmVmcywgZG1hX2J1Zl9pb19tYXBfcmVmc19yZWxlYXNlLCAwLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRrZnJlZShmZW5jZSk7XG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0c3Bpbl9sb2NrX2luaXQoXHUwMDI2ZmVuY2UtXHUwMDNlbG9jayk7XG4mIzQzO1x0ZG1hX2ZlbmNlX2luaXQoXHUwMDI2ZmVuY2UtXHUwMDNlYmFzZSwgXHUwMDI2ZG1hX2J1Zl9pb19mZW5jZV9vcHMsIFx1MDAyNmZlbmNlLVx1MDAzZWxvY2ssXG4mIzQzO1x0XHRcdGN0eC1cdTAwM2VmZW5jZV9jdHgsIGF0b21pY19pbmNfcmV0dXJuKFx1MDAyNmN0eC1cdTAwM2VmZW5jZV9zZXEpKTtcbiYjNDM7XHRtYXAtXHUwMDNlZmVuY2UgPSBmZW5jZTtcbiYjNDM7XHRtYXAtXHUwMDNlY3R4ID0gY3R4O1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfTlNfR1BMKGRtYV9idWZfaW9faW5pdF9tYXAsIFwmIzM0O0RNQV9CVUZcJiMzNDspO1xuJiM0MztcbiYjNDM7c3RydWN0IGRtYV9idWZfaW9fbWFwICpkbWFfYnVmX2lvX2NyZWF0ZV9tYXAoc3RydWN0IGRtYV9idWZfaW9fY3R4ICpjdHgpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmID0gY3R4LVx1MDAzZWRtYWJ1ZjtcbiYjNDM7XHRzdHJ1Y3QgZG1hX2J1Zl9pb19tYXAgKm1hcDtcbiYjNDM7XHRsb25nIHJldDtcbiYjNDM7XG4mIzQzO3JldHJ5OlxuJiM0MztcdC8qXG4mIzQzO1x0ICogLVx1MDAzZWRtYWJ1Zl9tYXAoKSB3aWxsIGJlIGNhbGxpbmcgZG1hX2J1Zl9tYXBfYXR0YWNobWVudCgpLCBmb3Igd2hpY2hcbiYjNDM7XHQgKiB3ZSYjMzk7bGwgbmVlZCB0byB3YWl0IGZvciBmZW5jZXMuIERvIGEgYml0IG5pY2VyIGFuZCB0cnkgdG8gd2FpdFxuJiM0MztcdCAqIHdpdGhvdXQgdGhlIHJlc3YgbG9jayBmaXJzdC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRyZXQgPSBkbWFfcmVzdl93YWl0X3RpbWVvdXQoZG1hYnVmLVx1MDAzZXJlc3YsIERNQV9SRVNWX1VTQUdFX0tFUk5FTCxcbiYjNDM7XHRcdFx0XHQgICAgdHJ1ZSwgTUFYX1NDSEVEVUxFX1RJTUVPVVQpO1xuJiM0MztcdGlmICghcmV0KVxuJiM0MztcdFx0cmV0ID0gLUVBR0FJTjtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIEVSUl9QVFIocmV0KTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gZG1hX3Jlc3ZfbG9ja19pbnRlcnJ1cHRpYmxlKGRtYWJ1Zi1cdTAwM2VyZXN2LCBOVUxMKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIEVSUl9QVFIocmV0KTtcbiYjNDM7XG4mIzQzO1x0bWFwID0gZG1hX2J1Zl9pb19nZXRfbWFwKGN0eCk7XG4mIzQzO1x0aWYgKG1hcCkge1xuJiM0MztcdFx0cmV0ID0gMDtcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKGRtYV9yZXN2X3dhaXRfdGltZW91dChkbWFidWYtXHUwMDNlcmVzdiwgRE1BX1JFU1ZfVVNBR0VfS0VSTkVMLFxuJiM0MztcdFx0XHRcdCAgdHJ1ZSwgMCkgXHUwMDNjIDApIHtcbiYjNDM7XHRcdGRtYV9yZXN2X3VubG9jayhkbWFidWYtXHUwMDNlcmVzdik7XG4mIzQzO1x0XHRnb3RvIHJldHJ5O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0bWFwID0gY3R4LVx1MDAzZWRldl9vcHMtXHUwMDNlbWFwKGN0eCk7XG4mIzQzO1x0aWYgKElTX0VSUihtYXApKSB7XG4mIzQzO1x0XHRyZXQgPSBQVFJfRVJSKG1hcCk7XG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChXQVJOX09OX09OQ0UoIW1hcC1cdTAwM2VzZWdfc2hpZnQpKVxuJiM0MztcdFx0cmV0dXJuIEVSUl9QVFIoLUVGQVVMVCk7XG4mIzQzO1xuJiM0MztcdHBlcmNwdV9yZWZfZ2V0KFx1MDAyNm1hcC1cdTAwM2VyZWZzKTtcbiYjNDM7XHRyY3VfYXNzaWduX3BvaW50ZXIoY3R4LVx1MDAzZW1hcCwgbWFwKTtcbiYjNDM7b3V0OlxuJiM0MztcdGRtYV9yZXN2X3VubG9jayhkbWFidWYtXHUwMDNlcmVzdik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKHJldCk7XG4mIzQzO1x0cmV0dXJuIG1hcDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgZG1hX2J1Zl9pb19kcm9wX21hcChzdHJ1Y3QgZG1hX2J1Zl9pb19jdHggKmN0eClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkbWFfYnVmICpkbWFidWYgPSBjdHgtXHUwMDNlZG1hYnVmO1xuJiM0MztcdHN0cnVjdCBkbWFfYnVmX2lvX21hcCAqbWFwO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGRtYV9yZXN2X2Fzc2VydF9oZWxkKGRtYWJ1Zi1cdTAwM2VyZXN2KTtcbiYjNDM7XG4mIzQzO1x0bWFwID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChjdHgtXHUwMDNlbWFwLFxuJiM0MztcdFx0XHRcdFx0ZG1hX3Jlc3ZfaGVsZChkbWFidWYtXHUwMDNlcmVzdikpO1xuJiM0MztcdGlmICghbWFwKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdHJjdV9hc3NpZ25fcG9pbnRlcihjdHgtXHUwMDNlbWFwLCBOVUxMKTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gZG1hX3Jlc3ZfcmVzZXJ2ZV9mZW5jZXMoZG1hYnVmLVx1MDAzZXJlc3YsIDEpO1xuJiM0MztcdGlmIChXQVJOX09OX09OQ0UocmV0KSkge1xuJiM0MztcdFx0c3RydWN0IGRtYV9mZW5jZSAqZmVuY2UgPSBcdTAwMjZtYXAtXHUwMDNlZmVuY2UtXHUwMDNlYmFzZTtcbiYjNDM7XG4mIzQzO1x0XHRkbWFfZmVuY2VfZ2V0KGZlbmNlKTtcbiYjNDM7XHRcdHBlcmNwdV9yZWZfa2lsbChcdTAwMjZtYXAtXHUwMDNlcmVmcyk7XG4mIzQzO1x0XHRkbWFfZmVuY2Vfd2FpdChmZW5jZSwgZmFsc2UpO1xuJiM0MztcdFx0ZG1hX2ZlbmNlX3B1dChmZW5jZSk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRkbWFfcmVzdl9hZGRfZmVuY2UoZG1hYnVmLVx1MDAzZXJlc3YsIFx1MDAyNm1hcC1cdTAwM2VmZW5jZS1cdTAwM2ViYXNlLFxuJiM0MztcdFx0XHQgICBETUFfUkVTVl9VU0FHRV9LRVJORUwpO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogRGVsYXkgZGVzdHJ1Y3Rpb24gdW50aWwgYWxsIGluZmxpZ2h0IHJlcXVlc3RzIHVzaW5nIHRoZSBtYXAgYXJlXG4mIzQzO1x0ICogZ29uZS4gSXQmIzM5O2xsIGFsc28gc2lnbmFsIHRoZSBmZW5jZSB0aGVuLlxuJiM0MztcdCAqL1xuJiM0MztcdHBlcmNwdV9yZWZfa2lsbChcdTAwMjZtYXAtXHUwMDNlcmVmcyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZvaWQgZG1hX2J1Zl9pb19pbnZhbGlkYXRlX21hcHBpbmdzKHN0cnVjdCBkbWFfYnVmX2lvX2N0eCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0ZG1hX2J1Zl9pb19kcm9wX21hcChjdHgpO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfTlNfR1BMKGRtYV9idWZfaW9faW52YWxpZGF0ZV9tYXBwaW5ncywgXCYjMzQ7RE1BX0JVRlwmIzM0Oyk7XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBkbWFfYnVmX2lvX2N0eF9yZWxlYXNlX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRtYV9idWZfaW9fY3R4ICpjdHggPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGRtYV9idWZfaW9fY3R4LFxuJiM0MztcdFx0XHRcdFx0XHQgIHJlbGVhc2Vfd29yayk7XG4mIzQzO1x0c3RydWN0IGRtYV9idWYgKmRtYWJ1ZiA9IGN0eC1cdTAwM2VkbWFidWY7XG4mIzQzO1x0bG9uZyByZXQ7XG4mIzQzO1xuJiM0MztcdGRtYV9yZXN2X2xvY2soZG1hYnVmLVx1MDAzZXJlc3YsIE5VTEwpO1xuJiM0MztcdC8qIFJlbW92ZSB0aGUgbGFzdCBtYXAsIHRoZXJlIHNob3VsZCBiZSBubyBuZXcgb25lcyBnb2luZyBmb3J3YXJkLiAqL1xuJiM0MztcdGRtYV9idWZfaW9fZHJvcF9tYXAoY3R4KTtcbiYjNDM7XHRkbWFfcmVzdl91bmxvY2soZG1hYnVmLVx1MDAzZXJlc3YpO1xuJiM0MztcbiYjNDM7XHQvKiBXYWl0IHVudGlsIGFsbCBtYXBzIGFyZSBkZXN0cm95ZWQuICovXG4mIzQzO1x0cmV0ID0gZG1hX3Jlc3Zfd2FpdF90aW1lb3V0KGRtYWJ1Zi1cdTAwM2VyZXN2LCBETUFfUkVTVl9VU0FHRV9LRVJORUwsXG4mIzQzO1x0XHRcdFx0ICAgIGZhbHNlLCBNQVhfU0NIRURVTEVfVElNRU9VVCk7XG4mIzQzO1xuJiM0MztcdGlmIChXQVJOX09OX09OQ0UocmV0IFx1MDAzYz0gMCkpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0aWYgKFdBUk5fT05fT05DRShyY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKGN0eC1cdTAwM2VtYXAsIHRydWUpKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0aWYgKHJlZmNvdW50X2RlY19hbmRfdGVzdChcdTAwMjZjdHgtXHUwMDNlcmVmcykpXG4mIzQzO1x0XHRkbWFfYnVmX2lvX2N0eF9kZXN0cm95X3dvcmsoXHUwMDI2Y3R4LVx1MDAzZXJlbGVhc2Vfd29yayk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZvaWQgZG1hX2J1Zl9pb19jdHhfcmVsZWFzZShzdHJ1Y3QgZG1hX2J1Zl9pb19jdHggKmN0eClcbiYjNDM7e1xuJiM0MztcdC8qXG4mIzQzO1x0ICogRGVzdHJ1Y3Rpb24gbmVlZHMgdG8gd2FpdCBmb3IgSS9PIGFuZCBkbWEgZmVuY2VzLiBEZWZlciBpdCB0b1xuJiM0MztcdCAqIHNpbXBsaWZ5IGxvY2tpbmcuXG4mIzQzO1x0ICovXG4mIzQzO1x0SU5JVF9XT1JLKFx1MDAyNmN0eC1cdTAwM2VyZWxlYXNlX3dvcmssIGRtYV9idWZfaW9fY3R4X3JlbGVhc2Vfd29yayk7XG4mIzQzO1x0cXVldWVfd29yayhzeXN0ZW1fd3EsIFx1MDAyNmN0eC1cdTAwM2VyZWxlYXNlX3dvcmspO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgZG1hX2J1Zl9pb19jdHhfY3JlYXRlKHN0cnVjdCBmaWxlICpmaWxlLFxuJiM0MztcdFx0XHQgICBzdHJ1Y3QgZG1hX2J1Zl9pb19jdHggKmN0eCxcbiYjNDM7XHRcdFx0ICAgc3RydWN0IGRtYV9idWYgKmRtYWJ1ZixcbiYjNDM7XHRcdFx0ICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFmaWxlLVx1MDAzZWZfb3AtXHUwMDNlaW5pdF9kbWFfYnVmX2lvX2N0eClcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XG4mIzQzO1x0bWVtc2V0KGN0eCwgMCwgc2l6ZW9mKCpjdHgpKTtcbiYjNDM7XHRjdHgtXHUwMDNlZmVuY2VfY3R4ID0gZG1hX2ZlbmNlX2NvbnRleHRfYWxsb2MoMSk7XG4mIzQzO1x0Y3R4LVx1MDAzZWRpciA9IGRpcjtcbiYjNDM7XHRjdHgtXHUwMDNlZG1hYnVmID0gZG1hYnVmO1xuJiM0MztcdHJlZmNvdW50X3NldChcdTAwMjZjdHgtXHUwMDNlcmVmcywgMSk7XG4mIzQzO1x0Z2V0X2RtYV9idWYoZG1hYnVmKTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gZmlsZS1cdTAwM2VmX29wLVx1MDAzZWluaXRfZG1hX2J1Zl9pb19jdHgoZmlsZSwgY3R4KTtcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRtZW1zZXQoY3R4LCAwLCBzaXplb2YoKmN0eCkpO1xuJiM0MztcdFx0ZG1hX2J1Zl9wdXQoZG1hYnVmKTtcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoV0FSTl9PTl9PTkNFKCFjdHgtXHUwMDNlZGV2X29wcyB8fFxuJiM0MztcdFx0XHQgIWN0eC1cdTAwM2VkZXZfb3BzLVx1MDAzZW1hcCB8fFxuJiM0MztcdFx0XHQgIWN0eC1cdTAwM2VkZXZfb3BzLVx1MDAzZXVubWFwIHx8XG4mIzQzO1x0XHRcdCAhY3R4LVx1MDAzZWRldl9vcHMtXHUwMDNlcmVsZWFzZSkpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvZG0taW8tcmV3aW5kLmMgYi9kcml2ZXJzL21kL2RtLWlvLXJld2luZC5jXG5pbmRleCA2MTU1YjAxMTdjOWQ2Li5iMjI3MTljNjQxMWNmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9tZC9kbS1pby1yZXdpbmQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9tZC9kbS1pby1yZXdpbmQuY1xuQEAgLTE2LDEyICYjNDM7MTYsMTIgQEAgc3RhdGljIGlubGluZSBib29sIGRtX2J2ZWNfaXRlcl9yZXdpbmQoY29uc3Qgc3RydWN0IGJpb192ZWMgKmJ2LFxuIFx0aW50IGlkeDtcbiBcbiBcdGl0ZXItXHUwMDNlYmlfc2l6ZSAmIzQzOz0gYnl0ZXM7XG4tXHRpZiAoYnl0ZXMgXHUwMDNjPSBpdGVyLVx1MDAzZWJpX2J2ZWNfZG9uZSkge1xuLVx0XHRpdGVyLVx1MDAzZWJpX2J2ZWNfZG9uZSAtPSBieXRlcztcbiYjNDM7XHRpZiAoYnl0ZXMgXHUwMDNjPSBpdGVyLVx1MDAzZWJpX29mZnNldCkge1xuJiM0MztcdFx0aXRlci1cdTAwM2ViaV9vZmZzZXQgLT0gYnl0ZXM7XG4gXHRcdHJldHVybiB0cnVlO1xuIFx0fVxuIFxuLVx0Ynl0ZXMgLT0gaXRlci1cdTAwM2ViaV9idmVjX2RvbmU7XG4mIzQzO1x0Ynl0ZXMgLT0gaXRlci1cdTAwM2ViaV9vZmZzZXQ7XG4gXHRpZHggPSBpdGVyLVx1MDAzZWJpX2lkeCAtIDE7XG4gXG4gXHR3aGlsZSAoaWR4IFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgYnl0ZXMgXHUwMDI2XHUwMDI2IGJ5dGVzIFx1MDAzZSBidltpZHhdLmJ2X2xlbikge1xuQEAgLTMyLDEzICYjNDM7MzIsMTMgQEAgc3RhdGljIGlubGluZSBib29sIGRtX2J2ZWNfaXRlcl9yZXdpbmQoY29uc3Qgc3RydWN0IGJpb192ZWMgKmJ2LFxuIFx0aWYgKFdBUk5fT05DRShpZHggXHUwMDNjIDAgXHUwMDI2XHUwMDI2IGJ5dGVzLFxuIFx0XHQgICAgICBcJiMzNDtBdHRlbXB0ZWQgdG8gcmV3aW5kIGl0ZXIgYmV5b25kIGJ2ZWMmIzM5O3MgYm91bmRhcmllc1xcblwmIzM0OykpIHtcbiBcdFx0aXRlci1cdTAwM2ViaV9zaXplIC09IGJ5dGVzO1xuLVx0XHRpdGVyLVx1MDAzZWJpX2J2ZWNfZG9uZSA9IDA7XG4mIzQzO1x0XHRpdGVyLVx1MDAzZWJpX29mZnNldCA9IDA7XG4gXHRcdGl0ZXItXHUwMDNlYmlfaWR4ID0gMDtcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFx0fVxuIFxuIFx0aXRlci1cdTAwM2ViaV9pZHggPSBpZHg7XG4tXHRpdGVyLVx1MDAzZWJpX2J2ZWNfZG9uZSA9IGJ2W2lkeF0uYnZfbGVuIC0gYnl0ZXM7XG4mIzQzO1x0aXRlci1cdTAwM2ViaV9vZmZzZXQgPSBidltpZHhdLmJ2X2xlbiAtIGJ5dGVzO1xuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuQEAgLTExMywxMCAmIzQzOzExMywxMiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZG1fYmlvX3Jld2luZF9pdGVyKGNvbnN0IHN0cnVjdCBiaW8gKmJpbyxcbiBcdGl0ZXItXHUwMDNlYmlfc2VjdG9yIC09IGJ5dGVzIFx1MDAzZVx1MDAzZSA5O1xuIFxuIFx0LyogTm8gYWR2YW5jZSBtZWFucyBubyByZXdpbmQgKi9cbi1cdGlmIChiaW9fbm9fYWR2YW5jZV9pdGVyKGJpbykpXG4mIzQzO1x0aWYgKGJpb19ub19hZHZhbmNlX2l0ZXIoYmlvKSkge1xuIFx0XHRpdGVyLVx1MDAzZWJpX3NpemUgJiM0Mzs9IGJ5dGVzO1xuLVx0ZWxzZVxuJiM0MztcdFx0aXRlci1cdTAwM2ViaV9vZmZzZXQgLT0gYnl0ZXM7XG4mIzQzO1x0fSBlbHNlIHtcbiBcdFx0ZG1fYnZlY19pdGVyX3Jld2luZChiaW8tXHUwMDNlYmlfaW9fdmVjLCBpdGVyLCBieXRlcyk7XG4mIzQzO1x0fVxuIH1cbiBcbiAvKipcbmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2RtLXBjYWNoZS9zZWdtZW50LmMgYi9kcml2ZXJzL21kL2RtLXBjYWNoZS9zZWdtZW50LmNcbmluZGV4IDdlOTgxODcwMTQ0NTEuLjhmODgxNmUxYzUzOWYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL21kL2RtLXBjYWNoZS9zZWdtZW50LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbWQvZG0tcGNhY2hlL3NlZ21lbnQuY1xuQEAgLTE0LDcgJiM0MzsxNCw3IEBAIGludCBzZWdtZW50X2NvcHlfdG9fYmlvKHN0cnVjdCBwY2FjaGVfc2VnbWVudCAqc2VnbWVudCxcbiBcbiBcdGlvdl9pdGVyX2J2ZWMoXHUwMDI2aXRlciwgSVRFUl9ERVNULCBcdTAwMjZiaW8tXHUwMDNlYmlfaW9fdmVjW2Jpby1cdTAwM2ViaV9pdGVyLmJpX2lkeF0sXG4gXHRcdFx0YmlvX3NlZ21lbnRzKGJpbyksIGJpby1cdTAwM2ViaV9pdGVyLmJpX3NpemUpO1xuLVx0aXRlci5pb3Zfb2Zmc2V0ID0gYmlvLVx1MDAzZWJpX2l0ZXIuYmlfYnZlY19kb25lO1xuJiM0MztcdGl0ZXIuaW92X29mZnNldCA9IGJpby1cdTAwM2ViaV9pdGVyLmJpX29mZnNldDtcbiBcdGlmIChiaW9fb2ZmKVxuIFx0XHRpb3ZfaXRlcl9hZHZhbmNlKFx1MDAyNml0ZXIsIGJpb19vZmYpO1xuIFxuQEAgLTM1LDcgJiM0MzszNSw3IEBAIGludCBzZWdtZW50X2NvcHlfZnJvbV9iaW8oc3RydWN0IHBjYWNoZV9zZWdtZW50ICpzZWdtZW50LFxuIFxuIFx0aW92X2l0ZXJfYnZlYyhcdTAwMjZpdGVyLCBJVEVSX1NPVVJDRSwgXHUwMDI2YmlvLVx1MDAzZWJpX2lvX3ZlY1tiaW8tXHUwMDNlYmlfaXRlci5iaV9pZHhdLFxuIFx0XHRcdGJpb19zZWdtZW50cyhiaW8pLCBiaW8tXHUwMDNlYmlfaXRlci5iaV9zaXplKTtcbi1cdGl0ZXIuaW92X29mZnNldCA9IGJpby1cdTAwM2ViaV9pdGVyLmJpX2J2ZWNfZG9uZTtcbiYjNDM7XHRpdGVyLmlvdl9vZmZzZXQgPSBiaW8tXHUwMDNlYmlfaXRlci5iaV9vZmZzZXQ7XG4gXHRpZiAoYmlvX29mZilcbiBcdFx0aW92X2l0ZXJfYWR2YW5jZShcdTAwMjZpdGVyLCBiaW9fb2ZmKTtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL252ZGltbS9idHQuYyBiL2RyaXZlcnMvbnZkaW1tL2J0dC5jXG5pbmRleCA3ZTExMTI5NjBkN2Y4Li41ZDkxMGE2NDUwM2QzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9udmRpbW0vYnR0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbnZkaW1tL2J0dC5jXG5AQCAtMTE1NSw3ICYjNDM7MTE1NSw3IEBAIHN0YXRpYyBpbnQgYnR0X3J3X2ludGVncml0eShzdHJ1Y3QgYnR0ICpidHQsIHN0cnVjdCBiaW9faW50ZWdyaXR5X3BheWxvYWQgKmJpcCxcbiBcdFx0YnYgPSBidmVjX2l0ZXJfYnZlYyhiaXAtXHUwMDNlYmlwX3ZlYywgYmlwLVx1MDAzZWJpcF9pdGVyKTtcbiBcdFx0LypcbiBcdFx0ICogVGhlICYjMzk7YnYmIzM5OyBvYnRhaW5lZCBmcm9tIGJ2ZWNfaXRlcl9idmVjIGhhcyBpdHMgLmJ2X2xlbiBhbmRcbi1cdFx0ICogLmJ2X29mZnNldCBhbHJlYWR5IGFkanVzdGVkIGZvciBpdGVyLVx1MDAzZWJpX2J2ZWNfZG9uZSwgYW5kIHdlXG4mIzQzO1x0XHQgKiAuYnZfb2Zmc2V0IGFscmVhZHkgYWRqdXN0ZWQgZm9yIGl0ZXItXHUwMDNlYmlfb2Zmc2V0LCBhbmQgd2VcbiBcdFx0ICogY2FuIHVzZSB0aG9zZSBkaXJlY3RseVxuIFx0XHQgKi9cbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMgYi9kcml2ZXJzL252bWUvaG9zdC9jb3JlLmNcbmluZGV4IDQ1M2MxZjBiMmRkMDkuLjhiZDQwNzYwM2Q5MjggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL252bWUvaG9zdC9jb3JlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbnZtZS9ob3N0L2NvcmUuY1xuQEAgLTI2NzYsNiAmIzQzOzI2NzYsMTcgQEAgc3RhdGljIGludCBudm1lX3JlcG9ydF96b25lcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgc2VjdG9yX3Qgc2VjdG9yLFxuICNkZWZpbmUgbnZtZV9yZXBvcnRfem9uZXNcdE5VTExcbiAjZW5kaWYgLyogQ09ORklHX0JMS19ERVZfWk9ORUQgKi9cbiBcbiYjNDM7c3RhdGljIGludCBudm1lX2luaXRfZG1hX2J1Zl9pb19jdHgoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldixcbiYjNDM7XHRcdHN0cnVjdCBkbWFfYnVmX2lvX2N0eCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG52bWVfbnMgKm5zID0gYmRldi1cdTAwM2ViZF9kaXNrLVx1MDAzZXByaXZhdGVfZGF0YTtcbiYjNDM7XHRzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsID0gbnMtXHUwMDNlY3RybDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFjdHJsLVx1MDAzZW9wcy1cdTAwM2Vpbml0X2RtYV9idWZfaW9fY3R4KVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0cmV0dXJuIGN0cmwtXHUwMDNlb3BzLVx1MDAzZWluaXRfZG1hX2J1Zl9pb19jdHgoY3RybCwgY3R4KTtcbiYjNDM7fVxuJiM0MztcbiBjb25zdCBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgbnZtZV9iZGV2X29wcyA9IHtcbiBcdC5vd25lclx0XHQ9IFRISVNfTU9EVUxFLFxuIFx0LmlvY3RsXHRcdD0gbnZtZV9pb2N0bCxcbkBAIC0yNjg2LDYgJiM0MzsyNjk3LDcgQEAgY29uc3Qgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIG52bWVfYmRldl9vcHMgPSB7XG4gXHQuZ2V0X3VuaXF1ZV9pZFx0PSBudm1lX2dldF91bmlxdWVfaWQsXG4gXHQucmVwb3J0X3pvbmVzXHQ9IG52bWVfcmVwb3J0X3pvbmVzLFxuIFx0LnByX29wc1x0XHQ9IFx1MDAyNm52bWVfcHJfb3BzLFxuJiM0MztcdC5pbml0X2RtYV9idWZfaW9fY3R4ID0gbnZtZV9pbml0X2RtYV9idWZfaW9fY3R4LFxuIH07XG4gXG4gc3RhdGljIGludCBudm1lX3dhaXRfcmVhZHkoc3RydWN0IG52bWVfY3RybCAqY3RybCwgdTMyIG1hc2ssIHUzMiB2YWwsXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9udm1lL2hvc3QvbnZtZS5oIGIvZHJpdmVycy9udm1lL2hvc3QvbnZtZS5oXG5pbmRleCA4MjQ2NTFjYzg5OGRiLi4wMzRjMzFhZjhmZWNmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9udm1lL2hvc3QvbnZtZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL252bWUvaG9zdC9udm1lLmhcbkBAIC02NTIsNiAmIzQzOzY1Miw4IEBAIHN0cnVjdCBudm1lX2N0cmxfb3BzIHtcbiBcdGludCAoKmdldF9hZGRyZXNzKShzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsLCBjaGFyICpidWYsIGludCBzaXplKTtcbiBcdHZvaWQgKCpwcmludF9kZXZpY2VfaW5mbykoc3RydWN0IG52bWVfY3RybCAqY3RybCk7XG4gXHRib29sICgqc3VwcG9ydHNfcGNpX3AycGRtYSkoc3RydWN0IG52bWVfY3RybCAqY3RybCk7XG4mIzQzO1x0aW50ICgqaW5pdF9kbWFfYnVmX2lvX2N0eCkoc3RydWN0IG52bWVfY3RybCAqY3RybCxcbiYjNDM7XHRcdFx0XHQgICBzdHJ1Y3QgZG1hX2J1Zl9pb19jdHggKmN0eCk7XG4gXHR1bnNpZ25lZCBsb25nICgqZ2V0X3ZpcnRfYm91bmRhcnkpKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwsIGJvb2wgaXNfYWRtaW4pO1xuIH07XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9udm1lL2hvc3QvcGNpLmMgYi9kcml2ZXJzL252bWUvaG9zdC9wY2kuY1xuaW5kZXggNjk5MzJkNjQwYjUzNy4uNjdlMjZkNmU4ZjI1NSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbnZtZS9ob3N0L3BjaS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL252bWUvaG9zdC9wY2kuY1xuQEAgLTI3LDYgJiM0MzsyNyw4IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaW8tNjQtbm9uYXRvbWljLWxvLWhpLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pby02NC1ub25hdG9taWMtaGktbG8uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NlZC1vcGFsLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvZG1hLWJ1Zi1pby5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2RtYS1yZXN2LmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcJiMzNDt0cmFjZS5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7bnZtZS5oXCYjMzQ7XG5AQCAtMzkzLDYgJiM0MzszOTUsMTMgQEAgc3RydWN0IG52bWVfcXVldWUge1xuIFx0c3RydWN0IGNvbXBsZXRpb24gZGVsZXRlX2RvbmU7XG4gfTtcbiBcbiYjNDM7c3RydWN0IG52bWVfZG1hYnVmX21hcCB7XG4mIzQzO1x0c3RydWN0IGRtYV9idWZfaW9fbWFwIGJhc2U7XG4mIzQzO1x0c3RydWN0IHNnX3RhYmxlICpzZ3Q7XG4mIzQzO1x0dW5zaWduZWQgbnJfZW50cmllcztcbiYjNDM7XHRkbWFfYWRkcl90IGRtYV9saXN0W107XG4mIzQzO307XG4mIzQzO1xuIC8qIGJpdHMgZm9yIGlvZC1cdTAwM2VmbGFncyAqL1xuIGVudW0gbnZtZV9pb2RfZmxhZ3Mge1xuIFx0LyogdGhpcyBjb21tYW5kIGhhcyBiZWVuIGFib3J0ZWQgYnkgdGhlIHRpbWVvdXQgaGFuZGxlciAqL1xuQEAgLTg1OSw2ICYjNDM7ODY4LDEzOCBAQCBzdGF0aWMgdm9pZCBudm1lX2ZyZWVfZGVzY3JpcHRvcnMoc3RydWN0IHJlcXVlc3QgKnJlcSlcbiBcdH1cbiB9XG4gXG4mIzQzO3N0YXRpYyBpbmxpbmUgc3RydWN0IG52bWVfZG1hYnVmX21hcCAqXG4mIzQzO3RvX252bWVfZG1hYnVmX21hcChzdHJ1Y3QgZG1hX2J1Zl9pb19tYXAgKm1hcClcbiYjNDM7e1xuJiM0MztcdHJldHVybiBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgbnZtZV9kbWFidWZfbWFwLCBiYXNlKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgbnZtZV9kbWFidWZfbWFwX3N5bmNfZm9yX2NwdShzdHJ1Y3QgbnZtZV9kZXYgKm52bWVfZGV2LFxuJiM0MztcdFx0XHRcdFx0IHN0cnVjdCByZXF1ZXN0ICpyZXEpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBudm1lX2Rldi1cdTAwM2VkZXY7XG4mIzQzO1x0ZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZG1hX2RpcjtcbiYjNDM7XHRzdHJ1Y3QgYmlvICpiaW8gPSByZXEtXHUwMDNlYmlvO1xuJiM0MztcdHN0cnVjdCBudm1lX2RtYWJ1Zl9tYXAgKm1hcCA9IHRvX252bWVfZG1hYnVmX21hcChiaW8tXHUwMDNlYmlfZG1hYnVmX21hcCk7XG4mIzQzO1x0ZG1hX2FkZHJfdCAqZG1hX2xpc3QgPSBtYXAtXHUwMDNlZG1hX2xpc3Q7XG4mIzQzO1x0dW5zaWduZWQgb2Zmc2V0ID0gYmlvLVx1MDAzZWJpX2l0ZXIuYmlfb2Zmc2V0O1xuJiM0MztcdHVuc2lnbmVkIG1hcF9pZHggPSBvZmZzZXQgLyBOVk1FX0NUUkxfUEFHRV9TSVpFO1xuJiM0MztcdGludCBsZW5ndGggPSBibGtfcnFfcGF5bG9hZF9ieXRlcyhyZXEpICYjNDM7XG4mIzQzO1x0XHQgICAgIChvZmZzZXQgXHUwMDI2IChOVk1FX0NUUkxfUEFHRV9TSVpFIC0gMSkpO1xuJiM0MztcbiYjNDM7XHRkbWFfZGlyID0gcnFfZGF0YV9kaXIocmVxKSA9PSBSRUFEID8gRE1BX0ZST01fREVWSUNFIDogRE1BX1RPX0RFVklDRTtcbiYjNDM7XG4mIzQzO1x0d2hpbGUgKGxlbmd0aCBcdTAwM2UgMCkge1xuJiM0MztcdFx0ZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoZGV2LCBkbWFfbGlzdFttYXBfaWR4JiM0MzsmIzQzO10sXG4mIzQzO1x0XHRcdFx0XHROVk1FX0NUUkxfUEFHRV9TSVpFLCBkbWFfZGlyKTtcbiYjNDM7XHRcdGxlbmd0aCAtPSBOVk1FX0NUUkxfUEFHRV9TSVpFO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgbnZtZV9kbWFidWZfbWFwX3N5bmNfZm9yX2RldmljZShzdHJ1Y3QgbnZtZV9kZXYgKm52bWVfZGV2LFxuJiM0MztcdFx0XHRcdFx0ICAgIHN0cnVjdCByZXF1ZXN0ICpyZXEpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBudm1lX2Rldi1cdTAwM2VkZXY7XG4mIzQzO1x0ZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZG1hX2RpcjtcbiYjNDM7XHRzdHJ1Y3QgYmlvICpiaW8gPSByZXEtXHUwMDNlYmlvO1xuJiM0MztcdHN0cnVjdCBudm1lX2RtYWJ1Zl9tYXAgKm1hcCA9IHRvX252bWVfZG1hYnVmX21hcChiaW8tXHUwMDNlYmlfZG1hYnVmX21hcCk7XG4mIzQzO1x0ZG1hX2FkZHJfdCAqZG1hX2xpc3QgPSBtYXAtXHUwMDNlZG1hX2xpc3Q7XG4mIzQzO1x0dW5zaWduZWQgb2Zmc2V0ID0gYmlvLVx1MDAzZWJpX2l0ZXIuYmlfb2Zmc2V0O1xuJiM0MztcdHVuc2lnbmVkIG1hcF9pZHggPSBvZmZzZXQgLyBOVk1FX0NUUkxfUEFHRV9TSVpFO1xuJiM0MztcdGludCBsZW5ndGggPSBibGtfcnFfcGF5bG9hZF9ieXRlcyhyZXEpICYjNDM7XG4mIzQzO1x0XHQgICAgIChvZmZzZXQgXHUwMDI2IChOVk1FX0NUUkxfUEFHRV9TSVpFIC0gMSkpO1xuJiM0MztcbiYjNDM7XHRkbWFfZGlyID0gcnFfZGF0YV9kaXIocmVxKSA9PSBSRUFEID8gRE1BX0ZST01fREVWSUNFIDogRE1BX1RPX0RFVklDRTtcbiYjNDM7XG4mIzQzO1x0d2hpbGUgKGxlbmd0aCBcdTAwM2UgMCkge1xuJiM0MztcdFx0ZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UoZGV2LCBkbWFfbGlzdFttYXBfaWR4JiM0MzsmIzQzO10sXG4mIzQzO1x0XHRcdFx0XHQgICBOVk1FX0NUUkxfUEFHRV9TSVpFLCBkbWFfZGlyKTtcbiYjNDM7XHRcdGxlbmd0aCAtPSBOVk1FX0NUUkxfUEFHRV9TSVpFO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgbnZtZV9ycV9jbGVhbl9kbWFidWZfbWFwKHN0cnVjdCBudm1lX2RldiAqZGV2LFxuJiM0MztcdFx0XHRcdCAgICAgIHN0cnVjdCByZXF1ZXN0ICpyZXEpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbnZtZV9pb2QgKmlvZCA9IGJsa19tcV9ycV90b19wZHUocmVxKTtcbiYjNDM7XG4mIzQzO1x0bnZtZV9kbWFidWZfbWFwX3N5bmNfZm9yX2NwdShkZXYsIHJlcSk7XG4mIzQzO1xuJiM0MztcdGlmICghKGlvZC1cdTAwM2VmbGFncyBcdTAwMjYgSU9EX1NJTkdMRV9TRUdNRU5UKSlcbiYjNDM7XHRcdG52bWVfZnJlZV9kZXNjcmlwdG9ycyhyZXEpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgYmxrX3N0YXR1c190IG52bWVfcnFfc2V0dXBfZG1hYnVmX21hcChzdHJ1Y3QgcmVxdWVzdCAqcmVxLFxuJiM0MztcdFx0XHRcdFx0ICAgICBzdHJ1Y3QgbnZtZV9xdWV1ZSAqbnZtZXEpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbnZtZV9pb2QgKmlvZCA9IGJsa19tcV9ycV90b19wZHUocmVxKTtcbiYjNDM7XHRzdHJ1Y3QgYmlvICpiaW8gPSByZXEtXHUwMDNlYmlvO1xuJiM0MztcdHN0cnVjdCBudm1lX2RtYWJ1Zl9tYXAgKm1hcCA9IHRvX252bWVfZG1hYnVmX21hcChiaW8tXHUwMDNlYmlfZG1hYnVmX21hcCk7XG4mIzQzO1x0dW5zaWduZWQgYnZlY19kb25lID0gYmlvLVx1MDAzZWJpX2l0ZXIuYmlfb2Zmc2V0O1xuJiM0MztcdHVuc2lnbmVkIG1hcF9pZHggPSBidmVjX2RvbmUgLyBOVk1FX0NUUkxfUEFHRV9TSVpFO1xuJiM0MztcdHVuc2lnbmVkIG9mZnNldCA9IGJ2ZWNfZG9uZSBcdTAwMjYgKE5WTUVfQ1RSTF9QQUdFX1NJWkUgLSAxKTtcbiYjNDM7XHRpbnQgbGVuZ3RoID0gYmxrX3JxX3BheWxvYWRfYnl0ZXMocmVxKSAtIChOVk1FX0NUUkxfUEFHRV9TSVpFIC0gb2Zmc2V0KTtcbiYjNDM7XHRkbWFfYWRkcl90ICpkbWFfbGlzdCA9IG1hcC1cdTAwM2VkbWFfbGlzdDtcbiYjNDM7XHR1NjQgcHJwMV9kbWEgPSBkbWFfbGlzdFttYXBfaWR4JiM0MzsmIzQzO10gJiM0Mzsgb2Zmc2V0O1xuJiM0MztcdHU2NCBkbWFfYWRkciwgcHJwMl9kbWE7XG4mIzQzO1x0ZG1hX2FkZHJfdCBwcnBfZG1hO1xuJiM0MztcdF9fbGU2NCAqcHJwX2xpc3Q7XG4mIzQzO1x0dW5zaWduZWQgaTtcbiYjNDM7XG4mIzQzO1x0bnZtZV9kbWFidWZfbWFwX3N5bmNfZm9yX2RldmljZShudm1lcS1cdTAwM2VkZXYsIHJlcSk7XG4mIzQzO1xuJiM0MztcdGlmIChsZW5ndGggXHUwMDNjPSAwKSB7XG4mIzQzO1x0XHRwcnAyX2RtYSA9IDA7XG4mIzQzO1x0XHRnb3RvIGRvbmU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAobGVuZ3RoIFx1MDAzYz0gTlZNRV9DVFJMX1BBR0VfU0laRSkge1xuJiM0MztcdFx0cHJwMl9kbWEgPSBkbWFfbGlzdFttYXBfaWR4XTtcbiYjNDM7XHRcdGdvdG8gZG9uZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChESVZfUk9VTkRfVVAobGVuZ3RoLCBOVk1FX0NUUkxfUEFHRV9TSVpFKSBcdTAwM2M9XG4mIzQzO1x0ICAgIE5WTUVfU01BTExfUE9PTF9TSVpFIC8gc2l6ZW9mKF9fbGU2NCkpXG4mIzQzO1x0XHRpb2QtXHUwMDNlZmxhZ3MgfD0gSU9EX1NNQUxMX0RFU0NSSVBUT1I7XG4mIzQzO1xuJiM0MztcdHBycF9saXN0ID0gZG1hX3Bvb2xfYWxsb2MobnZtZV9kbWFfcG9vbChudm1lcSwgaW9kKSwgR0ZQX0FUT01JQyxcbiYjNDM7XHRcdFx0XHUwMDI2cHJwX2RtYSk7XG4mIzQzO1x0aWYgKCFwcnBfbGlzdClcbiYjNDM7XHRcdHJldHVybiBCTEtfU1RTX1JFU09VUkNFO1xuJiM0MztcbiYjNDM7XHRpb2QtXHUwMDNlZGVzY3JpcHRvcnNbaW9kLVx1MDAzZW5yX2Rlc2NyaXB0b3JzJiM0MzsmIzQzO10gPSBwcnBfbGlzdDtcbiYjNDM7XHRwcnAyX2RtYSA9IHBycF9kbWE7XG4mIzQzO1x0aSA9IDA7XG4mIzQzO1x0Zm9yICg7Oykge1xuJiM0MztcdFx0aWYgKGkgPT0gTlZNRV9DVFJMX1BBR0VfU0laRSBcdTAwM2VcdTAwM2UgMykge1xuJiM0MztcdFx0XHRfX2xlNjQgKm9sZF9wcnBfbGlzdCA9IHBycF9saXN0O1xuJiM0MztcbiYjNDM7XHRcdFx0cHJwX2xpc3QgPSBkbWFfcG9vbF9hbGxvYyhudm1lcS1cdTAwM2VkZXNjcmlwdG9yX3Bvb2xzLmxhcmdlLFxuJiM0MztcdFx0XHRcdFx0R0ZQX0FUT01JQywgXHUwMDI2cHJwX2RtYSk7XG4mIzQzO1x0XHRcdGlmICghcHJwX2xpc3QpXG4mIzQzO1x0XHRcdFx0Z290byBmcmVlX3BycHM7XG4mIzQzO1x0XHRcdGlvZC1cdTAwM2VkZXNjcmlwdG9yc1tpb2QtXHUwMDNlbnJfZGVzY3JpcHRvcnMmIzQzOyYjNDM7XSA9IHBycF9saXN0O1xuJiM0MztcdFx0XHRwcnBfbGlzdFswXSA9IG9sZF9wcnBfbGlzdFtpIC0gMV07XG4mIzQzO1x0XHRcdG9sZF9wcnBfbGlzdFtpIC0gMV0gPSBjcHVfdG9fbGU2NChwcnBfZG1hKTtcbiYjNDM7XHRcdFx0aSA9IDE7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0ZG1hX2FkZHIgPSBkbWFfbGlzdFttYXBfaWR4JiM0MzsmIzQzO107XG4mIzQzO1x0XHRwcnBfbGlzdFtpJiM0MzsmIzQzO10gPSBjcHVfdG9fbGU2NChkbWFfYWRkcik7XG4mIzQzO1xuJiM0MztcdFx0bGVuZ3RoIC09IE5WTUVfQ1RSTF9QQUdFX1NJWkU7XG4mIzQzO1x0XHRpZiAobGVuZ3RoIFx1MDAzYz0gMClcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0fVxuJiM0Mztkb25lOlxuJiM0MztcdGlvZC1cdTAwM2VjbWQuY29tbW9uLmRwdHIucHJwMSA9IGNwdV90b19sZTY0KHBycDFfZG1hKTtcbiYjNDM7XHRpb2QtXHUwMDNlY21kLmNvbW1vbi5kcHRyLnBycDIgPSBjcHVfdG9fbGU2NChwcnAyX2RtYSk7XG4mIzQzO1x0cmV0dXJuIEJMS19TVFNfT0s7XG4mIzQzO2ZyZWVfcHJwczpcbiYjNDM7XHRudm1lX2ZyZWVfZGVzY3JpcHRvcnMocmVxKTtcbiYjNDM7XHRyZXR1cm4gQkxLX1NUU19SRVNPVVJDRTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZCBudm1lX2ZyZWVfcHJwcyhzdHJ1Y3QgcmVxdWVzdCAqcmVxLCB1bnNpZ25lZCBpbnQgYXR0cnMpXG4ge1xuIFx0c3RydWN0IG52bWVfaW9kICppb2QgPSBibGtfbXFfcnFfdG9fcGR1KHJlcSk7XG5AQCAtOTM3LDYgJiM0MzsxMDc4LDExIEBAIHN0YXRpYyB2b2lkIG52bWVfdW5tYXBfZGF0YShzdHJ1Y3QgcmVxdWVzdCAqcmVxKVxuIFx0c3RydWN0IGRldmljZSAqZG1hX2RldiA9IG52bWVxLVx1MDAzZWRldi1cdTAwM2VkZXY7XG4gXHR1bnNpZ25lZCBpbnQgYXR0cnMgPSAwO1xuIFxuJiM0MztcdGlmIChibGtfbXFfcnFfaXNfZG1hYnVmKHJlcSkpIHtcbiYjNDM7XHRcdG52bWVfcnFfY2xlYW5fZG1hYnVmX21hcChudm1lcS1cdTAwM2VkZXYsIHJlcSk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcbiBcdGlmIChpb2QtXHUwMDNlZmxhZ3MgXHUwMDI2IElPRF9TSU5HTEVfU0VHTUVOVCkge1xuIFx0XHRzdGF0aWNfYXNzZXJ0KG9mZnNldG9mKHVuaW9uIG52bWVfZGF0YV9wdHIsIHBycDEpID09XG4gXHRcdFx0XHRvZmZzZXRvZih1bmlvbiBudm1lX2RhdGFfcHRyLCBzZ2wuYWRkcikpO1xuQEAgLTExNDIsMTMgJiM0MzsxMjg4LDE5IEBAIHN0YXRpYyBibGtfc3RhdHVzX3QgbnZtZV9wY2lfc2V0dXBfZGF0YV9wcnAoc3RydWN0IHJlcXVlc3QgKnJlcSxcbiB9XG4gXG4gc3RhdGljIHZvaWQgbnZtZV9wY2lfc2dsX3NldF9kYXRhKHN0cnVjdCBudm1lX3NnbF9kZXNjICpzZ2UsXG4tXHRcdHN0cnVjdCBibGtfZG1hX2l0ZXIgKml0ZXIpXG4mIzQzO1x0XHRkbWFfYWRkcl90IGFkZHIsIHUzMiBsZW4pXG4ge1xuLVx0c2dlLVx1MDAzZWFkZHIgPSBjcHVfdG9fbGU2NChpdGVyLVx1MDAzZWFkZHIpO1xuLVx0c2dlLVx1MDAzZWxlbmd0aCA9IGNwdV90b19sZTMyKGl0ZXItXHUwMDNlbGVuKTtcbiYjNDM7XHRzZ2UtXHUwMDNlYWRkciA9IGNwdV90b19sZTY0KGFkZHIpO1xuJiM0MztcdHNnZS1cdTAwM2VsZW5ndGggPSBjcHVfdG9fbGUzMihsZW4pO1xuIFx0c2dlLVx1MDAzZXR5cGUgPSBOVk1FX1NHTF9GTVRfREFUQV9ERVNDIFx1MDAzY1x1MDAzYyA0O1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgbnZtZV9wY2lfZG1hX2l0ZXJfc2V0X3NnbChzdHJ1Y3QgbnZtZV9zZ2xfZGVzYyAqc2dlLFxuJiM0MztcdFx0c3RydWN0IGJsa19kbWFfaXRlciAqaXRlcilcbiYjNDM7e1xuJiM0MztcdG52bWVfcGNpX3NnbF9zZXRfZGF0YShzZ2UsIGl0ZXItXHUwMDNlYWRkciwgaXRlci1cdTAwM2VsZW4pO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB2b2lkIG52bWVfcGNpX3NnbF9zZXRfc2VnKHN0cnVjdCBudm1lX3NnbF9kZXNjICpzZ2UsXG4gXHRcdGRtYV9hZGRyX3QgZG1hX2FkZHIsIGludCBlbnRyaWVzKVxuIHtcbkBAIC0xMTU3LDYgJiM0MzsxMzA5LDE0NSBAQCBzdGF0aWMgdm9pZCBudm1lX3BjaV9zZ2xfc2V0X3NlZyhzdHJ1Y3QgbnZtZV9zZ2xfZGVzYyAqc2dlLFxuIFx0c2dlLVx1MDAzZXR5cGUgPSBOVk1FX1NHTF9GTVRfTEFTVF9TRUdfREVTQyBcdTAwM2NcdTAwM2MgNDtcbiB9XG4gXG4mIzQzO3N0YXRpYyB1bnNpZ25lZCBpbnQgbnZtZV9wY2lfZG1hYnVmX3NnbF9uZW50cyhzdHJ1Y3QgcmVxdWVzdCAqcmVxKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGJpbyAqYmlvID0gcmVxLVx1MDAzZWJpbztcbiYjNDM7XHRzdHJ1Y3QgbnZtZV9kbWFidWZfbWFwICptYXAgPSB0b19udm1lX2RtYWJ1Zl9tYXAoYmlvLVx1MDAzZWJpX2RtYWJ1Zl9tYXApO1xuJiM0MztcdHN0cnVjdCBzY2F0dGVybGlzdCAqc2c7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyB0bXA7XG4mIzQzO1x0c2l6ZV90IG9mZnNldCA9IGJpby1cdTAwM2ViaV9pdGVyLmJpX29mZnNldDtcbiYjNDM7XHRzaXplX3QgcmVtYWluaW5nID0gYmxrX3JxX3BheWxvYWRfYnl0ZXMocmVxKTtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgbmVudHMgPSAwO1xuJiM0MztcbiYjNDM7XHRmb3JfZWFjaF9zZ3RhYmxlX2RtYV9zZyhtYXAtXHUwMDNlc2d0LCBzZywgdG1wKSB7XG4mIzQzO1x0XHRzaXplX3Qgc2dfbGVuID0gc2dfZG1hX2xlbihzZyk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKCFyZW1haW5pbmcpXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0aWYgKG9mZnNldCBcdTAwM2U9IHNnX2xlbikge1xuJiM0MztcdFx0XHRvZmZzZXQgLT0gc2dfbGVuO1xuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRzZ19sZW4gLT0gb2Zmc2V0O1xuJiM0MztcdFx0b2Zmc2V0ID0gMDtcbiYjNDM7XG4mIzQzO1x0XHRkbyB7XG4mIzQzO1x0XHRcdHNpemVfdCBjaHVuayA9IG1pbihyZW1haW5pbmcsIHNnX2xlbik7XG4mIzQzO1xuJiM0MztcdFx0XHRuZW50cyYjNDM7JiM0Mzs7XG4mIzQzO1x0XHRcdHNnX2xlbiAtPSBjaHVuaztcbiYjNDM7XHRcdFx0cmVtYWluaW5nIC09IGNodW5rO1xuJiM0MztcdFx0fSB3aGlsZSAoc2dfbGVuIFx1MDAyNlx1MDAyNiByZW1haW5pbmcpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKHVubGlrZWx5KHJlbWFpbmluZykpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIG5lbnRzO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgYmxrX3N0YXR1c190IG52bWVfcnFfc2V0dXBfZG1hYnVmX3NnbChzdHJ1Y3QgcmVxdWVzdCAqcmVxLFxuJiM0MztcdFx0c3RydWN0IG52bWVfcXVldWUgKm52bWVxLCB1bnNpZ25lZCBpbnQgZW50cmllcylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBudm1lX2lvZCAqaW9kID0gYmxrX21xX3JxX3RvX3BkdShyZXEpO1xuJiM0MztcdHN0cnVjdCBiaW8gKmJpbyA9IHJlcS1cdTAwM2ViaW87XG4mIzQzO1x0c3RydWN0IG52bWVfZG1hYnVmX21hcCAqbWFwID0gdG9fbnZtZV9kbWFidWZfbWFwKGJpby1cdTAwM2ViaV9kbWFidWZfbWFwKTtcbiYjNDM7XHRzaXplX3QgbGVuZ3RoID0gYmxrX3JxX3BheWxvYWRfYnl0ZXMocmVxKTtcbiYjNDM7XHRzdHJ1Y3QgbnZtZV9zZ2xfZGVzYyAqc2dfbGlzdCA9IFx1MDAyNmlvZC1cdTAwM2VjbWQuY29tbW9uLmRwdHIuc2dsO1xuJiM0MztcdGJvb2wgcG9vbGVkID0gZW50cmllcyBcdTAwM2UgMTtcbiYjNDM7XHRkbWFfYWRkcl90IHNnbF9kbWEgPSAwO1xuJiM0MztcdHVuc2lnbmVkIGludCBtYXBwZWQgPSAwO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgdG1wO1xuJiM0MztcdHN0cnVjdCBzY2F0dGVybGlzdCAqc2c7XG4mIzQzO1x0c2l6ZV90IG9mZnNldCA9IGJpby1cdTAwM2ViaV9pdGVyLmJpX29mZnNldDtcbiYjNDM7XHRzaXplX3QgcmVtYWluaW5nID0gbGVuZ3RoO1xuJiM0MztcbiYjNDM7XHRpZiAoIWVudHJpZXMpXG4mIzQzO1x0XHRyZXR1cm4gQkxLX1NUU19JT0VSUjtcbiYjNDM7XG4mIzQzO1x0aW9kLVx1MDAzZWNtZC5jb21tb24uZmxhZ3MgPSBOVk1FX0NNRF9TR0xfTUVUQUJVRjtcbiYjNDM7XHRpb2QtXHUwMDNldG90YWxfbGVuID0gbGVuZ3RoO1xuJiM0MztcbiYjNDM7XHRudm1lX2RtYWJ1Zl9tYXBfc3luY19mb3JfZGV2aWNlKG52bWVxLVx1MDAzZWRldiwgcmVxKTtcbiYjNDM7XG4mIzQzO1x0LyogZW50cmllcyA9PSAxIGZpdHMgaW4gdGhlIGlubGluZSBkZXNjcmlwdG9yOyBtb3JlIG5lZWRzIGEgcG9vbC4gKi9cbiYjNDM7XHRpZiAocG9vbGVkKSB7XG4mIzQzO1x0XHRpZiAoZW50cmllcyBcdTAwM2M9IE5WTUVfU01BTExfUE9PTF9TSVpFIC8gc2l6ZW9mKCpzZ19saXN0KSlcbiYjNDM7XHRcdFx0aW9kLVx1MDAzZWZsYWdzIHw9IElPRF9TTUFMTF9ERVNDUklQVE9SO1xuJiM0MztcbiYjNDM7XHRcdHNnX2xpc3QgPSBkbWFfcG9vbF9hbGxvYyhudm1lX2RtYV9wb29sKG52bWVxLCBpb2QpLCBHRlBfQVRPTUlDLFxuJiM0MztcdFx0XHRcdFx0IFx1MDAyNnNnbF9kbWEpO1xuJiM0MztcdFx0aWYgKCFzZ19saXN0KVxuJiM0MztcdFx0XHRyZXR1cm4gQkxLX1NUU19SRVNPVVJDRTtcbiYjNDM7XHRcdGlvZC1cdTAwM2VkZXNjcmlwdG9yc1tpb2QtXHUwMDNlbnJfZGVzY3JpcHRvcnMmIzQzOyYjNDM7XSA9IHNnX2xpc3Q7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRmb3JfZWFjaF9zZ3RhYmxlX2RtYV9zZyhtYXAtXHUwMDNlc2d0LCBzZywgdG1wKSB7XG4mIzQzO1x0XHRzaXplX3Qgc2dfbGVuID0gc2dfZG1hX2xlbihzZyk7XG4mIzQzO1x0XHRkbWFfYWRkcl90IGFkZHIgPSBzZ19kbWFfYWRkcmVzcyhzZyk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKCFyZW1haW5pbmcpXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0aWYgKG9mZnNldCBcdTAwM2U9IHNnX2xlbikge1xuJiM0MztcdFx0XHRvZmZzZXQgLT0gc2dfbGVuO1xuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRhZGRyICYjNDM7PSBvZmZzZXQ7XG4mIzQzO1x0XHRzZ19sZW4gLT0gb2Zmc2V0O1xuJiM0MztcdFx0b2Zmc2V0ID0gMDtcbiYjNDM7XG4mIzQzO1x0XHRkbyB7XG4mIzQzO1x0XHRcdHUzMiBjaHVuayA9IG1pbl90KHNpemVfdCwgcmVtYWluaW5nLCBzZ19sZW4pO1xuJiM0MztcbiYjNDM7XHRcdFx0aWYgKFdBUk5fT05fT05DRShtYXBwZWQgPT0gZW50cmllcykpXG4mIzQzO1x0XHRcdFx0Z290byBlcnJfZnJlZTtcbiYjNDM7XHRcdFx0bnZtZV9wY2lfc2dsX3NldF9kYXRhKFx1MDAyNnNnX2xpc3RbbWFwcGVkJiM0MzsmIzQzO10sIGFkZHIsIGNodW5rKTtcbiYjNDM7XG4mIzQzO1x0XHRcdGFkZHIgJiM0Mzs9IGNodW5rO1xuJiM0MztcdFx0XHRzZ19sZW4gLT0gY2h1bms7XG4mIzQzO1x0XHRcdHJlbWFpbmluZyAtPSBjaHVuaztcbiYjNDM7XHRcdH0gd2hpbGUgKHNnX2xlbiBcdTAwMjZcdTAwMjYgcmVtYWluaW5nKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICh1bmxpa2VseShyZW1haW5pbmcpKVxuJiM0MztcdFx0Z290byBlcnJfZnJlZTtcbiYjNDM7XG4mIzQzO1x0aWYgKHBvb2xlZClcbiYjNDM7XHRcdG52bWVfcGNpX3NnbF9zZXRfc2VnKFx1MDAyNmlvZC1cdTAwM2VjbWQuY29tbW9uLmRwdHIuc2dsLCBzZ2xfZG1hLFxuJiM0MztcdFx0XHRcdCAgICAgbWFwcGVkKTtcbiYjNDM7XHRyZXR1cm4gQkxLX1NUU19PSztcbiYjNDM7ZXJyX2ZyZWU6XG4mIzQzO1x0aWYgKHBvb2xlZCkge1xuJiM0MztcdFx0aW9kLVx1MDAzZW5yX2Rlc2NyaXB0b3JzLS07XG4mIzQzO1x0XHRkbWFfcG9vbF9mcmVlKG52bWVfZG1hX3Bvb2wobnZtZXEsIGlvZCksIHNnX2xpc3QsIHNnbF9kbWEpO1xuJiM0MztcdH1cbiYjNDM7XHRyZXR1cm4gQkxLX1NUU19JT0VSUjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGJsa19zdGF0dXNfdCBudm1lX3JxX3NldHVwX2RtYWJ1ZihzdHJ1Y3QgcmVxdWVzdCAqcmVxLFxuJiM0MztcdFx0c3RydWN0IG52bWVfcXVldWUgKm52bWVxLCBlbnVtIG52bWVfdXNlX3NnbCB1c2Vfc2dsKVxuJiM0Mzt7XG4mIzQzO1x0dW5zaWduZWQgaW50IGVudHJpZXM7XG4mIzQzO1x0c2l6ZV90IGF2Z19zZWc7XG4mIzQzO1xuJiM0MztcdGlmICh1c2Vfc2dsID09IFNHTF9VTlNVUFBPUlRFRClcbiYjNDM7XHRcdHJldHVybiBudm1lX3JxX3NldHVwX2RtYWJ1Zl9tYXAocmVxLCBudm1lcSk7XG4mIzQzO1xuJiM0MztcdGVudHJpZXMgPSBudm1lX3BjaV9kbWFidWZfc2dsX25lbnRzKHJlcSk7XG4mIzQzO1xuJiM0MztcdGlmICh1c2Vfc2dsID09IFNHTF9GT1JDRUQpXG4mIzQzO1x0XHRyZXR1cm4gbnZtZV9ycV9zZXR1cF9kbWFidWZfc2dsKHJlcSwgbnZtZXEsIGVudHJpZXMpO1xuJiM0MztcbiYjNDM7XHRhdmdfc2VnID0gZW50cmllcyA/XG4mIzQzO1x0XHRESVZfUk9VTkRfVVAoYmxrX3JxX3BheWxvYWRfYnl0ZXMocmVxKSwgZW50cmllcykgOiAwO1xuJiM0MztcdGlmIChzZ2xfdGhyZXNob2xkIFx1MDAyNlx1MDAyNiBhdmdfc2VnIFx1MDAzZT0gc2dsX3RocmVzaG9sZClcbiYjNDM7XHRcdHJldHVybiBudm1lX3JxX3NldHVwX2RtYWJ1Zl9zZ2wocmVxLCBudm1lcSwgZW50cmllcyk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBudm1lX3JxX3NldHVwX2RtYWJ1Zl9tYXAocmVxLCBudm1lcSk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGJsa19zdGF0dXNfdCBudm1lX3BjaV9zZXR1cF9kYXRhX3NnbChzdHJ1Y3QgcmVxdWVzdCAqcmVxLFxuIFx0XHRzdHJ1Y3QgYmxrX2RtYV9pdGVyICppdGVyKVxuIHtcbkBAIC0xMTcxLDcgJiM0MzsxNDYyLDcgQEAgc3RhdGljIGJsa19zdGF0dXNfdCBudm1lX3BjaV9zZXR1cF9kYXRhX3NnbChzdHJ1Y3QgcmVxdWVzdCAqcmVxLFxuIFx0aW9kLVx1MDAzZWNtZC5jb21tb24uZmxhZ3MgPSBOVk1FX0NNRF9TR0xfTUVUQUJVRjtcbiBcbiBcdGlmIChlbnRyaWVzID09IDEgfHwgYmxrX3JxX2RtYV9tYXBfY29hbGVzY2UoXHUwMDI2aW9kLVx1MDAzZWRtYV9zdGF0ZSkpIHtcbi1cdFx0bnZtZV9wY2lfc2dsX3NldF9kYXRhKFx1MDAyNmlvZC1cdTAwM2VjbWQuY29tbW9uLmRwdHIuc2dsLCBpdGVyKTtcbiYjNDM7XHRcdG52bWVfcGNpX2RtYV9pdGVyX3NldF9zZ2woXHUwMDI2aW9kLVx1MDAzZWNtZC5jb21tb24uZHB0ci5zZ2wsIGl0ZXIpO1xuIFx0XHRpb2QtXHUwMDNldG90YWxfbGVuICYjNDM7PSBpdGVyLVx1MDAzZWxlbjtcbiBcdFx0cmV0dXJuIEJMS19TVFNfT0s7XG4gXHR9XG5AQCAtMTE5Myw3ICYjNDM7MTQ4NCw3IEBAIHN0YXRpYyBibGtfc3RhdHVzX3QgbnZtZV9wY2lfc2V0dXBfZGF0YV9zZ2woc3RydWN0IHJlcXVlc3QgKnJlcSxcbiBcdFx0XHRpdGVyLVx1MDAzZXN0YXR1cyA9IEJMS19TVFNfSU9FUlI7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdH1cbi1cdFx0bnZtZV9wY2lfc2dsX3NldF9kYXRhKFx1MDAyNnNnX2xpc3RbbWFwcGVkJiM0MzsmIzQzO10sIGl0ZXIpO1xuJiM0MztcdFx0bnZtZV9wY2lfZG1hX2l0ZXJfc2V0X3NnbChcdTAwMjZzZ19saXN0W21hcHBlZCYjNDM7JiM0MztdLCBpdGVyKTtcbiBcdFx0aW9kLVx1MDAzZXRvdGFsX2xlbiAmIzQzOz0gaXRlci1cdTAwM2VsZW47XG4gXHR9IHdoaWxlIChibGtfcnFfZG1hX21hcF9pdGVyX25leHQocmVxLCBudm1lcS1cdTAwM2VkZXYtXHUwMDNlZGV2LCBpdGVyKSk7XG4gXG5AQCAtMTI1MSw2ICYjNDM7MTU0Miw5IEBAIHN0YXRpYyBibGtfc3RhdHVzX3QgbnZtZV9tYXBfZGF0YShzdHJ1Y3QgcmVxdWVzdCAqcmVxKVxuIFx0c3RydWN0IGJsa19kbWFfaXRlciBpdGVyO1xuIFx0YmxrX3N0YXR1c190IHJldDtcbiBcbiYjNDM7XHRpZiAoYmxrX21xX3JxX2lzX2RtYWJ1ZihyZXEpKVxuJiM0MztcdFx0cmV0dXJuIG52bWVfcnFfc2V0dXBfZG1hYnVmKHJlcSwgbnZtZXEsIHVzZV9zZ2wpO1xuJiM0MztcbiBcdC8qXG4gXHQgKiBUcnkgdG8gc2tpcCB0aGUgRE1BIGl0ZXJhdG9yIGZvciBzaW5nbGUgc2VnbWVudCByZXF1ZXN0cywgYXMgdGhhdFxuIFx0ICogc2lnbmlmaWNhbnRseSBpbXByb3ZlcyBwZXJmb3JtYW5jZXMgZm9yIHNtYWxsIEkvTyBzaXplcy5cbkBAIC0xMzUzLDEzICYjNDM7MTY0NywxMyBAQCBzdGF0aWMgYmxrX3N0YXR1c190IG52bWVfcGNpX3NldHVwX21ldGFfaXRlcihzdHJ1Y3QgcmVxdWVzdCAqcmVxKVxuIFx0aW9kLVx1MDAzZWNtZC5jb21tb24ubWV0YWRhdGEgPSBjcHVfdG9fbGU2NChzZ2xfZG1hKTtcbiBcdGlmIChlbnRyaWVzID09IDEpIHtcbiBcdFx0aW9kLVx1MDAzZW1ldGFfdG90YWxfbGVuID0gaXRlci5sZW47XG4tXHRcdG52bWVfcGNpX3NnbF9zZXRfZGF0YShzZ19saXN0LCBcdTAwMjZpdGVyKTtcbiYjNDM7XHRcdG52bWVfcGNpX2RtYV9pdGVyX3NldF9zZ2woc2dfbGlzdCwgXHUwMDI2aXRlcik7XG4gXHRcdHJldHVybiBCTEtfU1RTX09LO1xuIFx0fVxuIFxuIFx0c2dsX2RtYSAmIzQzOz0gc2l6ZW9mKCpzZ19saXN0KTtcbiBcdGRvIHtcbi1cdFx0bnZtZV9wY2lfc2dsX3NldF9kYXRhKFx1MDAyNnNnX2xpc3RbJiM0MzsmIzQzO2ldLCBcdTAwMjZpdGVyKTtcbiYjNDM7XHRcdG52bWVfcGNpX2RtYV9pdGVyX3NldF9zZ2woXHUwMDI2c2dfbGlzdFsmIzQzOyYjNDM7aV0sIFx1MDAyNml0ZXIpO1xuIFx0XHRpb2QtXHUwMDNlbWV0YV90b3RhbF9sZW4gJiM0Mzs9IGl0ZXIubGVuO1xuIFx0fSB3aGlsZSAoYmxrX3JxX2ludGVncml0eV9kbWFfbWFwX2l0ZXJfbmV4dChyZXEsIGRldi1cdTAwM2VkZXYsIFx1MDAyNml0ZXIpKTtcbiBcbkBAIC0yMjY5LDYgJiM0MzsyNTYzLDExOCBAQCBzdGF0aWMgaW50IG52bWVfY3JlYXRlX3F1ZXVlKHN0cnVjdCBudm1lX3F1ZXVlICpudm1lcSwgaW50IHFpZCwgYm9vbCBwb2xsZWQpXG4gXHRyZXR1cm4gcmVzdWx0O1xuIH1cbiBcbiYjNDM7I2lmZGVmIENPTkZJR19ETUFfU0hBUkVEX0JVRkZFUlxuJiM0MztzdGF0aWMgdm9pZCBudm1lX2RtYWJ1Zl9pbnZhbGlkYXRlX21hcHBpbmdzKHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkbWFfYnVmX2lvX2N0eCAqY3R4ID0gYXR0YWNoLVx1MDAzZWltcG9ydGVyX3ByaXY7XG4mIzQzO1xuJiM0MztcdGRtYV9idWZfaW9faW52YWxpZGF0ZV9tYXBwaW5ncyhjdHgpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mztjb25zdCBzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2hfb3BzIG52bWVfZG1hYnVmX2ltcG9ydGVyX29wcyA9IHtcbiYjNDM7XHQuaW52YWxpZGF0ZV9tYXBwaW5nc1x0PSBudm1lX2RtYWJ1Zl9pbnZhbGlkYXRlX21hcHBpbmdzLFxuJiM0MztcdC5hbGxvd19wZWVyMnBlZXJcdD0gdHJ1ZSxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBzdHJ1Y3QgZG1hX2J1Zl9pb19tYXAgKm52bWVfZG1hX2J1Zl9pb19tYXAoc3RydWN0IGRtYV9idWZfaW9fY3R4ICpjdHgpXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBucl9lbnRyaWVzID0gY3R4LVx1MDAzZWRtYWJ1Zi1cdTAwM2VzaXplIC8gTlZNRV9DVFJMX1BBR0VfU0laRTtcbiYjNDM7XHRzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2ggPSBjdHgtXHUwMDNlZGV2X3ByaXY7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyB0bXAsIGkgPSAwO1xuJiM0MztcdHVuc2lnbmVkIHNlZ19zaGlmdCA9IH4wVTtcbiYjNDM7XHRzdHJ1Y3QgbnZtZV9kbWFidWZfbWFwICptYXA7XG4mIzQzO1x0c3RydWN0IHNjYXR0ZXJsaXN0ICpzZztcbiYjNDM7XHRzdHJ1Y3Qgc2dfdGFibGUgKnNndDtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRkbWFfcmVzdl9hc3NlcnRfaGVsZChjdHgtXHUwMDNlZG1hYnVmLVx1MDAzZXJlc3YpO1xuJiM0MztcbiYjNDM7XHRtYXAgPSBrbWFsbG9jX2ZsZXgoKm1hcCwgZG1hX2xpc3QsIG5yX2VudHJpZXMpO1xuJiM0MztcdGlmICghbWFwKVxuJiM0MztcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4mIzQzO1xuJiM0MztcdHNndCA9IGRtYV9idWZfbWFwX2F0dGFjaG1lbnQoYXR0YWNoLCBjdHgtXHUwMDNlZGlyKTtcbiYjNDM7XHRpZiAoSVNfRVJSKHNndCkpIHtcbiYjNDM7XHRcdHJldCA9IFBUUl9FUlIoc2d0KTtcbiYjNDM7XHRcdHNndCA9IE5VTEw7XG4mIzQzO1x0XHRnb3RvIGVycjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGZvcl9lYWNoX3NndGFibGVfZG1hX3NnKHNndCwgc2csIHRtcCkge1xuJiM0MztcdFx0ZG1hX2FkZHJfdCBkbWFfYWRkciA9IHNnX2RtYV9hZGRyZXNzKHNnKTtcbiYjNDM7XHRcdHVuc2lnbmVkIGxvbmcgc2dfbGVuID0gc2dfZG1hX2xlbihzZyk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHNnX2xlbiAlIE5WTUVfQ1RSTF9QQUdFX1NJWkUpIHtcbiYjNDM7XHRcdFx0cmV0ID0gLUVJTlZBTDtcbiYjNDM7XHRcdFx0Z290byBlcnI7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRzZWdfc2hpZnQgPSBtaW4oc2VnX3NoaWZ0LCBfX2ZmcyhzZ19sZW4pKTtcbiYjNDM7XG4mIzQzO1x0XHR3aGlsZSAoc2dfbGVuKSB7XG4mIzQzO1x0XHRcdG1hcC1cdTAwM2VkbWFfbGlzdFtpJiM0MzsmIzQzO10gPSBkbWFfYWRkcjtcbiYjNDM7XHRcdFx0ZG1hX2FkZHIgJiM0Mzs9IE5WTUVfQ1RSTF9QQUdFX1NJWkU7XG4mIzQzO1x0XHRcdHNnX2xlbiAtPSBOVk1FX0NUUkxfUEFHRV9TSVpFO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKFdBUk5fT05fT05DRShzZWdfc2hpZnQgXHUwMDNjIE5WTUVfQ1RSTF9QQUdFX1NISUZUKSlcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKC1FRkFVTFQpO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBkbWFfYnVmX2lvX2luaXRfbWFwKGN0eCwgXHUwMDI2bWFwLVx1MDAzZWJhc2UpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIGVycjtcbiYjNDM7XHRtYXAtXHUwMDNlYmFzZS5zZWdfc2hpZnQgPSBzZWdfc2hpZnQ7XG4mIzQzO1x0bWFwLVx1MDAzZW5yX2VudHJpZXMgPSBucl9lbnRyaWVzO1xuJiM0MztcdG1hcC1cdTAwM2VzZ3QgPSBzZ3Q7XG4mIzQzO1x0cmV0dXJuIFx1MDAyNm1hcC1cdTAwM2ViYXNlO1xuJiM0MztlcnI6XG4mIzQzO1x0aWYgKHNndClcbiYjNDM7XHRcdGRtYV9idWZfdW5tYXBfYXR0YWNobWVudChhdHRhY2gsIHNndCwgY3R4LVx1MDAzZWRpcik7XG4mIzQzO1x0a2ZyZWUobWFwKTtcbiYjNDM7XHRyZXR1cm4gRVJSX1BUUihyZXQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBudm1lX2RtYV9idWZfaW9fdW5tYXAoc3RydWN0IGRtYV9idWZfaW9fY3R4ICpjdHgsXG4mIzQzO1x0XHRcdFx0ICBzdHJ1Y3QgZG1hX2J1Zl9pb19tYXAgKm1hcF9iYXNlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoID0gY3R4LVx1MDAzZWRldl9wcml2O1xuJiM0MztcdHN0cnVjdCBudm1lX2RtYWJ1Zl9tYXAgKm1hcCA9IHRvX252bWVfZG1hYnVmX21hcChtYXBfYmFzZSk7XG4mIzQzO1xuJiM0MztcdGRtYV9yZXN2X2Fzc2VydF9oZWxkKGN0eC1cdTAwM2VkbWFidWYtXHUwMDNlcmVzdik7XG4mIzQzO1xuJiM0MztcdGRtYV9idWZfdW5tYXBfYXR0YWNobWVudChhdHRhY2gsIG1hcC1cdTAwM2VzZ3QsIGN0eC1cdTAwM2VkaXIpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBudm1lX2RtYV9idWZfaW9fcmVsZWFzZShzdHJ1Y3QgZG1hX2J1Zl9pb19jdHggKmN0eClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaCA9IGN0eC1cdTAwM2VkZXZfcHJpdjtcbiYjNDM7XG4mIzQzO1x0ZG1hX2J1Zl9kZXRhY2goY3R4LVx1MDAzZWRtYWJ1ZiwgYXR0YWNoKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7Y29uc3Qgc3RydWN0IGRtYV9idWZfaW9fb3BzIG52bWVfZG1hX2J1Zl9pb19vcHMgPSB7XG4mIzQzO1x0Lm1hcFx0XHQ9IG52bWVfZG1hX2J1Zl9pb19tYXAsXG4mIzQzO1x0LnVubWFwXHRcdD0gbnZtZV9kbWFfYnVmX2lvX3VubWFwLFxuJiM0MztcdC5yZWxlYXNlXHQ9IG52bWVfZG1hX2J1Zl9pb19yZWxlYXNlLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIGludCBudm1lX3BjaV9pbml0X2RtYV9idWZfaW9fY3R4KHN0cnVjdCBudm1lX2N0cmwgKmN0cmwsXG4mIzQzO1x0XHRcdFx0XHRzdHJ1Y3QgZG1hX2J1Zl9pb19jdHggKmN0eClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaDtcbiYjNDM7XHRzdHJ1Y3QgbnZtZV9kZXYgKmRldiA9IHRvX252bWVfZGV2KGN0cmwpO1xuJiM0MztcbiYjNDM7XHRhdHRhY2ggPSBkbWFfYnVmX2R5bmFtaWNfYXR0YWNoKGN0eC1cdTAwM2VkbWFidWYsIGRldi1cdTAwM2VkZXYsXG4mIzQzO1x0XHRcdFx0XHRcdTAwMjZudm1lX2RtYWJ1Zl9pbXBvcnRlcl9vcHMsIGN0eCk7XG4mIzQzO1x0aWYgKElTX0VSUihhdHRhY2gpKVxuJiM0MztcdFx0cmV0dXJuIFBUUl9FUlIoYXR0YWNoKTtcbiYjNDM7XG4mIzQzO1x0Y3R4LVx1MDAzZWRldl9wcml2ID0gYXR0YWNoO1xuJiM0MztcdGN0eC1cdTAwM2VkZXZfb3BzID0gXHUwMDI2bnZtZV9kbWFfYnVmX2lvX29wcztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MzsjZW5kaWZcbiYjNDM7XG4gc3RhdGljIGNvbnN0IHN0cnVjdCBibGtfbXFfb3BzIG52bWVfbXFfYWRtaW5fb3BzID0ge1xuIFx0LnF1ZXVlX3JxXHQ9IG52bWVfcXVldWVfcnEsXG4gXHQuY29tcGxldGVcdD0gbnZtZV9wY2lfY29tcGxldGVfcnEsXG5AQCAtMzU2Myw2ICYjNDM7Mzk2OSw5IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbnZtZV9jdHJsX29wcyBudm1lX3BjaV9jdHJsX29wcyA9IHtcbiBcdC5wcmludF9kZXZpY2VfaW5mb1x0PSBudm1lX3BjaV9wcmludF9kZXZpY2VfaW5mbyxcbiBcdC5zdXBwb3J0c19wY2lfcDJwZG1hXHQ9IG52bWVfcGNpX3N1cHBvcnRzX3BjaV9wMnBkbWEsXG4gXHQuZ2V0X3ZpcnRfYm91bmRhcnlcdD0gbnZtZV9wY2lfZ2V0X3ZpcnRfYm91bmRhcnksXG4mIzQzOyNpZmRlZiBDT05GSUdfRE1BX1NIQVJFRF9CVUZGRVJcbiYjNDM7XHQuaW5pdF9kbWFfYnVmX2lvX2N0eFx0PSBudm1lX3BjaV9pbml0X2RtYV9idWZfaW9fY3R4LFxuJiM0MzsjZW5kaWZcbiB9O1xuIFxuIHN0YXRpYyBpbnQgbnZtZV9kZXZfbWFwKHN0cnVjdCBudm1lX2RldiAqZGV2KVxuQEAgLTQzMjcsNSAmIzQzOzQ3MzYsNiBAQCBNT0RVTEVfQVVUSE9SKFwmIzM0O01hdHRoZXcgV2lsY294IFx1MDAzY3dpbGx5QGxpbnV4LmludGVsLmNvbVx1MDAzZVwmIzM0Oyk7XG4gTU9EVUxFX0xJQ0VOU0UoXCYjMzQ7R1BMXCYjMzQ7KTtcbiBNT0RVTEVfVkVSU0lPTihcJiMzNDsxLjBcJiMzNDspO1xuIE1PRFVMRV9ERVNDUklQVElPTihcJiMzNDtOVk1lIGhvc3QgUENJZSB0cmFuc3BvcnQgZHJpdmVyXCYjMzQ7KTtcbiYjNDM7TU9EVUxFX0lNUE9SVF9OUyhcJiMzNDtETUFfQlVGXCYjMzQ7KTtcbiBtb2R1bGVfaW5pdChudm1lX2luaXQpO1xuIG1vZHVsZV9leGl0KG52bWVfZXhpdCk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9udm1lL2hvc3QvdGNwLmMgYi9kcml2ZXJzL252bWUvaG9zdC90Y3AuY1xuaW5kZXggYmE1YzdiM2UyYTdjNi4uY2UwM2EwZWE0ZGVkNyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbnZtZS9ob3N0L3RjcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL252bWUvaG9zdC90Y3AuY1xuQEAgLTM1Nyw3ICYjNDM7MzU3LDcgQEAgc3RhdGljIHZvaWQgbnZtZV90Y3BfaW5pdF9pdGVyKHN0cnVjdCBudm1lX3RjcF9yZXF1ZXN0ICpyZXEsXG4gXHRcdGlvdl9pdGVyX2J2ZWMoXHUwMDI2cmVxLVx1MDAzZWl0ZXIsIGRpcixcbiBcdFx0XHRfX2J2ZWNfaXRlcl9idmVjKGJpby1cdTAwM2ViaV9pb192ZWMsIGJpby1cdTAwM2ViaV9pdGVyKSwgbnJfYnZlYyxcbiBcdFx0XHRiaW8tXHUwMDNlYmlfaXRlci5iaV9zaXplKTtcbi1cdFx0cmVxLVx1MDAzZWl0ZXIuaW92X29mZnNldCA9IGJpby1cdTAwM2ViaV9pdGVyLmJpX2J2ZWNfZG9uZTtcbiYjNDM7XHRcdHJlcS1cdTAwM2VpdGVyLmlvdl9vZmZzZXQgPSBiaW8tXHUwMDNlYmlfaXRlci5iaV9vZmZzZXQ7XG4gXHR9XG4gfVxuIFxuZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL21pc2MuaCBiL2ZzL2J0cmZzL21pc2MuaFxuaW5kZXggNjk0YmU2ZDA1NjJhNC4uODAyMDYwOTQzMTgwMSAxMDA2NDRcbi0tLSBhL2ZzL2J0cmZzL21pc2MuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZnMvYnRyZnMvbWlzYy5oXG5AQCAtNzQsNyAmIzQzOzc0LDcgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgYnZlY19pdGVyIGluaXRfYnZlY19pdGVyX2Zvcl9iaW8oc3RydWN0IGJpbyAqYmlvKVxuIFx0XHQuYmlfc2VjdG9yID0gMCxcbiBcdFx0LmJpX3NpemUgPSBiaW9fc2l6ZSxcbiBcdFx0LmJpX2lkeCA9IDAsXG4tXHRcdC5iaV9idmVjX2RvbmUgPSAwLFxuJiM0MztcdFx0LmJpX29mZnNldCA9IDAsXG4gXHR9O1xuIH1cbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Jpby5oIGIvaW5jbHVkZS9saW51eC9iaW8uaFxuaW5kZXggMDQ0NWVjYmEzYjI0Ny4uMjJjZTlkZWIyZmViYiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvYmlvLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvYmlvLmhcbkBAIC04MCw3ICYjNDM7ODAsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgYmlvX25vX2FkdmFuY2VfaXRlcihjb25zdCBzdHJ1Y3QgYmlvICpiaW8pXG4ge1xuIFx0cmV0dXJuIGJpb19vcChiaW8pID09IFJFUV9PUF9ESVNDQVJEIHx8XG4gXHQgICAgICAgYmlvX29wKGJpbykgPT0gUkVRX09QX1NFQ1VSRV9FUkFTRSB8fFxuLVx0ICAgICAgIGJpb19vcChiaW8pID09IFJFUV9PUF9XUklURV9aRVJPRVM7XG4mIzQzO1x0ICAgICAgIGJpb19vcChiaW8pID09IFJFUV9PUF9XUklURV9aRVJPRVMgfHxcbiYjNDM7XHQgICAgICAgb3BfaXNfZG1hYnVmKGJpby1cdTAwM2ViaV9vcGYpO1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgKmJpb19kYXRhKHN0cnVjdCBiaW8gKmJpbylcbkBAIC0xMTMsMTEgJiM0MzsxMTQsMTMgQEAgc3RhdGljIGlubGluZSB2b2lkIGJpb19hZHZhbmNlX2l0ZXIoY29uc3Qgc3RydWN0IGJpbyAqYmlvLFxuIHtcbiBcdGl0ZXItXHUwMDNlYmlfc2VjdG9yICYjNDM7PSBieXRlcyBcdTAwM2VcdTAwM2UgOTtcbiBcbi1cdGlmIChiaW9fbm9fYWR2YW5jZV9pdGVyKGJpbykpXG4mIzQzO1x0aWYgKGJpb19ub19hZHZhbmNlX2l0ZXIoYmlvKSkge1xuIFx0XHRpdGVyLVx1MDAzZWJpX3NpemUgLT0gYnl0ZXM7XG4tXHRlbHNlXG4mIzQzO1x0XHRpdGVyLVx1MDAzZWJpX29mZnNldCAmIzQzOz0gYnl0ZXM7XG4mIzQzO1x0fSBlbHNlIHtcbiBcdFx0YnZlY19pdGVyX2FkdmFuY2UoYmlvLVx1MDAzZWJpX2lvX3ZlYywgaXRlciwgYnl0ZXMpO1xuIFx0XHQvKiBUT0RPOiBJdCBpcyByZWFzb25hYmxlIHRvIGNvbXBsZXRlIGJpbyB3aXRoIGVycm9yIGhlcmUuICovXG4mIzQzO1x0fVxuIH1cbiBcbiAvKiBAYnl0ZXMgc2hvdWxkIGJlIGxlc3Mgb3IgZXF1YWwgdG8gYnZlY1tpLVx1MDAzZWJpX2lkeF0uYnZfbGVuICovXG5AQCAtMTI3LDEwICYjNDM7MTMwLDEyIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBiaW9fYWR2YW5jZV9pdGVyX3NpbmdsZShjb25zdCBzdHJ1Y3QgYmlvICpiaW8sXG4ge1xuIFx0aXRlci1cdTAwM2ViaV9zZWN0b3IgJiM0Mzs9IGJ5dGVzIFx1MDAzZVx1MDAzZSA5O1xuIFxuLVx0aWYgKGJpb19ub19hZHZhbmNlX2l0ZXIoYmlvKSlcbiYjNDM7XHRpZiAoYmlvX25vX2FkdmFuY2VfaXRlcihiaW8pKSB7XG4gXHRcdGl0ZXItXHUwMDNlYmlfc2l6ZSAtPSBieXRlcztcbi1cdGVsc2VcbiYjNDM7XHRcdGl0ZXItXHUwMDNlYmlfb2Zmc2V0ICYjNDM7PSBieXRlcztcbiYjNDM7XHR9IGVsc2Uge1xuIFx0XHRidmVjX2l0ZXJfYWR2YW5jZV9zaW5nbGUoYmlvLVx1MDAzZWJpX2lvX3ZlYywgaXRlciwgYnl0ZXMpO1xuJiM0MztcdH1cbiB9XG4gXG4gdm9pZCBfX2Jpb19hZHZhbmNlKHN0cnVjdCBiaW8gKiwgdW5zaWduZWQgYnl0ZXMpO1xuQEAgLTQzNCwxMiAmIzQzOzQzOSwxMiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgYmlvX3dvdWxkYmxvY2tfZXJyb3Ioc3RydWN0IGJpbyAqYmlvKVxuIFxuIC8qXG4gICogQ2FsY3VsYXRlIG51bWJlciBvZiBidmVjIHNlZ21lbnRzIHRoYXQgc2hvdWxkIGJlIGFsbG9jYXRlZCB0byBmaXQgZGF0YVxuLSAqIHBvaW50ZWQgYnkgQGl0ZXIuIElmIEBpdGVyIGlzIGJhY2tlZCBieSBidmVjIGl0JiMzOTtzIGdvaW5nIHRvIGJlIHJldXNlZFxuLSAqIGluc3RlYWQgb2YgYWxsb2NhdGluZyBhIG5ldyBvbmUuXG4mIzQzOyAqIHBvaW50ZWQgYnkgQGl0ZXIuIElmIEBpdGVyIGlzIGJhY2tlZCBieSBhIGJ2ZWMgb3IgYSBkbWFidWYsIHRoZSBidmVjIGFycmF5IC9cbiYjNDM7ICogdGhlIGRtYSBtYXAgYXJlIGdvaW5nIHRvIGJlIHJldXNlZCwgYW5kIHNvIG5vIGV4dHJhIGFsbG9jYXRpb24gaXMgcmVxdWlyZWQuXG4gICovXG4gc3RhdGljIGlubGluZSBpbnQgYmlvX2lvdl92ZWNzX3RvX2FsbG9jKHN0cnVjdCBpb3ZfaXRlciAqaXRlciwgaW50IG1heF9zZWdzKVxuIHtcbi1cdGlmIChpb3ZfaXRlcl9pc19idmVjKGl0ZXIpKVxuJiM0MztcdGlmIChpb3ZfaXRlcl9pc19idmVjKGl0ZXIpIHx8IGlvdl9pdGVyX2lzX2RtYWJ1Zl9tYXAoaXRlcikpXG4gXHRcdHJldHVybiAwO1xuIFx0cmV0dXJuIGlvdl9pdGVyX25wYWdlcyhpdGVyLCBtYXhfc2Vncyk7XG4gfVxuQEAgLTUxOCw3ICYjNDM7NTIzLDcgQEAgaW50IGJkZXZfcndfdmlydChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBzZWN0b3JfdCBzZWN0b3IsIHZvaWQgKmRhdGEsXG4gaW50IGJpb19pb3ZfaXRlcl9nZXRfcGFnZXMoc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG4gXHRcdHVuc2lnbmVkIG1lbV9hbGlnbl9tYXNrLCB1bnNpZ25lZCBsZW5fYWxpZ25fbWFzayk7XG4gXG4tdm9pZCBiaW9faW92X2J2ZWNfc2V0KHN0cnVjdCBiaW8gKmJpbywgY29uc3Qgc3RydWN0IGlvdl9pdGVyICppdGVyKTtcbiYjNDM7Ym9vbCBiaW9faW92X2l0ZXJfc2V0KHN0cnVjdCBiaW8gKmJpbywgY29uc3Qgc3RydWN0IGlvdl9pdGVyICppdGVyKTtcbiB2b2lkIF9fYmlvX3JlbGVhc2VfcGFnZXMoc3RydWN0IGJpbyAqYmlvLCBib29sIG1hcmtfZGlydHkpO1xuIGV4dGVybiB2b2lkIGJpb19zZXRfcGFnZXNfZGlydHkoc3RydWN0IGJpbyAqYmlvKTtcbiBleHRlcm4gdm9pZCBiaW9fY2hlY2tfcGFnZXNfZGlydHkoc3RydWN0IGJpbyAqYmlvKTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Jsay1tcS5oIGIvaW5jbHVkZS9saW51eC9ibGstbXEuaFxuaW5kZXggYWY4Nzg1OTdhZmI4Yy4uN2M3NTA0Yzg0ZTA5MCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvYmxrLW1xLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvYmxrLW1xLmhcbkBAIC0xMDE3LDYgJiM0MzsxMDE3LDEzIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCAqYmxrX21xX3JxX3RvX3BkdShzdHJ1Y3QgcmVxdWVzdCAqcnEpXG4gXHRyZXR1cm4gcnEgJiM0MzsgMTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBibGtfbXFfcnFfaXNfZG1hYnVmKHN0cnVjdCByZXF1ZXN0ICpycSlcbiYjNDM7e1xuJiM0MztcdGlmICghSVNfRU5BQkxFRChDT05GSUdfRE1BX1NIQVJFRF9CVUZGRVIpKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdHJldHVybiBycS1cdTAwM2ViaW8gXHUwMDI2XHUwMDI2IG9wX2lzX2RtYWJ1ZihycS1cdTAwM2ViaW8tXHUwMDNlYmlfb3BmKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBibGtfbXFfaHdfY3R4ICpxdWV1ZV9oY3R4KHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBpbnQgaWQpXG4ge1xuIFx0c3RydWN0IGJsa19tcV9od19jdHggKmhjdHg7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ibGtfdHlwZXMuaCBiL2luY2x1ZGUvbGludXgvYmxrX3R5cGVzLmhcbmluZGV4IGQ0OWQ5N2EwNTBkMGUuLmEzMDU5NTFmMDMxMjQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2Jsa190eXBlcy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2Jsa190eXBlcy5oXG5AQCAtMjMzLDcgJiM0MzsyMzMsMTIgQEAgc3RydWN0IGJpbyB7XG4gXHRhdG9taWNfdFx0XHRfX2JpX3JlbWFpbmluZztcbiBcbiBcdC8qIFRoZSBhY3R1YWwgdmVjIGxpc3QsIHByZXNlcnZlZCBieSBiaW9fcmVzZXQoKSAqL1xuLVx0c3RydWN0IGJpb192ZWNcdFx0KmJpX2lvX3ZlYztcbiYjNDM7XHR1bmlvbiB7XG4mIzQzO1x0XHRzdHJ1Y3QgYmlvX3ZlY1x0XHQqYmlfaW9fdmVjO1xuJiM0MztcdFx0LyogRHJpdmVyIHNwZWNpZmljIGRtYSBtYXAsIHZhbGlkIElGRiBSRVFfRE1BQlVGIGlzIHNldCAqL1xuJiM0MztcdFx0c3RydWN0IGRtYV9idWZfaW9fbWFwXHQqYmlfZG1hYnVmX21hcDtcbiYjNDM7XHR9O1xuJiM0MztcbiBcdHN0cnVjdCBidmVjX2l0ZXJcdGJpX2l0ZXI7XG4gXG4gXHR1bmlvbiB7XG5AQCAtNDAyLDYgJiM0Mzs0MDcsNyBAQCBlbnVtIHJlcV9mbGFnX2JpdHMge1xuIFx0X19SRVFfRFJWLFx0XHQvKiBmb3IgZHJpdmVyIHVzZSAqL1xuIFx0X19SRVFfRlNfUFJJVkFURSxcdC8qIGZvciBmaWxlIHN5c3RlbSAoc3VibWl0dGVyKSB1c2UgKi9cbiBcdF9fUkVRX0FUT01JQyxcdFx0LyogZm9yIGF0b21pYyB3cml0ZSBvcGVyYXRpb25zICovXG4mIzQzO1x0X19SRVFfRE1BQlVGLFx0XHQvKiBVc2luZyBwcmVtbWFwZWQgZG1hIGJ1ZmZlcnMgKi9cbiBcdC8qXG4gXHQgKiBDb21tYW5kIHNwZWNpZmljIGZsYWdzLCBrZWVwIGxhc3Q6XG4gXHQgKi9cbkBAIC00MzQsNiAmIzQzOzQ0MCw3IEBAIGVudW0gcmVxX2ZsYWdfYml0cyB7XG4gI2RlZmluZSBSRVFfRFJWXHRcdChfX2ZvcmNlIGJsa19vcGZfdCkoMVVMTCBcdTAwM2NcdTAwM2MgX19SRVFfRFJWKVxuICNkZWZpbmUgUkVRX0ZTX1BSSVZBVEVcdChfX2ZvcmNlIGJsa19vcGZfdCkoMVVMTCBcdTAwM2NcdTAwM2MgX19SRVFfRlNfUFJJVkFURSlcbiAjZGVmaW5lIFJFUV9BVE9NSUNcdChfX2ZvcmNlIGJsa19vcGZfdCkoMVVMTCBcdTAwM2NcdTAwM2MgX19SRVFfQVRPTUlDKVxuJiM0MzsjZGVmaW5lIFJFUV9ETUFCVUZcdChfX2ZvcmNlIGJsa19vcGZfdCkoMVVMTCBcdTAwM2NcdTAwM2MgX19SRVFfRE1BQlVGKVxuIFxuICNkZWZpbmUgUkVRX05PVU5NQVBcdChfX2ZvcmNlIGJsa19vcGZfdCkoMVVMTCBcdTAwM2NcdTAwM2MgX19SRVFfTk9VTk1BUClcbiBcbkBAIC00ODcsNiAmIzQzOzQ5NCwxMSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgb3BfaXNfZGlzY2FyZChibGtfb3BmX3Qgb3ApXG4gXHRyZXR1cm4gKG9wIFx1MDAyNiBSRVFfT1BfTUFTSykgPT0gUkVRX09QX0RJU0NBUkQ7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgb3BfaXNfZG1hYnVmKGJsa19vcGZfdCBvcClcbiYjNDM7e1xuJiM0MztcdHJldHVybiBvcCBcdTAwMjYgUkVRX0RNQUJVRjtcbiYjNDM7fVxuJiM0MztcbiAvKlxuICAqIENoZWNrIGlmIGEgYmlvIG9yIHJlcXVlc3Qgb3BlcmF0aW9uIGlzIGEgem9uZSBtYW5hZ2VtZW50IG9wZXJhdGlvbi5cbiAgKi9cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oIGIvaW5jbHVkZS9saW51eC9ibGtkZXYuaFxuaW5kZXggOTIxM2E1NzE2Zjk1YS4uOWY0YzkyZTUxZGM5NSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvYmxrZGV2LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvYmxrZGV2LmhcbkBAIC0xNjgyLDYgJiM0MzsxNjgyLDggQEAgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIHtcbiBcdC8qIHJldHVybnMgdGhlIGxlbmd0aCBvZiB0aGUgaWRlbnRpZmllciBvciBhIG5lZ2F0aXZlIGVycm5vOiAqL1xuIFx0aW50ICgqZ2V0X3VuaXF1ZV9pZCkoc3RydWN0IGdlbmRpc2sgKmRpc2ssIHU4IGlkWzE2XSxcbiBcdFx0XHRlbnVtIGJsa191bmlxdWVfaWQgaWRfdHlwZSk7XG4mIzQzO1x0aW50ICgqaW5pdF9kbWFfYnVmX2lvX2N0eCkoc3RydWN0IGJsb2NrX2RldmljZSAqLFxuJiM0MztcdFx0XHRcdCAgIHN0cnVjdCBkbWFfYnVmX2lvX2N0eCAqKTtcbiBcdHN0cnVjdCBtb2R1bGUgKm93bmVyO1xuIFx0Y29uc3Qgc3RydWN0IHByX29wcyAqcHJfb3BzO1xuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnZlYy5oIGIvaW5jbHVkZS9saW51eC9idmVjLmhcbmluZGV4IDkyODM3ZTI3NDNmMTkuLmI2MzkxNGZmNTZlMzMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2J2ZWMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9idmVjLmhcbkBAIC0xMDgsOSAmIzQzOzEwOCwxMCBAQCBzdHJ1Y3QgYnZlY19pdGVyIHtcbiBcdHVuc2lnbmVkIGludFx0XHRiaV9pZHg7XG4gXG4gXHQvKlxuLVx0ICogQ3VycmVudCBvZmZzZXQgaW4gdGhlIGJ2ZWMgZW50cnkgcG9pbnRlZCB0byBieSBgYmlfaWR4YC5cbiYjNDM7XHQgKiBDdXJyZW50IG9mZnNldCBpbiB0aGUgYnZlYyBlbnRyeSBwb2ludGVkIHRvIGJ5IGBiaV9pZHhgIG9yIGludG9cbiYjNDM7XHQgKiBhIGRtYS1idWYgbWFwLlxuIFx0ICovXG4tXHR1bnNpZ25lZCBpbnRcdFx0YmlfYnZlY19kb25lO1xuJiM0MztcdHVuc2lnbmVkIGludFx0XHRiaV9vZmZzZXQ7XG4gfSBfX3BhY2tlZCBfX2FsaWduZWQoNCk7XG4gXG4gc3RydWN0IGJ2ZWNfaXRlcl9hbGwge1xuQEAgLTEzNSwxNCAmIzQzOzEzNiwxNCBAQCBtcF9idmVjX2l0ZXJfcGFnZShjb25zdCBzdHJ1Y3QgYmlvX3ZlYyAqYnZlY3MsIGNvbnN0IHN0cnVjdCBidmVjX2l0ZXIgaXRlcilcbiBzdGF0aWMgX19hbHdheXNfaW5saW5lIHVuc2lnbmVkIGludFxuIG1wX2J2ZWNfaXRlcl9sZW4oY29uc3Qgc3RydWN0IGJpb192ZWMgKmJ2ZWNzLCBjb25zdCBzdHJ1Y3QgYnZlY19pdGVyIGl0ZXIpXG4ge1xuLVx0cmV0dXJuIG1pbihfX2J2ZWNfaXRlcl9idmVjKGJ2ZWNzLCBpdGVyKS1cdTAwM2Vidl9sZW4gLSBpdGVyLmJpX2J2ZWNfZG9uZSxcbiYjNDM7XHRyZXR1cm4gbWluKF9fYnZlY19pdGVyX2J2ZWMoYnZlY3MsIGl0ZXIpLVx1MDAzZWJ2X2xlbiAtIGl0ZXIuYmlfb2Zmc2V0LFxuIFx0XHRcdGl0ZXIuYmlfc2l6ZSk7XG4gfVxuIFxuIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdW5zaWduZWQgaW50XG4gbXBfYnZlY19pdGVyX29mZnNldChjb25zdCBzdHJ1Y3QgYmlvX3ZlYyAqYnZlY3MsIGNvbnN0IHN0cnVjdCBidmVjX2l0ZXIgaXRlcilcbiB7XG4tXHRyZXR1cm4gX19idmVjX2l0ZXJfYnZlYyhidmVjcywgaXRlciktXHUwMDNlYnZfb2Zmc2V0ICYjNDM7IGl0ZXIuYmlfYnZlY19kb25lO1xuJiM0MztcdHJldHVybiBfX2J2ZWNfaXRlcl9idmVjKGJ2ZWNzLCBpdGVyKS1cdTAwM2Vidl9vZmZzZXQgJiM0MzsgaXRlci5iaV9vZmZzZXQ7XG4gfVxuIFxuIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdW5zaWduZWQgaW50XG5AQCAtMjA0LDcgJiM0MzsyMDUsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgYnZlY19pdGVyX2FkdmFuY2UoY29uc3Qgc3RydWN0IGJpb192ZWMgKmJ2LFxuIFx0fVxuIFxuIFx0aXRlci1cdTAwM2ViaV9zaXplIC09IGJ5dGVzO1xuLVx0Ynl0ZXMgJiM0Mzs9IGl0ZXItXHUwMDNlYmlfYnZlY19kb25lO1xuJiM0MztcdGJ5dGVzICYjNDM7PSBpdGVyLVx1MDAzZWJpX29mZnNldDtcbiBcbiBcdHdoaWxlIChieXRlcyBcdTAwMjZcdTAwMjYgYnl0ZXMgXHUwMDNlPSBidltpZHhdLmJ2X2xlbikge1xuIFx0XHRieXRlcyAtPSBidltpZHhdLmJ2X2xlbjtcbkBAIC0yMTIsNyAmIzQzOzIxMyw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBidmVjX2l0ZXJfYWR2YW5jZShjb25zdCBzdHJ1Y3QgYmlvX3ZlYyAqYnYsXG4gXHR9XG4gXG4gXHRpdGVyLVx1MDAzZWJpX2lkeCA9IGlkeDtcbi1cdGl0ZXItXHUwMDNlYmlfYnZlY19kb25lID0gYnl0ZXM7XG4mIzQzO1x0aXRlci1cdTAwM2ViaV9vZmZzZXQgPSBieXRlcztcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbkBAIC0yMjMsMTMgJiM0MzsyMjQsMTMgQEAgc3RhdGljIGlubGluZSBib29sIGJ2ZWNfaXRlcl9hZHZhbmNlKGNvbnN0IHN0cnVjdCBiaW9fdmVjICpidixcbiBzdGF0aWMgaW5saW5lIHZvaWQgYnZlY19pdGVyX2FkdmFuY2Vfc2luZ2xlKGNvbnN0IHN0cnVjdCBiaW9fdmVjICpidixcbiBcdFx0XHRcdHN0cnVjdCBidmVjX2l0ZXIgKml0ZXIsIHVuc2lnbmVkIGludCBieXRlcylcbiB7XG4tXHR1bnNpZ25lZCBpbnQgZG9uZSA9IGl0ZXItXHUwMDNlYmlfYnZlY19kb25lICYjNDM7IGJ5dGVzO1xuJiM0MztcdHVuc2lnbmVkIGludCBkb25lID0gaXRlci1cdTAwM2ViaV9vZmZzZXQgJiM0MzsgYnl0ZXM7XG4gXG4gXHRpZiAoZG9uZSA9PSBidltpdGVyLVx1MDAzZWJpX2lkeF0uYnZfbGVuKSB7XG4gXHRcdGRvbmUgPSAwO1xuIFx0XHRpdGVyLVx1MDAzZWJpX2lkeCYjNDM7JiM0Mzs7XG4gXHR9XG4tXHRpdGVyLVx1MDAzZWJpX2J2ZWNfZG9uZSA9IGRvbmU7XG4mIzQzO1x0aXRlci1cdTAwM2ViaV9vZmZzZXQgPSBkb25lO1xuIFx0aXRlci1cdTAwM2ViaV9zaXplIC09IGJ5dGVzO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RtYS1idWYtaW8uaCBiL2luY2x1ZGUvbGludXgvZG1hLWJ1Zi1pby5oXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZjMxYzczNzVhZTkxMVxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9kbWEtYnVmLWlvLmhcbkBAIC0wLDAgJiM0MzsxLDkyIEBAXG4mIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXG4mIzQzOyNpZm5kZWYgX19ETUFfQlVGX0lPX0hfX1xuJiM0MzsjZGVmaW5lIF9fRE1BX0JVRl9JT19IX19cbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2RtYS1idWYuaFx1MDAzZVxuJiM0MztcbiYjNDM7c3RydWN0IGRtYV9idWZfaW9fZmVuY2U7XG4mIzQzO3N0cnVjdCBkbWFfYnVmX2lvX2N0eDtcbiYjNDM7c3RydWN0IGRtYV9idWZfaW9fbWFwO1xuJiM0MztcbiYjNDM7c3RydWN0IGRtYV9idWZfaW9fb3BzIHtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIENyZWF0ZSBhIG5ldyBtYXAgZm9yIHRoZSBnaXZlbiBjdHguIENhbGxlZCB3aXRoIHRoZSByZXNlcnZhdGlvblxuJiM0MztcdCAqIGxvY2sgaGVsZC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRzdHJ1Y3QgZG1hX2J1Zl9pb19tYXAgKigqbWFwKShzdHJ1Y3QgZG1hX2J1Zl9pb19jdHggKmN0eCk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogQ2xlYW4gdXAgZGV2aWNlIHNwZWNpZmljIHBhcnRzIG9mIHRoZSBAbWFwLiBDYWxsZWQgd2l0aCB0aGVcbiYjNDM7XHQgKiByZXNlcnZhdGlvbiBsb2NrIGhlbGQuXG4mIzQzO1x0ICovXG4mIzQzO1x0dm9pZCAoKnVubWFwKShzdHJ1Y3QgZG1hX2J1Zl9pb19jdHggKmN0eCwgc3RydWN0IGRtYV9idWZfaW9fbWFwICptYXApO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFRoZSB1c2VyIHRyaWVzIHRvIGRlc3Ryb3kgdGhlIGN0eC4gUmVsZWFzZSBhbGwgZGV2aWNlIHNwZWNpZmljXG4mIzQzO1x0ICogcGFydHMgb2YgdGhlIHRva2VuLlxuJiM0MztcdCAqL1xuJiM0MztcdHZvaWQgKCpyZWxlYXNlKShzdHJ1Y3QgZG1hX2J1Zl9pb19jdHggKik7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdHJ1Y3QgZG1hX2J1Zl9pb19tYXAge1xuJiM0MztcdC8qXG4mIzQzO1x0ICogQ291bnRzIGF0dGFjaGVkIHJlcXVlc3RzIGFuZCBvdGhlciB1c2Vycy4gRGV2aWNlIHNwZWNpZmljIHVubWFwcGluZ1xuJiM0MztcdCAqIGlzIGRlZmVycmVkIHVudGlsIGFsbCByZWZzIGFyZSBkcm9wcGVkLlxuJiM0MztcdCAqL1xuJiM0MztcdHN0cnVjdCBwZXJjcHVfcmVmXHRcdHJlZnM7XG4mIzQzO1x0dW5zaWduZWRcdFx0XHRzZWdfc2hpZnQ7XG4mIzQzO1xuJiM0MztcdHN0cnVjdCB3b3JrX3N0cnVjdFx0XHRyZWxlYXNlX3dvcms7XG4mIzQzO1x0c3RydWN0IGRtYV9idWZfaW9fZmVuY2VcdFx0KmZlbmNlO1xuJiM0MztcdHN0cnVjdCBkbWFfYnVmX2lvX2N0eFx0XHQqY3R4O1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RydWN0IGRtYV9idWZfaW9fY3R4IHtcbiYjNDM7XHRzdHJ1Y3QgZG1hX2J1Zl9pb19tYXAgX19yY3VcdFx0Km1hcDtcbiYjNDM7XHRzdHJ1Y3QgZG1hX2J1Zlx0XHRcdFx0KmRtYWJ1ZjtcbiYjNDM7XHRlbnVtIGRtYV9kYXRhX2RpcmVjdGlvblx0XHRcdGRpcjtcbiYjNDM7XG4mIzQzO1x0YXRvbWljX3RcdFx0XHRcdGZlbmNlX3NlcTtcbiYjNDM7XHR1NjRcdFx0XHRcdFx0ZmVuY2VfY3R4O1xuJiM0MztcdHN0cnVjdCB3b3JrX3N0cnVjdFx0XHRcdHJlbGVhc2Vfd29yaztcbiYjNDM7XHRyZWZjb3VudF90XHRcdFx0XHRyZWZzO1xuJiM0MztcbiYjNDM7XHR2b2lkXHRcdFx0XHRcdCpkZXZfcHJpdjtcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgZG1hX2J1Zl9pb19vcHNcdFx0KmRldl9vcHM7XG4mIzQzO307XG4mIzQzO1xuJiM0MztpbnQgZG1hX2J1Zl9pb19jdHhfY3JlYXRlKHN0cnVjdCBmaWxlICpmaWxlLFxuJiM0MztcdFx0XHQgICBzdHJ1Y3QgZG1hX2J1Zl9pb19jdHggKmN0eCxcbiYjNDM7XHRcdFx0ICAgc3RydWN0IGRtYV9idWYgKmRtYWJ1ZixcbiYjNDM7XHRcdFx0ICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKTtcbiYjNDM7dm9pZCBkbWFfYnVmX2lvX2N0eF9yZWxlYXNlKHN0cnVjdCBkbWFfYnVmX2lvX2N0eCAqY3R4KTtcbiYjNDM7XG4mIzQzO3N0cnVjdCBkbWFfYnVmX2lvX21hcCAqZG1hX2J1Zl9pb19jcmVhdGVfbWFwKHN0cnVjdCBkbWFfYnVmX2lvX2N0eCAqY3R4KTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgc3RydWN0IGRtYV9idWZfaW9fbWFwICpcbiYjNDM7ZG1hX2J1Zl9pb19nZXRfbWFwKHN0cnVjdCBkbWFfYnVmX2lvX2N0eCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRtYV9idWZfaW9fbWFwICptYXA7XG4mIzQzO1xuJiM0MztcdGd1YXJkKHJjdSkoKTtcbiYjNDM7XG4mIzQzO1x0bWFwID0gcmN1X2RlcmVmZXJlbmNlKGN0eC1cdTAwM2VtYXApO1xuJiM0MztcdGlmICh1bmxpa2VseSghbWFwIHx8ICFwZXJjcHVfcmVmX3RyeWdldF9saXZlX3JjdShcdTAwMjZtYXAtXHUwMDNlcmVmcykpKVxuJiM0MztcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1xuJiM0MztcdHJldHVybiBtYXA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBkbWFfYnVmX2lvX21hcF9kcm9wKHN0cnVjdCBkbWFfYnVmX2lvX21hcCAqbWFwKVxuJiM0Mzt7XG4mIzQzO1x0cGVyY3B1X3JlZl9wdXQoXHUwMDI2bWFwLVx1MDAzZXJlZnMpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBEZXZpY2UgQVBJXG4mIzQzOyAqL1xuJiM0MztcbiYjNDM7dm9pZCBkbWFfYnVmX2lvX2ludmFsaWRhdGVfbWFwcGluZ3Moc3RydWN0IGRtYV9idWZfaW9fY3R4ICpjdHgpO1xuJiM0MztpbnQgZG1hX2J1Zl9pb19pbml0X21hcChzdHJ1Y3QgZG1hX2J1Zl9pb19jdHggKmN0eCwgc3RydWN0IGRtYV9idWZfaW9fbWFwICptYXApO1xuJiM0MztcbiYjNDM7I2VuZGlmXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mcy5oIGIvaW5jbHVkZS9saW51eC9mcy5oXG5pbmRleCA1MGNlNzMxYTJiNzhmLi5lNjJmYTY1M2UxNDg0IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9mcy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2ZzLmhcbkBAIC0xOTE0LDYgJiM0MzsxOTE0LDcgQEAgc3RydWN0IGRpcl9jb250ZXh0IHtcbiAjZGVmaW5lIENPUFlfRklMRV9TUExJQ0VcdFx0KDEgXHUwMDNjXHUwMDNjIDApXG4gXG4gc3RydWN0IGlvX3VyaW5nX2NtZDtcbiYjNDM7c3RydWN0IGRtYV9idWZfaW9fY3R4O1xuIHN0cnVjdCBvZmZzZXRfY3R4O1xuIFxuIHR5cGVkZWYgdW5zaWduZWQgaW50IF9fYml0d2lzZSBmb3BfZmxhZ3NfdDtcbkBAIC0xOTYyLDYgJiM0MzsxOTYzLDcgQEAgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB7XG4gXHRpbnQgKCp1cmluZ19jbWRfaW9wb2xsKShzdHJ1Y3QgaW9fdXJpbmdfY21kICosIHN0cnVjdCBpb19jb21wX2JhdGNoICosXG4gXHRcdFx0XHR1bnNpZ25lZCBpbnQgcG9sbF9mbGFncyk7XG4gXHRpbnQgKCptbWFwX3ByZXBhcmUpKHN0cnVjdCB2bV9hcmVhX2Rlc2MgKik7XG4mIzQzO1x0aW50ICgqaW5pdF9kbWFfYnVmX2lvX2N0eCkoc3RydWN0IGZpbGUgKiwgc3RydWN0IGRtYV9idWZfaW9fY3R4ICopO1xuIH0gX19yYW5kb21pemVfbGF5b3V0O1xuIFxuIC8qIFN1cHBvcnRzIGFzeW5jIGJ1ZmZlcmVkIHJlYWRzICovXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pb191cmluZ190eXBlcy5oIGIvaW5jbHVkZS9saW51eC9pb191cmluZ190eXBlcy5oXG5pbmRleCBhMmM2MjNhNjdhMjUxLi5mOTA1ODZkMzUzYzFjIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9pb191cmluZ190eXBlcy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2lvX3VyaW5nX3R5cGVzLmhcbkBAIC0xMCw2ICYjNDM7MTAsNyBAQFxuIFxuIHN0cnVjdCBpb3VfbG9vcF9wYXJhbXM7XG4gc3RydWN0IGlvX3VyaW5nX2JwZl9vcHM7XG4mIzQzO3N0cnVjdCBkbWFfYnVmX2lvX21hcDtcbiBcbiBlbnVtIHtcbiBcdC8qXG5AQCAtNTk0LDYgJiM0Mzs1OTUsNyBAQCBlbnVtIHtcbiBcdFJFUV9GX0lNUE9SVF9CVUZGRVJfQklULFxuIFx0UkVRX0ZfU1FFX0NPUElFRF9CSVQsXG4gXHRSRVFfRl9JT1BPTExfQklULFxuJiM0MztcdFJFUV9GX0RST1BfRE1BQlVGX0JJVCxcbiBcbiBcdC8qIG5vdCBhIHJlYWwgYml0LCBqdXN0IHRvIGNoZWNrIHdlJiMzOTtyZSBub3Qgb3ZlcmZsb3dpbmcgdGhlIHNwYWNlICovXG4gXHRfX1JFUV9GX0xBU1RfQklULFxuQEAgLTY4OSw2ICYjNDM7NjkxLDggQEAgZW51bSB7XG4gXHRSRVFfRl9TUUVfQ09QSUVEXHQ9IElPX1JFUV9GTEFHKFJFUV9GX1NRRV9DT1BJRURfQklUKSxcbiBcdC8qIHJlcXVlc3QgbXVzdCBiZSBpb3BvbGxlZCB0byBjb21wbGV0aW9uIChzZXQgaW4gLVx1MDAzZWlzc3VlKCkpICovXG4gXHRSRVFfRl9JT1BPTExcdFx0PSBJT19SRVFfRkxBRyhSRVFfRl9JT1BPTExfQklUKSxcbiYjNDM7XHQvKiB0aGVyZSBpcyBhIGRtYSBtYXAgYXR0YWNoZWQgdG8gcmVxdWVzdCB0aGF0IG5lZWRzIHRvIGJlIGRyb3BwZWQgKi9cbiYjNDM7XHRSRVFfRl9EUk9QX0RNQUJVRlx0PSBJT19SRVFfRkxBRyhSRVFfRl9EUk9QX0RNQUJVRl9CSVQpLFxuIH07XG4gXG4gc3RydWN0IGlvX3R3X3JlcSB7XG5AQCAtODExLDYgJiM0Mzs4MTUsNyBAQCBzdHJ1Y3QgaW9fa2lvY2Ige1xuIFx0LyogY3VzdG9tIGNyZWRlbnRpYWxzLCB2YWxpZCBJRkYgUkVRX0ZfQ1JFRFMgaXMgc2V0ICovXG4gXHRjb25zdCBzdHJ1Y3QgY3JlZFx0XHQqY3JlZHM7XG4gXHRzdHJ1Y3QgaW9fd3Ffd29ya1x0XHR3b3JrO1xuJiM0MztcdHN0cnVjdCBkbWFfYnVmX2lvX21hcFx0XHQqZG1hYnVmX21hcDtcbiBcbiBcdHN0cnVjdCBpb19iaWdfY3FlIHtcbiBcdFx0dTY0XHRcdFx0ZXh0cmExO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdWlvLmggYi9pbmNsdWRlL2xpbnV4L3Vpby5oXG5pbmRleCBmZTJlOTg1ZDc0ZDI0Li42MzhjMTExNmU5MTJlIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC91aW8uaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC91aW8uaFxuQEAgLTEyLDYgJiM0MzsxMiw3IEBAXG4gXG4gc3RydWN0IHBhZ2U7XG4gc3RydWN0IGZvbGlvX3F1ZXVlO1xuJiM0MztzdHJ1Y3QgZG1hX2J1Zl9pb19tYXA7XG4gXG4gdHlwZWRlZiB1bnNpZ25lZCBpbnQgX19iaXR3aXNlIGlvdl9pdGVyX2V4dHJhY3Rpb25fdDtcbiBcbkBAIC0yOSw2ICYjNDM7MzAsNyBAQCBlbnVtIGl0ZXJfdHlwZSB7XG4gXHRJVEVSX0ZPTElPUSxcbiBcdElURVJfWEFSUkFZLFxuIFx0SVRFUl9ESVNDQVJELFxuJiM0MztcdElURVJfRE1BQlVGX01BUCxcbiB9O1xuIFxuICNkZWZpbmUgSVRFUl9TT1VSQ0VcdDFcdC8vID09IFdSSVRFXG5AQCAtNzEsNiAmIzQzOzczLDcgQEAgc3RydWN0IGlvdl9pdGVyIHtcbiBcdFx0XHRcdGNvbnN0IHN0cnVjdCBmb2xpb19xdWV1ZSAqZm9saW9xO1xuIFx0XHRcdFx0c3RydWN0IHhhcnJheSAqeGFycmF5O1xuIFx0XHRcdFx0dm9pZCBfX3VzZXIgKnVidWY7XG4mIzQzO1x0XHRcdFx0c3RydWN0IGRtYV9idWZfaW9fbWFwICpkbWFidWZfbWFwO1xuIFx0XHRcdH07XG4gXHRcdFx0c2l6ZV90IGNvdW50O1xuIFx0XHR9O1xuQEAgLTE1NSw2ICYjNDM7MTU4LDExIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpb3ZfaXRlcl9pc194YXJyYXkoY29uc3Qgc3RydWN0IGlvdl9pdGVyICppKVxuIFx0cmV0dXJuIGlvdl9pdGVyX3R5cGUoaSkgPT0gSVRFUl9YQVJSQVk7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgaW92X2l0ZXJfaXNfZG1hYnVmX21hcChjb25zdCBzdHJ1Y3QgaW92X2l0ZXIgKmkpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gaW92X2l0ZXJfdHlwZShpKSA9PSBJVEVSX0RNQUJVRl9NQVA7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGlubGluZSB1bnNpZ25lZCBjaGFyIGlvdl9pdGVyX3J3KGNvbnN0IHN0cnVjdCBpb3ZfaXRlciAqaSlcbiB7XG4gXHRyZXR1cm4gaS1cdTAwM2VkYXRhX3NvdXJjZSA/IFdSSVRFIDogUkVBRDtcbkBAIC0zMDAsNiAmIzQzOzMwOCw5IEBAIHZvaWQgaW92X2l0ZXJfZm9saW9fcXVldWUoc3RydWN0IGlvdl9pdGVyICppLCB1bnNpZ25lZCBpbnQgZGlyZWN0aW9uLFxuIFx0XHRcdCAgdW5zaWduZWQgaW50IGZpcnN0X3Nsb3QsIHVuc2lnbmVkIGludCBvZmZzZXQsIHNpemVfdCBjb3VudCk7XG4gdm9pZCBpb3ZfaXRlcl94YXJyYXkoc3RydWN0IGlvdl9pdGVyICppLCB1bnNpZ25lZCBpbnQgZGlyZWN0aW9uLCBzdHJ1Y3QgeGFycmF5ICp4YXJyYXksXG4gXHRcdCAgICAgbG9mZl90IHN0YXJ0LCBzaXplX3QgY291bnQpO1xuJiM0Mzt2b2lkIGlvdl9pdGVyX2RtYWJ1Zl9tYXAoc3RydWN0IGlvdl9pdGVyICppLCB1bnNpZ25lZCBpbnQgZGlyZWN0aW9uLFxuJiM0MztcdFx0XHRzdHJ1Y3QgZG1hX2J1Zl9pb19tYXAgKm1hcCxcbiYjNDM7XHRcdFx0bG9mZl90IG9mZiwgc2l6ZV90IGNvdW50KTtcbiBzc2l6ZV90IGlvdl9pdGVyX2dldF9wYWdlczIoc3RydWN0IGlvdl9pdGVyICppLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzLFxuIFx0XHRcdHNpemVfdCBtYXhzaXplLCB1bnNpZ25lZCBtYXhwYWdlcywgc2l6ZV90ICpzdGFydCk7XG4gc3NpemVfdCBpb3ZfaXRlcl9nZXRfcGFnZXNfYWxsb2MyKHN0cnVjdCBpb3ZfaXRlciAqaSwgc3RydWN0IHBhZ2UgKioqcGFnZXMsXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L2lvX3VyaW5nLmggYi9pbmNsdWRlL3VhcGkvbGludXgvaW9fdXJpbmcuaFxuaW5kZXggOTA5ZmI3YWVhNjM4ZS4uYzM5Mjk3ZThiZWI2ZiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9pb191cmluZy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3VhcGkvbGludXgvaW9fdXJpbmcuaFxuQEAgLTc5MCwxMyAmIzQzOzc5MCw0MiBAQCBzdHJ1Y3QgaW9fdXJpbmdfcnNyY191cGRhdGUge1xuIFxuIHN0cnVjdCBpb191cmluZ19yc3JjX3VwZGF0ZTIge1xuIFx0X191MzIgb2Zmc2V0O1xuLVx0X191MzIgcmVzdjtcbiYjNDM7XHRfX3UzMiBmbGFncztcbiBcdF9fYWxpZ25lZF91NjQgZGF0YTtcbiBcdF9fYWxpZ25lZF91NjQgdGFncztcbiBcdF9fdTMyIG5yO1xuIFx0X191MzIgcmVzdjI7XG4gfTtcbiBcbiYjNDM7Lyogc3RydWN0IGlvX3VyaW5nX3JzcmNfdXBkYXRlMjo6ZmxhZ3MgKi9cbiYjNDM7ZW51bSBpb191cmluZ19yc3JjX3JlZ19mbGFncyB7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBVc2UgdGhlIGV4dGVuZGVkIGRlc2NyaXB0b3IgZm9ybWF0IGZvciBidWZmZXIgdXBkYXRlcyxcbiYjNDM7XHQgKiBzZWUgc3RydWN0IGlvX3VyaW5nX3JlZ2J1Zl9kZXNjXG4mIzQzO1x0ICovXG4mIzQzO1x0SU9SSU5HX1JTUkNfVVBEQVRFX0VYVEVOREVEXHRcdD0gMVUgXHUwMDNjXHUwMDNjIDEsXG4mIzQzO307XG4mIzQzO1xuJiM0MzsvKiBCdWZmZXIgcmVnaXN0cmF0aW9uIHR5cGUsIHBhc3NlZCBpbiBzdHJ1Y3QgaW9fdXJpbmdfcmVnYnVmX2Rlc2M6OnR5cGUgKi9cbiYjNDM7ZW51bSBpb191cmluZ19yZWdidWZfdHlwZSB7XG4mIzQzO1x0SU9fUkVHQlVGX1RZUEVfRU1QVFksXG4mIzQzO1x0SU9fUkVHQlVGX1RZUEVfVUFERFIsXG4mIzQzO1x0SU9fUkVHQlVGX1RZUEVfRE1BQlVGLFxuJiM0MztcbiYjNDM7XHRfX0lPX1JFR0JVRl9UWVBFX01BWCxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0cnVjdCBpb191cmluZ19yZWdidWZfZGVzYyB7XG4mIzQzO1x0X191MzIgdHlwZTsgLyogZW51bSBpb191cmluZ19yZWdidWZfdHlwZSAqL1xuJiM0MztcdF9fdTMyIGZsYWdzO1xuJiM0MztcdF9fdTY0IHNpemU7XG4mIzQzO1x0X191NjQgdWFkZHI7XG4mIzQzO1xuJiM0MztcdF9fczMyIGRtYWJ1Zl9mZDtcbiYjNDM7XHRfX3MzMiB0YXJnZXRfZmQ7XG4mIzQzO1x0X191NjQgX19yZXN2WzZdO1xuJiM0Mzt9O1xuJiM0MztcbiAvKiBTa2lwIHVwZGF0aW5nIGZkIGluZGV4ZXMgc2V0IHRvIHRoaXMgdmFsdWUgaW4gdGhlIGZkIHRhYmxlICovXG4gI2RlZmluZSBJT1JJTkdfUkVHSVNURVJfRklMRVNfU0tJUFx0KC0yKVxuIFxuZGlmZiAtLWdpdCBhL2lvX3VyaW5nL2lvX3VyaW5nLmMgYi9pb191cmluZy9pb191cmluZy5jXG5pbmRleCA0YzgzYTk0YjRiZGMzLi5kMWQ3NDhiNWM1ZGNhIDEwMDY0NFxuLS0tIGEvaW9fdXJpbmcvaW9fdXJpbmcuY1xuJiM0MzsmIzQzOyYjNDM7IGIvaW9fdXJpbmcvaW9fdXJpbmcuY1xuQEAgLTEwOSw3ICYjNDM7MTA5LDcgQEBcbiBcbiAjZGVmaW5lIElPX1JFUV9DTEVBTl9TTE9XX0ZMQUdTIChSRVFfRl9SRUZDT1VOVCB8IElPX1JFUV9MSU5LX0ZMQUdTIHwgXFxcbiBcdFx0XHRcdCBSRVFfRl9SRUlTU1VFIHwgUkVRX0ZfUE9MTEVEIHwgXFxcbi1cdFx0XHRcdCBJT19SRVFfQ0xFQU5fRkxBR1MpXG4mIzQzO1x0XHRcdFx0IElPX1JFUV9DTEVBTl9GTEFHUyB8IFJFUV9GX0RST1BfRE1BQlVGKVxuIFxuICNkZWZpbmUgSU9fVENUWF9SRUZTX0NBQ0hFX05SXHQoMVUgXHUwMDNjXHUwMDNjIDEwKVxuIFxuQEAgLTExMTQsNiAmIzQzOzExMTQsNyBAQCBzdGF0aWMgdm9pZCBpb19mcmVlX2JhdGNoX2xpc3Qoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXG4gXHRcdFx0XHRpb19xdWV1ZV9uZXh0KHJlcSk7XG4gXHRcdFx0aWYgKHVubGlrZWx5KHJlcS1cdTAwM2VmbGFncyBcdTAwMjYgSU9fUkVRX0NMRUFOX0ZMQUdTKSlcbiBcdFx0XHRcdGlvX2NsZWFuX29wKHJlcSk7XG4mIzQzO1x0XHRcdGlvX3JlcV9kcm9wX2RtYWJ1ZihyZXEpO1xuIFx0XHR9XG4gXHRcdGlvX3B1dF9maWxlKHJlcSk7XG4gXHRcdGlvX3JlcV9wdXRfcnNyY19ub2RlcyhyZXEpO1xuZGlmZiAtLWdpdCBhL2lvX3VyaW5nL25ldC5jIGIvaW9fdXJpbmcvbmV0LmNcbmluZGV4IGE3NGQxNWY3YjdkMmIuLjQzOWM5OWFkMTg4NDEgMTAwNjQ0XG4tLS0gYS9pb191cmluZy9uZXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvaW9fdXJpbmcvbmV0LmNcbkBAIC0xNDcxLDcgJiM0MzsxNDcxLDcgQEAgc3RhdGljIGludCBpb19zZ19mcm9tX2l0ZXIoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0cmV0dXJuIHplcm9jb3B5X2ZpbGxfc2tiX2Zyb21faXRlcihza2IsIGZyb20sIGxlbmd0aCk7XG4gXG4gXHRiaS5iaV9zaXplID0gbWluKGZyb20tXHUwMDNlY291bnQsIGxlbmd0aCk7XG4tXHRiaS5iaV9idmVjX2RvbmUgPSBmcm9tLVx1MDAzZWlvdl9vZmZzZXQ7XG4mIzQzO1x0YmkuYmlfb2Zmc2V0ID0gZnJvbS1cdTAwM2Vpb3Zfb2Zmc2V0O1xuIFx0YmkuYmlfaWR4ID0gMDtcbiBcbiBcdHdoaWxlIChiaS5iaV9zaXplIFx1MDAyNlx1MDAyNiBmcmFnIFx1MDAzYyBNQVhfU0tCX0ZSQUdTKSB7XG5AQCAtMTQ5MCw3ICYjNDM7MTQ5MCw3IEBAIHN0YXRpYyBpbnQgaW9fc2dfZnJvbV9pdGVyKHN0cnVjdCBza19idWZmICpza2IsXG4gXHRmcm9tLVx1MDAzZWJ2ZWMgJiM0Mzs9IGJpLmJpX2lkeDtcbiBcdGZyb20tXHUwMDNlbnJfc2VncyAtPSBiaS5iaV9pZHg7XG4gXHRmcm9tLVx1MDAzZWNvdW50IC09IGNvcGllZDtcbi1cdGZyb20tXHUwMDNlaW92X29mZnNldCA9IGJpLmJpX2J2ZWNfZG9uZTtcbiYjNDM7XHRmcm9tLVx1MDAzZWlvdl9vZmZzZXQgPSBiaS5iaV9vZmZzZXQ7XG4gXG4gXHRza2ItXHUwMDNlZGF0YV9sZW4gJiM0Mzs9IGNvcGllZDtcbiBcdHNrYi1cdTAwM2VsZW4gJiM0Mzs9IGNvcGllZDtcbmRpZmYgLS1naXQgYS9pb191cmluZy9yc3JjLmMgYi9pb191cmluZy9yc3JjLmNcbmluZGV4IDhkMGYyZWUyNGUwYzIuLjUwNzRiMWU0YjA1MDUgMTAwNjQ0XG4tLS0gYS9pb191cmluZy9yc3JjLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2lvX3VyaW5nL3JzcmMuY1xuQEAgLTEwLDYgJiM0MzsxMCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY29tcGF0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pb191cmluZy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaW9fdXJpbmcvY21kLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvZG1hLWJ1Zi1pby5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXHUwMDNjdWFwaS9saW51eC9pb191cmluZy5oXHUwMDNlXG4gXG5AQCAtMjgsNyAmIzQzOzI5LDcgQEAgc3RydWN0IGlvX3JzcmNfdXBkYXRlIHtcbiB9O1xuIFxuIHN0YXRpYyBzdHJ1Y3QgaW9fcnNyY19ub2RlICppb19zcWVfYnVmZmVyX3JlZ2lzdGVyKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxuLVx0XHRcdFx0XHRcdCAgIHN0cnVjdCBpb3ZlYyAqaW92KTtcbiYjNDM7XHRcdFx0XHRcdFx0ICAgc3RydWN0IGlvX3VyaW5nX3JlZ2J1Zl9kZXNjICpkZXNjKTtcbiBcbiBzdGF0aWMgaW50IGhwYWdlX2FjY3RfcmVmKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBzdHJ1Y3QgcGFnZSAqaHBhZ2UsXG4gXHRcdFx0ICBib29sICphY2N0X25ldylcbkBAIC04MSw2ICYjNDM7ODIsMTggQEAgc3RhdGljIGJvb2wgaHBhZ2VfYWNjdF91bnJlZihzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgc3RydWN0IHBhZ2UgKmhwYWdlKVxuIFxuICNkZWZpbmUgSU9fQ0FDSEVEX0JWRUNTX1NFR1NcdDMyXG4gXG4mIzQzO3N0YXRpYyB2b2lkIGlvX2lvdl90b19yZWdidWZfZGVzYyhjb25zdCBzdHJ1Y3QgaW92ZWMgKmlvdixcbiYjNDM7XHRcdFx0XHQgIHN0cnVjdCBpb191cmluZ19yZWdidWZfZGVzYyAqZGVzYylcbiYjNDM7e1xuJiM0MztcdCpkZXNjID0gKHN0cnVjdCBpb191cmluZ19yZWdidWZfZGVzYykge1xuJiM0MztcdFx0LnR5cGUgPSBJT19SRUdCVUZfVFlQRV9VQUREUixcbiYjNDM7XHRcdC51YWRkciA9ICh1NjQpKHVpbnRwdHJfdClpb3YtXHUwMDNlaW92X2Jhc2UsXG4mIzQzO1x0XHQuc2l6ZSA9IGlvdi1cdTAwM2Vpb3ZfbGVuLFxuJiM0MztcdH07XG4mIzQzO1x0aWYgKCFkZXNjLVx1MDAzZXVhZGRyKVxuJiM0MztcdFx0ZGVzYy1cdTAwM2V0eXBlID0gSU9fUkVHQlVGX1RZUEVfRU1QVFk7XG4mIzQzO31cbiYjNDM7XG4gaW50IF9faW9fYWNjb3VudF9tZW0oc3RydWN0IHVzZXJfc3RydWN0ICp1c2VyLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgcGFnZV9saW1pdCwgY3VyX3BhZ2VzLCBuZXdfcGFnZXM7XG5AQCAtMzA5LDYgJiM0MzszMjIsOCBAQCBzdGF0aWMgaW50IF9faW9fc3FlX2ZpbGVzX3VwZGF0ZShzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCxcbiBcdFx0cmV0dXJuIC1FTlhJTztcbiBcdGlmICh1cC1cdTAwM2VvZmZzZXQgJiM0MzsgbnJfYXJncyBcdTAwM2UgY3R4LVx1MDAzZWZpbGVfdGFibGUuZGF0YS5ucilcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0aWYgKHVwLVx1MDAzZWZsYWdzKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHRmb3IgKGRvbmUgPSAwOyBkb25lIFx1MDAzYyBucl9hcmdzOyBkb25lJiM0MzsmIzQzOykge1xuIFx0XHR1NjQgdGFnID0gMDtcbkBAIC0zNjgsOSAmIzQzOzM4Myw4IEBAIHN0YXRpYyBpbnQgX19pb19zcWVfYnVmZmVyc191cGRhdGUoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXG4gXHRcdFx0XHQgICBzdHJ1Y3QgaW9fdXJpbmdfcnNyY191cGRhdGUyICp1cCxcbiBcdFx0XHRcdCAgIHVuc2lnbmVkIGludCBucl9hcmdzKVxuIHtcbiYjNDM7XHRib29sIGV4dGVuZGVkID0gdXAtXHUwMDNlZmxhZ3MgXHUwMDI2IElPUklOR19SU1JDX1VQREFURV9FWFRFTkRFRDtcbiBcdHU2NCBfX3VzZXIgKnRhZ3MgPSB1NjRfdG9fdXNlcl9wdHIodXAtXHUwMDNldGFncyk7XG4tXHRzdHJ1Y3QgaW92ZWMgZmFzdF9pb3YsICppb3Y7XG4tXHRzdHJ1Y3QgaW92ZWMgX191c2VyICp1dmVjO1xuIFx0dTY0IHVzZXJfZGF0YSA9IHVwLVx1MDAzZWRhdGE7XG4gXHRfX3UzMiBkb25lO1xuIFx0aW50IGksIGVycjtcbkBAIC0zNzksMjYgJiM0MzszOTMsNDkgQEAgc3RhdGljIGludCBfX2lvX3NxZV9idWZmZXJzX3VwZGF0ZShzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCxcbiBcdFx0cmV0dXJuIC1FTlhJTztcbiBcdGlmICh1cC1cdTAwM2VvZmZzZXQgJiM0MzsgbnJfYXJncyBcdTAwM2UgY3R4LVx1MDAzZWJ1Zl90YWJsZS5ucilcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0aWYgKHVwLVx1MDAzZWZsYWdzIFx1MDAyNiB+SU9SSU5HX1JTUkNfVVBEQVRFX0VYVEVOREVEKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHRmb3IgKGRvbmUgPSAwOyBkb25lIFx1MDAzYyBucl9hcmdzOyBkb25lJiM0MzsmIzQzOykge1xuJiM0MztcdFx0c3RydWN0IGlvX3VyaW5nX3JlZ2J1Zl9kZXNjIGRlc2M7XG4gXHRcdHN0cnVjdCBpb19yc3JjX25vZGUgKm5vZGU7XG4gXHRcdHU2NCB0YWcgPSAwO1xuIFxuLVx0XHR1dmVjID0gdTY0X3RvX3VzZXJfcHRyKHVzZXJfZGF0YSk7XG4tXHRcdGlvdiA9IGlvdmVjX2Zyb21fdXNlcih1dmVjLCAxLCAxLCBcdTAwMjZmYXN0X2lvdiwgaW9faXNfY29tcGF0KGN0eCkpO1xuLVx0XHRpZiAoSVNfRVJSKGlvdikpIHtcbi1cdFx0XHRlcnIgPSBQVFJfRVJSKGlvdik7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdH1cbiBcdFx0aWYgKHRhZ3MgXHUwMDI2XHUwMDI2IGNvcHlfZnJvbV91c2VyKFx1MDAyNnRhZywgXHUwMDI2dGFnc1tkb25lXSwgc2l6ZW9mKHRhZykpKSB7XG4gXHRcdFx0ZXJyID0gLUVGQVVMVDtcbiBcdFx0XHRicmVhaztcbiBcdFx0fVxuLVx0XHRub2RlID0gaW9fc3FlX2J1ZmZlcl9yZWdpc3RlcihjdHgsIGlvdik7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGV4dGVuZGVkKSB7XG4mIzQzO1x0XHRcdGlmIChjb3B5X2Zyb21fdXNlcihcdTAwMjZkZXNjLCB1NjRfdG9fdXNlcl9wdHIodXNlcl9kYXRhKSxcbiYjNDM7XHRcdFx0XHRcdCAgIHNpemVvZihkZXNjKSkpIHtcbiYjNDM7XHRcdFx0XHRlcnIgPSAtRUZBVUxUO1xuJiM0MztcdFx0XHRcdGJyZWFrO1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHRcdHVzZXJfZGF0YSAmIzQzOz0gc2l6ZW9mKGRlc2MpO1xuJiM0MztcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0c3RydWN0IGlvdmVjIF9fdXNlciAqdXZlYyA9IHU2NF90b191c2VyX3B0cih1c2VyX2RhdGEpO1xuJiM0MztcdFx0XHRzdHJ1Y3QgaW92ZWMgZmFzdF9pb3YsICppb3Y7XG4mIzQzO1xuJiM0MztcdFx0XHRpZiAoaW9faXNfY29tcGF0KGN0eCkpXG4mIzQzO1x0XHRcdFx0dXNlcl9kYXRhICYjNDM7PSBzaXplb2Yoc3RydWN0IGNvbXBhdF9pb3ZlYyk7XG4mIzQzO1x0XHRcdGVsc2VcbiYjNDM7XHRcdFx0XHR1c2VyX2RhdGEgJiM0Mzs9IHNpemVvZihzdHJ1Y3QgaW92ZWMpO1xuJiM0MztcbiYjNDM7XHRcdFx0aW92ID0gaW92ZWNfZnJvbV91c2VyKHV2ZWMsIDEsIDEsIFx1MDAyNmZhc3RfaW92LCBpb19pc19jb21wYXQoY3R4KSk7XG4mIzQzO1x0XHRcdGlmIChJU19FUlIoaW92KSkge1xuJiM0MztcdFx0XHRcdGVyciA9IFBUUl9FUlIoaW92KTtcbiYjNDM7XHRcdFx0XHRicmVhaztcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0XHRpb19pb3ZfdG9fcmVnYnVmX2Rlc2MoaW92LCBcdTAwMjZkZXNjKTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRub2RlID0gaW9fc3FlX2J1ZmZlcl9yZWdpc3RlcihjdHgsIFx1MDAyNmRlc2MpO1xuIFx0XHRpZiAoSVNfRVJSKG5vZGUpKSB7XG4gXHRcdFx0ZXJyID0gUFRSX0VSUihub2RlKTtcbiBcdFx0XHRicmVhaztcbiBcdFx0fVxuJiM0MztcbiBcdFx0aWYgKHRhZykge1xuIFx0XHRcdGlmICghbm9kZSkge1xuIFx0XHRcdFx0ZXJyID0gLUVJTlZBTDtcbkBAIC00MDksMTAgJiM0Mzs0NDYsNiBAQCBzdGF0aWMgaW50IF9faW9fc3FlX2J1ZmZlcnNfdXBkYXRlKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxuIFx0XHRpID0gYXJyYXlfaW5kZXhfbm9zcGVjKHVwLVx1MDAzZW9mZnNldCAmIzQzOyBkb25lLCBjdHgtXHUwMDNlYnVmX3RhYmxlLm5yKTtcbiBcdFx0aW9fcmVzZXRfcnNyY19ub2RlKGN0eCwgXHUwMDI2Y3R4LVx1MDAzZWJ1Zl90YWJsZSwgaSk7XG4gXHRcdGN0eC1cdTAwM2VidWZfdGFibGUubm9kZXNbaV0gPSBub2RlO1xuLVx0XHRpZiAoaW9faXNfY29tcGF0KGN0eCkpXG4tXHRcdFx0dXNlcl9kYXRhICYjNDM7PSBzaXplb2Yoc3RydWN0IGNvbXBhdF9pb3ZlYyk7XG4tXHRcdGVsc2Vcbi1cdFx0XHR1c2VyX2RhdGEgJiM0Mzs9IHNpemVvZihzdHJ1Y3QgaW92ZWMpO1xuIFx0fVxuIFx0cmV0dXJuIGRvbmUgPyBkb25lIDogZXJyO1xuIH1cbkBAIC00NDcsNyAmIzQzOzQ4MCw3IEBAIGludCBpb19yZWdpc3Rlcl9maWxlc191cGRhdGUoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHZvaWQgX191c2VyICphcmcsXG4gXHRtZW1zZXQoXHUwMDI2dXAsIDAsIHNpemVvZih1cCkpO1xuIFx0aWYgKGNvcHlfZnJvbV91c2VyKFx1MDAyNnVwLCBhcmcsIHNpemVvZihzdHJ1Y3QgaW9fdXJpbmdfcnNyY191cGRhdGUpKSlcbiBcdFx0cmV0dXJuIC1FRkFVTFQ7XG4tXHRpZiAodXAucmVzdiB8fCB1cC5yZXN2MilcbiYjNDM7XHRpZiAodXAucmVzdjIpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0cmV0dXJuIF9faW9fcmVnaXN0ZXJfcnNyY191cGRhdGUoY3R4LCBJT1JJTkdfUlNSQ19GSUxFLCBcdTAwMjZ1cCwgbnJfYXJncyk7XG4gfVxuQEAgLTQ2MSw3ICYjNDM7NDk0LDcgQEAgaW50IGlvX3JlZ2lzdGVyX3JzcmNfdXBkYXRlKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCB2b2lkIF9fdXNlciAqYXJnLFxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdGlmIChjb3B5X2Zyb21fdXNlcihcdTAwMjZ1cCwgYXJnLCBzaXplb2YodXApKSlcbiBcdFx0cmV0dXJuIC1FRkFVTFQ7XG4tXHRpZiAoIXVwLm5yIHx8IHVwLnJlc3YgfHwgdXAucmVzdjIpXG4mIzQzO1x0aWYgKCF1cC5uciB8fCB1cC5yZXN2MilcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRyZXR1cm4gX19pb19yZWdpc3Rlcl9yc3JjX3VwZGF0ZShjdHgsIHR5cGUsIFx1MDAyNnVwLCB1cC5ucik7XG4gfVxuQEAgLTU2MSwxMiAmIzQzOzU5NCw5IEBAIGludCBpb19maWxlc191cGRhdGUoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcbiBcdHN0cnVjdCBpb191cmluZ19yc3JjX3VwZGF0ZTIgdXAyO1xuIFx0aW50IHJldDtcbiBcbiYjNDM7XHRtZW1zZXQoXHUwMDI2dXAyLCAwLCBzaXplb2YodXAyKSk7XG4gXHR1cDIub2Zmc2V0ID0gdXAtXHUwMDNlb2Zmc2V0O1xuIFx0dXAyLmRhdGEgPSB1cC1cdTAwM2Vhcmc7XG4tXHR1cDIubnIgPSAwO1xuLVx0dXAyLnRhZ3MgPSAwO1xuLVx0dXAyLnJlc3YgPSAwO1xuLVx0dXAyLnJlc3YyID0gMDtcbiBcbiBcdGlmICh1cC1cdTAwM2VvZmZzZXQgPT0gSU9SSU5HX0ZJTEVfSU5ERVhfQUxMT0MpIHtcbiBcdFx0cmV0ID0gaW9fZmlsZXNfdXBkYXRlX3dpdGhfaW5kZXhfYWxsb2MocmVxLCBpc3N1ZV9mbGFncyk7XG5AQCAtODUyLDI3ICYjNDM7ODgyLDEyNiBAQCBib29sIGlvX2NoZWNrX2NvYWxlc2NlX2J1ZmZlcihzdHJ1Y3QgcGFnZSAqKnBhZ2VfYXJyYXksIGludCBucl9wYWdlcyxcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbiYjNDM7c3RydWN0IGlvX3JlZ2J1Zl9kbWEge1xuJiM0MztcdHN0cnVjdCBkbWFfYnVmX2lvX2N0eFx0XHRjdHg7XG4mIzQzO1x0c3RydWN0IGZpbGVcdFx0XHQqdGFyZ2V0X2ZpbGU7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBpb19yZWxlYXNlX3JlZ19kbWFidWYodm9pZCAqcHJpdilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBpb19yZWdidWZfZG1hICpkYiA9IHByaXY7XG4mIzQzO1xuJiM0MztcdGZwdXQoZGItXHUwMDNldGFyZ2V0X2ZpbGUpO1xuJiM0MztcdGRtYV9idWZfaW9fY3R4X3JlbGVhc2UoXHUwMDI2ZGItXHUwMDNlY3R4KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHN0cnVjdCBpb19yc3JjX25vZGUgKmlvX3JlZ2lzdGVyX2RtYWJ1ZihzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCxcbiYjNDM7XHRcdFx0XHRcdFx0c3RydWN0IGlvX3VyaW5nX3JlZ2J1Zl9kZXNjICpkZXNjKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGlvX3JzcmNfbm9kZSAqbm9kZSA9IE5VTEw7XG4mIzQzO1x0c3RydWN0IGlvX21hcHBlZF91YnVmICppbXUgPSBOVUxMO1xuJiM0MztcdHN0cnVjdCBpb19yZWdidWZfZG1hICpyZWdidWYgPSBOVUxMO1xuJiM0MztcdHN0cnVjdCBmaWxlICp0YXJnZXRfZmlsZSA9IE5VTEw7XG4mIzQzO1x0c3RydWN0IGRtYV9idWYgKmRtYWJ1ZiA9IE5VTEw7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFJU19FTkFCTEVEKENPTkZJR19ETUFfU0hBUkVEX0JVRkZFUikpXG4mIzQzO1x0XHRyZXR1cm4gRVJSX1BUUigtRU9QTk9UU1VQUCk7XG4mIzQzO1x0aWYgKGN0eC1cdTAwM2VmbGFncyBcdTAwMjYgSU9SSU5HX1NFVFVQX0lPUE9MTClcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKC1FT1BOT1RTVVBQKTtcbiYjNDM7XHRpZiAoZGVzYy1cdTAwM2V1YWRkciB8fCBkZXNjLVx1MDAzZXNpemUpXG4mIzQzO1x0XHRyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gLUVOT01FTTtcbiYjNDM7XHRub2RlID0gaW9fcnNyY19ub2RlX2FsbG9jKGN0eCwgSU9SSU5HX1JTUkNfQlVGRkVSKTtcbiYjNDM7XHRpZiAoIW5vZGUpXG4mIzQzO1x0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbiYjNDM7XHRpbXUgPSBpb19hbGxvY19pbXUoY3R4LCAwKTtcbiYjNDM7XHRpZiAoIWltdSlcbiYjNDM7XHRcdGdvdG8gZXJyO1xuJiM0MztcdHJlZ2J1ZiA9IGt6YWxsb2Moc2l6ZW9mKCpyZWdidWYpLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRpZiAoIXJlZ2J1ZilcbiYjNDM7XHRcdGdvdG8gZXJyO1xuJiM0MztcbiYjNDM7XHRyZXQgPSAtRUJBREY7XG4mIzQzO1x0dGFyZ2V0X2ZpbGUgPSBmZ2V0KGRlc2MtXHUwMDNldGFyZ2V0X2ZkKTtcbiYjNDM7XHRpZiAoIXRhcmdldF9maWxlKVxuJiM0MztcdFx0Z290byBlcnI7XG4mIzQzO1xuJiM0MztcdGRtYWJ1ZiA9IGRtYV9idWZfZ2V0KGRlc2MtXHUwMDNlZG1hYnVmX2ZkKTtcbiYjNDM7XHRpZiAoSVNfRVJSKGRtYWJ1ZikpIHtcbiYjNDM7XHRcdHJldCA9IFBUUl9FUlIoZG1hYnVmKTtcbiYjNDM7XHRcdGRtYWJ1ZiA9IE5VTEw7XG4mIzQzO1x0XHRnb3RvIGVycjtcbiYjNDM7XHR9XG4mIzQzO1x0aWYgKGRtYWJ1Zi1cdTAwM2VzaXplIFx1MDAzZSBTWl8xRykge1xuJiM0MztcdFx0cmV0ID0gLUVJTlZBTDtcbiYjNDM7XHRcdGdvdG8gZXJyO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0ID0gZG1hX2J1Zl9pb19jdHhfY3JlYXRlKHRhcmdldF9maWxlLCBcdTAwMjZyZWdidWYtXHUwMDNlY3R4LCBkbWFidWYsXG4mIzQzO1x0XHRcdFx0ICAgIERNQV9CSURJUkVDVElPTkFMKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBlcnI7XG4mIzQzO1xuJiM0MztcdHJlZ2J1Zi1cdTAwM2V0YXJnZXRfZmlsZSA9IHRhcmdldF9maWxlO1xuJiM0MztcdGltdS1cdTAwM2Vucl9idmVjcyA9IDA7XG4mIzQzO1x0aW11LVx1MDAzZXVidWYgPSAwO1xuJiM0MztcdGltdS1cdTAwM2VsZW4gPSBkbWFidWYtXHUwMDNlc2l6ZTtcbiYjNDM7XHRpbXUtXHUwMDNlZm9saW9fc2hpZnQgPSAwO1xuJiM0MztcdGltdS1cdTAwM2VyZWxlYXNlID0gaW9fcmVsZWFzZV9yZWdfZG1hYnVmO1xuJiM0MztcdGltdS1cdTAwM2Vwcml2ID0gcmVnYnVmO1xuJiM0MztcdGltdS1cdTAwM2VmbGFncyA9IElPX1JFR0JVRl9GX0RNQUJVRjtcbiYjNDM7XHRpbXUtXHUwMDNlZGlyID0gSU9fSU1VX0RFU1QgfCBJT19JTVVfU09VUkNFO1xuJiM0MztcdHJlZmNvdW50X3NldChcdTAwMjZpbXUtXHUwMDNlcmVmcywgMSk7XG4mIzQzO1x0bm9kZS1cdTAwM2VidWYgPSBpbXU7XG4mIzQzO1x0ZG1hX2J1Zl9wdXQoZG1hYnVmKTtcbiYjNDM7XHRyZXR1cm4gbm9kZTtcbiYjNDM7ZXJyOlxuJiM0MztcdGtmcmVlKHJlZ2J1Zik7XG4mIzQzO1x0aWYgKGltdSlcbiYjNDM7XHRcdGlvX2ZyZWVfaW11KGN0eCwgaW11KTtcbiYjNDM7XHRpZiAobm9kZSlcbiYjNDM7XHRcdGlvX2NhY2hlX2ZyZWUoXHUwMDI2Y3R4LVx1MDAzZW5vZGVfY2FjaGUsIG5vZGUpO1xuJiM0MztcdGlmICh0YXJnZXRfZmlsZSlcbiYjNDM7XHRcdGZwdXQodGFyZ2V0X2ZpbGUpO1xuJiM0MztcdGlmIChkbWFidWYpXG4mIzQzO1x0XHRkbWFfYnVmX3B1dChkbWFidWYpO1xuJiM0MztcdHJldHVybiBFUlJfUFRSKHJldCk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHN0cnVjdCBpb19yc3JjX25vZGUgKmlvX3NxZV9idWZmZXJfcmVnaXN0ZXIoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXG4tXHRcdFx0XHRcdFx0ICAgc3RydWN0IGlvdmVjICppb3YpXG4mIzQzO1x0XHRcdFx0XHRcdCAgIHN0cnVjdCBpb191cmluZ19yZWdidWZfZGVzYyAqZGVzYylcbiB7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyB1YWRkciA9ICh1bnNpZ25lZCBsb25nKWRlc2MtXHUwMDNldWFkZHI7XG4mIzQzO1x0c2l6ZV90IHNpemUgPSBkZXNjLVx1MDAzZXNpemU7XG4gXHRzdHJ1Y3QgaW9fbWFwcGVkX3VidWYgKmltdSA9IE5VTEw7XG4gXHRzdHJ1Y3QgcGFnZSAqKnBhZ2VzID0gTlVMTDtcbiBcdHN0cnVjdCBpb19yc3JjX25vZGUgKm5vZGU7XG4gXHR1bnNpZ25lZCBsb25nIG9mZjtcbi1cdHNpemVfdCBzaXplO1xuIFx0aW50IHJldCwgbnJfcGFnZXMsIGk7XG4gXHRzdHJ1Y3QgaW9faW11X2ZvbGlvX2RhdGEgZGF0YTtcbiBcdGJvb2wgY29hbGVzY2VkID0gZmFsc2U7XG4gXG4tXHRpZiAoIWlvdi1cdTAwM2Vpb3ZfYmFzZSkge1xuLVx0XHRpZiAoaW92LVx1MDAzZWlvdl9sZW4pXG4mIzQzO1x0aWYgKGRlc2MtXHUwMDNldHlwZSBcdTAwM2U9IF9fSU9fUkVHQlVGX1RZUEVfTUFYKVxuJiM0MztcdFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XG4mIzQzO1x0aWYgKCFtZW1faXNfemVybyhcdTAwMjZkZXNjLVx1MDAzZV9fcmVzdiwgc2l6ZW9mKGRlc2MtXHUwMDNlX19yZXN2KSkgfHwgZGVzYy1cdTAwM2VmbGFncylcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xuJiM0MztcbiYjNDM7XHRpZiAoZGVzYy1cdTAwM2V0eXBlID09IElPX1JFR0JVRl9UWVBFX0RNQUJVRilcbiYjNDM7XHRcdHJldHVybiBpb19yZWdpc3Rlcl9kbWFidWYoY3R4LCBkZXNjKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGRlc2MtXHUwMDNlZG1hYnVmX2ZkIHx8IGRlc2MtXHUwMDNldGFyZ2V0X2ZkKVxuJiM0MztcdFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XG4mIzQzO1xuJiM0MztcdGlmIChkZXNjLVx1MDAzZXR5cGUgPT0gSU9fUkVHQlVGX1RZUEVfRU1QVFkpIHtcbiYjNDM7XHRcdGlmICh1YWRkciB8fCBzaXplKVxuIFx0XHRcdHJldHVybiBFUlJfUFRSKC1FRkFVTFQpO1xuIFx0XHQvKiByZW1vdmUgdGhlIGJ1ZmZlciB3aXRob3V0IGluc3RhbGxpbmcgYSBuZXcgb25lICovXG4gXHRcdHJldHVybiBOVUxMO1xuIFx0fVxuIFxuLVx0cmV0ID0gaW9fdmFsaWRhdGVfdXNlcl9idWZfcmFuZ2UoKHVuc2lnbmVkIGxvbmcpaW92LVx1MDAzZWlvdl9iYXNlLFxuLVx0XHRcdFx0XHQgaW92LVx1MDAzZWlvdl9sZW4pO1xuJiM0MztcdHJldCA9IGlvX3ZhbGlkYXRlX3VzZXJfYnVmX3JhbmdlKHVhZGRyLCBzaXplKTtcbiBcdGlmIChyZXQpXG4gXHRcdHJldHVybiBFUlJfUFRSKHJldCk7XG4gXG5AQCAtODgxLDggJiM0MzsxMDEwLDcgQEAgc3RhdGljIHN0cnVjdCBpb19yc3JjX25vZGUgKmlvX3NxZV9idWZmZXJfcmVnaXN0ZXIoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXG4gXHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuIFxuIFx0cmV0ID0gLUVOT01FTTtcbi1cdHBhZ2VzID0gaW9fcGluX3BhZ2VzKCh1bnNpZ25lZCBsb25nKSBpb3YtXHUwMDNlaW92X2Jhc2UsIGlvdi1cdTAwM2Vpb3ZfbGVuLFxuLVx0XHRcdFx0XHUwMDI2bnJfcGFnZXMpO1xuJiM0MztcdHBhZ2VzID0gaW9fcGluX3BhZ2VzKHVhZGRyLCBzaXplLCBcdTAwMjZucl9wYWdlcyk7XG4gXHRpZiAoSVNfRVJSKHBhZ2VzKSkge1xuIFx0XHRyZXQgPSBQVFJfRVJSKHBhZ2VzKTtcbiBcdFx0cGFnZXMgPSBOVUxMO1xuQEAgLTkwNCwxMCAmIzQzOzEwMzIsOSBAQCBzdGF0aWMgc3RydWN0IGlvX3JzcmNfbm9kZSAqaW9fc3FlX2J1ZmZlcl9yZWdpc3RlcihzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCxcbiBcdGlmIChyZXQpXG4gXHRcdGdvdG8gZG9uZTtcbiBcbi1cdHNpemUgPSBpb3YtXHUwMDNlaW92X2xlbjtcbiBcdC8qIHN0b3JlIG9yaWdpbmFsIGFkZHJlc3MgZm9yIGxhdGVyIHZlcmlmaWNhdGlvbiAqL1xuLVx0aW11LVx1MDAzZXVidWYgPSAodW5zaWduZWQgbG9uZykgaW92LVx1MDAzZWlvdl9iYXNlO1xuLVx0aW11LVx1MDAzZWxlbiA9IGlvdi1cdTAwM2Vpb3ZfbGVuO1xuJiM0MztcdGltdS1cdTAwM2V1YnVmID0gdWFkZHI7XG4mIzQzO1x0aW11LVx1MDAzZWxlbiA9IHNpemU7XG4gXHRpbXUtXHUwMDNlZm9saW9fc2hpZnQgPSBQQUdFX1NISUZUO1xuIFx0aW11LVx1MDAzZXJlbGVhc2UgPSBpb19yZWxlYXNlX3VidWY7XG4gXHRpbXUtXHUwMDNlcHJpdiA9IGltdTtcbkBAIC05MTcsNyAmIzQzOzEwNDQsNyBAQCBzdGF0aWMgc3RydWN0IGlvX3JzcmNfbm9kZSAqaW9fc3FlX2J1ZmZlcl9yZWdpc3RlcihzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCxcbiBcdFx0aW11LVx1MDAzZWZvbGlvX3NoaWZ0ID0gZGF0YS5mb2xpb19zaGlmdDtcbiBcdHJlZmNvdW50X3NldChcdTAwMjZpbXUtXHUwMDNlcmVmcywgMSk7XG4gXG4tXHRvZmYgPSAodW5zaWduZWQgbG9uZylpb3YtXHUwMDNlaW92X2Jhc2UgXHUwMDI2IH5QQUdFX01BU0s7XG4mIzQzO1x0b2ZmID0gdWFkZHIgXHUwMDI2IH5QQUdFX01BU0s7XG4gXHRpZiAoY29hbGVzY2VkKVxuIFx0XHRvZmYgJiM0Mzs9IGRhdGEuZmlyc3RfZm9saW9fcGFnZV9pZHggXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQ7XG4gXG5AQCAtOTY5LDYgJiM0MzsxMDk2LDcgQEAgaW50IGlvX3NxZV9idWZmZXJzX3JlZ2lzdGVyKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCB2b2lkIF9fdXNlciAqYXJnLFxuIFx0XHRtZW1zZXQoaW92LCAwLCBzaXplb2YoKmlvdikpO1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfYXJnczsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHN0cnVjdCBpb191cmluZ19yZWdidWZfZGVzYyBkZXNjO1xuIFx0XHRzdHJ1Y3QgaW9fcnNyY19ub2RlICpub2RlO1xuIFx0XHR1NjQgdGFnID0gMDtcbiBcbkBAIC05OTIsNyAmIzQzOzExMjAsOCBAQCBpbnQgaW9fc3FlX2J1ZmZlcnNfcmVnaXN0ZXIoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHZvaWQgX191c2VyICphcmcsXG4gXHRcdFx0fVxuIFx0XHR9XG4gXG4tXHRcdG5vZGUgPSBpb19zcWVfYnVmZmVyX3JlZ2lzdGVyKGN0eCwgaW92KTtcbiYjNDM7XHRcdGlvX2lvdl90b19yZWdidWZfZGVzYyhpb3YsIFx1MDAyNmRlc2MpO1xuJiM0MztcdFx0bm9kZSA9IGlvX3NxZV9idWZmZXJfcmVnaXN0ZXIoY3R4LCBcdTAwMjZkZXNjKTtcbiBcdFx0aWYgKElTX0VSUihub2RlKSkge1xuIFx0XHRcdHJldCA9IFBUUl9FUlIobm9kZSk7XG4gXHRcdFx0YnJlYWs7XG5AQCAtMTEzNiw5ICYjNDM7MTI2NSw2NCBAQCBzdGF0aWMgaW50IGlvX2ltcG9ydF9rYnVmKGludCBkZGlyLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGludCBpb19pbXBvcnRfZml4ZWQoaW50IGRkaXIsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbiYjNDM7dm9pZCBpb19kcm9wX2RtYWJ1Zl9ub2RlKHN0cnVjdCBpb19raW9jYiAqcmVxKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGlvX21hcHBlZF91YnVmICppbXU7XG4mIzQzO1xuJiM0MztcdGlmICghSVNfRU5BQkxFRChDT05GSUdfRE1BX1NIQVJFRF9CVUZGRVIpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdGlmIChXQVJOX09OX09OQ0UocmVxLVx1MDAzZWJ1Zl9ub2RlLVx1MDAzZXR5cGUgIT0gSU9SSU5HX1JTUkNfQlVGRkVSKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHRpbXUgPSByZXEtXHUwMDNlYnVmX25vZGUtXHUwMDNlYnVmO1xuJiM0MztcdGlmIChXQVJOX09OX09OQ0UoIShpbXUtXHUwMDNlZmxhZ3MgXHUwMDI2IElPX1JFR0JVRl9GX0RNQUJVRikpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdGRtYV9idWZfaW9fbWFwX2Ryb3AocmVxLVx1MDAzZWRtYWJ1Zl9tYXApO1xuJiM0MztcdHJlcS1cdTAwM2VmbGFncyBcdTAwMjY9IH5SRVFfRl9EUk9QX0RNQUJVRjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBpb19pbXBvcnRfZG1hYnVmKHN0cnVjdCBpb19raW9jYiAqcmVxLFxuJiM0MztcdFx0XHQgICBpbnQgZGRpciwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuJiM0MztcdFx0XHQgICBzdHJ1Y3QgaW9fbWFwcGVkX3VidWYgKmltdSxcbiYjNDM7XHRcdFx0ICAgc2l6ZV90IGxlbiwgc2l6ZV90IG9mZnNldCxcbiYjNDM7XHRcdFx0ICAgdW5zaWduZWQgaXNzdWVfZmxhZ3MpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaW9fcmVnYnVmX2RtYSAqZGIgPSBpbXUtXHUwMDNlcHJpdjtcbiYjNDM7XHRzdHJ1Y3QgZG1hX2J1Zl9pb19tYXAgKm1hcDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFJU19FTkFCTEVEKENPTkZJR19ETUFfU0hBUkVEX0JVRkZFUikpXG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1x0aWYgKCFsZW4pXG4mIzQzO1x0XHRyZXR1cm4gLUVGQVVMVDtcbiYjNDM7XHRpZiAocmVxLVx1MDAzZWZpbGUgIT0gZGItXHUwMDNldGFyZ2V0X2ZpbGUpXG4mIzQzO1x0XHRyZXR1cm4gLUVCQURGO1xuJiM0MztcbiYjNDM7XHRpZiAocmVxLVx1MDAzZWZsYWdzIFx1MDAyNiBSRVFfRl9EUk9QX0RNQUJVRikge1xuJiM0MztcdFx0bWFwID0gcmVxLVx1MDAzZWRtYWJ1Zl9tYXA7XG4mIzQzO1x0XHRnb3RvIGluaXRfaXRlcjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdG1hcCA9IGRtYV9idWZfaW9fZ2V0X21hcChcdTAwMjZkYi1cdTAwM2VjdHgpO1xuJiM0MztcdGlmICh1bmxpa2VseSghbWFwKSkge1xuJiM0MztcdFx0aWYgKCEoaXNzdWVfZmxhZ3MgXHUwMDI2IElPX1VSSU5HX0ZfSU9XUSkpXG4mIzQzO1x0XHRcdHJldHVybiAtRUFHQUlOO1xuJiM0MztcdFx0bWFwID0gZG1hX2J1Zl9pb19jcmVhdGVfbWFwKFx1MDAyNmRiLVx1MDAzZWN0eCk7XG4mIzQzO1x0XHRpZiAoSVNfRVJSKG1hcCkpXG4mIzQzO1x0XHRcdHJldHVybiBQVFJfRVJSKG1hcCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXEtXHUwMDNlZG1hYnVmX21hcCA9IG1hcDtcbiYjNDM7XHRyZXEtXHUwMDNlZmxhZ3MgfD0gUkVRX0ZfRFJPUF9ETUFCVUY7XG4mIzQzO2luaXRfaXRlcjpcbiYjNDM7XHRpb3ZfaXRlcl9kbWFidWZfbWFwKGl0ZXIsIGRkaXIsIG1hcCwgb2Zmc2V0LCBsZW4pO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGlvX2ltcG9ydF9maXhlZChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSxcbiYjNDM7XHRcdFx0ICAgaW50IGRkaXIsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbiBcdFx0XHQgICBzdHJ1Y3QgaW9fbWFwcGVkX3VidWYgKmltdSxcbi1cdFx0XHQgICB1NjQgYnVmX2FkZHIsIHNpemVfdCBsZW4pXG4mIzQzO1x0XHRcdCAgIHU2NCBidWZfYWRkciwgc2l6ZV90IGxlbixcbiYjNDM7XHRcdFx0ICAgdW5zaWduZWQgaXNzdWVfZmxhZ3MsXG4mIzQzO1x0XHRcdCAgIHVuc2lnbmVkIGltcG9ydF9mbGFncylcbiB7XG4gXHRjb25zdCBzdHJ1Y3QgYmlvX3ZlYyAqYnZlYztcbiBcdHNpemVfdCBmb2xpb19tYXNrO1xuQEAgLTExNTgsNiAmIzQzOzEzNDIsMTIgQEAgc3RhdGljIGludCBpb19pbXBvcnRfZml4ZWQoaW50IGRkaXIsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbiBcbiBcdG9mZnNldCA9IGJ1Zl9hZGRyIC0gaW11LVx1MDAzZXVidWY7XG4gXG4mIzQzO1x0aWYgKGltdS1cdTAwM2VmbGFncyBcdTAwMjYgSU9fUkVHQlVGX0ZfRE1BQlVGKSB7XG4mIzQzO1x0XHRpZiAoIShpbXBvcnRfZmxhZ3MgXHUwMDI2IElPX1JFR0JVRl9JTVBPUlRfQUxMT1dfRE1BQlVGKSlcbiYjNDM7XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4mIzQzO1x0XHRyZXR1cm4gaW9faW1wb3J0X2RtYWJ1ZihyZXEsIGRkaXIsIGl0ZXIsIGltdSwgbGVuLCBvZmZzZXQsXG4mIzQzO1x0XHRcdFx0XHRpc3N1ZV9mbGFncyk7XG4mIzQzO1x0fVxuIFx0aWYgKGltdS1cdTAwM2VmbGFncyBcdTAwMjYgSU9fUkVHQlVGX0ZfS0JVRilcbiBcdFx0cmV0dXJuIGlvX2ltcG9ydF9rYnVmKGRkaXIsIGl0ZXIsIGltdSwgbGVuLCBvZmZzZXQpO1xuIFxuQEAgLTEyMTEsMTYgJiM0MzsxNDAxLDE3IEBAIGlubGluZSBzdHJ1Y3QgaW9fcnNyY19ub2RlICppb19maW5kX2J1Zl9ub2RlKHN0cnVjdCBpb19raW9jYiAqcmVxLFxuIFx0cmV0dXJuIE5VTEw7XG4gfVxuIFxuLWludCBpb19pbXBvcnRfcmVnX2J1ZihzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuJiM0MztpbnQgX19pb19pbXBvcnRfcmVnX2J1ZihzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuIFx0XHRcdHU2NCBidWZfYWRkciwgc2l6ZV90IGxlbiwgaW50IGRkaXIsXG4tXHRcdFx0dW5zaWduZWQgaXNzdWVfZmxhZ3MpXG4mIzQzO1x0XHRcdHVuc2lnbmVkIGlzc3VlX2ZsYWdzLCB1bnNpZ25lZCBpbXBvcnRfZmxhZ3MpXG4ge1xuIFx0c3RydWN0IGlvX3JzcmNfbm9kZSAqbm9kZTtcbiBcbiBcdG5vZGUgPSBpb19maW5kX2J1Zl9ub2RlKHJlcSwgaXNzdWVfZmxhZ3MpO1xuIFx0aWYgKCFub2RlKVxuIFx0XHRyZXR1cm4gLUVGQVVMVDtcbi1cdHJldHVybiBpb19pbXBvcnRfZml4ZWQoZGRpciwgaXRlciwgbm9kZS1cdTAwM2VidWYsIGJ1Zl9hZGRyLCBsZW4pO1xuJiM0MztcdHJldHVybiBpb19pbXBvcnRfZml4ZWQocmVxLCBkZGlyLCBpdGVyLCBub2RlLVx1MDAzZWJ1ZiwgYnVmX2FkZHIsIGxlbixcbiYjNDM7XHRcdFx0XHRpc3N1ZV9mbGFncywgaW1wb3J0X2ZsYWdzKTtcbiB9XG4gXG4gc3RhdGljIGludCBpb19idWZmZXJfYWNjdF9jbG9uZWRfaHBhZ2VzKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxuQEAgLTEzNDcsNiAmIzQzOzE1MzgsMTEgQEAgc3RhdGljIGludCBpb19jbG9uZV9idWZmZXJzKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBzdHJ1Y3QgaW9fcmluZ19jdHggKnNyY19jdHhcbiBcdFx0aWYgKCFzcmNfbm9kZSkge1xuIFx0XHRcdGRzdF9ub2RlID0gTlVMTDtcbiBcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0aWYgKHNyY19ub2RlLVx1MDAzZWJ1Zi1cdTAwM2VmbGFncyBcdTAwMjYgSU9fUkVHQlVGX0ZfVU5DTE9ORUFCTEUpIHtcbiYjNDM7XHRcdFx0XHRpb19yc3JjX2RhdGFfZnJlZShjdHgsIFx1MDAyNmRhdGEpO1xuJiM0MztcdFx0XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcdFx0XHR9XG4mIzQzO1xuIFx0XHRcdGRzdF9ub2RlID0gaW9fcnNyY19ub2RlX2FsbG9jKGN0eCwgSU9SSU5HX1JTUkNfQlVGRkVSKTtcbiBcdFx0XHRpZiAoIWRzdF9ub2RlKSB7XG4gXHRcdFx0XHRpb19yc3JjX2RhdGFfZnJlZShjdHgsIFx1MDAyNmRhdGEpO1xuQEAgLTE2MTcsOSAmIzQzOzE4MTMsOSBAQCBzdGF0aWMgaW50IGlvX2tlcm5fYnZlY19zaXplKHN0cnVjdCBpb3ZlYyAqaW92LCB1bnNpZ25lZCBucl9pb3ZzLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLWludCBpb19pbXBvcnRfcmVnX3ZlYyhpbnQgZGRpciwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuJiM0MztpbnQgX19pb19pbXBvcnRfcmVnX3ZlYyhpbnQgZGRpciwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuIFx0XHRcdHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgaW91X3ZlYyAqdmVjLFxuLVx0XHRcdHVuc2lnbmVkIG5yX2lvdnMsIHVuc2lnbmVkIGlzc3VlX2ZsYWdzKVxuJiM0MztcdFx0XHR1bnNpZ25lZCBucl9pb3ZzLCB1bnNpZ25lZCBpc3N1ZV9mbGFncywgdW5zaWduZWQgaW1wb3J0X2ZsYWdzKVxuIHtcbiBcdHN0cnVjdCBpb19yc3JjX25vZGUgKm5vZGU7XG4gXHRzdHJ1Y3QgaW9fbWFwcGVkX3VidWYgKmltdTtcbkBAIC0xNjM3LDcgJiM0MzsxODMzLDkgQEAgaW50IGlvX2ltcG9ydF9yZWdfdmVjKGludCBkZGlyLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG4gXHRpb3ZlY19vZmYgPSB2ZWMtXHUwMDNlbnIgLSBucl9pb3ZzO1xuIFx0aW92ID0gdmVjLVx1MDAzZWlvdmVjICYjNDM7IGlvdmVjX29mZjtcbiBcbi1cdGlmIChpbXUtXHUwMDNlZmxhZ3MgXHUwMDI2IElPX1JFR0JVRl9GX0tCVUYpIHtcbiYjNDM7XHRpZiAoaW11LVx1MDAzZWZsYWdzIFx1MDAyNiBJT19SRUdCVUZfRl9ETUFCVUYpIHtcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHR9IGVsc2UgaWYgKGltdS1cdTAwM2VmbGFncyBcdTAwMjYgSU9fUkVHQlVGX0ZfS0JVRikge1xuIFx0XHRpbnQgcmV0ID0gaW9fa2Vybl9idmVjX3NpemUoaW92LCBucl9pb3ZzLCBpbXUsIFx1MDAyNm5yX3NlZ3MpO1xuIFxuIFx0XHRpZiAodW5saWtlbHkocmV0KSlcbmRpZmYgLS1naXQgYS9pb191cmluZy9yc3JjLmggYi9pb191cmluZy9yc3JjLmhcbmluZGV4IDk4YWU4ZWY1MTAwOWQuLjNjYjliNTdmMTU5YjYgMTAwNjQ0XG4tLS0gYS9pb191cmluZy9yc3JjLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2lvX3VyaW5nL3JzcmMuaFxuQEAgLTI5LDcgJiM0MzsyOSwxMyBAQCBlbnVtIHtcbiB9O1xuIFxuIGVudW0ge1xuLVx0SU9fUkVHQlVGX0ZfS0JVRlx0XHQ9IDEsXG4mIzQzO1x0SU9fUkVHQlVGX0ZfS0JVRlx0XHQ9IDEgXHUwMDNjXHUwMDNjIDAsXG4mIzQzO1x0SU9fUkVHQlVGX0ZfVU5DTE9ORUFCTEVcdFx0PSAxIFx1MDAzY1x1MDAzYyAxLFxuJiM0MztcdElPX1JFR0JVRl9GX0RNQUJVRlx0XHQ9IDEgXHUwMDNjXHUwMDNjIDMsXG4mIzQzO307XG4mIzQzO1xuJiM0MztlbnVtIHtcbiYjNDM7XHRJT19SRUdCVUZfSU1QT1JUX0FMTE9XX0RNQUJVRlx0XHQ9IDEgXHUwMDNjXHUwMDNjIDEsXG4gfTtcbiBcbiBzdHJ1Y3QgaW9fbWFwcGVkX3VidWYge1xuQEAgLTY0LDEyICYjNDM7NzAsMjggQEAgaW50IGlvX3JzcmNfZGF0YV9hbGxvYyhzdHJ1Y3QgaW9fcnNyY19kYXRhICpkYXRhLCB1bnNpZ25lZCBucik7XG4gXG4gc3RydWN0IGlvX3JzcmNfbm9kZSAqaW9fZmluZF9idWZfbm9kZShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSxcbiBcdFx0XHRcdCAgICAgIHVuc2lnbmVkIGlzc3VlX2ZsYWdzKTtcbi1pbnQgaW9faW1wb3J0X3JlZ19idWYoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbiYjNDM7aW50IF9faW9faW1wb3J0X3JlZ19idWYoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbiBcdFx0XHR1NjQgYnVmX2FkZHIsIHNpemVfdCBsZW4sIGludCBkZGlyLFxuLVx0XHRcdHVuc2lnbmVkIGlzc3VlX2ZsYWdzKTtcbi1pbnQgaW9faW1wb3J0X3JlZ192ZWMoaW50IGRkaXIsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbiYjNDM7XHRcdFx0dW5zaWduZWQgaXNzdWVfZmxhZ3MsIHVuc2lnbmVkIGltcG9ydF9mbGFncyk7XG4mIzQzO2ludCBfX2lvX2ltcG9ydF9yZWdfdmVjKGludCBkZGlyLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG4gXHRcdFx0c3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBpb3VfdmVjICp2ZWMsXG4tXHRcdFx0dW5zaWduZWQgbnJfaW92cywgdW5zaWduZWQgaXNzdWVfZmxhZ3MpO1xuJiM0MztcdFx0XHR1bnNpZ25lZCBucl9pb3ZzLCB1bnNpZ25lZCBpc3N1ZV9mbGFncyxcbiYjNDM7XHRcdFx0dW5zaWduZWQgaW1wb3J0X2ZsYWdzKTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IGlvX2ltcG9ydF9yZWdfYnVmKHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG4mIzQzO1x0XHRcdFx0ICAgIHU2NCBidWZfYWRkciwgc2l6ZV90IGxlbiwgaW50IGRkaXIsXG4mIzQzO1x0XHRcdFx0ICAgIHVuc2lnbmVkIGlzc3VlX2ZsYWdzKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIF9faW9faW1wb3J0X3JlZ19idWYocmVxLCBpdGVyLCBidWZfYWRkciwgbGVuLCBkZGlyLCBpc3N1ZV9mbGFncywgMCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IGlvX2ltcG9ydF9yZWdfdmVjKGludCBkZGlyLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG4mIzQzO1x0XHRcdFx0ICAgIHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgaW91X3ZlYyAqdmVjLFxuJiM0MztcdFx0XHRcdCAgICB1bnNpZ25lZCBucl9pb3ZzLCB1bnNpZ25lZCBpc3N1ZV9mbGFncylcbiYjNDM7e1xuJiM0MztcdHJldHVybiBfX2lvX2ltcG9ydF9yZWdfdmVjKGRkaXIsIGl0ZXIsIHJlcSwgdmVjLCBucl9pb3ZzLCBpc3N1ZV9mbGFncywgMCk7XG4mIzQzO31cbiYjNDM7XG4gaW50IGlvX3ByZXBfcmVnX2lvdmVjKHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgaW91X3ZlYyAqaXYsXG4gXHRcdFx0Y29uc3Qgc3RydWN0IGlvdmVjIF9fdXNlciAqdXZlYywgc2l6ZV90IHV2ZWNfc2Vncyk7XG4gXG5AQCAtMTU2LDQgJiM0MzsxNzgsMTcgQEAgc3RhdGljIGlubGluZSB2b2lkIGlvX2FsbG9jX2NhY2hlX3ZlY19rYXNhbihzdHJ1Y3QgaW91X3ZlYyAqaXYpXG4gXHRcdGlvX3ZlY19mcmVlKGl2KTtcbiB9XG4gXG4mIzQzO3ZvaWQgaW9fZHJvcF9kbWFidWZfbm9kZShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSk7XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgaW9fcmVxX2Ryb3BfZG1hYnVmKHN0cnVjdCBpb19raW9jYiAqcmVxKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCFJU19FTkFCTEVEKENPTkZJR19ETUFfU0hBUkVEX0JVRkZFUikpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0aWYgKCEocmVxLVx1MDAzZWZsYWdzIFx1MDAyNiBSRVFfRl9EUk9QX0RNQUJVRikpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0aWYgKFdBUk5fT05fT05DRSghKHJlcS1cdTAwM2VmbGFncyBcdTAwMjYgUkVRX0ZfQlVGX05PREUpKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHRpb19kcm9wX2RtYWJ1Zl9ub2RlKHJlcSk7XG4mIzQzO31cbiYjNDM7XG4gI2VuZGlmXG5kaWZmIC0tZ2l0IGEvaW9fdXJpbmcvcncuYyBiL2lvX3VyaW5nL3J3LmNcbmluZGV4IDk1MDM4Y2ZkYTYxNTMuLjExZmY3YjVhMTE2NDcgMTAwNjQ0XG4tLS0gYS9pb191cmluZy9ydy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9pb191cmluZy9ydy5jXG5AQCAtMzgwLDggJiM0MzszODAsOCBAQCBzdGF0aWMgaW50IGlvX2luaXRfcndfZml4ZWQoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncyxcbiBcdGlmIChpby1cdTAwM2VieXRlc19kb25lKVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdHJldCA9IGlvX2ltcG9ydF9yZWdfYnVmKHJlcSwgXHUwMDI2aW8tXHUwMDNlaXRlciwgcnctXHUwMDNlYWRkciwgcnctXHUwMDNlbGVuLCBkZGlyLFxuLVx0XHRcdFx0aXNzdWVfZmxhZ3MpO1xuJiM0MztcdHJldCA9IF9faW9faW1wb3J0X3JlZ19idWYocmVxLCBcdTAwMjZpby1cdTAwM2VpdGVyLCBydy1cdTAwM2VhZGRyLCBydy1cdTAwM2VsZW4sIGRkaXIsXG4mIzQzO1x0XHRcdFx0ICBpc3N1ZV9mbGFncywgSU9fUkVHQlVGX0lNUE9SVF9BTExPV19ETUFCVUYpO1xuIFx0aW92X2l0ZXJfc2F2ZV9zdGF0ZShcdTAwMjZpby1cdTAwM2VpdGVyLCBcdTAwMjZpby1cdTAwM2VpdGVyX3N0YXRlKTtcbiBcdHJldHVybiByZXQ7XG4gfVxuQEAgLTU5MSw2ICYjNDM7NTkxLDggQEAgc3RhdGljIHZvaWQgaW9fY29tcGxldGVfcncoc3RydWN0IGtpb2NiICpraW9jYiwgbG9uZyByZXMpXG4gXHRzdHJ1Y3QgaW9fcncgKnJ3ID0gY29udGFpbmVyX29mKGtpb2NiLCBzdHJ1Y3QgaW9fcncsIGtpb2NiKTtcbiBcdHN0cnVjdCBpb19raW9jYiAqcmVxID0gY21kX3RvX2lvX2tpb2NiKHJ3KTtcbiBcbiYjNDM7XHRpb19yZXFfZHJvcF9kbWFidWYocmVxKTtcbiYjNDM7XG4gXHRfX2lvX2NvbXBsZXRlX3J3X2NvbW1vbihyZXEsIHJlcyk7XG4gXHRpb19yZXFfc2V0X3JlcyhyZXEsIGlvX2ZpeHVwX3J3X3JlcyhyZXEsIHJlcyksIDApO1xuIFx0cmVxLVx1MDAzZWlvX3Rhc2tfd29yay5mdW5jID0gaW9fcmVxX3J3X2NvbXBsZXRlO1xuZGlmZiAtLWdpdCBhL2xpYi9pb3ZfaXRlci5jIGIvbGliL2lvdl9pdGVyLmNcbmluZGV4IDM0YTUyZTliYTllMWIuLmQ2ZjVkN2UxODBiNTQgMTAwNjQ0XG4tLS0gYS9saWIvaW92X2l0ZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbGliL2lvdl9pdGVyLmNcbkBAIC01NzUsNyAmIzQzOzU3NSw4IEBAIHZvaWQgaW92X2l0ZXJfYWR2YW5jZShzdHJ1Y3QgaW92X2l0ZXIgKmksIHNpemVfdCBzaXplKVxuIHtcbiBcdGlmICh1bmxpa2VseShpLVx1MDAzZWNvdW50IFx1MDAzYyBzaXplKSlcbiBcdFx0c2l6ZSA9IGktXHUwMDNlY291bnQ7XG4tXHRpZiAobGlrZWx5KGl0ZXJfaXNfdWJ1ZihpKSkgfHwgdW5saWtlbHkoaW92X2l0ZXJfaXNfeGFycmF5KGkpKSkge1xuJiM0MztcdGlmIChsaWtlbHkoaXRlcl9pc191YnVmKGkpKSB8fCB1bmxpa2VseShpb3ZfaXRlcl9pc194YXJyYXkoaSkpIHx8XG4mIzQzO1x0ICAgIHVubGlrZWx5KGlvdl9pdGVyX2lzX2RtYWJ1Zl9tYXAoaSkpKSB7XG4gXHRcdGktXHUwMDNlaW92X29mZnNldCAmIzQzOz0gc2l6ZTtcbiBcdFx0aS1cdTAwM2Vjb3VudCAtPSBzaXplO1xuIFx0fSBlbHNlIGlmIChsaWtlbHkoaXRlcl9pc19pb3ZlYyhpKSB8fCBpb3ZfaXRlcl9pc19rdmVjKGkpKSkge1xuQEAgLTYzMSw3ICYjNDM7NjMyLDggQEAgdm9pZCBpb3ZfaXRlcl9yZXZlcnQoc3RydWN0IGlvdl9pdGVyICppLCBzaXplX3QgdW5yb2xsKVxuIFx0XHRyZXR1cm47XG4gXHR9XG4gXHR1bnJvbGwgLT0gaS1cdTAwM2Vpb3Zfb2Zmc2V0O1xuLVx0aWYgKGlvdl9pdGVyX2lzX3hhcnJheShpKSB8fCBpdGVyX2lzX3VidWYoaSkpIHtcbiYjNDM7XHRpZiAoaW92X2l0ZXJfaXNfeGFycmF5KGkpIHx8IGl0ZXJfaXNfdWJ1ZihpKSB8fFxuJiM0MztcdCAgICBpb3ZfaXRlcl9pc19kbWFidWZfbWFwKGkpKSB7XG4gXHRcdEJVRygpOyAvKiBXZSBzaG91bGQgbmV2ZXIgZ28gYmV5b25kIHRoZSBzdGFydCBvZiB0aGUgc3BlY2lmaWVkXG4gXHRcdFx0KiByYW5nZSBzaW5jZSB3ZSBtaWdodCB0aGVuIGJlIHN0cmF5aW5nIGludG8gcGFnZXMgdGhhdFxuIFx0XHRcdCogYXJlbiYjMzk7dCBwaW5uZWQuXG5AQCAtNzc1LDYgJiM0Mzs3NzcsMjAgQEAgdm9pZCBpb3ZfaXRlcl94YXJyYXkoc3RydWN0IGlvdl9pdGVyICppLCB1bnNpZ25lZCBpbnQgZGlyZWN0aW9uLFxuIH1cbiBFWFBPUlRfU1lNQk9MKGlvdl9pdGVyX3hhcnJheSk7XG4gXG4mIzQzO3ZvaWQgaW92X2l0ZXJfZG1hYnVmX21hcChzdHJ1Y3QgaW92X2l0ZXIgKmksIHVuc2lnbmVkIGludCBkaXJlY3Rpb24sXG4mIzQzO1x0XHRcdCBzdHJ1Y3QgZG1hX2J1Zl9pb19tYXAgKm1hcCxcbiYjNDM7XHRcdFx0IGxvZmZfdCBvZmYsIHNpemVfdCBjb3VudClcbiYjNDM7e1xuJiM0MztcdFdBUk5fT04oZGlyZWN0aW9uIFx1MDAyNiB+KFJFQUQgfCBXUklURSkpO1xuJiM0MztcdCppID0gKHN0cnVjdCBpb3ZfaXRlcil7XG4mIzQzO1x0XHQuaXRlcl90eXBlID0gSVRFUl9ETUFCVUZfTUFQLFxuJiM0MztcdFx0LmRhdGFfc291cmNlID0gZGlyZWN0aW9uLFxuJiM0MztcdFx0LmRtYWJ1Zl9tYXAgPSBtYXAsXG4mIzQzO1x0XHQuY291bnQgPSBjb3VudCxcbiYjNDM7XHRcdC5pb3Zfb2Zmc2V0ID0gb2ZmLFxuJiM0MztcdH07XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICogaW92X2l0ZXJfZGlzY2FyZCAtIEluaXRpYWxpc2UgYW4gSS9PIGl0ZXJhdG9yIHRoYXQgZGlzY2FyZHMgZGF0YVxuICAqIEBpOiBUaGUgaXRlcmF0b3IgdG8gaW5pdGlhbGlzZS5cbkBAIC04NDEsNyAmIzQzOzg1Nyw3IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGlvdl9pdGVyX2FsaWdubWVudF9idmVjKGNvbnN0IHN0cnVjdCBpb3ZfaXRlciAqaSlcbiBcbiB1bnNpZ25lZCBsb25nIGlvdl9pdGVyX2FsaWdubWVudChjb25zdCBzdHJ1Y3QgaW92X2l0ZXIgKmkpXG4ge1xuLVx0aWYgKGxpa2VseShpdGVyX2lzX3VidWYoaSkpKSB7XG4mIzQzO1x0aWYgKGxpa2VseShpdGVyX2lzX3VidWYoaSkpIHx8IGlvdl9pdGVyX2lzX2RtYWJ1Zl9tYXAoaSkpIHtcbiBcdFx0c2l6ZV90IHNpemUgPSBpLVx1MDAzZWNvdW50O1xuIFx0XHRpZiAoc2l6ZSlcbiBcdFx0XHRyZXR1cm4gKCh1bnNpZ25lZCBsb25nKWktXHUwMDNldWJ1ZiAmIzQzOyBpLVx1MDAzZWlvdl9vZmZzZXQpIHwgc2l6ZTtcbkBAIC04NzIsNyAmIzQzOzg4OCw3IEBAIHVuc2lnbmVkIGxvbmcgaW92X2l0ZXJfZ2FwX2FsaWdubWVudChjb25zdCBzdHJ1Y3QgaW92X2l0ZXIgKmkpXG4gXHRzaXplX3Qgc2l6ZSA9IGktXHUwMDNlY291bnQ7XG4gXHR1bnNpZ25lZCBrO1xuIFxuLVx0aWYgKGl0ZXJfaXNfdWJ1ZihpKSlcbiYjNDM7XHRpZiAoaXRlcl9pc191YnVmKGkpIHx8IGlvdl9pdGVyX2lzX2RtYWJ1Zl9tYXAoaSkpXG4gXHRcdHJldHVybiAwO1xuIFxuIFx0aWYgKFdBUk5fT04oIWl0ZXJfaXNfaW92ZWMoaSkpKVxuQEAgLTE0NjksMTEgJiM0MzsxNDg1LDEyIEBAIEVYUE9SVF9TWU1CT0xfR1BMKGltcG9ydF91YnVmKTtcbiB2b2lkIGlvdl9pdGVyX3Jlc3RvcmUoc3RydWN0IGlvdl9pdGVyICppLCBzdHJ1Y3QgaW92X2l0ZXJfc3RhdGUgKnN0YXRlKVxuIHtcbiBcdGlmIChXQVJOX09OX09OQ0UoIWlvdl9pdGVyX2lzX2J2ZWMoaSkgXHUwMDI2XHUwMDI2ICFpdGVyX2lzX2lvdmVjKGkpIFx1MDAyNlx1MDAyNlxuLVx0XHRcdCAhaXRlcl9pc191YnVmKGkpKSBcdTAwMjZcdTAwMjYgIWlvdl9pdGVyX2lzX2t2ZWMoaSkpXG4mIzQzO1x0XHRcdCAhaXRlcl9pc191YnVmKGkpIFx1MDAyNlx1MDAyNiAhaW92X2l0ZXJfaXNfa3ZlYyhpKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0ICFpb3ZfaXRlcl9pc19kbWFidWZfbWFwKGkpKSlcbiBcdFx0cmV0dXJuO1xuIFx0aS1cdTAwM2Vpb3Zfb2Zmc2V0ID0gc3RhdGUtXHUwMDNlaW92X29mZnNldDtcbiBcdGktXHUwMDNlY291bnQgPSBzdGF0ZS1cdTAwM2Vjb3VudDtcbi1cdGlmIChpdGVyX2lzX3VidWYoaSkpXG4mIzQzO1x0aWYgKGl0ZXJfaXNfdWJ1ZihpKSB8fCBpb3ZfaXRlcl9pc19kbWFidWZfbWFwKGkpKVxuIFx0XHRyZXR1cm47XG4gXHQvKlxuIFx0ICogRm9yIHRoZSAqdmVjIGl0ZXJzLCBucl9zZWdzICYjNDM7IGlvdiBpcyBjb25zdGFudCAtIGlmIHdlIGluY3JlbWVudFxuQEAgLTE2MzQsNyAmIzQzOzE2NTEsNyBAQCBzdGF0aWMgc3NpemVfdCBpb3ZfaXRlcl9leHRyYWN0X2J2ZWNfcGFnZXMoc3RydWN0IGlvdl9pdGVyICppLFxuIFx0fVxuIFx0YmkuYmlfaWR4ID0gMDtcbiBcdGJpLmJpX3NpemUgPSBtYXhzaXplO1xuLVx0YmkuYmlfYnZlY19kb25lID0gc2tpcDtcbiYjNDM7XHRiaS5iaV9vZmZzZXQgPSBza2lwO1xuIFxuIFx0bWF4cGFnZXMgPSB3YW50X3BhZ2VzX2FycmF5KHBhZ2VzLCBtYXhzaXplLCBza2lwLCBtYXhwYWdlcyk7XG4gXHRpZiAoIW1heHBhZ2VzKVxuZGlmZiAtLWdpdCBhL25ldC9jZXBoL21lc3Nlbmdlci5jIGIvbmV0L2NlcGgvbWVzc2VuZ2VyLmNcbmluZGV4IDM0YjMwOTdiNGM3YjkuLjljMWI2Y2Y4YzM2ZmUgMTAwNjQ0XG4tLS0gYS9uZXQvY2VwaC9tZXNzZW5nZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NlcGgvbWVzc2VuZ2VyLmNcbkBAIC03NjIsNyAmIzQzOzc2Miw3IEBAIHN0YXRpYyBib29sIGNlcGhfbXNnX2RhdGFfYmlvX2FkdmFuY2Uoc3RydWN0IGNlcGhfbXNnX2RhdGFfY3Vyc29yICpjdXJzb3IsXG4gXHRpZiAoIWN1cnNvci1cdTAwM2VyZXNpZClcbiBcdFx0cmV0dXJuIGZhbHNlOyAgIC8qIG5vIG1vcmUgZGF0YSAqL1xuIFxuLVx0aWYgKCFieXRlcyB8fCAoaXQtXHUwMDNlaXRlci5iaV9zaXplIFx1MDAyNlx1MDAyNiBpdC1cdTAwM2VpdGVyLmJpX2J2ZWNfZG9uZSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRpZiAoIWJ5dGVzIHx8IChpdC1cdTAwM2VpdGVyLmJpX3NpemUgXHUwMDI2XHUwMDI2IGl0LVx1MDAzZWl0ZXIuYmlfb2Zmc2V0IFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgICAgcGFnZSA9PSBiaW9faXRlcl9wYWdlKGl0LVx1MDAzZWJpbywgaXQtXHUwMDNlaXRlcikpKVxuIFx0XHRyZXR1cm4gZmFsc2U7XHQvKiBtb3JlIGJ5dGVzIHRvIHByb2Nlc3MgaW4gdGhpcyBzZWdtZW50ICovXG4gXG5AQCAtODE3LDcgJiM0Mzs4MTcsNyBAQCBzdGF0aWMgYm9vbCBjZXBoX21zZ19kYXRhX2J2ZWNzX2FkdmFuY2Uoc3RydWN0IGNlcGhfbXNnX2RhdGFfY3Vyc29yICpjdXJzb3IsXG4gXHRpZiAoIWN1cnNvci1cdTAwM2VyZXNpZClcbiBcdFx0cmV0dXJuIGZhbHNlOyAgIC8qIG5vIG1vcmUgZGF0YSAqL1xuIFxuLVx0aWYgKCFieXRlcyB8fCAoY3Vyc29yLVx1MDAzZWJ2ZWNfaXRlci5iaV9idmVjX2RvbmUgXHUwMDI2XHUwMDI2XG4mIzQzO1x0aWYgKCFieXRlcyB8fCAoY3Vyc29yLVx1MDAzZWJ2ZWNfaXRlci5iaV9vZmZzZXQgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICAgICBwYWdlID09IGJ2ZWNfaXRlcl9wYWdlKGJ2ZWNzLCBjdXJzb3ItXHUwMDNlYnZlY19pdGVyKSkpXG4gXHRcdHJldHVybiBmYWxzZTtcdC8qIG1vcmUgYnl0ZXMgdG8gcHJvY2VzcyBpbiB0aGlzIHNlZ21lbnQgKi9cbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxNDozNzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RE1BX1NIQVJFRF9CVUZGRVImIzM0OywKICAgICYjMzQ7SU9fVVJJTkcmIzM0OywKICAgICYjMzQ7QkxLX0RFVl9OVk1FJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZG1hX2J1Zl9pb19jdHhfY3JlYXRlJiMzNDssCiAgICAmIzM0O2RtYV9idWZfaW9fY3R4X3JlbGVhc2UmIzM0OywKICAgICYjMzQ7ZG1hX2J1Zl9pb19jcmVhdGVfbWFwJiMzNDssCiAgICAmIzM0O2RtYV9idWZfaW9faW52YWxpZGF0ZV9tYXBwaW5ncyYjMzQ7LAogICAgJiMzNDtkbWFfYnVmX2lvX2luaXRfbWFwJiMzNDssCiAgICAmIzM0O2Jpb19pb3ZfaXRlcl9zZXQmIzM0OywKICAgICYjMzQ7X19pb19pbXBvcnRfcmVnX2J1ZiYjMzQ7LAogICAgJiMzNDtpb19kcm9wX2RtYWJ1Zl9ub2RlJiMzNDssCiAgICAmIzM0O2lvdl9pdGVyX2RtYWJ1Zl9tYXAmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBkbWEtYnVmIHN1cHBvcnQgaW4gdGhlIGJsb2NrIGxheWVyLCBOVk1lIFBDSSBkcml2ZXIsIGFuZCBpb191cmluZy4gSXQgYWRkcyBhIG5ldyBkbWEtYnVmIEkvTyBtYXBwaW5nIGluZnJhc3RydWN0dXJlIGFuZCBtb2RpZmllcyBjb3JlIGJpbyBhbmQgaW92X2l0ZXIgbG9naWMgdG8gaGFuZGxlIGRtYS1idWYgbWFwcy4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgZXhwb3NlcyBuZXcgcmVhY2hhYmxlIGNvZGUgcGF0aHMgdmlhIGlvX3VyaW5nIGFuZCBOVk1lLCB3aGljaCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMmNlYTY2ZDE5ZjVlNjE1OTZkNGQwMzI2YWVlNTc1MjU2NmY3NWJjNwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gQXVnIDIgMTQ6Mzc6MzUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2Jsb2NrL2Jpb3ZlY3MucnN0IGIvRG9jdW1lbnRhdGlvbi9ibG9jay9iaW92ZWNzLnJzdAppbmRleCAxMTEyNmVkNmY0MGY3Li40OWRhMjE0N2I3ZDg2IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2Jsb2NrL2Jpb3ZlY3MucnN0CiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vYmxvY2svYmlvdmVjcy5yc3QKQEAgLTE2LDE2ICYjNDM7MTYsMTYgQEAgYnZfbGVuIGJ5IHRoZSBudW1iZXIgb2YgYnl0ZXMgY29tcGxldGVkIGluIHRoYXQgYmlvdmVjLgogSW4gdGhlIG5ldyBzY2hlbWUgb2YgdGhpbmdzLCBldmVyeXRoaW5nIHRoYXQgbXVzdCBiZSBtdXRhdGVkIGluIG9yZGVyIHRvCiBwYXJ0aWFsbHkgY29tcGxldGUgYSBiaW8gaXMgc2VncmVnYXRlZCBpbnRvIHN0cnVjdCBidmVjX2l0ZXI6IGJpX3NlY3RvciwKIGJpX3NpemUgYW5kIGJpX2lkeCBoYXZlIGJlZW4gbW92ZWQgdGhlcmU7IGFuZCBpbnN0ZWFkIG9mIG1vZGlmeWluZyBidl9vZmZzZXQKLWFuZCBidl9sZW4sIHN0cnVjdCBidmVjX2l0ZXIgaGFzIGJpX2J2ZWNfZG9uZSwgd2hpY2ggcmVwcmVzZW50cyB0aGUgbnVtYmVyIG9mCiYjNDM7YW5kIGJ2X2xlbiwgc3RydWN0IGJ2ZWNfaXRlciBoYXMgYmlfb2Zmc2V0LCB3aGljaCByZXByZXNlbnRzIHRoZSBudW1iZXIgb2YKIGJ5dGVzIGNvbXBsZXRlZCBpbiB0aGUgY3VycmVudCBidmVjLgogCiBUaGVyZSBhcmUgYSBidW5jaCBvZiBuZXcgaGVscGVyIG1hY3JvcyBmb3IgaGlkaW5nIHRoZSBnb3J5IGRldGFpbHMgLSBpbgogcGFydGljdWxhciwgcHJlc2VudGluZyB0aGUgaWxsdXNpb24gb2YgcGFydGlhbGx5IGNvbXBsZXRlZCBiaW92ZWNzIHNvIHRoYXQKLW5vcm1hbCBjb2RlIGRvZXNuJiMzOTt0IGhhdmUgdG8gZGVhbCB3aXRoIGJpX2J2ZWNfZG9uZS4KJiM0Mztub3JtYWwgY29kZSBkb2VzbiYjMzk7dCBoYXZlIHRvIGRlYWwgd2l0aCBiaV9vZmZzZXQuCiAKICAqIERyaXZlciBjb2RlIHNob3VsZCBubyBsb25nZXIgcmVmZXIgdG8gYmlvdmVjcyBkaXJlY3RseTsgd2Ugbm93IGhhdmUKICAgIGJpb19pb3ZlYygpIGFuZCBiaW9faXRlcl9pb3ZlYygpIG1hY3JvcyB0aGF0IHJldHVybiBsaXRlcmFsIHN0cnVjdCBiaW92ZWNzLAotICAgY29uc3RydWN0ZWQgZnJvbSB0aGUgcmF3IGJpb3ZlY3MgYnV0IHRha2luZyBpbnRvIGFjY291bnQgYmlfYnZlY19kb25lIGFuZAomIzQzOyAgIGNvbnN0cnVjdGVkIGZyb20gdGhlIHJhdyBiaW92ZWNzIGJ1dCB0YWtpbmcgaW50byBhY2NvdW50IGJpX29mZnNldCBhbmQKICAgIGJpX3NpemUuCiAKICAgIGJpb19mb3JfZWFjaF9zZWdtZW50KCkgaGFzIGJlZW4gdXBkYXRlZCB0byB0YWtlIGEgYnZlY19pdGVyIGFyZ3VtZW50CkBAIC0xMDEsNyAmIzQzOzEwMSw3IEBAIE90aGVyIGltcGxpY2F0aW9uczoKICAgIEkuZS4gaW5zdGVhZCBvZiB1c2luZyBiaW9faW92ZWNfaWR4KCkgKG9yIGJpby0mZ3Q7YmlfaW92ZWNbYmlvLSZndDtiaV9pZHhdKSwgeW91CiAgICBub3cgdXNlIGJpb19pdGVyX2lvdmVjKCksIHdoaWNoIHRha2VzIGEgYnZlY19pdGVyIGFuZCByZXR1cm5zIGEKICAgIGxpdGVyYWwgc3RydWN0IGJpb192ZWMgLSBjb25zdHJ1Y3RlZCBvbiB0aGUgZmx5IGZyb20gdGhlIHJhdyBiaW92ZWMgYnV0Ci0gICB0YWtpbmcgaW50byBhY2NvdW50IGJpX2J2ZWNfZG9uZSAoYW5kIGJpX3NpemUpLgomIzQzOyAgIHRha2luZyBpbnRvIGFjY291bnQgYmlfb2Zmc2V0IChhbmQgYmlfc2l6ZSkuCiAKICAqIGJpX3ZjbnQgY2FuJiMzOTt0IGJlIHRydXN0ZWQgb3IgcmVsaWVkIHVwb24gYnkgZHJpdmVyIGNvZGUgLSBpLmUuIGFueXRoaW5nIHRoYXQKICAgIGRvZXNuJiMzOTt0IGFjdHVhbGx5IG93biB0aGUgYmlvLiBUaGUgcmVhc29uIGlzIHR3b2ZvbGQ6IGZpcnN0bHksIGl0JiMzOTtzIG5vdApkaWZmIC0tZ2l0IGEvYmxvY2svYmlvLmMgYi9ibG9jay9iaW8uYwppbmRleCA1MDAzODlmMzMyZDk5Li4xNjAyZWFiMDU3NjFmIDEwMDY0NAotLS0gYS9ibG9jay9iaW8uYwomIzQzOyYjNDM7JiM0MzsgYi9ibG9jay9iaW8uYwpAQCAtMjI5LDcgJiM0MzsyMjksNyBAQCB2b2lkIGJpb19pbml0KHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc3RydWN0IGJpb192ZWMgKnRhYmxlLAogCWJpby0mZ3Q7YmlfaXRlci5iaV9zZWN0b3IgPSAwOwogCWJpby0mZ3Q7YmlfaXRlci5iaV9zaXplID0gMDsKIAliaW8tJmd0O2JpX2l0ZXIuYmlfaWR4ID0gMDsKLQliaW8tJmd0O2JpX2l0ZXIuYmlfYnZlY19kb25lID0gMDsKJiM0MzsJYmlvLSZndDtiaV9pdGVyLmJpX29mZnNldCA9IDA7CiAJYmlvLSZndDtiaV9lbmRfaW8gPSBOVUxMOwogCWJpby0mZ3Q7YmlfcHJpdmF0ZSA9IE5VTEw7CiAjaWZkZWYgQ09ORklHX0JMS19DR1JPVVAKQEAgLTg2MSw2ICYjNDM7ODYxLDExIEBAIHN0YXRpYyBpbnQgX19iaW9fY2xvbmUoc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgYmlvICpiaW9fc3JjLCBnZnBfdCBnZnApCiAJYmlvLSZndDtiaV93cml0ZV9zdHJlYW0gPSBiaW9fc3JjLSZndDtiaV93cml0ZV9zdHJlYW07CiAJYmlvLSZndDtiaV9pdGVyID0gYmlvX3NyYy0mZ3Q7YmlfaXRlcjsKIAomIzQzOwlpZiAob3BfaXNfZG1hYnVmKGJpby0mZ3Q7Ymlfb3BmKSkKJiM0MzsJCWJpby0mZ3Q7YmlfZG1hYnVmX21hcCA9IGJpb19zcmMtJmd0O2JpX2RtYWJ1Zl9tYXA7CiYjNDM7CWVsc2UKJiM0MzsJCWJpby0mZ3Q7YmlfaW9fdmVjID0gYmlvX3NyYy0mZ3Q7YmlfaW9fdmVjOwomIzQzOwogCWlmIChiaW8tJmd0O2JpX2JkZXYpIHsKIAkJaWYgKGJpby0mZ3Q7YmlfYmRldiA9PSBiaW9fc3JjLSZndDtiaV9iZGV2ICZhbXA7JmFtcDsKIAkJICAgIGJpb19mbGFnZ2VkKGJpb19zcmMsIEJJT19SRU1BUFBFRCkpCkBAIC05MDIsOCAmIzQzOzkwNyw2IEBAIHN0cnVjdCBiaW8gKmJpb19hbGxvY19jbG9uZShzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBzdHJ1Y3QgYmlvICpiaW9fc3JjLAogCQliaW9fcHV0KGJpbyk7CiAJCXJldHVybiBOVUxMOwogCX0KLQliaW8tJmd0O2JpX2lvX3ZlYyA9IGJpb19zcmMtJmd0O2JpX2lvX3ZlYzsKLQogCXJldHVybiBiaW87CiB9CiBFWFBPUlRfU1lNQk9MKGJpb19hbGxvY19jbG9uZSk7CkBAIC05MjMsNyAmIzQzOzkyNiw3IEBAIGludCBiaW9faW5pdF9jbG9uZShzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBzdHJ1Y3QgYmlvICpiaW8sCiB7CiAJaW50IHJldDsKIAotCWJpb19pbml0KGJpbywgYmRldiwgYmlvX3NyYy0mZ3Q7YmlfaW9fdmVjLCAwLCBiaW9fc3JjLSZndDtiaV9vcGYpOwomIzQzOwliaW9faW5pdChiaW8sIGJkZXYsIE5VTEwsIDAsIGJpb19zcmMtJmd0O2JpX29wZik7CiAJcmV0ID0gX19iaW9fY2xvbmUoYmlvLCBiaW9fc3JjLCBnZnApOwogCWlmIChyZXQpCiAJCWJpb191bmluaXQoYmlvKTsKQEAgLTExODIsMTUgJiM0MzsxMTg1LDI2IEBAIHZvaWQgX19iaW9fcmVsZWFzZV9wYWdlcyhzdHJ1Y3QgYmlvICpiaW8sIGJvb2wgbWFya19kaXJ0eSkKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKF9fYmlvX3JlbGVhc2VfcGFnZXMpOwogCi12b2lkIGJpb19pb3ZfYnZlY19zZXQoc3RydWN0IGJpbyAqYmlvLCBjb25zdCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIpCiYjNDM7Ym9vbCBiaW9faW92X2l0ZXJfc2V0KHN0cnVjdCBiaW8gKmJpbywgY29uc3Qgc3RydWN0IGlvdl9pdGVyICppdGVyKQogewomIzQzOwlpZiAoIWlvdl9pdGVyX2lzX2J2ZWMoaXRlcikgJmFtcDsmYW1wOyAhaW92X2l0ZXJfaXNfZG1hYnVmX21hcChpdGVyKSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKIAlXQVJOX09OX09OQ0UoYmlvLSZndDtiaV9tYXhfdmVjcyk7CiAKJiM0MzsJc3RhdGljX2Fzc2VydChvZmZzZXRvZihzdHJ1Y3QgYmlvLCBiaV9pb192ZWMpID09CiYjNDM7CQkgICAgICBvZmZzZXRvZihzdHJ1Y3QgYmlvLCBiaV9kbWFidWZfbWFwKSk7CiYjNDM7CXN0YXRpY19hc3NlcnQob2Zmc2V0b2Yoc3RydWN0IGlvdl9pdGVyLCBidmVjKSA9PQomIzQzOwkJICAgICAgb2Zmc2V0b2Yoc3RydWN0IGlvdl9pdGVyLCBkbWFidWZfbWFwKSk7CiYjNDM7CiAJYmlvLSZndDtiaV9pb192ZWMgPSAoc3RydWN0IGJpb192ZWMgKilpdGVyLSZndDtidmVjOwogCWJpby0mZ3Q7YmlfaXRlci5iaV9pZHggPSAwOwotCWJpby0mZ3Q7YmlfaXRlci5iaV9idmVjX2RvbmUgPSBpdGVyLSZndDtpb3Zfb2Zmc2V0OwomIzQzOwliaW8tJmd0O2JpX2l0ZXIuYmlfb2Zmc2V0ID0gaXRlci0mZ3Q7aW92X29mZnNldDsKIAliaW8tJmd0O2JpX2l0ZXIuYmlfc2l6ZSA9IGlvdl9pdGVyX2NvdW50KGl0ZXIpOwogCWJpb19zZXRfZmxhZyhiaW8sIEJJT19DTE9ORUQpOwomIzQzOwlpZiAoaW92X2l0ZXJfaXNfZG1hYnVmX21hcChpdGVyKSkKJiM0MzsJCWJpby0mZ3Q7Ymlfb3BmIHw9IFJFUV9OT01FUkdFIHwgUkVRX0RNQUJVRjsKJiM0MzsJcmV0dXJuIHRydWU7CiB9CiAKIC8qCkBAIC0xMjg1LDEwICYjNDM7MTI5OSw5IEBAIGludCBiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGlvdl9pdGVyICppdGVyLAogCWlmIChXQVJOX09OX09OQ0UoYmlvX2ZsYWdnZWQoYmlvLCBCSU9fQ0xPTkVEKSkpCiAJCXJldHVybiAtRUlPOwogCi0JaWYgKGlvdl9pdGVyX2lzX2J2ZWMoaXRlcikpIHsKLQkJYmlvX2lvdl9idmVjX3NldChiaW8sIGl0ZXIpOwotCi0JCWlmICghYmlvX2lvdl9idmVjX2FsaWduZWQoYmlvLCBtZW1fYWxpZ25fbWFzaykpCiYjNDM7CWlmIChiaW9faW92X2l0ZXJfc2V0KGJpbywgaXRlcikpIHsKJiM0MzsJCWlmIChpb3ZfaXRlcl9pc19idmVjKGl0ZXIpICZhbXA7JmFtcDsKJiM0MzsJCSAgICAhYmlvX2lvdl9idmVjX2FsaWduZWQoYmlvLCBtZW1fYWxpZ25fbWFzaykpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAogCQlpb3ZfaXRlcl9hZHZhbmNlKGl0ZXIsIGJpby0mZ3Q7YmlfaXRlci5iaV9zaXplKTsKZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay1tYXAuYyBiL2Jsb2NrL2Jsay1tYXAuYwppbmRleCA2MTVkMjliYjg0MGViLi45Y2I5NjA1ZDFmNjJkIDEwMDY0NAotLS0gYS9ibG9jay9ibGstbWFwLmMKJiM0MzsmIzQzOyYjNDM7IGIvYmxvY2svYmxrLW1hcC5jCkBAIC00NzMsNyAmIzQzOzQ3Myw3IEBAIHN0YXRpYyBpbnQgYmxrX3JxX21hcF91c2VyX2J2ZWMoc3RydWN0IHJlcXVlc3QgKnJxLCBjb25zdCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIpCiAJYmlvID0gYmxrX3JxX21hcF9iaW9fYWxsb2MocnEsIDAsIEdGUF9LRVJORUwpOwogCWlmICghYmlvKQogCQlyZXR1cm4gLUVOT01FTTsKLQliaW9faW92X2J2ZWNfc2V0KGJpbywgaXRlcik7CiYjNDM7CWJpb19pb3ZfaXRlcl9zZXQoYmlvLCBpdGVyKTsKIAogCXJldCA9IGJsa19ycV9hcHBlbmRfYmlvKHJxLCBiaW8pOwogCWlmIChyZXQpCmRpZmYgLS1naXQgYS9ibG9jay9ibGstbWVyZ2UuYyBiL2Jsb2NrL2Jsay1tZXJnZS5jCmluZGV4IGFiMTE2MWNhNjlmMWUuLjFiZWVkYzQyYTg1ZDUgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2Jsay1tZXJnZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2Jsb2NrL2Jsay1tZXJnZS5jCkBAIC05LDYgJiM0Mzs5LDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9ibGstaW50ZWdyaXR5LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcGFydF9zdGF0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvYmxrLWNncm91cC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9kbWEtYnVmLWlvLmgmZ3Q7CiAKICNpbmNsdWRlICZsdDt0cmFjZS9ldmVudHMvYmxvY2suaCZndDsKIApAQCAtMzMsNyAmIzQzOzM0LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGJpb19nZXRfbGFzdF9idmVjKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGJpb192ZWMgKmJ2KQogCiAJYmlvX2FkdmFuY2VfaXRlcihiaW8sICZhbXA7aXRlciwgaXRlci5iaV9zaXplKTsKIAotCWlmICghaXRlci5iaV9idmVjX2RvbmUpCiYjNDM7CWlmICghaXRlci5iaV9vZmZzZXQpCiAJCWlkeCA9IGl0ZXIuYmlfaWR4IC0gMTsKIAllbHNlCS8qIGluIHRoZSBtaWRkbGUgb2YgYnZlYyAqLwogCQlpZHggPSBpdGVyLmJpX2lkeDsKQEAgLTQxLDExICYjNDM7NDIsMTEgQEAgc3RhdGljIGlubGluZSB2b2lkIGJpb19nZXRfbGFzdF9idmVjKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGJpb192ZWMgKmJ2KQogCSpidiA9IGJpby0mZ3Q7YmlfaW9fdmVjW2lkeF07CiAKIAkvKgotCSAqIGl0ZXIuYmlfYnZlY19kb25lIHJlY29yZHMgYWN0dWFsIGxlbmd0aCBvZiB0aGUgbGFzdCBidmVjCiYjNDM7CSAqIGl0ZXIuYmlfb2Zmc2V0IHJlY29yZHMgYWN0dWFsIGxlbmd0aCBvZiB0aGUgbGFzdCBidmVjCiAJICogaWYgdGhpcyBiaW8gZW5kcyBpbiB0aGUgbWlkZGxlIG9mIG9uZSBpbyB2ZWN0b3IKIAkgKi8KLQlpZiAoaXRlci5iaV9idmVjX2RvbmUpCi0JCWJ2LSZndDtidl9sZW4gPSBpdGVyLmJpX2J2ZWNfZG9uZTsKJiM0MzsJaWYgKGl0ZXIuYmlfb2Zmc2V0KQomIzQzOwkJYnYtJmd0O2J2X2xlbiA9IGl0ZXIuYmlfb2Zmc2V0OwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgYmlvX3dpbGxfZ2FwKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLApAQCAtMzE5LDYgJiM0MzszMjAsMjggQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgYnZlY19zZWdfZ2FwKHN0cnVjdCBiaW9fdmVjICpidnBydiwKIAlyZXR1cm4gYnYtJmd0O2J2X29mZnNldCB8IChidnBydi0mZ3Q7YnZfb2Zmc2V0ICYjNDM7IGJ2cHJ2LSZndDtidl9sZW4pOwogfQogCiYjNDM7c3RhdGljIGlubGluZSBpbnQgYmlvX3NwbGl0X2lvX2F0X2RtYWJ1ZihzdHJ1Y3QgYmlvICpiaW8sCiYjNDM7CQljb25zdCBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0sIHVuc2lnbmVkICpzZWdzLAomIzQzOwkJdW5zaWduZWQgbWF4X2J5dGVzLCB1bnNpZ25lZCBsZW5fYWxpZ25fbWFzaywKJiM0MzsJCXVuc2lnbmVkIHN0YXJ0X2FsaWduX21hc2spCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBieXRlcyA9IG1pbihiaW8tJmd0O2JpX2l0ZXIuYmlfc2l6ZSwgbWF4X2J5dGVzKTsKJiM0MzsJdW5zaWduZWQgc2VnX3NoaWZ0ID0gYmlvLSZndDtiaV9kbWFidWZfbWFwLSZndDtzZWdfc2hpZnQ7CiYjNDM7CXVuc2lnbmVkIG9mZnNldCA9IGJpby0mZ3Q7YmlfaXRlci5iaV9vZmZzZXQgJmFtcDsgKCgxVSAmbHQ7Jmx0OyBzZWdfc2hpZnQpIC0gMSk7CiYjNDM7CiYjNDM7CWlmICgoYmlvLSZndDtiaV9pdGVyLmJpX29mZnNldCAmYW1wOyBzdGFydF9hbGlnbl9tYXNrKSB8fAomIzQzOwkgICAgKGJpby0mZ3Q7YmlfaXRlci5iaV9zaXplICZhbXA7IGxlbl9hbGlnbl9tYXNrKSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwkvKiBzaW5nbGUgY29udGlndW91cyByYW5nZSBpbnRvIHRoZSBkbWEtYnVmICovCiYjNDM7CSpzZWdzID0gMTsKJiM0MzsKJiM0MzsJYnl0ZXMgPSBtaW4oYnl0ZXMsICgodW5zaWduZWQpbGltLSZndDttYXhfc2VnbWVudHMgJmx0OyZsdDsgc2VnX3NoaWZ0KSAtIG9mZnNldCk7CiYjNDM7CWlmIChieXRlcyAhPSBiaW8tJmd0O2JpX2l0ZXIuYmlfc2l6ZSkKJiM0MzsJCXJldHVybiBieXRlczsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogLyoqCiAgKiBiaW9fc3BsaXRfaW9fYXQgLSBjaGVjayBpZiBhbmQgd2hlcmUgdG8gc3BsaXQgYSBiaW8KICAqIEBiaW86ICBbaW5dIGJpbyB0byBiZSBzcGxpdApAQCAtMzQ2LDYgJiM0MzszNjksMTkgQEAgaW50IGJpb19zcGxpdF9pb19hdChzdHJ1Y3QgYmlvICpiaW8sIGNvbnN0IHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSwKIAkJbGVuX2FsaWduX21hc2sgfD0gKGJjLSZndDtiY19rZXktJmd0O2NyeXB0b19jZmcuZGF0YV91bml0X3NpemUgLSAxKTsKIAl9CiAKJiM0MzsJaWYgKG9wX2lzX2RtYWJ1ZihiaW8tJmd0O2JpX29wZikpIHsKJiM0MzsJCWludCByZXQ7CiYjNDM7CiYjNDM7CQlyZXQgPSBiaW9fc3BsaXRfaW9fYXRfZG1hYnVmKGJpbywgbGltLCAmYW1wO25zZWdzLCBtYXhfYnl0ZXMsCiYjNDM7CQkJCQkgICAgIGxlbl9hbGlnbl9tYXNrLCBzdGFydF9hbGlnbl9tYXNrKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CQlpZiAoIXJldCkKJiM0MzsJCQlnb3RvIG91dDsKJiM0MzsJCWJ5dGVzID0gcmV0OwomIzQzOwkJZ290byBzcGxpdDsKJiM0MzsJfQomIzQzOwogCWJpb19mb3JfZWFjaF9idmVjKGJ2LCBiaW8sIGl0ZXIpIHsKIAkJaWYgKGJ2LmJ2X29mZnNldCAmYW1wOyBzdGFydF9hbGlnbl9tYXNrIHx8CiAJCSAgICBidi5idl9sZW4gJmFtcDsgbGVuX2FsaWduX21hc2spCkBAIC0zNzYsNiAmIzQzOzQxMiw3IEBAIGludCBiaW9fc3BsaXRfaW9fYXQoc3RydWN0IGJpbyAqYmlvLCBjb25zdCBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0sCiAJCWJ2cHJ2cCA9ICZhbXA7YnZwcnY7CiAJfQogCiYjNDM7b3V0OgogCSpzZWdzID0gbnNlZ3M7CiAJYmlvLSZndDtiaV9idmVjX2dhcF9iaXQgPSBmZnMoZ2Fwcyk7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9ibG9jay9ibGstbXEtZG1hLmMgYi9ibG9jay9ibGstbXEtZG1hLmMKaW5kZXggYmZkYjllZDcwNzQxMS4uODhmZDljYmM5NTFmNCAxMDA2NDQKLS0tIGEvYmxvY2svYmxrLW1xLWRtYS5jCiYjNDM7JiM0MzsmIzQzOyBiL2Jsb2NrL2Jsay1tcS1kbWEuYwpAQCAtNDQsNyAmIzQzOzQ0LDcgQEAgc3RhdGljIGJvb2wgYmxrX21hcF9pdGVyX25leHQoc3RydWN0IHJlcXVlc3QgKnJlcSwgc3RydWN0IGJsa19tYXBfaXRlciAqaXRlciwKIAkgKiBvbmUgY291bGQgYmUgbWVyZ2VkIGludG8gaXQuICBUaGlzIHR5cGljYWxseSBoYXBwZW5zIHdoZW4gbW92aW5nIHRvCiAJICogdGhlIG5leHQgYmlvLCBidXQgc29tZSBjYWxsZXJzIGFsc28gZG9uJiMzOTt0IHBhY2sgYnZlY3MgdGlnaHQuCiAJICovCi0Jd2hpbGUgKCFpdGVyLSZndDtpdGVyLmJpX3NpemUgfHwgIWl0ZXItJmd0O2l0ZXIuYmlfYnZlY19kb25lKSB7CiYjNDM7CXdoaWxlICghaXRlci0mZ3Q7aXRlci5iaV9zaXplIHx8ICFpdGVyLSZndDtpdGVyLmJpX29mZnNldCkgewogCQlzdHJ1Y3QgYmlvX3ZlYyBuZXh0OwogCiAJCWlmICghX19ibGtfbWFwX2l0ZXJfbmV4dChpdGVyKSkKZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay5oIGIvYmxvY2svYmxrLmgKaW5kZXggZWFhYzA1ODE1Y2IwMy4uNTBhYmZkOTMyODg2MSAxMDA2NDQKLS0tIGEvYmxvY2svYmxrLmgKJiM0MzsmIzQzOyYjNDM7IGIvYmxvY2svYmxrLmgKQEAgLTQwNiw3ICYjNDM7NDA2LDcgQEAgc3RhdGljIGlubGluZSBib29sIGJpb19tYXlfbmVlZF9zcGxpdChzdHJ1Y3QgYmlvICpiaW8sCiAJCXJldHVybiB0cnVlOwogCiAJYnYgPSBfX2J2ZWNfaXRlcl9idmVjKGJpby0mZ3Q7YmlfaW9fdmVjLCBiaW8tJmd0O2JpX2l0ZXIpOwotCWlmIChiaW8tJmd0O2JpX2l0ZXIuYmlfc2l6ZSAmZ3Q7IGJ2LSZndDtidl9sZW4gLSBiaW8tJmd0O2JpX2l0ZXIuYmlfYnZlY19kb25lKQomIzQzOwlpZiAoYmlvLSZndDtiaV9pdGVyLmJpX3NpemUgJmd0OyBidi0mZ3Q7YnZfbGVuIC0gYmlvLSZndDtiaV9pdGVyLmJpX29mZnNldCkKIAkJcmV0dXJuIHRydWU7CiAJaWYgKChidi0mZ3Q7YnZfb2Zmc2V0IHwgYnYtJmd0O2J2X2xlbikgJmFtcDsgbGltLSZndDtkbWFfYWxpZ25tZW50KQogCQlyZXR1cm4gdHJ1ZTsKZGlmZiAtLWdpdCBhL2Jsb2NrL2ZvcHMuYyBiL2Jsb2NrL2ZvcHMuYwppbmRleCAzYzIwOTlkZmVmMWQ1Li4zYzQwM2FmYjBmNjQ2IDEwMDY0NAotLS0gYS9ibG9jay9mb3BzLmMKJiM0MzsmIzQzOyYjNDM7IGIvYmxvY2svZm9wcy5jCkBAIC0zNDIsMTUgJiM0MzszNDIsMTMgQEAgc3RhdGljIHNzaXplX3QgX19ibGtkZXZfZGlyZWN0X0lPX2FzeW5jKHN0cnVjdCBraW9jYiAqaW9jYiwKIAliaW8tJmd0O2JpX2VuZF9pbyA9IGJsa2Rldl9iaW9fZW5kX2lvX2FzeW5jOwogCWJpby0mZ3Q7YmlfaW9wcmlvID0gaW9jYi0mZ3Q7a2lfaW9wcmlvOwogCi0JaWYgKGlvdl9pdGVyX2lzX2J2ZWMoaXRlcikpIHsKLQkJLyoKLQkJICogVXNlcnMgZG9uJiMzOTt0IHJlbHkgb24gdGhlIGl0ZXJhdG9yIGJlaW5nIGluIGFueSBwYXJ0aWN1bGFyCi0JCSAqIHN0YXRlIGZvciBhc3luYyBJL08gcmV0dXJuaW5nIC1FSU9DQlFVRVVFRCwgaGVuY2Ugd2UgY2FuCi0JCSAqIGF2b2lkIGV4cGVuc2l2ZSBpb3ZfaXRlcl9hZHZhbmNlKCkuIEJ5cGFzcwotCQkgKiBiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzKCkgYW5kIHNldCB0aGUgYnZlYyBkaXJlY3RseS4KLQkJICovCi0JCWJpb19pb3ZfYnZlY19zZXQoYmlvLCBpdGVyKTsKLQl9IGVsc2UgewomIzQzOwkvKgomIzQzOwkgKiBVc2VycyBkb24mIzM5O3QgcmVseSBvbiB0aGUgaXRlcmF0b3IgYmVpbmcgaW4gYW55IHBhcnRpY3VsYXIKJiM0MzsJICogc3RhdGUgZm9yIGFzeW5jIEkvTyByZXR1cm5pbmcgLUVJT0NCUVVFVUVELCBoZW5jZSB3ZSBjYW4KJiM0MzsJICogYXZvaWQgZXhwZW5zaXZlIGlvdl9pdGVyX2FkdmFuY2UoKS4gQnlwYXNzCiYjNDM7CSAqIGJpb19pb3ZfaXRlcl9nZXRfcGFnZXMoKSBhbmQgc2V0IHRoZSBidmVjL2RtYWJ1ZiBkaXJlY3RseS4KJiM0MzsJICovCiYjNDM7CWlmICghYmlvX2lvdl9pdGVyX3NldChiaW8sIGl0ZXIpKSB7CiAJCXJldCA9IGJsa2Rldl9pb3ZfaXRlcl9nZXRfcGFnZXMoYmlvLCBpdGVyLCBiZGV2KTsKIAkJaWYgKHVubGlrZWx5KHJldCkpCiAJCQlnb3RvIG91dF9iaW9fcHV0OwpAQCAtNzY5LDYgJiM0Mzs3NjcsOSBAQCBzdGF0aWMgc3NpemVfdCBibGtkZXZfd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSkKIAkJCXJldCA9IGRpcmVjdF93cml0ZV9mYWxsYmFjayhpb2NiLCBmcm9tLCByZXQsCiAJCQkJCWJsa2Rldl9idWZmZXJlZF93cml0ZShpb2NiLCBmcm9tKSk7CiAJfSBlbHNlIHsKJiM0MzsJCWlmICh1bmxpa2VseShpb3ZfaXRlcl9pc19kbWFidWZfbWFwKGZyb20pKSkKJiM0MzsJCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CiAJCS8qCiAJCSAqIFRha2UgaV9yd3NlbSBhbmQgaW52YWxpZGF0ZV9sb2NrIHRvIGF2b2lkIHJhY2luZyB3aXRoCiAJCSAqIHNldF9ibG9ja3NpemUgY2hhbmdpbmcgaV9ibGtiaXRzL2ZvbGlvIG9yZGVyIGFuZCBwdW5jaGluZwpAQCAtODIzLDYgJiM0Mzs4MjQsOCBAQCBzdGF0aWMgc3NpemVfdCBibGtkZXZfcmVhZF9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICp0bykKIAkJaWYgKHJldCAmbHQ7IDAgfHwgIWNvdW50KQogCQkJZ290byByZWV4cGFuZDsKIAl9CiYjNDM7CWlmICh1bmxpa2VseShpb3ZfaXRlcl9pc19kbWFidWZfbWFwKHRvKSkpCiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKIAkvKgogCSAqIFRha2UgaV9yd3NlbSBhbmQgaW52YWxpZGF0ZV9sb2NrIHRvIGF2b2lkIHJhY2luZyB3aXRoIHNldF9ibG9ja3NpemUKQEAgLTkyNiw2ICYjNDM7OTI5LDE5IEBAIHN0YXRpYyBpbnQgYmxrZGV2X21tYXBfcHJlcGFyZShzdHJ1Y3Qgdm1fYXJlYV9kZXNjICpkZXNjKQogCXJldHVybiBnZW5lcmljX2ZpbGVfbW1hcF9wcmVwYXJlKGRlc2MpOwogfQogCiYjNDM7c3RhdGljIGludCBibGtkZXZfaW5pdF9kbWFfYnVmX2lvX2N0eChzdHJ1Y3QgZmlsZSAqZmlsZSwKJiM0MzsJCQkJICAgICAgc3RydWN0IGRtYV9idWZfaW9fY3R4ICpjdHgpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2ID0gZmlsZV9iZGV2KGZpbGUpOwomIzQzOwlzdHJ1Y3QgZ2VuZGlzayAqZGlzayA9IGJkZXYtJmd0O2JkX2Rpc2s7CiYjNDM7CiYjNDM7CWlmICghKGZpbGUtJmd0O2ZfZmxhZ3MgJmFtcDsgT19ESVJFQ1QpKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CWlmICghZGlzay0mZ3Q7Zm9wcy0mZ3Q7aW5pdF9kbWFfYnVmX2lvX2N0eCkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwlyZXR1cm4gZGlzay0mZ3Q7Zm9wcy0mZ3Q7aW5pdF9kbWFfYnVmX2lvX2N0eChiZGV2LCBjdHgpOwomIzQzO30KJiM0MzsKIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZGVmX2Jsa19mb3BzID0gewogCS5vcGVuCQk9IGJsa2Rldl9vcGVuLAogCS5yZWxlYXNlCT0gYmxrZGV2X3JlbGVhc2UsCkBAIC05NDQsNiAmIzQzOzk2MCw3IEBAIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZGVmX2Jsa19mb3BzID0gewogCS5mYWxsb2NhdGUJPSBibGtkZXZfZmFsbG9jYXRlLAogCS51cmluZ19jbWQJPSBibGtkZXZfdXJpbmdfY21kLAogCS5mb3BfZmxhZ3MJPSBGT1BfQlVGRkVSX1JBU1lOQyB8IEZPUF9ET05UQ0FDSEUsCiYjNDM7CS5pbml0X2RtYV9idWZfaW9fY3R4ID0gYmxrZGV2X2luaXRfZG1hX2J1Zl9pb19jdHgsCiB9OwogCiBzdGF0aWMgX19pbml0IGludCBibGtkZXZfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9sb29wLmMgYi9kcml2ZXJzL2Jsb2NrL2xvb3AuYwppbmRleCAyNmQ3MTMwYzNmNTU5Li44NjM5ZmEzNGI4NDcwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL2xvb3AuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Jsb2NrL2xvb3AuYwpAQCAtMzc5LDcgJiM0MzszNzksNyBAQCBzdGF0aWMgaW50IGxvX3J3X2FpbyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBzdHJ1Y3QgbG9vcF9jbWQgKmNtZCwKIAkJaW92X2l0ZXJfYnZlYygmYW1wO2l0ZXIsIHJ3LAogCQkJX19idmVjX2l0ZXJfYnZlYyhycS0mZ3Q7YmlvLSZndDtiaV9pb192ZWMsIHJxLSZndDtiaW8tJmd0O2JpX2l0ZXIpLAogCQkJbnJfYnZlYywgYmxrX3JxX2J5dGVzKHJxKSk7Ci0JCWl0ZXIuaW92X29mZnNldCA9IHJxLSZndDtiaW8tJmd0O2JpX2l0ZXIuYmlfYnZlY19kb25lOwomIzQzOwkJaXRlci5pb3Zfb2Zmc2V0ID0gcnEtJmd0O2Jpby0mZ3Q7YmlfaXRlci5iaV9vZmZzZXQ7CiAJfQogCWF0b21pY19zZXQoJmFtcDtjbWQtJmd0O3JlZiwgMik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svemxvb3AuYyBiL2RyaXZlcnMvYmxvY2svemxvb3AuYwppbmRleCBmOTdhMjBjZmRiN2NlLi4wZmVmNWRiOGU1YjgwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL3psb29wLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ibG9jay96bG9vcC5jCkBAIC01NTQsNyAmIzQzOzU1NCw3IEBAIHN0YXRpYyBpbnQgemxvb3BfZG9fcncoc3RydWN0IHpsb29wX2NtZCAqY21kKQogCQlpb3ZfaXRlcl9idmVjKCZhbXA7aXRlciwgcncsCiAJCQlfX2J2ZWNfaXRlcl9idmVjKHJxLSZndDtiaW8tJmd0O2JpX2lvX3ZlYywgcnEtJmd0O2Jpby0mZ3Q7YmlfaXRlciksCiAJCQkJCW5yX2J2ZWMsIGJsa19ycV9ieXRlcyhycSkpOwotCQlpdGVyLmlvdl9vZmZzZXQgPSBycS0mZ3Q7YmlvLSZndDtiaV9pdGVyLmJpX2J2ZWNfZG9uZTsKJiM0MzsJCWl0ZXIuaW92X29mZnNldCA9IHJxLSZndDtiaW8tJmd0O2JpX2l0ZXIuYmlfb2Zmc2V0OwogCX0KIAogCWNtZC0mZ3Q7aW9jYi5raV9wb3MgPSAoY21kLSZndDtzZWN0b3IgLSB6b25lLSZndDtzdGFydCkgJmx0OyZsdDsgU0VDVE9SX1NISUZUOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEtYnVmL01ha2VmaWxlIGIvZHJpdmVycy9kbWEtYnVmL01ha2VmaWxlCmluZGV4IGIyNWQ3NTUwYmFjZmQuLjUyMzczMWIwZjgzZWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZG1hLWJ1Zi9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2RtYS1idWYvTWFrZWZpbGUKQEAgLTEsNiAmIzQzOzEsNiBAQAogIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5CiBvYmoteSA6PSBkbWEtYnVmLm8gZG1hLWZlbmNlLm8gZG1hLWZlbmNlLWFycmF5Lm8gZG1hLWZlbmNlLWNoYWluLm8gXAotCSBkbWEtZmVuY2UtdW53cmFwLm8gZG1hLXJlc3YubyBkbWEtYnVmLW1hcHBpbmcubwomIzQzOwkgZG1hLWZlbmNlLXVud3JhcC5vIGRtYS1yZXN2Lm8gZG1hLWJ1Zi1tYXBwaW5nLm8gZG1hLWJ1Zi1pby5vCiBvYmotJChDT05GSUdfRE1BQlVGX0hFQVBTKQkmIzQzOz0gZG1hLWhlYXAubwogb2JqLSQoQ09ORklHX0RNQUJVRl9IRUFQUykJJiM0Mzs9IGhlYXBzLwogb2JqLSQoQ09ORklHX1NZTkNfRklMRSkJCSYjNDM7PSBzeW5jX2ZpbGUubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEtYnVmL2RtYS1idWYtaW8uYyBiL2RyaXZlcnMvZG1hLWJ1Zi9kbWEtYnVmLWlvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uMjRmNThmODBjNDVjNAotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZG1hLWJ1Zi9kbWEtYnVmLWlvLmMKQEAgLTAsMCAmIzQzOzEsMjc4IEBACiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi8KJiM0MzsvKgomIzQzOyAqIENvbW1vbiBpbmZyYXN0cnVjdHVyZSBmb3Igc3VwcG9yaW5nIGRtYS1idWYgaW4gdGhlIEkvTyBwYXRoLgomIzQzOyAqCiYjNDM7ICogQ29weXJpZ2h0IChDKSAyMDI2IFBhdmVsIEJlZ3Vua292ICZsdDthc21sLnNpbGVuY2VAZ21haWwuY29tJmd0OwomIzQzOyAqLwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9kbWEtYnVmLWlvLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2RtYS1yZXN2LmgmZ3Q7CiYjNDM7CiYjNDM7c3RydWN0IGRtYV9idWZfaW9fZmVuY2UgewomIzQzOwlzdHJ1Y3QgZG1hX2ZlbmNlIGJhc2U7CiYjNDM7CXNwaW5sb2NrX3QgbG9jazsKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBjaGFyICpkbWFfYnVmX2lvX2ZlbmNlX2Rydl9uYW1lKHN0cnVjdCBkbWFfZmVuY2UgKmZlbmNlKQomIzQzO3sKJiM0MzsJLyogZGVmYXVsdCBmZW5jZSByZWxlYXNlIGtmcmVlJiMzOTtzIHRoZSBiYXNlIHBvaW50ZXIgKi8KJiM0MzsJQlVJTERfQlVHX09OKG9mZnNldG9mKHN0cnVjdCBkbWFfYnVmX2lvX2ZlbmNlLCBiYXNlKSk7CiYjNDM7CiYjNDM7CXJldHVybiAmIzM0O2RtYS1idWYtaW8tY3R4JiMzNDs7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBjaGFyICpkbWFfYnVmX2lvX2ZlbmNlX3RpbWVsaW5lX25hbWUoc3RydWN0IGRtYV9mZW5jZSAqZmVuY2UpCiYjNDM7ewomIzQzOwlyZXR1cm4gJiMzNDtkbWEtYnVmLWlvLWN0eCYjMzQ7OwomIzQzO30KJiM0MzsKJiM0Mztjb25zdCBzdHJ1Y3QgZG1hX2ZlbmNlX29wcyBkbWFfYnVmX2lvX2ZlbmNlX29wcyA9IHsKJiM0MzsJLmdldF9kcml2ZXJfbmFtZSA9IGRtYV9idWZfaW9fZmVuY2VfZHJ2X25hbWUsCiYjNDM7CS5nZXRfdGltZWxpbmVfbmFtZSA9IGRtYV9idWZfaW9fZmVuY2VfdGltZWxpbmVfbmFtZSwKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGRtYV9idWZfaW9fY3R4X2Rlc3Ryb3lfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZG1hX2J1Zl9pb19jdHggKmN0eCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZG1hX2J1Zl9pb19jdHgsCiYjNDM7CQkJCQkJICByZWxlYXNlX3dvcmspOwomIzQzOwomIzQzOwlpZiAoV0FSTl9PTl9PTkNFKHJlZmNvdW50X3JlYWQoJmFtcDtjdHgtJmd0O3JlZnMpKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJY3R4LSZndDtkZXZfb3BzLSZndDtyZWxlYXNlKGN0eCk7CiYjNDM7CWRtYV9idWZfcHV0KGN0eC0mZ3Q7ZG1hYnVmKTsKJiM0MzsJa2ZyZWUoY3R4KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgZG1hX2J1Zl9pb19tYXBfcmVsZWFzZV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkbWFfYnVmX2lvX21hcCAqbWFwID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBkbWFfYnVmX2lvX21hcCwKJiM0MzsJCQkJCQkgIHJlbGVhc2Vfd29yayk7CiYjNDM7CXN0cnVjdCBkbWFfYnVmX2lvX2ZlbmNlICpmZW5jZSA9IG1hcC0mZ3Q7ZmVuY2U7CiYjNDM7CXN0cnVjdCBkbWFfYnVmX2lvX2N0eCAqY3R4ID0gbWFwLSZndDtjdHg7CiYjNDM7CXN0cnVjdCBkbWFfYnVmICpkbWFidWYgPSBjdHgtJmd0O2RtYWJ1ZjsKJiM0MzsKJiM0MzsJLyogdGhlIHJlbGVhc2UgcGF0aCBtdXN0IHdhaXQgZm9yIGZlbmNlcyAqLwomIzQzOwlpZiAoV0FSTl9PTl9PTkNFKHJlZmNvdW50X3JlYWQoJmFtcDtjdHgtJmd0O3JlZnMpID09IDApKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwkvKiBQcmV2ZW50IGZyb20gZGVzdG95aW5nIHRoZSBjdHggd2hpbGUgdW5tYXBwaW5nICovCiYjNDM7CXJlZmNvdW50X2luYygmYW1wO2N0eC0mZ3Q7cmVmcyk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFRoZXJlIGFyZSBubyBtb3JlIHJlcXVlc3RzIHVzaW5nIHRoZSBtYXAsIHdlIGNhbiBzaWduYWwgdGhlIGZlbmNlLgomIzQzOwkgKiBJdCBzaG91bGQgYmUgZG9uZSBiZWZvcmUgdGFraW5nIHRoZSByZXN2IGxvY2sgYXMgc29tZW9uZSBjb3VsZCBiZQomIzQzOwkgKiB3YWl0aW5nIGZvciB0aGUgZmVuY2Ugd2hpbGUgaG9sZGluZyB0aGUgbG9jay4KJiM0MzsJICovCiYjNDM7CWRtYV9mZW5jZV9zaWduYWwoJmFtcDtmZW5jZS0mZ3Q7YmFzZSk7CiYjNDM7CiYjNDM7CWRtYV9yZXN2X2xvY2soZG1hYnVmLSZndDtyZXN2LCBOVUxMKTsKJiM0MzsJY3R4LSZndDtkZXZfb3BzLSZndDt1bm1hcChjdHgsIG1hcCk7CiYjNDM7CWRtYV9yZXN2X3VubG9jayhkbWFidWYtJmd0O3Jlc3YpOwomIzQzOwomIzQzOwlkbWFfZmVuY2VfcHV0KCZhbXA7ZmVuY2UtJmd0O2Jhc2UpOwomIzQzOwlwZXJjcHVfcmVmX2V4aXQoJmFtcDttYXAtJmd0O3JlZnMpOwomIzQzOwlrZnJlZShtYXApOwomIzQzOwomIzQzOwlpZiAocmVmY291bnRfZGVjX2FuZF90ZXN0KCZhbXA7Y3R4LSZndDtyZWZzKSkgewomIzQzOwkJLyoKJiM0MzsJCSAqIERlc3RydWN0aW9uIG5lZWRzIHRvIHdhaXQgZm9yIEkvTyBhbmQgZG1hIGZlbmNlcy4gRGVmZXIgaXQgdG8KJiM0MzsJCSAqIHNpbXBsaWZ5IGxvY2tpbmcuCiYjNDM7CQkgKi8KJiM0MzsJCUlOSVRfV09SSygmYW1wO2N0eC0mZ3Q7cmVsZWFzZV93b3JrLCBkbWFfYnVmX2lvX2N0eF9kZXN0cm95X3dvcmspOwomIzQzOwkJcXVldWVfd29yayhzeXN0ZW1fd3EsICZhbXA7Y3R4LSZndDtyZWxlYXNlX3dvcmspOwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGRtYV9idWZfaW9fbWFwX3JlZnNfcmVsZWFzZShzdHJ1Y3QgcGVyY3B1X3JlZiAqcmVmKQomIzQzO3sKJiM0MzsJc3RydWN0IGRtYV9idWZfaW9fbWFwICptYXAgPSBjb250YWluZXJfb2YocmVmLCBzdHJ1Y3QgZG1hX2J1Zl9pb19tYXAsIHJlZnMpOwomIzQzOwomIzQzOwkvKiBtaWdodCBzbGVlcCwgdXNlIGEgd29ya2VyICovCiYjNDM7CUlOSVRfV09SSygmYW1wO21hcC0mZ3Q7cmVsZWFzZV93b3JrLCBkbWFfYnVmX2lvX21hcF9yZWxlYXNlX3dvcmspOwomIzQzOwlxdWV1ZV93b3JrKHN5c3RlbV93cSwgJmFtcDttYXAtJmd0O3JlbGVhc2Vfd29yayk7CiYjNDM7fQomIzQzOwomIzQzO2ludCBkbWFfYnVmX2lvX2luaXRfbWFwKHN0cnVjdCBkbWFfYnVmX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZG1hX2J1Zl9pb19tYXAgKm1hcCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkbWFfYnVmX2lvX2ZlbmNlICpmZW5jZSA9IE5VTEw7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWZlbmNlID0ga3phbGxvYyhzaXplb2YoKmZlbmNlKSwgR0ZQX0tFUk5FTCk7CiYjNDM7CWlmICghZmVuY2UpCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsKJiM0MzsJcmV0ID0gcGVyY3B1X3JlZl9pbml0KCZhbXA7bWFwLSZndDtyZWZzLCBkbWFfYnVmX2lvX21hcF9yZWZzX3JlbGVhc2UsIDAsIEdGUF9LRVJORUwpOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQlrZnJlZShmZW5jZSk7CiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwl9CiYjNDM7CiYjNDM7CXNwaW5fbG9ja19pbml0KCZhbXA7ZmVuY2UtJmd0O2xvY2spOwomIzQzOwlkbWFfZmVuY2VfaW5pdCgmYW1wO2ZlbmNlLSZndDtiYXNlLCAmYW1wO2RtYV9idWZfaW9fZmVuY2Vfb3BzLCAmYW1wO2ZlbmNlLSZndDtsb2NrLAomIzQzOwkJCWN0eC0mZ3Q7ZmVuY2VfY3R4LCBhdG9taWNfaW5jX3JldHVybigmYW1wO2N0eC0mZ3Q7ZmVuY2Vfc2VxKSk7CiYjNDM7CW1hcC0mZ3Q7ZmVuY2UgPSBmZW5jZTsKJiM0MzsJbWFwLSZndDtjdHggPSBjdHg7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX05TX0dQTChkbWFfYnVmX2lvX2luaXRfbWFwLCAmIzM0O0RNQV9CVUYmIzM0Oyk7CiYjNDM7CiYjNDM7c3RydWN0IGRtYV9idWZfaW9fbWFwICpkbWFfYnVmX2lvX2NyZWF0ZV9tYXAoc3RydWN0IGRtYV9idWZfaW9fY3R4ICpjdHgpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmID0gY3R4LSZndDtkbWFidWY7CiYjNDM7CXN0cnVjdCBkbWFfYnVmX2lvX21hcCAqbWFwOwomIzQzOwlsb25nIHJldDsKJiM0MzsKJiM0MztyZXRyeToKJiM0MzsJLyoKJiM0MzsJICogLSZndDtkbWFidWZfbWFwKCkgd2lsbCBiZSBjYWxsaW5nIGRtYV9idWZfbWFwX2F0dGFjaG1lbnQoKSwgZm9yIHdoaWNoCiYjNDM7CSAqIHdlJiMzOTtsbCBuZWVkIHRvIHdhaXQgZm9yIGZlbmNlcy4gRG8gYSBiaXQgbmljZXIgYW5kIHRyeSB0byB3YWl0CiYjNDM7CSAqIHdpdGhvdXQgdGhlIHJlc3YgbG9jayBmaXJzdC4KJiM0MzsJICovCiYjNDM7CXJldCA9IGRtYV9yZXN2X3dhaXRfdGltZW91dChkbWFidWYtJmd0O3Jlc3YsIERNQV9SRVNWX1VTQUdFX0tFUk5FTCwKJiM0MzsJCQkJICAgIHRydWUsIE1BWF9TQ0hFRFVMRV9USU1FT1VUKTsKJiM0MzsJaWYgKCFyZXQpCiYjNDM7CQlyZXQgPSAtRUFHQUlOOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiBFUlJfUFRSKHJldCk7CiYjNDM7CiYjNDM7CXJldCA9IGRtYV9yZXN2X2xvY2tfaW50ZXJydXB0aWJsZShkbWFidWYtJmd0O3Jlc3YsIE5VTEwpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIEVSUl9QVFIocmV0KTsKJiM0MzsKJiM0MzsJbWFwID0gZG1hX2J1Zl9pb19nZXRfbWFwKGN0eCk7CiYjNDM7CWlmIChtYXApIHsKJiM0MzsJCXJldCA9IDA7CiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoZG1hX3Jlc3Zfd2FpdF90aW1lb3V0KGRtYWJ1Zi0mZ3Q7cmVzdiwgRE1BX1JFU1ZfVVNBR0VfS0VSTkVMLAomIzQzOwkJCQkgIHRydWUsIDApICZsdDsgMCkgewomIzQzOwkJZG1hX3Jlc3ZfdW5sb2NrKGRtYWJ1Zi0mZ3Q7cmVzdik7CiYjNDM7CQlnb3RvIHJldHJ5OwomIzQzOwl9CiYjNDM7CiYjNDM7CW1hcCA9IGN0eC0mZ3Q7ZGV2X29wcy0mZ3Q7bWFwKGN0eCk7CiYjNDM7CWlmIChJU19FUlIobWFwKSkgewomIzQzOwkJcmV0ID0gUFRSX0VSUihtYXApOwomIzQzOwkJZ290byBvdXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKFdBUk5fT05fT05DRSghbWFwLSZndDtzZWdfc2hpZnQpKQomIzQzOwkJcmV0dXJuIEVSUl9QVFIoLUVGQVVMVCk7CiYjNDM7CiYjNDM7CXBlcmNwdV9yZWZfZ2V0KCZhbXA7bWFwLSZndDtyZWZzKTsKJiM0MzsJcmN1X2Fzc2lnbl9wb2ludGVyKGN0eC0mZ3Q7bWFwLCBtYXApOwomIzQzO291dDoKJiM0MzsJZG1hX3Jlc3ZfdW5sb2NrKGRtYWJ1Zi0mZ3Q7cmVzdik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIEVSUl9QVFIocmV0KTsKJiM0MzsJcmV0dXJuIG1hcDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgZG1hX2J1Zl9pb19kcm9wX21hcChzdHJ1Y3QgZG1hX2J1Zl9pb19jdHggKmN0eCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkbWFfYnVmICpkbWFidWYgPSBjdHgtJmd0O2RtYWJ1ZjsKJiM0MzsJc3RydWN0IGRtYV9idWZfaW9fbWFwICptYXA7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWRtYV9yZXN2X2Fzc2VydF9oZWxkKGRtYWJ1Zi0mZ3Q7cmVzdik7CiYjNDM7CiYjNDM7CW1hcCA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoY3R4LSZndDttYXAsCiYjNDM7CQkJCQlkbWFfcmVzdl9oZWxkKGRtYWJ1Zi0mZ3Q7cmVzdikpOwomIzQzOwlpZiAoIW1hcCkKJiM0MzsJCXJldHVybjsKJiM0MzsJcmN1X2Fzc2lnbl9wb2ludGVyKGN0eC0mZ3Q7bWFwLCBOVUxMKTsKJiM0MzsKJiM0MzsJcmV0ID0gZG1hX3Jlc3ZfcmVzZXJ2ZV9mZW5jZXMoZG1hYnVmLSZndDtyZXN2LCAxKTsKJiM0MzsJaWYgKFdBUk5fT05fT05DRShyZXQpKSB7CiYjNDM7CQlzdHJ1Y3QgZG1hX2ZlbmNlICpmZW5jZSA9ICZhbXA7bWFwLSZndDtmZW5jZS0mZ3Q7YmFzZTsKJiM0MzsKJiM0MzsJCWRtYV9mZW5jZV9nZXQoZmVuY2UpOwomIzQzOwkJcGVyY3B1X3JlZl9raWxsKCZhbXA7bWFwLSZndDtyZWZzKTsKJiM0MzsJCWRtYV9mZW5jZV93YWl0KGZlbmNlLCBmYWxzZSk7CiYjNDM7CQlkbWFfZmVuY2VfcHV0KGZlbmNlKTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwlkbWFfcmVzdl9hZGRfZmVuY2UoZG1hYnVmLSZndDtyZXN2LCAmYW1wO21hcC0mZ3Q7ZmVuY2UtJmd0O2Jhc2UsCiYjNDM7CQkJICAgRE1BX1JFU1ZfVVNBR0VfS0VSTkVMKTsKJiM0MzsJLyoKJiM0MzsJICogRGVsYXkgZGVzdHJ1Y3Rpb24gdW50aWwgYWxsIGluZmxpZ2h0IHJlcXVlc3RzIHVzaW5nIHRoZSBtYXAgYXJlCiYjNDM7CSAqIGdvbmUuIEl0JiMzOTtsbCBhbHNvIHNpZ25hbCB0aGUgZmVuY2UgdGhlbi4KJiM0MzsJICovCiYjNDM7CXBlcmNwdV9yZWZfa2lsbCgmYW1wO21hcC0mZ3Q7cmVmcyk7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgZG1hX2J1Zl9pb19pbnZhbGlkYXRlX21hcHBpbmdzKHN0cnVjdCBkbWFfYnVmX2lvX2N0eCAqY3R4KQomIzQzO3sKJiM0MzsJZG1hX2J1Zl9pb19kcm9wX21hcChjdHgpOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX05TX0dQTChkbWFfYnVmX2lvX2ludmFsaWRhdGVfbWFwcGluZ3MsICYjMzQ7RE1BX0JVRiYjMzQ7KTsKJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBkbWFfYnVmX2lvX2N0eF9yZWxlYXNlX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQomIzQzO3sKJiM0MzsJc3RydWN0IGRtYV9idWZfaW9fY3R4ICpjdHggPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGRtYV9idWZfaW9fY3R4LAomIzQzOwkJCQkJCSAgcmVsZWFzZV93b3JrKTsKJiM0MzsJc3RydWN0IGRtYV9idWYgKmRtYWJ1ZiA9IGN0eC0mZ3Q7ZG1hYnVmOwomIzQzOwlsb25nIHJldDsKJiM0MzsKJiM0MzsJZG1hX3Jlc3ZfbG9jayhkbWFidWYtJmd0O3Jlc3YsIE5VTEwpOwomIzQzOwkvKiBSZW1vdmUgdGhlIGxhc3QgbWFwLCB0aGVyZSBzaG91bGQgYmUgbm8gbmV3IG9uZXMgZ29pbmcgZm9yd2FyZC4gKi8KJiM0MzsJZG1hX2J1Zl9pb19kcm9wX21hcChjdHgpOwomIzQzOwlkbWFfcmVzdl91bmxvY2soZG1hYnVmLSZndDtyZXN2KTsKJiM0MzsKJiM0MzsJLyogV2FpdCB1bnRpbCBhbGwgbWFwcyBhcmUgZGVzdHJveWVkLiAqLwomIzQzOwlyZXQgPSBkbWFfcmVzdl93YWl0X3RpbWVvdXQoZG1hYnVmLSZndDtyZXN2LCBETUFfUkVTVl9VU0FHRV9LRVJORUwsCiYjNDM7CQkJCSAgICBmYWxzZSwgTUFYX1NDSEVEVUxFX1RJTUVPVVQpOwomIzQzOwomIzQzOwlpZiAoV0FSTl9PTl9PTkNFKHJldCAmbHQ7PSAwKSkKJiM0MzsJCXJldHVybjsKJiM0MzsJaWYgKFdBUk5fT05fT05DRShyY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKGN0eC0mZ3Q7bWFwLCB0cnVlKSkpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWlmIChyZWZjb3VudF9kZWNfYW5kX3Rlc3QoJmFtcDtjdHgtJmd0O3JlZnMpKQomIzQzOwkJZG1hX2J1Zl9pb19jdHhfZGVzdHJveV93b3JrKCZhbXA7Y3R4LSZndDtyZWxlYXNlX3dvcmspOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIGRtYV9idWZfaW9fY3R4X3JlbGVhc2Uoc3RydWN0IGRtYV9idWZfaW9fY3R4ICpjdHgpCiYjNDM7ewomIzQzOwkvKgomIzQzOwkgKiBEZXN0cnVjdGlvbiBuZWVkcyB0byB3YWl0IGZvciBJL08gYW5kIGRtYSBmZW5jZXMuIERlZmVyIGl0IHRvCiYjNDM7CSAqIHNpbXBsaWZ5IGxvY2tpbmcuCiYjNDM7CSAqLwomIzQzOwlJTklUX1dPUksoJmFtcDtjdHgtJmd0O3JlbGVhc2Vfd29yaywgZG1hX2J1Zl9pb19jdHhfcmVsZWFzZV93b3JrKTsKJiM0MzsJcXVldWVfd29yayhzeXN0ZW1fd3EsICZhbXA7Y3R4LSZndDtyZWxlYXNlX3dvcmspOwomIzQzO30KJiM0MzsKJiM0MztpbnQgZG1hX2J1Zl9pb19jdHhfY3JlYXRlKHN0cnVjdCBmaWxlICpmaWxlLAomIzQzOwkJCSAgIHN0cnVjdCBkbWFfYnVmX2lvX2N0eCAqY3R4LAomIzQzOwkJCSAgIHN0cnVjdCBkbWFfYnVmICpkbWFidWYsCiYjNDM7CQkJICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKQomIzQzO3sKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJaWYgKCFmaWxlLSZndDtmX29wLSZndDtpbml0X2RtYV9idWZfaW9fY3R4KQomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwomIzQzOwltZW1zZXQoY3R4LCAwLCBzaXplb2YoKmN0eCkpOwomIzQzOwljdHgtJmd0O2ZlbmNlX2N0eCA9IGRtYV9mZW5jZV9jb250ZXh0X2FsbG9jKDEpOwomIzQzOwljdHgtJmd0O2RpciA9IGRpcjsKJiM0MzsJY3R4LSZndDtkbWFidWYgPSBkbWFidWY7CiYjNDM7CXJlZmNvdW50X3NldCgmYW1wO2N0eC0mZ3Q7cmVmcywgMSk7CiYjNDM7CWdldF9kbWFfYnVmKGRtYWJ1Zik7CiYjNDM7CiYjNDM7CXJldCA9IGZpbGUtJmd0O2Zfb3AtJmd0O2luaXRfZG1hX2J1Zl9pb19jdHgoZmlsZSwgY3R4KTsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJbWVtc2V0KGN0eCwgMCwgc2l6ZW9mKCpjdHgpKTsKJiM0MzsJCWRtYV9idWZfcHV0KGRtYWJ1Zik7CiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChXQVJOX09OX09OQ0UoIWN0eC0mZ3Q7ZGV2X29wcyB8fAomIzQzOwkJCSAhY3R4LSZndDtkZXZfb3BzLSZndDttYXAgfHwKJiM0MzsJCQkgIWN0eC0mZ3Q7ZGV2X29wcy0mZ3Q7dW5tYXAgfHwKJiM0MzsJCQkgIWN0eC0mZ3Q7ZGV2X29wcy0mZ3Q7cmVsZWFzZSkpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2RtLWlvLXJld2luZC5jIGIvZHJpdmVycy9tZC9kbS1pby1yZXdpbmQuYwppbmRleCA2MTU1YjAxMTdjOWQ2Li5iMjI3MTljNjQxMWNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2RtLWlvLXJld2luZC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbWQvZG0taW8tcmV3aW5kLmMKQEAgLTE2LDEyICYjNDM7MTYsMTIgQEAgc3RhdGljIGlubGluZSBib29sIGRtX2J2ZWNfaXRlcl9yZXdpbmQoY29uc3Qgc3RydWN0IGJpb192ZWMgKmJ2LAogCWludCBpZHg7CiAKIAlpdGVyLSZndDtiaV9zaXplICYjNDM7PSBieXRlczsKLQlpZiAoYnl0ZXMgJmx0Oz0gaXRlci0mZ3Q7YmlfYnZlY19kb25lKSB7Ci0JCWl0ZXItJmd0O2JpX2J2ZWNfZG9uZSAtPSBieXRlczsKJiM0MzsJaWYgKGJ5dGVzICZsdDs9IGl0ZXItJmd0O2JpX29mZnNldCkgewomIzQzOwkJaXRlci0mZ3Q7Ymlfb2Zmc2V0IC09IGJ5dGVzOwogCQlyZXR1cm4gdHJ1ZTsKIAl9CiAKLQlieXRlcyAtPSBpdGVyLSZndDtiaV9idmVjX2RvbmU7CiYjNDM7CWJ5dGVzIC09IGl0ZXItJmd0O2JpX29mZnNldDsKIAlpZHggPSBpdGVyLSZndDtiaV9pZHggLSAxOwogCiAJd2hpbGUgKGlkeCAmZ3Q7PSAwICZhbXA7JmFtcDsgYnl0ZXMgJmFtcDsmYW1wOyBieXRlcyAmZ3Q7IGJ2W2lkeF0uYnZfbGVuKSB7CkBAIC0zMiwxMyAmIzQzOzMyLDEzIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBkbV9idmVjX2l0ZXJfcmV3aW5kKGNvbnN0IHN0cnVjdCBiaW9fdmVjICpidiwKIAlpZiAoV0FSTl9PTkNFKGlkeCAmbHQ7IDAgJmFtcDsmYW1wOyBieXRlcywKIAkJICAgICAgJiMzNDtBdHRlbXB0ZWQgdG8gcmV3aW5kIGl0ZXIgYmV5b25kIGJ2ZWMmIzM5O3MgYm91bmRhcmllc1xuJiMzNDspKSB7CiAJCWl0ZXItJmd0O2JpX3NpemUgLT0gYnl0ZXM7Ci0JCWl0ZXItJmd0O2JpX2J2ZWNfZG9uZSA9IDA7CiYjNDM7CQlpdGVyLSZndDtiaV9vZmZzZXQgPSAwOwogCQlpdGVyLSZndDtiaV9pZHggPSAwOwogCQlyZXR1cm4gZmFsc2U7CiAJfQogCiAJaXRlci0mZ3Q7YmlfaWR4ID0gaWR4OwotCWl0ZXItJmd0O2JpX2J2ZWNfZG9uZSA9IGJ2W2lkeF0uYnZfbGVuIC0gYnl0ZXM7CiYjNDM7CWl0ZXItJmd0O2JpX29mZnNldCA9IGJ2W2lkeF0uYnZfbGVuIC0gYnl0ZXM7CiAJcmV0dXJuIHRydWU7CiB9CiAKQEAgLTExMywxMCAmIzQzOzExMywxMiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZG1fYmlvX3Jld2luZF9pdGVyKGNvbnN0IHN0cnVjdCBiaW8gKmJpbywKIAlpdGVyLSZndDtiaV9zZWN0b3IgLT0gYnl0ZXMgJmd0OyZndDsgOTsKIAogCS8qIE5vIGFkdmFuY2UgbWVhbnMgbm8gcmV3aW5kICovCi0JaWYgKGJpb19ub19hZHZhbmNlX2l0ZXIoYmlvKSkKJiM0MzsJaWYgKGJpb19ub19hZHZhbmNlX2l0ZXIoYmlvKSkgewogCQlpdGVyLSZndDtiaV9zaXplICYjNDM7PSBieXRlczsKLQllbHNlCiYjNDM7CQlpdGVyLSZndDtiaV9vZmZzZXQgLT0gYnl0ZXM7CiYjNDM7CX0gZWxzZSB7CiAJCWRtX2J2ZWNfaXRlcl9yZXdpbmQoYmlvLSZndDtiaV9pb192ZWMsIGl0ZXIsIGJ5dGVzKTsKJiM0MzsJfQogfQogCiAvKioKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvZG0tcGNhY2hlL3NlZ21lbnQuYyBiL2RyaXZlcnMvbWQvZG0tcGNhY2hlL3NlZ21lbnQuYwppbmRleCA3ZTk4MTg3MDE0NDUxLi44Zjg4MTZlMWM1MzlmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2RtLXBjYWNoZS9zZWdtZW50LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9tZC9kbS1wY2FjaGUvc2VnbWVudC5jCkBAIC0xNCw3ICYjNDM7MTQsNyBAQCBpbnQgc2VnbWVudF9jb3B5X3RvX2JpbyhzdHJ1Y3QgcGNhY2hlX3NlZ21lbnQgKnNlZ21lbnQsCiAKIAlpb3ZfaXRlcl9idmVjKCZhbXA7aXRlciwgSVRFUl9ERVNULCAmYW1wO2Jpby0mZ3Q7YmlfaW9fdmVjW2Jpby0mZ3Q7YmlfaXRlci5iaV9pZHhdLAogCQkJYmlvX3NlZ21lbnRzKGJpbyksIGJpby0mZ3Q7YmlfaXRlci5iaV9zaXplKTsKLQlpdGVyLmlvdl9vZmZzZXQgPSBiaW8tJmd0O2JpX2l0ZXIuYmlfYnZlY19kb25lOwomIzQzOwlpdGVyLmlvdl9vZmZzZXQgPSBiaW8tJmd0O2JpX2l0ZXIuYmlfb2Zmc2V0OwogCWlmIChiaW9fb2ZmKQogCQlpb3ZfaXRlcl9hZHZhbmNlKCZhbXA7aXRlciwgYmlvX29mZik7CiAKQEAgLTM1LDcgJiM0MzszNSw3IEBAIGludCBzZWdtZW50X2NvcHlfZnJvbV9iaW8oc3RydWN0IHBjYWNoZV9zZWdtZW50ICpzZWdtZW50LAogCiAJaW92X2l0ZXJfYnZlYygmYW1wO2l0ZXIsIElURVJfU09VUkNFLCAmYW1wO2Jpby0mZ3Q7YmlfaW9fdmVjW2Jpby0mZ3Q7YmlfaXRlci5iaV9pZHhdLAogCQkJYmlvX3NlZ21lbnRzKGJpbyksIGJpby0mZ3Q7YmlfaXRlci5iaV9zaXplKTsKLQlpdGVyLmlvdl9vZmZzZXQgPSBiaW8tJmd0O2JpX2l0ZXIuYmlfYnZlY19kb25lOwomIzQzOwlpdGVyLmlvdl9vZmZzZXQgPSBiaW8tJmd0O2JpX2l0ZXIuYmlfb2Zmc2V0OwogCWlmIChiaW9fb2ZmKQogCQlpb3ZfaXRlcl9hZHZhbmNlKCZhbXA7aXRlciwgYmlvX29mZik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbnZkaW1tL2J0dC5jIGIvZHJpdmVycy9udmRpbW0vYnR0LmMKaW5kZXggN2UxMTEyOTYwZDdmOC4uNWQ5MTBhNjQ1MDNkMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9udmRpbW0vYnR0LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9udmRpbW0vYnR0LmMKQEAgLTExNTUsNyAmIzQzOzExNTUsNyBAQCBzdGF0aWMgaW50IGJ0dF9yd19pbnRlZ3JpdHkoc3RydWN0IGJ0dCAqYnR0LCBzdHJ1Y3QgYmlvX2ludGVncml0eV9wYXlsb2FkICpiaXAsCiAJCWJ2ID0gYnZlY19pdGVyX2J2ZWMoYmlwLSZndDtiaXBfdmVjLCBiaXAtJmd0O2JpcF9pdGVyKTsKIAkJLyoKIAkJICogVGhlICYjMzk7YnYmIzM5OyBvYnRhaW5lZCBmcm9tIGJ2ZWNfaXRlcl9idmVjIGhhcyBpdHMgLmJ2X2xlbiBhbmQKLQkJICogLmJ2X29mZnNldCBhbHJlYWR5IGFkanVzdGVkIGZvciBpdGVyLSZndDtiaV9idmVjX2RvbmUsIGFuZCB3ZQomIzQzOwkJICogLmJ2X29mZnNldCBhbHJlYWR5IGFkanVzdGVkIGZvciBpdGVyLSZndDtiaV9vZmZzZXQsIGFuZCB3ZQogCQkgKiBjYW4gdXNlIHRob3NlIGRpcmVjdGx5CiAJCSAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMgYi9kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMKaW5kZXggNDUzYzFmMGIyZGQwOS4uOGJkNDA3NjAzZDkyOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9udm1lL2hvc3QvY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYwpAQCAtMjY3Niw2ICYjNDM7MjY3NiwxNyBAQCBzdGF0aWMgaW50IG52bWVfcmVwb3J0X3pvbmVzKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBzZWN0b3JfdCBzZWN0b3IsCiAjZGVmaW5lIG52bWVfcmVwb3J0X3pvbmVzCU5VTEwKICNlbmRpZiAvKiBDT05GSUdfQkxLX0RFVl9aT05FRCAqLwogCiYjNDM7c3RhdGljIGludCBudm1lX2luaXRfZG1hX2J1Zl9pb19jdHgoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwKJiM0MzsJCXN0cnVjdCBkbWFfYnVmX2lvX2N0eCAqY3R4KQomIzQzO3sKJiM0MzsJc3RydWN0IG52bWVfbnMgKm5zID0gYmRldi0mZ3Q7YmRfZGlzay0mZ3Q7cHJpdmF0ZV9kYXRhOwomIzQzOwlzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsID0gbnMtJmd0O2N0cmw7CiYjNDM7CiYjNDM7CWlmICghY3RybC0mZ3Q7b3BzLSZndDtpbml0X2RtYV9idWZfaW9fY3R4KQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CXJldHVybiBjdHJsLSZndDtvcHMtJmd0O2luaXRfZG1hX2J1Zl9pb19jdHgoY3RybCwgY3R4KTsKJiM0Mzt9CiYjNDM7CiBjb25zdCBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgbnZtZV9iZGV2X29wcyA9IHsKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLmlvY3RsCQk9IG52bWVfaW9jdGwsCkBAIC0yNjg2LDYgJiM0MzsyNjk3LDcgQEAgY29uc3Qgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIG52bWVfYmRldl9vcHMgPSB7CiAJLmdldF91bmlxdWVfaWQJPSBudm1lX2dldF91bmlxdWVfaWQsCiAJLnJlcG9ydF96b25lcwk9IG52bWVfcmVwb3J0X3pvbmVzLAogCS5wcl9vcHMJCT0gJmFtcDtudm1lX3ByX29wcywKJiM0MzsJLmluaXRfZG1hX2J1Zl9pb19jdHggPSBudm1lX2luaXRfZG1hX2J1Zl9pb19jdHgsCiB9OwogCiBzdGF0aWMgaW50IG52bWVfd2FpdF9yZWFkeShzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsLCB1MzIgbWFzaywgdTMyIHZhbCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbnZtZS9ob3N0L252bWUuaCBiL2RyaXZlcnMvbnZtZS9ob3N0L252bWUuaAppbmRleCA4MjQ2NTFjYzg5OGRiLi4wMzRjMzFhZjhmZWNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL252bWUvaG9zdC9udm1lLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9udm1lL2hvc3QvbnZtZS5oCkBAIC02NTIsNiAmIzQzOzY1Miw4IEBAIHN0cnVjdCBudm1lX2N0cmxfb3BzIHsKIAlpbnQgKCpnZXRfYWRkcmVzcykoc3RydWN0IG52bWVfY3RybCAqY3RybCwgY2hhciAqYnVmLCBpbnQgc2l6ZSk7CiAJdm9pZCAoKnByaW50X2RldmljZV9pbmZvKShzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsKTsKIAlib29sICgqc3VwcG9ydHNfcGNpX3AycGRtYSkoc3RydWN0IG52bWVfY3RybCAqY3RybCk7CiYjNDM7CWludCAoKmluaXRfZG1hX2J1Zl9pb19jdHgpKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwsCiYjNDM7CQkJCSAgIHN0cnVjdCBkbWFfYnVmX2lvX2N0eCAqY3R4KTsKIAl1bnNpZ25lZCBsb25nICgqZ2V0X3ZpcnRfYm91bmRhcnkpKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwsIGJvb2wgaXNfYWRtaW4pOwogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9udm1lL2hvc3QvcGNpLmMgYi9kcml2ZXJzL252bWUvaG9zdC9wY2kuYwppbmRleCA2OTkzMmQ2NDBiNTM3Li42N2UyNmQ2ZThmMjU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL252bWUvaG9zdC9wY2kuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL252bWUvaG9zdC9wY2kuYwpAQCAtMjcsNiAmIzQzOzI3LDggQEAKICNpbmNsdWRlICZsdDtsaW51eC9pby02NC1ub25hdG9taWMtbG8taGkuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9pby02NC1ub25hdG9taWMtaGktbG8uaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zZWQtb3BhbC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9kbWEtYnVmLWlvLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2RtYS1yZXN2LmgmZ3Q7CiAKICNpbmNsdWRlICYjMzQ7dHJhY2UuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O252bWUuaCYjMzQ7CkBAIC0zOTMsNiAmIzQzOzM5NSwxMyBAQCBzdHJ1Y3QgbnZtZV9xdWV1ZSB7CiAJc3RydWN0IGNvbXBsZXRpb24gZGVsZXRlX2RvbmU7CiB9OwogCiYjNDM7c3RydWN0IG52bWVfZG1hYnVmX21hcCB7CiYjNDM7CXN0cnVjdCBkbWFfYnVmX2lvX21hcCBiYXNlOwomIzQzOwlzdHJ1Y3Qgc2dfdGFibGUgKnNndDsKJiM0MzsJdW5zaWduZWQgbnJfZW50cmllczsKJiM0MzsJZG1hX2FkZHJfdCBkbWFfbGlzdFtdOwomIzQzO307CiYjNDM7CiAvKiBiaXRzIGZvciBpb2QtJmd0O2ZsYWdzICovCiBlbnVtIG52bWVfaW9kX2ZsYWdzIHsKIAkvKiB0aGlzIGNvbW1hbmQgaGFzIGJlZW4gYWJvcnRlZCBieSB0aGUgdGltZW91dCBoYW5kbGVyICovCkBAIC04NTksNiAmIzQzOzg2OCwxMzggQEAgc3RhdGljIHZvaWQgbnZtZV9mcmVlX2Rlc2NyaXB0b3JzKHN0cnVjdCByZXF1ZXN0ICpyZXEpCiAJfQogfQogCiYjNDM7c3RhdGljIGlubGluZSBzdHJ1Y3QgbnZtZV9kbWFidWZfbWFwICoKJiM0Mzt0b19udm1lX2RtYWJ1Zl9tYXAoc3RydWN0IGRtYV9idWZfaW9fbWFwICptYXApCiYjNDM7ewomIzQzOwlyZXR1cm4gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IG52bWVfZG1hYnVmX21hcCwgYmFzZSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIG52bWVfZG1hYnVmX21hcF9zeW5jX2Zvcl9jcHUoc3RydWN0IG52bWVfZGV2ICpudm1lX2RldiwKJiM0MzsJCQkJCSBzdHJ1Y3QgcmVxdWVzdCAqcmVxKQomIzQzO3sKJiM0MzsJc3RydWN0IGRldmljZSAqZGV2ID0gbnZtZV9kZXYtJmd0O2RldjsKJiM0MzsJZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZG1hX2RpcjsKJiM0MzsJc3RydWN0IGJpbyAqYmlvID0gcmVxLSZndDtiaW87CiYjNDM7CXN0cnVjdCBudm1lX2RtYWJ1Zl9tYXAgKm1hcCA9IHRvX252bWVfZG1hYnVmX21hcChiaW8tJmd0O2JpX2RtYWJ1Zl9tYXApOwomIzQzOwlkbWFfYWRkcl90ICpkbWFfbGlzdCA9IG1hcC0mZ3Q7ZG1hX2xpc3Q7CiYjNDM7CXVuc2lnbmVkIG9mZnNldCA9IGJpby0mZ3Q7YmlfaXRlci5iaV9vZmZzZXQ7CiYjNDM7CXVuc2lnbmVkIG1hcF9pZHggPSBvZmZzZXQgLyBOVk1FX0NUUkxfUEFHRV9TSVpFOwomIzQzOwlpbnQgbGVuZ3RoID0gYmxrX3JxX3BheWxvYWRfYnl0ZXMocmVxKSAmIzQzOwomIzQzOwkJICAgICAob2Zmc2V0ICZhbXA7IChOVk1FX0NUUkxfUEFHRV9TSVpFIC0gMSkpOwomIzQzOwomIzQzOwlkbWFfZGlyID0gcnFfZGF0YV9kaXIocmVxKSA9PSBSRUFEID8gRE1BX0ZST01fREVWSUNFIDogRE1BX1RPX0RFVklDRTsKJiM0MzsKJiM0MzsJd2hpbGUgKGxlbmd0aCAmZ3Q7IDApIHsKJiM0MzsJCWRtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KGRldiwgZG1hX2xpc3RbbWFwX2lkeCYjNDM7JiM0MztdLAomIzQzOwkJCQkJTlZNRV9DVFJMX1BBR0VfU0laRSwgZG1hX2Rpcik7CiYjNDM7CQlsZW5ndGggLT0gTlZNRV9DVFJMX1BBR0VfU0laRTsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBudm1lX2RtYWJ1Zl9tYXBfc3luY19mb3JfZGV2aWNlKHN0cnVjdCBudm1lX2RldiAqbnZtZV9kZXYsCiYjNDM7CQkJCQkgICAgc3RydWN0IHJlcXVlc3QgKnJlcSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkZXZpY2UgKmRldiA9IG52bWVfZGV2LSZndDtkZXY7CiYjNDM7CWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRtYV9kaXI7CiYjNDM7CXN0cnVjdCBiaW8gKmJpbyA9IHJlcS0mZ3Q7YmlvOwomIzQzOwlzdHJ1Y3QgbnZtZV9kbWFidWZfbWFwICptYXAgPSB0b19udm1lX2RtYWJ1Zl9tYXAoYmlvLSZndDtiaV9kbWFidWZfbWFwKTsKJiM0MzsJZG1hX2FkZHJfdCAqZG1hX2xpc3QgPSBtYXAtJmd0O2RtYV9saXN0OwomIzQzOwl1bnNpZ25lZCBvZmZzZXQgPSBiaW8tJmd0O2JpX2l0ZXIuYmlfb2Zmc2V0OwomIzQzOwl1bnNpZ25lZCBtYXBfaWR4ID0gb2Zmc2V0IC8gTlZNRV9DVFJMX1BBR0VfU0laRTsKJiM0MzsJaW50IGxlbmd0aCA9IGJsa19ycV9wYXlsb2FkX2J5dGVzKHJlcSkgJiM0MzsKJiM0MzsJCSAgICAgKG9mZnNldCAmYW1wOyAoTlZNRV9DVFJMX1BBR0VfU0laRSAtIDEpKTsKJiM0MzsKJiM0MzsJZG1hX2RpciA9IHJxX2RhdGFfZGlyKHJlcSkgPT0gUkVBRCA/IERNQV9GUk9NX0RFVklDRSA6IERNQV9UT19ERVZJQ0U7CiYjNDM7CiYjNDM7CXdoaWxlIChsZW5ndGggJmd0OyAwKSB7CiYjNDM7CQlkbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShkZXYsIGRtYV9saXN0W21hcF9pZHgmIzQzOyYjNDM7XSwKJiM0MzsJCQkJCSAgIE5WTUVfQ1RSTF9QQUdFX1NJWkUsIGRtYV9kaXIpOwomIzQzOwkJbGVuZ3RoIC09IE5WTUVfQ1RSTF9QQUdFX1NJWkU7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgbnZtZV9ycV9jbGVhbl9kbWFidWZfbWFwKHN0cnVjdCBudm1lX2RldiAqZGV2LAomIzQzOwkJCQkgICAgICBzdHJ1Y3QgcmVxdWVzdCAqcmVxKQomIzQzO3sKJiM0MzsJc3RydWN0IG52bWVfaW9kICppb2QgPSBibGtfbXFfcnFfdG9fcGR1KHJlcSk7CiYjNDM7CiYjNDM7CW52bWVfZG1hYnVmX21hcF9zeW5jX2Zvcl9jcHUoZGV2LCByZXEpOwomIzQzOwomIzQzOwlpZiAoIShpb2QtJmd0O2ZsYWdzICZhbXA7IElPRF9TSU5HTEVfU0VHTUVOVCkpCiYjNDM7CQludm1lX2ZyZWVfZGVzY3JpcHRvcnMocmVxKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGJsa19zdGF0dXNfdCBudm1lX3JxX3NldHVwX2RtYWJ1Zl9tYXAoc3RydWN0IHJlcXVlc3QgKnJlcSwKJiM0MzsJCQkJCSAgICAgc3RydWN0IG52bWVfcXVldWUgKm52bWVxKQomIzQzO3sKJiM0MzsJc3RydWN0IG52bWVfaW9kICppb2QgPSBibGtfbXFfcnFfdG9fcGR1KHJlcSk7CiYjNDM7CXN0cnVjdCBiaW8gKmJpbyA9IHJlcS0mZ3Q7YmlvOwomIzQzOwlzdHJ1Y3QgbnZtZV9kbWFidWZfbWFwICptYXAgPSB0b19udm1lX2RtYWJ1Zl9tYXAoYmlvLSZndDtiaV9kbWFidWZfbWFwKTsKJiM0MzsJdW5zaWduZWQgYnZlY19kb25lID0gYmlvLSZndDtiaV9pdGVyLmJpX29mZnNldDsKJiM0MzsJdW5zaWduZWQgbWFwX2lkeCA9IGJ2ZWNfZG9uZSAvIE5WTUVfQ1RSTF9QQUdFX1NJWkU7CiYjNDM7CXVuc2lnbmVkIG9mZnNldCA9IGJ2ZWNfZG9uZSAmYW1wOyAoTlZNRV9DVFJMX1BBR0VfU0laRSAtIDEpOwomIzQzOwlpbnQgbGVuZ3RoID0gYmxrX3JxX3BheWxvYWRfYnl0ZXMocmVxKSAtIChOVk1FX0NUUkxfUEFHRV9TSVpFIC0gb2Zmc2V0KTsKJiM0MzsJZG1hX2FkZHJfdCAqZG1hX2xpc3QgPSBtYXAtJmd0O2RtYV9saXN0OwomIzQzOwl1NjQgcHJwMV9kbWEgPSBkbWFfbGlzdFttYXBfaWR4JiM0MzsmIzQzO10gJiM0Mzsgb2Zmc2V0OwomIzQzOwl1NjQgZG1hX2FkZHIsIHBycDJfZG1hOwomIzQzOwlkbWFfYWRkcl90IHBycF9kbWE7CiYjNDM7CV9fbGU2NCAqcHJwX2xpc3Q7CiYjNDM7CXVuc2lnbmVkIGk7CiYjNDM7CiYjNDM7CW52bWVfZG1hYnVmX21hcF9zeW5jX2Zvcl9kZXZpY2UobnZtZXEtJmd0O2RldiwgcmVxKTsKJiM0MzsKJiM0MzsJaWYgKGxlbmd0aCAmbHQ7PSAwKSB7CiYjNDM7CQlwcnAyX2RtYSA9IDA7CiYjNDM7CQlnb3RvIGRvbmU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKGxlbmd0aCAmbHQ7PSBOVk1FX0NUUkxfUEFHRV9TSVpFKSB7CiYjNDM7CQlwcnAyX2RtYSA9IGRtYV9saXN0W21hcF9pZHhdOwomIzQzOwkJZ290byBkb25lOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChESVZfUk9VTkRfVVAobGVuZ3RoLCBOVk1FX0NUUkxfUEFHRV9TSVpFKSAmbHQ7PQomIzQzOwkgICAgTlZNRV9TTUFMTF9QT09MX1NJWkUgLyBzaXplb2YoX19sZTY0KSkKJiM0MzsJCWlvZC0mZ3Q7ZmxhZ3MgfD0gSU9EX1NNQUxMX0RFU0NSSVBUT1I7CiYjNDM7CiYjNDM7CXBycF9saXN0ID0gZG1hX3Bvb2xfYWxsb2MobnZtZV9kbWFfcG9vbChudm1lcSwgaW9kKSwgR0ZQX0FUT01JQywKJiM0MzsJCQkmYW1wO3BycF9kbWEpOwomIzQzOwlpZiAoIXBycF9saXN0KQomIzQzOwkJcmV0dXJuIEJMS19TVFNfUkVTT1VSQ0U7CiYjNDM7CiYjNDM7CWlvZC0mZ3Q7ZGVzY3JpcHRvcnNbaW9kLSZndDtucl9kZXNjcmlwdG9ycyYjNDM7JiM0MztdID0gcHJwX2xpc3Q7CiYjNDM7CXBycDJfZG1hID0gcHJwX2RtYTsKJiM0MzsJaSA9IDA7CiYjNDM7CWZvciAoOzspIHsKJiM0MzsJCWlmIChpID09IE5WTUVfQ1RSTF9QQUdFX1NJWkUgJmd0OyZndDsgMykgewomIzQzOwkJCV9fbGU2NCAqb2xkX3BycF9saXN0ID0gcHJwX2xpc3Q7CiYjNDM7CiYjNDM7CQkJcHJwX2xpc3QgPSBkbWFfcG9vbF9hbGxvYyhudm1lcS0mZ3Q7ZGVzY3JpcHRvcl9wb29scy5sYXJnZSwKJiM0MzsJCQkJCUdGUF9BVE9NSUMsICZhbXA7cHJwX2RtYSk7CiYjNDM7CQkJaWYgKCFwcnBfbGlzdCkKJiM0MzsJCQkJZ290byBmcmVlX3BycHM7CiYjNDM7CQkJaW9kLSZndDtkZXNjcmlwdG9yc1tpb2QtJmd0O25yX2Rlc2NyaXB0b3JzJiM0MzsmIzQzO10gPSBwcnBfbGlzdDsKJiM0MzsJCQlwcnBfbGlzdFswXSA9IG9sZF9wcnBfbGlzdFtpIC0gMV07CiYjNDM7CQkJb2xkX3BycF9saXN0W2kgLSAxXSA9IGNwdV90b19sZTY0KHBycF9kbWEpOwomIzQzOwkJCWkgPSAxOwomIzQzOwkJfQomIzQzOwomIzQzOwkJZG1hX2FkZHIgPSBkbWFfbGlzdFttYXBfaWR4JiM0MzsmIzQzO107CiYjNDM7CQlwcnBfbGlzdFtpJiM0MzsmIzQzO10gPSBjcHVfdG9fbGU2NChkbWFfYWRkcik7CiYjNDM7CiYjNDM7CQlsZW5ndGggLT0gTlZNRV9DVFJMX1BBR0VfU0laRTsKJiM0MzsJCWlmIChsZW5ndGggJmx0Oz0gMCkKJiM0MzsJCQlicmVhazsKJiM0MzsJfQomIzQzO2RvbmU6CiYjNDM7CWlvZC0mZ3Q7Y21kLmNvbW1vbi5kcHRyLnBycDEgPSBjcHVfdG9fbGU2NChwcnAxX2RtYSk7CiYjNDM7CWlvZC0mZ3Q7Y21kLmNvbW1vbi5kcHRyLnBycDIgPSBjcHVfdG9fbGU2NChwcnAyX2RtYSk7CiYjNDM7CXJldHVybiBCTEtfU1RTX09LOwomIzQzO2ZyZWVfcHJwczoKJiM0MzsJbnZtZV9mcmVlX2Rlc2NyaXB0b3JzKHJlcSk7CiYjNDM7CXJldHVybiBCTEtfU1RTX1JFU09VUkNFOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIG52bWVfZnJlZV9wcnBzKHN0cnVjdCByZXF1ZXN0ICpyZXEsIHVuc2lnbmVkIGludCBhdHRycykKIHsKIAlzdHJ1Y3QgbnZtZV9pb2QgKmlvZCA9IGJsa19tcV9ycV90b19wZHUocmVxKTsKQEAgLTkzNyw2ICYjNDM7MTA3OCwxMSBAQCBzdGF0aWMgdm9pZCBudm1lX3VubWFwX2RhdGEoc3RydWN0IHJlcXVlc3QgKnJlcSkKIAlzdHJ1Y3QgZGV2aWNlICpkbWFfZGV2ID0gbnZtZXEtJmd0O2Rldi0mZ3Q7ZGV2OwogCXVuc2lnbmVkIGludCBhdHRycyA9IDA7CiAKJiM0MzsJaWYgKGJsa19tcV9ycV9pc19kbWFidWYocmVxKSkgewomIzQzOwkJbnZtZV9ycV9jbGVhbl9kbWFidWZfbWFwKG52bWVxLSZndDtkZXYsIHJlcSk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKIAlpZiAoaW9kLSZndDtmbGFncyAmYW1wOyBJT0RfU0lOR0xFX1NFR01FTlQpIHsKIAkJc3RhdGljX2Fzc2VydChvZmZzZXRvZih1bmlvbiBudm1lX2RhdGFfcHRyLCBwcnAxKSA9PQogCQkJCW9mZnNldG9mKHVuaW9uIG52bWVfZGF0YV9wdHIsIHNnbC5hZGRyKSk7CkBAIC0xMTQyLDEzICYjNDM7MTI4OCwxOSBAQCBzdGF0aWMgYmxrX3N0YXR1c190IG52bWVfcGNpX3NldHVwX2RhdGFfcHJwKHN0cnVjdCByZXF1ZXN0ICpyZXEsCiB9CiAKIHN0YXRpYyB2b2lkIG52bWVfcGNpX3NnbF9zZXRfZGF0YShzdHJ1Y3QgbnZtZV9zZ2xfZGVzYyAqc2dlLAotCQlzdHJ1Y3QgYmxrX2RtYV9pdGVyICppdGVyKQomIzQzOwkJZG1hX2FkZHJfdCBhZGRyLCB1MzIgbGVuKQogewotCXNnZS0mZ3Q7YWRkciA9IGNwdV90b19sZTY0KGl0ZXItJmd0O2FkZHIpOwotCXNnZS0mZ3Q7bGVuZ3RoID0gY3B1X3RvX2xlMzIoaXRlci0mZ3Q7bGVuKTsKJiM0MzsJc2dlLSZndDthZGRyID0gY3B1X3RvX2xlNjQoYWRkcik7CiYjNDM7CXNnZS0mZ3Q7bGVuZ3RoID0gY3B1X3RvX2xlMzIobGVuKTsKIAlzZ2UtJmd0O3R5cGUgPSBOVk1FX1NHTF9GTVRfREFUQV9ERVNDICZsdDsmbHQ7IDQ7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBudm1lX3BjaV9kbWFfaXRlcl9zZXRfc2dsKHN0cnVjdCBudm1lX3NnbF9kZXNjICpzZ2UsCiYjNDM7CQlzdHJ1Y3QgYmxrX2RtYV9pdGVyICppdGVyKQomIzQzO3sKJiM0MzsJbnZtZV9wY2lfc2dsX3NldF9kYXRhKHNnZSwgaXRlci0mZ3Q7YWRkciwgaXRlci0mZ3Q7bGVuKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCBudm1lX3BjaV9zZ2xfc2V0X3NlZyhzdHJ1Y3QgbnZtZV9zZ2xfZGVzYyAqc2dlLAogCQlkbWFfYWRkcl90IGRtYV9hZGRyLCBpbnQgZW50cmllcykKIHsKQEAgLTExNTcsNiAmIzQzOzEzMDksMTQ1IEBAIHN0YXRpYyB2b2lkIG52bWVfcGNpX3NnbF9zZXRfc2VnKHN0cnVjdCBudm1lX3NnbF9kZXNjICpzZ2UsCiAJc2dlLSZndDt0eXBlID0gTlZNRV9TR0xfRk1UX0xBU1RfU0VHX0RFU0MgJmx0OyZsdDsgNDsKIH0KIAomIzQzO3N0YXRpYyB1bnNpZ25lZCBpbnQgbnZtZV9wY2lfZG1hYnVmX3NnbF9uZW50cyhzdHJ1Y3QgcmVxdWVzdCAqcmVxKQomIzQzO3sKJiM0MzsJc3RydWN0IGJpbyAqYmlvID0gcmVxLSZndDtiaW87CiYjNDM7CXN0cnVjdCBudm1lX2RtYWJ1Zl9tYXAgKm1hcCA9IHRvX252bWVfZG1hYnVmX21hcChiaW8tJmd0O2JpX2RtYWJ1Zl9tYXApOwomIzQzOwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOwomIzQzOwl1bnNpZ25lZCBsb25nIHRtcDsKJiM0MzsJc2l6ZV90IG9mZnNldCA9IGJpby0mZ3Q7YmlfaXRlci5iaV9vZmZzZXQ7CiYjNDM7CXNpemVfdCByZW1haW5pbmcgPSBibGtfcnFfcGF5bG9hZF9ieXRlcyhyZXEpOwomIzQzOwl1bnNpZ25lZCBpbnQgbmVudHMgPSAwOwomIzQzOwomIzQzOwlmb3JfZWFjaF9zZ3RhYmxlX2RtYV9zZyhtYXAtJmd0O3NndCwgc2csIHRtcCkgewomIzQzOwkJc2l6ZV90IHNnX2xlbiA9IHNnX2RtYV9sZW4oc2cpOwomIzQzOwomIzQzOwkJaWYgKCFyZW1haW5pbmcpCiYjNDM7CQkJYnJlYWs7CiYjNDM7CQlpZiAob2Zmc2V0ICZndDs9IHNnX2xlbikgewomIzQzOwkJCW9mZnNldCAtPSBzZ19sZW47CiYjNDM7CQkJY29udGludWU7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlzZ19sZW4gLT0gb2Zmc2V0OwomIzQzOwkJb2Zmc2V0ID0gMDsKJiM0MzsKJiM0MzsJCWRvIHsKJiM0MzsJCQlzaXplX3QgY2h1bmsgPSBtaW4ocmVtYWluaW5nLCBzZ19sZW4pOwomIzQzOwomIzQzOwkJCW5lbnRzJiM0MzsmIzQzOzsKJiM0MzsJCQlzZ19sZW4gLT0gY2h1bms7CiYjNDM7CQkJcmVtYWluaW5nIC09IGNodW5rOwomIzQzOwkJfSB3aGlsZSAoc2dfbGVuICZhbXA7JmFtcDsgcmVtYWluaW5nKTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAodW5saWtlbHkocmVtYWluaW5nKSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlyZXR1cm4gbmVudHM7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBibGtfc3RhdHVzX3QgbnZtZV9ycV9zZXR1cF9kbWFidWZfc2dsKHN0cnVjdCByZXF1ZXN0ICpyZXEsCiYjNDM7CQlzdHJ1Y3QgbnZtZV9xdWV1ZSAqbnZtZXEsIHVuc2lnbmVkIGludCBlbnRyaWVzKQomIzQzO3sKJiM0MzsJc3RydWN0IG52bWVfaW9kICppb2QgPSBibGtfbXFfcnFfdG9fcGR1KHJlcSk7CiYjNDM7CXN0cnVjdCBiaW8gKmJpbyA9IHJlcS0mZ3Q7YmlvOwomIzQzOwlzdHJ1Y3QgbnZtZV9kbWFidWZfbWFwICptYXAgPSB0b19udm1lX2RtYWJ1Zl9tYXAoYmlvLSZndDtiaV9kbWFidWZfbWFwKTsKJiM0MzsJc2l6ZV90IGxlbmd0aCA9IGJsa19ycV9wYXlsb2FkX2J5dGVzKHJlcSk7CiYjNDM7CXN0cnVjdCBudm1lX3NnbF9kZXNjICpzZ19saXN0ID0gJmFtcDtpb2QtJmd0O2NtZC5jb21tb24uZHB0ci5zZ2w7CiYjNDM7CWJvb2wgcG9vbGVkID0gZW50cmllcyAmZ3Q7IDE7CiYjNDM7CWRtYV9hZGRyX3Qgc2dsX2RtYSA9IDA7CiYjNDM7CXVuc2lnbmVkIGludCBtYXBwZWQgPSAwOwomIzQzOwl1bnNpZ25lZCBsb25nIHRtcDsKJiM0MzsJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKJiM0MzsJc2l6ZV90IG9mZnNldCA9IGJpby0mZ3Q7YmlfaXRlci5iaV9vZmZzZXQ7CiYjNDM7CXNpemVfdCByZW1haW5pbmcgPSBsZW5ndGg7CiYjNDM7CiYjNDM7CWlmICghZW50cmllcykKJiM0MzsJCXJldHVybiBCTEtfU1RTX0lPRVJSOwomIzQzOwomIzQzOwlpb2QtJmd0O2NtZC5jb21tb24uZmxhZ3MgPSBOVk1FX0NNRF9TR0xfTUVUQUJVRjsKJiM0MzsJaW9kLSZndDt0b3RhbF9sZW4gPSBsZW5ndGg7CiYjNDM7CiYjNDM7CW52bWVfZG1hYnVmX21hcF9zeW5jX2Zvcl9kZXZpY2UobnZtZXEtJmd0O2RldiwgcmVxKTsKJiM0MzsKJiM0MzsJLyogZW50cmllcyA9PSAxIGZpdHMgaW4gdGhlIGlubGluZSBkZXNjcmlwdG9yOyBtb3JlIG5lZWRzIGEgcG9vbC4gKi8KJiM0MzsJaWYgKHBvb2xlZCkgewomIzQzOwkJaWYgKGVudHJpZXMgJmx0Oz0gTlZNRV9TTUFMTF9QT09MX1NJWkUgLyBzaXplb2YoKnNnX2xpc3QpKQomIzQzOwkJCWlvZC0mZ3Q7ZmxhZ3MgfD0gSU9EX1NNQUxMX0RFU0NSSVBUT1I7CiYjNDM7CiYjNDM7CQlzZ19saXN0ID0gZG1hX3Bvb2xfYWxsb2MobnZtZV9kbWFfcG9vbChudm1lcSwgaW9kKSwgR0ZQX0FUT01JQywKJiM0MzsJCQkJCSAmYW1wO3NnbF9kbWEpOwomIzQzOwkJaWYgKCFzZ19saXN0KQomIzQzOwkJCXJldHVybiBCTEtfU1RTX1JFU09VUkNFOwomIzQzOwkJaW9kLSZndDtkZXNjcmlwdG9yc1tpb2QtJmd0O25yX2Rlc2NyaXB0b3JzJiM0MzsmIzQzO10gPSBzZ19saXN0OwomIzQzOwl9CiYjNDM7CiYjNDM7CWZvcl9lYWNoX3NndGFibGVfZG1hX3NnKG1hcC0mZ3Q7c2d0LCBzZywgdG1wKSB7CiYjNDM7CQlzaXplX3Qgc2dfbGVuID0gc2dfZG1hX2xlbihzZyk7CiYjNDM7CQlkbWFfYWRkcl90IGFkZHIgPSBzZ19kbWFfYWRkcmVzcyhzZyk7CiYjNDM7CiYjNDM7CQlpZiAoIXJlbWFpbmluZykKJiM0MzsJCQlicmVhazsKJiM0MzsJCWlmIChvZmZzZXQgJmd0Oz0gc2dfbGVuKSB7CiYjNDM7CQkJb2Zmc2V0IC09IHNnX2xlbjsKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWFkZHIgJiM0Mzs9IG9mZnNldDsKJiM0MzsJCXNnX2xlbiAtPSBvZmZzZXQ7CiYjNDM7CQlvZmZzZXQgPSAwOwomIzQzOwomIzQzOwkJZG8gewomIzQzOwkJCXUzMiBjaHVuayA9IG1pbl90KHNpemVfdCwgcmVtYWluaW5nLCBzZ19sZW4pOwomIzQzOwomIzQzOwkJCWlmIChXQVJOX09OX09OQ0UobWFwcGVkID09IGVudHJpZXMpKQomIzQzOwkJCQlnb3RvIGVycl9mcmVlOwomIzQzOwkJCW52bWVfcGNpX3NnbF9zZXRfZGF0YSgmYW1wO3NnX2xpc3RbbWFwcGVkJiM0MzsmIzQzO10sIGFkZHIsIGNodW5rKTsKJiM0MzsKJiM0MzsJCQlhZGRyICYjNDM7PSBjaHVuazsKJiM0MzsJCQlzZ19sZW4gLT0gY2h1bms7CiYjNDM7CQkJcmVtYWluaW5nIC09IGNodW5rOwomIzQzOwkJfSB3aGlsZSAoc2dfbGVuICZhbXA7JmFtcDsgcmVtYWluaW5nKTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAodW5saWtlbHkocmVtYWluaW5nKSkKJiM0MzsJCWdvdG8gZXJyX2ZyZWU7CiYjNDM7CiYjNDM7CWlmIChwb29sZWQpCiYjNDM7CQludm1lX3BjaV9zZ2xfc2V0X3NlZygmYW1wO2lvZC0mZ3Q7Y21kLmNvbW1vbi5kcHRyLnNnbCwgc2dsX2RtYSwKJiM0MzsJCQkJICAgICBtYXBwZWQpOwomIzQzOwlyZXR1cm4gQkxLX1NUU19PSzsKJiM0MztlcnJfZnJlZToKJiM0MzsJaWYgKHBvb2xlZCkgewomIzQzOwkJaW9kLSZndDtucl9kZXNjcmlwdG9ycy0tOwomIzQzOwkJZG1hX3Bvb2xfZnJlZShudm1lX2RtYV9wb29sKG52bWVxLCBpb2QpLCBzZ19saXN0LCBzZ2xfZG1hKTsKJiM0MzsJfQomIzQzOwlyZXR1cm4gQkxLX1NUU19JT0VSUjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGJsa19zdGF0dXNfdCBudm1lX3JxX3NldHVwX2RtYWJ1ZihzdHJ1Y3QgcmVxdWVzdCAqcmVxLAomIzQzOwkJc3RydWN0IG52bWVfcXVldWUgKm52bWVxLCBlbnVtIG52bWVfdXNlX3NnbCB1c2Vfc2dsKQomIzQzO3sKJiM0MzsJdW5zaWduZWQgaW50IGVudHJpZXM7CiYjNDM7CXNpemVfdCBhdmdfc2VnOwomIzQzOwomIzQzOwlpZiAodXNlX3NnbCA9PSBTR0xfVU5TVVBQT1JURUQpCiYjNDM7CQlyZXR1cm4gbnZtZV9ycV9zZXR1cF9kbWFidWZfbWFwKHJlcSwgbnZtZXEpOwomIzQzOwomIzQzOwllbnRyaWVzID0gbnZtZV9wY2lfZG1hYnVmX3NnbF9uZW50cyhyZXEpOwomIzQzOwomIzQzOwlpZiAodXNlX3NnbCA9PSBTR0xfRk9SQ0VEKQomIzQzOwkJcmV0dXJuIG52bWVfcnFfc2V0dXBfZG1hYnVmX3NnbChyZXEsIG52bWVxLCBlbnRyaWVzKTsKJiM0MzsKJiM0MzsJYXZnX3NlZyA9IGVudHJpZXMgPwomIzQzOwkJRElWX1JPVU5EX1VQKGJsa19ycV9wYXlsb2FkX2J5dGVzKHJlcSksIGVudHJpZXMpIDogMDsKJiM0MzsJaWYgKHNnbF90aHJlc2hvbGQgJmFtcDsmYW1wOyBhdmdfc2VnICZndDs9IHNnbF90aHJlc2hvbGQpCiYjNDM7CQlyZXR1cm4gbnZtZV9ycV9zZXR1cF9kbWFidWZfc2dsKHJlcSwgbnZtZXEsIGVudHJpZXMpOwomIzQzOwomIzQzOwlyZXR1cm4gbnZtZV9ycV9zZXR1cF9kbWFidWZfbWFwKHJlcSwgbnZtZXEpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBibGtfc3RhdHVzX3QgbnZtZV9wY2lfc2V0dXBfZGF0YV9zZ2woc3RydWN0IHJlcXVlc3QgKnJlcSwKIAkJc3RydWN0IGJsa19kbWFfaXRlciAqaXRlcikKIHsKQEAgLTExNzEsNyAmIzQzOzE0NjIsNyBAQCBzdGF0aWMgYmxrX3N0YXR1c190IG52bWVfcGNpX3NldHVwX2RhdGFfc2dsKHN0cnVjdCByZXF1ZXN0ICpyZXEsCiAJaW9kLSZndDtjbWQuY29tbW9uLmZsYWdzID0gTlZNRV9DTURfU0dMX01FVEFCVUY7CiAKIAlpZiAoZW50cmllcyA9PSAxIHx8IGJsa19ycV9kbWFfbWFwX2NvYWxlc2NlKCZhbXA7aW9kLSZndDtkbWFfc3RhdGUpKSB7Ci0JCW52bWVfcGNpX3NnbF9zZXRfZGF0YSgmYW1wO2lvZC0mZ3Q7Y21kLmNvbW1vbi5kcHRyLnNnbCwgaXRlcik7CiYjNDM7CQludm1lX3BjaV9kbWFfaXRlcl9zZXRfc2dsKCZhbXA7aW9kLSZndDtjbWQuY29tbW9uLmRwdHIuc2dsLCBpdGVyKTsKIAkJaW9kLSZndDt0b3RhbF9sZW4gJiM0Mzs9IGl0ZXItJmd0O2xlbjsKIAkJcmV0dXJuIEJMS19TVFNfT0s7CiAJfQpAQCAtMTE5Myw3ICYjNDM7MTQ4NCw3IEBAIHN0YXRpYyBibGtfc3RhdHVzX3QgbnZtZV9wY2lfc2V0dXBfZGF0YV9zZ2woc3RydWN0IHJlcXVlc3QgKnJlcSwKIAkJCWl0ZXItJmd0O3N0YXR1cyA9IEJMS19TVFNfSU9FUlI7CiAJCQlicmVhazsKIAkJfQotCQludm1lX3BjaV9zZ2xfc2V0X2RhdGEoJmFtcDtzZ19saXN0W21hcHBlZCYjNDM7JiM0MztdLCBpdGVyKTsKJiM0MzsJCW52bWVfcGNpX2RtYV9pdGVyX3NldF9zZ2woJmFtcDtzZ19saXN0W21hcHBlZCYjNDM7JiM0MztdLCBpdGVyKTsKIAkJaW9kLSZndDt0b3RhbF9sZW4gJiM0Mzs9IGl0ZXItJmd0O2xlbjsKIAl9IHdoaWxlIChibGtfcnFfZG1hX21hcF9pdGVyX25leHQocmVxLCBudm1lcS0mZ3Q7ZGV2LSZndDtkZXYsIGl0ZXIpKTsKIApAQCAtMTI1MSw2ICYjNDM7MTU0Miw5IEBAIHN0YXRpYyBibGtfc3RhdHVzX3QgbnZtZV9tYXBfZGF0YShzdHJ1Y3QgcmVxdWVzdCAqcmVxKQogCXN0cnVjdCBibGtfZG1hX2l0ZXIgaXRlcjsKIAlibGtfc3RhdHVzX3QgcmV0OwogCiYjNDM7CWlmIChibGtfbXFfcnFfaXNfZG1hYnVmKHJlcSkpCiYjNDM7CQlyZXR1cm4gbnZtZV9ycV9zZXR1cF9kbWFidWYocmVxLCBudm1lcSwgdXNlX3NnbCk7CiYjNDM7CiAJLyoKIAkgKiBUcnkgdG8gc2tpcCB0aGUgRE1BIGl0ZXJhdG9yIGZvciBzaW5nbGUgc2VnbWVudCByZXF1ZXN0cywgYXMgdGhhdAogCSAqIHNpZ25pZmljYW50bHkgaW1wcm92ZXMgcGVyZm9ybWFuY2VzIGZvciBzbWFsbCBJL08gc2l6ZXMuCkBAIC0xMzUzLDEzICYjNDM7MTY0NywxMyBAQCBzdGF0aWMgYmxrX3N0YXR1c190IG52bWVfcGNpX3NldHVwX21ldGFfaXRlcihzdHJ1Y3QgcmVxdWVzdCAqcmVxKQogCWlvZC0mZ3Q7Y21kLmNvbW1vbi5tZXRhZGF0YSA9IGNwdV90b19sZTY0KHNnbF9kbWEpOwogCWlmIChlbnRyaWVzID09IDEpIHsKIAkJaW9kLSZndDttZXRhX3RvdGFsX2xlbiA9IGl0ZXIubGVuOwotCQludm1lX3BjaV9zZ2xfc2V0X2RhdGEoc2dfbGlzdCwgJmFtcDtpdGVyKTsKJiM0MzsJCW52bWVfcGNpX2RtYV9pdGVyX3NldF9zZ2woc2dfbGlzdCwgJmFtcDtpdGVyKTsKIAkJcmV0dXJuIEJMS19TVFNfT0s7CiAJfQogCiAJc2dsX2RtYSAmIzQzOz0gc2l6ZW9mKCpzZ19saXN0KTsKIAlkbyB7Ci0JCW52bWVfcGNpX3NnbF9zZXRfZGF0YSgmYW1wO3NnX2xpc3RbJiM0MzsmIzQzO2ldLCAmYW1wO2l0ZXIpOwomIzQzOwkJbnZtZV9wY2lfZG1hX2l0ZXJfc2V0X3NnbCgmYW1wO3NnX2xpc3RbJiM0MzsmIzQzO2ldLCAmYW1wO2l0ZXIpOwogCQlpb2QtJmd0O21ldGFfdG90YWxfbGVuICYjNDM7PSBpdGVyLmxlbjsKIAl9IHdoaWxlIChibGtfcnFfaW50ZWdyaXR5X2RtYV9tYXBfaXRlcl9uZXh0KHJlcSwgZGV2LSZndDtkZXYsICZhbXA7aXRlcikpOwogCkBAIC0yMjY5LDYgJiM0MzsyNTYzLDExOCBAQCBzdGF0aWMgaW50IG52bWVfY3JlYXRlX3F1ZXVlKHN0cnVjdCBudm1lX3F1ZXVlICpudm1lcSwgaW50IHFpZCwgYm9vbCBwb2xsZWQpCiAJcmV0dXJuIHJlc3VsdDsKIH0KIAomIzQzOyNpZmRlZiBDT05GSUdfRE1BX1NIQVJFRF9CVUZGRVIKJiM0MztzdGF0aWMgdm9pZCBudm1lX2RtYWJ1Zl9pbnZhbGlkYXRlX21hcHBpbmdzKHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkbWFfYnVmX2lvX2N0eCAqY3R4ID0gYXR0YWNoLSZndDtpbXBvcnRlcl9wcml2OwomIzQzOwomIzQzOwlkbWFfYnVmX2lvX2ludmFsaWRhdGVfbWFwcGluZ3MoY3R4KTsKJiM0Mzt9CiYjNDM7CiYjNDM7Y29uc3Qgc3RydWN0IGRtYV9idWZfYXR0YWNoX29wcyBudm1lX2RtYWJ1Zl9pbXBvcnRlcl9vcHMgPSB7CiYjNDM7CS5pbnZhbGlkYXRlX21hcHBpbmdzCT0gbnZtZV9kbWFidWZfaW52YWxpZGF0ZV9tYXBwaW5ncywKJiM0MzsJLmFsbG93X3BlZXIycGVlcgk9IHRydWUsCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IGRtYV9idWZfaW9fbWFwICpudm1lX2RtYV9idWZfaW9fbWFwKHN0cnVjdCBkbWFfYnVmX2lvX2N0eCAqY3R4KQomIzQzO3sKJiM0MzsJdW5zaWduZWQgbnJfZW50cmllcyA9IGN0eC0mZ3Q7ZG1hYnVmLSZndDtzaXplIC8gTlZNRV9DVFJMX1BBR0VfU0laRTsKJiM0MzsJc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoID0gY3R4LSZndDtkZXZfcHJpdjsKJiM0MzsJdW5zaWduZWQgbG9uZyB0bXAsIGkgPSAwOwomIzQzOwl1bnNpZ25lZCBzZWdfc2hpZnQgPSB+MFU7CiYjNDM7CXN0cnVjdCBudm1lX2RtYWJ1Zl9tYXAgKm1hcDsKJiM0MzsJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKJiM0MzsJc3RydWN0IHNnX3RhYmxlICpzZ3Q7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWRtYV9yZXN2X2Fzc2VydF9oZWxkKGN0eC0mZ3Q7ZG1hYnVmLSZndDtyZXN2KTsKJiM0MzsKJiM0MzsJbWFwID0ga21hbGxvY19mbGV4KCptYXAsIGRtYV9saXN0LCBucl9lbnRyaWVzKTsKJiM0MzsJaWYgKCFtYXApCiYjNDM7CQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKJiM0MzsKJiM0MzsJc2d0ID0gZG1hX2J1Zl9tYXBfYXR0YWNobWVudChhdHRhY2gsIGN0eC0mZ3Q7ZGlyKTsKJiM0MzsJaWYgKElTX0VSUihzZ3QpKSB7CiYjNDM7CQlyZXQgPSBQVFJfRVJSKHNndCk7CiYjNDM7CQlzZ3QgPSBOVUxMOwomIzQzOwkJZ290byBlcnI7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZm9yX2VhY2hfc2d0YWJsZV9kbWFfc2coc2d0LCBzZywgdG1wKSB7CiYjNDM7CQlkbWFfYWRkcl90IGRtYV9hZGRyID0gc2dfZG1hX2FkZHJlc3Moc2cpOwomIzQzOwkJdW5zaWduZWQgbG9uZyBzZ19sZW4gPSBzZ19kbWFfbGVuKHNnKTsKJiM0MzsKJiM0MzsJCWlmIChzZ19sZW4gJSBOVk1FX0NUUkxfUEFHRV9TSVpFKSB7CiYjNDM7CQkJcmV0ID0gLUVJTlZBTDsKJiM0MzsJCQlnb3RvIGVycjsKJiM0MzsJCX0KJiM0MzsJCXNlZ19zaGlmdCA9IG1pbihzZWdfc2hpZnQsIF9fZmZzKHNnX2xlbikpOwomIzQzOwomIzQzOwkJd2hpbGUgKHNnX2xlbikgewomIzQzOwkJCW1hcC0mZ3Q7ZG1hX2xpc3RbaSYjNDM7JiM0MztdID0gZG1hX2FkZHI7CiYjNDM7CQkJZG1hX2FkZHIgJiM0Mzs9IE5WTUVfQ1RSTF9QQUdFX1NJWkU7CiYjNDM7CQkJc2dfbGVuIC09IE5WTUVfQ1RSTF9QQUdFX1NJWkU7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKFdBUk5fT05fT05DRShzZWdfc2hpZnQgJmx0OyBOVk1FX0NUUkxfUEFHRV9TSElGVCkpCiYjNDM7CQlyZXR1cm4gRVJSX1BUUigtRUZBVUxUKTsKJiM0MzsKJiM0MzsJcmV0ID0gZG1hX2J1Zl9pb19pbml0X21hcChjdHgsICZhbXA7bWFwLSZndDtiYXNlKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gZXJyOwomIzQzOwltYXAtJmd0O2Jhc2Uuc2VnX3NoaWZ0ID0gc2VnX3NoaWZ0OwomIzQzOwltYXAtJmd0O25yX2VudHJpZXMgPSBucl9lbnRyaWVzOwomIzQzOwltYXAtJmd0O3NndCA9IHNndDsKJiM0MzsJcmV0dXJuICZhbXA7bWFwLSZndDtiYXNlOwomIzQzO2VycjoKJiM0MzsJaWYgKHNndCkKJiM0MzsJCWRtYV9idWZfdW5tYXBfYXR0YWNobWVudChhdHRhY2gsIHNndCwgY3R4LSZndDtkaXIpOwomIzQzOwlrZnJlZShtYXApOwomIzQzOwlyZXR1cm4gRVJSX1BUUihyZXQpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBudm1lX2RtYV9idWZfaW9fdW5tYXAoc3RydWN0IGRtYV9idWZfaW9fY3R4ICpjdHgsCiYjNDM7CQkJCSAgc3RydWN0IGRtYV9idWZfaW9fbWFwICptYXBfYmFzZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaCA9IGN0eC0mZ3Q7ZGV2X3ByaXY7CiYjNDM7CXN0cnVjdCBudm1lX2RtYWJ1Zl9tYXAgKm1hcCA9IHRvX252bWVfZG1hYnVmX21hcChtYXBfYmFzZSk7CiYjNDM7CiYjNDM7CWRtYV9yZXN2X2Fzc2VydF9oZWxkKGN0eC0mZ3Q7ZG1hYnVmLSZndDtyZXN2KTsKJiM0MzsKJiM0MzsJZG1hX2J1Zl91bm1hcF9hdHRhY2htZW50KGF0dGFjaCwgbWFwLSZndDtzZ3QsIGN0eC0mZ3Q7ZGlyKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgbnZtZV9kbWFfYnVmX2lvX3JlbGVhc2Uoc3RydWN0IGRtYV9idWZfaW9fY3R4ICpjdHgpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2ggPSBjdHgtJmd0O2Rldl9wcml2OwomIzQzOwomIzQzOwlkbWFfYnVmX2RldGFjaChjdHgtJmd0O2RtYWJ1ZiwgYXR0YWNoKTsKJiM0Mzt9CiYjNDM7CiYjNDM7Y29uc3Qgc3RydWN0IGRtYV9idWZfaW9fb3BzIG52bWVfZG1hX2J1Zl9pb19vcHMgPSB7CiYjNDM7CS5tYXAJCT0gbnZtZV9kbWFfYnVmX2lvX21hcCwKJiM0MzsJLnVubWFwCQk9IG52bWVfZG1hX2J1Zl9pb191bm1hcCwKJiM0MzsJLnJlbGVhc2UJPSBudm1lX2RtYV9idWZfaW9fcmVsZWFzZSwKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBpbnQgbnZtZV9wY2lfaW5pdF9kbWFfYnVmX2lvX2N0eChzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsLAomIzQzOwkJCQkJc3RydWN0IGRtYV9idWZfaW9fY3R4ICpjdHgpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2g7CiYjNDM7CXN0cnVjdCBudm1lX2RldiAqZGV2ID0gdG9fbnZtZV9kZXYoY3RybCk7CiYjNDM7CiYjNDM7CWF0dGFjaCA9IGRtYV9idWZfZHluYW1pY19hdHRhY2goY3R4LSZndDtkbWFidWYsIGRldi0mZ3Q7ZGV2LAomIzQzOwkJCQkJJmFtcDtudm1lX2RtYWJ1Zl9pbXBvcnRlcl9vcHMsIGN0eCk7CiYjNDM7CWlmIChJU19FUlIoYXR0YWNoKSkKJiM0MzsJCXJldHVybiBQVFJfRVJSKGF0dGFjaCk7CiYjNDM7CiYjNDM7CWN0eC0mZ3Q7ZGV2X3ByaXYgPSBhdHRhY2g7CiYjNDM7CWN0eC0mZ3Q7ZGV2X29wcyA9ICZhbXA7bnZtZV9kbWFfYnVmX2lvX29wczsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOyNlbmRpZgomIzQzOwogc3RhdGljIGNvbnN0IHN0cnVjdCBibGtfbXFfb3BzIG52bWVfbXFfYWRtaW5fb3BzID0gewogCS5xdWV1ZV9ycQk9IG52bWVfcXVldWVfcnEsCiAJLmNvbXBsZXRlCT0gbnZtZV9wY2lfY29tcGxldGVfcnEsCkBAIC0zNTYzLDYgJiM0MzszOTY5LDkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBudm1lX2N0cmxfb3BzIG52bWVfcGNpX2N0cmxfb3BzID0gewogCS5wcmludF9kZXZpY2VfaW5mbwk9IG52bWVfcGNpX3ByaW50X2RldmljZV9pbmZvLAogCS5zdXBwb3J0c19wY2lfcDJwZG1hCT0gbnZtZV9wY2lfc3VwcG9ydHNfcGNpX3AycGRtYSwKIAkuZ2V0X3ZpcnRfYm91bmRhcnkJPSBudm1lX3BjaV9nZXRfdmlydF9ib3VuZGFyeSwKJiM0MzsjaWZkZWYgQ09ORklHX0RNQV9TSEFSRURfQlVGRkVSCiYjNDM7CS5pbml0X2RtYV9idWZfaW9fY3R4CT0gbnZtZV9wY2lfaW5pdF9kbWFfYnVmX2lvX2N0eCwKJiM0MzsjZW5kaWYKIH07CiAKIHN0YXRpYyBpbnQgbnZtZV9kZXZfbWFwKHN0cnVjdCBudm1lX2RldiAqZGV2KQpAQCAtNDMyNyw1ICYjNDM7NDczNiw2IEBAIE1PRFVMRV9BVVRIT1IoJiMzNDtNYXR0aGV3IFdpbGNveCAmbHQ7d2lsbHlAbGludXguaW50ZWwuY29tJmd0OyYjMzQ7KTsKIE1PRFVMRV9MSUNFTlNFKCYjMzQ7R1BMJiMzNDspOwogTU9EVUxFX1ZFUlNJT04oJiMzNDsxLjAmIzM0Oyk7CiBNT0RVTEVfREVTQ1JJUFRJT04oJiMzNDtOVk1lIGhvc3QgUENJZSB0cmFuc3BvcnQgZHJpdmVyJiMzNDspOwomIzQzO01PRFVMRV9JTVBPUlRfTlMoJiMzNDtETUFfQlVGJiMzNDspOwogbW9kdWxlX2luaXQobnZtZV9pbml0KTsKIG1vZHVsZV9leGl0KG52bWVfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL252bWUvaG9zdC90Y3AuYyBiL2RyaXZlcnMvbnZtZS9ob3N0L3RjcC5jCmluZGV4IGJhNWM3YjNlMmE3YzYuLmNlMDNhMGVhNGRlZDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbnZtZS9ob3N0L3RjcC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbnZtZS9ob3N0L3RjcC5jCkBAIC0zNTcsNyAmIzQzOzM1Nyw3IEBAIHN0YXRpYyB2b2lkIG52bWVfdGNwX2luaXRfaXRlcihzdHJ1Y3QgbnZtZV90Y3BfcmVxdWVzdCAqcmVxLAogCQlpb3ZfaXRlcl9idmVjKCZhbXA7cmVxLSZndDtpdGVyLCBkaXIsCiAJCQlfX2J2ZWNfaXRlcl9idmVjKGJpby0mZ3Q7YmlfaW9fdmVjLCBiaW8tJmd0O2JpX2l0ZXIpLCBucl9idmVjLAogCQkJYmlvLSZndDtiaV9pdGVyLmJpX3NpemUpOwotCQlyZXEtJmd0O2l0ZXIuaW92X29mZnNldCA9IGJpby0mZ3Q7YmlfaXRlci5iaV9idmVjX2RvbmU7CiYjNDM7CQlyZXEtJmd0O2l0ZXIuaW92X29mZnNldCA9IGJpby0mZ3Q7YmlfaXRlci5iaV9vZmZzZXQ7CiAJfQogfQogCmRpZmYgLS1naXQgYS9mcy9idHJmcy9taXNjLmggYi9mcy9idHJmcy9taXNjLmgKaW5kZXggNjk0YmU2ZDA1NjJhNC4uODAyMDYwOTQzMTgwMSAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvbWlzYy5oCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2J0cmZzL21pc2MuaApAQCAtNzQsNyAmIzQzOzc0LDcgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgYnZlY19pdGVyIGluaXRfYnZlY19pdGVyX2Zvcl9iaW8oc3RydWN0IGJpbyAqYmlvKQogCQkuYmlfc2VjdG9yID0gMCwKIAkJLmJpX3NpemUgPSBiaW9fc2l6ZSwKIAkJLmJpX2lkeCA9IDAsCi0JCS5iaV9idmVjX2RvbmUgPSAwLAomIzQzOwkJLmJpX29mZnNldCA9IDAsCiAJfTsKIH0KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9iaW8uaCBiL2luY2x1ZGUvbGludXgvYmlvLmgKaW5kZXggMDQ0NWVjYmEzYjI0Ny4uMjJjZTlkZWIyZmViYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9iaW8uaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2Jpby5oCkBAIC04MCw3ICYjNDM7ODAsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgYmlvX25vX2FkdmFuY2VfaXRlcihjb25zdCBzdHJ1Y3QgYmlvICpiaW8pCiB7CiAJcmV0dXJuIGJpb19vcChiaW8pID09IFJFUV9PUF9ESVNDQVJEIHx8CiAJICAgICAgIGJpb19vcChiaW8pID09IFJFUV9PUF9TRUNVUkVfRVJBU0UgfHwKLQkgICAgICAgYmlvX29wKGJpbykgPT0gUkVRX09QX1dSSVRFX1pFUk9FUzsKJiM0MzsJICAgICAgIGJpb19vcChiaW8pID09IFJFUV9PUF9XUklURV9aRVJPRVMgfHwKJiM0MzsJICAgICAgIG9wX2lzX2RtYWJ1ZihiaW8tJmd0O2JpX29wZik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCAqYmlvX2RhdGEoc3RydWN0IGJpbyAqYmlvKQpAQCAtMTEzLDExICYjNDM7MTE0LDEzIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBiaW9fYWR2YW5jZV9pdGVyKGNvbnN0IHN0cnVjdCBiaW8gKmJpbywKIHsKIAlpdGVyLSZndDtiaV9zZWN0b3IgJiM0Mzs9IGJ5dGVzICZndDsmZ3Q7IDk7CiAKLQlpZiAoYmlvX25vX2FkdmFuY2VfaXRlcihiaW8pKQomIzQzOwlpZiAoYmlvX25vX2FkdmFuY2VfaXRlcihiaW8pKSB7CiAJCWl0ZXItJmd0O2JpX3NpemUgLT0gYnl0ZXM7Ci0JZWxzZQomIzQzOwkJaXRlci0mZ3Q7Ymlfb2Zmc2V0ICYjNDM7PSBieXRlczsKJiM0MzsJfSBlbHNlIHsKIAkJYnZlY19pdGVyX2FkdmFuY2UoYmlvLSZndDtiaV9pb192ZWMsIGl0ZXIsIGJ5dGVzKTsKIAkJLyogVE9ETzogSXQgaXMgcmVhc29uYWJsZSB0byBjb21wbGV0ZSBiaW8gd2l0aCBlcnJvciBoZXJlLiAqLwomIzQzOwl9CiB9CiAKIC8qIEBieXRlcyBzaG91bGQgYmUgbGVzcyBvciBlcXVhbCB0byBidmVjW2ktJmd0O2JpX2lkeF0uYnZfbGVuICovCkBAIC0xMjcsMTAgJiM0MzsxMzAsMTIgQEAgc3RhdGljIGlubGluZSB2b2lkIGJpb19hZHZhbmNlX2l0ZXJfc2luZ2xlKGNvbnN0IHN0cnVjdCBiaW8gKmJpbywKIHsKIAlpdGVyLSZndDtiaV9zZWN0b3IgJiM0Mzs9IGJ5dGVzICZndDsmZ3Q7IDk7CiAKLQlpZiAoYmlvX25vX2FkdmFuY2VfaXRlcihiaW8pKQomIzQzOwlpZiAoYmlvX25vX2FkdmFuY2VfaXRlcihiaW8pKSB7CiAJCWl0ZXItJmd0O2JpX3NpemUgLT0gYnl0ZXM7Ci0JZWxzZQomIzQzOwkJaXRlci0mZ3Q7Ymlfb2Zmc2V0ICYjNDM7PSBieXRlczsKJiM0MzsJfSBlbHNlIHsKIAkJYnZlY19pdGVyX2FkdmFuY2Vfc2luZ2xlKGJpby0mZ3Q7YmlfaW9fdmVjLCBpdGVyLCBieXRlcyk7CiYjNDM7CX0KIH0KIAogdm9pZCBfX2Jpb19hZHZhbmNlKHN0cnVjdCBiaW8gKiwgdW5zaWduZWQgYnl0ZXMpOwpAQCAtNDM0LDEyICYjNDM7NDM5LDEyIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBiaW9fd291bGRibG9ja19lcnJvcihzdHJ1Y3QgYmlvICpiaW8pCiAKIC8qCiAgKiBDYWxjdWxhdGUgbnVtYmVyIG9mIGJ2ZWMgc2VnbWVudHMgdGhhdCBzaG91bGQgYmUgYWxsb2NhdGVkIHRvIGZpdCBkYXRhCi0gKiBwb2ludGVkIGJ5IEBpdGVyLiBJZiBAaXRlciBpcyBiYWNrZWQgYnkgYnZlYyBpdCYjMzk7cyBnb2luZyB0byBiZSByZXVzZWQKLSAqIGluc3RlYWQgb2YgYWxsb2NhdGluZyBhIG5ldyBvbmUuCiYjNDM7ICogcG9pbnRlZCBieSBAaXRlci4gSWYgQGl0ZXIgaXMgYmFja2VkIGJ5IGEgYnZlYyBvciBhIGRtYWJ1ZiwgdGhlIGJ2ZWMgYXJyYXkgLwomIzQzOyAqIHRoZSBkbWEgbWFwIGFyZSBnb2luZyB0byBiZSByZXVzZWQsIGFuZCBzbyBubyBleHRyYSBhbGxvY2F0aW9uIGlzIHJlcXVpcmVkLgogICovCiBzdGF0aWMgaW5saW5lIGludCBiaW9faW92X3ZlY3NfdG9fYWxsb2Moc3RydWN0IGlvdl9pdGVyICppdGVyLCBpbnQgbWF4X3NlZ3MpCiB7Ci0JaWYgKGlvdl9pdGVyX2lzX2J2ZWMoaXRlcikpCiYjNDM7CWlmIChpb3ZfaXRlcl9pc19idmVjKGl0ZXIpIHx8IGlvdl9pdGVyX2lzX2RtYWJ1Zl9tYXAoaXRlcikpCiAJCXJldHVybiAwOwogCXJldHVybiBpb3ZfaXRlcl9ucGFnZXMoaXRlciwgbWF4X3NlZ3MpOwogfQpAQCAtNTE4LDcgJiM0Mzs1MjMsNyBAQCBpbnQgYmRldl9yd192aXJ0KHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHNlY3Rvcl90IHNlY3Rvciwgdm9pZCAqZGF0YSwKIGludCBiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGlvdl9pdGVyICppdGVyLAogCQl1bnNpZ25lZCBtZW1fYWxpZ25fbWFzaywgdW5zaWduZWQgbGVuX2FsaWduX21hc2spOwogCi12b2lkIGJpb19pb3ZfYnZlY19zZXQoc3RydWN0IGJpbyAqYmlvLCBjb25zdCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIpOwomIzQzO2Jvb2wgYmlvX2lvdl9pdGVyX3NldChzdHJ1Y3QgYmlvICpiaW8sIGNvbnN0IHN0cnVjdCBpb3ZfaXRlciAqaXRlcik7CiB2b2lkIF9fYmlvX3JlbGVhc2VfcGFnZXMoc3RydWN0IGJpbyAqYmlvLCBib29sIG1hcmtfZGlydHkpOwogZXh0ZXJuIHZvaWQgYmlvX3NldF9wYWdlc19kaXJ0eShzdHJ1Y3QgYmlvICpiaW8pOwogZXh0ZXJuIHZvaWQgYmlvX2NoZWNrX3BhZ2VzX2RpcnR5KHN0cnVjdCBiaW8gKmJpbyk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Jsay1tcS5oIGIvaW5jbHVkZS9saW51eC9ibGstbXEuaAppbmRleCBhZjg3ODU5N2FmYjhjLi43Yzc1MDRjODRlMDkwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Jsay1tcS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvYmxrLW1xLmgKQEAgLTEwMTcsNiAmIzQzOzEwMTcsMTMgQEAgc3RhdGljIGlubGluZSB2b2lkICpibGtfbXFfcnFfdG9fcGR1KHN0cnVjdCByZXF1ZXN0ICpycSkKIAlyZXR1cm4gcnEgJiM0MzsgMTsKIH0KIAomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBibGtfbXFfcnFfaXNfZG1hYnVmKHN0cnVjdCByZXF1ZXN0ICpycSkKJiM0Mzt7CiYjNDM7CWlmICghSVNfRU5BQkxFRChDT05GSUdfRE1BX1NIQVJFRF9CVUZGRVIpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwlyZXR1cm4gcnEtJmd0O2JpbyAmYW1wOyZhbXA7IG9wX2lzX2RtYWJ1ZihycS0mZ3Q7YmlvLSZndDtiaV9vcGYpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGJsa19tcV9od19jdHggKnF1ZXVlX2hjdHgoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIGludCBpZCkKIHsKIAlzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqaGN0eDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYmxrX3R5cGVzLmggYi9pbmNsdWRlL2xpbnV4L2Jsa190eXBlcy5oCmluZGV4IGQ0OWQ5N2EwNTBkMGUuLmEzMDU5NTFmMDMxMjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYmxrX3R5cGVzLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9ibGtfdHlwZXMuaApAQCAtMjMzLDcgJiM0MzsyMzMsMTIgQEAgc3RydWN0IGJpbyB7CiAJYXRvbWljX3QJCV9fYmlfcmVtYWluaW5nOwogCiAJLyogVGhlIGFjdHVhbCB2ZWMgbGlzdCwgcHJlc2VydmVkIGJ5IGJpb19yZXNldCgpICovCi0Jc3RydWN0IGJpb192ZWMJCSpiaV9pb192ZWM7CiYjNDM7CXVuaW9uIHsKJiM0MzsJCXN0cnVjdCBiaW9fdmVjCQkqYmlfaW9fdmVjOwomIzQzOwkJLyogRHJpdmVyIHNwZWNpZmljIGRtYSBtYXAsIHZhbGlkIElGRiBSRVFfRE1BQlVGIGlzIHNldCAqLwomIzQzOwkJc3RydWN0IGRtYV9idWZfaW9fbWFwCSpiaV9kbWFidWZfbWFwOwomIzQzOwl9OwomIzQzOwogCXN0cnVjdCBidmVjX2l0ZXIJYmlfaXRlcjsKIAogCXVuaW9uIHsKQEAgLTQwMiw2ICYjNDM7NDA3LDcgQEAgZW51bSByZXFfZmxhZ19iaXRzIHsKIAlfX1JFUV9EUlYsCQkvKiBmb3IgZHJpdmVyIHVzZSAqLwogCV9fUkVRX0ZTX1BSSVZBVEUsCS8qIGZvciBmaWxlIHN5c3RlbSAoc3VibWl0dGVyKSB1c2UgKi8KIAlfX1JFUV9BVE9NSUMsCQkvKiBmb3IgYXRvbWljIHdyaXRlIG9wZXJhdGlvbnMgKi8KJiM0MzsJX19SRVFfRE1BQlVGLAkJLyogVXNpbmcgcHJlbW1hcGVkIGRtYSBidWZmZXJzICovCiAJLyoKIAkgKiBDb21tYW5kIHNwZWNpZmljIGZsYWdzLCBrZWVwIGxhc3Q6CiAJICovCkBAIC00MzQsNiAmIzQzOzQ0MCw3IEBAIGVudW0gcmVxX2ZsYWdfYml0cyB7CiAjZGVmaW5lIFJFUV9EUlYJCShfX2ZvcmNlIGJsa19vcGZfdCkoMVVMTCAmbHQ7Jmx0OyBfX1JFUV9EUlYpCiAjZGVmaW5lIFJFUV9GU19QUklWQVRFCShfX2ZvcmNlIGJsa19vcGZfdCkoMVVMTCAmbHQ7Jmx0OyBfX1JFUV9GU19QUklWQVRFKQogI2RlZmluZSBSRVFfQVRPTUlDCShfX2ZvcmNlIGJsa19vcGZfdCkoMVVMTCAmbHQ7Jmx0OyBfX1JFUV9BVE9NSUMpCiYjNDM7I2RlZmluZSBSRVFfRE1BQlVGCShfX2ZvcmNlIGJsa19vcGZfdCkoMVVMTCAmbHQ7Jmx0OyBfX1JFUV9ETUFCVUYpCiAKICNkZWZpbmUgUkVRX05PVU5NQVAJKF9fZm9yY2UgYmxrX29wZl90KSgxVUxMICZsdDsmbHQ7IF9fUkVRX05PVU5NQVApCiAKQEAgLTQ4Nyw2ICYjNDM7NDk0LDExIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBvcF9pc19kaXNjYXJkKGJsa19vcGZfdCBvcCkKIAlyZXR1cm4gKG9wICZhbXA7IFJFUV9PUF9NQVNLKSA9PSBSRVFfT1BfRElTQ0FSRDsKIH0KIAomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBvcF9pc19kbWFidWYoYmxrX29wZl90IG9wKQomIzQzO3sKJiM0MzsJcmV0dXJuIG9wICZhbXA7IFJFUV9ETUFCVUY7CiYjNDM7fQomIzQzOwogLyoKICAqIENoZWNrIGlmIGEgYmlvIG9yIHJlcXVlc3Qgb3BlcmF0aW9uIGlzIGEgem9uZSBtYW5hZ2VtZW50IG9wZXJhdGlvbi4KICAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ibGtkZXYuaCBiL2luY2x1ZGUvbGludXgvYmxrZGV2LmgKaW5kZXggOTIxM2E1NzE2Zjk1YS4uOWY0YzkyZTUxZGM5NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ibGtkZXYuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oCkBAIC0xNjgyLDYgJiM0MzsxNjgyLDggQEAgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIHsKIAkvKiByZXR1cm5zIHRoZSBsZW5ndGggb2YgdGhlIGlkZW50aWZpZXIgb3IgYSBuZWdhdGl2ZSBlcnJubzogKi8KIAlpbnQgKCpnZXRfdW5pcXVlX2lkKShzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgdTggaWRbMTZdLAogCQkJZW51bSBibGtfdW5pcXVlX2lkIGlkX3R5cGUpOwomIzQzOwlpbnQgKCppbml0X2RtYV9idWZfaW9fY3R4KShzdHJ1Y3QgYmxvY2tfZGV2aWNlICosCiYjNDM7CQkJCSAgIHN0cnVjdCBkbWFfYnVmX2lvX2N0eCAqKTsKIAlzdHJ1Y3QgbW9kdWxlICpvd25lcjsKIAljb25zdCBzdHJ1Y3QgcHJfb3BzICpwcl9vcHM7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnZlYy5oIGIvaW5jbHVkZS9saW51eC9idmVjLmgKaW5kZXggOTI4MzdlMjc0M2YxOS4uYjYzOTE0ZmY1NmUzMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9idmVjLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9idmVjLmgKQEAgLTEwOCw5ICYjNDM7MTA4LDEwIEBAIHN0cnVjdCBidmVjX2l0ZXIgewogCXVuc2lnbmVkIGludAkJYmlfaWR4OwogCiAJLyoKLQkgKiBDdXJyZW50IG9mZnNldCBpbiB0aGUgYnZlYyBlbnRyeSBwb2ludGVkIHRvIGJ5IGBiaV9pZHhgLgomIzQzOwkgKiBDdXJyZW50IG9mZnNldCBpbiB0aGUgYnZlYyBlbnRyeSBwb2ludGVkIHRvIGJ5IGBiaV9pZHhgIG9yIGludG8KJiM0MzsJICogYSBkbWEtYnVmIG1hcC4KIAkgKi8KLQl1bnNpZ25lZCBpbnQJCWJpX2J2ZWNfZG9uZTsKJiM0MzsJdW5zaWduZWQgaW50CQliaV9vZmZzZXQ7CiB9IF9fcGFja2VkIF9fYWxpZ25lZCg0KTsKIAogc3RydWN0IGJ2ZWNfaXRlcl9hbGwgewpAQCAtMTM1LDE0ICYjNDM7MTM2LDE0IEBAIG1wX2J2ZWNfaXRlcl9wYWdlKGNvbnN0IHN0cnVjdCBiaW9fdmVjICpidmVjcywgY29uc3Qgc3RydWN0IGJ2ZWNfaXRlciBpdGVyKQogc3RhdGljIF9fYWx3YXlzX2lubGluZSB1bnNpZ25lZCBpbnQKIG1wX2J2ZWNfaXRlcl9sZW4oY29uc3Qgc3RydWN0IGJpb192ZWMgKmJ2ZWNzLCBjb25zdCBzdHJ1Y3QgYnZlY19pdGVyIGl0ZXIpCiB7Ci0JcmV0dXJuIG1pbihfX2J2ZWNfaXRlcl9idmVjKGJ2ZWNzLCBpdGVyKS0mZ3Q7YnZfbGVuIC0gaXRlci5iaV9idmVjX2RvbmUsCiYjNDM7CXJldHVybiBtaW4oX19idmVjX2l0ZXJfYnZlYyhidmVjcywgaXRlciktJmd0O2J2X2xlbiAtIGl0ZXIuYmlfb2Zmc2V0LAogCQkJaXRlci5iaV9zaXplKTsKIH0KIAogc3RhdGljIF9fYWx3YXlzX2lubGluZSB1bnNpZ25lZCBpbnQKIG1wX2J2ZWNfaXRlcl9vZmZzZXQoY29uc3Qgc3RydWN0IGJpb192ZWMgKmJ2ZWNzLCBjb25zdCBzdHJ1Y3QgYnZlY19pdGVyIGl0ZXIpCiB7Ci0JcmV0dXJuIF9fYnZlY19pdGVyX2J2ZWMoYnZlY3MsIGl0ZXIpLSZndDtidl9vZmZzZXQgJiM0MzsgaXRlci5iaV9idmVjX2RvbmU7CiYjNDM7CXJldHVybiBfX2J2ZWNfaXRlcl9idmVjKGJ2ZWNzLCBpdGVyKS0mZ3Q7YnZfb2Zmc2V0ICYjNDM7IGl0ZXIuYmlfb2Zmc2V0OwogfQogCiBzdGF0aWMgX19hbHdheXNfaW5saW5lIHVuc2lnbmVkIGludApAQCAtMjA0LDcgJiM0MzsyMDUsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgYnZlY19pdGVyX2FkdmFuY2UoY29uc3Qgc3RydWN0IGJpb192ZWMgKmJ2LAogCX0KIAogCWl0ZXItJmd0O2JpX3NpemUgLT0gYnl0ZXM7Ci0JYnl0ZXMgJiM0Mzs9IGl0ZXItJmd0O2JpX2J2ZWNfZG9uZTsKJiM0MzsJYnl0ZXMgJiM0Mzs9IGl0ZXItJmd0O2JpX29mZnNldDsKIAogCXdoaWxlIChieXRlcyAmYW1wOyZhbXA7IGJ5dGVzICZndDs9IGJ2W2lkeF0uYnZfbGVuKSB7CiAJCWJ5dGVzIC09IGJ2W2lkeF0uYnZfbGVuOwpAQCAtMjEyLDcgJiM0MzsyMTMsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgYnZlY19pdGVyX2FkdmFuY2UoY29uc3Qgc3RydWN0IGJpb192ZWMgKmJ2LAogCX0KIAogCWl0ZXItJmd0O2JpX2lkeCA9IGlkeDsKLQlpdGVyLSZndDtiaV9idmVjX2RvbmUgPSBieXRlczsKJiM0MzsJaXRlci0mZ3Q7Ymlfb2Zmc2V0ID0gYnl0ZXM7CiAJcmV0dXJuIHRydWU7CiB9CiAKQEAgLTIyMywxMyAmIzQzOzIyNCwxMyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgYnZlY19pdGVyX2FkdmFuY2UoY29uc3Qgc3RydWN0IGJpb192ZWMgKmJ2LAogc3RhdGljIGlubGluZSB2b2lkIGJ2ZWNfaXRlcl9hZHZhbmNlX3NpbmdsZShjb25zdCBzdHJ1Y3QgYmlvX3ZlYyAqYnYsCiAJCQkJc3RydWN0IGJ2ZWNfaXRlciAqaXRlciwgdW5zaWduZWQgaW50IGJ5dGVzKQogewotCXVuc2lnbmVkIGludCBkb25lID0gaXRlci0mZ3Q7YmlfYnZlY19kb25lICYjNDM7IGJ5dGVzOwomIzQzOwl1bnNpZ25lZCBpbnQgZG9uZSA9IGl0ZXItJmd0O2JpX29mZnNldCAmIzQzOyBieXRlczsKIAogCWlmIChkb25lID09IGJ2W2l0ZXItJmd0O2JpX2lkeF0uYnZfbGVuKSB7CiAJCWRvbmUgPSAwOwogCQlpdGVyLSZndDtiaV9pZHgmIzQzOyYjNDM7OwogCX0KLQlpdGVyLSZndDtiaV9idmVjX2RvbmUgPSBkb25lOwomIzQzOwlpdGVyLSZndDtiaV9vZmZzZXQgPSBkb25lOwogCWl0ZXItJmd0O2JpX3NpemUgLT0gYnl0ZXM7CiB9CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZG1hLWJ1Zi1pby5oIGIvaW5jbHVkZS9saW51eC9kbWEtYnVmLWlvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uZjMxYzczNzVhZTkxMQotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvZG1hLWJ1Zi1pby5oCkBAIC0wLDAgJiM0MzsxLDkyIEBACiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi8KJiM0MzsjaWZuZGVmIF9fRE1BX0JVRl9JT19IX18KJiM0MzsjZGVmaW5lIF9fRE1BX0JVRl9JT19IX18KJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvZG1hLWJ1Zi5oJmd0OwomIzQzOwomIzQzO3N0cnVjdCBkbWFfYnVmX2lvX2ZlbmNlOwomIzQzO3N0cnVjdCBkbWFfYnVmX2lvX2N0eDsKJiM0MztzdHJ1Y3QgZG1hX2J1Zl9pb19tYXA7CiYjNDM7CiYjNDM7c3RydWN0IGRtYV9idWZfaW9fb3BzIHsKJiM0MzsJLyoKJiM0MzsJICogQ3JlYXRlIGEgbmV3IG1hcCBmb3IgdGhlIGdpdmVuIGN0eC4gQ2FsbGVkIHdpdGggdGhlIHJlc2VydmF0aW9uCiYjNDM7CSAqIGxvY2sgaGVsZC4KJiM0MzsJICovCiYjNDM7CXN0cnVjdCBkbWFfYnVmX2lvX21hcCAqKCptYXApKHN0cnVjdCBkbWFfYnVmX2lvX2N0eCAqY3R4KTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogQ2xlYW4gdXAgZGV2aWNlIHNwZWNpZmljIHBhcnRzIG9mIHRoZSBAbWFwLiBDYWxsZWQgd2l0aCB0aGUKJiM0MzsJICogcmVzZXJ2YXRpb24gbG9jayBoZWxkLgomIzQzOwkgKi8KJiM0MzsJdm9pZCAoKnVubWFwKShzdHJ1Y3QgZG1hX2J1Zl9pb19jdHggKmN0eCwgc3RydWN0IGRtYV9idWZfaW9fbWFwICptYXApOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBUaGUgdXNlciB0cmllcyB0byBkZXN0cm95IHRoZSBjdHguIFJlbGVhc2UgYWxsIGRldmljZSBzcGVjaWZpYwomIzQzOwkgKiBwYXJ0cyBvZiB0aGUgdG9rZW4uCiYjNDM7CSAqLwomIzQzOwl2b2lkICgqcmVsZWFzZSkoc3RydWN0IGRtYV9idWZfaW9fY3R4ICopOwomIzQzO307CiYjNDM7CiYjNDM7c3RydWN0IGRtYV9idWZfaW9fbWFwIHsKJiM0MzsJLyoKJiM0MzsJICogQ291bnRzIGF0dGFjaGVkIHJlcXVlc3RzIGFuZCBvdGhlciB1c2Vycy4gRGV2aWNlIHNwZWNpZmljIHVubWFwcGluZwomIzQzOwkgKiBpcyBkZWZlcnJlZCB1bnRpbCBhbGwgcmVmcyBhcmUgZHJvcHBlZC4KJiM0MzsJICovCiYjNDM7CXN0cnVjdCBwZXJjcHVfcmVmCQlyZWZzOwomIzQzOwl1bnNpZ25lZAkJCXNlZ19zaGlmdDsKJiM0MzsKJiM0MzsJc3RydWN0IHdvcmtfc3RydWN0CQlyZWxlYXNlX3dvcms7CiYjNDM7CXN0cnVjdCBkbWFfYnVmX2lvX2ZlbmNlCQkqZmVuY2U7CiYjNDM7CXN0cnVjdCBkbWFfYnVmX2lvX2N0eAkJKmN0eDsKJiM0Mzt9OwomIzQzOwomIzQzO3N0cnVjdCBkbWFfYnVmX2lvX2N0eCB7CiYjNDM7CXN0cnVjdCBkbWFfYnVmX2lvX21hcCBfX3JjdQkJKm1hcDsKJiM0MzsJc3RydWN0IGRtYV9idWYJCQkJKmRtYWJ1ZjsKJiM0MzsJZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24JCQlkaXI7CiYjNDM7CiYjNDM7CWF0b21pY190CQkJCWZlbmNlX3NlcTsKJiM0MzsJdTY0CQkJCQlmZW5jZV9jdHg7CiYjNDM7CXN0cnVjdCB3b3JrX3N0cnVjdAkJCXJlbGVhc2Vfd29yazsKJiM0MzsJcmVmY291bnRfdAkJCQlyZWZzOwomIzQzOwomIzQzOwl2b2lkCQkJCQkqZGV2X3ByaXY7CiYjNDM7CWNvbnN0IHN0cnVjdCBkbWFfYnVmX2lvX29wcwkJKmRldl9vcHM7CiYjNDM7fTsKJiM0MzsKJiM0MztpbnQgZG1hX2J1Zl9pb19jdHhfY3JlYXRlKHN0cnVjdCBmaWxlICpmaWxlLAomIzQzOwkJCSAgIHN0cnVjdCBkbWFfYnVmX2lvX2N0eCAqY3R4LAomIzQzOwkJCSAgIHN0cnVjdCBkbWFfYnVmICpkbWFidWYsCiYjNDM7CQkJICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKTsKJiM0Mzt2b2lkIGRtYV9idWZfaW9fY3R4X3JlbGVhc2Uoc3RydWN0IGRtYV9idWZfaW9fY3R4ICpjdHgpOwomIzQzOwomIzQzO3N0cnVjdCBkbWFfYnVmX2lvX21hcCAqZG1hX2J1Zl9pb19jcmVhdGVfbWFwKHN0cnVjdCBkbWFfYnVmX2lvX2N0eCAqY3R4KTsKJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCBkbWFfYnVmX2lvX21hcCAqCiYjNDM7ZG1hX2J1Zl9pb19nZXRfbWFwKHN0cnVjdCBkbWFfYnVmX2lvX2N0eCAqY3R4KQomIzQzO3sKJiM0MzsJc3RydWN0IGRtYV9idWZfaW9fbWFwICptYXA7CiYjNDM7CiYjNDM7CWd1YXJkKHJjdSkoKTsKJiM0MzsKJiM0MzsJbWFwID0gcmN1X2RlcmVmZXJlbmNlKGN0eC0mZ3Q7bWFwKTsKJiM0MzsJaWYgKHVubGlrZWx5KCFtYXAgfHwgIXBlcmNwdV9yZWZfdHJ5Z2V0X2xpdmVfcmN1KCZhbXA7bWFwLSZndDtyZWZzKSkpCiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsKJiM0MzsJcmV0dXJuIG1hcDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGRtYV9idWZfaW9fbWFwX2Ryb3Aoc3RydWN0IGRtYV9idWZfaW9fbWFwICptYXApCiYjNDM7ewomIzQzOwlwZXJjcHVfcmVmX3B1dCgmYW1wO21hcC0mZ3Q7cmVmcyk7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogRGV2aWNlIEFQSQomIzQzOyAqLwomIzQzOwomIzQzO3ZvaWQgZG1hX2J1Zl9pb19pbnZhbGlkYXRlX21hcHBpbmdzKHN0cnVjdCBkbWFfYnVmX2lvX2N0eCAqY3R4KTsKJiM0MztpbnQgZG1hX2J1Zl9pb19pbml0X21hcChzdHJ1Y3QgZG1hX2J1Zl9pb19jdHggKmN0eCwgc3RydWN0IGRtYV9idWZfaW9fbWFwICptYXApOwomIzQzOwomIzQzOyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mcy5oIGIvaW5jbHVkZS9saW51eC9mcy5oCmluZGV4IDUwY2U3MzFhMmI3OGYuLmU2MmZhNjUzZTE0ODQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZnMuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2ZzLmgKQEAgLTE5MTQsNiAmIzQzOzE5MTQsNyBAQCBzdHJ1Y3QgZGlyX2NvbnRleHQgewogI2RlZmluZSBDT1BZX0ZJTEVfU1BMSUNFCQkoMSAmbHQ7Jmx0OyAwKQogCiBzdHJ1Y3QgaW9fdXJpbmdfY21kOwomIzQzO3N0cnVjdCBkbWFfYnVmX2lvX2N0eDsKIHN0cnVjdCBvZmZzZXRfY3R4OwogCiB0eXBlZGVmIHVuc2lnbmVkIGludCBfX2JpdHdpc2UgZm9wX2ZsYWdzX3Q7CkBAIC0xOTYyLDYgJiM0MzsxOTYzLDcgQEAgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB7CiAJaW50ICgqdXJpbmdfY21kX2lvcG9sbCkoc3RydWN0IGlvX3VyaW5nX2NtZCAqLCBzdHJ1Y3QgaW9fY29tcF9iYXRjaCAqLAogCQkJCXVuc2lnbmVkIGludCBwb2xsX2ZsYWdzKTsKIAlpbnQgKCptbWFwX3ByZXBhcmUpKHN0cnVjdCB2bV9hcmVhX2Rlc2MgKik7CiYjNDM7CWludCAoKmluaXRfZG1hX2J1Zl9pb19jdHgpKHN0cnVjdCBmaWxlICosIHN0cnVjdCBkbWFfYnVmX2lvX2N0eCAqKTsKIH0gX19yYW5kb21pemVfbGF5b3V0OwogCiAvKiBTdXBwb3J0cyBhc3luYyBidWZmZXJlZCByZWFkcyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pb191cmluZ190eXBlcy5oIGIvaW5jbHVkZS9saW51eC9pb191cmluZ190eXBlcy5oCmluZGV4IGEyYzYyM2E2N2EyNTEuLmY5MDU4NmQzNTNjMWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaW9fdXJpbmdfdHlwZXMuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2lvX3VyaW5nX3R5cGVzLmgKQEAgLTEwLDYgJiM0MzsxMCw3IEBACiAKIHN0cnVjdCBpb3VfbG9vcF9wYXJhbXM7CiBzdHJ1Y3QgaW9fdXJpbmdfYnBmX29wczsKJiM0MztzdHJ1Y3QgZG1hX2J1Zl9pb19tYXA7CiAKIGVudW0gewogCS8qCkBAIC01OTQsNiAmIzQzOzU5NSw3IEBAIGVudW0gewogCVJFUV9GX0lNUE9SVF9CVUZGRVJfQklULAogCVJFUV9GX1NRRV9DT1BJRURfQklULAogCVJFUV9GX0lPUE9MTF9CSVQsCiYjNDM7CVJFUV9GX0RST1BfRE1BQlVGX0JJVCwKIAogCS8qIG5vdCBhIHJlYWwgYml0LCBqdXN0IHRvIGNoZWNrIHdlJiMzOTtyZSBub3Qgb3ZlcmZsb3dpbmcgdGhlIHNwYWNlICovCiAJX19SRVFfRl9MQVNUX0JJVCwKQEAgLTY4OSw2ICYjNDM7NjkxLDggQEAgZW51bSB7CiAJUkVRX0ZfU1FFX0NPUElFRAk9IElPX1JFUV9GTEFHKFJFUV9GX1NRRV9DT1BJRURfQklUKSwKIAkvKiByZXF1ZXN0IG11c3QgYmUgaW9wb2xsZWQgdG8gY29tcGxldGlvbiAoc2V0IGluIC0mZ3Q7aXNzdWUoKSkgKi8KIAlSRVFfRl9JT1BPTEwJCT0gSU9fUkVRX0ZMQUcoUkVRX0ZfSU9QT0xMX0JJVCksCiYjNDM7CS8qIHRoZXJlIGlzIGEgZG1hIG1hcCBhdHRhY2hlZCB0byByZXF1ZXN0IHRoYXQgbmVlZHMgdG8gYmUgZHJvcHBlZCAqLwomIzQzOwlSRVFfRl9EUk9QX0RNQUJVRgk9IElPX1JFUV9GTEFHKFJFUV9GX0RST1BfRE1BQlVGX0JJVCksCiB9OwogCiBzdHJ1Y3QgaW9fdHdfcmVxIHsKQEAgLTgxMSw2ICYjNDM7ODE1LDcgQEAgc3RydWN0IGlvX2tpb2NiIHsKIAkvKiBjdXN0b20gY3JlZGVudGlhbHMsIHZhbGlkIElGRiBSRVFfRl9DUkVEUyBpcyBzZXQgKi8KIAljb25zdCBzdHJ1Y3QgY3JlZAkJKmNyZWRzOwogCXN0cnVjdCBpb193cV93b3JrCQl3b3JrOwomIzQzOwlzdHJ1Y3QgZG1hX2J1Zl9pb19tYXAJCSpkbWFidWZfbWFwOwogCiAJc3RydWN0IGlvX2JpZ19jcWUgewogCQl1NjQJCQlleHRyYTE7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3Vpby5oIGIvaW5jbHVkZS9saW51eC91aW8uaAppbmRleCBmZTJlOTg1ZDc0ZDI0Li42MzhjMTExNmU5MTJlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3Vpby5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvdWlvLmgKQEAgLTEyLDYgJiM0MzsxMiw3IEBACiAKIHN0cnVjdCBwYWdlOwogc3RydWN0IGZvbGlvX3F1ZXVlOwomIzQzO3N0cnVjdCBkbWFfYnVmX2lvX21hcDsKIAogdHlwZWRlZiB1bnNpZ25lZCBpbnQgX19iaXR3aXNlIGlvdl9pdGVyX2V4dHJhY3Rpb25fdDsKIApAQCAtMjksNiAmIzQzOzMwLDcgQEAgZW51bSBpdGVyX3R5cGUgewogCUlURVJfRk9MSU9RLAogCUlURVJfWEFSUkFZLAogCUlURVJfRElTQ0FSRCwKJiM0MzsJSVRFUl9ETUFCVUZfTUFQLAogfTsKIAogI2RlZmluZSBJVEVSX1NPVVJDRQkxCS8vID09IFdSSVRFCkBAIC03MSw2ICYjNDM7NzMsNyBAQCBzdHJ1Y3QgaW92X2l0ZXIgewogCQkJCWNvbnN0IHN0cnVjdCBmb2xpb19xdWV1ZSAqZm9saW9xOwogCQkJCXN0cnVjdCB4YXJyYXkgKnhhcnJheTsKIAkJCQl2b2lkIF9fdXNlciAqdWJ1ZjsKJiM0MzsJCQkJc3RydWN0IGRtYV9idWZfaW9fbWFwICpkbWFidWZfbWFwOwogCQkJfTsKIAkJCXNpemVfdCBjb3VudDsKIAkJfTsKQEAgLTE1NSw2ICYjNDM7MTU4LDExIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpb3ZfaXRlcl9pc194YXJyYXkoY29uc3Qgc3RydWN0IGlvdl9pdGVyICppKQogCXJldHVybiBpb3ZfaXRlcl90eXBlKGkpID09IElURVJfWEFSUkFZOwogfQogCiYjNDM7c3RhdGljIGlubGluZSBib29sIGlvdl9pdGVyX2lzX2RtYWJ1Zl9tYXAoY29uc3Qgc3RydWN0IGlvdl9pdGVyICppKQomIzQzO3sKJiM0MzsJcmV0dXJuIGlvdl9pdGVyX3R5cGUoaSkgPT0gSVRFUl9ETUFCVUZfTUFQOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgY2hhciBpb3ZfaXRlcl9ydyhjb25zdCBzdHJ1Y3QgaW92X2l0ZXIgKmkpCiB7CiAJcmV0dXJuIGktJmd0O2RhdGFfc291cmNlID8gV1JJVEUgOiBSRUFEOwpAQCAtMzAwLDYgJiM0MzszMDgsOSBAQCB2b2lkIGlvdl9pdGVyX2ZvbGlvX3F1ZXVlKHN0cnVjdCBpb3ZfaXRlciAqaSwgdW5zaWduZWQgaW50IGRpcmVjdGlvbiwKIAkJCSAgdW5zaWduZWQgaW50IGZpcnN0X3Nsb3QsIHVuc2lnbmVkIGludCBvZmZzZXQsIHNpemVfdCBjb3VudCk7CiB2b2lkIGlvdl9pdGVyX3hhcnJheShzdHJ1Y3QgaW92X2l0ZXIgKmksIHVuc2lnbmVkIGludCBkaXJlY3Rpb24sIHN0cnVjdCB4YXJyYXkgKnhhcnJheSwKIAkJICAgICBsb2ZmX3Qgc3RhcnQsIHNpemVfdCBjb3VudCk7CiYjNDM7dm9pZCBpb3ZfaXRlcl9kbWFidWZfbWFwKHN0cnVjdCBpb3ZfaXRlciAqaSwgdW5zaWduZWQgaW50IGRpcmVjdGlvbiwKJiM0MzsJCQlzdHJ1Y3QgZG1hX2J1Zl9pb19tYXAgKm1hcCwKJiM0MzsJCQlsb2ZmX3Qgb2ZmLCBzaXplX3QgY291bnQpOwogc3NpemVfdCBpb3ZfaXRlcl9nZXRfcGFnZXMyKHN0cnVjdCBpb3ZfaXRlciAqaSwgc3RydWN0IHBhZ2UgKipwYWdlcywKIAkJCXNpemVfdCBtYXhzaXplLCB1bnNpZ25lZCBtYXhwYWdlcywgc2l6ZV90ICpzdGFydCk7CiBzc2l6ZV90IGlvdl9pdGVyX2dldF9wYWdlc19hbGxvYzIoc3RydWN0IGlvdl9pdGVyICppLCBzdHJ1Y3QgcGFnZSAqKipwYWdlcywKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9pb191cmluZy5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L2lvX3VyaW5nLmgKaW5kZXggOTA5ZmI3YWVhNjM4ZS4uYzM5Mjk3ZThiZWI2ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L2lvX3VyaW5nLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS91YXBpL2xpbnV4L2lvX3VyaW5nLmgKQEAgLTc5MCwxMyAmIzQzOzc5MCw0MiBAQCBzdHJ1Y3QgaW9fdXJpbmdfcnNyY191cGRhdGUgewogCiBzdHJ1Y3QgaW9fdXJpbmdfcnNyY191cGRhdGUyIHsKIAlfX3UzMiBvZmZzZXQ7Ci0JX191MzIgcmVzdjsKJiM0MzsJX191MzIgZmxhZ3M7CiAJX19hbGlnbmVkX3U2NCBkYXRhOwogCV9fYWxpZ25lZF91NjQgdGFnczsKIAlfX3UzMiBucjsKIAlfX3UzMiByZXN2MjsKIH07CiAKJiM0MzsvKiBzdHJ1Y3QgaW9fdXJpbmdfcnNyY191cGRhdGUyOjpmbGFncyAqLwomIzQzO2VudW0gaW9fdXJpbmdfcnNyY19yZWdfZmxhZ3MgewomIzQzOwkvKgomIzQzOwkgKiBVc2UgdGhlIGV4dGVuZGVkIGRlc2NyaXB0b3IgZm9ybWF0IGZvciBidWZmZXIgdXBkYXRlcywKJiM0MzsJICogc2VlIHN0cnVjdCBpb191cmluZ19yZWdidWZfZGVzYwomIzQzOwkgKi8KJiM0MzsJSU9SSU5HX1JTUkNfVVBEQVRFX0VYVEVOREVECQk9IDFVICZsdDsmbHQ7IDEsCiYjNDM7fTsKJiM0MzsKJiM0MzsvKiBCdWZmZXIgcmVnaXN0cmF0aW9uIHR5cGUsIHBhc3NlZCBpbiBzdHJ1Y3QgaW9fdXJpbmdfcmVnYnVmX2Rlc2M6OnR5cGUgKi8KJiM0MztlbnVtIGlvX3VyaW5nX3JlZ2J1Zl90eXBlIHsKJiM0MzsJSU9fUkVHQlVGX1RZUEVfRU1QVFksCiYjNDM7CUlPX1JFR0JVRl9UWVBFX1VBRERSLAomIzQzOwlJT19SRUdCVUZfVFlQRV9ETUFCVUYsCiYjNDM7CiYjNDM7CV9fSU9fUkVHQlVGX1RZUEVfTUFYLAomIzQzO307CiYjNDM7CiYjNDM7c3RydWN0IGlvX3VyaW5nX3JlZ2J1Zl9kZXNjIHsKJiM0MzsJX191MzIgdHlwZTsgLyogZW51bSBpb191cmluZ19yZWdidWZfdHlwZSAqLwomIzQzOwlfX3UzMiBmbGFnczsKJiM0MzsJX191NjQgc2l6ZTsKJiM0MzsJX191NjQgdWFkZHI7CiYjNDM7CiYjNDM7CV9fczMyIGRtYWJ1Zl9mZDsKJiM0MzsJX19zMzIgdGFyZ2V0X2ZkOwomIzQzOwlfX3U2NCBfX3Jlc3ZbNl07CiYjNDM7fTsKJiM0MzsKIC8qIFNraXAgdXBkYXRpbmcgZmQgaW5kZXhlcyBzZXQgdG8gdGhpcyB2YWx1ZSBpbiB0aGUgZmQgdGFibGUgKi8KICNkZWZpbmUgSU9SSU5HX1JFR0lTVEVSX0ZJTEVTX1NLSVAJKC0yKQogCmRpZmYgLS1naXQgYS9pb191cmluZy9pb191cmluZy5jIGIvaW9fdXJpbmcvaW9fdXJpbmcuYwppbmRleCA0YzgzYTk0YjRiZGMzLi5kMWQ3NDhiNWM1ZGNhIDEwMDY0NAotLS0gYS9pb191cmluZy9pb191cmluZy5jCiYjNDM7JiM0MzsmIzQzOyBiL2lvX3VyaW5nL2lvX3VyaW5nLmMKQEAgLTEwOSw3ICYjNDM7MTA5LDcgQEAKIAogI2RlZmluZSBJT19SRVFfQ0xFQU5fU0xPV19GTEFHUyAoUkVRX0ZfUkVGQ09VTlQgfCBJT19SRVFfTElOS19GTEFHUyB8IFwKIAkJCQkgUkVRX0ZfUkVJU1NVRSB8IFJFUV9GX1BPTExFRCB8IFwKLQkJCQkgSU9fUkVRX0NMRUFOX0ZMQUdTKQomIzQzOwkJCQkgSU9fUkVRX0NMRUFOX0ZMQUdTIHwgUkVRX0ZfRFJPUF9ETUFCVUYpCiAKICNkZWZpbmUgSU9fVENUWF9SRUZTX0NBQ0hFX05SCSgxVSAmbHQ7Jmx0OyAxMCkKIApAQCAtMTExNCw2ICYjNDM7MTExNCw3IEBAIHN0YXRpYyB2b2lkIGlvX2ZyZWVfYmF0Y2hfbGlzdChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwKIAkJCQlpb19xdWV1ZV9uZXh0KHJlcSk7CiAJCQlpZiAodW5saWtlbHkocmVxLSZndDtmbGFncyAmYW1wOyBJT19SRVFfQ0xFQU5fRkxBR1MpKQogCQkJCWlvX2NsZWFuX29wKHJlcSk7CiYjNDM7CQkJaW9fcmVxX2Ryb3BfZG1hYnVmKHJlcSk7CiAJCX0KIAkJaW9fcHV0X2ZpbGUocmVxKTsKIAkJaW9fcmVxX3B1dF9yc3JjX25vZGVzKHJlcSk7CmRpZmYgLS1naXQgYS9pb191cmluZy9uZXQuYyBiL2lvX3VyaW5nL25ldC5jCmluZGV4IGE3NGQxNWY3YjdkMmIuLjQzOWM5OWFkMTg4NDEgMTAwNjQ0Ci0tLSBhL2lvX3VyaW5nL25ldC5jCiYjNDM7JiM0MzsmIzQzOyBiL2lvX3VyaW5nL25ldC5jCkBAIC0xNDcxLDcgJiM0MzsxNDcxLDcgQEAgc3RhdGljIGludCBpb19zZ19mcm9tX2l0ZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJcmV0dXJuIHplcm9jb3B5X2ZpbGxfc2tiX2Zyb21faXRlcihza2IsIGZyb20sIGxlbmd0aCk7CiAKIAliaS5iaV9zaXplID0gbWluKGZyb20tJmd0O2NvdW50LCBsZW5ndGgpOwotCWJpLmJpX2J2ZWNfZG9uZSA9IGZyb20tJmd0O2lvdl9vZmZzZXQ7CiYjNDM7CWJpLmJpX29mZnNldCA9IGZyb20tJmd0O2lvdl9vZmZzZXQ7CiAJYmkuYmlfaWR4ID0gMDsKIAogCXdoaWxlIChiaS5iaV9zaXplICZhbXA7JmFtcDsgZnJhZyAmbHQ7IE1BWF9TS0JfRlJBR1MpIHsKQEAgLTE0OTAsNyAmIzQzOzE0OTAsNyBAQCBzdGF0aWMgaW50IGlvX3NnX2Zyb21faXRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCWZyb20tJmd0O2J2ZWMgJiM0Mzs9IGJpLmJpX2lkeDsKIAlmcm9tLSZndDtucl9zZWdzIC09IGJpLmJpX2lkeDsKIAlmcm9tLSZndDtjb3VudCAtPSBjb3BpZWQ7Ci0JZnJvbS0mZ3Q7aW92X29mZnNldCA9IGJpLmJpX2J2ZWNfZG9uZTsKJiM0MzsJZnJvbS0mZ3Q7aW92X29mZnNldCA9IGJpLmJpX29mZnNldDsKIAogCXNrYi0mZ3Q7ZGF0YV9sZW4gJiM0Mzs9IGNvcGllZDsKIAlza2ItJmd0O2xlbiAmIzQzOz0gY29waWVkOwpkaWZmIC0tZ2l0IGEvaW9fdXJpbmcvcnNyYy5jIGIvaW9fdXJpbmcvcnNyYy5jCmluZGV4IDhkMGYyZWUyNGUwYzIuLjUwNzRiMWU0YjA1MDUgMTAwNjQ0Ci0tLSBhL2lvX3VyaW5nL3JzcmMuYwomIzQzOyYjNDM7JiM0MzsgYi9pb191cmluZy9yc3JjLmMKQEAgLTEwLDYgJiM0MzsxMCw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvY29tcGF0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvaW9fdXJpbmcuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9pb191cmluZy9jbWQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvZG1hLWJ1Zi1pby5oJmd0OwogCiAjaW5jbHVkZSAmbHQ7dWFwaS9saW51eC9pb191cmluZy5oJmd0OwogCkBAIC0yOCw3ICYjNDM7MjksNyBAQCBzdHJ1Y3QgaW9fcnNyY191cGRhdGUgewogfTsKIAogc3RhdGljIHN0cnVjdCBpb19yc3JjX25vZGUgKmlvX3NxZV9idWZmZXJfcmVnaXN0ZXIoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsCi0JCQkJCQkgICBzdHJ1Y3QgaW92ZWMgKmlvdik7CiYjNDM7CQkJCQkJICAgc3RydWN0IGlvX3VyaW5nX3JlZ2J1Zl9kZXNjICpkZXNjKTsKIAogc3RhdGljIGludCBocGFnZV9hY2N0X3JlZihzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgc3RydWN0IHBhZ2UgKmhwYWdlLAogCQkJICBib29sICphY2N0X25ldykKQEAgLTgxLDYgJiM0Mzs4MiwxOCBAQCBzdGF0aWMgYm9vbCBocGFnZV9hY2N0X3VucmVmKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBzdHJ1Y3QgcGFnZSAqaHBhZ2UpCiAKICNkZWZpbmUgSU9fQ0FDSEVEX0JWRUNTX1NFR1MJMzIKIAomIzQzO3N0YXRpYyB2b2lkIGlvX2lvdl90b19yZWdidWZfZGVzYyhjb25zdCBzdHJ1Y3QgaW92ZWMgKmlvdiwKJiM0MzsJCQkJICBzdHJ1Y3QgaW9fdXJpbmdfcmVnYnVmX2Rlc2MgKmRlc2MpCiYjNDM7ewomIzQzOwkqZGVzYyA9IChzdHJ1Y3QgaW9fdXJpbmdfcmVnYnVmX2Rlc2MpIHsKJiM0MzsJCS50eXBlID0gSU9fUkVHQlVGX1RZUEVfVUFERFIsCiYjNDM7CQkudWFkZHIgPSAodTY0KSh1aW50cHRyX3QpaW92LSZndDtpb3ZfYmFzZSwKJiM0MzsJCS5zaXplID0gaW92LSZndDtpb3ZfbGVuLAomIzQzOwl9OwomIzQzOwlpZiAoIWRlc2MtJmd0O3VhZGRyKQomIzQzOwkJZGVzYy0mZ3Q7dHlwZSA9IElPX1JFR0JVRl9UWVBFX0VNUFRZOwomIzQzO30KJiM0MzsKIGludCBfX2lvX2FjY291bnRfbWVtKHN0cnVjdCB1c2VyX3N0cnVjdCAqdXNlciwgdW5zaWduZWQgbG9uZyBucl9wYWdlcykKIHsKIAl1bnNpZ25lZCBsb25nIHBhZ2VfbGltaXQsIGN1cl9wYWdlcywgbmV3X3BhZ2VzOwpAQCAtMzA5LDYgJiM0MzszMjIsOCBAQCBzdGF0aWMgaW50IF9faW9fc3FlX2ZpbGVzX3VwZGF0ZShzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwKIAkJcmV0dXJuIC1FTlhJTzsKIAlpZiAodXAtJmd0O29mZnNldCAmIzQzOyBucl9hcmdzICZndDsgY3R4LSZndDtmaWxlX3RhYmxlLmRhdGEubnIpCiAJCXJldHVybiAtRUlOVkFMOwomIzQzOwlpZiAodXAtJmd0O2ZsYWdzKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiAKIAlmb3IgKGRvbmUgPSAwOyBkb25lICZsdDsgbnJfYXJnczsgZG9uZSYjNDM7JiM0MzspIHsKIAkJdTY0IHRhZyA9IDA7CkBAIC0zNjgsOSAmIzQzOzM4Myw4IEBAIHN0YXRpYyBpbnQgX19pb19zcWVfYnVmZmVyc191cGRhdGUoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsCiAJCQkJICAgc3RydWN0IGlvX3VyaW5nX3JzcmNfdXBkYXRlMiAqdXAsCiAJCQkJICAgdW5zaWduZWQgaW50IG5yX2FyZ3MpCiB7CiYjNDM7CWJvb2wgZXh0ZW5kZWQgPSB1cC0mZ3Q7ZmxhZ3MgJmFtcDsgSU9SSU5HX1JTUkNfVVBEQVRFX0VYVEVOREVEOwogCXU2NCBfX3VzZXIgKnRhZ3MgPSB1NjRfdG9fdXNlcl9wdHIodXAtJmd0O3RhZ3MpOwotCXN0cnVjdCBpb3ZlYyBmYXN0X2lvdiwgKmlvdjsKLQlzdHJ1Y3QgaW92ZWMgX191c2VyICp1dmVjOwogCXU2NCB1c2VyX2RhdGEgPSB1cC0mZ3Q7ZGF0YTsKIAlfX3UzMiBkb25lOwogCWludCBpLCBlcnI7CkBAIC0zNzksMjYgJiM0MzszOTMsNDkgQEAgc3RhdGljIGludCBfX2lvX3NxZV9idWZmZXJzX3VwZGF0ZShzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwKIAkJcmV0dXJuIC1FTlhJTzsKIAlpZiAodXAtJmd0O29mZnNldCAmIzQzOyBucl9hcmdzICZndDsgY3R4LSZndDtidWZfdGFibGUubnIpCiAJCXJldHVybiAtRUlOVkFMOwomIzQzOwlpZiAodXAtJmd0O2ZsYWdzICZhbXA7IH5JT1JJTkdfUlNSQ19VUERBVEVfRVhURU5ERUQpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKIAogCWZvciAoZG9uZSA9IDA7IGRvbmUgJmx0OyBucl9hcmdzOyBkb25lJiM0MzsmIzQzOykgewomIzQzOwkJc3RydWN0IGlvX3VyaW5nX3JlZ2J1Zl9kZXNjIGRlc2M7CiAJCXN0cnVjdCBpb19yc3JjX25vZGUgKm5vZGU7CiAJCXU2NCB0YWcgPSAwOwogCi0JCXV2ZWMgPSB1NjRfdG9fdXNlcl9wdHIodXNlcl9kYXRhKTsKLQkJaW92ID0gaW92ZWNfZnJvbV91c2VyKHV2ZWMsIDEsIDEsICZhbXA7ZmFzdF9pb3YsIGlvX2lzX2NvbXBhdChjdHgpKTsKLQkJaWYgKElTX0VSUihpb3YpKSB7Ci0JCQllcnIgPSBQVFJfRVJSKGlvdik7Ci0JCQlicmVhazsKLQkJfQogCQlpZiAodGFncyAmYW1wOyZhbXA7IGNvcHlfZnJvbV91c2VyKCZhbXA7dGFnLCAmYW1wO3RhZ3NbZG9uZV0sIHNpemVvZih0YWcpKSkgewogCQkJZXJyID0gLUVGQVVMVDsKIAkJCWJyZWFrOwogCQl9Ci0JCW5vZGUgPSBpb19zcWVfYnVmZmVyX3JlZ2lzdGVyKGN0eCwgaW92KTsKJiM0MzsKJiM0MzsJCWlmIChleHRlbmRlZCkgewomIzQzOwkJCWlmIChjb3B5X2Zyb21fdXNlcigmYW1wO2Rlc2MsIHU2NF90b191c2VyX3B0cih1c2VyX2RhdGEpLAomIzQzOwkJCQkJICAgc2l6ZW9mKGRlc2MpKSkgewomIzQzOwkJCQllcnIgPSAtRUZBVUxUOwomIzQzOwkJCQlicmVhazsKJiM0MzsJCQl9CiYjNDM7CQkJdXNlcl9kYXRhICYjNDM7PSBzaXplb2YoZGVzYyk7CiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCXN0cnVjdCBpb3ZlYyBfX3VzZXIgKnV2ZWMgPSB1NjRfdG9fdXNlcl9wdHIodXNlcl9kYXRhKTsKJiM0MzsJCQlzdHJ1Y3QgaW92ZWMgZmFzdF9pb3YsICppb3Y7CiYjNDM7CiYjNDM7CQkJaWYgKGlvX2lzX2NvbXBhdChjdHgpKQomIzQzOwkJCQl1c2VyX2RhdGEgJiM0Mzs9IHNpemVvZihzdHJ1Y3QgY29tcGF0X2lvdmVjKTsKJiM0MzsJCQllbHNlCiYjNDM7CQkJCXVzZXJfZGF0YSAmIzQzOz0gc2l6ZW9mKHN0cnVjdCBpb3ZlYyk7CiYjNDM7CiYjNDM7CQkJaW92ID0gaW92ZWNfZnJvbV91c2VyKHV2ZWMsIDEsIDEsICZhbXA7ZmFzdF9pb3YsIGlvX2lzX2NvbXBhdChjdHgpKTsKJiM0MzsJCQlpZiAoSVNfRVJSKGlvdikpIHsKJiM0MzsJCQkJZXJyID0gUFRSX0VSUihpb3YpOwomIzQzOwkJCQlicmVhazsKJiM0MzsJCQl9CiYjNDM7CQkJaW9faW92X3RvX3JlZ2J1Zl9kZXNjKGlvdiwgJmFtcDtkZXNjKTsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCW5vZGUgPSBpb19zcWVfYnVmZmVyX3JlZ2lzdGVyKGN0eCwgJmFtcDtkZXNjKTsKIAkJaWYgKElTX0VSUihub2RlKSkgewogCQkJZXJyID0gUFRSX0VSUihub2RlKTsKIAkJCWJyZWFrOwogCQl9CiYjNDM7CiAJCWlmICh0YWcpIHsKIAkJCWlmICghbm9kZSkgewogCQkJCWVyciA9IC1FSU5WQUw7CkBAIC00MDksMTAgJiM0Mzs0NDYsNiBAQCBzdGF0aWMgaW50IF9faW9fc3FlX2J1ZmZlcnNfdXBkYXRlKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LAogCQlpID0gYXJyYXlfaW5kZXhfbm9zcGVjKHVwLSZndDtvZmZzZXQgJiM0MzsgZG9uZSwgY3R4LSZndDtidWZfdGFibGUubnIpOwogCQlpb19yZXNldF9yc3JjX25vZGUoY3R4LCAmYW1wO2N0eC0mZ3Q7YnVmX3RhYmxlLCBpKTsKIAkJY3R4LSZndDtidWZfdGFibGUubm9kZXNbaV0gPSBub2RlOwotCQlpZiAoaW9faXNfY29tcGF0KGN0eCkpCi0JCQl1c2VyX2RhdGEgJiM0Mzs9IHNpemVvZihzdHJ1Y3QgY29tcGF0X2lvdmVjKTsKLQkJZWxzZQotCQkJdXNlcl9kYXRhICYjNDM7PSBzaXplb2Yoc3RydWN0IGlvdmVjKTsKIAl9CiAJcmV0dXJuIGRvbmUgPyBkb25lIDogZXJyOwogfQpAQCAtNDQ3LDcgJiM0Mzs0ODAsNyBAQCBpbnQgaW9fcmVnaXN0ZXJfZmlsZXNfdXBkYXRlKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCB2b2lkIF9fdXNlciAqYXJnLAogCW1lbXNldCgmYW1wO3VwLCAwLCBzaXplb2YodXApKTsKIAlpZiAoY29weV9mcm9tX3VzZXIoJmFtcDt1cCwgYXJnLCBzaXplb2Yoc3RydWN0IGlvX3VyaW5nX3JzcmNfdXBkYXRlKSkpCiAJCXJldHVybiAtRUZBVUxUOwotCWlmICh1cC5yZXN2IHx8IHVwLnJlc3YyKQomIzQzOwlpZiAodXAucmVzdjIpCiAJCXJldHVybiAtRUlOVkFMOwogCXJldHVybiBfX2lvX3JlZ2lzdGVyX3JzcmNfdXBkYXRlKGN0eCwgSU9SSU5HX1JTUkNfRklMRSwgJmFtcDt1cCwgbnJfYXJncyk7CiB9CkBAIC00NjEsNyAmIzQzOzQ5NCw3IEBAIGludCBpb19yZWdpc3Rlcl9yc3JjX3VwZGF0ZShzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgdm9pZCBfX3VzZXIgKmFyZywKIAkJcmV0dXJuIC1FSU5WQUw7CiAJaWYgKGNvcHlfZnJvbV91c2VyKCZhbXA7dXAsIGFyZywgc2l6ZW9mKHVwKSkpCiAJCXJldHVybiAtRUZBVUxUOwotCWlmICghdXAubnIgfHwgdXAucmVzdiB8fCB1cC5yZXN2MikKJiM0MzsJaWYgKCF1cC5uciB8fCB1cC5yZXN2MikKIAkJcmV0dXJuIC1FSU5WQUw7CiAJcmV0dXJuIF9faW9fcmVnaXN0ZXJfcnNyY191cGRhdGUoY3R4LCB0eXBlLCAmYW1wO3VwLCB1cC5ucik7CiB9CkBAIC01NjEsMTIgJiM0Mzs1OTQsOSBAQCBpbnQgaW9fZmlsZXNfdXBkYXRlKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpCiAJc3RydWN0IGlvX3VyaW5nX3JzcmNfdXBkYXRlMiB1cDI7CiAJaW50IHJldDsKIAomIzQzOwltZW1zZXQoJmFtcDt1cDIsIDAsIHNpemVvZih1cDIpKTsKIAl1cDIub2Zmc2V0ID0gdXAtJmd0O29mZnNldDsKIAl1cDIuZGF0YSA9IHVwLSZndDthcmc7Ci0JdXAyLm5yID0gMDsKLQl1cDIudGFncyA9IDA7Ci0JdXAyLnJlc3YgPSAwOwotCXVwMi5yZXN2MiA9IDA7CiAKIAlpZiAodXAtJmd0O29mZnNldCA9PSBJT1JJTkdfRklMRV9JTkRFWF9BTExPQykgewogCQlyZXQgPSBpb19maWxlc191cGRhdGVfd2l0aF9pbmRleF9hbGxvYyhyZXEsIGlzc3VlX2ZsYWdzKTsKQEAgLTg1MiwyNyAmIzQzOzg4MiwxMjYgQEAgYm9vbCBpb19jaGVja19jb2FsZXNjZV9idWZmZXIoc3RydWN0IHBhZ2UgKipwYWdlX2FycmF5LCBpbnQgbnJfcGFnZXMsCiAJcmV0dXJuIHRydWU7CiB9CiAKJiM0MztzdHJ1Y3QgaW9fcmVnYnVmX2RtYSB7CiYjNDM7CXN0cnVjdCBkbWFfYnVmX2lvX2N0eAkJY3R4OwomIzQzOwlzdHJ1Y3QgZmlsZQkJCSp0YXJnZXRfZmlsZTsKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGlvX3JlbGVhc2VfcmVnX2RtYWJ1Zih2b2lkICpwcml2KQomIzQzO3sKJiM0MzsJc3RydWN0IGlvX3JlZ2J1Zl9kbWEgKmRiID0gcHJpdjsKJiM0MzsKJiM0MzsJZnB1dChkYi0mZ3Q7dGFyZ2V0X2ZpbGUpOwomIzQzOwlkbWFfYnVmX2lvX2N0eF9yZWxlYXNlKCZhbXA7ZGItJmd0O2N0eCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3QgaW9fcnNyY19ub2RlICppb19yZWdpc3Rlcl9kbWFidWYoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsCiYjNDM7CQkJCQkJc3RydWN0IGlvX3VyaW5nX3JlZ2J1Zl9kZXNjICpkZXNjKQomIzQzO3sKJiM0MzsJc3RydWN0IGlvX3JzcmNfbm9kZSAqbm9kZSA9IE5VTEw7CiYjNDM7CXN0cnVjdCBpb19tYXBwZWRfdWJ1ZiAqaW11ID0gTlVMTDsKJiM0MzsJc3RydWN0IGlvX3JlZ2J1Zl9kbWEgKnJlZ2J1ZiA9IE5VTEw7CiYjNDM7CXN0cnVjdCBmaWxlICp0YXJnZXRfZmlsZSA9IE5VTEw7CiYjNDM7CXN0cnVjdCBkbWFfYnVmICpkbWFidWYgPSBOVUxMOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0RNQV9TSEFSRURfQlVGRkVSKSkKJiM0MzsJCXJldHVybiBFUlJfUFRSKC1FT1BOT1RTVVBQKTsKJiM0MzsJaWYgKGN0eC0mZ3Q7ZmxhZ3MgJmFtcDsgSU9SSU5HX1NFVFVQX0lPUE9MTCkKJiM0MzsJCXJldHVybiBFUlJfUFRSKC1FT1BOT1RTVVBQKTsKJiM0MzsJaWYgKGRlc2MtJmd0O3VhZGRyIHx8IGRlc2MtJmd0O3NpemUpCiYjNDM7CQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKJiM0MzsKJiM0MzsJcmV0ID0gLUVOT01FTTsKJiM0MzsJbm9kZSA9IGlvX3JzcmNfbm9kZV9hbGxvYyhjdHgsIElPUklOR19SU1JDX0JVRkZFUik7CiYjNDM7CWlmICghbm9kZSkKJiM0MzsJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwomIzQzOwlpbXUgPSBpb19hbGxvY19pbXUoY3R4LCAwKTsKJiM0MzsJaWYgKCFpbXUpCiYjNDM7CQlnb3RvIGVycjsKJiM0MzsJcmVnYnVmID0ga3phbGxvYyhzaXplb2YoKnJlZ2J1ZiksIEdGUF9LRVJORUwpOwomIzQzOwlpZiAoIXJlZ2J1ZikKJiM0MzsJCWdvdG8gZXJyOwomIzQzOwomIzQzOwlyZXQgPSAtRUJBREY7CiYjNDM7CXRhcmdldF9maWxlID0gZmdldChkZXNjLSZndDt0YXJnZXRfZmQpOwomIzQzOwlpZiAoIXRhcmdldF9maWxlKQomIzQzOwkJZ290byBlcnI7CiYjNDM7CiYjNDM7CWRtYWJ1ZiA9IGRtYV9idWZfZ2V0KGRlc2MtJmd0O2RtYWJ1Zl9mZCk7CiYjNDM7CWlmIChJU19FUlIoZG1hYnVmKSkgewomIzQzOwkJcmV0ID0gUFRSX0VSUihkbWFidWYpOwomIzQzOwkJZG1hYnVmID0gTlVMTDsKJiM0MzsJCWdvdG8gZXJyOwomIzQzOwl9CiYjNDM7CWlmIChkbWFidWYtJmd0O3NpemUgJmd0OyBTWl8xRykgewomIzQzOwkJcmV0ID0gLUVJTlZBTDsKJiM0MzsJCWdvdG8gZXJyOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldCA9IGRtYV9idWZfaW9fY3R4X2NyZWF0ZSh0YXJnZXRfZmlsZSwgJmFtcDtyZWdidWYtJmd0O2N0eCwgZG1hYnVmLAomIzQzOwkJCQkgICAgRE1BX0JJRElSRUNUSU9OQUwpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBlcnI7CiYjNDM7CiYjNDM7CXJlZ2J1Zi0mZ3Q7dGFyZ2V0X2ZpbGUgPSB0YXJnZXRfZmlsZTsKJiM0MzsJaW11LSZndDtucl9idmVjcyA9IDA7CiYjNDM7CWltdS0mZ3Q7dWJ1ZiA9IDA7CiYjNDM7CWltdS0mZ3Q7bGVuID0gZG1hYnVmLSZndDtzaXplOwomIzQzOwlpbXUtJmd0O2ZvbGlvX3NoaWZ0ID0gMDsKJiM0MzsJaW11LSZndDtyZWxlYXNlID0gaW9fcmVsZWFzZV9yZWdfZG1hYnVmOwomIzQzOwlpbXUtJmd0O3ByaXYgPSByZWdidWY7CiYjNDM7CWltdS0mZ3Q7ZmxhZ3MgPSBJT19SRUdCVUZfRl9ETUFCVUY7CiYjNDM7CWltdS0mZ3Q7ZGlyID0gSU9fSU1VX0RFU1QgfCBJT19JTVVfU09VUkNFOwomIzQzOwlyZWZjb3VudF9zZXQoJmFtcDtpbXUtJmd0O3JlZnMsIDEpOwomIzQzOwlub2RlLSZndDtidWYgPSBpbXU7CiYjNDM7CWRtYV9idWZfcHV0KGRtYWJ1Zik7CiYjNDM7CXJldHVybiBub2RlOwomIzQzO2VycjoKJiM0MzsJa2ZyZWUocmVnYnVmKTsKJiM0MzsJaWYgKGltdSkKJiM0MzsJCWlvX2ZyZWVfaW11KGN0eCwgaW11KTsKJiM0MzsJaWYgKG5vZGUpCiYjNDM7CQlpb19jYWNoZV9mcmVlKCZhbXA7Y3R4LSZndDtub2RlX2NhY2hlLCBub2RlKTsKJiM0MzsJaWYgKHRhcmdldF9maWxlKQomIzQzOwkJZnB1dCh0YXJnZXRfZmlsZSk7CiYjNDM7CWlmIChkbWFidWYpCiYjNDM7CQlkbWFfYnVmX3B1dChkbWFidWYpOwomIzQzOwlyZXR1cm4gRVJSX1BUUihyZXQpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBzdHJ1Y3QgaW9fcnNyY19ub2RlICppb19zcWVfYnVmZmVyX3JlZ2lzdGVyKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LAotCQkJCQkJICAgc3RydWN0IGlvdmVjICppb3YpCiYjNDM7CQkJCQkJICAgc3RydWN0IGlvX3VyaW5nX3JlZ2J1Zl9kZXNjICpkZXNjKQogewomIzQzOwl1bnNpZ25lZCBsb25nIHVhZGRyID0gKHVuc2lnbmVkIGxvbmcpZGVzYy0mZ3Q7dWFkZHI7CiYjNDM7CXNpemVfdCBzaXplID0gZGVzYy0mZ3Q7c2l6ZTsKIAlzdHJ1Y3QgaW9fbWFwcGVkX3VidWYgKmltdSA9IE5VTEw7CiAJc3RydWN0IHBhZ2UgKipwYWdlcyA9IE5VTEw7CiAJc3RydWN0IGlvX3JzcmNfbm9kZSAqbm9kZTsKIAl1bnNpZ25lZCBsb25nIG9mZjsKLQlzaXplX3Qgc2l6ZTsKIAlpbnQgcmV0LCBucl9wYWdlcywgaTsKIAlzdHJ1Y3QgaW9faW11X2ZvbGlvX2RhdGEgZGF0YTsKIAlib29sIGNvYWxlc2NlZCA9IGZhbHNlOwogCi0JaWYgKCFpb3YtJmd0O2lvdl9iYXNlKSB7Ci0JCWlmIChpb3YtJmd0O2lvdl9sZW4pCiYjNDM7CWlmIChkZXNjLSZndDt0eXBlICZndDs9IF9fSU9fUkVHQlVGX1RZUEVfTUFYKQomIzQzOwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CiYjNDM7CWlmICghbWVtX2lzX3plcm8oJmFtcDtkZXNjLSZndDtfX3Jlc3YsIHNpemVvZihkZXNjLSZndDtfX3Jlc3YpKSB8fCBkZXNjLSZndDtmbGFncykKJiM0MzsJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwomIzQzOwomIzQzOwlpZiAoZGVzYy0mZ3Q7dHlwZSA9PSBJT19SRUdCVUZfVFlQRV9ETUFCVUYpCiYjNDM7CQlyZXR1cm4gaW9fcmVnaXN0ZXJfZG1hYnVmKGN0eCwgZGVzYyk7CiYjNDM7CiYjNDM7CWlmIChkZXNjLSZndDtkbWFidWZfZmQgfHwgZGVzYy0mZ3Q7dGFyZ2V0X2ZkKQomIzQzOwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CiYjNDM7CiYjNDM7CWlmIChkZXNjLSZndDt0eXBlID09IElPX1JFR0JVRl9UWVBFX0VNUFRZKSB7CiYjNDM7CQlpZiAodWFkZHIgfHwgc2l6ZSkKIAkJCXJldHVybiBFUlJfUFRSKC1FRkFVTFQpOwogCQkvKiByZW1vdmUgdGhlIGJ1ZmZlciB3aXRob3V0IGluc3RhbGxpbmcgYSBuZXcgb25lICovCiAJCXJldHVybiBOVUxMOwogCX0KIAotCXJldCA9IGlvX3ZhbGlkYXRlX3VzZXJfYnVmX3JhbmdlKCh1bnNpZ25lZCBsb25nKWlvdi0mZ3Q7aW92X2Jhc2UsCi0JCQkJCSBpb3YtJmd0O2lvdl9sZW4pOwomIzQzOwlyZXQgPSBpb192YWxpZGF0ZV91c2VyX2J1Zl9yYW5nZSh1YWRkciwgc2l6ZSk7CiAJaWYgKHJldCkKIAkJcmV0dXJuIEVSUl9QVFIocmV0KTsKIApAQCAtODgxLDggJiM0MzsxMDEwLDcgQEAgc3RhdGljIHN0cnVjdCBpb19yc3JjX25vZGUgKmlvX3NxZV9idWZmZXJfcmVnaXN0ZXIoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsCiAJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCiAJcmV0ID0gLUVOT01FTTsKLQlwYWdlcyA9IGlvX3Bpbl9wYWdlcygodW5zaWduZWQgbG9uZykgaW92LSZndDtpb3ZfYmFzZSwgaW92LSZndDtpb3ZfbGVuLAotCQkJCSZhbXA7bnJfcGFnZXMpOwomIzQzOwlwYWdlcyA9IGlvX3Bpbl9wYWdlcyh1YWRkciwgc2l6ZSwgJmFtcDtucl9wYWdlcyk7CiAJaWYgKElTX0VSUihwYWdlcykpIHsKIAkJcmV0ID0gUFRSX0VSUihwYWdlcyk7CiAJCXBhZ2VzID0gTlVMTDsKQEAgLTkwNCwxMCAmIzQzOzEwMzIsOSBAQCBzdGF0aWMgc3RydWN0IGlvX3JzcmNfbm9kZSAqaW9fc3FlX2J1ZmZlcl9yZWdpc3RlcihzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwKIAlpZiAocmV0KQogCQlnb3RvIGRvbmU7CiAKLQlzaXplID0gaW92LSZndDtpb3ZfbGVuOwogCS8qIHN0b3JlIG9yaWdpbmFsIGFkZHJlc3MgZm9yIGxhdGVyIHZlcmlmaWNhdGlvbiAqLwotCWltdS0mZ3Q7dWJ1ZiA9ICh1bnNpZ25lZCBsb25nKSBpb3YtJmd0O2lvdl9iYXNlOwotCWltdS0mZ3Q7bGVuID0gaW92LSZndDtpb3ZfbGVuOwomIzQzOwlpbXUtJmd0O3VidWYgPSB1YWRkcjsKJiM0MzsJaW11LSZndDtsZW4gPSBzaXplOwogCWltdS0mZ3Q7Zm9saW9fc2hpZnQgPSBQQUdFX1NISUZUOwogCWltdS0mZ3Q7cmVsZWFzZSA9IGlvX3JlbGVhc2VfdWJ1ZjsKIAlpbXUtJmd0O3ByaXYgPSBpbXU7CkBAIC05MTcsNyAmIzQzOzEwNDQsNyBAQCBzdGF0aWMgc3RydWN0IGlvX3JzcmNfbm9kZSAqaW9fc3FlX2J1ZmZlcl9yZWdpc3RlcihzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwKIAkJaW11LSZndDtmb2xpb19zaGlmdCA9IGRhdGEuZm9saW9fc2hpZnQ7CiAJcmVmY291bnRfc2V0KCZhbXA7aW11LSZndDtyZWZzLCAxKTsKIAotCW9mZiA9ICh1bnNpZ25lZCBsb25nKWlvdi0mZ3Q7aW92X2Jhc2UgJmFtcDsgflBBR0VfTUFTSzsKJiM0MzsJb2ZmID0gdWFkZHIgJmFtcDsgflBBR0VfTUFTSzsKIAlpZiAoY29hbGVzY2VkKQogCQlvZmYgJiM0Mzs9IGRhdGEuZmlyc3RfZm9saW9fcGFnZV9pZHggJmx0OyZsdDsgUEFHRV9TSElGVDsKIApAQCAtOTY5LDYgJiM0MzsxMDk2LDcgQEAgaW50IGlvX3NxZV9idWZmZXJzX3JlZ2lzdGVyKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCB2b2lkIF9fdXNlciAqYXJnLAogCQltZW1zZXQoaW92LCAwLCBzaXplb2YoKmlvdikpOwogCiAJZm9yIChpID0gMDsgaSAmbHQ7IG5yX2FyZ3M7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlzdHJ1Y3QgaW9fdXJpbmdfcmVnYnVmX2Rlc2MgZGVzYzsKIAkJc3RydWN0IGlvX3JzcmNfbm9kZSAqbm9kZTsKIAkJdTY0IHRhZyA9IDA7CiAKQEAgLTk5Miw3ICYjNDM7MTEyMCw4IEBAIGludCBpb19zcWVfYnVmZmVyc19yZWdpc3RlcihzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgdm9pZCBfX3VzZXIgKmFyZywKIAkJCX0KIAkJfQogCi0JCW5vZGUgPSBpb19zcWVfYnVmZmVyX3JlZ2lzdGVyKGN0eCwgaW92KTsKJiM0MzsJCWlvX2lvdl90b19yZWdidWZfZGVzYyhpb3YsICZhbXA7ZGVzYyk7CiYjNDM7CQlub2RlID0gaW9fc3FlX2J1ZmZlcl9yZWdpc3RlcihjdHgsICZhbXA7ZGVzYyk7CiAJCWlmIChJU19FUlIobm9kZSkpIHsKIAkJCXJldCA9IFBUUl9FUlIobm9kZSk7CiAJCQlicmVhazsKQEAgLTExMzYsOSAmIzQzOzEyNjUsNjQgQEAgc3RhdGljIGludCBpb19pbXBvcnRfa2J1ZihpbnQgZGRpciwgc3RydWN0IGlvdl9pdGVyICppdGVyLAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGlvX2ltcG9ydF9maXhlZChpbnQgZGRpciwgc3RydWN0IGlvdl9pdGVyICppdGVyLAomIzQzO3ZvaWQgaW9fZHJvcF9kbWFidWZfbm9kZShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpb19tYXBwZWRfdWJ1ZiAqaW11OwomIzQzOwomIzQzOwlpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0RNQV9TSEFSRURfQlVGRkVSKSkKJiM0MzsJCXJldHVybjsKJiM0MzsJaWYgKFdBUk5fT05fT05DRShyZXEtJmd0O2J1Zl9ub2RlLSZndDt0eXBlICE9IElPUklOR19SU1JDX0JVRkZFUikpCiYjNDM7CQlyZXR1cm47CiYjNDM7CWltdSA9IHJlcS0mZ3Q7YnVmX25vZGUtJmd0O2J1ZjsKJiM0MzsJaWYgKFdBUk5fT05fT05DRSghKGltdS0mZ3Q7ZmxhZ3MgJmFtcDsgSU9fUkVHQlVGX0ZfRE1BQlVGKSkpCiYjNDM7CQlyZXR1cm47CiYjNDM7CWRtYV9idWZfaW9fbWFwX2Ryb3AocmVxLSZndDtkbWFidWZfbWFwKTsKJiM0MzsJcmVxLSZndDtmbGFncyAmYW1wOz0gflJFUV9GX0RST1BfRE1BQlVGOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGlvX2ltcG9ydF9kbWFidWYoc3RydWN0IGlvX2tpb2NiICpyZXEsCiYjNDM7CQkJICAgaW50IGRkaXIsIHN0cnVjdCBpb3ZfaXRlciAqaXRlciwKJiM0MzsJCQkgICBzdHJ1Y3QgaW9fbWFwcGVkX3VidWYgKmltdSwKJiM0MzsJCQkgICBzaXplX3QgbGVuLCBzaXplX3Qgb2Zmc2V0LAomIzQzOwkJCSAgIHVuc2lnbmVkIGlzc3VlX2ZsYWdzKQomIzQzO3sKJiM0MzsJc3RydWN0IGlvX3JlZ2J1Zl9kbWEgKmRiID0gaW11LSZndDtwcml2OwomIzQzOwlzdHJ1Y3QgZG1hX2J1Zl9pb19tYXAgKm1hcDsKJiM0MzsKJiM0MzsJaWYgKCFJU19FTkFCTEVEKENPTkZJR19ETUFfU0hBUkVEX0JVRkZFUikpCiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CWlmICghbGVuKQomIzQzOwkJcmV0dXJuIC1FRkFVTFQ7CiYjNDM7CWlmIChyZXEtJmd0O2ZpbGUgIT0gZGItJmd0O3RhcmdldF9maWxlKQomIzQzOwkJcmV0dXJuIC1FQkFERjsKJiM0MzsKJiM0MzsJaWYgKHJlcS0mZ3Q7ZmxhZ3MgJmFtcDsgUkVRX0ZfRFJPUF9ETUFCVUYpIHsKJiM0MzsJCW1hcCA9IHJlcS0mZ3Q7ZG1hYnVmX21hcDsKJiM0MzsJCWdvdG8gaW5pdF9pdGVyOwomIzQzOwl9CiYjNDM7CiYjNDM7CW1hcCA9IGRtYV9idWZfaW9fZ2V0X21hcCgmYW1wO2RiLSZndDtjdHgpOwomIzQzOwlpZiAodW5saWtlbHkoIW1hcCkpIHsKJiM0MzsJCWlmICghKGlzc3VlX2ZsYWdzICZhbXA7IElPX1VSSU5HX0ZfSU9XUSkpCiYjNDM7CQkJcmV0dXJuIC1FQUdBSU47CiYjNDM7CQltYXAgPSBkbWFfYnVmX2lvX2NyZWF0ZV9tYXAoJmFtcDtkYi0mZ3Q7Y3R4KTsKJiM0MzsJCWlmIChJU19FUlIobWFwKSkKJiM0MzsJCQlyZXR1cm4gUFRSX0VSUihtYXApOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJlcS0mZ3Q7ZG1hYnVmX21hcCA9IG1hcDsKJiM0MzsJcmVxLSZndDtmbGFncyB8PSBSRVFfRl9EUk9QX0RNQUJVRjsKJiM0Mztpbml0X2l0ZXI6CiYjNDM7CWlvdl9pdGVyX2RtYWJ1Zl9tYXAoaXRlciwgZGRpciwgbWFwLCBvZmZzZXQsIGxlbik7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGlvX2ltcG9ydF9maXhlZChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwKJiM0MzsJCQkgICBpbnQgZGRpciwgc3RydWN0IGlvdl9pdGVyICppdGVyLAogCQkJICAgc3RydWN0IGlvX21hcHBlZF91YnVmICppbXUsCi0JCQkgICB1NjQgYnVmX2FkZHIsIHNpemVfdCBsZW4pCiYjNDM7CQkJICAgdTY0IGJ1Zl9hZGRyLCBzaXplX3QgbGVuLAomIzQzOwkJCSAgIHVuc2lnbmVkIGlzc3VlX2ZsYWdzLAomIzQzOwkJCSAgIHVuc2lnbmVkIGltcG9ydF9mbGFncykKIHsKIAljb25zdCBzdHJ1Y3QgYmlvX3ZlYyAqYnZlYzsKIAlzaXplX3QgZm9saW9fbWFzazsKQEAgLTExNTgsNiAmIzQzOzEzNDIsMTIgQEAgc3RhdGljIGludCBpb19pbXBvcnRfZml4ZWQoaW50IGRkaXIsIHN0cnVjdCBpb3ZfaXRlciAqaXRlciwKIAogCW9mZnNldCA9IGJ1Zl9hZGRyIC0gaW11LSZndDt1YnVmOwogCiYjNDM7CWlmIChpbXUtJmd0O2ZsYWdzICZhbXA7IElPX1JFR0JVRl9GX0RNQUJVRikgewomIzQzOwkJaWYgKCEoaW1wb3J0X2ZsYWdzICZhbXA7IElPX1JFR0JVRl9JTVBPUlRfQUxMT1dfRE1BQlVGKSkKJiM0MzsJCQlyZXR1cm4gLUVGQVVMVDsKJiM0MzsJCXJldHVybiBpb19pbXBvcnRfZG1hYnVmKHJlcSwgZGRpciwgaXRlciwgaW11LCBsZW4sIG9mZnNldCwKJiM0MzsJCQkJCWlzc3VlX2ZsYWdzKTsKJiM0MzsJfQogCWlmIChpbXUtJmd0O2ZsYWdzICZhbXA7IElPX1JFR0JVRl9GX0tCVUYpCiAJCXJldHVybiBpb19pbXBvcnRfa2J1ZihkZGlyLCBpdGVyLCBpbXUsIGxlbiwgb2Zmc2V0KTsKIApAQCAtMTIxMSwxNiAmIzQzOzE0MDEsMTcgQEAgaW5saW5lIHN0cnVjdCBpb19yc3JjX25vZGUgKmlvX2ZpbmRfYnVmX25vZGUoc3RydWN0IGlvX2tpb2NiICpyZXEsCiAJcmV0dXJuIE5VTEw7CiB9CiAKLWludCBpb19pbXBvcnRfcmVnX2J1ZihzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGlvdl9pdGVyICppdGVyLAomIzQzO2ludCBfX2lvX2ltcG9ydF9yZWdfYnVmKHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsCiAJCQl1NjQgYnVmX2FkZHIsIHNpemVfdCBsZW4sIGludCBkZGlyLAotCQkJdW5zaWduZWQgaXNzdWVfZmxhZ3MpCiYjNDM7CQkJdW5zaWduZWQgaXNzdWVfZmxhZ3MsIHVuc2lnbmVkIGltcG9ydF9mbGFncykKIHsKIAlzdHJ1Y3QgaW9fcnNyY19ub2RlICpub2RlOwogCiAJbm9kZSA9IGlvX2ZpbmRfYnVmX25vZGUocmVxLCBpc3N1ZV9mbGFncyk7CiAJaWYgKCFub2RlKQogCQlyZXR1cm4gLUVGQVVMVDsKLQlyZXR1cm4gaW9faW1wb3J0X2ZpeGVkKGRkaXIsIGl0ZXIsIG5vZGUtJmd0O2J1ZiwgYnVmX2FkZHIsIGxlbik7CiYjNDM7CXJldHVybiBpb19pbXBvcnRfZml4ZWQocmVxLCBkZGlyLCBpdGVyLCBub2RlLSZndDtidWYsIGJ1Zl9hZGRyLCBsZW4sCiYjNDM7CQkJCWlzc3VlX2ZsYWdzLCBpbXBvcnRfZmxhZ3MpOwogfQogCiBzdGF0aWMgaW50IGlvX2J1ZmZlcl9hY2N0X2Nsb25lZF9ocGFnZXMoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsCkBAIC0xMzQ3LDYgJiM0MzsxNTM4LDExIEBAIHN0YXRpYyBpbnQgaW9fY2xvbmVfYnVmZmVycyhzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgc3RydWN0IGlvX3JpbmdfY3R4ICpzcmNfY3R4CiAJCWlmICghc3JjX25vZGUpIHsKIAkJCWRzdF9ub2RlID0gTlVMTDsKIAkJfSBlbHNlIHsKJiM0MzsJCQlpZiAoc3JjX25vZGUtJmd0O2J1Zi0mZ3Q7ZmxhZ3MgJmFtcDsgSU9fUkVHQlVGX0ZfVU5DTE9ORUFCTEUpIHsKJiM0MzsJCQkJaW9fcnNyY19kYXRhX2ZyZWUoY3R4LCAmYW1wO2RhdGEpOwomIzQzOwkJCQlyZXR1cm4gLUVOT01FTTsKJiM0MzsJCQl9CiYjNDM7CiAJCQlkc3Rfbm9kZSA9IGlvX3JzcmNfbm9kZV9hbGxvYyhjdHgsIElPUklOR19SU1JDX0JVRkZFUik7CiAJCQlpZiAoIWRzdF9ub2RlKSB7CiAJCQkJaW9fcnNyY19kYXRhX2ZyZWUoY3R4LCAmYW1wO2RhdGEpOwpAQCAtMTYxNyw5ICYjNDM7MTgxMyw5IEBAIHN0YXRpYyBpbnQgaW9fa2Vybl9idmVjX3NpemUoc3RydWN0IGlvdmVjICppb3YsIHVuc2lnbmVkIG5yX2lvdnMsCiAJcmV0dXJuIDA7CiB9CiAKLWludCBpb19pbXBvcnRfcmVnX3ZlYyhpbnQgZGRpciwgc3RydWN0IGlvdl9pdGVyICppdGVyLAomIzQzO2ludCBfX2lvX2ltcG9ydF9yZWdfdmVjKGludCBkZGlyLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsCiAJCQlzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGlvdV92ZWMgKnZlYywKLQkJCXVuc2lnbmVkIG5yX2lvdnMsIHVuc2lnbmVkIGlzc3VlX2ZsYWdzKQomIzQzOwkJCXVuc2lnbmVkIG5yX2lvdnMsIHVuc2lnbmVkIGlzc3VlX2ZsYWdzLCB1bnNpZ25lZCBpbXBvcnRfZmxhZ3MpCiB7CiAJc3RydWN0IGlvX3JzcmNfbm9kZSAqbm9kZTsKIAlzdHJ1Y3QgaW9fbWFwcGVkX3VidWYgKmltdTsKQEAgLTE2MzcsNyAmIzQzOzE4MzMsOSBAQCBpbnQgaW9faW1wb3J0X3JlZ192ZWMoaW50IGRkaXIsIHN0cnVjdCBpb3ZfaXRlciAqaXRlciwKIAlpb3ZlY19vZmYgPSB2ZWMtJmd0O25yIC0gbnJfaW92czsKIAlpb3YgPSB2ZWMtJmd0O2lvdmVjICYjNDM7IGlvdmVjX29mZjsKIAotCWlmIChpbXUtJmd0O2ZsYWdzICZhbXA7IElPX1JFR0JVRl9GX0tCVUYpIHsKJiM0MzsJaWYgKGltdS0mZ3Q7ZmxhZ3MgJmFtcDsgSU9fUkVHQlVGX0ZfRE1BQlVGKSB7CiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CX0gZWxzZSBpZiAoaW11LSZndDtmbGFncyAmYW1wOyBJT19SRUdCVUZfRl9LQlVGKSB7CiAJCWludCByZXQgPSBpb19rZXJuX2J2ZWNfc2l6ZShpb3YsIG5yX2lvdnMsIGltdSwgJmFtcDtucl9zZWdzKTsKIAogCQlpZiAodW5saWtlbHkocmV0KSkKZGlmZiAtLWdpdCBhL2lvX3VyaW5nL3JzcmMuaCBiL2lvX3VyaW5nL3JzcmMuaAppbmRleCA5OGFlOGVmNTEwMDlkLi4zY2I5YjU3ZjE1OWI2IDEwMDY0NAotLS0gYS9pb191cmluZy9yc3JjLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW9fdXJpbmcvcnNyYy5oCkBAIC0yOSw3ICYjNDM7MjksMTMgQEAgZW51bSB7CiB9OwogCiBlbnVtIHsKLQlJT19SRUdCVUZfRl9LQlVGCQk9IDEsCiYjNDM7CUlPX1JFR0JVRl9GX0tCVUYJCT0gMSAmbHQ7Jmx0OyAwLAomIzQzOwlJT19SRUdCVUZfRl9VTkNMT05FQUJMRQkJPSAxICZsdDsmbHQ7IDEsCiYjNDM7CUlPX1JFR0JVRl9GX0RNQUJVRgkJPSAxICZsdDsmbHQ7IDMsCiYjNDM7fTsKJiM0MzsKJiM0MztlbnVtIHsKJiM0MzsJSU9fUkVHQlVGX0lNUE9SVF9BTExPV19ETUFCVUYJCT0gMSAmbHQ7Jmx0OyAxLAogfTsKIAogc3RydWN0IGlvX21hcHBlZF91YnVmIHsKQEAgLTY0LDEyICYjNDM7NzAsMjggQEAgaW50IGlvX3JzcmNfZGF0YV9hbGxvYyhzdHJ1Y3QgaW9fcnNyY19kYXRhICpkYXRhLCB1bnNpZ25lZCBucik7CiAKIHN0cnVjdCBpb19yc3JjX25vZGUgKmlvX2ZpbmRfYnVmX25vZGUoc3RydWN0IGlvX2tpb2NiICpyZXEsCiAJCQkJICAgICAgdW5zaWduZWQgaXNzdWVfZmxhZ3MpOwotaW50IGlvX2ltcG9ydF9yZWdfYnVmKHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsCiYjNDM7aW50IF9faW9faW1wb3J0X3JlZ19idWYoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBpb3ZfaXRlciAqaXRlciwKIAkJCXU2NCBidWZfYWRkciwgc2l6ZV90IGxlbiwgaW50IGRkaXIsCi0JCQl1bnNpZ25lZCBpc3N1ZV9mbGFncyk7Ci1pbnQgaW9faW1wb3J0X3JlZ192ZWMoaW50IGRkaXIsIHN0cnVjdCBpb3ZfaXRlciAqaXRlciwKJiM0MzsJCQl1bnNpZ25lZCBpc3N1ZV9mbGFncywgdW5zaWduZWQgaW1wb3J0X2ZsYWdzKTsKJiM0MztpbnQgX19pb19pbXBvcnRfcmVnX3ZlYyhpbnQgZGRpciwgc3RydWN0IGlvdl9pdGVyICppdGVyLAogCQkJc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBpb3VfdmVjICp2ZWMsCi0JCQl1bnNpZ25lZCBucl9pb3ZzLCB1bnNpZ25lZCBpc3N1ZV9mbGFncyk7CiYjNDM7CQkJdW5zaWduZWQgbnJfaW92cywgdW5zaWduZWQgaXNzdWVfZmxhZ3MsCiYjNDM7CQkJdW5zaWduZWQgaW1wb3J0X2ZsYWdzKTsKJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIGludCBpb19pbXBvcnRfcmVnX2J1ZihzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGlvdl9pdGVyICppdGVyLAomIzQzOwkJCQkgICAgdTY0IGJ1Zl9hZGRyLCBzaXplX3QgbGVuLCBpbnQgZGRpciwKJiM0MzsJCQkJICAgIHVuc2lnbmVkIGlzc3VlX2ZsYWdzKQomIzQzO3sKJiM0MzsJcmV0dXJuIF9faW9faW1wb3J0X3JlZ19idWYocmVxLCBpdGVyLCBidWZfYWRkciwgbGVuLCBkZGlyLCBpc3N1ZV9mbGFncywgMCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgaW50IGlvX2ltcG9ydF9yZWdfdmVjKGludCBkZGlyLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsCiYjNDM7CQkJCSAgICBzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGlvdV92ZWMgKnZlYywKJiM0MzsJCQkJICAgIHVuc2lnbmVkIG5yX2lvdnMsIHVuc2lnbmVkIGlzc3VlX2ZsYWdzKQomIzQzO3sKJiM0MzsJcmV0dXJuIF9faW9faW1wb3J0X3JlZ192ZWMoZGRpciwgaXRlciwgcmVxLCB2ZWMsIG5yX2lvdnMsIGlzc3VlX2ZsYWdzLCAwKTsKJiM0Mzt9CiYjNDM7CiBpbnQgaW9fcHJlcF9yZWdfaW92ZWMoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBpb3VfdmVjICppdiwKIAkJCWNvbnN0IHN0cnVjdCBpb3ZlYyBfX3VzZXIgKnV2ZWMsIHNpemVfdCB1dmVjX3NlZ3MpOwogCkBAIC0xNTYsNCAmIzQzOzE3OCwxNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgaW9fYWxsb2NfY2FjaGVfdmVjX2thc2FuKHN0cnVjdCBpb3VfdmVjICppdikKIAkJaW9fdmVjX2ZyZWUoaXYpOwogfQogCiYjNDM7dm9pZCBpb19kcm9wX2RtYWJ1Zl9ub2RlKHN0cnVjdCBpb19raW9jYiAqcmVxKTsKJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgaW9fcmVxX2Ryb3BfZG1hYnVmKHN0cnVjdCBpb19raW9jYiAqcmVxKQomIzQzO3sKJiM0MzsJaWYgKCFJU19FTkFCTEVEKENPTkZJR19ETUFfU0hBUkVEX0JVRkZFUikpCiYjNDM7CQlyZXR1cm47CiYjNDM7CWlmICghKHJlcS0mZ3Q7ZmxhZ3MgJmFtcDsgUkVRX0ZfRFJPUF9ETUFCVUYpKQomIzQzOwkJcmV0dXJuOwomIzQzOwlpZiAoV0FSTl9PTl9PTkNFKCEocmVxLSZndDtmbGFncyAmYW1wOyBSRVFfRl9CVUZfTk9ERSkpKQomIzQzOwkJcmV0dXJuOwomIzQzOwlpb19kcm9wX2RtYWJ1Zl9ub2RlKHJlcSk7CiYjNDM7fQomIzQzOwogI2VuZGlmCmRpZmYgLS1naXQgYS9pb191cmluZy9ydy5jIGIvaW9fdXJpbmcvcncuYwppbmRleCA5NTAzOGNmZGE2MTUzLi4xMWZmN2I1YTExNjQ3IDEwMDY0NAotLS0gYS9pb191cmluZy9ydy5jCiYjNDM7JiM0MzsmIzQzOyBiL2lvX3VyaW5nL3J3LmMKQEAgLTM4MCw4ICYjNDM7MzgwLDggQEAgc3RhdGljIGludCBpb19pbml0X3J3X2ZpeGVkKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MsCiAJaWYgKGlvLSZndDtieXRlc19kb25lKQogCQlyZXR1cm4gMDsKIAotCXJldCA9IGlvX2ltcG9ydF9yZWdfYnVmKHJlcSwgJmFtcDtpby0mZ3Q7aXRlciwgcnctJmd0O2FkZHIsIHJ3LSZndDtsZW4sIGRkaXIsCi0JCQkJaXNzdWVfZmxhZ3MpOwomIzQzOwlyZXQgPSBfX2lvX2ltcG9ydF9yZWdfYnVmKHJlcSwgJmFtcDtpby0mZ3Q7aXRlciwgcnctJmd0O2FkZHIsIHJ3LSZndDtsZW4sIGRkaXIsCiYjNDM7CQkJCSAgaXNzdWVfZmxhZ3MsIElPX1JFR0JVRl9JTVBPUlRfQUxMT1dfRE1BQlVGKTsKIAlpb3ZfaXRlcl9zYXZlX3N0YXRlKCZhbXA7aW8tJmd0O2l0ZXIsICZhbXA7aW8tJmd0O2l0ZXJfc3RhdGUpOwogCXJldHVybiByZXQ7CiB9CkBAIC01OTEsNiAmIzQzOzU5MSw4IEBAIHN0YXRpYyB2b2lkIGlvX2NvbXBsZXRlX3J3KHN0cnVjdCBraW9jYiAqa2lvY2IsIGxvbmcgcmVzKQogCXN0cnVjdCBpb19ydyAqcncgPSBjb250YWluZXJfb2Yoa2lvY2IsIHN0cnVjdCBpb19ydywga2lvY2IpOwogCXN0cnVjdCBpb19raW9jYiAqcmVxID0gY21kX3RvX2lvX2tpb2NiKHJ3KTsKIAomIzQzOwlpb19yZXFfZHJvcF9kbWFidWYocmVxKTsKJiM0MzsKIAlfX2lvX2NvbXBsZXRlX3J3X2NvbW1vbihyZXEsIHJlcyk7CiAJaW9fcmVxX3NldF9yZXMocmVxLCBpb19maXh1cF9yd19yZXMocmVxLCByZXMpLCAwKTsKIAlyZXEtJmd0O2lvX3Rhc2tfd29yay5mdW5jID0gaW9fcmVxX3J3X2NvbXBsZXRlOwpkaWZmIC0tZ2l0IGEvbGliL2lvdl9pdGVyLmMgYi9saWIvaW92X2l0ZXIuYwppbmRleCAzNGE1MmU5YmE5ZTFiLi5kNmY1ZDdlMTgwYjU0IDEwMDY0NAotLS0gYS9saWIvaW92X2l0ZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9saWIvaW92X2l0ZXIuYwpAQCAtNTc1LDcgJiM0Mzs1NzUsOCBAQCB2b2lkIGlvdl9pdGVyX2FkdmFuY2Uoc3RydWN0IGlvdl9pdGVyICppLCBzaXplX3Qgc2l6ZSkKIHsKIAlpZiAodW5saWtlbHkoaS0mZ3Q7Y291bnQgJmx0OyBzaXplKSkKIAkJc2l6ZSA9IGktJmd0O2NvdW50OwotCWlmIChsaWtlbHkoaXRlcl9pc191YnVmKGkpKSB8fCB1bmxpa2VseShpb3ZfaXRlcl9pc194YXJyYXkoaSkpKSB7CiYjNDM7CWlmIChsaWtlbHkoaXRlcl9pc191YnVmKGkpKSB8fCB1bmxpa2VseShpb3ZfaXRlcl9pc194YXJyYXkoaSkpIHx8CiYjNDM7CSAgICB1bmxpa2VseShpb3ZfaXRlcl9pc19kbWFidWZfbWFwKGkpKSkgewogCQlpLSZndDtpb3Zfb2Zmc2V0ICYjNDM7PSBzaXplOwogCQlpLSZndDtjb3VudCAtPSBzaXplOwogCX0gZWxzZSBpZiAobGlrZWx5KGl0ZXJfaXNfaW92ZWMoaSkgfHwgaW92X2l0ZXJfaXNfa3ZlYyhpKSkpIHsKQEAgLTYzMSw3ICYjNDM7NjMyLDggQEAgdm9pZCBpb3ZfaXRlcl9yZXZlcnQoc3RydWN0IGlvdl9pdGVyICppLCBzaXplX3QgdW5yb2xsKQogCQlyZXR1cm47CiAJfQogCXVucm9sbCAtPSBpLSZndDtpb3Zfb2Zmc2V0OwotCWlmIChpb3ZfaXRlcl9pc194YXJyYXkoaSkgfHwgaXRlcl9pc191YnVmKGkpKSB7CiYjNDM7CWlmIChpb3ZfaXRlcl9pc194YXJyYXkoaSkgfHwgaXRlcl9pc191YnVmKGkpIHx8CiYjNDM7CSAgICBpb3ZfaXRlcl9pc19kbWFidWZfbWFwKGkpKSB7CiAJCUJVRygpOyAvKiBXZSBzaG91bGQgbmV2ZXIgZ28gYmV5b25kIHRoZSBzdGFydCBvZiB0aGUgc3BlY2lmaWVkCiAJCQkqIHJhbmdlIHNpbmNlIHdlIG1pZ2h0IHRoZW4gYmUgc3RyYXlpbmcgaW50byBwYWdlcyB0aGF0CiAJCQkqIGFyZW4mIzM5O3QgcGlubmVkLgpAQCAtNzc1LDYgJiM0Mzs3NzcsMjAgQEAgdm9pZCBpb3ZfaXRlcl94YXJyYXkoc3RydWN0IGlvdl9pdGVyICppLCB1bnNpZ25lZCBpbnQgZGlyZWN0aW9uLAogfQogRVhQT1JUX1NZTUJPTChpb3ZfaXRlcl94YXJyYXkpOwogCiYjNDM7dm9pZCBpb3ZfaXRlcl9kbWFidWZfbWFwKHN0cnVjdCBpb3ZfaXRlciAqaSwgdW5zaWduZWQgaW50IGRpcmVjdGlvbiwKJiM0MzsJCQkgc3RydWN0IGRtYV9idWZfaW9fbWFwICptYXAsCiYjNDM7CQkJIGxvZmZfdCBvZmYsIHNpemVfdCBjb3VudCkKJiM0Mzt7CiYjNDM7CVdBUk5fT04oZGlyZWN0aW9uICZhbXA7IH4oUkVBRCB8IFdSSVRFKSk7CiYjNDM7CSppID0gKHN0cnVjdCBpb3ZfaXRlcil7CiYjNDM7CQkuaXRlcl90eXBlID0gSVRFUl9ETUFCVUZfTUFQLAomIzQzOwkJLmRhdGFfc291cmNlID0gZGlyZWN0aW9uLAomIzQzOwkJLmRtYWJ1Zl9tYXAgPSBtYXAsCiYjNDM7CQkuY291bnQgPSBjb3VudCwKJiM0MzsJCS5pb3Zfb2Zmc2V0ID0gb2ZmLAomIzQzOwl9OwomIzQzO30KJiM0MzsKIC8qKgogICogaW92X2l0ZXJfZGlzY2FyZCAtIEluaXRpYWxpc2UgYW4gSS9PIGl0ZXJhdG9yIHRoYXQgZGlzY2FyZHMgZGF0YQogICogQGk6IFRoZSBpdGVyYXRvciB0byBpbml0aWFsaXNlLgpAQCAtODQxLDcgJiM0Mzs4NTcsNyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBpb3ZfaXRlcl9hbGlnbm1lbnRfYnZlYyhjb25zdCBzdHJ1Y3QgaW92X2l0ZXIgKmkpCiAKIHVuc2lnbmVkIGxvbmcgaW92X2l0ZXJfYWxpZ25tZW50KGNvbnN0IHN0cnVjdCBpb3ZfaXRlciAqaSkKIHsKLQlpZiAobGlrZWx5KGl0ZXJfaXNfdWJ1ZihpKSkpIHsKJiM0MzsJaWYgKGxpa2VseShpdGVyX2lzX3VidWYoaSkpIHx8IGlvdl9pdGVyX2lzX2RtYWJ1Zl9tYXAoaSkpIHsKIAkJc2l6ZV90IHNpemUgPSBpLSZndDtjb3VudDsKIAkJaWYgKHNpemUpCiAJCQlyZXR1cm4gKCh1bnNpZ25lZCBsb25nKWktJmd0O3VidWYgJiM0MzsgaS0mZ3Q7aW92X29mZnNldCkgfCBzaXplOwpAQCAtODcyLDcgJiM0Mzs4ODgsNyBAQCB1bnNpZ25lZCBsb25nIGlvdl9pdGVyX2dhcF9hbGlnbm1lbnQoY29uc3Qgc3RydWN0IGlvdl9pdGVyICppKQogCXNpemVfdCBzaXplID0gaS0mZ3Q7Y291bnQ7CiAJdW5zaWduZWQgazsKIAotCWlmIChpdGVyX2lzX3VidWYoaSkpCiYjNDM7CWlmIChpdGVyX2lzX3VidWYoaSkgfHwgaW92X2l0ZXJfaXNfZG1hYnVmX21hcChpKSkKIAkJcmV0dXJuIDA7CiAKIAlpZiAoV0FSTl9PTighaXRlcl9pc19pb3ZlYyhpKSkpCkBAIC0xNDY5LDExICYjNDM7MTQ4NSwxMiBAQCBFWFBPUlRfU1lNQk9MX0dQTChpbXBvcnRfdWJ1Zik7CiB2b2lkIGlvdl9pdGVyX3Jlc3RvcmUoc3RydWN0IGlvdl9pdGVyICppLCBzdHJ1Y3QgaW92X2l0ZXJfc3RhdGUgKnN0YXRlKQogewogCWlmIChXQVJOX09OX09OQ0UoIWlvdl9pdGVyX2lzX2J2ZWMoaSkgJmFtcDsmYW1wOyAhaXRlcl9pc19pb3ZlYyhpKSAmYW1wOyZhbXA7Ci0JCQkgIWl0ZXJfaXNfdWJ1ZihpKSkgJmFtcDsmYW1wOyAhaW92X2l0ZXJfaXNfa3ZlYyhpKSkKJiM0MzsJCQkgIWl0ZXJfaXNfdWJ1ZihpKSAmYW1wOyZhbXA7ICFpb3ZfaXRlcl9pc19rdmVjKGkpICZhbXA7JmFtcDsKJiM0MzsJCQkgIWlvdl9pdGVyX2lzX2RtYWJ1Zl9tYXAoaSkpKQogCQlyZXR1cm47CiAJaS0mZ3Q7aW92X29mZnNldCA9IHN0YXRlLSZndDtpb3Zfb2Zmc2V0OwogCWktJmd0O2NvdW50ID0gc3RhdGUtJmd0O2NvdW50OwotCWlmIChpdGVyX2lzX3VidWYoaSkpCiYjNDM7CWlmIChpdGVyX2lzX3VidWYoaSkgfHwgaW92X2l0ZXJfaXNfZG1hYnVmX21hcChpKSkKIAkJcmV0dXJuOwogCS8qCiAJICogRm9yIHRoZSAqdmVjIGl0ZXJzLCBucl9zZWdzICYjNDM7IGlvdiBpcyBjb25zdGFudCAtIGlmIHdlIGluY3JlbWVudApAQCAtMTYzNCw3ICYjNDM7MTY1MSw3IEBAIHN0YXRpYyBzc2l6ZV90IGlvdl9pdGVyX2V4dHJhY3RfYnZlY19wYWdlcyhzdHJ1Y3QgaW92X2l0ZXIgKmksCiAJfQogCWJpLmJpX2lkeCA9IDA7CiAJYmkuYmlfc2l6ZSA9IG1heHNpemU7Ci0JYmkuYmlfYnZlY19kb25lID0gc2tpcDsKJiM0MzsJYmkuYmlfb2Zmc2V0ID0gc2tpcDsKIAogCW1heHBhZ2VzID0gd2FudF9wYWdlc19hcnJheShwYWdlcywgbWF4c2l6ZSwgc2tpcCwgbWF4cGFnZXMpOwogCWlmICghbWF4cGFnZXMpCmRpZmYgLS1naXQgYS9uZXQvY2VwaC9tZXNzZW5nZXIuYyBiL25ldC9jZXBoL21lc3Nlbmdlci5jCmluZGV4IDM0YjMwOTdiNGM3YjkuLjljMWI2Y2Y4YzM2ZmUgMTAwNjQ0Ci0tLSBhL25ldC9jZXBoL21lc3Nlbmdlci5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jZXBoL21lc3Nlbmdlci5jCkBAIC03NjIsNyAmIzQzOzc2Miw3IEBAIHN0YXRpYyBib29sIGNlcGhfbXNnX2RhdGFfYmlvX2FkdmFuY2Uoc3RydWN0IGNlcGhfbXNnX2RhdGFfY3Vyc29yICpjdXJzb3IsCiAJaWYgKCFjdXJzb3ItJmd0O3Jlc2lkKQogCQlyZXR1cm4gZmFsc2U7ICAgLyogbm8gbW9yZSBkYXRhICovCiAKLQlpZiAoIWJ5dGVzIHx8IChpdC0mZ3Q7aXRlci5iaV9zaXplICZhbXA7JmFtcDsgaXQtJmd0O2l0ZXIuYmlfYnZlY19kb25lICZhbXA7JmFtcDsKJiM0MzsJaWYgKCFieXRlcyB8fCAoaXQtJmd0O2l0ZXIuYmlfc2l6ZSAmYW1wOyZhbXA7IGl0LSZndDtpdGVyLmJpX29mZnNldCAmYW1wOyZhbXA7CiAJCSAgICAgICBwYWdlID09IGJpb19pdGVyX3BhZ2UoaXQtJmd0O2JpbywgaXQtJmd0O2l0ZXIpKSkKIAkJcmV0dXJuIGZhbHNlOwkvKiBtb3JlIGJ5dGVzIHRvIHByb2Nlc3MgaW4gdGhpcyBzZWdtZW50ICovCiAKQEAgLTgxNyw3ICYjNDM7ODE3LDcgQEAgc3RhdGljIGJvb2wgY2VwaF9tc2dfZGF0YV9idmVjc19hZHZhbmNlKHN0cnVjdCBjZXBoX21zZ19kYXRhX2N1cnNvciAqY3Vyc29yLAogCWlmICghY3Vyc29yLSZndDtyZXNpZCkKIAkJcmV0dXJuIGZhbHNlOyAgIC8qIG5vIG1vcmUgZGF0YSAqLwogCi0JaWYgKCFieXRlcyB8fCAoY3Vyc29yLSZndDtidmVjX2l0ZXIuYmlfYnZlY19kb25lICZhbXA7JmFtcDsKJiM0MzsJaWYgKCFieXRlcyB8fCAoY3Vyc29yLSZndDtidmVjX2l0ZXIuYmlfb2Zmc2V0ICZhbXA7JmFtcDsKIAkJICAgICAgIHBhZ2UgPT0gYnZlY19pdGVyX3BhZ2UoYnZlY3MsIGN1cnNvci0mZ3Q7YnZlY19pdGVyKSkpCiAJCXJldHVybiBmYWxzZTsJLyogbW9yZSBieXRlcyB0byBwcm9jZXNzIGluIHRoaXMgc2VnbWVudCAqLwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE0OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2MDk4CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMTUyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbjogRE1BLUJVRiBJbnRlZ3JhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHBhdGNoIHNlcmllcyAqYWJzb2x1dGVseSogd2FycmFudHMgZnV6emluZy4gV2UmIzM5O3JlIGxvb2tpbmcgYXQgYSBmdW5kYW1lbnRhbCBzaGlmdCBoZXJlLCBpbnRlZ3JhdGluZyBgZG1hLWJ1ZmAgaW50byB0aGUgY29yZSBJL08gcGF0aHMsIHNwZWNpZmljYWxseSBpbXBhY3RpbmcgYGlvX3VyaW5nYCBhbmQgTlZNZS4gVGhpcyBpc24mIzM5O3QganVzdCBhIG1pbm9yIHR3ZWFrOyBpdCYjMzk7cyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGhpbiB0aGUgYmxvY2sgbGF5ZXIsIE5WTWUgZHJpdmVyLCBhbmQgaW9fdXJpbmcgY29tcG9uZW50cy4gTXkgZXhwZXJ0aXNlIHRlbGxzIG1lIHRoZXNlIGFyZSBoaWdoLXZhbHVlIHRhcmdldHMgZm9yIHVuY292ZXJpbmcgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy4KCkxldCYjMzk7cyBsb29rIGF0IHRoZSBzcGVjaWZpYyBjaGFuZ2VzLiBUaGUgcGF0Y2ggbW9kaWZpZXMgYGJpb2AsIGBibGstbXFgLCBgbnZtZWAsIGBpb191cmluZ2AsIGFuZCBgaW92X2l0ZXJgIHRvIHN1cHBvcnQgYGRtYS1idWZgIG1hcHBpbmdzLiBXZSYjMzk7cmUgc2VlaW5nIGNoYW5nZXMgbGlrZSBgYmlvX2lvdl9pdGVyX3NldGAgcmVwbGFjaW5nIGBiaW9faW92X2J2ZWNfc2V0YCwgd2l0aCB0aGUgY3J1Y2lhbCBhZGRpdGlvbiBvZiBgaW92X2l0ZXJfaXNfZG1hYnVmX21hcGAgaGFuZGxpbmcuIFdlJiMzOTt2ZSBnb3QgYSBuZXcgZmlsZSwgYGRtYS1idWYtaW8uY2AsIGludHJvZHVjaW5nIGZ1bmN0aW9ucyBsaWtlIGBkbWFfYnVmX2lvX2N0eF9jcmVhdGVgIGFuZCBgZG1hX2J1Zl9pb19jcmVhdGVfbWFwYCwgZXRjLiBUaGUgTlZNZSBkcml2ZXIgZ2V0cyBtb2RpZmljYXRpb25zIGZvciBgbnZtZV9ycV9zZXR1cF9kbWFidWZgLCBgbnZtZV9wY2lfaW5pdF9kbWFfYnVmX2lvX2N0eGAsIGV0Yy4sIHdoaWNoIGFyZSBpbXBvcnRhbnQuIEFuZCBpbiBgaW9fdXJpbmcvcnNyYy5jYCwgd2Ugc2VlIGBpb19yZWdpc3Rlcl9kbWFidWZgLCBgaW9faW1wb3J0X2RtYWJ1ZmAuIEFuZCwgb2YgY291cnNlLCB0aGUgaW50cm9kdWN0aW9uIG9mIGBJVEVSX0RNQUJVRl9NQVBgIGluIGBpb3ZfaXRlcmAuCgpXZSYjMzk7cmUgZGVhbGluZyB3aXRoIGEgbmV3IEkvTyBtYXBwaW5nIGluZnJhc3RydWN0dXJlIGJhc2VkIG9uIGBkbWEtYnVmYCwgYW5kIGl0cyBpbnRlZ3JhdGlvbiB3aXRoIGV4aXN0aW5nIG1lY2hhbmlzbXMuIFRoaXMgaXMgcHJpbWUgZnV6emluZyB0ZXJyaXRvcnkuCgpJJiMzOTt2ZSBpZGVudGlmaWVkIHRoZSBjb25maWd1cmF0aW9ucyB0aGF0IGFyZSBrZXk6IGBDT05GSUdfRE1BX1NIQVJFRF9CVUZGRVJgIGlzIGVzc2VudGlhbC4gQWx0aG91Z2ggaXQgc2VlbXMgdG8gYmUgZW5hYmxlZCBieSBkZWZhdWx0IGluIG1hbnkgY29uZmlncywgd2UmIzM5O2xsIG5lZWQgdG8gc3BlY2lmeSBpdCBleHBsaWNpdGx5IGZvciBhIGNvbXBsZXRlIGZ1enppbmcgY292ZXJhZ2UuIGBDT05GSUdfTlZNRV9DT1JFYCwgYENPTkZJR19CTEtfREVWX05WTUVgLCBhbmQgYENPTkZJR19JT19VUklOR2AgYXJlIHRoZSBvdGhlciBpbXBvcnRhbnQgb25lcy4KCk5vdywgbGV0JiMzOTtzIGlkZW50aWZ5IHRoZSBzcGVjaWZpYyBmdW5jdGlvbnMuIEkgbmVlZCB0byBmb2N1cyBvbiB0aGUga2V5IHN5bWJvbHMgdG8gZnV6ei4KCkJhc2VkIG9uIHRoZSBwcm9tcHQsIGl0IGlzIGJldHRlciB0byBmdXp6IG5vbi1zdGF0aWMgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMuIFRoaXMgc3VnZ2VzdHMgdGhhdCB3ZSBzaG91bGQgYWltIGZvciBBUEkgZW50cnlwb2ludHMuIFRoZXJlZm9yZSwgdGhlIGxpc3QgbmVlZHMgcmVmaW5lbWVudC4KClNvIEkgYW0gbG9va2luZyBhdDoKCi0gYGRtYV9idWZfaW9fY3R4X2NyZWF0ZWAKLSBgZG1hX2J1Zl9pb19jdHhfcmVsZWFzZWAKLSBgZG1hX2J1Zl9pb19jcmVhdGVfbWFwYAotIGBkbWFfYnVmX2lvX2ludmFsaWRhdGVfbWFwcGluZ3NgCi0gYGRtYV9idWZfaW9faW5pdF9tYXBgCi0gYGJpb19pb3ZfaXRlcl9zZXRgCi0gYF9faW9faW1wb3J0X3JlZ19idWZgCi0gYGlvX2Ryb3BfZG1hYnVmX25vZGVgCi0gYGlvdl9pdGVyX2RtYWJ1Zl9tYXBgCi0gYGJpb19zcGxpdF9pb19hdGAgKHNpbmNlIGBiaW9fc3BsaXRfaW9fYXRfZG1hYnVmYCBpcyBzdGF0aWMgaW5saW5lKQotIGBudm1lX21hcF9kYXRhYCAoY2FsbHMgYG52bWVfcnFfc2V0dXBfZG1hYnVmYCkKLSBgbnZtZV91bm1hcF9kYXRhYCAoY2FsbHMgYG52bWVfcnFfY2xlYW5fZG1hYnVmX21hcGApCi0gYG52bWVfcGNpX2luaXRfZG1hX2J1Zl9pb19jdHhgIChzdGF0aWMsIGJ1dCBtYXliZSBgbnZtZV9kZXZfbWFwYCBvciBzb21ldGhpbmc/IEl0JiMzOTtzIGEgY2FsbGJhY2sgaW4gYG52bWVfcGNpX2N0cmxfb3BzYCkuCgpTbyBJIHRoaW5rIGEgZ29vZCBpbml0aWFsIGZvY3VzIHdvdWxkIGJlOgoKLSBgZG1hX2J1Zl9pb19jdHhfY3JlYXRlYAotIGBkbWFfYnVmX2lvX2N0eF9yZWxlYXNlYAotIGBkbWFfYnVmX2lvX2NyZWF0ZV9tYXBgCi0gYGRtYV9idWZfaW9faW52YWxpZGF0ZV9tYXBwaW5nc2AKLSBgZG1hX2J1Zl9pb19pbml0X21hcGAKLSBgYmlvX2lvdl9pdGVyX3NldGAKLSBgX19pb19pbXBvcnRfcmVnX2J1ZmAKLSBgaW9fZHJvcF9kbWFidWZfbm9kZWAKLSBgaW92X2l0ZXJfZG1hYnVmX21hcGAKLSBgYmlvX3NwbGl0X2lvX2F0YAotIGBudm1lX21hcF9kYXRhYAotIGBudm1lX3VubWFwX2RhdGFgCi0gYG52bWVfcGNpX2luaXRfZG1hX2J1Zl9pb19jdHhgCgpUaGUgcmVhc29uaW5nIGhlcmUgaXMgc3RyYWlnaHRmb3J3YXJkLiBUaGlzIHBhdGNoIHNlcmllcyBlbmFibGVzIGBkbWEtYnVmYCB3aXRoaW4ga2V5IEkvTyBwYXRocy4gSXQgYWRkcyBuZXcgZnVuY3Rpb25zIHRvIGNyZWF0ZSBhbmQgbWFuYWdlIGBkbWEtYnVmYCBtYXBwaW5ncyBhbmQgbW9kaWZpZXMgY29yZSBmdW5jdGlvbnMgdG8gaGFuZGxlIGBkCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxNDozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtETUFfU0hBUkVEX0JVRkZFUiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9NYWtlZmlsZT03OD1vYmoteVx0XHRcdFx0JiM0Mzs9IGRheC9cbmRyaXZlcnMvTWFrZWZpbGU6Nzk6b2JqLSQoQ09ORklHX0RNQV9TSEFSRURfQlVGRkVSKSAmIzQzOz0gZG1hLWJ1Zi9cbmRyaXZlcnMvTWFrZWZpbGUtODAtb2JqLSQoQ09ORklHX05VQlVTKVx0XHQmIzQzOz0gbnVidXMvXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTQ6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzg3NDcKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBxdWljayBtZW50YWwgcnVuZG93bjoKCioqQ29uZmlybWluZyBETUEgQnVmZmVyIGFuZCBNb3Zpbmcgb24gdG8gSU9fVVJJTkcqKgoKQWxyaWdodCwgeWVwLCB0aGF0IGBETUFfU0hBUkVEX0JVRkZFUmAgdmFyaWFibGXigJRJJiMzOTttIHByZXR0eSBjb25maWRlbnQgdGhhdCYjMzk7cyB0aGUgY29ycmVjdCBvbmUgd2UmIzM5O3JlIHdvcmtpbmcgd2l0aCBoZXJlLiBHb29kLiBOb3csIGxldCYjMzk7cyBwaXZvdCBhbmQgdGFrZSBhIGxvb2sgYXQgaG93IHRoaXMgYWxsIHBsYXlzIG91dCB3aXRoIGBJT19VUklOR2AuIFRpbWUgdG8gc2hpZnQgbXkgZm9jdXMgYW5kIHN0YXJ0IGFzc2Vzc2luZyB0aGUgaW1wbGljYXRpb25zIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE0OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0lPX1VSSU5HJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZz0xOTEwPWNvbmZpZyBBSU9cbi0tXG5pbml0L0tjb25maWctMTkxNy1cbmluaXQvS2NvbmZpZzoxOTE4OmNvbmZpZyBJT19VUklOR1xuaW5pdC9LY29uZmlnLTE5MTktXHRib29sIFwmIzM0O0VuYWJsZSBJTyB1cmluZyBzdXBwb3J0XCYjMzQ7IGlmIEVYUEVSVFxuLS1cbmluaXQvS2NvbmZpZz0xOTI3PWNvbmZpZyBHQ09WX1BST0ZJTEVfVVJJTkdcbmluaXQvS2NvbmZpZy0xOTI4LVx0Ym9vbCBcJiMzNDtFbmFibGUgR0NPViBwcm9maWxpbmcgb24gdGhlIGlvX3VyaW5nIHN1YnN5c3RlbVwmIzM0O1xuaW5pdC9LY29uZmlnOjE5Mjk6XHRkZXBlbmRzIG9uIElPX1VSSU5HIFx1MDAyNlx1MDAyNiBHQ09WX0tFUk5FTFxuaW5pdC9LY29uZmlnLTE5MzAtXHRoZWxwXG4tLVxuaW5pdC9LY29uZmlnLTE5MzktXG5pbml0L0tjb25maWc6MTk0MDpjb25maWcgSU9fVVJJTkdfTU9DS19GSUxFXG5pbml0L0tjb25maWctMTk0MS1cdHRyaXN0YXRlIFwmIzM0O0VuYWJsZSBpb191cmluZyBtb2NrIGZpbGVzIChFeHBlcmltZW50YWwpXCYjMzQ7IGlmIEVYUEVSVFxuaW5pdC9LY29uZmlnLTE5NDItXHRkZWZhdWx0IG5cbmluaXQvS2NvbmZpZzoxOTQzOlx0ZGVwZW5kcyBvbiBJT19VUklOR1xuaW5pdC9LY29uZmlnLTE5NDQtXHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTQ6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzkxNTUKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJT19VUklORyBhbmQgTlZNZSBDb25zaWRlcmF0aW9ucyoqCgpZZXMsIGBJT19VUklOR2AgaXMgZGVmaW5pdGVseSB0aGUgcmlnaHQgZGlyZWN0aW9uIHRvIGdvIGhlcmUuIFRoZSBpbmhlcmVudCBiZW5lZml0cyBhcmUgY2xlYXIgYW5kIGl0JiMzOTtzIHdoZXJlIHdlIHNob3VsZCBmb2N1cyBvdXIgYXR0ZW50aW9uIGZvciB0aGlzIGFyY2hpdGVjdHVyZS4gTm93LCBJIHdhbnQgdG8gdGFrZSBhIGRlZXBlciBsb29rIGF0IGBCTEtfREVWX05WTUVgLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSByZWFsIHBlcmZvcm1hbmNlIGdhaW5zIGFyZSBnb2luZyB0byBiZSBmb3VuZC4gTGV0JiMzOTtzIHNlZSBob3cgd2VsbCBpdCYjMzk7cyB3b3JraW5nIHdpdGggdGhpcyBuZXcgZGVzaWduLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE0OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0JMS19ERVZfTlZNRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbnZtZS9ob3N0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZz0yPWNvbmZpZyBOVk1FX0NPUkVcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9LY29uZmlnLTQtXG5kcml2ZXJzL252bWUvaG9zdC9LY29uZmlnOjU6Y29uZmlnIEJMS19ERVZfTlZNRVxuZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZy02LVx0dHJpc3RhdGUgXCYjMzQ7TlZNIEV4cHJlc3MgYmxvY2sgZGV2aWNlXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTQ6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzk0MTQKCQkJCQkJCW91dHB1dDogMjQzCgkJCQkJCQl0aG91Z2h0czogNDA5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBETUEtQnVmIFJlbGF0ZWQgU3ltYm9scyBmb3IgTlZNZSBEcml2ZXIgSW50ZWdyYXRpb24qKgoKT2theSwgc28gd2UmIzM5O3ZlIGNvbmZpcm1lZCBgQkxLX0RFVl9OVk1FYCBpcyB0aGUgcmlnaHQgcGF0aCBoZXJlLiBOb3csIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCB0aGUgaW1wb3J0YW50IHN5bWJvbHMuIEkmIzM5O20gZ29pbmcgdGhyb3VnaCB0aGUgbGlzdCBhbmQgZG91YmxlLWNoZWNraW5nIHRoYXQgd2UmIzM5O3JlIGNvdmVyaW5nIGFsbCB0aGUgcmVsZXZhbnQgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gYGRtYV9idWZgIGludGVyYWN0aW9uLgoKRmlyc3QsIEkgaWRlbnRpZmllZCBgZG1hX2J1Zl9pb19jdHhfY3JlYXRlYCwgYGRtYV9idWZfaW9fY3R4X3JlbGVhc2VgLCBgZG1hX2J1Zl9pb19jcmVhdGVfbWFwYCwgYGRtYV9idWZfaW9faW52YWxpZGF0ZV9tYXBwaW5nc2AsIGBkbWFfYnVmX2lvX2luaXRfbWFwYCwgYGJpb19pb3ZfaXRlcl9zZXRgLCBgX19pb19pbXBvcnRfcmVnX2J1ZmAsIGBpb19kcm9wX2RtYWJ1Zl9ub2RlYCBhbmQgYGlvdl9pdGVyX2RtYWJ1Zl9tYXBgIGFzIGluaXRpYWwgY2FuZGlkYXRlcy4KCkkgYnJpZWZseSBjb25zaWRlcmVkIGBudm1lX21hcF9kYXRhYCwgYW5kIGBudm1lX3VubWFwX2RhdGFgLCBidXQgcmVhbGl6ZWQgdGhvc2UgYXJlIHN0YXRpYywgYXMgd2VsbCBhcyBgbnZtZV9wY2lfaW5pdF9kbWFfYnVmX2lvX2N0eGAgd2hpY2ggaXMgYWxzbyBzdGF0aWMuIFN0YXRpYyBmdW5jdGlvbnMgYXJlIGxpa2VseSBub3QgZGlyZWN0bHkgdXNlZCBmcm9tIG91dHNpZGUgdGhlIGRyaXZlciwgc28gd2UmIzM5O3JlIHByb2JhYmx5IGZpbmUgbm90IGluY2x1ZGluZyB0aGVtIGRpcmVjdGx5LCBldmVuIGlmIHRoZSBmdW5jdGlvbiBpdHNlbGYgaXMgYSBjYWxsYmFjay4KCkFscmlnaHQsIGFmdGVyIHJldmlld2luZyB0aGUgbGlzdCBhZ2FpbiwgSSYjMzk7bSBjb25maWRlbnQgd2l0aCB0aGVzZSBjYW5kaWRhdGVzLiBUaGUgbm9uLXN0YXRpYyBmdW5jdGlvbnMgc2VlbSB0byBjYXB0dXJlIHRoZSBjb3JlIG9mIHRoZSBgZG1hX2J1ZmAgaW50ZXJhY3Rpb24gcG9pbnRzIGZvciB0aGUgTlZNZSBkcml2ZXIuCgpIZXJlJiMzOTtzIHRoZSBmaW5hbCBsaXN0OgoqICAgYGRtYV9idWZfaW9fY3R4X2NyZWF0ZWAKKiAgIGBkbWFfYnVmX2lvX2N0eF9yZWxlYXNlYAoqICAgYGRtYV9idWZfaW9fY3JlYXRlX21hcGAKKiAgIGBkbWFfYnVmX2lvX2ludmFsaWRhdGVfbWFwcGluZ3NgCiogICBgZG1hX2J1Zl9pb19pbml0X21hcGAKKiAgIGBiaW9faW92X2l0ZXJfc2V0YAoqICAgYF9faW9faW1wb3J0X3JlZ19idWZgCiogICBgaW9fZHJvcF9kbWFidWZfbm9kZWAKKiAgIGBpb3ZfaXRlcl9kbWFidWZfbWFwYAoKSSBiZWxpZXZlIHRoaXMgaXMgYSBzb2xpZCBzZWxlY3Rpb24uIExldCYjMzk7cyBjYWxsIGBzZXQtcmVzdWx0c2AgYW5kIG1vdmUgZm9yd2FyZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTQ6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RNQV9TSEFSRURfQlVGRkVSJiMzNDssCiAgICAmIzM0O0lPX1VSSU5HJiMzNDssCiAgICAmIzM0O0JMS19ERVZfTlZNRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RtYV9idWZfaW9fY3R4X2NyZWF0ZSYjMzQ7LAogICAgJiMzNDtkbWFfYnVmX2lvX2N0eF9yZWxlYXNlJiMzNDssCiAgICAmIzM0O2RtYV9idWZfaW9fY3JlYXRlX21hcCYjMzQ7LAogICAgJiMzNDtkbWFfYnVmX2lvX2ludmFsaWRhdGVfbWFwcGluZ3MmIzM0OywKICAgICYjMzQ7ZG1hX2J1Zl9pb19pbml0X21hcCYjMzQ7LAogICAgJiMzNDtiaW9faW92X2l0ZXJfc2V0JiMzNDssCiAgICAmIzM0O19faW9faW1wb3J0X3JlZ19idWYmIzM0OywKICAgICYjMzQ7aW9fZHJvcF9kbWFidWZfbm9kZSYjMzQ7LAogICAgJiMzNDtpb3ZfaXRlcl9kbWFidWZfbWFwJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgZG1hLWJ1ZiBzdXBwb3J0IGluIHRoZSBibG9jayBsYXllciwgTlZNZSBQQ0kgZHJpdmVyLCBhbmQgaW9fdXJpbmcuIEl0IGFkZHMgYSBuZXcgZG1hLWJ1ZiBJL08gbWFwcGluZyBpbmZyYXN0cnVjdHVyZSBhbmQgbW9kaWZpZXMgY29yZSBiaW8gYW5kIGlvdl9pdGVyIGxvZ2ljIHRvIGhhbmRsZSBkbWEtYnVmIG1hcHMuIFRoaXMgaXMgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGV4cG9zZXMgbmV3IHJlYWNoYWJsZSBjb2RlIHBhdGhzIHZpYSBpb191cmluZyBhbmQgTlZNZSwgd2hpY2ggc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RE1BX1NIQVJFRF9CVUZGRVImIzM0OywKICAgICYjMzQ7SU9fVVJJTkcmIzM0OywKICAgICYjMzQ7QkxLX0RFVl9OVk1FJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZG1hX2J1Zl9pb19jdHhfY3JlYXRlJiMzNDssCiAgICAmIzM0O2RtYV9idWZfaW9fY3R4X3JlbGVhc2UmIzM0OywKICAgICYjMzQ7ZG1hX2J1Zl9pb19jcmVhdGVfbWFwJiMzNDssCiAgICAmIzM0O2RtYV9idWZfaW9faW52YWxpZGF0ZV9tYXBwaW5ncyYjMzQ7LAogICAgJiMzNDtkbWFfYnVmX2lvX2luaXRfbWFwJiMzNDssCiAgICAmIzM0O2Jpb19pb3ZfaXRlcl9zZXQmIzM0OywKICAgICYjMzQ7X19pb19pbXBvcnRfcmVnX2J1ZiYjMzQ7LAogICAgJiMzNDtpb19kcm9wX2RtYWJ1Zl9ub2RlJiMzNDssCiAgICAmIzM0O2lvdl9pdGVyX2RtYWJ1Zl9tYXAmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBkbWEtYnVmIHN1cHBvcnQgaW4gdGhlIGJsb2NrIGxheWVyLCBOVk1lIFBDSSBkcml2ZXIsIGFuZCBpb191cmluZy4gSXQgYWRkcyBhIG5ldyBkbWEtYnVmIEkvTyBtYXBwaW5nIGluZnJhc3RydWN0dXJlIGFuZCBtb2RpZmllcyBjb3JlIGJpbyBhbmQgaW92X2l0ZXIgbG9naWMgdG8gaGFuZGxlIGRtYS1idWYgbWFwcy4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgZXhwb3NlcyBuZXcgcmVhY2hhYmxlIGNvZGUgcGF0aHMgdmlhIGlvX3VyaW5nIGFuZCBOVk1lLCB3aGljaCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTQ6Mzc6MzYuNzYyODI5OTMyWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYxNzMxNTMyMjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRE1BX1NIQVJFRF9CVUZGRVJcIixcbiAgICBcIklPX1VSSU5HXCIsXG4gICAgXCJCTEtfREVWX05WTUVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkbWFfYnVmX2lvX2N0eF9jcmVhdGVcIixcbiAgICBcImRtYV9idWZfaW9fY3R4X3JlbGVhc2VcIixcbiAgICBcImRtYV9idWZfaW9fY3JlYXRlX21hcFwiLFxuICAgIFwiZG1hX2J1Zl9pb19pbnZhbGlkYXRlX21hcHBpbmdzXCIsXG4gICAgXCJkbWFfYnVmX2lvX2luaXRfbWFwXCIsXG4gICAgXCJiaW9faW92X2l0ZXJfc2V0XCIsXG4gICAgXCJfX2lvX2ltcG9ydF9yZWdfYnVmXCIsXG4gICAgXCJpb19kcm9wX2RtYWJ1Zl9ub2RlXCIsXG4gICAgXCJpb3ZfaXRlcl9kbWFidWZfbWFwXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBkbWEtYnVmIHN1cHBvcnQgaW4gdGhlIGJsb2NrIGxheWVyLCBOVk1lIFBDSSBkcml2ZXIsIGFuZCBpb191cmluZy4gSXQgYWRkcyBhIG5ldyBkbWEtYnVmIEkvTyBtYXBwaW5nIGluZnJhc3RydWN0dXJlIGFuZCBtb2RpZmllcyBjb3JlIGJpbyBhbmQgaW92X2l0ZXIgbG9naWMgdG8gaGFuZGxlIGRtYS1idWYgbWFwcy4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgZXhwb3NlcyBuZXcgcmVhY2hhYmxlIGNvZGUgcGF0aHMgdmlhIGlvX3VyaW5nIGFuZCBOVk1lLCB3aGljaCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxNDozNzozNi43NjI4Mzg0MzJaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwMDI3NTY5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDJjZWE2NmQxOWY1ZTYxNTk2ZDRkMDMyNmFlZTU3NTI1NjZmNzViYzdcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFN1biBBdWcgMiAxNDozNzozNSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2Jsb2NrL2Jpb3ZlY3MucnN0IGIvRG9jdW1lbnRhdGlvbi9ibG9jay9iaW92ZWNzLnJzdFxcbmluZGV4IDExMTI2ZWQ2ZjQwZjcuLjQ5ZGEyMTQ3YjdkODYgMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9ibG9jay9iaW92ZWNzLnJzdFxcbisrKyBiL0RvY3VtZW50YXRpb24vYmxvY2svYmlvdmVjcy5yc3RcXG5AQCAtMTYsMTYgKzE2LDE2IEBAIGJ2X2xlbiBieSB0aGUgbnVtYmVyIG9mIGJ5dGVzIGNvbXBsZXRlZCBpbiB0aGF0IGJpb3ZlYy5cXG4gSW4gdGhlIG5ldyBzY2hlbWUgb2YgdGhpbmdzLCBldmVyeXRoaW5nIHRoYXQgbXVzdCBiZSBtdXRhdGVkIGluIG9yZGVyIHRvXFxuIHBhcnRpYWxseSBjb21wbGV0ZSBhIGJpbyBpcyBzZWdyZWdhdGVkIGludG8gc3RydWN0IGJ2ZWNfaXRlcjogYmlfc2VjdG9yLFxcbiBiaV9zaXplIGFuZCBiaV9pZHggaGF2ZSBiZWVuIG1vdmVkIHRoZXJlOyBhbmQgaW5zdGVhZCBvZiBtb2RpZnlpbmcgYnZfb2Zmc2V0XFxuLWFuZCBidl9sZW4sIHN0cnVjdCBidmVjX2l0ZXIgaGFzIGJpX2J2ZWNfZG9uZSwgd2hpY2ggcmVwcmVzZW50cyB0aGUgbnVtYmVyIG9mXFxuK2FuZCBidl9sZW4sIHN0cnVjdCBidmVjX2l0ZXIgaGFzIGJpX29mZnNldCwgd2hpY2ggcmVwcmVzZW50cyB0aGUgbnVtYmVyIG9mXFxuIGJ5dGVzIGNvbXBsZXRlZCBpbiB0aGUgY3VycmVudCBidmVjLlxcbiBcXG4gVGhlcmUgYXJlIGEgYnVuY2ggb2YgbmV3IGhlbHBlciBtYWNyb3MgZm9yIGhpZGluZyB0aGUgZ29yeSBkZXRhaWxzIC0gaW5cXG4gcGFydGljdWxhciwgcHJlc2VudGluZyB0aGUgaWxsdXNpb24gb2YgcGFydGlhbGx5IGNvbXBsZXRlZCBiaW92ZWNzIHNvIHRoYXRcXG4tbm9ybWFsIGNvZGUgZG9lc24ndCBoYXZlIHRvIGRlYWwgd2l0aCBiaV9idmVjX2RvbmUuXFxuK25vcm1hbCBjb2RlIGRvZXNuJ3QgaGF2ZSB0byBkZWFsIHdpdGggYmlfb2Zmc2V0LlxcbiBcXG4gICogRHJpdmVyIGNvZGUgc2hvdWxkIG5vIGxvbmdlciByZWZlciB0byBiaW92ZWNzIGRpcmVjdGx5OyB3ZSBub3cgaGF2ZVxcbiAgICBiaW9faW92ZWMoKSBhbmQgYmlvX2l0ZXJfaW92ZWMoKSBtYWNyb3MgdGhhdCByZXR1cm4gbGl0ZXJhbCBzdHJ1Y3QgYmlvdmVjcyxcXG4tICAgY29uc3RydWN0ZWQgZnJvbSB0aGUgcmF3IGJpb3ZlY3MgYnV0IHRha2luZyBpbnRvIGFjY291bnQgYmlfYnZlY19kb25lIGFuZFxcbisgICBjb25zdHJ1Y3RlZCBmcm9tIHRoZSByYXcgYmlvdmVjcyBidXQgdGFraW5nIGludG8gYWNjb3VudCBiaV9vZmZzZXQgYW5kXFxuICAgIGJpX3NpemUuXFxuIFxcbiAgICBiaW9fZm9yX2VhY2hfc2VnbWVudCgpIGhhcyBiZWVuIHVwZGF0ZWQgdG8gdGFrZSBhIGJ2ZWNfaXRlciBhcmd1bWVudFxcbkBAIC0xMDEsNyArMTAxLDcgQEAgT3RoZXIgaW1wbGljYXRpb25zOlxcbiAgICBJLmUuIGluc3RlYWQgb2YgdXNpbmcgYmlvX2lvdmVjX2lkeCgpIChvciBiaW8tXFx1MDAzZWJpX2lvdmVjW2Jpby1cXHUwMDNlYmlfaWR4XSksIHlvdVxcbiAgICBub3cgdXNlIGJpb19pdGVyX2lvdmVjKCksIHdoaWNoIHRha2VzIGEgYnZlY19pdGVyIGFuZCByZXR1cm5zIGFcXG4gICAgbGl0ZXJhbCBzdHJ1Y3QgYmlvX3ZlYyAtIGNvbnN0cnVjdGVkIG9uIHRoZSBmbHkgZnJvbSB0aGUgcmF3IGJpb3ZlYyBidXRcXG4tICAgdGFraW5nIGludG8gYWNjb3VudCBiaV9idmVjX2RvbmUgKGFuZCBiaV9zaXplKS5cXG4rICAgdGFraW5nIGludG8gYWNjb3VudCBiaV9vZmZzZXQgKGFuZCBiaV9zaXplKS5cXG4gXFxuICAqIGJpX3ZjbnQgY2FuJ3QgYmUgdHJ1c3RlZCBvciByZWxpZWQgdXBvbiBieSBkcml2ZXIgY29kZSAtIGkuZS4gYW55dGhpbmcgdGhhdFxcbiAgICBkb2Vzbid0IGFjdHVhbGx5IG93biB0aGUgYmlvLiBUaGUgcmVhc29uIGlzIHR3b2ZvbGQ6IGZpcnN0bHksIGl0J3Mgbm90XFxuZGlmZiAtLWdpdCBhL2Jsb2NrL2Jpby5jIGIvYmxvY2svYmlvLmNcXG5pbmRleCA1MDAzODlmMzMyZDk5Li4xNjAyZWFiMDU3NjFmIDEwMDY0NFxcbi0tLSBhL2Jsb2NrL2Jpby5jXFxuKysrIGIvYmxvY2svYmlvLmNcXG5AQCAtMjI5LDcgKzIyOSw3IEBAIHZvaWQgYmlvX2luaXQoc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBzdHJ1Y3QgYmlvX3ZlYyAqdGFibGUsXFxuIFxcdGJpby1cXHUwMDNlYmlfaXRlci5iaV9zZWN0b3IgPSAwO1xcbiBcXHRiaW8tXFx1MDAzZWJpX2l0ZXIuYmlfc2l6ZSA9IDA7XFxuIFxcdGJpby1cXHUwMDNlYmlfaXRlci5iaV9pZHggPSAwO1xcbi1cXHRiaW8tXFx1MDAzZWJpX2l0ZXIuYmlfYnZlY19kb25lID0gMDtcXG4rXFx0YmlvLVxcdTAwM2ViaV9pdGVyLmJpX29mZnNldCA9IDA7XFxuIFxcdGJpby1cXHUwMDNlYmlfZW5kX2lvID0gTlVMTDtcXG4gXFx0YmlvLVxcdTAwM2ViaV9wcml2YXRlID0gTlVMTDtcXG4gI2lmZGVmIENPTkZJR19CTEtfQ0dST1VQXFxuQEAgLTg2MSw2ICs4NjEsMTEgQEAgc3RhdGljIGludCBfX2Jpb19jbG9uZShzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBiaW8gKmJpb19zcmMsIGdmcF90IGdmcClcXG4gXFx0YmlvLVxcdTAwM2ViaV93cml0ZV9zdHJlYW0gPSBiaW9fc3JjLVxcdTAwM2ViaV93cml0ZV9zdHJlYW07XFxuIFxcdGJpby1cXHUwMDNlYmlfaXRlciA9IGJpb19zcmMtXFx1MDAzZWJpX2l0ZXI7XFxuIFxcbitcXHRpZiAob3BfaXNfZG1hYnVmKGJpby1cXHUwMDNlYmlfb3BmKSlcXG4rXFx0XFx0YmlvLVxcdTAwM2ViaV9kbWFidWZfbWFwID0gYmlvX3NyYy1cXHUwMDNlYmlfZG1hYnVmX21hcDtcXG4rXFx0ZWxzZVxcbitcXHRcXHRiaW8tXFx1MDAzZWJpX2lvX3ZlYyA9IGJpb19zcmMtXFx1MDAzZWJpX2lvX3ZlYztcXG4rXFxuIFxcdGlmIChiaW8tXFx1MDAzZWJpX2JkZXYpIHtcXG4gXFx0XFx0aWYgKGJpby1cXHUwMDNlYmlfYmRldiA9PSBiaW9fc3JjLVxcdTAwM2ViaV9iZGV2IFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdCAgICBiaW9fZmxhZ2dlZChiaW9fc3JjLCBCSU9fUkVNQVBQRUQpKVxcbkBAIC05MDIsOCArOTA3LDYgQEAgc3RydWN0IGJpbyAqYmlvX2FsbG9jX2Nsb25lKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHN0cnVjdCBiaW8gKmJpb19zcmMsXFxuIFxcdFxcdGJpb19wdXQoYmlvKTtcXG4gXFx0XFx0cmV0dXJuIE5VTEw7XFxuIFxcdH1cXG4tXFx0YmlvLVxcdTAwM2ViaV9pb192ZWMgPSBiaW9fc3JjLVxcdTAwM2ViaV9pb192ZWM7XFxuLVxcbiBcXHRyZXR1cm4gYmlvO1xcbiB9XFxuIEVYUE9SVF9TWU1CT0woYmlvX2FsbG9jX2Nsb25lKTtcXG5AQCAtOTIzLDcgKzkyNiw3IEBAIGludCBiaW9faW5pdF9jbG9uZShzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBzdHJ1Y3QgYmlvICpiaW8sXFxuIHtcXG4gXFx0aW50IHJldDtcXG4gXFxuLVxcdGJpb19pbml0KGJpbywgYmRldiwgYmlvX3NyYy1cXHUwMDNlYmlfaW9fdmVjLCAwLCBiaW9fc3JjLVxcdTAwM2ViaV9vcGYpO1xcbitcXHRiaW9faW5pdChiaW8sIGJkZXYsIE5VTEwsIDAsIGJpb19zcmMtXFx1MDAzZWJpX29wZik7XFxuIFxcdHJldCA9IF9fYmlvX2Nsb25lKGJpbywgYmlvX3NyYywgZ2ZwKTtcXG4gXFx0aWYgKHJldClcXG4gXFx0XFx0YmlvX3VuaW5pdChiaW8pO1xcbkBAIC0xMTgyLDE1ICsxMTg1LDI2IEBAIHZvaWQgX19iaW9fcmVsZWFzZV9wYWdlcyhzdHJ1Y3QgYmlvICpiaW8sIGJvb2wgbWFya19kaXJ0eSlcXG4gfVxcbiBFWFBPUlRfU1lNQk9MX0dQTChfX2Jpb19yZWxlYXNlX3BhZ2VzKTtcXG4gXFxuLXZvaWQgYmlvX2lvdl9idmVjX3NldChzdHJ1Y3QgYmlvICpiaW8sIGNvbnN0IHN0cnVjdCBpb3ZfaXRlciAqaXRlcilcXG4rYm9vbCBiaW9faW92X2l0ZXJfc2V0KHN0cnVjdCBiaW8gKmJpbywgY29uc3Qgc3RydWN0IGlvdl9pdGVyICppdGVyKVxcbiB7XFxuK1xcdGlmICghaW92X2l0ZXJfaXNfYnZlYyhpdGVyKSBcXHUwMDI2XFx1MDAyNiAhaW92X2l0ZXJfaXNfZG1hYnVmX21hcChpdGVyKSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4gXFx0V0FSTl9PTl9PTkNFKGJpby1cXHUwMDNlYmlfbWF4X3ZlY3MpO1xcbiBcXG4rXFx0c3RhdGljX2Fzc2VydChvZmZzZXRvZihzdHJ1Y3QgYmlvLCBiaV9pb192ZWMpID09XFxuK1xcdFxcdCAgICAgIG9mZnNldG9mKHN0cnVjdCBiaW8sIGJpX2RtYWJ1Zl9tYXApKTtcXG4rXFx0c3RhdGljX2Fzc2VydChvZmZzZXRvZihzdHJ1Y3QgaW92X2l0ZXIsIGJ2ZWMpID09XFxuK1xcdFxcdCAgICAgIG9mZnNldG9mKHN0cnVjdCBpb3ZfaXRlciwgZG1hYnVmX21hcCkpO1xcbitcXG4gXFx0YmlvLVxcdTAwM2ViaV9pb192ZWMgPSAoc3RydWN0IGJpb192ZWMgKilpdGVyLVxcdTAwM2VidmVjO1xcbiBcXHRiaW8tXFx1MDAzZWJpX2l0ZXIuYmlfaWR4ID0gMDtcXG4tXFx0YmlvLVxcdTAwM2ViaV9pdGVyLmJpX2J2ZWNfZG9uZSA9IGl0ZXItXFx1MDAzZWlvdl9vZmZzZXQ7XFxuK1xcdGJpby1cXHUwMDNlYmlfaXRlci5iaV9vZmZzZXQgPSBpdGVyLVxcdTAwM2Vpb3Zfb2Zmc2V0O1xcbiBcXHRiaW8tXFx1MDAzZWJpX2l0ZXIuYmlfc2l6ZSA9IGlvdl9pdGVyX2NvdW50KGl0ZXIpO1xcbiBcXHRiaW9fc2V0X2ZsYWcoYmlvLCBCSU9fQ0xPTkVEKTtcXG4rXFx0aWYgKGlvdl9pdGVyX2lzX2RtYWJ1Zl9tYXAoaXRlcikpXFxuK1xcdFxcdGJpby1cXHUwMDNlYmlfb3BmIHw9IFJFUV9OT01FUkdFIHwgUkVRX0RNQUJVRjtcXG4rXFx0cmV0dXJuIHRydWU7XFxuIH1cXG4gXFxuIC8qXFxuQEAgLTEyODUsMTAgKzEyOTksOSBAQCBpbnQgYmlvX2lvdl9pdGVyX2dldF9wYWdlcyhzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcXG4gXFx0aWYgKFdBUk5fT05fT05DRShiaW9fZmxhZ2dlZChiaW8sIEJJT19DTE9ORUQpKSlcXG4gXFx0XFx0cmV0dXJuIC1FSU87XFxuIFxcbi1cXHRpZiAoaW92X2l0ZXJfaXNfYnZlYyhpdGVyKSkge1xcbi1cXHRcXHRiaW9faW92X2J2ZWNfc2V0KGJpbywgaXRlcik7XFxuLVxcbi1cXHRcXHRpZiAoIWJpb19pb3ZfYnZlY19hbGlnbmVkKGJpbywgbWVtX2FsaWduX21hc2spKVxcbitcXHRpZiAoYmlvX2lvdl9pdGVyX3NldChiaW8sIGl0ZXIpKSB7XFxuK1xcdFxcdGlmIChpb3ZfaXRlcl9pc19idmVjKGl0ZXIpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICAhYmlvX2lvdl9idmVjX2FsaWduZWQoYmlvLCBtZW1fYWxpZ25fbWFzaykpXFxuIFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4gXFx0XFx0aW92X2l0ZXJfYWR2YW5jZShpdGVyLCBiaW8tXFx1MDAzZWJpX2l0ZXIuYmlfc2l6ZSk7XFxuZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay1tYXAuYyBiL2Jsb2NrL2Jsay1tYXAuY1xcbmluZGV4IDYxNWQyOWJiODQwZWIuLjljYjk2MDVkMWY2MmQgMTAwNjQ0XFxuLS0tIGEvYmxvY2svYmxrLW1hcC5jXFxuKysrIGIvYmxvY2svYmxrLW1hcC5jXFxuQEAgLTQ3Myw3ICs0NzMsNyBAQCBzdGF0aWMgaW50IGJsa19ycV9tYXBfdXNlcl9idmVjKHN0cnVjdCByZXF1ZXN0ICpycSwgY29uc3Qgc3RydWN0IGlvdl9pdGVyICppdGVyKVxcbiBcXHRiaW8gPSBibGtfcnFfbWFwX2Jpb19hbGxvYyhycSwgMCwgR0ZQX0tFUk5FTCk7XFxuIFxcdGlmICghYmlvKVxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4tXFx0YmlvX2lvdl9idmVjX3NldChiaW8sIGl0ZXIpO1xcbitcXHRiaW9faW92X2l0ZXJfc2V0KGJpbywgaXRlcik7XFxuIFxcbiBcXHRyZXQgPSBibGtfcnFfYXBwZW5kX2JpbyhycSwgYmlvKTtcXG4gXFx0aWYgKHJldClcXG5kaWZmIC0tZ2l0IGEvYmxvY2svYmxrLW1lcmdlLmMgYi9ibG9jay9ibGstbWVyZ2UuY1xcbmluZGV4IGFiMTE2MWNhNjlmMWUuLjFiZWVkYzQyYTg1ZDUgMTAwNjQ0XFxuLS0tIGEvYmxvY2svYmxrLW1lcmdlLmNcXG4rKysgYi9ibG9jay9ibGstbWVyZ2UuY1xcbkBAIC05LDYgKzksNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvYmxrLWludGVncml0eS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcGFydF9zdGF0LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9ibGstY2dyb3VwLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9kbWEtYnVmLWlvLmhcXHUwMDNlXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjdHJhY2UvZXZlbnRzL2Jsb2NrLmhcXHUwMDNlXFxuIFxcbkBAIC0zMyw3ICszNCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBiaW9fZ2V0X2xhc3RfYnZlYyhzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBiaW9fdmVjICpidilcXG4gXFxuIFxcdGJpb19hZHZhbmNlX2l0ZXIoYmlvLCBcXHUwMDI2aXRlciwgaXRlci5iaV9zaXplKTtcXG4gXFxuLVxcdGlmICghaXRlci5iaV9idmVjX2RvbmUpXFxuK1xcdGlmICghaXRlci5iaV9vZmZzZXQpXFxuIFxcdFxcdGlkeCA9IGl0ZXIuYmlfaWR4IC0gMTtcXG4gXFx0ZWxzZVxcdC8qIGluIHRoZSBtaWRkbGUgb2YgYnZlYyAqL1xcbiBcXHRcXHRpZHggPSBpdGVyLmJpX2lkeDtcXG5AQCAtNDEsMTEgKzQyLDExIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBiaW9fZ2V0X2xhc3RfYnZlYyhzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBiaW9fdmVjICpidilcXG4gXFx0KmJ2ID0gYmlvLVxcdTAwM2ViaV9pb192ZWNbaWR4XTtcXG4gXFxuIFxcdC8qXFxuLVxcdCAqIGl0ZXIuYmlfYnZlY19kb25lIHJlY29yZHMgYWN0dWFsIGxlbmd0aCBvZiB0aGUgbGFzdCBidmVjXFxuK1xcdCAqIGl0ZXIuYmlfb2Zmc2V0IHJlY29yZHMgYWN0dWFsIGxlbmd0aCBvZiB0aGUgbGFzdCBidmVjXFxuIFxcdCAqIGlmIHRoaXMgYmlvIGVuZHMgaW4gdGhlIG1pZGRsZSBvZiBvbmUgaW8gdmVjdG9yXFxuIFxcdCAqL1xcbi1cXHRpZiAoaXRlci5iaV9idmVjX2RvbmUpXFxuLVxcdFxcdGJ2LVxcdTAwM2Vidl9sZW4gPSBpdGVyLmJpX2J2ZWNfZG9uZTtcXG4rXFx0aWYgKGl0ZXIuYmlfb2Zmc2V0KVxcbitcXHRcXHRidi1cXHUwMDNlYnZfbGVuID0gaXRlci5iaV9vZmZzZXQ7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBiaW9fd2lsbF9nYXAoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsXFxuQEAgLTMxOSw2ICszMjAsMjggQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgYnZlY19zZWdfZ2FwKHN0cnVjdCBiaW9fdmVjICpidnBydixcXG4gXFx0cmV0dXJuIGJ2LVxcdTAwM2Vidl9vZmZzZXQgfCAoYnZwcnYtXFx1MDAzZWJ2X29mZnNldCArIGJ2cHJ2LVxcdTAwM2Vidl9sZW4pO1xcbiB9XFxuIFxcbitzdGF0aWMgaW5saW5lIGludCBiaW9fc3BsaXRfaW9fYXRfZG1hYnVmKHN0cnVjdCBiaW8gKmJpbyxcXG4rXFx0XFx0Y29uc3Qgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltLCB1bnNpZ25lZCAqc2VncyxcXG4rXFx0XFx0dW5zaWduZWQgbWF4X2J5dGVzLCB1bnNpZ25lZCBsZW5fYWxpZ25fbWFzayxcXG4rXFx0XFx0dW5zaWduZWQgc3RhcnRfYWxpZ25fbWFzaylcXG4re1xcbitcXHR1bnNpZ25lZCBieXRlcyA9IG1pbihiaW8tXFx1MDAzZWJpX2l0ZXIuYmlfc2l6ZSwgbWF4X2J5dGVzKTtcXG4rXFx0dW5zaWduZWQgc2VnX3NoaWZ0ID0gYmlvLVxcdTAwM2ViaV9kbWFidWZfbWFwLVxcdTAwM2VzZWdfc2hpZnQ7XFxuK1xcdHVuc2lnbmVkIG9mZnNldCA9IGJpby1cXHUwMDNlYmlfaXRlci5iaV9vZmZzZXQgXFx1MDAyNiAoKDFVIFxcdTAwM2NcXHUwMDNjIHNlZ19zaGlmdCkgLSAxKTtcXG4rXFxuK1xcdGlmICgoYmlvLVxcdTAwM2ViaV9pdGVyLmJpX29mZnNldCBcXHUwMDI2IHN0YXJ0X2FsaWduX21hc2spIHx8XFxuK1xcdCAgICAoYmlvLVxcdTAwM2ViaV9pdGVyLmJpX3NpemUgXFx1MDAyNiBsZW5fYWxpZ25fbWFzaykpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0Lyogc2luZ2xlIGNvbnRpZ3VvdXMgcmFuZ2UgaW50byB0aGUgZG1hLWJ1ZiAqL1xcbitcXHQqc2VncyA9IDE7XFxuK1xcbitcXHRieXRlcyA9IG1pbihieXRlcywgKCh1bnNpZ25lZClsaW0tXFx1MDAzZW1heF9zZWdtZW50cyBcXHUwMDNjXFx1MDAzYyBzZWdfc2hpZnQpIC0gb2Zmc2V0KTtcXG4rXFx0aWYgKGJ5dGVzICE9IGJpby1cXHUwMDNlYmlfaXRlci5iaV9zaXplKVxcbitcXHRcXHRyZXR1cm4gYnl0ZXM7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiAvKipcXG4gICogYmlvX3NwbGl0X2lvX2F0IC0gY2hlY2sgaWYgYW5kIHdoZXJlIHRvIHNwbGl0IGEgYmlvXFxuICAqIEBiaW86ICBbaW5dIGJpbyB0byBiZSBzcGxpdFxcbkBAIC0zNDYsNiArMzY5LDE5IEBAIGludCBiaW9fc3BsaXRfaW9fYXQoc3RydWN0IGJpbyAqYmlvLCBjb25zdCBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0sXFxuIFxcdFxcdGxlbl9hbGlnbl9tYXNrIHw9IChiYy1cXHUwMDNlYmNfa2V5LVxcdTAwM2VjcnlwdG9fY2ZnLmRhdGFfdW5pdF9zaXplIC0gMSk7XFxuIFxcdH1cXG4gXFxuK1xcdGlmIChvcF9pc19kbWFidWYoYmlvLVxcdTAwM2ViaV9vcGYpKSB7XFxuK1xcdFxcdGludCByZXQ7XFxuK1xcbitcXHRcXHRyZXQgPSBiaW9fc3BsaXRfaW9fYXRfZG1hYnVmKGJpbywgbGltLCBcXHUwMDI2bnNlZ3MsIG1heF9ieXRlcyxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBsZW5fYWxpZ25fbWFzaywgc3RhcnRfYWxpZ25fbWFzayk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRcXHRpZiAoIXJldClcXG4rXFx0XFx0XFx0Z290byBvdXQ7XFxuK1xcdFxcdGJ5dGVzID0gcmV0O1xcbitcXHRcXHRnb3RvIHNwbGl0O1xcbitcXHR9XFxuK1xcbiBcXHRiaW9fZm9yX2VhY2hfYnZlYyhidiwgYmlvLCBpdGVyKSB7XFxuIFxcdFxcdGlmIChidi5idl9vZmZzZXQgXFx1MDAyNiBzdGFydF9hbGlnbl9tYXNrIHx8XFxuIFxcdFxcdCAgICBidi5idl9sZW4gXFx1MDAyNiBsZW5fYWxpZ25fbWFzaylcXG5AQCAtMzc2LDYgKzQxMiw3IEBAIGludCBiaW9fc3BsaXRfaW9fYXQoc3RydWN0IGJpbyAqYmlvLCBjb25zdCBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0sXFxuIFxcdFxcdGJ2cHJ2cCA9IFxcdTAwMjZidnBydjtcXG4gXFx0fVxcbiBcXG4rb3V0OlxcbiBcXHQqc2VncyA9IG5zZWdzO1xcbiBcXHRiaW8tXFx1MDAzZWJpX2J2ZWNfZ2FwX2JpdCA9IGZmcyhnYXBzKTtcXG4gXFx0cmV0dXJuIDA7XFxuZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay1tcS1kbWEuYyBiL2Jsb2NrL2Jsay1tcS1kbWEuY1xcbmluZGV4IGJmZGI5ZWQ3MDc0MTEuLjg4ZmQ5Y2JjOTUxZjQgMTAwNjQ0XFxuLS0tIGEvYmxvY2svYmxrLW1xLWRtYS5jXFxuKysrIGIvYmxvY2svYmxrLW1xLWRtYS5jXFxuQEAgLTQ0LDcgKzQ0LDcgQEAgc3RhdGljIGJvb2wgYmxrX21hcF9pdGVyX25leHQoc3RydWN0IHJlcXVlc3QgKnJlcSwgc3RydWN0IGJsa19tYXBfaXRlciAqaXRlcixcXG4gXFx0ICogb25lIGNvdWxkIGJlIG1lcmdlZCBpbnRvIGl0LiAgVGhpcyB0eXBpY2FsbHkgaGFwcGVucyB3aGVuIG1vdmluZyB0b1xcbiBcXHQgKiB0aGUgbmV4dCBiaW8sIGJ1dCBzb21lIGNhbGxlcnMgYWxzbyBkb24ndCBwYWNrIGJ2ZWNzIHRpZ2h0LlxcbiBcXHQgKi9cXG4tXFx0d2hpbGUgKCFpdGVyLVxcdTAwM2VpdGVyLmJpX3NpemUgfHwgIWl0ZXItXFx1MDAzZWl0ZXIuYmlfYnZlY19kb25lKSB7XFxuK1xcdHdoaWxlICghaXRlci1cXHUwMDNlaXRlci5iaV9zaXplIHx8ICFpdGVyLVxcdTAwM2VpdGVyLmJpX29mZnNldCkge1xcbiBcXHRcXHRzdHJ1Y3QgYmlvX3ZlYyBuZXh0O1xcbiBcXG4gXFx0XFx0aWYgKCFfX2Jsa19tYXBfaXRlcl9uZXh0KGl0ZXIpKVxcbmRpZmYgLS1naXQgYS9ibG9jay9ibGsuaCBiL2Jsb2NrL2Jsay5oXFxuaW5kZXggZWFhYzA1ODE1Y2IwMy4uNTBhYmZkOTMyODg2MSAxMDA2NDRcXG4tLS0gYS9ibG9jay9ibGsuaFxcbisrKyBiL2Jsb2NrL2Jsay5oXFxuQEAgLTQwNiw3ICs0MDYsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgYmlvX21heV9uZWVkX3NwbGl0KHN0cnVjdCBiaW8gKmJpbyxcXG4gXFx0XFx0cmV0dXJuIHRydWU7XFxuIFxcbiBcXHRidiA9IF9fYnZlY19pdGVyX2J2ZWMoYmlvLVxcdTAwM2ViaV9pb192ZWMsIGJpby1cXHUwMDNlYmlfaXRlcik7XFxuLVxcdGlmIChiaW8tXFx1MDAzZWJpX2l0ZXIuYmlfc2l6ZSBcXHUwMDNlIGJ2LVxcdTAwM2Vidl9sZW4gLSBiaW8tXFx1MDAzZWJpX2l0ZXIuYmlfYnZlY19kb25lKVxcbitcXHRpZiAoYmlvLVxcdTAwM2ViaV9pdGVyLmJpX3NpemUgXFx1MDAzZSBidi1cXHUwMDNlYnZfbGVuIC0gYmlvLVxcdTAwM2ViaV9pdGVyLmJpX29mZnNldClcXG4gXFx0XFx0cmV0dXJuIHRydWU7XFxuIFxcdGlmICgoYnYtXFx1MDAzZWJ2X29mZnNldCB8IGJ2LVxcdTAwM2Vidl9sZW4pIFxcdTAwMjYgbGltLVxcdTAwM2VkbWFfYWxpZ25tZW50KVxcbiBcXHRcXHRyZXR1cm4gdHJ1ZTtcXG5kaWZmIC0tZ2l0IGEvYmxvY2svZm9wcy5jIGIvYmxvY2svZm9wcy5jXFxuaW5kZXggM2MyMDk5ZGZlZjFkNS4uM2M0MDNhZmIwZjY0NiAxMDA2NDRcXG4tLS0gYS9ibG9jay9mb3BzLmNcXG4rKysgYi9ibG9jay9mb3BzLmNcXG5AQCAtMzQyLDE1ICszNDIsMTMgQEAgc3RhdGljIHNzaXplX3QgX19ibGtkZXZfZGlyZWN0X0lPX2FzeW5jKHN0cnVjdCBraW9jYiAqaW9jYixcXG4gXFx0YmlvLVxcdTAwM2ViaV9lbmRfaW8gPSBibGtkZXZfYmlvX2VuZF9pb19hc3luYztcXG4gXFx0YmlvLVxcdTAwM2ViaV9pb3ByaW8gPSBpb2NiLVxcdTAwM2VraV9pb3ByaW87XFxuIFxcbi1cXHRpZiAoaW92X2l0ZXJfaXNfYnZlYyhpdGVyKSkge1xcbi1cXHRcXHQvKlxcbi1cXHRcXHQgKiBVc2VycyBkb24ndCByZWx5IG9uIHRoZSBpdGVyYXRvciBiZWluZyBpbiBhbnkgcGFydGljdWxhclxcbi1cXHRcXHQgKiBzdGF0ZSBmb3IgYXN5bmMgSS9PIHJldHVybmluZyAtRUlPQ0JRVUVVRUQsIGhlbmNlIHdlIGNhblxcbi1cXHRcXHQgKiBhdm9pZCBleHBlbnNpdmUgaW92X2l0ZXJfYWR2YW5jZSgpLiBCeXBhc3NcXG4tXFx0XFx0ICogYmlvX2lvdl9pdGVyX2dldF9wYWdlcygpIGFuZCBzZXQgdGhlIGJ2ZWMgZGlyZWN0bHkuXFxuLVxcdFxcdCAqL1xcbi1cXHRcXHRiaW9faW92X2J2ZWNfc2V0KGJpbywgaXRlcik7XFxuLVxcdH0gZWxzZSB7XFxuK1xcdC8qXFxuK1xcdCAqIFVzZXJzIGRvbid0IHJlbHkgb24gdGhlIGl0ZXJhdG9yIGJlaW5nIGluIGFueSBwYXJ0aWN1bGFyXFxuK1xcdCAqIHN0YXRlIGZvciBhc3luYyBJL08gcmV0dXJuaW5nIC1FSU9DQlFVRVVFRCwgaGVuY2Ugd2UgY2FuXFxuK1xcdCAqIGF2b2lkIGV4cGVuc2l2ZSBpb3ZfaXRlcl9hZHZhbmNlKCkuIEJ5cGFzc1xcbitcXHQgKiBiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzKCkgYW5kIHNldCB0aGUgYnZlYy9kbWFidWYgZGlyZWN0bHkuXFxuK1xcdCAqL1xcbitcXHRpZiAoIWJpb19pb3ZfaXRlcl9zZXQoYmlvLCBpdGVyKSkge1xcbiBcXHRcXHRyZXQgPSBibGtkZXZfaW92X2l0ZXJfZ2V0X3BhZ2VzKGJpbywgaXRlciwgYmRldik7XFxuIFxcdFxcdGlmICh1bmxpa2VseShyZXQpKVxcbiBcXHRcXHRcXHRnb3RvIG91dF9iaW9fcHV0O1xcbkBAIC03NjksNiArNzY3LDkgQEAgc3RhdGljIHNzaXplX3QgYmxrZGV2X3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXFxuIFxcdFxcdFxcdHJldCA9IGRpcmVjdF93cml0ZV9mYWxsYmFjayhpb2NiLCBmcm9tLCByZXQsXFxuIFxcdFxcdFxcdFxcdFxcdGJsa2Rldl9idWZmZXJlZF93cml0ZShpb2NiLCBmcm9tKSk7XFxuIFxcdH0gZWxzZSB7XFxuK1xcdFxcdGlmICh1bmxpa2VseShpb3ZfaXRlcl9pc19kbWFidWZfbWFwKGZyb20pKSlcXG4rXFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXG4gXFx0XFx0LypcXG4gXFx0XFx0ICogVGFrZSBpX3J3c2VtIGFuZCBpbnZhbGlkYXRlX2xvY2sgdG8gYXZvaWQgcmFjaW5nIHdpdGhcXG4gXFx0XFx0ICogc2V0X2Jsb2Nrc2l6ZSBjaGFuZ2luZyBpX2Jsa2JpdHMvZm9saW8gb3JkZXIgYW5kIHB1bmNoaW5nXFxuQEAgLTgyMyw2ICs4MjQsOCBAQCBzdGF0aWMgc3NpemVfdCBibGtkZXZfcmVhZF9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICp0bylcXG4gXFx0XFx0aWYgKHJldCBcXHUwMDNjIDAgfHwgIWNvdW50KVxcbiBcXHRcXHRcXHRnb3RvIHJlZXhwYW5kO1xcbiBcXHR9XFxuK1xcdGlmICh1bmxpa2VseShpb3ZfaXRlcl9pc19kbWFidWZfbWFwKHRvKSkpXFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4gXFxuIFxcdC8qXFxuIFxcdCAqIFRha2UgaV9yd3NlbSBhbmQgaW52YWxpZGF0ZV9sb2NrIHRvIGF2b2lkIHJhY2luZyB3aXRoIHNldF9ibG9ja3NpemVcXG5AQCAtOTI2LDYgKzkyOSwxOSBAQCBzdGF0aWMgaW50IGJsa2Rldl9tbWFwX3ByZXBhcmUoc3RydWN0IHZtX2FyZWFfZGVzYyAqZGVzYylcXG4gXFx0cmV0dXJuIGdlbmVyaWNfZmlsZV9tbWFwX3ByZXBhcmUoZGVzYyk7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgYmxrZGV2X2luaXRfZG1hX2J1Zl9pb19jdHgoc3RydWN0IGZpbGUgKmZpbGUsXFxuK1xcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBkbWFfYnVmX2lvX2N0eCAqY3R4KVxcbit7XFxuK1xcdHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYgPSBmaWxlX2JkZXYoZmlsZSk7XFxuK1xcdHN0cnVjdCBnZW5kaXNrICpkaXNrID0gYmRldi1cXHUwMDNlYmRfZGlzaztcXG4rXFxuK1xcdGlmICghKGZpbGUtXFx1MDAzZWZfZmxhZ3MgXFx1MDAyNiBPX0RJUkVDVCkpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRpZiAoIWRpc2stXFx1MDAzZWZvcHMtXFx1MDAzZWluaXRfZG1hX2J1Zl9pb19jdHgpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRyZXR1cm4gZGlzay1cXHUwMDNlZm9wcy1cXHUwMDNlaW5pdF9kbWFfYnVmX2lvX2N0eChiZGV2LCBjdHgpO1xcbit9XFxuK1xcbiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRlZl9ibGtfZm9wcyA9IHtcXG4gXFx0Lm9wZW5cXHRcXHQ9IGJsa2Rldl9vcGVuLFxcbiBcXHQucmVsZWFzZVxcdD0gYmxrZGV2X3JlbGVhc2UsXFxuQEAgLTk0NCw2ICs5NjAsNyBAQCBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRlZl9ibGtfZm9wcyA9IHtcXG4gXFx0LmZhbGxvY2F0ZVxcdD0gYmxrZGV2X2ZhbGxvY2F0ZSxcXG4gXFx0LnVyaW5nX2NtZFxcdD0gYmxrZGV2X3VyaW5nX2NtZCxcXG4gXFx0LmZvcF9mbGFnc1xcdD0gRk9QX0JVRkZFUl9SQVNZTkMgfCBGT1BfRE9OVENBQ0hFLFxcbitcXHQuaW5pdF9kbWFfYnVmX2lvX2N0eCA9IGJsa2Rldl9pbml0X2RtYV9idWZfaW9fY3R4LFxcbiB9O1xcbiBcXG4gc3RhdGljIF9faW5pdCBpbnQgYmxrZGV2X2luaXQodm9pZClcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9sb29wLmMgYi9kcml2ZXJzL2Jsb2NrL2xvb3AuY1xcbmluZGV4IDI2ZDcxMzBjM2Y1NTkuLjg2MzlmYTM0Yjg0NzAgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9ibG9jay9sb29wLmNcXG4rKysgYi9kcml2ZXJzL2Jsb2NrL2xvb3AuY1xcbkBAIC0zNzksNyArMzc5LDcgQEAgc3RhdGljIGludCBsb19yd19haW8oc3RydWN0IGxvb3BfZGV2aWNlICpsbywgc3RydWN0IGxvb3BfY21kICpjbWQsXFxuIFxcdFxcdGlvdl9pdGVyX2J2ZWMoXFx1MDAyNml0ZXIsIHJ3LFxcbiBcXHRcXHRcXHRfX2J2ZWNfaXRlcl9idmVjKHJxLVxcdTAwM2ViaW8tXFx1MDAzZWJpX2lvX3ZlYywgcnEtXFx1MDAzZWJpby1cXHUwMDNlYmlfaXRlciksXFxuIFxcdFxcdFxcdG5yX2J2ZWMsIGJsa19ycV9ieXRlcyhycSkpO1xcbi1cXHRcXHRpdGVyLmlvdl9vZmZzZXQgPSBycS1cXHUwMDNlYmlvLVxcdTAwM2ViaV9pdGVyLmJpX2J2ZWNfZG9uZTtcXG4rXFx0XFx0aXRlci5pb3Zfb2Zmc2V0ID0gcnEtXFx1MDAzZWJpby1cXHUwMDNlYmlfaXRlci5iaV9vZmZzZXQ7XFxuIFxcdH1cXG4gXFx0YXRvbWljX3NldChcXHUwMDI2Y21kLVxcdTAwM2VyZWYsIDIpO1xcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay96bG9vcC5jIGIvZHJpdmVycy9ibG9jay96bG9vcC5jXFxuaW5kZXggZjk3YTIwY2ZkYjdjZS4uMGZlZjVkYjhlNWI4MCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2Jsb2NrL3psb29wLmNcXG4rKysgYi9kcml2ZXJzL2Jsb2NrL3psb29wLmNcXG5AQCAtNTU0LDcgKzU1NCw3IEBAIHN0YXRpYyBpbnQgemxvb3BfZG9fcncoc3RydWN0IHpsb29wX2NtZCAqY21kKVxcbiBcXHRcXHRpb3ZfaXRlcl9idmVjKFxcdTAwMjZpdGVyLCBydyxcXG4gXFx0XFx0XFx0X19idmVjX2l0ZXJfYnZlYyhycS1cXHUwMDNlYmlvLVxcdTAwM2ViaV9pb192ZWMsIHJxLVxcdTAwM2ViaW8tXFx1MDAzZWJpX2l0ZXIpLFxcbiBcXHRcXHRcXHRcXHRcXHRucl9idmVjLCBibGtfcnFfYnl0ZXMocnEpKTtcXG4tXFx0XFx0aXRlci5pb3Zfb2Zmc2V0ID0gcnEtXFx1MDAzZWJpby1cXHUwMDNlYmlfaXRlci5iaV9idmVjX2RvbmU7XFxuK1xcdFxcdGl0ZXIuaW92X29mZnNldCA9IHJxLVxcdTAwM2ViaW8tXFx1MDAzZWJpX2l0ZXIuYmlfb2Zmc2V0O1xcbiBcXHR9XFxuIFxcbiBcXHRjbWQtXFx1MDAzZWlvY2Iua2lfcG9zID0gKGNtZC1cXHUwMDNlc2VjdG9yIC0gem9uZS1cXHUwMDNlc3RhcnQpIFxcdTAwM2NcXHUwMDNjIFNFQ1RPUl9TSElGVDtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEtYnVmL01ha2VmaWxlIGIvZHJpdmVycy9kbWEtYnVmL01ha2VmaWxlXFxuaW5kZXggYjI1ZDc1NTBiYWNmZC4uNTIzNzMxYjBmODNlZSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2RtYS1idWYvTWFrZWZpbGVcXG4rKysgYi9kcml2ZXJzL2RtYS1idWYvTWFrZWZpbGVcXG5AQCAtMSw2ICsxLDYgQEBcXG4gIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuIG9iai15IDo9IGRtYS1idWYubyBkbWEtZmVuY2UubyBkbWEtZmVuY2UtYXJyYXkubyBkbWEtZmVuY2UtY2hhaW4ubyBcXFxcXFxuLVxcdCBkbWEtZmVuY2UtdW53cmFwLm8gZG1hLXJlc3YubyBkbWEtYnVmLW1hcHBpbmcub1xcbitcXHQgZG1hLWZlbmNlLXVud3JhcC5vIGRtYS1yZXN2Lm8gZG1hLWJ1Zi1tYXBwaW5nLm8gZG1hLWJ1Zi1pby5vXFxuIG9iai0kKENPTkZJR19ETUFCVUZfSEVBUFMpXFx0Kz0gZG1hLWhlYXAub1xcbiBvYmotJChDT05GSUdfRE1BQlVGX0hFQVBTKVxcdCs9IGhlYXBzL1xcbiBvYmotJChDT05GSUdfU1lOQ19GSUxFKVxcdFxcdCs9IHN5bmNfZmlsZS5vXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hLWJ1Zi9kbWEtYnVmLWlvLmMgYi9kcml2ZXJzL2RtYS1idWYvZG1hLWJ1Zi1pby5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi4yNGY1OGY4MGM0NWM0XFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2RyaXZlcnMvZG1hLWJ1Zi9kbWEtYnVmLWlvLmNcXG5AQCAtMCwwICsxLDI3OCBAQFxcbisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xcbisvKlxcbisgKiBDb21tb24gaW5mcmFzdHJ1Y3R1cmUgZm9yIHN1cHBvcmluZyBkbWEtYnVmIGluIHRoZSBJL08gcGF0aC5cXG4rICpcXG4rICogQ29weXJpZ2h0IChDKSAyMDI2IFBhdmVsIEJlZ3Vua292IFxcdTAwM2Nhc21sLnNpbGVuY2VAZ21haWwuY29tXFx1MDAzZVxcbisgKi9cXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RtYS1idWYtaW8uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RtYS1yZXN2LmhcXHUwMDNlXFxuK1xcbitzdHJ1Y3QgZG1hX2J1Zl9pb19mZW5jZSB7XFxuK1xcdHN0cnVjdCBkbWFfZmVuY2UgYmFzZTtcXG4rXFx0c3BpbmxvY2tfdCBsb2NrO1xcbit9O1xcbitcXG4rc3RhdGljIGNvbnN0IGNoYXIgKmRtYV9idWZfaW9fZmVuY2VfZHJ2X25hbWUoc3RydWN0IGRtYV9mZW5jZSAqZmVuY2UpXFxuK3tcXG4rXFx0LyogZGVmYXVsdCBmZW5jZSByZWxlYXNlIGtmcmVlJ3MgdGhlIGJhc2UgcG9pbnRlciAqL1xcbitcXHRCVUlMRF9CVUdfT04ob2Zmc2V0b2Yoc3RydWN0IGRtYV9idWZfaW9fZmVuY2UsIGJhc2UpKTtcXG4rXFxuK1xcdHJldHVybiBcXFwiZG1hLWJ1Zi1pby1jdHhcXFwiO1xcbit9XFxuK1xcbitzdGF0aWMgY29uc3QgY2hhciAqZG1hX2J1Zl9pb19mZW5jZV90aW1lbGluZV9uYW1lKHN0cnVjdCBkbWFfZmVuY2UgKmZlbmNlKVxcbit7XFxuK1xcdHJldHVybiBcXFwiZG1hLWJ1Zi1pby1jdHhcXFwiO1xcbit9XFxuK1xcbitjb25zdCBzdHJ1Y3QgZG1hX2ZlbmNlX29wcyBkbWFfYnVmX2lvX2ZlbmNlX29wcyA9IHtcXG4rXFx0LmdldF9kcml2ZXJfbmFtZSA9IGRtYV9idWZfaW9fZmVuY2VfZHJ2X25hbWUsXFxuK1xcdC5nZXRfdGltZWxpbmVfbmFtZSA9IGRtYV9idWZfaW9fZmVuY2VfdGltZWxpbmVfbmFtZSxcXG4rfTtcXG4rXFxuK3N0YXRpYyB2b2lkIGRtYV9idWZfaW9fY3R4X2Rlc3Ryb3lfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuK3tcXG4rXFx0c3RydWN0IGRtYV9idWZfaW9fY3R4ICpjdHggPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGRtYV9idWZfaW9fY3R4LFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgIHJlbGVhc2Vfd29yayk7XFxuK1xcbitcXHRpZiAoV0FSTl9PTl9PTkNFKHJlZmNvdW50X3JlYWQoXFx1MDAyNmN0eC1cXHUwMDNlcmVmcykpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRjdHgtXFx1MDAzZWRldl9vcHMtXFx1MDAzZXJlbGVhc2UoY3R4KTtcXG4rXFx0ZG1hX2J1Zl9wdXQoY3R4LVxcdTAwM2VkbWFidWYpO1xcbitcXHRrZnJlZShjdHgpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBkbWFfYnVmX2lvX21hcF9yZWxlYXNlX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbit7XFxuK1xcdHN0cnVjdCBkbWFfYnVmX2lvX21hcCAqbWFwID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBkbWFfYnVmX2lvX21hcCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICByZWxlYXNlX3dvcmspO1xcbitcXHRzdHJ1Y3QgZG1hX2J1Zl9pb19mZW5jZSAqZmVuY2UgPSBtYXAtXFx1MDAzZWZlbmNlO1xcbitcXHRzdHJ1Y3QgZG1hX2J1Zl9pb19jdHggKmN0eCA9IG1hcC1cXHUwMDNlY3R4O1xcbitcXHRzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmID0gY3R4LVxcdTAwM2VkbWFidWY7XFxuK1xcbitcXHQvKiB0aGUgcmVsZWFzZSBwYXRoIG11c3Qgd2FpdCBmb3IgZmVuY2VzICovXFxuK1xcdGlmIChXQVJOX09OX09OQ0UocmVmY291bnRfcmVhZChcXHUwMDI2Y3R4LVxcdTAwM2VyZWZzKSA9PSAwKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0LyogUHJldmVudCBmcm9tIGRlc3RveWluZyB0aGUgY3R4IHdoaWxlIHVubWFwcGluZyAqL1xcbitcXHRyZWZjb3VudF9pbmMoXFx1MDAyNmN0eC1cXHUwMDNlcmVmcyk7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBUaGVyZSBhcmUgbm8gbW9yZSByZXF1ZXN0cyB1c2luZyB0aGUgbWFwLCB3ZSBjYW4gc2lnbmFsIHRoZSBmZW5jZS5cXG4rXFx0ICogSXQgc2hvdWxkIGJlIGRvbmUgYmVmb3JlIHRha2luZyB0aGUgcmVzdiBsb2NrIGFzIHNvbWVvbmUgY291bGQgYmVcXG4rXFx0ICogd2FpdGluZyBmb3IgdGhlIGZlbmNlIHdoaWxlIGhvbGRpbmcgdGhlIGxvY2suXFxuK1xcdCAqL1xcbitcXHRkbWFfZmVuY2Vfc2lnbmFsKFxcdTAwMjZmZW5jZS1cXHUwMDNlYmFzZSk7XFxuK1xcbitcXHRkbWFfcmVzdl9sb2NrKGRtYWJ1Zi1cXHUwMDNlcmVzdiwgTlVMTCk7XFxuK1xcdGN0eC1cXHUwMDNlZGV2X29wcy1cXHUwMDNldW5tYXAoY3R4LCBtYXApO1xcbitcXHRkbWFfcmVzdl91bmxvY2soZG1hYnVmLVxcdTAwM2VyZXN2KTtcXG4rXFxuK1xcdGRtYV9mZW5jZV9wdXQoXFx1MDAyNmZlbmNlLVxcdTAwM2ViYXNlKTtcXG4rXFx0cGVyY3B1X3JlZl9leGl0KFxcdTAwMjZtYXAtXFx1MDAzZXJlZnMpO1xcbitcXHRrZnJlZShtYXApO1xcbitcXG4rXFx0aWYgKHJlZmNvdW50X2RlY19hbmRfdGVzdChcXHUwMDI2Y3R4LVxcdTAwM2VyZWZzKSkge1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBEZXN0cnVjdGlvbiBuZWVkcyB0byB3YWl0IGZvciBJL08gYW5kIGRtYSBmZW5jZXMuIERlZmVyIGl0IHRvXFxuK1xcdFxcdCAqIHNpbXBsaWZ5IGxvY2tpbmcuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRJTklUX1dPUksoXFx1MDAyNmN0eC1cXHUwMDNlcmVsZWFzZV93b3JrLCBkbWFfYnVmX2lvX2N0eF9kZXN0cm95X3dvcmspO1xcbitcXHRcXHRxdWV1ZV93b3JrKHN5c3RlbV93cSwgXFx1MDAyNmN0eC1cXHUwMDNlcmVsZWFzZV93b3JrKTtcXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBkbWFfYnVmX2lvX21hcF9yZWZzX3JlbGVhc2Uoc3RydWN0IHBlcmNwdV9yZWYgKnJlZilcXG4re1xcbitcXHRzdHJ1Y3QgZG1hX2J1Zl9pb19tYXAgKm1hcCA9IGNvbnRhaW5lcl9vZihyZWYsIHN0cnVjdCBkbWFfYnVmX2lvX21hcCwgcmVmcyk7XFxuK1xcbitcXHQvKiBtaWdodCBzbGVlcCwgdXNlIGEgd29ya2VyICovXFxuK1xcdElOSVRfV09SSyhcXHUwMDI2bWFwLVxcdTAwM2VyZWxlYXNlX3dvcmssIGRtYV9idWZfaW9fbWFwX3JlbGVhc2Vfd29yayk7XFxuK1xcdHF1ZXVlX3dvcmsoc3lzdGVtX3dxLCBcXHUwMDI2bWFwLVxcdTAwM2VyZWxlYXNlX3dvcmspO1xcbit9XFxuK1xcbitpbnQgZG1hX2J1Zl9pb19pbml0X21hcChzdHJ1Y3QgZG1hX2J1Zl9pb19jdHggKmN0eCwgc3RydWN0IGRtYV9idWZfaW9fbWFwICptYXApXFxuK3tcXG4rXFx0c3RydWN0IGRtYV9idWZfaW9fZmVuY2UgKmZlbmNlID0gTlVMTDtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGZlbmNlID0ga3phbGxvYyhzaXplb2YoKmZlbmNlKSwgR0ZQX0tFUk5FTCk7XFxuK1xcdGlmICghZmVuY2UpXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXG4rXFx0cmV0ID0gcGVyY3B1X3JlZl9pbml0KFxcdTAwMjZtYXAtXFx1MDAzZXJlZnMsIGRtYV9idWZfaW9fbWFwX3JlZnNfcmVsZWFzZSwgMCwgR0ZQX0tFUk5FTCk7XFxuK1xcdGlmIChyZXQpIHtcXG4rXFx0XFx0a2ZyZWUoZmVuY2UpO1xcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHR9XFxuK1xcbitcXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2ZmVuY2UtXFx1MDAzZWxvY2spO1xcbitcXHRkbWFfZmVuY2VfaW5pdChcXHUwMDI2ZmVuY2UtXFx1MDAzZWJhc2UsIFxcdTAwMjZkbWFfYnVmX2lvX2ZlbmNlX29wcywgXFx1MDAyNmZlbmNlLVxcdTAwM2Vsb2NrLFxcbitcXHRcXHRcXHRjdHgtXFx1MDAzZWZlbmNlX2N0eCwgYXRvbWljX2luY19yZXR1cm4oXFx1MDAyNmN0eC1cXHUwMDNlZmVuY2Vfc2VxKSk7XFxuK1xcdG1hcC1cXHUwMDNlZmVuY2UgPSBmZW5jZTtcXG4rXFx0bWFwLVxcdTAwM2VjdHggPSBjdHg7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfTlNfR1BMKGRtYV9idWZfaW9faW5pdF9tYXAsIFxcXCJETUFfQlVGXFxcIik7XFxuK1xcbitzdHJ1Y3QgZG1hX2J1Zl9pb19tYXAgKmRtYV9idWZfaW9fY3JlYXRlX21hcChzdHJ1Y3QgZG1hX2J1Zl9pb19jdHggKmN0eClcXG4re1xcbitcXHRzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmID0gY3R4LVxcdTAwM2VkbWFidWY7XFxuK1xcdHN0cnVjdCBkbWFfYnVmX2lvX21hcCAqbWFwO1xcbitcXHRsb25nIHJldDtcXG4rXFxuK3JldHJ5OlxcbitcXHQvKlxcbitcXHQgKiAtXFx1MDAzZWRtYWJ1Zl9tYXAoKSB3aWxsIGJlIGNhbGxpbmcgZG1hX2J1Zl9tYXBfYXR0YWNobWVudCgpLCBmb3Igd2hpY2hcXG4rXFx0ICogd2UnbGwgbmVlZCB0byB3YWl0IGZvciBmZW5jZXMuIERvIGEgYml0IG5pY2VyIGFuZCB0cnkgdG8gd2FpdFxcbitcXHQgKiB3aXRob3V0IHRoZSByZXN2IGxvY2sgZmlyc3QuXFxuK1xcdCAqL1xcbitcXHRyZXQgPSBkbWFfcmVzdl93YWl0X3RpbWVvdXQoZG1hYnVmLVxcdTAwM2VyZXN2LCBETUFfUkVTVl9VU0FHRV9LRVJORUwsXFxuK1xcdFxcdFxcdFxcdCAgICB0cnVlLCBNQVhfU0NIRURVTEVfVElNRU9VVCk7XFxuK1xcdGlmICghcmV0KVxcbitcXHRcXHRyZXQgPSAtRUFHQUlOO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIEVSUl9QVFIocmV0KTtcXG4rXFxuK1xcdHJldCA9IGRtYV9yZXN2X2xvY2tfaW50ZXJydXB0aWJsZShkbWFidWYtXFx1MDAzZXJlc3YsIE5VTEwpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gRVJSX1BUUihyZXQpO1xcbitcXG4rXFx0bWFwID0gZG1hX2J1Zl9pb19nZXRfbWFwKGN0eCk7XFxuK1xcdGlmIChtYXApIHtcXG4rXFx0XFx0cmV0ID0gMDtcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChkbWFfcmVzdl93YWl0X3RpbWVvdXQoZG1hYnVmLVxcdTAwM2VyZXN2LCBETUFfUkVTVl9VU0FHRV9LRVJORUwsXFxuK1xcdFxcdFxcdFxcdCAgdHJ1ZSwgMCkgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdGRtYV9yZXN2X3VubG9jayhkbWFidWYtXFx1MDAzZXJlc3YpO1xcbitcXHRcXHRnb3RvIHJldHJ5O1xcbitcXHR9XFxuK1xcbitcXHRtYXAgPSBjdHgtXFx1MDAzZWRldl9vcHMtXFx1MDAzZW1hcChjdHgpO1xcbitcXHRpZiAoSVNfRVJSKG1hcCkpIHtcXG4rXFx0XFx0cmV0ID0gUFRSX0VSUihtYXApO1xcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKFdBUk5fT05fT05DRSghbWFwLVxcdTAwM2VzZWdfc2hpZnQpKVxcbitcXHRcXHRyZXR1cm4gRVJSX1BUUigtRUZBVUxUKTtcXG4rXFxuK1xcdHBlcmNwdV9yZWZfZ2V0KFxcdTAwMjZtYXAtXFx1MDAzZXJlZnMpO1xcbitcXHRyY3VfYXNzaWduX3BvaW50ZXIoY3R4LVxcdTAwM2VtYXAsIG1hcCk7XFxuK291dDpcXG4rXFx0ZG1hX3Jlc3ZfdW5sb2NrKGRtYWJ1Zi1cXHUwMDNlcmVzdik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gRVJSX1BUUihyZXQpO1xcbitcXHRyZXR1cm4gbWFwO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBkbWFfYnVmX2lvX2Ryb3BfbWFwKHN0cnVjdCBkbWFfYnVmX2lvX2N0eCAqY3R4KVxcbit7XFxuK1xcdHN0cnVjdCBkbWFfYnVmICpkbWFidWYgPSBjdHgtXFx1MDAzZWRtYWJ1ZjtcXG4rXFx0c3RydWN0IGRtYV9idWZfaW9fbWFwICptYXA7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRkbWFfcmVzdl9hc3NlcnRfaGVsZChkbWFidWYtXFx1MDAzZXJlc3YpO1xcbitcXG4rXFx0bWFwID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChjdHgtXFx1MDAzZW1hcCxcXG4rXFx0XFx0XFx0XFx0XFx0ZG1hX3Jlc3ZfaGVsZChkbWFidWYtXFx1MDAzZXJlc3YpKTtcXG4rXFx0aWYgKCFtYXApXFxuK1xcdFxcdHJldHVybjtcXG4rXFx0cmN1X2Fzc2lnbl9wb2ludGVyKGN0eC1cXHUwMDNlbWFwLCBOVUxMKTtcXG4rXFxuK1xcdHJldCA9IGRtYV9yZXN2X3Jlc2VydmVfZmVuY2VzKGRtYWJ1Zi1cXHUwMDNlcmVzdiwgMSk7XFxuK1xcdGlmIChXQVJOX09OX09OQ0UocmV0KSkge1xcbitcXHRcXHRzdHJ1Y3QgZG1hX2ZlbmNlICpmZW5jZSA9IFxcdTAwMjZtYXAtXFx1MDAzZWZlbmNlLVxcdTAwM2ViYXNlO1xcbitcXG4rXFx0XFx0ZG1hX2ZlbmNlX2dldChmZW5jZSk7XFxuK1xcdFxcdHBlcmNwdV9yZWZfa2lsbChcXHUwMDI2bWFwLVxcdTAwM2VyZWZzKTtcXG4rXFx0XFx0ZG1hX2ZlbmNlX3dhaXQoZmVuY2UsIGZhbHNlKTtcXG4rXFx0XFx0ZG1hX2ZlbmNlX3B1dChmZW5jZSk7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4rXFx0ZG1hX3Jlc3ZfYWRkX2ZlbmNlKGRtYWJ1Zi1cXHUwMDNlcmVzdiwgXFx1MDAyNm1hcC1cXHUwMDNlZmVuY2UtXFx1MDAzZWJhc2UsXFxuK1xcdFxcdFxcdCAgIERNQV9SRVNWX1VTQUdFX0tFUk5FTCk7XFxuK1xcdC8qXFxuK1xcdCAqIERlbGF5IGRlc3RydWN0aW9uIHVudGlsIGFsbCBpbmZsaWdodCByZXF1ZXN0cyB1c2luZyB0aGUgbWFwIGFyZVxcbitcXHQgKiBnb25lLiBJdCdsbCBhbHNvIHNpZ25hbCB0aGUgZmVuY2UgdGhlbi5cXG4rXFx0ICovXFxuK1xcdHBlcmNwdV9yZWZfa2lsbChcXHUwMDI2bWFwLVxcdTAwM2VyZWZzKTtcXG4rfVxcbitcXG4rdm9pZCBkbWFfYnVmX2lvX2ludmFsaWRhdGVfbWFwcGluZ3Moc3RydWN0IGRtYV9idWZfaW9fY3R4ICpjdHgpXFxuK3tcXG4rXFx0ZG1hX2J1Zl9pb19kcm9wX21hcChjdHgpO1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfTlNfR1BMKGRtYV9idWZfaW9faW52YWxpZGF0ZV9tYXBwaW5ncywgXFxcIkRNQV9CVUZcXFwiKTtcXG4rXFxuK3N0YXRpYyB2b2lkIGRtYV9idWZfaW9fY3R4X3JlbGVhc2Vfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuK3tcXG4rXFx0c3RydWN0IGRtYV9idWZfaW9fY3R4ICpjdHggPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGRtYV9idWZfaW9fY3R4LFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgIHJlbGVhc2Vfd29yayk7XFxuK1xcdHN0cnVjdCBkbWFfYnVmICpkbWFidWYgPSBjdHgtXFx1MDAzZWRtYWJ1ZjtcXG4rXFx0bG9uZyByZXQ7XFxuK1xcbitcXHRkbWFfcmVzdl9sb2NrKGRtYWJ1Zi1cXHUwMDNlcmVzdiwgTlVMTCk7XFxuK1xcdC8qIFJlbW92ZSB0aGUgbGFzdCBtYXAsIHRoZXJlIHNob3VsZCBiZSBubyBuZXcgb25lcyBnb2luZyBmb3J3YXJkLiAqL1xcbitcXHRkbWFfYnVmX2lvX2Ryb3BfbWFwKGN0eCk7XFxuK1xcdGRtYV9yZXN2X3VubG9jayhkbWFidWYtXFx1MDAzZXJlc3YpO1xcbitcXG4rXFx0LyogV2FpdCB1bnRpbCBhbGwgbWFwcyBhcmUgZGVzdHJveWVkLiAqL1xcbitcXHRyZXQgPSBkbWFfcmVzdl93YWl0X3RpbWVvdXQoZG1hYnVmLVxcdTAwM2VyZXN2LCBETUFfUkVTVl9VU0FHRV9LRVJORUwsXFxuK1xcdFxcdFxcdFxcdCAgICBmYWxzZSwgTUFYX1NDSEVEVUxFX1RJTUVPVVQpO1xcbitcXG4rXFx0aWYgKFdBUk5fT05fT05DRShyZXQgXFx1MDAzYz0gMCkpXFxuK1xcdFxcdHJldHVybjtcXG4rXFx0aWYgKFdBUk5fT05fT05DRShyY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKGN0eC1cXHUwMDNlbWFwLCB0cnVlKSkpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGlmIChyZWZjb3VudF9kZWNfYW5kX3Rlc3QoXFx1MDAyNmN0eC1cXHUwMDNlcmVmcykpXFxuK1xcdFxcdGRtYV9idWZfaW9fY3R4X2Rlc3Ryb3lfd29yayhcXHUwMDI2Y3R4LVxcdTAwM2VyZWxlYXNlX3dvcmspO1xcbit9XFxuK1xcbit2b2lkIGRtYV9idWZfaW9fY3R4X3JlbGVhc2Uoc3RydWN0IGRtYV9idWZfaW9fY3R4ICpjdHgpXFxuK3tcXG4rXFx0LypcXG4rXFx0ICogRGVzdHJ1Y3Rpb24gbmVlZHMgdG8gd2FpdCBmb3IgSS9PIGFuZCBkbWEgZmVuY2VzLiBEZWZlciBpdCB0b1xcbitcXHQgKiBzaW1wbGlmeSBsb2NraW5nLlxcbitcXHQgKi9cXG4rXFx0SU5JVF9XT1JLKFxcdTAwMjZjdHgtXFx1MDAzZXJlbGVhc2Vfd29yaywgZG1hX2J1Zl9pb19jdHhfcmVsZWFzZV93b3JrKTtcXG4rXFx0cXVldWVfd29yayhzeXN0ZW1fd3EsIFxcdTAwMjZjdHgtXFx1MDAzZXJlbGVhc2Vfd29yayk7XFxuK31cXG4rXFxuK2ludCBkbWFfYnVmX2lvX2N0eF9jcmVhdGUoc3RydWN0IGZpbGUgKmZpbGUsXFxuK1xcdFxcdFxcdCAgIHN0cnVjdCBkbWFfYnVmX2lvX2N0eCAqY3R4LFxcbitcXHRcXHRcXHQgICBzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmLFxcbitcXHRcXHRcXHQgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpXFxuK3tcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGlmICghZmlsZS1cXHUwMDNlZl9vcC1cXHUwMDNlaW5pdF9kbWFfYnVmX2lvX2N0eClcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXG4rXFx0bWVtc2V0KGN0eCwgMCwgc2l6ZW9mKCpjdHgpKTtcXG4rXFx0Y3R4LVxcdTAwM2VmZW5jZV9jdHggPSBkbWFfZmVuY2VfY29udGV4dF9hbGxvYygxKTtcXG4rXFx0Y3R4LVxcdTAwM2VkaXIgPSBkaXI7XFxuK1xcdGN0eC1cXHUwMDNlZG1hYnVmID0gZG1hYnVmO1xcbitcXHRyZWZjb3VudF9zZXQoXFx1MDAyNmN0eC1cXHUwMDNlcmVmcywgMSk7XFxuK1xcdGdldF9kbWFfYnVmKGRtYWJ1Zik7XFxuK1xcbitcXHRyZXQgPSBmaWxlLVxcdTAwM2VmX29wLVxcdTAwM2Vpbml0X2RtYV9idWZfaW9fY3R4KGZpbGUsIGN0eCk7XFxuK1xcdGlmIChyZXQpIHtcXG4rXFx0XFx0bWVtc2V0KGN0eCwgMCwgc2l6ZW9mKCpjdHgpKTtcXG4rXFx0XFx0ZG1hX2J1Zl9wdXQoZG1hYnVmKTtcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKFdBUk5fT05fT05DRSghY3R4LVxcdTAwM2VkZXZfb3BzIHx8XFxuK1xcdFxcdFxcdCAhY3R4LVxcdTAwM2VkZXZfb3BzLVxcdTAwM2VtYXAgfHxcXG4rXFx0XFx0XFx0ICFjdHgtXFx1MDAzZWRldl9vcHMtXFx1MDAzZXVubWFwIHx8XFxuK1xcdFxcdFxcdCAhY3R4LVxcdTAwM2VkZXZfb3BzLVxcdTAwM2VyZWxlYXNlKSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvZG0taW8tcmV3aW5kLmMgYi9kcml2ZXJzL21kL2RtLWlvLXJld2luZC5jXFxuaW5kZXggNjE1NWIwMTE3YzlkNi4uYjIyNzE5YzY0MTFjZiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL21kL2RtLWlvLXJld2luZC5jXFxuKysrIGIvZHJpdmVycy9tZC9kbS1pby1yZXdpbmQuY1xcbkBAIC0xNiwxMiArMTYsMTIgQEAgc3RhdGljIGlubGluZSBib29sIGRtX2J2ZWNfaXRlcl9yZXdpbmQoY29uc3Qgc3RydWN0IGJpb192ZWMgKmJ2LFxcbiBcXHRpbnQgaWR4O1xcbiBcXG4gXFx0aXRlci1cXHUwMDNlYmlfc2l6ZSArPSBieXRlcztcXG4tXFx0aWYgKGJ5dGVzIFxcdTAwM2M9IGl0ZXItXFx1MDAzZWJpX2J2ZWNfZG9uZSkge1xcbi1cXHRcXHRpdGVyLVxcdTAwM2ViaV9idmVjX2RvbmUgLT0gYnl0ZXM7XFxuK1xcdGlmIChieXRlcyBcXHUwMDNjPSBpdGVyLVxcdTAwM2ViaV9vZmZzZXQpIHtcXG4rXFx0XFx0aXRlci1cXHUwMDNlYmlfb2Zmc2V0IC09IGJ5dGVzO1xcbiBcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gXFx0fVxcbiBcXG4tXFx0Ynl0ZXMgLT0gaXRlci1cXHUwMDNlYmlfYnZlY19kb25lO1xcbitcXHRieXRlcyAtPSBpdGVyLVxcdTAwM2ViaV9vZmZzZXQ7XFxuIFxcdGlkeCA9IGl0ZXItXFx1MDAzZWJpX2lkeCAtIDE7XFxuIFxcbiBcXHR3aGlsZSAoaWR4IFxcdTAwM2U9IDAgXFx1MDAyNlxcdTAwMjYgYnl0ZXMgXFx1MDAyNlxcdTAwMjYgYnl0ZXMgXFx1MDAzZSBidltpZHhdLmJ2X2xlbikge1xcbkBAIC0zMiwxMyArMzIsMTMgQEAgc3RhdGljIGlubGluZSBib29sIGRtX2J2ZWNfaXRlcl9yZXdpbmQoY29uc3Qgc3RydWN0IGJpb192ZWMgKmJ2LFxcbiBcXHRpZiAoV0FSTl9PTkNFKGlkeCBcXHUwMDNjIDAgXFx1MDAyNlxcdTAwMjYgYnl0ZXMsXFxuIFxcdFxcdCAgICAgIFxcXCJBdHRlbXB0ZWQgdG8gcmV3aW5kIGl0ZXIgYmV5b25kIGJ2ZWMncyBib3VuZGFyaWVzXFxcXG5cXFwiKSkge1xcbiBcXHRcXHRpdGVyLVxcdTAwM2ViaV9zaXplIC09IGJ5dGVzO1xcbi1cXHRcXHRpdGVyLVxcdTAwM2ViaV9idmVjX2RvbmUgPSAwO1xcbitcXHRcXHRpdGVyLVxcdTAwM2ViaV9vZmZzZXQgPSAwO1xcbiBcXHRcXHRpdGVyLVxcdTAwM2ViaV9pZHggPSAwO1xcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcdH1cXG4gXFxuIFxcdGl0ZXItXFx1MDAzZWJpX2lkeCA9IGlkeDtcXG4tXFx0aXRlci1cXHUwMDNlYmlfYnZlY19kb25lID0gYnZbaWR4XS5idl9sZW4gLSBieXRlcztcXG4rXFx0aXRlci1cXHUwMDNlYmlfb2Zmc2V0ID0gYnZbaWR4XS5idl9sZW4gLSBieXRlcztcXG4gXFx0cmV0dXJuIHRydWU7XFxuIH1cXG4gXFxuQEAgLTExMywxMCArMTEzLDEyIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBkbV9iaW9fcmV3aW5kX2l0ZXIoY29uc3Qgc3RydWN0IGJpbyAqYmlvLFxcbiBcXHRpdGVyLVxcdTAwM2ViaV9zZWN0b3IgLT0gYnl0ZXMgXFx1MDAzZVxcdTAwM2UgOTtcXG4gXFxuIFxcdC8qIE5vIGFkdmFuY2UgbWVhbnMgbm8gcmV3aW5kICovXFxuLVxcdGlmIChiaW9fbm9fYWR2YW5jZV9pdGVyKGJpbykpXFxuK1xcdGlmIChiaW9fbm9fYWR2YW5jZV9pdGVyKGJpbykpIHtcXG4gXFx0XFx0aXRlci1cXHUwMDNlYmlfc2l6ZSArPSBieXRlcztcXG4tXFx0ZWxzZVxcbitcXHRcXHRpdGVyLVxcdTAwM2ViaV9vZmZzZXQgLT0gYnl0ZXM7XFxuK1xcdH0gZWxzZSB7XFxuIFxcdFxcdGRtX2J2ZWNfaXRlcl9yZXdpbmQoYmlvLVxcdTAwM2ViaV9pb192ZWMsIGl0ZXIsIGJ5dGVzKTtcXG4rXFx0fVxcbiB9XFxuIFxcbiAvKipcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS1wY2FjaGUvc2VnbWVudC5jIGIvZHJpdmVycy9tZC9kbS1wY2FjaGUvc2VnbWVudC5jXFxuaW5kZXggN2U5ODE4NzAxNDQ1MS4uOGY4ODE2ZTFjNTM5ZiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL21kL2RtLXBjYWNoZS9zZWdtZW50LmNcXG4rKysgYi9kcml2ZXJzL21kL2RtLXBjYWNoZS9zZWdtZW50LmNcXG5AQCAtMTQsNyArMTQsNyBAQCBpbnQgc2VnbWVudF9jb3B5X3RvX2JpbyhzdHJ1Y3QgcGNhY2hlX3NlZ21lbnQgKnNlZ21lbnQsXFxuIFxcbiBcXHRpb3ZfaXRlcl9idmVjKFxcdTAwMjZpdGVyLCBJVEVSX0RFU1QsIFxcdTAwMjZiaW8tXFx1MDAzZWJpX2lvX3ZlY1tiaW8tXFx1MDAzZWJpX2l0ZXIuYmlfaWR4XSxcXG4gXFx0XFx0XFx0YmlvX3NlZ21lbnRzKGJpbyksIGJpby1cXHUwMDNlYmlfaXRlci5iaV9zaXplKTtcXG4tXFx0aXRlci5pb3Zfb2Zmc2V0ID0gYmlvLVxcdTAwM2ViaV9pdGVyLmJpX2J2ZWNfZG9uZTtcXG4rXFx0aXRlci5pb3Zfb2Zmc2V0ID0gYmlvLVxcdTAwM2ViaV9pdGVyLmJpX29mZnNldDtcXG4gXFx0aWYgKGJpb19vZmYpXFxuIFxcdFxcdGlvdl9pdGVyX2FkdmFuY2UoXFx1MDAyNml0ZXIsIGJpb19vZmYpO1xcbiBcXG5AQCAtMzUsNyArMzUsNyBAQCBpbnQgc2VnbWVudF9jb3B5X2Zyb21fYmlvKHN0cnVjdCBwY2FjaGVfc2VnbWVudCAqc2VnbWVudCxcXG4gXFxuIFxcdGlvdl9pdGVyX2J2ZWMoXFx1MDAyNml0ZXIsIElURVJfU09VUkNFLCBcXHUwMDI2YmlvLVxcdTAwM2ViaV9pb192ZWNbYmlvLVxcdTAwM2ViaV9pdGVyLmJpX2lkeF0sXFxuIFxcdFxcdFxcdGJpb19zZWdtZW50cyhiaW8pLCBiaW8tXFx1MDAzZWJpX2l0ZXIuYmlfc2l6ZSk7XFxuLVxcdGl0ZXIuaW92X29mZnNldCA9IGJpby1cXHUwMDNlYmlfaXRlci5iaV9idmVjX2RvbmU7XFxuK1xcdGl0ZXIuaW92X29mZnNldCA9IGJpby1cXHUwMDNlYmlfaXRlci5iaV9vZmZzZXQ7XFxuIFxcdGlmIChiaW9fb2ZmKVxcbiBcXHRcXHRpb3ZfaXRlcl9hZHZhbmNlKFxcdTAwMjZpdGVyLCBiaW9fb2ZmKTtcXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbnZkaW1tL2J0dC5jIGIvZHJpdmVycy9udmRpbW0vYnR0LmNcXG5pbmRleCA3ZTExMTI5NjBkN2Y4Li41ZDkxMGE2NDUwM2QzIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbnZkaW1tL2J0dC5jXFxuKysrIGIvZHJpdmVycy9udmRpbW0vYnR0LmNcXG5AQCAtMTE1NSw3ICsxMTU1LDcgQEAgc3RhdGljIGludCBidHRfcndfaW50ZWdyaXR5KHN0cnVjdCBidHQgKmJ0dCwgc3RydWN0IGJpb19pbnRlZ3JpdHlfcGF5bG9hZCAqYmlwLFxcbiBcXHRcXHRidiA9IGJ2ZWNfaXRlcl9idmVjKGJpcC1cXHUwMDNlYmlwX3ZlYywgYmlwLVxcdTAwM2ViaXBfaXRlcik7XFxuIFxcdFxcdC8qXFxuIFxcdFxcdCAqIFRoZSAnYnYnIG9idGFpbmVkIGZyb20gYnZlY19pdGVyX2J2ZWMgaGFzIGl0cyAuYnZfbGVuIGFuZFxcbi1cXHRcXHQgKiAuYnZfb2Zmc2V0IGFscmVhZHkgYWRqdXN0ZWQgZm9yIGl0ZXItXFx1MDAzZWJpX2J2ZWNfZG9uZSwgYW5kIHdlXFxuK1xcdFxcdCAqIC5idl9vZmZzZXQgYWxyZWFkeSBhZGp1c3RlZCBmb3IgaXRlci1cXHUwMDNlYmlfb2Zmc2V0LCBhbmQgd2VcXG4gXFx0XFx0ICogY2FuIHVzZSB0aG9zZSBkaXJlY3RseVxcbiBcXHRcXHQgKi9cXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYyBiL2RyaXZlcnMvbnZtZS9ob3N0L2NvcmUuY1xcbmluZGV4IDQ1M2MxZjBiMmRkMDkuLjhiZDQwNzYwM2Q5MjggMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9udm1lL2hvc3QvY29yZS5jXFxuKysrIGIvZHJpdmVycy9udm1lL2hvc3QvY29yZS5jXFxuQEAgLTI2NzYsNiArMjY3NiwxNyBAQCBzdGF0aWMgaW50IG52bWVfcmVwb3J0X3pvbmVzKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBzZWN0b3JfdCBzZWN0b3IsXFxuICNkZWZpbmUgbnZtZV9yZXBvcnRfem9uZXNcXHROVUxMXFxuICNlbmRpZiAvKiBDT05GSUdfQkxLX0RFVl9aT05FRCAqL1xcbiBcXG4rc3RhdGljIGludCBudm1lX2luaXRfZG1hX2J1Zl9pb19jdHgoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldixcXG4rXFx0XFx0c3RydWN0IGRtYV9idWZfaW9fY3R4ICpjdHgpXFxuK3tcXG4rXFx0c3RydWN0IG52bWVfbnMgKm5zID0gYmRldi1cXHUwMDNlYmRfZGlzay1cXHUwMDNlcHJpdmF0ZV9kYXRhO1xcbitcXHRzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsID0gbnMtXFx1MDAzZWN0cmw7XFxuK1xcbitcXHRpZiAoIWN0cmwtXFx1MDAzZW9wcy1cXHUwMDNlaW5pdF9kbWFfYnVmX2lvX2N0eClcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdHJldHVybiBjdHJsLVxcdTAwM2VvcHMtXFx1MDAzZWluaXRfZG1hX2J1Zl9pb19jdHgoY3RybCwgY3R4KTtcXG4rfVxcbitcXG4gY29uc3Qgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIG52bWVfYmRldl9vcHMgPSB7XFxuIFxcdC5vd25lclxcdFxcdD0gVEhJU19NT0RVTEUsXFxuIFxcdC5pb2N0bFxcdFxcdD0gbnZtZV9pb2N0bCxcXG5AQCAtMjY4Niw2ICsyNjk3LDcgQEAgY29uc3Qgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIG52bWVfYmRldl9vcHMgPSB7XFxuIFxcdC5nZXRfdW5pcXVlX2lkXFx0PSBudm1lX2dldF91bmlxdWVfaWQsXFxuIFxcdC5yZXBvcnRfem9uZXNcXHQ9IG52bWVfcmVwb3J0X3pvbmVzLFxcbiBcXHQucHJfb3BzXFx0XFx0PSBcXHUwMDI2bnZtZV9wcl9vcHMsXFxuK1xcdC5pbml0X2RtYV9idWZfaW9fY3R4ID0gbnZtZV9pbml0X2RtYV9idWZfaW9fY3R4LFxcbiB9O1xcbiBcXG4gc3RhdGljIGludCBudm1lX3dhaXRfcmVhZHkoc3RydWN0IG52bWVfY3RybCAqY3RybCwgdTMyIG1hc2ssIHUzMiB2YWwsXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbnZtZS9ob3N0L252bWUuaCBiL2RyaXZlcnMvbnZtZS9ob3N0L252bWUuaFxcbmluZGV4IDgyNDY1MWNjODk4ZGIuLjAzNGMzMWFmOGZlY2YgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9udm1lL2hvc3QvbnZtZS5oXFxuKysrIGIvZHJpdmVycy9udm1lL2hvc3QvbnZtZS5oXFxuQEAgLTY1Miw2ICs2NTIsOCBAQCBzdHJ1Y3QgbnZtZV9jdHJsX29wcyB7XFxuIFxcdGludCAoKmdldF9hZGRyZXNzKShzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsLCBjaGFyICpidWYsIGludCBzaXplKTtcXG4gXFx0dm9pZCAoKnByaW50X2RldmljZV9pbmZvKShzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsKTtcXG4gXFx0Ym9vbCAoKnN1cHBvcnRzX3BjaV9wMnBkbWEpKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwpO1xcbitcXHRpbnQgKCppbml0X2RtYV9idWZfaW9fY3R4KShzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsLFxcbitcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgZG1hX2J1Zl9pb19jdHggKmN0eCk7XFxuIFxcdHVuc2lnbmVkIGxvbmcgKCpnZXRfdmlydF9ib3VuZGFyeSkoc3RydWN0IG52bWVfY3RybCAqY3RybCwgYm9vbCBpc19hZG1pbik7XFxuIH07XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL252bWUvaG9zdC9wY2kuYyBiL2RyaXZlcnMvbnZtZS9ob3N0L3BjaS5jXFxuaW5kZXggNjk5MzJkNjQwYjUzNy4uNjdlMjZkNmU4ZjI1NSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL252bWUvaG9zdC9wY2kuY1xcbisrKyBiL2RyaXZlcnMvbnZtZS9ob3N0L3BjaS5jXFxuQEAgLTI3LDYgKzI3LDggQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lvLTY0LW5vbmF0b21pYy1sby1oaS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvaW8tNjQtbm9uYXRvbWljLWhpLWxvLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zZWQtb3BhbC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvZG1hLWJ1Zi1pby5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvZG1hLXJlc3YuaFxcdTAwM2VcXG4gXFxuICNpbmNsdWRlIFxcXCJ0cmFjZS5oXFxcIlxcbiAjaW5jbHVkZSBcXFwibnZtZS5oXFxcIlxcbkBAIC0zOTMsNiArMzk1LDEzIEBAIHN0cnVjdCBudm1lX3F1ZXVlIHtcXG4gXFx0c3RydWN0IGNvbXBsZXRpb24gZGVsZXRlX2RvbmU7XFxuIH07XFxuIFxcbitzdHJ1Y3QgbnZtZV9kbWFidWZfbWFwIHtcXG4rXFx0c3RydWN0IGRtYV9idWZfaW9fbWFwIGJhc2U7XFxuK1xcdHN0cnVjdCBzZ190YWJsZSAqc2d0O1xcbitcXHR1bnNpZ25lZCBucl9lbnRyaWVzO1xcbitcXHRkbWFfYWRkcl90IGRtYV9saXN0W107XFxuK307XFxuK1xcbiAvKiBiaXRzIGZvciBpb2QtXFx1MDAzZWZsYWdzICovXFxuIGVudW0gbnZtZV9pb2RfZmxhZ3Mge1xcbiBcXHQvKiB0aGlzIGNvbW1hbmQgaGFzIGJlZW4gYWJvcnRlZCBieSB0aGUgdGltZW91dCBoYW5kbGVyICovXFxuQEAgLTg1OSw2ICs4NjgsMTM4IEBAIHN0YXRpYyB2b2lkIG52bWVfZnJlZV9kZXNjcmlwdG9ycyhzdHJ1Y3QgcmVxdWVzdCAqcmVxKVxcbiBcXHR9XFxuIH1cXG4gXFxuK3N0YXRpYyBpbmxpbmUgc3RydWN0IG52bWVfZG1hYnVmX21hcCAqXFxuK3RvX252bWVfZG1hYnVmX21hcChzdHJ1Y3QgZG1hX2J1Zl9pb19tYXAgKm1hcClcXG4re1xcbitcXHRyZXR1cm4gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IG52bWVfZG1hYnVmX21hcCwgYmFzZSk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIG52bWVfZG1hYnVmX21hcF9zeW5jX2Zvcl9jcHUoc3RydWN0IG52bWVfZGV2ICpudm1lX2RldixcXG4rXFx0XFx0XFx0XFx0XFx0IHN0cnVjdCByZXF1ZXN0ICpyZXEpXFxuK3tcXG4rXFx0c3RydWN0IGRldmljZSAqZGV2ID0gbnZtZV9kZXYtXFx1MDAzZWRldjtcXG4rXFx0ZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZG1hX2RpcjtcXG4rXFx0c3RydWN0IGJpbyAqYmlvID0gcmVxLVxcdTAwM2ViaW87XFxuK1xcdHN0cnVjdCBudm1lX2RtYWJ1Zl9tYXAgKm1hcCA9IHRvX252bWVfZG1hYnVmX21hcChiaW8tXFx1MDAzZWJpX2RtYWJ1Zl9tYXApO1xcbitcXHRkbWFfYWRkcl90ICpkbWFfbGlzdCA9IG1hcC1cXHUwMDNlZG1hX2xpc3Q7XFxuK1xcdHVuc2lnbmVkIG9mZnNldCA9IGJpby1cXHUwMDNlYmlfaXRlci5iaV9vZmZzZXQ7XFxuK1xcdHVuc2lnbmVkIG1hcF9pZHggPSBvZmZzZXQgLyBOVk1FX0NUUkxfUEFHRV9TSVpFO1xcbitcXHRpbnQgbGVuZ3RoID0gYmxrX3JxX3BheWxvYWRfYnl0ZXMocmVxKSArXFxuK1xcdFxcdCAgICAgKG9mZnNldCBcXHUwMDI2IChOVk1FX0NUUkxfUEFHRV9TSVpFIC0gMSkpO1xcbitcXG4rXFx0ZG1hX2RpciA9IHJxX2RhdGFfZGlyKHJlcSkgPT0gUkVBRCA/IERNQV9GUk9NX0RFVklDRSA6IERNQV9UT19ERVZJQ0U7XFxuK1xcbitcXHR3aGlsZSAobGVuZ3RoIFxcdTAwM2UgMCkge1xcbitcXHRcXHRkbWFfc3luY19zaW5nbGVfZm9yX2NwdShkZXYsIGRtYV9saXN0W21hcF9pZHgrK10sXFxuK1xcdFxcdFxcdFxcdFxcdE5WTUVfQ1RSTF9QQUdFX1NJWkUsIGRtYV9kaXIpO1xcbitcXHRcXHRsZW5ndGggLT0gTlZNRV9DVFJMX1BBR0VfU0laRTtcXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBudm1lX2RtYWJ1Zl9tYXBfc3luY19mb3JfZGV2aWNlKHN0cnVjdCBudm1lX2RldiAqbnZtZV9kZXYsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgcmVxdWVzdCAqcmVxKVxcbit7XFxuK1xcdHN0cnVjdCBkZXZpY2UgKmRldiA9IG52bWVfZGV2LVxcdTAwM2VkZXY7XFxuK1xcdGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRtYV9kaXI7XFxuK1xcdHN0cnVjdCBiaW8gKmJpbyA9IHJlcS1cXHUwMDNlYmlvO1xcbitcXHRzdHJ1Y3QgbnZtZV9kbWFidWZfbWFwICptYXAgPSB0b19udm1lX2RtYWJ1Zl9tYXAoYmlvLVxcdTAwM2ViaV9kbWFidWZfbWFwKTtcXG4rXFx0ZG1hX2FkZHJfdCAqZG1hX2xpc3QgPSBtYXAtXFx1MDAzZWRtYV9saXN0O1xcbitcXHR1bnNpZ25lZCBvZmZzZXQgPSBiaW8tXFx1MDAzZWJpX2l0ZXIuYmlfb2Zmc2V0O1xcbitcXHR1bnNpZ25lZCBtYXBfaWR4ID0gb2Zmc2V0IC8gTlZNRV9DVFJMX1BBR0VfU0laRTtcXG4rXFx0aW50IGxlbmd0aCA9IGJsa19ycV9wYXlsb2FkX2J5dGVzKHJlcSkgK1xcbitcXHRcXHQgICAgIChvZmZzZXQgXFx1MDAyNiAoTlZNRV9DVFJMX1BBR0VfU0laRSAtIDEpKTtcXG4rXFxuK1xcdGRtYV9kaXIgPSBycV9kYXRhX2RpcihyZXEpID09IFJFQUQgPyBETUFfRlJPTV9ERVZJQ0UgOiBETUFfVE9fREVWSUNFO1xcbitcXG4rXFx0d2hpbGUgKGxlbmd0aCBcXHUwMDNlIDApIHtcXG4rXFx0XFx0ZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UoZGV2LCBkbWFfbGlzdFttYXBfaWR4KytdLFxcbitcXHRcXHRcXHRcXHRcXHQgICBOVk1FX0NUUkxfUEFHRV9TSVpFLCBkbWFfZGlyKTtcXG4rXFx0XFx0bGVuZ3RoIC09IE5WTUVfQ1RSTF9QQUdFX1NJWkU7XFxuK1xcdH1cXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgbnZtZV9ycV9jbGVhbl9kbWFidWZfbWFwKHN0cnVjdCBudm1lX2RldiAqZGV2LFxcbitcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgcmVxdWVzdCAqcmVxKVxcbit7XFxuK1xcdHN0cnVjdCBudm1lX2lvZCAqaW9kID0gYmxrX21xX3JxX3RvX3BkdShyZXEpO1xcbitcXG4rXFx0bnZtZV9kbWFidWZfbWFwX3N5bmNfZm9yX2NwdShkZXYsIHJlcSk7XFxuK1xcbitcXHRpZiAoIShpb2QtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSU9EX1NJTkdMRV9TRUdNRU5UKSlcXG4rXFx0XFx0bnZtZV9mcmVlX2Rlc2NyaXB0b3JzKHJlcSk7XFxuK31cXG4rXFxuK3N0YXRpYyBibGtfc3RhdHVzX3QgbnZtZV9ycV9zZXR1cF9kbWFidWZfbWFwKHN0cnVjdCByZXF1ZXN0ICpyZXEsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IG52bWVfcXVldWUgKm52bWVxKVxcbit7XFxuK1xcdHN0cnVjdCBudm1lX2lvZCAqaW9kID0gYmxrX21xX3JxX3RvX3BkdShyZXEpO1xcbitcXHRzdHJ1Y3QgYmlvICpiaW8gPSByZXEtXFx1MDAzZWJpbztcXG4rXFx0c3RydWN0IG52bWVfZG1hYnVmX21hcCAqbWFwID0gdG9fbnZtZV9kbWFidWZfbWFwKGJpby1cXHUwMDNlYmlfZG1hYnVmX21hcCk7XFxuK1xcdHVuc2lnbmVkIGJ2ZWNfZG9uZSA9IGJpby1cXHUwMDNlYmlfaXRlci5iaV9vZmZzZXQ7XFxuK1xcdHVuc2lnbmVkIG1hcF9pZHggPSBidmVjX2RvbmUgLyBOVk1FX0NUUkxfUEFHRV9TSVpFO1xcbitcXHR1bnNpZ25lZCBvZmZzZXQgPSBidmVjX2RvbmUgXFx1MDAyNiAoTlZNRV9DVFJMX1BBR0VfU0laRSAtIDEpO1xcbitcXHRpbnQgbGVuZ3RoID0gYmxrX3JxX3BheWxvYWRfYnl0ZXMocmVxKSAtIChOVk1FX0NUUkxfUEFHRV9TSVpFIC0gb2Zmc2V0KTtcXG4rXFx0ZG1hX2FkZHJfdCAqZG1hX2xpc3QgPSBtYXAtXFx1MDAzZWRtYV9saXN0O1xcbitcXHR1NjQgcHJwMV9kbWEgPSBkbWFfbGlzdFttYXBfaWR4KytdICsgb2Zmc2V0O1xcbitcXHR1NjQgZG1hX2FkZHIsIHBycDJfZG1hO1xcbitcXHRkbWFfYWRkcl90IHBycF9kbWE7XFxuK1xcdF9fbGU2NCAqcHJwX2xpc3Q7XFxuK1xcdHVuc2lnbmVkIGk7XFxuK1xcbitcXHRudm1lX2RtYWJ1Zl9tYXBfc3luY19mb3JfZGV2aWNlKG52bWVxLVxcdTAwM2VkZXYsIHJlcSk7XFxuK1xcbitcXHRpZiAobGVuZ3RoIFxcdTAwM2M9IDApIHtcXG4rXFx0XFx0cHJwMl9kbWEgPSAwO1xcbitcXHRcXHRnb3RvIGRvbmU7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChsZW5ndGggXFx1MDAzYz0gTlZNRV9DVFJMX1BBR0VfU0laRSkge1xcbitcXHRcXHRwcnAyX2RtYSA9IGRtYV9saXN0W21hcF9pZHhdO1xcbitcXHRcXHRnb3RvIGRvbmU7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChESVZfUk9VTkRfVVAobGVuZ3RoLCBOVk1FX0NUUkxfUEFHRV9TSVpFKSBcXHUwMDNjPVxcbitcXHQgICAgTlZNRV9TTUFMTF9QT09MX1NJWkUgLyBzaXplb2YoX19sZTY0KSlcXG4rXFx0XFx0aW9kLVxcdTAwM2VmbGFncyB8PSBJT0RfU01BTExfREVTQ1JJUFRPUjtcXG4rXFxuK1xcdHBycF9saXN0ID0gZG1hX3Bvb2xfYWxsb2MobnZtZV9kbWFfcG9vbChudm1lcSwgaW9kKSwgR0ZQX0FUT01JQyxcXG4rXFx0XFx0XFx0XFx1MDAyNnBycF9kbWEpO1xcbitcXHRpZiAoIXBycF9saXN0KVxcbitcXHRcXHRyZXR1cm4gQkxLX1NUU19SRVNPVVJDRTtcXG4rXFxuK1xcdGlvZC1cXHUwMDNlZGVzY3JpcHRvcnNbaW9kLVxcdTAwM2Vucl9kZXNjcmlwdG9ycysrXSA9IHBycF9saXN0O1xcbitcXHRwcnAyX2RtYSA9IHBycF9kbWE7XFxuK1xcdGkgPSAwO1xcbitcXHRmb3IgKDs7KSB7XFxuK1xcdFxcdGlmIChpID09IE5WTUVfQ1RSTF9QQUdFX1NJWkUgXFx1MDAzZVxcdTAwM2UgMykge1xcbitcXHRcXHRcXHRfX2xlNjQgKm9sZF9wcnBfbGlzdCA9IHBycF9saXN0O1xcbitcXG4rXFx0XFx0XFx0cHJwX2xpc3QgPSBkbWFfcG9vbF9hbGxvYyhudm1lcS1cXHUwMDNlZGVzY3JpcHRvcl9wb29scy5sYXJnZSxcXG4rXFx0XFx0XFx0XFx0XFx0R0ZQX0FUT01JQywgXFx1MDAyNnBycF9kbWEpO1xcbitcXHRcXHRcXHRpZiAoIXBycF9saXN0KVxcbitcXHRcXHRcXHRcXHRnb3RvIGZyZWVfcHJwcztcXG4rXFx0XFx0XFx0aW9kLVxcdTAwM2VkZXNjcmlwdG9yc1tpb2QtXFx1MDAzZW5yX2Rlc2NyaXB0b3JzKytdID0gcHJwX2xpc3Q7XFxuK1xcdFxcdFxcdHBycF9saXN0WzBdID0gb2xkX3BycF9saXN0W2kgLSAxXTtcXG4rXFx0XFx0XFx0b2xkX3BycF9saXN0W2kgLSAxXSA9IGNwdV90b19sZTY0KHBycF9kbWEpO1xcbitcXHRcXHRcXHRpID0gMTtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0ZG1hX2FkZHIgPSBkbWFfbGlzdFttYXBfaWR4KytdO1xcbitcXHRcXHRwcnBfbGlzdFtpKytdID0gY3B1X3RvX2xlNjQoZG1hX2FkZHIpO1xcbitcXG4rXFx0XFx0bGVuZ3RoIC09IE5WTUVfQ1RSTF9QQUdFX1NJWkU7XFxuK1xcdFxcdGlmIChsZW5ndGggXFx1MDAzYz0gMClcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdH1cXG4rZG9uZTpcXG4rXFx0aW9kLVxcdTAwM2VjbWQuY29tbW9uLmRwdHIucHJwMSA9IGNwdV90b19sZTY0KHBycDFfZG1hKTtcXG4rXFx0aW9kLVxcdTAwM2VjbWQuY29tbW9uLmRwdHIucHJwMiA9IGNwdV90b19sZTY0KHBycDJfZG1hKTtcXG4rXFx0cmV0dXJuIEJMS19TVFNfT0s7XFxuK2ZyZWVfcHJwczpcXG4rXFx0bnZtZV9mcmVlX2Rlc2NyaXB0b3JzKHJlcSk7XFxuK1xcdHJldHVybiBCTEtfU1RTX1JFU09VUkNFO1xcbit9XFxuK1xcbiBzdGF0aWMgdm9pZCBudm1lX2ZyZWVfcHJwcyhzdHJ1Y3QgcmVxdWVzdCAqcmVxLCB1bnNpZ25lZCBpbnQgYXR0cnMpXFxuIHtcXG4gXFx0c3RydWN0IG52bWVfaW9kICppb2QgPSBibGtfbXFfcnFfdG9fcGR1KHJlcSk7XFxuQEAgLTkzNyw2ICsxMDc4LDExIEBAIHN0YXRpYyB2b2lkIG52bWVfdW5tYXBfZGF0YShzdHJ1Y3QgcmVxdWVzdCAqcmVxKVxcbiBcXHRzdHJ1Y3QgZGV2aWNlICpkbWFfZGV2ID0gbnZtZXEtXFx1MDAzZWRldi1cXHUwMDNlZGV2O1xcbiBcXHR1bnNpZ25lZCBpbnQgYXR0cnMgPSAwO1xcbiBcXG4rXFx0aWYgKGJsa19tcV9ycV9pc19kbWFidWYocmVxKSkge1xcbitcXHRcXHRudm1lX3JxX2NsZWFuX2RtYWJ1Zl9tYXAobnZtZXEtXFx1MDAzZWRldiwgcmVxKTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbiBcXHRpZiAoaW9kLVxcdTAwM2VmbGFncyBcXHUwMDI2IElPRF9TSU5HTEVfU0VHTUVOVCkge1xcbiBcXHRcXHRzdGF0aWNfYXNzZXJ0KG9mZnNldG9mKHVuaW9uIG52bWVfZGF0YV9wdHIsIHBycDEpID09XFxuIFxcdFxcdFxcdFxcdG9mZnNldG9mKHVuaW9uIG52bWVfZGF0YV9wdHIsIHNnbC5hZGRyKSk7XFxuQEAgLTExNDIsMTMgKzEyODgsMTkgQEAgc3RhdGljIGJsa19zdGF0dXNfdCBudm1lX3BjaV9zZXR1cF9kYXRhX3BycChzdHJ1Y3QgcmVxdWVzdCAqcmVxLFxcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBudm1lX3BjaV9zZ2xfc2V0X2RhdGEoc3RydWN0IG52bWVfc2dsX2Rlc2MgKnNnZSxcXG4tXFx0XFx0c3RydWN0IGJsa19kbWFfaXRlciAqaXRlcilcXG4rXFx0XFx0ZG1hX2FkZHJfdCBhZGRyLCB1MzIgbGVuKVxcbiB7XFxuLVxcdHNnZS1cXHUwMDNlYWRkciA9IGNwdV90b19sZTY0KGl0ZXItXFx1MDAzZWFkZHIpO1xcbi1cXHRzZ2UtXFx1MDAzZWxlbmd0aCA9IGNwdV90b19sZTMyKGl0ZXItXFx1MDAzZWxlbik7XFxuK1xcdHNnZS1cXHUwMDNlYWRkciA9IGNwdV90b19sZTY0KGFkZHIpO1xcbitcXHRzZ2UtXFx1MDAzZWxlbmd0aCA9IGNwdV90b19sZTMyKGxlbik7XFxuIFxcdHNnZS1cXHUwMDNldHlwZSA9IE5WTUVfU0dMX0ZNVF9EQVRBX0RFU0MgXFx1MDAzY1xcdTAwM2MgNDtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgbnZtZV9wY2lfZG1hX2l0ZXJfc2V0X3NnbChzdHJ1Y3QgbnZtZV9zZ2xfZGVzYyAqc2dlLFxcbitcXHRcXHRzdHJ1Y3QgYmxrX2RtYV9pdGVyICppdGVyKVxcbit7XFxuK1xcdG52bWVfcGNpX3NnbF9zZXRfZGF0YShzZ2UsIGl0ZXItXFx1MDAzZWFkZHIsIGl0ZXItXFx1MDAzZWxlbik7XFxuK31cXG4rXFxuIHN0YXRpYyB2b2lkIG52bWVfcGNpX3NnbF9zZXRfc2VnKHN0cnVjdCBudm1lX3NnbF9kZXNjICpzZ2UsXFxuIFxcdFxcdGRtYV9hZGRyX3QgZG1hX2FkZHIsIGludCBlbnRyaWVzKVxcbiB7XFxuQEAgLTExNTcsNiArMTMwOSwxNDUgQEAgc3RhdGljIHZvaWQgbnZtZV9wY2lfc2dsX3NldF9zZWcoc3RydWN0IG52bWVfc2dsX2Rlc2MgKnNnZSxcXG4gXFx0c2dlLVxcdTAwM2V0eXBlID0gTlZNRV9TR0xfRk1UX0xBU1RfU0VHX0RFU0MgXFx1MDAzY1xcdTAwM2MgNDtcXG4gfVxcbiBcXG4rc3RhdGljIHVuc2lnbmVkIGludCBudm1lX3BjaV9kbWFidWZfc2dsX25lbnRzKHN0cnVjdCByZXF1ZXN0ICpyZXEpXFxuK3tcXG4rXFx0c3RydWN0IGJpbyAqYmlvID0gcmVxLVxcdTAwM2ViaW87XFxuK1xcdHN0cnVjdCBudm1lX2RtYWJ1Zl9tYXAgKm1hcCA9IHRvX252bWVfZG1hYnVmX21hcChiaW8tXFx1MDAzZWJpX2RtYWJ1Zl9tYXApO1xcbitcXHRzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnO1xcbitcXHR1bnNpZ25lZCBsb25nIHRtcDtcXG4rXFx0c2l6ZV90IG9mZnNldCA9IGJpby1cXHUwMDNlYmlfaXRlci5iaV9vZmZzZXQ7XFxuK1xcdHNpemVfdCByZW1haW5pbmcgPSBibGtfcnFfcGF5bG9hZF9ieXRlcyhyZXEpO1xcbitcXHR1bnNpZ25lZCBpbnQgbmVudHMgPSAwO1xcbitcXG4rXFx0Zm9yX2VhY2hfc2d0YWJsZV9kbWFfc2cobWFwLVxcdTAwM2VzZ3QsIHNnLCB0bXApIHtcXG4rXFx0XFx0c2l6ZV90IHNnX2xlbiA9IHNnX2RtYV9sZW4oc2cpO1xcbitcXG4rXFx0XFx0aWYgKCFyZW1haW5pbmcpXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRpZiAob2Zmc2V0IFxcdTAwM2U9IHNnX2xlbikge1xcbitcXHRcXHRcXHRvZmZzZXQgLT0gc2dfbGVuO1xcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0c2dfbGVuIC09IG9mZnNldDtcXG4rXFx0XFx0b2Zmc2V0ID0gMDtcXG4rXFxuK1xcdFxcdGRvIHtcXG4rXFx0XFx0XFx0c2l6ZV90IGNodW5rID0gbWluKHJlbWFpbmluZywgc2dfbGVuKTtcXG4rXFxuK1xcdFxcdFxcdG5lbnRzKys7XFxuK1xcdFxcdFxcdHNnX2xlbiAtPSBjaHVuaztcXG4rXFx0XFx0XFx0cmVtYWluaW5nIC09IGNodW5rO1xcbitcXHRcXHR9IHdoaWxlIChzZ19sZW4gXFx1MDAyNlxcdTAwMjYgcmVtYWluaW5nKTtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKHVubGlrZWx5KHJlbWFpbmluZykpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0cmV0dXJuIG5lbnRzO1xcbit9XFxuK1xcbitzdGF0aWMgYmxrX3N0YXR1c190IG52bWVfcnFfc2V0dXBfZG1hYnVmX3NnbChzdHJ1Y3QgcmVxdWVzdCAqcmVxLFxcbitcXHRcXHRzdHJ1Y3QgbnZtZV9xdWV1ZSAqbnZtZXEsIHVuc2lnbmVkIGludCBlbnRyaWVzKVxcbit7XFxuK1xcdHN0cnVjdCBudm1lX2lvZCAqaW9kID0gYmxrX21xX3JxX3RvX3BkdShyZXEpO1xcbitcXHRzdHJ1Y3QgYmlvICpiaW8gPSByZXEtXFx1MDAzZWJpbztcXG4rXFx0c3RydWN0IG52bWVfZG1hYnVmX21hcCAqbWFwID0gdG9fbnZtZV9kbWFidWZfbWFwKGJpby1cXHUwMDNlYmlfZG1hYnVmX21hcCk7XFxuK1xcdHNpemVfdCBsZW5ndGggPSBibGtfcnFfcGF5bG9hZF9ieXRlcyhyZXEpO1xcbitcXHRzdHJ1Y3QgbnZtZV9zZ2xfZGVzYyAqc2dfbGlzdCA9IFxcdTAwMjZpb2QtXFx1MDAzZWNtZC5jb21tb24uZHB0ci5zZ2w7XFxuK1xcdGJvb2wgcG9vbGVkID0gZW50cmllcyBcXHUwMDNlIDE7XFxuK1xcdGRtYV9hZGRyX3Qgc2dsX2RtYSA9IDA7XFxuK1xcdHVuc2lnbmVkIGludCBtYXBwZWQgPSAwO1xcbitcXHR1bnNpZ25lZCBsb25nIHRtcDtcXG4rXFx0c3RydWN0IHNjYXR0ZXJsaXN0ICpzZztcXG4rXFx0c2l6ZV90IG9mZnNldCA9IGJpby1cXHUwMDNlYmlfaXRlci5iaV9vZmZzZXQ7XFxuK1xcdHNpemVfdCByZW1haW5pbmcgPSBsZW5ndGg7XFxuK1xcbitcXHRpZiAoIWVudHJpZXMpXFxuK1xcdFxcdHJldHVybiBCTEtfU1RTX0lPRVJSO1xcbitcXG4rXFx0aW9kLVxcdTAwM2VjbWQuY29tbW9uLmZsYWdzID0gTlZNRV9DTURfU0dMX01FVEFCVUY7XFxuK1xcdGlvZC1cXHUwMDNldG90YWxfbGVuID0gbGVuZ3RoO1xcbitcXG4rXFx0bnZtZV9kbWFidWZfbWFwX3N5bmNfZm9yX2RldmljZShudm1lcS1cXHUwMDNlZGV2LCByZXEpO1xcbitcXG4rXFx0LyogZW50cmllcyA9PSAxIGZpdHMgaW4gdGhlIGlubGluZSBkZXNjcmlwdG9yOyBtb3JlIG5lZWRzIGEgcG9vbC4gKi9cXG4rXFx0aWYgKHBvb2xlZCkge1xcbitcXHRcXHRpZiAoZW50cmllcyBcXHUwMDNjPSBOVk1FX1NNQUxMX1BPT0xfU0laRSAvIHNpemVvZigqc2dfbGlzdCkpXFxuK1xcdFxcdFxcdGlvZC1cXHUwMDNlZmxhZ3MgfD0gSU9EX1NNQUxMX0RFU0NSSVBUT1I7XFxuK1xcbitcXHRcXHRzZ19saXN0ID0gZG1hX3Bvb2xfYWxsb2MobnZtZV9kbWFfcG9vbChudm1lcSwgaW9kKSwgR0ZQX0FUT01JQyxcXG4rXFx0XFx0XFx0XFx0XFx0IFxcdTAwMjZzZ2xfZG1hKTtcXG4rXFx0XFx0aWYgKCFzZ19saXN0KVxcbitcXHRcXHRcXHRyZXR1cm4gQkxLX1NUU19SRVNPVVJDRTtcXG4rXFx0XFx0aW9kLVxcdTAwM2VkZXNjcmlwdG9yc1tpb2QtXFx1MDAzZW5yX2Rlc2NyaXB0b3JzKytdID0gc2dfbGlzdDtcXG4rXFx0fVxcbitcXG4rXFx0Zm9yX2VhY2hfc2d0YWJsZV9kbWFfc2cobWFwLVxcdTAwM2VzZ3QsIHNnLCB0bXApIHtcXG4rXFx0XFx0c2l6ZV90IHNnX2xlbiA9IHNnX2RtYV9sZW4oc2cpO1xcbitcXHRcXHRkbWFfYWRkcl90IGFkZHIgPSBzZ19kbWFfYWRkcmVzcyhzZyk7XFxuK1xcbitcXHRcXHRpZiAoIXJlbWFpbmluZylcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGlmIChvZmZzZXQgXFx1MDAzZT0gc2dfbGVuKSB7XFxuK1xcdFxcdFxcdG9mZnNldCAtPSBzZ19sZW47XFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRhZGRyICs9IG9mZnNldDtcXG4rXFx0XFx0c2dfbGVuIC09IG9mZnNldDtcXG4rXFx0XFx0b2Zmc2V0ID0gMDtcXG4rXFxuK1xcdFxcdGRvIHtcXG4rXFx0XFx0XFx0dTMyIGNodW5rID0gbWluX3Qoc2l6ZV90LCByZW1haW5pbmcsIHNnX2xlbik7XFxuK1xcbitcXHRcXHRcXHRpZiAoV0FSTl9PTl9PTkNFKG1hcHBlZCA9PSBlbnRyaWVzKSlcXG4rXFx0XFx0XFx0XFx0Z290byBlcnJfZnJlZTtcXG4rXFx0XFx0XFx0bnZtZV9wY2lfc2dsX3NldF9kYXRhKFxcdTAwMjZzZ19saXN0W21hcHBlZCsrXSwgYWRkciwgY2h1bmspO1xcbitcXG4rXFx0XFx0XFx0YWRkciArPSBjaHVuaztcXG4rXFx0XFx0XFx0c2dfbGVuIC09IGNodW5rO1xcbitcXHRcXHRcXHRyZW1haW5pbmcgLT0gY2h1bms7XFxuK1xcdFxcdH0gd2hpbGUgKHNnX2xlbiBcXHUwMDI2XFx1MDAyNiByZW1haW5pbmcpO1xcbitcXHR9XFxuK1xcbitcXHRpZiAodW5saWtlbHkocmVtYWluaW5nKSlcXG4rXFx0XFx0Z290byBlcnJfZnJlZTtcXG4rXFxuK1xcdGlmIChwb29sZWQpXFxuK1xcdFxcdG52bWVfcGNpX3NnbF9zZXRfc2VnKFxcdTAwMjZpb2QtXFx1MDAzZWNtZC5jb21tb24uZHB0ci5zZ2wsIHNnbF9kbWEsXFxuK1xcdFxcdFxcdFxcdCAgICAgbWFwcGVkKTtcXG4rXFx0cmV0dXJuIEJMS19TVFNfT0s7XFxuK2Vycl9mcmVlOlxcbitcXHRpZiAocG9vbGVkKSB7XFxuK1xcdFxcdGlvZC1cXHUwMDNlbnJfZGVzY3JpcHRvcnMtLTtcXG4rXFx0XFx0ZG1hX3Bvb2xfZnJlZShudm1lX2RtYV9wb29sKG52bWVxLCBpb2QpLCBzZ19saXN0LCBzZ2xfZG1hKTtcXG4rXFx0fVxcbitcXHRyZXR1cm4gQkxLX1NUU19JT0VSUjtcXG4rfVxcbitcXG4rc3RhdGljIGJsa19zdGF0dXNfdCBudm1lX3JxX3NldHVwX2RtYWJ1ZihzdHJ1Y3QgcmVxdWVzdCAqcmVxLFxcbitcXHRcXHRzdHJ1Y3QgbnZtZV9xdWV1ZSAqbnZtZXEsIGVudW0gbnZtZV91c2Vfc2dsIHVzZV9zZ2wpXFxuK3tcXG4rXFx0dW5zaWduZWQgaW50IGVudHJpZXM7XFxuK1xcdHNpemVfdCBhdmdfc2VnO1xcbitcXG4rXFx0aWYgKHVzZV9zZ2wgPT0gU0dMX1VOU1VQUE9SVEVEKVxcbitcXHRcXHRyZXR1cm4gbnZtZV9ycV9zZXR1cF9kbWFidWZfbWFwKHJlcSwgbnZtZXEpO1xcbitcXG4rXFx0ZW50cmllcyA9IG52bWVfcGNpX2RtYWJ1Zl9zZ2xfbmVudHMocmVxKTtcXG4rXFxuK1xcdGlmICh1c2Vfc2dsID09IFNHTF9GT1JDRUQpXFxuK1xcdFxcdHJldHVybiBudm1lX3JxX3NldHVwX2RtYWJ1Zl9zZ2wocmVxLCBudm1lcSwgZW50cmllcyk7XFxuK1xcbitcXHRhdmdfc2VnID0gZW50cmllcyA/XFxuK1xcdFxcdERJVl9ST1VORF9VUChibGtfcnFfcGF5bG9hZF9ieXRlcyhyZXEpLCBlbnRyaWVzKSA6IDA7XFxuK1xcdGlmIChzZ2xfdGhyZXNob2xkIFxcdTAwMjZcXHUwMDI2IGF2Z19zZWcgXFx1MDAzZT0gc2dsX3RocmVzaG9sZClcXG4rXFx0XFx0cmV0dXJuIG52bWVfcnFfc2V0dXBfZG1hYnVmX3NnbChyZXEsIG52bWVxLCBlbnRyaWVzKTtcXG4rXFxuK1xcdHJldHVybiBudm1lX3JxX3NldHVwX2RtYWJ1Zl9tYXAocmVxLCBudm1lcSk7XFxuK31cXG4rXFxuIHN0YXRpYyBibGtfc3RhdHVzX3QgbnZtZV9wY2lfc2V0dXBfZGF0YV9zZ2woc3RydWN0IHJlcXVlc3QgKnJlcSxcXG4gXFx0XFx0c3RydWN0IGJsa19kbWFfaXRlciAqaXRlcilcXG4ge1xcbkBAIC0xMTcxLDcgKzE0NjIsNyBAQCBzdGF0aWMgYmxrX3N0YXR1c190IG52bWVfcGNpX3NldHVwX2RhdGFfc2dsKHN0cnVjdCByZXF1ZXN0ICpyZXEsXFxuIFxcdGlvZC1cXHUwMDNlY21kLmNvbW1vbi5mbGFncyA9IE5WTUVfQ01EX1NHTF9NRVRBQlVGO1xcbiBcXG4gXFx0aWYgKGVudHJpZXMgPT0gMSB8fCBibGtfcnFfZG1hX21hcF9jb2FsZXNjZShcXHUwMDI2aW9kLVxcdTAwM2VkbWFfc3RhdGUpKSB7XFxuLVxcdFxcdG52bWVfcGNpX3NnbF9zZXRfZGF0YShcXHUwMDI2aW9kLVxcdTAwM2VjbWQuY29tbW9uLmRwdHIuc2dsLCBpdGVyKTtcXG4rXFx0XFx0bnZtZV9wY2lfZG1hX2l0ZXJfc2V0X3NnbChcXHUwMDI2aW9kLVxcdTAwM2VjbWQuY29tbW9uLmRwdHIuc2dsLCBpdGVyKTtcXG4gXFx0XFx0aW9kLVxcdTAwM2V0b3RhbF9sZW4gKz0gaXRlci1cXHUwMDNlbGVuO1xcbiBcXHRcXHRyZXR1cm4gQkxLX1NUU19PSztcXG4gXFx0fVxcbkBAIC0xMTkzLDcgKzE0ODQsNyBAQCBzdGF0aWMgYmxrX3N0YXR1c190IG52bWVfcGNpX3NldHVwX2RhdGFfc2dsKHN0cnVjdCByZXF1ZXN0ICpyZXEsXFxuIFxcdFxcdFxcdGl0ZXItXFx1MDAzZXN0YXR1cyA9IEJMS19TVFNfSU9FUlI7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHR9XFxuLVxcdFxcdG52bWVfcGNpX3NnbF9zZXRfZGF0YShcXHUwMDI2c2dfbGlzdFttYXBwZWQrK10sIGl0ZXIpO1xcbitcXHRcXHRudm1lX3BjaV9kbWFfaXRlcl9zZXRfc2dsKFxcdTAwMjZzZ19saXN0W21hcHBlZCsrXSwgaXRlcik7XFxuIFxcdFxcdGlvZC1cXHUwMDNldG90YWxfbGVuICs9IGl0ZXItXFx1MDAzZWxlbjtcXG4gXFx0fSB3aGlsZSAoYmxrX3JxX2RtYV9tYXBfaXRlcl9uZXh0KHJlcSwgbnZtZXEtXFx1MDAzZWRldi1cXHUwMDNlZGV2LCBpdGVyKSk7XFxuIFxcbkBAIC0xMjUxLDYgKzE1NDIsOSBAQCBzdGF0aWMgYmxrX3N0YXR1c190IG52bWVfbWFwX2RhdGEoc3RydWN0IHJlcXVlc3QgKnJlcSlcXG4gXFx0c3RydWN0IGJsa19kbWFfaXRlciBpdGVyO1xcbiBcXHRibGtfc3RhdHVzX3QgcmV0O1xcbiBcXG4rXFx0aWYgKGJsa19tcV9ycV9pc19kbWFidWYocmVxKSlcXG4rXFx0XFx0cmV0dXJuIG52bWVfcnFfc2V0dXBfZG1hYnVmKHJlcSwgbnZtZXEsIHVzZV9zZ2wpO1xcbitcXG4gXFx0LypcXG4gXFx0ICogVHJ5IHRvIHNraXAgdGhlIERNQSBpdGVyYXRvciBmb3Igc2luZ2xlIHNlZ21lbnQgcmVxdWVzdHMsIGFzIHRoYXRcXG4gXFx0ICogc2lnbmlmaWNhbnRseSBpbXByb3ZlcyBwZXJmb3JtYW5jZXMgZm9yIHNtYWxsIEkvTyBzaXplcy5cXG5AQCAtMTM1MywxMyArMTY0NywxMyBAQCBzdGF0aWMgYmxrX3N0YXR1c190IG52bWVfcGNpX3NldHVwX21ldGFfaXRlcihzdHJ1Y3QgcmVxdWVzdCAqcmVxKVxcbiBcXHRpb2QtXFx1MDAzZWNtZC5jb21tb24ubWV0YWRhdGEgPSBjcHVfdG9fbGU2NChzZ2xfZG1hKTtcXG4gXFx0aWYgKGVudHJpZXMgPT0gMSkge1xcbiBcXHRcXHRpb2QtXFx1MDAzZW1ldGFfdG90YWxfbGVuID0gaXRlci5sZW47XFxuLVxcdFxcdG52bWVfcGNpX3NnbF9zZXRfZGF0YShzZ19saXN0LCBcXHUwMDI2aXRlcik7XFxuK1xcdFxcdG52bWVfcGNpX2RtYV9pdGVyX3NldF9zZ2woc2dfbGlzdCwgXFx1MDAyNml0ZXIpO1xcbiBcXHRcXHRyZXR1cm4gQkxLX1NUU19PSztcXG4gXFx0fVxcbiBcXG4gXFx0c2dsX2RtYSArPSBzaXplb2YoKnNnX2xpc3QpO1xcbiBcXHRkbyB7XFxuLVxcdFxcdG52bWVfcGNpX3NnbF9zZXRfZGF0YShcXHUwMDI2c2dfbGlzdFsrK2ldLCBcXHUwMDI2aXRlcik7XFxuK1xcdFxcdG52bWVfcGNpX2RtYV9pdGVyX3NldF9zZ2woXFx1MDAyNnNnX2xpc3RbKytpXSwgXFx1MDAyNml0ZXIpO1xcbiBcXHRcXHRpb2QtXFx1MDAzZW1ldGFfdG90YWxfbGVuICs9IGl0ZXIubGVuO1xcbiBcXHR9IHdoaWxlIChibGtfcnFfaW50ZWdyaXR5X2RtYV9tYXBfaXRlcl9uZXh0KHJlcSwgZGV2LVxcdTAwM2VkZXYsIFxcdTAwMjZpdGVyKSk7XFxuIFxcbkBAIC0yMjY5LDYgKzI1NjMsMTE4IEBAIHN0YXRpYyBpbnQgbnZtZV9jcmVhdGVfcXVldWUoc3RydWN0IG52bWVfcXVldWUgKm52bWVxLCBpbnQgcWlkLCBib29sIHBvbGxlZClcXG4gXFx0cmV0dXJuIHJlc3VsdDtcXG4gfVxcbiBcXG4rI2lmZGVmIENPTkZJR19ETUFfU0hBUkVEX0JVRkZFUlxcbitzdGF0aWMgdm9pZCBudm1lX2RtYWJ1Zl9pbnZhbGlkYXRlX21hcHBpbmdzKHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaClcXG4re1xcbitcXHRzdHJ1Y3QgZG1hX2J1Zl9pb19jdHggKmN0eCA9IGF0dGFjaC1cXHUwMDNlaW1wb3J0ZXJfcHJpdjtcXG4rXFxuK1xcdGRtYV9idWZfaW9faW52YWxpZGF0ZV9tYXBwaW5ncyhjdHgpO1xcbit9XFxuK1xcbitjb25zdCBzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2hfb3BzIG52bWVfZG1hYnVmX2ltcG9ydGVyX29wcyA9IHtcXG4rXFx0LmludmFsaWRhdGVfbWFwcGluZ3NcXHQ9IG52bWVfZG1hYnVmX2ludmFsaWRhdGVfbWFwcGluZ3MsXFxuK1xcdC5hbGxvd19wZWVyMnBlZXJcXHQ9IHRydWUsXFxuK307XFxuK1xcbitzdGF0aWMgc3RydWN0IGRtYV9idWZfaW9fbWFwICpudm1lX2RtYV9idWZfaW9fbWFwKHN0cnVjdCBkbWFfYnVmX2lvX2N0eCAqY3R4KVxcbit7XFxuK1xcdHVuc2lnbmVkIG5yX2VudHJpZXMgPSBjdHgtXFx1MDAzZWRtYWJ1Zi1cXHUwMDNlc2l6ZSAvIE5WTUVfQ1RSTF9QQUdFX1NJWkU7XFxuK1xcdHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaCA9IGN0eC1cXHUwMDNlZGV2X3ByaXY7XFxuK1xcdHVuc2lnbmVkIGxvbmcgdG1wLCBpID0gMDtcXG4rXFx0dW5zaWduZWQgc2VnX3NoaWZ0ID0gfjBVO1xcbitcXHRzdHJ1Y3QgbnZtZV9kbWFidWZfbWFwICptYXA7XFxuK1xcdHN0cnVjdCBzY2F0dGVybGlzdCAqc2c7XFxuK1xcdHN0cnVjdCBzZ190YWJsZSAqc2d0O1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0ZG1hX3Jlc3ZfYXNzZXJ0X2hlbGQoY3R4LVxcdTAwM2VkbWFidWYtXFx1MDAzZXJlc3YpO1xcbitcXG4rXFx0bWFwID0ga21hbGxvY19mbGV4KCptYXAsIGRtYV9saXN0LCBucl9lbnRyaWVzKTtcXG4rXFx0aWYgKCFtYXApXFxuK1xcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xcbitcXG4rXFx0c2d0ID0gZG1hX2J1Zl9tYXBfYXR0YWNobWVudChhdHRhY2gsIGN0eC1cXHUwMDNlZGlyKTtcXG4rXFx0aWYgKElTX0VSUihzZ3QpKSB7XFxuK1xcdFxcdHJldCA9IFBUUl9FUlIoc2d0KTtcXG4rXFx0XFx0c2d0ID0gTlVMTDtcXG4rXFx0XFx0Z290byBlcnI7XFxuK1xcdH1cXG4rXFxuK1xcdGZvcl9lYWNoX3NndGFibGVfZG1hX3NnKHNndCwgc2csIHRtcCkge1xcbitcXHRcXHRkbWFfYWRkcl90IGRtYV9hZGRyID0gc2dfZG1hX2FkZHJlc3Moc2cpO1xcbitcXHRcXHR1bnNpZ25lZCBsb25nIHNnX2xlbiA9IHNnX2RtYV9sZW4oc2cpO1xcbitcXG4rXFx0XFx0aWYgKHNnX2xlbiAlIE5WTUVfQ1RSTF9QQUdFX1NJWkUpIHtcXG4rXFx0XFx0XFx0cmV0ID0gLUVJTlZBTDtcXG4rXFx0XFx0XFx0Z290byBlcnI7XFxuK1xcdFxcdH1cXG4rXFx0XFx0c2VnX3NoaWZ0ID0gbWluKHNlZ19zaGlmdCwgX19mZnMoc2dfbGVuKSk7XFxuK1xcbitcXHRcXHR3aGlsZSAoc2dfbGVuKSB7XFxuK1xcdFxcdFxcdG1hcC1cXHUwMDNlZG1hX2xpc3RbaSsrXSA9IGRtYV9hZGRyO1xcbitcXHRcXHRcXHRkbWFfYWRkciArPSBOVk1FX0NUUkxfUEFHRV9TSVpFO1xcbitcXHRcXHRcXHRzZ19sZW4gLT0gTlZNRV9DVFJMX1BBR0VfU0laRTtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRpZiAoV0FSTl9PTl9PTkNFKHNlZ19zaGlmdCBcXHUwMDNjIE5WTUVfQ1RSTF9QQUdFX1NISUZUKSlcXG4rXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVGQVVMVCk7XFxuK1xcbitcXHRyZXQgPSBkbWFfYnVmX2lvX2luaXRfbWFwKGN0eCwgXFx1MDAyNm1hcC1cXHUwMDNlYmFzZSk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gZXJyO1xcbitcXHRtYXAtXFx1MDAzZWJhc2Uuc2VnX3NoaWZ0ID0gc2VnX3NoaWZ0O1xcbitcXHRtYXAtXFx1MDAzZW5yX2VudHJpZXMgPSBucl9lbnRyaWVzO1xcbitcXHRtYXAtXFx1MDAzZXNndCA9IHNndDtcXG4rXFx0cmV0dXJuIFxcdTAwMjZtYXAtXFx1MDAzZWJhc2U7XFxuK2VycjpcXG4rXFx0aWYgKHNndClcXG4rXFx0XFx0ZG1hX2J1Zl91bm1hcF9hdHRhY2htZW50KGF0dGFjaCwgc2d0LCBjdHgtXFx1MDAzZWRpcik7XFxuK1xcdGtmcmVlKG1hcCk7XFxuK1xcdHJldHVybiBFUlJfUFRSKHJldCk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIG52bWVfZG1hX2J1Zl9pb191bm1hcChzdHJ1Y3QgZG1hX2J1Zl9pb19jdHggKmN0eCxcXG4rXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgZG1hX2J1Zl9pb19tYXAgKm1hcF9iYXNlKVxcbit7XFxuK1xcdHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaCA9IGN0eC1cXHUwMDNlZGV2X3ByaXY7XFxuK1xcdHN0cnVjdCBudm1lX2RtYWJ1Zl9tYXAgKm1hcCA9IHRvX252bWVfZG1hYnVmX21hcChtYXBfYmFzZSk7XFxuK1xcbitcXHRkbWFfcmVzdl9hc3NlcnRfaGVsZChjdHgtXFx1MDAzZWRtYWJ1Zi1cXHUwMDNlcmVzdik7XFxuK1xcbitcXHRkbWFfYnVmX3VubWFwX2F0dGFjaG1lbnQoYXR0YWNoLCBtYXAtXFx1MDAzZXNndCwgY3R4LVxcdTAwM2VkaXIpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBudm1lX2RtYV9idWZfaW9fcmVsZWFzZShzdHJ1Y3QgZG1hX2J1Zl9pb19jdHggKmN0eClcXG4re1xcbitcXHRzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2ggPSBjdHgtXFx1MDAzZWRldl9wcml2O1xcbitcXG4rXFx0ZG1hX2J1Zl9kZXRhY2goY3R4LVxcdTAwM2VkbWFidWYsIGF0dGFjaCk7XFxuK31cXG4rXFxuK2NvbnN0IHN0cnVjdCBkbWFfYnVmX2lvX29wcyBudm1lX2RtYV9idWZfaW9fb3BzID0ge1xcbitcXHQubWFwXFx0XFx0PSBudm1lX2RtYV9idWZfaW9fbWFwLFxcbitcXHQudW5tYXBcXHRcXHQ9IG52bWVfZG1hX2J1Zl9pb191bm1hcCxcXG4rXFx0LnJlbGVhc2VcXHQ9IG52bWVfZG1hX2J1Zl9pb19yZWxlYXNlLFxcbit9O1xcbitcXG4rc3RhdGljIGludCBudm1lX3BjaV9pbml0X2RtYV9idWZfaW9fY3R4KHN0cnVjdCBudm1lX2N0cmwgKmN0cmwsXFxuK1xcdFxcdFxcdFxcdFxcdHN0cnVjdCBkbWFfYnVmX2lvX2N0eCAqY3R4KVxcbit7XFxuK1xcdHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaDtcXG4rXFx0c3RydWN0IG52bWVfZGV2ICpkZXYgPSB0b19udm1lX2RldihjdHJsKTtcXG4rXFxuK1xcdGF0dGFjaCA9IGRtYV9idWZfZHluYW1pY19hdHRhY2goY3R4LVxcdTAwM2VkbWFidWYsIGRldi1cXHUwMDNlZGV2LFxcbitcXHRcXHRcXHRcXHRcXHRcXHUwMDI2bnZtZV9kbWFidWZfaW1wb3J0ZXJfb3BzLCBjdHgpO1xcbitcXHRpZiAoSVNfRVJSKGF0dGFjaCkpXFxuK1xcdFxcdHJldHVybiBQVFJfRVJSKGF0dGFjaCk7XFxuK1xcbitcXHRjdHgtXFx1MDAzZWRldl9wcml2ID0gYXR0YWNoO1xcbitcXHRjdHgtXFx1MDAzZWRldl9vcHMgPSBcXHUwMDI2bnZtZV9kbWFfYnVmX2lvX29wcztcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rI2VuZGlmXFxuK1xcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGJsa19tcV9vcHMgbnZtZV9tcV9hZG1pbl9vcHMgPSB7XFxuIFxcdC5xdWV1ZV9ycVxcdD0gbnZtZV9xdWV1ZV9ycSxcXG4gXFx0LmNvbXBsZXRlXFx0PSBudm1lX3BjaV9jb21wbGV0ZV9ycSxcXG5AQCAtMzU2Myw2ICszOTY5LDkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBudm1lX2N0cmxfb3BzIG52bWVfcGNpX2N0cmxfb3BzID0ge1xcbiBcXHQucHJpbnRfZGV2aWNlX2luZm9cXHQ9IG52bWVfcGNpX3ByaW50X2RldmljZV9pbmZvLFxcbiBcXHQuc3VwcG9ydHNfcGNpX3AycGRtYVxcdD0gbnZtZV9wY2lfc3VwcG9ydHNfcGNpX3AycGRtYSxcXG4gXFx0LmdldF92aXJ0X2JvdW5kYXJ5XFx0PSBudm1lX3BjaV9nZXRfdmlydF9ib3VuZGFyeSxcXG4rI2lmZGVmIENPTkZJR19ETUFfU0hBUkVEX0JVRkZFUlxcbitcXHQuaW5pdF9kbWFfYnVmX2lvX2N0eFxcdD0gbnZtZV9wY2lfaW5pdF9kbWFfYnVmX2lvX2N0eCxcXG4rI2VuZGlmXFxuIH07XFxuIFxcbiBzdGF0aWMgaW50IG52bWVfZGV2X21hcChzdHJ1Y3QgbnZtZV9kZXYgKmRldilcXG5AQCAtNDMyNyw1ICs0NzM2LDYgQEAgTU9EVUxFX0FVVEhPUihcXFwiTWF0dGhldyBXaWxjb3ggXFx1MDAzY3dpbGx5QGxpbnV4LmludGVsLmNvbVxcdTAwM2VcXFwiKTtcXG4gTU9EVUxFX0xJQ0VOU0UoXFxcIkdQTFxcXCIpO1xcbiBNT0RVTEVfVkVSU0lPTihcXFwiMS4wXFxcIik7XFxuIE1PRFVMRV9ERVNDUklQVElPTihcXFwiTlZNZSBob3N0IFBDSWUgdHJhbnNwb3J0IGRyaXZlclxcXCIpO1xcbitNT0RVTEVfSU1QT1JUX05TKFxcXCJETUFfQlVGXFxcIik7XFxuIG1vZHVsZV9pbml0KG52bWVfaW5pdCk7XFxuIG1vZHVsZV9leGl0KG52bWVfZXhpdCk7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbnZtZS9ob3N0L3RjcC5jIGIvZHJpdmVycy9udm1lL2hvc3QvdGNwLmNcXG5pbmRleCBiYTVjN2IzZTJhN2M2Li5jZTAzYTBlYTRkZWQ3IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbnZtZS9ob3N0L3RjcC5jXFxuKysrIGIvZHJpdmVycy9udm1lL2hvc3QvdGNwLmNcXG5AQCAtMzU3LDcgKzM1Nyw3IEBAIHN0YXRpYyB2b2lkIG52bWVfdGNwX2luaXRfaXRlcihzdHJ1Y3QgbnZtZV90Y3BfcmVxdWVzdCAqcmVxLFxcbiBcXHRcXHRpb3ZfaXRlcl9idmVjKFxcdTAwMjZyZXEtXFx1MDAzZWl0ZXIsIGRpcixcXG4gXFx0XFx0XFx0X19idmVjX2l0ZXJfYnZlYyhiaW8tXFx1MDAzZWJpX2lvX3ZlYywgYmlvLVxcdTAwM2ViaV9pdGVyKSwgbnJfYnZlYyxcXG4gXFx0XFx0XFx0YmlvLVxcdTAwM2ViaV9pdGVyLmJpX3NpemUpO1xcbi1cXHRcXHRyZXEtXFx1MDAzZWl0ZXIuaW92X29mZnNldCA9IGJpby1cXHUwMDNlYmlfaXRlci5iaV9idmVjX2RvbmU7XFxuK1xcdFxcdHJlcS1cXHUwMDNlaXRlci5pb3Zfb2Zmc2V0ID0gYmlvLVxcdTAwM2ViaV9pdGVyLmJpX29mZnNldDtcXG4gXFx0fVxcbiB9XFxuIFxcbmRpZmYgLS1naXQgYS9mcy9idHJmcy9taXNjLmggYi9mcy9idHJmcy9taXNjLmhcXG5pbmRleCA2OTRiZTZkMDU2MmE0Li44MDIwNjA5NDMxODAxIDEwMDY0NFxcbi0tLSBhL2ZzL2J0cmZzL21pc2MuaFxcbisrKyBiL2ZzL2J0cmZzL21pc2MuaFxcbkBAIC03NCw3ICs3NCw3IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IGJ2ZWNfaXRlciBpbml0X2J2ZWNfaXRlcl9mb3JfYmlvKHN0cnVjdCBiaW8gKmJpbylcXG4gXFx0XFx0LmJpX3NlY3RvciA9IDAsXFxuIFxcdFxcdC5iaV9zaXplID0gYmlvX3NpemUsXFxuIFxcdFxcdC5iaV9pZHggPSAwLFxcbi1cXHRcXHQuYmlfYnZlY19kb25lID0gMCxcXG4rXFx0XFx0LmJpX29mZnNldCA9IDAsXFxuIFxcdH07XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYmlvLmggYi9pbmNsdWRlL2xpbnV4L2Jpby5oXFxuaW5kZXggMDQ0NWVjYmEzYjI0Ny4uMjJjZTlkZWIyZmViYiAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2Jpby5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9iaW8uaFxcbkBAIC04MCw3ICs4MCw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBiaW9fbm9fYWR2YW5jZV9pdGVyKGNvbnN0IHN0cnVjdCBiaW8gKmJpbylcXG4ge1xcbiBcXHRyZXR1cm4gYmlvX29wKGJpbykgPT0gUkVRX09QX0RJU0NBUkQgfHxcXG4gXFx0ICAgICAgIGJpb19vcChiaW8pID09IFJFUV9PUF9TRUNVUkVfRVJBU0UgfHxcXG4tXFx0ICAgICAgIGJpb19vcChiaW8pID09IFJFUV9PUF9XUklURV9aRVJPRVM7XFxuK1xcdCAgICAgICBiaW9fb3AoYmlvKSA9PSBSRVFfT1BfV1JJVEVfWkVST0VTIHx8XFxuK1xcdCAgICAgICBvcF9pc19kbWFidWYoYmlvLVxcdTAwM2ViaV9vcGYpO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW5saW5lIHZvaWQgKmJpb19kYXRhKHN0cnVjdCBiaW8gKmJpbylcXG5AQCAtMTEzLDExICsxMTQsMTMgQEAgc3RhdGljIGlubGluZSB2b2lkIGJpb19hZHZhbmNlX2l0ZXIoY29uc3Qgc3RydWN0IGJpbyAqYmlvLFxcbiB7XFxuIFxcdGl0ZXItXFx1MDAzZWJpX3NlY3RvciArPSBieXRlcyBcXHUwMDNlXFx1MDAzZSA5O1xcbiBcXG4tXFx0aWYgKGJpb19ub19hZHZhbmNlX2l0ZXIoYmlvKSlcXG4rXFx0aWYgKGJpb19ub19hZHZhbmNlX2l0ZXIoYmlvKSkge1xcbiBcXHRcXHRpdGVyLVxcdTAwM2ViaV9zaXplIC09IGJ5dGVzO1xcbi1cXHRlbHNlXFxuK1xcdFxcdGl0ZXItXFx1MDAzZWJpX29mZnNldCArPSBieXRlcztcXG4rXFx0fSBlbHNlIHtcXG4gXFx0XFx0YnZlY19pdGVyX2FkdmFuY2UoYmlvLVxcdTAwM2ViaV9pb192ZWMsIGl0ZXIsIGJ5dGVzKTtcXG4gXFx0XFx0LyogVE9ETzogSXQgaXMgcmVhc29uYWJsZSB0byBjb21wbGV0ZSBiaW8gd2l0aCBlcnJvciBoZXJlLiAqL1xcbitcXHR9XFxuIH1cXG4gXFxuIC8qIEBieXRlcyBzaG91bGQgYmUgbGVzcyBvciBlcXVhbCB0byBidmVjW2ktXFx1MDAzZWJpX2lkeF0uYnZfbGVuICovXFxuQEAgLTEyNywxMCArMTMwLDEyIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBiaW9fYWR2YW5jZV9pdGVyX3NpbmdsZShjb25zdCBzdHJ1Y3QgYmlvICpiaW8sXFxuIHtcXG4gXFx0aXRlci1cXHUwMDNlYmlfc2VjdG9yICs9IGJ5dGVzIFxcdTAwM2VcXHUwMDNlIDk7XFxuIFxcbi1cXHRpZiAoYmlvX25vX2FkdmFuY2VfaXRlcihiaW8pKVxcbitcXHRpZiAoYmlvX25vX2FkdmFuY2VfaXRlcihiaW8pKSB7XFxuIFxcdFxcdGl0ZXItXFx1MDAzZWJpX3NpemUgLT0gYnl0ZXM7XFxuLVxcdGVsc2VcXG4rXFx0XFx0aXRlci1cXHUwMDNlYmlfb2Zmc2V0ICs9IGJ5dGVzO1xcbitcXHR9IGVsc2Uge1xcbiBcXHRcXHRidmVjX2l0ZXJfYWR2YW5jZV9zaW5nbGUoYmlvLVxcdTAwM2ViaV9pb192ZWMsIGl0ZXIsIGJ5dGVzKTtcXG4rXFx0fVxcbiB9XFxuIFxcbiB2b2lkIF9fYmlvX2FkdmFuY2Uoc3RydWN0IGJpbyAqLCB1bnNpZ25lZCBieXRlcyk7XFxuQEAgLTQzNCwxMiArNDM5LDEyIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBiaW9fd291bGRibG9ja19lcnJvcihzdHJ1Y3QgYmlvICpiaW8pXFxuIFxcbiAvKlxcbiAgKiBDYWxjdWxhdGUgbnVtYmVyIG9mIGJ2ZWMgc2VnbWVudHMgdGhhdCBzaG91bGQgYmUgYWxsb2NhdGVkIHRvIGZpdCBkYXRhXFxuLSAqIHBvaW50ZWQgYnkgQGl0ZXIuIElmIEBpdGVyIGlzIGJhY2tlZCBieSBidmVjIGl0J3MgZ29pbmcgdG8gYmUgcmV1c2VkXFxuLSAqIGluc3RlYWQgb2YgYWxsb2NhdGluZyBhIG5ldyBvbmUuXFxuKyAqIHBvaW50ZWQgYnkgQGl0ZXIuIElmIEBpdGVyIGlzIGJhY2tlZCBieSBhIGJ2ZWMgb3IgYSBkbWFidWYsIHRoZSBidmVjIGFycmF5IC9cXG4rICogdGhlIGRtYSBtYXAgYXJlIGdvaW5nIHRvIGJlIHJldXNlZCwgYW5kIHNvIG5vIGV4dHJhIGFsbG9jYXRpb24gaXMgcmVxdWlyZWQuXFxuICAqL1xcbiBzdGF0aWMgaW5saW5lIGludCBiaW9faW92X3ZlY3NfdG9fYWxsb2Moc3RydWN0IGlvdl9pdGVyICppdGVyLCBpbnQgbWF4X3NlZ3MpXFxuIHtcXG4tXFx0aWYgKGlvdl9pdGVyX2lzX2J2ZWMoaXRlcikpXFxuK1xcdGlmIChpb3ZfaXRlcl9pc19idmVjKGl0ZXIpIHx8IGlvdl9pdGVyX2lzX2RtYWJ1Zl9tYXAoaXRlcikpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXHRyZXR1cm4gaW92X2l0ZXJfbnBhZ2VzKGl0ZXIsIG1heF9zZWdzKTtcXG4gfVxcbkBAIC01MTgsNyArNTIzLDcgQEAgaW50IGJkZXZfcndfdmlydChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBzZWN0b3JfdCBzZWN0b3IsIHZvaWQgKmRhdGEsXFxuIGludCBiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGlvdl9pdGVyICppdGVyLFxcbiBcXHRcXHR1bnNpZ25lZCBtZW1fYWxpZ25fbWFzaywgdW5zaWduZWQgbGVuX2FsaWduX21hc2spO1xcbiBcXG4tdm9pZCBiaW9faW92X2J2ZWNfc2V0KHN0cnVjdCBiaW8gKmJpbywgY29uc3Qgc3RydWN0IGlvdl9pdGVyICppdGVyKTtcXG4rYm9vbCBiaW9faW92X2l0ZXJfc2V0KHN0cnVjdCBiaW8gKmJpbywgY29uc3Qgc3RydWN0IGlvdl9pdGVyICppdGVyKTtcXG4gdm9pZCBfX2Jpb19yZWxlYXNlX3BhZ2VzKHN0cnVjdCBiaW8gKmJpbywgYm9vbCBtYXJrX2RpcnR5KTtcXG4gZXh0ZXJuIHZvaWQgYmlvX3NldF9wYWdlc19kaXJ0eShzdHJ1Y3QgYmlvICpiaW8pO1xcbiBleHRlcm4gdm9pZCBiaW9fY2hlY2tfcGFnZXNfZGlydHkoc3RydWN0IGJpbyAqYmlvKTtcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ibGstbXEuaCBiL2luY2x1ZGUvbGludXgvYmxrLW1xLmhcXG5pbmRleCBhZjg3ODU5N2FmYjhjLi43Yzc1MDRjODRlMDkwIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvYmxrLW1xLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2Jsay1tcS5oXFxuQEAgLTEwMTcsNiArMTAxNywxMyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgKmJsa19tcV9ycV90b19wZHUoc3RydWN0IHJlcXVlc3QgKnJxKVxcbiBcXHRyZXR1cm4gcnEgKyAxO1xcbiB9XFxuIFxcbitzdGF0aWMgaW5saW5lIGJvb2wgYmxrX21xX3JxX2lzX2RtYWJ1ZihzdHJ1Y3QgcmVxdWVzdCAqcnEpXFxuK3tcXG4rXFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19ETUFfU0hBUkVEX0JVRkZFUikpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0cmV0dXJuIHJxLVxcdTAwM2ViaW8gXFx1MDAyNlxcdTAwMjYgb3BfaXNfZG1hYnVmKHJxLVxcdTAwM2ViaW8tXFx1MDAzZWJpX29wZik7XFxuK31cXG4rXFxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IGJsa19tcV9od19jdHggKnF1ZXVlX2hjdHgoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIGludCBpZClcXG4ge1xcbiBcXHRzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqaGN0eDtcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ibGtfdHlwZXMuaCBiL2luY2x1ZGUvbGludXgvYmxrX3R5cGVzLmhcXG5pbmRleCBkNDlkOTdhMDUwZDBlLi5hMzA1OTUxZjAzMTI0IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvYmxrX3R5cGVzLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2Jsa190eXBlcy5oXFxuQEAgLTIzMyw3ICsyMzMsMTIgQEAgc3RydWN0IGJpbyB7XFxuIFxcdGF0b21pY190XFx0XFx0X19iaV9yZW1haW5pbmc7XFxuIFxcbiBcXHQvKiBUaGUgYWN0dWFsIHZlYyBsaXN0LCBwcmVzZXJ2ZWQgYnkgYmlvX3Jlc2V0KCkgKi9cXG4tXFx0c3RydWN0IGJpb192ZWNcXHRcXHQqYmlfaW9fdmVjO1xcbitcXHR1bmlvbiB7XFxuK1xcdFxcdHN0cnVjdCBiaW9fdmVjXFx0XFx0KmJpX2lvX3ZlYztcXG4rXFx0XFx0LyogRHJpdmVyIHNwZWNpZmljIGRtYSBtYXAsIHZhbGlkIElGRiBSRVFfRE1BQlVGIGlzIHNldCAqL1xcbitcXHRcXHRzdHJ1Y3QgZG1hX2J1Zl9pb19tYXBcXHQqYmlfZG1hYnVmX21hcDtcXG4rXFx0fTtcXG4rXFxuIFxcdHN0cnVjdCBidmVjX2l0ZXJcXHRiaV9pdGVyO1xcbiBcXG4gXFx0dW5pb24ge1xcbkBAIC00MDIsNiArNDA3LDcgQEAgZW51bSByZXFfZmxhZ19iaXRzIHtcXG4gXFx0X19SRVFfRFJWLFxcdFxcdC8qIGZvciBkcml2ZXIgdXNlICovXFxuIFxcdF9fUkVRX0ZTX1BSSVZBVEUsXFx0LyogZm9yIGZpbGUgc3lzdGVtIChzdWJtaXR0ZXIpIHVzZSAqL1xcbiBcXHRfX1JFUV9BVE9NSUMsXFx0XFx0LyogZm9yIGF0b21pYyB3cml0ZSBvcGVyYXRpb25zICovXFxuK1xcdF9fUkVRX0RNQUJVRixcXHRcXHQvKiBVc2luZyBwcmVtbWFwZWQgZG1hIGJ1ZmZlcnMgKi9cXG4gXFx0LypcXG4gXFx0ICogQ29tbWFuZCBzcGVjaWZpYyBmbGFncywga2VlcCBsYXN0OlxcbiBcXHQgKi9cXG5AQCAtNDM0LDYgKzQ0MCw3IEBAIGVudW0gcmVxX2ZsYWdfYml0cyB7XFxuICNkZWZpbmUgUkVRX0RSVlxcdFxcdChfX2ZvcmNlIGJsa19vcGZfdCkoMVVMTCBcXHUwMDNjXFx1MDAzYyBfX1JFUV9EUlYpXFxuICNkZWZpbmUgUkVRX0ZTX1BSSVZBVEVcXHQoX19mb3JjZSBibGtfb3BmX3QpKDFVTEwgXFx1MDAzY1xcdTAwM2MgX19SRVFfRlNfUFJJVkFURSlcXG4gI2RlZmluZSBSRVFfQVRPTUlDXFx0KF9fZm9yY2UgYmxrX29wZl90KSgxVUxMIFxcdTAwM2NcXHUwMDNjIF9fUkVRX0FUT01JQylcXG4rI2RlZmluZSBSRVFfRE1BQlVGXFx0KF9fZm9yY2UgYmxrX29wZl90KSgxVUxMIFxcdTAwM2NcXHUwMDNjIF9fUkVRX0RNQUJVRilcXG4gXFxuICNkZWZpbmUgUkVRX05PVU5NQVBcXHQoX19mb3JjZSBibGtfb3BmX3QpKDFVTEwgXFx1MDAzY1xcdTAwM2MgX19SRVFfTk9VTk1BUClcXG4gXFxuQEAgLTQ4Nyw2ICs0OTQsMTEgQEAgc3RhdGljIGlubGluZSBib29sIG9wX2lzX2Rpc2NhcmQoYmxrX29wZl90IG9wKVxcbiBcXHRyZXR1cm4gKG9wIFxcdTAwMjYgUkVRX09QX01BU0spID09IFJFUV9PUF9ESVNDQVJEO1xcbiB9XFxuIFxcbitzdGF0aWMgaW5saW5lIGJvb2wgb3BfaXNfZG1hYnVmKGJsa19vcGZfdCBvcClcXG4re1xcbitcXHRyZXR1cm4gb3AgXFx1MDAyNiBSRVFfRE1BQlVGO1xcbit9XFxuK1xcbiAvKlxcbiAgKiBDaGVjayBpZiBhIGJpbyBvciByZXF1ZXN0IG9wZXJhdGlvbiBpcyBhIHpvbmUgbWFuYWdlbWVudCBvcGVyYXRpb24uXFxuICAqL1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oIGIvaW5jbHVkZS9saW51eC9ibGtkZXYuaFxcbmluZGV4IDkyMTNhNTcxNmY5NWEuLjlmNGM5MmU1MWRjOTUgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9ibGtkZXYuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvYmxrZGV2LmhcXG5AQCAtMTY4Miw2ICsxNjgyLDggQEAgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIHtcXG4gXFx0LyogcmV0dXJucyB0aGUgbGVuZ3RoIG9mIHRoZSBpZGVudGlmaWVyIG9yIGEgbmVnYXRpdmUgZXJybm86ICovXFxuIFxcdGludCAoKmdldF91bmlxdWVfaWQpKHN0cnVjdCBnZW5kaXNrICpkaXNrLCB1OCBpZFsxNl0sXFxuIFxcdFxcdFxcdGVudW0gYmxrX3VuaXF1ZV9pZCBpZF90eXBlKTtcXG4rXFx0aW50ICgqaW5pdF9kbWFfYnVmX2lvX2N0eCkoc3RydWN0IGJsb2NrX2RldmljZSAqLFxcbitcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgZG1hX2J1Zl9pb19jdHggKik7XFxuIFxcdHN0cnVjdCBtb2R1bGUgKm93bmVyO1xcbiBcXHRjb25zdCBzdHJ1Y3QgcHJfb3BzICpwcl9vcHM7XFxuIFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2J2ZWMuaCBiL2luY2x1ZGUvbGludXgvYnZlYy5oXFxuaW5kZXggOTI4MzdlMjc0M2YxOS4uYjYzOTE0ZmY1NmUzMyAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2J2ZWMuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvYnZlYy5oXFxuQEAgLTEwOCw5ICsxMDgsMTAgQEAgc3RydWN0IGJ2ZWNfaXRlciB7XFxuIFxcdHVuc2lnbmVkIGludFxcdFxcdGJpX2lkeDtcXG4gXFxuIFxcdC8qXFxuLVxcdCAqIEN1cnJlbnQgb2Zmc2V0IGluIHRoZSBidmVjIGVudHJ5IHBvaW50ZWQgdG8gYnkgYGJpX2lkeGAuXFxuK1xcdCAqIEN1cnJlbnQgb2Zmc2V0IGluIHRoZSBidmVjIGVudHJ5IHBvaW50ZWQgdG8gYnkgYGJpX2lkeGAgb3IgaW50b1xcbitcXHQgKiBhIGRtYS1idWYgbWFwLlxcbiBcXHQgKi9cXG4tXFx0dW5zaWduZWQgaW50XFx0XFx0YmlfYnZlY19kb25lO1xcbitcXHR1bnNpZ25lZCBpbnRcXHRcXHRiaV9vZmZzZXQ7XFxuIH0gX19wYWNrZWQgX19hbGlnbmVkKDQpO1xcbiBcXG4gc3RydWN0IGJ2ZWNfaXRlcl9hbGwge1xcbkBAIC0xMzUsMTQgKzEzNiwxNCBAQCBtcF9idmVjX2l0ZXJfcGFnZShjb25zdCBzdHJ1Y3QgYmlvX3ZlYyAqYnZlY3MsIGNvbnN0IHN0cnVjdCBidmVjX2l0ZXIgaXRlcilcXG4gc3RhdGljIF9fYWx3YXlzX2lubGluZSB1bnNpZ25lZCBpbnRcXG4gbXBfYnZlY19pdGVyX2xlbihjb25zdCBzdHJ1Y3QgYmlvX3ZlYyAqYnZlY3MsIGNvbnN0IHN0cnVjdCBidmVjX2l0ZXIgaXRlcilcXG4ge1xcbi1cXHRyZXR1cm4gbWluKF9fYnZlY19pdGVyX2J2ZWMoYnZlY3MsIGl0ZXIpLVxcdTAwM2Vidl9sZW4gLSBpdGVyLmJpX2J2ZWNfZG9uZSxcXG4rXFx0cmV0dXJuIG1pbihfX2J2ZWNfaXRlcl9idmVjKGJ2ZWNzLCBpdGVyKS1cXHUwMDNlYnZfbGVuIC0gaXRlci5iaV9vZmZzZXQsXFxuIFxcdFxcdFxcdGl0ZXIuYmlfc2l6ZSk7XFxuIH1cXG4gXFxuIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdW5zaWduZWQgaW50XFxuIG1wX2J2ZWNfaXRlcl9vZmZzZXQoY29uc3Qgc3RydWN0IGJpb192ZWMgKmJ2ZWNzLCBjb25zdCBzdHJ1Y3QgYnZlY19pdGVyIGl0ZXIpXFxuIHtcXG4tXFx0cmV0dXJuIF9fYnZlY19pdGVyX2J2ZWMoYnZlY3MsIGl0ZXIpLVxcdTAwM2Vidl9vZmZzZXQgKyBpdGVyLmJpX2J2ZWNfZG9uZTtcXG4rXFx0cmV0dXJuIF9fYnZlY19pdGVyX2J2ZWMoYnZlY3MsIGl0ZXIpLVxcdTAwM2Vidl9vZmZzZXQgKyBpdGVyLmJpX29mZnNldDtcXG4gfVxcbiBcXG4gc3RhdGljIF9fYWx3YXlzX2lubGluZSB1bnNpZ25lZCBpbnRcXG5AQCAtMjA0LDcgKzIwNSw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBidmVjX2l0ZXJfYWR2YW5jZShjb25zdCBzdHJ1Y3QgYmlvX3ZlYyAqYnYsXFxuIFxcdH1cXG4gXFxuIFxcdGl0ZXItXFx1MDAzZWJpX3NpemUgLT0gYnl0ZXM7XFxuLVxcdGJ5dGVzICs9IGl0ZXItXFx1MDAzZWJpX2J2ZWNfZG9uZTtcXG4rXFx0Ynl0ZXMgKz0gaXRlci1cXHUwMDNlYmlfb2Zmc2V0O1xcbiBcXG4gXFx0d2hpbGUgKGJ5dGVzIFxcdTAwMjZcXHUwMDI2IGJ5dGVzIFxcdTAwM2U9IGJ2W2lkeF0uYnZfbGVuKSB7XFxuIFxcdFxcdGJ5dGVzIC09IGJ2W2lkeF0uYnZfbGVuO1xcbkBAIC0yMTIsNyArMjEzLDcgQEAgc3RhdGljIGlubGluZSBib29sIGJ2ZWNfaXRlcl9hZHZhbmNlKGNvbnN0IHN0cnVjdCBiaW9fdmVjICpidixcXG4gXFx0fVxcbiBcXG4gXFx0aXRlci1cXHUwMDNlYmlfaWR4ID0gaWR4O1xcbi1cXHRpdGVyLVxcdTAwM2ViaV9idmVjX2RvbmUgPSBieXRlcztcXG4rXFx0aXRlci1cXHUwMDNlYmlfb2Zmc2V0ID0gYnl0ZXM7XFxuIFxcdHJldHVybiB0cnVlO1xcbiB9XFxuIFxcbkBAIC0yMjMsMTMgKzIyNCwxMyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgYnZlY19pdGVyX2FkdmFuY2UoY29uc3Qgc3RydWN0IGJpb192ZWMgKmJ2LFxcbiBzdGF0aWMgaW5saW5lIHZvaWQgYnZlY19pdGVyX2FkdmFuY2Vfc2luZ2xlKGNvbnN0IHN0cnVjdCBiaW9fdmVjICpidixcXG4gXFx0XFx0XFx0XFx0c3RydWN0IGJ2ZWNfaXRlciAqaXRlciwgdW5zaWduZWQgaW50IGJ5dGVzKVxcbiB7XFxuLVxcdHVuc2lnbmVkIGludCBkb25lID0gaXRlci1cXHUwMDNlYmlfYnZlY19kb25lICsgYnl0ZXM7XFxuK1xcdHVuc2lnbmVkIGludCBkb25lID0gaXRlci1cXHUwMDNlYmlfb2Zmc2V0ICsgYnl0ZXM7XFxuIFxcbiBcXHRpZiAoZG9uZSA9PSBidltpdGVyLVxcdTAwM2ViaV9pZHhdLmJ2X2xlbikge1xcbiBcXHRcXHRkb25lID0gMDtcXG4gXFx0XFx0aXRlci1cXHUwMDNlYmlfaWR4Kys7XFxuIFxcdH1cXG4tXFx0aXRlci1cXHUwMDNlYmlfYnZlY19kb25lID0gZG9uZTtcXG4rXFx0aXRlci1cXHUwMDNlYmlfb2Zmc2V0ID0gZG9uZTtcXG4gXFx0aXRlci1cXHUwMDNlYmlfc2l6ZSAtPSBieXRlcztcXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kbWEtYnVmLWlvLmggYi9pbmNsdWRlL2xpbnV4L2RtYS1idWYtaW8uaFxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZjMxYzczNzVhZTkxMVxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2RtYS1idWYtaW8uaFxcbkBAIC0wLDAgKzEsOTIgQEBcXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cXG4rI2lmbmRlZiBfX0RNQV9CVUZfSU9fSF9fXFxuKyNkZWZpbmUgX19ETUFfQlVGX0lPX0hfX1xcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RtYS1idWYuaFxcdTAwM2VcXG4rXFxuK3N0cnVjdCBkbWFfYnVmX2lvX2ZlbmNlO1xcbitzdHJ1Y3QgZG1hX2J1Zl9pb19jdHg7XFxuK3N0cnVjdCBkbWFfYnVmX2lvX21hcDtcXG4rXFxuK3N0cnVjdCBkbWFfYnVmX2lvX29wcyB7XFxuK1xcdC8qXFxuK1xcdCAqIENyZWF0ZSBhIG5ldyBtYXAgZm9yIHRoZSBnaXZlbiBjdHguIENhbGxlZCB3aXRoIHRoZSByZXNlcnZhdGlvblxcbitcXHQgKiBsb2NrIGhlbGQuXFxuK1xcdCAqL1xcbitcXHRzdHJ1Y3QgZG1hX2J1Zl9pb19tYXAgKigqbWFwKShzdHJ1Y3QgZG1hX2J1Zl9pb19jdHggKmN0eCk7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBDbGVhbiB1cCBkZXZpY2Ugc3BlY2lmaWMgcGFydHMgb2YgdGhlIEBtYXAuIENhbGxlZCB3aXRoIHRoZVxcbitcXHQgKiByZXNlcnZhdGlvbiBsb2NrIGhlbGQuXFxuK1xcdCAqL1xcbitcXHR2b2lkICgqdW5tYXApKHN0cnVjdCBkbWFfYnVmX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZG1hX2J1Zl9pb19tYXAgKm1hcCk7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBUaGUgdXNlciB0cmllcyB0byBkZXN0cm95IHRoZSBjdHguIFJlbGVhc2UgYWxsIGRldmljZSBzcGVjaWZpY1xcbitcXHQgKiBwYXJ0cyBvZiB0aGUgdG9rZW4uXFxuK1xcdCAqL1xcbitcXHR2b2lkICgqcmVsZWFzZSkoc3RydWN0IGRtYV9idWZfaW9fY3R4ICopO1xcbit9O1xcbitcXG4rc3RydWN0IGRtYV9idWZfaW9fbWFwIHtcXG4rXFx0LypcXG4rXFx0ICogQ291bnRzIGF0dGFjaGVkIHJlcXVlc3RzIGFuZCBvdGhlciB1c2Vycy4gRGV2aWNlIHNwZWNpZmljIHVubWFwcGluZ1xcbitcXHQgKiBpcyBkZWZlcnJlZCB1bnRpbCBhbGwgcmVmcyBhcmUgZHJvcHBlZC5cXG4rXFx0ICovXFxuK1xcdHN0cnVjdCBwZXJjcHVfcmVmXFx0XFx0cmVmcztcXG4rXFx0dW5zaWduZWRcXHRcXHRcXHRzZWdfc2hpZnQ7XFxuK1xcbitcXHRzdHJ1Y3Qgd29ya19zdHJ1Y3RcXHRcXHRyZWxlYXNlX3dvcms7XFxuK1xcdHN0cnVjdCBkbWFfYnVmX2lvX2ZlbmNlXFx0XFx0KmZlbmNlO1xcbitcXHRzdHJ1Y3QgZG1hX2J1Zl9pb19jdHhcXHRcXHQqY3R4O1xcbit9O1xcbitcXG4rc3RydWN0IGRtYV9idWZfaW9fY3R4IHtcXG4rXFx0c3RydWN0IGRtYV9idWZfaW9fbWFwIF9fcmN1XFx0XFx0Km1hcDtcXG4rXFx0c3RydWN0IGRtYV9idWZcXHRcXHRcXHRcXHQqZG1hYnVmO1xcbitcXHRlbnVtIGRtYV9kYXRhX2RpcmVjdGlvblxcdFxcdFxcdGRpcjtcXG4rXFxuK1xcdGF0b21pY190XFx0XFx0XFx0XFx0ZmVuY2Vfc2VxO1xcbitcXHR1NjRcXHRcXHRcXHRcXHRcXHRmZW5jZV9jdHg7XFxuK1xcdHN0cnVjdCB3b3JrX3N0cnVjdFxcdFxcdFxcdHJlbGVhc2Vfd29yaztcXG4rXFx0cmVmY291bnRfdFxcdFxcdFxcdFxcdHJlZnM7XFxuK1xcbitcXHR2b2lkXFx0XFx0XFx0XFx0XFx0KmRldl9wcml2O1xcbitcXHRjb25zdCBzdHJ1Y3QgZG1hX2J1Zl9pb19vcHNcXHRcXHQqZGV2X29wcztcXG4rfTtcXG4rXFxuK2ludCBkbWFfYnVmX2lvX2N0eF9jcmVhdGUoc3RydWN0IGZpbGUgKmZpbGUsXFxuK1xcdFxcdFxcdCAgIHN0cnVjdCBkbWFfYnVmX2lvX2N0eCAqY3R4LFxcbitcXHRcXHRcXHQgICBzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmLFxcbitcXHRcXHRcXHQgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpO1xcbit2b2lkIGRtYV9idWZfaW9fY3R4X3JlbGVhc2Uoc3RydWN0IGRtYV9idWZfaW9fY3R4ICpjdHgpO1xcbitcXG4rc3RydWN0IGRtYV9idWZfaW9fbWFwICpkbWFfYnVmX2lvX2NyZWF0ZV9tYXAoc3RydWN0IGRtYV9idWZfaW9fY3R4ICpjdHgpO1xcbitcXG4rc3RhdGljIGlubGluZSBzdHJ1Y3QgZG1hX2J1Zl9pb19tYXAgKlxcbitkbWFfYnVmX2lvX2dldF9tYXAoc3RydWN0IGRtYV9idWZfaW9fY3R4ICpjdHgpXFxuK3tcXG4rXFx0c3RydWN0IGRtYV9idWZfaW9fbWFwICptYXA7XFxuK1xcbitcXHRndWFyZChyY3UpKCk7XFxuK1xcbitcXHRtYXAgPSByY3VfZGVyZWZlcmVuY2UoY3R4LVxcdTAwM2VtYXApO1xcbitcXHRpZiAodW5saWtlbHkoIW1hcCB8fCAhcGVyY3B1X3JlZl90cnlnZXRfbGl2ZV9yY3UoXFx1MDAyNm1hcC1cXHUwMDNlcmVmcykpKVxcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFxuK1xcdHJldHVybiBtYXA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBkbWFfYnVmX2lvX21hcF9kcm9wKHN0cnVjdCBkbWFfYnVmX2lvX21hcCAqbWFwKVxcbit7XFxuK1xcdHBlcmNwdV9yZWZfcHV0KFxcdTAwMjZtYXAtXFx1MDAzZXJlZnMpO1xcbit9XFxuK1xcbisvKlxcbisgKiBEZXZpY2UgQVBJXFxuKyAqL1xcbitcXG4rdm9pZCBkbWFfYnVmX2lvX2ludmFsaWRhdGVfbWFwcGluZ3Moc3RydWN0IGRtYV9idWZfaW9fY3R4ICpjdHgpO1xcbitpbnQgZG1hX2J1Zl9pb19pbml0X21hcChzdHJ1Y3QgZG1hX2J1Zl9pb19jdHggKmN0eCwgc3RydWN0IGRtYV9idWZfaW9fbWFwICptYXApO1xcbitcXG4rI2VuZGlmXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZnMuaCBiL2luY2x1ZGUvbGludXgvZnMuaFxcbmluZGV4IDUwY2U3MzFhMmI3OGYuLmU2MmZhNjUzZTE0ODQgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9mcy5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9mcy5oXFxuQEAgLTE5MTQsNiArMTkxNCw3IEBAIHN0cnVjdCBkaXJfY29udGV4dCB7XFxuICNkZWZpbmUgQ09QWV9GSUxFX1NQTElDRVxcdFxcdCgxIFxcdTAwM2NcXHUwMDNjIDApXFxuIFxcbiBzdHJ1Y3QgaW9fdXJpbmdfY21kO1xcbitzdHJ1Y3QgZG1hX2J1Zl9pb19jdHg7XFxuIHN0cnVjdCBvZmZzZXRfY3R4O1xcbiBcXG4gdHlwZWRlZiB1bnNpZ25lZCBpbnQgX19iaXR3aXNlIGZvcF9mbGFnc190O1xcbkBAIC0xOTYyLDYgKzE5NjMsNyBAQCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHtcXG4gXFx0aW50ICgqdXJpbmdfY21kX2lvcG9sbCkoc3RydWN0IGlvX3VyaW5nX2NtZCAqLCBzdHJ1Y3QgaW9fY29tcF9iYXRjaCAqLFxcbiBcXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgcG9sbF9mbGFncyk7XFxuIFxcdGludCAoKm1tYXBfcHJlcGFyZSkoc3RydWN0IHZtX2FyZWFfZGVzYyAqKTtcXG4rXFx0aW50ICgqaW5pdF9kbWFfYnVmX2lvX2N0eCkoc3RydWN0IGZpbGUgKiwgc3RydWN0IGRtYV9idWZfaW9fY3R4ICopO1xcbiB9IF9fcmFuZG9taXplX2xheW91dDtcXG4gXFxuIC8qIFN1cHBvcnRzIGFzeW5jIGJ1ZmZlcmVkIHJlYWRzICovXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaW9fdXJpbmdfdHlwZXMuaCBiL2luY2x1ZGUvbGludXgvaW9fdXJpbmdfdHlwZXMuaFxcbmluZGV4IGEyYzYyM2E2N2EyNTEuLmY5MDU4NmQzNTNjMWMgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9pb191cmluZ190eXBlcy5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9pb191cmluZ190eXBlcy5oXFxuQEAgLTEwLDYgKzEwLDcgQEBcXG4gXFxuIHN0cnVjdCBpb3VfbG9vcF9wYXJhbXM7XFxuIHN0cnVjdCBpb191cmluZ19icGZfb3BzO1xcbitzdHJ1Y3QgZG1hX2J1Zl9pb19tYXA7XFxuIFxcbiBlbnVtIHtcXG4gXFx0LypcXG5AQCAtNTk0LDYgKzU5NSw3IEBAIGVudW0ge1xcbiBcXHRSRVFfRl9JTVBPUlRfQlVGRkVSX0JJVCxcXG4gXFx0UkVRX0ZfU1FFX0NPUElFRF9CSVQsXFxuIFxcdFJFUV9GX0lPUE9MTF9CSVQsXFxuK1xcdFJFUV9GX0RST1BfRE1BQlVGX0JJVCxcXG4gXFxuIFxcdC8qIG5vdCBhIHJlYWwgYml0LCBqdXN0IHRvIGNoZWNrIHdlJ3JlIG5vdCBvdmVyZmxvd2luZyB0aGUgc3BhY2UgKi9cXG4gXFx0X19SRVFfRl9MQVNUX0JJVCxcXG5AQCAtNjg5LDYgKzY5MSw4IEBAIGVudW0ge1xcbiBcXHRSRVFfRl9TUUVfQ09QSUVEXFx0PSBJT19SRVFfRkxBRyhSRVFfRl9TUUVfQ09QSUVEX0JJVCksXFxuIFxcdC8qIHJlcXVlc3QgbXVzdCBiZSBpb3BvbGxlZCB0byBjb21wbGV0aW9uIChzZXQgaW4gLVxcdTAwM2Vpc3N1ZSgpKSAqL1xcbiBcXHRSRVFfRl9JT1BPTExcXHRcXHQ9IElPX1JFUV9GTEFHKFJFUV9GX0lPUE9MTF9CSVQpLFxcbitcXHQvKiB0aGVyZSBpcyBhIGRtYSBtYXAgYXR0YWNoZWQgdG8gcmVxdWVzdCB0aGF0IG5lZWRzIHRvIGJlIGRyb3BwZWQgKi9cXG4rXFx0UkVRX0ZfRFJPUF9ETUFCVUZcXHQ9IElPX1JFUV9GTEFHKFJFUV9GX0RST1BfRE1BQlVGX0JJVCksXFxuIH07XFxuIFxcbiBzdHJ1Y3QgaW9fdHdfcmVxIHtcXG5AQCAtODExLDYgKzgxNSw3IEBAIHN0cnVjdCBpb19raW9jYiB7XFxuIFxcdC8qIGN1c3RvbSBjcmVkZW50aWFscywgdmFsaWQgSUZGIFJFUV9GX0NSRURTIGlzIHNldCAqL1xcbiBcXHRjb25zdCBzdHJ1Y3QgY3JlZFxcdFxcdCpjcmVkcztcXG4gXFx0c3RydWN0IGlvX3dxX3dvcmtcXHRcXHR3b3JrO1xcbitcXHRzdHJ1Y3QgZG1hX2J1Zl9pb19tYXBcXHRcXHQqZG1hYnVmX21hcDtcXG4gXFxuIFxcdHN0cnVjdCBpb19iaWdfY3FlIHtcXG4gXFx0XFx0dTY0XFx0XFx0XFx0ZXh0cmExO1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3Vpby5oIGIvaW5jbHVkZS9saW51eC91aW8uaFxcbmluZGV4IGZlMmU5ODVkNzRkMjQuLjYzOGMxMTE2ZTkxMmUgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC91aW8uaFxcbisrKyBiL2luY2x1ZGUvbGludXgvdWlvLmhcXG5AQCAtMTIsNiArMTIsNyBAQFxcbiBcXG4gc3RydWN0IHBhZ2U7XFxuIHN0cnVjdCBmb2xpb19xdWV1ZTtcXG4rc3RydWN0IGRtYV9idWZfaW9fbWFwO1xcbiBcXG4gdHlwZWRlZiB1bnNpZ25lZCBpbnQgX19iaXR3aXNlIGlvdl9pdGVyX2V4dHJhY3Rpb25fdDtcXG4gXFxuQEAgLTI5LDYgKzMwLDcgQEAgZW51bSBpdGVyX3R5cGUge1xcbiBcXHRJVEVSX0ZPTElPUSxcXG4gXFx0SVRFUl9YQVJSQVksXFxuIFxcdElURVJfRElTQ0FSRCxcXG4rXFx0SVRFUl9ETUFCVUZfTUFQLFxcbiB9O1xcbiBcXG4gI2RlZmluZSBJVEVSX1NPVVJDRVxcdDFcXHQvLyA9PSBXUklURVxcbkBAIC03MSw2ICs3Myw3IEBAIHN0cnVjdCBpb3ZfaXRlciB7XFxuIFxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBmb2xpb19xdWV1ZSAqZm9saW9xO1xcbiBcXHRcXHRcXHRcXHRzdHJ1Y3QgeGFycmF5ICp4YXJyYXk7XFxuIFxcdFxcdFxcdFxcdHZvaWQgX191c2VyICp1YnVmO1xcbitcXHRcXHRcXHRcXHRzdHJ1Y3QgZG1hX2J1Zl9pb19tYXAgKmRtYWJ1Zl9tYXA7XFxuIFxcdFxcdFxcdH07XFxuIFxcdFxcdFxcdHNpemVfdCBjb3VudDtcXG4gXFx0XFx0fTtcXG5AQCAtMTU1LDYgKzE1OCwxMSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaW92X2l0ZXJfaXNfeGFycmF5KGNvbnN0IHN0cnVjdCBpb3ZfaXRlciAqaSlcXG4gXFx0cmV0dXJuIGlvdl9pdGVyX3R5cGUoaSkgPT0gSVRFUl9YQVJSQVk7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBpb3ZfaXRlcl9pc19kbWFidWZfbWFwKGNvbnN0IHN0cnVjdCBpb3ZfaXRlciAqaSlcXG4re1xcbitcXHRyZXR1cm4gaW92X2l0ZXJfdHlwZShpKSA9PSBJVEVSX0RNQUJVRl9NQVA7XFxuK31cXG4rXFxuIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgY2hhciBpb3ZfaXRlcl9ydyhjb25zdCBzdHJ1Y3QgaW92X2l0ZXIgKmkpXFxuIHtcXG4gXFx0cmV0dXJuIGktXFx1MDAzZWRhdGFfc291cmNlID8gV1JJVEUgOiBSRUFEO1xcbkBAIC0zMDAsNiArMzA4LDkgQEAgdm9pZCBpb3ZfaXRlcl9mb2xpb19xdWV1ZShzdHJ1Y3QgaW92X2l0ZXIgKmksIHVuc2lnbmVkIGludCBkaXJlY3Rpb24sXFxuIFxcdFxcdFxcdCAgdW5zaWduZWQgaW50IGZpcnN0X3Nsb3QsIHVuc2lnbmVkIGludCBvZmZzZXQsIHNpemVfdCBjb3VudCk7XFxuIHZvaWQgaW92X2l0ZXJfeGFycmF5KHN0cnVjdCBpb3ZfaXRlciAqaSwgdW5zaWduZWQgaW50IGRpcmVjdGlvbiwgc3RydWN0IHhhcnJheSAqeGFycmF5LFxcbiBcXHRcXHQgICAgIGxvZmZfdCBzdGFydCwgc2l6ZV90IGNvdW50KTtcXG4rdm9pZCBpb3ZfaXRlcl9kbWFidWZfbWFwKHN0cnVjdCBpb3ZfaXRlciAqaSwgdW5zaWduZWQgaW50IGRpcmVjdGlvbixcXG4rXFx0XFx0XFx0c3RydWN0IGRtYV9idWZfaW9fbWFwICptYXAsXFxuK1xcdFxcdFxcdGxvZmZfdCBvZmYsIHNpemVfdCBjb3VudCk7XFxuIHNzaXplX3QgaW92X2l0ZXJfZ2V0X3BhZ2VzMihzdHJ1Y3QgaW92X2l0ZXIgKmksIHN0cnVjdCBwYWdlICoqcGFnZXMsXFxuIFxcdFxcdFxcdHNpemVfdCBtYXhzaXplLCB1bnNpZ25lZCBtYXhwYWdlcywgc2l6ZV90ICpzdGFydCk7XFxuIHNzaXplX3QgaW92X2l0ZXJfZ2V0X3BhZ2VzX2FsbG9jMihzdHJ1Y3QgaW92X2l0ZXIgKmksIHN0cnVjdCBwYWdlICoqKnBhZ2VzLFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvaW9fdXJpbmcuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9pb191cmluZy5oXFxuaW5kZXggOTA5ZmI3YWVhNjM4ZS4uYzM5Mjk3ZThiZWI2ZiAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvaW9fdXJpbmcuaFxcbisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9pb191cmluZy5oXFxuQEAgLTc5MCwxMyArNzkwLDQyIEBAIHN0cnVjdCBpb191cmluZ19yc3JjX3VwZGF0ZSB7XFxuIFxcbiBzdHJ1Y3QgaW9fdXJpbmdfcnNyY191cGRhdGUyIHtcXG4gXFx0X191MzIgb2Zmc2V0O1xcbi1cXHRfX3UzMiByZXN2O1xcbitcXHRfX3UzMiBmbGFncztcXG4gXFx0X19hbGlnbmVkX3U2NCBkYXRhO1xcbiBcXHRfX2FsaWduZWRfdTY0IHRhZ3M7XFxuIFxcdF9fdTMyIG5yO1xcbiBcXHRfX3UzMiByZXN2MjtcXG4gfTtcXG4gXFxuKy8qIHN0cnVjdCBpb191cmluZ19yc3JjX3VwZGF0ZTI6OmZsYWdzICovXFxuK2VudW0gaW9fdXJpbmdfcnNyY19yZWdfZmxhZ3Mge1xcbitcXHQvKlxcbitcXHQgKiBVc2UgdGhlIGV4dGVuZGVkIGRlc2NyaXB0b3IgZm9ybWF0IGZvciBidWZmZXIgdXBkYXRlcyxcXG4rXFx0ICogc2VlIHN0cnVjdCBpb191cmluZ19yZWdidWZfZGVzY1xcbitcXHQgKi9cXG4rXFx0SU9SSU5HX1JTUkNfVVBEQVRFX0VYVEVOREVEXFx0XFx0PSAxVSBcXHUwMDNjXFx1MDAzYyAxLFxcbit9O1xcbitcXG4rLyogQnVmZmVyIHJlZ2lzdHJhdGlvbiB0eXBlLCBwYXNzZWQgaW4gc3RydWN0IGlvX3VyaW5nX3JlZ2J1Zl9kZXNjOjp0eXBlICovXFxuK2VudW0gaW9fdXJpbmdfcmVnYnVmX3R5cGUge1xcbitcXHRJT19SRUdCVUZfVFlQRV9FTVBUWSxcXG4rXFx0SU9fUkVHQlVGX1RZUEVfVUFERFIsXFxuK1xcdElPX1JFR0JVRl9UWVBFX0RNQUJVRixcXG4rXFxuK1xcdF9fSU9fUkVHQlVGX1RZUEVfTUFYLFxcbit9O1xcbitcXG4rc3RydWN0IGlvX3VyaW5nX3JlZ2J1Zl9kZXNjIHtcXG4rXFx0X191MzIgdHlwZTsgLyogZW51bSBpb191cmluZ19yZWdidWZfdHlwZSAqL1xcbitcXHRfX3UzMiBmbGFncztcXG4rXFx0X191NjQgc2l6ZTtcXG4rXFx0X191NjQgdWFkZHI7XFxuK1xcbitcXHRfX3MzMiBkbWFidWZfZmQ7XFxuK1xcdF9fczMyIHRhcmdldF9mZDtcXG4rXFx0X191NjQgX19yZXN2WzZdO1xcbit9O1xcbitcXG4gLyogU2tpcCB1cGRhdGluZyBmZCBpbmRleGVzIHNldCB0byB0aGlzIHZhbHVlIGluIHRoZSBmZCB0YWJsZSAqL1xcbiAjZGVmaW5lIElPUklOR19SRUdJU1RFUl9GSUxFU19TS0lQXFx0KC0yKVxcbiBcXG5kaWZmIC0tZ2l0IGEvaW9fdXJpbmcvaW9fdXJpbmcuYyBiL2lvX3VyaW5nL2lvX3VyaW5nLmNcXG5pbmRleCA0YzgzYTk0YjRiZGMzLi5kMWQ3NDhiNWM1ZGNhIDEwMDY0NFxcbi0tLSBhL2lvX3VyaW5nL2lvX3VyaW5nLmNcXG4rKysgYi9pb191cmluZy9pb191cmluZy5jXFxuQEAgLTEwOSw3ICsxMDksNyBAQFxcbiBcXG4gI2RlZmluZSBJT19SRVFfQ0xFQU5fU0xPV19GTEFHUyAoUkVRX0ZfUkVGQ09VTlQgfCBJT19SRVFfTElOS19GTEFHUyB8IFxcXFxcXG4gXFx0XFx0XFx0XFx0IFJFUV9GX1JFSVNTVUUgfCBSRVFfRl9QT0xMRUQgfCBcXFxcXFxuLVxcdFxcdFxcdFxcdCBJT19SRVFfQ0xFQU5fRkxBR1MpXFxuK1xcdFxcdFxcdFxcdCBJT19SRVFfQ0xFQU5fRkxBR1MgfCBSRVFfRl9EUk9QX0RNQUJVRilcXG4gXFxuICNkZWZpbmUgSU9fVENUWF9SRUZTX0NBQ0hFX05SXFx0KDFVIFxcdTAwM2NcXHUwMDNjIDEwKVxcbiBcXG5AQCAtMTExNCw2ICsxMTE0LDcgQEAgc3RhdGljIHZvaWQgaW9fZnJlZV9iYXRjaF9saXN0KHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxcbiBcXHRcXHRcXHRcXHRpb19xdWV1ZV9uZXh0KHJlcSk7XFxuIFxcdFxcdFxcdGlmICh1bmxpa2VseShyZXEtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSU9fUkVRX0NMRUFOX0ZMQUdTKSlcXG4gXFx0XFx0XFx0XFx0aW9fY2xlYW5fb3AocmVxKTtcXG4rXFx0XFx0XFx0aW9fcmVxX2Ryb3BfZG1hYnVmKHJlcSk7XFxuIFxcdFxcdH1cXG4gXFx0XFx0aW9fcHV0X2ZpbGUocmVxKTtcXG4gXFx0XFx0aW9fcmVxX3B1dF9yc3JjX25vZGVzKHJlcSk7XFxuZGlmZiAtLWdpdCBhL2lvX3VyaW5nL25ldC5jIGIvaW9fdXJpbmcvbmV0LmNcXG5pbmRleCBhNzRkMTVmN2I3ZDJiLi40MzljOTlhZDE4ODQxIDEwMDY0NFxcbi0tLSBhL2lvX3VyaW5nL25ldC5jXFxuKysrIGIvaW9fdXJpbmcvbmV0LmNcXG5AQCAtMTQ3MSw3ICsxNDcxLDcgQEAgc3RhdGljIGludCBpb19zZ19mcm9tX2l0ZXIoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0XFx0cmV0dXJuIHplcm9jb3B5X2ZpbGxfc2tiX2Zyb21faXRlcihza2IsIGZyb20sIGxlbmd0aCk7XFxuIFxcbiBcXHRiaS5iaV9zaXplID0gbWluKGZyb20tXFx1MDAzZWNvdW50LCBsZW5ndGgpO1xcbi1cXHRiaS5iaV9idmVjX2RvbmUgPSBmcm9tLVxcdTAwM2Vpb3Zfb2Zmc2V0O1xcbitcXHRiaS5iaV9vZmZzZXQgPSBmcm9tLVxcdTAwM2Vpb3Zfb2Zmc2V0O1xcbiBcXHRiaS5iaV9pZHggPSAwO1xcbiBcXG4gXFx0d2hpbGUgKGJpLmJpX3NpemUgXFx1MDAyNlxcdTAwMjYgZnJhZyBcXHUwMDNjIE1BWF9TS0JfRlJBR1MpIHtcXG5AQCAtMTQ5MCw3ICsxNDkwLDcgQEAgc3RhdGljIGludCBpb19zZ19mcm9tX2l0ZXIoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0ZnJvbS1cXHUwMDNlYnZlYyArPSBiaS5iaV9pZHg7XFxuIFxcdGZyb20tXFx1MDAzZW5yX3NlZ3MgLT0gYmkuYmlfaWR4O1xcbiBcXHRmcm9tLVxcdTAwM2Vjb3VudCAtPSBjb3BpZWQ7XFxuLVxcdGZyb20tXFx1MDAzZWlvdl9vZmZzZXQgPSBiaS5iaV9idmVjX2RvbmU7XFxuK1xcdGZyb20tXFx1MDAzZWlvdl9vZmZzZXQgPSBiaS5iaV9vZmZzZXQ7XFxuIFxcbiBcXHRza2ItXFx1MDAzZWRhdGFfbGVuICs9IGNvcGllZDtcXG4gXFx0c2tiLVxcdTAwM2VsZW4gKz0gY29waWVkO1xcbmRpZmYgLS1naXQgYS9pb191cmluZy9yc3JjLmMgYi9pb191cmluZy9yc3JjLmNcXG5pbmRleCA4ZDBmMmVlMjRlMGMyLi41MDc0YjFlNGIwNTA1IDEwMDY0NFxcbi0tLSBhL2lvX3VyaW5nL3JzcmMuY1xcbisrKyBiL2lvX3VyaW5nL3JzcmMuY1xcbkBAIC0xMCw2ICsxMCw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9jb21wYXQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lvX3VyaW5nLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9pb191cmluZy9jbWQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RtYS1idWYtaW8uaFxcdTAwM2VcXG4gXFxuICNpbmNsdWRlIFxcdTAwM2N1YXBpL2xpbnV4L2lvX3VyaW5nLmhcXHUwMDNlXFxuIFxcbkBAIC0yOCw3ICsyOSw3IEBAIHN0cnVjdCBpb19yc3JjX3VwZGF0ZSB7XFxuIH07XFxuIFxcbiBzdGF0aWMgc3RydWN0IGlvX3JzcmNfbm9kZSAqaW9fc3FlX2J1ZmZlcl9yZWdpc3RlcihzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IGlvdmVjICppb3YpO1xcbitcXHRcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgaW9fdXJpbmdfcmVnYnVmX2Rlc2MgKmRlc2MpO1xcbiBcXG4gc3RhdGljIGludCBocGFnZV9hY2N0X3JlZihzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgc3RydWN0IHBhZ2UgKmhwYWdlLFxcbiBcXHRcXHRcXHQgIGJvb2wgKmFjY3RfbmV3KVxcbkBAIC04MSw2ICs4MiwxOCBAQCBzdGF0aWMgYm9vbCBocGFnZV9hY2N0X3VucmVmKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBzdHJ1Y3QgcGFnZSAqaHBhZ2UpXFxuIFxcbiAjZGVmaW5lIElPX0NBQ0hFRF9CVkVDU19TRUdTXFx0MzJcXG4gXFxuK3N0YXRpYyB2b2lkIGlvX2lvdl90b19yZWdidWZfZGVzYyhjb25zdCBzdHJ1Y3QgaW92ZWMgKmlvdixcXG4rXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgaW9fdXJpbmdfcmVnYnVmX2Rlc2MgKmRlc2MpXFxuK3tcXG4rXFx0KmRlc2MgPSAoc3RydWN0IGlvX3VyaW5nX3JlZ2J1Zl9kZXNjKSB7XFxuK1xcdFxcdC50eXBlID0gSU9fUkVHQlVGX1RZUEVfVUFERFIsXFxuK1xcdFxcdC51YWRkciA9ICh1NjQpKHVpbnRwdHJfdClpb3YtXFx1MDAzZWlvdl9iYXNlLFxcbitcXHRcXHQuc2l6ZSA9IGlvdi1cXHUwMDNlaW92X2xlbixcXG4rXFx0fTtcXG4rXFx0aWYgKCFkZXNjLVxcdTAwM2V1YWRkcilcXG4rXFx0XFx0ZGVzYy1cXHUwMDNldHlwZSA9IElPX1JFR0JVRl9UWVBFX0VNUFRZO1xcbit9XFxuK1xcbiBpbnQgX19pb19hY2NvdW50X21lbShzdHJ1Y3QgdXNlcl9zdHJ1Y3QgKnVzZXIsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpXFxuIHtcXG4gXFx0dW5zaWduZWQgbG9uZyBwYWdlX2xpbWl0LCBjdXJfcGFnZXMsIG5ld19wYWdlcztcXG5AQCAtMzA5LDYgKzMyMiw4IEBAIHN0YXRpYyBpbnQgX19pb19zcWVfZmlsZXNfdXBkYXRlKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxcbiBcXHRcXHRyZXR1cm4gLUVOWElPO1xcbiBcXHRpZiAodXAtXFx1MDAzZW9mZnNldCArIG5yX2FyZ3MgXFx1MDAzZSBjdHgtXFx1MDAzZWZpbGVfdGFibGUuZGF0YS5ucilcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdGlmICh1cC1cXHUwMDNlZmxhZ3MpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4gXFx0Zm9yIChkb25lID0gMDsgZG9uZSBcXHUwMDNjIG5yX2FyZ3M7IGRvbmUrKykge1xcbiBcXHRcXHR1NjQgdGFnID0gMDtcXG5AQCAtMzY4LDkgKzM4Myw4IEBAIHN0YXRpYyBpbnQgX19pb19zcWVfYnVmZmVyc191cGRhdGUoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXFxuIFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBpb191cmluZ19yc3JjX3VwZGF0ZTIgKnVwLFxcbiBcXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBpbnQgbnJfYXJncylcXG4ge1xcbitcXHRib29sIGV4dGVuZGVkID0gdXAtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSU9SSU5HX1JTUkNfVVBEQVRFX0VYVEVOREVEO1xcbiBcXHR1NjQgX191c2VyICp0YWdzID0gdTY0X3RvX3VzZXJfcHRyKHVwLVxcdTAwM2V0YWdzKTtcXG4tXFx0c3RydWN0IGlvdmVjIGZhc3RfaW92LCAqaW92O1xcbi1cXHRzdHJ1Y3QgaW92ZWMgX191c2VyICp1dmVjO1xcbiBcXHR1NjQgdXNlcl9kYXRhID0gdXAtXFx1MDAzZWRhdGE7XFxuIFxcdF9fdTMyIGRvbmU7XFxuIFxcdGludCBpLCBlcnI7XFxuQEAgLTM3OSwyNiArMzkzLDQ5IEBAIHN0YXRpYyBpbnQgX19pb19zcWVfYnVmZmVyc191cGRhdGUoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXFxuIFxcdFxcdHJldHVybiAtRU5YSU87XFxuIFxcdGlmICh1cC1cXHUwMDNlb2Zmc2V0ICsgbnJfYXJncyBcXHUwMDNlIGN0eC1cXHUwMDNlYnVmX3RhYmxlLm5yKVxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0aWYgKHVwLVxcdTAwM2VmbGFncyBcXHUwMDI2IH5JT1JJTkdfUlNSQ19VUERBVEVfRVhURU5ERUQpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4gXFx0Zm9yIChkb25lID0gMDsgZG9uZSBcXHUwMDNjIG5yX2FyZ3M7IGRvbmUrKykge1xcbitcXHRcXHRzdHJ1Y3QgaW9fdXJpbmdfcmVnYnVmX2Rlc2MgZGVzYztcXG4gXFx0XFx0c3RydWN0IGlvX3JzcmNfbm9kZSAqbm9kZTtcXG4gXFx0XFx0dTY0IHRhZyA9IDA7XFxuIFxcbi1cXHRcXHR1dmVjID0gdTY0X3RvX3VzZXJfcHRyKHVzZXJfZGF0YSk7XFxuLVxcdFxcdGlvdiA9IGlvdmVjX2Zyb21fdXNlcih1dmVjLCAxLCAxLCBcXHUwMDI2ZmFzdF9pb3YsIGlvX2lzX2NvbXBhdChjdHgpKTtcXG4tXFx0XFx0aWYgKElTX0VSUihpb3YpKSB7XFxuLVxcdFxcdFxcdGVyciA9IFBUUl9FUlIoaW92KTtcXG4tXFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdH1cXG4gXFx0XFx0aWYgKHRhZ3MgXFx1MDAyNlxcdTAwMjYgY29weV9mcm9tX3VzZXIoXFx1MDAyNnRhZywgXFx1MDAyNnRhZ3NbZG9uZV0sIHNpemVvZih0YWcpKSkge1xcbiBcXHRcXHRcXHRlcnIgPSAtRUZBVUxUO1xcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0fVxcbi1cXHRcXHRub2RlID0gaW9fc3FlX2J1ZmZlcl9yZWdpc3RlcihjdHgsIGlvdik7XFxuK1xcbitcXHRcXHRpZiAoZXh0ZW5kZWQpIHtcXG4rXFx0XFx0XFx0aWYgKGNvcHlfZnJvbV91c2VyKFxcdTAwMjZkZXNjLCB1NjRfdG9fdXNlcl9wdHIodXNlcl9kYXRhKSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgc2l6ZW9mKGRlc2MpKSkge1xcbitcXHRcXHRcXHRcXHRlcnIgPSAtRUZBVUxUO1xcbitcXHRcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHRcXHR1c2VyX2RhdGEgKz0gc2l6ZW9mKGRlc2MpO1xcbitcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRzdHJ1Y3QgaW92ZWMgX191c2VyICp1dmVjID0gdTY0X3RvX3VzZXJfcHRyKHVzZXJfZGF0YSk7XFxuK1xcdFxcdFxcdHN0cnVjdCBpb3ZlYyBmYXN0X2lvdiwgKmlvdjtcXG4rXFxuK1xcdFxcdFxcdGlmIChpb19pc19jb21wYXQoY3R4KSlcXG4rXFx0XFx0XFx0XFx0dXNlcl9kYXRhICs9IHNpemVvZihzdHJ1Y3QgY29tcGF0X2lvdmVjKTtcXG4rXFx0XFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRcXHR1c2VyX2RhdGEgKz0gc2l6ZW9mKHN0cnVjdCBpb3ZlYyk7XFxuK1xcbitcXHRcXHRcXHRpb3YgPSBpb3ZlY19mcm9tX3VzZXIodXZlYywgMSwgMSwgXFx1MDAyNmZhc3RfaW92LCBpb19pc19jb21wYXQoY3R4KSk7XFxuK1xcdFxcdFxcdGlmIChJU19FUlIoaW92KSkge1xcbitcXHRcXHRcXHRcXHRlcnIgPSBQVFJfRVJSKGlvdik7XFxuK1xcdFxcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdFxcdGlvX2lvdl90b19yZWdidWZfZGVzYyhpb3YsIFxcdTAwMjZkZXNjKTtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0bm9kZSA9IGlvX3NxZV9idWZmZXJfcmVnaXN0ZXIoY3R4LCBcXHUwMDI2ZGVzYyk7XFxuIFxcdFxcdGlmIChJU19FUlIobm9kZSkpIHtcXG4gXFx0XFx0XFx0ZXJyID0gUFRSX0VSUihub2RlKTtcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdH1cXG4rXFxuIFxcdFxcdGlmICh0YWcpIHtcXG4gXFx0XFx0XFx0aWYgKCFub2RlKSB7XFxuIFxcdFxcdFxcdFxcdGVyciA9IC1FSU5WQUw7XFxuQEAgLTQwOSwxMCArNDQ2LDYgQEAgc3RhdGljIGludCBfX2lvX3NxZV9idWZmZXJzX3VwZGF0ZShzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCxcXG4gXFx0XFx0aSA9IGFycmF5X2luZGV4X25vc3BlYyh1cC1cXHUwMDNlb2Zmc2V0ICsgZG9uZSwgY3R4LVxcdTAwM2VidWZfdGFibGUubnIpO1xcbiBcXHRcXHRpb19yZXNldF9yc3JjX25vZGUoY3R4LCBcXHUwMDI2Y3R4LVxcdTAwM2VidWZfdGFibGUsIGkpO1xcbiBcXHRcXHRjdHgtXFx1MDAzZWJ1Zl90YWJsZS5ub2Rlc1tpXSA9IG5vZGU7XFxuLVxcdFxcdGlmIChpb19pc19jb21wYXQoY3R4KSlcXG4tXFx0XFx0XFx0dXNlcl9kYXRhICs9IHNpemVvZihzdHJ1Y3QgY29tcGF0X2lvdmVjKTtcXG4tXFx0XFx0ZWxzZVxcbi1cXHRcXHRcXHR1c2VyX2RhdGEgKz0gc2l6ZW9mKHN0cnVjdCBpb3ZlYyk7XFxuIFxcdH1cXG4gXFx0cmV0dXJuIGRvbmUgPyBkb25lIDogZXJyO1xcbiB9XFxuQEAgLTQ0Nyw3ICs0ODAsNyBAQCBpbnQgaW9fcmVnaXN0ZXJfZmlsZXNfdXBkYXRlKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCB2b2lkIF9fdXNlciAqYXJnLFxcbiBcXHRtZW1zZXQoXFx1MDAyNnVwLCAwLCBzaXplb2YodXApKTtcXG4gXFx0aWYgKGNvcHlfZnJvbV91c2VyKFxcdTAwMjZ1cCwgYXJnLCBzaXplb2Yoc3RydWN0IGlvX3VyaW5nX3JzcmNfdXBkYXRlKSkpXFxuIFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbi1cXHRpZiAodXAucmVzdiB8fCB1cC5yZXN2MilcXG4rXFx0aWYgKHVwLnJlc3YyKVxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0cmV0dXJuIF9faW9fcmVnaXN0ZXJfcnNyY191cGRhdGUoY3R4LCBJT1JJTkdfUlNSQ19GSUxFLCBcXHUwMDI2dXAsIG5yX2FyZ3MpO1xcbiB9XFxuQEAgLTQ2MSw3ICs0OTQsNyBAQCBpbnQgaW9fcmVnaXN0ZXJfcnNyY191cGRhdGUoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHZvaWQgX191c2VyICphcmcsXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHRpZiAoY29weV9mcm9tX3VzZXIoXFx1MDAyNnVwLCBhcmcsIHNpemVvZih1cCkpKVxcbiBcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4tXFx0aWYgKCF1cC5uciB8fCB1cC5yZXN2IHx8IHVwLnJlc3YyKVxcbitcXHRpZiAoIXVwLm5yIHx8IHVwLnJlc3YyKVxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0cmV0dXJuIF9faW9fcmVnaXN0ZXJfcnNyY191cGRhdGUoY3R4LCB0eXBlLCBcXHUwMDI2dXAsIHVwLm5yKTtcXG4gfVxcbkBAIC01NjEsMTIgKzU5NCw5IEBAIGludCBpb19maWxlc191cGRhdGUoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcXG4gXFx0c3RydWN0IGlvX3VyaW5nX3JzcmNfdXBkYXRlMiB1cDI7XFxuIFxcdGludCByZXQ7XFxuIFxcbitcXHRtZW1zZXQoXFx1MDAyNnVwMiwgMCwgc2l6ZW9mKHVwMikpO1xcbiBcXHR1cDIub2Zmc2V0ID0gdXAtXFx1MDAzZW9mZnNldDtcXG4gXFx0dXAyLmRhdGEgPSB1cC1cXHUwMDNlYXJnO1xcbi1cXHR1cDIubnIgPSAwO1xcbi1cXHR1cDIudGFncyA9IDA7XFxuLVxcdHVwMi5yZXN2ID0gMDtcXG4tXFx0dXAyLnJlc3YyID0gMDtcXG4gXFxuIFxcdGlmICh1cC1cXHUwMDNlb2Zmc2V0ID09IElPUklOR19GSUxFX0lOREVYX0FMTE9DKSB7XFxuIFxcdFxcdHJldCA9IGlvX2ZpbGVzX3VwZGF0ZV93aXRoX2luZGV4X2FsbG9jKHJlcSwgaXNzdWVfZmxhZ3MpO1xcbkBAIC04NTIsMjcgKzg4MiwxMjYgQEAgYm9vbCBpb19jaGVja19jb2FsZXNjZV9idWZmZXIoc3RydWN0IHBhZ2UgKipwYWdlX2FycmF5LCBpbnQgbnJfcGFnZXMsXFxuIFxcdHJldHVybiB0cnVlO1xcbiB9XFxuIFxcbitzdHJ1Y3QgaW9fcmVnYnVmX2RtYSB7XFxuK1xcdHN0cnVjdCBkbWFfYnVmX2lvX2N0eFxcdFxcdGN0eDtcXG4rXFx0c3RydWN0IGZpbGVcXHRcXHRcXHQqdGFyZ2V0X2ZpbGU7XFxuK307XFxuK1xcbitzdGF0aWMgdm9pZCBpb19yZWxlYXNlX3JlZ19kbWFidWYodm9pZCAqcHJpdilcXG4re1xcbitcXHRzdHJ1Y3QgaW9fcmVnYnVmX2RtYSAqZGIgPSBwcml2O1xcbitcXG4rXFx0ZnB1dChkYi1cXHUwMDNldGFyZ2V0X2ZpbGUpO1xcbitcXHRkbWFfYnVmX2lvX2N0eF9yZWxlYXNlKFxcdTAwMjZkYi1cXHUwMDNlY3R4KTtcXG4rfVxcbitcXG4rc3RhdGljIHN0cnVjdCBpb19yc3JjX25vZGUgKmlvX3JlZ2lzdGVyX2RtYWJ1ZihzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0c3RydWN0IGlvX3VyaW5nX3JlZ2J1Zl9kZXNjICpkZXNjKVxcbit7XFxuK1xcdHN0cnVjdCBpb19yc3JjX25vZGUgKm5vZGUgPSBOVUxMO1xcbitcXHRzdHJ1Y3QgaW9fbWFwcGVkX3VidWYgKmltdSA9IE5VTEw7XFxuK1xcdHN0cnVjdCBpb19yZWdidWZfZG1hICpyZWdidWYgPSBOVUxMO1xcbitcXHRzdHJ1Y3QgZmlsZSAqdGFyZ2V0X2ZpbGUgPSBOVUxMO1xcbitcXHRzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmID0gTlVMTDtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGlmICghSVNfRU5BQkxFRChDT05GSUdfRE1BX1NIQVJFRF9CVUZGRVIpKVxcbitcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU9QTk9UU1VQUCk7XFxuK1xcdGlmIChjdHgtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSU9SSU5HX1NFVFVQX0lPUE9MTClcXG4rXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVPUE5PVFNVUFApO1xcbitcXHRpZiAoZGVzYy1cXHUwMDNldWFkZHIgfHwgZGVzYy1cXHUwMDNlc2l6ZSlcXG4rXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XFxuK1xcbitcXHRyZXQgPSAtRU5PTUVNO1xcbitcXHRub2RlID0gaW9fcnNyY19ub2RlX2FsbG9jKGN0eCwgSU9SSU5HX1JTUkNfQlVGRkVSKTtcXG4rXFx0aWYgKCFub2RlKVxcbitcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcXG4rXFx0aW11ID0gaW9fYWxsb2NfaW11KGN0eCwgMCk7XFxuK1xcdGlmICghaW11KVxcbitcXHRcXHRnb3RvIGVycjtcXG4rXFx0cmVnYnVmID0ga3phbGxvYyhzaXplb2YoKnJlZ2J1ZiksIEdGUF9LRVJORUwpO1xcbitcXHRpZiAoIXJlZ2J1ZilcXG4rXFx0XFx0Z290byBlcnI7XFxuK1xcbitcXHRyZXQgPSAtRUJBREY7XFxuK1xcdHRhcmdldF9maWxlID0gZmdldChkZXNjLVxcdTAwM2V0YXJnZXRfZmQpO1xcbitcXHRpZiAoIXRhcmdldF9maWxlKVxcbitcXHRcXHRnb3RvIGVycjtcXG4rXFxuK1xcdGRtYWJ1ZiA9IGRtYV9idWZfZ2V0KGRlc2MtXFx1MDAzZWRtYWJ1Zl9mZCk7XFxuK1xcdGlmIChJU19FUlIoZG1hYnVmKSkge1xcbitcXHRcXHRyZXQgPSBQVFJfRVJSKGRtYWJ1Zik7XFxuK1xcdFxcdGRtYWJ1ZiA9IE5VTEw7XFxuK1xcdFxcdGdvdG8gZXJyO1xcbitcXHR9XFxuK1xcdGlmIChkbWFidWYtXFx1MDAzZXNpemUgXFx1MDAzZSBTWl8xRykge1xcbitcXHRcXHRyZXQgPSAtRUlOVkFMO1xcbitcXHRcXHRnb3RvIGVycjtcXG4rXFx0fVxcbitcXG4rXFx0cmV0ID0gZG1hX2J1Zl9pb19jdHhfY3JlYXRlKHRhcmdldF9maWxlLCBcXHUwMDI2cmVnYnVmLVxcdTAwM2VjdHgsIGRtYWJ1ZixcXG4rXFx0XFx0XFx0XFx0ICAgIERNQV9CSURJUkVDVElPTkFMKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byBlcnI7XFxuK1xcbitcXHRyZWdidWYtXFx1MDAzZXRhcmdldF9maWxlID0gdGFyZ2V0X2ZpbGU7XFxuK1xcdGltdS1cXHUwMDNlbnJfYnZlY3MgPSAwO1xcbitcXHRpbXUtXFx1MDAzZXVidWYgPSAwO1xcbitcXHRpbXUtXFx1MDAzZWxlbiA9IGRtYWJ1Zi1cXHUwMDNlc2l6ZTtcXG4rXFx0aW11LVxcdTAwM2Vmb2xpb19zaGlmdCA9IDA7XFxuK1xcdGltdS1cXHUwMDNlcmVsZWFzZSA9IGlvX3JlbGVhc2VfcmVnX2RtYWJ1ZjtcXG4rXFx0aW11LVxcdTAwM2Vwcml2ID0gcmVnYnVmO1xcbitcXHRpbXUtXFx1MDAzZWZsYWdzID0gSU9fUkVHQlVGX0ZfRE1BQlVGO1xcbitcXHRpbXUtXFx1MDAzZWRpciA9IElPX0lNVV9ERVNUIHwgSU9fSU1VX1NPVVJDRTtcXG4rXFx0cmVmY291bnRfc2V0KFxcdTAwMjZpbXUtXFx1MDAzZXJlZnMsIDEpO1xcbitcXHRub2RlLVxcdTAwM2VidWYgPSBpbXU7XFxuK1xcdGRtYV9idWZfcHV0KGRtYWJ1Zik7XFxuK1xcdHJldHVybiBub2RlO1xcbitlcnI6XFxuK1xcdGtmcmVlKHJlZ2J1Zik7XFxuK1xcdGlmIChpbXUpXFxuK1xcdFxcdGlvX2ZyZWVfaW11KGN0eCwgaW11KTtcXG4rXFx0aWYgKG5vZGUpXFxuK1xcdFxcdGlvX2NhY2hlX2ZyZWUoXFx1MDAyNmN0eC1cXHUwMDNlbm9kZV9jYWNoZSwgbm9kZSk7XFxuK1xcdGlmICh0YXJnZXRfZmlsZSlcXG4rXFx0XFx0ZnB1dCh0YXJnZXRfZmlsZSk7XFxuK1xcdGlmIChkbWFidWYpXFxuK1xcdFxcdGRtYV9idWZfcHV0KGRtYWJ1Zik7XFxuK1xcdHJldHVybiBFUlJfUFRSKHJldCk7XFxuK31cXG4rXFxuIHN0YXRpYyBzdHJ1Y3QgaW9fcnNyY19ub2RlICppb19zcWVfYnVmZmVyX3JlZ2lzdGVyKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgaW92ZWMgKmlvdilcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IGlvX3VyaW5nX3JlZ2J1Zl9kZXNjICpkZXNjKVxcbiB7XFxuK1xcdHVuc2lnbmVkIGxvbmcgdWFkZHIgPSAodW5zaWduZWQgbG9uZylkZXNjLVxcdTAwM2V1YWRkcjtcXG4rXFx0c2l6ZV90IHNpemUgPSBkZXNjLVxcdTAwM2VzaXplO1xcbiBcXHRzdHJ1Y3QgaW9fbWFwcGVkX3VidWYgKmltdSA9IE5VTEw7XFxuIFxcdHN0cnVjdCBwYWdlICoqcGFnZXMgPSBOVUxMO1xcbiBcXHRzdHJ1Y3QgaW9fcnNyY19ub2RlICpub2RlO1xcbiBcXHR1bnNpZ25lZCBsb25nIG9mZjtcXG4tXFx0c2l6ZV90IHNpemU7XFxuIFxcdGludCByZXQsIG5yX3BhZ2VzLCBpO1xcbiBcXHRzdHJ1Y3QgaW9faW11X2ZvbGlvX2RhdGEgZGF0YTtcXG4gXFx0Ym9vbCBjb2FsZXNjZWQgPSBmYWxzZTtcXG4gXFxuLVxcdGlmICghaW92LVxcdTAwM2Vpb3ZfYmFzZSkge1xcbi1cXHRcXHRpZiAoaW92LVxcdTAwM2Vpb3ZfbGVuKVxcbitcXHRpZiAoZGVzYy1cXHUwMDNldHlwZSBcXHUwMDNlPSBfX0lPX1JFR0JVRl9UWVBFX01BWClcXG4rXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XFxuK1xcdGlmICghbWVtX2lzX3plcm8oXFx1MDAyNmRlc2MtXFx1MDAzZV9fcmVzdiwgc2l6ZW9mKGRlc2MtXFx1MDAzZV9fcmVzdikpIHx8IGRlc2MtXFx1MDAzZWZsYWdzKVxcbitcXHRcXHRyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTtcXG4rXFxuK1xcdGlmIChkZXNjLVxcdTAwM2V0eXBlID09IElPX1JFR0JVRl9UWVBFX0RNQUJVRilcXG4rXFx0XFx0cmV0dXJuIGlvX3JlZ2lzdGVyX2RtYWJ1ZihjdHgsIGRlc2MpO1xcbitcXG4rXFx0aWYgKGRlc2MtXFx1MDAzZWRtYWJ1Zl9mZCB8fCBkZXNjLVxcdTAwM2V0YXJnZXRfZmQpXFxuK1xcdFxcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xcbitcXG4rXFx0aWYgKGRlc2MtXFx1MDAzZXR5cGUgPT0gSU9fUkVHQlVGX1RZUEVfRU1QVFkpIHtcXG4rXFx0XFx0aWYgKHVhZGRyIHx8IHNpemUpXFxuIFxcdFxcdFxcdHJldHVybiBFUlJfUFRSKC1FRkFVTFQpO1xcbiBcXHRcXHQvKiByZW1vdmUgdGhlIGJ1ZmZlciB3aXRob3V0IGluc3RhbGxpbmcgYSBuZXcgb25lICovXFxuIFxcdFxcdHJldHVybiBOVUxMO1xcbiBcXHR9XFxuIFxcbi1cXHRyZXQgPSBpb192YWxpZGF0ZV91c2VyX2J1Zl9yYW5nZSgodW5zaWduZWQgbG9uZylpb3YtXFx1MDAzZWlvdl9iYXNlLFxcbi1cXHRcXHRcXHRcXHRcXHQgaW92LVxcdTAwM2Vpb3ZfbGVuKTtcXG4rXFx0cmV0ID0gaW9fdmFsaWRhdGVfdXNlcl9idWZfcmFuZ2UodWFkZHIsIHNpemUpO1xcbiBcXHRpZiAocmV0KVxcbiBcXHRcXHRyZXR1cm4gRVJSX1BUUihyZXQpO1xcbiBcXG5AQCAtODgxLDggKzEwMTAsNyBAQCBzdGF0aWMgc3RydWN0IGlvX3JzcmNfbm9kZSAqaW9fc3FlX2J1ZmZlcl9yZWdpc3RlcihzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCxcXG4gXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XFxuIFxcbiBcXHRyZXQgPSAtRU5PTUVNO1xcbi1cXHRwYWdlcyA9IGlvX3Bpbl9wYWdlcygodW5zaWduZWQgbG9uZykgaW92LVxcdTAwM2Vpb3ZfYmFzZSwgaW92LVxcdTAwM2Vpb3ZfbGVuLFxcbi1cXHRcXHRcXHRcXHRcXHUwMDI2bnJfcGFnZXMpO1xcbitcXHRwYWdlcyA9IGlvX3Bpbl9wYWdlcyh1YWRkciwgc2l6ZSwgXFx1MDAyNm5yX3BhZ2VzKTtcXG4gXFx0aWYgKElTX0VSUihwYWdlcykpIHtcXG4gXFx0XFx0cmV0ID0gUFRSX0VSUihwYWdlcyk7XFxuIFxcdFxcdHBhZ2VzID0gTlVMTDtcXG5AQCAtOTA0LDEwICsxMDMyLDkgQEAgc3RhdGljIHN0cnVjdCBpb19yc3JjX25vZGUgKmlvX3NxZV9idWZmZXJfcmVnaXN0ZXIoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXFxuIFxcdGlmIChyZXQpXFxuIFxcdFxcdGdvdG8gZG9uZTtcXG4gXFxuLVxcdHNpemUgPSBpb3YtXFx1MDAzZWlvdl9sZW47XFxuIFxcdC8qIHN0b3JlIG9yaWdpbmFsIGFkZHJlc3MgZm9yIGxhdGVyIHZlcmlmaWNhdGlvbiAqL1xcbi1cXHRpbXUtXFx1MDAzZXVidWYgPSAodW5zaWduZWQgbG9uZykgaW92LVxcdTAwM2Vpb3ZfYmFzZTtcXG4tXFx0aW11LVxcdTAwM2VsZW4gPSBpb3YtXFx1MDAzZWlvdl9sZW47XFxuK1xcdGltdS1cXHUwMDNldWJ1ZiA9IHVhZGRyO1xcbitcXHRpbXUtXFx1MDAzZWxlbiA9IHNpemU7XFxuIFxcdGltdS1cXHUwMDNlZm9saW9fc2hpZnQgPSBQQUdFX1NISUZUO1xcbiBcXHRpbXUtXFx1MDAzZXJlbGVhc2UgPSBpb19yZWxlYXNlX3VidWY7XFxuIFxcdGltdS1cXHUwMDNlcHJpdiA9IGltdTtcXG5AQCAtOTE3LDcgKzEwNDQsNyBAQCBzdGF0aWMgc3RydWN0IGlvX3JzcmNfbm9kZSAqaW9fc3FlX2J1ZmZlcl9yZWdpc3RlcihzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCxcXG4gXFx0XFx0aW11LVxcdTAwM2Vmb2xpb19zaGlmdCA9IGRhdGEuZm9saW9fc2hpZnQ7XFxuIFxcdHJlZmNvdW50X3NldChcXHUwMDI2aW11LVxcdTAwM2VyZWZzLCAxKTtcXG4gXFxuLVxcdG9mZiA9ICh1bnNpZ25lZCBsb25nKWlvdi1cXHUwMDNlaW92X2Jhc2UgXFx1MDAyNiB+UEFHRV9NQVNLO1xcbitcXHRvZmYgPSB1YWRkciBcXHUwMDI2IH5QQUdFX01BU0s7XFxuIFxcdGlmIChjb2FsZXNjZWQpXFxuIFxcdFxcdG9mZiArPSBkYXRhLmZpcnN0X2ZvbGlvX3BhZ2VfaWR4IFxcdTAwM2NcXHUwMDNjIFBBR0VfU0hJRlQ7XFxuIFxcbkBAIC05NjksNiArMTA5Niw3IEBAIGludCBpb19zcWVfYnVmZmVyc19yZWdpc3RlcihzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgdm9pZCBfX3VzZXIgKmFyZyxcXG4gXFx0XFx0bWVtc2V0KGlvdiwgMCwgc2l6ZW9mKCppb3YpKTtcXG4gXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucl9hcmdzOyBpKyspIHtcXG4rXFx0XFx0c3RydWN0IGlvX3VyaW5nX3JlZ2J1Zl9kZXNjIGRlc2M7XFxuIFxcdFxcdHN0cnVjdCBpb19yc3JjX25vZGUgKm5vZGU7XFxuIFxcdFxcdHU2NCB0YWcgPSAwO1xcbiBcXG5AQCAtOTkyLDcgKzExMjAsOCBAQCBpbnQgaW9fc3FlX2J1ZmZlcnNfcmVnaXN0ZXIoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHZvaWQgX191c2VyICphcmcsXFxuIFxcdFxcdFxcdH1cXG4gXFx0XFx0fVxcbiBcXG4tXFx0XFx0bm9kZSA9IGlvX3NxZV9idWZmZXJfcmVnaXN0ZXIoY3R4LCBpb3YpO1xcbitcXHRcXHRpb19pb3ZfdG9fcmVnYnVmX2Rlc2MoaW92LCBcXHUwMDI2ZGVzYyk7XFxuK1xcdFxcdG5vZGUgPSBpb19zcWVfYnVmZmVyX3JlZ2lzdGVyKGN0eCwgXFx1MDAyNmRlc2MpO1xcbiBcXHRcXHRpZiAoSVNfRVJSKG5vZGUpKSB7XFxuIFxcdFxcdFxcdHJldCA9IFBUUl9FUlIobm9kZSk7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbkBAIC0xMTM2LDkgKzEyNjUsNjQgQEAgc3RhdGljIGludCBpb19pbXBvcnRfa2J1ZihpbnQgZGRpciwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4tc3RhdGljIGludCBpb19pbXBvcnRfZml4ZWQoaW50IGRkaXIsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcXG4rdm9pZCBpb19kcm9wX2RtYWJ1Zl9ub2RlKHN0cnVjdCBpb19raW9jYiAqcmVxKVxcbit7XFxuK1xcdHN0cnVjdCBpb19tYXBwZWRfdWJ1ZiAqaW11O1xcbitcXG4rXFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19ETUFfU0hBUkVEX0JVRkZFUikpXFxuK1xcdFxcdHJldHVybjtcXG4rXFx0aWYgKFdBUk5fT05fT05DRShyZXEtXFx1MDAzZWJ1Zl9ub2RlLVxcdTAwM2V0eXBlICE9IElPUklOR19SU1JDX0JVRkZFUikpXFxuK1xcdFxcdHJldHVybjtcXG4rXFx0aW11ID0gcmVxLVxcdTAwM2VidWZfbm9kZS1cXHUwMDNlYnVmO1xcbitcXHRpZiAoV0FSTl9PTl9PTkNFKCEoaW11LVxcdTAwM2VmbGFncyBcXHUwMDI2IElPX1JFR0JVRl9GX0RNQUJVRikpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcdGRtYV9idWZfaW9fbWFwX2Ryb3AocmVxLVxcdTAwM2VkbWFidWZfbWFwKTtcXG4rXFx0cmVxLVxcdTAwM2VmbGFncyBcXHUwMDI2PSB+UkVRX0ZfRFJPUF9ETUFCVUY7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgaW9faW1wb3J0X2RtYWJ1ZihzdHJ1Y3QgaW9fa2lvY2IgKnJlcSxcXG4rXFx0XFx0XFx0ICAgaW50IGRkaXIsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcXG4rXFx0XFx0XFx0ICAgc3RydWN0IGlvX21hcHBlZF91YnVmICppbXUsXFxuK1xcdFxcdFxcdCAgIHNpemVfdCBsZW4sIHNpemVfdCBvZmZzZXQsXFxuK1xcdFxcdFxcdCAgIHVuc2lnbmVkIGlzc3VlX2ZsYWdzKVxcbit7XFxuK1xcdHN0cnVjdCBpb19yZWdidWZfZG1hICpkYiA9IGltdS1cXHUwMDNlcHJpdjtcXG4rXFx0c3RydWN0IGRtYV9idWZfaW9fbWFwICptYXA7XFxuK1xcbitcXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0RNQV9TSEFSRURfQlVGRkVSKSlcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHRpZiAoIWxlbilcXG4rXFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuK1xcdGlmIChyZXEtXFx1MDAzZWZpbGUgIT0gZGItXFx1MDAzZXRhcmdldF9maWxlKVxcbitcXHRcXHRyZXR1cm4gLUVCQURGO1xcbitcXG4rXFx0aWYgKHJlcS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBSRVFfRl9EUk9QX0RNQUJVRikge1xcbitcXHRcXHRtYXAgPSByZXEtXFx1MDAzZWRtYWJ1Zl9tYXA7XFxuK1xcdFxcdGdvdG8gaW5pdF9pdGVyO1xcbitcXHR9XFxuK1xcbitcXHRtYXAgPSBkbWFfYnVmX2lvX2dldF9tYXAoXFx1MDAyNmRiLVxcdTAwM2VjdHgpO1xcbitcXHRpZiAodW5saWtlbHkoIW1hcCkpIHtcXG4rXFx0XFx0aWYgKCEoaXNzdWVfZmxhZ3MgXFx1MDAyNiBJT19VUklOR19GX0lPV1EpKVxcbitcXHRcXHRcXHRyZXR1cm4gLUVBR0FJTjtcXG4rXFx0XFx0bWFwID0gZG1hX2J1Zl9pb19jcmVhdGVfbWFwKFxcdTAwMjZkYi1cXHUwMDNlY3R4KTtcXG4rXFx0XFx0aWYgKElTX0VSUihtYXApKVxcbitcXHRcXHRcXHRyZXR1cm4gUFRSX0VSUihtYXApO1xcbitcXHR9XFxuK1xcbitcXHRyZXEtXFx1MDAzZWRtYWJ1Zl9tYXAgPSBtYXA7XFxuK1xcdHJlcS1cXHUwMDNlZmxhZ3MgfD0gUkVRX0ZfRFJPUF9ETUFCVUY7XFxuK2luaXRfaXRlcjpcXG4rXFx0aW92X2l0ZXJfZG1hYnVmX21hcChpdGVyLCBkZGlyLCBtYXAsIG9mZnNldCwgbGVuKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgaW9faW1wb3J0X2ZpeGVkKHN0cnVjdCBpb19raW9jYiAqcmVxLFxcbitcXHRcXHRcXHQgICBpbnQgZGRpciwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxcbiBcXHRcXHRcXHQgICBzdHJ1Y3QgaW9fbWFwcGVkX3VidWYgKmltdSxcXG4tXFx0XFx0XFx0ICAgdTY0IGJ1Zl9hZGRyLCBzaXplX3QgbGVuKVxcbitcXHRcXHRcXHQgICB1NjQgYnVmX2FkZHIsIHNpemVfdCBsZW4sXFxuK1xcdFxcdFxcdCAgIHVuc2lnbmVkIGlzc3VlX2ZsYWdzLFxcbitcXHRcXHRcXHQgICB1bnNpZ25lZCBpbXBvcnRfZmxhZ3MpXFxuIHtcXG4gXFx0Y29uc3Qgc3RydWN0IGJpb192ZWMgKmJ2ZWM7XFxuIFxcdHNpemVfdCBmb2xpb19tYXNrO1xcbkBAIC0xMTU4LDYgKzEzNDIsMTIgQEAgc3RhdGljIGludCBpb19pbXBvcnRfZml4ZWQoaW50IGRkaXIsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcXG4gXFxuIFxcdG9mZnNldCA9IGJ1Zl9hZGRyIC0gaW11LVxcdTAwM2V1YnVmO1xcbiBcXG4rXFx0aWYgKGltdS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJT19SRUdCVUZfRl9ETUFCVUYpIHtcXG4rXFx0XFx0aWYgKCEoaW1wb3J0X2ZsYWdzIFxcdTAwMjYgSU9fUkVHQlVGX0lNUE9SVF9BTExPV19ETUFCVUYpKVxcbitcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4rXFx0XFx0cmV0dXJuIGlvX2ltcG9ydF9kbWFidWYocmVxLCBkZGlyLCBpdGVyLCBpbXUsIGxlbiwgb2Zmc2V0LFxcbitcXHRcXHRcXHRcXHRcXHRpc3N1ZV9mbGFncyk7XFxuK1xcdH1cXG4gXFx0aWYgKGltdS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJT19SRUdCVUZfRl9LQlVGKVxcbiBcXHRcXHRyZXR1cm4gaW9faW1wb3J0X2tidWYoZGRpciwgaXRlciwgaW11LCBsZW4sIG9mZnNldCk7XFxuIFxcbkBAIC0xMjExLDE2ICsxNDAxLDE3IEBAIGlubGluZSBzdHJ1Y3QgaW9fcnNyY19ub2RlICppb19maW5kX2J1Zl9ub2RlKHN0cnVjdCBpb19raW9jYiAqcmVxLFxcbiBcXHRyZXR1cm4gTlVMTDtcXG4gfVxcbiBcXG4taW50IGlvX2ltcG9ydF9yZWdfYnVmKHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXFxuK2ludCBfX2lvX2ltcG9ydF9yZWdfYnVmKHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXFxuIFxcdFxcdFxcdHU2NCBidWZfYWRkciwgc2l6ZV90IGxlbiwgaW50IGRkaXIsXFxuLVxcdFxcdFxcdHVuc2lnbmVkIGlzc3VlX2ZsYWdzKVxcbitcXHRcXHRcXHR1bnNpZ25lZCBpc3N1ZV9mbGFncywgdW5zaWduZWQgaW1wb3J0X2ZsYWdzKVxcbiB7XFxuIFxcdHN0cnVjdCBpb19yc3JjX25vZGUgKm5vZGU7XFxuIFxcbiBcXHRub2RlID0gaW9fZmluZF9idWZfbm9kZShyZXEsIGlzc3VlX2ZsYWdzKTtcXG4gXFx0aWYgKCFub2RlKVxcbiBcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4tXFx0cmV0dXJuIGlvX2ltcG9ydF9maXhlZChkZGlyLCBpdGVyLCBub2RlLVxcdTAwM2VidWYsIGJ1Zl9hZGRyLCBsZW4pO1xcbitcXHRyZXR1cm4gaW9faW1wb3J0X2ZpeGVkKHJlcSwgZGRpciwgaXRlciwgbm9kZS1cXHUwMDNlYnVmLCBidWZfYWRkciwgbGVuLFxcbitcXHRcXHRcXHRcXHRpc3N1ZV9mbGFncywgaW1wb3J0X2ZsYWdzKTtcXG4gfVxcbiBcXG4gc3RhdGljIGludCBpb19idWZmZXJfYWNjdF9jbG9uZWRfaHBhZ2VzKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxcbkBAIC0xMzQ3LDYgKzE1MzgsMTEgQEAgc3RhdGljIGludCBpb19jbG9uZV9idWZmZXJzKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBzdHJ1Y3QgaW9fcmluZ19jdHggKnNyY19jdHhcXG4gXFx0XFx0aWYgKCFzcmNfbm9kZSkge1xcbiBcXHRcXHRcXHRkc3Rfbm9kZSA9IE5VTEw7XFxuIFxcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdGlmIChzcmNfbm9kZS1cXHUwMDNlYnVmLVxcdTAwM2VmbGFncyBcXHUwMDI2IElPX1JFR0JVRl9GX1VOQ0xPTkVBQkxFKSB7XFxuK1xcdFxcdFxcdFxcdGlvX3JzcmNfZGF0YV9mcmVlKGN0eCwgXFx1MDAyNmRhdGEpO1xcbitcXHRcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFx0XFx0XFx0fVxcbitcXG4gXFx0XFx0XFx0ZHN0X25vZGUgPSBpb19yc3JjX25vZGVfYWxsb2MoY3R4LCBJT1JJTkdfUlNSQ19CVUZGRVIpO1xcbiBcXHRcXHRcXHRpZiAoIWRzdF9ub2RlKSB7XFxuIFxcdFxcdFxcdFxcdGlvX3JzcmNfZGF0YV9mcmVlKGN0eCwgXFx1MDAyNmRhdGEpO1xcbkBAIC0xNjE3LDkgKzE4MTMsOSBAQCBzdGF0aWMgaW50IGlvX2tlcm5fYnZlY19zaXplKHN0cnVjdCBpb3ZlYyAqaW92LCB1bnNpZ25lZCBucl9pb3ZzLFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4taW50IGlvX2ltcG9ydF9yZWdfdmVjKGludCBkZGlyLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXFxuK2ludCBfX2lvX2ltcG9ydF9yZWdfdmVjKGludCBkZGlyLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXFxuIFxcdFxcdFxcdHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgaW91X3ZlYyAqdmVjLFxcbi1cXHRcXHRcXHR1bnNpZ25lZCBucl9pb3ZzLCB1bnNpZ25lZCBpc3N1ZV9mbGFncylcXG4rXFx0XFx0XFx0dW5zaWduZWQgbnJfaW92cywgdW5zaWduZWQgaXNzdWVfZmxhZ3MsIHVuc2lnbmVkIGltcG9ydF9mbGFncylcXG4ge1xcbiBcXHRzdHJ1Y3QgaW9fcnNyY19ub2RlICpub2RlO1xcbiBcXHRzdHJ1Y3QgaW9fbWFwcGVkX3VidWYgKmltdTtcXG5AQCAtMTYzNyw3ICsxODMzLDkgQEAgaW50IGlvX2ltcG9ydF9yZWdfdmVjKGludCBkZGlyLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXFxuIFxcdGlvdmVjX29mZiA9IHZlYy1cXHUwMDNlbnIgLSBucl9pb3ZzO1xcbiBcXHRpb3YgPSB2ZWMtXFx1MDAzZWlvdmVjICsgaW92ZWNfb2ZmO1xcbiBcXG4tXFx0aWYgKGltdS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJT19SRUdCVUZfRl9LQlVGKSB7XFxuK1xcdGlmIChpbXUtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSU9fUkVHQlVGX0ZfRE1BQlVGKSB7XFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0fSBlbHNlIGlmIChpbXUtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSU9fUkVHQlVGX0ZfS0JVRikge1xcbiBcXHRcXHRpbnQgcmV0ID0gaW9fa2Vybl9idmVjX3NpemUoaW92LCBucl9pb3ZzLCBpbXUsIFxcdTAwMjZucl9zZWdzKTtcXG4gXFxuIFxcdFxcdGlmICh1bmxpa2VseShyZXQpKVxcbmRpZmYgLS1naXQgYS9pb191cmluZy9yc3JjLmggYi9pb191cmluZy9yc3JjLmhcXG5pbmRleCA5OGFlOGVmNTEwMDlkLi4zY2I5YjU3ZjE1OWI2IDEwMDY0NFxcbi0tLSBhL2lvX3VyaW5nL3JzcmMuaFxcbisrKyBiL2lvX3VyaW5nL3JzcmMuaFxcbkBAIC0yOSw3ICsyOSwxMyBAQCBlbnVtIHtcXG4gfTtcXG4gXFxuIGVudW0ge1xcbi1cXHRJT19SRUdCVUZfRl9LQlVGXFx0XFx0PSAxLFxcbitcXHRJT19SRUdCVUZfRl9LQlVGXFx0XFx0PSAxIFxcdTAwM2NcXHUwMDNjIDAsXFxuK1xcdElPX1JFR0JVRl9GX1VOQ0xPTkVBQkxFXFx0XFx0PSAxIFxcdTAwM2NcXHUwMDNjIDEsXFxuK1xcdElPX1JFR0JVRl9GX0RNQUJVRlxcdFxcdD0gMSBcXHUwMDNjXFx1MDAzYyAzLFxcbit9O1xcbitcXG4rZW51bSB7XFxuK1xcdElPX1JFR0JVRl9JTVBPUlRfQUxMT1dfRE1BQlVGXFx0XFx0PSAxIFxcdTAwM2NcXHUwMDNjIDEsXFxuIH07XFxuIFxcbiBzdHJ1Y3QgaW9fbWFwcGVkX3VidWYge1xcbkBAIC02NCwxMiArNzAsMjggQEAgaW50IGlvX3JzcmNfZGF0YV9hbGxvYyhzdHJ1Y3QgaW9fcnNyY19kYXRhICpkYXRhLCB1bnNpZ25lZCBucik7XFxuIFxcbiBzdHJ1Y3QgaW9fcnNyY19ub2RlICppb19maW5kX2J1Zl9ub2RlKHN0cnVjdCBpb19raW9jYiAqcmVxLFxcbiBcXHRcXHRcXHRcXHQgICAgICB1bnNpZ25lZCBpc3N1ZV9mbGFncyk7XFxuLWludCBpb19pbXBvcnRfcmVnX2J1ZihzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxcbitpbnQgX19pb19pbXBvcnRfcmVnX2J1ZihzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxcbiBcXHRcXHRcXHR1NjQgYnVmX2FkZHIsIHNpemVfdCBsZW4sIGludCBkZGlyLFxcbi1cXHRcXHRcXHR1bnNpZ25lZCBpc3N1ZV9mbGFncyk7XFxuLWludCBpb19pbXBvcnRfcmVnX3ZlYyhpbnQgZGRpciwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxcbitcXHRcXHRcXHR1bnNpZ25lZCBpc3N1ZV9mbGFncywgdW5zaWduZWQgaW1wb3J0X2ZsYWdzKTtcXG4raW50IF9faW9faW1wb3J0X3JlZ192ZWMoaW50IGRkaXIsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcXG4gXFx0XFx0XFx0c3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBpb3VfdmVjICp2ZWMsXFxuLVxcdFxcdFxcdHVuc2lnbmVkIG5yX2lvdnMsIHVuc2lnbmVkIGlzc3VlX2ZsYWdzKTtcXG4rXFx0XFx0XFx0dW5zaWduZWQgbnJfaW92cywgdW5zaWduZWQgaXNzdWVfZmxhZ3MsXFxuK1xcdFxcdFxcdHVuc2lnbmVkIGltcG9ydF9mbGFncyk7XFxuK1xcbitzdGF0aWMgaW5saW5lIGludCBpb19pbXBvcnRfcmVnX2J1ZihzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxcbitcXHRcXHRcXHRcXHQgICAgdTY0IGJ1Zl9hZGRyLCBzaXplX3QgbGVuLCBpbnQgZGRpcixcXG4rXFx0XFx0XFx0XFx0ICAgIHVuc2lnbmVkIGlzc3VlX2ZsYWdzKVxcbit7XFxuK1xcdHJldHVybiBfX2lvX2ltcG9ydF9yZWdfYnVmKHJlcSwgaXRlciwgYnVmX2FkZHIsIGxlbiwgZGRpciwgaXNzdWVfZmxhZ3MsIDApO1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIGludCBpb19pbXBvcnRfcmVnX3ZlYyhpbnQgZGRpciwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxcbitcXHRcXHRcXHRcXHQgICAgc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBpb3VfdmVjICp2ZWMsXFxuK1xcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBucl9pb3ZzLCB1bnNpZ25lZCBpc3N1ZV9mbGFncylcXG4re1xcbitcXHRyZXR1cm4gX19pb19pbXBvcnRfcmVnX3ZlYyhkZGlyLCBpdGVyLCByZXEsIHZlYywgbnJfaW92cywgaXNzdWVfZmxhZ3MsIDApO1xcbit9XFxuK1xcbiBpbnQgaW9fcHJlcF9yZWdfaW92ZWMoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBpb3VfdmVjICppdixcXG4gXFx0XFx0XFx0Y29uc3Qgc3RydWN0IGlvdmVjIF9fdXNlciAqdXZlYywgc2l6ZV90IHV2ZWNfc2Vncyk7XFxuIFxcbkBAIC0xNTYsNCArMTc4LDE3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBpb19hbGxvY19jYWNoZV92ZWNfa2FzYW4oc3RydWN0IGlvdV92ZWMgKml2KVxcbiBcXHRcXHRpb192ZWNfZnJlZShpdik7XFxuIH1cXG4gXFxuK3ZvaWQgaW9fZHJvcF9kbWFidWZfbm9kZShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSk7XFxuK1xcbitzdGF0aWMgaW5saW5lIHZvaWQgaW9fcmVxX2Ryb3BfZG1hYnVmKHN0cnVjdCBpb19raW9jYiAqcmVxKVxcbit7XFxuK1xcdGlmICghSVNfRU5BQkxFRChDT05GSUdfRE1BX1NIQVJFRF9CVUZGRVIpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcdGlmICghKHJlcS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBSRVFfRl9EUk9QX0RNQUJVRikpXFxuK1xcdFxcdHJldHVybjtcXG4rXFx0aWYgKFdBUk5fT05fT05DRSghKHJlcS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBSRVFfRl9CVUZfTk9ERSkpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcdGlvX2Ryb3BfZG1hYnVmX25vZGUocmVxKTtcXG4rfVxcbitcXG4gI2VuZGlmXFxuZGlmZiAtLWdpdCBhL2lvX3VyaW5nL3J3LmMgYi9pb191cmluZy9ydy5jXFxuaW5kZXggOTUwMzhjZmRhNjE1My4uMTFmZjdiNWExMTY0NyAxMDA2NDRcXG4tLS0gYS9pb191cmluZy9ydy5jXFxuKysrIGIvaW9fdXJpbmcvcncuY1xcbkBAIC0zODAsOCArMzgwLDggQEAgc3RhdGljIGludCBpb19pbml0X3J3X2ZpeGVkKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MsXFxuIFxcdGlmIChpby1cXHUwMDNlYnl0ZXNfZG9uZSlcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcbi1cXHRyZXQgPSBpb19pbXBvcnRfcmVnX2J1ZihyZXEsIFxcdTAwMjZpby1cXHUwMDNlaXRlciwgcnctXFx1MDAzZWFkZHIsIHJ3LVxcdTAwM2VsZW4sIGRkaXIsXFxuLVxcdFxcdFxcdFxcdGlzc3VlX2ZsYWdzKTtcXG4rXFx0cmV0ID0gX19pb19pbXBvcnRfcmVnX2J1ZihyZXEsIFxcdTAwMjZpby1cXHUwMDNlaXRlciwgcnctXFx1MDAzZWFkZHIsIHJ3LVxcdTAwM2VsZW4sIGRkaXIsXFxuK1xcdFxcdFxcdFxcdCAgaXNzdWVfZmxhZ3MsIElPX1JFR0JVRl9JTVBPUlRfQUxMT1dfRE1BQlVGKTtcXG4gXFx0aW92X2l0ZXJfc2F2ZV9zdGF0ZShcXHUwMDI2aW8tXFx1MDAzZWl0ZXIsIFxcdTAwMjZpby1cXHUwMDNlaXRlcl9zdGF0ZSk7XFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG5AQCAtNTkxLDYgKzU5MSw4IEBAIHN0YXRpYyB2b2lkIGlvX2NvbXBsZXRlX3J3KHN0cnVjdCBraW9jYiAqa2lvY2IsIGxvbmcgcmVzKVxcbiBcXHRzdHJ1Y3QgaW9fcncgKnJ3ID0gY29udGFpbmVyX29mKGtpb2NiLCBzdHJ1Y3QgaW9fcncsIGtpb2NiKTtcXG4gXFx0c3RydWN0IGlvX2tpb2NiICpyZXEgPSBjbWRfdG9faW9fa2lvY2IocncpO1xcbiBcXG4rXFx0aW9fcmVxX2Ryb3BfZG1hYnVmKHJlcSk7XFxuK1xcbiBcXHRfX2lvX2NvbXBsZXRlX3J3X2NvbW1vbihyZXEsIHJlcyk7XFxuIFxcdGlvX3JlcV9zZXRfcmVzKHJlcSwgaW9fZml4dXBfcndfcmVzKHJlcSwgcmVzKSwgMCk7XFxuIFxcdHJlcS1cXHUwMDNlaW9fdGFza193b3JrLmZ1bmMgPSBpb19yZXFfcndfY29tcGxldGU7XFxuZGlmZiAtLWdpdCBhL2xpYi9pb3ZfaXRlci5jIGIvbGliL2lvdl9pdGVyLmNcXG5pbmRleCAzNGE1MmU5YmE5ZTFiLi5kNmY1ZDdlMTgwYjU0IDEwMDY0NFxcbi0tLSBhL2xpYi9pb3ZfaXRlci5jXFxuKysrIGIvbGliL2lvdl9pdGVyLmNcXG5AQCAtNTc1LDcgKzU3NSw4IEBAIHZvaWQgaW92X2l0ZXJfYWR2YW5jZShzdHJ1Y3QgaW92X2l0ZXIgKmksIHNpemVfdCBzaXplKVxcbiB7XFxuIFxcdGlmICh1bmxpa2VseShpLVxcdTAwM2Vjb3VudCBcXHUwMDNjIHNpemUpKVxcbiBcXHRcXHRzaXplID0gaS1cXHUwMDNlY291bnQ7XFxuLVxcdGlmIChsaWtlbHkoaXRlcl9pc191YnVmKGkpKSB8fCB1bmxpa2VseShpb3ZfaXRlcl9pc194YXJyYXkoaSkpKSB7XFxuK1xcdGlmIChsaWtlbHkoaXRlcl9pc191YnVmKGkpKSB8fCB1bmxpa2VseShpb3ZfaXRlcl9pc194YXJyYXkoaSkpIHx8XFxuK1xcdCAgICB1bmxpa2VseShpb3ZfaXRlcl9pc19kbWFidWZfbWFwKGkpKSkge1xcbiBcXHRcXHRpLVxcdTAwM2Vpb3Zfb2Zmc2V0ICs9IHNpemU7XFxuIFxcdFxcdGktXFx1MDAzZWNvdW50IC09IHNpemU7XFxuIFxcdH0gZWxzZSBpZiAobGlrZWx5KGl0ZXJfaXNfaW92ZWMoaSkgfHwgaW92X2l0ZXJfaXNfa3ZlYyhpKSkpIHtcXG5AQCAtNjMxLDcgKzYzMiw4IEBAIHZvaWQgaW92X2l0ZXJfcmV2ZXJ0KHN0cnVjdCBpb3ZfaXRlciAqaSwgc2l6ZV90IHVucm9sbClcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXHR9XFxuIFxcdHVucm9sbCAtPSBpLVxcdTAwM2Vpb3Zfb2Zmc2V0O1xcbi1cXHRpZiAoaW92X2l0ZXJfaXNfeGFycmF5KGkpIHx8IGl0ZXJfaXNfdWJ1ZihpKSkge1xcbitcXHRpZiAoaW92X2l0ZXJfaXNfeGFycmF5KGkpIHx8IGl0ZXJfaXNfdWJ1ZihpKSB8fFxcbitcXHQgICAgaW92X2l0ZXJfaXNfZG1hYnVmX21hcChpKSkge1xcbiBcXHRcXHRCVUcoKTsgLyogV2Ugc2hvdWxkIG5ldmVyIGdvIGJleW9uZCB0aGUgc3RhcnQgb2YgdGhlIHNwZWNpZmllZFxcbiBcXHRcXHRcXHQqIHJhbmdlIHNpbmNlIHdlIG1pZ2h0IHRoZW4gYmUgc3RyYXlpbmcgaW50byBwYWdlcyB0aGF0XFxuIFxcdFxcdFxcdCogYXJlbid0IHBpbm5lZC5cXG5AQCAtNzc1LDYgKzc3NywyMCBAQCB2b2lkIGlvdl9pdGVyX3hhcnJheShzdHJ1Y3QgaW92X2l0ZXIgKmksIHVuc2lnbmVkIGludCBkaXJlY3Rpb24sXFxuIH1cXG4gRVhQT1JUX1NZTUJPTChpb3ZfaXRlcl94YXJyYXkpO1xcbiBcXG4rdm9pZCBpb3ZfaXRlcl9kbWFidWZfbWFwKHN0cnVjdCBpb3ZfaXRlciAqaSwgdW5zaWduZWQgaW50IGRpcmVjdGlvbixcXG4rXFx0XFx0XFx0IHN0cnVjdCBkbWFfYnVmX2lvX21hcCAqbWFwLFxcbitcXHRcXHRcXHQgbG9mZl90IG9mZiwgc2l6ZV90IGNvdW50KVxcbit7XFxuK1xcdFdBUk5fT04oZGlyZWN0aW9uIFxcdTAwMjYgfihSRUFEIHwgV1JJVEUpKTtcXG4rXFx0KmkgPSAoc3RydWN0IGlvdl9pdGVyKXtcXG4rXFx0XFx0Lml0ZXJfdHlwZSA9IElURVJfRE1BQlVGX01BUCxcXG4rXFx0XFx0LmRhdGFfc291cmNlID0gZGlyZWN0aW9uLFxcbitcXHRcXHQuZG1hYnVmX21hcCA9IG1hcCxcXG4rXFx0XFx0LmNvdW50ID0gY291bnQsXFxuK1xcdFxcdC5pb3Zfb2Zmc2V0ID0gb2ZmLFxcbitcXHR9O1xcbit9XFxuK1xcbiAvKipcXG4gICogaW92X2l0ZXJfZGlzY2FyZCAtIEluaXRpYWxpc2UgYW4gSS9PIGl0ZXJhdG9yIHRoYXQgZGlzY2FyZHMgZGF0YVxcbiAgKiBAaTogVGhlIGl0ZXJhdG9yIHRvIGluaXRpYWxpc2UuXFxuQEAgLTg0MSw3ICs4NTcsNyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBpb3ZfaXRlcl9hbGlnbm1lbnRfYnZlYyhjb25zdCBzdHJ1Y3QgaW92X2l0ZXIgKmkpXFxuIFxcbiB1bnNpZ25lZCBsb25nIGlvdl9pdGVyX2FsaWdubWVudChjb25zdCBzdHJ1Y3QgaW92X2l0ZXIgKmkpXFxuIHtcXG4tXFx0aWYgKGxpa2VseShpdGVyX2lzX3VidWYoaSkpKSB7XFxuK1xcdGlmIChsaWtlbHkoaXRlcl9pc191YnVmKGkpKSB8fCBpb3ZfaXRlcl9pc19kbWFidWZfbWFwKGkpKSB7XFxuIFxcdFxcdHNpemVfdCBzaXplID0gaS1cXHUwMDNlY291bnQ7XFxuIFxcdFxcdGlmIChzaXplKVxcbiBcXHRcXHRcXHRyZXR1cm4gKCh1bnNpZ25lZCBsb25nKWktXFx1MDAzZXVidWYgKyBpLVxcdTAwM2Vpb3Zfb2Zmc2V0KSB8IHNpemU7XFxuQEAgLTg3Miw3ICs4ODgsNyBAQCB1bnNpZ25lZCBsb25nIGlvdl9pdGVyX2dhcF9hbGlnbm1lbnQoY29uc3Qgc3RydWN0IGlvdl9pdGVyICppKVxcbiBcXHRzaXplX3Qgc2l6ZSA9IGktXFx1MDAzZWNvdW50O1xcbiBcXHR1bnNpZ25lZCBrO1xcbiBcXG4tXFx0aWYgKGl0ZXJfaXNfdWJ1ZihpKSlcXG4rXFx0aWYgKGl0ZXJfaXNfdWJ1ZihpKSB8fCBpb3ZfaXRlcl9pc19kbWFidWZfbWFwKGkpKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuIFxcdGlmIChXQVJOX09OKCFpdGVyX2lzX2lvdmVjKGkpKSlcXG5AQCAtMTQ2OSwxMSArMTQ4NSwxMiBAQCBFWFBPUlRfU1lNQk9MX0dQTChpbXBvcnRfdWJ1Zik7XFxuIHZvaWQgaW92X2l0ZXJfcmVzdG9yZShzdHJ1Y3QgaW92X2l0ZXIgKmksIHN0cnVjdCBpb3ZfaXRlcl9zdGF0ZSAqc3RhdGUpXFxuIHtcXG4gXFx0aWYgKFdBUk5fT05fT05DRSghaW92X2l0ZXJfaXNfYnZlYyhpKSBcXHUwMDI2XFx1MDAyNiAhaXRlcl9pc19pb3ZlYyhpKSBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHRcXHQgIWl0ZXJfaXNfdWJ1ZihpKSkgXFx1MDAyNlxcdTAwMjYgIWlvdl9pdGVyX2lzX2t2ZWMoaSkpXFxuK1xcdFxcdFxcdCAhaXRlcl9pc191YnVmKGkpIFxcdTAwMjZcXHUwMDI2ICFpb3ZfaXRlcl9pc19rdmVjKGkpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdCAhaW92X2l0ZXJfaXNfZG1hYnVmX21hcChpKSkpXFxuIFxcdFxcdHJldHVybjtcXG4gXFx0aS1cXHUwMDNlaW92X29mZnNldCA9IHN0YXRlLVxcdTAwM2Vpb3Zfb2Zmc2V0O1xcbiBcXHRpLVxcdTAwM2Vjb3VudCA9IHN0YXRlLVxcdTAwM2Vjb3VudDtcXG4tXFx0aWYgKGl0ZXJfaXNfdWJ1ZihpKSlcXG4rXFx0aWYgKGl0ZXJfaXNfdWJ1ZihpKSB8fCBpb3ZfaXRlcl9pc19kbWFidWZfbWFwKGkpKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcdC8qXFxuIFxcdCAqIEZvciB0aGUgKnZlYyBpdGVycywgbnJfc2VncyArIGlvdiBpcyBjb25zdGFudCAtIGlmIHdlIGluY3JlbWVudFxcbkBAIC0xNjM0LDcgKzE2NTEsNyBAQCBzdGF0aWMgc3NpemVfdCBpb3ZfaXRlcl9leHRyYWN0X2J2ZWNfcGFnZXMoc3RydWN0IGlvdl9pdGVyICppLFxcbiBcXHR9XFxuIFxcdGJpLmJpX2lkeCA9IDA7XFxuIFxcdGJpLmJpX3NpemUgPSBtYXhzaXplO1xcbi1cXHRiaS5iaV9idmVjX2RvbmUgPSBza2lwO1xcbitcXHRiaS5iaV9vZmZzZXQgPSBza2lwO1xcbiBcXG4gXFx0bWF4cGFnZXMgPSB3YW50X3BhZ2VzX2FycmF5KHBhZ2VzLCBtYXhzaXplLCBza2lwLCBtYXhwYWdlcyk7XFxuIFxcdGlmICghbWF4cGFnZXMpXFxuZGlmZiAtLWdpdCBhL25ldC9jZXBoL21lc3Nlbmdlci5jIGIvbmV0L2NlcGgvbWVzc2VuZ2VyLmNcXG5pbmRleCAzNGIzMDk3YjRjN2I5Li45YzFiNmNmOGMzNmZlIDEwMDY0NFxcbi0tLSBhL25ldC9jZXBoL21lc3Nlbmdlci5jXFxuKysrIGIvbmV0L2NlcGgvbWVzc2VuZ2VyLmNcXG5AQCAtNzYyLDcgKzc2Miw3IEBAIHN0YXRpYyBib29sIGNlcGhfbXNnX2RhdGFfYmlvX2FkdmFuY2Uoc3RydWN0IGNlcGhfbXNnX2RhdGFfY3Vyc29yICpjdXJzb3IsXFxuIFxcdGlmICghY3Vyc29yLVxcdTAwM2VyZXNpZClcXG4gXFx0XFx0cmV0dXJuIGZhbHNlOyAgIC8qIG5vIG1vcmUgZGF0YSAqL1xcbiBcXG4tXFx0aWYgKCFieXRlcyB8fCAoaXQtXFx1MDAzZWl0ZXIuYmlfc2l6ZSBcXHUwMDI2XFx1MDAyNiBpdC1cXHUwMDNlaXRlci5iaV9idmVjX2RvbmUgXFx1MDAyNlxcdTAwMjZcXG4rXFx0aWYgKCFieXRlcyB8fCAoaXQtXFx1MDAzZWl0ZXIuYmlfc2l6ZSBcXHUwMDI2XFx1MDAyNiBpdC1cXHUwMDNlaXRlci5iaV9vZmZzZXQgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0ICAgICAgIHBhZ2UgPT0gYmlvX2l0ZXJfcGFnZShpdC1cXHUwMDNlYmlvLCBpdC1cXHUwMDNlaXRlcikpKVxcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFx0LyogbW9yZSBieXRlcyB0byBwcm9jZXNzIGluIHRoaXMgc2VnbWVudCAqL1xcbiBcXG5AQCAtODE3LDcgKzgxNyw3IEBAIHN0YXRpYyBib29sIGNlcGhfbXNnX2RhdGFfYnZlY3NfYWR2YW5jZShzdHJ1Y3QgY2VwaF9tc2dfZGF0YV9jdXJzb3IgKmN1cnNvcixcXG4gXFx0aWYgKCFjdXJzb3ItXFx1MDAzZXJlc2lkKVxcbiBcXHRcXHRyZXR1cm4gZmFsc2U7ICAgLyogbm8gbW9yZSBkYXRhICovXFxuIFxcbi1cXHRpZiAoIWJ5dGVzIHx8IChjdXJzb3ItXFx1MDAzZWJ2ZWNfaXRlci5iaV9idmVjX2RvbmUgXFx1MDAyNlxcdTAwMjZcXG4rXFx0aWYgKCFieXRlcyB8fCAoY3Vyc29yLVxcdTAwM2VidmVjX2l0ZXIuYmlfb2Zmc2V0IFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdCAgICAgICBwYWdlID09IGJ2ZWNfaXRlcl9wYWdlKGJ2ZWNzLCBjdXJzb3ItXFx1MDAzZWJ2ZWNfaXRlcikpKVxcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFx0LyogbW9yZSBieXRlcyB0byBwcm9jZXNzIGluIHRoaXMgc2VnbWVudCAqL1xcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTQ6Mzc6MzcuMzY0MTEzNzI0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NDU1NzE4NTc0NDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRE1BX1NIQVJFRF9CVUZGRVJcIixcbiAgICBcIklPX1VSSU5HXCIsXG4gICAgXCJCTEtfREVWX05WTUVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkbWFfYnVmX2lvX2N0eF9jcmVhdGVcIixcbiAgICBcImRtYV9idWZfaW9fY3R4X3JlbGVhc2VcIixcbiAgICBcImRtYV9idWZfaW9fY3JlYXRlX21hcFwiLFxuICAgIFwiZG1hX2J1Zl9pb19pbnZhbGlkYXRlX21hcHBpbmdzXCIsXG4gICAgXCJkbWFfYnVmX2lvX2luaXRfbWFwXCIsXG4gICAgXCJiaW9faW92X2l0ZXJfc2V0XCIsXG4gICAgXCJfX2lvX2ltcG9ydF9yZWdfYnVmXCIsXG4gICAgXCJpb19kcm9wX2RtYWJ1Zl9ub2RlXCIsXG4gICAgXCJpb3ZfaXRlcl9kbWFidWZfbWFwXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBkbWEtYnVmIHN1cHBvcnQgaW4gdGhlIGJsb2NrIGxheWVyLCBOVk1lIFBDSSBkcml2ZXIsIGFuZCBpb191cmluZy4gSXQgYWRkcyBhIG5ldyBkbWEtYnVmIEkvTyBtYXBwaW5nIGluZnJhc3RydWN0dXJlIGFuZCBtb2RpZmllcyBjb3JlIGJpbyBhbmQgaW92X2l0ZXIgbG9naWMgdG8gaGFuZGxlIGRtYS1idWYgbWFwcy4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgZXhwb3NlcyBuZXcgcmVhY2hhYmxlIGNvZGUgcGF0aHMgdmlhIGlvX3VyaW5nIGFuZCBOVk1lLCB3aGljaCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAyY2VhNjZkMTlmNWU2MTU5NmQ0ZDAzMjZhZWU1NzUyNTY2Zjc1YmM3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBBdWcgMiAxNDozNzozNSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYmxvY2svYmlvdmVjcy5yc3QgYi9Eb2N1bWVudGF0aW9uL2Jsb2NrL2Jpb3ZlY3MucnN0XG5pbmRleCAxMTEyNmVkNmY0MGY3Li40OWRhMjE0N2I3ZDg2IDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9ibG9jay9iaW92ZWNzLnJzdFxuKysrIGIvRG9jdW1lbnRhdGlvbi9ibG9jay9iaW92ZWNzLnJzdFxuQEAgLTE2LDE2ICsxNiwxNiBAQCBidl9sZW4gYnkgdGhlIG51bWJlciBvZiBieXRlcyBjb21wbGV0ZWQgaW4gdGhhdCBiaW92ZWMuXG4gSW4gdGhlIG5ldyBzY2hlbWUgb2YgdGhpbmdzLCBldmVyeXRoaW5nIHRoYXQgbXVzdCBiZSBtdXRhdGVkIGluIG9yZGVyIHRvXG4gcGFydGlhbGx5IGNvbXBsZXRlIGEgYmlvIGlzIHNlZ3JlZ2F0ZWQgaW50byBzdHJ1Y3QgYnZlY19pdGVyOiBiaV9zZWN0b3IsXG4gYmlfc2l6ZSBhbmQgYmlfaWR4IGhhdmUgYmVlbiBtb3ZlZCB0aGVyZTsgYW5kIGluc3RlYWQgb2YgbW9kaWZ5aW5nIGJ2X29mZnNldFxuLWFuZCBidl9sZW4sIHN0cnVjdCBidmVjX2l0ZXIgaGFzIGJpX2J2ZWNfZG9uZSwgd2hpY2ggcmVwcmVzZW50cyB0aGUgbnVtYmVyIG9mXG4rYW5kIGJ2X2xlbiwgc3RydWN0IGJ2ZWNfaXRlciBoYXMgYmlfb2Zmc2V0LCB3aGljaCByZXByZXNlbnRzIHRoZSBudW1iZXIgb2ZcbiBieXRlcyBjb21wbGV0ZWQgaW4gdGhlIGN1cnJlbnQgYnZlYy5cbiBcbiBUaGVyZSBhcmUgYSBidW5jaCBvZiBuZXcgaGVscGVyIG1hY3JvcyBmb3IgaGlkaW5nIHRoZSBnb3J5IGRldGFpbHMgLSBpblxuIHBhcnRpY3VsYXIsIHByZXNlbnRpbmcgdGhlIGlsbHVzaW9uIG9mIHBhcnRpYWxseSBjb21wbGV0ZWQgYmlvdmVjcyBzbyB0aGF0XG4tbm9ybWFsIGNvZGUgZG9lc24ndCBoYXZlIHRvIGRlYWwgd2l0aCBiaV9idmVjX2RvbmUuXG4rbm9ybWFsIGNvZGUgZG9lc24ndCBoYXZlIHRvIGRlYWwgd2l0aCBiaV9vZmZzZXQuXG4gXG4gICogRHJpdmVyIGNvZGUgc2hvdWxkIG5vIGxvbmdlciByZWZlciB0byBiaW92ZWNzIGRpcmVjdGx5OyB3ZSBub3cgaGF2ZVxuICAgIGJpb19pb3ZlYygpIGFuZCBiaW9faXRlcl9pb3ZlYygpIG1hY3JvcyB0aGF0IHJldHVybiBsaXRlcmFsIHN0cnVjdCBiaW92ZWNzLFxuLSAgIGNvbnN0cnVjdGVkIGZyb20gdGhlIHJhdyBiaW92ZWNzIGJ1dCB0YWtpbmcgaW50byBhY2NvdW50IGJpX2J2ZWNfZG9uZSBhbmRcbisgICBjb25zdHJ1Y3RlZCBmcm9tIHRoZSByYXcgYmlvdmVjcyBidXQgdGFraW5nIGludG8gYWNjb3VudCBiaV9vZmZzZXQgYW5kXG4gICAgYmlfc2l6ZS5cbiBcbiAgICBiaW9fZm9yX2VhY2hfc2VnbWVudCgpIGhhcyBiZWVuIHVwZGF0ZWQgdG8gdGFrZSBhIGJ2ZWNfaXRlciBhcmd1bWVudFxuQEAgLTEwMSw3ICsxMDEsNyBAQCBPdGhlciBpbXBsaWNhdGlvbnM6XG4gICAgSS5lLiBpbnN0ZWFkIG9mIHVzaW5nIGJpb19pb3ZlY19pZHgoKSAob3IgYmlvLVx1MDAzZWJpX2lvdmVjW2Jpby1cdTAwM2ViaV9pZHhdKSwgeW91XG4gICAgbm93IHVzZSBiaW9faXRlcl9pb3ZlYygpLCB3aGljaCB0YWtlcyBhIGJ2ZWNfaXRlciBhbmQgcmV0dXJucyBhXG4gICAgbGl0ZXJhbCBzdHJ1Y3QgYmlvX3ZlYyAtIGNvbnN0cnVjdGVkIG9uIHRoZSBmbHkgZnJvbSB0aGUgcmF3IGJpb3ZlYyBidXRcbi0gICB0YWtpbmcgaW50byBhY2NvdW50IGJpX2J2ZWNfZG9uZSAoYW5kIGJpX3NpemUpLlxuKyAgIHRha2luZyBpbnRvIGFjY291bnQgYmlfb2Zmc2V0IChhbmQgYmlfc2l6ZSkuXG4gXG4gICogYmlfdmNudCBjYW4ndCBiZSB0cnVzdGVkIG9yIHJlbGllZCB1cG9uIGJ5IGRyaXZlciBjb2RlIC0gaS5lLiBhbnl0aGluZyB0aGF0XG4gICAgZG9lc24ndCBhY3R1YWxseSBvd24gdGhlIGJpby4gVGhlIHJlYXNvbiBpcyB0d29mb2xkOiBmaXJzdGx5LCBpdCdzIG5vdFxuZGlmZiAtLWdpdCBhL2Jsb2NrL2Jpby5jIGIvYmxvY2svYmlvLmNcbmluZGV4IDUwMDM4OWYzMzJkOTkuLjE2MDJlYWIwNTc2MWYgMTAwNjQ0XG4tLS0gYS9ibG9jay9iaW8uY1xuKysrIGIvYmxvY2svYmlvLmNcbkBAIC0yMjksNyArMjI5LDcgQEAgdm9pZCBiaW9faW5pdChzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHN0cnVjdCBiaW9fdmVjICp0YWJsZSxcbiBcdGJpby1cdTAwM2ViaV9pdGVyLmJpX3NlY3RvciA9IDA7XG4gXHRiaW8tXHUwMDNlYmlfaXRlci5iaV9zaXplID0gMDtcbiBcdGJpby1cdTAwM2ViaV9pdGVyLmJpX2lkeCA9IDA7XG4tXHRiaW8tXHUwMDNlYmlfaXRlci5iaV9idmVjX2RvbmUgPSAwO1xuK1x0YmlvLVx1MDAzZWJpX2l0ZXIuYmlfb2Zmc2V0ID0gMDtcbiBcdGJpby1cdTAwM2ViaV9lbmRfaW8gPSBOVUxMO1xuIFx0YmlvLVx1MDAzZWJpX3ByaXZhdGUgPSBOVUxMO1xuICNpZmRlZiBDT05GSUdfQkxLX0NHUk9VUFxuQEAgLTg2MSw2ICs4NjEsMTEgQEAgc3RhdGljIGludCBfX2Jpb19jbG9uZShzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBiaW8gKmJpb19zcmMsIGdmcF90IGdmcClcbiBcdGJpby1cdTAwM2ViaV93cml0ZV9zdHJlYW0gPSBiaW9fc3JjLVx1MDAzZWJpX3dyaXRlX3N0cmVhbTtcbiBcdGJpby1cdTAwM2ViaV9pdGVyID0gYmlvX3NyYy1cdTAwM2ViaV9pdGVyO1xuIFxuK1x0aWYgKG9wX2lzX2RtYWJ1ZihiaW8tXHUwMDNlYmlfb3BmKSlcbitcdFx0YmlvLVx1MDAzZWJpX2RtYWJ1Zl9tYXAgPSBiaW9fc3JjLVx1MDAzZWJpX2RtYWJ1Zl9tYXA7XG4rXHRlbHNlXG4rXHRcdGJpby1cdTAwM2ViaV9pb192ZWMgPSBiaW9fc3JjLVx1MDAzZWJpX2lvX3ZlYztcbitcbiBcdGlmIChiaW8tXHUwMDNlYmlfYmRldikge1xuIFx0XHRpZiAoYmlvLVx1MDAzZWJpX2JkZXYgPT0gYmlvX3NyYy1cdTAwM2ViaV9iZGV2IFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgYmlvX2ZsYWdnZWQoYmlvX3NyYywgQklPX1JFTUFQUEVEKSlcbkBAIC05MDIsOCArOTA3LDYgQEAgc3RydWN0IGJpbyAqYmlvX2FsbG9jX2Nsb25lKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHN0cnVjdCBiaW8gKmJpb19zcmMsXG4gXHRcdGJpb19wdXQoYmlvKTtcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXHR9XG4tXHRiaW8tXHUwMDNlYmlfaW9fdmVjID0gYmlvX3NyYy1cdTAwM2ViaV9pb192ZWM7XG4tXG4gXHRyZXR1cm4gYmlvO1xuIH1cbiBFWFBPUlRfU1lNQk9MKGJpb19hbGxvY19jbG9uZSk7XG5AQCAtOTIzLDcgKzkyNiw3IEBAIGludCBiaW9faW5pdF9jbG9uZShzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBzdHJ1Y3QgYmlvICpiaW8sXG4ge1xuIFx0aW50IHJldDtcbiBcbi1cdGJpb19pbml0KGJpbywgYmRldiwgYmlvX3NyYy1cdTAwM2ViaV9pb192ZWMsIDAsIGJpb19zcmMtXHUwMDNlYmlfb3BmKTtcbitcdGJpb19pbml0KGJpbywgYmRldiwgTlVMTCwgMCwgYmlvX3NyYy1cdTAwM2ViaV9vcGYpO1xuIFx0cmV0ID0gX19iaW9fY2xvbmUoYmlvLCBiaW9fc3JjLCBnZnApO1xuIFx0aWYgKHJldClcbiBcdFx0YmlvX3VuaW5pdChiaW8pO1xuQEAgLTExODIsMTUgKzExODUsMjYgQEAgdm9pZCBfX2Jpb19yZWxlYXNlX3BhZ2VzKHN0cnVjdCBiaW8gKmJpbywgYm9vbCBtYXJrX2RpcnR5KVxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChfX2Jpb19yZWxlYXNlX3BhZ2VzKTtcbiBcbi12b2lkIGJpb19pb3ZfYnZlY19zZXQoc3RydWN0IGJpbyAqYmlvLCBjb25zdCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIpXG4rYm9vbCBiaW9faW92X2l0ZXJfc2V0KHN0cnVjdCBiaW8gKmJpbywgY29uc3Qgc3RydWN0IGlvdl9pdGVyICppdGVyKVxuIHtcbitcdGlmICghaW92X2l0ZXJfaXNfYnZlYyhpdGVyKSBcdTAwMjZcdTAwMjYgIWlvdl9pdGVyX2lzX2RtYWJ1Zl9tYXAoaXRlcikpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbiBcdFdBUk5fT05fT05DRShiaW8tXHUwMDNlYmlfbWF4X3ZlY3MpO1xuIFxuK1x0c3RhdGljX2Fzc2VydChvZmZzZXRvZihzdHJ1Y3QgYmlvLCBiaV9pb192ZWMpID09XG4rXHRcdCAgICAgIG9mZnNldG9mKHN0cnVjdCBiaW8sIGJpX2RtYWJ1Zl9tYXApKTtcbitcdHN0YXRpY19hc3NlcnQob2Zmc2V0b2Yoc3RydWN0IGlvdl9pdGVyLCBidmVjKSA9PVxuK1x0XHQgICAgICBvZmZzZXRvZihzdHJ1Y3QgaW92X2l0ZXIsIGRtYWJ1Zl9tYXApKTtcbitcbiBcdGJpby1cdTAwM2ViaV9pb192ZWMgPSAoc3RydWN0IGJpb192ZWMgKilpdGVyLVx1MDAzZWJ2ZWM7XG4gXHRiaW8tXHUwMDNlYmlfaXRlci5iaV9pZHggPSAwO1xuLVx0YmlvLVx1MDAzZWJpX2l0ZXIuYmlfYnZlY19kb25lID0gaXRlci1cdTAwM2Vpb3Zfb2Zmc2V0O1xuK1x0YmlvLVx1MDAzZWJpX2l0ZXIuYmlfb2Zmc2V0ID0gaXRlci1cdTAwM2Vpb3Zfb2Zmc2V0O1xuIFx0YmlvLVx1MDAzZWJpX2l0ZXIuYmlfc2l6ZSA9IGlvdl9pdGVyX2NvdW50KGl0ZXIpO1xuIFx0YmlvX3NldF9mbGFnKGJpbywgQklPX0NMT05FRCk7XG4rXHRpZiAoaW92X2l0ZXJfaXNfZG1hYnVmX21hcChpdGVyKSlcbitcdFx0YmlvLVx1MDAzZWJpX29wZiB8PSBSRVFfTk9NRVJHRSB8IFJFUV9ETUFCVUY7XG4rXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG4gLypcbkBAIC0xMjg1LDEwICsxMjk5LDkgQEAgaW50IGJpb19pb3ZfaXRlcl9nZXRfcGFnZXMoc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG4gXHRpZiAoV0FSTl9PTl9PTkNFKGJpb19mbGFnZ2VkKGJpbywgQklPX0NMT05FRCkpKVxuIFx0XHRyZXR1cm4gLUVJTztcbiBcbi1cdGlmIChpb3ZfaXRlcl9pc19idmVjKGl0ZXIpKSB7XG4tXHRcdGJpb19pb3ZfYnZlY19zZXQoYmlvLCBpdGVyKTtcbi1cbi1cdFx0aWYgKCFiaW9faW92X2J2ZWNfYWxpZ25lZChiaW8sIG1lbV9hbGlnbl9tYXNrKSlcbitcdGlmIChiaW9faW92X2l0ZXJfc2V0KGJpbywgaXRlcikpIHtcbitcdFx0aWYgKGlvdl9pdGVyX2lzX2J2ZWMoaXRlcikgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAhYmlvX2lvdl9idmVjX2FsaWduZWQoYmlvLCBtZW1fYWxpZ25fbWFzaykpXG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHRcdGlvdl9pdGVyX2FkdmFuY2UoaXRlciwgYmlvLVx1MDAzZWJpX2l0ZXIuYmlfc2l6ZSk7XG5kaWZmIC0tZ2l0IGEvYmxvY2svYmxrLW1hcC5jIGIvYmxvY2svYmxrLW1hcC5jXG5pbmRleCA2MTVkMjliYjg0MGViLi45Y2I5NjA1ZDFmNjJkIDEwMDY0NFxuLS0tIGEvYmxvY2svYmxrLW1hcC5jXG4rKysgYi9ibG9jay9ibGstbWFwLmNcbkBAIC00NzMsNyArNDczLDcgQEAgc3RhdGljIGludCBibGtfcnFfbWFwX3VzZXJfYnZlYyhzdHJ1Y3QgcmVxdWVzdCAqcnEsIGNvbnN0IHN0cnVjdCBpb3ZfaXRlciAqaXRlcilcbiBcdGJpbyA9IGJsa19ycV9tYXBfYmlvX2FsbG9jKHJxLCAwLCBHRlBfS0VSTkVMKTtcbiBcdGlmICghYmlvKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbi1cdGJpb19pb3ZfYnZlY19zZXQoYmlvLCBpdGVyKTtcbitcdGJpb19pb3ZfaXRlcl9zZXQoYmlvLCBpdGVyKTtcbiBcbiBcdHJldCA9IGJsa19ycV9hcHBlbmRfYmlvKHJxLCBiaW8pO1xuIFx0aWYgKHJldClcbmRpZmYgLS1naXQgYS9ibG9jay9ibGstbWVyZ2UuYyBiL2Jsb2NrL2Jsay1tZXJnZS5jXG5pbmRleCBhYjExNjFjYTY5ZjFlLi4xYmVlZGM0MmE4NWQ1IDEwMDY0NFxuLS0tIGEvYmxvY2svYmxrLW1lcmdlLmNcbisrKyBiL2Jsb2NrL2Jsay1tZXJnZS5jXG5AQCAtOSw2ICs5LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ibGstaW50ZWdyaXR5LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wYXJ0X3N0YXQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Jsay1jZ3JvdXAuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2RtYS1idWYtaW8uaFx1MDAzZVxuIFxuICNpbmNsdWRlIFx1MDAzY3RyYWNlL2V2ZW50cy9ibG9jay5oXHUwMDNlXG4gXG5AQCAtMzMsNyArMzQsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgYmlvX2dldF9sYXN0X2J2ZWMoc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgYmlvX3ZlYyAqYnYpXG4gXG4gXHRiaW9fYWR2YW5jZV9pdGVyKGJpbywgXHUwMDI2aXRlciwgaXRlci5iaV9zaXplKTtcbiBcbi1cdGlmICghaXRlci5iaV9idmVjX2RvbmUpXG4rXHRpZiAoIWl0ZXIuYmlfb2Zmc2V0KVxuIFx0XHRpZHggPSBpdGVyLmJpX2lkeCAtIDE7XG4gXHRlbHNlXHQvKiBpbiB0aGUgbWlkZGxlIG9mIGJ2ZWMgKi9cbiBcdFx0aWR4ID0gaXRlci5iaV9pZHg7XG5AQCAtNDEsMTEgKzQyLDExIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBiaW9fZ2V0X2xhc3RfYnZlYyhzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBiaW9fdmVjICpidilcbiBcdCpidiA9IGJpby1cdTAwM2ViaV9pb192ZWNbaWR4XTtcbiBcbiBcdC8qXG4tXHQgKiBpdGVyLmJpX2J2ZWNfZG9uZSByZWNvcmRzIGFjdHVhbCBsZW5ndGggb2YgdGhlIGxhc3QgYnZlY1xuK1x0ICogaXRlci5iaV9vZmZzZXQgcmVjb3JkcyBhY3R1YWwgbGVuZ3RoIG9mIHRoZSBsYXN0IGJ2ZWNcbiBcdCAqIGlmIHRoaXMgYmlvIGVuZHMgaW4gdGhlIG1pZGRsZSBvZiBvbmUgaW8gdmVjdG9yXG4gXHQgKi9cbi1cdGlmIChpdGVyLmJpX2J2ZWNfZG9uZSlcbi1cdFx0YnYtXHUwMDNlYnZfbGVuID0gaXRlci5iaV9idmVjX2RvbmU7XG4rXHRpZiAoaXRlci5iaV9vZmZzZXQpXG4rXHRcdGJ2LVx1MDAzZWJ2X2xlbiA9IGl0ZXIuYmlfb2Zmc2V0O1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIGJvb2wgYmlvX3dpbGxfZ2FwKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLFxuQEAgLTMxOSw2ICszMjAsMjggQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgYnZlY19zZWdfZ2FwKHN0cnVjdCBiaW9fdmVjICpidnBydixcbiBcdHJldHVybiBidi1cdTAwM2Vidl9vZmZzZXQgfCAoYnZwcnYtXHUwMDNlYnZfb2Zmc2V0ICsgYnZwcnYtXHUwMDNlYnZfbGVuKTtcbiB9XG4gXG4rc3RhdGljIGlubGluZSBpbnQgYmlvX3NwbGl0X2lvX2F0X2RtYWJ1ZihzdHJ1Y3QgYmlvICpiaW8sXG4rXHRcdGNvbnN0IHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSwgdW5zaWduZWQgKnNlZ3MsXG4rXHRcdHVuc2lnbmVkIG1heF9ieXRlcywgdW5zaWduZWQgbGVuX2FsaWduX21hc2ssXG4rXHRcdHVuc2lnbmVkIHN0YXJ0X2FsaWduX21hc2spXG4re1xuK1x0dW5zaWduZWQgYnl0ZXMgPSBtaW4oYmlvLVx1MDAzZWJpX2l0ZXIuYmlfc2l6ZSwgbWF4X2J5dGVzKTtcbitcdHVuc2lnbmVkIHNlZ19zaGlmdCA9IGJpby1cdTAwM2ViaV9kbWFidWZfbWFwLVx1MDAzZXNlZ19zaGlmdDtcbitcdHVuc2lnbmVkIG9mZnNldCA9IGJpby1cdTAwM2ViaV9pdGVyLmJpX29mZnNldCBcdTAwMjYgKCgxVSBcdTAwM2NcdTAwM2Mgc2VnX3NoaWZ0KSAtIDEpO1xuK1xuK1x0aWYgKChiaW8tXHUwMDNlYmlfaXRlci5iaV9vZmZzZXQgXHUwMDI2IHN0YXJ0X2FsaWduX21hc2spIHx8XG4rXHQgICAgKGJpby1cdTAwM2ViaV9pdGVyLmJpX3NpemUgXHUwMDI2IGxlbl9hbGlnbl9tYXNrKSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHQvKiBzaW5nbGUgY29udGlndW91cyByYW5nZSBpbnRvIHRoZSBkbWEtYnVmICovXG4rXHQqc2VncyA9IDE7XG4rXG4rXHRieXRlcyA9IG1pbihieXRlcywgKCh1bnNpZ25lZClsaW0tXHUwMDNlbWF4X3NlZ21lbnRzIFx1MDAzY1x1MDAzYyBzZWdfc2hpZnQpIC0gb2Zmc2V0KTtcbitcdGlmIChieXRlcyAhPSBiaW8tXHUwMDNlYmlfaXRlci5iaV9zaXplKVxuK1x0XHRyZXR1cm4gYnl0ZXM7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gLyoqXG4gICogYmlvX3NwbGl0X2lvX2F0IC0gY2hlY2sgaWYgYW5kIHdoZXJlIHRvIHNwbGl0IGEgYmlvXG4gICogQGJpbzogIFtpbl0gYmlvIHRvIGJlIHNwbGl0XG5AQCAtMzQ2LDYgKzM2OSwxOSBAQCBpbnQgYmlvX3NwbGl0X2lvX2F0KHN0cnVjdCBiaW8gKmJpbywgY29uc3Qgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltLFxuIFx0XHRsZW5fYWxpZ25fbWFzayB8PSAoYmMtXHUwMDNlYmNfa2V5LVx1MDAzZWNyeXB0b19jZmcuZGF0YV91bml0X3NpemUgLSAxKTtcbiBcdH1cbiBcbitcdGlmIChvcF9pc19kbWFidWYoYmlvLVx1MDAzZWJpX29wZikpIHtcbitcdFx0aW50IHJldDtcbitcbitcdFx0cmV0ID0gYmlvX3NwbGl0X2lvX2F0X2RtYWJ1ZihiaW8sIGxpbSwgXHUwMDI2bnNlZ3MsIG1heF9ieXRlcyxcbitcdFx0XHRcdFx0ICAgICBsZW5fYWxpZ25fbWFzaywgc3RhcnRfYWxpZ25fbWFzayk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcdFx0aWYgKCFyZXQpXG4rXHRcdFx0Z290byBvdXQ7XG4rXHRcdGJ5dGVzID0gcmV0O1xuK1x0XHRnb3RvIHNwbGl0O1xuK1x0fVxuK1xuIFx0YmlvX2Zvcl9lYWNoX2J2ZWMoYnYsIGJpbywgaXRlcikge1xuIFx0XHRpZiAoYnYuYnZfb2Zmc2V0IFx1MDAyNiBzdGFydF9hbGlnbl9tYXNrIHx8XG4gXHRcdCAgICBidi5idl9sZW4gXHUwMDI2IGxlbl9hbGlnbl9tYXNrKVxuQEAgLTM3Niw2ICs0MTIsNyBAQCBpbnQgYmlvX3NwbGl0X2lvX2F0KHN0cnVjdCBiaW8gKmJpbywgY29uc3Qgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltLFxuIFx0XHRidnBydnAgPSBcdTAwMjZidnBydjtcbiBcdH1cbiBcbitvdXQ6XG4gXHQqc2VncyA9IG5zZWdzO1xuIFx0YmlvLVx1MDAzZWJpX2J2ZWNfZ2FwX2JpdCA9IGZmcyhnYXBzKTtcbiBcdHJldHVybiAwO1xuZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay1tcS1kbWEuYyBiL2Jsb2NrL2Jsay1tcS1kbWEuY1xuaW5kZXggYmZkYjllZDcwNzQxMS4uODhmZDljYmM5NTFmNCAxMDA2NDRcbi0tLSBhL2Jsb2NrL2Jsay1tcS1kbWEuY1xuKysrIGIvYmxvY2svYmxrLW1xLWRtYS5jXG5AQCAtNDQsNyArNDQsNyBAQCBzdGF0aWMgYm9vbCBibGtfbWFwX2l0ZXJfbmV4dChzdHJ1Y3QgcmVxdWVzdCAqcmVxLCBzdHJ1Y3QgYmxrX21hcF9pdGVyICppdGVyLFxuIFx0ICogb25lIGNvdWxkIGJlIG1lcmdlZCBpbnRvIGl0LiAgVGhpcyB0eXBpY2FsbHkgaGFwcGVucyB3aGVuIG1vdmluZyB0b1xuIFx0ICogdGhlIG5leHQgYmlvLCBidXQgc29tZSBjYWxsZXJzIGFsc28gZG9uJ3QgcGFjayBidmVjcyB0aWdodC5cbiBcdCAqL1xuLVx0d2hpbGUgKCFpdGVyLVx1MDAzZWl0ZXIuYmlfc2l6ZSB8fCAhaXRlci1cdTAwM2VpdGVyLmJpX2J2ZWNfZG9uZSkge1xuK1x0d2hpbGUgKCFpdGVyLVx1MDAzZWl0ZXIuYmlfc2l6ZSB8fCAhaXRlci1cdTAwM2VpdGVyLmJpX29mZnNldCkge1xuIFx0XHRzdHJ1Y3QgYmlvX3ZlYyBuZXh0O1xuIFxuIFx0XHRpZiAoIV9fYmxrX21hcF9pdGVyX25leHQoaXRlcikpXG5kaWZmIC0tZ2l0IGEvYmxvY2svYmxrLmggYi9ibG9jay9ibGsuaFxuaW5kZXggZWFhYzA1ODE1Y2IwMy4uNTBhYmZkOTMyODg2MSAxMDA2NDRcbi0tLSBhL2Jsb2NrL2Jsay5oXG4rKysgYi9ibG9jay9ibGsuaFxuQEAgLTQwNiw3ICs0MDYsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgYmlvX21heV9uZWVkX3NwbGl0KHN0cnVjdCBiaW8gKmJpbyxcbiBcdFx0cmV0dXJuIHRydWU7XG4gXG4gXHRidiA9IF9fYnZlY19pdGVyX2J2ZWMoYmlvLVx1MDAzZWJpX2lvX3ZlYywgYmlvLVx1MDAzZWJpX2l0ZXIpO1xuLVx0aWYgKGJpby1cdTAwM2ViaV9pdGVyLmJpX3NpemUgXHUwMDNlIGJ2LVx1MDAzZWJ2X2xlbiAtIGJpby1cdTAwM2ViaV9pdGVyLmJpX2J2ZWNfZG9uZSlcbitcdGlmIChiaW8tXHUwMDNlYmlfaXRlci5iaV9zaXplIFx1MDAzZSBidi1cdTAwM2Vidl9sZW4gLSBiaW8tXHUwMDNlYmlfaXRlci5iaV9vZmZzZXQpXG4gXHRcdHJldHVybiB0cnVlO1xuIFx0aWYgKChidi1cdTAwM2Vidl9vZmZzZXQgfCBidi1cdTAwM2Vidl9sZW4pIFx1MDAyNiBsaW0tXHUwMDNlZG1hX2FsaWdubWVudClcbiBcdFx0cmV0dXJuIHRydWU7XG5kaWZmIC0tZ2l0IGEvYmxvY2svZm9wcy5jIGIvYmxvY2svZm9wcy5jXG5pbmRleCAzYzIwOTlkZmVmMWQ1Li4zYzQwM2FmYjBmNjQ2IDEwMDY0NFxuLS0tIGEvYmxvY2svZm9wcy5jXG4rKysgYi9ibG9jay9mb3BzLmNcbkBAIC0zNDIsMTUgKzM0MiwxMyBAQCBzdGF0aWMgc3NpemVfdCBfX2Jsa2Rldl9kaXJlY3RfSU9fYXN5bmMoc3RydWN0IGtpb2NiICppb2NiLFxuIFx0YmlvLVx1MDAzZWJpX2VuZF9pbyA9IGJsa2Rldl9iaW9fZW5kX2lvX2FzeW5jO1xuIFx0YmlvLVx1MDAzZWJpX2lvcHJpbyA9IGlvY2ItXHUwMDNla2lfaW9wcmlvO1xuIFxuLVx0aWYgKGlvdl9pdGVyX2lzX2J2ZWMoaXRlcikpIHtcbi1cdFx0Lypcbi1cdFx0ICogVXNlcnMgZG9uJ3QgcmVseSBvbiB0aGUgaXRlcmF0b3IgYmVpbmcgaW4gYW55IHBhcnRpY3VsYXJcbi1cdFx0ICogc3RhdGUgZm9yIGFzeW5jIEkvTyByZXR1cm5pbmcgLUVJT0NCUVVFVUVELCBoZW5jZSB3ZSBjYW5cbi1cdFx0ICogYXZvaWQgZXhwZW5zaXZlIGlvdl9pdGVyX2FkdmFuY2UoKS4gQnlwYXNzXG4tXHRcdCAqIGJpb19pb3ZfaXRlcl9nZXRfcGFnZXMoKSBhbmQgc2V0IHRoZSBidmVjIGRpcmVjdGx5LlxuLVx0XHQgKi9cbi1cdFx0YmlvX2lvdl9idmVjX3NldChiaW8sIGl0ZXIpO1xuLVx0fSBlbHNlIHtcbitcdC8qXG4rXHQgKiBVc2VycyBkb24ndCByZWx5IG9uIHRoZSBpdGVyYXRvciBiZWluZyBpbiBhbnkgcGFydGljdWxhclxuK1x0ICogc3RhdGUgZm9yIGFzeW5jIEkvTyByZXR1cm5pbmcgLUVJT0NCUVVFVUVELCBoZW5jZSB3ZSBjYW5cbitcdCAqIGF2b2lkIGV4cGVuc2l2ZSBpb3ZfaXRlcl9hZHZhbmNlKCkuIEJ5cGFzc1xuK1x0ICogYmlvX2lvdl9pdGVyX2dldF9wYWdlcygpIGFuZCBzZXQgdGhlIGJ2ZWMvZG1hYnVmIGRpcmVjdGx5LlxuK1x0ICovXG4rXHRpZiAoIWJpb19pb3ZfaXRlcl9zZXQoYmlvLCBpdGVyKSkge1xuIFx0XHRyZXQgPSBibGtkZXZfaW92X2l0ZXJfZ2V0X3BhZ2VzKGJpbywgaXRlciwgYmRldik7XG4gXHRcdGlmICh1bmxpa2VseShyZXQpKVxuIFx0XHRcdGdvdG8gb3V0X2Jpb19wdXQ7XG5AQCAtNzY5LDYgKzc2Nyw5IEBAIHN0YXRpYyBzc2l6ZV90IGJsa2Rldl93cml0ZV9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKVxuIFx0XHRcdHJldCA9IGRpcmVjdF93cml0ZV9mYWxsYmFjayhpb2NiLCBmcm9tLCByZXQsXG4gXHRcdFx0XHRcdGJsa2Rldl9idWZmZXJlZF93cml0ZShpb2NiLCBmcm9tKSk7XG4gXHR9IGVsc2Uge1xuK1x0XHRpZiAodW5saWtlbHkoaW92X2l0ZXJfaXNfZG1hYnVmX21hcChmcm9tKSkpXG4rXHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1xuIFx0XHQvKlxuIFx0XHQgKiBUYWtlIGlfcndzZW0gYW5kIGludmFsaWRhdGVfbG9jayB0byBhdm9pZCByYWNpbmcgd2l0aFxuIFx0XHQgKiBzZXRfYmxvY2tzaXplIGNoYW5naW5nIGlfYmxrYml0cy9mb2xpbyBvcmRlciBhbmQgcHVuY2hpbmdcbkBAIC04MjMsNiArODI0LDggQEAgc3RhdGljIHNzaXplX3QgYmxrZGV2X3JlYWRfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqdG8pXG4gXHRcdGlmIChyZXQgXHUwMDNjIDAgfHwgIWNvdW50KVxuIFx0XHRcdGdvdG8gcmVleHBhbmQ7XG4gXHR9XG4rXHRpZiAodW5saWtlbHkoaW92X2l0ZXJfaXNfZG1hYnVmX21hcCh0bykpKVxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gXG4gXHQvKlxuIFx0ICogVGFrZSBpX3J3c2VtIGFuZCBpbnZhbGlkYXRlX2xvY2sgdG8gYXZvaWQgcmFjaW5nIHdpdGggc2V0X2Jsb2Nrc2l6ZVxuQEAgLTkyNiw2ICs5MjksMTkgQEAgc3RhdGljIGludCBibGtkZXZfbW1hcF9wcmVwYXJlKHN0cnVjdCB2bV9hcmVhX2Rlc2MgKmRlc2MpXG4gXHRyZXR1cm4gZ2VuZXJpY19maWxlX21tYXBfcHJlcGFyZShkZXNjKTtcbiB9XG4gXG4rc3RhdGljIGludCBibGtkZXZfaW5pdF9kbWFfYnVmX2lvX2N0eChzdHJ1Y3QgZmlsZSAqZmlsZSxcbitcdFx0XHRcdCAgICAgIHN0cnVjdCBkbWFfYnVmX2lvX2N0eCAqY3R4KVxuK3tcbitcdHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYgPSBmaWxlX2JkZXYoZmlsZSk7XG4rXHRzdHJ1Y3QgZ2VuZGlzayAqZGlzayA9IGJkZXYtXHUwMDNlYmRfZGlzaztcbitcbitcdGlmICghKGZpbGUtXHUwMDNlZl9mbGFncyBcdTAwMjYgT19ESVJFQ1QpKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdGlmICghZGlzay1cdTAwM2Vmb3BzLVx1MDAzZWluaXRfZG1hX2J1Zl9pb19jdHgpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0cmV0dXJuIGRpc2stXHUwMDNlZm9wcy1cdTAwM2Vpbml0X2RtYV9idWZfaW9fY3R4KGJkZXYsIGN0eCk7XG4rfVxuK1xuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZGVmX2Jsa19mb3BzID0ge1xuIFx0Lm9wZW5cdFx0PSBibGtkZXZfb3BlbixcbiBcdC5yZWxlYXNlXHQ9IGJsa2Rldl9yZWxlYXNlLFxuQEAgLTk0NCw2ICs5NjAsNyBAQCBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRlZl9ibGtfZm9wcyA9IHtcbiBcdC5mYWxsb2NhdGVcdD0gYmxrZGV2X2ZhbGxvY2F0ZSxcbiBcdC51cmluZ19jbWRcdD0gYmxrZGV2X3VyaW5nX2NtZCxcbiBcdC5mb3BfZmxhZ3NcdD0gRk9QX0JVRkZFUl9SQVNZTkMgfCBGT1BfRE9OVENBQ0hFLFxuK1x0LmluaXRfZG1hX2J1Zl9pb19jdHggPSBibGtkZXZfaW5pdF9kbWFfYnVmX2lvX2N0eCxcbiB9O1xuIFxuIHN0YXRpYyBfX2luaXQgaW50IGJsa2Rldl9pbml0KHZvaWQpXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9sb29wLmMgYi9kcml2ZXJzL2Jsb2NrL2xvb3AuY1xuaW5kZXggMjZkNzEzMGMzZjU1OS4uODYzOWZhMzRiODQ3MCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYmxvY2svbG9vcC5jXG4rKysgYi9kcml2ZXJzL2Jsb2NrL2xvb3AuY1xuQEAgLTM3OSw3ICszNzksNyBAQCBzdGF0aWMgaW50IGxvX3J3X2FpbyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBzdHJ1Y3QgbG9vcF9jbWQgKmNtZCxcbiBcdFx0aW92X2l0ZXJfYnZlYyhcdTAwMjZpdGVyLCBydyxcbiBcdFx0XHRfX2J2ZWNfaXRlcl9idmVjKHJxLVx1MDAzZWJpby1cdTAwM2ViaV9pb192ZWMsIHJxLVx1MDAzZWJpby1cdTAwM2ViaV9pdGVyKSxcbiBcdFx0XHRucl9idmVjLCBibGtfcnFfYnl0ZXMocnEpKTtcbi1cdFx0aXRlci5pb3Zfb2Zmc2V0ID0gcnEtXHUwMDNlYmlvLVx1MDAzZWJpX2l0ZXIuYmlfYnZlY19kb25lO1xuK1x0XHRpdGVyLmlvdl9vZmZzZXQgPSBycS1cdTAwM2ViaW8tXHUwMDNlYmlfaXRlci5iaV9vZmZzZXQ7XG4gXHR9XG4gXHRhdG9taWNfc2V0KFx1MDAyNmNtZC1cdTAwM2VyZWYsIDIpO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svemxvb3AuYyBiL2RyaXZlcnMvYmxvY2svemxvb3AuY1xuaW5kZXggZjk3YTIwY2ZkYjdjZS4uMGZlZjVkYjhlNWI4MCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYmxvY2svemxvb3AuY1xuKysrIGIvZHJpdmVycy9ibG9jay96bG9vcC5jXG5AQCAtNTU0LDcgKzU1NCw3IEBAIHN0YXRpYyBpbnQgemxvb3BfZG9fcncoc3RydWN0IHpsb29wX2NtZCAqY21kKVxuIFx0XHRpb3ZfaXRlcl9idmVjKFx1MDAyNml0ZXIsIHJ3LFxuIFx0XHRcdF9fYnZlY19pdGVyX2J2ZWMocnEtXHUwMDNlYmlvLVx1MDAzZWJpX2lvX3ZlYywgcnEtXHUwMDNlYmlvLVx1MDAzZWJpX2l0ZXIpLFxuIFx0XHRcdFx0XHRucl9idmVjLCBibGtfcnFfYnl0ZXMocnEpKTtcbi1cdFx0aXRlci5pb3Zfb2Zmc2V0ID0gcnEtXHUwMDNlYmlvLVx1MDAzZWJpX2l0ZXIuYmlfYnZlY19kb25lO1xuK1x0XHRpdGVyLmlvdl9vZmZzZXQgPSBycS1cdTAwM2ViaW8tXHUwMDNlYmlfaXRlci5iaV9vZmZzZXQ7XG4gXHR9XG4gXG4gXHRjbWQtXHUwMDNlaW9jYi5raV9wb3MgPSAoY21kLVx1MDAzZXNlY3RvciAtIHpvbmUtXHUwMDNlc3RhcnQpIFx1MDAzY1x1MDAzYyBTRUNUT1JfU0hJRlQ7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEtYnVmL01ha2VmaWxlIGIvZHJpdmVycy9kbWEtYnVmL01ha2VmaWxlXG5pbmRleCBiMjVkNzU1MGJhY2ZkLi41MjM3MzFiMGY4M2VlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9kbWEtYnVmL01ha2VmaWxlXG4rKysgYi9kcml2ZXJzL2RtYS1idWYvTWFrZWZpbGVcbkBAIC0xLDYgKzEsNiBAQFxuICMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuIG9iai15IDo9IGRtYS1idWYubyBkbWEtZmVuY2UubyBkbWEtZmVuY2UtYXJyYXkubyBkbWEtZmVuY2UtY2hhaW4ubyBcXFxuLVx0IGRtYS1mZW5jZS11bndyYXAubyBkbWEtcmVzdi5vIGRtYS1idWYtbWFwcGluZy5vXG4rXHQgZG1hLWZlbmNlLXVud3JhcC5vIGRtYS1yZXN2Lm8gZG1hLWJ1Zi1tYXBwaW5nLm8gZG1hLWJ1Zi1pby5vXG4gb2JqLSQoQ09ORklHX0RNQUJVRl9IRUFQUylcdCs9IGRtYS1oZWFwLm9cbiBvYmotJChDT05GSUdfRE1BQlVGX0hFQVBTKVx0Kz0gaGVhcHMvXG4gb2JqLSQoQ09ORklHX1NZTkNfRklMRSlcdFx0Kz0gc3luY19maWxlLm9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS1idWYvZG1hLWJ1Zi1pby5jIGIvZHJpdmVycy9kbWEtYnVmL2RtYS1idWYtaW8uY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjI0ZjU4ZjgwYzQ1YzRcbi0tLSAvZGV2L251bGxcbisrKyBiL2RyaXZlcnMvZG1hLWJ1Zi9kbWEtYnVmLWlvLmNcbkBAIC0wLDAgKzEsMjc4IEBAXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cbisvKlxuKyAqIENvbW1vbiBpbmZyYXN0cnVjdHVyZSBmb3Igc3VwcG9yaW5nIGRtYS1idWYgaW4gdGhlIEkvTyBwYXRoLlxuKyAqXG4rICogQ29weXJpZ2h0IChDKSAyMDI2IFBhdmVsIEJlZ3Vua292IFx1MDAzY2FzbWwuc2lsZW5jZUBnbWFpbC5jb21cdTAwM2VcbisgKi9cbisjaW5jbHVkZSBcdTAwM2NsaW51eC9kbWEtYnVmLWlvLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9kbWEtcmVzdi5oXHUwMDNlXG4rXG4rc3RydWN0IGRtYV9idWZfaW9fZmVuY2Uge1xuK1x0c3RydWN0IGRtYV9mZW5jZSBiYXNlO1xuK1x0c3BpbmxvY2tfdCBsb2NrO1xuK307XG4rXG4rc3RhdGljIGNvbnN0IGNoYXIgKmRtYV9idWZfaW9fZmVuY2VfZHJ2X25hbWUoc3RydWN0IGRtYV9mZW5jZSAqZmVuY2UpXG4re1xuK1x0LyogZGVmYXVsdCBmZW5jZSByZWxlYXNlIGtmcmVlJ3MgdGhlIGJhc2UgcG9pbnRlciAqL1xuK1x0QlVJTERfQlVHX09OKG9mZnNldG9mKHN0cnVjdCBkbWFfYnVmX2lvX2ZlbmNlLCBiYXNlKSk7XG4rXG4rXHRyZXR1cm4gXCJkbWEtYnVmLWlvLWN0eFwiO1xuK31cbitcbitzdGF0aWMgY29uc3QgY2hhciAqZG1hX2J1Zl9pb19mZW5jZV90aW1lbGluZV9uYW1lKHN0cnVjdCBkbWFfZmVuY2UgKmZlbmNlKVxuK3tcbitcdHJldHVybiBcImRtYS1idWYtaW8tY3R4XCI7XG4rfVxuK1xuK2NvbnN0IHN0cnVjdCBkbWFfZmVuY2Vfb3BzIGRtYV9idWZfaW9fZmVuY2Vfb3BzID0ge1xuK1x0LmdldF9kcml2ZXJfbmFtZSA9IGRtYV9idWZfaW9fZmVuY2VfZHJ2X25hbWUsXG4rXHQuZ2V0X3RpbWVsaW5lX25hbWUgPSBkbWFfYnVmX2lvX2ZlbmNlX3RpbWVsaW5lX25hbWUsXG4rfTtcbitcbitzdGF0aWMgdm9pZCBkbWFfYnVmX2lvX2N0eF9kZXN0cm95X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuK3tcbitcdHN0cnVjdCBkbWFfYnVmX2lvX2N0eCAqY3R4ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBkbWFfYnVmX2lvX2N0eCxcbitcdFx0XHRcdFx0XHQgIHJlbGVhc2Vfd29yayk7XG4rXG4rXHRpZiAoV0FSTl9PTl9PTkNFKHJlZmNvdW50X3JlYWQoXHUwMDI2Y3R4LVx1MDAzZXJlZnMpKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0Y3R4LVx1MDAzZWRldl9vcHMtXHUwMDNlcmVsZWFzZShjdHgpO1xuK1x0ZG1hX2J1Zl9wdXQoY3R4LVx1MDAzZWRtYWJ1Zik7XG4rXHRrZnJlZShjdHgpO1xuK31cbitcbitzdGF0aWMgdm9pZCBkbWFfYnVmX2lvX21hcF9yZWxlYXNlX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuK3tcbitcdHN0cnVjdCBkbWFfYnVmX2lvX21hcCAqbWFwID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBkbWFfYnVmX2lvX21hcCxcbitcdFx0XHRcdFx0XHQgIHJlbGVhc2Vfd29yayk7XG4rXHRzdHJ1Y3QgZG1hX2J1Zl9pb19mZW5jZSAqZmVuY2UgPSBtYXAtXHUwMDNlZmVuY2U7XG4rXHRzdHJ1Y3QgZG1hX2J1Zl9pb19jdHggKmN0eCA9IG1hcC1cdTAwM2VjdHg7XG4rXHRzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmID0gY3R4LVx1MDAzZWRtYWJ1ZjtcbitcbitcdC8qIHRoZSByZWxlYXNlIHBhdGggbXVzdCB3YWl0IGZvciBmZW5jZXMgKi9cbitcdGlmIChXQVJOX09OX09OQ0UocmVmY291bnRfcmVhZChcdTAwMjZjdHgtXHUwMDNlcmVmcykgPT0gMCkpXG4rXHRcdHJldHVybjtcbitcbitcdC8qIFByZXZlbnQgZnJvbSBkZXN0b3lpbmcgdGhlIGN0eCB3aGlsZSB1bm1hcHBpbmcgKi9cbitcdHJlZmNvdW50X2luYyhcdTAwMjZjdHgtXHUwMDNlcmVmcyk7XG4rXG4rXHQvKlxuK1x0ICogVGhlcmUgYXJlIG5vIG1vcmUgcmVxdWVzdHMgdXNpbmcgdGhlIG1hcCwgd2UgY2FuIHNpZ25hbCB0aGUgZmVuY2UuXG4rXHQgKiBJdCBzaG91bGQgYmUgZG9uZSBiZWZvcmUgdGFraW5nIHRoZSByZXN2IGxvY2sgYXMgc29tZW9uZSBjb3VsZCBiZVxuK1x0ICogd2FpdGluZyBmb3IgdGhlIGZlbmNlIHdoaWxlIGhvbGRpbmcgdGhlIGxvY2suXG4rXHQgKi9cbitcdGRtYV9mZW5jZV9zaWduYWwoXHUwMDI2ZmVuY2UtXHUwMDNlYmFzZSk7XG4rXG4rXHRkbWFfcmVzdl9sb2NrKGRtYWJ1Zi1cdTAwM2VyZXN2LCBOVUxMKTtcbitcdGN0eC1cdTAwM2VkZXZfb3BzLVx1MDAzZXVubWFwKGN0eCwgbWFwKTtcbitcdGRtYV9yZXN2X3VubG9jayhkbWFidWYtXHUwMDNlcmVzdik7XG4rXG4rXHRkbWFfZmVuY2VfcHV0KFx1MDAyNmZlbmNlLVx1MDAzZWJhc2UpO1xuK1x0cGVyY3B1X3JlZl9leGl0KFx1MDAyNm1hcC1cdTAwM2VyZWZzKTtcbitcdGtmcmVlKG1hcCk7XG4rXG4rXHRpZiAocmVmY291bnRfZGVjX2FuZF90ZXN0KFx1MDAyNmN0eC1cdTAwM2VyZWZzKSkge1xuK1x0XHQvKlxuK1x0XHQgKiBEZXN0cnVjdGlvbiBuZWVkcyB0byB3YWl0IGZvciBJL08gYW5kIGRtYSBmZW5jZXMuIERlZmVyIGl0IHRvXG4rXHRcdCAqIHNpbXBsaWZ5IGxvY2tpbmcuXG4rXHRcdCAqL1xuK1x0XHRJTklUX1dPUksoXHUwMDI2Y3R4LVx1MDAzZXJlbGVhc2Vfd29yaywgZG1hX2J1Zl9pb19jdHhfZGVzdHJveV93b3JrKTtcbitcdFx0cXVldWVfd29yayhzeXN0ZW1fd3EsIFx1MDAyNmN0eC1cdTAwM2VyZWxlYXNlX3dvcmspO1xuK1x0fVxuK31cbitcbitzdGF0aWMgdm9pZCBkbWFfYnVmX2lvX21hcF9yZWZzX3JlbGVhc2Uoc3RydWN0IHBlcmNwdV9yZWYgKnJlZilcbit7XG4rXHRzdHJ1Y3QgZG1hX2J1Zl9pb19tYXAgKm1hcCA9IGNvbnRhaW5lcl9vZihyZWYsIHN0cnVjdCBkbWFfYnVmX2lvX21hcCwgcmVmcyk7XG4rXG4rXHQvKiBtaWdodCBzbGVlcCwgdXNlIGEgd29ya2VyICovXG4rXHRJTklUX1dPUksoXHUwMDI2bWFwLVx1MDAzZXJlbGVhc2Vfd29yaywgZG1hX2J1Zl9pb19tYXBfcmVsZWFzZV93b3JrKTtcbitcdHF1ZXVlX3dvcmsoc3lzdGVtX3dxLCBcdTAwMjZtYXAtXHUwMDNlcmVsZWFzZV93b3JrKTtcbit9XG4rXG4raW50IGRtYV9idWZfaW9faW5pdF9tYXAoc3RydWN0IGRtYV9idWZfaW9fY3R4ICpjdHgsIHN0cnVjdCBkbWFfYnVmX2lvX21hcCAqbWFwKVxuK3tcbitcdHN0cnVjdCBkbWFfYnVmX2lvX2ZlbmNlICpmZW5jZSA9IE5VTEw7XG4rXHRpbnQgcmV0O1xuK1xuK1x0ZmVuY2UgPSBremFsbG9jKHNpemVvZigqZmVuY2UpLCBHRlBfS0VSTkVMKTtcbitcdGlmICghZmVuY2UpXG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1xuK1x0cmV0ID0gcGVyY3B1X3JlZl9pbml0KFx1MDAyNm1hcC1cdTAwM2VyZWZzLCBkbWFfYnVmX2lvX21hcF9yZWZzX3JlbGVhc2UsIDAsIEdGUF9LRVJORUwpO1xuK1x0aWYgKHJldCkge1xuK1x0XHRrZnJlZShmZW5jZSk7XG4rXHRcdHJldHVybiByZXQ7XG4rXHR9XG4rXG4rXHRzcGluX2xvY2tfaW5pdChcdTAwMjZmZW5jZS1cdTAwM2Vsb2NrKTtcbitcdGRtYV9mZW5jZV9pbml0KFx1MDAyNmZlbmNlLVx1MDAzZWJhc2UsIFx1MDAyNmRtYV9idWZfaW9fZmVuY2Vfb3BzLCBcdTAwMjZmZW5jZS1cdTAwM2Vsb2NrLFxuK1x0XHRcdGN0eC1cdTAwM2VmZW5jZV9jdHgsIGF0b21pY19pbmNfcmV0dXJuKFx1MDAyNmN0eC1cdTAwM2VmZW5jZV9zZXEpKTtcbitcdG1hcC1cdTAwM2VmZW5jZSA9IGZlbmNlO1xuK1x0bWFwLVx1MDAzZWN0eCA9IGN0eDtcbitcdHJldHVybiAwO1xuK31cbitFWFBPUlRfU1lNQk9MX05TX0dQTChkbWFfYnVmX2lvX2luaXRfbWFwLCBcIkRNQV9CVUZcIik7XG4rXG4rc3RydWN0IGRtYV9idWZfaW9fbWFwICpkbWFfYnVmX2lvX2NyZWF0ZV9tYXAoc3RydWN0IGRtYV9idWZfaW9fY3R4ICpjdHgpXG4re1xuK1x0c3RydWN0IGRtYV9idWYgKmRtYWJ1ZiA9IGN0eC1cdTAwM2VkbWFidWY7XG4rXHRzdHJ1Y3QgZG1hX2J1Zl9pb19tYXAgKm1hcDtcbitcdGxvbmcgcmV0O1xuK1xuK3JldHJ5OlxuK1x0LypcbitcdCAqIC1cdTAwM2VkbWFidWZfbWFwKCkgd2lsbCBiZSBjYWxsaW5nIGRtYV9idWZfbWFwX2F0dGFjaG1lbnQoKSwgZm9yIHdoaWNoXG4rXHQgKiB3ZSdsbCBuZWVkIHRvIHdhaXQgZm9yIGZlbmNlcy4gRG8gYSBiaXQgbmljZXIgYW5kIHRyeSB0byB3YWl0XG4rXHQgKiB3aXRob3V0IHRoZSByZXN2IGxvY2sgZmlyc3QuXG4rXHQgKi9cbitcdHJldCA9IGRtYV9yZXN2X3dhaXRfdGltZW91dChkbWFidWYtXHUwMDNlcmVzdiwgRE1BX1JFU1ZfVVNBR0VfS0VSTkVMLFxuK1x0XHRcdFx0ICAgIHRydWUsIE1BWF9TQ0hFRFVMRV9USU1FT1VUKTtcbitcdGlmICghcmV0KVxuK1x0XHRyZXQgPSAtRUFHQUlOO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIEVSUl9QVFIocmV0KTtcbitcbitcdHJldCA9IGRtYV9yZXN2X2xvY2tfaW50ZXJydXB0aWJsZShkbWFidWYtXHUwMDNlcmVzdiwgTlVMTCk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gRVJSX1BUUihyZXQpO1xuK1xuK1x0bWFwID0gZG1hX2J1Zl9pb19nZXRfbWFwKGN0eCk7XG4rXHRpZiAobWFwKSB7XG4rXHRcdHJldCA9IDA7XG4rXHRcdGdvdG8gb3V0O1xuK1x0fVxuK1xuK1x0aWYgKGRtYV9yZXN2X3dhaXRfdGltZW91dChkbWFidWYtXHUwMDNlcmVzdiwgRE1BX1JFU1ZfVVNBR0VfS0VSTkVMLFxuK1x0XHRcdFx0ICB0cnVlLCAwKSBcdTAwM2MgMCkge1xuK1x0XHRkbWFfcmVzdl91bmxvY2soZG1hYnVmLVx1MDAzZXJlc3YpO1xuK1x0XHRnb3RvIHJldHJ5O1xuK1x0fVxuK1xuK1x0bWFwID0gY3R4LVx1MDAzZWRldl9vcHMtXHUwMDNlbWFwKGN0eCk7XG4rXHRpZiAoSVNfRVJSKG1hcCkpIHtcbitcdFx0cmV0ID0gUFRSX0VSUihtYXApO1xuK1x0XHRnb3RvIG91dDtcbitcdH1cbitcbitcdGlmIChXQVJOX09OX09OQ0UoIW1hcC1cdTAwM2VzZWdfc2hpZnQpKVxuK1x0XHRyZXR1cm4gRVJSX1BUUigtRUZBVUxUKTtcbitcbitcdHBlcmNwdV9yZWZfZ2V0KFx1MDAyNm1hcC1cdTAwM2VyZWZzKTtcbitcdHJjdV9hc3NpZ25fcG9pbnRlcihjdHgtXHUwMDNlbWFwLCBtYXApO1xuK291dDpcbitcdGRtYV9yZXN2X3VubG9jayhkbWFidWYtXHUwMDNlcmVzdik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gRVJSX1BUUihyZXQpO1xuK1x0cmV0dXJuIG1hcDtcbit9XG4rXG4rc3RhdGljIHZvaWQgZG1hX2J1Zl9pb19kcm9wX21hcChzdHJ1Y3QgZG1hX2J1Zl9pb19jdHggKmN0eClcbit7XG4rXHRzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmID0gY3R4LVx1MDAzZWRtYWJ1ZjtcbitcdHN0cnVjdCBkbWFfYnVmX2lvX21hcCAqbWFwO1xuK1x0aW50IHJldDtcbitcbitcdGRtYV9yZXN2X2Fzc2VydF9oZWxkKGRtYWJ1Zi1cdTAwM2VyZXN2KTtcbitcbitcdG1hcCA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoY3R4LVx1MDAzZW1hcCxcbitcdFx0XHRcdFx0ZG1hX3Jlc3ZfaGVsZChkbWFidWYtXHUwMDNlcmVzdikpO1xuK1x0aWYgKCFtYXApXG4rXHRcdHJldHVybjtcbitcdHJjdV9hc3NpZ25fcG9pbnRlcihjdHgtXHUwMDNlbWFwLCBOVUxMKTtcbitcbitcdHJldCA9IGRtYV9yZXN2X3Jlc2VydmVfZmVuY2VzKGRtYWJ1Zi1cdTAwM2VyZXN2LCAxKTtcbitcdGlmIChXQVJOX09OX09OQ0UocmV0KSkge1xuK1x0XHRzdHJ1Y3QgZG1hX2ZlbmNlICpmZW5jZSA9IFx1MDAyNm1hcC1cdTAwM2VmZW5jZS1cdTAwM2ViYXNlO1xuK1xuK1x0XHRkbWFfZmVuY2VfZ2V0KGZlbmNlKTtcbitcdFx0cGVyY3B1X3JlZl9raWxsKFx1MDAyNm1hcC1cdTAwM2VyZWZzKTtcbitcdFx0ZG1hX2ZlbmNlX3dhaXQoZmVuY2UsIGZhbHNlKTtcbitcdFx0ZG1hX2ZlbmNlX3B1dChmZW5jZSk7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdGRtYV9yZXN2X2FkZF9mZW5jZShkbWFidWYtXHUwMDNlcmVzdiwgXHUwMDI2bWFwLVx1MDAzZWZlbmNlLVx1MDAzZWJhc2UsXG4rXHRcdFx0ICAgRE1BX1JFU1ZfVVNBR0VfS0VSTkVMKTtcbitcdC8qXG4rXHQgKiBEZWxheSBkZXN0cnVjdGlvbiB1bnRpbCBhbGwgaW5mbGlnaHQgcmVxdWVzdHMgdXNpbmcgdGhlIG1hcCBhcmVcbitcdCAqIGdvbmUuIEl0J2xsIGFsc28gc2lnbmFsIHRoZSBmZW5jZSB0aGVuLlxuK1x0ICovXG4rXHRwZXJjcHVfcmVmX2tpbGwoXHUwMDI2bWFwLVx1MDAzZXJlZnMpO1xuK31cbitcbit2b2lkIGRtYV9idWZfaW9faW52YWxpZGF0ZV9tYXBwaW5ncyhzdHJ1Y3QgZG1hX2J1Zl9pb19jdHggKmN0eClcbit7XG4rXHRkbWFfYnVmX2lvX2Ryb3BfbWFwKGN0eCk7XG4rfVxuK0VYUE9SVF9TWU1CT0xfTlNfR1BMKGRtYV9idWZfaW9faW52YWxpZGF0ZV9tYXBwaW5ncywgXCJETUFfQlVGXCIpO1xuK1xuK3N0YXRpYyB2b2lkIGRtYV9idWZfaW9fY3R4X3JlbGVhc2Vfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4re1xuK1x0c3RydWN0IGRtYV9idWZfaW9fY3R4ICpjdHggPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGRtYV9idWZfaW9fY3R4LFxuK1x0XHRcdFx0XHRcdCAgcmVsZWFzZV93b3JrKTtcbitcdHN0cnVjdCBkbWFfYnVmICpkbWFidWYgPSBjdHgtXHUwMDNlZG1hYnVmO1xuK1x0bG9uZyByZXQ7XG4rXG4rXHRkbWFfcmVzdl9sb2NrKGRtYWJ1Zi1cdTAwM2VyZXN2LCBOVUxMKTtcbitcdC8qIFJlbW92ZSB0aGUgbGFzdCBtYXAsIHRoZXJlIHNob3VsZCBiZSBubyBuZXcgb25lcyBnb2luZyBmb3J3YXJkLiAqL1xuK1x0ZG1hX2J1Zl9pb19kcm9wX21hcChjdHgpO1xuK1x0ZG1hX3Jlc3ZfdW5sb2NrKGRtYWJ1Zi1cdTAwM2VyZXN2KTtcbitcbitcdC8qIFdhaXQgdW50aWwgYWxsIG1hcHMgYXJlIGRlc3Ryb3llZC4gKi9cbitcdHJldCA9IGRtYV9yZXN2X3dhaXRfdGltZW91dChkbWFidWYtXHUwMDNlcmVzdiwgRE1BX1JFU1ZfVVNBR0VfS0VSTkVMLFxuK1x0XHRcdFx0ICAgIGZhbHNlLCBNQVhfU0NIRURVTEVfVElNRU9VVCk7XG4rXG4rXHRpZiAoV0FSTl9PTl9PTkNFKHJldCBcdTAwM2M9IDApKVxuK1x0XHRyZXR1cm47XG4rXHRpZiAoV0FSTl9PTl9PTkNFKHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoY3R4LVx1MDAzZW1hcCwgdHJ1ZSkpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRpZiAocmVmY291bnRfZGVjX2FuZF90ZXN0KFx1MDAyNmN0eC1cdTAwM2VyZWZzKSlcbitcdFx0ZG1hX2J1Zl9pb19jdHhfZGVzdHJveV93b3JrKFx1MDAyNmN0eC1cdTAwM2VyZWxlYXNlX3dvcmspO1xuK31cbitcbit2b2lkIGRtYV9idWZfaW9fY3R4X3JlbGVhc2Uoc3RydWN0IGRtYV9idWZfaW9fY3R4ICpjdHgpXG4re1xuK1x0LypcbitcdCAqIERlc3RydWN0aW9uIG5lZWRzIHRvIHdhaXQgZm9yIEkvTyBhbmQgZG1hIGZlbmNlcy4gRGVmZXIgaXQgdG9cbitcdCAqIHNpbXBsaWZ5IGxvY2tpbmcuXG4rXHQgKi9cbitcdElOSVRfV09SSyhcdTAwMjZjdHgtXHUwMDNlcmVsZWFzZV93b3JrLCBkbWFfYnVmX2lvX2N0eF9yZWxlYXNlX3dvcmspO1xuK1x0cXVldWVfd29yayhzeXN0ZW1fd3EsIFx1MDAyNmN0eC1cdTAwM2VyZWxlYXNlX3dvcmspO1xuK31cbitcbitpbnQgZG1hX2J1Zl9pb19jdHhfY3JlYXRlKHN0cnVjdCBmaWxlICpmaWxlLFxuK1x0XHRcdCAgIHN0cnVjdCBkbWFfYnVmX2lvX2N0eCAqY3R4LFxuK1x0XHRcdCAgIHN0cnVjdCBkbWFfYnVmICpkbWFidWYsXG4rXHRcdFx0ICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKVxuK3tcbitcdGludCByZXQ7XG4rXG4rXHRpZiAoIWZpbGUtXHUwMDNlZl9vcC1cdTAwM2Vpbml0X2RtYV9idWZfaW9fY3R4KVxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXG4rXHRtZW1zZXQoY3R4LCAwLCBzaXplb2YoKmN0eCkpO1xuK1x0Y3R4LVx1MDAzZWZlbmNlX2N0eCA9IGRtYV9mZW5jZV9jb250ZXh0X2FsbG9jKDEpO1xuK1x0Y3R4LVx1MDAzZWRpciA9IGRpcjtcbitcdGN0eC1cdTAwM2VkbWFidWYgPSBkbWFidWY7XG4rXHRyZWZjb3VudF9zZXQoXHUwMDI2Y3R4LVx1MDAzZXJlZnMsIDEpO1xuK1x0Z2V0X2RtYV9idWYoZG1hYnVmKTtcbitcbitcdHJldCA9IGZpbGUtXHUwMDNlZl9vcC1cdTAwM2Vpbml0X2RtYV9idWZfaW9fY3R4KGZpbGUsIGN0eCk7XG4rXHRpZiAocmV0KSB7XG4rXHRcdG1lbXNldChjdHgsIDAsIHNpemVvZigqY3R4KSk7XG4rXHRcdGRtYV9idWZfcHV0KGRtYWJ1Zik7XG4rXHRcdHJldHVybiByZXQ7XG4rXHR9XG4rXG4rXHRpZiAoV0FSTl9PTl9PTkNFKCFjdHgtXHUwMDNlZGV2X29wcyB8fFxuK1x0XHRcdCAhY3R4LVx1MDAzZWRldl9vcHMtXHUwMDNlbWFwIHx8XG4rXHRcdFx0ICFjdHgtXHUwMDNlZGV2X29wcy1cdTAwM2V1bm1hcCB8fFxuK1x0XHRcdCAhY3R4LVx1MDAzZWRldl9vcHMtXHUwMDNlcmVsZWFzZSkpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0cmV0dXJuIHJldDtcbit9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS1pby1yZXdpbmQuYyBiL2RyaXZlcnMvbWQvZG0taW8tcmV3aW5kLmNcbmluZGV4IDYxNTViMDExN2M5ZDYuLmIyMjcxOWM2NDExY2YgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL21kL2RtLWlvLXJld2luZC5jXG4rKysgYi9kcml2ZXJzL21kL2RtLWlvLXJld2luZC5jXG5AQCAtMTYsMTIgKzE2LDEyIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBkbV9idmVjX2l0ZXJfcmV3aW5kKGNvbnN0IHN0cnVjdCBiaW9fdmVjICpidixcbiBcdGludCBpZHg7XG4gXG4gXHRpdGVyLVx1MDAzZWJpX3NpemUgKz0gYnl0ZXM7XG4tXHRpZiAoYnl0ZXMgXHUwMDNjPSBpdGVyLVx1MDAzZWJpX2J2ZWNfZG9uZSkge1xuLVx0XHRpdGVyLVx1MDAzZWJpX2J2ZWNfZG9uZSAtPSBieXRlcztcbitcdGlmIChieXRlcyBcdTAwM2M9IGl0ZXItXHUwMDNlYmlfb2Zmc2V0KSB7XG4rXHRcdGl0ZXItXHUwMDNlYmlfb2Zmc2V0IC09IGJ5dGVzO1xuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcdH1cbiBcbi1cdGJ5dGVzIC09IGl0ZXItXHUwMDNlYmlfYnZlY19kb25lO1xuK1x0Ynl0ZXMgLT0gaXRlci1cdTAwM2ViaV9vZmZzZXQ7XG4gXHRpZHggPSBpdGVyLVx1MDAzZWJpX2lkeCAtIDE7XG4gXG4gXHR3aGlsZSAoaWR4IFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgYnl0ZXMgXHUwMDI2XHUwMDI2IGJ5dGVzIFx1MDAzZSBidltpZHhdLmJ2X2xlbikge1xuQEAgLTMyLDEzICszMiwxMyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgZG1fYnZlY19pdGVyX3Jld2luZChjb25zdCBzdHJ1Y3QgYmlvX3ZlYyAqYnYsXG4gXHRpZiAoV0FSTl9PTkNFKGlkeCBcdTAwM2MgMCBcdTAwMjZcdTAwMjYgYnl0ZXMsXG4gXHRcdCAgICAgIFwiQXR0ZW1wdGVkIHRvIHJld2luZCBpdGVyIGJleW9uZCBidmVjJ3MgYm91bmRhcmllc1xcblwiKSkge1xuIFx0XHRpdGVyLVx1MDAzZWJpX3NpemUgLT0gYnl0ZXM7XG4tXHRcdGl0ZXItXHUwMDNlYmlfYnZlY19kb25lID0gMDtcbitcdFx0aXRlci1cdTAwM2ViaV9vZmZzZXQgPSAwO1xuIFx0XHRpdGVyLVx1MDAzZWJpX2lkeCA9IDA7XG4gXHRcdHJldHVybiBmYWxzZTtcbiBcdH1cbiBcbiBcdGl0ZXItXHUwMDNlYmlfaWR4ID0gaWR4O1xuLVx0aXRlci1cdTAwM2ViaV9idmVjX2RvbmUgPSBidltpZHhdLmJ2X2xlbiAtIGJ5dGVzO1xuK1x0aXRlci1cdTAwM2ViaV9vZmZzZXQgPSBidltpZHhdLmJ2X2xlbiAtIGJ5dGVzO1xuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuQEAgLTExMywxMCArMTEzLDEyIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBkbV9iaW9fcmV3aW5kX2l0ZXIoY29uc3Qgc3RydWN0IGJpbyAqYmlvLFxuIFx0aXRlci1cdTAwM2ViaV9zZWN0b3IgLT0gYnl0ZXMgXHUwMDNlXHUwMDNlIDk7XG4gXG4gXHQvKiBObyBhZHZhbmNlIG1lYW5zIG5vIHJld2luZCAqL1xuLVx0aWYgKGJpb19ub19hZHZhbmNlX2l0ZXIoYmlvKSlcbitcdGlmIChiaW9fbm9fYWR2YW5jZV9pdGVyKGJpbykpIHtcbiBcdFx0aXRlci1cdTAwM2ViaV9zaXplICs9IGJ5dGVzO1xuLVx0ZWxzZVxuK1x0XHRpdGVyLVx1MDAzZWJpX29mZnNldCAtPSBieXRlcztcbitcdH0gZWxzZSB7XG4gXHRcdGRtX2J2ZWNfaXRlcl9yZXdpbmQoYmlvLVx1MDAzZWJpX2lvX3ZlYywgaXRlciwgYnl0ZXMpO1xuK1x0fVxuIH1cbiBcbiAvKipcbmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2RtLXBjYWNoZS9zZWdtZW50LmMgYi9kcml2ZXJzL21kL2RtLXBjYWNoZS9zZWdtZW50LmNcbmluZGV4IDdlOTgxODcwMTQ0NTEuLjhmODgxNmUxYzUzOWYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL21kL2RtLXBjYWNoZS9zZWdtZW50LmNcbisrKyBiL2RyaXZlcnMvbWQvZG0tcGNhY2hlL3NlZ21lbnQuY1xuQEAgLTE0LDcgKzE0LDcgQEAgaW50IHNlZ21lbnRfY29weV90b19iaW8oc3RydWN0IHBjYWNoZV9zZWdtZW50ICpzZWdtZW50LFxuIFxuIFx0aW92X2l0ZXJfYnZlYyhcdTAwMjZpdGVyLCBJVEVSX0RFU1QsIFx1MDAyNmJpby1cdTAwM2ViaV9pb192ZWNbYmlvLVx1MDAzZWJpX2l0ZXIuYmlfaWR4XSxcbiBcdFx0XHRiaW9fc2VnbWVudHMoYmlvKSwgYmlvLVx1MDAzZWJpX2l0ZXIuYmlfc2l6ZSk7XG4tXHRpdGVyLmlvdl9vZmZzZXQgPSBiaW8tXHUwMDNlYmlfaXRlci5iaV9idmVjX2RvbmU7XG4rXHRpdGVyLmlvdl9vZmZzZXQgPSBiaW8tXHUwMDNlYmlfaXRlci5iaV9vZmZzZXQ7XG4gXHRpZiAoYmlvX29mZilcbiBcdFx0aW92X2l0ZXJfYWR2YW5jZShcdTAwMjZpdGVyLCBiaW9fb2ZmKTtcbiBcbkBAIC0zNSw3ICszNSw3IEBAIGludCBzZWdtZW50X2NvcHlfZnJvbV9iaW8oc3RydWN0IHBjYWNoZV9zZWdtZW50ICpzZWdtZW50LFxuIFxuIFx0aW92X2l0ZXJfYnZlYyhcdTAwMjZpdGVyLCBJVEVSX1NPVVJDRSwgXHUwMDI2YmlvLVx1MDAzZWJpX2lvX3ZlY1tiaW8tXHUwMDNlYmlfaXRlci5iaV9pZHhdLFxuIFx0XHRcdGJpb19zZWdtZW50cyhiaW8pLCBiaW8tXHUwMDNlYmlfaXRlci5iaV9zaXplKTtcbi1cdGl0ZXIuaW92X29mZnNldCA9IGJpby1cdTAwM2ViaV9pdGVyLmJpX2J2ZWNfZG9uZTtcbitcdGl0ZXIuaW92X29mZnNldCA9IGJpby1cdTAwM2ViaV9pdGVyLmJpX29mZnNldDtcbiBcdGlmIChiaW9fb2ZmKVxuIFx0XHRpb3ZfaXRlcl9hZHZhbmNlKFx1MDAyNml0ZXIsIGJpb19vZmYpO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbnZkaW1tL2J0dC5jIGIvZHJpdmVycy9udmRpbW0vYnR0LmNcbmluZGV4IDdlMTExMjk2MGQ3ZjguLjVkOTEwYTY0NTAzZDMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL252ZGltbS9idHQuY1xuKysrIGIvZHJpdmVycy9udmRpbW0vYnR0LmNcbkBAIC0xMTU1LDcgKzExNTUsNyBAQCBzdGF0aWMgaW50IGJ0dF9yd19pbnRlZ3JpdHkoc3RydWN0IGJ0dCAqYnR0LCBzdHJ1Y3QgYmlvX2ludGVncml0eV9wYXlsb2FkICpiaXAsXG4gXHRcdGJ2ID0gYnZlY19pdGVyX2J2ZWMoYmlwLVx1MDAzZWJpcF92ZWMsIGJpcC1cdTAwM2ViaXBfaXRlcik7XG4gXHRcdC8qXG4gXHRcdCAqIFRoZSAnYnYnIG9idGFpbmVkIGZyb20gYnZlY19pdGVyX2J2ZWMgaGFzIGl0cyAuYnZfbGVuIGFuZFxuLVx0XHQgKiAuYnZfb2Zmc2V0IGFscmVhZHkgYWRqdXN0ZWQgZm9yIGl0ZXItXHUwMDNlYmlfYnZlY19kb25lLCBhbmQgd2VcbitcdFx0ICogLmJ2X29mZnNldCBhbHJlYWR5IGFkanVzdGVkIGZvciBpdGVyLVx1MDAzZWJpX29mZnNldCwgYW5kIHdlXG4gXHRcdCAqIGNhbiB1c2UgdGhvc2UgZGlyZWN0bHlcbiBcdFx0ICovXG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9udm1lL2hvc3QvY29yZS5jIGIvZHJpdmVycy9udm1lL2hvc3QvY29yZS5jXG5pbmRleCA0NTNjMWYwYjJkZDA5Li44YmQ0MDc2MDNkOTI4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9udm1lL2hvc3QvY29yZS5jXG4rKysgYi9kcml2ZXJzL252bWUvaG9zdC9jb3JlLmNcbkBAIC0yNjc2LDYgKzI2NzYsMTcgQEAgc3RhdGljIGludCBudm1lX3JlcG9ydF96b25lcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgc2VjdG9yX3Qgc2VjdG9yLFxuICNkZWZpbmUgbnZtZV9yZXBvcnRfem9uZXNcdE5VTExcbiAjZW5kaWYgLyogQ09ORklHX0JMS19ERVZfWk9ORUQgKi9cbiBcbitzdGF0aWMgaW50IG52bWVfaW5pdF9kbWFfYnVmX2lvX2N0eChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LFxuK1x0XHRzdHJ1Y3QgZG1hX2J1Zl9pb19jdHggKmN0eClcbit7XG4rXHRzdHJ1Y3QgbnZtZV9ucyAqbnMgPSBiZGV2LVx1MDAzZWJkX2Rpc2stXHUwMDNlcHJpdmF0ZV9kYXRhO1xuK1x0c3RydWN0IG52bWVfY3RybCAqY3RybCA9IG5zLVx1MDAzZWN0cmw7XG4rXG4rXHRpZiAoIWN0cmwtXHUwMDNlb3BzLVx1MDAzZWluaXRfZG1hX2J1Zl9pb19jdHgpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0cmV0dXJuIGN0cmwtXHUwMDNlb3BzLVx1MDAzZWluaXRfZG1hX2J1Zl9pb19jdHgoY3RybCwgY3R4KTtcbit9XG4rXG4gY29uc3Qgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIG52bWVfYmRldl9vcHMgPSB7XG4gXHQub3duZXJcdFx0PSBUSElTX01PRFVMRSxcbiBcdC5pb2N0bFx0XHQ9IG52bWVfaW9jdGwsXG5AQCAtMjY4Niw2ICsyNjk3LDcgQEAgY29uc3Qgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIG52bWVfYmRldl9vcHMgPSB7XG4gXHQuZ2V0X3VuaXF1ZV9pZFx0PSBudm1lX2dldF91bmlxdWVfaWQsXG4gXHQucmVwb3J0X3pvbmVzXHQ9IG52bWVfcmVwb3J0X3pvbmVzLFxuIFx0LnByX29wc1x0XHQ9IFx1MDAyNm52bWVfcHJfb3BzLFxuK1x0LmluaXRfZG1hX2J1Zl9pb19jdHggPSBudm1lX2luaXRfZG1hX2J1Zl9pb19jdHgsXG4gfTtcbiBcbiBzdGF0aWMgaW50IG52bWVfd2FpdF9yZWFkeShzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsLCB1MzIgbWFzaywgdTMyIHZhbCxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL252bWUvaG9zdC9udm1lLmggYi9kcml2ZXJzL252bWUvaG9zdC9udm1lLmhcbmluZGV4IDgyNDY1MWNjODk4ZGIuLjAzNGMzMWFmOGZlY2YgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL252bWUvaG9zdC9udm1lLmhcbisrKyBiL2RyaXZlcnMvbnZtZS9ob3N0L252bWUuaFxuQEAgLTY1Miw2ICs2NTIsOCBAQCBzdHJ1Y3QgbnZtZV9jdHJsX29wcyB7XG4gXHRpbnQgKCpnZXRfYWRkcmVzcykoc3RydWN0IG52bWVfY3RybCAqY3RybCwgY2hhciAqYnVmLCBpbnQgc2l6ZSk7XG4gXHR2b2lkICgqcHJpbnRfZGV2aWNlX2luZm8pKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwpO1xuIFx0Ym9vbCAoKnN1cHBvcnRzX3BjaV9wMnBkbWEpKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwpO1xuK1x0aW50ICgqaW5pdF9kbWFfYnVmX2lvX2N0eCkoc3RydWN0IG52bWVfY3RybCAqY3RybCxcbitcdFx0XHRcdCAgIHN0cnVjdCBkbWFfYnVmX2lvX2N0eCAqY3R4KTtcbiBcdHVuc2lnbmVkIGxvbmcgKCpnZXRfdmlydF9ib3VuZGFyeSkoc3RydWN0IG52bWVfY3RybCAqY3RybCwgYm9vbCBpc19hZG1pbik7XG4gfTtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL252bWUvaG9zdC9wY2kuYyBiL2RyaXZlcnMvbnZtZS9ob3N0L3BjaS5jXG5pbmRleCA2OTkzMmQ2NDBiNTM3Li42N2UyNmQ2ZThmMjU1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9udm1lL2hvc3QvcGNpLmNcbisrKyBiL2RyaXZlcnMvbnZtZS9ob3N0L3BjaS5jXG5AQCAtMjcsNiArMjcsOCBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lvLTY0LW5vbmF0b21pYy1sby1oaS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaW8tNjQtbm9uYXRvbWljLWhpLWxvLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zZWQtb3BhbC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvZG1hLWJ1Zi1pby5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvZG1hLXJlc3YuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwidHJhY2UuaFwiXG4gI2luY2x1ZGUgXCJudm1lLmhcIlxuQEAgLTM5Myw2ICszOTUsMTMgQEAgc3RydWN0IG52bWVfcXVldWUge1xuIFx0c3RydWN0IGNvbXBsZXRpb24gZGVsZXRlX2RvbmU7XG4gfTtcbiBcbitzdHJ1Y3QgbnZtZV9kbWFidWZfbWFwIHtcbitcdHN0cnVjdCBkbWFfYnVmX2lvX21hcCBiYXNlO1xuK1x0c3RydWN0IHNnX3RhYmxlICpzZ3Q7XG4rXHR1bnNpZ25lZCBucl9lbnRyaWVzO1xuK1x0ZG1hX2FkZHJfdCBkbWFfbGlzdFtdO1xuK307XG4rXG4gLyogYml0cyBmb3IgaW9kLVx1MDAzZWZsYWdzICovXG4gZW51bSBudm1lX2lvZF9mbGFncyB7XG4gXHQvKiB0aGlzIGNvbW1hbmQgaGFzIGJlZW4gYWJvcnRlZCBieSB0aGUgdGltZW91dCBoYW5kbGVyICovXG5AQCAtODU5LDYgKzg2OCwxMzggQEAgc3RhdGljIHZvaWQgbnZtZV9mcmVlX2Rlc2NyaXB0b3JzKHN0cnVjdCByZXF1ZXN0ICpyZXEpXG4gXHR9XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgc3RydWN0IG52bWVfZG1hYnVmX21hcCAqXG4rdG9fbnZtZV9kbWFidWZfbWFwKHN0cnVjdCBkbWFfYnVmX2lvX21hcCAqbWFwKVxuK3tcbitcdHJldHVybiBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgbnZtZV9kbWFidWZfbWFwLCBiYXNlKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgbnZtZV9kbWFidWZfbWFwX3N5bmNfZm9yX2NwdShzdHJ1Y3QgbnZtZV9kZXYgKm52bWVfZGV2LFxuK1x0XHRcdFx0XHQgc3RydWN0IHJlcXVlc3QgKnJlcSlcbit7XG4rXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBudm1lX2Rldi1cdTAwM2VkZXY7XG4rXHRlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkbWFfZGlyO1xuK1x0c3RydWN0IGJpbyAqYmlvID0gcmVxLVx1MDAzZWJpbztcbitcdHN0cnVjdCBudm1lX2RtYWJ1Zl9tYXAgKm1hcCA9IHRvX252bWVfZG1hYnVmX21hcChiaW8tXHUwMDNlYmlfZG1hYnVmX21hcCk7XG4rXHRkbWFfYWRkcl90ICpkbWFfbGlzdCA9IG1hcC1cdTAwM2VkbWFfbGlzdDtcbitcdHVuc2lnbmVkIG9mZnNldCA9IGJpby1cdTAwM2ViaV9pdGVyLmJpX29mZnNldDtcbitcdHVuc2lnbmVkIG1hcF9pZHggPSBvZmZzZXQgLyBOVk1FX0NUUkxfUEFHRV9TSVpFO1xuK1x0aW50IGxlbmd0aCA9IGJsa19ycV9wYXlsb2FkX2J5dGVzKHJlcSkgK1xuK1x0XHQgICAgIChvZmZzZXQgXHUwMDI2IChOVk1FX0NUUkxfUEFHRV9TSVpFIC0gMSkpO1xuK1xuK1x0ZG1hX2RpciA9IHJxX2RhdGFfZGlyKHJlcSkgPT0gUkVBRCA/IERNQV9GUk9NX0RFVklDRSA6IERNQV9UT19ERVZJQ0U7XG4rXG4rXHR3aGlsZSAobGVuZ3RoIFx1MDAzZSAwKSB7XG4rXHRcdGRtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KGRldiwgZG1hX2xpc3RbbWFwX2lkeCsrXSxcbitcdFx0XHRcdFx0TlZNRV9DVFJMX1BBR0VfU0laRSwgZG1hX2Rpcik7XG4rXHRcdGxlbmd0aCAtPSBOVk1FX0NUUkxfUEFHRV9TSVpFO1xuK1x0fVxuK31cbitcbitzdGF0aWMgdm9pZCBudm1lX2RtYWJ1Zl9tYXBfc3luY19mb3JfZGV2aWNlKHN0cnVjdCBudm1lX2RldiAqbnZtZV9kZXYsXG4rXHRcdFx0XHRcdCAgICBzdHJ1Y3QgcmVxdWVzdCAqcmVxKVxuK3tcbitcdHN0cnVjdCBkZXZpY2UgKmRldiA9IG52bWVfZGV2LVx1MDAzZWRldjtcbitcdGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRtYV9kaXI7XG4rXHRzdHJ1Y3QgYmlvICpiaW8gPSByZXEtXHUwMDNlYmlvO1xuK1x0c3RydWN0IG52bWVfZG1hYnVmX21hcCAqbWFwID0gdG9fbnZtZV9kbWFidWZfbWFwKGJpby1cdTAwM2ViaV9kbWFidWZfbWFwKTtcbitcdGRtYV9hZGRyX3QgKmRtYV9saXN0ID0gbWFwLVx1MDAzZWRtYV9saXN0O1xuK1x0dW5zaWduZWQgb2Zmc2V0ID0gYmlvLVx1MDAzZWJpX2l0ZXIuYmlfb2Zmc2V0O1xuK1x0dW5zaWduZWQgbWFwX2lkeCA9IG9mZnNldCAvIE5WTUVfQ1RSTF9QQUdFX1NJWkU7XG4rXHRpbnQgbGVuZ3RoID0gYmxrX3JxX3BheWxvYWRfYnl0ZXMocmVxKSArXG4rXHRcdCAgICAgKG9mZnNldCBcdTAwMjYgKE5WTUVfQ1RSTF9QQUdFX1NJWkUgLSAxKSk7XG4rXG4rXHRkbWFfZGlyID0gcnFfZGF0YV9kaXIocmVxKSA9PSBSRUFEID8gRE1BX0ZST01fREVWSUNFIDogRE1BX1RPX0RFVklDRTtcbitcbitcdHdoaWxlIChsZW5ndGggXHUwMDNlIDApIHtcbitcdFx0ZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UoZGV2LCBkbWFfbGlzdFttYXBfaWR4KytdLFxuK1x0XHRcdFx0XHQgICBOVk1FX0NUUkxfUEFHRV9TSVpFLCBkbWFfZGlyKTtcbitcdFx0bGVuZ3RoIC09IE5WTUVfQ1RSTF9QQUdFX1NJWkU7XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyB2b2lkIG52bWVfcnFfY2xlYW5fZG1hYnVmX21hcChzdHJ1Y3QgbnZtZV9kZXYgKmRldixcbitcdFx0XHRcdCAgICAgIHN0cnVjdCByZXF1ZXN0ICpyZXEpXG4re1xuK1x0c3RydWN0IG52bWVfaW9kICppb2QgPSBibGtfbXFfcnFfdG9fcGR1KHJlcSk7XG4rXG4rXHRudm1lX2RtYWJ1Zl9tYXBfc3luY19mb3JfY3B1KGRldiwgcmVxKTtcbitcbitcdGlmICghKGlvZC1cdTAwM2VmbGFncyBcdTAwMjYgSU9EX1NJTkdMRV9TRUdNRU5UKSlcbitcdFx0bnZtZV9mcmVlX2Rlc2NyaXB0b3JzKHJlcSk7XG4rfVxuK1xuK3N0YXRpYyBibGtfc3RhdHVzX3QgbnZtZV9ycV9zZXR1cF9kbWFidWZfbWFwKHN0cnVjdCByZXF1ZXN0ICpyZXEsXG4rXHRcdFx0XHRcdCAgICAgc3RydWN0IG52bWVfcXVldWUgKm52bWVxKVxuK3tcbitcdHN0cnVjdCBudm1lX2lvZCAqaW9kID0gYmxrX21xX3JxX3RvX3BkdShyZXEpO1xuK1x0c3RydWN0IGJpbyAqYmlvID0gcmVxLVx1MDAzZWJpbztcbitcdHN0cnVjdCBudm1lX2RtYWJ1Zl9tYXAgKm1hcCA9IHRvX252bWVfZG1hYnVmX21hcChiaW8tXHUwMDNlYmlfZG1hYnVmX21hcCk7XG4rXHR1bnNpZ25lZCBidmVjX2RvbmUgPSBiaW8tXHUwMDNlYmlfaXRlci5iaV9vZmZzZXQ7XG4rXHR1bnNpZ25lZCBtYXBfaWR4ID0gYnZlY19kb25lIC8gTlZNRV9DVFJMX1BBR0VfU0laRTtcbitcdHVuc2lnbmVkIG9mZnNldCA9IGJ2ZWNfZG9uZSBcdTAwMjYgKE5WTUVfQ1RSTF9QQUdFX1NJWkUgLSAxKTtcbitcdGludCBsZW5ndGggPSBibGtfcnFfcGF5bG9hZF9ieXRlcyhyZXEpIC0gKE5WTUVfQ1RSTF9QQUdFX1NJWkUgLSBvZmZzZXQpO1xuK1x0ZG1hX2FkZHJfdCAqZG1hX2xpc3QgPSBtYXAtXHUwMDNlZG1hX2xpc3Q7XG4rXHR1NjQgcHJwMV9kbWEgPSBkbWFfbGlzdFttYXBfaWR4KytdICsgb2Zmc2V0O1xuK1x0dTY0IGRtYV9hZGRyLCBwcnAyX2RtYTtcbitcdGRtYV9hZGRyX3QgcHJwX2RtYTtcbitcdF9fbGU2NCAqcHJwX2xpc3Q7XG4rXHR1bnNpZ25lZCBpO1xuK1xuK1x0bnZtZV9kbWFidWZfbWFwX3N5bmNfZm9yX2RldmljZShudm1lcS1cdTAwM2VkZXYsIHJlcSk7XG4rXG4rXHRpZiAobGVuZ3RoIFx1MDAzYz0gMCkge1xuK1x0XHRwcnAyX2RtYSA9IDA7XG4rXHRcdGdvdG8gZG9uZTtcbitcdH1cbitcbitcdGlmIChsZW5ndGggXHUwMDNjPSBOVk1FX0NUUkxfUEFHRV9TSVpFKSB7XG4rXHRcdHBycDJfZG1hID0gZG1hX2xpc3RbbWFwX2lkeF07XG4rXHRcdGdvdG8gZG9uZTtcbitcdH1cbitcbitcdGlmIChESVZfUk9VTkRfVVAobGVuZ3RoLCBOVk1FX0NUUkxfUEFHRV9TSVpFKSBcdTAwM2M9XG4rXHQgICAgTlZNRV9TTUFMTF9QT09MX1NJWkUgLyBzaXplb2YoX19sZTY0KSlcbitcdFx0aW9kLVx1MDAzZWZsYWdzIHw9IElPRF9TTUFMTF9ERVNDUklQVE9SO1xuK1xuK1x0cHJwX2xpc3QgPSBkbWFfcG9vbF9hbGxvYyhudm1lX2RtYV9wb29sKG52bWVxLCBpb2QpLCBHRlBfQVRPTUlDLFxuK1x0XHRcdFx1MDAyNnBycF9kbWEpO1xuK1x0aWYgKCFwcnBfbGlzdClcbitcdFx0cmV0dXJuIEJMS19TVFNfUkVTT1VSQ0U7XG4rXG4rXHRpb2QtXHUwMDNlZGVzY3JpcHRvcnNbaW9kLVx1MDAzZW5yX2Rlc2NyaXB0b3JzKytdID0gcHJwX2xpc3Q7XG4rXHRwcnAyX2RtYSA9IHBycF9kbWE7XG4rXHRpID0gMDtcbitcdGZvciAoOzspIHtcbitcdFx0aWYgKGkgPT0gTlZNRV9DVFJMX1BBR0VfU0laRSBcdTAwM2VcdTAwM2UgMykge1xuK1x0XHRcdF9fbGU2NCAqb2xkX3BycF9saXN0ID0gcHJwX2xpc3Q7XG4rXG4rXHRcdFx0cHJwX2xpc3QgPSBkbWFfcG9vbF9hbGxvYyhudm1lcS1cdTAwM2VkZXNjcmlwdG9yX3Bvb2xzLmxhcmdlLFxuK1x0XHRcdFx0XHRHRlBfQVRPTUlDLCBcdTAwMjZwcnBfZG1hKTtcbitcdFx0XHRpZiAoIXBycF9saXN0KVxuK1x0XHRcdFx0Z290byBmcmVlX3BycHM7XG4rXHRcdFx0aW9kLVx1MDAzZWRlc2NyaXB0b3JzW2lvZC1cdTAwM2Vucl9kZXNjcmlwdG9ycysrXSA9IHBycF9saXN0O1xuK1x0XHRcdHBycF9saXN0WzBdID0gb2xkX3BycF9saXN0W2kgLSAxXTtcbitcdFx0XHRvbGRfcHJwX2xpc3RbaSAtIDFdID0gY3B1X3RvX2xlNjQocHJwX2RtYSk7XG4rXHRcdFx0aSA9IDE7XG4rXHRcdH1cbitcbitcdFx0ZG1hX2FkZHIgPSBkbWFfbGlzdFttYXBfaWR4KytdO1xuK1x0XHRwcnBfbGlzdFtpKytdID0gY3B1X3RvX2xlNjQoZG1hX2FkZHIpO1xuK1xuK1x0XHRsZW5ndGggLT0gTlZNRV9DVFJMX1BBR0VfU0laRTtcbitcdFx0aWYgKGxlbmd0aCBcdTAwM2M9IDApXG4rXHRcdFx0YnJlYWs7XG4rXHR9XG4rZG9uZTpcbitcdGlvZC1cdTAwM2VjbWQuY29tbW9uLmRwdHIucHJwMSA9IGNwdV90b19sZTY0KHBycDFfZG1hKTtcbitcdGlvZC1cdTAwM2VjbWQuY29tbW9uLmRwdHIucHJwMiA9IGNwdV90b19sZTY0KHBycDJfZG1hKTtcbitcdHJldHVybiBCTEtfU1RTX09LO1xuK2ZyZWVfcHJwczpcbitcdG52bWVfZnJlZV9kZXNjcmlwdG9ycyhyZXEpO1xuK1x0cmV0dXJuIEJMS19TVFNfUkVTT1VSQ0U7XG4rfVxuK1xuIHN0YXRpYyB2b2lkIG52bWVfZnJlZV9wcnBzKHN0cnVjdCByZXF1ZXN0ICpyZXEsIHVuc2lnbmVkIGludCBhdHRycylcbiB7XG4gXHRzdHJ1Y3QgbnZtZV9pb2QgKmlvZCA9IGJsa19tcV9ycV90b19wZHUocmVxKTtcbkBAIC05MzcsNiArMTA3OCwxMSBAQCBzdGF0aWMgdm9pZCBudm1lX3VubWFwX2RhdGEoc3RydWN0IHJlcXVlc3QgKnJlcSlcbiBcdHN0cnVjdCBkZXZpY2UgKmRtYV9kZXYgPSBudm1lcS1cdTAwM2VkZXYtXHUwMDNlZGV2O1xuIFx0dW5zaWduZWQgaW50IGF0dHJzID0gMDtcbiBcbitcdGlmIChibGtfbXFfcnFfaXNfZG1hYnVmKHJlcSkpIHtcbitcdFx0bnZtZV9ycV9jbGVhbl9kbWFidWZfbWFwKG52bWVxLVx1MDAzZWRldiwgcmVxKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuIFx0aWYgKGlvZC1cdTAwM2VmbGFncyBcdTAwMjYgSU9EX1NJTkdMRV9TRUdNRU5UKSB7XG4gXHRcdHN0YXRpY19hc3NlcnQob2Zmc2V0b2YodW5pb24gbnZtZV9kYXRhX3B0ciwgcHJwMSkgPT1cbiBcdFx0XHRcdG9mZnNldG9mKHVuaW9uIG52bWVfZGF0YV9wdHIsIHNnbC5hZGRyKSk7XG5AQCAtMTE0MiwxMyArMTI4OCwxOSBAQCBzdGF0aWMgYmxrX3N0YXR1c190IG52bWVfcGNpX3NldHVwX2RhdGFfcHJwKHN0cnVjdCByZXF1ZXN0ICpyZXEsXG4gfVxuIFxuIHN0YXRpYyB2b2lkIG52bWVfcGNpX3NnbF9zZXRfZGF0YShzdHJ1Y3QgbnZtZV9zZ2xfZGVzYyAqc2dlLFxuLVx0XHRzdHJ1Y3QgYmxrX2RtYV9pdGVyICppdGVyKVxuK1x0XHRkbWFfYWRkcl90IGFkZHIsIHUzMiBsZW4pXG4ge1xuLVx0c2dlLVx1MDAzZWFkZHIgPSBjcHVfdG9fbGU2NChpdGVyLVx1MDAzZWFkZHIpO1xuLVx0c2dlLVx1MDAzZWxlbmd0aCA9IGNwdV90b19sZTMyKGl0ZXItXHUwMDNlbGVuKTtcbitcdHNnZS1cdTAwM2VhZGRyID0gY3B1X3RvX2xlNjQoYWRkcik7XG4rXHRzZ2UtXHUwMDNlbGVuZ3RoID0gY3B1X3RvX2xlMzIobGVuKTtcbiBcdHNnZS1cdTAwM2V0eXBlID0gTlZNRV9TR0xfRk1UX0RBVEFfREVTQyBcdTAwM2NcdTAwM2MgNDtcbiB9XG4gXG4rc3RhdGljIHZvaWQgbnZtZV9wY2lfZG1hX2l0ZXJfc2V0X3NnbChzdHJ1Y3QgbnZtZV9zZ2xfZGVzYyAqc2dlLFxuK1x0XHRzdHJ1Y3QgYmxrX2RtYV9pdGVyICppdGVyKVxuK3tcbitcdG52bWVfcGNpX3NnbF9zZXRfZGF0YShzZ2UsIGl0ZXItXHUwMDNlYWRkciwgaXRlci1cdTAwM2VsZW4pO1xuK31cbitcbiBzdGF0aWMgdm9pZCBudm1lX3BjaV9zZ2xfc2V0X3NlZyhzdHJ1Y3QgbnZtZV9zZ2xfZGVzYyAqc2dlLFxuIFx0XHRkbWFfYWRkcl90IGRtYV9hZGRyLCBpbnQgZW50cmllcylcbiB7XG5AQCAtMTE1Nyw2ICsxMzA5LDE0NSBAQCBzdGF0aWMgdm9pZCBudm1lX3BjaV9zZ2xfc2V0X3NlZyhzdHJ1Y3QgbnZtZV9zZ2xfZGVzYyAqc2dlLFxuIFx0c2dlLVx1MDAzZXR5cGUgPSBOVk1FX1NHTF9GTVRfTEFTVF9TRUdfREVTQyBcdTAwM2NcdTAwM2MgNDtcbiB9XG4gXG4rc3RhdGljIHVuc2lnbmVkIGludCBudm1lX3BjaV9kbWFidWZfc2dsX25lbnRzKHN0cnVjdCByZXF1ZXN0ICpyZXEpXG4re1xuK1x0c3RydWN0IGJpbyAqYmlvID0gcmVxLVx1MDAzZWJpbztcbitcdHN0cnVjdCBudm1lX2RtYWJ1Zl9tYXAgKm1hcCA9IHRvX252bWVfZG1hYnVmX21hcChiaW8tXHUwMDNlYmlfZG1hYnVmX21hcCk7XG4rXHRzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnO1xuK1x0dW5zaWduZWQgbG9uZyB0bXA7XG4rXHRzaXplX3Qgb2Zmc2V0ID0gYmlvLVx1MDAzZWJpX2l0ZXIuYmlfb2Zmc2V0O1xuK1x0c2l6ZV90IHJlbWFpbmluZyA9IGJsa19ycV9wYXlsb2FkX2J5dGVzKHJlcSk7XG4rXHR1bnNpZ25lZCBpbnQgbmVudHMgPSAwO1xuK1xuK1x0Zm9yX2VhY2hfc2d0YWJsZV9kbWFfc2cobWFwLVx1MDAzZXNndCwgc2csIHRtcCkge1xuK1x0XHRzaXplX3Qgc2dfbGVuID0gc2dfZG1hX2xlbihzZyk7XG4rXG4rXHRcdGlmICghcmVtYWluaW5nKVxuK1x0XHRcdGJyZWFrO1xuK1x0XHRpZiAob2Zmc2V0IFx1MDAzZT0gc2dfbGVuKSB7XG4rXHRcdFx0b2Zmc2V0IC09IHNnX2xlbjtcbitcdFx0XHRjb250aW51ZTtcbitcdFx0fVxuK1xuK1x0XHRzZ19sZW4gLT0gb2Zmc2V0O1xuK1x0XHRvZmZzZXQgPSAwO1xuK1xuK1x0XHRkbyB7XG4rXHRcdFx0c2l6ZV90IGNodW5rID0gbWluKHJlbWFpbmluZywgc2dfbGVuKTtcbitcbitcdFx0XHRuZW50cysrO1xuK1x0XHRcdHNnX2xlbiAtPSBjaHVuaztcbitcdFx0XHRyZW1haW5pbmcgLT0gY2h1bms7XG4rXHRcdH0gd2hpbGUgKHNnX2xlbiBcdTAwMjZcdTAwMjYgcmVtYWluaW5nKTtcbitcdH1cbitcbitcdGlmICh1bmxpa2VseShyZW1haW5pbmcpKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdHJldHVybiBuZW50cztcbit9XG4rXG4rc3RhdGljIGJsa19zdGF0dXNfdCBudm1lX3JxX3NldHVwX2RtYWJ1Zl9zZ2woc3RydWN0IHJlcXVlc3QgKnJlcSxcbitcdFx0c3RydWN0IG52bWVfcXVldWUgKm52bWVxLCB1bnNpZ25lZCBpbnQgZW50cmllcylcbit7XG4rXHRzdHJ1Y3QgbnZtZV9pb2QgKmlvZCA9IGJsa19tcV9ycV90b19wZHUocmVxKTtcbitcdHN0cnVjdCBiaW8gKmJpbyA9IHJlcS1cdTAwM2ViaW87XG4rXHRzdHJ1Y3QgbnZtZV9kbWFidWZfbWFwICptYXAgPSB0b19udm1lX2RtYWJ1Zl9tYXAoYmlvLVx1MDAzZWJpX2RtYWJ1Zl9tYXApO1xuK1x0c2l6ZV90IGxlbmd0aCA9IGJsa19ycV9wYXlsb2FkX2J5dGVzKHJlcSk7XG4rXHRzdHJ1Y3QgbnZtZV9zZ2xfZGVzYyAqc2dfbGlzdCA9IFx1MDAyNmlvZC1cdTAwM2VjbWQuY29tbW9uLmRwdHIuc2dsO1xuK1x0Ym9vbCBwb29sZWQgPSBlbnRyaWVzIFx1MDAzZSAxO1xuK1x0ZG1hX2FkZHJfdCBzZ2xfZG1hID0gMDtcbitcdHVuc2lnbmVkIGludCBtYXBwZWQgPSAwO1xuK1x0dW5zaWduZWQgbG9uZyB0bXA7XG4rXHRzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnO1xuK1x0c2l6ZV90IG9mZnNldCA9IGJpby1cdTAwM2ViaV9pdGVyLmJpX29mZnNldDtcbitcdHNpemVfdCByZW1haW5pbmcgPSBsZW5ndGg7XG4rXG4rXHRpZiAoIWVudHJpZXMpXG4rXHRcdHJldHVybiBCTEtfU1RTX0lPRVJSO1xuK1xuK1x0aW9kLVx1MDAzZWNtZC5jb21tb24uZmxhZ3MgPSBOVk1FX0NNRF9TR0xfTUVUQUJVRjtcbitcdGlvZC1cdTAwM2V0b3RhbF9sZW4gPSBsZW5ndGg7XG4rXG4rXHRudm1lX2RtYWJ1Zl9tYXBfc3luY19mb3JfZGV2aWNlKG52bWVxLVx1MDAzZWRldiwgcmVxKTtcbitcbitcdC8qIGVudHJpZXMgPT0gMSBmaXRzIGluIHRoZSBpbmxpbmUgZGVzY3JpcHRvcjsgbW9yZSBuZWVkcyBhIHBvb2wuICovXG4rXHRpZiAocG9vbGVkKSB7XG4rXHRcdGlmIChlbnRyaWVzIFx1MDAzYz0gTlZNRV9TTUFMTF9QT09MX1NJWkUgLyBzaXplb2YoKnNnX2xpc3QpKVxuK1x0XHRcdGlvZC1cdTAwM2VmbGFncyB8PSBJT0RfU01BTExfREVTQ1JJUFRPUjtcbitcbitcdFx0c2dfbGlzdCA9IGRtYV9wb29sX2FsbG9jKG52bWVfZG1hX3Bvb2wobnZtZXEsIGlvZCksIEdGUF9BVE9NSUMsXG4rXHRcdFx0XHRcdCBcdTAwMjZzZ2xfZG1hKTtcbitcdFx0aWYgKCFzZ19saXN0KVxuK1x0XHRcdHJldHVybiBCTEtfU1RTX1JFU09VUkNFO1xuK1x0XHRpb2QtXHUwMDNlZGVzY3JpcHRvcnNbaW9kLVx1MDAzZW5yX2Rlc2NyaXB0b3JzKytdID0gc2dfbGlzdDtcbitcdH1cbitcbitcdGZvcl9lYWNoX3NndGFibGVfZG1hX3NnKG1hcC1cdTAwM2VzZ3QsIHNnLCB0bXApIHtcbitcdFx0c2l6ZV90IHNnX2xlbiA9IHNnX2RtYV9sZW4oc2cpO1xuK1x0XHRkbWFfYWRkcl90IGFkZHIgPSBzZ19kbWFfYWRkcmVzcyhzZyk7XG4rXG4rXHRcdGlmICghcmVtYWluaW5nKVxuK1x0XHRcdGJyZWFrO1xuK1x0XHRpZiAob2Zmc2V0IFx1MDAzZT0gc2dfbGVuKSB7XG4rXHRcdFx0b2Zmc2V0IC09IHNnX2xlbjtcbitcdFx0XHRjb250aW51ZTtcbitcdFx0fVxuK1xuK1x0XHRhZGRyICs9IG9mZnNldDtcbitcdFx0c2dfbGVuIC09IG9mZnNldDtcbitcdFx0b2Zmc2V0ID0gMDtcbitcbitcdFx0ZG8ge1xuK1x0XHRcdHUzMiBjaHVuayA9IG1pbl90KHNpemVfdCwgcmVtYWluaW5nLCBzZ19sZW4pO1xuK1xuK1x0XHRcdGlmIChXQVJOX09OX09OQ0UobWFwcGVkID09IGVudHJpZXMpKVxuK1x0XHRcdFx0Z290byBlcnJfZnJlZTtcbitcdFx0XHRudm1lX3BjaV9zZ2xfc2V0X2RhdGEoXHUwMDI2c2dfbGlzdFttYXBwZWQrK10sIGFkZHIsIGNodW5rKTtcbitcbitcdFx0XHRhZGRyICs9IGNodW5rO1xuK1x0XHRcdHNnX2xlbiAtPSBjaHVuaztcbitcdFx0XHRyZW1haW5pbmcgLT0gY2h1bms7XG4rXHRcdH0gd2hpbGUgKHNnX2xlbiBcdTAwMjZcdTAwMjYgcmVtYWluaW5nKTtcbitcdH1cbitcbitcdGlmICh1bmxpa2VseShyZW1haW5pbmcpKVxuK1x0XHRnb3RvIGVycl9mcmVlO1xuK1xuK1x0aWYgKHBvb2xlZClcbitcdFx0bnZtZV9wY2lfc2dsX3NldF9zZWcoXHUwMDI2aW9kLVx1MDAzZWNtZC5jb21tb24uZHB0ci5zZ2wsIHNnbF9kbWEsXG4rXHRcdFx0XHQgICAgIG1hcHBlZCk7XG4rXHRyZXR1cm4gQkxLX1NUU19PSztcbitlcnJfZnJlZTpcbitcdGlmIChwb29sZWQpIHtcbitcdFx0aW9kLVx1MDAzZW5yX2Rlc2NyaXB0b3JzLS07XG4rXHRcdGRtYV9wb29sX2ZyZWUobnZtZV9kbWFfcG9vbChudm1lcSwgaW9kKSwgc2dfbGlzdCwgc2dsX2RtYSk7XG4rXHR9XG4rXHRyZXR1cm4gQkxLX1NUU19JT0VSUjtcbit9XG4rXG4rc3RhdGljIGJsa19zdGF0dXNfdCBudm1lX3JxX3NldHVwX2RtYWJ1ZihzdHJ1Y3QgcmVxdWVzdCAqcmVxLFxuK1x0XHRzdHJ1Y3QgbnZtZV9xdWV1ZSAqbnZtZXEsIGVudW0gbnZtZV91c2Vfc2dsIHVzZV9zZ2wpXG4re1xuK1x0dW5zaWduZWQgaW50IGVudHJpZXM7XG4rXHRzaXplX3QgYXZnX3NlZztcbitcbitcdGlmICh1c2Vfc2dsID09IFNHTF9VTlNVUFBPUlRFRClcbitcdFx0cmV0dXJuIG52bWVfcnFfc2V0dXBfZG1hYnVmX21hcChyZXEsIG52bWVxKTtcbitcbitcdGVudHJpZXMgPSBudm1lX3BjaV9kbWFidWZfc2dsX25lbnRzKHJlcSk7XG4rXG4rXHRpZiAodXNlX3NnbCA9PSBTR0xfRk9SQ0VEKVxuK1x0XHRyZXR1cm4gbnZtZV9ycV9zZXR1cF9kbWFidWZfc2dsKHJlcSwgbnZtZXEsIGVudHJpZXMpO1xuK1xuK1x0YXZnX3NlZyA9IGVudHJpZXMgP1xuK1x0XHRESVZfUk9VTkRfVVAoYmxrX3JxX3BheWxvYWRfYnl0ZXMocmVxKSwgZW50cmllcykgOiAwO1xuK1x0aWYgKHNnbF90aHJlc2hvbGQgXHUwMDI2XHUwMDI2IGF2Z19zZWcgXHUwMDNlPSBzZ2xfdGhyZXNob2xkKVxuK1x0XHRyZXR1cm4gbnZtZV9ycV9zZXR1cF9kbWFidWZfc2dsKHJlcSwgbnZtZXEsIGVudHJpZXMpO1xuK1xuK1x0cmV0dXJuIG52bWVfcnFfc2V0dXBfZG1hYnVmX21hcChyZXEsIG52bWVxKTtcbit9XG4rXG4gc3RhdGljIGJsa19zdGF0dXNfdCBudm1lX3BjaV9zZXR1cF9kYXRhX3NnbChzdHJ1Y3QgcmVxdWVzdCAqcmVxLFxuIFx0XHRzdHJ1Y3QgYmxrX2RtYV9pdGVyICppdGVyKVxuIHtcbkBAIC0xMTcxLDcgKzE0NjIsNyBAQCBzdGF0aWMgYmxrX3N0YXR1c190IG52bWVfcGNpX3NldHVwX2RhdGFfc2dsKHN0cnVjdCByZXF1ZXN0ICpyZXEsXG4gXHRpb2QtXHUwMDNlY21kLmNvbW1vbi5mbGFncyA9IE5WTUVfQ01EX1NHTF9NRVRBQlVGO1xuIFxuIFx0aWYgKGVudHJpZXMgPT0gMSB8fCBibGtfcnFfZG1hX21hcF9jb2FsZXNjZShcdTAwMjZpb2QtXHUwMDNlZG1hX3N0YXRlKSkge1xuLVx0XHRudm1lX3BjaV9zZ2xfc2V0X2RhdGEoXHUwMDI2aW9kLVx1MDAzZWNtZC5jb21tb24uZHB0ci5zZ2wsIGl0ZXIpO1xuK1x0XHRudm1lX3BjaV9kbWFfaXRlcl9zZXRfc2dsKFx1MDAyNmlvZC1cdTAwM2VjbWQuY29tbW9uLmRwdHIuc2dsLCBpdGVyKTtcbiBcdFx0aW9kLVx1MDAzZXRvdGFsX2xlbiArPSBpdGVyLVx1MDAzZWxlbjtcbiBcdFx0cmV0dXJuIEJMS19TVFNfT0s7XG4gXHR9XG5AQCAtMTE5Myw3ICsxNDg0LDcgQEAgc3RhdGljIGJsa19zdGF0dXNfdCBudm1lX3BjaV9zZXR1cF9kYXRhX3NnbChzdHJ1Y3QgcmVxdWVzdCAqcmVxLFxuIFx0XHRcdGl0ZXItXHUwMDNlc3RhdHVzID0gQkxLX1NUU19JT0VSUjtcbiBcdFx0XHRicmVhaztcbiBcdFx0fVxuLVx0XHRudm1lX3BjaV9zZ2xfc2V0X2RhdGEoXHUwMDI2c2dfbGlzdFttYXBwZWQrK10sIGl0ZXIpO1xuK1x0XHRudm1lX3BjaV9kbWFfaXRlcl9zZXRfc2dsKFx1MDAyNnNnX2xpc3RbbWFwcGVkKytdLCBpdGVyKTtcbiBcdFx0aW9kLVx1MDAzZXRvdGFsX2xlbiArPSBpdGVyLVx1MDAzZWxlbjtcbiBcdH0gd2hpbGUgKGJsa19ycV9kbWFfbWFwX2l0ZXJfbmV4dChyZXEsIG52bWVxLVx1MDAzZWRldi1cdTAwM2VkZXYsIGl0ZXIpKTtcbiBcbkBAIC0xMjUxLDYgKzE1NDIsOSBAQCBzdGF0aWMgYmxrX3N0YXR1c190IG52bWVfbWFwX2RhdGEoc3RydWN0IHJlcXVlc3QgKnJlcSlcbiBcdHN0cnVjdCBibGtfZG1hX2l0ZXIgaXRlcjtcbiBcdGJsa19zdGF0dXNfdCByZXQ7XG4gXG4rXHRpZiAoYmxrX21xX3JxX2lzX2RtYWJ1ZihyZXEpKVxuK1x0XHRyZXR1cm4gbnZtZV9ycV9zZXR1cF9kbWFidWYocmVxLCBudm1lcSwgdXNlX3NnbCk7XG4rXG4gXHQvKlxuIFx0ICogVHJ5IHRvIHNraXAgdGhlIERNQSBpdGVyYXRvciBmb3Igc2luZ2xlIHNlZ21lbnQgcmVxdWVzdHMsIGFzIHRoYXRcbiBcdCAqIHNpZ25pZmljYW50bHkgaW1wcm92ZXMgcGVyZm9ybWFuY2VzIGZvciBzbWFsbCBJL08gc2l6ZXMuXG5AQCAtMTM1MywxMyArMTY0NywxMyBAQCBzdGF0aWMgYmxrX3N0YXR1c190IG52bWVfcGNpX3NldHVwX21ldGFfaXRlcihzdHJ1Y3QgcmVxdWVzdCAqcmVxKVxuIFx0aW9kLVx1MDAzZWNtZC5jb21tb24ubWV0YWRhdGEgPSBjcHVfdG9fbGU2NChzZ2xfZG1hKTtcbiBcdGlmIChlbnRyaWVzID09IDEpIHtcbiBcdFx0aW9kLVx1MDAzZW1ldGFfdG90YWxfbGVuID0gaXRlci5sZW47XG4tXHRcdG52bWVfcGNpX3NnbF9zZXRfZGF0YShzZ19saXN0LCBcdTAwMjZpdGVyKTtcbitcdFx0bnZtZV9wY2lfZG1hX2l0ZXJfc2V0X3NnbChzZ19saXN0LCBcdTAwMjZpdGVyKTtcbiBcdFx0cmV0dXJuIEJMS19TVFNfT0s7XG4gXHR9XG4gXG4gXHRzZ2xfZG1hICs9IHNpemVvZigqc2dfbGlzdCk7XG4gXHRkbyB7XG4tXHRcdG52bWVfcGNpX3NnbF9zZXRfZGF0YShcdTAwMjZzZ19saXN0WysraV0sIFx1MDAyNml0ZXIpO1xuK1x0XHRudm1lX3BjaV9kbWFfaXRlcl9zZXRfc2dsKFx1MDAyNnNnX2xpc3RbKytpXSwgXHUwMDI2aXRlcik7XG4gXHRcdGlvZC1cdTAwM2VtZXRhX3RvdGFsX2xlbiArPSBpdGVyLmxlbjtcbiBcdH0gd2hpbGUgKGJsa19ycV9pbnRlZ3JpdHlfZG1hX21hcF9pdGVyX25leHQocmVxLCBkZXYtXHUwMDNlZGV2LCBcdTAwMjZpdGVyKSk7XG4gXG5AQCAtMjI2OSw2ICsyNTYzLDExOCBAQCBzdGF0aWMgaW50IG52bWVfY3JlYXRlX3F1ZXVlKHN0cnVjdCBudm1lX3F1ZXVlICpudm1lcSwgaW50IHFpZCwgYm9vbCBwb2xsZWQpXG4gXHRyZXR1cm4gcmVzdWx0O1xuIH1cbiBcbisjaWZkZWYgQ09ORklHX0RNQV9TSEFSRURfQlVGRkVSXG4rc3RhdGljIHZvaWQgbnZtZV9kbWFidWZfaW52YWxpZGF0ZV9tYXBwaW5ncyhzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2gpXG4re1xuK1x0c3RydWN0IGRtYV9idWZfaW9fY3R4ICpjdHggPSBhdHRhY2gtXHUwMDNlaW1wb3J0ZXJfcHJpdjtcbitcbitcdGRtYV9idWZfaW9faW52YWxpZGF0ZV9tYXBwaW5ncyhjdHgpO1xuK31cbitcbitjb25zdCBzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2hfb3BzIG52bWVfZG1hYnVmX2ltcG9ydGVyX29wcyA9IHtcbitcdC5pbnZhbGlkYXRlX21hcHBpbmdzXHQ9IG52bWVfZG1hYnVmX2ludmFsaWRhdGVfbWFwcGluZ3MsXG4rXHQuYWxsb3dfcGVlcjJwZWVyXHQ9IHRydWUsXG4rfTtcbitcbitzdGF0aWMgc3RydWN0IGRtYV9idWZfaW9fbWFwICpudm1lX2RtYV9idWZfaW9fbWFwKHN0cnVjdCBkbWFfYnVmX2lvX2N0eCAqY3R4KVxuK3tcbitcdHVuc2lnbmVkIG5yX2VudHJpZXMgPSBjdHgtXHUwMDNlZG1hYnVmLVx1MDAzZXNpemUgLyBOVk1FX0NUUkxfUEFHRV9TSVpFO1xuK1x0c3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoID0gY3R4LVx1MDAzZWRldl9wcml2O1xuK1x0dW5zaWduZWQgbG9uZyB0bXAsIGkgPSAwO1xuK1x0dW5zaWduZWQgc2VnX3NoaWZ0ID0gfjBVO1xuK1x0c3RydWN0IG52bWVfZG1hYnVmX21hcCAqbWFwO1xuK1x0c3RydWN0IHNjYXR0ZXJsaXN0ICpzZztcbitcdHN0cnVjdCBzZ190YWJsZSAqc2d0O1xuK1x0aW50IHJldDtcbitcbitcdGRtYV9yZXN2X2Fzc2VydF9oZWxkKGN0eC1cdTAwM2VkbWFidWYtXHUwMDNlcmVzdik7XG4rXG4rXHRtYXAgPSBrbWFsbG9jX2ZsZXgoKm1hcCwgZG1hX2xpc3QsIG5yX2VudHJpZXMpO1xuK1x0aWYgKCFtYXApXG4rXHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuK1xuK1x0c2d0ID0gZG1hX2J1Zl9tYXBfYXR0YWNobWVudChhdHRhY2gsIGN0eC1cdTAwM2VkaXIpO1xuK1x0aWYgKElTX0VSUihzZ3QpKSB7XG4rXHRcdHJldCA9IFBUUl9FUlIoc2d0KTtcbitcdFx0c2d0ID0gTlVMTDtcbitcdFx0Z290byBlcnI7XG4rXHR9XG4rXG4rXHRmb3JfZWFjaF9zZ3RhYmxlX2RtYV9zZyhzZ3QsIHNnLCB0bXApIHtcbitcdFx0ZG1hX2FkZHJfdCBkbWFfYWRkciA9IHNnX2RtYV9hZGRyZXNzKHNnKTtcbitcdFx0dW5zaWduZWQgbG9uZyBzZ19sZW4gPSBzZ19kbWFfbGVuKHNnKTtcbitcbitcdFx0aWYgKHNnX2xlbiAlIE5WTUVfQ1RSTF9QQUdFX1NJWkUpIHtcbitcdFx0XHRyZXQgPSAtRUlOVkFMO1xuK1x0XHRcdGdvdG8gZXJyO1xuK1x0XHR9XG4rXHRcdHNlZ19zaGlmdCA9IG1pbihzZWdfc2hpZnQsIF9fZmZzKHNnX2xlbikpO1xuK1xuK1x0XHR3aGlsZSAoc2dfbGVuKSB7XG4rXHRcdFx0bWFwLVx1MDAzZWRtYV9saXN0W2krK10gPSBkbWFfYWRkcjtcbitcdFx0XHRkbWFfYWRkciArPSBOVk1FX0NUUkxfUEFHRV9TSVpFO1xuK1x0XHRcdHNnX2xlbiAtPSBOVk1FX0NUUkxfUEFHRV9TSVpFO1xuK1x0XHR9XG4rXHR9XG4rXG4rXHRpZiAoV0FSTl9PTl9PTkNFKHNlZ19zaGlmdCBcdTAwM2MgTlZNRV9DVFJMX1BBR0VfU0hJRlQpKVxuK1x0XHRyZXR1cm4gRVJSX1BUUigtRUZBVUxUKTtcbitcbitcdHJldCA9IGRtYV9idWZfaW9faW5pdF9tYXAoY3R4LCBcdTAwMjZtYXAtXHUwMDNlYmFzZSk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIGVycjtcbitcdG1hcC1cdTAwM2ViYXNlLnNlZ19zaGlmdCA9IHNlZ19zaGlmdDtcbitcdG1hcC1cdTAwM2Vucl9lbnRyaWVzID0gbnJfZW50cmllcztcbitcdG1hcC1cdTAwM2VzZ3QgPSBzZ3Q7XG4rXHRyZXR1cm4gXHUwMDI2bWFwLVx1MDAzZWJhc2U7XG4rZXJyOlxuK1x0aWYgKHNndClcbitcdFx0ZG1hX2J1Zl91bm1hcF9hdHRhY2htZW50KGF0dGFjaCwgc2d0LCBjdHgtXHUwMDNlZGlyKTtcbitcdGtmcmVlKG1hcCk7XG4rXHRyZXR1cm4gRVJSX1BUUihyZXQpO1xuK31cbitcbitzdGF0aWMgdm9pZCBudm1lX2RtYV9idWZfaW9fdW5tYXAoc3RydWN0IGRtYV9idWZfaW9fY3R4ICpjdHgsXG4rXHRcdFx0XHQgIHN0cnVjdCBkbWFfYnVmX2lvX21hcCAqbWFwX2Jhc2UpXG4re1xuK1x0c3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoID0gY3R4LVx1MDAzZWRldl9wcml2O1xuK1x0c3RydWN0IG52bWVfZG1hYnVmX21hcCAqbWFwID0gdG9fbnZtZV9kbWFidWZfbWFwKG1hcF9iYXNlKTtcbitcbitcdGRtYV9yZXN2X2Fzc2VydF9oZWxkKGN0eC1cdTAwM2VkbWFidWYtXHUwMDNlcmVzdik7XG4rXG4rXHRkbWFfYnVmX3VubWFwX2F0dGFjaG1lbnQoYXR0YWNoLCBtYXAtXHUwMDNlc2d0LCBjdHgtXHUwMDNlZGlyKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgbnZtZV9kbWFfYnVmX2lvX3JlbGVhc2Uoc3RydWN0IGRtYV9idWZfaW9fY3R4ICpjdHgpXG4re1xuK1x0c3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoID0gY3R4LVx1MDAzZWRldl9wcml2O1xuK1xuK1x0ZG1hX2J1Zl9kZXRhY2goY3R4LVx1MDAzZWRtYWJ1ZiwgYXR0YWNoKTtcbit9XG4rXG4rY29uc3Qgc3RydWN0IGRtYV9idWZfaW9fb3BzIG52bWVfZG1hX2J1Zl9pb19vcHMgPSB7XG4rXHQubWFwXHRcdD0gbnZtZV9kbWFfYnVmX2lvX21hcCxcbitcdC51bm1hcFx0XHQ9IG52bWVfZG1hX2J1Zl9pb191bm1hcCxcbitcdC5yZWxlYXNlXHQ9IG52bWVfZG1hX2J1Zl9pb19yZWxlYXNlLFxuK307XG4rXG4rc3RhdGljIGludCBudm1lX3BjaV9pbml0X2RtYV9idWZfaW9fY3R4KHN0cnVjdCBudm1lX2N0cmwgKmN0cmwsXG4rXHRcdFx0XHRcdHN0cnVjdCBkbWFfYnVmX2lvX2N0eCAqY3R4KVxuK3tcbitcdHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaDtcbitcdHN0cnVjdCBudm1lX2RldiAqZGV2ID0gdG9fbnZtZV9kZXYoY3RybCk7XG4rXG4rXHRhdHRhY2ggPSBkbWFfYnVmX2R5bmFtaWNfYXR0YWNoKGN0eC1cdTAwM2VkbWFidWYsIGRldi1cdTAwM2VkZXYsXG4rXHRcdFx0XHRcdFx1MDAyNm52bWVfZG1hYnVmX2ltcG9ydGVyX29wcywgY3R4KTtcbitcdGlmIChJU19FUlIoYXR0YWNoKSlcbitcdFx0cmV0dXJuIFBUUl9FUlIoYXR0YWNoKTtcbitcbitcdGN0eC1cdTAwM2VkZXZfcHJpdiA9IGF0dGFjaDtcbitcdGN0eC1cdTAwM2VkZXZfb3BzID0gXHUwMDI2bnZtZV9kbWFfYnVmX2lvX29wcztcbitcdHJldHVybiAwO1xuK31cbisjZW5kaWZcbitcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGJsa19tcV9vcHMgbnZtZV9tcV9hZG1pbl9vcHMgPSB7XG4gXHQucXVldWVfcnFcdD0gbnZtZV9xdWV1ZV9ycSxcbiBcdC5jb21wbGV0ZVx0PSBudm1lX3BjaV9jb21wbGV0ZV9ycSxcbkBAIC0zNTYzLDYgKzM5NjksOSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG52bWVfY3RybF9vcHMgbnZtZV9wY2lfY3RybF9vcHMgPSB7XG4gXHQucHJpbnRfZGV2aWNlX2luZm9cdD0gbnZtZV9wY2lfcHJpbnRfZGV2aWNlX2luZm8sXG4gXHQuc3VwcG9ydHNfcGNpX3AycGRtYVx0PSBudm1lX3BjaV9zdXBwb3J0c19wY2lfcDJwZG1hLFxuIFx0LmdldF92aXJ0X2JvdW5kYXJ5XHQ9IG52bWVfcGNpX2dldF92aXJ0X2JvdW5kYXJ5LFxuKyNpZmRlZiBDT05GSUdfRE1BX1NIQVJFRF9CVUZGRVJcbitcdC5pbml0X2RtYV9idWZfaW9fY3R4XHQ9IG52bWVfcGNpX2luaXRfZG1hX2J1Zl9pb19jdHgsXG4rI2VuZGlmXG4gfTtcbiBcbiBzdGF0aWMgaW50IG52bWVfZGV2X21hcChzdHJ1Y3QgbnZtZV9kZXYgKmRldilcbkBAIC00MzI3LDUgKzQ3MzYsNiBAQCBNT0RVTEVfQVVUSE9SKFwiTWF0dGhldyBXaWxjb3ggXHUwMDNjd2lsbHlAbGludXguaW50ZWwuY29tXHUwMDNlXCIpO1xuIE1PRFVMRV9MSUNFTlNFKFwiR1BMXCIpO1xuIE1PRFVMRV9WRVJTSU9OKFwiMS4wXCIpO1xuIE1PRFVMRV9ERVNDUklQVElPTihcIk5WTWUgaG9zdCBQQ0llIHRyYW5zcG9ydCBkcml2ZXJcIik7XG4rTU9EVUxFX0lNUE9SVF9OUyhcIkRNQV9CVUZcIik7XG4gbW9kdWxlX2luaXQobnZtZV9pbml0KTtcbiBtb2R1bGVfZXhpdChudm1lX2V4aXQpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbnZtZS9ob3N0L3RjcC5jIGIvZHJpdmVycy9udm1lL2hvc3QvdGNwLmNcbmluZGV4IGJhNWM3YjNlMmE3YzYuLmNlMDNhMGVhNGRlZDcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL252bWUvaG9zdC90Y3AuY1xuKysrIGIvZHJpdmVycy9udm1lL2hvc3QvdGNwLmNcbkBAIC0zNTcsNyArMzU3LDcgQEAgc3RhdGljIHZvaWQgbnZtZV90Y3BfaW5pdF9pdGVyKHN0cnVjdCBudm1lX3RjcF9yZXF1ZXN0ICpyZXEsXG4gXHRcdGlvdl9pdGVyX2J2ZWMoXHUwMDI2cmVxLVx1MDAzZWl0ZXIsIGRpcixcbiBcdFx0XHRfX2J2ZWNfaXRlcl9idmVjKGJpby1cdTAwM2ViaV9pb192ZWMsIGJpby1cdTAwM2ViaV9pdGVyKSwgbnJfYnZlYyxcbiBcdFx0XHRiaW8tXHUwMDNlYmlfaXRlci5iaV9zaXplKTtcbi1cdFx0cmVxLVx1MDAzZWl0ZXIuaW92X29mZnNldCA9IGJpby1cdTAwM2ViaV9pdGVyLmJpX2J2ZWNfZG9uZTtcbitcdFx0cmVxLVx1MDAzZWl0ZXIuaW92X29mZnNldCA9IGJpby1cdTAwM2ViaV9pdGVyLmJpX29mZnNldDtcbiBcdH1cbiB9XG4gXG5kaWZmIC0tZ2l0IGEvZnMvYnRyZnMvbWlzYy5oIGIvZnMvYnRyZnMvbWlzYy5oXG5pbmRleCA2OTRiZTZkMDU2MmE0Li44MDIwNjA5NDMxODAxIDEwMDY0NFxuLS0tIGEvZnMvYnRyZnMvbWlzYy5oXG4rKysgYi9mcy9idHJmcy9taXNjLmhcbkBAIC03NCw3ICs3NCw3IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IGJ2ZWNfaXRlciBpbml0X2J2ZWNfaXRlcl9mb3JfYmlvKHN0cnVjdCBiaW8gKmJpbylcbiBcdFx0LmJpX3NlY3RvciA9IDAsXG4gXHRcdC5iaV9zaXplID0gYmlvX3NpemUsXG4gXHRcdC5iaV9pZHggPSAwLFxuLVx0XHQuYmlfYnZlY19kb25lID0gMCxcbitcdFx0LmJpX29mZnNldCA9IDAsXG4gXHR9O1xuIH1cbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Jpby5oIGIvaW5jbHVkZS9saW51eC9iaW8uaFxuaW5kZXggMDQ0NWVjYmEzYjI0Ny4uMjJjZTlkZWIyZmViYiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvYmlvLmhcbisrKyBiL2luY2x1ZGUvbGludXgvYmlvLmhcbkBAIC04MCw3ICs4MCw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBiaW9fbm9fYWR2YW5jZV9pdGVyKGNvbnN0IHN0cnVjdCBiaW8gKmJpbylcbiB7XG4gXHRyZXR1cm4gYmlvX29wKGJpbykgPT0gUkVRX09QX0RJU0NBUkQgfHxcbiBcdCAgICAgICBiaW9fb3AoYmlvKSA9PSBSRVFfT1BfU0VDVVJFX0VSQVNFIHx8XG4tXHQgICAgICAgYmlvX29wKGJpbykgPT0gUkVRX09QX1dSSVRFX1pFUk9FUztcbitcdCAgICAgICBiaW9fb3AoYmlvKSA9PSBSRVFfT1BfV1JJVEVfWkVST0VTIHx8XG4rXHQgICAgICAgb3BfaXNfZG1hYnVmKGJpby1cdTAwM2ViaV9vcGYpO1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgKmJpb19kYXRhKHN0cnVjdCBiaW8gKmJpbylcbkBAIC0xMTMsMTEgKzExNCwxMyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgYmlvX2FkdmFuY2VfaXRlcihjb25zdCBzdHJ1Y3QgYmlvICpiaW8sXG4ge1xuIFx0aXRlci1cdTAwM2ViaV9zZWN0b3IgKz0gYnl0ZXMgXHUwMDNlXHUwMDNlIDk7XG4gXG4tXHRpZiAoYmlvX25vX2FkdmFuY2VfaXRlcihiaW8pKVxuK1x0aWYgKGJpb19ub19hZHZhbmNlX2l0ZXIoYmlvKSkge1xuIFx0XHRpdGVyLVx1MDAzZWJpX3NpemUgLT0gYnl0ZXM7XG4tXHRlbHNlXG4rXHRcdGl0ZXItXHUwMDNlYmlfb2Zmc2V0ICs9IGJ5dGVzO1xuK1x0fSBlbHNlIHtcbiBcdFx0YnZlY19pdGVyX2FkdmFuY2UoYmlvLVx1MDAzZWJpX2lvX3ZlYywgaXRlciwgYnl0ZXMpO1xuIFx0XHQvKiBUT0RPOiBJdCBpcyByZWFzb25hYmxlIHRvIGNvbXBsZXRlIGJpbyB3aXRoIGVycm9yIGhlcmUuICovXG4rXHR9XG4gfVxuIFxuIC8qIEBieXRlcyBzaG91bGQgYmUgbGVzcyBvciBlcXVhbCB0byBidmVjW2ktXHUwMDNlYmlfaWR4XS5idl9sZW4gKi9cbkBAIC0xMjcsMTAgKzEzMCwxMiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgYmlvX2FkdmFuY2VfaXRlcl9zaW5nbGUoY29uc3Qgc3RydWN0IGJpbyAqYmlvLFxuIHtcbiBcdGl0ZXItXHUwMDNlYmlfc2VjdG9yICs9IGJ5dGVzIFx1MDAzZVx1MDAzZSA5O1xuIFxuLVx0aWYgKGJpb19ub19hZHZhbmNlX2l0ZXIoYmlvKSlcbitcdGlmIChiaW9fbm9fYWR2YW5jZV9pdGVyKGJpbykpIHtcbiBcdFx0aXRlci1cdTAwM2ViaV9zaXplIC09IGJ5dGVzO1xuLVx0ZWxzZVxuK1x0XHRpdGVyLVx1MDAzZWJpX29mZnNldCArPSBieXRlcztcbitcdH0gZWxzZSB7XG4gXHRcdGJ2ZWNfaXRlcl9hZHZhbmNlX3NpbmdsZShiaW8tXHUwMDNlYmlfaW9fdmVjLCBpdGVyLCBieXRlcyk7XG4rXHR9XG4gfVxuIFxuIHZvaWQgX19iaW9fYWR2YW5jZShzdHJ1Y3QgYmlvICosIHVuc2lnbmVkIGJ5dGVzKTtcbkBAIC00MzQsMTIgKzQzOSwxMiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgYmlvX3dvdWxkYmxvY2tfZXJyb3Ioc3RydWN0IGJpbyAqYmlvKVxuIFxuIC8qXG4gICogQ2FsY3VsYXRlIG51bWJlciBvZiBidmVjIHNlZ21lbnRzIHRoYXQgc2hvdWxkIGJlIGFsbG9jYXRlZCB0byBmaXQgZGF0YVxuLSAqIHBvaW50ZWQgYnkgQGl0ZXIuIElmIEBpdGVyIGlzIGJhY2tlZCBieSBidmVjIGl0J3MgZ29pbmcgdG8gYmUgcmV1c2VkXG4tICogaW5zdGVhZCBvZiBhbGxvY2F0aW5nIGEgbmV3IG9uZS5cbisgKiBwb2ludGVkIGJ5IEBpdGVyLiBJZiBAaXRlciBpcyBiYWNrZWQgYnkgYSBidmVjIG9yIGEgZG1hYnVmLCB0aGUgYnZlYyBhcnJheSAvXG4rICogdGhlIGRtYSBtYXAgYXJlIGdvaW5nIHRvIGJlIHJldXNlZCwgYW5kIHNvIG5vIGV4dHJhIGFsbG9jYXRpb24gaXMgcmVxdWlyZWQuXG4gICovXG4gc3RhdGljIGlubGluZSBpbnQgYmlvX2lvdl92ZWNzX3RvX2FsbG9jKHN0cnVjdCBpb3ZfaXRlciAqaXRlciwgaW50IG1heF9zZWdzKVxuIHtcbi1cdGlmIChpb3ZfaXRlcl9pc19idmVjKGl0ZXIpKVxuK1x0aWYgKGlvdl9pdGVyX2lzX2J2ZWMoaXRlcikgfHwgaW92X2l0ZXJfaXNfZG1hYnVmX21hcChpdGVyKSlcbiBcdFx0cmV0dXJuIDA7XG4gXHRyZXR1cm4gaW92X2l0ZXJfbnBhZ2VzKGl0ZXIsIG1heF9zZWdzKTtcbiB9XG5AQCAtNTE4LDcgKzUyMyw3IEBAIGludCBiZGV2X3J3X3ZpcnQoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc2VjdG9yX3Qgc2VjdG9yLCB2b2lkICpkYXRhLFxuIGludCBiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuIFx0XHR1bnNpZ25lZCBtZW1fYWxpZ25fbWFzaywgdW5zaWduZWQgbGVuX2FsaWduX21hc2spO1xuIFxuLXZvaWQgYmlvX2lvdl9idmVjX3NldChzdHJ1Y3QgYmlvICpiaW8sIGNvbnN0IHN0cnVjdCBpb3ZfaXRlciAqaXRlcik7XG4rYm9vbCBiaW9faW92X2l0ZXJfc2V0KHN0cnVjdCBiaW8gKmJpbywgY29uc3Qgc3RydWN0IGlvdl9pdGVyICppdGVyKTtcbiB2b2lkIF9fYmlvX3JlbGVhc2VfcGFnZXMoc3RydWN0IGJpbyAqYmlvLCBib29sIG1hcmtfZGlydHkpO1xuIGV4dGVybiB2b2lkIGJpb19zZXRfcGFnZXNfZGlydHkoc3RydWN0IGJpbyAqYmlvKTtcbiBleHRlcm4gdm9pZCBiaW9fY2hlY2tfcGFnZXNfZGlydHkoc3RydWN0IGJpbyAqYmlvKTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Jsay1tcS5oIGIvaW5jbHVkZS9saW51eC9ibGstbXEuaFxuaW5kZXggYWY4Nzg1OTdhZmI4Yy4uN2M3NTA0Yzg0ZTA5MCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvYmxrLW1xLmhcbisrKyBiL2luY2x1ZGUvbGludXgvYmxrLW1xLmhcbkBAIC0xMDE3LDYgKzEwMTcsMTMgQEAgc3RhdGljIGlubGluZSB2b2lkICpibGtfbXFfcnFfdG9fcGR1KHN0cnVjdCByZXF1ZXN0ICpycSlcbiBcdHJldHVybiBycSArIDE7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBibGtfbXFfcnFfaXNfZG1hYnVmKHN0cnVjdCByZXF1ZXN0ICpycSlcbit7XG4rXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0RNQV9TSEFSRURfQlVGRkVSKSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1x0cmV0dXJuIHJxLVx1MDAzZWJpbyBcdTAwMjZcdTAwMjYgb3BfaXNfZG1hYnVmKHJxLVx1MDAzZWJpby1cdTAwM2ViaV9vcGYpO1xuK31cbitcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBibGtfbXFfaHdfY3R4ICpxdWV1ZV9oY3R4KHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBpbnQgaWQpXG4ge1xuIFx0c3RydWN0IGJsa19tcV9od19jdHggKmhjdHg7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ibGtfdHlwZXMuaCBiL2luY2x1ZGUvbGludXgvYmxrX3R5cGVzLmhcbmluZGV4IGQ0OWQ5N2EwNTBkMGUuLmEzMDU5NTFmMDMxMjQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2Jsa190eXBlcy5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2Jsa190eXBlcy5oXG5AQCAtMjMzLDcgKzIzMywxMiBAQCBzdHJ1Y3QgYmlvIHtcbiBcdGF0b21pY190XHRcdF9fYmlfcmVtYWluaW5nO1xuIFxuIFx0LyogVGhlIGFjdHVhbCB2ZWMgbGlzdCwgcHJlc2VydmVkIGJ5IGJpb19yZXNldCgpICovXG4tXHRzdHJ1Y3QgYmlvX3ZlY1x0XHQqYmlfaW9fdmVjO1xuK1x0dW5pb24ge1xuK1x0XHRzdHJ1Y3QgYmlvX3ZlY1x0XHQqYmlfaW9fdmVjO1xuK1x0XHQvKiBEcml2ZXIgc3BlY2lmaWMgZG1hIG1hcCwgdmFsaWQgSUZGIFJFUV9ETUFCVUYgaXMgc2V0ICovXG4rXHRcdHN0cnVjdCBkbWFfYnVmX2lvX21hcFx0KmJpX2RtYWJ1Zl9tYXA7XG4rXHR9O1xuK1xuIFx0c3RydWN0IGJ2ZWNfaXRlclx0YmlfaXRlcjtcbiBcbiBcdHVuaW9uIHtcbkBAIC00MDIsNiArNDA3LDcgQEAgZW51bSByZXFfZmxhZ19iaXRzIHtcbiBcdF9fUkVRX0RSVixcdFx0LyogZm9yIGRyaXZlciB1c2UgKi9cbiBcdF9fUkVRX0ZTX1BSSVZBVEUsXHQvKiBmb3IgZmlsZSBzeXN0ZW0gKHN1Ym1pdHRlcikgdXNlICovXG4gXHRfX1JFUV9BVE9NSUMsXHRcdC8qIGZvciBhdG9taWMgd3JpdGUgb3BlcmF0aW9ucyAqL1xuK1x0X19SRVFfRE1BQlVGLFx0XHQvKiBVc2luZyBwcmVtbWFwZWQgZG1hIGJ1ZmZlcnMgKi9cbiBcdC8qXG4gXHQgKiBDb21tYW5kIHNwZWNpZmljIGZsYWdzLCBrZWVwIGxhc3Q6XG4gXHQgKi9cbkBAIC00MzQsNiArNDQwLDcgQEAgZW51bSByZXFfZmxhZ19iaXRzIHtcbiAjZGVmaW5lIFJFUV9EUlZcdFx0KF9fZm9yY2UgYmxrX29wZl90KSgxVUxMIFx1MDAzY1x1MDAzYyBfX1JFUV9EUlYpXG4gI2RlZmluZSBSRVFfRlNfUFJJVkFURVx0KF9fZm9yY2UgYmxrX29wZl90KSgxVUxMIFx1MDAzY1x1MDAzYyBfX1JFUV9GU19QUklWQVRFKVxuICNkZWZpbmUgUkVRX0FUT01JQ1x0KF9fZm9yY2UgYmxrX29wZl90KSgxVUxMIFx1MDAzY1x1MDAzYyBfX1JFUV9BVE9NSUMpXG4rI2RlZmluZSBSRVFfRE1BQlVGXHQoX19mb3JjZSBibGtfb3BmX3QpKDFVTEwgXHUwMDNjXHUwMDNjIF9fUkVRX0RNQUJVRilcbiBcbiAjZGVmaW5lIFJFUV9OT1VOTUFQXHQoX19mb3JjZSBibGtfb3BmX3QpKDFVTEwgXHUwMDNjXHUwMDNjIF9fUkVRX05PVU5NQVApXG4gXG5AQCAtNDg3LDYgKzQ5NCwxMSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgb3BfaXNfZGlzY2FyZChibGtfb3BmX3Qgb3ApXG4gXHRyZXR1cm4gKG9wIFx1MDAyNiBSRVFfT1BfTUFTSykgPT0gUkVRX09QX0RJU0NBUkQ7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBvcF9pc19kbWFidWYoYmxrX29wZl90IG9wKVxuK3tcbitcdHJldHVybiBvcCBcdTAwMjYgUkVRX0RNQUJVRjtcbit9XG4rXG4gLypcbiAgKiBDaGVjayBpZiBhIGJpbyBvciByZXF1ZXN0IG9wZXJhdGlvbiBpcyBhIHpvbmUgbWFuYWdlbWVudCBvcGVyYXRpb24uXG4gICovXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ibGtkZXYuaCBiL2luY2x1ZGUvbGludXgvYmxrZGV2LmhcbmluZGV4IDkyMTNhNTcxNmY5NWEuLjlmNGM5MmU1MWRjOTUgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oXG5AQCAtMTY4Miw2ICsxNjgyLDggQEAgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIHtcbiBcdC8qIHJldHVybnMgdGhlIGxlbmd0aCBvZiB0aGUgaWRlbnRpZmllciBvciBhIG5lZ2F0aXZlIGVycm5vOiAqL1xuIFx0aW50ICgqZ2V0X3VuaXF1ZV9pZCkoc3RydWN0IGdlbmRpc2sgKmRpc2ssIHU4IGlkWzE2XSxcbiBcdFx0XHRlbnVtIGJsa191bmlxdWVfaWQgaWRfdHlwZSk7XG4rXHRpbnQgKCppbml0X2RtYV9idWZfaW9fY3R4KShzdHJ1Y3QgYmxvY2tfZGV2aWNlICosXG4rXHRcdFx0XHQgICBzdHJ1Y3QgZG1hX2J1Zl9pb19jdHggKik7XG4gXHRzdHJ1Y3QgbW9kdWxlICpvd25lcjtcbiBcdGNvbnN0IHN0cnVjdCBwcl9vcHMgKnByX29wcztcbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2J2ZWMuaCBiL2luY2x1ZGUvbGludXgvYnZlYy5oXG5pbmRleCA5MjgzN2UyNzQzZjE5Li5iNjM5MTRmZjU2ZTMzIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9idmVjLmhcbisrKyBiL2luY2x1ZGUvbGludXgvYnZlYy5oXG5AQCAtMTA4LDkgKzEwOCwxMCBAQCBzdHJ1Y3QgYnZlY19pdGVyIHtcbiBcdHVuc2lnbmVkIGludFx0XHRiaV9pZHg7XG4gXG4gXHQvKlxuLVx0ICogQ3VycmVudCBvZmZzZXQgaW4gdGhlIGJ2ZWMgZW50cnkgcG9pbnRlZCB0byBieSBgYmlfaWR4YC5cbitcdCAqIEN1cnJlbnQgb2Zmc2V0IGluIHRoZSBidmVjIGVudHJ5IHBvaW50ZWQgdG8gYnkgYGJpX2lkeGAgb3IgaW50b1xuK1x0ICogYSBkbWEtYnVmIG1hcC5cbiBcdCAqL1xuLVx0dW5zaWduZWQgaW50XHRcdGJpX2J2ZWNfZG9uZTtcbitcdHVuc2lnbmVkIGludFx0XHRiaV9vZmZzZXQ7XG4gfSBfX3BhY2tlZCBfX2FsaWduZWQoNCk7XG4gXG4gc3RydWN0IGJ2ZWNfaXRlcl9hbGwge1xuQEAgLTEzNSwxNCArMTM2LDE0IEBAIG1wX2J2ZWNfaXRlcl9wYWdlKGNvbnN0IHN0cnVjdCBiaW9fdmVjICpidmVjcywgY29uc3Qgc3RydWN0IGJ2ZWNfaXRlciBpdGVyKVxuIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdW5zaWduZWQgaW50XG4gbXBfYnZlY19pdGVyX2xlbihjb25zdCBzdHJ1Y3QgYmlvX3ZlYyAqYnZlY3MsIGNvbnN0IHN0cnVjdCBidmVjX2l0ZXIgaXRlcilcbiB7XG4tXHRyZXR1cm4gbWluKF9fYnZlY19pdGVyX2J2ZWMoYnZlY3MsIGl0ZXIpLVx1MDAzZWJ2X2xlbiAtIGl0ZXIuYmlfYnZlY19kb25lLFxuK1x0cmV0dXJuIG1pbihfX2J2ZWNfaXRlcl9idmVjKGJ2ZWNzLCBpdGVyKS1cdTAwM2Vidl9sZW4gLSBpdGVyLmJpX29mZnNldCxcbiBcdFx0XHRpdGVyLmJpX3NpemUpO1xuIH1cbiBcbiBzdGF0aWMgX19hbHdheXNfaW5saW5lIHVuc2lnbmVkIGludFxuIG1wX2J2ZWNfaXRlcl9vZmZzZXQoY29uc3Qgc3RydWN0IGJpb192ZWMgKmJ2ZWNzLCBjb25zdCBzdHJ1Y3QgYnZlY19pdGVyIGl0ZXIpXG4ge1xuLVx0cmV0dXJuIF9fYnZlY19pdGVyX2J2ZWMoYnZlY3MsIGl0ZXIpLVx1MDAzZWJ2X29mZnNldCArIGl0ZXIuYmlfYnZlY19kb25lO1xuK1x0cmV0dXJuIF9fYnZlY19pdGVyX2J2ZWMoYnZlY3MsIGl0ZXIpLVx1MDAzZWJ2X29mZnNldCArIGl0ZXIuYmlfb2Zmc2V0O1xuIH1cbiBcbiBzdGF0aWMgX19hbHdheXNfaW5saW5lIHVuc2lnbmVkIGludFxuQEAgLTIwNCw3ICsyMDUsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgYnZlY19pdGVyX2FkdmFuY2UoY29uc3Qgc3RydWN0IGJpb192ZWMgKmJ2LFxuIFx0fVxuIFxuIFx0aXRlci1cdTAwM2ViaV9zaXplIC09IGJ5dGVzO1xuLVx0Ynl0ZXMgKz0gaXRlci1cdTAwM2ViaV9idmVjX2RvbmU7XG4rXHRieXRlcyArPSBpdGVyLVx1MDAzZWJpX29mZnNldDtcbiBcbiBcdHdoaWxlIChieXRlcyBcdTAwMjZcdTAwMjYgYnl0ZXMgXHUwMDNlPSBidltpZHhdLmJ2X2xlbikge1xuIFx0XHRieXRlcyAtPSBidltpZHhdLmJ2X2xlbjtcbkBAIC0yMTIsNyArMjEzLDcgQEAgc3RhdGljIGlubGluZSBib29sIGJ2ZWNfaXRlcl9hZHZhbmNlKGNvbnN0IHN0cnVjdCBiaW9fdmVjICpidixcbiBcdH1cbiBcbiBcdGl0ZXItXHUwMDNlYmlfaWR4ID0gaWR4O1xuLVx0aXRlci1cdTAwM2ViaV9idmVjX2RvbmUgPSBieXRlcztcbitcdGl0ZXItXHUwMDNlYmlfb2Zmc2V0ID0gYnl0ZXM7XG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG5AQCAtMjIzLDEzICsyMjQsMTMgQEAgc3RhdGljIGlubGluZSBib29sIGJ2ZWNfaXRlcl9hZHZhbmNlKGNvbnN0IHN0cnVjdCBiaW9fdmVjICpidixcbiBzdGF0aWMgaW5saW5lIHZvaWQgYnZlY19pdGVyX2FkdmFuY2Vfc2luZ2xlKGNvbnN0IHN0cnVjdCBiaW9fdmVjICpidixcbiBcdFx0XHRcdHN0cnVjdCBidmVjX2l0ZXIgKml0ZXIsIHVuc2lnbmVkIGludCBieXRlcylcbiB7XG4tXHR1bnNpZ25lZCBpbnQgZG9uZSA9IGl0ZXItXHUwMDNlYmlfYnZlY19kb25lICsgYnl0ZXM7XG4rXHR1bnNpZ25lZCBpbnQgZG9uZSA9IGl0ZXItXHUwMDNlYmlfb2Zmc2V0ICsgYnl0ZXM7XG4gXG4gXHRpZiAoZG9uZSA9PSBidltpdGVyLVx1MDAzZWJpX2lkeF0uYnZfbGVuKSB7XG4gXHRcdGRvbmUgPSAwO1xuIFx0XHRpdGVyLVx1MDAzZWJpX2lkeCsrO1xuIFx0fVxuLVx0aXRlci1cdTAwM2ViaV9idmVjX2RvbmUgPSBkb25lO1xuK1x0aXRlci1cdTAwM2ViaV9vZmZzZXQgPSBkb25lO1xuIFx0aXRlci1cdTAwM2ViaV9zaXplIC09IGJ5dGVzO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RtYS1idWYtaW8uaCBiL2luY2x1ZGUvbGludXgvZG1hLWJ1Zi1pby5oXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZjMxYzczNzVhZTkxMVxuLS0tIC9kZXYvbnVsbFxuKysrIGIvaW5jbHVkZS9saW51eC9kbWEtYnVmLWlvLmhcbkBAIC0wLDAgKzEsOTIgQEBcbisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xuKyNpZm5kZWYgX19ETUFfQlVGX0lPX0hfX1xuKyNkZWZpbmUgX19ETUFfQlVGX0lPX0hfX1xuK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2RtYS1idWYuaFx1MDAzZVxuK1xuK3N0cnVjdCBkbWFfYnVmX2lvX2ZlbmNlO1xuK3N0cnVjdCBkbWFfYnVmX2lvX2N0eDtcbitzdHJ1Y3QgZG1hX2J1Zl9pb19tYXA7XG4rXG4rc3RydWN0IGRtYV9idWZfaW9fb3BzIHtcbitcdC8qXG4rXHQgKiBDcmVhdGUgYSBuZXcgbWFwIGZvciB0aGUgZ2l2ZW4gY3R4LiBDYWxsZWQgd2l0aCB0aGUgcmVzZXJ2YXRpb25cbitcdCAqIGxvY2sgaGVsZC5cbitcdCAqL1xuK1x0c3RydWN0IGRtYV9idWZfaW9fbWFwICooKm1hcCkoc3RydWN0IGRtYV9idWZfaW9fY3R4ICpjdHgpO1xuK1xuK1x0LypcbitcdCAqIENsZWFuIHVwIGRldmljZSBzcGVjaWZpYyBwYXJ0cyBvZiB0aGUgQG1hcC4gQ2FsbGVkIHdpdGggdGhlXG4rXHQgKiByZXNlcnZhdGlvbiBsb2NrIGhlbGQuXG4rXHQgKi9cbitcdHZvaWQgKCp1bm1hcCkoc3RydWN0IGRtYV9idWZfaW9fY3R4ICpjdHgsIHN0cnVjdCBkbWFfYnVmX2lvX21hcCAqbWFwKTtcbitcbitcdC8qXG4rXHQgKiBUaGUgdXNlciB0cmllcyB0byBkZXN0cm95IHRoZSBjdHguIFJlbGVhc2UgYWxsIGRldmljZSBzcGVjaWZpY1xuK1x0ICogcGFydHMgb2YgdGhlIHRva2VuLlxuK1x0ICovXG4rXHR2b2lkICgqcmVsZWFzZSkoc3RydWN0IGRtYV9idWZfaW9fY3R4ICopO1xuK307XG4rXG4rc3RydWN0IGRtYV9idWZfaW9fbWFwIHtcbitcdC8qXG4rXHQgKiBDb3VudHMgYXR0YWNoZWQgcmVxdWVzdHMgYW5kIG90aGVyIHVzZXJzLiBEZXZpY2Ugc3BlY2lmaWMgdW5tYXBwaW5nXG4rXHQgKiBpcyBkZWZlcnJlZCB1bnRpbCBhbGwgcmVmcyBhcmUgZHJvcHBlZC5cbitcdCAqL1xuK1x0c3RydWN0IHBlcmNwdV9yZWZcdFx0cmVmcztcbitcdHVuc2lnbmVkXHRcdFx0c2VnX3NoaWZ0O1xuK1xuK1x0c3RydWN0IHdvcmtfc3RydWN0XHRcdHJlbGVhc2Vfd29yaztcbitcdHN0cnVjdCBkbWFfYnVmX2lvX2ZlbmNlXHRcdCpmZW5jZTtcbitcdHN0cnVjdCBkbWFfYnVmX2lvX2N0eFx0XHQqY3R4O1xuK307XG4rXG4rc3RydWN0IGRtYV9idWZfaW9fY3R4IHtcbitcdHN0cnVjdCBkbWFfYnVmX2lvX21hcCBfX3JjdVx0XHQqbWFwO1xuK1x0c3RydWN0IGRtYV9idWZcdFx0XHRcdCpkbWFidWY7XG4rXHRlbnVtIGRtYV9kYXRhX2RpcmVjdGlvblx0XHRcdGRpcjtcbitcbitcdGF0b21pY190XHRcdFx0XHRmZW5jZV9zZXE7XG4rXHR1NjRcdFx0XHRcdFx0ZmVuY2VfY3R4O1xuK1x0c3RydWN0IHdvcmtfc3RydWN0XHRcdFx0cmVsZWFzZV93b3JrO1xuK1x0cmVmY291bnRfdFx0XHRcdFx0cmVmcztcbitcbitcdHZvaWRcdFx0XHRcdFx0KmRldl9wcml2O1xuK1x0Y29uc3Qgc3RydWN0IGRtYV9idWZfaW9fb3BzXHRcdCpkZXZfb3BzO1xuK307XG4rXG4raW50IGRtYV9idWZfaW9fY3R4X2NyZWF0ZShzdHJ1Y3QgZmlsZSAqZmlsZSxcbitcdFx0XHQgICBzdHJ1Y3QgZG1hX2J1Zl9pb19jdHggKmN0eCxcbitcdFx0XHQgICBzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmLFxuK1x0XHRcdCAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcik7XG4rdm9pZCBkbWFfYnVmX2lvX2N0eF9yZWxlYXNlKHN0cnVjdCBkbWFfYnVmX2lvX2N0eCAqY3R4KTtcbitcbitzdHJ1Y3QgZG1hX2J1Zl9pb19tYXAgKmRtYV9idWZfaW9fY3JlYXRlX21hcChzdHJ1Y3QgZG1hX2J1Zl9pb19jdHggKmN0eCk7XG4rXG4rc3RhdGljIGlubGluZSBzdHJ1Y3QgZG1hX2J1Zl9pb19tYXAgKlxuK2RtYV9idWZfaW9fZ2V0X21hcChzdHJ1Y3QgZG1hX2J1Zl9pb19jdHggKmN0eClcbit7XG4rXHRzdHJ1Y3QgZG1hX2J1Zl9pb19tYXAgKm1hcDtcbitcbitcdGd1YXJkKHJjdSkoKTtcbitcbitcdG1hcCA9IHJjdV9kZXJlZmVyZW5jZShjdHgtXHUwMDNlbWFwKTtcbitcdGlmICh1bmxpa2VseSghbWFwIHx8ICFwZXJjcHVfcmVmX3RyeWdldF9saXZlX3JjdShcdTAwMjZtYXAtXHUwMDNlcmVmcykpKVxuK1x0XHRyZXR1cm4gTlVMTDtcbitcbitcdHJldHVybiBtYXA7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgdm9pZCBkbWFfYnVmX2lvX21hcF9kcm9wKHN0cnVjdCBkbWFfYnVmX2lvX21hcCAqbWFwKVxuK3tcbitcdHBlcmNwdV9yZWZfcHV0KFx1MDAyNm1hcC1cdTAwM2VyZWZzKTtcbit9XG4rXG4rLypcbisgKiBEZXZpY2UgQVBJXG4rICovXG4rXG4rdm9pZCBkbWFfYnVmX2lvX2ludmFsaWRhdGVfbWFwcGluZ3Moc3RydWN0IGRtYV9idWZfaW9fY3R4ICpjdHgpO1xuK2ludCBkbWFfYnVmX2lvX2luaXRfbWFwKHN0cnVjdCBkbWFfYnVmX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZG1hX2J1Zl9pb19tYXAgKm1hcCk7XG4rXG4rI2VuZGlmXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mcy5oIGIvaW5jbHVkZS9saW51eC9mcy5oXG5pbmRleCA1MGNlNzMxYTJiNzhmLi5lNjJmYTY1M2UxNDg0IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9mcy5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2ZzLmhcbkBAIC0xOTE0LDYgKzE5MTQsNyBAQCBzdHJ1Y3QgZGlyX2NvbnRleHQge1xuICNkZWZpbmUgQ09QWV9GSUxFX1NQTElDRVx0XHQoMSBcdTAwM2NcdTAwM2MgMClcbiBcbiBzdHJ1Y3QgaW9fdXJpbmdfY21kO1xuK3N0cnVjdCBkbWFfYnVmX2lvX2N0eDtcbiBzdHJ1Y3Qgb2Zmc2V0X2N0eDtcbiBcbiB0eXBlZGVmIHVuc2lnbmVkIGludCBfX2JpdHdpc2UgZm9wX2ZsYWdzX3Q7XG5AQCAtMTk2Miw2ICsxOTYzLDcgQEAgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB7XG4gXHRpbnQgKCp1cmluZ19jbWRfaW9wb2xsKShzdHJ1Y3QgaW9fdXJpbmdfY21kICosIHN0cnVjdCBpb19jb21wX2JhdGNoICosXG4gXHRcdFx0XHR1bnNpZ25lZCBpbnQgcG9sbF9mbGFncyk7XG4gXHRpbnQgKCptbWFwX3ByZXBhcmUpKHN0cnVjdCB2bV9hcmVhX2Rlc2MgKik7XG4rXHRpbnQgKCppbml0X2RtYV9idWZfaW9fY3R4KShzdHJ1Y3QgZmlsZSAqLCBzdHJ1Y3QgZG1hX2J1Zl9pb19jdHggKik7XG4gfSBfX3JhbmRvbWl6ZV9sYXlvdXQ7XG4gXG4gLyogU3VwcG9ydHMgYXN5bmMgYnVmZmVyZWQgcmVhZHMgKi9cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lvX3VyaW5nX3R5cGVzLmggYi9pbmNsdWRlL2xpbnV4L2lvX3VyaW5nX3R5cGVzLmhcbmluZGV4IGEyYzYyM2E2N2EyNTEuLmY5MDU4NmQzNTNjMWMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2lvX3VyaW5nX3R5cGVzLmhcbisrKyBiL2luY2x1ZGUvbGludXgvaW9fdXJpbmdfdHlwZXMuaFxuQEAgLTEwLDYgKzEwLDcgQEBcbiBcbiBzdHJ1Y3QgaW91X2xvb3BfcGFyYW1zO1xuIHN0cnVjdCBpb191cmluZ19icGZfb3BzO1xuK3N0cnVjdCBkbWFfYnVmX2lvX21hcDtcbiBcbiBlbnVtIHtcbiBcdC8qXG5AQCAtNTk0LDYgKzU5NSw3IEBAIGVudW0ge1xuIFx0UkVRX0ZfSU1QT1JUX0JVRkZFUl9CSVQsXG4gXHRSRVFfRl9TUUVfQ09QSUVEX0JJVCxcbiBcdFJFUV9GX0lPUE9MTF9CSVQsXG4rXHRSRVFfRl9EUk9QX0RNQUJVRl9CSVQsXG4gXG4gXHQvKiBub3QgYSByZWFsIGJpdCwganVzdCB0byBjaGVjayB3ZSdyZSBub3Qgb3ZlcmZsb3dpbmcgdGhlIHNwYWNlICovXG4gXHRfX1JFUV9GX0xBU1RfQklULFxuQEAgLTY4OSw2ICs2OTEsOCBAQCBlbnVtIHtcbiBcdFJFUV9GX1NRRV9DT1BJRURcdD0gSU9fUkVRX0ZMQUcoUkVRX0ZfU1FFX0NPUElFRF9CSVQpLFxuIFx0LyogcmVxdWVzdCBtdXN0IGJlIGlvcG9sbGVkIHRvIGNvbXBsZXRpb24gKHNldCBpbiAtXHUwMDNlaXNzdWUoKSkgKi9cbiBcdFJFUV9GX0lPUE9MTFx0XHQ9IElPX1JFUV9GTEFHKFJFUV9GX0lPUE9MTF9CSVQpLFxuK1x0LyogdGhlcmUgaXMgYSBkbWEgbWFwIGF0dGFjaGVkIHRvIHJlcXVlc3QgdGhhdCBuZWVkcyB0byBiZSBkcm9wcGVkICovXG4rXHRSRVFfRl9EUk9QX0RNQUJVRlx0PSBJT19SRVFfRkxBRyhSRVFfRl9EUk9QX0RNQUJVRl9CSVQpLFxuIH07XG4gXG4gc3RydWN0IGlvX3R3X3JlcSB7XG5AQCAtODExLDYgKzgxNSw3IEBAIHN0cnVjdCBpb19raW9jYiB7XG4gXHQvKiBjdXN0b20gY3JlZGVudGlhbHMsIHZhbGlkIElGRiBSRVFfRl9DUkVEUyBpcyBzZXQgKi9cbiBcdGNvbnN0IHN0cnVjdCBjcmVkXHRcdCpjcmVkcztcbiBcdHN0cnVjdCBpb193cV93b3JrXHRcdHdvcms7XG4rXHRzdHJ1Y3QgZG1hX2J1Zl9pb19tYXBcdFx0KmRtYWJ1Zl9tYXA7XG4gXG4gXHRzdHJ1Y3QgaW9fYmlnX2NxZSB7XG4gXHRcdHU2NFx0XHRcdGV4dHJhMTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3Vpby5oIGIvaW5jbHVkZS9saW51eC91aW8uaFxuaW5kZXggZmUyZTk4NWQ3NGQyNC4uNjM4YzExMTZlOTEyZSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvdWlvLmhcbisrKyBiL2luY2x1ZGUvbGludXgvdWlvLmhcbkBAIC0xMiw2ICsxMiw3IEBAXG4gXG4gc3RydWN0IHBhZ2U7XG4gc3RydWN0IGZvbGlvX3F1ZXVlO1xuK3N0cnVjdCBkbWFfYnVmX2lvX21hcDtcbiBcbiB0eXBlZGVmIHVuc2lnbmVkIGludCBfX2JpdHdpc2UgaW92X2l0ZXJfZXh0cmFjdGlvbl90O1xuIFxuQEAgLTI5LDYgKzMwLDcgQEAgZW51bSBpdGVyX3R5cGUge1xuIFx0SVRFUl9GT0xJT1EsXG4gXHRJVEVSX1hBUlJBWSxcbiBcdElURVJfRElTQ0FSRCxcbitcdElURVJfRE1BQlVGX01BUCxcbiB9O1xuIFxuICNkZWZpbmUgSVRFUl9TT1VSQ0VcdDFcdC8vID09IFdSSVRFXG5AQCAtNzEsNiArNzMsNyBAQCBzdHJ1Y3QgaW92X2l0ZXIge1xuIFx0XHRcdFx0Y29uc3Qgc3RydWN0IGZvbGlvX3F1ZXVlICpmb2xpb3E7XG4gXHRcdFx0XHRzdHJ1Y3QgeGFycmF5ICp4YXJyYXk7XG4gXHRcdFx0XHR2b2lkIF9fdXNlciAqdWJ1ZjtcbitcdFx0XHRcdHN0cnVjdCBkbWFfYnVmX2lvX21hcCAqZG1hYnVmX21hcDtcbiBcdFx0XHR9O1xuIFx0XHRcdHNpemVfdCBjb3VudDtcbiBcdFx0fTtcbkBAIC0xNTUsNiArMTU4LDExIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpb3ZfaXRlcl9pc194YXJyYXkoY29uc3Qgc3RydWN0IGlvdl9pdGVyICppKVxuIFx0cmV0dXJuIGlvdl9pdGVyX3R5cGUoaSkgPT0gSVRFUl9YQVJSQVk7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBpb3ZfaXRlcl9pc19kbWFidWZfbWFwKGNvbnN0IHN0cnVjdCBpb3ZfaXRlciAqaSlcbit7XG4rXHRyZXR1cm4gaW92X2l0ZXJfdHlwZShpKSA9PSBJVEVSX0RNQUJVRl9NQVA7XG4rfVxuK1xuIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgY2hhciBpb3ZfaXRlcl9ydyhjb25zdCBzdHJ1Y3QgaW92X2l0ZXIgKmkpXG4ge1xuIFx0cmV0dXJuIGktXHUwMDNlZGF0YV9zb3VyY2UgPyBXUklURSA6IFJFQUQ7XG5AQCAtMzAwLDYgKzMwOCw5IEBAIHZvaWQgaW92X2l0ZXJfZm9saW9fcXVldWUoc3RydWN0IGlvdl9pdGVyICppLCB1bnNpZ25lZCBpbnQgZGlyZWN0aW9uLFxuIFx0XHRcdCAgdW5zaWduZWQgaW50IGZpcnN0X3Nsb3QsIHVuc2lnbmVkIGludCBvZmZzZXQsIHNpemVfdCBjb3VudCk7XG4gdm9pZCBpb3ZfaXRlcl94YXJyYXkoc3RydWN0IGlvdl9pdGVyICppLCB1bnNpZ25lZCBpbnQgZGlyZWN0aW9uLCBzdHJ1Y3QgeGFycmF5ICp4YXJyYXksXG4gXHRcdCAgICAgbG9mZl90IHN0YXJ0LCBzaXplX3QgY291bnQpO1xuK3ZvaWQgaW92X2l0ZXJfZG1hYnVmX21hcChzdHJ1Y3QgaW92X2l0ZXIgKmksIHVuc2lnbmVkIGludCBkaXJlY3Rpb24sXG4rXHRcdFx0c3RydWN0IGRtYV9idWZfaW9fbWFwICptYXAsXG4rXHRcdFx0bG9mZl90IG9mZiwgc2l6ZV90IGNvdW50KTtcbiBzc2l6ZV90IGlvdl9pdGVyX2dldF9wYWdlczIoc3RydWN0IGlvdl9pdGVyICppLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzLFxuIFx0XHRcdHNpemVfdCBtYXhzaXplLCB1bnNpZ25lZCBtYXhwYWdlcywgc2l6ZV90ICpzdGFydCk7XG4gc3NpemVfdCBpb3ZfaXRlcl9nZXRfcGFnZXNfYWxsb2MyKHN0cnVjdCBpb3ZfaXRlciAqaSwgc3RydWN0IHBhZ2UgKioqcGFnZXMsXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L2lvX3VyaW5nLmggYi9pbmNsdWRlL3VhcGkvbGludXgvaW9fdXJpbmcuaFxuaW5kZXggOTA5ZmI3YWVhNjM4ZS4uYzM5Mjk3ZThiZWI2ZiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9pb191cmluZy5oXG4rKysgYi9pbmNsdWRlL3VhcGkvbGludXgvaW9fdXJpbmcuaFxuQEAgLTc5MCwxMyArNzkwLDQyIEBAIHN0cnVjdCBpb191cmluZ19yc3JjX3VwZGF0ZSB7XG4gXG4gc3RydWN0IGlvX3VyaW5nX3JzcmNfdXBkYXRlMiB7XG4gXHRfX3UzMiBvZmZzZXQ7XG4tXHRfX3UzMiByZXN2O1xuK1x0X191MzIgZmxhZ3M7XG4gXHRfX2FsaWduZWRfdTY0IGRhdGE7XG4gXHRfX2FsaWduZWRfdTY0IHRhZ3M7XG4gXHRfX3UzMiBucjtcbiBcdF9fdTMyIHJlc3YyO1xuIH07XG4gXG4rLyogc3RydWN0IGlvX3VyaW5nX3JzcmNfdXBkYXRlMjo6ZmxhZ3MgKi9cbitlbnVtIGlvX3VyaW5nX3JzcmNfcmVnX2ZsYWdzIHtcbitcdC8qXG4rXHQgKiBVc2UgdGhlIGV4dGVuZGVkIGRlc2NyaXB0b3IgZm9ybWF0IGZvciBidWZmZXIgdXBkYXRlcyxcbitcdCAqIHNlZSBzdHJ1Y3QgaW9fdXJpbmdfcmVnYnVmX2Rlc2NcbitcdCAqL1xuK1x0SU9SSU5HX1JTUkNfVVBEQVRFX0VYVEVOREVEXHRcdD0gMVUgXHUwMDNjXHUwMDNjIDEsXG4rfTtcbitcbisvKiBCdWZmZXIgcmVnaXN0cmF0aW9uIHR5cGUsIHBhc3NlZCBpbiBzdHJ1Y3QgaW9fdXJpbmdfcmVnYnVmX2Rlc2M6OnR5cGUgKi9cbitlbnVtIGlvX3VyaW5nX3JlZ2J1Zl90eXBlIHtcbitcdElPX1JFR0JVRl9UWVBFX0VNUFRZLFxuK1x0SU9fUkVHQlVGX1RZUEVfVUFERFIsXG4rXHRJT19SRUdCVUZfVFlQRV9ETUFCVUYsXG4rXG4rXHRfX0lPX1JFR0JVRl9UWVBFX01BWCxcbit9O1xuK1xuK3N0cnVjdCBpb191cmluZ19yZWdidWZfZGVzYyB7XG4rXHRfX3UzMiB0eXBlOyAvKiBlbnVtIGlvX3VyaW5nX3JlZ2J1Zl90eXBlICovXG4rXHRfX3UzMiBmbGFncztcbitcdF9fdTY0IHNpemU7XG4rXHRfX3U2NCB1YWRkcjtcbitcbitcdF9fczMyIGRtYWJ1Zl9mZDtcbitcdF9fczMyIHRhcmdldF9mZDtcbitcdF9fdTY0IF9fcmVzdls2XTtcbit9O1xuK1xuIC8qIFNraXAgdXBkYXRpbmcgZmQgaW5kZXhlcyBzZXQgdG8gdGhpcyB2YWx1ZSBpbiB0aGUgZmQgdGFibGUgKi9cbiAjZGVmaW5lIElPUklOR19SRUdJU1RFUl9GSUxFU19TS0lQXHQoLTIpXG4gXG5kaWZmIC0tZ2l0IGEvaW9fdXJpbmcvaW9fdXJpbmcuYyBiL2lvX3VyaW5nL2lvX3VyaW5nLmNcbmluZGV4IDRjODNhOTRiNGJkYzMuLmQxZDc0OGI1YzVkY2EgMTAwNjQ0XG4tLS0gYS9pb191cmluZy9pb191cmluZy5jXG4rKysgYi9pb191cmluZy9pb191cmluZy5jXG5AQCAtMTA5LDcgKzEwOSw3IEBAXG4gXG4gI2RlZmluZSBJT19SRVFfQ0xFQU5fU0xPV19GTEFHUyAoUkVRX0ZfUkVGQ09VTlQgfCBJT19SRVFfTElOS19GTEFHUyB8IFxcXG4gXHRcdFx0XHQgUkVRX0ZfUkVJU1NVRSB8IFJFUV9GX1BPTExFRCB8IFxcXG4tXHRcdFx0XHQgSU9fUkVRX0NMRUFOX0ZMQUdTKVxuK1x0XHRcdFx0IElPX1JFUV9DTEVBTl9GTEFHUyB8IFJFUV9GX0RST1BfRE1BQlVGKVxuIFxuICNkZWZpbmUgSU9fVENUWF9SRUZTX0NBQ0hFX05SXHQoMVUgXHUwMDNjXHUwMDNjIDEwKVxuIFxuQEAgLTExMTQsNiArMTExNCw3IEBAIHN0YXRpYyB2b2lkIGlvX2ZyZWVfYmF0Y2hfbGlzdChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCxcbiBcdFx0XHRcdGlvX3F1ZXVlX25leHQocmVxKTtcbiBcdFx0XHRpZiAodW5saWtlbHkocmVxLVx1MDAzZWZsYWdzIFx1MDAyNiBJT19SRVFfQ0xFQU5fRkxBR1MpKVxuIFx0XHRcdFx0aW9fY2xlYW5fb3AocmVxKTtcbitcdFx0XHRpb19yZXFfZHJvcF9kbWFidWYocmVxKTtcbiBcdFx0fVxuIFx0XHRpb19wdXRfZmlsZShyZXEpO1xuIFx0XHRpb19yZXFfcHV0X3JzcmNfbm9kZXMocmVxKTtcbmRpZmYgLS1naXQgYS9pb191cmluZy9uZXQuYyBiL2lvX3VyaW5nL25ldC5jXG5pbmRleCBhNzRkMTVmN2I3ZDJiLi40MzljOTlhZDE4ODQxIDEwMDY0NFxuLS0tIGEvaW9fdXJpbmcvbmV0LmNcbisrKyBiL2lvX3VyaW5nL25ldC5jXG5AQCAtMTQ3MSw3ICsxNDcxLDcgQEAgc3RhdGljIGludCBpb19zZ19mcm9tX2l0ZXIoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0cmV0dXJuIHplcm9jb3B5X2ZpbGxfc2tiX2Zyb21faXRlcihza2IsIGZyb20sIGxlbmd0aCk7XG4gXG4gXHRiaS5iaV9zaXplID0gbWluKGZyb20tXHUwMDNlY291bnQsIGxlbmd0aCk7XG4tXHRiaS5iaV9idmVjX2RvbmUgPSBmcm9tLVx1MDAzZWlvdl9vZmZzZXQ7XG4rXHRiaS5iaV9vZmZzZXQgPSBmcm9tLVx1MDAzZWlvdl9vZmZzZXQ7XG4gXHRiaS5iaV9pZHggPSAwO1xuIFxuIFx0d2hpbGUgKGJpLmJpX3NpemUgXHUwMDI2XHUwMDI2IGZyYWcgXHUwMDNjIE1BWF9TS0JfRlJBR1MpIHtcbkBAIC0xNDkwLDcgKzE0OTAsNyBAQCBzdGF0aWMgaW50IGlvX3NnX2Zyb21faXRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0ZnJvbS1cdTAwM2VidmVjICs9IGJpLmJpX2lkeDtcbiBcdGZyb20tXHUwMDNlbnJfc2VncyAtPSBiaS5iaV9pZHg7XG4gXHRmcm9tLVx1MDAzZWNvdW50IC09IGNvcGllZDtcbi1cdGZyb20tXHUwMDNlaW92X29mZnNldCA9IGJpLmJpX2J2ZWNfZG9uZTtcbitcdGZyb20tXHUwMDNlaW92X29mZnNldCA9IGJpLmJpX29mZnNldDtcbiBcbiBcdHNrYi1cdTAwM2VkYXRhX2xlbiArPSBjb3BpZWQ7XG4gXHRza2ItXHUwMDNlbGVuICs9IGNvcGllZDtcbmRpZmYgLS1naXQgYS9pb191cmluZy9yc3JjLmMgYi9pb191cmluZy9yc3JjLmNcbmluZGV4IDhkMGYyZWUyNGUwYzIuLjUwNzRiMWU0YjA1MDUgMTAwNjQ0XG4tLS0gYS9pb191cmluZy9yc3JjLmNcbisrKyBiL2lvX3VyaW5nL3JzcmMuY1xuQEAgLTEwLDYgKzEwLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jb21wYXQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lvX3VyaW5nLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pb191cmluZy9jbWQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2RtYS1idWYtaW8uaFx1MDAzZVxuIFxuICNpbmNsdWRlIFx1MDAzY3VhcGkvbGludXgvaW9fdXJpbmcuaFx1MDAzZVxuIFxuQEAgLTI4LDcgKzI5LDcgQEAgc3RydWN0IGlvX3JzcmNfdXBkYXRlIHtcbiB9O1xuIFxuIHN0YXRpYyBzdHJ1Y3QgaW9fcnNyY19ub2RlICppb19zcWVfYnVmZmVyX3JlZ2lzdGVyKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxuLVx0XHRcdFx0XHRcdCAgIHN0cnVjdCBpb3ZlYyAqaW92KTtcbitcdFx0XHRcdFx0XHQgICBzdHJ1Y3QgaW9fdXJpbmdfcmVnYnVmX2Rlc2MgKmRlc2MpO1xuIFxuIHN0YXRpYyBpbnQgaHBhZ2VfYWNjdF9yZWYoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHN0cnVjdCBwYWdlICpocGFnZSxcbiBcdFx0XHQgIGJvb2wgKmFjY3RfbmV3KVxuQEAgLTgxLDYgKzgyLDE4IEBAIHN0YXRpYyBib29sIGhwYWdlX2FjY3RfdW5yZWYoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHN0cnVjdCBwYWdlICpocGFnZSlcbiBcbiAjZGVmaW5lIElPX0NBQ0hFRF9CVkVDU19TRUdTXHQzMlxuIFxuK3N0YXRpYyB2b2lkIGlvX2lvdl90b19yZWdidWZfZGVzYyhjb25zdCBzdHJ1Y3QgaW92ZWMgKmlvdixcbitcdFx0XHRcdCAgc3RydWN0IGlvX3VyaW5nX3JlZ2J1Zl9kZXNjICpkZXNjKVxuK3tcbitcdCpkZXNjID0gKHN0cnVjdCBpb191cmluZ19yZWdidWZfZGVzYykge1xuK1x0XHQudHlwZSA9IElPX1JFR0JVRl9UWVBFX1VBRERSLFxuK1x0XHQudWFkZHIgPSAodTY0KSh1aW50cHRyX3QpaW92LVx1MDAzZWlvdl9iYXNlLFxuK1x0XHQuc2l6ZSA9IGlvdi1cdTAwM2Vpb3ZfbGVuLFxuK1x0fTtcbitcdGlmICghZGVzYy1cdTAwM2V1YWRkcilcbitcdFx0ZGVzYy1cdTAwM2V0eXBlID0gSU9fUkVHQlVGX1RZUEVfRU1QVFk7XG4rfVxuK1xuIGludCBfX2lvX2FjY291bnRfbWVtKHN0cnVjdCB1c2VyX3N0cnVjdCAqdXNlciwgdW5zaWduZWQgbG9uZyBucl9wYWdlcylcbiB7XG4gXHR1bnNpZ25lZCBsb25nIHBhZ2VfbGltaXQsIGN1cl9wYWdlcywgbmV3X3BhZ2VzO1xuQEAgLTMwOSw2ICszMjIsOCBAQCBzdGF0aWMgaW50IF9faW9fc3FlX2ZpbGVzX3VwZGF0ZShzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCxcbiBcdFx0cmV0dXJuIC1FTlhJTztcbiBcdGlmICh1cC1cdTAwM2VvZmZzZXQgKyBucl9hcmdzIFx1MDAzZSBjdHgtXHUwMDNlZmlsZV90YWJsZS5kYXRhLm5yKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdGlmICh1cC1cdTAwM2VmbGFncylcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHRmb3IgKGRvbmUgPSAwOyBkb25lIFx1MDAzYyBucl9hcmdzOyBkb25lKyspIHtcbiBcdFx0dTY0IHRhZyA9IDA7XG5AQCAtMzY4LDkgKzM4Myw4IEBAIHN0YXRpYyBpbnQgX19pb19zcWVfYnVmZmVyc191cGRhdGUoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXG4gXHRcdFx0XHQgICBzdHJ1Y3QgaW9fdXJpbmdfcnNyY191cGRhdGUyICp1cCxcbiBcdFx0XHRcdCAgIHVuc2lnbmVkIGludCBucl9hcmdzKVxuIHtcbitcdGJvb2wgZXh0ZW5kZWQgPSB1cC1cdTAwM2VmbGFncyBcdTAwMjYgSU9SSU5HX1JTUkNfVVBEQVRFX0VYVEVOREVEO1xuIFx0dTY0IF9fdXNlciAqdGFncyA9IHU2NF90b191c2VyX3B0cih1cC1cdTAwM2V0YWdzKTtcbi1cdHN0cnVjdCBpb3ZlYyBmYXN0X2lvdiwgKmlvdjtcbi1cdHN0cnVjdCBpb3ZlYyBfX3VzZXIgKnV2ZWM7XG4gXHR1NjQgdXNlcl9kYXRhID0gdXAtXHUwMDNlZGF0YTtcbiBcdF9fdTMyIGRvbmU7XG4gXHRpbnQgaSwgZXJyO1xuQEAgLTM3OSwyNiArMzkzLDQ5IEBAIHN0YXRpYyBpbnQgX19pb19zcWVfYnVmZmVyc191cGRhdGUoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXG4gXHRcdHJldHVybiAtRU5YSU87XG4gXHRpZiAodXAtXHUwMDNlb2Zmc2V0ICsgbnJfYXJncyBcdTAwM2UgY3R4LVx1MDAzZWJ1Zl90YWJsZS5ucilcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRpZiAodXAtXHUwMDNlZmxhZ3MgXHUwMDI2IH5JT1JJTkdfUlNSQ19VUERBVEVfRVhURU5ERUQpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0Zm9yIChkb25lID0gMDsgZG9uZSBcdTAwM2MgbnJfYXJnczsgZG9uZSsrKSB7XG4rXHRcdHN0cnVjdCBpb191cmluZ19yZWdidWZfZGVzYyBkZXNjO1xuIFx0XHRzdHJ1Y3QgaW9fcnNyY19ub2RlICpub2RlO1xuIFx0XHR1NjQgdGFnID0gMDtcbiBcbi1cdFx0dXZlYyA9IHU2NF90b191c2VyX3B0cih1c2VyX2RhdGEpO1xuLVx0XHRpb3YgPSBpb3ZlY19mcm9tX3VzZXIodXZlYywgMSwgMSwgXHUwMDI2ZmFzdF9pb3YsIGlvX2lzX2NvbXBhdChjdHgpKTtcbi1cdFx0aWYgKElTX0VSUihpb3YpKSB7XG4tXHRcdFx0ZXJyID0gUFRSX0VSUihpb3YpO1xuLVx0XHRcdGJyZWFrO1xuLVx0XHR9XG4gXHRcdGlmICh0YWdzIFx1MDAyNlx1MDAyNiBjb3B5X2Zyb21fdXNlcihcdTAwMjZ0YWcsIFx1MDAyNnRhZ3NbZG9uZV0sIHNpemVvZih0YWcpKSkge1xuIFx0XHRcdGVyciA9IC1FRkFVTFQ7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdH1cbi1cdFx0bm9kZSA9IGlvX3NxZV9idWZmZXJfcmVnaXN0ZXIoY3R4LCBpb3YpO1xuK1xuK1x0XHRpZiAoZXh0ZW5kZWQpIHtcbitcdFx0XHRpZiAoY29weV9mcm9tX3VzZXIoXHUwMDI2ZGVzYywgdTY0X3RvX3VzZXJfcHRyKHVzZXJfZGF0YSksXG4rXHRcdFx0XHRcdCAgIHNpemVvZihkZXNjKSkpIHtcbitcdFx0XHRcdGVyciA9IC1FRkFVTFQ7XG4rXHRcdFx0XHRicmVhaztcbitcdFx0XHR9XG4rXHRcdFx0dXNlcl9kYXRhICs9IHNpemVvZihkZXNjKTtcbitcdFx0fSBlbHNlIHtcbitcdFx0XHRzdHJ1Y3QgaW92ZWMgX191c2VyICp1dmVjID0gdTY0X3RvX3VzZXJfcHRyKHVzZXJfZGF0YSk7XG4rXHRcdFx0c3RydWN0IGlvdmVjIGZhc3RfaW92LCAqaW92O1xuK1xuK1x0XHRcdGlmIChpb19pc19jb21wYXQoY3R4KSlcbitcdFx0XHRcdHVzZXJfZGF0YSArPSBzaXplb2Yoc3RydWN0IGNvbXBhdF9pb3ZlYyk7XG4rXHRcdFx0ZWxzZVxuK1x0XHRcdFx0dXNlcl9kYXRhICs9IHNpemVvZihzdHJ1Y3QgaW92ZWMpO1xuK1xuK1x0XHRcdGlvdiA9IGlvdmVjX2Zyb21fdXNlcih1dmVjLCAxLCAxLCBcdTAwMjZmYXN0X2lvdiwgaW9faXNfY29tcGF0KGN0eCkpO1xuK1x0XHRcdGlmIChJU19FUlIoaW92KSkge1xuK1x0XHRcdFx0ZXJyID0gUFRSX0VSUihpb3YpO1xuK1x0XHRcdFx0YnJlYWs7XG4rXHRcdFx0fVxuK1x0XHRcdGlvX2lvdl90b19yZWdidWZfZGVzYyhpb3YsIFx1MDAyNmRlc2MpO1xuK1x0XHR9XG4rXG4rXHRcdG5vZGUgPSBpb19zcWVfYnVmZmVyX3JlZ2lzdGVyKGN0eCwgXHUwMDI2ZGVzYyk7XG4gXHRcdGlmIChJU19FUlIobm9kZSkpIHtcbiBcdFx0XHRlcnIgPSBQVFJfRVJSKG5vZGUpO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHR9XG4rXG4gXHRcdGlmICh0YWcpIHtcbiBcdFx0XHRpZiAoIW5vZGUpIHtcbiBcdFx0XHRcdGVyciA9IC1FSU5WQUw7XG5AQCAtNDA5LDEwICs0NDYsNiBAQCBzdGF0aWMgaW50IF9faW9fc3FlX2J1ZmZlcnNfdXBkYXRlKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxuIFx0XHRpID0gYXJyYXlfaW5kZXhfbm9zcGVjKHVwLVx1MDAzZW9mZnNldCArIGRvbmUsIGN0eC1cdTAwM2VidWZfdGFibGUubnIpO1xuIFx0XHRpb19yZXNldF9yc3JjX25vZGUoY3R4LCBcdTAwMjZjdHgtXHUwMDNlYnVmX3RhYmxlLCBpKTtcbiBcdFx0Y3R4LVx1MDAzZWJ1Zl90YWJsZS5ub2Rlc1tpXSA9IG5vZGU7XG4tXHRcdGlmIChpb19pc19jb21wYXQoY3R4KSlcbi1cdFx0XHR1c2VyX2RhdGEgKz0gc2l6ZW9mKHN0cnVjdCBjb21wYXRfaW92ZWMpO1xuLVx0XHRlbHNlXG4tXHRcdFx0dXNlcl9kYXRhICs9IHNpemVvZihzdHJ1Y3QgaW92ZWMpO1xuIFx0fVxuIFx0cmV0dXJuIGRvbmUgPyBkb25lIDogZXJyO1xuIH1cbkBAIC00NDcsNyArNDgwLDcgQEAgaW50IGlvX3JlZ2lzdGVyX2ZpbGVzX3VwZGF0ZShzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgdm9pZCBfX3VzZXIgKmFyZyxcbiBcdG1lbXNldChcdTAwMjZ1cCwgMCwgc2l6ZW9mKHVwKSk7XG4gXHRpZiAoY29weV9mcm9tX3VzZXIoXHUwMDI2dXAsIGFyZywgc2l6ZW9mKHN0cnVjdCBpb191cmluZ19yc3JjX3VwZGF0ZSkpKVxuIFx0XHRyZXR1cm4gLUVGQVVMVDtcbi1cdGlmICh1cC5yZXN2IHx8IHVwLnJlc3YyKVxuK1x0aWYgKHVwLnJlc3YyKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdHJldHVybiBfX2lvX3JlZ2lzdGVyX3JzcmNfdXBkYXRlKGN0eCwgSU9SSU5HX1JTUkNfRklMRSwgXHUwMDI2dXAsIG5yX2FyZ3MpO1xuIH1cbkBAIC00NjEsNyArNDk0LDcgQEAgaW50IGlvX3JlZ2lzdGVyX3JzcmNfdXBkYXRlKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCB2b2lkIF9fdXNlciAqYXJnLFxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdGlmIChjb3B5X2Zyb21fdXNlcihcdTAwMjZ1cCwgYXJnLCBzaXplb2YodXApKSlcbiBcdFx0cmV0dXJuIC1FRkFVTFQ7XG4tXHRpZiAoIXVwLm5yIHx8IHVwLnJlc3YgfHwgdXAucmVzdjIpXG4rXHRpZiAoIXVwLm5yIHx8IHVwLnJlc3YyKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdHJldHVybiBfX2lvX3JlZ2lzdGVyX3JzcmNfdXBkYXRlKGN0eCwgdHlwZSwgXHUwMDI2dXAsIHVwLm5yKTtcbiB9XG5AQCAtNTYxLDEyICs1OTQsOSBAQCBpbnQgaW9fZmlsZXNfdXBkYXRlKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXG4gXHRzdHJ1Y3QgaW9fdXJpbmdfcnNyY191cGRhdGUyIHVwMjtcbiBcdGludCByZXQ7XG4gXG4rXHRtZW1zZXQoXHUwMDI2dXAyLCAwLCBzaXplb2YodXAyKSk7XG4gXHR1cDIub2Zmc2V0ID0gdXAtXHUwMDNlb2Zmc2V0O1xuIFx0dXAyLmRhdGEgPSB1cC1cdTAwM2Vhcmc7XG4tXHR1cDIubnIgPSAwO1xuLVx0dXAyLnRhZ3MgPSAwO1xuLVx0dXAyLnJlc3YgPSAwO1xuLVx0dXAyLnJlc3YyID0gMDtcbiBcbiBcdGlmICh1cC1cdTAwM2VvZmZzZXQgPT0gSU9SSU5HX0ZJTEVfSU5ERVhfQUxMT0MpIHtcbiBcdFx0cmV0ID0gaW9fZmlsZXNfdXBkYXRlX3dpdGhfaW5kZXhfYWxsb2MocmVxLCBpc3N1ZV9mbGFncyk7XG5AQCAtODUyLDI3ICs4ODIsMTI2IEBAIGJvb2wgaW9fY2hlY2tfY29hbGVzY2VfYnVmZmVyKHN0cnVjdCBwYWdlICoqcGFnZV9hcnJheSwgaW50IG5yX3BhZ2VzLFxuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuK3N0cnVjdCBpb19yZWdidWZfZG1hIHtcbitcdHN0cnVjdCBkbWFfYnVmX2lvX2N0eFx0XHRjdHg7XG4rXHRzdHJ1Y3QgZmlsZVx0XHRcdCp0YXJnZXRfZmlsZTtcbit9O1xuK1xuK3N0YXRpYyB2b2lkIGlvX3JlbGVhc2VfcmVnX2RtYWJ1Zih2b2lkICpwcml2KVxuK3tcbitcdHN0cnVjdCBpb19yZWdidWZfZG1hICpkYiA9IHByaXY7XG4rXG4rXHRmcHV0KGRiLVx1MDAzZXRhcmdldF9maWxlKTtcbitcdGRtYV9idWZfaW9fY3R4X3JlbGVhc2UoXHUwMDI2ZGItXHUwMDNlY3R4KTtcbit9XG4rXG4rc3RhdGljIHN0cnVjdCBpb19yc3JjX25vZGUgKmlvX3JlZ2lzdGVyX2RtYWJ1ZihzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCxcbitcdFx0XHRcdFx0XHRzdHJ1Y3QgaW9fdXJpbmdfcmVnYnVmX2Rlc2MgKmRlc2MpXG4re1xuK1x0c3RydWN0IGlvX3JzcmNfbm9kZSAqbm9kZSA9IE5VTEw7XG4rXHRzdHJ1Y3QgaW9fbWFwcGVkX3VidWYgKmltdSA9IE5VTEw7XG4rXHRzdHJ1Y3QgaW9fcmVnYnVmX2RtYSAqcmVnYnVmID0gTlVMTDtcbitcdHN0cnVjdCBmaWxlICp0YXJnZXRfZmlsZSA9IE5VTEw7XG4rXHRzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmID0gTlVMTDtcbitcdGludCByZXQ7XG4rXG4rXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0RNQV9TSEFSRURfQlVGRkVSKSlcbitcdFx0cmV0dXJuIEVSUl9QVFIoLUVPUE5PVFNVUFApO1xuK1x0aWYgKGN0eC1cdTAwM2VmbGFncyBcdTAwMjYgSU9SSU5HX1NFVFVQX0lPUE9MTClcbitcdFx0cmV0dXJuIEVSUl9QVFIoLUVPUE5PVFNVUFApO1xuK1x0aWYgKGRlc2MtXHUwMDNldWFkZHIgfHwgZGVzYy1cdTAwM2VzaXplKVxuK1x0XHRyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTtcbitcbitcdHJldCA9IC1FTk9NRU07XG4rXHRub2RlID0gaW9fcnNyY19ub2RlX2FsbG9jKGN0eCwgSU9SSU5HX1JTUkNfQlVGRkVSKTtcbitcdGlmICghbm9kZSlcbitcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4rXHRpbXUgPSBpb19hbGxvY19pbXUoY3R4LCAwKTtcbitcdGlmICghaW11KVxuK1x0XHRnb3RvIGVycjtcbitcdHJlZ2J1ZiA9IGt6YWxsb2Moc2l6ZW9mKCpyZWdidWYpLCBHRlBfS0VSTkVMKTtcbitcdGlmICghcmVnYnVmKVxuK1x0XHRnb3RvIGVycjtcbitcbitcdHJldCA9IC1FQkFERjtcbitcdHRhcmdldF9maWxlID0gZmdldChkZXNjLVx1MDAzZXRhcmdldF9mZCk7XG4rXHRpZiAoIXRhcmdldF9maWxlKVxuK1x0XHRnb3RvIGVycjtcbitcbitcdGRtYWJ1ZiA9IGRtYV9idWZfZ2V0KGRlc2MtXHUwMDNlZG1hYnVmX2ZkKTtcbitcdGlmIChJU19FUlIoZG1hYnVmKSkge1xuK1x0XHRyZXQgPSBQVFJfRVJSKGRtYWJ1Zik7XG4rXHRcdGRtYWJ1ZiA9IE5VTEw7XG4rXHRcdGdvdG8gZXJyO1xuK1x0fVxuK1x0aWYgKGRtYWJ1Zi1cdTAwM2VzaXplIFx1MDAzZSBTWl8xRykge1xuK1x0XHRyZXQgPSAtRUlOVkFMO1xuK1x0XHRnb3RvIGVycjtcbitcdH1cbitcbitcdHJldCA9IGRtYV9idWZfaW9fY3R4X2NyZWF0ZSh0YXJnZXRfZmlsZSwgXHUwMDI2cmVnYnVmLVx1MDAzZWN0eCwgZG1hYnVmLFxuK1x0XHRcdFx0ICAgIERNQV9CSURJUkVDVElPTkFMKTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gZXJyO1xuK1xuK1x0cmVnYnVmLVx1MDAzZXRhcmdldF9maWxlID0gdGFyZ2V0X2ZpbGU7XG4rXHRpbXUtXHUwMDNlbnJfYnZlY3MgPSAwO1xuK1x0aW11LVx1MDAzZXVidWYgPSAwO1xuK1x0aW11LVx1MDAzZWxlbiA9IGRtYWJ1Zi1cdTAwM2VzaXplO1xuK1x0aW11LVx1MDAzZWZvbGlvX3NoaWZ0ID0gMDtcbitcdGltdS1cdTAwM2VyZWxlYXNlID0gaW9fcmVsZWFzZV9yZWdfZG1hYnVmO1xuK1x0aW11LVx1MDAzZXByaXYgPSByZWdidWY7XG4rXHRpbXUtXHUwMDNlZmxhZ3MgPSBJT19SRUdCVUZfRl9ETUFCVUY7XG4rXHRpbXUtXHUwMDNlZGlyID0gSU9fSU1VX0RFU1QgfCBJT19JTVVfU09VUkNFO1xuK1x0cmVmY291bnRfc2V0KFx1MDAyNmltdS1cdTAwM2VyZWZzLCAxKTtcbitcdG5vZGUtXHUwMDNlYnVmID0gaW11O1xuK1x0ZG1hX2J1Zl9wdXQoZG1hYnVmKTtcbitcdHJldHVybiBub2RlO1xuK2VycjpcbitcdGtmcmVlKHJlZ2J1Zik7XG4rXHRpZiAoaW11KVxuK1x0XHRpb19mcmVlX2ltdShjdHgsIGltdSk7XG4rXHRpZiAobm9kZSlcbitcdFx0aW9fY2FjaGVfZnJlZShcdTAwMjZjdHgtXHUwMDNlbm9kZV9jYWNoZSwgbm9kZSk7XG4rXHRpZiAodGFyZ2V0X2ZpbGUpXG4rXHRcdGZwdXQodGFyZ2V0X2ZpbGUpO1xuK1x0aWYgKGRtYWJ1ZilcbitcdFx0ZG1hX2J1Zl9wdXQoZG1hYnVmKTtcbitcdHJldHVybiBFUlJfUFRSKHJldCk7XG4rfVxuK1xuIHN0YXRpYyBzdHJ1Y3QgaW9fcnNyY19ub2RlICppb19zcWVfYnVmZmVyX3JlZ2lzdGVyKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxuLVx0XHRcdFx0XHRcdCAgIHN0cnVjdCBpb3ZlYyAqaW92KVxuK1x0XHRcdFx0XHRcdCAgIHN0cnVjdCBpb191cmluZ19yZWdidWZfZGVzYyAqZGVzYylcbiB7XG4rXHR1bnNpZ25lZCBsb25nIHVhZGRyID0gKHVuc2lnbmVkIGxvbmcpZGVzYy1cdTAwM2V1YWRkcjtcbitcdHNpemVfdCBzaXplID0gZGVzYy1cdTAwM2VzaXplO1xuIFx0c3RydWN0IGlvX21hcHBlZF91YnVmICppbXUgPSBOVUxMO1xuIFx0c3RydWN0IHBhZ2UgKipwYWdlcyA9IE5VTEw7XG4gXHRzdHJ1Y3QgaW9fcnNyY19ub2RlICpub2RlO1xuIFx0dW5zaWduZWQgbG9uZyBvZmY7XG4tXHRzaXplX3Qgc2l6ZTtcbiBcdGludCByZXQsIG5yX3BhZ2VzLCBpO1xuIFx0c3RydWN0IGlvX2ltdV9mb2xpb19kYXRhIGRhdGE7XG4gXHRib29sIGNvYWxlc2NlZCA9IGZhbHNlO1xuIFxuLVx0aWYgKCFpb3YtXHUwMDNlaW92X2Jhc2UpIHtcbi1cdFx0aWYgKGlvdi1cdTAwM2Vpb3ZfbGVuKVxuK1x0aWYgKGRlc2MtXHUwMDNldHlwZSBcdTAwM2U9IF9fSU9fUkVHQlVGX1RZUEVfTUFYKVxuK1x0XHRyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTtcbitcdGlmICghbWVtX2lzX3plcm8oXHUwMDI2ZGVzYy1cdTAwM2VfX3Jlc3YsIHNpemVvZihkZXNjLVx1MDAzZV9fcmVzdikpIHx8IGRlc2MtXHUwMDNlZmxhZ3MpXG4rXHRcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xuK1xuK1x0aWYgKGRlc2MtXHUwMDNldHlwZSA9PSBJT19SRUdCVUZfVFlQRV9ETUFCVUYpXG4rXHRcdHJldHVybiBpb19yZWdpc3Rlcl9kbWFidWYoY3R4LCBkZXNjKTtcbitcbitcdGlmIChkZXNjLVx1MDAzZWRtYWJ1Zl9mZCB8fCBkZXNjLVx1MDAzZXRhcmdldF9mZClcbitcdFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XG4rXG4rXHRpZiAoZGVzYy1cdTAwM2V0eXBlID09IElPX1JFR0JVRl9UWVBFX0VNUFRZKSB7XG4rXHRcdGlmICh1YWRkciB8fCBzaXplKVxuIFx0XHRcdHJldHVybiBFUlJfUFRSKC1FRkFVTFQpO1xuIFx0XHQvKiByZW1vdmUgdGhlIGJ1ZmZlciB3aXRob3V0IGluc3RhbGxpbmcgYSBuZXcgb25lICovXG4gXHRcdHJldHVybiBOVUxMO1xuIFx0fVxuIFxuLVx0cmV0ID0gaW9fdmFsaWRhdGVfdXNlcl9idWZfcmFuZ2UoKHVuc2lnbmVkIGxvbmcpaW92LVx1MDAzZWlvdl9iYXNlLFxuLVx0XHRcdFx0XHQgaW92LVx1MDAzZWlvdl9sZW4pO1xuK1x0cmV0ID0gaW9fdmFsaWRhdGVfdXNlcl9idWZfcmFuZ2UodWFkZHIsIHNpemUpO1xuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIEVSUl9QVFIocmV0KTtcbiBcbkBAIC04ODEsOCArMTAxMCw3IEBAIHN0YXRpYyBzdHJ1Y3QgaW9fcnNyY19ub2RlICppb19zcWVfYnVmZmVyX3JlZ2lzdGVyKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxuIFx0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbiBcbiBcdHJldCA9IC1FTk9NRU07XG4tXHRwYWdlcyA9IGlvX3Bpbl9wYWdlcygodW5zaWduZWQgbG9uZykgaW92LVx1MDAzZWlvdl9iYXNlLCBpb3YtXHUwMDNlaW92X2xlbixcbi1cdFx0XHRcdFx1MDAyNm5yX3BhZ2VzKTtcbitcdHBhZ2VzID0gaW9fcGluX3BhZ2VzKHVhZGRyLCBzaXplLCBcdTAwMjZucl9wYWdlcyk7XG4gXHRpZiAoSVNfRVJSKHBhZ2VzKSkge1xuIFx0XHRyZXQgPSBQVFJfRVJSKHBhZ2VzKTtcbiBcdFx0cGFnZXMgPSBOVUxMO1xuQEAgLTkwNCwxMCArMTAzMiw5IEBAIHN0YXRpYyBzdHJ1Y3QgaW9fcnNyY19ub2RlICppb19zcWVfYnVmZmVyX3JlZ2lzdGVyKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxuIFx0aWYgKHJldClcbiBcdFx0Z290byBkb25lO1xuIFxuLVx0c2l6ZSA9IGlvdi1cdTAwM2Vpb3ZfbGVuO1xuIFx0Lyogc3RvcmUgb3JpZ2luYWwgYWRkcmVzcyBmb3IgbGF0ZXIgdmVyaWZpY2F0aW9uICovXG4tXHRpbXUtXHUwMDNldWJ1ZiA9ICh1bnNpZ25lZCBsb25nKSBpb3YtXHUwMDNlaW92X2Jhc2U7XG4tXHRpbXUtXHUwMDNlbGVuID0gaW92LVx1MDAzZWlvdl9sZW47XG4rXHRpbXUtXHUwMDNldWJ1ZiA9IHVhZGRyO1xuK1x0aW11LVx1MDAzZWxlbiA9IHNpemU7XG4gXHRpbXUtXHUwMDNlZm9saW9fc2hpZnQgPSBQQUdFX1NISUZUO1xuIFx0aW11LVx1MDAzZXJlbGVhc2UgPSBpb19yZWxlYXNlX3VidWY7XG4gXHRpbXUtXHUwMDNlcHJpdiA9IGltdTtcbkBAIC05MTcsNyArMTA0NCw3IEBAIHN0YXRpYyBzdHJ1Y3QgaW9fcnNyY19ub2RlICppb19zcWVfYnVmZmVyX3JlZ2lzdGVyKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxuIFx0XHRpbXUtXHUwMDNlZm9saW9fc2hpZnQgPSBkYXRhLmZvbGlvX3NoaWZ0O1xuIFx0cmVmY291bnRfc2V0KFx1MDAyNmltdS1cdTAwM2VyZWZzLCAxKTtcbiBcbi1cdG9mZiA9ICh1bnNpZ25lZCBsb25nKWlvdi1cdTAwM2Vpb3ZfYmFzZSBcdTAwMjYgflBBR0VfTUFTSztcbitcdG9mZiA9IHVhZGRyIFx1MDAyNiB+UEFHRV9NQVNLO1xuIFx0aWYgKGNvYWxlc2NlZClcbiBcdFx0b2ZmICs9IGRhdGEuZmlyc3RfZm9saW9fcGFnZV9pZHggXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQ7XG4gXG5AQCAtOTY5LDYgKzEwOTYsNyBAQCBpbnQgaW9fc3FlX2J1ZmZlcnNfcmVnaXN0ZXIoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHZvaWQgX191c2VyICphcmcsXG4gXHRcdG1lbXNldChpb3YsIDAsIHNpemVvZigqaW92KSk7XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9hcmdzOyBpKyspIHtcbitcdFx0c3RydWN0IGlvX3VyaW5nX3JlZ2J1Zl9kZXNjIGRlc2M7XG4gXHRcdHN0cnVjdCBpb19yc3JjX25vZGUgKm5vZGU7XG4gXHRcdHU2NCB0YWcgPSAwO1xuIFxuQEAgLTk5Miw3ICsxMTIwLDggQEAgaW50IGlvX3NxZV9idWZmZXJzX3JlZ2lzdGVyKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCB2b2lkIF9fdXNlciAqYXJnLFxuIFx0XHRcdH1cbiBcdFx0fVxuIFxuLVx0XHRub2RlID0gaW9fc3FlX2J1ZmZlcl9yZWdpc3RlcihjdHgsIGlvdik7XG4rXHRcdGlvX2lvdl90b19yZWdidWZfZGVzYyhpb3YsIFx1MDAyNmRlc2MpO1xuK1x0XHRub2RlID0gaW9fc3FlX2J1ZmZlcl9yZWdpc3RlcihjdHgsIFx1MDAyNmRlc2MpO1xuIFx0XHRpZiAoSVNfRVJSKG5vZGUpKSB7XG4gXHRcdFx0cmV0ID0gUFRSX0VSUihub2RlKTtcbiBcdFx0XHRicmVhaztcbkBAIC0xMTM2LDkgKzEyNjUsNjQgQEAgc3RhdGljIGludCBpb19pbXBvcnRfa2J1ZihpbnQgZGRpciwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbnQgaW9faW1wb3J0X2ZpeGVkKGludCBkZGlyLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG4rdm9pZCBpb19kcm9wX2RtYWJ1Zl9ub2RlKHN0cnVjdCBpb19raW9jYiAqcmVxKVxuK3tcbitcdHN0cnVjdCBpb19tYXBwZWRfdWJ1ZiAqaW11O1xuK1xuK1x0aWYgKCFJU19FTkFCTEVEKENPTkZJR19ETUFfU0hBUkVEX0JVRkZFUikpXG4rXHRcdHJldHVybjtcbitcdGlmIChXQVJOX09OX09OQ0UocmVxLVx1MDAzZWJ1Zl9ub2RlLVx1MDAzZXR5cGUgIT0gSU9SSU5HX1JTUkNfQlVGRkVSKSlcbitcdFx0cmV0dXJuO1xuK1x0aW11ID0gcmVxLVx1MDAzZWJ1Zl9ub2RlLVx1MDAzZWJ1ZjtcbitcdGlmIChXQVJOX09OX09OQ0UoIShpbXUtXHUwMDNlZmxhZ3MgXHUwMDI2IElPX1JFR0JVRl9GX0RNQUJVRikpKVxuK1x0XHRyZXR1cm47XG4rXHRkbWFfYnVmX2lvX21hcF9kcm9wKHJlcS1cdTAwM2VkbWFidWZfbWFwKTtcbitcdHJlcS1cdTAwM2VmbGFncyBcdTAwMjY9IH5SRVFfRl9EUk9QX0RNQUJVRjtcbit9XG4rXG4rc3RhdGljIGludCBpb19pbXBvcnRfZG1hYnVmKHN0cnVjdCBpb19raW9jYiAqcmVxLFxuK1x0XHRcdCAgIGludCBkZGlyLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG4rXHRcdFx0ICAgc3RydWN0IGlvX21hcHBlZF91YnVmICppbXUsXG4rXHRcdFx0ICAgc2l6ZV90IGxlbiwgc2l6ZV90IG9mZnNldCxcbitcdFx0XHQgICB1bnNpZ25lZCBpc3N1ZV9mbGFncylcbit7XG4rXHRzdHJ1Y3QgaW9fcmVnYnVmX2RtYSAqZGIgPSBpbXUtXHUwMDNlcHJpdjtcbitcdHN0cnVjdCBkbWFfYnVmX2lvX21hcCAqbWFwO1xuK1xuK1x0aWYgKCFJU19FTkFCTEVEKENPTkZJR19ETUFfU0hBUkVEX0JVRkZFUikpXG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdGlmICghbGVuKVxuK1x0XHRyZXR1cm4gLUVGQVVMVDtcbitcdGlmIChyZXEtXHUwMDNlZmlsZSAhPSBkYi1cdTAwM2V0YXJnZXRfZmlsZSlcbitcdFx0cmV0dXJuIC1FQkFERjtcbitcbitcdGlmIChyZXEtXHUwMDNlZmxhZ3MgXHUwMDI2IFJFUV9GX0RST1BfRE1BQlVGKSB7XG4rXHRcdG1hcCA9IHJlcS1cdTAwM2VkbWFidWZfbWFwO1xuK1x0XHRnb3RvIGluaXRfaXRlcjtcbitcdH1cbitcbitcdG1hcCA9IGRtYV9idWZfaW9fZ2V0X21hcChcdTAwMjZkYi1cdTAwM2VjdHgpO1xuK1x0aWYgKHVubGlrZWx5KCFtYXApKSB7XG4rXHRcdGlmICghKGlzc3VlX2ZsYWdzIFx1MDAyNiBJT19VUklOR19GX0lPV1EpKVxuK1x0XHRcdHJldHVybiAtRUFHQUlOO1xuK1x0XHRtYXAgPSBkbWFfYnVmX2lvX2NyZWF0ZV9tYXAoXHUwMDI2ZGItXHUwMDNlY3R4KTtcbitcdFx0aWYgKElTX0VSUihtYXApKVxuK1x0XHRcdHJldHVybiBQVFJfRVJSKG1hcCk7XG4rXHR9XG4rXG4rXHRyZXEtXHUwMDNlZG1hYnVmX21hcCA9IG1hcDtcbitcdHJlcS1cdTAwM2VmbGFncyB8PSBSRVFfRl9EUk9QX0RNQUJVRjtcbitpbml0X2l0ZXI6XG4rXHRpb3ZfaXRlcl9kbWFidWZfbWFwKGl0ZXIsIGRkaXIsIG1hcCwgb2Zmc2V0LCBsZW4pO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgaW9faW1wb3J0X2ZpeGVkKHN0cnVjdCBpb19raW9jYiAqcmVxLFxuK1x0XHRcdCAgIGludCBkZGlyLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG4gXHRcdFx0ICAgc3RydWN0IGlvX21hcHBlZF91YnVmICppbXUsXG4tXHRcdFx0ICAgdTY0IGJ1Zl9hZGRyLCBzaXplX3QgbGVuKVxuK1x0XHRcdCAgIHU2NCBidWZfYWRkciwgc2l6ZV90IGxlbixcbitcdFx0XHQgICB1bnNpZ25lZCBpc3N1ZV9mbGFncyxcbitcdFx0XHQgICB1bnNpZ25lZCBpbXBvcnRfZmxhZ3MpXG4ge1xuIFx0Y29uc3Qgc3RydWN0IGJpb192ZWMgKmJ2ZWM7XG4gXHRzaXplX3QgZm9saW9fbWFzaztcbkBAIC0xMTU4LDYgKzEzNDIsMTIgQEAgc3RhdGljIGludCBpb19pbXBvcnRfZml4ZWQoaW50IGRkaXIsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbiBcbiBcdG9mZnNldCA9IGJ1Zl9hZGRyIC0gaW11LVx1MDAzZXVidWY7XG4gXG4rXHRpZiAoaW11LVx1MDAzZWZsYWdzIFx1MDAyNiBJT19SRUdCVUZfRl9ETUFCVUYpIHtcbitcdFx0aWYgKCEoaW1wb3J0X2ZsYWdzIFx1MDAyNiBJT19SRUdCVUZfSU1QT1JUX0FMTE9XX0RNQUJVRikpXG4rXHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4rXHRcdHJldHVybiBpb19pbXBvcnRfZG1hYnVmKHJlcSwgZGRpciwgaXRlciwgaW11LCBsZW4sIG9mZnNldCxcbitcdFx0XHRcdFx0aXNzdWVfZmxhZ3MpO1xuK1x0fVxuIFx0aWYgKGltdS1cdTAwM2VmbGFncyBcdTAwMjYgSU9fUkVHQlVGX0ZfS0JVRilcbiBcdFx0cmV0dXJuIGlvX2ltcG9ydF9rYnVmKGRkaXIsIGl0ZXIsIGltdSwgbGVuLCBvZmZzZXQpO1xuIFxuQEAgLTEyMTEsMTYgKzE0MDEsMTcgQEAgaW5saW5lIHN0cnVjdCBpb19yc3JjX25vZGUgKmlvX2ZpbmRfYnVmX25vZGUoc3RydWN0IGlvX2tpb2NiICpyZXEsXG4gXHRyZXR1cm4gTlVMTDtcbiB9XG4gXG4taW50IGlvX2ltcG9ydF9yZWdfYnVmKHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG4raW50IF9faW9faW1wb3J0X3JlZ19idWYoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbiBcdFx0XHR1NjQgYnVmX2FkZHIsIHNpemVfdCBsZW4sIGludCBkZGlyLFxuLVx0XHRcdHVuc2lnbmVkIGlzc3VlX2ZsYWdzKVxuK1x0XHRcdHVuc2lnbmVkIGlzc3VlX2ZsYWdzLCB1bnNpZ25lZCBpbXBvcnRfZmxhZ3MpXG4ge1xuIFx0c3RydWN0IGlvX3JzcmNfbm9kZSAqbm9kZTtcbiBcbiBcdG5vZGUgPSBpb19maW5kX2J1Zl9ub2RlKHJlcSwgaXNzdWVfZmxhZ3MpO1xuIFx0aWYgKCFub2RlKVxuIFx0XHRyZXR1cm4gLUVGQVVMVDtcbi1cdHJldHVybiBpb19pbXBvcnRfZml4ZWQoZGRpciwgaXRlciwgbm9kZS1cdTAwM2VidWYsIGJ1Zl9hZGRyLCBsZW4pO1xuK1x0cmV0dXJuIGlvX2ltcG9ydF9maXhlZChyZXEsIGRkaXIsIGl0ZXIsIG5vZGUtXHUwMDNlYnVmLCBidWZfYWRkciwgbGVuLFxuK1x0XHRcdFx0aXNzdWVfZmxhZ3MsIGltcG9ydF9mbGFncyk7XG4gfVxuIFxuIHN0YXRpYyBpbnQgaW9fYnVmZmVyX2FjY3RfY2xvbmVkX2hwYWdlcyhzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCxcbkBAIC0xMzQ3LDYgKzE1MzgsMTEgQEAgc3RhdGljIGludCBpb19jbG9uZV9idWZmZXJzKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBzdHJ1Y3QgaW9fcmluZ19jdHggKnNyY19jdHhcbiBcdFx0aWYgKCFzcmNfbm9kZSkge1xuIFx0XHRcdGRzdF9ub2RlID0gTlVMTDtcbiBcdFx0fSBlbHNlIHtcbitcdFx0XHRpZiAoc3JjX25vZGUtXHUwMDNlYnVmLVx1MDAzZWZsYWdzIFx1MDAyNiBJT19SRUdCVUZfRl9VTkNMT05FQUJMRSkge1xuK1x0XHRcdFx0aW9fcnNyY19kYXRhX2ZyZWUoY3R4LCBcdTAwMjZkYXRhKTtcbitcdFx0XHRcdHJldHVybiAtRU5PTUVNO1xuK1x0XHRcdH1cbitcbiBcdFx0XHRkc3Rfbm9kZSA9IGlvX3JzcmNfbm9kZV9hbGxvYyhjdHgsIElPUklOR19SU1JDX0JVRkZFUik7XG4gXHRcdFx0aWYgKCFkc3Rfbm9kZSkge1xuIFx0XHRcdFx0aW9fcnNyY19kYXRhX2ZyZWUoY3R4LCBcdTAwMjZkYXRhKTtcbkBAIC0xNjE3LDkgKzE4MTMsOSBAQCBzdGF0aWMgaW50IGlvX2tlcm5fYnZlY19zaXplKHN0cnVjdCBpb3ZlYyAqaW92LCB1bnNpZ25lZCBucl9pb3ZzLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLWludCBpb19pbXBvcnRfcmVnX3ZlYyhpbnQgZGRpciwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuK2ludCBfX2lvX2ltcG9ydF9yZWdfdmVjKGludCBkZGlyLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG4gXHRcdFx0c3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBpb3VfdmVjICp2ZWMsXG4tXHRcdFx0dW5zaWduZWQgbnJfaW92cywgdW5zaWduZWQgaXNzdWVfZmxhZ3MpXG4rXHRcdFx0dW5zaWduZWQgbnJfaW92cywgdW5zaWduZWQgaXNzdWVfZmxhZ3MsIHVuc2lnbmVkIGltcG9ydF9mbGFncylcbiB7XG4gXHRzdHJ1Y3QgaW9fcnNyY19ub2RlICpub2RlO1xuIFx0c3RydWN0IGlvX21hcHBlZF91YnVmICppbXU7XG5AQCAtMTYzNyw3ICsxODMzLDkgQEAgaW50IGlvX2ltcG9ydF9yZWdfdmVjKGludCBkZGlyLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG4gXHRpb3ZlY19vZmYgPSB2ZWMtXHUwMDNlbnIgLSBucl9pb3ZzO1xuIFx0aW92ID0gdmVjLVx1MDAzZWlvdmVjICsgaW92ZWNfb2ZmO1xuIFxuLVx0aWYgKGltdS1cdTAwM2VmbGFncyBcdTAwMjYgSU9fUkVHQlVGX0ZfS0JVRikge1xuK1x0aWYgKGltdS1cdTAwM2VmbGFncyBcdTAwMjYgSU9fUkVHQlVGX0ZfRE1BQlVGKSB7XG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdH0gZWxzZSBpZiAoaW11LVx1MDAzZWZsYWdzIFx1MDAyNiBJT19SRUdCVUZfRl9LQlVGKSB7XG4gXHRcdGludCByZXQgPSBpb19rZXJuX2J2ZWNfc2l6ZShpb3YsIG5yX2lvdnMsIGltdSwgXHUwMDI2bnJfc2Vncyk7XG4gXG4gXHRcdGlmICh1bmxpa2VseShyZXQpKVxuZGlmZiAtLWdpdCBhL2lvX3VyaW5nL3JzcmMuaCBiL2lvX3VyaW5nL3JzcmMuaFxuaW5kZXggOThhZThlZjUxMDA5ZC4uM2NiOWI1N2YxNTliNiAxMDA2NDRcbi0tLSBhL2lvX3VyaW5nL3JzcmMuaFxuKysrIGIvaW9fdXJpbmcvcnNyYy5oXG5AQCAtMjksNyArMjksMTMgQEAgZW51bSB7XG4gfTtcbiBcbiBlbnVtIHtcbi1cdElPX1JFR0JVRl9GX0tCVUZcdFx0PSAxLFxuK1x0SU9fUkVHQlVGX0ZfS0JVRlx0XHQ9IDEgXHUwMDNjXHUwMDNjIDAsXG4rXHRJT19SRUdCVUZfRl9VTkNMT05FQUJMRVx0XHQ9IDEgXHUwMDNjXHUwMDNjIDEsXG4rXHRJT19SRUdCVUZfRl9ETUFCVUZcdFx0PSAxIFx1MDAzY1x1MDAzYyAzLFxuK307XG4rXG4rZW51bSB7XG4rXHRJT19SRUdCVUZfSU1QT1JUX0FMTE9XX0RNQUJVRlx0XHQ9IDEgXHUwMDNjXHUwMDNjIDEsXG4gfTtcbiBcbiBzdHJ1Y3QgaW9fbWFwcGVkX3VidWYge1xuQEAgLTY0LDEyICs3MCwyOCBAQCBpbnQgaW9fcnNyY19kYXRhX2FsbG9jKHN0cnVjdCBpb19yc3JjX2RhdGEgKmRhdGEsIHVuc2lnbmVkIG5yKTtcbiBcbiBzdHJ1Y3QgaW9fcnNyY19ub2RlICppb19maW5kX2J1Zl9ub2RlKHN0cnVjdCBpb19raW9jYiAqcmVxLFxuIFx0XHRcdFx0ICAgICAgdW5zaWduZWQgaXNzdWVfZmxhZ3MpO1xuLWludCBpb19pbXBvcnRfcmVnX2J1ZihzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuK2ludCBfX2lvX2ltcG9ydF9yZWdfYnVmKHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG4gXHRcdFx0dTY0IGJ1Zl9hZGRyLCBzaXplX3QgbGVuLCBpbnQgZGRpcixcbi1cdFx0XHR1bnNpZ25lZCBpc3N1ZV9mbGFncyk7XG4taW50IGlvX2ltcG9ydF9yZWdfdmVjKGludCBkZGlyLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG4rXHRcdFx0dW5zaWduZWQgaXNzdWVfZmxhZ3MsIHVuc2lnbmVkIGltcG9ydF9mbGFncyk7XG4raW50IF9faW9faW1wb3J0X3JlZ192ZWMoaW50IGRkaXIsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbiBcdFx0XHRzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGlvdV92ZWMgKnZlYyxcbi1cdFx0XHR1bnNpZ25lZCBucl9pb3ZzLCB1bnNpZ25lZCBpc3N1ZV9mbGFncyk7XG4rXHRcdFx0dW5zaWduZWQgbnJfaW92cywgdW5zaWduZWQgaXNzdWVfZmxhZ3MsXG4rXHRcdFx0dW5zaWduZWQgaW1wb3J0X2ZsYWdzKTtcbitcbitzdGF0aWMgaW5saW5lIGludCBpb19pbXBvcnRfcmVnX2J1ZihzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuK1x0XHRcdFx0ICAgIHU2NCBidWZfYWRkciwgc2l6ZV90IGxlbiwgaW50IGRkaXIsXG4rXHRcdFx0XHQgICAgdW5zaWduZWQgaXNzdWVfZmxhZ3MpXG4re1xuK1x0cmV0dXJuIF9faW9faW1wb3J0X3JlZ19idWYocmVxLCBpdGVyLCBidWZfYWRkciwgbGVuLCBkZGlyLCBpc3N1ZV9mbGFncywgMCk7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgaW50IGlvX2ltcG9ydF9yZWdfdmVjKGludCBkZGlyLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG4rXHRcdFx0XHQgICAgc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBpb3VfdmVjICp2ZWMsXG4rXHRcdFx0XHQgICAgdW5zaWduZWQgbnJfaW92cywgdW5zaWduZWQgaXNzdWVfZmxhZ3MpXG4re1xuK1x0cmV0dXJuIF9faW9faW1wb3J0X3JlZ192ZWMoZGRpciwgaXRlciwgcmVxLCB2ZWMsIG5yX2lvdnMsIGlzc3VlX2ZsYWdzLCAwKTtcbit9XG4rXG4gaW50IGlvX3ByZXBfcmVnX2lvdmVjKHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgaW91X3ZlYyAqaXYsXG4gXHRcdFx0Y29uc3Qgc3RydWN0IGlvdmVjIF9fdXNlciAqdXZlYywgc2l6ZV90IHV2ZWNfc2Vncyk7XG4gXG5AQCAtMTU2LDQgKzE3OCwxNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgaW9fYWxsb2NfY2FjaGVfdmVjX2thc2FuKHN0cnVjdCBpb3VfdmVjICppdilcbiBcdFx0aW9fdmVjX2ZyZWUoaXYpO1xuIH1cbiBcbit2b2lkIGlvX2Ryb3BfZG1hYnVmX25vZGUoc3RydWN0IGlvX2tpb2NiICpyZXEpO1xuK1xuK3N0YXRpYyBpbmxpbmUgdm9pZCBpb19yZXFfZHJvcF9kbWFidWYoc3RydWN0IGlvX2tpb2NiICpyZXEpXG4re1xuK1x0aWYgKCFJU19FTkFCTEVEKENPTkZJR19ETUFfU0hBUkVEX0JVRkZFUikpXG4rXHRcdHJldHVybjtcbitcdGlmICghKHJlcS1cdTAwM2VmbGFncyBcdTAwMjYgUkVRX0ZfRFJPUF9ETUFCVUYpKVxuK1x0XHRyZXR1cm47XG4rXHRpZiAoV0FSTl9PTl9PTkNFKCEocmVxLVx1MDAzZWZsYWdzIFx1MDAyNiBSRVFfRl9CVUZfTk9ERSkpKVxuK1x0XHRyZXR1cm47XG4rXHRpb19kcm9wX2RtYWJ1Zl9ub2RlKHJlcSk7XG4rfVxuK1xuICNlbmRpZlxuZGlmZiAtLWdpdCBhL2lvX3VyaW5nL3J3LmMgYi9pb191cmluZy9ydy5jXG5pbmRleCA5NTAzOGNmZGE2MTUzLi4xMWZmN2I1YTExNjQ3IDEwMDY0NFxuLS0tIGEvaW9fdXJpbmcvcncuY1xuKysrIGIvaW9fdXJpbmcvcncuY1xuQEAgLTM4MCw4ICszODAsOCBAQCBzdGF0aWMgaW50IGlvX2luaXRfcndfZml4ZWQoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncyxcbiBcdGlmIChpby1cdTAwM2VieXRlc19kb25lKVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdHJldCA9IGlvX2ltcG9ydF9yZWdfYnVmKHJlcSwgXHUwMDI2aW8tXHUwMDNlaXRlciwgcnctXHUwMDNlYWRkciwgcnctXHUwMDNlbGVuLCBkZGlyLFxuLVx0XHRcdFx0aXNzdWVfZmxhZ3MpO1xuK1x0cmV0ID0gX19pb19pbXBvcnRfcmVnX2J1ZihyZXEsIFx1MDAyNmlvLVx1MDAzZWl0ZXIsIHJ3LVx1MDAzZWFkZHIsIHJ3LVx1MDAzZWxlbiwgZGRpcixcbitcdFx0XHRcdCAgaXNzdWVfZmxhZ3MsIElPX1JFR0JVRl9JTVBPUlRfQUxMT1dfRE1BQlVGKTtcbiBcdGlvdl9pdGVyX3NhdmVfc3RhdGUoXHUwMDI2aW8tXHUwMDNlaXRlciwgXHUwMDI2aW8tXHUwMDNlaXRlcl9zdGF0ZSk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbkBAIC01OTEsNiArNTkxLDggQEAgc3RhdGljIHZvaWQgaW9fY29tcGxldGVfcncoc3RydWN0IGtpb2NiICpraW9jYiwgbG9uZyByZXMpXG4gXHRzdHJ1Y3QgaW9fcncgKnJ3ID0gY29udGFpbmVyX29mKGtpb2NiLCBzdHJ1Y3QgaW9fcncsIGtpb2NiKTtcbiBcdHN0cnVjdCBpb19raW9jYiAqcmVxID0gY21kX3RvX2lvX2tpb2NiKHJ3KTtcbiBcbitcdGlvX3JlcV9kcm9wX2RtYWJ1ZihyZXEpO1xuK1xuIFx0X19pb19jb21wbGV0ZV9yd19jb21tb24ocmVxLCByZXMpO1xuIFx0aW9fcmVxX3NldF9yZXMocmVxLCBpb19maXh1cF9yd19yZXMocmVxLCByZXMpLCAwKTtcbiBcdHJlcS1cdTAwM2Vpb190YXNrX3dvcmsuZnVuYyA9IGlvX3JlcV9yd19jb21wbGV0ZTtcbmRpZmYgLS1naXQgYS9saWIvaW92X2l0ZXIuYyBiL2xpYi9pb3ZfaXRlci5jXG5pbmRleCAzNGE1MmU5YmE5ZTFiLi5kNmY1ZDdlMTgwYjU0IDEwMDY0NFxuLS0tIGEvbGliL2lvdl9pdGVyLmNcbisrKyBiL2xpYi9pb3ZfaXRlci5jXG5AQCAtNTc1LDcgKzU3NSw4IEBAIHZvaWQgaW92X2l0ZXJfYWR2YW5jZShzdHJ1Y3QgaW92X2l0ZXIgKmksIHNpemVfdCBzaXplKVxuIHtcbiBcdGlmICh1bmxpa2VseShpLVx1MDAzZWNvdW50IFx1MDAzYyBzaXplKSlcbiBcdFx0c2l6ZSA9IGktXHUwMDNlY291bnQ7XG4tXHRpZiAobGlrZWx5KGl0ZXJfaXNfdWJ1ZihpKSkgfHwgdW5saWtlbHkoaW92X2l0ZXJfaXNfeGFycmF5KGkpKSkge1xuK1x0aWYgKGxpa2VseShpdGVyX2lzX3VidWYoaSkpIHx8IHVubGlrZWx5KGlvdl9pdGVyX2lzX3hhcnJheShpKSkgfHxcbitcdCAgICB1bmxpa2VseShpb3ZfaXRlcl9pc19kbWFidWZfbWFwKGkpKSkge1xuIFx0XHRpLVx1MDAzZWlvdl9vZmZzZXQgKz0gc2l6ZTtcbiBcdFx0aS1cdTAwM2Vjb3VudCAtPSBzaXplO1xuIFx0fSBlbHNlIGlmIChsaWtlbHkoaXRlcl9pc19pb3ZlYyhpKSB8fCBpb3ZfaXRlcl9pc19rdmVjKGkpKSkge1xuQEAgLTYzMSw3ICs2MzIsOCBAQCB2b2lkIGlvdl9pdGVyX3JldmVydChzdHJ1Y3QgaW92X2l0ZXIgKmksIHNpemVfdCB1bnJvbGwpXG4gXHRcdHJldHVybjtcbiBcdH1cbiBcdHVucm9sbCAtPSBpLVx1MDAzZWlvdl9vZmZzZXQ7XG4tXHRpZiAoaW92X2l0ZXJfaXNfeGFycmF5KGkpIHx8IGl0ZXJfaXNfdWJ1ZihpKSkge1xuK1x0aWYgKGlvdl9pdGVyX2lzX3hhcnJheShpKSB8fCBpdGVyX2lzX3VidWYoaSkgfHxcbitcdCAgICBpb3ZfaXRlcl9pc19kbWFidWZfbWFwKGkpKSB7XG4gXHRcdEJVRygpOyAvKiBXZSBzaG91bGQgbmV2ZXIgZ28gYmV5b25kIHRoZSBzdGFydCBvZiB0aGUgc3BlY2lmaWVkXG4gXHRcdFx0KiByYW5nZSBzaW5jZSB3ZSBtaWdodCB0aGVuIGJlIHN0cmF5aW5nIGludG8gcGFnZXMgdGhhdFxuIFx0XHRcdCogYXJlbid0IHBpbm5lZC5cbkBAIC03NzUsNiArNzc3LDIwIEBAIHZvaWQgaW92X2l0ZXJfeGFycmF5KHN0cnVjdCBpb3ZfaXRlciAqaSwgdW5zaWduZWQgaW50IGRpcmVjdGlvbixcbiB9XG4gRVhQT1JUX1NZTUJPTChpb3ZfaXRlcl94YXJyYXkpO1xuIFxuK3ZvaWQgaW92X2l0ZXJfZG1hYnVmX21hcChzdHJ1Y3QgaW92X2l0ZXIgKmksIHVuc2lnbmVkIGludCBkaXJlY3Rpb24sXG4rXHRcdFx0IHN0cnVjdCBkbWFfYnVmX2lvX21hcCAqbWFwLFxuK1x0XHRcdCBsb2ZmX3Qgb2ZmLCBzaXplX3QgY291bnQpXG4re1xuK1x0V0FSTl9PTihkaXJlY3Rpb24gXHUwMDI2IH4oUkVBRCB8IFdSSVRFKSk7XG4rXHQqaSA9IChzdHJ1Y3QgaW92X2l0ZXIpe1xuK1x0XHQuaXRlcl90eXBlID0gSVRFUl9ETUFCVUZfTUFQLFxuK1x0XHQuZGF0YV9zb3VyY2UgPSBkaXJlY3Rpb24sXG4rXHRcdC5kbWFidWZfbWFwID0gbWFwLFxuK1x0XHQuY291bnQgPSBjb3VudCxcbitcdFx0Lmlvdl9vZmZzZXQgPSBvZmYsXG4rXHR9O1xuK31cbitcbiAvKipcbiAgKiBpb3ZfaXRlcl9kaXNjYXJkIC0gSW5pdGlhbGlzZSBhbiBJL08gaXRlcmF0b3IgdGhhdCBkaXNjYXJkcyBkYXRhXG4gICogQGk6IFRoZSBpdGVyYXRvciB0byBpbml0aWFsaXNlLlxuQEAgLTg0MSw3ICs4NTcsNyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBpb3ZfaXRlcl9hbGlnbm1lbnRfYnZlYyhjb25zdCBzdHJ1Y3QgaW92X2l0ZXIgKmkpXG4gXG4gdW5zaWduZWQgbG9uZyBpb3ZfaXRlcl9hbGlnbm1lbnQoY29uc3Qgc3RydWN0IGlvdl9pdGVyICppKVxuIHtcbi1cdGlmIChsaWtlbHkoaXRlcl9pc191YnVmKGkpKSkge1xuK1x0aWYgKGxpa2VseShpdGVyX2lzX3VidWYoaSkpIHx8IGlvdl9pdGVyX2lzX2RtYWJ1Zl9tYXAoaSkpIHtcbiBcdFx0c2l6ZV90IHNpemUgPSBpLVx1MDAzZWNvdW50O1xuIFx0XHRpZiAoc2l6ZSlcbiBcdFx0XHRyZXR1cm4gKCh1bnNpZ25lZCBsb25nKWktXHUwMDNldWJ1ZiArIGktXHUwMDNlaW92X29mZnNldCkgfCBzaXplO1xuQEAgLTg3Miw3ICs4ODgsNyBAQCB1bnNpZ25lZCBsb25nIGlvdl9pdGVyX2dhcF9hbGlnbm1lbnQoY29uc3Qgc3RydWN0IGlvdl9pdGVyICppKVxuIFx0c2l6ZV90IHNpemUgPSBpLVx1MDAzZWNvdW50O1xuIFx0dW5zaWduZWQgaztcbiBcbi1cdGlmIChpdGVyX2lzX3VidWYoaSkpXG4rXHRpZiAoaXRlcl9pc191YnVmKGkpIHx8IGlvdl9pdGVyX2lzX2RtYWJ1Zl9tYXAoaSkpXG4gXHRcdHJldHVybiAwO1xuIFxuIFx0aWYgKFdBUk5fT04oIWl0ZXJfaXNfaW92ZWMoaSkpKVxuQEAgLTE0NjksMTEgKzE0ODUsMTIgQEAgRVhQT1JUX1NZTUJPTF9HUEwoaW1wb3J0X3VidWYpO1xuIHZvaWQgaW92X2l0ZXJfcmVzdG9yZShzdHJ1Y3QgaW92X2l0ZXIgKmksIHN0cnVjdCBpb3ZfaXRlcl9zdGF0ZSAqc3RhdGUpXG4ge1xuIFx0aWYgKFdBUk5fT05fT05DRSghaW92X2l0ZXJfaXNfYnZlYyhpKSBcdTAwMjZcdTAwMjYgIWl0ZXJfaXNfaW92ZWMoaSkgXHUwMDI2XHUwMDI2XG4tXHRcdFx0ICFpdGVyX2lzX3VidWYoaSkpIFx1MDAyNlx1MDAyNiAhaW92X2l0ZXJfaXNfa3ZlYyhpKSlcbitcdFx0XHQgIWl0ZXJfaXNfdWJ1ZihpKSBcdTAwMjZcdTAwMjYgIWlvdl9pdGVyX2lzX2t2ZWMoaSkgXHUwMDI2XHUwMDI2XG4rXHRcdFx0ICFpb3ZfaXRlcl9pc19kbWFidWZfbWFwKGkpKSlcbiBcdFx0cmV0dXJuO1xuIFx0aS1cdTAwM2Vpb3Zfb2Zmc2V0ID0gc3RhdGUtXHUwMDNlaW92X29mZnNldDtcbiBcdGktXHUwMDNlY291bnQgPSBzdGF0ZS1cdTAwM2Vjb3VudDtcbi1cdGlmIChpdGVyX2lzX3VidWYoaSkpXG4rXHRpZiAoaXRlcl9pc191YnVmKGkpIHx8IGlvdl9pdGVyX2lzX2RtYWJ1Zl9tYXAoaSkpXG4gXHRcdHJldHVybjtcbiBcdC8qXG4gXHQgKiBGb3IgdGhlICp2ZWMgaXRlcnMsIG5yX3NlZ3MgKyBpb3YgaXMgY29uc3RhbnQgLSBpZiB3ZSBpbmNyZW1lbnRcbkBAIC0xNjM0LDcgKzE2NTEsNyBAQCBzdGF0aWMgc3NpemVfdCBpb3ZfaXRlcl9leHRyYWN0X2J2ZWNfcGFnZXMoc3RydWN0IGlvdl9pdGVyICppLFxuIFx0fVxuIFx0YmkuYmlfaWR4ID0gMDtcbiBcdGJpLmJpX3NpemUgPSBtYXhzaXplO1xuLVx0YmkuYmlfYnZlY19kb25lID0gc2tpcDtcbitcdGJpLmJpX29mZnNldCA9IHNraXA7XG4gXG4gXHRtYXhwYWdlcyA9IHdhbnRfcGFnZXNfYXJyYXkocGFnZXMsIG1heHNpemUsIHNraXAsIG1heHBhZ2VzKTtcbiBcdGlmICghbWF4cGFnZXMpXG5kaWZmIC0tZ2l0IGEvbmV0L2NlcGgvbWVzc2VuZ2VyLmMgYi9uZXQvY2VwaC9tZXNzZW5nZXIuY1xuaW5kZXggMzRiMzA5N2I0YzdiOS4uOWMxYjZjZjhjMzZmZSAxMDA2NDRcbi0tLSBhL25ldC9jZXBoL21lc3Nlbmdlci5jXG4rKysgYi9uZXQvY2VwaC9tZXNzZW5nZXIuY1xuQEAgLTc2Miw3ICs3NjIsNyBAQCBzdGF0aWMgYm9vbCBjZXBoX21zZ19kYXRhX2Jpb19hZHZhbmNlKHN0cnVjdCBjZXBoX21zZ19kYXRhX2N1cnNvciAqY3Vyc29yLFxuIFx0aWYgKCFjdXJzb3ItXHUwMDNlcmVzaWQpXG4gXHRcdHJldHVybiBmYWxzZTsgICAvKiBubyBtb3JlIGRhdGEgKi9cbiBcbi1cdGlmICghYnl0ZXMgfHwgKGl0LVx1MDAzZWl0ZXIuYmlfc2l6ZSBcdTAwMjZcdTAwMjYgaXQtXHUwMDNlaXRlci5iaV9idmVjX2RvbmUgXHUwMDI2XHUwMDI2XG4rXHRpZiAoIWJ5dGVzIHx8IChpdC1cdTAwM2VpdGVyLmJpX3NpemUgXHUwMDI2XHUwMDI2IGl0LVx1MDAzZWl0ZXIuYmlfb2Zmc2V0IFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgICAgcGFnZSA9PSBiaW9faXRlcl9wYWdlKGl0LVx1MDAzZWJpbywgaXQtXHUwMDNlaXRlcikpKVxuIFx0XHRyZXR1cm4gZmFsc2U7XHQvKiBtb3JlIGJ5dGVzIHRvIHByb2Nlc3MgaW4gdGhpcyBzZWdtZW50ICovXG4gXG5AQCAtODE3LDcgKzgxNyw3IEBAIHN0YXRpYyBib29sIGNlcGhfbXNnX2RhdGFfYnZlY3NfYWR2YW5jZShzdHJ1Y3QgY2VwaF9tc2dfZGF0YV9jdXJzb3IgKmN1cnNvcixcbiBcdGlmICghY3Vyc29yLVx1MDAzZXJlc2lkKVxuIFx0XHRyZXR1cm4gZmFsc2U7ICAgLyogbm8gbW9yZSBkYXRhICovXG4gXG4tXHRpZiAoIWJ5dGVzIHx8IChjdXJzb3ItXHUwMDNlYnZlY19pdGVyLmJpX2J2ZWNfZG9uZSBcdTAwMjZcdTAwMjZcbitcdGlmICghYnl0ZXMgfHwgKGN1cnNvci1cdTAwM2VidmVjX2l0ZXIuYmlfb2Zmc2V0IFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgICAgcGFnZSA9PSBidmVjX2l0ZXJfcGFnZShidmVjcywgY3Vyc29yLVx1MDAzZWJ2ZWNfaXRlcikpKVxuIFx0XHRyZXR1cm4gZmFsc2U7XHQvKiBtb3JlIGJ5dGVzIHRvIHByb2Nlc3MgaW4gdGhpcyBzZWdtZW50ICovXG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxNDozNzozNy4zNjQxMTYwMDRaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxOTc4ODAzMzg0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbjogRE1BLUJVRiBJbnRlZ3JhdGlvbioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBwYXRjaCBzZXJpZXMgKmFic29sdXRlbHkqIHdhcnJhbnRzIGZ1enppbmcuIFdlJ3JlIGxvb2tpbmcgYXQgYSBmdW5kYW1lbnRhbCBzaGlmdCBoZXJlLCBpbnRlZ3JhdGluZyBgZG1hLWJ1ZmAgaW50byB0aGUgY29yZSBJL08gcGF0aHMsIHNwZWNpZmljYWxseSBpbXBhY3RpbmcgYGlvX3VyaW5nYCBhbmQgTlZNZS4gVGhpcyBpc24ndCBqdXN0IGEgbWlub3IgdHdlYWs7IGl0J3MgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSB3aXRoaW4gdGhlIGJsb2NrIGxheWVyLCBOVk1lIGRyaXZlciwgYW5kIGlvX3VyaW5nIGNvbXBvbmVudHMuIE15IGV4cGVydGlzZSB0ZWxscyBtZSB0aGVzZSBhcmUgaGlnaC12YWx1ZSB0YXJnZXRzIGZvciB1bmNvdmVyaW5nIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMuXG5cbkxldCdzIGxvb2sgYXQgdGhlIHNwZWNpZmljIGNoYW5nZXMuIFRoZSBwYXRjaCBtb2RpZmllcyBgYmlvYCwgYGJsay1tcWAsIGBudm1lYCwgYGlvX3VyaW5nYCwgYW5kIGBpb3ZfaXRlcmAgdG8gc3VwcG9ydCBgZG1hLWJ1ZmAgbWFwcGluZ3MuIFdlJ3JlIHNlZWluZyBjaGFuZ2VzIGxpa2UgYGJpb19pb3ZfaXRlcl9zZXRgIHJlcGxhY2luZyBgYmlvX2lvdl9idmVjX3NldGAsIHdpdGggdGhlIGNydWNpYWwgYWRkaXRpb24gb2YgYGlvdl9pdGVyX2lzX2RtYWJ1Zl9tYXBgIGhhbmRsaW5nLiBXZSd2ZSBnb3QgYSBuZXcgZmlsZSwgYGRtYS1idWYtaW8uY2AsIGludHJvZHVjaW5nIGZ1bmN0aW9ucyBsaWtlIGBkbWFfYnVmX2lvX2N0eF9jcmVhdGVgIGFuZCBgZG1hX2J1Zl9pb19jcmVhdGVfbWFwYCwgZXRjLiBUaGUgTlZNZSBkcml2ZXIgZ2V0cyBtb2RpZmljYXRpb25zIGZvciBgbnZtZV9ycV9zZXR1cF9kbWFidWZgLCBgbnZtZV9wY2lfaW5pdF9kbWFfYnVmX2lvX2N0eGAsIGV0Yy4sIHdoaWNoIGFyZSBpbXBvcnRhbnQuIEFuZCBpbiBgaW9fdXJpbmcvcnNyYy5jYCwgd2Ugc2VlIGBpb19yZWdpc3Rlcl9kbWFidWZgLCBgaW9faW1wb3J0X2RtYWJ1ZmAuIEFuZCwgb2YgY291cnNlLCB0aGUgaW50cm9kdWN0aW9uIG9mIGBJVEVSX0RNQUJVRl9NQVBgIGluIGBpb3ZfaXRlcmAuXG5cbldlJ3JlIGRlYWxpbmcgd2l0aCBhIG5ldyBJL08gbWFwcGluZyBpbmZyYXN0cnVjdHVyZSBiYXNlZCBvbiBgZG1hLWJ1ZmAsIGFuZCBpdHMgaW50ZWdyYXRpb24gd2l0aCBleGlzdGluZyBtZWNoYW5pc21zLiBUaGlzIGlzIHByaW1lIGZ1enppbmcgdGVycml0b3J5LlxuXG5JJ3ZlIGlkZW50aWZpZWQgdGhlIGNvbmZpZ3VyYXRpb25zIHRoYXQgYXJlIGtleTogYENPTkZJR19ETUFfU0hBUkVEX0JVRkZFUmAgaXMgZXNzZW50aWFsLiBBbHRob3VnaCBpdCBzZWVtcyB0byBiZSBlbmFibGVkIGJ5IGRlZmF1bHQgaW4gbWFueSBjb25maWdzLCB3ZSdsbCBuZWVkIHRvIHNwZWNpZnkgaXQgZXhwbGljaXRseSBmb3IgYSBjb21wbGV0ZSBmdXp6aW5nIGNvdmVyYWdlLiBgQ09ORklHX05WTUVfQ09SRWAsIGBDT05GSUdfQkxLX0RFVl9OVk1FYCwgYW5kIGBDT05GSUdfSU9fVVJJTkdgIGFyZSB0aGUgb3RoZXIgaW1wb3J0YW50IG9uZXMuXG5cbk5vdywgbGV0J3MgaWRlbnRpZnkgdGhlIHNwZWNpZmljIGZ1bmN0aW9ucy4gSSBuZWVkIHRvIGZvY3VzIG9uIHRoZSBrZXkgc3ltYm9scyB0byBmdXp6LlxuXG5CYXNlZCBvbiB0aGUgcHJvbXB0LCBpdCBpcyBiZXR0ZXIgdG8gZnV6eiBub24tc3RhdGljIGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zLiBUaGlzIHN1Z2dlc3RzIHRoYXQgd2Ugc2hvdWxkIGFpbSBmb3IgQVBJIGVudHJ5cG9pbnRzLiBUaGVyZWZvcmUsIHRoZSBsaXN0IG5lZWRzIHJlZmluZW1lbnQuXG5cblNvIEkgYW0gbG9va2luZyBhdDpcblxuLSBgZG1hX2J1Zl9pb19jdHhfY3JlYXRlYFxuLSBgZG1hX2J1Zl9pb19jdHhfcmVsZWFzZWBcbi0gYGRtYV9idWZfaW9fY3JlYXRlX21hcGBcbi0gYGRtYV9idWZfaW9faW52YWxpZGF0ZV9tYXBwaW5nc2Bcbi0gYGRtYV9idWZfaW9faW5pdF9tYXBgXG4tIGBiaW9faW92X2l0ZXJfc2V0YFxuLSBgX19pb19pbXBvcnRfcmVnX2J1ZmBcbi0gYGlvX2Ryb3BfZG1hYnVmX25vZGVgXG4tIGBpb3ZfaXRlcl9kbWFidWZfbWFwYFxuLSBgYmlvX3NwbGl0X2lvX2F0YCAoc2luY2UgYGJpb19zcGxpdF9pb19hdF9kbWFidWZgIGlzIHN0YXRpYyBpbmxpbmUpXG4tIGBudm1lX21hcF9kYXRhYCAoY2FsbHMgYG52bWVfcnFfc2V0dXBfZG1hYnVmYClcbi0gYG52bWVfdW5tYXBfZGF0YWAgKGNhbGxzIGBudm1lX3JxX2NsZWFuX2RtYWJ1Zl9tYXBgKVxuLSBgbnZtZV9wY2lfaW5pdF9kbWFfYnVmX2lvX2N0eGAgKHN0YXRpYywgYnV0IG1heWJlIGBudm1lX2Rldl9tYXBgIG9yIHNvbWV0aGluZz8gSXQncyBhIGNhbGxiYWNrIGluIGBudm1lX3BjaV9jdHJsX29wc2ApLlxuXG5TbyBJIHRoaW5rIGEgZ29vZCBpbml0aWFsIGZvY3VzIHdvdWxkIGJlOlxuXG4tIGBkbWFfYnVmX2lvX2N0eF9jcmVhdGVgXG4tIGBkbWFfYnVmX2lvX2N0eF9yZWxlYXNlYFxuLSBgZG1hX2J1Zl9pb19jcmVhdGVfbWFwYFxuLSBgZG1hX2J1Zl9pb19pbnZhbGlkYXRlX21hcHBpbmdzYFxuLSBgZG1hX2J1Zl9pb19pbml0X21hcGBcbi0gYGJpb19pb3ZfaXRlcl9zZXRgXG4tIGBfX2lvX2ltcG9ydF9yZWdfYnVmYFxuLSBgaW9fZHJvcF9kbWFidWZfbm9kZWBcbi0gYGlvdl9pdGVyX2RtYWJ1Zl9tYXBgXG4tIGBiaW9fc3BsaXRfaW9fYXRgXG4tIGBudm1lX21hcF9kYXRhYFxuLSBgbnZtZV91bm1hcF9kYXRhYFxuLSBgbnZtZV9wY2lfaW5pdF9kbWFfYnVmX2lvX2N0eGBcblxuVGhlIHJlYXNvbmluZyBoZXJlIGlzIHN0cmFpZ2h0Zm9yd2FyZC4gVGhpcyBwYXRjaCBzZXJpZXMgZW5hYmxlcyBgZG1hLWJ1ZmAgd2l0aGluIGtleSBJL08gcGF0aHMuIEl0IGFkZHMgbmV3IGZ1bmN0aW9ucyB0byBjcmVhdGUgYW5kIG1hbmFnZSBgZG1hLWJ1ZmAgbWFwcGluZ3MgYW5kIG1vZGlmaWVzIGNvcmUgZnVuY3Rpb25zIHRvIGhhbmRsZSBgZFxuXG4iLCJJbnB1dFRva2VucyI6MzYwOTgsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTIxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTQ6Mzc6NTcuMTUyMTUxNzQ3WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0NjY0MzAxNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJETUFfU0hBUkVEX0JVRkZFUlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvTWFrZWZpbGU9Nzg9b2JqLXlcXHRcXHRcXHRcXHQrPSBkYXgvXFxuZHJpdmVycy9NYWtlZmlsZTo3OTpvYmotJChDT05GSUdfRE1BX1NIQVJFRF9CVUZGRVIpICs9IGRtYS1idWYvXFxuZHJpdmVycy9NYWtlZmlsZS04MC1vYmotJChDT05GSUdfTlVCVVMpXFx0XFx0Kz0gbnVidXMvXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE0OjM3OjU3LjM5ODgwMTI0MVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwOTk3NjgwMjMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgcXVpY2sgbWVudGFsIHJ1bmRvd246XG5cbioqQ29uZmlybWluZyBETUEgQnVmZmVyIGFuZCBNb3Zpbmcgb24gdG8gSU9fVVJJTkcqKlxuXG5BbHJpZ2h0LCB5ZXAsIHRoYXQgYERNQV9TSEFSRURfQlVGRkVSYCB2YXJpYWJsZeKAlEknbSBwcmV0dHkgY29uZmlkZW50IHRoYXQncyB0aGUgY29ycmVjdCBvbmUgd2UncmUgd29ya2luZyB3aXRoIGhlcmUuIEdvb2QuIE5vdywgbGV0J3MgcGl2b3QgYW5kIHRha2UgYSBsb29rIGF0IGhvdyB0aGlzIGFsbCBwbGF5cyBvdXQgd2l0aCBgSU9fVVJJTkdgLiBUaW1lIHRvIHNoaWZ0IG15IGZvY3VzIGFuZCBzdGFydCBhc3Nlc3NpbmcgdGhlIGltcGxpY2F0aW9ucyB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzg3NDcsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxNDozODowOC4zOTY0ODY5OTNaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzM3NTEzMzg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIklPX1VSSU5HXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluaXQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbml0L0tjb25maWc9MTkxMD1jb25maWcgQUlPXFxuLS1cXG5pbml0L0tjb25maWctMTkxNy1cXG5pbml0L0tjb25maWc6MTkxODpjb25maWcgSU9fVVJJTkdcXG5pbml0L0tjb25maWctMTkxOS1cXHRib29sIFxcXCJFbmFibGUgSU8gdXJpbmcgc3VwcG9ydFxcXCIgaWYgRVhQRVJUXFxuLS1cXG5pbml0L0tjb25maWc9MTkyNz1jb25maWcgR0NPVl9QUk9GSUxFX1VSSU5HXFxuaW5pdC9LY29uZmlnLTE5MjgtXFx0Ym9vbCBcXFwiRW5hYmxlIEdDT1YgcHJvZmlsaW5nIG9uIHRoZSBpb191cmluZyBzdWJzeXN0ZW1cXFwiXFxuaW5pdC9LY29uZmlnOjE5Mjk6XFx0ZGVwZW5kcyBvbiBJT19VUklORyBcXHUwMDI2XFx1MDAyNiBHQ09WX0tFUk5FTFxcbmluaXQvS2NvbmZpZy0xOTMwLVxcdGhlbHBcXG4tLVxcbmluaXQvS2NvbmZpZy0xOTM5LVxcbmluaXQvS2NvbmZpZzoxOTQwOmNvbmZpZyBJT19VUklOR19NT0NLX0ZJTEVcXG5pbml0L0tjb25maWctMTk0MS1cXHR0cmlzdGF0ZSBcXFwiRW5hYmxlIGlvX3VyaW5nIG1vY2sgZmlsZXMgKEV4cGVyaW1lbnRhbClcXFwiIGlmIEVYUEVSVFxcbmluaXQvS2NvbmZpZy0xOTQyLVxcdGRlZmF1bHQgblxcbmluaXQvS2NvbmZpZzoxOTQzOlxcdGRlcGVuZHMgb24gSU9fVVJJTkdcXG5pbml0L0tjb25maWctMTk0NC1cXHRoZWxwXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE0OjM4OjA4LjczNDAxMzAxMVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3NDM0MTc2MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKklPX1VSSU5HIGFuZCBOVk1lIENvbnNpZGVyYXRpb25zKipcblxuWWVzLCBgSU9fVVJJTkdgIGlzIGRlZmluaXRlbHkgdGhlIHJpZ2h0IGRpcmVjdGlvbiB0byBnbyBoZXJlLiBUaGUgaW5oZXJlbnQgYmVuZWZpdHMgYXJlIGNsZWFyIGFuZCBpdCdzIHdoZXJlIHdlIHNob3VsZCBmb2N1cyBvdXIgYXR0ZW50aW9uIGZvciB0aGlzIGFyY2hpdGVjdHVyZS4gTm93LCBJIHdhbnQgdG8gdGFrZSBhIGRlZXBlciBsb29rIGF0IGBCTEtfREVWX05WTUVgLiBUaGF0J3Mgd2hlcmUgdGhlIHJlYWwgcGVyZm9ybWFuY2UgZ2FpbnMgYXJlIGdvaW5nIHRvIGJlIGZvdW5kLiBMZXQncyBzZWUgaG93IHdlbGwgaXQncyB3b3JraW5nIHdpdGggdGhpcyBuZXcgZGVzaWduLlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTE1NSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE0OjM4OjEyLjQ3NzQzNTU5M1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MjkyOTc5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJCTEtfREVWX05WTUVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL252bWUvaG9zdC9LY29uZmlnPTI9Y29uZmlnIE5WTUVfQ09SRVxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZy00LVxcbmRyaXZlcnMvbnZtZS9ob3N0L0tjb25maWc6NTpjb25maWcgQkxLX0RFVl9OVk1FXFxuZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZy02LVxcdHRyaXN0YXRlIFxcXCJOVk0gRXhwcmVzcyBibG9jayBkZXZpY2VcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE0OjM4OjEyLjU1MDM3NTUyOVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMjA5MDg4ODMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBETUEtQnVmIFJlbGF0ZWQgU3ltYm9scyBmb3IgTlZNZSBEcml2ZXIgSW50ZWdyYXRpb24qKlxuXG5Pa2F5LCBzbyB3ZSd2ZSBjb25maXJtZWQgYEJMS19ERVZfTlZNRWAgaXMgdGhlIHJpZ2h0IHBhdGggaGVyZS4gTm93LCBsZXQncyB0YWtlIGEgbG9vayBhdCB0aGUgaW1wb3J0YW50IHN5bWJvbHMuIEknbSBnb2luZyB0aHJvdWdoIHRoZSBsaXN0IGFuZCBkb3VibGUtY2hlY2tpbmcgdGhhdCB3ZSdyZSBjb3ZlcmluZyBhbGwgdGhlIHJlbGV2YW50IGZ1bmN0aW9ucyByZWxhdGVkIHRvIGBkbWFfYnVmYCBpbnRlcmFjdGlvbi5cblxuRmlyc3QsIEkgaWRlbnRpZmllZCBgZG1hX2J1Zl9pb19jdHhfY3JlYXRlYCwgYGRtYV9idWZfaW9fY3R4X3JlbGVhc2VgLCBgZG1hX2J1Zl9pb19jcmVhdGVfbWFwYCwgYGRtYV9idWZfaW9faW52YWxpZGF0ZV9tYXBwaW5nc2AsIGBkbWFfYnVmX2lvX2luaXRfbWFwYCwgYGJpb19pb3ZfaXRlcl9zZXRgLCBgX19pb19pbXBvcnRfcmVnX2J1ZmAsIGBpb19kcm9wX2RtYWJ1Zl9ub2RlYCBhbmQgYGlvdl9pdGVyX2RtYWJ1Zl9tYXBgIGFzIGluaXRpYWwgY2FuZGlkYXRlcy5cblxuSSBicmllZmx5IGNvbnNpZGVyZWQgYG52bWVfbWFwX2RhdGFgLCBhbmQgYG52bWVfdW5tYXBfZGF0YWAsIGJ1dCByZWFsaXplZCB0aG9zZSBhcmUgc3RhdGljLCBhcyB3ZWxsIGFzIGBudm1lX3BjaV9pbml0X2RtYV9idWZfaW9fY3R4YCB3aGljaCBpcyBhbHNvIHN0YXRpYy4gU3RhdGljIGZ1bmN0aW9ucyBhcmUgbGlrZWx5IG5vdCBkaXJlY3RseSB1c2VkIGZyb20gb3V0c2lkZSB0aGUgZHJpdmVyLCBzbyB3ZSdyZSBwcm9iYWJseSBmaW5lIG5vdCBpbmNsdWRpbmcgdGhlbSBkaXJlY3RseSwgZXZlbiBpZiB0aGUgZnVuY3Rpb24gaXRzZWxmIGlzIGEgY2FsbGJhY2suXG5cbkFscmlnaHQsIGFmdGVyIHJldmlld2luZyB0aGUgbGlzdCBhZ2FpbiwgSSdtIGNvbmZpZGVudCB3aXRoIHRoZXNlIGNhbmRpZGF0ZXMuIFRoZSBub24tc3RhdGljIGZ1bmN0aW9ucyBzZWVtIHRvIGNhcHR1cmUgdGhlIGNvcmUgb2YgdGhlIGBkbWFfYnVmYCBpbnRlcmFjdGlvbiBwb2ludHMgZm9yIHRoZSBOVk1lIGRyaXZlci5cblxuSGVyZSdzIHRoZSBmaW5hbCBsaXN0OlxuKiAgIGBkbWFfYnVmX2lvX2N0eF9jcmVhdGVgXG4qICAgYGRtYV9idWZfaW9fY3R4X3JlbGVhc2VgXG4qICAgYGRtYV9idWZfaW9fY3JlYXRlX21hcGBcbiogICBgZG1hX2J1Zl9pb19pbnZhbGlkYXRlX21hcHBpbmdzYFxuKiAgIGBkbWFfYnVmX2lvX2luaXRfbWFwYFxuKiAgIGBiaW9faW92X2l0ZXJfc2V0YFxuKiAgIGBfX2lvX2ltcG9ydF9yZWdfYnVmYFxuKiAgIGBpb19kcm9wX2RtYWJ1Zl9ub2RlYFxuKiAgIGBpb3ZfaXRlcl9kbWFidWZfbWFwYFxuXG5JIGJlbGlldmUgdGhpcyBpcyBhIHNvbGlkIHNlbGVjdGlvbi4gTGV0J3MgY2FsbCBgc2V0LXJlc3VsdHNgIGFuZCBtb3ZlIGZvcndhcmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5NDE0LCJPdXRwdXRUb2tlbnMiOjI0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxNDozODoyMi43NTk0Njg4OFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NjQ5NzU1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRE1BX1NIQVJFRF9CVUZGRVJcIixcbiAgICBcIklPX1VSSU5HXCIsXG4gICAgXCJCTEtfREVWX05WTUVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkbWFfYnVmX2lvX2N0eF9jcmVhdGVcIixcbiAgICBcImRtYV9idWZfaW9fY3R4X3JlbGVhc2VcIixcbiAgICBcImRtYV9idWZfaW9fY3JlYXRlX21hcFwiLFxuICAgIFwiZG1hX2J1Zl9pb19pbnZhbGlkYXRlX21hcHBpbmdzXCIsXG4gICAgXCJkbWFfYnVmX2lvX2luaXRfbWFwXCIsXG4gICAgXCJiaW9faW92X2l0ZXJfc2V0XCIsXG4gICAgXCJfX2lvX2ltcG9ydF9yZWdfYnVmXCIsXG4gICAgXCJpb19kcm9wX2RtYWJ1Zl9ub2RlXCIsXG4gICAgXCJpb3ZfaXRlcl9kbWFidWZfbWFwXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBkbWEtYnVmIHN1cHBvcnQgaW4gdGhlIGJsb2NrIGxheWVyLCBOVk1lIFBDSSBkcml2ZXIsIGFuZCBpb191cmluZy4gSXQgYWRkcyBhIG5ldyBkbWEtYnVmIEkvTyBtYXBwaW5nIGluZnJhc3RydWN0dXJlIGFuZCBtb2RpZmllcyBjb3JlIGJpbyBhbmQgaW92X2l0ZXIgbG9naWMgdG8gaGFuZGxlIGRtYS1idWYgbWFwcy4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgZXhwb3NlcyBuZXcgcmVhY2hhYmxlIGNvZGUgcGF0aHMgdmlhIGlvX3VyaW5nIGFuZCBOVk1lLCB3aGljaCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRNQV9TSEFSRURfQlVGRkVSXCIsXG4gICAgXCJJT19VUklOR1wiLFxuICAgIFwiQkxLX0RFVl9OVk1FXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZG1hX2J1Zl9pb19jdHhfY3JlYXRlXCIsXG4gICAgXCJkbWFfYnVmX2lvX2N0eF9yZWxlYXNlXCIsXG4gICAgXCJkbWFfYnVmX2lvX2NyZWF0ZV9tYXBcIixcbiAgICBcImRtYV9idWZfaW9faW52YWxpZGF0ZV9tYXBwaW5nc1wiLFxuICAgIFwiZG1hX2J1Zl9pb19pbml0X21hcFwiLFxuICAgIFwiYmlvX2lvdl9pdGVyX3NldFwiLFxuICAgIFwiX19pb19pbXBvcnRfcmVnX2J1ZlwiLFxuICAgIFwiaW9fZHJvcF9kbWFidWZfbm9kZVwiLFxuICAgIFwiaW92X2l0ZXJfZG1hYnVmX21hcFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgZG1hLWJ1ZiBzdXBwb3J0IGluIHRoZSBibG9jayBsYXllciwgTlZNZSBQQ0kgZHJpdmVyLCBhbmQgaW9fdXJpbmcuIEl0IGFkZHMgYSBuZXcgZG1hLWJ1ZiBJL08gbWFwcGluZyBpbmZyYXN0cnVjdHVyZSBhbmQgbW9kaWZpZXMgY29yZSBiaW8gYW5kIGlvdl9pdGVyIGxvZ2ljIHRvIGhhbmRsZSBkbWEtYnVmIG1hcHMuIFRoaXMgaXMgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGV4cG9zZXMgbmV3IHJlYWNoYWJsZSBjb2RlIHBhdGhzIHZpYSBpb191cmluZyBhbmQgTlZNZSwgd2hpY2ggc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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,}