Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nYjoQ-0002yS-Om for pgsql-hackers@arkaria.postgresql.org; Mon, 28 Mar 2022 07:29:15 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1nYjoP-0004nu-93 for pgsql-hackers@arkaria.postgresql.org; Mon, 28 Mar 2022 07:29:13 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nYjoO-0004nk-Kj for pgsql-hackers@lists.postgresql.org; Mon, 28 Mar 2022 07:29:12 +0000 Received: from mail-pj1-x1033.google.com ([2607:f8b0:4864:20::1033]) by magus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1nYjoG-0004UL-VL for pgsql-hackers@postgresql.org; Mon, 28 Mar 2022 07:29:12 +0000 Received: by mail-pj1-x1033.google.com with SMTP id l4-20020a17090a49c400b001c6840df4a3so14642078pjm.0 for ; Mon, 28 Mar 2022 00:29:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=YXZPHJh0mvCxAFvrb7+iXJjEWU+DICMyvOJSjVhPpro=; b=VBxouohm2KkOvLcM+JSixBbjWO9T70n7GsZUwgRx5hIuzyLAyAzagvRRU0j/Zq/6Ip jPTpn1nuVnub3QDWaBVWhy3IZygLdaopiz6kEi384nipdkheaVhyaLnYSoB+YupxnZy9 oyKsgF85NLfbOPbdnsWu0lvLqIopP+njE7yWEbCMBRkuw/8nWpJ+JRsJgm7nXKwfgzc+ CYBnTrJRh11Ln0qJT77wePKh4VXwgXDhEUR1ThfSyDnuKbRpddTeMVmoLASamryqLp+o WkiOUieknHdP2tbK0uN6YS5spzJm2/KTFia67fqoqTQsaO4tAWIPWGoajpcKmEVnzkbg Y7ZQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=YXZPHJh0mvCxAFvrb7+iXJjEWU+DICMyvOJSjVhPpro=; b=vT5rlIdGoBaASOYu4rqyxCGb0Tus9/FIzL5EYvvv1MSDC/IlmuWH9aB3oT3Hc7OVtN ADB4lPcZeJGBDVPYIFfa4D/sd3BRjcrO93vSIUNRyLEDGBl6PJ5A+IFvBIyCxT9NHm17 UMGQJsyBqbu5ztDz/dhSnFRbf7TBy4lk61nM2+fqmRmcZa+jgrVZyyukwd53mveuWXsb g5JdPZJGOi7cmvCXIDAbt051Qv47ucbSheb3wW7iWgN9lHLXd5xRR6lVhfHXe2rbrKu9 GQhVBYhUoComLOb+zwkdaNww0QNyEfN/pWOwJB4YtMDsmBabDMg9oYN712PulIDfGpZz QP5g== X-Gm-Message-State: AOAM532fWdUKpR/PB6CCs6kATKptklrZzXHQUTujXYafGKD+OVrL83WM rR787ApiEpYDDVKBINMIV6l5+rmRuXk2lnQ0w30= X-Google-Smtp-Source: ABdhPJzFjoJR8vMxhJvwKxObwd3PePkHfCMF/WK9Pp2iiyJV6180TwQiT81h4iCaQxgly4RrAF+vLbY/hSj3aDznr08= X-Received: by 2002:a17:90b:3003:b0:1c9:9751:cf9c with SMTP id hg3-20020a17090b300300b001c99751cf9cmr6546063pjb.20.1648452542606; Mon, 28 Mar 2022 00:29:02 -0700 (PDT) MIME-Version: 1.0 References: <215356.1647286703@sss.pgh.pa.us> In-Reply-To: From: Amit Langote Date: Mon, 28 Mar 2022 16:28:46 +0900 Message-ID: Subject: Re: generic plans and "initial" pruning To: Robert Haas Cc: Tom Lane , PostgreSQL-development , "David Rowley *EXTERN*" Content-Type: multipart/mixed; boundary="0000000000003b47cb05db424440" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000003b47cb05db424440 Content-Type: text/plain; charset="UTF-8" On Mon, Mar 28, 2022 at 4:17 PM Amit Langote wrote: > Other than the changes mentioned above, the updated patch now contains > a bit more commentary than earlier versions, mostly around > AcquireExecutorLocks()'s new way of determining the set of relations > to lock and the significantly redesigned working of the "initial" > execution pruning. Forgot to rebase over the latest HEAD, so here's v7. Also fixed that _out and _read functions for PlanInitPruningOutput were using an obsolete node label. -- Amit Langote EDB: http://www.enterprisedb.com --0000000000003b47cb05db424440 Content-Type: application/octet-stream; name="v7-0002-Add-Merge-Append.partitioned_rels.patch" Content-Disposition: attachment; filename="v7-0002-Add-Merge-Append.partitioned_rels.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l1ae1bu61 RnJvbSBiNDNhYWMyMTdiYTUxODU0YzVhMjI2MzZmOTRmMTRlODFiYWUzOTkxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBhbWl0bGFuIDxhbWl0bGFuZ290ZTA5QGdtYWlsLmNvbT4KRGF0 ZTogVGh1LCAyNCBNYXIgMjAyMiAyMjo0NzowMyArMDkwMApTdWJqZWN0OiBbUEFUQ0ggdjcgMi80 XSBBZGQgW01lcmdlXUFwcGVuZC5wYXJ0aXRpb25lZF9yZWxzCgpUbyByZWNvcmQgdGhlIFJUIGlu ZGV4ZXMgb2YgYWxsIHBhcnRpdGlvbmVkIGFuY2VzdG9ycyBsZWFkaW5nIHVwIHRvCmxlYWYgcGFy dGl0aW9ucyB0aGF0IGFyZSBhcHBlbmRlZCBieSB0aGUgbm9kZS4KCklmIGEgZ2l2ZW4gW01lcmdl XUFwcGVuZCBub2RlIGlzIGxlZnQgb3V0IGZyb20gdGhlIHBsYW4gZHVlIHRvIHRoZXJlCmJlaW5n IG9ubHkgb25lIGVsZW1lbnQgaW4gaXRzIGxpc3Qgb2YgY2hpbGQgc3VicGxhbnMsIHRoZW4gaXRz CnBhcnRpdGlvbmVkX3JlbHMgc2V0IGlzIGFkZGVkIHRvIFBsYW5uZXJHbG9iYWwuZWxpZGVkQXBw ZW5kUGFydGVkUmVscwp0aGF0IGlzIHBhc3NlZCBkb3duIHRvIHRoZSBleGVjdXRvciB0aHJvdWdo IFBsYW5uZWRTdG10LgoKVGhlcmUgYXJlIG5vIHVzZXJzIGZvciBwYXJ0aXRpb25lZF9yZWxzIGFu ZCBlbGlkZWRBcHBlbmRQYXJ0ZWRSZWxzCmFzIG9mIHRoaXMgY29tbWl0LCB0aG91Z2ggYSBsYXRl ciBjb21taXQgd2lsbCByZXF1aXJlIHRoZSBhYmlsaXR5CnRvIGV4dHJhY3QgdGhlIHNldCBvZiBy ZWxhdGlvbnMgdGhhdCBtdXN0IGJlIGxvY2tlZCB0byBtYWtlIGEgcGxhbgp0cmVlIHNhZmUgZm9y IGV4ZWN1dGlvbiBieSB3YWxraW5nIHRoZSBwbGFuIHRyZWUgaXRzZWxmLCBzbyBoYXZpbmcKdGhl IHBhcnRpdGlvbmVkIHRhYmxlcyBiZSBhbHNvIHByZXNlbnQgaW4gdGhlIHBsYW4gdHJlZSB3aWxs IGJlCmhlbHBmdWwuICBOb3RlIHRoYXQgY3VycmVudGx5IHRoZSBleGVjdXRvciByZWxpZXMgb24g dGhlIGZhY3QgdGhhdAp0aGUgc2V0IG9mIHJlbGF0aW9ucyB0byBiZSBsb2NrZWQgY2FuIGJlIG9i dGFpbmVkIGJ5IHNpbXBseSBzY2FubmluZwp0aGUgcmFuZ2UgdGFibGUgdGhhdCdzIG1hZGUgYXZh aWxhYmxlIGluIFBsYW5uZWRTdG10IGFsb25nIHdpdGggdGhlCnBsYW4gdHJlZS4KLS0tCiBzcmMv YmFja2VuZC9ub2Rlcy9jb3B5ZnVuY3MuYyAgICAgICAgICAgfCAgMyArKysKIHNyYy9iYWNrZW5k L25vZGVzL291dGZ1bmNzLmMgICAgICAgICAgICB8ICA1ICsrKysrCiBzcmMvYmFja2VuZC9ub2Rl cy9yZWFkZnVuY3MuYyAgICAgICAgICAgfCAgMyArKysKIHNyYy9iYWNrZW5kL29wdGltaXplci9w YXRoL2pvaW5yZWxzLmMgICB8ICA5ICsrKysrKysrCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxh bi9jcmVhdGVwbGFuLmMgfCAxOCArKysrKysrKysrKysrKystCiBzcmMvYmFja2VuZC9vcHRpbWl6 ZXIvcGxhbi9wbGFubmVyLmMgICAgfCAgOCArKysrKysrCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIv cGxhbi9zZXRyZWZzLmMgICAgfCAyOCArKysrKysrKysrKysrKysrKysrKysrKysrCiBzcmMvYmFj a2VuZC9vcHRpbWl6ZXIvdXRpbC9pbmhlcml0LmMgICAgfCAxNiArKysrKysrKysrKysrKwogc3Jj L2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcmVsbm9kZS5jICAgIHwgMjAgKysrKysrKysrKysrKysr KysrCiBzcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaCAgICAgICAgICAgfCAyMiArKysrKysr KysrKysrKysrKysrCiBzcmMvaW5jbHVkZS9ub2Rlcy9wbGFubm9kZXMuaCAgICAgICAgICAgfCAx NyArKysrKysrKysrKysrKysKIDExIGZpbGVzIGNoYW5nZWQsIDE0OCBpbnNlcnRpb25zKCspLCAx IGRlbGV0aW9uKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvbm9kZXMvY29weWZ1bmNzLmMg Yi9zcmMvYmFja2VuZC9ub2Rlcy9jb3B5ZnVuY3MuYwppbmRleCAyY2JkOGFhMGRmLi5kNGI1Y2M3 ZTU5IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9ub2Rlcy9jb3B5ZnVuY3MuYworKysgYi9zcmMv YmFja2VuZC9ub2Rlcy9jb3B5ZnVuY3MuYwpAQCAtMTA2LDYgKzEwNiw3IEBAIF9jb3B5UGxhbm5l ZFN0bXQoY29uc3QgUGxhbm5lZFN0bXQgKmZyb20pCiAJQ09QWV9OT0RFX0ZJRUxEKGludmFsSXRl bXMpOwogCUNPUFlfTk9ERV9GSUVMRChwYXJhbUV4ZWNUeXBlcyk7CiAJQ09QWV9OT0RFX0ZJRUxE KHV0aWxpdHlTdG10KTsKKwlDT1BZX0JJVE1BUFNFVF9GSUVMRChlbGlkZWRBcHBlbmRQYXJ0ZWRS ZWxzKTsKIAlDT1BZX0xPQ0FUSU9OX0ZJRUxEKHN0bXRfbG9jYXRpb24pOwogCUNPUFlfU0NBTEFS X0ZJRUxEKHN0bXRfbGVuKTsKIApAQCAtMjUzLDYgKzI1NCw3IEBAIF9jb3B5QXBwZW5kKGNvbnN0 IEFwcGVuZCAqZnJvbSkKIAlDT1BZX1NDQUxBUl9GSUVMRChuYXN5bmNwbGFucyk7CiAJQ09QWV9T Q0FMQVJfRklFTEQoZmlyc3RfcGFydGlhbF9wbGFuKTsKIAlDT1BZX05PREVfRklFTEQocGFydF9w cnVuZV9pbmZvKTsKKwlDT1BZX0JJVE1BUFNFVF9GSUVMRChwYXJ0aXRpb25lZF9yZWxzKTsKIAog CXJldHVybiBuZXdub2RlOwogfQpAQCAtMjgxLDYgKzI4Myw3IEBAIF9jb3B5TWVyZ2VBcHBlbmQo Y29uc3QgTWVyZ2VBcHBlbmQgKmZyb20pCiAJQ09QWV9QT0lOVEVSX0ZJRUxEKGNvbGxhdGlvbnMs IGZyb20tPm51bUNvbHMgKiBzaXplb2YoT2lkKSk7CiAJQ09QWV9QT0lOVEVSX0ZJRUxEKG51bGxz Rmlyc3QsIGZyb20tPm51bUNvbHMgKiBzaXplb2YoYm9vbCkpOwogCUNPUFlfTk9ERV9GSUVMRChw YXJ0X3BydW5lX2luZm8pOworCUNPUFlfQklUTUFQU0VUX0ZJRUxEKHBhcnRpdGlvbmVkX3JlbHMp OwogCiAJcmV0dXJuIG5ld25vZGU7CiB9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9ub2Rlcy9v dXRmdW5jcy5jIGIvc3JjL2JhY2tlbmQvbm9kZXMvb3V0ZnVuY3MuYwppbmRleCBjMjVmMGJkNjg0 Li45OTA1NjI3MmYzIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9ub2Rlcy9vdXRmdW5jcy5jCisr KyBiL3NyYy9iYWNrZW5kL25vZGVzL291dGZ1bmNzLmMKQEAgLTMyNCw2ICszMjQsNyBAQCBfb3V0 UGxhbm5lZFN0bXQoU3RyaW5nSW5mbyBzdHIsIGNvbnN0IFBsYW5uZWRTdG10ICpub2RlKQogCVdS SVRFX05PREVfRklFTEQoaW52YWxJdGVtcyk7CiAJV1JJVEVfTk9ERV9GSUVMRChwYXJhbUV4ZWNU eXBlcyk7CiAJV1JJVEVfTk9ERV9GSUVMRCh1dGlsaXR5U3RtdCk7CisJV1JJVEVfQklUTUFQU0VU X0ZJRUxEKGVsaWRlZEFwcGVuZFBhcnRlZFJlbHMpOwogCVdSSVRFX0xPQ0FUSU9OX0ZJRUxEKHN0 bXRfbG9jYXRpb24pOwogCVdSSVRFX0lOVF9GSUVMRChzdG10X2xlbik7CiB9CkBAIC00NDMsNiAr NDQ0LDcgQEAgX291dEFwcGVuZChTdHJpbmdJbmZvIHN0ciwgY29uc3QgQXBwZW5kICpub2RlKQog CVdSSVRFX0lOVF9GSUVMRChuYXN5bmNwbGFucyk7CiAJV1JJVEVfSU5UX0ZJRUxEKGZpcnN0X3Bh cnRpYWxfcGxhbik7CiAJV1JJVEVfTk9ERV9GSUVMRChwYXJ0X3BydW5lX2luZm8pOworCVdSSVRF X0JJVE1BUFNFVF9GSUVMRChwYXJ0aXRpb25lZF9yZWxzKTsKIH0KIAogc3RhdGljIHZvaWQKQEAg LTQ2MCw2ICs0NjIsNyBAQCBfb3V0TWVyZ2VBcHBlbmQoU3RyaW5nSW5mbyBzdHIsIGNvbnN0IE1l cmdlQXBwZW5kICpub2RlKQogCVdSSVRFX09JRF9BUlJBWShjb2xsYXRpb25zLCBub2RlLT5udW1D b2xzKTsKIAlXUklURV9CT09MX0FSUkFZKG51bGxzRmlyc3QsIG5vZGUtPm51bUNvbHMpOwogCVdS SVRFX05PREVfRklFTEQocGFydF9wcnVuZV9pbmZvKTsKKwlXUklURV9CSVRNQVBTRVRfRklFTEQo cGFydGl0aW9uZWRfcmVscyk7CiB9CiAKIHN0YXRpYyB2b2lkCkBAIC0yMzMzLDYgKzIzMzYsNyBA QCBfb3V0UGxhbm5lckdsb2JhbChTdHJpbmdJbmZvIHN0ciwgY29uc3QgUGxhbm5lckdsb2JhbCAq bm9kZSkKIAlXUklURV9CT09MX0ZJRUxEKHBhcmFsbGVsTW9kZU9LKTsKIAlXUklURV9CT09MX0ZJ RUxEKHBhcmFsbGVsTW9kZU5lZWRlZCk7CiAJV1JJVEVfQ0hBUl9GSUVMRChtYXhQYXJhbGxlbEhh emFyZCk7CisJV1JJVEVfQklUTUFQU0VUX0ZJRUxEKGVsaWRlZEFwcGVuZFBhcnRlZFJlbHMpOwog fQogCiBzdGF0aWMgdm9pZApAQCAtMjQ0NCw2ICsyNDQ4LDcgQEAgX291dFJlbE9wdEluZm8oU3Ry aW5nSW5mbyBzdHIsIGNvbnN0IFJlbE9wdEluZm8gKm5vZGUpCiAJV1JJVEVfQk9PTF9GSUVMRChw YXJ0Ym91bmRzX21lcmdlZCk7CiAJV1JJVEVfQklUTUFQU0VUX0ZJRUxEKGxpdmVfcGFydHMpOwog CVdSSVRFX0JJVE1BUFNFVF9GSUVMRChhbGxfcGFydHJlbHMpOworCVdSSVRFX0JJVE1BUFNFVF9G SUVMRChwYXJ0aXRpb25lZF9yZWxzKTsKIH0KIAogc3RhdGljIHZvaWQKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL25vZGVzL3JlYWRmdW5jcy5jIGIvc3JjL2JhY2tlbmQvbm9kZXMvcmVhZGZ1bmNz LmMKaW5kZXggZTBiM2FkMWVkMi4uNzUzNmYyMTZiZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv bm9kZXMvcmVhZGZ1bmNzLmMKKysrIGIvc3JjL2JhY2tlbmQvbm9kZXMvcmVhZGZ1bmNzLmMKQEAg LTE2NjIsNiArMTY2Miw3IEBAIF9yZWFkUGxhbm5lZFN0bXQodm9pZCkKIAlSRUFEX05PREVfRklF TEQoaW52YWxJdGVtcyk7CiAJUkVBRF9OT0RFX0ZJRUxEKHBhcmFtRXhlY1R5cGVzKTsKIAlSRUFE X05PREVfRklFTEQodXRpbGl0eVN0bXQpOworCVJFQURfQklUTUFQU0VUX0ZJRUxEKGVsaWRlZEFw cGVuZFBhcnRlZFJlbHMpOwogCVJFQURfTE9DQVRJT05fRklFTEQoc3RtdF9sb2NhdGlvbik7CiAJ UkVBRF9JTlRfRklFTEQoc3RtdF9sZW4pOwogCkBAIC0xNzg0LDYgKzE3ODUsNyBAQCBfcmVhZEFw cGVuZCh2b2lkKQogCVJFQURfSU5UX0ZJRUxEKG5hc3luY3BsYW5zKTsKIAlSRUFEX0lOVF9GSUVM RChmaXJzdF9wYXJ0aWFsX3BsYW4pOwogCVJFQURfTk9ERV9GSUVMRChwYXJ0X3BydW5lX2luZm8p OworCVJFQURfQklUTUFQU0VUX0ZJRUxEKHBhcnRpdGlvbmVkX3JlbHMpOwogCiAJUkVBRF9ET05F KCk7CiB9CkBAIC0xODA2LDYgKzE4MDgsNyBAQCBfcmVhZE1lcmdlQXBwZW5kKHZvaWQpCiAJUkVB RF9PSURfQVJSQVkoY29sbGF0aW9ucywgbG9jYWxfbm9kZS0+bnVtQ29scyk7CiAJUkVBRF9CT09M X0FSUkFZKG51bGxzRmlyc3QsIGxvY2FsX25vZGUtPm51bUNvbHMpOwogCVJFQURfTk9ERV9GSUVM RChwYXJ0X3BydW5lX2luZm8pOworCVJFQURfQklUTUFQU0VUX0ZJRUxEKHBhcnRpdGlvbmVkX3Jl bHMpOwogCiAJUkVBRF9ET05FKCk7CiB9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6 ZXIvcGF0aC9qb2lucmVscy5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvam9pbnJlbHMu YwppbmRleCA5ZGEzZmYyZjlhLi5lNzRkNDBmZWUzIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9v cHRpbWl6ZXIvcGF0aC9qb2lucmVscy5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRo L2pvaW5yZWxzLmMKQEAgLTE1NDksNiArMTU0OSwxNSBAQCB0cnlfcGFydGl0aW9ud2lzZV9qb2lu KFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwxLCBSZWxPcHRJbmZvICpyZWwyLAog CQlwb3B1bGF0ZV9qb2lucmVsX3dpdGhfcGF0aHMocm9vdCwgY2hpbGRfcmVsMSwgY2hpbGRfcmVs MiwKIAkJCQkJCQkJCWNoaWxkX2pvaW5yZWwsIGNoaWxkX3NqaW5mbywKIAkJCQkJCQkJCWNoaWxk X3Jlc3RyaWN0bGlzdCk7CisKKwkJLyoKKwkJICogQSBwYXJlbnQgcmVsYXRpb24ncyBwYXJ0aXRp b25lZF9yZWxzIG11c3QgYmUgYSBzdXBlcnNldCBvZiB0aGUgc2V0cworCQkgKiBvZiBhbGwgaXRz IGNoaWxkcmVuLCBkaXJlY3Qgb3IgaW5kaXJlY3QsIHNvIGJ1YmJsZSB1cCB0aGUgY2hpbGQKKwkJ ICogam9pbnJlbCdzIHNldC4KKwkJICovCisJCWpvaW5yZWwtPnBhcnRpdGlvbmVkX3JlbHMgPQor CQkJYm1zX2FkZF9tZW1iZXJzKGpvaW5yZWwtPnBhcnRpdGlvbmVkX3JlbHMsCisJCQkJCQkJY2hp bGRfam9pbnJlbC0+cGFydGl0aW9uZWRfcmVscyk7CiAJfQogfQogCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9jcmVhdGVwbGFuLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6 ZXIvcGxhbi9jcmVhdGVwbGFuLmMKaW5kZXggZmEwNjlhMjE3Yy4uMDAyNjA4NjU5MSAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vY3JlYXRlcGxhbi5jCisrKyBiL3NyYy9i YWNrZW5kL29wdGltaXplci9wbGFuL2NyZWF0ZXBsYW4uYwpAQCAtMjYsMTAgKzI2LDEyIEBACiAj aW5jbHVkZSAibm9kZXMvZXh0ZW5zaWJsZS5oIgogI2luY2x1ZGUgIm5vZGVzL21ha2VmdW5jcy5o IgogI2luY2x1ZGUgIm5vZGVzL25vZGVGdW5jcy5oIgorI2luY2x1ZGUgIm9wdGltaXplci9hcHBl bmRpbmZvLmgiCiAjaW5jbHVkZSAib3B0aW1pemVyL2NsYXVzZXMuaCIKICNpbmNsdWRlICJvcHRp bWl6ZXIvY29zdC5oIgogI2luY2x1ZGUgIm9wdGltaXplci9vcHRpbWl6ZXIuaCIKICNpbmNsdWRl ICJvcHRpbWl6ZXIvcGFyYW1hc3NpZ24uaCIKKyNpbmNsdWRlICJvcHRpbWl6ZXIvcGF0aG5vZGUu aCIKICNpbmNsdWRlICJvcHRpbWl6ZXIvcGF0aHMuaCIKICNpbmNsdWRlICJvcHRpbWl6ZXIvcGxh Y2Vob2xkZXIuaCIKICNpbmNsdWRlICJvcHRpbWl6ZXIvcGxhbmNhdC5oIgpAQCAtMTMzMSwxMSAr MTMzMywxMSBAQCBjcmVhdGVfYXBwZW5kX3BsYW4oUGxhbm5lckluZm8gKnJvb3QsIEFwcGVuZFBh dGggKmJlc3RfcGF0aCwgaW50IGZsYWdzKQogCQkJCQkJCQkJCSBiZXN0X3BhdGgtPnN1YnBhdGhz LAogCQkJCQkJCQkJCSBwcnVuZXF1YWwpOwogCX0KLQogCXBsYW4tPmFwcGVuZHBsYW5zID0gc3Vi cGxhbnM7CiAJcGxhbi0+bmFzeW5jcGxhbnMgPSBuYXN5bmNwbGFuczsKIAlwbGFuLT5maXJzdF9w YXJ0aWFsX3BsYW4gPSBiZXN0X3BhdGgtPmZpcnN0X3BhcnRpYWxfcGF0aDsKIAlwbGFuLT5wYXJ0 X3BydW5lX2luZm8gPSBwYXJ0cHJ1bmVpbmZvOworCXBsYW4tPnBhcnRpdGlvbmVkX3JlbHMgPSBi bXNfY29weShyZWwtPnBhcnRpdGlvbmVkX3JlbHMpOwogCiAJY29weV9nZW5lcmljX3BhdGhfaW5m bygmcGxhbi0+cGxhbiwgKFBhdGggKikgYmVzdF9wYXRoKTsKIApAQCAtMTQ5OSw2ICsxNTAxLDIw IEBAIGNyZWF0ZV9tZXJnZV9hcHBlbmRfcGxhbihQbGFubmVySW5mbyAqcm9vdCwgTWVyZ2VBcHBl bmRQYXRoICpiZXN0X3BhdGgsCiAJbm9kZS0+bWVyZ2VwbGFucyA9IHN1YnBsYW5zOwogCW5vZGUt PnBhcnRfcHJ1bmVfaW5mbyA9IHBhcnRwcnVuZWluZm87CiAKKwkvKgorCSAqIFdlIG5lZWQgdG8g ZXhwbGljaXRseSBhZGQgdG8gdGhlIHBsYW4gbm9kZSB0aGUgUlQgaW5kZXhlcyBvZiBhbnkKKwkg KiBwYXJ0aXRpb25lZCB0YWJsZXMgd2hvc2UgcGFydGl0aW9ucyB3aWxsIGJlIHNjYW5uZWQgYnkg dGhlIG5vZGVzIGluCisJICogJ3N1YnBsYW5zJy4gIFRoZXJlIGNhbiBiZSBtdWx0aXBsZSBSVCBp bmRleGVzIGluIHRoZSBzZXQgZHVlIHRvIHRoZQorCSAqIHBhcnRpdGlvbiB0cmVlIGJlaW5nIG11 bHRpLWxldmVsIGFuZC9vciB0aGlzIGJlaW5nIGEgcGxhbiBmb3IgVU5JT04gQUxMCisJICogb3Zl ciBtdWx0aXBsZSBwYXJ0aXRpb24gdHJlZXMuICBBbG9uZyB3aXRoIHNjYW5yZWxpZHMgb2YgbGVh Zi1sZXZlbCBTY2FuCisJICogbm9kZXMsIHRoaXMgYWxsb3dzIHRoZSBleGVjdXRvciB0byBsb2Nr IHRoZSBmdWxsIHNldCBvZiByZWxhdGlvbnMgYmVpbmcKKwkgKiBzY2FubmVkIGJ5IHRoaXMgbm9k ZS4KKwkgKgorCSAqIE5vdGUgdGhhdCAnYXBwcmVsaWRzJyBvbmx5IGNvbnRhaW5zIHRoZSB0b3At bGV2ZWwgYmFzZSByZWxhdGlvbihzKSwgc28KKwkgKiBpcyBub3Qgc3VmZmljaWVudCBmb3IgdGhl IHB1cnBvc2UuCisJICovCisJbm9kZS0+cGFydGl0aW9uZWRfcmVscyA9IGJtc19jb3B5KHJlbC0+ cGFydGl0aW9uZWRfcmVscyk7CisKIAkvKgogCSAqIElmIHByZXBhcmVfc29ydF9mcm9tX3BhdGhr ZXlzIGFkZGVkIHNvcnQgY29sdW1ucywgYnV0IHdlIHdlcmUgdG9sZCB0bwogCSAqIHByb2R1Y2Ug ZWl0aGVyIHRoZSBleGFjdCB0bGlzdCBvciBhIG5hcnJvdyB0bGlzdCwgd2Ugc2hvdWxkIGdldCBy aWQgb2YKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIuYyBi L3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIuYwppbmRleCBiZDA5Zjg1YWVhLi4z NzRhOWQ5NzUzIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubmVy LmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jCkBAIC01MjksNiAr NTI5LDcgQEAgc3RhbmRhcmRfcGxhbm5lcihRdWVyeSAqcGFyc2UsIGNvbnN0IGNoYXIgKnF1ZXJ5 X3N0cmluZywgaW50IGN1cnNvck9wdGlvbnMsCiAJcmVzdWx0LT5wYXJhbUV4ZWNUeXBlcyA9IGds b2ItPnBhcmFtRXhlY1R5cGVzOwogCS8qIHV0aWxpdHlTdG10IHNob3VsZCBiZSBudWxsLCBidXQg d2UgbWlnaHQgYXMgd2VsbCBjb3B5IGl0ICovCiAJcmVzdWx0LT51dGlsaXR5U3RtdCA9IHBhcnNl LT51dGlsaXR5U3RtdDsKKwlyZXN1bHQtPmVsaWRlZEFwcGVuZFBhcnRlZFJlbHMgPSBnbG9iLT5l bGlkZWRBcHBlbmRQYXJ0ZWRSZWxzOwogCXJlc3VsdC0+c3RtdF9sb2NhdGlvbiA9IHBhcnNlLT5z dG10X2xvY2F0aW9uOwogCXJlc3VsdC0+c3RtdF9sZW4gPSBwYXJzZS0+c3RtdF9sZW47CiAKQEAg LTczNjUsNiArNzM2NiwxMyBAQCBjcmVhdGVfcGFydGl0aW9ud2lzZV9ncm91cGluZ19wYXRocyhQ bGFubmVySW5mbyAqcm9vdCwKIAogCQlhZGRfcGF0aHNfdG9fYXBwZW5kX3JlbChyb290LCBncm91 cGVkX3JlbCwgZ3JvdXBlZF9saXZlX2NoaWxkcmVuKTsKIAl9CisKKwkvKgorCSAqIElucHV0IHJl bCBtaWdodCBiZSBhIHBhcnRpdGlvbmVkIGFwcGVuZHJlbCwgdGhvdWdoIGdyb3VwZWRfcmVsIGhh cyBhdAorCSAqIHRoaXMgcG9pbnQgdGFrZW4gaXRzIHJvbGUgYXMgdGhlIGFuIGFwcGVuZHJlbCBv d25pbmcgdGhlIGZvcm1lcidzCisJICogY2hpbGRyZW4sIHNvIGNvcHkgdGhlIGZvcm1lcidzIHBh cnRpdGlvbmVkX3JlbHMgc2V0IGludG8gdGhlIGxhdHRlci4KKwkgKi8KKwlncm91cGVkX3JlbC0+ cGFydGl0aW9uZWRfcmVscyA9IGJtc19jb3B5KGlucHV0X3JlbC0+cGFydGl0aW9uZWRfcmVscyk7 CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9zZXRyZWZz LmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9zZXRyZWZzLmMKaW5kZXggYTdiMTFiN2Yw My4uZGJkZWI4ZWM5ZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vc2V0 cmVmcy5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3NldHJlZnMuYwpAQCAtMTUx Miw2ICsxNTEyLDEwIEBAIHNldF9hcHBlbmRfcmVmZXJlbmNlcyhQbGFubmVySW5mbyAqcm9vdCwK IAkJbGZpcnN0KGwpID0gc2V0X3BsYW5fcmVmcyhyb290LCAoUGxhbiAqKSBsZmlyc3QobCksIHJ0 b2Zmc2V0KTsKIAl9CiAKKwkvKiBGaXggdXAgcGFydGl0aW9uZWRfcmVscyBiZWZvcmUgcG9zc2li bHkgcmVtb3ZpbmcgdGhlIEFwcGVuZCBiZWxvdy4gKi8KKwlhcGxhbi0+cGFydGl0aW9uZWRfcmVs cyA9IG9mZnNldF9yZWxpZF9zZXQoYXBsYW4tPnBhcnRpdGlvbmVkX3JlbHMsCisJCQkJCQkJCQkJ CSAgIHJ0b2Zmc2V0KTsKKwogCS8qCiAJICogU2VlIGlmIGl0J3Mgc2FmZSB0byBnZXQgcmlkIG9m IHRoZSBBcHBlbmQgZW50aXJlbHkuICBGb3IgdGhpcyB0byBiZQogCSAqIHNhZmUsIHRoZXJlIG11 c3QgYmUgb25seSBvbmUgY2hpbGQgcGxhbiBhbmQgdGhhdCBjaGlsZCBwbGFuJ3MgcGFyYWxsZWwK QEAgLTE1MjIsOCArMTUyNiwxNyBAQCBzZXRfYXBwZW5kX3JlZmVyZW5jZXMoUGxhbm5lckluZm8g KnJvb3QsCiAJICovCiAJaWYgKGxpc3RfbGVuZ3RoKGFwbGFuLT5hcHBlbmRwbGFucykgPT0gMSAm JgogCQkoKFBsYW4gKikgbGluaXRpYWwoYXBsYW4tPmFwcGVuZHBsYW5zKSktPnBhcmFsbGVsX2F3 YXJlID09IGFwbGFuLT5wbGFuLnBhcmFsbGVsX2F3YXJlKQorCXsKKwkJLyoKKwkJICogUGFydGl0 aW9uZWQgdGFibGUgaW52b2x2ZWQsIGlmIGFueSwgbXVzdCBiZSBtYWRlIGtub3duIHRvIHRoZQor CQkgKiBleGVjdXRvci4KKwkJICovCisJCXJvb3QtPmdsb2ItPmVsaWRlZEFwcGVuZFBhcnRlZFJl bHMgPQorCQkJYm1zX2FkZF9tZW1iZXJzKHJvb3QtPmdsb2ItPmVsaWRlZEFwcGVuZFBhcnRlZFJl bHMsCisJCQkJCQkJYXBsYW4tPnBhcnRpdGlvbmVkX3JlbHMpOwogCQlyZXR1cm4gY2xlYW5fdXBf cmVtb3ZlZF9wbGFuX2xldmVsKChQbGFuICopIGFwbGFuLAogCQkJCQkJCQkJCSAgIChQbGFuICop IGxpbml0aWFsKGFwbGFuLT5hcHBlbmRwbGFucykpOworCX0KIAogCS8qCiAJICogT3RoZXJ3aXNl LCBjbGVhbiB1cCB0aGUgQXBwZW5kIGFzIG5lZWRlZC4gIEl0J3Mgb2theSB0byBkbyB0aGlzIGFm dGVyCkBAIC0xNTg0LDYgKzE1OTcsMTIgQEAgc2V0X21lcmdlYXBwZW5kX3JlZmVyZW5jZXMoUGxh bm5lckluZm8gKnJvb3QsCiAJCWxmaXJzdChsKSA9IHNldF9wbGFuX3JlZnMocm9vdCwgKFBsYW4g KikgbGZpcnN0KGwpLCBydG9mZnNldCk7CiAJfQogCisJLyoKKwkgKiBGaXggdXAgcGFydGl0aW9u ZWRfcmVscyBiZWZvcmUgcG9zc2libHkgcmVtb3ZpbmcgdGhlIE1lcmdlQXBwZW5kIGJlbG93Lgor CSAqLworCW1wbGFuLT5wYXJ0aXRpb25lZF9yZWxzID0gb2Zmc2V0X3JlbGlkX3NldChtcGxhbi0+ cGFydGl0aW9uZWRfcmVscywKKwkJCQkJCQkJCQkJICAgcnRvZmZzZXQpOworCiAJLyoKIAkgKiBT ZWUgaWYgaXQncyBzYWZlIHRvIGdldCByaWQgb2YgdGhlIE1lcmdlQXBwZW5kIGVudGlyZWx5LiAg Rm9yIHRoaXMgdG8KIAkgKiBiZSBzYWZlLCB0aGVyZSBtdXN0IGJlIG9ubHkgb25lIGNoaWxkIHBs YW4gYW5kIHRoYXQgY2hpbGQgcGxhbidzCkBAIC0xNTk0LDggKzE2MTMsMTcgQEAgc2V0X21lcmdl YXBwZW5kX3JlZmVyZW5jZXMoUGxhbm5lckluZm8gKnJvb3QsCiAJICovCiAJaWYgKGxpc3RfbGVu Z3RoKG1wbGFuLT5tZXJnZXBsYW5zKSA9PSAxICYmCiAJCSgoUGxhbiAqKSBsaW5pdGlhbChtcGxh bi0+bWVyZ2VwbGFucykpLT5wYXJhbGxlbF9hd2FyZSA9PSBtcGxhbi0+cGxhbi5wYXJhbGxlbF9h d2FyZSkKKwl7CisJCS8qCisJCSAqIFBhcnRpdGlvbmVkIHRhYmxlcyBpbnZvbHZlZCwgaWYgYW55 LCBtdXN0IGJlIG1hZGUga25vd24gdG8gdGhlCisJCSAqIGV4ZWN1dG9yLgorCQkgKi8KKwkJcm9v dC0+Z2xvYi0+ZWxpZGVkQXBwZW5kUGFydGVkUmVscyA9CisJCQlibXNfYWRkX21lbWJlcnMocm9v dC0+Z2xvYi0+ZWxpZGVkQXBwZW5kUGFydGVkUmVscywKKwkJCQkJCQltcGxhbi0+cGFydGl0aW9u ZWRfcmVscyk7CiAJCXJldHVybiBjbGVhbl91cF9yZW1vdmVkX3BsYW5fbGV2ZWwoKFBsYW4gKikg bXBsYW4sCiAJCQkJCQkJCQkJICAgKFBsYW4gKikgbGluaXRpYWwobXBsYW4tPm1lcmdlcGxhbnMp KTsKKwl9CiAKIAkvKgogCSAqIE90aGVyd2lzZSwgY2xlYW4gdXAgdGhlIE1lcmdlQXBwZW5kIGFz IG5lZWRlZC4gIEl0J3Mgb2theSB0byBkbyB0aGlzCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9v cHRpbWl6ZXIvdXRpbC9pbmhlcml0LmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9pbmhl cml0LmMKaW5kZXggN2UxMzQ4MjJmMy4uNTY5MTJlNDEwMSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvb3B0aW1pemVyL3V0aWwvaW5oZXJpdC5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci91 dGlsL2luaGVyaXQuYwpAQCAtNDA2LDYgKzQwNiwxNCBAQCBleHBhbmRfcGFydGl0aW9uZWRfcnRl bnRyeShQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsaW5mbywKIAkJCQkJCQkJCSAg IGNoaWxkcnRlLCBjaGlsZFJUaW5kZXgsCiAJCQkJCQkJCQkgICBjaGlsZHJlbCwgdG9wX3BhcmVu dHJjLCBsb2NrbW9kZSk7CiAKKwkJLyoKKwkJICogQSBwYXJlbnQgcmVsYXRpb24ncyBwYXJ0aXRp b25lZF9yZWxzIG11c3QgYmUgYSBzdXBlcnNldCBvZiB0aGUgc2V0cworCQkgKiBvZiBhbGwgaXRz IGNoaWxkcmVuLCBkaXJlY3Qgb3IgaW5kaXJlY3QsIHNvIGJ1YmJsZSB1cCB0aGUgY2hpbGQKKwkJ ICogcmVsJ3Mgc2V0LgorCQkgKi8KKwkJcmVsaW5mby0+cGFydGl0aW9uZWRfcmVscyA9IGJtc19h ZGRfbWVtYmVycyhyZWxpbmZvLT5wYXJ0aXRpb25lZF9yZWxzLAorCQkJCQkJCQkJCQkJCWNoaWxk cmVsaW5mby0+cGFydGl0aW9uZWRfcmVscyk7CisKIAkJLyogQ2xvc2UgY2hpbGQgcmVsYXRpb24s IGJ1dCBrZWVwIGxvY2tzICovCiAJCXRhYmxlX2Nsb3NlKGNoaWxkcmVsLCBOb0xvY2spOwogCX0K QEAgLTczNyw2ICs3NDUsMTQgQEAgZXhwYW5kX2FwcGVuZHJlbF9zdWJxdWVyeShQbGFubmVySW5m byAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCQkvKiBDaGlsZCBtYXkgaXRzZWxmIGJlIGFuIGlu aGVyaXRlZCByZWwsIGVpdGhlciB0YWJsZSBvciBzdWJxdWVyeS4gKi8KIAkJaWYgKGNoaWxkcnRl LT5pbmgpCiAJCQlleHBhbmRfaW5oZXJpdGVkX3J0ZW50cnkocm9vdCwgY2hpbGRyZWwsIGNoaWxk cnRlLCBjaGlsZFJUaW5kZXgpOworCisJCS8qCisJCSAqIEEgcGFyZW50IHJlbGF0aW9uJ3MgcGFy dGl0aW9uZWRfcmVscyBtdXN0IGJlIGEgc3VwZXJzZXQgb2YgdGhlIHNldHMKKwkJICogb2YgYWxs IGl0cyBjaGlsZHJlbiwgZGlyZWN0IG9yIGluZGlyZWN0LCBzbyBidWJibGUgdXAgdGhlIGNoaWxk CisJCSAqIHJlbCdzIHNldC4KKwkJICovCisJCXJlbC0+cGFydGl0aW9uZWRfcmVscyA9IGJtc19h ZGRfbWVtYmVycyhyZWwtPnBhcnRpdGlvbmVkX3JlbHMsCisJCQkJCQkJCQkJCQljaGlsZHJlbC0+ cGFydGl0aW9uZWRfcmVscyk7CiAJfQogfQogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRp bWl6ZXIvdXRpbC9yZWxub2RlLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9yZWxub2Rl LmMKaW5kZXggNTIwNDA5ZjRiYS4uMWQwODJhOGZkZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv b3B0aW1pemVyL3V0aWwvcmVsbm9kZS5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci91dGls L3JlbG5vZGUuYwpAQCAtMzYxLDYgKzM2MSwxMCBAQCBidWlsZF9zaW1wbGVfcmVsKFBsYW5uZXJJ bmZvICpyb290LCBpbnQgcmVsaWQsIFJlbE9wdEluZm8gKnBhcmVudCkKIAkJfQogCX0KIAorCS8q IEEgcGFydGl0aW9uZWQgYXBwZW5kcmVsLiAqLworCWlmIChyZWwtPnBhcnRfc2NoZW1lICE9IE5V TEwpCisJCXJlbC0+cGFydGl0aW9uZWRfcmVscyA9IGJtc19jb3B5KHJlbC0+cmVsaWRzKTsKKwog CS8qIFNhdmUgdGhlIGZpbmlzaGVkIHN0cnVjdCBpbiB0aGUgcXVlcnkncyBzaW1wbGVfcmVsX2Fy cmF5ICovCiAJcm9vdC0+c2ltcGxlX3JlbF9hcnJheVtyZWxpZF0gPSByZWw7CiAKQEAgLTcyOSw2 ICs3MzMsMTQgQEAgYnVpbGRfam9pbl9yZWwoUGxhbm5lckluZm8gKnJvb3QsCiAJc2V0X2pvaW5y ZWxfc2l6ZV9lc3RpbWF0ZXMocm9vdCwgam9pbnJlbCwgb3V0ZXJfcmVsLCBpbm5lcl9yZWwsCiAJ CQkJCQkJICAgc2ppbmZvLCByZXN0cmljdGxpc3QpOwogCisJLyoKKwkgKiBUaGUgam9pbnJlbCBt YXkgZ2V0IHByb2Nlc3NlZCBhcyBhbiBhcHBlbmRyZWwgdmlhIHBhcnRpdGlvbndpc2Ugam9pbgor CSAqIGlmIGJvdGggb3V0ZXIgYW5kIGlubmVyIHJlbHMgYXJlIHBhcnRpdGlvbmVkLCBzbyBzZXQg cGFydGl0aW9uZWRfcmVscworCSAqIGFwcHJvcHJpYXRlbHkuCisJICovCisJam9pbnJlbC0+cGFy dGl0aW9uZWRfcmVscyA9IGJtc191bmlvbihvdXRlcl9yZWwtPnBhcnRpdGlvbmVkX3JlbHMsCisJ CQkJCQkJCQkJICBpbm5lcl9yZWwtPnBhcnRpdGlvbmVkX3JlbHMpOworCiAJLyoKIAkgKiBTZXQg dGhlIGNvbnNpZGVyX3BhcmFsbGVsIGZsYWcgaWYgdGhpcyBqb2lucmVsIGNvdWxkIHBvdGVudGlh bGx5IGJlCiAJICogc2Nhbm5lZCB3aXRoaW4gYSBwYXJhbGxlbCB3b3JrZXIuICBJZiB0aGlzIGZs YWcgaXMgZmFsc2UgZm9yIGVpdGhlcgpAQCAtODk3LDYgKzkwOSwxNCBAQCBidWlsZF9jaGlsZF9q b2luX3JlbChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqb3V0ZXJfcmVsLAogCXNldF9q b2lucmVsX3NpemVfZXN0aW1hdGVzKHJvb3QsIGpvaW5yZWwsIG91dGVyX3JlbCwgaW5uZXJfcmVs LAogCQkJCQkJCSAgIHNqaW5mbywgcmVzdHJpY3RsaXN0KTsKIAorCS8qCisJICogVGhlIGpvaW5y ZWwgbWF5IGdldCBwcm9jZXNzZWQgYXMgYW4gYXBwZW5kcmVsIHZpYSBwYXJ0aXRpb253aXNlIGpv aW4KKwkgKiBpZiBib3RoIG91dGVyIGFuZCBpbm5lciByZWxzIGFyZSBwYXJ0aXRpb25lZCwgc28g c2V0IHBhcnRpdGlvbmVkX3JlbHMKKwkgKiBhcHByb3ByaWF0ZWx5LgorCSAqLworCWpvaW5yZWwt PnBhcnRpdGlvbmVkX3JlbHMgPSBibXNfdW5pb24ob3V0ZXJfcmVsLT5wYXJ0aXRpb25lZF9yZWxz LAorCQkJCQkJCQkJCSAgaW5uZXJfcmVsLT5wYXJ0aXRpb25lZF9yZWxzKTsKKwogCS8qIFdlIGJ1 aWxkIHRoZSBqb2luIG9ubHkgb25jZS4gKi8KIAlBc3NlcnQoIWZpbmRfam9pbl9yZWwocm9vdCwg am9pbnJlbC0+cmVsaWRzKSk7CiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhu b2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgKaW5kZXggMWYzODQ1YjNmZS4u NTMyN2Q5YmE4YiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgKKysr IGIvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgKQEAgLTEzMCw2ICsxMzAsMTEgQEAgdHlw ZWRlZiBzdHJ1Y3QgUGxhbm5lckdsb2JhbAogCWNoYXIJCW1heFBhcmFsbGVsSGF6YXJkOwkvKiB3 b3JzdCBQUk9QQVJBTExFTCBoYXphcmQgbGV2ZWwgKi8KIAogCVBhcnRpdGlvbkRpcmVjdG9yeSBw YXJ0aXRpb25fZGlyZWN0b3J5OyAvKiBwYXJ0aXRpb24gZGVzY3JpcHRvcnMgKi8KKworCUJpdG1h cHNldCAqZWxpZGVkQXBwZW5kUGFydGVkUmVsczsJLyogQ29tYmluZWQgcGFydGl0aW9uZWRfcmVs cyBvZiBhbGwKKwkJCQkJCQkJCQkgKiBzaW5nbGUtc3VicGxhbiBbTWVyZ2VdQXBwZW5kIG5vZGVz CisJCQkJCQkJCQkJICogdGhhdCBoYXZlIGJlZW4gcmVtb3ZlZCBmcm9uIHRoZQorCQkJCQkJCQkJ CSAqIHZhcmlvdXMgcGxhbiB0cmVlcy4gKi8KIH0gUGxhbm5lckdsb2JhbDsKIAogLyogbWFjcm8g Zm9yIGZldGNoaW5nIHRoZSBQbGFuIGFzc29jaWF0ZWQgd2l0aCBhIFN1YlBsYW4gbm9kZSAqLwpA QCAtNzczLDYgKzc3OCwyMyBAQCB0eXBlZGVmIHN0cnVjdCBSZWxPcHRJbmZvCiAJUmVsaWRzCQlh bGxfcGFydHJlbHM7CS8qIFJlbGlkcyBzZXQgb2YgYWxsIHBhcnRpdGlvbiByZWxpZHMgKi8KIAlM aXN0CSAgKipwYXJ0ZXhwcnM7CQkvKiBOb24tbnVsbGFibGUgcGFydGl0aW9uIGtleSBleHByZXNz aW9ucyAqLwogCUxpc3QJICAqKm51bGxhYmxlX3BhcnRleHByczsgLyogTnVsbGFibGUgcGFydGl0 aW9uIGtleSBleHByZXNzaW9ucyAqLworCisJLyoKKwkgKiBGb3IgYW4gYXBwZW5kcmVsIHBhcmVu dCByZWxhdGlvbiAoYmFzZSwgam9pbiwgb3IgdXBwZXIpIHRoYXQgaXMKKwkgKiBwYXJ0aXRpb25l ZCwgdGhpcyBzdG9yZXMgdGhlIFJUIGluZGV4ZXMgb2YgYWxsIHRoZSBwYXJpdGlvbmVkIGFuY2Vz dG9ycworCSAqIGluY2x1ZGluZyBpdHNlbGYgdGhhdCBsZWFkIHVwIHRvIHRoZSBpbmRpdmlkdWFs IGxlYWYgcGFydGl0aW9ucyB0aGF0CisJICogd2lsbCBiZSBzY2FubmVkIHRvIHByb2R1Y2UgdGhp cyByZWxhdGlvbidzIG91dHB1dCByb3dzLiAgVGhlIHJlbGlkIHNldAorCSAqIGlzIGNvcGllZCBp bnRvIHRoZSByZXN1bHRpbmcgQXBwZW5kIG9yIE1lcmdlQXBwZW5kIHBsYW4gbm9kZSBmb3IKKwkg KiBhbGxvd2luZyB0aGUgZXhlY3V0b3IgdG8gdGFrZSBhcHByb3ByaWF0ZSBsb2NrcyBvbiB0aG9z ZSByZWxhdGlvbnMsCisJICogdW5sZXNzIHRoZSBub2RlIGlzIGRlZW1lZCB1c2VsZXNzIGluIHNl dHJlZnMuYyBkdWUgdG8gaGF2aW5nIGEgc2luZ2xlCisJICogbGVhZiBzdWJwbGFuIGFuZCB0aHVz IGVsaWRlZCBmcm9tIHRoZSBmaW5hbCBwbGFuLCBpbiB3aGljaCBjYXNlLCB0aGUgc2V0CisJICog aXMgYWRkZWQgaW50byBQbGFubmVyR2xvYmFsLmVsaWRlZEFwcGVuZFBhcnRlZFJlbHMuCisJICoK KwkgKiBOb3RlIHRoYXQgJ2FwcHJlbGlkcycgb2YgdGhvc2Ugbm9kZXMgb25seSBjb250YWlucyB0 aGUgdG9wLWxldmVsIGJhc2UKKwkgKiByZWxhdGlvbihzKSwgc28gaXMgbm90IHN1ZmZpY2llbnQg Zm9yIHNhaWQgcHVycG9zZS4KKwkgKi8KKworCUJpdG1hcHNldCAgKnBhcnRpdGlvbmVkX3JlbHM7 CiB9IFJlbE9wdEluZm87CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9wbGFu bm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL3BsYW5ub2Rlcy5oCmluZGV4IDBiNTE4Y2U2YjIu LmJkODdjMzVkNmMgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL3BsYW5ub2Rlcy5oCisr KyBiL3NyYy9pbmNsdWRlL25vZGVzL3BsYW5ub2Rlcy5oCkBAIC04NSw2ICs4NSwxMSBAQCB0eXBl ZGVmIHN0cnVjdCBQbGFubmVkU3RtdAogCiAJTm9kZQkgICAqdXRpbGl0eVN0bXQ7CS8qIG5vbi1u dWxsIGlmIHRoaXMgaXMgdXRpbGl0eSBzdG10ICovCiAKKwlCaXRtYXBzZXQgKmVsaWRlZEFwcGVu ZFBhcnRlZFJlbHM7CS8qIENvbWJpbmVkIHBhcnRpdGlvbmVkX3JlbHMgb2YgYWxsCisJCQkJCQkJ CQkJICogc2luZ2xlLXN1YnBsYW4gW01lcmdlXUFwcGVuZCBub2RlcworCQkJCQkJCQkJCSAqIHRo YXQgaGF2ZSBiZWVuIHJlbW92ZWQgZnJvbSB0aGUKKwkJCQkJCQkJCQkgKiB2YXJpb3VzIHBsYW4g dHJlZXMuICovCisKIAkvKiBzdGF0ZW1lbnQgbG9jYXRpb24gaW4gc291cmNlIHN0cmluZyAoY29w aWVkIGZyb20gUXVlcnkpICovCiAJaW50CQkJc3RtdF9sb2NhdGlvbjsJLyogc3RhcnQgbG9jYXRp b24sIG9yIC0xIGlmIHVua25vd24gKi8KIAlpbnQJCQlzdG10X2xlbjsJCS8qIGxlbmd0aCBpbiBi eXRlczsgMCBtZWFucyAicmVzdCBvZiBzdHJpbmciICovCkBAIC0yNjEsNiArMjY2LDEyIEBAIHR5 cGVkZWYgc3RydWN0IEFwcGVuZAogCiAJLyogSW5mbyBmb3IgcnVuLXRpbWUgc3VicGxhbiBwcnVu aW5nOyBOVUxMIGlmIHdlJ3JlIG5vdCBkb2luZyB0aGF0ICovCiAJc3RydWN0IFBhcnRpdGlvblBy dW5lSW5mbyAqcGFydF9wcnVuZV9pbmZvOworCisJLyoKKwkgKiBSVCBpbmRleGVzIG9mIGFsbCBw YXJ0aXRpb25lZCBwYXJlbnRzIHdob3NlIHBhcnRpdGlvbnMnIHBsYW5zIGFyZQorCSAqIHByZXNl bnQgaW4gYXBwZW5kcGxhbnMuCisJICovCisJQml0bWFwc2V0ICAqcGFydGl0aW9uZWRfcmVsczsK IH0gQXBwZW5kOwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tCkBAIC0yODEsNiArMjkyLDEyIEBAIHR5 cGVkZWYgc3RydWN0IE1lcmdlQXBwZW5kCiAJYm9vbAkgICAqbnVsbHNGaXJzdDsJCS8qIE5VTExT IEZJUlNUL0xBU1QgZGlyZWN0aW9ucyAqLwogCS8qIEluZm8gZm9yIHJ1bi10aW1lIHN1YnBsYW4g cHJ1bmluZzsgTlVMTCBpZiB3ZSdyZSBub3QgZG9pbmcgdGhhdCAqLwogCXN0cnVjdCBQYXJ0aXRp b25QcnVuZUluZm8gKnBhcnRfcHJ1bmVfaW5mbzsKKworCS8qCisJICogUlQgaW5kZXhlcyBvZiBh bGwgcGFydGl0aW9uZWQgcGFyZW50cyB3aG9zZSBwYXJ0aXRpb25zJyBwbGFucyBhcmUKKwkgKiBw cmVzZW50IGluIGFwcGVuZHBsYW5zLgorCSAqLworCUJpdG1hcHNldCAgKnBhcnRpdGlvbmVkX3Jl bHM7CiB9IE1lcmdlQXBwZW5kOwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tCi0tIAoyLjI0LjEKCg== --0000000000003b47cb05db424440 Content-Type: application/octet-stream; name="v7-0003-Add-a-plan_tree_walker.patch" Content-Disposition: attachment; filename="v7-0003-Add-a-plan_tree_walker.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l1ae1bu72 RnJvbSA3NjFlNmMyNTgzYjM3ZWI5ZDQ1ZDY0ZGU5NTRkNjVkOTUzMjc3MDQwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBhbWl0bGFuIDxhbWl0bGFuZ290ZTA5QGdtYWlsLmNvbT4KRGF0 ZTogVGh1LCAzIE1hciAyMDIyIDE2OjA0OjEzICswOTAwClN1YmplY3Q6IFtQQVRDSCB2NyAzLzRd IEFkZCBhIHBsYW5fdHJlZV93YWxrZXIoKQoKTGlrZSBwbGFuc3RhdGVfdHJlZV93YWxrZXIoKSBi dXQgZm9yIHVuaW5pdGlhbGl6ZWQgcGxhbiB0cmVlcy4KLS0tCiBzcmMvYmFja2VuZC9ub2Rlcy9u b2RlRnVuY3MuYyB8IDExNiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBzcmMv aW5jbHVkZS9ub2Rlcy9ub2RlRnVuY3MuaCB8ICAgMyArCiAyIGZpbGVzIGNoYW5nZWQsIDExOSBp bnNlcnRpb25zKCspCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvbm9kZXMvbm9kZUZ1bmNzLmMg Yi9zcmMvYmFja2VuZC9ub2Rlcy9ub2RlRnVuY3MuYwppbmRleCAyNWNmMjgyYWFiLi41ZTUxNThl YTBlIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9ub2Rlcy9ub2RlRnVuY3MuYworKysgYi9zcmMv YmFja2VuZC9ub2Rlcy9ub2RlRnVuY3MuYwpAQCAtMzEsNiArMzEsMTAgQEAgc3RhdGljIGJvb2wg cGxhbnN0YXRlX3dhbGtfc3VicGxhbnMoTGlzdCAqcGxhbnMsIGJvb2wgKCp3YWxrZXIpICgpLAog CQkJCQkJCQkJdm9pZCAqY29udGV4dCk7CiBzdGF0aWMgYm9vbCBwbGFuc3RhdGVfd2Fsa19tZW1i ZXJzKFBsYW5TdGF0ZSAqKnBsYW5zdGF0ZXMsIGludCBucGxhbnMsCiAJCQkJCQkJCSAgIGJvb2wg KCp3YWxrZXIpICgpLCB2b2lkICpjb250ZXh0KTsKK3N0YXRpYyBib29sIHBsYW5fd2Fsa19zdWJw bGFucyhMaXN0ICpwbGFucywKKwkJCQkgICBib29sICgqd2Fsa2VyKSAoKSwKKwkJCQkgICB2b2lk ICpjb250ZXh0KTsKK3N0YXRpYyBib29sIHBsYW5fd2Fsa19tZW1iZXJzKExpc3QgKnBsYW5zLCBi b29sICgqd2Fsa2VyKSAoKSwgdm9pZCAqY29udGV4dCk7CiAKIAogLyoKQEAgLTQzNjgsMyArNDM3 MiwxMTUgQEAgcGxhbnN0YXRlX3dhbGtfbWVtYmVycyhQbGFuU3RhdGUgKipwbGFuc3RhdGVzLCBp bnQgbnBsYW5zLAogCiAJcmV0dXJuIGZhbHNlOwogfQorCisvKgorICogcGxhbl90cmVlX3dhbGtl ciAtLS0gd2FsayBwbGFudHJlZXMKKyAqCisgKiBUaGUgd2Fsa2VyIGhhcyBhbHJlYWR5IHZpc2l0 ZWQgdGhlIGN1cnJlbnQgbm9kZSwgYW5kIHNvIHdlIG5lZWQgb25seQorICogcmVjdXJzZSBpbnRv IGFueSBzdWItbm9kZXMgaXQgaGFzLgorICovCitib29sCitwbGFuX3RyZWVfd2Fsa2VyKFBsYW4g KnBsYW4sCisJCQkJIGJvb2wgKCp3YWxrZXIpICgpLAorCQkJCSB2b2lkICpjb250ZXh0KQorewor CS8qIEd1YXJkIGFnYWluc3Qgc3RhY2sgb3ZlcmZsb3cgZHVlIHRvIG92ZXJseSBjb21wbGV4IHBs YW4gdHJlZXMgKi8KKwljaGVja19zdGFja19kZXB0aCgpOworCisJLyogaW5pdFBsYW4tcyAqLwor CWlmIChwbGFuX3dhbGtfc3VicGxhbnMocGxhbi0+aW5pdFBsYW4sIHdhbGtlciwgY29udGV4dCkp CisJCXJldHVybiB0cnVlOworCisJLyogbGVmdHRyZWUgKi8KKwlpZiAob3V0ZXJQbGFuKHBsYW4p KQorCXsKKwkJaWYgKHdhbGtlcihvdXRlclBsYW4ocGxhbiksIGNvbnRleHQpKQorCQkJcmV0dXJu IHRydWU7CisJfQorCisJLyogcmlnaHR0cmVlICovCisJaWYgKGlubmVyUGxhbihwbGFuKSkKKwl7 CisJCWlmICh3YWxrZXIoaW5uZXJQbGFuKHBsYW4pLCBjb250ZXh0KSkKKwkJCXJldHVybiB0cnVl OworCX0KKworCS8qIHNwZWNpYWwgY2hpbGQgcGxhbnMgKi8KKwlzd2l0Y2ggKG5vZGVUYWcocGxh bikpCisJeworCQljYXNlIFRfQXBwZW5kOgorCQkJaWYgKHBsYW5fd2Fsa19tZW1iZXJzKCgoQXBw ZW5kICopIHBsYW4pLT5hcHBlbmRwbGFucywKKwkJCQkJCQkJICB3YWxrZXIsIGNvbnRleHQpKQor CQkJCXJldHVybiB0cnVlOworCQkJYnJlYWs7CisJCWNhc2UgVF9NZXJnZUFwcGVuZDoKKwkJCWlm IChwbGFuX3dhbGtfbWVtYmVycygoKE1lcmdlQXBwZW5kICopIHBsYW4pLT5tZXJnZXBsYW5zLAor CQkJCQkJCQkgIHdhbGtlciwgY29udGV4dCkpCisJCQkJcmV0dXJuIHRydWU7CisJCQlicmVhazsK KwkJY2FzZSBUX0JpdG1hcEFuZDoKKwkJCWlmIChwbGFuX3dhbGtfbWVtYmVycygoKEJpdG1hcEFu ZCAqKSBwbGFuKS0+Yml0bWFwcGxhbnMsCisJCQkJCQkJCSAgd2Fsa2VyLCBjb250ZXh0KSkKKwkJ CQlyZXR1cm4gdHJ1ZTsKKwkJCWJyZWFrOworCQljYXNlIFRfQml0bWFwT3I6CisJCQlpZiAocGxh bl93YWxrX21lbWJlcnMoKChCaXRtYXBPciAqKSBwbGFuKS0+Yml0bWFwcGxhbnMsCisJCQkJCQkJ CSAgd2Fsa2VyLCBjb250ZXh0KSkKKwkJCQlyZXR1cm4gdHJ1ZTsKKwkJCWJyZWFrOworCQljYXNl IFRfQ3VzdG9tU2NhbjoKKwkJCWlmIChwbGFuX3dhbGtfbWVtYmVycygoKEN1c3RvbVNjYW4gKikg cGxhbiktPmN1c3RvbV9wbGFucywKKwkJCQkJCQkJICB3YWxrZXIsIGNvbnRleHQpKQorCQkJCXJl dHVybiB0cnVlOworCQkJYnJlYWs7CisJCWNhc2UgVF9TdWJxdWVyeVNjYW46CisJCQlpZiAod2Fs a2VyKCgoU3VicXVlcnlTY2FuICopIHBsYW4pLT5zdWJwbGFuLCBjb250ZXh0KSkKKwkJCQlyZXR1 cm4gdHJ1ZTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJfQorCisJcmV0dXJu IGZhbHNlOworfQorCisvKgorICogV2FsayBhIGxpc3Qgb2YgU3ViUGxhbnMgKG9yIGluaXRQbGFu cywgd2hpY2ggYWxzbyB1c2UgU3ViUGxhbiBub2RlcykuCisgKi8KK3N0YXRpYyBib29sCitwbGFu X3dhbGtfc3VicGxhbnMoTGlzdCAqcGxhbnMsCisJCQkJICAgYm9vbCAoKndhbGtlcikgKCksCisJ CQkJICAgdm9pZCAqY29udGV4dCkKK3sKKwlMaXN0Q2VsbCAgICpsYzsKKwlQbGFubmVkU3RtdCAq cGxhbm5lZHN0bXQgPSAoUGxhbm5lZFN0bXQgKikgY29udGV4dDsKKworCWZvcmVhY2gobGMsIHBs YW5zKQorCXsKKwkJU3ViUGxhbiAqc3AgPSBsZmlyc3Rfbm9kZShTdWJQbGFuLCBsYyk7CisJCVBs YW4gKnAgPSBsaXN0X250aChwbGFubmVkc3RtdC0+c3VicGxhbnMsIHNwLT5wbGFuX2lkIC0gMSk7 CisKKwkJaWYgKHdhbGtlcihwLCBjb250ZXh0KSkKKwkJCXJldHVybiB0cnVlOworCX0KKworCXJl dHVybiBmYWxzZTsKK30KKworLyoKKyAqIFdhbGsgdGhlIGNvbnN0aXR1ZW50IHBsYW5zIG9mIGEg TW9kaWZ5VGFibGUsIEFwcGVuZCwgTWVyZ2VBcHBlbmQsCisgKiBCaXRtYXBBbmQsIG9yIEJpdG1h cE9yIG5vZGUuCisgKi8KK3N0YXRpYyBib29sCitwbGFuX3dhbGtfbWVtYmVycyhMaXN0ICpwbGFu cywgYm9vbCAoKndhbGtlcikgKCksIHZvaWQgKmNvbnRleHQpCit7CisJTGlzdENlbGwgKmxjOwor CisJZm9yZWFjaChsYywgcGxhbnMpCisJeworCQlpZiAod2Fsa2VyKGxmaXJzdChsYyksIGNvbnRl eHQpKQorCQkJcmV0dXJuIHRydWU7CisJfQorCisJcmV0dXJuIGZhbHNlOworfQpkaWZmIC0tZ2l0 IGEvc3JjL2luY2x1ZGUvbm9kZXMvbm9kZUZ1bmNzLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9ub2Rl RnVuY3MuaAppbmRleCA5M2M2MGJkZTY2Li5mY2ExMDdhZDY1IDEwMDY0NAotLS0gYS9zcmMvaW5j bHVkZS9ub2Rlcy9ub2RlRnVuY3MuaAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9ub2RlRnVuY3Mu aApAQCAtMTU4LDUgKzE1OCw4IEBAIGV4dGVybiBib29sIHJhd19leHByZXNzaW9uX3RyZWVfd2Fs a2VyKE5vZGUgKm5vZGUsIGJvb2wgKCp3YWxrZXIpICgpLAogc3RydWN0IFBsYW5TdGF0ZTsKIGV4 dGVybiBib29sIHBsYW5zdGF0ZV90cmVlX3dhbGtlcihzdHJ1Y3QgUGxhblN0YXRlICpwbGFuc3Rh dGUsIGJvb2wgKCp3YWxrZXIpICgpLAogCQkJCQkJCQkgIHZvaWQgKmNvbnRleHQpOworc3RydWN0 IFBsYW47CitleHRlcm4gYm9vbCBwbGFuX3RyZWVfd2Fsa2VyKHN0cnVjdCBQbGFuICpwbGFuLCBi b29sICgqd2Fsa2VyKSAoKSwKKwkJCQkgdm9pZCAqY29udGV4dCk7CiAKICNlbmRpZgkJCQkJCQkv KiBOT0RFRlVOQ1NfSCAqLwotLSAKMi4yNC4xCgo= --0000000000003b47cb05db424440 Content-Type: application/octet-stream; name="v7-0001-Some-refactoring-of-runtime-pruning-code.patch" Content-Disposition: attachment; filename="v7-0001-Some-refactoring-of-runtime-pruning-code.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l1ae1bu10 RnJvbSA2MGVjMGViYjkxMWEyYzdjOGNjMTNlYTlmOTZlMWZiMjAzODg0MmEwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBhbWl0bGFuIDxhbWl0bGFuZ290ZTA5QGdtYWlsLmNvbT4KRGF0 ZTogV2VkLCAyIE1hciAyMDIyIDE1OjE3OjU1ICswOTAwClN1YmplY3Q6IFtQQVRDSCB2NyAxLzRd IFNvbWUgcmVmYWN0b3Jpbmcgb2YgcnVudGltZSBwcnVuaW5nIGNvZGUKClRoaXMgZG9lcyB0d28g dGhpbmdzIG1haW5seToKCiogTW92ZSB0aGUgZXhlY3V0aW9uIHBydW5pbmcgaW5pdGlhbGl6YXRp b24gc3RlcHMgdGhhdCBhcmUgY29tbW9uCmJldHdlZW4gYm90aCBFeGVjSW5pdEFwcGVuZCgpIGFu ZCBFeGVjSW5pdE1lcmdlQXBwZW5kKCkgaW50byBhIG5ldwpmdW5jdGlvbiBFeGVjSW5pdFBhcnRp dGlvblBydW5pbmcoKSBkZWZpbmVkIGluIGV4ZWNQYXJ0aXRpb24uYy4KVGh1cywgRXhlY0NyZWF0 ZVBhcnRpdGlvblBydW5lU3RhdGUoKSBhbmQKRXhlY0ZpbmRJbml0aWFsTWF0Y2hpbmdTdWJQbGFu cygpIG5lZWQgbm90IGJlIGV4cG9ydGVkLgoKKiBBZGQgYW4gRXhwckNvbnRleHQgZmllbGQgdG8g UGFydGl0aW9uUHJ1bmVDb250ZXh0IHRvIHJlbW92ZSB0aGUKaW1wbGljaXQgYXNzdW1wdGlvbiBp biB0aGUgcnVudGltZSBwcnVuaW5nIGNvZGUgdGhhdCB0aGUgRXhwckNvbnRleHQKdG8gdXNlIHRv IGNvbXB1dGUgcHJ1bmluZyBleHByZXNzaW9ucyB0aGF0IG5lZWQgb25lIGNhbiBhbHdheXMgcmVs eQpvbiB0aGUgUGxhblN0YXRlIHByb3ZpZGluZyBpdC4gIEEgZnV0dXJlIHBhdGNoIHdpbGwgYWxs b3cgcnVudGltZQpwcnVuaW5nIChhdCBsZWFzdCB0aGUgaW5pdGlhbCBwcnVuaW5nIHN0ZXBzKSB0 byBiZSBwZXJmb3JtZWQgd2l0aG91dAp0aGUgY29ycmVzcG9uZGluZyBQbGFuU3RhdGUgeWV0IGhh dmluZyBiZWVuIGNyZWF0ZWQsIHNvIHRoaXMgd2lsbApoZWxwLgotLS0KIHNyYy9iYWNrZW5kL2V4 ZWN1dG9yL2V4ZWNQYXJ0aXRpb24uYyAgIHwgMzQwICsrKysrKysrKysrKysrKystLS0tLS0tLS0K IHNyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVBcHBlbmQuYyAgICAgIHwgIDMzICstLQogc3JjL2Jh Y2tlbmQvZXhlY3V0b3Ivbm9kZU1lcmdlQXBwZW5kLmMgfCAgMzIgKy0tCiBzcmMvYmFja2VuZC9w YXJ0aXRpb25pbmcvcGFydHBydW5lLmMgICB8ICAyMCArLQogc3JjL2luY2x1ZGUvZXhlY3V0b3Iv ZXhlY1BhcnRpdGlvbi5oICAgfCAgIDkgKy0KIHNyYy9pbmNsdWRlL3BhcnRpdGlvbmluZy9wYXJ0 cHJ1bmUuaCAgIHwgICAyICsKIDYgZmlsZXMgY2hhbmdlZCwgMjUyIGluc2VydGlvbnMoKyksIDE4 NCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjUGFy dGl0aW9uLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjUGFydGl0aW9uLmMKaW5kZXggOTBl ZDE0ODVkMS4uN2ZmNWE5NWYwNSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhl Y1BhcnRpdGlvbi5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNQYXJ0aXRpb24uYwpA QCAtMTgyLDExICsxODIsMTggQEAgc3RhdGljIGNoYXIgKkV4ZWNCdWlsZFNsb3RQYXJ0aXRpb25L ZXlEZXNjcmlwdGlvbihSZWxhdGlvbiByZWwsCiAJCQkJCQkJCQkJCQkgIGJvb2wgKmlzbnVsbCwK IAkJCQkJCQkJCQkJCSAgaW50IG1heGZpZWxkbGVuKTsKIHN0YXRpYyBMaXN0ICphZGp1c3RfcGFy dGl0aW9uX2NvbG5vcyhMaXN0ICpjb2xub3MsIFJlc3VsdFJlbEluZm8gKmxlYWZfcGFydF9ycmkp Oworc3RhdGljIFBhcnRpdGlvblBydW5lU3RhdGUgKkV4ZWNDcmVhdGVQYXJ0aXRpb25QcnVuZVN0 YXRlKFBsYW5TdGF0ZSAqcGxhbnN0YXRlLAorCQkJCQkJCSAgUGFydGl0aW9uUHJ1bmVJbmZvICpw YXJ0aXRpb25wcnVuZWluZm8pOworc3RhdGljIEJpdG1hcHNldCAqRXhlY0ZpbmRJbml0aWFsTWF0 Y2hpbmdTdWJQbGFucyhQYXJ0aXRpb25QcnVuZVN0YXRlICpwcnVuZXN0YXRlKTsKIHN0YXRpYyB2 b2lkIEV4ZWNJbml0UHJ1bmluZ0NvbnRleHQoUGFydGl0aW9uUHJ1bmVDb250ZXh0ICpjb250ZXh0 LAogCQkJCQkJCQkgICBMaXN0ICpwcnVuaW5nX3N0ZXBzLAogCQkJCQkJCQkgICBQYXJ0aXRpb25E ZXNjIHBhcnRkZXNjLAogCQkJCQkJCQkgICBQYXJ0aXRpb25LZXkgcGFydGtleSwKLQkJCQkJCQkJ ICAgUGxhblN0YXRlICpwbGFuc3RhdGUpOworCQkJCQkJCQkgICBQbGFuU3RhdGUgKnBsYW5zdGF0 ZSwKKwkJCQkJCQkJICAgRXhwckNvbnRleHQgKmVjb250ZXh0KTsKK3N0YXRpYyB2b2lkIFBhcnRp dGlvblBydW5lU3RhdGVGaXhTdWJQbGFuTWFwKFBhcnRpdGlvblBydW5lU3RhdGUgKnBydW5lc3Rh dGUsCisJCQkJCQkJCSBCaXRtYXBzZXQgKmluaXRpYWxseV92YWxpZF9zdWJwbGFucywKKwkJCQkJ CQkJIGludCBuX3RvdGFsX3N1YnBsYW5zKTsKIHN0YXRpYyB2b2lkIGZpbmRfbWF0Y2hpbmdfc3Vi cGxhbnNfcmVjdXJzZShQYXJ0aXRpb25QcnVuaW5nRGF0YSAqcHJ1bmVkYXRhLAogCQkJCQkJCQkJ CSAgIFBhcnRpdGlvbmVkUmVsUHJ1bmluZ0RhdGEgKnBwcnVuZSwKIAkJCQkJCQkJCQkgICBib29s IGluaXRpYWxfcHJ1bmUsCkBAIC0xNDg1LDMwICsxNDkyLDg2IEBAIGFkanVzdF9wYXJ0aXRpb25f Y29sbm9zKExpc3QgKmNvbG5vcywgUmVzdWx0UmVsSW5mbyAqbGVhZl9wYXJ0X3JyaSkKICAqCiAg KiBGdW5jdGlvbnM6CiAgKgotICogRXhlY0NyZWF0ZVBhcnRpdGlvblBydW5lU3RhdGU6CisgKiBF eGVjSW5pdFBhcnRpdGlvblBydW5pbmc6CiAgKgkJQ3JlYXRlcyB0aGUgUGFydGl0aW9uUHJ1bmVT dGF0ZSByZXF1aXJlZCBieSBlYWNoIG9mIHRoZSB0d28gcHJ1bmluZwogICoJCWZ1bmN0aW9ucy4g IERldGFpbHMgc3RvcmVkIGluY2x1ZGUgaG93IHRvIG1hcCB0aGUgcGFydGl0aW9uIGluZGV4Ci0g KgkJcmV0dXJuZWQgYnkgdGhlIHBhcnRpdGlvbiBwcnVuaW5nIGNvZGUgaW50byBzdWJwbGFuIGlu ZGV4ZXMuCi0gKgotICogRXhlY0ZpbmRJbml0aWFsTWF0Y2hpbmdTdWJQbGFuczoKLSAqCQlSZXR1 cm5zIGluZGV4ZXMgb2YgbWF0Y2hpbmcgc3VicGxhbnMuICBQYXJ0aXRpb24gcHJ1bmluZyBpcyBh dHRlbXB0ZWQKLSAqCQl3aXRob3V0IGFueSBldmFsdWF0aW9uIG9mIGV4cHJlc3Npb25zIGNvbnRh aW5pbmcgUEFSQU1fRVhFQyBQYXJhbXMuCi0gKgkJVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxl ZCBkdXJpbmcgZXhlY3V0b3Igc3RhcnR1cCBmb3IgdGhlIHBhcmVudAotICoJCXBsYW4gYmVmb3Jl IHRoZSBzdWJwbGFucyB0aGVtc2VsdmVzIGFyZSBpbml0aWFsaXplZC4gIFN1YnBsYW5zIHdoaWNo Ci0gKgkJYXJlIGZvdW5kIG5vdCB0byBtYXRjaCBieSB0aGlzIGZ1bmN0aW9uIG11c3QgYmUgcmVt b3ZlZCBmcm9tIHRoZQotICoJCXBsYW4ncyBsaXN0IG9mIHN1YnBsYW5zIGR1cmluZyBleGVjdXRp b24sIGFzIHRoaXMgZnVuY3Rpb24gcGVyZm9ybXMgYQotICoJCXJlbWFwIG9mIHRoZSBwYXJ0aXRp b24gaW5kZXggdG8gc3VicGxhbiBpbmRleCBtYXAgYW5kIHRoZSBuZXdseQotICoJCWNyZWF0ZWQg bWFwIHByb3ZpZGVzIGluZGV4ZXMgb25seSBmb3Igc3VicGxhbnMgd2hpY2ggcmVtYWluIGFmdGVy Ci0gKgkJY2FsbGluZyB0aGlzIGZ1bmN0aW9uLgorICoJCXJldHVybmVkIGJ5IHRoZSBwYXJ0aXRp b24gcHJ1bmluZyBjb2RlIGludG8gc3VicGxhbiBpbmRleGVzLiAgQWxzbworICoJCWRldGVybWlu ZXMgdGhlIHNldCBvZiBpbml0aWFsbHkgdmFsaWQgc3VicGxhbnMgYnkgcGVyZm9ybWluZyBpbml0 aWFsCisgKgkJcHJ1bmluZyBzdGVwcywgb25seSB3aGljaCBuZWVkIGJlIGluaXRpYWxpemVkIGJ5 IHRoZSBjYWxsZXIgc3VjaCBhcworICoJCUV4ZWNJbml0QXBwZW5kLiAgTWFwcyBpbiBQYXJ0aXRp b25QcnVuZVN0YXRlIGFyZSB1cGRhdGVkIHRvIGFjY291bnQKKyAqCQlmb3IgaW5pdGlhbCBwcnVu aW5nIGhhdmluZyBlbGltaW5hdGVkIHNvbWUgb2YgdGhlIHN1YnBsYW5zLCBpZiBhbnkuCiAgKgog ICogRXhlY0ZpbmRNYXRjaGluZ1N1YlBsYW5zOgogICoJCVJldHVybnMgaW5kZXhlcyBvZiBtYXRj aGluZyBzdWJwbGFucyBhZnRlciBldmFsdWF0aW5nIGFsbCBhdmFpbGFibGUKLSAqCQlleHByZXNz aW9ucy4gIFRoaXMgZnVuY3Rpb24gY2FuIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBleGVjdXRpb24g YW5kCi0gKgkJbXVzdCBiZSBjYWxsZWQgYWdhaW4gZWFjaCB0aW1lIHRoZSB2YWx1ZSBvZiBhIFBh cmFtIGxpc3RlZCBpbgotICoJCVBhcnRpdGlvblBydW5lU3RhdGUncyAnZXhlY3BhcmFtaWRzJyBj aGFuZ2VzLgorICoJCWV4cHJlc3Npb25zLCB0aGF0IGlzLCB1c2luZyBleGVjdXRpb24gcHJ1bmlu ZyBzdGVwcy4gIFRoaXMgZnVuY3Rpb24gY2FuCisgKgkJY2FuIG9ubHkgYmUgY2FsbGVkIGR1cmlu ZyBleGVjdXRpb24gYW5kIG11c3QgYmUgY2FsbGVkIGFnYWluIGVhY2ggdGltZQorICoJCXRoZSB2 YWx1ZSBvZiBhIFBhcmFtIGxpc3RlZCBpbiBQYXJ0aXRpb25QcnVuZVN0YXRlJ3MgJ2V4ZWNwYXJh bWlkcycKKyAqCQljaGFuZ2VzLgogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKi8KIAorLyoKKyAqIEV4 ZWNJbml0UGFydGl0aW9uUHJ1bmluZworICogCQlJbml0aWFsaXplIGRhdGEgc3RydWN0dXJlIG5l ZWRlZCBmb3IgcnVuLXRpbWUgcGFydGl0aW9uIHBydW5pbmcKKyAqCisgKiBJbml0aWFsIHBydW5p bmcgY2FuIGJlIGRvbmUgaW1tZWRpYXRlbHksIHNvIGl0IGlzIGRvbmUgaGVyZSBpZiBuZWVkZWQg YW5kCisgKiB0aGUgc2V0IG9mIHN1cnZpdmluZyBwYXJ0aXRpb24gc3VicGxhbnMnIGluZGV4ZXMg YXJlIGFkZGVkIHRvIHRoZSBvdXRwdXQKKyAqIHBhcmFtZXRlciAqaW5pdGlhbGx5X3ZhbGlkX3N1 YnBsYW5zLgorICoKKyAqIElmIHN1YnBsYW5zIGFyZSBpbmRlZWQgcHJ1bmVkLCBzdWJwbGFuX21h cCBhcnJheXMgY29udGFpbmVkIGluIHRoZSByZXR1cm5lZAorICogUGFydGl0aW9uUHJ1bmVTdGF0 ZSBhcmUgcmUtc2VxdWVuY2VkIHRvIG5vdCBjb3VudCB0aG9zZSwgdGhvdWdoIG9ubHkgaWYgdGhl CisgKiBtYXBzIHdpbGwgYmUgbmVlZGVkIGZvciBzdWJzZXF1ZW50IGV4ZWN1dGlvbiBwcnVuaW5n IHBhc3Nlcy4KKyAqLworUGFydGl0aW9uUHJ1bmVTdGF0ZSAqCitFeGVjSW5pdFBhcnRpdGlvblBy dW5pbmcoUGxhblN0YXRlICpwbGFuc3RhdGUsCisJCQkJCQkgaW50IG5fdG90YWxfc3VicGxhbnMs CisJCQkJCQkgUGFydGl0aW9uUHJ1bmVJbmZvICpwcnVuZWluZm8sCisJCQkJCQkgQml0bWFwc2V0 ICoqaW5pdGlhbGx5X3ZhbGlkX3N1YnBsYW5zKQoreworCVBhcnRpdGlvblBydW5lU3RhdGUgKnBy dW5lc3RhdGU7CisJRVN0YXRlICplc3RhdGUgPSBwbGFuc3RhdGUtPnN0YXRlOworCisJLyogV2Ug bWF5IG5lZWQgYW4gZXhwcmVzc2lvbiBjb250ZXh0IHRvIGV2YWx1YXRlIHBhcnRpdGlvbiBleHBy cyAqLworCUV4ZWNBc3NpZ25FeHByQ29udGV4dChlc3RhdGUsIHBsYW5zdGF0ZSk7CisKKwkvKgor CSAqIENyZWF0ZSB0aGUgd29ya2luZyBkYXRhIHN0cnVjdHVyZSBmb3IgcHJ1bmluZy4KKwkgKi8K KwlwcnVuZXN0YXRlID0gRXhlY0NyZWF0ZVBhcnRpdGlvblBydW5lU3RhdGUocGxhbnN0YXRlLCBw cnVuZWluZm8pOworCisJLyoKKwkgKiBQZXJmb3JtIGFuIGluaXRpYWwgcGFydGl0aW9uIHBydW5l LCBpZiByZXF1aXJlZC4KKwkgKi8KKwlpZiAocHJ1bmVzdGF0ZS0+ZG9faW5pdGlhbF9wcnVuZSkK Kwl7CisJCS8qIERldGVybWluZSB3aGljaCBzdWJwbGFucyBzdXJ2aXZlIGluaXRpYWwgcHJ1bmlu ZyAqLworCQkqaW5pdGlhbGx5X3ZhbGlkX3N1YnBsYW5zID0gRXhlY0ZpbmRJbml0aWFsTWF0Y2hp bmdTdWJQbGFucyhwcnVuZXN0YXRlKTsKKwl9CisJZWxzZQorCXsKKwkJLyogV2UnbGwgbmVlZCB0 byBpbml0aWFsaXplIGFsbCBzdWJwbGFucyAqLworCQlBc3NlcnQobl90b3RhbF9zdWJwbGFucyA+ IDApOworCQkqaW5pdGlhbGx5X3ZhbGlkX3N1YnBsYW5zID0gYm1zX2FkZF9yYW5nZShOVUxMLCAw LAorCQkJCQkJCQkJCQkJICBuX3RvdGFsX3N1YnBsYW5zIC0gMSk7CisJfQorCisJLyoKKwkgKiBS ZS1zZXF1ZW5jZSBzdWJwbGFuIGluZGV4ZXMgY29udGFpbmVkIGluIHBydW5lc3RhdGUgdG8gYWNj b3VudCBmb3IgYW55CisJICogdGhhdCB3ZXJlIHJlbW92ZWQgYWJvdmUgZHVlIHRvIGluaXRpYWwg cHJ1bmluZy4KKwkgKgorCSAqIFdlIGNhbiBzYWZlbHkgc2tpcCB0aGlzIHdoZW4gIWRvX2V4ZWNf cHJ1bmUsIGV2ZW4gdGhvdWdoIHRoYXQgbGVhdmVzCisJICogaW52YWxpZCBkYXRhIGluIHBydW5l c3RhdGUsIGJlY2F1c2UgdGhhdCBkYXRhIHdvbid0IGJlIGNvbnN1bHRlZCBhZ2FpbgorCSAqIChj ZiBpbml0aWFsIEFzc2VydCBpbiBFeGVjRmluZE1hdGNoaW5nU3ViUGxhbnMpLgorCSAqLworCWlm IChwcnVuZXN0YXRlLT5kb19leGVjX3BydW5lICYmCisJCWJtc19udW1fbWVtYmVycygqaW5pdGlh bGx5X3ZhbGlkX3N1YnBsYW5zKSA8IG5fdG90YWxfc3VicGxhbnMpCisJCVBhcnRpdGlvblBydW5l U3RhdGVGaXhTdWJQbGFuTWFwKHBydW5lc3RhdGUsCisJCQkJCQkJCQkJICppbml0aWFsbHlfdmFs aWRfc3VicGxhbnMsCisJCQkJCQkJCQkJIG5fdG90YWxfc3VicGxhbnMpOworCisJcmV0dXJuIHBy dW5lc3RhdGU7Cit9CisKIC8qCiAgKiBFeGVjQ3JlYXRlUGFydGl0aW9uUHJ1bmVTdGF0ZQogICoJ CUJ1aWxkIHRoZSBkYXRhIHN0cnVjdHVyZSByZXF1aXJlZCBmb3IgY2FsbGluZwpAQCAtMTUyNyw3 ICsxNTkwLDcgQEAgYWRqdXN0X3BhcnRpdGlvbl9jb2xub3MoTGlzdCAqY29sbm9zLCBSZXN1bHRS ZWxJbmZvICpsZWFmX3BhcnRfcnJpKQogICogcmUtdXNlZCBlYWNoIHRpbWUgd2UgcmUtZXZhbHVh dGUgd2hpY2ggcGFydGl0aW9ucyBtYXRjaCB0aGUgcHJ1bmluZyBzdGVwcwogICogcHJvdmlkZWQg aW4gZWFjaCBQYXJ0aXRpb25lZFJlbFBydW5lSW5mby4KICAqLwotUGFydGl0aW9uUHJ1bmVTdGF0 ZSAqCitzdGF0aWMgUGFydGl0aW9uUHJ1bmVTdGF0ZSAqCiBFeGVjQ3JlYXRlUGFydGl0aW9uUHJ1 bmVTdGF0ZShQbGFuU3RhdGUgKnBsYW5zdGF0ZSwKIAkJCQkJCQkgIFBhcnRpdGlvblBydW5lSW5m byAqcGFydGl0aW9ucHJ1bmVpbmZvKQogewpAQCAtMTUzNiw2ICsxNTk5LDcgQEAgRXhlY0NyZWF0 ZVBhcnRpdGlvblBydW5lU3RhdGUoUGxhblN0YXRlICpwbGFuc3RhdGUsCiAJaW50CQkJbl9wYXJ0 X2hpZXJhcmNoaWVzOwogCUxpc3RDZWxsICAgKmxjOwogCWludAkJCWk7CisJRXhwckNvbnRleHQJ KmVjb250ZXh0ID0gcGxhbnN0YXRlLT5wc19FeHByQ29udGV4dDsKIAogCS8qIEZvciBkYXRhIHJl YWRpbmcsIGV4ZWN1dG9yIGFsd2F5cyBvbWl0cyBkZXRhY2hlZCBwYXJ0aXRpb25zICovCiAJaWYg KGVzdGF0ZS0+ZXNfcGFydGl0aW9uX2RpcmVjdG9yeSA9PSBOVUxMKQpAQCAtMTcwOSw3ICsxNzcz LDggQEAgRXhlY0NyZWF0ZVBhcnRpdGlvblBydW5lU3RhdGUoUGxhblN0YXRlICpwbGFuc3RhdGUs CiAJCQl7CiAJCQkJRXhlY0luaXRQcnVuaW5nQ29udGV4dCgmcHBydW5lLT5pbml0aWFsX2NvbnRl eHQsCiAJCQkJCQkJCQkgICBwaW5mby0+aW5pdGlhbF9wcnVuaW5nX3N0ZXBzLAotCQkJCQkJCQkJ ICAgcGFydGRlc2MsIHBhcnRrZXksIHBsYW5zdGF0ZSk7CisJCQkJCQkJCQkgICBwYXJ0ZGVzYywg cGFydGtleSwgcGxhbnN0YXRlLAorCQkJCQkJCQkJICAgZWNvbnRleHQpOwogCQkJCS8qIFJlY29y ZCB3aGV0aGVyIGluaXRpYWwgcHJ1bmluZyBpcyBuZWVkZWQgYXQgYW55IGxldmVsICovCiAJCQkJ cHJ1bmVzdGF0ZS0+ZG9faW5pdGlhbF9wcnVuZSA9IHRydWU7CiAJCQl9CkBAIC0xNzE4LDcgKzE3 ODMsOCBAQCBFeGVjQ3JlYXRlUGFydGl0aW9uUHJ1bmVTdGF0ZShQbGFuU3RhdGUgKnBsYW5zdGF0 ZSwKIAkJCXsKIAkJCQlFeGVjSW5pdFBydW5pbmdDb250ZXh0KCZwcHJ1bmUtPmV4ZWNfY29udGV4 dCwKIAkJCQkJCQkJCSAgIHBpbmZvLT5leGVjX3BydW5pbmdfc3RlcHMsCi0JCQkJCQkJCQkgICBw YXJ0ZGVzYywgcGFydGtleSwgcGxhbnN0YXRlKTsKKwkJCQkJCQkJCSAgIHBhcnRkZXNjLCBwYXJ0 a2V5LCBwbGFuc3RhdGUsCisJCQkJCQkJCQkgICBlY29udGV4dCk7CiAJCQkJLyogUmVjb3JkIHdo ZXRoZXIgZXhlYyBwcnVuaW5nIGlzIG5lZWRlZCBhdCBhbnkgbGV2ZWwgKi8KIAkJCQlwcnVuZXN0 YXRlLT5kb19leGVjX3BydW5lID0gdHJ1ZTsKIAkJCX0KQEAgLTE3NDYsNyArMTgxMiw4IEBAIEV4 ZWNJbml0UHJ1bmluZ0NvbnRleHQoUGFydGl0aW9uUHJ1bmVDb250ZXh0ICpjb250ZXh0LAogCQkJ CQkgICBMaXN0ICpwcnVuaW5nX3N0ZXBzLAogCQkJCQkgICBQYXJ0aXRpb25EZXNjIHBhcnRkZXNj LAogCQkJCQkgICBQYXJ0aXRpb25LZXkgcGFydGtleSwKLQkJCQkJICAgUGxhblN0YXRlICpwbGFu c3RhdGUpCisJCQkJCSAgIFBsYW5TdGF0ZSAqcGxhbnN0YXRlLAorCQkJCQkgICBFeHByQ29udGV4 dCAqZWNvbnRleHQpCiB7CiAJaW50CQkJbl9zdGVwczsKIAlpbnQJCQlwYXJ0bmF0dHM7CkBAIC0x NzY3LDYgKzE4MzQsNyBAQCBFeGVjSW5pdFBydW5pbmdDb250ZXh0KFBhcnRpdGlvblBydW5lQ29u dGV4dCAqY29udGV4dCwKIAogCWNvbnRleHQtPnBwY2NvbnRleHQgPSBDdXJyZW50TWVtb3J5Q29u dGV4dDsKIAljb250ZXh0LT5wbGFuc3RhdGUgPSBwbGFuc3RhdGU7CisJY29udGV4dC0+ZXhwcmNv bnRleHQgPSBlY29udGV4dDsKIAogCS8qIEluaXRpYWxpemUgZXhwcmVzc2lvbiBzdGF0ZSBmb3Ig ZWFjaCBleHByZXNzaW9uIHdlIG5lZWQgKi8KIAljb250ZXh0LT5leHByc3RhdGVzID0gKEV4cHJT dGF0ZSAqKikKQEAgLTE3OTUsOCArMTg2MywyMCBAQCBFeGVjSW5pdFBydW5pbmdDb250ZXh0KFBh cnRpdGlvblBydW5lQ29udGV4dCAqY29udGV4dCwKIAkJCQkJCQkJCQkJCQkJc3RlcC0+c3RlcC5z dGVwX2lkLAogCQkJCQkJCQkJCQkJCQlrZXlubyk7CiAKLQkJCQljb250ZXh0LT5leHByc3RhdGVz W3N0YXRlaWR4XSA9Ci0JCQkJCUV4ZWNJbml0RXhwcihleHByLCBjb250ZXh0LT5wbGFuc3RhdGUp OworCQkJCS8qCisJCQkJICogV2hlbiBwbGFuc3RhdGUgaXMgTlVMTCwgcHJ1bmluZ19zdGVwcyBp cyBrbm93biBub3QgdG8KKwkJCQkgKiBjb250YWluIGFueSBleHByZXNzaW9ucyB0aGF0IGRlcGVu ZCBvbiB0aGUgcGFyZW50IHBsYW4uCisJCQkJICogSW5mb3JtYXRpb24gb2YgYW55IGF2YWlsYWJs ZSBFWFRFUk4gcGFyYW1ldGVycyBtdXN0IGJlCisJCQkJICogcGFzc2VkIGV4cGxpY2l0bHkgaW4g dGhhdCBjYXNlLCB3aGljaCB0aGUgY2FsbGVyIG11c3QKKwkJCQkgKiBoYXZlIG1hZGUgYXZhaWxh YmxlIHZpYSBlY29udGV4dC4KKwkJCQkgKi8KKwkJCQlpZiAocGxhbnN0YXRlID09IE5VTEwpCisJ CQkJCWNvbnRleHQtPmV4cHJzdGF0ZXNbc3RhdGVpZHhdID0KKwkJCQkJCUV4ZWNJbml0RXhwcldp dGhQYXJhbXMoZXhwciwKKwkJCQkJCQkJCQkJICAgZWNvbnRleHQtPmVjeHRfcGFyYW1fbGlzdF9p bmZvKTsKKwkJCQllbHNlCisJCQkJCWNvbnRleHQtPmV4cHJzdGF0ZXNbc3RhdGVpZHhdID0KKwkJ CQkJCUV4ZWNJbml0RXhwcihleHByLCBjb250ZXh0LT5wbGFuc3RhdGUpOwogCQkJfQogCQkJa2V5 bm8rKzsKIAkJfQpAQCAtMTgwOSwxOCArMTg4OSwxMSBAQCBFeGVjSW5pdFBydW5pbmdDb250ZXh0 KFBhcnRpdGlvblBydW5lQ29udGV4dCAqY29udGV4dCwKICAqCQlwcnVuaW5nLCBkaXNyZWdhcmRp bmcgYW55IHBydW5pbmcgY29uc3RyYWludHMgaW52b2x2aW5nIFBBUkFNX0VYRUMKICAqCQlQYXJh bXMuCiAgKgotICogSWYgYWRkaXRpb25hbCBwcnVuaW5nIHBhc3NlcyB3aWxsIGJlIHJlcXVpcmVk IChiZWNhdXNlIG9mIFBBUkFNX0VYRUMKLSAqIFBhcmFtcyksIHdlIG11c3QgYWxzbyB1cGRhdGUg dGhlIHRyYW5zbGF0aW9uIGRhdGEgdGhhdCBhbGxvd3MgY29udmVyc2lvbgotICogb2YgcGFydGl0 aW9uIGluZGV4ZXMgaW50byBzdWJwbGFuIGluZGV4ZXMgdG8gYWNjb3VudCBmb3IgdGhlIHVubmVl ZGVkCi0gKiBzdWJwbGFucyBoYXZpbmcgYmVlbiByZW1vdmVkLgotICoKICAqIE11c3Qgb25seSBi ZSBjYWxsZWQgb25jZSBwZXIgJ3BydW5lc3RhdGUnLCBhbmQgb25seSBpZiBpbml0aWFsIHBydW5p bmcKICAqIGlzIHJlcXVpcmVkLgotICoKLSAqICduc3VicGxhbnMnIG11c3QgYmUgcGFzc2VkIGFz IHRoZSB0b3RhbCBudW1iZXIgb2YgdW5wcnVuZWQgc3VicGxhbnMuCiAgKi8KLUJpdG1hcHNldCAq Ci1FeGVjRmluZEluaXRpYWxNYXRjaGluZ1N1YlBsYW5zKFBhcnRpdGlvblBydW5lU3RhdGUgKnBy dW5lc3RhdGUsIGludCBuc3VicGxhbnMpCitzdGF0aWMgQml0bWFwc2V0ICoKK0V4ZWNGaW5kSW5p dGlhbE1hdGNoaW5nU3ViUGxhbnMoUGFydGl0aW9uUHJ1bmVTdGF0ZSAqcHJ1bmVzdGF0ZSkKIHsK IAlCaXRtYXBzZXQgICpyZXN1bHQgPSBOVUxMOwogCU1lbW9yeUNvbnRleHQgb2xkY29udGV4dDsK QEAgLTE4NDUsMTQgKzE5MTgsMjAgQEAgRXhlY0ZpbmRJbml0aWFsTWF0Y2hpbmdTdWJQbGFucyhQ YXJ0aXRpb25QcnVuZVN0YXRlICpwcnVuZXN0YXRlLCBpbnQgbnN1YnBsYW5zKQogCQlQYXJ0aXRp b25lZFJlbFBydW5pbmdEYXRhICpwcHJ1bmU7CiAKIAkJcHJ1bmVkYXRhID0gcHJ1bmVzdGF0ZS0+ cGFydHBydW5lZGF0YVtpXTsKKworCQkvKgorCQkgKiBXZSBwYXNzIHRoZSAxc3QgaXRlbSBiZWxv bmdpbmcgdG8gdGhlIHJvb3QgdGFibGUgb2YgdGhlIGhpZXJhcmNoeQorCQkgKiBhbmQgZmluZF9t YXRjaGluZ19zdWJwbGFuc19yZWN1cnNlKCkgdGFrZXMgY2FyZSBvZiByZWN1cnNpbmcgdG8KKwkJ ICogb3RoZXIgKGxvd2VyLWxldmVsKSBwYXJlbnRzIGFzIG5lZWRlZC4KKwkJICovCiAJCXBwcnVu ZSA9ICZwcnVuZWRhdGEtPnBhcnRyZWxwcnVuZWRhdGFbMF07CiAKIAkJLyogUGVyZm9ybSBwcnVu aW5nIHdpdGhvdXQgdXNpbmcgUEFSQU1fRVhFQyBQYXJhbXMgKi8KIAkJZmluZF9tYXRjaGluZ19z dWJwbGFuc19yZWN1cnNlKHBydW5lZGF0YSwgcHBydW5lLCB0cnVlLCAmcmVzdWx0KTsKIAotCQkv KiBFeHByZXNzaW9uIGV2YWwgbWF5IGhhdmUgdXNlZCBzcGFjZSBpbiBub2RlJ3MgcHNfRXhwckNv bnRleHQgdG9vICovCisJCS8qIEV4cHJlc3Npb24gZXZhbCBtYXkgaGF2ZSB1c2VkIHNwYWNlIGlu IEV4cHJDb250ZXh0IHRvbyAqLwogCQlpZiAocHBydW5lLT5pbml0aWFsX3BydW5pbmdfc3RlcHMp Ci0JCQlSZXNldEV4cHJDb250ZXh0KHBwcnVuZS0+aW5pdGlhbF9jb250ZXh0LnBsYW5zdGF0ZS0+ cHNfRXhwckNvbnRleHQpOworCQkJUmVzZXRFeHByQ29udGV4dChwcHJ1bmUtPmluaXRpYWxfY29u dGV4dC5leHByY29udGV4dCk7CiAJfQogCiAJLyogQWRkIGluIGFueSBzdWJwbGFucyB0aGF0IHBh cnRpdGlvbiBwcnVuaW5nIGRpZG4ndCBhY2NvdW50IGZvciAqLwpAQCAtMTg2NSwxMTggKzE5NDQs MTIwIEBAIEV4ZWNGaW5kSW5pdGlhbE1hdGNoaW5nU3ViUGxhbnMoUGFydGl0aW9uUHJ1bmVTdGF0 ZSAqcHJ1bmVzdGF0ZSwgaW50IG5zdWJwbGFucykKIAogCU1lbW9yeUNvbnRleHRSZXNldChwcnVu ZXN0YXRlLT5wcnVuZV9jb250ZXh0KTsKIAorCXJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBQ YXJ0aXRpb25QcnVuZVN0YXRlRml4U3ViUGxhbk1hcAorICoJCUZpeCBtYXBwaW5nIG9mIHBhcnRp dGlvbiBpbmRleGVzIHRvIHN1YnBsYW4gaW5kZXhlcyBjb250YWluZWQgaW4KKyAqCQlwcnVuZXN0 YXRlIGJ5IGNvbnNpZGVyaW5nIHRoZSBuZXcgbGlzdCBvZiBzdWJwbGFucyB0aGF0IHN1cnZpdmVk CisgKgkJaW5pdGlhbCBwcnVuaW5nCisgKgorICogU3VicGxhbnMgd291bGQgcHJldmlvdXNseSBi ZSBpbmRleGVkIDAuLihuX3RvdGFsX3N1YnBsYW5zIC0gMSkgc2hvdWxkIGJlCisgKiBjaGFuZ2Vk IHRvIGluZGV4IHJhbmdlIDAuLm51bShpbml0aWFsbHlfdmFsaWRfc3VicGxhbnMpLgorICovCitz dGF0aWMgdm9pZAorUGFydGl0aW9uUHJ1bmVTdGF0ZUZpeFN1YlBsYW5NYXAoUGFydGl0aW9uUHJ1 bmVTdGF0ZSAqcHJ1bmVzdGF0ZSwKKwkJCQkJCQkJIEJpdG1hcHNldCAqaW5pdGlhbGx5X3ZhbGlk X3N1YnBsYW5zLAorCQkJCQkJCQkgaW50IG5fdG90YWxfc3VicGxhbnMpCit7CisJaW50CQkgICAq bmV3X3N1YnBsYW5faW5kZXhlczsKKwlCaXRtYXBzZXQgICpuZXdfb3RoZXJfc3VicGxhbnM7CisJ aW50CQkJaTsKKwlpbnQJCQluZXdpZHg7CisKIAkvKgotCSAqIElmIGV4ZWMtdGltZSBwcnVuaW5n IGlzIHJlcXVpcmVkIGFuZCB3ZSBwcnVuZWQgc3VicGxhbnMgYWJvdmUsIHRoZW4gd2UKLQkgKiBt dXN0IHJlLXNlcXVlbmNlIHRoZSBzdWJwbGFuIGluZGV4ZXMgc28gdGhhdCBFeGVjRmluZE1hdGNo aW5nU3ViUGxhbnMKLQkgKiBwcm9wZXJseSByZXR1cm5zIHRoZSBpbmRleGVzIGZyb20gdGhlIHN1 YnBsYW5zIHdoaWNoIHdpbGwgcmVtYWluIGFmdGVyCi0JICogZXhlY3V0aW9uIG9mIHRoaXMgZnVu Y3Rpb24uCi0JICoKLQkgKiBXZSBjYW4gc2FmZWx5IHNraXAgdGhpcyB3aGVuICFkb19leGVjX3By dW5lLCBldmVuIHRob3VnaCB0aGF0IGxlYXZlcwotCSAqIGludmFsaWQgZGF0YSBpbiBwcnVuZXN0 YXRlLCBiZWNhdXNlIHRoYXQgZGF0YSB3b24ndCBiZSBjb25zdWx0ZWQgYWdhaW4KLQkgKiAoY2Yg aW5pdGlhbCBBc3NlcnQgaW4gRXhlY0ZpbmRNYXRjaGluZ1N1YlBsYW5zKS4KKwkgKiBGaXJzdCB3 ZSBtdXN0IGJ1aWxkIGEgdGVtcG9yYXJ5IGFycmF5IHdoaWNoIG1hcHMgb2xkIHN1YnBsYW4KKwkg KiBpbmRleGVzIHRvIG5ldyBvbmVzLiAgRm9yIGNvbnZlbmllbmNlIG9mIGluaXRpYWxpemF0aW9u LCB3ZSB1c2UKKwkgKiAxLWJhc2VkIGluZGV4ZXMgaW4gdGhpcyBhcnJheSBhbmQgbGVhdmUgcHJ1 bmVkIGl0ZW1zIGFzIDAuCiAJICovCi0JaWYgKHBydW5lc3RhdGUtPmRvX2V4ZWNfcHJ1bmUgJiYg Ym1zX251bV9tZW1iZXJzKHJlc3VsdCkgPCBuc3VicGxhbnMpCisJbmV3X3N1YnBsYW5faW5kZXhl cyA9IChpbnQgKikgcGFsbG9jMChzaXplb2YoaW50KSAqIG5fdG90YWxfc3VicGxhbnMpOworCW5l d2lkeCA9IDE7CisJaSA9IC0xOworCXdoaWxlICgoaSA9IGJtc19uZXh0X21lbWJlcihpbml0aWFs bHlfdmFsaWRfc3VicGxhbnMsIGkpKSA+PSAwKQogCXsKLQkJaW50CQkgICAqbmV3X3N1YnBsYW5f aW5kZXhlczsKLQkJQml0bWFwc2V0ICAqbmV3X290aGVyX3N1YnBsYW5zOwotCQlpbnQJCQlpOwot CQlpbnQJCQluZXdpZHg7CisJCUFzc2VydChpIDwgbl90b3RhbF9zdWJwbGFucyk7CisJCW5ld19z dWJwbGFuX2luZGV4ZXNbaV0gPSBuZXdpZHgrKzsKKwl9CiAKLQkJLyoKLQkJICogRmlyc3Qgd2Ug bXVzdCBidWlsZCBhIHRlbXBvcmFyeSBhcnJheSB3aGljaCBtYXBzIG9sZCBzdWJwbGFuCi0JCSAq IGluZGV4ZXMgdG8gbmV3IG9uZXMuICBGb3IgY29udmVuaWVuY2Ugb2YgaW5pdGlhbGl6YXRpb24s IHdlIHVzZQotCQkgKiAxLWJhc2VkIGluZGV4ZXMgaW4gdGhpcyBhcnJheSBhbmQgbGVhdmUgcHJ1 bmVkIGl0ZW1zIGFzIDAuCi0JCSAqLwotCQluZXdfc3VicGxhbl9pbmRleGVzID0gKGludCAqKSBw YWxsb2MwKHNpemVvZihpbnQpICogbnN1YnBsYW5zKTsKLQkJbmV3aWR4ID0gMTsKLQkJaSA9IC0x OwotCQl3aGlsZSAoKGkgPSBibXNfbmV4dF9tZW1iZXIocmVzdWx0LCBpKSkgPj0gMCkKLQkJewot CQkJQXNzZXJ0KGkgPCBuc3VicGxhbnMpOwotCQkJbmV3X3N1YnBsYW5faW5kZXhlc1tpXSA9IG5l d2lkeCsrOwotCQl9CisJLyoKKwkgKiBOb3cgd2UgY2FuIHVwZGF0ZSBlYWNoIFBhcnRpdGlvbmVk UmVsUHJ1bmVJbmZvJ3Mgc3VicGxhbl9tYXAgd2l0aAorCSAqIG5ldyBzdWJwbGFuIGluZGV4ZXMu ICBXZSBtdXN0IGFsc28gcmVjb21wdXRlIGl0cyBwcmVzZW50X3BhcnRzCisJICogYml0bWFwLgor CSAqLworCWZvciAoaSA9IDA7IGkgPCBwcnVuZXN0YXRlLT5udW1fcGFydHBydW5lZGF0YTsgaSsr KQorCXsKKwkJUGFydGl0aW9uUHJ1bmluZ0RhdGEgKnBydW5lZGF0YSA9IHBydW5lc3RhdGUtPnBh cnRwcnVuZWRhdGFbaV07CisJCWludAkJCWo7CiAKIAkJLyoKLQkJICogTm93IHdlIGNhbiB1cGRh dGUgZWFjaCBQYXJ0aXRpb25lZFJlbFBydW5lSW5mbydzIHN1YnBsYW5fbWFwIHdpdGgKLQkJICog bmV3IHN1YnBsYW4gaW5kZXhlcy4gIFdlIG11c3QgYWxzbyByZWNvbXB1dGUgaXRzIHByZXNlbnRf cGFydHMKLQkJICogYml0bWFwLgorCQkgKiBXaXRoaW4gZWFjaCBoaWVyYXJjaHksIHdlIHBlcmZv cm0gdGhpcyBsb29wIGluIGJhY2stdG8tZnJvbnQKKwkJICogb3JkZXIgc28gdGhhdCB3ZSBkZXRl cm1pbmUgcHJlc2VudF9wYXJ0cyBmb3IgdGhlIGxvd2VzdC1sZXZlbAorCQkgKiBwYXJ0aXRpb25l ZCB0YWJsZXMgZmlyc3QuICBUaGlzIHdheSB3ZSBjYW4gdGVsbCB3aGV0aGVyIGEKKwkJICogc3Vi LXBhcnRpdGlvbmVkIHRhYmxlJ3MgcGFydGl0aW9ucyB3ZXJlIGVudGlyZWx5IHBydW5lZCBzbyB3 ZQorCQkgKiBjYW4gZXhjbHVkZSBpdCBmcm9tIHRoZSBjdXJyZW50IGxldmVsJ3MgcHJlc2VudF9w YXJ0cy4KIAkJICovCi0JCWZvciAoaSA9IDA7IGkgPCBwcnVuZXN0YXRlLT5udW1fcGFydHBydW5l ZGF0YTsgaSsrKQorCQlmb3IgKGogPSBwcnVuZWRhdGEtPm51bV9wYXJ0cmVscHJ1bmVkYXRhIC0g MTsgaiA+PSAwOyBqLS0pCiAJCXsKLQkJCVBhcnRpdGlvblBydW5pbmdEYXRhICpwcnVuZWRhdGEg PSBwcnVuZXN0YXRlLT5wYXJ0cHJ1bmVkYXRhW2ldOwotCQkJaW50CQkJajsKKwkJCVBhcnRpdGlv bmVkUmVsUHJ1bmluZ0RhdGEgKnBwcnVuZSA9ICZwcnVuZWRhdGEtPnBhcnRyZWxwcnVuZWRhdGFb al07CisJCQlpbnQJCQlucGFydHMgPSBwcHJ1bmUtPm5wYXJ0czsKKwkJCWludAkJCWs7CiAKLQkJ CS8qCi0JCQkgKiBXaXRoaW4gZWFjaCBoaWVyYXJjaHksIHdlIHBlcmZvcm0gdGhpcyBsb29wIGlu IGJhY2stdG8tZnJvbnQKLQkJCSAqIG9yZGVyIHNvIHRoYXQgd2UgZGV0ZXJtaW5lIHByZXNlbnRf cGFydHMgZm9yIHRoZSBsb3dlc3QtbGV2ZWwKLQkJCSAqIHBhcnRpdGlvbmVkIHRhYmxlcyBmaXJz dC4gIFRoaXMgd2F5IHdlIGNhbiB0ZWxsIHdoZXRoZXIgYQotCQkJICogc3ViLXBhcnRpdGlvbmVk IHRhYmxlJ3MgcGFydGl0aW9ucyB3ZXJlIGVudGlyZWx5IHBydW5lZCBzbyB3ZQotCQkJICogY2Fu IGV4Y2x1ZGUgaXQgZnJvbSB0aGUgY3VycmVudCBsZXZlbCdzIHByZXNlbnRfcGFydHMuCi0JCQkg Ki8KLQkJCWZvciAoaiA9IHBydW5lZGF0YS0+bnVtX3BhcnRyZWxwcnVuZWRhdGEgLSAxOyBqID49 IDA7IGotLSkKLQkJCXsKLQkJCQlQYXJ0aXRpb25lZFJlbFBydW5pbmdEYXRhICpwcHJ1bmUgPSAm cHJ1bmVkYXRhLT5wYXJ0cmVscHJ1bmVkYXRhW2pdOwotCQkJCWludAkJCW5wYXJ0cyA9IHBwcnVu ZS0+bnBhcnRzOwotCQkJCWludAkJCWs7CisJCQkvKiBXZSBqdXN0IHJlYnVpbGQgcHJlc2VudF9w YXJ0cyBmcm9tIHNjcmF0Y2ggKi8KKwkJCWJtc19mcmVlKHBwcnVuZS0+cHJlc2VudF9wYXJ0cyk7 CisJCQlwcHJ1bmUtPnByZXNlbnRfcGFydHMgPSBOVUxMOwogCi0JCQkJLyogV2UganVzdCByZWJ1 aWxkIHByZXNlbnRfcGFydHMgZnJvbSBzY3JhdGNoICovCi0JCQkJYm1zX2ZyZWUocHBydW5lLT5w cmVzZW50X3BhcnRzKTsKLQkJCQlwcHJ1bmUtPnByZXNlbnRfcGFydHMgPSBOVUxMOworCQkJZm9y IChrID0gMDsgayA8IG5wYXJ0czsgaysrKQorCQkJeworCQkJCWludAkJCW9sZGlkeCA9IHBwcnVu ZS0+c3VicGxhbl9tYXBba107CisJCQkJaW50CQkJc3ViaWR4OwogCi0JCQkJZm9yIChrID0gMDsg ayA8IG5wYXJ0czsgaysrKQorCQkJCS8qCisJCQkJICogSWYgdGhpcyBwYXJ0aXRpb24gZXhpc3Rl ZCBhcyBhIHN1YnBsYW4gdGhlbiBjaGFuZ2UgdGhlCisJCQkJICogb2xkIHN1YnBsYW4gaW5kZXgg dG8gdGhlIG5ldyBzdWJwbGFuIGluZGV4LiAgVGhlIG5ldworCQkJCSAqIGluZGV4IG1heSBiZWNv bWUgLTEgaWYgdGhlIHBhcnRpdGlvbiB3YXMgcHJ1bmVkIGFib3ZlLAorCQkJCSAqIG9yIGl0IG1h eSBqdXN0IGNvbWUgZWFybGllciBpbiB0aGUgc3VicGxhbiBsaXN0IGR1ZSB0bworCQkJCSAqIHNv bWUgc3VicGxhbnMgYmVpbmcgcmVtb3ZlZCBlYXJsaWVyIGluIHRoZSBsaXN0LiAgSWYKKwkJCQkg KiBpdCdzIGEgc3VicGFydGl0aW9uLCBhZGQgaXQgdG8gcHJlc2VudF9wYXJ0cyB1bmxlc3MKKwkJ CQkgKiBpdCdzIGVudGlyZWx5IHBydW5lZC4KKwkJCQkgKi8KKwkJCQlpZiAob2xkaWR4ID49IDAp CiAJCQkJewotCQkJCQlpbnQJCQlvbGRpZHggPSBwcHJ1bmUtPnN1YnBsYW5fbWFwW2tdOwotCQkJ CQlpbnQJCQlzdWJpZHg7Ci0KLQkJCQkJLyoKLQkJCQkJICogSWYgdGhpcyBwYXJ0aXRpb24gZXhp c3RlZCBhcyBhIHN1YnBsYW4gdGhlbiBjaGFuZ2UgdGhlCi0JCQkJCSAqIG9sZCBzdWJwbGFuIGlu ZGV4IHRvIHRoZSBuZXcgc3VicGxhbiBpbmRleC4gIFRoZSBuZXcKLQkJCQkJICogaW5kZXggbWF5 IGJlY29tZSAtMSBpZiB0aGUgcGFydGl0aW9uIHdhcyBwcnVuZWQgYWJvdmUsCi0JCQkJCSAqIG9y IGl0IG1heSBqdXN0IGNvbWUgZWFybGllciBpbiB0aGUgc3VicGxhbiBsaXN0IGR1ZSB0bwotCQkJ CQkgKiBzb21lIHN1YnBsYW5zIGJlaW5nIHJlbW92ZWQgZWFybGllciBpbiB0aGUgbGlzdC4gIElm Ci0JCQkJCSAqIGl0J3MgYSBzdWJwYXJ0aXRpb24sIGFkZCBpdCB0byBwcmVzZW50X3BhcnRzIHVu bGVzcwotCQkJCQkgKiBpdCdzIGVudGlyZWx5IHBydW5lZC4KLQkJCQkJICovCi0JCQkJCWlmIChv bGRpZHggPj0gMCkKLQkJCQkJewotCQkJCQkJQXNzZXJ0KG9sZGlkeCA8IG5zdWJwbGFucyk7Ci0J CQkJCQlwcHJ1bmUtPnN1YnBsYW5fbWFwW2tdID0gbmV3X3N1YnBsYW5faW5kZXhlc1tvbGRpZHhd IC0gMTsKKwkJCQkJQXNzZXJ0KG9sZGlkeCA8IG5fdG90YWxfc3VicGxhbnMpOworCQkJCQlwcHJ1 bmUtPnN1YnBsYW5fbWFwW2tdID0gbmV3X3N1YnBsYW5faW5kZXhlc1tvbGRpZHhdIC0gMTsKIAot CQkJCQkJaWYgKG5ld19zdWJwbGFuX2luZGV4ZXNbb2xkaWR4XSA+IDApCi0JCQkJCQkJcHBydW5l LT5wcmVzZW50X3BhcnRzID0KLQkJCQkJCQkJYm1zX2FkZF9tZW1iZXIocHBydW5lLT5wcmVzZW50 X3BhcnRzLCBrKTsKLQkJCQkJfQotCQkJCQllbHNlIGlmICgoc3ViaWR4ID0gcHBydW5lLT5zdWJw YXJ0X21hcFtrXSkgPj0gMCkKLQkJCQkJewotCQkJCQkJUGFydGl0aW9uZWRSZWxQcnVuaW5nRGF0 YSAqc3VicHJ1bmU7CisJCQkJCWlmIChuZXdfc3VicGxhbl9pbmRleGVzW29sZGlkeF0gPiAwKQor CQkJCQkJcHBydW5lLT5wcmVzZW50X3BhcnRzID0KKwkJCQkJCQlibXNfYWRkX21lbWJlcihwcHJ1 bmUtPnByZXNlbnRfcGFydHMsIGspOworCQkJCX0KKwkJCQllbHNlIGlmICgoc3ViaWR4ID0gcHBy dW5lLT5zdWJwYXJ0X21hcFtrXSkgPj0gMCkKKwkJCQl7CisJCQkJCVBhcnRpdGlvbmVkUmVsUHJ1 bmluZ0RhdGEgKnN1YnBydW5lOwogCi0JCQkJCQlzdWJwcnVuZSA9ICZwcnVuZWRhdGEtPnBhcnRy ZWxwcnVuZWRhdGFbc3ViaWR4XTsKKwkJCQkJc3VicHJ1bmUgPSAmcHJ1bmVkYXRhLT5wYXJ0cmVs cHJ1bmVkYXRhW3N1YmlkeF07CiAKLQkJCQkJCWlmICghYm1zX2lzX2VtcHR5KHN1YnBydW5lLT5w cmVzZW50X3BhcnRzKSkKLQkJCQkJCQlwcHJ1bmUtPnByZXNlbnRfcGFydHMgPQotCQkJCQkJCQli bXNfYWRkX21lbWJlcihwcHJ1bmUtPnByZXNlbnRfcGFydHMsIGspOwotCQkJCQl9CisJCQkJCWlm ICghYm1zX2lzX2VtcHR5KHN1YnBydW5lLT5wcmVzZW50X3BhcnRzKSkKKwkJCQkJCXBwcnVuZS0+ cHJlc2VudF9wYXJ0cyA9CisJCQkJCQkJYm1zX2FkZF9tZW1iZXIocHBydW5lLT5wcmVzZW50X3Bh cnRzLCBrKTsKIAkJCQl9CiAJCQl9CiAJCX0KKwl9CiAKLQkJLyoKLQkJICogV2UgbXVzdCBhbHNv IHJlY29tcHV0ZSB0aGUgb3RoZXJfc3VicGxhbnMgc2V0LCBzaW5jZSBpbmRleGVzIGluIGl0Ci0J CSAqIG1heSBjaGFuZ2UuCi0JCSAqLwotCQluZXdfb3RoZXJfc3VicGxhbnMgPSBOVUxMOwotCQlp ID0gLTE7Ci0JCXdoaWxlICgoaSA9IGJtc19uZXh0X21lbWJlcihwcnVuZXN0YXRlLT5vdGhlcl9z dWJwbGFucywgaSkpID49IDApCi0JCQluZXdfb3RoZXJfc3VicGxhbnMgPSBibXNfYWRkX21lbWJl cihuZXdfb3RoZXJfc3VicGxhbnMsCi0JCQkJCQkJCQkJCQluZXdfc3VicGxhbl9pbmRleGVzW2ld IC0gMSk7Ci0KLQkJYm1zX2ZyZWUocHJ1bmVzdGF0ZS0+b3RoZXJfc3VicGxhbnMpOwotCQlwcnVu ZXN0YXRlLT5vdGhlcl9zdWJwbGFucyA9IG5ld19vdGhlcl9zdWJwbGFuczsKKwkvKgorCSAqIFdl IG11c3QgYWxzbyByZWNvbXB1dGUgdGhlIG90aGVyX3N1YnBsYW5zIHNldCwgc2luY2UgaW5kZXhl cyBpbiBpdAorCSAqIG1heSBjaGFuZ2UuCisJICovCisJbmV3X290aGVyX3N1YnBsYW5zID0gTlVM TDsKKwlpID0gLTE7CisJd2hpbGUgKChpID0gYm1zX25leHRfbWVtYmVyKHBydW5lc3RhdGUtPm90 aGVyX3N1YnBsYW5zLCBpKSkgPj0gMCkKKwkJbmV3X290aGVyX3N1YnBsYW5zID0gYm1zX2FkZF9t ZW1iZXIobmV3X290aGVyX3N1YnBsYW5zLAorCQkJCQkJCQkJCQluZXdfc3VicGxhbl9pbmRleGVz W2ldIC0gMSk7CiAKLQkJcGZyZWUobmV3X3N1YnBsYW5faW5kZXhlcyk7Ci0JfQorCWJtc19mcmVl KHBydW5lc3RhdGUtPm90aGVyX3N1YnBsYW5zKTsKKwlwcnVuZXN0YXRlLT5vdGhlcl9zdWJwbGFu cyA9IG5ld19vdGhlcl9zdWJwbGFuczsKIAotCXJldHVybiByZXN1bHQ7CisJcGZyZWUobmV3X3N1 YnBsYW5faW5kZXhlcyk7CiB9CiAKIC8qCkBAIC0yMDE4LDExICsyMDk5LDE2IEBAIEV4ZWNGaW5k TWF0Y2hpbmdTdWJQbGFucyhQYXJ0aXRpb25QcnVuZVN0YXRlICpwcnVuZXN0YXRlKQogCQlwcnVu ZWRhdGEgPSBwcnVuZXN0YXRlLT5wYXJ0cHJ1bmVkYXRhW2ldOwogCQlwcHJ1bmUgPSAmcHJ1bmVk YXRhLT5wYXJ0cmVscHJ1bmVkYXRhWzBdOwogCisJCS8qCisJCSAqIFdlIHBhc3MgdGhlIDFzdCBp dGVtIGJlbG9uZ2luZyB0byB0aGUgcm9vdCB0YWJsZSBvZiB0aGUgaGllcmFyY2h5CisJCSAqIGFu ZCBmaW5kX21hdGNoaW5nX3N1YnBsYW5zX3JlY3Vyc2UoKSB0YWtlcyBjYXJlIG9mIHJlY3Vyc2lu ZyB0bworCQkgKiBvdGhlciAobG93ZXItbGV2ZWwpIHBhcmVudHMgYXMgbmVlZGVkLgorCQkgKi8K IAkJZmluZF9tYXRjaGluZ19zdWJwbGFuc19yZWN1cnNlKHBydW5lZGF0YSwgcHBydW5lLCBmYWxz ZSwgJnJlc3VsdCk7CiAKLQkJLyogRXhwcmVzc2lvbiBldmFsIG1heSBoYXZlIHVzZWQgc3BhY2Ug aW4gbm9kZSdzIHBzX0V4cHJDb250ZXh0IHRvbyAqLworCQkvKiBFeHByZXNzaW9uIGV2YWwgbWF5 IGhhdmUgdXNlZCBzcGFjZSBpbiBFeHByQ29udGV4dCB0b28gKi8KIAkJaWYgKHBwcnVuZS0+ZXhl Y19wcnVuaW5nX3N0ZXBzKQotCQkJUmVzZXRFeHByQ29udGV4dChwcHJ1bmUtPmV4ZWNfY29udGV4 dC5wbGFuc3RhdGUtPnBzX0V4cHJDb250ZXh0KTsKKwkJCVJlc2V0RXhwckNvbnRleHQocHBydW5l LT5leGVjX2NvbnRleHQuZXhwcmNvbnRleHQpOwogCX0KIAogCS8qIEFkZCBpbiBhbnkgc3VicGxh bnMgdGhhdCBwYXJ0aXRpb24gcHJ1bmluZyBkaWRuJ3QgYWNjb3VudCBmb3IgKi8KZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVBcHBlbmQuYyBiL3NyYy9iYWNrZW5kL2V4ZWN1 dG9yL25vZGVBcHBlbmQuYwppbmRleCA3OTM3ZjFjODhmLi41YjZkM2ViMjNiIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlQXBwZW5kLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhl Y3V0b3Ivbm9kZUFwcGVuZC5jCkBAIC0xMzgsMzAgKzEzOCwxNyBAQCBFeGVjSW5pdEFwcGVuZChB cHBlbmQgKm5vZGUsIEVTdGF0ZSAqZXN0YXRlLCBpbnQgZWZsYWdzKQogCXsKIAkJUGFydGl0aW9u UHJ1bmVTdGF0ZSAqcHJ1bmVzdGF0ZTsKIAotCQkvKiBXZSBtYXkgbmVlZCBhbiBleHByZXNzaW9u IGNvbnRleHQgdG8gZXZhbHVhdGUgcGFydGl0aW9uIGV4cHJzICovCi0JCUV4ZWNBc3NpZ25FeHBy Q29udGV4dChlc3RhdGUsICZhcHBlbmRzdGF0ZS0+cHMpOwotCi0JCS8qIENyZWF0ZSB0aGUgd29y a2luZyBkYXRhIHN0cnVjdHVyZSBmb3IgcHJ1bmluZy4gKi8KLQkJcHJ1bmVzdGF0ZSA9IEV4ZWND cmVhdGVQYXJ0aXRpb25QcnVuZVN0YXRlKCZhcHBlbmRzdGF0ZS0+cHMsCi0JCQkJCQkJCQkJCQkg ICBub2RlLT5wYXJ0X3BydW5lX2luZm8pOworCQkvKgorCQkgKiBTZXQgdXAgcHJ1bmluZyBkYXRh IHN0cnVjdHVyZS4gIEluaXRpYWwgcHJ1bmluZyBzdGVwcywgaWYgYW55LCBhcmUKKwkJICogcGVy Zm9ybWVkIGFzIHBhcnQgb2YgdGhlIHNldHVwLCBhZGRpbmcgdGhlIHNldCBvZiBpbmRleGVzIG9m CisJCSAqIHN1cnZpdmluZyBzdWJwbGFucyB0byAndmFsaWRzdWJwbGFucycuCisJCSAqLworCQlw cnVuZXN0YXRlID0gRXhlY0luaXRQYXJ0aXRpb25QcnVuaW5nKCZhcHBlbmRzdGF0ZS0+cHMsCisJ CQkJCQkJCQkJCSAgbGlzdF9sZW5ndGgobm9kZS0+YXBwZW5kcGxhbnMpLAorCQkJCQkJCQkJCQkg IG5vZGUtPnBhcnRfcHJ1bmVfaW5mbywKKwkJCQkJCQkJCQkJICAmdmFsaWRzdWJwbGFucyk7CiAJ CWFwcGVuZHN0YXRlLT5hc19wcnVuZV9zdGF0ZSA9IHBydW5lc3RhdGU7Ci0KLQkJLyogUGVyZm9y bSBhbiBpbml0aWFsIHBhcnRpdGlvbiBwcnVuZSwgaWYgcmVxdWlyZWQuICovCi0JCWlmIChwcnVu ZXN0YXRlLT5kb19pbml0aWFsX3BydW5lKQotCQl7Ci0JCQkvKiBEZXRlcm1pbmUgd2hpY2ggc3Vi cGxhbnMgc3Vydml2ZSBpbml0aWFsIHBydW5pbmcgKi8KLQkJCXZhbGlkc3VicGxhbnMgPSBFeGVj RmluZEluaXRpYWxNYXRjaGluZ1N1YlBsYW5zKHBydW5lc3RhdGUsCi0JCQkJCQkJCQkJCQkJCQls aXN0X2xlbmd0aChub2RlLT5hcHBlbmRwbGFucykpOwotCi0JCQlucGxhbnMgPSBibXNfbnVtX21l bWJlcnModmFsaWRzdWJwbGFucyk7Ci0JCX0KLQkJZWxzZQotCQl7Ci0JCQkvKiBXZSdsbCBuZWVk IHRvIGluaXRpYWxpemUgYWxsIHN1YnBsYW5zICovCi0JCQlucGxhbnMgPSBsaXN0X2xlbmd0aChu b2RlLT5hcHBlbmRwbGFucyk7Ci0JCQlBc3NlcnQobnBsYW5zID4gMCk7Ci0JCQl2YWxpZHN1YnBs YW5zID0gYm1zX2FkZF9yYW5nZShOVUxMLCAwLCBucGxhbnMgLSAxKTsKLQkJfQorCQlucGxhbnMg PSBibXNfbnVtX21lbWJlcnModmFsaWRzdWJwbGFucyk7CiAKIAkJLyoKIAkJICogV2hlbiBubyBy dW4tdGltZSBwcnVuaW5nIGlzIHJlcXVpcmVkIGFuZCB0aGVyZSdzIGF0IGxlYXN0IG9uZQpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU1lcmdlQXBwZW5kLmMgYi9zcmMvYmFj a2VuZC9leGVjdXRvci9ub2RlTWVyZ2VBcHBlbmQuYwppbmRleCA0MThmODlkZWE4Li45YTlmMjll ODQ1IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlTWVyZ2VBcHBlbmQuYwor KysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlTWVyZ2VBcHBlbmQuYwpAQCAtODYsMjkgKzg2 LDE3IEBAIEV4ZWNJbml0TWVyZ2VBcHBlbmQoTWVyZ2VBcHBlbmQgKm5vZGUsIEVTdGF0ZSAqZXN0 YXRlLCBpbnQgZWZsYWdzKQogCXsKIAkJUGFydGl0aW9uUHJ1bmVTdGF0ZSAqcHJ1bmVzdGF0ZTsK IAotCQkvKiBXZSBtYXkgbmVlZCBhbiBleHByZXNzaW9uIGNvbnRleHQgdG8gZXZhbHVhdGUgcGFy dGl0aW9uIGV4cHJzICovCi0JCUV4ZWNBc3NpZ25FeHByQ29udGV4dChlc3RhdGUsICZtZXJnZXN0 YXRlLT5wcyk7Ci0KLQkJcHJ1bmVzdGF0ZSA9IEV4ZWNDcmVhdGVQYXJ0aXRpb25QcnVuZVN0YXRl KCZtZXJnZXN0YXRlLT5wcywKLQkJCQkJCQkJCQkJCSAgIG5vZGUtPnBhcnRfcHJ1bmVfaW5mbyk7 CisJCS8qCisJCSAqIFNldCB1cCBwcnVuaW5nIGRhdGEgc3RydWN0dXJlLiAgSW5pdGlhbCBwcnVu aW5nIHN0ZXBzLCBpZiBhbnksIGFyZQorCQkgKiBwZXJmb3JtZWQgYXMgcGFydCBvZiB0aGUgc2V0 dXAsIGFkZGluZyB0aGUgc2V0IG9mIGluZGV4ZXMgb2YKKwkJICogc3Vydml2aW5nIHN1YnBsYW5z IHRvICd2YWxpZHN1YnBsYW5zJy4KKwkJICovCisJCXBydW5lc3RhdGUgPSBFeGVjSW5pdFBhcnRp dGlvblBydW5pbmcoJm1lcmdlc3RhdGUtPnBzLAorCQkJCQkJCQkJCQkgIGxpc3RfbGVuZ3RoKG5v ZGUtPm1lcmdlcGxhbnMpLAorCQkJCQkJCQkJCQkgIG5vZGUtPnBhcnRfcHJ1bmVfaW5mbywKKwkJ CQkJCQkJCQkJICAmdmFsaWRzdWJwbGFucyk7CiAJCW1lcmdlc3RhdGUtPm1zX3BydW5lX3N0YXRl ID0gcHJ1bmVzdGF0ZTsKLQotCQkvKiBQZXJmb3JtIGFuIGluaXRpYWwgcGFydGl0aW9uIHBydW5l LCBpZiByZXF1aXJlZC4gKi8KLQkJaWYgKHBydW5lc3RhdGUtPmRvX2luaXRpYWxfcHJ1bmUpCi0J CXsKLQkJCS8qIERldGVybWluZSB3aGljaCBzdWJwbGFucyBzdXJ2aXZlIGluaXRpYWwgcHJ1bmlu ZyAqLwotCQkJdmFsaWRzdWJwbGFucyA9IEV4ZWNGaW5kSW5pdGlhbE1hdGNoaW5nU3ViUGxhbnMo cHJ1bmVzdGF0ZSwKLQkJCQkJCQkJCQkJCQkJCWxpc3RfbGVuZ3RoKG5vZGUtPm1lcmdlcGxhbnMp KTsKLQotCQkJbnBsYW5zID0gYm1zX251bV9tZW1iZXJzKHZhbGlkc3VicGxhbnMpOwotCQl9Ci0J CWVsc2UKLQkJewotCQkJLyogV2UnbGwgbmVlZCB0byBpbml0aWFsaXplIGFsbCBzdWJwbGFucyAq LwotCQkJbnBsYW5zID0gbGlzdF9sZW5ndGgobm9kZS0+bWVyZ2VwbGFucyk7Ci0JCQlBc3NlcnQo bnBsYW5zID4gMCk7Ci0JCQl2YWxpZHN1YnBsYW5zID0gYm1zX2FkZF9yYW5nZShOVUxMLCAwLCBu cGxhbnMgLSAxKTsKLQkJfQorCQlucGxhbnMgPSBibXNfbnVtX21lbWJlcnModmFsaWRzdWJwbGFu cyk7CiAKIAkJLyoKIAkJICogV2hlbiBubyBydW4tdGltZSBwcnVuaW5nIGlzIHJlcXVpcmVkIGFu ZCB0aGVyZSdzIGF0IGxlYXN0IG9uZQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcGFydGl0aW9u aW5nL3BhcnRwcnVuZS5jIGIvc3JjL2JhY2tlbmQvcGFydGl0aW9uaW5nL3BhcnRwcnVuZS5jCmlu ZGV4IDFiYzAwODI2YzEuLjcwODBjYjI1ZDkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3BhcnRp dGlvbmluZy9wYXJ0cHJ1bmUuYworKysgYi9zcmMvYmFja2VuZC9wYXJ0aXRpb25pbmcvcGFydHBy dW5lLmMKQEAgLTc5OCw2ICs3OTgsNyBAQCBwcnVuZV9hcHBlbmRfcmVsX3BhcnRpdGlvbnMoUmVs T3B0SW5mbyAqcmVsKQogCiAJLyogVGhlc2UgYXJlIG5vdCB2YWxpZCB3aGVuIGJlaW5nIGNhbGxl ZCBmcm9tIHRoZSBwbGFubmVyICovCiAJY29udGV4dC5wbGFuc3RhdGUgPSBOVUxMOworCWNvbnRl eHQuZXhwcmNvbnRleHQgPSBOVUxMOwogCWNvbnRleHQuZXhwcnN0YXRlcyA9IE5VTEw7CiAKIAkv KiBBY3R1YWwgcHJ1bmluZyBoYXBwZW5zIGhlcmUuICovCkBAIC04MDgsOCArODA5LDggQEAgcHJ1 bmVfYXBwZW5kX3JlbF9wYXJ0aXRpb25zKFJlbE9wdEluZm8gKnJlbCkKICAqIGdldF9tYXRjaGlu Z19wYXJ0aXRpb25zCiAgKgkJRGV0ZXJtaW5lIHBhcnRpdGlvbnMgdGhhdCBzdXJ2aXZlIHBhcnRp dGlvbiBwcnVuaW5nCiAgKgotICogTm90ZTogY29udGV4dC0+cGxhbnN0YXRlIG11c3QgYmUgc2V0 IHRvIGEgdmFsaWQgUGxhblN0YXRlIHdoZW4gdGhlCi0gKiBwcnVuaW5nX3N0ZXBzIHdlcmUgZ2Vu ZXJhdGVkIHdpdGggYSB0YXJnZXQgb3RoZXIgdGhhbiBQQVJUVEFSR0VUX1BMQU5ORVIuCisgKiBO b3RlOiBjb250ZXh0LT5leHByY29udGV4dCBtdXN0IGJlIHZhbGlkIHdoZW4gdGhlIHBydW5pbmdf c3RlcHMgd2VyZQorICogZ2VuZXJhdGVkIHdpdGggYSB0YXJnZXQgb3RoZXIgdGhhbiBQQVJUVEFS R0VUX1BMQU5ORVIuCiAgKgogICogUmV0dXJucyBhIEJpdG1hcHNldCBvZiB0aGUgUmVsT3B0SW5m by0+cGFydF9yZWxzIGluZGV4ZXMgb2YgdGhlIHN1cnZpdmluZwogICogcGFydGl0aW9ucy4KQEAg LTM2NTQsNyArMzY1NSw3IEBAIG1hdGNoX2Jvb2xlYW5fcGFydGl0aW9uX2NsYXVzZShPaWQgcGFy dG9wZmFtaWx5LCBFeHByICpjbGF1c2UsIEV4cHIgKnBhcnRrZXksCiAgKiBleHByc3RhdGUgYXJy YXkuCiAgKgogICogTm90ZSB0aGF0IHRoZSBldmFsdWF0ZWQgcmVzdWx0IG1heSBiZSBpbiB0aGUg cGVyLXR1cGxlIG1lbW9yeSBjb250ZXh0IG9mCi0gKiBjb250ZXh0LT5wbGFuc3RhdGUtPnBzX0V4 cHJDb250ZXh0LCBhbmQgd2UgbWF5IGhhdmUgbGVha2VkIG90aGVyIG1lbW9yeQorICogY29udGV4 dC0+ZXhwcmNvbnRleHQsIGFuZCB3ZSBtYXkgaGF2ZSBsZWFrZWQgb3RoZXIgbWVtb3J5CiAgKiB0 aGVyZSB0b28uICBUaGlzIG1lbW9yeSBtdXN0IGJlIHJlY292ZXJlZCBieSByZXNldHRpbmcgdGhh dCBFeHByQ29udGV4dAogICogYWZ0ZXIgd2UncmUgZG9uZSB3aXRoIHRoZSBwcnVuaW5nIG9wZXJh dGlvbiAoc2VlIGV4ZWNQYXJ0aXRpb24uYykuCiAgKi8KQEAgLTM2NzcsMTMgKzM2NzgsMTggQEAg cGFydGtleV9kYXR1bV9mcm9tX2V4cHIoUGFydGl0aW9uUHJ1bmVDb250ZXh0ICpjb250ZXh0LAog CQlFeHByQ29udGV4dCAqZWN0eDsKIAogCQkvKgotCQkgKiBXZSBzaG91bGQgbmV2ZXIgc2VlIGEg bm9uLUNvbnN0IGluIGEgc3RlcCB1bmxlc3Mgd2UncmUgcnVubmluZyBpbgotCQkgKiB0aGUgZXhl Y3V0b3IuCisJCSAqIFdlIHNob3VsZCBuZXZlciBzZWUgYSBub24tQ29uc3QgaW4gYSBzdGVwIHVu bGVzcyB0aGUgY2FsbGVyIGhhcworCQkgKiBwYXNzZWQgYSB2YWxpZCBFeHByQ29udGV4dC4KKwkJ ICoKKwkJICogV2hlbiBjb250ZXh0LT5wbGFuc3RhdGUgaXMgdmFsaWQsIGNvbnRleHQtPmV4cHJj b250ZXh0IGlzIHNhbWUKKwkJICogYXMgY29udGV4dC0+cGxhbnN0YXRlLT5wc19FeHByQ29udGV4 dC4KIAkJICovCi0JCUFzc2VydChjb250ZXh0LT5wbGFuc3RhdGUgIT0gTlVMTCk7CisJCUFzc2Vy dChjb250ZXh0LT5wbGFuc3RhdGUgIT0gTlVMTCB8fCBjb250ZXh0LT5leHByY29udGV4dCAhPSBO VUxMKTsKKwkJQXNzZXJ0KGNvbnRleHQtPnBsYW5zdGF0ZSA9PSBOVUxMIHx8CisJCQkgICAoY29u dGV4dC0+ZXhwcmNvbnRleHQgPT0gY29udGV4dC0+cGxhbnN0YXRlLT5wc19FeHByQ29udGV4dCkp OwogCiAJCWV4cHJzdGF0ZSA9IGNvbnRleHQtPmV4cHJzdGF0ZXNbc3RhdGVpZHhdOwotCQllY3R4 ID0gY29udGV4dC0+cGxhbnN0YXRlLT5wc19FeHByQ29udGV4dDsKKwkJZWN0eCA9IGNvbnRleHQt PmV4cHJjb250ZXh0OwogCQkqdmFsdWUgPSBFeGVjRXZhbEV4cHJTd2l0Y2hDb250ZXh0KGV4cHJz dGF0ZSwgZWN0eCwgaXNudWxsKTsKIAl9CiB9CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9leGVj dXRvci9leGVjUGFydGl0aW9uLmggYi9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjUGFydGl0aW9u LmgKaW5kZXggNjAzZDhiZWNjNC4uZmQ1NzM1YTk0NiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUv ZXhlY3V0b3IvZXhlY1BhcnRpdGlvbi5oCisrKyBiL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWNQ YXJ0aXRpb24uaApAQCAtMTE5LDEwICsxMTksOSBAQCBleHRlcm4gUmVzdWx0UmVsSW5mbyAqRXhl Y0ZpbmRQYXJ0aXRpb24oTW9kaWZ5VGFibGVTdGF0ZSAqbXRzdGF0ZSwKIAkJCQkJCQkJCQlFU3Rh dGUgKmVzdGF0ZSk7CiBleHRlcm4gdm9pZCBFeGVjQ2xlYW51cFR1cGxlUm91dGluZyhNb2RpZnlU YWJsZVN0YXRlICptdHN0YXRlLAogCQkJCQkJCQkJUGFydGl0aW9uVHVwbGVSb3V0aW5nICpwcm91 dGUpOwotZXh0ZXJuIFBhcnRpdGlvblBydW5lU3RhdGUgKkV4ZWNDcmVhdGVQYXJ0aXRpb25QcnVu ZVN0YXRlKFBsYW5TdGF0ZSAqcGxhbnN0YXRlLAotCQkJCQkJCQkJCQkJCQkgIFBhcnRpdGlvblBy dW5lSW5mbyAqcGFydGl0aW9ucHJ1bmVpbmZvKTsKK2V4dGVybiBQYXJ0aXRpb25QcnVuZVN0YXRl ICpFeGVjSW5pdFBhcnRpdGlvblBydW5pbmcoUGxhblN0YXRlICpwbGFuc3RhdGUsCisJCQkJCQkg aW50IG5fdG90YWxfc3VicGxhbnMsCisJCQkJCQkgUGFydGl0aW9uUHJ1bmVJbmZvICpwcnVuZWlu Zm8sCisJCQkJCQkgQml0bWFwc2V0ICoqaW5pdGlhbGx5X3ZhbGlkX3N1YnBsYW5zKTsKIGV4dGVy biBCaXRtYXBzZXQgKkV4ZWNGaW5kTWF0Y2hpbmdTdWJQbGFucyhQYXJ0aXRpb25QcnVuZVN0YXRl ICpwcnVuZXN0YXRlKTsKLWV4dGVybiBCaXRtYXBzZXQgKkV4ZWNGaW5kSW5pdGlhbE1hdGNoaW5n U3ViUGxhbnMoUGFydGl0aW9uUHJ1bmVTdGF0ZSAqcHJ1bmVzdGF0ZSwKLQkJCQkJCQkJCQkJCSAg aW50IG5zdWJwbGFucyk7Ci0KICNlbmRpZgkJCQkJCQkvKiBFWEVDUEFSVElUSU9OX0ggKi8KZGlm ZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3BhcnRpdGlvbmluZy9wYXJ0cHJ1bmUuaCBiL3NyYy9pbmNs dWRlL3BhcnRpdGlvbmluZy9wYXJ0cHJ1bmUuaAppbmRleCBlZTExYjZmZWFlLi45MDY4NGVmYTI1 IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9wYXJ0aXRpb25pbmcvcGFydHBydW5lLmgKKysrIGIv c3JjL2luY2x1ZGUvcGFydGl0aW9uaW5nL3BhcnRwcnVuZS5oCkBAIC00MSw2ICs0MSw3IEBAIHN0 cnVjdCBSZWxPcHRJbmZvOwogICoJCQkJCXN1YnNpZGlhcnkgZGF0YSwgc3VjaCBhcyB0aGUgRm1n ckluZm9zLgogICogcGxhbnN0YXRlCQlQb2ludHMgdG8gdGhlIHBhcmVudCBwbGFuIG5vZGUncyBQ bGFuU3RhdGUgd2hlbiBjYWxsZWQKICAqCQkJCQlkdXJpbmcgZXhlY3V0aW9uOyBOVUxMIHdoZW4g Y2FsbGVkIGZyb20gdGhlIHBsYW5uZXIuCisgKiBleHByY29udGV4dAkJRXhwckNvbnRleHQgdG8g dXNlIHdoZW4gZXZhbHVhdGluZyBwcnVuaW5nIGV4cHJlc3Npb25zCiAgKiBleHByc3RhdGVzCQlB cnJheSBvZiBFeHByU3RhdGVzLCBpbmRleGVkIGFzIHBlciBQcnVuZUN4dFN0YXRlSWR4OyBvbmUK ICAqCQkJCQlmb3IgZWFjaCBwYXJ0aXRpb24ga2V5IGluIGVhY2ggcHJ1bmluZyBzdGVwLiAgQWxs b2NhdGVkIGlmCiAgKgkJCQkJcGxhbnN0YXRlIGlzIG5vbi1OVUxMLCBvdGhlcndpc2UgTlVMTC4K QEAgLTU2LDYgKzU3LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgUGFydGl0aW9uUHJ1bmVDb250ZXh0CiAJ Rm1nckluZm8gICAqc3RlcGNtcGZ1bmNzOwogCU1lbW9yeUNvbnRleHQgcHBjY29udGV4dDsKIAlQ bGFuU3RhdGUgICpwbGFuc3RhdGU7CisJRXhwckNvbnRleHQgKmV4cHJjb250ZXh0OwogCUV4cHJT dGF0ZSAqKmV4cHJzdGF0ZXM7CiB9IFBhcnRpdGlvblBydW5lQ29udGV4dDsKIAotLSAKMi4yNC4x Cgo= --0000000000003b47cb05db424440 Content-Type: application/octet-stream; name="v7-0004-Optimize-AcquireExecutorLocks-to-skip-pruned-part.patch" Content-Disposition: attachment; filename="v7-0004-Optimize-AcquireExecutorLocks-to-skip-pruned-part.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l1ae1bu83 RnJvbSAxNGQ5NTFjYTY0NDg2MGVlYzZkNzJhYzAzZTNhOTViMTIzNzM5MzhiIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBhbWl0bGFuIDxhbWl0bGFuZ290ZTA5QGdtYWlsLmNvbT4KRGF0 ZTogV2VkLCAyMiBEZWMgMjAyMSAxNjo1NToxNyArMDkwMApTdWJqZWN0OiBbUEFUQ0ggdjcgNC80 XSBPcHRpbWl6ZSBBY3F1aXJlRXhlY3V0b3JMb2NrcygpIHRvIHNraXAgcHJ1bmVkCiBwYXJ0aXRp b25zCgpJbnN0ZWFkIG9mIGxvY2tpbmcgYWxsIHJlbGF0aW9ucyBsaXN0ZWQgaW4gdGhlIHJhbmdl IHRhYmxlIGluIHRoZQpjYXNlcyB3aGVyZSB0aGUgUGxhbm5lZFN0bXQgaW5kaWNhdGVzIHRoYXQg c29tZSBub2RlcyBpbiB0aGUgcGxhbgp0cmVlIGNhbiBkbyBwYXJ0aXRpb24gcHJ1bmluZyB3aXRo b3V0IGRlcGVuZGluZyBvbiBleGVjdXRpb24gaGF2aW5nCnN0YXJ0ZWQgKHNvIGNhbGxlZCAiaW5p dGlhbCIgcHJ1bmluZyksIEFjcXVpcmVFeGVjdXRvckxvY2tzKCkgbm93CmNhbGxzIHRoZSBuZXcg ZXhlY3V0b3IgZnVuY3Rpb24gRXhlY3V0b3JHZXRMb2NrUmVscygpIHdoaWNoIHJldHVybnMKYSBz ZXQgb2YgcmVsYXRpb25zICh0aGVpciBSVCBpbmRleGVzKSB0byBiZSBsb2NrZWQgbm90IGluY2x1 ZGluZwp0aG9zZSBzY2FubmVkIGJ5IHRoZSBzdWJwbGFucyB0aGF0IHBydW5lZC4KClRoZSByZXN1 bHQgb2YgcHJ1bmluZyBkb25lIHRoaXMgd2F5IG11c3QgYmUgcmVtZW1iZXJlZCBhbmQgcmV1c2Vk CmR1cmluZyBhY3R1YWwgZXhlY3V0aW9uIG9mIHRoZSBwbGFuLCB3aGljaCBpcyBkb25lIGJ5IGNy ZWF0aW5nIGEKUGxhbkluaXRQcnVuaW5nT3V0cHV0IG5vZGVzIGZvciBmb3IgZWFjaCBwbGFuIG5v ZGUgdGhhdCB1bmRlcmdvZXMKcHJ1bmluZyBhbmQgYSBzZXQgb2YgdGhvc2UgZm9yIHRoZSB3aG9s ZSBwbGFuIHRyZWUgYXJlIGFkZGVkIHRvCkV4ZWNMb2NrUmVsc0luZm8gd2hpY2ggYWxzbyBzdG9y ZXMgdGhlIGJpdG1hcHNldCBvZiBSVCBpbmRleGVzIG9mCnJlbGF0aW9ucyB0aGF0IGFyZSBhY3R1 YWxseSBsb2NrZWQgYnkgQWNxdWlyZUV4ZWN1dG9yTG9ja3MoKS4KRXhlY0xvY2tSZWxzSW5mb3Mg YXJlIHBhc3NlZCBkb3duIHRoZSBleGVjdXRvciBhbG9uZ3NpZGUgdGhlClBsYW5uZWRTdG10cy4g IFRoaXMgYXJyYW5nZW1lbnQgZW5zdXJlcyB0aGF0IHRoZSBleGVjdXRvciBkb2Vzbid0CmFjY2lk ZW50YWxseSB0cnkgdG8gcHJvY2VzcyBhIHBsYW4gdHJlZSBzdWJub2RlcyB0aGF0IGhhcyBiZWVu CmRlZW1lZCBwcnVuZWQgYnkgQWNxdWlyZUV4ZWN1dG9yTG9ja3MoKS4KLS0tCiBzcmMvYmFja2Vu ZC9jb21tYW5kcy9jb3B5dG8uYyAgICAgICAgICB8ICAgMiArLQogc3JjL2JhY2tlbmQvY29tbWFu ZHMvY3JlYXRlYXMuYyAgICAgICAgfCAgIDIgKy0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxh aW4uYyAgICAgICAgIHwgICA3ICstCiBzcmMvYmFja2VuZC9jb21tYW5kcy9leHRlbnNpb24uYyAg ICAgICB8ICAxMyArLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvbWF0dmlldy5jICAgICAgICAgfCAg IDIgKy0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL3BvcnRhbGNtZHMuYyAgICAgIHwgICAxICsKIHNy Yy9iYWNrZW5kL2NvbW1hbmRzL3ByZXBhcmUuYyAgICAgICAgIHwgIDE3ICstCiBzcmMvYmFja2Vu ZC9leGVjdXRvci9SRUFETUUgICAgICAgICAgICB8ICAyNCArKysKIHNyYy9iYWNrZW5kL2V4ZWN1 dG9yL2V4ZWNNYWluLmMgICAgICAgIHwgMjAyICsrKysrKysrKysrKysrKysrKysrCiBzcmMvYmFj a2VuZC9leGVjdXRvci9leGVjUGFyYWxsZWwuYyAgICB8ICAyNiArKy0KIHNyYy9iYWNrZW5kL2V4 ZWN1dG9yL2V4ZWNQYXJ0aXRpb24uYyAgIHwgMjI0ICsrKysrKysrKysrKysrKysrKy0tLS0KIHNy Yy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNVdGlscy5jICAgICAgIHwgICA4ICsKIHNyYy9iYWNrZW5k L2V4ZWN1dG9yL2Z1bmN0aW9ucy5jICAgICAgIHwgICAyICstCiBzcmMvYmFja2VuZC9leGVjdXRv ci9ub2RlQXBwZW5kLmMgICAgICB8ICA1MiArKysrLQogc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9k ZU1lcmdlQXBwZW5kLmMgfCAgNTIgKysrKy0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVNb2Rp ZnlUYWJsZS5jIHwgIDI1ICsrKwogc3JjL2JhY2tlbmQvZXhlY3V0b3Ivc3BpLmMgICAgICAgICAg ICAgfCAgMTQgKy0KIHNyYy9iYWNrZW5kL25vZGVzL2NvcHlmdW5jcy5jICAgICAgICAgIHwgIDQ5 ICsrKystCiBzcmMvYmFja2VuZC9ub2Rlcy9vdXRmdW5jcy5jICAgICAgICAgICB8ICAzOSArKysr CiBzcmMvYmFja2VuZC9ub2Rlcy9yZWFkZnVuY3MuYyAgICAgICAgICB8ICAzNyArKysrCiBzcmMv YmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubmVyLmMgICB8ICAgMiArCiBzcmMvYmFja2VuZC9v cHRpbWl6ZXIvcGxhbi9zZXRyZWZzLmMgICB8ICAgNiArCiBzcmMvYmFja2VuZC9wYXJ0aXRpb25p bmcvcGFydHBydW5lLmMgICB8ICAzNyArKystCiBzcmMvYmFja2VuZC90Y29wL3Bvc3RncmVzLmMg ICAgICAgICAgICB8ICAxNSArLQogc3JjL2JhY2tlbmQvdGNvcC9wcXVlcnkuYyAgICAgICAgICAg ICAgfCAgMjEgKystCiBzcmMvYmFja2VuZC91dGlscy9jYWNoZS9wbGFuY2FjaGUuYyAgICB8IDI1 MiArKysrKysrKysrKysrKysrKysrKysrLS0tCiBzcmMvYmFja2VuZC91dGlscy9tbWdyL3BvcnRh bG1lbS5jICAgICB8ICAgMiArCiBzcmMvaW5jbHVkZS9jb21tYW5kcy9leHBsYWluLmggICAgICAg ICB8ICAgMyArLQogc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY1BhcnRpdGlvbi5oICAgfCAgIDIg Kwogc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY2Rlc2MuaCAgICAgICAgfCAgIDIgKwogc3JjL2lu Y2x1ZGUvZXhlY3V0b3IvZXhlY3V0b3IuaCAgICAgICAgfCAgIDIgKwogc3JjL2luY2x1ZGUvZXhl Y3V0b3Ivbm9kZUFwcGVuZC5oICAgICAgfCAgIDEgKwogc3JjL2luY2x1ZGUvZXhlY3V0b3Ivbm9k ZU1lcmdlQXBwZW5kLmggfCAgIDEgKwogc3JjL2luY2x1ZGUvZXhlY3V0b3Ivbm9kZU1vZGlmeVRh YmxlLmggfCAgIDEgKwogc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmggICAgICAgICAgfCAg OTYgKysrKysrKysrKwogc3JjL2luY2x1ZGUvbm9kZXMvbm9kZXMuaCAgICAgICAgICAgICAgfCAg IDUgKwogc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmggICAgICAgICAgfCAgIDQgKwogc3Jj L2luY2x1ZGUvbm9kZXMvcGxhbm5vZGVzLmggICAgICAgICAgfCAgMTUgKysKIHNyYy9pbmNsdWRl L3Rjb3AvdGNvcHByb3QuaCAgICAgICAgICAgIHwgICAyICstCiBzcmMvaW5jbHVkZS91dGlscy9w bGFuY2FjaGUuaCAgICAgICAgICB8ICAgNiArCiBzcmMvaW5jbHVkZS91dGlscy9wb3J0YWwuaCAg ICAgICAgICAgICB8ICAgNSArCiA0MSBmaWxlcyBjaGFuZ2VkLCAxMTc0IGluc2VydGlvbnMoKyks IDEwNCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5 dG8uYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvcHl0by5jCmluZGV4IDU1YzM4YjA0YzQuLmQ0 MDNlYjIzMDkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvcHl0by5jCisrKyBi L3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvcHl0by5jCkBAIC01NDIsNyArNTQyLDcgQEAgQmVnaW5D b3B5VG8oUGFyc2VTdGF0ZSAqcHN0YXRlLAogCQkoKERSX2NvcHkgKikgZGVzdCktPmNzdGF0ZSA9 IGNzdGF0ZTsKIAogCQkvKiBDcmVhdGUgYSBRdWVyeURlc2MgcmVxdWVzdGluZyBubyBvdXRwdXQg Ki8KLQkJY3N0YXRlLT5xdWVyeURlc2MgPSBDcmVhdGVRdWVyeURlc2MocGxhbiwgcHN0YXRlLT5w X3NvdXJjZXRleHQsCisJCWNzdGF0ZS0+cXVlcnlEZXNjID0gQ3JlYXRlUXVlcnlEZXNjKHBsYW4s IE5VTEwsIHBzdGF0ZS0+cF9zb3VyY2V0ZXh0LAogCQkJCQkJCQkJCQlHZXRBY3RpdmVTbmFwc2hv dCgpLAogCQkJCQkJCQkJCQlJbnZhbGlkU25hcHNob3QsCiAJCQkJCQkJCQkJCWRlc3QsIE5VTEws IE5VTEwsIDApOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvY3JlYXRlYXMuYyBi L3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NyZWF0ZWFzLmMKaW5kZXggOWFiYmI2YjU1NS4uZjY2MDdm MjQ1NCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvY3JlYXRlYXMuYworKysgYi9z cmMvYmFja2VuZC9jb21tYW5kcy9jcmVhdGVhcy5jCkBAIC0zMjUsNyArMzI1LDcgQEAgRXhlY0Ny ZWF0ZVRhYmxlQXMoUGFyc2VTdGF0ZSAqcHN0YXRlLCBDcmVhdGVUYWJsZUFzU3RtdCAqc3RtdCwK IAkJVXBkYXRlQWN0aXZlU25hcHNob3RDb21tYW5kSWQoKTsKIAogCQkvKiBDcmVhdGUgYSBRdWVy eURlc2MsIHJlZGlyZWN0aW5nIG91dHB1dCB0byBvdXIgdHVwbGUgcmVjZWl2ZXIgKi8KLQkJcXVl cnlEZXNjID0gQ3JlYXRlUXVlcnlEZXNjKHBsYW4sIHBzdGF0ZS0+cF9zb3VyY2V0ZXh0LAorCQlx dWVyeURlc2MgPSBDcmVhdGVRdWVyeURlc2MocGxhbiwgTlVMTCwgcHN0YXRlLT5wX3NvdXJjZXRl eHQsCiAJCQkJCQkJCQlHZXRBY3RpdmVTbmFwc2hvdCgpLCBJbnZhbGlkU25hcHNob3QsCiAJCQkJ CQkJCQlkZXN0LCBwYXJhbXMsIHF1ZXJ5RW52LCAwKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvY29tbWFuZHMvZXhwbGFpbi5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXhwbGFpbi5jCmlu ZGV4IDlmNjMyMjg1YjYuLjFmMWE0NGI5YmIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1h bmRzL2V4cGxhaW4uYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMKQEAgLTQw Nyw3ICs0MDcsNyBAQCBFeHBsYWluT25lUXVlcnkoUXVlcnkgKnF1ZXJ5LCBpbnQgY3Vyc29yT3B0 aW9ucywKIAkJfQogCiAJCS8qIHJ1biBpdCAoaWYgbmVlZGVkKSBhbmQgcHJvZHVjZSBvdXRwdXQg Ki8KLQkJRXhwbGFpbk9uZVBsYW4ocGxhbiwgaW50bywgZXMsIHF1ZXJ5U3RyaW5nLCBwYXJhbXMs IHF1ZXJ5RW52LAorCQlFeHBsYWluT25lUGxhbihwbGFuLCBOVUxMLCBpbnRvLCBlcywgcXVlcnlT dHJpbmcsIHBhcmFtcywgcXVlcnlFbnYsCiAJCQkJCSAgICZwbGFuZHVyYXRpb24sIChlcy0+YnVm ZmVycyA/ICZidWZ1c2FnZSA6IE5VTEwpKTsKIAl9CiB9CkBAIC01MTUsNyArNTE1LDggQEAgRXhw bGFpbk9uZVV0aWxpdHkoTm9kZSAqdXRpbGl0eVN0bXQsIEludG9DbGF1c2UgKmludG8sIEV4cGxh aW5TdGF0ZSAqZXMsCiAgKiB0byBjYWxsIGl0LgogICovCiB2b2lkCi1FeHBsYWluT25lUGxhbihQ bGFubmVkU3RtdCAqcGxhbm5lZHN0bXQsIEludG9DbGF1c2UgKmludG8sIEV4cGxhaW5TdGF0ZSAq ZXMsCitFeHBsYWluT25lUGxhbihQbGFubmVkU3RtdCAqcGxhbm5lZHN0bXQsIEV4ZWNMb2NrUmVs c0luZm8gKmV4ZWNsb2NrcmVsc2luZm8sCisJCQkgICBJbnRvQ2xhdXNlICppbnRvLCBFeHBsYWlu U3RhdGUgKmVzLAogCQkJICAgY29uc3QgY2hhciAqcXVlcnlTdHJpbmcsIFBhcmFtTGlzdEluZm8g cGFyYW1zLAogCQkJICAgUXVlcnlFbnZpcm9ubWVudCAqcXVlcnlFbnYsIGNvbnN0IGluc3RyX3Rp bWUgKnBsYW5kdXJhdGlvbiwKIAkJCSAgIGNvbnN0IEJ1ZmZlclVzYWdlICpidWZ1c2FnZSkKQEAg LTU2Myw3ICs1NjQsNyBAQCBFeHBsYWluT25lUGxhbihQbGFubmVkU3RtdCAqcGxhbm5lZHN0bXQs IEludG9DbGF1c2UgKmludG8sIEV4cGxhaW5TdGF0ZSAqZXMsCiAJCWRlc3QgPSBOb25lX1JlY2Vp dmVyOwogCiAJLyogQ3JlYXRlIGEgUXVlcnlEZXNjIGZvciB0aGUgcXVlcnkgKi8KLQlxdWVyeURl c2MgPSBDcmVhdGVRdWVyeURlc2MocGxhbm5lZHN0bXQsIHF1ZXJ5U3RyaW5nLAorCXF1ZXJ5RGVz YyA9IENyZWF0ZVF1ZXJ5RGVzYyhwbGFubmVkc3RtdCwgZXhlY2xvY2tyZWxzaW5mbywgcXVlcnlT dHJpbmcsCiAJCQkJCQkJCUdldEFjdGl2ZVNuYXBzaG90KCksIEludmFsaWRTbmFwc2hvdCwKIAkJ CQkJCQkJZGVzdCwgcGFyYW1zLCBxdWVyeUVudiwgaW5zdHJ1bWVudF9vcHRpb24pOwogCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9leHRlbnNpb24uYyBiL3NyYy9iYWNrZW5kL2Nv bW1hbmRzL2V4dGVuc2lvbi5jCmluZGV4IDEwMTM3OTBkYmIuLjAwOGI4Y2UwZTkgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V4dGVuc2lvbi5jCisrKyBiL3NyYy9iYWNrZW5kL2Nv bW1hbmRzL2V4dGVuc2lvbi5jCkBAIC03NDEsOCArNzQxLDEwIEBAIGV4ZWN1dGVfc3FsX3N0cmlu Zyhjb25zdCBjaGFyICpzcWwpCiAJCVJhd1N0bXQgICAgKnBhcnNldHJlZSA9IGxmaXJzdF9ub2Rl KFJhd1N0bXQsIGxjMSk7CiAJCU1lbW9yeUNvbnRleHQgcGVyX3BhcnNldHJlZV9jb250ZXh0LAog CQkJCQlvbGRjb250ZXh0OwotCQlMaXN0CSAgICpzdG10X2xpc3Q7Ci0JCUxpc3RDZWxsICAgKmxj MjsKKwkJTGlzdAkgICAqc3RtdF9saXN0LAorCQkJCSAgICpleGVjbG9ja3JlbHNpbmZvX2xpc3Q7 CisJCUxpc3RDZWxsICAgKmxjMiwKKwkJCQkgICAqbGMzOwogCiAJCS8qCiAJCSAqIFdlIGRvIHRo ZSB3b3JrIGZvciBlYWNoIHBhcnNldHJlZSBpbiBhIHNob3J0LWxpdmVkIGNvbnRleHQsIHRvCkBA IC03NjIsMTEgKzc2NCwxMyBAQCBleGVjdXRlX3NxbF9zdHJpbmcoY29uc3QgY2hhciAqc3FsKQog CQkJCQkJCQkJCSAgIE5VTEwsCiAJCQkJCQkJCQkJICAgMCwKIAkJCQkJCQkJCQkgICBOVUxMKTsK LQkJc3RtdF9saXN0ID0gcGdfcGxhbl9xdWVyaWVzKHN0bXRfbGlzdCwgc3FsLCBDVVJTT1JfT1BU X1BBUkFMTEVMX09LLCBOVUxMKTsKKwkJc3RtdF9saXN0ID0gcGdfcGxhbl9xdWVyaWVzKHN0bXRf bGlzdCwgc3FsLCBDVVJTT1JfT1BUX1BBUkFMTEVMX09LLCBOVUxMLAorCQkJCQkJCQkJJmV4ZWNs b2NrcmVsc2luZm9fbGlzdCk7CiAKLQkJZm9yZWFjaChsYzIsIHN0bXRfbGlzdCkKKwkJZm9yYm90 aChsYzIsIHN0bXRfbGlzdCwgbGMzLCBleGVjbG9ja3JlbHNpbmZvX2xpc3QpCiAJCXsKIAkJCVBs YW5uZWRTdG10ICpzdG10ID0gbGZpcnN0X25vZGUoUGxhbm5lZFN0bXQsIGxjMik7CisJCQlFeGVj TG9ja1JlbHNJbmZvICpleGVjbG9ja3JlbHNpbmZvID0gbGZpcnN0X25vZGUoRXhlY0xvY2tSZWxz SW5mbywgbGMzKTsKIAogCQkJQ29tbWFuZENvdW50ZXJJbmNyZW1lbnQoKTsKIApAQCAtNzc3LDYg Kzc4MSw3IEBAIGV4ZWN1dGVfc3FsX3N0cmluZyhjb25zdCBjaGFyICpzcWwpCiAJCQkJUXVlcnlE ZXNjICAqcWRlc2M7CiAKIAkJCQlxZGVzYyA9IENyZWF0ZVF1ZXJ5RGVzYyhzdG10LAorCQkJCQkJ CQkJCWV4ZWNsb2NrcmVsc2luZm8sCiAJCQkJCQkJCQkJc3FsLAogCQkJCQkJCQkJCUdldEFjdGl2 ZVNuYXBzaG90KCksIE5VTEwsCiAJCQkJCQkJCQkJZGVzdCwgTlVMTCwgTlVMTCwgMCk7CmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9tYXR2aWV3LmMgYi9zcmMvYmFja2VuZC9jb21t YW5kcy9tYXR2aWV3LmMKaW5kZXggMDVlN2I2MDA1OS4uNGVmNDRhYWYyMyAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvY29tbWFuZHMvbWF0dmlldy5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRz L21hdHZpZXcuYwpAQCAtNDE2LDcgKzQxNiw3IEBAIHJlZnJlc2hfbWF0dmlld19kYXRhZmlsbChE ZXN0UmVjZWl2ZXIgKmRlc3QsIFF1ZXJ5ICpxdWVyeSwKIAlVcGRhdGVBY3RpdmVTbmFwc2hvdENv bW1hbmRJZCgpOwogCiAJLyogQ3JlYXRlIGEgUXVlcnlEZXNjLCByZWRpcmVjdGluZyBvdXRwdXQg dG8gb3VyIHR1cGxlIHJlY2VpdmVyICovCi0JcXVlcnlEZXNjID0gQ3JlYXRlUXVlcnlEZXNjKHBs YW4sIHF1ZXJ5U3RyaW5nLAorCXF1ZXJ5RGVzYyA9IENyZWF0ZVF1ZXJ5RGVzYyhwbGFuLCBOVUxM LCBxdWVyeVN0cmluZywKIAkJCQkJCQkJR2V0QWN0aXZlU25hcHNob3QoKSwgSW52YWxpZFNuYXBz aG90LAogCQkJCQkJCQlkZXN0LCBOVUxMLCBOVUxMLCAwKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvY29tbWFuZHMvcG9ydGFsY21kcy5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvcG9ydGFs Y21kcy5jCmluZGV4IDk5MDJjNWM1NjYuLjg1ZTczZGRkZWQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL2NvbW1hbmRzL3BvcnRhbGNtZHMuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9wb3J0 YWxjbWRzLmMKQEAgLTEwNyw2ICsxMDcsNyBAQCBQZXJmb3JtQ3Vyc29yT3BlbihQYXJzZVN0YXRl ICpwc3RhdGUsIERlY2xhcmVDdXJzb3JTdG10ICpjc3RtdCwgUGFyYW1MaXN0SW5mbyBwYQogCQkJ CQkgIHF1ZXJ5U3RyaW5nLAogCQkJCQkgIENNRFRBR19TRUxFQ1QsCS8qIGN1cnNvcidzIHF1ZXJ5 IGlzIGFsd2F5cyBhIFNFTEVDVCAqLwogCQkJCQkgIGxpc3RfbWFrZTEocGxhbiksCisJCQkJCSAg bGlzdF9tYWtlMShOVUxMKSwJLyogbm8gRXhlY0xvY2tSZWxzSW5mbyB0byBwYXNzICovCiAJCQkJ CSAgTlVMTCk7CiAKIAkvKi0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1h bmRzL3ByZXBhcmUuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3ByZXBhcmUuYwppbmRleCA4MDcz ODU0N2VkLi5iYmJmOGJiY2JkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9wcmVw YXJlLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvcHJlcGFyZS5jCkBAIC0xNTUsNiArMTU1 LDcgQEAgRXhlY3V0ZVF1ZXJ5KFBhcnNlU3RhdGUgKnBzdGF0ZSwKIAlQcmVwYXJlZFN0YXRlbWVu dCAqZW50cnk7CiAJQ2FjaGVkUGxhbiAqY3BsYW47CiAJTGlzdAkgICAqcGxhbl9saXN0OworCUxp c3QJICAgKnBsYW5fZXhlY2xvY2tyZWxzaW5mb19saXN0OwogCVBhcmFtTGlzdEluZm8gcGFyYW1M SSA9IE5VTEw7CiAJRVN0YXRlCSAgICplc3RhdGUgPSBOVUxMOwogCVBvcnRhbAkJcG9ydGFsOwpA QCAtMTk1LDYgKzE5Niw3IEBAIEV4ZWN1dGVRdWVyeShQYXJzZVN0YXRlICpwc3RhdGUsCiAJLyog UmVwbGFuIGlmIG5lZWRlZCwgYW5kIGluY3JlbWVudCBwbGFuIHJlZmNvdW50IGZvciBwb3J0YWwg Ki8KIAljcGxhbiA9IEdldENhY2hlZFBsYW4oZW50cnktPnBsYW5zb3VyY2UsIHBhcmFtTEksIE5V TEwsIE5VTEwpOwogCXBsYW5fbGlzdCA9IGNwbGFuLT5zdG10X2xpc3Q7CisJcGxhbl9leGVjbG9j a3JlbHNpbmZvX2xpc3QgPSBjcGxhbi0+ZXhlY2xvY2tyZWxzaW5mb19saXN0OwogCiAJLyoKIAkg KiBETyBOT1QgYWRkIGFueSBsb2dpYyB0aGF0IGNvdWxkIHBvc3NpYmx5IHRocm93IGFuIGVycm9y IGJldHdlZW4KQEAgLTIwNCw3ICsyMDYsNyBAQCBFeGVjdXRlUXVlcnkoUGFyc2VTdGF0ZSAqcHN0 YXRlLAogCQkJCQkgIE5VTEwsCiAJCQkJCSAgcXVlcnlfc3RyaW5nLAogCQkJCQkgIGVudHJ5LT5w bGFuc291cmNlLT5jb21tYW5kVGFnLAotCQkJCQkgIHBsYW5fbGlzdCwKKwkJCQkJICBwbGFuX2xp c3QsIHBsYW5fZXhlY2xvY2tyZWxzaW5mb19saXN0LAogCQkJCQkgIGNwbGFuKTsKIAogCS8qCkBA IC01NzYsNyArNTc4LDkgQEAgRXhwbGFpbkV4ZWN1dGVRdWVyeShFeGVjdXRlU3RtdCAqZXhlY3N0 bXQsIEludG9DbGF1c2UgKmludG8sIEV4cGxhaW5TdGF0ZSAqZXMsCiAJY29uc3QgY2hhciAqcXVl cnlfc3RyaW5nOwogCUNhY2hlZFBsYW4gKmNwbGFuOwogCUxpc3QJICAgKnBsYW5fbGlzdDsKLQlM aXN0Q2VsbCAgICpwOworCUxpc3QJICAgKnBsYW5fZXhlY2xvY2tyZWxzaW5mb19saXN0OworCUxp c3RDZWxsICAgKnAsCisJCQkgICAqcGU7CiAJUGFyYW1MaXN0SW5mbyBwYXJhbUxJID0gTlVMTDsK IAlFU3RhdGUJICAgKmVzdGF0ZSA9IE5VTEw7CiAJaW5zdHJfdGltZQlwbGFuc3RhcnQ7CkBAIC02 MzIsMTUgKzYzNiwxOCBAQCBFeHBsYWluRXhlY3V0ZVF1ZXJ5KEV4ZWN1dGVTdG10ICpleGVjc3Rt dCwgSW50b0NsYXVzZSAqaW50bywgRXhwbGFpblN0YXRlICplcywKIAl9CiAKIAlwbGFuX2xpc3Qg PSBjcGxhbi0+c3RtdF9saXN0OworCXBsYW5fZXhlY2xvY2tyZWxzaW5mb19saXN0ID0gY3BsYW4t PmV4ZWNsb2NrcmVsc2luZm9fbGlzdDsKIAogCS8qIEV4cGxhaW4gZWFjaCBxdWVyeSAqLwotCWZv cmVhY2gocCwgcGxhbl9saXN0KQorCWZvcmJvdGgocCwgcGxhbl9saXN0LCBwZSwgcGxhbl9leGVj bG9ja3JlbHNpbmZvX2xpc3QpCiAJewogCQlQbGFubmVkU3RtdCAqcHN0bXQgPSBsZmlyc3Rfbm9k ZShQbGFubmVkU3RtdCwgcCk7CisJCUV4ZWNMb2NrUmVsc0luZm8gKmV4ZWNsb2NrcmVsc2luZm8g PSBsZmlyc3Rfbm9kZShFeGVjTG9ja1JlbHNJbmZvLCBwZSk7CiAKIAkJaWYgKHBzdG10LT5jb21t YW5kVHlwZSAhPSBDTURfVVRJTElUWSkKLQkJCUV4cGxhaW5PbmVQbGFuKHBzdG10LCBpbnRvLCBl cywgcXVlcnlfc3RyaW5nLCBwYXJhbUxJLCBxdWVyeUVudiwKLQkJCQkJCSAgICZwbGFuZHVyYXRp b24sIChlcy0+YnVmZmVycyA/ICZidWZ1c2FnZSA6IE5VTEwpKTsKKwkJCUV4cGxhaW5PbmVQbGFu KHBzdG10LCBleGVjbG9ja3JlbHNpbmZvLCBpbnRvLCBlcywgcXVlcnlfc3RyaW5nLAorCQkJCQkJ ICAgcGFyYW1MSSwgcXVlcnlFbnYsICZwbGFuZHVyYXRpb24sCisJCQkJCQkgICAoZXMtPmJ1ZmZl cnMgPyAmYnVmdXNhZ2UgOiBOVUxMKSk7CiAJCWVsc2UKIAkJCUV4cGxhaW5PbmVVdGlsaXR5KHBz dG10LT51dGlsaXR5U3RtdCwgaW50bywgZXMsIHF1ZXJ5X3N0cmluZywKIAkJCQkJCQkgIHBhcmFt TEksIHF1ZXJ5RW52KTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL1JFQURNRSBi L3NyYy9iYWNrZW5kL2V4ZWN1dG9yL1JFQURNRQppbmRleCBiZjVlNzA4NjBkLi45NzIwZDBhYzJj IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9SRUFETUUKKysrIGIvc3JjL2JhY2tl bmQvZXhlY3V0b3IvUkVBRE1FCkBAIC02NSw2ICs2NSwyNyBAQCBmb3VuZCB0aGVyZS4gIFRoaXMg Y3VycmVudGx5IG9ubHkgb2NjdXJzIGZvciBBcHBlbmQgYW5kIE1lcmdlQXBwZW5kIG5vZGVzLiAg SW4KIHRoaXMgY2FzZSB0aGUgbm9uLXJlcXVpcmVkIHN1YnBsYW5zIGFyZSBpZ25vcmVkIGFuZCB0 aGUgZXhlY3V0b3Igc3RhdGUncwogc3Vibm9kZSBhcnJheSB3aWxsIGJlY29tZSBvdXQgb2Ygc2Vx dWVuY2UgdG8gdGhlIHBsYW4ncyBzdWJwbGFuIGxpc3QuCiAKK0FjdHVhbGx5LCB0aGUgc28tY2Fs bGVkIGV4ZWN1dGlvbiB0aW1lIHBydW5pbmcgbWF5IGFsc28gb2NjdXIgZXZlbiBiZWZvcmUgdGhl CitleGVjdXRpb24gaGFzIHN0YXJ0ZWQuICBPbmUgY2FzZSB3aGVyZSB0aGF0IG9jY3VycyBpcyB3 aGVuIGEgY2FjaGVkIGdlbmVyaWMKK3BsYW4gaXMgYmVpbmcgdmFsaWRhdGVkIGZvciBleGVjdXRp b24gYnkgcGxhbmNhY2hlLmM6IEdldENhY2hlZFBsYW4oKSwgd2hpY2gKK3Byb2NlZWRzIGJ5IGxv Y2tpbmcgYWxsIHRoZSByZWxhdGlvbnMgdGhhdCB3aWxsIGJlIHNjYW5uZWQgYnkgdGhhdCBwbGFu LiAgSWYKK3RoZSBnZW5lcmljIHBsYW4gaGFzIG5vZGVzIHRoYXQgY29udGFpbiBzby1jYWxsZWQg aW5pdGlhbCBwcnVuaW5nIHN0ZXBzIChhCitzdWJzZXQgb2YgZXhlY3V0aW9uIHBydW5pbmcgc3Rl cHMgdGhhdCBkbyBub3QgZGVwZW5kIG9uIGZ1bGwtZmxlZGdlZCBleGVjdXRpb24KK2hhdmluZyBz dGFydGVkKSwgdGhleSBhcmUgcGVyZm9ybWVkIGF0IHRoaXMgcG9pbnQgdG8gZmlndXJlIG91dCB0 aGUgbWluaW1hbAorc2V0IG9mIGNoaWxkIHN1YnBsYW5zIHRoYXQgc2F0aXNmeSB0aG9zZSBwcnVu aW5nIGluc3RydWN0aW9ucyBhbmQgdGhlIHJlc3VsdAorb2YgcGVyZm9ybWluZyB0aGF0IHBydW5p bmcgaXMgc2F2ZWQgaW4gYSBkYXRhIHN0cnVjdHVyZSB0aGF0IGdldHMgcGFzc2VkIHRvCit0aGUg ZXhlY3V0b3IgYWxvbmdzaWRlIHRoZSBwbGFuIHRyZWUuICBSZWxhdGlvbnMgc2Nhbm5lZCBieSBv bmx5IHRob3NlCitzdXJ2aXZpbmcgc3VicGxhbnMgYXJlIHRoZW4gbG9ja2VkIHdoaWxlIHRob3Nl IHNjYW5uZWQgYnkgdGhlIHBydW5lZCBzdWJwbGFucworYXJlIG5vdCwgZXZlbiB0aG91Z2ggdGhl IHBydW5lZCBzdWJwbGFucyB0aGVtc2VsdmVzIGFyZSBub3QgcmVtb3ZlZCBmcm9tIHRoZQorcGxh biB0cmVlLiBTbywgaXQgaXMgaW1wZXJhdGl2ZSB0aGF0IHRoZSBleGVjdXRvciBhbmQgYW55IHRo aXJkIHBhcnR5IGNvZGUKK2ludm9rZWQgYnkgaXQgdGhhdCBnZXRzIHBhc3NlZCB0aGUgcGxhbiB0 cmVlIGxvb2sgYXQgdGhlIGluaXRpYWwgcHJ1bmluZyByZXN1bHQKK21hZGUgYXZhaWxhYmxlIHZp YSB0aGUgYWZvcmVtZW50aW9uZWQgZGF0YSBzdHJ1Y3R1cmUgdG8gZGV0ZXJtaW5lIHdoZXRoZXIg b3IKK25vdCBhIHBhcnRpY3VsYXIgc3VicGxhbiBpcyB2YWxpZC4gIChUaGUgZGF0YSBzdHJ1Y3R1 cmUgYmFzaWNhbGx5IGNvbnNpc3RzIG9mCithbiBhcnJheSBvZiBQbGFuSW5pdFBydW5pbmdPdXRw dXQgbm9kZXMgY29udGFpbmluZyBvbmUgZWxlbWVudCBmb3IgZWFjaCBub2RlCitvZiB0aGUgcGxh biB0cmVlIGluZGV4YWJsZSB1c2luZyBwbGFuX25vZGVfaWQgb2YgdGhlIGluZGl2aWR1YWwgcGxh biBub2RlcywKK3doZXJlIGVhY2ggbm9kZSBjb250YWlucyBhIGJpdG1hcHNldCBvZiBpbmRleGVz IG9mIHVucHJ1bmVkIGNoaWxkIHN1YnBsYW5zIG9mCithIGdpdmVuIG5vZGUuKQorCiBFYWNoIFBs YW4gbm9kZSBtYXkgaGF2ZSBleHByZXNzaW9uIHRyZWVzIGFzc29jaWF0ZWQgd2l0aCBpdCwgdG8g cmVwcmVzZW50CiBpdHMgdGFyZ2V0IGxpc3QsIHF1YWxpZmljYXRpb24gY29uZGl0aW9ucywgZXRj LiAgVGhlc2UgdHJlZXMgYXJlIGFsc28KIHJlYWQtb25seSB0byB0aGUgZXhlY3V0b3IsIGJ1dCB0 aGUgZXhlY3V0b3Igc3RhdGUgZm9yIGV4cHJlc3Npb24gZXZhbHVhdGlvbgpAQCAtMjQ3LDYgKzI2 OCw5IEBAIFF1ZXJ5IFByb2Nlc3NpbmcgQ29udHJvbCBGbG93CiAKIFRoaXMgaXMgYSBza2V0Y2gg b2YgY29udHJvbCBmbG93IGZvciBmdWxsIHF1ZXJ5IHByb2Nlc3Npbmc6CiAKKyAgWyBFeGVjdXRv ckdldExvY2tSZWxzIF0gLS0tIGFuIG9wdGlvbmFsIHN0ZXAgdG8gd2FsayBvdmVyIHRoZSBwbGFu IHRyZWUKKwkJdG8gcHJvZHVjZSBhbiBFeGVjTG9ja1JlbHNJbmZvIHRvIGJlIHBhc3NlZCB0byBD cmVhdGVRdWVyeURlc2MKKwogCUNyZWF0ZVF1ZXJ5RGVzYwogCiAJRXhlY3V0b3JTdGFydApkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY01haW4uYyBiL3NyYy9iYWNrZW5kL2V4 ZWN1dG9yL2V4ZWNNYWluLmMKaW5kZXggNDczZDJlMDBhMi4uMWRkZDFkZmI4MyAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY01haW4uYworKysgYi9zcmMvYmFja2VuZC9leGVj dXRvci9leGVjTWFpbi5jCkBAIC00OSwxMSArNDksMTUgQEAKICNpbmNsdWRlICJjb21tYW5kcy9t YXR2aWV3LmgiCiAjaW5jbHVkZSAiY29tbWFuZHMvdHJpZ2dlci5oIgogI2luY2x1ZGUgImV4ZWN1 dG9yL2V4ZWNkZWJ1Zy5oIgorI2luY2x1ZGUgImV4ZWN1dG9yL25vZGVBcHBlbmQuaCIKKyNpbmNs dWRlICJleGVjdXRvci9ub2RlTWVyZ2VBcHBlbmQuaCIKKyNpbmNsdWRlICJleGVjdXRvci9ub2Rl TW9kaWZ5VGFibGUuaCIKICNpbmNsdWRlICJleGVjdXRvci9ub2RlU3VicGxhbi5oIgogI2luY2x1 ZGUgImZvcmVpZ24vZmR3YXBpLmgiCiAjaW5jbHVkZSAiaml0L2ppdC5oIgogI2luY2x1ZGUgIm1i L3BnX3djaGFyLmgiCiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCisjaW5jbHVkZSAibm9kZXMvbm9k ZUZ1bmNzLmgiCiAjaW5jbHVkZSAicGFyc2VyL3BhcnNldHJlZS5oIgogI2luY2x1ZGUgInN0b3Jh Z2UvYnVmbWdyLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9sbWdyLmgiCkBAIC0xMDEsOSArMTA1LDIw NSBAQCBzdGF0aWMgY2hhciAqRXhlY0J1aWxkU2xvdFZhbHVlRGVzY3JpcHRpb24oT2lkIHJlbG9p ZCwKIAkJCQkJCQkJCQkgICBCaXRtYXBzZXQgKm1vZGlmaWVkQ29scywKIAkJCQkJCQkJCQkgICBp bnQgbWF4ZmllbGRsZW4pOwogc3RhdGljIHZvaWQgRXZhbFBsYW5RdWFsU3RhcnQoRVBRU3RhdGUg KmVwcXN0YXRlLCBQbGFuICpwbGFuVHJlZSk7CitzdGF0aWMgYm9vbCBFeGVjR2V0U2NhbkxvY2tS ZWxzKFNjYW4gKnNjYW4sIEV4ZWNHZXRMb2NrUmVsc0NvbnRleHQgKmNvbnRleHQpOwogCiAvKiBl bmQgb2YgbG9jYWwgZGVjbHMgKi8KIAorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoJCUV4ZWN1dG9yR2V0TG9ja1Jl bHMKKyAqCisgKgkJRmlndXJlIG91dCB0aGUgbWluaW1hbCBzZXQgb2YgcmVsYXRpb25zIHRvIGxv Y2sgdG8gYmUgYWJsZSB0byBzYWZlbHkKKyAqCQlleGVjdXRlIGEgZ2l2ZW4gcGxhbgorICoKKyAq IFRoaXMgaWdub3JlcyB0aGUgcmVsYXRpb25zIHNjYW5uZWQgYnkgY2hpbGQgc3VicGxhbnMgdGhh dCBhcmUgcHJ1bmVkIGF3YXkKKyAqIGFmdGVyIHBlcmZvcm1pbmcgaW5pdGlhbCBwcnVuaW5nIHN0 ZXBzIHByZXNlbnQgaW4gdGhlIHBsYW4gdXNpbmcgdGhlCisgKiBwcm92aWRlZCBzZXQgb2YgRVhU RVJOIHBhcmFtZXRlcnMuCisgKgorICogQWxvbmcgd2l0aCB0aGUgc2V0IG9mIFJUIGluZGV4ZXMg b2YgcmVsYXRpb25zIHRoYXQgbXVzdCBiZSBsb2NrZWQsIHRoZQorICogcmV0dXJuZWQgc3RydWN0 IGFsc28gY29udGFpbnMgYW4gYXJyYXkgb2YgUGxhbkluaXRQcnVuaW5nT3V0cHV0IG5vZGVzIGVh Y2gKKyAqIG9mIHdoaWNoIGNvbnRhaW5zIHRoZSByZXN1bHQgb2YgaW5pdGlhbCBwcnVuaW5nIGZv ciBhIGdpdmVuIHBsYW4gbm9kZSwgd2hpY2gKKyAqIGlzIGJhc2ljYWxseSBhIGJpdG1hcHNldCBv ZiB0aGUgaW5kZXhlcyBvZiBzdXJ2aXZpbmcgY2hpbGQgc3VicGxhbnMuICBFYWNoCisgKiBwbGFu IG5vZGUgaW4gdGhlIHRyZWUgdGhhdCB1bmRlcmdvZXMgcHJ1bmluZyB3aWxsIGhhdmUgYW4gZWxl bWVudCBpbiB0aGUKKyAqIGFycmF5LgorICoKKyAqIE5vdGUgdGhhdCB3aGlsZSByZWxhdGlvbnMg c2Nhbm5lZCBieSB0aGUgc3VicGxhbnMgdGhhdCBhcmUgcHJ1bmVkIHdpbGwgbm90CisgKiBiZSBs b2NrZWQsIHRoZSBzdWJwbGFucyB0aGVtc2VsdmVzIGFyZSBsZWZ0IGFzLWlzIGluIHRoZSBwbGFu IHRyZWUsIGFzc3VtaW5nCisgKiBhbnl0aGluZyB0aGF0IHJlYWRzIHRoZSBwbGFuIHRyZWUgZHVy aW5nIGV4ZWN1dGlvbiBrbm93cyB0byBpZ25vcmUgdGhlbSBieQorICogbG9va2luZyBhdCB0aGUg UGxhbkluaXRQcnVuaW5nT3V0cHV0J3MgbGlzdCBvZiB2YWxpZCBzdWJwbGFucy4KKyAqCisgKiBQ YXJ0aXRpb25lZCB0YWJsZXMgbWVudGlvbmVkIGluIFBhcnRpdGlvbmVkUmVsUHJ1bmVJbmZvIG5v ZGVzIHRoYXQgZHJpdmUKKyAqIHRoZSBwcnVuaW5nIHdpbGwgYmUgbG9ja2VkIGJlZm9yZSBkb2lu ZyB0aGUgcHJ1bmluZyBhbmQgYWxzbyBhZGRlZCB0byB0aGUKKyAqIHRoZSByZXR1cm5lZCBzZXQu CisgKi8KK0V4ZWNMb2NrUmVsc0luZm8gKgorRXhlY3V0b3JHZXRMb2NrUmVscyhQbGFubmVkU3Rt dCAqcGxhbm5lZHN0bXQsIFBhcmFtTGlzdEluZm8gcGFyYW1zKQoreworCWludAkJbnVtUGxhbk5v ZGVzID0gcGxhbm5lZHN0bXQtPm51bVBsYW5Ob2RlczsKKwlFeGVjR2V0TG9ja1JlbHNDb250ZXh0 IGNvbnRleHQ7CisJRXhlY0xvY2tSZWxzSW5mbyAqcmVzdWx0OworCUxpc3RDZWxsICpsYzsKKwor CS8qIE9ubHkgZ2V0IGhlcmUgaWYgdGhlcmUgaXMgYW55IHBydW5pbmcgdG8gZG8uICovCisJQXNz ZXJ0KHBsYW5uZWRzdG10LT5jb250YWluc0luaXRpYWxQcnVuaW5nKTsKKworCWNvbnRleHQuc3Rt dCA9IHBsYW5uZWRzdG10OworCWNvbnRleHQucGFyYW1zID0gcGFyYW1zOworCisJLyoKKwkgKiBH byB3YWxrIGFsbCB0aGUgcGxhbiB0cmVlKHMpIHByZXNlbnQgaW4gdGhlIFBsYW5uZWRTdG10LCBm aWxsaW5nCisJICogY29udGV4dC5sb2NrcmVscyB3aXRoIG9ubHkgdGhlIHJlbGF0aW9ucyBmcm9t IHBsYW4gbm9kZXMgdGhhdAorCSAqIHN1cnZpdmUgaW5pdGlhbCBwcnVuaW5nIGFuZCBhbHNvIHRo ZSB0YWJsZXMgbWVudGlvbmVkIGluCisJICogcGFydGl0aW9uZWRfcmVscyBzZXRzIGZvdW5kIGlu IHRoZSBwbGFuLgorCSAqLworCWNvbnRleHQubG9ja3JlbHMgPSBOVUxMOworCWNvbnRleHQuaW5p dFBydW5pbmdPdXRwdXRzID0gTklMOworCWNvbnRleHQuaXBvSW5kZXhlcyA9IHBhbGxvYzAoc2l6 ZW9mKGludCkgKiBudW1QbGFuTm9kZXMpOworCisJLyogQWxsIHRoZSBzdWJwbGFucy4gKi8KKwlm b3JlYWNoKGxjLCBwbGFubmVkc3RtdC0+c3VicGxhbnMpCisJeworCQlQbGFuICpzdWJwbGFuID0g bGZpcnN0KGxjKTsKKworCQkodm9pZCkgRXhlY0dldExvY2tSZWxzKHN1YnBsYW4sICZjb250ZXh0 KTsKKwl9CisKKwkvKiBBbmQgdGhlIG1haW4gdHJlZS4gKi8KKwkodm9pZCkgRXhlY0dldExvY2tS ZWxzKHBsYW5uZWRzdG10LT5wbGFuVHJlZSwgJmNvbnRleHQpOworCisJLyoKKwkgKiBBbHNvIGJl IHN1cmUgdG8gbG9jayBwYXJ0aXRpb25lZCByZWxhdGlvbnMgZnJvbSBhbnkgW01lcmdlXUFwcGVu ZCBub2RlcworCSAqIHRoYXQgd2VyZSBvcmlnaW5hbGx5IHByZXNlbnQgYnV0IHdlcmUgdWx0aW1h dGVseSBsZWZ0IG91dCBmcm9tIHRoZSBwbGFuCisJICogZHVlIHRvIGJlaW5nIGRlZW1lZCBuby1v cCBub2Rlcy4KKwkgKi8KKwljb250ZXh0LmxvY2tyZWxzID0gYm1zX2FkZF9tZW1iZXJzKGNvbnRl eHQubG9ja3JlbHMsCisJCQkJCQkJCQkgICBwbGFubmVkc3RtdC0+ZWxpZGVkQXBwZW5kUGFydGVk UmVscyk7CisKKwlyZXN1bHQgPSBtYWtlTm9kZShFeGVjTG9ja1JlbHNJbmZvKTsKKwlyZXN1bHQt PmxvY2tyZWxzID0gY29udGV4dC5sb2NrcmVsczsKKwlyZXN1bHQtPm51bVBsYW5Ob2RlcyA9IG51 bVBsYW5Ob2RlczsKKwlyZXN1bHQtPmluaXRQcnVuaW5nT3V0cHV0cyA9IGNvbnRleHQuaW5pdFBy dW5pbmdPdXRwdXRzOworCXJlc3VsdC0+aXBvSW5kZXhlcyA9IGNvbnRleHQuaXBvSW5kZXhlczsK KworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogRXhlY0dldExv Y2tSZWxzCisgKgkJQWRkcyBhbGwgdGhlIHJlbGF0aW9ucyB0aGF0IHdpbGwgYmUgc2Nhbm5lZCBi eSAnbm9kZScgYW5kIGl0cyBjaGlsZAorICoJCXBsYW5zIHRvIGNvbnRleHQtPmxvY2tyZWxzIGFm dGVyIHRha2luZyBpbnRvIHRoZSBhY2NvdW50IHRoZSBlZmZlY3QKKyAqCQlvZiBwZXJmb3JtaW5n IGluaXRpYWwgcHJ1bmluZyBpZiBhbnkKKyAqCisgKiBjb250ZXh0LT5zdG10IGdpdmVzIHRoZSBQ bGFubmVkU3RtdCBiZWluZyBpbnNwZWN0ZWQgdG8gYWNjZXNzIHRoZSBwbGFuJ3MKKyAqIHJhbmdl IHRhYmxlIGlmIG5lZWRlZCBhbmQgY29udGV4dC0+cGFyYW1zIHRoZSBzZXQgb2YgRVhURVJOIHBh cmFtZXRlcnMKKyAqIGF2YWlsYWJsZSB0byBldmFsdWF0ZSBwcnVuaW5nIHBhcmFtZXRlcnMuCisg KgorICogSWYgaW5pdGlhbCBwcnVuaW5nIGlzIGRvbmUsIGEgUGxhbkluaXRQcnVuaW5nT3V0cHV0 IG5vZGUgY29udGFpbmluZyB0aGUKKyAqIHJlc3VsdCBvZiBwcnVuaW5nIHdpbGwgYmUgc3RvcmVk IGluIGNvbnRleHQtPmluaXRQcnVuaW5nT3V0cHV0cyB0aGF0IHdpbGwKKyAqIGJlIG1hZGUgYXZh aWxhYmxlIHRvIHRoZSBleGVjdXRvciB0byByZXVzZS4KKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICov Citib29sCitFeGVjR2V0TG9ja1JlbHMoUGxhbiAqbm9kZSwgRXhlY0dldExvY2tSZWxzQ29udGV4 dCAqY29udGV4dCkKK3sKKwkvKiBEbyBub3RoaW5nIHdoZW4gd2UgZ2V0IHRvIHRoZSBlbmQgb2Yg YSBsZWFmIG9uIHRyZWUuICovCisJaWYgKG5vZGUgPT0gTlVMTCkKKwkJcmV0dXJuIHRydWU7CisK KwkvKiBNYWtlIHN1cmUgdGhlcmUncyBlbm91Z2ggc3RhY2sgYXZhaWxhYmxlLiAqLworCWNoZWNr X3N0YWNrX2RlcHRoKCk7CisKKwlzd2l0Y2ggKG5vZGVUYWcobm9kZSkpCisJeworCQkvKiBDdXJy ZW50bHksIG9ubHkgdGhlc2UgdHdvIG5vZGVzIGhhdmUgcHJ1bmFibGUgY2hpbGQgc3VicGxhbnMu ICovCisJCWNhc2UgVF9BcHBlbmQ6CisJCQlpZiAoRXhlY0dldEFwcGVuZExvY2tSZWxzKChBcHBl bmQgKikgbm9kZSwgY29udGV4dCkpCisJCQkJcmV0dXJuIHRydWU7CisJCQlicmVhazsKKwkJY2Fz ZSBUX01lcmdlQXBwZW5kOgorCQkJaWYgKEV4ZWNHZXRNZXJnZUFwcGVuZExvY2tSZWxzKChNZXJn ZUFwcGVuZCAqKSBub2RlLAorCQkJCQkJCQkJCQkJY29udGV4dCkpCisJCQkJcmV0dXJuIHRydWU7 CisJCQlicmVhazsKKworCQkvKgorCQkgKiBBbmQgdGhlc2UgbWFuaXB1bGF0ZSByZWxhdGlvbnMg dGhhdCBtdXN0IGJlIGFkZGVkIGNvbnRleHQtPmxvY2tyZWxzLgorCQkgKi8KKwkJY2FzZSBUX1Nl cVNjYW46CisJCWNhc2UgVF9TYW1wbGVTY2FuOgorCQljYXNlIFRfSW5kZXhTY2FuOgorCQljYXNl IFRfSW5kZXhPbmx5U2NhbjoKKwkJY2FzZSBUX0JpdG1hcEluZGV4U2NhbjoKKwkJY2FzZSBUX0Jp dG1hcEhlYXBTY2FuOgorCQljYXNlIFRfVGlkU2NhbjoKKwkJY2FzZSBUX1RpZFJhbmdlU2NhbjoK KwkJY2FzZSBUX0ZvcmVpZ25TY2FuOgorCQljYXNlIFRfU3VicXVlcnlTY2FuOgorCQljYXNlIFRf Q3VzdG9tU2NhbjoKKwkJCWlmIChFeGVjR2V0U2NhbkxvY2tSZWxzKChTY2FuICopIG5vZGUsIGNv bnRleHQpKQorCQkJCXJldHVybiB0cnVlOworCQkJYnJlYWs7CisJCWNhc2UgVF9Nb2RpZnlUYWJs ZToKKwkJCWlmIChFeGVjR2V0TW9kaWZ5VGFibGVMb2NrUmVscygoTW9kaWZ5VGFibGUgKikgbm9k ZSwgY29udGV4dCkpCisJCQkJcmV0dXJuIHRydWU7CisJCQkvKiBwbGFuX3RyZWVfd2Fsa2VyKCkg d2lsbCB2aXNpdCB0aGUgc3VicGxhbiAob3V0ZXJOb2RlKSAqLworCQkJYnJlYWs7CisKKwkJZGVm YXVsdDoKKwkJCWJyZWFrOworCX0KKworCS8qIFJlY3Vyc2UgdG8gc3Vibm9kZXMuICovCisJcmV0 dXJuIHBsYW5fdHJlZV93YWxrZXIobm9kZSwgRXhlY0dldExvY2tSZWxzLCAodm9pZCAqKSBjb250 ZXh0KTsKK30KKworLyoKKyAqIEV4ZWNHZXRTY2FuTG9ja1JlbHMKKyAqIAkJRG8gRXhlY0dldExv Y2tSZWxzKCkncyB3b3JrIGZvciBhIGxlYWYgU2NhbiBub2RlCisgKi8KK3N0YXRpYyBib29sCitF eGVjR2V0U2NhbkxvY2tSZWxzKFNjYW4gKnNjYW4sIEV4ZWNHZXRMb2NrUmVsc0NvbnRleHQgKmNv bnRleHQpCit7CisJc3dpdGNoIChub2RlVGFnKHNjYW4pKQorCXsKKwkJY2FzZSBUX0ZvcmVpZ25T Y2FuOgorCQkJeworCQkJCUZvcmVpZ25TY2FuICpmc2NhbiA9IChGb3JlaWduU2NhbiAqKSBzY2Fu OworCisJCQkJY29udGV4dC0+bG9ja3JlbHMgPSBibXNfYWRkX21lbWJlcnMoY29udGV4dC0+bG9j a3JlbHMsCisJCQkJCQkJCQkJCQkJZnNjYW4tPmZzX3JlbGlkcyk7CisJCQl9CisJCQlicmVhazsK KworCQljYXNlIFRfU3VicXVlcnlTY2FuOgorCQkJeworCQkJCVN1YnF1ZXJ5U2NhbiAqc3NjYW4g PSAoU3VicXVlcnlTY2FuICopIHNjYW47CisKKwkJCQkodm9pZCkgRXhlY0dldExvY2tSZWxzKChQ bGFuICopIHNzY2FuLT5zdWJwbGFuLCBjb250ZXh0KTsKKwkJCX0KKwkJCWJyZWFrOworCisJCWNh c2UgVF9DdXN0b21TY2FuOgorCQkJeworCQkJCUN1c3RvbVNjYW4gKmNzY2FuID0gKEN1c3RvbVNj YW4gKikgc2NhbjsKKwkJCQlMaXN0Q2VsbCAqbGM7CisKKwkJCQljb250ZXh0LT5sb2NrcmVscyA9 IGJtc19hZGRfbWVtYmVycyhjb250ZXh0LT5sb2NrcmVscywKKwkJCQkJCQkJCQkJCQljc2Nhbi0+ Y3VzdG9tX3JlbGlkcyk7CisJCQkJZm9yZWFjaChsYywgY3NjYW4tPmN1c3RvbV9wbGFucykKKwkJ CQl7CisJCQkJCSh2b2lkKSBFeGVjR2V0TG9ja1JlbHMoKFBsYW4gKikgbGZpcnN0KGxjKSwgY29u dGV4dCk7CisJCQkJfQorCQkJfQorCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCWNvbnRleHQt PmxvY2tyZWxzID0gYm1zX2FkZF9tZW1iZXIoY29udGV4dC0+bG9ja3JlbHMsCisJCQkJCQkJCQkJ CSAgIHNjYW4tPnNjYW5yZWxpZCk7CisJCQlicmVhazsKKwl9CisKKwlyZXR1cm4gdHJ1ZTsKK30K IAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQogICoJCUV4ZWN1dG9yU3RhcnQKQEAgLTgwNSw2ICsxMDA1LDcgQEAgSW5p dFBsYW4oUXVlcnlEZXNjICpxdWVyeURlc2MsIGludCBlZmxhZ3MpCiB7CiAJQ21kVHlwZQkJb3Bl cmF0aW9uID0gcXVlcnlEZXNjLT5vcGVyYXRpb247CiAJUGxhbm5lZFN0bXQgKnBsYW5uZWRzdG10 ID0gcXVlcnlEZXNjLT5wbGFubmVkc3RtdDsKKwlFeGVjTG9ja1JlbHNJbmZvICpleGVjbG9ja3Jl bHNpbmZvID0gcXVlcnlEZXNjLT5leGVjbG9ja3JlbHNpbmZvOwogCVBsYW4JICAgKnBsYW4gPSBw bGFubmVkc3RtdC0+cGxhblRyZWU7CiAJTGlzdAkgICAqcmFuZ2VUYWJsZSA9IHBsYW5uZWRzdG10 LT5ydGFibGU7CiAJRVN0YXRlCSAgICplc3RhdGUgPSBxdWVyeURlc2MtPmVzdGF0ZTsKQEAgLTgy NCw2ICsxMDI1LDcgQEAgSW5pdFBsYW4oUXVlcnlEZXNjICpxdWVyeURlc2MsIGludCBlZmxhZ3Mp CiAJRXhlY0luaXRSYW5nZVRhYmxlKGVzdGF0ZSwgcmFuZ2VUYWJsZSk7CiAKIAllc3RhdGUtPmVz X3BsYW5uZWRzdG10ID0gcGxhbm5lZHN0bXQ7CisJZXN0YXRlLT5lc19leGVjbG9ja3JlbHNpbmZv ID0gZXhlY2xvY2tyZWxzaW5mbzsKIAogCS8qCiAJICogTmV4dCwgYnVpbGQgdGhlIEV4ZWNSb3dN YXJrIGFycmF5IGZyb20gdGhlIFBsYW5Sb3dNYXJrKHMpLCBpZiBhbnkuCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9leGVjdXRvci9leGVjUGFyYWxsZWwuYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9y L2V4ZWNQYXJhbGxlbC5jCmluZGV4IDlhMGQ1ZDU5ZWYuLmZiNmRiZDI5OGEgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNQYXJhbGxlbC5jCisrKyBiL3NyYy9iYWNrZW5kL2V4 ZWN1dG9yL2V4ZWNQYXJhbGxlbC5jCkBAIC02Niw2ICs2Niw3IEBACiAjZGVmaW5lIFBBUkFMTEVM X0tFWV9RVUVSWV9URVhUCQlVSU5UNjRDT05TVCgweEUwMDAwMDAwMDAwMDAwMDgpCiAjZGVmaW5l IFBBUkFMTEVMX0tFWV9KSVRfSU5TVFJVTUVOVEFUSU9OIFVJTlQ2NENPTlNUKDB4RTAwMDAwMDAw MDAwMDAwOSkKICNkZWZpbmUgUEFSQUxMRUxfS0VZX1dBTF9VU0FHRQkJCVVJTlQ2NENPTlNUKDB4 RTAwMDAwMDAwMDAwMDAwQSkKKyNkZWZpbmUgUEFSQUxMRUxfS0VZX0VYRUNMT0NLUkVMU0lORk8J VUlOVDY0Q09OU1QoMHhFMDAwMDAwMDAwMDAwMDBCKQogCiAjZGVmaW5lIFBBUkFMTEVMX1RVUExF X1FVRVVFX1NJWkUJCTY1NTM2CiAKQEAgLTE4Miw2ICsxODMsNyBAQCBFeGVjU2VyaWFsaXplUGxh bihQbGFuICpwbGFuLCBFU3RhdGUgKmVzdGF0ZSkKIAlwc3RtdC0+dHJhbnNpZW50UGxhbiA9IGZh bHNlOwogCXBzdG10LT5kZXBlbmRzT25Sb2xlID0gZmFsc2U7CiAJcHN0bXQtPnBhcmFsbGVsTW9k ZU5lZWRlZCA9IGZhbHNlOworCXBzdG10LT5jb250YWluc0luaXRpYWxQcnVuaW5nID0gZmFsc2U7 CiAJcHN0bXQtPnBsYW5UcmVlID0gcGxhbjsKIAlwc3RtdC0+cnRhYmxlID0gZXN0YXRlLT5lc19y YW5nZV90YWJsZTsKIAlwc3RtdC0+cmVzdWx0UmVsYXRpb25zID0gTklMOwpAQCAtNTk2LDEyICs1 OTgsMTUgQEAgRXhlY0luaXRQYXJhbGxlbFBsYW4oUGxhblN0YXRlICpwbGFuc3RhdGUsIEVTdGF0 ZSAqZXN0YXRlLAogCUZpeGVkUGFyYWxsZWxFeGVjdXRvclN0YXRlICpmcGVzOwogCWNoYXIJICAg KnBzdG10X2RhdGE7CiAJY2hhcgkgICAqcHN0bXRfc3BhY2U7CisJY2hhcgkgICAqZXhlY2xvY2ty ZWxzaW5mb19kYXRhOworCWNoYXIJICAgKmV4ZWNsb2NrcmVsc2luZm9fc3BhY2U7CiAJY2hhcgkg ICAqcGFyYW1saXN0aW5mb19zcGFjZTsKIAlCdWZmZXJVc2FnZSAqYnVmdXNhZ2Vfc3BhY2U7CiAJ V2FsVXNhZ2UgICAqd2FsdXNhZ2Vfc3BhY2U7CiAJU2hhcmVkRXhlY3V0b3JJbnN0cnVtZW50YXRp b24gKmluc3RydW1lbnRhdGlvbiA9IE5VTEw7CiAJU2hhcmVkSml0SW5zdHJ1bWVudGF0aW9uICpq aXRfaW5zdHJ1bWVudGF0aW9uID0gTlVMTDsKIAlpbnQJCQlwc3RtdF9sZW47CisJaW50CQkJZXhl Y2xvY2tyZWxzaW5mb19sZW47CiAJaW50CQkJcGFyYW1saXN0aW5mb19sZW47CiAJaW50CQkJaW5z dHJ1bWVudGF0aW9uX2xlbiA9IDA7CiAJaW50CQkJaml0X2luc3RydW1lbnRhdGlvbl9sZW4gPSAw OwpAQCAtNjMwLDYgKzYzNSw3IEBAIEV4ZWNJbml0UGFyYWxsZWxQbGFuKFBsYW5TdGF0ZSAqcGxh bnN0YXRlLCBFU3RhdGUgKmVzdGF0ZSwKIAogCS8qIEZpeCB1cCBhbmQgc2VyaWFsaXplIHBsYW4g dG8gYmUgc2VudCB0byB3b3JrZXJzLiAqLwogCXBzdG10X2RhdGEgPSBFeGVjU2VyaWFsaXplUGxh bihwbGFuc3RhdGUtPnBsYW4sIGVzdGF0ZSk7CisJZXhlY2xvY2tyZWxzaW5mb19kYXRhID0gbm9k ZVRvU3RyaW5nKGVzdGF0ZS0+ZXNfZXhlY2xvY2tyZWxzaW5mbyk7CiAKIAkvKiBDcmVhdGUgYSBw YXJhbGxlbCBjb250ZXh0LiAqLwogCXBjeHQgPSBDcmVhdGVQYXJhbGxlbENvbnRleHQoInBvc3Rn cmVzIiwgIlBhcmFsbGVsUXVlcnlNYWluIiwgbndvcmtlcnMpOwpAQCAtNjU2LDYgKzY2MiwxMSBA QCBFeGVjSW5pdFBhcmFsbGVsUGxhbihQbGFuU3RhdGUgKnBsYW5zdGF0ZSwgRVN0YXRlICplc3Rh dGUsCiAJc2htX3RvY19lc3RpbWF0ZV9jaHVuaygmcGN4dC0+ZXN0aW1hdG9yLCBwc3RtdF9sZW4p OwogCXNobV90b2NfZXN0aW1hdGVfa2V5cygmcGN4dC0+ZXN0aW1hdG9yLCAxKTsKIAorCS8qIEVz dGltYXRlIHNwYWNlIGZvciBzZXJpYWxpemVkIEV4ZWNMb2NrUmVsc0luZm8uICovCisJZXhlY2xv Y2tyZWxzaW5mb19sZW4gPSBzdHJsZW4oZXhlY2xvY2tyZWxzaW5mb19kYXRhKSArIDE7CisJc2ht X3RvY19lc3RpbWF0ZV9jaHVuaygmcGN4dC0+ZXN0aW1hdG9yLCBleGVjbG9ja3JlbHNpbmZvX2xl bik7CisJc2htX3RvY19lc3RpbWF0ZV9rZXlzKCZwY3h0LT5lc3RpbWF0b3IsIDEpOworCiAJLyog RXN0aW1hdGUgc3BhY2UgZm9yIHNlcmlhbGl6ZWQgUGFyYW1MaXN0SW5mby4gKi8KIAlwYXJhbWxp c3RpbmZvX2xlbiA9IEVzdGltYXRlUGFyYW1MaXN0U3BhY2UoZXN0YXRlLT5lc19wYXJhbV9saXN0 X2luZm8pOwogCXNobV90b2NfZXN0aW1hdGVfY2h1bmsoJnBjeHQtPmVzdGltYXRvciwgcGFyYW1s aXN0aW5mb19sZW4pOwpAQCAtNzUwLDYgKzc2MSwxMiBAQCBFeGVjSW5pdFBhcmFsbGVsUGxhbihQ bGFuU3RhdGUgKnBsYW5zdGF0ZSwgRVN0YXRlICplc3RhdGUsCiAJbWVtY3B5KHBzdG10X3NwYWNl LCBwc3RtdF9kYXRhLCBwc3RtdF9sZW4pOwogCXNobV90b2NfaW5zZXJ0KHBjeHQtPnRvYywgUEFS QUxMRUxfS0VZX1BMQU5ORURTVE1ULCBwc3RtdF9zcGFjZSk7CiAKKwkvKiBTdG9yZSBzZXJpYWxp emVkIEV4ZWNMb2NrUmVsc0luZm8gKi8KKwlleGVjbG9ja3JlbHNpbmZvX3NwYWNlID0gc2htX3Rv Y19hbGxvY2F0ZShwY3h0LT50b2MsIGV4ZWNsb2NrcmVsc2luZm9fbGVuKTsKKwltZW1jcHkoZXhl Y2xvY2tyZWxzaW5mb19zcGFjZSwgZXhlY2xvY2tyZWxzaW5mb19kYXRhLCBleGVjbG9ja3JlbHNp bmZvX2xlbik7CisJc2htX3RvY19pbnNlcnQocGN4dC0+dG9jLCBQQVJBTExFTF9LRVlfRVhFQ0xP Q0tSRUxTSU5GTywKKwkJCQkgICBleGVjbG9ja3JlbHNpbmZvX3NwYWNlKTsKKwogCS8qIFN0b3Jl IHNlcmlhbGl6ZWQgUGFyYW1MaXN0SW5mby4gKi8KIAlwYXJhbWxpc3RpbmZvX3NwYWNlID0gc2ht X3RvY19hbGxvY2F0ZShwY3h0LT50b2MsIHBhcmFtbGlzdGluZm9fbGVuKTsKIAlzaG1fdG9jX2lu c2VydChwY3h0LT50b2MsIFBBUkFMTEVMX0tFWV9QQVJBTUxJU1RJTkZPLCBwYXJhbWxpc3RpbmZv X3NwYWNlKTsKQEAgLTEyMzEsOCArMTI0OCwxMCBAQCBFeGVjUGFyYWxsZWxHZXRRdWVyeURlc2Mo c2htX3RvYyAqdG9jLCBEZXN0UmVjZWl2ZXIgKnJlY2VpdmVyLAogCQkJCQkJIGludCBpbnN0cnVt ZW50X29wdGlvbnMpCiB7CiAJY2hhcgkgICAqcHN0bXRzcGFjZTsKKwljaGFyCSAgICpleGVjbG9j a3JlbHNpbmZvc3BhY2U7CiAJY2hhcgkgICAqcGFyYW1zcGFjZTsKIAlQbGFubmVkU3RtdCAqcHN0 bXQ7CisJRXhlY0xvY2tSZWxzSW5mbyAqZXhlY2xvY2tyZWxzaW5mbzsKIAlQYXJhbUxpc3RJbmZv IHBhcmFtTEk7CiAJY2hhcgkgICAqcXVlcnlTdHJpbmc7CiAKQEAgLTEyNDMsMTIgKzEyNjIsMTcg QEAgRXhlY1BhcmFsbGVsR2V0UXVlcnlEZXNjKHNobV90b2MgKnRvYywgRGVzdFJlY2VpdmVyICpy ZWNlaXZlciwKIAlwc3RtdHNwYWNlID0gc2htX3RvY19sb29rdXAodG9jLCBQQVJBTExFTF9LRVlf UExBTk5FRFNUTVQsIGZhbHNlKTsKIAlwc3RtdCA9IChQbGFubmVkU3RtdCAqKSBzdHJpbmdUb05v ZGUocHN0bXRzcGFjZSk7CiAKKwkvKiBSZWNvbnN0cnVjdCBsZWFkZXItc3VwcGxpZWQgRXhlY0xv Y2tSZWxzSW5mby4gKi8KKwlleGVjbG9ja3JlbHNpbmZvc3BhY2UgPSBzaG1fdG9jX2xvb2t1cCh0 b2MsIFBBUkFMTEVMX0tFWV9FWEVDTE9DS1JFTFNJTkZPLAorCQkJCQkJCQkJCSAgZmFsc2UpOwor CWV4ZWNsb2NrcmVsc2luZm8gPSAoRXhlY0xvY2tSZWxzSW5mbyAqKSBzdHJpbmdUb05vZGUoZXhl Y2xvY2tyZWxzaW5mb3NwYWNlKTsKKwogCS8qIFJlY29uc3RydWN0IFBhcmFtTGlzdEluZm8uICov CiAJcGFyYW1zcGFjZSA9IHNobV90b2NfbG9va3VwKHRvYywgUEFSQUxMRUxfS0VZX1BBUkFNTElT VElORk8sIGZhbHNlKTsKIAlwYXJhbUxJID0gUmVzdG9yZVBhcmFtTGlzdCgmcGFyYW1zcGFjZSk7 CiAKIAkvKiBDcmVhdGUgYSBRdWVyeURlc2MgZm9yIHRoZSBxdWVyeS4gKi8KLQlyZXR1cm4gQ3Jl YXRlUXVlcnlEZXNjKHBzdG10LAorCXJldHVybiBDcmVhdGVRdWVyeURlc2MocHN0bXQsIGV4ZWNs b2NrcmVsc2luZm8sCiAJCQkJCQkgICBxdWVyeVN0cmluZywKIAkJCQkJCSAgIEdldEFjdGl2ZVNu YXBzaG90KCksIEludmFsaWRTbmFwc2hvdCwKIAkJCQkJCSAgIHJlY2VpdmVyLCBwYXJhbUxJLCBO VUxMLCBpbnN0cnVtZW50X29wdGlvbnMpOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0 b3IvZXhlY1BhcnRpdGlvbi5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1BhcnRpdGlvbi5j CmluZGV4IDdmZjVhOTVmMDUuLmZkZGM5NzI4MGUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4 ZWN1dG9yL2V4ZWNQYXJ0aXRpb24uYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjUGFy dGl0aW9uLmMKQEAgLTI0LDYgKzI0LDcgQEAKICNpbmNsdWRlICJtYi9wZ193Y2hhci5oIgogI2lu Y2x1ZGUgIm1pc2NhZG1pbi5oIgogI2luY2x1ZGUgIm5vZGVzL21ha2VmdW5jcy5oIgorI2luY2x1 ZGUgInBhcnNlci9wYXJzZXRyZWUuaCIKICNpbmNsdWRlICJwYXJ0aXRpb25pbmcvcGFydGJvdW5k cy5oIgogI2luY2x1ZGUgInBhcnRpdGlvbmluZy9wYXJ0ZGVzYy5oIgogI2luY2x1ZGUgInBhcnRp dGlvbmluZy9wYXJ0cHJ1bmUuaCIKQEAgLTE4Myw4ICsxODQsMTMgQEAgc3RhdGljIGNoYXIgKkV4 ZWNCdWlsZFNsb3RQYXJ0aXRpb25LZXlEZXNjcmlwdGlvbihSZWxhdGlvbiByZWwsCiAJCQkJCQkJ CQkJCQkgIGludCBtYXhmaWVsZGxlbik7CiBzdGF0aWMgTGlzdCAqYWRqdXN0X3BhcnRpdGlvbl9j b2xub3MoTGlzdCAqY29sbm9zLCBSZXN1bHRSZWxJbmZvICpsZWFmX3BhcnRfcnJpKTsKIHN0YXRp YyBQYXJ0aXRpb25QcnVuZVN0YXRlICpFeGVjQ3JlYXRlUGFydGl0aW9uUHJ1bmVTdGF0ZShQbGFu U3RhdGUgKnBsYW5zdGF0ZSwKLQkJCQkJCQkgIFBhcnRpdGlvblBydW5lSW5mbyAqcGFydGl0aW9u cHJ1bmVpbmZvKTsKLXN0YXRpYyBCaXRtYXBzZXQgKkV4ZWNGaW5kSW5pdGlhbE1hdGNoaW5nU3Vi UGxhbnMoUGFydGl0aW9uUHJ1bmVTdGF0ZSAqcHJ1bmVzdGF0ZSk7CisJCQkJCQkJICBQYXJ0aXRp b25QcnVuZUluZm8gKnBhcnRpdGlvbnBydW5laW5mbywKKwkJCQkJCQkgIGJvb2wgY29uc2lkZXJf aW5pdGlhbF9zdGVwcywKKwkJCQkJCQkgIGJvb2wgY29uc2lkZXJfZXhlY19zdGVwcywKKwkJCQkJ CQkgIExpc3QgKnJ0YWJsZSwgRXhwckNvbnRleHQgKmVjb250ZXh0LAorCQkJCQkJCSAgUGFydGl0 aW9uRGlyZWN0b3J5IHBhcnRkaXIpOworc3RhdGljIEJpdG1hcHNldCAqRXhlY0ZpbmRJbml0aWFs TWF0Y2hpbmdTdWJQbGFucyhQYXJ0aXRpb25QcnVuZVN0YXRlICpwcnVuZXN0YXRlLAorCQkJCQkJ CQlQYXJ0aXRpb25QcnVuZUluZm8gKnBydW5laW5mbyk7CiBzdGF0aWMgdm9pZCBFeGVjSW5pdFBy dW5pbmdDb250ZXh0KFBhcnRpdGlvblBydW5lQ29udGV4dCAqY29udGV4dCwKIAkJCQkJCQkJICAg TGlzdCAqcHJ1bmluZ19zdGVwcywKIAkJCQkJCQkJICAgUGFydGl0aW9uRGVzYyBwYXJ0ZGVzYywK QEAgLTE0ODMsOCArMTQ4OSw5IEBAIGFkanVzdF9wYXJ0aXRpb25fY29sbm9zKExpc3QgKmNvbG5v cywgUmVzdWx0UmVsSW5mbyAqbGVhZl9wYXJ0X3JyaSkKICAqIGNvbnNpZGVyZWQgdG8gYmUgYSBz dGFibGUgZXhwcmVzc2lvbiwgaXQgY2FuIGNoYW5nZSB2YWx1ZSBmcm9tIG9uZSBwbGFuCiAgKiBu b2RlIHNjYW4gdG8gdGhlIG5leHQgZHVyaW5nIHF1ZXJ5IGV4ZWN1dGlvbi4gIFN0YWJsZSBjb21w YXJpc29uCiAgKiBleHByZXNzaW9ucyB0aGF0IGRvbid0IGludm9sdmUgc3VjaCBQYXJhbXMgYWxs b3cgcGFydGl0aW9uIHBydW5pbmcgdG8gYmUKLSAqIGRvbmUgb25jZSBkdXJpbmcgZXhlY3V0b3Ig c3RhcnR1cC4gIEV4cHJlc3Npb25zIHRoYXQgZG8gaW52b2x2ZSBzdWNoIFBhcmFtcwotICogcmVx dWlyZSB1cyB0byBwcnVuZSBzZXBhcmF0ZWx5IGZvciBlYWNoIHNjYW4gb2YgdGhlIHBhcmVudCBw bGFuIG5vZGUuCisgKiBkb25lIG9uY2UgZHVyaW5nIGV4ZWN1dG9yIHN0YXJ0dXAgb3IgZXZlbiBi ZWZvcmUgZHVyaW5nIEV4ZWN1dG9yR2V0TG9ja1JlbHMoKS4KKyAqIEV4cHJlc3Npb25zIHRoYXQg ZG8gaW52b2x2ZSBzdWNoIFBhcmFtcyByZXF1aXJlIHVzIHRvIHBydW5lIHNlcGFyYXRlbHkgZm9y CisgKiBlYWNoIHNjYW4gb2YgdGhlIHBhcmVudCBwbGFuIG5vZGUuCiAgKgogICogTm90ZSB0aGF0 IHBydW5pbmcgYXdheSB1bm5lZWRlZCBzdWJwbGFucyBkdXJpbmcgZXhlY3V0b3Igc3RhcnR1cCBo YXMgdGhlCiAgKiBhZGRlZCBiZW5lZml0IG9mIG5vdCBoYXZpbmcgdG8gaW5pdGlhbGl6ZSB0aGUg dW5uZWVkZWQgc3VicGxhbnMgYXQgYWxsLgpAQCAtMTQ5NiwxMCArMTUwMywxNyBAQCBhZGp1c3Rf cGFydGl0aW9uX2NvbG5vcyhMaXN0ICpjb2xub3MsIFJlc3VsdFJlbEluZm8gKmxlYWZfcGFydF9y cmkpCiAgKgkJQ3JlYXRlcyB0aGUgUGFydGl0aW9uUHJ1bmVTdGF0ZSByZXF1aXJlZCBieSBlYWNo IG9mIHRoZSB0d28gcHJ1bmluZwogICoJCWZ1bmN0aW9ucy4gIERldGFpbHMgc3RvcmVkIGluY2x1 ZGUgaG93IHRvIG1hcCB0aGUgcGFydGl0aW9uIGluZGV4CiAgKgkJcmV0dXJuZWQgYnkgdGhlIHBh cnRpdGlvbiBwcnVuaW5nIGNvZGUgaW50byBzdWJwbGFuIGluZGV4ZXMuICBBbHNvCi0gKgkJZGV0 ZXJtaW5lcyB0aGUgc2V0IG9mIGluaXRpYWxseSB2YWxpZCBzdWJwbGFucyBieSBwZXJmb3JtaW5n IGluaXRpYWwKLSAqCQlwcnVuaW5nIHN0ZXBzLCBvbmx5IHdoaWNoIG5lZWQgYmUgaW5pdGlhbGl6 ZWQgYnkgdGhlIGNhbGxlciBzdWNoIGFzCi0gKgkJRXhlY0luaXRBcHBlbmQuICBNYXBzIGluIFBh cnRpdGlvblBydW5lU3RhdGUgYXJlIHVwZGF0ZWQgdG8gYWNjb3VudAotICoJCWZvciBpbml0aWFs IHBydW5pbmcgaGF2aW5nIGVsaW1pbmF0ZWQgc29tZSBvZiB0aGUgc3VicGxhbnMsIGlmIGFueS4K KyAqCQlkZXRlcm1pbmVzIHRoZSBzZXQgb2YgaW5pdGlhbGx5IHZhbGlkIHN1YnBsYW5zIGJ5IGVp dGhlciBsb29raW5nIHRoYXQKKyAqCQl1cCBpbiB0aGUgcGxhbiBub2RlJ3MgUGxhbkluaXRQcnVu aW5nT3V0cHV0IGlmIG9uZSBmb3VuZCBpbgorICoJCUVTdGF0ZS5lc19leGVjbG9ja3JlbGluZm8g b3IgYnkgcGVyZm9ybWluZyBpbml0aWFsIHBydW5pbmcgc3RlcHMuCisgKgkJT25seSB0aGUgc3Vi cGxhbnMgaW5jbHVkZWQgaW4gdGhhdCBuZWVkIGJlIGluaXRpYWxpemVkIGJ5IHRoZSBjYWxsZXIK KyAqCQlzdWNoIGFzIEV4ZWNJbml0QXBwZW5kLiAgTWFwcyBpbiBQYXJ0aXRpb25QcnVuZVN0YXRl IGFyZSB1cGRhdGVkIHRvCisgKgkJYWNjb3VudCBmb3IgaW5pdGlhbCBwcnVuaW5nIGhhdmluZyBl bGltaW5hdGVkIHNvbWUgb2YgdGhlIHN1YnBsYW5zLAorICoJCWlmIGFueS4KKyAqCisgKiBFeGVj R2V0TG9ja1JlbHNEb0luaXRpYWxQcnVuaW5nOgorICoJCURvIGluaXRpYWwgcHJ1bmluZyBhcyBw YXJ0IG9mIEV4ZWNHZXRMb2NrUmVscygpIG9uIHRoZSBwYXJlbnQgcGxhbgorICoJCW5vZGUKICAq CiAgKiBFeGVjRmluZE1hdGNoaW5nU3ViUGxhbnM6CiAgKgkJUmV0dXJucyBpbmRleGVzIG9mIG1h dGNoaW5nIHN1YnBsYW5zIGFmdGVyIGV2YWx1YXRpbmcgYWxsIGF2YWlsYWJsZQpAQCAtMTUxNCw5 ICsxNTI4LDEwIEBAIGFkanVzdF9wYXJ0aXRpb25fY29sbm9zKExpc3QgKmNvbG5vcywgUmVzdWx0 UmVsSW5mbyAqbGVhZl9wYXJ0X3JyaSkKICAqIEV4ZWNJbml0UGFydGl0aW9uUHJ1bmluZwogICog CQlJbml0aWFsaXplIGRhdGEgc3RydWN0dXJlIG5lZWRlZCBmb3IgcnVuLXRpbWUgcGFydGl0aW9u IHBydW5pbmcKICAqCi0gKiBJbml0aWFsIHBydW5pbmcgY2FuIGJlIGRvbmUgaW1tZWRpYXRlbHks IHNvIGl0IGlzIGRvbmUgaGVyZSBpZiBuZWVkZWQgYW5kCi0gKiB0aGUgc2V0IG9mIHN1cnZpdmlu ZyBwYXJ0aXRpb24gc3VicGxhbnMnIGluZGV4ZXMgYXJlIGFkZGVkIHRvIHRoZSBvdXRwdXQKLSAq IHBhcmFtZXRlciAqaW5pdGlhbGx5X3ZhbGlkX3N1YnBsYW5zLgorICogSW5pdGlhbCBwcnVuaW5n IGNhbiBiZSBkb25lIGltbWVkaWF0ZWx5LCBzbyBpdCBpcyBkb25lIGhlcmUgdW5sZXNzIGl0IGhh cworICogYWxyZWFkeSBiZWVuIGRvbmUgYnkgRXhlY0dldExvY2tSZWxzRG9Jbml0aWFsUHJ1bmlu ZygpLCBhbmQgdGhlIHNldCBvZgorICogc3Vydml2aW5nIHBhcnRpdGlvbiBzdWJwbGFucycgaW5k ZXhlcyBhcmUgYWRkZWQgdG8gdGhlIG91dHB1dCBwYXJhbWV0ZXIKKyAqICppbml0aWFsbHlfdmFs aWRfc3VicGxhbnMuCiAgKgogICogSWYgc3VicGxhbnMgYXJlIGluZGVlZCBwcnVuZWQsIHN1YnBs YW5fbWFwIGFycmF5cyBjb250YWluZWQgaW4gdGhlIHJldHVybmVkCiAgKiBQYXJ0aXRpb25QcnVu ZVN0YXRlIGFyZSByZS1zZXF1ZW5jZWQgdG8gbm90IGNvdW50IHRob3NlLCB0aG91Z2ggb25seSBp ZiB0aGUKQEAgLTE1MzAsMjIgKzE1NDUsNTcgQEAgRXhlY0luaXRQYXJ0aXRpb25QcnVuaW5nKFBs YW5TdGF0ZSAqcGxhbnN0YXRlLAogewogCVBhcnRpdGlvblBydW5lU3RhdGUgKnBydW5lc3RhdGU7 CiAJRVN0YXRlICplc3RhdGUgPSBwbGFuc3RhdGUtPnN0YXRlOworCVBsYW4gICAqcGxhbiA9IHBs YW5zdGF0ZS0+cGxhbjsKKwlQbGFuSW5pdFBydW5pbmdPdXRwdXQgKmluaXRQcnVuaW5nT3V0cHV0 ID0gTlVMTDsKKwlib29sCWRvX3BydW5pbmcgPSAocHJ1bmVpbmZvLT5uZWVkc19pbml0X3BydW5p bmcgfHwKKwkJCQkJCSAgcHJ1bmVpbmZvLT5uZWVkc19leGVjX3BydW5pbmcpOwogCi0JLyogV2Ug bWF5IG5lZWQgYW4gZXhwcmVzc2lvbiBjb250ZXh0IHRvIGV2YWx1YXRlIHBhcnRpdGlvbiBleHBy cyAqLwotCUV4ZWNBc3NpZ25FeHByQ29udGV4dChlc3RhdGUsIHBsYW5zdGF0ZSk7CisJLyogUmV0 cmlldmUgdGhlIHBhcmVudCBwbGFuJ3MgUGxhbkluaXRQcnVuaW5nT3V0cHV0LCBpZiBhbnkuICov CisJaWYgKGVzdGF0ZS0+ZXNfZXhlY2xvY2tyZWxzaW5mbykKKwl7CisJCWluaXRQcnVuaW5nT3V0 cHV0ID0gKFBsYW5Jbml0UHJ1bmluZ091dHB1dCAqKQorCQkJRXhlY0ZldGNoUGxhbkluaXRQcnVu aW5nT3V0cHV0KGVzdGF0ZS0+ZXNfZXhlY2xvY2tyZWxzaW5mbywgcGxhbik7CiAKLQkvKgotCSAq IENyZWF0ZSB0aGUgd29ya2luZyBkYXRhIHN0cnVjdHVyZSBmb3IgcHJ1bmluZy4KLQkgKi8KLQlw cnVuZXN0YXRlID0gRXhlY0NyZWF0ZVBhcnRpdGlvblBydW5lU3RhdGUocGxhbnN0YXRlLCBwcnVu ZWluZm8pOworCQlBc3NlcnQoaW5pdFBydW5pbmdPdXRwdXQgIT0gTlVMTCAmJgorCQkJICAgSXNB KGluaXRQcnVuaW5nT3V0cHV0LCBQbGFuSW5pdFBydW5pbmdPdXRwdXQpKTsKKwkJLyogTm8gbmVl ZCB0byBkbyBpbml0aWFsIHBydW5pbmcgYWdhaW4sIG9ubHkgZXhlYyBwcnVuaW5nLiAqLworCQlk b19wcnVuaW5nID0gcHJ1bmVpbmZvLT5uZWVkc19leGVjX3BydW5pbmc7CisJfQorCisJcHJ1bmVz dGF0ZSA9IE5VTEw7CisJaWYgKGRvX3BydW5pbmcpCisJeworCQkvKiBXZSBtYXkgbmVlZCBhbiBl eHByZXNzaW9uIGNvbnRleHQgdG8gZXZhbHVhdGUgcGFydGl0aW9uIGV4cHJzICovCisJCUV4ZWNB c3NpZ25FeHByQ29udGV4dChlc3RhdGUsIHBsYW5zdGF0ZSk7CisKKwkJLyogRm9yIGRhdGEgcmVh ZGluZywgZXhlY3V0b3IgYWx3YXlzIG9taXRzIGRldGFjaGVkIHBhcnRpdGlvbnMgKi8KKwkJaWYg KGVzdGF0ZS0+ZXNfcGFydGl0aW9uX2RpcmVjdG9yeSA9PSBOVUxMKQorCQkJZXN0YXRlLT5lc19w YXJ0aXRpb25fZGlyZWN0b3J5ID0KKwkJCQlDcmVhdGVQYXJ0aXRpb25EaXJlY3RvcnkoZXN0YXRl LT5lc19xdWVyeV9jeHQsIGZhbHNlKTsKKworCQkvKgorCQkgKiBDcmVhdGUgdGhlIHdvcmtpbmcg ZGF0YSBzdHJ1Y3R1cmUgZm9yIHBydW5pbmcuICBObyBuZWVkIHRvIGNvbnNpZGVyCisJCSAqIGlu aXRpYWwgcHJ1bmluZyBzdGVwcyBpZiB3ZSBoYXZlIGEgUGxhbkluaXRQcnVuaW5nT3V0cHV0Lgor CQkgKi8KKwkJcHJ1bmVzdGF0ZSA9IEV4ZWNDcmVhdGVQYXJ0aXRpb25QcnVuZVN0YXRlKHBsYW5z dGF0ZSwgcHJ1bmVpbmZvLAorCQkJCQkJCQkJCQkJICAgaW5pdFBydW5pbmdPdXRwdXQgPT0gTlVM TCwgdHJ1ZSwKKwkJCQkJCQkJCQkJCSAgIE5JTCwgcGxhbnN0YXRlLT5wc19FeHByQ29udGV4dCwK KwkJCQkJCQkJCQkJCSAgIGVzdGF0ZS0+ZXNfcGFydGl0aW9uX2RpcmVjdG9yeSk7CisJfQogCiAJ LyoKIAkgKiBQZXJmb3JtIGFuIGluaXRpYWwgcGFydGl0aW9uIHBydW5lLCBpZiByZXF1aXJlZC4K IAkgKi8KLQlpZiAocHJ1bmVzdGF0ZS0+ZG9faW5pdGlhbF9wcnVuZSkKKwlpZiAoaW5pdFBydW5p bmdPdXRwdXQpCisJeworCQkvKiBFeGVjR2V0TG9ja1JlbHNEb0luaXRpYWxQcnVuaW5nKCkgYWxy ZWFkeSBkaWQgaXQgZm9yIHVzISAqLworCQkqaW5pdGlhbGx5X3ZhbGlkX3N1YnBsYW5zID0gaW5p dFBydW5pbmdPdXRwdXQtPmluaXRpYWxseV92YWxpZF9zdWJwbGFuczsKKwl9CisJZWxzZSBpZiAo cHJ1bmVzdGF0ZSAmJiBwcnVuZXN0YXRlLT5kb19pbml0aWFsX3BydW5lKQogCXsKIAkJLyogRGV0 ZXJtaW5lIHdoaWNoIHN1YnBsYW5zIHN1cnZpdmUgaW5pdGlhbCBwcnVuaW5nICovCi0JCSppbml0 aWFsbHlfdmFsaWRfc3VicGxhbnMgPSBFeGVjRmluZEluaXRpYWxNYXRjaGluZ1N1YlBsYW5zKHBy dW5lc3RhdGUpOworCQkqaW5pdGlhbGx5X3ZhbGlkX3N1YnBsYW5zID0gRXhlY0ZpbmRJbml0aWFs TWF0Y2hpbmdTdWJQbGFucyhwcnVuZXN0YXRlLAorCQkJCQkJCQkJCQkJCQkJCQlwcnVuZWluZm8p OwogCX0KIAllbHNlCiAJewpAQCAtMTU2Myw3ICsxNjEzLDcgQEAgRXhlY0luaXRQYXJ0aXRpb25Q cnVuaW5nKFBsYW5TdGF0ZSAqcGxhbnN0YXRlLAogCSAqIGludmFsaWQgZGF0YSBpbiBwcnVuZXN0 YXRlLCBiZWNhdXNlIHRoYXQgZGF0YSB3b24ndCBiZSBjb25zdWx0ZWQgYWdhaW4KIAkgKiAoY2Yg aW5pdGlhbCBBc3NlcnQgaW4gRXhlY0ZpbmRNYXRjaGluZ1N1YlBsYW5zKS4KIAkgKi8KLQlpZiAo cHJ1bmVzdGF0ZS0+ZG9fZXhlY19wcnVuZSAmJgorCWlmIChwcnVuZXN0YXRlICYmIHBydW5lc3Rh dGUtPmRvX2V4ZWNfcHJ1bmUgJiYKIAkJYm1zX251bV9tZW1iZXJzKCppbml0aWFsbHlfdmFsaWRf c3VicGxhbnMpIDwgbl90b3RhbF9zdWJwbGFucykKIAkJUGFydGl0aW9uUHJ1bmVTdGF0ZUZpeFN1 YlBsYW5NYXAocHJ1bmVzdGF0ZSwKIAkJCQkJCQkJCQkgKmluaXRpYWxseV92YWxpZF9zdWJwbGFu cywKQEAgLTE1NzIsMTIgKzE2MjIsNzUgQEAgRXhlY0luaXRQYXJ0aXRpb25QcnVuaW5nKFBsYW5T dGF0ZSAqcGxhbnN0YXRlLAogCXJldHVybiBwcnVuZXN0YXRlOwogfQogCisvKgorICogRXhlY0dl dExvY2tSZWxzRG9Jbml0aWFsUHJ1bmluZworICoJCVBlcmZvcm0gaW5pdGlhbCBwcnVuaW5nIGFz IHBhcnQgb2YgZG9pbmcgRXhlY0dldExvY2tSZWxzKCkgb24gdGhlIHBhcmVudAorICoJCXBsYW4g bm9kZQorICovCitCaXRtYXBzZXQgKgorRXhlY0dldExvY2tSZWxzRG9Jbml0aWFsUHJ1bmluZyhQ bGFuICpwbGFuLCBFeGVjR2V0TG9ja1JlbHNDb250ZXh0ICpjb250ZXh0LAorCQkJCQkJCQlQYXJ0 aXRpb25QcnVuZUluZm8gKnBydW5laW5mbykKK3sKKwlMaXN0CQkgKnJ0YWJsZSA9IGNvbnRleHQt PnN0bXQtPnJ0YWJsZTsKKwlQYXJhbUxpc3RJbmZvIHBhcmFtcyA9IGNvbnRleHQtPnBhcmFtczsK KwlFeHByQ29udGV4dAkgKmVjb250ZXh0OworCVBhcnRpdGlvbkRpcmVjdG9yeSBwZGlyOworCU1l bW9yeUNvbnRleHQgb2xkY29udGV4dCwKKwkJCQkgIHRtcGNvbnRleHQ7CisJUGFydGl0aW9uUHJ1 bmVTdGF0ZSAqcHJ1bmVzdGF0ZTsKKwlQbGFuSW5pdFBydW5pbmdPdXRwdXQgKmluaXRQcnVuaW5n T3V0cHV0OworCisJLyoKKwkgKiBBIHRlbXBvcmFyeSBjb250ZXh0IHRvIGFsbG9jYXRlIHN0dWZm IG5lZWRkZWQgdG8gcnVuIHRoZSBwcnVuaW5nIHN0ZXBzLgorCSAqLworCXRtcGNvbnRleHQgPSBB bGxvY1NldENvbnRleHRDcmVhdGUoQ3VycmVudE1lbW9yeUNvbnRleHQsCisJCQkJCQkJCQkgICAi aW5pdGlhbCBwcnVuaW5nIHdvcmtpbmcgZGF0YSIsCisJCQkJCQkJCQkgICBBTExPQ1NFVF9ERUZB VUxUX1NJWkVTKTsKKwlvbGRjb250ZXh0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKHRtcGNvbnRl eHQpOworCisJLyoKKwkgKiBQYXJ0aXRpb25EaXJlY3RvcnkgdG8gbG9vayB1cCBwYXJ0aXRpb24g ZGVzY3JpcHRvcnMsIHdoaWNoIG9taXRzCisJICogZGV0YWNoZWQgcGFydGl0aW9ucywganVzdCBs aWtlIGluIHRoZSBleGVjdXRvciBwcm9wZXIuCisJICovCisJcGRpciA9IENyZWF0ZVBhcnRpdGlv bkRpcmVjdG9yeShDdXJyZW50TWVtb3J5Q29udGV4dCwgZmFsc2UpOworCisJLyoKKwkgKiBXZSBk b24ndCB5ZXQgaGF2ZSBhIFBsYW5TdGF0ZSBmb3IgdGhlIHBhcmVudCBwbGFuIG5vZGUsIHNvIG11 c3QgY3JlYXRlCisJICogYSBzdGFuZGFsb25lIEV4cHJDb250ZXh0IHRvIGV2YWx1YXRlIHBydW5p bmcgZXhwcmVzc2lvbnMsIGVxdWlwcGVkIHdpdGgKKwkgKiB0aGUgaW5mb3JtYXRpb24gYWJvdXQg dGhlIEVYVEVSTiBwYXJhbWV0ZXJzIHRoYXQgdGhlIGNhbGxlciBwYXNzZWQgdXMuCisJICogTm90 ZSB0aGF0IHRoYXQncyBva2F5IGJlY2F1c2UgdGhlIGluaXRpYWwgcHJ1bmluZyBzdGVwcyBkbyBu b3QgY29udGFpbgorCSAqIGFueXRoaW5nIHRoYXQgcmVxdWlyZXMgdGhlIGV4ZWN1dGlvbiB0byBo YXZlIHN0YXJ0ZWQuCisJICovCisJZWNvbnRleHQgPSBDcmVhdGVTdGFuZGFsb25lRXhwckNvbnRl eHQoKTsKKwllY29udGV4dC0+ZWN4dF9wYXJhbV9saXN0X2luZm8gPSBwYXJhbXM7CisJcHJ1bmVz dGF0ZSA9IEV4ZWNDcmVhdGVQYXJ0aXRpb25QcnVuZVN0YXRlKE5VTEwsIHBydW5laW5mbywKKwkJ CQkJCQkJCQkJICAgdHJ1ZSwgZmFsc2UsCisJCQkJCQkJCQkJCSAgIHJ0YWJsZSwgZWNvbnRleHQs CisJCQkJCQkJCQkJCSAgIHBkaXIpOworCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjb250ZXh0 KTsKKworCS8qIERvIHRoZSBwcnVuaW5nIGFuZCBwb3B1bGF0ZSBhIFBsYW5Jbml0UHJ1bmluZ091 dHB1dCBmb3IgdGhpcyBub2RlLiAqLworCWluaXRQcnVuaW5nT3V0cHV0ID0gbWFrZU5vZGUoUGxh bkluaXRQcnVuaW5nT3V0cHV0KTsKKwlpbml0UHJ1bmluZ091dHB1dC0+aW5pdGlhbGx5X3ZhbGlk X3N1YnBsYW5zID0KKwkJRXhlY0ZpbmRJbml0aWFsTWF0Y2hpbmdTdWJQbGFucyhwcnVuZXN0YXRl LCBwcnVuZWluZm8pOworCUV4ZWNTdG9yZVBsYW5Jbml0UHJ1bmluZ091dHB1dChjb250ZXh0LCBp bml0UHJ1bmluZ091dHB1dCwgcGxhbik7CisKKwlGcmVlRXhwckNvbnRleHQoZWNvbnRleHQsIHRy dWUpOworCURlc3Ryb3lQYXJ0aXRpb25EaXJlY3RvcnkocGRpcik7CisJTWVtb3J5Q29udGV4dERl bGV0ZSh0bXBjb250ZXh0KTsKKworCXJldHVybiBpbml0UHJ1bmluZ091dHB1dC0+aW5pdGlhbGx5 X3ZhbGlkX3N1YnBsYW5zOworfQorCiAvKgogICogRXhlY0NyZWF0ZVBhcnRpdGlvblBydW5lU3Rh dGUKICAqCQlCdWlsZCB0aGUgZGF0YSBzdHJ1Y3R1cmUgcmVxdWlyZWQgZm9yIGNhbGxpbmcKICAq CQlFeGVjRmluZEluaXRpYWxNYXRjaGluZ1N1YlBsYW5zIGFuZCBFeGVjRmluZE1hdGNoaW5nU3Vi UGxhbnMuCiAgKgotICogJ3BsYW5zdGF0ZScgaXMgdGhlIHBhcmVudCBwbGFuIG5vZGUncyBleGVj dXRpb24gc3RhdGUuCisgKiAncGxhbnN0YXRlJywgaWYgbm90IE5VTEwsIGlzIHRoZSBwYXJlbnQg cGxhbiBub2RlJ3MgZXhlY3V0aW9uIHN0YXRlLiAgSXQKKyAqIGNhbiBiZSBOVUxMIGlmIGJlaW5n IGNhbGxlZCBiZWZvcmUgRXhlY3V0b3JTdGFydCgpLCBpbiB3aGljaCBjYXNlLAorICogJ3J0YWJs ZScgKHJhbmdlIHRhYmxlKSwgJ2Vjb250ZXh0JywgYW5kICdwYXJ0ZGlyJyBtdXN0IGJlIGV4cGxp Y2l0bHkKKyAqIHByb3ZpZGVkLgogICoKICAqICdwYXJ0aXRpb25wcnVuZWluZm8nIGlzIGEgUGFy dGl0aW9uUHJ1bmVJbmZvIGFzIGdlbmVyYXRlZCBieQogICogbWFrZV9wYXJ0aXRpb25fcHJ1bmVp bmZvLiAgSGVyZSB3ZSBidWlsZCBhIFBhcnRpdGlvblBydW5lU3RhdGUgY29udGFpbmluZyBhCkBA IC0xNTkyLDE5ICsxNzA1LDIwIEBAIEV4ZWNJbml0UGFydGl0aW9uUHJ1bmluZyhQbGFuU3RhdGUg KnBsYW5zdGF0ZSwKICAqLwogc3RhdGljIFBhcnRpdGlvblBydW5lU3RhdGUgKgogRXhlY0NyZWF0 ZVBhcnRpdGlvblBydW5lU3RhdGUoUGxhblN0YXRlICpwbGFuc3RhdGUsCi0JCQkJCQkJICBQYXJ0 aXRpb25QcnVuZUluZm8gKnBhcnRpdGlvbnBydW5laW5mbykKKwkJCQkJCQkgIFBhcnRpdGlvblBy dW5lSW5mbyAqcGFydGl0aW9ucHJ1bmVpbmZvLAorCQkJCQkJCSAgYm9vbCBjb25zaWRlcl9pbml0 aWFsX3N0ZXBzLAorCQkJCQkJCSAgYm9vbCBjb25zaWRlcl9leGVjX3N0ZXBzLAorCQkJCQkJCSAg TGlzdCAqcnRhYmxlLCBFeHByQ29udGV4dCAqZWNvbnRleHQsCisJCQkJCQkJICBQYXJ0aXRpb25E aXJlY3RvcnkgcGFydGRpcikKIHsKLQlFU3RhdGUJICAgKmVzdGF0ZSA9IHBsYW5zdGF0ZS0+c3Rh dGU7CisJRVN0YXRlCSAgICplc3RhdGUgPSBwbGFuc3RhdGUgPyBwbGFuc3RhdGUtPnN0YXRlIDog TlVMTDsKIAlQYXJ0aXRpb25QcnVuZVN0YXRlICpwcnVuZXN0YXRlOwogCWludAkJCW5fcGFydF9o aWVyYXJjaGllczsKIAlMaXN0Q2VsbCAgICpsYzsKIAlpbnQJCQlpOwotCUV4cHJDb250ZXh0CSpl Y29udGV4dCA9IHBsYW5zdGF0ZS0+cHNfRXhwckNvbnRleHQ7CiAKLQkvKiBGb3IgZGF0YSByZWFk aW5nLCBleGVjdXRvciBhbHdheXMgb21pdHMgZGV0YWNoZWQgcGFydGl0aW9ucyAqLwotCWlmIChl c3RhdGUtPmVzX3BhcnRpdGlvbl9kaXJlY3RvcnkgPT0gTlVMTCkKLQkJZXN0YXRlLT5lc19wYXJ0 aXRpb25fZGlyZWN0b3J5ID0KLQkJCUNyZWF0ZVBhcnRpdGlvbkRpcmVjdG9yeShlc3RhdGUtPmVz X3F1ZXJ5X2N4dCwgZmFsc2UpOworCUFzc2VydCgoZXN0YXRlICE9IE5VTEwpIHx8CisJCQkocGFy dGRpciAhPSBOVUxMICYmIGVjb250ZXh0ICE9IE5VTEwgJiYgcnRhYmxlICE9IE5JTCkpOwogCiAJ bl9wYXJ0X2hpZXJhcmNoaWVzID0gbGlzdF9sZW5ndGgocGFydGl0aW9ucHJ1bmVpbmZvLT5wcnVu ZV9pbmZvcyk7CiAJQXNzZXJ0KG5fcGFydF9oaWVyYXJjaGllcyA+IDApOwpAQCAtMTY1NSwxOSAr MTc2OSw0OCBAQCBFeGVjQ3JlYXRlUGFydGl0aW9uUHJ1bmVTdGF0ZShQbGFuU3RhdGUgKnBsYW5z dGF0ZSwKIAkJCVBhcnRpdGlvbmVkUmVsUHJ1bmVJbmZvICpwaW5mbyA9IGxmaXJzdF9ub2RlKFBh cnRpdGlvbmVkUmVsUHJ1bmVJbmZvLCBsYzIpOwogCQkJUGFydGl0aW9uZWRSZWxQcnVuaW5nRGF0 YSAqcHBydW5lID0gJnBydW5lZGF0YS0+cGFydHJlbHBydW5lZGF0YVtqXTsKIAkJCVJlbGF0aW9u CXBhcnRyZWw7CisJCQlib29sCQljbG9zZV9wYXJ0cmVsID0gZmFsc2U7CiAJCQlQYXJ0aXRpb25E ZXNjIHBhcnRkZXNjOwogCQkJUGFydGl0aW9uS2V5IHBhcnRrZXk7CiAKIAkJCS8qCi0JCQkgKiBX ZSBjYW4gcmVseSBvbiB0aGUgY29waWVzIG9mIHRoZSBwYXJ0aXRpb25lZCB0YWJsZSdzIHBhcnRp dGlvbgotCQkJICoga2V5IGFuZCBwYXJ0aXRpb24gZGVzY3JpcHRvciBhcHBlYXJpbmcgaW4gaXRz IHJlbGNhY2hlIGVudHJ5LAotCQkJICogYmVjYXVzZSB0aGF0IGVudHJ5IHdpbGwgYmUgaGVsZCBv cGVuIGFuZCBsb2NrZWQgZm9yIHRoZQotCQkJICogZHVyYXRpb24gb2YgdGhpcyBleGVjdXRvciBy dW4uCisJCQkgKiBNdXN0IG9wZW4gdGhlIHJlbGF0aW9uIGJ5IG91cnNlbHZlcyB3aGVuIGNhbGxl ZCBiZWZvcmUgdGhlCisJCQkgKiBleGVjdXRpb24gaGFzIHN0YXJ0ZWQsIHN1Y2ggYXMsIHdoZW4g Y2FsbGVkIGR1cmluZworCQkJICogRXhlY3V0b3JHZXRMb2NrUmVscygpIG9uIGEgY2FjaGVkIHBs YW4uICBJbiB0aGF0IGNhc2UsCisJCQkgKiBzdWItcGFydGl0aW9ucyBtdXN0IGJlIGxvY2tlZCwg YmVjYXVzZSBBY3F1aXJlUGxhbm5lckxvY2tzKCkKKwkJCSAqIHdvdWxkIG5vdCBoYXZlIHNlZW4g dGhlbS4gKDFzdCByZWxhdGlvbiBpbiBhIHBhcnRyZWxwcnVuZWluZm9zCisJCQkgKiBsaXN0IGlz IGFsd2F5cyB0aGUgcm9vdCBwYXJ0aXRpb25lZCB0YWJsZSBhcHBlYXJpbmcgaW4gdGhlCisJCQkg KiBxdWVyeSwgd2hpY2ggQWNxdWlyZVBsYW5uZXJMb2NrcygpIHdvdWxkIGhhdmUgbG9ja2VkOyB0 aGUKKwkJCSAqIEFzc2VydCBpbiByZWxhdGlvbl9vcGVuKCkgZ3VhcmRzIHRoYXQgYXNzdW1wdGlv bi4pCisJCQkgKi8KKwkJCWlmIChlc3RhdGUgPT0gTlVMTCkKKwkJCXsKKwkJCQlSYW5nZVRibEVu dHJ5ICpydGUgPSBydF9mZXRjaChwaW5mby0+cnRpbmRleCwgcnRhYmxlKTsKKwkJCQlpbnQJCWxv Y2ttb2RlID0gKGogPT0gMCkgPyBOb0xvY2sgOiBydGUtPnJlbGxvY2ttb2RlOworCisJCQkJcGFy dHJlbCA9IHRhYmxlX29wZW4ocnRlLT5yZWxpZCwgbG9ja21vZGUpOworCQkJCWNsb3NlX3BhcnRy ZWwgPSB0cnVlOworCQkJfQorCQkJZWxzZQorCQkJCXBhcnRyZWwgPSBFeGVjR2V0UmFuZ2VUYWJs ZVJlbGF0aW9uKGVzdGF0ZSwgcGluZm8tPnJ0aW5kZXgpOworCisJCQkvKgorCQkJICogV2UgY2Fu IHJlbHkgb24gdGhlIGNvcHkgb2YgdGhlIHBhcnRpdGlvbmVkIHRhYmxlJ3MgcGFydGl0aW9uCisJ CQkgKiBrZXkgZnJvbSBpbiBpdHMgcmVsY2FjaGUgZW50cnksIGJlY2F1c2UgaXQgY2FuJ3QgY2hh bmdlIChvcgorCQkJICogZ2V0IGRlc3Ryb3llZCkgYXMgbG9uZyBhcyB0aGUgcmVsYXRpb24gaXMg bG9ja2VkLiAgUGFydGl0aW9uCisJCQkgKiBkZXNjcmlwdG9yIGlzIHRha2VuIGZyb20gdGhlIFBh cnRpdGlvbkRpcmVjdG9yeSBhc3NvY2lhdGVkIHdpdGgKKwkJCSAqIHRoZSB0YWJsZSB0aGF0IGlz IGhlbGQgb3BlbiBsb25nIGVub3VnaCBmb3IgdGhlIGRlc2NyaXB0b3IgdG8KKwkJCSAqIHJlbWFp biB2YWxpZCB3aGlsZSBpdCdzIHVzZWQgdG8gcGVyZm9ybSB0aGUgcHJ1bmluZyBzdGVwcy4KIAkJ CSAqLwotCQkJcGFydHJlbCA9IEV4ZWNHZXRSYW5nZVRhYmxlUmVsYXRpb24oZXN0YXRlLCBwaW5m by0+cnRpbmRleCk7CiAJCQlwYXJ0a2V5ID0gUmVsYXRpb25HZXRQYXJ0aXRpb25LZXkocGFydHJl bCk7Ci0JCQlwYXJ0ZGVzYyA9IFBhcnRpdGlvbkRpcmVjdG9yeUxvb2t1cChlc3RhdGUtPmVzX3Bh cnRpdGlvbl9kaXJlY3RvcnksCi0JCQkJCQkJCQkJCQlwYXJ0cmVsKTsKKwkJCXBhcnRkZXNjID0g UGFydGl0aW9uRGlyZWN0b3J5TG9va3VwKHBhcnRkaXIsIHBhcnRyZWwpOworCisJCQkvKgorCQkJ ICogTXVzdCBjbG9zZSBwYXJ0cmVsLCBrZWVwaW5nIHRoZSBsb2NrIHRha2VuLCBpZiB3ZSdyZSBu b3QgdXNpbmcKKwkJCSAqIEVTdGF0ZSdzIGVudHJ5LgorCQkJICovCisJCQlpZiAoY2xvc2VfcGFy dHJlbCkKKwkJCQl0YWJsZV9jbG9zZShwYXJ0cmVsLCBOb0xvY2spOwogCiAJCQkvKgogCQkJICog SW5pdGlhbGl6ZSB0aGUgc3VicGxhbl9tYXAgYW5kIHN1YnBhcnRfbWFwLgpAQCAtMTc2OSw3ICsx OTEyLDcgQEAgRXhlY0NyZWF0ZVBhcnRpdGlvblBydW5lU3RhdGUoUGxhblN0YXRlICpwbGFuc3Rh dGUsCiAJCQkgKiBJbml0aWFsaXplIHBydW5pbmcgY29udGV4dHMgYXMgbmVlZGVkLgogCQkJICov CiAJCQlwcHJ1bmUtPmluaXRpYWxfcHJ1bmluZ19zdGVwcyA9IHBpbmZvLT5pbml0aWFsX3BydW5p bmdfc3RlcHM7Ci0JCQlpZiAocGluZm8tPmluaXRpYWxfcHJ1bmluZ19zdGVwcykKKwkJCWlmIChj b25zaWRlcl9pbml0aWFsX3N0ZXBzICYmIHBpbmZvLT5pbml0aWFsX3BydW5pbmdfc3RlcHMpCiAJ CQl7CiAJCQkJRXhlY0luaXRQcnVuaW5nQ29udGV4dCgmcHBydW5lLT5pbml0aWFsX2NvbnRleHQs CiAJCQkJCQkJCQkgICBwaW5mby0+aW5pdGlhbF9wcnVuaW5nX3N0ZXBzLApAQCAtMTc3OSw3ICsx OTIyLDcgQEAgRXhlY0NyZWF0ZVBhcnRpdGlvblBydW5lU3RhdGUoUGxhblN0YXRlICpwbGFuc3Rh dGUsCiAJCQkJcHJ1bmVzdGF0ZS0+ZG9faW5pdGlhbF9wcnVuZSA9IHRydWU7CiAJCQl9CiAJCQlw cHJ1bmUtPmV4ZWNfcHJ1bmluZ19zdGVwcyA9IHBpbmZvLT5leGVjX3BydW5pbmdfc3RlcHM7Ci0J CQlpZiAocGluZm8tPmV4ZWNfcHJ1bmluZ19zdGVwcykKKwkJCWlmIChjb25zaWRlcl9leGVjX3N0 ZXBzICYmIHBpbmZvLT5leGVjX3BydW5pbmdfc3RlcHMpCiAJCQl7CiAJCQkJRXhlY0luaXRQcnVu aW5nQ29udGV4dCgmcHBydW5lLT5leGVjX2NvbnRleHQsCiAJCQkJCQkJCQkgICBwaW5mby0+ZXhl Y19wcnVuaW5nX3N0ZXBzLApAQCAtMTg5Myw3ICsyMDM2LDggQEAgRXhlY0luaXRQcnVuaW5nQ29u dGV4dChQYXJ0aXRpb25QcnVuZUNvbnRleHQgKmNvbnRleHQsCiAgKiBpcyByZXF1aXJlZC4KICAq Lwogc3RhdGljIEJpdG1hcHNldCAqCi1FeGVjRmluZEluaXRpYWxNYXRjaGluZ1N1YlBsYW5zKFBh cnRpdGlvblBydW5lU3RhdGUgKnBydW5lc3RhdGUpCitFeGVjRmluZEluaXRpYWxNYXRjaGluZ1N1 YlBsYW5zKFBhcnRpdGlvblBydW5lU3RhdGUgKnBydW5lc3RhdGUsCisJCQkJCQkJCVBhcnRpdGlv blBydW5lSW5mbyAqcHJ1bmVpbmZvKQogewogCUJpdG1hcHNldCAgKnJlc3VsdCA9IE5VTEw7CiAJ TWVtb3J5Q29udGV4dCBvbGRjb250ZXh0OwpAQCAtMTkwMyw4ICsyMDQ3LDggQEAgRXhlY0ZpbmRJ bml0aWFsTWF0Y2hpbmdTdWJQbGFucyhQYXJ0aXRpb25QcnVuZVN0YXRlICpwcnVuZXN0YXRlKQog CUFzc2VydChwcnVuZXN0YXRlLT5kb19pbml0aWFsX3BydW5lKTsKIAogCS8qCi0JICogU3dpdGNo IHRvIGEgdGVtcCBjb250ZXh0IHRvIGF2b2lkIGxlYWtpbmcgbWVtb3J5IGluIHRoZSBleGVjdXRv cidzCi0JICogcXVlcnktbGlmZXNwYW4gbWVtb3J5IGNvbnRleHQuCisJICogU3dpdGNoIHRvIGEg dGVtcCBjb250ZXh0IHRvIGF2b2lkIGxlYWtpbmcgbWVtb3J5IGluIHRoZSBsb25nZXItdGVybQor CSAqIG1lbW9yeSBjb250ZXh0LgogCSAqLwogCW9sZGNvbnRleHQgPSBNZW1vcnlDb250ZXh0U3dp dGNoVG8ocHJ1bmVzdGF0ZS0+cHJ1bmVfY29udGV4dCk7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL2V4ZWN1dG9yL2V4ZWNVdGlscy5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1V0aWxz LmMKaW5kZXggOWRmMWY4MWVhOC4uNzI0NmY5MTc1ZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv ZXhlY3V0b3IvZXhlY1V0aWxzLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1V0aWxz LmMKQEAgLTExOSw2ICsxMTksNyBAQCBDcmVhdGVFeGVjdXRvclN0YXRlKHZvaWQpCiAJZXN0YXRl LT5lc19yZWxhdGlvbnMgPSBOVUxMOwogCWVzdGF0ZS0+ZXNfcm93bWFya3MgPSBOVUxMOwogCWVz dGF0ZS0+ZXNfcGxhbm5lZHN0bXQgPSBOVUxMOworCWVzdGF0ZS0+ZXNfZXhlY2xvY2tyZWxzaW5m byA9IE5VTEw7CiAKIAllc3RhdGUtPmVzX2p1bmtGaWx0ZXIgPSBOVUxMOwogCkBAIC03ODUsNiAr Nzg2LDEzIEBAIEV4ZWNHZXRSYW5nZVRhYmxlUmVsYXRpb24oRVN0YXRlICplc3RhdGUsIEluZGV4 IHJ0aSkKIAogCUFzc2VydChydGkgPiAwICYmIHJ0aSA8PSBlc3RhdGUtPmVzX3JhbmdlX3RhYmxl X3NpemUpOwogCisJLyoKKwkgKiBBIGNyb3NzLWNoZWNrIHRoYXQgQWNxdWlyZUV4ZWN1dG9yTG9j a3MoKSBoYXNuJ3QgbWlzc2VkIGFueSByZWxhdGlvbnMKKwkgKiBpdCBtdXN0IG5vdCBoYXZlLgor CSAqLworCUFzc2VydChlc3RhdGUtPmVzX2V4ZWNsb2NrcmVsc2luZm8gPT0gTlVMTCB8fAorCQkg ICBibXNfaXNfbWVtYmVyKHJ0aSwgZXN0YXRlLT5lc19leGVjbG9ja3JlbHNpbmZvLT5sb2NrcmVs cykpOworCiAJcmVsID0gZXN0YXRlLT5lc19yZWxhdGlvbnNbcnRpIC0gMV07CiAJaWYgKHJlbCA9 PSBOVUxMKQogCXsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2Z1bmN0aW9ucy5j IGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZnVuY3Rpb25zLmMKaW5kZXggZjk0NjBhZTUwNi4uYTIx ODJhNmIxZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZnVuY3Rpb25zLmMKKysr IGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZnVuY3Rpb25zLmMKQEAgLTg0NCw3ICs4NDQsNyBAQCBw b3N0cXVlbF9zdGFydChleGVjdXRpb25fc3RhdGUgKmVzLCBTUUxGdW5jdGlvbkNhY2hlUHRyIGZj YWNoZSkKIAllbHNlCiAJCWRlc3QgPSBOb25lX1JlY2VpdmVyOwogCi0JZXMtPnFkID0gQ3JlYXRl UXVlcnlEZXNjKGVzLT5zdG10LAorCWVzLT5xZCA9IENyZWF0ZVF1ZXJ5RGVzYyhlcy0+c3RtdCwg TlVMTCwKIAkJCQkJCQkgZmNhY2hlLT5zcmMsCiAJCQkJCQkJIEdldEFjdGl2ZVNuYXBzaG90KCks CiAJCQkJCQkJIEludmFsaWRTbmFwc2hvdCwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1 dG9yL25vZGVBcHBlbmQuYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVBcHBlbmQuYwppbmRl eCA1YjZkM2ViMjNiLi45YzZmOTA3Njg3IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRv ci9ub2RlQXBwZW5kLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUFwcGVuZC5jCkBA IC05NCw2ICs5NCw1NSBAQCBzdGF0aWMgYm9vbCBFeGVjQXBwZW5kQXN5bmNSZXF1ZXN0KEFwcGVu ZFN0YXRlICpub2RlLCBUdXBsZVRhYmxlU2xvdCAqKnJlc3VsdCk7CiBzdGF0aWMgdm9pZCBFeGVj QXBwZW5kQXN5bmNFdmVudFdhaXQoQXBwZW5kU3RhdGUgKm5vZGUpOwogc3RhdGljIHZvaWQgY2xh c3NpZnlfbWF0Y2hpbmdfc3VicGxhbnMoQXBwZW5kU3RhdGUgKm5vZGUpOwogCisvKiAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgKgkJRXhlY0dldEFwcGVuZExvY2tSZWxzCisgKgkJCURvIEV4ZWNHZXRMb2NrUmVscygpJ3Mg d29yayBmb3IgYW4gQXBwZW5kIHBsYW4KKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworYm9vbAorRXhlY0dldEFw cGVuZExvY2tSZWxzKEFwcGVuZCAqbm9kZSwgRXhlY0dldExvY2tSZWxzQ29udGV4dCAqY29udGV4 dCkKK3sKKwlQYXJ0aXRpb25QcnVuZUluZm8gKnBydW5laW5mbyA9IG5vZGUtPnBhcnRfcHJ1bmVf aW5mbzsKKworCS8qCisJICogTXVzdCBhbHdheXMgbG9jayBhbGwgdGhlIHBhcnRpdGlvbmVkIHRh YmxlcyB3aG9zZSBkaXJlY3QgYW5kIGluZGlyZWN0CisJICogcGFydGl0aW9ucyB3aWxsIGJlIHNj YW5uZWQgYnkgdGhpcyBBcHBlbmQuCisJICovCisJY29udGV4dC0+bG9ja3JlbHMgPSBibXNfYWRk X21lbWJlcnMoY29udGV4dC0+bG9ja3JlbHMsCisJCQkJCQkJCQkJbm9kZS0+cGFydGl0aW9uZWRf cmVscyk7CisKKwkvKgorCSAqIE5vdyByZWN1cnNlIHRvIHN1YnBsYW5zIHRvIGFkZCByZWxhdGlv bnMgc2Nhbm5lZCB0aGVyZWluLgorCSAqCisJICogSWYgaW5pdGlhbCBwcnVuaW5nIGNhbiBiZSBk b25lLCBkbyB0aGF0IG5vdyBhbmQgb25seSByZWN1cnNlIHRvIHRoZQorCSAqIHN1cnZpdmluZyBz dWJwbGFucy4KKwkgKi8KKwlpZiAocHJ1bmVpbmZvICYmIHBydW5laW5mby0+bmVlZHNfaW5pdF9w cnVuaW5nKQorCXsKKwkJTGlzdAkgICAqc3VicGxhbnMgPSBub2RlLT5hcHBlbmRwbGFuczsKKwkJ Qml0bWFwc2V0ICAqdmFsaWRzdWJwbGFuczsKKwkJaW50CQkJaTsKKworCQl2YWxpZHN1YnBsYW5z ID0gRXhlY0dldExvY2tSZWxzRG9Jbml0aWFsUHJ1bmluZygoUGxhbiAqKSBub2RlLAorCQkJCQkJ CQkJCQkJCQljb250ZXh0LCBwcnVuZWluZm8pOworCisJCS8qIFJlY3Vyc2UgdG8gc3Vydml2aW5n IHN1YnBsYW5zLiAqLworCQlpID0gLTE7CisJCXdoaWxlICgoaSA9IGJtc19uZXh0X21lbWJlcih2 YWxpZHN1YnBsYW5zLCBpKSkgPj0gMCkKKwkJeworCQkJUGxhbiAgICpzdWJwbGFuID0gbGlzdF9u dGgoc3VicGxhbnMsIGkpOworCisJCQkodm9pZCkgRXhlY0dldExvY2tSZWxzKHN1YnBsYW4sIGNv bnRleHQpOworCQl9CisKKwkJLyogZG9uZSB3aXRoIHRoaXMgbm9kZSAqLworCQlyZXR1cm4gdHJ1 ZTsKKwl9CisKKwkvKiBUZWxsIHRoZSBjYWxsZXIgdG8gcmVjdXJzZSB0byAqYWxsKiB0aGUgc3Vi cGxhbnMuICovCisJcmV0dXJuIGZhbHNlOworfQorCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKgkJRXhlY0luaXRB cHBlbmQKICAqCkBAIC0xNTUsNyArMjA0LDggQEAgRXhlY0luaXRBcHBlbmQoQXBwZW5kICpub2Rl LCBFU3RhdGUgKmVzdGF0ZSwgaW50IGVmbGFncykKIAkJICogc3VicGxhbiwgd2UgY2FuIGZpbGwg YXNfdmFsaWRfc3VicGxhbnMgaW1tZWRpYXRlbHksIHByZXZlbnRpbmcKIAkJICogbGF0ZXIgY2Fs bHMgdG8gRXhlY0ZpbmRNYXRjaGluZ1N1YlBsYW5zLgogCQkgKi8KLQkJaWYgKCFwcnVuZXN0YXRl LT5kb19leGVjX3BydW5lICYmIG5wbGFucyA+IDApCisJCWlmIChhcHBlbmRzdGF0ZS0+YXNfcHJ1 bmVfc3RhdGUgPT0gTlVMTCB8fAorCQkJKCFhcHBlbmRzdGF0ZS0+YXNfcHJ1bmVfc3RhdGUtPmRv X2V4ZWNfcHJ1bmUgJiYgbnBsYW5zID4gMCkpCiAJCQlhcHBlbmRzdGF0ZS0+YXNfdmFsaWRfc3Vi cGxhbnMgPSBibXNfYWRkX3JhbmdlKE5VTEwsIDAsIG5wbGFucyAtIDEpOwogCX0KIAllbHNlCmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlTWVyZ2VBcHBlbmQuYyBiL3NyYy9i YWNrZW5kL2V4ZWN1dG9yL25vZGVNZXJnZUFwcGVuZC5jCmluZGV4IDlhOWYyOWU4NDUuLjRiMDRm Y2RiYzIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVNZXJnZUFwcGVuZC5j CisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVNZXJnZUFwcGVuZC5jCkBAIC01NCw2ICs1 NCw1NSBAQCB0eXBlZGVmIGludDMyIFNsb3ROdW1iZXI7CiBzdGF0aWMgVHVwbGVUYWJsZVNsb3Qg KkV4ZWNNZXJnZUFwcGVuZChQbGFuU3RhdGUgKnBzdGF0ZSk7CiBzdGF0aWMgaW50CWhlYXBfY29t cGFyZV9zbG90cyhEYXR1bSBhLCBEYXR1bSBiLCB2b2lkICphcmcpOwogCisvKiAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg KgkJRXhlY0dldE1lcmdlQXBwZW5kTG9ja1JlbHMKKyAqCQkJRG8gRXhlY0dldExvY2tSZWxzKCkn cyB3b3JrIGZvciBhIE1lcmdlQXBwZW5kIHBsYW4KKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworYm9vbAorRXhl Y0dldE1lcmdlQXBwZW5kTG9ja1JlbHMoTWVyZ2VBcHBlbmQgKm5vZGUsIEV4ZWNHZXRMb2NrUmVs c0NvbnRleHQgKmNvbnRleHQpCit7CisJUGFydGl0aW9uUHJ1bmVJbmZvICpwcnVuZWluZm8gPSBu b2RlLT5wYXJ0X3BydW5lX2luZm87CisKKwkvKgorCSAqIE11c3QgYWx3YXlzIGxvY2sgYWxsIHRo ZSBwYXJ0aXRpb25lZCB0YWJsZXMgd2hvc2UgZGlyZWN0IGFuZCBpbmRpcmVjdAorCSAqIHBhcnRp dGlvbnMgd2lsbCBiZSBzY2FubmVkIGJ5IHRoaXMgQXBwZW5kLgorCSAqLworCWNvbnRleHQtPmxv Y2tyZWxzID0gYm1zX2FkZF9tZW1iZXJzKGNvbnRleHQtPmxvY2tyZWxzLAorCQkJCQkJCQkJCW5v ZGUtPnBhcnRpdGlvbmVkX3JlbHMpOworCisJLyoKKwkgKiBOb3cgcmVjdXJzZSB0byBzdWJwbGFu cyB0byBhZGQgcmVsYXRpb25zIHNjYW5uZWQgdGhlcmVpbi4KKwkgKgorCSAqIElmIGluaXRpYWwg cHJ1bmluZyBjYW4gYmUgZG9uZSwgZG8gdGhhdCBub3cgYW5kIG9ubHkgcmVjdXJzZSB0byB0aGUK KwkgKiBzdXJ2aXZpbmcgc3VicGxhbnMuCisJICovCisJaWYgKHBydW5laW5mbyAmJiBwcnVuZWlu Zm8tPm5lZWRzX2luaXRfcHJ1bmluZykKKwl7CisJCUxpc3QJICAgKnN1YnBsYW5zID0gbm9kZS0+ bWVyZ2VwbGFuczsKKwkJQml0bWFwc2V0ICAqdmFsaWRzdWJwbGFuczsKKwkJaW50CQkJaTsKKwor CQl2YWxpZHN1YnBsYW5zID0gRXhlY0dldExvY2tSZWxzRG9Jbml0aWFsUHJ1bmluZygoUGxhbiAq KSBub2RlLAorCQkJCQkJCQkJCQkJCQljb250ZXh0LCBwcnVuZWluZm8pOworCisJCS8qIFJlY3Vy c2UgdG8gc3Vydml2aW5nIHN1YnBsYW5zLiAqLworCQlpID0gLTE7CisJCXdoaWxlICgoaSA9IGJt c19uZXh0X21lbWJlcih2YWxpZHN1YnBsYW5zLCBpKSkgPj0gMCkKKwkJeworCQkJUGxhbiAgICpz dWJwbGFuID0gbGlzdF9udGgoc3VicGxhbnMsIGkpOworCisJCQkodm9pZCkgRXhlY0dldExvY2tS ZWxzKHN1YnBsYW4sIGNvbnRleHQpOworCQl9CisKKwkJLyogZG9uZSB3aXRoIHRoaXMgbm9kZSAq LworCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwkvKiBUZWxsIHRoZSBjYWxsZXIgdG8gcmVjdXJzZSB0 byAqYWxsKiB0aGUgc3VicGxhbnMuICovCisJcmV0dXJuIGZhbHNlOworfQorCiAKIC8qIC0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KICAqCQlFeGVjSW5pdE1lcmdlQXBwZW5kCkBAIC0xMDMsNyArMTUyLDggQEAgRXhlY0luaXRN ZXJnZUFwcGVuZChNZXJnZUFwcGVuZCAqbm9kZSwgRVN0YXRlICplc3RhdGUsIGludCBlZmxhZ3Mp CiAJCSAqIHN1YnBsYW4sIHdlIGNhbiBmaWxsIGFzX3ZhbGlkX3N1YnBsYW5zIGltbWVkaWF0ZWx5 LCBwcmV2ZW50aW5nCiAJCSAqIGxhdGVyIGNhbGxzIHRvIEV4ZWNGaW5kTWF0Y2hpbmdTdWJQbGFu cy4KIAkJICovCi0JCWlmICghcHJ1bmVzdGF0ZS0+ZG9fZXhlY19wcnVuZSAmJiBucGxhbnMgPiAw KQorCQlpZiAobWVyZ2VzdGF0ZS0+bXNfcHJ1bmVfc3RhdGUgPT0gTlVMTCB8fAorCQkJKCFtZXJn ZXN0YXRlLT5tc19wcnVuZV9zdGF0ZS0+ZG9fZXhlY19wcnVuZSAmJiBucGxhbnMgPiAwKSkKIAkJ CW1lcmdlc3RhdGUtPm1zX3ZhbGlkX3N1YnBsYW5zID0gYm1zX2FkZF9yYW5nZShOVUxMLCAwLCBu cGxhbnMgLSAxKTsKIAl9CiAJZWxzZQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Iv bm9kZU1vZGlmeVRhYmxlLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlTW9kaWZ5VGFibGUu YwppbmRleCA3MDFmZTA1Mjk2Li4yM2RmM2VmZWYwIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9l eGVjdXRvci9ub2RlTW9kaWZ5VGFibGUuYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2Rl TW9kaWZ5VGFibGUuYwpAQCAtMzAwOCw2ICszMDA4LDMxIEBAIEV4ZWNMb29rdXBSZXN1bHRSZWxC eU9pZChNb2RpZnlUYWJsZVN0YXRlICpub2RlLCBPaWQgcmVzdWx0b2lkLAogCXJldHVybiBOVUxM OwogfQogCisvKgorICogRXhlY0dldE1vZGlmeVRhYmxlTG9ja1JlbHMKKyAqIAkJRG8gRXhlY0dl dExvY2tSZWxzKCkncyB3b3JrIGZvciBhIE1vZGlmeVRhYmxlIHBsYW4KKyAqLworYm9vbAorRXhl Y0dldE1vZGlmeVRhYmxlTG9ja1JlbHMoTW9kaWZ5VGFibGUgKnBsYW4sIEV4ZWNHZXRMb2NrUmVs c0NvbnRleHQgKmNvbnRleHQpCit7CisJTGlzdENlbGwgKmxjOworCisJLyogRmlyc3QgYWRkIHRo ZSByZXN1bHQgcmVsYXRpb24gUlRJcyBtZW50aW9uZWQgaW4gdGhlIG5vZGUuICovCisJaWYgKHBs YW4tPnJvb3RSZWxhdGlvbiA+IDApCisJCWNvbnRleHQtPmxvY2tyZWxzID0gYm1zX2FkZF9tZW1i ZXIoY29udGV4dC0+bG9ja3JlbHMsCisJCQkJCQkJCQkJICAgcGxhbi0+cm9vdFJlbGF0aW9uKTsK Kwljb250ZXh0LT5sb2NrcmVscyA9IGJtc19hZGRfbWVtYmVyKGNvbnRleHQtPmxvY2tyZWxzLAor CQkJCQkJCQkJICAgcGxhbi0+bm9taW5hbFJlbGF0aW9uKTsKKwlmb3JlYWNoKGxjLCBwbGFuLT5y ZXN1bHRSZWxhdGlvbnMpCisJeworCQljb250ZXh0LT5sb2NrcmVscyA9IGJtc19hZGRfbWVtYmVy KGNvbnRleHQtPmxvY2tyZWxzLAorCQkJCQkJCQkJCSAgIGxmaXJzdF9pbnQobGMpKTsKKwl9CisK KwkvKiBUZWxsIHRoZSBjYWxsZXIgdG8gcmVjdXJzZSB0byB0aGUgc3VicGxhbiAob3V0ZXJQbGFu KHBsYW4pKS4gKi8KKwlyZXR1cm4gZmFsc2U7Cit9CisKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqCQlFeGVjSW5p dE1vZGlmeVRhYmxlCiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRv ci9zcGkuYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL3NwaS5jCmluZGV4IGE4MmU5ODY2NjcuLjIx MDcwMDk1OTEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL3NwaS5jCisrKyBiL3Ny Yy9iYWNrZW5kL2V4ZWN1dG9yL3NwaS5jCkBAIC0xNTc4LDYgKzE1NzgsNyBAQCBTUElfY3Vyc29y X29wZW5faW50ZXJuYWwoY29uc3QgY2hhciAqbmFtZSwgU1BJUGxhblB0ciBwbGFuLAogCUNhY2hl ZFBsYW5Tb3VyY2UgKnBsYW5zb3VyY2U7CiAJQ2FjaGVkUGxhbiAqY3BsYW47CiAJTGlzdAkgICAq c3RtdF9saXN0OworCUxpc3QJICAgKmV4ZWNsb2NrcmVsc2luZm9fbGlzdDsKIAljaGFyCSAgICpx dWVyeV9zdHJpbmc7CiAJU25hcHNob3QJc25hcHNob3Q7CiAJTWVtb3J5Q29udGV4dCBvbGRjb250 ZXh0OwpAQCAtMTY1OSw2ICsxNjYwLDcgQEAgU1BJX2N1cnNvcl9vcGVuX2ludGVybmFsKGNvbnN0 IGNoYXIgKm5hbWUsIFNQSVBsYW5QdHIgcGxhbiwKIAkvKiBSZXBsYW4gaWYgbmVlZGVkLCBhbmQg aW5jcmVtZW50IHBsYW4gcmVmY291bnQgZm9yIHBvcnRhbCAqLwogCWNwbGFuID0gR2V0Q2FjaGVk UGxhbihwbGFuc291cmNlLCBwYXJhbUxJLCBOVUxMLCBfU1BJX2N1cnJlbnQtPnF1ZXJ5RW52KTsK IAlzdG10X2xpc3QgPSBjcGxhbi0+c3RtdF9saXN0OworCWV4ZWNsb2NrcmVsc2luZm9fbGlzdCA9 IGNwbGFuLT5leGVjbG9ja3JlbHNpbmZvX2xpc3Q7CiAKIAlpZiAoIXBsYW4tPnNhdmVkKQogCXsK QEAgLTE2NzAsNiArMTY3Miw3IEBAIFNQSV9jdXJzb3Jfb3Blbl9pbnRlcm5hbChjb25zdCBjaGFy ICpuYW1lLCBTUElQbGFuUHRyIHBsYW4sCiAJCSAqLwogCQlvbGRjb250ZXh0ID0gTWVtb3J5Q29u dGV4dFN3aXRjaFRvKHBvcnRhbC0+cG9ydGFsQ29udGV4dCk7CiAJCXN0bXRfbGlzdCA9IGNvcHlP YmplY3Qoc3RtdF9saXN0KTsKKwkJZXhlY2xvY2tyZWxzaW5mb19saXN0ID0gY29weU9iamVjdChl eGVjbG9ja3JlbHNpbmZvX2xpc3QpOwogCQlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY29udGV4 dCk7CiAJCVJlbGVhc2VDYWNoZWRQbGFuKGNwbGFuLCBOVUxMKTsKIAkJY3BsYW4gPSBOVUxMOwkJ CS8qIHBvcnRhbCBzaG91bGRuJ3QgZGVwZW5kIG9uIGNwbGFuICovCkBAIC0xNjgzLDYgKzE2ODYs NyBAQCBTUElfY3Vyc29yX29wZW5faW50ZXJuYWwoY29uc3QgY2hhciAqbmFtZSwgU1BJUGxhblB0 ciBwbGFuLAogCQkJCQkgIHF1ZXJ5X3N0cmluZywKIAkJCQkJICBwbGFuc291cmNlLT5jb21tYW5k VGFnLAogCQkJCQkgIHN0bXRfbGlzdCwKKwkJCQkJICBleGVjbG9ja3JlbHNpbmZvX2xpc3QsCiAJ CQkJCSAgY3BsYW4pOwogCiAJLyoKQEAgLTI0NzMsNyArMjQ3Nyw5IEBAIF9TUElfZXhlY3V0ZV9w bGFuKFNQSVBsYW5QdHIgcGxhbiwgY29uc3QgU1BJRXhlY3V0ZU9wdGlvbnMgKm9wdGlvbnMsCiAJ ewogCQlDYWNoZWRQbGFuU291cmNlICpwbGFuc291cmNlID0gKENhY2hlZFBsYW5Tb3VyY2UgKikg bGZpcnN0KGxjMSk7CiAJCUxpc3QJICAgKnN0bXRfbGlzdDsKLQkJTGlzdENlbGwgICAqbGMyOwor CQlMaXN0CSAgICpleGVjbG9ja3JlbHNpbmZvX2xpc3Q7CisJCUxpc3RDZWxsICAgKmxjMiwKKwkJ CQkgICAqbGMzOwogCiAJCXNwaWNhbGxiYWNrYXJnLnF1ZXJ5ID0gcGxhbnNvdXJjZS0+cXVlcnlf c3RyaW5nOwogCkBAIC0yNTUyLDYgKzI1NTgsNyBAQCBfU1BJX2V4ZWN1dGVfcGxhbihTUElQbGFu UHRyIHBsYW4sIGNvbnN0IFNQSUV4ZWN1dGVPcHRpb25zICpvcHRpb25zLAogCQkJCQkJCSAgcGxh bl9vd25lciwgX1NQSV9jdXJyZW50LT5xdWVyeUVudik7CiAKIAkJc3RtdF9saXN0ID0gY3BsYW4t PnN0bXRfbGlzdDsKKwkJZXhlY2xvY2tyZWxzaW5mb19saXN0ID0gY3BsYW4tPmV4ZWNsb2NrcmVs c2luZm9fbGlzdDsKIAogCQkvKgogCQkgKiBJZiB3ZSB3ZXJlbid0IGdpdmVuIGEgc3BlY2lmaWMg c25hcHNob3QgdG8gdXNlLCBhbmQgdGhlIHN0YXRlbWVudApAQCAtMjU4OSw5ICsyNTk2LDEwIEBA IF9TUElfZXhlY3V0ZV9wbGFuKFNQSVBsYW5QdHIgcGxhbiwgY29uc3QgU1BJRXhlY3V0ZU9wdGlv bnMgKm9wdGlvbnMsCiAJCQl9CiAJCX0KIAotCQlmb3JlYWNoKGxjMiwgc3RtdF9saXN0KQorCQlm b3Jib3RoKGxjMiwgc3RtdF9saXN0LCBsYzMsIGV4ZWNsb2NrcmVsc2luZm9fbGlzdCkKIAkJewog CQkJUGxhbm5lZFN0bXQgKnN0bXQgPSBsZmlyc3Rfbm9kZShQbGFubmVkU3RtdCwgbGMyKTsKKwkJ CUV4ZWNMb2NrUmVsc0luZm8gKmV4ZWNsb2NrcmVsc2luZm8gPSBsZmlyc3Rfbm9kZShFeGVjTG9j a1JlbHNJbmZvLCBsYzMpOwogCQkJYm9vbAkJY2FuU2V0VGFnID0gc3RtdC0+Y2FuU2V0VGFnOwog CQkJRGVzdFJlY2VpdmVyICpkZXN0OwogCkBAIC0yNjYzLDcgKzI2NzEsNyBAQCBfU1BJX2V4ZWN1 dGVfcGxhbihTUElQbGFuUHRyIHBsYW4sIGNvbnN0IFNQSUV4ZWN1dGVPcHRpb25zICpvcHRpb25z LAogCQkJCWVsc2UKIAkJCQkJc25hcCA9IEludmFsaWRTbmFwc2hvdDsKIAotCQkJCXFkZXNjID0g Q3JlYXRlUXVlcnlEZXNjKHN0bXQsCisJCQkJcWRlc2MgPSBDcmVhdGVRdWVyeURlc2Moc3RtdCwg ZXhlY2xvY2tyZWxzaW5mbywKIAkJCQkJCQkJCQlwbGFuc291cmNlLT5xdWVyeV9zdHJpbmcsCiAJ CQkJCQkJCQkJc25hcCwgY3Jvc3NjaGVja19zbmFwc2hvdCwKIAkJCQkJCQkJCQlkZXN0LApkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvbm9kZXMvY29weWZ1bmNzLmMgYi9zcmMvYmFja2VuZC9ub2Rl cy9jb3B5ZnVuY3MuYwppbmRleCBkNGI1Y2M3ZTU5Li42MzE3MjdkMzEwIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9ub2Rlcy9jb3B5ZnVuY3MuYworKysgYi9zcmMvYmFja2VuZC9ub2Rlcy9jb3B5 ZnVuY3MuYwpAQCAtNjgsNiArNjgsMTMgQEAKIAkJfSBcCiAJfSB3aGlsZSAoMCkKIAorLyogQ29w eSBhIGZpZWxkIHRoYXQgaXMgYW4gYXJyYXkgd2l0aCBudW1FbGVtIGludHMgKi8KKyNkZWZpbmUg Q09QWV9JTlRfQVJSQVkoZmxkbmFtZSwgbnVtRWxlbSkgXAorCWRvIHsgXAorCQluZXdub2RlLT5m bGRuYW1lID0gKG51bUVsZW0pID4gMCA/IHBhbGxvYygobnVtRWxlbSkgKiBzaXplb2YoaW50KSkg OiBOVUxMOyBcCisJCW1lbWNweShuZXdub2RlLT5mbGRuYW1lLCBmcm9tLT5mbGRuYW1lLCBzaXpl b2YoaW50KSAqIChudW1FbGVtKSk7IFwKKwl9IHdoaWxlICgwKQorCiAvKiBDb3B5IGEgcGFyc2Ug bG9jYXRpb24gZmllbGQgKGZvciBDb3B5LCB0aGlzIGlzIHNhbWUgYXMgc2NhbGFyIGNhc2UpICov CiAjZGVmaW5lIENPUFlfTE9DQVRJT05fRklFTEQoZmxkbmFtZSkgXAogCShuZXdub2RlLT5mbGRu YW1lID0gZnJvbS0+ZmxkbmFtZSkKQEAgLTk0LDggKzEwMSwxMCBAQCBfY29weVBsYW5uZWRTdG10 KGNvbnN0IFBsYW5uZWRTdG10ICpmcm9tKQogCUNPUFlfU0NBTEFSX0ZJRUxEKHRyYW5zaWVudFBs YW4pOwogCUNPUFlfU0NBTEFSX0ZJRUxEKGRlcGVuZHNPblJvbGUpOwogCUNPUFlfU0NBTEFSX0ZJ RUxEKHBhcmFsbGVsTW9kZU5lZWRlZCk7CisJQ09QWV9TQ0FMQVJfRklFTEQoY29udGFpbnNJbml0 aWFsUHJ1bmluZyk7CiAJQ09QWV9TQ0FMQVJfRklFTEQoaml0RmxhZ3MpOwogCUNPUFlfTk9ERV9G SUVMRChwbGFuVHJlZSk7CisJQ09QWV9TQ0FMQVJfRklFTEQobnVtUGxhbk5vZGVzKTsKIAlDT1BZ X05PREVfRklFTEQocnRhYmxlKTsKIAlDT1BZX05PREVfRklFTEQocmVzdWx0UmVsYXRpb25zKTsK IAlDT1BZX05PREVfRklFTEQoYXBwZW5kUmVsYXRpb25zKTsKQEAgLTEyODEsNiArMTI5MCw4IEBA IF9jb3B5UGFydGl0aW9uUHJ1bmVJbmZvKGNvbnN0IFBhcnRpdGlvblBydW5lSW5mbyAqZnJvbSkK IAlQYXJ0aXRpb25QcnVuZUluZm8gKm5ld25vZGUgPSBtYWtlTm9kZShQYXJ0aXRpb25QcnVuZUlu Zm8pOwogCiAJQ09QWV9OT0RFX0ZJRUxEKHBydW5lX2luZm9zKTsKKwlDT1BZX1NDQUxBUl9GSUVM RChuZWVkc19pbml0X3BydW5pbmcpOworCUNPUFlfU0NBTEFSX0ZJRUxEKG5lZWRzX2V4ZWNfcHJ1 bmluZyk7CiAJQ09QWV9CSVRNQVBTRVRfRklFTEQob3RoZXJfc3VicGxhbnMpOwogCiAJcmV0dXJu IG5ld25vZGU7CkBAIC01MTM3LDYgKzUxNDgsMzMgQEAgX2NvcHlFeHRlbnNpYmxlTm9kZShjb25z dCBFeHRlbnNpYmxlTm9kZSAqZnJvbSkKIAlyZXR1cm4gbmV3bm9kZTsKIH0KIAorLyogKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KgorICoJCQkJCWV4ZWNub2Rlcy5oIGNvcHkgZnVuY3Rpb25zCisgKiAqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KK3N0 YXRpYyBFeGVjTG9ja1JlbHNJbmZvICoKK19jb3B5RXhlY0xvY2tSZWxzSW5mbyhjb25zdCBFeGVj TG9ja1JlbHNJbmZvICpmcm9tKQoreworCUV4ZWNMb2NrUmVsc0luZm8gKm5ld25vZGUgPSBtYWtl Tm9kZShFeGVjTG9ja1JlbHNJbmZvKTsKKworCUNPUFlfQklUTUFQU0VUX0ZJRUxEKGxvY2tyZWxz KTsKKwlDT1BZX1NDQUxBUl9GSUVMRChudW1QbGFuTm9kZXMpOworCUNPUFlfTk9ERV9GSUVMRChp bml0UHJ1bmluZ091dHB1dHMpOworCUNPUFlfSU5UX0FSUkFZKGlwb0luZGV4ZXMsIGZyb20tPm51 bVBsYW5Ob2Rlcyk7CisKKwlyZXR1cm4gbmV3bm9kZTsKK30KKworc3RhdGljIFBsYW5Jbml0UHJ1 bmluZ091dHB1dCAqCitfY29weVBsYW5Jbml0UHJ1bmluZ091dHB1dChjb25zdCBQbGFuSW5pdFBy dW5pbmdPdXRwdXQgKmZyb20pCit7CisJUGxhbkluaXRQcnVuaW5nT3V0cHV0ICpuZXdub2RlID0g bWFrZU5vZGUoUGxhbkluaXRQcnVuaW5nT3V0cHV0KTsKKworCUNPUFlfQklUTUFQU0VUX0ZJRUxE KGluaXRpYWxseV92YWxpZF9zdWJwbGFucyk7CisKKwlyZXR1cm4gbmV3bm9kZTsKK30KKwogLyog KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKgogICoJCQkJCXZhbHVlLmggY29weSBmdW5jdGlvbnMKICAqICoqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTUx OTEsNyArNTIyOSw2IEBAIF9jb3B5Qml0U3RyaW5nKGNvbnN0IEJpdFN0cmluZyAqZnJvbSkKIAly ZXR1cm4gbmV3bm9kZTsKIH0KIAotCiBzdGF0aWMgRm9yZWlnbktleUNhY2hlSW5mbyAqCiBfY29w eUZvcmVpZ25LZXlDYWNoZUluZm8oY29uc3QgRm9yZWlnbktleUNhY2hlSW5mbyAqZnJvbSkKIHsK QEAgLTYxNzYsNiArNjIxMywxNiBAQCBjb3B5T2JqZWN0SW1wbChjb25zdCB2b2lkICpmcm9tKQog CQkJcmV0dmFsID0gX2NvcHlQdWJsaWNhdGlvblRhYmxlKGZyb20pOwogCQkJYnJlYWs7CiAKKwkJ CS8qCisJCQkgKiBFWEVDVVRJT04gTk9ERVMKKwkJCSAqLworCQljYXNlIFRfRXhlY0xvY2tSZWxz SW5mbzoKKwkJCXJldHZhbCA9IF9jb3B5RXhlY0xvY2tSZWxzSW5mbyhmcm9tKTsKKwkJCWJyZWFr OworCQljYXNlIFRfUGxhbkluaXRQcnVuaW5nT3V0cHV0OgorCQkJcmV0dmFsID0gX2NvcHlQbGFu SW5pdFBydW5pbmdPdXRwdXQoZnJvbSk7CisJCQlicmVhazsKKwogCQkJLyoKIAkJCSAqIE1JU0NF TExBTkVPVVMgTk9ERVMKIAkJCSAqLwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvbm9kZXMvb3V0 ZnVuY3MuYyBiL3NyYy9iYWNrZW5kL25vZGVzL291dGZ1bmNzLmMKaW5kZXggOTkwNTYyNzJmMy4u ZjM2MWQyZTJiYyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvbm9kZXMvb3V0ZnVuY3MuYworKysg Yi9zcmMvYmFja2VuZC9ub2Rlcy9vdXRmdW5jcy5jCkBAIC0zMTIsOCArMzEyLDEwIEBAIF9vdXRQ bGFubmVkU3RtdChTdHJpbmdJbmZvIHN0ciwgY29uc3QgUGxhbm5lZFN0bXQgKm5vZGUpCiAJV1JJ VEVfQk9PTF9GSUVMRCh0cmFuc2llbnRQbGFuKTsKIAlXUklURV9CT09MX0ZJRUxEKGRlcGVuZHNP blJvbGUpOwogCVdSSVRFX0JPT0xfRklFTEQocGFyYWxsZWxNb2RlTmVlZGVkKTsKKwlXUklURV9C T09MX0ZJRUxEKGNvbnRhaW5zSW5pdGlhbFBydW5pbmcpOwogCVdSSVRFX0lOVF9GSUVMRChqaXRG bGFncyk7CiAJV1JJVEVfTk9ERV9GSUVMRChwbGFuVHJlZSk7CisJV1JJVEVfSU5UX0ZJRUxEKG51 bVBsYW5Ob2Rlcyk7CiAJV1JJVEVfTk9ERV9GSUVMRChydGFibGUpOwogCVdSSVRFX05PREVfRklF TEQocmVzdWx0UmVsYXRpb25zKTsKIAlXUklURV9OT0RFX0ZJRUxEKGFwcGVuZFJlbGF0aW9ucyk7 CkBAIC0xMDA3LDYgKzEwMDksOCBAQCBfb3V0UGFydGl0aW9uUHJ1bmVJbmZvKFN0cmluZ0luZm8g c3RyLCBjb25zdCBQYXJ0aXRpb25QcnVuZUluZm8gKm5vZGUpCiAJV1JJVEVfTk9ERV9UWVBFKCJQ QVJUSVRJT05QUlVORUlORk8iKTsKIAogCVdSSVRFX05PREVfRklFTEQocHJ1bmVfaW5mb3MpOwor CVdSSVRFX0JPT0xfRklFTEQobmVlZHNfaW5pdF9wcnVuaW5nKTsKKwlXUklURV9CT09MX0ZJRUxE KG5lZWRzX2V4ZWNfcHJ1bmluZyk7CiAJV1JJVEVfQklUTUFQU0VUX0ZJRUxEKG90aGVyX3N1YnBs YW5zKTsKIH0KIApAQCAtMjc0Nyw2ICsyNzUxLDMxIEBAIF9vdXRFeHRlbnNpYmxlTm9kZShTdHJp bmdJbmZvIHN0ciwgY29uc3QgRXh0ZW5zaWJsZU5vZGUgKm5vZGUpCiAJbWV0aG9kcy0+bm9kZU91 dChzdHIsIG5vZGUpOwogfQogCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKglTdHVmZiBm cm9tIGV4ZWNub2Rlcy5oCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgdm9p ZAorX291dEV4ZWNMb2NrUmVsc0luZm8oU3RyaW5nSW5mbyBzdHIsIGNvbnN0IEV4ZWNMb2NrUmVs c0luZm8gKm5vZGUpCit7CisJV1JJVEVfTk9ERV9UWVBFKCJFWEVDTE9DS1JFTFNJTkZPIik7CisK KwlXUklURV9CSVRNQVBTRVRfRklFTEQobG9ja3JlbHMpOworCVdSSVRFX0lOVF9GSUVMRChudW1Q bGFuTm9kZXMpOworCVdSSVRFX05PREVfRklFTEQoaW5pdFBydW5pbmdPdXRwdXRzKTsKKwlXUklU RV9JTlRfQVJSQVkoaXBvSW5kZXhlcywgbm9kZS0+bnVtUGxhbk5vZGVzKTsKK30KKworc3RhdGlj IHZvaWQKK19vdXRQbGFuSW5pdFBydW5pbmdPdXRwdXQoU3RyaW5nSW5mbyBzdHIsIGNvbnN0IFBs YW5Jbml0UHJ1bmluZ091dHB1dCAqbm9kZSkKK3sKKwlXUklURV9OT0RFX1RZUEUoIlBMQU5JTklU UFJVTklOR09VVFBVVCIpOworCisJV1JJVEVfQklUTUFQU0VUX0ZJRUxEKGluaXRpYWxseV92YWxp ZF9zdWJwbGFucyk7Cit9CisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKICAqCVN0dWZmIGZy b20gcGFyc2Vub2Rlcy5oLgpAQCAtNDYwMCw2ICs0NjI5LDE2IEBAIG91dE5vZGUoU3RyaW5nSW5m byBzdHIsIGNvbnN0IHZvaWQgKm9iaikKIAkJCQlfb3V0SnNvbkNvbnN0cnVjdG9yRXhwcihzdHIs IG9iaik7CiAJCQkJYnJlYWs7CiAKKwkJCQkvKgorCQkJCSAqIEVYRUNVVElPTiBOT0RFUworCQkJ CSAqLworCQkJY2FzZSBUX0V4ZWNMb2NrUmVsc0luZm86CisJCQkJX291dEV4ZWNMb2NrUmVsc0lu Zm8oc3RyLCBvYmopOworCQkJCWJyZWFrOworCQkJY2FzZSBUX1BsYW5Jbml0UHJ1bmluZ091dHB1 dDoKKwkJCQlfb3V0UGxhbkluaXRQcnVuaW5nT3V0cHV0KHN0ciwgb2JqKTsKKwkJCQlicmVhazsK KwogCQkJZGVmYXVsdDoKIAogCQkJCS8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9ub2Rlcy9y ZWFkZnVuY3MuYyBiL3NyYy9iYWNrZW5kL25vZGVzL3JlYWRmdW5jcy5jCmluZGV4IDc1MzZmMjE2 YmQuLjQxZmM3MTA5OTkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL25vZGVzL3JlYWRmdW5jcy5j CisrKyBiL3NyYy9iYWNrZW5kL25vZGVzL3JlYWRmdW5jcy5jCkBAIC0xNjUwLDggKzE2NTAsMTAg QEAgX3JlYWRQbGFubmVkU3RtdCh2b2lkKQogCVJFQURfQk9PTF9GSUVMRCh0cmFuc2llbnRQbGFu KTsKIAlSRUFEX0JPT0xfRklFTEQoZGVwZW5kc09uUm9sZSk7CiAJUkVBRF9CT09MX0ZJRUxEKHBh cmFsbGVsTW9kZU5lZWRlZCk7CisJUkVBRF9CT09MX0ZJRUxEKGNvbnRhaW5zSW5pdGlhbFBydW5p bmcpOwogCVJFQURfSU5UX0ZJRUxEKGppdEZsYWdzKTsKIAlSRUFEX05PREVfRklFTEQocGxhblRy ZWUpOworCVJFQURfSU5UX0ZJRUxEKG51bVBsYW5Ob2Rlcyk7CiAJUkVBRF9OT0RFX0ZJRUxEKHJ0 YWJsZSk7CiAJUkVBRF9OT0RFX0ZJRUxEKHJlc3VsdFJlbGF0aW9ucyk7CiAJUkVBRF9OT0RFX0ZJ RUxEKGFwcGVuZFJlbGF0aW9ucyk7CkBAIC0yNjAyLDYgKzI2MDQsOCBAQCBfcmVhZFBhcnRpdGlv blBydW5lSW5mbyh2b2lkKQogCVJFQURfTE9DQUxTKFBhcnRpdGlvblBydW5lSW5mbyk7CiAKIAlS RUFEX05PREVfRklFTEQocHJ1bmVfaW5mb3MpOworCVJFQURfQk9PTF9GSUVMRChuZWVkc19pbml0 X3BydW5pbmcpOworCVJFQURfQk9PTF9GSUVMRChuZWVkc19leGVjX3BydW5pbmcpOwogCVJFQURf QklUTUFQU0VUX0ZJRUxEKG90aGVyX3N1YnBsYW5zKTsKIAogCVJFQURfRE9ORSgpOwpAQCAtMjc3 MSw2ICsyNzc1LDM1IEBAIF9yZWFkUGFydGl0aW9uUmFuZ2VEYXR1bSh2b2lkKQogCVJFQURfRE9O RSgpOwogfQogCisvKgorICogX3JlYWRFeGVjTG9ja1JlbHNJbmZvCisgKi8KK3N0YXRpYyBFeGVj TG9ja1JlbHNJbmZvICoKK19yZWFkRXhlY0xvY2tSZWxzSW5mbyh2b2lkKQoreworCVJFQURfTE9D QUxTKEV4ZWNMb2NrUmVsc0luZm8pOworCisJUkVBRF9CSVRNQVBTRVRfRklFTEQobG9ja3JlbHMp OworCVJFQURfSU5UX0ZJRUxEKG51bVBsYW5Ob2Rlcyk7CisJUkVBRF9OT0RFX0ZJRUxEKGluaXRQ cnVuaW5nT3V0cHV0cyk7CisJUkVBRF9JTlRfQVJSQVkoaXBvSW5kZXhlcywgbG9jYWxfbm9kZS0+ bnVtUGxhbk5vZGVzKTsKKworCVJFQURfRE9ORSgpOworfQorCisvKgorICogX3JlYWRQbGFuSW5p dFBydW5pbmdPdXRwdXQKKyAqLworc3RhdGljIFBsYW5Jbml0UHJ1bmluZ091dHB1dCAqCitfcmVh ZFBsYW5Jbml0UHJ1bmluZ091dHB1dCh2b2lkKQoreworCVJFQURfTE9DQUxTKFBsYW5Jbml0UHJ1 bmluZ091dHB1dCk7CisKKwlSRUFEX0JJVE1BUFNFVF9GSUVMRChpbml0aWFsbHlfdmFsaWRfc3Vi cGxhbnMpOworCisJUkVBRF9ET05FKCk7Cit9CisKIC8qCiAgKiBwYXJzZU5vZGVTdHJpbmcKICAq CkBAIC0zMDUwLDYgKzMwODMsMTAgQEAgcGFyc2VOb2RlU3RyaW5nKHZvaWQpCiAJCXJldHVybl92 YWx1ZSA9IF9yZWFkSnNvblZhbHVlRXhwcigpOwogCWVsc2UgaWYgKE1BVENIKCJKU09OQ1RPUkVY UFIiLCAxMikpCiAJCXJldHVybl92YWx1ZSA9IF9yZWFkSnNvbkNvbnN0cnVjdG9yRXhwcigpOwor CWVsc2UgaWYgKE1BVENIKCJFWEVDTE9DS1JFTFNJTkZPIiwgMTYpKQorCQlyZXR1cm5fdmFsdWUg PSBfcmVhZEV4ZWNMb2NrUmVsc0luZm8oKTsKKwllbHNlIGlmIChNQVRDSCgiUExBTklOSVRQUlVO SU5HT1VUUFVUIiwgMjEpKQorCQlyZXR1cm5fdmFsdWUgPSBfcmVhZFBsYW5Jbml0UHJ1bmluZ091 dHB1dCgpOwogCWVsc2UKIAl7CiAJCWVsb2coRVJST1IsICJiYWRseSBmb3JtYXR0ZWQgbm9kZSBz dHJpbmcgXCIlLjMyc1wiLi4uIiwgdG9rZW4pOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0 aW1pemVyL3BsYW4vcGxhbm5lci5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5l ci5jCmluZGV4IDM3NGE5ZDk3NTMuLjMyOWZiOWQ2ZTcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L29wdGltaXplci9wbGFuL3BsYW5uZXIuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxh bi9wbGFubmVyLmMKQEAgLTUxNyw3ICs1MTcsOSBAQCBzdGFuZGFyZF9wbGFubmVyKFF1ZXJ5ICpw YXJzZSwgY29uc3QgY2hhciAqcXVlcnlfc3RyaW5nLCBpbnQgY3Vyc29yT3B0aW9ucywKIAlyZXN1 bHQtPnRyYW5zaWVudFBsYW4gPSBnbG9iLT50cmFuc2llbnRQbGFuOwogCXJlc3VsdC0+ZGVwZW5k c09uUm9sZSA9IGdsb2ItPmRlcGVuZHNPblJvbGU7CiAJcmVzdWx0LT5wYXJhbGxlbE1vZGVOZWVk ZWQgPSBnbG9iLT5wYXJhbGxlbE1vZGVOZWVkZWQ7CisJcmVzdWx0LT5jb250YWluc0luaXRpYWxQ cnVuaW5nID0gZ2xvYi0+Y29udGFpbnNJbml0aWFsUHJ1bmluZzsKIAlyZXN1bHQtPnBsYW5UcmVl ID0gdG9wX3BsYW47CisJcmVzdWx0LT5udW1QbGFuTm9kZXMgPSBnbG9iLT5sYXN0UGxhbk5vZGVJ ZDsKIAlyZXN1bHQtPnJ0YWJsZSA9IGdsb2ItPmZpbmFscnRhYmxlOwogCXJlc3VsdC0+cmVzdWx0 UmVsYXRpb25zID0gZ2xvYi0+cmVzdWx0UmVsYXRpb25zOwogCXJlc3VsdC0+YXBwZW5kUmVsYXRp b25zID0gZ2xvYi0+YXBwZW5kUmVsYXRpb25zOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0 aW1pemVyL3BsYW4vc2V0cmVmcy5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vc2V0cmVm cy5jCmluZGV4IGRiZGViOGVjOWQuLmFjNzk1YWU5ZDkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L29wdGltaXplci9wbGFuL3NldHJlZnMuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxh bi9zZXRyZWZzLmMKQEAgLTE1NjEsNiArMTU2MSw5IEBAIHNldF9hcHBlbmRfcmVmZXJlbmNlcyhQ bGFubmVySW5mbyAqcm9vdCwKIAkJCQlwaW5mby0+cnRpbmRleCArPSBydG9mZnNldDsKIAkJCX0K IAkJfQorCisJCWlmIChhcGxhbi0+cGFydF9wcnVuZV9pbmZvLT5uZWVkc19pbml0X3BydW5pbmcp CisJCQlyb290LT5nbG9iLT5jb250YWluc0luaXRpYWxQcnVuaW5nID0gdHJ1ZTsKIAl9CiAKIAkv KiBXZSBkb24ndCBuZWVkIHRvIHJlY3Vyc2UgdG8gbGVmdHRyZWUgb3IgcmlnaHR0cmVlIC4uLiAq LwpAQCAtMTY0OCw2ICsxNjUxLDkgQEAgc2V0X21lcmdlYXBwZW5kX3JlZmVyZW5jZXMoUGxhbm5l ckluZm8gKnJvb3QsCiAJCQkJcGluZm8tPnJ0aW5kZXggKz0gcnRvZmZzZXQ7CiAJCQl9CiAJCX0K KworCQlpZiAobXBsYW4tPnBhcnRfcHJ1bmVfaW5mby0+bmVlZHNfaW5pdF9wcnVuaW5nKQorCQkJ cm9vdC0+Z2xvYi0+Y29udGFpbnNJbml0aWFsUHJ1bmluZyA9IHRydWU7CiAJfQogCiAJLyogV2Ug ZG9uJ3QgbmVlZCB0byByZWN1cnNlIHRvIGxlZnR0cmVlIG9yIHJpZ2h0dHJlZSAuLi4gKi8KZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3BhcnRpdGlvbmluZy9wYXJ0cHJ1bmUuYyBiL3NyYy9iYWNr ZW5kL3BhcnRpdGlvbmluZy9wYXJ0cHJ1bmUuYwppbmRleCA3MDgwY2IyNWQ5Li4zMzIyZGM3OWYy IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9wYXJ0aXRpb25pbmcvcGFydHBydW5lLmMKKysrIGIv c3JjL2JhY2tlbmQvcGFydGl0aW9uaW5nL3BhcnRwcnVuZS5jCkBAIC0xNDQsNyArMTQ0LDkgQEAg c3RhdGljIExpc3QgKm1ha2VfcGFydGl0aW9uZWRyZWxfcHJ1bmVpbmZvKFBsYW5uZXJJbmZvICpy b290LAogCQkJCQkJCQkJCSAgIExpc3QgKnBydW5lcXVhbCwKIAkJCQkJCQkJCQkgICBCaXRtYXBz ZXQgKnBhcnRyZWxpZHMsCiAJCQkJCQkJCQkJICAgaW50ICpyZWxpZF9zdWJwbGFuX21hcCwKLQkJ CQkJCQkJCQkgICBCaXRtYXBzZXQgKiptYXRjaGVkc3VicGxhbnMpOworCQkJCQkJCQkJCSAgIEJp dG1hcHNldCAqKm1hdGNoZWRzdWJwbGFucywKKwkJCQkJCQkJCQkgICBib29sICpuZWVkc19pbml0 X3BydW5pbmcsCisJCQkJCQkJCQkJICAgYm9vbCAqbmVlZHNfZXhlY19wcnVuaW5nKTsKIHN0YXRp YyB2b2lkIGdlbl9wYXJ0cHJ1bmVfc3RlcHMoUmVsT3B0SW5mbyAqcmVsLCBMaXN0ICpjbGF1c2Vz LAogCQkJCQkJCQlQYXJ0Q2xhdXNlVGFyZ2V0IHRhcmdldCwKIAkJCQkJCQkJR2VuZXJhdGVQcnVu aW5nU3RlcHNDb250ZXh0ICpjb250ZXh0KTsKQEAgLTIzMCw2ICsyMzIsOCBAQCBtYWtlX3BhcnRp dGlvbl9wcnVuZWluZm8oUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnBhcmVudHJlbCwK IAlpbnQJCSAgICpyZWxpZF9zdWJwbGFuX21hcDsKIAlMaXN0Q2VsbCAgICpsYzsKIAlpbnQJCQlp OworCWJvb2wJCW5lZWRzX2luaXRfcHJ1bmluZyA9IGZhbHNlOworCWJvb2wJCW5lZWRzX2V4ZWNf cHJ1bmluZyA9IGZhbHNlOwogCiAJLyoKIAkgKiBTY2FuIHRoZSBzdWJwYXRocyB0byBzZWUgd2hp Y2ggb25lcyBhcmUgc2NhbnMgb2YgcGFydGl0aW9uIGNoaWxkCkBAIC0zMDksMTIgKzMxMywxNiBA QCBtYWtlX3BhcnRpdGlvbl9wcnVuZWluZm8oUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8g KnBhcmVudHJlbCwKIAkJQml0bWFwc2V0ICAqcGFydHJlbGlkcyA9IChCaXRtYXBzZXQgKikgbGZp cnN0KGxjKTsKIAkJTGlzdAkgICAqcGluZm9saXN0OwogCQlCaXRtYXBzZXQgICptYXRjaGVkc3Vi cGxhbnMgPSBOVUxMOworCQlib29sCQlwYXJ0cmVsX25lZWRzX2luaXRfcHJ1bmluZzsKKwkJYm9v bAkJcGFydHJlbF9uZWVkc19leGVjX3BydW5pbmc7CiAKIAkJcGluZm9saXN0ID0gbWFrZV9wYXJ0 aXRpb25lZHJlbF9wcnVuZWluZm8ocm9vdCwgcGFyZW50cmVsLAogCQkJCQkJCQkJCQkJICBwcnVu ZXF1YWwsCiAJCQkJCQkJCQkJCQkgIHBhcnRyZWxpZHMsCiAJCQkJCQkJCQkJCQkgIHJlbGlkX3N1 YnBsYW5fbWFwLAotCQkJCQkJCQkJCQkJICAmbWF0Y2hlZHN1YnBsYW5zKTsKKwkJCQkJCQkJCQkJ CSAgJm1hdGNoZWRzdWJwbGFucywKKwkJCQkJCQkJCQkJCSAgJnBhcnRyZWxfbmVlZHNfaW5pdF9w cnVuaW5nLAorCQkJCQkJCQkJCQkJICAmcGFydHJlbF9uZWVkc19leGVjX3BydW5pbmcpOwogCiAJ CS8qIFdoZW4gcHJ1bmluZyBpcyBwb3NzaWJsZSwgcmVjb3JkIHRoZSBtYXRjaGVkIHN1YnBsYW5z ICovCiAJCWlmIChwaW5mb2xpc3QgIT0gTklMKQpAQCAtMzIzLDYgKzMzMSwxMCBAQCBtYWtlX3Bh cnRpdGlvbl9wcnVuZWluZm8oUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnBhcmVudHJl bCwKIAkJCWFsbG1hdGNoZWRzdWJwbGFucyA9IGJtc19qb2luKG1hdGNoZWRzdWJwbGFucywKIAkJ CQkJCQkJCQkgIGFsbG1hdGNoZWRzdWJwbGFucyk7CiAJCX0KKwkJaWYgKCFuZWVkc19pbml0X3By dW5pbmcpCisJCQluZWVkc19pbml0X3BydW5pbmcgPSBwYXJ0cmVsX25lZWRzX2luaXRfcHJ1bmlu ZzsKKwkJaWYgKCFuZWVkc19leGVjX3BydW5pbmcpCisJCQluZWVkc19leGVjX3BydW5pbmcgPSBw YXJ0cmVsX25lZWRzX2V4ZWNfcHJ1bmluZzsKIAl9CiAKIAlwZnJlZShyZWxpZF9zdWJwbGFuX21h cCk7CkBAIC0zMzcsNiArMzQ5LDggQEAgbWFrZV9wYXJ0aXRpb25fcHJ1bmVpbmZvKFBsYW5uZXJJ bmZvICpyb290LCBSZWxPcHRJbmZvICpwYXJlbnRyZWwsCiAJLyogRWxzZSBidWlsZCB0aGUgcmVz dWx0IGRhdGEgc3RydWN0dXJlICovCiAJcHJ1bmVpbmZvID0gbWFrZU5vZGUoUGFydGl0aW9uUHJ1 bmVJbmZvKTsKIAlwcnVuZWluZm8tPnBydW5lX2luZm9zID0gcHJ1bmVyZWxpbmZvczsKKwlwcnVu ZWluZm8tPm5lZWRzX2luaXRfcHJ1bmluZyA9IG5lZWRzX2luaXRfcHJ1bmluZzsKKwlwcnVuZWlu Zm8tPm5lZWRzX2V4ZWNfcHJ1bmluZyA9IG5lZWRzX2V4ZWNfcHJ1bmluZzsKIAogCS8qCiAJICog U29tZSBzdWJwbGFucyBtYXkgbm90IGJlbG9uZyB0byBhbnkgb2YgdGhlIGlkZW50aWZpZWQgcGFy dGl0aW9uZWQgcmVscy4KQEAgLTQzNSwxMyArNDQ5LDE4IEBAIGFkZF9wYXJ0X3JlbGlkcyhMaXN0 ICphbGxwYXJ0cmVsaWRzLCBCaXRtYXBzZXQgKnBhcnRyZWxpZHMpCiAgKiBJZiB3ZSBjYW5ub3Qg ZmluZCBhbnkgdXNlZnVsIHJ1bi10aW1lIHBydW5pbmcgc3RlcHMsIHJldHVybiBOSUwuCiAgKiBI b3dldmVyLCBvbiBzdWNjZXNzLCBlYWNoIHJlbCBpZGVudGlmaWVkIGluIHBhcnRyZWxpZHMgd2ls bCBoYXZlCiAgKiBhbiBlbGVtZW50IGluIHRoZSByZXN1bHQgbGlzdCwgZXZlbiBpZiBzb21lIG9m IHRoZW0gYXJlIHVzZWxlc3MuCisgKiAqbmVlZHNfaW5pdF9wcnVuaW5nIGFuZCAqbmVlZHNfZXhl Y19wcnVuaW5nIGFyZSBzZXQgdG8gaW5kaWNhdGUgdGhhdCB0aGUKKyAqIHJldHVybmVkIFBhcnRp dGlvbmVkUmVsUHJ1bmVJbmZvcyBjb250YWlucyBwcnVuaW5nIHN0ZXBzIHRoYXQgY2FuIGJlCisg KiBwZXJmb3JtZWQgYmVmb3JlIGFuZCBhZnRlciBleGVjdXRpb24gYmVnaW5zLCByZXNwZWN0aXZl bHkuCiAgKi8KIHN0YXRpYyBMaXN0ICoKIG1ha2VfcGFydGl0aW9uZWRyZWxfcHJ1bmVpbmZvKFBs YW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpwYXJlbnRyZWwsCiAJCQkJCQkJICBMaXN0ICpw cnVuZXF1YWwsCiAJCQkJCQkJICBCaXRtYXBzZXQgKnBhcnRyZWxpZHMsCiAJCQkJCQkJICBpbnQg KnJlbGlkX3N1YnBsYW5fbWFwLAotCQkJCQkJCSAgQml0bWFwc2V0ICoqbWF0Y2hlZHN1YnBsYW5z KQorCQkJCQkJCSAgQml0bWFwc2V0ICoqbWF0Y2hlZHN1YnBsYW5zLAorCQkJCQkJCSAgYm9vbCAq bmVlZHNfaW5pdF9wcnVuaW5nLAorCQkJCQkJCSAgYm9vbCAqbmVlZHNfZXhlY19wcnVuaW5nKQog ewogCVJlbE9wdEluZm8gKnRhcmdldHBhcnQgPSBOVUxMOwogCUxpc3QJICAgKnBpbmZvbGlzdCA9 IE5JTDsKQEAgLTQ1Miw2ICs0NzEsMTAgQEAgbWFrZV9wYXJ0aXRpb25lZHJlbF9wcnVuZWluZm8o UGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnBhcmVudHJlbCwKIAlpbnQJCQlydGk7CiAJ aW50CQkJaTsKIAorCS8qIFdpbGwgZmluZCBvdXQgYmVsb3cuICovCisJKm5lZWRzX2luaXRfcHJ1 bmluZyA9IGZhbHNlOworCSpuZWVkc19leGVjX3BydW5pbmcgPSBmYWxzZTsKKwogCS8qCiAJICog RXhhbWluZSBlYWNoIHBhcnRpdGlvbmVkIHJlbCwgY29uc3RydWN0aW5nIGEgdGVtcG9yYXJ5IGFy cmF5IHRvIG1hcAogCSAqIGZyb20gcGxhbm5lciByZWxpZHMgdG8gaW5kZXggb2YgdGhlIHBhcnRp dGlvbmVkIHJlbCwgYW5kIGJ1aWxkaW5nIGEKQEAgLTUzOSw2ICs1NjIsOSBAQCBtYWtlX3BhcnRp dGlvbmVkcmVsX3BydW5laW5mbyhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcGFyZW50 cmVsLAogCQkgKiBleGVjdXRvciBwZXItc2NhbiBwcnVuaW5nIHN0ZXBzLiAgVGhpcyBmaXJzdCBw YXNzIGNyZWF0ZXMgc3RhcnR1cAogCQkgKiBwcnVuaW5nIHN0ZXBzIGFuZCBkZXRlY3RzIHdoZXRo ZXIgdGhlcmUncyBhbnkgcG9zc2libHktdXNlZnVsIHF1YWxzCiAJCSAqIHRoYXQgd291bGQgcmVx dWlyZSBwZXItc2NhbiBwcnVuaW5nLgorCQkgKgorCQkgKiBJbiB0aGUgZmlyc3QgcGFzcywgd2Ug bm90ZSB3aGV0aGVyIHRoZSAybmQgcGFzcyBpcyBuZWNlc3NhcnkgYnkKKwkJICogYnkgbm90aW5n IHRoZSBwcmVzZW5jZSBvZiBFWEVDIHBhcmFtZXRlcnMuCiAJCSAqLwogCQlnZW5fcGFydHBydW5l X3N0ZXBzKHN1YnBhcnQsIHBhcnRwcnVuZXF1YWwsIFBBUlRUQVJHRVRfSU5JVElBTCwKIAkJCQkJ CQkmY29udGV4dCk7CkBAIC02MTMsNiArNjM5LDExIEBAIG1ha2VfcGFydGl0aW9uZWRyZWxfcHJ1 bmVpbmZvKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpwYXJlbnRyZWwsCiAJCXBpbmZv LT5leGVjcGFyYW1pZHMgPSBleGVjcGFyYW1pZHM7CiAJCS8qIFJlbWFpbmluZyBmaWVsZHMgd2ls bCBiZSBmaWxsZWQgaW4gdGhlIG5leHQgbG9vcCAqLwogCisJCWlmICghKm5lZWRzX2luaXRfcHJ1 bmluZykKKwkJCSpuZWVkc19pbml0X3BydW5pbmcgPSAoaW5pdGlhbF9wcnVuaW5nX3N0ZXBzICE9 IE5JTCk7CisJCWlmICghKm5lZWRzX2V4ZWNfcHJ1bmluZykKKwkJCSpuZWVkc19leGVjX3BydW5p bmcgPSAoZXhlY19wcnVuaW5nX3N0ZXBzICE9IE5JTCk7CisKIAkJcGluZm9saXN0ID0gbGFwcGVu ZChwaW5mb2xpc3QsIHBpbmZvKTsKIAl9CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Rjb3Av cG9zdGdyZXMuYyBiL3NyYy9iYWNrZW5kL3Rjb3AvcG9zdGdyZXMuYwppbmRleCBiYTJmY2ZlYjRh Li4wODVlYjNmMjA5IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC90Y29wL3Bvc3RncmVzLmMKKysr IGIvc3JjL2JhY2tlbmQvdGNvcC9wb3N0Z3Jlcy5jCkBAIC05NDUsMTUgKzk0NSwxNyBAQCBwZ19w bGFuX3F1ZXJ5KFF1ZXJ5ICpxdWVyeXRyZWUsIGNvbnN0IGNoYXIgKnF1ZXJ5X3N0cmluZywgaW50 IGN1cnNvck9wdGlvbnMsCiAgKiBGb3Igbm9ybWFsIG9wdGltaXphYmxlIHN0YXRlbWVudHMsIGlu dm9rZSB0aGUgcGxhbm5lci4gIEZvciB1dGlsaXR5CiAgKiBzdGF0ZW1lbnRzLCBqdXN0IG1ha2Ug YSB3cmFwcGVyIFBsYW5uZWRTdG10IG5vZGUuCiAgKgotICogVGhlIHJlc3VsdCBpcyBhIGxpc3Qg b2YgUGxhbm5lZFN0bXQgbm9kZXMuCisgKiBUaGUgcmVzdWx0IGlzIGEgbGlzdCBvZiBQbGFubmVk U3RtdCBub2Rlcy4gIEFsc28sIGEgTlVMTCBpcyBhcHBlbmRlZCB0bworICogKmV4ZWNsb2NrcmVs c2luZm9fbGlzdCBmb3IgZWFjaCBQbGFubmVkU3RtdCBhZGRlZCB0byB0aGUgcmV0dXJuZWQgbGlz dC4KICAqLwogTGlzdCAqCiBwZ19wbGFuX3F1ZXJpZXMoTGlzdCAqcXVlcnl0cmVlcywgY29uc3Qg Y2hhciAqcXVlcnlfc3RyaW5nLCBpbnQgY3Vyc29yT3B0aW9ucywKLQkJCQlQYXJhbUxpc3RJbmZv IGJvdW5kUGFyYW1zKQorCQkJCVBhcmFtTGlzdEluZm8gYm91bmRQYXJhbXMsIExpc3QgKipleGVj bG9ja3JlbHNpbmZvX2xpc3QpCiB7CiAJTGlzdAkgICAqc3RtdF9saXN0ID0gTklMOwogCUxpc3RD ZWxsICAgKnF1ZXJ5X2xpc3Q7CiAKKwkqZXhlY2xvY2tyZWxzaW5mb19saXN0ID0gTklMOwogCWZv cmVhY2gocXVlcnlfbGlzdCwgcXVlcnl0cmVlcykKIAl7CiAJCVF1ZXJ5CSAgICpxdWVyeSA9IGxm aXJzdF9ub2RlKFF1ZXJ5LCBxdWVyeV9saXN0KTsKQEAgLTk3Nyw2ICs5NzksNyBAQCBwZ19wbGFu X3F1ZXJpZXMoTGlzdCAqcXVlcnl0cmVlcywgY29uc3QgY2hhciAqcXVlcnlfc3RyaW5nLCBpbnQg Y3Vyc29yT3B0aW9ucywKIAkJfQogCiAJCXN0bXRfbGlzdCA9IGxhcHBlbmQoc3RtdF9saXN0LCBz dG10KTsKKwkJKmV4ZWNsb2NrcmVsc2luZm9fbGlzdCA9IGxhcHBlbmQoKmV4ZWNsb2NrcmVsc2lu Zm9fbGlzdCwgTlVMTCk7CiAJfQogCiAJcmV0dXJuIHN0bXRfbGlzdDsKQEAgLTEwODAsNyArMTA4 Myw4IEBAIGV4ZWNfc2ltcGxlX3F1ZXJ5KGNvbnN0IGNoYXIgKnF1ZXJ5X3N0cmluZykKIAkJUXVl cnlDb21wbGV0aW9uIHFjOwogCQlNZW1vcnlDb250ZXh0IHBlcl9wYXJzZXRyZWVfY29udGV4dCA9 IE5VTEw7CiAJCUxpc3QJICAgKnF1ZXJ5dHJlZV9saXN0LAotCQkJCSAgICpwbGFudHJlZV9saXN0 OworCQkJCSAgICpwbGFudHJlZV9saXN0LAorCQkJCSAgICpwbGFudHJlZV9leGVjbG9ja3JlbHNp bmZvX2xpc3Q7CiAJCVBvcnRhbAkJcG9ydGFsOwogCQlEZXN0UmVjZWl2ZXIgKnJlY2VpdmVyOwog CQlpbnQxNgkJZm9ybWF0OwpAQCAtMTE2Nyw3ICsxMTcxLDggQEAgZXhlY19zaW1wbGVfcXVlcnko Y29uc3QgY2hhciAqcXVlcnlfc3RyaW5nKQogCQkJCQkJCQkJCQkJTlVMTCwgMCwgTlVMTCk7CiAK IAkJcGxhbnRyZWVfbGlzdCA9IHBnX3BsYW5fcXVlcmllcyhxdWVyeXRyZWVfbGlzdCwgcXVlcnlf c3RyaW5nLAotCQkJCQkJCQkJCUNVUlNPUl9PUFRfUEFSQUxMRUxfT0ssIE5VTEwpOworCQkJCQkJ CQkJCUNVUlNPUl9PUFRfUEFSQUxMRUxfT0ssIE5VTEwsCisJCQkJCQkJCQkJJnBsYW50cmVlX2V4 ZWNsb2NrcmVsc2luZm9fbGlzdCk7CiAKIAkJLyoKIAkJICogRG9uZSB3aXRoIHRoZSBzbmFwc2hv dCB1c2VkIGZvciBwYXJzaW5nL3BsYW5uaW5nLgpAQCAtMTIwMyw2ICsxMjA4LDcgQEAgZXhlY19z aW1wbGVfcXVlcnkoY29uc3QgY2hhciAqcXVlcnlfc3RyaW5nKQogCQkJCQkJICBxdWVyeV9zdHJp bmcsCiAJCQkJCQkgIGNvbW1hbmRUYWcsCiAJCQkJCQkgIHBsYW50cmVlX2xpc3QsCisJCQkJCQkg IHBsYW50cmVlX2V4ZWNsb2NrcmVsc2luZm9fbGlzdCwKIAkJCQkJCSAgTlVMTCk7CiAKIAkJLyoK QEAgLTE5OTEsNiArMTk5Nyw3IEBAIGV4ZWNfYmluZF9tZXNzYWdlKFN0cmluZ0luZm8gaW5wdXRf bWVzc2FnZSkKIAkJCQkJICBxdWVyeV9zdHJpbmcsCiAJCQkJCSAgcHNyYy0+Y29tbWFuZFRhZywK IAkJCQkJICBjcGxhbi0+c3RtdF9saXN0LAorCQkJCQkgIGNwbGFuLT5leGVjbG9ja3JlbHNpbmZv X2xpc3QsCiAJCQkJCSAgY3BsYW4pOwogCiAJLyogRG9uZSB3aXRoIHRoZSBzbmFwc2hvdCB1c2Vk IGZvciBwYXJhbWV0ZXIgSS9PIGFuZCBwYXJzaW5nL3BsYW5uaW5nICovCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC90Y29wL3BxdWVyeS5jIGIvc3JjL2JhY2tlbmQvdGNvcC9wcXVlcnkuYwppbmRl eCA1ZjkwNzgzMWEzLi45NzJkZGMwMTRlIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC90Y29wL3Bx dWVyeS5jCisrKyBiL3NyYy9iYWNrZW5kL3Rjb3AvcHF1ZXJ5LmMKQEAgLTM1LDcgKzM1LDcgQEAK IFBvcnRhbAkJQWN0aXZlUG9ydGFsID0gTlVMTDsKIAogCi1zdGF0aWMgdm9pZCBQcm9jZXNzUXVl cnkoUGxhbm5lZFN0bXQgKnBsYW4sCitzdGF0aWMgdm9pZCBQcm9jZXNzUXVlcnkoUGxhbm5lZFN0 bXQgKnBsYW4sIEV4ZWNMb2NrUmVsc0luZm8gKmV4ZWNsb2NrcmVsc2luZm8sCiAJCQkJCQkgY29u c3QgY2hhciAqc291cmNlVGV4dCwKIAkJCQkJCSBQYXJhbUxpc3RJbmZvIHBhcmFtcywKIAkJCQkJ CSBRdWVyeUVudmlyb25tZW50ICpxdWVyeUVudiwKQEAgLTY1LDYgKzY1LDcgQEAgc3RhdGljIHZv aWQgRG9Qb3J0YWxSZXdpbmQoUG9ydGFsIHBvcnRhbCk7CiAgKi8KIFF1ZXJ5RGVzYyAqCiBDcmVh dGVRdWVyeURlc2MoUGxhbm5lZFN0bXQgKnBsYW5uZWRzdG10LAorCQkJCUV4ZWNMb2NrUmVsc0lu Zm8gKmV4ZWNsb2NrcmVsc2luZm8sCiAJCQkJY29uc3QgY2hhciAqc291cmNlVGV4dCwKIAkJCQlT bmFwc2hvdCBzbmFwc2hvdCwKIAkJCQlTbmFwc2hvdCBjcm9zc2NoZWNrX3NuYXBzaG90LApAQCAt NzcsNiArNzgsNyBAQCBDcmVhdGVRdWVyeURlc2MoUGxhbm5lZFN0bXQgKnBsYW5uZWRzdG10LAog CiAJcWQtPm9wZXJhdGlvbiA9IHBsYW5uZWRzdG10LT5jb21tYW5kVHlwZTsJLyogb3BlcmF0aW9u ICovCiAJcWQtPnBsYW5uZWRzdG10ID0gcGxhbm5lZHN0bXQ7CS8qIHBsYW4gKi8KKwlxZC0+ZXhl Y2xvY2tyZWxzaW5mbyA9IGV4ZWNsb2NrcmVsc2luZm87CQkvKiBFeGVjdXRvckdldExvY2tSZWxz KCkgb3V0cHV0IGZvciBwbGFuICovCiAJcWQtPnNvdXJjZVRleHQgPSBzb3VyY2VUZXh0OwkvKiBx dWVyeSB0ZXh0ICovCiAJcWQtPnNuYXBzaG90ID0gUmVnaXN0ZXJTbmFwc2hvdChzbmFwc2hvdCk7 CS8qIHNuYXBzaG90ICovCiAJLyogUkkgY2hlY2sgc25hcHNob3QgKi8KQEAgLTEyMiw2ICsxMjQs NyBAQCBGcmVlUXVlcnlEZXNjKFF1ZXJ5RGVzYyAqcWRlc2MpCiAgKgkJUE9SVEFMX09ORV9SRVRV Uk5JTkcsIG9yIFBPUlRBTF9PTkVfTU9EX1dJVEggcG9ydGFsCiAgKgogICoJcGxhbjogdGhlIHBs YW4gdHJlZSBmb3IgdGhlIHF1ZXJ5CisgKglleGVjbG9ja3JlbHNpbmZvOiBFeGVjdXRvckdldExv Y2tSZWxzKCkgb3V0cHV0IGZvciB0aGUgcGxhbiB0cmVlCiAgKglzb3VyY2VUZXh0OiB0aGUgc291 cmNlIHRleHQgb2YgdGhlIHF1ZXJ5CiAgKglwYXJhbXM6IGFueSBwYXJhbWV0ZXJzIG5lZWRlZAog ICoJZGVzdDogd2hlcmUgdG8gc2VuZCByZXN1bHRzCkBAIC0xMzQsNiArMTM3LDcgQEAgRnJlZVF1 ZXJ5RGVzYyhRdWVyeURlc2MgKnFkZXNjKQogICovCiBzdGF0aWMgdm9pZAogUHJvY2Vzc1F1ZXJ5 KFBsYW5uZWRTdG10ICpwbGFuLAorCQkJIEV4ZWNMb2NrUmVsc0luZm8gKmV4ZWNsb2NrcmVsc2lu Zm8sCiAJCQkgY29uc3QgY2hhciAqc291cmNlVGV4dCwKIAkJCSBQYXJhbUxpc3RJbmZvIHBhcmFt cywKIAkJCSBRdWVyeUVudmlyb25tZW50ICpxdWVyeUVudiwKQEAgLTE0NSw3ICsxNDksNyBAQCBQ cm9jZXNzUXVlcnkoUGxhbm5lZFN0bXQgKnBsYW4sCiAJLyoKIAkgKiBDcmVhdGUgdGhlIFF1ZXJ5 RGVzYyBvYmplY3QKIAkgKi8KLQlxdWVyeURlc2MgPSBDcmVhdGVRdWVyeURlc2MocGxhbiwgc291 cmNlVGV4dCwKKwlxdWVyeURlc2MgPSBDcmVhdGVRdWVyeURlc2MocGxhbiwgZXhlY2xvY2tyZWxz aW5mbywgc291cmNlVGV4dCwKIAkJCQkJCQkJR2V0QWN0aXZlU25hcHNob3QoKSwgSW52YWxpZFNu YXBzaG90LAogCQkJCQkJCQlkZXN0LCBwYXJhbXMsIHF1ZXJ5RW52LCAwKTsKIApAQCAtNDkwLDYg KzQ5NCw3IEBAIFBvcnRhbFN0YXJ0KFBvcnRhbCBwb3J0YWwsIFBhcmFtTGlzdEluZm8gcGFyYW1z LAogCQkJCSAqIHRoZSBkZXN0aW5hdGlvbiB0byBEZXN0Tm9uZS4KIAkJCQkgKi8KIAkJCQlxdWVy eURlc2MgPSBDcmVhdGVRdWVyeURlc2MobGluaXRpYWxfbm9kZShQbGFubmVkU3RtdCwgcG9ydGFs LT5zdG10cyksCisJCQkJCQkJCQkJCWxpbml0aWFsX25vZGUoRXhlY0xvY2tSZWxzSW5mbywgcG9y dGFsLT5leGVjbG9ja3JlbHNpbmZvcyksCiAJCQkJCQkJCQkJCXBvcnRhbC0+c291cmNlVGV4dCwK IAkJCQkJCQkJCQkJR2V0QWN0aXZlU25hcHNob3QoKSwKIAkJCQkJCQkJCQkJSW52YWxpZFNuYXBz aG90LApAQCAtMTE5MCw3ICsxMTk1LDggQEAgUG9ydGFsUnVuTXVsdGkoUG9ydGFsIHBvcnRhbCwK IAkJCSAgIFF1ZXJ5Q29tcGxldGlvbiAqcWMpCiB7CiAJYm9vbAkJYWN0aXZlX3NuYXBzaG90X3Nl dCA9IGZhbHNlOwotCUxpc3RDZWxsICAgKnN0bXRsaXN0X2l0ZW07CisJTGlzdENlbGwgICAqc3Rt dGxpc3RfaXRlbSwKKwkJCSAgICpleGVjbG9ja3JlbHNpbmZvbGlzdF9pdGVtOwogCiAJLyoKIAkg KiBJZiB0aGUgZGVzdGluYXRpb24gaXMgRGVzdFJlbW90ZUV4ZWN1dGUsIGNoYW5nZSB0byBEZXN0 Tm9uZS4gIFRoZQpAQCAtMTIxMSw5ICsxMjE3LDEyIEBAIFBvcnRhbFJ1bk11bHRpKFBvcnRhbCBw b3J0YWwsCiAJICogTG9vcCB0byBoYW5kbGUgdGhlIGluZGl2aWR1YWwgcXVlcmllcyBnZW5lcmF0 ZWQgZnJvbSBhIHNpbmdsZSBwYXJzZXRyZWUKIAkgKiBieSBhbmFseXNpcyBhbmQgcmV3cml0ZS4K IAkgKi8KLQlmb3JlYWNoKHN0bXRsaXN0X2l0ZW0sIHBvcnRhbC0+c3RtdHMpCisJZm9yYm90aChz dG10bGlzdF9pdGVtLCBwb3J0YWwtPnN0bXRzLAorCQkJZXhlY2xvY2tyZWxzaW5mb2xpc3RfaXRl bSwgcG9ydGFsLT5leGVjbG9ja3JlbHNpbmZvcykKIAl7CiAJCVBsYW5uZWRTdG10ICpwc3RtdCA9 IGxmaXJzdF9ub2RlKFBsYW5uZWRTdG10LCBzdG10bGlzdF9pdGVtKTsKKwkJRXhlY0xvY2tSZWxz SW5mbyAqZXhlY2xvY2tyZWxzaW5mbyA9IGxmaXJzdF9ub2RlKEV4ZWNMb2NrUmVsc0luZm8sCisJ CQkJCQkJCQkJCSAgIGV4ZWNsb2NrcmVsc2luZm9saXN0X2l0ZW0pOwogCiAJCS8qCiAJCSAqIElm IHdlIGdvdCBhIGNhbmNlbCBzaWduYWwgaW4gcHJpb3IgY29tbWFuZCwgcXVpdApAQCAtMTI3MSw3 ICsxMjgwLDcgQEAgUG9ydGFsUnVuTXVsdGkoUG9ydGFsIHBvcnRhbCwKIAkJCWlmIChwc3RtdC0+ Y2FuU2V0VGFnKQogCQkJewogCQkJCS8qIHN0YXRlbWVudCBjYW4gc2V0IHRhZyBzdHJpbmcgKi8K LQkJCQlQcm9jZXNzUXVlcnkocHN0bXQsCisJCQkJUHJvY2Vzc1F1ZXJ5KHBzdG10LCBleGVjbG9j a3JlbHNpbmZvLAogCQkJCQkJCSBwb3J0YWwtPnNvdXJjZVRleHQsCiAJCQkJCQkJIHBvcnRhbC0+ cG9ydGFsUGFyYW1zLAogCQkJCQkJCSBwb3J0YWwtPnF1ZXJ5RW52LApAQCAtMTI4MCw3ICsxMjg5 LDcgQEAgUG9ydGFsUnVuTXVsdGkoUG9ydGFsIHBvcnRhbCwKIAkJCWVsc2UKIAkJCXsKIAkJCQkv KiBzdG10IGFkZGVkIGJ5IHJld3JpdGUgY2Fubm90IHNldCB0YWcgKi8KLQkJCQlQcm9jZXNzUXVl cnkocHN0bXQsCisJCQkJUHJvY2Vzc1F1ZXJ5KHBzdG10LCBleGVjbG9ja3JlbHNpbmZvLAogCQkJ CQkJCSBwb3J0YWwtPnNvdXJjZVRleHQsCiAJCQkJCQkJIHBvcnRhbC0+cG9ydGFsUGFyYW1zLAog CQkJCQkJCSBwb3J0YWwtPnF1ZXJ5RW52LApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMv Y2FjaGUvcGxhbmNhY2hlLmMgYi9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9wbGFuY2FjaGUuYwpp bmRleCA0Y2Y2ZGI1MDRmLi45ZjVhNDBhMGE2IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGls cy9jYWNoZS9wbGFuY2FjaGUuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9wbGFuY2Fj aGUuYwpAQCAtOTksMTQgKzk5LDE2IEBAIHN0YXRpYyBkbGlzdF9oZWFkIGNhY2hlZF9leHByZXNz aW9uX2xpc3QgPSBETElTVF9TVEFUSUNfSU5JVChjYWNoZWRfZXhwcmVzc2lvbl9sCiBzdGF0aWMg dm9pZCBSZWxlYXNlR2VuZXJpY1BsYW4oQ2FjaGVkUGxhblNvdXJjZSAqcGxhbnNvdXJjZSk7CiBz dGF0aWMgTGlzdCAqUmV2YWxpZGF0ZUNhY2hlZFF1ZXJ5KENhY2hlZFBsYW5Tb3VyY2UgKnBsYW5z b3VyY2UsCiAJCQkJCQkJCSAgIFF1ZXJ5RW52aXJvbm1lbnQgKnF1ZXJ5RW52KTsKLXN0YXRpYyBi b29sIENoZWNrQ2FjaGVkUGxhbihDYWNoZWRQbGFuU291cmNlICpwbGFuc291cmNlKTsKK3N0YXRp YyBib29sIENoZWNrQ2FjaGVkUGxhbihDYWNoZWRQbGFuU291cmNlICpwbGFuc291cmNlLCBQYXJh bUxpc3RJbmZvIGJvdW5kUGFyYW1zKTsKIHN0YXRpYyBDYWNoZWRQbGFuICpCdWlsZENhY2hlZFBs YW4oQ2FjaGVkUGxhblNvdXJjZSAqcGxhbnNvdXJjZSwgTGlzdCAqcWxpc3QsCiAJCQkJCQkJCSAg IFBhcmFtTGlzdEluZm8gYm91bmRQYXJhbXMsIFF1ZXJ5RW52aXJvbm1lbnQgKnF1ZXJ5RW52KTsK K3N0YXRpYyB2b2lkIENhY2hlZFBsYW5TYXZlRXhlY0xvY2tSZWxzSW5mb3MoQ2FjaGVkUGxhbiAq cGxhbiwgTGlzdCAqZXhlY2xvY2tyZWxzaW5mb19saXN0KTsKIHN0YXRpYyBib29sIGNob29zZV9j dXN0b21fcGxhbihDYWNoZWRQbGFuU291cmNlICpwbGFuc291cmNlLAogCQkJCQkJCSAgIFBhcmFt TGlzdEluZm8gYm91bmRQYXJhbXMpOwogc3RhdGljIGRvdWJsZSBjYWNoZWRfcGxhbl9jb3N0KENh Y2hlZFBsYW4gKnBsYW4sIGJvb2wgaW5jbHVkZV9wbGFubmVyKTsKIHN0YXRpYyBRdWVyeSAqUXVl cnlMaXN0R2V0UHJpbWFyeVN0bXQoTGlzdCAqc3RtdHMpOwotc3RhdGljIHZvaWQgQWNxdWlyZUV4 ZWN1dG9yTG9ja3MoTGlzdCAqc3RtdF9saXN0LCBib29sIGFjcXVpcmUpOworc3RhdGljIExpc3Qg KkFjcXVpcmVFeGVjdXRvckxvY2tzKExpc3QgKnN0bXRfbGlzdCwgUGFyYW1MaXN0SW5mbyBib3Vu ZFBhcmFtcyk7CitzdGF0aWMgdm9pZCBSZWxlYXNlRXhlY3V0b3JMb2NrcyhMaXN0ICpzdG10X2xp c3QsIExpc3QgKmV4ZWNsb2NrcmVsc2luZm9fbGlzdCk7CiBzdGF0aWMgdm9pZCBBY3F1aXJlUGxh bm5lckxvY2tzKExpc3QgKnN0bXRfbGlzdCwgYm9vbCBhY3F1aXJlKTsKIHN0YXRpYyB2b2lkIFNj YW5RdWVyeUZvckxvY2tzKFF1ZXJ5ICpwYXJzZXRyZWUsIGJvb2wgYWNxdWlyZSk7CiBzdGF0aWMg Ym9vbCBTY2FuUXVlcnlXYWxrZXIoTm9kZSAqbm9kZSwgYm9vbCAqYWNxdWlyZSk7CkBAIC03OTAs OSArNzkyLDIxIEBAIFJldmFsaWRhdGVDYWNoZWRRdWVyeShDYWNoZWRQbGFuU291cmNlICpwbGFu c291cmNlLAogICoKICAqIE9uIGEgInRydWUiIHJldHVybiwgd2UgaGF2ZSBhY3F1aXJlZCB0aGUg bG9ja3MgbmVlZGVkIHRvIHJ1biB0aGUgcGxhbi4KICAqIChXZSBtdXN0IGRvIHRoaXMgZm9yIHRo ZSAidHJ1ZSIgcmVzdWx0IHRvIGJlIHJhY2UtY29uZGl0aW9uLWZyZWUuKQorICoKKyAqIElmIHRo ZSBDYWNoZWRQbGFuIGlzIHZhbGlkLCB0aGlzIG1heSBpbiBzb21lIGNhc2VzIGNhbGwgRXhlY3V0 b3JHZXRMb2NrUmVscworICogb24gZWFjaCBQbGFubmVkU3RtdCBjb250YWluZWQgaW4gaXQgdG8g ZGV0ZXJtaW5lIHRoZSBzZXQgb2YgcmVsYXRpb25zIHRvIGJlCisgKiBsb2NrZWQgYnkgQWNxdWly ZUV4ZWN1dG9yTG9ja3MoKSwgaW5zdGVhZCBvZiBqdXN0IHNjYW5uaW5nIGl0cyByYW5nZSB0YWJs ZSwKKyAqIHdoaWNoIGlzIGRvbmUgdG8gcHJ1bmUgYXdheSBhbnkgbm9kZXMgaW4gdGhlIHRyZWUg dGhhdCBuZWVkIG5vdCBiZSBleGVjdXRlZAorICogYmFzZWQgb24gdGhlIHJlc3VsdCBvZiBpbml0 aWFsIHBhcnRpdGlvbiBwcnVuaW5nLiAgUmVzdWx0aW5nCisgKiBFeGVjTG9ja1JlbHNJbmZvIG5v ZGVzIGNvbnRhaW5pbmcgdGhlIHJlc3VsdCBvZiBzdWNoIHBydW5pbmcsIGFsbG9jYXRlZCBpbgor ICogYSBjaGlsZCBjb250ZXh0IG9mIHRoZSBjb250ZXh0IGNvbnRhaW5pbmcgdGhlIHBsYW4gaXRz ZWxmLCBhcmUgYWRkZWQgaW50bworICogcGxhbi0+ZXhlY2xvY2tyZWxzaW5mb19saXN0LiAgVGhl IHByZXZpb3VzIGNvbnRlbnRzIG9mIHRoZSBsaXN0IGZyb20gdGhlCisgKiBsYXN0IGludm9jYXRp b24gb24gdGhlIHNhbWUgQ2FjaGVkUGxhbiBhcmUgZGVsZXRlZCwgYmVjYXVzZSB0aGV5IHdvdWxk IG5vCisgKiBsb25nZXIgYmUgdmFsaWQgZ2l2ZW4gdGhlIGZyZXNoIHNldCBvZiBwYXJhbWV0ZXIg dmFsdWVzIHdoaWNoIG1heSBiZSB1c2VkCisgKiBhcyBwcnVuaW5nIHBhcmFtZXRlcnMuCiAgKi8K IHN0YXRpYyBib29sCi1DaGVja0NhY2hlZFBsYW4oQ2FjaGVkUGxhblNvdXJjZSAqcGxhbnNvdXJj ZSkKK0NoZWNrQ2FjaGVkUGxhbihDYWNoZWRQbGFuU291cmNlICpwbGFuc291cmNlLCBQYXJhbUxp c3RJbmZvIGJvdW5kUGFyYW1zKQogewogCUNhY2hlZFBsYW4gKnBsYW4gPSBwbGFuc291cmNlLT5n cGxhbjsKIApAQCAtODIwLDEzICs4MzQsMjUgQEAgQ2hlY2tDYWNoZWRQbGFuKENhY2hlZFBsYW5T b3VyY2UgKnBsYW5zb3VyY2UpCiAJICovCiAJaWYgKHBsYW4tPmlzX3ZhbGlkKQogCXsKKwkJTGlz dCAgICpleGVjbG9ja3JlbHNpbmZvX2xpc3Q7CisKIAkJLyoKIAkJICogUGxhbiBtdXN0IGhhdmUg cG9zaXRpdmUgcmVmY291bnQgYmVjYXVzZSBpdCBpcyByZWZlcmVuY2VkIGJ5CiAJCSAqIHBsYW5z b3VyY2U7IHNvIG5vIG5lZWQgdG8gZmVhciBpdCBkaXNhcHBlYXJzIHVuZGVyIHVzIGhlcmUuCiAJ CSAqLwogCQlBc3NlcnQocGxhbi0+cmVmY291bnQgPiAwKTsKIAotCQlBY3F1aXJlRXhlY3V0b3JM b2NrcyhwbGFuLT5zdG10X2xpc3QsIHRydWUpOworCQkvKgorCQkgKiBMb2NrIHJlbGF0aW9ucyBz Y2FubmVkIGJ5IHRoZSBwbGFuLiAgSWYgRXhlY3V0b3JHZXRMb2NrUmVscygpIGFza2VkCisJCSAq IHRvIG9taXQgc29tZSByZWxhdGlvbnMgYmVjYXVzZSB0aGUgcGxhbiBub2RlcyB0aGF0IHNjYW4g dGhlbSB3ZXJlCisJCSAqIGZvdW5kIHRvIGJlIHBydW5lZCwgdGhlIGV4ZWN1dG9yIHdpbGwgYmUg aW5mb3JtZWQgb2YgdGhlIG9taXNzaW9uIG9mCisJCSAqIHRoZSBwbGFuIG5vZGVzIHRoZW1zZWx2 ZXMsIHNvIHRoYXQgaXQgZG9lc24ndCBhY2NpZGVudGFsbHkgdHJ5IHRvCisJCSAqIGV4ZWN1dGUg dGhvc2Ugbm9kZXMsIHZpYSB0aGUgRXhlY0xvY2tSZWxzSW5mbyBub2RlcyBjb2xsZWN0ZWQgaW4g dGhlCisJCSAqIHJldHVybmVkIGxpc3QgdGhhdCBpcyBhbHNvIHBhc3NlZCB0byBpdCBhbG9uZyB3 aXRoIHRoZSBsaXN0IG9mCisJCSAqIFBsYW5uZWRTdG10cy4KKwkJICovCisJCWV4ZWNsb2NrcmVs c2luZm9fbGlzdCA9IEFjcXVpcmVFeGVjdXRvckxvY2tzKHBsYW4tPnN0bXRfbGlzdCwKKwkJCQkJ CQkJCQkJCQkgYm91bmRQYXJhbXMpOwogCiAJCS8qCiAJCSAqIElmIHBsYW4gd2FzIHRyYW5zaWVu dCwgY2hlY2sgdG8gc2VlIGlmIFRyYW5zYWN0aW9uWG1pbiBoYXMKQEAgLTg0NCwxMSArODcwLDE0 IEBAIENoZWNrQ2FjaGVkUGxhbihDYWNoZWRQbGFuU291cmNlICpwbGFuc291cmNlKQogCQlpZiAo cGxhbi0+aXNfdmFsaWQpCiAJCXsKIAkJCS8qIFN1Y2Nlc3NmdWxseSByZXZhbGlkYXRlZCBhbmQg bG9ja2VkIHRoZSBxdWVyeS4gKi8KKworCQkJLyogUmVtZW1iZXIgRXhlY0xvY2tSZWxzSW5mb3Mg aW4gdGhlIENhY2hlZFBsYW4uICovCisJCQlDYWNoZWRQbGFuU2F2ZUV4ZWNMb2NrUmVsc0luZm9z KHBsYW4sIGV4ZWNsb2NrcmVsc2luZm9fbGlzdCk7CiAJCQlyZXR1cm4gdHJ1ZTsKIAkJfQogCiAJ CS8qIE9vcHMsIHRoZSByYWNlIGNhc2UgaGFwcGVuZWQuICBSZWxlYXNlIHVzZWxlc3MgbG9ja3Mu ICovCi0JCUFjcXVpcmVFeGVjdXRvckxvY2tzKHBsYW4tPnN0bXRfbGlzdCwgZmFsc2UpOworCQlS ZWxlYXNlRXhlY3V0b3JMb2NrcyhwbGFuLT5zdG10X2xpc3QsIGV4ZWNsb2NrcmVsc2luZm9fbGlz dCk7CiAJfQogCiAJLyoKQEAgLTg4MCw3ICs5MDksOCBAQCBCdWlsZENhY2hlZFBsYW4oQ2FjaGVk UGxhblNvdXJjZSAqcGxhbnNvdXJjZSwgTGlzdCAqcWxpc3QsCiAJCQkJUGFyYW1MaXN0SW5mbyBi b3VuZFBhcmFtcywgUXVlcnlFbnZpcm9ubWVudCAqcXVlcnlFbnYpCiB7CiAJQ2FjaGVkUGxhbiAq cGxhbjsKLQlMaXN0CSAgICpwbGlzdDsKKwlMaXN0CSAgICpwbGlzdCwKKwkJCSAgICpleGVjbG9j a3JlbHNpbmZvX2xpc3Q7CiAJYm9vbAkJc25hcHNob3Rfc2V0OwogCWJvb2wJCWlzX3RyYW5zaWVu dDsKIAlNZW1vcnlDb250ZXh0IHBsYW5fY29udGV4dDsKQEAgLTkzMyw3ICs5NjMsOCBAQCBCdWls ZENhY2hlZFBsYW4oQ2FjaGVkUGxhblNvdXJjZSAqcGxhbnNvdXJjZSwgTGlzdCAqcWxpc3QsCiAJ ICogR2VuZXJhdGUgdGhlIHBsYW4uCiAJICovCiAJcGxpc3QgPSBwZ19wbGFuX3F1ZXJpZXMocWxp c3QsIHBsYW5zb3VyY2UtPnF1ZXJ5X3N0cmluZywKLQkJCQkJCQlwbGFuc291cmNlLT5jdXJzb3Jf b3B0aW9ucywgYm91bmRQYXJhbXMpOworCQkJCQkJCXBsYW5zb3VyY2UtPmN1cnNvcl9vcHRpb25z LCBib3VuZFBhcmFtcywKKwkJCQkJCQkmZXhlY2xvY2tyZWxzaW5mb19saXN0KTsKIAogCS8qIFJl bGVhc2Ugc25hcHNob3QgaWYgd2UgZ290IG9uZSAqLwogCWlmIChzbmFwc2hvdF9zZXQpCkBAIC0x MDAyLDYgKzEwMzMsMTYgQEAgQnVpbGRDYWNoZWRQbGFuKENhY2hlZFBsYW5Tb3VyY2UgKnBsYW5z b3VyY2UsIExpc3QgKnFsaXN0LAogCXBsYW4tPmlzX3NhdmVkID0gZmFsc2U7CiAJcGxhbi0+aXNf dmFsaWQgPSB0cnVlOwogCisJLyoKKwkgKiBTYXZlIHRoZSBkdW1teSBFeGVjTG9ja1JlbHNJbmZv IGxpc3QsIHRoYXQgaXMgYSBsaXN0IGNvbnRhaW5pbmcgTlVMTHMKKwkgKiBhcyBlbGVtZW50cy4g IFdlIG11c3QgZG8gdGhpcywgYmVjYXN1ZSB1c2VycyBvZiB0aGUgQ2FjaGVkUGxhbiBleHBlY3QK KwkgKiBvbmUgdG8gZ28gd2l0aCB0aGUgbGlzdCBvZiBQbGFubmVkU3RtdHMuCisJICogWFhYIG1h eWJlIGdldCByaWQgb2YgdGhhdCBjb250cmFjdC4KKwkgKi8KKwlwbGFuLT5leGVjbG9ja3JlbHNp bmZvX2NvbnRleHQgPSBOVUxMOworCUNhY2hlZFBsYW5TYXZlRXhlY0xvY2tSZWxzSW5mb3MocGxh biwgZXhlY2xvY2tyZWxzaW5mb19saXN0KTsKKwlBc3NlcnQoTWVtb3J5Q29udGV4dElzVmFsaWQo cGxhbi0+ZXhlY2xvY2tyZWxzaW5mb19jb250ZXh0KSk7CisKIAkvKiBhc3NpZ24gZ2VuZXJhdGlv biBudW1iZXIgdG8gbmV3IHBsYW4gKi8KIAlwbGFuLT5nZW5lcmF0aW9uID0gKysocGxhbnNvdXJj ZS0+Z2VuZXJhdGlvbik7CiAKQEAgLTExNjAsNyArMTIwMSw3IEBAIEdldENhY2hlZFBsYW4oQ2Fj aGVkUGxhblNvdXJjZSAqcGxhbnNvdXJjZSwgUGFyYW1MaXN0SW5mbyBib3VuZFBhcmFtcywKIAog CWlmICghY3VzdG9tcGxhbikKIAl7Ci0JCWlmIChDaGVja0NhY2hlZFBsYW4ocGxhbnNvdXJjZSkp CisJCWlmIChDaGVja0NhY2hlZFBsYW4ocGxhbnNvdXJjZSwgYm91bmRQYXJhbXMpKQogCQl7CiAJ CQkvKiBXZSB3YW50IGEgZ2VuZXJpYyBwbGFuLCBhbmQgd2UgYWxyZWFkeSBoYXZlIGEgdmFsaWQg b25lICovCiAJCQlwbGFuID0gcGxhbnNvdXJjZS0+Z3BsYW47CkBAIC0xNTg2LDYgKzE2MjcsNDkg QEAgQ29weUNhY2hlZFBsYW4oQ2FjaGVkUGxhblNvdXJjZSAqcGxhbnNvdXJjZSkKIAlyZXR1cm4g bmV3c291cmNlOwogfQogCisvKgorICogQ2FjaGVkUGxhblNhdmVFeGVjTG9ja1JlbHNJbmZvcwor ICoJCVNhdmUgdGhlIGxpc3QgY29udGFpbmluZyBFeGVjTG9ja1JlbHNJbmZvIG5vZGVzIGludG8g dGhlIGdpdmVuCisgKgkJQ2FjaGVkUGxhbgorICoKKyAqIFRoZSBwcm92aWRlZCBsaXN0IGlzIGNv cGllZCBpbnRvIGEgZGVkaWNhdGVkIGNvbnRleHQgdGhhdCBpcyBhIGNoaWxkIG9mCisgKiBwbGFu LT5jb250ZXh0LiAgSWYgdGhlIGNoaWxkIGNvbnRleHQgYWxyZWFkeSBleGlzdHMsIGl0IGlzIGVt cHRpZWQsIGJlY2F1c2UKKyAqIGFueSBFeGVjTG9ja1JlbHNJbmZvIGNvbnRhaW5lZCB0aGVyZWlu IHdvdWxkIG5vIGxvbmdlciBiZSB1c2VmdWwuCisgKi8KK3N0YXRpYyB2b2lkCitDYWNoZWRQbGFu U2F2ZUV4ZWNMb2NrUmVsc0luZm9zKENhY2hlZFBsYW4gKnBsYW4sIExpc3QgKmV4ZWNsb2NrcmVs c2luZm9fbGlzdCkKK3sKKwlNZW1vcnlDb250ZXh0CWV4ZWNsb2NrcmVsc2luZm9fY29udGV4dCA9 IHBsYW4tPmV4ZWNsb2NrcmVsc2luZm9fY29udGV4dCwKKwkJCQkJb2xkY29udGV4dCA9IEN1cnJl bnRNZW1vcnlDb250ZXh0OworCUxpc3QJCSAgICpleGVjbG9ja3JlbHNpbmZvX2xpc3RfY29weTsK KworCS8qCisJICogU2V0IHVwIHRoZSBkZWRpY2F0ZWQgY29udGV4dCBpZiBub3QgYWxyZWFkeSBk b25lLCBzYXZpbmcgaXQgYXMgYSBjaGlsZAorCSAqIG9mIHRoZSBDYWNoZWRQbGFuJ3MgY29udGV4 dC4KKwkgKi8KKwlpZiAoZXhlY2xvY2tyZWxzaW5mb19jb250ZXh0ID09IE5VTEwpCisJeworCQll eGVjbG9ja3JlbHNpbmZvX2NvbnRleHQgPSBBbGxvY1NldENvbnRleHRDcmVhdGUoQ3VycmVudE1l bW9yeUNvbnRleHQsCisJCQkJCQkJCQkJCQkgIkNhY2hlZFBsYW4gZXhlY2xvY2tyZWxzaW5mbyBs aXN0IiwKKwkJCQkJCQkJCQkJCSBBTExPQ1NFVF9TVEFSVF9TTUFMTF9TSVpFUyk7CisJCU1lbW9y eUNvbnRleHRTZXRQYXJlbnQoZXhlY2xvY2tyZWxzaW5mb19jb250ZXh0LCBwbGFuLT5jb250ZXh0 KTsKKwkJTWVtb3J5Q29udGV4dFNldElkZW50aWZpZXIoZXhlY2xvY2tyZWxzaW5mb19jb250ZXh0 LCBwbGFuLT5jb250ZXh0LT5pZGVudCk7CisJCXBsYW4tPmV4ZWNsb2NrcmVsc2luZm9fY29udGV4 dCA9IGV4ZWNsb2NrcmVsc2luZm9fY29udGV4dDsKKwl9CisJZWxzZQorCXsKKwkJLyogSnVzdCBj bGVhciBleGlzdGluZyBjb250ZW50cyBieSByZXNldHRpbmcgdGhlIGNvbnRleHQuICovCisJCUFz c2VydChNZW1vcnlDb250ZXh0SXNWYWxpZChleGVjbG9ja3JlbHNpbmZvX2NvbnRleHQpKTsKKwkJ TWVtb3J5Q29udGV4dFJlc2V0KGV4ZWNsb2NrcmVsc2luZm9fY29udGV4dCk7CisJfQorCisJTWVt b3J5Q29udGV4dFN3aXRjaFRvKGV4ZWNsb2NrcmVsc2luZm9fY29udGV4dCk7CisJZXhlY2xvY2ty ZWxzaW5mb19saXN0X2NvcHkgPSBjb3B5T2JqZWN0KGV4ZWNsb2NrcmVsc2luZm9fbGlzdCk7CisJ TWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGNvbnRleHQpOworCisJcGxhbi0+ZXhlY2xvY2tyZWxz aW5mb19saXN0ID0gZXhlY2xvY2tyZWxzaW5mb19saXN0X2NvcHk7Cit9CisKIC8qCiAgKiBDYWNo ZWRQbGFuSXNWYWxpZDogdGVzdCB3aGV0aGVyIHRoZSByZXdyaXR0ZW4gcXVlcnl0cmVlIHdpdGhp biBhCiAgKiBDYWNoZWRQbGFuU291cmNlIGlzIGN1cnJlbnRseSB2YWxpZCAodGhhdCBpcywgbm90 IG1hcmtlZCBhcyBiZWluZyBpbiBuZWVkCkBAIC0xNzM3LDE3ICsxODIxLDIxIEBAIFF1ZXJ5TGlz dEdldFByaW1hcnlTdG10KExpc3QgKnN0bXRzKQogCiAvKgogICogQWNxdWlyZUV4ZWN1dG9yTG9j a3M6IGFjcXVpcmUgbG9ja3MgbmVlZGVkIGZvciBleGVjdXRpb24gb2YgYSBjYWNoZWQgcGxhbjsK LSAqIG9yIHJlbGVhc2UgdGhlbSBpZiBhY3F1aXJlIGlzIGZhbHNlLgorICoKKyAqIFJldHVybnMg YSBsaXN0IG9mIEV4ZWNMb2NrUmVsc0luZm8gbm9kZXMgY29udGFpbmluZyBvbmUgZWxlbWVudCBm b3IgZWFjaAorICogUGxhbm5lZFN0bXQgaW4gc3RtdF9saXN0IG9yIE5VTEwgaWYgdGhlIGxhdHRl ciBpcyB1dGlsaXR5IHN0YXRlbWVudCBvciBpdHMKKyAqIGNvbnRhaW5zSW5pdGlhbFBydW5pbmcg aXMgZmFsc2UuCiAgKi8KLXN0YXRpYyB2b2lkCi1BY3F1aXJlRXhlY3V0b3JMb2NrcyhMaXN0ICpz dG10X2xpc3QsIGJvb2wgYWNxdWlyZSkKK3N0YXRpYyBMaXN0ICoKK0FjcXVpcmVFeGVjdXRvckxv Y2tzKExpc3QgKnN0bXRfbGlzdCwgUGFyYW1MaXN0SW5mbyBib3VuZFBhcmFtcykKIHsKIAlMaXN0 Q2VsbCAgICpsYzE7CisJTGlzdAkgICAqZXhlY2xvY2tyZWxzaW5mb19saXN0ID0gTklMOwogCiAJ Zm9yZWFjaChsYzEsIHN0bXRfbGlzdCkKIAl7CiAJCVBsYW5uZWRTdG10ICpwbGFubmVkc3RtdCA9 IGxmaXJzdF9ub2RlKFBsYW5uZWRTdG10LCBsYzEpOwotCQlMaXN0Q2VsbCAgICpsYzI7CisJCUV4 ZWNMb2NrUmVsc0luZm8gKmV4ZWNsb2NrcmVsc2luZm8gPSBOVUxMOwogCiAJCWlmIChwbGFubmVk c3RtdC0+Y29tbWFuZFR5cGUgPT0gQ01EX1VUSUxJVFkpCiAJCXsKQEAgLTE3NjEsMjcgKzE4NDks MTM5IEBAIEFjcXVpcmVFeGVjdXRvckxvY2tzKExpc3QgKnN0bXRfbGlzdCwgYm9vbCBhY3F1aXJl KQogCQkJUXVlcnkJICAgKnF1ZXJ5ID0gVXRpbGl0eUNvbnRhaW5zUXVlcnkocGxhbm5lZHN0bXQt PnV0aWxpdHlTdG10KTsKIAogCQkJaWYgKHF1ZXJ5KQotCQkJCVNjYW5RdWVyeUZvckxvY2tzKHF1 ZXJ5LCBhY3F1aXJlKTsKLQkJCWNvbnRpbnVlOworCQkJCVNjYW5RdWVyeUZvckxvY2tzKHF1ZXJ5 LCB0cnVlKTsKIAkJfQotCi0JCWZvcmVhY2gobGMyLCBwbGFubmVkc3RtdC0+cnRhYmxlKQorCQll bHNlCiAJCXsKLQkJCVJhbmdlVGJsRW50cnkgKnJ0ZSA9IChSYW5nZVRibEVudHJ5ICopIGxmaXJz dChsYzIpOworCQkJLyoKKwkJCSAqIEZpZ3VyZSBvdXQgdGhlIHNldCBvZiByZWxhdGlvbnMgdGhh dCB3b3VsZCBuZWVkIHRvIGJlIGxvY2tlZAorCQkJICogYmVmb3JlIGV4ZWN1dGluZyB0aGUgcGxh bi4KKwkJCSAqLworCQkJaWYgKCFwbGFubmVkc3RtdC0+Y29udGFpbnNJbml0aWFsUHJ1bmluZykK KwkJCXsKKwkJCQkvKgorCQkJCSAqIElmIHRoZSBwbGFuIGNvbnRhaW5zIG5vIGluaXRpYWwgcHJ1 bmluZyBzdGVwcywganVzdCBsb2NrCisJCQkJICogYWxsIHRoZSByZWxhdGlvbnMgZm91bmQgaW4g dGhlIHJhbmdlIHRhYmxlLgorCQkJCSAqLworCQkJCUxpc3RDZWxsICpsYzsKIAotCQkJaWYgKHJ0 ZS0+cnRla2luZCAhPSBSVEVfUkVMQVRJT04pCi0JCQkJY29udGludWU7CisJCQkJZm9yZWFjaChs YywgcGxhbm5lZHN0bXQtPnJ0YWJsZSkKKwkJCQl7CisJCQkJCVJhbmdlVGJsRW50cnkgKnJ0ZSA9 IGxmaXJzdChsYyk7CisKKwkJCQkJaWYgKHJ0ZS0+cnRla2luZCAhPSBSVEVfUkVMQVRJT04pCisJ CQkJCQljb250aW51ZTsKKworCQkJCQkvKgorCQkJCQkgKiBBY3F1aXJlIHRoZSBhcHByb3ByaWF0 ZSB0eXBlIG9mIGxvY2sgb24gZWFjaCByZWxhdGlvbgorCQkJCQkgKiBPSUQuIE5vdGUgdGhhdCB3 ZSBkb24ndCBhY3R1YWxseSB0cnkgdG8gb3BlbiB0aGUgcmVsLAorCQkJCQkgKiBhbmQgaGVuY2Ug d2lsbCBub3QgZmFpbCBpZiBpdCdzIGJlZW4gZHJvcHBlZCBlbnRpcmVseQorCQkJCQkgKiAtLS0g d2UnbGwganVzdCB0cmFuc2llbnRseSBhY3F1aXJlIGEgbm9uLWNvbmZsaWN0aW5nCisJCQkJCSAq ICBsb2NrLgorCQkJCQkgKi8KKwkJCQkJTG9ja1JlbGF0aW9uT2lkKHJ0ZS0+cmVsaWQsIHJ0ZS0+ cmVsbG9ja21vZGUpOworCQkJCX0KKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQlpbnQJCQlydGk7 CisJCQkJQml0bWFwc2V0ICAqbG9ja3JlbHM7CisKKwkJCQkvKgorCQkJCSAqIFdhbGsgdGhlIHBs YW4gdHJlZSB0byBmaW5kIG9ubHkgdGhlIG1pbmltYWwgc2V0IG9mCisJCQkJICogcmVsYXRpb25z IHRvIGJlIGxvY2tlZCwgY29uc2lkZXJpbmcgdGhlIGVmZmVjdCBvZiBwZXJmb3JtaW5nCisJCQkJ ICogaW5pdGlhbCBwYXJ0aXRpb24gcHJ1bmluZy4KKwkJCQkgKi8KKwkJCQlleGVjbG9ja3JlbHNp bmZvID0gRXhlY3V0b3JHZXRMb2NrUmVscyhwbGFubmVkc3RtdCwgYm91bmRQYXJhbXMpOworCQkJ CWxvY2tyZWxzID0gZXhlY2xvY2tyZWxzaW5mby0+bG9ja3JlbHM7CisKKwkJCQlydGkgPSAtMTsK KwkJCQl3aGlsZSAoKHJ0aSA9IGJtc19uZXh0X21lbWJlcihsb2NrcmVscywgcnRpKSkgPj0gMCkK KwkJCQl7CisJCQkJCVJhbmdlVGJsRW50cnkgKnJ0ZSA9IHJ0X2ZldGNoKHJ0aSwgcGxhbm5lZHN0 bXQtPnJ0YWJsZSk7CiAKKwkJCQkJQXNzZXJ0KHJ0ZS0+cnRla2luZCA9PSBSVEVfUkVMQVRJT04p OworCisJCQkJCS8qIFNlZSB0aGUgY29tbWVudCBhYm92ZS4gKi8KKwkJCQkJTG9ja1JlbGF0aW9u T2lkKHJ0ZS0+cmVsaWQsIHJ0ZS0+cmVsbG9ja21vZGUpOworCQkJCX0KKwkJCX0KKwkJfQorCisJ CS8qCisJCSAqIFJlbWVtYmVyIEV4ZWNMb2NrUmVsc0luZm8gZm9yIGxhdGVyIGFkZGluZyB0byB0 aGUgUXVlcnlEZXNjIHRoYXQKKwkJICogd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV4ZWN1dG9yIHdo ZW4gZXhlY3V0aW5nIHRoaXMgcGxhbi4gIE1heSBiZQorCQkgKiBOVUxMLCBidXQgbXVzdCBrZWVw IHRoZSBsaXN0IHRoZSBzYW1lIGxlbmd0aCBhcyBzdG10X2xpc3QuCisJCSAqLworCQlleGVjbG9j a3JlbHNpbmZvX2xpc3QgPSBsYXBwZW5kKGV4ZWNsb2NrcmVsc2luZm9fbGlzdCwKKwkJCQkJCQkJ CQlleGVjbG9ja3JlbHNpbmZvKTsKKwl9CisKKwlyZXR1cm4gZXhlY2xvY2tyZWxzaW5mb19saXN0 OworfQorCisvKgorICogUmVsZWFzZUV4ZWN1dG9yTG9ja3MKKyAqIAkJUmVsZWFzZSBsb2NrcyB0 aGF0IHdvdWxkJ3ZlIGJlZW4gYWNxdWlyZWQgYnkgYW4gZWFybGllciBjYWxsIHRvCisgKiAJCUFj cXVpcmVFeGVjdXRvckxvY2tzKCkKKyAqLworc3RhdGljIHZvaWQKK1JlbGVhc2VFeGVjdXRvckxv Y2tzKExpc3QgKnN0bXRfbGlzdCwgTGlzdCAqZXhlY2xvY2tyZWxzaW5mb19saXN0KQoreworCUxp c3RDZWxsICAgKmxjMSwKKwkJCSAgICpsYzI7CisKKwlmb3Jib3RoKGxjMSwgc3RtdF9saXN0LCBs YzIsIGV4ZWNsb2NrcmVsc2luZm9fbGlzdCkKKwl7CisJCVBsYW5uZWRTdG10ICpwbGFubmVkc3Rt dCA9IGxmaXJzdF9ub2RlKFBsYW5uZWRTdG10LCBsYzEpOworCQlFeGVjTG9ja1JlbHNJbmZvICpl eGVjbG9ja3JlbHNpbmZvID0gbGZpcnN0X25vZGUoRXhlY0xvY2tSZWxzSW5mbywgbGMyKTsKKwor CQlpZiAocGxhbm5lZHN0bXQtPmNvbW1hbmRUeXBlID09IENNRF9VVElMSVRZKQorCQl7CiAJCQkv KgotCQkJICogQWNxdWlyZSB0aGUgYXBwcm9wcmlhdGUgdHlwZSBvZiBsb2NrIG9uIGVhY2ggcmVs YXRpb24gT0lELiBOb3RlCi0JCQkgKiB0aGF0IHdlIGRvbid0IGFjdHVhbGx5IHRyeSB0byBvcGVu IHRoZSByZWwsIGFuZCBoZW5jZSB3aWxsIG5vdAotCQkJICogZmFpbCBpZiBpdCdzIGJlZW4gZHJv cHBlZCBlbnRpcmVseSAtLS0gd2UnbGwganVzdCB0cmFuc2llbnRseQotCQkJICogYWNxdWlyZSBh IG5vbi1jb25mbGljdGluZyBsb2NrLgorCQkJICogSWdub3JlIHV0aWxpdHkgc3RhdGVtZW50cywg ZXhjZXB0IHRob3NlIChzdWNoIGFzIEVYUExBSU4pIHRoYXQKKwkJCSAqIGNvbnRhaW4gYSBwYXJz ZWQtYnV0LW5vdC1wbGFubmVkIHF1ZXJ5LiAgTm90ZTogaXQncyBva2F5IHRvIHVzZQorCQkJICog U2NhblF1ZXJ5Rm9yTG9ja3MsIGV2ZW4gdGhvdWdoIHRoZSBxdWVyeSBoYXNuJ3QgYmVlbiB0aHJv dWdoCisJCQkgKiBydWxlIHJld3JpdGluZywgYmVjYXVzZSByZXdyaXRpbmcgZG9lc24ndCBjaGFu Z2UgdGhlIHF1ZXJ5CisJCQkgKiByZXByZXNlbnRhdGlvbi4KIAkJCSAqLwotCQkJaWYgKGFjcXVp cmUpCi0JCQkJTG9ja1JlbGF0aW9uT2lkKHJ0ZS0+cmVsaWQsIHJ0ZS0+cmVsbG9ja21vZGUpOwor CQkJUXVlcnkJICAgKnF1ZXJ5ID0gVXRpbGl0eUNvbnRhaW5zUXVlcnkocGxhbm5lZHN0bXQtPnV0 aWxpdHlTdG10KTsKKworCQkJaWYgKHF1ZXJ5KQorCQkJCVNjYW5RdWVyeUZvckxvY2tzKHF1ZXJ5 LCBmYWxzZSk7CisJCX0KKwkJZWxzZQorCQl7CisJCQlpZiAoZXhlY2xvY2tyZWxzaW5mbyA9PSBO VUxMKQorCQkJeworCQkJCUxpc3RDZWxsICpsYzsKKworCQkJCWZvcmVhY2gobGMsIHBsYW5uZWRz dG10LT5ydGFibGUpCisJCQkJeworCQkJCQlSYW5nZVRibEVudHJ5ICpydGUgPSBsZmlyc3QobGMp OworCisJCQkJCWlmIChydGUtPnJ0ZWtpbmQgIT0gUlRFX1JFTEFUSU9OKQorCQkJCQkJY29udGlu dWU7CisKKwkJCQkJTG9ja1JlbGF0aW9uT2lkKHJ0ZS0+cmVsaWQsIHJ0ZS0+cmVsbG9ja21vZGUp OworCQkJCX0KKwkJCX0KIAkJCWVsc2UKLQkJCQlVbmxvY2tSZWxhdGlvbk9pZChydGUtPnJlbGlk LCBydGUtPnJlbGxvY2ttb2RlKTsKKwkJCXsKKwkJCQlpbnQJCQlydGk7CisJCQkJQml0bWFwc2V0 ICAqbG9ja3JlbHM7CisKKwkJCQlsb2NrcmVscyA9IGV4ZWNsb2NrcmVsc2luZm8tPmxvY2tyZWxz OworCQkJCXJ0aSA9IC0xOworCQkJCXdoaWxlICgocnRpID0gYm1zX25leHRfbWVtYmVyKGxvY2ty ZWxzLCBydGkpKSA+PSAwKQorCQkJCXsKKwkJCQkJUmFuZ2VUYmxFbnRyeSAqcnRlID0gcnRfZmV0 Y2gocnRpLCBwbGFubmVkc3RtdC0+cnRhYmxlKTsKKworCQkJCQlBc3NlcnQocnRlLT5ydGVraW5k ID09IFJURV9SRUxBVElPTik7CisKKwkJCQkJVW5sb2NrUmVsYXRpb25PaWQocnRlLT5yZWxpZCwg cnRlLT5yZWxsb2NrbW9kZSk7CisJCQkJfQorCQkJfQogCQl9CiAJfQogfQpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvdXRpbHMvbW1nci9wb3J0YWxtZW0uYyBiL3NyYy9iYWNrZW5kL3V0aWxzL21t Z3IvcG9ydGFsbWVtLmMKaW5kZXggZDU0OWY2NmQ0YS4uODk2ZjUxYmUwOCAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvdXRpbHMvbW1nci9wb3J0YWxtZW0uYworKysgYi9zcmMvYmFja2VuZC91dGls cy9tbWdyL3BvcnRhbG1lbS5jCkBAIC0yODUsNiArMjg1LDcgQEAgUG9ydGFsRGVmaW5lUXVlcnko UG9ydGFsIHBvcnRhbCwKIAkJCQkgIGNvbnN0IGNoYXIgKnNvdXJjZVRleHQsCiAJCQkJICBDb21t YW5kVGFnIGNvbW1hbmRUYWcsCiAJCQkJICBMaXN0ICpzdG10cywKKwkJCQkgIExpc3QgKmV4ZWNs b2NrcmVsc2luZm9zLAogCQkJCSAgQ2FjaGVkUGxhbiAqY3BsYW4pCiB7CiAJQXNzZXJ0QXJnKFBv cnRhbElzVmFsaWQocG9ydGFsKSk7CkBAIC0yOTksNiArMzAwLDcgQEAgUG9ydGFsRGVmaW5lUXVl cnkoUG9ydGFsIHBvcnRhbCwKIAlwb3J0YWwtPnFjLm5wcm9jZXNzZWQgPSAwOwogCXBvcnRhbC0+ Y29tbWFuZFRhZyA9IGNvbW1hbmRUYWc7CiAJcG9ydGFsLT5zdG10cyA9IHN0bXRzOworCXBvcnRh bC0+ZXhlY2xvY2tyZWxzaW5mb3MgPSBleGVjbG9ja3JlbHNpbmZvczsKIAlwb3J0YWwtPmNwbGFu ID0gY3BsYW47CiAJcG9ydGFsLT5zdGF0dXMgPSBQT1JUQUxfREVGSU5FRDsKIH0KZGlmZiAtLWdp dCBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2V4cGxhaW4uaCBiL3NyYy9pbmNsdWRlL2NvbW1hbmRz L2V4cGxhaW4uaAppbmRleCA2NjY5NzdmYjFmLi5mZWY3NWJhMTQ3IDEwMDY0NAotLS0gYS9zcmMv aW5jbHVkZS9jb21tYW5kcy9leHBsYWluLmgKKysrIGIvc3JjL2luY2x1ZGUvY29tbWFuZHMvZXhw bGFpbi5oCkBAIC04Nyw3ICs4Nyw4IEBAIGV4dGVybiB2b2lkIEV4cGxhaW5PbmVVdGlsaXR5KE5v ZGUgKnV0aWxpdHlTdG10LCBJbnRvQ2xhdXNlICppbnRvLAogCQkJCQkJCSAgRXhwbGFpblN0YXRl ICplcywgY29uc3QgY2hhciAqcXVlcnlTdHJpbmcsCiAJCQkJCQkJICBQYXJhbUxpc3RJbmZvIHBh cmFtcywgUXVlcnlFbnZpcm9ubWVudCAqcXVlcnlFbnYpOwogCi1leHRlcm4gdm9pZCBFeHBsYWlu T25lUGxhbihQbGFubmVkU3RtdCAqcGxhbm5lZHN0bXQsIEludG9DbGF1c2UgKmludG8sCitleHRl cm4gdm9pZCBFeHBsYWluT25lUGxhbihQbGFubmVkU3RtdCAqcGxhbm5lZHN0bXQsIEV4ZWNMb2Nr UmVsc0luZm8gKmV4ZWNsb2NrcmVsc2luZm8sCisJCQkJCQkgICBJbnRvQ2xhdXNlICppbnRvLAog CQkJCQkJICAgRXhwbGFpblN0YXRlICplcywgY29uc3QgY2hhciAqcXVlcnlTdHJpbmcsCiAJCQkJ CQkgICBQYXJhbUxpc3RJbmZvIHBhcmFtcywgUXVlcnlFbnZpcm9ubWVudCAqcXVlcnlFbnYsCiAJ CQkJCQkgICBjb25zdCBpbnN0cl90aW1lICpwbGFuZHVyYXRpb24sCmRpZmYgLS1naXQgYS9zcmMv aW5jbHVkZS9leGVjdXRvci9leGVjUGFydGl0aW9uLmggYi9zcmMvaW5jbHVkZS9leGVjdXRvci9l eGVjUGFydGl0aW9uLmgKaW5kZXggZmQ1NzM1YTk0Ni4uZGVkMTliOGNiYiAxMDA2NDQKLS0tIGEv c3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY1BhcnRpdGlvbi5oCisrKyBiL3NyYy9pbmNsdWRlL2V4 ZWN1dG9yL2V4ZWNQYXJ0aXRpb24uaApAQCAtMTI0LDQgKzEyNCw2IEBAIGV4dGVybiBQYXJ0aXRp b25QcnVuZVN0YXRlICpFeGVjSW5pdFBhcnRpdGlvblBydW5pbmcoUGxhblN0YXRlICpwbGFuc3Rh dGUsCiAJCQkJCQkgUGFydGl0aW9uUHJ1bmVJbmZvICpwcnVuZWluZm8sCiAJCQkJCQkgQml0bWFw c2V0ICoqaW5pdGlhbGx5X3ZhbGlkX3N1YnBsYW5zKTsKIGV4dGVybiBCaXRtYXBzZXQgKkV4ZWNG aW5kTWF0Y2hpbmdTdWJQbGFucyhQYXJ0aXRpb25QcnVuZVN0YXRlICpwcnVuZXN0YXRlKTsKK2V4 dGVybiBCaXRtYXBzZXQgKkV4ZWNHZXRMb2NrUmVsc0RvSW5pdGlhbFBydW5pbmcoUGxhbiAqcGxh biwgRXhlY0dldExvY2tSZWxzQ29udGV4dCAqY29udGV4dCwKKwkJCQkJCQkJUGFydGl0aW9uUHJ1 bmVJbmZvICpwcnVuZWluZm8pOwogI2VuZGlmCQkJCQkJCS8qIEVYRUNQQVJUSVRJT05fSCAqLwpk aWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY2Rlc2MuaCBiL3NyYy9pbmNsdWRl L2V4ZWN1dG9yL2V4ZWNkZXNjLmgKaW5kZXggZTc5ZTJjMDAxZi4uNDMzODQ2MzQ3OSAxMDA2NDQK LS0tIGEvc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY2Rlc2MuaAorKysgYi9zcmMvaW5jbHVkZS9l eGVjdXRvci9leGVjZGVzYy5oCkBAIC0zNSw2ICszNSw3IEBAIHR5cGVkZWYgc3RydWN0IFF1ZXJ5 RGVzYwogCS8qIFRoZXNlIGZpZWxkcyBhcmUgcHJvdmlkZWQgYnkgQ3JlYXRlUXVlcnlEZXNjICov CiAJQ21kVHlwZQkJb3BlcmF0aW9uOwkJLyogQ01EX1NFTEVDVCwgQ01EX1VQREFURSwgZXRjLiAq LwogCVBsYW5uZWRTdG10ICpwbGFubmVkc3RtdDsJLyogcGxhbm5lcidzIG91dHB1dCAoY291bGQg YmUgdXRpbGl0eSwgdG9vKSAqLworCUV4ZWNMb2NrUmVsc0luZm8gKmV4ZWNsb2NrcmVsc2luZm87 CS8qIEV4ZWN1dG9yR2V0TG9ja1JlbHMoKSdzIG91dHB1dCBnaXZlbiBwbGFubmVkc3RtdCAqLwog CWNvbnN0IGNoYXIgKnNvdXJjZVRleHQ7CQkvKiBzb3VyY2UgdGV4dCBvZiB0aGUgcXVlcnkgKi8K IAlTbmFwc2hvdAlzbmFwc2hvdDsJCS8qIHNuYXBzaG90IHRvIHVzZSBmb3IgcXVlcnkgKi8KIAlT bmFwc2hvdAljcm9zc2NoZWNrX3NuYXBzaG90OwkvKiBjcm9zc2NoZWNrIGZvciBSSSB1cGRhdGUv ZGVsZXRlICovCkBAIC01Nyw2ICs1OCw3IEBAIHR5cGVkZWYgc3RydWN0IFF1ZXJ5RGVzYwogCiAv KiBpbiBwcXVlcnkuYyAqLwogZXh0ZXJuIFF1ZXJ5RGVzYyAqQ3JlYXRlUXVlcnlEZXNjKFBsYW5u ZWRTdG10ICpwbGFubmVkc3RtdCwKKwkJCQkJCQkJICBFeGVjTG9ja1JlbHNJbmZvICpleGVjbG9j a3JlbHNpbmZvLAogCQkJCQkJCQkgIGNvbnN0IGNoYXIgKnNvdXJjZVRleHQsCiAJCQkJCQkJCSAg U25hcHNob3Qgc25hcHNob3QsCiAJCQkJCQkJCSAgU25hcHNob3QgY3Jvc3NjaGVja19zbmFwc2hv dCwKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWN1dG9yLmggYi9zcmMvaW5j bHVkZS9leGVjdXRvci9leGVjdXRvci5oCmluZGV4IDgyOTI1YjRiNjMuLjVjZjQxNGNjMTEgMTAw NjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWN1dG9yLmgKKysrIGIvc3JjL2luY2x1 ZGUvZXhlY3V0b3IvZXhlY3V0b3IuaApAQCAtMTg1LDYgKzE4NSw4IEBAIEV4ZWNHZXRKdW5rQXR0 cmlidXRlKFR1cGxlVGFibGVTbG90ICpzbG90LCBBdHRyTnVtYmVyIGF0dG5vLCBib29sICppc051 bGwpCiAvKgogICogcHJvdG90eXBlcyBmcm9tIGZ1bmN0aW9ucyBpbiBleGVjTWFpbi5jCiAgKi8K K2V4dGVybiBFeGVjTG9ja1JlbHNJbmZvICpFeGVjdXRvckdldExvY2tSZWxzKFBsYW5uZWRTdG10 ICpwbGFubmVkc3RtdCwgUGFyYW1MaXN0SW5mbyBwYXJhbXMpOworZXh0ZXJuIGJvb2wgRXhlY0dl dExvY2tSZWxzKFBsYW4gKm5vZGUsIEV4ZWNHZXRMb2NrUmVsc0NvbnRleHQgKmNvbnRleHQpOwog ZXh0ZXJuIHZvaWQgRXhlY3V0b3JTdGFydChRdWVyeURlc2MgKnF1ZXJ5RGVzYywgaW50IGVmbGFn cyk7CiBleHRlcm4gdm9pZCBzdGFuZGFyZF9FeGVjdXRvclN0YXJ0KFF1ZXJ5RGVzYyAqcXVlcnlE ZXNjLCBpbnQgZWZsYWdzKTsKIGV4dGVybiB2b2lkIEV4ZWN1dG9yUnVuKFF1ZXJ5RGVzYyAqcXVl cnlEZXNjLApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvZXhlY3V0b3Ivbm9kZUFwcGVuZC5oIGIv c3JjL2luY2x1ZGUvZXhlY3V0b3Ivbm9kZUFwcGVuZC5oCmluZGV4IDRjYjc4ZWU1YjYuLmI1MzUz NWMyYTQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL25vZGVBcHBlbmQuaAorKysg Yi9zcmMvaW5jbHVkZS9leGVjdXRvci9ub2RlQXBwZW5kLmgKQEAgLTE3LDYgKzE3LDcgQEAKICNp bmNsdWRlICJhY2Nlc3MvcGFyYWxsZWwuaCIKICNpbmNsdWRlICJub2Rlcy9leGVjbm9kZXMuaCIK IAorZXh0ZXJuIGJvb2wgRXhlY0dldEFwcGVuZExvY2tSZWxzKEFwcGVuZCAqbm9kZSwgRXhlY0dl dExvY2tSZWxzQ29udGV4dCAqY29udGV4dCk7CiBleHRlcm4gQXBwZW5kU3RhdGUgKkV4ZWNJbml0 QXBwZW5kKEFwcGVuZCAqbm9kZSwgRVN0YXRlICplc3RhdGUsIGludCBlZmxhZ3MpOwogZXh0ZXJu IHZvaWQgRXhlY0VuZEFwcGVuZChBcHBlbmRTdGF0ZSAqbm9kZSk7CiBleHRlcm4gdm9pZCBFeGVj UmVTY2FuQXBwZW5kKEFwcGVuZFN0YXRlICpub2RlKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRl L2V4ZWN1dG9yL25vZGVNZXJnZUFwcGVuZC5oIGIvc3JjL2luY2x1ZGUvZXhlY3V0b3Ivbm9kZU1l cmdlQXBwZW5kLmgKaW5kZXggOTdmZTNiMDY2NS4uOGViNGU5ZGY5MyAxMDA2NDQKLS0tIGEvc3Jj L2luY2x1ZGUvZXhlY3V0b3Ivbm9kZU1lcmdlQXBwZW5kLmgKKysrIGIvc3JjL2luY2x1ZGUvZXhl Y3V0b3Ivbm9kZU1lcmdlQXBwZW5kLmgKQEAgLTE2LDYgKzE2LDcgQEAKIAogI2luY2x1ZGUgIm5v ZGVzL2V4ZWNub2Rlcy5oIgogCitleHRlcm4gYm9vbCBFeGVjR2V0TWVyZ2VBcHBlbmRMb2NrUmVs cyhNZXJnZUFwcGVuZCAqbm9kZSwgRXhlY0dldExvY2tSZWxzQ29udGV4dCAqY29udGV4dCk7CiBl eHRlcm4gTWVyZ2VBcHBlbmRTdGF0ZSAqRXhlY0luaXRNZXJnZUFwcGVuZChNZXJnZUFwcGVuZCAq bm9kZSwgRVN0YXRlICplc3RhdGUsIGludCBlZmxhZ3MpOwogZXh0ZXJuIHZvaWQgRXhlY0VuZE1l cmdlQXBwZW5kKE1lcmdlQXBwZW5kU3RhdGUgKm5vZGUpOwogZXh0ZXJuIHZvaWQgRXhlY1JlU2Nh bk1lcmdlQXBwZW5kKE1lcmdlQXBwZW5kU3RhdGUgKm5vZGUpOwpkaWZmIC0tZ2l0IGEvc3JjL2lu Y2x1ZGUvZXhlY3V0b3Ivbm9kZU1vZGlmeVRhYmxlLmggYi9zcmMvaW5jbHVkZS9leGVjdXRvci9u b2RlTW9kaWZ5VGFibGUuaAppbmRleCAxZDIyNWJjODhkLi41MDA2NDk5MDg4IDEwMDY0NAotLS0g YS9zcmMvaW5jbHVkZS9leGVjdXRvci9ub2RlTW9kaWZ5VGFibGUuaAorKysgYi9zcmMvaW5jbHVk ZS9leGVjdXRvci9ub2RlTW9kaWZ5VGFibGUuaApAQCAtMTksNiArMTksNyBAQCBleHRlcm4gdm9p ZCBFeGVjQ29tcHV0ZVN0b3JlZEdlbmVyYXRlZChSZXN1bHRSZWxJbmZvICpyZXN1bHRSZWxJbmZv LAogCQkJCQkJCQkJICAgRVN0YXRlICplc3RhdGUsIFR1cGxlVGFibGVTbG90ICpzbG90LAogCQkJ CQkJCQkJICAgQ21kVHlwZSBjbWR0eXBlKTsKIAorZXh0ZXJuIGJvb2wgRXhlY0dldE1vZGlmeVRh YmxlTG9ja1JlbHMoTW9kaWZ5VGFibGUgKnBsYW4sIEV4ZWNHZXRMb2NrUmVsc0NvbnRleHQgKmNv bnRleHQpOwogZXh0ZXJuIE1vZGlmeVRhYmxlU3RhdGUgKkV4ZWNJbml0TW9kaWZ5VGFibGUoTW9k aWZ5VGFibGUgKm5vZGUsIEVTdGF0ZSAqZXN0YXRlLCBpbnQgZWZsYWdzKTsKIGV4dGVybiB2b2lk IEV4ZWNFbmRNb2RpZnlUYWJsZShNb2RpZnlUYWJsZVN0YXRlICpub2RlKTsKIGV4dGVybiB2b2lk IEV4ZWNSZVNjYW5Nb2RpZnlUYWJsZShNb2RpZnlUYWJsZVN0YXRlICpub2RlKTsKZGlmZiAtLWdp dCBhL3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvZXhl Y25vZGVzLmgKaW5kZXggNDRkZDczZmM4MC4uMTI1M2ZkYjBlZCAxMDA2NDQKLS0tIGEvc3JjL2lu Y2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVz LmgKQEAgLTU3Niw2ICs1NzYsNyBAQCB0eXBlZGVmIHN0cnVjdCBFU3RhdGUKIAlzdHJ1Y3QgRXhl Y1Jvd01hcmsgKiplc19yb3dtYXJrczsJLyogQXJyYXkgb2YgcGVyLXJhbmdlLXRhYmxlLWVudHJ5 CiAJCQkJCQkJCQkJICogRXhlY1Jvd01hcmtzLCBvciBOVUxMIGlmIG5vbmUgKi8KIAlQbGFubmVk U3RtdCAqZXNfcGxhbm5lZHN0bXQ7CS8qIGxpbmsgdG8gdG9wIG9mIHBsYW4gdHJlZSAqLworCXN0 cnVjdCBFeGVjTG9ja1JlbHNJbmZvICplc19leGVjbG9ja3JlbHNpbmZvOyAvKiBRdWVyeURlc2Mu ZXhlY2xvY2tyZWxzaW5mbyAqLwogCWNvbnN0IGNoYXIgKmVzX3NvdXJjZVRleHQ7CS8qIFNvdXJj ZSB0ZXh0IGZyb20gUXVlcnlEZXNjICovCiAKIAlKdW5rRmlsdGVyICplc19qdW5rRmlsdGVyOwkv KiB0b3AtbGV2ZWwganVuayBmaWx0ZXIsIGlmIGFueSAqLwpAQCAtOTY0LDYgKzk2NSwxMDEgQEAg dHlwZWRlZiBzdHJ1Y3QgRG9tYWluQ29uc3RyYWludFN0YXRlCiAgKi8KIHR5cGVkZWYgVHVwbGVU YWJsZVNsb3QgKigqRXhlY1Byb2NOb2RlTXRkKSAoc3RydWN0IFBsYW5TdGF0ZSAqcHN0YXRlKTsK IAorLyotLS0tLS0tLS0tLS0tLS0tCisgKiBFeGVjTG9ja1JlbHNJbmZvCisgKgorICogUmVzdWx0 IG9mIHBlcmZvcm1pbmcgRXhlY3V0b3JHZXRMb2NrUmVscygpIGZvciBhIGdpdmVuIFBsYW5uZWRT dG10CisgKi8KK3R5cGVkZWYgc3RydWN0IEV4ZWNMb2NrUmVsc0luZm8KK3sKKwlOb2RlVGFnCQl0 eXBlOworCisJLyoKKwkgKiBSZWxhdGlvbnMgdGhhdCBtdXN0IGJlIGxvY2tlZCB0byBleGVjdXRl IHRoZSBwbGFuIHRyZWUgY29udGFpbmVkIGluCisJICogdGhlIFBsYW5uZWRTdG10LgorCSAqLwor CUJpdG1hcHNldCAgKmxvY2tyZWxzOworCisJLyogUGxhbm5lZFN0bXQubnVtUGxhbk5vZGVzICov CisJaW50CQkJbnVtUGxhbk5vZGVzOworCisJLyoKKwkgKiBMaXN0IG9mIFBsYW5Jbml0UHJ1bmlu Z091dHB1dCwgZWFjaCByZXByZXNlbnRpbmcgdGhlIG91dHB1dCBvZgorCSAqIHBlcmZvcm1pbmcg aW5pdGlhbCBwcnVuaW5nIG9uIGEgZ2l2ZW4gcGxhbiBub2RlLCBmb3IgYWxsIG5vZGVzIGluIHRo ZQorCSAqIHBsYW4gdHJlZSB0aGF0IGhhdmUgYmVlbiBtYXJrZWQgYXMgbmVlZGluZyBpbml0aWFs IHBydW5pbmcuCisJICoKKwkgKiAnaXBvSW5kZXhlcycgaXMgYW4gYXJyYXkgb2YgJ251bVBsYW5O b2RlcycgZWxlbWVudHMsIGluZGV4ZWQgd2l0aAorCSAqIHBsYW5fbm9kZV9pZCBvZiB0aGUgaW5k aXZpZHVhbCBub2RlcyBpbiB0aGUgcGxhbiB0cmVlLCBlYWNoIGEgMS1iYXNlZAorCSAqIGluZGV4 IGludG8gJ2luaXRQcnVuaW5nT3V0cHV0cycgbGlzdCBmb3IgYSBnaXZlbiBwbGFuIG5vZGUuICAw IG1lYW5zCisJICogdGhhdCBhIGdpdmVuIHBsYW4gbm9kZSBoYXMgbm8gZW50cnkgaW4gdGhlIGxp c3QgYmVjYXVzZSBvZiBub3QgbmVlZGluZworCSAqIGFueSBpbml0aWFsIHBydW5pbmcgZG9uZSBv biBpdC4KKwkgKi8KKwlMaXN0CSAgICppbml0UHJ1bmluZ091dHB1dHM7CisJaW50CQkgICAqaXBv SW5kZXhlczsKK30gRXhlY0xvY2tSZWxzSW5mbzsKKworLyotLS0tLS0tLS0tLS0tLS0tCisgKiBF eGVjR2V0TG9ja1JlbHNDb250ZXh0CisgKgorICogSW5mb3JtYXRpb24gcGVydGFpbmluZyB0byBF eGVjdXRvckdldExvY2tSZWxzKCkgaW52b2NhdGlvbiBmb3IgYSBnaXZlbgorICogcGxhbi4KKyAq LwordHlwZWRlZiBzdHJ1Y3QgRXhlY0dldExvY2tSZWxzQ29udGV4dAoreworCU5vZGVUYWcJCXR5 cGU7CisKKwlQbGFubmVkU3RtdAkgICAqc3RtdDsJCS8qIHRhcmdldCBwbGFuICovCisJUGFyYW1M aXN0SW5mbwlwYXJhbXM7CQkvKiBFWFRFUk4gcGFyYW1ldGVycyBhdmFpbGFibGUgZm9yIHBydW5p bmcgKi8KKworCS8qIE91dHB1dCBwYXJhbWV0ZXJzIGZvciBFeGVjR2V0TG9ja1JlbHMgYW5kIGl0 cyBzdWJyb3V0aW5lcy4gKi8KKwlCaXRtYXBzZXQJICAgKmxvY2tyZWxzOworCisJLyogU2VlIHRo ZSBvbW1lbnQgaW4gdGhlIGRlZmluaXRpb24gb2YgRXhlY0xvY2tSZWxzSW5mbyBzdHJ1Y3QuICov CisJTGlzdAkJICAgKmluaXRQcnVuaW5nT3V0cHV0czsKKwlpbnQJCQkgICAqaXBvSW5kZXhlczsK K30gRXhlY0dldExvY2tSZWxzQ29udGV4dDsKKworLyoKKyAqIEFwcGVuZHMgdGhlIHByb3ZpZGVk IFBsYW5Jbml0UHJ1bmluZ091dHB1dCB0bworICogRXhlY0dldExvY2tSZWxzQ29udGV4dC5pbml0 UHJ1bmluZ091dHB1dAorICovCisjZGVmaW5lIEV4ZWNTdG9yZVBsYW5Jbml0UHJ1bmluZ091dHB1 dChjeHQsIGluaXRQcnVuaW5nT3V0cHV0LCBwbGFubm9kZSkgXAorCWRvIHsgXAorCQkoY3h0KS0+ aW5pdFBydW5pbmdPdXRwdXRzID0gbGFwcGVuZCgoY3h0KS0+aW5pdFBydW5pbmdPdXRwdXRzLCBp bml0UHJ1bmluZ091dHB1dCk7IFwKKwkJKGN4dCktPmlwb0luZGV4ZXNbKHBsYW5ub2RlKS0+cGxh bl9ub2RlX2lkXSA9IGxpc3RfbGVuZ3RoKChjeHQpLT5pbml0UHJ1bmluZ091dHB1dHMpOyBcCisJ fSB3aGlsZSAoMCkKKworLyoKKyAqIEZpbmRzIHRoZSBQbGFuSW5pdFBydW5pbmdPdXRwdXQgZm9y IGEgZ2l2ZW4gUGxhbiBub2RlIGluCisgKiBFeGVjTG9ja1JlbHNJbmZvLmluaXRQcnVuaW5nT3V0 cHV0cy4KKyAqLworI2RlZmluZSBFeGVjRmV0Y2hQbGFuSW5pdFBydW5pbmdPdXRwdXQoZXhlY2xv Y2tyZWxzaW5mbywgcGxhbm5vZGUpIFwKKwkJKCgoZXhlY2xvY2tyZWxzaW5mbykgIT0gTlVMTCAm JiAoZXhlY2xvY2tyZWxzaW5mbyktPmluaXRQcnVuaW5nT3V0cHV0cyAhPSBOSUwpID8gXAorCQkg bGlzdF9udGgoKGV4ZWNsb2NrcmVsc2luZm8pLT5pbml0UHJ1bmluZ091dHB1dHMsIFwKKwkJCQkg IChleGVjbG9ja3JlbHNpbmZvKS0+aXBvSW5kZXhlc1socGxhbm5vZGUpLT5wbGFuX25vZGVfaWRd IC0gMSkgOiBOVUxMKQorCisvKiAtLS0tLS0tLS0tLS0tLS0KKyAqIFBsYW5Jbml0UHJ1bmluZ091 dHB1dAorICoKKyAqIE5vZGUgdG8gcmVtZW1iZXIgdGhlIHJlc3VsdCBvZiBwZXJmb3JtaW5nIGlu aXRpYWwgcGFydGl0aW9uIHBydW5pbmcgc3RlcHMKKyAqIGR1cmluZyBFeGVjdXRvckdldExvY2tS ZWxzKCkgb24gbm9kZXMgdGhhdCBzdXBwb3J0IHBydW5pbmcuCisgKgorICogRXhlY0xvY2tSZWxz RG9Jbml0UHJ1bmluZygpLCB3aGljaCBydW5zIGR1cmluZyBFeGVjdXRvckdldExvY2tSZWxzKCks CisgKiBjcmVhdGVzIGl0IGFuZCBzdG9yZXMgaXQgaW4gdGhlIGNvcnJlc3BvbmRpbmcgRXhlY0xv Y2tSZWxzSW5mby4KKyAqCisgKiBFeGVjSW5pdFBhcnRpdGlvblBydW5pbmcoKSwgd2hpY2ggcnVu cyBkdXJpbmcgRXhlY3VvclN0YXJ0KCksIGZldGNoZXMgaXQKKyAqIGZyb20gdGhlIEVTdGF0ZSdz IEV4ZWNMb2NrUmVsc0luZm8gKGlmIGFueSkgYW5kIHVzZXMgdGhlIHZhbHVlIG9mCisgKiBpbml0 aWFsbHlfdmFsaWRfc3VicGxhbnMgY29udGFpbmVkIGluIGl0IGFzLWlzIHRvIHNlbGVjdCB0aGUg c3VicGxhbnMgdG8gYmUKKyAqIGluaXRpYWxpemVkIGZvciBleGVjdXRpb24sIGluc3RlYWQgb2Yg cmUtZXZhbHVhdGluZyB0aGF0IGJ5IHBlcmZvcm1pbmcKKyAqIGluaXRpYWwgcHJ1bmluZyBhZ2Fp bi4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgUGxhbkluaXRQcnVuaW5nT3V0cHV0Cit7CisJTm9kZVRh ZwkJdHlwZTsKKworCUJpdG1hcHNldCAgKmluaXRpYWxseV92YWxpZF9zdWJwbGFuczsKK30gUGxh bkluaXRQcnVuaW5nT3V0cHV0OworCiAvKiAtLS0tLS0tLS0tLS0tLS0tCiAgKgkJUGxhblN0YXRl IG5vZGUKICAqCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9ub2Rlcy5oIGIvc3JjL2lu Y2x1ZGUvbm9kZXMvbm9kZXMuaAppbmRleCAwNWYwYjc5ZTgyLi4wMGM0ZDgyOTNlIDEwMDY0NAot LS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9ub2Rlcy5oCisrKyBiL3NyYy9pbmNsdWRlL25vZGVzL25v ZGVzLmgKQEAgLTk2LDYgKzk2LDExIEBAIHR5cGVkZWYgZW51bSBOb2RlVGFnCiAJVF9QYXJ0aXRp b25QcnVuZVN0ZXBDb21iaW5lLAogCVRfUGxhbkludmFsSXRlbSwKIAorCS8qIFRBR1MgRk9SIEVY RUNVVE9SIFBSRVAgTk9ERVMgKGV4ZWNub2Rlcy5oKSAqLworCVRfRXhlY0dldExvY2tSZWxzQ29u dGV4dCwKKwlUX0V4ZWNMb2NrUmVsc0luZm8sCisJVF9QbGFuSW5pdFBydW5pbmdPdXRwdXQsCisK IAkvKgogCSAqIFRBR1MgRk9SIFBMQU4gU1RBVEUgTk9ERVMgKGV4ZWNub2Rlcy5oKQogCSAqCmRp ZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaCBiL3NyYy9pbmNsdWRlL25v ZGVzL3BhdGhub2Rlcy5oCmluZGV4IDUzMjdkOWJhOGIuLjAxOTcxOWMxYTQgMTAwNjQ0Ci0tLSBh L3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oCisrKyBiL3NyYy9pbmNsdWRlL25vZGVzL3Bh dGhub2Rlcy5oCkBAIC0xMjksNiArMTI5LDEwIEBAIHR5cGVkZWYgc3RydWN0IFBsYW5uZXJHbG9i YWwKIAogCWNoYXIJCW1heFBhcmFsbGVsSGF6YXJkOwkvKiB3b3JzdCBQUk9QQVJBTExFTCBoYXph cmQgbGV2ZWwgKi8KIAorCWJvb2wJCWNvbnRhaW5zSW5pdGlhbFBydW5pbmc7CS8qIERvIHNvbWUg UGxhbiBub2RlcyBpbiB0aGUgdHJlZQorCQkJCQkJCQkJCSAqIGhhdmUgaW5pdGlhbCAocHJlLWV4 ZWMpIHBydW5pbmcKKwkJCQkJCQkJCQkgKiBzdGVwcz8gKi8KKwogCVBhcnRpdGlvbkRpcmVjdG9y eSBwYXJ0aXRpb25fZGlyZWN0b3J5OyAvKiBwYXJ0aXRpb24gZGVzY3JpcHRvcnMgKi8KIAogCUJp dG1hcHNldCAqZWxpZGVkQXBwZW5kUGFydGVkUmVsczsJLyogQ29tYmluZWQgcGFydGl0aW9uZWRf cmVscyBvZiBhbGwKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL3BsYW5ub2Rlcy5oIGIv c3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5vZGVzLmgKaW5kZXggYmQ4N2MzNWQ2Yy4uYmZkYjViYmYy OCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5vZGVzLmgKKysrIGIvc3JjL2lu Y2x1ZGUvbm9kZXMvcGxhbm5vZGVzLmgKQEAgLTU5LDEwICs1OSwxNiBAQCB0eXBlZGVmIHN0cnVj dCBQbGFubmVkU3RtdAogCiAJYm9vbAkJcGFyYWxsZWxNb2RlTmVlZGVkOyAvKiBwYXJhbGxlbCBt b2RlIHJlcXVpcmVkIHRvIGV4ZWN1dGU/ICovCiAKKwlib29sCQljb250YWluc0luaXRpYWxQcnVu aW5nOwkvKiBEbyBzb21lIFBsYW4gbm9kZXMgaW4gdGhlIHRyZWUKKwkJCQkJCQkJCQkgKiBoYXZl IGluaXRpYWwgKHByZS1leGVjKSBwcnVuaW5nCisJCQkJCQkJCQkJICogc3RlcHM/ICovCisKIAlp bnQJCQlqaXRGbGFnczsJCS8qIHdoaWNoIGZvcm1zIG9mIEpJVCBzaG91bGQgYmUgcGVyZm9ybWVk ICovCiAKIAlzdHJ1Y3QgUGxhbiAqcGxhblRyZWU7CQkvKiB0cmVlIG9mIFBsYW4gbm9kZXMgKi8K IAorCWludAkJCW51bVBsYW5Ob2RlczsJLyogbnVtYmVyIG9mIG5vZGVzIGluIHBsYW5UcmVlICov CisKIAlMaXN0CSAgICpydGFibGU7CQkJLyogbGlzdCBvZiBSYW5nZVRibEVudHJ5IG5vZGVzICov CiAKIAkvKiBydGFibGUgaW5kZXhlcyBvZiB0YXJnZXQgcmVsYXRpb25zIGZvciBJTlNFUlQvVVBE QVRFL0RFTEVURSAqLwpAQCAtMTE4OSw2ICsxMTk1LDEzIEBAIHR5cGVkZWYgc3RydWN0IFBsYW5S b3dNYXJrCiAgKiBwcnVuZV9pbmZvcwkJCUxpc3Qgb2YgTGlzdHMgY29udGFpbmluZyBQYXJ0aXRp b25lZFJlbFBydW5lSW5mbyBub2RlcywKICAqCQkJCQkJb25lIHN1Ymxpc3QgcGVyIHJ1bi10aW1l LXBydW5hYmxlIHBhcnRpdGlvbiBoaWVyYXJjaHkKICAqCQkJCQkJYXBwZWFyaW5nIGluIHRoZSBw YXJlbnQgcGxhbiBub2RlJ3Mgc3VicGxhbnMuCisgKgorICogbmVlZHNfaW5pdF9wcnVuaW5nCURv ZXMgYW55IG9mIHRoZSBQYXJ0aXRpb25lZFJlbFBydW5lSW5mb3MgaW4KKyAqCQkJCQkJcHJ1bmVf aW5mb3MgaGF2ZSBpdHMgaW5pdGlhbF9wcnVuaW5nX3N0ZXBzIHNldD8KKyAqCisgKiBuZWVkc19l eGVjX3BydW5pbmcJRG9lcyBhbnkgb2YgdGhlIFBhcnRpdGlvbmVkUmVsUHJ1bmVJbmZvcyBpbgor ICoJCQkJCQlwcnVuZV9pbmZvcyBoYXZlIGl0cyBleGVjX3BydW5pbmdfc3RlcHMgc2V0PworICoK ICAqIG90aGVyX3N1YnBsYW5zCQlJbmRleGVzIG9mIGFueSBzdWJwbGFucyB0aGF0IGFyZSBub3Qg YWNjb3VudGVkIGZvcgogICoJCQkJCQlieSBhbnkgb2YgdGhlIFBhcnRpdGlvbmVkUmVsUHJ1bmVJ bmZvIG5vZGVzIGluCiAgKgkJCQkJCSJwcnVuZV9pbmZvcyIuICBUaGVzZSBzdWJwbGFucyBtdXN0 IG5vdCBiZSBwcnVuZWQuCkBAIC0xMTk3LDYgKzEyMTAsOCBAQCB0eXBlZGVmIHN0cnVjdCBQYXJ0 aXRpb25QcnVuZUluZm8KIHsKIAlOb2RlVGFnCQl0eXBlOwogCUxpc3QJICAgKnBydW5lX2luZm9z OworCWJvb2wJCW5lZWRzX2luaXRfcHJ1bmluZzsKKwlib29sCQluZWVkc19leGVjX3BydW5pbmc7 CiAJQml0bWFwc2V0ICAqb3RoZXJfc3VicGxhbnM7CiB9IFBhcnRpdGlvblBydW5lSW5mbzsKIApk aWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdGNvcC90Y29wcHJvdC5oIGIvc3JjL2luY2x1ZGUvdGNv cC90Y29wcHJvdC5oCmluZGV4IDkyMjkxYTc1MGQuLmJmODBjNTNiZWQgMTAwNjQ0Ci0tLSBhL3Ny Yy9pbmNsdWRlL3Rjb3AvdGNvcHByb3QuaAorKysgYi9zcmMvaW5jbHVkZS90Y29wL3Rjb3Bwcm90 LmgKQEAgLTY0LDcgKzY0LDcgQEAgZXh0ZXJuIFBsYW5uZWRTdG10ICpwZ19wbGFuX3F1ZXJ5KFF1 ZXJ5ICpxdWVyeXRyZWUsIGNvbnN0IGNoYXIgKnF1ZXJ5X3N0cmluZywKIAkJCQkJCQkJICBQYXJh bUxpc3RJbmZvIGJvdW5kUGFyYW1zKTsKIGV4dGVybiBMaXN0ICpwZ19wbGFuX3F1ZXJpZXMoTGlz dCAqcXVlcnl0cmVlcywgY29uc3QgY2hhciAqcXVlcnlfc3RyaW5nLAogCQkJCQkJCSBpbnQgY3Vy c29yT3B0aW9ucywKLQkJCQkJCQkgUGFyYW1MaXN0SW5mbyBib3VuZFBhcmFtcyk7CisJCQkJCQkJ IFBhcmFtTGlzdEluZm8gYm91bmRQYXJhbXMsIExpc3QgKipleGVjbG9ja3JlbHNpbmZvX2xpc3Qp OwogCiBleHRlcm4gYm9vbCBjaGVja19tYXhfc3RhY2tfZGVwdGgoaW50ICpuZXd2YWwsIHZvaWQg KipleHRyYSwgR3VjU291cmNlIHNvdXJjZSk7CiBleHRlcm4gdm9pZCBhc3NpZ25fbWF4X3N0YWNr X2RlcHRoKGludCBuZXd2YWwsIHZvaWQgKmV4dHJhKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRl L3V0aWxzL3BsYW5jYWNoZS5oIGIvc3JjL2luY2x1ZGUvdXRpbHMvcGxhbmNhY2hlLmgKaW5kZXgg OTViOTllM2QyNS4uNTZiMGRjYzZiZCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdXRpbHMvcGxh bmNhY2hlLmgKKysrIGIvc3JjL2luY2x1ZGUvdXRpbHMvcGxhbmNhY2hlLmgKQEAgLTE0OCw2ICsx NDgsOSBAQCB0eXBlZGVmIHN0cnVjdCBDYWNoZWRQbGFuCiB7CiAJaW50CQkJbWFnaWM7CQkJLyog c2hvdWxkIGVxdWFsIENBQ0hFRFBMQU5fTUFHSUMgKi8KIAlMaXN0CSAgICpzdG10X2xpc3Q7CQkv KiBsaXN0IG9mIFBsYW5uZWRTdG10cyAqLworCUxpc3QJICAgKmV4ZWNsb2NrcmVsc2luZm9fbGlz dDsJLyogbGlzdCBvZiBFeGVjdXRvckdldExvY2tSZWxzUmVzdWx0IHdpdGggb25lCisJCQkJCQkJ CQkgKiBlbGVtZW50IGZvciBlYWNoIG9mIHN0bXRfbGlzdDsgTklMCisJCQkJCQkJCQkgKiBpZiBu b3QgYSBnZW5lcmljIHBsYW4gKi8KIAlib29sCQlpc19vbmVzaG90OwkJLyogaXMgaXQgYSAib25l c2hvdCIgcGxhbj8gKi8KIAlib29sCQlpc19zYXZlZDsJCS8qIGlzIENhY2hlZFBsYW4gaW4gYSBs b25nLWxpdmVkIGNvbnRleHQ/ICovCiAJYm9vbAkJaXNfdmFsaWQ7CQkvKiBpcyB0aGUgc3RtdF9s aXN0IGN1cnJlbnRseSB2YWxpZD8gKi8KQEAgLTE1OCw2ICsxNjEsOSBAQCB0eXBlZGVmIHN0cnVj dCBDYWNoZWRQbGFuCiAJaW50CQkJZ2VuZXJhdGlvbjsJCS8qIHBhcmVudCdzIGdlbmVyYXRpb24g bnVtYmVyIGZvciB0aGlzIHBsYW4gKi8KIAlpbnQJCQlyZWZjb3VudDsJCS8qIGNvdW50IG9mIGxp dmUgcmVmZXJlbmNlcyB0byB0aGlzIHN0cnVjdCAqLwogCU1lbW9yeUNvbnRleHQgY29udGV4dDsJ CS8qIGNvbnRleHQgY29udGFpbmluZyB0aGlzIENhY2hlZFBsYW4gKi8KKwlNZW1vcnlDb250ZXh0 IGV4ZWNsb2NrcmVsc2luZm9fY29udGV4dDsJLyogY29udGV4dCBjb250YWluaW5nCisJCQkJCQkJ CQkJCSAqIGV4ZWNsb2NrcmVsc2luZm9fbGlzdCwKKwkJCQkJCQkJCQkJICogYSBjaGlsZCBvZiB0 aGUgYWJvdmUgY29udGV4dCAqLwogfSBDYWNoZWRQbGFuOwogCiAvKgpkaWZmIC0tZ2l0IGEvc3Jj L2luY2x1ZGUvdXRpbHMvcG9ydGFsLmggYi9zcmMvaW5jbHVkZS91dGlscy9wb3J0YWwuaAppbmRl eCBhZWRkYmRhZmU1Li45YWJhY2U2NzM0IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS91dGlscy9w b3J0YWwuaAorKysgYi9zcmMvaW5jbHVkZS91dGlscy9wb3J0YWwuaApAQCAtMTM3LDYgKzEzNywx MCBAQCB0eXBlZGVmIHN0cnVjdCBQb3J0YWxEYXRhCiAJQ29tbWFuZFRhZwljb21tYW5kVGFnOwkJ LyogY29tbWFuZCB0YWcgZm9yIG9yaWdpbmFsIHF1ZXJ5ICovCiAJUXVlcnlDb21wbGV0aW9uIHFj OwkJCS8qIGNvbW1hbmQgY29tcGxldGlvbiBkYXRhIGZvciBleGVjdXRlZCBxdWVyeSAqLwogCUxp c3QJICAgKnN0bXRzOwkJCS8qIGxpc3Qgb2YgUGxhbm5lZFN0bXRzICovCisJTGlzdAkgICAqZXhl Y2xvY2tyZWxzaW5mb3M7CS8qIGxpc3Qgb2YgRXhlY3V0b3JHZXRMb2NrUmVsc1Jlc3VsdHMgd2l0 aCBvbmUgZWxlbWVudAorCQkJCQkJCQkgKiBmb3IgZWFjaCBvZiAnc3RtdHMnOyBzYW1lIGFzCisJ CQkJCQkJCSAqIGNwbGFuLT5leGVjbG9ja3JlbHNpbmZvX2xpc3QgaWYgY3BsYW4gaXMKKwkJCQkJ CQkJICogbm90IE5VTEwgKi8KIAlDYWNoZWRQbGFuICpjcGxhbjsJCQkvKiBDYWNoZWRQbGFuLCBp ZiBzdG10cyBhcmUgZnJvbSBvbmUgKi8KIAogCVBhcmFtTGlzdEluZm8gcG9ydGFsUGFyYW1zOyAv KiBwYXJhbXMgdG8gcGFzcyB0byBxdWVyeSAqLwpAQCAtMjQxLDYgKzI0NSw3IEBAIGV4dGVybiB2 b2lkIFBvcnRhbERlZmluZVF1ZXJ5KFBvcnRhbCBwb3J0YWwsCiAJCQkJCQkJICBjb25zdCBjaGFy ICpzb3VyY2VUZXh0LAogCQkJCQkJCSAgQ29tbWFuZFRhZyBjb21tYW5kVGFnLAogCQkJCQkJCSAg TGlzdCAqc3RtdHMsCisJCQkJCQkJICBMaXN0ICpleGVjbG9ja3JlbHNpbmZvcywKIAkJCQkJCQkg IENhY2hlZFBsYW4gKmNwbGFuKTsKIGV4dGVybiBQbGFubmVkU3RtdCAqUG9ydGFsR2V0UHJpbWFy eVN0bXQoUG9ydGFsIHBvcnRhbCk7CiBleHRlcm4gdm9pZCBQb3J0YWxDcmVhdGVIb2xkU3RvcmUo UG9ydGFsIHBvcnRhbCk7Ci0tIAoyLjI0LjEKCg== --0000000000003b47cb05db424440--