Name: series-workflowv42d2 Phase: Succeeded StartedAt: 2026-07-28 03:01:01 +0000 UTC FinishedAt: 2026-07-28 08:20:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv42d2[0] Phase: Succeeded StartedAt: 2026-07-28 03:01:01 +0000 UTC FinishedAt: 2026-07-28 03:35:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv42d2[0].run-triage Phase: Succeeded StartedAt: 2026-07-28 03:01:01 +0000 UTC FinishedAt: 2026-07-28 03:35:08 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "76559739eb1f9665fbc3262806a040a604571ccb", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "AFS_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "76559739eb1f9665fbc3262806a040a604571ccb", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "AFS_FS" ], "series_id": "b8d72d99-8d44-4907-a9e5-898881390da6" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "vfs_inode_is_owned_by_me", "afs_is_owned_by_me", "afs_have_same_owner", "inode_owner_or_capable", "vfs_setlease", "__check_sticky", "setattr_prepare", "vfs_dedupe_file_range_one", "afs_edit_dir_remove", "afs_fs_fetch_data", "afs_dir_find_block" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAzOjMzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0FGU19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Zmc19pbm9kZV9pc19vd25lZF9ieV9tZSYjMzQ7LAogICAgJiMzNDthZnNfaXNfb3duZWRfYnlfbWUmIzM0OywKICAgICYjMzQ7YWZzX2hhdmVfc2FtZV9vd25lciYjMzQ7LAogICAgJiMzNDtpbm9kZV9vd25lcl9vcl9jYXBhYmxlJiMzNDssCiAgICAmIzM0O3Zmc19zZXRsZWFzZSYjMzQ7LAogICAgJiMzNDtfX2NoZWNrX3N0aWNreSYjMzQ7LAogICAgJiMzNDtzZXRhdHRyX3ByZXBhcmUmIzM0OywKICAgICYjMzQ7dmZzX2RlZHVwZV9maWxlX3JhbmdlX29uZSYjMzQ7LAogICAgJiMzNDthZnNfZWRpdF9kaXJfcmVtb3ZlJiMzNDssCiAgICAmIzM0O2Fmc19mc19mZXRjaF9kYXRhJiMzNDssCiAgICAmIzM0O2Fmc19kaXJfZmluZF9ibG9jayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIG5ldyBpbm9kZSBvcGVyYXRpb25zIGBpc19vd25lZF9ieV9tZWAgYW5kIGBoYXZlX3NhbWVfb3duZXJgIHRvIGFsbG93IGZpbGVzeXN0ZW1zIChsaWtlIEFGUykgdG8gb3ZlcnJpZGUgZGVmYXVsdCBWRlMgb3duZXJzaGlwIGNoZWNrcy4gSXQgbW9kaWZpZXMgY29yZSBWRlMgcGF0aHMgKGUuZy4sIGBjaG93bl9va2AsIGBjaGdycF9va2AsIGBjb3JlZHVtcF9maWxlYCwgYGlub2RlX293bmVyX29yX2NhcGFibGVgLCBgdmZzX3NldGxlYXNlYCwgYG1heV9mb2xsb3dfbGlua2AsIGBtYXlfY3JlYXRlX2luX3N0aWNreWAsIGBfX2NoZWNrX3N0aWNreWAsIGBtYXlfZGVkdXBlX2ZpbGVgKSB0byB1c2UgdGhlc2UgbmV3IG9wZXJhdGlvbnMuIEl0IGFsc28gaW1wbGVtZW50cyB0aGVzZSBvcGVyYXRpb25zIGZvciBBRlMgYW5kIGZpeGVzIHNvbWUgQUZTLXNwZWNpZmljIGJ1Z3MgaW4gZGlyZWN0b3J5IGVkaXRpbmcgYW5kIGRhdGEgZmV0Y2hpbmcuIFRoZXNlIGFyZSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gdGhlIGNvcmUgVkZTIGFuZCBBRlMsIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBvciBzZWN1cml0eSBpc3N1ZXMgYXJlIGludHJvZHVjZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDM6MzM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA3NmI5ZjYwNmVhZTJiMDllMDkwMWQyNDg4MzJlZDVjMTM2MDBmNTQwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBKdWwgMjggMDM6MzM6MDUgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy92ZnMucnN0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy92ZnMucnN0XG5pbmRleCA3Yzc1MzE0OGFmODg4My4uODkzNDE5ZTAwM2VhZjcgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Zmcy5yc3RcbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZzLnJzdFxuQEAgLTQ0NSw2ICYjNDM7NDQ1LDkgQEAgQXMgb2Yga2VybmVsIDIuNi4yMiwgdGhlIGZvbGxvd2luZyBtZW1iZXJzIGFyZSBkZWZpbmVkOlxuIFx0XHRcdFx0ICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGZpbGVfa2F0dHIgKmZhKTtcbiBcdFx0aW50ICgqZmlsZWF0dHJfZ2V0KShzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBmaWxlX2thdHRyICpmYSk7XG4gXHQgICAgICAgIHN0cnVjdCBvZmZzZXRfY3R4ICooKmdldF9vZmZzZXRfY3R4KShzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbiYjNDM7XHRcdGludCAoKmlzX293bmVkX2J5X21lKShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSk7XG4mIzQzO1x0XHRpbnQgKCpoYXZlX3NhbWVfb3duZXIpKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuJiM0MztcdFx0XHRcdCAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpO1xuIFx0fTtcbiBcbiBBZ2FpbiwgYWxsIG1ldGhvZHMgYXJlIGNhbGxlZCB3aXRob3V0IGFueSBsb2NrcyBiZWluZyBoZWxkLCB1bmxlc3NcbkBAIC02MzQsNiAmIzQzOzYzNywyNCBAQCBvdGhlcndpc2Ugbm90ZWQuXG4gICAgICAgICBmaWxlc3lzdGVtIG11c3QgZGVmaW5lIHRoaXMgb3BlcmF0aW9uIHRvIHVzZVxuICAgICAgICAgc2ltcGxlX29mZnNldF9kaXJfb3BlcmF0aW9ucy5cbiBcbiYjNDM7YGBpc19vd25lZF9ieV9tZWBgXG4mIzQzO1x0Y2FsbGVkIHRvIGRldGVybWluZSBpZiB0aGUgZmlsZSBjYW4gYmUgY29uc2lkZXJlZCB0byBiZSAmIzM5O293bmVkJiMzOTsgYnlcbiYjNDM7XHR0aGUgb3duZXIgb2YgdGhlIHByb2Nlc3Mgb3IgaWYgdGhlIHByb2Nlc3MgaGFzIGEgdG9rZW4gdGhhdCBncmFudHNcbiYjNDM7XHRpdCBvd25lcnNoaXAgcHJpdmlsZWdlcy4gIElmIHVuc2V0LCB0aGUgZGVmYXVsdCBpcyB0byBjb21wYXJlIGlfdWlkXG4mIzQzO1x0dG8gY3VycmVudF9mc3VpZCgpIC0gYnV0IHRoaXMgbWF5IGdpdmUgaW5jb3JyZWN0IHJlc3VsdHMgZm9yIHNvbWVcbiYjNDM7XHRuZXR3b3JrIG9yIHBsdWctaW4gYmxvY2sgZmlsZXN5c3RlbXMuICBGb3IgZXhhbXBsZSwgQUZTIGRldGVybWluZXNcbiYjNDM7XHRvd25lcnNoaXAgZW50aXJlbHkgYWNjb3JkaW5nIHRvIGFuIG9idGFpbmVkIHRva2VuIGFuZCBpX3VpZCBtYXkgbm90XG4mIzQzO1x0ZXZlbiBiZSBmcm9tIHRoZSBzYW1lIElEIHNwYWNlIGFzIGN1cnJlbnRfdWlkKCkuXG4mIzQzO1xuJiM0MztgYGhhdmVfc2FtZV9vd25lcmBgXG4mIzQzO1x0Y2FsbGVkIHRvIGRldGVybWluZSBpZiBhbiBpbm9kZSBoYXMgdGhlIHNhbWUgb3duZXIgYXMgaXRzIGltbWVkaWF0ZVxuJiM0MztcdHBhcmVudCBvbiB0aGUgcGF0aCB3YWxrZWQuICBJZiB1bnNldCwgdGhlIGRlZmF1bHQgaXMgdG8gc2ltcGx5XG4mIzQzO1x0Y29tcGFyZSB0aGUgaV91aWQgb2YgYm90aC4gIEZvciBleGFtcGxlLCBBRlMgY29tcGFyZXMgdGhlIG93bmVyIElEc1xuJiM0MztcdG9mIGJvdGggLSBidXQgdGhlc2UgYXJlIGEgNjQtYml0IHZhbHVlcyBvbiBzb21lIHZhcmlhbnRzIHRoYXQgbWlnaHRcbiYjNDM7XHRub3QgZml0IGludG8gYSBrdWlkX3QgYW5kIGNpZnMgaGFzIEdVSURzIHRoYXQgY2Fubm90IGJlIGNvbXBhcmVkIHRvXG4mIzQzO1x0a3VpZF90LlxuJiM0MztcbiYjNDM7XG4gVGhlIEFkZHJlc3MgU3BhY2UgT2JqZWN0XG4gPT09PT09PT09PT09PT09PT09PT09PT09XG4gXG5kaWZmIC0tZ2l0IGEvZnMvYWZzL2Rpci5jIGIvZnMvYWZzL2Rpci5jXG5pbmRleCA2ZGY1NmZlOTE2M2ZkNy4uZWUyZjVlYzBiMmM2N2QgMTAwNjQ0XG4tLS0gYS9mcy9hZnMvZGlyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2Fmcy9kaXIuY1xuQEAgLTY5LDYgJiM0Mzs2OSw4IEBAIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGFmc19kaXJfaW5vZGVfb3BlcmF0aW9ucyA9IHtcbiBcdC5wZXJtaXNzaW9uXHQ9IGFmc19wZXJtaXNzaW9uLFxuIFx0LmdldGF0dHJcdD0gYWZzX2dldGF0dHIsXG4gXHQuc2V0YXR0clx0PSBhZnNfc2V0YXR0cixcbiYjNDM7XHQuaXNfb3duZWRfYnlfbWVcdD0gYWZzX2lzX293bmVkX2J5X21lLFxuJiM0MztcdC5oYXZlX3NhbWVfb3duZXIgPSBhZnNfaGF2ZV9zYW1lX293bmVyLFxuIH07XG4gXG4gY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBhZnNfZGlyX2FvcHMgPSB7XG5kaWZmIC0tZ2l0IGEvZnMvYWZzL2Rpcl9lZGl0LmMgYi9mcy9hZnMvZGlyX2VkaXQuY1xuaW5kZXggZmQzYWE5Zjk3Y2U2NGMuLmMzMTMwMzA1OTQ0NGFkIDEwMDY0NFxuLS0tIGEvZnMvYWZzL2Rpcl9lZGl0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2Fmcy9kaXJfZWRpdC5jXG5AQCAtNDE1LDcgJiM0Mzs0MTUsNyBAQCB2b2lkIGFmc19lZGl0X2Rpcl9yZW1vdmUoc3RydWN0IGFmc192bm9kZSAqdm5vZGUsXG4gXHRpZiAoIWFmc19kaXJfaW5pdF9pdGVyKFx1MDAyNml0ZXIsIG5hbWUpKVxuIFx0XHRyZXR1cm47XG4gXG4tXHRtZXRhID0gYWZzX2Rpcl9maW5kX2Jsb2NrKFx1MDAyNml0ZXIsIDApO1xuJiM0MztcdG1ldGEgPSBhZnNfZGlyX2dldF9ibG9jayhcdTAwMjZpdGVyLCAwKTtcbiBcdGlmICghbWV0YSlcbiBcdFx0cmV0dXJuO1xuIFxuQEAgLTQ0Miw3ICYjNDM7NDQyLDcgQEAgdm9pZCBhZnNfZWRpdF9kaXJfcmVtb3ZlKHN0cnVjdCBhZnNfdm5vZGUgKnZub2RlLFxuIFx0LyogQ2hlY2sgYW5kIGNsZWFyIHRoZSBlbnRyeS4gKi9cbiBcdGRlID0gXHUwMDI2YmxvY2stXHUwMDNlZGlyZW50c1tzbG90XTtcbiBcdGlmIChkZS1cdTAwM2V1LnZhbGlkICE9IDEpXG4tXHRcdGdvdG8gZXJyb3JfdW5tYXA7XG4mIzQzO1x0XHRnb3RvIGVycm9yO1xuIFxuIFx0dHJhY2VfYWZzX2VkaXRfZGlyKHZub2RlLCB3aHksIGFmc19lZGl0X2Rpcl9kZWxldGUsIGIsIHNsb3QsXG4gXHRcdFx0ICAgbnRvaGwoZGUtXHUwMDNldS52bm9kZSksIG50b2hsKGRlLVx1MDAzZXUudW5pcXVlKSxcbkBAIC00NTgsNyAmIzQzOzQ1OCw2IEBAIHZvaWQgYWZzX2VkaXRfZGlyX3JlbW92ZShzdHJ1Y3QgYWZzX3Zub2RlICp2bm9kZSxcbiBcdC8qIENsZWFyIHRoZSBjb25zdGl0dWVudCBlbnRyaWVzLiAqL1xuIFx0bmV4dCA9IGRlLVx1MDAzZXUuaGFzaF9uZXh0O1xuIFx0bWVtc2V0KGRlLCAwLCBzaXplb2YoKmRlKSAqIGl0ZXIubnJfc2xvdHMpO1xuLVx0a3VubWFwX2xvY2FsKGJsb2NrKTtcbiBcbiBcdC8qIEFkanVzdCB0aGUgaGFzaCBjaGFpbjogaWYgaXRlci1cdTAwM2VwcmV2X2VudHJ5IGlzIDAsIHRoZSBoYXNodGFibGUgaGVhZFxuIFx0ICogaW5kZXggaXMgcHJldmlvdXM7IG90aGVyd2lzZSBpdCYjMzk7cyBzbG90IG51bWJlciBvZiB0aGUgcHJldmlvdXMgZW50cnkuXG5AQCAtNDg1LDcgJiM0Mzs0ODQsNiBAQCB2b2lkIGFmc19lZGl0X2Rpcl9yZW1vdmUoc3RydWN0IGFmc192bm9kZSAqdm5vZGUsXG4gXHRcdHBkZSA9IFx1MDAyNnBibG9jay1cdTAwM2VkaXJlbnRzW3BzXTtcbiBcdFx0cHJldl9uZXh0ID0gcGRlLVx1MDAzZXUuaGFzaF9uZXh0O1xuIFx0XHRpZiAocHJldl9uZXh0ICE9IGh0b25zKGVudHJ5KSkge1xuLVx0XHRcdGt1bm1hcF9sb2NhbChwYmxvY2spO1xuIFx0XHRcdHByX3dhcm4oXCYjMzQ7JWxseDolbGx4OiV4OiBub3QgcHJldiBpbiBjaGFpbiBiPSV4IHA9JXgsJXggZT0leCAlKnNcJiMzNDssXG4gXHRcdFx0XHR2bm9kZS1cdTAwM2VmaWQudmlkLCB2bm9kZS1cdTAwM2VmaWQudm5vZGUsIHZub2RlLVx1MDAzZWZpZC51bmlxdWUsXG4gXHRcdFx0XHRpdGVyLmJ1Y2tldCwgaXRlci5wcmV2X2VudHJ5LCBwcmV2X25leHQsIGVudHJ5LFxuQEAgLTQ5Myw3ICYjNDM7NDkxLDYgQEAgdm9pZCBhZnNfZWRpdF9kaXJfcmVtb3ZlKHN0cnVjdCBhZnNfdm5vZGUgKnZub2RlLFxuIFx0XHRcdGdvdG8gZXJyb3I7XG4gXHRcdH1cbiBcdFx0cGRlLVx1MDAzZXUuaGFzaF9uZXh0ID0gbmV4dDtcbi1cdFx0a3VubWFwX2xvY2FsKHBibG9jayk7XG4gXHR9XG4gXG4gXHRuZXRmc19zaW5nbGVfbWFya19pbm9kZV9kaXJ0eShcdTAwMjZ2bm9kZS1cdTAwM2VuZXRmcy5pbm9kZSk7XG5AQCAtNTAzLDE4ICYjNDM7NTAwLDE2IEBAIHZvaWQgYWZzX2VkaXRfZGlyX3JlbW92ZShzdHJ1Y3QgYWZzX3Zub2RlICp2bm9kZSxcbiBcdF9kZWJ1ZyhcJiMzNDtSZW1vdmUgJXMgZnJvbSAldVsldV1cJiMzNDssIG5hbWUtXHUwMDNlbmFtZSwgYiwgc2xvdCk7XG4gXG4gb3V0X3VubWFwOlxuJiM0MztcdGFmc19kaXJfZW5kX2l0ZXIoXHUwMDI2aXRlcik7XG4gXHRrdW5tYXBfbG9jYWwobWV0YSk7XG4gXHRfbGVhdmUoXCYjMzQ7XCYjMzQ7KTtcbiBcdHJldHVybjtcbiBcbiBhbHJlYWR5X2ludmFsaWRhdGVkOlxuLVx0a3VubWFwX2xvY2FsKGJsb2NrKTtcbiBcdHRyYWNlX2Fmc19lZGl0X2Rpcih2bm9kZSwgd2h5LCBhZnNfZWRpdF9kaXJfZGVsZXRlX2ludmFsLFxuIFx0XHRcdCAgIDAsIDAsIDAsIDAsIG5hbWUtXHUwMDNlbmFtZSk7XG4gXHRnb3RvIG91dF91bm1hcDtcbiBcbi1lcnJvcl91bm1hcDpcbi1cdGt1bm1hcF9sb2NhbChibG9jayk7XG4gZXJyb3I6XG4gXHR0cmFjZV9hZnNfZWRpdF9kaXIodm5vZGUsIHdoeSwgYWZzX2VkaXRfZGlyX2RlbGV0ZV9lcnJvcixcbiBcdFx0XHQgICAwLCAwLCAwLCAwLCBuYW1lLVx1MDAzZW5hbWUpO1xuZGlmZiAtLWdpdCBhL2ZzL2Fmcy9kaXJfc2VhcmNoLmMgYi9mcy9hZnMvZGlyX3NlYXJjaC5jXG5pbmRleCAxMDQ0MTFjMDY5MmY1Ny4uMTFlYmRmZmZjYjFkMzggMTAwNjQ0XG4tLS0gYS9mcy9hZnMvZGlyX3NlYXJjaC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9hZnMvZGlyX3NlYXJjaC5jXG5AQCAtNzUsMTAgJiM0Mzs3NSw3IEBAIHVuaW9uIGFmc194ZHJfZGlyX2Jsb2NrICphZnNfZGlyX2ZpbmRfYmxvY2soc3RydWN0IGFmc19kaXJfaXRlciAqaXRlciwgc2l6ZV90IGJsXG4gXG4gXHRfZW50ZXIoXCYjMzQ7JXp4LCVkXCYjMzQ7LCBibG9jaywgc2xvdCk7XG4gXG4tXHRpZiAoaXRlci1cdTAwM2VibG9jaykge1xuLVx0XHRrdW5tYXBfbG9jYWwoaXRlci1cdTAwM2VibG9jayk7XG4tXHRcdGl0ZXItXHUwMDNlYmxvY2sgPSBOVUxMO1xuLVx0fVxuJiM0MztcdGFmc19kaXJfZW5kX2l0ZXIoaXRlcik7XG4gXG4gXHRpZiAoZHZub2RlLVx1MDAzZWRpcmVjdG9yeV9zaXplIFx1MDAzYyBibGVuZClcbiBcdFx0Z290byBmYWlsO1xuQEAgLTE3MywxMiAmIzQzOzE3MCw4IEBAIGludCBhZnNfZGlyX3NlYXJjaF9idWNrZXQoc3RydWN0IGFmc19kaXJfaXRlciAqaXRlciwgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsXG4gXG4gXHRyZXQgPSAtRU5PRU5UO1xuIGZvdW5kOlxuLVx0aWYgKGl0ZXItXHUwMDNlYmxvY2spIHtcbi1cdFx0a3VubWFwX2xvY2FsKGl0ZXItXHUwMDNlYmxvY2spO1xuLVx0XHRpdGVyLVx1MDAzZWJsb2NrID0gTlVMTDtcbi1cdH1cbi1cbiBiYWQ6XG4mIzQzO1x0YWZzX2Rpcl9lbmRfaXRlcihpdGVyKTtcbiBcdGlmIChyZXQgPT0gLUVTVEFMRSlcbiBcdFx0YWZzX2ludmFsaWRhdGVfZGlyKGl0ZXItXHUwMDNlZHZub2RlLCBhZnNfZGlyX2ludmFsaWRfaXRlcl9zdGFsZSk7XG4gXHRfbGVhdmUoXCYjMzQ7ID0gJWRcJiMzNDssIHJldCk7XG5kaWZmIC0tZ2l0IGEvZnMvYWZzL2ZpbGUuYyBiL2ZzL2Fmcy9maWxlLmNcbmluZGV4IDA0Njc3NDJiZmVlZTM0Li5iYTQ0NDkzY2NhZjZlZSAxMDA2NDRcbi0tLSBhL2ZzL2Fmcy9maWxlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2Fmcy9maWxlLmNcbkBAIC00OSw2ICYjNDM7NDksOCBAQCBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBhZnNfZmlsZV9pbm9kZV9vcGVyYXRpb25zID0ge1xuIFx0LmdldGF0dHJcdD0gYWZzX2dldGF0dHIsXG4gXHQuc2V0YXR0clx0PSBhZnNfc2V0YXR0cixcbiBcdC5wZXJtaXNzaW9uXHQ9IGFmc19wZXJtaXNzaW9uLFxuJiM0MztcdC5pc19vd25lZF9ieV9tZVx0PSBhZnNfaXNfb3duZWRfYnlfbWUsXG4mIzQzO1x0LmhhdmVfc2FtZV9vd25lciA9IGFmc19oYXZlX3NhbWVfb3duZXIsXG4gfTtcbiBcbiBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGFmc19maWxlX2FvcHMgPSB7XG5kaWZmIC0tZ2l0IGEvZnMvYWZzL2ZzY2xpZW50LmMgYi9mcy9hZnMvZnNjbGllbnQuY1xuaW5kZXggYTJmZmQ2MDg4OWY4OWQuLjFhM2YxODZhNmExMTNkIDEwMDY0NFxuLS0tIGEvZnMvYWZzL2ZzY2xpZW50LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2Fmcy9mc2NsaWVudC5jXG5AQCAtNDc3LDYgJiM0Mzs0NzcsOSBAQCB2b2lkIGFmc19mc19mZXRjaF9kYXRhKHN0cnVjdCBhZnNfb3BlcmF0aW9uICpvcClcbiBcdGlmICghY2FsbClcbiBcdFx0cmV0dXJuIGFmc19vcF9ub21lbShvcCk7XG4gXG4mIzQzO1x0aWYgKG9wLVx1MDAzZWZsYWdzIFx1MDAyNiBBRlNfT1BFUkFUSU9OX0FTWU5DKVxuJiM0MztcdFx0Y2FsbC1cdTAwM2Vhc3luYyA9IHRydWU7XG4mIzQzO1xuIFx0LyogbWFyc2hhbGwgdGhlIHBhcmFtZXRlcnMgKi9cbiBcdGJwID0gY2FsbC1cdTAwM2VyZXF1ZXN0O1xuIFx0YnBbMF0gPSBodG9ubChGU0ZFVENIREFUQSk7XG5AQCAtNDg0LDcgJiM0Mzs0ODcsNyBAQCB2b2lkIGFmc19mc19mZXRjaF9kYXRhKHN0cnVjdCBhZnNfb3BlcmF0aW9uICpvcClcbiBcdGJwWzJdID0gaHRvbmwodnAtXHUwMDNlZmlkLnZub2RlKTtcbiBcdGJwWzNdID0gaHRvbmwodnAtXHUwMDNlZmlkLnVuaXF1ZSk7XG4gXHRicFs0XSA9IGh0b25sKGxvd2VyXzMyX2JpdHMoc3VicmVxLVx1MDAzZXN0YXJ0ICYjNDM7IHN1YnJlcS1cdTAwM2V0cmFuc2ZlcnJlZCkpO1xuLVx0YnBbNV0gPSBodG9ubChsb3dlcl8zMl9iaXRzKHN1YnJlcS1cdTAwM2VsZW4gICAmIzQzOyBzdWJyZXEtXHUwMDNldHJhbnNmZXJyZWQpKTtcbiYjNDM7XHRicFs1XSA9IGh0b25sKGxvd2VyXzMyX2JpdHMoc3VicmVxLVx1MDAzZWxlbiAgIC0gc3VicmVxLVx1MDAzZXRyYW5zZmVycmVkKSk7XG4gXG4gXHRjYWxsLVx1MDAzZWZpZCA9IHZwLVx1MDAzZWZpZDtcbiBcdHRyYWNlX2Fmc19tYWtlX2ZzX2NhbGwoY2FsbCwgXHUwMDI2dnAtXHUwMDNlZmlkKTtcbmRpZmYgLS1naXQgYS9mcy9hZnMvaW5vZGUuYyBiL2ZzL2Fmcy9pbm9kZS5jXG5pbmRleCAxNGYzOWE5YmVhNmNmZS4uYWY4NWE4OGQ5NDNkZDEgMTAwNjQ0XG4tLS0gYS9mcy9hZnMvaW5vZGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvYWZzL2lub2RlLmNcbkBAIC05MSw2ICYjNDM7OTEsNyBAQCBzdGF0aWMgaW50IGFmc19pbm9kZV9pbml0X2Zyb21fc3RhdHVzKHN0cnVjdCBhZnNfb3BlcmF0aW9uICpvcCxcbiBcdGlub2RlLVx1MDAzZWlfZmxhZ3MgfD0gU19OT0FUSU1FO1xuIFx0aW5vZGUtXHUwMDNlaV91aWQgPSBtYWtlX2t1aWQoXHUwMDI2aW5pdF91c2VyX25zLCBzdGF0dXMtXHUwMDNlb3duZXIpO1xuIFx0aW5vZGUtXHUwMDNlaV9naWQgPSBtYWtlX2tnaWQoXHUwMDI2aW5pdF91c2VyX25zLCBzdGF0dXMtXHUwMDNlZ3JvdXApO1xuJiM0MztcdGlub2RlLVx1MDAzZWlfb3BmbGFncyB8PSBJT1BfT1dORVJTSElQX09WRVJSSURFO1xuIFx0c2V0X25saW5rKFx1MDAyNnZub2RlLVx1MDAzZW5ldGZzLmlub2RlLCBzdGF0dXMtXHUwMDNlbmxpbmspO1xuIFxuIFx0aV9zaXplX3dyaXRlKGlub2RlLCBzdGF0dXMtXHUwMDNlc2l6ZSk7XG5kaWZmIC0tZ2l0IGEvZnMvYWZzL2ludGVybmFsLmggYi9mcy9hZnMvaW50ZXJuYWwuaFxuaW5kZXggNjAxZjAxZTVjMTVmY2MuLjQwZTVjZTYxOTQ3NjIxIDEwMDY0NFxuLS0tIGEvZnMvYWZzL2ludGVybmFsLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2Fmcy9pbnRlcm5hbC5oXG5AQCAtMTEzMyw2ICYjNDM7MTEzMywxNCBAQCBpbnQgYWZzX2Rpcl9zZWFyY2hfYnVja2V0KHN0cnVjdCBhZnNfZGlyX2l0ZXIgKml0ZXIsIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lLFxuIGludCBhZnNfZGlyX3NlYXJjaChzdHJ1Y3QgYWZzX3Zub2RlICpkdm5vZGUsIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lLFxuIFx0XHQgICBzdHJ1Y3QgYWZzX2ZpZCAqX2ZpZCwgYWZzX2RhdGF2ZXJzaW9uX3QgKl9kaXJfdmVyc2lvbik7XG4gXG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBhZnNfZGlyX2VuZF9pdGVyKHN0cnVjdCBhZnNfZGlyX2l0ZXIgKml0ZXIpXG4mIzQzO3tcbiYjNDM7XHRpZiAoaXRlci1cdTAwM2VibG9jaykge1xuJiM0MztcdFx0a3VubWFwX2xvY2FsKGl0ZXItXHUwMDNlYmxvY2spO1xuJiM0MztcdFx0aXRlci1cdTAwM2VibG9jayA9IE5VTEw7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuIC8qXG4gICogZGlyX3NpbGx5LmNcbiAgKi9cbkBAIC0xNDIxLDcgJiM0MzsxNDI5LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGFmc19tYWtlX29wX2NhbGwoc3RydWN0IGFmc19vcGVyYXRpb24gKm9wLCBzdHJ1Y3QgYWZzX2NhbGwgKmNcbiB7XG4gXHRzdHJ1Y3QgYWZzX2FkZHJfbGlzdCAqYWxpc3QgPSBvcC1cdTAwM2Vlc3RhdGUtXHUwMDNlYWRkcmVzc2VzO1xuIFxuLVx0b3AtXHUwMDNlY2FsbFx0PSBjYWxsO1xuJiM0MztcdG9wLVx1MDAzZWNhbGxcdD0gYWZzX2dldF9jYWxsKGNhbGwsIGFmc19jYWxsX3RyYWNlX2dldCk7XG4gXHRvcC1cdTAwM2V0eXBlXHQ9IGNhbGwtXHUwMDNldHlwZTtcbiBcdGNhbGwtXHUwMDNlb3BcdD0gb3A7XG4gXHRjYWxsLVx1MDAzZWtleVx0PSBvcC1cdTAwM2VrZXk7XG5AQCAtMTQyOSw2ICYjNDM7MTQzNyw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBhZnNfbWFrZV9vcF9jYWxsKHN0cnVjdCBhZnNfb3BlcmF0aW9uICpvcCwgc3RydWN0IGFmc19jYWxsICpjXG4gXHRjYWxsLVx1MDAzZXBlZXJcdD0gcnhycGNfa2VybmVsX2dldF9wZWVyKGFsaXN0LVx1MDAzZWFkZHJzW29wLVx1MDAzZWFkZHJfaW5kZXhdLnBlZXIpO1xuIFx0Y2FsbC1cdTAwM2VzZXJ2aWNlX2lkID0gb3AtXHUwMDNlc2VydmVyLVx1MDAzZXNlcnZpY2VfaWQ7XG4gXHRhZnNfbWFrZV9jYWxsKGNhbGwsIGdmcCk7XG4mIzQzO1x0YWZzX3B1dF9jYWxsKGNhbGwpO1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgYWZzX2V4dHJhY3RfYmVnaW4oc3RydWN0IGFmc19jYWxsICpjYWxsLCB2b2lkICpidWYsIHNpemVfdCBzaXplKVxuQEAgLTE1MzAsNiAmIzQzOzE1MzksOSBAQCBleHRlcm4gc3RydWN0IGtleSAqYWZzX3JlcXVlc3Rfa2V5KHN0cnVjdCBhZnNfY2VsbCAqKTtcbiBleHRlcm4gc3RydWN0IGtleSAqYWZzX3JlcXVlc3Rfa2V5X3JjdShzdHJ1Y3QgYWZzX2NlbGwgKik7XG4gZXh0ZXJuIGludCBhZnNfY2hlY2tfcGVybWl0KHN0cnVjdCBhZnNfdm5vZGUgKiwgc3RydWN0IGtleSAqLCBhZnNfYWNjZXNzX3QgKik7XG4gZXh0ZXJuIGludCBhZnNfcGVybWlzc2lvbihzdHJ1Y3QgbW50X2lkbWFwICosIHN0cnVjdCBpbm9kZSAqLCBpbnQpO1xuJiM0MztpbnQgYWZzX2lzX293bmVkX2J5X21lKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbiYjNDM7aW50IGFmc19oYXZlX3NhbWVfb3duZXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUxLFxuJiM0MztcdFx0XHRzdHJ1Y3QgaW5vZGUgKmlub2RlMik7XG4gZXh0ZXJuIHZvaWQgX19leGl0IGFmc19jbGVhbl91cF9wZXJtaXRfY2FjaGUodm9pZCk7XG4gXG4gLypcbmRpZmYgLS1naXQgYS9mcy9hZnMvc2VjdXJpdHkuYyBiL2ZzL2Fmcy9zZWN1cml0eS5jXG5pbmRleCA2ZDAwZDYyYTY1ZWRmNi4uNzA5MmY1YWNkY2Q2YWMgMTAwNjQ0XG4tLS0gYS9mcy9hZnMvc2VjdXJpdHkuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvYWZzL3NlY3VyaXR5LmNcbkBAIC01MTAsNiAmIzQzOzUxMCw1MiBAQCBpbnQgYWZzX3Blcm1pc3Npb24oc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiYjNDM7LypcbiYjNDM7ICogRGV0ZXJtaW5lIGlmIGFuIGlub2RlIGlzIG93bmVkIGJ5ICYjMzk7bWUmIzM5OyAtIHdoYXRldmVyIHRoYXQgbWVhbnMgZm9yIHRoZVxuJiM0MzsgKiBmaWxlc3lzdGVtLiAgSW4gdGhlIGNhc2Ugb2YgQUZTLCB0aGlzIG1lYW5zIHRoYXQgdGhlIGZpbGUgaXMgb3duZWQgYnkgdGhlXG4mIzQzOyAqIEFGUyB1c2VyIHJlcHJlc2VudGVkIGJ5IHRoZSBSeCBTZWN1cml0eSBDbGFzcyB0b2tlbiBoZWxkIGluIGEga2V5LiAgUmV0dXJuc1xuJiM0MzsgKiAwIGlmIG93bmVkIGJ5IG1lLCAxIGlmIG5vdDsgY2FuIGFsc28gcmV0dXJuIGFuIGVycm9yLlxuJiM0MzsgKi9cbiYjNDM7aW50IGFmc19pc19vd25lZF9ieV9tZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBhZnNfdm5vZGUgKnZub2RlID0gQUZTX0ZTX0koaW5vZGUpO1xuJiM0MztcdGFmc19hY2Nlc3NfdCBhY2Nlc3M7XG4mIzQzO1x0c3RydWN0IGtleSAqa2V5O1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGlmIChTX0lTRElSKGlub2RlLVx1MDAzZWlfbW9kZSkpXG4mIzQzO1x0XHRyZXR1cm4gMTsgLyogVGhlIEFETUlOIHJpZ2h0IGNoZWNrIGRvZXNuJiMzOTt0IHdvcmsgZm9yIGRpcmVjdG9yaWVzLiAqL1xuJiM0MztcbiYjNDM7XHRrZXkgPSBhZnNfcmVxdWVzdF9rZXkodm5vZGUtXHUwMDNldm9sdW1lLVx1MDAzZWNlbGwpO1xuJiM0MztcdGlmIChJU19FUlIoa2V5KSlcbiYjNDM7XHRcdHJldHVybiBQVFJfRVJSKGtleSk7XG4mIzQzO1xuJiM0MztcdC8qIEdldCB0aGUgYWNjZXNzIHJpZ2h0cyBmb3IgdGhlIGtleSBvbiB0aGlzIGZpbGUuICovXG4mIzQzO1x0cmV0ID0gYWZzX2NoZWNrX3Blcm1pdCh2bm9kZSwga2V5LCBcdTAwMjZhY2Nlc3MpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycm9yO1xuJiM0MztcbiYjNDM7XHQvKiBXZSBnZXQgdGhlIEFETUlOSVNURVIgYml0IGlmIHdlIG93biB0aGUgZmlsZS4gKi9cbiYjNDM7XHRyZXQgPSAoYWNjZXNzIFx1MDAyNiBBRlNfQUNFX0FETUlOSVNURVIpID8gMCA6IDE7XG4mIzQzO2Vycm9yOlxuJiM0MztcdGtleV9wdXQoa2V5KTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBEZXRlcm1pbmUgaWYgYSBmaWxlIGhhcyB0aGUgc2FtZSBvd25lciBhcyBpdHMgcGFyZW50IC0gd2hhdGV2ZXIgdGhhdCBtZWFuc1xuJiM0MzsgKiBmb3IgdGhlIGZpbGVzeXN0ZW0uICBJbiB0aGUgY2FzZSBvZiBBRlMsIHRoaXMgbWVhbnMgY29tcGFyaW5nIHRoZWlyIEFGU1xuJiM0MzsgKiBVSURzLiAgUmV0dXJucyAwIGlmIHNhbWUsIDEgaWYgbm90IHNhbWU7IGNhbiBhbHNvIHJldHVybiBhbiBlcnJvci5cbiYjNDM7ICovXG4mIzQzO2ludCBhZnNfaGF2ZV9zYW1lX293bmVyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlMSxcbiYjNDM7XHRcdFx0c3RydWN0IGlub2RlICppbm9kZTIpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgYWZzX3Zub2RlICp2bm9kZTEgPSBBRlNfRlNfSShpbm9kZTEpO1xuJiM0MztcdGNvbnN0IHN0cnVjdCBhZnNfdm5vZGUgKnZub2RlMiA9IEFGU19GU19JKGlub2RlMik7XG4mIzQzO1xuJiM0MztcdHJldHVybiB2bm9kZTEtXHUwMDNlc3RhdHVzLm93bmVyICE9IHZub2RlMi1cdTAwM2VzdGF0dXMub3duZXI7XG4mIzQzO31cbiYjNDM7XG4gdm9pZCBfX2V4aXQgYWZzX2NsZWFuX3VwX3Blcm1pdF9jYWNoZSh2b2lkKVxuIHtcbiBcdGludCBpO1xuZGlmZiAtLWdpdCBhL2ZzL2F0dHIuYyBiL2ZzL2F0dHIuY1xuaW5kZXggNGY0MzdmYWJiN2YwZjUuLmI3ZThiNWQ0OWE5ZmU2IDEwMDY0NFxuLS0tIGEvZnMvYXR0ci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9hdHRyLmNcbkBAIC0xNiw2ICYjNDM7MTYsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZjbnRsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9maWxlbG9jay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2VjdXJpdHkuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcJiMzNDtpbnRlcm5hbC5oXCYjMzQ7XG4gXG4gLyoqXG4gICogc2V0YXR0cl9zaG91bGRfZHJvcF9zZ2lkIC0gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIHNldGdpZCBiaXQgbmVlZHMgdG8gYmVcbkBAIC05MSwxOSAmIzQzOzkyLDIxIEBAIEVYUE9SVF9TWU1CT0woc2V0YXR0cl9zaG91bGRfZHJvcF9zdWlkZ2lkKTtcbiAgKiBwZXJtaXNzaW9ucy4gT24gbm9uLWlkbWFwcGVkIG1vdW50cyBvciBpZiBwZXJtaXNzaW9uIGNoZWNraW5nIGlzIHRvIGJlXG4gICogcGVyZm9ybWVkIG9uIHRoZSByYXcgaW5vZGUgc2ltcGx5IHBhc3MgQG5vcF9tbnRfaWRtYXAuXG4gICovXG4tc3RhdGljIGJvb2wgY2hvd25fb2soc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4tXHRcdCAgICAgY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSwgdmZzdWlkX3QgaWFfdmZzdWlkKVxuJiM0MztzdGF0aWMgaW50IGNob3duX29rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuJiM0MztcdFx0ICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsIHZmc3VpZF90IGlhX3Zmc3VpZClcbiB7XG4gXHR2ZnN1aWRfdCB2ZnN1aWQgPSBpX3VpZF9pbnRvX3Zmc3VpZChpZG1hcCwgaW5vZGUpO1xuLVx0aWYgKHZmc3VpZF9lcV9rdWlkKHZmc3VpZCwgY3VycmVudF9mc3VpZCgpKSBcdTAwMjZcdTAwMjZcbi1cdCAgICB2ZnN1aWRfZXEoaWFfdmZzdWlkLCB2ZnN1aWQpKVxuLVx0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWUoaWRtYXAsIGlub2RlKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYz0gMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4gXHRpZiAoY2FwYWJsZV93cnRfaW5vZGVfdWlkZ2lkKGlkbWFwLCBpbm9kZSwgQ0FQX0NIT1dOKSlcbi1cdFx0cmV0dXJuIHRydWU7XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiBcdGlmICghdmZzdWlkX3ZhbGlkKHZmc3VpZCkgXHUwMDI2XHUwMDI2XG4gXHQgICAgbnNfY2FwYWJsZShpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfdXNlcl9ucywgQ0FQX0NIT1dOKSlcbi1cdFx0cmV0dXJuIHRydWU7XG4tXHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHRyZXR1cm4gLUVQRVJNO1xuIH1cbiBcbiAvKipcbkBAIC0xMTgsMjMgJiM0MzsxMjEsMjcgQEAgc3RhdGljIGJvb2wgY2hvd25fb2soc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4gICogcGVybWlzc2lvbnMuIE9uIG5vbi1pZG1hcHBlZCBtb3VudHMgb3IgaWYgcGVybWlzc2lvbiBjaGVja2luZyBpcyB0byBiZVxuICAqIHBlcmZvcm1lZCBvbiB0aGUgcmF3IGlub2RlIHNpbXBseSBwYXNzIEBub3BfbW50X2lkbWFwLlxuICAqL1xuLXN0YXRpYyBib29sIGNoZ3JwX29rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuLVx0XHQgICAgIGNvbnN0IHN0cnVjdCBpbm9kZSAqaW5vZGUsIHZmc2dpZF90IGlhX3Zmc2dpZClcbiYjNDM7c3RhdGljIGludCBjaGdycF9vayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiYjNDM7XHRcdCAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLCB2ZnNnaWRfdCBpYV92ZnNnaWQpXG4ge1xuIFx0dmZzZ2lkX3QgdmZzZ2lkID0gaV9naWRfaW50b192ZnNnaWQoaWRtYXAsIGlub2RlKTtcbi1cdHZmc3VpZF90IHZmc3VpZCA9IGlfdWlkX2ludG9fdmZzdWlkKGlkbWFwLCBpbm9kZSk7XG4tXHRpZiAodmZzdWlkX2VxX2t1aWQodmZzdWlkLCBjdXJyZW50X2ZzdWlkKCkpKSB7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gdmZzX2lub2RlX2lzX293bmVkX2J5X21lKGlkbWFwLCBpbm9kZSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0aWYgKHJldCA9PSAwKSB7XG4gXHRcdGlmICh2ZnNnaWRfZXEoaWFfdmZzZ2lkLCB2ZnNnaWQpKVxuLVx0XHRcdHJldHVybiB0cnVlO1xuJiM0MztcdFx0XHRyZXR1cm4gMDtcbiBcdFx0aWYgKHZmc2dpZF9pbl9ncm91cF9wKGlhX3Zmc2dpZCkpXG4tXHRcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1x0XHRcdHJldHVybiAwO1xuIFx0fVxuIFx0aWYgKGNhcGFibGVfd3J0X2lub2RlX3VpZGdpZChpZG1hcCwgaW5vZGUsIENBUF9DSE9XTikpXG4tXHRcdHJldHVybiB0cnVlO1xuJiM0MztcdFx0cmV0dXJuIDA7XG4gXHRpZiAoIXZmc2dpZF92YWxpZCh2ZnNnaWQpIFx1MDAyNlx1MDAyNlxuIFx0ICAgIG5zX2NhcGFibGUoaW5vZGUtXHUwMDNlaV9zYi1cdTAwM2VzX3VzZXJfbnMsIENBUF9DSE9XTikpXG4tXHRcdHJldHVybiB0cnVlO1xuLVx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0cmV0dXJuIC1FUEVSTTtcbiB9XG4gXG4gLyoqXG5AQCAtMTYzLDYgJiM0MzsxNzAsNyBAQCBpbnQgc2V0YXR0cl9wcmVwYXJlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4ge1xuIFx0c3RydWN0IGlub2RlICppbm9kZSA9IGRfaW5vZGUoZGVudHJ5KTtcbiBcdHVuc2lnbmVkIGludCBpYV92YWxpZCA9IGF0dHItXHUwMDNlaWFfdmFsaWQ7XG4mIzQzO1x0aW50IHJldDtcbiBcbiBcdC8qXG4gXHQgKiBGaXJzdCBjaGVjayBzaXplIGNvbnN0cmFpbnRzLiAgVGhlc2UgY2FuJiMzOTt0IGJlIG92ZXJyaWRkZW4gdXNpbmdcbkBAIC0xODksMTQgJiM0MzsxOTcsMTggQEAgaW50IHNldGF0dHJfcHJlcGFyZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuIFx0XHRnb3RvIGtpbGxfcHJpdjtcbiBcbiBcdC8qIE1ha2Ugc3VyZSBhIGNhbGxlciBjYW4gY2hvd24uICovXG4tXHRpZiAoKGlhX3ZhbGlkIFx1MDAyNiBBVFRSX1VJRCkgXHUwMDI2XHUwMDI2XG4tXHQgICAgIWNob3duX29rKGlkbWFwLCBpbm9kZSwgYXR0ci1cdTAwM2VpYV92ZnN1aWQpKVxuLVx0XHRyZXR1cm4gLUVQRVJNO1xuJiM0MztcdGlmIChpYV92YWxpZCBcdTAwMjYgQVRUUl9VSUQpIHtcbiYjNDM7XHRcdHJldCA9IGNob3duX29rKGlkbWFwLCBpbm9kZSwgYXR0ci1cdTAwM2VpYV92ZnN1aWQpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHR9XG4gXG4gXHQvKiBNYWtlIHN1cmUgY2FsbGVyIGNhbiBjaGdycC4gKi9cbi1cdGlmICgoaWFfdmFsaWQgXHUwMDI2IEFUVFJfR0lEKSBcdTAwMjZcdTAwMjZcbi1cdCAgICAhY2hncnBfb2soaWRtYXAsIGlub2RlLCBhdHRyLVx1MDAzZWlhX3Zmc2dpZCkpXG4tXHRcdHJldHVybiAtRVBFUk07XG4mIzQzO1x0aWYgKGlhX3ZhbGlkIFx1MDAyNiBBVFRSX0dJRCkge1xuJiM0MztcdFx0cmV0ID0gY2hncnBfb2soaWRtYXAsIGlub2RlLCBhdHRyLVx1MDAzZWlhX3Zmc2dpZCk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdH1cbiBcbiBcdC8qIE1ha2Ugc3VyZSBhIGNhbGxlciBjYW4gY2htb2QuICovXG4gXHRpZiAoaWFfdmFsaWQgXHUwMDI2IEFUVFJfTU9ERSkge1xuZGlmZiAtLWdpdCBhL2ZzL2NvcmVkdW1wLmMgYi9mcy9jb3JlZHVtcC5jXG5pbmRleCBlNjhhNzZmZjkyYTM4Ni4uM2YzMmU3M2FhZWRhMjggMTAwNjQ0XG4tLS0gYS9mcy9jb3JlZHVtcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9jb3JlZHVtcC5jXG5AQCAtOTU0LDcgJiM0Mzs5NTQsNyBAQCBzdGF0aWMgYm9vbCBjb3JlZHVtcF9maWxlKHN0cnVjdCBjb3JlX25hbWUgKmNuLCBzdHJ1Y3QgY29yZWR1bXBfcGFyYW1zICpjcHJtLFxuIFx0ICogZmlsZXN5c3RlbS5cbiBcdCAqL1xuIFx0aWRtYXAgPSBmaWxlX21udF9pZG1hcChmaWxlKTtcbi1cdGlmICghdmZzdWlkX2VxX2t1aWQoaV91aWRfaW50b192ZnN1aWQoaWRtYXAsIGlub2RlKSwgY3VycmVudF9mc3VpZCgpKSkge1xuJiM0MztcdGlmICh2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWUoaWRtYXAsIGlub2RlKSAhPSAwKSB7XG4gXHRcdGNvcmVkdW1wX3JlcG9ydF9mYWlsdXJlKFwmIzM0O0NvcmUgZHVtcCB0byAlcyBhYm9ydGVkOiBjYW5ub3QgcHJlc2VydmUgZmlsZSBvd25lclwmIzM0OywgY24tXHUwMDNlY29yZW5hbWUpO1xuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvZnMvaW5vZGUuYyBiL2ZzL2lub2RlLmNcbmluZGV4IDMxYzViOWVlM2E4MWRmLi5hN2VjODMwYWI2ODNmMCAxMDA2NDRcbi0tLSBhL2ZzL2lub2RlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2lub2RlLmNcbkBAIC0yNzUwLDE2ICYjNDM7Mjc1MCwxOSBAQCBFWFBPUlRfU1lNQk9MKGlub2RlX2luaXRfb3duZXIpO1xuICAqIE9uIG5vbi1pZG1hcHBlZCBtb3VudHMgb3IgaWYgcGVybWlzc2lvbiBjaGVja2luZyBpcyB0byBiZSBwZXJmb3JtZWQgb24gdGhlXG4gICogcmF3IGlub2RlIHNpbXBseSBwYXNzIEBub3BfbW50X2lkbWFwLlxuICAqL1xuLWJvb2wgaW5vZGVfb3duZXJfb3JfY2FwYWJsZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbi1cdFx0XHQgICAgY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSlcbiYjNDM7Ym9vbCBpbm9kZV9vd25lcl9vcl9jYXBhYmxlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIHtcbiBcdHZmc3VpZF90IHZmc3VpZDtcbiBcdHN0cnVjdCB1c2VyX25hbWVzcGFjZSAqbnM7XG4mIzQzO1x0aW50IHJldDtcbiBcbi1cdHZmc3VpZCA9IGlfdWlkX2ludG9fdmZzdWlkKGlkbWFwLCBpbm9kZSk7XG4tXHRpZiAodmZzdWlkX2VxX2t1aWQodmZzdWlkLCBjdXJyZW50X2ZzdWlkKCkpKVxuJiM0MztcdHJldCA9IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShpZG1hcCwgaW5vZGUpO1xuJiM0MztcdGlmIChyZXQgPT0gMClcbiBcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiBcbiYjNDM7XHR2ZnN1aWQgPSBpX3VpZF9pbnRvX3Zmc3VpZChpZG1hcCwgaW5vZGUpO1xuIFx0bnMgPSBjdXJyZW50X3VzZXJfbnMoKTtcbiBcdGlmICh2ZnN1aWRfaGFzX21hcHBpbmcobnMsIHZmc3VpZCkgXHUwMDI2XHUwMDI2IG5zX2NhcGFibGUobnMsIENBUF9GT1dORVIpKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbmRpZmYgLS1naXQgYS9mcy9pbnRlcm5hbC5oIGIvZnMvaW50ZXJuYWwuaFxuaW5kZXggMzU1ZDkzZjkyMjA4NjEuLmJlNDVjYzYzODg2MTkyIDEwMDY0NFxuLS0tIGEvZnMvaW50ZXJuYWwuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZnMvaW50ZXJuYWwuaFxuQEAgLTUxLDYgJiM0Mzs1MSw3IEBAIGV4dGVybiBpbnQgZmluaXNoX2NsZWFuX2NvbnRleHQoc3RydWN0IGZzX2NvbnRleHQgKmZjKTtcbiAvKlxuICAqIG5hbWVpLmNcbiAgKi9cbiYjNDM7aW50IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSk7XG4gZXh0ZXJuIGludCBmaWxlbmFtZV9sb29rdXAoaW50IGRmZCwgc3RydWN0IGZpbGVuYW1lICpuYW1lLCB1bnNpZ25lZCBmbGFncyxcbiBcdFx0XHQgICBzdHJ1Y3QgcGF0aCAqcGF0aCwgY29uc3Qgc3RydWN0IHBhdGggKnJvb3QpO1xuIGludCBmaWxlbmFtZV9ybWRpcihpbnQgZGZkLCBzdHJ1Y3QgZmlsZW5hbWUgKm5hbWUpO1xuZGlmZiAtLWdpdCBhL2ZzL2xvY2tzLmMgYi9mcy9sb2Nrcy5jXG5pbmRleCA2ZTRmZjdmY2VjMDUzZS4uMDJmODEwZGM5ZTdlN2EgMTAwNjQ0XG4tLS0gYS9mcy9sb2Nrcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9sb2Nrcy5jXG5AQCAtNjgsNiAmIzQzOzY4LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2N0cmFjZS9ldmVudHMvZmlsZWxvY2suaFx1MDAzZVxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3VhY2Nlc3MuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcJiMzNDtpbnRlcm5hbC5oXCYjMzQ7XG4gXG4gc3RhdGljIHN0cnVjdCBmaWxlX2xvY2sgKmZpbGVfbG9jayhzdHJ1Y3QgZmlsZV9sb2NrX2NvcmUgKmZsYylcbiB7XG5AQCAtMjEzNiwxMCAmIzQzOzIxMzcsMTIgQEAgaW50XG4gdmZzX3NldGxlYXNlKHN0cnVjdCBmaWxlICpmaWxwLCBpbnQgYXJnLCBzdHJ1Y3QgZmlsZV9sZWFzZSAqKmxlYXNlLCB2b2lkICoqcHJpdilcbiB7XG4gXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZV9pbm9kZShmaWxwKTtcbi1cdHZmc3VpZF90IHZmc3VpZCA9IGlfdWlkX2ludG9fdmZzdWlkKGZpbGVfbW50X2lkbWFwKGZpbHApLCBpbm9kZSk7XG4gXHRpbnQgZXJyb3I7XG4gXG4tXHRpZiAoKCF2ZnN1aWRfZXFfa3VpZCh2ZnN1aWQsIGN1cnJlbnRfZnN1aWQoKSkpIFx1MDAyNlx1MDAyNiAhY2FwYWJsZShDQVBfTEVBU0UpKVxuJiM0MztcdGVycm9yID0gdmZzX2lub2RlX2lzX293bmVkX2J5X21lKGZpbGVfbW50X2lkbWFwKGZpbHApLCBpbm9kZSk7XG4mIzQzO1x0aWYgKGVycm9yIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIGVycm9yO1xuJiM0MztcdGlmIChlcnJvciAhPSAwIFx1MDAyNlx1MDAyNiAhY2FwYWJsZShDQVBfTEVBU0UpKVxuIFx0XHRyZXR1cm4gLUVBQ0NFUztcbiBcdGVycm9yID0gc2VjdXJpdHlfZmlsZV9sb2NrKGZpbHAsIGFyZyk7XG4gXHRpZiAoZXJyb3IpXG5kaWZmIC0tZ2l0IGEvZnMvbmFtZWkuYyBiL2ZzL25hbWVpLmNcbmluZGV4IDE5Y2U0M2M5YTZlNjYyLi43MmY5NGQyMDRmOTNmNCAxMDA2NDRcbi0tLSBhL2ZzL25hbWVpLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL25hbWVpLmNcbkBAIC01NSw4ICYjNDM7NTUsOCBAQFxuICAqIFRoZSBuZXcgY29kZSByZXBsYWNlcyB0aGUgb2xkIHJlY3Vyc2l2ZSBzeW1saW5rIHJlc29sdXRpb24gd2l0aFxuICAqIGFuIGl0ZXJhdGl2ZSBvbmUgKGluIGNhc2Ugb2Ygbm9uLW5lc3RlZCBzeW1saW5rIGNoYWlucykuICBJdCBkb2VzXG4gICogdGhpcyB3aXRoIGNhbGxzIHRvIFx1MDAzY2ZzXHUwMDNlX2ZvbGxvd19saW5rKCkuXG4tICogQXMgYSBzaWRlIGVmZmVjdCwgZGlyX25hbWVpKCksIF9uYW1laSgpIGFuZCBmb2xsb3dfbGluaygpIGFyZSBub3cgXG4tICogcmVwbGFjZWQgd2l0aCBhIHNpbmdsZSBmdW5jdGlvbiBsb29rdXBfZGVudHJ5KCkgdGhhdCBjYW4gaGFuZGxlIGFsbCBcbiYjNDM7ICogQXMgYSBzaWRlIGVmZmVjdCwgZGlyX25hbWVpKCksIF9uYW1laSgpIGFuZCBmb2xsb3dfbGluaygpIGFyZSBub3dcbiYjNDM7ICogcmVwbGFjZWQgd2l0aCBhIHNpbmdsZSBmdW5jdGlvbiBsb29rdXBfZGVudHJ5KCkgdGhhdCBjYW4gaGFuZGxlIGFsbFxuICAqIHRoZSBzcGVjaWFsIGNhc2VzIG9mIHRoZSBmb3JtZXIgY29kZS5cbiAgKlxuICAqIFdpdGggdGhlIG5ldyBkY2FjaGUsIHRoZSBwYXRobmFtZSBpcyBzdG9yZWQgYXQgZWFjaCBpbm9kZSwgYXQgbGVhc3QgYXNcbkBAIC0xMjU1LDYgJiM0MzsxMjU1LDcyIEBAIGZzX2luaXRjYWxsKGluaXRfZnNfbmFtZWlfc3lzY3Rscyk7XG4gXG4gI2VuZGlmIC8qIENPTkZJR19TWVNDVEwgKi9cbiBcbiYjNDM7LypcbiYjNDM7ICogRGV0ZXJtaW5lIGlmIGFuIGlub2RlIGlzIG93bmVkIGJ5IHRoZSBwcm9jZXNzIChhbGxvd2luZyBmb3IgZnN1aWQgb3ZlcnJpZGUpLFxuJiM0MzsgKiByZXR1cm5pbmcgMCBpZiBzbywgMSBpZiBub3QgYW5kIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBpZiB0aGVyZSB3YXMgYSBwcm9ibGVtXG4mIzQzOyAqIG1ha2luZyB0aGUgZGV0ZXJtaW5hdGlvbi5cbiYjNDM7ICovXG4mIzQzO2ludCB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4mIzQzO3tcbiYjNDM7XHRpZiAodW5saWtlbHkoaW5vZGUtXHUwMDNlaV9vcGZsYWdzIFx1MDAyNiBJT1BfT1dORVJTSElQX09WRVJSSURFKSlcbiYjNDM7XHRcdHJldHVybiBpbm9kZS1cdTAwM2VpX29wLVx1MDAzZWlzX293bmVkX2J5X21lKGlkbWFwLCBpbm9kZSk7XG4mIzQzO1x0aWYgKHZmc3VpZF9lcV9rdWlkKGlfdWlkX2ludG9fdmZzdWlkKGlkbWFwLCBpbm9kZSksIGN1cnJlbnRfZnN1aWQoKSkpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHRyZXR1cm4gMTsgLyogTm90IHNhbWUuICovXG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIERldGVybWluZSBpZiBhbiBpbm9kZSBoYXMgdGhlIHNhbWUgb3duZXIgYXMgaXRzIHBhcmVudCBkaXJlY3RvcnksIHJldHVybmluZ1xuJiM0MzsgKiAwIGlmIHNvLCAxIGlmIG5vdCBhbmQgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIGlmIHRoZXJlIHdhcyBhIHByb2JsZW0gbWFraW5nXG4mIzQzOyAqIHRoZSBkZXRlcm1pbmF0aW9uLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB2ZnNfaW5vZGVfYW5kX2Rpcl9oYXZlX3NhbWVfb3duZXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4mIzQzO1x0XHRcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBuYW1laWRhdGEgKm5kKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKHVubGlrZWx5KGlub2RlLVx1MDAzZWlfb3BmbGFncyBcdTAwMjYgSU9QX09XTkVSU0hJUF9PVkVSUklERSkpIHtcbiYjNDM7XHRcdHN0cnVjdCBkZW50cnkgKnBhcmVudDtcbiYjNDM7XHRcdHN0cnVjdCBpbm9kZSAqZGlyO1xuJiM0MztcdFx0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoaW5vZGUgIT0gbmQtXHUwMDNlaW5vZGUpIHtcbiYjNDM7XHRcdFx0ZGlyID0gbmQtXHUwMDNlaW5vZGU7XG4mIzQzO1x0XHRcdHJldCA9IGlub2RlLVx1MDAzZWlfb3AtXHUwMDNlaGF2ZV9zYW1lX293bmVyKGlkbWFwLCBpbm9kZSwgZGlyKTtcbiYjNDM7XHRcdH0gZWxzZSBpZiAobmQtXHUwMDNlZmxhZ3MgXHUwMDI2IExPT0tVUF9SQ1UpIHtcbiYjNDM7XHRcdFx0cGFyZW50ID0gUkVBRF9PTkNFKG5kLVx1MDAzZXBhdGguZGVudHJ5KTtcbiYjNDM7XHRcdFx0ZGlyID0gUkVBRF9PTkNFKHBhcmVudC1cdTAwM2VkX2lub2RlKTtcbiYjNDM7XHRcdFx0aWYgKCFkaXIpXG4mIzQzO1x0XHRcdFx0cmV0dXJuIC1FQ0hJTEQ7XG4mIzQzO1x0XHRcdHJldCA9IGlub2RlLVx1MDAzZWlfb3AtXHUwMDNlaGF2ZV9zYW1lX293bmVyKGlkbWFwLCBpbm9kZSwgZGlyKTtcbiYjNDM7XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdHBhcmVudCA9IGRnZXRfcGFyZW50KG5kLVx1MDAzZXBhdGguZGVudHJ5KTtcbiYjNDM7XHRcdFx0ZGlyID0gcGFyZW50LVx1MDAzZWRfaW5vZGU7XG4mIzQzO1x0XHRcdHJldCA9IGlub2RlLVx1MDAzZWlfb3AtXHUwMDNlaGF2ZV9zYW1lX293bmVyKGlkbWFwLCBpbm9kZSwgZGlyKTtcbiYjNDM7XHRcdFx0ZHB1dChwYXJlbnQpO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICh2ZnN1aWRfdmFsaWQobmQtXHUwMDNlZGlyX3Zmc3VpZCkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIHZmc3VpZF9lcShpX3VpZF9pbnRvX3Zmc3VpZChpZG1hcCwgaW5vZGUpLCBuZC1cdTAwM2VkaXJfdmZzdWlkKSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdHJldHVybiAxOyAvKiBOb3Qgc2FtZS4gKi9cbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogRGV0ZXJtaW5lIGlmIHR3byBpbm9kZXMgaGF2ZSB0aGUgc2FtZSBvd25lciwgcmV0dXJuaW5nIDAgaWYgc28sIDEgaWYgbm90IGFuZFxuJiM0MzsgKiBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgaWYgdGhlcmUgd2FzIGEgcHJvYmxlbSBtYWtpbmcgdGhlIGRldGVybWluYXRpb24uXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHZmc19pbm9kZXNfaGF2ZV9zYW1lX293bmVyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuJiM0MztcdFx0XHRcdCAgICAgIHN0cnVjdCBpbm9kZSAqZGlyKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKHVubGlrZWx5KGlub2RlLVx1MDAzZWlfb3BmbGFncyBcdTAwMjYgSU9QX09XTkVSU0hJUF9PVkVSUklERSkpXG4mIzQzO1x0XHRyZXR1cm4gaW5vZGUtXHUwMDNlaV9vcC1cdTAwM2VoYXZlX3NhbWVfb3duZXIoaWRtYXAsIGlub2RlLCBkaXIpO1xuJiM0MztcdGlmICh2ZnN1aWRfZXEoaV91aWRfaW50b192ZnN1aWQoaWRtYXAsIGlub2RlKSxcbiYjNDM7XHRcdCAgICAgIGlfdWlkX2ludG9fdmZzdWlkKGlkbWFwLCBkaXIpKSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdHJldHVybiAxOyAvKiBOb3Qgc2FtZS4gKi9cbiYjNDM7fVxuJiM0MztcbiAvKipcbiAgKiBtYXlfZm9sbG93X2xpbmsgLSBDaGVjayBzeW1saW5rIGZvbGxvd2luZyBmb3IgdW5zYWZlIHNpdHVhdGlvbnNcbiAgKiBAbmQ6IG5hbWVpZGF0YSBwYXRod2FsayBkYXRhXG5AQCAtMTI3MSwyNyAmIzQzOzEzMzcsMjggQEAgZnNfaW5pdGNhbGwoaW5pdF9mc19uYW1laV9zeXNjdGxzKTtcbiAgKlxuICAqIFJldHVybnMgMCBpZiBmb2xsb3dpbmcgdGhlIHN5bWxpbmsgaXMgYWxsb3dlZCwgLXZlIG9uIGVycm9yLlxuICAqL1xuLXN0YXRpYyBpbmxpbmUgaW50IG1heV9mb2xsb3dfbGluayhzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSlcbiYjNDM7c3RhdGljIGlubGluZSBpbnQgbWF5X2ZvbGxvd19saW5rKHN0cnVjdCBuYW1laWRhdGEgKm5kLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIHtcbiBcdHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwO1xuLVx0dmZzdWlkX3QgdmZzdWlkO1xuJiM0MztcdGludCByZXQ7XG4gXG4gXHRpZiAoIXN5c2N0bF9wcm90ZWN0ZWRfc3ltbGlua3MpXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0aWRtYXAgPSBtbnRfaWRtYXAobmQtXHUwMDNlcGF0aC5tbnQpO1xuLVx0dmZzdWlkID0gaV91aWRfaW50b192ZnN1aWQoaWRtYXAsIGlub2RlKTtcbi1cdC8qIEFsbG93ZWQgaWYgb3duZXIgYW5kIGZvbGxvd2VyIG1hdGNoLiAqL1xuLVx0aWYgKHZmc3VpZF9lcV9rdWlkKHZmc3VpZCwgY3VycmVudF9mc3VpZCgpKSlcbi1cdFx0cmV0dXJuIDA7XG4tXG4gXHQvKiBBbGxvd2VkIGlmIHBhcmVudCBkaXJlY3Rvcnkgbm90IHN0aWNreSBhbmQgd29ybGQtd3JpdGFibGUuICovXG4gXHRpZiAoKG5kLVx1MDAzZWRpcl9tb2RlIFx1MDAyNiAoU19JU1ZUWHxTX0lXT1RIKSkgIT0gKFNfSVNWVFh8U19JV09USCkpXG4gXHRcdHJldHVybiAwO1xuIFxuJiM0MztcdGlkbWFwID0gbW50X2lkbWFwKG5kLVx1MDAzZXBhdGgubW50KTtcbiYjNDM7XHQvKiBBbGxvd2VkIGlmIG93bmVyIGFuZCBmb2xsb3dlciBtYXRjaC4gKi9cbiYjNDM7XHRyZXQgPSB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWUoaWRtYXAsIGlub2RlKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYz0gMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuIFx0LyogQWxsb3dlZCBpZiBwYXJlbnQgZGlyZWN0b3J5IGFuZCBsaW5rIG93bmVyIG1hdGNoLiAqL1xuLVx0aWYgKHZmc3VpZF92YWxpZChuZC1cdTAwM2VkaXJfdmZzdWlkKSBcdTAwMjZcdTAwMjYgdmZzdWlkX2VxKG5kLVx1MDAzZWRpcl92ZnN1aWQsIHZmc3VpZCkpXG4tXHRcdHJldHVybiAwO1xuJiM0MztcdHJldCA9IHZmc19pbm9kZV9hbmRfZGlyX2hhdmVfc2FtZV9vd25lcihpZG1hcCwgaW5vZGUsIG5kKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYz0gMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4gXG4gXHRpZiAobmQtXHUwMDNlZmxhZ3MgXHUwMDI2IExPT0tVUF9SQ1UpXG4gXHRcdHJldHVybiAtRUNISUxEO1xuQEAgLTEzODksMTIgJiM0MzsxNDU2LDEyIEBAIGludCBtYXlfbGlua2F0KHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBjb25zdCBzdHJ1Y3QgcGF0aCAqbGluaylcbiAgKiBAaW5vZGU6IHRoZSBpbm9kZSBvZiB0aGUgZmlsZSB0byBvcGVuXG4gICpcbiAgKiBCbG9jayBhbiBPX0NSRUFUIG9wZW4gb2YgYSBGSUZPIChvciBhIHJlZ3VsYXIgZmlsZSkgd2hlbjpcbi0gKiAgIC0gc3lzY3RsX3Byb3RlY3RlZF9maWZvcyAob3Igc3lzY3RsX3Byb3RlY3RlZF9yZWd1bGFyKSBpcyBlbmFibGVkXG4tICogICAtIHRoZSBmaWxlIGFscmVhZHkgZXhpc3RzXG4tICogICAtIHdlIGFyZSBpbiBhIHN0aWNreSBkaXJlY3Rvcnlcbi0gKiAgIC0gd2UgZG9uJiMzOTt0IG93biB0aGUgZmlsZVxuJiM0MzsgKiAgIC0gc3lzY3RsX3Byb3RlY3RlZF9maWZvcyAob3Igc3lzY3RsX3Byb3RlY3RlZF9yZWd1bGFyKSBpcyBlbmFibGVkLFxuJiM0MzsgKiAgIC0gdGhlIGZpbGUgYWxyZWFkeSBleGlzdHMsXG4mIzQzOyAqICAgLSB3ZSBhcmUgaW4gYSBzdGlja3kgZGlyZWN0b3J5LFxuJiM0MzsgKiAgIC0gdGhlIGRpcmVjdG9yeSBpcyB3b3JsZCB3cml0YWJsZSxcbiYjNDM7ICogICAtIHdlIGRvbiYjMzk7dCBvd24gdGhlIGZpbGUgYW5kXG4gICogICAtIHRoZSBvd25lciBvZiB0aGUgZGlyZWN0b3J5IGRvZXNuJiMzOTt0IG93biB0aGUgZmlsZVxuLSAqICAgLSB0aGUgZGlyZWN0b3J5IGlzIHdvcmxkIHdyaXRhYmxlXG4gICogSWYgdGhlIHN5c2N0bF9wcm90ZWN0ZWRfZmlmb3MgKG9yIHN5c2N0bF9wcm90ZWN0ZWRfcmVndWxhcikgaXMgc2V0IHRvIDJcbiAgKiB0aGUgZGlyZWN0b3J5IGRvZXNuJiMzOTt0IGhhdmUgdG8gYmUgd29ybGQgd3JpdGFibGU6IGJlaW5nIGdyb3VwIHdyaXRhYmxlIHdpbGxcbiAgKiBiZSBlbm91Z2guXG5AQCAtMTQwNSwxMyAmIzQzOzE0NzIsNDUgQEAgaW50IG1heV9saW5rYXQoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIGNvbnN0IHN0cnVjdCBwYXRoICpsaW5rKVxuICAqIE9uIG5vbi1pZG1hcHBlZCBtb3VudHMgb3IgaWYgcGVybWlzc2lvbiBjaGVja2luZyBpcyB0byBiZSBwZXJmb3JtZWQgb24gdGhlXG4gICogcmF3IGlub2RlIHNpbXBseSBwYXNzIEBub3BfbW50X2lkbWFwLlxuICAqXG4mIzQzOyAqIEZvciBhIGZpbGVzeXN0ZW0gKGUuZy4gYSBuZXR3b3JrIGZpbGVzeXN0ZW0pIHRoYXQgaGFzIGEgc2VwYXJhdGUgSUQgc3BhY2VcbiYjNDM7ICogYW5kIGhhcyBmb3JlaWduIElEcyAobWF5YmUgZXZlbiBub24taW50ZWdlciBJRHMpLCBpX3VpZCBjYW5ub3QgYmUgY29tcGFyZWRcbiYjNDM7ICogdG8gY3VycmVudF9mc3VpZCgpIGFuZCBtYXkgbm90IGJlIGRpcmVjdGx5IGNvbXBhcmFibGUgdG8gYW5vdGhlciBpX3VpZC5cbiYjNDM7ICogSW5zdGVhZCwgdGhlIGZpbGVzeXN0ZW0gaXMgYXNrZWQgdG8gcGVyZm9ybSB0aGUgY29tcGFyaXNvbnMuICBXaXRoIG5ldHdvcmtcbiYjNDM7ICogZmlsZXN5c3RlbXMsIHRoZXJlIGFsc28gZXhpc3RzIHRoZSBwb3NzaWJpbGl0eSBvZiBkb2luZyBhbm9ueW1vdXNcbiYjNDM7ICogb3BlcmF0aW9ucyBhbmQgaGF2aW5nIGFub255bW91c2x5LW93bmVkIG9iamVjdHMuXG4mIzQzOyAqXG4mIzQzOyAqIFdlIGhhdmUgdGhlIGZvbGxvd2luZyBzY2VuYXJpb3M6XG4mIzQzOyAqXG4mIzQzOyAqXHRVU0VSXHRESVJcdEZJTEVcdEZJTEVcdEFMTE9XRURcbiYjNDM7ICpcdFx0T1dORVJcdE9XTkVSXHRTVEFURVxuJiM0MzsgKlx0PT09PT09PVx0PT09PT09PVx0PT09PT09PVx0PT09PT09PVx0PT09PT09PVxuJiM0MzsgKlx0QVx0QVx0LVx0TmV3XHRZZXNcbiYjNDM7ICpcdEFcdEFcdEFcdEV4aXN0c1x0WWVzXG4mIzQzOyAqXHRBXHRBXHRDXHRFeGlzdHNcdE5vXG4mIzQzOyAqXHRBXHRCXHQtXHROZXdcdFllc1xuJiM0MzsgKlx0QVx0Qlx0QVx0RXhpc3RzXHRZZXMsIEZPPT1VXG4mIzQzOyAqXHRBXHRCXHRCXHRFeGlzdHNcdFllcywgRk89PURPXG4mIzQzOyAqXHRBXHRCXHRDXHRFeGlzdHNcdE5vXG4mIzQzOyAqXHRBXHRhbm9uWzFdXHQtXHROZXdcdFllc1xuJiM0MzsgKlx0QVx0YW5vblsxXVx0QVx0RXhpc3RzXHRZZXNcbiYjNDM7ICpcdEFcdGFub25bMV1cdENcdEV4aXN0c1x0Tm9cbiYjNDM7ICpcdGFub25cdEFcdC1cdE5ld1x0WWVzXG4mIzQzOyAqXHRhbm9uXHRBXHRBXHRFeGlzdHNcdFllcywgRk89PURPXG4mIzQzOyAqXHRhbm9uXHRhbm9uWzFdXHQtXHROZXdcdFllc1xuJiM0MzsgKlx0YW5vblx0YW5vblsxXVx0LVx0RXhpc3RzXHROb1xuJiM0MzsgKlx0YW5vblx0QVx0QVx0RXhpc3RzXHRZZXMsIEZPPT1ET1xuJiM0MzsgKlx0YW5vblx0QVx0Q1x0RXhpc3RzXHROb1xuJiM0MzsgKlx0YW5vblx0QVx0YW5vblx0RXhpc3RzXHROb1xuJiM0MzsgKlxuJiM0MzsgKiBbMV0gQ2FuIGFub255bW91c2x5LW93bmVkIGRpcnMgYmUgc3RpY2t5P1xuJiM0MzsgKlxuICAqIFJldHVybnMgMCBpZiB0aGUgb3BlbiBpcyBhbGxvd2VkLCAtdmUgb24gZXJyb3IuXG4gICovXG4gc3RhdGljIGludCBtYXlfY3JlYXRlX2luX3N0aWNreShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IG5hbWVpZGF0YSAqbmQsXG4tXHRcdFx0XHRzdHJ1Y3QgaW5vZGUgKmNvbnN0IGlub2RlKVxuJiM0MztcdFx0XHRcdHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4ge1xuIFx0dW1vZGVfdCBkaXJfbW9kZSA9IG5kLVx1MDAzZWRpcl9tb2RlO1xuLVx0dmZzdWlkX3QgZGlyX3Zmc3VpZCA9IG5kLVx1MDAzZWRpcl92ZnN1aWQsIGlfdmZzdWlkO1xuJiM0MztcdGludCByZXQ7XG4gXG4gXHRpZiAobGlrZWx5KCEoZGlyX21vZGUgXHUwMDI2IFNfSVNWVFgpKSlcbiBcdFx0cmV0dXJuIDA7XG5AQCAtMTQyMiwxMyAmIzQzOzE1MjEsMTMgQEAgc3RhdGljIGludCBtYXlfY3JlYXRlX2luX3N0aWNreShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IG5hbWVpZGF0YSAqbmQsXG4gXHRpZiAoU19JU0ZJRk8oaW5vZGUtXHUwMDNlaV9tb2RlKSBcdTAwMjZcdTAwMjYgIXN5c2N0bF9wcm90ZWN0ZWRfZmlmb3MpXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0aV92ZnN1aWQgPSBpX3VpZF9pbnRvX3Zmc3VpZChpZG1hcCwgaW5vZGUpO1xuLVxuLVx0aWYgKHZmc3VpZF9lcShpX3Zmc3VpZCwgZGlyX3Zmc3VpZCkpXG4tXHRcdHJldHVybiAwO1xuJiM0MztcdHJldCA9IHZmc19pbm9kZV9hbmRfZGlyX2hhdmVfc2FtZV9vd25lcihpZG1hcCwgaW5vZGUsIG5kKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYz0gMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4gXG4tXHRpZiAodmZzdWlkX2VxX2t1aWQoaV92ZnN1aWQsIGN1cnJlbnRfZnN1aWQoKSkpXG4tXHRcdHJldHVybiAwO1xuJiM0MztcdHJldCA9IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShpZG1hcCwgaW5vZGUpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjPSAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiBcbiBcdGlmIChsaWtlbHkoZGlyX21vZGUgXHUwMDI2IDAwMDIpKSB7XG4gXHRcdGF1ZGl0X2xvZ19wYXRoX2RlbmllZChBVURJVF9BTk9NX0NSRUFULCBcJiMzNDtzdGlja3lfY3JlYXRlXCYjMzQ7KTtcbkBAIC0zNjQ1LDEyICYjNDM7Mzc0NCwxNCBAQCBFWFBPUlRfU1lNQk9MKHVzZXJfcGF0aF9hdCk7XG4gaW50IF9fY2hlY2tfc3RpY2t5KHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdFx0ICAgc3RydWN0IGlub2RlICppbm9kZSlcbiB7XG4tXHRrdWlkX3QgZnN1aWQgPSBjdXJyZW50X2ZzdWlkKCk7XG4mIzQzO1x0aW50IHJldDtcbiBcbi1cdGlmICh2ZnN1aWRfZXFfa3VpZChpX3VpZF9pbnRvX3Zmc3VpZChpZG1hcCwgaW5vZGUpLCBmc3VpZCkpXG4tXHRcdHJldHVybiAwO1xuLVx0aWYgKHZmc3VpZF9lcV9rdWlkKGlfdWlkX2ludG9fdmZzdWlkKGlkbWFwLCBkaXIpLCBmc3VpZCkpXG4tXHRcdHJldHVybiAwO1xuJiM0MztcdHJldCA9IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShpZG1hcCwgaW5vZGUpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjPSAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRyZXQgPSB2ZnNfaW5vZGVzX2hhdmVfc2FtZV9vd25lcihpZG1hcCwgaW5vZGUsIGRpcik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2M9IDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuIFx0cmV0dXJuICFjYXBhYmxlX3dydF9pbm9kZV91aWRnaWQoaWRtYXAsIGlub2RlLCBDQVBfRk9XTkVSKTtcbiB9XG4gRVhQT1JUX1NZTUJPTChfX2NoZWNrX3N0aWNreSk7XG5kaWZmIC0tZ2l0IGEvZnMvcmVtYXBfcmFuZ2UuYyBiL2ZzL3JlbWFwX3JhbmdlLmNcbmluZGV4IDI2YWZiYmJmYjEwYzJlLi45ZWVlOTNjMjcwMDEyNSAxMDA2NDRcbi0tLSBhL2ZzL3JlbWFwX3JhbmdlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3JlbWFwX3JhbmdlLmNcbkBAIC00MTMsMjAgJiM0Mzs0MTMsMjIgQEAgbG9mZl90IHZmc19jbG9uZV9maWxlX3JhbmdlKHN0cnVjdCBmaWxlICpmaWxlX2luLCBsb2ZmX3QgcG9zX2luLFxuIEVYUE9SVF9TWU1CT0wodmZzX2Nsb25lX2ZpbGVfcmFuZ2UpO1xuIFxuIC8qIENoZWNrIHdoZXRoZXIgd2UgYXJlIGFsbG93ZWQgdG8gZGVkdXBlIHRoZSBkZXN0aW5hdGlvbiBmaWxlICovXG4tc3RhdGljIGJvb2wgbWF5X2RlZHVwZV9maWxlKHN0cnVjdCBmaWxlICpmaWxlKVxuJiM0MztzdGF0aWMgaW50IG1heV9kZWR1cGVfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSlcbiB7XG4gXHRzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCA9IGZpbGVfbW50X2lkbWFwKGZpbGUpO1xuIFx0c3RydWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5vZGUoZmlsZSk7XG4mIzQzO1x0aW50IHJldDtcbiBcbiBcdGlmIChjYXBhYmxlKENBUF9TWVNfQURNSU4pKVxuLVx0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XHRcdHJldHVybiAwO1xuIFx0aWYgKGZpbGUtXHUwMDNlZl9tb2RlIFx1MDAyNiBGTU9ERV9XUklURSlcbi1cdFx0cmV0dXJuIHRydWU7XG4tXHRpZiAodmZzdWlkX2VxX2t1aWQoaV91aWRfaW50b192ZnN1aWQoaWRtYXAsIGlub2RlKSwgY3VycmVudF9mc3VpZCgpKSlcbi1cdFx0cmV0dXJuIHRydWU7XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHRyZXQgPSB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWUoaWRtYXAsIGlub2RlKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYz0gMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4gXHRpZiAoIWlub2RlX3Blcm1pc3Npb24oaWRtYXAsIGlub2RlLCBNQVlfV1JJVEUpKVxuLVx0XHRyZXR1cm4gdHJ1ZTtcbi1cdHJldHVybiBmYWxzZTtcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdHJldHVybiAtRVBFUk07XG4gfVxuIFxuIGxvZmZfdCB2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2Vfb25lKHN0cnVjdCBmaWxlICpzcmNfZmlsZSwgbG9mZl90IHNyY19wb3MsXG5AQCAtNDU5LDggJiM0Mzs0NjEsOCBAQCBsb2ZmX3QgdmZzX2RlZHVwZV9maWxlX3JhbmdlX29uZShzdHJ1Y3QgZmlsZSAqc3JjX2ZpbGUsIGxvZmZfdCBzcmNfcG9zLFxuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbi1cdHJldCA9IC1FUEVSTTtcbi1cdGlmICghbWF5X2RlZHVwZV9maWxlKGRzdF9maWxlKSlcbiYjNDM7XHRyZXQgPSBtYXlfZGVkdXBlX2ZpbGUoZHN0X2ZpbGUpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdGdvdG8gb3V0X2Ryb3Bfd3JpdGU7XG4gXG4gXHRyZXQgPSAtRVhERVY7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mcy5oIGIvaW5jbHVkZS9saW51eC9mcy5oXG5pbmRleCA1MGNlNzMxYTJiNzhmMS4uODAxM2MxM2EzNTNkNjcgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2ZzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvZnMuaFxuQEAgLTYyOCw2ICYjNDM7NjI4LDcgQEAgaXNfdW5jYWNoZWRfYWNsKHN0cnVjdCBwb3NpeF9hY2wgKmFjbClcbiAjZGVmaW5lIElPUF9DQUNIRURfTElOS1x0XHQweDAwNDBcbiAjZGVmaW5lIElPUF9GQVNUUEVSTV9NQVlfRVhFQ1x0MHgwMDgwXG4gI2RlZmluZSBJT1BfRkxDVFhcdFx0MHgwMTAwXG4mIzQzOyNkZWZpbmUgSU9QX09XTkVSU0hJUF9PVkVSUklERVx0MHgwMjAwXHQvKiBVc2UgLVx1MDAzZWlzX293bmVkX2J5X21lKCkgYW5kIC1cdTAwM2VoYXZlX3NhbWVfb3duZXIoKSAqL1xuIFxuIC8qXG4gICogSW5vZGUgc3RhdGUgYml0cy4gIFByb3RlY3RlZCBieSBpbm9kZS1cdTAwM2VpX2xvY2tcbkBAIC0xNzU1LDggJiM0MzsxNzU2LDcgQEAgc3RhdGljIGlubGluZSBib29sIGZpbGVfd3JpdGVfbm90X3N0YXJ0ZWQoY29uc3Qgc3RydWN0IGZpbGUgKmZpbGUpXG4gXHRyZXR1cm4gc2Jfd3JpdGVfbm90X3N0YXJ0ZWQoZmlsZV9pbm9kZShmaWxlKS1cdTAwM2VpX3NiKTtcbiB9XG4gXG4tYm9vbCBpbm9kZV9vd25lcl9vcl9jYXBhYmxlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuLVx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbiYjNDM7Ym9vbCBpbm9kZV9vd25lcl9vcl9jYXBhYmxlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbiBcbiAvKlxuICAqIFZGUyBoZWxwZXIgZnVuY3Rpb25zLi5cbkBAIC0yMDM2LDYgJiM0MzsyMDM2LDkgQEAgc3RydWN0IGlub2RlX29wZXJhdGlvbnMge1xuIFx0XHRcdCAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBmaWxlX2thdHRyICpmYSk7XG4gXHRpbnQgKCpmaWxlYXR0cl9nZXQpKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGZpbGVfa2F0dHIgKmZhKTtcbiBcdHN0cnVjdCBvZmZzZXRfY3R4ICooKmdldF9vZmZzZXRfY3R4KShzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbiYjNDM7XHRpbnQgKCppc19vd25lZF9ieV9tZSkoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xuJiM0MztcdGludCAoKmhhdmVfc2FtZV9vd25lcikoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUxLFxuJiM0MztcdFx0XHQgICAgICAgc3RydWN0IGlub2RlICppbm9kZTIpO1xuIH0gX19fX2NhY2hlbGluZV9hbGlnbmVkO1xuIFxuIC8qIERpZCB0aGUgZHJpdmVyIHByb3ZpZGUgdmFsaWQgbW1hcCBob29rIGNvbmZpZ3VyYXRpb24/ICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDM6MzM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0FGU19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Zmc19pbm9kZV9pc19vd25lZF9ieV9tZSYjMzQ7LAogICAgJiMzNDthZnNfaXNfb3duZWRfYnlfbWUmIzM0OywKICAgICYjMzQ7YWZzX2hhdmVfc2FtZV9vd25lciYjMzQ7LAogICAgJiMzNDtpbm9kZV9vd25lcl9vcl9jYXBhYmxlJiMzNDssCiAgICAmIzM0O3Zmc19zZXRsZWFzZSYjMzQ7LAogICAgJiMzNDtfX2NoZWNrX3N0aWNreSYjMzQ7LAogICAgJiMzNDtzZXRhdHRyX3ByZXBhcmUmIzM0OywKICAgICYjMzQ7dmZzX2RlZHVwZV9maWxlX3JhbmdlX29uZSYjMzQ7LAogICAgJiMzNDthZnNfZWRpdF9kaXJfcmVtb3ZlJiMzNDssCiAgICAmIzM0O2Fmc19mc19mZXRjaF9kYXRhJiMzNDssCiAgICAmIzM0O2Fmc19kaXJfZmluZF9ibG9jayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIG5ldyBpbm9kZSBvcGVyYXRpb25zIGBpc19vd25lZF9ieV9tZWAgYW5kIGBoYXZlX3NhbWVfb3duZXJgIHRvIGFsbG93IGZpbGVzeXN0ZW1zIChsaWtlIEFGUykgdG8gb3ZlcnJpZGUgZGVmYXVsdCBWRlMgb3duZXJzaGlwIGNoZWNrcy4gSXQgbW9kaWZpZXMgY29yZSBWRlMgcGF0aHMgKGUuZy4sIGBjaG93bl9va2AsIGBjaGdycF9va2AsIGBjb3JlZHVtcF9maWxlYCwgYGlub2RlX293bmVyX29yX2NhcGFibGVgLCBgdmZzX3NldGxlYXNlYCwgYG1heV9mb2xsb3dfbGlua2AsIGBtYXlfY3JlYXRlX2luX3N0aWNreWAsIGBfX2NoZWNrX3N0aWNreWAsIGBtYXlfZGVkdXBlX2ZpbGVgKSB0byB1c2UgdGhlc2UgbmV3IG9wZXJhdGlvbnMuIEl0IGFsc28gaW1wbGVtZW50cyB0aGVzZSBvcGVyYXRpb25zIGZvciBBRlMgYW5kIGZpeGVzIHNvbWUgQUZTLXNwZWNpZmljIGJ1Z3MgaW4gZGlyZWN0b3J5IGVkaXRpbmcgYW5kIGRhdGEgZmV0Y2hpbmcuIFRoZXNlIGFyZSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gdGhlIGNvcmUgVkZTIGFuZCBBRlMsIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBvciBzZWN1cml0eSBpc3N1ZXMgYXJlIGludHJvZHVjZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3NmI5ZjYwNmVhZTJiMDllMDkwMWQyNDg4MzJlZDVjMTM2MDBmNTQwCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBKdWwgMjggMDM6MzM6MDUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Zmcy5yc3QgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Zmcy5yc3QKaW5kZXggN2M3NTMxNDhhZjg4ODMuLjg5MzQxOWUwMDNlYWY3IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Zmcy5yc3QKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy92ZnMucnN0CkBAIC00NDUsNiAmIzQzOzQ0NSw5IEBAIEFzIG9mIGtlcm5lbCAyLjYuMjIsIHRoZSBmb2xsb3dpbmcgbWVtYmVycyBhcmUgZGVmaW5lZDoKIAkJCQkgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgZmlsZV9rYXR0ciAqZmEpOwogCQlpbnQgKCpmaWxlYXR0cl9nZXQpKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGZpbGVfa2F0dHIgKmZhKTsKIAkgICAgICAgIHN0cnVjdCBvZmZzZXRfY3R4ICooKmdldF9vZmZzZXRfY3R4KShzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKJiM0MzsJCWludCAoKmlzX293bmVkX2J5X21lKShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSk7CiYjNDM7CQlpbnQgKCpoYXZlX3NhbWVfb3duZXIpKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAomIzQzOwkJCQkgICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5KTsKIAl9OwogCiBBZ2FpbiwgYWxsIG1ldGhvZHMgYXJlIGNhbGxlZCB3aXRob3V0IGFueSBsb2NrcyBiZWluZyBoZWxkLCB1bmxlc3MKQEAgLTYzNCw2ICYjNDM7NjM3LDI0IEBAIG90aGVyd2lzZSBub3RlZC4KICAgICAgICAgZmlsZXN5c3RlbSBtdXN0IGRlZmluZSB0aGlzIG9wZXJhdGlvbiB0byB1c2UKICAgICAgICAgc2ltcGxlX29mZnNldF9kaXJfb3BlcmF0aW9ucy4KIAomIzQzO2BgaXNfb3duZWRfYnlfbWVgYAomIzQzOwljYWxsZWQgdG8gZGV0ZXJtaW5lIGlmIHRoZSBmaWxlIGNhbiBiZSBjb25zaWRlcmVkIHRvIGJlICYjMzk7b3duZWQmIzM5OyBieQomIzQzOwl0aGUgb3duZXIgb2YgdGhlIHByb2Nlc3Mgb3IgaWYgdGhlIHByb2Nlc3MgaGFzIGEgdG9rZW4gdGhhdCBncmFudHMKJiM0MzsJaXQgb3duZXJzaGlwIHByaXZpbGVnZXMuICBJZiB1bnNldCwgdGhlIGRlZmF1bHQgaXMgdG8gY29tcGFyZSBpX3VpZAomIzQzOwl0byBjdXJyZW50X2ZzdWlkKCkgLSBidXQgdGhpcyBtYXkgZ2l2ZSBpbmNvcnJlY3QgcmVzdWx0cyBmb3Igc29tZQomIzQzOwluZXR3b3JrIG9yIHBsdWctaW4gYmxvY2sgZmlsZXN5c3RlbXMuICBGb3IgZXhhbXBsZSwgQUZTIGRldGVybWluZXMKJiM0MzsJb3duZXJzaGlwIGVudGlyZWx5IGFjY29yZGluZyB0byBhbiBvYnRhaW5lZCB0b2tlbiBhbmQgaV91aWQgbWF5IG5vdAomIzQzOwlldmVuIGJlIGZyb20gdGhlIHNhbWUgSUQgc3BhY2UgYXMgY3VycmVudF91aWQoKS4KJiM0MzsKJiM0MztgYGhhdmVfc2FtZV9vd25lcmBgCiYjNDM7CWNhbGxlZCB0byBkZXRlcm1pbmUgaWYgYW4gaW5vZGUgaGFzIHRoZSBzYW1lIG93bmVyIGFzIGl0cyBpbW1lZGlhdGUKJiM0MzsJcGFyZW50IG9uIHRoZSBwYXRoIHdhbGtlZC4gIElmIHVuc2V0LCB0aGUgZGVmYXVsdCBpcyB0byBzaW1wbHkKJiM0MzsJY29tcGFyZSB0aGUgaV91aWQgb2YgYm90aC4gIEZvciBleGFtcGxlLCBBRlMgY29tcGFyZXMgdGhlIG93bmVyIElEcwomIzQzOwlvZiBib3RoIC0gYnV0IHRoZXNlIGFyZSBhIDY0LWJpdCB2YWx1ZXMgb24gc29tZSB2YXJpYW50cyB0aGF0IG1pZ2h0CiYjNDM7CW5vdCBmaXQgaW50byBhIGt1aWRfdCBhbmQgY2lmcyBoYXMgR1VJRHMgdGhhdCBjYW5ub3QgYmUgY29tcGFyZWQgdG8KJiM0MzsJa3VpZF90LgomIzQzOwomIzQzOwogVGhlIEFkZHJlc3MgU3BhY2UgT2JqZWN0CiA9PT09PT09PT09PT09PT09PT09PT09PT0KIApkaWZmIC0tZ2l0IGEvZnMvYWZzL2Rpci5jIGIvZnMvYWZzL2Rpci5jCmluZGV4IDZkZjU2ZmU5MTYzZmQ3Li5lZTJmNWVjMGIyYzY3ZCAxMDA2NDQKLS0tIGEvZnMvYWZzL2Rpci5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2Fmcy9kaXIuYwpAQCAtNjksNiAmIzQzOzY5LDggQEAgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgYWZzX2Rpcl9pbm9kZV9vcGVyYXRpb25zID0gewogCS5wZXJtaXNzaW9uCT0gYWZzX3Blcm1pc3Npb24sCiAJLmdldGF0dHIJPSBhZnNfZ2V0YXR0ciwKIAkuc2V0YXR0cgk9IGFmc19zZXRhdHRyLAomIzQzOwkuaXNfb3duZWRfYnlfbWUJPSBhZnNfaXNfb3duZWRfYnlfbWUsCiYjNDM7CS5oYXZlX3NhbWVfb3duZXIgPSBhZnNfaGF2ZV9zYW1lX293bmVyLAogfTsKIAogY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBhZnNfZGlyX2FvcHMgPSB7CmRpZmYgLS1naXQgYS9mcy9hZnMvZGlyX2VkaXQuYyBiL2ZzL2Fmcy9kaXJfZWRpdC5jCmluZGV4IGZkM2FhOWY5N2NlNjRjLi5jMzEzMDMwNTk0NDRhZCAxMDA2NDQKLS0tIGEvZnMvYWZzL2Rpcl9lZGl0LmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvYWZzL2Rpcl9lZGl0LmMKQEAgLTQxNSw3ICYjNDM7NDE1LDcgQEAgdm9pZCBhZnNfZWRpdF9kaXJfcmVtb3ZlKHN0cnVjdCBhZnNfdm5vZGUgKnZub2RlLAogCWlmICghYWZzX2Rpcl9pbml0X2l0ZXIoJmFtcDtpdGVyLCBuYW1lKSkKIAkJcmV0dXJuOwogCi0JbWV0YSA9IGFmc19kaXJfZmluZF9ibG9jaygmYW1wO2l0ZXIsIDApOwomIzQzOwltZXRhID0gYWZzX2Rpcl9nZXRfYmxvY2soJmFtcDtpdGVyLCAwKTsKIAlpZiAoIW1ldGEpCiAJCXJldHVybjsKIApAQCAtNDQyLDcgJiM0Mzs0NDIsNyBAQCB2b2lkIGFmc19lZGl0X2Rpcl9yZW1vdmUoc3RydWN0IGFmc192bm9kZSAqdm5vZGUsCiAJLyogQ2hlY2sgYW5kIGNsZWFyIHRoZSBlbnRyeS4gKi8KIAlkZSA9ICZhbXA7YmxvY2stJmd0O2RpcmVudHNbc2xvdF07CiAJaWYgKGRlLSZndDt1LnZhbGlkICE9IDEpCi0JCWdvdG8gZXJyb3JfdW5tYXA7CiYjNDM7CQlnb3RvIGVycm9yOwogCiAJdHJhY2VfYWZzX2VkaXRfZGlyKHZub2RlLCB3aHksIGFmc19lZGl0X2Rpcl9kZWxldGUsIGIsIHNsb3QsCiAJCQkgICBudG9obChkZS0mZ3Q7dS52bm9kZSksIG50b2hsKGRlLSZndDt1LnVuaXF1ZSksCkBAIC00NTgsNyAmIzQzOzQ1OCw2IEBAIHZvaWQgYWZzX2VkaXRfZGlyX3JlbW92ZShzdHJ1Y3QgYWZzX3Zub2RlICp2bm9kZSwKIAkvKiBDbGVhciB0aGUgY29uc3RpdHVlbnQgZW50cmllcy4gKi8KIAluZXh0ID0gZGUtJmd0O3UuaGFzaF9uZXh0OwogCW1lbXNldChkZSwgMCwgc2l6ZW9mKCpkZSkgKiBpdGVyLm5yX3Nsb3RzKTsKLQlrdW5tYXBfbG9jYWwoYmxvY2spOwogCiAJLyogQWRqdXN0IHRoZSBoYXNoIGNoYWluOiBpZiBpdGVyLSZndDtwcmV2X2VudHJ5IGlzIDAsIHRoZSBoYXNodGFibGUgaGVhZAogCSAqIGluZGV4IGlzIHByZXZpb3VzOyBvdGhlcndpc2UgaXQmIzM5O3Mgc2xvdCBudW1iZXIgb2YgdGhlIHByZXZpb3VzIGVudHJ5LgpAQCAtNDg1LDcgJiM0Mzs0ODQsNiBAQCB2b2lkIGFmc19lZGl0X2Rpcl9yZW1vdmUoc3RydWN0IGFmc192bm9kZSAqdm5vZGUsCiAJCXBkZSA9ICZhbXA7cGJsb2NrLSZndDtkaXJlbnRzW3BzXTsKIAkJcHJldl9uZXh0ID0gcGRlLSZndDt1Lmhhc2hfbmV4dDsKIAkJaWYgKHByZXZfbmV4dCAhPSBodG9ucyhlbnRyeSkpIHsKLQkJCWt1bm1hcF9sb2NhbChwYmxvY2spOwogCQkJcHJfd2FybigmIzM0OyVsbHg6JWxseDoleDogbm90IHByZXYgaW4gY2hhaW4gYj0leCBwPSV4LCV4IGU9JXggJSpzJiMzNDssCiAJCQkJdm5vZGUtJmd0O2ZpZC52aWQsIHZub2RlLSZndDtmaWQudm5vZGUsIHZub2RlLSZndDtmaWQudW5pcXVlLAogCQkJCWl0ZXIuYnVja2V0LCBpdGVyLnByZXZfZW50cnksIHByZXZfbmV4dCwgZW50cnksCkBAIC00OTMsNyAmIzQzOzQ5MSw2IEBAIHZvaWQgYWZzX2VkaXRfZGlyX3JlbW92ZShzdHJ1Y3QgYWZzX3Zub2RlICp2bm9kZSwKIAkJCWdvdG8gZXJyb3I7CiAJCX0KIAkJcGRlLSZndDt1Lmhhc2hfbmV4dCA9IG5leHQ7Ci0JCWt1bm1hcF9sb2NhbChwYmxvY2spOwogCX0KIAogCW5ldGZzX3NpbmdsZV9tYXJrX2lub2RlX2RpcnR5KCZhbXA7dm5vZGUtJmd0O25ldGZzLmlub2RlKTsKQEAgLTUwMywxOCAmIzQzOzUwMCwxNiBAQCB2b2lkIGFmc19lZGl0X2Rpcl9yZW1vdmUoc3RydWN0IGFmc192bm9kZSAqdm5vZGUsCiAJX2RlYnVnKCYjMzQ7UmVtb3ZlICVzIGZyb20gJXVbJXVdJiMzNDssIG5hbWUtJmd0O25hbWUsIGIsIHNsb3QpOwogCiBvdXRfdW5tYXA6CiYjNDM7CWFmc19kaXJfZW5kX2l0ZXIoJmFtcDtpdGVyKTsKIAlrdW5tYXBfbG9jYWwobWV0YSk7CiAJX2xlYXZlKCYjMzQ7JiMzNDspOwogCXJldHVybjsKIAogYWxyZWFkeV9pbnZhbGlkYXRlZDoKLQlrdW5tYXBfbG9jYWwoYmxvY2spOwogCXRyYWNlX2Fmc19lZGl0X2Rpcih2bm9kZSwgd2h5LCBhZnNfZWRpdF9kaXJfZGVsZXRlX2ludmFsLAogCQkJICAgMCwgMCwgMCwgMCwgbmFtZS0mZ3Q7bmFtZSk7CiAJZ290byBvdXRfdW5tYXA7CiAKLWVycm9yX3VubWFwOgotCWt1bm1hcF9sb2NhbChibG9jayk7CiBlcnJvcjoKIAl0cmFjZV9hZnNfZWRpdF9kaXIodm5vZGUsIHdoeSwgYWZzX2VkaXRfZGlyX2RlbGV0ZV9lcnJvciwKIAkJCSAgIDAsIDAsIDAsIDAsIG5hbWUtJmd0O25hbWUpOwpkaWZmIC0tZ2l0IGEvZnMvYWZzL2Rpcl9zZWFyY2guYyBiL2ZzL2Fmcy9kaXJfc2VhcmNoLmMKaW5kZXggMTA0NDExYzA2OTJmNTcuLjExZWJkZmZmY2IxZDM4IDEwMDY0NAotLS0gYS9mcy9hZnMvZGlyX3NlYXJjaC5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2Fmcy9kaXJfc2VhcmNoLmMKQEAgLTc1LDEwICYjNDM7NzUsNyBAQCB1bmlvbiBhZnNfeGRyX2Rpcl9ibG9jayAqYWZzX2Rpcl9maW5kX2Jsb2NrKHN0cnVjdCBhZnNfZGlyX2l0ZXIgKml0ZXIsIHNpemVfdCBibAogCiAJX2VudGVyKCYjMzQ7JXp4LCVkJiMzNDssIGJsb2NrLCBzbG90KTsKIAotCWlmIChpdGVyLSZndDtibG9jaykgewotCQlrdW5tYXBfbG9jYWwoaXRlci0mZ3Q7YmxvY2spOwotCQlpdGVyLSZndDtibG9jayA9IE5VTEw7Ci0JfQomIzQzOwlhZnNfZGlyX2VuZF9pdGVyKGl0ZXIpOwogCiAJaWYgKGR2bm9kZS0mZ3Q7ZGlyZWN0b3J5X3NpemUgJmx0OyBibGVuZCkKIAkJZ290byBmYWlsOwpAQCAtMTczLDEyICYjNDM7MTcwLDggQEAgaW50IGFmc19kaXJfc2VhcmNoX2J1Y2tldChzdHJ1Y3QgYWZzX2Rpcl9pdGVyICppdGVyLCBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSwKIAogCXJldCA9IC1FTk9FTlQ7CiBmb3VuZDoKLQlpZiAoaXRlci0mZ3Q7YmxvY2spIHsKLQkJa3VubWFwX2xvY2FsKGl0ZXItJmd0O2Jsb2NrKTsKLQkJaXRlci0mZ3Q7YmxvY2sgPSBOVUxMOwotCX0KLQogYmFkOgomIzQzOwlhZnNfZGlyX2VuZF9pdGVyKGl0ZXIpOwogCWlmIChyZXQgPT0gLUVTVEFMRSkKIAkJYWZzX2ludmFsaWRhdGVfZGlyKGl0ZXItJmd0O2R2bm9kZSwgYWZzX2Rpcl9pbnZhbGlkX2l0ZXJfc3RhbGUpOwogCV9sZWF2ZSgmIzM0OyA9ICVkJiMzNDssIHJldCk7CmRpZmYgLS1naXQgYS9mcy9hZnMvZmlsZS5jIGIvZnMvYWZzL2ZpbGUuYwppbmRleCAwNDY3NzQyYmZlZWUzNC4uYmE0NDQ5M2NjYWY2ZWUgMTAwNjQ0Ci0tLSBhL2ZzL2Fmcy9maWxlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvYWZzL2ZpbGUuYwpAQCAtNDksNiAmIzQzOzQ5LDggQEAgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgYWZzX2ZpbGVfaW5vZGVfb3BlcmF0aW9ucyA9IHsKIAkuZ2V0YXR0cgk9IGFmc19nZXRhdHRyLAogCS5zZXRhdHRyCT0gYWZzX3NldGF0dHIsCiAJLnBlcm1pc3Npb24JPSBhZnNfcGVybWlzc2lvbiwKJiM0MzsJLmlzX293bmVkX2J5X21lCT0gYWZzX2lzX293bmVkX2J5X21lLAomIzQzOwkuaGF2ZV9zYW1lX293bmVyID0gYWZzX2hhdmVfc2FtZV9vd25lciwKIH07CiAKIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgYWZzX2ZpbGVfYW9wcyA9IHsKZGlmZiAtLWdpdCBhL2ZzL2Fmcy9mc2NsaWVudC5jIGIvZnMvYWZzL2ZzY2xpZW50LmMKaW5kZXggYTJmZmQ2MDg4OWY4OWQuLjFhM2YxODZhNmExMTNkIDEwMDY0NAotLS0gYS9mcy9hZnMvZnNjbGllbnQuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9hZnMvZnNjbGllbnQuYwpAQCAtNDc3LDYgJiM0Mzs0NzcsOSBAQCB2b2lkIGFmc19mc19mZXRjaF9kYXRhKHN0cnVjdCBhZnNfb3BlcmF0aW9uICpvcCkKIAlpZiAoIWNhbGwpCiAJCXJldHVybiBhZnNfb3Bfbm9tZW0ob3ApOwogCiYjNDM7CWlmIChvcC0mZ3Q7ZmxhZ3MgJmFtcDsgQUZTX09QRVJBVElPTl9BU1lOQykKJiM0MzsJCWNhbGwtJmd0O2FzeW5jID0gdHJ1ZTsKJiM0MzsKIAkvKiBtYXJzaGFsbCB0aGUgcGFyYW1ldGVycyAqLwogCWJwID0gY2FsbC0mZ3Q7cmVxdWVzdDsKIAlicFswXSA9IGh0b25sKEZTRkVUQ0hEQVRBKTsKQEAgLTQ4NCw3ICYjNDM7NDg3LDcgQEAgdm9pZCBhZnNfZnNfZmV0Y2hfZGF0YShzdHJ1Y3QgYWZzX29wZXJhdGlvbiAqb3ApCiAJYnBbMl0gPSBodG9ubCh2cC0mZ3Q7ZmlkLnZub2RlKTsKIAlicFszXSA9IGh0b25sKHZwLSZndDtmaWQudW5pcXVlKTsKIAlicFs0XSA9IGh0b25sKGxvd2VyXzMyX2JpdHMoc3VicmVxLSZndDtzdGFydCAmIzQzOyBzdWJyZXEtJmd0O3RyYW5zZmVycmVkKSk7Ci0JYnBbNV0gPSBodG9ubChsb3dlcl8zMl9iaXRzKHN1YnJlcS0mZ3Q7bGVuICAgJiM0Mzsgc3VicmVxLSZndDt0cmFuc2ZlcnJlZCkpOwomIzQzOwlicFs1XSA9IGh0b25sKGxvd2VyXzMyX2JpdHMoc3VicmVxLSZndDtsZW4gICAtIHN1YnJlcS0mZ3Q7dHJhbnNmZXJyZWQpKTsKIAogCWNhbGwtJmd0O2ZpZCA9IHZwLSZndDtmaWQ7CiAJdHJhY2VfYWZzX21ha2VfZnNfY2FsbChjYWxsLCAmYW1wO3ZwLSZndDtmaWQpOwpkaWZmIC0tZ2l0IGEvZnMvYWZzL2lub2RlLmMgYi9mcy9hZnMvaW5vZGUuYwppbmRleCAxNGYzOWE5YmVhNmNmZS4uYWY4NWE4OGQ5NDNkZDEgMTAwNjQ0Ci0tLSBhL2ZzL2Fmcy9pbm9kZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2Fmcy9pbm9kZS5jCkBAIC05MSw2ICYjNDM7OTEsNyBAQCBzdGF0aWMgaW50IGFmc19pbm9kZV9pbml0X2Zyb21fc3RhdHVzKHN0cnVjdCBhZnNfb3BlcmF0aW9uICpvcCwKIAlpbm9kZS0mZ3Q7aV9mbGFncyB8PSBTX05PQVRJTUU7CiAJaW5vZGUtJmd0O2lfdWlkID0gbWFrZV9rdWlkKCZhbXA7aW5pdF91c2VyX25zLCBzdGF0dXMtJmd0O293bmVyKTsKIAlpbm9kZS0mZ3Q7aV9naWQgPSBtYWtlX2tnaWQoJmFtcDtpbml0X3VzZXJfbnMsIHN0YXR1cy0mZ3Q7Z3JvdXApOwomIzQzOwlpbm9kZS0mZ3Q7aV9vcGZsYWdzIHw9IElPUF9PV05FUlNISVBfT1ZFUlJJREU7CiAJc2V0X25saW5rKCZhbXA7dm5vZGUtJmd0O25ldGZzLmlub2RlLCBzdGF0dXMtJmd0O25saW5rKTsKIAogCWlfc2l6ZV93cml0ZShpbm9kZSwgc3RhdHVzLSZndDtzaXplKTsKZGlmZiAtLWdpdCBhL2ZzL2Fmcy9pbnRlcm5hbC5oIGIvZnMvYWZzL2ludGVybmFsLmgKaW5kZXggNjAxZjAxZTVjMTVmY2MuLjQwZTVjZTYxOTQ3NjIxIDEwMDY0NAotLS0gYS9mcy9hZnMvaW50ZXJuYWwuaAomIzQzOyYjNDM7JiM0MzsgYi9mcy9hZnMvaW50ZXJuYWwuaApAQCAtMTEzMyw2ICYjNDM7MTEzMywxNCBAQCBpbnQgYWZzX2Rpcl9zZWFyY2hfYnVja2V0KHN0cnVjdCBhZnNfZGlyX2l0ZXIgKml0ZXIsIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lLAogaW50IGFmc19kaXJfc2VhcmNoKHN0cnVjdCBhZnNfdm5vZGUgKmR2bm9kZSwgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsCiAJCSAgIHN0cnVjdCBhZnNfZmlkICpfZmlkLCBhZnNfZGF0YXZlcnNpb25fdCAqX2Rpcl92ZXJzaW9uKTsKIAomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBhZnNfZGlyX2VuZF9pdGVyKHN0cnVjdCBhZnNfZGlyX2l0ZXIgKml0ZXIpCiYjNDM7ewomIzQzOwlpZiAoaXRlci0mZ3Q7YmxvY2spIHsKJiM0MzsJCWt1bm1hcF9sb2NhbChpdGVyLSZndDtibG9jayk7CiYjNDM7CQlpdGVyLSZndDtibG9jayA9IE5VTEw7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiAvKgogICogZGlyX3NpbGx5LmMKICAqLwpAQCAtMTQyMSw3ICYjNDM7MTQyOSw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBhZnNfbWFrZV9vcF9jYWxsKHN0cnVjdCBhZnNfb3BlcmF0aW9uICpvcCwgc3RydWN0IGFmc19jYWxsICpjCiB7CiAJc3RydWN0IGFmc19hZGRyX2xpc3QgKmFsaXN0ID0gb3AtJmd0O2VzdGF0ZS0mZ3Q7YWRkcmVzc2VzOwogCi0Jb3AtJmd0O2NhbGwJPSBjYWxsOwomIzQzOwlvcC0mZ3Q7Y2FsbAk9IGFmc19nZXRfY2FsbChjYWxsLCBhZnNfY2FsbF90cmFjZV9nZXQpOwogCW9wLSZndDt0eXBlCT0gY2FsbC0mZ3Q7dHlwZTsKIAljYWxsLSZndDtvcAk9IG9wOwogCWNhbGwtJmd0O2tleQk9IG9wLSZndDtrZXk7CkBAIC0xNDI5LDYgJiM0MzsxNDM3LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGFmc19tYWtlX29wX2NhbGwoc3RydWN0IGFmc19vcGVyYXRpb24gKm9wLCBzdHJ1Y3QgYWZzX2NhbGwgKmMKIAljYWxsLSZndDtwZWVyCT0gcnhycGNfa2VybmVsX2dldF9wZWVyKGFsaXN0LSZndDthZGRyc1tvcC0mZ3Q7YWRkcl9pbmRleF0ucGVlcik7CiAJY2FsbC0mZ3Q7c2VydmljZV9pZCA9IG9wLSZndDtzZXJ2ZXItJmd0O3NlcnZpY2VfaWQ7CiAJYWZzX21ha2VfY2FsbChjYWxsLCBnZnApOwomIzQzOwlhZnNfcHV0X2NhbGwoY2FsbCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBhZnNfZXh0cmFjdF9iZWdpbihzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwsIHZvaWQgKmJ1Ziwgc2l6ZV90IHNpemUpCkBAIC0xNTMwLDYgJiM0MzsxNTM5LDkgQEAgZXh0ZXJuIHN0cnVjdCBrZXkgKmFmc19yZXF1ZXN0X2tleShzdHJ1Y3QgYWZzX2NlbGwgKik7CiBleHRlcm4gc3RydWN0IGtleSAqYWZzX3JlcXVlc3Rfa2V5X3JjdShzdHJ1Y3QgYWZzX2NlbGwgKik7CiBleHRlcm4gaW50IGFmc19jaGVja19wZXJtaXQoc3RydWN0IGFmc192bm9kZSAqLCBzdHJ1Y3Qga2V5ICosIGFmc19hY2Nlc3NfdCAqKTsKIGV4dGVybiBpbnQgYWZzX3Blcm1pc3Npb24oc3RydWN0IG1udF9pZG1hcCAqLCBzdHJ1Y3QgaW5vZGUgKiwgaW50KTsKJiM0MztpbnQgYWZzX2lzX293bmVkX2J5X21lKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKJiM0MztpbnQgYWZzX2hhdmVfc2FtZV9vd25lcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZTEsCiYjNDM7CQkJc3RydWN0IGlub2RlICppbm9kZTIpOwogZXh0ZXJuIHZvaWQgX19leGl0IGFmc19jbGVhbl91cF9wZXJtaXRfY2FjaGUodm9pZCk7CiAKIC8qCmRpZmYgLS1naXQgYS9mcy9hZnMvc2VjdXJpdHkuYyBiL2ZzL2Fmcy9zZWN1cml0eS5jCmluZGV4IDZkMDBkNjJhNjVlZGY2Li43MDkyZjVhY2RjZDZhYyAxMDA2NDQKLS0tIGEvZnMvYWZzL3NlY3VyaXR5LmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvYWZzL3NlY3VyaXR5LmMKQEAgLTUxMCw2ICYjNDM7NTEwLDUyIEBAIGludCBhZnNfcGVybWlzc2lvbihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSwKIAlyZXR1cm4gcmV0OwogfQogCiYjNDM7LyoKJiM0MzsgKiBEZXRlcm1pbmUgaWYgYW4gaW5vZGUgaXMgb3duZWQgYnkgJiMzOTttZSYjMzk7IC0gd2hhdGV2ZXIgdGhhdCBtZWFucyBmb3IgdGhlCiYjNDM7ICogZmlsZXN5c3RlbS4gIEluIHRoZSBjYXNlIG9mIEFGUywgdGhpcyBtZWFucyB0aGF0IHRoZSBmaWxlIGlzIG93bmVkIGJ5IHRoZQomIzQzOyAqIEFGUyB1c2VyIHJlcHJlc2VudGVkIGJ5IHRoZSBSeCBTZWN1cml0eSBDbGFzcyB0b2tlbiBoZWxkIGluIGEga2V5LiAgUmV0dXJucwomIzQzOyAqIDAgaWYgb3duZWQgYnkgbWUsIDEgaWYgbm90OyBjYW4gYWxzbyByZXR1cm4gYW4gZXJyb3IuCiYjNDM7ICovCiYjNDM7aW50IGFmc19pc19vd25lZF9ieV9tZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBhZnNfdm5vZGUgKnZub2RlID0gQUZTX0ZTX0koaW5vZGUpOwomIzQzOwlhZnNfYWNjZXNzX3QgYWNjZXNzOwomIzQzOwlzdHJ1Y3Qga2V5ICprZXk7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWlmIChTX0lTRElSKGlub2RlLSZndDtpX21vZGUpKQomIzQzOwkJcmV0dXJuIDE7IC8qIFRoZSBBRE1JTiByaWdodCBjaGVjayBkb2VzbiYjMzk7dCB3b3JrIGZvciBkaXJlY3Rvcmllcy4gKi8KJiM0MzsKJiM0MzsJa2V5ID0gYWZzX3JlcXVlc3Rfa2V5KHZub2RlLSZndDt2b2x1bWUtJmd0O2NlbGwpOwomIzQzOwlpZiAoSVNfRVJSKGtleSkpCiYjNDM7CQlyZXR1cm4gUFRSX0VSUihrZXkpOwomIzQzOwomIzQzOwkvKiBHZXQgdGhlIGFjY2VzcyByaWdodHMgZm9yIHRoZSBrZXkgb24gdGhpcyBmaWxlLiAqLwomIzQzOwlyZXQgPSBhZnNfY2hlY2tfcGVybWl0KHZub2RlLCBrZXksICZhbXA7YWNjZXNzKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycm9yOwomIzQzOwomIzQzOwkvKiBXZSBnZXQgdGhlIEFETUlOSVNURVIgYml0IGlmIHdlIG93biB0aGUgZmlsZS4gKi8KJiM0MzsJcmV0ID0gKGFjY2VzcyAmYW1wOyBBRlNfQUNFX0FETUlOSVNURVIpID8gMCA6IDE7CiYjNDM7ZXJyb3I6CiYjNDM7CWtleV9wdXQoa2V5KTsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBEZXRlcm1pbmUgaWYgYSBmaWxlIGhhcyB0aGUgc2FtZSBvd25lciBhcyBpdHMgcGFyZW50IC0gd2hhdGV2ZXIgdGhhdCBtZWFucwomIzQzOyAqIGZvciB0aGUgZmlsZXN5c3RlbS4gIEluIHRoZSBjYXNlIG9mIEFGUywgdGhpcyBtZWFucyBjb21wYXJpbmcgdGhlaXIgQUZTCiYjNDM7ICogVUlEcy4gIFJldHVybnMgMCBpZiBzYW1lLCAxIGlmIG5vdCBzYW1lOyBjYW4gYWxzbyByZXR1cm4gYW4gZXJyb3IuCiYjNDM7ICovCiYjNDM7aW50IGFmc19oYXZlX3NhbWVfb3duZXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUxLAomIzQzOwkJCXN0cnVjdCBpbm9kZSAqaW5vZGUyKQomIzQzO3sKJiM0MzsJY29uc3Qgc3RydWN0IGFmc192bm9kZSAqdm5vZGUxID0gQUZTX0ZTX0koaW5vZGUxKTsKJiM0MzsJY29uc3Qgc3RydWN0IGFmc192bm9kZSAqdm5vZGUyID0gQUZTX0ZTX0koaW5vZGUyKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHZub2RlMS0mZ3Q7c3RhdHVzLm93bmVyICE9IHZub2RlMi0mZ3Q7c3RhdHVzLm93bmVyOwomIzQzO30KJiM0MzsKIHZvaWQgX19leGl0IGFmc19jbGVhbl91cF9wZXJtaXRfY2FjaGUodm9pZCkKIHsKIAlpbnQgaTsKZGlmZiAtLWdpdCBhL2ZzL2F0dHIuYyBiL2ZzL2F0dHIuYwppbmRleCA0ZjQzN2ZhYmI3ZjBmNS4uYjdlOGI1ZDQ5YTlmZTYgMTAwNjQ0Ci0tLSBhL2ZzL2F0dHIuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9hdHRyLmMKQEAgLTE2LDYgJiM0MzsxNiw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvZmNudGwuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9maWxlbG9jay5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NlY3VyaXR5LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJiMzNDtpbnRlcm5hbC5oJiMzNDsKIAogLyoqCiAgKiBzZXRhdHRyX3Nob3VsZF9kcm9wX3NnaWQgLSBkZXRlcm1pbmUgd2hldGhlciB0aGUgc2V0Z2lkIGJpdCBuZWVkcyB0byBiZQpAQCAtOTEsMTkgJiM0Mzs5MiwyMSBAQCBFWFBPUlRfU1lNQk9MKHNldGF0dHJfc2hvdWxkX2Ryb3Bfc3VpZGdpZCk7CiAgKiBwZXJtaXNzaW9ucy4gT24gbm9uLWlkbWFwcGVkIG1vdW50cyBvciBpZiBwZXJtaXNzaW9uIGNoZWNraW5nIGlzIHRvIGJlCiAgKiBwZXJmb3JtZWQgb24gdGhlIHJhdyBpbm9kZSBzaW1wbHkgcGFzcyBAbm9wX21udF9pZG1hcC4KICAqLwotc3RhdGljIGJvb2wgY2hvd25fb2soc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCi0JCSAgICAgY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSwgdmZzdWlkX3QgaWFfdmZzdWlkKQomIzQzO3N0YXRpYyBpbnQgY2hvd25fb2soc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCiYjNDM7CQkgICAgc3RydWN0IGlub2RlICppbm9kZSwgdmZzdWlkX3QgaWFfdmZzdWlkKQogewogCXZmc3VpZF90IHZmc3VpZCA9IGlfdWlkX2ludG9fdmZzdWlkKGlkbWFwLCBpbm9kZSk7Ci0JaWYgKHZmc3VpZF9lcV9rdWlkKHZmc3VpZCwgY3VycmVudF9mc3VpZCgpKSAmYW1wOyZhbXA7Ci0JICAgIHZmc3VpZF9lcShpYV92ZnN1aWQsIHZmc3VpZCkpCi0JCXJldHVybiB0cnVlOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlyZXQgPSB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWUoaWRtYXAsIGlub2RlKTsKJiM0MzsJaWYgKHJldCAmbHQ7PSAwKQomIzQzOwkJcmV0dXJuIHJldDsKIAlpZiAoY2FwYWJsZV93cnRfaW5vZGVfdWlkZ2lkKGlkbWFwLCBpbm9kZSwgQ0FQX0NIT1dOKSkKLQkJcmV0dXJuIHRydWU7CiYjNDM7CQlyZXR1cm4gMDsKIAlpZiAoIXZmc3VpZF92YWxpZCh2ZnN1aWQpICZhbXA7JmFtcDsKIAkgICAgbnNfY2FwYWJsZShpbm9kZS0mZ3Q7aV9zYi0mZ3Q7c191c2VyX25zLCBDQVBfQ0hPV04pKQotCQlyZXR1cm4gdHJ1ZTsKLQlyZXR1cm4gZmFsc2U7CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJcmV0dXJuIC1FUEVSTTsKIH0KIAogLyoqCkBAIC0xMTgsMjMgJiM0MzsxMjEsMjcgQEAgc3RhdGljIGJvb2wgY2hvd25fb2soc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCiAgKiBwZXJtaXNzaW9ucy4gT24gbm9uLWlkbWFwcGVkIG1vdW50cyBvciBpZiBwZXJtaXNzaW9uIGNoZWNraW5nIGlzIHRvIGJlCiAgKiBwZXJmb3JtZWQgb24gdGhlIHJhdyBpbm9kZSBzaW1wbHkgcGFzcyBAbm9wX21udF9pZG1hcC4KICAqLwotc3RhdGljIGJvb2wgY2hncnBfb2soc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCi0JCSAgICAgY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSwgdmZzZ2lkX3QgaWFfdmZzZ2lkKQomIzQzO3N0YXRpYyBpbnQgY2hncnBfb2soc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCiYjNDM7CQkgICAgc3RydWN0IGlub2RlICppbm9kZSwgdmZzZ2lkX3QgaWFfdmZzZ2lkKQogewogCXZmc2dpZF90IHZmc2dpZCA9IGlfZ2lkX2ludG9fdmZzZ2lkKGlkbWFwLCBpbm9kZSk7Ci0JdmZzdWlkX3QgdmZzdWlkID0gaV91aWRfaW50b192ZnN1aWQoaWRtYXAsIGlub2RlKTsKLQlpZiAodmZzdWlkX2VxX2t1aWQodmZzdWlkLCBjdXJyZW50X2ZzdWlkKCkpKSB7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShpZG1hcCwgaW5vZGUpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CWlmIChyZXQgPT0gMCkgewogCQlpZiAodmZzZ2lkX2VxKGlhX3Zmc2dpZCwgdmZzZ2lkKSkKLQkJCXJldHVybiB0cnVlOwomIzQzOwkJCXJldHVybiAwOwogCQlpZiAodmZzZ2lkX2luX2dyb3VwX3AoaWFfdmZzZ2lkKSkKLQkJCXJldHVybiB0cnVlOwomIzQzOwkJCXJldHVybiAwOwogCX0KIAlpZiAoY2FwYWJsZV93cnRfaW5vZGVfdWlkZ2lkKGlkbWFwLCBpbm9kZSwgQ0FQX0NIT1dOKSkKLQkJcmV0dXJuIHRydWU7CiYjNDM7CQlyZXR1cm4gMDsKIAlpZiAoIXZmc2dpZF92YWxpZCh2ZnNnaWQpICZhbXA7JmFtcDsKIAkgICAgbnNfY2FwYWJsZShpbm9kZS0mZ3Q7aV9zYi0mZ3Q7c191c2VyX25zLCBDQVBfQ0hPV04pKQotCQlyZXR1cm4gdHJ1ZTsKLQlyZXR1cm4gZmFsc2U7CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJcmV0dXJuIC1FUEVSTTsKIH0KIAogLyoqCkBAIC0xNjMsNiAmIzQzOzE3MCw3IEBAIGludCBzZXRhdHRyX3ByZXBhcmUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKIHsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZF9pbm9kZShkZW50cnkpOwogCXVuc2lnbmVkIGludCBpYV92YWxpZCA9IGF0dHItJmd0O2lhX3ZhbGlkOwomIzQzOwlpbnQgcmV0OwogCiAJLyoKIAkgKiBGaXJzdCBjaGVjayBzaXplIGNvbnN0cmFpbnRzLiAgVGhlc2UgY2FuJiMzOTt0IGJlIG92ZXJyaWRkZW4gdXNpbmcKQEAgLTE4OSwxNCAmIzQzOzE5NywxOCBAQCBpbnQgc2V0YXR0cl9wcmVwYXJlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCiAJCWdvdG8ga2lsbF9wcml2OwogCiAJLyogTWFrZSBzdXJlIGEgY2FsbGVyIGNhbiBjaG93bi4gKi8KLQlpZiAoKGlhX3ZhbGlkICZhbXA7IEFUVFJfVUlEKSAmYW1wOyZhbXA7Ci0JICAgICFjaG93bl9vayhpZG1hcCwgaW5vZGUsIGF0dHItJmd0O2lhX3Zmc3VpZCkpCi0JCXJldHVybiAtRVBFUk07CiYjNDM7CWlmIChpYV92YWxpZCAmYW1wOyBBVFRSX1VJRCkgewomIzQzOwkJcmV0ID0gY2hvd25fb2soaWRtYXAsIGlub2RlLCBhdHRyLSZndDtpYV92ZnN1aWQpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsJfQogCiAJLyogTWFrZSBzdXJlIGNhbGxlciBjYW4gY2hncnAuICovCi0JaWYgKChpYV92YWxpZCAmYW1wOyBBVFRSX0dJRCkgJmFtcDsmYW1wOwotCSAgICAhY2hncnBfb2soaWRtYXAsIGlub2RlLCBhdHRyLSZndDtpYV92ZnNnaWQpKQotCQlyZXR1cm4gLUVQRVJNOwomIzQzOwlpZiAoaWFfdmFsaWQgJmFtcDsgQVRUUl9HSUQpIHsKJiM0MzsJCXJldCA9IGNoZ3JwX29rKGlkbWFwLCBpbm9kZSwgYXR0ci0mZ3Q7aWFfdmZzZ2lkKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CX0KIAogCS8qIE1ha2Ugc3VyZSBhIGNhbGxlciBjYW4gY2htb2QuICovCiAJaWYgKGlhX3ZhbGlkICZhbXA7IEFUVFJfTU9ERSkgewpkaWZmIC0tZ2l0IGEvZnMvY29yZWR1bXAuYyBiL2ZzL2NvcmVkdW1wLmMKaW5kZXggZTY4YTc2ZmY5MmEzODYuLjNmMzJlNzNhYWVkYTI4IDEwMDY0NAotLS0gYS9mcy9jb3JlZHVtcC5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2NvcmVkdW1wLmMKQEAgLTk1NCw3ICYjNDM7OTU0LDcgQEAgc3RhdGljIGJvb2wgY29yZWR1bXBfZmlsZShzdHJ1Y3QgY29yZV9uYW1lICpjbiwgc3RydWN0IGNvcmVkdW1wX3BhcmFtcyAqY3BybSwKIAkgKiBmaWxlc3lzdGVtLgogCSAqLwogCWlkbWFwID0gZmlsZV9tbnRfaWRtYXAoZmlsZSk7Ci0JaWYgKCF2ZnN1aWRfZXFfa3VpZChpX3VpZF9pbnRvX3Zmc3VpZChpZG1hcCwgaW5vZGUpLCBjdXJyZW50X2ZzdWlkKCkpKSB7CiYjNDM7CWlmICh2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWUoaWRtYXAsIGlub2RlKSAhPSAwKSB7CiAJCWNvcmVkdW1wX3JlcG9ydF9mYWlsdXJlKCYjMzQ7Q29yZSBkdW1wIHRvICVzIGFib3J0ZWQ6IGNhbm5vdCBwcmVzZXJ2ZSBmaWxlIG93bmVyJiMzNDssIGNuLSZndDtjb3JlbmFtZSk7CiAJCXJldHVybiBmYWxzZTsKIAl9CmRpZmYgLS1naXQgYS9mcy9pbm9kZS5jIGIvZnMvaW5vZGUuYwppbmRleCAzMWM1YjllZTNhODFkZi4uYTdlYzgzMGFiNjgzZjAgMTAwNjQ0Ci0tLSBhL2ZzL2lub2RlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvaW5vZGUuYwpAQCAtMjc1MCwxNiAmIzQzOzI3NTAsMTkgQEAgRVhQT1JUX1NZTUJPTChpbm9kZV9pbml0X293bmVyKTsKICAqIE9uIG5vbi1pZG1hcHBlZCBtb3VudHMgb3IgaWYgcGVybWlzc2lvbiBjaGVja2luZyBpcyB0byBiZSBwZXJmb3JtZWQgb24gdGhlCiAgKiByYXcgaW5vZGUgc2ltcGx5IHBhc3MgQG5vcF9tbnRfaWRtYXAuCiAgKi8KLWJvb2wgaW5vZGVfb3duZXJfb3JfY2FwYWJsZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwKLQkJCSAgICBjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlKQomIzQzO2Jvb2wgaW5vZGVfb3duZXJfb3JfY2FwYWJsZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSkKIHsKIAl2ZnN1aWRfdCB2ZnN1aWQ7CiAJc3RydWN0IHVzZXJfbmFtZXNwYWNlICpuczsKJiM0MzsJaW50IHJldDsKIAotCXZmc3VpZCA9IGlfdWlkX2ludG9fdmZzdWlkKGlkbWFwLCBpbm9kZSk7Ci0JaWYgKHZmc3VpZF9lcV9rdWlkKHZmc3VpZCwgY3VycmVudF9mc3VpZCgpKSkKJiM0MzsJcmV0ID0gdmZzX2lub2RlX2lzX293bmVkX2J5X21lKGlkbWFwLCBpbm9kZSk7CiYjNDM7CWlmIChyZXQgPT0gMCkKIAkJcmV0dXJuIHRydWU7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIGZhbHNlOwogCiYjNDM7CXZmc3VpZCA9IGlfdWlkX2ludG9fdmZzdWlkKGlkbWFwLCBpbm9kZSk7CiAJbnMgPSBjdXJyZW50X3VzZXJfbnMoKTsKIAlpZiAodmZzdWlkX2hhc19tYXBwaW5nKG5zLCB2ZnN1aWQpICZhbXA7JmFtcDsgbnNfY2FwYWJsZShucywgQ0FQX0ZPV05FUikpCiAJCXJldHVybiB0cnVlOwpkaWZmIC0tZ2l0IGEvZnMvaW50ZXJuYWwuaCBiL2ZzL2ludGVybmFsLmgKaW5kZXggMzU1ZDkzZjkyMjA4NjEuLmJlNDVjYzYzODg2MTkyIDEwMDY0NAotLS0gYS9mcy9pbnRlcm5hbC5oCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2ludGVybmFsLmgKQEAgLTUxLDYgJiM0Mzs1MSw3IEBAIGV4dGVybiBpbnQgZmluaXNoX2NsZWFuX2NvbnRleHQoc3RydWN0IGZzX2NvbnRleHQgKmZjKTsKIC8qCiAgKiBuYW1laS5jCiAgKi8KJiM0MztpbnQgdmZzX2lub2RlX2lzX293bmVkX2J5X21lKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKIGV4dGVybiBpbnQgZmlsZW5hbWVfbG9va3VwKGludCBkZmQsIHN0cnVjdCBmaWxlbmFtZSAqbmFtZSwgdW5zaWduZWQgZmxhZ3MsCiAJCQkgICBzdHJ1Y3QgcGF0aCAqcGF0aCwgY29uc3Qgc3RydWN0IHBhdGggKnJvb3QpOwogaW50IGZpbGVuYW1lX3JtZGlyKGludCBkZmQsIHN0cnVjdCBmaWxlbmFtZSAqbmFtZSk7CmRpZmYgLS1naXQgYS9mcy9sb2Nrcy5jIGIvZnMvbG9ja3MuYwppbmRleCA2ZTRmZjdmY2VjMDUzZS4uMDJmODEwZGM5ZTdlN2EgMTAwNjQ0Ci0tLSBhL2ZzL2xvY2tzLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvbG9ja3MuYwpAQCAtNjgsNiAmIzQzOzY4LDcgQEAKICNpbmNsdWRlICZsdDt0cmFjZS9ldmVudHMvZmlsZWxvY2suaCZndDsKIAogI2luY2x1ZGUgJmx0O2xpbnV4L3VhY2Nlc3MuaCZndDsKJiM0MzsjaW5jbHVkZSAmIzM0O2ludGVybmFsLmgmIzM0OwogCiBzdGF0aWMgc3RydWN0IGZpbGVfbG9jayAqZmlsZV9sb2NrKHN0cnVjdCBmaWxlX2xvY2tfY29yZSAqZmxjKQogewpAQCAtMjEzNiwxMCAmIzQzOzIxMzcsMTIgQEAgaW50CiB2ZnNfc2V0bGVhc2Uoc3RydWN0IGZpbGUgKmZpbHAsIGludCBhcmcsIHN0cnVjdCBmaWxlX2xlYXNlICoqbGVhc2UsIHZvaWQgKipwcml2KQogewogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlX2lub2RlKGZpbHApOwotCXZmc3VpZF90IHZmc3VpZCA9IGlfdWlkX2ludG9fdmZzdWlkKGZpbGVfbW50X2lkbWFwKGZpbHApLCBpbm9kZSk7CiAJaW50IGVycm9yOwogCi0JaWYgKCghdmZzdWlkX2VxX2t1aWQodmZzdWlkLCBjdXJyZW50X2ZzdWlkKCkpKSAmYW1wOyZhbXA7ICFjYXBhYmxlKENBUF9MRUFTRSkpCiYjNDM7CWVycm9yID0gdmZzX2lub2RlX2lzX293bmVkX2J5X21lKGZpbGVfbW50X2lkbWFwKGZpbHApLCBpbm9kZSk7CiYjNDM7CWlmIChlcnJvciAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gZXJyb3I7CiYjNDM7CWlmIChlcnJvciAhPSAwICZhbXA7JmFtcDsgIWNhcGFibGUoQ0FQX0xFQVNFKSkKIAkJcmV0dXJuIC1FQUNDRVM7CiAJZXJyb3IgPSBzZWN1cml0eV9maWxlX2xvY2soZmlscCwgYXJnKTsKIAlpZiAoZXJyb3IpCmRpZmYgLS1naXQgYS9mcy9uYW1laS5jIGIvZnMvbmFtZWkuYwppbmRleCAxOWNlNDNjOWE2ZTY2Mi4uNzJmOTRkMjA0ZjkzZjQgMTAwNjQ0Ci0tLSBhL2ZzL25hbWVpLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvbmFtZWkuYwpAQCAtNTUsOCAmIzQzOzU1LDggQEAKICAqIFRoZSBuZXcgY29kZSByZXBsYWNlcyB0aGUgb2xkIHJlY3Vyc2l2ZSBzeW1saW5rIHJlc29sdXRpb24gd2l0aAogICogYW4gaXRlcmF0aXZlIG9uZSAoaW4gY2FzZSBvZiBub24tbmVzdGVkIHN5bWxpbmsgY2hhaW5zKS4gIEl0IGRvZXMKICAqIHRoaXMgd2l0aCBjYWxscyB0byAmbHQ7ZnMmZ3Q7X2ZvbGxvd19saW5rKCkuCi0gKiBBcyBhIHNpZGUgZWZmZWN0LCBkaXJfbmFtZWkoKSwgX25hbWVpKCkgYW5kIGZvbGxvd19saW5rKCkgYXJlIG5vdyAKLSAqIHJlcGxhY2VkIHdpdGggYSBzaW5nbGUgZnVuY3Rpb24gbG9va3VwX2RlbnRyeSgpIHRoYXQgY2FuIGhhbmRsZSBhbGwgCiYjNDM7ICogQXMgYSBzaWRlIGVmZmVjdCwgZGlyX25hbWVpKCksIF9uYW1laSgpIGFuZCBmb2xsb3dfbGluaygpIGFyZSBub3cKJiM0MzsgKiByZXBsYWNlZCB3aXRoIGEgc2luZ2xlIGZ1bmN0aW9uIGxvb2t1cF9kZW50cnkoKSB0aGF0IGNhbiBoYW5kbGUgYWxsCiAgKiB0aGUgc3BlY2lhbCBjYXNlcyBvZiB0aGUgZm9ybWVyIGNvZGUuCiAgKgogICogV2l0aCB0aGUgbmV3IGRjYWNoZSwgdGhlIHBhdGhuYW1lIGlzIHN0b3JlZCBhdCBlYWNoIGlub2RlLCBhdCBsZWFzdCBhcwpAQCAtMTI1NSw2ICYjNDM7MTI1NSw3MiBAQCBmc19pbml0Y2FsbChpbml0X2ZzX25hbWVpX3N5c2N0bHMpOwogCiAjZW5kaWYgLyogQ09ORklHX1NZU0NUTCAqLwogCiYjNDM7LyoKJiM0MzsgKiBEZXRlcm1pbmUgaWYgYW4gaW5vZGUgaXMgb3duZWQgYnkgdGhlIHByb2Nlc3MgKGFsbG93aW5nIGZvciBmc3VpZCBvdmVycmlkZSksCiYjNDM7ICogcmV0dXJuaW5nIDAgaWYgc28sIDEgaWYgbm90IGFuZCBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgaWYgdGhlcmUgd2FzIGEgcHJvYmxlbQomIzQzOyAqIG1ha2luZyB0aGUgZGV0ZXJtaW5hdGlvbi4KJiM0MzsgKi8KJiM0MztpbnQgdmZzX2lub2RlX2lzX293bmVkX2J5X21lKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKQomIzQzO3sKJiM0MzsJaWYgKHVubGlrZWx5KGlub2RlLSZndDtpX29wZmxhZ3MgJmFtcDsgSU9QX09XTkVSU0hJUF9PVkVSUklERSkpCiYjNDM7CQlyZXR1cm4gaW5vZGUtJmd0O2lfb3AtJmd0O2lzX293bmVkX2J5X21lKGlkbWFwLCBpbm9kZSk7CiYjNDM7CWlmICh2ZnN1aWRfZXFfa3VpZChpX3VpZF9pbnRvX3Zmc3VpZChpZG1hcCwgaW5vZGUpLCBjdXJyZW50X2ZzdWlkKCkpKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CXJldHVybiAxOyAvKiBOb3Qgc2FtZS4gKi8KJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBEZXRlcm1pbmUgaWYgYW4gaW5vZGUgaGFzIHRoZSBzYW1lIG93bmVyIGFzIGl0cyBwYXJlbnQgZGlyZWN0b3J5LCByZXR1cm5pbmcKJiM0MzsgKiAwIGlmIHNvLCAxIGlmIG5vdCBhbmQgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIGlmIHRoZXJlIHdhcyBhIHByb2JsZW0gbWFraW5nCiYjNDM7ICogdGhlIGRldGVybWluYXRpb24uCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB2ZnNfaW5vZGVfYW5kX2Rpcl9oYXZlX3NhbWVfb3duZXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiYjNDM7CQkJCQkgICAgIGNvbnN0IHN0cnVjdCBuYW1laWRhdGEgKm5kKQomIzQzO3sKJiM0MzsJaWYgKHVubGlrZWx5KGlub2RlLSZndDtpX29wZmxhZ3MgJmFtcDsgSU9QX09XTkVSU0hJUF9PVkVSUklERSkpIHsKJiM0MzsJCXN0cnVjdCBkZW50cnkgKnBhcmVudDsKJiM0MzsJCXN0cnVjdCBpbm9kZSAqZGlyOwomIzQzOwkJaW50IHJldDsKJiM0MzsKJiM0MzsJCWlmIChpbm9kZSAhPSBuZC0mZ3Q7aW5vZGUpIHsKJiM0MzsJCQlkaXIgPSBuZC0mZ3Q7aW5vZGU7CiYjNDM7CQkJcmV0ID0gaW5vZGUtJmd0O2lfb3AtJmd0O2hhdmVfc2FtZV9vd25lcihpZG1hcCwgaW5vZGUsIGRpcik7CiYjNDM7CQl9IGVsc2UgaWYgKG5kLSZndDtmbGFncyAmYW1wOyBMT09LVVBfUkNVKSB7CiYjNDM7CQkJcGFyZW50ID0gUkVBRF9PTkNFKG5kLSZndDtwYXRoLmRlbnRyeSk7CiYjNDM7CQkJZGlyID0gUkVBRF9PTkNFKHBhcmVudC0mZ3Q7ZF9pbm9kZSk7CiYjNDM7CQkJaWYgKCFkaXIpCiYjNDM7CQkJCXJldHVybiAtRUNISUxEOwomIzQzOwkJCXJldCA9IGlub2RlLSZndDtpX29wLSZndDtoYXZlX3NhbWVfb3duZXIoaWRtYXAsIGlub2RlLCBkaXIpOwomIzQzOwkJfSBlbHNlIHsKJiM0MzsJCQlwYXJlbnQgPSBkZ2V0X3BhcmVudChuZC0mZ3Q7cGF0aC5kZW50cnkpOwomIzQzOwkJCWRpciA9IHBhcmVudC0mZ3Q7ZF9pbm9kZTsKJiM0MzsJCQlyZXQgPSBpbm9kZS0mZ3Q7aV9vcC0mZ3Q7aGF2ZV9zYW1lX293bmVyKGlkbWFwLCBpbm9kZSwgZGlyKTsKJiM0MzsJCQlkcHV0KHBhcmVudCk7CiYjNDM7CQl9CiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICh2ZnN1aWRfdmFsaWQobmQtJmd0O2Rpcl92ZnN1aWQpICZhbXA7JmFtcDsKJiM0MzsJICAgIHZmc3VpZF9lcShpX3VpZF9pbnRvX3Zmc3VpZChpZG1hcCwgaW5vZGUpLCBuZC0mZ3Q7ZGlyX3Zmc3VpZCkpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJcmV0dXJuIDE7IC8qIE5vdCBzYW1lLiAqLwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIERldGVybWluZSBpZiB0d28gaW5vZGVzIGhhdmUgdGhlIHNhbWUgb3duZXIsIHJldHVybmluZyAwIGlmIHNvLCAxIGlmIG5vdCBhbmQKJiM0MzsgKiBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgaWYgdGhlcmUgd2FzIGEgcHJvYmxlbSBtYWtpbmcgdGhlIGRldGVybWluYXRpb24uCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB2ZnNfaW5vZGVzX2hhdmVfc2FtZV9vd25lcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSwKJiM0MzsJCQkJICAgICAgc3RydWN0IGlub2RlICpkaXIpCiYjNDM7ewomIzQzOwlpZiAodW5saWtlbHkoaW5vZGUtJmd0O2lfb3BmbGFncyAmYW1wOyBJT1BfT1dORVJTSElQX09WRVJSSURFKSkKJiM0MzsJCXJldHVybiBpbm9kZS0mZ3Q7aV9vcC0mZ3Q7aGF2ZV9zYW1lX293bmVyKGlkbWFwLCBpbm9kZSwgZGlyKTsKJiM0MzsJaWYgKHZmc3VpZF9lcShpX3VpZF9pbnRvX3Zmc3VpZChpZG1hcCwgaW5vZGUpLAomIzQzOwkJICAgICAgaV91aWRfaW50b192ZnN1aWQoaWRtYXAsIGRpcikpKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CXJldHVybiAxOyAvKiBOb3Qgc2FtZS4gKi8KJiM0Mzt9CiYjNDM7CiAvKioKICAqIG1heV9mb2xsb3dfbGluayAtIENoZWNrIHN5bWxpbmsgZm9sbG93aW5nIGZvciB1bnNhZmUgc2l0dWF0aW9ucwogICogQG5kOiBuYW1laWRhdGEgcGF0aHdhbGsgZGF0YQpAQCAtMTI3MSwyNyAmIzQzOzEzMzcsMjggQEAgZnNfaW5pdGNhbGwoaW5pdF9mc19uYW1laV9zeXNjdGxzKTsKICAqCiAgKiBSZXR1cm5zIDAgaWYgZm9sbG93aW5nIHRoZSBzeW1saW5rIGlzIGFsbG93ZWQsIC12ZSBvbiBlcnJvci4KICAqLwotc3RhdGljIGlubGluZSBpbnQgbWF5X2ZvbGxvd19saW5rKHN0cnVjdCBuYW1laWRhdGEgKm5kLCBjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlKQomIzQzO3N0YXRpYyBpbmxpbmUgaW50IG1heV9mb2xsb3dfbGluayhzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgc3RydWN0IGlub2RlICppbm9kZSkKIHsKIAlzdHJ1Y3QgbW50X2lkbWFwICppZG1hcDsKLQl2ZnN1aWRfdCB2ZnN1aWQ7CiYjNDM7CWludCByZXQ7CiAKIAlpZiAoIXN5c2N0bF9wcm90ZWN0ZWRfc3ltbGlua3MpCiAJCXJldHVybiAwOwogCi0JaWRtYXAgPSBtbnRfaWRtYXAobmQtJmd0O3BhdGgubW50KTsKLQl2ZnN1aWQgPSBpX3VpZF9pbnRvX3Zmc3VpZChpZG1hcCwgaW5vZGUpOwotCS8qIEFsbG93ZWQgaWYgb3duZXIgYW5kIGZvbGxvd2VyIG1hdGNoLiAqLwotCWlmICh2ZnN1aWRfZXFfa3VpZCh2ZnN1aWQsIGN1cnJlbnRfZnN1aWQoKSkpCi0JCXJldHVybiAwOwotCiAJLyogQWxsb3dlZCBpZiBwYXJlbnQgZGlyZWN0b3J5IG5vdCBzdGlja3kgYW5kIHdvcmxkLXdyaXRhYmxlLiAqLwogCWlmICgobmQtJmd0O2Rpcl9tb2RlICZhbXA7IChTX0lTVlRYfFNfSVdPVEgpKSAhPSAoU19JU1ZUWHxTX0lXT1RIKSkKIAkJcmV0dXJuIDA7CiAKJiM0MzsJaWRtYXAgPSBtbnRfaWRtYXAobmQtJmd0O3BhdGgubW50KTsKJiM0MzsJLyogQWxsb3dlZCBpZiBvd25lciBhbmQgZm9sbG93ZXIgbWF0Y2guICovCiYjNDM7CXJldCA9IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShpZG1hcCwgaW5vZGUpOwomIzQzOwlpZiAocmV0ICZsdDs9IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwogCS8qIEFsbG93ZWQgaWYgcGFyZW50IGRpcmVjdG9yeSBhbmQgbGluayBvd25lciBtYXRjaC4gKi8KLQlpZiAodmZzdWlkX3ZhbGlkKG5kLSZndDtkaXJfdmZzdWlkKSAmYW1wOyZhbXA7IHZmc3VpZF9lcShuZC0mZ3Q7ZGlyX3Zmc3VpZCwgdmZzdWlkKSkKLQkJcmV0dXJuIDA7CiYjNDM7CXJldCA9IHZmc19pbm9kZV9hbmRfZGlyX2hhdmVfc2FtZV9vd25lcihpZG1hcCwgaW5vZGUsIG5kKTsKJiM0MzsJaWYgKHJldCAmbHQ7PSAwKQomIzQzOwkJcmV0dXJuIHJldDsKIAogCWlmIChuZC0mZ3Q7ZmxhZ3MgJmFtcDsgTE9PS1VQX1JDVSkKIAkJcmV0dXJuIC1FQ0hJTEQ7CkBAIC0xMzg5LDEyICYjNDM7MTQ1NiwxMiBAQCBpbnQgbWF5X2xpbmthdChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgY29uc3Qgc3RydWN0IHBhdGggKmxpbmspCiAgKiBAaW5vZGU6IHRoZSBpbm9kZSBvZiB0aGUgZmlsZSB0byBvcGVuCiAgKgogICogQmxvY2sgYW4gT19DUkVBVCBvcGVuIG9mIGEgRklGTyAob3IgYSByZWd1bGFyIGZpbGUpIHdoZW46Ci0gKiAgIC0gc3lzY3RsX3Byb3RlY3RlZF9maWZvcyAob3Igc3lzY3RsX3Byb3RlY3RlZF9yZWd1bGFyKSBpcyBlbmFibGVkCi0gKiAgIC0gdGhlIGZpbGUgYWxyZWFkeSBleGlzdHMKLSAqICAgLSB3ZSBhcmUgaW4gYSBzdGlja3kgZGlyZWN0b3J5Ci0gKiAgIC0gd2UgZG9uJiMzOTt0IG93biB0aGUgZmlsZQomIzQzOyAqICAgLSBzeXNjdGxfcHJvdGVjdGVkX2ZpZm9zIChvciBzeXNjdGxfcHJvdGVjdGVkX3JlZ3VsYXIpIGlzIGVuYWJsZWQsCiYjNDM7ICogICAtIHRoZSBmaWxlIGFscmVhZHkgZXhpc3RzLAomIzQzOyAqICAgLSB3ZSBhcmUgaW4gYSBzdGlja3kgZGlyZWN0b3J5LAomIzQzOyAqICAgLSB0aGUgZGlyZWN0b3J5IGlzIHdvcmxkIHdyaXRhYmxlLAomIzQzOyAqICAgLSB3ZSBkb24mIzM5O3Qgb3duIHRoZSBmaWxlIGFuZAogICogICAtIHRoZSBvd25lciBvZiB0aGUgZGlyZWN0b3J5IGRvZXNuJiMzOTt0IG93biB0aGUgZmlsZQotICogICAtIHRoZSBkaXJlY3RvcnkgaXMgd29ybGQgd3JpdGFibGUKICAqIElmIHRoZSBzeXNjdGxfcHJvdGVjdGVkX2ZpZm9zIChvciBzeXNjdGxfcHJvdGVjdGVkX3JlZ3VsYXIpIGlzIHNldCB0byAyCiAgKiB0aGUgZGlyZWN0b3J5IGRvZXNuJiMzOTt0IGhhdmUgdG8gYmUgd29ybGQgd3JpdGFibGU6IGJlaW5nIGdyb3VwIHdyaXRhYmxlIHdpbGwKICAqIGJlIGVub3VnaC4KQEAgLTE0MDUsMTMgJiM0MzsxNDcyLDQ1IEBAIGludCBtYXlfbGlua2F0KHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBjb25zdCBzdHJ1Y3QgcGF0aCAqbGluaykKICAqIE9uIG5vbi1pZG1hcHBlZCBtb3VudHMgb3IgaWYgcGVybWlzc2lvbiBjaGVja2luZyBpcyB0byBiZSBwZXJmb3JtZWQgb24gdGhlCiAgKiByYXcgaW5vZGUgc2ltcGx5IHBhc3MgQG5vcF9tbnRfaWRtYXAuCiAgKgomIzQzOyAqIEZvciBhIGZpbGVzeXN0ZW0gKGUuZy4gYSBuZXR3b3JrIGZpbGVzeXN0ZW0pIHRoYXQgaGFzIGEgc2VwYXJhdGUgSUQgc3BhY2UKJiM0MzsgKiBhbmQgaGFzIGZvcmVpZ24gSURzIChtYXliZSBldmVuIG5vbi1pbnRlZ2VyIElEcyksIGlfdWlkIGNhbm5vdCBiZSBjb21wYXJlZAomIzQzOyAqIHRvIGN1cnJlbnRfZnN1aWQoKSBhbmQgbWF5IG5vdCBiZSBkaXJlY3RseSBjb21wYXJhYmxlIHRvIGFub3RoZXIgaV91aWQuCiYjNDM7ICogSW5zdGVhZCwgdGhlIGZpbGVzeXN0ZW0gaXMgYXNrZWQgdG8gcGVyZm9ybSB0aGUgY29tcGFyaXNvbnMuICBXaXRoIG5ldHdvcmsKJiM0MzsgKiBmaWxlc3lzdGVtcywgdGhlcmUgYWxzbyBleGlzdHMgdGhlIHBvc3NpYmlsaXR5IG9mIGRvaW5nIGFub255bW91cwomIzQzOyAqIG9wZXJhdGlvbnMgYW5kIGhhdmluZyBhbm9ueW1vdXNseS1vd25lZCBvYmplY3RzLgomIzQzOyAqCiYjNDM7ICogV2UgaGF2ZSB0aGUgZm9sbG93aW5nIHNjZW5hcmlvczoKJiM0MzsgKgomIzQzOyAqCVVTRVIJRElSCUZJTEUJRklMRQlBTExPV0VECiYjNDM7ICoJCU9XTkVSCU9XTkVSCVNUQVRFCiYjNDM7ICoJPT09PT09PQk9PT09PT09CT09PT09PT0JPT09PT09PQk9PT09PT09CiYjNDM7ICoJQQlBCS0JTmV3CVllcwomIzQzOyAqCUEJQQlBCUV4aXN0cwlZZXMKJiM0MzsgKglBCUEJQwlFeGlzdHMJTm8KJiM0MzsgKglBCUIJLQlOZXcJWWVzCiYjNDM7ICoJQQlCCUEJRXhpc3RzCVllcywgRk89PVUKJiM0MzsgKglBCUIJQglFeGlzdHMJWWVzLCBGTz09RE8KJiM0MzsgKglBCUIJQwlFeGlzdHMJTm8KJiM0MzsgKglBCWFub25bMV0JLQlOZXcJWWVzCiYjNDM7ICoJQQlhbm9uWzFdCUEJRXhpc3RzCVllcwomIzQzOyAqCUEJYW5vblsxXQlDCUV4aXN0cwlObwomIzQzOyAqCWFub24JQQktCU5ldwlZZXMKJiM0MzsgKglhbm9uCUEJQQlFeGlzdHMJWWVzLCBGTz09RE8KJiM0MzsgKglhbm9uCWFub25bMV0JLQlOZXcJWWVzCiYjNDM7ICoJYW5vbglhbm9uWzFdCS0JRXhpc3RzCU5vCiYjNDM7ICoJYW5vbglBCUEJRXhpc3RzCVllcywgRk89PURPCiYjNDM7ICoJYW5vbglBCUMJRXhpc3RzCU5vCiYjNDM7ICoJYW5vbglBCWFub24JRXhpc3RzCU5vCiYjNDM7ICoKJiM0MzsgKiBbMV0gQ2FuIGFub255bW91c2x5LW93bmVkIGRpcnMgYmUgc3RpY2t5PwomIzQzOyAqCiAgKiBSZXR1cm5zIDAgaWYgdGhlIG9wZW4gaXMgYWxsb3dlZCwgLXZlIG9uIGVycm9yLgogICovCiBzdGF0aWMgaW50IG1heV9jcmVhdGVfaW5fc3RpY2t5KHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgbmFtZWlkYXRhICpuZCwKLQkJCQlzdHJ1Y3QgaW5vZGUgKmNvbnN0IGlub2RlKQomIzQzOwkJCQlzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewogCXVtb2RlX3QgZGlyX21vZGUgPSBuZC0mZ3Q7ZGlyX21vZGU7Ci0JdmZzdWlkX3QgZGlyX3Zmc3VpZCA9IG5kLSZndDtkaXJfdmZzdWlkLCBpX3Zmc3VpZDsKJiM0MzsJaW50IHJldDsKIAogCWlmIChsaWtlbHkoIShkaXJfbW9kZSAmYW1wOyBTX0lTVlRYKSkpCiAJCXJldHVybiAwOwpAQCAtMTQyMiwxMyAmIzQzOzE1MjEsMTMgQEAgc3RhdGljIGludCBtYXlfY3JlYXRlX2luX3N0aWNreShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IG5hbWVpZGF0YSAqbmQsCiAJaWYgKFNfSVNGSUZPKGlub2RlLSZndDtpX21vZGUpICZhbXA7JmFtcDsgIXN5c2N0bF9wcm90ZWN0ZWRfZmlmb3MpCiAJCXJldHVybiAwOwogCi0JaV92ZnN1aWQgPSBpX3VpZF9pbnRvX3Zmc3VpZChpZG1hcCwgaW5vZGUpOwotCi0JaWYgKHZmc3VpZF9lcShpX3Zmc3VpZCwgZGlyX3Zmc3VpZCkpCi0JCXJldHVybiAwOwomIzQzOwlyZXQgPSB2ZnNfaW5vZGVfYW5kX2Rpcl9oYXZlX3NhbWVfb3duZXIoaWRtYXAsIGlub2RlLCBuZCk7CiYjNDM7CWlmIChyZXQgJmx0Oz0gMCkKJiM0MzsJCXJldHVybiByZXQ7CiAKLQlpZiAodmZzdWlkX2VxX2t1aWQoaV92ZnN1aWQsIGN1cnJlbnRfZnN1aWQoKSkpCi0JCXJldHVybiAwOwomIzQzOwlyZXQgPSB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWUoaWRtYXAsIGlub2RlKTsKJiM0MzsJaWYgKHJldCAmbHQ7PSAwKQomIzQzOwkJcmV0dXJuIHJldDsKIAogCWlmIChsaWtlbHkoZGlyX21vZGUgJmFtcDsgMDAwMikpIHsKIAkJYXVkaXRfbG9nX3BhdGhfZGVuaWVkKEFVRElUX0FOT01fQ1JFQVQsICYjMzQ7c3RpY2t5X2NyZWF0ZSYjMzQ7KTsKQEAgLTM2NDUsMTIgJiM0MzszNzQ0LDE0IEBAIEVYUE9SVF9TWU1CT0wodXNlcl9wYXRoX2F0KTsKIGludCBfX2NoZWNrX3N0aWNreShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCiAJCSAgIHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7Ci0Ja3VpZF90IGZzdWlkID0gY3VycmVudF9mc3VpZCgpOwomIzQzOwlpbnQgcmV0OwogCi0JaWYgKHZmc3VpZF9lcV9rdWlkKGlfdWlkX2ludG9fdmZzdWlkKGlkbWFwLCBpbm9kZSksIGZzdWlkKSkKLQkJcmV0dXJuIDA7Ci0JaWYgKHZmc3VpZF9lcV9rdWlkKGlfdWlkX2ludG9fdmZzdWlkKGlkbWFwLCBkaXIpLCBmc3VpZCkpCi0JCXJldHVybiAwOwomIzQzOwlyZXQgPSB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWUoaWRtYXAsIGlub2RlKTsKJiM0MzsJaWYgKHJldCAmbHQ7PSAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJcmV0ID0gdmZzX2lub2Rlc19oYXZlX3NhbWVfb3duZXIoaWRtYXAsIGlub2RlLCBkaXIpOwomIzQzOwlpZiAocmV0ICZsdDs9IDApCiYjNDM7CQlyZXR1cm4gcmV0OwogCXJldHVybiAhY2FwYWJsZV93cnRfaW5vZGVfdWlkZ2lkKGlkbWFwLCBpbm9kZSwgQ0FQX0ZPV05FUik7CiB9CiBFWFBPUlRfU1lNQk9MKF9fY2hlY2tfc3RpY2t5KTsKZGlmZiAtLWdpdCBhL2ZzL3JlbWFwX3JhbmdlLmMgYi9mcy9yZW1hcF9yYW5nZS5jCmluZGV4IDI2YWZiYmJmYjEwYzJlLi45ZWVlOTNjMjcwMDEyNSAxMDA2NDQKLS0tIGEvZnMvcmVtYXBfcmFuZ2UuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9yZW1hcF9yYW5nZS5jCkBAIC00MTMsMjAgJiM0Mzs0MTMsMjIgQEAgbG9mZl90IHZmc19jbG9uZV9maWxlX3JhbmdlKHN0cnVjdCBmaWxlICpmaWxlX2luLCBsb2ZmX3QgcG9zX2luLAogRVhQT1JUX1NZTUJPTCh2ZnNfY2xvbmVfZmlsZV9yYW5nZSk7CiAKIC8qIENoZWNrIHdoZXRoZXIgd2UgYXJlIGFsbG93ZWQgdG8gZGVkdXBlIHRoZSBkZXN0aW5hdGlvbiBmaWxlICovCi1zdGF0aWMgYm9vbCBtYXlfZGVkdXBlX2ZpbGUoc3RydWN0IGZpbGUgKmZpbGUpCiYjNDM7c3RhdGljIGludCBtYXlfZGVkdXBlX2ZpbGUoc3RydWN0IGZpbGUgKmZpbGUpCiB7CiAJc3RydWN0IG1udF9pZG1hcCAqaWRtYXAgPSBmaWxlX21udF9pZG1hcChmaWxlKTsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZV9pbm9kZShmaWxlKTsKJiM0MzsJaW50IHJldDsKIAogCWlmIChjYXBhYmxlKENBUF9TWVNfQURNSU4pKQotCQlyZXR1cm4gdHJ1ZTsKJiM0MzsJCXJldHVybiAwOwogCWlmIChmaWxlLSZndDtmX21vZGUgJmFtcDsgRk1PREVfV1JJVEUpCi0JCXJldHVybiB0cnVlOwotCWlmICh2ZnN1aWRfZXFfa3VpZChpX3VpZF9pbnRvX3Zmc3VpZChpZG1hcCwgaW5vZGUpLCBjdXJyZW50X2ZzdWlkKCkpKQotCQlyZXR1cm4gdHJ1ZTsKJiM0MzsJCXJldHVybiAwOwomIzQzOwlyZXQgPSB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWUoaWRtYXAsIGlub2RlKTsKJiM0MzsJaWYgKHJldCAmbHQ7PSAwKQomIzQzOwkJcmV0dXJuIHJldDsKIAlpZiAoIWlub2RlX3Blcm1pc3Npb24oaWRtYXAsIGlub2RlLCBNQVlfV1JJVEUpKQotCQlyZXR1cm4gdHJ1ZTsKLQlyZXR1cm4gZmFsc2U7CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJcmV0dXJuIC1FUEVSTTsKIH0KIAogbG9mZl90IHZmc19kZWR1cGVfZmlsZV9yYW5nZV9vbmUoc3RydWN0IGZpbGUgKnNyY19maWxlLCBsb2ZmX3Qgc3JjX3BvcywKQEAgLTQ1OSw4ICYjNDM7NDYxLDggQEAgbG9mZl90IHZmc19kZWR1cGVfZmlsZV9yYW5nZV9vbmUoc3RydWN0IGZpbGUgKnNyY19maWxlLCBsb2ZmX3Qgc3JjX3BvcywKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0JcmV0ID0gLUVQRVJNOwotCWlmICghbWF5X2RlZHVwZV9maWxlKGRzdF9maWxlKSkKJiM0MzsJcmV0ID0gbWF5X2RlZHVwZV9maWxlKGRzdF9maWxlKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiAJCWdvdG8gb3V0X2Ryb3Bfd3JpdGU7CiAKIAlyZXQgPSAtRVhERVY7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZzLmggYi9pbmNsdWRlL2xpbnV4L2ZzLmgKaW5kZXggNTBjZTczMWEyYjc4ZjEuLjgwMTNjMTNhMzUzZDY3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ZzLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9mcy5oCkBAIC02MjgsNiAmIzQzOzYyOCw3IEBAIGlzX3VuY2FjaGVkX2FjbChzdHJ1Y3QgcG9zaXhfYWNsICphY2wpCiAjZGVmaW5lIElPUF9DQUNIRURfTElOSwkJMHgwMDQwCiAjZGVmaW5lIElPUF9GQVNUUEVSTV9NQVlfRVhFQwkweDAwODAKICNkZWZpbmUgSU9QX0ZMQ1RYCQkweDAxMDAKJiM0MzsjZGVmaW5lIElPUF9PV05FUlNISVBfT1ZFUlJJREUJMHgwMjAwCS8qIFVzZSAtJmd0O2lzX293bmVkX2J5X21lKCkgYW5kIC0mZ3Q7aGF2ZV9zYW1lX293bmVyKCkgKi8KIAogLyoKICAqIElub2RlIHN0YXRlIGJpdHMuICBQcm90ZWN0ZWQgYnkgaW5vZGUtJmd0O2lfbG9jawpAQCAtMTc1NSw4ICYjNDM7MTc1Niw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBmaWxlX3dyaXRlX25vdF9zdGFydGVkKGNvbnN0IHN0cnVjdCBmaWxlICpmaWxlKQogCXJldHVybiBzYl93cml0ZV9ub3Rfc3RhcnRlZChmaWxlX2lub2RlKGZpbGUpLSZndDtpX3NiKTsKIH0KIAotYm9vbCBpbm9kZV9vd25lcl9vcl9jYXBhYmxlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLAotCQkJICAgIGNvbnN0IHN0cnVjdCBpbm9kZSAqaW5vZGUpOwomIzQzO2Jvb2wgaW5vZGVfb3duZXJfb3JfY2FwYWJsZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSk7CiAKIC8qCiAgKiBWRlMgaGVscGVyIGZ1bmN0aW9ucy4uCkBAIC0yMDM2LDYgJiM0MzsyMDM2LDkgQEAgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgewogCQkJICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGZpbGVfa2F0dHIgKmZhKTsKIAlpbnQgKCpmaWxlYXR0cl9nZXQpKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGZpbGVfa2F0dHIgKmZhKTsKIAlzdHJ1Y3Qgb2Zmc2V0X2N0eCAqKCpnZXRfb2Zmc2V0X2N0eCkoc3RydWN0IGlub2RlICppbm9kZSk7CiYjNDM7CWludCAoKmlzX293bmVkX2J5X21lKShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSk7CiYjNDM7CWludCAoKmhhdmVfc2FtZV9vd25lcikoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUxLAomIzQzOwkJCSAgICAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlMik7CiB9IF9fX19jYWNoZWxpbmVfYWxpZ25lZDsKIAogLyogRGlkIHRoZSBkcml2ZXIgcHJvdmlkZSB2YWxpZCBtbWFwIGhvb2sgY29uZmlndXJhdGlvbj8gKi8KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDM6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMxNzkKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiA1OTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJbm9kZSBPd25lcnNoaXAgUGF0Y2ggZm9yIEZ1enppbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0JiMzOTtzIGludHJvZHVjaW5nIHNvbWUgc2lnbmlmaWNhbnQgY2hhbmdlcyByZWxhdGVkIHRvIGlub2RlIG93bmVyc2hpcCBjaGVja3MsIHNwZWNpZmljYWxseSB3aXRoIHRoZSBgaXNfb3duZWRfYnlfbWVgIGFuZCBgaGF2ZV9zYW1lX293bmVyYCBvcGVyYXRpb25zLCBhbmQgaW1wbGVtZW50YXRpb24gZm9yIEFGUy4gVGhlIG1haW4gdGhydXN0IGlzIHRoaXMgbmV3IGBJT1BfT1dORVJTSElQX09WRVJSSURFYCBmbGFnIGFuZCBhIGJ1bmNoIG9mIFZGUyBwYXRoIG1vZGlmaWNhdGlvbnMuIFRoZSBjb2RlIGlzIHVzaW5nIHRoZSBuZXcgaW5vZGUgb3BlcmF0aW9ucyBpbnN0ZWFkIG9mIGRpcmVjdGx5IGNvbXBhcmluZyBVSURzIHVzaW5nIGB2ZnN1aWRfZXFfa3VpZGAsIGluIGZ1bmN0aW9ucyBsaWtlIGBjaG93bl9va2AsIGBjaGdycF9va2AsIGBjb3JlZHVtcF9maWxlYCwgZXRjLgoKVGhpcyBpcyBhIHByZXR0eSBmdW5kYW1lbnRhbCBzaGlmdCBpbiBob3cgb3duZXJzaGlwIGlzIGNoZWNrZWQsIGltcGFjdGluZyBib3RoIHRoZSBjb3JlIFZGUyBhbmQgdGhlIEFGUyBmaWxlc3lzdGVtLCBhbmQgdGhhdCBzY3JlYW1zICYjMzQ7ZnV6eiBtZS4mIzM0OyBJIG5lZWQgdG8gZGV0ZXJtaW5lIHdoZXJlIHRvIGNvbmNlbnRyYXRlIG15IGZ1enppbmcgZWZmb3J0cyB0byBpZGVudGlmeSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLgoKTXkgaW5pdGlhbCBmb2N1cyB3aWxsIGJlIG9uIHRoZSBuZXcgZnVuY3Rpb25zIHRoYXQgaW1wbGVtZW50IHRoZSBmdW5jdGlvbmFsaXR5OiBgdmZzX2lub2RlX2lzX293bmVkX2J5X21lYCwgYHZmc19pbm9kZV9hbmRfZGlyX2hhdmVfc2FtZV9vd25lcmAsIGB2ZnNfaW5vZGVzX2hhdmVfc2FtZV9vd25lcmAsIGBhZnNfaXNfb3duZWRfYnlfbWVgLCBhbmQgYGFmc19oYXZlX3NhbWVfb3duZXJgLiBUaGVzZSBhcmUgdGhlIGRpcmVjdCBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlIG5ldyBsb2dpYy4gQWxzbywgSSYjMzk7bGwgbmVlZCB0byBmdXp6IHRoZSBtb2RpZmllZCBmdW5jdGlvbnMgdG9vLCB0byBtYWtlIHN1cmUgdGhlIGNoYW5nZSBpcyB3b3JraW5nLgoKTm93LCBsZXQmIzM5O3Mgc2VlLCB3aGljaCBvZiB0aGVzZSBhcmUgZXhwb3NlZD8gYHZmc19pbm9kZV9pc19vd25lZF9ieV9tZWAgaW4gYGZzL25hbWVpLmNgIGlzIG5vbi1zdGF0aWMgYW5kIGV4cG9ydGVkLCBtZWFuaW5nIGl0JiMzOTtzIGFjY2Vzc2libGUuIGB2ZnNfaW5vZGVfYW5kX2Rpcl9oYXZlX3NhbWVfb3duZXJgIGFuZCBgdmZzX2lub2Rlc19oYXZlX3NhbWVfb3duZXJgIGFyZSBzdGF0aWMgaW4gYGZzL25hbWVpLmNgLCBzbyBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoZXkgYXJlIHVzZWQgd2l0aGluIHRoZWlyIGNvbXBpbGF0aW9uIHVuaXQsIHRvIHNlZSBob3cgdG8gdHJpZ2dlciB0aGVtLiBgYWZzX2lzX293bmVkX2J5X21lYCBhbmQgYGFmc19oYXZlX3NhbWVfb3duZXJgIGFyZSBpbiBgZnMvYWZzL3NlY3VyaXR5LmNgLCBhbmQgdGhleSYjMzk7cmUgbm9uLXN0YXRpYy4KCk9rYXksIGxldCYjMzk7cyBkaWcgaW50byBgZnMvbmFtZWkuY2AgYW5kIHNlZSBleGFjdGx5IGhvdyBgdmZzX2lub2RlX2lzX293bmVkX2J5X21lYCBpcyB1c2VkIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhlIHBvdGVudGlhbCBhdHRhY2sgc3VyZmFjZS4gVGhpcyBpcyB3aGVyZSB0aGUgcmVhbCBpbnRlcmVzdGluZyBzdHVmZiBpcyBnb2luZyB0byBiZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwMzozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvYXR0ci5jPTk1PXN0YXRpYyBpbnQgY2hvd25fb2soc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4tLVxuZnMvYXR0ci5jLTEwMC1cbmZzL2F0dHIuYzoxMDE6XHRyZXQgPSB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWUoaWRtYXAsIGlub2RlKTtcbmZzL2F0dHIuYy0xMDItXHRpZiAocmV0IFx1MDAzYz0gMClcbi0tXG5mcy9hdHRyLmM9MTI0PXN0YXRpYyBpbnQgY2hncnBfb2soc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4tLVxuZnMvYXR0ci5jLTEyOS1cbmZzL2F0dHIuYzoxMzA6XHRyZXQgPSB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWUoaWRtYXAsIGlub2RlKTtcbmZzL2F0dHIuYy0xMzEtXHRpZiAocmV0IFx1MDAzYyAwKVxuLS1cbmZzL2NvcmVkdW1wLmM9ODc4PXN0YXRpYyBib29sIGNvcmVkdW1wX2ZpbGUoc3RydWN0IGNvcmVfbmFtZSAqY24sIHN0cnVjdCBjb3JlZHVtcF9wYXJhbXMgKmNwcm0sXG4tLVxuZnMvY29yZWR1bXAuYy05NTYtXHRpZG1hcCA9IGZpbGVfbW50X2lkbWFwKGZpbGUpO1xuZnMvY29yZWR1bXAuYzo5NTc6XHRpZiAodmZzX2lub2RlX2lzX293bmVkX2J5X21lKGlkbWFwLCBpbm9kZSkgIT0gMCkge1xuZnMvY29yZWR1bXAuYy05NTgtXHRcdGNvcmVkdW1wX3JlcG9ydF9mYWlsdXJlKFwmIzM0O0NvcmUgZHVtcCB0byAlcyBhYm9ydGVkOiBjYW5ub3QgcHJlc2VydmUgZmlsZSBvd25lclwmIzM0OywgY24tXHUwMDNlY29yZW5hbWUpO1xuLS1cbmZzL2lub2RlLmM9Mjc1Mz1ib29sIGlub2RlX293bmVyX29yX2NhcGFibGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4tLVxuZnMvaW5vZGUuYy0yNzU4LVxuZnMvaW5vZGUuYzoyNzU5Olx0cmV0ID0gdmZzX2lub2RlX2lzX293bmVkX2J5X21lKGlkbWFwLCBpbm9kZSk7XG5mcy9pbm9kZS5jLTI3NjAtXHRpZiAocmV0ID09IDApXG4tLVxuZnMvaW50ZXJuYWwuaD00OT1leHRlcm4gaW50IGZpbmlzaF9jbGVhbl9jb250ZXh0KHN0cnVjdCBmc19jb250ZXh0ICpmYyk7XG4tLVxuZnMvaW50ZXJuYWwuaC01My0gKi9cbmZzL2ludGVybmFsLmg6NTQ6aW50IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSk7XG5mcy9pbnRlcm5hbC5oLTU1LWV4dGVybiBpbnQgZmlsZW5hbWVfbG9va3VwKGludCBkZmQsIHN0cnVjdCBmaWxlbmFtZSAqbmFtZSwgdW5zaWduZWQgZmxhZ3MsXG4tLVxuZnMvbG9ja3MuYz0yMTM3PXZmc19zZXRsZWFzZShzdHJ1Y3QgZmlsZSAqZmlscCwgaW50IGFyZywgc3RydWN0IGZpbGVfbGVhc2UgKipsZWFzZSwgdm9pZCAqKnByaXYpXG4tLVxuZnMvbG9ja3MuYy0yMTQxLVxuZnMvbG9ja3MuYzoyMTQyOlx0ZXJyb3IgPSB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWUoZmlsZV9tbnRfaWRtYXAoZmlscCksIGlub2RlKTtcbmZzL2xvY2tzLmMtMjE0My1cdGlmIChlcnJvciBcdTAwM2MgMClcbi0tXG5mcy9uYW1laS5jPTEyNTQ9ZnNfaW5pdGNhbGwoaW5pdF9mc19uYW1laV9zeXNjdGxzKTtcbi0tXG5mcy9uYW1laS5jLTEyNjItICovXG5mcy9uYW1laS5jOjEyNjM6aW50IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSlcbmZzL25hbWVpLmMtMTI2NC17XG4tLVxuZnMvbmFtZWkuYz0xMzQwPXN0YXRpYyBpbmxpbmUgaW50IG1heV9mb2xsb3dfbGluayhzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgc3RydWN0IGlub2RlICppbm9kZSlcbi0tXG5mcy9uYW1laS5jLTEzNTMtXHQvKiBBbGxvd2VkIGlmIG93bmVyIGFuZCBmb2xsb3dlciBtYXRjaC4gKi9cbmZzL25hbWVpLmM6MTM1NDpcdHJldCA9IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShpZG1hcCwgaW5vZGUpO1xuZnMvbmFtZWkuYy0xMzU1LVx0aWYgKHJldCBcdTAwM2M9IDApXG4tLVxuZnMvbmFtZWkuYz0xNTA5PXN0YXRpYyBpbnQgbWF5X2NyZWF0ZV9pbl9zdGlja3koc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBuYW1laWRhdGEgKm5kLFxuLS1cbmZzL25hbWVpLmMtMTUyNy1cbmZzL25hbWVpLmM6MTUyODpcdHJldCA9IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShpZG1hcCwgaW5vZGUpO1xuZnMvbmFtZWkuYy0xNTI5LVx0aWYgKHJldCBcdTAwM2M9IDApXG4tLVxuZnMvbmFtZWkuYz0zNzQ0PWludCBfX2NoZWNrX3N0aWNreShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4tLVxuZnMvbmFtZWkuYy0zNzQ4LVxuZnMvbmFtZWkuYzozNzQ5Olx0cmV0ID0gdmZzX2lub2RlX2lzX293bmVkX2J5X21lKGlkbWFwLCBpbm9kZSk7XG5mcy9uYW1laS5jLTM3NTAtXHRpZiAocmV0IFx1MDAzYz0gMClcbi0tXG5mcy9yZW1hcF9yYW5nZS5jPTQxNj1zdGF0aWMgaW50IG1heV9kZWR1cGVfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSlcbi0tXG5mcy9yZW1hcF9yYW5nZS5jLTQyNS1cdFx0cmV0dXJuIDA7XG5mcy9yZW1hcF9yYW5nZS5jOjQyNjpcdHJldCA9IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShpZG1hcCwgaW5vZGUpO1xuZnMvcmVtYXBfcmFuZ2UuYy00MjctXHRpZiAocmV0IFx1MDAzYz0gMClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwMzozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTUxNwoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDk2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgZnVuY3Rpb25zLgoKKipJbml0aWFsIENvbnNpZGVyYXRpb25zIGZvciBGaWxlIE93bmVyc2hpcCBhbmQgTGVhc2UgTWFuYWdlbWVudCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGVzZSBmdW5jdGlvbnMuIE15IGluaXRpYWwgZm9jdXMgaXMgb24gZmlsZSBvd25lcnNoaXAsIGxlYXNlIG1hbmFnZW1lbnQsIGFuZCBhY2Nlc3MgY29udHJvbC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIHBpZWNlcyBmaXQgdG9nZXRoZXIgaW4gYSBmaWxlIHN5c3RlbSBjb250ZXh0LiBUaGUgY29yZSBmdW5jdGlvbnMgSSYjMzk7bSB0aGlua2luZyBhYm91dCBhcmU6IGB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWVgLCBgYWZzX2lzX293bmVkX2J5X21lYCwgYGFmc19oYXZlX3NhbWVfb3duZXJgLCBgaW5vZGVfb3duZXJfb3JfY2FwYWJsZWAsIGB2ZnNfc2V0bGVhc2VgLCBhbmQgYF9fY2hlY2tfc3RpY2t5YC4KCkZpcnN0LCBhIHF1aWNrIGNoZWNrLi4uIEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgYGFmc19pc19vd25lZF9ieV9tZWAgaXMgZXhwb3J0ZWQgb3Igc3RhdGljLiBLbm93aW5nIHRoaXMgaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyBpdHMgc2NvcGUgYW5kIGhvdyBpdCYjMzk7cyBpbnRlbmRlZCB0byBiZSB1c2VkIHdpdGhpbiB0aGUgYnJvYWRlciBzeXN0ZW0uIEkmIzM5O2xsIG5lZWQgdG8gbG9vayB0aGF0IHVwLiBJIG5lZWQgdG8gYmUgYXdhcmUgb2YgdGhlIGNvbnRleHQgb2YgdGhpcyBmdW5jdGlvbiwgc2luY2UgaXQgaXMgbmFtZWQgJiMzNDthZnMmIzM0OyB3aGljaCBsaWtlbHkgcmVmZXJzIHRvIEFuZHJldyBGaWxlIFN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwMzozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthZnNfaXNfb3duZWRfYnlfbWUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvYWZzL2Rpci5jPTYwPWNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGFmc19kaXJfaW5vZGVfb3BlcmF0aW9ucyA9IHtcbi0tXG5mcy9hZnMvZGlyLmMtNzEtXHQuc2V0YXR0clx0PSBhZnNfc2V0YXR0cixcbmZzL2Fmcy9kaXIuYzo3MjpcdC5pc19vd25lZF9ieV9tZVx0PSBhZnNfaXNfb3duZWRfYnlfbWUsXG5mcy9hZnMvZGlyLmMtNzMtXHQuaGF2ZV9zYW1lX293bmVyID0gYWZzX2hhdmVfc2FtZV9vd25lcixcbi0tXG5mcy9hZnMvZmlsZS5jPTQ4PWNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGFmc19maWxlX2lub2RlX29wZXJhdGlvbnMgPSB7XG4tLVxuZnMvYWZzL2ZpbGUuYy01MS1cdC5wZXJtaXNzaW9uXHQ9IGFmc19wZXJtaXNzaW9uLFxuZnMvYWZzL2ZpbGUuYzo1MjpcdC5pc19vd25lZF9ieV9tZVx0PSBhZnNfaXNfb3duZWRfYnlfbWUsXG5mcy9hZnMvZmlsZS5jLTUzLVx0LmhhdmVfc2FtZV9vd25lciA9IGFmc19oYXZlX3NhbWVfb3duZXIsXG4tLVxuZnMvYWZzL2ludGVybmFsLmg9MTU0MT1leHRlcm4gaW50IGFmc19wZXJtaXNzaW9uKHN0cnVjdCBtbnRfaWRtYXAgKiwgc3RydWN0IGlub2RlICosIGludCk7XG5mcy9hZnMvaW50ZXJuYWwuaDoxNTQyOmludCBhZnNfaXNfb3duZWRfYnlfbWUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xuZnMvYWZzL2ludGVybmFsLmgtMTU0My1pbnQgYWZzX2hhdmVfc2FtZV9vd25lcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZTEsXG4tLVxuZnMvYWZzL3NlY3VyaXR5LmM9NDMxPWludCBhZnNfcGVybWlzc2lvbihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9hZnMvc2VjdXJpdHkuYy01MTgtICovXG5mcy9hZnMvc2VjdXJpdHkuYzo1MTk6aW50IGFmc19pc19vd25lZF9ieV9tZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSlcbmZzL2Fmcy9zZWN1cml0eS5jLTUyMC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDM6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYzMTgKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA2MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgQUZTIE93bmVyc2hpcCBDaGVja3MqKgoKUmlnaHQsIHNvIEkmIzM5O3ZlIGNvbmZpcm1lZCB0aGF0IGBhZnNfaXNfb3duZWRfYnlfbWVgIGFuZCBgYWZzX2hhdmVfc2FtZV9vd25lcmAgYXJlICpub3QqIHN0YXRpYywgYXMgZXhwZWN0ZWQuIE5vdywgbXkgbmV4dCBzdGVwIGlzIHRvIHF1aWNrbHkgdmVyaWZ5IGlmIHRoZSBidWlsZCBwcm9jZXNzIG5lZWRzIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIG9wdGlvbnMgZW5hYmxlZCB0byBjb3JyZWN0bHkgY29tcGlsZSBhbmQgbGluayB0aGlzIGNvZGUuIExvb2tpbmcgYXQgdGhlIGNvZGUgcGF0aCwgaXQmIzM5O3MgcHJldHR5IGNsZWFyIHRoYXQgdGhpcyBsaXZlcyB3aXRoaW4gYGZzL2Fmcy9gLCB3aGljaCBzY3JlYW1zIHRoYXQgd2UmIzM5O2xsIGxpa2VseSBuZWVkIGBDT05GSUdfQUZTX0ZTYCBkZWZpbmVkLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgcHJlcmVxdWlzaXRlIGlzIG1ldCB0byBjb250aW51ZSBteSBhbmFseXNpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwMzozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQUZTX0ZTJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2Fmcy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5mcy9hZnMvS2NvbmZpZzoyOmNvbmZpZyBBRlNfRlNcbmZzL2Fmcy9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtBbmRyZXcgRmlsZSBTeXN0ZW0gc3VwcG9ydCAoQUZTKVwmIzM0O1xuLS1cbmZzL2Fmcy9LY29uZmlnPTE3PWNvbmZpZyBBRlNfREVCVUdcbi0tXG5mcy9hZnMvS2NvbmZpZy0yNi1cbmZzL2Fmcy9LY29uZmlnOjI3OmNvbmZpZyBBRlNfRlNDQUNIRVxuZnMvYWZzL0tjb25maWctMjgtXHRib29sIFwmIzM0O1Byb3ZpZGUgQUZTIGNsaWVudCBjYWNoaW5nIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwMzozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjY4NQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhlIGNvZGU6CgoqKkNoZWNraW5nIEFGUyBLZXJuZWwgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGRlcGVuZGVuY2llcyByZWxhdGVkIHRvIHRoZSBBRlMgKEFuZHJldyBGaWxlIFN5c3RlbSkgZmlsZXN5c3RlbSB3aXRoaW4gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLiBJJiMzOTtsbCBzdGFydCBieSB0YWtpbmcgYSBsb29rIGF0IGBmcy9hZnMvS2NvbmZpZ2AuIFRoaXMgZmlsZSBzaG91bGQgY29udGFpbiB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZ29pbmcgdG8gZm9jdXMgb24gd2hlcmUgdGhlIGBBRlNfRlNgIG9wdGlvbiBpcyBkZWZpbmVkIGFuZCBhbnkgZGVwZW5kZW5jaWVzIGl0IG1pZ2h0IGhhdmUuIFVuZGVyc3RhbmRpbmcgdGhlc2UgZGVwZW5kZW5jaWVzIGlzIGNydWNpYWwuIEl0IHRlbGxzIG1lIHdoaWNoIG90aGVyIGtlcm5lbCBmZWF0dXJlcyBuZWVkIHRvIGJlIGVuYWJsZWQgb3IgYXJlIHJlcXVpcmVkIGZvciBBRlMgc3VwcG9ydCB0byBiZSBidWlsdC4gS25vd2luZyB0aGlzIGFsbG93cyBmb3IgbWFraW5nIHRoZSBuZWNlc3NhcnkgY2hvaWNlcyB0byBjb25maWd1cmUgYSBrZXJuZWwgd2l0aCBBRlMgc3VwcG9ydC4gVGhpcyB3aWxsIGdpdmUgbWUgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQgbmVlZHMgdG8gYmUgZW5hYmxlZCBpbiBvcmRlciB0byBtYWtlIEFGUyBhdmFpbGFibGUsIGFuZCBob3cgaXQgaXMgaW50ZWdyYXRlZCBpbiB0aGUga2VybmVsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwMzozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2Fmcy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0Y29uZmlnIEFGU19GU1xuICAgMzpcdFx0dHJpc3RhdGUgXCYjMzQ7QW5kcmV3IEZpbGUgU3lzdGVtIHN1cHBvcnQgKEFGUylcJiMzNDtcbiAgIDQ6XHRcdGRlcGVuZHMgb24gSU5FVFxuICAgNTpcdFx0c2VsZWN0IEFGX1JYUlBDXG4gICA2Olx0XHRzZWxlY3QgRE5TX1JFU09MVkVSXG4gICA3Olx0XHRzZWxlY3QgTkVURlNfU1VQUE9SVFxuICAgODpcdFx0c2VsZWN0IENSWVBUT19LUkI1XG4gICA5Olx0XHRoZWxwXG4gIDEwOlx0XHQgIElmIHlvdSBzYXkgWSBoZXJlLCB5b3Ugd2lsbCBnZXQgYW4gZXhwZXJpbWVudGFsIEFuZHJldyBGaWxlIFN5c3RlbVxuICAxMTpcdFx0ICBkcml2ZXIuIEl0IGN1cnJlbnRseSBvbmx5IHN1cHBvcnRzIHVuc2VjdXJlZCByZWFkLW9ubHkgQUZTIGFjY2Vzcy5cbiAgMTI6XHRcbiAgMTM6XHRcdCAgU2VlIFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9hZnMucnN0XHUwMDNlIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICAxNDpcdFxuICAxNTpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuICAxNjpcdFxuICAxNzpcdGNvbmZpZyBBRlNfREVCVUdcbiAgMTg6XHRcdGJvb2wgXCYjMzQ7QUZTIGR5bmFtaWMgZGVidWdnaW5nXCYjMzQ7XG4gIDE5Olx0XHRkZXBlbmRzIG9uIEFGU19GU1xuICAyMDpcdFx0aGVscFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwMzozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzE3MgoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDE5OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBDb25maWd1cmF0aW9uIFdvcmtmbG93KioKCk9rYXksIHNvIEkgc2VlIHRoYXQgdGhlIGBBRlNfRlNgIGZpbGVzeXN0ZW0gY2xlYXJseSBoYXMgYSBkZXBlbmRlbmN5IG9uIGBJTkVUYC4gVGhhdCBtYWtlcyBzZW5zZS4gVGhlcmVmb3JlLCB0aGUgaW1tZWRpYXRlIGFjdGlvbiBpcyB0byBhZGQgYEFGU19GU2AgdG8gYEVuYWJsZUNvbmZpZ3NgIHRvIGVuc3VyZSBpdCBnZXRzIGJ1aWx0IGNvcnJlY3RseSBhbG9uZyB3aXRoIGl0cyBuZXR3b3JraW5nIGRlcGVuZGVuY2llcy4KCk5vdywgbGV0JiMzOTtzIHRha2UgYSBicm9hZGVyIGxvb2suIEFyZSB0aGVyZSBhbnkgb3RoZXIgY29uZmlndXJhdGlvbiBpdGVtcyB0aGF0IG5lZWQgYXR0ZW50aW9uPyBJIG5lZWQgdG8gcmV2aWV3IHRoZSBjb2RlIGNoYW5nZXMgYW5kIGRldGVybWluZSBpZiB0aGV5IHJlcXVpcmUgYWRkaXRpb25hbCBjb25maWd1cmF0aW9uIGZsYWdzLgoKTG9va2luZyBhdCB0aGUgY2hhbmdlcyBpbiBgZnMvbmFtZWkuY2AsIGBmcy9hdHRyLmNgLCBgZnMvY29yZWR1bXAuY2AsIGBmcy9pbm9kZS5jYCwgYGZzL2xvY2tzLmNgLCBhbmQgYGZzL3JlbWFwX3JhbmdlLmNgLCB0aGV5JiMzOTtyZSBhbGwgY29yZSBWRlMgbW9kaWZpY2F0aW9ucy4gVGhlc2UgYXJlIGZ1bmRhbWVudGFsIGZpbGVzeXN0ZW0gb3BlcmF0aW9ucyBhbmQgZG9uJiMzOTt0IHNlZW0gdG8gd2FycmFudCBhIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBUaGV54oCZcmUgcGFydCBvZiB0aGUgYmFzZSBWRlMgYW5kIHNob3VsZCBqdXN0IHdvcmsuCgpOZXh0LCBJIG5lZWQgdG8gY2hlY2sgdGhlIHNjb3BlIG9mIHRoZSBmdW5jdGlvbiBgdmZzX2lub2RlX2lzX293bmVkX2J5X21lYC4gSXMgaXQgZXhwb3J0ZWQ/IEkgc2VlIGl04oCZcyBkZWNsYXJlZCBpbiBgZnMvaW50ZXJuYWwuaGAuIFRoYXQgbWVhbnMgaXQmIzM5O3Mgbm90IGV4cG9ydGVkIHRvIG1vZHVsZXMsIHdoaWNoIGlzIGdlbmVyYWxseSB3aGF0IEkgd291bGQgZXhwZWN0IGZvciBhIGZ1bmN0aW9uIG9mIHRoaXMgbmF0dXJlLiBIb3dldmVyLCBpdCAqaXMqIGEgbm9uLXN0YXRpYyBmdW5jdGlvbiB3aXRoaW4gdGhlIGtlcm5lbCBjb3JlLCBzbyBpdCYjMzk7cyBhY2Nlc3NpYmxlIGludGVybmFsbHkuCgpGaW5hbGx5LCBJIHdpbGwgY2hlY2sgdGhlIHJlbWFpbmluZyBmdW5jdGlvbnMgb2YgaW50ZXJlc3QuIEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgYHZmc19pbm9kZV9hbmRfZGlyX2hhdmVfc2FtZV9vd25lcmAgYW5kIGB2ZnNfaW5vZGVzX2hhdmVfc2FtZV9vd25lcmAgYXJlIHN0YXRpYyBmdW5jdGlvbnMuIFRoaXMgd2lsbCBpbmZsdWVuY2UgaG93IGFuZCB3aGVyZSB0aGV5IGNhbiBiZSB1c2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwMzozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2ZnNfaW5vZGVfYW5kX2Rpcl9oYXZlX3NhbWVfb3duZXImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvbmFtZWkuYz0xMjYzPWludCB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4tLVxuZnMvbmFtZWkuYy0xMjc2LSAqL1xuZnMvbmFtZWkuYzoxMjc3OnN0YXRpYyBpbnQgdmZzX2lub2RlX2FuZF9kaXJfaGF2ZV9zYW1lX293bmVyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuZnMvbmFtZWkuYy0xMjc4LVx0XHRcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBuYW1laWRhdGEgKm5kKVxuLS1cbmZzL25hbWVpLmM9MTM0MD1zdGF0aWMgaW5saW5lIGludCBtYXlfZm9sbG93X2xpbmsoc3RydWN0IG5hbWVpZGF0YSAqbmQsIHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4tLVxuZnMvbmFtZWkuYy0xMzU4LVx0LyogQWxsb3dlZCBpZiBwYXJlbnQgZGlyZWN0b3J5IGFuZCBsaW5rIG93bmVyIG1hdGNoLiAqL1xuZnMvbmFtZWkuYzoxMzU5Olx0cmV0ID0gdmZzX2lub2RlX2FuZF9kaXJfaGF2ZV9zYW1lX293bmVyKGlkbWFwLCBpbm9kZSwgbmQpO1xuZnMvbmFtZWkuYy0xMzYwLVx0aWYgKHJldCBcdTAwM2M9IDApXG4tLVxuZnMvbmFtZWkuYz0xNTA5PXN0YXRpYyBpbnQgbWF5X2NyZWF0ZV9pbl9zdGlja3koc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBuYW1laWRhdGEgKm5kLFxuLS1cbmZzL25hbWVpLmMtMTUyMy1cbmZzL25hbWVpLmM6MTUyNDpcdHJldCA9IHZmc19pbm9kZV9hbmRfZGlyX2hhdmVfc2FtZV9vd25lcihpZG1hcCwgaW5vZGUsIG5kKTtcbmZzL25hbWVpLmMtMTUyNS1cdGlmIChyZXQgXHUwMDNjPSAwKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwMzozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODExNgoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDExOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZSwgdGhlIHN0YXRpYyBuYXR1cmUgb2YgdGhlc2UgdGhpbmdzLi4uIHJpZ2h0LiBTbywgdGhlIGtleSBmb2N1cyBzeW1ib2xzIEkgbmVlZCB0byB6ZXJvIGluIG9uIGFyZToKCioqRm9jdXMgU3ltYm9scyBJZGVudGlmaWVkKioKCkkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvOgoKKiAgIGB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWVgCiogICBgYWZzX2lzX293bmVkX2J5X21lYAoqICAgYGFmc19oYXZlX3NhbWVfb3duZXJgCiogICBgaW5vZGVfb3duZXJfb3JfY2FwYWJsZWAKKiAgIGB2ZnNfc2V0bGVhc2VgCiogICBgX19jaGVja19zdGlja3lgCgoqSG1tLCBgdmZzX3NldGxlYXNlYCBpcyBhIHJhdGhlciBsYXJnZSBmdW5jdGlvbiwgYnV0IEkgYW0gbm90IGFzIHdvcnJpZWQgbm93LioKCkxldCBtZSBxdWlja2x5IHZlcmlmeSBpZiBgX19jaGVja19zdGlja3lgIGlzIGV4cG9ydGVkLiBUaGF0JiMzOTtzIHRoZSBvbmUgSSYjMzk7bSBhIGxpdHRsZSBsZXNzIGZhbWlsaWFyIHdpdGgsIHNvIEkgbmVlZCB0byBtYWtlIHN1cmUgaXQmIzM5O3MgYWNjZXNzaWJsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDM6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19jaGVja19zdGlja3kmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvbmFtZWkuYz0zNzQyPUVYUE9SVF9TWU1CT0wodXNlcl9wYXRoX2F0KTtcbmZzL25hbWVpLmMtMzc0My1cbmZzL25hbWVpLmM6Mzc0NDppbnQgX19jaGVja19zdGlja3koc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuZnMvbmFtZWkuYy0zNzQ1LVx0XHQgICBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLS1cbmZzL25hbWVpLmMtMzc1Ni19XG5mcy9uYW1laS5jOjM3NTc6RVhQT1JUX1NZTUJPTChfX2NoZWNrX3N0aWNreSk7XG5mcy9uYW1laS5jLTM3NTgtXG4tLVxuaW5jbHVkZS9saW51eC9mcy5oPTI3MDI9c3RhdGljIGlubGluZSBpbnQgcGF0aF9wZXJtaXNzaW9uKGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoLCBpbnQgbWFzaylcbi0tXG5pbmNsdWRlL2xpbnV4L2ZzLmgtMjcwNi19XG5pbmNsdWRlL2xpbnV4L2ZzLmg6MjcwNzppbnQgX19jaGVja19zdGlja3koc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuaW5jbHVkZS9saW51eC9mcy5oLTI3MDgtXHRcdCAgIHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xuLS1cbmluY2x1ZGUvbGludXgvZnMuaD0zNTY0PXN0YXRpYyBpbmxpbmUgaW50IGNoZWNrX3N0aWNreShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbi0tXG5pbmNsdWRlL2xpbnV4L2ZzLmgtMzU2OS1cbmluY2x1ZGUvbGludXgvZnMuaDozNTcwOlx0cmV0dXJuIF9fY2hlY2tfc3RpY2t5KGlkbWFwLCBkaXIsIGlub2RlKTtcbmluY2x1ZGUvbGludXgvZnMuaC0zNTcxLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDM6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg3ODgKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIEV4cG9ydGVkIFN0YXRlKioKClJpZ2h0LCBzbyB0aGUgc3lzdGVtIGluZGljYXRlcyB0aGUgZGF0YSBpcywgaW4gZmFjdCwgYmVpbmcgZXhwb3J0ZWQuIE5vdywgbXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgc2VjdXJpdHksIG5hdHVyYWxseS4gV2UgbmVlZCB0byBjb25maXJtICpob3cqIHRoaXMgZXhwb3J0IGlzIGhhcHBlbmluZyBhbmQsIGNyaXRpY2FsbHksIHdobyBoYXMgYWNjZXNzIGFuZCBob3cgdGhhdCBhY2Nlc3MgaXMgbWFuYWdlZC4gVGhlIGZpcnN0IHBsYWNlIEkmIzM5O20gZ29pbmcgdG8gbG9vayBpcyBgaW5vZGVfb3duZXJfb3JfY2FwYWJsZWAuIFRoaXMgZnVuY3Rpb24sIG9yIGEgc2ltaWxhciBvbmUgaW4gdGhlIHJlbGV2YW50IGtlcm5lbCBjb250ZXh0LCBpcyBjcnVjaWFsIGZvciBhc3Nlc3NpbmcgYWNjZXNzIGNvbnRyb2wuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoZSBhcHByb3ByaWF0ZSBjaGVja3MgYXJlIGJlaW5nIHBlcmZvcm1lZCB0byBlbnN1cmUgdGhhdCBvbmx5IGF1dGhvcml6ZWQgdXNlcnMgb3IgcHJvY2Vzc2VzIGFyZSBpbnRlcmFjdGluZyB3aXRoIHRoaXMgZXhwb3J0ZWQgZGF0YS4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIHRoYXQgYGlub2RlX293bmVyX29yX2NhcGFibGVgIChvciB3aGF0ZXZlciBpdCYjMzk7cyBjYWxsZWQpIGlzIGNvcnJlY3RseSBoYW5kbGluZyBwZXJtaXNzaW9ucywgY2FwYWJpbGl0aWVzLCBhbmQgcG90ZW50aWFsbHkgZXh0ZW5kZWQgYXR0cmlidXRlcy4gV2UgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gdGhlIGV4cG9ydCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IGV4cGxvaXRhYmxlIHZ1bG5lcmFiaWxpdGllcyByZWxhdGVkIHRvIHByaXZpbGVnZSBlc2NhbGF0aW9uIG9yIHVuYXV0aG9yaXplZCBkYXRhIGFjY2Vzcy4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBjb2RlIGFyb3VuZCB0aGF0IGZ1bmN0aW9uIHRlbGxzIHVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwMzozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbm9kZV9vd25lcl9vcl9jYXBhYmxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzLzlwL2FjbC5jPTE1NT1pbnQgdjlmc19pb3Bfc2V0X2FjbChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLS1cbmZzLzlwL2FjbC5jLTE5Mi1cbmZzLzlwL2FjbC5jOjE5MzpcdGlmICghaW5vZGVfb3duZXJfb3JfY2FwYWJsZShcdTAwMjZub3BfbW50X2lkbWFwLCBpbm9kZSkpIHtcbmZzLzlwL2FjbC5jLTE5NC1cdFx0cmV0dmFsID0gLUVQRVJNO1xuLS1cbmZzL2F0dHIuYz0xNjg9aW50IHNldGF0dHJfcHJlcGFyZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLS1cbmZzL2F0dHIuYy0yMTYtXG5mcy9hdHRyLmM6MjE3Olx0XHRpZiAoIWlub2RlX293bmVyX29yX2NhcGFibGUoaWRtYXAsIGlub2RlKSlcbmZzL2F0dHIuYy0yMTgtXHRcdFx0cmV0dXJuIC1FUEVSTTtcbi0tXG5mcy9hdHRyLmMtMjMxLVx0aWYgKGlhX3ZhbGlkIFx1MDAyNiAoQVRUUl9NVElNRV9TRVQgfCBBVFRSX0FUSU1FX1NFVCB8IEFUVFJfVElNRVNfU0VUKSkge1xuZnMvYXR0ci5jOjIzMjpcdFx0aWYgKCFpbm9kZV9vd25lcl9vcl9jYXBhYmxlKGlkbWFwLCBpbm9kZSkpXG5mcy9hdHRyLmMtMjMzLVx0XHRcdHJldHVybiAtRVBFUk07XG4tLVxuZnMvYXR0ci5jPTM4ND1pbnQgbWF5X3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxuZnMvYXR0ci5jLTQwMS1cbmZzL2F0dHIuYzo0MDI6XHRcdGlmICghaW5vZGVfb3duZXJfb3JfY2FwYWJsZShpZG1hcCwgaW5vZGUpKSB7XG5mcy9hdHRyLmMtNDAzLVx0XHRcdGVycm9yID0gaW5vZGVfcGVybWlzc2lvbihpZG1hcCwgaW5vZGUsIE1BWV9XUklURSk7XG4tLVxuZnMvYnRyZnMvaW9jdGwuYz0xMTM4PXN0YXRpYyBub2lubGluZSBpbnQgX19idHJmc19pb2N0bF9zbmFwX2NyZWF0ZShzdHJ1Y3QgZmlsZSAqZmlsZSxcbi0tXG5mcy9idHJmcy9pb2N0bC5jLTExODAtXHRcdFx0cmV0ID0gLUVYREVWO1xuZnMvYnRyZnMvaW9jdGwuYzoxMTgxOlx0XHR9IGVsc2UgaWYgKCFpbm9kZV9vd25lcl9vcl9jYXBhYmxlKGlkbWFwLCBzcmNfaW5vZGUpKSB7XG5mcy9idHJmcy9pb2N0bC5jLTExODItXHRcdFx0Lypcbi0tXG5mcy9idHJmcy9pb2N0bC5jPTEyOTQ9c3RhdGljIG5vaW5saW5lIGludCBidHJmc19pb2N0bF9zdWJ2b2xfc2V0ZmxhZ3Moc3RydWN0IGZpbGUgKmZpbGUsXG4tLVxuZnMvYnRyZnMvaW9jdGwuYy0xMzA0LVxuZnMvYnRyZnMvaW9jdGwuYzoxMzA1Olx0aWYgKCFpbm9kZV9vd25lcl9vcl9jYXBhYmxlKGZpbGVfbW50X2lkbWFwKGZpbGUpLCBpbm9kZSkpXG5mcy9idHJmcy9pb2N0bC5jLTEzMDYtXHRcdHJldHVybiAtRVBFUk07XG4tLVxuZnMvYnRyZnMvaW9jdGwuYz0zODUzPXN0YXRpYyBsb25nIF9idHJmc19pb2N0bF9zZXRfcmVjZWl2ZWRfc3Vidm9sKHN0cnVjdCBmaWxlICpmaWxlLFxuLS1cbmZzL2J0cmZzL2lvY3RsLmMtMzg2NS1cbmZzL2J0cmZzL2lvY3RsLmM6Mzg2NjpcdGlmICghaW5vZGVfb3duZXJfb3JfY2FwYWJsZShpZG1hcCwgaW5vZGUpKVxuZnMvYnRyZnMvaW9jdGwuYy0zODY3LVx0XHRyZXR1cm4gLUVQRVJNO1xuLS1cbmZzL2NyeXB0by9wb2xpY3kuYz01MDU9aW50IGZzY3J5cHRfaW9jdGxfc2V0X3BvbGljeShzdHJ1Y3QgZmlsZSAqZmlscCwgY29uc3Qgdm9pZCBfX3VzZXIgKmFyZylcbi0tXG5mcy9jcnlwdG8vcG9saWN5LmMtNTM2LVxuZnMvY3J5cHRvL3BvbGljeS5jOjUzNzpcdGlmICghaW5vZGVfb3duZXJfb3JfY2FwYWJsZShcdTAwMjZub3BfbW50X2lkbWFwLCBpbm9kZSkpXG5mcy9jcnlwdG8vcG9saWN5LmMtNTM4LVx0XHRyZXR1cm4gLUVBQ0NFUztcbi0tXG5mcy9leHQyL2lvY3RsLmM9NTQ9bG9uZyBleHQyX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcbi0tXG5mcy9leHQyL2lvY3RsLmMtNjgtXG5mcy9leHQyL2lvY3RsLmM6Njk6XHRcdGlmICghaW5vZGVfb3duZXJfb3JfY2FwYWJsZShcdTAwMjZub3BfbW50X2lkbWFwLCBpbm9kZSkpXG5mcy9leHQyL2lvY3RsLmMtNzAtXHRcdFx0cmV0dXJuIC1FUEVSTTtcbi0tXG5mcy9leHQyL2lvY3RsLmMtMTAxLVxuZnMvZXh0Mi9pb2N0bC5jOjEwMjpcdFx0aWYgKCFpbm9kZV9vd25lcl9vcl9jYXBhYmxlKFx1MDAyNm5vcF9tbnRfaWRtYXAsIGlub2RlKSlcbmZzL2V4dDIvaW9jdGwuYy0xMDMtXHRcdFx0cmV0dXJuIC1FQUNDRVM7XG4tLVxuZnMvZXh0NC9pb2N0bC5jPTM3NT1zdGF0aWMgbG9uZyBzd2FwX2lub2RlX2Jvb3RfbG9hZGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4tLVxuZnMvZXh0NC9pb2N0bC5jLTQwNS1cdGlmIChJU19SRE9OTFkoaW5vZGUpIHx8IElTX0FQUEVORChpbm9kZSkgfHwgSVNfSU1NVVRBQkxFKGlub2RlKSB8fFxuZnMvZXh0NC9pb2N0bC5jOjQwNjpcdCAgICAhaW5vZGVfb3duZXJfb3JfY2FwYWJsZShpZG1hcCwgaW5vZGUpIHx8XG5mcy9leHQ0L2lvY3RsLmMtNDA3LVx0ICAgICFjYXBhYmxlKENBUF9TWVNfQURNSU4pKSB7XG4tLVxuZnMvZXh0NC9pb2N0bC5jPTE1Mzg9c3RhdGljIGxvbmcgX19leHQ0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcbi0tXG5mcy9leHQ0L2lvY3RsLmMtMTU1OC1cbmZzL2V4dDQvaW9jdGwuYzoxNTU5Olx0XHRpZiAoIWlub2RlX293bmVyX29yX2NhcGFibGUoaWRtYXAsIGlub2RlKSlcbmZzL2V4dDQvaW9jdGwuYy0xNTYwLVx0XHRcdHJldHVybiAtRVBFUk07XG4tLVxuZnMvZXh0NC9pb2N0bC5jLTE2ODgtXHRcdGludCBlcnI7XG5mcy9leHQ0L2lvY3RsLmM6MTY4OTpcdFx0aWYgKCFpbm9kZV9vd25lcl9vcl9jYXBhYmxlKGlkbWFwLCBpbm9kZSkpXG5mcy9leHQ0L2lvY3RsLmMtMTY5MC1cdFx0XHRyZXR1cm4gLUVBQ0NFUztcbi0tXG5mcy9leHQ0L2lvY3RsLmMtMTcxMC1cdFx0aW50IGVycjtcbmZzL2V4dDQvaW9jdGwuYzoxNzExOlx0XHRpZiAoIWlub2RlX293bmVyX29yX2NhcGFibGUoaWRtYXAsIGlub2RlKSlcbmZzL2V4dDQvaW9jdGwuYy0xNzEyLVx0XHRcdHJldHVybiAtRUFDQ0VTO1xuLS1cbmZzL2V4dDQvaW9jdGwuYy0xODYwLVx0e1xuZnMvZXh0NC9pb2N0bC5jOjE4NjE6XHRcdGlmICghaW5vZGVfb3duZXJfb3JfY2FwYWJsZShpZG1hcCwgaW5vZGUpKVxuZnMvZXh0NC9pb2N0bC5jLTE4NjItXHRcdFx0cmV0dXJuIC1FQUNDRVM7XG4tLVxuZnMvZjJmcy9maWxlLmM9MjI3OT1zdGF0aWMgaW50IGYyZnNfaW9jX3N0YXJ0X2F0b21pY193cml0ZShzdHJ1Y3QgZmlsZSAqZmlscCwgYm9vbCB0cnVuY2F0ZSlcbi0tXG5mcy9mMmZzL2ZpbGUuYy0yMjkwLVxuZnMvZjJmcy9maWxlLmM6MjI5MTpcdGlmICghaW5vZGVfb3duZXJfb3JfY2FwYWJsZShpZG1hcCwgaW5vZGUpKVxuZnMvZjJmcy9maWxlLmMtMjI5Mi1cdFx0cmV0dXJuIC1FQUNDRVM7XG4tLVxuZnMvZjJmcy9maWxlLmM9MjM5MT1zdGF0aWMgaW50IGYyZnNfaW9jX2NvbW1pdF9hdG9taWNfd3JpdGUoc3RydWN0IGZpbGUgKmZpbHApXG4tLVxuZnMvZjJmcy9maWxlLmMtMjM5OS1cbmZzL2YyZnMvZmlsZS5jOjI0MDA6XHRpZiAoIWlub2RlX293bmVyX29yX2NhcGFibGUoaWRtYXAsIGlub2RlKSlcbmZzL2YyZnMvZmlsZS5jLTI0MDEtXHRcdHJldHVybiAtRUFDQ0VTO1xuLS1cbmZzL2YyZnMvZmlsZS5jPTI0MjY9c3RhdGljIGludCBmMmZzX2lvY19hYm9ydF9hdG9taWNfd3JpdGUoc3RydWN0IGZpbGUgKmZpbHApXG4tLVxuZnMvZjJmcy9maWxlLmMtMjQzNC1cbmZzL2YyZnMvZmlsZS5jOjI0MzU6XHRpZiAoIWlub2RlX293bmVyX29yX2NhcGFibGUoaWRtYXAsIGlub2RlKSlcbmZzL2YyZnMvZmlsZS5jLTI0MzYtXHRcdHJldHVybiAtRUFDQ0VTO1xuLS1cbmZzL2YyZnMveGF0dHIuYz0xMTM9c3RhdGljIGludCBmMmZzX3hhdHRyX2FkdmlzZV9zZXQoY29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgKmhhbmRsZXIsXG4tLVxuZnMvZjJmcy94YXR0ci5jLTEyMS1cbmZzL2YyZnMveGF0dHIuYzoxMjI6XHRpZiAoIWlub2RlX293bmVyX29yX2NhcGFibGUoXHUwMDI2bm9wX21udF9pZG1hcCwgaW5vZGUpKVxuZnMvZjJmcy94YXR0ci5jLTEyMy1cdFx0cmV0dXJuIC1FUEVSTTtcbi0tXG5mcy9mY250bC5jPTM5PXN0YXRpYyBpbnQgc2V0ZmwoaW50IGZkLCBzdHJ1Y3QgZmlsZSAqIGZpbHAsIHVuc2lnbmVkIGludCBhcmcpXG4tLVxuZnMvZmNudGwuYy01Mi1cdGlmICgoYXJnIFx1MDAyNiBPX05PQVRJTUUpIFx1MDAyNlx1MDAyNiAhKGZpbHAtXHUwMDNlZl9mbGFncyBcdTAwMjYgT19OT0FUSU1FKSlcbmZzL2ZjbnRsLmM6NTM6XHRcdGlmICghaW5vZGVfb3duZXJfb3JfY2FwYWJsZShmaWxlX21udF9pZG1hcChmaWxwKSwgaW5vZGUpKVxuZnMvZmNudGwuYy01NC1cdFx0XHRyZXR1cm4gLUVQRVJNO1xuLS1cbmZzL2ZjbnRsLmM9MzY5PXN0YXRpYyBsb25nIGZjbnRsX3NldF9yd19oaW50KHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIGFyZylcbi0tXG5mcy9mY250bC5jLTM3NC1cbmZzL2ZjbnRsLmM6Mzc1Olx0aWYgKCFpbm9kZV9vd25lcl9vcl9jYXBhYmxlKGZpbGVfbW50X2lkbWFwKGZpbGUpLCBpbm9kZSkpXG5mcy9mY250bC5jLTM3Ni1cdFx0cmV0dXJuIC1FUEVSTTtcbi0tXG5mcy9maWxlX2F0dHIuYz0yNjg9aW50IHZmc19maWxlYXR0cl9zZXQoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbi0tXG5mcy9maWxlX2F0dHIuYy0yNzctXG5mcy9maWxlX2F0dHIuYzoyNzg6XHRpZiAoIWlub2RlX293bmVyX29yX2NhcGFibGUoaWRtYXAsIGlub2RlKSlcbmZzL2ZpbGVfYXR0ci5jLTI3OS1cdFx0cmV0dXJuIC1FUEVSTTtcbi0tXG5mcy9pbm9kZS5jPTI3Mzc9RVhQT1JUX1NZTUJPTChpbm9kZV9pbml0X293bmVyKTtcbi0tXG5mcy9pbm9kZS5jLTI3MzktLyoqXG5mcy9pbm9kZS5jOjI3NDA6ICogaW5vZGVfb3duZXJfb3JfY2FwYWJsZSAtIGNoZWNrIGN1cnJlbnQgdGFzayBwZXJtaXNzaW9ucyB0byBpbm9kZVxuZnMvaW5vZGUuYy0yNzQxLSAqIEBpZG1hcDogaWRtYXAgb2YgdGhlIG1vdW50IHRoZSBpbm9kZSB3YXMgZm91bmQgZnJvbVxuLS1cbmZzL2lub2RlLmMtMjc1Mi0gKi9cbmZzL2lub2RlLmM6Mjc1Mzpib29sIGlub2RlX293bmVyX29yX2NhcGFibGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUpXG5mcy9pbm9kZS5jLTI3NTQte1xuLS1cbmZzL2lub2RlLmMtMjc3MC19XG5mcy9pbm9kZS5jOjI3NzE6RVhQT1JUX1NZTUJPTChpbm9kZV9vd25lcl9vcl9jYXBhYmxlKTtcbmZzL2lub2RlLmMtMjc3Mi1cbi0tXG5mcy9uYW1laS5jPTE0Mjc9aW50IG1heV9saW5rYXQoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIGNvbnN0IHN0cnVjdCBwYXRoICpsaW5rKVxuLS1cbmZzL25hbWVpLmMtMTQ0Mi1cdGlmIChzYWZlX2hhcmRsaW5rX3NvdXJjZShpZG1hcCwgaW5vZGUpIHx8XG5mcy9uYW1laS5jOjE0NDM6XHQgICAgaW5vZGVfb3duZXJfb3JfY2FwYWJsZShpZG1hcCwgaW5vZGUpKVxuZnMvbmFtZWkuYy0xNDQ0LVx0XHRyZXR1cm4gMDtcbi0tXG5mcy9uYW1laS5jPTQzMzc9c3RhdGljIGludCBtYXlfb3BlbihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgY29uc3Qgc3RydWN0IHBhdGggKnBhdGgsXG4tLVxuZnMvbmFtZWkuYy00Mzg5LVx0LyogT19OT0FUSU1FIGNhbiBvbmx5IGJlIHNldCBieSB0aGUgb3duZXIgb3Igc3VwZXJ1c2VyICovXG5mcy9uYW1laS5jOjQzOTA6XHRpZiAoZmxhZyBcdTAwMjYgT19OT0FUSU1FIFx1MDAyNlx1MDAyNiAhaW5vZGVfb3duZXJfb3JfY2FwYWJsZShpZG1hcCwgaW5vZGUpKVxuZnMvbmFtZWkuYy00MzkxLVx0XHRyZXR1cm4gLUVQRVJNO1xuLS1cbmZzL292ZXJsYXlmcy9maWxlLmM9Mjg9c3RhdGljIHN0cnVjdCBmaWxlICpvdmxfb3Blbl9yZWFsZmlsZShjb25zdCBzdHJ1Y3QgZmlsZSAqZmlsZSxcbi0tXG5mcy9vdmVybGF5ZnMvZmlsZS5jLTQ3LVx0XHR9IGVsc2Uge1xuZnMvb3ZlcmxheWZzL2ZpbGUuYzo0ODpcdFx0XHRpZiAoIWlub2RlX293bmVyX29yX2NhcGFibGUocmVhbF9pZG1hcCwgcmVhbGlub2RlKSlcbmZzL292ZXJsYXlmcy9maWxlLmMtNDktXHRcdFx0XHRmbGFncyBcdTAwMjY9IH5PX05PQVRJTUU7XG4tLVxuZnMvb3ZlcmxheWZzL2lub2RlLmM9NTIzPWludCBvdmxfc2V0X2FjbChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLS1cbmZzL292ZXJsYXlmcy9pbm9kZS5jLTUzNi1cdFx0cmV0dXJuIGFjbCA/IC1FQUNDRVMgOiAwO1xuZnMvb3ZlcmxheWZzL2lub2RlLmM6NTM3Olx0aWYgKCFpbm9kZV9vd25lcl9vcl9jYXBhYmxlKFx1MDAyNm5vcF9tbnRfaWRtYXAsIGlub2RlKSlcbmZzL292ZXJsYXlmcy9pbm9kZS5jLTUzOC1cdFx0cmV0dXJuIC1FUEVSTTtcbi0tXG5mcy9vdmVybGF5ZnMvdXRpbC5jPTY1Nz1zdHJ1Y3QgZmlsZSAqb3ZsX3BhdGhfb3Blbihjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCwgaW50IGZsYWdzKVxuLS1cbmZzL292ZXJsYXlmcy91dGlsLmMtNjgxLVx0LyogT19OT0FUSU1FIGlzIGFuIG9wdGltaXphdGlvbiwgZG9uJiMzOTt0IGZhaWwgaWYgbm90IHBlcm1pdHRlZCAqL1xuZnMvb3ZlcmxheWZzL3V0aWwuYzo2ODI6XHRpZiAoaW5vZGVfb3duZXJfb3JfY2FwYWJsZShyZWFsX2lkbWFwLCBpbm9kZSkpXG5mcy9vdmVybGF5ZnMvdXRpbC5jLTY4My1cdFx0ZmxhZ3MgfD0gT19OT0FUSU1FO1xuLS1cbmZzL3Bvc2l4X2FjbC5jPTkzNT1zZXRfcG9zaXhfYWNsKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tLVxuZnMvcG9zaXhfYWNsLmMtOTQ2LVx0XHRyZXR1cm4gYWNsID8gLUVBQ0NFUyA6IDA7XG5mcy9wb3NpeF9hY2wuYzo5NDc6XHRpZiAoIWlub2RlX293bmVyX29yX2NhcGFibGUoaWRtYXAsIGlub2RlKSlcbmZzL3Bvc2l4X2FjbC5jLTk0OC1cdFx0cmV0dXJuIC1FUEVSTTtcbi0tXG5mcy94YXR0ci5jPTEyNj14YXR0cl9wZXJtaXNzaW9uKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLS1cbmZzL3hhdHRyLmMtMTY3LVx0XHRcdFx0YnJlYWs7XG5mcy94YXR0ci5jOjE2ODpcdFx0XHRpZiAoaW5vZGVfb3duZXJfb3JfY2FwYWJsZShpZG1hcCwgaW5vZGUpKVxuZnMveGF0dHIuYy0xNjktXHRcdFx0XHRicmVhaztcbi0tXG5pbmNsdWRlL2xpbnV4L2ZzLmg9MTc1Mj1zdGF0aWMgaW5saW5lIGJvb2wgZmlsZV93cml0ZV9ub3Rfc3RhcnRlZChjb25zdCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbi0tXG5pbmNsdWRlL2xpbnV4L2ZzLmgtMTc1OC1cbmluY2x1ZGUvbGludXgvZnMuaDoxNzU5OmJvb2wgaW5vZGVfb3duZXJfb3JfY2FwYWJsZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSk7XG5pbmNsdWRlL2xpbnV4L2ZzLmgtMTc2MC1cbi0tXG5pbmNsdWRlL2xpbnV4L2ZzLmg9MjQ1MD1zdGF0aWMgaW5saW5lIGJvb2wgZmlsZV9vd25lcl9vcl9jYXBhYmxlKGNvbnN0IHN0cnVjdCBmaWxlICpmaWxlKVxuaW5jbHVkZS9saW51eC9mcy5oLTI0NTEte1xuaW5jbHVkZS9saW51eC9mcy5oOjI0NTI6XHRyZXR1cm4gaW5vZGVfb3duZXJfb3JfY2FwYWJsZShmaWxlX21udF9pZG1hcChmaWxlKSwgZmlsZV9pbm9kZShmaWxlKSk7XG5pbmNsdWRlL2xpbnV4L2ZzLmgtMjQ1My19XG4tLVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jPTMzNjg9c3RhdGljIGludCBzZWxpbnV4X2lub2RlX3NldHhhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuLS1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0zMzgzLVx0aWYgKCFzZWxpbnV4X2luaXRpYWxpemVkKCkpXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6MzM4NDpcdFx0cmV0dXJuIChpbm9kZV9vd25lcl9vcl9jYXBhYmxlKGlkbWFwLCBpbm9kZSkgPyAwIDogLUVQRVJNKTtcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0zMzg1LVxuLS1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0zMzg5LVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjMzOTA6XHRpZiAoIWlub2RlX293bmVyX29yX2NhcGFibGUoaWRtYXAsIGlub2RlKSlcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0zMzkxLVx0XHRyZXR1cm4gLUVQRVJNO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwMzozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjczOAoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkFuYWx5emluZyBgaW5vZGVfb3duZXJfb3JfY2FwYWJsZWAgVXNhZ2UqKgoKUmlnaHQsIHNvIGBpbm9kZV9vd25lcl9vcl9jYXBhYmxlYCBpcyBhIHByZXR0eSB1YmlxdWl0b3VzIGZ1bmN0aW9uLCBpc24mIzM5O3QgaXQ/IFNlZW1zIGxpa2UgaXQmIzM5O3Mgc3ByaW5rbGVkIGFsbCBvdmVyIHRoZSBrZXJuZWwmIzM5O3MgZmlsZSBzeXN0ZW0gY29kZS4gSSBrbm93IGl0JiMzOTtzIGV4cG9ydGVkIGFuZCB1c2VkIGluIGEgdG9uIG9mIHBsYWNlcywgYnV0IEkmIzM5O20gdHJ5aW5nIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gaXRzIG92ZXJhbGwgaW1wYWN0LiBJJiMzOTttIGdvaW5nIHRvIGZvbGxvdyB0aGUgbG9naWMgY2hhaW4gZnJvbSBvbmUgb2YgaXRzIHR5cGljYWwgZW50cnkgcG9pbnRzLgoKTGV0JiMzOTtzIHN0YXJ0IGJ5IGRpZ2dpbmcgaW50byBgdmZzX3NldGxlYXNlYC4gVGhhdCYjMzk7cyBhIHJlYXNvbmFibGUgcGxhY2UgdG8gYmVnaW4sIGdpdmVuIHRoYXQgaXQmIzM5O3MgYSBjcml0aWNhbCBmdW5jdGlvbiBmb3IgbWFuYWdpbmcgZmlsZSBsb2NraW5nL293bmVyc2hpcC4gSSBzdXNwZWN0IGBpbm9kZV9vd25lcl9vcl9jYXBhYmxlYCBpcyBsaWtlbHkgaW52b2x2ZWQgaW4gdGhlcmUgYXMgcGFydCBvZiBsZWFzZSBjaGVja3MgYW5kIHBlcm1pc3Npb25zLiBMZXQmIzM5O3Mgc2VlIGhvdyBpdCYjMzk7cyB1c2VkIHRoZXJlIGFuZCB0aGVuIGZvbGxvdyB0aGUgYnJlYWRjcnVtYnMgZnJvbSB0aGVyZS4gSXQgc2hvdWxkIHF1aWNrbHkgcmV2ZWFsIGlmIEkgbmVlZCB0byBsb29rIGludG8gb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDM6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmZzX3NldGxlYXNlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2xvY2tzLmM9MjExNz1FWFBPUlRfU1lNQk9MX0dQTChrZXJuZWxfc2V0bGVhc2UpO1xuLS1cbmZzL2xvY2tzLmMtMjExOS0vKipcbmZzL2xvY2tzLmM6MjEyMDogKiB2ZnNfc2V0bGVhc2UgICAgICAgIC0gICAgICAgc2V0cyBhIGxlYXNlIG9uIGFuIG9wZW4gZmlsZVxuZnMvbG9ja3MuYy0yMTIxLSAqIEBmaWxwOlx0ZmlsZSBwb2ludGVyXG4tLVxuZnMvbG9ja3MuYz0yMTM2PWludFxuZnMvbG9ja3MuYzoyMTM3OnZmc19zZXRsZWFzZShzdHJ1Y3QgZmlsZSAqZmlscCwgaW50IGFyZywgc3RydWN0IGZpbGVfbGVhc2UgKipsZWFzZSwgdm9pZCAqKnByaXYpXG5mcy9sb2Nrcy5jLTIxMzgte1xuLS1cbmZzL2xvY2tzLmMtMjE1MS19XG5mcy9sb2Nrcy5jOjIxNTI6RVhQT1JUX1NZTUJPTF9HUEwodmZzX3NldGxlYXNlKTtcbmZzL2xvY2tzLmMtMjE1My1cbmZzL2xvY2tzLmM9MjE1ND1zdGF0aWMgaW50IGRvX2ZjbnRsX2FkZF9sZWFzZSh1bnNpZ25lZCBpbnQgZmQsIHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgZmxhdm9yLCBpbnQgYXJnKVxuLS1cbmZzL2xvY2tzLmMtMjE3MC1cbmZzL2xvY2tzLmM6MjE3MTpcdGVycm9yID0gdmZzX3NldGxlYXNlKGZpbHAsIGFyZywgXHUwMDI2ZmwsICh2b2lkICoqKVx1MDAyNm5ldyk7XG5mcy9sb2Nrcy5jLTIxNzItXHRpZiAoZmwpXG4tLVxuZnMvbG9ja3MuYz0yMTg5PWludCBmY250bF9zZXRsZWFzZSh1bnNpZ25lZCBpbnQgZmQsIHN0cnVjdCBmaWxlICpmaWxwLCBpbnQgYXJnKVxuLS1cbmZzL2xvY2tzLmMtMjE5NC1cdGlmIChhcmcgPT0gRl9VTkxDSylcbmZzL2xvY2tzLmM6MjE5NTpcdFx0cmV0dXJuIHZmc19zZXRsZWFzZShmaWxwLCBGX1VOTENLLCBOVUxMLCAodm9pZCAqKilcdTAwMjZmaWxwKTtcbmZzL2xvY2tzLmMtMjE5Ni1cdHJldHVybiBkb19mY250bF9hZGRfbGVhc2UoZmQsIGZpbHAsIEZMX0xFQVNFLCBhcmcpO1xuLS1cbmZzL2xvY2tzLmM9MjIwOT1pbnQgZmNudGxfc2V0ZGVsZWcodW5zaWduZWQgaW50IGZkLCBzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IGRlbGVnYXRpb24gKmRlbGVnKVxuLS1cbmZzL2xvY2tzLmMtMjIxNS1cdGlmIChkZWxlZy1cdTAwM2VkX3R5cGUgPT0gRl9VTkxDSylcbmZzL2xvY2tzLmM6MjIxNjpcdFx0cmV0dXJuIHZmc19zZXRsZWFzZShmaWxwLCBGX1VOTENLLCBOVUxMLCAodm9pZCAqKilcdTAwMjZmaWxwKTtcbmZzL2xvY2tzLmMtMjIxNy1cdHJldHVybiBkb19mY250bF9hZGRfbGVhc2UoZmQsIGZpbHAsIEZMX0RFTEVHLCBkZWxlZy1cdTAwM2VkX3R5cGUpO1xuLS1cbmluY2x1ZGUvbGludXgvZmlsZWxvY2suaD0yMzQ9aW50IGtlcm5lbF9zZXRsZWFzZShzdHJ1Y3QgZmlsZSAqLCBpbnQsIHN0cnVjdCBmaWxlX2xlYXNlICoqLCB2b2lkICoqKTtcbmluY2x1ZGUvbGludXgvZmlsZWxvY2suaDoyMzU6aW50IHZmc19zZXRsZWFzZShzdHJ1Y3QgZmlsZSAqLCBpbnQsIHN0cnVjdCBmaWxlX2xlYXNlICoqLCB2b2lkICoqKTtcbmluY2x1ZGUvbGludXgvZmlsZWxvY2suaC0yMzYtaW50IGxlYXNlX21vZGlmeShzdHJ1Y3QgZmlsZV9sZWFzZSAqLCBpbnQsIHN0cnVjdCBsaXN0X2hlYWQgKik7XG4tLVxuaW5jbHVkZS9saW51eC9maWxlbG9jay5oPTQyMT1zdGF0aWMgaW5saW5lIGludCBrZXJuZWxfc2V0bGVhc2Uoc3RydWN0IGZpbGUgKmZpbHAsIGludCBhcmcsXG4tLVxuaW5jbHVkZS9saW51eC9maWxlbG9jay5oLTQyNi1cbmluY2x1ZGUvbGludXgvZmlsZWxvY2suaDo0Mjc6c3RhdGljIGlubGluZSBpbnQgdmZzX3NldGxlYXNlKHN0cnVjdCBmaWxlICpmaWxwLCBpbnQgYXJnLFxuaW5jbHVkZS9saW51eC9maWxlbG9jay5oLTQyOC1cdFx0XHQgICAgICAgc3RydWN0IGZpbGVfbGVhc2UgKipsZWFzZSwgdm9pZCAqKnByaXYpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAzOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzODAyCgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogMjA1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBGaWxlIE93bmVyc2hpcCBWZXJpZmljYXRpb24gaW4gdGhlIEtlcm5lbCoqCgpPa2F5LCBzbyBgdmZzX3NldGxlYXNlYCBpcyBhdmFpbGFibGUgZm9yIG15IGludmVzdGlnYXRpb24sIHRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUga2VybmVsIGFjdHVhbGx5ICpkZXRlcm1pbmVzKiBpZiBhIHVzZXIgb3ducyBhbiBpbm9kZS4gTGV0IG1lIHNlZS4uLiBgdmZzX2lub2RlX2lzX293bmVkX2J5X21lYC4uLiBBaCwgaXQmIzM5O3Mgbm90IGV4cG9ydGVkLCBidXQgaXQmIzM5O3Mgbm90IHN0YXRpYyBlaXRoZXIsIHdoaWNoIGlzIGludGVyZXN0aW5nLiBXYWl0LCBpdCYjMzk7cyBkZWZpbmVkIGluIGBmcy9uYW1laS5jYC4gU2luY2UgaXQmIzM5O3Mgbm90IHN0YXRpYywgSSBjYW4gZGlyZWN0bHkgYW5hbHl6ZSBgdmZzX2lub2RlX2lzX293bmVkX2J5X21lYCBpdHNlbGYsIHRoYXQmIzM5O3MgcHJlZmVyYWJsZS4gSSB0aGluayBpdCB3aWxsIGJlIGJldHRlciB0byBsb29rIGF0IGl0IGRpcmVjdGx5IGFuZCBub3QganVzdCB0aGUgZnVuY3Rpb25zIHRoYXQgY2FsbCBpdC4KCkxldCYjMzk7cyBjaGVjayBgYWZzX2lzX293bmVkX2J5X21lYCBhbmQgYGFmc19oYXZlX3NhbWVfb3duZXJgIHRvIHNlZSBpZiB0aGVyZSBpcyBhbnkgb3ZlcmxhcCBpbiBiZWhhdmlvdXIgb3IgaW1wbGVtZW50YXRpb24uIFRob3NlIGFyZSBkZWZpbmVkIGluIGBmcy9hZnMvc2VjdXJpdHkuY2AsIHNvIEkgc2hvdWxkIGtlZXAgdGhvc2UgaW4gbWluZCBhcyB3ZWxsLiBJIG5lZWQgdG8ga2VlcCB0aG9zZSBpbiBtaW5kIGFzIHRoZXkgbWF5IHByb3ZpZGUgc29tZSBpbnNpZ2h0cyBpbnRvIHNpbWlsYXIgY2hlY2tzIGZvciBkaWZmZXJlbnQgZmlsZXN5c3RlbXMuCgpOb3csIHdoYXQgYWJvdXQgdGhlIG1vcmUgZ2VuZXJhbCBvd25lcnNoaXAgY2hlY2tzPyBJJiMzOTtsbCBsb29rIGF0IGBjaG93bl9va2AgYW5kIGBjaGdycF9va2AgbmV4dC4gSG1tLCB0aGV5JiMzOTtyZSBzdGF0aWMgd2l0aGluIGBmcy9hdHRyLmNgLiBTaW5jZSB0aGV5JiMzOTtyZSBzdGF0aWMsIEkmIzM5O2xsIG5lZWQgdG8gZm9jdXMgb24gdGhlaXIgY2FsbGVyLCB3aGljaCBsb29rcyB0byBiZSBgc2V0YXR0cl9wcmVwYXJlYCwgYW5kIGZvcnR1bmF0ZWx5LCAqdGhhdCogaXMgZXhwb3J0ZWQuIEkmIzM5O3ZlIGdvdCBhIGxvdCB0byBleGFtaW5lIGJ1dCB0aGlzIGFsbCBzZWVtcyBsb2dpY2FsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwMzozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZXRhdHRyX3ByZXBhcmUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wb3J0aW5nLnJzdD0zMjg9c2l6ZSB1cGRhdGUgYW5kIG9uIGZpbmFsbHkgb24tZGlzayB0cnVuY2F0aW9uIHdoaWNoIHNob3VsZCBub3QgZmFpbC5cbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcG9ydGluZy5yc3Q6MzI5OnNldGF0dHJfcHJlcGFyZSAod2hpY2ggdXNlZCB0byBiZSBpbm9kZV9jaGFuZ2Vfb2spIG5vdyBpbmNsdWRlcyB0aGUgc2l6ZSBjaGVja3NcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcG9ydGluZy5yc3QtMzMwLWZvciBBVFRSX1NJWkUgYW5kIG11c3QgYmUgY2FsbGVkIGluIHRoZSBiZWdpbm5pbmcgb2YgLVx1MDAzZXNldGF0dHIgdW5jb25kaXRpb25hbGx5LlxuLS1cbmZzLzlwL3Zmc19pbm9kZS5jPTEwMTg9c3RhdGljIGludCB2OWZzX3Zmc19zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuLS1cbmZzLzlwL3Zmc19pbm9kZS5jLTEwMjctXHRwOV9kZWJ1ZyhQOV9ERUJVR19WRlMsIFwmIzM0O1xcblwmIzM0Oyk7XG5mcy85cC92ZnNfaW5vZGUuYzoxMDI4Olx0cmV0dmFsID0gc2V0YXR0cl9wcmVwYXJlKFx1MDAyNm5vcF9tbnRfaWRtYXAsIGRlbnRyeSwgaWF0dHIpO1xuZnMvOXAvdmZzX2lub2RlLmMtMTAyOS1cdGlmIChyZXR2YWwpXG4tLVxuZnMvOXAvdmZzX2lub2RlX2RvdGwuYz01MTM9aW50IHY5ZnNfdmZzX3NldGF0dHJfZG90bChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbi0tXG5mcy85cC92ZnNfaW5vZGVfZG90bC5jLTUyNi1cbmZzLzlwL3Zmc19pbm9kZV9kb3RsLmM6NTI3Olx0cmV0dmFsID0gc2V0YXR0cl9wcmVwYXJlKFx1MDAyNm5vcF9tbnRfaWRtYXAsIGRlbnRyeSwgaWF0dHIpO1xuZnMvOXAvdmZzX2lub2RlX2RvdGwuYy01MjgtXHRpZiAocmV0dmFsKVxuLS1cbmZzL2FkZnMvaW5vZGUuYz0zMDI9YWRmc19zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpYXR0ciAqYXR0cilcbi0tXG5mcy9hZGZzL2lub2RlLmMtMzA4LVx0XG5mcy9hZGZzL2lub2RlLmM6MzA5Olx0ZXJyb3IgPSBzZXRhdHRyX3ByZXBhcmUoXHUwMDI2bm9wX21udF9pZG1hcCwgZGVudHJ5LCBhdHRyKTtcbmZzL2FkZnMvaW5vZGUuYy0zMTAtXG4tLVxuZnMvYWZmcy9pbm9kZS5jPTIxNj1hZmZzX3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlhdHRyICphdHRyKVxuLS1cbmZzL2FmZnMvaW5vZGUuYy0yMjItXG5mcy9hZmZzL2lub2RlLmM6MjIzOlx0ZXJyb3IgPSBzZXRhdHRyX3ByZXBhcmUoXHUwMDI2bm9wX21udF9pZG1hcCwgZGVudHJ5LCBhdHRyKTtcbmZzL2FmZnMvaW5vZGUuYy0yMjQtXHRpZiAoZXJyb3IpXG4tLVxuZnMvYXR0ci5jLTI5LSAqIHVuY29uZGl0aW9uYWxseSBpZiBTX0lYR1JQIGlzIHNldC4gT3RoZXJ3aXNlIHdlIGhhdmUgdGhlIGV4YWN0IHNhbWVcbmZzL2F0dHIuYzozMDogKiByZXF1aXJlbWVudHMgYXMgc2V0YXR0cl9wcmVwYXJlKCkgYW5kIHNldGF0dHJfY29weSgpLlxuZnMvYXR0ci5jLTMxLSAqXG4tLVxuZnMvYXR0ci5jPTEyND1zdGF0aWMgaW50IGNoZ3JwX29rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuLS1cbmZzL2F0dHIuYy0xNDctLyoqXG5mcy9hdHRyLmM6MTQ4OiAqIHNldGF0dHJfcHJlcGFyZSAtIGNoZWNrIGlmIGF0dHJpYnV0ZSBjaGFuZ2VzIHRvIGEgZGVudHJ5IGFyZSBhbGxvd2VkXG5mcy9hdHRyLmMtMTQ5LSAqIEBpZG1hcDpcdGlkbWFwIG9mIHRoZSBtb3VudCB0aGUgaW5vZGUgd2FzIGZvdW5kIGZyb21cbi0tXG5mcy9hdHRyLmMtMTY3LSAqL1xuZnMvYXR0ci5jOjE2ODppbnQgc2V0YXR0cl9wcmVwYXJlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG5mcy9hdHRyLmMtMTY5LVx0XHQgICAgc3RydWN0IGlhdHRyICphdHRyKVxuLS1cbmZzL2F0dHIuYy0yNDctfVxuZnMvYXR0ci5jOjI0ODpFWFBPUlRfU1lNQk9MKHNldGF0dHJfcHJlcGFyZSk7XG5mcy9hdHRyLmMtMjQ5LVxuLS1cbmZzL2J0cmZzL2lub2RlLmM9NTI5NT1zdGF0aWMgaW50IGJ0cmZzX3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbi0tXG5mcy9idHJmcy9pbm9kZS5jLTUzMDQtXG5mcy9idHJmcy9pbm9kZS5jOjUzMDU6XHRyZXQgPSBzZXRhdHRyX3ByZXBhcmUoaWRtYXAsIGRlbnRyeSwgYXR0cik7XG5mcy9idHJmcy9pbm9kZS5jLTUzMDYtXHRpZiAocmV0KVxuLS1cbmZzL2NlcGgvaW5vZGUuYz0yOTIzPWludCBjZXBoX3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbi0tXG5mcy9jZXBoL2lub2RlLmMtMjkzOS1cbmZzL2NlcGgvaW5vZGUuYzoyOTQwOlx0ZXJyID0gc2V0YXR0cl9wcmVwYXJlKGlkbWFwLCBkZW50cnksIGF0dHIpO1xuZnMvY2VwaC9pbm9kZS5jLTI5NDEtXHRpZiAoZXJyICE9IDApXG4tLVxuZnMvZWNyeXB0ZnMvaW5vZGUuYz04NzI9c3RhdGljIGludCBlY3J5cHRmc19zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuLS1cbmZzL2VjcnlwdGZzL2lub2RlLmMtOTIwLVxuZnMvZWNyeXB0ZnMvaW5vZGUuYzo5MjE6XHRyYyA9IHNldGF0dHJfcHJlcGFyZShcdTAwMjZub3BfbW50X2lkbWFwLCBkZW50cnksIGlhKTtcbmZzL2VjcnlwdGZzL2lub2RlLmMtOTIyLVx0aWYgKHJjKVxuLS1cbmZzL2VmaXZhcmZzL2lub2RlLmM9MTczPXN0YXRpYyBpbnQgZWZpdmFyZnNfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLS1cbmZzL2VmaXZhcmZzL2lub2RlLmMtMTc4LVxuZnMvZWZpdmFyZnMvaW5vZGUuYzoxNzk6XHRlcnJvciA9IHNldGF0dHJfcHJlcGFyZShpZG1hcCwgZGVudHJ5LCBpYXR0cik7XG5mcy9lZml2YXJmcy9pbm9kZS5jLTE4MC1cdGlmIChlcnJvcilcbi0tXG5mcy9leGZhdC9maWxlLmM9MzQ5PWludCBleGZhdF9zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tLVxuZnMvZXhmYXQvZmlsZS5jLTM3NS1cbmZzL2V4ZmF0L2ZpbGUuYzozNzY6XHRlcnJvciA9IHNldGF0dHJfcHJlcGFyZShpZG1hcCwgZGVudHJ5LCBhdHRyKTtcbmZzL2V4ZmF0L2ZpbGUuYy0zNzctXHRhdHRyLVx1MDAzZWlhX3ZhbGlkID0gaWFfdmFsaWQ7XG4tLVxuZnMvZXh0Mi9pbm9kZS5jPTE2MDc9aW50IGV4dDJfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLS1cbmZzL2V4dDIvaW5vZGUuYy0xNjEyLVxuZnMvZXh0Mi9pbm9kZS5jOjE2MTM6XHRlcnJvciA9IHNldGF0dHJfcHJlcGFyZShcdTAwMjZub3BfbW50X2lkbWFwLCBkZW50cnksIGlhdHRyKTtcbmZzL2V4dDIvaW5vZGUuYy0xNjE0LVx0aWYgKGVycm9yKVxuLS1cbmZzL2V4dDQvaW5vZGUuYz01OTM0PWludCBleHQ0X3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbi0tXG5mcy9leHQ0L2lub2RlLmMtNTk1NC1cbmZzL2V4dDQvaW5vZGUuYzo1OTU1Olx0ZXJyb3IgPSBzZXRhdHRyX3ByZXBhcmUoaWRtYXAsIGRlbnRyeSwgYXR0cik7XG5mcy9leHQ0L2lub2RlLmMtNTk1Ni1cdGlmIChlcnJvcilcbi0tXG5mcy9mMmZzL2ZpbGUuYz0xMDczPWludCBmMmZzX3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbi0tXG5mcy9mMmZzL2ZpbGUuYy0xMDgzLVxuZnMvZjJmcy9maWxlLmM6MTA4NDpcdGVyciA9IHNldGF0dHJfcHJlcGFyZShpZG1hcCwgZGVudHJ5LCBhdHRyKTtcbmZzL2YyZnMvZmlsZS5jLTEwODUtXHRpZiAoZXJyKVxuLS1cbmZzL2ZhdC9maWxlLmM9NTE4PWludCBmYXRfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLS1cbmZzL2ZhdC9maWxlLmMtNTMyLVxuZnMvZmF0L2ZpbGUuYzo1MzM6XHRlcnJvciA9IHNldGF0dHJfcHJlcGFyZShpZG1hcCwgZGVudHJ5LCBhdHRyKTtcbmZzL2ZhdC9maWxlLmMtNTM0LVx0YXR0ci1cdTAwM2VpYV92YWxpZCA9IGlhX3ZhbGlkO1xuLS1cbmZzL2Z1c2UvZGlyLmM9MjEyOD1pbnQgZnVzZV9kb19zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tLVxuZnMvZnVzZS9kaXIuYy0yMTQ5LVxuZnMvZnVzZS9kaXIuYzoyMTUwOlx0ZXJyID0gc2V0YXR0cl9wcmVwYXJlKGlkbWFwLCBkZW50cnksIGF0dHIpO1xuZnMvZnVzZS9kaXIuYy0yMTUxLVx0aWYgKGVycilcbi0tXG5mcy9nZnMyL2lub2RlLmM9MjA5OT1zdGF0aWMgaW50IGdmczJfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbi0tXG5mcy9nZnMyL2lub2RlLmMtMjExOC1cbmZzL2dmczIvaW5vZGUuYzoyMTE5Olx0ZXJyb3IgPSBzZXRhdHRyX3ByZXBhcmUoXHUwMDI2bm9wX21udF9pZG1hcCwgZGVudHJ5LCBhdHRyKTtcbmZzL2dmczIvaW5vZGUuYy0yMTIwLVx0aWYgKGVycm9yKVxuLS1cbmZzL2hmcy9pbm9kZS5jPTYyNz1pbnQgaGZzX2lub2RlX3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbi0tXG5mcy9oZnMvaW5vZGUuYy02MzMtXG5mcy9oZnMvaW5vZGUuYzo2MzQ6XHRlcnJvciA9IHNldGF0dHJfcHJlcGFyZShcdTAwMjZub3BfbW50X2lkbWFwLCBkZW50cnksIGF0dHIpO1xuZnMvaGZzL2lub2RlLmMtNjM1LVx0aWYgKGVycm9yKVxuLS1cbmZzL2hmc3BsdXMvaW5vZGUuYz0zMDA9c3RhdGljIGludCBoZnNwbHVzX3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4tLVxuZnMvaGZzcGx1cy9pbm9kZS5jLTMwNS1cbmZzL2hmc3BsdXMvaW5vZGUuYzozMDY6XHRlcnJvciA9IHNldGF0dHJfcHJlcGFyZShcdTAwMjZub3BfbW50X2lkbWFwLCBkZW50cnksIGF0dHIpO1xuZnMvaGZzcGx1cy9pbm9kZS5jLTMwNy1cdGlmIChlcnJvcilcbi0tXG5mcy9ob3N0ZnMvaG9zdGZzX2tlcm4uYz04MDQ9c3RhdGljIGludCBob3N0ZnNfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbi0tXG5mcy9ob3N0ZnMvaG9zdGZzX2tlcm4uYy04MTMtXG5mcy9ob3N0ZnMvaG9zdGZzX2tlcm4uYzo4MTQ6XHRlcnIgPSBzZXRhdHRyX3ByZXBhcmUoXHUwMDI2bm9wX21udF9pZG1hcCwgZGVudHJ5LCBhdHRyKTtcbmZzL2hvc3Rmcy9ob3N0ZnNfa2Vybi5jLTgxNS1cdGlmIChlcnIpXG4tLVxuZnMvaHBmcy9pbm9kZS5jPTI2MD1pbnQgaHBmc19zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tLVxuZnMvaHBmcy9pbm9kZS5jLTI3Ny1cbmZzL2hwZnMvaW5vZGUuYzoyNzg6XHRlcnJvciA9IHNldGF0dHJfcHJlcGFyZShcdTAwMjZub3BfbW50X2lkbWFwLCBkZW50cnksIGF0dHIpO1xuZnMvaHBmcy9pbm9kZS5jLTI3OS1cdGlmIChlcnJvcilcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYz04MzE9c3RhdGljIGludCBodWdldGxiZnNfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy04MzktXG5mcy9odWdldGxiZnMvaW5vZGUuYzo4NDA6XHRlcnJvciA9IHNldGF0dHJfcHJlcGFyZShpZG1hcCwgZGVudHJ5LCBhdHRyKTtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTg0MS1cdGlmIChlcnJvcilcbi0tXG5mcy9qZmZzMi9mcy5jPTE5Mz1pbnQgamZmczJfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLS1cbmZzL2pmZnMyL2ZzLmMtMTk4LVxuZnMvamZmczIvZnMuYzoxOTk6XHRyYyA9IHNldGF0dHJfcHJlcGFyZShcdTAwMjZub3BfbW50X2lkbWFwLCBkZW50cnksIGlhdHRyKTtcbmZzL2pmZnMyL2ZzLmMtMjAwLVx0aWYgKHJjKVxuLS1cbmZzL2pmcy9maWxlLmM9OTI9aW50IGpmc19zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tLVxuZnMvamZzL2ZpbGUuYy05Ny1cbmZzL2pmcy9maWxlLmM6OTg6XHRyYyA9IHNldGF0dHJfcHJlcGFyZShcdTAwMjZub3BfbW50X2lkbWFwLCBkZW50cnksIGlhdHRyKTtcbmZzL2pmcy9maWxlLmMtOTktXHRpZiAocmMpXG4tLVxuZnMva2VybmZzL2lub2RlLmM9MTEwPWludCBrZXJuZnNfaW9wX3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbi0tXG5mcy9rZXJuZnMvaW5vZGUuYy0xMjItXHRkb3duX3dyaXRlKFx1MDAyNnJvb3QtXHUwMDNla2VybmZzX2lhdHRyX3J3c2VtKTtcbmZzL2tlcm5mcy9pbm9kZS5jOjEyMzpcdGVycm9yID0gc2V0YXR0cl9wcmVwYXJlKFx1MDAyNm5vcF9tbnRfaWRtYXAsIGRlbnRyeSwgaWF0dHIpO1xuZnMva2VybmZzL2lub2RlLmMtMTI0LVx0aWYgKGVycm9yKVxuLS1cbmZzL2xpYmZzLmM9OTE2PWludCBzaW1wbGVfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLS1cbmZzL2xpYmZzLmMtOTIxLVxuZnMvbGliZnMuYzo5MjI6XHRlcnJvciA9IHNldGF0dHJfcHJlcGFyZShpZG1hcCwgZGVudHJ5LCBpYXR0cik7XG5mcy9saWJmcy5jLTkyMy1cdGlmIChlcnJvcilcbi0tXG5mcy9taW5peC9maWxlLmM9MzM9c3RhdGljIGludCBtaW5peF9zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuLS1cbmZzL21pbml4L2ZpbGUuYy0zOC1cbmZzL21pbml4L2ZpbGUuYzozOTpcdGVycm9yID0gc2V0YXR0cl9wcmVwYXJlKFx1MDAyNm5vcF9tbnRfaWRtYXAsIGRlbnRyeSwgYXR0cik7XG5mcy9taW5peC9maWxlLmMtNDAtXHRpZiAoZXJyb3IpXG4tLVxuZnMvbmFtZXNwYWNlLmM9NDg0OT1zdGF0aWMgaW5saW5lIGJvb2wgbW50X2FsbG93X3dyaXRlcnMoY29uc3Qgc3RydWN0IG1vdW50X2thdHRyICprYXR0cixcbi0tXG5mcy9uYW1lc3BhY2UuYy00ODU2LVxuZnMvbmFtZXNwYWNlLmM6NDg1NzpzdGF0aWMgaW50IG1vdW50X3NldGF0dHJfcHJlcGFyZShzdHJ1Y3QgbW91bnRfa2F0dHIgKmthdHRyLCBzdHJ1Y3QgbW91bnQgKm1udClcbmZzL25hbWVzcGFjZS5jLTQ4NTgte1xuLS1cbmZzL25hbWVzcGFjZS5jPTQ5Mjg9c3RhdGljIGludCBkb19tb3VudF9zZXRhdHRyKGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoLCBzdHJ1Y3QgbW91bnRfa2F0dHIgKmthdHRyKVxuLS1cbmZzL25hbWVzcGFjZS5jLTQ5NzAtXHQgKi9cbmZzL25hbWVzcGFjZS5jOjQ5NzE6XHRlcnIgPSBtb3VudF9zZXRhdHRyX3ByZXBhcmUoa2F0dHIsIG1udCk7XG5mcy9uYW1lc3BhY2UuYy00OTcyLVx0aWYgKCFlcnIpXG4tLVxuZnMvbmZzZC9uZnNwcm9jLmM9NzY9bmZzZF9wcm9jX3NldGF0dHIoc3RydWN0IHN2Y19ycXN0ICpycXN0cClcbi0tXG5mcy9uZnNkL25mc3Byb2MuYy05Ni1cdCAqIFNvIGlmIGl0IGxvb2tzIGxpa2UgaXQgbWlnaHQgYmUgXCYjMzQ7c2V0IGJvdGggdG8gdGhlIHNhbWUgdGltZSB3aGljaFxuZnMvbmZzZC9uZnNwcm9jLmM6OTc6XHQgKiBpcyBjbG9zZSB0byBub3dcJiMzNDssIGFuZCBpZiBzZXRhdHRyX3ByZXBhcmUgZmFpbHMsIHRoZW4gd2VcbmZzL25mc2QvbmZzcHJvYy5jLTk4LVx0ICogY29udmVydCB0byBcJiMzNDtzZXQgdG8gbm93XCYjMzQ7IGluc3RlYWQgb2YgXCYjMzQ7c2V0IHRvIGV4cGxpY2l0IHRpbWVcJiMzNDtcbmZzL25mc2QvbmZzcHJvYy5jLTk5LVx0ICpcbmZzL25mc2QvbmZzcHJvYy5jOjEwMDpcdCAqIFdlIG9ubHkgY2FsbCBzZXRhdHRyX3ByZXBhcmUgYXMgdGhlIGxhc3QgdGVzdCBhcyB0ZWNobmljYWxseVxuZnMvbmZzZC9uZnNwcm9jLmMtMTAxLVx0ICogaXQgaXMgbm90IGFuIGludGVyZmFjZSB0aGF0IHdlIHNob3VsZCBiZSB1c2luZy5cbi0tXG5mcy9uZnNkL25mc3Byb2MuYy0xMjItXHRcdGlmIChkZWx0YSBcdTAwM2MgTUFYX1RPVUNIX1RJTUVfRVJST1IgXHUwMDI2XHUwMDI2XG5mcy9uZnNkL25mc3Byb2MuYzoxMjM6XHRcdCAgICBzZXRhdHRyX3ByZXBhcmUoXHUwMDI2bm9wX21udF9pZG1hcCwgZmhwLVx1MDAzZWZoX2RlbnRyeSwgaWFwKSAhPSAwKSB7XG5mcy9uZnNkL25mc3Byb2MuYy0xMjQtXHRcdFx0Lypcbi0tXG5mcy9uaWxmczIvaW5vZGUuYz05MDk9aW50IG5pbGZzX3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbi0tXG5mcy9uaWxmczIvaW5vZGUuYy05MTYtXG5mcy9uaWxmczIvaW5vZGUuYzo5MTc6XHRlcnIgPSBzZXRhdHRyX3ByZXBhcmUoXHUwMDI2bm9wX21udF9pZG1hcCwgZGVudHJ5LCBpYXR0cik7XG5mcy9uaWxmczIvaW5vZGUuYy05MTgtXHRpZiAoZXJyKVxuLS1cbmZzL250ZnMvZmlsZS5jPTI5OT1pbnQgbnRmc19zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tLVxuZnMvbnRmcy9maWxlLmMtMzEwLVxuZnMvbnRmcy9maWxlLmM6MzExOlx0ZXJyID0gc2V0YXR0cl9wcmVwYXJlKGlkbWFwLCBkZW50cnksIGF0dHIpO1xuZnMvbnRmcy9maWxlLmMtMzEyLVx0aWYgKGVycilcbi0tXG5mcy9udGZzMy9maWxlLmM9NzA2PWludCBudGZzX3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbi0tXG5mcy9udGZzMy9maWxlLmMtNzIxLVxuZnMvbnRmczMvZmlsZS5jOjcyMjpcdGVyciA9IHNldGF0dHJfcHJlcGFyZShpZG1hcCwgZGVudHJ5LCBhdHRyKTtcbmZzL250ZnMzL2ZpbGUuYy03MjMtXHRpZiAoZXJyKVxuLS1cbmZzL29jZnMyL2RsbWZzL2RsbWZzLmM9MTkxPXN0YXRpYyBpbnQgZGxtZnNfZmlsZV9zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuLS1cbmZzL29jZnMyL2RsbWZzL2RsbWZzLmMtMTk3LVx0YXR0ci1cdTAwM2VpYV92YWxpZCBcdTAwMjY9IH5BVFRSX1NJWkU7XG5mcy9vY2ZzMi9kbG1mcy9kbG1mcy5jOjE5ODpcdGVycm9yID0gc2V0YXR0cl9wcmVwYXJlKFx1MDAyNm5vcF9tbnRfaWRtYXAsIGRlbnRyeSwgYXR0cik7XG5mcy9vY2ZzMi9kbG1mcy9kbG1mcy5jLTE5OS1cdGlmIChlcnJvcilcbi0tXG5mcy9vY2ZzMi9maWxlLmM9MTEyMD1pbnQgb2NmczJfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLS1cbmZzL29jZnMyL2ZpbGUuYy0xMTU5LVxuZnMvb2NmczIvZmlsZS5jOjExNjA6XHRzdGF0dXMgPSBzZXRhdHRyX3ByZXBhcmUoXHUwMDI2bm9wX21udF9pZG1hcCwgZGVudHJ5LCBhdHRyKTtcbmZzL29jZnMyL2ZpbGUuYy0xMTYxLVx0aWYgKHN0YXR1cylcbi0tXG5mcy9vbWZzL2ZpbGUuYz0zNDE9c3RhdGljIGludCBvbWZzX3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4tLVxuZnMvb21mcy9maWxlLmMtMzQ2LVxuZnMvb21mcy9maWxlLmM6MzQ3Olx0ZXJyb3IgPSBzZXRhdHRyX3ByZXBhcmUoXHUwMDI2bm9wX21udF9pZG1hcCwgZGVudHJ5LCBhdHRyKTtcbmZzL29tZnMvZmlsZS5jLTM0OC1cdGlmIChlcnJvcilcbi0tXG5mcy9vcmFuZ2Vmcy9pbm9kZS5jPTgzMT1pbnQgb3JhbmdlZnNfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLS1cbmZzL29yYW5nZWZzL2lub2RlLmMtODM2LVx0ICAgIGRlbnRyeSk7XG5mcy9vcmFuZ2Vmcy9pbm9kZS5jOjgzNzpcdHJldCA9IHNldGF0dHJfcHJlcGFyZShcdTAwMjZub3BfbW50X2lkbWFwLCBkZW50cnksIGlhdHRyKTtcbmZzL29yYW5nZWZzL2lub2RlLmMtODM4LVx0aWYgKHJldClcbi0tXG5mcy9vdmVybGF5ZnMvaW5vZGUuYz0yMT1pbnQgb3ZsX3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbi0tXG5mcy9vdmVybGF5ZnMvaW5vZGUuYy0yOC1cbmZzL292ZXJsYXlmcy9pbm9kZS5jOjI5Olx0ZXJyID0gc2V0YXR0cl9wcmVwYXJlKFx1MDAyNm5vcF9tbnRfaWRtYXAsIGRlbnRyeSwgYXR0cik7XG5mcy9vdmVybGF5ZnMvaW5vZGUuYy0zMC1cdGlmIChlcnIpXG4tLVxuZnMvcHJvYy9iYXNlLmM9NzA1PWludCBwcm9jX25vY2htb2Rfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLS1cbmZzL3Byb2MvYmFzZS5jLTcxMy1cbmZzL3Byb2MvYmFzZS5jOjcxNDpcdGVycm9yID0gc2V0YXR0cl9wcmVwYXJlKFx1MDAyNm5vcF9tbnRfaWRtYXAsIGRlbnRyeSwgYXR0cik7XG5mcy9wcm9jL2Jhc2UuYy03MTUtXHRpZiAoZXJyb3IpXG4tLVxuZnMvcHJvYy9nZW5lcmljLmM9MTIwPXN0YXRpYyBpbnQgcHJvY19zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tLVxuZnMvcHJvYy9nZW5lcmljLmMtMTI2LVxuZnMvcHJvYy9nZW5lcmljLmM6MTI3Olx0ZXJyb3IgPSBzZXRhdHRyX3ByZXBhcmUoXHUwMDI2bm9wX21udF9pZG1hcCwgZGVudHJ5LCBpYXR0cik7XG5mcy9wcm9jL2dlbmVyaWMuYy0xMjgtXHRpZiAoZXJyb3IpXG4tLVxuZnMvcHJvYy9wcm9jX3N5c2N0bC5jPTgyMD1zdGF0aWMgaW50IHByb2Nfc3lzX3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4tLVxuZnMvcHJvYy9wcm9jX3N5c2N0bC5jLTgyOC1cbmZzL3Byb2MvcHJvY19zeXNjdGwuYzo4Mjk6XHRlcnJvciA9IHNldGF0dHJfcHJlcGFyZShcdTAwMjZub3BfbW50X2lkbWFwLCBkZW50cnksIGF0dHIpO1xuZnMvcHJvYy9wcm9jX3N5c2N0bC5jLTgzMC1cdGlmIChlcnJvcilcbi0tXG5mcy9yYW1mcy9maWxlLW5vbW11LmM9MTYxPXN0YXRpYyBpbnQgcmFtZnNfbm9tbXVfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbi0tXG5mcy9yYW1mcy9maWxlLW5vbW11LmMtMTY4LVx0LyogUE9TSVggVUlEL0dJRCB2ZXJpZmljYXRpb24gZm9yIHNldHRpbmcgaW5vZGUgYXR0cmlidXRlcyAqL1xuZnMvcmFtZnMvZmlsZS1ub21tdS5jOjE2OTpcdHJldCA9IHNldGF0dHJfcHJlcGFyZShcdTAwMjZub3BfbW50X2lkbWFwLCBkZW50cnksIGlhKTtcbmZzL3JhbWZzL2ZpbGUtbm9tbXUuYy0xNzAtXHRpZiAocmV0KVxuLS1cbmZzL3NtYi9jbGllbnQvaW5vZGUuYz0zMTM1PWNpZnNfc2V0YXR0cl91bml4KHN0cnVjdCBkZW50cnkgKmRpcmVudHJ5LCBzdHJ1Y3QgaWF0dHIgKmF0dHJzKVxuLS1cbmZzL3NtYi9jbGllbnQvaW5vZGUuYy0zMTU2LVxuZnMvc21iL2NsaWVudC9pbm9kZS5jOjMxNTc6XHRyYyA9IHNldGF0dHJfcHJlcGFyZShcdTAwMjZub3BfbW50X2lkbWFwLCBkaXJlbnRyeSwgYXR0cnMpO1xuZnMvc21iL2NsaWVudC9pbm9kZS5jLTMxNTgtXHRpZiAocmMgXHUwMDNjIDApXG4tLVxuZnMvc21iL2NsaWVudC9pbm9kZS5jPTMzMDU9Y2lmc19zZXRhdHRyX25vdW5peChzdHJ1Y3QgZGVudHJ5ICpkaXJlbnRyeSwgc3RydWN0IGlhdHRyICphdHRycylcbi0tXG5mcy9zbWIvY2xpZW50L2lub2RlLmMtMzMyOC1cbmZzL3NtYi9jbGllbnQvaW5vZGUuYzozMzI5Olx0cmMgPSBzZXRhdHRyX3ByZXBhcmUoXHUwMDI2bm9wX21udF9pZG1hcCwgZGlyZW50cnksIGF0dHJzKTtcbmZzL3NtYi9jbGllbnQvaW5vZGUuYy0zMzMwLVx0aWYgKHJjIFx1MDAzYyAwKVxuLS1cbmZzL3ViaWZzL2ZpbGUuYz0xMjU0PWludCB1Ymlmc19zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tLVxuZnMvdWJpZnMvZmlsZS5jLTEyNjItXHRcdGlub2RlLVx1MDAzZWlfaW5vLCBpbm9kZS1cdTAwM2VpX21vZGUsIGF0dHItXHUwMDNlaWFfdmFsaWQpO1xuZnMvdWJpZnMvZmlsZS5jOjEyNjM6XHRlcnIgPSBzZXRhdHRyX3ByZXBhcmUoXHUwMDI2bm9wX21udF9pZG1hcCwgZGVudHJ5LCBhdHRyKTtcbmZzL3ViaWZzL2ZpbGUuYy0xMjY0LVx0aWYgKGVycilcbi0tXG5mcy91ZGYvZmlsZS5jPTIyMj1zdGF0aWMgaW50IHVkZl9zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tLVxuZnMvdWRmL2ZpbGUuYy0yMjgtXG5mcy91ZGYvZmlsZS5jOjIyOTpcdGVycm9yID0gc2V0YXR0cl9wcmVwYXJlKFx1MDAyNm5vcF9tbnRfaWRtYXAsIGRlbnRyeSwgYXR0cik7XG5mcy91ZGYvZmlsZS5jLTIzMC1cdGlmIChlcnJvcilcbi0tXG5mcy91ZnMvaW5vZGUuYz0xMTk4PWludCB1ZnNfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLS1cbmZzL3Vmcy9pbm9kZS5jLTEyMDQtXG5mcy91ZnMvaW5vZGUuYzoxMjA1Olx0ZXJyb3IgPSBzZXRhdHRyX3ByZXBhcmUoXHUwMDI2bm9wX21udF9pZG1hcCwgZGVudHJ5LCBhdHRyKTtcbmZzL3Vmcy9pbm9kZS5jLTEyMDYtXHRpZiAoZXJyb3IpXG4tLVxuZnMvdXRpbWVzLmM9MjE9aW50IHZmc191dGltZXMoY29uc3Qgc3RydWN0IHBhdGggKnBhdGgsIHN0cnVjdCB0aW1lc3BlYzY0ICp0aW1lcylcbi0tXG5mcy91dGltZXMuYy01Ni1cdFx0LypcbmZzL3V0aW1lcy5jOjU3Olx0XHQgKiBUZWxsIHNldGF0dHJfcHJlcGFyZSgpLCB0aGF0IHRoaXMgaXMgYW4gZXhwbGljaXQgdGltZVxuZnMvdXRpbWVzLmMtNTgtXHRcdCAqIHVwZGF0ZSwgZXZlbiBpZiBuZWl0aGVyIEFUVFJfQVRJTUVfU0VUIG5vciBBVFRSX01USU1FX1NFVFxuLS1cbmZzL3hmcy94ZnNfaW9jdGwuYz02MDc9c3RhdGljIHZvaWRcbmZzL3hmcy94ZnNfaW9jdGwuYzo2MDg6eGZzX2lvY3RsX3NldGF0dHJfcHJlcGFyZV9kYXgoXG5mcy94ZnMveGZzX2lvY3RsLmMtNjA5LVx0c3RydWN0IHhmc19pbm9kZVx0KmlwLFxuLS1cbmZzL3hmcy94ZnNfaW9jdGwuYz03NTA9eGZzX2ZpbGVhdHRyX3NldChcbi0tXG5mcy94ZnMveGZzX2lvY3RsLmMtODA0LVxuZnMveGZzL3hmc19pb2N0bC5jOjgwNTpcdHhmc19pb2N0bF9zZXRhdHRyX3ByZXBhcmVfZGF4KGlwLCBmYSk7XG5mcy94ZnMveGZzX2lvY3RsLmMtODA2LVxuLS1cbmZzL3hmcy94ZnNfaW9wcy5jPTc1Nz14ZnNfdm5fY2hhbmdlX29rKFxuLS1cbmZzL3hmcy94ZnNfaW9wcy5jLTc2OS1cbmZzL3hmcy94ZnNfaW9wcy5jOjc3MDpcdHJldHVybiBzZXRhdHRyX3ByZXBhcmUoaWRtYXAsIGRlbnRyeSwgaWF0dHIpO1xuZnMveGZzL3hmc19pb3BzLmMtNzcxLX1cbi0tXG5mcy94ZnMveGZzX2lvcHMuYy03NzYtICogQ2F1dGlvbjogVGhlIGNhbGxlciBvZiB0aGlzIGZ1bmN0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciBjYWxsaW5nXG5mcy94ZnMveGZzX2lvcHMuYzo3Nzc6ICogc2V0YXR0cl9wcmVwYXJlKCkgb3Igb3RoZXJ3aXNlIHZlcmlmeWluZyB0aGUgY2hhbmdlIGlzIGZpbmUuXG5mcy94ZnMveGZzX2lvcHMuYy03NzgtICovXG4tLVxuZnMvem9uZWZzL3N1cGVyLmM9NTM2PXN0YXRpYyBpbnQgem9uZWZzX2lub2RlX3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4tLVxuZnMvem9uZWZzL3N1cGVyLmMtNTQ0LVxuZnMvem9uZWZzL3N1cGVyLmM6NTQ1Olx0cmV0ID0gc2V0YXR0cl9wcmVwYXJlKFx1MDAyNm5vcF9tbnRfaWRtYXAsIGRlbnRyeSwgaWF0dHIpO1xuZnMvem9uZWZzL3N1cGVyLmMtNTQ2LVx0aWYgKHJldClcbi0tXG5pbmNsdWRlL2xpbnV4L2ZzLmg9MzM4Mz1pbnQgbWF5X3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG5pbmNsdWRlL2xpbnV4L2ZzLmgtMzM4NC1cdFx0dW5zaWduZWQgaW50IGlhX3ZhbGlkKTtcbmluY2x1ZGUvbGludXgvZnMuaDozMzg1OmludCBzZXRhdHRyX3ByZXBhcmUoc3RydWN0IG1udF9pZG1hcCAqLCBzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBpYXR0ciAqKTtcbmluY2x1ZGUvbGludXgvZnMuaC0zMzg2LWV4dGVybiBpbnQgaW5vZGVfbmV3c2l6ZV9vayhjb25zdCBzdHJ1Y3QgaW5vZGUgKiwgbG9mZl90IG9mZnNldCk7XG4tLVxubW0vc2htZW0uYz0xMzE2PXN0YXRpYyBpbnQgc2htZW1fc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbi0tXG5tbS9zaG1lbS5jLTEzMjQtXG5tbS9zaG1lbS5jOjEzMjU6XHRlcnJvciA9IHNldGF0dHJfcHJlcGFyZShpZG1hcCwgZGVudHJ5LCBhdHRyKTtcbm1tL3NobWVtLmMtMTMyNi1cdGlmIChlcnJvcilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDM6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA3NzgKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiA2OTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBTdHJhdGVneSBmb3IgQ29yZSBWRlMgYW5kIEFGUyBPd25lcnNoaXAgQ2hlY2tzKioKCk9rYXksIHNvIGBzZXRhdHRyX3ByZXBhcmVgIGlzIGV4cG9ydGVkLCB0aGF0JiMzOTtzIG91ciBzdGFydGluZyBwb2ludC4gVGhlIGNydWNpYWwgc3ltYm9scyB0byB0YXJnZXQgYXJlOgoKKiAgIGB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWVgCiogICBgYWZzX2lzX293bmVkX2J5X21lYAoqICAgYGFmc19oYXZlX3NhbWVfb3duZXJgCiogICBgaW5vZGVfb3duZXJfb3JfY2FwYWJsZWAKKiAgIGB2ZnNfc2V0bGVhc2VgCiogICBgX19jaGVja19zdGlja3lgCiogICBgc2V0YXR0cl9wcmVwYXJlYAoKTm93LCByZWdhcmRpbmcgYHZmc19pbm9kZV9pc19vd25lZF9ieV9tZWAsIGl0JiMzOTtzIG5vdCBleHBvcnRlZC4gQnV0LCBhbmQgdGhpcyBpcyBrZXksIGl0JiMzOTtzIG5vbi1zdGF0aWMuIFNpbmNlIFN5emthbGxlciBjYW4gZnV6eiBub24tc3RhdGljIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIGtlcm5lbCBjb3JlLCB0aGF0JiMzOTtzIG5vdCBhIHByb2JsZW0uIFdhaXQgYSBtb21lbnQsIFN5emthbGxlciBwcmltYXJpbHkgZm9jdXNlcyBvbiBzeXNjYWxscy4gVGhlc2Ugc3ltYm9scyBhY3QgYXMgYSBndWlkZSB0byByZWFjaCBmdW5jdGlvbnMgdGhhdCBpbXBsZW1lbnQgdGhlIHN5c2NhbGxzLiBTbywgbm9uLXN0YXRpYyBmdW5jdGlvbnMgbGlrZSBgdmZzX2lub2RlX2lzX293bmVkX2J5X21lYCBhcmUgcGVyZmVjdGx5IHZhbGlkIHRhcmdldHMuCgpMZXQmIzM5O3MgZG91YmxlLWNoZWNrIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMuIEkgYmVsaWV2ZSBgQUZTX0ZTYCBpcyByZXF1aXJlZC4gQXJlIHRoZXJlIGFueSBvdGhlciBjb25maWcgb3B0aW9ucz8gTm8sIHRoZSBvdGhlciBjaGFuZ2VzIGFyZSB3aXRoaW4gdGhlIGNvcmUgVkZTLgoKQWxyaWdodCwgdGltZSB0byBzb2xpZGlmeSB0aGUgcmF0aW9uYWxlLiBUaGlzIHBhdGNoIGludHJvZHVjZXMgYGlzX293bmVkX2J5X21lYCBhbmQgYGhhdmVfc2FtZV9vd25lcmAgaW5vZGUgb3BlcmF0aW9ucy4gVGhlc2UgYWxsb3cgZmlsZXN5c3RlbXMsIGVzcGVjaWFsbHkgQUZTLCB0byBvdmVycmlkZSBkZWZhdWx0IFZGUyBvd25lcnNoaXAgY2hlY2tzLiBTZXZlcmFsIGNyaXRpY2FsIFZGUyBwYXRocyBhcmUgbW9kaWZpZWQuIEl0IHRvdWNoZXMgY29kZSBsaWtlIGBjaG93bl9va2AsIGBjaGdycF9va2AsIGBjb3JlZHVtcF9maWxlYCwgYGlub2RlX293bmVyX29yX2NhcGFibGVgLCBgdmZzX3NldGxlYXNlYCwgYG1heV9mb2xsb3dfbGlua2AsIGBtYXlfY3JlYXRlX2luX3N0aWNreWAsIGBfX2NoZWNrX3N0aWNreWAsIGFuZCBgbWF5X2RlZHVwZV9maWxlYC4gVGhpcyByZXByZXNlbnRzIGEgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIFZGUyBhbmQgQUZTLCBhbmQgaXQgZGVtYW5kcyB0aG9yb3VnaCBmdXp6aW5nIHRvIGd1YXJkIGFnYWluc3QgcmVncmVzc2lvbnMgYW5kIHBvdGVudGlhbCBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMuCgpNeSB0YXJnZXQgc3ltYm9scyBub3cgbG9vayBsaWtlIHRoaXM6CgoqICAgYHZmc19pbm9kZV9pc19vd25lZF9ieV9tZWAKKiAgIGBhZnNfaXNfb3duZWRfYnlfbWVgCiogICBgYWZzX2hhdmVfc2FtZV9vd25lcmAKKiAgIGBpbm9kZV9vd25lcl9vcl9jYXBhYmxlYAoqICAgYHZmc19zZXRsZWFzZWAKKiAgIGBfX2NoZWNrX3N0aWNreWAKKiAgIGBzZXRhdHRyX3ByZXBhcmVgCgpMZXQmIzM5O3MgY29uZmlybSB0aGF0IGB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWVgIGlzIGFjdHVhbGx5IGNhbGxlZCBmcm9tIGBzZXRhdHRyX3ByZXBhcmVgLiBZZXMsIGBzZXRhdHRyX3ByZXBhcmVgIGNhbGxzIGBjaG93bl9va2AgYW5kIGBjaGdycF9va2Agd2hpY2ggY2FsbCBgdmZzX2lub2RlX2lzX293bmVkX2J5X21lYC4KCk5vdywgZG9lcyBgbWF5X2NyZWF0ZV9pbl9zdGlja3lgIGhhdmUgY2FsbCBzaXRlcyB3ZSBjYW4gbGV2ZXJhZ2U/IEl0JiMzOTtzIGNhbGxlZCBmcm9tIGBtYXlfb3BlbmAgYW5kIGBtYXlfY3JlYXRlYCwgYW5kIGBtYXlfbGlua2F0YCBjYWxscyBgbWF5X2ZvbGxvd19saW5rYC4gQW5kIGB2ZnNfY2xvbmVfZmlsZV9yYW5nZWAgYW5kIGB2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2Vfb25lYCBjYWxsIGBtYXlfZGVkdXBlX2ZpbGVgLiBJIHRoaW5rIHdlIGNvdWxkIGFkZCBgdmZzX2RlZHVwZV9maWxlX3JhbmdlX29uZWAgdG9vLiBZZXMsIGl0JiMzOTtzIHdvcnRoIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwMzozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2Vfb25lJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL292ZXJsYXlmcy9maWxlLmM9NTI3PXN0YXRpYyBsb2ZmX3Qgb3ZsX2NvcHlmaWxlKHN0cnVjdCBmaWxlICpmaWxlX2luLCBsb2ZmX3QgcG9zX2luLFxuLS1cbmZzL292ZXJsYXlmcy9maWxlLmMtNTY2LVx0XHRjYXNlIE9WTF9ERURVUEU6XG5mcy9vdmVybGF5ZnMvZmlsZS5jOjU2NzpcdFx0XHRyZXQgPSB2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2Vfb25lKHJlYWxmaWxlX2luLCBwb3NfaW4sXG5mcy9vdmVybGF5ZnMvZmlsZS5jLTU2OC1cdFx0XHRcdFx0XHRcdHJlYWxmaWxlX291dCwgcG9zX291dCwgbGVuLFxuLS1cbmZzL3JlbWFwX3JhbmdlLmM9NDE2PXN0YXRpYyBpbnQgbWF5X2RlZHVwZV9maWxlKHN0cnVjdCBmaWxlICpmaWxlKVxuLS1cbmZzL3JlbWFwX3JhbmdlLmMtNDMzLVxuZnMvcmVtYXBfcmFuZ2UuYzo0MzQ6bG9mZl90IHZmc19kZWR1cGVfZmlsZV9yYW5nZV9vbmUoc3RydWN0IGZpbGUgKnNyY19maWxlLCBsb2ZmX3Qgc3JjX3BvcyxcbmZzL3JlbWFwX3JhbmdlLmMtNDM1LVx0XHRcdFx0IHN0cnVjdCBmaWxlICpkc3RfZmlsZSwgbG9mZl90IGRzdF9wb3MsXG4tLVxuZnMvcmVtYXBfcmFuZ2UuYy00OTEtfVxuZnMvcmVtYXBfcmFuZ2UuYzo0OTI6RVhQT1JUX1NZTUJPTCh2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2Vfb25lKTtcbmZzL3JlbWFwX3JhbmdlLmMtNDkzLVxuZnMvcmVtYXBfcmFuZ2UuYz00OTQ9aW50IHZmc19kZWR1cGVfZmlsZV9yYW5nZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGZpbGVfZGVkdXBlX3JhbmdlICpzYW1lKVxuLS1cbmZzL3JlbWFwX3JhbmdlLmMtNTUyLVxuZnMvcmVtYXBfcmFuZ2UuYzo1NTM6XHRcdGRlZHVwZWQgPSB2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2Vfb25lKGZpbGUsIG9mZiwgZmRfZmlsZShkc3RfZmQpLFxuZnMvcmVtYXBfcmFuZ2UuYy01NTQtXHRcdFx0XHRcdFx0ICAgIGluZm8tXHUwMDNlZGVzdF9vZmZzZXQsIGxlbixcbi0tXG5pbmNsdWRlL2xpbnV4L2ZzLmg9MjA5Mj1leHRlcm4gaW50IHZmc19kZWR1cGVfZmlsZV9yYW5nZShzdHJ1Y3QgZmlsZSAqZmlsZSxcbmluY2x1ZGUvbGludXgvZnMuaC0yMDkzLVx0XHRcdFx0IHN0cnVjdCBmaWxlX2RlZHVwZV9yYW5nZSAqc2FtZSk7XG5pbmNsdWRlL2xpbnV4L2ZzLmg6MjA5NDpleHRlcm4gbG9mZl90IHZmc19kZWR1cGVfZmlsZV9yYW5nZV9vbmUoc3RydWN0IGZpbGUgKnNyY19maWxlLCBsb2ZmX3Qgc3JjX3BvcyxcbmluY2x1ZGUvbGludXgvZnMuaC0yMDk1LVx0XHRcdFx0XHRzdHJ1Y3QgZmlsZSAqZHN0X2ZpbGUsIGxvZmZfdCBkc3RfcG9zLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwMzozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjc4NQoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDQ0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEtlcm5lbCBQYXRjaDogRm9jdXMgb24gRmlsZSBTeXN0ZW0gU2VjdXJpdHkgYW5kIEFGUyoqCgpPa2F5LCBzbyBgdmZzX2RlZHVwZV9maWxlX3JhbmdlX29uZWAgKmlzKiBleHBvcnRlZCwgdGhhdCYjMzk7cyBnb29kIHRvIGtub3cuIE5vdywgbGV0JiMzOTtzIHRha2UgYSBxdWljayBsb29rIGF0IGBjb3JlZHVtcF9maWxlYC4gUmlnaHQsIGl0JiMzOTtzIHN0YXRpYywgYW5kIHRoZSBjYWxsZXIgaXMgYGRvX2NvcmVkdW1wYC4gU2VlbXMgbGlrZSB3ZSBjYW4gaWdub3JlIHRoYXQgb25lLiBHb3R0YSBzdGljayB0byB0aGUgY29yZSBhcmVhcyBvZiBpbnRlcmVzdCBoZXJlLgoKTXkgZm9jdXMgc3ltYm9scyBhcmU6IGB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWVgLCBgYWZzX2lzX293bmVkX2J5X21lYCwgYGFmc19oYXZlX3NhbWVfb3duZXJgLCBgaW5vZGVfb3duZXJfb3JfY2FwYWJsZWAsIGB2ZnNfc2V0bGVhc2VgLCBgX19jaGVja19zdGlja3lgLCBgc2V0YXR0cl9wcmVwYXJlYCwgYW5kIGB2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2Vfb25lYC4gVGhpcyBsb29rcyBsaWtlIGEgc29saWQgbGlzdCB0byBzdGFydCB3aXRoLgoKSSYjMzk7bSBqdXN0IGdvaW5nIHRvIGRvdWJsZS1jaGVjayBgYWZzX2lzX293bmVkX2J5X21lYCBhbmQgYGFmc19oYXZlX3NhbWVfb3duZXJgLiBBaCwgeWVzLCB0aGV5IGFyZSBpbmRlZWQgaW4gYGZzL2Fmcy9zZWN1cml0eS5jYC4gTGV0IG1lIHNlZS4uLiBhcmUgdGhlcmUgYW55ICpvdGhlciogQUZTIGZ1bmN0aW9ucyB0aGF0IGhhdmUgYmVlbiBtb2RpZmllZD8gSSBzZWUgYGFmc19lZGl0X2Rpcl9yZW1vdmVgIGluIGBmcy9hZnMvZGlyX2VkaXQuY2AsIGBhZnNfZGlyX2ZpbmRfYmxvY2tgIGluIGBmcy9hZnMvZGlyX3NlYXJjaC5jYCwgYGFmc19mc19mZXRjaF9kYXRhYCBpbiBgZnMvYWZzL2ZzY2xpZW50LmNgLCBgYWZzX2lub2RlX2luaXRfZnJvbV9zdGF0dXNgIGluIGBmcy9hZnMvaW5vZGUuY2AsIGFuZCBgYWZzX21ha2Vfb3BfY2FsbGAgaW4gYGZzL2Fmcy9pbnRlcm5hbC5oYC4KCldhaXQgYSBtaW51dGUsIEkgc2VlIHRoZSBwYXRjaCBtb2RpZmllcyBgYWZzX2VkaXRfZGlyX3JlbW92ZWAgYW5kIGBhZnNfZGlyX2ZpbmRfYmxvY2tgIHRvIHVzZSBgYWZzX2Rpcl9nZXRfYmxvY2tgIGFuZCBgYWZzX2Rpcl9lbmRfaXRlcmAuIEludGVyZXN0aW5nLiBBbmQgYGFmc19mc19mZXRjaF9kYXRhYCBzZXRzIGBjYWxsLSZndDthc3luYyA9IHRydWVgLiBBbmQgYGFmc19tYWtlX29wX2NhbGxgIHVzZXMgYGFmc19nZXRfY2FsbGAgYW5kIGBhZnNfcHV0X2NhbGxgLiBUaGVzZSBhcmUgY2xlYXJseSBBRlMtc3BlY2lmaWMgZml4ZXMgYW5kIGNoYW5nZXMuIEkgbmVlZCB0byBmYWN0b3IgdGhlc2UgaW50byBteSBhbmFseXNpcy4gSSYjMzk7bGwgYWRkIGBhZnNfZWRpdF9kaXJfcmVtb3ZlYCBhbmQgYGFmc19mc19mZXRjaF9kYXRhYCB0byBteSBsaXN0IG9mIGZvY3VzIHN5bWJvbHMuIEl0JiMzOTtzIGltcG9ydGFudCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHRoZSBBRlMgY2hhbmdlcyBhbG9uZ3NpZGUgdGhlIG90aGVyIGZpbGUgc3lzdGVtIGNvbXBvbmVudHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAzOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Fmc19lZGl0X2Rpcl9yZW1vdmUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvYWZzL2Rpci5jPTEzNzA9c3RhdGljIHZvaWQgYWZzX3JtZGlyX2VkaXRfZGlyKHN0cnVjdCBhZnNfb3BlcmF0aW9uICpvcClcbi0tXG5mcy9hZnMvZGlyLmMtMTM4Mi1cdCAgICBkdm5vZGUtXHUwMDNlc3RhdHVzLmRhdGFfdmVyc2lvbiA9PSBkdnAtXHUwMDNlZHZfYmVmb3JlICYjNDM7IGR2cC1cdTAwM2Vkdl9kZWx0YSlcbmZzL2Fmcy9kaXIuYzoxMzgzOlx0XHRhZnNfZWRpdF9kaXJfcmVtb3ZlKGR2bm9kZSwgXHUwMDI2b3AtXHUwMDNlZGVudHJ5LVx1MDAzZWRfbmFtZSxcbmZzL2Fmcy9kaXIuYy0xMzg0LVx0XHRcdFx0ICAgIGFmc19lZGl0X2Rpcl9mb3Jfcm1kaXIpO1xuLS1cbmZzL2Fmcy9kaXIuYz0xNTE4PXN0YXRpYyB2b2lkIGFmc191bmxpbmtfZWRpdF9kaXIoc3RydWN0IGFmc19vcGVyYXRpb24gKm9wKVxuLS1cbmZzL2Fmcy9kaXIuYy0xNTI4LVx0ICAgIGR2bm9kZS1cdTAwM2VzdGF0dXMuZGF0YV92ZXJzaW9uID09IGR2cC1cdTAwM2Vkdl9iZWZvcmUgJiM0MzsgZHZwLVx1MDAzZWR2X2RlbHRhKVxuZnMvYWZzL2Rpci5jOjE1Mjk6XHRcdGFmc19lZGl0X2Rpcl9yZW1vdmUoZHZub2RlLCBcdTAwMjZvcC1cdTAwM2VkZW50cnktXHUwMDNlZF9uYW1lLFxuZnMvYWZzL2Rpci5jLTE1MzAtXHRcdFx0XHQgICAgYWZzX2VkaXRfZGlyX2Zvcl91bmxpbmspO1xuLS1cbmZzL2Fmcy9kaXIuYz0xODkwPXN0YXRpYyB2b2lkIGFmc19yZW5hbWVfZWRpdF9kaXIoc3RydWN0IGFmc19vcGVyYXRpb24gKm9wKVxuLS1cbmZzL2Fmcy9kaXIuYy0xOTE1LVx0ICAgIG9yaWdfZHZub2RlLVx1MDAzZXN0YXR1cy5kYXRhX3ZlcnNpb24gPT0gb3JpZ19kdnAtXHUwMDNlZHZfYmVmb3JlICYjNDM7IG9yaWdfZHZwLVx1MDAzZWR2X2RlbHRhKVxuZnMvYWZzL2Rpci5jOjE5MTY6XHRcdGFmc19lZGl0X2Rpcl9yZW1vdmUob3JpZ19kdm5vZGUsIFx1MDAyNm9sZF9kZW50cnktXHUwMDNlZF9uYW1lLFxuZnMvYWZzL2Rpci5jLTE5MTctXHRcdFx0XHQgICAgYWZzX2VkaXRfZGlyX2Zvcl9yZW5hbWVfMCk7XG4tLVxuZnMvYWZzL2Rpci5jLTE5MjYtXHRcdGlmICghb3AtXHUwMDNlcmVuYW1lLm5ld19uZWdhdGl2ZSlcbmZzL2Fmcy9kaXIuYzoxOTI3Olx0XHRcdGFmc19lZGl0X2Rpcl9yZW1vdmUobmV3X2R2bm9kZSwgXHUwMDI2bmV3X2RlbnRyeS1cdTAwM2VkX25hbWUsXG5mcy9hZnMvZGlyLmMtMTkyOC1cdFx0XHRcdFx0ICAgIGFmc19lZGl0X2Rpcl9mb3JfcmVuYW1lXzEpO1xuLS1cbmZzL2Fmcy9kaXJfZWRpdC5jPTI0MT12b2lkIGFmc19lZGl0X2Rpcl9hZGQoc3RydWN0IGFmc192bm9kZSAqdm5vZGUsXG4tLVxuZnMvYWZzL2Rpcl9lZGl0LmMtMzkyLSAqL1xuZnMvYWZzL2Rpcl9lZGl0LmM6MzkzOnZvaWQgYWZzX2VkaXRfZGlyX3JlbW92ZShzdHJ1Y3QgYWZzX3Zub2RlICp2bm9kZSxcbmZzL2Fmcy9kaXJfZWRpdC5jLTM5NC1cdFx0XHQgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsIGVudW0gYWZzX2VkaXRfZGlyX3JlYXNvbiB3aHkpXG4tLVxuZnMvYWZzL2Rpcl9zaWxseS5jPTIzPXN0YXRpYyB2b2lkIGFmc19zaWxseV9yZW5hbWVfZWRpdF9kaXIoc3RydWN0IGFmc19vcGVyYXRpb24gKm9wKVxuLS1cbmZzL2Fmcy9kaXJfc2lsbHkuYy00MS1cdCAgICBkdm5vZGUtXHUwMDNlc3RhdHVzLmRhdGFfdmVyc2lvbiA9PSBkdnAtXHUwMDNlZHZfYmVmb3JlICYjNDM7IGR2cC1cdTAwM2Vkdl9kZWx0YSkge1xuZnMvYWZzL2Rpcl9zaWxseS5jOjQyOlx0XHRhZnNfZWRpdF9kaXJfcmVtb3ZlKGR2bm9kZSwgXHUwMDI2b2xkLVx1MDAzZWRfbmFtZSxcbmZzL2Fmcy9kaXJfc2lsbHkuYy00My1cdFx0XHRcdCAgICBhZnNfZWRpdF9kaXJfZm9yX3NpbGx5XzApO1xuLS1cbmZzL2Fmcy9kaXJfc2lsbHkuYz0xNzY9c3RhdGljIHZvaWQgYWZzX3NpbGx5X3VubGlua19lZGl0X2RpcihzdHJ1Y3QgYWZzX29wZXJhdGlvbiAqb3ApXG4tLVxuZnMvYWZzL2Rpcl9zaWxseS5jLTE4NC1cdCAgICBkdm5vZGUtXHUwMDNlc3RhdHVzLmRhdGFfdmVyc2lvbiA9PSBkdnAtXHUwMDNlZHZfYmVmb3JlICYjNDM7IGR2cC1cdTAwM2Vkdl9kZWx0YSlcbmZzL2Fmcy9kaXJfc2lsbHkuYzoxODU6XHRcdGFmc19lZGl0X2Rpcl9yZW1vdmUoZHZub2RlLCBcdTAwMjZvcC1cdTAwM2VkZW50cnktXHUwMDNlZF9uYW1lLFxuZnMvYWZzL2Rpcl9zaWxseS5jLTE4Ni1cdFx0XHRcdCAgICBhZnNfZWRpdF9kaXJfZm9yX3VubGluayk7XG4tLVxuZnMvYWZzL2ludGVybmFsLmg9MTExOD1leHRlcm4gdm9pZCBhZnNfZWRpdF9kaXJfYWRkKHN0cnVjdCBhZnNfdm5vZGUgKiwgY29uc3Qgc3RydWN0IHFzdHIgKiwgc3RydWN0IGFmc19maWQgKixcbmZzL2Fmcy9pbnRlcm5hbC5oLTExMTktXHRcdFx0ICAgICBlbnVtIGFmc19lZGl0X2Rpcl9yZWFzb24pO1xuZnMvYWZzL2ludGVybmFsLmg6MTEyMDpleHRlcm4gdm9pZCBhZnNfZWRpdF9kaXJfcmVtb3ZlKHN0cnVjdCBhZnNfdm5vZGUgKiwgY29uc3Qgc3RydWN0IHFzdHIgKiwgZW51bSBhZnNfZWRpdF9kaXJfcmVhc29uKTtcbmZzL2Fmcy9pbnRlcm5hbC5oLTExMjEtdm9pZCBhZnNfZWRpdF9kaXJfdXBkYXRlKHN0cnVjdCBhZnNfdm5vZGUgKnZub2RlLCBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDM6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQ4ODUKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKk5hdmlnYXRpbmcgdGhlIEFGUyBDb2RlYmFzZTogQSBCcmllZiBBdWRpdCoqCgpBbHJpZ2h0LCBzbyBgYWZzX2VkaXRfZGlyX3JlbW92ZWAgaXMgKm5vdCogc3RhdGljLiBUaGF0IGltbWVkaWF0ZWx5IHBpcXVlcyBteSBpbnRlcmVzdC4gTm9uLXN0YXRpYyBpbXBsaWVzIGl0JiMzOTtzIGV4cG9zZWQgZXh0ZXJuYWxseSwgcGVyaGFwcyBjYWxsZWQgZnJvbSBvdGhlciBwYXJ0cyBvZiB0aGUgQUZTIGtlcm5lbCBtb2R1bGUsIG9yIGV2ZW4gZnJvbSB1c2VyIHNwYWNlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29udGV4dC4gVGhpcyBtZWFucyBJIHNob3VsZCBwcm9iYWJseSB1bmRlcnN0YW5kIHdobyAqY2FsbHMqIHRoaXMsIG9yIHBvdGVudGlhbGx5LCB3aG8gKmNhbiogY2FsbCB0aGlzLgoKTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgZm9yIHNvbWUgcmVsZXZhbnQgY2FsbCBzaXRlcy4gU3BlY2lmaWNhbGx5LCBJIHNob3VsZCBsb29rIGNsb3NlbHkgYXQgdGhlIGRhdGEgZmV0Y2hpbmcgbG9naWMuIEkgd2lsbCBub3cgbG9vayBvdmVyIGBhZnNfZnNfZmV0Y2hfZGF0YWAgYW5kIHNlZSBpZiB0aGUgdHdvIGFyZSBzb21laG93IHJlbGF0ZWQuIFRoZXJlIG1heSBiZSBzb21lIHZ1bG5lcmFiaWxpdHkgaW4gdGhlc2UgcGllY2VzLCBpbiBzb21lIGludGVyYWN0aW9uIHdpdGggdGhlIGVkaXRpbmcgb2YgYSBkaXJlY3RvcnkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAzOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Fmc19mc19mZXRjaF9kYXRhJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2Fmcy9maWxlLmM9MjMzPWNvbnN0IHN0cnVjdCBhZnNfb3BlcmF0aW9uX29wcyBhZnNfZmV0Y2hfZGF0YV9vcGVyYXRpb24gPSB7XG5mcy9hZnMvZmlsZS5jOjIzNDpcdC5pc3N1ZV9hZnNfcnBjXHQ9IGFmc19mc19mZXRjaF9kYXRhLFxuZnMvYWZzL2ZpbGUuYy0yMzUtXHQuaXNzdWVfeWZzX3JwY1x0PSB5ZnNfZnNfZmV0Y2hfZGF0YSxcbi0tXG5mcy9hZnMvZmlsZS5jPTI0MT1zdGF0aWMgdm9pZCBhZnNfaXNzdWVfcmVhZF9jYWxsKHN0cnVjdCBhZnNfb3BlcmF0aW9uICpvcClcbi0tXG5mcy9hZnMvZmlsZS5jLTI0OC1cdGVsc2VcbmZzL2Fmcy9maWxlLmM6MjQ5Olx0XHRhZnNfZnNfZmV0Y2hfZGF0YShvcCk7XG5mcy9hZnMvZmlsZS5jLTI1MC19XG4tLVxuZnMvYWZzL2ZzY2xpZW50LmM9NDE3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYWZzX2NhbGxfdHlwZSBhZnNfUlhGU0ZldGNoRGF0YTY0ID0ge1xuLS1cbmZzL2Fmcy9mc2NsaWVudC5jLTQyOC0gKi9cbmZzL2Fmcy9mc2NsaWVudC5jOjQyOTpzdGF0aWMgdm9pZCBhZnNfZnNfZmV0Y2hfZGF0YTY0KHN0cnVjdCBhZnNfb3BlcmF0aW9uICpvcClcbmZzL2Fmcy9mc2NsaWVudC5jLTQzMC17XG4tLVxuZnMvYWZzL2ZzY2xpZW50LmMtNDYzLSAqL1xuZnMvYWZzL2ZzY2xpZW50LmM6NDY0OnZvaWQgYWZzX2ZzX2ZldGNoX2RhdGEoc3RydWN0IGFmc19vcGVyYXRpb24gKm9wKVxuZnMvYWZzL2ZzY2xpZW50LmMtNDY1LXtcbi0tXG5mcy9hZnMvZnNjbGllbnQuYy00NzEtXHRpZiAodGVzdF9iaXQoQUZTX1NFUlZFUl9GTF9IQVNfRlM2NCwgXHUwMDI2b3AtXHUwMDNlc2VydmVyLVx1MDAzZWZsYWdzKSlcbmZzL2Fmcy9mc2NsaWVudC5jOjQ3MjpcdFx0cmV0dXJuIGFmc19mc19mZXRjaF9kYXRhNjQob3ApO1xuZnMvYWZzL2ZzY2xpZW50LmMtNDczLVxuLS1cbmZzL2Fmcy9pbnRlcm5hbC5oPTExOTA9ZXh0ZXJuIHZvaWQgYWZzX2ZzX2ZldGNoX3N0YXR1cyhzdHJ1Y3QgYWZzX29wZXJhdGlvbiAqKTtcbmZzL2Fmcy9pbnRlcm5hbC5oOjExOTE6ZXh0ZXJuIHZvaWQgYWZzX2ZzX2ZldGNoX2RhdGEoc3RydWN0IGFmc19vcGVyYXRpb24gKik7XG5mcy9hZnMvaW50ZXJuYWwuaC0xMTkyLWV4dGVybiB2b2lkIGFmc19mc19jcmVhdGVfZmlsZShzdHJ1Y3QgYWZzX29wZXJhdGlvbiAqKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDM6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzU2NjEKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiA0MzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEFGUyBGaWxlIFN5c3RlbSBPcGVyYXRpb25zKioKCk9rYXksIHNvIGBhZnNfZnNfZmV0Y2hfZGF0YWAgaXNuJiMzOTt0IHN0YXRpYy4gVGhhdCYjMzk7cyBnb29kIHRvIGtub3csIG1ha2VzIGl0IGVhc2llciB0byB0cmFjay4gTGV0JiMzOTtzIHNlZSBhYm91dCBgYWZzX21ha2Vfb3BfY2FsbGAuIEFoLCBpdCYjMzk7cyBhIHN0YXRpYyBpbmxpbmUgZnVuY3Rpb24sIHR1Y2tlZCBhd2F5IGluIGBmcy9hZnMvaW50ZXJuYWwuaGAuCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCB0byB0aGUgY29yZS4gQmFzZWQgb24gdGhpcywgSSYjMzk7bSB0aGlua2luZyB0aGUga2V5IHN5bWJvbHMgdG8gcmVhbGx5IGRpZyBpbnRvIGFyZToKLSAgIGB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWVgCi0gICBgYWZzX2lzX293bmVkX2J5X21lYAotICAgYGFmc19oYXZlX3NhbWVfb3duZXJgCi0gICBgaW5vZGVfb3duZXJfb3JfY2FwYWJsZWAKLSAgIGB2ZnNfc2V0bGVhc2VgCi0gICBgX19jaGVja19zdGlja3lgCi0gICBgc2V0YXR0cl9wcmVwYXJlYAotICAgYHZmc19kZWR1cGVfZmlsZV9yYW5nZV9vbmVgCi0gICBgYWZzX2VkaXRfZGlyX3JlbW92ZWAKLSAgIGBhZnNfZnNfZmV0Y2hfZGF0YWAKClNlZW1zIGxpa2UgYSBzb2xpZCBzdGFydGluZyBwb2ludCBmb3IgaW52ZXN0aWdhdGlvbi4gQW5kIHRoZSByZWxldmFudCBjb25maWcgaXMgYEFGU19GU2AsIG5hdHVyYWxseS4KCk5vdywgYSBxdWljayB2ZXJpZmljYXRpb24gb24gYGFmc19kaXJfZmluZF9ibG9ja2AuIFdhc24mIzM5O3QgaXQgcmVuYW1lZD8gTGV0JiMzOTtzIHNlZS4uLiBZZXAsIHRoZSBkaWZmIHNob3dzIHRoZSBvbGQgbmFtZSByZXBsYWNlZCB3aXRoIGBhZnNfZGlyX2dldF9ibG9ja2AuCkhhbmcgb24gYSBzZWMuIEh1aC4gYGFmc19kaXJfZmluZF9ibG9ja2AgKmlzKiBzdGlsbCBhcm91bmQuIExvb2tpbmcgYXQgdGhlIGRpZmYsIGl0IGxvb2tzIGxpa2UgaXQgd2FzICptb2RpZmllZCogcmF0aGVyIHRoYW4gZGVsZXRlZC4gSXQgbG9va3MgbGlrZSBgYWZzX2Rpcl9maW5kX2Jsb2NrYCBpcyBtb2RpZmllZC4KCkkgc2hvdWxkIGRlZmluaXRlbHkgYWRkIHRoYXQgdG8gdGhlIGZvY3VzIHN5bWJvbHMsIGdpdmVuIHRoZSBjaGFuZ2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAzOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Fmc19kaXJfZmluZF9ibG9jayYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9hZnMvZGlyX2VkaXQuYz0zOTM9dm9pZCBhZnNfZWRpdF9kaXJfcmVtb3ZlKHN0cnVjdCBhZnNfdm5vZGUgKnZub2RlLFxuLS1cbmZzL2Fmcy9kaXJfZWRpdC5jLTQzNS1cbmZzL2Fmcy9kaXJfZWRpdC5jOjQzNjpcdGJsb2NrID0gYWZzX2Rpcl9maW5kX2Jsb2NrKFx1MDAyNml0ZXIsIGIpO1xuZnMvYWZzL2Rpcl9lZGl0LmMtNDM3LVx0aWYgKCFibG9jaylcbi0tXG5mcy9hZnMvZGlyX2VkaXQuYy00ODAtXG5mcy9hZnMvZGlyX2VkaXQuYzo0ODE6XHRcdHBibG9jayA9IGFmc19kaXJfZmluZF9ibG9jayhcdTAwMjZpdGVyLCBwYik7XG5mcy9hZnMvZGlyX2VkaXQuYy00ODItXHRcdGlmICghcGJsb2NrKVxuLS1cbmZzL2Fmcy9kaXJfc2VhcmNoLmM9NTc9Ym9vbCBhZnNfZGlyX2luaXRfaXRlcihzdHJ1Y3QgYWZzX2Rpcl9pdGVyICppdGVyLCBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSlcbi0tXG5mcy9hZnMvZGlyX3NlYXJjaC5jLTY2LSAqL1xuZnMvYWZzL2Rpcl9zZWFyY2guYzo2Nzp1bmlvbiBhZnNfeGRyX2Rpcl9ibG9jayAqYWZzX2Rpcl9maW5kX2Jsb2NrKHN0cnVjdCBhZnNfZGlyX2l0ZXIgKml0ZXIsIHNpemVfdCBibG9jaylcbmZzL2Fmcy9kaXJfc2VhcmNoLmMtNjgte1xuLS1cbmZzL2Fmcy9kaXJfc2VhcmNoLmM9MTIwPWludCBhZnNfZGlyX3NlYXJjaF9idWNrZXQoc3RydWN0IGFmc19kaXJfaXRlciAqaXRlciwgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsXG4tLVxuZnMvYWZzL2Rpcl9zZWFyY2guYy0xMjYtXG5mcy9hZnMvZGlyX3NlYXJjaC5jOjEyNzpcdG1ldGEgPSBhZnNfZGlyX2ZpbmRfYmxvY2soaXRlciwgMCk7XG5mcy9hZnMvZGlyX3NlYXJjaC5jLTEyOC1cdGlmICghbWV0YSlcbi0tXG5mcy9hZnMvZGlyX3NlYXJjaC5jLTE0OC1cbmZzL2Fmcy9kaXJfc2VhcmNoLmM6MTQ5Olx0XHRibG9jayA9IGFmc19kaXJfZmluZF9ibG9jayhpdGVyLCBibG51bSk7XG5mcy9hZnMvZGlyX3NlYXJjaC5jLTE1MC1cdFx0aWYgKCFibG9jaylcbi0tXG5mcy9hZnMvaW50ZXJuYWwuaD0xMTI5PWJvb2wgYWZzX2Rpcl9pbml0X2l0ZXIoc3RydWN0IGFmc19kaXJfaXRlciAqaXRlciwgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUpO1xuZnMvYWZzL2ludGVybmFsLmg6MTEzMDp1bmlvbiBhZnNfeGRyX2Rpcl9ibG9jayAqYWZzX2Rpcl9maW5kX2Jsb2NrKHN0cnVjdCBhZnNfZGlyX2l0ZXIgKml0ZXIsIHNpemVfdCBibG9jayk7XG5mcy9hZnMvaW50ZXJuYWwuaC0xMTMxLWludCBhZnNfZGlyX3NlYXJjaF9idWNrZXQoc3RydWN0IGFmc19kaXJfaXRlciAqaXRlciwgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAzOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM3MTA2CgkJCQkJCQlvdXRwdXQ6IDMyMgoJCQkJCQkJdGhvdWdodHM6IDM0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQcm9wb3NlZCBQYXRjaCoqCgpPa2F5LCBzbyBgYWZzX2Rpcl9maW5kX2Jsb2NrYCAqaXMqIG5vbi1zdGF0aWMsIHdoaWNoIEkgaGFkIHRvIGNvbmZpcm0uIFdpdGggdGhhdCBjbGFyaWZpZWQsIG15IGZvY3VzIGxpc3QgZm9yIHRoaXMgcGF0Y2ggaXMgbm93IGxvY2tlZCBkb3duLiBJdCBpbmNsdWRlcyBhIGZldyBWRlMgc3ltYm9scyBJJiMzOTtsbCBiZSBzY3J1dGluaXppbmcgY2xvc2VseTogYHZmc19pbm9kZV9pc19vd25lZF9ieV9tZWAsIGBhZnNfaXNfb3duZWRfYnlfbWVgLCBgYWZzX2hhdmVfc2FtZV9vd25lcmAsIGBpbm9kZV9vd25lcl9vcl9jYXBhYmxlYCwgYHZmc19zZXRsZWFzZWAsIGBfX2NoZWNrX3N0aWNreWAsIGBzZXRhdHRyX3ByZXBhcmVgLCBgdmZzX2RlZHVwZV9maWxlX3JhbmdlX29uZWAsIGBhZnNfZWRpdF9kaXJfcmVtb3ZlYCwgYGFmc19mc19mZXRjaF9kYXRhYCwgYW5kLCBvZiBjb3Vyc2UsIHRoZSBub3cgY29uZmlybWVkIGBhZnNfZGlyX2ZpbmRfYmxvY2tgLgoKVGhlIGNydWNpYWwgYml0IGhlcmUgaXMgdGhhdCB0aGlzIHBhdGNoIGZ1bmRhbWVudGFsbHkgYWx0ZXJzIGhvdyBvd25lcnNoaXAgY2hlY2tzIGFyZSBoYW5kbGVkLCBzcGVjaWZpY2FsbHkgYnkgaW50cm9kdWNpbmcgYGlzX293bmVkX2J5X21lYCBhbmQgYGhhdmVfc2FtZV9vd25lcmAgYXMgbmV3IGlub2RlIG9wZXJhdGlvbnMuIFRoaXMgYWxsb3dzIGZpbGVzeXN0ZW1zLCBBRlMgaW4gdGhpcyBpbnN0YW5jZSwgdG8gZWZmZWN0aXZlbHkgb3ZlcnJpZGUgdGhlIHN0YW5kYXJkIFZGUyBjaGVja3MuIFRoYXQmIzM5O3MgYSBodWdlIGNoYW5nZS4gVGhleSYjMzk7cmUgaG9va2luZyBpbnRvIGtleSBWRlMgcGF0aHM6IGBjaG93bl9va2AsIGBjaGdycF9va2AsIHRoZSBjb3JlZHVtcCBoYW5kbGluZywgdGhlIG93bmVyc2hpcCBjYXBhYmlsaXRpZXMsIHRoZSBsZWFzZSBtYW5hZ2VtZW50LCBzdGlja3kgYml0IGNoZWNraW5nLCBmaWxlIGRlZHVwbGljYXRpb24uIEFsbCBvZiB0aGVzZSBwb2ludHMsIGluIHBhcnRpY3VsYXIgdGhlIGNvcmUgb3duZXJzaGlwIHN0dWZmLCBhcmUgY3JpdGljYWwgYXJlYXMuCgpUaGUgcGF0Y2ggaW5jbHVkZXMgaW1wbGVtZW50YXRpb25zIG9mIHRoZXNlIG5ldyBvcGVyYXRpb25zIGZvciBBRlMgaXRzZWxmLCBhbmQgaXQgYWRkcmVzc2VzIHNvbWUgQUZTLXNwZWNpZmljIGlzc3VlcyByZWxhdGVkIHRvIGRpcmVjdG9yeSBtYW5pcHVsYXRpb24gYW5kIGRhdGEgcmV0cmlldmFsLiBTbyBpdCYjMzk7cyBub3QganVzdCBhIFZGUyBjaGFuZ2U7IGl0JiMzOTtzIGEgc2lnbmlmaWNhbnQgbW9kaWZpY2F0aW9uIG9mIEFGUyBhbG9uZ3NpZGUgaXQuIFRoaXMgaXMgZGVmaW5pdGVseSBhIGNhbmRpZGF0ZSBmb3Igc29tZSBleHRlbnNpdmUgZnV6emluZy4gVGhlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiBib3RoIHRoZSBWRlMgYW5kIHRoZSBBRlMgbGF5ZXJzIHJlcXVpcmUgc29tZSB2ZXJ5IHJpZ29yb3VzIHRlc3RpbmcsIHRvIGF2b2lkIGFueSByZWdyZXNzaW9ucyBvciBwb3RlbnRpYWwgc2VjdXJpdHkgaG9sZXMuIFRoaXMgcmVxdWlyZXMgZ29pbmcgZGVlcCwgYW5kIGEgaGlnaCBjb25maWRlbmNlIGxldmVsIG9mIHJlc3VsdCBvbiB0aGUgZnV6emluZyB3aWxsIGJlIHJlcXVpcmVkLgoKSSBuZWVkIHRvIGNhbGwgc2V0LXJlc3VsdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAzOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtBRlNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWUmIzM0OywKICAgICYjMzQ7YWZzX2lzX293bmVkX2J5X21lJiMzNDssCiAgICAmIzM0O2Fmc19oYXZlX3NhbWVfb3duZXImIzM0OywKICAgICYjMzQ7aW5vZGVfb3duZXJfb3JfY2FwYWJsZSYjMzQ7LAogICAgJiMzNDt2ZnNfc2V0bGVhc2UmIzM0OywKICAgICYjMzQ7X19jaGVja19zdGlja3kmIzM0OywKICAgICYjMzQ7c2V0YXR0cl9wcmVwYXJlJiMzNDssCiAgICAmIzM0O3Zmc19kZWR1cGVfZmlsZV9yYW5nZV9vbmUmIzM0OywKICAgICYjMzQ7YWZzX2VkaXRfZGlyX3JlbW92ZSYjMzQ7LAogICAgJiMzNDthZnNfZnNfZmV0Y2hfZGF0YSYjMzQ7LAogICAgJiMzNDthZnNfZGlyX2ZpbmRfYmxvY2smIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBuZXcgaW5vZGUgb3BlcmF0aW9ucyBgaXNfb3duZWRfYnlfbWVgIGFuZCBgaGF2ZV9zYW1lX293bmVyYCB0byBhbGxvdyBmaWxlc3lzdGVtcyAobGlrZSBBRlMpIHRvIG92ZXJyaWRlIGRlZmF1bHQgVkZTIG93bmVyc2hpcCBjaGVja3MuIEl0IG1vZGlmaWVzIGNvcmUgVkZTIHBhdGhzIChlLmcuLCBgY2hvd25fb2tgLCBgY2hncnBfb2tgLCBgY29yZWR1bXBfZmlsZWAsIGBpbm9kZV9vd25lcl9vcl9jYXBhYmxlYCwgYHZmc19zZXRsZWFzZWAsIGBtYXlfZm9sbG93X2xpbmtgLCBgbWF5X2NyZWF0ZV9pbl9zdGlja3lgLCBgX19jaGVja19zdGlja3lgLCBgbWF5X2RlZHVwZV9maWxlYCkgdG8gdXNlIHRoZXNlIG5ldyBvcGVyYXRpb25zLiBJdCBhbHNvIGltcGxlbWVudHMgdGhlc2Ugb3BlcmF0aW9ucyBmb3IgQUZTIGFuZCBmaXhlcyBzb21lIEFGUy1zcGVjaWZpYyBidWdzIGluIGRpcmVjdG9yeSBlZGl0aW5nIGFuZCBkYXRhIGZldGNoaW5nLiBUaGVzZSBhcmUgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHRoZSBjb3JlIFZGUyBhbmQgQUZTLCBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgb3Igc2VjdXJpdHkgaXNzdWVzIGFyZSBpbnRyb2R1Y2VkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtBRlNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWUmIzM0OywKICAgICYjMzQ7YWZzX2lzX293bmVkX2J5X21lJiMzNDssCiAgICAmIzM0O2Fmc19oYXZlX3NhbWVfb3duZXImIzM0OywKICAgICYjMzQ7aW5vZGVfb3duZXJfb3JfY2FwYWJsZSYjMzQ7LAogICAgJiMzNDt2ZnNfc2V0bGVhc2UmIzM0OywKICAgICYjMzQ7X19jaGVja19zdGlja3kmIzM0OywKICAgICYjMzQ7c2V0YXR0cl9wcmVwYXJlJiMzNDssCiAgICAmIzM0O3Zmc19kZWR1cGVfZmlsZV9yYW5nZV9vbmUmIzM0OywKICAgICYjMzQ7YWZzX2VkaXRfZGlyX3JlbW92ZSYjMzQ7LAogICAgJiMzNDthZnNfZnNfZmV0Y2hfZGF0YSYjMzQ7LAogICAgJiMzNDthZnNfZGlyX2ZpbmRfYmxvY2smIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBuZXcgaW5vZGUgb3BlcmF0aW9ucyBgaXNfb3duZWRfYnlfbWVgIGFuZCBgaGF2ZV9zYW1lX293bmVyYCB0byBhbGxvdyBmaWxlc3lzdGVtcyAobGlrZSBBRlMpIHRvIG92ZXJyaWRlIGRlZmF1bHQgVkZTIG93bmVyc2hpcCBjaGVja3MuIEl0IG1vZGlmaWVzIGNvcmUgVkZTIHBhdGhzIChlLmcuLCBgY2hvd25fb2tgLCBgY2hncnBfb2tgLCBgY29yZWR1bXBfZmlsZWAsIGBpbm9kZV9vd25lcl9vcl9jYXBhYmxlYCwgYHZmc19zZXRsZWFzZWAsIGBtYXlfZm9sbG93X2xpbmtgLCBgbWF5X2NyZWF0ZV9pbl9zdGlja3lgLCBgX19jaGVja19zdGlja3lgLCBgbWF5X2RlZHVwZV9maWxlYCkgdG8gdXNlIHRoZXNlIG5ldyBvcGVyYXRpb25zLiBJdCBhbHNvIGltcGxlbWVudHMgdGhlc2Ugb3BlcmF0aW9ucyBmb3IgQUZTIGFuZCBmaXhlcyBzb21lIEFGUy1zcGVjaWZpYyBidWdzIGluIGRpcmVjdG9yeSBlZGl0aW5nIGFuZCBkYXRhIGZldGNoaW5nLiBUaGVzZSBhcmUgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHRoZSBjb3JlIFZGUyBhbmQgQUZTLCBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgb3Igc2VjdXJpdHkgaXNzdWVzIGFyZSBpbnRyb2R1Y2VkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMjhUMDM6MzM6MDcuNzk5Mzc3OTk0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA4MzU4NTc5OTA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkFGU19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZmc19pbm9kZV9pc19vd25lZF9ieV9tZVwiLFxuICAgIFwiYWZzX2lzX293bmVkX2J5X21lXCIsXG4gICAgXCJhZnNfaGF2ZV9zYW1lX293bmVyXCIsXG4gICAgXCJpbm9kZV9vd25lcl9vcl9jYXBhYmxlXCIsXG4gICAgXCJ2ZnNfc2V0bGVhc2VcIixcbiAgICBcIl9fY2hlY2tfc3RpY2t5XCIsXG4gICAgXCJzZXRhdHRyX3ByZXBhcmVcIixcbiAgICBcInZmc19kZWR1cGVfZmlsZV9yYW5nZV9vbmVcIixcbiAgICBcImFmc19lZGl0X2Rpcl9yZW1vdmVcIixcbiAgICBcImFmc19mc19mZXRjaF9kYXRhXCIsXG4gICAgXCJhZnNfZGlyX2ZpbmRfYmxvY2tcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIG5ldyBpbm9kZSBvcGVyYXRpb25zIGBpc19vd25lZF9ieV9tZWAgYW5kIGBoYXZlX3NhbWVfb3duZXJgIHRvIGFsbG93IGZpbGVzeXN0ZW1zIChsaWtlIEFGUykgdG8gb3ZlcnJpZGUgZGVmYXVsdCBWRlMgb3duZXJzaGlwIGNoZWNrcy4gSXQgbW9kaWZpZXMgY29yZSBWRlMgcGF0aHMgKGUuZy4sIGBjaG93bl9va2AsIGBjaGdycF9va2AsIGBjb3JlZHVtcF9maWxlYCwgYGlub2RlX293bmVyX29yX2NhcGFibGVgLCBgdmZzX3NldGxlYXNlYCwgYG1heV9mb2xsb3dfbGlua2AsIGBtYXlfY3JlYXRlX2luX3N0aWNreWAsIGBfX2NoZWNrX3N0aWNreWAsIGBtYXlfZGVkdXBlX2ZpbGVgKSB0byB1c2UgdGhlc2UgbmV3IG9wZXJhdGlvbnMuIEl0IGFsc28gaW1wbGVtZW50cyB0aGVzZSBvcGVyYXRpb25zIGZvciBBRlMgYW5kIGZpeGVzIHNvbWUgQUZTLXNwZWNpZmljIGJ1Z3MgaW4gZGlyZWN0b3J5IGVkaXRpbmcgYW5kIGRhdGEgZmV0Y2hpbmcuIFRoZXNlIGFyZSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gdGhlIGNvcmUgVkZTIGFuZCBBRlMsIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBvciBzZWN1cml0eSBpc3N1ZXMgYXJlIGludHJvZHVjZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAzOjMzOjA3Ljc5OTM4NjU1NFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY3MDY1NzAxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDc2YjlmNjA2ZWFlMmIwOWUwOTAxZDI0ODgzMmVkNWMxMzYwMGY1NDBcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBKdWwgMjggMDM6MzM6MDUgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy92ZnMucnN0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy92ZnMucnN0XFxuaW5kZXggN2M3NTMxNDhhZjg4ODMuLjg5MzQxOWUwMDNlYWY3IDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZzLnJzdFxcbisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZzLnJzdFxcbkBAIC00NDUsNiArNDQ1LDkgQEAgQXMgb2Yga2VybmVsIDIuNi4yMiwgdGhlIGZvbGxvd2luZyBtZW1iZXJzIGFyZSBkZWZpbmVkOlxcbiBcXHRcXHRcXHRcXHQgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgZmlsZV9rYXR0ciAqZmEpO1xcbiBcXHRcXHRpbnQgKCpmaWxlYXR0cl9nZXQpKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGZpbGVfa2F0dHIgKmZhKTtcXG4gXFx0ICAgICAgICBzdHJ1Y3Qgb2Zmc2V0X2N0eCAqKCpnZXRfb2Zmc2V0X2N0eCkoc3RydWN0IGlub2RlICppbm9kZSk7XFxuK1xcdFxcdGludCAoKmlzX293bmVkX2J5X21lKShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSk7XFxuK1xcdFxcdGludCAoKmhhdmVfc2FtZV9vd25lcikoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpO1xcbiBcXHR9O1xcbiBcXG4gQWdhaW4sIGFsbCBtZXRob2RzIGFyZSBjYWxsZWQgd2l0aG91dCBhbnkgbG9ja3MgYmVpbmcgaGVsZCwgdW5sZXNzXFxuQEAgLTYzNCw2ICs2MzcsMjQgQEAgb3RoZXJ3aXNlIG5vdGVkLlxcbiAgICAgICAgIGZpbGVzeXN0ZW0gbXVzdCBkZWZpbmUgdGhpcyBvcGVyYXRpb24gdG8gdXNlXFxuICAgICAgICAgc2ltcGxlX29mZnNldF9kaXJfb3BlcmF0aW9ucy5cXG4gXFxuK2BgaXNfb3duZWRfYnlfbWVgYFxcbitcXHRjYWxsZWQgdG8gZGV0ZXJtaW5lIGlmIHRoZSBmaWxlIGNhbiBiZSBjb25zaWRlcmVkIHRvIGJlICdvd25lZCcgYnlcXG4rXFx0dGhlIG93bmVyIG9mIHRoZSBwcm9jZXNzIG9yIGlmIHRoZSBwcm9jZXNzIGhhcyBhIHRva2VuIHRoYXQgZ3JhbnRzXFxuK1xcdGl0IG93bmVyc2hpcCBwcml2aWxlZ2VzLiAgSWYgdW5zZXQsIHRoZSBkZWZhdWx0IGlzIHRvIGNvbXBhcmUgaV91aWRcXG4rXFx0dG8gY3VycmVudF9mc3VpZCgpIC0gYnV0IHRoaXMgbWF5IGdpdmUgaW5jb3JyZWN0IHJlc3VsdHMgZm9yIHNvbWVcXG4rXFx0bmV0d29yayBvciBwbHVnLWluIGJsb2NrIGZpbGVzeXN0ZW1zLiAgRm9yIGV4YW1wbGUsIEFGUyBkZXRlcm1pbmVzXFxuK1xcdG93bmVyc2hpcCBlbnRpcmVseSBhY2NvcmRpbmcgdG8gYW4gb2J0YWluZWQgdG9rZW4gYW5kIGlfdWlkIG1heSBub3RcXG4rXFx0ZXZlbiBiZSBmcm9tIHRoZSBzYW1lIElEIHNwYWNlIGFzIGN1cnJlbnRfdWlkKCkuXFxuK1xcbitgYGhhdmVfc2FtZV9vd25lcmBgXFxuK1xcdGNhbGxlZCB0byBkZXRlcm1pbmUgaWYgYW4gaW5vZGUgaGFzIHRoZSBzYW1lIG93bmVyIGFzIGl0cyBpbW1lZGlhdGVcXG4rXFx0cGFyZW50IG9uIHRoZSBwYXRoIHdhbGtlZC4gIElmIHVuc2V0LCB0aGUgZGVmYXVsdCBpcyB0byBzaW1wbHlcXG4rXFx0Y29tcGFyZSB0aGUgaV91aWQgb2YgYm90aC4gIEZvciBleGFtcGxlLCBBRlMgY29tcGFyZXMgdGhlIG93bmVyIElEc1xcbitcXHRvZiBib3RoIC0gYnV0IHRoZXNlIGFyZSBhIDY0LWJpdCB2YWx1ZXMgb24gc29tZSB2YXJpYW50cyB0aGF0IG1pZ2h0XFxuK1xcdG5vdCBmaXQgaW50byBhIGt1aWRfdCBhbmQgY2lmcyBoYXMgR1VJRHMgdGhhdCBjYW5ub3QgYmUgY29tcGFyZWQgdG9cXG4rXFx0a3VpZF90LlxcbitcXG4rXFxuIFRoZSBBZGRyZXNzIFNwYWNlIE9iamVjdFxcbiA9PT09PT09PT09PT09PT09PT09PT09PT1cXG4gXFxuZGlmZiAtLWdpdCBhL2ZzL2Fmcy9kaXIuYyBiL2ZzL2Fmcy9kaXIuY1xcbmluZGV4IDZkZjU2ZmU5MTYzZmQ3Li5lZTJmNWVjMGIyYzY3ZCAxMDA2NDRcXG4tLS0gYS9mcy9hZnMvZGlyLmNcXG4rKysgYi9mcy9hZnMvZGlyLmNcXG5AQCAtNjksNiArNjksOCBAQCBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBhZnNfZGlyX2lub2RlX29wZXJhdGlvbnMgPSB7XFxuIFxcdC5wZXJtaXNzaW9uXFx0PSBhZnNfcGVybWlzc2lvbixcXG4gXFx0LmdldGF0dHJcXHQ9IGFmc19nZXRhdHRyLFxcbiBcXHQuc2V0YXR0clxcdD0gYWZzX3NldGF0dHIsXFxuK1xcdC5pc19vd25lZF9ieV9tZVxcdD0gYWZzX2lzX293bmVkX2J5X21lLFxcbitcXHQuaGF2ZV9zYW1lX293bmVyID0gYWZzX2hhdmVfc2FtZV9vd25lcixcXG4gfTtcXG4gXFxuIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgYWZzX2Rpcl9hb3BzID0ge1xcbmRpZmYgLS1naXQgYS9mcy9hZnMvZGlyX2VkaXQuYyBiL2ZzL2Fmcy9kaXJfZWRpdC5jXFxuaW5kZXggZmQzYWE5Zjk3Y2U2NGMuLmMzMTMwMzA1OTQ0NGFkIDEwMDY0NFxcbi0tLSBhL2ZzL2Fmcy9kaXJfZWRpdC5jXFxuKysrIGIvZnMvYWZzL2Rpcl9lZGl0LmNcXG5AQCAtNDE1LDcgKzQxNSw3IEBAIHZvaWQgYWZzX2VkaXRfZGlyX3JlbW92ZShzdHJ1Y3QgYWZzX3Zub2RlICp2bm9kZSxcXG4gXFx0aWYgKCFhZnNfZGlyX2luaXRfaXRlcihcXHUwMDI2aXRlciwgbmFtZSkpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuLVxcdG1ldGEgPSBhZnNfZGlyX2ZpbmRfYmxvY2soXFx1MDAyNml0ZXIsIDApO1xcbitcXHRtZXRhID0gYWZzX2Rpcl9nZXRfYmxvY2soXFx1MDAyNml0ZXIsIDApO1xcbiBcXHRpZiAoIW1ldGEpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuQEAgLTQ0Miw3ICs0NDIsNyBAQCB2b2lkIGFmc19lZGl0X2Rpcl9yZW1vdmUoc3RydWN0IGFmc192bm9kZSAqdm5vZGUsXFxuIFxcdC8qIENoZWNrIGFuZCBjbGVhciB0aGUgZW50cnkuICovXFxuIFxcdGRlID0gXFx1MDAyNmJsb2NrLVxcdTAwM2VkaXJlbnRzW3Nsb3RdO1xcbiBcXHRpZiAoZGUtXFx1MDAzZXUudmFsaWQgIT0gMSlcXG4tXFx0XFx0Z290byBlcnJvcl91bm1hcDtcXG4rXFx0XFx0Z290byBlcnJvcjtcXG4gXFxuIFxcdHRyYWNlX2Fmc19lZGl0X2Rpcih2bm9kZSwgd2h5LCBhZnNfZWRpdF9kaXJfZGVsZXRlLCBiLCBzbG90LFxcbiBcXHRcXHRcXHQgICBudG9obChkZS1cXHUwMDNldS52bm9kZSksIG50b2hsKGRlLVxcdTAwM2V1LnVuaXF1ZSksXFxuQEAgLTQ1OCw3ICs0NTgsNiBAQCB2b2lkIGFmc19lZGl0X2Rpcl9yZW1vdmUoc3RydWN0IGFmc192bm9kZSAqdm5vZGUsXFxuIFxcdC8qIENsZWFyIHRoZSBjb25zdGl0dWVudCBlbnRyaWVzLiAqL1xcbiBcXHRuZXh0ID0gZGUtXFx1MDAzZXUuaGFzaF9uZXh0O1xcbiBcXHRtZW1zZXQoZGUsIDAsIHNpemVvZigqZGUpICogaXRlci5ucl9zbG90cyk7XFxuLVxcdGt1bm1hcF9sb2NhbChibG9jayk7XFxuIFxcbiBcXHQvKiBBZGp1c3QgdGhlIGhhc2ggY2hhaW46IGlmIGl0ZXItXFx1MDAzZXByZXZfZW50cnkgaXMgMCwgdGhlIGhhc2h0YWJsZSBoZWFkXFxuIFxcdCAqIGluZGV4IGlzIHByZXZpb3VzOyBvdGhlcndpc2UgaXQncyBzbG90IG51bWJlciBvZiB0aGUgcHJldmlvdXMgZW50cnkuXFxuQEAgLTQ4NSw3ICs0ODQsNiBAQCB2b2lkIGFmc19lZGl0X2Rpcl9yZW1vdmUoc3RydWN0IGFmc192bm9kZSAqdm5vZGUsXFxuIFxcdFxcdHBkZSA9IFxcdTAwMjZwYmxvY2stXFx1MDAzZWRpcmVudHNbcHNdO1xcbiBcXHRcXHRwcmV2X25leHQgPSBwZGUtXFx1MDAzZXUuaGFzaF9uZXh0O1xcbiBcXHRcXHRpZiAocHJldl9uZXh0ICE9IGh0b25zKGVudHJ5KSkge1xcbi1cXHRcXHRcXHRrdW5tYXBfbG9jYWwocGJsb2NrKTtcXG4gXFx0XFx0XFx0cHJfd2FybihcXFwiJWxseDolbGx4OiV4OiBub3QgcHJldiBpbiBjaGFpbiBiPSV4IHA9JXgsJXggZT0leCAlKnNcXFwiLFxcbiBcXHRcXHRcXHRcXHR2bm9kZS1cXHUwMDNlZmlkLnZpZCwgdm5vZGUtXFx1MDAzZWZpZC52bm9kZSwgdm5vZGUtXFx1MDAzZWZpZC51bmlxdWUsXFxuIFxcdFxcdFxcdFxcdGl0ZXIuYnVja2V0LCBpdGVyLnByZXZfZW50cnksIHByZXZfbmV4dCwgZW50cnksXFxuQEAgLTQ5Myw3ICs0OTEsNiBAQCB2b2lkIGFmc19lZGl0X2Rpcl9yZW1vdmUoc3RydWN0IGFmc192bm9kZSAqdm5vZGUsXFxuIFxcdFxcdFxcdGdvdG8gZXJyb3I7XFxuIFxcdFxcdH1cXG4gXFx0XFx0cGRlLVxcdTAwM2V1Lmhhc2hfbmV4dCA9IG5leHQ7XFxuLVxcdFxcdGt1bm1hcF9sb2NhbChwYmxvY2spO1xcbiBcXHR9XFxuIFxcbiBcXHRuZXRmc19zaW5nbGVfbWFya19pbm9kZV9kaXJ0eShcXHUwMDI2dm5vZGUtXFx1MDAzZW5ldGZzLmlub2RlKTtcXG5AQCAtNTAzLDE4ICs1MDAsMTYgQEAgdm9pZCBhZnNfZWRpdF9kaXJfcmVtb3ZlKHN0cnVjdCBhZnNfdm5vZGUgKnZub2RlLFxcbiBcXHRfZGVidWcoXFxcIlJlbW92ZSAlcyBmcm9tICV1WyV1XVxcXCIsIG5hbWUtXFx1MDAzZW5hbWUsIGIsIHNsb3QpO1xcbiBcXG4gb3V0X3VubWFwOlxcbitcXHRhZnNfZGlyX2VuZF9pdGVyKFxcdTAwMjZpdGVyKTtcXG4gXFx0a3VubWFwX2xvY2FsKG1ldGEpO1xcbiBcXHRfbGVhdmUoXFxcIlxcXCIpO1xcbiBcXHRyZXR1cm47XFxuIFxcbiBhbHJlYWR5X2ludmFsaWRhdGVkOlxcbi1cXHRrdW5tYXBfbG9jYWwoYmxvY2spO1xcbiBcXHR0cmFjZV9hZnNfZWRpdF9kaXIodm5vZGUsIHdoeSwgYWZzX2VkaXRfZGlyX2RlbGV0ZV9pbnZhbCxcXG4gXFx0XFx0XFx0ICAgMCwgMCwgMCwgMCwgbmFtZS1cXHUwMDNlbmFtZSk7XFxuIFxcdGdvdG8gb3V0X3VubWFwO1xcbiBcXG4tZXJyb3JfdW5tYXA6XFxuLVxcdGt1bm1hcF9sb2NhbChibG9jayk7XFxuIGVycm9yOlxcbiBcXHR0cmFjZV9hZnNfZWRpdF9kaXIodm5vZGUsIHdoeSwgYWZzX2VkaXRfZGlyX2RlbGV0ZV9lcnJvcixcXG4gXFx0XFx0XFx0ICAgMCwgMCwgMCwgMCwgbmFtZS1cXHUwMDNlbmFtZSk7XFxuZGlmZiAtLWdpdCBhL2ZzL2Fmcy9kaXJfc2VhcmNoLmMgYi9mcy9hZnMvZGlyX3NlYXJjaC5jXFxuaW5kZXggMTA0NDExYzA2OTJmNTcuLjExZWJkZmZmY2IxZDM4IDEwMDY0NFxcbi0tLSBhL2ZzL2Fmcy9kaXJfc2VhcmNoLmNcXG4rKysgYi9mcy9hZnMvZGlyX3NlYXJjaC5jXFxuQEAgLTc1LDEwICs3NSw3IEBAIHVuaW9uIGFmc194ZHJfZGlyX2Jsb2NrICphZnNfZGlyX2ZpbmRfYmxvY2soc3RydWN0IGFmc19kaXJfaXRlciAqaXRlciwgc2l6ZV90IGJsXFxuIFxcbiBcXHRfZW50ZXIoXFxcIiV6eCwlZFxcXCIsIGJsb2NrLCBzbG90KTtcXG4gXFxuLVxcdGlmIChpdGVyLVxcdTAwM2VibG9jaykge1xcbi1cXHRcXHRrdW5tYXBfbG9jYWwoaXRlci1cXHUwMDNlYmxvY2spO1xcbi1cXHRcXHRpdGVyLVxcdTAwM2VibG9jayA9IE5VTEw7XFxuLVxcdH1cXG4rXFx0YWZzX2Rpcl9lbmRfaXRlcihpdGVyKTtcXG4gXFxuIFxcdGlmIChkdm5vZGUtXFx1MDAzZWRpcmVjdG9yeV9zaXplIFxcdTAwM2MgYmxlbmQpXFxuIFxcdFxcdGdvdG8gZmFpbDtcXG5AQCAtMTczLDEyICsxNzAsOCBAQCBpbnQgYWZzX2Rpcl9zZWFyY2hfYnVja2V0KHN0cnVjdCBhZnNfZGlyX2l0ZXIgKml0ZXIsIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lLFxcbiBcXG4gXFx0cmV0ID0gLUVOT0VOVDtcXG4gZm91bmQ6XFxuLVxcdGlmIChpdGVyLVxcdTAwM2VibG9jaykge1xcbi1cXHRcXHRrdW5tYXBfbG9jYWwoaXRlci1cXHUwMDNlYmxvY2spO1xcbi1cXHRcXHRpdGVyLVxcdTAwM2VibG9jayA9IE5VTEw7XFxuLVxcdH1cXG4tXFxuIGJhZDpcXG4rXFx0YWZzX2Rpcl9lbmRfaXRlcihpdGVyKTtcXG4gXFx0aWYgKHJldCA9PSAtRVNUQUxFKVxcbiBcXHRcXHRhZnNfaW52YWxpZGF0ZV9kaXIoaXRlci1cXHUwMDNlZHZub2RlLCBhZnNfZGlyX2ludmFsaWRfaXRlcl9zdGFsZSk7XFxuIFxcdF9sZWF2ZShcXFwiID0gJWRcXFwiLCByZXQpO1xcbmRpZmYgLS1naXQgYS9mcy9hZnMvZmlsZS5jIGIvZnMvYWZzL2ZpbGUuY1xcbmluZGV4IDA0Njc3NDJiZmVlZTM0Li5iYTQ0NDkzY2NhZjZlZSAxMDA2NDRcXG4tLS0gYS9mcy9hZnMvZmlsZS5jXFxuKysrIGIvZnMvYWZzL2ZpbGUuY1xcbkBAIC00OSw2ICs0OSw4IEBAIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGFmc19maWxlX2lub2RlX29wZXJhdGlvbnMgPSB7XFxuIFxcdC5nZXRhdHRyXFx0PSBhZnNfZ2V0YXR0cixcXG4gXFx0LnNldGF0dHJcXHQ9IGFmc19zZXRhdHRyLFxcbiBcXHQucGVybWlzc2lvblxcdD0gYWZzX3Blcm1pc3Npb24sXFxuK1xcdC5pc19vd25lZF9ieV9tZVxcdD0gYWZzX2lzX293bmVkX2J5X21lLFxcbitcXHQuaGF2ZV9zYW1lX293bmVyID0gYWZzX2hhdmVfc2FtZV9vd25lcixcXG4gfTtcXG4gXFxuIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgYWZzX2ZpbGVfYW9wcyA9IHtcXG5kaWZmIC0tZ2l0IGEvZnMvYWZzL2ZzY2xpZW50LmMgYi9mcy9hZnMvZnNjbGllbnQuY1xcbmluZGV4IGEyZmZkNjA4ODlmODlkLi4xYTNmMTg2YTZhMTEzZCAxMDA2NDRcXG4tLS0gYS9mcy9hZnMvZnNjbGllbnQuY1xcbisrKyBiL2ZzL2Fmcy9mc2NsaWVudC5jXFxuQEAgLTQ3Nyw2ICs0NzcsOSBAQCB2b2lkIGFmc19mc19mZXRjaF9kYXRhKHN0cnVjdCBhZnNfb3BlcmF0aW9uICpvcClcXG4gXFx0aWYgKCFjYWxsKVxcbiBcXHRcXHRyZXR1cm4gYWZzX29wX25vbWVtKG9wKTtcXG4gXFxuK1xcdGlmIChvcC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBBRlNfT1BFUkFUSU9OX0FTWU5DKVxcbitcXHRcXHRjYWxsLVxcdTAwM2Vhc3luYyA9IHRydWU7XFxuK1xcbiBcXHQvKiBtYXJzaGFsbCB0aGUgcGFyYW1ldGVycyAqL1xcbiBcXHRicCA9IGNhbGwtXFx1MDAzZXJlcXVlc3Q7XFxuIFxcdGJwWzBdID0gaHRvbmwoRlNGRVRDSERBVEEpO1xcbkBAIC00ODQsNyArNDg3LDcgQEAgdm9pZCBhZnNfZnNfZmV0Y2hfZGF0YShzdHJ1Y3QgYWZzX29wZXJhdGlvbiAqb3ApXFxuIFxcdGJwWzJdID0gaHRvbmwodnAtXFx1MDAzZWZpZC52bm9kZSk7XFxuIFxcdGJwWzNdID0gaHRvbmwodnAtXFx1MDAzZWZpZC51bmlxdWUpO1xcbiBcXHRicFs0XSA9IGh0b25sKGxvd2VyXzMyX2JpdHMoc3VicmVxLVxcdTAwM2VzdGFydCArIHN1YnJlcS1cXHUwMDNldHJhbnNmZXJyZWQpKTtcXG4tXFx0YnBbNV0gPSBodG9ubChsb3dlcl8zMl9iaXRzKHN1YnJlcS1cXHUwMDNlbGVuICAgKyBzdWJyZXEtXFx1MDAzZXRyYW5zZmVycmVkKSk7XFxuK1xcdGJwWzVdID0gaHRvbmwobG93ZXJfMzJfYml0cyhzdWJyZXEtXFx1MDAzZWxlbiAgIC0gc3VicmVxLVxcdTAwM2V0cmFuc2ZlcnJlZCkpO1xcbiBcXG4gXFx0Y2FsbC1cXHUwMDNlZmlkID0gdnAtXFx1MDAzZWZpZDtcXG4gXFx0dHJhY2VfYWZzX21ha2VfZnNfY2FsbChjYWxsLCBcXHUwMDI2dnAtXFx1MDAzZWZpZCk7XFxuZGlmZiAtLWdpdCBhL2ZzL2Fmcy9pbm9kZS5jIGIvZnMvYWZzL2lub2RlLmNcXG5pbmRleCAxNGYzOWE5YmVhNmNmZS4uYWY4NWE4OGQ5NDNkZDEgMTAwNjQ0XFxuLS0tIGEvZnMvYWZzL2lub2RlLmNcXG4rKysgYi9mcy9hZnMvaW5vZGUuY1xcbkBAIC05MSw2ICs5MSw3IEBAIHN0YXRpYyBpbnQgYWZzX2lub2RlX2luaXRfZnJvbV9zdGF0dXMoc3RydWN0IGFmc19vcGVyYXRpb24gKm9wLFxcbiBcXHRpbm9kZS1cXHUwMDNlaV9mbGFncyB8PSBTX05PQVRJTUU7XFxuIFxcdGlub2RlLVxcdTAwM2VpX3VpZCA9IG1ha2Vfa3VpZChcXHUwMDI2aW5pdF91c2VyX25zLCBzdGF0dXMtXFx1MDAzZW93bmVyKTtcXG4gXFx0aW5vZGUtXFx1MDAzZWlfZ2lkID0gbWFrZV9rZ2lkKFxcdTAwMjZpbml0X3VzZXJfbnMsIHN0YXR1cy1cXHUwMDNlZ3JvdXApO1xcbitcXHRpbm9kZS1cXHUwMDNlaV9vcGZsYWdzIHw9IElPUF9PV05FUlNISVBfT1ZFUlJJREU7XFxuIFxcdHNldF9ubGluayhcXHUwMDI2dm5vZGUtXFx1MDAzZW5ldGZzLmlub2RlLCBzdGF0dXMtXFx1MDAzZW5saW5rKTtcXG4gXFxuIFxcdGlfc2l6ZV93cml0ZShpbm9kZSwgc3RhdHVzLVxcdTAwM2VzaXplKTtcXG5kaWZmIC0tZ2l0IGEvZnMvYWZzL2ludGVybmFsLmggYi9mcy9hZnMvaW50ZXJuYWwuaFxcbmluZGV4IDYwMWYwMWU1YzE1ZmNjLi40MGU1Y2U2MTk0NzYyMSAxMDA2NDRcXG4tLS0gYS9mcy9hZnMvaW50ZXJuYWwuaFxcbisrKyBiL2ZzL2Fmcy9pbnRlcm5hbC5oXFxuQEAgLTExMzMsNiArMTEzMywxNCBAQCBpbnQgYWZzX2Rpcl9zZWFyY2hfYnVja2V0KHN0cnVjdCBhZnNfZGlyX2l0ZXIgKml0ZXIsIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lLFxcbiBpbnQgYWZzX2Rpcl9zZWFyY2goc3RydWN0IGFmc192bm9kZSAqZHZub2RlLCBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSxcXG4gXFx0XFx0ICAgc3RydWN0IGFmc19maWQgKl9maWQsIGFmc19kYXRhdmVyc2lvbl90ICpfZGlyX3ZlcnNpb24pO1xcbiBcXG4rc3RhdGljIGlubGluZSB2b2lkIGFmc19kaXJfZW5kX2l0ZXIoc3RydWN0IGFmc19kaXJfaXRlciAqaXRlcilcXG4re1xcbitcXHRpZiAoaXRlci1cXHUwMDNlYmxvY2spIHtcXG4rXFx0XFx0a3VubWFwX2xvY2FsKGl0ZXItXFx1MDAzZWJsb2NrKTtcXG4rXFx0XFx0aXRlci1cXHUwMDNlYmxvY2sgPSBOVUxMO1xcbitcXHR9XFxuK31cXG4rXFxuIC8qXFxuICAqIGRpcl9zaWxseS5jXFxuICAqL1xcbkBAIC0xNDIxLDcgKzE0MjksNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgYWZzX21ha2Vfb3BfY2FsbChzdHJ1Y3QgYWZzX29wZXJhdGlvbiAqb3AsIHN0cnVjdCBhZnNfY2FsbCAqY1xcbiB7XFxuIFxcdHN0cnVjdCBhZnNfYWRkcl9saXN0ICphbGlzdCA9IG9wLVxcdTAwM2Vlc3RhdGUtXFx1MDAzZWFkZHJlc3NlcztcXG4gXFxuLVxcdG9wLVxcdTAwM2VjYWxsXFx0PSBjYWxsO1xcbitcXHRvcC1cXHUwMDNlY2FsbFxcdD0gYWZzX2dldF9jYWxsKGNhbGwsIGFmc19jYWxsX3RyYWNlX2dldCk7XFxuIFxcdG9wLVxcdTAwM2V0eXBlXFx0PSBjYWxsLVxcdTAwM2V0eXBlO1xcbiBcXHRjYWxsLVxcdTAwM2VvcFxcdD0gb3A7XFxuIFxcdGNhbGwtXFx1MDAzZWtleVxcdD0gb3AtXFx1MDAzZWtleTtcXG5AQCAtMTQyOSw2ICsxNDM3LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGFmc19tYWtlX29wX2NhbGwoc3RydWN0IGFmc19vcGVyYXRpb24gKm9wLCBzdHJ1Y3QgYWZzX2NhbGwgKmNcXG4gXFx0Y2FsbC1cXHUwMDNlcGVlclxcdD0gcnhycGNfa2VybmVsX2dldF9wZWVyKGFsaXN0LVxcdTAwM2VhZGRyc1tvcC1cXHUwMDNlYWRkcl9pbmRleF0ucGVlcik7XFxuIFxcdGNhbGwtXFx1MDAzZXNlcnZpY2VfaWQgPSBvcC1cXHUwMDNlc2VydmVyLVxcdTAwM2VzZXJ2aWNlX2lkO1xcbiBcXHRhZnNfbWFrZV9jYWxsKGNhbGwsIGdmcCk7XFxuK1xcdGFmc19wdXRfY2FsbChjYWxsKTtcXG4gfVxcbiBcXG4gc3RhdGljIGlubGluZSB2b2lkIGFmc19leHRyYWN0X2JlZ2luKHN0cnVjdCBhZnNfY2FsbCAqY2FsbCwgdm9pZCAqYnVmLCBzaXplX3Qgc2l6ZSlcXG5AQCAtMTUzMCw2ICsxNTM5LDkgQEAgZXh0ZXJuIHN0cnVjdCBrZXkgKmFmc19yZXF1ZXN0X2tleShzdHJ1Y3QgYWZzX2NlbGwgKik7XFxuIGV4dGVybiBzdHJ1Y3Qga2V5ICphZnNfcmVxdWVzdF9rZXlfcmN1KHN0cnVjdCBhZnNfY2VsbCAqKTtcXG4gZXh0ZXJuIGludCBhZnNfY2hlY2tfcGVybWl0KHN0cnVjdCBhZnNfdm5vZGUgKiwgc3RydWN0IGtleSAqLCBhZnNfYWNjZXNzX3QgKik7XFxuIGV4dGVybiBpbnQgYWZzX3Blcm1pc3Npb24oc3RydWN0IG1udF9pZG1hcCAqLCBzdHJ1Y3QgaW5vZGUgKiwgaW50KTtcXG4raW50IGFmc19pc19vd25lZF9ieV9tZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSk7XFxuK2ludCBhZnNfaGF2ZV9zYW1lX293bmVyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlMSxcXG4rXFx0XFx0XFx0c3RydWN0IGlub2RlICppbm9kZTIpO1xcbiBleHRlcm4gdm9pZCBfX2V4aXQgYWZzX2NsZWFuX3VwX3Blcm1pdF9jYWNoZSh2b2lkKTtcXG4gXFxuIC8qXFxuZGlmZiAtLWdpdCBhL2ZzL2Fmcy9zZWN1cml0eS5jIGIvZnMvYWZzL3NlY3VyaXR5LmNcXG5pbmRleCA2ZDAwZDYyYTY1ZWRmNi4uNzA5MmY1YWNkY2Q2YWMgMTAwNjQ0XFxuLS0tIGEvZnMvYWZzL3NlY3VyaXR5LmNcXG4rKysgYi9mcy9hZnMvc2VjdXJpdHkuY1xcbkBAIC01MTAsNiArNTEwLDUyIEBAIGludCBhZnNfcGVybWlzc2lvbihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSxcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4rLypcXG4rICogRGV0ZXJtaW5lIGlmIGFuIGlub2RlIGlzIG93bmVkIGJ5ICdtZScgLSB3aGF0ZXZlciB0aGF0IG1lYW5zIGZvciB0aGVcXG4rICogZmlsZXN5c3RlbS4gIEluIHRoZSBjYXNlIG9mIEFGUywgdGhpcyBtZWFucyB0aGF0IHRoZSBmaWxlIGlzIG93bmVkIGJ5IHRoZVxcbisgKiBBRlMgdXNlciByZXByZXNlbnRlZCBieSB0aGUgUnggU2VjdXJpdHkgQ2xhc3MgdG9rZW4gaGVsZCBpbiBhIGtleS4gIFJldHVybnNcXG4rICogMCBpZiBvd25lZCBieSBtZSwgMSBpZiBub3Q7IGNhbiBhbHNvIHJldHVybiBhbiBlcnJvci5cXG4rICovXFxuK2ludCBhZnNfaXNfb3duZWRfYnlfbWUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuK3tcXG4rXFx0c3RydWN0IGFmc192bm9kZSAqdm5vZGUgPSBBRlNfRlNfSShpbm9kZSk7XFxuK1xcdGFmc19hY2Nlc3NfdCBhY2Nlc3M7XFxuK1xcdHN0cnVjdCBrZXkgKmtleTtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGlmIChTX0lTRElSKGlub2RlLVxcdTAwM2VpX21vZGUpKVxcbitcXHRcXHRyZXR1cm4gMTsgLyogVGhlIEFETUlOIHJpZ2h0IGNoZWNrIGRvZXNuJ3Qgd29yayBmb3IgZGlyZWN0b3JpZXMuICovXFxuK1xcbitcXHRrZXkgPSBhZnNfcmVxdWVzdF9rZXkodm5vZGUtXFx1MDAzZXZvbHVtZS1cXHUwMDNlY2VsbCk7XFxuK1xcdGlmIChJU19FUlIoa2V5KSlcXG4rXFx0XFx0cmV0dXJuIFBUUl9FUlIoa2V5KTtcXG4rXFxuK1xcdC8qIEdldCB0aGUgYWNjZXNzIHJpZ2h0cyBmb3IgdGhlIGtleSBvbiB0aGlzIGZpbGUuICovXFxuK1xcdHJldCA9IGFmc19jaGVja19wZXJtaXQodm5vZGUsIGtleSwgXFx1MDAyNmFjY2Vzcyk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycm9yO1xcbitcXG4rXFx0LyogV2UgZ2V0IHRoZSBBRE1JTklTVEVSIGJpdCBpZiB3ZSBvd24gdGhlIGZpbGUuICovXFxuK1xcdHJldCA9IChhY2Nlc3MgXFx1MDAyNiBBRlNfQUNFX0FETUlOSVNURVIpID8gMCA6IDE7XFxuK2Vycm9yOlxcbitcXHRrZXlfcHV0KGtleSk7XFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuKy8qXFxuKyAqIERldGVybWluZSBpZiBhIGZpbGUgaGFzIHRoZSBzYW1lIG93bmVyIGFzIGl0cyBwYXJlbnQgLSB3aGF0ZXZlciB0aGF0IG1lYW5zXFxuKyAqIGZvciB0aGUgZmlsZXN5c3RlbS4gIEluIHRoZSBjYXNlIG9mIEFGUywgdGhpcyBtZWFucyBjb21wYXJpbmcgdGhlaXIgQUZTXFxuKyAqIFVJRHMuICBSZXR1cm5zIDAgaWYgc2FtZSwgMSBpZiBub3Qgc2FtZTsgY2FuIGFsc28gcmV0dXJuIGFuIGVycm9yLlxcbisgKi9cXG4raW50IGFmc19oYXZlX3NhbWVfb3duZXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUxLFxcbitcXHRcXHRcXHRzdHJ1Y3QgaW5vZGUgKmlub2RlMilcXG4re1xcbitcXHRjb25zdCBzdHJ1Y3QgYWZzX3Zub2RlICp2bm9kZTEgPSBBRlNfRlNfSShpbm9kZTEpO1xcbitcXHRjb25zdCBzdHJ1Y3QgYWZzX3Zub2RlICp2bm9kZTIgPSBBRlNfRlNfSShpbm9kZTIpO1xcbitcXG4rXFx0cmV0dXJuIHZub2RlMS1cXHUwMDNlc3RhdHVzLm93bmVyICE9IHZub2RlMi1cXHUwMDNlc3RhdHVzLm93bmVyO1xcbit9XFxuK1xcbiB2b2lkIF9fZXhpdCBhZnNfY2xlYW5fdXBfcGVybWl0X2NhY2hlKHZvaWQpXFxuIHtcXG4gXFx0aW50IGk7XFxuZGlmZiAtLWdpdCBhL2ZzL2F0dHIuYyBiL2ZzL2F0dHIuY1xcbmluZGV4IDRmNDM3ZmFiYjdmMGY1Li5iN2U4YjVkNDlhOWZlNiAxMDA2NDRcXG4tLS0gYS9mcy9hdHRyLmNcXG4rKysgYi9mcy9hdHRyLmNcXG5AQCAtMTYsNiArMTYsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZmNudGwuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ZpbGVsb2NrLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zZWN1cml0eS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXFwiaW50ZXJuYWwuaFxcXCJcXG4gXFxuIC8qKlxcbiAgKiBzZXRhdHRyX3Nob3VsZF9kcm9wX3NnaWQgLSBkZXRlcm1pbmUgd2hldGhlciB0aGUgc2V0Z2lkIGJpdCBuZWVkcyB0byBiZVxcbkBAIC05MSwxOSArOTIsMjEgQEAgRVhQT1JUX1NZTUJPTChzZXRhdHRyX3Nob3VsZF9kcm9wX3N1aWRnaWQpO1xcbiAgKiBwZXJtaXNzaW9ucy4gT24gbm9uLWlkbWFwcGVkIG1vdW50cyBvciBpZiBwZXJtaXNzaW9uIGNoZWNraW5nIGlzIHRvIGJlXFxuICAqIHBlcmZvcm1lZCBvbiB0aGUgcmF3IGlub2RlIHNpbXBseSBwYXNzIEBub3BfbW50X2lkbWFwLlxcbiAgKi9cXG4tc3RhdGljIGJvb2wgY2hvd25fb2soc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuLVxcdFxcdCAgICAgY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSwgdmZzdWlkX3QgaWFfdmZzdWlkKVxcbitzdGF0aWMgaW50IGNob3duX29rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbitcXHRcXHQgICAgc3RydWN0IGlub2RlICppbm9kZSwgdmZzdWlkX3QgaWFfdmZzdWlkKVxcbiB7XFxuIFxcdHZmc3VpZF90IHZmc3VpZCA9IGlfdWlkX2ludG9fdmZzdWlkKGlkbWFwLCBpbm9kZSk7XFxuLVxcdGlmICh2ZnN1aWRfZXFfa3VpZCh2ZnN1aWQsIGN1cnJlbnRfZnN1aWQoKSkgXFx1MDAyNlxcdTAwMjZcXG4tXFx0ICAgIHZmc3VpZF9lcShpYV92ZnN1aWQsIHZmc3VpZCkpXFxuLVxcdFxcdHJldHVybiB0cnVlO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cmV0ID0gdmZzX2lub2RlX2lzX293bmVkX2J5X21lKGlkbWFwLCBpbm9kZSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYz0gMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4gXFx0aWYgKGNhcGFibGVfd3J0X2lub2RlX3VpZGdpZChpZG1hcCwgaW5vZGUsIENBUF9DSE9XTikpXFxuLVxcdFxcdHJldHVybiB0cnVlO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4gXFx0aWYgKCF2ZnN1aWRfdmFsaWQodmZzdWlkKSBcXHUwMDI2XFx1MDAyNlxcbiBcXHQgICAgbnNfY2FwYWJsZShpbm9kZS1cXHUwMDNlaV9zYi1cXHUwMDNlc191c2VyX25zLCBDQVBfQ0hPV04pKVxcbi1cXHRcXHRyZXR1cm4gdHJ1ZTtcXG4tXFx0cmV0dXJuIGZhbHNlO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0cmV0dXJuIC1FUEVSTTtcXG4gfVxcbiBcXG4gLyoqXFxuQEAgLTExOCwyMyArMTIxLDI3IEBAIHN0YXRpYyBib29sIGNob3duX29rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbiAgKiBwZXJtaXNzaW9ucy4gT24gbm9uLWlkbWFwcGVkIG1vdW50cyBvciBpZiBwZXJtaXNzaW9uIGNoZWNraW5nIGlzIHRvIGJlXFxuICAqIHBlcmZvcm1lZCBvbiB0aGUgcmF3IGlub2RlIHNpbXBseSBwYXNzIEBub3BfbW50X2lkbWFwLlxcbiAgKi9cXG4tc3RhdGljIGJvb2wgY2hncnBfb2soc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuLVxcdFxcdCAgICAgY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSwgdmZzZ2lkX3QgaWFfdmZzZ2lkKVxcbitzdGF0aWMgaW50IGNoZ3JwX29rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbitcXHRcXHQgICAgc3RydWN0IGlub2RlICppbm9kZSwgdmZzZ2lkX3QgaWFfdmZzZ2lkKVxcbiB7XFxuIFxcdHZmc2dpZF90IHZmc2dpZCA9IGlfZ2lkX2ludG9fdmZzZ2lkKGlkbWFwLCBpbm9kZSk7XFxuLVxcdHZmc3VpZF90IHZmc3VpZCA9IGlfdWlkX2ludG9fdmZzdWlkKGlkbWFwLCBpbm9kZSk7XFxuLVxcdGlmICh2ZnN1aWRfZXFfa3VpZCh2ZnN1aWQsIGN1cnJlbnRfZnN1aWQoKSkpIHtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHJldCA9IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShpZG1hcCwgaW5vZGUpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0aWYgKHJldCA9PSAwKSB7XFxuIFxcdFxcdGlmICh2ZnNnaWRfZXEoaWFfdmZzZ2lkLCB2ZnNnaWQpKVxcbi1cXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFx0XFx0XFx0cmV0dXJuIDA7XFxuIFxcdFxcdGlmICh2ZnNnaWRfaW5fZ3JvdXBfcChpYV92ZnNnaWQpKVxcbi1cXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFx0XFx0XFx0cmV0dXJuIDA7XFxuIFxcdH1cXG4gXFx0aWYgKGNhcGFibGVfd3J0X2lub2RlX3VpZGdpZChpZG1hcCwgaW5vZGUsIENBUF9DSE9XTikpXFxuLVxcdFxcdHJldHVybiB0cnVlO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4gXFx0aWYgKCF2ZnNnaWRfdmFsaWQodmZzZ2lkKSBcXHUwMDI2XFx1MDAyNlxcbiBcXHQgICAgbnNfY2FwYWJsZShpbm9kZS1cXHUwMDNlaV9zYi1cXHUwMDNlc191c2VyX25zLCBDQVBfQ0hPV04pKVxcbi1cXHRcXHRyZXR1cm4gdHJ1ZTtcXG4tXFx0cmV0dXJuIGZhbHNlO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0cmV0dXJuIC1FUEVSTTtcXG4gfVxcbiBcXG4gLyoqXFxuQEAgLTE2Myw2ICsxNzAsNyBAQCBpbnQgc2V0YXR0cl9wcmVwYXJlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuIHtcXG4gXFx0c3RydWN0IGlub2RlICppbm9kZSA9IGRfaW5vZGUoZGVudHJ5KTtcXG4gXFx0dW5zaWduZWQgaW50IGlhX3ZhbGlkID0gYXR0ci1cXHUwMDNlaWFfdmFsaWQ7XFxuK1xcdGludCByZXQ7XFxuIFxcbiBcXHQvKlxcbiBcXHQgKiBGaXJzdCBjaGVjayBzaXplIGNvbnN0cmFpbnRzLiAgVGhlc2UgY2FuJ3QgYmUgb3ZlcnJpZGRlbiB1c2luZ1xcbkBAIC0xODksMTQgKzE5NywxOCBAQCBpbnQgc2V0YXR0cl9wcmVwYXJlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuIFxcdFxcdGdvdG8ga2lsbF9wcml2O1xcbiBcXG4gXFx0LyogTWFrZSBzdXJlIGEgY2FsbGVyIGNhbiBjaG93bi4gKi9cXG4tXFx0aWYgKChpYV92YWxpZCBcXHUwMDI2IEFUVFJfVUlEKSBcXHUwMDI2XFx1MDAyNlxcbi1cXHQgICAgIWNob3duX29rKGlkbWFwLCBpbm9kZSwgYXR0ci1cXHUwMDNlaWFfdmZzdWlkKSlcXG4tXFx0XFx0cmV0dXJuIC1FUEVSTTtcXG4rXFx0aWYgKGlhX3ZhbGlkIFxcdTAwMjYgQVRUUl9VSUQpIHtcXG4rXFx0XFx0cmV0ID0gY2hvd25fb2soaWRtYXAsIGlub2RlLCBhdHRyLVxcdTAwM2VpYV92ZnN1aWQpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0fVxcbiBcXG4gXFx0LyogTWFrZSBzdXJlIGNhbGxlciBjYW4gY2hncnAuICovXFxuLVxcdGlmICgoaWFfdmFsaWQgXFx1MDAyNiBBVFRSX0dJRCkgXFx1MDAyNlxcdTAwMjZcXG4tXFx0ICAgICFjaGdycF9vayhpZG1hcCwgaW5vZGUsIGF0dHItXFx1MDAzZWlhX3Zmc2dpZCkpXFxuLVxcdFxcdHJldHVybiAtRVBFUk07XFxuK1xcdGlmIChpYV92YWxpZCBcXHUwMDI2IEFUVFJfR0lEKSB7XFxuK1xcdFxcdHJldCA9IGNoZ3JwX29rKGlkbWFwLCBpbm9kZSwgYXR0ci1cXHUwMDNlaWFfdmZzZ2lkKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdH1cXG4gXFxuIFxcdC8qIE1ha2Ugc3VyZSBhIGNhbGxlciBjYW4gY2htb2QuICovXFxuIFxcdGlmIChpYV92YWxpZCBcXHUwMDI2IEFUVFJfTU9ERSkge1xcbmRpZmYgLS1naXQgYS9mcy9jb3JlZHVtcC5jIGIvZnMvY29yZWR1bXAuY1xcbmluZGV4IGU2OGE3NmZmOTJhMzg2Li4zZjMyZTczYWFlZGEyOCAxMDA2NDRcXG4tLS0gYS9mcy9jb3JlZHVtcC5jXFxuKysrIGIvZnMvY29yZWR1bXAuY1xcbkBAIC05NTQsNyArOTU0LDcgQEAgc3RhdGljIGJvb2wgY29yZWR1bXBfZmlsZShzdHJ1Y3QgY29yZV9uYW1lICpjbiwgc3RydWN0IGNvcmVkdW1wX3BhcmFtcyAqY3BybSxcXG4gXFx0ICogZmlsZXN5c3RlbS5cXG4gXFx0ICovXFxuIFxcdGlkbWFwID0gZmlsZV9tbnRfaWRtYXAoZmlsZSk7XFxuLVxcdGlmICghdmZzdWlkX2VxX2t1aWQoaV91aWRfaW50b192ZnN1aWQoaWRtYXAsIGlub2RlKSwgY3VycmVudF9mc3VpZCgpKSkge1xcbitcXHRpZiAodmZzX2lub2RlX2lzX293bmVkX2J5X21lKGlkbWFwLCBpbm9kZSkgIT0gMCkge1xcbiBcXHRcXHRjb3JlZHVtcF9yZXBvcnRfZmFpbHVyZShcXFwiQ29yZSBkdW1wIHRvICVzIGFib3J0ZWQ6IGNhbm5vdCBwcmVzZXJ2ZSBmaWxlIG93bmVyXFxcIiwgY24tXFx1MDAzZWNvcmVuYW1lKTtcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXHR9XFxuZGlmZiAtLWdpdCBhL2ZzL2lub2RlLmMgYi9mcy9pbm9kZS5jXFxuaW5kZXggMzFjNWI5ZWUzYTgxZGYuLmE3ZWM4MzBhYjY4M2YwIDEwMDY0NFxcbi0tLSBhL2ZzL2lub2RlLmNcXG4rKysgYi9mcy9pbm9kZS5jXFxuQEAgLTI3NTAsMTYgKzI3NTAsMTkgQEAgRVhQT1JUX1NZTUJPTChpbm9kZV9pbml0X293bmVyKTtcXG4gICogT24gbm9uLWlkbWFwcGVkIG1vdW50cyBvciBpZiBwZXJtaXNzaW9uIGNoZWNraW5nIGlzIHRvIGJlIHBlcmZvcm1lZCBvbiB0aGVcXG4gICogcmF3IGlub2RlIHNpbXBseSBwYXNzIEBub3BfbW50X2lkbWFwLlxcbiAgKi9cXG4tYm9vbCBpbm9kZV9vd25lcl9vcl9jYXBhYmxlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbi1cXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSlcXG4rYm9vbCBpbm9kZV9vd25lcl9vcl9jYXBhYmxlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbiB7XFxuIFxcdHZmc3VpZF90IHZmc3VpZDtcXG4gXFx0c3RydWN0IHVzZXJfbmFtZXNwYWNlICpucztcXG4rXFx0aW50IHJldDtcXG4gXFxuLVxcdHZmc3VpZCA9IGlfdWlkX2ludG9fdmZzdWlkKGlkbWFwLCBpbm9kZSk7XFxuLVxcdGlmICh2ZnN1aWRfZXFfa3VpZCh2ZnN1aWQsIGN1cnJlbnRfZnN1aWQoKSkpXFxuK1xcdHJldCA9IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShpZG1hcCwgaW5vZGUpO1xcbitcXHRpZiAocmV0ID09IDApXFxuIFxcdFxcdHJldHVybiB0cnVlO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXG4rXFx0dmZzdWlkID0gaV91aWRfaW50b192ZnN1aWQoaWRtYXAsIGlub2RlKTtcXG4gXFx0bnMgPSBjdXJyZW50X3VzZXJfbnMoKTtcXG4gXFx0aWYgKHZmc3VpZF9oYXNfbWFwcGluZyhucywgdmZzdWlkKSBcXHUwMDI2XFx1MDAyNiBuc19jYXBhYmxlKG5zLCBDQVBfRk9XTkVSKSlcXG4gXFx0XFx0cmV0dXJuIHRydWU7XFxuZGlmZiAtLWdpdCBhL2ZzL2ludGVybmFsLmggYi9mcy9pbnRlcm5hbC5oXFxuaW5kZXggMzU1ZDkzZjkyMjA4NjEuLmJlNDVjYzYzODg2MTkyIDEwMDY0NFxcbi0tLSBhL2ZzL2ludGVybmFsLmhcXG4rKysgYi9mcy9pbnRlcm5hbC5oXFxuQEAgLTUxLDYgKzUxLDcgQEAgZXh0ZXJuIGludCBmaW5pc2hfY2xlYW5fY29udGV4dChzdHJ1Y3QgZnNfY29udGV4dCAqZmMpO1xcbiAvKlxcbiAgKiBuYW1laS5jXFxuICAqL1xcbitpbnQgdmZzX2lub2RlX2lzX293bmVkX2J5X21lKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcXG4gZXh0ZXJuIGludCBmaWxlbmFtZV9sb29rdXAoaW50IGRmZCwgc3RydWN0IGZpbGVuYW1lICpuYW1lLCB1bnNpZ25lZCBmbGFncyxcXG4gXFx0XFx0XFx0ICAgc3RydWN0IHBhdGggKnBhdGgsIGNvbnN0IHN0cnVjdCBwYXRoICpyb290KTtcXG4gaW50IGZpbGVuYW1lX3JtZGlyKGludCBkZmQsIHN0cnVjdCBmaWxlbmFtZSAqbmFtZSk7XFxuZGlmZiAtLWdpdCBhL2ZzL2xvY2tzLmMgYi9mcy9sb2Nrcy5jXFxuaW5kZXggNmU0ZmY3ZmNlYzA1M2UuLjAyZjgxMGRjOWU3ZTdhIDEwMDY0NFxcbi0tLSBhL2ZzL2xvY2tzLmNcXG4rKysgYi9mcy9sb2Nrcy5jXFxuQEAgLTY4LDYgKzY4LDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY3RyYWNlL2V2ZW50cy9maWxlbG9jay5oXFx1MDAzZVxcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3VhY2Nlc3MuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFxcImludGVybmFsLmhcXFwiXFxuIFxcbiBzdGF0aWMgc3RydWN0IGZpbGVfbG9jayAqZmlsZV9sb2NrKHN0cnVjdCBmaWxlX2xvY2tfY29yZSAqZmxjKVxcbiB7XFxuQEAgLTIxMzYsMTAgKzIxMzcsMTIgQEAgaW50XFxuIHZmc19zZXRsZWFzZShzdHJ1Y3QgZmlsZSAqZmlscCwgaW50IGFyZywgc3RydWN0IGZpbGVfbGVhc2UgKipsZWFzZSwgdm9pZCAqKnByaXYpXFxuIHtcXG4gXFx0c3RydWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5vZGUoZmlscCk7XFxuLVxcdHZmc3VpZF90IHZmc3VpZCA9IGlfdWlkX2ludG9fdmZzdWlkKGZpbGVfbW50X2lkbWFwKGZpbHApLCBpbm9kZSk7XFxuIFxcdGludCBlcnJvcjtcXG4gXFxuLVxcdGlmICgoIXZmc3VpZF9lcV9rdWlkKHZmc3VpZCwgY3VycmVudF9mc3VpZCgpKSkgXFx1MDAyNlxcdTAwMjYgIWNhcGFibGUoQ0FQX0xFQVNFKSlcXG4rXFx0ZXJyb3IgPSB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWUoZmlsZV9tbnRfaWRtYXAoZmlscCksIGlub2RlKTtcXG4rXFx0aWYgKGVycm9yIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIGVycm9yO1xcbitcXHRpZiAoZXJyb3IgIT0gMCBcXHUwMDI2XFx1MDAyNiAhY2FwYWJsZShDQVBfTEVBU0UpKVxcbiBcXHRcXHRyZXR1cm4gLUVBQ0NFUztcXG4gXFx0ZXJyb3IgPSBzZWN1cml0eV9maWxlX2xvY2soZmlscCwgYXJnKTtcXG4gXFx0aWYgKGVycm9yKVxcbmRpZmYgLS1naXQgYS9mcy9uYW1laS5jIGIvZnMvbmFtZWkuY1xcbmluZGV4IDE5Y2U0M2M5YTZlNjYyLi43MmY5NGQyMDRmOTNmNCAxMDA2NDRcXG4tLS0gYS9mcy9uYW1laS5jXFxuKysrIGIvZnMvbmFtZWkuY1xcbkBAIC01NSw4ICs1NSw4IEBAXFxuICAqIFRoZSBuZXcgY29kZSByZXBsYWNlcyB0aGUgb2xkIHJlY3Vyc2l2ZSBzeW1saW5rIHJlc29sdXRpb24gd2l0aFxcbiAgKiBhbiBpdGVyYXRpdmUgb25lIChpbiBjYXNlIG9mIG5vbi1uZXN0ZWQgc3ltbGluayBjaGFpbnMpLiAgSXQgZG9lc1xcbiAgKiB0aGlzIHdpdGggY2FsbHMgdG8gXFx1MDAzY2ZzXFx1MDAzZV9mb2xsb3dfbGluaygpLlxcbi0gKiBBcyBhIHNpZGUgZWZmZWN0LCBkaXJfbmFtZWkoKSwgX25hbWVpKCkgYW5kIGZvbGxvd19saW5rKCkgYXJlIG5vdyBcXG4tICogcmVwbGFjZWQgd2l0aCBhIHNpbmdsZSBmdW5jdGlvbiBsb29rdXBfZGVudHJ5KCkgdGhhdCBjYW4gaGFuZGxlIGFsbCBcXG4rICogQXMgYSBzaWRlIGVmZmVjdCwgZGlyX25hbWVpKCksIF9uYW1laSgpIGFuZCBmb2xsb3dfbGluaygpIGFyZSBub3dcXG4rICogcmVwbGFjZWQgd2l0aCBhIHNpbmdsZSBmdW5jdGlvbiBsb29rdXBfZGVudHJ5KCkgdGhhdCBjYW4gaGFuZGxlIGFsbFxcbiAgKiB0aGUgc3BlY2lhbCBjYXNlcyBvZiB0aGUgZm9ybWVyIGNvZGUuXFxuICAqXFxuICAqIFdpdGggdGhlIG5ldyBkY2FjaGUsIHRoZSBwYXRobmFtZSBpcyBzdG9yZWQgYXQgZWFjaCBpbm9kZSwgYXQgbGVhc3QgYXNcXG5AQCAtMTI1NSw2ICsxMjU1LDcyIEBAIGZzX2luaXRjYWxsKGluaXRfZnNfbmFtZWlfc3lzY3Rscyk7XFxuIFxcbiAjZW5kaWYgLyogQ09ORklHX1NZU0NUTCAqL1xcbiBcXG4rLypcXG4rICogRGV0ZXJtaW5lIGlmIGFuIGlub2RlIGlzIG93bmVkIGJ5IHRoZSBwcm9jZXNzIChhbGxvd2luZyBmb3IgZnN1aWQgb3ZlcnJpZGUpLFxcbisgKiByZXR1cm5pbmcgMCBpZiBzbywgMSBpZiBub3QgYW5kIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBpZiB0aGVyZSB3YXMgYSBwcm9ibGVtXFxuKyAqIG1ha2luZyB0aGUgZGV0ZXJtaW5hdGlvbi5cXG4rICovXFxuK2ludCB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuK3tcXG4rXFx0aWYgKHVubGlrZWx5KGlub2RlLVxcdTAwM2VpX29wZmxhZ3MgXFx1MDAyNiBJT1BfT1dORVJTSElQX09WRVJSSURFKSlcXG4rXFx0XFx0cmV0dXJuIGlub2RlLVxcdTAwM2VpX29wLVxcdTAwM2Vpc19vd25lZF9ieV9tZShpZG1hcCwgaW5vZGUpO1xcbitcXHRpZiAodmZzdWlkX2VxX2t1aWQoaV91aWRfaW50b192ZnN1aWQoaWRtYXAsIGlub2RlKSwgY3VycmVudF9mc3VpZCgpKSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdHJldHVybiAxOyAvKiBOb3Qgc2FtZS4gKi9cXG4rfVxcbitcXG4rLypcXG4rICogRGV0ZXJtaW5lIGlmIGFuIGlub2RlIGhhcyB0aGUgc2FtZSBvd25lciBhcyBpdHMgcGFyZW50IGRpcmVjdG9yeSwgcmV0dXJuaW5nXFxuKyAqIDAgaWYgc28sIDEgaWYgbm90IGFuZCBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgaWYgdGhlcmUgd2FzIGEgcHJvYmxlbSBtYWtpbmdcXG4rICogdGhlIGRldGVybWluYXRpb24uXFxuKyAqL1xcbitzdGF0aWMgaW50IHZmc19pbm9kZV9hbmRfZGlyX2hhdmVfc2FtZV9vd25lcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgbmFtZWlkYXRhICpuZClcXG4re1xcbitcXHRpZiAodW5saWtlbHkoaW5vZGUtXFx1MDAzZWlfb3BmbGFncyBcXHUwMDI2IElPUF9PV05FUlNISVBfT1ZFUlJJREUpKSB7XFxuK1xcdFxcdHN0cnVjdCBkZW50cnkgKnBhcmVudDtcXG4rXFx0XFx0c3RydWN0IGlub2RlICpkaXI7XFxuK1xcdFxcdGludCByZXQ7XFxuK1xcbitcXHRcXHRpZiAoaW5vZGUgIT0gbmQtXFx1MDAzZWlub2RlKSB7XFxuK1xcdFxcdFxcdGRpciA9IG5kLVxcdTAwM2Vpbm9kZTtcXG4rXFx0XFx0XFx0cmV0ID0gaW5vZGUtXFx1MDAzZWlfb3AtXFx1MDAzZWhhdmVfc2FtZV9vd25lcihpZG1hcCwgaW5vZGUsIGRpcik7XFxuK1xcdFxcdH0gZWxzZSBpZiAobmQtXFx1MDAzZWZsYWdzIFxcdTAwMjYgTE9PS1VQX1JDVSkge1xcbitcXHRcXHRcXHRwYXJlbnQgPSBSRUFEX09OQ0UobmQtXFx1MDAzZXBhdGguZGVudHJ5KTtcXG4rXFx0XFx0XFx0ZGlyID0gUkVBRF9PTkNFKHBhcmVudC1cXHUwMDNlZF9pbm9kZSk7XFxuK1xcdFxcdFxcdGlmICghZGlyKVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gLUVDSElMRDtcXG4rXFx0XFx0XFx0cmV0ID0gaW5vZGUtXFx1MDAzZWlfb3AtXFx1MDAzZWhhdmVfc2FtZV9vd25lcihpZG1hcCwgaW5vZGUsIGRpcik7XFxuK1xcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdHBhcmVudCA9IGRnZXRfcGFyZW50KG5kLVxcdTAwM2VwYXRoLmRlbnRyeSk7XFxuK1xcdFxcdFxcdGRpciA9IHBhcmVudC1cXHUwMDNlZF9pbm9kZTtcXG4rXFx0XFx0XFx0cmV0ID0gaW5vZGUtXFx1MDAzZWlfb3AtXFx1MDAzZWhhdmVfc2FtZV9vd25lcihpZG1hcCwgaW5vZGUsIGRpcik7XFxuK1xcdFxcdFxcdGRwdXQocGFyZW50KTtcXG4rXFx0XFx0fVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHR9XFxuK1xcbitcXHRpZiAodmZzdWlkX3ZhbGlkKG5kLVxcdTAwM2VkaXJfdmZzdWlkKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgdmZzdWlkX2VxKGlfdWlkX2ludG9fdmZzdWlkKGlkbWFwLCBpbm9kZSksIG5kLVxcdTAwM2VkaXJfdmZzdWlkKSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdHJldHVybiAxOyAvKiBOb3Qgc2FtZS4gKi9cXG4rfVxcbitcXG4rLypcXG4rICogRGV0ZXJtaW5lIGlmIHR3byBpbm9kZXMgaGF2ZSB0aGUgc2FtZSBvd25lciwgcmV0dXJuaW5nIDAgaWYgc28sIDEgaWYgbm90IGFuZFxcbisgKiBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgaWYgdGhlcmUgd2FzIGEgcHJvYmxlbSBtYWtpbmcgdGhlIGRldGVybWluYXRpb24uXFxuKyAqL1xcbitzdGF0aWMgaW50IHZmc19pbm9kZXNfaGF2ZV9zYW1lX293bmVyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbitcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgaW5vZGUgKmRpcilcXG4re1xcbitcXHRpZiAodW5saWtlbHkoaW5vZGUtXFx1MDAzZWlfb3BmbGFncyBcXHUwMDI2IElPUF9PV05FUlNISVBfT1ZFUlJJREUpKVxcbitcXHRcXHRyZXR1cm4gaW5vZGUtXFx1MDAzZWlfb3AtXFx1MDAzZWhhdmVfc2FtZV9vd25lcihpZG1hcCwgaW5vZGUsIGRpcik7XFxuK1xcdGlmICh2ZnN1aWRfZXEoaV91aWRfaW50b192ZnN1aWQoaWRtYXAsIGlub2RlKSxcXG4rXFx0XFx0ICAgICAgaV91aWRfaW50b192ZnN1aWQoaWRtYXAsIGRpcikpKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0cmV0dXJuIDE7IC8qIE5vdCBzYW1lLiAqL1xcbit9XFxuK1xcbiAvKipcXG4gICogbWF5X2ZvbGxvd19saW5rIC0gQ2hlY2sgc3ltbGluayBmb2xsb3dpbmcgZm9yIHVuc2FmZSBzaXR1YXRpb25zXFxuICAqIEBuZDogbmFtZWlkYXRhIHBhdGh3YWxrIGRhdGFcXG5AQCAtMTI3MSwyNyArMTMzNywyOCBAQCBmc19pbml0Y2FsbChpbml0X2ZzX25hbWVpX3N5c2N0bHMpO1xcbiAgKlxcbiAgKiBSZXR1cm5zIDAgaWYgZm9sbG93aW5nIHRoZSBzeW1saW5rIGlzIGFsbG93ZWQsIC12ZSBvbiBlcnJvci5cXG4gICovXFxuLXN0YXRpYyBpbmxpbmUgaW50IG1heV9mb2xsb3dfbGluayhzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSlcXG4rc3RhdGljIGlubGluZSBpbnQgbWF5X2ZvbGxvd19saW5rKHN0cnVjdCBuYW1laWRhdGEgKm5kLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbiB7XFxuIFxcdHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwO1xcbi1cXHR2ZnN1aWRfdCB2ZnN1aWQ7XFxuK1xcdGludCByZXQ7XFxuIFxcbiBcXHRpZiAoIXN5c2N0bF9wcm90ZWN0ZWRfc3ltbGlua3MpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4tXFx0aWRtYXAgPSBtbnRfaWRtYXAobmQtXFx1MDAzZXBhdGgubW50KTtcXG4tXFx0dmZzdWlkID0gaV91aWRfaW50b192ZnN1aWQoaWRtYXAsIGlub2RlKTtcXG4tXFx0LyogQWxsb3dlZCBpZiBvd25lciBhbmQgZm9sbG93ZXIgbWF0Y2guICovXFxuLVxcdGlmICh2ZnN1aWRfZXFfa3VpZCh2ZnN1aWQsIGN1cnJlbnRfZnN1aWQoKSkpXFxuLVxcdFxcdHJldHVybiAwO1xcbi1cXG4gXFx0LyogQWxsb3dlZCBpZiBwYXJlbnQgZGlyZWN0b3J5IG5vdCBzdGlja3kgYW5kIHdvcmxkLXdyaXRhYmxlLiAqL1xcbiBcXHRpZiAoKG5kLVxcdTAwM2VkaXJfbW9kZSBcXHUwMDI2IChTX0lTVlRYfFNfSVdPVEgpKSAhPSAoU19JU1ZUWHxTX0lXT1RIKSlcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcbitcXHRpZG1hcCA9IG1udF9pZG1hcChuZC1cXHUwMDNlcGF0aC5tbnQpO1xcbitcXHQvKiBBbGxvd2VkIGlmIG93bmVyIGFuZCBmb2xsb3dlciBtYXRjaC4gKi9cXG4rXFx0cmV0ID0gdmZzX2lub2RlX2lzX293bmVkX2J5X21lKGlkbWFwLCBpbm9kZSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYz0gMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuIFxcdC8qIEFsbG93ZWQgaWYgcGFyZW50IGRpcmVjdG9yeSBhbmQgbGluayBvd25lciBtYXRjaC4gKi9cXG4tXFx0aWYgKHZmc3VpZF92YWxpZChuZC1cXHUwMDNlZGlyX3Zmc3VpZCkgXFx1MDAyNlxcdTAwMjYgdmZzdWlkX2VxKG5kLVxcdTAwM2VkaXJfdmZzdWlkLCB2ZnN1aWQpKVxcbi1cXHRcXHRyZXR1cm4gMDtcXG4rXFx0cmV0ID0gdmZzX2lub2RlX2FuZF9kaXJfaGF2ZV9zYW1lX293bmVyKGlkbWFwLCBpbm9kZSwgbmQpO1xcbitcXHRpZiAocmV0IFxcdTAwM2M9IDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuIFxcbiBcXHRpZiAobmQtXFx1MDAzZWZsYWdzIFxcdTAwMjYgTE9PS1VQX1JDVSlcXG4gXFx0XFx0cmV0dXJuIC1FQ0hJTEQ7XFxuQEAgLTEzODksMTIgKzE0NTYsMTIgQEAgaW50IG1heV9saW5rYXQoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIGNvbnN0IHN0cnVjdCBwYXRoICpsaW5rKVxcbiAgKiBAaW5vZGU6IHRoZSBpbm9kZSBvZiB0aGUgZmlsZSB0byBvcGVuXFxuICAqXFxuICAqIEJsb2NrIGFuIE9fQ1JFQVQgb3BlbiBvZiBhIEZJRk8gKG9yIGEgcmVndWxhciBmaWxlKSB3aGVuOlxcbi0gKiAgIC0gc3lzY3RsX3Byb3RlY3RlZF9maWZvcyAob3Igc3lzY3RsX3Byb3RlY3RlZF9yZWd1bGFyKSBpcyBlbmFibGVkXFxuLSAqICAgLSB0aGUgZmlsZSBhbHJlYWR5IGV4aXN0c1xcbi0gKiAgIC0gd2UgYXJlIGluIGEgc3RpY2t5IGRpcmVjdG9yeVxcbi0gKiAgIC0gd2UgZG9uJ3Qgb3duIHRoZSBmaWxlXFxuKyAqICAgLSBzeXNjdGxfcHJvdGVjdGVkX2ZpZm9zIChvciBzeXNjdGxfcHJvdGVjdGVkX3JlZ3VsYXIpIGlzIGVuYWJsZWQsXFxuKyAqICAgLSB0aGUgZmlsZSBhbHJlYWR5IGV4aXN0cyxcXG4rICogICAtIHdlIGFyZSBpbiBhIHN0aWNreSBkaXJlY3RvcnksXFxuKyAqICAgLSB0aGUgZGlyZWN0b3J5IGlzIHdvcmxkIHdyaXRhYmxlLFxcbisgKiAgIC0gd2UgZG9uJ3Qgb3duIHRoZSBmaWxlIGFuZFxcbiAgKiAgIC0gdGhlIG93bmVyIG9mIHRoZSBkaXJlY3RvcnkgZG9lc24ndCBvd24gdGhlIGZpbGVcXG4tICogICAtIHRoZSBkaXJlY3RvcnkgaXMgd29ybGQgd3JpdGFibGVcXG4gICogSWYgdGhlIHN5c2N0bF9wcm90ZWN0ZWRfZmlmb3MgKG9yIHN5c2N0bF9wcm90ZWN0ZWRfcmVndWxhcikgaXMgc2V0IHRvIDJcXG4gICogdGhlIGRpcmVjdG9yeSBkb2Vzbid0IGhhdmUgdG8gYmUgd29ybGQgd3JpdGFibGU6IGJlaW5nIGdyb3VwIHdyaXRhYmxlIHdpbGxcXG4gICogYmUgZW5vdWdoLlxcbkBAIC0xNDA1LDEzICsxNDcyLDQ1IEBAIGludCBtYXlfbGlua2F0KHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBjb25zdCBzdHJ1Y3QgcGF0aCAqbGluaylcXG4gICogT24gbm9uLWlkbWFwcGVkIG1vdW50cyBvciBpZiBwZXJtaXNzaW9uIGNoZWNraW5nIGlzIHRvIGJlIHBlcmZvcm1lZCBvbiB0aGVcXG4gICogcmF3IGlub2RlIHNpbXBseSBwYXNzIEBub3BfbW50X2lkbWFwLlxcbiAgKlxcbisgKiBGb3IgYSBmaWxlc3lzdGVtIChlLmcuIGEgbmV0d29yayBmaWxlc3lzdGVtKSB0aGF0IGhhcyBhIHNlcGFyYXRlIElEIHNwYWNlXFxuKyAqIGFuZCBoYXMgZm9yZWlnbiBJRHMgKG1heWJlIGV2ZW4gbm9uLWludGVnZXIgSURzKSwgaV91aWQgY2Fubm90IGJlIGNvbXBhcmVkXFxuKyAqIHRvIGN1cnJlbnRfZnN1aWQoKSBhbmQgbWF5IG5vdCBiZSBkaXJlY3RseSBjb21wYXJhYmxlIHRvIGFub3RoZXIgaV91aWQuXFxuKyAqIEluc3RlYWQsIHRoZSBmaWxlc3lzdGVtIGlzIGFza2VkIHRvIHBlcmZvcm0gdGhlIGNvbXBhcmlzb25zLiAgV2l0aCBuZXR3b3JrXFxuKyAqIGZpbGVzeXN0ZW1zLCB0aGVyZSBhbHNvIGV4aXN0cyB0aGUgcG9zc2liaWxpdHkgb2YgZG9pbmcgYW5vbnltb3VzXFxuKyAqIG9wZXJhdGlvbnMgYW5kIGhhdmluZyBhbm9ueW1vdXNseS1vd25lZCBvYmplY3RzLlxcbisgKlxcbisgKiBXZSBoYXZlIHRoZSBmb2xsb3dpbmcgc2NlbmFyaW9zOlxcbisgKlxcbisgKlxcdFVTRVJcXHRESVJcXHRGSUxFXFx0RklMRVxcdEFMTE9XRURcXG4rICpcXHRcXHRPV05FUlxcdE9XTkVSXFx0U1RBVEVcXG4rICpcXHQ9PT09PT09XFx0PT09PT09PVxcdD09PT09PT1cXHQ9PT09PT09XFx0PT09PT09PVxcbisgKlxcdEFcXHRBXFx0LVxcdE5ld1xcdFllc1xcbisgKlxcdEFcXHRBXFx0QVxcdEV4aXN0c1xcdFllc1xcbisgKlxcdEFcXHRBXFx0Q1xcdEV4aXN0c1xcdE5vXFxuKyAqXFx0QVxcdEJcXHQtXFx0TmV3XFx0WWVzXFxuKyAqXFx0QVxcdEJcXHRBXFx0RXhpc3RzXFx0WWVzLCBGTz09VVxcbisgKlxcdEFcXHRCXFx0QlxcdEV4aXN0c1xcdFllcywgRk89PURPXFxuKyAqXFx0QVxcdEJcXHRDXFx0RXhpc3RzXFx0Tm9cXG4rICpcXHRBXFx0YW5vblsxXVxcdC1cXHROZXdcXHRZZXNcXG4rICpcXHRBXFx0YW5vblsxXVxcdEFcXHRFeGlzdHNcXHRZZXNcXG4rICpcXHRBXFx0YW5vblsxXVxcdENcXHRFeGlzdHNcXHROb1xcbisgKlxcdGFub25cXHRBXFx0LVxcdE5ld1xcdFllc1xcbisgKlxcdGFub25cXHRBXFx0QVxcdEV4aXN0c1xcdFllcywgRk89PURPXFxuKyAqXFx0YW5vblxcdGFub25bMV1cXHQtXFx0TmV3XFx0WWVzXFxuKyAqXFx0YW5vblxcdGFub25bMV1cXHQtXFx0RXhpc3RzXFx0Tm9cXG4rICpcXHRhbm9uXFx0QVxcdEFcXHRFeGlzdHNcXHRZZXMsIEZPPT1ET1xcbisgKlxcdGFub25cXHRBXFx0Q1xcdEV4aXN0c1xcdE5vXFxuKyAqXFx0YW5vblxcdEFcXHRhbm9uXFx0RXhpc3RzXFx0Tm9cXG4rICpcXG4rICogWzFdIENhbiBhbm9ueW1vdXNseS1vd25lZCBkaXJzIGJlIHN0aWNreT9cXG4rICpcXG4gICogUmV0dXJucyAwIGlmIHRoZSBvcGVuIGlzIGFsbG93ZWQsIC12ZSBvbiBlcnJvci5cXG4gICovXFxuIHN0YXRpYyBpbnQgbWF5X2NyZWF0ZV9pbl9zdGlja3koc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBuYW1laWRhdGEgKm5kLFxcbi1cXHRcXHRcXHRcXHRzdHJ1Y3QgaW5vZGUgKmNvbnN0IGlub2RlKVxcbitcXHRcXHRcXHRcXHRzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbiB7XFxuIFxcdHVtb2RlX3QgZGlyX21vZGUgPSBuZC1cXHUwMDNlZGlyX21vZGU7XFxuLVxcdHZmc3VpZF90IGRpcl92ZnN1aWQgPSBuZC1cXHUwMDNlZGlyX3Zmc3VpZCwgaV92ZnN1aWQ7XFxuK1xcdGludCByZXQ7XFxuIFxcbiBcXHRpZiAobGlrZWx5KCEoZGlyX21vZGUgXFx1MDAyNiBTX0lTVlRYKSkpXFxuIFxcdFxcdHJldHVybiAwO1xcbkBAIC0xNDIyLDEzICsxNTIxLDEzIEBAIHN0YXRpYyBpbnQgbWF5X2NyZWF0ZV9pbl9zdGlja3koc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBuYW1laWRhdGEgKm5kLFxcbiBcXHRpZiAoU19JU0ZJRk8oaW5vZGUtXFx1MDAzZWlfbW9kZSkgXFx1MDAyNlxcdTAwMjYgIXN5c2N0bF9wcm90ZWN0ZWRfZmlmb3MpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4tXFx0aV92ZnN1aWQgPSBpX3VpZF9pbnRvX3Zmc3VpZChpZG1hcCwgaW5vZGUpO1xcbi1cXG4tXFx0aWYgKHZmc3VpZF9lcShpX3Zmc3VpZCwgZGlyX3Zmc3VpZCkpXFxuLVxcdFxcdHJldHVybiAwO1xcbitcXHRyZXQgPSB2ZnNfaW5vZGVfYW5kX2Rpcl9oYXZlX3NhbWVfb3duZXIoaWRtYXAsIGlub2RlLCBuZCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYz0gMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4gXFxuLVxcdGlmICh2ZnN1aWRfZXFfa3VpZChpX3Zmc3VpZCwgY3VycmVudF9mc3VpZCgpKSlcXG4tXFx0XFx0cmV0dXJuIDA7XFxuK1xcdHJldCA9IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShpZG1hcCwgaW5vZGUpO1xcbitcXHRpZiAocmV0IFxcdTAwM2M9IDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuIFxcbiBcXHRpZiAobGlrZWx5KGRpcl9tb2RlIFxcdTAwMjYgMDAwMikpIHtcXG4gXFx0XFx0YXVkaXRfbG9nX3BhdGhfZGVuaWVkKEFVRElUX0FOT01fQ1JFQVQsIFxcXCJzdGlja3lfY3JlYXRlXFxcIik7XFxuQEAgLTM2NDUsMTIgKzM3NDQsMTQgQEAgRVhQT1JUX1NZTUJPTCh1c2VyX3BhdGhfYXQpO1xcbiBpbnQgX19jaGVja19zdGlja3koc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbiBcXHRcXHQgICBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbiB7XFxuLVxcdGt1aWRfdCBmc3VpZCA9IGN1cnJlbnRfZnN1aWQoKTtcXG4rXFx0aW50IHJldDtcXG4gXFxuLVxcdGlmICh2ZnN1aWRfZXFfa3VpZChpX3VpZF9pbnRvX3Zmc3VpZChpZG1hcCwgaW5vZGUpLCBmc3VpZCkpXFxuLVxcdFxcdHJldHVybiAwO1xcbi1cXHRpZiAodmZzdWlkX2VxX2t1aWQoaV91aWRfaW50b192ZnN1aWQoaWRtYXAsIGRpciksIGZzdWlkKSlcXG4tXFx0XFx0cmV0dXJuIDA7XFxuK1xcdHJldCA9IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShpZG1hcCwgaW5vZGUpO1xcbitcXHRpZiAocmV0IFxcdTAwM2M9IDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdHJldCA9IHZmc19pbm9kZXNfaGF2ZV9zYW1lX293bmVyKGlkbWFwLCBpbm9kZSwgZGlyKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjPSAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXHRyZXR1cm4gIWNhcGFibGVfd3J0X2lub2RlX3VpZGdpZChpZG1hcCwgaW5vZGUsIENBUF9GT1dORVIpO1xcbiB9XFxuIEVYUE9SVF9TWU1CT0woX19jaGVja19zdGlja3kpO1xcbmRpZmYgLS1naXQgYS9mcy9yZW1hcF9yYW5nZS5jIGIvZnMvcmVtYXBfcmFuZ2UuY1xcbmluZGV4IDI2YWZiYmJmYjEwYzJlLi45ZWVlOTNjMjcwMDEyNSAxMDA2NDRcXG4tLS0gYS9mcy9yZW1hcF9yYW5nZS5jXFxuKysrIGIvZnMvcmVtYXBfcmFuZ2UuY1xcbkBAIC00MTMsMjAgKzQxMywyMiBAQCBsb2ZmX3QgdmZzX2Nsb25lX2ZpbGVfcmFuZ2Uoc3RydWN0IGZpbGUgKmZpbGVfaW4sIGxvZmZfdCBwb3NfaW4sXFxuIEVYUE9SVF9TWU1CT0wodmZzX2Nsb25lX2ZpbGVfcmFuZ2UpO1xcbiBcXG4gLyogQ2hlY2sgd2hldGhlciB3ZSBhcmUgYWxsb3dlZCB0byBkZWR1cGUgdGhlIGRlc3RpbmF0aW9uIGZpbGUgKi9cXG4tc3RhdGljIGJvb2wgbWF5X2RlZHVwZV9maWxlKHN0cnVjdCBmaWxlICpmaWxlKVxcbitzdGF0aWMgaW50IG1heV9kZWR1cGVfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4ge1xcbiBcXHRzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCA9IGZpbGVfbW50X2lkbWFwKGZpbGUpO1xcbiBcXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZV9pbm9kZShmaWxlKTtcXG4rXFx0aW50IHJldDtcXG4gXFxuIFxcdGlmIChjYXBhYmxlKENBUF9TWVNfQURNSU4pKVxcbi1cXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFx0XFx0cmV0dXJuIDA7XFxuIFxcdGlmIChmaWxlLVxcdTAwM2VmX21vZGUgXFx1MDAyNiBGTU9ERV9XUklURSlcXG4tXFx0XFx0cmV0dXJuIHRydWU7XFxuLVxcdGlmICh2ZnN1aWRfZXFfa3VpZChpX3VpZF9pbnRvX3Zmc3VpZChpZG1hcCwgaW5vZGUpLCBjdXJyZW50X2ZzdWlkKCkpKVxcbi1cXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdHJldCA9IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShpZG1hcCwgaW5vZGUpO1xcbitcXHRpZiAocmV0IFxcdTAwM2M9IDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuIFxcdGlmICghaW5vZGVfcGVybWlzc2lvbihpZG1hcCwgaW5vZGUsIE1BWV9XUklURSkpXFxuLVxcdFxcdHJldHVybiB0cnVlO1xcbi1cXHRyZXR1cm4gZmFsc2U7XFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHRyZXR1cm4gLUVQRVJNO1xcbiB9XFxuIFxcbiBsb2ZmX3QgdmZzX2RlZHVwZV9maWxlX3JhbmdlX29uZShzdHJ1Y3QgZmlsZSAqc3JjX2ZpbGUsIGxvZmZfdCBzcmNfcG9zLFxcbkBAIC00NTksOCArNDYxLDggQEAgbG9mZl90IHZmc19kZWR1cGVfZmlsZV9yYW5nZV9vbmUoc3RydWN0IGZpbGUgKnNyY19maWxlLCBsb2ZmX3Qgc3JjX3BvcyxcXG4gXFx0aWYgKHJldClcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4gXFxuLVxcdHJldCA9IC1FUEVSTTtcXG4tXFx0aWYgKCFtYXlfZGVkdXBlX2ZpbGUoZHN0X2ZpbGUpKVxcbitcXHRyZXQgPSBtYXlfZGVkdXBlX2ZpbGUoZHN0X2ZpbGUpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gXFx0XFx0Z290byBvdXRfZHJvcF93cml0ZTtcXG4gXFxuIFxcdHJldCA9IC1FWERFVjtcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mcy5oIGIvaW5jbHVkZS9saW51eC9mcy5oXFxuaW5kZXggNTBjZTczMWEyYjc4ZjEuLjgwMTNjMTNhMzUzZDY3IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvZnMuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvZnMuaFxcbkBAIC02MjgsNiArNjI4LDcgQEAgaXNfdW5jYWNoZWRfYWNsKHN0cnVjdCBwb3NpeF9hY2wgKmFjbClcXG4gI2RlZmluZSBJT1BfQ0FDSEVEX0xJTktcXHRcXHQweDAwNDBcXG4gI2RlZmluZSBJT1BfRkFTVFBFUk1fTUFZX0VYRUNcXHQweDAwODBcXG4gI2RlZmluZSBJT1BfRkxDVFhcXHRcXHQweDAxMDBcXG4rI2RlZmluZSBJT1BfT1dORVJTSElQX09WRVJSSURFXFx0MHgwMjAwXFx0LyogVXNlIC1cXHUwMDNlaXNfb3duZWRfYnlfbWUoKSBhbmQgLVxcdTAwM2VoYXZlX3NhbWVfb3duZXIoKSAqL1xcbiBcXG4gLypcXG4gICogSW5vZGUgc3RhdGUgYml0cy4gIFByb3RlY3RlZCBieSBpbm9kZS1cXHUwMDNlaV9sb2NrXFxuQEAgLTE3NTUsOCArMTc1Niw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBmaWxlX3dyaXRlX25vdF9zdGFydGVkKGNvbnN0IHN0cnVjdCBmaWxlICpmaWxlKVxcbiBcXHRyZXR1cm4gc2Jfd3JpdGVfbm90X3N0YXJ0ZWQoZmlsZV9pbm9kZShmaWxlKS1cXHUwMDNlaV9zYik7XFxuIH1cXG4gXFxuLWJvb2wgaW5vZGVfb3duZXJfb3JfY2FwYWJsZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4tXFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xcbitib29sIGlub2RlX293bmVyX29yX2NhcGFibGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xcbiBcXG4gLypcXG4gICogVkZTIGhlbHBlciBmdW5jdGlvbnMuLlxcbkBAIC0yMDM2LDYgKzIwMzYsOSBAQCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyB7XFxuIFxcdFxcdFxcdCAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBmaWxlX2thdHRyICpmYSk7XFxuIFxcdGludCAoKmZpbGVhdHRyX2dldCkoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgZmlsZV9rYXR0ciAqZmEpO1xcbiBcXHRzdHJ1Y3Qgb2Zmc2V0X2N0eCAqKCpnZXRfb2Zmc2V0X2N0eCkoc3RydWN0IGlub2RlICppbm9kZSk7XFxuK1xcdGludCAoKmlzX293bmVkX2J5X21lKShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSk7XFxuK1xcdGludCAoKmhhdmVfc2FtZV9vd25lcikoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUxLFxcbitcXHRcXHRcXHQgICAgICAgc3RydWN0IGlub2RlICppbm9kZTIpO1xcbiB9IF9fX19jYWNoZWxpbmVfYWxpZ25lZDtcXG4gXFxuIC8qIERpZCB0aGUgZHJpdmVyIHByb3ZpZGUgdmFsaWQgbW1hcCBob29rIGNvbmZpZ3VyYXRpb24/ICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAzOjMzOjA5LjQ3MTA1NDU0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTA2Njg2ODgzODQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkFGU19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZmc19pbm9kZV9pc19vd25lZF9ieV9tZVwiLFxuICAgIFwiYWZzX2lzX293bmVkX2J5X21lXCIsXG4gICAgXCJhZnNfaGF2ZV9zYW1lX293bmVyXCIsXG4gICAgXCJpbm9kZV9vd25lcl9vcl9jYXBhYmxlXCIsXG4gICAgXCJ2ZnNfc2V0bGVhc2VcIixcbiAgICBcIl9fY2hlY2tfc3RpY2t5XCIsXG4gICAgXCJzZXRhdHRyX3ByZXBhcmVcIixcbiAgICBcInZmc19kZWR1cGVfZmlsZV9yYW5nZV9vbmVcIixcbiAgICBcImFmc19lZGl0X2Rpcl9yZW1vdmVcIixcbiAgICBcImFmc19mc19mZXRjaF9kYXRhXCIsXG4gICAgXCJhZnNfZGlyX2ZpbmRfYmxvY2tcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIG5ldyBpbm9kZSBvcGVyYXRpb25zIGBpc19vd25lZF9ieV9tZWAgYW5kIGBoYXZlX3NhbWVfb3duZXJgIHRvIGFsbG93IGZpbGVzeXN0ZW1zIChsaWtlIEFGUykgdG8gb3ZlcnJpZGUgZGVmYXVsdCBWRlMgb3duZXJzaGlwIGNoZWNrcy4gSXQgbW9kaWZpZXMgY29yZSBWRlMgcGF0aHMgKGUuZy4sIGBjaG93bl9va2AsIGBjaGdycF9va2AsIGBjb3JlZHVtcF9maWxlYCwgYGlub2RlX293bmVyX29yX2NhcGFibGVgLCBgdmZzX3NldGxlYXNlYCwgYG1heV9mb2xsb3dfbGlua2AsIGBtYXlfY3JlYXRlX2luX3N0aWNreWAsIGBfX2NoZWNrX3N0aWNreWAsIGBtYXlfZGVkdXBlX2ZpbGVgKSB0byB1c2UgdGhlc2UgbmV3IG9wZXJhdGlvbnMuIEl0IGFsc28gaW1wbGVtZW50cyB0aGVzZSBvcGVyYXRpb25zIGZvciBBRlMgYW5kIGZpeGVzIHNvbWUgQUZTLXNwZWNpZmljIGJ1Z3MgaW4gZGlyZWN0b3J5IGVkaXRpbmcgYW5kIGRhdGEgZmV0Y2hpbmcuIFRoZXNlIGFyZSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gdGhlIGNvcmUgVkZTIGFuZCBBRlMsIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBvciBzZWN1cml0eSBpc3N1ZXMgYXJlIGludHJvZHVjZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDc2YjlmNjA2ZWFlMmIwOWUwOTAxZDI0ODgzMmVkNWMxMzYwMGY1NDBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEp1bCAyOCAwMzozMzowNSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZzLnJzdCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZzLnJzdFxuaW5kZXggN2M3NTMxNDhhZjg4ODMuLjg5MzQxOWUwMDNlYWY3IDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy92ZnMucnN0XG4rKysgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Zmcy5yc3RcbkBAIC00NDUsNiArNDQ1LDkgQEAgQXMgb2Yga2VybmVsIDIuNi4yMiwgdGhlIGZvbGxvd2luZyBtZW1iZXJzIGFyZSBkZWZpbmVkOlxuIFx0XHRcdFx0ICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGZpbGVfa2F0dHIgKmZhKTtcbiBcdFx0aW50ICgqZmlsZWF0dHJfZ2V0KShzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBmaWxlX2thdHRyICpmYSk7XG4gXHQgICAgICAgIHN0cnVjdCBvZmZzZXRfY3R4ICooKmdldF9vZmZzZXRfY3R4KShzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbitcdFx0aW50ICgqaXNfb3duZWRfYnlfbWUpKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbitcdFx0aW50ICgqaGF2ZV9zYW1lX293bmVyKShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSxcbitcdFx0XHRcdCAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpO1xuIFx0fTtcbiBcbiBBZ2FpbiwgYWxsIG1ldGhvZHMgYXJlIGNhbGxlZCB3aXRob3V0IGFueSBsb2NrcyBiZWluZyBoZWxkLCB1bmxlc3NcbkBAIC02MzQsNiArNjM3LDI0IEBAIG90aGVyd2lzZSBub3RlZC5cbiAgICAgICAgIGZpbGVzeXN0ZW0gbXVzdCBkZWZpbmUgdGhpcyBvcGVyYXRpb24gdG8gdXNlXG4gICAgICAgICBzaW1wbGVfb2Zmc2V0X2Rpcl9vcGVyYXRpb25zLlxuIFxuK2BgaXNfb3duZWRfYnlfbWVgYFxuK1x0Y2FsbGVkIHRvIGRldGVybWluZSBpZiB0aGUgZmlsZSBjYW4gYmUgY29uc2lkZXJlZCB0byBiZSAnb3duZWQnIGJ5XG4rXHR0aGUgb3duZXIgb2YgdGhlIHByb2Nlc3Mgb3IgaWYgdGhlIHByb2Nlc3MgaGFzIGEgdG9rZW4gdGhhdCBncmFudHNcbitcdGl0IG93bmVyc2hpcCBwcml2aWxlZ2VzLiAgSWYgdW5zZXQsIHRoZSBkZWZhdWx0IGlzIHRvIGNvbXBhcmUgaV91aWRcbitcdHRvIGN1cnJlbnRfZnN1aWQoKSAtIGJ1dCB0aGlzIG1heSBnaXZlIGluY29ycmVjdCByZXN1bHRzIGZvciBzb21lXG4rXHRuZXR3b3JrIG9yIHBsdWctaW4gYmxvY2sgZmlsZXN5c3RlbXMuICBGb3IgZXhhbXBsZSwgQUZTIGRldGVybWluZXNcbitcdG93bmVyc2hpcCBlbnRpcmVseSBhY2NvcmRpbmcgdG8gYW4gb2J0YWluZWQgdG9rZW4gYW5kIGlfdWlkIG1heSBub3RcbitcdGV2ZW4gYmUgZnJvbSB0aGUgc2FtZSBJRCBzcGFjZSBhcyBjdXJyZW50X3VpZCgpLlxuK1xuK2BgaGF2ZV9zYW1lX293bmVyYGBcbitcdGNhbGxlZCB0byBkZXRlcm1pbmUgaWYgYW4gaW5vZGUgaGFzIHRoZSBzYW1lIG93bmVyIGFzIGl0cyBpbW1lZGlhdGVcbitcdHBhcmVudCBvbiB0aGUgcGF0aCB3YWxrZWQuICBJZiB1bnNldCwgdGhlIGRlZmF1bHQgaXMgdG8gc2ltcGx5XG4rXHRjb21wYXJlIHRoZSBpX3VpZCBvZiBib3RoLiAgRm9yIGV4YW1wbGUsIEFGUyBjb21wYXJlcyB0aGUgb3duZXIgSURzXG4rXHRvZiBib3RoIC0gYnV0IHRoZXNlIGFyZSBhIDY0LWJpdCB2YWx1ZXMgb24gc29tZSB2YXJpYW50cyB0aGF0IG1pZ2h0XG4rXHRub3QgZml0IGludG8gYSBrdWlkX3QgYW5kIGNpZnMgaGFzIEdVSURzIHRoYXQgY2Fubm90IGJlIGNvbXBhcmVkIHRvXG4rXHRrdWlkX3QuXG4rXG4rXG4gVGhlIEFkZHJlc3MgU3BhY2UgT2JqZWN0XG4gPT09PT09PT09PT09PT09PT09PT09PT09XG4gXG5kaWZmIC0tZ2l0IGEvZnMvYWZzL2Rpci5jIGIvZnMvYWZzL2Rpci5jXG5pbmRleCA2ZGY1NmZlOTE2M2ZkNy4uZWUyZjVlYzBiMmM2N2QgMTAwNjQ0XG4tLS0gYS9mcy9hZnMvZGlyLmNcbisrKyBiL2ZzL2Fmcy9kaXIuY1xuQEAgLTY5LDYgKzY5LDggQEAgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgYWZzX2Rpcl9pbm9kZV9vcGVyYXRpb25zID0ge1xuIFx0LnBlcm1pc3Npb25cdD0gYWZzX3Blcm1pc3Npb24sXG4gXHQuZ2V0YXR0clx0PSBhZnNfZ2V0YXR0cixcbiBcdC5zZXRhdHRyXHQ9IGFmc19zZXRhdHRyLFxuK1x0LmlzX293bmVkX2J5X21lXHQ9IGFmc19pc19vd25lZF9ieV9tZSxcbitcdC5oYXZlX3NhbWVfb3duZXIgPSBhZnNfaGF2ZV9zYW1lX293bmVyLFxuIH07XG4gXG4gY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBhZnNfZGlyX2FvcHMgPSB7XG5kaWZmIC0tZ2l0IGEvZnMvYWZzL2Rpcl9lZGl0LmMgYi9mcy9hZnMvZGlyX2VkaXQuY1xuaW5kZXggZmQzYWE5Zjk3Y2U2NGMuLmMzMTMwMzA1OTQ0NGFkIDEwMDY0NFxuLS0tIGEvZnMvYWZzL2Rpcl9lZGl0LmNcbisrKyBiL2ZzL2Fmcy9kaXJfZWRpdC5jXG5AQCAtNDE1LDcgKzQxNSw3IEBAIHZvaWQgYWZzX2VkaXRfZGlyX3JlbW92ZShzdHJ1Y3QgYWZzX3Zub2RlICp2bm9kZSxcbiBcdGlmICghYWZzX2Rpcl9pbml0X2l0ZXIoXHUwMDI2aXRlciwgbmFtZSkpXG4gXHRcdHJldHVybjtcbiBcbi1cdG1ldGEgPSBhZnNfZGlyX2ZpbmRfYmxvY2soXHUwMDI2aXRlciwgMCk7XG4rXHRtZXRhID0gYWZzX2Rpcl9nZXRfYmxvY2soXHUwMDI2aXRlciwgMCk7XG4gXHRpZiAoIW1ldGEpXG4gXHRcdHJldHVybjtcbiBcbkBAIC00NDIsNyArNDQyLDcgQEAgdm9pZCBhZnNfZWRpdF9kaXJfcmVtb3ZlKHN0cnVjdCBhZnNfdm5vZGUgKnZub2RlLFxuIFx0LyogQ2hlY2sgYW5kIGNsZWFyIHRoZSBlbnRyeS4gKi9cbiBcdGRlID0gXHUwMDI2YmxvY2stXHUwMDNlZGlyZW50c1tzbG90XTtcbiBcdGlmIChkZS1cdTAwM2V1LnZhbGlkICE9IDEpXG4tXHRcdGdvdG8gZXJyb3JfdW5tYXA7XG4rXHRcdGdvdG8gZXJyb3I7XG4gXG4gXHR0cmFjZV9hZnNfZWRpdF9kaXIodm5vZGUsIHdoeSwgYWZzX2VkaXRfZGlyX2RlbGV0ZSwgYiwgc2xvdCxcbiBcdFx0XHQgICBudG9obChkZS1cdTAwM2V1LnZub2RlKSwgbnRvaGwoZGUtXHUwMDNldS51bmlxdWUpLFxuQEAgLTQ1OCw3ICs0NTgsNiBAQCB2b2lkIGFmc19lZGl0X2Rpcl9yZW1vdmUoc3RydWN0IGFmc192bm9kZSAqdm5vZGUsXG4gXHQvKiBDbGVhciB0aGUgY29uc3RpdHVlbnQgZW50cmllcy4gKi9cbiBcdG5leHQgPSBkZS1cdTAwM2V1Lmhhc2hfbmV4dDtcbiBcdG1lbXNldChkZSwgMCwgc2l6ZW9mKCpkZSkgKiBpdGVyLm5yX3Nsb3RzKTtcbi1cdGt1bm1hcF9sb2NhbChibG9jayk7XG4gXG4gXHQvKiBBZGp1c3QgdGhlIGhhc2ggY2hhaW46IGlmIGl0ZXItXHUwMDNlcHJldl9lbnRyeSBpcyAwLCB0aGUgaGFzaHRhYmxlIGhlYWRcbiBcdCAqIGluZGV4IGlzIHByZXZpb3VzOyBvdGhlcndpc2UgaXQncyBzbG90IG51bWJlciBvZiB0aGUgcHJldmlvdXMgZW50cnkuXG5AQCAtNDg1LDcgKzQ4NCw2IEBAIHZvaWQgYWZzX2VkaXRfZGlyX3JlbW92ZShzdHJ1Y3QgYWZzX3Zub2RlICp2bm9kZSxcbiBcdFx0cGRlID0gXHUwMDI2cGJsb2NrLVx1MDAzZWRpcmVudHNbcHNdO1xuIFx0XHRwcmV2X25leHQgPSBwZGUtXHUwMDNldS5oYXNoX25leHQ7XG4gXHRcdGlmIChwcmV2X25leHQgIT0gaHRvbnMoZW50cnkpKSB7XG4tXHRcdFx0a3VubWFwX2xvY2FsKHBibG9jayk7XG4gXHRcdFx0cHJfd2FybihcIiVsbHg6JWxseDoleDogbm90IHByZXYgaW4gY2hhaW4gYj0leCBwPSV4LCV4IGU9JXggJSpzXCIsXG4gXHRcdFx0XHR2bm9kZS1cdTAwM2VmaWQudmlkLCB2bm9kZS1cdTAwM2VmaWQudm5vZGUsIHZub2RlLVx1MDAzZWZpZC51bmlxdWUsXG4gXHRcdFx0XHRpdGVyLmJ1Y2tldCwgaXRlci5wcmV2X2VudHJ5LCBwcmV2X25leHQsIGVudHJ5LFxuQEAgLTQ5Myw3ICs0OTEsNiBAQCB2b2lkIGFmc19lZGl0X2Rpcl9yZW1vdmUoc3RydWN0IGFmc192bm9kZSAqdm5vZGUsXG4gXHRcdFx0Z290byBlcnJvcjtcbiBcdFx0fVxuIFx0XHRwZGUtXHUwMDNldS5oYXNoX25leHQgPSBuZXh0O1xuLVx0XHRrdW5tYXBfbG9jYWwocGJsb2NrKTtcbiBcdH1cbiBcbiBcdG5ldGZzX3NpbmdsZV9tYXJrX2lub2RlX2RpcnR5KFx1MDAyNnZub2RlLVx1MDAzZW5ldGZzLmlub2RlKTtcbkBAIC01MDMsMTggKzUwMCwxNiBAQCB2b2lkIGFmc19lZGl0X2Rpcl9yZW1vdmUoc3RydWN0IGFmc192bm9kZSAqdm5vZGUsXG4gXHRfZGVidWcoXCJSZW1vdmUgJXMgZnJvbSAldVsldV1cIiwgbmFtZS1cdTAwM2VuYW1lLCBiLCBzbG90KTtcbiBcbiBvdXRfdW5tYXA6XG4rXHRhZnNfZGlyX2VuZF9pdGVyKFx1MDAyNml0ZXIpO1xuIFx0a3VubWFwX2xvY2FsKG1ldGEpO1xuIFx0X2xlYXZlKFwiXCIpO1xuIFx0cmV0dXJuO1xuIFxuIGFscmVhZHlfaW52YWxpZGF0ZWQ6XG4tXHRrdW5tYXBfbG9jYWwoYmxvY2spO1xuIFx0dHJhY2VfYWZzX2VkaXRfZGlyKHZub2RlLCB3aHksIGFmc19lZGl0X2Rpcl9kZWxldGVfaW52YWwsXG4gXHRcdFx0ICAgMCwgMCwgMCwgMCwgbmFtZS1cdTAwM2VuYW1lKTtcbiBcdGdvdG8gb3V0X3VubWFwO1xuIFxuLWVycm9yX3VubWFwOlxuLVx0a3VubWFwX2xvY2FsKGJsb2NrKTtcbiBlcnJvcjpcbiBcdHRyYWNlX2Fmc19lZGl0X2Rpcih2bm9kZSwgd2h5LCBhZnNfZWRpdF9kaXJfZGVsZXRlX2Vycm9yLFxuIFx0XHRcdCAgIDAsIDAsIDAsIDAsIG5hbWUtXHUwMDNlbmFtZSk7XG5kaWZmIC0tZ2l0IGEvZnMvYWZzL2Rpcl9zZWFyY2guYyBiL2ZzL2Fmcy9kaXJfc2VhcmNoLmNcbmluZGV4IDEwNDQxMWMwNjkyZjU3Li4xMWViZGZmZmNiMWQzOCAxMDA2NDRcbi0tLSBhL2ZzL2Fmcy9kaXJfc2VhcmNoLmNcbisrKyBiL2ZzL2Fmcy9kaXJfc2VhcmNoLmNcbkBAIC03NSwxMCArNzUsNyBAQCB1bmlvbiBhZnNfeGRyX2Rpcl9ibG9jayAqYWZzX2Rpcl9maW5kX2Jsb2NrKHN0cnVjdCBhZnNfZGlyX2l0ZXIgKml0ZXIsIHNpemVfdCBibFxuIFxuIFx0X2VudGVyKFwiJXp4LCVkXCIsIGJsb2NrLCBzbG90KTtcbiBcbi1cdGlmIChpdGVyLVx1MDAzZWJsb2NrKSB7XG4tXHRcdGt1bm1hcF9sb2NhbChpdGVyLVx1MDAzZWJsb2NrKTtcbi1cdFx0aXRlci1cdTAwM2VibG9jayA9IE5VTEw7XG4tXHR9XG4rXHRhZnNfZGlyX2VuZF9pdGVyKGl0ZXIpO1xuIFxuIFx0aWYgKGR2bm9kZS1cdTAwM2VkaXJlY3Rvcnlfc2l6ZSBcdTAwM2MgYmxlbmQpXG4gXHRcdGdvdG8gZmFpbDtcbkBAIC0xNzMsMTIgKzE3MCw4IEBAIGludCBhZnNfZGlyX3NlYXJjaF9idWNrZXQoc3RydWN0IGFmc19kaXJfaXRlciAqaXRlciwgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsXG4gXG4gXHRyZXQgPSAtRU5PRU5UO1xuIGZvdW5kOlxuLVx0aWYgKGl0ZXItXHUwMDNlYmxvY2spIHtcbi1cdFx0a3VubWFwX2xvY2FsKGl0ZXItXHUwMDNlYmxvY2spO1xuLVx0XHRpdGVyLVx1MDAzZWJsb2NrID0gTlVMTDtcbi1cdH1cbi1cbiBiYWQ6XG4rXHRhZnNfZGlyX2VuZF9pdGVyKGl0ZXIpO1xuIFx0aWYgKHJldCA9PSAtRVNUQUxFKVxuIFx0XHRhZnNfaW52YWxpZGF0ZV9kaXIoaXRlci1cdTAwM2Vkdm5vZGUsIGFmc19kaXJfaW52YWxpZF9pdGVyX3N0YWxlKTtcbiBcdF9sZWF2ZShcIiA9ICVkXCIsIHJldCk7XG5kaWZmIC0tZ2l0IGEvZnMvYWZzL2ZpbGUuYyBiL2ZzL2Fmcy9maWxlLmNcbmluZGV4IDA0Njc3NDJiZmVlZTM0Li5iYTQ0NDkzY2NhZjZlZSAxMDA2NDRcbi0tLSBhL2ZzL2Fmcy9maWxlLmNcbisrKyBiL2ZzL2Fmcy9maWxlLmNcbkBAIC00OSw2ICs0OSw4IEBAIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGFmc19maWxlX2lub2RlX29wZXJhdGlvbnMgPSB7XG4gXHQuZ2V0YXR0clx0PSBhZnNfZ2V0YXR0cixcbiBcdC5zZXRhdHRyXHQ9IGFmc19zZXRhdHRyLFxuIFx0LnBlcm1pc3Npb25cdD0gYWZzX3Blcm1pc3Npb24sXG4rXHQuaXNfb3duZWRfYnlfbWVcdD0gYWZzX2lzX293bmVkX2J5X21lLFxuK1x0LmhhdmVfc2FtZV9vd25lciA9IGFmc19oYXZlX3NhbWVfb3duZXIsXG4gfTtcbiBcbiBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGFmc19maWxlX2FvcHMgPSB7XG5kaWZmIC0tZ2l0IGEvZnMvYWZzL2ZzY2xpZW50LmMgYi9mcy9hZnMvZnNjbGllbnQuY1xuaW5kZXggYTJmZmQ2MDg4OWY4OWQuLjFhM2YxODZhNmExMTNkIDEwMDY0NFxuLS0tIGEvZnMvYWZzL2ZzY2xpZW50LmNcbisrKyBiL2ZzL2Fmcy9mc2NsaWVudC5jXG5AQCAtNDc3LDYgKzQ3Nyw5IEBAIHZvaWQgYWZzX2ZzX2ZldGNoX2RhdGEoc3RydWN0IGFmc19vcGVyYXRpb24gKm9wKVxuIFx0aWYgKCFjYWxsKVxuIFx0XHRyZXR1cm4gYWZzX29wX25vbWVtKG9wKTtcbiBcbitcdGlmIChvcC1cdTAwM2VmbGFncyBcdTAwMjYgQUZTX09QRVJBVElPTl9BU1lOQylcbitcdFx0Y2FsbC1cdTAwM2Vhc3luYyA9IHRydWU7XG4rXG4gXHQvKiBtYXJzaGFsbCB0aGUgcGFyYW1ldGVycyAqL1xuIFx0YnAgPSBjYWxsLVx1MDAzZXJlcXVlc3Q7XG4gXHRicFswXSA9IGh0b25sKEZTRkVUQ0hEQVRBKTtcbkBAIC00ODQsNyArNDg3LDcgQEAgdm9pZCBhZnNfZnNfZmV0Y2hfZGF0YShzdHJ1Y3QgYWZzX29wZXJhdGlvbiAqb3ApXG4gXHRicFsyXSA9IGh0b25sKHZwLVx1MDAzZWZpZC52bm9kZSk7XG4gXHRicFszXSA9IGh0b25sKHZwLVx1MDAzZWZpZC51bmlxdWUpO1xuIFx0YnBbNF0gPSBodG9ubChsb3dlcl8zMl9iaXRzKHN1YnJlcS1cdTAwM2VzdGFydCArIHN1YnJlcS1cdTAwM2V0cmFuc2ZlcnJlZCkpO1xuLVx0YnBbNV0gPSBodG9ubChsb3dlcl8zMl9iaXRzKHN1YnJlcS1cdTAwM2VsZW4gICArIHN1YnJlcS1cdTAwM2V0cmFuc2ZlcnJlZCkpO1xuK1x0YnBbNV0gPSBodG9ubChsb3dlcl8zMl9iaXRzKHN1YnJlcS1cdTAwM2VsZW4gICAtIHN1YnJlcS1cdTAwM2V0cmFuc2ZlcnJlZCkpO1xuIFxuIFx0Y2FsbC1cdTAwM2VmaWQgPSB2cC1cdTAwM2VmaWQ7XG4gXHR0cmFjZV9hZnNfbWFrZV9mc19jYWxsKGNhbGwsIFx1MDAyNnZwLVx1MDAzZWZpZCk7XG5kaWZmIC0tZ2l0IGEvZnMvYWZzL2lub2RlLmMgYi9mcy9hZnMvaW5vZGUuY1xuaW5kZXggMTRmMzlhOWJlYTZjZmUuLmFmODVhODhkOTQzZGQxIDEwMDY0NFxuLS0tIGEvZnMvYWZzL2lub2RlLmNcbisrKyBiL2ZzL2Fmcy9pbm9kZS5jXG5AQCAtOTEsNiArOTEsNyBAQCBzdGF0aWMgaW50IGFmc19pbm9kZV9pbml0X2Zyb21fc3RhdHVzKHN0cnVjdCBhZnNfb3BlcmF0aW9uICpvcCxcbiBcdGlub2RlLVx1MDAzZWlfZmxhZ3MgfD0gU19OT0FUSU1FO1xuIFx0aW5vZGUtXHUwMDNlaV91aWQgPSBtYWtlX2t1aWQoXHUwMDI2aW5pdF91c2VyX25zLCBzdGF0dXMtXHUwMDNlb3duZXIpO1xuIFx0aW5vZGUtXHUwMDNlaV9naWQgPSBtYWtlX2tnaWQoXHUwMDI2aW5pdF91c2VyX25zLCBzdGF0dXMtXHUwMDNlZ3JvdXApO1xuK1x0aW5vZGUtXHUwMDNlaV9vcGZsYWdzIHw9IElPUF9PV05FUlNISVBfT1ZFUlJJREU7XG4gXHRzZXRfbmxpbmsoXHUwMDI2dm5vZGUtXHUwMDNlbmV0ZnMuaW5vZGUsIHN0YXR1cy1cdTAwM2VubGluayk7XG4gXG4gXHRpX3NpemVfd3JpdGUoaW5vZGUsIHN0YXR1cy1cdTAwM2VzaXplKTtcbmRpZmYgLS1naXQgYS9mcy9hZnMvaW50ZXJuYWwuaCBiL2ZzL2Fmcy9pbnRlcm5hbC5oXG5pbmRleCA2MDFmMDFlNWMxNWZjYy4uNDBlNWNlNjE5NDc2MjEgMTAwNjQ0XG4tLS0gYS9mcy9hZnMvaW50ZXJuYWwuaFxuKysrIGIvZnMvYWZzL2ludGVybmFsLmhcbkBAIC0xMTMzLDYgKzExMzMsMTQgQEAgaW50IGFmc19kaXJfc2VhcmNoX2J1Y2tldChzdHJ1Y3QgYWZzX2Rpcl9pdGVyICppdGVyLCBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSxcbiBpbnQgYWZzX2Rpcl9zZWFyY2goc3RydWN0IGFmc192bm9kZSAqZHZub2RlLCBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSxcbiBcdFx0ICAgc3RydWN0IGFmc19maWQgKl9maWQsIGFmc19kYXRhdmVyc2lvbl90ICpfZGlyX3ZlcnNpb24pO1xuIFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBhZnNfZGlyX2VuZF9pdGVyKHN0cnVjdCBhZnNfZGlyX2l0ZXIgKml0ZXIpXG4re1xuK1x0aWYgKGl0ZXItXHUwMDNlYmxvY2spIHtcbitcdFx0a3VubWFwX2xvY2FsKGl0ZXItXHUwMDNlYmxvY2spO1xuK1x0XHRpdGVyLVx1MDAzZWJsb2NrID0gTlVMTDtcbitcdH1cbit9XG4rXG4gLypcbiAgKiBkaXJfc2lsbHkuY1xuICAqL1xuQEAgLTE0MjEsNyArMTQyOSw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBhZnNfbWFrZV9vcF9jYWxsKHN0cnVjdCBhZnNfb3BlcmF0aW9uICpvcCwgc3RydWN0IGFmc19jYWxsICpjXG4ge1xuIFx0c3RydWN0IGFmc19hZGRyX2xpc3QgKmFsaXN0ID0gb3AtXHUwMDNlZXN0YXRlLVx1MDAzZWFkZHJlc3NlcztcbiBcbi1cdG9wLVx1MDAzZWNhbGxcdD0gY2FsbDtcbitcdG9wLVx1MDAzZWNhbGxcdD0gYWZzX2dldF9jYWxsKGNhbGwsIGFmc19jYWxsX3RyYWNlX2dldCk7XG4gXHRvcC1cdTAwM2V0eXBlXHQ9IGNhbGwtXHUwMDNldHlwZTtcbiBcdGNhbGwtXHUwMDNlb3BcdD0gb3A7XG4gXHRjYWxsLVx1MDAzZWtleVx0PSBvcC1cdTAwM2VrZXk7XG5AQCAtMTQyOSw2ICsxNDM3LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGFmc19tYWtlX29wX2NhbGwoc3RydWN0IGFmc19vcGVyYXRpb24gKm9wLCBzdHJ1Y3QgYWZzX2NhbGwgKmNcbiBcdGNhbGwtXHUwMDNlcGVlclx0PSByeHJwY19rZXJuZWxfZ2V0X3BlZXIoYWxpc3QtXHUwMDNlYWRkcnNbb3AtXHUwMDNlYWRkcl9pbmRleF0ucGVlcik7XG4gXHRjYWxsLVx1MDAzZXNlcnZpY2VfaWQgPSBvcC1cdTAwM2VzZXJ2ZXItXHUwMDNlc2VydmljZV9pZDtcbiBcdGFmc19tYWtlX2NhbGwoY2FsbCwgZ2ZwKTtcbitcdGFmc19wdXRfY2FsbChjYWxsKTtcbiB9XG4gXG4gc3RhdGljIGlubGluZSB2b2lkIGFmc19leHRyYWN0X2JlZ2luKHN0cnVjdCBhZnNfY2FsbCAqY2FsbCwgdm9pZCAqYnVmLCBzaXplX3Qgc2l6ZSlcbkBAIC0xNTMwLDYgKzE1MzksOSBAQCBleHRlcm4gc3RydWN0IGtleSAqYWZzX3JlcXVlc3Rfa2V5KHN0cnVjdCBhZnNfY2VsbCAqKTtcbiBleHRlcm4gc3RydWN0IGtleSAqYWZzX3JlcXVlc3Rfa2V5X3JjdShzdHJ1Y3QgYWZzX2NlbGwgKik7XG4gZXh0ZXJuIGludCBhZnNfY2hlY2tfcGVybWl0KHN0cnVjdCBhZnNfdm5vZGUgKiwgc3RydWN0IGtleSAqLCBhZnNfYWNjZXNzX3QgKik7XG4gZXh0ZXJuIGludCBhZnNfcGVybWlzc2lvbihzdHJ1Y3QgbW50X2lkbWFwICosIHN0cnVjdCBpbm9kZSAqLCBpbnQpO1xuK2ludCBhZnNfaXNfb3duZWRfYnlfbWUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xuK2ludCBhZnNfaGF2ZV9zYW1lX293bmVyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlMSxcbitcdFx0XHRzdHJ1Y3QgaW5vZGUgKmlub2RlMik7XG4gZXh0ZXJuIHZvaWQgX19leGl0IGFmc19jbGVhbl91cF9wZXJtaXRfY2FjaGUodm9pZCk7XG4gXG4gLypcbmRpZmYgLS1naXQgYS9mcy9hZnMvc2VjdXJpdHkuYyBiL2ZzL2Fmcy9zZWN1cml0eS5jXG5pbmRleCA2ZDAwZDYyYTY1ZWRmNi4uNzA5MmY1YWNkY2Q2YWMgMTAwNjQ0XG4tLS0gYS9mcy9hZnMvc2VjdXJpdHkuY1xuKysrIGIvZnMvYWZzL3NlY3VyaXR5LmNcbkBAIC01MTAsNiArNTEwLDUyIEBAIGludCBhZnNfcGVybWlzc2lvbihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuKy8qXG4rICogRGV0ZXJtaW5lIGlmIGFuIGlub2RlIGlzIG93bmVkIGJ5ICdtZScgLSB3aGF0ZXZlciB0aGF0IG1lYW5zIGZvciB0aGVcbisgKiBmaWxlc3lzdGVtLiAgSW4gdGhlIGNhc2Ugb2YgQUZTLCB0aGlzIG1lYW5zIHRoYXQgdGhlIGZpbGUgaXMgb3duZWQgYnkgdGhlXG4rICogQUZTIHVzZXIgcmVwcmVzZW50ZWQgYnkgdGhlIFJ4IFNlY3VyaXR5IENsYXNzIHRva2VuIGhlbGQgaW4gYSBrZXkuICBSZXR1cm5zXG4rICogMCBpZiBvd25lZCBieSBtZSwgMSBpZiBub3Q7IGNhbiBhbHNvIHJldHVybiBhbiBlcnJvci5cbisgKi9cbitpbnQgYWZzX2lzX293bmVkX2J5X21lKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuK3tcbitcdHN0cnVjdCBhZnNfdm5vZGUgKnZub2RlID0gQUZTX0ZTX0koaW5vZGUpO1xuK1x0YWZzX2FjY2Vzc190IGFjY2VzcztcbitcdHN0cnVjdCBrZXkgKmtleTtcbitcdGludCByZXQ7XG4rXG4rXHRpZiAoU19JU0RJUihpbm9kZS1cdTAwM2VpX21vZGUpKVxuK1x0XHRyZXR1cm4gMTsgLyogVGhlIEFETUlOIHJpZ2h0IGNoZWNrIGRvZXNuJ3Qgd29yayBmb3IgZGlyZWN0b3JpZXMuICovXG4rXG4rXHRrZXkgPSBhZnNfcmVxdWVzdF9rZXkodm5vZGUtXHUwMDNldm9sdW1lLVx1MDAzZWNlbGwpO1xuK1x0aWYgKElTX0VSUihrZXkpKVxuK1x0XHRyZXR1cm4gUFRSX0VSUihrZXkpO1xuK1xuK1x0LyogR2V0IHRoZSBhY2Nlc3MgcmlnaHRzIGZvciB0aGUga2V5IG9uIHRoaXMgZmlsZS4gKi9cbitcdHJldCA9IGFmc19jaGVja19wZXJtaXQodm5vZGUsIGtleSwgXHUwMDI2YWNjZXNzKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyb3I7XG4rXG4rXHQvKiBXZSBnZXQgdGhlIEFETUlOSVNURVIgYml0IGlmIHdlIG93biB0aGUgZmlsZS4gKi9cbitcdHJldCA9IChhY2Nlc3MgXHUwMDI2IEFGU19BQ0VfQURNSU5JU1RFUikgPyAwIDogMTtcbitlcnJvcjpcbitcdGtleV9wdXQoa2V5KTtcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuKy8qXG4rICogRGV0ZXJtaW5lIGlmIGEgZmlsZSBoYXMgdGhlIHNhbWUgb3duZXIgYXMgaXRzIHBhcmVudCAtIHdoYXRldmVyIHRoYXQgbWVhbnNcbisgKiBmb3IgdGhlIGZpbGVzeXN0ZW0uICBJbiB0aGUgY2FzZSBvZiBBRlMsIHRoaXMgbWVhbnMgY29tcGFyaW5nIHRoZWlyIEFGU1xuKyAqIFVJRHMuICBSZXR1cm5zIDAgaWYgc2FtZSwgMSBpZiBub3Qgc2FtZTsgY2FuIGFsc28gcmV0dXJuIGFuIGVycm9yLlxuKyAqL1xuK2ludCBhZnNfaGF2ZV9zYW1lX293bmVyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlMSxcbitcdFx0XHRzdHJ1Y3QgaW5vZGUgKmlub2RlMilcbit7XG4rXHRjb25zdCBzdHJ1Y3QgYWZzX3Zub2RlICp2bm9kZTEgPSBBRlNfRlNfSShpbm9kZTEpO1xuK1x0Y29uc3Qgc3RydWN0IGFmc192bm9kZSAqdm5vZGUyID0gQUZTX0ZTX0koaW5vZGUyKTtcbitcbitcdHJldHVybiB2bm9kZTEtXHUwMDNlc3RhdHVzLm93bmVyICE9IHZub2RlMi1cdTAwM2VzdGF0dXMub3duZXI7XG4rfVxuK1xuIHZvaWQgX19leGl0IGFmc19jbGVhbl91cF9wZXJtaXRfY2FjaGUodm9pZClcbiB7XG4gXHRpbnQgaTtcbmRpZmYgLS1naXQgYS9mcy9hdHRyLmMgYi9mcy9hdHRyLmNcbmluZGV4IDRmNDM3ZmFiYjdmMGY1Li5iN2U4YjVkNDlhOWZlNiAxMDA2NDRcbi0tLSBhL2ZzL2F0dHIuY1xuKysrIGIvZnMvYXR0ci5jXG5AQCAtMTYsNiArMTYsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZjbnRsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9maWxlbG9jay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2VjdXJpdHkuaFx1MDAzZVxuKyNpbmNsdWRlIFwiaW50ZXJuYWwuaFwiXG4gXG4gLyoqXG4gICogc2V0YXR0cl9zaG91bGRfZHJvcF9zZ2lkIC0gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIHNldGdpZCBiaXQgbmVlZHMgdG8gYmVcbkBAIC05MSwxOSArOTIsMjEgQEAgRVhQT1JUX1NZTUJPTChzZXRhdHRyX3Nob3VsZF9kcm9wX3N1aWRnaWQpO1xuICAqIHBlcm1pc3Npb25zLiBPbiBub24taWRtYXBwZWQgbW91bnRzIG9yIGlmIHBlcm1pc3Npb24gY2hlY2tpbmcgaXMgdG8gYmVcbiAgKiBwZXJmb3JtZWQgb24gdGhlIHJhdyBpbm9kZSBzaW1wbHkgcGFzcyBAbm9wX21udF9pZG1hcC5cbiAgKi9cbi1zdGF0aWMgYm9vbCBjaG93bl9vayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbi1cdFx0ICAgICBjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCB2ZnN1aWRfdCBpYV92ZnN1aWQpXG4rc3RhdGljIGludCBjaG93bl9vayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbitcdFx0ICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsIHZmc3VpZF90IGlhX3Zmc3VpZClcbiB7XG4gXHR2ZnN1aWRfdCB2ZnN1aWQgPSBpX3VpZF9pbnRvX3Zmc3VpZChpZG1hcCwgaW5vZGUpO1xuLVx0aWYgKHZmc3VpZF9lcV9rdWlkKHZmc3VpZCwgY3VycmVudF9mc3VpZCgpKSBcdTAwMjZcdTAwMjZcbi1cdCAgICB2ZnN1aWRfZXEoaWFfdmZzdWlkLCB2ZnN1aWQpKVxuLVx0XHRyZXR1cm4gdHJ1ZTtcbitcdGludCByZXQ7XG4rXG4rXHRyZXQgPSB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWUoaWRtYXAsIGlub2RlKTtcbitcdGlmIChyZXQgXHUwMDNjPSAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuIFx0aWYgKGNhcGFibGVfd3J0X2lub2RlX3VpZGdpZChpZG1hcCwgaW5vZGUsIENBUF9DSE9XTikpXG4tXHRcdHJldHVybiB0cnVlO1xuK1x0XHRyZXR1cm4gMDtcbiBcdGlmICghdmZzdWlkX3ZhbGlkKHZmc3VpZCkgXHUwMDI2XHUwMDI2XG4gXHQgICAgbnNfY2FwYWJsZShpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfdXNlcl9ucywgQ0FQX0NIT1dOKSlcbi1cdFx0cmV0dXJuIHRydWU7XG4tXHRyZXR1cm4gZmFsc2U7XG4rXHRcdHJldHVybiAwO1xuK1x0cmV0dXJuIC1FUEVSTTtcbiB9XG4gXG4gLyoqXG5AQCAtMTE4LDIzICsxMjEsMjcgQEAgc3RhdGljIGJvb2wgY2hvd25fb2soc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4gICogcGVybWlzc2lvbnMuIE9uIG5vbi1pZG1hcHBlZCBtb3VudHMgb3IgaWYgcGVybWlzc2lvbiBjaGVja2luZyBpcyB0byBiZVxuICAqIHBlcmZvcm1lZCBvbiB0aGUgcmF3IGlub2RlIHNpbXBseSBwYXNzIEBub3BfbW50X2lkbWFwLlxuICAqL1xuLXN0YXRpYyBib29sIGNoZ3JwX29rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuLVx0XHQgICAgIGNvbnN0IHN0cnVjdCBpbm9kZSAqaW5vZGUsIHZmc2dpZF90IGlhX3Zmc2dpZClcbitzdGF0aWMgaW50IGNoZ3JwX29rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuK1x0XHQgICAgc3RydWN0IGlub2RlICppbm9kZSwgdmZzZ2lkX3QgaWFfdmZzZ2lkKVxuIHtcbiBcdHZmc2dpZF90IHZmc2dpZCA9IGlfZ2lkX2ludG9fdmZzZ2lkKGlkbWFwLCBpbm9kZSk7XG4tXHR2ZnN1aWRfdCB2ZnN1aWQgPSBpX3VpZF9pbnRvX3Zmc3VpZChpZG1hcCwgaW5vZGUpO1xuLVx0aWYgKHZmc3VpZF9lcV9rdWlkKHZmc3VpZCwgY3VycmVudF9mc3VpZCgpKSkge1xuK1x0aW50IHJldDtcbitcbitcdHJldCA9IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShpZG1hcCwgaW5vZGUpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcdGlmIChyZXQgPT0gMCkge1xuIFx0XHRpZiAodmZzZ2lkX2VxKGlhX3Zmc2dpZCwgdmZzZ2lkKSlcbi1cdFx0XHRyZXR1cm4gdHJ1ZTtcbitcdFx0XHRyZXR1cm4gMDtcbiBcdFx0aWYgKHZmc2dpZF9pbl9ncm91cF9wKGlhX3Zmc2dpZCkpXG4tXHRcdFx0cmV0dXJuIHRydWU7XG4rXHRcdFx0cmV0dXJuIDA7XG4gXHR9XG4gXHRpZiAoY2FwYWJsZV93cnRfaW5vZGVfdWlkZ2lkKGlkbWFwLCBpbm9kZSwgQ0FQX0NIT1dOKSlcbi1cdFx0cmV0dXJuIHRydWU7XG4rXHRcdHJldHVybiAwO1xuIFx0aWYgKCF2ZnNnaWRfdmFsaWQodmZzZ2lkKSBcdTAwMjZcdTAwMjZcbiBcdCAgICBuc19jYXBhYmxlKGlub2RlLVx1MDAzZWlfc2ItXHUwMDNlc191c2VyX25zLCBDQVBfQ0hPV04pKVxuLVx0XHRyZXR1cm4gdHJ1ZTtcbi1cdHJldHVybiBmYWxzZTtcbitcdFx0cmV0dXJuIDA7XG4rXHRyZXR1cm4gLUVQRVJNO1xuIH1cbiBcbiAvKipcbkBAIC0xNjMsNiArMTcwLDcgQEAgaW50IHNldGF0dHJfcHJlcGFyZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuIHtcbiBcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkX2lub2RlKGRlbnRyeSk7XG4gXHR1bnNpZ25lZCBpbnQgaWFfdmFsaWQgPSBhdHRyLVx1MDAzZWlhX3ZhbGlkO1xuK1x0aW50IHJldDtcbiBcbiBcdC8qXG4gXHQgKiBGaXJzdCBjaGVjayBzaXplIGNvbnN0cmFpbnRzLiAgVGhlc2UgY2FuJ3QgYmUgb3ZlcnJpZGRlbiB1c2luZ1xuQEAgLTE4OSwxNCArMTk3LDE4IEBAIGludCBzZXRhdHRyX3ByZXBhcmUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbiBcdFx0Z290byBraWxsX3ByaXY7XG4gXG4gXHQvKiBNYWtlIHN1cmUgYSBjYWxsZXIgY2FuIGNob3duLiAqL1xuLVx0aWYgKChpYV92YWxpZCBcdTAwMjYgQVRUUl9VSUQpIFx1MDAyNlx1MDAyNlxuLVx0ICAgICFjaG93bl9vayhpZG1hcCwgaW5vZGUsIGF0dHItXHUwMDNlaWFfdmZzdWlkKSlcbi1cdFx0cmV0dXJuIC1FUEVSTTtcbitcdGlmIChpYV92YWxpZCBcdTAwMjYgQVRUUl9VSUQpIHtcbitcdFx0cmV0ID0gY2hvd25fb2soaWRtYXAsIGlub2RlLCBhdHRyLVx1MDAzZWlhX3Zmc3VpZCk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcdH1cbiBcbiBcdC8qIE1ha2Ugc3VyZSBjYWxsZXIgY2FuIGNoZ3JwLiAqL1xuLVx0aWYgKChpYV92YWxpZCBcdTAwMjYgQVRUUl9HSUQpIFx1MDAyNlx1MDAyNlxuLVx0ICAgICFjaGdycF9vayhpZG1hcCwgaW5vZGUsIGF0dHItXHUwMDNlaWFfdmZzZ2lkKSlcbi1cdFx0cmV0dXJuIC1FUEVSTTtcbitcdGlmIChpYV92YWxpZCBcdTAwMjYgQVRUUl9HSUQpIHtcbitcdFx0cmV0ID0gY2hncnBfb2soaWRtYXAsIGlub2RlLCBhdHRyLVx1MDAzZWlhX3Zmc2dpZCk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcdH1cbiBcbiBcdC8qIE1ha2Ugc3VyZSBhIGNhbGxlciBjYW4gY2htb2QuICovXG4gXHRpZiAoaWFfdmFsaWQgXHUwMDI2IEFUVFJfTU9ERSkge1xuZGlmZiAtLWdpdCBhL2ZzL2NvcmVkdW1wLmMgYi9mcy9jb3JlZHVtcC5jXG5pbmRleCBlNjhhNzZmZjkyYTM4Ni4uM2YzMmU3M2FhZWRhMjggMTAwNjQ0XG4tLS0gYS9mcy9jb3JlZHVtcC5jXG4rKysgYi9mcy9jb3JlZHVtcC5jXG5AQCAtOTU0LDcgKzk1NCw3IEBAIHN0YXRpYyBib29sIGNvcmVkdW1wX2ZpbGUoc3RydWN0IGNvcmVfbmFtZSAqY24sIHN0cnVjdCBjb3JlZHVtcF9wYXJhbXMgKmNwcm0sXG4gXHQgKiBmaWxlc3lzdGVtLlxuIFx0ICovXG4gXHRpZG1hcCA9IGZpbGVfbW50X2lkbWFwKGZpbGUpO1xuLVx0aWYgKCF2ZnN1aWRfZXFfa3VpZChpX3VpZF9pbnRvX3Zmc3VpZChpZG1hcCwgaW5vZGUpLCBjdXJyZW50X2ZzdWlkKCkpKSB7XG4rXHRpZiAodmZzX2lub2RlX2lzX293bmVkX2J5X21lKGlkbWFwLCBpbm9kZSkgIT0gMCkge1xuIFx0XHRjb3JlZHVtcF9yZXBvcnRfZmFpbHVyZShcIkNvcmUgZHVtcCB0byAlcyBhYm9ydGVkOiBjYW5ub3QgcHJlc2VydmUgZmlsZSBvd25lclwiLCBjbi1cdTAwM2Vjb3JlbmFtZSk7XG4gXHRcdHJldHVybiBmYWxzZTtcbiBcdH1cbmRpZmYgLS1naXQgYS9mcy9pbm9kZS5jIGIvZnMvaW5vZGUuY1xuaW5kZXggMzFjNWI5ZWUzYTgxZGYuLmE3ZWM4MzBhYjY4M2YwIDEwMDY0NFxuLS0tIGEvZnMvaW5vZGUuY1xuKysrIGIvZnMvaW5vZGUuY1xuQEAgLTI3NTAsMTYgKzI3NTAsMTkgQEAgRVhQT1JUX1NZTUJPTChpbm9kZV9pbml0X293bmVyKTtcbiAgKiBPbiBub24taWRtYXBwZWQgbW91bnRzIG9yIGlmIHBlcm1pc3Npb24gY2hlY2tpbmcgaXMgdG8gYmUgcGVyZm9ybWVkIG9uIHRoZVxuICAqIHJhdyBpbm9kZSBzaW1wbHkgcGFzcyBAbm9wX21udF9pZG1hcC5cbiAgKi9cbi1ib29sIGlub2RlX293bmVyX29yX2NhcGFibGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4tXHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4rYm9vbCBpbm9kZV9vd25lcl9vcl9jYXBhYmxlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIHtcbiBcdHZmc3VpZF90IHZmc3VpZDtcbiBcdHN0cnVjdCB1c2VyX25hbWVzcGFjZSAqbnM7XG4rXHRpbnQgcmV0O1xuIFxuLVx0dmZzdWlkID0gaV91aWRfaW50b192ZnN1aWQoaWRtYXAsIGlub2RlKTtcbi1cdGlmICh2ZnN1aWRfZXFfa3VpZCh2ZnN1aWQsIGN1cnJlbnRfZnN1aWQoKSkpXG4rXHRyZXQgPSB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWUoaWRtYXAsIGlub2RlKTtcbitcdGlmIChyZXQgPT0gMClcbiBcdFx0cmV0dXJuIHRydWU7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4gXG4rXHR2ZnN1aWQgPSBpX3VpZF9pbnRvX3Zmc3VpZChpZG1hcCwgaW5vZGUpO1xuIFx0bnMgPSBjdXJyZW50X3VzZXJfbnMoKTtcbiBcdGlmICh2ZnN1aWRfaGFzX21hcHBpbmcobnMsIHZmc3VpZCkgXHUwMDI2XHUwMDI2IG5zX2NhcGFibGUobnMsIENBUF9GT1dORVIpKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbmRpZmYgLS1naXQgYS9mcy9pbnRlcm5hbC5oIGIvZnMvaW50ZXJuYWwuaFxuaW5kZXggMzU1ZDkzZjkyMjA4NjEuLmJlNDVjYzYzODg2MTkyIDEwMDY0NFxuLS0tIGEvZnMvaW50ZXJuYWwuaFxuKysrIGIvZnMvaW50ZXJuYWwuaFxuQEAgLTUxLDYgKzUxLDcgQEAgZXh0ZXJuIGludCBmaW5pc2hfY2xlYW5fY29udGV4dChzdHJ1Y3QgZnNfY29udGV4dCAqZmMpO1xuIC8qXG4gICogbmFtZWkuY1xuICAqL1xuK2ludCB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xuIGV4dGVybiBpbnQgZmlsZW5hbWVfbG9va3VwKGludCBkZmQsIHN0cnVjdCBmaWxlbmFtZSAqbmFtZSwgdW5zaWduZWQgZmxhZ3MsXG4gXHRcdFx0ICAgc3RydWN0IHBhdGggKnBhdGgsIGNvbnN0IHN0cnVjdCBwYXRoICpyb290KTtcbiBpbnQgZmlsZW5hbWVfcm1kaXIoaW50IGRmZCwgc3RydWN0IGZpbGVuYW1lICpuYW1lKTtcbmRpZmYgLS1naXQgYS9mcy9sb2Nrcy5jIGIvZnMvbG9ja3MuY1xuaW5kZXggNmU0ZmY3ZmNlYzA1M2UuLjAyZjgxMGRjOWU3ZTdhIDEwMDY0NFxuLS0tIGEvZnMvbG9ja3MuY1xuKysrIGIvZnMvbG9ja3MuY1xuQEAgLTY4LDYgKzY4LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2N0cmFjZS9ldmVudHMvZmlsZWxvY2suaFx1MDAzZVxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3VhY2Nlc3MuaFx1MDAzZVxuKyNpbmNsdWRlIFwiaW50ZXJuYWwuaFwiXG4gXG4gc3RhdGljIHN0cnVjdCBmaWxlX2xvY2sgKmZpbGVfbG9jayhzdHJ1Y3QgZmlsZV9sb2NrX2NvcmUgKmZsYylcbiB7XG5AQCAtMjEzNiwxMCArMjEzNywxMiBAQCBpbnRcbiB2ZnNfc2V0bGVhc2Uoc3RydWN0IGZpbGUgKmZpbHAsIGludCBhcmcsIHN0cnVjdCBmaWxlX2xlYXNlICoqbGVhc2UsIHZvaWQgKipwcml2KVxuIHtcbiBcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlX2lub2RlKGZpbHApO1xuLVx0dmZzdWlkX3QgdmZzdWlkID0gaV91aWRfaW50b192ZnN1aWQoZmlsZV9tbnRfaWRtYXAoZmlscCksIGlub2RlKTtcbiBcdGludCBlcnJvcjtcbiBcbi1cdGlmICgoIXZmc3VpZF9lcV9rdWlkKHZmc3VpZCwgY3VycmVudF9mc3VpZCgpKSkgXHUwMDI2XHUwMDI2ICFjYXBhYmxlKENBUF9MRUFTRSkpXG4rXHRlcnJvciA9IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShmaWxlX21udF9pZG1hcChmaWxwKSwgaW5vZGUpO1xuK1x0aWYgKGVycm9yIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gZXJyb3I7XG4rXHRpZiAoZXJyb3IgIT0gMCBcdTAwMjZcdTAwMjYgIWNhcGFibGUoQ0FQX0xFQVNFKSlcbiBcdFx0cmV0dXJuIC1FQUNDRVM7XG4gXHRlcnJvciA9IHNlY3VyaXR5X2ZpbGVfbG9jayhmaWxwLCBhcmcpO1xuIFx0aWYgKGVycm9yKVxuZGlmZiAtLWdpdCBhL2ZzL25hbWVpLmMgYi9mcy9uYW1laS5jXG5pbmRleCAxOWNlNDNjOWE2ZTY2Mi4uNzJmOTRkMjA0ZjkzZjQgMTAwNjQ0XG4tLS0gYS9mcy9uYW1laS5jXG4rKysgYi9mcy9uYW1laS5jXG5AQCAtNTUsOCArNTUsOCBAQFxuICAqIFRoZSBuZXcgY29kZSByZXBsYWNlcyB0aGUgb2xkIHJlY3Vyc2l2ZSBzeW1saW5rIHJlc29sdXRpb24gd2l0aFxuICAqIGFuIGl0ZXJhdGl2ZSBvbmUgKGluIGNhc2Ugb2Ygbm9uLW5lc3RlZCBzeW1saW5rIGNoYWlucykuICBJdCBkb2VzXG4gICogdGhpcyB3aXRoIGNhbGxzIHRvIFx1MDAzY2ZzXHUwMDNlX2ZvbGxvd19saW5rKCkuXG4tICogQXMgYSBzaWRlIGVmZmVjdCwgZGlyX25hbWVpKCksIF9uYW1laSgpIGFuZCBmb2xsb3dfbGluaygpIGFyZSBub3cgXG4tICogcmVwbGFjZWQgd2l0aCBhIHNpbmdsZSBmdW5jdGlvbiBsb29rdXBfZGVudHJ5KCkgdGhhdCBjYW4gaGFuZGxlIGFsbCBcbisgKiBBcyBhIHNpZGUgZWZmZWN0LCBkaXJfbmFtZWkoKSwgX25hbWVpKCkgYW5kIGZvbGxvd19saW5rKCkgYXJlIG5vd1xuKyAqIHJlcGxhY2VkIHdpdGggYSBzaW5nbGUgZnVuY3Rpb24gbG9va3VwX2RlbnRyeSgpIHRoYXQgY2FuIGhhbmRsZSBhbGxcbiAgKiB0aGUgc3BlY2lhbCBjYXNlcyBvZiB0aGUgZm9ybWVyIGNvZGUuXG4gICpcbiAgKiBXaXRoIHRoZSBuZXcgZGNhY2hlLCB0aGUgcGF0aG5hbWUgaXMgc3RvcmVkIGF0IGVhY2ggaW5vZGUsIGF0IGxlYXN0IGFzXG5AQCAtMTI1NSw2ICsxMjU1LDcyIEBAIGZzX2luaXRjYWxsKGluaXRfZnNfbmFtZWlfc3lzY3Rscyk7XG4gXG4gI2VuZGlmIC8qIENPTkZJR19TWVNDVEwgKi9cbiBcbisvKlxuKyAqIERldGVybWluZSBpZiBhbiBpbm9kZSBpcyBvd25lZCBieSB0aGUgcHJvY2VzcyAoYWxsb3dpbmcgZm9yIGZzdWlkIG92ZXJyaWRlKSxcbisgKiByZXR1cm5pbmcgMCBpZiBzbywgMSBpZiBub3QgYW5kIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBpZiB0aGVyZSB3YXMgYSBwcm9ibGVtXG4rICogbWFraW5nIHRoZSBkZXRlcm1pbmF0aW9uLlxuKyAqL1xuK2ludCB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4re1xuK1x0aWYgKHVubGlrZWx5KGlub2RlLVx1MDAzZWlfb3BmbGFncyBcdTAwMjYgSU9QX09XTkVSU0hJUF9PVkVSUklERSkpXG4rXHRcdHJldHVybiBpbm9kZS1cdTAwM2VpX29wLVx1MDAzZWlzX293bmVkX2J5X21lKGlkbWFwLCBpbm9kZSk7XG4rXHRpZiAodmZzdWlkX2VxX2t1aWQoaV91aWRfaW50b192ZnN1aWQoaWRtYXAsIGlub2RlKSwgY3VycmVudF9mc3VpZCgpKSlcbitcdFx0cmV0dXJuIDA7XG4rXHRyZXR1cm4gMTsgLyogTm90IHNhbWUuICovXG4rfVxuK1xuKy8qXG4rICogRGV0ZXJtaW5lIGlmIGFuIGlub2RlIGhhcyB0aGUgc2FtZSBvd25lciBhcyBpdHMgcGFyZW50IGRpcmVjdG9yeSwgcmV0dXJuaW5nXG4rICogMCBpZiBzbywgMSBpZiBub3QgYW5kIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBpZiB0aGVyZSB3YXMgYSBwcm9ibGVtIG1ha2luZ1xuKyAqIHRoZSBkZXRlcm1pbmF0aW9uLlxuKyAqL1xuK3N0YXRpYyBpbnQgdmZzX2lub2RlX2FuZF9kaXJfaGF2ZV9zYW1lX293bmVyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuK1x0XHRcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBuYW1laWRhdGEgKm5kKVxuK3tcbitcdGlmICh1bmxpa2VseShpbm9kZS1cdTAwM2VpX29wZmxhZ3MgXHUwMDI2IElPUF9PV05FUlNISVBfT1ZFUlJJREUpKSB7XG4rXHRcdHN0cnVjdCBkZW50cnkgKnBhcmVudDtcbitcdFx0c3RydWN0IGlub2RlICpkaXI7XG4rXHRcdGludCByZXQ7XG4rXG4rXHRcdGlmIChpbm9kZSAhPSBuZC1cdTAwM2Vpbm9kZSkge1xuK1x0XHRcdGRpciA9IG5kLVx1MDAzZWlub2RlO1xuK1x0XHRcdHJldCA9IGlub2RlLVx1MDAzZWlfb3AtXHUwMDNlaGF2ZV9zYW1lX293bmVyKGlkbWFwLCBpbm9kZSwgZGlyKTtcbitcdFx0fSBlbHNlIGlmIChuZC1cdTAwM2VmbGFncyBcdTAwMjYgTE9PS1VQX1JDVSkge1xuK1x0XHRcdHBhcmVudCA9IFJFQURfT05DRShuZC1cdTAwM2VwYXRoLmRlbnRyeSk7XG4rXHRcdFx0ZGlyID0gUkVBRF9PTkNFKHBhcmVudC1cdTAwM2VkX2lub2RlKTtcbitcdFx0XHRpZiAoIWRpcilcbitcdFx0XHRcdHJldHVybiAtRUNISUxEO1xuK1x0XHRcdHJldCA9IGlub2RlLVx1MDAzZWlfb3AtXHUwMDNlaGF2ZV9zYW1lX293bmVyKGlkbWFwLCBpbm9kZSwgZGlyKTtcbitcdFx0fSBlbHNlIHtcbitcdFx0XHRwYXJlbnQgPSBkZ2V0X3BhcmVudChuZC1cdTAwM2VwYXRoLmRlbnRyeSk7XG4rXHRcdFx0ZGlyID0gcGFyZW50LVx1MDAzZWRfaW5vZGU7XG4rXHRcdFx0cmV0ID0gaW5vZGUtXHUwMDNlaV9vcC1cdTAwM2VoYXZlX3NhbWVfb3duZXIoaWRtYXAsIGlub2RlLCBkaXIpO1xuK1x0XHRcdGRwdXQocGFyZW50KTtcbitcdFx0fVxuK1x0XHRyZXR1cm4gcmV0O1xuK1x0fVxuK1xuK1x0aWYgKHZmc3VpZF92YWxpZChuZC1cdTAwM2VkaXJfdmZzdWlkKSBcdTAwMjZcdTAwMjZcbitcdCAgICB2ZnN1aWRfZXEoaV91aWRfaW50b192ZnN1aWQoaWRtYXAsIGlub2RlKSwgbmQtXHUwMDNlZGlyX3Zmc3VpZCkpXG4rXHRcdHJldHVybiAwO1xuK1x0cmV0dXJuIDE7IC8qIE5vdCBzYW1lLiAqL1xuK31cbitcbisvKlxuKyAqIERldGVybWluZSBpZiB0d28gaW5vZGVzIGhhdmUgdGhlIHNhbWUgb3duZXIsIHJldHVybmluZyAwIGlmIHNvLCAxIGlmIG5vdCBhbmRcbisgKiBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgaWYgdGhlcmUgd2FzIGEgcHJvYmxlbSBtYWtpbmcgdGhlIGRldGVybWluYXRpb24uXG4rICovXG4rc3RhdGljIGludCB2ZnNfaW5vZGVzX2hhdmVfc2FtZV9vd25lcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSxcbitcdFx0XHRcdCAgICAgIHN0cnVjdCBpbm9kZSAqZGlyKVxuK3tcbitcdGlmICh1bmxpa2VseShpbm9kZS1cdTAwM2VpX29wZmxhZ3MgXHUwMDI2IElPUF9PV05FUlNISVBfT1ZFUlJJREUpKVxuK1x0XHRyZXR1cm4gaW5vZGUtXHUwMDNlaV9vcC1cdTAwM2VoYXZlX3NhbWVfb3duZXIoaWRtYXAsIGlub2RlLCBkaXIpO1xuK1x0aWYgKHZmc3VpZF9lcShpX3VpZF9pbnRvX3Zmc3VpZChpZG1hcCwgaW5vZGUpLFxuK1x0XHQgICAgICBpX3VpZF9pbnRvX3Zmc3VpZChpZG1hcCwgZGlyKSkpXG4rXHRcdHJldHVybiAwO1xuK1x0cmV0dXJuIDE7IC8qIE5vdCBzYW1lLiAqL1xuK31cbitcbiAvKipcbiAgKiBtYXlfZm9sbG93X2xpbmsgLSBDaGVjayBzeW1saW5rIGZvbGxvd2luZyBmb3IgdW5zYWZlIHNpdHVhdGlvbnNcbiAgKiBAbmQ6IG5hbWVpZGF0YSBwYXRod2FsayBkYXRhXG5AQCAtMTI3MSwyNyArMTMzNywyOCBAQCBmc19pbml0Y2FsbChpbml0X2ZzX25hbWVpX3N5c2N0bHMpO1xuICAqXG4gICogUmV0dXJucyAwIGlmIGZvbGxvd2luZyB0aGUgc3ltbGluayBpcyBhbGxvd2VkLCAtdmUgb24gZXJyb3IuXG4gICovXG4tc3RhdGljIGlubGluZSBpbnQgbWF5X2ZvbGxvd19saW5rKHN0cnVjdCBuYW1laWRhdGEgKm5kLCBjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuK3N0YXRpYyBpbmxpbmUgaW50IG1heV9mb2xsb3dfbGluayhzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgc3RydWN0IGlub2RlICppbm9kZSlcbiB7XG4gXHRzdHJ1Y3QgbW50X2lkbWFwICppZG1hcDtcbi1cdHZmc3VpZF90IHZmc3VpZDtcbitcdGludCByZXQ7XG4gXG4gXHRpZiAoIXN5c2N0bF9wcm90ZWN0ZWRfc3ltbGlua3MpXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0aWRtYXAgPSBtbnRfaWRtYXAobmQtXHUwMDNlcGF0aC5tbnQpO1xuLVx0dmZzdWlkID0gaV91aWRfaW50b192ZnN1aWQoaWRtYXAsIGlub2RlKTtcbi1cdC8qIEFsbG93ZWQgaWYgb3duZXIgYW5kIGZvbGxvd2VyIG1hdGNoLiAqL1xuLVx0aWYgKHZmc3VpZF9lcV9rdWlkKHZmc3VpZCwgY3VycmVudF9mc3VpZCgpKSlcbi1cdFx0cmV0dXJuIDA7XG4tXG4gXHQvKiBBbGxvd2VkIGlmIHBhcmVudCBkaXJlY3Rvcnkgbm90IHN0aWNreSBhbmQgd29ybGQtd3JpdGFibGUuICovXG4gXHRpZiAoKG5kLVx1MDAzZWRpcl9tb2RlIFx1MDAyNiAoU19JU1ZUWHxTX0lXT1RIKSkgIT0gKFNfSVNWVFh8U19JV09USCkpXG4gXHRcdHJldHVybiAwO1xuIFxuK1x0aWRtYXAgPSBtbnRfaWRtYXAobmQtXHUwMDNlcGF0aC5tbnQpO1xuK1x0LyogQWxsb3dlZCBpZiBvd25lciBhbmQgZm9sbG93ZXIgbWF0Y2guICovXG4rXHRyZXQgPSB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWUoaWRtYXAsIGlub2RlKTtcbitcdGlmIChyZXQgXHUwMDNjPSAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuIFx0LyogQWxsb3dlZCBpZiBwYXJlbnQgZGlyZWN0b3J5IGFuZCBsaW5rIG93bmVyIG1hdGNoLiAqL1xuLVx0aWYgKHZmc3VpZF92YWxpZChuZC1cdTAwM2VkaXJfdmZzdWlkKSBcdTAwMjZcdTAwMjYgdmZzdWlkX2VxKG5kLVx1MDAzZWRpcl92ZnN1aWQsIHZmc3VpZCkpXG4tXHRcdHJldHVybiAwO1xuK1x0cmV0ID0gdmZzX2lub2RlX2FuZF9kaXJfaGF2ZV9zYW1lX293bmVyKGlkbWFwLCBpbm9kZSwgbmQpO1xuK1x0aWYgKHJldCBcdTAwM2M9IDApXG4rXHRcdHJldHVybiByZXQ7XG4gXG4gXHRpZiAobmQtXHUwMDNlZmxhZ3MgXHUwMDI2IExPT0tVUF9SQ1UpXG4gXHRcdHJldHVybiAtRUNISUxEO1xuQEAgLTEzODksMTIgKzE0NTYsMTIgQEAgaW50IG1heV9saW5rYXQoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIGNvbnN0IHN0cnVjdCBwYXRoICpsaW5rKVxuICAqIEBpbm9kZTogdGhlIGlub2RlIG9mIHRoZSBmaWxlIHRvIG9wZW5cbiAgKlxuICAqIEJsb2NrIGFuIE9fQ1JFQVQgb3BlbiBvZiBhIEZJRk8gKG9yIGEgcmVndWxhciBmaWxlKSB3aGVuOlxuLSAqICAgLSBzeXNjdGxfcHJvdGVjdGVkX2ZpZm9zIChvciBzeXNjdGxfcHJvdGVjdGVkX3JlZ3VsYXIpIGlzIGVuYWJsZWRcbi0gKiAgIC0gdGhlIGZpbGUgYWxyZWFkeSBleGlzdHNcbi0gKiAgIC0gd2UgYXJlIGluIGEgc3RpY2t5IGRpcmVjdG9yeVxuLSAqICAgLSB3ZSBkb24ndCBvd24gdGhlIGZpbGVcbisgKiAgIC0gc3lzY3RsX3Byb3RlY3RlZF9maWZvcyAob3Igc3lzY3RsX3Byb3RlY3RlZF9yZWd1bGFyKSBpcyBlbmFibGVkLFxuKyAqICAgLSB0aGUgZmlsZSBhbHJlYWR5IGV4aXN0cyxcbisgKiAgIC0gd2UgYXJlIGluIGEgc3RpY2t5IGRpcmVjdG9yeSxcbisgKiAgIC0gdGhlIGRpcmVjdG9yeSBpcyB3b3JsZCB3cml0YWJsZSxcbisgKiAgIC0gd2UgZG9uJ3Qgb3duIHRoZSBmaWxlIGFuZFxuICAqICAgLSB0aGUgb3duZXIgb2YgdGhlIGRpcmVjdG9yeSBkb2Vzbid0IG93biB0aGUgZmlsZVxuLSAqICAgLSB0aGUgZGlyZWN0b3J5IGlzIHdvcmxkIHdyaXRhYmxlXG4gICogSWYgdGhlIHN5c2N0bF9wcm90ZWN0ZWRfZmlmb3MgKG9yIHN5c2N0bF9wcm90ZWN0ZWRfcmVndWxhcikgaXMgc2V0IHRvIDJcbiAgKiB0aGUgZGlyZWN0b3J5IGRvZXNuJ3QgaGF2ZSB0byBiZSB3b3JsZCB3cml0YWJsZTogYmVpbmcgZ3JvdXAgd3JpdGFibGUgd2lsbFxuICAqIGJlIGVub3VnaC5cbkBAIC0xNDA1LDEzICsxNDcyLDQ1IEBAIGludCBtYXlfbGlua2F0KHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBjb25zdCBzdHJ1Y3QgcGF0aCAqbGluaylcbiAgKiBPbiBub24taWRtYXBwZWQgbW91bnRzIG9yIGlmIHBlcm1pc3Npb24gY2hlY2tpbmcgaXMgdG8gYmUgcGVyZm9ybWVkIG9uIHRoZVxuICAqIHJhdyBpbm9kZSBzaW1wbHkgcGFzcyBAbm9wX21udF9pZG1hcC5cbiAgKlxuKyAqIEZvciBhIGZpbGVzeXN0ZW0gKGUuZy4gYSBuZXR3b3JrIGZpbGVzeXN0ZW0pIHRoYXQgaGFzIGEgc2VwYXJhdGUgSUQgc3BhY2VcbisgKiBhbmQgaGFzIGZvcmVpZ24gSURzIChtYXliZSBldmVuIG5vbi1pbnRlZ2VyIElEcyksIGlfdWlkIGNhbm5vdCBiZSBjb21wYXJlZFxuKyAqIHRvIGN1cnJlbnRfZnN1aWQoKSBhbmQgbWF5IG5vdCBiZSBkaXJlY3RseSBjb21wYXJhYmxlIHRvIGFub3RoZXIgaV91aWQuXG4rICogSW5zdGVhZCwgdGhlIGZpbGVzeXN0ZW0gaXMgYXNrZWQgdG8gcGVyZm9ybSB0aGUgY29tcGFyaXNvbnMuICBXaXRoIG5ldHdvcmtcbisgKiBmaWxlc3lzdGVtcywgdGhlcmUgYWxzbyBleGlzdHMgdGhlIHBvc3NpYmlsaXR5IG9mIGRvaW5nIGFub255bW91c1xuKyAqIG9wZXJhdGlvbnMgYW5kIGhhdmluZyBhbm9ueW1vdXNseS1vd25lZCBvYmplY3RzLlxuKyAqXG4rICogV2UgaGF2ZSB0aGUgZm9sbG93aW5nIHNjZW5hcmlvczpcbisgKlxuKyAqXHRVU0VSXHRESVJcdEZJTEVcdEZJTEVcdEFMTE9XRURcbisgKlx0XHRPV05FUlx0T1dORVJcdFNUQVRFXG4rICpcdD09PT09PT1cdD09PT09PT1cdD09PT09PT1cdD09PT09PT1cdD09PT09PT1cbisgKlx0QVx0QVx0LVx0TmV3XHRZZXNcbisgKlx0QVx0QVx0QVx0RXhpc3RzXHRZZXNcbisgKlx0QVx0QVx0Q1x0RXhpc3RzXHROb1xuKyAqXHRBXHRCXHQtXHROZXdcdFllc1xuKyAqXHRBXHRCXHRBXHRFeGlzdHNcdFllcywgRk89PVVcbisgKlx0QVx0Qlx0Qlx0RXhpc3RzXHRZZXMsIEZPPT1ET1xuKyAqXHRBXHRCXHRDXHRFeGlzdHNcdE5vXG4rICpcdEFcdGFub25bMV1cdC1cdE5ld1x0WWVzXG4rICpcdEFcdGFub25bMV1cdEFcdEV4aXN0c1x0WWVzXG4rICpcdEFcdGFub25bMV1cdENcdEV4aXN0c1x0Tm9cbisgKlx0YW5vblx0QVx0LVx0TmV3XHRZZXNcbisgKlx0YW5vblx0QVx0QVx0RXhpc3RzXHRZZXMsIEZPPT1ET1xuKyAqXHRhbm9uXHRhbm9uWzFdXHQtXHROZXdcdFllc1xuKyAqXHRhbm9uXHRhbm9uWzFdXHQtXHRFeGlzdHNcdE5vXG4rICpcdGFub25cdEFcdEFcdEV4aXN0c1x0WWVzLCBGTz09RE9cbisgKlx0YW5vblx0QVx0Q1x0RXhpc3RzXHROb1xuKyAqXHRhbm9uXHRBXHRhbm9uXHRFeGlzdHNcdE5vXG4rICpcbisgKiBbMV0gQ2FuIGFub255bW91c2x5LW93bmVkIGRpcnMgYmUgc3RpY2t5P1xuKyAqXG4gICogUmV0dXJucyAwIGlmIHRoZSBvcGVuIGlzIGFsbG93ZWQsIC12ZSBvbiBlcnJvci5cbiAgKi9cbiBzdGF0aWMgaW50IG1heV9jcmVhdGVfaW5fc3RpY2t5KHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgbmFtZWlkYXRhICpuZCxcbi1cdFx0XHRcdHN0cnVjdCBpbm9kZSAqY29uc3QgaW5vZGUpXG4rXHRcdFx0XHRzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIHtcbiBcdHVtb2RlX3QgZGlyX21vZGUgPSBuZC1cdTAwM2VkaXJfbW9kZTtcbi1cdHZmc3VpZF90IGRpcl92ZnN1aWQgPSBuZC1cdTAwM2VkaXJfdmZzdWlkLCBpX3Zmc3VpZDtcbitcdGludCByZXQ7XG4gXG4gXHRpZiAobGlrZWx5KCEoZGlyX21vZGUgXHUwMDI2IFNfSVNWVFgpKSlcbiBcdFx0cmV0dXJuIDA7XG5AQCAtMTQyMiwxMyArMTUyMSwxMyBAQCBzdGF0aWMgaW50IG1heV9jcmVhdGVfaW5fc3RpY2t5KHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgbmFtZWlkYXRhICpuZCxcbiBcdGlmIChTX0lTRklGTyhpbm9kZS1cdTAwM2VpX21vZGUpIFx1MDAyNlx1MDAyNiAhc3lzY3RsX3Byb3RlY3RlZF9maWZvcylcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHRpX3Zmc3VpZCA9IGlfdWlkX2ludG9fdmZzdWlkKGlkbWFwLCBpbm9kZSk7XG4tXG4tXHRpZiAodmZzdWlkX2VxKGlfdmZzdWlkLCBkaXJfdmZzdWlkKSlcbi1cdFx0cmV0dXJuIDA7XG4rXHRyZXQgPSB2ZnNfaW5vZGVfYW5kX2Rpcl9oYXZlX3NhbWVfb3duZXIoaWRtYXAsIGlub2RlLCBuZCk7XG4rXHRpZiAocmV0IFx1MDAzYz0gMClcbitcdFx0cmV0dXJuIHJldDtcbiBcbi1cdGlmICh2ZnN1aWRfZXFfa3VpZChpX3Zmc3VpZCwgY3VycmVudF9mc3VpZCgpKSlcbi1cdFx0cmV0dXJuIDA7XG4rXHRyZXQgPSB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWUoaWRtYXAsIGlub2RlKTtcbitcdGlmIChyZXQgXHUwMDNjPSAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuIFxuIFx0aWYgKGxpa2VseShkaXJfbW9kZSBcdTAwMjYgMDAwMikpIHtcbiBcdFx0YXVkaXRfbG9nX3BhdGhfZGVuaWVkKEFVRElUX0FOT01fQ1JFQVQsIFwic3RpY2t5X2NyZWF0ZVwiKTtcbkBAIC0zNjQ1LDEyICszNzQ0LDE0IEBAIEVYUE9SVF9TWU1CT0wodXNlcl9wYXRoX2F0KTtcbiBpbnQgX19jaGVja19zdGlja3koc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0XHQgICBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIHtcbi1cdGt1aWRfdCBmc3VpZCA9IGN1cnJlbnRfZnN1aWQoKTtcbitcdGludCByZXQ7XG4gXG4tXHRpZiAodmZzdWlkX2VxX2t1aWQoaV91aWRfaW50b192ZnN1aWQoaWRtYXAsIGlub2RlKSwgZnN1aWQpKVxuLVx0XHRyZXR1cm4gMDtcbi1cdGlmICh2ZnN1aWRfZXFfa3VpZChpX3VpZF9pbnRvX3Zmc3VpZChpZG1hcCwgZGlyKSwgZnN1aWQpKVxuLVx0XHRyZXR1cm4gMDtcbitcdHJldCA9IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShpZG1hcCwgaW5vZGUpO1xuK1x0aWYgKHJldCBcdTAwM2M9IDApXG4rXHRcdHJldHVybiByZXQ7XG4rXHRyZXQgPSB2ZnNfaW5vZGVzX2hhdmVfc2FtZV9vd25lcihpZG1hcCwgaW5vZGUsIGRpcik7XG4rXHRpZiAocmV0IFx1MDAzYz0gMClcbitcdFx0cmV0dXJuIHJldDtcbiBcdHJldHVybiAhY2FwYWJsZV93cnRfaW5vZGVfdWlkZ2lkKGlkbWFwLCBpbm9kZSwgQ0FQX0ZPV05FUik7XG4gfVxuIEVYUE9SVF9TWU1CT0woX19jaGVja19zdGlja3kpO1xuZGlmZiAtLWdpdCBhL2ZzL3JlbWFwX3JhbmdlLmMgYi9mcy9yZW1hcF9yYW5nZS5jXG5pbmRleCAyNmFmYmJiZmIxMGMyZS4uOWVlZTkzYzI3MDAxMjUgMTAwNjQ0XG4tLS0gYS9mcy9yZW1hcF9yYW5nZS5jXG4rKysgYi9mcy9yZW1hcF9yYW5nZS5jXG5AQCAtNDEzLDIwICs0MTMsMjIgQEAgbG9mZl90IHZmc19jbG9uZV9maWxlX3JhbmdlKHN0cnVjdCBmaWxlICpmaWxlX2luLCBsb2ZmX3QgcG9zX2luLFxuIEVYUE9SVF9TWU1CT0wodmZzX2Nsb25lX2ZpbGVfcmFuZ2UpO1xuIFxuIC8qIENoZWNrIHdoZXRoZXIgd2UgYXJlIGFsbG93ZWQgdG8gZGVkdXBlIHRoZSBkZXN0aW5hdGlvbiBmaWxlICovXG4tc3RhdGljIGJvb2wgbWF5X2RlZHVwZV9maWxlKHN0cnVjdCBmaWxlICpmaWxlKVxuK3N0YXRpYyBpbnQgbWF5X2RlZHVwZV9maWxlKHN0cnVjdCBmaWxlICpmaWxlKVxuIHtcbiBcdHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwID0gZmlsZV9tbnRfaWRtYXAoZmlsZSk7XG4gXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZV9pbm9kZShmaWxlKTtcbitcdGludCByZXQ7XG4gXG4gXHRpZiAoY2FwYWJsZShDQVBfU1lTX0FETUlOKSlcbi1cdFx0cmV0dXJuIHRydWU7XG4rXHRcdHJldHVybiAwO1xuIFx0aWYgKGZpbGUtXHUwMDNlZl9tb2RlIFx1MDAyNiBGTU9ERV9XUklURSlcbi1cdFx0cmV0dXJuIHRydWU7XG4tXHRpZiAodmZzdWlkX2VxX2t1aWQoaV91aWRfaW50b192ZnN1aWQoaWRtYXAsIGlub2RlKSwgY3VycmVudF9mc3VpZCgpKSlcbi1cdFx0cmV0dXJuIHRydWU7XG4rXHRcdHJldHVybiAwO1xuK1x0cmV0ID0gdmZzX2lub2RlX2lzX293bmVkX2J5X21lKGlkbWFwLCBpbm9kZSk7XG4rXHRpZiAocmV0IFx1MDAzYz0gMClcbitcdFx0cmV0dXJuIHJldDtcbiBcdGlmICghaW5vZGVfcGVybWlzc2lvbihpZG1hcCwgaW5vZGUsIE1BWV9XUklURSkpXG4tXHRcdHJldHVybiB0cnVlO1xuLVx0cmV0dXJuIGZhbHNlO1xuK1x0XHRyZXR1cm4gMDtcbitcdHJldHVybiAtRVBFUk07XG4gfVxuIFxuIGxvZmZfdCB2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2Vfb25lKHN0cnVjdCBmaWxlICpzcmNfZmlsZSwgbG9mZl90IHNyY19wb3MsXG5AQCAtNDU5LDggKzQ2MSw4IEBAIGxvZmZfdCB2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2Vfb25lKHN0cnVjdCBmaWxlICpzcmNfZmlsZSwgbG9mZl90IHNyY19wb3MsXG4gXHRpZiAocmV0KVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuLVx0cmV0ID0gLUVQRVJNO1xuLVx0aWYgKCFtYXlfZGVkdXBlX2ZpbGUoZHN0X2ZpbGUpKVxuK1x0cmV0ID0gbWF5X2RlZHVwZV9maWxlKGRzdF9maWxlKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdGdvdG8gb3V0X2Ryb3Bfd3JpdGU7XG4gXG4gXHRyZXQgPSAtRVhERVY7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mcy5oIGIvaW5jbHVkZS9saW51eC9mcy5oXG5pbmRleCA1MGNlNzMxYTJiNzhmMS4uODAxM2MxM2EzNTNkNjcgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2ZzLmhcbisrKyBiL2luY2x1ZGUvbGludXgvZnMuaFxuQEAgLTYyOCw2ICs2MjgsNyBAQCBpc191bmNhY2hlZF9hY2woc3RydWN0IHBvc2l4X2FjbCAqYWNsKVxuICNkZWZpbmUgSU9QX0NBQ0hFRF9MSU5LXHRcdDB4MDA0MFxuICNkZWZpbmUgSU9QX0ZBU1RQRVJNX01BWV9FWEVDXHQweDAwODBcbiAjZGVmaW5lIElPUF9GTENUWFx0XHQweDAxMDBcbisjZGVmaW5lIElPUF9PV05FUlNISVBfT1ZFUlJJREVcdDB4MDIwMFx0LyogVXNlIC1cdTAwM2Vpc19vd25lZF9ieV9tZSgpIGFuZCAtXHUwMDNlaGF2ZV9zYW1lX293bmVyKCkgKi9cbiBcbiAvKlxuICAqIElub2RlIHN0YXRlIGJpdHMuICBQcm90ZWN0ZWQgYnkgaW5vZGUtXHUwMDNlaV9sb2NrXG5AQCAtMTc1NSw4ICsxNzU2LDcgQEAgc3RhdGljIGlubGluZSBib29sIGZpbGVfd3JpdGVfbm90X3N0YXJ0ZWQoY29uc3Qgc3RydWN0IGZpbGUgKmZpbGUpXG4gXHRyZXR1cm4gc2Jfd3JpdGVfbm90X3N0YXJ0ZWQoZmlsZV9pbm9kZShmaWxlKS1cdTAwM2VpX3NiKTtcbiB9XG4gXG4tYm9vbCBpbm9kZV9vd25lcl9vcl9jYXBhYmxlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuLVx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbitib29sIGlub2RlX293bmVyX29yX2NhcGFibGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xuIFxuIC8qXG4gICogVkZTIGhlbHBlciBmdW5jdGlvbnMuLlxuQEAgLTIwMzYsNiArMjAzNiw5IEBAIHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIHtcbiBcdFx0XHQgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgZmlsZV9rYXR0ciAqZmEpO1xuIFx0aW50ICgqZmlsZWF0dHJfZ2V0KShzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBmaWxlX2thdHRyICpmYSk7XG4gXHRzdHJ1Y3Qgb2Zmc2V0X2N0eCAqKCpnZXRfb2Zmc2V0X2N0eCkoc3RydWN0IGlub2RlICppbm9kZSk7XG4rXHRpbnQgKCppc19vd25lZF9ieV9tZSkoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xuK1x0aW50ICgqaGF2ZV9zYW1lX293bmVyKShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZTEsXG4rXHRcdFx0ICAgICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUyKTtcbiB9IF9fX19jYWNoZWxpbmVfYWxpZ25lZDtcbiBcbiAvKiBEaWQgdGhlIGRyaXZlciBwcm92aWRlIHZhbGlkIG1tYXAgaG9vayBjb25maWd1cmF0aW9uPyAqL1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDM6MzM6MDkuNDcxMDU3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Nzc5MDk0MDI4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIElub2RlIE93bmVyc2hpcCBQYXRjaCBmb3IgRnV6emluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0J3MgaW50cm9kdWNpbmcgc29tZSBzaWduaWZpY2FudCBjaGFuZ2VzIHJlbGF0ZWQgdG8gaW5vZGUgb3duZXJzaGlwIGNoZWNrcywgc3BlY2lmaWNhbGx5IHdpdGggdGhlIGBpc19vd25lZF9ieV9tZWAgYW5kIGBoYXZlX3NhbWVfb3duZXJgIG9wZXJhdGlvbnMsIGFuZCBpbXBsZW1lbnRhdGlvbiBmb3IgQUZTLiBUaGUgbWFpbiB0aHJ1c3QgaXMgdGhpcyBuZXcgYElPUF9PV05FUlNISVBfT1ZFUlJJREVgIGZsYWcgYW5kIGEgYnVuY2ggb2YgVkZTIHBhdGggbW9kaWZpY2F0aW9ucy4gVGhlIGNvZGUgaXMgdXNpbmcgdGhlIG5ldyBpbm9kZSBvcGVyYXRpb25zIGluc3RlYWQgb2YgZGlyZWN0bHkgY29tcGFyaW5nIFVJRHMgdXNpbmcgYHZmc3VpZF9lcV9rdWlkYCwgaW4gZnVuY3Rpb25zIGxpa2UgYGNob3duX29rYCwgYGNoZ3JwX29rYCwgYGNvcmVkdW1wX2ZpbGVgLCBldGMuXG5cblRoaXMgaXMgYSBwcmV0dHkgZnVuZGFtZW50YWwgc2hpZnQgaW4gaG93IG93bmVyc2hpcCBpcyBjaGVja2VkLCBpbXBhY3RpbmcgYm90aCB0aGUgY29yZSBWRlMgYW5kIHRoZSBBRlMgZmlsZXN5c3RlbSwgYW5kIHRoYXQgc2NyZWFtcyBcImZ1enogbWUuXCIgSSBuZWVkIHRvIGRldGVybWluZSB3aGVyZSB0byBjb25jZW50cmF0ZSBteSBmdXp6aW5nIGVmZm9ydHMgdG8gaWRlbnRpZnkgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy5cblxuTXkgaW5pdGlhbCBmb2N1cyB3aWxsIGJlIG9uIHRoZSBuZXcgZnVuY3Rpb25zIHRoYXQgaW1wbGVtZW50IHRoZSBmdW5jdGlvbmFsaXR5OiBgdmZzX2lub2RlX2lzX293bmVkX2J5X21lYCwgYHZmc19pbm9kZV9hbmRfZGlyX2hhdmVfc2FtZV9vd25lcmAsIGB2ZnNfaW5vZGVzX2hhdmVfc2FtZV9vd25lcmAsIGBhZnNfaXNfb3duZWRfYnlfbWVgLCBhbmQgYGFmc19oYXZlX3NhbWVfb3duZXJgLiBUaGVzZSBhcmUgdGhlIGRpcmVjdCBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlIG5ldyBsb2dpYy4gQWxzbywgSSdsbCBuZWVkIHRvIGZ1enogdGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyB0b28sIHRvIG1ha2Ugc3VyZSB0aGUgY2hhbmdlIGlzIHdvcmtpbmcuXG5cbk5vdywgbGV0J3Mgc2VlLCB3aGljaCBvZiB0aGVzZSBhcmUgZXhwb3NlZD8gYHZmc19pbm9kZV9pc19vd25lZF9ieV9tZWAgaW4gYGZzL25hbWVpLmNgIGlzIG5vbi1zdGF0aWMgYW5kIGV4cG9ydGVkLCBtZWFuaW5nIGl0J3MgYWNjZXNzaWJsZS4gYHZmc19pbm9kZV9hbmRfZGlyX2hhdmVfc2FtZV9vd25lcmAgYW5kIGB2ZnNfaW5vZGVzX2hhdmVfc2FtZV9vd25lcmAgYXJlIHN0YXRpYyBpbiBgZnMvbmFtZWkuY2AsIHNvIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGV5IGFyZSB1c2VkIHdpdGhpbiB0aGVpciBjb21waWxhdGlvbiB1bml0LCB0byBzZWUgaG93IHRvIHRyaWdnZXIgdGhlbS4gYGFmc19pc19vd25lZF9ieV9tZWAgYW5kIGBhZnNfaGF2ZV9zYW1lX293bmVyYCBhcmUgaW4gYGZzL2Fmcy9zZWN1cml0eS5jYCwgYW5kIHRoZXkncmUgbm9uLXN0YXRpYy5cblxuT2theSwgbGV0J3MgZGlnIGludG8gYGZzL25hbWVpLmNgIGFuZCBzZWUgZXhhY3RseSBob3cgYHZmc19pbm9kZV9pc19vd25lZF9ieV9tZWAgaXMgdXNlZCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBwb3RlbnRpYWwgYXR0YWNrIHN1cmZhY2UuIFRoaXMgaXMgd2hlcmUgdGhlIHJlYWwgaW50ZXJlc3Rpbmcgc3R1ZmYgaXMgZ29pbmcgdG8gYmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMTc5LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTk0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDM6MzM6MTcuMjYyMDAxMDUxWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM5NjE5ODI4MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmZzX2lub2RlX2lzX293bmVkX2J5X21lXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2F0dHIuYz05NT1zdGF0aWMgaW50IGNob3duX29rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbi0tXFxuZnMvYXR0ci5jLTEwMC1cXG5mcy9hdHRyLmM6MTAxOlxcdHJldCA9IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShpZG1hcCwgaW5vZGUpO1xcbmZzL2F0dHIuYy0xMDItXFx0aWYgKHJldCBcXHUwMDNjPSAwKVxcbi0tXFxuZnMvYXR0ci5jPTEyND1zdGF0aWMgaW50IGNoZ3JwX29rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbi0tXFxuZnMvYXR0ci5jLTEyOS1cXG5mcy9hdHRyLmM6MTMwOlxcdHJldCA9IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShpZG1hcCwgaW5vZGUpO1xcbmZzL2F0dHIuYy0xMzEtXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5mcy9jb3JlZHVtcC5jPTg3OD1zdGF0aWMgYm9vbCBjb3JlZHVtcF9maWxlKHN0cnVjdCBjb3JlX25hbWUgKmNuLCBzdHJ1Y3QgY29yZWR1bXBfcGFyYW1zICpjcHJtLFxcbi0tXFxuZnMvY29yZWR1bXAuYy05NTYtXFx0aWRtYXAgPSBmaWxlX21udF9pZG1hcChmaWxlKTtcXG5mcy9jb3JlZHVtcC5jOjk1NzpcXHRpZiAodmZzX2lub2RlX2lzX293bmVkX2J5X21lKGlkbWFwLCBpbm9kZSkgIT0gMCkge1xcbmZzL2NvcmVkdW1wLmMtOTU4LVxcdFxcdGNvcmVkdW1wX3JlcG9ydF9mYWlsdXJlKFxcXCJDb3JlIGR1bXAgdG8gJXMgYWJvcnRlZDogY2Fubm90IHByZXNlcnZlIGZpbGUgb3duZXJcXFwiLCBjbi1cXHUwMDNlY29yZW5hbWUpO1xcbi0tXFxuZnMvaW5vZGUuYz0yNzUzPWJvb2wgaW5vZGVfb3duZXJfb3JfY2FwYWJsZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSlcXG4tLVxcbmZzL2lub2RlLmMtMjc1OC1cXG5mcy9pbm9kZS5jOjI3NTk6XFx0cmV0ID0gdmZzX2lub2RlX2lzX293bmVkX2J5X21lKGlkbWFwLCBpbm9kZSk7XFxuZnMvaW5vZGUuYy0yNzYwLVxcdGlmIChyZXQgPT0gMClcXG4tLVxcbmZzL2ludGVybmFsLmg9NDk9ZXh0ZXJuIGludCBmaW5pc2hfY2xlYW5fY29udGV4dChzdHJ1Y3QgZnNfY29udGV4dCAqZmMpO1xcbi0tXFxuZnMvaW50ZXJuYWwuaC01My0gKi9cXG5mcy9pbnRlcm5hbC5oOjU0OmludCB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xcbmZzL2ludGVybmFsLmgtNTUtZXh0ZXJuIGludCBmaWxlbmFtZV9sb29rdXAoaW50IGRmZCwgc3RydWN0IGZpbGVuYW1lICpuYW1lLCB1bnNpZ25lZCBmbGFncyxcXG4tLVxcbmZzL2xvY2tzLmM9MjEzNz12ZnNfc2V0bGVhc2Uoc3RydWN0IGZpbGUgKmZpbHAsIGludCBhcmcsIHN0cnVjdCBmaWxlX2xlYXNlICoqbGVhc2UsIHZvaWQgKipwcml2KVxcbi0tXFxuZnMvbG9ja3MuYy0yMTQxLVxcbmZzL2xvY2tzLmM6MjE0MjpcXHRlcnJvciA9IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShmaWxlX21udF9pZG1hcChmaWxwKSwgaW5vZGUpO1xcbmZzL2xvY2tzLmMtMjE0My1cXHRpZiAoZXJyb3IgXFx1MDAzYyAwKVxcbi0tXFxuZnMvbmFtZWkuYz0xMjU0PWZzX2luaXRjYWxsKGluaXRfZnNfbmFtZWlfc3lzY3Rscyk7XFxuLS1cXG5mcy9uYW1laS5jLTEyNjItICovXFxuZnMvbmFtZWkuYzoxMjYzOmludCB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuZnMvbmFtZWkuYy0xMjY0LXtcXG4tLVxcbmZzL25hbWVpLmM9MTM0MD1zdGF0aWMgaW5saW5lIGludCBtYXlfZm9sbG93X2xpbmsoc3RydWN0IG5hbWVpZGF0YSAqbmQsIHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuLS1cXG5mcy9uYW1laS5jLTEzNTMtXFx0LyogQWxsb3dlZCBpZiBvd25lciBhbmQgZm9sbG93ZXIgbWF0Y2guICovXFxuZnMvbmFtZWkuYzoxMzU0OlxcdHJldCA9IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShpZG1hcCwgaW5vZGUpO1xcbmZzL25hbWVpLmMtMTM1NS1cXHRpZiAocmV0IFxcdTAwM2M9IDApXFxuLS1cXG5mcy9uYW1laS5jPTE1MDk9c3RhdGljIGludCBtYXlfY3JlYXRlX2luX3N0aWNreShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IG5hbWVpZGF0YSAqbmQsXFxuLS1cXG5mcy9uYW1laS5jLTE1MjctXFxuZnMvbmFtZWkuYzoxNTI4OlxcdHJldCA9IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShpZG1hcCwgaW5vZGUpO1xcbmZzL25hbWVpLmMtMTUyOS1cXHRpZiAocmV0IFxcdTAwM2M9IDApXFxuLS1cXG5mcy9uYW1laS5jPTM3NDQ9aW50IF9fY2hlY2tfc3RpY2t5KHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tLVxcbmZzL25hbWVpLmMtMzc0OC1cXG5mcy9uYW1laS5jOjM3NDk6XFx0cmV0ID0gdmZzX2lub2RlX2lzX293bmVkX2J5X21lKGlkbWFwLCBpbm9kZSk7XFxuZnMvbmFtZWkuYy0zNzUwLVxcdGlmIChyZXQgXFx1MDAzYz0gMClcXG4tLVxcbmZzL3JlbWFwX3JhbmdlLmM9NDE2PXN0YXRpYyBpbnQgbWF5X2RlZHVwZV9maWxlKHN0cnVjdCBmaWxlICpmaWxlKVxcbi0tXFxuZnMvcmVtYXBfcmFuZ2UuYy00MjUtXFx0XFx0cmV0dXJuIDA7XFxuZnMvcmVtYXBfcmFuZ2UuYzo0MjY6XFx0cmV0ID0gdmZzX2lub2RlX2lzX293bmVkX2J5X21lKGlkbWFwLCBpbm9kZSk7XFxuZnMvcmVtYXBfcmFuZ2UuYy00MjctXFx0aWYgKHJldCBcXHUwMDNjPSAwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwMzozMzoyMS4yMjM5OTU5MzFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjY3ODQ0MTAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBmdW5jdGlvbnMuXG5cbioqSW5pdGlhbCBDb25zaWRlcmF0aW9ucyBmb3IgRmlsZSBPd25lcnNoaXAgYW5kIExlYXNlIE1hbmFnZW1lbnQqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayBkb3duIHRoZXNlIGZ1bmN0aW9ucy4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiBmaWxlIG93bmVyc2hpcCwgbGVhc2UgbWFuYWdlbWVudCwgYW5kIGFjY2VzcyBjb250cm9sLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgcGllY2VzIGZpdCB0b2dldGhlciBpbiBhIGZpbGUgc3lzdGVtIGNvbnRleHQuIFRoZSBjb3JlIGZ1bmN0aW9ucyBJJ20gdGhpbmtpbmcgYWJvdXQgYXJlOiBgdmZzX2lub2RlX2lzX293bmVkX2J5X21lYCwgYGFmc19pc19vd25lZF9ieV9tZWAsIGBhZnNfaGF2ZV9zYW1lX293bmVyYCwgYGlub2RlX293bmVyX29yX2NhcGFibGVgLCBgdmZzX3NldGxlYXNlYCwgYW5kIGBfX2NoZWNrX3N0aWNreWAuXG5cbkZpcnN0LCBhIHF1aWNrIGNoZWNrLi4uIEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgYGFmc19pc19vd25lZF9ieV9tZWAgaXMgZXhwb3J0ZWQgb3Igc3RhdGljLiBLbm93aW5nIHRoaXMgaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyBpdHMgc2NvcGUgYW5kIGhvdyBpdCdzIGludGVuZGVkIHRvIGJlIHVzZWQgd2l0aGluIHRoZSBicm9hZGVyIHN5c3RlbS4gSSdsbCBuZWVkIHRvIGxvb2sgdGhhdCB1cC4gSSBuZWVkIHRvIGJlIGF3YXJlIG9mIHRoZSBjb250ZXh0IG9mIHRoaXMgZnVuY3Rpb24sIHNpbmNlIGl0IGlzIG5hbWVkIFwiYWZzXCIgd2hpY2ggbGlrZWx5IHJlZmVycyB0byBBbmRyZXcgRmlsZSBTeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NTE3LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDM6MzM6MjQuNDkxODQ0MTc0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2MzA4MDYyODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWZzX2lzX293bmVkX2J5X21lXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2Fmcy9kaXIuYz02MD1jb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBhZnNfZGlyX2lub2RlX29wZXJhdGlvbnMgPSB7XFxuLS1cXG5mcy9hZnMvZGlyLmMtNzEtXFx0LnNldGF0dHJcXHQ9IGFmc19zZXRhdHRyLFxcbmZzL2Fmcy9kaXIuYzo3MjpcXHQuaXNfb3duZWRfYnlfbWVcXHQ9IGFmc19pc19vd25lZF9ieV9tZSxcXG5mcy9hZnMvZGlyLmMtNzMtXFx0LmhhdmVfc2FtZV9vd25lciA9IGFmc19oYXZlX3NhbWVfb3duZXIsXFxuLS1cXG5mcy9hZnMvZmlsZS5jPTQ4PWNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGFmc19maWxlX2lub2RlX29wZXJhdGlvbnMgPSB7XFxuLS1cXG5mcy9hZnMvZmlsZS5jLTUxLVxcdC5wZXJtaXNzaW9uXFx0PSBhZnNfcGVybWlzc2lvbixcXG5mcy9hZnMvZmlsZS5jOjUyOlxcdC5pc19vd25lZF9ieV9tZVxcdD0gYWZzX2lzX293bmVkX2J5X21lLFxcbmZzL2Fmcy9maWxlLmMtNTMtXFx0LmhhdmVfc2FtZV9vd25lciA9IGFmc19oYXZlX3NhbWVfb3duZXIsXFxuLS1cXG5mcy9hZnMvaW50ZXJuYWwuaD0xNTQxPWV4dGVybiBpbnQgYWZzX3Blcm1pc3Npb24oc3RydWN0IG1udF9pZG1hcCAqLCBzdHJ1Y3QgaW5vZGUgKiwgaW50KTtcXG5mcy9hZnMvaW50ZXJuYWwuaDoxNTQyOmludCBhZnNfaXNfb3duZWRfYnlfbWUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xcbmZzL2Fmcy9pbnRlcm5hbC5oLTE1NDMtaW50IGFmc19oYXZlX3NhbWVfb3duZXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUxLFxcbi0tXFxuZnMvYWZzL3NlY3VyaXR5LmM9NDMxPWludCBhZnNfcGVybWlzc2lvbihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbmZzL2Fmcy9zZWN1cml0eS5jLTUxOC0gKi9cXG5mcy9hZnMvc2VjdXJpdHkuYzo1MTk6aW50IGFmc19pc19vd25lZF9ieV9tZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSlcXG5mcy9hZnMvc2VjdXJpdHkuYy01MjAte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwMzozMzoyNy4xMjI2NTkxOTFaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDQyMjYwOTk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgQUZTIE93bmVyc2hpcCBDaGVja3MqKlxuXG5SaWdodCwgc28gSSd2ZSBjb25maXJtZWQgdGhhdCBgYWZzX2lzX293bmVkX2J5X21lYCBhbmQgYGFmc19oYXZlX3NhbWVfb3duZXJgIGFyZSAqbm90KiBzdGF0aWMsIGFzIGV4cGVjdGVkLiBOb3csIG15IG5leHQgc3RlcCBpcyB0byBxdWlja2x5IHZlcmlmeSBpZiB0aGUgYnVpbGQgcHJvY2VzcyBuZWVkcyBhbnkgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb25zIGVuYWJsZWQgdG8gY29ycmVjdGx5IGNvbXBpbGUgYW5kIGxpbmsgdGhpcyBjb2RlLiBMb29raW5nIGF0IHRoZSBjb2RlIHBhdGgsIGl0J3MgcHJldHR5IGNsZWFyIHRoYXQgdGhpcyBsaXZlcyB3aXRoaW4gYGZzL2Fmcy9gLCB3aGljaCBzY3JlYW1zIHRoYXQgd2UnbGwgbGlrZWx5IG5lZWQgYENPTkZJR19BRlNfRlNgIGRlZmluZWQuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBwcmVyZXF1aXNpdGUgaXMgbWV0IHRvIGNvbnRpbnVlIG15IGFuYWx5c2lzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjMxOCwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAzOjMzOjMwLjE2NDkyMzkxOVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzE4NjExNjU1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBBRlNfRlNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvYWZzL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5mcy9hZnMvS2NvbmZpZzoyOmNvbmZpZyBBRlNfRlNcXG5mcy9hZnMvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJBbmRyZXcgRmlsZSBTeXN0ZW0gc3VwcG9ydCAoQUZTKVxcXCJcXG4tLVxcbmZzL2Fmcy9LY29uZmlnPTE3PWNvbmZpZyBBRlNfREVCVUdcXG4tLVxcbmZzL2Fmcy9LY29uZmlnLTI2LVxcbmZzL2Fmcy9LY29uZmlnOjI3OmNvbmZpZyBBRlNfRlNDQUNIRVxcbmZzL2Fmcy9LY29uZmlnLTI4LVxcdGJvb2wgXFxcIlByb3ZpZGUgQUZTIGNsaWVudCBjYWNoaW5nIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAzOjMzOjMyLjg4MzU0MTEwNFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNzAyNzQ3MDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoZSBjb2RlOlxuXG4qKkNoZWNraW5nIEFGUyBLZXJuZWwgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZGVwZW5kZW5jaWVzIHJlbGF0ZWQgdG8gdGhlIEFGUyAoQW5kcmV3IEZpbGUgU3lzdGVtKSBmaWxlc3lzdGVtIHdpdGhpbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIEknbGwgc3RhcnQgYnkgdGFraW5nIGEgbG9vayBhdCBgZnMvYWZzL0tjb25maWdgLiBUaGlzIGZpbGUgc2hvdWxkIGNvbnRhaW4gdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gU3BlY2lmaWNhbGx5LCBJJ20gZ29pbmcgdG8gZm9jdXMgb24gd2hlcmUgdGhlIGBBRlNfRlNgIG9wdGlvbiBpcyBkZWZpbmVkIGFuZCBhbnkgZGVwZW5kZW5jaWVzIGl0IG1pZ2h0IGhhdmUuIFVuZGVyc3RhbmRpbmcgdGhlc2UgZGVwZW5kZW5jaWVzIGlzIGNydWNpYWwuIEl0IHRlbGxzIG1lIHdoaWNoIG90aGVyIGtlcm5lbCBmZWF0dXJlcyBuZWVkIHRvIGJlIGVuYWJsZWQgb3IgYXJlIHJlcXVpcmVkIGZvciBBRlMgc3VwcG9ydCB0byBiZSBidWlsdC4gS25vd2luZyB0aGlzIGFsbG93cyBmb3IgbWFraW5nIHRoZSBuZWNlc3NhcnkgY2hvaWNlcyB0byBjb25maWd1cmUgYSBrZXJuZWwgd2l0aCBBRlMgc3VwcG9ydC4gVGhpcyB3aWxsIGdpdmUgbWUgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQgbmVlZHMgdG8gYmUgZW5hYmxlZCBpbiBvcmRlciB0byBtYWtlIEFGUyBhdmFpbGFibGUsIGFuZCBob3cgaXQgaXMgaW50ZWdyYXRlZCBpbiB0aGUga2VybmVsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjY4NSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAzOjMzOjM2LjE1MzgxOTEwN1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDQzNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvYWZzL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdGNvbmZpZyBBRlNfRlNcXG4gICAzOlxcdFxcdHRyaXN0YXRlIFxcXCJBbmRyZXcgRmlsZSBTeXN0ZW0gc3VwcG9ydCAoQUZTKVxcXCJcXG4gICA0OlxcdFxcdGRlcGVuZHMgb24gSU5FVFxcbiAgIDU6XFx0XFx0c2VsZWN0IEFGX1JYUlBDXFxuICAgNjpcXHRcXHRzZWxlY3QgRE5TX1JFU09MVkVSXFxuICAgNzpcXHRcXHRzZWxlY3QgTkVURlNfU1VQUE9SVFxcbiAgIDg6XFx0XFx0c2VsZWN0IENSWVBUT19LUkI1XFxuICAgOTpcXHRcXHRoZWxwXFxuICAxMDpcXHRcXHQgIElmIHlvdSBzYXkgWSBoZXJlLCB5b3Ugd2lsbCBnZXQgYW4gZXhwZXJpbWVudGFsIEFuZHJldyBGaWxlIFN5c3RlbVxcbiAgMTE6XFx0XFx0ICBkcml2ZXIuIEl0IGN1cnJlbnRseSBvbmx5IHN1cHBvcnRzIHVuc2VjdXJlZCByZWFkLW9ubHkgQUZTIGFjY2Vzcy5cXG4gIDEyOlxcdFxcbiAgMTM6XFx0XFx0ICBTZWUgXFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9hZnMucnN0XFx1MDAzZSBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cXG4gIDE0OlxcdFxcbiAgMTU6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAgMTY6XFx0XFxuICAxNzpcXHRjb25maWcgQUZTX0RFQlVHXFxuICAxODpcXHRcXHRib29sIFxcXCJBRlMgZHluYW1pYyBkZWJ1Z2dpbmdcXFwiXFxuICAxOTpcXHRcXHRkZXBlbmRzIG9uIEFGU19GU1xcbiAgMjA6XFx0XFx0aGVscFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwMzozMzozNi4xNTM5MjgyMTdaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDg5MDYyOTkxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBDb25maWd1cmF0aW9uIFdvcmtmbG93KipcblxuT2theSwgc28gSSBzZWUgdGhhdCB0aGUgYEFGU19GU2AgZmlsZXN5c3RlbSBjbGVhcmx5IGhhcyBhIGRlcGVuZGVuY3kgb24gYElORVRgLiBUaGF0IG1ha2VzIHNlbnNlLiBUaGVyZWZvcmUsIHRoZSBpbW1lZGlhdGUgYWN0aW9uIGlzIHRvIGFkZCBgQUZTX0ZTYCB0byBgRW5hYmxlQ29uZmlnc2AgdG8gZW5zdXJlIGl0IGdldHMgYnVpbHQgY29ycmVjdGx5IGFsb25nIHdpdGggaXRzIG5ldHdvcmtpbmcgZGVwZW5kZW5jaWVzLlxuXG5Ob3csIGxldCdzIHRha2UgYSBicm9hZGVyIGxvb2suIEFyZSB0aGVyZSBhbnkgb3RoZXIgY29uZmlndXJhdGlvbiBpdGVtcyB0aGF0IG5lZWQgYXR0ZW50aW9uPyBJIG5lZWQgdG8gcmV2aWV3IHRoZSBjb2RlIGNoYW5nZXMgYW5kIGRldGVybWluZSBpZiB0aGV5IHJlcXVpcmUgYWRkaXRpb25hbCBjb25maWd1cmF0aW9uIGZsYWdzLlxuXG5Mb29raW5nIGF0IHRoZSBjaGFuZ2VzIGluIGBmcy9uYW1laS5jYCwgYGZzL2F0dHIuY2AsIGBmcy9jb3JlZHVtcC5jYCwgYGZzL2lub2RlLmNgLCBgZnMvbG9ja3MuY2AsIGFuZCBgZnMvcmVtYXBfcmFuZ2UuY2AsIHRoZXkncmUgYWxsIGNvcmUgVkZTIG1vZGlmaWNhdGlvbnMuIFRoZXNlIGFyZSBmdW5kYW1lbnRhbCBmaWxlc3lzdGVtIG9wZXJhdGlvbnMgYW5kIGRvbid0IHNlZW0gdG8gd2FycmFudCBhIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBUaGV54oCZcmUgcGFydCBvZiB0aGUgYmFzZSBWRlMgYW5kIHNob3VsZCBqdXN0IHdvcmsuXG5cbk5leHQsIEkgbmVlZCB0byBjaGVjayB0aGUgc2NvcGUgb2YgdGhlIGZ1bmN0aW9uIGB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWVgLiBJcyBpdCBleHBvcnRlZD8gSSBzZWUgaXTigJlzIGRlY2xhcmVkIGluIGBmcy9pbnRlcm5hbC5oYC4gVGhhdCBtZWFucyBpdCdzIG5vdCBleHBvcnRlZCB0byBtb2R1bGVzLCB3aGljaCBpcyBnZW5lcmFsbHkgd2hhdCBJIHdvdWxkIGV4cGVjdCBmb3IgYSBmdW5jdGlvbiBvZiB0aGlzIG5hdHVyZS4gSG93ZXZlciwgaXQgKmlzKiBhIG5vbi1zdGF0aWMgZnVuY3Rpb24gd2l0aGluIHRoZSBrZXJuZWwgY29yZSwgc28gaXQncyBhY2Nlc3NpYmxlIGludGVybmFsbHkuXG5cbkZpbmFsbHksIEkgd2lsbCBjaGVjayB0aGUgcmVtYWluaW5nIGZ1bmN0aW9ucyBvZiBpbnRlcmVzdC4gSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciBgdmZzX2lub2RlX2FuZF9kaXJfaGF2ZV9zYW1lX293bmVyYCBhbmQgYHZmc19pbm9kZXNfaGF2ZV9zYW1lX293bmVyYCBhcmUgc3RhdGljIGZ1bmN0aW9ucy4gVGhpcyB3aWxsIGluZmx1ZW5jZSBob3cgYW5kIHdoZXJlIHRoZXkgY2FuIGJlIHVzZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MTcyLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTk4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDM6MzM6NDEuMDQ0NTYxNzQ4WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzA3MTMxMDg1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZmc19pbm9kZV9hbmRfZGlyX2hhdmVfc2FtZV9vd25lclwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9uYW1laS5jPTEyNjM9aW50IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSlcXG4tLVxcbmZzL25hbWVpLmMtMTI3Ni0gKi9cXG5mcy9uYW1laS5jOjEyNzc6c3RhdGljIGludCB2ZnNfaW5vZGVfYW5kX2Rpcl9oYXZlX3NhbWVfb3duZXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuZnMvbmFtZWkuYy0xMjc4LVxcdFxcdFxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IG5hbWVpZGF0YSAqbmQpXFxuLS1cXG5mcy9uYW1laS5jPTEzNDA9c3RhdGljIGlubGluZSBpbnQgbWF5X2ZvbGxvd19saW5rKHN0cnVjdCBuYW1laWRhdGEgKm5kLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbi0tXFxuZnMvbmFtZWkuYy0xMzU4LVxcdC8qIEFsbG93ZWQgaWYgcGFyZW50IGRpcmVjdG9yeSBhbmQgbGluayBvd25lciBtYXRjaC4gKi9cXG5mcy9uYW1laS5jOjEzNTk6XFx0cmV0ID0gdmZzX2lub2RlX2FuZF9kaXJfaGF2ZV9zYW1lX293bmVyKGlkbWFwLCBpbm9kZSwgbmQpO1xcbmZzL25hbWVpLmMtMTM2MC1cXHRpZiAocmV0IFxcdTAwM2M9IDApXFxuLS1cXG5mcy9uYW1laS5jPTE1MDk9c3RhdGljIGludCBtYXlfY3JlYXRlX2luX3N0aWNreShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IG5hbWVpZGF0YSAqbmQsXFxuLS1cXG5mcy9uYW1laS5jLTE1MjMtXFxuZnMvbmFtZWkuYzoxNTI0OlxcdHJldCA9IHZmc19pbm9kZV9hbmRfZGlyX2hhdmVfc2FtZV9vd25lcihpZG1hcCwgaW5vZGUsIG5kKTtcXG5mcy9uYW1laS5jLTE1MjUtXFx0aWYgKHJldCBcXHUwMDNjPSAwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwMzozMzo0My43NTE3MDExMjNaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI3ODM5Mjg0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlLCB0aGUgc3RhdGljIG5hdHVyZSBvZiB0aGVzZSB0aGluZ3MuLi4gcmlnaHQuIFNvLCB0aGUga2V5IGZvY3VzIHN5bWJvbHMgSSBuZWVkIHRvIHplcm8gaW4gb24gYXJlOlxuXG4qKkZvY3VzIFN5bWJvbHMgSWRlbnRpZmllZCoqXG5cbkkgbmVlZCB0byBtYWtlIHN1cmUgSSdtIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG86XG5cbiogICBgdmZzX2lub2RlX2lzX293bmVkX2J5X21lYFxuKiAgIGBhZnNfaXNfb3duZWRfYnlfbWVgXG4qICAgYGFmc19oYXZlX3NhbWVfb3duZXJgXG4qICAgYGlub2RlX293bmVyX29yX2NhcGFibGVgXG4qICAgYHZmc19zZXRsZWFzZWBcbiogICBgX19jaGVja19zdGlja3lgXG5cbipIbW0sIGB2ZnNfc2V0bGVhc2VgIGlzIGEgcmF0aGVyIGxhcmdlIGZ1bmN0aW9uLCBidXQgSSBhbSBub3QgYXMgd29ycmllZCBub3cuKlxuXG5MZXQgbWUgcXVpY2tseSB2ZXJpZnkgaWYgYF9fY2hlY2tfc3RpY2t5YCBpcyBleHBvcnRlZC4gVGhhdCdzIHRoZSBvbmUgSSdtIGEgbGl0dGxlIGxlc3MgZmFtaWxpYXIgd2l0aCwgc28gSSBuZWVkIHRvIG1ha2Ugc3VyZSBpdCdzIGFjY2Vzc2libGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MTE2LCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAzOjMzOjQ3LjAzMDA5ODE0NloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM5NDE1NDk0MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX2NoZWNrX3N0aWNreVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9uYW1laS5jPTM3NDI9RVhQT1JUX1NZTUJPTCh1c2VyX3BhdGhfYXQpO1xcbmZzL25hbWVpLmMtMzc0My1cXG5mcy9uYW1laS5jOjM3NDQ6aW50IF9fY2hlY2tfc3RpY2t5KHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG5mcy9uYW1laS5jLTM3NDUtXFx0XFx0ICAgc3RydWN0IGlub2RlICppbm9kZSlcXG4tLVxcbmZzL25hbWVpLmMtMzc1Ni19XFxuZnMvbmFtZWkuYzozNzU3OkVYUE9SVF9TWU1CT0woX19jaGVja19zdGlja3kpO1xcbmZzL25hbWVpLmMtMzc1OC1cXG4tLVxcbmluY2x1ZGUvbGludXgvZnMuaD0yNzAyPXN0YXRpYyBpbmxpbmUgaW50IHBhdGhfcGVybWlzc2lvbihjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCwgaW50IG1hc2spXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2ZzLmgtMjcwNi19XFxuaW5jbHVkZS9saW51eC9mcy5oOjI3MDc6aW50IF9fY2hlY2tfc3RpY2t5KHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG5pbmNsdWRlL2xpbnV4L2ZzLmgtMjcwOC1cXHRcXHQgICBzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvZnMuaD0zNTY0PXN0YXRpYyBpbmxpbmUgaW50IGNoZWNrX3N0aWNreShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4tLVxcbmluY2x1ZGUvbGludXgvZnMuaC0zNTY5LVxcbmluY2x1ZGUvbGludXgvZnMuaDozNTcwOlxcdHJldHVybiBfX2NoZWNrX3N0aWNreShpZG1hcCwgZGlyLCBpbm9kZSk7XFxuaW5jbHVkZS9saW51eC9mcy5oLTM1NzEtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwMzozMzo0OS40MjQyNTk1OTdaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDExODUxMjQwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBFeHBvcnRlZCBTdGF0ZSoqXG5cblJpZ2h0LCBzbyB0aGUgc3lzdGVtIGluZGljYXRlcyB0aGUgZGF0YSBpcywgaW4gZmFjdCwgYmVpbmcgZXhwb3J0ZWQuIE5vdywgbXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgc2VjdXJpdHksIG5hdHVyYWxseS4gV2UgbmVlZCB0byBjb25maXJtICpob3cqIHRoaXMgZXhwb3J0IGlzIGhhcHBlbmluZyBhbmQsIGNyaXRpY2FsbHksIHdobyBoYXMgYWNjZXNzIGFuZCBob3cgdGhhdCBhY2Nlc3MgaXMgbWFuYWdlZC4gVGhlIGZpcnN0IHBsYWNlIEknbSBnb2luZyB0byBsb29rIGlzIGBpbm9kZV9vd25lcl9vcl9jYXBhYmxlYC4gVGhpcyBmdW5jdGlvbiwgb3IgYSBzaW1pbGFyIG9uZSBpbiB0aGUgcmVsZXZhbnQga2VybmVsIGNvbnRleHQsIGlzIGNydWNpYWwgZm9yIGFzc2Vzc2luZyBhY2Nlc3MgY29udHJvbC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlIGFwcHJvcHJpYXRlIGNoZWNrcyBhcmUgYmVpbmcgcGVyZm9ybWVkIHRvIGVuc3VyZSB0aGF0IG9ubHkgYXV0aG9yaXplZCB1c2VycyBvciBwcm9jZXNzZXMgYXJlIGludGVyYWN0aW5nIHdpdGggdGhpcyBleHBvcnRlZCBkYXRhLiBJJ2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IGBpbm9kZV9vd25lcl9vcl9jYXBhYmxlYCAob3Igd2hhdGV2ZXIgaXQncyBjYWxsZWQpIGlzIGNvcnJlY3RseSBoYW5kbGluZyBwZXJtaXNzaW9ucywgY2FwYWJpbGl0aWVzLCBhbmQgcG90ZW50aWFsbHkgZXh0ZW5kZWQgYXR0cmlidXRlcy4gV2UgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gdGhlIGV4cG9ydCBkb2Vzbid0IGludHJvZHVjZSBhbnkgZXhwbG9pdGFibGUgdnVsbmVyYWJpbGl0aWVzIHJlbGF0ZWQgdG8gcHJpdmlsZWdlIGVzY2FsYXRpb24gb3IgdW5hdXRob3JpemVkIGRhdGEgYWNjZXNzLiBMZXQncyBzZWUgd2hhdCB0aGUgY29kZSBhcm91bmQgdGhhdCBmdW5jdGlvbiB0ZWxscyB1cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg3ODgsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwMzozMzo1My41NDI3NzYwMDRaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwNDc5NTA2ODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW5vZGVfb3duZXJfb3JfY2FwYWJsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy85cC9hY2wuYz0xNTU9aW50IHY5ZnNfaW9wX3NldF9hY2woc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG4tLVxcbmZzLzlwL2FjbC5jLTE5Mi1cXG5mcy85cC9hY2wuYzoxOTM6XFx0aWYgKCFpbm9kZV9vd25lcl9vcl9jYXBhYmxlKFxcdTAwMjZub3BfbW50X2lkbWFwLCBpbm9kZSkpIHtcXG5mcy85cC9hY2wuYy0xOTQtXFx0XFx0cmV0dmFsID0gLUVQRVJNO1xcbi0tXFxuZnMvYXR0ci5jPTE2OD1pbnQgc2V0YXR0cl9wcmVwYXJlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuLS1cXG5mcy9hdHRyLmMtMjE2LVxcbmZzL2F0dHIuYzoyMTc6XFx0XFx0aWYgKCFpbm9kZV9vd25lcl9vcl9jYXBhYmxlKGlkbWFwLCBpbm9kZSkpXFxuZnMvYXR0ci5jLTIxOC1cXHRcXHRcXHRyZXR1cm4gLUVQRVJNO1xcbi0tXFxuZnMvYXR0ci5jLTIzMS1cXHRpZiAoaWFfdmFsaWQgXFx1MDAyNiAoQVRUUl9NVElNRV9TRVQgfCBBVFRSX0FUSU1FX1NFVCB8IEFUVFJfVElNRVNfU0VUKSkge1xcbmZzL2F0dHIuYzoyMzI6XFx0XFx0aWYgKCFpbm9kZV9vd25lcl9vcl9jYXBhYmxlKGlkbWFwLCBpbm9kZSkpXFxuZnMvYXR0ci5jLTIzMy1cXHRcXHRcXHRyZXR1cm4gLUVQRVJNO1xcbi0tXFxuZnMvYXR0ci5jPTM4ND1pbnQgbWF5X3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5mcy9hdHRyLmMtNDAxLVxcbmZzL2F0dHIuYzo0MDI6XFx0XFx0aWYgKCFpbm9kZV9vd25lcl9vcl9jYXBhYmxlKGlkbWFwLCBpbm9kZSkpIHtcXG5mcy9hdHRyLmMtNDAzLVxcdFxcdFxcdGVycm9yID0gaW5vZGVfcGVybWlzc2lvbihpZG1hcCwgaW5vZGUsIE1BWV9XUklURSk7XFxuLS1cXG5mcy9idHJmcy9pb2N0bC5jPTExMzg9c3RhdGljIG5vaW5saW5lIGludCBfX2J0cmZzX2lvY3RsX3NuYXBfY3JlYXRlKHN0cnVjdCBmaWxlICpmaWxlLFxcbi0tXFxuZnMvYnRyZnMvaW9jdGwuYy0xMTgwLVxcdFxcdFxcdHJldCA9IC1FWERFVjtcXG5mcy9idHJmcy9pb2N0bC5jOjExODE6XFx0XFx0fSBlbHNlIGlmICghaW5vZGVfb3duZXJfb3JfY2FwYWJsZShpZG1hcCwgc3JjX2lub2RlKSkge1xcbmZzL2J0cmZzL2lvY3RsLmMtMTE4Mi1cXHRcXHRcXHQvKlxcbi0tXFxuZnMvYnRyZnMvaW9jdGwuYz0xMjk0PXN0YXRpYyBub2lubGluZSBpbnQgYnRyZnNfaW9jdGxfc3Vidm9sX3NldGZsYWdzKHN0cnVjdCBmaWxlICpmaWxlLFxcbi0tXFxuZnMvYnRyZnMvaW9jdGwuYy0xMzA0LVxcbmZzL2J0cmZzL2lvY3RsLmM6MTMwNTpcXHRpZiAoIWlub2RlX293bmVyX29yX2NhcGFibGUoZmlsZV9tbnRfaWRtYXAoZmlsZSksIGlub2RlKSlcXG5mcy9idHJmcy9pb2N0bC5jLTEzMDYtXFx0XFx0cmV0dXJuIC1FUEVSTTtcXG4tLVxcbmZzL2J0cmZzL2lvY3RsLmM9Mzg1Mz1zdGF0aWMgbG9uZyBfYnRyZnNfaW9jdGxfc2V0X3JlY2VpdmVkX3N1YnZvbChzdHJ1Y3QgZmlsZSAqZmlsZSxcXG4tLVxcbmZzL2J0cmZzL2lvY3RsLmMtMzg2NS1cXG5mcy9idHJmcy9pb2N0bC5jOjM4NjY6XFx0aWYgKCFpbm9kZV9vd25lcl9vcl9jYXBhYmxlKGlkbWFwLCBpbm9kZSkpXFxuZnMvYnRyZnMvaW9jdGwuYy0zODY3LVxcdFxcdHJldHVybiAtRVBFUk07XFxuLS1cXG5mcy9jcnlwdG8vcG9saWN5LmM9NTA1PWludCBmc2NyeXB0X2lvY3RsX3NldF9wb2xpY3koc3RydWN0IGZpbGUgKmZpbHAsIGNvbnN0IHZvaWQgX191c2VyICphcmcpXFxuLS1cXG5mcy9jcnlwdG8vcG9saWN5LmMtNTM2LVxcbmZzL2NyeXB0by9wb2xpY3kuYzo1Mzc6XFx0aWYgKCFpbm9kZV9vd25lcl9vcl9jYXBhYmxlKFxcdTAwMjZub3BfbW50X2lkbWFwLCBpbm9kZSkpXFxuZnMvY3J5cHRvL3BvbGljeS5jLTUzOC1cXHRcXHRyZXR1cm4gLUVBQ0NFUztcXG4tLVxcbmZzL2V4dDIvaW9jdGwuYz01ND1sb25nIGV4dDJfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbi0tXFxuZnMvZXh0Mi9pb2N0bC5jLTY4LVxcbmZzL2V4dDIvaW9jdGwuYzo2OTpcXHRcXHRpZiAoIWlub2RlX293bmVyX29yX2NhcGFibGUoXFx1MDAyNm5vcF9tbnRfaWRtYXAsIGlub2RlKSlcXG5mcy9leHQyL2lvY3RsLmMtNzAtXFx0XFx0XFx0cmV0dXJuIC1FUEVSTTtcXG4tLVxcbmZzL2V4dDIvaW9jdGwuYy0xMDEtXFxuZnMvZXh0Mi9pb2N0bC5jOjEwMjpcXHRcXHRpZiAoIWlub2RlX293bmVyX29yX2NhcGFibGUoXFx1MDAyNm5vcF9tbnRfaWRtYXAsIGlub2RlKSlcXG5mcy9leHQyL2lvY3RsLmMtMTAzLVxcdFxcdFxcdHJldHVybiAtRUFDQ0VTO1xcbi0tXFxuZnMvZXh0NC9pb2N0bC5jPTM3NT1zdGF0aWMgbG9uZyBzd2FwX2lub2RlX2Jvb3RfbG9hZGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuLS1cXG5mcy9leHQ0L2lvY3RsLmMtNDA1LVxcdGlmIChJU19SRE9OTFkoaW5vZGUpIHx8IElTX0FQUEVORChpbm9kZSkgfHwgSVNfSU1NVVRBQkxFKGlub2RlKSB8fFxcbmZzL2V4dDQvaW9jdGwuYzo0MDY6XFx0ICAgICFpbm9kZV9vd25lcl9vcl9jYXBhYmxlKGlkbWFwLCBpbm9kZSkgfHxcXG5mcy9leHQ0L2lvY3RsLmMtNDA3LVxcdCAgICAhY2FwYWJsZShDQVBfU1lTX0FETUlOKSkge1xcbi0tXFxuZnMvZXh0NC9pb2N0bC5jPTE1Mzg9c3RhdGljIGxvbmcgX19leHQ0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcXG4tLVxcbmZzL2V4dDQvaW9jdGwuYy0xNTU4LVxcbmZzL2V4dDQvaW9jdGwuYzoxNTU5OlxcdFxcdGlmICghaW5vZGVfb3duZXJfb3JfY2FwYWJsZShpZG1hcCwgaW5vZGUpKVxcbmZzL2V4dDQvaW9jdGwuYy0xNTYwLVxcdFxcdFxcdHJldHVybiAtRVBFUk07XFxuLS1cXG5mcy9leHQ0L2lvY3RsLmMtMTY4OC1cXHRcXHRpbnQgZXJyO1xcbmZzL2V4dDQvaW9jdGwuYzoxNjg5OlxcdFxcdGlmICghaW5vZGVfb3duZXJfb3JfY2FwYWJsZShpZG1hcCwgaW5vZGUpKVxcbmZzL2V4dDQvaW9jdGwuYy0xNjkwLVxcdFxcdFxcdHJldHVybiAtRUFDQ0VTO1xcbi0tXFxuZnMvZXh0NC9pb2N0bC5jLTE3MTAtXFx0XFx0aW50IGVycjtcXG5mcy9leHQ0L2lvY3RsLmM6MTcxMTpcXHRcXHRpZiAoIWlub2RlX293bmVyX29yX2NhcGFibGUoaWRtYXAsIGlub2RlKSlcXG5mcy9leHQ0L2lvY3RsLmMtMTcxMi1cXHRcXHRcXHRyZXR1cm4gLUVBQ0NFUztcXG4tLVxcbmZzL2V4dDQvaW9jdGwuYy0xODYwLVxcdHtcXG5mcy9leHQ0L2lvY3RsLmM6MTg2MTpcXHRcXHRpZiAoIWlub2RlX293bmVyX29yX2NhcGFibGUoaWRtYXAsIGlub2RlKSlcXG5mcy9leHQ0L2lvY3RsLmMtMTg2Mi1cXHRcXHRcXHRyZXR1cm4gLUVBQ0NFUztcXG4tLVxcbmZzL2YyZnMvZmlsZS5jPTIyNzk9c3RhdGljIGludCBmMmZzX2lvY19zdGFydF9hdG9taWNfd3JpdGUoc3RydWN0IGZpbGUgKmZpbHAsIGJvb2wgdHJ1bmNhdGUpXFxuLS1cXG5mcy9mMmZzL2ZpbGUuYy0yMjkwLVxcbmZzL2YyZnMvZmlsZS5jOjIyOTE6XFx0aWYgKCFpbm9kZV9vd25lcl9vcl9jYXBhYmxlKGlkbWFwLCBpbm9kZSkpXFxuZnMvZjJmcy9maWxlLmMtMjI5Mi1cXHRcXHRyZXR1cm4gLUVBQ0NFUztcXG4tLVxcbmZzL2YyZnMvZmlsZS5jPTIzOTE9c3RhdGljIGludCBmMmZzX2lvY19jb21taXRfYXRvbWljX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxwKVxcbi0tXFxuZnMvZjJmcy9maWxlLmMtMjM5OS1cXG5mcy9mMmZzL2ZpbGUuYzoyNDAwOlxcdGlmICghaW5vZGVfb3duZXJfb3JfY2FwYWJsZShpZG1hcCwgaW5vZGUpKVxcbmZzL2YyZnMvZmlsZS5jLTI0MDEtXFx0XFx0cmV0dXJuIC1FQUNDRVM7XFxuLS1cXG5mcy9mMmZzL2ZpbGUuYz0yNDI2PXN0YXRpYyBpbnQgZjJmc19pb2NfYWJvcnRfYXRvbWljX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxwKVxcbi0tXFxuZnMvZjJmcy9maWxlLmMtMjQzNC1cXG5mcy9mMmZzL2ZpbGUuYzoyNDM1OlxcdGlmICghaW5vZGVfb3duZXJfb3JfY2FwYWJsZShpZG1hcCwgaW5vZGUpKVxcbmZzL2YyZnMvZmlsZS5jLTI0MzYtXFx0XFx0cmV0dXJuIC1FQUNDRVM7XFxuLS1cXG5mcy9mMmZzL3hhdHRyLmM9MTEzPXN0YXRpYyBpbnQgZjJmc194YXR0cl9hZHZpc2Vfc2V0KGNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyICpoYW5kbGVyLFxcbi0tXFxuZnMvZjJmcy94YXR0ci5jLTEyMS1cXG5mcy9mMmZzL3hhdHRyLmM6MTIyOlxcdGlmICghaW5vZGVfb3duZXJfb3JfY2FwYWJsZShcXHUwMDI2bm9wX21udF9pZG1hcCwgaW5vZGUpKVxcbmZzL2YyZnMveGF0dHIuYy0xMjMtXFx0XFx0cmV0dXJuIC1FUEVSTTtcXG4tLVxcbmZzL2ZjbnRsLmM9Mzk9c3RhdGljIGludCBzZXRmbChpbnQgZmQsIHN0cnVjdCBmaWxlICogZmlscCwgdW5zaWduZWQgaW50IGFyZylcXG4tLVxcbmZzL2ZjbnRsLmMtNTItXFx0aWYgKChhcmcgXFx1MDAyNiBPX05PQVRJTUUpIFxcdTAwMjZcXHUwMDI2ICEoZmlscC1cXHUwMDNlZl9mbGFncyBcXHUwMDI2IE9fTk9BVElNRSkpXFxuZnMvZmNudGwuYzo1MzpcXHRcXHRpZiAoIWlub2RlX293bmVyX29yX2NhcGFibGUoZmlsZV9tbnRfaWRtYXAoZmlscCksIGlub2RlKSlcXG5mcy9mY250bC5jLTU0LVxcdFxcdFxcdHJldHVybiAtRVBFUk07XFxuLS1cXG5mcy9mY250bC5jPTM2OT1zdGF0aWMgbG9uZyBmY250bF9zZXRfcndfaGludChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBhcmcpXFxuLS1cXG5mcy9mY250bC5jLTM3NC1cXG5mcy9mY250bC5jOjM3NTpcXHRpZiAoIWlub2RlX293bmVyX29yX2NhcGFibGUoZmlsZV9tbnRfaWRtYXAoZmlsZSksIGlub2RlKSlcXG5mcy9mY250bC5jLTM3Ni1cXHRcXHRyZXR1cm4gLUVQRVJNO1xcbi0tXFxuZnMvZmlsZV9hdHRyLmM9MjY4PWludCB2ZnNfZmlsZWF0dHJfc2V0KHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuLS1cXG5mcy9maWxlX2F0dHIuYy0yNzctXFxuZnMvZmlsZV9hdHRyLmM6Mjc4OlxcdGlmICghaW5vZGVfb3duZXJfb3JfY2FwYWJsZShpZG1hcCwgaW5vZGUpKVxcbmZzL2ZpbGVfYXR0ci5jLTI3OS1cXHRcXHRyZXR1cm4gLUVQRVJNO1xcbi0tXFxuZnMvaW5vZGUuYz0yNzM3PUVYUE9SVF9TWU1CT0woaW5vZGVfaW5pdF9vd25lcik7XFxuLS1cXG5mcy9pbm9kZS5jLTI3MzktLyoqXFxuZnMvaW5vZGUuYzoyNzQwOiAqIGlub2RlX293bmVyX29yX2NhcGFibGUgLSBjaGVjayBjdXJyZW50IHRhc2sgcGVybWlzc2lvbnMgdG8gaW5vZGVcXG5mcy9pbm9kZS5jLTI3NDEtICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnQgdGhlIGlub2RlIHdhcyBmb3VuZCBmcm9tXFxuLS1cXG5mcy9pbm9kZS5jLTI3NTItICovXFxuZnMvaW5vZGUuYzoyNzUzOmJvb2wgaW5vZGVfb3duZXJfb3JfY2FwYWJsZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSlcXG5mcy9pbm9kZS5jLTI3NTQte1xcbi0tXFxuZnMvaW5vZGUuYy0yNzcwLX1cXG5mcy9pbm9kZS5jOjI3NzE6RVhQT1JUX1NZTUJPTChpbm9kZV9vd25lcl9vcl9jYXBhYmxlKTtcXG5mcy9pbm9kZS5jLTI3NzItXFxuLS1cXG5mcy9uYW1laS5jPTE0Mjc9aW50IG1heV9saW5rYXQoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIGNvbnN0IHN0cnVjdCBwYXRoICpsaW5rKVxcbi0tXFxuZnMvbmFtZWkuYy0xNDQyLVxcdGlmIChzYWZlX2hhcmRsaW5rX3NvdXJjZShpZG1hcCwgaW5vZGUpIHx8XFxuZnMvbmFtZWkuYzoxNDQzOlxcdCAgICBpbm9kZV9vd25lcl9vcl9jYXBhYmxlKGlkbWFwLCBpbm9kZSkpXFxuZnMvbmFtZWkuYy0xNDQ0LVxcdFxcdHJldHVybiAwO1xcbi0tXFxuZnMvbmFtZWkuYz00MzM3PXN0YXRpYyBpbnQgbWF5X29wZW4oc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoLFxcbi0tXFxuZnMvbmFtZWkuYy00Mzg5LVxcdC8qIE9fTk9BVElNRSBjYW4gb25seSBiZSBzZXQgYnkgdGhlIG93bmVyIG9yIHN1cGVydXNlciAqL1xcbmZzL25hbWVpLmM6NDM5MDpcXHRpZiAoZmxhZyBcXHUwMDI2IE9fTk9BVElNRSBcXHUwMDI2XFx1MDAyNiAhaW5vZGVfb3duZXJfb3JfY2FwYWJsZShpZG1hcCwgaW5vZGUpKVxcbmZzL25hbWVpLmMtNDM5MS1cXHRcXHRyZXR1cm4gLUVQRVJNO1xcbi0tXFxuZnMvb3ZlcmxheWZzL2ZpbGUuYz0yOD1zdGF0aWMgc3RydWN0IGZpbGUgKm92bF9vcGVuX3JlYWxmaWxlKGNvbnN0IHN0cnVjdCBmaWxlICpmaWxlLFxcbi0tXFxuZnMvb3ZlcmxheWZzL2ZpbGUuYy00Ny1cXHRcXHR9IGVsc2Uge1xcbmZzL292ZXJsYXlmcy9maWxlLmM6NDg6XFx0XFx0XFx0aWYgKCFpbm9kZV9vd25lcl9vcl9jYXBhYmxlKHJlYWxfaWRtYXAsIHJlYWxpbm9kZSkpXFxuZnMvb3ZlcmxheWZzL2ZpbGUuYy00OS1cXHRcXHRcXHRcXHRmbGFncyBcXHUwMDI2PSB+T19OT0FUSU1FO1xcbi0tXFxuZnMvb3ZlcmxheWZzL2lub2RlLmM9NTIzPWludCBvdmxfc2V0X2FjbChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbi0tXFxuZnMvb3ZlcmxheWZzL2lub2RlLmMtNTM2LVxcdFxcdHJldHVybiBhY2wgPyAtRUFDQ0VTIDogMDtcXG5mcy9vdmVybGF5ZnMvaW5vZGUuYzo1Mzc6XFx0aWYgKCFpbm9kZV9vd25lcl9vcl9jYXBhYmxlKFxcdTAwMjZub3BfbW50X2lkbWFwLCBpbm9kZSkpXFxuZnMvb3ZlcmxheWZzL2lub2RlLmMtNTM4LVxcdFxcdHJldHVybiAtRVBFUk07XFxuLS1cXG5mcy9vdmVybGF5ZnMvdXRpbC5jPTY1Nz1zdHJ1Y3QgZmlsZSAqb3ZsX3BhdGhfb3Blbihjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCwgaW50IGZsYWdzKVxcbi0tXFxuZnMvb3ZlcmxheWZzL3V0aWwuYy02ODEtXFx0LyogT19OT0FUSU1FIGlzIGFuIG9wdGltaXphdGlvbiwgZG9uJ3QgZmFpbCBpZiBub3QgcGVybWl0dGVkICovXFxuZnMvb3ZlcmxheWZzL3V0aWwuYzo2ODI6XFx0aWYgKGlub2RlX293bmVyX29yX2NhcGFibGUocmVhbF9pZG1hcCwgaW5vZGUpKVxcbmZzL292ZXJsYXlmcy91dGlsLmMtNjgzLVxcdFxcdGZsYWdzIHw9IE9fTk9BVElNRTtcXG4tLVxcbmZzL3Bvc2l4X2FjbC5jPTkzNT1zZXRfcG9zaXhfYWNsKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuLS1cXG5mcy9wb3NpeF9hY2wuYy05NDYtXFx0XFx0cmV0dXJuIGFjbCA/IC1FQUNDRVMgOiAwO1xcbmZzL3Bvc2l4X2FjbC5jOjk0NzpcXHRpZiAoIWlub2RlX293bmVyX29yX2NhcGFibGUoaWRtYXAsIGlub2RlKSlcXG5mcy9wb3NpeF9hY2wuYy05NDgtXFx0XFx0cmV0dXJuIC1FUEVSTTtcXG4tLVxcbmZzL3hhdHRyLmM9MTI2PXhhdHRyX3Blcm1pc3Npb24oc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5mcy94YXR0ci5jLTE2Ny1cXHRcXHRcXHRcXHRicmVhaztcXG5mcy94YXR0ci5jOjE2ODpcXHRcXHRcXHRpZiAoaW5vZGVfb3duZXJfb3JfY2FwYWJsZShpZG1hcCwgaW5vZGUpKVxcbmZzL3hhdHRyLmMtMTY5LVxcdFxcdFxcdFxcdGJyZWFrO1xcbi0tXFxuaW5jbHVkZS9saW51eC9mcy5oPTE3NTI9c3RhdGljIGlubGluZSBib29sIGZpbGVfd3JpdGVfbm90X3N0YXJ0ZWQoY29uc3Qgc3RydWN0IGZpbGUgKmZpbGUpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2ZzLmgtMTc1OC1cXG5pbmNsdWRlL2xpbnV4L2ZzLmg6MTc1OTpib29sIGlub2RlX293bmVyX29yX2NhcGFibGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xcbmluY2x1ZGUvbGludXgvZnMuaC0xNzYwLVxcbi0tXFxuaW5jbHVkZS9saW51eC9mcy5oPTI0NTA9c3RhdGljIGlubGluZSBib29sIGZpbGVfb3duZXJfb3JfY2FwYWJsZShjb25zdCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG5pbmNsdWRlL2xpbnV4L2ZzLmgtMjQ1MS17XFxuaW5jbHVkZS9saW51eC9mcy5oOjI0NTI6XFx0cmV0dXJuIGlub2RlX293bmVyX29yX2NhcGFibGUoZmlsZV9tbnRfaWRtYXAoZmlsZSksIGZpbGVfaW5vZGUoZmlsZSkpO1xcbmluY2x1ZGUvbGludXgvZnMuaC0yNDUzLX1cXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYz0zMzY4PXN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9zZXR4YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0zMzgzLVxcdGlmICghc2VsaW51eF9pbml0aWFsaXplZCgpKVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzozMzg0OlxcdFxcdHJldHVybiAoaW5vZGVfb3duZXJfb3JfY2FwYWJsZShpZG1hcCwgaW5vZGUpID8gMCA6IC1FUEVSTSk7XFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTMzODUtXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMzM4OS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6MzM5MDpcXHRpZiAoIWlub2RlX293bmVyX29yX2NhcGFibGUoaWRtYXAsIGlub2RlKSlcXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMzM5MS1cXHRcXHRyZXR1cm4gLUVQRVJNO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwMzozMzo1Ni41OTA3MzMyNTJaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA0NTM0NTgwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqQW5hbHl6aW5nIGBpbm9kZV9vd25lcl9vcl9jYXBhYmxlYCBVc2FnZSoqXG5cblJpZ2h0LCBzbyBgaW5vZGVfb3duZXJfb3JfY2FwYWJsZWAgaXMgYSBwcmV0dHkgdWJpcXVpdG91cyBmdW5jdGlvbiwgaXNuJ3QgaXQ/IFNlZW1zIGxpa2UgaXQncyBzcHJpbmtsZWQgYWxsIG92ZXIgdGhlIGtlcm5lbCdzIGZpbGUgc3lzdGVtIGNvZGUuIEkga25vdyBpdCdzIGV4cG9ydGVkIGFuZCB1c2VkIGluIGEgdG9uIG9mIHBsYWNlcywgYnV0IEknbSB0cnlpbmcgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiBpdHMgb3ZlcmFsbCBpbXBhY3QuIEknbSBnb2luZyB0byBmb2xsb3cgdGhlIGxvZ2ljIGNoYWluIGZyb20gb25lIG9mIGl0cyB0eXBpY2FsIGVudHJ5IHBvaW50cy5cblxuTGV0J3Mgc3RhcnQgYnkgZGlnZ2luZyBpbnRvIGB2ZnNfc2V0bGVhc2VgLiBUaGF0J3MgYSByZWFzb25hYmxlIHBsYWNlIHRvIGJlZ2luLCBnaXZlbiB0aGF0IGl0J3MgYSBjcml0aWNhbCBmdW5jdGlvbiBmb3IgbWFuYWdpbmcgZmlsZSBsb2NraW5nL293bmVyc2hpcC4gSSBzdXNwZWN0IGBpbm9kZV9vd25lcl9vcl9jYXBhYmxlYCBpcyBsaWtlbHkgaW52b2x2ZWQgaW4gdGhlcmUgYXMgcGFydCBvZiBsZWFzZSBjaGVja3MgYW5kIHBlcm1pc3Npb25zLiBMZXQncyBzZWUgaG93IGl0J3MgdXNlZCB0aGVyZSBhbmQgdGhlbiBmb2xsb3cgdGhlIGJyZWFkY3J1bWJzIGZyb20gdGhlcmUuIEl0IHNob3VsZCBxdWlja2x5IHJldmVhbCBpZiBJIG5lZWQgdG8gbG9vayBpbnRvIG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyNzM4LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDM6MzQ6MDAuNjM2MDgzNjA5WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTEyMTAyOTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZmc19zZXRsZWFzZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9sb2Nrcy5jPTIxMTc9RVhQT1JUX1NZTUJPTF9HUEwoa2VybmVsX3NldGxlYXNlKTtcXG4tLVxcbmZzL2xvY2tzLmMtMjExOS0vKipcXG5mcy9sb2Nrcy5jOjIxMjA6ICogdmZzX3NldGxlYXNlICAgICAgICAtICAgICAgIHNldHMgYSBsZWFzZSBvbiBhbiBvcGVuIGZpbGVcXG5mcy9sb2Nrcy5jLTIxMjEtICogQGZpbHA6XFx0ZmlsZSBwb2ludGVyXFxuLS1cXG5mcy9sb2Nrcy5jPTIxMzY9aW50XFxuZnMvbG9ja3MuYzoyMTM3OnZmc19zZXRsZWFzZShzdHJ1Y3QgZmlsZSAqZmlscCwgaW50IGFyZywgc3RydWN0IGZpbGVfbGVhc2UgKipsZWFzZSwgdm9pZCAqKnByaXYpXFxuZnMvbG9ja3MuYy0yMTM4LXtcXG4tLVxcbmZzL2xvY2tzLmMtMjE1MS19XFxuZnMvbG9ja3MuYzoyMTUyOkVYUE9SVF9TWU1CT0xfR1BMKHZmc19zZXRsZWFzZSk7XFxuZnMvbG9ja3MuYy0yMTUzLVxcbmZzL2xvY2tzLmM9MjE1ND1zdGF0aWMgaW50IGRvX2ZjbnRsX2FkZF9sZWFzZSh1bnNpZ25lZCBpbnQgZmQsIHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgZmxhdm9yLCBpbnQgYXJnKVxcbi0tXFxuZnMvbG9ja3MuYy0yMTcwLVxcbmZzL2xvY2tzLmM6MjE3MTpcXHRlcnJvciA9IHZmc19zZXRsZWFzZShmaWxwLCBhcmcsIFxcdTAwMjZmbCwgKHZvaWQgKiopXFx1MDAyNm5ldyk7XFxuZnMvbG9ja3MuYy0yMTcyLVxcdGlmIChmbClcXG4tLVxcbmZzL2xvY2tzLmM9MjE4OT1pbnQgZmNudGxfc2V0bGVhc2UodW5zaWduZWQgaW50IGZkLCBzdHJ1Y3QgZmlsZSAqZmlscCwgaW50IGFyZylcXG4tLVxcbmZzL2xvY2tzLmMtMjE5NC1cXHRpZiAoYXJnID09IEZfVU5MQ0spXFxuZnMvbG9ja3MuYzoyMTk1OlxcdFxcdHJldHVybiB2ZnNfc2V0bGVhc2UoZmlscCwgRl9VTkxDSywgTlVMTCwgKHZvaWQgKiopXFx1MDAyNmZpbHApO1xcbmZzL2xvY2tzLmMtMjE5Ni1cXHRyZXR1cm4gZG9fZmNudGxfYWRkX2xlYXNlKGZkLCBmaWxwLCBGTF9MRUFTRSwgYXJnKTtcXG4tLVxcbmZzL2xvY2tzLmM9MjIwOT1pbnQgZmNudGxfc2V0ZGVsZWcodW5zaWduZWQgaW50IGZkLCBzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IGRlbGVnYXRpb24gKmRlbGVnKVxcbi0tXFxuZnMvbG9ja3MuYy0yMjE1LVxcdGlmIChkZWxlZy1cXHUwMDNlZF90eXBlID09IEZfVU5MQ0spXFxuZnMvbG9ja3MuYzoyMjE2OlxcdFxcdHJldHVybiB2ZnNfc2V0bGVhc2UoZmlscCwgRl9VTkxDSywgTlVMTCwgKHZvaWQgKiopXFx1MDAyNmZpbHApO1xcbmZzL2xvY2tzLmMtMjIxNy1cXHRyZXR1cm4gZG9fZmNudGxfYWRkX2xlYXNlKGZkLCBmaWxwLCBGTF9ERUxFRywgZGVsZWctXFx1MDAzZWRfdHlwZSk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2ZpbGVsb2NrLmg9MjM0PWludCBrZXJuZWxfc2V0bGVhc2Uoc3RydWN0IGZpbGUgKiwgaW50LCBzdHJ1Y3QgZmlsZV9sZWFzZSAqKiwgdm9pZCAqKik7XFxuaW5jbHVkZS9saW51eC9maWxlbG9jay5oOjIzNTppbnQgdmZzX3NldGxlYXNlKHN0cnVjdCBmaWxlICosIGludCwgc3RydWN0IGZpbGVfbGVhc2UgKiosIHZvaWQgKiopO1xcbmluY2x1ZGUvbGludXgvZmlsZWxvY2suaC0yMzYtaW50IGxlYXNlX21vZGlmeShzdHJ1Y3QgZmlsZV9sZWFzZSAqLCBpbnQsIHN0cnVjdCBsaXN0X2hlYWQgKik7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2ZpbGVsb2NrLmg9NDIxPXN0YXRpYyBpbmxpbmUgaW50IGtlcm5lbF9zZXRsZWFzZShzdHJ1Y3QgZmlsZSAqZmlscCwgaW50IGFyZyxcXG4tLVxcbmluY2x1ZGUvbGludXgvZmlsZWxvY2suaC00MjYtXFxuaW5jbHVkZS9saW51eC9maWxlbG9jay5oOjQyNzpzdGF0aWMgaW5saW5lIGludCB2ZnNfc2V0bGVhc2Uoc3RydWN0IGZpbGUgKmZpbHAsIGludCBhcmcsXFxuaW5jbHVkZS9saW51eC9maWxlbG9jay5oLTQyOC1cXHRcXHRcXHQgICAgICAgc3RydWN0IGZpbGVfbGVhc2UgKipsZWFzZSwgdm9pZCAqKnByaXYpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAzOjM0OjAzLjE0ODE5NTgyOVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTI1ODQ0OTc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBGaWxlIE93bmVyc2hpcCBWZXJpZmljYXRpb24gaW4gdGhlIEtlcm5lbCoqXG5cbk9rYXksIHNvIGB2ZnNfc2V0bGVhc2VgIGlzIGF2YWlsYWJsZSBmb3IgbXkgaW52ZXN0aWdhdGlvbiwgdGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGtlcm5lbCBhY3R1YWxseSAqZGV0ZXJtaW5lcyogaWYgYSB1c2VyIG93bnMgYW4gaW5vZGUuIExldCBtZSBzZWUuLi4gYHZmc19pbm9kZV9pc19vd25lZF9ieV9tZWAuLi4gQWgsIGl0J3Mgbm90IGV4cG9ydGVkLCBidXQgaXQncyBub3Qgc3RhdGljIGVpdGhlciwgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIFdhaXQsIGl0J3MgZGVmaW5lZCBpbiBgZnMvbmFtZWkuY2AuIFNpbmNlIGl0J3Mgbm90IHN0YXRpYywgSSBjYW4gZGlyZWN0bHkgYW5hbHl6ZSBgdmZzX2lub2RlX2lzX293bmVkX2J5X21lYCBpdHNlbGYsIHRoYXQncyBwcmVmZXJhYmxlLiBJIHRoaW5rIGl0IHdpbGwgYmUgYmV0dGVyIHRvIGxvb2sgYXQgaXQgZGlyZWN0bHkgYW5kIG5vdCBqdXN0IHRoZSBmdW5jdGlvbnMgdGhhdCBjYWxsIGl0LlxuXG5MZXQncyBjaGVjayBgYWZzX2lzX293bmVkX2J5X21lYCBhbmQgYGFmc19oYXZlX3NhbWVfb3duZXJgIHRvIHNlZSBpZiB0aGVyZSBpcyBhbnkgb3ZlcmxhcCBpbiBiZWhhdmlvdXIgb3IgaW1wbGVtZW50YXRpb24uIFRob3NlIGFyZSBkZWZpbmVkIGluIGBmcy9hZnMvc2VjdXJpdHkuY2AsIHNvIEkgc2hvdWxkIGtlZXAgdGhvc2UgaW4gbWluZCBhcyB3ZWxsLiBJIG5lZWQgdG8ga2VlcCB0aG9zZSBpbiBtaW5kIGFzIHRoZXkgbWF5IHByb3ZpZGUgc29tZSBpbnNpZ2h0cyBpbnRvIHNpbWlsYXIgY2hlY2tzIGZvciBkaWZmZXJlbnQgZmlsZXN5c3RlbXMuXG5cbk5vdywgd2hhdCBhYm91dCB0aGUgbW9yZSBnZW5lcmFsIG93bmVyc2hpcCBjaGVja3M/IEknbGwgbG9vayBhdCBgY2hvd25fb2tgIGFuZCBgY2hncnBfb2tgIG5leHQuIEhtbSwgdGhleSdyZSBzdGF0aWMgd2l0aGluIGBmcy9hdHRyLmNgLiBTaW5jZSB0aGV5J3JlIHN0YXRpYywgSSdsbCBuZWVkIHRvIGZvY3VzIG9uIHRoZWlyIGNhbGxlciwgd2hpY2ggbG9va3MgdG8gYmUgYHNldGF0dHJfcHJlcGFyZWAsIGFuZCBmb3J0dW5hdGVseSwgKnRoYXQqIGlzIGV4cG9ydGVkLiBJJ3ZlIGdvdCBhIGxvdCB0byBleGFtaW5lIGJ1dCB0aGlzIGFsbCBzZWVtcyBsb2dpY2FsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzgwMiwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwMzozNDowOC4wNzQwNDYxODhaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2Nzk5OTA3OTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2V0YXR0cl9wcmVwYXJlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcG9ydGluZy5yc3Q9MzI4PXNpemUgdXBkYXRlIGFuZCBvbiBmaW5hbGx5IG9uLWRpc2sgdHJ1bmNhdGlvbiB3aGljaCBzaG91bGQgbm90IGZhaWwuXFxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wb3J0aW5nLnJzdDozMjk6c2V0YXR0cl9wcmVwYXJlICh3aGljaCB1c2VkIHRvIGJlIGlub2RlX2NoYW5nZV9vaykgbm93IGluY2x1ZGVzIHRoZSBzaXplIGNoZWNrc1xcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcG9ydGluZy5yc3QtMzMwLWZvciBBVFRSX1NJWkUgYW5kIG11c3QgYmUgY2FsbGVkIGluIHRoZSBiZWdpbm5pbmcgb2YgLVxcdTAwM2VzZXRhdHRyIHVuY29uZGl0aW9uYWxseS5cXG4tLVxcbmZzLzlwL3Zmc19pbm9kZS5jPTEwMTg9c3RhdGljIGludCB2OWZzX3Zmc19zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbi0tXFxuZnMvOXAvdmZzX2lub2RlLmMtMTAyNy1cXHRwOV9kZWJ1ZyhQOV9ERUJVR19WRlMsIFxcXCJcXFxcblxcXCIpO1xcbmZzLzlwL3Zmc19pbm9kZS5jOjEwMjg6XFx0cmV0dmFsID0gc2V0YXR0cl9wcmVwYXJlKFxcdTAwMjZub3BfbW50X2lkbWFwLCBkZW50cnksIGlhdHRyKTtcXG5mcy85cC92ZnNfaW5vZGUuYy0xMDI5LVxcdGlmIChyZXR2YWwpXFxuLS1cXG5mcy85cC92ZnNfaW5vZGVfZG90bC5jPTUxMz1pbnQgdjlmc192ZnNfc2V0YXR0cl9kb3RsKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbi0tXFxuZnMvOXAvdmZzX2lub2RlX2RvdGwuYy01MjYtXFxuZnMvOXAvdmZzX2lub2RlX2RvdGwuYzo1Mjc6XFx0cmV0dmFsID0gc2V0YXR0cl9wcmVwYXJlKFxcdTAwMjZub3BfbW50X2lkbWFwLCBkZW50cnksIGlhdHRyKTtcXG5mcy85cC92ZnNfaW5vZGVfZG90bC5jLTUyOC1cXHRpZiAocmV0dmFsKVxcbi0tXFxuZnMvYWRmcy9pbm9kZS5jPTMwMj1hZGZzX3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlhdHRyICphdHRyKVxcbi0tXFxuZnMvYWRmcy9pbm9kZS5jLTMwOC1cXHRcXG5mcy9hZGZzL2lub2RlLmM6MzA5OlxcdGVycm9yID0gc2V0YXR0cl9wcmVwYXJlKFxcdTAwMjZub3BfbW50X2lkbWFwLCBkZW50cnksIGF0dHIpO1xcbmZzL2FkZnMvaW5vZGUuYy0zMTAtXFxuLS1cXG5mcy9hZmZzL2lub2RlLmM9MjE2PWFmZnNfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaWF0dHIgKmF0dHIpXFxuLS1cXG5mcy9hZmZzL2lub2RlLmMtMjIyLVxcbmZzL2FmZnMvaW5vZGUuYzoyMjM6XFx0ZXJyb3IgPSBzZXRhdHRyX3ByZXBhcmUoXFx1MDAyNm5vcF9tbnRfaWRtYXAsIGRlbnRyeSwgYXR0cik7XFxuZnMvYWZmcy9pbm9kZS5jLTIyNC1cXHRpZiAoZXJyb3IpXFxuLS1cXG5mcy9hdHRyLmMtMjktICogdW5jb25kaXRpb25hbGx5IGlmIFNfSVhHUlAgaXMgc2V0LiBPdGhlcndpc2Ugd2UgaGF2ZSB0aGUgZXhhY3Qgc2FtZVxcbmZzL2F0dHIuYzozMDogKiByZXF1aXJlbWVudHMgYXMgc2V0YXR0cl9wcmVwYXJlKCkgYW5kIHNldGF0dHJfY29weSgpLlxcbmZzL2F0dHIuYy0zMS0gKlxcbi0tXFxuZnMvYXR0ci5jPTEyND1zdGF0aWMgaW50IGNoZ3JwX29rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbi0tXFxuZnMvYXR0ci5jLTE0Ny0vKipcXG5mcy9hdHRyLmM6MTQ4OiAqIHNldGF0dHJfcHJlcGFyZSAtIGNoZWNrIGlmIGF0dHJpYnV0ZSBjaGFuZ2VzIHRvIGEgZGVudHJ5IGFyZSBhbGxvd2VkXFxuZnMvYXR0ci5jLTE0OS0gKiBAaWRtYXA6XFx0aWRtYXAgb2YgdGhlIG1vdW50IHRoZSBpbm9kZSB3YXMgZm91bmQgZnJvbVxcbi0tXFxuZnMvYXR0ci5jLTE2Ny0gKi9cXG5mcy9hdHRyLmM6MTY4OmludCBzZXRhdHRyX3ByZXBhcmUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG5mcy9hdHRyLmMtMTY5LVxcdFxcdCAgICBzdHJ1Y3QgaWF0dHIgKmF0dHIpXFxuLS1cXG5mcy9hdHRyLmMtMjQ3LX1cXG5mcy9hdHRyLmM6MjQ4OkVYUE9SVF9TWU1CT0woc2V0YXR0cl9wcmVwYXJlKTtcXG5mcy9hdHRyLmMtMjQ5LVxcbi0tXFxuZnMvYnRyZnMvaW5vZGUuYz01Mjk1PXN0YXRpYyBpbnQgYnRyZnNfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbi0tXFxuZnMvYnRyZnMvaW5vZGUuYy01MzA0LVxcbmZzL2J0cmZzL2lub2RlLmM6NTMwNTpcXHRyZXQgPSBzZXRhdHRyX3ByZXBhcmUoaWRtYXAsIGRlbnRyeSwgYXR0cik7XFxuZnMvYnRyZnMvaW5vZGUuYy01MzA2LVxcdGlmIChyZXQpXFxuLS1cXG5mcy9jZXBoL2lub2RlLmM9MjkyMz1pbnQgY2VwaF9zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuLS1cXG5mcy9jZXBoL2lub2RlLmMtMjkzOS1cXG5mcy9jZXBoL2lub2RlLmM6Mjk0MDpcXHRlcnIgPSBzZXRhdHRyX3ByZXBhcmUoaWRtYXAsIGRlbnRyeSwgYXR0cik7XFxuZnMvY2VwaC9pbm9kZS5jLTI5NDEtXFx0aWYgKGVyciAhPSAwKVxcbi0tXFxuZnMvZWNyeXB0ZnMvaW5vZGUuYz04NzI9c3RhdGljIGludCBlY3J5cHRmc19zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbi0tXFxuZnMvZWNyeXB0ZnMvaW5vZGUuYy05MjAtXFxuZnMvZWNyeXB0ZnMvaW5vZGUuYzo5MjE6XFx0cmMgPSBzZXRhdHRyX3ByZXBhcmUoXFx1MDAyNm5vcF9tbnRfaWRtYXAsIGRlbnRyeSwgaWEpO1xcbmZzL2VjcnlwdGZzL2lub2RlLmMtOTIyLVxcdGlmIChyYylcXG4tLVxcbmZzL2VmaXZhcmZzL2lub2RlLmM9MTczPXN0YXRpYyBpbnQgZWZpdmFyZnNfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbi0tXFxuZnMvZWZpdmFyZnMvaW5vZGUuYy0xNzgtXFxuZnMvZWZpdmFyZnMvaW5vZGUuYzoxNzk6XFx0ZXJyb3IgPSBzZXRhdHRyX3ByZXBhcmUoaWRtYXAsIGRlbnRyeSwgaWF0dHIpO1xcbmZzL2VmaXZhcmZzL2lub2RlLmMtMTgwLVxcdGlmIChlcnJvcilcXG4tLVxcbmZzL2V4ZmF0L2ZpbGUuYz0zNDk9aW50IGV4ZmF0X3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG4tLVxcbmZzL2V4ZmF0L2ZpbGUuYy0zNzUtXFxuZnMvZXhmYXQvZmlsZS5jOjM3NjpcXHRlcnJvciA9IHNldGF0dHJfcHJlcGFyZShpZG1hcCwgZGVudHJ5LCBhdHRyKTtcXG5mcy9leGZhdC9maWxlLmMtMzc3LVxcdGF0dHItXFx1MDAzZWlhX3ZhbGlkID0gaWFfdmFsaWQ7XFxuLS1cXG5mcy9leHQyL2lub2RlLmM9MTYwNz1pbnQgZXh0Ml9zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuLS1cXG5mcy9leHQyL2lub2RlLmMtMTYxMi1cXG5mcy9leHQyL2lub2RlLmM6MTYxMzpcXHRlcnJvciA9IHNldGF0dHJfcHJlcGFyZShcXHUwMDI2bm9wX21udF9pZG1hcCwgZGVudHJ5LCBpYXR0cik7XFxuZnMvZXh0Mi9pbm9kZS5jLTE2MTQtXFx0aWYgKGVycm9yKVxcbi0tXFxuZnMvZXh0NC9pbm9kZS5jPTU5MzQ9aW50IGV4dDRfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbi0tXFxuZnMvZXh0NC9pbm9kZS5jLTU5NTQtXFxuZnMvZXh0NC9pbm9kZS5jOjU5NTU6XFx0ZXJyb3IgPSBzZXRhdHRyX3ByZXBhcmUoaWRtYXAsIGRlbnRyeSwgYXR0cik7XFxuZnMvZXh0NC9pbm9kZS5jLTU5NTYtXFx0aWYgKGVycm9yKVxcbi0tXFxuZnMvZjJmcy9maWxlLmM9MTA3Mz1pbnQgZjJmc19zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuLS1cXG5mcy9mMmZzL2ZpbGUuYy0xMDgzLVxcbmZzL2YyZnMvZmlsZS5jOjEwODQ6XFx0ZXJyID0gc2V0YXR0cl9wcmVwYXJlKGlkbWFwLCBkZW50cnksIGF0dHIpO1xcbmZzL2YyZnMvZmlsZS5jLTEwODUtXFx0aWYgKGVycilcXG4tLVxcbmZzL2ZhdC9maWxlLmM9NTE4PWludCBmYXRfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbi0tXFxuZnMvZmF0L2ZpbGUuYy01MzItXFxuZnMvZmF0L2ZpbGUuYzo1MzM6XFx0ZXJyb3IgPSBzZXRhdHRyX3ByZXBhcmUoaWRtYXAsIGRlbnRyeSwgYXR0cik7XFxuZnMvZmF0L2ZpbGUuYy01MzQtXFx0YXR0ci1cXHUwMDNlaWFfdmFsaWQgPSBpYV92YWxpZDtcXG4tLVxcbmZzL2Z1c2UvZGlyLmM9MjEyOD1pbnQgZnVzZV9kb19zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuLS1cXG5mcy9mdXNlL2Rpci5jLTIxNDktXFxuZnMvZnVzZS9kaXIuYzoyMTUwOlxcdGVyciA9IHNldGF0dHJfcHJlcGFyZShpZG1hcCwgZGVudHJ5LCBhdHRyKTtcXG5mcy9mdXNlL2Rpci5jLTIxNTEtXFx0aWYgKGVycilcXG4tLVxcbmZzL2dmczIvaW5vZGUuYz0yMDk5PXN0YXRpYyBpbnQgZ2ZzMl9zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbi0tXFxuZnMvZ2ZzMi9pbm9kZS5jLTIxMTgtXFxuZnMvZ2ZzMi9pbm9kZS5jOjIxMTk6XFx0ZXJyb3IgPSBzZXRhdHRyX3ByZXBhcmUoXFx1MDAyNm5vcF9tbnRfaWRtYXAsIGRlbnRyeSwgYXR0cik7XFxuZnMvZ2ZzMi9pbm9kZS5jLTIxMjAtXFx0aWYgKGVycm9yKVxcbi0tXFxuZnMvaGZzL2lub2RlLmM9NjI3PWludCBoZnNfaW5vZGVfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbi0tXFxuZnMvaGZzL2lub2RlLmMtNjMzLVxcbmZzL2hmcy9pbm9kZS5jOjYzNDpcXHRlcnJvciA9IHNldGF0dHJfcHJlcGFyZShcXHUwMDI2bm9wX21udF9pZG1hcCwgZGVudHJ5LCBhdHRyKTtcXG5mcy9oZnMvaW5vZGUuYy02MzUtXFx0aWYgKGVycm9yKVxcbi0tXFxuZnMvaGZzcGx1cy9pbm9kZS5jPTMwMD1zdGF0aWMgaW50IGhmc3BsdXNfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4tLVxcbmZzL2hmc3BsdXMvaW5vZGUuYy0zMDUtXFxuZnMvaGZzcGx1cy9pbm9kZS5jOjMwNjpcXHRlcnJvciA9IHNldGF0dHJfcHJlcGFyZShcXHUwMDI2bm9wX21udF9pZG1hcCwgZGVudHJ5LCBhdHRyKTtcXG5mcy9oZnNwbHVzL2lub2RlLmMtMzA3LVxcdGlmIChlcnJvcilcXG4tLVxcbmZzL2hvc3Rmcy9ob3N0ZnNfa2Vybi5jPTgwND1zdGF0aWMgaW50IGhvc3Rmc19zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbi0tXFxuZnMvaG9zdGZzL2hvc3Rmc19rZXJuLmMtODEzLVxcbmZzL2hvc3Rmcy9ob3N0ZnNfa2Vybi5jOjgxNDpcXHRlcnIgPSBzZXRhdHRyX3ByZXBhcmUoXFx1MDAyNm5vcF9tbnRfaWRtYXAsIGRlbnRyeSwgYXR0cik7XFxuZnMvaG9zdGZzL2hvc3Rmc19rZXJuLmMtODE1LVxcdGlmIChlcnIpXFxuLS1cXG5mcy9ocGZzL2lub2RlLmM9MjYwPWludCBocGZzX3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG4tLVxcbmZzL2hwZnMvaW5vZGUuYy0yNzctXFxuZnMvaHBmcy9pbm9kZS5jOjI3ODpcXHRlcnJvciA9IHNldGF0dHJfcHJlcGFyZShcXHUwMDI2bm9wX21udF9pZG1hcCwgZGVudHJ5LCBhdHRyKTtcXG5mcy9ocGZzL2lub2RlLmMtMjc5LVxcdGlmIChlcnJvcilcXG4tLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jPTgzMT1zdGF0aWMgaW50IGh1Z2V0bGJmc19zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtODM5LVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjg0MDpcXHRlcnJvciA9IHNldGF0dHJfcHJlcGFyZShpZG1hcCwgZGVudHJ5LCBhdHRyKTtcXG5mcy9odWdldGxiZnMvaW5vZGUuYy04NDEtXFx0aWYgKGVycm9yKVxcbi0tXFxuZnMvamZmczIvZnMuYz0xOTM9aW50IGpmZnMyX3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG4tLVxcbmZzL2pmZnMyL2ZzLmMtMTk4LVxcbmZzL2pmZnMyL2ZzLmM6MTk5OlxcdHJjID0gc2V0YXR0cl9wcmVwYXJlKFxcdTAwMjZub3BfbW50X2lkbWFwLCBkZW50cnksIGlhdHRyKTtcXG5mcy9qZmZzMi9mcy5jLTIwMC1cXHRpZiAocmMpXFxuLS1cXG5mcy9qZnMvZmlsZS5jPTkyPWludCBqZnNfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbi0tXFxuZnMvamZzL2ZpbGUuYy05Ny1cXG5mcy9qZnMvZmlsZS5jOjk4OlxcdHJjID0gc2V0YXR0cl9wcmVwYXJlKFxcdTAwMjZub3BfbW50X2lkbWFwLCBkZW50cnksIGlhdHRyKTtcXG5mcy9qZnMvZmlsZS5jLTk5LVxcdGlmIChyYylcXG4tLVxcbmZzL2tlcm5mcy9pbm9kZS5jPTExMD1pbnQga2VybmZzX2lvcF9zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuLS1cXG5mcy9rZXJuZnMvaW5vZGUuYy0xMjItXFx0ZG93bl93cml0ZShcXHUwMDI2cm9vdC1cXHUwMDNla2VybmZzX2lhdHRyX3J3c2VtKTtcXG5mcy9rZXJuZnMvaW5vZGUuYzoxMjM6XFx0ZXJyb3IgPSBzZXRhdHRyX3ByZXBhcmUoXFx1MDAyNm5vcF9tbnRfaWRtYXAsIGRlbnRyeSwgaWF0dHIpO1xcbmZzL2tlcm5mcy9pbm9kZS5jLTEyNC1cXHRpZiAoZXJyb3IpXFxuLS1cXG5mcy9saWJmcy5jPTkxNj1pbnQgc2ltcGxlX3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG4tLVxcbmZzL2xpYmZzLmMtOTIxLVxcbmZzL2xpYmZzLmM6OTIyOlxcdGVycm9yID0gc2V0YXR0cl9wcmVwYXJlKGlkbWFwLCBkZW50cnksIGlhdHRyKTtcXG5mcy9saWJmcy5jLTkyMy1cXHRpZiAoZXJyb3IpXFxuLS1cXG5mcy9taW5peC9maWxlLmM9MzM9c3RhdGljIGludCBtaW5peF9zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbi0tXFxuZnMvbWluaXgvZmlsZS5jLTM4LVxcbmZzL21pbml4L2ZpbGUuYzozOTpcXHRlcnJvciA9IHNldGF0dHJfcHJlcGFyZShcXHUwMDI2bm9wX21udF9pZG1hcCwgZGVudHJ5LCBhdHRyKTtcXG5mcy9taW5peC9maWxlLmMtNDAtXFx0aWYgKGVycm9yKVxcbi0tXFxuZnMvbmFtZXNwYWNlLmM9NDg0OT1zdGF0aWMgaW5saW5lIGJvb2wgbW50X2FsbG93X3dyaXRlcnMoY29uc3Qgc3RydWN0IG1vdW50X2thdHRyICprYXR0cixcXG4tLVxcbmZzL25hbWVzcGFjZS5jLTQ4NTYtXFxuZnMvbmFtZXNwYWNlLmM6NDg1NzpzdGF0aWMgaW50IG1vdW50X3NldGF0dHJfcHJlcGFyZShzdHJ1Y3QgbW91bnRfa2F0dHIgKmthdHRyLCBzdHJ1Y3QgbW91bnQgKm1udClcXG5mcy9uYW1lc3BhY2UuYy00ODU4LXtcXG4tLVxcbmZzL25hbWVzcGFjZS5jPTQ5Mjg9c3RhdGljIGludCBkb19tb3VudF9zZXRhdHRyKGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoLCBzdHJ1Y3QgbW91bnRfa2F0dHIgKmthdHRyKVxcbi0tXFxuZnMvbmFtZXNwYWNlLmMtNDk3MC1cXHQgKi9cXG5mcy9uYW1lc3BhY2UuYzo0OTcxOlxcdGVyciA9IG1vdW50X3NldGF0dHJfcHJlcGFyZShrYXR0ciwgbW50KTtcXG5mcy9uYW1lc3BhY2UuYy00OTcyLVxcdGlmICghZXJyKVxcbi0tXFxuZnMvbmZzZC9uZnNwcm9jLmM9NzY9bmZzZF9wcm9jX3NldGF0dHIoc3RydWN0IHN2Y19ycXN0ICpycXN0cClcXG4tLVxcbmZzL25mc2QvbmZzcHJvYy5jLTk2LVxcdCAqIFNvIGlmIGl0IGxvb2tzIGxpa2UgaXQgbWlnaHQgYmUgXFxcInNldCBib3RoIHRvIHRoZSBzYW1lIHRpbWUgd2hpY2hcXG5mcy9uZnNkL25mc3Byb2MuYzo5NzpcXHQgKiBpcyBjbG9zZSB0byBub3dcXFwiLCBhbmQgaWYgc2V0YXR0cl9wcmVwYXJlIGZhaWxzLCB0aGVuIHdlXFxuZnMvbmZzZC9uZnNwcm9jLmMtOTgtXFx0ICogY29udmVydCB0byBcXFwic2V0IHRvIG5vd1xcXCIgaW5zdGVhZCBvZiBcXFwic2V0IHRvIGV4cGxpY2l0IHRpbWVcXFwiXFxuZnMvbmZzZC9uZnNwcm9jLmMtOTktXFx0ICpcXG5mcy9uZnNkL25mc3Byb2MuYzoxMDA6XFx0ICogV2Ugb25seSBjYWxsIHNldGF0dHJfcHJlcGFyZSBhcyB0aGUgbGFzdCB0ZXN0IGFzIHRlY2huaWNhbGx5XFxuZnMvbmZzZC9uZnNwcm9jLmMtMTAxLVxcdCAqIGl0IGlzIG5vdCBhbiBpbnRlcmZhY2UgdGhhdCB3ZSBzaG91bGQgYmUgdXNpbmcuXFxuLS1cXG5mcy9uZnNkL25mc3Byb2MuYy0xMjItXFx0XFx0aWYgKGRlbHRhIFxcdTAwM2MgTUFYX1RPVUNIX1RJTUVfRVJST1IgXFx1MDAyNlxcdTAwMjZcXG5mcy9uZnNkL25mc3Byb2MuYzoxMjM6XFx0XFx0ICAgIHNldGF0dHJfcHJlcGFyZShcXHUwMDI2bm9wX21udF9pZG1hcCwgZmhwLVxcdTAwM2VmaF9kZW50cnksIGlhcCkgIT0gMCkge1xcbmZzL25mc2QvbmZzcHJvYy5jLTEyNC1cXHRcXHRcXHQvKlxcbi0tXFxuZnMvbmlsZnMyL2lub2RlLmM9OTA5PWludCBuaWxmc19zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuLS1cXG5mcy9uaWxmczIvaW5vZGUuYy05MTYtXFxuZnMvbmlsZnMyL2lub2RlLmM6OTE3OlxcdGVyciA9IHNldGF0dHJfcHJlcGFyZShcXHUwMDI2bm9wX21udF9pZG1hcCwgZGVudHJ5LCBpYXR0cik7XFxuZnMvbmlsZnMyL2lub2RlLmMtOTE4LVxcdGlmIChlcnIpXFxuLS1cXG5mcy9udGZzL2ZpbGUuYz0yOTk9aW50IG50ZnNfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbi0tXFxuZnMvbnRmcy9maWxlLmMtMzEwLVxcbmZzL250ZnMvZmlsZS5jOjMxMTpcXHRlcnIgPSBzZXRhdHRyX3ByZXBhcmUoaWRtYXAsIGRlbnRyeSwgYXR0cik7XFxuZnMvbnRmcy9maWxlLmMtMzEyLVxcdGlmIChlcnIpXFxuLS1cXG5mcy9udGZzMy9maWxlLmM9NzA2PWludCBudGZzX3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG4tLVxcbmZzL250ZnMzL2ZpbGUuYy03MjEtXFxuZnMvbnRmczMvZmlsZS5jOjcyMjpcXHRlcnIgPSBzZXRhdHRyX3ByZXBhcmUoaWRtYXAsIGRlbnRyeSwgYXR0cik7XFxuZnMvbnRmczMvZmlsZS5jLTcyMy1cXHRpZiAoZXJyKVxcbi0tXFxuZnMvb2NmczIvZGxtZnMvZGxtZnMuYz0xOTE9c3RhdGljIGludCBkbG1mc19maWxlX3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuLS1cXG5mcy9vY2ZzMi9kbG1mcy9kbG1mcy5jLTE5Ny1cXHRhdHRyLVxcdTAwM2VpYV92YWxpZCBcXHUwMDI2PSB+QVRUUl9TSVpFO1xcbmZzL29jZnMyL2RsbWZzL2RsbWZzLmM6MTk4OlxcdGVycm9yID0gc2V0YXR0cl9wcmVwYXJlKFxcdTAwMjZub3BfbW50X2lkbWFwLCBkZW50cnksIGF0dHIpO1xcbmZzL29jZnMyL2RsbWZzL2RsbWZzLmMtMTk5LVxcdGlmIChlcnJvcilcXG4tLVxcbmZzL29jZnMyL2ZpbGUuYz0xMTIwPWludCBvY2ZzMl9zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuLS1cXG5mcy9vY2ZzMi9maWxlLmMtMTE1OS1cXG5mcy9vY2ZzMi9maWxlLmM6MTE2MDpcXHRzdGF0dXMgPSBzZXRhdHRyX3ByZXBhcmUoXFx1MDAyNm5vcF9tbnRfaWRtYXAsIGRlbnRyeSwgYXR0cik7XFxuZnMvb2NmczIvZmlsZS5jLTExNjEtXFx0aWYgKHN0YXR1cylcXG4tLVxcbmZzL29tZnMvZmlsZS5jPTM0MT1zdGF0aWMgaW50IG9tZnNfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4tLVxcbmZzL29tZnMvZmlsZS5jLTM0Ni1cXG5mcy9vbWZzL2ZpbGUuYzozNDc6XFx0ZXJyb3IgPSBzZXRhdHRyX3ByZXBhcmUoXFx1MDAyNm5vcF9tbnRfaWRtYXAsIGRlbnRyeSwgYXR0cik7XFxuZnMvb21mcy9maWxlLmMtMzQ4LVxcdGlmIChlcnJvcilcXG4tLVxcbmZzL29yYW5nZWZzL2lub2RlLmM9ODMxPWludCBvcmFuZ2Vmc19zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuLS1cXG5mcy9vcmFuZ2Vmcy9pbm9kZS5jLTgzNi1cXHQgICAgZGVudHJ5KTtcXG5mcy9vcmFuZ2Vmcy9pbm9kZS5jOjgzNzpcXHRyZXQgPSBzZXRhdHRyX3ByZXBhcmUoXFx1MDAyNm5vcF9tbnRfaWRtYXAsIGRlbnRyeSwgaWF0dHIpO1xcbmZzL29yYW5nZWZzL2lub2RlLmMtODM4LVxcdGlmIChyZXQpXFxuLS1cXG5mcy9vdmVybGF5ZnMvaW5vZGUuYz0yMT1pbnQgb3ZsX3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG4tLVxcbmZzL292ZXJsYXlmcy9pbm9kZS5jLTI4LVxcbmZzL292ZXJsYXlmcy9pbm9kZS5jOjI5OlxcdGVyciA9IHNldGF0dHJfcHJlcGFyZShcXHUwMDI2bm9wX21udF9pZG1hcCwgZGVudHJ5LCBhdHRyKTtcXG5mcy9vdmVybGF5ZnMvaW5vZGUuYy0zMC1cXHRpZiAoZXJyKVxcbi0tXFxuZnMvcHJvYy9iYXNlLmM9NzA1PWludCBwcm9jX25vY2htb2Rfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbi0tXFxuZnMvcHJvYy9iYXNlLmMtNzEzLVxcbmZzL3Byb2MvYmFzZS5jOjcxNDpcXHRlcnJvciA9IHNldGF0dHJfcHJlcGFyZShcXHUwMDI2bm9wX21udF9pZG1hcCwgZGVudHJ5LCBhdHRyKTtcXG5mcy9wcm9jL2Jhc2UuYy03MTUtXFx0aWYgKGVycm9yKVxcbi0tXFxuZnMvcHJvYy9nZW5lcmljLmM9MTIwPXN0YXRpYyBpbnQgcHJvY19zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuLS1cXG5mcy9wcm9jL2dlbmVyaWMuYy0xMjYtXFxuZnMvcHJvYy9nZW5lcmljLmM6MTI3OlxcdGVycm9yID0gc2V0YXR0cl9wcmVwYXJlKFxcdTAwMjZub3BfbW50X2lkbWFwLCBkZW50cnksIGlhdHRyKTtcXG5mcy9wcm9jL2dlbmVyaWMuYy0xMjgtXFx0aWYgKGVycm9yKVxcbi0tXFxuZnMvcHJvYy9wcm9jX3N5c2N0bC5jPTgyMD1zdGF0aWMgaW50IHByb2Nfc3lzX3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuLS1cXG5mcy9wcm9jL3Byb2Nfc3lzY3RsLmMtODI4LVxcbmZzL3Byb2MvcHJvY19zeXNjdGwuYzo4Mjk6XFx0ZXJyb3IgPSBzZXRhdHRyX3ByZXBhcmUoXFx1MDAyNm5vcF9tbnRfaWRtYXAsIGRlbnRyeSwgYXR0cik7XFxuZnMvcHJvYy9wcm9jX3N5c2N0bC5jLTgzMC1cXHRpZiAoZXJyb3IpXFxuLS1cXG5mcy9yYW1mcy9maWxlLW5vbW11LmM9MTYxPXN0YXRpYyBpbnQgcmFtZnNfbm9tbXVfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4tLVxcbmZzL3JhbWZzL2ZpbGUtbm9tbXUuYy0xNjgtXFx0LyogUE9TSVggVUlEL0dJRCB2ZXJpZmljYXRpb24gZm9yIHNldHRpbmcgaW5vZGUgYXR0cmlidXRlcyAqL1xcbmZzL3JhbWZzL2ZpbGUtbm9tbXUuYzoxNjk6XFx0cmV0ID0gc2V0YXR0cl9wcmVwYXJlKFxcdTAwMjZub3BfbW50X2lkbWFwLCBkZW50cnksIGlhKTtcXG5mcy9yYW1mcy9maWxlLW5vbW11LmMtMTcwLVxcdGlmIChyZXQpXFxuLS1cXG5mcy9zbWIvY2xpZW50L2lub2RlLmM9MzEzNT1jaWZzX3NldGF0dHJfdW5peChzdHJ1Y3QgZGVudHJ5ICpkaXJlbnRyeSwgc3RydWN0IGlhdHRyICphdHRycylcXG4tLVxcbmZzL3NtYi9jbGllbnQvaW5vZGUuYy0zMTU2LVxcbmZzL3NtYi9jbGllbnQvaW5vZGUuYzozMTU3OlxcdHJjID0gc2V0YXR0cl9wcmVwYXJlKFxcdTAwMjZub3BfbW50X2lkbWFwLCBkaXJlbnRyeSwgYXR0cnMpO1xcbmZzL3NtYi9jbGllbnQvaW5vZGUuYy0zMTU4LVxcdGlmIChyYyBcXHUwMDNjIDApXFxuLS1cXG5mcy9zbWIvY2xpZW50L2lub2RlLmM9MzMwNT1jaWZzX3NldGF0dHJfbm91bml4KHN0cnVjdCBkZW50cnkgKmRpcmVudHJ5LCBzdHJ1Y3QgaWF0dHIgKmF0dHJzKVxcbi0tXFxuZnMvc21iL2NsaWVudC9pbm9kZS5jLTMzMjgtXFxuZnMvc21iL2NsaWVudC9pbm9kZS5jOjMzMjk6XFx0cmMgPSBzZXRhdHRyX3ByZXBhcmUoXFx1MDAyNm5vcF9tbnRfaWRtYXAsIGRpcmVudHJ5LCBhdHRycyk7XFxuZnMvc21iL2NsaWVudC9pbm9kZS5jLTMzMzAtXFx0aWYgKHJjIFxcdTAwM2MgMClcXG4tLVxcbmZzL3ViaWZzL2ZpbGUuYz0xMjU0PWludCB1Ymlmc19zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuLS1cXG5mcy91Ymlmcy9maWxlLmMtMTI2Mi1cXHRcXHRpbm9kZS1cXHUwMDNlaV9pbm8sIGlub2RlLVxcdTAwM2VpX21vZGUsIGF0dHItXFx1MDAzZWlhX3ZhbGlkKTtcXG5mcy91Ymlmcy9maWxlLmM6MTI2MzpcXHRlcnIgPSBzZXRhdHRyX3ByZXBhcmUoXFx1MDAyNm5vcF9tbnRfaWRtYXAsIGRlbnRyeSwgYXR0cik7XFxuZnMvdWJpZnMvZmlsZS5jLTEyNjQtXFx0aWYgKGVycilcXG4tLVxcbmZzL3VkZi9maWxlLmM9MjIyPXN0YXRpYyBpbnQgdWRmX3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG4tLVxcbmZzL3VkZi9maWxlLmMtMjI4LVxcbmZzL3VkZi9maWxlLmM6MjI5OlxcdGVycm9yID0gc2V0YXR0cl9wcmVwYXJlKFxcdTAwMjZub3BfbW50X2lkbWFwLCBkZW50cnksIGF0dHIpO1xcbmZzL3VkZi9maWxlLmMtMjMwLVxcdGlmIChlcnJvcilcXG4tLVxcbmZzL3Vmcy9pbm9kZS5jPTExOTg9aW50IHVmc19zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuLS1cXG5mcy91ZnMvaW5vZGUuYy0xMjA0LVxcbmZzL3Vmcy9pbm9kZS5jOjEyMDU6XFx0ZXJyb3IgPSBzZXRhdHRyX3ByZXBhcmUoXFx1MDAyNm5vcF9tbnRfaWRtYXAsIGRlbnRyeSwgYXR0cik7XFxuZnMvdWZzL2lub2RlLmMtMTIwNi1cXHRpZiAoZXJyb3IpXFxuLS1cXG5mcy91dGltZXMuYz0yMT1pbnQgdmZzX3V0aW1lcyhjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCwgc3RydWN0IHRpbWVzcGVjNjQgKnRpbWVzKVxcbi0tXFxuZnMvdXRpbWVzLmMtNTYtXFx0XFx0LypcXG5mcy91dGltZXMuYzo1NzpcXHRcXHQgKiBUZWxsIHNldGF0dHJfcHJlcGFyZSgpLCB0aGF0IHRoaXMgaXMgYW4gZXhwbGljaXQgdGltZVxcbmZzL3V0aW1lcy5jLTU4LVxcdFxcdCAqIHVwZGF0ZSwgZXZlbiBpZiBuZWl0aGVyIEFUVFJfQVRJTUVfU0VUIG5vciBBVFRSX01USU1FX1NFVFxcbi0tXFxuZnMveGZzL3hmc19pb2N0bC5jPTYwNz1zdGF0aWMgdm9pZFxcbmZzL3hmcy94ZnNfaW9jdGwuYzo2MDg6eGZzX2lvY3RsX3NldGF0dHJfcHJlcGFyZV9kYXgoXFxuZnMveGZzL3hmc19pb2N0bC5jLTYwOS1cXHRzdHJ1Y3QgeGZzX2lub2RlXFx0KmlwLFxcbi0tXFxuZnMveGZzL3hmc19pb2N0bC5jPTc1MD14ZnNfZmlsZWF0dHJfc2V0KFxcbi0tXFxuZnMveGZzL3hmc19pb2N0bC5jLTgwNC1cXG5mcy94ZnMveGZzX2lvY3RsLmM6ODA1OlxcdHhmc19pb2N0bF9zZXRhdHRyX3ByZXBhcmVfZGF4KGlwLCBmYSk7XFxuZnMveGZzL3hmc19pb2N0bC5jLTgwNi1cXG4tLVxcbmZzL3hmcy94ZnNfaW9wcy5jPTc1Nz14ZnNfdm5fY2hhbmdlX29rKFxcbi0tXFxuZnMveGZzL3hmc19pb3BzLmMtNzY5LVxcbmZzL3hmcy94ZnNfaW9wcy5jOjc3MDpcXHRyZXR1cm4gc2V0YXR0cl9wcmVwYXJlKGlkbWFwLCBkZW50cnksIGlhdHRyKTtcXG5mcy94ZnMveGZzX2lvcHMuYy03NzEtfVxcbi0tXFxuZnMveGZzL3hmc19pb3BzLmMtNzc2LSAqIENhdXRpb246IFRoZSBjYWxsZXIgb2YgdGhpcyBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSBmb3IgY2FsbGluZ1xcbmZzL3hmcy94ZnNfaW9wcy5jOjc3NzogKiBzZXRhdHRyX3ByZXBhcmUoKSBvciBvdGhlcndpc2UgdmVyaWZ5aW5nIHRoZSBjaGFuZ2UgaXMgZmluZS5cXG5mcy94ZnMveGZzX2lvcHMuYy03NzgtICovXFxuLS1cXG5mcy96b25lZnMvc3VwZXIuYz01MzY9c3RhdGljIGludCB6b25lZnNfaW5vZGVfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4tLVxcbmZzL3pvbmVmcy9zdXBlci5jLTU0NC1cXG5mcy96b25lZnMvc3VwZXIuYzo1NDU6XFx0cmV0ID0gc2V0YXR0cl9wcmVwYXJlKFxcdTAwMjZub3BfbW50X2lkbWFwLCBkZW50cnksIGlhdHRyKTtcXG5mcy96b25lZnMvc3VwZXIuYy01NDYtXFx0aWYgKHJldClcXG4tLVxcbmluY2x1ZGUvbGludXgvZnMuaD0zMzgzPWludCBtYXlfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSxcXG5pbmNsdWRlL2xpbnV4L2ZzLmgtMzM4NC1cXHRcXHR1bnNpZ25lZCBpbnQgaWFfdmFsaWQpO1xcbmluY2x1ZGUvbGludXgvZnMuaDozMzg1OmludCBzZXRhdHRyX3ByZXBhcmUoc3RydWN0IG1udF9pZG1hcCAqLCBzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBpYXR0ciAqKTtcXG5pbmNsdWRlL2xpbnV4L2ZzLmgtMzM4Ni1leHRlcm4gaW50IGlub2RlX25ld3NpemVfb2soY29uc3Qgc3RydWN0IGlub2RlICosIGxvZmZfdCBvZmZzZXQpO1xcbi0tXFxubW0vc2htZW0uYz0xMzE2PXN0YXRpYyBpbnQgc2htZW1fc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4tLVxcbm1tL3NobWVtLmMtMTMyNC1cXG5tbS9zaG1lbS5jOjEzMjU6XFx0ZXJyb3IgPSBzZXRhdHRyX3ByZXBhcmUoaWRtYXAsIGRlbnRyeSwgYXR0cik7XFxubW0vc2htZW0uYy0xMzI2LVxcdGlmIChlcnJvcilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDM6MzQ6MTAuNzU0MDQzODk0WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMTY4NTk0OTIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgU3RyYXRlZ3kgZm9yIENvcmUgVkZTIGFuZCBBRlMgT3duZXJzaGlwIENoZWNrcyoqXG5cbk9rYXksIHNvIGBzZXRhdHRyX3ByZXBhcmVgIGlzIGV4cG9ydGVkLCB0aGF0J3Mgb3VyIHN0YXJ0aW5nIHBvaW50LiBUaGUgY3J1Y2lhbCBzeW1ib2xzIHRvIHRhcmdldCBhcmU6XG5cbiogICBgdmZzX2lub2RlX2lzX293bmVkX2J5X21lYFxuKiAgIGBhZnNfaXNfb3duZWRfYnlfbWVgXG4qICAgYGFmc19oYXZlX3NhbWVfb3duZXJgXG4qICAgYGlub2RlX293bmVyX29yX2NhcGFibGVgXG4qICAgYHZmc19zZXRsZWFzZWBcbiogICBgX19jaGVja19zdGlja3lgXG4qICAgYHNldGF0dHJfcHJlcGFyZWBcblxuTm93LCByZWdhcmRpbmcgYHZmc19pbm9kZV9pc19vd25lZF9ieV9tZWAsIGl0J3Mgbm90IGV4cG9ydGVkLiBCdXQsIGFuZCB0aGlzIGlzIGtleSwgaXQncyBub24tc3RhdGljLiBTaW5jZSBTeXprYWxsZXIgY2FuIGZ1enogbm9uLXN0YXRpYyBmdW5jdGlvbnMgd2l0aGluIHRoZSBrZXJuZWwgY29yZSwgdGhhdCdzIG5vdCBhIHByb2JsZW0uIFdhaXQgYSBtb21lbnQsIFN5emthbGxlciBwcmltYXJpbHkgZm9jdXNlcyBvbiBzeXNjYWxscy4gVGhlc2Ugc3ltYm9scyBhY3QgYXMgYSBndWlkZSB0byByZWFjaCBmdW5jdGlvbnMgdGhhdCBpbXBsZW1lbnQgdGhlIHN5c2NhbGxzLiBTbywgbm9uLXN0YXRpYyBmdW5jdGlvbnMgbGlrZSBgdmZzX2lub2RlX2lzX293bmVkX2J5X21lYCBhcmUgcGVyZmVjdGx5IHZhbGlkIHRhcmdldHMuXG5cbkxldCdzIGRvdWJsZS1jaGVjayB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zLiBJIGJlbGlldmUgYEFGU19GU2AgaXMgcmVxdWlyZWQuIEFyZSB0aGVyZSBhbnkgb3RoZXIgY29uZmlnIG9wdGlvbnM/IE5vLCB0aGUgb3RoZXIgY2hhbmdlcyBhcmUgd2l0aGluIHRoZSBjb3JlIFZGUy5cblxuQWxyaWdodCwgdGltZSB0byBzb2xpZGlmeSB0aGUgcmF0aW9uYWxlLiBUaGlzIHBhdGNoIGludHJvZHVjZXMgYGlzX293bmVkX2J5X21lYCBhbmQgYGhhdmVfc2FtZV9vd25lcmAgaW5vZGUgb3BlcmF0aW9ucy4gVGhlc2UgYWxsb3cgZmlsZXN5c3RlbXMsIGVzcGVjaWFsbHkgQUZTLCB0byBvdmVycmlkZSBkZWZhdWx0IFZGUyBvd25lcnNoaXAgY2hlY2tzLiBTZXZlcmFsIGNyaXRpY2FsIFZGUyBwYXRocyBhcmUgbW9kaWZpZWQuIEl0IHRvdWNoZXMgY29kZSBsaWtlIGBjaG93bl9va2AsIGBjaGdycF9va2AsIGBjb3JlZHVtcF9maWxlYCwgYGlub2RlX293bmVyX29yX2NhcGFibGVgLCBgdmZzX3NldGxlYXNlYCwgYG1heV9mb2xsb3dfbGlua2AsIGBtYXlfY3JlYXRlX2luX3N0aWNreWAsIGBfX2NoZWNrX3N0aWNreWAsIGFuZCBgbWF5X2RlZHVwZV9maWxlYC4gVGhpcyByZXByZXNlbnRzIGEgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIFZGUyBhbmQgQUZTLCBhbmQgaXQgZGVtYW5kcyB0aG9yb3VnaCBmdXp6aW5nIHRvIGd1YXJkIGFnYWluc3QgcmVncmVzc2lvbnMgYW5kIHBvdGVudGlhbCBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMuXG5cbk15IHRhcmdldCBzeW1ib2xzIG5vdyBsb29rIGxpa2UgdGhpczpcblxuKiAgIGB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWVgXG4qICAgYGFmc19pc19vd25lZF9ieV9tZWBcbiogICBgYWZzX2hhdmVfc2FtZV9vd25lcmBcbiogICBgaW5vZGVfb3duZXJfb3JfY2FwYWJsZWBcbiogICBgdmZzX3NldGxlYXNlYFxuKiAgIGBfX2NoZWNrX3N0aWNreWBcbiogICBgc2V0YXR0cl9wcmVwYXJlYFxuXG5MZXQncyBjb25maXJtIHRoYXQgYHZmc19pbm9kZV9pc19vd25lZF9ieV9tZWAgaXMgYWN0dWFsbHkgY2FsbGVkIGZyb20gYHNldGF0dHJfcHJlcGFyZWAuIFllcywgYHNldGF0dHJfcHJlcGFyZWAgY2FsbHMgYGNob3duX29rYCBhbmQgYGNoZ3JwX29rYCB3aGljaCBjYWxsIGB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWVgLlxuXG5Ob3csIGRvZXMgYG1heV9jcmVhdGVfaW5fc3RpY2t5YCBoYXZlIGNhbGwgc2l0ZXMgd2UgY2FuIGxldmVyYWdlPyBJdCdzIGNhbGxlZCBmcm9tIGBtYXlfb3BlbmAgYW5kIGBtYXlfY3JlYXRlYCwgYW5kIGBtYXlfbGlua2F0YCBjYWxscyBgbWF5X2ZvbGxvd19saW5rYC4gQW5kIGB2ZnNfY2xvbmVfZmlsZV9yYW5nZWAgYW5kIGB2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2Vfb25lYCBjYWxsIGBtYXlfZGVkdXBlX2ZpbGVgLiBJIHRoaW5rIHdlIGNvdWxkIGFkZCBgdmZzX2RlZHVwZV9maWxlX3JhbmdlX29uZWAgdG9vLiBZZXMsIGl0J3Mgd29ydGggaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwNzc4LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Njk2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAzOjM0OjIwLjkyMjY0MjY2N1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjUzNzk4NTY2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2Vfb25lXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL292ZXJsYXlmcy9maWxlLmM9NTI3PXN0YXRpYyBsb2ZmX3Qgb3ZsX2NvcHlmaWxlKHN0cnVjdCBmaWxlICpmaWxlX2luLCBsb2ZmX3QgcG9zX2luLFxcbi0tXFxuZnMvb3ZlcmxheWZzL2ZpbGUuYy01NjYtXFx0XFx0Y2FzZSBPVkxfREVEVVBFOlxcbmZzL292ZXJsYXlmcy9maWxlLmM6NTY3OlxcdFxcdFxcdHJldCA9IHZmc19kZWR1cGVfZmlsZV9yYW5nZV9vbmUocmVhbGZpbGVfaW4sIHBvc19pbixcXG5mcy9vdmVybGF5ZnMvZmlsZS5jLTU2OC1cXHRcXHRcXHRcXHRcXHRcXHRcXHRyZWFsZmlsZV9vdXQsIHBvc19vdXQsIGxlbixcXG4tLVxcbmZzL3JlbWFwX3JhbmdlLmM9NDE2PXN0YXRpYyBpbnQgbWF5X2RlZHVwZV9maWxlKHN0cnVjdCBmaWxlICpmaWxlKVxcbi0tXFxuZnMvcmVtYXBfcmFuZ2UuYy00MzMtXFxuZnMvcmVtYXBfcmFuZ2UuYzo0MzQ6bG9mZl90IHZmc19kZWR1cGVfZmlsZV9yYW5nZV9vbmUoc3RydWN0IGZpbGUgKnNyY19maWxlLCBsb2ZmX3Qgc3JjX3BvcyxcXG5mcy9yZW1hcF9yYW5nZS5jLTQzNS1cXHRcXHRcXHRcXHQgc3RydWN0IGZpbGUgKmRzdF9maWxlLCBsb2ZmX3QgZHN0X3BvcyxcXG4tLVxcbmZzL3JlbWFwX3JhbmdlLmMtNDkxLX1cXG5mcy9yZW1hcF9yYW5nZS5jOjQ5MjpFWFBPUlRfU1lNQk9MKHZmc19kZWR1cGVfZmlsZV9yYW5nZV9vbmUpO1xcbmZzL3JlbWFwX3JhbmdlLmMtNDkzLVxcbmZzL3JlbWFwX3JhbmdlLmM9NDk0PWludCB2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2Uoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBmaWxlX2RlZHVwZV9yYW5nZSAqc2FtZSlcXG4tLVxcbmZzL3JlbWFwX3JhbmdlLmMtNTUyLVxcbmZzL3JlbWFwX3JhbmdlLmM6NTUzOlxcdFxcdGRlZHVwZWQgPSB2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2Vfb25lKGZpbGUsIG9mZiwgZmRfZmlsZShkc3RfZmQpLFxcbmZzL3JlbWFwX3JhbmdlLmMtNTU0LVxcdFxcdFxcdFxcdFxcdFxcdCAgICBpbmZvLVxcdTAwM2VkZXN0X29mZnNldCwgbGVuLFxcbi0tXFxuaW5jbHVkZS9saW51eC9mcy5oPTIwOTI9ZXh0ZXJuIGludCB2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2Uoc3RydWN0IGZpbGUgKmZpbGUsXFxuaW5jbHVkZS9saW51eC9mcy5oLTIwOTMtXFx0XFx0XFx0XFx0IHN0cnVjdCBmaWxlX2RlZHVwZV9yYW5nZSAqc2FtZSk7XFxuaW5jbHVkZS9saW51eC9mcy5oOjIwOTQ6ZXh0ZXJuIGxvZmZfdCB2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2Vfb25lKHN0cnVjdCBmaWxlICpzcmNfZmlsZSwgbG9mZl90IHNyY19wb3MsXFxuaW5jbHVkZS9saW51eC9mcy5oLTIwOTUtXFx0XFx0XFx0XFx0XFx0c3RydWN0IGZpbGUgKmRzdF9maWxlLCBsb2ZmX3QgZHN0X3BvcyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDM6MzQ6MjMuNDYwNjM2MDg2WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY5NDM2NTA0MjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBLZXJuZWwgUGF0Y2g6IEZvY3VzIG9uIEZpbGUgU3lzdGVtIFNlY3VyaXR5IGFuZCBBRlMqKlxuXG5Pa2F5LCBzbyBgdmZzX2RlZHVwZV9maWxlX3JhbmdlX29uZWAgKmlzKiBleHBvcnRlZCwgdGhhdCdzIGdvb2QgdG8ga25vdy4gTm93LCBsZXQncyB0YWtlIGEgcXVpY2sgbG9vayBhdCBgY29yZWR1bXBfZmlsZWAuIFJpZ2h0LCBpdCdzIHN0YXRpYywgYW5kIHRoZSBjYWxsZXIgaXMgYGRvX2NvcmVkdW1wYC4gU2VlbXMgbGlrZSB3ZSBjYW4gaWdub3JlIHRoYXQgb25lLiBHb3R0YSBzdGljayB0byB0aGUgY29yZSBhcmVhcyBvZiBpbnRlcmVzdCBoZXJlLlxuXG5NeSBmb2N1cyBzeW1ib2xzIGFyZTogYHZmc19pbm9kZV9pc19vd25lZF9ieV9tZWAsIGBhZnNfaXNfb3duZWRfYnlfbWVgLCBgYWZzX2hhdmVfc2FtZV9vd25lcmAsIGBpbm9kZV9vd25lcl9vcl9jYXBhYmxlYCwgYHZmc19zZXRsZWFzZWAsIGBfX2NoZWNrX3N0aWNreWAsIGBzZXRhdHRyX3ByZXBhcmVgLCBhbmQgYHZmc19kZWR1cGVfZmlsZV9yYW5nZV9vbmVgLiBUaGlzIGxvb2tzIGxpa2UgYSBzb2xpZCBsaXN0IHRvIHN0YXJ0IHdpdGguXG5cbkknbSBqdXN0IGdvaW5nIHRvIGRvdWJsZS1jaGVjayBgYWZzX2lzX293bmVkX2J5X21lYCBhbmQgYGFmc19oYXZlX3NhbWVfb3duZXJgLiBBaCwgeWVzLCB0aGV5IGFyZSBpbmRlZWQgaW4gYGZzL2Fmcy9zZWN1cml0eS5jYC4gTGV0IG1lIHNlZS4uLiBhcmUgdGhlcmUgYW55ICpvdGhlciogQUZTIGZ1bmN0aW9ucyB0aGF0IGhhdmUgYmVlbiBtb2RpZmllZD8gSSBzZWUgYGFmc19lZGl0X2Rpcl9yZW1vdmVgIGluIGBmcy9hZnMvZGlyX2VkaXQuY2AsIGBhZnNfZGlyX2ZpbmRfYmxvY2tgIGluIGBmcy9hZnMvZGlyX3NlYXJjaC5jYCwgYGFmc19mc19mZXRjaF9kYXRhYCBpbiBgZnMvYWZzL2ZzY2xpZW50LmNgLCBgYWZzX2lub2RlX2luaXRfZnJvbV9zdGF0dXNgIGluIGBmcy9hZnMvaW5vZGUuY2AsIGFuZCBgYWZzX21ha2Vfb3BfY2FsbGAgaW4gYGZzL2Fmcy9pbnRlcm5hbC5oYC5cblxuV2FpdCBhIG1pbnV0ZSwgSSBzZWUgdGhlIHBhdGNoIG1vZGlmaWVzIGBhZnNfZWRpdF9kaXJfcmVtb3ZlYCBhbmQgYGFmc19kaXJfZmluZF9ibG9ja2AgdG8gdXNlIGBhZnNfZGlyX2dldF9ibG9ja2AgYW5kIGBhZnNfZGlyX2VuZF9pdGVyYC4gSW50ZXJlc3RpbmcuIEFuZCBgYWZzX2ZzX2ZldGNoX2RhdGFgIHNldHMgYGNhbGwtXHUwMDNlYXN5bmMgPSB0cnVlYC4gQW5kIGBhZnNfbWFrZV9vcF9jYWxsYCB1c2VzIGBhZnNfZ2V0X2NhbGxgIGFuZCBgYWZzX3B1dF9jYWxsYC4gVGhlc2UgYXJlIGNsZWFybHkgQUZTLXNwZWNpZmljIGZpeGVzIGFuZCBjaGFuZ2VzLiBJIG5lZWQgdG8gZmFjdG9yIHRoZXNlIGludG8gbXkgYW5hbHlzaXMuIEknbGwgYWRkIGBhZnNfZWRpdF9kaXJfcmVtb3ZlYCBhbmQgYGFmc19mc19mZXRjaF9kYXRhYCB0byBteSBsaXN0IG9mIGZvY3VzIHN5bWJvbHMuIEl0J3MgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhlIEFGUyBjaGFuZ2VzIGFsb25nc2lkZSB0aGUgb3RoZXIgZmlsZSBzeXN0ZW0gY29tcG9uZW50cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzI3ODUsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NDcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDM6MzQ6MzAuNDA0MjkwMDg0WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjc3ODM0MTQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFmc19lZGl0X2Rpcl9yZW1vdmVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvYWZzL2Rpci5jPTEzNzA9c3RhdGljIHZvaWQgYWZzX3JtZGlyX2VkaXRfZGlyKHN0cnVjdCBhZnNfb3BlcmF0aW9uICpvcClcXG4tLVxcbmZzL2Fmcy9kaXIuYy0xMzgyLVxcdCAgICBkdm5vZGUtXFx1MDAzZXN0YXR1cy5kYXRhX3ZlcnNpb24gPT0gZHZwLVxcdTAwM2Vkdl9iZWZvcmUgKyBkdnAtXFx1MDAzZWR2X2RlbHRhKVxcbmZzL2Fmcy9kaXIuYzoxMzgzOlxcdFxcdGFmc19lZGl0X2Rpcl9yZW1vdmUoZHZub2RlLCBcXHUwMDI2b3AtXFx1MDAzZWRlbnRyeS1cXHUwMDNlZF9uYW1lLFxcbmZzL2Fmcy9kaXIuYy0xMzg0LVxcdFxcdFxcdFxcdCAgICBhZnNfZWRpdF9kaXJfZm9yX3JtZGlyKTtcXG4tLVxcbmZzL2Fmcy9kaXIuYz0xNTE4PXN0YXRpYyB2b2lkIGFmc191bmxpbmtfZWRpdF9kaXIoc3RydWN0IGFmc19vcGVyYXRpb24gKm9wKVxcbi0tXFxuZnMvYWZzL2Rpci5jLTE1MjgtXFx0ICAgIGR2bm9kZS1cXHUwMDNlc3RhdHVzLmRhdGFfdmVyc2lvbiA9PSBkdnAtXFx1MDAzZWR2X2JlZm9yZSArIGR2cC1cXHUwMDNlZHZfZGVsdGEpXFxuZnMvYWZzL2Rpci5jOjE1Mjk6XFx0XFx0YWZzX2VkaXRfZGlyX3JlbW92ZShkdm5vZGUsIFxcdTAwMjZvcC1cXHUwMDNlZGVudHJ5LVxcdTAwM2VkX25hbWUsXFxuZnMvYWZzL2Rpci5jLTE1MzAtXFx0XFx0XFx0XFx0ICAgIGFmc19lZGl0X2Rpcl9mb3JfdW5saW5rKTtcXG4tLVxcbmZzL2Fmcy9kaXIuYz0xODkwPXN0YXRpYyB2b2lkIGFmc19yZW5hbWVfZWRpdF9kaXIoc3RydWN0IGFmc19vcGVyYXRpb24gKm9wKVxcbi0tXFxuZnMvYWZzL2Rpci5jLTE5MTUtXFx0ICAgIG9yaWdfZHZub2RlLVxcdTAwM2VzdGF0dXMuZGF0YV92ZXJzaW9uID09IG9yaWdfZHZwLVxcdTAwM2Vkdl9iZWZvcmUgKyBvcmlnX2R2cC1cXHUwMDNlZHZfZGVsdGEpXFxuZnMvYWZzL2Rpci5jOjE5MTY6XFx0XFx0YWZzX2VkaXRfZGlyX3JlbW92ZShvcmlnX2R2bm9kZSwgXFx1MDAyNm9sZF9kZW50cnktXFx1MDAzZWRfbmFtZSxcXG5mcy9hZnMvZGlyLmMtMTkxNy1cXHRcXHRcXHRcXHQgICAgYWZzX2VkaXRfZGlyX2Zvcl9yZW5hbWVfMCk7XFxuLS1cXG5mcy9hZnMvZGlyLmMtMTkyNi1cXHRcXHRpZiAoIW9wLVxcdTAwM2VyZW5hbWUubmV3X25lZ2F0aXZlKVxcbmZzL2Fmcy9kaXIuYzoxOTI3OlxcdFxcdFxcdGFmc19lZGl0X2Rpcl9yZW1vdmUobmV3X2R2bm9kZSwgXFx1MDAyNm5ld19kZW50cnktXFx1MDAzZWRfbmFtZSxcXG5mcy9hZnMvZGlyLmMtMTkyOC1cXHRcXHRcXHRcXHRcXHQgICAgYWZzX2VkaXRfZGlyX2Zvcl9yZW5hbWVfMSk7XFxuLS1cXG5mcy9hZnMvZGlyX2VkaXQuYz0yNDE9dm9pZCBhZnNfZWRpdF9kaXJfYWRkKHN0cnVjdCBhZnNfdm5vZGUgKnZub2RlLFxcbi0tXFxuZnMvYWZzL2Rpcl9lZGl0LmMtMzkyLSAqL1xcbmZzL2Fmcy9kaXJfZWRpdC5jOjM5Mzp2b2lkIGFmc19lZGl0X2Rpcl9yZW1vdmUoc3RydWN0IGFmc192bm9kZSAqdm5vZGUsXFxuZnMvYWZzL2Rpcl9lZGl0LmMtMzk0LVxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSwgZW51bSBhZnNfZWRpdF9kaXJfcmVhc29uIHdoeSlcXG4tLVxcbmZzL2Fmcy9kaXJfc2lsbHkuYz0yMz1zdGF0aWMgdm9pZCBhZnNfc2lsbHlfcmVuYW1lX2VkaXRfZGlyKHN0cnVjdCBhZnNfb3BlcmF0aW9uICpvcClcXG4tLVxcbmZzL2Fmcy9kaXJfc2lsbHkuYy00MS1cXHQgICAgZHZub2RlLVxcdTAwM2VzdGF0dXMuZGF0YV92ZXJzaW9uID09IGR2cC1cXHUwMDNlZHZfYmVmb3JlICsgZHZwLVxcdTAwM2Vkdl9kZWx0YSkge1xcbmZzL2Fmcy9kaXJfc2lsbHkuYzo0MjpcXHRcXHRhZnNfZWRpdF9kaXJfcmVtb3ZlKGR2bm9kZSwgXFx1MDAyNm9sZC1cXHUwMDNlZF9uYW1lLFxcbmZzL2Fmcy9kaXJfc2lsbHkuYy00My1cXHRcXHRcXHRcXHQgICAgYWZzX2VkaXRfZGlyX2Zvcl9zaWxseV8wKTtcXG4tLVxcbmZzL2Fmcy9kaXJfc2lsbHkuYz0xNzY9c3RhdGljIHZvaWQgYWZzX3NpbGx5X3VubGlua19lZGl0X2RpcihzdHJ1Y3QgYWZzX29wZXJhdGlvbiAqb3ApXFxuLS1cXG5mcy9hZnMvZGlyX3NpbGx5LmMtMTg0LVxcdCAgICBkdm5vZGUtXFx1MDAzZXN0YXR1cy5kYXRhX3ZlcnNpb24gPT0gZHZwLVxcdTAwM2Vkdl9iZWZvcmUgKyBkdnAtXFx1MDAzZWR2X2RlbHRhKVxcbmZzL2Fmcy9kaXJfc2lsbHkuYzoxODU6XFx0XFx0YWZzX2VkaXRfZGlyX3JlbW92ZShkdm5vZGUsIFxcdTAwMjZvcC1cXHUwMDNlZGVudHJ5LVxcdTAwM2VkX25hbWUsXFxuZnMvYWZzL2Rpcl9zaWxseS5jLTE4Ni1cXHRcXHRcXHRcXHQgICAgYWZzX2VkaXRfZGlyX2Zvcl91bmxpbmspO1xcbi0tXFxuZnMvYWZzL2ludGVybmFsLmg9MTExOD1leHRlcm4gdm9pZCBhZnNfZWRpdF9kaXJfYWRkKHN0cnVjdCBhZnNfdm5vZGUgKiwgY29uc3Qgc3RydWN0IHFzdHIgKiwgc3RydWN0IGFmc19maWQgKixcXG5mcy9hZnMvaW50ZXJuYWwuaC0xMTE5LVxcdFxcdFxcdCAgICAgZW51bSBhZnNfZWRpdF9kaXJfcmVhc29uKTtcXG5mcy9hZnMvaW50ZXJuYWwuaDoxMTIwOmV4dGVybiB2b2lkIGFmc19lZGl0X2Rpcl9yZW1vdmUoc3RydWN0IGFmc192bm9kZSAqLCBjb25zdCBzdHJ1Y3QgcXN0ciAqLCBlbnVtIGFmc19lZGl0X2Rpcl9yZWFzb24pO1xcbmZzL2Fmcy9pbnRlcm5hbC5oLTExMjEtdm9pZCBhZnNfZWRpdF9kaXJfdXBkYXRlKHN0cnVjdCBhZnNfdm5vZGUgKnZub2RlLCBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDM6MzQ6MzMuMDgyMTI5NTdaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzUwOTkyNjA2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipOYXZpZ2F0aW5nIHRoZSBBRlMgQ29kZWJhc2U6IEEgQnJpZWYgQXVkaXQqKlxuXG5BbHJpZ2h0LCBzbyBgYWZzX2VkaXRfZGlyX3JlbW92ZWAgaXMgKm5vdCogc3RhdGljLiBUaGF0IGltbWVkaWF0ZWx5IHBpcXVlcyBteSBpbnRlcmVzdC4gTm9uLXN0YXRpYyBpbXBsaWVzIGl0J3MgZXhwb3NlZCBleHRlcm5hbGx5LCBwZXJoYXBzIGNhbGxlZCBmcm9tIG90aGVyIHBhcnRzIG9mIHRoZSBBRlMga2VybmVsIG1vZHVsZSwgb3IgZXZlbiBmcm9tIHVzZXIgc3BhY2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjb250ZXh0LiBUaGlzIG1lYW5zIEkgc2hvdWxkIHByb2JhYmx5IHVuZGVyc3RhbmQgd2hvICpjYWxscyogdGhpcywgb3IgcG90ZW50aWFsbHksIHdobyAqY2FuKiBjYWxsIHRoaXMuXG5cbk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIGZvciBzb21lIHJlbGV2YW50IGNhbGwgc2l0ZXMuIFNwZWNpZmljYWxseSwgSSBzaG91bGQgbG9vayBjbG9zZWx5IGF0IHRoZSBkYXRhIGZldGNoaW5nIGxvZ2ljLiBJIHdpbGwgbm93IGxvb2sgb3ZlciBgYWZzX2ZzX2ZldGNoX2RhdGFgIGFuZCBzZWUgaWYgdGhlIHR3byBhcmUgc29tZWhvdyByZWxhdGVkLiBUaGVyZSBtYXkgYmUgc29tZSB2dWxuZXJhYmlsaXR5IGluIHRoZXNlIHBpZWNlcywgaW4gc29tZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBlZGl0aW5nIG9mIGEgZGlyZWN0b3J5LlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDg4NSwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAzOjM0OjM2LjU5MjA1ODcyOVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ1MDgwMDUwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhZnNfZnNfZmV0Y2hfZGF0YVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9hZnMvZmlsZS5jPTIzMz1jb25zdCBzdHJ1Y3QgYWZzX29wZXJhdGlvbl9vcHMgYWZzX2ZldGNoX2RhdGFfb3BlcmF0aW9uID0ge1xcbmZzL2Fmcy9maWxlLmM6MjM0OlxcdC5pc3N1ZV9hZnNfcnBjXFx0PSBhZnNfZnNfZmV0Y2hfZGF0YSxcXG5mcy9hZnMvZmlsZS5jLTIzNS1cXHQuaXNzdWVfeWZzX3JwY1xcdD0geWZzX2ZzX2ZldGNoX2RhdGEsXFxuLS1cXG5mcy9hZnMvZmlsZS5jPTI0MT1zdGF0aWMgdm9pZCBhZnNfaXNzdWVfcmVhZF9jYWxsKHN0cnVjdCBhZnNfb3BlcmF0aW9uICpvcClcXG4tLVxcbmZzL2Fmcy9maWxlLmMtMjQ4LVxcdGVsc2VcXG5mcy9hZnMvZmlsZS5jOjI0OTpcXHRcXHRhZnNfZnNfZmV0Y2hfZGF0YShvcCk7XFxuZnMvYWZzL2ZpbGUuYy0yNTAtfVxcbi0tXFxuZnMvYWZzL2ZzY2xpZW50LmM9NDE3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYWZzX2NhbGxfdHlwZSBhZnNfUlhGU0ZldGNoRGF0YTY0ID0ge1xcbi0tXFxuZnMvYWZzL2ZzY2xpZW50LmMtNDI4LSAqL1xcbmZzL2Fmcy9mc2NsaWVudC5jOjQyOTpzdGF0aWMgdm9pZCBhZnNfZnNfZmV0Y2hfZGF0YTY0KHN0cnVjdCBhZnNfb3BlcmF0aW9uICpvcClcXG5mcy9hZnMvZnNjbGllbnQuYy00MzAte1xcbi0tXFxuZnMvYWZzL2ZzY2xpZW50LmMtNDYzLSAqL1xcbmZzL2Fmcy9mc2NsaWVudC5jOjQ2NDp2b2lkIGFmc19mc19mZXRjaF9kYXRhKHN0cnVjdCBhZnNfb3BlcmF0aW9uICpvcClcXG5mcy9hZnMvZnNjbGllbnQuYy00NjUte1xcbi0tXFxuZnMvYWZzL2ZzY2xpZW50LmMtNDcxLVxcdGlmICh0ZXN0X2JpdChBRlNfU0VSVkVSX0ZMX0hBU19GUzY0LCBcXHUwMDI2b3AtXFx1MDAzZXNlcnZlci1cXHUwMDNlZmxhZ3MpKVxcbmZzL2Fmcy9mc2NsaWVudC5jOjQ3MjpcXHRcXHRyZXR1cm4gYWZzX2ZzX2ZldGNoX2RhdGE2NChvcCk7XFxuZnMvYWZzL2ZzY2xpZW50LmMtNDczLVxcbi0tXFxuZnMvYWZzL2ludGVybmFsLmg9MTE5MD1leHRlcm4gdm9pZCBhZnNfZnNfZmV0Y2hfc3RhdHVzKHN0cnVjdCBhZnNfb3BlcmF0aW9uICopO1xcbmZzL2Fmcy9pbnRlcm5hbC5oOjExOTE6ZXh0ZXJuIHZvaWQgYWZzX2ZzX2ZldGNoX2RhdGEoc3RydWN0IGFmc19vcGVyYXRpb24gKik7XFxuZnMvYWZzL2ludGVybmFsLmgtMTE5Mi1leHRlcm4gdm9pZCBhZnNfZnNfY3JlYXRlX2ZpbGUoc3RydWN0IGFmc19vcGVyYXRpb24gKik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAzOjM0OjM5LjA0Mjg2NzU4OVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MTk4MjkyMTM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBBRlMgRmlsZSBTeXN0ZW0gT3BlcmF0aW9ucyoqXG5cbk9rYXksIHNvIGBhZnNfZnNfZmV0Y2hfZGF0YWAgaXNuJ3Qgc3RhdGljLiBUaGF0J3MgZ29vZCB0byBrbm93LCBtYWtlcyBpdCBlYXNpZXIgdG8gdHJhY2suIExldCdzIHNlZSBhYm91dCBgYWZzX21ha2Vfb3BfY2FsbGAuIEFoLCBpdCdzIGEgc3RhdGljIGlubGluZSBmdW5jdGlvbiwgdHVja2VkIGF3YXkgaW4gYGZzL2Fmcy9pbnRlcm5hbC5oYC5cblxuQWxyaWdodCwgdGltZSB0byBnZXQgdG8gdGhlIGNvcmUuIEJhc2VkIG9uIHRoaXMsIEknbSB0aGlua2luZyB0aGUga2V5IHN5bWJvbHMgdG8gcmVhbGx5IGRpZyBpbnRvIGFyZTpcbi0gICBgdmZzX2lub2RlX2lzX293bmVkX2J5X21lYFxuLSAgIGBhZnNfaXNfb3duZWRfYnlfbWVgXG4tICAgYGFmc19oYXZlX3NhbWVfb3duZXJgXG4tICAgYGlub2RlX293bmVyX29yX2NhcGFibGVgXG4tICAgYHZmc19zZXRsZWFzZWBcbi0gICBgX19jaGVja19zdGlja3lgXG4tICAgYHNldGF0dHJfcHJlcGFyZWBcbi0gICBgdmZzX2RlZHVwZV9maWxlX3JhbmdlX29uZWBcbi0gICBgYWZzX2VkaXRfZGlyX3JlbW92ZWBcbi0gICBgYWZzX2ZzX2ZldGNoX2RhdGFgXG5cblNlZW1zIGxpa2UgYSBzb2xpZCBzdGFydGluZyBwb2ludCBmb3IgaW52ZXN0aWdhdGlvbi4gQW5kIHRoZSByZWxldmFudCBjb25maWcgaXMgYEFGU19GU2AsIG5hdHVyYWxseS5cblxuTm93LCBhIHF1aWNrIHZlcmlmaWNhdGlvbiBvbiBgYWZzX2Rpcl9maW5kX2Jsb2NrYC4gV2Fzbid0IGl0IHJlbmFtZWQ/IExldCdzIHNlZS4uLiBZZXAsIHRoZSBkaWZmIHNob3dzIHRoZSBvbGQgbmFtZSByZXBsYWNlZCB3aXRoIGBhZnNfZGlyX2dldF9ibG9ja2AuXG5IYW5nIG9uIGEgc2VjLiBIdWguIGBhZnNfZGlyX2ZpbmRfYmxvY2tgICppcyogc3RpbGwgYXJvdW5kLiBMb29raW5nIGF0IHRoZSBkaWZmLCBpdCBsb29rcyBsaWtlIGl0IHdhcyAqbW9kaWZpZWQqIHJhdGhlciB0aGFuIGRlbGV0ZWQuIEl0IGxvb2tzIGxpa2UgYGFmc19kaXJfZmluZF9ibG9ja2AgaXMgbW9kaWZpZWQuXG5cbkkgc2hvdWxkIGRlZmluaXRlbHkgYWRkIHRoYXQgdG8gdGhlIGZvY3VzIHN5bWJvbHMsIGdpdmVuIHRoZSBjaGFuZ2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1NjYxLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDM5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAzOjM0OjQ1LjI0MTE2NDA0M1oiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjUxMzczNjAzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhZnNfZGlyX2ZpbmRfYmxvY2tcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvYWZzL2Rpcl9lZGl0LmM9MzkzPXZvaWQgYWZzX2VkaXRfZGlyX3JlbW92ZShzdHJ1Y3QgYWZzX3Zub2RlICp2bm9kZSxcXG4tLVxcbmZzL2Fmcy9kaXJfZWRpdC5jLTQzNS1cXG5mcy9hZnMvZGlyX2VkaXQuYzo0MzY6XFx0YmxvY2sgPSBhZnNfZGlyX2ZpbmRfYmxvY2soXFx1MDAyNml0ZXIsIGIpO1xcbmZzL2Fmcy9kaXJfZWRpdC5jLTQzNy1cXHRpZiAoIWJsb2NrKVxcbi0tXFxuZnMvYWZzL2Rpcl9lZGl0LmMtNDgwLVxcbmZzL2Fmcy9kaXJfZWRpdC5jOjQ4MTpcXHRcXHRwYmxvY2sgPSBhZnNfZGlyX2ZpbmRfYmxvY2soXFx1MDAyNml0ZXIsIHBiKTtcXG5mcy9hZnMvZGlyX2VkaXQuYy00ODItXFx0XFx0aWYgKCFwYmxvY2spXFxuLS1cXG5mcy9hZnMvZGlyX3NlYXJjaC5jPTU3PWJvb2wgYWZzX2Rpcl9pbml0X2l0ZXIoc3RydWN0IGFmc19kaXJfaXRlciAqaXRlciwgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUpXFxuLS1cXG5mcy9hZnMvZGlyX3NlYXJjaC5jLTY2LSAqL1xcbmZzL2Fmcy9kaXJfc2VhcmNoLmM6Njc6dW5pb24gYWZzX3hkcl9kaXJfYmxvY2sgKmFmc19kaXJfZmluZF9ibG9jayhzdHJ1Y3QgYWZzX2Rpcl9pdGVyICppdGVyLCBzaXplX3QgYmxvY2spXFxuZnMvYWZzL2Rpcl9zZWFyY2guYy02OC17XFxuLS1cXG5mcy9hZnMvZGlyX3NlYXJjaC5jPTEyMD1pbnQgYWZzX2Rpcl9zZWFyY2hfYnVja2V0KHN0cnVjdCBhZnNfZGlyX2l0ZXIgKml0ZXIsIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lLFxcbi0tXFxuZnMvYWZzL2Rpcl9zZWFyY2guYy0xMjYtXFxuZnMvYWZzL2Rpcl9zZWFyY2guYzoxMjc6XFx0bWV0YSA9IGFmc19kaXJfZmluZF9ibG9jayhpdGVyLCAwKTtcXG5mcy9hZnMvZGlyX3NlYXJjaC5jLTEyOC1cXHRpZiAoIW1ldGEpXFxuLS1cXG5mcy9hZnMvZGlyX3NlYXJjaC5jLTE0OC1cXG5mcy9hZnMvZGlyX3NlYXJjaC5jOjE0OTpcXHRcXHRibG9jayA9IGFmc19kaXJfZmluZF9ibG9jayhpdGVyLCBibG51bSk7XFxuZnMvYWZzL2Rpcl9zZWFyY2guYy0xNTAtXFx0XFx0aWYgKCFibG9jaylcXG4tLVxcbmZzL2Fmcy9pbnRlcm5hbC5oPTExMjk9Ym9vbCBhZnNfZGlyX2luaXRfaXRlcihzdHJ1Y3QgYWZzX2Rpcl9pdGVyICppdGVyLCBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSk7XFxuZnMvYWZzL2ludGVybmFsLmg6MTEzMDp1bmlvbiBhZnNfeGRyX2Rpcl9ibG9jayAqYWZzX2Rpcl9maW5kX2Jsb2NrKHN0cnVjdCBhZnNfZGlyX2l0ZXIgKml0ZXIsIHNpemVfdCBibG9jayk7XFxuZnMvYWZzL2ludGVybmFsLmgtMTEzMS1pbnQgYWZzX2Rpcl9zZWFyY2hfYnVja2V0KHN0cnVjdCBhZnNfZGlyX2l0ZXIgKml0ZXIsIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwMzozNDo0Ny43NTQ5MDgzNjJaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODI0NjcyNjE4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQcm9wb3NlZCBQYXRjaCoqXG5cbk9rYXksIHNvIGBhZnNfZGlyX2ZpbmRfYmxvY2tgICppcyogbm9uLXN0YXRpYywgd2hpY2ggSSBoYWQgdG8gY29uZmlybS4gV2l0aCB0aGF0IGNsYXJpZmllZCwgbXkgZm9jdXMgbGlzdCBmb3IgdGhpcyBwYXRjaCBpcyBub3cgbG9ja2VkIGRvd24uIEl0IGluY2x1ZGVzIGEgZmV3IFZGUyBzeW1ib2xzIEknbGwgYmUgc2NydXRpbml6aW5nIGNsb3NlbHk6IGB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWVgLCBgYWZzX2lzX293bmVkX2J5X21lYCwgYGFmc19oYXZlX3NhbWVfb3duZXJgLCBgaW5vZGVfb3duZXJfb3JfY2FwYWJsZWAsIGB2ZnNfc2V0bGVhc2VgLCBgX19jaGVja19zdGlja3lgLCBgc2V0YXR0cl9wcmVwYXJlYCwgYHZmc19kZWR1cGVfZmlsZV9yYW5nZV9vbmVgLCBgYWZzX2VkaXRfZGlyX3JlbW92ZWAsIGBhZnNfZnNfZmV0Y2hfZGF0YWAsIGFuZCwgb2YgY291cnNlLCB0aGUgbm93IGNvbmZpcm1lZCBgYWZzX2Rpcl9maW5kX2Jsb2NrYC5cblxuVGhlIGNydWNpYWwgYml0IGhlcmUgaXMgdGhhdCB0aGlzIHBhdGNoIGZ1bmRhbWVudGFsbHkgYWx0ZXJzIGhvdyBvd25lcnNoaXAgY2hlY2tzIGFyZSBoYW5kbGVkLCBzcGVjaWZpY2FsbHkgYnkgaW50cm9kdWNpbmcgYGlzX293bmVkX2J5X21lYCBhbmQgYGhhdmVfc2FtZV9vd25lcmAgYXMgbmV3IGlub2RlIG9wZXJhdGlvbnMuIFRoaXMgYWxsb3dzIGZpbGVzeXN0ZW1zLCBBRlMgaW4gdGhpcyBpbnN0YW5jZSwgdG8gZWZmZWN0aXZlbHkgb3ZlcnJpZGUgdGhlIHN0YW5kYXJkIFZGUyBjaGVja3MuIFRoYXQncyBhIGh1Z2UgY2hhbmdlLiBUaGV5J3JlIGhvb2tpbmcgaW50byBrZXkgVkZTIHBhdGhzOiBgY2hvd25fb2tgLCBgY2hncnBfb2tgLCB0aGUgY29yZWR1bXAgaGFuZGxpbmcsIHRoZSBvd25lcnNoaXAgY2FwYWJpbGl0aWVzLCB0aGUgbGVhc2UgbWFuYWdlbWVudCwgc3RpY2t5IGJpdCBjaGVja2luZywgZmlsZSBkZWR1cGxpY2F0aW9uLiBBbGwgb2YgdGhlc2UgcG9pbnRzLCBpbiBwYXJ0aWN1bGFyIHRoZSBjb3JlIG93bmVyc2hpcCBzdHVmZiwgYXJlIGNyaXRpY2FsIGFyZWFzLlxuXG5UaGUgcGF0Y2ggaW5jbHVkZXMgaW1wbGVtZW50YXRpb25zIG9mIHRoZXNlIG5ldyBvcGVyYXRpb25zIGZvciBBRlMgaXRzZWxmLCBhbmQgaXQgYWRkcmVzc2VzIHNvbWUgQUZTLXNwZWNpZmljIGlzc3VlcyByZWxhdGVkIHRvIGRpcmVjdG9yeSBtYW5pcHVsYXRpb24gYW5kIGRhdGEgcmV0cmlldmFsLiBTbyBpdCdzIG5vdCBqdXN0IGEgVkZTIGNoYW5nZTsgaXQncyBhIHNpZ25pZmljYW50IG1vZGlmaWNhdGlvbiBvZiBBRlMgYWxvbmdzaWRlIGl0LiBUaGlzIGlzIGRlZmluaXRlbHkgYSBjYW5kaWRhdGUgZm9yIHNvbWUgZXh0ZW5zaXZlIGZ1enppbmcuIFRoZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gYm90aCB0aGUgVkZTIGFuZCB0aGUgQUZTIGxheWVycyByZXF1aXJlIHNvbWUgdmVyeSByaWdvcm91cyB0ZXN0aW5nLCB0byBhdm9pZCBhbnkgcmVncmVzc2lvbnMgb3IgcG90ZW50aWFsIHNlY3VyaXR5IGhvbGVzLiBUaGlzIHJlcXVpcmVzIGdvaW5nIGRlZXAsIGFuZCBhIGhpZ2ggY29uZmlkZW5jZSBsZXZlbCBvZiByZXN1bHQgb24gdGhlIGZ1enppbmcgd2lsbCBiZSByZXF1aXJlZC5cblxuSSBuZWVkIHRvIGNhbGwgc2V0LXJlc3VsdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3MTA2LCJPdXRwdXRUb2tlbnMiOjMyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwMzozNDo1Ni4wMDE2MzczNjRaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTYyOTU0NjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkFGU19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZmc19pbm9kZV9pc19vd25lZF9ieV9tZVwiLFxuICAgIFwiYWZzX2lzX293bmVkX2J5X21lXCIsXG4gICAgXCJhZnNfaGF2ZV9zYW1lX293bmVyXCIsXG4gICAgXCJpbm9kZV9vd25lcl9vcl9jYXBhYmxlXCIsXG4gICAgXCJ2ZnNfc2V0bGVhc2VcIixcbiAgICBcIl9fY2hlY2tfc3RpY2t5XCIsXG4gICAgXCJzZXRhdHRyX3ByZXBhcmVcIixcbiAgICBcInZmc19kZWR1cGVfZmlsZV9yYW5nZV9vbmVcIixcbiAgICBcImFmc19lZGl0X2Rpcl9yZW1vdmVcIixcbiAgICBcImFmc19mc19mZXRjaF9kYXRhXCIsXG4gICAgXCJhZnNfZGlyX2ZpbmRfYmxvY2tcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIG5ldyBpbm9kZSBvcGVyYXRpb25zIGBpc19vd25lZF9ieV9tZWAgYW5kIGBoYXZlX3NhbWVfb3duZXJgIHRvIGFsbG93IGZpbGVzeXN0ZW1zIChsaWtlIEFGUykgdG8gb3ZlcnJpZGUgZGVmYXVsdCBWRlMgb3duZXJzaGlwIGNoZWNrcy4gSXQgbW9kaWZpZXMgY29yZSBWRlMgcGF0aHMgKGUuZy4sIGBjaG93bl9va2AsIGBjaGdycF9va2AsIGBjb3JlZHVtcF9maWxlYCwgYGlub2RlX293bmVyX29yX2NhcGFibGVgLCBgdmZzX3NldGxlYXNlYCwgYG1heV9mb2xsb3dfbGlua2AsIGBtYXlfY3JlYXRlX2luX3N0aWNreWAsIGBfX2NoZWNrX3N0aWNreWAsIGBtYXlfZGVkdXBlX2ZpbGVgKSB0byB1c2UgdGhlc2UgbmV3IG9wZXJhdGlvbnMuIEl0IGFsc28gaW1wbGVtZW50cyB0aGVzZSBvcGVyYXRpb25zIGZvciBBRlMgYW5kIGZpeGVzIHNvbWUgQUZTLXNwZWNpZmljIGJ1Z3MgaW4gZGlyZWN0b3J5IGVkaXRpbmcgYW5kIGRhdGEgZmV0Y2hpbmcuIFRoZXNlIGFyZSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gdGhlIGNvcmUgVkZTIGFuZCBBRlMsIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBvciBzZWN1cml0eSBpc3N1ZXMgYXJlIGludHJvZHVjZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQUZTX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidmZzX2lub2RlX2lzX293bmVkX2J5X21lXCIsXG4gICAgXCJhZnNfaXNfb3duZWRfYnlfbWVcIixcbiAgICBcImFmc19oYXZlX3NhbWVfb3duZXJcIixcbiAgICBcImlub2RlX293bmVyX29yX2NhcGFibGVcIixcbiAgICBcInZmc19zZXRsZWFzZVwiLFxuICAgIFwiX19jaGVja19zdGlja3lcIixcbiAgICBcInNldGF0dHJfcHJlcGFyZVwiLFxuICAgIFwidmZzX2RlZHVwZV9maWxlX3JhbmdlX29uZVwiLFxuICAgIFwiYWZzX2VkaXRfZGlyX3JlbW92ZVwiLFxuICAgIFwiYWZzX2ZzX2ZldGNoX2RhdGFcIixcbiAgICBcImFmc19kaXJfZmluZF9ibG9ja1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgbmV3IGlub2RlIG9wZXJhdGlvbnMgYGlzX293bmVkX2J5X21lYCBhbmQgYGhhdmVfc2FtZV9vd25lcmAgdG8gYWxsb3cgZmlsZXN5c3RlbXMgKGxpa2UgQUZTKSB0byBvdmVycmlkZSBkZWZhdWx0IFZGUyBvd25lcnNoaXAgY2hlY2tzLiBJdCBtb2RpZmllcyBjb3JlIFZGUyBwYXRocyAoZS5nLiwgYGNob3duX29rYCwgYGNoZ3JwX29rYCwgYGNvcmVkdW1wX2ZpbGVgLCBgaW5vZGVfb3duZXJfb3JfY2FwYWJsZWAsIGB2ZnNfc2V0bGVhc2VgLCBgbWF5X2ZvbGxvd19saW5rYCwgYG1heV9jcmVhdGVfaW5fc3RpY2t5YCwgYF9fY2hlY2tfc3RpY2t5YCwgYG1heV9kZWR1cGVfZmlsZWApIHRvIHVzZSB0aGVzZSBuZXcgb3BlcmF0aW9ucy4gSXQgYWxzbyBpbXBsZW1lbnRzIHRoZXNlIG9wZXJhdGlvbnMgZm9yIEFGUyBhbmQgZml4ZXMgc29tZSBBRlMtc3BlY2lmaWMgYnVncyBpbiBkaXJlY3RvcnkgZWRpdGluZyBhbmQgZGF0YSBmZXRjaGluZy4gVGhlc2UgYXJlIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiB0aGUgY29yZSBWRlMgYW5kIEFGUywgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIG9yIHNlY3VyaXR5IGlzc3VlcyBhcmUgaW50cm9kdWNlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowv42d2[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-28 03:01:01 +0000 UTC FinishedAt: 2026-07-28 03:34:58 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "76559739eb1f9665fbc3262806a040a604571ccb", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "AFS_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "76559739eb1f9665fbc3262806a040a604571ccb", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "AFS_FS" ], "series_id": "b8d72d99-8d44-4907-a9e5-898881390da6" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "vfs_inode_is_owned_by_me", "afs_is_owned_by_me", "afs_have_same_owner", "inode_owner_or_capable", "vfs_setlease", "__check_sticky", "setattr_prepare", "vfs_dedupe_file_range_one", "afs_edit_dir_remove", "afs_fs_fetch_data", "afs_dir_find_block" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAzOjMzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0FGU19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Zmc19pbm9kZV9pc19vd25lZF9ieV9tZSYjMzQ7LAogICAgJiMzNDthZnNfaXNfb3duZWRfYnlfbWUmIzM0OywKICAgICYjMzQ7YWZzX2hhdmVfc2FtZV9vd25lciYjMzQ7LAogICAgJiMzNDtpbm9kZV9vd25lcl9vcl9jYXBhYmxlJiMzNDssCiAgICAmIzM0O3Zmc19zZXRsZWFzZSYjMzQ7LAogICAgJiMzNDtfX2NoZWNrX3N0aWNreSYjMzQ7LAogICAgJiMzNDtzZXRhdHRyX3ByZXBhcmUmIzM0OywKICAgICYjMzQ7dmZzX2RlZHVwZV9maWxlX3JhbmdlX29uZSYjMzQ7LAogICAgJiMzNDthZnNfZWRpdF9kaXJfcmVtb3ZlJiMzNDssCiAgICAmIzM0O2Fmc19mc19mZXRjaF9kYXRhJiMzNDssCiAgICAmIzM0O2Fmc19kaXJfZmluZF9ibG9jayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIG5ldyBpbm9kZSBvcGVyYXRpb25zIGBpc19vd25lZF9ieV9tZWAgYW5kIGBoYXZlX3NhbWVfb3duZXJgIHRvIGFsbG93IGZpbGVzeXN0ZW1zIChsaWtlIEFGUykgdG8gb3ZlcnJpZGUgZGVmYXVsdCBWRlMgb3duZXJzaGlwIGNoZWNrcy4gSXQgbW9kaWZpZXMgY29yZSBWRlMgcGF0aHMgKGUuZy4sIGBjaG93bl9va2AsIGBjaGdycF9va2AsIGBjb3JlZHVtcF9maWxlYCwgYGlub2RlX293bmVyX29yX2NhcGFibGVgLCBgdmZzX3NldGxlYXNlYCwgYG1heV9mb2xsb3dfbGlua2AsIGBtYXlfY3JlYXRlX2luX3N0aWNreWAsIGBfX2NoZWNrX3N0aWNreWAsIGBtYXlfZGVkdXBlX2ZpbGVgKSB0byB1c2UgdGhlc2UgbmV3IG9wZXJhdGlvbnMuIEl0IGFsc28gaW1wbGVtZW50cyB0aGVzZSBvcGVyYXRpb25zIGZvciBBRlMgYW5kIGZpeGVzIHNvbWUgQUZTLXNwZWNpZmljIGJ1Z3MgaW4gZGlyZWN0b3J5IGVkaXRpbmcgYW5kIGRhdGEgZmV0Y2hpbmcuIFRoZXNlIGFyZSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gdGhlIGNvcmUgVkZTIGFuZCBBRlMsIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBvciBzZWN1cml0eSBpc3N1ZXMgYXJlIGludHJvZHVjZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDM6MzM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA3NmI5ZjYwNmVhZTJiMDllMDkwMWQyNDg4MzJlZDVjMTM2MDBmNTQwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBKdWwgMjggMDM6MzM6MDUgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy92ZnMucnN0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy92ZnMucnN0XG5pbmRleCA3Yzc1MzE0OGFmODg4My4uODkzNDE5ZTAwM2VhZjcgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Zmcy5yc3RcbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZzLnJzdFxuQEAgLTQ0NSw2ICYjNDM7NDQ1LDkgQEAgQXMgb2Yga2VybmVsIDIuNi4yMiwgdGhlIGZvbGxvd2luZyBtZW1iZXJzIGFyZSBkZWZpbmVkOlxuIFx0XHRcdFx0ICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGZpbGVfa2F0dHIgKmZhKTtcbiBcdFx0aW50ICgqZmlsZWF0dHJfZ2V0KShzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBmaWxlX2thdHRyICpmYSk7XG4gXHQgICAgICAgIHN0cnVjdCBvZmZzZXRfY3R4ICooKmdldF9vZmZzZXRfY3R4KShzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbiYjNDM7XHRcdGludCAoKmlzX293bmVkX2J5X21lKShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSk7XG4mIzQzO1x0XHRpbnQgKCpoYXZlX3NhbWVfb3duZXIpKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuJiM0MztcdFx0XHRcdCAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpO1xuIFx0fTtcbiBcbiBBZ2FpbiwgYWxsIG1ldGhvZHMgYXJlIGNhbGxlZCB3aXRob3V0IGFueSBsb2NrcyBiZWluZyBoZWxkLCB1bmxlc3NcbkBAIC02MzQsNiAmIzQzOzYzNywyNCBAQCBvdGhlcndpc2Ugbm90ZWQuXG4gICAgICAgICBmaWxlc3lzdGVtIG11c3QgZGVmaW5lIHRoaXMgb3BlcmF0aW9uIHRvIHVzZVxuICAgICAgICAgc2ltcGxlX29mZnNldF9kaXJfb3BlcmF0aW9ucy5cbiBcbiYjNDM7YGBpc19vd25lZF9ieV9tZWBgXG4mIzQzO1x0Y2FsbGVkIHRvIGRldGVybWluZSBpZiB0aGUgZmlsZSBjYW4gYmUgY29uc2lkZXJlZCB0byBiZSAmIzM5O293bmVkJiMzOTsgYnlcbiYjNDM7XHR0aGUgb3duZXIgb2YgdGhlIHByb2Nlc3Mgb3IgaWYgdGhlIHByb2Nlc3MgaGFzIGEgdG9rZW4gdGhhdCBncmFudHNcbiYjNDM7XHRpdCBvd25lcnNoaXAgcHJpdmlsZWdlcy4gIElmIHVuc2V0LCB0aGUgZGVmYXVsdCBpcyB0byBjb21wYXJlIGlfdWlkXG4mIzQzO1x0dG8gY3VycmVudF9mc3VpZCgpIC0gYnV0IHRoaXMgbWF5IGdpdmUgaW5jb3JyZWN0IHJlc3VsdHMgZm9yIHNvbWVcbiYjNDM7XHRuZXR3b3JrIG9yIHBsdWctaW4gYmxvY2sgZmlsZXN5c3RlbXMuICBGb3IgZXhhbXBsZSwgQUZTIGRldGVybWluZXNcbiYjNDM7XHRvd25lcnNoaXAgZW50aXJlbHkgYWNjb3JkaW5nIHRvIGFuIG9idGFpbmVkIHRva2VuIGFuZCBpX3VpZCBtYXkgbm90XG4mIzQzO1x0ZXZlbiBiZSBmcm9tIHRoZSBzYW1lIElEIHNwYWNlIGFzIGN1cnJlbnRfdWlkKCkuXG4mIzQzO1xuJiM0MztgYGhhdmVfc2FtZV9vd25lcmBgXG4mIzQzO1x0Y2FsbGVkIHRvIGRldGVybWluZSBpZiBhbiBpbm9kZSBoYXMgdGhlIHNhbWUgb3duZXIgYXMgaXRzIGltbWVkaWF0ZVxuJiM0MztcdHBhcmVudCBvbiB0aGUgcGF0aCB3YWxrZWQuICBJZiB1bnNldCwgdGhlIGRlZmF1bHQgaXMgdG8gc2ltcGx5XG4mIzQzO1x0Y29tcGFyZSB0aGUgaV91aWQgb2YgYm90aC4gIEZvciBleGFtcGxlLCBBRlMgY29tcGFyZXMgdGhlIG93bmVyIElEc1xuJiM0MztcdG9mIGJvdGggLSBidXQgdGhlc2UgYXJlIGEgNjQtYml0IHZhbHVlcyBvbiBzb21lIHZhcmlhbnRzIHRoYXQgbWlnaHRcbiYjNDM7XHRub3QgZml0IGludG8gYSBrdWlkX3QgYW5kIGNpZnMgaGFzIEdVSURzIHRoYXQgY2Fubm90IGJlIGNvbXBhcmVkIHRvXG4mIzQzO1x0a3VpZF90LlxuJiM0MztcbiYjNDM7XG4gVGhlIEFkZHJlc3MgU3BhY2UgT2JqZWN0XG4gPT09PT09PT09PT09PT09PT09PT09PT09XG4gXG5kaWZmIC0tZ2l0IGEvZnMvYWZzL2Rpci5jIGIvZnMvYWZzL2Rpci5jXG5pbmRleCA2ZGY1NmZlOTE2M2ZkNy4uZWUyZjVlYzBiMmM2N2QgMTAwNjQ0XG4tLS0gYS9mcy9hZnMvZGlyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2Fmcy9kaXIuY1xuQEAgLTY5LDYgJiM0Mzs2OSw4IEBAIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGFmc19kaXJfaW5vZGVfb3BlcmF0aW9ucyA9IHtcbiBcdC5wZXJtaXNzaW9uXHQ9IGFmc19wZXJtaXNzaW9uLFxuIFx0LmdldGF0dHJcdD0gYWZzX2dldGF0dHIsXG4gXHQuc2V0YXR0clx0PSBhZnNfc2V0YXR0cixcbiYjNDM7XHQuaXNfb3duZWRfYnlfbWVcdD0gYWZzX2lzX293bmVkX2J5X21lLFxuJiM0MztcdC5oYXZlX3NhbWVfb3duZXIgPSBhZnNfaGF2ZV9zYW1lX293bmVyLFxuIH07XG4gXG4gY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBhZnNfZGlyX2FvcHMgPSB7XG5kaWZmIC0tZ2l0IGEvZnMvYWZzL2Rpcl9lZGl0LmMgYi9mcy9hZnMvZGlyX2VkaXQuY1xuaW5kZXggZmQzYWE5Zjk3Y2U2NGMuLmMzMTMwMzA1OTQ0NGFkIDEwMDY0NFxuLS0tIGEvZnMvYWZzL2Rpcl9lZGl0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2Fmcy9kaXJfZWRpdC5jXG5AQCAtNDE1LDcgJiM0Mzs0MTUsNyBAQCB2b2lkIGFmc19lZGl0X2Rpcl9yZW1vdmUoc3RydWN0IGFmc192bm9kZSAqdm5vZGUsXG4gXHRpZiAoIWFmc19kaXJfaW5pdF9pdGVyKFx1MDAyNml0ZXIsIG5hbWUpKVxuIFx0XHRyZXR1cm47XG4gXG4tXHRtZXRhID0gYWZzX2Rpcl9maW5kX2Jsb2NrKFx1MDAyNml0ZXIsIDApO1xuJiM0MztcdG1ldGEgPSBhZnNfZGlyX2dldF9ibG9jayhcdTAwMjZpdGVyLCAwKTtcbiBcdGlmICghbWV0YSlcbiBcdFx0cmV0dXJuO1xuIFxuQEAgLTQ0Miw3ICYjNDM7NDQyLDcgQEAgdm9pZCBhZnNfZWRpdF9kaXJfcmVtb3ZlKHN0cnVjdCBhZnNfdm5vZGUgKnZub2RlLFxuIFx0LyogQ2hlY2sgYW5kIGNsZWFyIHRoZSBlbnRyeS4gKi9cbiBcdGRlID0gXHUwMDI2YmxvY2stXHUwMDNlZGlyZW50c1tzbG90XTtcbiBcdGlmIChkZS1cdTAwM2V1LnZhbGlkICE9IDEpXG4tXHRcdGdvdG8gZXJyb3JfdW5tYXA7XG4mIzQzO1x0XHRnb3RvIGVycm9yO1xuIFxuIFx0dHJhY2VfYWZzX2VkaXRfZGlyKHZub2RlLCB3aHksIGFmc19lZGl0X2Rpcl9kZWxldGUsIGIsIHNsb3QsXG4gXHRcdFx0ICAgbnRvaGwoZGUtXHUwMDNldS52bm9kZSksIG50b2hsKGRlLVx1MDAzZXUudW5pcXVlKSxcbkBAIC00NTgsNyAmIzQzOzQ1OCw2IEBAIHZvaWQgYWZzX2VkaXRfZGlyX3JlbW92ZShzdHJ1Y3QgYWZzX3Zub2RlICp2bm9kZSxcbiBcdC8qIENsZWFyIHRoZSBjb25zdGl0dWVudCBlbnRyaWVzLiAqL1xuIFx0bmV4dCA9IGRlLVx1MDAzZXUuaGFzaF9uZXh0O1xuIFx0bWVtc2V0KGRlLCAwLCBzaXplb2YoKmRlKSAqIGl0ZXIubnJfc2xvdHMpO1xuLVx0a3VubWFwX2xvY2FsKGJsb2NrKTtcbiBcbiBcdC8qIEFkanVzdCB0aGUgaGFzaCBjaGFpbjogaWYgaXRlci1cdTAwM2VwcmV2X2VudHJ5IGlzIDAsIHRoZSBoYXNodGFibGUgaGVhZFxuIFx0ICogaW5kZXggaXMgcHJldmlvdXM7IG90aGVyd2lzZSBpdCYjMzk7cyBzbG90IG51bWJlciBvZiB0aGUgcHJldmlvdXMgZW50cnkuXG5AQCAtNDg1LDcgJiM0Mzs0ODQsNiBAQCB2b2lkIGFmc19lZGl0X2Rpcl9yZW1vdmUoc3RydWN0IGFmc192bm9kZSAqdm5vZGUsXG4gXHRcdHBkZSA9IFx1MDAyNnBibG9jay1cdTAwM2VkaXJlbnRzW3BzXTtcbiBcdFx0cHJldl9uZXh0ID0gcGRlLVx1MDAzZXUuaGFzaF9uZXh0O1xuIFx0XHRpZiAocHJldl9uZXh0ICE9IGh0b25zKGVudHJ5KSkge1xuLVx0XHRcdGt1bm1hcF9sb2NhbChwYmxvY2spO1xuIFx0XHRcdHByX3dhcm4oXCYjMzQ7JWxseDolbGx4OiV4OiBub3QgcHJldiBpbiBjaGFpbiBiPSV4IHA9JXgsJXggZT0leCAlKnNcJiMzNDssXG4gXHRcdFx0XHR2bm9kZS1cdTAwM2VmaWQudmlkLCB2bm9kZS1cdTAwM2VmaWQudm5vZGUsIHZub2RlLVx1MDAzZWZpZC51bmlxdWUsXG4gXHRcdFx0XHRpdGVyLmJ1Y2tldCwgaXRlci5wcmV2X2VudHJ5LCBwcmV2X25leHQsIGVudHJ5LFxuQEAgLTQ5Myw3ICYjNDM7NDkxLDYgQEAgdm9pZCBhZnNfZWRpdF9kaXJfcmVtb3ZlKHN0cnVjdCBhZnNfdm5vZGUgKnZub2RlLFxuIFx0XHRcdGdvdG8gZXJyb3I7XG4gXHRcdH1cbiBcdFx0cGRlLVx1MDAzZXUuaGFzaF9uZXh0ID0gbmV4dDtcbi1cdFx0a3VubWFwX2xvY2FsKHBibG9jayk7XG4gXHR9XG4gXG4gXHRuZXRmc19zaW5nbGVfbWFya19pbm9kZV9kaXJ0eShcdTAwMjZ2bm9kZS1cdTAwM2VuZXRmcy5pbm9kZSk7XG5AQCAtNTAzLDE4ICYjNDM7NTAwLDE2IEBAIHZvaWQgYWZzX2VkaXRfZGlyX3JlbW92ZShzdHJ1Y3QgYWZzX3Zub2RlICp2bm9kZSxcbiBcdF9kZWJ1ZyhcJiMzNDtSZW1vdmUgJXMgZnJvbSAldVsldV1cJiMzNDssIG5hbWUtXHUwMDNlbmFtZSwgYiwgc2xvdCk7XG4gXG4gb3V0X3VubWFwOlxuJiM0MztcdGFmc19kaXJfZW5kX2l0ZXIoXHUwMDI2aXRlcik7XG4gXHRrdW5tYXBfbG9jYWwobWV0YSk7XG4gXHRfbGVhdmUoXCYjMzQ7XCYjMzQ7KTtcbiBcdHJldHVybjtcbiBcbiBhbHJlYWR5X2ludmFsaWRhdGVkOlxuLVx0a3VubWFwX2xvY2FsKGJsb2NrKTtcbiBcdHRyYWNlX2Fmc19lZGl0X2Rpcih2bm9kZSwgd2h5LCBhZnNfZWRpdF9kaXJfZGVsZXRlX2ludmFsLFxuIFx0XHRcdCAgIDAsIDAsIDAsIDAsIG5hbWUtXHUwMDNlbmFtZSk7XG4gXHRnb3RvIG91dF91bm1hcDtcbiBcbi1lcnJvcl91bm1hcDpcbi1cdGt1bm1hcF9sb2NhbChibG9jayk7XG4gZXJyb3I6XG4gXHR0cmFjZV9hZnNfZWRpdF9kaXIodm5vZGUsIHdoeSwgYWZzX2VkaXRfZGlyX2RlbGV0ZV9lcnJvcixcbiBcdFx0XHQgICAwLCAwLCAwLCAwLCBuYW1lLVx1MDAzZW5hbWUpO1xuZGlmZiAtLWdpdCBhL2ZzL2Fmcy9kaXJfc2VhcmNoLmMgYi9mcy9hZnMvZGlyX3NlYXJjaC5jXG5pbmRleCAxMDQ0MTFjMDY5MmY1Ny4uMTFlYmRmZmZjYjFkMzggMTAwNjQ0XG4tLS0gYS9mcy9hZnMvZGlyX3NlYXJjaC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9hZnMvZGlyX3NlYXJjaC5jXG5AQCAtNzUsMTAgJiM0Mzs3NSw3IEBAIHVuaW9uIGFmc194ZHJfZGlyX2Jsb2NrICphZnNfZGlyX2ZpbmRfYmxvY2soc3RydWN0IGFmc19kaXJfaXRlciAqaXRlciwgc2l6ZV90IGJsXG4gXG4gXHRfZW50ZXIoXCYjMzQ7JXp4LCVkXCYjMzQ7LCBibG9jaywgc2xvdCk7XG4gXG4tXHRpZiAoaXRlci1cdTAwM2VibG9jaykge1xuLVx0XHRrdW5tYXBfbG9jYWwoaXRlci1cdTAwM2VibG9jayk7XG4tXHRcdGl0ZXItXHUwMDNlYmxvY2sgPSBOVUxMO1xuLVx0fVxuJiM0MztcdGFmc19kaXJfZW5kX2l0ZXIoaXRlcik7XG4gXG4gXHRpZiAoZHZub2RlLVx1MDAzZWRpcmVjdG9yeV9zaXplIFx1MDAzYyBibGVuZClcbiBcdFx0Z290byBmYWlsO1xuQEAgLTE3MywxMiAmIzQzOzE3MCw4IEBAIGludCBhZnNfZGlyX3NlYXJjaF9idWNrZXQoc3RydWN0IGFmc19kaXJfaXRlciAqaXRlciwgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsXG4gXG4gXHRyZXQgPSAtRU5PRU5UO1xuIGZvdW5kOlxuLVx0aWYgKGl0ZXItXHUwMDNlYmxvY2spIHtcbi1cdFx0a3VubWFwX2xvY2FsKGl0ZXItXHUwMDNlYmxvY2spO1xuLVx0XHRpdGVyLVx1MDAzZWJsb2NrID0gTlVMTDtcbi1cdH1cbi1cbiBiYWQ6XG4mIzQzO1x0YWZzX2Rpcl9lbmRfaXRlcihpdGVyKTtcbiBcdGlmIChyZXQgPT0gLUVTVEFMRSlcbiBcdFx0YWZzX2ludmFsaWRhdGVfZGlyKGl0ZXItXHUwMDNlZHZub2RlLCBhZnNfZGlyX2ludmFsaWRfaXRlcl9zdGFsZSk7XG4gXHRfbGVhdmUoXCYjMzQ7ID0gJWRcJiMzNDssIHJldCk7XG5kaWZmIC0tZ2l0IGEvZnMvYWZzL2ZpbGUuYyBiL2ZzL2Fmcy9maWxlLmNcbmluZGV4IDA0Njc3NDJiZmVlZTM0Li5iYTQ0NDkzY2NhZjZlZSAxMDA2NDRcbi0tLSBhL2ZzL2Fmcy9maWxlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2Fmcy9maWxlLmNcbkBAIC00OSw2ICYjNDM7NDksOCBAQCBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBhZnNfZmlsZV9pbm9kZV9vcGVyYXRpb25zID0ge1xuIFx0LmdldGF0dHJcdD0gYWZzX2dldGF0dHIsXG4gXHQuc2V0YXR0clx0PSBhZnNfc2V0YXR0cixcbiBcdC5wZXJtaXNzaW9uXHQ9IGFmc19wZXJtaXNzaW9uLFxuJiM0MztcdC5pc19vd25lZF9ieV9tZVx0PSBhZnNfaXNfb3duZWRfYnlfbWUsXG4mIzQzO1x0LmhhdmVfc2FtZV9vd25lciA9IGFmc19oYXZlX3NhbWVfb3duZXIsXG4gfTtcbiBcbiBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGFmc19maWxlX2FvcHMgPSB7XG5kaWZmIC0tZ2l0IGEvZnMvYWZzL2ZzY2xpZW50LmMgYi9mcy9hZnMvZnNjbGllbnQuY1xuaW5kZXggYTJmZmQ2MDg4OWY4OWQuLjFhM2YxODZhNmExMTNkIDEwMDY0NFxuLS0tIGEvZnMvYWZzL2ZzY2xpZW50LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2Fmcy9mc2NsaWVudC5jXG5AQCAtNDc3LDYgJiM0Mzs0NzcsOSBAQCB2b2lkIGFmc19mc19mZXRjaF9kYXRhKHN0cnVjdCBhZnNfb3BlcmF0aW9uICpvcClcbiBcdGlmICghY2FsbClcbiBcdFx0cmV0dXJuIGFmc19vcF9ub21lbShvcCk7XG4gXG4mIzQzO1x0aWYgKG9wLVx1MDAzZWZsYWdzIFx1MDAyNiBBRlNfT1BFUkFUSU9OX0FTWU5DKVxuJiM0MztcdFx0Y2FsbC1cdTAwM2Vhc3luYyA9IHRydWU7XG4mIzQzO1xuIFx0LyogbWFyc2hhbGwgdGhlIHBhcmFtZXRlcnMgKi9cbiBcdGJwID0gY2FsbC1cdTAwM2VyZXF1ZXN0O1xuIFx0YnBbMF0gPSBodG9ubChGU0ZFVENIREFUQSk7XG5AQCAtNDg0LDcgJiM0Mzs0ODcsNyBAQCB2b2lkIGFmc19mc19mZXRjaF9kYXRhKHN0cnVjdCBhZnNfb3BlcmF0aW9uICpvcClcbiBcdGJwWzJdID0gaHRvbmwodnAtXHUwMDNlZmlkLnZub2RlKTtcbiBcdGJwWzNdID0gaHRvbmwodnAtXHUwMDNlZmlkLnVuaXF1ZSk7XG4gXHRicFs0XSA9IGh0b25sKGxvd2VyXzMyX2JpdHMoc3VicmVxLVx1MDAzZXN0YXJ0ICYjNDM7IHN1YnJlcS1cdTAwM2V0cmFuc2ZlcnJlZCkpO1xuLVx0YnBbNV0gPSBodG9ubChsb3dlcl8zMl9iaXRzKHN1YnJlcS1cdTAwM2VsZW4gICAmIzQzOyBzdWJyZXEtXHUwMDNldHJhbnNmZXJyZWQpKTtcbiYjNDM7XHRicFs1XSA9IGh0b25sKGxvd2VyXzMyX2JpdHMoc3VicmVxLVx1MDAzZWxlbiAgIC0gc3VicmVxLVx1MDAzZXRyYW5zZmVycmVkKSk7XG4gXG4gXHRjYWxsLVx1MDAzZWZpZCA9IHZwLVx1MDAzZWZpZDtcbiBcdHRyYWNlX2Fmc19tYWtlX2ZzX2NhbGwoY2FsbCwgXHUwMDI2dnAtXHUwMDNlZmlkKTtcbmRpZmYgLS1naXQgYS9mcy9hZnMvaW5vZGUuYyBiL2ZzL2Fmcy9pbm9kZS5jXG5pbmRleCAxNGYzOWE5YmVhNmNmZS4uYWY4NWE4OGQ5NDNkZDEgMTAwNjQ0XG4tLS0gYS9mcy9hZnMvaW5vZGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvYWZzL2lub2RlLmNcbkBAIC05MSw2ICYjNDM7OTEsNyBAQCBzdGF0aWMgaW50IGFmc19pbm9kZV9pbml0X2Zyb21fc3RhdHVzKHN0cnVjdCBhZnNfb3BlcmF0aW9uICpvcCxcbiBcdGlub2RlLVx1MDAzZWlfZmxhZ3MgfD0gU19OT0FUSU1FO1xuIFx0aW5vZGUtXHUwMDNlaV91aWQgPSBtYWtlX2t1aWQoXHUwMDI2aW5pdF91c2VyX25zLCBzdGF0dXMtXHUwMDNlb3duZXIpO1xuIFx0aW5vZGUtXHUwMDNlaV9naWQgPSBtYWtlX2tnaWQoXHUwMDI2aW5pdF91c2VyX25zLCBzdGF0dXMtXHUwMDNlZ3JvdXApO1xuJiM0MztcdGlub2RlLVx1MDAzZWlfb3BmbGFncyB8PSBJT1BfT1dORVJTSElQX09WRVJSSURFO1xuIFx0c2V0X25saW5rKFx1MDAyNnZub2RlLVx1MDAzZW5ldGZzLmlub2RlLCBzdGF0dXMtXHUwMDNlbmxpbmspO1xuIFxuIFx0aV9zaXplX3dyaXRlKGlub2RlLCBzdGF0dXMtXHUwMDNlc2l6ZSk7XG5kaWZmIC0tZ2l0IGEvZnMvYWZzL2ludGVybmFsLmggYi9mcy9hZnMvaW50ZXJuYWwuaFxuaW5kZXggNjAxZjAxZTVjMTVmY2MuLjQwZTVjZTYxOTQ3NjIxIDEwMDY0NFxuLS0tIGEvZnMvYWZzL2ludGVybmFsLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2Fmcy9pbnRlcm5hbC5oXG5AQCAtMTEzMyw2ICYjNDM7MTEzMywxNCBAQCBpbnQgYWZzX2Rpcl9zZWFyY2hfYnVja2V0KHN0cnVjdCBhZnNfZGlyX2l0ZXIgKml0ZXIsIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lLFxuIGludCBhZnNfZGlyX3NlYXJjaChzdHJ1Y3QgYWZzX3Zub2RlICpkdm5vZGUsIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lLFxuIFx0XHQgICBzdHJ1Y3QgYWZzX2ZpZCAqX2ZpZCwgYWZzX2RhdGF2ZXJzaW9uX3QgKl9kaXJfdmVyc2lvbik7XG4gXG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBhZnNfZGlyX2VuZF9pdGVyKHN0cnVjdCBhZnNfZGlyX2l0ZXIgKml0ZXIpXG4mIzQzO3tcbiYjNDM7XHRpZiAoaXRlci1cdTAwM2VibG9jaykge1xuJiM0MztcdFx0a3VubWFwX2xvY2FsKGl0ZXItXHUwMDNlYmxvY2spO1xuJiM0MztcdFx0aXRlci1cdTAwM2VibG9jayA9IE5VTEw7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuIC8qXG4gICogZGlyX3NpbGx5LmNcbiAgKi9cbkBAIC0xNDIxLDcgJiM0MzsxNDI5LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGFmc19tYWtlX29wX2NhbGwoc3RydWN0IGFmc19vcGVyYXRpb24gKm9wLCBzdHJ1Y3QgYWZzX2NhbGwgKmNcbiB7XG4gXHRzdHJ1Y3QgYWZzX2FkZHJfbGlzdCAqYWxpc3QgPSBvcC1cdTAwM2Vlc3RhdGUtXHUwMDNlYWRkcmVzc2VzO1xuIFxuLVx0b3AtXHUwMDNlY2FsbFx0PSBjYWxsO1xuJiM0MztcdG9wLVx1MDAzZWNhbGxcdD0gYWZzX2dldF9jYWxsKGNhbGwsIGFmc19jYWxsX3RyYWNlX2dldCk7XG4gXHRvcC1cdTAwM2V0eXBlXHQ9IGNhbGwtXHUwMDNldHlwZTtcbiBcdGNhbGwtXHUwMDNlb3BcdD0gb3A7XG4gXHRjYWxsLVx1MDAzZWtleVx0PSBvcC1cdTAwM2VrZXk7XG5AQCAtMTQyOSw2ICYjNDM7MTQzNyw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBhZnNfbWFrZV9vcF9jYWxsKHN0cnVjdCBhZnNfb3BlcmF0aW9uICpvcCwgc3RydWN0IGFmc19jYWxsICpjXG4gXHRjYWxsLVx1MDAzZXBlZXJcdD0gcnhycGNfa2VybmVsX2dldF9wZWVyKGFsaXN0LVx1MDAzZWFkZHJzW29wLVx1MDAzZWFkZHJfaW5kZXhdLnBlZXIpO1xuIFx0Y2FsbC1cdTAwM2VzZXJ2aWNlX2lkID0gb3AtXHUwMDNlc2VydmVyLVx1MDAzZXNlcnZpY2VfaWQ7XG4gXHRhZnNfbWFrZV9jYWxsKGNhbGwsIGdmcCk7XG4mIzQzO1x0YWZzX3B1dF9jYWxsKGNhbGwpO1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgYWZzX2V4dHJhY3RfYmVnaW4oc3RydWN0IGFmc19jYWxsICpjYWxsLCB2b2lkICpidWYsIHNpemVfdCBzaXplKVxuQEAgLTE1MzAsNiAmIzQzOzE1MzksOSBAQCBleHRlcm4gc3RydWN0IGtleSAqYWZzX3JlcXVlc3Rfa2V5KHN0cnVjdCBhZnNfY2VsbCAqKTtcbiBleHRlcm4gc3RydWN0IGtleSAqYWZzX3JlcXVlc3Rfa2V5X3JjdShzdHJ1Y3QgYWZzX2NlbGwgKik7XG4gZXh0ZXJuIGludCBhZnNfY2hlY2tfcGVybWl0KHN0cnVjdCBhZnNfdm5vZGUgKiwgc3RydWN0IGtleSAqLCBhZnNfYWNjZXNzX3QgKik7XG4gZXh0ZXJuIGludCBhZnNfcGVybWlzc2lvbihzdHJ1Y3QgbW50X2lkbWFwICosIHN0cnVjdCBpbm9kZSAqLCBpbnQpO1xuJiM0MztpbnQgYWZzX2lzX293bmVkX2J5X21lKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbiYjNDM7aW50IGFmc19oYXZlX3NhbWVfb3duZXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUxLFxuJiM0MztcdFx0XHRzdHJ1Y3QgaW5vZGUgKmlub2RlMik7XG4gZXh0ZXJuIHZvaWQgX19leGl0IGFmc19jbGVhbl91cF9wZXJtaXRfY2FjaGUodm9pZCk7XG4gXG4gLypcbmRpZmYgLS1naXQgYS9mcy9hZnMvc2VjdXJpdHkuYyBiL2ZzL2Fmcy9zZWN1cml0eS5jXG5pbmRleCA2ZDAwZDYyYTY1ZWRmNi4uNzA5MmY1YWNkY2Q2YWMgMTAwNjQ0XG4tLS0gYS9mcy9hZnMvc2VjdXJpdHkuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvYWZzL3NlY3VyaXR5LmNcbkBAIC01MTAsNiAmIzQzOzUxMCw1MiBAQCBpbnQgYWZzX3Blcm1pc3Npb24oc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiYjNDM7LypcbiYjNDM7ICogRGV0ZXJtaW5lIGlmIGFuIGlub2RlIGlzIG93bmVkIGJ5ICYjMzk7bWUmIzM5OyAtIHdoYXRldmVyIHRoYXQgbWVhbnMgZm9yIHRoZVxuJiM0MzsgKiBmaWxlc3lzdGVtLiAgSW4gdGhlIGNhc2Ugb2YgQUZTLCB0aGlzIG1lYW5zIHRoYXQgdGhlIGZpbGUgaXMgb3duZWQgYnkgdGhlXG4mIzQzOyAqIEFGUyB1c2VyIHJlcHJlc2VudGVkIGJ5IHRoZSBSeCBTZWN1cml0eSBDbGFzcyB0b2tlbiBoZWxkIGluIGEga2V5LiAgUmV0dXJuc1xuJiM0MzsgKiAwIGlmIG93bmVkIGJ5IG1lLCAxIGlmIG5vdDsgY2FuIGFsc28gcmV0dXJuIGFuIGVycm9yLlxuJiM0MzsgKi9cbiYjNDM7aW50IGFmc19pc19vd25lZF9ieV9tZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBhZnNfdm5vZGUgKnZub2RlID0gQUZTX0ZTX0koaW5vZGUpO1xuJiM0MztcdGFmc19hY2Nlc3NfdCBhY2Nlc3M7XG4mIzQzO1x0c3RydWN0IGtleSAqa2V5O1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGlmIChTX0lTRElSKGlub2RlLVx1MDAzZWlfbW9kZSkpXG4mIzQzO1x0XHRyZXR1cm4gMTsgLyogVGhlIEFETUlOIHJpZ2h0IGNoZWNrIGRvZXNuJiMzOTt0IHdvcmsgZm9yIGRpcmVjdG9yaWVzLiAqL1xuJiM0MztcbiYjNDM7XHRrZXkgPSBhZnNfcmVxdWVzdF9rZXkodm5vZGUtXHUwMDNldm9sdW1lLVx1MDAzZWNlbGwpO1xuJiM0MztcdGlmIChJU19FUlIoa2V5KSlcbiYjNDM7XHRcdHJldHVybiBQVFJfRVJSKGtleSk7XG4mIzQzO1xuJiM0MztcdC8qIEdldCB0aGUgYWNjZXNzIHJpZ2h0cyBmb3IgdGhlIGtleSBvbiB0aGlzIGZpbGUuICovXG4mIzQzO1x0cmV0ID0gYWZzX2NoZWNrX3Blcm1pdCh2bm9kZSwga2V5LCBcdTAwMjZhY2Nlc3MpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycm9yO1xuJiM0MztcbiYjNDM7XHQvKiBXZSBnZXQgdGhlIEFETUlOSVNURVIgYml0IGlmIHdlIG93biB0aGUgZmlsZS4gKi9cbiYjNDM7XHRyZXQgPSAoYWNjZXNzIFx1MDAyNiBBRlNfQUNFX0FETUlOSVNURVIpID8gMCA6IDE7XG4mIzQzO2Vycm9yOlxuJiM0MztcdGtleV9wdXQoa2V5KTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBEZXRlcm1pbmUgaWYgYSBmaWxlIGhhcyB0aGUgc2FtZSBvd25lciBhcyBpdHMgcGFyZW50IC0gd2hhdGV2ZXIgdGhhdCBtZWFuc1xuJiM0MzsgKiBmb3IgdGhlIGZpbGVzeXN0ZW0uICBJbiB0aGUgY2FzZSBvZiBBRlMsIHRoaXMgbWVhbnMgY29tcGFyaW5nIHRoZWlyIEFGU1xuJiM0MzsgKiBVSURzLiAgUmV0dXJucyAwIGlmIHNhbWUsIDEgaWYgbm90IHNhbWU7IGNhbiBhbHNvIHJldHVybiBhbiBlcnJvci5cbiYjNDM7ICovXG4mIzQzO2ludCBhZnNfaGF2ZV9zYW1lX293bmVyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlMSxcbiYjNDM7XHRcdFx0c3RydWN0IGlub2RlICppbm9kZTIpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgYWZzX3Zub2RlICp2bm9kZTEgPSBBRlNfRlNfSShpbm9kZTEpO1xuJiM0MztcdGNvbnN0IHN0cnVjdCBhZnNfdm5vZGUgKnZub2RlMiA9IEFGU19GU19JKGlub2RlMik7XG4mIzQzO1xuJiM0MztcdHJldHVybiB2bm9kZTEtXHUwMDNlc3RhdHVzLm93bmVyICE9IHZub2RlMi1cdTAwM2VzdGF0dXMub3duZXI7XG4mIzQzO31cbiYjNDM7XG4gdm9pZCBfX2V4aXQgYWZzX2NsZWFuX3VwX3Blcm1pdF9jYWNoZSh2b2lkKVxuIHtcbiBcdGludCBpO1xuZGlmZiAtLWdpdCBhL2ZzL2F0dHIuYyBiL2ZzL2F0dHIuY1xuaW5kZXggNGY0MzdmYWJiN2YwZjUuLmI3ZThiNWQ0OWE5ZmU2IDEwMDY0NFxuLS0tIGEvZnMvYXR0ci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9hdHRyLmNcbkBAIC0xNiw2ICYjNDM7MTYsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZjbnRsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9maWxlbG9jay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2VjdXJpdHkuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcJiMzNDtpbnRlcm5hbC5oXCYjMzQ7XG4gXG4gLyoqXG4gICogc2V0YXR0cl9zaG91bGRfZHJvcF9zZ2lkIC0gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIHNldGdpZCBiaXQgbmVlZHMgdG8gYmVcbkBAIC05MSwxOSAmIzQzOzkyLDIxIEBAIEVYUE9SVF9TWU1CT0woc2V0YXR0cl9zaG91bGRfZHJvcF9zdWlkZ2lkKTtcbiAgKiBwZXJtaXNzaW9ucy4gT24gbm9uLWlkbWFwcGVkIG1vdW50cyBvciBpZiBwZXJtaXNzaW9uIGNoZWNraW5nIGlzIHRvIGJlXG4gICogcGVyZm9ybWVkIG9uIHRoZSByYXcgaW5vZGUgc2ltcGx5IHBhc3MgQG5vcF9tbnRfaWRtYXAuXG4gICovXG4tc3RhdGljIGJvb2wgY2hvd25fb2soc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4tXHRcdCAgICAgY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSwgdmZzdWlkX3QgaWFfdmZzdWlkKVxuJiM0MztzdGF0aWMgaW50IGNob3duX29rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuJiM0MztcdFx0ICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsIHZmc3VpZF90IGlhX3Zmc3VpZClcbiB7XG4gXHR2ZnN1aWRfdCB2ZnN1aWQgPSBpX3VpZF9pbnRvX3Zmc3VpZChpZG1hcCwgaW5vZGUpO1xuLVx0aWYgKHZmc3VpZF9lcV9rdWlkKHZmc3VpZCwgY3VycmVudF9mc3VpZCgpKSBcdTAwMjZcdTAwMjZcbi1cdCAgICB2ZnN1aWRfZXEoaWFfdmZzdWlkLCB2ZnN1aWQpKVxuLVx0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWUoaWRtYXAsIGlub2RlKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYz0gMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4gXHRpZiAoY2FwYWJsZV93cnRfaW5vZGVfdWlkZ2lkKGlkbWFwLCBpbm9kZSwgQ0FQX0NIT1dOKSlcbi1cdFx0cmV0dXJuIHRydWU7XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiBcdGlmICghdmZzdWlkX3ZhbGlkKHZmc3VpZCkgXHUwMDI2XHUwMDI2XG4gXHQgICAgbnNfY2FwYWJsZShpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfdXNlcl9ucywgQ0FQX0NIT1dOKSlcbi1cdFx0cmV0dXJuIHRydWU7XG4tXHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHRyZXR1cm4gLUVQRVJNO1xuIH1cbiBcbiAvKipcbkBAIC0xMTgsMjMgJiM0MzsxMjEsMjcgQEAgc3RhdGljIGJvb2wgY2hvd25fb2soc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4gICogcGVybWlzc2lvbnMuIE9uIG5vbi1pZG1hcHBlZCBtb3VudHMgb3IgaWYgcGVybWlzc2lvbiBjaGVja2luZyBpcyB0byBiZVxuICAqIHBlcmZvcm1lZCBvbiB0aGUgcmF3IGlub2RlIHNpbXBseSBwYXNzIEBub3BfbW50X2lkbWFwLlxuICAqL1xuLXN0YXRpYyBib29sIGNoZ3JwX29rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuLVx0XHQgICAgIGNvbnN0IHN0cnVjdCBpbm9kZSAqaW5vZGUsIHZmc2dpZF90IGlhX3Zmc2dpZClcbiYjNDM7c3RhdGljIGludCBjaGdycF9vayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiYjNDM7XHRcdCAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLCB2ZnNnaWRfdCBpYV92ZnNnaWQpXG4ge1xuIFx0dmZzZ2lkX3QgdmZzZ2lkID0gaV9naWRfaW50b192ZnNnaWQoaWRtYXAsIGlub2RlKTtcbi1cdHZmc3VpZF90IHZmc3VpZCA9IGlfdWlkX2ludG9fdmZzdWlkKGlkbWFwLCBpbm9kZSk7XG4tXHRpZiAodmZzdWlkX2VxX2t1aWQodmZzdWlkLCBjdXJyZW50X2ZzdWlkKCkpKSB7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gdmZzX2lub2RlX2lzX293bmVkX2J5X21lKGlkbWFwLCBpbm9kZSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0aWYgKHJldCA9PSAwKSB7XG4gXHRcdGlmICh2ZnNnaWRfZXEoaWFfdmZzZ2lkLCB2ZnNnaWQpKVxuLVx0XHRcdHJldHVybiB0cnVlO1xuJiM0MztcdFx0XHRyZXR1cm4gMDtcbiBcdFx0aWYgKHZmc2dpZF9pbl9ncm91cF9wKGlhX3Zmc2dpZCkpXG4tXHRcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1x0XHRcdHJldHVybiAwO1xuIFx0fVxuIFx0aWYgKGNhcGFibGVfd3J0X2lub2RlX3VpZGdpZChpZG1hcCwgaW5vZGUsIENBUF9DSE9XTikpXG4tXHRcdHJldHVybiB0cnVlO1xuJiM0MztcdFx0cmV0dXJuIDA7XG4gXHRpZiAoIXZmc2dpZF92YWxpZCh2ZnNnaWQpIFx1MDAyNlx1MDAyNlxuIFx0ICAgIG5zX2NhcGFibGUoaW5vZGUtXHUwMDNlaV9zYi1cdTAwM2VzX3VzZXJfbnMsIENBUF9DSE9XTikpXG4tXHRcdHJldHVybiB0cnVlO1xuLVx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0cmV0dXJuIC1FUEVSTTtcbiB9XG4gXG4gLyoqXG5AQCAtMTYzLDYgJiM0MzsxNzAsNyBAQCBpbnQgc2V0YXR0cl9wcmVwYXJlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4ge1xuIFx0c3RydWN0IGlub2RlICppbm9kZSA9IGRfaW5vZGUoZGVudHJ5KTtcbiBcdHVuc2lnbmVkIGludCBpYV92YWxpZCA9IGF0dHItXHUwMDNlaWFfdmFsaWQ7XG4mIzQzO1x0aW50IHJldDtcbiBcbiBcdC8qXG4gXHQgKiBGaXJzdCBjaGVjayBzaXplIGNvbnN0cmFpbnRzLiAgVGhlc2UgY2FuJiMzOTt0IGJlIG92ZXJyaWRkZW4gdXNpbmdcbkBAIC0xODksMTQgJiM0MzsxOTcsMTggQEAgaW50IHNldGF0dHJfcHJlcGFyZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuIFx0XHRnb3RvIGtpbGxfcHJpdjtcbiBcbiBcdC8qIE1ha2Ugc3VyZSBhIGNhbGxlciBjYW4gY2hvd24uICovXG4tXHRpZiAoKGlhX3ZhbGlkIFx1MDAyNiBBVFRSX1VJRCkgXHUwMDI2XHUwMDI2XG4tXHQgICAgIWNob3duX29rKGlkbWFwLCBpbm9kZSwgYXR0ci1cdTAwM2VpYV92ZnN1aWQpKVxuLVx0XHRyZXR1cm4gLUVQRVJNO1xuJiM0MztcdGlmIChpYV92YWxpZCBcdTAwMjYgQVRUUl9VSUQpIHtcbiYjNDM7XHRcdHJldCA9IGNob3duX29rKGlkbWFwLCBpbm9kZSwgYXR0ci1cdTAwM2VpYV92ZnN1aWQpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHR9XG4gXG4gXHQvKiBNYWtlIHN1cmUgY2FsbGVyIGNhbiBjaGdycC4gKi9cbi1cdGlmICgoaWFfdmFsaWQgXHUwMDI2IEFUVFJfR0lEKSBcdTAwMjZcdTAwMjZcbi1cdCAgICAhY2hncnBfb2soaWRtYXAsIGlub2RlLCBhdHRyLVx1MDAzZWlhX3Zmc2dpZCkpXG4tXHRcdHJldHVybiAtRVBFUk07XG4mIzQzO1x0aWYgKGlhX3ZhbGlkIFx1MDAyNiBBVFRSX0dJRCkge1xuJiM0MztcdFx0cmV0ID0gY2hncnBfb2soaWRtYXAsIGlub2RlLCBhdHRyLVx1MDAzZWlhX3Zmc2dpZCk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdH1cbiBcbiBcdC8qIE1ha2Ugc3VyZSBhIGNhbGxlciBjYW4gY2htb2QuICovXG4gXHRpZiAoaWFfdmFsaWQgXHUwMDI2IEFUVFJfTU9ERSkge1xuZGlmZiAtLWdpdCBhL2ZzL2NvcmVkdW1wLmMgYi9mcy9jb3JlZHVtcC5jXG5pbmRleCBlNjhhNzZmZjkyYTM4Ni4uM2YzMmU3M2FhZWRhMjggMTAwNjQ0XG4tLS0gYS9mcy9jb3JlZHVtcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9jb3JlZHVtcC5jXG5AQCAtOTU0LDcgJiM0Mzs5NTQsNyBAQCBzdGF0aWMgYm9vbCBjb3JlZHVtcF9maWxlKHN0cnVjdCBjb3JlX25hbWUgKmNuLCBzdHJ1Y3QgY29yZWR1bXBfcGFyYW1zICpjcHJtLFxuIFx0ICogZmlsZXN5c3RlbS5cbiBcdCAqL1xuIFx0aWRtYXAgPSBmaWxlX21udF9pZG1hcChmaWxlKTtcbi1cdGlmICghdmZzdWlkX2VxX2t1aWQoaV91aWRfaW50b192ZnN1aWQoaWRtYXAsIGlub2RlKSwgY3VycmVudF9mc3VpZCgpKSkge1xuJiM0MztcdGlmICh2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWUoaWRtYXAsIGlub2RlKSAhPSAwKSB7XG4gXHRcdGNvcmVkdW1wX3JlcG9ydF9mYWlsdXJlKFwmIzM0O0NvcmUgZHVtcCB0byAlcyBhYm9ydGVkOiBjYW5ub3QgcHJlc2VydmUgZmlsZSBvd25lclwmIzM0OywgY24tXHUwMDNlY29yZW5hbWUpO1xuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvZnMvaW5vZGUuYyBiL2ZzL2lub2RlLmNcbmluZGV4IDMxYzViOWVlM2E4MWRmLi5hN2VjODMwYWI2ODNmMCAxMDA2NDRcbi0tLSBhL2ZzL2lub2RlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2lub2RlLmNcbkBAIC0yNzUwLDE2ICYjNDM7Mjc1MCwxOSBAQCBFWFBPUlRfU1lNQk9MKGlub2RlX2luaXRfb3duZXIpO1xuICAqIE9uIG5vbi1pZG1hcHBlZCBtb3VudHMgb3IgaWYgcGVybWlzc2lvbiBjaGVja2luZyBpcyB0byBiZSBwZXJmb3JtZWQgb24gdGhlXG4gICogcmF3IGlub2RlIHNpbXBseSBwYXNzIEBub3BfbW50X2lkbWFwLlxuICAqL1xuLWJvb2wgaW5vZGVfb3duZXJfb3JfY2FwYWJsZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbi1cdFx0XHQgICAgY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSlcbiYjNDM7Ym9vbCBpbm9kZV9vd25lcl9vcl9jYXBhYmxlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIHtcbiBcdHZmc3VpZF90IHZmc3VpZDtcbiBcdHN0cnVjdCB1c2VyX25hbWVzcGFjZSAqbnM7XG4mIzQzO1x0aW50IHJldDtcbiBcbi1cdHZmc3VpZCA9IGlfdWlkX2ludG9fdmZzdWlkKGlkbWFwLCBpbm9kZSk7XG4tXHRpZiAodmZzdWlkX2VxX2t1aWQodmZzdWlkLCBjdXJyZW50X2ZzdWlkKCkpKVxuJiM0MztcdHJldCA9IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShpZG1hcCwgaW5vZGUpO1xuJiM0MztcdGlmIChyZXQgPT0gMClcbiBcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiBcbiYjNDM7XHR2ZnN1aWQgPSBpX3VpZF9pbnRvX3Zmc3VpZChpZG1hcCwgaW5vZGUpO1xuIFx0bnMgPSBjdXJyZW50X3VzZXJfbnMoKTtcbiBcdGlmICh2ZnN1aWRfaGFzX21hcHBpbmcobnMsIHZmc3VpZCkgXHUwMDI2XHUwMDI2IG5zX2NhcGFibGUobnMsIENBUF9GT1dORVIpKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbmRpZmYgLS1naXQgYS9mcy9pbnRlcm5hbC5oIGIvZnMvaW50ZXJuYWwuaFxuaW5kZXggMzU1ZDkzZjkyMjA4NjEuLmJlNDVjYzYzODg2MTkyIDEwMDY0NFxuLS0tIGEvZnMvaW50ZXJuYWwuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZnMvaW50ZXJuYWwuaFxuQEAgLTUxLDYgJiM0Mzs1MSw3IEBAIGV4dGVybiBpbnQgZmluaXNoX2NsZWFuX2NvbnRleHQoc3RydWN0IGZzX2NvbnRleHQgKmZjKTtcbiAvKlxuICAqIG5hbWVpLmNcbiAgKi9cbiYjNDM7aW50IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSk7XG4gZXh0ZXJuIGludCBmaWxlbmFtZV9sb29rdXAoaW50IGRmZCwgc3RydWN0IGZpbGVuYW1lICpuYW1lLCB1bnNpZ25lZCBmbGFncyxcbiBcdFx0XHQgICBzdHJ1Y3QgcGF0aCAqcGF0aCwgY29uc3Qgc3RydWN0IHBhdGggKnJvb3QpO1xuIGludCBmaWxlbmFtZV9ybWRpcihpbnQgZGZkLCBzdHJ1Y3QgZmlsZW5hbWUgKm5hbWUpO1xuZGlmZiAtLWdpdCBhL2ZzL2xvY2tzLmMgYi9mcy9sb2Nrcy5jXG5pbmRleCA2ZTRmZjdmY2VjMDUzZS4uMDJmODEwZGM5ZTdlN2EgMTAwNjQ0XG4tLS0gYS9mcy9sb2Nrcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9sb2Nrcy5jXG5AQCAtNjgsNiAmIzQzOzY4LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2N0cmFjZS9ldmVudHMvZmlsZWxvY2suaFx1MDAzZVxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3VhY2Nlc3MuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcJiMzNDtpbnRlcm5hbC5oXCYjMzQ7XG4gXG4gc3RhdGljIHN0cnVjdCBmaWxlX2xvY2sgKmZpbGVfbG9jayhzdHJ1Y3QgZmlsZV9sb2NrX2NvcmUgKmZsYylcbiB7XG5AQCAtMjEzNiwxMCAmIzQzOzIxMzcsMTIgQEAgaW50XG4gdmZzX3NldGxlYXNlKHN0cnVjdCBmaWxlICpmaWxwLCBpbnQgYXJnLCBzdHJ1Y3QgZmlsZV9sZWFzZSAqKmxlYXNlLCB2b2lkICoqcHJpdilcbiB7XG4gXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZV9pbm9kZShmaWxwKTtcbi1cdHZmc3VpZF90IHZmc3VpZCA9IGlfdWlkX2ludG9fdmZzdWlkKGZpbGVfbW50X2lkbWFwKGZpbHApLCBpbm9kZSk7XG4gXHRpbnQgZXJyb3I7XG4gXG4tXHRpZiAoKCF2ZnN1aWRfZXFfa3VpZCh2ZnN1aWQsIGN1cnJlbnRfZnN1aWQoKSkpIFx1MDAyNlx1MDAyNiAhY2FwYWJsZShDQVBfTEVBU0UpKVxuJiM0MztcdGVycm9yID0gdmZzX2lub2RlX2lzX293bmVkX2J5X21lKGZpbGVfbW50X2lkbWFwKGZpbHApLCBpbm9kZSk7XG4mIzQzO1x0aWYgKGVycm9yIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIGVycm9yO1xuJiM0MztcdGlmIChlcnJvciAhPSAwIFx1MDAyNlx1MDAyNiAhY2FwYWJsZShDQVBfTEVBU0UpKVxuIFx0XHRyZXR1cm4gLUVBQ0NFUztcbiBcdGVycm9yID0gc2VjdXJpdHlfZmlsZV9sb2NrKGZpbHAsIGFyZyk7XG4gXHRpZiAoZXJyb3IpXG5kaWZmIC0tZ2l0IGEvZnMvbmFtZWkuYyBiL2ZzL25hbWVpLmNcbmluZGV4IDE5Y2U0M2M5YTZlNjYyLi43MmY5NGQyMDRmOTNmNCAxMDA2NDRcbi0tLSBhL2ZzL25hbWVpLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL25hbWVpLmNcbkBAIC01NSw4ICYjNDM7NTUsOCBAQFxuICAqIFRoZSBuZXcgY29kZSByZXBsYWNlcyB0aGUgb2xkIHJlY3Vyc2l2ZSBzeW1saW5rIHJlc29sdXRpb24gd2l0aFxuICAqIGFuIGl0ZXJhdGl2ZSBvbmUgKGluIGNhc2Ugb2Ygbm9uLW5lc3RlZCBzeW1saW5rIGNoYWlucykuICBJdCBkb2VzXG4gICogdGhpcyB3aXRoIGNhbGxzIHRvIFx1MDAzY2ZzXHUwMDNlX2ZvbGxvd19saW5rKCkuXG4tICogQXMgYSBzaWRlIGVmZmVjdCwgZGlyX25hbWVpKCksIF9uYW1laSgpIGFuZCBmb2xsb3dfbGluaygpIGFyZSBub3cgXG4tICogcmVwbGFjZWQgd2l0aCBhIHNpbmdsZSBmdW5jdGlvbiBsb29rdXBfZGVudHJ5KCkgdGhhdCBjYW4gaGFuZGxlIGFsbCBcbiYjNDM7ICogQXMgYSBzaWRlIGVmZmVjdCwgZGlyX25hbWVpKCksIF9uYW1laSgpIGFuZCBmb2xsb3dfbGluaygpIGFyZSBub3dcbiYjNDM7ICogcmVwbGFjZWQgd2l0aCBhIHNpbmdsZSBmdW5jdGlvbiBsb29rdXBfZGVudHJ5KCkgdGhhdCBjYW4gaGFuZGxlIGFsbFxuICAqIHRoZSBzcGVjaWFsIGNhc2VzIG9mIHRoZSBmb3JtZXIgY29kZS5cbiAgKlxuICAqIFdpdGggdGhlIG5ldyBkY2FjaGUsIHRoZSBwYXRobmFtZSBpcyBzdG9yZWQgYXQgZWFjaCBpbm9kZSwgYXQgbGVhc3QgYXNcbkBAIC0xMjU1LDYgJiM0MzsxMjU1LDcyIEBAIGZzX2luaXRjYWxsKGluaXRfZnNfbmFtZWlfc3lzY3Rscyk7XG4gXG4gI2VuZGlmIC8qIENPTkZJR19TWVNDVEwgKi9cbiBcbiYjNDM7LypcbiYjNDM7ICogRGV0ZXJtaW5lIGlmIGFuIGlub2RlIGlzIG93bmVkIGJ5IHRoZSBwcm9jZXNzIChhbGxvd2luZyBmb3IgZnN1aWQgb3ZlcnJpZGUpLFxuJiM0MzsgKiByZXR1cm5pbmcgMCBpZiBzbywgMSBpZiBub3QgYW5kIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBpZiB0aGVyZSB3YXMgYSBwcm9ibGVtXG4mIzQzOyAqIG1ha2luZyB0aGUgZGV0ZXJtaW5hdGlvbi5cbiYjNDM7ICovXG4mIzQzO2ludCB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4mIzQzO3tcbiYjNDM7XHRpZiAodW5saWtlbHkoaW5vZGUtXHUwMDNlaV9vcGZsYWdzIFx1MDAyNiBJT1BfT1dORVJTSElQX09WRVJSSURFKSlcbiYjNDM7XHRcdHJldHVybiBpbm9kZS1cdTAwM2VpX29wLVx1MDAzZWlzX293bmVkX2J5X21lKGlkbWFwLCBpbm9kZSk7XG4mIzQzO1x0aWYgKHZmc3VpZF9lcV9rdWlkKGlfdWlkX2ludG9fdmZzdWlkKGlkbWFwLCBpbm9kZSksIGN1cnJlbnRfZnN1aWQoKSkpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHRyZXR1cm4gMTsgLyogTm90IHNhbWUuICovXG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIERldGVybWluZSBpZiBhbiBpbm9kZSBoYXMgdGhlIHNhbWUgb3duZXIgYXMgaXRzIHBhcmVudCBkaXJlY3RvcnksIHJldHVybmluZ1xuJiM0MzsgKiAwIGlmIHNvLCAxIGlmIG5vdCBhbmQgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIGlmIHRoZXJlIHdhcyBhIHByb2JsZW0gbWFraW5nXG4mIzQzOyAqIHRoZSBkZXRlcm1pbmF0aW9uLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB2ZnNfaW5vZGVfYW5kX2Rpcl9oYXZlX3NhbWVfb3duZXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4mIzQzO1x0XHRcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBuYW1laWRhdGEgKm5kKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKHVubGlrZWx5KGlub2RlLVx1MDAzZWlfb3BmbGFncyBcdTAwMjYgSU9QX09XTkVSU0hJUF9PVkVSUklERSkpIHtcbiYjNDM7XHRcdHN0cnVjdCBkZW50cnkgKnBhcmVudDtcbiYjNDM7XHRcdHN0cnVjdCBpbm9kZSAqZGlyO1xuJiM0MztcdFx0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoaW5vZGUgIT0gbmQtXHUwMDNlaW5vZGUpIHtcbiYjNDM7XHRcdFx0ZGlyID0gbmQtXHUwMDNlaW5vZGU7XG4mIzQzO1x0XHRcdHJldCA9IGlub2RlLVx1MDAzZWlfb3AtXHUwMDNlaGF2ZV9zYW1lX293bmVyKGlkbWFwLCBpbm9kZSwgZGlyKTtcbiYjNDM7XHRcdH0gZWxzZSBpZiAobmQtXHUwMDNlZmxhZ3MgXHUwMDI2IExPT0tVUF9SQ1UpIHtcbiYjNDM7XHRcdFx0cGFyZW50ID0gUkVBRF9PTkNFKG5kLVx1MDAzZXBhdGguZGVudHJ5KTtcbiYjNDM7XHRcdFx0ZGlyID0gUkVBRF9PTkNFKHBhcmVudC1cdTAwM2VkX2lub2RlKTtcbiYjNDM7XHRcdFx0aWYgKCFkaXIpXG4mIzQzO1x0XHRcdFx0cmV0dXJuIC1FQ0hJTEQ7XG4mIzQzO1x0XHRcdHJldCA9IGlub2RlLVx1MDAzZWlfb3AtXHUwMDNlaGF2ZV9zYW1lX293bmVyKGlkbWFwLCBpbm9kZSwgZGlyKTtcbiYjNDM7XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdHBhcmVudCA9IGRnZXRfcGFyZW50KG5kLVx1MDAzZXBhdGguZGVudHJ5KTtcbiYjNDM7XHRcdFx0ZGlyID0gcGFyZW50LVx1MDAzZWRfaW5vZGU7XG4mIzQzO1x0XHRcdHJldCA9IGlub2RlLVx1MDAzZWlfb3AtXHUwMDNlaGF2ZV9zYW1lX293bmVyKGlkbWFwLCBpbm9kZSwgZGlyKTtcbiYjNDM7XHRcdFx0ZHB1dChwYXJlbnQpO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICh2ZnN1aWRfdmFsaWQobmQtXHUwMDNlZGlyX3Zmc3VpZCkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIHZmc3VpZF9lcShpX3VpZF9pbnRvX3Zmc3VpZChpZG1hcCwgaW5vZGUpLCBuZC1cdTAwM2VkaXJfdmZzdWlkKSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdHJldHVybiAxOyAvKiBOb3Qgc2FtZS4gKi9cbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogRGV0ZXJtaW5lIGlmIHR3byBpbm9kZXMgaGF2ZSB0aGUgc2FtZSBvd25lciwgcmV0dXJuaW5nIDAgaWYgc28sIDEgaWYgbm90IGFuZFxuJiM0MzsgKiBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgaWYgdGhlcmUgd2FzIGEgcHJvYmxlbSBtYWtpbmcgdGhlIGRldGVybWluYXRpb24uXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHZmc19pbm9kZXNfaGF2ZV9zYW1lX293bmVyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuJiM0MztcdFx0XHRcdCAgICAgIHN0cnVjdCBpbm9kZSAqZGlyKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKHVubGlrZWx5KGlub2RlLVx1MDAzZWlfb3BmbGFncyBcdTAwMjYgSU9QX09XTkVSU0hJUF9PVkVSUklERSkpXG4mIzQzO1x0XHRyZXR1cm4gaW5vZGUtXHUwMDNlaV9vcC1cdTAwM2VoYXZlX3NhbWVfb3duZXIoaWRtYXAsIGlub2RlLCBkaXIpO1xuJiM0MztcdGlmICh2ZnN1aWRfZXEoaV91aWRfaW50b192ZnN1aWQoaWRtYXAsIGlub2RlKSxcbiYjNDM7XHRcdCAgICAgIGlfdWlkX2ludG9fdmZzdWlkKGlkbWFwLCBkaXIpKSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdHJldHVybiAxOyAvKiBOb3Qgc2FtZS4gKi9cbiYjNDM7fVxuJiM0MztcbiAvKipcbiAgKiBtYXlfZm9sbG93X2xpbmsgLSBDaGVjayBzeW1saW5rIGZvbGxvd2luZyBmb3IgdW5zYWZlIHNpdHVhdGlvbnNcbiAgKiBAbmQ6IG5hbWVpZGF0YSBwYXRod2FsayBkYXRhXG5AQCAtMTI3MSwyNyAmIzQzOzEzMzcsMjggQEAgZnNfaW5pdGNhbGwoaW5pdF9mc19uYW1laV9zeXNjdGxzKTtcbiAgKlxuICAqIFJldHVybnMgMCBpZiBmb2xsb3dpbmcgdGhlIHN5bWxpbmsgaXMgYWxsb3dlZCwgLXZlIG9uIGVycm9yLlxuICAqL1xuLXN0YXRpYyBpbmxpbmUgaW50IG1heV9mb2xsb3dfbGluayhzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSlcbiYjNDM7c3RhdGljIGlubGluZSBpbnQgbWF5X2ZvbGxvd19saW5rKHN0cnVjdCBuYW1laWRhdGEgKm5kLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIHtcbiBcdHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwO1xuLVx0dmZzdWlkX3QgdmZzdWlkO1xuJiM0MztcdGludCByZXQ7XG4gXG4gXHRpZiAoIXN5c2N0bF9wcm90ZWN0ZWRfc3ltbGlua3MpXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0aWRtYXAgPSBtbnRfaWRtYXAobmQtXHUwMDNlcGF0aC5tbnQpO1xuLVx0dmZzdWlkID0gaV91aWRfaW50b192ZnN1aWQoaWRtYXAsIGlub2RlKTtcbi1cdC8qIEFsbG93ZWQgaWYgb3duZXIgYW5kIGZvbGxvd2VyIG1hdGNoLiAqL1xuLVx0aWYgKHZmc3VpZF9lcV9rdWlkKHZmc3VpZCwgY3VycmVudF9mc3VpZCgpKSlcbi1cdFx0cmV0dXJuIDA7XG4tXG4gXHQvKiBBbGxvd2VkIGlmIHBhcmVudCBkaXJlY3Rvcnkgbm90IHN0aWNreSBhbmQgd29ybGQtd3JpdGFibGUuICovXG4gXHRpZiAoKG5kLVx1MDAzZWRpcl9tb2RlIFx1MDAyNiAoU19JU1ZUWHxTX0lXT1RIKSkgIT0gKFNfSVNWVFh8U19JV09USCkpXG4gXHRcdHJldHVybiAwO1xuIFxuJiM0MztcdGlkbWFwID0gbW50X2lkbWFwKG5kLVx1MDAzZXBhdGgubW50KTtcbiYjNDM7XHQvKiBBbGxvd2VkIGlmIG93bmVyIGFuZCBmb2xsb3dlciBtYXRjaC4gKi9cbiYjNDM7XHRyZXQgPSB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWUoaWRtYXAsIGlub2RlKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYz0gMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuIFx0LyogQWxsb3dlZCBpZiBwYXJlbnQgZGlyZWN0b3J5IGFuZCBsaW5rIG93bmVyIG1hdGNoLiAqL1xuLVx0aWYgKHZmc3VpZF92YWxpZChuZC1cdTAwM2VkaXJfdmZzdWlkKSBcdTAwMjZcdTAwMjYgdmZzdWlkX2VxKG5kLVx1MDAzZWRpcl92ZnN1aWQsIHZmc3VpZCkpXG4tXHRcdHJldHVybiAwO1xuJiM0MztcdHJldCA9IHZmc19pbm9kZV9hbmRfZGlyX2hhdmVfc2FtZV9vd25lcihpZG1hcCwgaW5vZGUsIG5kKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYz0gMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4gXG4gXHRpZiAobmQtXHUwMDNlZmxhZ3MgXHUwMDI2IExPT0tVUF9SQ1UpXG4gXHRcdHJldHVybiAtRUNISUxEO1xuQEAgLTEzODksMTIgJiM0MzsxNDU2LDEyIEBAIGludCBtYXlfbGlua2F0KHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBjb25zdCBzdHJ1Y3QgcGF0aCAqbGluaylcbiAgKiBAaW5vZGU6IHRoZSBpbm9kZSBvZiB0aGUgZmlsZSB0byBvcGVuXG4gICpcbiAgKiBCbG9jayBhbiBPX0NSRUFUIG9wZW4gb2YgYSBGSUZPIChvciBhIHJlZ3VsYXIgZmlsZSkgd2hlbjpcbi0gKiAgIC0gc3lzY3RsX3Byb3RlY3RlZF9maWZvcyAob3Igc3lzY3RsX3Byb3RlY3RlZF9yZWd1bGFyKSBpcyBlbmFibGVkXG4tICogICAtIHRoZSBmaWxlIGFscmVhZHkgZXhpc3RzXG4tICogICAtIHdlIGFyZSBpbiBhIHN0aWNreSBkaXJlY3Rvcnlcbi0gKiAgIC0gd2UgZG9uJiMzOTt0IG93biB0aGUgZmlsZVxuJiM0MzsgKiAgIC0gc3lzY3RsX3Byb3RlY3RlZF9maWZvcyAob3Igc3lzY3RsX3Byb3RlY3RlZF9yZWd1bGFyKSBpcyBlbmFibGVkLFxuJiM0MzsgKiAgIC0gdGhlIGZpbGUgYWxyZWFkeSBleGlzdHMsXG4mIzQzOyAqICAgLSB3ZSBhcmUgaW4gYSBzdGlja3kgZGlyZWN0b3J5LFxuJiM0MzsgKiAgIC0gdGhlIGRpcmVjdG9yeSBpcyB3b3JsZCB3cml0YWJsZSxcbiYjNDM7ICogICAtIHdlIGRvbiYjMzk7dCBvd24gdGhlIGZpbGUgYW5kXG4gICogICAtIHRoZSBvd25lciBvZiB0aGUgZGlyZWN0b3J5IGRvZXNuJiMzOTt0IG93biB0aGUgZmlsZVxuLSAqICAgLSB0aGUgZGlyZWN0b3J5IGlzIHdvcmxkIHdyaXRhYmxlXG4gICogSWYgdGhlIHN5c2N0bF9wcm90ZWN0ZWRfZmlmb3MgKG9yIHN5c2N0bF9wcm90ZWN0ZWRfcmVndWxhcikgaXMgc2V0IHRvIDJcbiAgKiB0aGUgZGlyZWN0b3J5IGRvZXNuJiMzOTt0IGhhdmUgdG8gYmUgd29ybGQgd3JpdGFibGU6IGJlaW5nIGdyb3VwIHdyaXRhYmxlIHdpbGxcbiAgKiBiZSBlbm91Z2guXG5AQCAtMTQwNSwxMyAmIzQzOzE0NzIsNDUgQEAgaW50IG1heV9saW5rYXQoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIGNvbnN0IHN0cnVjdCBwYXRoICpsaW5rKVxuICAqIE9uIG5vbi1pZG1hcHBlZCBtb3VudHMgb3IgaWYgcGVybWlzc2lvbiBjaGVja2luZyBpcyB0byBiZSBwZXJmb3JtZWQgb24gdGhlXG4gICogcmF3IGlub2RlIHNpbXBseSBwYXNzIEBub3BfbW50X2lkbWFwLlxuICAqXG4mIzQzOyAqIEZvciBhIGZpbGVzeXN0ZW0gKGUuZy4gYSBuZXR3b3JrIGZpbGVzeXN0ZW0pIHRoYXQgaGFzIGEgc2VwYXJhdGUgSUQgc3BhY2VcbiYjNDM7ICogYW5kIGhhcyBmb3JlaWduIElEcyAobWF5YmUgZXZlbiBub24taW50ZWdlciBJRHMpLCBpX3VpZCBjYW5ub3QgYmUgY29tcGFyZWRcbiYjNDM7ICogdG8gY3VycmVudF9mc3VpZCgpIGFuZCBtYXkgbm90IGJlIGRpcmVjdGx5IGNvbXBhcmFibGUgdG8gYW5vdGhlciBpX3VpZC5cbiYjNDM7ICogSW5zdGVhZCwgdGhlIGZpbGVzeXN0ZW0gaXMgYXNrZWQgdG8gcGVyZm9ybSB0aGUgY29tcGFyaXNvbnMuICBXaXRoIG5ldHdvcmtcbiYjNDM7ICogZmlsZXN5c3RlbXMsIHRoZXJlIGFsc28gZXhpc3RzIHRoZSBwb3NzaWJpbGl0eSBvZiBkb2luZyBhbm9ueW1vdXNcbiYjNDM7ICogb3BlcmF0aW9ucyBhbmQgaGF2aW5nIGFub255bW91c2x5LW93bmVkIG9iamVjdHMuXG4mIzQzOyAqXG4mIzQzOyAqIFdlIGhhdmUgdGhlIGZvbGxvd2luZyBzY2VuYXJpb3M6XG4mIzQzOyAqXG4mIzQzOyAqXHRVU0VSXHRESVJcdEZJTEVcdEZJTEVcdEFMTE9XRURcbiYjNDM7ICpcdFx0T1dORVJcdE9XTkVSXHRTVEFURVxuJiM0MzsgKlx0PT09PT09PVx0PT09PT09PVx0PT09PT09PVx0PT09PT09PVx0PT09PT09PVxuJiM0MzsgKlx0QVx0QVx0LVx0TmV3XHRZZXNcbiYjNDM7ICpcdEFcdEFcdEFcdEV4aXN0c1x0WWVzXG4mIzQzOyAqXHRBXHRBXHRDXHRFeGlzdHNcdE5vXG4mIzQzOyAqXHRBXHRCXHQtXHROZXdcdFllc1xuJiM0MzsgKlx0QVx0Qlx0QVx0RXhpc3RzXHRZZXMsIEZPPT1VXG4mIzQzOyAqXHRBXHRCXHRCXHRFeGlzdHNcdFllcywgRk89PURPXG4mIzQzOyAqXHRBXHRCXHRDXHRFeGlzdHNcdE5vXG4mIzQzOyAqXHRBXHRhbm9uWzFdXHQtXHROZXdcdFllc1xuJiM0MzsgKlx0QVx0YW5vblsxXVx0QVx0RXhpc3RzXHRZZXNcbiYjNDM7ICpcdEFcdGFub25bMV1cdENcdEV4aXN0c1x0Tm9cbiYjNDM7ICpcdGFub25cdEFcdC1cdE5ld1x0WWVzXG4mIzQzOyAqXHRhbm9uXHRBXHRBXHRFeGlzdHNcdFllcywgRk89PURPXG4mIzQzOyAqXHRhbm9uXHRhbm9uWzFdXHQtXHROZXdcdFllc1xuJiM0MzsgKlx0YW5vblx0YW5vblsxXVx0LVx0RXhpc3RzXHROb1xuJiM0MzsgKlx0YW5vblx0QVx0QVx0RXhpc3RzXHRZZXMsIEZPPT1ET1xuJiM0MzsgKlx0YW5vblx0QVx0Q1x0RXhpc3RzXHROb1xuJiM0MzsgKlx0YW5vblx0QVx0YW5vblx0RXhpc3RzXHROb1xuJiM0MzsgKlxuJiM0MzsgKiBbMV0gQ2FuIGFub255bW91c2x5LW93bmVkIGRpcnMgYmUgc3RpY2t5P1xuJiM0MzsgKlxuICAqIFJldHVybnMgMCBpZiB0aGUgb3BlbiBpcyBhbGxvd2VkLCAtdmUgb24gZXJyb3IuXG4gICovXG4gc3RhdGljIGludCBtYXlfY3JlYXRlX2luX3N0aWNreShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IG5hbWVpZGF0YSAqbmQsXG4tXHRcdFx0XHRzdHJ1Y3QgaW5vZGUgKmNvbnN0IGlub2RlKVxuJiM0MztcdFx0XHRcdHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4ge1xuIFx0dW1vZGVfdCBkaXJfbW9kZSA9IG5kLVx1MDAzZWRpcl9tb2RlO1xuLVx0dmZzdWlkX3QgZGlyX3Zmc3VpZCA9IG5kLVx1MDAzZWRpcl92ZnN1aWQsIGlfdmZzdWlkO1xuJiM0MztcdGludCByZXQ7XG4gXG4gXHRpZiAobGlrZWx5KCEoZGlyX21vZGUgXHUwMDI2IFNfSVNWVFgpKSlcbiBcdFx0cmV0dXJuIDA7XG5AQCAtMTQyMiwxMyAmIzQzOzE1MjEsMTMgQEAgc3RhdGljIGludCBtYXlfY3JlYXRlX2luX3N0aWNreShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IG5hbWVpZGF0YSAqbmQsXG4gXHRpZiAoU19JU0ZJRk8oaW5vZGUtXHUwMDNlaV9tb2RlKSBcdTAwMjZcdTAwMjYgIXN5c2N0bF9wcm90ZWN0ZWRfZmlmb3MpXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0aV92ZnN1aWQgPSBpX3VpZF9pbnRvX3Zmc3VpZChpZG1hcCwgaW5vZGUpO1xuLVxuLVx0aWYgKHZmc3VpZF9lcShpX3Zmc3VpZCwgZGlyX3Zmc3VpZCkpXG4tXHRcdHJldHVybiAwO1xuJiM0MztcdHJldCA9IHZmc19pbm9kZV9hbmRfZGlyX2hhdmVfc2FtZV9vd25lcihpZG1hcCwgaW5vZGUsIG5kKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYz0gMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4gXG4tXHRpZiAodmZzdWlkX2VxX2t1aWQoaV92ZnN1aWQsIGN1cnJlbnRfZnN1aWQoKSkpXG4tXHRcdHJldHVybiAwO1xuJiM0MztcdHJldCA9IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShpZG1hcCwgaW5vZGUpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjPSAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiBcbiBcdGlmIChsaWtlbHkoZGlyX21vZGUgXHUwMDI2IDAwMDIpKSB7XG4gXHRcdGF1ZGl0X2xvZ19wYXRoX2RlbmllZChBVURJVF9BTk9NX0NSRUFULCBcJiMzNDtzdGlja3lfY3JlYXRlXCYjMzQ7KTtcbkBAIC0zNjQ1LDEyICYjNDM7Mzc0NCwxNCBAQCBFWFBPUlRfU1lNQk9MKHVzZXJfcGF0aF9hdCk7XG4gaW50IF9fY2hlY2tfc3RpY2t5KHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdFx0ICAgc3RydWN0IGlub2RlICppbm9kZSlcbiB7XG4tXHRrdWlkX3QgZnN1aWQgPSBjdXJyZW50X2ZzdWlkKCk7XG4mIzQzO1x0aW50IHJldDtcbiBcbi1cdGlmICh2ZnN1aWRfZXFfa3VpZChpX3VpZF9pbnRvX3Zmc3VpZChpZG1hcCwgaW5vZGUpLCBmc3VpZCkpXG4tXHRcdHJldHVybiAwO1xuLVx0aWYgKHZmc3VpZF9lcV9rdWlkKGlfdWlkX2ludG9fdmZzdWlkKGlkbWFwLCBkaXIpLCBmc3VpZCkpXG4tXHRcdHJldHVybiAwO1xuJiM0MztcdHJldCA9IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShpZG1hcCwgaW5vZGUpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjPSAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRyZXQgPSB2ZnNfaW5vZGVzX2hhdmVfc2FtZV9vd25lcihpZG1hcCwgaW5vZGUsIGRpcik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2M9IDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuIFx0cmV0dXJuICFjYXBhYmxlX3dydF9pbm9kZV91aWRnaWQoaWRtYXAsIGlub2RlLCBDQVBfRk9XTkVSKTtcbiB9XG4gRVhQT1JUX1NZTUJPTChfX2NoZWNrX3N0aWNreSk7XG5kaWZmIC0tZ2l0IGEvZnMvcmVtYXBfcmFuZ2UuYyBiL2ZzL3JlbWFwX3JhbmdlLmNcbmluZGV4IDI2YWZiYmJmYjEwYzJlLi45ZWVlOTNjMjcwMDEyNSAxMDA2NDRcbi0tLSBhL2ZzL3JlbWFwX3JhbmdlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3JlbWFwX3JhbmdlLmNcbkBAIC00MTMsMjAgJiM0Mzs0MTMsMjIgQEAgbG9mZl90IHZmc19jbG9uZV9maWxlX3JhbmdlKHN0cnVjdCBmaWxlICpmaWxlX2luLCBsb2ZmX3QgcG9zX2luLFxuIEVYUE9SVF9TWU1CT0wodmZzX2Nsb25lX2ZpbGVfcmFuZ2UpO1xuIFxuIC8qIENoZWNrIHdoZXRoZXIgd2UgYXJlIGFsbG93ZWQgdG8gZGVkdXBlIHRoZSBkZXN0aW5hdGlvbiBmaWxlICovXG4tc3RhdGljIGJvb2wgbWF5X2RlZHVwZV9maWxlKHN0cnVjdCBmaWxlICpmaWxlKVxuJiM0MztzdGF0aWMgaW50IG1heV9kZWR1cGVfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSlcbiB7XG4gXHRzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCA9IGZpbGVfbW50X2lkbWFwKGZpbGUpO1xuIFx0c3RydWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5vZGUoZmlsZSk7XG4mIzQzO1x0aW50IHJldDtcbiBcbiBcdGlmIChjYXBhYmxlKENBUF9TWVNfQURNSU4pKVxuLVx0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XHRcdHJldHVybiAwO1xuIFx0aWYgKGZpbGUtXHUwMDNlZl9tb2RlIFx1MDAyNiBGTU9ERV9XUklURSlcbi1cdFx0cmV0dXJuIHRydWU7XG4tXHRpZiAodmZzdWlkX2VxX2t1aWQoaV91aWRfaW50b192ZnN1aWQoaWRtYXAsIGlub2RlKSwgY3VycmVudF9mc3VpZCgpKSlcbi1cdFx0cmV0dXJuIHRydWU7XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHRyZXQgPSB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWUoaWRtYXAsIGlub2RlKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYz0gMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4gXHRpZiAoIWlub2RlX3Blcm1pc3Npb24oaWRtYXAsIGlub2RlLCBNQVlfV1JJVEUpKVxuLVx0XHRyZXR1cm4gdHJ1ZTtcbi1cdHJldHVybiBmYWxzZTtcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdHJldHVybiAtRVBFUk07XG4gfVxuIFxuIGxvZmZfdCB2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2Vfb25lKHN0cnVjdCBmaWxlICpzcmNfZmlsZSwgbG9mZl90IHNyY19wb3MsXG5AQCAtNDU5LDggJiM0Mzs0NjEsOCBAQCBsb2ZmX3QgdmZzX2RlZHVwZV9maWxlX3JhbmdlX29uZShzdHJ1Y3QgZmlsZSAqc3JjX2ZpbGUsIGxvZmZfdCBzcmNfcG9zLFxuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbi1cdHJldCA9IC1FUEVSTTtcbi1cdGlmICghbWF5X2RlZHVwZV9maWxlKGRzdF9maWxlKSlcbiYjNDM7XHRyZXQgPSBtYXlfZGVkdXBlX2ZpbGUoZHN0X2ZpbGUpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdGdvdG8gb3V0X2Ryb3Bfd3JpdGU7XG4gXG4gXHRyZXQgPSAtRVhERVY7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mcy5oIGIvaW5jbHVkZS9saW51eC9mcy5oXG5pbmRleCA1MGNlNzMxYTJiNzhmMS4uODAxM2MxM2EzNTNkNjcgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2ZzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvZnMuaFxuQEAgLTYyOCw2ICYjNDM7NjI4LDcgQEAgaXNfdW5jYWNoZWRfYWNsKHN0cnVjdCBwb3NpeF9hY2wgKmFjbClcbiAjZGVmaW5lIElPUF9DQUNIRURfTElOS1x0XHQweDAwNDBcbiAjZGVmaW5lIElPUF9GQVNUUEVSTV9NQVlfRVhFQ1x0MHgwMDgwXG4gI2RlZmluZSBJT1BfRkxDVFhcdFx0MHgwMTAwXG4mIzQzOyNkZWZpbmUgSU9QX09XTkVSU0hJUF9PVkVSUklERVx0MHgwMjAwXHQvKiBVc2UgLVx1MDAzZWlzX293bmVkX2J5X21lKCkgYW5kIC1cdTAwM2VoYXZlX3NhbWVfb3duZXIoKSAqL1xuIFxuIC8qXG4gICogSW5vZGUgc3RhdGUgYml0cy4gIFByb3RlY3RlZCBieSBpbm9kZS1cdTAwM2VpX2xvY2tcbkBAIC0xNzU1LDggJiM0MzsxNzU2LDcgQEAgc3RhdGljIGlubGluZSBib29sIGZpbGVfd3JpdGVfbm90X3N0YXJ0ZWQoY29uc3Qgc3RydWN0IGZpbGUgKmZpbGUpXG4gXHRyZXR1cm4gc2Jfd3JpdGVfbm90X3N0YXJ0ZWQoZmlsZV9pbm9kZShmaWxlKS1cdTAwM2VpX3NiKTtcbiB9XG4gXG4tYm9vbCBpbm9kZV9vd25lcl9vcl9jYXBhYmxlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuLVx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbiYjNDM7Ym9vbCBpbm9kZV9vd25lcl9vcl9jYXBhYmxlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbiBcbiAvKlxuICAqIFZGUyBoZWxwZXIgZnVuY3Rpb25zLi5cbkBAIC0yMDM2LDYgJiM0MzsyMDM2LDkgQEAgc3RydWN0IGlub2RlX29wZXJhdGlvbnMge1xuIFx0XHRcdCAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBmaWxlX2thdHRyICpmYSk7XG4gXHRpbnQgKCpmaWxlYXR0cl9nZXQpKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGZpbGVfa2F0dHIgKmZhKTtcbiBcdHN0cnVjdCBvZmZzZXRfY3R4ICooKmdldF9vZmZzZXRfY3R4KShzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbiYjNDM7XHRpbnQgKCppc19vd25lZF9ieV9tZSkoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xuJiM0MztcdGludCAoKmhhdmVfc2FtZV9vd25lcikoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUxLFxuJiM0MztcdFx0XHQgICAgICAgc3RydWN0IGlub2RlICppbm9kZTIpO1xuIH0gX19fX2NhY2hlbGluZV9hbGlnbmVkO1xuIFxuIC8qIERpZCB0aGUgZHJpdmVyIHByb3ZpZGUgdmFsaWQgbW1hcCBob29rIGNvbmZpZ3VyYXRpb24/ICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDM6MzM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0FGU19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Zmc19pbm9kZV9pc19vd25lZF9ieV9tZSYjMzQ7LAogICAgJiMzNDthZnNfaXNfb3duZWRfYnlfbWUmIzM0OywKICAgICYjMzQ7YWZzX2hhdmVfc2FtZV9vd25lciYjMzQ7LAogICAgJiMzNDtpbm9kZV9vd25lcl9vcl9jYXBhYmxlJiMzNDssCiAgICAmIzM0O3Zmc19zZXRsZWFzZSYjMzQ7LAogICAgJiMzNDtfX2NoZWNrX3N0aWNreSYjMzQ7LAogICAgJiMzNDtzZXRhdHRyX3ByZXBhcmUmIzM0OywKICAgICYjMzQ7dmZzX2RlZHVwZV9maWxlX3JhbmdlX29uZSYjMzQ7LAogICAgJiMzNDthZnNfZWRpdF9kaXJfcmVtb3ZlJiMzNDssCiAgICAmIzM0O2Fmc19mc19mZXRjaF9kYXRhJiMzNDssCiAgICAmIzM0O2Fmc19kaXJfZmluZF9ibG9jayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIG5ldyBpbm9kZSBvcGVyYXRpb25zIGBpc19vd25lZF9ieV9tZWAgYW5kIGBoYXZlX3NhbWVfb3duZXJgIHRvIGFsbG93IGZpbGVzeXN0ZW1zIChsaWtlIEFGUykgdG8gb3ZlcnJpZGUgZGVmYXVsdCBWRlMgb3duZXJzaGlwIGNoZWNrcy4gSXQgbW9kaWZpZXMgY29yZSBWRlMgcGF0aHMgKGUuZy4sIGBjaG93bl9va2AsIGBjaGdycF9va2AsIGBjb3JlZHVtcF9maWxlYCwgYGlub2RlX293bmVyX29yX2NhcGFibGVgLCBgdmZzX3NldGxlYXNlYCwgYG1heV9mb2xsb3dfbGlua2AsIGBtYXlfY3JlYXRlX2luX3N0aWNreWAsIGBfX2NoZWNrX3N0aWNreWAsIGBtYXlfZGVkdXBlX2ZpbGVgKSB0byB1c2UgdGhlc2UgbmV3IG9wZXJhdGlvbnMuIEl0IGFsc28gaW1wbGVtZW50cyB0aGVzZSBvcGVyYXRpb25zIGZvciBBRlMgYW5kIGZpeGVzIHNvbWUgQUZTLXNwZWNpZmljIGJ1Z3MgaW4gZGlyZWN0b3J5IGVkaXRpbmcgYW5kIGRhdGEgZmV0Y2hpbmcuIFRoZXNlIGFyZSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gdGhlIGNvcmUgVkZTIGFuZCBBRlMsIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBvciBzZWN1cml0eSBpc3N1ZXMgYXJlIGludHJvZHVjZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3NmI5ZjYwNmVhZTJiMDllMDkwMWQyNDg4MzJlZDVjMTM2MDBmNTQwCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBKdWwgMjggMDM6MzM6MDUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Zmcy5yc3QgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Zmcy5yc3QKaW5kZXggN2M3NTMxNDhhZjg4ODMuLjg5MzQxOWUwMDNlYWY3IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Zmcy5yc3QKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy92ZnMucnN0CkBAIC00NDUsNiAmIzQzOzQ0NSw5IEBAIEFzIG9mIGtlcm5lbCAyLjYuMjIsIHRoZSBmb2xsb3dpbmcgbWVtYmVycyBhcmUgZGVmaW5lZDoKIAkJCQkgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgZmlsZV9rYXR0ciAqZmEpOwogCQlpbnQgKCpmaWxlYXR0cl9nZXQpKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGZpbGVfa2F0dHIgKmZhKTsKIAkgICAgICAgIHN0cnVjdCBvZmZzZXRfY3R4ICooKmdldF9vZmZzZXRfY3R4KShzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKJiM0MzsJCWludCAoKmlzX293bmVkX2J5X21lKShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSk7CiYjNDM7CQlpbnQgKCpoYXZlX3NhbWVfb3duZXIpKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAomIzQzOwkJCQkgICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5KTsKIAl9OwogCiBBZ2FpbiwgYWxsIG1ldGhvZHMgYXJlIGNhbGxlZCB3aXRob3V0IGFueSBsb2NrcyBiZWluZyBoZWxkLCB1bmxlc3MKQEAgLTYzNCw2ICYjNDM7NjM3LDI0IEBAIG90aGVyd2lzZSBub3RlZC4KICAgICAgICAgZmlsZXN5c3RlbSBtdXN0IGRlZmluZSB0aGlzIG9wZXJhdGlvbiB0byB1c2UKICAgICAgICAgc2ltcGxlX29mZnNldF9kaXJfb3BlcmF0aW9ucy4KIAomIzQzO2BgaXNfb3duZWRfYnlfbWVgYAomIzQzOwljYWxsZWQgdG8gZGV0ZXJtaW5lIGlmIHRoZSBmaWxlIGNhbiBiZSBjb25zaWRlcmVkIHRvIGJlICYjMzk7b3duZWQmIzM5OyBieQomIzQzOwl0aGUgb3duZXIgb2YgdGhlIHByb2Nlc3Mgb3IgaWYgdGhlIHByb2Nlc3MgaGFzIGEgdG9rZW4gdGhhdCBncmFudHMKJiM0MzsJaXQgb3duZXJzaGlwIHByaXZpbGVnZXMuICBJZiB1bnNldCwgdGhlIGRlZmF1bHQgaXMgdG8gY29tcGFyZSBpX3VpZAomIzQzOwl0byBjdXJyZW50X2ZzdWlkKCkgLSBidXQgdGhpcyBtYXkgZ2l2ZSBpbmNvcnJlY3QgcmVzdWx0cyBmb3Igc29tZQomIzQzOwluZXR3b3JrIG9yIHBsdWctaW4gYmxvY2sgZmlsZXN5c3RlbXMuICBGb3IgZXhhbXBsZSwgQUZTIGRldGVybWluZXMKJiM0MzsJb3duZXJzaGlwIGVudGlyZWx5IGFjY29yZGluZyB0byBhbiBvYnRhaW5lZCB0b2tlbiBhbmQgaV91aWQgbWF5IG5vdAomIzQzOwlldmVuIGJlIGZyb20gdGhlIHNhbWUgSUQgc3BhY2UgYXMgY3VycmVudF91aWQoKS4KJiM0MzsKJiM0MztgYGhhdmVfc2FtZV9vd25lcmBgCiYjNDM7CWNhbGxlZCB0byBkZXRlcm1pbmUgaWYgYW4gaW5vZGUgaGFzIHRoZSBzYW1lIG93bmVyIGFzIGl0cyBpbW1lZGlhdGUKJiM0MzsJcGFyZW50IG9uIHRoZSBwYXRoIHdhbGtlZC4gIElmIHVuc2V0LCB0aGUgZGVmYXVsdCBpcyB0byBzaW1wbHkKJiM0MzsJY29tcGFyZSB0aGUgaV91aWQgb2YgYm90aC4gIEZvciBleGFtcGxlLCBBRlMgY29tcGFyZXMgdGhlIG93bmVyIElEcwomIzQzOwlvZiBib3RoIC0gYnV0IHRoZXNlIGFyZSBhIDY0LWJpdCB2YWx1ZXMgb24gc29tZSB2YXJpYW50cyB0aGF0IG1pZ2h0CiYjNDM7CW5vdCBmaXQgaW50byBhIGt1aWRfdCBhbmQgY2lmcyBoYXMgR1VJRHMgdGhhdCBjYW5ub3QgYmUgY29tcGFyZWQgdG8KJiM0MzsJa3VpZF90LgomIzQzOwomIzQzOwogVGhlIEFkZHJlc3MgU3BhY2UgT2JqZWN0CiA9PT09PT09PT09PT09PT09PT09PT09PT0KIApkaWZmIC0tZ2l0IGEvZnMvYWZzL2Rpci5jIGIvZnMvYWZzL2Rpci5jCmluZGV4IDZkZjU2ZmU5MTYzZmQ3Li5lZTJmNWVjMGIyYzY3ZCAxMDA2NDQKLS0tIGEvZnMvYWZzL2Rpci5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2Fmcy9kaXIuYwpAQCAtNjksNiAmIzQzOzY5LDggQEAgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgYWZzX2Rpcl9pbm9kZV9vcGVyYXRpb25zID0gewogCS5wZXJtaXNzaW9uCT0gYWZzX3Blcm1pc3Npb24sCiAJLmdldGF0dHIJPSBhZnNfZ2V0YXR0ciwKIAkuc2V0YXR0cgk9IGFmc19zZXRhdHRyLAomIzQzOwkuaXNfb3duZWRfYnlfbWUJPSBhZnNfaXNfb3duZWRfYnlfbWUsCiYjNDM7CS5oYXZlX3NhbWVfb3duZXIgPSBhZnNfaGF2ZV9zYW1lX293bmVyLAogfTsKIAogY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBhZnNfZGlyX2FvcHMgPSB7CmRpZmYgLS1naXQgYS9mcy9hZnMvZGlyX2VkaXQuYyBiL2ZzL2Fmcy9kaXJfZWRpdC5jCmluZGV4IGZkM2FhOWY5N2NlNjRjLi5jMzEzMDMwNTk0NDRhZCAxMDA2NDQKLS0tIGEvZnMvYWZzL2Rpcl9lZGl0LmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvYWZzL2Rpcl9lZGl0LmMKQEAgLTQxNSw3ICYjNDM7NDE1LDcgQEAgdm9pZCBhZnNfZWRpdF9kaXJfcmVtb3ZlKHN0cnVjdCBhZnNfdm5vZGUgKnZub2RlLAogCWlmICghYWZzX2Rpcl9pbml0X2l0ZXIoJmFtcDtpdGVyLCBuYW1lKSkKIAkJcmV0dXJuOwogCi0JbWV0YSA9IGFmc19kaXJfZmluZF9ibG9jaygmYW1wO2l0ZXIsIDApOwomIzQzOwltZXRhID0gYWZzX2Rpcl9nZXRfYmxvY2soJmFtcDtpdGVyLCAwKTsKIAlpZiAoIW1ldGEpCiAJCXJldHVybjsKIApAQCAtNDQyLDcgJiM0Mzs0NDIsNyBAQCB2b2lkIGFmc19lZGl0X2Rpcl9yZW1vdmUoc3RydWN0IGFmc192bm9kZSAqdm5vZGUsCiAJLyogQ2hlY2sgYW5kIGNsZWFyIHRoZSBlbnRyeS4gKi8KIAlkZSA9ICZhbXA7YmxvY2stJmd0O2RpcmVudHNbc2xvdF07CiAJaWYgKGRlLSZndDt1LnZhbGlkICE9IDEpCi0JCWdvdG8gZXJyb3JfdW5tYXA7CiYjNDM7CQlnb3RvIGVycm9yOwogCiAJdHJhY2VfYWZzX2VkaXRfZGlyKHZub2RlLCB3aHksIGFmc19lZGl0X2Rpcl9kZWxldGUsIGIsIHNsb3QsCiAJCQkgICBudG9obChkZS0mZ3Q7dS52bm9kZSksIG50b2hsKGRlLSZndDt1LnVuaXF1ZSksCkBAIC00NTgsNyAmIzQzOzQ1OCw2IEBAIHZvaWQgYWZzX2VkaXRfZGlyX3JlbW92ZShzdHJ1Y3QgYWZzX3Zub2RlICp2bm9kZSwKIAkvKiBDbGVhciB0aGUgY29uc3RpdHVlbnQgZW50cmllcy4gKi8KIAluZXh0ID0gZGUtJmd0O3UuaGFzaF9uZXh0OwogCW1lbXNldChkZSwgMCwgc2l6ZW9mKCpkZSkgKiBpdGVyLm5yX3Nsb3RzKTsKLQlrdW5tYXBfbG9jYWwoYmxvY2spOwogCiAJLyogQWRqdXN0IHRoZSBoYXNoIGNoYWluOiBpZiBpdGVyLSZndDtwcmV2X2VudHJ5IGlzIDAsIHRoZSBoYXNodGFibGUgaGVhZAogCSAqIGluZGV4IGlzIHByZXZpb3VzOyBvdGhlcndpc2UgaXQmIzM5O3Mgc2xvdCBudW1iZXIgb2YgdGhlIHByZXZpb3VzIGVudHJ5LgpAQCAtNDg1LDcgJiM0Mzs0ODQsNiBAQCB2b2lkIGFmc19lZGl0X2Rpcl9yZW1vdmUoc3RydWN0IGFmc192bm9kZSAqdm5vZGUsCiAJCXBkZSA9ICZhbXA7cGJsb2NrLSZndDtkaXJlbnRzW3BzXTsKIAkJcHJldl9uZXh0ID0gcGRlLSZndDt1Lmhhc2hfbmV4dDsKIAkJaWYgKHByZXZfbmV4dCAhPSBodG9ucyhlbnRyeSkpIHsKLQkJCWt1bm1hcF9sb2NhbChwYmxvY2spOwogCQkJcHJfd2FybigmIzM0OyVsbHg6JWxseDoleDogbm90IHByZXYgaW4gY2hhaW4gYj0leCBwPSV4LCV4IGU9JXggJSpzJiMzNDssCiAJCQkJdm5vZGUtJmd0O2ZpZC52aWQsIHZub2RlLSZndDtmaWQudm5vZGUsIHZub2RlLSZndDtmaWQudW5pcXVlLAogCQkJCWl0ZXIuYnVja2V0LCBpdGVyLnByZXZfZW50cnksIHByZXZfbmV4dCwgZW50cnksCkBAIC00OTMsNyAmIzQzOzQ5MSw2IEBAIHZvaWQgYWZzX2VkaXRfZGlyX3JlbW92ZShzdHJ1Y3QgYWZzX3Zub2RlICp2bm9kZSwKIAkJCWdvdG8gZXJyb3I7CiAJCX0KIAkJcGRlLSZndDt1Lmhhc2hfbmV4dCA9IG5leHQ7Ci0JCWt1bm1hcF9sb2NhbChwYmxvY2spOwogCX0KIAogCW5ldGZzX3NpbmdsZV9tYXJrX2lub2RlX2RpcnR5KCZhbXA7dm5vZGUtJmd0O25ldGZzLmlub2RlKTsKQEAgLTUwMywxOCAmIzQzOzUwMCwxNiBAQCB2b2lkIGFmc19lZGl0X2Rpcl9yZW1vdmUoc3RydWN0IGFmc192bm9kZSAqdm5vZGUsCiAJX2RlYnVnKCYjMzQ7UmVtb3ZlICVzIGZyb20gJXVbJXVdJiMzNDssIG5hbWUtJmd0O25hbWUsIGIsIHNsb3QpOwogCiBvdXRfdW5tYXA6CiYjNDM7CWFmc19kaXJfZW5kX2l0ZXIoJmFtcDtpdGVyKTsKIAlrdW5tYXBfbG9jYWwobWV0YSk7CiAJX2xlYXZlKCYjMzQ7JiMzNDspOwogCXJldHVybjsKIAogYWxyZWFkeV9pbnZhbGlkYXRlZDoKLQlrdW5tYXBfbG9jYWwoYmxvY2spOwogCXRyYWNlX2Fmc19lZGl0X2Rpcih2bm9kZSwgd2h5LCBhZnNfZWRpdF9kaXJfZGVsZXRlX2ludmFsLAogCQkJICAgMCwgMCwgMCwgMCwgbmFtZS0mZ3Q7bmFtZSk7CiAJZ290byBvdXRfdW5tYXA7CiAKLWVycm9yX3VubWFwOgotCWt1bm1hcF9sb2NhbChibG9jayk7CiBlcnJvcjoKIAl0cmFjZV9hZnNfZWRpdF9kaXIodm5vZGUsIHdoeSwgYWZzX2VkaXRfZGlyX2RlbGV0ZV9lcnJvciwKIAkJCSAgIDAsIDAsIDAsIDAsIG5hbWUtJmd0O25hbWUpOwpkaWZmIC0tZ2l0IGEvZnMvYWZzL2Rpcl9zZWFyY2guYyBiL2ZzL2Fmcy9kaXJfc2VhcmNoLmMKaW5kZXggMTA0NDExYzA2OTJmNTcuLjExZWJkZmZmY2IxZDM4IDEwMDY0NAotLS0gYS9mcy9hZnMvZGlyX3NlYXJjaC5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2Fmcy9kaXJfc2VhcmNoLmMKQEAgLTc1LDEwICYjNDM7NzUsNyBAQCB1bmlvbiBhZnNfeGRyX2Rpcl9ibG9jayAqYWZzX2Rpcl9maW5kX2Jsb2NrKHN0cnVjdCBhZnNfZGlyX2l0ZXIgKml0ZXIsIHNpemVfdCBibAogCiAJX2VudGVyKCYjMzQ7JXp4LCVkJiMzNDssIGJsb2NrLCBzbG90KTsKIAotCWlmIChpdGVyLSZndDtibG9jaykgewotCQlrdW5tYXBfbG9jYWwoaXRlci0mZ3Q7YmxvY2spOwotCQlpdGVyLSZndDtibG9jayA9IE5VTEw7Ci0JfQomIzQzOwlhZnNfZGlyX2VuZF9pdGVyKGl0ZXIpOwogCiAJaWYgKGR2bm9kZS0mZ3Q7ZGlyZWN0b3J5X3NpemUgJmx0OyBibGVuZCkKIAkJZ290byBmYWlsOwpAQCAtMTczLDEyICYjNDM7MTcwLDggQEAgaW50IGFmc19kaXJfc2VhcmNoX2J1Y2tldChzdHJ1Y3QgYWZzX2Rpcl9pdGVyICppdGVyLCBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSwKIAogCXJldCA9IC1FTk9FTlQ7CiBmb3VuZDoKLQlpZiAoaXRlci0mZ3Q7YmxvY2spIHsKLQkJa3VubWFwX2xvY2FsKGl0ZXItJmd0O2Jsb2NrKTsKLQkJaXRlci0mZ3Q7YmxvY2sgPSBOVUxMOwotCX0KLQogYmFkOgomIzQzOwlhZnNfZGlyX2VuZF9pdGVyKGl0ZXIpOwogCWlmIChyZXQgPT0gLUVTVEFMRSkKIAkJYWZzX2ludmFsaWRhdGVfZGlyKGl0ZXItJmd0O2R2bm9kZSwgYWZzX2Rpcl9pbnZhbGlkX2l0ZXJfc3RhbGUpOwogCV9sZWF2ZSgmIzM0OyA9ICVkJiMzNDssIHJldCk7CmRpZmYgLS1naXQgYS9mcy9hZnMvZmlsZS5jIGIvZnMvYWZzL2ZpbGUuYwppbmRleCAwNDY3NzQyYmZlZWUzNC4uYmE0NDQ5M2NjYWY2ZWUgMTAwNjQ0Ci0tLSBhL2ZzL2Fmcy9maWxlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvYWZzL2ZpbGUuYwpAQCAtNDksNiAmIzQzOzQ5LDggQEAgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgYWZzX2ZpbGVfaW5vZGVfb3BlcmF0aW9ucyA9IHsKIAkuZ2V0YXR0cgk9IGFmc19nZXRhdHRyLAogCS5zZXRhdHRyCT0gYWZzX3NldGF0dHIsCiAJLnBlcm1pc3Npb24JPSBhZnNfcGVybWlzc2lvbiwKJiM0MzsJLmlzX293bmVkX2J5X21lCT0gYWZzX2lzX293bmVkX2J5X21lLAomIzQzOwkuaGF2ZV9zYW1lX293bmVyID0gYWZzX2hhdmVfc2FtZV9vd25lciwKIH07CiAKIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgYWZzX2ZpbGVfYW9wcyA9IHsKZGlmZiAtLWdpdCBhL2ZzL2Fmcy9mc2NsaWVudC5jIGIvZnMvYWZzL2ZzY2xpZW50LmMKaW5kZXggYTJmZmQ2MDg4OWY4OWQuLjFhM2YxODZhNmExMTNkIDEwMDY0NAotLS0gYS9mcy9hZnMvZnNjbGllbnQuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9hZnMvZnNjbGllbnQuYwpAQCAtNDc3LDYgJiM0Mzs0NzcsOSBAQCB2b2lkIGFmc19mc19mZXRjaF9kYXRhKHN0cnVjdCBhZnNfb3BlcmF0aW9uICpvcCkKIAlpZiAoIWNhbGwpCiAJCXJldHVybiBhZnNfb3Bfbm9tZW0ob3ApOwogCiYjNDM7CWlmIChvcC0mZ3Q7ZmxhZ3MgJmFtcDsgQUZTX09QRVJBVElPTl9BU1lOQykKJiM0MzsJCWNhbGwtJmd0O2FzeW5jID0gdHJ1ZTsKJiM0MzsKIAkvKiBtYXJzaGFsbCB0aGUgcGFyYW1ldGVycyAqLwogCWJwID0gY2FsbC0mZ3Q7cmVxdWVzdDsKIAlicFswXSA9IGh0b25sKEZTRkVUQ0hEQVRBKTsKQEAgLTQ4NCw3ICYjNDM7NDg3LDcgQEAgdm9pZCBhZnNfZnNfZmV0Y2hfZGF0YShzdHJ1Y3QgYWZzX29wZXJhdGlvbiAqb3ApCiAJYnBbMl0gPSBodG9ubCh2cC0mZ3Q7ZmlkLnZub2RlKTsKIAlicFszXSA9IGh0b25sKHZwLSZndDtmaWQudW5pcXVlKTsKIAlicFs0XSA9IGh0b25sKGxvd2VyXzMyX2JpdHMoc3VicmVxLSZndDtzdGFydCAmIzQzOyBzdWJyZXEtJmd0O3RyYW5zZmVycmVkKSk7Ci0JYnBbNV0gPSBodG9ubChsb3dlcl8zMl9iaXRzKHN1YnJlcS0mZ3Q7bGVuICAgJiM0Mzsgc3VicmVxLSZndDt0cmFuc2ZlcnJlZCkpOwomIzQzOwlicFs1XSA9IGh0b25sKGxvd2VyXzMyX2JpdHMoc3VicmVxLSZndDtsZW4gICAtIHN1YnJlcS0mZ3Q7dHJhbnNmZXJyZWQpKTsKIAogCWNhbGwtJmd0O2ZpZCA9IHZwLSZndDtmaWQ7CiAJdHJhY2VfYWZzX21ha2VfZnNfY2FsbChjYWxsLCAmYW1wO3ZwLSZndDtmaWQpOwpkaWZmIC0tZ2l0IGEvZnMvYWZzL2lub2RlLmMgYi9mcy9hZnMvaW5vZGUuYwppbmRleCAxNGYzOWE5YmVhNmNmZS4uYWY4NWE4OGQ5NDNkZDEgMTAwNjQ0Ci0tLSBhL2ZzL2Fmcy9pbm9kZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2Fmcy9pbm9kZS5jCkBAIC05MSw2ICYjNDM7OTEsNyBAQCBzdGF0aWMgaW50IGFmc19pbm9kZV9pbml0X2Zyb21fc3RhdHVzKHN0cnVjdCBhZnNfb3BlcmF0aW9uICpvcCwKIAlpbm9kZS0mZ3Q7aV9mbGFncyB8PSBTX05PQVRJTUU7CiAJaW5vZGUtJmd0O2lfdWlkID0gbWFrZV9rdWlkKCZhbXA7aW5pdF91c2VyX25zLCBzdGF0dXMtJmd0O293bmVyKTsKIAlpbm9kZS0mZ3Q7aV9naWQgPSBtYWtlX2tnaWQoJmFtcDtpbml0X3VzZXJfbnMsIHN0YXR1cy0mZ3Q7Z3JvdXApOwomIzQzOwlpbm9kZS0mZ3Q7aV9vcGZsYWdzIHw9IElPUF9PV05FUlNISVBfT1ZFUlJJREU7CiAJc2V0X25saW5rKCZhbXA7dm5vZGUtJmd0O25ldGZzLmlub2RlLCBzdGF0dXMtJmd0O25saW5rKTsKIAogCWlfc2l6ZV93cml0ZShpbm9kZSwgc3RhdHVzLSZndDtzaXplKTsKZGlmZiAtLWdpdCBhL2ZzL2Fmcy9pbnRlcm5hbC5oIGIvZnMvYWZzL2ludGVybmFsLmgKaW5kZXggNjAxZjAxZTVjMTVmY2MuLjQwZTVjZTYxOTQ3NjIxIDEwMDY0NAotLS0gYS9mcy9hZnMvaW50ZXJuYWwuaAomIzQzOyYjNDM7JiM0MzsgYi9mcy9hZnMvaW50ZXJuYWwuaApAQCAtMTEzMyw2ICYjNDM7MTEzMywxNCBAQCBpbnQgYWZzX2Rpcl9zZWFyY2hfYnVja2V0KHN0cnVjdCBhZnNfZGlyX2l0ZXIgKml0ZXIsIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lLAogaW50IGFmc19kaXJfc2VhcmNoKHN0cnVjdCBhZnNfdm5vZGUgKmR2bm9kZSwgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsCiAJCSAgIHN0cnVjdCBhZnNfZmlkICpfZmlkLCBhZnNfZGF0YXZlcnNpb25fdCAqX2Rpcl92ZXJzaW9uKTsKIAomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBhZnNfZGlyX2VuZF9pdGVyKHN0cnVjdCBhZnNfZGlyX2l0ZXIgKml0ZXIpCiYjNDM7ewomIzQzOwlpZiAoaXRlci0mZ3Q7YmxvY2spIHsKJiM0MzsJCWt1bm1hcF9sb2NhbChpdGVyLSZndDtibG9jayk7CiYjNDM7CQlpdGVyLSZndDtibG9jayA9IE5VTEw7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiAvKgogICogZGlyX3NpbGx5LmMKICAqLwpAQCAtMTQyMSw3ICYjNDM7MTQyOSw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBhZnNfbWFrZV9vcF9jYWxsKHN0cnVjdCBhZnNfb3BlcmF0aW9uICpvcCwgc3RydWN0IGFmc19jYWxsICpjCiB7CiAJc3RydWN0IGFmc19hZGRyX2xpc3QgKmFsaXN0ID0gb3AtJmd0O2VzdGF0ZS0mZ3Q7YWRkcmVzc2VzOwogCi0Jb3AtJmd0O2NhbGwJPSBjYWxsOwomIzQzOwlvcC0mZ3Q7Y2FsbAk9IGFmc19nZXRfY2FsbChjYWxsLCBhZnNfY2FsbF90cmFjZV9nZXQpOwogCW9wLSZndDt0eXBlCT0gY2FsbC0mZ3Q7dHlwZTsKIAljYWxsLSZndDtvcAk9IG9wOwogCWNhbGwtJmd0O2tleQk9IG9wLSZndDtrZXk7CkBAIC0xNDI5LDYgJiM0MzsxNDM3LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGFmc19tYWtlX29wX2NhbGwoc3RydWN0IGFmc19vcGVyYXRpb24gKm9wLCBzdHJ1Y3QgYWZzX2NhbGwgKmMKIAljYWxsLSZndDtwZWVyCT0gcnhycGNfa2VybmVsX2dldF9wZWVyKGFsaXN0LSZndDthZGRyc1tvcC0mZ3Q7YWRkcl9pbmRleF0ucGVlcik7CiAJY2FsbC0mZ3Q7c2VydmljZV9pZCA9IG9wLSZndDtzZXJ2ZXItJmd0O3NlcnZpY2VfaWQ7CiAJYWZzX21ha2VfY2FsbChjYWxsLCBnZnApOwomIzQzOwlhZnNfcHV0X2NhbGwoY2FsbCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBhZnNfZXh0cmFjdF9iZWdpbihzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwsIHZvaWQgKmJ1Ziwgc2l6ZV90IHNpemUpCkBAIC0xNTMwLDYgJiM0MzsxNTM5LDkgQEAgZXh0ZXJuIHN0cnVjdCBrZXkgKmFmc19yZXF1ZXN0X2tleShzdHJ1Y3QgYWZzX2NlbGwgKik7CiBleHRlcm4gc3RydWN0IGtleSAqYWZzX3JlcXVlc3Rfa2V5X3JjdShzdHJ1Y3QgYWZzX2NlbGwgKik7CiBleHRlcm4gaW50IGFmc19jaGVja19wZXJtaXQoc3RydWN0IGFmc192bm9kZSAqLCBzdHJ1Y3Qga2V5ICosIGFmc19hY2Nlc3NfdCAqKTsKIGV4dGVybiBpbnQgYWZzX3Blcm1pc3Npb24oc3RydWN0IG1udF9pZG1hcCAqLCBzdHJ1Y3QgaW5vZGUgKiwgaW50KTsKJiM0MztpbnQgYWZzX2lzX293bmVkX2J5X21lKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKJiM0MztpbnQgYWZzX2hhdmVfc2FtZV9vd25lcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZTEsCiYjNDM7CQkJc3RydWN0IGlub2RlICppbm9kZTIpOwogZXh0ZXJuIHZvaWQgX19leGl0IGFmc19jbGVhbl91cF9wZXJtaXRfY2FjaGUodm9pZCk7CiAKIC8qCmRpZmYgLS1naXQgYS9mcy9hZnMvc2VjdXJpdHkuYyBiL2ZzL2Fmcy9zZWN1cml0eS5jCmluZGV4IDZkMDBkNjJhNjVlZGY2Li43MDkyZjVhY2RjZDZhYyAxMDA2NDQKLS0tIGEvZnMvYWZzL3NlY3VyaXR5LmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvYWZzL3NlY3VyaXR5LmMKQEAgLTUxMCw2ICYjNDM7NTEwLDUyIEBAIGludCBhZnNfcGVybWlzc2lvbihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSwKIAlyZXR1cm4gcmV0OwogfQogCiYjNDM7LyoKJiM0MzsgKiBEZXRlcm1pbmUgaWYgYW4gaW5vZGUgaXMgb3duZWQgYnkgJiMzOTttZSYjMzk7IC0gd2hhdGV2ZXIgdGhhdCBtZWFucyBmb3IgdGhlCiYjNDM7ICogZmlsZXN5c3RlbS4gIEluIHRoZSBjYXNlIG9mIEFGUywgdGhpcyBtZWFucyB0aGF0IHRoZSBmaWxlIGlzIG93bmVkIGJ5IHRoZQomIzQzOyAqIEFGUyB1c2VyIHJlcHJlc2VudGVkIGJ5IHRoZSBSeCBTZWN1cml0eSBDbGFzcyB0b2tlbiBoZWxkIGluIGEga2V5LiAgUmV0dXJucwomIzQzOyAqIDAgaWYgb3duZWQgYnkgbWUsIDEgaWYgbm90OyBjYW4gYWxzbyByZXR1cm4gYW4gZXJyb3IuCiYjNDM7ICovCiYjNDM7aW50IGFmc19pc19vd25lZF9ieV9tZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBhZnNfdm5vZGUgKnZub2RlID0gQUZTX0ZTX0koaW5vZGUpOwomIzQzOwlhZnNfYWNjZXNzX3QgYWNjZXNzOwomIzQzOwlzdHJ1Y3Qga2V5ICprZXk7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWlmIChTX0lTRElSKGlub2RlLSZndDtpX21vZGUpKQomIzQzOwkJcmV0dXJuIDE7IC8qIFRoZSBBRE1JTiByaWdodCBjaGVjayBkb2VzbiYjMzk7dCB3b3JrIGZvciBkaXJlY3Rvcmllcy4gKi8KJiM0MzsKJiM0MzsJa2V5ID0gYWZzX3JlcXVlc3Rfa2V5KHZub2RlLSZndDt2b2x1bWUtJmd0O2NlbGwpOwomIzQzOwlpZiAoSVNfRVJSKGtleSkpCiYjNDM7CQlyZXR1cm4gUFRSX0VSUihrZXkpOwomIzQzOwomIzQzOwkvKiBHZXQgdGhlIGFjY2VzcyByaWdodHMgZm9yIHRoZSBrZXkgb24gdGhpcyBmaWxlLiAqLwomIzQzOwlyZXQgPSBhZnNfY2hlY2tfcGVybWl0KHZub2RlLCBrZXksICZhbXA7YWNjZXNzKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycm9yOwomIzQzOwomIzQzOwkvKiBXZSBnZXQgdGhlIEFETUlOSVNURVIgYml0IGlmIHdlIG93biB0aGUgZmlsZS4gKi8KJiM0MzsJcmV0ID0gKGFjY2VzcyAmYW1wOyBBRlNfQUNFX0FETUlOSVNURVIpID8gMCA6IDE7CiYjNDM7ZXJyb3I6CiYjNDM7CWtleV9wdXQoa2V5KTsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBEZXRlcm1pbmUgaWYgYSBmaWxlIGhhcyB0aGUgc2FtZSBvd25lciBhcyBpdHMgcGFyZW50IC0gd2hhdGV2ZXIgdGhhdCBtZWFucwomIzQzOyAqIGZvciB0aGUgZmlsZXN5c3RlbS4gIEluIHRoZSBjYXNlIG9mIEFGUywgdGhpcyBtZWFucyBjb21wYXJpbmcgdGhlaXIgQUZTCiYjNDM7ICogVUlEcy4gIFJldHVybnMgMCBpZiBzYW1lLCAxIGlmIG5vdCBzYW1lOyBjYW4gYWxzbyByZXR1cm4gYW4gZXJyb3IuCiYjNDM7ICovCiYjNDM7aW50IGFmc19oYXZlX3NhbWVfb3duZXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUxLAomIzQzOwkJCXN0cnVjdCBpbm9kZSAqaW5vZGUyKQomIzQzO3sKJiM0MzsJY29uc3Qgc3RydWN0IGFmc192bm9kZSAqdm5vZGUxID0gQUZTX0ZTX0koaW5vZGUxKTsKJiM0MzsJY29uc3Qgc3RydWN0IGFmc192bm9kZSAqdm5vZGUyID0gQUZTX0ZTX0koaW5vZGUyKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHZub2RlMS0mZ3Q7c3RhdHVzLm93bmVyICE9IHZub2RlMi0mZ3Q7c3RhdHVzLm93bmVyOwomIzQzO30KJiM0MzsKIHZvaWQgX19leGl0IGFmc19jbGVhbl91cF9wZXJtaXRfY2FjaGUodm9pZCkKIHsKIAlpbnQgaTsKZGlmZiAtLWdpdCBhL2ZzL2F0dHIuYyBiL2ZzL2F0dHIuYwppbmRleCA0ZjQzN2ZhYmI3ZjBmNS4uYjdlOGI1ZDQ5YTlmZTYgMTAwNjQ0Ci0tLSBhL2ZzL2F0dHIuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9hdHRyLmMKQEAgLTE2LDYgJiM0MzsxNiw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvZmNudGwuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9maWxlbG9jay5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NlY3VyaXR5LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJiMzNDtpbnRlcm5hbC5oJiMzNDsKIAogLyoqCiAgKiBzZXRhdHRyX3Nob3VsZF9kcm9wX3NnaWQgLSBkZXRlcm1pbmUgd2hldGhlciB0aGUgc2V0Z2lkIGJpdCBuZWVkcyB0byBiZQpAQCAtOTEsMTkgJiM0Mzs5MiwyMSBAQCBFWFBPUlRfU1lNQk9MKHNldGF0dHJfc2hvdWxkX2Ryb3Bfc3VpZGdpZCk7CiAgKiBwZXJtaXNzaW9ucy4gT24gbm9uLWlkbWFwcGVkIG1vdW50cyBvciBpZiBwZXJtaXNzaW9uIGNoZWNraW5nIGlzIHRvIGJlCiAgKiBwZXJmb3JtZWQgb24gdGhlIHJhdyBpbm9kZSBzaW1wbHkgcGFzcyBAbm9wX21udF9pZG1hcC4KICAqLwotc3RhdGljIGJvb2wgY2hvd25fb2soc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCi0JCSAgICAgY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSwgdmZzdWlkX3QgaWFfdmZzdWlkKQomIzQzO3N0YXRpYyBpbnQgY2hvd25fb2soc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCiYjNDM7CQkgICAgc3RydWN0IGlub2RlICppbm9kZSwgdmZzdWlkX3QgaWFfdmZzdWlkKQogewogCXZmc3VpZF90IHZmc3VpZCA9IGlfdWlkX2ludG9fdmZzdWlkKGlkbWFwLCBpbm9kZSk7Ci0JaWYgKHZmc3VpZF9lcV9rdWlkKHZmc3VpZCwgY3VycmVudF9mc3VpZCgpKSAmYW1wOyZhbXA7Ci0JICAgIHZmc3VpZF9lcShpYV92ZnN1aWQsIHZmc3VpZCkpCi0JCXJldHVybiB0cnVlOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlyZXQgPSB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWUoaWRtYXAsIGlub2RlKTsKJiM0MzsJaWYgKHJldCAmbHQ7PSAwKQomIzQzOwkJcmV0dXJuIHJldDsKIAlpZiAoY2FwYWJsZV93cnRfaW5vZGVfdWlkZ2lkKGlkbWFwLCBpbm9kZSwgQ0FQX0NIT1dOKSkKLQkJcmV0dXJuIHRydWU7CiYjNDM7CQlyZXR1cm4gMDsKIAlpZiAoIXZmc3VpZF92YWxpZCh2ZnN1aWQpICZhbXA7JmFtcDsKIAkgICAgbnNfY2FwYWJsZShpbm9kZS0mZ3Q7aV9zYi0mZ3Q7c191c2VyX25zLCBDQVBfQ0hPV04pKQotCQlyZXR1cm4gdHJ1ZTsKLQlyZXR1cm4gZmFsc2U7CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJcmV0dXJuIC1FUEVSTTsKIH0KIAogLyoqCkBAIC0xMTgsMjMgJiM0MzsxMjEsMjcgQEAgc3RhdGljIGJvb2wgY2hvd25fb2soc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCiAgKiBwZXJtaXNzaW9ucy4gT24gbm9uLWlkbWFwcGVkIG1vdW50cyBvciBpZiBwZXJtaXNzaW9uIGNoZWNraW5nIGlzIHRvIGJlCiAgKiBwZXJmb3JtZWQgb24gdGhlIHJhdyBpbm9kZSBzaW1wbHkgcGFzcyBAbm9wX21udF9pZG1hcC4KICAqLwotc3RhdGljIGJvb2wgY2hncnBfb2soc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCi0JCSAgICAgY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSwgdmZzZ2lkX3QgaWFfdmZzZ2lkKQomIzQzO3N0YXRpYyBpbnQgY2hncnBfb2soc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCiYjNDM7CQkgICAgc3RydWN0IGlub2RlICppbm9kZSwgdmZzZ2lkX3QgaWFfdmZzZ2lkKQogewogCXZmc2dpZF90IHZmc2dpZCA9IGlfZ2lkX2ludG9fdmZzZ2lkKGlkbWFwLCBpbm9kZSk7Ci0JdmZzdWlkX3QgdmZzdWlkID0gaV91aWRfaW50b192ZnN1aWQoaWRtYXAsIGlub2RlKTsKLQlpZiAodmZzdWlkX2VxX2t1aWQodmZzdWlkLCBjdXJyZW50X2ZzdWlkKCkpKSB7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShpZG1hcCwgaW5vZGUpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CWlmIChyZXQgPT0gMCkgewogCQlpZiAodmZzZ2lkX2VxKGlhX3Zmc2dpZCwgdmZzZ2lkKSkKLQkJCXJldHVybiB0cnVlOwomIzQzOwkJCXJldHVybiAwOwogCQlpZiAodmZzZ2lkX2luX2dyb3VwX3AoaWFfdmZzZ2lkKSkKLQkJCXJldHVybiB0cnVlOwomIzQzOwkJCXJldHVybiAwOwogCX0KIAlpZiAoY2FwYWJsZV93cnRfaW5vZGVfdWlkZ2lkKGlkbWFwLCBpbm9kZSwgQ0FQX0NIT1dOKSkKLQkJcmV0dXJuIHRydWU7CiYjNDM7CQlyZXR1cm4gMDsKIAlpZiAoIXZmc2dpZF92YWxpZCh2ZnNnaWQpICZhbXA7JmFtcDsKIAkgICAgbnNfY2FwYWJsZShpbm9kZS0mZ3Q7aV9zYi0mZ3Q7c191c2VyX25zLCBDQVBfQ0hPV04pKQotCQlyZXR1cm4gdHJ1ZTsKLQlyZXR1cm4gZmFsc2U7CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJcmV0dXJuIC1FUEVSTTsKIH0KIAogLyoqCkBAIC0xNjMsNiAmIzQzOzE3MCw3IEBAIGludCBzZXRhdHRyX3ByZXBhcmUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKIHsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZF9pbm9kZShkZW50cnkpOwogCXVuc2lnbmVkIGludCBpYV92YWxpZCA9IGF0dHItJmd0O2lhX3ZhbGlkOwomIzQzOwlpbnQgcmV0OwogCiAJLyoKIAkgKiBGaXJzdCBjaGVjayBzaXplIGNvbnN0cmFpbnRzLiAgVGhlc2UgY2FuJiMzOTt0IGJlIG92ZXJyaWRkZW4gdXNpbmcKQEAgLTE4OSwxNCAmIzQzOzE5NywxOCBAQCBpbnQgc2V0YXR0cl9wcmVwYXJlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCiAJCWdvdG8ga2lsbF9wcml2OwogCiAJLyogTWFrZSBzdXJlIGEgY2FsbGVyIGNhbiBjaG93bi4gKi8KLQlpZiAoKGlhX3ZhbGlkICZhbXA7IEFUVFJfVUlEKSAmYW1wOyZhbXA7Ci0JICAgICFjaG93bl9vayhpZG1hcCwgaW5vZGUsIGF0dHItJmd0O2lhX3Zmc3VpZCkpCi0JCXJldHVybiAtRVBFUk07CiYjNDM7CWlmIChpYV92YWxpZCAmYW1wOyBBVFRSX1VJRCkgewomIzQzOwkJcmV0ID0gY2hvd25fb2soaWRtYXAsIGlub2RlLCBhdHRyLSZndDtpYV92ZnN1aWQpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsJfQogCiAJLyogTWFrZSBzdXJlIGNhbGxlciBjYW4gY2hncnAuICovCi0JaWYgKChpYV92YWxpZCAmYW1wOyBBVFRSX0dJRCkgJmFtcDsmYW1wOwotCSAgICAhY2hncnBfb2soaWRtYXAsIGlub2RlLCBhdHRyLSZndDtpYV92ZnNnaWQpKQotCQlyZXR1cm4gLUVQRVJNOwomIzQzOwlpZiAoaWFfdmFsaWQgJmFtcDsgQVRUUl9HSUQpIHsKJiM0MzsJCXJldCA9IGNoZ3JwX29rKGlkbWFwLCBpbm9kZSwgYXR0ci0mZ3Q7aWFfdmZzZ2lkKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CX0KIAogCS8qIE1ha2Ugc3VyZSBhIGNhbGxlciBjYW4gY2htb2QuICovCiAJaWYgKGlhX3ZhbGlkICZhbXA7IEFUVFJfTU9ERSkgewpkaWZmIC0tZ2l0IGEvZnMvY29yZWR1bXAuYyBiL2ZzL2NvcmVkdW1wLmMKaW5kZXggZTY4YTc2ZmY5MmEzODYuLjNmMzJlNzNhYWVkYTI4IDEwMDY0NAotLS0gYS9mcy9jb3JlZHVtcC5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2NvcmVkdW1wLmMKQEAgLTk1NCw3ICYjNDM7OTU0LDcgQEAgc3RhdGljIGJvb2wgY29yZWR1bXBfZmlsZShzdHJ1Y3QgY29yZV9uYW1lICpjbiwgc3RydWN0IGNvcmVkdW1wX3BhcmFtcyAqY3BybSwKIAkgKiBmaWxlc3lzdGVtLgogCSAqLwogCWlkbWFwID0gZmlsZV9tbnRfaWRtYXAoZmlsZSk7Ci0JaWYgKCF2ZnN1aWRfZXFfa3VpZChpX3VpZF9pbnRvX3Zmc3VpZChpZG1hcCwgaW5vZGUpLCBjdXJyZW50X2ZzdWlkKCkpKSB7CiYjNDM7CWlmICh2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWUoaWRtYXAsIGlub2RlKSAhPSAwKSB7CiAJCWNvcmVkdW1wX3JlcG9ydF9mYWlsdXJlKCYjMzQ7Q29yZSBkdW1wIHRvICVzIGFib3J0ZWQ6IGNhbm5vdCBwcmVzZXJ2ZSBmaWxlIG93bmVyJiMzNDssIGNuLSZndDtjb3JlbmFtZSk7CiAJCXJldHVybiBmYWxzZTsKIAl9CmRpZmYgLS1naXQgYS9mcy9pbm9kZS5jIGIvZnMvaW5vZGUuYwppbmRleCAzMWM1YjllZTNhODFkZi4uYTdlYzgzMGFiNjgzZjAgMTAwNjQ0Ci0tLSBhL2ZzL2lub2RlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvaW5vZGUuYwpAQCAtMjc1MCwxNiAmIzQzOzI3NTAsMTkgQEAgRVhQT1JUX1NZTUJPTChpbm9kZV9pbml0X293bmVyKTsKICAqIE9uIG5vbi1pZG1hcHBlZCBtb3VudHMgb3IgaWYgcGVybWlzc2lvbiBjaGVja2luZyBpcyB0byBiZSBwZXJmb3JtZWQgb24gdGhlCiAgKiByYXcgaW5vZGUgc2ltcGx5IHBhc3MgQG5vcF9tbnRfaWRtYXAuCiAgKi8KLWJvb2wgaW5vZGVfb3duZXJfb3JfY2FwYWJsZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwKLQkJCSAgICBjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlKQomIzQzO2Jvb2wgaW5vZGVfb3duZXJfb3JfY2FwYWJsZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSkKIHsKIAl2ZnN1aWRfdCB2ZnN1aWQ7CiAJc3RydWN0IHVzZXJfbmFtZXNwYWNlICpuczsKJiM0MzsJaW50IHJldDsKIAotCXZmc3VpZCA9IGlfdWlkX2ludG9fdmZzdWlkKGlkbWFwLCBpbm9kZSk7Ci0JaWYgKHZmc3VpZF9lcV9rdWlkKHZmc3VpZCwgY3VycmVudF9mc3VpZCgpKSkKJiM0MzsJcmV0ID0gdmZzX2lub2RlX2lzX293bmVkX2J5X21lKGlkbWFwLCBpbm9kZSk7CiYjNDM7CWlmIChyZXQgPT0gMCkKIAkJcmV0dXJuIHRydWU7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIGZhbHNlOwogCiYjNDM7CXZmc3VpZCA9IGlfdWlkX2ludG9fdmZzdWlkKGlkbWFwLCBpbm9kZSk7CiAJbnMgPSBjdXJyZW50X3VzZXJfbnMoKTsKIAlpZiAodmZzdWlkX2hhc19tYXBwaW5nKG5zLCB2ZnN1aWQpICZhbXA7JmFtcDsgbnNfY2FwYWJsZShucywgQ0FQX0ZPV05FUikpCiAJCXJldHVybiB0cnVlOwpkaWZmIC0tZ2l0IGEvZnMvaW50ZXJuYWwuaCBiL2ZzL2ludGVybmFsLmgKaW5kZXggMzU1ZDkzZjkyMjA4NjEuLmJlNDVjYzYzODg2MTkyIDEwMDY0NAotLS0gYS9mcy9pbnRlcm5hbC5oCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2ludGVybmFsLmgKQEAgLTUxLDYgJiM0Mzs1MSw3IEBAIGV4dGVybiBpbnQgZmluaXNoX2NsZWFuX2NvbnRleHQoc3RydWN0IGZzX2NvbnRleHQgKmZjKTsKIC8qCiAgKiBuYW1laS5jCiAgKi8KJiM0MztpbnQgdmZzX2lub2RlX2lzX293bmVkX2J5X21lKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKIGV4dGVybiBpbnQgZmlsZW5hbWVfbG9va3VwKGludCBkZmQsIHN0cnVjdCBmaWxlbmFtZSAqbmFtZSwgdW5zaWduZWQgZmxhZ3MsCiAJCQkgICBzdHJ1Y3QgcGF0aCAqcGF0aCwgY29uc3Qgc3RydWN0IHBhdGggKnJvb3QpOwogaW50IGZpbGVuYW1lX3JtZGlyKGludCBkZmQsIHN0cnVjdCBmaWxlbmFtZSAqbmFtZSk7CmRpZmYgLS1naXQgYS9mcy9sb2Nrcy5jIGIvZnMvbG9ja3MuYwppbmRleCA2ZTRmZjdmY2VjMDUzZS4uMDJmODEwZGM5ZTdlN2EgMTAwNjQ0Ci0tLSBhL2ZzL2xvY2tzLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvbG9ja3MuYwpAQCAtNjgsNiAmIzQzOzY4LDcgQEAKICNpbmNsdWRlICZsdDt0cmFjZS9ldmVudHMvZmlsZWxvY2suaCZndDsKIAogI2luY2x1ZGUgJmx0O2xpbnV4L3VhY2Nlc3MuaCZndDsKJiM0MzsjaW5jbHVkZSAmIzM0O2ludGVybmFsLmgmIzM0OwogCiBzdGF0aWMgc3RydWN0IGZpbGVfbG9jayAqZmlsZV9sb2NrKHN0cnVjdCBmaWxlX2xvY2tfY29yZSAqZmxjKQogewpAQCAtMjEzNiwxMCAmIzQzOzIxMzcsMTIgQEAgaW50CiB2ZnNfc2V0bGVhc2Uoc3RydWN0IGZpbGUgKmZpbHAsIGludCBhcmcsIHN0cnVjdCBmaWxlX2xlYXNlICoqbGVhc2UsIHZvaWQgKipwcml2KQogewogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlX2lub2RlKGZpbHApOwotCXZmc3VpZF90IHZmc3VpZCA9IGlfdWlkX2ludG9fdmZzdWlkKGZpbGVfbW50X2lkbWFwKGZpbHApLCBpbm9kZSk7CiAJaW50IGVycm9yOwogCi0JaWYgKCghdmZzdWlkX2VxX2t1aWQodmZzdWlkLCBjdXJyZW50X2ZzdWlkKCkpKSAmYW1wOyZhbXA7ICFjYXBhYmxlKENBUF9MRUFTRSkpCiYjNDM7CWVycm9yID0gdmZzX2lub2RlX2lzX293bmVkX2J5X21lKGZpbGVfbW50X2lkbWFwKGZpbHApLCBpbm9kZSk7CiYjNDM7CWlmIChlcnJvciAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gZXJyb3I7CiYjNDM7CWlmIChlcnJvciAhPSAwICZhbXA7JmFtcDsgIWNhcGFibGUoQ0FQX0xFQVNFKSkKIAkJcmV0dXJuIC1FQUNDRVM7CiAJZXJyb3IgPSBzZWN1cml0eV9maWxlX2xvY2soZmlscCwgYXJnKTsKIAlpZiAoZXJyb3IpCmRpZmYgLS1naXQgYS9mcy9uYW1laS5jIGIvZnMvbmFtZWkuYwppbmRleCAxOWNlNDNjOWE2ZTY2Mi4uNzJmOTRkMjA0ZjkzZjQgMTAwNjQ0Ci0tLSBhL2ZzL25hbWVpLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvbmFtZWkuYwpAQCAtNTUsOCAmIzQzOzU1LDggQEAKICAqIFRoZSBuZXcgY29kZSByZXBsYWNlcyB0aGUgb2xkIHJlY3Vyc2l2ZSBzeW1saW5rIHJlc29sdXRpb24gd2l0aAogICogYW4gaXRlcmF0aXZlIG9uZSAoaW4gY2FzZSBvZiBub24tbmVzdGVkIHN5bWxpbmsgY2hhaW5zKS4gIEl0IGRvZXMKICAqIHRoaXMgd2l0aCBjYWxscyB0byAmbHQ7ZnMmZ3Q7X2ZvbGxvd19saW5rKCkuCi0gKiBBcyBhIHNpZGUgZWZmZWN0LCBkaXJfbmFtZWkoKSwgX25hbWVpKCkgYW5kIGZvbGxvd19saW5rKCkgYXJlIG5vdyAKLSAqIHJlcGxhY2VkIHdpdGggYSBzaW5nbGUgZnVuY3Rpb24gbG9va3VwX2RlbnRyeSgpIHRoYXQgY2FuIGhhbmRsZSBhbGwgCiYjNDM7ICogQXMgYSBzaWRlIGVmZmVjdCwgZGlyX25hbWVpKCksIF9uYW1laSgpIGFuZCBmb2xsb3dfbGluaygpIGFyZSBub3cKJiM0MzsgKiByZXBsYWNlZCB3aXRoIGEgc2luZ2xlIGZ1bmN0aW9uIGxvb2t1cF9kZW50cnkoKSB0aGF0IGNhbiBoYW5kbGUgYWxsCiAgKiB0aGUgc3BlY2lhbCBjYXNlcyBvZiB0aGUgZm9ybWVyIGNvZGUuCiAgKgogICogV2l0aCB0aGUgbmV3IGRjYWNoZSwgdGhlIHBhdGhuYW1lIGlzIHN0b3JlZCBhdCBlYWNoIGlub2RlLCBhdCBsZWFzdCBhcwpAQCAtMTI1NSw2ICYjNDM7MTI1NSw3MiBAQCBmc19pbml0Y2FsbChpbml0X2ZzX25hbWVpX3N5c2N0bHMpOwogCiAjZW5kaWYgLyogQ09ORklHX1NZU0NUTCAqLwogCiYjNDM7LyoKJiM0MzsgKiBEZXRlcm1pbmUgaWYgYW4gaW5vZGUgaXMgb3duZWQgYnkgdGhlIHByb2Nlc3MgKGFsbG93aW5nIGZvciBmc3VpZCBvdmVycmlkZSksCiYjNDM7ICogcmV0dXJuaW5nIDAgaWYgc28sIDEgaWYgbm90IGFuZCBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgaWYgdGhlcmUgd2FzIGEgcHJvYmxlbQomIzQzOyAqIG1ha2luZyB0aGUgZGV0ZXJtaW5hdGlvbi4KJiM0MzsgKi8KJiM0MztpbnQgdmZzX2lub2RlX2lzX293bmVkX2J5X21lKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKQomIzQzO3sKJiM0MzsJaWYgKHVubGlrZWx5KGlub2RlLSZndDtpX29wZmxhZ3MgJmFtcDsgSU9QX09XTkVSU0hJUF9PVkVSUklERSkpCiYjNDM7CQlyZXR1cm4gaW5vZGUtJmd0O2lfb3AtJmd0O2lzX293bmVkX2J5X21lKGlkbWFwLCBpbm9kZSk7CiYjNDM7CWlmICh2ZnN1aWRfZXFfa3VpZChpX3VpZF9pbnRvX3Zmc3VpZChpZG1hcCwgaW5vZGUpLCBjdXJyZW50X2ZzdWlkKCkpKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CXJldHVybiAxOyAvKiBOb3Qgc2FtZS4gKi8KJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBEZXRlcm1pbmUgaWYgYW4gaW5vZGUgaGFzIHRoZSBzYW1lIG93bmVyIGFzIGl0cyBwYXJlbnQgZGlyZWN0b3J5LCByZXR1cm5pbmcKJiM0MzsgKiAwIGlmIHNvLCAxIGlmIG5vdCBhbmQgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIGlmIHRoZXJlIHdhcyBhIHByb2JsZW0gbWFraW5nCiYjNDM7ICogdGhlIGRldGVybWluYXRpb24uCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB2ZnNfaW5vZGVfYW5kX2Rpcl9oYXZlX3NhbWVfb3duZXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiYjNDM7CQkJCQkgICAgIGNvbnN0IHN0cnVjdCBuYW1laWRhdGEgKm5kKQomIzQzO3sKJiM0MzsJaWYgKHVubGlrZWx5KGlub2RlLSZndDtpX29wZmxhZ3MgJmFtcDsgSU9QX09XTkVSU0hJUF9PVkVSUklERSkpIHsKJiM0MzsJCXN0cnVjdCBkZW50cnkgKnBhcmVudDsKJiM0MzsJCXN0cnVjdCBpbm9kZSAqZGlyOwomIzQzOwkJaW50IHJldDsKJiM0MzsKJiM0MzsJCWlmIChpbm9kZSAhPSBuZC0mZ3Q7aW5vZGUpIHsKJiM0MzsJCQlkaXIgPSBuZC0mZ3Q7aW5vZGU7CiYjNDM7CQkJcmV0ID0gaW5vZGUtJmd0O2lfb3AtJmd0O2hhdmVfc2FtZV9vd25lcihpZG1hcCwgaW5vZGUsIGRpcik7CiYjNDM7CQl9IGVsc2UgaWYgKG5kLSZndDtmbGFncyAmYW1wOyBMT09LVVBfUkNVKSB7CiYjNDM7CQkJcGFyZW50ID0gUkVBRF9PTkNFKG5kLSZndDtwYXRoLmRlbnRyeSk7CiYjNDM7CQkJZGlyID0gUkVBRF9PTkNFKHBhcmVudC0mZ3Q7ZF9pbm9kZSk7CiYjNDM7CQkJaWYgKCFkaXIpCiYjNDM7CQkJCXJldHVybiAtRUNISUxEOwomIzQzOwkJCXJldCA9IGlub2RlLSZndDtpX29wLSZndDtoYXZlX3NhbWVfb3duZXIoaWRtYXAsIGlub2RlLCBkaXIpOwomIzQzOwkJfSBlbHNlIHsKJiM0MzsJCQlwYXJlbnQgPSBkZ2V0X3BhcmVudChuZC0mZ3Q7cGF0aC5kZW50cnkpOwomIzQzOwkJCWRpciA9IHBhcmVudC0mZ3Q7ZF9pbm9kZTsKJiM0MzsJCQlyZXQgPSBpbm9kZS0mZ3Q7aV9vcC0mZ3Q7aGF2ZV9zYW1lX293bmVyKGlkbWFwLCBpbm9kZSwgZGlyKTsKJiM0MzsJCQlkcHV0KHBhcmVudCk7CiYjNDM7CQl9CiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICh2ZnN1aWRfdmFsaWQobmQtJmd0O2Rpcl92ZnN1aWQpICZhbXA7JmFtcDsKJiM0MzsJICAgIHZmc3VpZF9lcShpX3VpZF9pbnRvX3Zmc3VpZChpZG1hcCwgaW5vZGUpLCBuZC0mZ3Q7ZGlyX3Zmc3VpZCkpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJcmV0dXJuIDE7IC8qIE5vdCBzYW1lLiAqLwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIERldGVybWluZSBpZiB0d28gaW5vZGVzIGhhdmUgdGhlIHNhbWUgb3duZXIsIHJldHVybmluZyAwIGlmIHNvLCAxIGlmIG5vdCBhbmQKJiM0MzsgKiBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgaWYgdGhlcmUgd2FzIGEgcHJvYmxlbSBtYWtpbmcgdGhlIGRldGVybWluYXRpb24uCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB2ZnNfaW5vZGVzX2hhdmVfc2FtZV9vd25lcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSwKJiM0MzsJCQkJICAgICAgc3RydWN0IGlub2RlICpkaXIpCiYjNDM7ewomIzQzOwlpZiAodW5saWtlbHkoaW5vZGUtJmd0O2lfb3BmbGFncyAmYW1wOyBJT1BfT1dORVJTSElQX09WRVJSSURFKSkKJiM0MzsJCXJldHVybiBpbm9kZS0mZ3Q7aV9vcC0mZ3Q7aGF2ZV9zYW1lX293bmVyKGlkbWFwLCBpbm9kZSwgZGlyKTsKJiM0MzsJaWYgKHZmc3VpZF9lcShpX3VpZF9pbnRvX3Zmc3VpZChpZG1hcCwgaW5vZGUpLAomIzQzOwkJICAgICAgaV91aWRfaW50b192ZnN1aWQoaWRtYXAsIGRpcikpKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CXJldHVybiAxOyAvKiBOb3Qgc2FtZS4gKi8KJiM0Mzt9CiYjNDM7CiAvKioKICAqIG1heV9mb2xsb3dfbGluayAtIENoZWNrIHN5bWxpbmsgZm9sbG93aW5nIGZvciB1bnNhZmUgc2l0dWF0aW9ucwogICogQG5kOiBuYW1laWRhdGEgcGF0aHdhbGsgZGF0YQpAQCAtMTI3MSwyNyAmIzQzOzEzMzcsMjggQEAgZnNfaW5pdGNhbGwoaW5pdF9mc19uYW1laV9zeXNjdGxzKTsKICAqCiAgKiBSZXR1cm5zIDAgaWYgZm9sbG93aW5nIHRoZSBzeW1saW5rIGlzIGFsbG93ZWQsIC12ZSBvbiBlcnJvci4KICAqLwotc3RhdGljIGlubGluZSBpbnQgbWF5X2ZvbGxvd19saW5rKHN0cnVjdCBuYW1laWRhdGEgKm5kLCBjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlKQomIzQzO3N0YXRpYyBpbmxpbmUgaW50IG1heV9mb2xsb3dfbGluayhzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgc3RydWN0IGlub2RlICppbm9kZSkKIHsKIAlzdHJ1Y3QgbW50X2lkbWFwICppZG1hcDsKLQl2ZnN1aWRfdCB2ZnN1aWQ7CiYjNDM7CWludCByZXQ7CiAKIAlpZiAoIXN5c2N0bF9wcm90ZWN0ZWRfc3ltbGlua3MpCiAJCXJldHVybiAwOwogCi0JaWRtYXAgPSBtbnRfaWRtYXAobmQtJmd0O3BhdGgubW50KTsKLQl2ZnN1aWQgPSBpX3VpZF9pbnRvX3Zmc3VpZChpZG1hcCwgaW5vZGUpOwotCS8qIEFsbG93ZWQgaWYgb3duZXIgYW5kIGZvbGxvd2VyIG1hdGNoLiAqLwotCWlmICh2ZnN1aWRfZXFfa3VpZCh2ZnN1aWQsIGN1cnJlbnRfZnN1aWQoKSkpCi0JCXJldHVybiAwOwotCiAJLyogQWxsb3dlZCBpZiBwYXJlbnQgZGlyZWN0b3J5IG5vdCBzdGlja3kgYW5kIHdvcmxkLXdyaXRhYmxlLiAqLwogCWlmICgobmQtJmd0O2Rpcl9tb2RlICZhbXA7IChTX0lTVlRYfFNfSVdPVEgpKSAhPSAoU19JU1ZUWHxTX0lXT1RIKSkKIAkJcmV0dXJuIDA7CiAKJiM0MzsJaWRtYXAgPSBtbnRfaWRtYXAobmQtJmd0O3BhdGgubW50KTsKJiM0MzsJLyogQWxsb3dlZCBpZiBvd25lciBhbmQgZm9sbG93ZXIgbWF0Y2guICovCiYjNDM7CXJldCA9IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShpZG1hcCwgaW5vZGUpOwomIzQzOwlpZiAocmV0ICZsdDs9IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwogCS8qIEFsbG93ZWQgaWYgcGFyZW50IGRpcmVjdG9yeSBhbmQgbGluayBvd25lciBtYXRjaC4gKi8KLQlpZiAodmZzdWlkX3ZhbGlkKG5kLSZndDtkaXJfdmZzdWlkKSAmYW1wOyZhbXA7IHZmc3VpZF9lcShuZC0mZ3Q7ZGlyX3Zmc3VpZCwgdmZzdWlkKSkKLQkJcmV0dXJuIDA7CiYjNDM7CXJldCA9IHZmc19pbm9kZV9hbmRfZGlyX2hhdmVfc2FtZV9vd25lcihpZG1hcCwgaW5vZGUsIG5kKTsKJiM0MzsJaWYgKHJldCAmbHQ7PSAwKQomIzQzOwkJcmV0dXJuIHJldDsKIAogCWlmIChuZC0mZ3Q7ZmxhZ3MgJmFtcDsgTE9PS1VQX1JDVSkKIAkJcmV0dXJuIC1FQ0hJTEQ7CkBAIC0xMzg5LDEyICYjNDM7MTQ1NiwxMiBAQCBpbnQgbWF5X2xpbmthdChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgY29uc3Qgc3RydWN0IHBhdGggKmxpbmspCiAgKiBAaW5vZGU6IHRoZSBpbm9kZSBvZiB0aGUgZmlsZSB0byBvcGVuCiAgKgogICogQmxvY2sgYW4gT19DUkVBVCBvcGVuIG9mIGEgRklGTyAob3IgYSByZWd1bGFyIGZpbGUpIHdoZW46Ci0gKiAgIC0gc3lzY3RsX3Byb3RlY3RlZF9maWZvcyAob3Igc3lzY3RsX3Byb3RlY3RlZF9yZWd1bGFyKSBpcyBlbmFibGVkCi0gKiAgIC0gdGhlIGZpbGUgYWxyZWFkeSBleGlzdHMKLSAqICAgLSB3ZSBhcmUgaW4gYSBzdGlja3kgZGlyZWN0b3J5Ci0gKiAgIC0gd2UgZG9uJiMzOTt0IG93biB0aGUgZmlsZQomIzQzOyAqICAgLSBzeXNjdGxfcHJvdGVjdGVkX2ZpZm9zIChvciBzeXNjdGxfcHJvdGVjdGVkX3JlZ3VsYXIpIGlzIGVuYWJsZWQsCiYjNDM7ICogICAtIHRoZSBmaWxlIGFscmVhZHkgZXhpc3RzLAomIzQzOyAqICAgLSB3ZSBhcmUgaW4gYSBzdGlja3kgZGlyZWN0b3J5LAomIzQzOyAqICAgLSB0aGUgZGlyZWN0b3J5IGlzIHdvcmxkIHdyaXRhYmxlLAomIzQzOyAqICAgLSB3ZSBkb24mIzM5O3Qgb3duIHRoZSBmaWxlIGFuZAogICogICAtIHRoZSBvd25lciBvZiB0aGUgZGlyZWN0b3J5IGRvZXNuJiMzOTt0IG93biB0aGUgZmlsZQotICogICAtIHRoZSBkaXJlY3RvcnkgaXMgd29ybGQgd3JpdGFibGUKICAqIElmIHRoZSBzeXNjdGxfcHJvdGVjdGVkX2ZpZm9zIChvciBzeXNjdGxfcHJvdGVjdGVkX3JlZ3VsYXIpIGlzIHNldCB0byAyCiAgKiB0aGUgZGlyZWN0b3J5IGRvZXNuJiMzOTt0IGhhdmUgdG8gYmUgd29ybGQgd3JpdGFibGU6IGJlaW5nIGdyb3VwIHdyaXRhYmxlIHdpbGwKICAqIGJlIGVub3VnaC4KQEAgLTE0MDUsMTMgJiM0MzsxNDcyLDQ1IEBAIGludCBtYXlfbGlua2F0KHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBjb25zdCBzdHJ1Y3QgcGF0aCAqbGluaykKICAqIE9uIG5vbi1pZG1hcHBlZCBtb3VudHMgb3IgaWYgcGVybWlzc2lvbiBjaGVja2luZyBpcyB0byBiZSBwZXJmb3JtZWQgb24gdGhlCiAgKiByYXcgaW5vZGUgc2ltcGx5IHBhc3MgQG5vcF9tbnRfaWRtYXAuCiAgKgomIzQzOyAqIEZvciBhIGZpbGVzeXN0ZW0gKGUuZy4gYSBuZXR3b3JrIGZpbGVzeXN0ZW0pIHRoYXQgaGFzIGEgc2VwYXJhdGUgSUQgc3BhY2UKJiM0MzsgKiBhbmQgaGFzIGZvcmVpZ24gSURzIChtYXliZSBldmVuIG5vbi1pbnRlZ2VyIElEcyksIGlfdWlkIGNhbm5vdCBiZSBjb21wYXJlZAomIzQzOyAqIHRvIGN1cnJlbnRfZnN1aWQoKSBhbmQgbWF5IG5vdCBiZSBkaXJlY3RseSBjb21wYXJhYmxlIHRvIGFub3RoZXIgaV91aWQuCiYjNDM7ICogSW5zdGVhZCwgdGhlIGZpbGVzeXN0ZW0gaXMgYXNrZWQgdG8gcGVyZm9ybSB0aGUgY29tcGFyaXNvbnMuICBXaXRoIG5ldHdvcmsKJiM0MzsgKiBmaWxlc3lzdGVtcywgdGhlcmUgYWxzbyBleGlzdHMgdGhlIHBvc3NpYmlsaXR5IG9mIGRvaW5nIGFub255bW91cwomIzQzOyAqIG9wZXJhdGlvbnMgYW5kIGhhdmluZyBhbm9ueW1vdXNseS1vd25lZCBvYmplY3RzLgomIzQzOyAqCiYjNDM7ICogV2UgaGF2ZSB0aGUgZm9sbG93aW5nIHNjZW5hcmlvczoKJiM0MzsgKgomIzQzOyAqCVVTRVIJRElSCUZJTEUJRklMRQlBTExPV0VECiYjNDM7ICoJCU9XTkVSCU9XTkVSCVNUQVRFCiYjNDM7ICoJPT09PT09PQk9PT09PT09CT09PT09PT0JPT09PT09PQk9PT09PT09CiYjNDM7ICoJQQlBCS0JTmV3CVllcwomIzQzOyAqCUEJQQlBCUV4aXN0cwlZZXMKJiM0MzsgKglBCUEJQwlFeGlzdHMJTm8KJiM0MzsgKglBCUIJLQlOZXcJWWVzCiYjNDM7ICoJQQlCCUEJRXhpc3RzCVllcywgRk89PVUKJiM0MzsgKglBCUIJQglFeGlzdHMJWWVzLCBGTz09RE8KJiM0MzsgKglBCUIJQwlFeGlzdHMJTm8KJiM0MzsgKglBCWFub25bMV0JLQlOZXcJWWVzCiYjNDM7ICoJQQlhbm9uWzFdCUEJRXhpc3RzCVllcwomIzQzOyAqCUEJYW5vblsxXQlDCUV4aXN0cwlObwomIzQzOyAqCWFub24JQQktCU5ldwlZZXMKJiM0MzsgKglhbm9uCUEJQQlFeGlzdHMJWWVzLCBGTz09RE8KJiM0MzsgKglhbm9uCWFub25bMV0JLQlOZXcJWWVzCiYjNDM7ICoJYW5vbglhbm9uWzFdCS0JRXhpc3RzCU5vCiYjNDM7ICoJYW5vbglBCUEJRXhpc3RzCVllcywgRk89PURPCiYjNDM7ICoJYW5vbglBCUMJRXhpc3RzCU5vCiYjNDM7ICoJYW5vbglBCWFub24JRXhpc3RzCU5vCiYjNDM7ICoKJiM0MzsgKiBbMV0gQ2FuIGFub255bW91c2x5LW93bmVkIGRpcnMgYmUgc3RpY2t5PwomIzQzOyAqCiAgKiBSZXR1cm5zIDAgaWYgdGhlIG9wZW4gaXMgYWxsb3dlZCwgLXZlIG9uIGVycm9yLgogICovCiBzdGF0aWMgaW50IG1heV9jcmVhdGVfaW5fc3RpY2t5KHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgbmFtZWlkYXRhICpuZCwKLQkJCQlzdHJ1Y3QgaW5vZGUgKmNvbnN0IGlub2RlKQomIzQzOwkJCQlzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewogCXVtb2RlX3QgZGlyX21vZGUgPSBuZC0mZ3Q7ZGlyX21vZGU7Ci0JdmZzdWlkX3QgZGlyX3Zmc3VpZCA9IG5kLSZndDtkaXJfdmZzdWlkLCBpX3Zmc3VpZDsKJiM0MzsJaW50IHJldDsKIAogCWlmIChsaWtlbHkoIShkaXJfbW9kZSAmYW1wOyBTX0lTVlRYKSkpCiAJCXJldHVybiAwOwpAQCAtMTQyMiwxMyAmIzQzOzE1MjEsMTMgQEAgc3RhdGljIGludCBtYXlfY3JlYXRlX2luX3N0aWNreShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IG5hbWVpZGF0YSAqbmQsCiAJaWYgKFNfSVNGSUZPKGlub2RlLSZndDtpX21vZGUpICZhbXA7JmFtcDsgIXN5c2N0bF9wcm90ZWN0ZWRfZmlmb3MpCiAJCXJldHVybiAwOwogCi0JaV92ZnN1aWQgPSBpX3VpZF9pbnRvX3Zmc3VpZChpZG1hcCwgaW5vZGUpOwotCi0JaWYgKHZmc3VpZF9lcShpX3Zmc3VpZCwgZGlyX3Zmc3VpZCkpCi0JCXJldHVybiAwOwomIzQzOwlyZXQgPSB2ZnNfaW5vZGVfYW5kX2Rpcl9oYXZlX3NhbWVfb3duZXIoaWRtYXAsIGlub2RlLCBuZCk7CiYjNDM7CWlmIChyZXQgJmx0Oz0gMCkKJiM0MzsJCXJldHVybiByZXQ7CiAKLQlpZiAodmZzdWlkX2VxX2t1aWQoaV92ZnN1aWQsIGN1cnJlbnRfZnN1aWQoKSkpCi0JCXJldHVybiAwOwomIzQzOwlyZXQgPSB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWUoaWRtYXAsIGlub2RlKTsKJiM0MzsJaWYgKHJldCAmbHQ7PSAwKQomIzQzOwkJcmV0dXJuIHJldDsKIAogCWlmIChsaWtlbHkoZGlyX21vZGUgJmFtcDsgMDAwMikpIHsKIAkJYXVkaXRfbG9nX3BhdGhfZGVuaWVkKEFVRElUX0FOT01fQ1JFQVQsICYjMzQ7c3RpY2t5X2NyZWF0ZSYjMzQ7KTsKQEAgLTM2NDUsMTIgJiM0MzszNzQ0LDE0IEBAIEVYUE9SVF9TWU1CT0wodXNlcl9wYXRoX2F0KTsKIGludCBfX2NoZWNrX3N0aWNreShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCiAJCSAgIHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7Ci0Ja3VpZF90IGZzdWlkID0gY3VycmVudF9mc3VpZCgpOwomIzQzOwlpbnQgcmV0OwogCi0JaWYgKHZmc3VpZF9lcV9rdWlkKGlfdWlkX2ludG9fdmZzdWlkKGlkbWFwLCBpbm9kZSksIGZzdWlkKSkKLQkJcmV0dXJuIDA7Ci0JaWYgKHZmc3VpZF9lcV9rdWlkKGlfdWlkX2ludG9fdmZzdWlkKGlkbWFwLCBkaXIpLCBmc3VpZCkpCi0JCXJldHVybiAwOwomIzQzOwlyZXQgPSB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWUoaWRtYXAsIGlub2RlKTsKJiM0MzsJaWYgKHJldCAmbHQ7PSAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJcmV0ID0gdmZzX2lub2Rlc19oYXZlX3NhbWVfb3duZXIoaWRtYXAsIGlub2RlLCBkaXIpOwomIzQzOwlpZiAocmV0ICZsdDs9IDApCiYjNDM7CQlyZXR1cm4gcmV0OwogCXJldHVybiAhY2FwYWJsZV93cnRfaW5vZGVfdWlkZ2lkKGlkbWFwLCBpbm9kZSwgQ0FQX0ZPV05FUik7CiB9CiBFWFBPUlRfU1lNQk9MKF9fY2hlY2tfc3RpY2t5KTsKZGlmZiAtLWdpdCBhL2ZzL3JlbWFwX3JhbmdlLmMgYi9mcy9yZW1hcF9yYW5nZS5jCmluZGV4IDI2YWZiYmJmYjEwYzJlLi45ZWVlOTNjMjcwMDEyNSAxMDA2NDQKLS0tIGEvZnMvcmVtYXBfcmFuZ2UuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9yZW1hcF9yYW5nZS5jCkBAIC00MTMsMjAgJiM0Mzs0MTMsMjIgQEAgbG9mZl90IHZmc19jbG9uZV9maWxlX3JhbmdlKHN0cnVjdCBmaWxlICpmaWxlX2luLCBsb2ZmX3QgcG9zX2luLAogRVhQT1JUX1NZTUJPTCh2ZnNfY2xvbmVfZmlsZV9yYW5nZSk7CiAKIC8qIENoZWNrIHdoZXRoZXIgd2UgYXJlIGFsbG93ZWQgdG8gZGVkdXBlIHRoZSBkZXN0aW5hdGlvbiBmaWxlICovCi1zdGF0aWMgYm9vbCBtYXlfZGVkdXBlX2ZpbGUoc3RydWN0IGZpbGUgKmZpbGUpCiYjNDM7c3RhdGljIGludCBtYXlfZGVkdXBlX2ZpbGUoc3RydWN0IGZpbGUgKmZpbGUpCiB7CiAJc3RydWN0IG1udF9pZG1hcCAqaWRtYXAgPSBmaWxlX21udF9pZG1hcChmaWxlKTsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZV9pbm9kZShmaWxlKTsKJiM0MzsJaW50IHJldDsKIAogCWlmIChjYXBhYmxlKENBUF9TWVNfQURNSU4pKQotCQlyZXR1cm4gdHJ1ZTsKJiM0MzsJCXJldHVybiAwOwogCWlmIChmaWxlLSZndDtmX21vZGUgJmFtcDsgRk1PREVfV1JJVEUpCi0JCXJldHVybiB0cnVlOwotCWlmICh2ZnN1aWRfZXFfa3VpZChpX3VpZF9pbnRvX3Zmc3VpZChpZG1hcCwgaW5vZGUpLCBjdXJyZW50X2ZzdWlkKCkpKQotCQlyZXR1cm4gdHJ1ZTsKJiM0MzsJCXJldHVybiAwOwomIzQzOwlyZXQgPSB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWUoaWRtYXAsIGlub2RlKTsKJiM0MzsJaWYgKHJldCAmbHQ7PSAwKQomIzQzOwkJcmV0dXJuIHJldDsKIAlpZiAoIWlub2RlX3Blcm1pc3Npb24oaWRtYXAsIGlub2RlLCBNQVlfV1JJVEUpKQotCQlyZXR1cm4gdHJ1ZTsKLQlyZXR1cm4gZmFsc2U7CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJcmV0dXJuIC1FUEVSTTsKIH0KIAogbG9mZl90IHZmc19kZWR1cGVfZmlsZV9yYW5nZV9vbmUoc3RydWN0IGZpbGUgKnNyY19maWxlLCBsb2ZmX3Qgc3JjX3BvcywKQEAgLTQ1OSw4ICYjNDM7NDYxLDggQEAgbG9mZl90IHZmc19kZWR1cGVfZmlsZV9yYW5nZV9vbmUoc3RydWN0IGZpbGUgKnNyY19maWxlLCBsb2ZmX3Qgc3JjX3BvcywKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0JcmV0ID0gLUVQRVJNOwotCWlmICghbWF5X2RlZHVwZV9maWxlKGRzdF9maWxlKSkKJiM0MzsJcmV0ID0gbWF5X2RlZHVwZV9maWxlKGRzdF9maWxlKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiAJCWdvdG8gb3V0X2Ryb3Bfd3JpdGU7CiAKIAlyZXQgPSAtRVhERVY7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZzLmggYi9pbmNsdWRlL2xpbnV4L2ZzLmgKaW5kZXggNTBjZTczMWEyYjc4ZjEuLjgwMTNjMTNhMzUzZDY3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ZzLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9mcy5oCkBAIC02MjgsNiAmIzQzOzYyOCw3IEBAIGlzX3VuY2FjaGVkX2FjbChzdHJ1Y3QgcG9zaXhfYWNsICphY2wpCiAjZGVmaW5lIElPUF9DQUNIRURfTElOSwkJMHgwMDQwCiAjZGVmaW5lIElPUF9GQVNUUEVSTV9NQVlfRVhFQwkweDAwODAKICNkZWZpbmUgSU9QX0ZMQ1RYCQkweDAxMDAKJiM0MzsjZGVmaW5lIElPUF9PV05FUlNISVBfT1ZFUlJJREUJMHgwMjAwCS8qIFVzZSAtJmd0O2lzX293bmVkX2J5X21lKCkgYW5kIC0mZ3Q7aGF2ZV9zYW1lX293bmVyKCkgKi8KIAogLyoKICAqIElub2RlIHN0YXRlIGJpdHMuICBQcm90ZWN0ZWQgYnkgaW5vZGUtJmd0O2lfbG9jawpAQCAtMTc1NSw4ICYjNDM7MTc1Niw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBmaWxlX3dyaXRlX25vdF9zdGFydGVkKGNvbnN0IHN0cnVjdCBmaWxlICpmaWxlKQogCXJldHVybiBzYl93cml0ZV9ub3Rfc3RhcnRlZChmaWxlX2lub2RlKGZpbGUpLSZndDtpX3NiKTsKIH0KIAotYm9vbCBpbm9kZV9vd25lcl9vcl9jYXBhYmxlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLAotCQkJICAgIGNvbnN0IHN0cnVjdCBpbm9kZSAqaW5vZGUpOwomIzQzO2Jvb2wgaW5vZGVfb3duZXJfb3JfY2FwYWJsZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSk7CiAKIC8qCiAgKiBWRlMgaGVscGVyIGZ1bmN0aW9ucy4uCkBAIC0yMDM2LDYgJiM0MzsyMDM2LDkgQEAgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgewogCQkJICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGZpbGVfa2F0dHIgKmZhKTsKIAlpbnQgKCpmaWxlYXR0cl9nZXQpKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGZpbGVfa2F0dHIgKmZhKTsKIAlzdHJ1Y3Qgb2Zmc2V0X2N0eCAqKCpnZXRfb2Zmc2V0X2N0eCkoc3RydWN0IGlub2RlICppbm9kZSk7CiYjNDM7CWludCAoKmlzX293bmVkX2J5X21lKShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSk7CiYjNDM7CWludCAoKmhhdmVfc2FtZV9vd25lcikoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUxLAomIzQzOwkJCSAgICAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlMik7CiB9IF9fX19jYWNoZWxpbmVfYWxpZ25lZDsKIAogLyogRGlkIHRoZSBkcml2ZXIgcHJvdmlkZSB2YWxpZCBtbWFwIGhvb2sgY29uZmlndXJhdGlvbj8gKi8KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDM6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMxNzkKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiA1OTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJbm9kZSBPd25lcnNoaXAgUGF0Y2ggZm9yIEZ1enppbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0JiMzOTtzIGludHJvZHVjaW5nIHNvbWUgc2lnbmlmaWNhbnQgY2hhbmdlcyByZWxhdGVkIHRvIGlub2RlIG93bmVyc2hpcCBjaGVja3MsIHNwZWNpZmljYWxseSB3aXRoIHRoZSBgaXNfb3duZWRfYnlfbWVgIGFuZCBgaGF2ZV9zYW1lX293bmVyYCBvcGVyYXRpb25zLCBhbmQgaW1wbGVtZW50YXRpb24gZm9yIEFGUy4gVGhlIG1haW4gdGhydXN0IGlzIHRoaXMgbmV3IGBJT1BfT1dORVJTSElQX09WRVJSSURFYCBmbGFnIGFuZCBhIGJ1bmNoIG9mIFZGUyBwYXRoIG1vZGlmaWNhdGlvbnMuIFRoZSBjb2RlIGlzIHVzaW5nIHRoZSBuZXcgaW5vZGUgb3BlcmF0aW9ucyBpbnN0ZWFkIG9mIGRpcmVjdGx5IGNvbXBhcmluZyBVSURzIHVzaW5nIGB2ZnN1aWRfZXFfa3VpZGAsIGluIGZ1bmN0aW9ucyBsaWtlIGBjaG93bl9va2AsIGBjaGdycF9va2AsIGBjb3JlZHVtcF9maWxlYCwgZXRjLgoKVGhpcyBpcyBhIHByZXR0eSBmdW5kYW1lbnRhbCBzaGlmdCBpbiBob3cgb3duZXJzaGlwIGlzIGNoZWNrZWQsIGltcGFjdGluZyBib3RoIHRoZSBjb3JlIFZGUyBhbmQgdGhlIEFGUyBmaWxlc3lzdGVtLCBhbmQgdGhhdCBzY3JlYW1zICYjMzQ7ZnV6eiBtZS4mIzM0OyBJIG5lZWQgdG8gZGV0ZXJtaW5lIHdoZXJlIHRvIGNvbmNlbnRyYXRlIG15IGZ1enppbmcgZWZmb3J0cyB0byBpZGVudGlmeSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLgoKTXkgaW5pdGlhbCBmb2N1cyB3aWxsIGJlIG9uIHRoZSBuZXcgZnVuY3Rpb25zIHRoYXQgaW1wbGVtZW50IHRoZSBmdW5jdGlvbmFsaXR5OiBgdmZzX2lub2RlX2lzX293bmVkX2J5X21lYCwgYHZmc19pbm9kZV9hbmRfZGlyX2hhdmVfc2FtZV9vd25lcmAsIGB2ZnNfaW5vZGVzX2hhdmVfc2FtZV9vd25lcmAsIGBhZnNfaXNfb3duZWRfYnlfbWVgLCBhbmQgYGFmc19oYXZlX3NhbWVfb3duZXJgLiBUaGVzZSBhcmUgdGhlIGRpcmVjdCBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlIG5ldyBsb2dpYy4gQWxzbywgSSYjMzk7bGwgbmVlZCB0byBmdXp6IHRoZSBtb2RpZmllZCBmdW5jdGlvbnMgdG9vLCB0byBtYWtlIHN1cmUgdGhlIGNoYW5nZSBpcyB3b3JraW5nLgoKTm93LCBsZXQmIzM5O3Mgc2VlLCB3aGljaCBvZiB0aGVzZSBhcmUgZXhwb3NlZD8gYHZmc19pbm9kZV9pc19vd25lZF9ieV9tZWAgaW4gYGZzL25hbWVpLmNgIGlzIG5vbi1zdGF0aWMgYW5kIGV4cG9ydGVkLCBtZWFuaW5nIGl0JiMzOTtzIGFjY2Vzc2libGUuIGB2ZnNfaW5vZGVfYW5kX2Rpcl9oYXZlX3NhbWVfb3duZXJgIGFuZCBgdmZzX2lub2Rlc19oYXZlX3NhbWVfb3duZXJgIGFyZSBzdGF0aWMgaW4gYGZzL25hbWVpLmNgLCBzbyBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoZXkgYXJlIHVzZWQgd2l0aGluIHRoZWlyIGNvbXBpbGF0aW9uIHVuaXQsIHRvIHNlZSBob3cgdG8gdHJpZ2dlciB0aGVtLiBgYWZzX2lzX293bmVkX2J5X21lYCBhbmQgYGFmc19oYXZlX3NhbWVfb3duZXJgIGFyZSBpbiBgZnMvYWZzL3NlY3VyaXR5LmNgLCBhbmQgdGhleSYjMzk7cmUgbm9uLXN0YXRpYy4KCk9rYXksIGxldCYjMzk7cyBkaWcgaW50byBgZnMvbmFtZWkuY2AgYW5kIHNlZSBleGFjdGx5IGhvdyBgdmZzX2lub2RlX2lzX293bmVkX2J5X21lYCBpcyB1c2VkIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhlIHBvdGVudGlhbCBhdHRhY2sgc3VyZmFjZS4gVGhpcyBpcyB3aGVyZSB0aGUgcmVhbCBpbnRlcmVzdGluZyBzdHVmZiBpcyBnb2luZyB0byBiZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwMzozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvYXR0ci5jPTk1PXN0YXRpYyBpbnQgY2hvd25fb2soc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4tLVxuZnMvYXR0ci5jLTEwMC1cbmZzL2F0dHIuYzoxMDE6XHRyZXQgPSB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWUoaWRtYXAsIGlub2RlKTtcbmZzL2F0dHIuYy0xMDItXHRpZiAocmV0IFx1MDAzYz0gMClcbi0tXG5mcy9hdHRyLmM9MTI0PXN0YXRpYyBpbnQgY2hncnBfb2soc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4tLVxuZnMvYXR0ci5jLTEyOS1cbmZzL2F0dHIuYzoxMzA6XHRyZXQgPSB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWUoaWRtYXAsIGlub2RlKTtcbmZzL2F0dHIuYy0xMzEtXHRpZiAocmV0IFx1MDAzYyAwKVxuLS1cbmZzL2NvcmVkdW1wLmM9ODc4PXN0YXRpYyBib29sIGNvcmVkdW1wX2ZpbGUoc3RydWN0IGNvcmVfbmFtZSAqY24sIHN0cnVjdCBjb3JlZHVtcF9wYXJhbXMgKmNwcm0sXG4tLVxuZnMvY29yZWR1bXAuYy05NTYtXHRpZG1hcCA9IGZpbGVfbW50X2lkbWFwKGZpbGUpO1xuZnMvY29yZWR1bXAuYzo5NTc6XHRpZiAodmZzX2lub2RlX2lzX293bmVkX2J5X21lKGlkbWFwLCBpbm9kZSkgIT0gMCkge1xuZnMvY29yZWR1bXAuYy05NTgtXHRcdGNvcmVkdW1wX3JlcG9ydF9mYWlsdXJlKFwmIzM0O0NvcmUgZHVtcCB0byAlcyBhYm9ydGVkOiBjYW5ub3QgcHJlc2VydmUgZmlsZSBvd25lclwmIzM0OywgY24tXHUwMDNlY29yZW5hbWUpO1xuLS1cbmZzL2lub2RlLmM9Mjc1Mz1ib29sIGlub2RlX293bmVyX29yX2NhcGFibGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4tLVxuZnMvaW5vZGUuYy0yNzU4LVxuZnMvaW5vZGUuYzoyNzU5Olx0cmV0ID0gdmZzX2lub2RlX2lzX293bmVkX2J5X21lKGlkbWFwLCBpbm9kZSk7XG5mcy9pbm9kZS5jLTI3NjAtXHRpZiAocmV0ID09IDApXG4tLVxuZnMvaW50ZXJuYWwuaD00OT1leHRlcm4gaW50IGZpbmlzaF9jbGVhbl9jb250ZXh0KHN0cnVjdCBmc19jb250ZXh0ICpmYyk7XG4tLVxuZnMvaW50ZXJuYWwuaC01My0gKi9cbmZzL2ludGVybmFsLmg6NTQ6aW50IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSk7XG5mcy9pbnRlcm5hbC5oLTU1LWV4dGVybiBpbnQgZmlsZW5hbWVfbG9va3VwKGludCBkZmQsIHN0cnVjdCBmaWxlbmFtZSAqbmFtZSwgdW5zaWduZWQgZmxhZ3MsXG4tLVxuZnMvbG9ja3MuYz0yMTM3PXZmc19zZXRsZWFzZShzdHJ1Y3QgZmlsZSAqZmlscCwgaW50IGFyZywgc3RydWN0IGZpbGVfbGVhc2UgKipsZWFzZSwgdm9pZCAqKnByaXYpXG4tLVxuZnMvbG9ja3MuYy0yMTQxLVxuZnMvbG9ja3MuYzoyMTQyOlx0ZXJyb3IgPSB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWUoZmlsZV9tbnRfaWRtYXAoZmlscCksIGlub2RlKTtcbmZzL2xvY2tzLmMtMjE0My1cdGlmIChlcnJvciBcdTAwM2MgMClcbi0tXG5mcy9uYW1laS5jPTEyNTQ9ZnNfaW5pdGNhbGwoaW5pdF9mc19uYW1laV9zeXNjdGxzKTtcbi0tXG5mcy9uYW1laS5jLTEyNjItICovXG5mcy9uYW1laS5jOjEyNjM6aW50IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSlcbmZzL25hbWVpLmMtMTI2NC17XG4tLVxuZnMvbmFtZWkuYz0xMzQwPXN0YXRpYyBpbmxpbmUgaW50IG1heV9mb2xsb3dfbGluayhzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgc3RydWN0IGlub2RlICppbm9kZSlcbi0tXG5mcy9uYW1laS5jLTEzNTMtXHQvKiBBbGxvd2VkIGlmIG93bmVyIGFuZCBmb2xsb3dlciBtYXRjaC4gKi9cbmZzL25hbWVpLmM6MTM1NDpcdHJldCA9IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShpZG1hcCwgaW5vZGUpO1xuZnMvbmFtZWkuYy0xMzU1LVx0aWYgKHJldCBcdTAwM2M9IDApXG4tLVxuZnMvbmFtZWkuYz0xNTA5PXN0YXRpYyBpbnQgbWF5X2NyZWF0ZV9pbl9zdGlja3koc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBuYW1laWRhdGEgKm5kLFxuLS1cbmZzL25hbWVpLmMtMTUyNy1cbmZzL25hbWVpLmM6MTUyODpcdHJldCA9IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShpZG1hcCwgaW5vZGUpO1xuZnMvbmFtZWkuYy0xNTI5LVx0aWYgKHJldCBcdTAwM2M9IDApXG4tLVxuZnMvbmFtZWkuYz0zNzQ0PWludCBfX2NoZWNrX3N0aWNreShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4tLVxuZnMvbmFtZWkuYy0zNzQ4LVxuZnMvbmFtZWkuYzozNzQ5Olx0cmV0ID0gdmZzX2lub2RlX2lzX293bmVkX2J5X21lKGlkbWFwLCBpbm9kZSk7XG5mcy9uYW1laS5jLTM3NTAtXHRpZiAocmV0IFx1MDAzYz0gMClcbi0tXG5mcy9yZW1hcF9yYW5nZS5jPTQxNj1zdGF0aWMgaW50IG1heV9kZWR1cGVfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSlcbi0tXG5mcy9yZW1hcF9yYW5nZS5jLTQyNS1cdFx0cmV0dXJuIDA7XG5mcy9yZW1hcF9yYW5nZS5jOjQyNjpcdHJldCA9IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShpZG1hcCwgaW5vZGUpO1xuZnMvcmVtYXBfcmFuZ2UuYy00MjctXHRpZiAocmV0IFx1MDAzYz0gMClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwMzozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTUxNwoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDk2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgZnVuY3Rpb25zLgoKKipJbml0aWFsIENvbnNpZGVyYXRpb25zIGZvciBGaWxlIE93bmVyc2hpcCBhbmQgTGVhc2UgTWFuYWdlbWVudCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGVzZSBmdW5jdGlvbnMuIE15IGluaXRpYWwgZm9jdXMgaXMgb24gZmlsZSBvd25lcnNoaXAsIGxlYXNlIG1hbmFnZW1lbnQsIGFuZCBhY2Nlc3MgY29udHJvbC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIHBpZWNlcyBmaXQgdG9nZXRoZXIgaW4gYSBmaWxlIHN5c3RlbSBjb250ZXh0LiBUaGUgY29yZSBmdW5jdGlvbnMgSSYjMzk7bSB0aGlua2luZyBhYm91dCBhcmU6IGB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWVgLCBgYWZzX2lzX293bmVkX2J5X21lYCwgYGFmc19oYXZlX3NhbWVfb3duZXJgLCBgaW5vZGVfb3duZXJfb3JfY2FwYWJsZWAsIGB2ZnNfc2V0bGVhc2VgLCBhbmQgYF9fY2hlY2tfc3RpY2t5YC4KCkZpcnN0LCBhIHF1aWNrIGNoZWNrLi4uIEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgYGFmc19pc19vd25lZF9ieV9tZWAgaXMgZXhwb3J0ZWQgb3Igc3RhdGljLiBLbm93aW5nIHRoaXMgaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyBpdHMgc2NvcGUgYW5kIGhvdyBpdCYjMzk7cyBpbnRlbmRlZCB0byBiZSB1c2VkIHdpdGhpbiB0aGUgYnJvYWRlciBzeXN0ZW0uIEkmIzM5O2xsIG5lZWQgdG8gbG9vayB0aGF0IHVwLiBJIG5lZWQgdG8gYmUgYXdhcmUgb2YgdGhlIGNvbnRleHQgb2YgdGhpcyBmdW5jdGlvbiwgc2luY2UgaXQgaXMgbmFtZWQgJiMzNDthZnMmIzM0OyB3aGljaCBsaWtlbHkgcmVmZXJzIHRvIEFuZHJldyBGaWxlIFN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwMzozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthZnNfaXNfb3duZWRfYnlfbWUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvYWZzL2Rpci5jPTYwPWNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGFmc19kaXJfaW5vZGVfb3BlcmF0aW9ucyA9IHtcbi0tXG5mcy9hZnMvZGlyLmMtNzEtXHQuc2V0YXR0clx0PSBhZnNfc2V0YXR0cixcbmZzL2Fmcy9kaXIuYzo3MjpcdC5pc19vd25lZF9ieV9tZVx0PSBhZnNfaXNfb3duZWRfYnlfbWUsXG5mcy9hZnMvZGlyLmMtNzMtXHQuaGF2ZV9zYW1lX293bmVyID0gYWZzX2hhdmVfc2FtZV9vd25lcixcbi0tXG5mcy9hZnMvZmlsZS5jPTQ4PWNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGFmc19maWxlX2lub2RlX29wZXJhdGlvbnMgPSB7XG4tLVxuZnMvYWZzL2ZpbGUuYy01MS1cdC5wZXJtaXNzaW9uXHQ9IGFmc19wZXJtaXNzaW9uLFxuZnMvYWZzL2ZpbGUuYzo1MjpcdC5pc19vd25lZF9ieV9tZVx0PSBhZnNfaXNfb3duZWRfYnlfbWUsXG5mcy9hZnMvZmlsZS5jLTUzLVx0LmhhdmVfc2FtZV9vd25lciA9IGFmc19oYXZlX3NhbWVfb3duZXIsXG4tLVxuZnMvYWZzL2ludGVybmFsLmg9MTU0MT1leHRlcm4gaW50IGFmc19wZXJtaXNzaW9uKHN0cnVjdCBtbnRfaWRtYXAgKiwgc3RydWN0IGlub2RlICosIGludCk7XG5mcy9hZnMvaW50ZXJuYWwuaDoxNTQyOmludCBhZnNfaXNfb3duZWRfYnlfbWUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xuZnMvYWZzL2ludGVybmFsLmgtMTU0My1pbnQgYWZzX2hhdmVfc2FtZV9vd25lcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZTEsXG4tLVxuZnMvYWZzL3NlY3VyaXR5LmM9NDMxPWludCBhZnNfcGVybWlzc2lvbihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9hZnMvc2VjdXJpdHkuYy01MTgtICovXG5mcy9hZnMvc2VjdXJpdHkuYzo1MTk6aW50IGFmc19pc19vd25lZF9ieV9tZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSlcbmZzL2Fmcy9zZWN1cml0eS5jLTUyMC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDM6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYzMTgKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA2MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgQUZTIE93bmVyc2hpcCBDaGVja3MqKgoKUmlnaHQsIHNvIEkmIzM5O3ZlIGNvbmZpcm1lZCB0aGF0IGBhZnNfaXNfb3duZWRfYnlfbWVgIGFuZCBgYWZzX2hhdmVfc2FtZV9vd25lcmAgYXJlICpub3QqIHN0YXRpYywgYXMgZXhwZWN0ZWQuIE5vdywgbXkgbmV4dCBzdGVwIGlzIHRvIHF1aWNrbHkgdmVyaWZ5IGlmIHRoZSBidWlsZCBwcm9jZXNzIG5lZWRzIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIG9wdGlvbnMgZW5hYmxlZCB0byBjb3JyZWN0bHkgY29tcGlsZSBhbmQgbGluayB0aGlzIGNvZGUuIExvb2tpbmcgYXQgdGhlIGNvZGUgcGF0aCwgaXQmIzM5O3MgcHJldHR5IGNsZWFyIHRoYXQgdGhpcyBsaXZlcyB3aXRoaW4gYGZzL2Fmcy9gLCB3aGljaCBzY3JlYW1zIHRoYXQgd2UmIzM5O2xsIGxpa2VseSBuZWVkIGBDT05GSUdfQUZTX0ZTYCBkZWZpbmVkLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgcHJlcmVxdWlzaXRlIGlzIG1ldCB0byBjb250aW51ZSBteSBhbmFseXNpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwMzozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQUZTX0ZTJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2Fmcy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5mcy9hZnMvS2NvbmZpZzoyOmNvbmZpZyBBRlNfRlNcbmZzL2Fmcy9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtBbmRyZXcgRmlsZSBTeXN0ZW0gc3VwcG9ydCAoQUZTKVwmIzM0O1xuLS1cbmZzL2Fmcy9LY29uZmlnPTE3PWNvbmZpZyBBRlNfREVCVUdcbi0tXG5mcy9hZnMvS2NvbmZpZy0yNi1cbmZzL2Fmcy9LY29uZmlnOjI3OmNvbmZpZyBBRlNfRlNDQUNIRVxuZnMvYWZzL0tjb25maWctMjgtXHRib29sIFwmIzM0O1Byb3ZpZGUgQUZTIGNsaWVudCBjYWNoaW5nIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwMzozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjY4NQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhlIGNvZGU6CgoqKkNoZWNraW5nIEFGUyBLZXJuZWwgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGRlcGVuZGVuY2llcyByZWxhdGVkIHRvIHRoZSBBRlMgKEFuZHJldyBGaWxlIFN5c3RlbSkgZmlsZXN5c3RlbSB3aXRoaW4gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLiBJJiMzOTtsbCBzdGFydCBieSB0YWtpbmcgYSBsb29rIGF0IGBmcy9hZnMvS2NvbmZpZ2AuIFRoaXMgZmlsZSBzaG91bGQgY29udGFpbiB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZ29pbmcgdG8gZm9jdXMgb24gd2hlcmUgdGhlIGBBRlNfRlNgIG9wdGlvbiBpcyBkZWZpbmVkIGFuZCBhbnkgZGVwZW5kZW5jaWVzIGl0IG1pZ2h0IGhhdmUuIFVuZGVyc3RhbmRpbmcgdGhlc2UgZGVwZW5kZW5jaWVzIGlzIGNydWNpYWwuIEl0IHRlbGxzIG1lIHdoaWNoIG90aGVyIGtlcm5lbCBmZWF0dXJlcyBuZWVkIHRvIGJlIGVuYWJsZWQgb3IgYXJlIHJlcXVpcmVkIGZvciBBRlMgc3VwcG9ydCB0byBiZSBidWlsdC4gS25vd2luZyB0aGlzIGFsbG93cyBmb3IgbWFraW5nIHRoZSBuZWNlc3NhcnkgY2hvaWNlcyB0byBjb25maWd1cmUgYSBrZXJuZWwgd2l0aCBBRlMgc3VwcG9ydC4gVGhpcyB3aWxsIGdpdmUgbWUgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQgbmVlZHMgdG8gYmUgZW5hYmxlZCBpbiBvcmRlciB0byBtYWtlIEFGUyBhdmFpbGFibGUsIGFuZCBob3cgaXQgaXMgaW50ZWdyYXRlZCBpbiB0aGUga2VybmVsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwMzozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2Fmcy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0Y29uZmlnIEFGU19GU1xuICAgMzpcdFx0dHJpc3RhdGUgXCYjMzQ7QW5kcmV3IEZpbGUgU3lzdGVtIHN1cHBvcnQgKEFGUylcJiMzNDtcbiAgIDQ6XHRcdGRlcGVuZHMgb24gSU5FVFxuICAgNTpcdFx0c2VsZWN0IEFGX1JYUlBDXG4gICA2Olx0XHRzZWxlY3QgRE5TX1JFU09MVkVSXG4gICA3Olx0XHRzZWxlY3QgTkVURlNfU1VQUE9SVFxuICAgODpcdFx0c2VsZWN0IENSWVBUT19LUkI1XG4gICA5Olx0XHRoZWxwXG4gIDEwOlx0XHQgIElmIHlvdSBzYXkgWSBoZXJlLCB5b3Ugd2lsbCBnZXQgYW4gZXhwZXJpbWVudGFsIEFuZHJldyBGaWxlIFN5c3RlbVxuICAxMTpcdFx0ICBkcml2ZXIuIEl0IGN1cnJlbnRseSBvbmx5IHN1cHBvcnRzIHVuc2VjdXJlZCByZWFkLW9ubHkgQUZTIGFjY2Vzcy5cbiAgMTI6XHRcbiAgMTM6XHRcdCAgU2VlIFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9hZnMucnN0XHUwMDNlIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICAxNDpcdFxuICAxNTpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuICAxNjpcdFxuICAxNzpcdGNvbmZpZyBBRlNfREVCVUdcbiAgMTg6XHRcdGJvb2wgXCYjMzQ7QUZTIGR5bmFtaWMgZGVidWdnaW5nXCYjMzQ7XG4gIDE5Olx0XHRkZXBlbmRzIG9uIEFGU19GU1xuICAyMDpcdFx0aGVscFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwMzozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzE3MgoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDE5OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBDb25maWd1cmF0aW9uIFdvcmtmbG93KioKCk9rYXksIHNvIEkgc2VlIHRoYXQgdGhlIGBBRlNfRlNgIGZpbGVzeXN0ZW0gY2xlYXJseSBoYXMgYSBkZXBlbmRlbmN5IG9uIGBJTkVUYC4gVGhhdCBtYWtlcyBzZW5zZS4gVGhlcmVmb3JlLCB0aGUgaW1tZWRpYXRlIGFjdGlvbiBpcyB0byBhZGQgYEFGU19GU2AgdG8gYEVuYWJsZUNvbmZpZ3NgIHRvIGVuc3VyZSBpdCBnZXRzIGJ1aWx0IGNvcnJlY3RseSBhbG9uZyB3aXRoIGl0cyBuZXR3b3JraW5nIGRlcGVuZGVuY2llcy4KCk5vdywgbGV0JiMzOTtzIHRha2UgYSBicm9hZGVyIGxvb2suIEFyZSB0aGVyZSBhbnkgb3RoZXIgY29uZmlndXJhdGlvbiBpdGVtcyB0aGF0IG5lZWQgYXR0ZW50aW9uPyBJIG5lZWQgdG8gcmV2aWV3IHRoZSBjb2RlIGNoYW5nZXMgYW5kIGRldGVybWluZSBpZiB0aGV5IHJlcXVpcmUgYWRkaXRpb25hbCBjb25maWd1cmF0aW9uIGZsYWdzLgoKTG9va2luZyBhdCB0aGUgY2hhbmdlcyBpbiBgZnMvbmFtZWkuY2AsIGBmcy9hdHRyLmNgLCBgZnMvY29yZWR1bXAuY2AsIGBmcy9pbm9kZS5jYCwgYGZzL2xvY2tzLmNgLCBhbmQgYGZzL3JlbWFwX3JhbmdlLmNgLCB0aGV5JiMzOTtyZSBhbGwgY29yZSBWRlMgbW9kaWZpY2F0aW9ucy4gVGhlc2UgYXJlIGZ1bmRhbWVudGFsIGZpbGVzeXN0ZW0gb3BlcmF0aW9ucyBhbmQgZG9uJiMzOTt0IHNlZW0gdG8gd2FycmFudCBhIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBUaGV54oCZcmUgcGFydCBvZiB0aGUgYmFzZSBWRlMgYW5kIHNob3VsZCBqdXN0IHdvcmsuCgpOZXh0LCBJIG5lZWQgdG8gY2hlY2sgdGhlIHNjb3BlIG9mIHRoZSBmdW5jdGlvbiBgdmZzX2lub2RlX2lzX293bmVkX2J5X21lYC4gSXMgaXQgZXhwb3J0ZWQ/IEkgc2VlIGl04oCZcyBkZWNsYXJlZCBpbiBgZnMvaW50ZXJuYWwuaGAuIFRoYXQgbWVhbnMgaXQmIzM5O3Mgbm90IGV4cG9ydGVkIHRvIG1vZHVsZXMsIHdoaWNoIGlzIGdlbmVyYWxseSB3aGF0IEkgd291bGQgZXhwZWN0IGZvciBhIGZ1bmN0aW9uIG9mIHRoaXMgbmF0dXJlLiBIb3dldmVyLCBpdCAqaXMqIGEgbm9uLXN0YXRpYyBmdW5jdGlvbiB3aXRoaW4gdGhlIGtlcm5lbCBjb3JlLCBzbyBpdCYjMzk7cyBhY2Nlc3NpYmxlIGludGVybmFsbHkuCgpGaW5hbGx5LCBJIHdpbGwgY2hlY2sgdGhlIHJlbWFpbmluZyBmdW5jdGlvbnMgb2YgaW50ZXJlc3QuIEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgYHZmc19pbm9kZV9hbmRfZGlyX2hhdmVfc2FtZV9vd25lcmAgYW5kIGB2ZnNfaW5vZGVzX2hhdmVfc2FtZV9vd25lcmAgYXJlIHN0YXRpYyBmdW5jdGlvbnMuIFRoaXMgd2lsbCBpbmZsdWVuY2UgaG93IGFuZCB3aGVyZSB0aGV5IGNhbiBiZSB1c2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwMzozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2ZnNfaW5vZGVfYW5kX2Rpcl9oYXZlX3NhbWVfb3duZXImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvbmFtZWkuYz0xMjYzPWludCB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4tLVxuZnMvbmFtZWkuYy0xMjc2LSAqL1xuZnMvbmFtZWkuYzoxMjc3OnN0YXRpYyBpbnQgdmZzX2lub2RlX2FuZF9kaXJfaGF2ZV9zYW1lX293bmVyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuZnMvbmFtZWkuYy0xMjc4LVx0XHRcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBuYW1laWRhdGEgKm5kKVxuLS1cbmZzL25hbWVpLmM9MTM0MD1zdGF0aWMgaW5saW5lIGludCBtYXlfZm9sbG93X2xpbmsoc3RydWN0IG5hbWVpZGF0YSAqbmQsIHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4tLVxuZnMvbmFtZWkuYy0xMzU4LVx0LyogQWxsb3dlZCBpZiBwYXJlbnQgZGlyZWN0b3J5IGFuZCBsaW5rIG93bmVyIG1hdGNoLiAqL1xuZnMvbmFtZWkuYzoxMzU5Olx0cmV0ID0gdmZzX2lub2RlX2FuZF9kaXJfaGF2ZV9zYW1lX293bmVyKGlkbWFwLCBpbm9kZSwgbmQpO1xuZnMvbmFtZWkuYy0xMzYwLVx0aWYgKHJldCBcdTAwM2M9IDApXG4tLVxuZnMvbmFtZWkuYz0xNTA5PXN0YXRpYyBpbnQgbWF5X2NyZWF0ZV9pbl9zdGlja3koc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBuYW1laWRhdGEgKm5kLFxuLS1cbmZzL25hbWVpLmMtMTUyMy1cbmZzL25hbWVpLmM6MTUyNDpcdHJldCA9IHZmc19pbm9kZV9hbmRfZGlyX2hhdmVfc2FtZV9vd25lcihpZG1hcCwgaW5vZGUsIG5kKTtcbmZzL25hbWVpLmMtMTUyNS1cdGlmIChyZXQgXHUwMDNjPSAwKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwMzozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODExNgoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDExOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZSwgdGhlIHN0YXRpYyBuYXR1cmUgb2YgdGhlc2UgdGhpbmdzLi4uIHJpZ2h0LiBTbywgdGhlIGtleSBmb2N1cyBzeW1ib2xzIEkgbmVlZCB0byB6ZXJvIGluIG9uIGFyZToKCioqRm9jdXMgU3ltYm9scyBJZGVudGlmaWVkKioKCkkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvOgoKKiAgIGB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWVgCiogICBgYWZzX2lzX293bmVkX2J5X21lYAoqICAgYGFmc19oYXZlX3NhbWVfb3duZXJgCiogICBgaW5vZGVfb3duZXJfb3JfY2FwYWJsZWAKKiAgIGB2ZnNfc2V0bGVhc2VgCiogICBgX19jaGVja19zdGlja3lgCgoqSG1tLCBgdmZzX3NldGxlYXNlYCBpcyBhIHJhdGhlciBsYXJnZSBmdW5jdGlvbiwgYnV0IEkgYW0gbm90IGFzIHdvcnJpZWQgbm93LioKCkxldCBtZSBxdWlja2x5IHZlcmlmeSBpZiBgX19jaGVja19zdGlja3lgIGlzIGV4cG9ydGVkLiBUaGF0JiMzOTtzIHRoZSBvbmUgSSYjMzk7bSBhIGxpdHRsZSBsZXNzIGZhbWlsaWFyIHdpdGgsIHNvIEkgbmVlZCB0byBtYWtlIHN1cmUgaXQmIzM5O3MgYWNjZXNzaWJsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDM6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19jaGVja19zdGlja3kmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvbmFtZWkuYz0zNzQyPUVYUE9SVF9TWU1CT0wodXNlcl9wYXRoX2F0KTtcbmZzL25hbWVpLmMtMzc0My1cbmZzL25hbWVpLmM6Mzc0NDppbnQgX19jaGVja19zdGlja3koc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuZnMvbmFtZWkuYy0zNzQ1LVx0XHQgICBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLS1cbmZzL25hbWVpLmMtMzc1Ni19XG5mcy9uYW1laS5jOjM3NTc6RVhQT1JUX1NZTUJPTChfX2NoZWNrX3N0aWNreSk7XG5mcy9uYW1laS5jLTM3NTgtXG4tLVxuaW5jbHVkZS9saW51eC9mcy5oPTI3MDI9c3RhdGljIGlubGluZSBpbnQgcGF0aF9wZXJtaXNzaW9uKGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoLCBpbnQgbWFzaylcbi0tXG5pbmNsdWRlL2xpbnV4L2ZzLmgtMjcwNi19XG5pbmNsdWRlL2xpbnV4L2ZzLmg6MjcwNzppbnQgX19jaGVja19zdGlja3koc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuaW5jbHVkZS9saW51eC9mcy5oLTI3MDgtXHRcdCAgIHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xuLS1cbmluY2x1ZGUvbGludXgvZnMuaD0zNTY0PXN0YXRpYyBpbmxpbmUgaW50IGNoZWNrX3N0aWNreShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbi0tXG5pbmNsdWRlL2xpbnV4L2ZzLmgtMzU2OS1cbmluY2x1ZGUvbGludXgvZnMuaDozNTcwOlx0cmV0dXJuIF9fY2hlY2tfc3RpY2t5KGlkbWFwLCBkaXIsIGlub2RlKTtcbmluY2x1ZGUvbGludXgvZnMuaC0zNTcxLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDM6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg3ODgKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIEV4cG9ydGVkIFN0YXRlKioKClJpZ2h0LCBzbyB0aGUgc3lzdGVtIGluZGljYXRlcyB0aGUgZGF0YSBpcywgaW4gZmFjdCwgYmVpbmcgZXhwb3J0ZWQuIE5vdywgbXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgc2VjdXJpdHksIG5hdHVyYWxseS4gV2UgbmVlZCB0byBjb25maXJtICpob3cqIHRoaXMgZXhwb3J0IGlzIGhhcHBlbmluZyBhbmQsIGNyaXRpY2FsbHksIHdobyBoYXMgYWNjZXNzIGFuZCBob3cgdGhhdCBhY2Nlc3MgaXMgbWFuYWdlZC4gVGhlIGZpcnN0IHBsYWNlIEkmIzM5O20gZ29pbmcgdG8gbG9vayBpcyBgaW5vZGVfb3duZXJfb3JfY2FwYWJsZWAuIFRoaXMgZnVuY3Rpb24sIG9yIGEgc2ltaWxhciBvbmUgaW4gdGhlIHJlbGV2YW50IGtlcm5lbCBjb250ZXh0LCBpcyBjcnVjaWFsIGZvciBhc3Nlc3NpbmcgYWNjZXNzIGNvbnRyb2wuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoZSBhcHByb3ByaWF0ZSBjaGVja3MgYXJlIGJlaW5nIHBlcmZvcm1lZCB0byBlbnN1cmUgdGhhdCBvbmx5IGF1dGhvcml6ZWQgdXNlcnMgb3IgcHJvY2Vzc2VzIGFyZSBpbnRlcmFjdGluZyB3aXRoIHRoaXMgZXhwb3J0ZWQgZGF0YS4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIHRoYXQgYGlub2RlX293bmVyX29yX2NhcGFibGVgIChvciB3aGF0ZXZlciBpdCYjMzk7cyBjYWxsZWQpIGlzIGNvcnJlY3RseSBoYW5kbGluZyBwZXJtaXNzaW9ucywgY2FwYWJpbGl0aWVzLCBhbmQgcG90ZW50aWFsbHkgZXh0ZW5kZWQgYXR0cmlidXRlcy4gV2UgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gdGhlIGV4cG9ydCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IGV4cGxvaXRhYmxlIHZ1bG5lcmFiaWxpdGllcyByZWxhdGVkIHRvIHByaXZpbGVnZSBlc2NhbGF0aW9uIG9yIHVuYXV0aG9yaXplZCBkYXRhIGFjY2Vzcy4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBjb2RlIGFyb3VuZCB0aGF0IGZ1bmN0aW9uIHRlbGxzIHVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwMzozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbm9kZV9vd25lcl9vcl9jYXBhYmxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzLzlwL2FjbC5jPTE1NT1pbnQgdjlmc19pb3Bfc2V0X2FjbChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLS1cbmZzLzlwL2FjbC5jLTE5Mi1cbmZzLzlwL2FjbC5jOjE5MzpcdGlmICghaW5vZGVfb3duZXJfb3JfY2FwYWJsZShcdTAwMjZub3BfbW50X2lkbWFwLCBpbm9kZSkpIHtcbmZzLzlwL2FjbC5jLTE5NC1cdFx0cmV0dmFsID0gLUVQRVJNO1xuLS1cbmZzL2F0dHIuYz0xNjg9aW50IHNldGF0dHJfcHJlcGFyZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLS1cbmZzL2F0dHIuYy0yMTYtXG5mcy9hdHRyLmM6MjE3Olx0XHRpZiAoIWlub2RlX293bmVyX29yX2NhcGFibGUoaWRtYXAsIGlub2RlKSlcbmZzL2F0dHIuYy0yMTgtXHRcdFx0cmV0dXJuIC1FUEVSTTtcbi0tXG5mcy9hdHRyLmMtMjMxLVx0aWYgKGlhX3ZhbGlkIFx1MDAyNiAoQVRUUl9NVElNRV9TRVQgfCBBVFRSX0FUSU1FX1NFVCB8IEFUVFJfVElNRVNfU0VUKSkge1xuZnMvYXR0ci5jOjIzMjpcdFx0aWYgKCFpbm9kZV9vd25lcl9vcl9jYXBhYmxlKGlkbWFwLCBpbm9kZSkpXG5mcy9hdHRyLmMtMjMzLVx0XHRcdHJldHVybiAtRVBFUk07XG4tLVxuZnMvYXR0ci5jPTM4ND1pbnQgbWF5X3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxuZnMvYXR0ci5jLTQwMS1cbmZzL2F0dHIuYzo0MDI6XHRcdGlmICghaW5vZGVfb3duZXJfb3JfY2FwYWJsZShpZG1hcCwgaW5vZGUpKSB7XG5mcy9hdHRyLmMtNDAzLVx0XHRcdGVycm9yID0gaW5vZGVfcGVybWlzc2lvbihpZG1hcCwgaW5vZGUsIE1BWV9XUklURSk7XG4tLVxuZnMvYnRyZnMvaW9jdGwuYz0xMTM4PXN0YXRpYyBub2lubGluZSBpbnQgX19idHJmc19pb2N0bF9zbmFwX2NyZWF0ZShzdHJ1Y3QgZmlsZSAqZmlsZSxcbi0tXG5mcy9idHJmcy9pb2N0bC5jLTExODAtXHRcdFx0cmV0ID0gLUVYREVWO1xuZnMvYnRyZnMvaW9jdGwuYzoxMTgxOlx0XHR9IGVsc2UgaWYgKCFpbm9kZV9vd25lcl9vcl9jYXBhYmxlKGlkbWFwLCBzcmNfaW5vZGUpKSB7XG5mcy9idHJmcy9pb2N0bC5jLTExODItXHRcdFx0Lypcbi0tXG5mcy9idHJmcy9pb2N0bC5jPTEyOTQ9c3RhdGljIG5vaW5saW5lIGludCBidHJmc19pb2N0bF9zdWJ2b2xfc2V0ZmxhZ3Moc3RydWN0IGZpbGUgKmZpbGUsXG4tLVxuZnMvYnRyZnMvaW9jdGwuYy0xMzA0LVxuZnMvYnRyZnMvaW9jdGwuYzoxMzA1Olx0aWYgKCFpbm9kZV9vd25lcl9vcl9jYXBhYmxlKGZpbGVfbW50X2lkbWFwKGZpbGUpLCBpbm9kZSkpXG5mcy9idHJmcy9pb2N0bC5jLTEzMDYtXHRcdHJldHVybiAtRVBFUk07XG4tLVxuZnMvYnRyZnMvaW9jdGwuYz0zODUzPXN0YXRpYyBsb25nIF9idHJmc19pb2N0bF9zZXRfcmVjZWl2ZWRfc3Vidm9sKHN0cnVjdCBmaWxlICpmaWxlLFxuLS1cbmZzL2J0cmZzL2lvY3RsLmMtMzg2NS1cbmZzL2J0cmZzL2lvY3RsLmM6Mzg2NjpcdGlmICghaW5vZGVfb3duZXJfb3JfY2FwYWJsZShpZG1hcCwgaW5vZGUpKVxuZnMvYnRyZnMvaW9jdGwuYy0zODY3LVx0XHRyZXR1cm4gLUVQRVJNO1xuLS1cbmZzL2NyeXB0by9wb2xpY3kuYz01MDU9aW50IGZzY3J5cHRfaW9jdGxfc2V0X3BvbGljeShzdHJ1Y3QgZmlsZSAqZmlscCwgY29uc3Qgdm9pZCBfX3VzZXIgKmFyZylcbi0tXG5mcy9jcnlwdG8vcG9saWN5LmMtNTM2LVxuZnMvY3J5cHRvL3BvbGljeS5jOjUzNzpcdGlmICghaW5vZGVfb3duZXJfb3JfY2FwYWJsZShcdTAwMjZub3BfbW50X2lkbWFwLCBpbm9kZSkpXG5mcy9jcnlwdG8vcG9saWN5LmMtNTM4LVx0XHRyZXR1cm4gLUVBQ0NFUztcbi0tXG5mcy9leHQyL2lvY3RsLmM9NTQ9bG9uZyBleHQyX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcbi0tXG5mcy9leHQyL2lvY3RsLmMtNjgtXG5mcy9leHQyL2lvY3RsLmM6Njk6XHRcdGlmICghaW5vZGVfb3duZXJfb3JfY2FwYWJsZShcdTAwMjZub3BfbW50X2lkbWFwLCBpbm9kZSkpXG5mcy9leHQyL2lvY3RsLmMtNzAtXHRcdFx0cmV0dXJuIC1FUEVSTTtcbi0tXG5mcy9leHQyL2lvY3RsLmMtMTAxLVxuZnMvZXh0Mi9pb2N0bC5jOjEwMjpcdFx0aWYgKCFpbm9kZV9vd25lcl9vcl9jYXBhYmxlKFx1MDAyNm5vcF9tbnRfaWRtYXAsIGlub2RlKSlcbmZzL2V4dDIvaW9jdGwuYy0xMDMtXHRcdFx0cmV0dXJuIC1FQUNDRVM7XG4tLVxuZnMvZXh0NC9pb2N0bC5jPTM3NT1zdGF0aWMgbG9uZyBzd2FwX2lub2RlX2Jvb3RfbG9hZGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4tLVxuZnMvZXh0NC9pb2N0bC5jLTQwNS1cdGlmIChJU19SRE9OTFkoaW5vZGUpIHx8IElTX0FQUEVORChpbm9kZSkgfHwgSVNfSU1NVVRBQkxFKGlub2RlKSB8fFxuZnMvZXh0NC9pb2N0bC5jOjQwNjpcdCAgICAhaW5vZGVfb3duZXJfb3JfY2FwYWJsZShpZG1hcCwgaW5vZGUpIHx8XG5mcy9leHQ0L2lvY3RsLmMtNDA3LVx0ICAgICFjYXBhYmxlKENBUF9TWVNfQURNSU4pKSB7XG4tLVxuZnMvZXh0NC9pb2N0bC5jPTE1Mzg9c3RhdGljIGxvbmcgX19leHQ0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcbi0tXG5mcy9leHQ0L2lvY3RsLmMtMTU1OC1cbmZzL2V4dDQvaW9jdGwuYzoxNTU5Olx0XHRpZiAoIWlub2RlX293bmVyX29yX2NhcGFibGUoaWRtYXAsIGlub2RlKSlcbmZzL2V4dDQvaW9jdGwuYy0xNTYwLVx0XHRcdHJldHVybiAtRVBFUk07XG4tLVxuZnMvZXh0NC9pb2N0bC5jLTE2ODgtXHRcdGludCBlcnI7XG5mcy9leHQ0L2lvY3RsLmM6MTY4OTpcdFx0aWYgKCFpbm9kZV9vd25lcl9vcl9jYXBhYmxlKGlkbWFwLCBpbm9kZSkpXG5mcy9leHQ0L2lvY3RsLmMtMTY5MC1cdFx0XHRyZXR1cm4gLUVBQ0NFUztcbi0tXG5mcy9leHQ0L2lvY3RsLmMtMTcxMC1cdFx0aW50IGVycjtcbmZzL2V4dDQvaW9jdGwuYzoxNzExOlx0XHRpZiAoIWlub2RlX293bmVyX29yX2NhcGFibGUoaWRtYXAsIGlub2RlKSlcbmZzL2V4dDQvaW9jdGwuYy0xNzEyLVx0XHRcdHJldHVybiAtRUFDQ0VTO1xuLS1cbmZzL2V4dDQvaW9jdGwuYy0xODYwLVx0e1xuZnMvZXh0NC9pb2N0bC5jOjE4NjE6XHRcdGlmICghaW5vZGVfb3duZXJfb3JfY2FwYWJsZShpZG1hcCwgaW5vZGUpKVxuZnMvZXh0NC9pb2N0bC5jLTE4NjItXHRcdFx0cmV0dXJuIC1FQUNDRVM7XG4tLVxuZnMvZjJmcy9maWxlLmM9MjI3OT1zdGF0aWMgaW50IGYyZnNfaW9jX3N0YXJ0X2F0b21pY193cml0ZShzdHJ1Y3QgZmlsZSAqZmlscCwgYm9vbCB0cnVuY2F0ZSlcbi0tXG5mcy9mMmZzL2ZpbGUuYy0yMjkwLVxuZnMvZjJmcy9maWxlLmM6MjI5MTpcdGlmICghaW5vZGVfb3duZXJfb3JfY2FwYWJsZShpZG1hcCwgaW5vZGUpKVxuZnMvZjJmcy9maWxlLmMtMjI5Mi1cdFx0cmV0dXJuIC1FQUNDRVM7XG4tLVxuZnMvZjJmcy9maWxlLmM9MjM5MT1zdGF0aWMgaW50IGYyZnNfaW9jX2NvbW1pdF9hdG9taWNfd3JpdGUoc3RydWN0IGZpbGUgKmZpbHApXG4tLVxuZnMvZjJmcy9maWxlLmMtMjM5OS1cbmZzL2YyZnMvZmlsZS5jOjI0MDA6XHRpZiAoIWlub2RlX293bmVyX29yX2NhcGFibGUoaWRtYXAsIGlub2RlKSlcbmZzL2YyZnMvZmlsZS5jLTI0MDEtXHRcdHJldHVybiAtRUFDQ0VTO1xuLS1cbmZzL2YyZnMvZmlsZS5jPTI0MjY9c3RhdGljIGludCBmMmZzX2lvY19hYm9ydF9hdG9taWNfd3JpdGUoc3RydWN0IGZpbGUgKmZpbHApXG4tLVxuZnMvZjJmcy9maWxlLmMtMjQzNC1cbmZzL2YyZnMvZmlsZS5jOjI0MzU6XHRpZiAoIWlub2RlX293bmVyX29yX2NhcGFibGUoaWRtYXAsIGlub2RlKSlcbmZzL2YyZnMvZmlsZS5jLTI0MzYtXHRcdHJldHVybiAtRUFDQ0VTO1xuLS1cbmZzL2YyZnMveGF0dHIuYz0xMTM9c3RhdGljIGludCBmMmZzX3hhdHRyX2FkdmlzZV9zZXQoY29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgKmhhbmRsZXIsXG4tLVxuZnMvZjJmcy94YXR0ci5jLTEyMS1cbmZzL2YyZnMveGF0dHIuYzoxMjI6XHRpZiAoIWlub2RlX293bmVyX29yX2NhcGFibGUoXHUwMDI2bm9wX21udF9pZG1hcCwgaW5vZGUpKVxuZnMvZjJmcy94YXR0ci5jLTEyMy1cdFx0cmV0dXJuIC1FUEVSTTtcbi0tXG5mcy9mY250bC5jPTM5PXN0YXRpYyBpbnQgc2V0ZmwoaW50IGZkLCBzdHJ1Y3QgZmlsZSAqIGZpbHAsIHVuc2lnbmVkIGludCBhcmcpXG4tLVxuZnMvZmNudGwuYy01Mi1cdGlmICgoYXJnIFx1MDAyNiBPX05PQVRJTUUpIFx1MDAyNlx1MDAyNiAhKGZpbHAtXHUwMDNlZl9mbGFncyBcdTAwMjYgT19OT0FUSU1FKSlcbmZzL2ZjbnRsLmM6NTM6XHRcdGlmICghaW5vZGVfb3duZXJfb3JfY2FwYWJsZShmaWxlX21udF9pZG1hcChmaWxwKSwgaW5vZGUpKVxuZnMvZmNudGwuYy01NC1cdFx0XHRyZXR1cm4gLUVQRVJNO1xuLS1cbmZzL2ZjbnRsLmM9MzY5PXN0YXRpYyBsb25nIGZjbnRsX3NldF9yd19oaW50KHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIGFyZylcbi0tXG5mcy9mY250bC5jLTM3NC1cbmZzL2ZjbnRsLmM6Mzc1Olx0aWYgKCFpbm9kZV9vd25lcl9vcl9jYXBhYmxlKGZpbGVfbW50X2lkbWFwKGZpbGUpLCBpbm9kZSkpXG5mcy9mY250bC5jLTM3Ni1cdFx0cmV0dXJuIC1FUEVSTTtcbi0tXG5mcy9maWxlX2F0dHIuYz0yNjg9aW50IHZmc19maWxlYXR0cl9zZXQoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbi0tXG5mcy9maWxlX2F0dHIuYy0yNzctXG5mcy9maWxlX2F0dHIuYzoyNzg6XHRpZiAoIWlub2RlX293bmVyX29yX2NhcGFibGUoaWRtYXAsIGlub2RlKSlcbmZzL2ZpbGVfYXR0ci5jLTI3OS1cdFx0cmV0dXJuIC1FUEVSTTtcbi0tXG5mcy9pbm9kZS5jPTI3Mzc9RVhQT1JUX1NZTUJPTChpbm9kZV9pbml0X293bmVyKTtcbi0tXG5mcy9pbm9kZS5jLTI3MzktLyoqXG5mcy9pbm9kZS5jOjI3NDA6ICogaW5vZGVfb3duZXJfb3JfY2FwYWJsZSAtIGNoZWNrIGN1cnJlbnQgdGFzayBwZXJtaXNzaW9ucyB0byBpbm9kZVxuZnMvaW5vZGUuYy0yNzQxLSAqIEBpZG1hcDogaWRtYXAgb2YgdGhlIG1vdW50IHRoZSBpbm9kZSB3YXMgZm91bmQgZnJvbVxuLS1cbmZzL2lub2RlLmMtMjc1Mi0gKi9cbmZzL2lub2RlLmM6Mjc1Mzpib29sIGlub2RlX293bmVyX29yX2NhcGFibGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUpXG5mcy9pbm9kZS5jLTI3NTQte1xuLS1cbmZzL2lub2RlLmMtMjc3MC19XG5mcy9pbm9kZS5jOjI3NzE6RVhQT1JUX1NZTUJPTChpbm9kZV9vd25lcl9vcl9jYXBhYmxlKTtcbmZzL2lub2RlLmMtMjc3Mi1cbi0tXG5mcy9uYW1laS5jPTE0Mjc9aW50IG1heV9saW5rYXQoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIGNvbnN0IHN0cnVjdCBwYXRoICpsaW5rKVxuLS1cbmZzL25hbWVpLmMtMTQ0Mi1cdGlmIChzYWZlX2hhcmRsaW5rX3NvdXJjZShpZG1hcCwgaW5vZGUpIHx8XG5mcy9uYW1laS5jOjE0NDM6XHQgICAgaW5vZGVfb3duZXJfb3JfY2FwYWJsZShpZG1hcCwgaW5vZGUpKVxuZnMvbmFtZWkuYy0xNDQ0LVx0XHRyZXR1cm4gMDtcbi0tXG5mcy9uYW1laS5jPTQzMzc9c3RhdGljIGludCBtYXlfb3BlbihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgY29uc3Qgc3RydWN0IHBhdGggKnBhdGgsXG4tLVxuZnMvbmFtZWkuYy00Mzg5LVx0LyogT19OT0FUSU1FIGNhbiBvbmx5IGJlIHNldCBieSB0aGUgb3duZXIgb3Igc3VwZXJ1c2VyICovXG5mcy9uYW1laS5jOjQzOTA6XHRpZiAoZmxhZyBcdTAwMjYgT19OT0FUSU1FIFx1MDAyNlx1MDAyNiAhaW5vZGVfb3duZXJfb3JfY2FwYWJsZShpZG1hcCwgaW5vZGUpKVxuZnMvbmFtZWkuYy00MzkxLVx0XHRyZXR1cm4gLUVQRVJNO1xuLS1cbmZzL292ZXJsYXlmcy9maWxlLmM9Mjg9c3RhdGljIHN0cnVjdCBmaWxlICpvdmxfb3Blbl9yZWFsZmlsZShjb25zdCBzdHJ1Y3QgZmlsZSAqZmlsZSxcbi0tXG5mcy9vdmVybGF5ZnMvZmlsZS5jLTQ3LVx0XHR9IGVsc2Uge1xuZnMvb3ZlcmxheWZzL2ZpbGUuYzo0ODpcdFx0XHRpZiAoIWlub2RlX293bmVyX29yX2NhcGFibGUocmVhbF9pZG1hcCwgcmVhbGlub2RlKSlcbmZzL292ZXJsYXlmcy9maWxlLmMtNDktXHRcdFx0XHRmbGFncyBcdTAwMjY9IH5PX05PQVRJTUU7XG4tLVxuZnMvb3ZlcmxheWZzL2lub2RlLmM9NTIzPWludCBvdmxfc2V0X2FjbChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLS1cbmZzL292ZXJsYXlmcy9pbm9kZS5jLTUzNi1cdFx0cmV0dXJuIGFjbCA/IC1FQUNDRVMgOiAwO1xuZnMvb3ZlcmxheWZzL2lub2RlLmM6NTM3Olx0aWYgKCFpbm9kZV9vd25lcl9vcl9jYXBhYmxlKFx1MDAyNm5vcF9tbnRfaWRtYXAsIGlub2RlKSlcbmZzL292ZXJsYXlmcy9pbm9kZS5jLTUzOC1cdFx0cmV0dXJuIC1FUEVSTTtcbi0tXG5mcy9vdmVybGF5ZnMvdXRpbC5jPTY1Nz1zdHJ1Y3QgZmlsZSAqb3ZsX3BhdGhfb3Blbihjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCwgaW50IGZsYWdzKVxuLS1cbmZzL292ZXJsYXlmcy91dGlsLmMtNjgxLVx0LyogT19OT0FUSU1FIGlzIGFuIG9wdGltaXphdGlvbiwgZG9uJiMzOTt0IGZhaWwgaWYgbm90IHBlcm1pdHRlZCAqL1xuZnMvb3ZlcmxheWZzL3V0aWwuYzo2ODI6XHRpZiAoaW5vZGVfb3duZXJfb3JfY2FwYWJsZShyZWFsX2lkbWFwLCBpbm9kZSkpXG5mcy9vdmVybGF5ZnMvdXRpbC5jLTY4My1cdFx0ZmxhZ3MgfD0gT19OT0FUSU1FO1xuLS1cbmZzL3Bvc2l4X2FjbC5jPTkzNT1zZXRfcG9zaXhfYWNsKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tLVxuZnMvcG9zaXhfYWNsLmMtOTQ2LVx0XHRyZXR1cm4gYWNsID8gLUVBQ0NFUyA6IDA7XG5mcy9wb3NpeF9hY2wuYzo5NDc6XHRpZiAoIWlub2RlX293bmVyX29yX2NhcGFibGUoaWRtYXAsIGlub2RlKSlcbmZzL3Bvc2l4X2FjbC5jLTk0OC1cdFx0cmV0dXJuIC1FUEVSTTtcbi0tXG5mcy94YXR0ci5jPTEyNj14YXR0cl9wZXJtaXNzaW9uKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLS1cbmZzL3hhdHRyLmMtMTY3LVx0XHRcdFx0YnJlYWs7XG5mcy94YXR0ci5jOjE2ODpcdFx0XHRpZiAoaW5vZGVfb3duZXJfb3JfY2FwYWJsZShpZG1hcCwgaW5vZGUpKVxuZnMveGF0dHIuYy0xNjktXHRcdFx0XHRicmVhaztcbi0tXG5pbmNsdWRlL2xpbnV4L2ZzLmg9MTc1Mj1zdGF0aWMgaW5saW5lIGJvb2wgZmlsZV93cml0ZV9ub3Rfc3RhcnRlZChjb25zdCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbi0tXG5pbmNsdWRlL2xpbnV4L2ZzLmgtMTc1OC1cbmluY2x1ZGUvbGludXgvZnMuaDoxNzU5OmJvb2wgaW5vZGVfb3duZXJfb3JfY2FwYWJsZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSk7XG5pbmNsdWRlL2xpbnV4L2ZzLmgtMTc2MC1cbi0tXG5pbmNsdWRlL2xpbnV4L2ZzLmg9MjQ1MD1zdGF0aWMgaW5saW5lIGJvb2wgZmlsZV9vd25lcl9vcl9jYXBhYmxlKGNvbnN0IHN0cnVjdCBmaWxlICpmaWxlKVxuaW5jbHVkZS9saW51eC9mcy5oLTI0NTEte1xuaW5jbHVkZS9saW51eC9mcy5oOjI0NTI6XHRyZXR1cm4gaW5vZGVfb3duZXJfb3JfY2FwYWJsZShmaWxlX21udF9pZG1hcChmaWxlKSwgZmlsZV9pbm9kZShmaWxlKSk7XG5pbmNsdWRlL2xpbnV4L2ZzLmgtMjQ1My19XG4tLVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jPTMzNjg9c3RhdGljIGludCBzZWxpbnV4X2lub2RlX3NldHhhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuLS1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0zMzgzLVx0aWYgKCFzZWxpbnV4X2luaXRpYWxpemVkKCkpXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6MzM4NDpcdFx0cmV0dXJuIChpbm9kZV9vd25lcl9vcl9jYXBhYmxlKGlkbWFwLCBpbm9kZSkgPyAwIDogLUVQRVJNKTtcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0zMzg1LVxuLS1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0zMzg5LVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjMzOTA6XHRpZiAoIWlub2RlX293bmVyX29yX2NhcGFibGUoaWRtYXAsIGlub2RlKSlcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0zMzkxLVx0XHRyZXR1cm4gLUVQRVJNO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwMzozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjczOAoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkFuYWx5emluZyBgaW5vZGVfb3duZXJfb3JfY2FwYWJsZWAgVXNhZ2UqKgoKUmlnaHQsIHNvIGBpbm9kZV9vd25lcl9vcl9jYXBhYmxlYCBpcyBhIHByZXR0eSB1YmlxdWl0b3VzIGZ1bmN0aW9uLCBpc24mIzM5O3QgaXQ/IFNlZW1zIGxpa2UgaXQmIzM5O3Mgc3ByaW5rbGVkIGFsbCBvdmVyIHRoZSBrZXJuZWwmIzM5O3MgZmlsZSBzeXN0ZW0gY29kZS4gSSBrbm93IGl0JiMzOTtzIGV4cG9ydGVkIGFuZCB1c2VkIGluIGEgdG9uIG9mIHBsYWNlcywgYnV0IEkmIzM5O20gdHJ5aW5nIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gaXRzIG92ZXJhbGwgaW1wYWN0LiBJJiMzOTttIGdvaW5nIHRvIGZvbGxvdyB0aGUgbG9naWMgY2hhaW4gZnJvbSBvbmUgb2YgaXRzIHR5cGljYWwgZW50cnkgcG9pbnRzLgoKTGV0JiMzOTtzIHN0YXJ0IGJ5IGRpZ2dpbmcgaW50byBgdmZzX3NldGxlYXNlYC4gVGhhdCYjMzk7cyBhIHJlYXNvbmFibGUgcGxhY2UgdG8gYmVnaW4sIGdpdmVuIHRoYXQgaXQmIzM5O3MgYSBjcml0aWNhbCBmdW5jdGlvbiBmb3IgbWFuYWdpbmcgZmlsZSBsb2NraW5nL293bmVyc2hpcC4gSSBzdXNwZWN0IGBpbm9kZV9vd25lcl9vcl9jYXBhYmxlYCBpcyBsaWtlbHkgaW52b2x2ZWQgaW4gdGhlcmUgYXMgcGFydCBvZiBsZWFzZSBjaGVja3MgYW5kIHBlcm1pc3Npb25zLiBMZXQmIzM5O3Mgc2VlIGhvdyBpdCYjMzk7cyB1c2VkIHRoZXJlIGFuZCB0aGVuIGZvbGxvdyB0aGUgYnJlYWRjcnVtYnMgZnJvbSB0aGVyZS4gSXQgc2hvdWxkIHF1aWNrbHkgcmV2ZWFsIGlmIEkgbmVlZCB0byBsb29rIGludG8gb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDM6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmZzX3NldGxlYXNlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2xvY2tzLmM9MjExNz1FWFBPUlRfU1lNQk9MX0dQTChrZXJuZWxfc2V0bGVhc2UpO1xuLS1cbmZzL2xvY2tzLmMtMjExOS0vKipcbmZzL2xvY2tzLmM6MjEyMDogKiB2ZnNfc2V0bGVhc2UgICAgICAgIC0gICAgICAgc2V0cyBhIGxlYXNlIG9uIGFuIG9wZW4gZmlsZVxuZnMvbG9ja3MuYy0yMTIxLSAqIEBmaWxwOlx0ZmlsZSBwb2ludGVyXG4tLVxuZnMvbG9ja3MuYz0yMTM2PWludFxuZnMvbG9ja3MuYzoyMTM3OnZmc19zZXRsZWFzZShzdHJ1Y3QgZmlsZSAqZmlscCwgaW50IGFyZywgc3RydWN0IGZpbGVfbGVhc2UgKipsZWFzZSwgdm9pZCAqKnByaXYpXG5mcy9sb2Nrcy5jLTIxMzgte1xuLS1cbmZzL2xvY2tzLmMtMjE1MS19XG5mcy9sb2Nrcy5jOjIxNTI6RVhQT1JUX1NZTUJPTF9HUEwodmZzX3NldGxlYXNlKTtcbmZzL2xvY2tzLmMtMjE1My1cbmZzL2xvY2tzLmM9MjE1ND1zdGF0aWMgaW50IGRvX2ZjbnRsX2FkZF9sZWFzZSh1bnNpZ25lZCBpbnQgZmQsIHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgZmxhdm9yLCBpbnQgYXJnKVxuLS1cbmZzL2xvY2tzLmMtMjE3MC1cbmZzL2xvY2tzLmM6MjE3MTpcdGVycm9yID0gdmZzX3NldGxlYXNlKGZpbHAsIGFyZywgXHUwMDI2ZmwsICh2b2lkICoqKVx1MDAyNm5ldyk7XG5mcy9sb2Nrcy5jLTIxNzItXHRpZiAoZmwpXG4tLVxuZnMvbG9ja3MuYz0yMTg5PWludCBmY250bF9zZXRsZWFzZSh1bnNpZ25lZCBpbnQgZmQsIHN0cnVjdCBmaWxlICpmaWxwLCBpbnQgYXJnKVxuLS1cbmZzL2xvY2tzLmMtMjE5NC1cdGlmIChhcmcgPT0gRl9VTkxDSylcbmZzL2xvY2tzLmM6MjE5NTpcdFx0cmV0dXJuIHZmc19zZXRsZWFzZShmaWxwLCBGX1VOTENLLCBOVUxMLCAodm9pZCAqKilcdTAwMjZmaWxwKTtcbmZzL2xvY2tzLmMtMjE5Ni1cdHJldHVybiBkb19mY250bF9hZGRfbGVhc2UoZmQsIGZpbHAsIEZMX0xFQVNFLCBhcmcpO1xuLS1cbmZzL2xvY2tzLmM9MjIwOT1pbnQgZmNudGxfc2V0ZGVsZWcodW5zaWduZWQgaW50IGZkLCBzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IGRlbGVnYXRpb24gKmRlbGVnKVxuLS1cbmZzL2xvY2tzLmMtMjIxNS1cdGlmIChkZWxlZy1cdTAwM2VkX3R5cGUgPT0gRl9VTkxDSylcbmZzL2xvY2tzLmM6MjIxNjpcdFx0cmV0dXJuIHZmc19zZXRsZWFzZShmaWxwLCBGX1VOTENLLCBOVUxMLCAodm9pZCAqKilcdTAwMjZmaWxwKTtcbmZzL2xvY2tzLmMtMjIxNy1cdHJldHVybiBkb19mY250bF9hZGRfbGVhc2UoZmQsIGZpbHAsIEZMX0RFTEVHLCBkZWxlZy1cdTAwM2VkX3R5cGUpO1xuLS1cbmluY2x1ZGUvbGludXgvZmlsZWxvY2suaD0yMzQ9aW50IGtlcm5lbF9zZXRsZWFzZShzdHJ1Y3QgZmlsZSAqLCBpbnQsIHN0cnVjdCBmaWxlX2xlYXNlICoqLCB2b2lkICoqKTtcbmluY2x1ZGUvbGludXgvZmlsZWxvY2suaDoyMzU6aW50IHZmc19zZXRsZWFzZShzdHJ1Y3QgZmlsZSAqLCBpbnQsIHN0cnVjdCBmaWxlX2xlYXNlICoqLCB2b2lkICoqKTtcbmluY2x1ZGUvbGludXgvZmlsZWxvY2suaC0yMzYtaW50IGxlYXNlX21vZGlmeShzdHJ1Y3QgZmlsZV9sZWFzZSAqLCBpbnQsIHN0cnVjdCBsaXN0X2hlYWQgKik7XG4tLVxuaW5jbHVkZS9saW51eC9maWxlbG9jay5oPTQyMT1zdGF0aWMgaW5saW5lIGludCBrZXJuZWxfc2V0bGVhc2Uoc3RydWN0IGZpbGUgKmZpbHAsIGludCBhcmcsXG4tLVxuaW5jbHVkZS9saW51eC9maWxlbG9jay5oLTQyNi1cbmluY2x1ZGUvbGludXgvZmlsZWxvY2suaDo0Mjc6c3RhdGljIGlubGluZSBpbnQgdmZzX3NldGxlYXNlKHN0cnVjdCBmaWxlICpmaWxwLCBpbnQgYXJnLFxuaW5jbHVkZS9saW51eC9maWxlbG9jay5oLTQyOC1cdFx0XHQgICAgICAgc3RydWN0IGZpbGVfbGVhc2UgKipsZWFzZSwgdm9pZCAqKnByaXYpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAzOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzODAyCgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogMjA1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBGaWxlIE93bmVyc2hpcCBWZXJpZmljYXRpb24gaW4gdGhlIEtlcm5lbCoqCgpPa2F5LCBzbyBgdmZzX3NldGxlYXNlYCBpcyBhdmFpbGFibGUgZm9yIG15IGludmVzdGlnYXRpb24sIHRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUga2VybmVsIGFjdHVhbGx5ICpkZXRlcm1pbmVzKiBpZiBhIHVzZXIgb3ducyBhbiBpbm9kZS4gTGV0IG1lIHNlZS4uLiBgdmZzX2lub2RlX2lzX293bmVkX2J5X21lYC4uLiBBaCwgaXQmIzM5O3Mgbm90IGV4cG9ydGVkLCBidXQgaXQmIzM5O3Mgbm90IHN0YXRpYyBlaXRoZXIsIHdoaWNoIGlzIGludGVyZXN0aW5nLiBXYWl0LCBpdCYjMzk7cyBkZWZpbmVkIGluIGBmcy9uYW1laS5jYC4gU2luY2UgaXQmIzM5O3Mgbm90IHN0YXRpYywgSSBjYW4gZGlyZWN0bHkgYW5hbHl6ZSBgdmZzX2lub2RlX2lzX293bmVkX2J5X21lYCBpdHNlbGYsIHRoYXQmIzM5O3MgcHJlZmVyYWJsZS4gSSB0aGluayBpdCB3aWxsIGJlIGJldHRlciB0byBsb29rIGF0IGl0IGRpcmVjdGx5IGFuZCBub3QganVzdCB0aGUgZnVuY3Rpb25zIHRoYXQgY2FsbCBpdC4KCkxldCYjMzk7cyBjaGVjayBgYWZzX2lzX293bmVkX2J5X21lYCBhbmQgYGFmc19oYXZlX3NhbWVfb3duZXJgIHRvIHNlZSBpZiB0aGVyZSBpcyBhbnkgb3ZlcmxhcCBpbiBiZWhhdmlvdXIgb3IgaW1wbGVtZW50YXRpb24uIFRob3NlIGFyZSBkZWZpbmVkIGluIGBmcy9hZnMvc2VjdXJpdHkuY2AsIHNvIEkgc2hvdWxkIGtlZXAgdGhvc2UgaW4gbWluZCBhcyB3ZWxsLiBJIG5lZWQgdG8ga2VlcCB0aG9zZSBpbiBtaW5kIGFzIHRoZXkgbWF5IHByb3ZpZGUgc29tZSBpbnNpZ2h0cyBpbnRvIHNpbWlsYXIgY2hlY2tzIGZvciBkaWZmZXJlbnQgZmlsZXN5c3RlbXMuCgpOb3csIHdoYXQgYWJvdXQgdGhlIG1vcmUgZ2VuZXJhbCBvd25lcnNoaXAgY2hlY2tzPyBJJiMzOTtsbCBsb29rIGF0IGBjaG93bl9va2AgYW5kIGBjaGdycF9va2AgbmV4dC4gSG1tLCB0aGV5JiMzOTtyZSBzdGF0aWMgd2l0aGluIGBmcy9hdHRyLmNgLiBTaW5jZSB0aGV5JiMzOTtyZSBzdGF0aWMsIEkmIzM5O2xsIG5lZWQgdG8gZm9jdXMgb24gdGhlaXIgY2FsbGVyLCB3aGljaCBsb29rcyB0byBiZSBgc2V0YXR0cl9wcmVwYXJlYCwgYW5kIGZvcnR1bmF0ZWx5LCAqdGhhdCogaXMgZXhwb3J0ZWQuIEkmIzM5O3ZlIGdvdCBhIGxvdCB0byBleGFtaW5lIGJ1dCB0aGlzIGFsbCBzZWVtcyBsb2dpY2FsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwMzozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZXRhdHRyX3ByZXBhcmUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wb3J0aW5nLnJzdD0zMjg9c2l6ZSB1cGRhdGUgYW5kIG9uIGZpbmFsbHkgb24tZGlzayB0cnVuY2F0aW9uIHdoaWNoIHNob3VsZCBub3QgZmFpbC5cbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcG9ydGluZy5yc3Q6MzI5OnNldGF0dHJfcHJlcGFyZSAod2hpY2ggdXNlZCB0byBiZSBpbm9kZV9jaGFuZ2Vfb2spIG5vdyBpbmNsdWRlcyB0aGUgc2l6ZSBjaGVja3NcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcG9ydGluZy5yc3QtMzMwLWZvciBBVFRSX1NJWkUgYW5kIG11c3QgYmUgY2FsbGVkIGluIHRoZSBiZWdpbm5pbmcgb2YgLVx1MDAzZXNldGF0dHIgdW5jb25kaXRpb25hbGx5LlxuLS1cbmZzLzlwL3Zmc19pbm9kZS5jPTEwMTg9c3RhdGljIGludCB2OWZzX3Zmc19zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuLS1cbmZzLzlwL3Zmc19pbm9kZS5jLTEwMjctXHRwOV9kZWJ1ZyhQOV9ERUJVR19WRlMsIFwmIzM0O1xcblwmIzM0Oyk7XG5mcy85cC92ZnNfaW5vZGUuYzoxMDI4Olx0cmV0dmFsID0gc2V0YXR0cl9wcmVwYXJlKFx1MDAyNm5vcF9tbnRfaWRtYXAsIGRlbnRyeSwgaWF0dHIpO1xuZnMvOXAvdmZzX2lub2RlLmMtMTAyOS1cdGlmIChyZXR2YWwpXG4tLVxuZnMvOXAvdmZzX2lub2RlX2RvdGwuYz01MTM9aW50IHY5ZnNfdmZzX3NldGF0dHJfZG90bChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbi0tXG5mcy85cC92ZnNfaW5vZGVfZG90bC5jLTUyNi1cbmZzLzlwL3Zmc19pbm9kZV9kb3RsLmM6NTI3Olx0cmV0dmFsID0gc2V0YXR0cl9wcmVwYXJlKFx1MDAyNm5vcF9tbnRfaWRtYXAsIGRlbnRyeSwgaWF0dHIpO1xuZnMvOXAvdmZzX2lub2RlX2RvdGwuYy01MjgtXHRpZiAocmV0dmFsKVxuLS1cbmZzL2FkZnMvaW5vZGUuYz0zMDI9YWRmc19zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpYXR0ciAqYXR0cilcbi0tXG5mcy9hZGZzL2lub2RlLmMtMzA4LVx0XG5mcy9hZGZzL2lub2RlLmM6MzA5Olx0ZXJyb3IgPSBzZXRhdHRyX3ByZXBhcmUoXHUwMDI2bm9wX21udF9pZG1hcCwgZGVudHJ5LCBhdHRyKTtcbmZzL2FkZnMvaW5vZGUuYy0zMTAtXG4tLVxuZnMvYWZmcy9pbm9kZS5jPTIxNj1hZmZzX3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlhdHRyICphdHRyKVxuLS1cbmZzL2FmZnMvaW5vZGUuYy0yMjItXG5mcy9hZmZzL2lub2RlLmM6MjIzOlx0ZXJyb3IgPSBzZXRhdHRyX3ByZXBhcmUoXHUwMDI2bm9wX21udF9pZG1hcCwgZGVudHJ5LCBhdHRyKTtcbmZzL2FmZnMvaW5vZGUuYy0yMjQtXHRpZiAoZXJyb3IpXG4tLVxuZnMvYXR0ci5jLTI5LSAqIHVuY29uZGl0aW9uYWxseSBpZiBTX0lYR1JQIGlzIHNldC4gT3RoZXJ3aXNlIHdlIGhhdmUgdGhlIGV4YWN0IHNhbWVcbmZzL2F0dHIuYzozMDogKiByZXF1aXJlbWVudHMgYXMgc2V0YXR0cl9wcmVwYXJlKCkgYW5kIHNldGF0dHJfY29weSgpLlxuZnMvYXR0ci5jLTMxLSAqXG4tLVxuZnMvYXR0ci5jPTEyND1zdGF0aWMgaW50IGNoZ3JwX29rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuLS1cbmZzL2F0dHIuYy0xNDctLyoqXG5mcy9hdHRyLmM6MTQ4OiAqIHNldGF0dHJfcHJlcGFyZSAtIGNoZWNrIGlmIGF0dHJpYnV0ZSBjaGFuZ2VzIHRvIGEgZGVudHJ5IGFyZSBhbGxvd2VkXG5mcy9hdHRyLmMtMTQ5LSAqIEBpZG1hcDpcdGlkbWFwIG9mIHRoZSBtb3VudCB0aGUgaW5vZGUgd2FzIGZvdW5kIGZyb21cbi0tXG5mcy9hdHRyLmMtMTY3LSAqL1xuZnMvYXR0ci5jOjE2ODppbnQgc2V0YXR0cl9wcmVwYXJlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG5mcy9hdHRyLmMtMTY5LVx0XHQgICAgc3RydWN0IGlhdHRyICphdHRyKVxuLS1cbmZzL2F0dHIuYy0yNDctfVxuZnMvYXR0ci5jOjI0ODpFWFBPUlRfU1lNQk9MKHNldGF0dHJfcHJlcGFyZSk7XG5mcy9hdHRyLmMtMjQ5LVxuLS1cbmZzL2J0cmZzL2lub2RlLmM9NTI5NT1zdGF0aWMgaW50IGJ0cmZzX3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbi0tXG5mcy9idHJmcy9pbm9kZS5jLTUzMDQtXG5mcy9idHJmcy9pbm9kZS5jOjUzMDU6XHRyZXQgPSBzZXRhdHRyX3ByZXBhcmUoaWRtYXAsIGRlbnRyeSwgYXR0cik7XG5mcy9idHJmcy9pbm9kZS5jLTUzMDYtXHRpZiAocmV0KVxuLS1cbmZzL2NlcGgvaW5vZGUuYz0yOTIzPWludCBjZXBoX3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbi0tXG5mcy9jZXBoL2lub2RlLmMtMjkzOS1cbmZzL2NlcGgvaW5vZGUuYzoyOTQwOlx0ZXJyID0gc2V0YXR0cl9wcmVwYXJlKGlkbWFwLCBkZW50cnksIGF0dHIpO1xuZnMvY2VwaC9pbm9kZS5jLTI5NDEtXHRpZiAoZXJyICE9IDApXG4tLVxuZnMvZWNyeXB0ZnMvaW5vZGUuYz04NzI9c3RhdGljIGludCBlY3J5cHRmc19zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuLS1cbmZzL2VjcnlwdGZzL2lub2RlLmMtOTIwLVxuZnMvZWNyeXB0ZnMvaW5vZGUuYzo5MjE6XHRyYyA9IHNldGF0dHJfcHJlcGFyZShcdTAwMjZub3BfbW50X2lkbWFwLCBkZW50cnksIGlhKTtcbmZzL2VjcnlwdGZzL2lub2RlLmMtOTIyLVx0aWYgKHJjKVxuLS1cbmZzL2VmaXZhcmZzL2lub2RlLmM9MTczPXN0YXRpYyBpbnQgZWZpdmFyZnNfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLS1cbmZzL2VmaXZhcmZzL2lub2RlLmMtMTc4LVxuZnMvZWZpdmFyZnMvaW5vZGUuYzoxNzk6XHRlcnJvciA9IHNldGF0dHJfcHJlcGFyZShpZG1hcCwgZGVudHJ5LCBpYXR0cik7XG5mcy9lZml2YXJmcy9pbm9kZS5jLTE4MC1cdGlmIChlcnJvcilcbi0tXG5mcy9leGZhdC9maWxlLmM9MzQ5PWludCBleGZhdF9zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tLVxuZnMvZXhmYXQvZmlsZS5jLTM3NS1cbmZzL2V4ZmF0L2ZpbGUuYzozNzY6XHRlcnJvciA9IHNldGF0dHJfcHJlcGFyZShpZG1hcCwgZGVudHJ5LCBhdHRyKTtcbmZzL2V4ZmF0L2ZpbGUuYy0zNzctXHRhdHRyLVx1MDAzZWlhX3ZhbGlkID0gaWFfdmFsaWQ7XG4tLVxuZnMvZXh0Mi9pbm9kZS5jPTE2MDc9aW50IGV4dDJfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLS1cbmZzL2V4dDIvaW5vZGUuYy0xNjEyLVxuZnMvZXh0Mi9pbm9kZS5jOjE2MTM6XHRlcnJvciA9IHNldGF0dHJfcHJlcGFyZShcdTAwMjZub3BfbW50X2lkbWFwLCBkZW50cnksIGlhdHRyKTtcbmZzL2V4dDIvaW5vZGUuYy0xNjE0LVx0aWYgKGVycm9yKVxuLS1cbmZzL2V4dDQvaW5vZGUuYz01OTM0PWludCBleHQ0X3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbi0tXG5mcy9leHQ0L2lub2RlLmMtNTk1NC1cbmZzL2V4dDQvaW5vZGUuYzo1OTU1Olx0ZXJyb3IgPSBzZXRhdHRyX3ByZXBhcmUoaWRtYXAsIGRlbnRyeSwgYXR0cik7XG5mcy9leHQ0L2lub2RlLmMtNTk1Ni1cdGlmIChlcnJvcilcbi0tXG5mcy9mMmZzL2ZpbGUuYz0xMDczPWludCBmMmZzX3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbi0tXG5mcy9mMmZzL2ZpbGUuYy0xMDgzLVxuZnMvZjJmcy9maWxlLmM6MTA4NDpcdGVyciA9IHNldGF0dHJfcHJlcGFyZShpZG1hcCwgZGVudHJ5LCBhdHRyKTtcbmZzL2YyZnMvZmlsZS5jLTEwODUtXHRpZiAoZXJyKVxuLS1cbmZzL2ZhdC9maWxlLmM9NTE4PWludCBmYXRfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLS1cbmZzL2ZhdC9maWxlLmMtNTMyLVxuZnMvZmF0L2ZpbGUuYzo1MzM6XHRlcnJvciA9IHNldGF0dHJfcHJlcGFyZShpZG1hcCwgZGVudHJ5LCBhdHRyKTtcbmZzL2ZhdC9maWxlLmMtNTM0LVx0YXR0ci1cdTAwM2VpYV92YWxpZCA9IGlhX3ZhbGlkO1xuLS1cbmZzL2Z1c2UvZGlyLmM9MjEyOD1pbnQgZnVzZV9kb19zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tLVxuZnMvZnVzZS9kaXIuYy0yMTQ5LVxuZnMvZnVzZS9kaXIuYzoyMTUwOlx0ZXJyID0gc2V0YXR0cl9wcmVwYXJlKGlkbWFwLCBkZW50cnksIGF0dHIpO1xuZnMvZnVzZS9kaXIuYy0yMTUxLVx0aWYgKGVycilcbi0tXG5mcy9nZnMyL2lub2RlLmM9MjA5OT1zdGF0aWMgaW50IGdmczJfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbi0tXG5mcy9nZnMyL2lub2RlLmMtMjExOC1cbmZzL2dmczIvaW5vZGUuYzoyMTE5Olx0ZXJyb3IgPSBzZXRhdHRyX3ByZXBhcmUoXHUwMDI2bm9wX21udF9pZG1hcCwgZGVudHJ5LCBhdHRyKTtcbmZzL2dmczIvaW5vZGUuYy0yMTIwLVx0aWYgKGVycm9yKVxuLS1cbmZzL2hmcy9pbm9kZS5jPTYyNz1pbnQgaGZzX2lub2RlX3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbi0tXG5mcy9oZnMvaW5vZGUuYy02MzMtXG5mcy9oZnMvaW5vZGUuYzo2MzQ6XHRlcnJvciA9IHNldGF0dHJfcHJlcGFyZShcdTAwMjZub3BfbW50X2lkbWFwLCBkZW50cnksIGF0dHIpO1xuZnMvaGZzL2lub2RlLmMtNjM1LVx0aWYgKGVycm9yKVxuLS1cbmZzL2hmc3BsdXMvaW5vZGUuYz0zMDA9c3RhdGljIGludCBoZnNwbHVzX3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4tLVxuZnMvaGZzcGx1cy9pbm9kZS5jLTMwNS1cbmZzL2hmc3BsdXMvaW5vZGUuYzozMDY6XHRlcnJvciA9IHNldGF0dHJfcHJlcGFyZShcdTAwMjZub3BfbW50X2lkbWFwLCBkZW50cnksIGF0dHIpO1xuZnMvaGZzcGx1cy9pbm9kZS5jLTMwNy1cdGlmIChlcnJvcilcbi0tXG5mcy9ob3N0ZnMvaG9zdGZzX2tlcm4uYz04MDQ9c3RhdGljIGludCBob3N0ZnNfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbi0tXG5mcy9ob3N0ZnMvaG9zdGZzX2tlcm4uYy04MTMtXG5mcy9ob3N0ZnMvaG9zdGZzX2tlcm4uYzo4MTQ6XHRlcnIgPSBzZXRhdHRyX3ByZXBhcmUoXHUwMDI2bm9wX21udF9pZG1hcCwgZGVudHJ5LCBhdHRyKTtcbmZzL2hvc3Rmcy9ob3N0ZnNfa2Vybi5jLTgxNS1cdGlmIChlcnIpXG4tLVxuZnMvaHBmcy9pbm9kZS5jPTI2MD1pbnQgaHBmc19zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tLVxuZnMvaHBmcy9pbm9kZS5jLTI3Ny1cbmZzL2hwZnMvaW5vZGUuYzoyNzg6XHRlcnJvciA9IHNldGF0dHJfcHJlcGFyZShcdTAwMjZub3BfbW50X2lkbWFwLCBkZW50cnksIGF0dHIpO1xuZnMvaHBmcy9pbm9kZS5jLTI3OS1cdGlmIChlcnJvcilcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYz04MzE9c3RhdGljIGludCBodWdldGxiZnNfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy04MzktXG5mcy9odWdldGxiZnMvaW5vZGUuYzo4NDA6XHRlcnJvciA9IHNldGF0dHJfcHJlcGFyZShpZG1hcCwgZGVudHJ5LCBhdHRyKTtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTg0MS1cdGlmIChlcnJvcilcbi0tXG5mcy9qZmZzMi9mcy5jPTE5Mz1pbnQgamZmczJfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLS1cbmZzL2pmZnMyL2ZzLmMtMTk4LVxuZnMvamZmczIvZnMuYzoxOTk6XHRyYyA9IHNldGF0dHJfcHJlcGFyZShcdTAwMjZub3BfbW50X2lkbWFwLCBkZW50cnksIGlhdHRyKTtcbmZzL2pmZnMyL2ZzLmMtMjAwLVx0aWYgKHJjKVxuLS1cbmZzL2pmcy9maWxlLmM9OTI9aW50IGpmc19zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tLVxuZnMvamZzL2ZpbGUuYy05Ny1cbmZzL2pmcy9maWxlLmM6OTg6XHRyYyA9IHNldGF0dHJfcHJlcGFyZShcdTAwMjZub3BfbW50X2lkbWFwLCBkZW50cnksIGlhdHRyKTtcbmZzL2pmcy9maWxlLmMtOTktXHRpZiAocmMpXG4tLVxuZnMva2VybmZzL2lub2RlLmM9MTEwPWludCBrZXJuZnNfaW9wX3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbi0tXG5mcy9rZXJuZnMvaW5vZGUuYy0xMjItXHRkb3duX3dyaXRlKFx1MDAyNnJvb3QtXHUwMDNla2VybmZzX2lhdHRyX3J3c2VtKTtcbmZzL2tlcm5mcy9pbm9kZS5jOjEyMzpcdGVycm9yID0gc2V0YXR0cl9wcmVwYXJlKFx1MDAyNm5vcF9tbnRfaWRtYXAsIGRlbnRyeSwgaWF0dHIpO1xuZnMva2VybmZzL2lub2RlLmMtMTI0LVx0aWYgKGVycm9yKVxuLS1cbmZzL2xpYmZzLmM9OTE2PWludCBzaW1wbGVfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLS1cbmZzL2xpYmZzLmMtOTIxLVxuZnMvbGliZnMuYzo5MjI6XHRlcnJvciA9IHNldGF0dHJfcHJlcGFyZShpZG1hcCwgZGVudHJ5LCBpYXR0cik7XG5mcy9saWJmcy5jLTkyMy1cdGlmIChlcnJvcilcbi0tXG5mcy9taW5peC9maWxlLmM9MzM9c3RhdGljIGludCBtaW5peF9zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuLS1cbmZzL21pbml4L2ZpbGUuYy0zOC1cbmZzL21pbml4L2ZpbGUuYzozOTpcdGVycm9yID0gc2V0YXR0cl9wcmVwYXJlKFx1MDAyNm5vcF9tbnRfaWRtYXAsIGRlbnRyeSwgYXR0cik7XG5mcy9taW5peC9maWxlLmMtNDAtXHRpZiAoZXJyb3IpXG4tLVxuZnMvbmFtZXNwYWNlLmM9NDg0OT1zdGF0aWMgaW5saW5lIGJvb2wgbW50X2FsbG93X3dyaXRlcnMoY29uc3Qgc3RydWN0IG1vdW50X2thdHRyICprYXR0cixcbi0tXG5mcy9uYW1lc3BhY2UuYy00ODU2LVxuZnMvbmFtZXNwYWNlLmM6NDg1NzpzdGF0aWMgaW50IG1vdW50X3NldGF0dHJfcHJlcGFyZShzdHJ1Y3QgbW91bnRfa2F0dHIgKmthdHRyLCBzdHJ1Y3QgbW91bnQgKm1udClcbmZzL25hbWVzcGFjZS5jLTQ4NTgte1xuLS1cbmZzL25hbWVzcGFjZS5jPTQ5Mjg9c3RhdGljIGludCBkb19tb3VudF9zZXRhdHRyKGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoLCBzdHJ1Y3QgbW91bnRfa2F0dHIgKmthdHRyKVxuLS1cbmZzL25hbWVzcGFjZS5jLTQ5NzAtXHQgKi9cbmZzL25hbWVzcGFjZS5jOjQ5NzE6XHRlcnIgPSBtb3VudF9zZXRhdHRyX3ByZXBhcmUoa2F0dHIsIG1udCk7XG5mcy9uYW1lc3BhY2UuYy00OTcyLVx0aWYgKCFlcnIpXG4tLVxuZnMvbmZzZC9uZnNwcm9jLmM9NzY9bmZzZF9wcm9jX3NldGF0dHIoc3RydWN0IHN2Y19ycXN0ICpycXN0cClcbi0tXG5mcy9uZnNkL25mc3Byb2MuYy05Ni1cdCAqIFNvIGlmIGl0IGxvb2tzIGxpa2UgaXQgbWlnaHQgYmUgXCYjMzQ7c2V0IGJvdGggdG8gdGhlIHNhbWUgdGltZSB3aGljaFxuZnMvbmZzZC9uZnNwcm9jLmM6OTc6XHQgKiBpcyBjbG9zZSB0byBub3dcJiMzNDssIGFuZCBpZiBzZXRhdHRyX3ByZXBhcmUgZmFpbHMsIHRoZW4gd2VcbmZzL25mc2QvbmZzcHJvYy5jLTk4LVx0ICogY29udmVydCB0byBcJiMzNDtzZXQgdG8gbm93XCYjMzQ7IGluc3RlYWQgb2YgXCYjMzQ7c2V0IHRvIGV4cGxpY2l0IHRpbWVcJiMzNDtcbmZzL25mc2QvbmZzcHJvYy5jLTk5LVx0ICpcbmZzL25mc2QvbmZzcHJvYy5jOjEwMDpcdCAqIFdlIG9ubHkgY2FsbCBzZXRhdHRyX3ByZXBhcmUgYXMgdGhlIGxhc3QgdGVzdCBhcyB0ZWNobmljYWxseVxuZnMvbmZzZC9uZnNwcm9jLmMtMTAxLVx0ICogaXQgaXMgbm90IGFuIGludGVyZmFjZSB0aGF0IHdlIHNob3VsZCBiZSB1c2luZy5cbi0tXG5mcy9uZnNkL25mc3Byb2MuYy0xMjItXHRcdGlmIChkZWx0YSBcdTAwM2MgTUFYX1RPVUNIX1RJTUVfRVJST1IgXHUwMDI2XHUwMDI2XG5mcy9uZnNkL25mc3Byb2MuYzoxMjM6XHRcdCAgICBzZXRhdHRyX3ByZXBhcmUoXHUwMDI2bm9wX21udF9pZG1hcCwgZmhwLVx1MDAzZWZoX2RlbnRyeSwgaWFwKSAhPSAwKSB7XG5mcy9uZnNkL25mc3Byb2MuYy0xMjQtXHRcdFx0Lypcbi0tXG5mcy9uaWxmczIvaW5vZGUuYz05MDk9aW50IG5pbGZzX3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbi0tXG5mcy9uaWxmczIvaW5vZGUuYy05MTYtXG5mcy9uaWxmczIvaW5vZGUuYzo5MTc6XHRlcnIgPSBzZXRhdHRyX3ByZXBhcmUoXHUwMDI2bm9wX21udF9pZG1hcCwgZGVudHJ5LCBpYXR0cik7XG5mcy9uaWxmczIvaW5vZGUuYy05MTgtXHRpZiAoZXJyKVxuLS1cbmZzL250ZnMvZmlsZS5jPTI5OT1pbnQgbnRmc19zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tLVxuZnMvbnRmcy9maWxlLmMtMzEwLVxuZnMvbnRmcy9maWxlLmM6MzExOlx0ZXJyID0gc2V0YXR0cl9wcmVwYXJlKGlkbWFwLCBkZW50cnksIGF0dHIpO1xuZnMvbnRmcy9maWxlLmMtMzEyLVx0aWYgKGVycilcbi0tXG5mcy9udGZzMy9maWxlLmM9NzA2PWludCBudGZzX3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbi0tXG5mcy9udGZzMy9maWxlLmMtNzIxLVxuZnMvbnRmczMvZmlsZS5jOjcyMjpcdGVyciA9IHNldGF0dHJfcHJlcGFyZShpZG1hcCwgZGVudHJ5LCBhdHRyKTtcbmZzL250ZnMzL2ZpbGUuYy03MjMtXHRpZiAoZXJyKVxuLS1cbmZzL29jZnMyL2RsbWZzL2RsbWZzLmM9MTkxPXN0YXRpYyBpbnQgZGxtZnNfZmlsZV9zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuLS1cbmZzL29jZnMyL2RsbWZzL2RsbWZzLmMtMTk3LVx0YXR0ci1cdTAwM2VpYV92YWxpZCBcdTAwMjY9IH5BVFRSX1NJWkU7XG5mcy9vY2ZzMi9kbG1mcy9kbG1mcy5jOjE5ODpcdGVycm9yID0gc2V0YXR0cl9wcmVwYXJlKFx1MDAyNm5vcF9tbnRfaWRtYXAsIGRlbnRyeSwgYXR0cik7XG5mcy9vY2ZzMi9kbG1mcy9kbG1mcy5jLTE5OS1cdGlmIChlcnJvcilcbi0tXG5mcy9vY2ZzMi9maWxlLmM9MTEyMD1pbnQgb2NmczJfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLS1cbmZzL29jZnMyL2ZpbGUuYy0xMTU5LVxuZnMvb2NmczIvZmlsZS5jOjExNjA6XHRzdGF0dXMgPSBzZXRhdHRyX3ByZXBhcmUoXHUwMDI2bm9wX21udF9pZG1hcCwgZGVudHJ5LCBhdHRyKTtcbmZzL29jZnMyL2ZpbGUuYy0xMTYxLVx0aWYgKHN0YXR1cylcbi0tXG5mcy9vbWZzL2ZpbGUuYz0zNDE9c3RhdGljIGludCBvbWZzX3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4tLVxuZnMvb21mcy9maWxlLmMtMzQ2LVxuZnMvb21mcy9maWxlLmM6MzQ3Olx0ZXJyb3IgPSBzZXRhdHRyX3ByZXBhcmUoXHUwMDI2bm9wX21udF9pZG1hcCwgZGVudHJ5LCBhdHRyKTtcbmZzL29tZnMvZmlsZS5jLTM0OC1cdGlmIChlcnJvcilcbi0tXG5mcy9vcmFuZ2Vmcy9pbm9kZS5jPTgzMT1pbnQgb3JhbmdlZnNfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLS1cbmZzL29yYW5nZWZzL2lub2RlLmMtODM2LVx0ICAgIGRlbnRyeSk7XG5mcy9vcmFuZ2Vmcy9pbm9kZS5jOjgzNzpcdHJldCA9IHNldGF0dHJfcHJlcGFyZShcdTAwMjZub3BfbW50X2lkbWFwLCBkZW50cnksIGlhdHRyKTtcbmZzL29yYW5nZWZzL2lub2RlLmMtODM4LVx0aWYgKHJldClcbi0tXG5mcy9vdmVybGF5ZnMvaW5vZGUuYz0yMT1pbnQgb3ZsX3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbi0tXG5mcy9vdmVybGF5ZnMvaW5vZGUuYy0yOC1cbmZzL292ZXJsYXlmcy9pbm9kZS5jOjI5Olx0ZXJyID0gc2V0YXR0cl9wcmVwYXJlKFx1MDAyNm5vcF9tbnRfaWRtYXAsIGRlbnRyeSwgYXR0cik7XG5mcy9vdmVybGF5ZnMvaW5vZGUuYy0zMC1cdGlmIChlcnIpXG4tLVxuZnMvcHJvYy9iYXNlLmM9NzA1PWludCBwcm9jX25vY2htb2Rfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLS1cbmZzL3Byb2MvYmFzZS5jLTcxMy1cbmZzL3Byb2MvYmFzZS5jOjcxNDpcdGVycm9yID0gc2V0YXR0cl9wcmVwYXJlKFx1MDAyNm5vcF9tbnRfaWRtYXAsIGRlbnRyeSwgYXR0cik7XG5mcy9wcm9jL2Jhc2UuYy03MTUtXHRpZiAoZXJyb3IpXG4tLVxuZnMvcHJvYy9nZW5lcmljLmM9MTIwPXN0YXRpYyBpbnQgcHJvY19zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tLVxuZnMvcHJvYy9nZW5lcmljLmMtMTI2LVxuZnMvcHJvYy9nZW5lcmljLmM6MTI3Olx0ZXJyb3IgPSBzZXRhdHRyX3ByZXBhcmUoXHUwMDI2bm9wX21udF9pZG1hcCwgZGVudHJ5LCBpYXR0cik7XG5mcy9wcm9jL2dlbmVyaWMuYy0xMjgtXHRpZiAoZXJyb3IpXG4tLVxuZnMvcHJvYy9wcm9jX3N5c2N0bC5jPTgyMD1zdGF0aWMgaW50IHByb2Nfc3lzX3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4tLVxuZnMvcHJvYy9wcm9jX3N5c2N0bC5jLTgyOC1cbmZzL3Byb2MvcHJvY19zeXNjdGwuYzo4Mjk6XHRlcnJvciA9IHNldGF0dHJfcHJlcGFyZShcdTAwMjZub3BfbW50X2lkbWFwLCBkZW50cnksIGF0dHIpO1xuZnMvcHJvYy9wcm9jX3N5c2N0bC5jLTgzMC1cdGlmIChlcnJvcilcbi0tXG5mcy9yYW1mcy9maWxlLW5vbW11LmM9MTYxPXN0YXRpYyBpbnQgcmFtZnNfbm9tbXVfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbi0tXG5mcy9yYW1mcy9maWxlLW5vbW11LmMtMTY4LVx0LyogUE9TSVggVUlEL0dJRCB2ZXJpZmljYXRpb24gZm9yIHNldHRpbmcgaW5vZGUgYXR0cmlidXRlcyAqL1xuZnMvcmFtZnMvZmlsZS1ub21tdS5jOjE2OTpcdHJldCA9IHNldGF0dHJfcHJlcGFyZShcdTAwMjZub3BfbW50X2lkbWFwLCBkZW50cnksIGlhKTtcbmZzL3JhbWZzL2ZpbGUtbm9tbXUuYy0xNzAtXHRpZiAocmV0KVxuLS1cbmZzL3NtYi9jbGllbnQvaW5vZGUuYz0zMTM1PWNpZnNfc2V0YXR0cl91bml4KHN0cnVjdCBkZW50cnkgKmRpcmVudHJ5LCBzdHJ1Y3QgaWF0dHIgKmF0dHJzKVxuLS1cbmZzL3NtYi9jbGllbnQvaW5vZGUuYy0zMTU2LVxuZnMvc21iL2NsaWVudC9pbm9kZS5jOjMxNTc6XHRyYyA9IHNldGF0dHJfcHJlcGFyZShcdTAwMjZub3BfbW50X2lkbWFwLCBkaXJlbnRyeSwgYXR0cnMpO1xuZnMvc21iL2NsaWVudC9pbm9kZS5jLTMxNTgtXHRpZiAocmMgXHUwMDNjIDApXG4tLVxuZnMvc21iL2NsaWVudC9pbm9kZS5jPTMzMDU9Y2lmc19zZXRhdHRyX25vdW5peChzdHJ1Y3QgZGVudHJ5ICpkaXJlbnRyeSwgc3RydWN0IGlhdHRyICphdHRycylcbi0tXG5mcy9zbWIvY2xpZW50L2lub2RlLmMtMzMyOC1cbmZzL3NtYi9jbGllbnQvaW5vZGUuYzozMzI5Olx0cmMgPSBzZXRhdHRyX3ByZXBhcmUoXHUwMDI2bm9wX21udF9pZG1hcCwgZGlyZW50cnksIGF0dHJzKTtcbmZzL3NtYi9jbGllbnQvaW5vZGUuYy0zMzMwLVx0aWYgKHJjIFx1MDAzYyAwKVxuLS1cbmZzL3ViaWZzL2ZpbGUuYz0xMjU0PWludCB1Ymlmc19zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tLVxuZnMvdWJpZnMvZmlsZS5jLTEyNjItXHRcdGlub2RlLVx1MDAzZWlfaW5vLCBpbm9kZS1cdTAwM2VpX21vZGUsIGF0dHItXHUwMDNlaWFfdmFsaWQpO1xuZnMvdWJpZnMvZmlsZS5jOjEyNjM6XHRlcnIgPSBzZXRhdHRyX3ByZXBhcmUoXHUwMDI2bm9wX21udF9pZG1hcCwgZGVudHJ5LCBhdHRyKTtcbmZzL3ViaWZzL2ZpbGUuYy0xMjY0LVx0aWYgKGVycilcbi0tXG5mcy91ZGYvZmlsZS5jPTIyMj1zdGF0aWMgaW50IHVkZl9zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tLVxuZnMvdWRmL2ZpbGUuYy0yMjgtXG5mcy91ZGYvZmlsZS5jOjIyOTpcdGVycm9yID0gc2V0YXR0cl9wcmVwYXJlKFx1MDAyNm5vcF9tbnRfaWRtYXAsIGRlbnRyeSwgYXR0cik7XG5mcy91ZGYvZmlsZS5jLTIzMC1cdGlmIChlcnJvcilcbi0tXG5mcy91ZnMvaW5vZGUuYz0xMTk4PWludCB1ZnNfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLS1cbmZzL3Vmcy9pbm9kZS5jLTEyMDQtXG5mcy91ZnMvaW5vZGUuYzoxMjA1Olx0ZXJyb3IgPSBzZXRhdHRyX3ByZXBhcmUoXHUwMDI2bm9wX21udF9pZG1hcCwgZGVudHJ5LCBhdHRyKTtcbmZzL3Vmcy9pbm9kZS5jLTEyMDYtXHRpZiAoZXJyb3IpXG4tLVxuZnMvdXRpbWVzLmM9MjE9aW50IHZmc191dGltZXMoY29uc3Qgc3RydWN0IHBhdGggKnBhdGgsIHN0cnVjdCB0aW1lc3BlYzY0ICp0aW1lcylcbi0tXG5mcy91dGltZXMuYy01Ni1cdFx0LypcbmZzL3V0aW1lcy5jOjU3Olx0XHQgKiBUZWxsIHNldGF0dHJfcHJlcGFyZSgpLCB0aGF0IHRoaXMgaXMgYW4gZXhwbGljaXQgdGltZVxuZnMvdXRpbWVzLmMtNTgtXHRcdCAqIHVwZGF0ZSwgZXZlbiBpZiBuZWl0aGVyIEFUVFJfQVRJTUVfU0VUIG5vciBBVFRSX01USU1FX1NFVFxuLS1cbmZzL3hmcy94ZnNfaW9jdGwuYz02MDc9c3RhdGljIHZvaWRcbmZzL3hmcy94ZnNfaW9jdGwuYzo2MDg6eGZzX2lvY3RsX3NldGF0dHJfcHJlcGFyZV9kYXgoXG5mcy94ZnMveGZzX2lvY3RsLmMtNjA5LVx0c3RydWN0IHhmc19pbm9kZVx0KmlwLFxuLS1cbmZzL3hmcy94ZnNfaW9jdGwuYz03NTA9eGZzX2ZpbGVhdHRyX3NldChcbi0tXG5mcy94ZnMveGZzX2lvY3RsLmMtODA0LVxuZnMveGZzL3hmc19pb2N0bC5jOjgwNTpcdHhmc19pb2N0bF9zZXRhdHRyX3ByZXBhcmVfZGF4KGlwLCBmYSk7XG5mcy94ZnMveGZzX2lvY3RsLmMtODA2LVxuLS1cbmZzL3hmcy94ZnNfaW9wcy5jPTc1Nz14ZnNfdm5fY2hhbmdlX29rKFxuLS1cbmZzL3hmcy94ZnNfaW9wcy5jLTc2OS1cbmZzL3hmcy94ZnNfaW9wcy5jOjc3MDpcdHJldHVybiBzZXRhdHRyX3ByZXBhcmUoaWRtYXAsIGRlbnRyeSwgaWF0dHIpO1xuZnMveGZzL3hmc19pb3BzLmMtNzcxLX1cbi0tXG5mcy94ZnMveGZzX2lvcHMuYy03NzYtICogQ2F1dGlvbjogVGhlIGNhbGxlciBvZiB0aGlzIGZ1bmN0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciBjYWxsaW5nXG5mcy94ZnMveGZzX2lvcHMuYzo3Nzc6ICogc2V0YXR0cl9wcmVwYXJlKCkgb3Igb3RoZXJ3aXNlIHZlcmlmeWluZyB0aGUgY2hhbmdlIGlzIGZpbmUuXG5mcy94ZnMveGZzX2lvcHMuYy03NzgtICovXG4tLVxuZnMvem9uZWZzL3N1cGVyLmM9NTM2PXN0YXRpYyBpbnQgem9uZWZzX2lub2RlX3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4tLVxuZnMvem9uZWZzL3N1cGVyLmMtNTQ0LVxuZnMvem9uZWZzL3N1cGVyLmM6NTQ1Olx0cmV0ID0gc2V0YXR0cl9wcmVwYXJlKFx1MDAyNm5vcF9tbnRfaWRtYXAsIGRlbnRyeSwgaWF0dHIpO1xuZnMvem9uZWZzL3N1cGVyLmMtNTQ2LVx0aWYgKHJldClcbi0tXG5pbmNsdWRlL2xpbnV4L2ZzLmg9MzM4Mz1pbnQgbWF5X3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG5pbmNsdWRlL2xpbnV4L2ZzLmgtMzM4NC1cdFx0dW5zaWduZWQgaW50IGlhX3ZhbGlkKTtcbmluY2x1ZGUvbGludXgvZnMuaDozMzg1OmludCBzZXRhdHRyX3ByZXBhcmUoc3RydWN0IG1udF9pZG1hcCAqLCBzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBpYXR0ciAqKTtcbmluY2x1ZGUvbGludXgvZnMuaC0zMzg2LWV4dGVybiBpbnQgaW5vZGVfbmV3c2l6ZV9vayhjb25zdCBzdHJ1Y3QgaW5vZGUgKiwgbG9mZl90IG9mZnNldCk7XG4tLVxubW0vc2htZW0uYz0xMzE2PXN0YXRpYyBpbnQgc2htZW1fc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbi0tXG5tbS9zaG1lbS5jLTEzMjQtXG5tbS9zaG1lbS5jOjEzMjU6XHRlcnJvciA9IHNldGF0dHJfcHJlcGFyZShpZG1hcCwgZGVudHJ5LCBhdHRyKTtcbm1tL3NobWVtLmMtMTMyNi1cdGlmIChlcnJvcilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDM6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA3NzgKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiA2OTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBTdHJhdGVneSBmb3IgQ29yZSBWRlMgYW5kIEFGUyBPd25lcnNoaXAgQ2hlY2tzKioKCk9rYXksIHNvIGBzZXRhdHRyX3ByZXBhcmVgIGlzIGV4cG9ydGVkLCB0aGF0JiMzOTtzIG91ciBzdGFydGluZyBwb2ludC4gVGhlIGNydWNpYWwgc3ltYm9scyB0byB0YXJnZXQgYXJlOgoKKiAgIGB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWVgCiogICBgYWZzX2lzX293bmVkX2J5X21lYAoqICAgYGFmc19oYXZlX3NhbWVfb3duZXJgCiogICBgaW5vZGVfb3duZXJfb3JfY2FwYWJsZWAKKiAgIGB2ZnNfc2V0bGVhc2VgCiogICBgX19jaGVja19zdGlja3lgCiogICBgc2V0YXR0cl9wcmVwYXJlYAoKTm93LCByZWdhcmRpbmcgYHZmc19pbm9kZV9pc19vd25lZF9ieV9tZWAsIGl0JiMzOTtzIG5vdCBleHBvcnRlZC4gQnV0LCBhbmQgdGhpcyBpcyBrZXksIGl0JiMzOTtzIG5vbi1zdGF0aWMuIFNpbmNlIFN5emthbGxlciBjYW4gZnV6eiBub24tc3RhdGljIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIGtlcm5lbCBjb3JlLCB0aGF0JiMzOTtzIG5vdCBhIHByb2JsZW0uIFdhaXQgYSBtb21lbnQsIFN5emthbGxlciBwcmltYXJpbHkgZm9jdXNlcyBvbiBzeXNjYWxscy4gVGhlc2Ugc3ltYm9scyBhY3QgYXMgYSBndWlkZSB0byByZWFjaCBmdW5jdGlvbnMgdGhhdCBpbXBsZW1lbnQgdGhlIHN5c2NhbGxzLiBTbywgbm9uLXN0YXRpYyBmdW5jdGlvbnMgbGlrZSBgdmZzX2lub2RlX2lzX293bmVkX2J5X21lYCBhcmUgcGVyZmVjdGx5IHZhbGlkIHRhcmdldHMuCgpMZXQmIzM5O3MgZG91YmxlLWNoZWNrIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMuIEkgYmVsaWV2ZSBgQUZTX0ZTYCBpcyByZXF1aXJlZC4gQXJlIHRoZXJlIGFueSBvdGhlciBjb25maWcgb3B0aW9ucz8gTm8sIHRoZSBvdGhlciBjaGFuZ2VzIGFyZSB3aXRoaW4gdGhlIGNvcmUgVkZTLgoKQWxyaWdodCwgdGltZSB0byBzb2xpZGlmeSB0aGUgcmF0aW9uYWxlLiBUaGlzIHBhdGNoIGludHJvZHVjZXMgYGlzX293bmVkX2J5X21lYCBhbmQgYGhhdmVfc2FtZV9vd25lcmAgaW5vZGUgb3BlcmF0aW9ucy4gVGhlc2UgYWxsb3cgZmlsZXN5c3RlbXMsIGVzcGVjaWFsbHkgQUZTLCB0byBvdmVycmlkZSBkZWZhdWx0IFZGUyBvd25lcnNoaXAgY2hlY2tzLiBTZXZlcmFsIGNyaXRpY2FsIFZGUyBwYXRocyBhcmUgbW9kaWZpZWQuIEl0IHRvdWNoZXMgY29kZSBsaWtlIGBjaG93bl9va2AsIGBjaGdycF9va2AsIGBjb3JlZHVtcF9maWxlYCwgYGlub2RlX293bmVyX29yX2NhcGFibGVgLCBgdmZzX3NldGxlYXNlYCwgYG1heV9mb2xsb3dfbGlua2AsIGBtYXlfY3JlYXRlX2luX3N0aWNreWAsIGBfX2NoZWNrX3N0aWNreWAsIGFuZCBgbWF5X2RlZHVwZV9maWxlYC4gVGhpcyByZXByZXNlbnRzIGEgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIFZGUyBhbmQgQUZTLCBhbmQgaXQgZGVtYW5kcyB0aG9yb3VnaCBmdXp6aW5nIHRvIGd1YXJkIGFnYWluc3QgcmVncmVzc2lvbnMgYW5kIHBvdGVudGlhbCBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMuCgpNeSB0YXJnZXQgc3ltYm9scyBub3cgbG9vayBsaWtlIHRoaXM6CgoqICAgYHZmc19pbm9kZV9pc19vd25lZF9ieV9tZWAKKiAgIGBhZnNfaXNfb3duZWRfYnlfbWVgCiogICBgYWZzX2hhdmVfc2FtZV9vd25lcmAKKiAgIGBpbm9kZV9vd25lcl9vcl9jYXBhYmxlYAoqICAgYHZmc19zZXRsZWFzZWAKKiAgIGBfX2NoZWNrX3N0aWNreWAKKiAgIGBzZXRhdHRyX3ByZXBhcmVgCgpMZXQmIzM5O3MgY29uZmlybSB0aGF0IGB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWVgIGlzIGFjdHVhbGx5IGNhbGxlZCBmcm9tIGBzZXRhdHRyX3ByZXBhcmVgLiBZZXMsIGBzZXRhdHRyX3ByZXBhcmVgIGNhbGxzIGBjaG93bl9va2AgYW5kIGBjaGdycF9va2Agd2hpY2ggY2FsbCBgdmZzX2lub2RlX2lzX293bmVkX2J5X21lYC4KCk5vdywgZG9lcyBgbWF5X2NyZWF0ZV9pbl9zdGlja3lgIGhhdmUgY2FsbCBzaXRlcyB3ZSBjYW4gbGV2ZXJhZ2U/IEl0JiMzOTtzIGNhbGxlZCBmcm9tIGBtYXlfb3BlbmAgYW5kIGBtYXlfY3JlYXRlYCwgYW5kIGBtYXlfbGlua2F0YCBjYWxscyBgbWF5X2ZvbGxvd19saW5rYC4gQW5kIGB2ZnNfY2xvbmVfZmlsZV9yYW5nZWAgYW5kIGB2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2Vfb25lYCBjYWxsIGBtYXlfZGVkdXBlX2ZpbGVgLiBJIHRoaW5rIHdlIGNvdWxkIGFkZCBgdmZzX2RlZHVwZV9maWxlX3JhbmdlX29uZWAgdG9vLiBZZXMsIGl0JiMzOTtzIHdvcnRoIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwMzozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2Vfb25lJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL292ZXJsYXlmcy9maWxlLmM9NTI3PXN0YXRpYyBsb2ZmX3Qgb3ZsX2NvcHlmaWxlKHN0cnVjdCBmaWxlICpmaWxlX2luLCBsb2ZmX3QgcG9zX2luLFxuLS1cbmZzL292ZXJsYXlmcy9maWxlLmMtNTY2LVx0XHRjYXNlIE9WTF9ERURVUEU6XG5mcy9vdmVybGF5ZnMvZmlsZS5jOjU2NzpcdFx0XHRyZXQgPSB2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2Vfb25lKHJlYWxmaWxlX2luLCBwb3NfaW4sXG5mcy9vdmVybGF5ZnMvZmlsZS5jLTU2OC1cdFx0XHRcdFx0XHRcdHJlYWxmaWxlX291dCwgcG9zX291dCwgbGVuLFxuLS1cbmZzL3JlbWFwX3JhbmdlLmM9NDE2PXN0YXRpYyBpbnQgbWF5X2RlZHVwZV9maWxlKHN0cnVjdCBmaWxlICpmaWxlKVxuLS1cbmZzL3JlbWFwX3JhbmdlLmMtNDMzLVxuZnMvcmVtYXBfcmFuZ2UuYzo0MzQ6bG9mZl90IHZmc19kZWR1cGVfZmlsZV9yYW5nZV9vbmUoc3RydWN0IGZpbGUgKnNyY19maWxlLCBsb2ZmX3Qgc3JjX3BvcyxcbmZzL3JlbWFwX3JhbmdlLmMtNDM1LVx0XHRcdFx0IHN0cnVjdCBmaWxlICpkc3RfZmlsZSwgbG9mZl90IGRzdF9wb3MsXG4tLVxuZnMvcmVtYXBfcmFuZ2UuYy00OTEtfVxuZnMvcmVtYXBfcmFuZ2UuYzo0OTI6RVhQT1JUX1NZTUJPTCh2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2Vfb25lKTtcbmZzL3JlbWFwX3JhbmdlLmMtNDkzLVxuZnMvcmVtYXBfcmFuZ2UuYz00OTQ9aW50IHZmc19kZWR1cGVfZmlsZV9yYW5nZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGZpbGVfZGVkdXBlX3JhbmdlICpzYW1lKVxuLS1cbmZzL3JlbWFwX3JhbmdlLmMtNTUyLVxuZnMvcmVtYXBfcmFuZ2UuYzo1NTM6XHRcdGRlZHVwZWQgPSB2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2Vfb25lKGZpbGUsIG9mZiwgZmRfZmlsZShkc3RfZmQpLFxuZnMvcmVtYXBfcmFuZ2UuYy01NTQtXHRcdFx0XHRcdFx0ICAgIGluZm8tXHUwMDNlZGVzdF9vZmZzZXQsIGxlbixcbi0tXG5pbmNsdWRlL2xpbnV4L2ZzLmg9MjA5Mj1leHRlcm4gaW50IHZmc19kZWR1cGVfZmlsZV9yYW5nZShzdHJ1Y3QgZmlsZSAqZmlsZSxcbmluY2x1ZGUvbGludXgvZnMuaC0yMDkzLVx0XHRcdFx0IHN0cnVjdCBmaWxlX2RlZHVwZV9yYW5nZSAqc2FtZSk7XG5pbmNsdWRlL2xpbnV4L2ZzLmg6MjA5NDpleHRlcm4gbG9mZl90IHZmc19kZWR1cGVfZmlsZV9yYW5nZV9vbmUoc3RydWN0IGZpbGUgKnNyY19maWxlLCBsb2ZmX3Qgc3JjX3BvcyxcbmluY2x1ZGUvbGludXgvZnMuaC0yMDk1LVx0XHRcdFx0XHRzdHJ1Y3QgZmlsZSAqZHN0X2ZpbGUsIGxvZmZfdCBkc3RfcG9zLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwMzozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjc4NQoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDQ0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEtlcm5lbCBQYXRjaDogRm9jdXMgb24gRmlsZSBTeXN0ZW0gU2VjdXJpdHkgYW5kIEFGUyoqCgpPa2F5LCBzbyBgdmZzX2RlZHVwZV9maWxlX3JhbmdlX29uZWAgKmlzKiBleHBvcnRlZCwgdGhhdCYjMzk7cyBnb29kIHRvIGtub3cuIE5vdywgbGV0JiMzOTtzIHRha2UgYSBxdWljayBsb29rIGF0IGBjb3JlZHVtcF9maWxlYC4gUmlnaHQsIGl0JiMzOTtzIHN0YXRpYywgYW5kIHRoZSBjYWxsZXIgaXMgYGRvX2NvcmVkdW1wYC4gU2VlbXMgbGlrZSB3ZSBjYW4gaWdub3JlIHRoYXQgb25lLiBHb3R0YSBzdGljayB0byB0aGUgY29yZSBhcmVhcyBvZiBpbnRlcmVzdCBoZXJlLgoKTXkgZm9jdXMgc3ltYm9scyBhcmU6IGB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWVgLCBgYWZzX2lzX293bmVkX2J5X21lYCwgYGFmc19oYXZlX3NhbWVfb3duZXJgLCBgaW5vZGVfb3duZXJfb3JfY2FwYWJsZWAsIGB2ZnNfc2V0bGVhc2VgLCBgX19jaGVja19zdGlja3lgLCBgc2V0YXR0cl9wcmVwYXJlYCwgYW5kIGB2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2Vfb25lYC4gVGhpcyBsb29rcyBsaWtlIGEgc29saWQgbGlzdCB0byBzdGFydCB3aXRoLgoKSSYjMzk7bSBqdXN0IGdvaW5nIHRvIGRvdWJsZS1jaGVjayBgYWZzX2lzX293bmVkX2J5X21lYCBhbmQgYGFmc19oYXZlX3NhbWVfb3duZXJgLiBBaCwgeWVzLCB0aGV5IGFyZSBpbmRlZWQgaW4gYGZzL2Fmcy9zZWN1cml0eS5jYC4gTGV0IG1lIHNlZS4uLiBhcmUgdGhlcmUgYW55ICpvdGhlciogQUZTIGZ1bmN0aW9ucyB0aGF0IGhhdmUgYmVlbiBtb2RpZmllZD8gSSBzZWUgYGFmc19lZGl0X2Rpcl9yZW1vdmVgIGluIGBmcy9hZnMvZGlyX2VkaXQuY2AsIGBhZnNfZGlyX2ZpbmRfYmxvY2tgIGluIGBmcy9hZnMvZGlyX3NlYXJjaC5jYCwgYGFmc19mc19mZXRjaF9kYXRhYCBpbiBgZnMvYWZzL2ZzY2xpZW50LmNgLCBgYWZzX2lub2RlX2luaXRfZnJvbV9zdGF0dXNgIGluIGBmcy9hZnMvaW5vZGUuY2AsIGFuZCBgYWZzX21ha2Vfb3BfY2FsbGAgaW4gYGZzL2Fmcy9pbnRlcm5hbC5oYC4KCldhaXQgYSBtaW51dGUsIEkgc2VlIHRoZSBwYXRjaCBtb2RpZmllcyBgYWZzX2VkaXRfZGlyX3JlbW92ZWAgYW5kIGBhZnNfZGlyX2ZpbmRfYmxvY2tgIHRvIHVzZSBgYWZzX2Rpcl9nZXRfYmxvY2tgIGFuZCBgYWZzX2Rpcl9lbmRfaXRlcmAuIEludGVyZXN0aW5nLiBBbmQgYGFmc19mc19mZXRjaF9kYXRhYCBzZXRzIGBjYWxsLSZndDthc3luYyA9IHRydWVgLiBBbmQgYGFmc19tYWtlX29wX2NhbGxgIHVzZXMgYGFmc19nZXRfY2FsbGAgYW5kIGBhZnNfcHV0X2NhbGxgLiBUaGVzZSBhcmUgY2xlYXJseSBBRlMtc3BlY2lmaWMgZml4ZXMgYW5kIGNoYW5nZXMuIEkgbmVlZCB0byBmYWN0b3IgdGhlc2UgaW50byBteSBhbmFseXNpcy4gSSYjMzk7bGwgYWRkIGBhZnNfZWRpdF9kaXJfcmVtb3ZlYCBhbmQgYGFmc19mc19mZXRjaF9kYXRhYCB0byBteSBsaXN0IG9mIGZvY3VzIHN5bWJvbHMuIEl0JiMzOTtzIGltcG9ydGFudCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHRoZSBBRlMgY2hhbmdlcyBhbG9uZ3NpZGUgdGhlIG90aGVyIGZpbGUgc3lzdGVtIGNvbXBvbmVudHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAzOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Fmc19lZGl0X2Rpcl9yZW1vdmUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvYWZzL2Rpci5jPTEzNzA9c3RhdGljIHZvaWQgYWZzX3JtZGlyX2VkaXRfZGlyKHN0cnVjdCBhZnNfb3BlcmF0aW9uICpvcClcbi0tXG5mcy9hZnMvZGlyLmMtMTM4Mi1cdCAgICBkdm5vZGUtXHUwMDNlc3RhdHVzLmRhdGFfdmVyc2lvbiA9PSBkdnAtXHUwMDNlZHZfYmVmb3JlICYjNDM7IGR2cC1cdTAwM2Vkdl9kZWx0YSlcbmZzL2Fmcy9kaXIuYzoxMzgzOlx0XHRhZnNfZWRpdF9kaXJfcmVtb3ZlKGR2bm9kZSwgXHUwMDI2b3AtXHUwMDNlZGVudHJ5LVx1MDAzZWRfbmFtZSxcbmZzL2Fmcy9kaXIuYy0xMzg0LVx0XHRcdFx0ICAgIGFmc19lZGl0X2Rpcl9mb3Jfcm1kaXIpO1xuLS1cbmZzL2Fmcy9kaXIuYz0xNTE4PXN0YXRpYyB2b2lkIGFmc191bmxpbmtfZWRpdF9kaXIoc3RydWN0IGFmc19vcGVyYXRpb24gKm9wKVxuLS1cbmZzL2Fmcy9kaXIuYy0xNTI4LVx0ICAgIGR2bm9kZS1cdTAwM2VzdGF0dXMuZGF0YV92ZXJzaW9uID09IGR2cC1cdTAwM2Vkdl9iZWZvcmUgJiM0MzsgZHZwLVx1MDAzZWR2X2RlbHRhKVxuZnMvYWZzL2Rpci5jOjE1Mjk6XHRcdGFmc19lZGl0X2Rpcl9yZW1vdmUoZHZub2RlLCBcdTAwMjZvcC1cdTAwM2VkZW50cnktXHUwMDNlZF9uYW1lLFxuZnMvYWZzL2Rpci5jLTE1MzAtXHRcdFx0XHQgICAgYWZzX2VkaXRfZGlyX2Zvcl91bmxpbmspO1xuLS1cbmZzL2Fmcy9kaXIuYz0xODkwPXN0YXRpYyB2b2lkIGFmc19yZW5hbWVfZWRpdF9kaXIoc3RydWN0IGFmc19vcGVyYXRpb24gKm9wKVxuLS1cbmZzL2Fmcy9kaXIuYy0xOTE1LVx0ICAgIG9yaWdfZHZub2RlLVx1MDAzZXN0YXR1cy5kYXRhX3ZlcnNpb24gPT0gb3JpZ19kdnAtXHUwMDNlZHZfYmVmb3JlICYjNDM7IG9yaWdfZHZwLVx1MDAzZWR2X2RlbHRhKVxuZnMvYWZzL2Rpci5jOjE5MTY6XHRcdGFmc19lZGl0X2Rpcl9yZW1vdmUob3JpZ19kdm5vZGUsIFx1MDAyNm9sZF9kZW50cnktXHUwMDNlZF9uYW1lLFxuZnMvYWZzL2Rpci5jLTE5MTctXHRcdFx0XHQgICAgYWZzX2VkaXRfZGlyX2Zvcl9yZW5hbWVfMCk7XG4tLVxuZnMvYWZzL2Rpci5jLTE5MjYtXHRcdGlmICghb3AtXHUwMDNlcmVuYW1lLm5ld19uZWdhdGl2ZSlcbmZzL2Fmcy9kaXIuYzoxOTI3Olx0XHRcdGFmc19lZGl0X2Rpcl9yZW1vdmUobmV3X2R2bm9kZSwgXHUwMDI2bmV3X2RlbnRyeS1cdTAwM2VkX25hbWUsXG5mcy9hZnMvZGlyLmMtMTkyOC1cdFx0XHRcdFx0ICAgIGFmc19lZGl0X2Rpcl9mb3JfcmVuYW1lXzEpO1xuLS1cbmZzL2Fmcy9kaXJfZWRpdC5jPTI0MT12b2lkIGFmc19lZGl0X2Rpcl9hZGQoc3RydWN0IGFmc192bm9kZSAqdm5vZGUsXG4tLVxuZnMvYWZzL2Rpcl9lZGl0LmMtMzkyLSAqL1xuZnMvYWZzL2Rpcl9lZGl0LmM6MzkzOnZvaWQgYWZzX2VkaXRfZGlyX3JlbW92ZShzdHJ1Y3QgYWZzX3Zub2RlICp2bm9kZSxcbmZzL2Fmcy9kaXJfZWRpdC5jLTM5NC1cdFx0XHQgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsIGVudW0gYWZzX2VkaXRfZGlyX3JlYXNvbiB3aHkpXG4tLVxuZnMvYWZzL2Rpcl9zaWxseS5jPTIzPXN0YXRpYyB2b2lkIGFmc19zaWxseV9yZW5hbWVfZWRpdF9kaXIoc3RydWN0IGFmc19vcGVyYXRpb24gKm9wKVxuLS1cbmZzL2Fmcy9kaXJfc2lsbHkuYy00MS1cdCAgICBkdm5vZGUtXHUwMDNlc3RhdHVzLmRhdGFfdmVyc2lvbiA9PSBkdnAtXHUwMDNlZHZfYmVmb3JlICYjNDM7IGR2cC1cdTAwM2Vkdl9kZWx0YSkge1xuZnMvYWZzL2Rpcl9zaWxseS5jOjQyOlx0XHRhZnNfZWRpdF9kaXJfcmVtb3ZlKGR2bm9kZSwgXHUwMDI2b2xkLVx1MDAzZWRfbmFtZSxcbmZzL2Fmcy9kaXJfc2lsbHkuYy00My1cdFx0XHRcdCAgICBhZnNfZWRpdF9kaXJfZm9yX3NpbGx5XzApO1xuLS1cbmZzL2Fmcy9kaXJfc2lsbHkuYz0xNzY9c3RhdGljIHZvaWQgYWZzX3NpbGx5X3VubGlua19lZGl0X2RpcihzdHJ1Y3QgYWZzX29wZXJhdGlvbiAqb3ApXG4tLVxuZnMvYWZzL2Rpcl9zaWxseS5jLTE4NC1cdCAgICBkdm5vZGUtXHUwMDNlc3RhdHVzLmRhdGFfdmVyc2lvbiA9PSBkdnAtXHUwMDNlZHZfYmVmb3JlICYjNDM7IGR2cC1cdTAwM2Vkdl9kZWx0YSlcbmZzL2Fmcy9kaXJfc2lsbHkuYzoxODU6XHRcdGFmc19lZGl0X2Rpcl9yZW1vdmUoZHZub2RlLCBcdTAwMjZvcC1cdTAwM2VkZW50cnktXHUwMDNlZF9uYW1lLFxuZnMvYWZzL2Rpcl9zaWxseS5jLTE4Ni1cdFx0XHRcdCAgICBhZnNfZWRpdF9kaXJfZm9yX3VubGluayk7XG4tLVxuZnMvYWZzL2ludGVybmFsLmg9MTExOD1leHRlcm4gdm9pZCBhZnNfZWRpdF9kaXJfYWRkKHN0cnVjdCBhZnNfdm5vZGUgKiwgY29uc3Qgc3RydWN0IHFzdHIgKiwgc3RydWN0IGFmc19maWQgKixcbmZzL2Fmcy9pbnRlcm5hbC5oLTExMTktXHRcdFx0ICAgICBlbnVtIGFmc19lZGl0X2Rpcl9yZWFzb24pO1xuZnMvYWZzL2ludGVybmFsLmg6MTEyMDpleHRlcm4gdm9pZCBhZnNfZWRpdF9kaXJfcmVtb3ZlKHN0cnVjdCBhZnNfdm5vZGUgKiwgY29uc3Qgc3RydWN0IHFzdHIgKiwgZW51bSBhZnNfZWRpdF9kaXJfcmVhc29uKTtcbmZzL2Fmcy9pbnRlcm5hbC5oLTExMjEtdm9pZCBhZnNfZWRpdF9kaXJfdXBkYXRlKHN0cnVjdCBhZnNfdm5vZGUgKnZub2RlLCBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDM6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQ4ODUKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKk5hdmlnYXRpbmcgdGhlIEFGUyBDb2RlYmFzZTogQSBCcmllZiBBdWRpdCoqCgpBbHJpZ2h0LCBzbyBgYWZzX2VkaXRfZGlyX3JlbW92ZWAgaXMgKm5vdCogc3RhdGljLiBUaGF0IGltbWVkaWF0ZWx5IHBpcXVlcyBteSBpbnRlcmVzdC4gTm9uLXN0YXRpYyBpbXBsaWVzIGl0JiMzOTtzIGV4cG9zZWQgZXh0ZXJuYWxseSwgcGVyaGFwcyBjYWxsZWQgZnJvbSBvdGhlciBwYXJ0cyBvZiB0aGUgQUZTIGtlcm5lbCBtb2R1bGUsIG9yIGV2ZW4gZnJvbSB1c2VyIHNwYWNlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29udGV4dC4gVGhpcyBtZWFucyBJIHNob3VsZCBwcm9iYWJseSB1bmRlcnN0YW5kIHdobyAqY2FsbHMqIHRoaXMsIG9yIHBvdGVudGlhbGx5LCB3aG8gKmNhbiogY2FsbCB0aGlzLgoKTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgZm9yIHNvbWUgcmVsZXZhbnQgY2FsbCBzaXRlcy4gU3BlY2lmaWNhbGx5LCBJIHNob3VsZCBsb29rIGNsb3NlbHkgYXQgdGhlIGRhdGEgZmV0Y2hpbmcgbG9naWMuIEkgd2lsbCBub3cgbG9vayBvdmVyIGBhZnNfZnNfZmV0Y2hfZGF0YWAgYW5kIHNlZSBpZiB0aGUgdHdvIGFyZSBzb21laG93IHJlbGF0ZWQuIFRoZXJlIG1heSBiZSBzb21lIHZ1bG5lcmFiaWxpdHkgaW4gdGhlc2UgcGllY2VzLCBpbiBzb21lIGludGVyYWN0aW9uIHdpdGggdGhlIGVkaXRpbmcgb2YgYSBkaXJlY3RvcnkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAzOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Fmc19mc19mZXRjaF9kYXRhJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2Fmcy9maWxlLmM9MjMzPWNvbnN0IHN0cnVjdCBhZnNfb3BlcmF0aW9uX29wcyBhZnNfZmV0Y2hfZGF0YV9vcGVyYXRpb24gPSB7XG5mcy9hZnMvZmlsZS5jOjIzNDpcdC5pc3N1ZV9hZnNfcnBjXHQ9IGFmc19mc19mZXRjaF9kYXRhLFxuZnMvYWZzL2ZpbGUuYy0yMzUtXHQuaXNzdWVfeWZzX3JwY1x0PSB5ZnNfZnNfZmV0Y2hfZGF0YSxcbi0tXG5mcy9hZnMvZmlsZS5jPTI0MT1zdGF0aWMgdm9pZCBhZnNfaXNzdWVfcmVhZF9jYWxsKHN0cnVjdCBhZnNfb3BlcmF0aW9uICpvcClcbi0tXG5mcy9hZnMvZmlsZS5jLTI0OC1cdGVsc2VcbmZzL2Fmcy9maWxlLmM6MjQ5Olx0XHRhZnNfZnNfZmV0Y2hfZGF0YShvcCk7XG5mcy9hZnMvZmlsZS5jLTI1MC19XG4tLVxuZnMvYWZzL2ZzY2xpZW50LmM9NDE3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYWZzX2NhbGxfdHlwZSBhZnNfUlhGU0ZldGNoRGF0YTY0ID0ge1xuLS1cbmZzL2Fmcy9mc2NsaWVudC5jLTQyOC0gKi9cbmZzL2Fmcy9mc2NsaWVudC5jOjQyOTpzdGF0aWMgdm9pZCBhZnNfZnNfZmV0Y2hfZGF0YTY0KHN0cnVjdCBhZnNfb3BlcmF0aW9uICpvcClcbmZzL2Fmcy9mc2NsaWVudC5jLTQzMC17XG4tLVxuZnMvYWZzL2ZzY2xpZW50LmMtNDYzLSAqL1xuZnMvYWZzL2ZzY2xpZW50LmM6NDY0OnZvaWQgYWZzX2ZzX2ZldGNoX2RhdGEoc3RydWN0IGFmc19vcGVyYXRpb24gKm9wKVxuZnMvYWZzL2ZzY2xpZW50LmMtNDY1LXtcbi0tXG5mcy9hZnMvZnNjbGllbnQuYy00NzEtXHRpZiAodGVzdF9iaXQoQUZTX1NFUlZFUl9GTF9IQVNfRlM2NCwgXHUwMDI2b3AtXHUwMDNlc2VydmVyLVx1MDAzZWZsYWdzKSlcbmZzL2Fmcy9mc2NsaWVudC5jOjQ3MjpcdFx0cmV0dXJuIGFmc19mc19mZXRjaF9kYXRhNjQob3ApO1xuZnMvYWZzL2ZzY2xpZW50LmMtNDczLVxuLS1cbmZzL2Fmcy9pbnRlcm5hbC5oPTExOTA9ZXh0ZXJuIHZvaWQgYWZzX2ZzX2ZldGNoX3N0YXR1cyhzdHJ1Y3QgYWZzX29wZXJhdGlvbiAqKTtcbmZzL2Fmcy9pbnRlcm5hbC5oOjExOTE6ZXh0ZXJuIHZvaWQgYWZzX2ZzX2ZldGNoX2RhdGEoc3RydWN0IGFmc19vcGVyYXRpb24gKik7XG5mcy9hZnMvaW50ZXJuYWwuaC0xMTkyLWV4dGVybiB2b2lkIGFmc19mc19jcmVhdGVfZmlsZShzdHJ1Y3QgYWZzX29wZXJhdGlvbiAqKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDM6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzU2NjEKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiA0MzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEFGUyBGaWxlIFN5c3RlbSBPcGVyYXRpb25zKioKCk9rYXksIHNvIGBhZnNfZnNfZmV0Y2hfZGF0YWAgaXNuJiMzOTt0IHN0YXRpYy4gVGhhdCYjMzk7cyBnb29kIHRvIGtub3csIG1ha2VzIGl0IGVhc2llciB0byB0cmFjay4gTGV0JiMzOTtzIHNlZSBhYm91dCBgYWZzX21ha2Vfb3BfY2FsbGAuIEFoLCBpdCYjMzk7cyBhIHN0YXRpYyBpbmxpbmUgZnVuY3Rpb24sIHR1Y2tlZCBhd2F5IGluIGBmcy9hZnMvaW50ZXJuYWwuaGAuCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCB0byB0aGUgY29yZS4gQmFzZWQgb24gdGhpcywgSSYjMzk7bSB0aGlua2luZyB0aGUga2V5IHN5bWJvbHMgdG8gcmVhbGx5IGRpZyBpbnRvIGFyZToKLSAgIGB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWVgCi0gICBgYWZzX2lzX293bmVkX2J5X21lYAotICAgYGFmc19oYXZlX3NhbWVfb3duZXJgCi0gICBgaW5vZGVfb3duZXJfb3JfY2FwYWJsZWAKLSAgIGB2ZnNfc2V0bGVhc2VgCi0gICBgX19jaGVja19zdGlja3lgCi0gICBgc2V0YXR0cl9wcmVwYXJlYAotICAgYHZmc19kZWR1cGVfZmlsZV9yYW5nZV9vbmVgCi0gICBgYWZzX2VkaXRfZGlyX3JlbW92ZWAKLSAgIGBhZnNfZnNfZmV0Y2hfZGF0YWAKClNlZW1zIGxpa2UgYSBzb2xpZCBzdGFydGluZyBwb2ludCBmb3IgaW52ZXN0aWdhdGlvbi4gQW5kIHRoZSByZWxldmFudCBjb25maWcgaXMgYEFGU19GU2AsIG5hdHVyYWxseS4KCk5vdywgYSBxdWljayB2ZXJpZmljYXRpb24gb24gYGFmc19kaXJfZmluZF9ibG9ja2AuIFdhc24mIzM5O3QgaXQgcmVuYW1lZD8gTGV0JiMzOTtzIHNlZS4uLiBZZXAsIHRoZSBkaWZmIHNob3dzIHRoZSBvbGQgbmFtZSByZXBsYWNlZCB3aXRoIGBhZnNfZGlyX2dldF9ibG9ja2AuCkhhbmcgb24gYSBzZWMuIEh1aC4gYGFmc19kaXJfZmluZF9ibG9ja2AgKmlzKiBzdGlsbCBhcm91bmQuIExvb2tpbmcgYXQgdGhlIGRpZmYsIGl0IGxvb2tzIGxpa2UgaXQgd2FzICptb2RpZmllZCogcmF0aGVyIHRoYW4gZGVsZXRlZC4gSXQgbG9va3MgbGlrZSBgYWZzX2Rpcl9maW5kX2Jsb2NrYCBpcyBtb2RpZmllZC4KCkkgc2hvdWxkIGRlZmluaXRlbHkgYWRkIHRoYXQgdG8gdGhlIGZvY3VzIHN5bWJvbHMsIGdpdmVuIHRoZSBjaGFuZ2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAzOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Fmc19kaXJfZmluZF9ibG9jayYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9hZnMvZGlyX2VkaXQuYz0zOTM9dm9pZCBhZnNfZWRpdF9kaXJfcmVtb3ZlKHN0cnVjdCBhZnNfdm5vZGUgKnZub2RlLFxuLS1cbmZzL2Fmcy9kaXJfZWRpdC5jLTQzNS1cbmZzL2Fmcy9kaXJfZWRpdC5jOjQzNjpcdGJsb2NrID0gYWZzX2Rpcl9maW5kX2Jsb2NrKFx1MDAyNml0ZXIsIGIpO1xuZnMvYWZzL2Rpcl9lZGl0LmMtNDM3LVx0aWYgKCFibG9jaylcbi0tXG5mcy9hZnMvZGlyX2VkaXQuYy00ODAtXG5mcy9hZnMvZGlyX2VkaXQuYzo0ODE6XHRcdHBibG9jayA9IGFmc19kaXJfZmluZF9ibG9jayhcdTAwMjZpdGVyLCBwYik7XG5mcy9hZnMvZGlyX2VkaXQuYy00ODItXHRcdGlmICghcGJsb2NrKVxuLS1cbmZzL2Fmcy9kaXJfc2VhcmNoLmM9NTc9Ym9vbCBhZnNfZGlyX2luaXRfaXRlcihzdHJ1Y3QgYWZzX2Rpcl9pdGVyICppdGVyLCBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSlcbi0tXG5mcy9hZnMvZGlyX3NlYXJjaC5jLTY2LSAqL1xuZnMvYWZzL2Rpcl9zZWFyY2guYzo2Nzp1bmlvbiBhZnNfeGRyX2Rpcl9ibG9jayAqYWZzX2Rpcl9maW5kX2Jsb2NrKHN0cnVjdCBhZnNfZGlyX2l0ZXIgKml0ZXIsIHNpemVfdCBibG9jaylcbmZzL2Fmcy9kaXJfc2VhcmNoLmMtNjgte1xuLS1cbmZzL2Fmcy9kaXJfc2VhcmNoLmM9MTIwPWludCBhZnNfZGlyX3NlYXJjaF9idWNrZXQoc3RydWN0IGFmc19kaXJfaXRlciAqaXRlciwgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsXG4tLVxuZnMvYWZzL2Rpcl9zZWFyY2guYy0xMjYtXG5mcy9hZnMvZGlyX3NlYXJjaC5jOjEyNzpcdG1ldGEgPSBhZnNfZGlyX2ZpbmRfYmxvY2soaXRlciwgMCk7XG5mcy9hZnMvZGlyX3NlYXJjaC5jLTEyOC1cdGlmICghbWV0YSlcbi0tXG5mcy9hZnMvZGlyX3NlYXJjaC5jLTE0OC1cbmZzL2Fmcy9kaXJfc2VhcmNoLmM6MTQ5Olx0XHRibG9jayA9IGFmc19kaXJfZmluZF9ibG9jayhpdGVyLCBibG51bSk7XG5mcy9hZnMvZGlyX3NlYXJjaC5jLTE1MC1cdFx0aWYgKCFibG9jaylcbi0tXG5mcy9hZnMvaW50ZXJuYWwuaD0xMTI5PWJvb2wgYWZzX2Rpcl9pbml0X2l0ZXIoc3RydWN0IGFmc19kaXJfaXRlciAqaXRlciwgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUpO1xuZnMvYWZzL2ludGVybmFsLmg6MTEzMDp1bmlvbiBhZnNfeGRyX2Rpcl9ibG9jayAqYWZzX2Rpcl9maW5kX2Jsb2NrKHN0cnVjdCBhZnNfZGlyX2l0ZXIgKml0ZXIsIHNpemVfdCBibG9jayk7XG5mcy9hZnMvaW50ZXJuYWwuaC0xMTMxLWludCBhZnNfZGlyX3NlYXJjaF9idWNrZXQoc3RydWN0IGFmc19kaXJfaXRlciAqaXRlciwgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAzOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM3MTA2CgkJCQkJCQlvdXRwdXQ6IDMyMgoJCQkJCQkJdGhvdWdodHM6IDM0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQcm9wb3NlZCBQYXRjaCoqCgpPa2F5LCBzbyBgYWZzX2Rpcl9maW5kX2Jsb2NrYCAqaXMqIG5vbi1zdGF0aWMsIHdoaWNoIEkgaGFkIHRvIGNvbmZpcm0uIFdpdGggdGhhdCBjbGFyaWZpZWQsIG15IGZvY3VzIGxpc3QgZm9yIHRoaXMgcGF0Y2ggaXMgbm93IGxvY2tlZCBkb3duLiBJdCBpbmNsdWRlcyBhIGZldyBWRlMgc3ltYm9scyBJJiMzOTtsbCBiZSBzY3J1dGluaXppbmcgY2xvc2VseTogYHZmc19pbm9kZV9pc19vd25lZF9ieV9tZWAsIGBhZnNfaXNfb3duZWRfYnlfbWVgLCBgYWZzX2hhdmVfc2FtZV9vd25lcmAsIGBpbm9kZV9vd25lcl9vcl9jYXBhYmxlYCwgYHZmc19zZXRsZWFzZWAsIGBfX2NoZWNrX3N0aWNreWAsIGBzZXRhdHRyX3ByZXBhcmVgLCBgdmZzX2RlZHVwZV9maWxlX3JhbmdlX29uZWAsIGBhZnNfZWRpdF9kaXJfcmVtb3ZlYCwgYGFmc19mc19mZXRjaF9kYXRhYCwgYW5kLCBvZiBjb3Vyc2UsIHRoZSBub3cgY29uZmlybWVkIGBhZnNfZGlyX2ZpbmRfYmxvY2tgLgoKVGhlIGNydWNpYWwgYml0IGhlcmUgaXMgdGhhdCB0aGlzIHBhdGNoIGZ1bmRhbWVudGFsbHkgYWx0ZXJzIGhvdyBvd25lcnNoaXAgY2hlY2tzIGFyZSBoYW5kbGVkLCBzcGVjaWZpY2FsbHkgYnkgaW50cm9kdWNpbmcgYGlzX293bmVkX2J5X21lYCBhbmQgYGhhdmVfc2FtZV9vd25lcmAgYXMgbmV3IGlub2RlIG9wZXJhdGlvbnMuIFRoaXMgYWxsb3dzIGZpbGVzeXN0ZW1zLCBBRlMgaW4gdGhpcyBpbnN0YW5jZSwgdG8gZWZmZWN0aXZlbHkgb3ZlcnJpZGUgdGhlIHN0YW5kYXJkIFZGUyBjaGVja3MuIFRoYXQmIzM5O3MgYSBodWdlIGNoYW5nZS4gVGhleSYjMzk7cmUgaG9va2luZyBpbnRvIGtleSBWRlMgcGF0aHM6IGBjaG93bl9va2AsIGBjaGdycF9va2AsIHRoZSBjb3JlZHVtcCBoYW5kbGluZywgdGhlIG93bmVyc2hpcCBjYXBhYmlsaXRpZXMsIHRoZSBsZWFzZSBtYW5hZ2VtZW50LCBzdGlja3kgYml0IGNoZWNraW5nLCBmaWxlIGRlZHVwbGljYXRpb24uIEFsbCBvZiB0aGVzZSBwb2ludHMsIGluIHBhcnRpY3VsYXIgdGhlIGNvcmUgb3duZXJzaGlwIHN0dWZmLCBhcmUgY3JpdGljYWwgYXJlYXMuCgpUaGUgcGF0Y2ggaW5jbHVkZXMgaW1wbGVtZW50YXRpb25zIG9mIHRoZXNlIG5ldyBvcGVyYXRpb25zIGZvciBBRlMgaXRzZWxmLCBhbmQgaXQgYWRkcmVzc2VzIHNvbWUgQUZTLXNwZWNpZmljIGlzc3VlcyByZWxhdGVkIHRvIGRpcmVjdG9yeSBtYW5pcHVsYXRpb24gYW5kIGRhdGEgcmV0cmlldmFsLiBTbyBpdCYjMzk7cyBub3QganVzdCBhIFZGUyBjaGFuZ2U7IGl0JiMzOTtzIGEgc2lnbmlmaWNhbnQgbW9kaWZpY2F0aW9uIG9mIEFGUyBhbG9uZ3NpZGUgaXQuIFRoaXMgaXMgZGVmaW5pdGVseSBhIGNhbmRpZGF0ZSBmb3Igc29tZSBleHRlbnNpdmUgZnV6emluZy4gVGhlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiBib3RoIHRoZSBWRlMgYW5kIHRoZSBBRlMgbGF5ZXJzIHJlcXVpcmUgc29tZSB2ZXJ5IHJpZ29yb3VzIHRlc3RpbmcsIHRvIGF2b2lkIGFueSByZWdyZXNzaW9ucyBvciBwb3RlbnRpYWwgc2VjdXJpdHkgaG9sZXMuIFRoaXMgcmVxdWlyZXMgZ29pbmcgZGVlcCwgYW5kIGEgaGlnaCBjb25maWRlbmNlIGxldmVsIG9mIHJlc3VsdCBvbiB0aGUgZnV6emluZyB3aWxsIGJlIHJlcXVpcmVkLgoKSSBuZWVkIHRvIGNhbGwgc2V0LXJlc3VsdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAzOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtBRlNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWUmIzM0OywKICAgICYjMzQ7YWZzX2lzX293bmVkX2J5X21lJiMzNDssCiAgICAmIzM0O2Fmc19oYXZlX3NhbWVfb3duZXImIzM0OywKICAgICYjMzQ7aW5vZGVfb3duZXJfb3JfY2FwYWJsZSYjMzQ7LAogICAgJiMzNDt2ZnNfc2V0bGVhc2UmIzM0OywKICAgICYjMzQ7X19jaGVja19zdGlja3kmIzM0OywKICAgICYjMzQ7c2V0YXR0cl9wcmVwYXJlJiMzNDssCiAgICAmIzM0O3Zmc19kZWR1cGVfZmlsZV9yYW5nZV9vbmUmIzM0OywKICAgICYjMzQ7YWZzX2VkaXRfZGlyX3JlbW92ZSYjMzQ7LAogICAgJiMzNDthZnNfZnNfZmV0Y2hfZGF0YSYjMzQ7LAogICAgJiMzNDthZnNfZGlyX2ZpbmRfYmxvY2smIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBuZXcgaW5vZGUgb3BlcmF0aW9ucyBgaXNfb3duZWRfYnlfbWVgIGFuZCBgaGF2ZV9zYW1lX293bmVyYCB0byBhbGxvdyBmaWxlc3lzdGVtcyAobGlrZSBBRlMpIHRvIG92ZXJyaWRlIGRlZmF1bHQgVkZTIG93bmVyc2hpcCBjaGVja3MuIEl0IG1vZGlmaWVzIGNvcmUgVkZTIHBhdGhzIChlLmcuLCBgY2hvd25fb2tgLCBgY2hncnBfb2tgLCBgY29yZWR1bXBfZmlsZWAsIGBpbm9kZV9vd25lcl9vcl9jYXBhYmxlYCwgYHZmc19zZXRsZWFzZWAsIGBtYXlfZm9sbG93X2xpbmtgLCBgbWF5X2NyZWF0ZV9pbl9zdGlja3lgLCBgX19jaGVja19zdGlja3lgLCBgbWF5X2RlZHVwZV9maWxlYCkgdG8gdXNlIHRoZXNlIG5ldyBvcGVyYXRpb25zLiBJdCBhbHNvIGltcGxlbWVudHMgdGhlc2Ugb3BlcmF0aW9ucyBmb3IgQUZTIGFuZCBmaXhlcyBzb21lIEFGUy1zcGVjaWZpYyBidWdzIGluIGRpcmVjdG9yeSBlZGl0aW5nIGFuZCBkYXRhIGZldGNoaW5nLiBUaGVzZSBhcmUgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHRoZSBjb3JlIFZGUyBhbmQgQUZTLCBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgb3Igc2VjdXJpdHkgaXNzdWVzIGFyZSBpbnRyb2R1Y2VkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtBRlNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWUmIzM0OywKICAgICYjMzQ7YWZzX2lzX293bmVkX2J5X21lJiMzNDssCiAgICAmIzM0O2Fmc19oYXZlX3NhbWVfb3duZXImIzM0OywKICAgICYjMzQ7aW5vZGVfb3duZXJfb3JfY2FwYWJsZSYjMzQ7LAogICAgJiMzNDt2ZnNfc2V0bGVhc2UmIzM0OywKICAgICYjMzQ7X19jaGVja19zdGlja3kmIzM0OywKICAgICYjMzQ7c2V0YXR0cl9wcmVwYXJlJiMzNDssCiAgICAmIzM0O3Zmc19kZWR1cGVfZmlsZV9yYW5nZV9vbmUmIzM0OywKICAgICYjMzQ7YWZzX2VkaXRfZGlyX3JlbW92ZSYjMzQ7LAogICAgJiMzNDthZnNfZnNfZmV0Y2hfZGF0YSYjMzQ7LAogICAgJiMzNDthZnNfZGlyX2ZpbmRfYmxvY2smIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBuZXcgaW5vZGUgb3BlcmF0aW9ucyBgaXNfb3duZWRfYnlfbWVgIGFuZCBgaGF2ZV9zYW1lX293bmVyYCB0byBhbGxvdyBmaWxlc3lzdGVtcyAobGlrZSBBRlMpIHRvIG92ZXJyaWRlIGRlZmF1bHQgVkZTIG93bmVyc2hpcCBjaGVja3MuIEl0IG1vZGlmaWVzIGNvcmUgVkZTIHBhdGhzIChlLmcuLCBgY2hvd25fb2tgLCBgY2hncnBfb2tgLCBgY29yZWR1bXBfZmlsZWAsIGBpbm9kZV9vd25lcl9vcl9jYXBhYmxlYCwgYHZmc19zZXRsZWFzZWAsIGBtYXlfZm9sbG93X2xpbmtgLCBgbWF5X2NyZWF0ZV9pbl9zdGlja3lgLCBgX19jaGVja19zdGlja3lgLCBgbWF5X2RlZHVwZV9maWxlYCkgdG8gdXNlIHRoZXNlIG5ldyBvcGVyYXRpb25zLiBJdCBhbHNvIGltcGxlbWVudHMgdGhlc2Ugb3BlcmF0aW9ucyBmb3IgQUZTIGFuZCBmaXhlcyBzb21lIEFGUy1zcGVjaWZpYyBidWdzIGluIGRpcmVjdG9yeSBlZGl0aW5nIGFuZCBkYXRhIGZldGNoaW5nLiBUaGVzZSBhcmUgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHRoZSBjb3JlIFZGUyBhbmQgQUZTLCBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgb3Igc2VjdXJpdHkgaXNzdWVzIGFyZSBpbnRyb2R1Y2VkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMjhUMDM6MzM6MDcuNzk5Mzc3OTk0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA4MzU4NTc5OTA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkFGU19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZmc19pbm9kZV9pc19vd25lZF9ieV9tZVwiLFxuICAgIFwiYWZzX2lzX293bmVkX2J5X21lXCIsXG4gICAgXCJhZnNfaGF2ZV9zYW1lX293bmVyXCIsXG4gICAgXCJpbm9kZV9vd25lcl9vcl9jYXBhYmxlXCIsXG4gICAgXCJ2ZnNfc2V0bGVhc2VcIixcbiAgICBcIl9fY2hlY2tfc3RpY2t5XCIsXG4gICAgXCJzZXRhdHRyX3ByZXBhcmVcIixcbiAgICBcInZmc19kZWR1cGVfZmlsZV9yYW5nZV9vbmVcIixcbiAgICBcImFmc19lZGl0X2Rpcl9yZW1vdmVcIixcbiAgICBcImFmc19mc19mZXRjaF9kYXRhXCIsXG4gICAgXCJhZnNfZGlyX2ZpbmRfYmxvY2tcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIG5ldyBpbm9kZSBvcGVyYXRpb25zIGBpc19vd25lZF9ieV9tZWAgYW5kIGBoYXZlX3NhbWVfb3duZXJgIHRvIGFsbG93IGZpbGVzeXN0ZW1zIChsaWtlIEFGUykgdG8gb3ZlcnJpZGUgZGVmYXVsdCBWRlMgb3duZXJzaGlwIGNoZWNrcy4gSXQgbW9kaWZpZXMgY29yZSBWRlMgcGF0aHMgKGUuZy4sIGBjaG93bl9va2AsIGBjaGdycF9va2AsIGBjb3JlZHVtcF9maWxlYCwgYGlub2RlX293bmVyX29yX2NhcGFibGVgLCBgdmZzX3NldGxlYXNlYCwgYG1heV9mb2xsb3dfbGlua2AsIGBtYXlfY3JlYXRlX2luX3N0aWNreWAsIGBfX2NoZWNrX3N0aWNreWAsIGBtYXlfZGVkdXBlX2ZpbGVgKSB0byB1c2UgdGhlc2UgbmV3IG9wZXJhdGlvbnMuIEl0IGFsc28gaW1wbGVtZW50cyB0aGVzZSBvcGVyYXRpb25zIGZvciBBRlMgYW5kIGZpeGVzIHNvbWUgQUZTLXNwZWNpZmljIGJ1Z3MgaW4gZGlyZWN0b3J5IGVkaXRpbmcgYW5kIGRhdGEgZmV0Y2hpbmcuIFRoZXNlIGFyZSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gdGhlIGNvcmUgVkZTIGFuZCBBRlMsIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBvciBzZWN1cml0eSBpc3N1ZXMgYXJlIGludHJvZHVjZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAzOjMzOjA3Ljc5OTM4NjU1NFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY3MDY1NzAxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDc2YjlmNjA2ZWFlMmIwOWUwOTAxZDI0ODgzMmVkNWMxMzYwMGY1NDBcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBKdWwgMjggMDM6MzM6MDUgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy92ZnMucnN0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy92ZnMucnN0XFxuaW5kZXggN2M3NTMxNDhhZjg4ODMuLjg5MzQxOWUwMDNlYWY3IDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZzLnJzdFxcbisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZzLnJzdFxcbkBAIC00NDUsNiArNDQ1LDkgQEAgQXMgb2Yga2VybmVsIDIuNi4yMiwgdGhlIGZvbGxvd2luZyBtZW1iZXJzIGFyZSBkZWZpbmVkOlxcbiBcXHRcXHRcXHRcXHQgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgZmlsZV9rYXR0ciAqZmEpO1xcbiBcXHRcXHRpbnQgKCpmaWxlYXR0cl9nZXQpKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGZpbGVfa2F0dHIgKmZhKTtcXG4gXFx0ICAgICAgICBzdHJ1Y3Qgb2Zmc2V0X2N0eCAqKCpnZXRfb2Zmc2V0X2N0eCkoc3RydWN0IGlub2RlICppbm9kZSk7XFxuK1xcdFxcdGludCAoKmlzX293bmVkX2J5X21lKShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSk7XFxuK1xcdFxcdGludCAoKmhhdmVfc2FtZV9vd25lcikoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpO1xcbiBcXHR9O1xcbiBcXG4gQWdhaW4sIGFsbCBtZXRob2RzIGFyZSBjYWxsZWQgd2l0aG91dCBhbnkgbG9ja3MgYmVpbmcgaGVsZCwgdW5sZXNzXFxuQEAgLTYzNCw2ICs2MzcsMjQgQEAgb3RoZXJ3aXNlIG5vdGVkLlxcbiAgICAgICAgIGZpbGVzeXN0ZW0gbXVzdCBkZWZpbmUgdGhpcyBvcGVyYXRpb24gdG8gdXNlXFxuICAgICAgICAgc2ltcGxlX29mZnNldF9kaXJfb3BlcmF0aW9ucy5cXG4gXFxuK2BgaXNfb3duZWRfYnlfbWVgYFxcbitcXHRjYWxsZWQgdG8gZGV0ZXJtaW5lIGlmIHRoZSBmaWxlIGNhbiBiZSBjb25zaWRlcmVkIHRvIGJlICdvd25lZCcgYnlcXG4rXFx0dGhlIG93bmVyIG9mIHRoZSBwcm9jZXNzIG9yIGlmIHRoZSBwcm9jZXNzIGhhcyBhIHRva2VuIHRoYXQgZ3JhbnRzXFxuK1xcdGl0IG93bmVyc2hpcCBwcml2aWxlZ2VzLiAgSWYgdW5zZXQsIHRoZSBkZWZhdWx0IGlzIHRvIGNvbXBhcmUgaV91aWRcXG4rXFx0dG8gY3VycmVudF9mc3VpZCgpIC0gYnV0IHRoaXMgbWF5IGdpdmUgaW5jb3JyZWN0IHJlc3VsdHMgZm9yIHNvbWVcXG4rXFx0bmV0d29yayBvciBwbHVnLWluIGJsb2NrIGZpbGVzeXN0ZW1zLiAgRm9yIGV4YW1wbGUsIEFGUyBkZXRlcm1pbmVzXFxuK1xcdG93bmVyc2hpcCBlbnRpcmVseSBhY2NvcmRpbmcgdG8gYW4gb2J0YWluZWQgdG9rZW4gYW5kIGlfdWlkIG1heSBub3RcXG4rXFx0ZXZlbiBiZSBmcm9tIHRoZSBzYW1lIElEIHNwYWNlIGFzIGN1cnJlbnRfdWlkKCkuXFxuK1xcbitgYGhhdmVfc2FtZV9vd25lcmBgXFxuK1xcdGNhbGxlZCB0byBkZXRlcm1pbmUgaWYgYW4gaW5vZGUgaGFzIHRoZSBzYW1lIG93bmVyIGFzIGl0cyBpbW1lZGlhdGVcXG4rXFx0cGFyZW50IG9uIHRoZSBwYXRoIHdhbGtlZC4gIElmIHVuc2V0LCB0aGUgZGVmYXVsdCBpcyB0byBzaW1wbHlcXG4rXFx0Y29tcGFyZSB0aGUgaV91aWQgb2YgYm90aC4gIEZvciBleGFtcGxlLCBBRlMgY29tcGFyZXMgdGhlIG93bmVyIElEc1xcbitcXHRvZiBib3RoIC0gYnV0IHRoZXNlIGFyZSBhIDY0LWJpdCB2YWx1ZXMgb24gc29tZSB2YXJpYW50cyB0aGF0IG1pZ2h0XFxuK1xcdG5vdCBmaXQgaW50byBhIGt1aWRfdCBhbmQgY2lmcyBoYXMgR1VJRHMgdGhhdCBjYW5ub3QgYmUgY29tcGFyZWQgdG9cXG4rXFx0a3VpZF90LlxcbitcXG4rXFxuIFRoZSBBZGRyZXNzIFNwYWNlIE9iamVjdFxcbiA9PT09PT09PT09PT09PT09PT09PT09PT1cXG4gXFxuZGlmZiAtLWdpdCBhL2ZzL2Fmcy9kaXIuYyBiL2ZzL2Fmcy9kaXIuY1xcbmluZGV4IDZkZjU2ZmU5MTYzZmQ3Li5lZTJmNWVjMGIyYzY3ZCAxMDA2NDRcXG4tLS0gYS9mcy9hZnMvZGlyLmNcXG4rKysgYi9mcy9hZnMvZGlyLmNcXG5AQCAtNjksNiArNjksOCBAQCBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBhZnNfZGlyX2lub2RlX29wZXJhdGlvbnMgPSB7XFxuIFxcdC5wZXJtaXNzaW9uXFx0PSBhZnNfcGVybWlzc2lvbixcXG4gXFx0LmdldGF0dHJcXHQ9IGFmc19nZXRhdHRyLFxcbiBcXHQuc2V0YXR0clxcdD0gYWZzX3NldGF0dHIsXFxuK1xcdC5pc19vd25lZF9ieV9tZVxcdD0gYWZzX2lzX293bmVkX2J5X21lLFxcbitcXHQuaGF2ZV9zYW1lX293bmVyID0gYWZzX2hhdmVfc2FtZV9vd25lcixcXG4gfTtcXG4gXFxuIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgYWZzX2Rpcl9hb3BzID0ge1xcbmRpZmYgLS1naXQgYS9mcy9hZnMvZGlyX2VkaXQuYyBiL2ZzL2Fmcy9kaXJfZWRpdC5jXFxuaW5kZXggZmQzYWE5Zjk3Y2U2NGMuLmMzMTMwMzA1OTQ0NGFkIDEwMDY0NFxcbi0tLSBhL2ZzL2Fmcy9kaXJfZWRpdC5jXFxuKysrIGIvZnMvYWZzL2Rpcl9lZGl0LmNcXG5AQCAtNDE1LDcgKzQxNSw3IEBAIHZvaWQgYWZzX2VkaXRfZGlyX3JlbW92ZShzdHJ1Y3QgYWZzX3Zub2RlICp2bm9kZSxcXG4gXFx0aWYgKCFhZnNfZGlyX2luaXRfaXRlcihcXHUwMDI2aXRlciwgbmFtZSkpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuLVxcdG1ldGEgPSBhZnNfZGlyX2ZpbmRfYmxvY2soXFx1MDAyNml0ZXIsIDApO1xcbitcXHRtZXRhID0gYWZzX2Rpcl9nZXRfYmxvY2soXFx1MDAyNml0ZXIsIDApO1xcbiBcXHRpZiAoIW1ldGEpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuQEAgLTQ0Miw3ICs0NDIsNyBAQCB2b2lkIGFmc19lZGl0X2Rpcl9yZW1vdmUoc3RydWN0IGFmc192bm9kZSAqdm5vZGUsXFxuIFxcdC8qIENoZWNrIGFuZCBjbGVhciB0aGUgZW50cnkuICovXFxuIFxcdGRlID0gXFx1MDAyNmJsb2NrLVxcdTAwM2VkaXJlbnRzW3Nsb3RdO1xcbiBcXHRpZiAoZGUtXFx1MDAzZXUudmFsaWQgIT0gMSlcXG4tXFx0XFx0Z290byBlcnJvcl91bm1hcDtcXG4rXFx0XFx0Z290byBlcnJvcjtcXG4gXFxuIFxcdHRyYWNlX2Fmc19lZGl0X2Rpcih2bm9kZSwgd2h5LCBhZnNfZWRpdF9kaXJfZGVsZXRlLCBiLCBzbG90LFxcbiBcXHRcXHRcXHQgICBudG9obChkZS1cXHUwMDNldS52bm9kZSksIG50b2hsKGRlLVxcdTAwM2V1LnVuaXF1ZSksXFxuQEAgLTQ1OCw3ICs0NTgsNiBAQCB2b2lkIGFmc19lZGl0X2Rpcl9yZW1vdmUoc3RydWN0IGFmc192bm9kZSAqdm5vZGUsXFxuIFxcdC8qIENsZWFyIHRoZSBjb25zdGl0dWVudCBlbnRyaWVzLiAqL1xcbiBcXHRuZXh0ID0gZGUtXFx1MDAzZXUuaGFzaF9uZXh0O1xcbiBcXHRtZW1zZXQoZGUsIDAsIHNpemVvZigqZGUpICogaXRlci5ucl9zbG90cyk7XFxuLVxcdGt1bm1hcF9sb2NhbChibG9jayk7XFxuIFxcbiBcXHQvKiBBZGp1c3QgdGhlIGhhc2ggY2hhaW46IGlmIGl0ZXItXFx1MDAzZXByZXZfZW50cnkgaXMgMCwgdGhlIGhhc2h0YWJsZSBoZWFkXFxuIFxcdCAqIGluZGV4IGlzIHByZXZpb3VzOyBvdGhlcndpc2UgaXQncyBzbG90IG51bWJlciBvZiB0aGUgcHJldmlvdXMgZW50cnkuXFxuQEAgLTQ4NSw3ICs0ODQsNiBAQCB2b2lkIGFmc19lZGl0X2Rpcl9yZW1vdmUoc3RydWN0IGFmc192bm9kZSAqdm5vZGUsXFxuIFxcdFxcdHBkZSA9IFxcdTAwMjZwYmxvY2stXFx1MDAzZWRpcmVudHNbcHNdO1xcbiBcXHRcXHRwcmV2X25leHQgPSBwZGUtXFx1MDAzZXUuaGFzaF9uZXh0O1xcbiBcXHRcXHRpZiAocHJldl9uZXh0ICE9IGh0b25zKGVudHJ5KSkge1xcbi1cXHRcXHRcXHRrdW5tYXBfbG9jYWwocGJsb2NrKTtcXG4gXFx0XFx0XFx0cHJfd2FybihcXFwiJWxseDolbGx4OiV4OiBub3QgcHJldiBpbiBjaGFpbiBiPSV4IHA9JXgsJXggZT0leCAlKnNcXFwiLFxcbiBcXHRcXHRcXHRcXHR2bm9kZS1cXHUwMDNlZmlkLnZpZCwgdm5vZGUtXFx1MDAzZWZpZC52bm9kZSwgdm5vZGUtXFx1MDAzZWZpZC51bmlxdWUsXFxuIFxcdFxcdFxcdFxcdGl0ZXIuYnVja2V0LCBpdGVyLnByZXZfZW50cnksIHByZXZfbmV4dCwgZW50cnksXFxuQEAgLTQ5Myw3ICs0OTEsNiBAQCB2b2lkIGFmc19lZGl0X2Rpcl9yZW1vdmUoc3RydWN0IGFmc192bm9kZSAqdm5vZGUsXFxuIFxcdFxcdFxcdGdvdG8gZXJyb3I7XFxuIFxcdFxcdH1cXG4gXFx0XFx0cGRlLVxcdTAwM2V1Lmhhc2hfbmV4dCA9IG5leHQ7XFxuLVxcdFxcdGt1bm1hcF9sb2NhbChwYmxvY2spO1xcbiBcXHR9XFxuIFxcbiBcXHRuZXRmc19zaW5nbGVfbWFya19pbm9kZV9kaXJ0eShcXHUwMDI2dm5vZGUtXFx1MDAzZW5ldGZzLmlub2RlKTtcXG5AQCAtNTAzLDE4ICs1MDAsMTYgQEAgdm9pZCBhZnNfZWRpdF9kaXJfcmVtb3ZlKHN0cnVjdCBhZnNfdm5vZGUgKnZub2RlLFxcbiBcXHRfZGVidWcoXFxcIlJlbW92ZSAlcyBmcm9tICV1WyV1XVxcXCIsIG5hbWUtXFx1MDAzZW5hbWUsIGIsIHNsb3QpO1xcbiBcXG4gb3V0X3VubWFwOlxcbitcXHRhZnNfZGlyX2VuZF9pdGVyKFxcdTAwMjZpdGVyKTtcXG4gXFx0a3VubWFwX2xvY2FsKG1ldGEpO1xcbiBcXHRfbGVhdmUoXFxcIlxcXCIpO1xcbiBcXHRyZXR1cm47XFxuIFxcbiBhbHJlYWR5X2ludmFsaWRhdGVkOlxcbi1cXHRrdW5tYXBfbG9jYWwoYmxvY2spO1xcbiBcXHR0cmFjZV9hZnNfZWRpdF9kaXIodm5vZGUsIHdoeSwgYWZzX2VkaXRfZGlyX2RlbGV0ZV9pbnZhbCxcXG4gXFx0XFx0XFx0ICAgMCwgMCwgMCwgMCwgbmFtZS1cXHUwMDNlbmFtZSk7XFxuIFxcdGdvdG8gb3V0X3VubWFwO1xcbiBcXG4tZXJyb3JfdW5tYXA6XFxuLVxcdGt1bm1hcF9sb2NhbChibG9jayk7XFxuIGVycm9yOlxcbiBcXHR0cmFjZV9hZnNfZWRpdF9kaXIodm5vZGUsIHdoeSwgYWZzX2VkaXRfZGlyX2RlbGV0ZV9lcnJvcixcXG4gXFx0XFx0XFx0ICAgMCwgMCwgMCwgMCwgbmFtZS1cXHUwMDNlbmFtZSk7XFxuZGlmZiAtLWdpdCBhL2ZzL2Fmcy9kaXJfc2VhcmNoLmMgYi9mcy9hZnMvZGlyX3NlYXJjaC5jXFxuaW5kZXggMTA0NDExYzA2OTJmNTcuLjExZWJkZmZmY2IxZDM4IDEwMDY0NFxcbi0tLSBhL2ZzL2Fmcy9kaXJfc2VhcmNoLmNcXG4rKysgYi9mcy9hZnMvZGlyX3NlYXJjaC5jXFxuQEAgLTc1LDEwICs3NSw3IEBAIHVuaW9uIGFmc194ZHJfZGlyX2Jsb2NrICphZnNfZGlyX2ZpbmRfYmxvY2soc3RydWN0IGFmc19kaXJfaXRlciAqaXRlciwgc2l6ZV90IGJsXFxuIFxcbiBcXHRfZW50ZXIoXFxcIiV6eCwlZFxcXCIsIGJsb2NrLCBzbG90KTtcXG4gXFxuLVxcdGlmIChpdGVyLVxcdTAwM2VibG9jaykge1xcbi1cXHRcXHRrdW5tYXBfbG9jYWwoaXRlci1cXHUwMDNlYmxvY2spO1xcbi1cXHRcXHRpdGVyLVxcdTAwM2VibG9jayA9IE5VTEw7XFxuLVxcdH1cXG4rXFx0YWZzX2Rpcl9lbmRfaXRlcihpdGVyKTtcXG4gXFxuIFxcdGlmIChkdm5vZGUtXFx1MDAzZWRpcmVjdG9yeV9zaXplIFxcdTAwM2MgYmxlbmQpXFxuIFxcdFxcdGdvdG8gZmFpbDtcXG5AQCAtMTczLDEyICsxNzAsOCBAQCBpbnQgYWZzX2Rpcl9zZWFyY2hfYnVja2V0KHN0cnVjdCBhZnNfZGlyX2l0ZXIgKml0ZXIsIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lLFxcbiBcXG4gXFx0cmV0ID0gLUVOT0VOVDtcXG4gZm91bmQ6XFxuLVxcdGlmIChpdGVyLVxcdTAwM2VibG9jaykge1xcbi1cXHRcXHRrdW5tYXBfbG9jYWwoaXRlci1cXHUwMDNlYmxvY2spO1xcbi1cXHRcXHRpdGVyLVxcdTAwM2VibG9jayA9IE5VTEw7XFxuLVxcdH1cXG4tXFxuIGJhZDpcXG4rXFx0YWZzX2Rpcl9lbmRfaXRlcihpdGVyKTtcXG4gXFx0aWYgKHJldCA9PSAtRVNUQUxFKVxcbiBcXHRcXHRhZnNfaW52YWxpZGF0ZV9kaXIoaXRlci1cXHUwMDNlZHZub2RlLCBhZnNfZGlyX2ludmFsaWRfaXRlcl9zdGFsZSk7XFxuIFxcdF9sZWF2ZShcXFwiID0gJWRcXFwiLCByZXQpO1xcbmRpZmYgLS1naXQgYS9mcy9hZnMvZmlsZS5jIGIvZnMvYWZzL2ZpbGUuY1xcbmluZGV4IDA0Njc3NDJiZmVlZTM0Li5iYTQ0NDkzY2NhZjZlZSAxMDA2NDRcXG4tLS0gYS9mcy9hZnMvZmlsZS5jXFxuKysrIGIvZnMvYWZzL2ZpbGUuY1xcbkBAIC00OSw2ICs0OSw4IEBAIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGFmc19maWxlX2lub2RlX29wZXJhdGlvbnMgPSB7XFxuIFxcdC5nZXRhdHRyXFx0PSBhZnNfZ2V0YXR0cixcXG4gXFx0LnNldGF0dHJcXHQ9IGFmc19zZXRhdHRyLFxcbiBcXHQucGVybWlzc2lvblxcdD0gYWZzX3Blcm1pc3Npb24sXFxuK1xcdC5pc19vd25lZF9ieV9tZVxcdD0gYWZzX2lzX293bmVkX2J5X21lLFxcbitcXHQuaGF2ZV9zYW1lX293bmVyID0gYWZzX2hhdmVfc2FtZV9vd25lcixcXG4gfTtcXG4gXFxuIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgYWZzX2ZpbGVfYW9wcyA9IHtcXG5kaWZmIC0tZ2l0IGEvZnMvYWZzL2ZzY2xpZW50LmMgYi9mcy9hZnMvZnNjbGllbnQuY1xcbmluZGV4IGEyZmZkNjA4ODlmODlkLi4xYTNmMTg2YTZhMTEzZCAxMDA2NDRcXG4tLS0gYS9mcy9hZnMvZnNjbGllbnQuY1xcbisrKyBiL2ZzL2Fmcy9mc2NsaWVudC5jXFxuQEAgLTQ3Nyw2ICs0NzcsOSBAQCB2b2lkIGFmc19mc19mZXRjaF9kYXRhKHN0cnVjdCBhZnNfb3BlcmF0aW9uICpvcClcXG4gXFx0aWYgKCFjYWxsKVxcbiBcXHRcXHRyZXR1cm4gYWZzX29wX25vbWVtKG9wKTtcXG4gXFxuK1xcdGlmIChvcC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBBRlNfT1BFUkFUSU9OX0FTWU5DKVxcbitcXHRcXHRjYWxsLVxcdTAwM2Vhc3luYyA9IHRydWU7XFxuK1xcbiBcXHQvKiBtYXJzaGFsbCB0aGUgcGFyYW1ldGVycyAqL1xcbiBcXHRicCA9IGNhbGwtXFx1MDAzZXJlcXVlc3Q7XFxuIFxcdGJwWzBdID0gaHRvbmwoRlNGRVRDSERBVEEpO1xcbkBAIC00ODQsNyArNDg3LDcgQEAgdm9pZCBhZnNfZnNfZmV0Y2hfZGF0YShzdHJ1Y3QgYWZzX29wZXJhdGlvbiAqb3ApXFxuIFxcdGJwWzJdID0gaHRvbmwodnAtXFx1MDAzZWZpZC52bm9kZSk7XFxuIFxcdGJwWzNdID0gaHRvbmwodnAtXFx1MDAzZWZpZC51bmlxdWUpO1xcbiBcXHRicFs0XSA9IGh0b25sKGxvd2VyXzMyX2JpdHMoc3VicmVxLVxcdTAwM2VzdGFydCArIHN1YnJlcS1cXHUwMDNldHJhbnNmZXJyZWQpKTtcXG4tXFx0YnBbNV0gPSBodG9ubChsb3dlcl8zMl9iaXRzKHN1YnJlcS1cXHUwMDNlbGVuICAgKyBzdWJyZXEtXFx1MDAzZXRyYW5zZmVycmVkKSk7XFxuK1xcdGJwWzVdID0gaHRvbmwobG93ZXJfMzJfYml0cyhzdWJyZXEtXFx1MDAzZWxlbiAgIC0gc3VicmVxLVxcdTAwM2V0cmFuc2ZlcnJlZCkpO1xcbiBcXG4gXFx0Y2FsbC1cXHUwMDNlZmlkID0gdnAtXFx1MDAzZWZpZDtcXG4gXFx0dHJhY2VfYWZzX21ha2VfZnNfY2FsbChjYWxsLCBcXHUwMDI2dnAtXFx1MDAzZWZpZCk7XFxuZGlmZiAtLWdpdCBhL2ZzL2Fmcy9pbm9kZS5jIGIvZnMvYWZzL2lub2RlLmNcXG5pbmRleCAxNGYzOWE5YmVhNmNmZS4uYWY4NWE4OGQ5NDNkZDEgMTAwNjQ0XFxuLS0tIGEvZnMvYWZzL2lub2RlLmNcXG4rKysgYi9mcy9hZnMvaW5vZGUuY1xcbkBAIC05MSw2ICs5MSw3IEBAIHN0YXRpYyBpbnQgYWZzX2lub2RlX2luaXRfZnJvbV9zdGF0dXMoc3RydWN0IGFmc19vcGVyYXRpb24gKm9wLFxcbiBcXHRpbm9kZS1cXHUwMDNlaV9mbGFncyB8PSBTX05PQVRJTUU7XFxuIFxcdGlub2RlLVxcdTAwM2VpX3VpZCA9IG1ha2Vfa3VpZChcXHUwMDI2aW5pdF91c2VyX25zLCBzdGF0dXMtXFx1MDAzZW93bmVyKTtcXG4gXFx0aW5vZGUtXFx1MDAzZWlfZ2lkID0gbWFrZV9rZ2lkKFxcdTAwMjZpbml0X3VzZXJfbnMsIHN0YXR1cy1cXHUwMDNlZ3JvdXApO1xcbitcXHRpbm9kZS1cXHUwMDNlaV9vcGZsYWdzIHw9IElPUF9PV05FUlNISVBfT1ZFUlJJREU7XFxuIFxcdHNldF9ubGluayhcXHUwMDI2dm5vZGUtXFx1MDAzZW5ldGZzLmlub2RlLCBzdGF0dXMtXFx1MDAzZW5saW5rKTtcXG4gXFxuIFxcdGlfc2l6ZV93cml0ZShpbm9kZSwgc3RhdHVzLVxcdTAwM2VzaXplKTtcXG5kaWZmIC0tZ2l0IGEvZnMvYWZzL2ludGVybmFsLmggYi9mcy9hZnMvaW50ZXJuYWwuaFxcbmluZGV4IDYwMWYwMWU1YzE1ZmNjLi40MGU1Y2U2MTk0NzYyMSAxMDA2NDRcXG4tLS0gYS9mcy9hZnMvaW50ZXJuYWwuaFxcbisrKyBiL2ZzL2Fmcy9pbnRlcm5hbC5oXFxuQEAgLTExMzMsNiArMTEzMywxNCBAQCBpbnQgYWZzX2Rpcl9zZWFyY2hfYnVja2V0KHN0cnVjdCBhZnNfZGlyX2l0ZXIgKml0ZXIsIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lLFxcbiBpbnQgYWZzX2Rpcl9zZWFyY2goc3RydWN0IGFmc192bm9kZSAqZHZub2RlLCBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSxcXG4gXFx0XFx0ICAgc3RydWN0IGFmc19maWQgKl9maWQsIGFmc19kYXRhdmVyc2lvbl90ICpfZGlyX3ZlcnNpb24pO1xcbiBcXG4rc3RhdGljIGlubGluZSB2b2lkIGFmc19kaXJfZW5kX2l0ZXIoc3RydWN0IGFmc19kaXJfaXRlciAqaXRlcilcXG4re1xcbitcXHRpZiAoaXRlci1cXHUwMDNlYmxvY2spIHtcXG4rXFx0XFx0a3VubWFwX2xvY2FsKGl0ZXItXFx1MDAzZWJsb2NrKTtcXG4rXFx0XFx0aXRlci1cXHUwMDNlYmxvY2sgPSBOVUxMO1xcbitcXHR9XFxuK31cXG4rXFxuIC8qXFxuICAqIGRpcl9zaWxseS5jXFxuICAqL1xcbkBAIC0xNDIxLDcgKzE0MjksNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgYWZzX21ha2Vfb3BfY2FsbChzdHJ1Y3QgYWZzX29wZXJhdGlvbiAqb3AsIHN0cnVjdCBhZnNfY2FsbCAqY1xcbiB7XFxuIFxcdHN0cnVjdCBhZnNfYWRkcl9saXN0ICphbGlzdCA9IG9wLVxcdTAwM2Vlc3RhdGUtXFx1MDAzZWFkZHJlc3NlcztcXG4gXFxuLVxcdG9wLVxcdTAwM2VjYWxsXFx0PSBjYWxsO1xcbitcXHRvcC1cXHUwMDNlY2FsbFxcdD0gYWZzX2dldF9jYWxsKGNhbGwsIGFmc19jYWxsX3RyYWNlX2dldCk7XFxuIFxcdG9wLVxcdTAwM2V0eXBlXFx0PSBjYWxsLVxcdTAwM2V0eXBlO1xcbiBcXHRjYWxsLVxcdTAwM2VvcFxcdD0gb3A7XFxuIFxcdGNhbGwtXFx1MDAzZWtleVxcdD0gb3AtXFx1MDAzZWtleTtcXG5AQCAtMTQyOSw2ICsxNDM3LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGFmc19tYWtlX29wX2NhbGwoc3RydWN0IGFmc19vcGVyYXRpb24gKm9wLCBzdHJ1Y3QgYWZzX2NhbGwgKmNcXG4gXFx0Y2FsbC1cXHUwMDNlcGVlclxcdD0gcnhycGNfa2VybmVsX2dldF9wZWVyKGFsaXN0LVxcdTAwM2VhZGRyc1tvcC1cXHUwMDNlYWRkcl9pbmRleF0ucGVlcik7XFxuIFxcdGNhbGwtXFx1MDAzZXNlcnZpY2VfaWQgPSBvcC1cXHUwMDNlc2VydmVyLVxcdTAwM2VzZXJ2aWNlX2lkO1xcbiBcXHRhZnNfbWFrZV9jYWxsKGNhbGwsIGdmcCk7XFxuK1xcdGFmc19wdXRfY2FsbChjYWxsKTtcXG4gfVxcbiBcXG4gc3RhdGljIGlubGluZSB2b2lkIGFmc19leHRyYWN0X2JlZ2luKHN0cnVjdCBhZnNfY2FsbCAqY2FsbCwgdm9pZCAqYnVmLCBzaXplX3Qgc2l6ZSlcXG5AQCAtMTUzMCw2ICsxNTM5LDkgQEAgZXh0ZXJuIHN0cnVjdCBrZXkgKmFmc19yZXF1ZXN0X2tleShzdHJ1Y3QgYWZzX2NlbGwgKik7XFxuIGV4dGVybiBzdHJ1Y3Qga2V5ICphZnNfcmVxdWVzdF9rZXlfcmN1KHN0cnVjdCBhZnNfY2VsbCAqKTtcXG4gZXh0ZXJuIGludCBhZnNfY2hlY2tfcGVybWl0KHN0cnVjdCBhZnNfdm5vZGUgKiwgc3RydWN0IGtleSAqLCBhZnNfYWNjZXNzX3QgKik7XFxuIGV4dGVybiBpbnQgYWZzX3Blcm1pc3Npb24oc3RydWN0IG1udF9pZG1hcCAqLCBzdHJ1Y3QgaW5vZGUgKiwgaW50KTtcXG4raW50IGFmc19pc19vd25lZF9ieV9tZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSk7XFxuK2ludCBhZnNfaGF2ZV9zYW1lX293bmVyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlMSxcXG4rXFx0XFx0XFx0c3RydWN0IGlub2RlICppbm9kZTIpO1xcbiBleHRlcm4gdm9pZCBfX2V4aXQgYWZzX2NsZWFuX3VwX3Blcm1pdF9jYWNoZSh2b2lkKTtcXG4gXFxuIC8qXFxuZGlmZiAtLWdpdCBhL2ZzL2Fmcy9zZWN1cml0eS5jIGIvZnMvYWZzL3NlY3VyaXR5LmNcXG5pbmRleCA2ZDAwZDYyYTY1ZWRmNi4uNzA5MmY1YWNkY2Q2YWMgMTAwNjQ0XFxuLS0tIGEvZnMvYWZzL3NlY3VyaXR5LmNcXG4rKysgYi9mcy9hZnMvc2VjdXJpdHkuY1xcbkBAIC01MTAsNiArNTEwLDUyIEBAIGludCBhZnNfcGVybWlzc2lvbihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSxcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4rLypcXG4rICogRGV0ZXJtaW5lIGlmIGFuIGlub2RlIGlzIG93bmVkIGJ5ICdtZScgLSB3aGF0ZXZlciB0aGF0IG1lYW5zIGZvciB0aGVcXG4rICogZmlsZXN5c3RlbS4gIEluIHRoZSBjYXNlIG9mIEFGUywgdGhpcyBtZWFucyB0aGF0IHRoZSBmaWxlIGlzIG93bmVkIGJ5IHRoZVxcbisgKiBBRlMgdXNlciByZXByZXNlbnRlZCBieSB0aGUgUnggU2VjdXJpdHkgQ2xhc3MgdG9rZW4gaGVsZCBpbiBhIGtleS4gIFJldHVybnNcXG4rICogMCBpZiBvd25lZCBieSBtZSwgMSBpZiBub3Q7IGNhbiBhbHNvIHJldHVybiBhbiBlcnJvci5cXG4rICovXFxuK2ludCBhZnNfaXNfb3duZWRfYnlfbWUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuK3tcXG4rXFx0c3RydWN0IGFmc192bm9kZSAqdm5vZGUgPSBBRlNfRlNfSShpbm9kZSk7XFxuK1xcdGFmc19hY2Nlc3NfdCBhY2Nlc3M7XFxuK1xcdHN0cnVjdCBrZXkgKmtleTtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGlmIChTX0lTRElSKGlub2RlLVxcdTAwM2VpX21vZGUpKVxcbitcXHRcXHRyZXR1cm4gMTsgLyogVGhlIEFETUlOIHJpZ2h0IGNoZWNrIGRvZXNuJ3Qgd29yayBmb3IgZGlyZWN0b3JpZXMuICovXFxuK1xcbitcXHRrZXkgPSBhZnNfcmVxdWVzdF9rZXkodm5vZGUtXFx1MDAzZXZvbHVtZS1cXHUwMDNlY2VsbCk7XFxuK1xcdGlmIChJU19FUlIoa2V5KSlcXG4rXFx0XFx0cmV0dXJuIFBUUl9FUlIoa2V5KTtcXG4rXFxuK1xcdC8qIEdldCB0aGUgYWNjZXNzIHJpZ2h0cyBmb3IgdGhlIGtleSBvbiB0aGlzIGZpbGUuICovXFxuK1xcdHJldCA9IGFmc19jaGVja19wZXJtaXQodm5vZGUsIGtleSwgXFx1MDAyNmFjY2Vzcyk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycm9yO1xcbitcXG4rXFx0LyogV2UgZ2V0IHRoZSBBRE1JTklTVEVSIGJpdCBpZiB3ZSBvd24gdGhlIGZpbGUuICovXFxuK1xcdHJldCA9IChhY2Nlc3MgXFx1MDAyNiBBRlNfQUNFX0FETUlOSVNURVIpID8gMCA6IDE7XFxuK2Vycm9yOlxcbitcXHRrZXlfcHV0KGtleSk7XFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuKy8qXFxuKyAqIERldGVybWluZSBpZiBhIGZpbGUgaGFzIHRoZSBzYW1lIG93bmVyIGFzIGl0cyBwYXJlbnQgLSB3aGF0ZXZlciB0aGF0IG1lYW5zXFxuKyAqIGZvciB0aGUgZmlsZXN5c3RlbS4gIEluIHRoZSBjYXNlIG9mIEFGUywgdGhpcyBtZWFucyBjb21wYXJpbmcgdGhlaXIgQUZTXFxuKyAqIFVJRHMuICBSZXR1cm5zIDAgaWYgc2FtZSwgMSBpZiBub3Qgc2FtZTsgY2FuIGFsc28gcmV0dXJuIGFuIGVycm9yLlxcbisgKi9cXG4raW50IGFmc19oYXZlX3NhbWVfb3duZXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUxLFxcbitcXHRcXHRcXHRzdHJ1Y3QgaW5vZGUgKmlub2RlMilcXG4re1xcbitcXHRjb25zdCBzdHJ1Y3QgYWZzX3Zub2RlICp2bm9kZTEgPSBBRlNfRlNfSShpbm9kZTEpO1xcbitcXHRjb25zdCBzdHJ1Y3QgYWZzX3Zub2RlICp2bm9kZTIgPSBBRlNfRlNfSShpbm9kZTIpO1xcbitcXG4rXFx0cmV0dXJuIHZub2RlMS1cXHUwMDNlc3RhdHVzLm93bmVyICE9IHZub2RlMi1cXHUwMDNlc3RhdHVzLm93bmVyO1xcbit9XFxuK1xcbiB2b2lkIF9fZXhpdCBhZnNfY2xlYW5fdXBfcGVybWl0X2NhY2hlKHZvaWQpXFxuIHtcXG4gXFx0aW50IGk7XFxuZGlmZiAtLWdpdCBhL2ZzL2F0dHIuYyBiL2ZzL2F0dHIuY1xcbmluZGV4IDRmNDM3ZmFiYjdmMGY1Li5iN2U4YjVkNDlhOWZlNiAxMDA2NDRcXG4tLS0gYS9mcy9hdHRyLmNcXG4rKysgYi9mcy9hdHRyLmNcXG5AQCAtMTYsNiArMTYsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZmNudGwuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ZpbGVsb2NrLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zZWN1cml0eS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXFwiaW50ZXJuYWwuaFxcXCJcXG4gXFxuIC8qKlxcbiAgKiBzZXRhdHRyX3Nob3VsZF9kcm9wX3NnaWQgLSBkZXRlcm1pbmUgd2hldGhlciB0aGUgc2V0Z2lkIGJpdCBuZWVkcyB0byBiZVxcbkBAIC05MSwxOSArOTIsMjEgQEAgRVhQT1JUX1NZTUJPTChzZXRhdHRyX3Nob3VsZF9kcm9wX3N1aWRnaWQpO1xcbiAgKiBwZXJtaXNzaW9ucy4gT24gbm9uLWlkbWFwcGVkIG1vdW50cyBvciBpZiBwZXJtaXNzaW9uIGNoZWNraW5nIGlzIHRvIGJlXFxuICAqIHBlcmZvcm1lZCBvbiB0aGUgcmF3IGlub2RlIHNpbXBseSBwYXNzIEBub3BfbW50X2lkbWFwLlxcbiAgKi9cXG4tc3RhdGljIGJvb2wgY2hvd25fb2soc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuLVxcdFxcdCAgICAgY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSwgdmZzdWlkX3QgaWFfdmZzdWlkKVxcbitzdGF0aWMgaW50IGNob3duX29rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbitcXHRcXHQgICAgc3RydWN0IGlub2RlICppbm9kZSwgdmZzdWlkX3QgaWFfdmZzdWlkKVxcbiB7XFxuIFxcdHZmc3VpZF90IHZmc3VpZCA9IGlfdWlkX2ludG9fdmZzdWlkKGlkbWFwLCBpbm9kZSk7XFxuLVxcdGlmICh2ZnN1aWRfZXFfa3VpZCh2ZnN1aWQsIGN1cnJlbnRfZnN1aWQoKSkgXFx1MDAyNlxcdTAwMjZcXG4tXFx0ICAgIHZmc3VpZF9lcShpYV92ZnN1aWQsIHZmc3VpZCkpXFxuLVxcdFxcdHJldHVybiB0cnVlO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cmV0ID0gdmZzX2lub2RlX2lzX293bmVkX2J5X21lKGlkbWFwLCBpbm9kZSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYz0gMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4gXFx0aWYgKGNhcGFibGVfd3J0X2lub2RlX3VpZGdpZChpZG1hcCwgaW5vZGUsIENBUF9DSE9XTikpXFxuLVxcdFxcdHJldHVybiB0cnVlO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4gXFx0aWYgKCF2ZnN1aWRfdmFsaWQodmZzdWlkKSBcXHUwMDI2XFx1MDAyNlxcbiBcXHQgICAgbnNfY2FwYWJsZShpbm9kZS1cXHUwMDNlaV9zYi1cXHUwMDNlc191c2VyX25zLCBDQVBfQ0hPV04pKVxcbi1cXHRcXHRyZXR1cm4gdHJ1ZTtcXG4tXFx0cmV0dXJuIGZhbHNlO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0cmV0dXJuIC1FUEVSTTtcXG4gfVxcbiBcXG4gLyoqXFxuQEAgLTExOCwyMyArMTIxLDI3IEBAIHN0YXRpYyBib29sIGNob3duX29rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbiAgKiBwZXJtaXNzaW9ucy4gT24gbm9uLWlkbWFwcGVkIG1vdW50cyBvciBpZiBwZXJtaXNzaW9uIGNoZWNraW5nIGlzIHRvIGJlXFxuICAqIHBlcmZvcm1lZCBvbiB0aGUgcmF3IGlub2RlIHNpbXBseSBwYXNzIEBub3BfbW50X2lkbWFwLlxcbiAgKi9cXG4tc3RhdGljIGJvb2wgY2hncnBfb2soc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuLVxcdFxcdCAgICAgY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSwgdmZzZ2lkX3QgaWFfdmZzZ2lkKVxcbitzdGF0aWMgaW50IGNoZ3JwX29rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbitcXHRcXHQgICAgc3RydWN0IGlub2RlICppbm9kZSwgdmZzZ2lkX3QgaWFfdmZzZ2lkKVxcbiB7XFxuIFxcdHZmc2dpZF90IHZmc2dpZCA9IGlfZ2lkX2ludG9fdmZzZ2lkKGlkbWFwLCBpbm9kZSk7XFxuLVxcdHZmc3VpZF90IHZmc3VpZCA9IGlfdWlkX2ludG9fdmZzdWlkKGlkbWFwLCBpbm9kZSk7XFxuLVxcdGlmICh2ZnN1aWRfZXFfa3VpZCh2ZnN1aWQsIGN1cnJlbnRfZnN1aWQoKSkpIHtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHJldCA9IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShpZG1hcCwgaW5vZGUpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0aWYgKHJldCA9PSAwKSB7XFxuIFxcdFxcdGlmICh2ZnNnaWRfZXEoaWFfdmZzZ2lkLCB2ZnNnaWQpKVxcbi1cXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFx0XFx0XFx0cmV0dXJuIDA7XFxuIFxcdFxcdGlmICh2ZnNnaWRfaW5fZ3JvdXBfcChpYV92ZnNnaWQpKVxcbi1cXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFx0XFx0XFx0cmV0dXJuIDA7XFxuIFxcdH1cXG4gXFx0aWYgKGNhcGFibGVfd3J0X2lub2RlX3VpZGdpZChpZG1hcCwgaW5vZGUsIENBUF9DSE9XTikpXFxuLVxcdFxcdHJldHVybiB0cnVlO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4gXFx0aWYgKCF2ZnNnaWRfdmFsaWQodmZzZ2lkKSBcXHUwMDI2XFx1MDAyNlxcbiBcXHQgICAgbnNfY2FwYWJsZShpbm9kZS1cXHUwMDNlaV9zYi1cXHUwMDNlc191c2VyX25zLCBDQVBfQ0hPV04pKVxcbi1cXHRcXHRyZXR1cm4gdHJ1ZTtcXG4tXFx0cmV0dXJuIGZhbHNlO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0cmV0dXJuIC1FUEVSTTtcXG4gfVxcbiBcXG4gLyoqXFxuQEAgLTE2Myw2ICsxNzAsNyBAQCBpbnQgc2V0YXR0cl9wcmVwYXJlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuIHtcXG4gXFx0c3RydWN0IGlub2RlICppbm9kZSA9IGRfaW5vZGUoZGVudHJ5KTtcXG4gXFx0dW5zaWduZWQgaW50IGlhX3ZhbGlkID0gYXR0ci1cXHUwMDNlaWFfdmFsaWQ7XFxuK1xcdGludCByZXQ7XFxuIFxcbiBcXHQvKlxcbiBcXHQgKiBGaXJzdCBjaGVjayBzaXplIGNvbnN0cmFpbnRzLiAgVGhlc2UgY2FuJ3QgYmUgb3ZlcnJpZGRlbiB1c2luZ1xcbkBAIC0xODksMTQgKzE5NywxOCBAQCBpbnQgc2V0YXR0cl9wcmVwYXJlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuIFxcdFxcdGdvdG8ga2lsbF9wcml2O1xcbiBcXG4gXFx0LyogTWFrZSBzdXJlIGEgY2FsbGVyIGNhbiBjaG93bi4gKi9cXG4tXFx0aWYgKChpYV92YWxpZCBcXHUwMDI2IEFUVFJfVUlEKSBcXHUwMDI2XFx1MDAyNlxcbi1cXHQgICAgIWNob3duX29rKGlkbWFwLCBpbm9kZSwgYXR0ci1cXHUwMDNlaWFfdmZzdWlkKSlcXG4tXFx0XFx0cmV0dXJuIC1FUEVSTTtcXG4rXFx0aWYgKGlhX3ZhbGlkIFxcdTAwMjYgQVRUUl9VSUQpIHtcXG4rXFx0XFx0cmV0ID0gY2hvd25fb2soaWRtYXAsIGlub2RlLCBhdHRyLVxcdTAwM2VpYV92ZnN1aWQpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0fVxcbiBcXG4gXFx0LyogTWFrZSBzdXJlIGNhbGxlciBjYW4gY2hncnAuICovXFxuLVxcdGlmICgoaWFfdmFsaWQgXFx1MDAyNiBBVFRSX0dJRCkgXFx1MDAyNlxcdTAwMjZcXG4tXFx0ICAgICFjaGdycF9vayhpZG1hcCwgaW5vZGUsIGF0dHItXFx1MDAzZWlhX3Zmc2dpZCkpXFxuLVxcdFxcdHJldHVybiAtRVBFUk07XFxuK1xcdGlmIChpYV92YWxpZCBcXHUwMDI2IEFUVFJfR0lEKSB7XFxuK1xcdFxcdHJldCA9IGNoZ3JwX29rKGlkbWFwLCBpbm9kZSwgYXR0ci1cXHUwMDNlaWFfdmZzZ2lkKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdH1cXG4gXFxuIFxcdC8qIE1ha2Ugc3VyZSBhIGNhbGxlciBjYW4gY2htb2QuICovXFxuIFxcdGlmIChpYV92YWxpZCBcXHUwMDI2IEFUVFJfTU9ERSkge1xcbmRpZmYgLS1naXQgYS9mcy9jb3JlZHVtcC5jIGIvZnMvY29yZWR1bXAuY1xcbmluZGV4IGU2OGE3NmZmOTJhMzg2Li4zZjMyZTczYWFlZGEyOCAxMDA2NDRcXG4tLS0gYS9mcy9jb3JlZHVtcC5jXFxuKysrIGIvZnMvY29yZWR1bXAuY1xcbkBAIC05NTQsNyArOTU0LDcgQEAgc3RhdGljIGJvb2wgY29yZWR1bXBfZmlsZShzdHJ1Y3QgY29yZV9uYW1lICpjbiwgc3RydWN0IGNvcmVkdW1wX3BhcmFtcyAqY3BybSxcXG4gXFx0ICogZmlsZXN5c3RlbS5cXG4gXFx0ICovXFxuIFxcdGlkbWFwID0gZmlsZV9tbnRfaWRtYXAoZmlsZSk7XFxuLVxcdGlmICghdmZzdWlkX2VxX2t1aWQoaV91aWRfaW50b192ZnN1aWQoaWRtYXAsIGlub2RlKSwgY3VycmVudF9mc3VpZCgpKSkge1xcbitcXHRpZiAodmZzX2lub2RlX2lzX293bmVkX2J5X21lKGlkbWFwLCBpbm9kZSkgIT0gMCkge1xcbiBcXHRcXHRjb3JlZHVtcF9yZXBvcnRfZmFpbHVyZShcXFwiQ29yZSBkdW1wIHRvICVzIGFib3J0ZWQ6IGNhbm5vdCBwcmVzZXJ2ZSBmaWxlIG93bmVyXFxcIiwgY24tXFx1MDAzZWNvcmVuYW1lKTtcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXHR9XFxuZGlmZiAtLWdpdCBhL2ZzL2lub2RlLmMgYi9mcy9pbm9kZS5jXFxuaW5kZXggMzFjNWI5ZWUzYTgxZGYuLmE3ZWM4MzBhYjY4M2YwIDEwMDY0NFxcbi0tLSBhL2ZzL2lub2RlLmNcXG4rKysgYi9mcy9pbm9kZS5jXFxuQEAgLTI3NTAsMTYgKzI3NTAsMTkgQEAgRVhQT1JUX1NZTUJPTChpbm9kZV9pbml0X293bmVyKTtcXG4gICogT24gbm9uLWlkbWFwcGVkIG1vdW50cyBvciBpZiBwZXJtaXNzaW9uIGNoZWNraW5nIGlzIHRvIGJlIHBlcmZvcm1lZCBvbiB0aGVcXG4gICogcmF3IGlub2RlIHNpbXBseSBwYXNzIEBub3BfbW50X2lkbWFwLlxcbiAgKi9cXG4tYm9vbCBpbm9kZV9vd25lcl9vcl9jYXBhYmxlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbi1cXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSlcXG4rYm9vbCBpbm9kZV9vd25lcl9vcl9jYXBhYmxlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbiB7XFxuIFxcdHZmc3VpZF90IHZmc3VpZDtcXG4gXFx0c3RydWN0IHVzZXJfbmFtZXNwYWNlICpucztcXG4rXFx0aW50IHJldDtcXG4gXFxuLVxcdHZmc3VpZCA9IGlfdWlkX2ludG9fdmZzdWlkKGlkbWFwLCBpbm9kZSk7XFxuLVxcdGlmICh2ZnN1aWRfZXFfa3VpZCh2ZnN1aWQsIGN1cnJlbnRfZnN1aWQoKSkpXFxuK1xcdHJldCA9IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShpZG1hcCwgaW5vZGUpO1xcbitcXHRpZiAocmV0ID09IDApXFxuIFxcdFxcdHJldHVybiB0cnVlO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXG4rXFx0dmZzdWlkID0gaV91aWRfaW50b192ZnN1aWQoaWRtYXAsIGlub2RlKTtcXG4gXFx0bnMgPSBjdXJyZW50X3VzZXJfbnMoKTtcXG4gXFx0aWYgKHZmc3VpZF9oYXNfbWFwcGluZyhucywgdmZzdWlkKSBcXHUwMDI2XFx1MDAyNiBuc19jYXBhYmxlKG5zLCBDQVBfRk9XTkVSKSlcXG4gXFx0XFx0cmV0dXJuIHRydWU7XFxuZGlmZiAtLWdpdCBhL2ZzL2ludGVybmFsLmggYi9mcy9pbnRlcm5hbC5oXFxuaW5kZXggMzU1ZDkzZjkyMjA4NjEuLmJlNDVjYzYzODg2MTkyIDEwMDY0NFxcbi0tLSBhL2ZzL2ludGVybmFsLmhcXG4rKysgYi9mcy9pbnRlcm5hbC5oXFxuQEAgLTUxLDYgKzUxLDcgQEAgZXh0ZXJuIGludCBmaW5pc2hfY2xlYW5fY29udGV4dChzdHJ1Y3QgZnNfY29udGV4dCAqZmMpO1xcbiAvKlxcbiAgKiBuYW1laS5jXFxuICAqL1xcbitpbnQgdmZzX2lub2RlX2lzX293bmVkX2J5X21lKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcXG4gZXh0ZXJuIGludCBmaWxlbmFtZV9sb29rdXAoaW50IGRmZCwgc3RydWN0IGZpbGVuYW1lICpuYW1lLCB1bnNpZ25lZCBmbGFncyxcXG4gXFx0XFx0XFx0ICAgc3RydWN0IHBhdGggKnBhdGgsIGNvbnN0IHN0cnVjdCBwYXRoICpyb290KTtcXG4gaW50IGZpbGVuYW1lX3JtZGlyKGludCBkZmQsIHN0cnVjdCBmaWxlbmFtZSAqbmFtZSk7XFxuZGlmZiAtLWdpdCBhL2ZzL2xvY2tzLmMgYi9mcy9sb2Nrcy5jXFxuaW5kZXggNmU0ZmY3ZmNlYzA1M2UuLjAyZjgxMGRjOWU3ZTdhIDEwMDY0NFxcbi0tLSBhL2ZzL2xvY2tzLmNcXG4rKysgYi9mcy9sb2Nrcy5jXFxuQEAgLTY4LDYgKzY4LDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY3RyYWNlL2V2ZW50cy9maWxlbG9jay5oXFx1MDAzZVxcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3VhY2Nlc3MuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFxcImludGVybmFsLmhcXFwiXFxuIFxcbiBzdGF0aWMgc3RydWN0IGZpbGVfbG9jayAqZmlsZV9sb2NrKHN0cnVjdCBmaWxlX2xvY2tfY29yZSAqZmxjKVxcbiB7XFxuQEAgLTIxMzYsMTAgKzIxMzcsMTIgQEAgaW50XFxuIHZmc19zZXRsZWFzZShzdHJ1Y3QgZmlsZSAqZmlscCwgaW50IGFyZywgc3RydWN0IGZpbGVfbGVhc2UgKipsZWFzZSwgdm9pZCAqKnByaXYpXFxuIHtcXG4gXFx0c3RydWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5vZGUoZmlscCk7XFxuLVxcdHZmc3VpZF90IHZmc3VpZCA9IGlfdWlkX2ludG9fdmZzdWlkKGZpbGVfbW50X2lkbWFwKGZpbHApLCBpbm9kZSk7XFxuIFxcdGludCBlcnJvcjtcXG4gXFxuLVxcdGlmICgoIXZmc3VpZF9lcV9rdWlkKHZmc3VpZCwgY3VycmVudF9mc3VpZCgpKSkgXFx1MDAyNlxcdTAwMjYgIWNhcGFibGUoQ0FQX0xFQVNFKSlcXG4rXFx0ZXJyb3IgPSB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWUoZmlsZV9tbnRfaWRtYXAoZmlscCksIGlub2RlKTtcXG4rXFx0aWYgKGVycm9yIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIGVycm9yO1xcbitcXHRpZiAoZXJyb3IgIT0gMCBcXHUwMDI2XFx1MDAyNiAhY2FwYWJsZShDQVBfTEVBU0UpKVxcbiBcXHRcXHRyZXR1cm4gLUVBQ0NFUztcXG4gXFx0ZXJyb3IgPSBzZWN1cml0eV9maWxlX2xvY2soZmlscCwgYXJnKTtcXG4gXFx0aWYgKGVycm9yKVxcbmRpZmYgLS1naXQgYS9mcy9uYW1laS5jIGIvZnMvbmFtZWkuY1xcbmluZGV4IDE5Y2U0M2M5YTZlNjYyLi43MmY5NGQyMDRmOTNmNCAxMDA2NDRcXG4tLS0gYS9mcy9uYW1laS5jXFxuKysrIGIvZnMvbmFtZWkuY1xcbkBAIC01NSw4ICs1NSw4IEBAXFxuICAqIFRoZSBuZXcgY29kZSByZXBsYWNlcyB0aGUgb2xkIHJlY3Vyc2l2ZSBzeW1saW5rIHJlc29sdXRpb24gd2l0aFxcbiAgKiBhbiBpdGVyYXRpdmUgb25lIChpbiBjYXNlIG9mIG5vbi1uZXN0ZWQgc3ltbGluayBjaGFpbnMpLiAgSXQgZG9lc1xcbiAgKiB0aGlzIHdpdGggY2FsbHMgdG8gXFx1MDAzY2ZzXFx1MDAzZV9mb2xsb3dfbGluaygpLlxcbi0gKiBBcyBhIHNpZGUgZWZmZWN0LCBkaXJfbmFtZWkoKSwgX25hbWVpKCkgYW5kIGZvbGxvd19saW5rKCkgYXJlIG5vdyBcXG4tICogcmVwbGFjZWQgd2l0aCBhIHNpbmdsZSBmdW5jdGlvbiBsb29rdXBfZGVudHJ5KCkgdGhhdCBjYW4gaGFuZGxlIGFsbCBcXG4rICogQXMgYSBzaWRlIGVmZmVjdCwgZGlyX25hbWVpKCksIF9uYW1laSgpIGFuZCBmb2xsb3dfbGluaygpIGFyZSBub3dcXG4rICogcmVwbGFjZWQgd2l0aCBhIHNpbmdsZSBmdW5jdGlvbiBsb29rdXBfZGVudHJ5KCkgdGhhdCBjYW4gaGFuZGxlIGFsbFxcbiAgKiB0aGUgc3BlY2lhbCBjYXNlcyBvZiB0aGUgZm9ybWVyIGNvZGUuXFxuICAqXFxuICAqIFdpdGggdGhlIG5ldyBkY2FjaGUsIHRoZSBwYXRobmFtZSBpcyBzdG9yZWQgYXQgZWFjaCBpbm9kZSwgYXQgbGVhc3QgYXNcXG5AQCAtMTI1NSw2ICsxMjU1LDcyIEBAIGZzX2luaXRjYWxsKGluaXRfZnNfbmFtZWlfc3lzY3Rscyk7XFxuIFxcbiAjZW5kaWYgLyogQ09ORklHX1NZU0NUTCAqL1xcbiBcXG4rLypcXG4rICogRGV0ZXJtaW5lIGlmIGFuIGlub2RlIGlzIG93bmVkIGJ5IHRoZSBwcm9jZXNzIChhbGxvd2luZyBmb3IgZnN1aWQgb3ZlcnJpZGUpLFxcbisgKiByZXR1cm5pbmcgMCBpZiBzbywgMSBpZiBub3QgYW5kIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBpZiB0aGVyZSB3YXMgYSBwcm9ibGVtXFxuKyAqIG1ha2luZyB0aGUgZGV0ZXJtaW5hdGlvbi5cXG4rICovXFxuK2ludCB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuK3tcXG4rXFx0aWYgKHVubGlrZWx5KGlub2RlLVxcdTAwM2VpX29wZmxhZ3MgXFx1MDAyNiBJT1BfT1dORVJTSElQX09WRVJSSURFKSlcXG4rXFx0XFx0cmV0dXJuIGlub2RlLVxcdTAwM2VpX29wLVxcdTAwM2Vpc19vd25lZF9ieV9tZShpZG1hcCwgaW5vZGUpO1xcbitcXHRpZiAodmZzdWlkX2VxX2t1aWQoaV91aWRfaW50b192ZnN1aWQoaWRtYXAsIGlub2RlKSwgY3VycmVudF9mc3VpZCgpKSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdHJldHVybiAxOyAvKiBOb3Qgc2FtZS4gKi9cXG4rfVxcbitcXG4rLypcXG4rICogRGV0ZXJtaW5lIGlmIGFuIGlub2RlIGhhcyB0aGUgc2FtZSBvd25lciBhcyBpdHMgcGFyZW50IGRpcmVjdG9yeSwgcmV0dXJuaW5nXFxuKyAqIDAgaWYgc28sIDEgaWYgbm90IGFuZCBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgaWYgdGhlcmUgd2FzIGEgcHJvYmxlbSBtYWtpbmdcXG4rICogdGhlIGRldGVybWluYXRpb24uXFxuKyAqL1xcbitzdGF0aWMgaW50IHZmc19pbm9kZV9hbmRfZGlyX2hhdmVfc2FtZV9vd25lcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgbmFtZWlkYXRhICpuZClcXG4re1xcbitcXHRpZiAodW5saWtlbHkoaW5vZGUtXFx1MDAzZWlfb3BmbGFncyBcXHUwMDI2IElPUF9PV05FUlNISVBfT1ZFUlJJREUpKSB7XFxuK1xcdFxcdHN0cnVjdCBkZW50cnkgKnBhcmVudDtcXG4rXFx0XFx0c3RydWN0IGlub2RlICpkaXI7XFxuK1xcdFxcdGludCByZXQ7XFxuK1xcbitcXHRcXHRpZiAoaW5vZGUgIT0gbmQtXFx1MDAzZWlub2RlKSB7XFxuK1xcdFxcdFxcdGRpciA9IG5kLVxcdTAwM2Vpbm9kZTtcXG4rXFx0XFx0XFx0cmV0ID0gaW5vZGUtXFx1MDAzZWlfb3AtXFx1MDAzZWhhdmVfc2FtZV9vd25lcihpZG1hcCwgaW5vZGUsIGRpcik7XFxuK1xcdFxcdH0gZWxzZSBpZiAobmQtXFx1MDAzZWZsYWdzIFxcdTAwMjYgTE9PS1VQX1JDVSkge1xcbitcXHRcXHRcXHRwYXJlbnQgPSBSRUFEX09OQ0UobmQtXFx1MDAzZXBhdGguZGVudHJ5KTtcXG4rXFx0XFx0XFx0ZGlyID0gUkVBRF9PTkNFKHBhcmVudC1cXHUwMDNlZF9pbm9kZSk7XFxuK1xcdFxcdFxcdGlmICghZGlyKVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gLUVDSElMRDtcXG4rXFx0XFx0XFx0cmV0ID0gaW5vZGUtXFx1MDAzZWlfb3AtXFx1MDAzZWhhdmVfc2FtZV9vd25lcihpZG1hcCwgaW5vZGUsIGRpcik7XFxuK1xcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdHBhcmVudCA9IGRnZXRfcGFyZW50KG5kLVxcdTAwM2VwYXRoLmRlbnRyeSk7XFxuK1xcdFxcdFxcdGRpciA9IHBhcmVudC1cXHUwMDNlZF9pbm9kZTtcXG4rXFx0XFx0XFx0cmV0ID0gaW5vZGUtXFx1MDAzZWlfb3AtXFx1MDAzZWhhdmVfc2FtZV9vd25lcihpZG1hcCwgaW5vZGUsIGRpcik7XFxuK1xcdFxcdFxcdGRwdXQocGFyZW50KTtcXG4rXFx0XFx0fVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHR9XFxuK1xcbitcXHRpZiAodmZzdWlkX3ZhbGlkKG5kLVxcdTAwM2VkaXJfdmZzdWlkKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgdmZzdWlkX2VxKGlfdWlkX2ludG9fdmZzdWlkKGlkbWFwLCBpbm9kZSksIG5kLVxcdTAwM2VkaXJfdmZzdWlkKSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdHJldHVybiAxOyAvKiBOb3Qgc2FtZS4gKi9cXG4rfVxcbitcXG4rLypcXG4rICogRGV0ZXJtaW5lIGlmIHR3byBpbm9kZXMgaGF2ZSB0aGUgc2FtZSBvd25lciwgcmV0dXJuaW5nIDAgaWYgc28sIDEgaWYgbm90IGFuZFxcbisgKiBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgaWYgdGhlcmUgd2FzIGEgcHJvYmxlbSBtYWtpbmcgdGhlIGRldGVybWluYXRpb24uXFxuKyAqL1xcbitzdGF0aWMgaW50IHZmc19pbm9kZXNfaGF2ZV9zYW1lX293bmVyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbitcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgaW5vZGUgKmRpcilcXG4re1xcbitcXHRpZiAodW5saWtlbHkoaW5vZGUtXFx1MDAzZWlfb3BmbGFncyBcXHUwMDI2IElPUF9PV05FUlNISVBfT1ZFUlJJREUpKVxcbitcXHRcXHRyZXR1cm4gaW5vZGUtXFx1MDAzZWlfb3AtXFx1MDAzZWhhdmVfc2FtZV9vd25lcihpZG1hcCwgaW5vZGUsIGRpcik7XFxuK1xcdGlmICh2ZnN1aWRfZXEoaV91aWRfaW50b192ZnN1aWQoaWRtYXAsIGlub2RlKSxcXG4rXFx0XFx0ICAgICAgaV91aWRfaW50b192ZnN1aWQoaWRtYXAsIGRpcikpKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0cmV0dXJuIDE7IC8qIE5vdCBzYW1lLiAqL1xcbit9XFxuK1xcbiAvKipcXG4gICogbWF5X2ZvbGxvd19saW5rIC0gQ2hlY2sgc3ltbGluayBmb2xsb3dpbmcgZm9yIHVuc2FmZSBzaXR1YXRpb25zXFxuICAqIEBuZDogbmFtZWlkYXRhIHBhdGh3YWxrIGRhdGFcXG5AQCAtMTI3MSwyNyArMTMzNywyOCBAQCBmc19pbml0Y2FsbChpbml0X2ZzX25hbWVpX3N5c2N0bHMpO1xcbiAgKlxcbiAgKiBSZXR1cm5zIDAgaWYgZm9sbG93aW5nIHRoZSBzeW1saW5rIGlzIGFsbG93ZWQsIC12ZSBvbiBlcnJvci5cXG4gICovXFxuLXN0YXRpYyBpbmxpbmUgaW50IG1heV9mb2xsb3dfbGluayhzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSlcXG4rc3RhdGljIGlubGluZSBpbnQgbWF5X2ZvbGxvd19saW5rKHN0cnVjdCBuYW1laWRhdGEgKm5kLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbiB7XFxuIFxcdHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwO1xcbi1cXHR2ZnN1aWRfdCB2ZnN1aWQ7XFxuK1xcdGludCByZXQ7XFxuIFxcbiBcXHRpZiAoIXN5c2N0bF9wcm90ZWN0ZWRfc3ltbGlua3MpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4tXFx0aWRtYXAgPSBtbnRfaWRtYXAobmQtXFx1MDAzZXBhdGgubW50KTtcXG4tXFx0dmZzdWlkID0gaV91aWRfaW50b192ZnN1aWQoaWRtYXAsIGlub2RlKTtcXG4tXFx0LyogQWxsb3dlZCBpZiBvd25lciBhbmQgZm9sbG93ZXIgbWF0Y2guICovXFxuLVxcdGlmICh2ZnN1aWRfZXFfa3VpZCh2ZnN1aWQsIGN1cnJlbnRfZnN1aWQoKSkpXFxuLVxcdFxcdHJldHVybiAwO1xcbi1cXG4gXFx0LyogQWxsb3dlZCBpZiBwYXJlbnQgZGlyZWN0b3J5IG5vdCBzdGlja3kgYW5kIHdvcmxkLXdyaXRhYmxlLiAqL1xcbiBcXHRpZiAoKG5kLVxcdTAwM2VkaXJfbW9kZSBcXHUwMDI2IChTX0lTVlRYfFNfSVdPVEgpKSAhPSAoU19JU1ZUWHxTX0lXT1RIKSlcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcbitcXHRpZG1hcCA9IG1udF9pZG1hcChuZC1cXHUwMDNlcGF0aC5tbnQpO1xcbitcXHQvKiBBbGxvd2VkIGlmIG93bmVyIGFuZCBmb2xsb3dlciBtYXRjaC4gKi9cXG4rXFx0cmV0ID0gdmZzX2lub2RlX2lzX293bmVkX2J5X21lKGlkbWFwLCBpbm9kZSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYz0gMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuIFxcdC8qIEFsbG93ZWQgaWYgcGFyZW50IGRpcmVjdG9yeSBhbmQgbGluayBvd25lciBtYXRjaC4gKi9cXG4tXFx0aWYgKHZmc3VpZF92YWxpZChuZC1cXHUwMDNlZGlyX3Zmc3VpZCkgXFx1MDAyNlxcdTAwMjYgdmZzdWlkX2VxKG5kLVxcdTAwM2VkaXJfdmZzdWlkLCB2ZnN1aWQpKVxcbi1cXHRcXHRyZXR1cm4gMDtcXG4rXFx0cmV0ID0gdmZzX2lub2RlX2FuZF9kaXJfaGF2ZV9zYW1lX293bmVyKGlkbWFwLCBpbm9kZSwgbmQpO1xcbitcXHRpZiAocmV0IFxcdTAwM2M9IDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuIFxcbiBcXHRpZiAobmQtXFx1MDAzZWZsYWdzIFxcdTAwMjYgTE9PS1VQX1JDVSlcXG4gXFx0XFx0cmV0dXJuIC1FQ0hJTEQ7XFxuQEAgLTEzODksMTIgKzE0NTYsMTIgQEAgaW50IG1heV9saW5rYXQoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIGNvbnN0IHN0cnVjdCBwYXRoICpsaW5rKVxcbiAgKiBAaW5vZGU6IHRoZSBpbm9kZSBvZiB0aGUgZmlsZSB0byBvcGVuXFxuICAqXFxuICAqIEJsb2NrIGFuIE9fQ1JFQVQgb3BlbiBvZiBhIEZJRk8gKG9yIGEgcmVndWxhciBmaWxlKSB3aGVuOlxcbi0gKiAgIC0gc3lzY3RsX3Byb3RlY3RlZF9maWZvcyAob3Igc3lzY3RsX3Byb3RlY3RlZF9yZWd1bGFyKSBpcyBlbmFibGVkXFxuLSAqICAgLSB0aGUgZmlsZSBhbHJlYWR5IGV4aXN0c1xcbi0gKiAgIC0gd2UgYXJlIGluIGEgc3RpY2t5IGRpcmVjdG9yeVxcbi0gKiAgIC0gd2UgZG9uJ3Qgb3duIHRoZSBmaWxlXFxuKyAqICAgLSBzeXNjdGxfcHJvdGVjdGVkX2ZpZm9zIChvciBzeXNjdGxfcHJvdGVjdGVkX3JlZ3VsYXIpIGlzIGVuYWJsZWQsXFxuKyAqICAgLSB0aGUgZmlsZSBhbHJlYWR5IGV4aXN0cyxcXG4rICogICAtIHdlIGFyZSBpbiBhIHN0aWNreSBkaXJlY3RvcnksXFxuKyAqICAgLSB0aGUgZGlyZWN0b3J5IGlzIHdvcmxkIHdyaXRhYmxlLFxcbisgKiAgIC0gd2UgZG9uJ3Qgb3duIHRoZSBmaWxlIGFuZFxcbiAgKiAgIC0gdGhlIG93bmVyIG9mIHRoZSBkaXJlY3RvcnkgZG9lc24ndCBvd24gdGhlIGZpbGVcXG4tICogICAtIHRoZSBkaXJlY3RvcnkgaXMgd29ybGQgd3JpdGFibGVcXG4gICogSWYgdGhlIHN5c2N0bF9wcm90ZWN0ZWRfZmlmb3MgKG9yIHN5c2N0bF9wcm90ZWN0ZWRfcmVndWxhcikgaXMgc2V0IHRvIDJcXG4gICogdGhlIGRpcmVjdG9yeSBkb2Vzbid0IGhhdmUgdG8gYmUgd29ybGQgd3JpdGFibGU6IGJlaW5nIGdyb3VwIHdyaXRhYmxlIHdpbGxcXG4gICogYmUgZW5vdWdoLlxcbkBAIC0xNDA1LDEzICsxNDcyLDQ1IEBAIGludCBtYXlfbGlua2F0KHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBjb25zdCBzdHJ1Y3QgcGF0aCAqbGluaylcXG4gICogT24gbm9uLWlkbWFwcGVkIG1vdW50cyBvciBpZiBwZXJtaXNzaW9uIGNoZWNraW5nIGlzIHRvIGJlIHBlcmZvcm1lZCBvbiB0aGVcXG4gICogcmF3IGlub2RlIHNpbXBseSBwYXNzIEBub3BfbW50X2lkbWFwLlxcbiAgKlxcbisgKiBGb3IgYSBmaWxlc3lzdGVtIChlLmcuIGEgbmV0d29yayBmaWxlc3lzdGVtKSB0aGF0IGhhcyBhIHNlcGFyYXRlIElEIHNwYWNlXFxuKyAqIGFuZCBoYXMgZm9yZWlnbiBJRHMgKG1heWJlIGV2ZW4gbm9uLWludGVnZXIgSURzKSwgaV91aWQgY2Fubm90IGJlIGNvbXBhcmVkXFxuKyAqIHRvIGN1cnJlbnRfZnN1aWQoKSBhbmQgbWF5IG5vdCBiZSBkaXJlY3RseSBjb21wYXJhYmxlIHRvIGFub3RoZXIgaV91aWQuXFxuKyAqIEluc3RlYWQsIHRoZSBmaWxlc3lzdGVtIGlzIGFza2VkIHRvIHBlcmZvcm0gdGhlIGNvbXBhcmlzb25zLiAgV2l0aCBuZXR3b3JrXFxuKyAqIGZpbGVzeXN0ZW1zLCB0aGVyZSBhbHNvIGV4aXN0cyB0aGUgcG9zc2liaWxpdHkgb2YgZG9pbmcgYW5vbnltb3VzXFxuKyAqIG9wZXJhdGlvbnMgYW5kIGhhdmluZyBhbm9ueW1vdXNseS1vd25lZCBvYmplY3RzLlxcbisgKlxcbisgKiBXZSBoYXZlIHRoZSBmb2xsb3dpbmcgc2NlbmFyaW9zOlxcbisgKlxcbisgKlxcdFVTRVJcXHRESVJcXHRGSUxFXFx0RklMRVxcdEFMTE9XRURcXG4rICpcXHRcXHRPV05FUlxcdE9XTkVSXFx0U1RBVEVcXG4rICpcXHQ9PT09PT09XFx0PT09PT09PVxcdD09PT09PT1cXHQ9PT09PT09XFx0PT09PT09PVxcbisgKlxcdEFcXHRBXFx0LVxcdE5ld1xcdFllc1xcbisgKlxcdEFcXHRBXFx0QVxcdEV4aXN0c1xcdFllc1xcbisgKlxcdEFcXHRBXFx0Q1xcdEV4aXN0c1xcdE5vXFxuKyAqXFx0QVxcdEJcXHQtXFx0TmV3XFx0WWVzXFxuKyAqXFx0QVxcdEJcXHRBXFx0RXhpc3RzXFx0WWVzLCBGTz09VVxcbisgKlxcdEFcXHRCXFx0QlxcdEV4aXN0c1xcdFllcywgRk89PURPXFxuKyAqXFx0QVxcdEJcXHRDXFx0RXhpc3RzXFx0Tm9cXG4rICpcXHRBXFx0YW5vblsxXVxcdC1cXHROZXdcXHRZZXNcXG4rICpcXHRBXFx0YW5vblsxXVxcdEFcXHRFeGlzdHNcXHRZZXNcXG4rICpcXHRBXFx0YW5vblsxXVxcdENcXHRFeGlzdHNcXHROb1xcbisgKlxcdGFub25cXHRBXFx0LVxcdE5ld1xcdFllc1xcbisgKlxcdGFub25cXHRBXFx0QVxcdEV4aXN0c1xcdFllcywgRk89PURPXFxuKyAqXFx0YW5vblxcdGFub25bMV1cXHQtXFx0TmV3XFx0WWVzXFxuKyAqXFx0YW5vblxcdGFub25bMV1cXHQtXFx0RXhpc3RzXFx0Tm9cXG4rICpcXHRhbm9uXFx0QVxcdEFcXHRFeGlzdHNcXHRZZXMsIEZPPT1ET1xcbisgKlxcdGFub25cXHRBXFx0Q1xcdEV4aXN0c1xcdE5vXFxuKyAqXFx0YW5vblxcdEFcXHRhbm9uXFx0RXhpc3RzXFx0Tm9cXG4rICpcXG4rICogWzFdIENhbiBhbm9ueW1vdXNseS1vd25lZCBkaXJzIGJlIHN0aWNreT9cXG4rICpcXG4gICogUmV0dXJucyAwIGlmIHRoZSBvcGVuIGlzIGFsbG93ZWQsIC12ZSBvbiBlcnJvci5cXG4gICovXFxuIHN0YXRpYyBpbnQgbWF5X2NyZWF0ZV9pbl9zdGlja3koc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBuYW1laWRhdGEgKm5kLFxcbi1cXHRcXHRcXHRcXHRzdHJ1Y3QgaW5vZGUgKmNvbnN0IGlub2RlKVxcbitcXHRcXHRcXHRcXHRzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbiB7XFxuIFxcdHVtb2RlX3QgZGlyX21vZGUgPSBuZC1cXHUwMDNlZGlyX21vZGU7XFxuLVxcdHZmc3VpZF90IGRpcl92ZnN1aWQgPSBuZC1cXHUwMDNlZGlyX3Zmc3VpZCwgaV92ZnN1aWQ7XFxuK1xcdGludCByZXQ7XFxuIFxcbiBcXHRpZiAobGlrZWx5KCEoZGlyX21vZGUgXFx1MDAyNiBTX0lTVlRYKSkpXFxuIFxcdFxcdHJldHVybiAwO1xcbkBAIC0xNDIyLDEzICsxNTIxLDEzIEBAIHN0YXRpYyBpbnQgbWF5X2NyZWF0ZV9pbl9zdGlja3koc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBuYW1laWRhdGEgKm5kLFxcbiBcXHRpZiAoU19JU0ZJRk8oaW5vZGUtXFx1MDAzZWlfbW9kZSkgXFx1MDAyNlxcdTAwMjYgIXN5c2N0bF9wcm90ZWN0ZWRfZmlmb3MpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4tXFx0aV92ZnN1aWQgPSBpX3VpZF9pbnRvX3Zmc3VpZChpZG1hcCwgaW5vZGUpO1xcbi1cXG4tXFx0aWYgKHZmc3VpZF9lcShpX3Zmc3VpZCwgZGlyX3Zmc3VpZCkpXFxuLVxcdFxcdHJldHVybiAwO1xcbitcXHRyZXQgPSB2ZnNfaW5vZGVfYW5kX2Rpcl9oYXZlX3NhbWVfb3duZXIoaWRtYXAsIGlub2RlLCBuZCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYz0gMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4gXFxuLVxcdGlmICh2ZnN1aWRfZXFfa3VpZChpX3Zmc3VpZCwgY3VycmVudF9mc3VpZCgpKSlcXG4tXFx0XFx0cmV0dXJuIDA7XFxuK1xcdHJldCA9IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShpZG1hcCwgaW5vZGUpO1xcbitcXHRpZiAocmV0IFxcdTAwM2M9IDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuIFxcbiBcXHRpZiAobGlrZWx5KGRpcl9tb2RlIFxcdTAwMjYgMDAwMikpIHtcXG4gXFx0XFx0YXVkaXRfbG9nX3BhdGhfZGVuaWVkKEFVRElUX0FOT01fQ1JFQVQsIFxcXCJzdGlja3lfY3JlYXRlXFxcIik7XFxuQEAgLTM2NDUsMTIgKzM3NDQsMTQgQEAgRVhQT1JUX1NZTUJPTCh1c2VyX3BhdGhfYXQpO1xcbiBpbnQgX19jaGVja19zdGlja3koc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbiBcXHRcXHQgICBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbiB7XFxuLVxcdGt1aWRfdCBmc3VpZCA9IGN1cnJlbnRfZnN1aWQoKTtcXG4rXFx0aW50IHJldDtcXG4gXFxuLVxcdGlmICh2ZnN1aWRfZXFfa3VpZChpX3VpZF9pbnRvX3Zmc3VpZChpZG1hcCwgaW5vZGUpLCBmc3VpZCkpXFxuLVxcdFxcdHJldHVybiAwO1xcbi1cXHRpZiAodmZzdWlkX2VxX2t1aWQoaV91aWRfaW50b192ZnN1aWQoaWRtYXAsIGRpciksIGZzdWlkKSlcXG4tXFx0XFx0cmV0dXJuIDA7XFxuK1xcdHJldCA9IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShpZG1hcCwgaW5vZGUpO1xcbitcXHRpZiAocmV0IFxcdTAwM2M9IDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdHJldCA9IHZmc19pbm9kZXNfaGF2ZV9zYW1lX293bmVyKGlkbWFwLCBpbm9kZSwgZGlyKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjPSAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXHRyZXR1cm4gIWNhcGFibGVfd3J0X2lub2RlX3VpZGdpZChpZG1hcCwgaW5vZGUsIENBUF9GT1dORVIpO1xcbiB9XFxuIEVYUE9SVF9TWU1CT0woX19jaGVja19zdGlja3kpO1xcbmRpZmYgLS1naXQgYS9mcy9yZW1hcF9yYW5nZS5jIGIvZnMvcmVtYXBfcmFuZ2UuY1xcbmluZGV4IDI2YWZiYmJmYjEwYzJlLi45ZWVlOTNjMjcwMDEyNSAxMDA2NDRcXG4tLS0gYS9mcy9yZW1hcF9yYW5nZS5jXFxuKysrIGIvZnMvcmVtYXBfcmFuZ2UuY1xcbkBAIC00MTMsMjAgKzQxMywyMiBAQCBsb2ZmX3QgdmZzX2Nsb25lX2ZpbGVfcmFuZ2Uoc3RydWN0IGZpbGUgKmZpbGVfaW4sIGxvZmZfdCBwb3NfaW4sXFxuIEVYUE9SVF9TWU1CT0wodmZzX2Nsb25lX2ZpbGVfcmFuZ2UpO1xcbiBcXG4gLyogQ2hlY2sgd2hldGhlciB3ZSBhcmUgYWxsb3dlZCB0byBkZWR1cGUgdGhlIGRlc3RpbmF0aW9uIGZpbGUgKi9cXG4tc3RhdGljIGJvb2wgbWF5X2RlZHVwZV9maWxlKHN0cnVjdCBmaWxlICpmaWxlKVxcbitzdGF0aWMgaW50IG1heV9kZWR1cGVfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4ge1xcbiBcXHRzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCA9IGZpbGVfbW50X2lkbWFwKGZpbGUpO1xcbiBcXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZV9pbm9kZShmaWxlKTtcXG4rXFx0aW50IHJldDtcXG4gXFxuIFxcdGlmIChjYXBhYmxlKENBUF9TWVNfQURNSU4pKVxcbi1cXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFx0XFx0cmV0dXJuIDA7XFxuIFxcdGlmIChmaWxlLVxcdTAwM2VmX21vZGUgXFx1MDAyNiBGTU9ERV9XUklURSlcXG4tXFx0XFx0cmV0dXJuIHRydWU7XFxuLVxcdGlmICh2ZnN1aWRfZXFfa3VpZChpX3VpZF9pbnRvX3Zmc3VpZChpZG1hcCwgaW5vZGUpLCBjdXJyZW50X2ZzdWlkKCkpKVxcbi1cXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdHJldCA9IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShpZG1hcCwgaW5vZGUpO1xcbitcXHRpZiAocmV0IFxcdTAwM2M9IDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuIFxcdGlmICghaW5vZGVfcGVybWlzc2lvbihpZG1hcCwgaW5vZGUsIE1BWV9XUklURSkpXFxuLVxcdFxcdHJldHVybiB0cnVlO1xcbi1cXHRyZXR1cm4gZmFsc2U7XFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHRyZXR1cm4gLUVQRVJNO1xcbiB9XFxuIFxcbiBsb2ZmX3QgdmZzX2RlZHVwZV9maWxlX3JhbmdlX29uZShzdHJ1Y3QgZmlsZSAqc3JjX2ZpbGUsIGxvZmZfdCBzcmNfcG9zLFxcbkBAIC00NTksOCArNDYxLDggQEAgbG9mZl90IHZmc19kZWR1cGVfZmlsZV9yYW5nZV9vbmUoc3RydWN0IGZpbGUgKnNyY19maWxlLCBsb2ZmX3Qgc3JjX3BvcyxcXG4gXFx0aWYgKHJldClcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4gXFxuLVxcdHJldCA9IC1FUEVSTTtcXG4tXFx0aWYgKCFtYXlfZGVkdXBlX2ZpbGUoZHN0X2ZpbGUpKVxcbitcXHRyZXQgPSBtYXlfZGVkdXBlX2ZpbGUoZHN0X2ZpbGUpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gXFx0XFx0Z290byBvdXRfZHJvcF93cml0ZTtcXG4gXFxuIFxcdHJldCA9IC1FWERFVjtcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mcy5oIGIvaW5jbHVkZS9saW51eC9mcy5oXFxuaW5kZXggNTBjZTczMWEyYjc4ZjEuLjgwMTNjMTNhMzUzZDY3IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvZnMuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvZnMuaFxcbkBAIC02MjgsNiArNjI4LDcgQEAgaXNfdW5jYWNoZWRfYWNsKHN0cnVjdCBwb3NpeF9hY2wgKmFjbClcXG4gI2RlZmluZSBJT1BfQ0FDSEVEX0xJTktcXHRcXHQweDAwNDBcXG4gI2RlZmluZSBJT1BfRkFTVFBFUk1fTUFZX0VYRUNcXHQweDAwODBcXG4gI2RlZmluZSBJT1BfRkxDVFhcXHRcXHQweDAxMDBcXG4rI2RlZmluZSBJT1BfT1dORVJTSElQX09WRVJSSURFXFx0MHgwMjAwXFx0LyogVXNlIC1cXHUwMDNlaXNfb3duZWRfYnlfbWUoKSBhbmQgLVxcdTAwM2VoYXZlX3NhbWVfb3duZXIoKSAqL1xcbiBcXG4gLypcXG4gICogSW5vZGUgc3RhdGUgYml0cy4gIFByb3RlY3RlZCBieSBpbm9kZS1cXHUwMDNlaV9sb2NrXFxuQEAgLTE3NTUsOCArMTc1Niw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBmaWxlX3dyaXRlX25vdF9zdGFydGVkKGNvbnN0IHN0cnVjdCBmaWxlICpmaWxlKVxcbiBcXHRyZXR1cm4gc2Jfd3JpdGVfbm90X3N0YXJ0ZWQoZmlsZV9pbm9kZShmaWxlKS1cXHUwMDNlaV9zYik7XFxuIH1cXG4gXFxuLWJvb2wgaW5vZGVfb3duZXJfb3JfY2FwYWJsZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4tXFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xcbitib29sIGlub2RlX293bmVyX29yX2NhcGFibGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xcbiBcXG4gLypcXG4gICogVkZTIGhlbHBlciBmdW5jdGlvbnMuLlxcbkBAIC0yMDM2LDYgKzIwMzYsOSBAQCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyB7XFxuIFxcdFxcdFxcdCAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBmaWxlX2thdHRyICpmYSk7XFxuIFxcdGludCAoKmZpbGVhdHRyX2dldCkoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgZmlsZV9rYXR0ciAqZmEpO1xcbiBcXHRzdHJ1Y3Qgb2Zmc2V0X2N0eCAqKCpnZXRfb2Zmc2V0X2N0eCkoc3RydWN0IGlub2RlICppbm9kZSk7XFxuK1xcdGludCAoKmlzX293bmVkX2J5X21lKShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSk7XFxuK1xcdGludCAoKmhhdmVfc2FtZV9vd25lcikoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUxLFxcbitcXHRcXHRcXHQgICAgICAgc3RydWN0IGlub2RlICppbm9kZTIpO1xcbiB9IF9fX19jYWNoZWxpbmVfYWxpZ25lZDtcXG4gXFxuIC8qIERpZCB0aGUgZHJpdmVyIHByb3ZpZGUgdmFsaWQgbW1hcCBob29rIGNvbmZpZ3VyYXRpb24/ICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAzOjMzOjA5LjQ3MTA1NDU0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTA2Njg2ODgzODQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkFGU19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZmc19pbm9kZV9pc19vd25lZF9ieV9tZVwiLFxuICAgIFwiYWZzX2lzX293bmVkX2J5X21lXCIsXG4gICAgXCJhZnNfaGF2ZV9zYW1lX293bmVyXCIsXG4gICAgXCJpbm9kZV9vd25lcl9vcl9jYXBhYmxlXCIsXG4gICAgXCJ2ZnNfc2V0bGVhc2VcIixcbiAgICBcIl9fY2hlY2tfc3RpY2t5XCIsXG4gICAgXCJzZXRhdHRyX3ByZXBhcmVcIixcbiAgICBcInZmc19kZWR1cGVfZmlsZV9yYW5nZV9vbmVcIixcbiAgICBcImFmc19lZGl0X2Rpcl9yZW1vdmVcIixcbiAgICBcImFmc19mc19mZXRjaF9kYXRhXCIsXG4gICAgXCJhZnNfZGlyX2ZpbmRfYmxvY2tcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIG5ldyBpbm9kZSBvcGVyYXRpb25zIGBpc19vd25lZF9ieV9tZWAgYW5kIGBoYXZlX3NhbWVfb3duZXJgIHRvIGFsbG93IGZpbGVzeXN0ZW1zIChsaWtlIEFGUykgdG8gb3ZlcnJpZGUgZGVmYXVsdCBWRlMgb3duZXJzaGlwIGNoZWNrcy4gSXQgbW9kaWZpZXMgY29yZSBWRlMgcGF0aHMgKGUuZy4sIGBjaG93bl9va2AsIGBjaGdycF9va2AsIGBjb3JlZHVtcF9maWxlYCwgYGlub2RlX293bmVyX29yX2NhcGFibGVgLCBgdmZzX3NldGxlYXNlYCwgYG1heV9mb2xsb3dfbGlua2AsIGBtYXlfY3JlYXRlX2luX3N0aWNreWAsIGBfX2NoZWNrX3N0aWNreWAsIGBtYXlfZGVkdXBlX2ZpbGVgKSB0byB1c2UgdGhlc2UgbmV3IG9wZXJhdGlvbnMuIEl0IGFsc28gaW1wbGVtZW50cyB0aGVzZSBvcGVyYXRpb25zIGZvciBBRlMgYW5kIGZpeGVzIHNvbWUgQUZTLXNwZWNpZmljIGJ1Z3MgaW4gZGlyZWN0b3J5IGVkaXRpbmcgYW5kIGRhdGEgZmV0Y2hpbmcuIFRoZXNlIGFyZSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gdGhlIGNvcmUgVkZTIGFuZCBBRlMsIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBvciBzZWN1cml0eSBpc3N1ZXMgYXJlIGludHJvZHVjZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDc2YjlmNjA2ZWFlMmIwOWUwOTAxZDI0ODgzMmVkNWMxMzYwMGY1NDBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEp1bCAyOCAwMzozMzowNSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZzLnJzdCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZzLnJzdFxuaW5kZXggN2M3NTMxNDhhZjg4ODMuLjg5MzQxOWUwMDNlYWY3IDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy92ZnMucnN0XG4rKysgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Zmcy5yc3RcbkBAIC00NDUsNiArNDQ1LDkgQEAgQXMgb2Yga2VybmVsIDIuNi4yMiwgdGhlIGZvbGxvd2luZyBtZW1iZXJzIGFyZSBkZWZpbmVkOlxuIFx0XHRcdFx0ICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGZpbGVfa2F0dHIgKmZhKTtcbiBcdFx0aW50ICgqZmlsZWF0dHJfZ2V0KShzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBmaWxlX2thdHRyICpmYSk7XG4gXHQgICAgICAgIHN0cnVjdCBvZmZzZXRfY3R4ICooKmdldF9vZmZzZXRfY3R4KShzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbitcdFx0aW50ICgqaXNfb3duZWRfYnlfbWUpKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbitcdFx0aW50ICgqaGF2ZV9zYW1lX293bmVyKShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSxcbitcdFx0XHRcdCAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpO1xuIFx0fTtcbiBcbiBBZ2FpbiwgYWxsIG1ldGhvZHMgYXJlIGNhbGxlZCB3aXRob3V0IGFueSBsb2NrcyBiZWluZyBoZWxkLCB1bmxlc3NcbkBAIC02MzQsNiArNjM3LDI0IEBAIG90aGVyd2lzZSBub3RlZC5cbiAgICAgICAgIGZpbGVzeXN0ZW0gbXVzdCBkZWZpbmUgdGhpcyBvcGVyYXRpb24gdG8gdXNlXG4gICAgICAgICBzaW1wbGVfb2Zmc2V0X2Rpcl9vcGVyYXRpb25zLlxuIFxuK2BgaXNfb3duZWRfYnlfbWVgYFxuK1x0Y2FsbGVkIHRvIGRldGVybWluZSBpZiB0aGUgZmlsZSBjYW4gYmUgY29uc2lkZXJlZCB0byBiZSAnb3duZWQnIGJ5XG4rXHR0aGUgb3duZXIgb2YgdGhlIHByb2Nlc3Mgb3IgaWYgdGhlIHByb2Nlc3MgaGFzIGEgdG9rZW4gdGhhdCBncmFudHNcbitcdGl0IG93bmVyc2hpcCBwcml2aWxlZ2VzLiAgSWYgdW5zZXQsIHRoZSBkZWZhdWx0IGlzIHRvIGNvbXBhcmUgaV91aWRcbitcdHRvIGN1cnJlbnRfZnN1aWQoKSAtIGJ1dCB0aGlzIG1heSBnaXZlIGluY29ycmVjdCByZXN1bHRzIGZvciBzb21lXG4rXHRuZXR3b3JrIG9yIHBsdWctaW4gYmxvY2sgZmlsZXN5c3RlbXMuICBGb3IgZXhhbXBsZSwgQUZTIGRldGVybWluZXNcbitcdG93bmVyc2hpcCBlbnRpcmVseSBhY2NvcmRpbmcgdG8gYW4gb2J0YWluZWQgdG9rZW4gYW5kIGlfdWlkIG1heSBub3RcbitcdGV2ZW4gYmUgZnJvbSB0aGUgc2FtZSBJRCBzcGFjZSBhcyBjdXJyZW50X3VpZCgpLlxuK1xuK2BgaGF2ZV9zYW1lX293bmVyYGBcbitcdGNhbGxlZCB0byBkZXRlcm1pbmUgaWYgYW4gaW5vZGUgaGFzIHRoZSBzYW1lIG93bmVyIGFzIGl0cyBpbW1lZGlhdGVcbitcdHBhcmVudCBvbiB0aGUgcGF0aCB3YWxrZWQuICBJZiB1bnNldCwgdGhlIGRlZmF1bHQgaXMgdG8gc2ltcGx5XG4rXHRjb21wYXJlIHRoZSBpX3VpZCBvZiBib3RoLiAgRm9yIGV4YW1wbGUsIEFGUyBjb21wYXJlcyB0aGUgb3duZXIgSURzXG4rXHRvZiBib3RoIC0gYnV0IHRoZXNlIGFyZSBhIDY0LWJpdCB2YWx1ZXMgb24gc29tZSB2YXJpYW50cyB0aGF0IG1pZ2h0XG4rXHRub3QgZml0IGludG8gYSBrdWlkX3QgYW5kIGNpZnMgaGFzIEdVSURzIHRoYXQgY2Fubm90IGJlIGNvbXBhcmVkIHRvXG4rXHRrdWlkX3QuXG4rXG4rXG4gVGhlIEFkZHJlc3MgU3BhY2UgT2JqZWN0XG4gPT09PT09PT09PT09PT09PT09PT09PT09XG4gXG5kaWZmIC0tZ2l0IGEvZnMvYWZzL2Rpci5jIGIvZnMvYWZzL2Rpci5jXG5pbmRleCA2ZGY1NmZlOTE2M2ZkNy4uZWUyZjVlYzBiMmM2N2QgMTAwNjQ0XG4tLS0gYS9mcy9hZnMvZGlyLmNcbisrKyBiL2ZzL2Fmcy9kaXIuY1xuQEAgLTY5LDYgKzY5LDggQEAgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgYWZzX2Rpcl9pbm9kZV9vcGVyYXRpb25zID0ge1xuIFx0LnBlcm1pc3Npb25cdD0gYWZzX3Blcm1pc3Npb24sXG4gXHQuZ2V0YXR0clx0PSBhZnNfZ2V0YXR0cixcbiBcdC5zZXRhdHRyXHQ9IGFmc19zZXRhdHRyLFxuK1x0LmlzX293bmVkX2J5X21lXHQ9IGFmc19pc19vd25lZF9ieV9tZSxcbitcdC5oYXZlX3NhbWVfb3duZXIgPSBhZnNfaGF2ZV9zYW1lX293bmVyLFxuIH07XG4gXG4gY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBhZnNfZGlyX2FvcHMgPSB7XG5kaWZmIC0tZ2l0IGEvZnMvYWZzL2Rpcl9lZGl0LmMgYi9mcy9hZnMvZGlyX2VkaXQuY1xuaW5kZXggZmQzYWE5Zjk3Y2U2NGMuLmMzMTMwMzA1OTQ0NGFkIDEwMDY0NFxuLS0tIGEvZnMvYWZzL2Rpcl9lZGl0LmNcbisrKyBiL2ZzL2Fmcy9kaXJfZWRpdC5jXG5AQCAtNDE1LDcgKzQxNSw3IEBAIHZvaWQgYWZzX2VkaXRfZGlyX3JlbW92ZShzdHJ1Y3QgYWZzX3Zub2RlICp2bm9kZSxcbiBcdGlmICghYWZzX2Rpcl9pbml0X2l0ZXIoXHUwMDI2aXRlciwgbmFtZSkpXG4gXHRcdHJldHVybjtcbiBcbi1cdG1ldGEgPSBhZnNfZGlyX2ZpbmRfYmxvY2soXHUwMDI2aXRlciwgMCk7XG4rXHRtZXRhID0gYWZzX2Rpcl9nZXRfYmxvY2soXHUwMDI2aXRlciwgMCk7XG4gXHRpZiAoIW1ldGEpXG4gXHRcdHJldHVybjtcbiBcbkBAIC00NDIsNyArNDQyLDcgQEAgdm9pZCBhZnNfZWRpdF9kaXJfcmVtb3ZlKHN0cnVjdCBhZnNfdm5vZGUgKnZub2RlLFxuIFx0LyogQ2hlY2sgYW5kIGNsZWFyIHRoZSBlbnRyeS4gKi9cbiBcdGRlID0gXHUwMDI2YmxvY2stXHUwMDNlZGlyZW50c1tzbG90XTtcbiBcdGlmIChkZS1cdTAwM2V1LnZhbGlkICE9IDEpXG4tXHRcdGdvdG8gZXJyb3JfdW5tYXA7XG4rXHRcdGdvdG8gZXJyb3I7XG4gXG4gXHR0cmFjZV9hZnNfZWRpdF9kaXIodm5vZGUsIHdoeSwgYWZzX2VkaXRfZGlyX2RlbGV0ZSwgYiwgc2xvdCxcbiBcdFx0XHQgICBudG9obChkZS1cdTAwM2V1LnZub2RlKSwgbnRvaGwoZGUtXHUwMDNldS51bmlxdWUpLFxuQEAgLTQ1OCw3ICs0NTgsNiBAQCB2b2lkIGFmc19lZGl0X2Rpcl9yZW1vdmUoc3RydWN0IGFmc192bm9kZSAqdm5vZGUsXG4gXHQvKiBDbGVhciB0aGUgY29uc3RpdHVlbnQgZW50cmllcy4gKi9cbiBcdG5leHQgPSBkZS1cdTAwM2V1Lmhhc2hfbmV4dDtcbiBcdG1lbXNldChkZSwgMCwgc2l6ZW9mKCpkZSkgKiBpdGVyLm5yX3Nsb3RzKTtcbi1cdGt1bm1hcF9sb2NhbChibG9jayk7XG4gXG4gXHQvKiBBZGp1c3QgdGhlIGhhc2ggY2hhaW46IGlmIGl0ZXItXHUwMDNlcHJldl9lbnRyeSBpcyAwLCB0aGUgaGFzaHRhYmxlIGhlYWRcbiBcdCAqIGluZGV4IGlzIHByZXZpb3VzOyBvdGhlcndpc2UgaXQncyBzbG90IG51bWJlciBvZiB0aGUgcHJldmlvdXMgZW50cnkuXG5AQCAtNDg1LDcgKzQ4NCw2IEBAIHZvaWQgYWZzX2VkaXRfZGlyX3JlbW92ZShzdHJ1Y3QgYWZzX3Zub2RlICp2bm9kZSxcbiBcdFx0cGRlID0gXHUwMDI2cGJsb2NrLVx1MDAzZWRpcmVudHNbcHNdO1xuIFx0XHRwcmV2X25leHQgPSBwZGUtXHUwMDNldS5oYXNoX25leHQ7XG4gXHRcdGlmIChwcmV2X25leHQgIT0gaHRvbnMoZW50cnkpKSB7XG4tXHRcdFx0a3VubWFwX2xvY2FsKHBibG9jayk7XG4gXHRcdFx0cHJfd2FybihcIiVsbHg6JWxseDoleDogbm90IHByZXYgaW4gY2hhaW4gYj0leCBwPSV4LCV4IGU9JXggJSpzXCIsXG4gXHRcdFx0XHR2bm9kZS1cdTAwM2VmaWQudmlkLCB2bm9kZS1cdTAwM2VmaWQudm5vZGUsIHZub2RlLVx1MDAzZWZpZC51bmlxdWUsXG4gXHRcdFx0XHRpdGVyLmJ1Y2tldCwgaXRlci5wcmV2X2VudHJ5LCBwcmV2X25leHQsIGVudHJ5LFxuQEAgLTQ5Myw3ICs0OTEsNiBAQCB2b2lkIGFmc19lZGl0X2Rpcl9yZW1vdmUoc3RydWN0IGFmc192bm9kZSAqdm5vZGUsXG4gXHRcdFx0Z290byBlcnJvcjtcbiBcdFx0fVxuIFx0XHRwZGUtXHUwMDNldS5oYXNoX25leHQgPSBuZXh0O1xuLVx0XHRrdW5tYXBfbG9jYWwocGJsb2NrKTtcbiBcdH1cbiBcbiBcdG5ldGZzX3NpbmdsZV9tYXJrX2lub2RlX2RpcnR5KFx1MDAyNnZub2RlLVx1MDAzZW5ldGZzLmlub2RlKTtcbkBAIC01MDMsMTggKzUwMCwxNiBAQCB2b2lkIGFmc19lZGl0X2Rpcl9yZW1vdmUoc3RydWN0IGFmc192bm9kZSAqdm5vZGUsXG4gXHRfZGVidWcoXCJSZW1vdmUgJXMgZnJvbSAldVsldV1cIiwgbmFtZS1cdTAwM2VuYW1lLCBiLCBzbG90KTtcbiBcbiBvdXRfdW5tYXA6XG4rXHRhZnNfZGlyX2VuZF9pdGVyKFx1MDAyNml0ZXIpO1xuIFx0a3VubWFwX2xvY2FsKG1ldGEpO1xuIFx0X2xlYXZlKFwiXCIpO1xuIFx0cmV0dXJuO1xuIFxuIGFscmVhZHlfaW52YWxpZGF0ZWQ6XG4tXHRrdW5tYXBfbG9jYWwoYmxvY2spO1xuIFx0dHJhY2VfYWZzX2VkaXRfZGlyKHZub2RlLCB3aHksIGFmc19lZGl0X2Rpcl9kZWxldGVfaW52YWwsXG4gXHRcdFx0ICAgMCwgMCwgMCwgMCwgbmFtZS1cdTAwM2VuYW1lKTtcbiBcdGdvdG8gb3V0X3VubWFwO1xuIFxuLWVycm9yX3VubWFwOlxuLVx0a3VubWFwX2xvY2FsKGJsb2NrKTtcbiBlcnJvcjpcbiBcdHRyYWNlX2Fmc19lZGl0X2Rpcih2bm9kZSwgd2h5LCBhZnNfZWRpdF9kaXJfZGVsZXRlX2Vycm9yLFxuIFx0XHRcdCAgIDAsIDAsIDAsIDAsIG5hbWUtXHUwMDNlbmFtZSk7XG5kaWZmIC0tZ2l0IGEvZnMvYWZzL2Rpcl9zZWFyY2guYyBiL2ZzL2Fmcy9kaXJfc2VhcmNoLmNcbmluZGV4IDEwNDQxMWMwNjkyZjU3Li4xMWViZGZmZmNiMWQzOCAxMDA2NDRcbi0tLSBhL2ZzL2Fmcy9kaXJfc2VhcmNoLmNcbisrKyBiL2ZzL2Fmcy9kaXJfc2VhcmNoLmNcbkBAIC03NSwxMCArNzUsNyBAQCB1bmlvbiBhZnNfeGRyX2Rpcl9ibG9jayAqYWZzX2Rpcl9maW5kX2Jsb2NrKHN0cnVjdCBhZnNfZGlyX2l0ZXIgKml0ZXIsIHNpemVfdCBibFxuIFxuIFx0X2VudGVyKFwiJXp4LCVkXCIsIGJsb2NrLCBzbG90KTtcbiBcbi1cdGlmIChpdGVyLVx1MDAzZWJsb2NrKSB7XG4tXHRcdGt1bm1hcF9sb2NhbChpdGVyLVx1MDAzZWJsb2NrKTtcbi1cdFx0aXRlci1cdTAwM2VibG9jayA9IE5VTEw7XG4tXHR9XG4rXHRhZnNfZGlyX2VuZF9pdGVyKGl0ZXIpO1xuIFxuIFx0aWYgKGR2bm9kZS1cdTAwM2VkaXJlY3Rvcnlfc2l6ZSBcdTAwM2MgYmxlbmQpXG4gXHRcdGdvdG8gZmFpbDtcbkBAIC0xNzMsMTIgKzE3MCw4IEBAIGludCBhZnNfZGlyX3NlYXJjaF9idWNrZXQoc3RydWN0IGFmc19kaXJfaXRlciAqaXRlciwgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsXG4gXG4gXHRyZXQgPSAtRU5PRU5UO1xuIGZvdW5kOlxuLVx0aWYgKGl0ZXItXHUwMDNlYmxvY2spIHtcbi1cdFx0a3VubWFwX2xvY2FsKGl0ZXItXHUwMDNlYmxvY2spO1xuLVx0XHRpdGVyLVx1MDAzZWJsb2NrID0gTlVMTDtcbi1cdH1cbi1cbiBiYWQ6XG4rXHRhZnNfZGlyX2VuZF9pdGVyKGl0ZXIpO1xuIFx0aWYgKHJldCA9PSAtRVNUQUxFKVxuIFx0XHRhZnNfaW52YWxpZGF0ZV9kaXIoaXRlci1cdTAwM2Vkdm5vZGUsIGFmc19kaXJfaW52YWxpZF9pdGVyX3N0YWxlKTtcbiBcdF9sZWF2ZShcIiA9ICVkXCIsIHJldCk7XG5kaWZmIC0tZ2l0IGEvZnMvYWZzL2ZpbGUuYyBiL2ZzL2Fmcy9maWxlLmNcbmluZGV4IDA0Njc3NDJiZmVlZTM0Li5iYTQ0NDkzY2NhZjZlZSAxMDA2NDRcbi0tLSBhL2ZzL2Fmcy9maWxlLmNcbisrKyBiL2ZzL2Fmcy9maWxlLmNcbkBAIC00OSw2ICs0OSw4IEBAIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGFmc19maWxlX2lub2RlX29wZXJhdGlvbnMgPSB7XG4gXHQuZ2V0YXR0clx0PSBhZnNfZ2V0YXR0cixcbiBcdC5zZXRhdHRyXHQ9IGFmc19zZXRhdHRyLFxuIFx0LnBlcm1pc3Npb25cdD0gYWZzX3Blcm1pc3Npb24sXG4rXHQuaXNfb3duZWRfYnlfbWVcdD0gYWZzX2lzX293bmVkX2J5X21lLFxuK1x0LmhhdmVfc2FtZV9vd25lciA9IGFmc19oYXZlX3NhbWVfb3duZXIsXG4gfTtcbiBcbiBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGFmc19maWxlX2FvcHMgPSB7XG5kaWZmIC0tZ2l0IGEvZnMvYWZzL2ZzY2xpZW50LmMgYi9mcy9hZnMvZnNjbGllbnQuY1xuaW5kZXggYTJmZmQ2MDg4OWY4OWQuLjFhM2YxODZhNmExMTNkIDEwMDY0NFxuLS0tIGEvZnMvYWZzL2ZzY2xpZW50LmNcbisrKyBiL2ZzL2Fmcy9mc2NsaWVudC5jXG5AQCAtNDc3LDYgKzQ3Nyw5IEBAIHZvaWQgYWZzX2ZzX2ZldGNoX2RhdGEoc3RydWN0IGFmc19vcGVyYXRpb24gKm9wKVxuIFx0aWYgKCFjYWxsKVxuIFx0XHRyZXR1cm4gYWZzX29wX25vbWVtKG9wKTtcbiBcbitcdGlmIChvcC1cdTAwM2VmbGFncyBcdTAwMjYgQUZTX09QRVJBVElPTl9BU1lOQylcbitcdFx0Y2FsbC1cdTAwM2Vhc3luYyA9IHRydWU7XG4rXG4gXHQvKiBtYXJzaGFsbCB0aGUgcGFyYW1ldGVycyAqL1xuIFx0YnAgPSBjYWxsLVx1MDAzZXJlcXVlc3Q7XG4gXHRicFswXSA9IGh0b25sKEZTRkVUQ0hEQVRBKTtcbkBAIC00ODQsNyArNDg3LDcgQEAgdm9pZCBhZnNfZnNfZmV0Y2hfZGF0YShzdHJ1Y3QgYWZzX29wZXJhdGlvbiAqb3ApXG4gXHRicFsyXSA9IGh0b25sKHZwLVx1MDAzZWZpZC52bm9kZSk7XG4gXHRicFszXSA9IGh0b25sKHZwLVx1MDAzZWZpZC51bmlxdWUpO1xuIFx0YnBbNF0gPSBodG9ubChsb3dlcl8zMl9iaXRzKHN1YnJlcS1cdTAwM2VzdGFydCArIHN1YnJlcS1cdTAwM2V0cmFuc2ZlcnJlZCkpO1xuLVx0YnBbNV0gPSBodG9ubChsb3dlcl8zMl9iaXRzKHN1YnJlcS1cdTAwM2VsZW4gICArIHN1YnJlcS1cdTAwM2V0cmFuc2ZlcnJlZCkpO1xuK1x0YnBbNV0gPSBodG9ubChsb3dlcl8zMl9iaXRzKHN1YnJlcS1cdTAwM2VsZW4gICAtIHN1YnJlcS1cdTAwM2V0cmFuc2ZlcnJlZCkpO1xuIFxuIFx0Y2FsbC1cdTAwM2VmaWQgPSB2cC1cdTAwM2VmaWQ7XG4gXHR0cmFjZV9hZnNfbWFrZV9mc19jYWxsKGNhbGwsIFx1MDAyNnZwLVx1MDAzZWZpZCk7XG5kaWZmIC0tZ2l0IGEvZnMvYWZzL2lub2RlLmMgYi9mcy9hZnMvaW5vZGUuY1xuaW5kZXggMTRmMzlhOWJlYTZjZmUuLmFmODVhODhkOTQzZGQxIDEwMDY0NFxuLS0tIGEvZnMvYWZzL2lub2RlLmNcbisrKyBiL2ZzL2Fmcy9pbm9kZS5jXG5AQCAtOTEsNiArOTEsNyBAQCBzdGF0aWMgaW50IGFmc19pbm9kZV9pbml0X2Zyb21fc3RhdHVzKHN0cnVjdCBhZnNfb3BlcmF0aW9uICpvcCxcbiBcdGlub2RlLVx1MDAzZWlfZmxhZ3MgfD0gU19OT0FUSU1FO1xuIFx0aW5vZGUtXHUwMDNlaV91aWQgPSBtYWtlX2t1aWQoXHUwMDI2aW5pdF91c2VyX25zLCBzdGF0dXMtXHUwMDNlb3duZXIpO1xuIFx0aW5vZGUtXHUwMDNlaV9naWQgPSBtYWtlX2tnaWQoXHUwMDI2aW5pdF91c2VyX25zLCBzdGF0dXMtXHUwMDNlZ3JvdXApO1xuK1x0aW5vZGUtXHUwMDNlaV9vcGZsYWdzIHw9IElPUF9PV05FUlNISVBfT1ZFUlJJREU7XG4gXHRzZXRfbmxpbmsoXHUwMDI2dm5vZGUtXHUwMDNlbmV0ZnMuaW5vZGUsIHN0YXR1cy1cdTAwM2VubGluayk7XG4gXG4gXHRpX3NpemVfd3JpdGUoaW5vZGUsIHN0YXR1cy1cdTAwM2VzaXplKTtcbmRpZmYgLS1naXQgYS9mcy9hZnMvaW50ZXJuYWwuaCBiL2ZzL2Fmcy9pbnRlcm5hbC5oXG5pbmRleCA2MDFmMDFlNWMxNWZjYy4uNDBlNWNlNjE5NDc2MjEgMTAwNjQ0XG4tLS0gYS9mcy9hZnMvaW50ZXJuYWwuaFxuKysrIGIvZnMvYWZzL2ludGVybmFsLmhcbkBAIC0xMTMzLDYgKzExMzMsMTQgQEAgaW50IGFmc19kaXJfc2VhcmNoX2J1Y2tldChzdHJ1Y3QgYWZzX2Rpcl9pdGVyICppdGVyLCBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSxcbiBpbnQgYWZzX2Rpcl9zZWFyY2goc3RydWN0IGFmc192bm9kZSAqZHZub2RlLCBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSxcbiBcdFx0ICAgc3RydWN0IGFmc19maWQgKl9maWQsIGFmc19kYXRhdmVyc2lvbl90ICpfZGlyX3ZlcnNpb24pO1xuIFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBhZnNfZGlyX2VuZF9pdGVyKHN0cnVjdCBhZnNfZGlyX2l0ZXIgKml0ZXIpXG4re1xuK1x0aWYgKGl0ZXItXHUwMDNlYmxvY2spIHtcbitcdFx0a3VubWFwX2xvY2FsKGl0ZXItXHUwMDNlYmxvY2spO1xuK1x0XHRpdGVyLVx1MDAzZWJsb2NrID0gTlVMTDtcbitcdH1cbit9XG4rXG4gLypcbiAgKiBkaXJfc2lsbHkuY1xuICAqL1xuQEAgLTE0MjEsNyArMTQyOSw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBhZnNfbWFrZV9vcF9jYWxsKHN0cnVjdCBhZnNfb3BlcmF0aW9uICpvcCwgc3RydWN0IGFmc19jYWxsICpjXG4ge1xuIFx0c3RydWN0IGFmc19hZGRyX2xpc3QgKmFsaXN0ID0gb3AtXHUwMDNlZXN0YXRlLVx1MDAzZWFkZHJlc3NlcztcbiBcbi1cdG9wLVx1MDAzZWNhbGxcdD0gY2FsbDtcbitcdG9wLVx1MDAzZWNhbGxcdD0gYWZzX2dldF9jYWxsKGNhbGwsIGFmc19jYWxsX3RyYWNlX2dldCk7XG4gXHRvcC1cdTAwM2V0eXBlXHQ9IGNhbGwtXHUwMDNldHlwZTtcbiBcdGNhbGwtXHUwMDNlb3BcdD0gb3A7XG4gXHRjYWxsLVx1MDAzZWtleVx0PSBvcC1cdTAwM2VrZXk7XG5AQCAtMTQyOSw2ICsxNDM3LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGFmc19tYWtlX29wX2NhbGwoc3RydWN0IGFmc19vcGVyYXRpb24gKm9wLCBzdHJ1Y3QgYWZzX2NhbGwgKmNcbiBcdGNhbGwtXHUwMDNlcGVlclx0PSByeHJwY19rZXJuZWxfZ2V0X3BlZXIoYWxpc3QtXHUwMDNlYWRkcnNbb3AtXHUwMDNlYWRkcl9pbmRleF0ucGVlcik7XG4gXHRjYWxsLVx1MDAzZXNlcnZpY2VfaWQgPSBvcC1cdTAwM2VzZXJ2ZXItXHUwMDNlc2VydmljZV9pZDtcbiBcdGFmc19tYWtlX2NhbGwoY2FsbCwgZ2ZwKTtcbitcdGFmc19wdXRfY2FsbChjYWxsKTtcbiB9XG4gXG4gc3RhdGljIGlubGluZSB2b2lkIGFmc19leHRyYWN0X2JlZ2luKHN0cnVjdCBhZnNfY2FsbCAqY2FsbCwgdm9pZCAqYnVmLCBzaXplX3Qgc2l6ZSlcbkBAIC0xNTMwLDYgKzE1MzksOSBAQCBleHRlcm4gc3RydWN0IGtleSAqYWZzX3JlcXVlc3Rfa2V5KHN0cnVjdCBhZnNfY2VsbCAqKTtcbiBleHRlcm4gc3RydWN0IGtleSAqYWZzX3JlcXVlc3Rfa2V5X3JjdShzdHJ1Y3QgYWZzX2NlbGwgKik7XG4gZXh0ZXJuIGludCBhZnNfY2hlY2tfcGVybWl0KHN0cnVjdCBhZnNfdm5vZGUgKiwgc3RydWN0IGtleSAqLCBhZnNfYWNjZXNzX3QgKik7XG4gZXh0ZXJuIGludCBhZnNfcGVybWlzc2lvbihzdHJ1Y3QgbW50X2lkbWFwICosIHN0cnVjdCBpbm9kZSAqLCBpbnQpO1xuK2ludCBhZnNfaXNfb3duZWRfYnlfbWUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xuK2ludCBhZnNfaGF2ZV9zYW1lX293bmVyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlMSxcbitcdFx0XHRzdHJ1Y3QgaW5vZGUgKmlub2RlMik7XG4gZXh0ZXJuIHZvaWQgX19leGl0IGFmc19jbGVhbl91cF9wZXJtaXRfY2FjaGUodm9pZCk7XG4gXG4gLypcbmRpZmYgLS1naXQgYS9mcy9hZnMvc2VjdXJpdHkuYyBiL2ZzL2Fmcy9zZWN1cml0eS5jXG5pbmRleCA2ZDAwZDYyYTY1ZWRmNi4uNzA5MmY1YWNkY2Q2YWMgMTAwNjQ0XG4tLS0gYS9mcy9hZnMvc2VjdXJpdHkuY1xuKysrIGIvZnMvYWZzL3NlY3VyaXR5LmNcbkBAIC01MTAsNiArNTEwLDUyIEBAIGludCBhZnNfcGVybWlzc2lvbihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuKy8qXG4rICogRGV0ZXJtaW5lIGlmIGFuIGlub2RlIGlzIG93bmVkIGJ5ICdtZScgLSB3aGF0ZXZlciB0aGF0IG1lYW5zIGZvciB0aGVcbisgKiBmaWxlc3lzdGVtLiAgSW4gdGhlIGNhc2Ugb2YgQUZTLCB0aGlzIG1lYW5zIHRoYXQgdGhlIGZpbGUgaXMgb3duZWQgYnkgdGhlXG4rICogQUZTIHVzZXIgcmVwcmVzZW50ZWQgYnkgdGhlIFJ4IFNlY3VyaXR5IENsYXNzIHRva2VuIGhlbGQgaW4gYSBrZXkuICBSZXR1cm5zXG4rICogMCBpZiBvd25lZCBieSBtZSwgMSBpZiBub3Q7IGNhbiBhbHNvIHJldHVybiBhbiBlcnJvci5cbisgKi9cbitpbnQgYWZzX2lzX293bmVkX2J5X21lKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuK3tcbitcdHN0cnVjdCBhZnNfdm5vZGUgKnZub2RlID0gQUZTX0ZTX0koaW5vZGUpO1xuK1x0YWZzX2FjY2Vzc190IGFjY2VzcztcbitcdHN0cnVjdCBrZXkgKmtleTtcbitcdGludCByZXQ7XG4rXG4rXHRpZiAoU19JU0RJUihpbm9kZS1cdTAwM2VpX21vZGUpKVxuK1x0XHRyZXR1cm4gMTsgLyogVGhlIEFETUlOIHJpZ2h0IGNoZWNrIGRvZXNuJ3Qgd29yayBmb3IgZGlyZWN0b3JpZXMuICovXG4rXG4rXHRrZXkgPSBhZnNfcmVxdWVzdF9rZXkodm5vZGUtXHUwMDNldm9sdW1lLVx1MDAzZWNlbGwpO1xuK1x0aWYgKElTX0VSUihrZXkpKVxuK1x0XHRyZXR1cm4gUFRSX0VSUihrZXkpO1xuK1xuK1x0LyogR2V0IHRoZSBhY2Nlc3MgcmlnaHRzIGZvciB0aGUga2V5IG9uIHRoaXMgZmlsZS4gKi9cbitcdHJldCA9IGFmc19jaGVja19wZXJtaXQodm5vZGUsIGtleSwgXHUwMDI2YWNjZXNzKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyb3I7XG4rXG4rXHQvKiBXZSBnZXQgdGhlIEFETUlOSVNURVIgYml0IGlmIHdlIG93biB0aGUgZmlsZS4gKi9cbitcdHJldCA9IChhY2Nlc3MgXHUwMDI2IEFGU19BQ0VfQURNSU5JU1RFUikgPyAwIDogMTtcbitlcnJvcjpcbitcdGtleV9wdXQoa2V5KTtcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuKy8qXG4rICogRGV0ZXJtaW5lIGlmIGEgZmlsZSBoYXMgdGhlIHNhbWUgb3duZXIgYXMgaXRzIHBhcmVudCAtIHdoYXRldmVyIHRoYXQgbWVhbnNcbisgKiBmb3IgdGhlIGZpbGVzeXN0ZW0uICBJbiB0aGUgY2FzZSBvZiBBRlMsIHRoaXMgbWVhbnMgY29tcGFyaW5nIHRoZWlyIEFGU1xuKyAqIFVJRHMuICBSZXR1cm5zIDAgaWYgc2FtZSwgMSBpZiBub3Qgc2FtZTsgY2FuIGFsc28gcmV0dXJuIGFuIGVycm9yLlxuKyAqL1xuK2ludCBhZnNfaGF2ZV9zYW1lX293bmVyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlMSxcbitcdFx0XHRzdHJ1Y3QgaW5vZGUgKmlub2RlMilcbit7XG4rXHRjb25zdCBzdHJ1Y3QgYWZzX3Zub2RlICp2bm9kZTEgPSBBRlNfRlNfSShpbm9kZTEpO1xuK1x0Y29uc3Qgc3RydWN0IGFmc192bm9kZSAqdm5vZGUyID0gQUZTX0ZTX0koaW5vZGUyKTtcbitcbitcdHJldHVybiB2bm9kZTEtXHUwMDNlc3RhdHVzLm93bmVyICE9IHZub2RlMi1cdTAwM2VzdGF0dXMub3duZXI7XG4rfVxuK1xuIHZvaWQgX19leGl0IGFmc19jbGVhbl91cF9wZXJtaXRfY2FjaGUodm9pZClcbiB7XG4gXHRpbnQgaTtcbmRpZmYgLS1naXQgYS9mcy9hdHRyLmMgYi9mcy9hdHRyLmNcbmluZGV4IDRmNDM3ZmFiYjdmMGY1Li5iN2U4YjVkNDlhOWZlNiAxMDA2NDRcbi0tLSBhL2ZzL2F0dHIuY1xuKysrIGIvZnMvYXR0ci5jXG5AQCAtMTYsNiArMTYsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZjbnRsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9maWxlbG9jay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2VjdXJpdHkuaFx1MDAzZVxuKyNpbmNsdWRlIFwiaW50ZXJuYWwuaFwiXG4gXG4gLyoqXG4gICogc2V0YXR0cl9zaG91bGRfZHJvcF9zZ2lkIC0gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIHNldGdpZCBiaXQgbmVlZHMgdG8gYmVcbkBAIC05MSwxOSArOTIsMjEgQEAgRVhQT1JUX1NZTUJPTChzZXRhdHRyX3Nob3VsZF9kcm9wX3N1aWRnaWQpO1xuICAqIHBlcm1pc3Npb25zLiBPbiBub24taWRtYXBwZWQgbW91bnRzIG9yIGlmIHBlcm1pc3Npb24gY2hlY2tpbmcgaXMgdG8gYmVcbiAgKiBwZXJmb3JtZWQgb24gdGhlIHJhdyBpbm9kZSBzaW1wbHkgcGFzcyBAbm9wX21udF9pZG1hcC5cbiAgKi9cbi1zdGF0aWMgYm9vbCBjaG93bl9vayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbi1cdFx0ICAgICBjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCB2ZnN1aWRfdCBpYV92ZnN1aWQpXG4rc3RhdGljIGludCBjaG93bl9vayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbitcdFx0ICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsIHZmc3VpZF90IGlhX3Zmc3VpZClcbiB7XG4gXHR2ZnN1aWRfdCB2ZnN1aWQgPSBpX3VpZF9pbnRvX3Zmc3VpZChpZG1hcCwgaW5vZGUpO1xuLVx0aWYgKHZmc3VpZF9lcV9rdWlkKHZmc3VpZCwgY3VycmVudF9mc3VpZCgpKSBcdTAwMjZcdTAwMjZcbi1cdCAgICB2ZnN1aWRfZXEoaWFfdmZzdWlkLCB2ZnN1aWQpKVxuLVx0XHRyZXR1cm4gdHJ1ZTtcbitcdGludCByZXQ7XG4rXG4rXHRyZXQgPSB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWUoaWRtYXAsIGlub2RlKTtcbitcdGlmIChyZXQgXHUwMDNjPSAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuIFx0aWYgKGNhcGFibGVfd3J0X2lub2RlX3VpZGdpZChpZG1hcCwgaW5vZGUsIENBUF9DSE9XTikpXG4tXHRcdHJldHVybiB0cnVlO1xuK1x0XHRyZXR1cm4gMDtcbiBcdGlmICghdmZzdWlkX3ZhbGlkKHZmc3VpZCkgXHUwMDI2XHUwMDI2XG4gXHQgICAgbnNfY2FwYWJsZShpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfdXNlcl9ucywgQ0FQX0NIT1dOKSlcbi1cdFx0cmV0dXJuIHRydWU7XG4tXHRyZXR1cm4gZmFsc2U7XG4rXHRcdHJldHVybiAwO1xuK1x0cmV0dXJuIC1FUEVSTTtcbiB9XG4gXG4gLyoqXG5AQCAtMTE4LDIzICsxMjEsMjcgQEAgc3RhdGljIGJvb2wgY2hvd25fb2soc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4gICogcGVybWlzc2lvbnMuIE9uIG5vbi1pZG1hcHBlZCBtb3VudHMgb3IgaWYgcGVybWlzc2lvbiBjaGVja2luZyBpcyB0byBiZVxuICAqIHBlcmZvcm1lZCBvbiB0aGUgcmF3IGlub2RlIHNpbXBseSBwYXNzIEBub3BfbW50X2lkbWFwLlxuICAqL1xuLXN0YXRpYyBib29sIGNoZ3JwX29rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuLVx0XHQgICAgIGNvbnN0IHN0cnVjdCBpbm9kZSAqaW5vZGUsIHZmc2dpZF90IGlhX3Zmc2dpZClcbitzdGF0aWMgaW50IGNoZ3JwX29rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuK1x0XHQgICAgc3RydWN0IGlub2RlICppbm9kZSwgdmZzZ2lkX3QgaWFfdmZzZ2lkKVxuIHtcbiBcdHZmc2dpZF90IHZmc2dpZCA9IGlfZ2lkX2ludG9fdmZzZ2lkKGlkbWFwLCBpbm9kZSk7XG4tXHR2ZnN1aWRfdCB2ZnN1aWQgPSBpX3VpZF9pbnRvX3Zmc3VpZChpZG1hcCwgaW5vZGUpO1xuLVx0aWYgKHZmc3VpZF9lcV9rdWlkKHZmc3VpZCwgY3VycmVudF9mc3VpZCgpKSkge1xuK1x0aW50IHJldDtcbitcbitcdHJldCA9IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShpZG1hcCwgaW5vZGUpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcdGlmIChyZXQgPT0gMCkge1xuIFx0XHRpZiAodmZzZ2lkX2VxKGlhX3Zmc2dpZCwgdmZzZ2lkKSlcbi1cdFx0XHRyZXR1cm4gdHJ1ZTtcbitcdFx0XHRyZXR1cm4gMDtcbiBcdFx0aWYgKHZmc2dpZF9pbl9ncm91cF9wKGlhX3Zmc2dpZCkpXG4tXHRcdFx0cmV0dXJuIHRydWU7XG4rXHRcdFx0cmV0dXJuIDA7XG4gXHR9XG4gXHRpZiAoY2FwYWJsZV93cnRfaW5vZGVfdWlkZ2lkKGlkbWFwLCBpbm9kZSwgQ0FQX0NIT1dOKSlcbi1cdFx0cmV0dXJuIHRydWU7XG4rXHRcdHJldHVybiAwO1xuIFx0aWYgKCF2ZnNnaWRfdmFsaWQodmZzZ2lkKSBcdTAwMjZcdTAwMjZcbiBcdCAgICBuc19jYXBhYmxlKGlub2RlLVx1MDAzZWlfc2ItXHUwMDNlc191c2VyX25zLCBDQVBfQ0hPV04pKVxuLVx0XHRyZXR1cm4gdHJ1ZTtcbi1cdHJldHVybiBmYWxzZTtcbitcdFx0cmV0dXJuIDA7XG4rXHRyZXR1cm4gLUVQRVJNO1xuIH1cbiBcbiAvKipcbkBAIC0xNjMsNiArMTcwLDcgQEAgaW50IHNldGF0dHJfcHJlcGFyZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuIHtcbiBcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkX2lub2RlKGRlbnRyeSk7XG4gXHR1bnNpZ25lZCBpbnQgaWFfdmFsaWQgPSBhdHRyLVx1MDAzZWlhX3ZhbGlkO1xuK1x0aW50IHJldDtcbiBcbiBcdC8qXG4gXHQgKiBGaXJzdCBjaGVjayBzaXplIGNvbnN0cmFpbnRzLiAgVGhlc2UgY2FuJ3QgYmUgb3ZlcnJpZGRlbiB1c2luZ1xuQEAgLTE4OSwxNCArMTk3LDE4IEBAIGludCBzZXRhdHRyX3ByZXBhcmUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbiBcdFx0Z290byBraWxsX3ByaXY7XG4gXG4gXHQvKiBNYWtlIHN1cmUgYSBjYWxsZXIgY2FuIGNob3duLiAqL1xuLVx0aWYgKChpYV92YWxpZCBcdTAwMjYgQVRUUl9VSUQpIFx1MDAyNlx1MDAyNlxuLVx0ICAgICFjaG93bl9vayhpZG1hcCwgaW5vZGUsIGF0dHItXHUwMDNlaWFfdmZzdWlkKSlcbi1cdFx0cmV0dXJuIC1FUEVSTTtcbitcdGlmIChpYV92YWxpZCBcdTAwMjYgQVRUUl9VSUQpIHtcbitcdFx0cmV0ID0gY2hvd25fb2soaWRtYXAsIGlub2RlLCBhdHRyLVx1MDAzZWlhX3Zmc3VpZCk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcdH1cbiBcbiBcdC8qIE1ha2Ugc3VyZSBjYWxsZXIgY2FuIGNoZ3JwLiAqL1xuLVx0aWYgKChpYV92YWxpZCBcdTAwMjYgQVRUUl9HSUQpIFx1MDAyNlx1MDAyNlxuLVx0ICAgICFjaGdycF9vayhpZG1hcCwgaW5vZGUsIGF0dHItXHUwMDNlaWFfdmZzZ2lkKSlcbi1cdFx0cmV0dXJuIC1FUEVSTTtcbitcdGlmIChpYV92YWxpZCBcdTAwMjYgQVRUUl9HSUQpIHtcbitcdFx0cmV0ID0gY2hncnBfb2soaWRtYXAsIGlub2RlLCBhdHRyLVx1MDAzZWlhX3Zmc2dpZCk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcdH1cbiBcbiBcdC8qIE1ha2Ugc3VyZSBhIGNhbGxlciBjYW4gY2htb2QuICovXG4gXHRpZiAoaWFfdmFsaWQgXHUwMDI2IEFUVFJfTU9ERSkge1xuZGlmZiAtLWdpdCBhL2ZzL2NvcmVkdW1wLmMgYi9mcy9jb3JlZHVtcC5jXG5pbmRleCBlNjhhNzZmZjkyYTM4Ni4uM2YzMmU3M2FhZWRhMjggMTAwNjQ0XG4tLS0gYS9mcy9jb3JlZHVtcC5jXG4rKysgYi9mcy9jb3JlZHVtcC5jXG5AQCAtOTU0LDcgKzk1NCw3IEBAIHN0YXRpYyBib29sIGNvcmVkdW1wX2ZpbGUoc3RydWN0IGNvcmVfbmFtZSAqY24sIHN0cnVjdCBjb3JlZHVtcF9wYXJhbXMgKmNwcm0sXG4gXHQgKiBmaWxlc3lzdGVtLlxuIFx0ICovXG4gXHRpZG1hcCA9IGZpbGVfbW50X2lkbWFwKGZpbGUpO1xuLVx0aWYgKCF2ZnN1aWRfZXFfa3VpZChpX3VpZF9pbnRvX3Zmc3VpZChpZG1hcCwgaW5vZGUpLCBjdXJyZW50X2ZzdWlkKCkpKSB7XG4rXHRpZiAodmZzX2lub2RlX2lzX293bmVkX2J5X21lKGlkbWFwLCBpbm9kZSkgIT0gMCkge1xuIFx0XHRjb3JlZHVtcF9yZXBvcnRfZmFpbHVyZShcIkNvcmUgZHVtcCB0byAlcyBhYm9ydGVkOiBjYW5ub3QgcHJlc2VydmUgZmlsZSBvd25lclwiLCBjbi1cdTAwM2Vjb3JlbmFtZSk7XG4gXHRcdHJldHVybiBmYWxzZTtcbiBcdH1cbmRpZmYgLS1naXQgYS9mcy9pbm9kZS5jIGIvZnMvaW5vZGUuY1xuaW5kZXggMzFjNWI5ZWUzYTgxZGYuLmE3ZWM4MzBhYjY4M2YwIDEwMDY0NFxuLS0tIGEvZnMvaW5vZGUuY1xuKysrIGIvZnMvaW5vZGUuY1xuQEAgLTI3NTAsMTYgKzI3NTAsMTkgQEAgRVhQT1JUX1NZTUJPTChpbm9kZV9pbml0X293bmVyKTtcbiAgKiBPbiBub24taWRtYXBwZWQgbW91bnRzIG9yIGlmIHBlcm1pc3Npb24gY2hlY2tpbmcgaXMgdG8gYmUgcGVyZm9ybWVkIG9uIHRoZVxuICAqIHJhdyBpbm9kZSBzaW1wbHkgcGFzcyBAbm9wX21udF9pZG1hcC5cbiAgKi9cbi1ib29sIGlub2RlX293bmVyX29yX2NhcGFibGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4tXHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4rYm9vbCBpbm9kZV9vd25lcl9vcl9jYXBhYmxlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIHtcbiBcdHZmc3VpZF90IHZmc3VpZDtcbiBcdHN0cnVjdCB1c2VyX25hbWVzcGFjZSAqbnM7XG4rXHRpbnQgcmV0O1xuIFxuLVx0dmZzdWlkID0gaV91aWRfaW50b192ZnN1aWQoaWRtYXAsIGlub2RlKTtcbi1cdGlmICh2ZnN1aWRfZXFfa3VpZCh2ZnN1aWQsIGN1cnJlbnRfZnN1aWQoKSkpXG4rXHRyZXQgPSB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWUoaWRtYXAsIGlub2RlKTtcbitcdGlmIChyZXQgPT0gMClcbiBcdFx0cmV0dXJuIHRydWU7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4gXG4rXHR2ZnN1aWQgPSBpX3VpZF9pbnRvX3Zmc3VpZChpZG1hcCwgaW5vZGUpO1xuIFx0bnMgPSBjdXJyZW50X3VzZXJfbnMoKTtcbiBcdGlmICh2ZnN1aWRfaGFzX21hcHBpbmcobnMsIHZmc3VpZCkgXHUwMDI2XHUwMDI2IG5zX2NhcGFibGUobnMsIENBUF9GT1dORVIpKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbmRpZmYgLS1naXQgYS9mcy9pbnRlcm5hbC5oIGIvZnMvaW50ZXJuYWwuaFxuaW5kZXggMzU1ZDkzZjkyMjA4NjEuLmJlNDVjYzYzODg2MTkyIDEwMDY0NFxuLS0tIGEvZnMvaW50ZXJuYWwuaFxuKysrIGIvZnMvaW50ZXJuYWwuaFxuQEAgLTUxLDYgKzUxLDcgQEAgZXh0ZXJuIGludCBmaW5pc2hfY2xlYW5fY29udGV4dChzdHJ1Y3QgZnNfY29udGV4dCAqZmMpO1xuIC8qXG4gICogbmFtZWkuY1xuICAqL1xuK2ludCB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xuIGV4dGVybiBpbnQgZmlsZW5hbWVfbG9va3VwKGludCBkZmQsIHN0cnVjdCBmaWxlbmFtZSAqbmFtZSwgdW5zaWduZWQgZmxhZ3MsXG4gXHRcdFx0ICAgc3RydWN0IHBhdGggKnBhdGgsIGNvbnN0IHN0cnVjdCBwYXRoICpyb290KTtcbiBpbnQgZmlsZW5hbWVfcm1kaXIoaW50IGRmZCwgc3RydWN0IGZpbGVuYW1lICpuYW1lKTtcbmRpZmYgLS1naXQgYS9mcy9sb2Nrcy5jIGIvZnMvbG9ja3MuY1xuaW5kZXggNmU0ZmY3ZmNlYzA1M2UuLjAyZjgxMGRjOWU3ZTdhIDEwMDY0NFxuLS0tIGEvZnMvbG9ja3MuY1xuKysrIGIvZnMvbG9ja3MuY1xuQEAgLTY4LDYgKzY4LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2N0cmFjZS9ldmVudHMvZmlsZWxvY2suaFx1MDAzZVxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3VhY2Nlc3MuaFx1MDAzZVxuKyNpbmNsdWRlIFwiaW50ZXJuYWwuaFwiXG4gXG4gc3RhdGljIHN0cnVjdCBmaWxlX2xvY2sgKmZpbGVfbG9jayhzdHJ1Y3QgZmlsZV9sb2NrX2NvcmUgKmZsYylcbiB7XG5AQCAtMjEzNiwxMCArMjEzNywxMiBAQCBpbnRcbiB2ZnNfc2V0bGVhc2Uoc3RydWN0IGZpbGUgKmZpbHAsIGludCBhcmcsIHN0cnVjdCBmaWxlX2xlYXNlICoqbGVhc2UsIHZvaWQgKipwcml2KVxuIHtcbiBcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlX2lub2RlKGZpbHApO1xuLVx0dmZzdWlkX3QgdmZzdWlkID0gaV91aWRfaW50b192ZnN1aWQoZmlsZV9tbnRfaWRtYXAoZmlscCksIGlub2RlKTtcbiBcdGludCBlcnJvcjtcbiBcbi1cdGlmICgoIXZmc3VpZF9lcV9rdWlkKHZmc3VpZCwgY3VycmVudF9mc3VpZCgpKSkgXHUwMDI2XHUwMDI2ICFjYXBhYmxlKENBUF9MRUFTRSkpXG4rXHRlcnJvciA9IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShmaWxlX21udF9pZG1hcChmaWxwKSwgaW5vZGUpO1xuK1x0aWYgKGVycm9yIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gZXJyb3I7XG4rXHRpZiAoZXJyb3IgIT0gMCBcdTAwMjZcdTAwMjYgIWNhcGFibGUoQ0FQX0xFQVNFKSlcbiBcdFx0cmV0dXJuIC1FQUNDRVM7XG4gXHRlcnJvciA9IHNlY3VyaXR5X2ZpbGVfbG9jayhmaWxwLCBhcmcpO1xuIFx0aWYgKGVycm9yKVxuZGlmZiAtLWdpdCBhL2ZzL25hbWVpLmMgYi9mcy9uYW1laS5jXG5pbmRleCAxOWNlNDNjOWE2ZTY2Mi4uNzJmOTRkMjA0ZjkzZjQgMTAwNjQ0XG4tLS0gYS9mcy9uYW1laS5jXG4rKysgYi9mcy9uYW1laS5jXG5AQCAtNTUsOCArNTUsOCBAQFxuICAqIFRoZSBuZXcgY29kZSByZXBsYWNlcyB0aGUgb2xkIHJlY3Vyc2l2ZSBzeW1saW5rIHJlc29sdXRpb24gd2l0aFxuICAqIGFuIGl0ZXJhdGl2ZSBvbmUgKGluIGNhc2Ugb2Ygbm9uLW5lc3RlZCBzeW1saW5rIGNoYWlucykuICBJdCBkb2VzXG4gICogdGhpcyB3aXRoIGNhbGxzIHRvIFx1MDAzY2ZzXHUwMDNlX2ZvbGxvd19saW5rKCkuXG4tICogQXMgYSBzaWRlIGVmZmVjdCwgZGlyX25hbWVpKCksIF9uYW1laSgpIGFuZCBmb2xsb3dfbGluaygpIGFyZSBub3cgXG4tICogcmVwbGFjZWQgd2l0aCBhIHNpbmdsZSBmdW5jdGlvbiBsb29rdXBfZGVudHJ5KCkgdGhhdCBjYW4gaGFuZGxlIGFsbCBcbisgKiBBcyBhIHNpZGUgZWZmZWN0LCBkaXJfbmFtZWkoKSwgX25hbWVpKCkgYW5kIGZvbGxvd19saW5rKCkgYXJlIG5vd1xuKyAqIHJlcGxhY2VkIHdpdGggYSBzaW5nbGUgZnVuY3Rpb24gbG9va3VwX2RlbnRyeSgpIHRoYXQgY2FuIGhhbmRsZSBhbGxcbiAgKiB0aGUgc3BlY2lhbCBjYXNlcyBvZiB0aGUgZm9ybWVyIGNvZGUuXG4gICpcbiAgKiBXaXRoIHRoZSBuZXcgZGNhY2hlLCB0aGUgcGF0aG5hbWUgaXMgc3RvcmVkIGF0IGVhY2ggaW5vZGUsIGF0IGxlYXN0IGFzXG5AQCAtMTI1NSw2ICsxMjU1LDcyIEBAIGZzX2luaXRjYWxsKGluaXRfZnNfbmFtZWlfc3lzY3Rscyk7XG4gXG4gI2VuZGlmIC8qIENPTkZJR19TWVNDVEwgKi9cbiBcbisvKlxuKyAqIERldGVybWluZSBpZiBhbiBpbm9kZSBpcyBvd25lZCBieSB0aGUgcHJvY2VzcyAoYWxsb3dpbmcgZm9yIGZzdWlkIG92ZXJyaWRlKSxcbisgKiByZXR1cm5pbmcgMCBpZiBzbywgMSBpZiBub3QgYW5kIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBpZiB0aGVyZSB3YXMgYSBwcm9ibGVtXG4rICogbWFraW5nIHRoZSBkZXRlcm1pbmF0aW9uLlxuKyAqL1xuK2ludCB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4re1xuK1x0aWYgKHVubGlrZWx5KGlub2RlLVx1MDAzZWlfb3BmbGFncyBcdTAwMjYgSU9QX09XTkVSU0hJUF9PVkVSUklERSkpXG4rXHRcdHJldHVybiBpbm9kZS1cdTAwM2VpX29wLVx1MDAzZWlzX293bmVkX2J5X21lKGlkbWFwLCBpbm9kZSk7XG4rXHRpZiAodmZzdWlkX2VxX2t1aWQoaV91aWRfaW50b192ZnN1aWQoaWRtYXAsIGlub2RlKSwgY3VycmVudF9mc3VpZCgpKSlcbitcdFx0cmV0dXJuIDA7XG4rXHRyZXR1cm4gMTsgLyogTm90IHNhbWUuICovXG4rfVxuK1xuKy8qXG4rICogRGV0ZXJtaW5lIGlmIGFuIGlub2RlIGhhcyB0aGUgc2FtZSBvd25lciBhcyBpdHMgcGFyZW50IGRpcmVjdG9yeSwgcmV0dXJuaW5nXG4rICogMCBpZiBzbywgMSBpZiBub3QgYW5kIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBpZiB0aGVyZSB3YXMgYSBwcm9ibGVtIG1ha2luZ1xuKyAqIHRoZSBkZXRlcm1pbmF0aW9uLlxuKyAqL1xuK3N0YXRpYyBpbnQgdmZzX2lub2RlX2FuZF9kaXJfaGF2ZV9zYW1lX293bmVyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuK1x0XHRcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBuYW1laWRhdGEgKm5kKVxuK3tcbitcdGlmICh1bmxpa2VseShpbm9kZS1cdTAwM2VpX29wZmxhZ3MgXHUwMDI2IElPUF9PV05FUlNISVBfT1ZFUlJJREUpKSB7XG4rXHRcdHN0cnVjdCBkZW50cnkgKnBhcmVudDtcbitcdFx0c3RydWN0IGlub2RlICpkaXI7XG4rXHRcdGludCByZXQ7XG4rXG4rXHRcdGlmIChpbm9kZSAhPSBuZC1cdTAwM2Vpbm9kZSkge1xuK1x0XHRcdGRpciA9IG5kLVx1MDAzZWlub2RlO1xuK1x0XHRcdHJldCA9IGlub2RlLVx1MDAzZWlfb3AtXHUwMDNlaGF2ZV9zYW1lX293bmVyKGlkbWFwLCBpbm9kZSwgZGlyKTtcbitcdFx0fSBlbHNlIGlmIChuZC1cdTAwM2VmbGFncyBcdTAwMjYgTE9PS1VQX1JDVSkge1xuK1x0XHRcdHBhcmVudCA9IFJFQURfT05DRShuZC1cdTAwM2VwYXRoLmRlbnRyeSk7XG4rXHRcdFx0ZGlyID0gUkVBRF9PTkNFKHBhcmVudC1cdTAwM2VkX2lub2RlKTtcbitcdFx0XHRpZiAoIWRpcilcbitcdFx0XHRcdHJldHVybiAtRUNISUxEO1xuK1x0XHRcdHJldCA9IGlub2RlLVx1MDAzZWlfb3AtXHUwMDNlaGF2ZV9zYW1lX293bmVyKGlkbWFwLCBpbm9kZSwgZGlyKTtcbitcdFx0fSBlbHNlIHtcbitcdFx0XHRwYXJlbnQgPSBkZ2V0X3BhcmVudChuZC1cdTAwM2VwYXRoLmRlbnRyeSk7XG4rXHRcdFx0ZGlyID0gcGFyZW50LVx1MDAzZWRfaW5vZGU7XG4rXHRcdFx0cmV0ID0gaW5vZGUtXHUwMDNlaV9vcC1cdTAwM2VoYXZlX3NhbWVfb3duZXIoaWRtYXAsIGlub2RlLCBkaXIpO1xuK1x0XHRcdGRwdXQocGFyZW50KTtcbitcdFx0fVxuK1x0XHRyZXR1cm4gcmV0O1xuK1x0fVxuK1xuK1x0aWYgKHZmc3VpZF92YWxpZChuZC1cdTAwM2VkaXJfdmZzdWlkKSBcdTAwMjZcdTAwMjZcbitcdCAgICB2ZnN1aWRfZXEoaV91aWRfaW50b192ZnN1aWQoaWRtYXAsIGlub2RlKSwgbmQtXHUwMDNlZGlyX3Zmc3VpZCkpXG4rXHRcdHJldHVybiAwO1xuK1x0cmV0dXJuIDE7IC8qIE5vdCBzYW1lLiAqL1xuK31cbitcbisvKlxuKyAqIERldGVybWluZSBpZiB0d28gaW5vZGVzIGhhdmUgdGhlIHNhbWUgb3duZXIsIHJldHVybmluZyAwIGlmIHNvLCAxIGlmIG5vdCBhbmRcbisgKiBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgaWYgdGhlcmUgd2FzIGEgcHJvYmxlbSBtYWtpbmcgdGhlIGRldGVybWluYXRpb24uXG4rICovXG4rc3RhdGljIGludCB2ZnNfaW5vZGVzX2hhdmVfc2FtZV9vd25lcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSxcbitcdFx0XHRcdCAgICAgIHN0cnVjdCBpbm9kZSAqZGlyKVxuK3tcbitcdGlmICh1bmxpa2VseShpbm9kZS1cdTAwM2VpX29wZmxhZ3MgXHUwMDI2IElPUF9PV05FUlNISVBfT1ZFUlJJREUpKVxuK1x0XHRyZXR1cm4gaW5vZGUtXHUwMDNlaV9vcC1cdTAwM2VoYXZlX3NhbWVfb3duZXIoaWRtYXAsIGlub2RlLCBkaXIpO1xuK1x0aWYgKHZmc3VpZF9lcShpX3VpZF9pbnRvX3Zmc3VpZChpZG1hcCwgaW5vZGUpLFxuK1x0XHQgICAgICBpX3VpZF9pbnRvX3Zmc3VpZChpZG1hcCwgZGlyKSkpXG4rXHRcdHJldHVybiAwO1xuK1x0cmV0dXJuIDE7IC8qIE5vdCBzYW1lLiAqL1xuK31cbitcbiAvKipcbiAgKiBtYXlfZm9sbG93X2xpbmsgLSBDaGVjayBzeW1saW5rIGZvbGxvd2luZyBmb3IgdW5zYWZlIHNpdHVhdGlvbnNcbiAgKiBAbmQ6IG5hbWVpZGF0YSBwYXRod2FsayBkYXRhXG5AQCAtMTI3MSwyNyArMTMzNywyOCBAQCBmc19pbml0Y2FsbChpbml0X2ZzX25hbWVpX3N5c2N0bHMpO1xuICAqXG4gICogUmV0dXJucyAwIGlmIGZvbGxvd2luZyB0aGUgc3ltbGluayBpcyBhbGxvd2VkLCAtdmUgb24gZXJyb3IuXG4gICovXG4tc3RhdGljIGlubGluZSBpbnQgbWF5X2ZvbGxvd19saW5rKHN0cnVjdCBuYW1laWRhdGEgKm5kLCBjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuK3N0YXRpYyBpbmxpbmUgaW50IG1heV9mb2xsb3dfbGluayhzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgc3RydWN0IGlub2RlICppbm9kZSlcbiB7XG4gXHRzdHJ1Y3QgbW50X2lkbWFwICppZG1hcDtcbi1cdHZmc3VpZF90IHZmc3VpZDtcbitcdGludCByZXQ7XG4gXG4gXHRpZiAoIXN5c2N0bF9wcm90ZWN0ZWRfc3ltbGlua3MpXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0aWRtYXAgPSBtbnRfaWRtYXAobmQtXHUwMDNlcGF0aC5tbnQpO1xuLVx0dmZzdWlkID0gaV91aWRfaW50b192ZnN1aWQoaWRtYXAsIGlub2RlKTtcbi1cdC8qIEFsbG93ZWQgaWYgb3duZXIgYW5kIGZvbGxvd2VyIG1hdGNoLiAqL1xuLVx0aWYgKHZmc3VpZF9lcV9rdWlkKHZmc3VpZCwgY3VycmVudF9mc3VpZCgpKSlcbi1cdFx0cmV0dXJuIDA7XG4tXG4gXHQvKiBBbGxvd2VkIGlmIHBhcmVudCBkaXJlY3Rvcnkgbm90IHN0aWNreSBhbmQgd29ybGQtd3JpdGFibGUuICovXG4gXHRpZiAoKG5kLVx1MDAzZWRpcl9tb2RlIFx1MDAyNiAoU19JU1ZUWHxTX0lXT1RIKSkgIT0gKFNfSVNWVFh8U19JV09USCkpXG4gXHRcdHJldHVybiAwO1xuIFxuK1x0aWRtYXAgPSBtbnRfaWRtYXAobmQtXHUwMDNlcGF0aC5tbnQpO1xuK1x0LyogQWxsb3dlZCBpZiBvd25lciBhbmQgZm9sbG93ZXIgbWF0Y2guICovXG4rXHRyZXQgPSB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWUoaWRtYXAsIGlub2RlKTtcbitcdGlmIChyZXQgXHUwMDNjPSAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuIFx0LyogQWxsb3dlZCBpZiBwYXJlbnQgZGlyZWN0b3J5IGFuZCBsaW5rIG93bmVyIG1hdGNoLiAqL1xuLVx0aWYgKHZmc3VpZF92YWxpZChuZC1cdTAwM2VkaXJfdmZzdWlkKSBcdTAwMjZcdTAwMjYgdmZzdWlkX2VxKG5kLVx1MDAzZWRpcl92ZnN1aWQsIHZmc3VpZCkpXG4tXHRcdHJldHVybiAwO1xuK1x0cmV0ID0gdmZzX2lub2RlX2FuZF9kaXJfaGF2ZV9zYW1lX293bmVyKGlkbWFwLCBpbm9kZSwgbmQpO1xuK1x0aWYgKHJldCBcdTAwM2M9IDApXG4rXHRcdHJldHVybiByZXQ7XG4gXG4gXHRpZiAobmQtXHUwMDNlZmxhZ3MgXHUwMDI2IExPT0tVUF9SQ1UpXG4gXHRcdHJldHVybiAtRUNISUxEO1xuQEAgLTEzODksMTIgKzE0NTYsMTIgQEAgaW50IG1heV9saW5rYXQoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIGNvbnN0IHN0cnVjdCBwYXRoICpsaW5rKVxuICAqIEBpbm9kZTogdGhlIGlub2RlIG9mIHRoZSBmaWxlIHRvIG9wZW5cbiAgKlxuICAqIEJsb2NrIGFuIE9fQ1JFQVQgb3BlbiBvZiBhIEZJRk8gKG9yIGEgcmVndWxhciBmaWxlKSB3aGVuOlxuLSAqICAgLSBzeXNjdGxfcHJvdGVjdGVkX2ZpZm9zIChvciBzeXNjdGxfcHJvdGVjdGVkX3JlZ3VsYXIpIGlzIGVuYWJsZWRcbi0gKiAgIC0gdGhlIGZpbGUgYWxyZWFkeSBleGlzdHNcbi0gKiAgIC0gd2UgYXJlIGluIGEgc3RpY2t5IGRpcmVjdG9yeVxuLSAqICAgLSB3ZSBkb24ndCBvd24gdGhlIGZpbGVcbisgKiAgIC0gc3lzY3RsX3Byb3RlY3RlZF9maWZvcyAob3Igc3lzY3RsX3Byb3RlY3RlZF9yZWd1bGFyKSBpcyBlbmFibGVkLFxuKyAqICAgLSB0aGUgZmlsZSBhbHJlYWR5IGV4aXN0cyxcbisgKiAgIC0gd2UgYXJlIGluIGEgc3RpY2t5IGRpcmVjdG9yeSxcbisgKiAgIC0gdGhlIGRpcmVjdG9yeSBpcyB3b3JsZCB3cml0YWJsZSxcbisgKiAgIC0gd2UgZG9uJ3Qgb3duIHRoZSBmaWxlIGFuZFxuICAqICAgLSB0aGUgb3duZXIgb2YgdGhlIGRpcmVjdG9yeSBkb2Vzbid0IG93biB0aGUgZmlsZVxuLSAqICAgLSB0aGUgZGlyZWN0b3J5IGlzIHdvcmxkIHdyaXRhYmxlXG4gICogSWYgdGhlIHN5c2N0bF9wcm90ZWN0ZWRfZmlmb3MgKG9yIHN5c2N0bF9wcm90ZWN0ZWRfcmVndWxhcikgaXMgc2V0IHRvIDJcbiAgKiB0aGUgZGlyZWN0b3J5IGRvZXNuJ3QgaGF2ZSB0byBiZSB3b3JsZCB3cml0YWJsZTogYmVpbmcgZ3JvdXAgd3JpdGFibGUgd2lsbFxuICAqIGJlIGVub3VnaC5cbkBAIC0xNDA1LDEzICsxNDcyLDQ1IEBAIGludCBtYXlfbGlua2F0KHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBjb25zdCBzdHJ1Y3QgcGF0aCAqbGluaylcbiAgKiBPbiBub24taWRtYXBwZWQgbW91bnRzIG9yIGlmIHBlcm1pc3Npb24gY2hlY2tpbmcgaXMgdG8gYmUgcGVyZm9ybWVkIG9uIHRoZVxuICAqIHJhdyBpbm9kZSBzaW1wbHkgcGFzcyBAbm9wX21udF9pZG1hcC5cbiAgKlxuKyAqIEZvciBhIGZpbGVzeXN0ZW0gKGUuZy4gYSBuZXR3b3JrIGZpbGVzeXN0ZW0pIHRoYXQgaGFzIGEgc2VwYXJhdGUgSUQgc3BhY2VcbisgKiBhbmQgaGFzIGZvcmVpZ24gSURzIChtYXliZSBldmVuIG5vbi1pbnRlZ2VyIElEcyksIGlfdWlkIGNhbm5vdCBiZSBjb21wYXJlZFxuKyAqIHRvIGN1cnJlbnRfZnN1aWQoKSBhbmQgbWF5IG5vdCBiZSBkaXJlY3RseSBjb21wYXJhYmxlIHRvIGFub3RoZXIgaV91aWQuXG4rICogSW5zdGVhZCwgdGhlIGZpbGVzeXN0ZW0gaXMgYXNrZWQgdG8gcGVyZm9ybSB0aGUgY29tcGFyaXNvbnMuICBXaXRoIG5ldHdvcmtcbisgKiBmaWxlc3lzdGVtcywgdGhlcmUgYWxzbyBleGlzdHMgdGhlIHBvc3NpYmlsaXR5IG9mIGRvaW5nIGFub255bW91c1xuKyAqIG9wZXJhdGlvbnMgYW5kIGhhdmluZyBhbm9ueW1vdXNseS1vd25lZCBvYmplY3RzLlxuKyAqXG4rICogV2UgaGF2ZSB0aGUgZm9sbG93aW5nIHNjZW5hcmlvczpcbisgKlxuKyAqXHRVU0VSXHRESVJcdEZJTEVcdEZJTEVcdEFMTE9XRURcbisgKlx0XHRPV05FUlx0T1dORVJcdFNUQVRFXG4rICpcdD09PT09PT1cdD09PT09PT1cdD09PT09PT1cdD09PT09PT1cdD09PT09PT1cbisgKlx0QVx0QVx0LVx0TmV3XHRZZXNcbisgKlx0QVx0QVx0QVx0RXhpc3RzXHRZZXNcbisgKlx0QVx0QVx0Q1x0RXhpc3RzXHROb1xuKyAqXHRBXHRCXHQtXHROZXdcdFllc1xuKyAqXHRBXHRCXHRBXHRFeGlzdHNcdFllcywgRk89PVVcbisgKlx0QVx0Qlx0Qlx0RXhpc3RzXHRZZXMsIEZPPT1ET1xuKyAqXHRBXHRCXHRDXHRFeGlzdHNcdE5vXG4rICpcdEFcdGFub25bMV1cdC1cdE5ld1x0WWVzXG4rICpcdEFcdGFub25bMV1cdEFcdEV4aXN0c1x0WWVzXG4rICpcdEFcdGFub25bMV1cdENcdEV4aXN0c1x0Tm9cbisgKlx0YW5vblx0QVx0LVx0TmV3XHRZZXNcbisgKlx0YW5vblx0QVx0QVx0RXhpc3RzXHRZZXMsIEZPPT1ET1xuKyAqXHRhbm9uXHRhbm9uWzFdXHQtXHROZXdcdFllc1xuKyAqXHRhbm9uXHRhbm9uWzFdXHQtXHRFeGlzdHNcdE5vXG4rICpcdGFub25cdEFcdEFcdEV4aXN0c1x0WWVzLCBGTz09RE9cbisgKlx0YW5vblx0QVx0Q1x0RXhpc3RzXHROb1xuKyAqXHRhbm9uXHRBXHRhbm9uXHRFeGlzdHNcdE5vXG4rICpcbisgKiBbMV0gQ2FuIGFub255bW91c2x5LW93bmVkIGRpcnMgYmUgc3RpY2t5P1xuKyAqXG4gICogUmV0dXJucyAwIGlmIHRoZSBvcGVuIGlzIGFsbG93ZWQsIC12ZSBvbiBlcnJvci5cbiAgKi9cbiBzdGF0aWMgaW50IG1heV9jcmVhdGVfaW5fc3RpY2t5KHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgbmFtZWlkYXRhICpuZCxcbi1cdFx0XHRcdHN0cnVjdCBpbm9kZSAqY29uc3QgaW5vZGUpXG4rXHRcdFx0XHRzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIHtcbiBcdHVtb2RlX3QgZGlyX21vZGUgPSBuZC1cdTAwM2VkaXJfbW9kZTtcbi1cdHZmc3VpZF90IGRpcl92ZnN1aWQgPSBuZC1cdTAwM2VkaXJfdmZzdWlkLCBpX3Zmc3VpZDtcbitcdGludCByZXQ7XG4gXG4gXHRpZiAobGlrZWx5KCEoZGlyX21vZGUgXHUwMDI2IFNfSVNWVFgpKSlcbiBcdFx0cmV0dXJuIDA7XG5AQCAtMTQyMiwxMyArMTUyMSwxMyBAQCBzdGF0aWMgaW50IG1heV9jcmVhdGVfaW5fc3RpY2t5KHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgbmFtZWlkYXRhICpuZCxcbiBcdGlmIChTX0lTRklGTyhpbm9kZS1cdTAwM2VpX21vZGUpIFx1MDAyNlx1MDAyNiAhc3lzY3RsX3Byb3RlY3RlZF9maWZvcylcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHRpX3Zmc3VpZCA9IGlfdWlkX2ludG9fdmZzdWlkKGlkbWFwLCBpbm9kZSk7XG4tXG4tXHRpZiAodmZzdWlkX2VxKGlfdmZzdWlkLCBkaXJfdmZzdWlkKSlcbi1cdFx0cmV0dXJuIDA7XG4rXHRyZXQgPSB2ZnNfaW5vZGVfYW5kX2Rpcl9oYXZlX3NhbWVfb3duZXIoaWRtYXAsIGlub2RlLCBuZCk7XG4rXHRpZiAocmV0IFx1MDAzYz0gMClcbitcdFx0cmV0dXJuIHJldDtcbiBcbi1cdGlmICh2ZnN1aWRfZXFfa3VpZChpX3Zmc3VpZCwgY3VycmVudF9mc3VpZCgpKSlcbi1cdFx0cmV0dXJuIDA7XG4rXHRyZXQgPSB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWUoaWRtYXAsIGlub2RlKTtcbitcdGlmIChyZXQgXHUwMDNjPSAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuIFxuIFx0aWYgKGxpa2VseShkaXJfbW9kZSBcdTAwMjYgMDAwMikpIHtcbiBcdFx0YXVkaXRfbG9nX3BhdGhfZGVuaWVkKEFVRElUX0FOT01fQ1JFQVQsIFwic3RpY2t5X2NyZWF0ZVwiKTtcbkBAIC0zNjQ1LDEyICszNzQ0LDE0IEBAIEVYUE9SVF9TWU1CT0wodXNlcl9wYXRoX2F0KTtcbiBpbnQgX19jaGVja19zdGlja3koc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0XHQgICBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIHtcbi1cdGt1aWRfdCBmc3VpZCA9IGN1cnJlbnRfZnN1aWQoKTtcbitcdGludCByZXQ7XG4gXG4tXHRpZiAodmZzdWlkX2VxX2t1aWQoaV91aWRfaW50b192ZnN1aWQoaWRtYXAsIGlub2RlKSwgZnN1aWQpKVxuLVx0XHRyZXR1cm4gMDtcbi1cdGlmICh2ZnN1aWRfZXFfa3VpZChpX3VpZF9pbnRvX3Zmc3VpZChpZG1hcCwgZGlyKSwgZnN1aWQpKVxuLVx0XHRyZXR1cm4gMDtcbitcdHJldCA9IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShpZG1hcCwgaW5vZGUpO1xuK1x0aWYgKHJldCBcdTAwM2M9IDApXG4rXHRcdHJldHVybiByZXQ7XG4rXHRyZXQgPSB2ZnNfaW5vZGVzX2hhdmVfc2FtZV9vd25lcihpZG1hcCwgaW5vZGUsIGRpcik7XG4rXHRpZiAocmV0IFx1MDAzYz0gMClcbitcdFx0cmV0dXJuIHJldDtcbiBcdHJldHVybiAhY2FwYWJsZV93cnRfaW5vZGVfdWlkZ2lkKGlkbWFwLCBpbm9kZSwgQ0FQX0ZPV05FUik7XG4gfVxuIEVYUE9SVF9TWU1CT0woX19jaGVja19zdGlja3kpO1xuZGlmZiAtLWdpdCBhL2ZzL3JlbWFwX3JhbmdlLmMgYi9mcy9yZW1hcF9yYW5nZS5jXG5pbmRleCAyNmFmYmJiZmIxMGMyZS4uOWVlZTkzYzI3MDAxMjUgMTAwNjQ0XG4tLS0gYS9mcy9yZW1hcF9yYW5nZS5jXG4rKysgYi9mcy9yZW1hcF9yYW5nZS5jXG5AQCAtNDEzLDIwICs0MTMsMjIgQEAgbG9mZl90IHZmc19jbG9uZV9maWxlX3JhbmdlKHN0cnVjdCBmaWxlICpmaWxlX2luLCBsb2ZmX3QgcG9zX2luLFxuIEVYUE9SVF9TWU1CT0wodmZzX2Nsb25lX2ZpbGVfcmFuZ2UpO1xuIFxuIC8qIENoZWNrIHdoZXRoZXIgd2UgYXJlIGFsbG93ZWQgdG8gZGVkdXBlIHRoZSBkZXN0aW5hdGlvbiBmaWxlICovXG4tc3RhdGljIGJvb2wgbWF5X2RlZHVwZV9maWxlKHN0cnVjdCBmaWxlICpmaWxlKVxuK3N0YXRpYyBpbnQgbWF5X2RlZHVwZV9maWxlKHN0cnVjdCBmaWxlICpmaWxlKVxuIHtcbiBcdHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwID0gZmlsZV9tbnRfaWRtYXAoZmlsZSk7XG4gXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZV9pbm9kZShmaWxlKTtcbitcdGludCByZXQ7XG4gXG4gXHRpZiAoY2FwYWJsZShDQVBfU1lTX0FETUlOKSlcbi1cdFx0cmV0dXJuIHRydWU7XG4rXHRcdHJldHVybiAwO1xuIFx0aWYgKGZpbGUtXHUwMDNlZl9tb2RlIFx1MDAyNiBGTU9ERV9XUklURSlcbi1cdFx0cmV0dXJuIHRydWU7XG4tXHRpZiAodmZzdWlkX2VxX2t1aWQoaV91aWRfaW50b192ZnN1aWQoaWRtYXAsIGlub2RlKSwgY3VycmVudF9mc3VpZCgpKSlcbi1cdFx0cmV0dXJuIHRydWU7XG4rXHRcdHJldHVybiAwO1xuK1x0cmV0ID0gdmZzX2lub2RlX2lzX293bmVkX2J5X21lKGlkbWFwLCBpbm9kZSk7XG4rXHRpZiAocmV0IFx1MDAzYz0gMClcbitcdFx0cmV0dXJuIHJldDtcbiBcdGlmICghaW5vZGVfcGVybWlzc2lvbihpZG1hcCwgaW5vZGUsIE1BWV9XUklURSkpXG4tXHRcdHJldHVybiB0cnVlO1xuLVx0cmV0dXJuIGZhbHNlO1xuK1x0XHRyZXR1cm4gMDtcbitcdHJldHVybiAtRVBFUk07XG4gfVxuIFxuIGxvZmZfdCB2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2Vfb25lKHN0cnVjdCBmaWxlICpzcmNfZmlsZSwgbG9mZl90IHNyY19wb3MsXG5AQCAtNDU5LDggKzQ2MSw4IEBAIGxvZmZfdCB2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2Vfb25lKHN0cnVjdCBmaWxlICpzcmNfZmlsZSwgbG9mZl90IHNyY19wb3MsXG4gXHRpZiAocmV0KVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuLVx0cmV0ID0gLUVQRVJNO1xuLVx0aWYgKCFtYXlfZGVkdXBlX2ZpbGUoZHN0X2ZpbGUpKVxuK1x0cmV0ID0gbWF5X2RlZHVwZV9maWxlKGRzdF9maWxlKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdGdvdG8gb3V0X2Ryb3Bfd3JpdGU7XG4gXG4gXHRyZXQgPSAtRVhERVY7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mcy5oIGIvaW5jbHVkZS9saW51eC9mcy5oXG5pbmRleCA1MGNlNzMxYTJiNzhmMS4uODAxM2MxM2EzNTNkNjcgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2ZzLmhcbisrKyBiL2luY2x1ZGUvbGludXgvZnMuaFxuQEAgLTYyOCw2ICs2MjgsNyBAQCBpc191bmNhY2hlZF9hY2woc3RydWN0IHBvc2l4X2FjbCAqYWNsKVxuICNkZWZpbmUgSU9QX0NBQ0hFRF9MSU5LXHRcdDB4MDA0MFxuICNkZWZpbmUgSU9QX0ZBU1RQRVJNX01BWV9FWEVDXHQweDAwODBcbiAjZGVmaW5lIElPUF9GTENUWFx0XHQweDAxMDBcbisjZGVmaW5lIElPUF9PV05FUlNISVBfT1ZFUlJJREVcdDB4MDIwMFx0LyogVXNlIC1cdTAwM2Vpc19vd25lZF9ieV9tZSgpIGFuZCAtXHUwMDNlaGF2ZV9zYW1lX293bmVyKCkgKi9cbiBcbiAvKlxuICAqIElub2RlIHN0YXRlIGJpdHMuICBQcm90ZWN0ZWQgYnkgaW5vZGUtXHUwMDNlaV9sb2NrXG5AQCAtMTc1NSw4ICsxNzU2LDcgQEAgc3RhdGljIGlubGluZSBib29sIGZpbGVfd3JpdGVfbm90X3N0YXJ0ZWQoY29uc3Qgc3RydWN0IGZpbGUgKmZpbGUpXG4gXHRyZXR1cm4gc2Jfd3JpdGVfbm90X3N0YXJ0ZWQoZmlsZV9pbm9kZShmaWxlKS1cdTAwM2VpX3NiKTtcbiB9XG4gXG4tYm9vbCBpbm9kZV9vd25lcl9vcl9jYXBhYmxlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuLVx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbitib29sIGlub2RlX293bmVyX29yX2NhcGFibGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xuIFxuIC8qXG4gICogVkZTIGhlbHBlciBmdW5jdGlvbnMuLlxuQEAgLTIwMzYsNiArMjAzNiw5IEBAIHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIHtcbiBcdFx0XHQgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgZmlsZV9rYXR0ciAqZmEpO1xuIFx0aW50ICgqZmlsZWF0dHJfZ2V0KShzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBmaWxlX2thdHRyICpmYSk7XG4gXHRzdHJ1Y3Qgb2Zmc2V0X2N0eCAqKCpnZXRfb2Zmc2V0X2N0eCkoc3RydWN0IGlub2RlICppbm9kZSk7XG4rXHRpbnQgKCppc19vd25lZF9ieV9tZSkoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xuK1x0aW50ICgqaGF2ZV9zYW1lX293bmVyKShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZTEsXG4rXHRcdFx0ICAgICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUyKTtcbiB9IF9fX19jYWNoZWxpbmVfYWxpZ25lZDtcbiBcbiAvKiBEaWQgdGhlIGRyaXZlciBwcm92aWRlIHZhbGlkIG1tYXAgaG9vayBjb25maWd1cmF0aW9uPyAqL1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDM6MzM6MDkuNDcxMDU3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Nzc5MDk0MDI4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIElub2RlIE93bmVyc2hpcCBQYXRjaCBmb3IgRnV6emluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0J3MgaW50cm9kdWNpbmcgc29tZSBzaWduaWZpY2FudCBjaGFuZ2VzIHJlbGF0ZWQgdG8gaW5vZGUgb3duZXJzaGlwIGNoZWNrcywgc3BlY2lmaWNhbGx5IHdpdGggdGhlIGBpc19vd25lZF9ieV9tZWAgYW5kIGBoYXZlX3NhbWVfb3duZXJgIG9wZXJhdGlvbnMsIGFuZCBpbXBsZW1lbnRhdGlvbiBmb3IgQUZTLiBUaGUgbWFpbiB0aHJ1c3QgaXMgdGhpcyBuZXcgYElPUF9PV05FUlNISVBfT1ZFUlJJREVgIGZsYWcgYW5kIGEgYnVuY2ggb2YgVkZTIHBhdGggbW9kaWZpY2F0aW9ucy4gVGhlIGNvZGUgaXMgdXNpbmcgdGhlIG5ldyBpbm9kZSBvcGVyYXRpb25zIGluc3RlYWQgb2YgZGlyZWN0bHkgY29tcGFyaW5nIFVJRHMgdXNpbmcgYHZmc3VpZF9lcV9rdWlkYCwgaW4gZnVuY3Rpb25zIGxpa2UgYGNob3duX29rYCwgYGNoZ3JwX29rYCwgYGNvcmVkdW1wX2ZpbGVgLCBldGMuXG5cblRoaXMgaXMgYSBwcmV0dHkgZnVuZGFtZW50YWwgc2hpZnQgaW4gaG93IG93bmVyc2hpcCBpcyBjaGVja2VkLCBpbXBhY3RpbmcgYm90aCB0aGUgY29yZSBWRlMgYW5kIHRoZSBBRlMgZmlsZXN5c3RlbSwgYW5kIHRoYXQgc2NyZWFtcyBcImZ1enogbWUuXCIgSSBuZWVkIHRvIGRldGVybWluZSB3aGVyZSB0byBjb25jZW50cmF0ZSBteSBmdXp6aW5nIGVmZm9ydHMgdG8gaWRlbnRpZnkgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy5cblxuTXkgaW5pdGlhbCBmb2N1cyB3aWxsIGJlIG9uIHRoZSBuZXcgZnVuY3Rpb25zIHRoYXQgaW1wbGVtZW50IHRoZSBmdW5jdGlvbmFsaXR5OiBgdmZzX2lub2RlX2lzX293bmVkX2J5X21lYCwgYHZmc19pbm9kZV9hbmRfZGlyX2hhdmVfc2FtZV9vd25lcmAsIGB2ZnNfaW5vZGVzX2hhdmVfc2FtZV9vd25lcmAsIGBhZnNfaXNfb3duZWRfYnlfbWVgLCBhbmQgYGFmc19oYXZlX3NhbWVfb3duZXJgLiBUaGVzZSBhcmUgdGhlIGRpcmVjdCBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlIG5ldyBsb2dpYy4gQWxzbywgSSdsbCBuZWVkIHRvIGZ1enogdGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyB0b28sIHRvIG1ha2Ugc3VyZSB0aGUgY2hhbmdlIGlzIHdvcmtpbmcuXG5cbk5vdywgbGV0J3Mgc2VlLCB3aGljaCBvZiB0aGVzZSBhcmUgZXhwb3NlZD8gYHZmc19pbm9kZV9pc19vd25lZF9ieV9tZWAgaW4gYGZzL25hbWVpLmNgIGlzIG5vbi1zdGF0aWMgYW5kIGV4cG9ydGVkLCBtZWFuaW5nIGl0J3MgYWNjZXNzaWJsZS4gYHZmc19pbm9kZV9hbmRfZGlyX2hhdmVfc2FtZV9vd25lcmAgYW5kIGB2ZnNfaW5vZGVzX2hhdmVfc2FtZV9vd25lcmAgYXJlIHN0YXRpYyBpbiBgZnMvbmFtZWkuY2AsIHNvIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGV5IGFyZSB1c2VkIHdpdGhpbiB0aGVpciBjb21waWxhdGlvbiB1bml0LCB0byBzZWUgaG93IHRvIHRyaWdnZXIgdGhlbS4gYGFmc19pc19vd25lZF9ieV9tZWAgYW5kIGBhZnNfaGF2ZV9zYW1lX293bmVyYCBhcmUgaW4gYGZzL2Fmcy9zZWN1cml0eS5jYCwgYW5kIHRoZXkncmUgbm9uLXN0YXRpYy5cblxuT2theSwgbGV0J3MgZGlnIGludG8gYGZzL25hbWVpLmNgIGFuZCBzZWUgZXhhY3RseSBob3cgYHZmc19pbm9kZV9pc19vd25lZF9ieV9tZWAgaXMgdXNlZCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBwb3RlbnRpYWwgYXR0YWNrIHN1cmZhY2UuIFRoaXMgaXMgd2hlcmUgdGhlIHJlYWwgaW50ZXJlc3Rpbmcgc3R1ZmYgaXMgZ29pbmcgdG8gYmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMTc5LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTk0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDM6MzM6MTcuMjYyMDAxMDUxWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM5NjE5ODI4MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmZzX2lub2RlX2lzX293bmVkX2J5X21lXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2F0dHIuYz05NT1zdGF0aWMgaW50IGNob3duX29rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbi0tXFxuZnMvYXR0ci5jLTEwMC1cXG5mcy9hdHRyLmM6MTAxOlxcdHJldCA9IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShpZG1hcCwgaW5vZGUpO1xcbmZzL2F0dHIuYy0xMDItXFx0aWYgKHJldCBcXHUwMDNjPSAwKVxcbi0tXFxuZnMvYXR0ci5jPTEyND1zdGF0aWMgaW50IGNoZ3JwX29rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbi0tXFxuZnMvYXR0ci5jLTEyOS1cXG5mcy9hdHRyLmM6MTMwOlxcdHJldCA9IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShpZG1hcCwgaW5vZGUpO1xcbmZzL2F0dHIuYy0xMzEtXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5mcy9jb3JlZHVtcC5jPTg3OD1zdGF0aWMgYm9vbCBjb3JlZHVtcF9maWxlKHN0cnVjdCBjb3JlX25hbWUgKmNuLCBzdHJ1Y3QgY29yZWR1bXBfcGFyYW1zICpjcHJtLFxcbi0tXFxuZnMvY29yZWR1bXAuYy05NTYtXFx0aWRtYXAgPSBmaWxlX21udF9pZG1hcChmaWxlKTtcXG5mcy9jb3JlZHVtcC5jOjk1NzpcXHRpZiAodmZzX2lub2RlX2lzX293bmVkX2J5X21lKGlkbWFwLCBpbm9kZSkgIT0gMCkge1xcbmZzL2NvcmVkdW1wLmMtOTU4LVxcdFxcdGNvcmVkdW1wX3JlcG9ydF9mYWlsdXJlKFxcXCJDb3JlIGR1bXAgdG8gJXMgYWJvcnRlZDogY2Fubm90IHByZXNlcnZlIGZpbGUgb3duZXJcXFwiLCBjbi1cXHUwMDNlY29yZW5hbWUpO1xcbi0tXFxuZnMvaW5vZGUuYz0yNzUzPWJvb2wgaW5vZGVfb3duZXJfb3JfY2FwYWJsZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSlcXG4tLVxcbmZzL2lub2RlLmMtMjc1OC1cXG5mcy9pbm9kZS5jOjI3NTk6XFx0cmV0ID0gdmZzX2lub2RlX2lzX293bmVkX2J5X21lKGlkbWFwLCBpbm9kZSk7XFxuZnMvaW5vZGUuYy0yNzYwLVxcdGlmIChyZXQgPT0gMClcXG4tLVxcbmZzL2ludGVybmFsLmg9NDk9ZXh0ZXJuIGludCBmaW5pc2hfY2xlYW5fY29udGV4dChzdHJ1Y3QgZnNfY29udGV4dCAqZmMpO1xcbi0tXFxuZnMvaW50ZXJuYWwuaC01My0gKi9cXG5mcy9pbnRlcm5hbC5oOjU0OmludCB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xcbmZzL2ludGVybmFsLmgtNTUtZXh0ZXJuIGludCBmaWxlbmFtZV9sb29rdXAoaW50IGRmZCwgc3RydWN0IGZpbGVuYW1lICpuYW1lLCB1bnNpZ25lZCBmbGFncyxcXG4tLVxcbmZzL2xvY2tzLmM9MjEzNz12ZnNfc2V0bGVhc2Uoc3RydWN0IGZpbGUgKmZpbHAsIGludCBhcmcsIHN0cnVjdCBmaWxlX2xlYXNlICoqbGVhc2UsIHZvaWQgKipwcml2KVxcbi0tXFxuZnMvbG9ja3MuYy0yMTQxLVxcbmZzL2xvY2tzLmM6MjE0MjpcXHRlcnJvciA9IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShmaWxlX21udF9pZG1hcChmaWxwKSwgaW5vZGUpO1xcbmZzL2xvY2tzLmMtMjE0My1cXHRpZiAoZXJyb3IgXFx1MDAzYyAwKVxcbi0tXFxuZnMvbmFtZWkuYz0xMjU0PWZzX2luaXRjYWxsKGluaXRfZnNfbmFtZWlfc3lzY3Rscyk7XFxuLS1cXG5mcy9uYW1laS5jLTEyNjItICovXFxuZnMvbmFtZWkuYzoxMjYzOmludCB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuZnMvbmFtZWkuYy0xMjY0LXtcXG4tLVxcbmZzL25hbWVpLmM9MTM0MD1zdGF0aWMgaW5saW5lIGludCBtYXlfZm9sbG93X2xpbmsoc3RydWN0IG5hbWVpZGF0YSAqbmQsIHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuLS1cXG5mcy9uYW1laS5jLTEzNTMtXFx0LyogQWxsb3dlZCBpZiBvd25lciBhbmQgZm9sbG93ZXIgbWF0Y2guICovXFxuZnMvbmFtZWkuYzoxMzU0OlxcdHJldCA9IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShpZG1hcCwgaW5vZGUpO1xcbmZzL25hbWVpLmMtMTM1NS1cXHRpZiAocmV0IFxcdTAwM2M9IDApXFxuLS1cXG5mcy9uYW1laS5jPTE1MDk9c3RhdGljIGludCBtYXlfY3JlYXRlX2luX3N0aWNreShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IG5hbWVpZGF0YSAqbmQsXFxuLS1cXG5mcy9uYW1laS5jLTE1MjctXFxuZnMvbmFtZWkuYzoxNTI4OlxcdHJldCA9IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShpZG1hcCwgaW5vZGUpO1xcbmZzL25hbWVpLmMtMTUyOS1cXHRpZiAocmV0IFxcdTAwM2M9IDApXFxuLS1cXG5mcy9uYW1laS5jPTM3NDQ9aW50IF9fY2hlY2tfc3RpY2t5KHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tLVxcbmZzL25hbWVpLmMtMzc0OC1cXG5mcy9uYW1laS5jOjM3NDk6XFx0cmV0ID0gdmZzX2lub2RlX2lzX293bmVkX2J5X21lKGlkbWFwLCBpbm9kZSk7XFxuZnMvbmFtZWkuYy0zNzUwLVxcdGlmIChyZXQgXFx1MDAzYz0gMClcXG4tLVxcbmZzL3JlbWFwX3JhbmdlLmM9NDE2PXN0YXRpYyBpbnQgbWF5X2RlZHVwZV9maWxlKHN0cnVjdCBmaWxlICpmaWxlKVxcbi0tXFxuZnMvcmVtYXBfcmFuZ2UuYy00MjUtXFx0XFx0cmV0dXJuIDA7XFxuZnMvcmVtYXBfcmFuZ2UuYzo0MjY6XFx0cmV0ID0gdmZzX2lub2RlX2lzX293bmVkX2J5X21lKGlkbWFwLCBpbm9kZSk7XFxuZnMvcmVtYXBfcmFuZ2UuYy00MjctXFx0aWYgKHJldCBcXHUwMDNjPSAwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwMzozMzoyMS4yMjM5OTU5MzFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjY3ODQ0MTAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBmdW5jdGlvbnMuXG5cbioqSW5pdGlhbCBDb25zaWRlcmF0aW9ucyBmb3IgRmlsZSBPd25lcnNoaXAgYW5kIExlYXNlIE1hbmFnZW1lbnQqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayBkb3duIHRoZXNlIGZ1bmN0aW9ucy4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiBmaWxlIG93bmVyc2hpcCwgbGVhc2UgbWFuYWdlbWVudCwgYW5kIGFjY2VzcyBjb250cm9sLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgcGllY2VzIGZpdCB0b2dldGhlciBpbiBhIGZpbGUgc3lzdGVtIGNvbnRleHQuIFRoZSBjb3JlIGZ1bmN0aW9ucyBJJ20gdGhpbmtpbmcgYWJvdXQgYXJlOiBgdmZzX2lub2RlX2lzX293bmVkX2J5X21lYCwgYGFmc19pc19vd25lZF9ieV9tZWAsIGBhZnNfaGF2ZV9zYW1lX293bmVyYCwgYGlub2RlX293bmVyX29yX2NhcGFibGVgLCBgdmZzX3NldGxlYXNlYCwgYW5kIGBfX2NoZWNrX3N0aWNreWAuXG5cbkZpcnN0LCBhIHF1aWNrIGNoZWNrLi4uIEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgYGFmc19pc19vd25lZF9ieV9tZWAgaXMgZXhwb3J0ZWQgb3Igc3RhdGljLiBLbm93aW5nIHRoaXMgaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyBpdHMgc2NvcGUgYW5kIGhvdyBpdCdzIGludGVuZGVkIHRvIGJlIHVzZWQgd2l0aGluIHRoZSBicm9hZGVyIHN5c3RlbS4gSSdsbCBuZWVkIHRvIGxvb2sgdGhhdCB1cC4gSSBuZWVkIHRvIGJlIGF3YXJlIG9mIHRoZSBjb250ZXh0IG9mIHRoaXMgZnVuY3Rpb24sIHNpbmNlIGl0IGlzIG5hbWVkIFwiYWZzXCIgd2hpY2ggbGlrZWx5IHJlZmVycyB0byBBbmRyZXcgRmlsZSBTeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NTE3LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDM6MzM6MjQuNDkxODQ0MTc0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2MzA4MDYyODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWZzX2lzX293bmVkX2J5X21lXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2Fmcy9kaXIuYz02MD1jb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBhZnNfZGlyX2lub2RlX29wZXJhdGlvbnMgPSB7XFxuLS1cXG5mcy9hZnMvZGlyLmMtNzEtXFx0LnNldGF0dHJcXHQ9IGFmc19zZXRhdHRyLFxcbmZzL2Fmcy9kaXIuYzo3MjpcXHQuaXNfb3duZWRfYnlfbWVcXHQ9IGFmc19pc19vd25lZF9ieV9tZSxcXG5mcy9hZnMvZGlyLmMtNzMtXFx0LmhhdmVfc2FtZV9vd25lciA9IGFmc19oYXZlX3NhbWVfb3duZXIsXFxuLS1cXG5mcy9hZnMvZmlsZS5jPTQ4PWNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGFmc19maWxlX2lub2RlX29wZXJhdGlvbnMgPSB7XFxuLS1cXG5mcy9hZnMvZmlsZS5jLTUxLVxcdC5wZXJtaXNzaW9uXFx0PSBhZnNfcGVybWlzc2lvbixcXG5mcy9hZnMvZmlsZS5jOjUyOlxcdC5pc19vd25lZF9ieV9tZVxcdD0gYWZzX2lzX293bmVkX2J5X21lLFxcbmZzL2Fmcy9maWxlLmMtNTMtXFx0LmhhdmVfc2FtZV9vd25lciA9IGFmc19oYXZlX3NhbWVfb3duZXIsXFxuLS1cXG5mcy9hZnMvaW50ZXJuYWwuaD0xNTQxPWV4dGVybiBpbnQgYWZzX3Blcm1pc3Npb24oc3RydWN0IG1udF9pZG1hcCAqLCBzdHJ1Y3QgaW5vZGUgKiwgaW50KTtcXG5mcy9hZnMvaW50ZXJuYWwuaDoxNTQyOmludCBhZnNfaXNfb3duZWRfYnlfbWUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xcbmZzL2Fmcy9pbnRlcm5hbC5oLTE1NDMtaW50IGFmc19oYXZlX3NhbWVfb3duZXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUxLFxcbi0tXFxuZnMvYWZzL3NlY3VyaXR5LmM9NDMxPWludCBhZnNfcGVybWlzc2lvbihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbmZzL2Fmcy9zZWN1cml0eS5jLTUxOC0gKi9cXG5mcy9hZnMvc2VjdXJpdHkuYzo1MTk6aW50IGFmc19pc19vd25lZF9ieV9tZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSlcXG5mcy9hZnMvc2VjdXJpdHkuYy01MjAte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwMzozMzoyNy4xMjI2NTkxOTFaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDQyMjYwOTk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgQUZTIE93bmVyc2hpcCBDaGVja3MqKlxuXG5SaWdodCwgc28gSSd2ZSBjb25maXJtZWQgdGhhdCBgYWZzX2lzX293bmVkX2J5X21lYCBhbmQgYGFmc19oYXZlX3NhbWVfb3duZXJgIGFyZSAqbm90KiBzdGF0aWMsIGFzIGV4cGVjdGVkLiBOb3csIG15IG5leHQgc3RlcCBpcyB0byBxdWlja2x5IHZlcmlmeSBpZiB0aGUgYnVpbGQgcHJvY2VzcyBuZWVkcyBhbnkgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb25zIGVuYWJsZWQgdG8gY29ycmVjdGx5IGNvbXBpbGUgYW5kIGxpbmsgdGhpcyBjb2RlLiBMb29raW5nIGF0IHRoZSBjb2RlIHBhdGgsIGl0J3MgcHJldHR5IGNsZWFyIHRoYXQgdGhpcyBsaXZlcyB3aXRoaW4gYGZzL2Fmcy9gLCB3aGljaCBzY3JlYW1zIHRoYXQgd2UnbGwgbGlrZWx5IG5lZWQgYENPTkZJR19BRlNfRlNgIGRlZmluZWQuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBwcmVyZXF1aXNpdGUgaXMgbWV0IHRvIGNvbnRpbnVlIG15IGFuYWx5c2lzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjMxOCwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAzOjMzOjMwLjE2NDkyMzkxOVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzE4NjExNjU1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBBRlNfRlNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvYWZzL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5mcy9hZnMvS2NvbmZpZzoyOmNvbmZpZyBBRlNfRlNcXG5mcy9hZnMvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJBbmRyZXcgRmlsZSBTeXN0ZW0gc3VwcG9ydCAoQUZTKVxcXCJcXG4tLVxcbmZzL2Fmcy9LY29uZmlnPTE3PWNvbmZpZyBBRlNfREVCVUdcXG4tLVxcbmZzL2Fmcy9LY29uZmlnLTI2LVxcbmZzL2Fmcy9LY29uZmlnOjI3OmNvbmZpZyBBRlNfRlNDQUNIRVxcbmZzL2Fmcy9LY29uZmlnLTI4LVxcdGJvb2wgXFxcIlByb3ZpZGUgQUZTIGNsaWVudCBjYWNoaW5nIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAzOjMzOjMyLjg4MzU0MTEwNFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNzAyNzQ3MDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoZSBjb2RlOlxuXG4qKkNoZWNraW5nIEFGUyBLZXJuZWwgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZGVwZW5kZW5jaWVzIHJlbGF0ZWQgdG8gdGhlIEFGUyAoQW5kcmV3IEZpbGUgU3lzdGVtKSBmaWxlc3lzdGVtIHdpdGhpbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIEknbGwgc3RhcnQgYnkgdGFraW5nIGEgbG9vayBhdCBgZnMvYWZzL0tjb25maWdgLiBUaGlzIGZpbGUgc2hvdWxkIGNvbnRhaW4gdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gU3BlY2lmaWNhbGx5LCBJJ20gZ29pbmcgdG8gZm9jdXMgb24gd2hlcmUgdGhlIGBBRlNfRlNgIG9wdGlvbiBpcyBkZWZpbmVkIGFuZCBhbnkgZGVwZW5kZW5jaWVzIGl0IG1pZ2h0IGhhdmUuIFVuZGVyc3RhbmRpbmcgdGhlc2UgZGVwZW5kZW5jaWVzIGlzIGNydWNpYWwuIEl0IHRlbGxzIG1lIHdoaWNoIG90aGVyIGtlcm5lbCBmZWF0dXJlcyBuZWVkIHRvIGJlIGVuYWJsZWQgb3IgYXJlIHJlcXVpcmVkIGZvciBBRlMgc3VwcG9ydCB0byBiZSBidWlsdC4gS25vd2luZyB0aGlzIGFsbG93cyBmb3IgbWFraW5nIHRoZSBuZWNlc3NhcnkgY2hvaWNlcyB0byBjb25maWd1cmUgYSBrZXJuZWwgd2l0aCBBRlMgc3VwcG9ydC4gVGhpcyB3aWxsIGdpdmUgbWUgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQgbmVlZHMgdG8gYmUgZW5hYmxlZCBpbiBvcmRlciB0byBtYWtlIEFGUyBhdmFpbGFibGUsIGFuZCBob3cgaXQgaXMgaW50ZWdyYXRlZCBpbiB0aGUga2VybmVsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjY4NSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAzOjMzOjM2LjE1MzgxOTEwN1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDQzNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvYWZzL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdGNvbmZpZyBBRlNfRlNcXG4gICAzOlxcdFxcdHRyaXN0YXRlIFxcXCJBbmRyZXcgRmlsZSBTeXN0ZW0gc3VwcG9ydCAoQUZTKVxcXCJcXG4gICA0OlxcdFxcdGRlcGVuZHMgb24gSU5FVFxcbiAgIDU6XFx0XFx0c2VsZWN0IEFGX1JYUlBDXFxuICAgNjpcXHRcXHRzZWxlY3QgRE5TX1JFU09MVkVSXFxuICAgNzpcXHRcXHRzZWxlY3QgTkVURlNfU1VQUE9SVFxcbiAgIDg6XFx0XFx0c2VsZWN0IENSWVBUT19LUkI1XFxuICAgOTpcXHRcXHRoZWxwXFxuICAxMDpcXHRcXHQgIElmIHlvdSBzYXkgWSBoZXJlLCB5b3Ugd2lsbCBnZXQgYW4gZXhwZXJpbWVudGFsIEFuZHJldyBGaWxlIFN5c3RlbVxcbiAgMTE6XFx0XFx0ICBkcml2ZXIuIEl0IGN1cnJlbnRseSBvbmx5IHN1cHBvcnRzIHVuc2VjdXJlZCByZWFkLW9ubHkgQUZTIGFjY2Vzcy5cXG4gIDEyOlxcdFxcbiAgMTM6XFx0XFx0ICBTZWUgXFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9hZnMucnN0XFx1MDAzZSBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cXG4gIDE0OlxcdFxcbiAgMTU6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAgMTY6XFx0XFxuICAxNzpcXHRjb25maWcgQUZTX0RFQlVHXFxuICAxODpcXHRcXHRib29sIFxcXCJBRlMgZHluYW1pYyBkZWJ1Z2dpbmdcXFwiXFxuICAxOTpcXHRcXHRkZXBlbmRzIG9uIEFGU19GU1xcbiAgMjA6XFx0XFx0aGVscFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwMzozMzozNi4xNTM5MjgyMTdaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDg5MDYyOTkxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBDb25maWd1cmF0aW9uIFdvcmtmbG93KipcblxuT2theSwgc28gSSBzZWUgdGhhdCB0aGUgYEFGU19GU2AgZmlsZXN5c3RlbSBjbGVhcmx5IGhhcyBhIGRlcGVuZGVuY3kgb24gYElORVRgLiBUaGF0IG1ha2VzIHNlbnNlLiBUaGVyZWZvcmUsIHRoZSBpbW1lZGlhdGUgYWN0aW9uIGlzIHRvIGFkZCBgQUZTX0ZTYCB0byBgRW5hYmxlQ29uZmlnc2AgdG8gZW5zdXJlIGl0IGdldHMgYnVpbHQgY29ycmVjdGx5IGFsb25nIHdpdGggaXRzIG5ldHdvcmtpbmcgZGVwZW5kZW5jaWVzLlxuXG5Ob3csIGxldCdzIHRha2UgYSBicm9hZGVyIGxvb2suIEFyZSB0aGVyZSBhbnkgb3RoZXIgY29uZmlndXJhdGlvbiBpdGVtcyB0aGF0IG5lZWQgYXR0ZW50aW9uPyBJIG5lZWQgdG8gcmV2aWV3IHRoZSBjb2RlIGNoYW5nZXMgYW5kIGRldGVybWluZSBpZiB0aGV5IHJlcXVpcmUgYWRkaXRpb25hbCBjb25maWd1cmF0aW9uIGZsYWdzLlxuXG5Mb29raW5nIGF0IHRoZSBjaGFuZ2VzIGluIGBmcy9uYW1laS5jYCwgYGZzL2F0dHIuY2AsIGBmcy9jb3JlZHVtcC5jYCwgYGZzL2lub2RlLmNgLCBgZnMvbG9ja3MuY2AsIGFuZCBgZnMvcmVtYXBfcmFuZ2UuY2AsIHRoZXkncmUgYWxsIGNvcmUgVkZTIG1vZGlmaWNhdGlvbnMuIFRoZXNlIGFyZSBmdW5kYW1lbnRhbCBmaWxlc3lzdGVtIG9wZXJhdGlvbnMgYW5kIGRvbid0IHNlZW0gdG8gd2FycmFudCBhIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBUaGV54oCZcmUgcGFydCBvZiB0aGUgYmFzZSBWRlMgYW5kIHNob3VsZCBqdXN0IHdvcmsuXG5cbk5leHQsIEkgbmVlZCB0byBjaGVjayB0aGUgc2NvcGUgb2YgdGhlIGZ1bmN0aW9uIGB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWVgLiBJcyBpdCBleHBvcnRlZD8gSSBzZWUgaXTigJlzIGRlY2xhcmVkIGluIGBmcy9pbnRlcm5hbC5oYC4gVGhhdCBtZWFucyBpdCdzIG5vdCBleHBvcnRlZCB0byBtb2R1bGVzLCB3aGljaCBpcyBnZW5lcmFsbHkgd2hhdCBJIHdvdWxkIGV4cGVjdCBmb3IgYSBmdW5jdGlvbiBvZiB0aGlzIG5hdHVyZS4gSG93ZXZlciwgaXQgKmlzKiBhIG5vbi1zdGF0aWMgZnVuY3Rpb24gd2l0aGluIHRoZSBrZXJuZWwgY29yZSwgc28gaXQncyBhY2Nlc3NpYmxlIGludGVybmFsbHkuXG5cbkZpbmFsbHksIEkgd2lsbCBjaGVjayB0aGUgcmVtYWluaW5nIGZ1bmN0aW9ucyBvZiBpbnRlcmVzdC4gSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciBgdmZzX2lub2RlX2FuZF9kaXJfaGF2ZV9zYW1lX293bmVyYCBhbmQgYHZmc19pbm9kZXNfaGF2ZV9zYW1lX293bmVyYCBhcmUgc3RhdGljIGZ1bmN0aW9ucy4gVGhpcyB3aWxsIGluZmx1ZW5jZSBob3cgYW5kIHdoZXJlIHRoZXkgY2FuIGJlIHVzZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MTcyLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTk4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDM6MzM6NDEuMDQ0NTYxNzQ4WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzA3MTMxMDg1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZmc19pbm9kZV9hbmRfZGlyX2hhdmVfc2FtZV9vd25lclwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9uYW1laS5jPTEyNjM9aW50IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSlcXG4tLVxcbmZzL25hbWVpLmMtMTI3Ni0gKi9cXG5mcy9uYW1laS5jOjEyNzc6c3RhdGljIGludCB2ZnNfaW5vZGVfYW5kX2Rpcl9oYXZlX3NhbWVfb3duZXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuZnMvbmFtZWkuYy0xMjc4LVxcdFxcdFxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IG5hbWVpZGF0YSAqbmQpXFxuLS1cXG5mcy9uYW1laS5jPTEzNDA9c3RhdGljIGlubGluZSBpbnQgbWF5X2ZvbGxvd19saW5rKHN0cnVjdCBuYW1laWRhdGEgKm5kLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbi0tXFxuZnMvbmFtZWkuYy0xMzU4LVxcdC8qIEFsbG93ZWQgaWYgcGFyZW50IGRpcmVjdG9yeSBhbmQgbGluayBvd25lciBtYXRjaC4gKi9cXG5mcy9uYW1laS5jOjEzNTk6XFx0cmV0ID0gdmZzX2lub2RlX2FuZF9kaXJfaGF2ZV9zYW1lX293bmVyKGlkbWFwLCBpbm9kZSwgbmQpO1xcbmZzL25hbWVpLmMtMTM2MC1cXHRpZiAocmV0IFxcdTAwM2M9IDApXFxuLS1cXG5mcy9uYW1laS5jPTE1MDk9c3RhdGljIGludCBtYXlfY3JlYXRlX2luX3N0aWNreShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IG5hbWVpZGF0YSAqbmQsXFxuLS1cXG5mcy9uYW1laS5jLTE1MjMtXFxuZnMvbmFtZWkuYzoxNTI0OlxcdHJldCA9IHZmc19pbm9kZV9hbmRfZGlyX2hhdmVfc2FtZV9vd25lcihpZG1hcCwgaW5vZGUsIG5kKTtcXG5mcy9uYW1laS5jLTE1MjUtXFx0aWYgKHJldCBcXHUwMDNjPSAwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwMzozMzo0My43NTE3MDExMjNaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI3ODM5Mjg0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlLCB0aGUgc3RhdGljIG5hdHVyZSBvZiB0aGVzZSB0aGluZ3MuLi4gcmlnaHQuIFNvLCB0aGUga2V5IGZvY3VzIHN5bWJvbHMgSSBuZWVkIHRvIHplcm8gaW4gb24gYXJlOlxuXG4qKkZvY3VzIFN5bWJvbHMgSWRlbnRpZmllZCoqXG5cbkkgbmVlZCB0byBtYWtlIHN1cmUgSSdtIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG86XG5cbiogICBgdmZzX2lub2RlX2lzX293bmVkX2J5X21lYFxuKiAgIGBhZnNfaXNfb3duZWRfYnlfbWVgXG4qICAgYGFmc19oYXZlX3NhbWVfb3duZXJgXG4qICAgYGlub2RlX293bmVyX29yX2NhcGFibGVgXG4qICAgYHZmc19zZXRsZWFzZWBcbiogICBgX19jaGVja19zdGlja3lgXG5cbipIbW0sIGB2ZnNfc2V0bGVhc2VgIGlzIGEgcmF0aGVyIGxhcmdlIGZ1bmN0aW9uLCBidXQgSSBhbSBub3QgYXMgd29ycmllZCBub3cuKlxuXG5MZXQgbWUgcXVpY2tseSB2ZXJpZnkgaWYgYF9fY2hlY2tfc3RpY2t5YCBpcyBleHBvcnRlZC4gVGhhdCdzIHRoZSBvbmUgSSdtIGEgbGl0dGxlIGxlc3MgZmFtaWxpYXIgd2l0aCwgc28gSSBuZWVkIHRvIG1ha2Ugc3VyZSBpdCdzIGFjY2Vzc2libGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MTE2LCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAzOjMzOjQ3LjAzMDA5ODE0NloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM5NDE1NDk0MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX2NoZWNrX3N0aWNreVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9uYW1laS5jPTM3NDI9RVhQT1JUX1NZTUJPTCh1c2VyX3BhdGhfYXQpO1xcbmZzL25hbWVpLmMtMzc0My1cXG5mcy9uYW1laS5jOjM3NDQ6aW50IF9fY2hlY2tfc3RpY2t5KHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG5mcy9uYW1laS5jLTM3NDUtXFx0XFx0ICAgc3RydWN0IGlub2RlICppbm9kZSlcXG4tLVxcbmZzL25hbWVpLmMtMzc1Ni19XFxuZnMvbmFtZWkuYzozNzU3OkVYUE9SVF9TWU1CT0woX19jaGVja19zdGlja3kpO1xcbmZzL25hbWVpLmMtMzc1OC1cXG4tLVxcbmluY2x1ZGUvbGludXgvZnMuaD0yNzAyPXN0YXRpYyBpbmxpbmUgaW50IHBhdGhfcGVybWlzc2lvbihjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCwgaW50IG1hc2spXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2ZzLmgtMjcwNi19XFxuaW5jbHVkZS9saW51eC9mcy5oOjI3MDc6aW50IF9fY2hlY2tfc3RpY2t5KHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG5pbmNsdWRlL2xpbnV4L2ZzLmgtMjcwOC1cXHRcXHQgICBzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvZnMuaD0zNTY0PXN0YXRpYyBpbmxpbmUgaW50IGNoZWNrX3N0aWNreShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4tLVxcbmluY2x1ZGUvbGludXgvZnMuaC0zNTY5LVxcbmluY2x1ZGUvbGludXgvZnMuaDozNTcwOlxcdHJldHVybiBfX2NoZWNrX3N0aWNreShpZG1hcCwgZGlyLCBpbm9kZSk7XFxuaW5jbHVkZS9saW51eC9mcy5oLTM1NzEtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwMzozMzo0OS40MjQyNTk1OTdaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDExODUxMjQwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBFeHBvcnRlZCBTdGF0ZSoqXG5cblJpZ2h0LCBzbyB0aGUgc3lzdGVtIGluZGljYXRlcyB0aGUgZGF0YSBpcywgaW4gZmFjdCwgYmVpbmcgZXhwb3J0ZWQuIE5vdywgbXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgc2VjdXJpdHksIG5hdHVyYWxseS4gV2UgbmVlZCB0byBjb25maXJtICpob3cqIHRoaXMgZXhwb3J0IGlzIGhhcHBlbmluZyBhbmQsIGNyaXRpY2FsbHksIHdobyBoYXMgYWNjZXNzIGFuZCBob3cgdGhhdCBhY2Nlc3MgaXMgbWFuYWdlZC4gVGhlIGZpcnN0IHBsYWNlIEknbSBnb2luZyB0byBsb29rIGlzIGBpbm9kZV9vd25lcl9vcl9jYXBhYmxlYC4gVGhpcyBmdW5jdGlvbiwgb3IgYSBzaW1pbGFyIG9uZSBpbiB0aGUgcmVsZXZhbnQga2VybmVsIGNvbnRleHQsIGlzIGNydWNpYWwgZm9yIGFzc2Vzc2luZyBhY2Nlc3MgY29udHJvbC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlIGFwcHJvcHJpYXRlIGNoZWNrcyBhcmUgYmVpbmcgcGVyZm9ybWVkIHRvIGVuc3VyZSB0aGF0IG9ubHkgYXV0aG9yaXplZCB1c2VycyBvciBwcm9jZXNzZXMgYXJlIGludGVyYWN0aW5nIHdpdGggdGhpcyBleHBvcnRlZCBkYXRhLiBJJ2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IGBpbm9kZV9vd25lcl9vcl9jYXBhYmxlYCAob3Igd2hhdGV2ZXIgaXQncyBjYWxsZWQpIGlzIGNvcnJlY3RseSBoYW5kbGluZyBwZXJtaXNzaW9ucywgY2FwYWJpbGl0aWVzLCBhbmQgcG90ZW50aWFsbHkgZXh0ZW5kZWQgYXR0cmlidXRlcy4gV2UgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gdGhlIGV4cG9ydCBkb2Vzbid0IGludHJvZHVjZSBhbnkgZXhwbG9pdGFibGUgdnVsbmVyYWJpbGl0aWVzIHJlbGF0ZWQgdG8gcHJpdmlsZWdlIGVzY2FsYXRpb24gb3IgdW5hdXRob3JpemVkIGRhdGEgYWNjZXNzLiBMZXQncyBzZWUgd2hhdCB0aGUgY29kZSBhcm91bmQgdGhhdCBmdW5jdGlvbiB0ZWxscyB1cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg3ODgsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwMzozMzo1My41NDI3NzYwMDRaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwNDc5NTA2ODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW5vZGVfb3duZXJfb3JfY2FwYWJsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy85cC9hY2wuYz0xNTU9aW50IHY5ZnNfaW9wX3NldF9hY2woc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG4tLVxcbmZzLzlwL2FjbC5jLTE5Mi1cXG5mcy85cC9hY2wuYzoxOTM6XFx0aWYgKCFpbm9kZV9vd25lcl9vcl9jYXBhYmxlKFxcdTAwMjZub3BfbW50X2lkbWFwLCBpbm9kZSkpIHtcXG5mcy85cC9hY2wuYy0xOTQtXFx0XFx0cmV0dmFsID0gLUVQRVJNO1xcbi0tXFxuZnMvYXR0ci5jPTE2OD1pbnQgc2V0YXR0cl9wcmVwYXJlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuLS1cXG5mcy9hdHRyLmMtMjE2LVxcbmZzL2F0dHIuYzoyMTc6XFx0XFx0aWYgKCFpbm9kZV9vd25lcl9vcl9jYXBhYmxlKGlkbWFwLCBpbm9kZSkpXFxuZnMvYXR0ci5jLTIxOC1cXHRcXHRcXHRyZXR1cm4gLUVQRVJNO1xcbi0tXFxuZnMvYXR0ci5jLTIzMS1cXHRpZiAoaWFfdmFsaWQgXFx1MDAyNiAoQVRUUl9NVElNRV9TRVQgfCBBVFRSX0FUSU1FX1NFVCB8IEFUVFJfVElNRVNfU0VUKSkge1xcbmZzL2F0dHIuYzoyMzI6XFx0XFx0aWYgKCFpbm9kZV9vd25lcl9vcl9jYXBhYmxlKGlkbWFwLCBpbm9kZSkpXFxuZnMvYXR0ci5jLTIzMy1cXHRcXHRcXHRyZXR1cm4gLUVQRVJNO1xcbi0tXFxuZnMvYXR0ci5jPTM4ND1pbnQgbWF5X3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5mcy9hdHRyLmMtNDAxLVxcbmZzL2F0dHIuYzo0MDI6XFx0XFx0aWYgKCFpbm9kZV9vd25lcl9vcl9jYXBhYmxlKGlkbWFwLCBpbm9kZSkpIHtcXG5mcy9hdHRyLmMtNDAzLVxcdFxcdFxcdGVycm9yID0gaW5vZGVfcGVybWlzc2lvbihpZG1hcCwgaW5vZGUsIE1BWV9XUklURSk7XFxuLS1cXG5mcy9idHJmcy9pb2N0bC5jPTExMzg9c3RhdGljIG5vaW5saW5lIGludCBfX2J0cmZzX2lvY3RsX3NuYXBfY3JlYXRlKHN0cnVjdCBmaWxlICpmaWxlLFxcbi0tXFxuZnMvYnRyZnMvaW9jdGwuYy0xMTgwLVxcdFxcdFxcdHJldCA9IC1FWERFVjtcXG5mcy9idHJmcy9pb2N0bC5jOjExODE6XFx0XFx0fSBlbHNlIGlmICghaW5vZGVfb3duZXJfb3JfY2FwYWJsZShpZG1hcCwgc3JjX2lub2RlKSkge1xcbmZzL2J0cmZzL2lvY3RsLmMtMTE4Mi1cXHRcXHRcXHQvKlxcbi0tXFxuZnMvYnRyZnMvaW9jdGwuYz0xMjk0PXN0YXRpYyBub2lubGluZSBpbnQgYnRyZnNfaW9jdGxfc3Vidm9sX3NldGZsYWdzKHN0cnVjdCBmaWxlICpmaWxlLFxcbi0tXFxuZnMvYnRyZnMvaW9jdGwuYy0xMzA0LVxcbmZzL2J0cmZzL2lvY3RsLmM6MTMwNTpcXHRpZiAoIWlub2RlX293bmVyX29yX2NhcGFibGUoZmlsZV9tbnRfaWRtYXAoZmlsZSksIGlub2RlKSlcXG5mcy9idHJmcy9pb2N0bC5jLTEzMDYtXFx0XFx0cmV0dXJuIC1FUEVSTTtcXG4tLVxcbmZzL2J0cmZzL2lvY3RsLmM9Mzg1Mz1zdGF0aWMgbG9uZyBfYnRyZnNfaW9jdGxfc2V0X3JlY2VpdmVkX3N1YnZvbChzdHJ1Y3QgZmlsZSAqZmlsZSxcXG4tLVxcbmZzL2J0cmZzL2lvY3RsLmMtMzg2NS1cXG5mcy9idHJmcy9pb2N0bC5jOjM4NjY6XFx0aWYgKCFpbm9kZV9vd25lcl9vcl9jYXBhYmxlKGlkbWFwLCBpbm9kZSkpXFxuZnMvYnRyZnMvaW9jdGwuYy0zODY3LVxcdFxcdHJldHVybiAtRVBFUk07XFxuLS1cXG5mcy9jcnlwdG8vcG9saWN5LmM9NTA1PWludCBmc2NyeXB0X2lvY3RsX3NldF9wb2xpY3koc3RydWN0IGZpbGUgKmZpbHAsIGNvbnN0IHZvaWQgX191c2VyICphcmcpXFxuLS1cXG5mcy9jcnlwdG8vcG9saWN5LmMtNTM2LVxcbmZzL2NyeXB0by9wb2xpY3kuYzo1Mzc6XFx0aWYgKCFpbm9kZV9vd25lcl9vcl9jYXBhYmxlKFxcdTAwMjZub3BfbW50X2lkbWFwLCBpbm9kZSkpXFxuZnMvY3J5cHRvL3BvbGljeS5jLTUzOC1cXHRcXHRyZXR1cm4gLUVBQ0NFUztcXG4tLVxcbmZzL2V4dDIvaW9jdGwuYz01ND1sb25nIGV4dDJfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbi0tXFxuZnMvZXh0Mi9pb2N0bC5jLTY4LVxcbmZzL2V4dDIvaW9jdGwuYzo2OTpcXHRcXHRpZiAoIWlub2RlX293bmVyX29yX2NhcGFibGUoXFx1MDAyNm5vcF9tbnRfaWRtYXAsIGlub2RlKSlcXG5mcy9leHQyL2lvY3RsLmMtNzAtXFx0XFx0XFx0cmV0dXJuIC1FUEVSTTtcXG4tLVxcbmZzL2V4dDIvaW9jdGwuYy0xMDEtXFxuZnMvZXh0Mi9pb2N0bC5jOjEwMjpcXHRcXHRpZiAoIWlub2RlX293bmVyX29yX2NhcGFibGUoXFx1MDAyNm5vcF9tbnRfaWRtYXAsIGlub2RlKSlcXG5mcy9leHQyL2lvY3RsLmMtMTAzLVxcdFxcdFxcdHJldHVybiAtRUFDQ0VTO1xcbi0tXFxuZnMvZXh0NC9pb2N0bC5jPTM3NT1zdGF0aWMgbG9uZyBzd2FwX2lub2RlX2Jvb3RfbG9hZGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuLS1cXG5mcy9leHQ0L2lvY3RsLmMtNDA1LVxcdGlmIChJU19SRE9OTFkoaW5vZGUpIHx8IElTX0FQUEVORChpbm9kZSkgfHwgSVNfSU1NVVRBQkxFKGlub2RlKSB8fFxcbmZzL2V4dDQvaW9jdGwuYzo0MDY6XFx0ICAgICFpbm9kZV9vd25lcl9vcl9jYXBhYmxlKGlkbWFwLCBpbm9kZSkgfHxcXG5mcy9leHQ0L2lvY3RsLmMtNDA3LVxcdCAgICAhY2FwYWJsZShDQVBfU1lTX0FETUlOKSkge1xcbi0tXFxuZnMvZXh0NC9pb2N0bC5jPTE1Mzg9c3RhdGljIGxvbmcgX19leHQ0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcXG4tLVxcbmZzL2V4dDQvaW9jdGwuYy0xNTU4LVxcbmZzL2V4dDQvaW9jdGwuYzoxNTU5OlxcdFxcdGlmICghaW5vZGVfb3duZXJfb3JfY2FwYWJsZShpZG1hcCwgaW5vZGUpKVxcbmZzL2V4dDQvaW9jdGwuYy0xNTYwLVxcdFxcdFxcdHJldHVybiAtRVBFUk07XFxuLS1cXG5mcy9leHQ0L2lvY3RsLmMtMTY4OC1cXHRcXHRpbnQgZXJyO1xcbmZzL2V4dDQvaW9jdGwuYzoxNjg5OlxcdFxcdGlmICghaW5vZGVfb3duZXJfb3JfY2FwYWJsZShpZG1hcCwgaW5vZGUpKVxcbmZzL2V4dDQvaW9jdGwuYy0xNjkwLVxcdFxcdFxcdHJldHVybiAtRUFDQ0VTO1xcbi0tXFxuZnMvZXh0NC9pb2N0bC5jLTE3MTAtXFx0XFx0aW50IGVycjtcXG5mcy9leHQ0L2lvY3RsLmM6MTcxMTpcXHRcXHRpZiAoIWlub2RlX293bmVyX29yX2NhcGFibGUoaWRtYXAsIGlub2RlKSlcXG5mcy9leHQ0L2lvY3RsLmMtMTcxMi1cXHRcXHRcXHRyZXR1cm4gLUVBQ0NFUztcXG4tLVxcbmZzL2V4dDQvaW9jdGwuYy0xODYwLVxcdHtcXG5mcy9leHQ0L2lvY3RsLmM6MTg2MTpcXHRcXHRpZiAoIWlub2RlX293bmVyX29yX2NhcGFibGUoaWRtYXAsIGlub2RlKSlcXG5mcy9leHQ0L2lvY3RsLmMtMTg2Mi1cXHRcXHRcXHRyZXR1cm4gLUVBQ0NFUztcXG4tLVxcbmZzL2YyZnMvZmlsZS5jPTIyNzk9c3RhdGljIGludCBmMmZzX2lvY19zdGFydF9hdG9taWNfd3JpdGUoc3RydWN0IGZpbGUgKmZpbHAsIGJvb2wgdHJ1bmNhdGUpXFxuLS1cXG5mcy9mMmZzL2ZpbGUuYy0yMjkwLVxcbmZzL2YyZnMvZmlsZS5jOjIyOTE6XFx0aWYgKCFpbm9kZV9vd25lcl9vcl9jYXBhYmxlKGlkbWFwLCBpbm9kZSkpXFxuZnMvZjJmcy9maWxlLmMtMjI5Mi1cXHRcXHRyZXR1cm4gLUVBQ0NFUztcXG4tLVxcbmZzL2YyZnMvZmlsZS5jPTIzOTE9c3RhdGljIGludCBmMmZzX2lvY19jb21taXRfYXRvbWljX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxwKVxcbi0tXFxuZnMvZjJmcy9maWxlLmMtMjM5OS1cXG5mcy9mMmZzL2ZpbGUuYzoyNDAwOlxcdGlmICghaW5vZGVfb3duZXJfb3JfY2FwYWJsZShpZG1hcCwgaW5vZGUpKVxcbmZzL2YyZnMvZmlsZS5jLTI0MDEtXFx0XFx0cmV0dXJuIC1FQUNDRVM7XFxuLS1cXG5mcy9mMmZzL2ZpbGUuYz0yNDI2PXN0YXRpYyBpbnQgZjJmc19pb2NfYWJvcnRfYXRvbWljX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxwKVxcbi0tXFxuZnMvZjJmcy9maWxlLmMtMjQzNC1cXG5mcy9mMmZzL2ZpbGUuYzoyNDM1OlxcdGlmICghaW5vZGVfb3duZXJfb3JfY2FwYWJsZShpZG1hcCwgaW5vZGUpKVxcbmZzL2YyZnMvZmlsZS5jLTI0MzYtXFx0XFx0cmV0dXJuIC1FQUNDRVM7XFxuLS1cXG5mcy9mMmZzL3hhdHRyLmM9MTEzPXN0YXRpYyBpbnQgZjJmc194YXR0cl9hZHZpc2Vfc2V0KGNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyICpoYW5kbGVyLFxcbi0tXFxuZnMvZjJmcy94YXR0ci5jLTEyMS1cXG5mcy9mMmZzL3hhdHRyLmM6MTIyOlxcdGlmICghaW5vZGVfb3duZXJfb3JfY2FwYWJsZShcXHUwMDI2bm9wX21udF9pZG1hcCwgaW5vZGUpKVxcbmZzL2YyZnMveGF0dHIuYy0xMjMtXFx0XFx0cmV0dXJuIC1FUEVSTTtcXG4tLVxcbmZzL2ZjbnRsLmM9Mzk9c3RhdGljIGludCBzZXRmbChpbnQgZmQsIHN0cnVjdCBmaWxlICogZmlscCwgdW5zaWduZWQgaW50IGFyZylcXG4tLVxcbmZzL2ZjbnRsLmMtNTItXFx0aWYgKChhcmcgXFx1MDAyNiBPX05PQVRJTUUpIFxcdTAwMjZcXHUwMDI2ICEoZmlscC1cXHUwMDNlZl9mbGFncyBcXHUwMDI2IE9fTk9BVElNRSkpXFxuZnMvZmNudGwuYzo1MzpcXHRcXHRpZiAoIWlub2RlX293bmVyX29yX2NhcGFibGUoZmlsZV9tbnRfaWRtYXAoZmlscCksIGlub2RlKSlcXG5mcy9mY250bC5jLTU0LVxcdFxcdFxcdHJldHVybiAtRVBFUk07XFxuLS1cXG5mcy9mY250bC5jPTM2OT1zdGF0aWMgbG9uZyBmY250bF9zZXRfcndfaGludChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBhcmcpXFxuLS1cXG5mcy9mY250bC5jLTM3NC1cXG5mcy9mY250bC5jOjM3NTpcXHRpZiAoIWlub2RlX293bmVyX29yX2NhcGFibGUoZmlsZV9tbnRfaWRtYXAoZmlsZSksIGlub2RlKSlcXG5mcy9mY250bC5jLTM3Ni1cXHRcXHRyZXR1cm4gLUVQRVJNO1xcbi0tXFxuZnMvZmlsZV9hdHRyLmM9MjY4PWludCB2ZnNfZmlsZWF0dHJfc2V0KHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuLS1cXG5mcy9maWxlX2F0dHIuYy0yNzctXFxuZnMvZmlsZV9hdHRyLmM6Mjc4OlxcdGlmICghaW5vZGVfb3duZXJfb3JfY2FwYWJsZShpZG1hcCwgaW5vZGUpKVxcbmZzL2ZpbGVfYXR0ci5jLTI3OS1cXHRcXHRyZXR1cm4gLUVQRVJNO1xcbi0tXFxuZnMvaW5vZGUuYz0yNzM3PUVYUE9SVF9TWU1CT0woaW5vZGVfaW5pdF9vd25lcik7XFxuLS1cXG5mcy9pbm9kZS5jLTI3MzktLyoqXFxuZnMvaW5vZGUuYzoyNzQwOiAqIGlub2RlX293bmVyX29yX2NhcGFibGUgLSBjaGVjayBjdXJyZW50IHRhc2sgcGVybWlzc2lvbnMgdG8gaW5vZGVcXG5mcy9pbm9kZS5jLTI3NDEtICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnQgdGhlIGlub2RlIHdhcyBmb3VuZCBmcm9tXFxuLS1cXG5mcy9pbm9kZS5jLTI3NTItICovXFxuZnMvaW5vZGUuYzoyNzUzOmJvb2wgaW5vZGVfb3duZXJfb3JfY2FwYWJsZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSlcXG5mcy9pbm9kZS5jLTI3NTQte1xcbi0tXFxuZnMvaW5vZGUuYy0yNzcwLX1cXG5mcy9pbm9kZS5jOjI3NzE6RVhQT1JUX1NZTUJPTChpbm9kZV9vd25lcl9vcl9jYXBhYmxlKTtcXG5mcy9pbm9kZS5jLTI3NzItXFxuLS1cXG5mcy9uYW1laS5jPTE0Mjc9aW50IG1heV9saW5rYXQoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIGNvbnN0IHN0cnVjdCBwYXRoICpsaW5rKVxcbi0tXFxuZnMvbmFtZWkuYy0xNDQyLVxcdGlmIChzYWZlX2hhcmRsaW5rX3NvdXJjZShpZG1hcCwgaW5vZGUpIHx8XFxuZnMvbmFtZWkuYzoxNDQzOlxcdCAgICBpbm9kZV9vd25lcl9vcl9jYXBhYmxlKGlkbWFwLCBpbm9kZSkpXFxuZnMvbmFtZWkuYy0xNDQ0LVxcdFxcdHJldHVybiAwO1xcbi0tXFxuZnMvbmFtZWkuYz00MzM3PXN0YXRpYyBpbnQgbWF5X29wZW4oc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoLFxcbi0tXFxuZnMvbmFtZWkuYy00Mzg5LVxcdC8qIE9fTk9BVElNRSBjYW4gb25seSBiZSBzZXQgYnkgdGhlIG93bmVyIG9yIHN1cGVydXNlciAqL1xcbmZzL25hbWVpLmM6NDM5MDpcXHRpZiAoZmxhZyBcXHUwMDI2IE9fTk9BVElNRSBcXHUwMDI2XFx1MDAyNiAhaW5vZGVfb3duZXJfb3JfY2FwYWJsZShpZG1hcCwgaW5vZGUpKVxcbmZzL25hbWVpLmMtNDM5MS1cXHRcXHRyZXR1cm4gLUVQRVJNO1xcbi0tXFxuZnMvb3ZlcmxheWZzL2ZpbGUuYz0yOD1zdGF0aWMgc3RydWN0IGZpbGUgKm92bF9vcGVuX3JlYWxmaWxlKGNvbnN0IHN0cnVjdCBmaWxlICpmaWxlLFxcbi0tXFxuZnMvb3ZlcmxheWZzL2ZpbGUuYy00Ny1cXHRcXHR9IGVsc2Uge1xcbmZzL292ZXJsYXlmcy9maWxlLmM6NDg6XFx0XFx0XFx0aWYgKCFpbm9kZV9vd25lcl9vcl9jYXBhYmxlKHJlYWxfaWRtYXAsIHJlYWxpbm9kZSkpXFxuZnMvb3ZlcmxheWZzL2ZpbGUuYy00OS1cXHRcXHRcXHRcXHRmbGFncyBcXHUwMDI2PSB+T19OT0FUSU1FO1xcbi0tXFxuZnMvb3ZlcmxheWZzL2lub2RlLmM9NTIzPWludCBvdmxfc2V0X2FjbChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbi0tXFxuZnMvb3ZlcmxheWZzL2lub2RlLmMtNTM2LVxcdFxcdHJldHVybiBhY2wgPyAtRUFDQ0VTIDogMDtcXG5mcy9vdmVybGF5ZnMvaW5vZGUuYzo1Mzc6XFx0aWYgKCFpbm9kZV9vd25lcl9vcl9jYXBhYmxlKFxcdTAwMjZub3BfbW50X2lkbWFwLCBpbm9kZSkpXFxuZnMvb3ZlcmxheWZzL2lub2RlLmMtNTM4LVxcdFxcdHJldHVybiAtRVBFUk07XFxuLS1cXG5mcy9vdmVybGF5ZnMvdXRpbC5jPTY1Nz1zdHJ1Y3QgZmlsZSAqb3ZsX3BhdGhfb3Blbihjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCwgaW50IGZsYWdzKVxcbi0tXFxuZnMvb3ZlcmxheWZzL3V0aWwuYy02ODEtXFx0LyogT19OT0FUSU1FIGlzIGFuIG9wdGltaXphdGlvbiwgZG9uJ3QgZmFpbCBpZiBub3QgcGVybWl0dGVkICovXFxuZnMvb3ZlcmxheWZzL3V0aWwuYzo2ODI6XFx0aWYgKGlub2RlX293bmVyX29yX2NhcGFibGUocmVhbF9pZG1hcCwgaW5vZGUpKVxcbmZzL292ZXJsYXlmcy91dGlsLmMtNjgzLVxcdFxcdGZsYWdzIHw9IE9fTk9BVElNRTtcXG4tLVxcbmZzL3Bvc2l4X2FjbC5jPTkzNT1zZXRfcG9zaXhfYWNsKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuLS1cXG5mcy9wb3NpeF9hY2wuYy05NDYtXFx0XFx0cmV0dXJuIGFjbCA/IC1FQUNDRVMgOiAwO1xcbmZzL3Bvc2l4X2FjbC5jOjk0NzpcXHRpZiAoIWlub2RlX293bmVyX29yX2NhcGFibGUoaWRtYXAsIGlub2RlKSlcXG5mcy9wb3NpeF9hY2wuYy05NDgtXFx0XFx0cmV0dXJuIC1FUEVSTTtcXG4tLVxcbmZzL3hhdHRyLmM9MTI2PXhhdHRyX3Blcm1pc3Npb24oc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5mcy94YXR0ci5jLTE2Ny1cXHRcXHRcXHRcXHRicmVhaztcXG5mcy94YXR0ci5jOjE2ODpcXHRcXHRcXHRpZiAoaW5vZGVfb3duZXJfb3JfY2FwYWJsZShpZG1hcCwgaW5vZGUpKVxcbmZzL3hhdHRyLmMtMTY5LVxcdFxcdFxcdFxcdGJyZWFrO1xcbi0tXFxuaW5jbHVkZS9saW51eC9mcy5oPTE3NTI9c3RhdGljIGlubGluZSBib29sIGZpbGVfd3JpdGVfbm90X3N0YXJ0ZWQoY29uc3Qgc3RydWN0IGZpbGUgKmZpbGUpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2ZzLmgtMTc1OC1cXG5pbmNsdWRlL2xpbnV4L2ZzLmg6MTc1OTpib29sIGlub2RlX293bmVyX29yX2NhcGFibGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xcbmluY2x1ZGUvbGludXgvZnMuaC0xNzYwLVxcbi0tXFxuaW5jbHVkZS9saW51eC9mcy5oPTI0NTA9c3RhdGljIGlubGluZSBib29sIGZpbGVfb3duZXJfb3JfY2FwYWJsZShjb25zdCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG5pbmNsdWRlL2xpbnV4L2ZzLmgtMjQ1MS17XFxuaW5jbHVkZS9saW51eC9mcy5oOjI0NTI6XFx0cmV0dXJuIGlub2RlX293bmVyX29yX2NhcGFibGUoZmlsZV9tbnRfaWRtYXAoZmlsZSksIGZpbGVfaW5vZGUoZmlsZSkpO1xcbmluY2x1ZGUvbGludXgvZnMuaC0yNDUzLX1cXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYz0zMzY4PXN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9zZXR4YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0zMzgzLVxcdGlmICghc2VsaW51eF9pbml0aWFsaXplZCgpKVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzozMzg0OlxcdFxcdHJldHVybiAoaW5vZGVfb3duZXJfb3JfY2FwYWJsZShpZG1hcCwgaW5vZGUpID8gMCA6IC1FUEVSTSk7XFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTMzODUtXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMzM4OS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6MzM5MDpcXHRpZiAoIWlub2RlX293bmVyX29yX2NhcGFibGUoaWRtYXAsIGlub2RlKSlcXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMzM5MS1cXHRcXHRyZXR1cm4gLUVQRVJNO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwMzozMzo1Ni41OTA3MzMyNTJaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA0NTM0NTgwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqQW5hbHl6aW5nIGBpbm9kZV9vd25lcl9vcl9jYXBhYmxlYCBVc2FnZSoqXG5cblJpZ2h0LCBzbyBgaW5vZGVfb3duZXJfb3JfY2FwYWJsZWAgaXMgYSBwcmV0dHkgdWJpcXVpdG91cyBmdW5jdGlvbiwgaXNuJ3QgaXQ/IFNlZW1zIGxpa2UgaXQncyBzcHJpbmtsZWQgYWxsIG92ZXIgdGhlIGtlcm5lbCdzIGZpbGUgc3lzdGVtIGNvZGUuIEkga25vdyBpdCdzIGV4cG9ydGVkIGFuZCB1c2VkIGluIGEgdG9uIG9mIHBsYWNlcywgYnV0IEknbSB0cnlpbmcgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiBpdHMgb3ZlcmFsbCBpbXBhY3QuIEknbSBnb2luZyB0byBmb2xsb3cgdGhlIGxvZ2ljIGNoYWluIGZyb20gb25lIG9mIGl0cyB0eXBpY2FsIGVudHJ5IHBvaW50cy5cblxuTGV0J3Mgc3RhcnQgYnkgZGlnZ2luZyBpbnRvIGB2ZnNfc2V0bGVhc2VgLiBUaGF0J3MgYSByZWFzb25hYmxlIHBsYWNlIHRvIGJlZ2luLCBnaXZlbiB0aGF0IGl0J3MgYSBjcml0aWNhbCBmdW5jdGlvbiBmb3IgbWFuYWdpbmcgZmlsZSBsb2NraW5nL293bmVyc2hpcC4gSSBzdXNwZWN0IGBpbm9kZV9vd25lcl9vcl9jYXBhYmxlYCBpcyBsaWtlbHkgaW52b2x2ZWQgaW4gdGhlcmUgYXMgcGFydCBvZiBsZWFzZSBjaGVja3MgYW5kIHBlcm1pc3Npb25zLiBMZXQncyBzZWUgaG93IGl0J3MgdXNlZCB0aGVyZSBhbmQgdGhlbiBmb2xsb3cgdGhlIGJyZWFkY3J1bWJzIGZyb20gdGhlcmUuIEl0IHNob3VsZCBxdWlja2x5IHJldmVhbCBpZiBJIG5lZWQgdG8gbG9vayBpbnRvIG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyNzM4LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDM6MzQ6MDAuNjM2MDgzNjA5WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTEyMTAyOTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZmc19zZXRsZWFzZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9sb2Nrcy5jPTIxMTc9RVhQT1JUX1NZTUJPTF9HUEwoa2VybmVsX3NldGxlYXNlKTtcXG4tLVxcbmZzL2xvY2tzLmMtMjExOS0vKipcXG5mcy9sb2Nrcy5jOjIxMjA6ICogdmZzX3NldGxlYXNlICAgICAgICAtICAgICAgIHNldHMgYSBsZWFzZSBvbiBhbiBvcGVuIGZpbGVcXG5mcy9sb2Nrcy5jLTIxMjEtICogQGZpbHA6XFx0ZmlsZSBwb2ludGVyXFxuLS1cXG5mcy9sb2Nrcy5jPTIxMzY9aW50XFxuZnMvbG9ja3MuYzoyMTM3OnZmc19zZXRsZWFzZShzdHJ1Y3QgZmlsZSAqZmlscCwgaW50IGFyZywgc3RydWN0IGZpbGVfbGVhc2UgKipsZWFzZSwgdm9pZCAqKnByaXYpXFxuZnMvbG9ja3MuYy0yMTM4LXtcXG4tLVxcbmZzL2xvY2tzLmMtMjE1MS19XFxuZnMvbG9ja3MuYzoyMTUyOkVYUE9SVF9TWU1CT0xfR1BMKHZmc19zZXRsZWFzZSk7XFxuZnMvbG9ja3MuYy0yMTUzLVxcbmZzL2xvY2tzLmM9MjE1ND1zdGF0aWMgaW50IGRvX2ZjbnRsX2FkZF9sZWFzZSh1bnNpZ25lZCBpbnQgZmQsIHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgZmxhdm9yLCBpbnQgYXJnKVxcbi0tXFxuZnMvbG9ja3MuYy0yMTcwLVxcbmZzL2xvY2tzLmM6MjE3MTpcXHRlcnJvciA9IHZmc19zZXRsZWFzZShmaWxwLCBhcmcsIFxcdTAwMjZmbCwgKHZvaWQgKiopXFx1MDAyNm5ldyk7XFxuZnMvbG9ja3MuYy0yMTcyLVxcdGlmIChmbClcXG4tLVxcbmZzL2xvY2tzLmM9MjE4OT1pbnQgZmNudGxfc2V0bGVhc2UodW5zaWduZWQgaW50IGZkLCBzdHJ1Y3QgZmlsZSAqZmlscCwgaW50IGFyZylcXG4tLVxcbmZzL2xvY2tzLmMtMjE5NC1cXHRpZiAoYXJnID09IEZfVU5MQ0spXFxuZnMvbG9ja3MuYzoyMTk1OlxcdFxcdHJldHVybiB2ZnNfc2V0bGVhc2UoZmlscCwgRl9VTkxDSywgTlVMTCwgKHZvaWQgKiopXFx1MDAyNmZpbHApO1xcbmZzL2xvY2tzLmMtMjE5Ni1cXHRyZXR1cm4gZG9fZmNudGxfYWRkX2xlYXNlKGZkLCBmaWxwLCBGTF9MRUFTRSwgYXJnKTtcXG4tLVxcbmZzL2xvY2tzLmM9MjIwOT1pbnQgZmNudGxfc2V0ZGVsZWcodW5zaWduZWQgaW50IGZkLCBzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IGRlbGVnYXRpb24gKmRlbGVnKVxcbi0tXFxuZnMvbG9ja3MuYy0yMjE1LVxcdGlmIChkZWxlZy1cXHUwMDNlZF90eXBlID09IEZfVU5MQ0spXFxuZnMvbG9ja3MuYzoyMjE2OlxcdFxcdHJldHVybiB2ZnNfc2V0bGVhc2UoZmlscCwgRl9VTkxDSywgTlVMTCwgKHZvaWQgKiopXFx1MDAyNmZpbHApO1xcbmZzL2xvY2tzLmMtMjIxNy1cXHRyZXR1cm4gZG9fZmNudGxfYWRkX2xlYXNlKGZkLCBmaWxwLCBGTF9ERUxFRywgZGVsZWctXFx1MDAzZWRfdHlwZSk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2ZpbGVsb2NrLmg9MjM0PWludCBrZXJuZWxfc2V0bGVhc2Uoc3RydWN0IGZpbGUgKiwgaW50LCBzdHJ1Y3QgZmlsZV9sZWFzZSAqKiwgdm9pZCAqKik7XFxuaW5jbHVkZS9saW51eC9maWxlbG9jay5oOjIzNTppbnQgdmZzX3NldGxlYXNlKHN0cnVjdCBmaWxlICosIGludCwgc3RydWN0IGZpbGVfbGVhc2UgKiosIHZvaWQgKiopO1xcbmluY2x1ZGUvbGludXgvZmlsZWxvY2suaC0yMzYtaW50IGxlYXNlX21vZGlmeShzdHJ1Y3QgZmlsZV9sZWFzZSAqLCBpbnQsIHN0cnVjdCBsaXN0X2hlYWQgKik7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2ZpbGVsb2NrLmg9NDIxPXN0YXRpYyBpbmxpbmUgaW50IGtlcm5lbF9zZXRsZWFzZShzdHJ1Y3QgZmlsZSAqZmlscCwgaW50IGFyZyxcXG4tLVxcbmluY2x1ZGUvbGludXgvZmlsZWxvY2suaC00MjYtXFxuaW5jbHVkZS9saW51eC9maWxlbG9jay5oOjQyNzpzdGF0aWMgaW5saW5lIGludCB2ZnNfc2V0bGVhc2Uoc3RydWN0IGZpbGUgKmZpbHAsIGludCBhcmcsXFxuaW5jbHVkZS9saW51eC9maWxlbG9jay5oLTQyOC1cXHRcXHRcXHQgICAgICAgc3RydWN0IGZpbGVfbGVhc2UgKipsZWFzZSwgdm9pZCAqKnByaXYpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAzOjM0OjAzLjE0ODE5NTgyOVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTI1ODQ0OTc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBGaWxlIE93bmVyc2hpcCBWZXJpZmljYXRpb24gaW4gdGhlIEtlcm5lbCoqXG5cbk9rYXksIHNvIGB2ZnNfc2V0bGVhc2VgIGlzIGF2YWlsYWJsZSBmb3IgbXkgaW52ZXN0aWdhdGlvbiwgdGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGtlcm5lbCBhY3R1YWxseSAqZGV0ZXJtaW5lcyogaWYgYSB1c2VyIG93bnMgYW4gaW5vZGUuIExldCBtZSBzZWUuLi4gYHZmc19pbm9kZV9pc19vd25lZF9ieV9tZWAuLi4gQWgsIGl0J3Mgbm90IGV4cG9ydGVkLCBidXQgaXQncyBub3Qgc3RhdGljIGVpdGhlciwgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIFdhaXQsIGl0J3MgZGVmaW5lZCBpbiBgZnMvbmFtZWkuY2AuIFNpbmNlIGl0J3Mgbm90IHN0YXRpYywgSSBjYW4gZGlyZWN0bHkgYW5hbHl6ZSBgdmZzX2lub2RlX2lzX293bmVkX2J5X21lYCBpdHNlbGYsIHRoYXQncyBwcmVmZXJhYmxlLiBJIHRoaW5rIGl0IHdpbGwgYmUgYmV0dGVyIHRvIGxvb2sgYXQgaXQgZGlyZWN0bHkgYW5kIG5vdCBqdXN0IHRoZSBmdW5jdGlvbnMgdGhhdCBjYWxsIGl0LlxuXG5MZXQncyBjaGVjayBgYWZzX2lzX293bmVkX2J5X21lYCBhbmQgYGFmc19oYXZlX3NhbWVfb3duZXJgIHRvIHNlZSBpZiB0aGVyZSBpcyBhbnkgb3ZlcmxhcCBpbiBiZWhhdmlvdXIgb3IgaW1wbGVtZW50YXRpb24uIFRob3NlIGFyZSBkZWZpbmVkIGluIGBmcy9hZnMvc2VjdXJpdHkuY2AsIHNvIEkgc2hvdWxkIGtlZXAgdGhvc2UgaW4gbWluZCBhcyB3ZWxsLiBJIG5lZWQgdG8ga2VlcCB0aG9zZSBpbiBtaW5kIGFzIHRoZXkgbWF5IHByb3ZpZGUgc29tZSBpbnNpZ2h0cyBpbnRvIHNpbWlsYXIgY2hlY2tzIGZvciBkaWZmZXJlbnQgZmlsZXN5c3RlbXMuXG5cbk5vdywgd2hhdCBhYm91dCB0aGUgbW9yZSBnZW5lcmFsIG93bmVyc2hpcCBjaGVja3M/IEknbGwgbG9vayBhdCBgY2hvd25fb2tgIGFuZCBgY2hncnBfb2tgIG5leHQuIEhtbSwgdGhleSdyZSBzdGF0aWMgd2l0aGluIGBmcy9hdHRyLmNgLiBTaW5jZSB0aGV5J3JlIHN0YXRpYywgSSdsbCBuZWVkIHRvIGZvY3VzIG9uIHRoZWlyIGNhbGxlciwgd2hpY2ggbG9va3MgdG8gYmUgYHNldGF0dHJfcHJlcGFyZWAsIGFuZCBmb3J0dW5hdGVseSwgKnRoYXQqIGlzIGV4cG9ydGVkLiBJJ3ZlIGdvdCBhIGxvdCB0byBleGFtaW5lIGJ1dCB0aGlzIGFsbCBzZWVtcyBsb2dpY2FsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzgwMiwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwMzozNDowOC4wNzQwNDYxODhaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2Nzk5OTA3OTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2V0YXR0cl9wcmVwYXJlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcG9ydGluZy5yc3Q9MzI4PXNpemUgdXBkYXRlIGFuZCBvbiBmaW5hbGx5IG9uLWRpc2sgdHJ1bmNhdGlvbiB3aGljaCBzaG91bGQgbm90IGZhaWwuXFxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wb3J0aW5nLnJzdDozMjk6c2V0YXR0cl9wcmVwYXJlICh3aGljaCB1c2VkIHRvIGJlIGlub2RlX2NoYW5nZV9vaykgbm93IGluY2x1ZGVzIHRoZSBzaXplIGNoZWNrc1xcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcG9ydGluZy5yc3QtMzMwLWZvciBBVFRSX1NJWkUgYW5kIG11c3QgYmUgY2FsbGVkIGluIHRoZSBiZWdpbm5pbmcgb2YgLVxcdTAwM2VzZXRhdHRyIHVuY29uZGl0aW9uYWxseS5cXG4tLVxcbmZzLzlwL3Zmc19pbm9kZS5jPTEwMTg9c3RhdGljIGludCB2OWZzX3Zmc19zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbi0tXFxuZnMvOXAvdmZzX2lub2RlLmMtMTAyNy1cXHRwOV9kZWJ1ZyhQOV9ERUJVR19WRlMsIFxcXCJcXFxcblxcXCIpO1xcbmZzLzlwL3Zmc19pbm9kZS5jOjEwMjg6XFx0cmV0dmFsID0gc2V0YXR0cl9wcmVwYXJlKFxcdTAwMjZub3BfbW50X2lkbWFwLCBkZW50cnksIGlhdHRyKTtcXG5mcy85cC92ZnNfaW5vZGUuYy0xMDI5LVxcdGlmIChyZXR2YWwpXFxuLS1cXG5mcy85cC92ZnNfaW5vZGVfZG90bC5jPTUxMz1pbnQgdjlmc192ZnNfc2V0YXR0cl9kb3RsKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbi0tXFxuZnMvOXAvdmZzX2lub2RlX2RvdGwuYy01MjYtXFxuZnMvOXAvdmZzX2lub2RlX2RvdGwuYzo1Mjc6XFx0cmV0dmFsID0gc2V0YXR0cl9wcmVwYXJlKFxcdTAwMjZub3BfbW50X2lkbWFwLCBkZW50cnksIGlhdHRyKTtcXG5mcy85cC92ZnNfaW5vZGVfZG90bC5jLTUyOC1cXHRpZiAocmV0dmFsKVxcbi0tXFxuZnMvYWRmcy9pbm9kZS5jPTMwMj1hZGZzX3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlhdHRyICphdHRyKVxcbi0tXFxuZnMvYWRmcy9pbm9kZS5jLTMwOC1cXHRcXG5mcy9hZGZzL2lub2RlLmM6MzA5OlxcdGVycm9yID0gc2V0YXR0cl9wcmVwYXJlKFxcdTAwMjZub3BfbW50X2lkbWFwLCBkZW50cnksIGF0dHIpO1xcbmZzL2FkZnMvaW5vZGUuYy0zMTAtXFxuLS1cXG5mcy9hZmZzL2lub2RlLmM9MjE2PWFmZnNfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaWF0dHIgKmF0dHIpXFxuLS1cXG5mcy9hZmZzL2lub2RlLmMtMjIyLVxcbmZzL2FmZnMvaW5vZGUuYzoyMjM6XFx0ZXJyb3IgPSBzZXRhdHRyX3ByZXBhcmUoXFx1MDAyNm5vcF9tbnRfaWRtYXAsIGRlbnRyeSwgYXR0cik7XFxuZnMvYWZmcy9pbm9kZS5jLTIyNC1cXHRpZiAoZXJyb3IpXFxuLS1cXG5mcy9hdHRyLmMtMjktICogdW5jb25kaXRpb25hbGx5IGlmIFNfSVhHUlAgaXMgc2V0LiBPdGhlcndpc2Ugd2UgaGF2ZSB0aGUgZXhhY3Qgc2FtZVxcbmZzL2F0dHIuYzozMDogKiByZXF1aXJlbWVudHMgYXMgc2V0YXR0cl9wcmVwYXJlKCkgYW5kIHNldGF0dHJfY29weSgpLlxcbmZzL2F0dHIuYy0zMS0gKlxcbi0tXFxuZnMvYXR0ci5jPTEyND1zdGF0aWMgaW50IGNoZ3JwX29rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbi0tXFxuZnMvYXR0ci5jLTE0Ny0vKipcXG5mcy9hdHRyLmM6MTQ4OiAqIHNldGF0dHJfcHJlcGFyZSAtIGNoZWNrIGlmIGF0dHJpYnV0ZSBjaGFuZ2VzIHRvIGEgZGVudHJ5IGFyZSBhbGxvd2VkXFxuZnMvYXR0ci5jLTE0OS0gKiBAaWRtYXA6XFx0aWRtYXAgb2YgdGhlIG1vdW50IHRoZSBpbm9kZSB3YXMgZm91bmQgZnJvbVxcbi0tXFxuZnMvYXR0ci5jLTE2Ny0gKi9cXG5mcy9hdHRyLmM6MTY4OmludCBzZXRhdHRyX3ByZXBhcmUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG5mcy9hdHRyLmMtMTY5LVxcdFxcdCAgICBzdHJ1Y3QgaWF0dHIgKmF0dHIpXFxuLS1cXG5mcy9hdHRyLmMtMjQ3LX1cXG5mcy9hdHRyLmM6MjQ4OkVYUE9SVF9TWU1CT0woc2V0YXR0cl9wcmVwYXJlKTtcXG5mcy9hdHRyLmMtMjQ5LVxcbi0tXFxuZnMvYnRyZnMvaW5vZGUuYz01Mjk1PXN0YXRpYyBpbnQgYnRyZnNfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbi0tXFxuZnMvYnRyZnMvaW5vZGUuYy01MzA0LVxcbmZzL2J0cmZzL2lub2RlLmM6NTMwNTpcXHRyZXQgPSBzZXRhdHRyX3ByZXBhcmUoaWRtYXAsIGRlbnRyeSwgYXR0cik7XFxuZnMvYnRyZnMvaW5vZGUuYy01MzA2LVxcdGlmIChyZXQpXFxuLS1cXG5mcy9jZXBoL2lub2RlLmM9MjkyMz1pbnQgY2VwaF9zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuLS1cXG5mcy9jZXBoL2lub2RlLmMtMjkzOS1cXG5mcy9jZXBoL2lub2RlLmM6Mjk0MDpcXHRlcnIgPSBzZXRhdHRyX3ByZXBhcmUoaWRtYXAsIGRlbnRyeSwgYXR0cik7XFxuZnMvY2VwaC9pbm9kZS5jLTI5NDEtXFx0aWYgKGVyciAhPSAwKVxcbi0tXFxuZnMvZWNyeXB0ZnMvaW5vZGUuYz04NzI9c3RhdGljIGludCBlY3J5cHRmc19zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbi0tXFxuZnMvZWNyeXB0ZnMvaW5vZGUuYy05MjAtXFxuZnMvZWNyeXB0ZnMvaW5vZGUuYzo5MjE6XFx0cmMgPSBzZXRhdHRyX3ByZXBhcmUoXFx1MDAyNm5vcF9tbnRfaWRtYXAsIGRlbnRyeSwgaWEpO1xcbmZzL2VjcnlwdGZzL2lub2RlLmMtOTIyLVxcdGlmIChyYylcXG4tLVxcbmZzL2VmaXZhcmZzL2lub2RlLmM9MTczPXN0YXRpYyBpbnQgZWZpdmFyZnNfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbi0tXFxuZnMvZWZpdmFyZnMvaW5vZGUuYy0xNzgtXFxuZnMvZWZpdmFyZnMvaW5vZGUuYzoxNzk6XFx0ZXJyb3IgPSBzZXRhdHRyX3ByZXBhcmUoaWRtYXAsIGRlbnRyeSwgaWF0dHIpO1xcbmZzL2VmaXZhcmZzL2lub2RlLmMtMTgwLVxcdGlmIChlcnJvcilcXG4tLVxcbmZzL2V4ZmF0L2ZpbGUuYz0zNDk9aW50IGV4ZmF0X3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG4tLVxcbmZzL2V4ZmF0L2ZpbGUuYy0zNzUtXFxuZnMvZXhmYXQvZmlsZS5jOjM3NjpcXHRlcnJvciA9IHNldGF0dHJfcHJlcGFyZShpZG1hcCwgZGVudHJ5LCBhdHRyKTtcXG5mcy9leGZhdC9maWxlLmMtMzc3LVxcdGF0dHItXFx1MDAzZWlhX3ZhbGlkID0gaWFfdmFsaWQ7XFxuLS1cXG5mcy9leHQyL2lub2RlLmM9MTYwNz1pbnQgZXh0Ml9zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuLS1cXG5mcy9leHQyL2lub2RlLmMtMTYxMi1cXG5mcy9leHQyL2lub2RlLmM6MTYxMzpcXHRlcnJvciA9IHNldGF0dHJfcHJlcGFyZShcXHUwMDI2bm9wX21udF9pZG1hcCwgZGVudHJ5LCBpYXR0cik7XFxuZnMvZXh0Mi9pbm9kZS5jLTE2MTQtXFx0aWYgKGVycm9yKVxcbi0tXFxuZnMvZXh0NC9pbm9kZS5jPTU5MzQ9aW50IGV4dDRfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbi0tXFxuZnMvZXh0NC9pbm9kZS5jLTU5NTQtXFxuZnMvZXh0NC9pbm9kZS5jOjU5NTU6XFx0ZXJyb3IgPSBzZXRhdHRyX3ByZXBhcmUoaWRtYXAsIGRlbnRyeSwgYXR0cik7XFxuZnMvZXh0NC9pbm9kZS5jLTU5NTYtXFx0aWYgKGVycm9yKVxcbi0tXFxuZnMvZjJmcy9maWxlLmM9MTA3Mz1pbnQgZjJmc19zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuLS1cXG5mcy9mMmZzL2ZpbGUuYy0xMDgzLVxcbmZzL2YyZnMvZmlsZS5jOjEwODQ6XFx0ZXJyID0gc2V0YXR0cl9wcmVwYXJlKGlkbWFwLCBkZW50cnksIGF0dHIpO1xcbmZzL2YyZnMvZmlsZS5jLTEwODUtXFx0aWYgKGVycilcXG4tLVxcbmZzL2ZhdC9maWxlLmM9NTE4PWludCBmYXRfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbi0tXFxuZnMvZmF0L2ZpbGUuYy01MzItXFxuZnMvZmF0L2ZpbGUuYzo1MzM6XFx0ZXJyb3IgPSBzZXRhdHRyX3ByZXBhcmUoaWRtYXAsIGRlbnRyeSwgYXR0cik7XFxuZnMvZmF0L2ZpbGUuYy01MzQtXFx0YXR0ci1cXHUwMDNlaWFfdmFsaWQgPSBpYV92YWxpZDtcXG4tLVxcbmZzL2Z1c2UvZGlyLmM9MjEyOD1pbnQgZnVzZV9kb19zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuLS1cXG5mcy9mdXNlL2Rpci5jLTIxNDktXFxuZnMvZnVzZS9kaXIuYzoyMTUwOlxcdGVyciA9IHNldGF0dHJfcHJlcGFyZShpZG1hcCwgZGVudHJ5LCBhdHRyKTtcXG5mcy9mdXNlL2Rpci5jLTIxNTEtXFx0aWYgKGVycilcXG4tLVxcbmZzL2dmczIvaW5vZGUuYz0yMDk5PXN0YXRpYyBpbnQgZ2ZzMl9zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbi0tXFxuZnMvZ2ZzMi9pbm9kZS5jLTIxMTgtXFxuZnMvZ2ZzMi9pbm9kZS5jOjIxMTk6XFx0ZXJyb3IgPSBzZXRhdHRyX3ByZXBhcmUoXFx1MDAyNm5vcF9tbnRfaWRtYXAsIGRlbnRyeSwgYXR0cik7XFxuZnMvZ2ZzMi9pbm9kZS5jLTIxMjAtXFx0aWYgKGVycm9yKVxcbi0tXFxuZnMvaGZzL2lub2RlLmM9NjI3PWludCBoZnNfaW5vZGVfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbi0tXFxuZnMvaGZzL2lub2RlLmMtNjMzLVxcbmZzL2hmcy9pbm9kZS5jOjYzNDpcXHRlcnJvciA9IHNldGF0dHJfcHJlcGFyZShcXHUwMDI2bm9wX21udF9pZG1hcCwgZGVudHJ5LCBhdHRyKTtcXG5mcy9oZnMvaW5vZGUuYy02MzUtXFx0aWYgKGVycm9yKVxcbi0tXFxuZnMvaGZzcGx1cy9pbm9kZS5jPTMwMD1zdGF0aWMgaW50IGhmc3BsdXNfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4tLVxcbmZzL2hmc3BsdXMvaW5vZGUuYy0zMDUtXFxuZnMvaGZzcGx1cy9pbm9kZS5jOjMwNjpcXHRlcnJvciA9IHNldGF0dHJfcHJlcGFyZShcXHUwMDI2bm9wX21udF9pZG1hcCwgZGVudHJ5LCBhdHRyKTtcXG5mcy9oZnNwbHVzL2lub2RlLmMtMzA3LVxcdGlmIChlcnJvcilcXG4tLVxcbmZzL2hvc3Rmcy9ob3N0ZnNfa2Vybi5jPTgwND1zdGF0aWMgaW50IGhvc3Rmc19zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbi0tXFxuZnMvaG9zdGZzL2hvc3Rmc19rZXJuLmMtODEzLVxcbmZzL2hvc3Rmcy9ob3N0ZnNfa2Vybi5jOjgxNDpcXHRlcnIgPSBzZXRhdHRyX3ByZXBhcmUoXFx1MDAyNm5vcF9tbnRfaWRtYXAsIGRlbnRyeSwgYXR0cik7XFxuZnMvaG9zdGZzL2hvc3Rmc19rZXJuLmMtODE1LVxcdGlmIChlcnIpXFxuLS1cXG5mcy9ocGZzL2lub2RlLmM9MjYwPWludCBocGZzX3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG4tLVxcbmZzL2hwZnMvaW5vZGUuYy0yNzctXFxuZnMvaHBmcy9pbm9kZS5jOjI3ODpcXHRlcnJvciA9IHNldGF0dHJfcHJlcGFyZShcXHUwMDI2bm9wX21udF9pZG1hcCwgZGVudHJ5LCBhdHRyKTtcXG5mcy9ocGZzL2lub2RlLmMtMjc5LVxcdGlmIChlcnJvcilcXG4tLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jPTgzMT1zdGF0aWMgaW50IGh1Z2V0bGJmc19zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtODM5LVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjg0MDpcXHRlcnJvciA9IHNldGF0dHJfcHJlcGFyZShpZG1hcCwgZGVudHJ5LCBhdHRyKTtcXG5mcy9odWdldGxiZnMvaW5vZGUuYy04NDEtXFx0aWYgKGVycm9yKVxcbi0tXFxuZnMvamZmczIvZnMuYz0xOTM9aW50IGpmZnMyX3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG4tLVxcbmZzL2pmZnMyL2ZzLmMtMTk4LVxcbmZzL2pmZnMyL2ZzLmM6MTk5OlxcdHJjID0gc2V0YXR0cl9wcmVwYXJlKFxcdTAwMjZub3BfbW50X2lkbWFwLCBkZW50cnksIGlhdHRyKTtcXG5mcy9qZmZzMi9mcy5jLTIwMC1cXHRpZiAocmMpXFxuLS1cXG5mcy9qZnMvZmlsZS5jPTkyPWludCBqZnNfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbi0tXFxuZnMvamZzL2ZpbGUuYy05Ny1cXG5mcy9qZnMvZmlsZS5jOjk4OlxcdHJjID0gc2V0YXR0cl9wcmVwYXJlKFxcdTAwMjZub3BfbW50X2lkbWFwLCBkZW50cnksIGlhdHRyKTtcXG5mcy9qZnMvZmlsZS5jLTk5LVxcdGlmIChyYylcXG4tLVxcbmZzL2tlcm5mcy9pbm9kZS5jPTExMD1pbnQga2VybmZzX2lvcF9zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuLS1cXG5mcy9rZXJuZnMvaW5vZGUuYy0xMjItXFx0ZG93bl93cml0ZShcXHUwMDI2cm9vdC1cXHUwMDNla2VybmZzX2lhdHRyX3J3c2VtKTtcXG5mcy9rZXJuZnMvaW5vZGUuYzoxMjM6XFx0ZXJyb3IgPSBzZXRhdHRyX3ByZXBhcmUoXFx1MDAyNm5vcF9tbnRfaWRtYXAsIGRlbnRyeSwgaWF0dHIpO1xcbmZzL2tlcm5mcy9pbm9kZS5jLTEyNC1cXHRpZiAoZXJyb3IpXFxuLS1cXG5mcy9saWJmcy5jPTkxNj1pbnQgc2ltcGxlX3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG4tLVxcbmZzL2xpYmZzLmMtOTIxLVxcbmZzL2xpYmZzLmM6OTIyOlxcdGVycm9yID0gc2V0YXR0cl9wcmVwYXJlKGlkbWFwLCBkZW50cnksIGlhdHRyKTtcXG5mcy9saWJmcy5jLTkyMy1cXHRpZiAoZXJyb3IpXFxuLS1cXG5mcy9taW5peC9maWxlLmM9MzM9c3RhdGljIGludCBtaW5peF9zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbi0tXFxuZnMvbWluaXgvZmlsZS5jLTM4LVxcbmZzL21pbml4L2ZpbGUuYzozOTpcXHRlcnJvciA9IHNldGF0dHJfcHJlcGFyZShcXHUwMDI2bm9wX21udF9pZG1hcCwgZGVudHJ5LCBhdHRyKTtcXG5mcy9taW5peC9maWxlLmMtNDAtXFx0aWYgKGVycm9yKVxcbi0tXFxuZnMvbmFtZXNwYWNlLmM9NDg0OT1zdGF0aWMgaW5saW5lIGJvb2wgbW50X2FsbG93X3dyaXRlcnMoY29uc3Qgc3RydWN0IG1vdW50X2thdHRyICprYXR0cixcXG4tLVxcbmZzL25hbWVzcGFjZS5jLTQ4NTYtXFxuZnMvbmFtZXNwYWNlLmM6NDg1NzpzdGF0aWMgaW50IG1vdW50X3NldGF0dHJfcHJlcGFyZShzdHJ1Y3QgbW91bnRfa2F0dHIgKmthdHRyLCBzdHJ1Y3QgbW91bnQgKm1udClcXG5mcy9uYW1lc3BhY2UuYy00ODU4LXtcXG4tLVxcbmZzL25hbWVzcGFjZS5jPTQ5Mjg9c3RhdGljIGludCBkb19tb3VudF9zZXRhdHRyKGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoLCBzdHJ1Y3QgbW91bnRfa2F0dHIgKmthdHRyKVxcbi0tXFxuZnMvbmFtZXNwYWNlLmMtNDk3MC1cXHQgKi9cXG5mcy9uYW1lc3BhY2UuYzo0OTcxOlxcdGVyciA9IG1vdW50X3NldGF0dHJfcHJlcGFyZShrYXR0ciwgbW50KTtcXG5mcy9uYW1lc3BhY2UuYy00OTcyLVxcdGlmICghZXJyKVxcbi0tXFxuZnMvbmZzZC9uZnNwcm9jLmM9NzY9bmZzZF9wcm9jX3NldGF0dHIoc3RydWN0IHN2Y19ycXN0ICpycXN0cClcXG4tLVxcbmZzL25mc2QvbmZzcHJvYy5jLTk2LVxcdCAqIFNvIGlmIGl0IGxvb2tzIGxpa2UgaXQgbWlnaHQgYmUgXFxcInNldCBib3RoIHRvIHRoZSBzYW1lIHRpbWUgd2hpY2hcXG5mcy9uZnNkL25mc3Byb2MuYzo5NzpcXHQgKiBpcyBjbG9zZSB0byBub3dcXFwiLCBhbmQgaWYgc2V0YXR0cl9wcmVwYXJlIGZhaWxzLCB0aGVuIHdlXFxuZnMvbmZzZC9uZnNwcm9jLmMtOTgtXFx0ICogY29udmVydCB0byBcXFwic2V0IHRvIG5vd1xcXCIgaW5zdGVhZCBvZiBcXFwic2V0IHRvIGV4cGxpY2l0IHRpbWVcXFwiXFxuZnMvbmZzZC9uZnNwcm9jLmMtOTktXFx0ICpcXG5mcy9uZnNkL25mc3Byb2MuYzoxMDA6XFx0ICogV2Ugb25seSBjYWxsIHNldGF0dHJfcHJlcGFyZSBhcyB0aGUgbGFzdCB0ZXN0IGFzIHRlY2huaWNhbGx5XFxuZnMvbmZzZC9uZnNwcm9jLmMtMTAxLVxcdCAqIGl0IGlzIG5vdCBhbiBpbnRlcmZhY2UgdGhhdCB3ZSBzaG91bGQgYmUgdXNpbmcuXFxuLS1cXG5mcy9uZnNkL25mc3Byb2MuYy0xMjItXFx0XFx0aWYgKGRlbHRhIFxcdTAwM2MgTUFYX1RPVUNIX1RJTUVfRVJST1IgXFx1MDAyNlxcdTAwMjZcXG5mcy9uZnNkL25mc3Byb2MuYzoxMjM6XFx0XFx0ICAgIHNldGF0dHJfcHJlcGFyZShcXHUwMDI2bm9wX21udF9pZG1hcCwgZmhwLVxcdTAwM2VmaF9kZW50cnksIGlhcCkgIT0gMCkge1xcbmZzL25mc2QvbmZzcHJvYy5jLTEyNC1cXHRcXHRcXHQvKlxcbi0tXFxuZnMvbmlsZnMyL2lub2RlLmM9OTA5PWludCBuaWxmc19zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuLS1cXG5mcy9uaWxmczIvaW5vZGUuYy05MTYtXFxuZnMvbmlsZnMyL2lub2RlLmM6OTE3OlxcdGVyciA9IHNldGF0dHJfcHJlcGFyZShcXHUwMDI2bm9wX21udF9pZG1hcCwgZGVudHJ5LCBpYXR0cik7XFxuZnMvbmlsZnMyL2lub2RlLmMtOTE4LVxcdGlmIChlcnIpXFxuLS1cXG5mcy9udGZzL2ZpbGUuYz0yOTk9aW50IG50ZnNfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbi0tXFxuZnMvbnRmcy9maWxlLmMtMzEwLVxcbmZzL250ZnMvZmlsZS5jOjMxMTpcXHRlcnIgPSBzZXRhdHRyX3ByZXBhcmUoaWRtYXAsIGRlbnRyeSwgYXR0cik7XFxuZnMvbnRmcy9maWxlLmMtMzEyLVxcdGlmIChlcnIpXFxuLS1cXG5mcy9udGZzMy9maWxlLmM9NzA2PWludCBudGZzX3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG4tLVxcbmZzL250ZnMzL2ZpbGUuYy03MjEtXFxuZnMvbnRmczMvZmlsZS5jOjcyMjpcXHRlcnIgPSBzZXRhdHRyX3ByZXBhcmUoaWRtYXAsIGRlbnRyeSwgYXR0cik7XFxuZnMvbnRmczMvZmlsZS5jLTcyMy1cXHRpZiAoZXJyKVxcbi0tXFxuZnMvb2NmczIvZGxtZnMvZGxtZnMuYz0xOTE9c3RhdGljIGludCBkbG1mc19maWxlX3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuLS1cXG5mcy9vY2ZzMi9kbG1mcy9kbG1mcy5jLTE5Ny1cXHRhdHRyLVxcdTAwM2VpYV92YWxpZCBcXHUwMDI2PSB+QVRUUl9TSVpFO1xcbmZzL29jZnMyL2RsbWZzL2RsbWZzLmM6MTk4OlxcdGVycm9yID0gc2V0YXR0cl9wcmVwYXJlKFxcdTAwMjZub3BfbW50X2lkbWFwLCBkZW50cnksIGF0dHIpO1xcbmZzL29jZnMyL2RsbWZzL2RsbWZzLmMtMTk5LVxcdGlmIChlcnJvcilcXG4tLVxcbmZzL29jZnMyL2ZpbGUuYz0xMTIwPWludCBvY2ZzMl9zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuLS1cXG5mcy9vY2ZzMi9maWxlLmMtMTE1OS1cXG5mcy9vY2ZzMi9maWxlLmM6MTE2MDpcXHRzdGF0dXMgPSBzZXRhdHRyX3ByZXBhcmUoXFx1MDAyNm5vcF9tbnRfaWRtYXAsIGRlbnRyeSwgYXR0cik7XFxuZnMvb2NmczIvZmlsZS5jLTExNjEtXFx0aWYgKHN0YXR1cylcXG4tLVxcbmZzL29tZnMvZmlsZS5jPTM0MT1zdGF0aWMgaW50IG9tZnNfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4tLVxcbmZzL29tZnMvZmlsZS5jLTM0Ni1cXG5mcy9vbWZzL2ZpbGUuYzozNDc6XFx0ZXJyb3IgPSBzZXRhdHRyX3ByZXBhcmUoXFx1MDAyNm5vcF9tbnRfaWRtYXAsIGRlbnRyeSwgYXR0cik7XFxuZnMvb21mcy9maWxlLmMtMzQ4LVxcdGlmIChlcnJvcilcXG4tLVxcbmZzL29yYW5nZWZzL2lub2RlLmM9ODMxPWludCBvcmFuZ2Vmc19zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuLS1cXG5mcy9vcmFuZ2Vmcy9pbm9kZS5jLTgzNi1cXHQgICAgZGVudHJ5KTtcXG5mcy9vcmFuZ2Vmcy9pbm9kZS5jOjgzNzpcXHRyZXQgPSBzZXRhdHRyX3ByZXBhcmUoXFx1MDAyNm5vcF9tbnRfaWRtYXAsIGRlbnRyeSwgaWF0dHIpO1xcbmZzL29yYW5nZWZzL2lub2RlLmMtODM4LVxcdGlmIChyZXQpXFxuLS1cXG5mcy9vdmVybGF5ZnMvaW5vZGUuYz0yMT1pbnQgb3ZsX3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG4tLVxcbmZzL292ZXJsYXlmcy9pbm9kZS5jLTI4LVxcbmZzL292ZXJsYXlmcy9pbm9kZS5jOjI5OlxcdGVyciA9IHNldGF0dHJfcHJlcGFyZShcXHUwMDI2bm9wX21udF9pZG1hcCwgZGVudHJ5LCBhdHRyKTtcXG5mcy9vdmVybGF5ZnMvaW5vZGUuYy0zMC1cXHRpZiAoZXJyKVxcbi0tXFxuZnMvcHJvYy9iYXNlLmM9NzA1PWludCBwcm9jX25vY2htb2Rfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbi0tXFxuZnMvcHJvYy9iYXNlLmMtNzEzLVxcbmZzL3Byb2MvYmFzZS5jOjcxNDpcXHRlcnJvciA9IHNldGF0dHJfcHJlcGFyZShcXHUwMDI2bm9wX21udF9pZG1hcCwgZGVudHJ5LCBhdHRyKTtcXG5mcy9wcm9jL2Jhc2UuYy03MTUtXFx0aWYgKGVycm9yKVxcbi0tXFxuZnMvcHJvYy9nZW5lcmljLmM9MTIwPXN0YXRpYyBpbnQgcHJvY19zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuLS1cXG5mcy9wcm9jL2dlbmVyaWMuYy0xMjYtXFxuZnMvcHJvYy9nZW5lcmljLmM6MTI3OlxcdGVycm9yID0gc2V0YXR0cl9wcmVwYXJlKFxcdTAwMjZub3BfbW50X2lkbWFwLCBkZW50cnksIGlhdHRyKTtcXG5mcy9wcm9jL2dlbmVyaWMuYy0xMjgtXFx0aWYgKGVycm9yKVxcbi0tXFxuZnMvcHJvYy9wcm9jX3N5c2N0bC5jPTgyMD1zdGF0aWMgaW50IHByb2Nfc3lzX3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuLS1cXG5mcy9wcm9jL3Byb2Nfc3lzY3RsLmMtODI4LVxcbmZzL3Byb2MvcHJvY19zeXNjdGwuYzo4Mjk6XFx0ZXJyb3IgPSBzZXRhdHRyX3ByZXBhcmUoXFx1MDAyNm5vcF9tbnRfaWRtYXAsIGRlbnRyeSwgYXR0cik7XFxuZnMvcHJvYy9wcm9jX3N5c2N0bC5jLTgzMC1cXHRpZiAoZXJyb3IpXFxuLS1cXG5mcy9yYW1mcy9maWxlLW5vbW11LmM9MTYxPXN0YXRpYyBpbnQgcmFtZnNfbm9tbXVfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4tLVxcbmZzL3JhbWZzL2ZpbGUtbm9tbXUuYy0xNjgtXFx0LyogUE9TSVggVUlEL0dJRCB2ZXJpZmljYXRpb24gZm9yIHNldHRpbmcgaW5vZGUgYXR0cmlidXRlcyAqL1xcbmZzL3JhbWZzL2ZpbGUtbm9tbXUuYzoxNjk6XFx0cmV0ID0gc2V0YXR0cl9wcmVwYXJlKFxcdTAwMjZub3BfbW50X2lkbWFwLCBkZW50cnksIGlhKTtcXG5mcy9yYW1mcy9maWxlLW5vbW11LmMtMTcwLVxcdGlmIChyZXQpXFxuLS1cXG5mcy9zbWIvY2xpZW50L2lub2RlLmM9MzEzNT1jaWZzX3NldGF0dHJfdW5peChzdHJ1Y3QgZGVudHJ5ICpkaXJlbnRyeSwgc3RydWN0IGlhdHRyICphdHRycylcXG4tLVxcbmZzL3NtYi9jbGllbnQvaW5vZGUuYy0zMTU2LVxcbmZzL3NtYi9jbGllbnQvaW5vZGUuYzozMTU3OlxcdHJjID0gc2V0YXR0cl9wcmVwYXJlKFxcdTAwMjZub3BfbW50X2lkbWFwLCBkaXJlbnRyeSwgYXR0cnMpO1xcbmZzL3NtYi9jbGllbnQvaW5vZGUuYy0zMTU4LVxcdGlmIChyYyBcXHUwMDNjIDApXFxuLS1cXG5mcy9zbWIvY2xpZW50L2lub2RlLmM9MzMwNT1jaWZzX3NldGF0dHJfbm91bml4KHN0cnVjdCBkZW50cnkgKmRpcmVudHJ5LCBzdHJ1Y3QgaWF0dHIgKmF0dHJzKVxcbi0tXFxuZnMvc21iL2NsaWVudC9pbm9kZS5jLTMzMjgtXFxuZnMvc21iL2NsaWVudC9pbm9kZS5jOjMzMjk6XFx0cmMgPSBzZXRhdHRyX3ByZXBhcmUoXFx1MDAyNm5vcF9tbnRfaWRtYXAsIGRpcmVudHJ5LCBhdHRycyk7XFxuZnMvc21iL2NsaWVudC9pbm9kZS5jLTMzMzAtXFx0aWYgKHJjIFxcdTAwM2MgMClcXG4tLVxcbmZzL3ViaWZzL2ZpbGUuYz0xMjU0PWludCB1Ymlmc19zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuLS1cXG5mcy91Ymlmcy9maWxlLmMtMTI2Mi1cXHRcXHRpbm9kZS1cXHUwMDNlaV9pbm8sIGlub2RlLVxcdTAwM2VpX21vZGUsIGF0dHItXFx1MDAzZWlhX3ZhbGlkKTtcXG5mcy91Ymlmcy9maWxlLmM6MTI2MzpcXHRlcnIgPSBzZXRhdHRyX3ByZXBhcmUoXFx1MDAyNm5vcF9tbnRfaWRtYXAsIGRlbnRyeSwgYXR0cik7XFxuZnMvdWJpZnMvZmlsZS5jLTEyNjQtXFx0aWYgKGVycilcXG4tLVxcbmZzL3VkZi9maWxlLmM9MjIyPXN0YXRpYyBpbnQgdWRmX3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG4tLVxcbmZzL3VkZi9maWxlLmMtMjI4LVxcbmZzL3VkZi9maWxlLmM6MjI5OlxcdGVycm9yID0gc2V0YXR0cl9wcmVwYXJlKFxcdTAwMjZub3BfbW50X2lkbWFwLCBkZW50cnksIGF0dHIpO1xcbmZzL3VkZi9maWxlLmMtMjMwLVxcdGlmIChlcnJvcilcXG4tLVxcbmZzL3Vmcy9pbm9kZS5jPTExOTg9aW50IHVmc19zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuLS1cXG5mcy91ZnMvaW5vZGUuYy0xMjA0LVxcbmZzL3Vmcy9pbm9kZS5jOjEyMDU6XFx0ZXJyb3IgPSBzZXRhdHRyX3ByZXBhcmUoXFx1MDAyNm5vcF9tbnRfaWRtYXAsIGRlbnRyeSwgYXR0cik7XFxuZnMvdWZzL2lub2RlLmMtMTIwNi1cXHRpZiAoZXJyb3IpXFxuLS1cXG5mcy91dGltZXMuYz0yMT1pbnQgdmZzX3V0aW1lcyhjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCwgc3RydWN0IHRpbWVzcGVjNjQgKnRpbWVzKVxcbi0tXFxuZnMvdXRpbWVzLmMtNTYtXFx0XFx0LypcXG5mcy91dGltZXMuYzo1NzpcXHRcXHQgKiBUZWxsIHNldGF0dHJfcHJlcGFyZSgpLCB0aGF0IHRoaXMgaXMgYW4gZXhwbGljaXQgdGltZVxcbmZzL3V0aW1lcy5jLTU4LVxcdFxcdCAqIHVwZGF0ZSwgZXZlbiBpZiBuZWl0aGVyIEFUVFJfQVRJTUVfU0VUIG5vciBBVFRSX01USU1FX1NFVFxcbi0tXFxuZnMveGZzL3hmc19pb2N0bC5jPTYwNz1zdGF0aWMgdm9pZFxcbmZzL3hmcy94ZnNfaW9jdGwuYzo2MDg6eGZzX2lvY3RsX3NldGF0dHJfcHJlcGFyZV9kYXgoXFxuZnMveGZzL3hmc19pb2N0bC5jLTYwOS1cXHRzdHJ1Y3QgeGZzX2lub2RlXFx0KmlwLFxcbi0tXFxuZnMveGZzL3hmc19pb2N0bC5jPTc1MD14ZnNfZmlsZWF0dHJfc2V0KFxcbi0tXFxuZnMveGZzL3hmc19pb2N0bC5jLTgwNC1cXG5mcy94ZnMveGZzX2lvY3RsLmM6ODA1OlxcdHhmc19pb2N0bF9zZXRhdHRyX3ByZXBhcmVfZGF4KGlwLCBmYSk7XFxuZnMveGZzL3hmc19pb2N0bC5jLTgwNi1cXG4tLVxcbmZzL3hmcy94ZnNfaW9wcy5jPTc1Nz14ZnNfdm5fY2hhbmdlX29rKFxcbi0tXFxuZnMveGZzL3hmc19pb3BzLmMtNzY5LVxcbmZzL3hmcy94ZnNfaW9wcy5jOjc3MDpcXHRyZXR1cm4gc2V0YXR0cl9wcmVwYXJlKGlkbWFwLCBkZW50cnksIGlhdHRyKTtcXG5mcy94ZnMveGZzX2lvcHMuYy03NzEtfVxcbi0tXFxuZnMveGZzL3hmc19pb3BzLmMtNzc2LSAqIENhdXRpb246IFRoZSBjYWxsZXIgb2YgdGhpcyBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSBmb3IgY2FsbGluZ1xcbmZzL3hmcy94ZnNfaW9wcy5jOjc3NzogKiBzZXRhdHRyX3ByZXBhcmUoKSBvciBvdGhlcndpc2UgdmVyaWZ5aW5nIHRoZSBjaGFuZ2UgaXMgZmluZS5cXG5mcy94ZnMveGZzX2lvcHMuYy03NzgtICovXFxuLS1cXG5mcy96b25lZnMvc3VwZXIuYz01MzY9c3RhdGljIGludCB6b25lZnNfaW5vZGVfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4tLVxcbmZzL3pvbmVmcy9zdXBlci5jLTU0NC1cXG5mcy96b25lZnMvc3VwZXIuYzo1NDU6XFx0cmV0ID0gc2V0YXR0cl9wcmVwYXJlKFxcdTAwMjZub3BfbW50X2lkbWFwLCBkZW50cnksIGlhdHRyKTtcXG5mcy96b25lZnMvc3VwZXIuYy01NDYtXFx0aWYgKHJldClcXG4tLVxcbmluY2x1ZGUvbGludXgvZnMuaD0zMzgzPWludCBtYXlfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSxcXG5pbmNsdWRlL2xpbnV4L2ZzLmgtMzM4NC1cXHRcXHR1bnNpZ25lZCBpbnQgaWFfdmFsaWQpO1xcbmluY2x1ZGUvbGludXgvZnMuaDozMzg1OmludCBzZXRhdHRyX3ByZXBhcmUoc3RydWN0IG1udF9pZG1hcCAqLCBzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBpYXR0ciAqKTtcXG5pbmNsdWRlL2xpbnV4L2ZzLmgtMzM4Ni1leHRlcm4gaW50IGlub2RlX25ld3NpemVfb2soY29uc3Qgc3RydWN0IGlub2RlICosIGxvZmZfdCBvZmZzZXQpO1xcbi0tXFxubW0vc2htZW0uYz0xMzE2PXN0YXRpYyBpbnQgc2htZW1fc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4tLVxcbm1tL3NobWVtLmMtMTMyNC1cXG5tbS9zaG1lbS5jOjEzMjU6XFx0ZXJyb3IgPSBzZXRhdHRyX3ByZXBhcmUoaWRtYXAsIGRlbnRyeSwgYXR0cik7XFxubW0vc2htZW0uYy0xMzI2LVxcdGlmIChlcnJvcilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDM6MzQ6MTAuNzU0MDQzODk0WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMTY4NTk0OTIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgU3RyYXRlZ3kgZm9yIENvcmUgVkZTIGFuZCBBRlMgT3duZXJzaGlwIENoZWNrcyoqXG5cbk9rYXksIHNvIGBzZXRhdHRyX3ByZXBhcmVgIGlzIGV4cG9ydGVkLCB0aGF0J3Mgb3VyIHN0YXJ0aW5nIHBvaW50LiBUaGUgY3J1Y2lhbCBzeW1ib2xzIHRvIHRhcmdldCBhcmU6XG5cbiogICBgdmZzX2lub2RlX2lzX293bmVkX2J5X21lYFxuKiAgIGBhZnNfaXNfb3duZWRfYnlfbWVgXG4qICAgYGFmc19oYXZlX3NhbWVfb3duZXJgXG4qICAgYGlub2RlX293bmVyX29yX2NhcGFibGVgXG4qICAgYHZmc19zZXRsZWFzZWBcbiogICBgX19jaGVja19zdGlja3lgXG4qICAgYHNldGF0dHJfcHJlcGFyZWBcblxuTm93LCByZWdhcmRpbmcgYHZmc19pbm9kZV9pc19vd25lZF9ieV9tZWAsIGl0J3Mgbm90IGV4cG9ydGVkLiBCdXQsIGFuZCB0aGlzIGlzIGtleSwgaXQncyBub24tc3RhdGljLiBTaW5jZSBTeXprYWxsZXIgY2FuIGZ1enogbm9uLXN0YXRpYyBmdW5jdGlvbnMgd2l0aGluIHRoZSBrZXJuZWwgY29yZSwgdGhhdCdzIG5vdCBhIHByb2JsZW0uIFdhaXQgYSBtb21lbnQsIFN5emthbGxlciBwcmltYXJpbHkgZm9jdXNlcyBvbiBzeXNjYWxscy4gVGhlc2Ugc3ltYm9scyBhY3QgYXMgYSBndWlkZSB0byByZWFjaCBmdW5jdGlvbnMgdGhhdCBpbXBsZW1lbnQgdGhlIHN5c2NhbGxzLiBTbywgbm9uLXN0YXRpYyBmdW5jdGlvbnMgbGlrZSBgdmZzX2lub2RlX2lzX293bmVkX2J5X21lYCBhcmUgcGVyZmVjdGx5IHZhbGlkIHRhcmdldHMuXG5cbkxldCdzIGRvdWJsZS1jaGVjayB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zLiBJIGJlbGlldmUgYEFGU19GU2AgaXMgcmVxdWlyZWQuIEFyZSB0aGVyZSBhbnkgb3RoZXIgY29uZmlnIG9wdGlvbnM/IE5vLCB0aGUgb3RoZXIgY2hhbmdlcyBhcmUgd2l0aGluIHRoZSBjb3JlIFZGUy5cblxuQWxyaWdodCwgdGltZSB0byBzb2xpZGlmeSB0aGUgcmF0aW9uYWxlLiBUaGlzIHBhdGNoIGludHJvZHVjZXMgYGlzX293bmVkX2J5X21lYCBhbmQgYGhhdmVfc2FtZV9vd25lcmAgaW5vZGUgb3BlcmF0aW9ucy4gVGhlc2UgYWxsb3cgZmlsZXN5c3RlbXMsIGVzcGVjaWFsbHkgQUZTLCB0byBvdmVycmlkZSBkZWZhdWx0IFZGUyBvd25lcnNoaXAgY2hlY2tzLiBTZXZlcmFsIGNyaXRpY2FsIFZGUyBwYXRocyBhcmUgbW9kaWZpZWQuIEl0IHRvdWNoZXMgY29kZSBsaWtlIGBjaG93bl9va2AsIGBjaGdycF9va2AsIGBjb3JlZHVtcF9maWxlYCwgYGlub2RlX293bmVyX29yX2NhcGFibGVgLCBgdmZzX3NldGxlYXNlYCwgYG1heV9mb2xsb3dfbGlua2AsIGBtYXlfY3JlYXRlX2luX3N0aWNreWAsIGBfX2NoZWNrX3N0aWNreWAsIGFuZCBgbWF5X2RlZHVwZV9maWxlYC4gVGhpcyByZXByZXNlbnRzIGEgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIFZGUyBhbmQgQUZTLCBhbmQgaXQgZGVtYW5kcyB0aG9yb3VnaCBmdXp6aW5nIHRvIGd1YXJkIGFnYWluc3QgcmVncmVzc2lvbnMgYW5kIHBvdGVudGlhbCBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMuXG5cbk15IHRhcmdldCBzeW1ib2xzIG5vdyBsb29rIGxpa2UgdGhpczpcblxuKiAgIGB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWVgXG4qICAgYGFmc19pc19vd25lZF9ieV9tZWBcbiogICBgYWZzX2hhdmVfc2FtZV9vd25lcmBcbiogICBgaW5vZGVfb3duZXJfb3JfY2FwYWJsZWBcbiogICBgdmZzX3NldGxlYXNlYFxuKiAgIGBfX2NoZWNrX3N0aWNreWBcbiogICBgc2V0YXR0cl9wcmVwYXJlYFxuXG5MZXQncyBjb25maXJtIHRoYXQgYHZmc19pbm9kZV9pc19vd25lZF9ieV9tZWAgaXMgYWN0dWFsbHkgY2FsbGVkIGZyb20gYHNldGF0dHJfcHJlcGFyZWAuIFllcywgYHNldGF0dHJfcHJlcGFyZWAgY2FsbHMgYGNob3duX29rYCBhbmQgYGNoZ3JwX29rYCB3aGljaCBjYWxsIGB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWVgLlxuXG5Ob3csIGRvZXMgYG1heV9jcmVhdGVfaW5fc3RpY2t5YCBoYXZlIGNhbGwgc2l0ZXMgd2UgY2FuIGxldmVyYWdlPyBJdCdzIGNhbGxlZCBmcm9tIGBtYXlfb3BlbmAgYW5kIGBtYXlfY3JlYXRlYCwgYW5kIGBtYXlfbGlua2F0YCBjYWxscyBgbWF5X2ZvbGxvd19saW5rYC4gQW5kIGB2ZnNfY2xvbmVfZmlsZV9yYW5nZWAgYW5kIGB2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2Vfb25lYCBjYWxsIGBtYXlfZGVkdXBlX2ZpbGVgLiBJIHRoaW5rIHdlIGNvdWxkIGFkZCBgdmZzX2RlZHVwZV9maWxlX3JhbmdlX29uZWAgdG9vLiBZZXMsIGl0J3Mgd29ydGggaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwNzc4LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Njk2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAzOjM0OjIwLjkyMjY0MjY2N1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjUzNzk4NTY2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2Vfb25lXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL292ZXJsYXlmcy9maWxlLmM9NTI3PXN0YXRpYyBsb2ZmX3Qgb3ZsX2NvcHlmaWxlKHN0cnVjdCBmaWxlICpmaWxlX2luLCBsb2ZmX3QgcG9zX2luLFxcbi0tXFxuZnMvb3ZlcmxheWZzL2ZpbGUuYy01NjYtXFx0XFx0Y2FzZSBPVkxfREVEVVBFOlxcbmZzL292ZXJsYXlmcy9maWxlLmM6NTY3OlxcdFxcdFxcdHJldCA9IHZmc19kZWR1cGVfZmlsZV9yYW5nZV9vbmUocmVhbGZpbGVfaW4sIHBvc19pbixcXG5mcy9vdmVybGF5ZnMvZmlsZS5jLTU2OC1cXHRcXHRcXHRcXHRcXHRcXHRcXHRyZWFsZmlsZV9vdXQsIHBvc19vdXQsIGxlbixcXG4tLVxcbmZzL3JlbWFwX3JhbmdlLmM9NDE2PXN0YXRpYyBpbnQgbWF5X2RlZHVwZV9maWxlKHN0cnVjdCBmaWxlICpmaWxlKVxcbi0tXFxuZnMvcmVtYXBfcmFuZ2UuYy00MzMtXFxuZnMvcmVtYXBfcmFuZ2UuYzo0MzQ6bG9mZl90IHZmc19kZWR1cGVfZmlsZV9yYW5nZV9vbmUoc3RydWN0IGZpbGUgKnNyY19maWxlLCBsb2ZmX3Qgc3JjX3BvcyxcXG5mcy9yZW1hcF9yYW5nZS5jLTQzNS1cXHRcXHRcXHRcXHQgc3RydWN0IGZpbGUgKmRzdF9maWxlLCBsb2ZmX3QgZHN0X3BvcyxcXG4tLVxcbmZzL3JlbWFwX3JhbmdlLmMtNDkxLX1cXG5mcy9yZW1hcF9yYW5nZS5jOjQ5MjpFWFBPUlRfU1lNQk9MKHZmc19kZWR1cGVfZmlsZV9yYW5nZV9vbmUpO1xcbmZzL3JlbWFwX3JhbmdlLmMtNDkzLVxcbmZzL3JlbWFwX3JhbmdlLmM9NDk0PWludCB2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2Uoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBmaWxlX2RlZHVwZV9yYW5nZSAqc2FtZSlcXG4tLVxcbmZzL3JlbWFwX3JhbmdlLmMtNTUyLVxcbmZzL3JlbWFwX3JhbmdlLmM6NTUzOlxcdFxcdGRlZHVwZWQgPSB2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2Vfb25lKGZpbGUsIG9mZiwgZmRfZmlsZShkc3RfZmQpLFxcbmZzL3JlbWFwX3JhbmdlLmMtNTU0LVxcdFxcdFxcdFxcdFxcdFxcdCAgICBpbmZvLVxcdTAwM2VkZXN0X29mZnNldCwgbGVuLFxcbi0tXFxuaW5jbHVkZS9saW51eC9mcy5oPTIwOTI9ZXh0ZXJuIGludCB2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2Uoc3RydWN0IGZpbGUgKmZpbGUsXFxuaW5jbHVkZS9saW51eC9mcy5oLTIwOTMtXFx0XFx0XFx0XFx0IHN0cnVjdCBmaWxlX2RlZHVwZV9yYW5nZSAqc2FtZSk7XFxuaW5jbHVkZS9saW51eC9mcy5oOjIwOTQ6ZXh0ZXJuIGxvZmZfdCB2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2Vfb25lKHN0cnVjdCBmaWxlICpzcmNfZmlsZSwgbG9mZl90IHNyY19wb3MsXFxuaW5jbHVkZS9saW51eC9mcy5oLTIwOTUtXFx0XFx0XFx0XFx0XFx0c3RydWN0IGZpbGUgKmRzdF9maWxlLCBsb2ZmX3QgZHN0X3BvcyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDM6MzQ6MjMuNDYwNjM2MDg2WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY5NDM2NTA0MjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBLZXJuZWwgUGF0Y2g6IEZvY3VzIG9uIEZpbGUgU3lzdGVtIFNlY3VyaXR5IGFuZCBBRlMqKlxuXG5Pa2F5LCBzbyBgdmZzX2RlZHVwZV9maWxlX3JhbmdlX29uZWAgKmlzKiBleHBvcnRlZCwgdGhhdCdzIGdvb2QgdG8ga25vdy4gTm93LCBsZXQncyB0YWtlIGEgcXVpY2sgbG9vayBhdCBgY29yZWR1bXBfZmlsZWAuIFJpZ2h0LCBpdCdzIHN0YXRpYywgYW5kIHRoZSBjYWxsZXIgaXMgYGRvX2NvcmVkdW1wYC4gU2VlbXMgbGlrZSB3ZSBjYW4gaWdub3JlIHRoYXQgb25lLiBHb3R0YSBzdGljayB0byB0aGUgY29yZSBhcmVhcyBvZiBpbnRlcmVzdCBoZXJlLlxuXG5NeSBmb2N1cyBzeW1ib2xzIGFyZTogYHZmc19pbm9kZV9pc19vd25lZF9ieV9tZWAsIGBhZnNfaXNfb3duZWRfYnlfbWVgLCBgYWZzX2hhdmVfc2FtZV9vd25lcmAsIGBpbm9kZV9vd25lcl9vcl9jYXBhYmxlYCwgYHZmc19zZXRsZWFzZWAsIGBfX2NoZWNrX3N0aWNreWAsIGBzZXRhdHRyX3ByZXBhcmVgLCBhbmQgYHZmc19kZWR1cGVfZmlsZV9yYW5nZV9vbmVgLiBUaGlzIGxvb2tzIGxpa2UgYSBzb2xpZCBsaXN0IHRvIHN0YXJ0IHdpdGguXG5cbkknbSBqdXN0IGdvaW5nIHRvIGRvdWJsZS1jaGVjayBgYWZzX2lzX293bmVkX2J5X21lYCBhbmQgYGFmc19oYXZlX3NhbWVfb3duZXJgLiBBaCwgeWVzLCB0aGV5IGFyZSBpbmRlZWQgaW4gYGZzL2Fmcy9zZWN1cml0eS5jYC4gTGV0IG1lIHNlZS4uLiBhcmUgdGhlcmUgYW55ICpvdGhlciogQUZTIGZ1bmN0aW9ucyB0aGF0IGhhdmUgYmVlbiBtb2RpZmllZD8gSSBzZWUgYGFmc19lZGl0X2Rpcl9yZW1vdmVgIGluIGBmcy9hZnMvZGlyX2VkaXQuY2AsIGBhZnNfZGlyX2ZpbmRfYmxvY2tgIGluIGBmcy9hZnMvZGlyX3NlYXJjaC5jYCwgYGFmc19mc19mZXRjaF9kYXRhYCBpbiBgZnMvYWZzL2ZzY2xpZW50LmNgLCBgYWZzX2lub2RlX2luaXRfZnJvbV9zdGF0dXNgIGluIGBmcy9hZnMvaW5vZGUuY2AsIGFuZCBgYWZzX21ha2Vfb3BfY2FsbGAgaW4gYGZzL2Fmcy9pbnRlcm5hbC5oYC5cblxuV2FpdCBhIG1pbnV0ZSwgSSBzZWUgdGhlIHBhdGNoIG1vZGlmaWVzIGBhZnNfZWRpdF9kaXJfcmVtb3ZlYCBhbmQgYGFmc19kaXJfZmluZF9ibG9ja2AgdG8gdXNlIGBhZnNfZGlyX2dldF9ibG9ja2AgYW5kIGBhZnNfZGlyX2VuZF9pdGVyYC4gSW50ZXJlc3RpbmcuIEFuZCBgYWZzX2ZzX2ZldGNoX2RhdGFgIHNldHMgYGNhbGwtXHUwMDNlYXN5bmMgPSB0cnVlYC4gQW5kIGBhZnNfbWFrZV9vcF9jYWxsYCB1c2VzIGBhZnNfZ2V0X2NhbGxgIGFuZCBgYWZzX3B1dF9jYWxsYC4gVGhlc2UgYXJlIGNsZWFybHkgQUZTLXNwZWNpZmljIGZpeGVzIGFuZCBjaGFuZ2VzLiBJIG5lZWQgdG8gZmFjdG9yIHRoZXNlIGludG8gbXkgYW5hbHlzaXMuIEknbGwgYWRkIGBhZnNfZWRpdF9kaXJfcmVtb3ZlYCBhbmQgYGFmc19mc19mZXRjaF9kYXRhYCB0byBteSBsaXN0IG9mIGZvY3VzIHN5bWJvbHMuIEl0J3MgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhlIEFGUyBjaGFuZ2VzIGFsb25nc2lkZSB0aGUgb3RoZXIgZmlsZSBzeXN0ZW0gY29tcG9uZW50cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzI3ODUsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NDcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDM6MzQ6MzAuNDA0MjkwMDg0WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjc3ODM0MTQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFmc19lZGl0X2Rpcl9yZW1vdmVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvYWZzL2Rpci5jPTEzNzA9c3RhdGljIHZvaWQgYWZzX3JtZGlyX2VkaXRfZGlyKHN0cnVjdCBhZnNfb3BlcmF0aW9uICpvcClcXG4tLVxcbmZzL2Fmcy9kaXIuYy0xMzgyLVxcdCAgICBkdm5vZGUtXFx1MDAzZXN0YXR1cy5kYXRhX3ZlcnNpb24gPT0gZHZwLVxcdTAwM2Vkdl9iZWZvcmUgKyBkdnAtXFx1MDAzZWR2X2RlbHRhKVxcbmZzL2Fmcy9kaXIuYzoxMzgzOlxcdFxcdGFmc19lZGl0X2Rpcl9yZW1vdmUoZHZub2RlLCBcXHUwMDI2b3AtXFx1MDAzZWRlbnRyeS1cXHUwMDNlZF9uYW1lLFxcbmZzL2Fmcy9kaXIuYy0xMzg0LVxcdFxcdFxcdFxcdCAgICBhZnNfZWRpdF9kaXJfZm9yX3JtZGlyKTtcXG4tLVxcbmZzL2Fmcy9kaXIuYz0xNTE4PXN0YXRpYyB2b2lkIGFmc191bmxpbmtfZWRpdF9kaXIoc3RydWN0IGFmc19vcGVyYXRpb24gKm9wKVxcbi0tXFxuZnMvYWZzL2Rpci5jLTE1MjgtXFx0ICAgIGR2bm9kZS1cXHUwMDNlc3RhdHVzLmRhdGFfdmVyc2lvbiA9PSBkdnAtXFx1MDAzZWR2X2JlZm9yZSArIGR2cC1cXHUwMDNlZHZfZGVsdGEpXFxuZnMvYWZzL2Rpci5jOjE1Mjk6XFx0XFx0YWZzX2VkaXRfZGlyX3JlbW92ZShkdm5vZGUsIFxcdTAwMjZvcC1cXHUwMDNlZGVudHJ5LVxcdTAwM2VkX25hbWUsXFxuZnMvYWZzL2Rpci5jLTE1MzAtXFx0XFx0XFx0XFx0ICAgIGFmc19lZGl0X2Rpcl9mb3JfdW5saW5rKTtcXG4tLVxcbmZzL2Fmcy9kaXIuYz0xODkwPXN0YXRpYyB2b2lkIGFmc19yZW5hbWVfZWRpdF9kaXIoc3RydWN0IGFmc19vcGVyYXRpb24gKm9wKVxcbi0tXFxuZnMvYWZzL2Rpci5jLTE5MTUtXFx0ICAgIG9yaWdfZHZub2RlLVxcdTAwM2VzdGF0dXMuZGF0YV92ZXJzaW9uID09IG9yaWdfZHZwLVxcdTAwM2Vkdl9iZWZvcmUgKyBvcmlnX2R2cC1cXHUwMDNlZHZfZGVsdGEpXFxuZnMvYWZzL2Rpci5jOjE5MTY6XFx0XFx0YWZzX2VkaXRfZGlyX3JlbW92ZShvcmlnX2R2bm9kZSwgXFx1MDAyNm9sZF9kZW50cnktXFx1MDAzZWRfbmFtZSxcXG5mcy9hZnMvZGlyLmMtMTkxNy1cXHRcXHRcXHRcXHQgICAgYWZzX2VkaXRfZGlyX2Zvcl9yZW5hbWVfMCk7XFxuLS1cXG5mcy9hZnMvZGlyLmMtMTkyNi1cXHRcXHRpZiAoIW9wLVxcdTAwM2VyZW5hbWUubmV3X25lZ2F0aXZlKVxcbmZzL2Fmcy9kaXIuYzoxOTI3OlxcdFxcdFxcdGFmc19lZGl0X2Rpcl9yZW1vdmUobmV3X2R2bm9kZSwgXFx1MDAyNm5ld19kZW50cnktXFx1MDAzZWRfbmFtZSxcXG5mcy9hZnMvZGlyLmMtMTkyOC1cXHRcXHRcXHRcXHRcXHQgICAgYWZzX2VkaXRfZGlyX2Zvcl9yZW5hbWVfMSk7XFxuLS1cXG5mcy9hZnMvZGlyX2VkaXQuYz0yNDE9dm9pZCBhZnNfZWRpdF9kaXJfYWRkKHN0cnVjdCBhZnNfdm5vZGUgKnZub2RlLFxcbi0tXFxuZnMvYWZzL2Rpcl9lZGl0LmMtMzkyLSAqL1xcbmZzL2Fmcy9kaXJfZWRpdC5jOjM5Mzp2b2lkIGFmc19lZGl0X2Rpcl9yZW1vdmUoc3RydWN0IGFmc192bm9kZSAqdm5vZGUsXFxuZnMvYWZzL2Rpcl9lZGl0LmMtMzk0LVxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSwgZW51bSBhZnNfZWRpdF9kaXJfcmVhc29uIHdoeSlcXG4tLVxcbmZzL2Fmcy9kaXJfc2lsbHkuYz0yMz1zdGF0aWMgdm9pZCBhZnNfc2lsbHlfcmVuYW1lX2VkaXRfZGlyKHN0cnVjdCBhZnNfb3BlcmF0aW9uICpvcClcXG4tLVxcbmZzL2Fmcy9kaXJfc2lsbHkuYy00MS1cXHQgICAgZHZub2RlLVxcdTAwM2VzdGF0dXMuZGF0YV92ZXJzaW9uID09IGR2cC1cXHUwMDNlZHZfYmVmb3JlICsgZHZwLVxcdTAwM2Vkdl9kZWx0YSkge1xcbmZzL2Fmcy9kaXJfc2lsbHkuYzo0MjpcXHRcXHRhZnNfZWRpdF9kaXJfcmVtb3ZlKGR2bm9kZSwgXFx1MDAyNm9sZC1cXHUwMDNlZF9uYW1lLFxcbmZzL2Fmcy9kaXJfc2lsbHkuYy00My1cXHRcXHRcXHRcXHQgICAgYWZzX2VkaXRfZGlyX2Zvcl9zaWxseV8wKTtcXG4tLVxcbmZzL2Fmcy9kaXJfc2lsbHkuYz0xNzY9c3RhdGljIHZvaWQgYWZzX3NpbGx5X3VubGlua19lZGl0X2RpcihzdHJ1Y3QgYWZzX29wZXJhdGlvbiAqb3ApXFxuLS1cXG5mcy9hZnMvZGlyX3NpbGx5LmMtMTg0LVxcdCAgICBkdm5vZGUtXFx1MDAzZXN0YXR1cy5kYXRhX3ZlcnNpb24gPT0gZHZwLVxcdTAwM2Vkdl9iZWZvcmUgKyBkdnAtXFx1MDAzZWR2X2RlbHRhKVxcbmZzL2Fmcy9kaXJfc2lsbHkuYzoxODU6XFx0XFx0YWZzX2VkaXRfZGlyX3JlbW92ZShkdm5vZGUsIFxcdTAwMjZvcC1cXHUwMDNlZGVudHJ5LVxcdTAwM2VkX25hbWUsXFxuZnMvYWZzL2Rpcl9zaWxseS5jLTE4Ni1cXHRcXHRcXHRcXHQgICAgYWZzX2VkaXRfZGlyX2Zvcl91bmxpbmspO1xcbi0tXFxuZnMvYWZzL2ludGVybmFsLmg9MTExOD1leHRlcm4gdm9pZCBhZnNfZWRpdF9kaXJfYWRkKHN0cnVjdCBhZnNfdm5vZGUgKiwgY29uc3Qgc3RydWN0IHFzdHIgKiwgc3RydWN0IGFmc19maWQgKixcXG5mcy9hZnMvaW50ZXJuYWwuaC0xMTE5LVxcdFxcdFxcdCAgICAgZW51bSBhZnNfZWRpdF9kaXJfcmVhc29uKTtcXG5mcy9hZnMvaW50ZXJuYWwuaDoxMTIwOmV4dGVybiB2b2lkIGFmc19lZGl0X2Rpcl9yZW1vdmUoc3RydWN0IGFmc192bm9kZSAqLCBjb25zdCBzdHJ1Y3QgcXN0ciAqLCBlbnVtIGFmc19lZGl0X2Rpcl9yZWFzb24pO1xcbmZzL2Fmcy9pbnRlcm5hbC5oLTExMjEtdm9pZCBhZnNfZWRpdF9kaXJfdXBkYXRlKHN0cnVjdCBhZnNfdm5vZGUgKnZub2RlLCBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDM6MzQ6MzMuMDgyMTI5NTdaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzUwOTkyNjA2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipOYXZpZ2F0aW5nIHRoZSBBRlMgQ29kZWJhc2U6IEEgQnJpZWYgQXVkaXQqKlxuXG5BbHJpZ2h0LCBzbyBgYWZzX2VkaXRfZGlyX3JlbW92ZWAgaXMgKm5vdCogc3RhdGljLiBUaGF0IGltbWVkaWF0ZWx5IHBpcXVlcyBteSBpbnRlcmVzdC4gTm9uLXN0YXRpYyBpbXBsaWVzIGl0J3MgZXhwb3NlZCBleHRlcm5hbGx5LCBwZXJoYXBzIGNhbGxlZCBmcm9tIG90aGVyIHBhcnRzIG9mIHRoZSBBRlMga2VybmVsIG1vZHVsZSwgb3IgZXZlbiBmcm9tIHVzZXIgc3BhY2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjb250ZXh0LiBUaGlzIG1lYW5zIEkgc2hvdWxkIHByb2JhYmx5IHVuZGVyc3RhbmQgd2hvICpjYWxscyogdGhpcywgb3IgcG90ZW50aWFsbHksIHdobyAqY2FuKiBjYWxsIHRoaXMuXG5cbk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIGZvciBzb21lIHJlbGV2YW50IGNhbGwgc2l0ZXMuIFNwZWNpZmljYWxseSwgSSBzaG91bGQgbG9vayBjbG9zZWx5IGF0IHRoZSBkYXRhIGZldGNoaW5nIGxvZ2ljLiBJIHdpbGwgbm93IGxvb2sgb3ZlciBgYWZzX2ZzX2ZldGNoX2RhdGFgIGFuZCBzZWUgaWYgdGhlIHR3byBhcmUgc29tZWhvdyByZWxhdGVkLiBUaGVyZSBtYXkgYmUgc29tZSB2dWxuZXJhYmlsaXR5IGluIHRoZXNlIHBpZWNlcywgaW4gc29tZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBlZGl0aW5nIG9mIGEgZGlyZWN0b3J5LlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDg4NSwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAzOjM0OjM2LjU5MjA1ODcyOVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ1MDgwMDUwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhZnNfZnNfZmV0Y2hfZGF0YVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9hZnMvZmlsZS5jPTIzMz1jb25zdCBzdHJ1Y3QgYWZzX29wZXJhdGlvbl9vcHMgYWZzX2ZldGNoX2RhdGFfb3BlcmF0aW9uID0ge1xcbmZzL2Fmcy9maWxlLmM6MjM0OlxcdC5pc3N1ZV9hZnNfcnBjXFx0PSBhZnNfZnNfZmV0Y2hfZGF0YSxcXG5mcy9hZnMvZmlsZS5jLTIzNS1cXHQuaXNzdWVfeWZzX3JwY1xcdD0geWZzX2ZzX2ZldGNoX2RhdGEsXFxuLS1cXG5mcy9hZnMvZmlsZS5jPTI0MT1zdGF0aWMgdm9pZCBhZnNfaXNzdWVfcmVhZF9jYWxsKHN0cnVjdCBhZnNfb3BlcmF0aW9uICpvcClcXG4tLVxcbmZzL2Fmcy9maWxlLmMtMjQ4LVxcdGVsc2VcXG5mcy9hZnMvZmlsZS5jOjI0OTpcXHRcXHRhZnNfZnNfZmV0Y2hfZGF0YShvcCk7XFxuZnMvYWZzL2ZpbGUuYy0yNTAtfVxcbi0tXFxuZnMvYWZzL2ZzY2xpZW50LmM9NDE3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYWZzX2NhbGxfdHlwZSBhZnNfUlhGU0ZldGNoRGF0YTY0ID0ge1xcbi0tXFxuZnMvYWZzL2ZzY2xpZW50LmMtNDI4LSAqL1xcbmZzL2Fmcy9mc2NsaWVudC5jOjQyOTpzdGF0aWMgdm9pZCBhZnNfZnNfZmV0Y2hfZGF0YTY0KHN0cnVjdCBhZnNfb3BlcmF0aW9uICpvcClcXG5mcy9hZnMvZnNjbGllbnQuYy00MzAte1xcbi0tXFxuZnMvYWZzL2ZzY2xpZW50LmMtNDYzLSAqL1xcbmZzL2Fmcy9mc2NsaWVudC5jOjQ2NDp2b2lkIGFmc19mc19mZXRjaF9kYXRhKHN0cnVjdCBhZnNfb3BlcmF0aW9uICpvcClcXG5mcy9hZnMvZnNjbGllbnQuYy00NjUte1xcbi0tXFxuZnMvYWZzL2ZzY2xpZW50LmMtNDcxLVxcdGlmICh0ZXN0X2JpdChBRlNfU0VSVkVSX0ZMX0hBU19GUzY0LCBcXHUwMDI2b3AtXFx1MDAzZXNlcnZlci1cXHUwMDNlZmxhZ3MpKVxcbmZzL2Fmcy9mc2NsaWVudC5jOjQ3MjpcXHRcXHRyZXR1cm4gYWZzX2ZzX2ZldGNoX2RhdGE2NChvcCk7XFxuZnMvYWZzL2ZzY2xpZW50LmMtNDczLVxcbi0tXFxuZnMvYWZzL2ludGVybmFsLmg9MTE5MD1leHRlcm4gdm9pZCBhZnNfZnNfZmV0Y2hfc3RhdHVzKHN0cnVjdCBhZnNfb3BlcmF0aW9uICopO1xcbmZzL2Fmcy9pbnRlcm5hbC5oOjExOTE6ZXh0ZXJuIHZvaWQgYWZzX2ZzX2ZldGNoX2RhdGEoc3RydWN0IGFmc19vcGVyYXRpb24gKik7XFxuZnMvYWZzL2ludGVybmFsLmgtMTE5Mi1leHRlcm4gdm9pZCBhZnNfZnNfY3JlYXRlX2ZpbGUoc3RydWN0IGFmc19vcGVyYXRpb24gKik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAzOjM0OjM5LjA0Mjg2NzU4OVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MTk4MjkyMTM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBBRlMgRmlsZSBTeXN0ZW0gT3BlcmF0aW9ucyoqXG5cbk9rYXksIHNvIGBhZnNfZnNfZmV0Y2hfZGF0YWAgaXNuJ3Qgc3RhdGljLiBUaGF0J3MgZ29vZCB0byBrbm93LCBtYWtlcyBpdCBlYXNpZXIgdG8gdHJhY2suIExldCdzIHNlZSBhYm91dCBgYWZzX21ha2Vfb3BfY2FsbGAuIEFoLCBpdCdzIGEgc3RhdGljIGlubGluZSBmdW5jdGlvbiwgdHVja2VkIGF3YXkgaW4gYGZzL2Fmcy9pbnRlcm5hbC5oYC5cblxuQWxyaWdodCwgdGltZSB0byBnZXQgdG8gdGhlIGNvcmUuIEJhc2VkIG9uIHRoaXMsIEknbSB0aGlua2luZyB0aGUga2V5IHN5bWJvbHMgdG8gcmVhbGx5IGRpZyBpbnRvIGFyZTpcbi0gICBgdmZzX2lub2RlX2lzX293bmVkX2J5X21lYFxuLSAgIGBhZnNfaXNfb3duZWRfYnlfbWVgXG4tICAgYGFmc19oYXZlX3NhbWVfb3duZXJgXG4tICAgYGlub2RlX293bmVyX29yX2NhcGFibGVgXG4tICAgYHZmc19zZXRsZWFzZWBcbi0gICBgX19jaGVja19zdGlja3lgXG4tICAgYHNldGF0dHJfcHJlcGFyZWBcbi0gICBgdmZzX2RlZHVwZV9maWxlX3JhbmdlX29uZWBcbi0gICBgYWZzX2VkaXRfZGlyX3JlbW92ZWBcbi0gICBgYWZzX2ZzX2ZldGNoX2RhdGFgXG5cblNlZW1zIGxpa2UgYSBzb2xpZCBzdGFydGluZyBwb2ludCBmb3IgaW52ZXN0aWdhdGlvbi4gQW5kIHRoZSByZWxldmFudCBjb25maWcgaXMgYEFGU19GU2AsIG5hdHVyYWxseS5cblxuTm93LCBhIHF1aWNrIHZlcmlmaWNhdGlvbiBvbiBgYWZzX2Rpcl9maW5kX2Jsb2NrYC4gV2Fzbid0IGl0IHJlbmFtZWQ/IExldCdzIHNlZS4uLiBZZXAsIHRoZSBkaWZmIHNob3dzIHRoZSBvbGQgbmFtZSByZXBsYWNlZCB3aXRoIGBhZnNfZGlyX2dldF9ibG9ja2AuXG5IYW5nIG9uIGEgc2VjLiBIdWguIGBhZnNfZGlyX2ZpbmRfYmxvY2tgICppcyogc3RpbGwgYXJvdW5kLiBMb29raW5nIGF0IHRoZSBkaWZmLCBpdCBsb29rcyBsaWtlIGl0IHdhcyAqbW9kaWZpZWQqIHJhdGhlciB0aGFuIGRlbGV0ZWQuIEl0IGxvb2tzIGxpa2UgYGFmc19kaXJfZmluZF9ibG9ja2AgaXMgbW9kaWZpZWQuXG5cbkkgc2hvdWxkIGRlZmluaXRlbHkgYWRkIHRoYXQgdG8gdGhlIGZvY3VzIHN5bWJvbHMsIGdpdmVuIHRoZSBjaGFuZ2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1NjYxLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDM5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAzOjM0OjQ1LjI0MTE2NDA0M1oiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjUxMzczNjAzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhZnNfZGlyX2ZpbmRfYmxvY2tcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvYWZzL2Rpcl9lZGl0LmM9MzkzPXZvaWQgYWZzX2VkaXRfZGlyX3JlbW92ZShzdHJ1Y3QgYWZzX3Zub2RlICp2bm9kZSxcXG4tLVxcbmZzL2Fmcy9kaXJfZWRpdC5jLTQzNS1cXG5mcy9hZnMvZGlyX2VkaXQuYzo0MzY6XFx0YmxvY2sgPSBhZnNfZGlyX2ZpbmRfYmxvY2soXFx1MDAyNml0ZXIsIGIpO1xcbmZzL2Fmcy9kaXJfZWRpdC5jLTQzNy1cXHRpZiAoIWJsb2NrKVxcbi0tXFxuZnMvYWZzL2Rpcl9lZGl0LmMtNDgwLVxcbmZzL2Fmcy9kaXJfZWRpdC5jOjQ4MTpcXHRcXHRwYmxvY2sgPSBhZnNfZGlyX2ZpbmRfYmxvY2soXFx1MDAyNml0ZXIsIHBiKTtcXG5mcy9hZnMvZGlyX2VkaXQuYy00ODItXFx0XFx0aWYgKCFwYmxvY2spXFxuLS1cXG5mcy9hZnMvZGlyX3NlYXJjaC5jPTU3PWJvb2wgYWZzX2Rpcl9pbml0X2l0ZXIoc3RydWN0IGFmc19kaXJfaXRlciAqaXRlciwgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUpXFxuLS1cXG5mcy9hZnMvZGlyX3NlYXJjaC5jLTY2LSAqL1xcbmZzL2Fmcy9kaXJfc2VhcmNoLmM6Njc6dW5pb24gYWZzX3hkcl9kaXJfYmxvY2sgKmFmc19kaXJfZmluZF9ibG9jayhzdHJ1Y3QgYWZzX2Rpcl9pdGVyICppdGVyLCBzaXplX3QgYmxvY2spXFxuZnMvYWZzL2Rpcl9zZWFyY2guYy02OC17XFxuLS1cXG5mcy9hZnMvZGlyX3NlYXJjaC5jPTEyMD1pbnQgYWZzX2Rpcl9zZWFyY2hfYnVja2V0KHN0cnVjdCBhZnNfZGlyX2l0ZXIgKml0ZXIsIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lLFxcbi0tXFxuZnMvYWZzL2Rpcl9zZWFyY2guYy0xMjYtXFxuZnMvYWZzL2Rpcl9zZWFyY2guYzoxMjc6XFx0bWV0YSA9IGFmc19kaXJfZmluZF9ibG9jayhpdGVyLCAwKTtcXG5mcy9hZnMvZGlyX3NlYXJjaC5jLTEyOC1cXHRpZiAoIW1ldGEpXFxuLS1cXG5mcy9hZnMvZGlyX3NlYXJjaC5jLTE0OC1cXG5mcy9hZnMvZGlyX3NlYXJjaC5jOjE0OTpcXHRcXHRibG9jayA9IGFmc19kaXJfZmluZF9ibG9jayhpdGVyLCBibG51bSk7XFxuZnMvYWZzL2Rpcl9zZWFyY2guYy0xNTAtXFx0XFx0aWYgKCFibG9jaylcXG4tLVxcbmZzL2Fmcy9pbnRlcm5hbC5oPTExMjk9Ym9vbCBhZnNfZGlyX2luaXRfaXRlcihzdHJ1Y3QgYWZzX2Rpcl9pdGVyICppdGVyLCBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSk7XFxuZnMvYWZzL2ludGVybmFsLmg6MTEzMDp1bmlvbiBhZnNfeGRyX2Rpcl9ibG9jayAqYWZzX2Rpcl9maW5kX2Jsb2NrKHN0cnVjdCBhZnNfZGlyX2l0ZXIgKml0ZXIsIHNpemVfdCBibG9jayk7XFxuZnMvYWZzL2ludGVybmFsLmgtMTEzMS1pbnQgYWZzX2Rpcl9zZWFyY2hfYnVja2V0KHN0cnVjdCBhZnNfZGlyX2l0ZXIgKml0ZXIsIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwMzozNDo0Ny43NTQ5MDgzNjJaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODI0NjcyNjE4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQcm9wb3NlZCBQYXRjaCoqXG5cbk9rYXksIHNvIGBhZnNfZGlyX2ZpbmRfYmxvY2tgICppcyogbm9uLXN0YXRpYywgd2hpY2ggSSBoYWQgdG8gY29uZmlybS4gV2l0aCB0aGF0IGNsYXJpZmllZCwgbXkgZm9jdXMgbGlzdCBmb3IgdGhpcyBwYXRjaCBpcyBub3cgbG9ja2VkIGRvd24uIEl0IGluY2x1ZGVzIGEgZmV3IFZGUyBzeW1ib2xzIEknbGwgYmUgc2NydXRpbml6aW5nIGNsb3NlbHk6IGB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWVgLCBgYWZzX2lzX293bmVkX2J5X21lYCwgYGFmc19oYXZlX3NhbWVfb3duZXJgLCBgaW5vZGVfb3duZXJfb3JfY2FwYWJsZWAsIGB2ZnNfc2V0bGVhc2VgLCBgX19jaGVja19zdGlja3lgLCBgc2V0YXR0cl9wcmVwYXJlYCwgYHZmc19kZWR1cGVfZmlsZV9yYW5nZV9vbmVgLCBgYWZzX2VkaXRfZGlyX3JlbW92ZWAsIGBhZnNfZnNfZmV0Y2hfZGF0YWAsIGFuZCwgb2YgY291cnNlLCB0aGUgbm93IGNvbmZpcm1lZCBgYWZzX2Rpcl9maW5kX2Jsb2NrYC5cblxuVGhlIGNydWNpYWwgYml0IGhlcmUgaXMgdGhhdCB0aGlzIHBhdGNoIGZ1bmRhbWVudGFsbHkgYWx0ZXJzIGhvdyBvd25lcnNoaXAgY2hlY2tzIGFyZSBoYW5kbGVkLCBzcGVjaWZpY2FsbHkgYnkgaW50cm9kdWNpbmcgYGlzX293bmVkX2J5X21lYCBhbmQgYGhhdmVfc2FtZV9vd25lcmAgYXMgbmV3IGlub2RlIG9wZXJhdGlvbnMuIFRoaXMgYWxsb3dzIGZpbGVzeXN0ZW1zLCBBRlMgaW4gdGhpcyBpbnN0YW5jZSwgdG8gZWZmZWN0aXZlbHkgb3ZlcnJpZGUgdGhlIHN0YW5kYXJkIFZGUyBjaGVja3MuIFRoYXQncyBhIGh1Z2UgY2hhbmdlLiBUaGV5J3JlIGhvb2tpbmcgaW50byBrZXkgVkZTIHBhdGhzOiBgY2hvd25fb2tgLCBgY2hncnBfb2tgLCB0aGUgY29yZWR1bXAgaGFuZGxpbmcsIHRoZSBvd25lcnNoaXAgY2FwYWJpbGl0aWVzLCB0aGUgbGVhc2UgbWFuYWdlbWVudCwgc3RpY2t5IGJpdCBjaGVja2luZywgZmlsZSBkZWR1cGxpY2F0aW9uLiBBbGwgb2YgdGhlc2UgcG9pbnRzLCBpbiBwYXJ0aWN1bGFyIHRoZSBjb3JlIG93bmVyc2hpcCBzdHVmZiwgYXJlIGNyaXRpY2FsIGFyZWFzLlxuXG5UaGUgcGF0Y2ggaW5jbHVkZXMgaW1wbGVtZW50YXRpb25zIG9mIHRoZXNlIG5ldyBvcGVyYXRpb25zIGZvciBBRlMgaXRzZWxmLCBhbmQgaXQgYWRkcmVzc2VzIHNvbWUgQUZTLXNwZWNpZmljIGlzc3VlcyByZWxhdGVkIHRvIGRpcmVjdG9yeSBtYW5pcHVsYXRpb24gYW5kIGRhdGEgcmV0cmlldmFsLiBTbyBpdCdzIG5vdCBqdXN0IGEgVkZTIGNoYW5nZTsgaXQncyBhIHNpZ25pZmljYW50IG1vZGlmaWNhdGlvbiBvZiBBRlMgYWxvbmdzaWRlIGl0LiBUaGlzIGlzIGRlZmluaXRlbHkgYSBjYW5kaWRhdGUgZm9yIHNvbWUgZXh0ZW5zaXZlIGZ1enppbmcuIFRoZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gYm90aCB0aGUgVkZTIGFuZCB0aGUgQUZTIGxheWVycyByZXF1aXJlIHNvbWUgdmVyeSByaWdvcm91cyB0ZXN0aW5nLCB0byBhdm9pZCBhbnkgcmVncmVzc2lvbnMgb3IgcG90ZW50aWFsIHNlY3VyaXR5IGhvbGVzLiBUaGlzIHJlcXVpcmVzIGdvaW5nIGRlZXAsIGFuZCBhIGhpZ2ggY29uZmlkZW5jZSBsZXZlbCBvZiByZXN1bHQgb24gdGhlIGZ1enppbmcgd2lsbCBiZSByZXF1aXJlZC5cblxuSSBuZWVkIHRvIGNhbGwgc2V0LXJlc3VsdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3MTA2LCJPdXRwdXRUb2tlbnMiOjMyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwMzozNDo1Ni4wMDE2MzczNjRaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTYyOTU0NjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkFGU19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZmc19pbm9kZV9pc19vd25lZF9ieV9tZVwiLFxuICAgIFwiYWZzX2lzX293bmVkX2J5X21lXCIsXG4gICAgXCJhZnNfaGF2ZV9zYW1lX293bmVyXCIsXG4gICAgXCJpbm9kZV9vd25lcl9vcl9jYXBhYmxlXCIsXG4gICAgXCJ2ZnNfc2V0bGVhc2VcIixcbiAgICBcIl9fY2hlY2tfc3RpY2t5XCIsXG4gICAgXCJzZXRhdHRyX3ByZXBhcmVcIixcbiAgICBcInZmc19kZWR1cGVfZmlsZV9yYW5nZV9vbmVcIixcbiAgICBcImFmc19lZGl0X2Rpcl9yZW1vdmVcIixcbiAgICBcImFmc19mc19mZXRjaF9kYXRhXCIsXG4gICAgXCJhZnNfZGlyX2ZpbmRfYmxvY2tcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIG5ldyBpbm9kZSBvcGVyYXRpb25zIGBpc19vd25lZF9ieV9tZWAgYW5kIGBoYXZlX3NhbWVfb3duZXJgIHRvIGFsbG93IGZpbGVzeXN0ZW1zIChsaWtlIEFGUykgdG8gb3ZlcnJpZGUgZGVmYXVsdCBWRlMgb3duZXJzaGlwIGNoZWNrcy4gSXQgbW9kaWZpZXMgY29yZSBWRlMgcGF0aHMgKGUuZy4sIGBjaG93bl9va2AsIGBjaGdycF9va2AsIGBjb3JlZHVtcF9maWxlYCwgYGlub2RlX293bmVyX29yX2NhcGFibGVgLCBgdmZzX3NldGxlYXNlYCwgYG1heV9mb2xsb3dfbGlua2AsIGBtYXlfY3JlYXRlX2luX3N0aWNreWAsIGBfX2NoZWNrX3N0aWNreWAsIGBtYXlfZGVkdXBlX2ZpbGVgKSB0byB1c2UgdGhlc2UgbmV3IG9wZXJhdGlvbnMuIEl0IGFsc28gaW1wbGVtZW50cyB0aGVzZSBvcGVyYXRpb25zIGZvciBBRlMgYW5kIGZpeGVzIHNvbWUgQUZTLXNwZWNpZmljIGJ1Z3MgaW4gZGlyZWN0b3J5IGVkaXRpbmcgYW5kIGRhdGEgZmV0Y2hpbmcuIFRoZXNlIGFyZSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gdGhlIGNvcmUgVkZTIGFuZCBBRlMsIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBvciBzZWN1cml0eSBpc3N1ZXMgYXJlIGludHJvZHVjZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQUZTX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidmZzX2lub2RlX2lzX293bmVkX2J5X21lXCIsXG4gICAgXCJhZnNfaXNfb3duZWRfYnlfbWVcIixcbiAgICBcImFmc19oYXZlX3NhbWVfb3duZXJcIixcbiAgICBcImlub2RlX293bmVyX29yX2NhcGFibGVcIixcbiAgICBcInZmc19zZXRsZWFzZVwiLFxuICAgIFwiX19jaGVja19zdGlja3lcIixcbiAgICBcInNldGF0dHJfcHJlcGFyZVwiLFxuICAgIFwidmZzX2RlZHVwZV9maWxlX3JhbmdlX29uZVwiLFxuICAgIFwiYWZzX2VkaXRfZGlyX3JlbW92ZVwiLFxuICAgIFwiYWZzX2ZzX2ZldGNoX2RhdGFcIixcbiAgICBcImFmc19kaXJfZmluZF9ibG9ja1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgbmV3IGlub2RlIG9wZXJhdGlvbnMgYGlzX293bmVkX2J5X21lYCBhbmQgYGhhdmVfc2FtZV9vd25lcmAgdG8gYWxsb3cgZmlsZXN5c3RlbXMgKGxpa2UgQUZTKSB0byBvdmVycmlkZSBkZWZhdWx0IFZGUyBvd25lcnNoaXAgY2hlY2tzLiBJdCBtb2RpZmllcyBjb3JlIFZGUyBwYXRocyAoZS5nLiwgYGNob3duX29rYCwgYGNoZ3JwX29rYCwgYGNvcmVkdW1wX2ZpbGVgLCBgaW5vZGVfb3duZXJfb3JfY2FwYWJsZWAsIGB2ZnNfc2V0bGVhc2VgLCBgbWF5X2ZvbGxvd19saW5rYCwgYG1heV9jcmVhdGVfaW5fc3RpY2t5YCwgYF9fY2hlY2tfc3RpY2t5YCwgYG1heV9kZWR1cGVfZmlsZWApIHRvIHVzZSB0aGVzZSBuZXcgb3BlcmF0aW9ucy4gSXQgYWxzbyBpbXBsZW1lbnRzIHRoZXNlIG9wZXJhdGlvbnMgZm9yIEFGUyBhbmQgZml4ZXMgc29tZSBBRlMtc3BlY2lmaWMgYnVncyBpbiBkaXJlY3RvcnkgZWRpdGluZyBhbmQgZGF0YSBmZXRjaGluZy4gVGhlc2UgYXJlIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiB0aGUgY29yZSBWRlMgYW5kIEFGUywgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIG9yIHNlY3VyaXR5IGlzc3VlcyBhcmUgaW50cm9kdWNlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowv42d2[1] Phase: Succeeded StartedAt: 2026-07-28 03:35:08 +0000 UTC FinishedAt: 2026-07-28 03:35:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv42d2[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-28 03:35:08 +0000 UTC FinishedAt: 2026-07-28 03:35:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv42d2[2] Phase: Succeeded StartedAt: 2026-07-28 03:35:08 +0000 UTC FinishedAt: 2026-07-28 08:20:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv42d2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76559739eb1f9665fbc3262806a040a604571ccb","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_inode_is_owned_by_me","afs_is_owned_by_me","afs_have_same_owner","inode_owner_or_capable","vfs_setlease","__check_sticky","setattr_prepare","vfs_dedupe_file_range_one","afs_edit_dir_remove","afs_fs_fetch_data","afs_dir_find_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76559739eb1f9665fbc3262806a040a604571ccb","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"b8d72d99-8d44-4907-a9e5-898881390da6","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-28 03:35:08 +0000 UTC FinishedAt: 2026-07-28 08:20:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"76559739eb1f9665fbc3262806a040a604571ccb","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_inode_is_owned_by_me","afs_is_owned_by_me","afs_have_same_owner","inode_owner_or_capable","vfs_setlease","__check_sticky","setattr_prepare","vfs_dedupe_file_range_one","afs_edit_dir_remove","afs_fs_fetch_data","afs_dir_find_block"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"76559739eb1f9665fbc3262806a040a604571ccb","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"b8d72d99-8d44-4907-a9e5-898881390da6","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowv42d2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76559739eb1f9665fbc3262806a040a604571ccb","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_inode_is_owned_by_me","afs_is_owned_by_me","afs_have_same_owner","inode_owner_or_capable","vfs_setlease","__check_sticky","setattr_prepare","vfs_dedupe_file_range_one","afs_edit_dir_remove","afs_fs_fetch_data","afs_dir_find_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76559739eb1f9665fbc3262806a040a604571ccb","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"b8d72d99-8d44-4907-a9e5-898881390da6","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-28 03:35:08 +0000 UTC FinishedAt: 2026-07-28 03:35:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv42d2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76559739eb1f9665fbc3262806a040a604571ccb","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_inode_is_owned_by_me","afs_is_owned_by_me","afs_have_same_owner","inode_owner_or_capable","vfs_setlease","__check_sticky","setattr_prepare","vfs_dedupe_file_range_one","afs_edit_dir_remove","afs_fs_fetch_data","afs_dir_find_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76559739eb1f9665fbc3262806a040a604571ccb","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"b8d72d99-8d44-4907-a9e5-898881390da6","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-28 03:35:08 +0000 UTC FinishedAt: 2026-07-28 03:35:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"76559739eb1f9665fbc3262806a040a604571ccb","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowv42d2/series-workflowv42d2-convert-artifact-1654960963/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowv42d2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76559739eb1f9665fbc3262806a040a604571ccb","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_inode_is_owned_by_me","afs_is_owned_by_me","afs_have_same_owner","inode_owner_or_capable","vfs_setlease","__check_sticky","setattr_prepare","vfs_dedupe_file_range_one","afs_edit_dir_remove","afs_fs_fetch_data","afs_dir_find_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76559739eb1f9665fbc3262806a040a604571ccb","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"b8d72d99-8d44-4907-a9e5-898881390da6","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-28 03:35:18 +0000 UTC FinishedAt: 2026-07-28 04:07:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv42d2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76559739eb1f9665fbc3262806a040a604571ccb","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_inode_is_owned_by_me","afs_is_owned_by_me","afs_have_same_owner","inode_owner_or_capable","vfs_setlease","__check_sticky","setattr_prepare","vfs_dedupe_file_range_one","afs_edit_dir_remove","afs_fs_fetch_data","afs_dir_find_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76559739eb1f9665fbc3262806a040a604571ccb","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"b8d72d99-8d44-4907-a9e5-898881390da6","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-28 03:35:18 +0000 UTC FinishedAt: 2026-07-28 04:07:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*a9905256-5e8b-4406-83fc-d25ebd48e3a0,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowv42d2/series-workflowv42d2-convert-artifact-1654960963/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "bd6ad56d-062e-401e-a00f-1484f1787f99", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowv42d2/series-workflowv42d2-build-action-2415406513/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowv42d2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76559739eb1f9665fbc3262806a040a604571ccb","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_inode_is_owned_by_me","afs_is_owned_by_me","afs_have_same_owner","inode_owner_or_capable","vfs_setlease","__check_sticky","setattr_prepare","vfs_dedupe_file_range_one","afs_edit_dir_remove","afs_fs_fetch_data","afs_dir_find_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76559739eb1f9665fbc3262806a040a604571ccb","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"b8d72d99-8d44-4907-a9e5-898881390da6","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-28 03:35:18 +0000 UTC FinishedAt: 2026-07-28 04:07:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*a9905256-5e8b-4406-83fc-d25ebd48e3a0,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowv42d2/series-workflowv42d2-convert-artifact-1654960963/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "bd6ad56d-062e-401e-a00f-1484f1787f99", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowv42d2/series-workflowv42d2-build-action-2415406513/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowv42d2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76559739eb1f9665fbc3262806a040a604571ccb","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_inode_is_owned_by_me","afs_is_owned_by_me","afs_have_same_owner","inode_owner_or_capable","vfs_setlease","__check_sticky","setattr_prepare","vfs_dedupe_file_range_one","afs_edit_dir_remove","afs_fs_fetch_data","afs_dir_find_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76559739eb1f9665fbc3262806a040a604571ccb","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"b8d72d99-8d44-4907-a9e5-898881390da6","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-28 04:07:47 +0000 UTC FinishedAt: 2026-07-28 04:07:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv42d2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76559739eb1f9665fbc3262806a040a604571ccb","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_inode_is_owned_by_me","afs_is_owned_by_me","afs_have_same_owner","inode_owner_or_capable","vfs_setlease","__check_sticky","setattr_prepare","vfs_dedupe_file_range_one","afs_edit_dir_remove","afs_fs_fetch_data","afs_dir_find_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76559739eb1f9665fbc3262806a040a604571ccb","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"b8d72d99-8d44-4907-a9e5-898881390da6","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-28 04:07:47 +0000 UTC FinishedAt: 2026-07-28 04:07:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv42d2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76559739eb1f9665fbc3262806a040a604571ccb","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_inode_is_owned_by_me","afs_is_owned_by_me","afs_have_same_owner","inode_owner_or_capable","vfs_setlease","__check_sticky","setattr_prepare","vfs_dedupe_file_range_one","afs_edit_dir_remove","afs_fs_fetch_data","afs_dir_find_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76559739eb1f9665fbc3262806a040a604571ccb","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"b8d72d99-8d44-4907-a9e5-898881390da6","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-28 04:07:47 +0000 UTC FinishedAt: 2026-07-28 04:07:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv42d2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76559739eb1f9665fbc3262806a040a604571ccb","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_inode_is_owned_by_me","afs_is_owned_by_me","afs_have_same_owner","inode_owner_or_capable","vfs_setlease","__check_sticky","setattr_prepare","vfs_dedupe_file_range_one","afs_edit_dir_remove","afs_fs_fetch_data","afs_dir_find_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76559739eb1f9665fbc3262806a040a604571ccb","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"b8d72d99-8d44-4907-a9e5-898881390da6","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-28 04:07:47 +0000 UTC FinishedAt: 2026-07-28 04:07:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"76559739eb1f9665fbc3262806a040a604571ccb","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"b8d72d99-8d44-4907-a9e5-898881390da6","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowv42d2/series-workflowv42d2-convert-artifact-1290627578/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowv42d2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76559739eb1f9665fbc3262806a040a604571ccb","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_inode_is_owned_by_me","afs_is_owned_by_me","afs_have_same_owner","inode_owner_or_capable","vfs_setlease","__check_sticky","setattr_prepare","vfs_dedupe_file_range_one","afs_edit_dir_remove","afs_fs_fetch_data","afs_dir_find_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76559739eb1f9665fbc3262806a040a604571ccb","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"b8d72d99-8d44-4907-a9e5-898881390da6","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-28 04:07:57 +0000 UTC FinishedAt: 2026-07-28 04:09:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv42d2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76559739eb1f9665fbc3262806a040a604571ccb","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_inode_is_owned_by_me","afs_is_owned_by_me","afs_have_same_owner","inode_owner_or_capable","vfs_setlease","__check_sticky","setattr_prepare","vfs_dedupe_file_range_one","afs_edit_dir_remove","afs_fs_fetch_data","afs_dir_find_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76559739eb1f9665fbc3262806a040a604571ccb","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"b8d72d99-8d44-4907-a9e5-898881390da6","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-28 04:07:57 +0000 UTC FinishedAt: 2026-07-28 04:09:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*bd6ad56d-062e-401e-a00f-1484f1787f99,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowv42d2/series-workflowv42d2-build-action-2415406513/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowv42d2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76559739eb1f9665fbc3262806a040a604571ccb","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_inode_is_owned_by_me","afs_is_owned_by_me","afs_have_same_owner","inode_owner_or_capable","vfs_setlease","__check_sticky","setattr_prepare","vfs_dedupe_file_range_one","afs_edit_dir_remove","afs_fs_fetch_data","afs_dir_find_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76559739eb1f9665fbc3262806a040a604571ccb","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"b8d72d99-8d44-4907-a9e5-898881390da6","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-28 04:09:54 +0000 UTC FinishedAt: 2026-07-28 04:09:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv42d2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76559739eb1f9665fbc3262806a040a604571ccb","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_inode_is_owned_by_me","afs_is_owned_by_me","afs_have_same_owner","inode_owner_or_capable","vfs_setlease","__check_sticky","setattr_prepare","vfs_dedupe_file_range_one","afs_edit_dir_remove","afs_fs_fetch_data","afs_dir_find_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76559739eb1f9665fbc3262806a040a604571ccb","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"b8d72d99-8d44-4907-a9e5-898881390da6","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-28 04:09:54 +0000 UTC FinishedAt: 2026-07-28 04:09:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv42d2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76559739eb1f9665fbc3262806a040a604571ccb","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_inode_is_owned_by_me","afs_is_owned_by_me","afs_have_same_owner","inode_owner_or_capable","vfs_setlease","__check_sticky","setattr_prepare","vfs_dedupe_file_range_one","afs_edit_dir_remove","afs_fs_fetch_data","afs_dir_find_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76559739eb1f9665fbc3262806a040a604571ccb","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"b8d72d99-8d44-4907-a9e5-898881390da6","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-28 04:09:54 +0000 UTC FinishedAt: 2026-07-28 05:12:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv42d2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76559739eb1f9665fbc3262806a040a604571ccb","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_inode_is_owned_by_me","afs_is_owned_by_me","afs_have_same_owner","inode_owner_or_capable","vfs_setlease","__check_sticky","setattr_prepare","vfs_dedupe_file_range_one","afs_edit_dir_remove","afs_fs_fetch_data","afs_dir_find_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76559739eb1f9665fbc3262806a040a604571ccb","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"b8d72d99-8d44-4907-a9e5-898881390da6","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-28 04:09:54 +0000 UTC FinishedAt: 2026-07-28 05:12:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*a9905256-5e8b-4406-83fc-d25ebd48e3a0,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowv42d2/series-workflowv42d2-convert-artifact-1290627578/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "a01a8828-1d36-473f-a20f-798ed93e8fb2", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowv42d2/series-workflowv42d2-build-action-256379230/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowv42d2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76559739eb1f9665fbc3262806a040a604571ccb","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_inode_is_owned_by_me","afs_is_owned_by_me","afs_have_same_owner","inode_owner_or_capable","vfs_setlease","__check_sticky","setattr_prepare","vfs_dedupe_file_range_one","afs_edit_dir_remove","afs_fs_fetch_data","afs_dir_find_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76559739eb1f9665fbc3262806a040a604571ccb","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"b8d72d99-8d44-4907-a9e5-898881390da6","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-28 04:09:54 +0000 UTC FinishedAt: 2026-07-28 05:12:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*a9905256-5e8b-4406-83fc-d25ebd48e3a0,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowv42d2/series-workflowv42d2-convert-artifact-1290627578/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "a01a8828-1d36-473f-a20f-798ed93e8fb2", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowv42d2/series-workflowv42d2-build-action-256379230/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowv42d2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76559739eb1f9665fbc3262806a040a604571ccb","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_inode_is_owned_by_me","afs_is_owned_by_me","afs_have_same_owner","inode_owner_or_capable","vfs_setlease","__check_sticky","setattr_prepare","vfs_dedupe_file_range_one","afs_edit_dir_remove","afs_fs_fetch_data","afs_dir_find_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76559739eb1f9665fbc3262806a040a604571ccb","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"b8d72d99-8d44-4907-a9e5-898881390da6","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-28 05:12:21 +0000 UTC FinishedAt: 2026-07-28 05:12:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv42d2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76559739eb1f9665fbc3262806a040a604571ccb","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_inode_is_owned_by_me","afs_is_owned_by_me","afs_have_same_owner","inode_owner_or_capable","vfs_setlease","__check_sticky","setattr_prepare","vfs_dedupe_file_range_one","afs_edit_dir_remove","afs_fs_fetch_data","afs_dir_find_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76559739eb1f9665fbc3262806a040a604571ccb","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"b8d72d99-8d44-4907-a9e5-898881390da6","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-28 05:12:21 +0000 UTC FinishedAt: 2026-07-28 05:12:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv42d2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76559739eb1f9665fbc3262806a040a604571ccb","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_inode_is_owned_by_me","afs_is_owned_by_me","afs_have_same_owner","inode_owner_or_capable","vfs_setlease","__check_sticky","setattr_prepare","vfs_dedupe_file_range_one","afs_edit_dir_remove","afs_fs_fetch_data","afs_dir_find_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76559739eb1f9665fbc3262806a040a604571ccb","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"b8d72d99-8d44-4907-a9e5-898881390da6","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-28 05:12:21 +0000 UTC FinishedAt: 2026-07-28 05:14:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv42d2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76559739eb1f9665fbc3262806a040a604571ccb","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_inode_is_owned_by_me","afs_is_owned_by_me","afs_have_same_owner","inode_owner_or_capable","vfs_setlease","__check_sticky","setattr_prepare","vfs_dedupe_file_range_one","afs_edit_dir_remove","afs_fs_fetch_data","afs_dir_find_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76559739eb1f9665fbc3262806a040a604571ccb","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"b8d72d99-8d44-4907-a9e5-898881390da6","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-28 05:12:21 +0000 UTC FinishedAt: 2026-07-28 05:14:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*a01a8828-1d36-473f-a20f-798ed93e8fb2,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowv42d2/series-workflowv42d2-build-action-256379230/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowv42d2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76559739eb1f9665fbc3262806a040a604571ccb","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_inode_is_owned_by_me","afs_is_owned_by_me","afs_have_same_owner","inode_owner_or_capable","vfs_setlease","__check_sticky","setattr_prepare","vfs_dedupe_file_range_one","afs_edit_dir_remove","afs_fs_fetch_data","afs_dir_find_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76559739eb1f9665fbc3262806a040a604571ccb","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"b8d72d99-8d44-4907-a9e5-898881390da6","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-28 05:14:24 +0000 UTC FinishedAt: 2026-07-28 08:20:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv42d2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76559739eb1f9665fbc3262806a040a604571ccb","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_inode_is_owned_by_me","afs_is_owned_by_me","afs_have_same_owner","inode_owner_or_capable","vfs_setlease","__check_sticky","setattr_prepare","vfs_dedupe_file_range_one","afs_edit_dir_remove","afs_fs_fetch_data","afs_dir_find_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76559739eb1f9665fbc3262806a040a604571ccb","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"b8d72d99-8d44-4907-a9e5-898881390da6","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-28 05:14:24 +0000 UTC FinishedAt: 2026-07-28 08:20:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_inode_is_owned_by_me","afs_is_owned_by_me","afs_have_same_owner","inode_owner_or_capable","vfs_setlease","__check_sticky","setattr_prepare","vfs_dedupe_file_range_one","afs_edit_dir_remove","afs_fs_fetch_data","afs_dir_find_block"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*bd6ad56d-062e-401e-a00f-1484f1787f99,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*a01a8828-1d36-473f-a20f-798ed93e8fb2,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowv42d2/series-workflowv42d2-build-action-2415406513/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowv42d2/series-workflowv42d2-build-action-256379230/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowv42d2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76559739eb1f9665fbc3262806a040a604571ccb","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_inode_is_owned_by_me","afs_is_owned_by_me","afs_have_same_owner","inode_owner_or_capable","vfs_setlease","__check_sticky","setattr_prepare","vfs_dedupe_file_range_one","afs_edit_dir_remove","afs_fs_fetch_data","afs_dir_find_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76559739eb1f9665fbc3262806a040a604571ccb","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"b8d72d99-8d44-4907-a9e5-898881390da6","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-28 05:14:24 +0000 UTC FinishedAt: 2026-07-28 05:14:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv42d2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76559739eb1f9665fbc3262806a040a604571ccb","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_inode_is_owned_by_me","afs_is_owned_by_me","afs_have_same_owner","inode_owner_or_capable","vfs_setlease","__check_sticky","setattr_prepare","vfs_dedupe_file_range_one","afs_edit_dir_remove","afs_fs_fetch_data","afs_dir_find_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76559739eb1f9665fbc3262806a040a604571ccb","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"b8d72d99-8d44-4907-a9e5-898881390da6","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-28 05:14:24 +0000 UTC FinishedAt: 2026-07-28 05:14:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_inode_is_owned_by_me","afs_is_owned_by_me","afs_have_same_owner","inode_owner_or_capable","vfs_setlease","__check_sticky","setattr_prepare","vfs_dedupe_file_range_one","afs_edit_dir_remove","afs_fs_fetch_data","afs_dir_find_block"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowv42d2/series-workflowv42d2-convert-artifact-1826791983/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowv42d2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76559739eb1f9665fbc3262806a040a604571ccb","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_inode_is_owned_by_me","afs_is_owned_by_me","afs_have_same_owner","inode_owner_or_capable","vfs_setlease","__check_sticky","setattr_prepare","vfs_dedupe_file_range_one","afs_edit_dir_remove","afs_fs_fetch_data","afs_dir_find_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76559739eb1f9665fbc3262806a040a604571ccb","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"b8d72d99-8d44-4907-a9e5-898881390da6","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-28 05:14:24 +0000 UTC FinishedAt: 2026-07-28 05:14:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv42d2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76559739eb1f9665fbc3262806a040a604571ccb","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_inode_is_owned_by_me","afs_is_owned_by_me","afs_have_same_owner","inode_owner_or_capable","vfs_setlease","__check_sticky","setattr_prepare","vfs_dedupe_file_range_one","afs_edit_dir_remove","afs_fs_fetch_data","afs_dir_find_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76559739eb1f9665fbc3262806a040a604571ccb","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"b8d72d99-8d44-4907-a9e5-898881390da6","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-28 05:14:24 +0000 UTC FinishedAt: 2026-07-28 05:14:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv42d2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76559739eb1f9665fbc3262806a040a604571ccb","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_inode_is_owned_by_me","afs_is_owned_by_me","afs_have_same_owner","inode_owner_or_capable","vfs_setlease","__check_sticky","setattr_prepare","vfs_dedupe_file_range_one","afs_edit_dir_remove","afs_fs_fetch_data","afs_dir_find_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76559739eb1f9665fbc3262806a040a604571ccb","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"b8d72d99-8d44-4907-a9e5-898881390da6","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-28 05:14:24 +0000 UTC FinishedAt: 2026-07-28 05:14:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv42d2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76559739eb1f9665fbc3262806a040a604571ccb","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_inode_is_owned_by_me","afs_is_owned_by_me","afs_have_same_owner","inode_owner_or_capable","vfs_setlease","__check_sticky","setattr_prepare","vfs_dedupe_file_range_one","afs_edit_dir_remove","afs_fs_fetch_data","afs_dir_find_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76559739eb1f9665fbc3262806a040a604571ccb","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"b8d72d99-8d44-4907-a9e5-898881390da6","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-28 05:14:35 +0000 UTC FinishedAt: 2026-07-28 08:20:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv42d2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76559739eb1f9665fbc3262806a040a604571ccb","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_inode_is_owned_by_me","afs_is_owned_by_me","afs_have_same_owner","inode_owner_or_capable","vfs_setlease","__check_sticky","setattr_prepare","vfs_dedupe_file_range_one","afs_edit_dir_remove","afs_fs_fetch_data","afs_dir_find_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76559739eb1f9665fbc3262806a040a604571ccb","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"b8d72d99-8d44-4907-a9e5-898881390da6","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-28 05:14:35 +0000 UTC FinishedAt: 2026-07-28 08:20:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*bd6ad56d-062e-401e-a00f-1484f1787f99,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*a01a8828-1d36-473f-a20f-798ed93e8fb2,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowv42d2/series-workflowv42d2-build-action-2415406513/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowv42d2/series-workflowv42d2-build-action-256379230/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowv42d2/series-workflowv42d2-convert-artifact-1826791983/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}