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 1lysjf-0008If-AS for pgsql-hackers@arkaria.postgresql.org; Thu, 01 Jul 2021 09:11:51 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1lysje-0006w4-9b for pgsql-hackers@arkaria.postgresql.org; Thu, 01 Jul 2021 09:11:50 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1lysjd-0006vw-Kw for pgsql-hackers@lists.postgresql.org; Thu, 01 Jul 2021 09:11:50 +0000 Received: from mail-pg1-x52b.google.com ([2607:f8b0:4864:20::52b]) by makus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1lysja-0001RO-De for pgsql-hackers@lists.postgresql.org; Thu, 01 Jul 2021 09:11:48 +0000 Received: by mail-pg1-x52b.google.com with SMTP id e20so5546948pgg.0 for ; Thu, 01 Jul 2021 02:11:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:from:date:message-id:subject:to; bh=lmd/XyKi6cxXt3RvWgzItngjvTA6H7chZWOrOD7/qFA=; b=gFpDyB4p1sEIlRZQ7gWmY6R//EYjeYUGzNwvvIbrRdtAV0wxslM7hDz73XIlZDQF93 y614pcD+XJXJj/EcCdoMHL52rCxvOKXGP5U9Ir8oFRXAQICwKwjk58d2IEn+Y9IlPbZL 5NXKWkHdTVShO7Eh28fyPZNlG2B759ctiONxO6E9LhyT80DEQLdg6vfhUmOBJiRQZVqq HAIANN87klWHNmfJmVZmILslXj7uhmbQs+0JcJNF8F7BAQu2uLoo9b9owWPKTBsj1076 FUsv8IDwDDbxE33ARuxdVQ5r5vbj0d3FlHlbiv/uQl9K/UREB9QzrLRcT0eUpUPBkjVT abtw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:from:date:message-id:subject:to; bh=lmd/XyKi6cxXt3RvWgzItngjvTA6H7chZWOrOD7/qFA=; b=CVsIM0RD7O8ToZwBn8drfQ/I7v4wFQBvy77Eezi8yZwvFoXv6S96fo79kdp5QmWhHo 7tW5WplLvPdC8oQP+ysUDeBor7d0CWn6CaSKb6cwKN+ZbPrFspRCPRnpvRp/0fKNvYi2 xiH/NlqN9FleHvedVYzPHKSNmFr7TUnukYcKaMnlXnCYZqSnLlvnCtlowIymth1nWq1g Va15L9LbVl/kRyGv0uwzAiP/+nSQ122DRXNkEFa5iM99xRJPxAKqhiARw0HgXEV9rEAf oU4GemtWs7esG7nrUgA7BjSG7C0caaOM4TRjfJfGVEEQ2WSgJ8J7RAwYahlf0OPdNPEg 73ug== X-Gm-Message-State: AOAM531L2d6vp4aobCAEr/aQypTeMI/mGR99U7nb6VUSZV0LTRI8QZ3J GYkyZ6mjBA/ekVn8xmFvdQzcuoHH+BqVKR2B3MvLX8sBn9Q= X-Google-Smtp-Source: ABdhPJyrJSzyaOJSVXYEkQA3u5CKmc/cOvx8wtUuLfkwNIXIZ1VsBhfuG5vnYP/WIlLYjeu60+G14AWvLIGf8QG1W7g= X-Received: by 2002:a63:4a18:: with SMTP id x24mr38126097pga.303.1625130704505; Thu, 01 Jul 2021 02:11:44 -0700 (PDT) MIME-Version: 1.0 From: David Rowley Date: Thu, 1 Jul 2021 21:11:21 +1200 Message-ID: Subject: Window Function "Run Conditions" To: PostgreSQL Developers Content-Type: multipart/mixed; boundary="0000000000005b277305c60c3a88" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000005b277305c60c3a88 Content-Type: text/plain; charset="UTF-8" It seems like a few too many years of an SQL standard without any standardised way to LIMIT the number of records in a result set caused various applications to adopt some strange ways to get this behaviour. Over here in the PostgreSQL world, we just type LIMIT n; at the end of our queries. I believe Oracle people did a few tricks with a special column named "rownum". Another set of people needed SQL that would work over multiple DBMSes and used something like: SELECT * FROM (SELECT ... row_number() over (order by ...) rn) a WHERE rn <= 10; I believe it's fairly common to do paging this way on commerce sites. The problem with PostgreSQL here is that neither the planner nor executor knows that once we get to row_number 11 that we may as well stop. The number will never go back down in this partition. I'd like to make this better for PostgreSQL 15. I've attached a WIP patch to do so. How this works is that I've added prosupport functions for each of row_number(), rank() and dense_rank(). When doing qual pushdown, if we happen to hit a windowing function, instead of rejecting the pushdown, we see if there's a prosupport function and if there is, ask it if this qual can be used to allow us to stop emitting tuples from the Window node by making use of this qual. I've called these "run conditions". Basically, keep running while this remains true. Stop when it's not. We can't always use the qual directly. For example, if someone does. SELECT * FROM (SELECT ... row_number() over (order by ...) rn) a WHERE rn = 10; then if we use the rn = 10 qual, we'd think we could stop right away. Instead, I've made the prosupport function handle this by generating a rn <= 10 qual so that we can stop once we get to 11. In this case we cannot completely pushdown the qual. It needs to remain in place to filter out rn values 1-9. Row_number(), rank() and dense_rank() are all monotonically increasing functions. But we're not limited to just those. COUNT(*) works too providing the frame bounds guarantee that the function is either monotonically increasing or decreasing. COUNT(*) OVER (ORDER BY .. ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) is monotonically decreasing, whereas the standard bound options would make it monotonically increasing. The same could be done for MIN() and MAX(). I just don't think that's worth doing. It seems unlikely that would get enough use. Anyway. I'd like to work on this more during the PG15 cycle. I believe the attached patch makes this work ok. There are just a few things to iron out. 1) Unsure of the API to the prosupport function. I wonder if the prosupport function should just be able to say if the function is either monotonically increasing or decreasing or neither then have core code build a qual. That would make the job of building new functions easier, but massively reduce the flexibility of the feature. I'm just not sure it needs to do more in the future. 2) Unsure if what I've got to make EXPLAIN show the run condition is the right way to do it. Because I don't want nodeWindow.c to have to re-evaluate the window function to determine of the run condition is no longer met, I've coded the qual to reference the varno in the window node's targetlist. That qual is no good for EXPLAIN so had to include another set of quals that include the WindowFunc reference. I saw that Index Only Scans have a similar means to make EXPLAIN work, so I just followed that. David --0000000000005b277305c60c3a88 Content-Type: application/octet-stream; name="v1-0001-Allow-some-window-functions-to-finish-execution-e.patch" Content-Disposition: attachment; filename="v1-0001-Allow-some-window-functions-to-finish-execution-e.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_kqkny3gy0 RnJvbSA5OWEwZmFlNTBlZDE3OGQ4OGI0MjNlNzY1ZTNlZjFkM2M3OWY2OGE4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBEYXZpZCBSb3dsZXkgPGRncm93bGV5QGdtYWlsLmNvbT4KRGF0 ZTogU2F0LCA4IE1heSAyMDIxIDIzOjQzOjI1ICsxMjAwClN1YmplY3Q6IFtQQVRDSCB2MV0gQWxs b3cgc29tZSB3aW5kb3cgZnVuY3Rpb25zIHRvIGZpbmlzaCBleGVjdXRpb24gZWFybHkKCldpbmRv dyBmdW5jdGlvbnMgc3VjaCBhcyByb3dfbnVtYmVyKCkgYWx3YXlzIHJldHVybiBhIHZhbHVlIGhp Z2hlciB0aGFuCnRoZSBvbmUgcHJldmlvdXNseSBpbiBhbnkgZ2l2ZW4gcGFydGl0aW9uLiAgSWYg YSBxdWVyeSB3ZXJlIHRvIG9ubHkKcmVxdWVzdCB0aGUgZmlyc3QgZmV3IHJvdyBudW1iZXJzLCB0 aGVuIHRyYWRpdGlvbmFsbHkgd2Ugd291bGQgY29udGludWUKZXZhbHVhdGluZyB0aGUgV2luZG93 QWdnIG5vZGUgdW50aWwgYWxsIHR1cGxlcyBhcmUgZXhoYXVzdGVkLiAgSG93ZXZlciwgaXQKaXMg cG9zc2libGUgaWYgc29tZW9uZSwgc2F5IG9ubHkgd2FudGVkIGFsbCByb3cgbnVtYmVycyA8PSAx MCwgdGhlbiB3ZQpjb3VsZCBqdXN0IHN0b3Agb25jZSB3ZSBnZXQgbnVtYmVyIDExLgoKSGVyZSB3 ZSBpbXBsZW1lbnQgbWVhbnMgdG8gZG8ganVzdCB0aGF0LiAgVGhpcyBpcyBkb25lIGJ5IHdheSBv ZiBhZGRpbmcgYQpwcm9zdXBwb3J0IGZ1bmN0aW9uIHRvIHZhcmlvdXMgb2YgdGhlIGJ1aWx0LWlu IHdpbmRvdyBmdW5jdGlvbnMgYW5kIGFkZGluZwpzdXBwb3J0aW5nIGNvZGUgdG8gYWxsb3cgdGhl bSB0byByZXZpZXcgYW55IE9wRXhwcnMgdGhhdCBhcmUgY29tcGFyaW5nCnRoZWlyIG91dHB1dCB0 byBhbm90aGVyIGFyZ3VtZW50LiAgSWYgdGhlIHByb3N1cHBvcnQgZnVuY3Rpb24gZGVjaWRlcyB0 aGF0CnRoZSBnaXZlbiBxdWFsIGlzIHN1aXRhYmxlLCB0aGVuIHRoZSBxdWFsIGdldHMgYWRkZWQg dG8gdGhlIFdpbmRvd0Z1bmMncwoicnVuY29uZGl0aW9uIi4gIFRoZXNlIHJ1bmNvbmRpdGlvbnMg YXJlIGFjY3VtdWxhdGVkIGZvciBlYWNoIFdpbmRvd0Z1bmMKaW4gdGhlIFdpbmRvd0FnZyBub2Rl IGFuZCBkdXJpbmcgZXhlY3V0aW9uLCB3ZSBqdXN0IHN0b3AgZXhlY3V0aW9uCndoZW5ldmVyIHRo aXMgY29uZGl0aW9uIGlzIG5vIGxvbmdlciB0cnVlLgoKSW4gbWFueSBjYXNlcyB0aGUgaW5wdXQg cXVhbCBjYW4ganVzdCBiZWNvbWUgdGhlIHJ1bmNvbmRpdGlvbiB2ZXJiYXRpbSwKaG93ZXZlciwg d2hlbiB0aGUgdXNlciBjb21wYXJlcywgc2F5LCBhIHJvd19udW1iZXIoKSByZXN1bHQgd2l0aCBh bgplcXVhbGl0eSBvcGVyYXRvciwgdGhlbiB0aGF0IHF1YWwgY2Fubm90IGJlIHVzZWQgdmVyYmF0 aW0uICBXZSBtdXN0CnJlcGxhY2UgaXQgd2l0aCBzb21ldGhpbmcgdGhhdCBnZXRzIGFsbCByZXN1 bHRzIHVwIHRvIGFuZCBpbmNsdWRpbmcgdGhlCmVxdWFsaXR5IG9wZXJhbmQuICBGb3IgZXhhbXBs ZSwgbGV0IHJuIGJlIHRoZSBhbGlhcyBmb3IgYSByb3dfbnVtYmVyKCkKY29sdW1uLCBpZiB0aGUg dXNlciBkb2VzIHJuID0gMTAsIHRoZW4gd2UgbXVzdCBtYWtlIHJuIDw9IDEwIHRoZSBydW4KY29u ZGl0aW9uLiAgVGhhdCB3aWxsIGJlIHRydWUgcmlnaHQgdXAgdW50aWwgcm4gYmVjb21lcyAxMS4g V2hlbiB0aGF0Cm9jY3Vycywgd2Ugc3RvcCBleGVjdXRpb24uCgpIZXJlIHdlIGFkZCBwcm9zdXBw b3J0IGZ1bmN0aW9ucyB0byBhbGxvdyB0aGlzIHRvIHdvcmsgZm9yOyByb3dfbnVtYmVyKCksCnJh bmsoKSwgYW5kIGRlbnNlX3JhbmsoKS4KLS0tCiBzcmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWlu LmMgICAgICAgICAgfCAgIDQgKwogc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZVdpbmRvd0FnZy5j ICAgIHwgIDI3ICsrLQogc3JjL2JhY2tlbmQvbm9kZXMvY29weWZ1bmNzLmMgICAgICAgICAgIHwg ICA0ICsKIHNyYy9iYWNrZW5kL25vZGVzL2VxdWFsZnVuY3MuYyAgICAgICAgICB8ICAgMiArCiBz cmMvYmFja2VuZC9ub2Rlcy9vdXRmdW5jcy5jICAgICAgICAgICAgfCAgIDQgKwogc3JjL2JhY2tl bmQvbm9kZXMvcmVhZGZ1bmNzLmMgICAgICAgICAgIHwgICA0ICsKIHNyYy9iYWNrZW5kL29wdGlt aXplci9wYXRoL2FsbHBhdGhzLmMgICB8IDE4MyArKysrKysrKysrKysrKysrLQogc3JjL2JhY2tl bmQvb3B0aW1pemVyL3BsYW4vY3JlYXRlcGxhbi5jIHwgICA3ICstCiBzcmMvYmFja2VuZC9vcHRp bWl6ZXIvcGxhbi9zZXRyZWZzLmMgICAgfCAgIDggKwogc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNl X2NvbGxhdGUuYyAgICAgIHwgICAzICstCiBzcmMvYmFja2VuZC91dGlscy9hZHQvaW50OC5jICAg ICAgICAgICAgfCAxMjEgKysrKysrKysrKysKIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC93aW5kb3dm dW5jcy5jICAgICB8IDIyMCArKysrKysrKysrKysrKysrKysrKwogc3JjL2JhY2tlbmQvdXRpbHMv bWlzYy9xdWVyeWp1bWJsZS5jICAgIHwgICAyICstCiBzcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3By b2MuZGF0ICAgICAgICAgfCAgMzUgKysrLQogc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgg ICAgICAgICAgIHwgICA0ICsKIHNyYy9pbmNsdWRlL25vZGVzL25vZGVzLmggICAgICAgICAgICAg ICB8ICAgMyArLQogc3JjL2luY2x1ZGUvbm9kZXMvcGFyc2Vub2Rlcy5oICAgICAgICAgIHwgICAy ICsKIHNyYy9pbmNsdWRlL25vZGVzL3BsYW5ub2Rlcy5oICAgICAgICAgICB8ICAgMyArCiBzcmMv aW5jbHVkZS9ub2Rlcy9zdXBwb3J0bm9kZXMuaCAgICAgICAgfCAgODYgKysrKysrKy0KIHNyYy90 ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvd2luZG93Lm91dCAgICB8IDI1NSArKysrKysrKysrKysrKysr KysrKysrKysKIHNyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3dpbmRvdy5zcWwgICAgICAgICB8IDEzMiAr KysrKysrKysrKysKIDIxIGZpbGVzIGNoYW5nZWQsIDEwOTAgaW5zZXJ0aW9ucygrKSwgMTkgZGVs ZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXhwbGFpbi5jIGIv c3JjL2JhY2tlbmQvY29tbWFuZHMvZXhwbGFpbi5jCmluZGV4IGU4MWI5OTAwOTIuLjc5MjZiYjU3 NDMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4uYworKysgYi9zcmMv YmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMKQEAgLTE5NzcsNiArMTk3NywxMCBAQCBFeHBsYWlu Tm9kZShQbGFuU3RhdGUgKnBsYW5zdGF0ZSwgTGlzdCAqYW5jZXN0b3JzLAogCQkJCXNob3dfaW5z dHJ1bWVudGF0aW9uX2NvdW50KCJSb3dzIFJlbW92ZWQgYnkgRmlsdGVyIiwgMSwKIAkJCQkJCQkJ CQkgICBwbGFuc3RhdGUsIGVzKTsKIAkJCWJyZWFrOworCQljYXNlIFRfV2luZG93QWdnOgorCQkJ c2hvd191cHBlcl9xdWFsKCgoV2luZG93QWdnICopIHBsYW4pLT5ydW5jb25kaXRpb25vcmlnLAor CQkJCQkJCSJSdW4gQ29uZGl0aW9uIiwgcGxhbnN0YXRlLCBhbmNlc3RvcnMsIGVzKTsKKwkJCWJy ZWFrOwogCQljYXNlIFRfR3JvdXA6CiAJCQlzaG93X2dyb3VwX2tleXMoY2FzdE5vZGUoR3JvdXBT dGF0ZSwgcGxhbnN0YXRlKSwgYW5jZXN0b3JzLCBlcyk7CiAJCQlzaG93X3VwcGVyX3F1YWwocGxh bi0+cXVhbCwgIkZpbHRlciIsIHBsYW5zdGF0ZSwgYW5jZXN0b3JzLCBlcyk7CmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlV2luZG93QWdnLmMgYi9zcmMvYmFja2VuZC9leGVj dXRvci9ub2RlV2luZG93QWdnLmMKaW5kZXggZjhlYTllOTZkOC4uMjc4YTBmYWQ4MyAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZVdpbmRvd0FnZy5jCisrKyBiL3NyYy9iYWNr ZW5kL2V4ZWN1dG9yL25vZGVXaW5kb3dBZ2cuYwpAQCAtMjAyMyw2ICsyMDIzLDcgQEAgc3RhdGlj IFR1cGxlVGFibGVTbG90ICoKIEV4ZWNXaW5kb3dBZ2coUGxhblN0YXRlICpwc3RhdGUpCiB7CiAJ V2luZG93QWdnU3RhdGUgKndpbnN0YXRlID0gY2FzdE5vZGUoV2luZG93QWdnU3RhdGUsIHBzdGF0 ZSk7CisJVHVwbGVUYWJsZVNsb3QgKnNsb3Q7CiAJRXhwckNvbnRleHQgKmVjb250ZXh0OwogCWlu dAkJCWk7CiAJaW50CQkJbnVtZnVuY3M7CkBAIC0yMjM1LDcgKzIyMzYsMjAgQEAgRXhlY1dpbmRv d0FnZyhQbGFuU3RhdGUgKnBzdGF0ZSkKIAkgKi8KIAllY29udGV4dC0+ZWN4dF9vdXRlcnR1cGxl ID0gd2luc3RhdGUtPnNzLnNzX1NjYW5UdXBsZVNsb3Q7CiAKLQlyZXR1cm4gRXhlY1Byb2plY3Qo d2luc3RhdGUtPnNzLnBzLnBzX1Byb2pJbmZvKTsKKwlzbG90ID0gRXhlY1Byb2plY3Qod2luc3Rh dGUtPnNzLnBzLnBzX1Byb2pJbmZvKTsKKworCS8qCisJICogTm93IGV2YWx1YXRlIHRoZSBydW4g Y29uZGl0aW9uIHRvIHNlZSBpZiB3ZSBuZWVkIHRvIGNvbnRpbnVlIGZ1cnRoZXIKKwkgKiB3aXRo IGV4ZWN1dGlvbi4KKwkgKi8KKwllY29udGV4dC0+ZWN4dF9zY2FudHVwbGUgPSBzbG90OworCWlm ICghRXhlY1F1YWwod2luc3RhdGUtPnJ1bmNvbmRpdGlvbiwgZWNvbnRleHQpKQorCXsKKwkJd2lu c3RhdGUtPmFsbF9kb25lID0gdHJ1ZTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJcmV0dXJuIHNs b3Q7CiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tCkBAIC0yMzA3LDYgKzIzMjEsMTcgQEAgRXhl Y0luaXRXaW5kb3dBZ2coV2luZG93QWdnICpub2RlLCBFU3RhdGUgKmVzdGF0ZSwgaW50IGVmbGFn cykKIAlBc3NlcnQobm9kZS0+cGxhbi5xdWFsID09IE5JTCk7CiAJd2luc3RhdGUtPnNzLnBzLnF1 YWwgPSBOVUxMOwogCisJLyoKKwkgKiBTZXR1cCB0aGUgcnVuIGNvbmRpdGlvbiwgaWYgd2UgcmVj ZWl2ZWQgb25lIGZyb20gdGhlIHF1ZXJ5IHBsYW5uZXIuCisJICogV2hlbiBzZXQsIHRoaXMgY2Fu IGFsbG93IHVzIHRvIGZpbmlzaCBleGVjdXRpb24gZWFybHkgYmVjYXVzZSB3ZSBrbm93CisJICog c29tZSBoaWdoZXItbGV2ZWwgZmlsdGVyIGV4aXN0cyB0aGF0IHdvdWxkIGp1c3QgZmlsdGVyIG91 dCBhbnkgZnVydGhlcgorCSAqIHJlc3VsdHMgdGhhdCB3ZSBwcm9kdWNlLgorCSAqLworCWlmIChu b2RlLT5ydW5jb25kaXRpb24gIT0gTklMKQorCQl3aW5zdGF0ZS0+cnVuY29uZGl0aW9uID0gRXhl Y0luaXRRdWFsKG5vZGUtPnJ1bmNvbmRpdGlvbiwgKFBsYW5TdGF0ZSAqKSB3aW5zdGF0ZSk7CisJ ZWxzZQorCQl3aW5zdGF0ZS0+cnVuY29uZGl0aW9uID0gTlVMTDsKKwogCS8qCiAJICogaW5pdGlh bGl6ZSBjaGlsZCBub2RlcwogCSAqLwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvbm9kZXMvY29w eWZ1bmNzLmMgYi9zcmMvYmFja2VuZC9ub2Rlcy9jb3B5ZnVuY3MuYwppbmRleCBiZDg3ZjIzNzg0 Li4xYjcxMDIwM2JhIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9ub2Rlcy9jb3B5ZnVuY3MuYwor KysgYi9zcmMvYmFja2VuZC9ub2Rlcy9jb3B5ZnVuY3MuYwpAQCAtMTEwNyw2ICsxMTA3LDggQEAg X2NvcHlXaW5kb3dBZ2coY29uc3QgV2luZG93QWdnICpmcm9tKQogCUNPUFlfU0NBTEFSX0ZJRUxE KGZyYW1lT3B0aW9ucyk7CiAJQ09QWV9OT0RFX0ZJRUxEKHN0YXJ0T2Zmc2V0KTsKIAlDT1BZX05P REVfRklFTEQoZW5kT2Zmc2V0KTsKKwlDT1BZX05PREVfRklFTEQocnVuY29uZGl0aW9uKTsKKwlD T1BZX05PREVfRklFTEQocnVuY29uZGl0aW9ub3JpZyk7CiAJQ09QWV9TQ0FMQVJfRklFTEQoc3Rh cnRJblJhbmdlRnVuYyk7CiAJQ09QWV9TQ0FMQVJfRklFTEQoZW5kSW5SYW5nZUZ1bmMpOwogCUNP UFlfU0NBTEFSX0ZJRUxEKGluUmFuZ2VDb2xsKTsKQEAgLTI1ODIsNiArMjU4NCw4IEBAIF9jb3B5 V2luZG93Q2xhdXNlKGNvbnN0IFdpbmRvd0NsYXVzZSAqZnJvbSkKIAlDT1BZX1NDQUxBUl9GSUVM RChmcmFtZU9wdGlvbnMpOwogCUNPUFlfTk9ERV9GSUVMRChzdGFydE9mZnNldCk7CiAJQ09QWV9O T0RFX0ZJRUxEKGVuZE9mZnNldCk7CisJQ09QWV9OT0RFX0ZJRUxEKHJ1bmNvbmRpdGlvbik7CisJ Q09QWV9OT0RFX0ZJRUxEKHJ1bmNvbmRpdGlvbm9yaWcpOwogCUNPUFlfU0NBTEFSX0ZJRUxEKHN0 YXJ0SW5SYW5nZUZ1bmMpOwogCUNPUFlfU0NBTEFSX0ZJRUxEKGVuZEluUmFuZ2VGdW5jKTsKIAlD T1BZX1NDQUxBUl9GSUVMRChpblJhbmdlQ29sbCk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9u b2Rlcy9lcXVhbGZ1bmNzLmMgYi9zcmMvYmFja2VuZC9ub2Rlcy9lcXVhbGZ1bmNzLmMKaW5kZXgg ZGJhM2U2YjMxZS4uZWEwMDQ0YjM1NyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvbm9kZXMvZXF1 YWxmdW5jcy5jCisrKyBiL3NyYy9iYWNrZW5kL25vZGVzL2VxdWFsZnVuY3MuYwpAQCAtMjgyOCw2 ICsyODI4LDggQEAgX2VxdWFsV2luZG93Q2xhdXNlKGNvbnN0IFdpbmRvd0NsYXVzZSAqYSwgY29u c3QgV2luZG93Q2xhdXNlICpiKQogCUNPTVBBUkVfU0NBTEFSX0ZJRUxEKGZyYW1lT3B0aW9ucyk7 CiAJQ09NUEFSRV9OT0RFX0ZJRUxEKHN0YXJ0T2Zmc2V0KTsKIAlDT01QQVJFX05PREVfRklFTEQo ZW5kT2Zmc2V0KTsKKwlDT01QQVJFX05PREVfRklFTEQocnVuY29uZGl0aW9uKTsKKwlDT01QQVJF X05PREVfRklFTEQocnVuY29uZGl0aW9ub3JpZyk7CiAJQ09NUEFSRV9TQ0FMQVJfRklFTEQoc3Rh cnRJblJhbmdlRnVuYyk7CiAJQ09NUEFSRV9TQ0FMQVJfRklFTEQoZW5kSW5SYW5nZUZ1bmMpOwog CUNPTVBBUkVfU0NBTEFSX0ZJRUxEKGluUmFuZ2VDb2xsKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL25vZGVzL291dGZ1bmNzLmMgYi9zcmMvYmFja2VuZC9ub2Rlcy9vdXRmdW5jcy5jCmluZGV4 IGUzMmI5MmUyOTkuLjg0MmE1MTk0ODUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL25vZGVzL291 dGZ1bmNzLmMKKysrIGIvc3JjL2JhY2tlbmQvbm9kZXMvb3V0ZnVuY3MuYwpAQCAtODE5LDYgKzgx OSw4IEBAIF9vdXRXaW5kb3dBZ2coU3RyaW5nSW5mbyBzdHIsIGNvbnN0IFdpbmRvd0FnZyAqbm9k ZSkKIAlXUklURV9JTlRfRklFTEQoZnJhbWVPcHRpb25zKTsKIAlXUklURV9OT0RFX0ZJRUxEKHN0 YXJ0T2Zmc2V0KTsKIAlXUklURV9OT0RFX0ZJRUxEKGVuZE9mZnNldCk7CisJV1JJVEVfTk9ERV9G SUVMRChydW5jb25kaXRpb24pOworCVdSSVRFX05PREVfRklFTEQocnVuY29uZGl0aW9ub3JpZyk7 CiAJV1JJVEVfT0lEX0ZJRUxEKHN0YXJ0SW5SYW5nZUZ1bmMpOwogCVdSSVRFX09JRF9GSUVMRChl bmRJblJhbmdlRnVuYyk7CiAJV1JJVEVfT0lEX0ZJRUxEKGluUmFuZ2VDb2xsKTsKQEAgLTMxNDAs NiArMzE0Miw4IEBAIF9vdXRXaW5kb3dDbGF1c2UoU3RyaW5nSW5mbyBzdHIsIGNvbnN0IFdpbmRv d0NsYXVzZSAqbm9kZSkKIAlXUklURV9JTlRfRklFTEQoZnJhbWVPcHRpb25zKTsKIAlXUklURV9O T0RFX0ZJRUxEKHN0YXJ0T2Zmc2V0KTsKIAlXUklURV9OT0RFX0ZJRUxEKGVuZE9mZnNldCk7CisJ V1JJVEVfTk9ERV9GSUVMRChydW5jb25kaXRpb24pOworCVdSSVRFX05PREVfRklFTEQocnVuY29u ZGl0aW9ub3JpZyk7CiAJV1JJVEVfT0lEX0ZJRUxEKHN0YXJ0SW5SYW5nZUZ1bmMpOwogCVdSSVRF X09JRF9GSUVMRChlbmRJblJhbmdlRnVuYyk7CiAJV1JJVEVfT0lEX0ZJRUxEKGluUmFuZ2VDb2xs KTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL25vZGVzL3JlYWRmdW5jcy5jIGIvc3JjL2JhY2tl bmQvbm9kZXMvcmVhZGZ1bmNzLmMKaW5kZXggZjBiMzRlY2ZhYy4uNWNlZGM1MDEwMCAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvbm9kZXMvcmVhZGZ1bmNzLmMKKysrIGIvc3JjL2JhY2tlbmQvbm9k ZXMvcmVhZGZ1bmNzLmMKQEAgLTM4NCw2ICszODQsOCBAQCBfcmVhZFdpbmRvd0NsYXVzZSh2b2lk KQogCVJFQURfSU5UX0ZJRUxEKGZyYW1lT3B0aW9ucyk7CiAJUkVBRF9OT0RFX0ZJRUxEKHN0YXJ0 T2Zmc2V0KTsKIAlSRUFEX05PREVfRklFTEQoZW5kT2Zmc2V0KTsKKwlSRUFEX05PREVfRklFTEQo cnVuY29uZGl0aW9uKTsKKwlSRUFEX05PREVfRklFTEQocnVuY29uZGl0aW9ub3JpZyk7CiAJUkVB RF9PSURfRklFTEQoc3RhcnRJblJhbmdlRnVuYyk7CiAJUkVBRF9PSURfRklFTEQoZW5kSW5SYW5n ZUZ1bmMpOwogCVJFQURfT0lEX0ZJRUxEKGluUmFuZ2VDb2xsKTsKQEAgLTIzNDUsNiArMjM0Nyw4 IEBAIF9yZWFkV2luZG93QWdnKHZvaWQpCiAJUkVBRF9JTlRfRklFTEQoZnJhbWVPcHRpb25zKTsK IAlSRUFEX05PREVfRklFTEQoc3RhcnRPZmZzZXQpOwogCVJFQURfTk9ERV9GSUVMRChlbmRPZmZz ZXQpOworCVJFQURfTk9ERV9GSUVMRChydW5jb25kaXRpb24pOworCVJFQURfTk9ERV9GSUVMRChy dW5jb25kaXRpb25vcmlnKTsKIAlSRUFEX09JRF9GSUVMRChzdGFydEluUmFuZ2VGdW5jKTsKIAlS RUFEX09JRF9GSUVMRChlbmRJblJhbmdlRnVuYyk7CiAJUkVBRF9PSURfRklFTEQoaW5SYW5nZUNv bGwpOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvYWxscGF0aHMuYyBi L3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2FsbHBhdGhzLmMKaW5kZXggMzUzNDU0YjE4My4u ODlhNjEwMmYxYiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvYWxscGF0 aHMuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9hbGxwYXRocy5jCkBAIC0yNyw2 ICsyNyw3IEBACiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCiAjaW5jbHVkZSAibm9kZXMvbWFrZWZ1 bmNzLmgiCiAjaW5jbHVkZSAibm9kZXMvbm9kZUZ1bmNzLmgiCisjaW5jbHVkZSAibm9kZXMvc3Vw cG9ydG5vZGVzLmgiCiAjaWZkZWYgT1BUSU1JWkVSX0RFQlVHCiAjaW5jbHVkZSAibm9kZXMvcHJp bnQuaCIKICNlbmRpZgpAQCAtMjA5MCw2ICsyMDkxLDE2OSBAQCBoYXNfbXVsdGlwbGVfYmFzZXJl bHMoUGxhbm5lckluZm8gKnJvb3QpCiAJcmV0dXJuIGZhbHNlOwogfQogCisvKgorICogZmluZF93 aW5kb3dfcnVuX2NvbmRpdGlvbnMKKyAqCQlDYWxsIHdmdW5jJ3MgcHJvc3VwcG9ydCBmdW5jdGlv biB0byBhc2sgaWYgJ29wZXhwcicgbWlnaHQgaGVscCB0bworICoJCWFsbG93IHRoZSBleGVjdXRv ciB0byBzdG9wIHByb2Nlc3NpbmcgV2luZG93QWdnIG5vZGVzIGVhcmx5LgorICoKKyAqIEZvciBl eGFtcGxlIHJvd19udW1iZXIoKSBvdmVyIChvcmRlciBieSAuLi4pIGFsd2F5cyBwcm9kdWNlcyBh IHZhbHVlIG9uZQorICogaGlnaGVyIHRoYW4gdGhlIHByZXZpb3VzLiAgSWYgc29tZW9uZSBoYXMg YSB3aW5kb3cgZnVuY3Rpb24gc3VjaCBhcyB0aGF0CisgKiBpbiBhIHN1YnF1ZXJ5IGFuZCBqdXN0 IHdhbnRzLCBzYXkgYWxsIHJvd3Mgd2l0aCBhIHJvdyBudW1iZXIgbGVzcyB0aGFuIG9yCisgKiBl cXVhbCB0byAxMCwgdGhlbiB3ZSBtYXkgYXMgd2VsbCBzdG9wIHByb2Nlc3NpbmcgdGhlIHdpbmRv d2FnZyB0aGUgcm93CisgKiBudW1iZXIgcmVhY2hlcyAxMS4gIEhlcmUgd2UgbG9vayBmb3Igb3Bl eHBycyB0aGF0IG1pZ2h0IGhlbHAgdXMgdG8gYWJvcnQKKyAqIGRvaW5nIG5lZWRsZXNzIGV4dHJh IHByb2Nlc3NpbmcgaW4gV2luZG93QWdnIG5vZGVzLgorICoKKyAqIFRvIGRvIHRoaXMgd2UgbWFr ZSB1c2Ugb2YgdGhlIHdpbmRvdyBmdW5jdGlvbidzIHByb3N1cHBvcnQgZnVuY3Rpb24uIFdlCisg KiBwYXNzIGFsb25nIHRoZSAnb3BleHByJyB0byBhc2sgaWYgdGhlcmUgaXMgYSBzdWl0YWJsZSBP cEV4cHIgdGhhdCB3ZSBjYW4KKyAqIHVzZSB0byBoZWxwIHN0b3AgV2luZG93QWdncyBwcm9jZXNz aW5nIGVhcmx5LgorICoKKyAqICcqa2VlcF9vcmlnaW5hbCcgaXMgc2V0IHRvIHRydWUgaWYgdGhl IGNhbGxlciBzaG91bGQgYWxzbyB1c2UgJ29wZXhwcicgZm9yCisgKiBpdHMgb3JpZ2luYWwgcHVy cG9zZS4gIFRoaXMgaXMgc2V0IHRvIGZhbHNlIGlmIHRoZSBjYWxsZXIgY2FuIGFzc3VtZSB0aGF0 CisgKiB0aGUgcnVuY29uZGl0aW9uIHdpbGwgaGFuZGxlIGFsbCBvZiB0aGUgcmVxdWlyZWQgZmls dGVyaW5nLgorICoKKyAqIFJldHVybnMgdHJ1ZSBpZiBhIHJ1bmNvbmRpdGlvbiBxdWFsIHdhcyBm b3VuZCBhbmQgYWRkZWQgdG8gdGhlCisgKiB3Y2xhdXNlLT5ydW5jb25kaXRpb24gbGlzdC4gIFJl dHVybnMgZmFsc2UgaWYgbm8gY2xhdXNlIHdhcyBmb3VuZC4KKyAqLworc3RhdGljIGJvb2wKK2Zp bmRfd2luZG93X3J1bl9jb25kaXRpb25zKFF1ZXJ5ICpzdWJxdWVyeSwgUmFuZ2VUYmxFbnRyeSAq cnRlLCBJbmRleCBydGksCisJCQkJCQkgICBBdHRyTnVtYmVyIGF0dG5vLCBXaW5kb3dDbGF1c2Ug KndjbGF1c2UsCisJCQkJCQkgICBXaW5kb3dGdW5jICp3ZnVuYywgT3BFeHByICpvcGV4cHIsIGJv b2wgd2Z1bmNfbGVmdCwKKwkJCQkJCSAgIGJvb2wgKmtlZXBfb3JpZ2luYWwpCit7CisJT2lkCQkJ cHJvc3VwcG9ydDsKKwlXaW5kb3dGdW5jdGlvblJ1bkNvbmRpdGlvbiByZXE7CisJV2luZG93RnVu Y3Rpb25SdW5Db25kaXRpb24gKnJlczsKKworCSprZWVwX29yaWdpbmFsID0gdHJ1ZTsKKworCXBy b3N1cHBvcnQgPSBnZXRfZnVuY19zdXBwb3J0KHdmdW5jLT53aW5mbm9pZCk7CisKKwkvKiBDaGVj ayBpZiB0aGVyZSdzIGEgc3VwcG9ydCBmdW5jdGlvbiB0aGF0IGNhbiB2YWxpZGF0ZSAnb3BleHBy JyAqLworCWlmICghT2lkSXNWYWxpZChwcm9zdXBwb3J0KSkKKwl7CisJCSprZWVwX29yaWdpbmFs ID0gdHJ1ZTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCXJlcS50eXBlID0gVF9XaW5kb3dGdW5j dGlvblJ1bkNvbmRpdGlvbjsKKwlyZXEub3BleHByID0gb3BleHByOworCXJlcS53aW5kb3dfZnVu YyA9IHdmdW5jOworCXJlcS53aW5kb3dfY2xhdXNlID0gd2NsYXVzZTsKKwlyZXEud2Z1bmNfbGVm dCA9IHdmdW5jX2xlZnQ7CisJcmVxLnJ1bm9wZXhwciA9IE5VTEw7CQkJLyogZGVmYXVsdCAqLwor CXJlcS5rZWVwX29yaWdpbmFsID0gdHJ1ZTsJCS8qIGRlZmF1bHQgKi8KKworCXJlcyA9IChXaW5k b3dGdW5jdGlvblJ1bkNvbmRpdGlvbiAqKQorCQlEYXR1bUdldFBvaW50ZXIoT2lkRnVuY3Rpb25D YWxsMShwcm9zdXBwb3J0LAorCQkJUG9pbnRlckdldERhdHVtKCZyZXEpKSk7CisKKwkvKiByZXR1 cm4gdGhlIHRoZSBydW4gY29uZGl0aW9uLCBpZiB0aGVyZSBpcyBvbmUgKi8KKwlpZiAocmVzICYm IHJlcy0+cnVub3BleHByICE9IE5VTEwpCisJeworCQlFeHByICpvcmlnZXhwcjsKKwkJT3BFeHBy ICpyZXhwciA9IHJlcy0+cnVub3BleHByOworCisJCXdjbGF1c2UtPnJ1bmNvbmRpdGlvbiA9IGxh cHBlbmQod2NsYXVzZS0+cnVuY29uZGl0aW9uLCByZXhwcik7CisJCSprZWVwX29yaWdpbmFsID0g cmVzLT5rZWVwX29yaWdpbmFsOworCisJCS8qCisJCSAqIFdlIG11c3QgYWxzbyBjcmVhdGUgYSB2 ZXJzaW9uIG9mIHRoZSBxdWFsIHRoYXQgd2UgY2FuIGRpc3BsYXkgaW4KKwkJICogRVhQTEFJTi4K KwkJICovCisJCWlmICh3ZnVuY19sZWZ0KQorCQkJb3JpZ2V4cHIgPSBtYWtlX29wY2xhdXNlKHJl eHByLT5vcG5vLCByZXhwci0+b3ByZXN1bHR0eXBlLAorCQkJCQkJCQkJIHJleHByLT5vcHJldHNl dCwgKEV4cHIgKikgd2Z1bmMsCisJCQkJCQkJCQkgKEV4cHIgKikgbHNlY29uZChyZXhwci0+YXJn cyksCisJCQkJCQkJCQkgcmV4cHItPm9wY29sbGlkLCByZXhwci0+aW5wdXRjb2xsaWQpOworCQll bHNlCisJCQlvcmlnZXhwciA9IG1ha2Vfb3BjbGF1c2UocmV4cHItPm9wbm8sIHJleHByLT5vcHJl c3VsdHR5cGUsCisJCQkJCQkJCQkgcmV4cHItPm9wcmV0c2V0LAorCQkJCQkJCQkJIChFeHByICop IGxzZWNvbmQocmV4cHItPmFyZ3MpLAorCQkJCQkJCQkJIChFeHByICopIHdmdW5jLCByZXhwci0+ b3Bjb2xsaWQsCisJCQkJCQkJCQkgcmV4cHItPmlucHV0Y29sbGlkKTsKKworCQl3Y2xhdXNlLT5y dW5jb25kaXRpb25vcmlnID0gbGFwcGVuZCh3Y2xhdXNlLT5ydW5jb25kaXRpb25vcmlnLCBvcmln ZXhwcik7CisJCXJldHVybiB0cnVlOworCX0KKworCS8qIHByb3N1cHBvcnQgZnVuY3Rpb24gZGlk bid0IHN1cHBvcnQgb3VyIHJlcXVlc3QgKi8KKwlyZXR1cm4gZmFsc2U7Cit9CisKKy8qCisgKiBj aGVja19hbmRfcHVzaF93aW5kb3dfcXVhbHMKKyAqCQlDaGVjayBpZiAncmluZm8nIGlzIGEgcXVh bCB0aGF0IGNhbiBiZSBwdXNoZWQgaW50byBhIFdpbmRvd0Z1bmMgYXMgYQorICoJCSdydW5jb25k aXRpb24nIHF1YWwuICBUaGVzZSwgd2hlbiBwcmVzZW50IGNhdXNlIHRoZSB3aW5kb3cgZnVuY3Rp b24KKyAqCQlldmFsdWF0aW9uIHRvIHN0b3Agd2hlbiB0aGUgY29uZGl0aW9uIGJlY29tZXMgZmFs c2UuCisgKgorICogUmV0dXJucyB0cnVlIGlmIHRoZSBjYWxsZXIgc3RpbGwgbXVzdCBrZWVwIHRo ZSBvcmlnaW5hbCBxdWFsIG9yIGZhbHNlIGlmCisgKiB0aGUgY2FsbGVyIGNhbiBzYWZlbHkgaWdu b3JlIHRoZSBvcmlnaW5hbCBxdWFsIGJlY2F1c2UgdGhlIHdpbmRvdyBmdW5jdGlvbgorICogd2ls bCB1c2UgdGhlIHJ1bmNvbmRpdGlvbiB0byBzdG9wIGF0IHRoZSByaWdodCB0aW1lLgorICovCitz dGF0aWMgYm9vbAorY2hlY2tfYW5kX3B1c2hfd2luZG93X3F1YWxzKFF1ZXJ5ICpzdWJxdWVyeSwg UmFuZ2VUYmxFbnRyeSAqcnRlLCBJbmRleCBydGksCisJCQkJCQkJTm9kZSAqY2xhdXNlKQorewor CU9wRXhwcgkgICAqb3BleHByID0gKE9wRXhwciAqKSBjbGF1c2U7CisJYm9vbAkJa2VlcF9vcmln aW5hbCA9IHRydWU7CisJVmFyCQkgICAqdmFyMTsKKwlWYXIJCSAgICp2YXIyOworCisJaWYgKCFJ c0Eob3BleHByLCBPcEV4cHIpKQorCQlyZXR1cm4gdHJ1ZTsKKworCWlmIChsaXN0X2xlbmd0aChv cGV4cHItPmFyZ3MpICE9IDIpCisJCXJldHVybiB0cnVlOworCisJLyoKKwkgKiBDaGVjayBmb3Ig cGxhaW4gVmFycyB3aGljaCByZWZlcmVuY2Ugd2luZG93IGZ1bmN0aW9ucyBpbiB0aGUgc3VicXVl cnkuCisJICogSWYgd2UgZmluZCBhbnksIHdlJ2xsIGFzayBmaW5kX3dpbmRvd19ydW5fY29uZGl0 aW9ucygpIGlmIHRoZXJlIGFyZQorCSAqIGFueSB1c2VmdWwgY29uZGl0aW9ucyB0aGF0IG1pZ2h0 IGFsbG93IHVzIHRvIHN0b3Agd2luZG93YWdnIGV4ZWN1dGlvbgorCSAqIGVhcmx5LgorCSAqLwor CisJLyogQ2hlY2sgdGhlIGxlZnQgc2lkZSBvZiB0aGUgT3BFeHByICovCisJdmFyMSA9IGxpbml0 aWFsKG9wZXhwci0+YXJncyk7CisJaWYgKElzQSh2YXIxLCBWYXIpICYmIHZhcjEtPnZhcmF0dG5v ID4gMCkKKwl7CisJCVRhcmdldEVudHJ5ICp0bGUgPSBsaXN0X250aChzdWJxdWVyeS0+dGFyZ2V0 TGlzdCwgdmFyMS0+dmFyYXR0bm8gLSAxKTsKKwkJV2luZG93RnVuYyAqd2Z1bmMgPSAoV2luZG93 RnVuYyAqKSB0bGUtPmV4cHI7CisJCWlmIChJc0Eod2Z1bmMsIFdpbmRvd0Z1bmMpKQorCQl7CisJ CQlXaW5kb3dDbGF1c2UgKndjbGF1c2UgPSAoV2luZG93Q2xhdXNlICopCisJCQkJCQkJCQkJCQls aXN0X250aChzdWJxdWVyeS0+d2luZG93Q2xhdXNlLAorCQkJCQkJCQkJCQkJCQkgd2Z1bmMtPndp bnJlZiAtIDEpOworCisJCQlpZiAoZmluZF93aW5kb3dfcnVuX2NvbmRpdGlvbnMoc3VicXVlcnks IHJ0ZSwgcnRpLCB0bGUtPnJlc25vLAorCQkJCQkJCQkJCSAgIHdjbGF1c2UsIHdmdW5jLCBvcGV4 cHIsIHRydWUsCisJCQkJCQkJCQkJICAgJmtlZXBfb3JpZ2luYWwpKQorCQkJCXJldHVybiBrZWVw X29yaWdpbmFsOworCQl9CisJfQorCisJLyogYW5kIGNoZWNrIHRoZSByaWdodCBzaWRlICovCisJ dmFyMiA9IGxzZWNvbmQob3BleHByLT5hcmdzKTsKKwlpZiAoSXNBKHZhcjIsIFZhcikgJiYgdmFy Mi0+dmFyYXR0bm8gPiAwKQorCXsKKwkJVGFyZ2V0RW50cnkgKnRsZSA9IGxpc3RfbnRoKHN1YnF1 ZXJ5LT50YXJnZXRMaXN0LCB2YXIyLT52YXJhdHRubyAtIDEpOworCQlXaW5kb3dGdW5jICp3ZnVu YyA9IChXaW5kb3dGdW5jICopIHRsZS0+ZXhwcjsKKworCQlpZiAoSXNBKHdmdW5jLCBXaW5kb3dG dW5jKSkKKwkJeworCQkJV2luZG93Q2xhdXNlICp3Y2xhdXNlID0gKFdpbmRvd0NsYXVzZSAqKQor CQkJCQkJCQkJCQkJbGlzdF9udGgoc3VicXVlcnktPndpbmRvd0NsYXVzZSwKKwkJCQkJCQkJCQkJ CQkJIHdmdW5jLT53aW5yZWYgLSAxKTsKKworCQkJaWYgKGZpbmRfd2luZG93X3J1bl9jb25kaXRp b25zKHN1YnF1ZXJ5LCBydGUsIHJ0aSwgdGxlLT5yZXNubywKKwkJCQkJCQkJCQkgICB3Y2xhdXNl LCB3ZnVuYywgb3BleHByLCBmYWxzZSwKKwkJCQkJCQkJCQkgICAma2VlcF9vcmlnaW5hbCkpCisJ CQkJcmV0dXJuIGtlZXBfb3JpZ2luYWw7CisJCX0KKwl9CisKKwlyZXR1cm4gdHJ1ZTsKK30KKwog LyoKICAqIHNldF9zdWJxdWVyeV9wYXRobGlzdAogICoJCUdlbmVyYXRlIFN1YnF1ZXJ5U2NhbiBh Y2Nlc3MgcGF0aHMgZm9yIGEgc3VicXVlcnkgUlRFCkBAIC0yMTc4LDE5ICsyMzQyLDMwIEBAIHNl dF9zdWJxdWVyeV9wYXRobGlzdChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAog CQlmb3JlYWNoKGwsIHJlbC0+YmFzZXJlc3RyaWN0aW5mbykKIAkJewogCQkJUmVzdHJpY3RJbmZv ICpyaW5mbyA9IChSZXN0cmljdEluZm8gKikgbGZpcnN0KGwpOworCQkJTm9kZQkgICAqY2xhdXNl ID0gKE5vZGUgKilyaW5mby0+Y2xhdXNlOwogCiAJCQlpZiAoIXJpbmZvLT5wc2V1ZG9jb25zdGFu dCAmJgogCQkJCXF1YWxfaXNfcHVzaGRvd25fc2FmZShzdWJxdWVyeSwgcnRpLCByaW5mbywgJnNh ZmV0eUluZm8pKQogCQkJewotCQkJCU5vZGUJICAgKmNsYXVzZSA9IChOb2RlICopIHJpbmZvLT5j bGF1c2U7Ci0KIAkJCQkvKiBQdXNoIGl0IGRvd24gKi8KIAkJCQlzdWJxdWVyeV9wdXNoX3F1YWwo c3VicXVlcnksIHJ0ZSwgcnRpLCBjbGF1c2UpOwogCQkJfQogCQkJZWxzZQogCQkJewotCQkJCS8q IEtlZXAgaXQgaW4gdGhlIHVwcGVyIHF1ZXJ5ICovCi0JCQkJdXBwZXJyZXN0cmljdGxpc3QgPSBs YXBwZW5kKHVwcGVycmVzdHJpY3RsaXN0LCByaW5mbyk7CisJCQkJLyoKKwkJCQkgKiBTaW5jZSB3 ZSBjYW4ndCBwdXNoIHRoZSBxdWFsIGRvd24gaW50byB0aGUgc3VicXVlcnksIGNoZWNrCisJCQkJ ICogaWYgaXQgaGFwcGVucyB0byByZWZlcmVuY2UgYSB3aW5kb3dpbmcgZnVuY3Rpb24uICBJZiBz bworCQkJCSAqIHRoZW4gaXQgbWlnaHQgYmUgdXNlZnVsIHRvIGFsbG93IHRoZSB3aW5kb3cgZXZh bHVhdGlvbiB0bworCQkJCSAqIHN0b3AgZWFybHkuCisJCQkJICovCisJCQkJaWYgKGNoZWNrX2Fu ZF9wdXNoX3dpbmRvd19xdWFscyhzdWJxdWVyeSwgcnRlLCBydGksIGNsYXVzZSkpCisJCQkJewor CQkJCQkvKgorCQkJCQkgKiBJdCdzIG5vdCBhIHN1aXRhYmxlIHdpbmRvdyBydW4gY29uZGl0aW9u IHF1YWwgb3IgaXQgaXMsCisJCQkJCSAqIGJ1dCB0aGUgb3JpZ2luYWwgbXVzdCBhbHNvIGJlIGtl cHQgaW4gdGhlIHVwcGVyIHF1ZXJ5LgorCQkJCQkgKi8KKwkJCQkJdXBwZXJyZXN0cmljdGxpc3Qg PSBsYXBwZW5kKHVwcGVycmVzdHJpY3RsaXN0LCByaW5mbyk7CisJCQkJfQogCQkJfQogCQl9CiAJ CXJlbC0+YmFzZXJlc3RyaWN0aW5mbyA9IHVwcGVycmVzdHJpY3RsaXN0OwpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vY3JlYXRlcGxhbi5jIGIvc3JjL2JhY2tlbmQvb3B0 aW1pemVyL3BsYW4vY3JlYXRlcGxhbi5jCmluZGV4IDQzOWU2YjY0MjYuLmU2OGIwZDk5YzcgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL2NyZWF0ZXBsYW4uYworKysgYi9z cmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9jcmVhdGVwbGFuLmMKQEAgLTI4OSw2ICsyODksNyBA QCBzdGF0aWMgV2luZG93QWdnICptYWtlX3dpbmRvd2FnZyhMaXN0ICp0bGlzdCwgSW5kZXggd2lu cmVmLAogCQkJCQkJCQkgaW50IGZyYW1lT3B0aW9ucywgTm9kZSAqc3RhcnRPZmZzZXQsIE5vZGUg KmVuZE9mZnNldCwKIAkJCQkJCQkJIE9pZCBzdGFydEluUmFuZ2VGdW5jLCBPaWQgZW5kSW5SYW5n ZUZ1bmMsCiAJCQkJCQkJCSBPaWQgaW5SYW5nZUNvbGwsIGJvb2wgaW5SYW5nZUFzYywgYm9vbCBp blJhbmdlTnVsbHNGaXJzdCwKKwkJCQkJCQkJIExpc3QgKnJ1bmNvbmRpdGlvbiwgTGlzdCAqcnVu Y29uZGl0aW9ub3JpZywKIAkJCQkJCQkJIFBsYW4gKmxlZnR0cmVlKTsKIHN0YXRpYyBHcm91cCAq bWFrZV9ncm91cChMaXN0ICp0bGlzdCwgTGlzdCAqcXVhbCwgaW50IG51bUdyb3VwQ29scywKIAkJ CQkJCSBBdHRyTnVtYmVyICpncnBDb2xJZHgsIE9pZCAqZ3JwT3BlcmF0b3JzLCBPaWQgKmdycENv bGxhdGlvbnMsCkBAIC0yNjIyLDYgKzI2MjMsOCBAQCBjcmVhdGVfd2luZG93YWdnX3BsYW4oUGxh bm5lckluZm8gKnJvb3QsIFdpbmRvd0FnZ1BhdGggKmJlc3RfcGF0aCkKIAkJCQkJCSAgd2MtPmlu UmFuZ2VDb2xsLAogCQkJCQkJICB3Yy0+aW5SYW5nZUFzYywKIAkJCQkJCSAgd2MtPmluUmFuZ2VO dWxsc0ZpcnN0LAorCQkJCQkJICB3Yy0+cnVuY29uZGl0aW9uLAorCQkJCQkJICB3Yy0+cnVuY29u ZGl0aW9ub3JpZywKIAkJCQkJCSAgc3VicGxhbik7CiAKIAljb3B5X2dlbmVyaWNfcGF0aF9pbmZv KCZwbGFuLT5wbGFuLCAoUGF0aCAqKSBiZXN0X3BhdGgpOwpAQCAtNjQ4MCw3ICs2NDgzLDcgQEAg bWFrZV93aW5kb3dhZ2coTGlzdCAqdGxpc3QsIEluZGV4IHdpbnJlZiwKIAkJCSAgIGludCBmcmFt ZU9wdGlvbnMsIE5vZGUgKnN0YXJ0T2Zmc2V0LCBOb2RlICplbmRPZmZzZXQsCiAJCQkgICBPaWQg c3RhcnRJblJhbmdlRnVuYywgT2lkIGVuZEluUmFuZ2VGdW5jLAogCQkJICAgT2lkIGluUmFuZ2VD b2xsLCBib29sIGluUmFuZ2VBc2MsIGJvb2wgaW5SYW5nZU51bGxzRmlyc3QsCi0JCQkgICBQbGFu ICpsZWZ0dHJlZSkKKwkJCSAgIExpc3QgKnJ1bmNvbmRpdGlvbiwgTGlzdCAqcnVuY29uZGl0aW9u b3JpZywgUGxhbiAqbGVmdHRyZWUpCiB7CiAJV2luZG93QWdnICAqbm9kZSA9IG1ha2VOb2RlKFdp bmRvd0FnZyk7CiAJUGxhbgkgICAqcGxhbiA9ICZub2RlLT5wbGFuOwpAQCAtNjQ5Nyw2ICs2NTAw LDggQEAgbWFrZV93aW5kb3dhZ2coTGlzdCAqdGxpc3QsIEluZGV4IHdpbnJlZiwKIAlub2RlLT5m cmFtZU9wdGlvbnMgPSBmcmFtZU9wdGlvbnM7CiAJbm9kZS0+c3RhcnRPZmZzZXQgPSBzdGFydE9m ZnNldDsKIAlub2RlLT5lbmRPZmZzZXQgPSBlbmRPZmZzZXQ7CisJbm9kZS0+cnVuY29uZGl0aW9u ID0gcnVuY29uZGl0aW9uOworCW5vZGUtPnJ1bmNvbmRpdGlvbm9yaWcgPSBydW5jb25kaXRpb25v cmlnOwogCW5vZGUtPnN0YXJ0SW5SYW5nZUZ1bmMgPSBzdGFydEluUmFuZ2VGdW5jOwogCW5vZGUt PmVuZEluUmFuZ2VGdW5jID0gZW5kSW5SYW5nZUZ1bmM7CiAJbm9kZS0+aW5SYW5nZUNvbGwgPSBp blJhbmdlQ29sbDsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3NldHJl ZnMuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3NldHJlZnMuYwppbmRleCA2MWNjZmQz MDBiLi44YjZlZTVhMDFiIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9z ZXRyZWZzLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vc2V0cmVmcy5jCkBAIC04 NzAsNiArODcwLDE0IEBAIHNldF9wbGFuX3JlZnMoUGxhbm5lckluZm8gKnJvb3QsIFBsYW4gKnBs YW4sIGludCBydG9mZnNldCkKIAkJCQkJZml4X3NjYW5fZXhwcihyb290LCB3cGxhbi0+c3RhcnRP ZmZzZXQsIHJ0b2Zmc2V0LCAxKTsKIAkJCQl3cGxhbi0+ZW5kT2Zmc2V0ID0KIAkJCQkJZml4X3Nj YW5fZXhwcihyb290LCB3cGxhbi0+ZW5kT2Zmc2V0LCBydG9mZnNldCwgMSk7CisJCQkJd3BsYW4t PnJ1bmNvbmRpdGlvbiA9IGZpeF9zY2FuX2xpc3Qocm9vdCwKKwkJCQkJCQkJCQkJCQl3cGxhbi0+ cnVuY29uZGl0aW9uLAorCQkJCQkJCQkJCQkJCXJ0b2Zmc2V0LAorCQkJCQkJCQkJCQkJCU5VTV9F WEVDX1RMSVNUKHBsYW4pKTsKKwkJCQl3cGxhbi0+cnVuY29uZGl0aW9ub3JpZyA9IGZpeF9zY2Fu X2xpc3Qocm9vdCwKKwkJCQkJCQkJCQkJCQkJd3BsYW4tPnJ1bmNvbmRpdGlvbm9yaWcsCisJCQkJ CQkJCQkJCQkJCXJ0b2Zmc2V0LAorCQkJCQkJCQkJCQkJCQlOVU1fRVhFQ19UTElTVChwbGFuKSk7 CiAJCQl9CiAJCQlicmVhazsKIAkJY2FzZSBUX1Jlc3VsdDoKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL3BhcnNlci9wYXJzZV9jb2xsYXRlLmMgYi9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfY29s bGF0ZS5jCmluZGV4IDQxMzM1MjZmMDQuLjlhZTMzMjYzZDMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL3BhcnNlci9wYXJzZV9jb2xsYXRlLmMKKysrIGIvc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNl X2NvbGxhdGUuYwpAQCAtNjIzLDcgKzYyMyw4IEBAIGFzc2lnbl9jb2xsYXRpb25zX3dhbGtlcihO b2RlICpub2RlLCBhc3NpZ25fY29sbGF0aW9uc19jb250ZXh0ICpjb250ZXh0KQogCQkJCQkJewog CQkJCQkJCS8qCiAJCQkJCQkJICogV2luZG93RnVuYyByZXF1aXJlcyBzcGVjaWFsIHByb2Nlc3Np bmcgb25seSBmb3IKLQkJCQkJCQkgKiBpdHMgYWdnZmlsdGVyIGNsYXVzZSwgYXMgZm9yIGFnZ3Jl Z2F0ZXMuCisJCQkJCQkJICogaXRzIGFnZ2ZpbHRlciwgYXMgZm9yIGFnZ3JlZ2F0ZXMgYW5kIGl0 cworCQkJCQkJCSAqIHJ1bmNvbmRpdGlvbiBjbGF1c2UuCiAJCQkJCQkJICovCiAJCQkJCQkJV2lu ZG93RnVuYyAqd2Z1bmMgPSAoV2luZG93RnVuYyAqKSBub2RlOwogCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC91dGlscy9hZHQvaW50OC5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2ludDguYwpp bmRleCAyMTY4MDgwZGNjLi5lZjc0YzNiNWNkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGls cy9hZHQvaW50OC5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9pbnQ4LmMKQEAgLTI1LDYg KzI1LDcgQEAKICNpbmNsdWRlICJvcHRpbWl6ZXIvb3B0aW1pemVyLmgiCiAjaW5jbHVkZSAidXRp bHMvYnVpbHRpbnMuaCIKICNpbmNsdWRlICJ1dGlscy9pbnQ4LmgiCisjaW5jbHVkZSAidXRpbHMv bHN5c2NhY2hlLmgiCiAKIAogdHlwZWRlZiBzdHJ1Y3QKQEAgLTg3Nyw2ICs4NzgsNyBAQCBpbnQ4 ZGVjKFBHX0ZVTkNUSU9OX0FSR1MpCiB9CiAKIAorCiAvKgogICogVGhlc2UgZnVuY3Rpb25zIGFy ZSBleGFjdGx5IGxpa2UgaW50OGluYy9pbnQ4ZGVjIGJ1dCBhcmUgdXNlZCBmb3IKICAqIGFnZ3Jl Z2F0ZXMgdGhhdCBjb3VudCBvbmx5IG5vbi1udWxsIHZhbHVlcy4gIFNpbmNlIHRoZSBmdW5jdGlv bnMgYXJlCkBAIC05MDQsNiArOTA2LDEyNSBAQCBpbnQ4ZGVjX2FueShQR19GVU5DVElPTl9BUkdT KQogCXJldHVybiBpbnQ4ZGVjKGZjaW5mbyk7CiB9CiAKKy8qCisgKiBpbnQ4aW5jX3N1cHBvcnQK KyAqCQlwcm9zdXBwb3J0IGZ1bmN0aW9uIGZvciBpbnQ4aW5jKCkgYW5kIGludDhpbmNfYW55KCkK KyAqLworRGF0dW0KK2ludDhpbmNfc3VwcG9ydChQR19GVU5DVElPTl9BUkdTKQoreworCU5vZGUJ ICAgKnJhd3JlcSA9IChOb2RlICopIFBHX0dFVEFSR19QT0lOVEVSKDApOworCisJaWYgKElzQShy YXdyZXEsIFdpbmRvd0Z1bmN0aW9uUnVuQ29uZGl0aW9uKSkKKwl7CisJCVdpbmRvd0Z1bmN0aW9u UnVuQ29uZGl0aW9uICpyZXEgPSAoV2luZG93RnVuY3Rpb25SdW5Db25kaXRpb24gKilyYXdyZXE7 CisKKwkJT3BFeHByCSAgICpvcGV4cHIgPSByZXEtPm9wZXhwcjsKKwkJT2lkCQkJb3BubyA9IG9w ZXhwci0+b3BubzsKKwkJTGlzdAkgICAqb3BmYW1pbGllczsKKwkJTGlzdENlbGwgICAqbGM7CisJ CWludAkJCWZyYW1lT3B0aW9uczsKKworCQkvKiBFYXJseSBhYm9ydCBvZiBleGVjdXRpb24gaXMg bm90IHBvc3NpYmxlIGlmIHRoZXJlJ3MgYSBQQVJUSVRJT04gQlkgKi8KKwkJaWYgKHJlcS0+d2lu ZG93X2NsYXVzZS0+cGFydGl0aW9uQ2xhdXNlICE9IE5VTEwpCisJCQlQR19SRVRVUk5fUE9JTlRF UihOVUxMKTsKKworCQlmcmFtZU9wdGlvbnMgPSByZXEtPndpbmRvd19jbGF1c2UtPmZyYW1lT3B0 aW9uczsKKworCQkvKgorCQkgKiBXaXRoIEZSQU1FT1BUSU9OX1NUQVJUX1VOQk9VTkRFRF9QUkVD RURJTkcgd2Uga25vdyB0aGUgY291bnQgY2FuCisJCSAqIG9ubHkgZ28gdXAsIHNvIHdlIGNhbiBz dXBwb3J0IHJ1biBjb25kaXRpb25zIHRoYXQgb25seSB3YW50IHZhbHVlcworCQkgKiA8IG9yIDw9 IHRvIGEgZ2l2ZW4gY29uc3RhbnQuICBXaXRoCisJCSAqIEZSQU1FT1BUSU9OX0VORF9VTkJPVU5E RURfRk9MTE9XSU5HLCB0aGUgcm93IGNvdW50IGNvdWxkIG9ubHkKKwkJICogcG9zc2libHkgZGVj cmVhc2UsIHNvIHdlIGNhbiBzdXBwb3J0IGEgcnVuIGNvbmRpdGlvbiB0aGF0IHVzZXMgPiBvcgor CQkgKiA+PS4gIElmIHdlIGhhdmUgbmVpdGhlciBvZiB0aGVzZSB0d28sIHRoZW4gYmFpbC4KKwkJ ICovCisJCWlmICgoZnJhbWVPcHRpb25zICYJKEZSQU1FT1BUSU9OX1NUQVJUX1VOQk9VTkRFRF9Q UkVDRURJTkcgfAorCQkJCQkJCSBGUkFNRU9QVElPTl9FTkRfVU5CT1VOREVEX0ZPTExPV0lORykp ID09IDApCisJCQlQR19SRVRVUk5fUE9JTlRFUihOVUxMKTsKKworCQlvcGZhbWlsaWVzID0gZ2V0 X29wX2J0cmVlX2ludGVycHJldGF0aW9uKG9wbm8pOworCisJCWZvcmVhY2gobGMsIG9wZmFtaWxp ZXMpCisJCXsKKwkJCU9wQnRyZWVJbnRlcnByZXRhdGlvbiAqb2kgPSAoT3BCdHJlZUludGVycHJl dGF0aW9uICopbGZpcnN0KGxjKTsKKworCQkJaWYgKHJlcS0+d2Z1bmNfbGVmdCkKKwkJCXsKKwkJ CQkvKiBIYW5kbGUgPCAvIDw9ICovCisJCQkJaWYgKG9pLT5zdHJhdGVneSA9PSBCVExlc3NTdHJh dGVneU51bWJlciB8fAorCQkJCQlvaS0+c3RyYXRlZ3kgPT0gQlRMZXNzRXF1YWxTdHJhdGVneU51 bWJlcikKKwkJCQl7CisJCQkJCS8qCisJCQkJCSAqIElmIHRoZSBmcmFtZSBpcyBib3VuZCB0byB0 aGUgdG9wIG9mIHRoZSB3aW5kb3cgdGhlbiB0aGUKKwkJCQkJICogY291bnQgY2Fubm90IGdvIGRv d24uCisJCQkJCSAqLworCQkJCQlpZiAoKGZyYW1lT3B0aW9ucyAmCShGUkFNRU9QVElPTl9TVEFS VF9VTkJPVU5ERURfUFJFQ0VESU5HKSkpCisJCQkJCXsKKwkJCQkJCXJlcS0+a2VlcF9vcmlnaW5h bCA9IGZhbHNlOworCQkJCQkJcmVxLT5ydW5vcGV4cHIgPSByZXEtPm9wZXhwcjsKKwkJCQkJfQor CQkJCQlicmVhazsKKwkJCQl9CisJCQkJLyogSGFuZGxlID4gLyA+PSAqLworCQkJCWVsc2UgaWYg KG9pLT5zdHJhdGVneSA9PSBCVEdyZWF0ZXJTdHJhdGVneU51bWJlciB8fAorCQkJCQkJIG9pLT5z dHJhdGVneSA9PSBCVEdyZWF0ZXJFcXVhbFN0cmF0ZWd5TnVtYmVyKQorCQkJCXsKKwkJCQkJLyoK KwkJCQkJICogSWYgdGhlIGZyYW1lIGlzIGJvdW5kIHRvIHRoZSBib3R0b20gb2YgdGhlIHdpbmRv dyB0aGVuCisJCQkJCSAqIHRoZSBjb3VudCBjYW5ub3QgZ28gdXAuCisJCQkJCSAqLworCQkJCQlp ZiAoKGZyYW1lT3B0aW9ucyAmCShGUkFNRU9QVElPTl9FTkRfVU5CT1VOREVEX0ZPTExPV0lORykp KQorCQkJCQl7CisJCQkJCQlyZXEtPmtlZXBfb3JpZ2luYWwgPSBmYWxzZTsKKwkJCQkJCXJlcS0+ cnVub3BleHByID0gcmVxLT5vcGV4cHI7CisJCQkJCX0KKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJ fQorCQkJZWxzZQorCQkJeworCQkJCS8qIEhhbmRsZSA+IC8gPj0gKi8KKwkJCQlpZiAob2ktPnN0 cmF0ZWd5ID09IEJUR3JlYXRlclN0cmF0ZWd5TnVtYmVyIHx8CisJCQkJCW9pLT5zdHJhdGVneSA9 PSBCVEdyZWF0ZXJFcXVhbFN0cmF0ZWd5TnVtYmVyKQorCQkJCXsKKwkJCQkJLyoKKwkJCQkJICog SWYgdGhlIGZyYW1lIGlzIGJvdW5kIHRvIHRoZSB0b3Agb2YgdGhlIHdpbmRvdyB0aGVuIHRoZQor CQkJCQkgKiBjb3VudCBjYW5ub3QgZ28gZG93bi4KKwkJCQkJICovCisJCQkJCWlmICgoZnJhbWVP cHRpb25zICYJKEZSQU1FT1BUSU9OX1NUQVJUX1VOQk9VTkRFRF9QUkVDRURJTkcpKSkKKwkJCQkJ eworCQkJCQkJcmVxLT5rZWVwX29yaWdpbmFsID0gZmFsc2U7CisJCQkJCQlyZXEtPnJ1bm9wZXhw ciA9IHJlcS0+b3BleHByOworCQkJCQl9CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQkvKiBIYW5k bGUgPCAvIDw9ICovCisJCQkJZWxzZSBpZiAob2ktPnN0cmF0ZWd5ID09IEJUTGVzc1N0cmF0ZWd5 TnVtYmVyIHx8CisJCQkJCQkgb2ktPnN0cmF0ZWd5ID09IEJUTGVzc0VxdWFsU3RyYXRlZ3lOdW1i ZXIpCisJCQkJeworCQkJCQkvKgorCQkJCQkgKiBJZiB0aGUgZnJhbWUgaXMgYm91bmQgdG8gdGhl IGJvdHRvbSBvZiB0aGUgd2luZG93IHRoZW4KKwkJCQkJICogdGhlIGNvdW50IGNhbm5vdCBnbyB1 cC4KKwkJCQkJICovCisJCQkJCWlmICgoZnJhbWVPcHRpb25zICYJKEZSQU1FT1BUSU9OX0VORF9V TkJPVU5ERURfRk9MTE9XSU5HKSkpCisJCQkJCXsKKwkJCQkJCXJlcS0+a2VlcF9vcmlnaW5hbCA9 IGZhbHNlOworCQkJCQkJcmVxLT5ydW5vcGV4cHIgPSByZXEtPm9wZXhwcjsKKwkJCQkJfQorCQkJ CQlicmVhazsKKwkJCQl9CisJCQl9CisJCX0KKworCQlsaXN0X2ZyZWUob3BmYW1pbGllcyk7CisK KwkJUEdfUkVUVVJOX1BPSU5URVIocmVxKTsKKwl9CisKKwlQR19SRVRVUk5fUE9JTlRFUihOVUxM KTsKK30KKwogCiBEYXR1bQogaW50OGxhcmdlcihQR19GVU5DVElPTl9BUkdTKQpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3dpbmRvd2Z1bmNzLmMgYi9zcmMvYmFja2VuZC91dGls cy9hZHQvd2luZG93ZnVuY3MuYwppbmRleCA5YzEyNzYxN2QxLi4xN2YxOTA5NDEzIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvd2luZG93ZnVuY3MuYworKysgYi9zcmMvYmFja2Vu ZC91dGlscy9hZHQvd2luZG93ZnVuY3MuYwpAQCAtMTMsNyArMTMsMTIgQEAKICAqLwogI2luY2x1 ZGUgInBvc3RncmVzLmgiCiAKKyNpbmNsdWRlICJhY2Nlc3Mvc3RyYXRudW0uaCIKKyNpbmNsdWRl ICJjYXRhbG9nL3BnX29wZXJhdG9yX2QuaCIKKyNpbmNsdWRlICJub2Rlcy9tYWtlZnVuY3MuaCIK KyNpbmNsdWRlICJub2Rlcy9zdXBwb3J0bm9kZXMuaCIKICNpbmNsdWRlICJ1dGlscy9idWlsdGlu cy5oIgorI2luY2x1ZGUgInV0aWxzL2xzeXNjYWNoZS5oIgogI2luY2x1ZGUgIndpbmRvd2FwaS5o IgogCiAvKgpAQCAtNzMsNiArNzgsMTYyIEBAIHJhbmtfdXAoV2luZG93T2JqZWN0IHdpbm9iaikK IAlyZXR1cm4gdXA7CiB9CiAKKy8qCisgKiBwcm9jZXNzX3Jvd19udW1iZXJfcmFua19ydW5fY29u ZGl0aW9uCisgKgkJQ29tbW9uIGZ1bmN0aW9uIGZvciBwcm9zdXBwb3J0IFdpbmRvd0Z1bmN0aW9u UnVuQ29uZGl0aW9uIGZvcgorICoJCXJvd19udW1iZXIoKSwgcmFuaygpIGFuZCBkZW5zZV9yYW5r KCkuCisgKi8KK3N0YXRpYyB2b2lkCitwcm9jZXNzX3Jvd19udW1iZXJfcmFua19ydW5fY29uZGl0 aW9uKFdpbmRvd0Z1bmN0aW9uUnVuQ29uZGl0aW9uICpyZXEpCit7CisJT3BFeHByCSAgICpvcGV4 cHIgPSByZXEtPm9wZXhwcjsKKwlPaWQJCQlvcG5vID0gb3BleHByLT5vcG5vOworCUV4cHIJICAg KmFyZzsKKwlXaW5kb3dGdW5jICp3aW5kb3dmdW5jOworCUxpc3QJICAgKm9wZmFtaWxpZXM7CisJ TGlzdENlbGwgICAqbGM7CisKKwkvKiBFYXJseSBhYm9ydCBvZiBleGVjdXRpb24gaXMgbm90IHBv c3NpYmxlIGlmIHRoZXJlJ3MgYSBQQVJUSVRJT04gQlkgKi8KKwlpZiAocmVxLT53aW5kb3dfY2xh dXNlLT5wYXJ0aXRpb25DbGF1c2UgIT0gTlVMTCkKKwl7CisJCXJlcS0+cnVub3BleHByID0gTlVM TDsKKwkJcmV0dXJuOworCX0KKworCWlmICghcmVxLT53ZnVuY19sZWZ0KQorCXsKKwkJYXJnID0g bGluaXRpYWwob3BleHByLT5hcmdzKTsKKwkJd2luZG93ZnVuYyA9IGxzZWNvbmQob3BleHByLT5h cmdzKTsKKwl9CisJZWxzZQorCXsKKwkJd2luZG93ZnVuYyA9IGxpbml0aWFsKG9wZXhwci0+YXJn cyk7CisJCWFyZyA9IGxzZWNvbmQob3BleHByLT5hcmdzKTsKKwl9CisKKwkvKgorCSAqIFdlJ3Jl IG9ubHkgYWJsZSB0byBoYW5kbGUgcnVuIGNvbmRpdGlvbnMgdGhhdCBjb21wYXJlIHRoZSB3aW5k b3cgcmVzdWx0CisJICogdG8gYSBjb25zdGFudC4KKwkgKgorCSAqIFhYWCBXZSBjb3VsZCBwcm9i YWJseSBkbyBiZXR0ZXIgdGhhbiBqdXN0IENvbnN0cy4gIEV4ZWMgUGFyYW1zIHNob3VsZAorCSAq IHdvcmsgdG9vLgorCSAqLworCWlmICghSXNBKGFyZywgQ29uc3QpKQorCXsKKwkJcmVxLT5ydW5v cGV4cHIgPSBOVUxMOworCQlyZXR1cm47CisJfQorCisJb3BmYW1pbGllcyA9IGdldF9vcF9idHJl ZV9pbnRlcnByZXRhdGlvbihvcG5vKTsKKworCWZvcmVhY2gobGMsIG9wZmFtaWxpZXMpCisJewor CQlPcEJ0cmVlSW50ZXJwcmV0YXRpb24gKm9pID0gKE9wQnRyZWVJbnRlcnByZXRhdGlvbiAqKSBs Zmlyc3QobGMpOworCisJCWlmIChyZXEtPndmdW5jX2xlZnQpCisJCXsKKwkJCS8qCisJCQkgKiBX aGVuIHRoZSBvcGV4cHIgaXMgdXNlcyA8IG9yIDw9IHdpdGggdGhlIHdpbmRvdyBmdW5jdGlvbiBv biB0aGUKKwkJCSAqIGxlZnQsIHRoZW4gd2UgY2FuIHVzZSB0aGUgb3BleHByIGRpcmVjdGx5LiAg V2UgY2FuIGFsc28gc2V0CisJCQkgKiBrZWVwX29yaWdpbmFsIHRvIGZhbHNlIHRvbyBhcyB0aGUg cGxhbm5lciBkb2VzIG5vdCBuZWVkIHRvIGtlZXAKKwkJCSAqIHRoaXMgcXVhbCBhcyBhIGZpbHRl ciBpbiB0aGUgcXVlcnkgYWJvdmUgdGhlIHN1YnF1ZXJ5CisJCQkgKiBjb250YWluaW5nIHRoZSB3 aW5kb3cgZnVuY3Rpb24uCisJCQkgKi8KKwkJCWlmIChvaS0+c3RyYXRlZ3kgPT0gQlRMZXNzU3Ry YXRlZ3lOdW1iZXIgfHwKKwkJCQlvaS0+c3RyYXRlZ3kgPT0gQlRMZXNzRXF1YWxTdHJhdGVneU51 bWJlcikKKwkJCXsKKwkJCQlyZXEtPmtlZXBfb3JpZ2luYWwgPSBmYWxzZTsKKwkJCQlyZXEtPnJ1 bm9wZXhwciA9IHJlcS0+b3BleHByOworCQkJCWJyZWFrOworCQkJfQorCisJCQkvKgorCQkJICog Rm9yIGVxdWFsaXR5IGNvbmRpdGlvbnMgd2UgbmVlZCBhbGwgcm93cyB1cCB1bnRpbCB0aGUgY29u c3QKKwkJCSAqIGJlaW5nIGNvbXBhcmVkLiAgV2UgbWFrZSBhbiBPcEV4cHIgd2l0aCBhIDw9IG9w ZXJhdG9yIHNvIHRoYXQKKwkJCSAqIHdlIHN0b3AgcHJvY2Vzc2luZyBqdXN0IGFmdGVyIHdlIGZp bmQgb3VyIGVxdWFsaXR5IG1hdGNoLgorCQkJICovCisJCQllbHNlIGlmIChvaS0+c3RyYXRlZ3kg PT0gQlRFcXVhbFN0cmF0ZWd5TnVtYmVyKQorCQkJeworCQkJCU9wRXhwciAqbmV3b3BleHByOwor CQkJCU9pZCBsZW9wOworCisJCQkJbGVvcCA9IGdldF9vcGZhbWlseV9tZW1iZXIob2ktPm9wZmFt aWx5X2lkLAorCQkJCQkJCQkJCQlvaS0+b3BsZWZ0dHlwZSwKKwkJCQkJCQkJCQkJb2ktPm9wcmln aHR0eXBlLAorCQkJCQkJCQkJCQlCVExlc3NFcXVhbFN0cmF0ZWd5TnVtYmVyKTsKKworCQkJCW5l d29wZXhwciA9IChPcEV4cHIgKikgbWFrZV9vcGNsYXVzZShsZW9wLAorCQkJCQkJCQkJCQkJCSBv cGV4cHItPm9wcmVzdWx0dHlwZSwKKwkJCQkJCQkJCQkJCQkgb3BleHByLT5vcHJldHNldCwKKwkJ CQkJCQkJCQkJCQkgKEV4cHIgKikgd2luZG93ZnVuYywKKwkJCQkJCQkJCQkJCQkgYXJnLAorCQkJ CQkJCQkJCQkJCSBvcGV4cHItPm9wY29sbGlkLAorCQkJCQkJCQkJCQkJCSBvcGV4cHItPmlucHV0 Y29sbGlkKTsKKwkJCQluZXdvcGV4cHItPm9wZnVuY2lkID0gZ2V0X29wY29kZShsZW9wKTsKKwor CQkJCS8qCisJCQkJICogV2UgbXVzdCBrZWVwIHRoZSBvcmlnaW5hbCBlcXVhbGl0eSBjb25kaXRp b24gYXMgdGhpcyA8PQorCQkJCSAqIE9wRXhwciB3b24ndCBmaWx0ZXIgb3V0IGFsbCB0aGUgZWFy bGllciByZWNvcmRzLgorCQkJCSAqLworCQkJCXJlcS0+a2VlcF9vcmlnaW5hbCA9IHRydWU7CisJ CQkJcmVxLT5ydW5vcGV4cHIgPSBuZXdvcGV4cHI7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJ ZWxzZQorCQl7CisJCQkvKgorCQkJICogV2hlbiB0aGUgd2luZG93IGZ1bmN0aW9uIHZhciBpcyBv biB0aGUgcmlnaHQsIHdlIGxvb2sgZm9yID4gYW5kCisJCQkgKiA+PSBvcGVyYXRvcnMuICBlLmc6 IDEwID49IHJvd19udW1iZXIoKSAuLi4KKwkJCSAqLworCQkJaWYgKG9pLT5zdHJhdGVneSA9PSBC VEdyZWF0ZXJTdHJhdGVneU51bWJlciB8fAorCQkJCW9pLT5zdHJhdGVneSA9PSBCVEdyZWF0ZXJF cXVhbFN0cmF0ZWd5TnVtYmVyKQorCQkJeworCQkJCXJlcS0+a2VlcF9vcmlnaW5hbCA9IGZhbHNl OworCQkJCXJlcS0+cnVub3BleHByID0gcmVxLT5vcGV4cHI7CisJCQkJYnJlYWs7CisJCQl9CisK KwkJCS8qCisJCQkgKiBGb3IgZXF1YWxpdHkgY29uZGl0aW9ucyB3ZSBuZWVkIGFsbCByb3dzIHVw IHVudGlsIHRoZSBjb25zdAorCQkJICogYmVpbmcgY29tcGFyZWQuICBUaGUgd2luZG93IGZ1bmN0 aW9uIGlzIG9uIHRoZSByaWdodCBoZXJlLCBzbworCQkJICogd2UgbWFrZSBhbiBPcEV4cHIgd2l0 aCA8Y29uc3Q+ID49IDx3ZnVuYz4gc28gdGhhdCB3ZSBzdG9wCisJCQkgKiBwcm9jZXNzaW5nIGp1 c3QgYWZ0ZXIgd2UgZmluZCBvdXIgZXF1YWxpdHkgbWF0Y2guIFdlIGRvbid0CisJCQkgKiByZXZl cnNlIHRoZSBjb25kaXRpb24gYW5kIHVzZSA8PSBiZWNhdXNlIHdlIG1heSBoYXZlIGEgY3Jvc3MK KwkJCSAqIHR5cGUgb3BmYW1pbHkuCisJCQkgKi8KKwkJCWVsc2UgaWYgKG9pLT5zdHJhdGVneSA9 PSBCVEVxdWFsU3RyYXRlZ3lOdW1iZXIpCisJCQl7CisJCQkJT3BFeHByICpuZXdvcGV4cHI7CisJ CQkJT2lkIGdlb3A7CisKKwkJCQlnZW9wID0gZ2V0X29wZmFtaWx5X21lbWJlcihvaS0+b3BmYW1p bHlfaWQsCisJCQkJCQkJCQkJCW9pLT5vcGxlZnR0eXBlLAorCQkJCQkJCQkJCQlvaS0+b3ByaWdo dHR5cGUsCisJCQkJCQkJCQkJCUJUR3JlYXRlckVxdWFsU3RyYXRlZ3lOdW1iZXIpOworCisJCQkJ bmV3b3BleHByID0gKE9wRXhwciAqKSBtYWtlX29wY2xhdXNlKGdlb3AsCisJCQkJCQkJCQkJCQkJ IG9wZXhwci0+b3ByZXN1bHR0eXBlLAorCQkJCQkJCQkJCQkJCSBvcGV4cHItPm9wcmV0c2V0LAor CQkJCQkJCQkJCQkJCSBhcmcsCisJCQkJCQkJCQkJCQkJIChFeHByICopIHdpbmRvd2Z1bmMsCisJ CQkJCQkJCQkJCQkJIG9wZXhwci0+b3Bjb2xsaWQsCisJCQkJCQkJCQkJCQkJIG9wZXhwci0+aW5w dXRjb2xsaWQpOworCQkJCW5ld29wZXhwci0+b3BmdW5jaWQgPSBnZXRfb3Bjb2RlKGdlb3ApOwor CisJCQkJLyoKKwkJCQkgKiBXZSBtdXN0IGtlZXAgdGhlIG9yaWdpbmFsIGVxdWFsaXR5IGNvbmRp dGlvbiBhcyB0aGlzID49CisJCQkJICogT3BFeHByIHdvbid0IGZpbHRlciBvdXQgYWxsIHRoZSBl YXJsaWVyIHJlY29yZHMuCisJCQkJICovCisJCQkJcmVxLT5rZWVwX29yaWdpbmFsID0gdHJ1ZTsK KwkJCQlyZXEtPnJ1bm9wZXhwciA9IG5ld29wZXhwcjsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQor CX0KKworCWxpc3RfZnJlZShvcGZhbWlsaWVzKTsKK30KIAogLyoKICAqIHJvd19udW1iZXIKQEAg LTg4LDYgKzI0OSwyNSBAQCB3aW5kb3dfcm93X251bWJlcihQR19GVU5DVElPTl9BUkdTKQogCVBH X1JFVFVSTl9JTlQ2NChjdXJwb3MgKyAxKTsKIH0KIAorLyoKKyAqIHdpbmRvd19yb3dfbnVtYmVy X3N1cHBvcnQKKyAqCQlwcm9zdXBwb3J0IGZ1bmN0aW9uIGZvciB3aW5kb3dfcm93X251bWJlcigp CisgKi8KK0RhdHVtCit3aW5kb3dfcm93X251bWJlcl9zdXBwb3J0KFBHX0ZVTkNUSU9OX0FSR1Mp Cit7CisJTm9kZQkgICAqcmF3cmVxID0gKE5vZGUgKikgUEdfR0VUQVJHX1BPSU5URVIoMCk7CisK KwlpZiAoSXNBKHJhd3JlcSwgV2luZG93RnVuY3Rpb25SdW5Db25kaXRpb24pKQorCXsKKwkJV2lu ZG93RnVuY3Rpb25SdW5Db25kaXRpb24gKnJlcSA9IChXaW5kb3dGdW5jdGlvblJ1bkNvbmRpdGlv biAqKSByYXdyZXE7CisKKwkJcHJvY2Vzc19yb3dfbnVtYmVyX3JhbmtfcnVuX2NvbmRpdGlvbihy ZXEpOworCQlQR19SRVRVUk5fUE9JTlRFUihyZXEpOworCX0KKworCVBHX1JFVFVSTl9QT0lOVEVS KE5VTEwpOworfQogCiAvKgogICogcmFuawpAQCAtMTEwLDYgKzI5MCwyNiBAQCB3aW5kb3dfcmFu ayhQR19GVU5DVElPTl9BUkdTKQogCVBHX1JFVFVSTl9JTlQ2NChjb250ZXh0LT5yYW5rKTsKIH0K IAorLyoKKyAqIHdpbmRvd19yYW5rX3N1cHBvcnQKKyAqCQlwcm9zdXBwb3J0IGZ1bmN0aW9uIGZv ciB3aW5kb3dfcmFuaygpCisgKi8KK0RhdHVtCit3aW5kb3dfcmFua19zdXBwb3J0KFBHX0ZVTkNU SU9OX0FSR1MpCit7CisJTm9kZQkgICAqcmF3cmVxID0gKE5vZGUgKikgUEdfR0VUQVJHX1BPSU5U RVIoMCk7CisKKwlpZiAoSXNBKHJhd3JlcSwgV2luZG93RnVuY3Rpb25SdW5Db25kaXRpb24pKQor CXsKKwkJV2luZG93RnVuY3Rpb25SdW5Db25kaXRpb24gKnJlcSA9IChXaW5kb3dGdW5jdGlvblJ1 bkNvbmRpdGlvbiAqKSByYXdyZXE7CisKKwkJcHJvY2Vzc19yb3dfbnVtYmVyX3JhbmtfcnVuX2Nv bmRpdGlvbihyZXEpOworCQlQR19SRVRVUk5fUE9JTlRFUihyZXEpOworCX0KKworCVBHX1JFVFVS Tl9QT0lOVEVSKE5VTEwpOworfQorCiAvKgogICogZGVuc2VfcmFuawogICogUmFuayBpbmNyZWFz ZXMgYnkgMSB3aGVuIGtleSBjb2x1bW5zIGNoYW5nZS4KQEAgLTEzMCw2ICszMzAsMjYgQEAgd2lu ZG93X2RlbnNlX3JhbmsoUEdfRlVOQ1RJT05fQVJHUykKIAlQR19SRVRVUk5fSU5UNjQoY29udGV4 dC0+cmFuayk7CiB9CiAKKy8qCisgKiB3aW5kb3dfZGVuc2VfcmFua19zdXBwb3J0CisgKgkJcHJv c3VwcG9ydCBmdW5jdGlvbiBmb3Igd2luZG93X2RlbnNlX3JhbmsoKQorICovCitEYXR1bQord2lu ZG93X2RlbnNlX3Jhbmtfc3VwcG9ydChQR19GVU5DVElPTl9BUkdTKQoreworCU5vZGUJICAgKnJh d3JlcSA9IChOb2RlICopIFBHX0dFVEFSR19QT0lOVEVSKDApOworCisJaWYgKElzQShyYXdyZXEs IFdpbmRvd0Z1bmN0aW9uUnVuQ29uZGl0aW9uKSkKKwl7CisJCVdpbmRvd0Z1bmN0aW9uUnVuQ29u ZGl0aW9uICpyZXEgPSAoV2luZG93RnVuY3Rpb25SdW5Db25kaXRpb24gKikgcmF3cmVxOworCisJ CXByb2Nlc3Nfcm93X251bWJlcl9yYW5rX3J1bl9jb25kaXRpb24ocmVxKTsKKwkJUEdfUkVUVVJO X1BPSU5URVIocmVxKTsKKwl9CisKKwlQR19SRVRVUk5fUE9JTlRFUihOVUxMKTsKK30KKwogLyoK ICAqIHBlcmNlbnRfcmFuawogICogcmV0dXJuIGZyYWN0aW9uIGJldHdlZW4gMCBhbmQgMSBpbmNs dXNpdmUsCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9taXNjL3F1ZXJ5anVtYmxlLmMg Yi9zcmMvYmFja2VuZC91dGlscy9taXNjL3F1ZXJ5anVtYmxlLmMKaW5kZXggOWYyY2QxZjEyNy4u YzEwMDMwMWU1YyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9xdWVyeWp1bWJs ZS5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvcXVlcnlqdW1ibGUuYwpAQCAtNDM0LDcg KzQzNCw3IEBAIEp1bWJsZUV4cHIoSnVtYmxlU3RhdGUgKmpzdGF0ZSwgTm9kZSAqbm9kZSkKIAkJ CQlBUFBfSlVNQihleHByLT53aW5yZWYpOwogCQkJCUp1bWJsZUV4cHIoanN0YXRlLCAoTm9kZSAq KSBleHByLT5hcmdzKTsKIAkJCQlKdW1ibGVFeHByKGpzdGF0ZSwgKE5vZGUgKikgZXhwci0+YWdn ZmlsdGVyKTsKLQkJCX0KKwkJfQogCQkJYnJlYWs7CiAJCWNhc2UgVF9TdWJzY3JpcHRpbmdSZWY6 CiAJCQl7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0IGIvc3Jj L2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdAppbmRleCBmZGUyNTFmYTRmLi4zMTk1M2Q2ZGZh IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0CisrKyBiL3NyYy9p bmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKQEAgLTY1NTgsMTEgKzY1NTgsMTYgQEAKICMgY291 bnQgaGFzIHR3byBmb3JtczogY291bnQoYW55KSBhbmQgY291bnQoKikKIHsgb2lkID0+ICcyMTQ3 JywKICAgZGVzY3IgPT4gJ251bWJlciBvZiBpbnB1dCByb3dzIGZvciB3aGljaCB0aGUgaW5wdXQg ZXhwcmVzc2lvbiBpcyBub3QgbnVsbCcsCi0gIHByb25hbWUgPT4gJ2NvdW50JywgcHJva2luZCA9 PiAnYScsIHByb2lzc3RyaWN0ID0+ICdmJywgcHJvcmV0dHlwZSA9PiAnaW50OCcsCi0gIHByb2Fy Z3R5cGVzID0+ICdhbnknLCBwcm9zcmMgPT4gJ2FnZ3JlZ2F0ZV9kdW1teScgfSwKKyAgcHJvbmFt ZSA9PiAnY291bnQnLCBwcm9zdXBwb3J0ID0+ICdpbnQ4aW5jX3N1cHBvcnQnLCBwcm9raW5kID0+ ICdhJywKKyAgcHJvaXNzdHJpY3QgPT4gJ2YnLCBwcm9yZXR0eXBlID0+ICdpbnQ4JywgcHJvYXJn dHlwZXMgPT4gJ2FueScsCisgIHByb3NyYyA9PiAnYWdncmVnYXRlX2R1bW15JyB9LAogeyBvaWQg PT4gJzI4MDMnLCBkZXNjciA9PiAnbnVtYmVyIG9mIGlucHV0IHJvd3MnLAotICBwcm9uYW1lID0+ ICdjb3VudCcsIHByb2tpbmQgPT4gJ2EnLCBwcm9pc3N0cmljdCA9PiAnZicsIHByb3JldHR5cGUg PT4gJ2ludDgnLAotICBwcm9hcmd0eXBlcyA9PiAnJywgcHJvc3JjID0+ICdhZ2dyZWdhdGVfZHVt bXknIH0sCisgIHByb25hbWUgPT4gJ2NvdW50JywgcHJvc3VwcG9ydCA9PiAnaW50OGluY19zdXBw b3J0JywgcHJva2luZCA9PiAnYScsCisgIHByb2lzc3RyaWN0ID0+ICdmJywgcHJvcmV0dHlwZSA9 PiAnaW50OCcsIHByb2FyZ3R5cGVzID0+ICcnLAorICBwcm9zcmMgPT4gJ2FnZ3JlZ2F0ZV9kdW1t eScgfSwKK3sgb2lkID0+ICc4ODAyJywgZGVzY3IgPT4gJ3BsYW5uZXIgc3VwcG9ydCBmb3IgY291 bnQgcnVuIGNvbmRpdGlvbicsCisgIHByb25hbWUgPT4gJ2ludDhpbmNfc3VwcG9ydCcsIHByb3Jl dHR5cGUgPT4gJ2ludGVybmFsJywKKyAgcHJvYXJndHlwZXMgPT4gJ2ludGVybmFsJywgcHJvc3Jj ID0+ICdpbnQ4aW5jX3N1cHBvcnQnIH0sCiAKIHsgb2lkID0+ICcyNzE4JywKICAgZGVzY3IgPT4g J3BvcHVsYXRpb24gdmFyaWFuY2Ugb2YgYmlnaW50IGlucHV0IHZhbHVlcyAoc3F1YXJlIG9mIHRo ZSBwb3B1bGF0aW9uIHN0YW5kYXJkIGRldmlhdGlvbiknLApAQCAtOTk5NiwxNCArMTAwMDEsMjYg QEAKIAogIyBTUUwtc3BlYyB3aW5kb3cgZnVuY3Rpb25zCiB7IG9pZCA9PiAnMzEwMCcsIGRlc2Ny ID0+ICdyb3cgbnVtYmVyIHdpdGhpbiBwYXJ0aXRpb24nLAotICBwcm9uYW1lID0+ICdyb3dfbnVt YmVyJywgcHJva2luZCA9PiAndycsIHByb2lzc3RyaWN0ID0+ICdmJywKLSAgcHJvcmV0dHlwZSA9 PiAnaW50OCcsIHByb2FyZ3R5cGVzID0+ICcnLCBwcm9zcmMgPT4gJ3dpbmRvd19yb3dfbnVtYmVy JyB9LAorICBwcm9uYW1lID0+ICdyb3dfbnVtYmVyJywgcHJvc3VwcG9ydCA9PiAnd2luZG93X3Jv d19udW1iZXJfc3VwcG9ydCcsCisgIHByb2tpbmQgPT4gJ3cnLCBwcm9pc3N0cmljdCA9PiAnZics ICBwcm9yZXR0eXBlID0+ICdpbnQ4JywKKyAgcHJvYXJndHlwZXMgPT4gJycsIHByb3NyYyA9PiAn d2luZG93X3Jvd19udW1iZXInIH0sCit7IG9pZCA9PiAnODc5OScsIGRlc2NyID0+ICdwbGFubmVy IHN1cHBvcnQgZm9yIHJvd19udW1iZXIgcnVuIGNvbmRpdGlvbicsCisgIHByb25hbWUgPT4gJ3dp bmRvd19yb3dfbnVtYmVyX3N1cHBvcnQnLCBwcm9yZXR0eXBlID0+ICdpbnRlcm5hbCcsCisgIHBy b2FyZ3R5cGVzID0+ICdpbnRlcm5hbCcsIHByb3NyYyA9PiAnd2luZG93X3Jvd19udW1iZXJfc3Vw cG9ydCcgfSwKIHsgb2lkID0+ICczMTAxJywgZGVzY3IgPT4gJ2ludGVnZXIgcmFuayB3aXRoIGdh cHMnLAotICBwcm9uYW1lID0+ICdyYW5rJywgcHJva2luZCA9PiAndycsIHByb2lzc3RyaWN0ID0+ ICdmJywgcHJvcmV0dHlwZSA9PiAnaW50OCcsCisgIHByb25hbWUgPT4gJ3JhbmsnLCBwcm9zdXBw b3J0ID0+ICd3aW5kb3dfcmFua19zdXBwb3J0JywKKyAgcHJva2luZCA9PiAndycsIHByb2lzc3Ry aWN0ID0+ICdmJywgcHJvcmV0dHlwZSA9PiAnaW50OCcsCiAgIHByb2FyZ3R5cGVzID0+ICcnLCBw cm9zcmMgPT4gJ3dpbmRvd19yYW5rJyB9LAoreyBvaWQgPT4gJzg4MDAnLCBkZXNjciA9PiAncGxh bm5lciBzdXBwb3J0IGZvciByYW5rIHJ1biBjb25kaXRpb24nLAorICBwcm9uYW1lID0+ICd3aW5k b3dfcmFua19zdXBwb3J0JywgcHJvcmV0dHlwZSA9PiAnaW50ZXJuYWwnLAorICBwcm9hcmd0eXBl cyA9PiAnaW50ZXJuYWwnLCBwcm9zcmMgPT4gJ3dpbmRvd19yYW5rX3N1cHBvcnQnIH0sCiB7IG9p ZCA9PiAnMzEwMicsIGRlc2NyID0+ICdpbnRlZ2VyIHJhbmsgd2l0aG91dCBnYXBzJywKLSAgcHJv bmFtZSA9PiAnZGVuc2VfcmFuaycsIHByb2tpbmQgPT4gJ3cnLCBwcm9pc3N0cmljdCA9PiAnZics Ci0gIHByb3JldHR5cGUgPT4gJ2ludDgnLCBwcm9hcmd0eXBlcyA9PiAnJywgcHJvc3JjID0+ICd3 aW5kb3dfZGVuc2VfcmFuaycgfSwKKyAgcHJvbmFtZSA9PiAnZGVuc2VfcmFuaycsIHByb3N1cHBv cnQgPT4gJ3dpbmRvd19kZW5zZV9yYW5rX3N1cHBvcnQnLAorICBwcm9raW5kID0+ICd3JywgcHJv aXNzdHJpY3QgPT4gJ2YnLCBwcm9yZXR0eXBlID0+ICdpbnQ4JywgcHJvYXJndHlwZXMgPT4gJycs CisgIHByb3NyYyA9PiAnd2luZG93X2RlbnNlX3JhbmsnIH0sCit7IG9pZCA9PiAnODgwMScsIGRl c2NyID0+ICdwbGFubmVyIHN1cHBvcnQgZm9yIGRlbnNlIHJhbmsgcnVuIGNvbmRpdGlvbicsCisg IHByb25hbWUgPT4gJ3dpbmRvd19kZW5zZV9yYW5rX3N1cHBvcnQnLCBwcm9yZXR0eXBlID0+ICdp bnRlcm5hbCcsCisgIHByb2FyZ3R5cGVzID0+ICdpbnRlcm5hbCcsIHByb3NyYyA9PiAnd2luZG93 X2RlbnNlX3Jhbmtfc3VwcG9ydCcgfSwKIHsgb2lkID0+ICczMTAzJywgZGVzY3IgPT4gJ2ZyYWN0 aW9uYWwgcmFuayB3aXRoaW4gcGFydGl0aW9uJywKICAgcHJvbmFtZSA9PiAncGVyY2VudF9yYW5r JywgcHJva2luZCA9PiAndycsIHByb2lzc3RyaWN0ID0+ICdmJywKICAgcHJvcmV0dHlwZSA9PiAn ZmxvYXQ4JywgcHJvYXJndHlwZXMgPT4gJycsIHByb3NyYyA9PiAnd2luZG93X3BlcmNlbnRfcmFu aycgfSwKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oIGIvc3JjL2lu Y2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgKaW5kZXggMGVjNTUwOWU3ZS4uOGY5YmJmMjkyMiAxMDA2 NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUv bm9kZXMvZXhlY25vZGVzLmgKQEAgLTI0MDcsNiArMjQwNywxMCBAQCB0eXBlZGVmIHN0cnVjdCBX aW5kb3dBZ2dTdGF0ZQogCU1lbW9yeUNvbnRleHQgY3VyYWdnY29udGV4dDsJLyogY3VycmVudCBh Z2dyZWdhdGUncyB3b3JraW5nIGRhdGEgKi8KIAlFeHByQ29udGV4dCAqdG1wY29udGV4dDsJLyog c2hvcnQtdGVybSBldmFsdWF0aW9uIGNvbnRleHQgKi8KIAorCUV4cHJTdGF0ZSAgICpydW5jb25k aXRpb247CS8qIENvbmRpdGlvbiB3aGljaCBtdXN0IHJlbWFpbiB0cnVlIG90aGVyd2lzZQorCQkJ CQkJCQkgKiBleGVjdXRpb24gb2YgdGhlIFdpbmRvd0FnZyB3aWxsIGZpbmlzaCwgb3IKKwkJCQkJ CQkJICogTlVMTCBpZiB0aGVyZSBpcyBubyBzdWNoIGNvbmRpdGlvbi4gKi8KKwogCWJvb2wJCWFs bF9maXJzdDsJCS8qIHRydWUgaWYgdGhlIHNjYW4gaXMgc3RhcnRpbmcgKi8KIAlib29sCQlhbGxf ZG9uZTsJCS8qIHRydWUgaWYgdGhlIHNjYW4gaXMgZmluaXNoZWQgKi8KIAlib29sCQlwYXJ0aXRp b25fc3Bvb2xlZDsJLyogdHJ1ZSBpZiBhbGwgdHVwbGVzIGluIGN1cnJlbnQgcGFydGl0aW9uCmRp ZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9ub2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMv bm9kZXMuaAppbmRleCBkOWU0MTdiY2Q3Li4zZGExZmM0Y2RhIDEwMDY0NAotLS0gYS9zcmMvaW5j bHVkZS9ub2Rlcy9ub2Rlcy5oCisrKyBiL3NyYy9pbmNsdWRlL25vZGVzL25vZGVzLmgKQEAgLTUy Nyw3ICs1MjcsOCBAQCB0eXBlZGVmIGVudW0gTm9kZVRhZwogCVRfU3VwcG9ydFJlcXVlc3RTZWxl Y3Rpdml0eSwJLyogaW4gbm9kZXMvc3VwcG9ydG5vZGVzLmggKi8KIAlUX1N1cHBvcnRSZXF1ZXN0 Q29zdCwJCS8qIGluIG5vZGVzL3N1cHBvcnRub2Rlcy5oICovCiAJVF9TdXBwb3J0UmVxdWVzdFJv d3MsCQkvKiBpbiBub2Rlcy9zdXBwb3J0bm9kZXMuaCAqLwotCVRfU3VwcG9ydFJlcXVlc3RJbmRl eENvbmRpdGlvbgkvKiBpbiBub2Rlcy9zdXBwb3J0bm9kZXMuaCAqLworCVRfU3VwcG9ydFJlcXVl c3RJbmRleENvbmRpdGlvbiwJLyogaW4gbm9kZXMvc3VwcG9ydG5vZGVzLmggKi8KKwlUX1dpbmRv d0Z1bmN0aW9uUnVuQ29uZGl0aW9uIC8qIGluIG5vZGVzL3N1cHBvcnRub2Rlcy5oICovCiB9IE5v ZGVUYWc7CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXJzZW5vZGVzLmgg Yi9zcmMvaW5jbHVkZS9ub2Rlcy9wYXJzZW5vZGVzLmgKaW5kZXggZGVmOTY1MWIzNC4uNzgzZGMy ZTk3ZCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvcGFyc2Vub2Rlcy5oCisrKyBiL3Ny Yy9pbmNsdWRlL25vZGVzL3BhcnNlbm9kZXMuaApAQCAtMTM4MSw2ICsxMzgxLDggQEAgdHlwZWRl ZiBzdHJ1Y3QgV2luZG93Q2xhdXNlCiAJaW50CQkJZnJhbWVPcHRpb25zOwkvKiBmcmFtZV9jbGF1 c2Ugb3B0aW9ucywgc2VlIFdpbmRvd0RlZiAqLwogCU5vZGUJICAgKnN0YXJ0T2Zmc2V0OwkvKiBl eHByZXNzaW9uIGZvciBzdGFydGluZyBib3VuZCwgaWYgYW55ICovCiAJTm9kZQkgICAqZW5kT2Zm c2V0OwkJLyogZXhwcmVzc2lvbiBmb3IgZW5kaW5nIGJvdW5kLCBpZiBhbnkgKi8KKwlMaXN0CSAg ICpydW5jb25kaXRpb247CS8qICovCisJTGlzdAkgICAqcnVuY29uZGl0aW9ub3JpZzsgLyogVXNl ZCBmb3IgRVhQTEFJTiAqLwogCU9pZAkJCXN0YXJ0SW5SYW5nZUZ1bmM7CS8qIGluX3JhbmdlIGZ1 bmN0aW9uIGZvciBzdGFydE9mZnNldCAqLwogCU9pZAkJCWVuZEluUmFuZ2VGdW5jOyAvKiBpbl9y YW5nZSBmdW5jdGlvbiBmb3IgZW5kT2Zmc2V0ICovCiAJT2lkCQkJaW5SYW5nZUNvbGw7CS8qIGNv bGxhdGlvbiBmb3IgaW5fcmFuZ2UgdGVzdHMgKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25v ZGVzL3BsYW5ub2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5vZGVzLmgKaW5kZXggYWFh M2I2NWQwNC4uOWIzMDRmZGQwNyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5v ZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5vZGVzLmgKQEAgLTg5MCw2ICs4OTAs OSBAQCB0eXBlZGVmIHN0cnVjdCBXaW5kb3dBZ2cKIAlpbnQJCQlmcmFtZU9wdGlvbnM7CS8qIGZy YW1lX2NsYXVzZSBvcHRpb25zLCBzZWUgV2luZG93RGVmICovCiAJTm9kZQkgICAqc3RhcnRPZmZz ZXQ7CS8qIGV4cHJlc3Npb24gZm9yIHN0YXJ0aW5nIGJvdW5kLCBpZiBhbnkgKi8KIAlOb2RlCSAg ICplbmRPZmZzZXQ7CQkvKiBleHByZXNzaW9uIGZvciBlbmRpbmcgYm91bmQsIGlmIGFueSAqLwor CUxpc3QJICAgKnJ1bmNvbmRpdGlvbjsJLyogQ29uZGl0aW9ucyB0aGF0IG11c3QgcmVtYWluIHRy dWUgaW4gb3JkZXIKKwkJCQkJCQkJICogZm9yIGV4ZWN1dGlvbiB0byBjb250aW51ZSAqLworCUxp c3QJICAgKnJ1bmNvbmRpdGlvbm9yaWc7CS8qIHJ1bmNvbmRpdGlvbiBmb3IgZGlzcGxheSBpbiBF WFBMQUlOICovCiAJLyogdGhlc2UgZmllbGRzIGFyZSB1c2VkIHdpdGggUkFOR0Ugb2Zmc2V0IFBS RUNFRElORy9GT0xMT1dJTkc6ICovCiAJT2lkCQkJc3RhcnRJblJhbmdlRnVuYzsJLyogaW5fcmFu Z2UgZnVuY3Rpb24gZm9yIHN0YXJ0T2Zmc2V0ICovCiAJT2lkCQkJZW5kSW5SYW5nZUZ1bmM7IC8q IGluX3JhbmdlIGZ1bmN0aW9uIGZvciBlbmRPZmZzZXQgKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNs dWRlL25vZGVzL3N1cHBvcnRub2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvc3VwcG9ydG5vZGVz LmgKaW5kZXggODVlMWI4YTgzMi4uY2I4MWNjNWU2ZSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUv bm9kZXMvc3VwcG9ydG5vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvc3VwcG9ydG5vZGVz LmgKQEAgLTM4LDcgKzM4LDcgQEAKIHN0cnVjdCBQbGFubmVySW5mbzsJCQkJLyogYXZvaWQgaW5j bHVkaW5nIHBhdGhub2Rlcy5oIGhlcmUgKi8KIHN0cnVjdCBJbmRleE9wdEluZm87CiBzdHJ1Y3Qg U3BlY2lhbEpvaW5JbmZvOwotCitzdHJ1Y3QgV2luZG93Q2xhdXNlOwogCiAvKgogICogVGhlIFNp bXBsaWZ5IHJlcXVlc3QgYWxsb3dzIHRoZSBzdXBwb3J0IGZ1bmN0aW9uIHRvIHBlcmZvcm0gcGxh bi10aW1lCkBAIC0yMzksNCArMjM5LDg4IEBAIHR5cGVkZWYgc3RydWN0IFN1cHBvcnRSZXF1ZXN0 SW5kZXhDb25kaXRpb24KIAkJCQkJCQkJICogZXF1aXZhbGVudCBvZiB0aGUgZnVuY3Rpb24gY2Fs bCAqLwogfSBTdXBwb3J0UmVxdWVzdEluZGV4Q29uZGl0aW9uOwogCisvKiAtLS0tLS0tLS0tCisg KiBUbyBhbGxvdyBtb3JlIGVmZmljaWVudCBleGVjdXRpb24gb2Ygb3VyIG1vbm90b25pY2FsbHkg aW5jcmVhc2luZyB3aW5kb3cKKyAqIGZ1bmN0aW9ucywgd2Ugc3VwcG9ydCBjYWxsaW5nIHRoZSB3 aW5kb3cgZnVuY3Rpb24ncyBwcm9zdXBwb3J0IGZ1bmN0aW9uCisgKiBwYXNzaW5nIGFsb25nIHRo aXMgc3RydWN0IHdoZW5ldmVyIHRoZSBwbGFubmVyIHNlZXMgYW4gT3BFeHByIHF1YWwgZGlyZWN0 bHkKKyAqIHJlZmVyZW5jZSBhIHdpbmRvd2luZyBmdW5jdGlvbiBpbiBhIHN1YnF1ZXJ5LiAgV2hl biB0aGUgcGxhbm5lciBlbmNvdW50ZXJzCisgKiB0aGlzLCB3ZSBwb3B1bGF0ZSB0aGlzIHN0cnVj dCBhbmQgcGFzcyBpdCBhbG9uZyB0byB0aGUgd2luZG93aW5nIGZ1bmN0aW9uJ3MKKyAqIHByb3N1 cHBvcnQgZnVuY3Rpb24gc28gdGhhdCBpdCBjYW4gZXZhbHVhdGUgaWYgdGhlIE9wRXhwciBjYW4g YmUgdXNlZCB0bworICogYWxsb3cgZXhlY3V0aW9uIG9mIHRoZSBXaW5kb3dBZ2cgbm9kZSB0byBl bmQgZWFybHkuCisgKgorICogVGhpcyBhbGxvd3MgcXVlcmllcyBzdWNoIGFzIHRoZSBmb2xsb3dp bmcgb25lIHRvIGVuZCBleGVjdXRpb24gb25jZSAicm4iCisgKiByZWFjaGVzIDMuCisgKgorICog U0VMRUNUICogRlJPTSAoCisgKgkJU0VMRUNUCisgKgkJCQljb2wsCisgKgkJCQlyb3dfbnVtYmVy KCkgb3ZlciAob3JkZXIgYnkgY29sKSBybiBGUk9NIHRhYgorICogKSB0CisgKiBXSEVSRSBybiA8 IDM7CisgKgorICogVGhlIHByb3N1cHBvcnQgZnVuY3Rpb24gbXVzdCBwcm9wZXJseSBkZXRlcm1p bmUgYWxsIGNhc2VzIHdoZXJlIHN1Y2ggYW4KKyAqIG9wdGltaXphdGlvbiBpcyBwb3NzaWJsZSBh bmQgbGVhdmUgJ3J1bm9wZXhwcicgc2V0IHRvIE5VTEwgaW4gY2FzZXMgd2hlcmUKKyAqIHRoZSBv cHRpbWl6YXRpb24gaXMgbm90IHBvc3NpYmxlLiAgSXQncyBub3QgcG9zc2libGUgdG8gc3RvcCBl eGVjdXRpb24KKyAqIGVhcmx5IGlmIHRoZSBhYm92ZSBleGFtcGxlIGhhZCBhIFBBUlRJVElPTiBC WSBjbGF1c2UgYXMgInJuIiB3b3VsZCBkcm9wCisgKiBiYWNrIHRvIDEgaW4gZWFjaCBuZXcgcGFy dGl0aW9uLgorICoKKyAqIFdlIGhhdmUgYSBmZXcgYnVpbHQtaW4gd2luZG93aW5nIGZ1bmN0aW9u cyB3aGljaCByZXR1cm4gYSBtb25vdG9uaWNhbGx5CisgKiBpbmNyZWFzaW5nIHZhbHVlLiBUaGlz IG9wdGltaXphdGlvbiBpcyBpZGVhbCBmb3IgdGhvc2UuCisgKgorICogSXQncyBhbHNvIHBvc3Np YmxlIHRvIHVzZSB0aGlzIGZvciB3aW5kb3dpbmcgZnVuY3Rpb25zIHRoYXQgaGF2ZSBhCisgKiBt b25vdG9uaWNhbGx5IGRlY3JlYXNpbmcgdmFsdWUuICBBbiBleGFtcGxlIG9mIHRoaXMgd291bGQg YmUgQ09VTlQoKikgd2l0aAorICogdGhlIGZyYW1lIG9wdGlvbiBVTkJPVU5ERUQgRk9MTE9XSU5H LCB0aGUgcmV0dXJuIHZhbHVlIGNvdWxkIG9ubHkgZXZlciBzdGF5CisgKiB0aGUgc2FtZSBvciBk ZWNyZWFzZS4gIEluIHRoaXMgY2FzZSwgaXQgd291bGQgYmUgcG9zc2libGUgdG8gc3RvcCBleGVj dXRpb24KKyAqIGVhcmx5IGlmIHRoZXJlIHdhcyBzb21lIHF1YWwgdGhhdCBleHByZXNzZWQgdGhl IGNvdW50IG11c3QgYmUgYWJvdmUgYSBnaXZlbgorICogdmFsdWUuCisgKgorICogSW5wdXRzOgor ICoJJ29wZXhwcicgaXMgdGhlIHF1YWwgd2hpY2ggdGhlIHBsYW5uZXIgd291bGQgbGlrZSBldmFs dWF0ZWQuCisgKgorICoJJ3dpbmRvd19mdW5jJyBpcyB0aGUgcG9pbnRlciB0byB0aGUgd2luZG93 IGZ1bmN0aW9uIGJlaW5nIGNhbGxlZC4KKyAqCisgKgknd2luZG93X2NsYXVzZScgcG9pbnRlciB0 byB0aGUgV2luZG93Q2xhdXNlIGRhdGEuICBTdXBwb3J0IGZ1bmN0aW9ucyBjYW4KKyAqCXVzZSB0 aGlzIHRvIGNoZWNrIGZyYW1lIGJvdW5kcyBhbmQgcGFydGl0aW9uIGJ5IGNsYXVzZXMsIGV0Yy4K KyAqCisgKgknd2Z1bmNfbGVmdCcgaW5kaWNhdGVzIHdoaWNoIHdheSBhcm91bmQgdGhlIE9wRXhw ciBpcy4gIFRydWUgaW5kaWNhdGVzCisgKgl0aGF0IHRoZSBMSFMgb2YgdGhlIG9wZXhwciBpcyB0 aGUgd2luZG93IFZhci4gIEZhbHNlIGluZGljYXRlcyBpdCdzIG9uIHRoZQorICoJUkhTLgorICoK KyAqIE91dHB1dHM6CisgKgkncnVub3BleHByJyB0aGUgT3BFeHByIHRoYXQgdGhlIHBsYW5uZXIg c2hvdWxkIGV2YWx1YXRlIGR1cmluZyBleGVjdXRpb24uCisgKglUaGlzIHdpbGwgYmUgZXZhbHVh dGVkIGFmdGVyIGF0IHRoZSBlbmQgb2YgdGhlIFdpbmRvd0FnZyBjYWxsIGR1cmluZworICoJZXhl Y3V0aW9uLiAgSWYgdGhlIGV4cHJlc3Npb24gZXZhbHVhdGVzIHRvIE5VTEwgb3IgRmFsc2UgdGhl biB0aGUKKyAqCVdpbmRvd0FnZyB3aWxsIHJldHVybiBOVUxMIHRvIGluZGljYXRlIHRoZXJlIGFy ZSBubyBtb3JlIHR1cGxlcy4gIFN1cHBvcnQKKyAqCWZ1bmN0aW9ucyBtYXkgc2V0IHRoaXMgdG8g dGhlIGlucHV0ICdvcGV4cHInIHdoZW4gdGhhdCBleHByZXNzaW9uIGlzCisgKglzdWl0YWJsZSwg b3IgdGhleSBtYXkgY3JhZnQgdGhlaXIgb3duIHN1aXRhYmxlIGV4cHJlc3Npb24uICBUaGlzIG91 dHB1dAorICoJYXJndW1lbnQgZGVmYXVsdHMgdG8gTlVMTC4gSWYgdGhlICdvcGV4cHInIGlzIG5v dCBzdWl0YWJsZSB0aGVuIHRoaXMKKyAqCW91dHB1dCBtdXN0IHJlbWFpbiBOVUxMLgorICoKKyAq CSdrZWVwX29yaWdpbmFsJyBpbmRpY2F0ZXMgdG8gdGhlIHBsYW5uZXIgaWYgaXQgc2hvdWxkIGFs c28ga2VlcCB0aGUKKyAqCW9wZXhwciBhcyBhIGZpbHRlciBvbiB0aGUgcGFyZW50IHF1ZXJ5LiAg VGhpcyBkZWZhdWx0cyB0byBUcnVlLCB3aGljaCBpcworICoJdGhlIHNhZmVzdCBvcHRpb24gaWYg eW91J3JlIHVuc3VyZS4gIE9ubHkgc2V0IGl0IHRvIGZhbHNlIGlmIHRoZQorICoJJ3J1bm9wZXhw cicgd2lsbCBjb3JyZWN0bHkgZmlsdGVyIGFsbCBvZiB0aGUgcmVjb3JkcyB0aGF0ICdvcGV4cHIn IHdvdWxkLgorICogLS0tLS0tLS0tLQorICovCit0eXBlZGVmIHN0cnVjdCBXaW5kb3dGdW5jdGlv blJ1bkNvbmRpdGlvbgoreworCU5vZGVUYWcJCXR5cGU7CisKKwkvKiBJbnB1dCBmaWVsZHM6ICov CisJT3BFeHByCQkgICAqb3BleHByOwkJCQkvKiBJbnB1dCBPcEV4cHIgdG8gY2hlY2sgKi8KKwlX aW5kb3dGdW5jCSAgICp3aW5kb3dfZnVuYzsJLyogUG9pbnRlciB0byB0aGUgd2luZG93IGZ1bmN0 aW9uIGRhdGEgKi8KKwlzdHJ1Y3QgV2luZG93Q2xhdXNlICAgKndpbmRvd19jbGF1c2U7CS8qIFBv aW50ZXIgdG8gdGhlIHdpbmRvdyBjbGF1c2UKKwkJCQkJCQkJCQkJICogZGF0YSAqLworCWJvb2wJ CQl3ZnVuY19sZWZ0OwkJLyogVHJ1ZSBpZiB3aW5kb3cgZnVuYyBpcyBvbiBsZWZ0IG9mIG9wZXhw ciAqLworCisJLyogT3V0cHV0IGZpZWxkczogKi8KKwlPcEV4cHIJCSAgICpydW5vcGV4cHI7CQkv KiBPdXRwdXQgT3BFeHByIHRvIHVzZSBvciBOVUxMIGlmIGlucHV0CisJCQkJCQkJCQkgKiBkb2Vz IG5vdCBzdXBwb3J0IGEgcnVuIGNvbmRpdGlvbi4gKi8KKwlib29sCQkJa2VlcF9vcmlnaW5hbDsJ LyogVHJ1ZSBpZiB0aGUgcGxhbm5lciBzaG91bGQgc3RpbGwgdXNlCisJCQkJCQkJCQkgKiB0aGUg b3JpZ2luYWwgcXVhbCBpbiB0aGUgYmFzZSBxdWFscyBvZgorCQkJCQkJCQkJICogdGhlIHBhcmVu dCBxdWVyeSBvciBmYWxzZSBpZiBpdCdzIHNhZmUKKwkJCQkJCQkJCSAqIHRvIGlnbm9yZSBpdCBk dWUgdG8gdGhlIHJ1biBjb25kaXRpb24KKwkJCQkJCQkJCSAqIHJlcGxhY2luZyBpdCAqLworfSBX aW5kb3dGdW5jdGlvblJ1bkNvbmRpdGlvbjsKKwogI2VuZGlmCQkJCQkJCS8qIFNVUFBPUlROT0RF U19IICovCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3dpbmRvdy5vdXQg Yi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3dpbmRvdy5vdXQKaW5kZXggMTllMmFjNTE4YS4u OWM0YzhhODM4NyAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC93aW5kb3cu b3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvd2luZG93Lm91dApAQCAtMzE5Niw2 ICszMTk2LDI2MSBAQCBXSEVSRSBkZXBuYW1lID0gJ3NhbGVzJzsKICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBlbXBzYWxhcnkKICg5IHJvd3MpCiAKKy0tIFRlc3Qg d2luZG93IGZ1bmN0aW9uIHJ1biBjb25kaXRpb25zIGFyZSBwcm9wZXJseSBwdXNoZWQgZG93biBp bnRvIHRoZQorLS0gV2luZG93QWdnCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9N CisgIChTRUxFQ1QgZW1wbm8sCisgICAgICAgICAgcm93X251bWJlcigpIE9WRVIgKE9SREVSIEJZ IGVtcG5vKSBybgorICAgRlJPTSBlbXBzYWxhcnkpIGVtcAorV0hFUkUgcm4gPCAzOworICAgICAg ICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFdpbmRvd0FnZworICAgUnVuIENvbmRp dGlvbjogKHJvd19udW1iZXIoKSBPVkVSICg/KSA8IDMpCisgICAtPiAgU29ydAorICAgICAgICAg U29ydCBLZXk6IGVtcHNhbGFyeS5lbXBubworICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGVtcHNh bGFyeQorKDUgcm93cykKKworLS0gVGhlIGZvbGxvd2luZyAzIHN0YXRlbWVudHMgc2hvdWxkIHJl c3VsdCB0aGUgc2FtZSByZXN1bHQuCitTRUxFQ1QgKiBGUk9NCisgIChTRUxFQ1QgZW1wbm8sCisg ICAgICAgICAgcm93X251bWJlcigpIE9WRVIgKE9SREVSIEJZIGVtcG5vKSBybgorICAgRlJPTSBl bXBzYWxhcnkpIGVtcAorV0hFUkUgcm4gPCAzOworIGVtcG5vIHwgcm4gCistLS0tLS0tKy0tLS0K KyAgICAgMSB8ICAxCisgICAgIDIgfCAgMgorKDIgcm93cykKKworU0VMRUNUICogRlJPTQorICAo U0VMRUNUIGVtcG5vLAorICAgICAgICAgIHJvd19udW1iZXIoKSBPVkVSIChPUkRFUiBCWSBlbXBu bykgcm4KKyAgIEZST00gZW1wc2FsYXJ5KSBlbXAKK1dIRVJFIDMgPiBybjsKKyBlbXBubyB8IHJu IAorLS0tLS0tLSstLS0tCisgICAgIDEgfCAgMQorICAgICAyIHwgIDIKKygyIHJvd3MpCisKK1NF TEVDVCAqIEZST00KKyAgKFNFTEVDVCBlbXBubywKKyAgICAgICAgICByb3dfbnVtYmVyKCkgT1ZF UiAoT1JERVIgQlkgZW1wbm8pIHJuCisgICBGUk9NIGVtcHNhbGFyeSkgZW1wCitXSEVSRSAyID49 IHJuOworIGVtcG5vIHwgcm4gCistLS0tLS0tKy0tLS0KKyAgICAgMSB8ICAxCisgICAgIDIgfCAg MgorKDIgcm93cykKKworLS0gRW5zdXJlIHIgPD0gMyBpcyBwdXNoZWQgZG93biBpbnRvIHRoZSBy dW4gY29uZGl0aW9uIG9mIHRoZSB3aW5kb3cgYWdnCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxF Q1QgKiBGUk9NCisgIChTRUxFQ1QgZW1wbm8sCisgICAgICAgICAgc2FsYXJ5LAorICAgICAgICAg IHJhbmsoKSBPVkVSIChPUkRFUiBCWSBzYWxhcnkgREVTQykgcgorICAgRlJPTSBlbXBzYWxhcnkp IGVtcAorV0hFUkUgciA8PSAzOworICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAg ICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgV2luZG93 QWdnCisgICBSdW4gQ29uZGl0aW9uOiAocmFuaygpIE9WRVIgKD8pIDw9IDMpCisgICAtPiAgU29y dAorICAgICAgICAgU29ydCBLZXk6IGVtcHNhbGFyeS5zYWxhcnkgREVTQworICAgICAgICAgLT4g IFNlcSBTY2FuIG9uIGVtcHNhbGFyeQorKDUgcm93cykKKworU0VMRUNUICogRlJPTQorICAoU0VM RUNUIGVtcG5vLAorICAgICAgICAgIHNhbGFyeSwKKyAgICAgICAgICByYW5rKCkgT1ZFUiAoT1JE RVIgQlkgc2FsYXJ5IERFU0MpIHIKKyAgIEZST00gZW1wc2FsYXJ5KSBlbXAKK1dIRVJFIHIgPD0g MzsKKyBlbXBubyB8IHNhbGFyeSB8IHIgCistLS0tLS0tKy0tLS0tLS0tKy0tLQorICAgICA4IHwg ICA2MDAwIHwgMQorICAgIDEwIHwgICA1MjAwIHwgMgorICAgIDExIHwgICA1MjAwIHwgMgorKDMg cm93cykKKworLS0gRW5zdXJlIGRyID0gMSBpcyBjb252ZXJ0ZWQgdG8gZHIgPD0gMSB0byBnZXQg YWxsIHJvd3MgbGVhZGluZyB1cCB0byBkciA9IDEKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVD VCAqIEZST00KKyAgKFNFTEVDVCBlbXBubywKKyAgICAgICAgICBzYWxhcnksCisgICAgICAgICAg ZGVuc2VfcmFuaygpIE9WRVIgKE9SREVSIEJZIHNhbGFyeSBERVNDKSBkcgorICAgRlJPTSBlbXBz YWxhcnkpIGVtcAorV0hFUkUgZHIgPSAxOworICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExB TiAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU3VicXVlcnkgU2NhbiBvbiBlbXAKKyAgIEZpbHRlcjog KGVtcC5kciA9IDEpCisgICAtPiAgV2luZG93QWdnCisgICAgICAgICBSdW4gQ29uZGl0aW9uOiAo ZGVuc2VfcmFuaygpIE9WRVIgKD8pIDw9IDEpCisgICAgICAgICAtPiAgU29ydAorICAgICAgICAg ICAgICAgU29ydCBLZXk6IGVtcHNhbGFyeS5zYWxhcnkgREVTQworICAgICAgICAgICAgICAgLT4g IFNlcSBTY2FuIG9uIGVtcHNhbGFyeQorKDcgcm93cykKKworU0VMRUNUICogRlJPTQorICAoU0VM RUNUIGVtcG5vLAorICAgICAgICAgIHNhbGFyeSwKKyAgICAgICAgICBkZW5zZV9yYW5rKCkgT1ZF UiAoT1JERVIgQlkgc2FsYXJ5IERFU0MpIGRyCisgICBGUk9NIGVtcHNhbGFyeSkgZW1wCitXSEVS RSBkciA9IDE7CisgZW1wbm8gfCBzYWxhcnkgfCBkciAKKy0tLS0tLS0rLS0tLS0tLS0rLS0tLQor ICAgICA4IHwgICA2MDAwIHwgIDEKKygxIHJvdykKKworLS0gQ2hlY2sgQ09VTlQoKSBhbmQgQ09V TlQoKikKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00KKyAgKFNFTEVDVCBlbXBu bywKKyAgICAgICAgICBzYWxhcnksCisgICAgICAgICAgY291bnQoKikgT1ZFUiAoT1JERVIgQlkg c2FsYXJ5IERFU0MpIGMKKyAgIEZST00gZW1wc2FsYXJ5KSBlbXAKK1dIRVJFIGMgPD0gMzsKKyAg ICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBXaW5kb3dBZ2cKKyAgIFJ1biBDb25kaXRp b246IChjb3VudCgqKSBPVkVSICg/KSA8PSAzKQorICAgLT4gIFNvcnQKKyAgICAgICAgIFNvcnQg S2V5OiBlbXBzYWxhcnkuc2FsYXJ5IERFU0MKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBlbXBz YWxhcnkKKyg1IHJvd3MpCisKK1NFTEVDVCAqIEZST00KKyAgKFNFTEVDVCBlbXBubywKKyAgICAg ICAgICBzYWxhcnksCisgICAgICAgICAgY291bnQoKikgT1ZFUiAoT1JERVIgQlkgc2FsYXJ5IERF U0MpIGMKKyAgIEZST00gZW1wc2FsYXJ5KSBlbXAKK1dIRVJFIGMgPD0gMzsKKyBlbXBubyB8IHNh bGFyeSB8IGMgCistLS0tLS0tKy0tLS0tLS0tKy0tLQorICAgICA4IHwgICA2MDAwIHwgMQorICAg IDEwIHwgICA1MjAwIHwgMworICAgIDExIHwgICA1MjAwIHwgMworKDMgcm93cykKKworRVhQTEFJ TiAoQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTQorICAoU0VMRUNUIGVtcG5vLAorICAgICAgICAg IHNhbGFyeSwKKyAgICAgICAgICBjb3VudChlbXBubykgT1ZFUiAoT1JERVIgQlkgc2FsYXJ5IERF U0MpIGMKKyAgIEZST00gZW1wc2FsYXJ5KSBlbXAKK1dIRVJFIGMgPD0gMzsKKyAgICAgICAgICAg ICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgV2luZG93 QWdnCisgICBSdW4gQ29uZGl0aW9uOiAoY291bnQoZW1wc2FsYXJ5LmVtcG5vKSBPVkVSICg/KSA8 PSAzKQorICAgLT4gIFNvcnQKKyAgICAgICAgIFNvcnQgS2V5OiBlbXBzYWxhcnkuc2FsYXJ5IERF U0MKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBlbXBzYWxhcnkKKyg1IHJvd3MpCisKK1NFTEVD VCAqIEZST00KKyAgKFNFTEVDVCBlbXBubywKKyAgICAgICAgICBzYWxhcnksCisgICAgICAgICAg Y291bnQoZW1wbm8pIE9WRVIgKE9SREVSIEJZIHNhbGFyeSBERVNDKSBjCisgICBGUk9NIGVtcHNh bGFyeSkgZW1wCitXSEVSRSBjIDw9IDM7CisgZW1wbm8gfCBzYWxhcnkgfCBjIAorLS0tLS0tLSst LS0tLS0tLSstLS0KKyAgICAgOCB8ICAgNjAwMCB8IDEKKyAgICAxMCB8ICAgNTIwMCB8IDMKKyAg ICAxMSB8ICAgNTIwMCB8IDMKKygzIHJvd3MpCisKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVD VCAqIEZST00KKyAgKFNFTEVDVCBlbXBubywKKyAgICAgICAgICBzYWxhcnksCisgICAgICAgICAg Y291bnQoKikgT1ZFUiAoT1JERVIgQlkgc2FsYXJ5IERFU0MgUk9XUyBCRVRXRUVOIENVUlJFTlQg Uk9XIEFORCBVTkJPVU5ERUQgRk9MTE9XSU5HKSBjCisgICBGUk9NIGVtcHNhbGFyeSkgZW1wCitX SEVSRSBjID49IDM7CisgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAg CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgV2luZG93QWdn CisgICBSdW4gQ29uZGl0aW9uOiAoY291bnQoKikgT1ZFUiAoPykgPj0gMykKKyAgIC0+ICBTb3J0 CisgICAgICAgICBTb3J0IEtleTogZW1wc2FsYXJ5LnNhbGFyeSBERVNDCisgICAgICAgICAtPiAg U2VxIFNjYW4gb24gZW1wc2FsYXJ5CisoNSByb3dzKQorCistLSBUZXN0cyB0byBlbnN1cmUgd2Ug ZG9uJ3QgcHVzaCBkb3duIHRoZSBydW4gY29uZGl0aW9uIHdoZW4gaXQncyBub3QgdmFsaWQgdG8K Ky0tIGRvIHNvLgorRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTQorICAoU0VMRUNU IGVtcG5vLAorICAgICAgICAgIHJvd19udW1iZXIoKSBPVkVSIChQQVJUSVRJT04gQlkgZGVwbmFt ZSBPUkRFUiBCWSBlbXBubykgcm4KKyAgIEZST00gZW1wc2FsYXJ5KSBlbXAKK1dIRVJFIHJuIDwg MzsKKyAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAg ICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgU3VicXVlcnkgU2NhbiBvbiBlbXAKKyAgIEZpbHRlcjogKGVtcC5ybiA8 IDMpCisgICAtPiAgV2luZG93QWdnCisgICAgICAgICAtPiAgU29ydAorICAgICAgICAgICAgICAg U29ydCBLZXk6IGVtcHNhbGFyeS5kZXBuYW1lLCBlbXBzYWxhcnkuZW1wbm8KKyAgICAgICAgICAg ICAgIC0+ICBTZXEgU2NhbiBvbiBlbXBzYWxhcnkKKyg2IHJvd3MpCisKK0VYUExBSU4gKENPU1RT IE9GRikKK1NFTEVDVCAqIEZST00KKyAgKFNFTEVDVCBlbXBubywKKyAgICAgICAgICBzYWxhcnks CisgICAgICAgICAgY291bnQoZW1wbm8pIE9WRVIgKFBBUlRJVElPTiBCWSBkZXBuYW1lIE9SREVS IEJZIHNhbGFyeSBERVNDKSBjCisgICBGUk9NIGVtcHNhbGFyeSkgZW1wCitXSEVSRSBjIDw9IDM7 CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFN1YnF1ZXJ5IFNjYW4gb24gZW1wCisgICBGaWx0ZXI6 IChlbXAuYyA8PSAzKQorICAgLT4gIFdpbmRvd0FnZworICAgICAgICAgLT4gIFNvcnQKKyAgICAg ICAgICAgICAgIFNvcnQgS2V5OiBlbXBzYWxhcnkuZGVwbmFtZSwgZW1wc2FsYXJ5LnNhbGFyeSBE RVNDCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gZW1wc2FsYXJ5CisoNiByb3dzKQor CitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NCisgIChTRUxFQ1QgZW1wbm8sCisg ICAgICAgICAgc2FsYXJ5LAorICAgICAgICAgIGNvdW50KCopIE9WRVIgKE9SREVSIEJZIHNhbGFy eSBERVNDIFJPV1MgQkVUV0VFTiBDVVJSRU5UIFJPVyBBTkQgVU5CT1VOREVEIEZPTExPV0lORykg YworICAgRlJPTSBlbXBzYWxhcnkpIGVtcAorV0hFUkUgYyA8PSAzOworICAgICAgICAgICAgICAg ICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU3VicXVlcnkgU2NhbiBvbiBlbXAKKyAgIEZpbHRl cjogKGVtcC5jIDw9IDMpCisgICAtPiAgV2luZG93QWdnCisgICAgICAgICAtPiAgU29ydAorICAg ICAgICAgICAgICAgU29ydCBLZXk6IGVtcHNhbGFyeS5zYWxhcnkgREVTQworICAgICAgICAgICAg ICAgLT4gIFNlcSBTY2FuIG9uIGVtcHNhbGFyeQorKDYgcm93cykKKworRVhQTEFJTiAoQ09TVFMg T0ZGKQorU0VMRUNUICogRlJPTQorICAoU0VMRUNUIGVtcG5vLAorICAgICAgICAgIHNhbGFyeSwK KyAgICAgICAgICBjb3VudCgqKSBPVkVSIChPUkRFUiBCWSBzYWxhcnkpIGMKKyAgIEZST00gZW1w c2FsYXJ5KSBlbXAKK1dIRVJFIDMgPD0gYzsKKyAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAg ICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgU3VicXVlcnkgU2NhbiBvbiBlbXAKKyAgIEZpbHRlcjogKDMgPD0gZW1wLmMpCisgICAtPiAg V2luZG93QWdnCisgICAgICAgICAtPiAgU29ydAorICAgICAgICAgICAgICAgU29ydCBLZXk6IGVt cHNhbGFyeS5zYWxhcnkKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBlbXBzYWxhcnkK Kyg2IHJvd3MpCisKIC0tIFRlc3QgU29ydCBub2RlIGNvbGxhcHNpbmcKIEVYUExBSU4gKENPU1RT IE9GRikKIFNFTEVDVCAqIEZST00KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3dp bmRvdy5zcWwgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC93aW5kb3cuc3FsCmluZGV4IGVhZTVmYTYw MTcuLjYzZjY2MDI5OWMgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3dpbmRvdy5z cWwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvd2luZG93LnNxbApAQCAtOTIyLDYgKzkyMiwx MzggQEAgU0VMRUNUICogRlJPTQogICAgRlJPTSBlbXBzYWxhcnkpIGVtcAogV0hFUkUgZGVwbmFt ZSA9ICdzYWxlcyc7CiAKKy0tIFRlc3Qgd2luZG93IGZ1bmN0aW9uIHJ1biBjb25kaXRpb25zIGFy ZSBwcm9wZXJseSBwdXNoZWQgZG93biBpbnRvIHRoZQorLS0gV2luZG93QWdnCitFWFBMQUlOIChD T1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NCisgIChTRUxFQ1QgZW1wbm8sCisgICAgICAgICAgcm93 X251bWJlcigpIE9WRVIgKE9SREVSIEJZIGVtcG5vKSBybgorICAgRlJPTSBlbXBzYWxhcnkpIGVt cAorV0hFUkUgcm4gPCAzOworCistLSBUaGUgZm9sbG93aW5nIDMgc3RhdGVtZW50cyBzaG91bGQg cmVzdWx0IHRoZSBzYW1lIHJlc3VsdC4KK1NFTEVDVCAqIEZST00KKyAgKFNFTEVDVCBlbXBubywK KyAgICAgICAgICByb3dfbnVtYmVyKCkgT1ZFUiAoT1JERVIgQlkgZW1wbm8pIHJuCisgICBGUk9N IGVtcHNhbGFyeSkgZW1wCitXSEVSRSBybiA8IDM7CisKK1NFTEVDVCAqIEZST00KKyAgKFNFTEVD VCBlbXBubywKKyAgICAgICAgICByb3dfbnVtYmVyKCkgT1ZFUiAoT1JERVIgQlkgZW1wbm8pIHJu CisgICBGUk9NIGVtcHNhbGFyeSkgZW1wCitXSEVSRSAzID4gcm47CisKK1NFTEVDVCAqIEZST00K KyAgKFNFTEVDVCBlbXBubywKKyAgICAgICAgICByb3dfbnVtYmVyKCkgT1ZFUiAoT1JERVIgQlkg ZW1wbm8pIHJuCisgICBGUk9NIGVtcHNhbGFyeSkgZW1wCitXSEVSRSAyID49IHJuOworCistLSBF bnN1cmUgciA8PSAzIGlzIHB1c2hlZCBkb3duIGludG8gdGhlIHJ1biBjb25kaXRpb24gb2YgdGhl IHdpbmRvdyBhZ2cKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00KKyAgKFNFTEVD VCBlbXBubywKKyAgICAgICAgICBzYWxhcnksCisgICAgICAgICAgcmFuaygpIE9WRVIgKE9SREVS IEJZIHNhbGFyeSBERVNDKSByCisgICBGUk9NIGVtcHNhbGFyeSkgZW1wCitXSEVSRSByIDw9IDM7 CisKK1NFTEVDVCAqIEZST00KKyAgKFNFTEVDVCBlbXBubywKKyAgICAgICAgICBzYWxhcnksCisg ICAgICAgICAgcmFuaygpIE9WRVIgKE9SREVSIEJZIHNhbGFyeSBERVNDKSByCisgICBGUk9NIGVt cHNhbGFyeSkgZW1wCitXSEVSRSByIDw9IDM7CisKKy0tIEVuc3VyZSBkciA9IDEgaXMgY29udmVy dGVkIHRvIGRyIDw9IDEgdG8gZ2V0IGFsbCByb3dzIGxlYWRpbmcgdXAgdG8gZHIgPSAxCitFWFBM QUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NCisgIChTRUxFQ1QgZW1wbm8sCisgICAgICAg ICAgc2FsYXJ5LAorICAgICAgICAgIGRlbnNlX3JhbmsoKSBPVkVSIChPUkRFUiBCWSBzYWxhcnkg REVTQykgZHIKKyAgIEZST00gZW1wc2FsYXJ5KSBlbXAKK1dIRVJFIGRyID0gMTsKKworU0VMRUNU ICogRlJPTQorICAoU0VMRUNUIGVtcG5vLAorICAgICAgICAgIHNhbGFyeSwKKyAgICAgICAgICBk ZW5zZV9yYW5rKCkgT1ZFUiAoT1JERVIgQlkgc2FsYXJ5IERFU0MpIGRyCisgICBGUk9NIGVtcHNh bGFyeSkgZW1wCitXSEVSRSBkciA9IDE7CisKKy0tIENoZWNrIENPVU5UKCkgYW5kIENPVU5UKCop CitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NCisgIChTRUxFQ1QgZW1wbm8sCisg ICAgICAgICAgc2FsYXJ5LAorICAgICAgICAgIGNvdW50KCopIE9WRVIgKE9SREVSIEJZIHNhbGFy eSBERVNDKSBjCisgICBGUk9NIGVtcHNhbGFyeSkgZW1wCitXSEVSRSBjIDw9IDM7CisKK1NFTEVD VCAqIEZST00KKyAgKFNFTEVDVCBlbXBubywKKyAgICAgICAgICBzYWxhcnksCisgICAgICAgICAg Y291bnQoKikgT1ZFUiAoT1JERVIgQlkgc2FsYXJ5IERFU0MpIGMKKyAgIEZST00gZW1wc2FsYXJ5 KSBlbXAKK1dIRVJFIGMgPD0gMzsKKworRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUICogRlJP TQorICAoU0VMRUNUIGVtcG5vLAorICAgICAgICAgIHNhbGFyeSwKKyAgICAgICAgICBjb3VudChl bXBubykgT1ZFUiAoT1JERVIgQlkgc2FsYXJ5IERFU0MpIGMKKyAgIEZST00gZW1wc2FsYXJ5KSBl bXAKK1dIRVJFIGMgPD0gMzsKKworU0VMRUNUICogRlJPTQorICAoU0VMRUNUIGVtcG5vLAorICAg ICAgICAgIHNhbGFyeSwKKyAgICAgICAgICBjb3VudChlbXBubykgT1ZFUiAoT1JERVIgQlkgc2Fs YXJ5IERFU0MpIGMKKyAgIEZST00gZW1wc2FsYXJ5KSBlbXAKK1dIRVJFIGMgPD0gMzsKKworRVhQ TEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTQorICAoU0VMRUNUIGVtcG5vLAorICAgICAg ICAgIHNhbGFyeSwKKyAgICAgICAgICBjb3VudCgqKSBPVkVSIChPUkRFUiBCWSBzYWxhcnkgREVT QyBST1dTIEJFVFdFRU4gQ1VSUkVOVCBST1cgQU5EIFVOQk9VTkRFRCBGT0xMT1dJTkcpIGMKKyAg IEZST00gZW1wc2FsYXJ5KSBlbXAKK1dIRVJFIGMgPj0gMzsKKworLS0gVGVzdHMgdG8gZW5zdXJl IHdlIGRvbid0IHB1c2ggZG93biB0aGUgcnVuIGNvbmRpdGlvbiB3aGVuIGl0J3Mgbm90IHZhbGlk IHRvCistLSBkbyBzby4KK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00KKyAgKFNF TEVDVCBlbXBubywKKyAgICAgICAgICByb3dfbnVtYmVyKCkgT1ZFUiAoUEFSVElUSU9OIEJZIGRl cG5hbWUgT1JERVIgQlkgZW1wbm8pIHJuCisgICBGUk9NIGVtcHNhbGFyeSkgZW1wCitXSEVSRSBy biA8IDM7CisKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00KKyAgKFNFTEVDVCBl bXBubywKKyAgICAgICAgICBzYWxhcnksCisgICAgICAgICAgY291bnQoZW1wbm8pIE9WRVIgKFBB UlRJVElPTiBCWSBkZXBuYW1lIE9SREVSIEJZIHNhbGFyeSBERVNDKSBjCisgICBGUk9NIGVtcHNh bGFyeSkgZW1wCitXSEVSRSBjIDw9IDM7CisKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCAq IEZST00KKyAgKFNFTEVDVCBlbXBubywKKyAgICAgICAgICBzYWxhcnksCisgICAgICAgICAgY291 bnQoKikgT1ZFUiAoT1JERVIgQlkgc2FsYXJ5IERFU0MgUk9XUyBCRVRXRUVOIENVUlJFTlQgUk9X IEFORCBVTkJPVU5ERUQgRk9MTE9XSU5HKSBjCisgICBGUk9NIGVtcHNhbGFyeSkgZW1wCitXSEVS RSBjIDw9IDM7CisKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00KKyAgKFNFTEVD VCBlbXBubywKKyAgICAgICAgICBzYWxhcnksCisgICAgICAgICAgY291bnQoKikgT1ZFUiAoT1JE RVIgQlkgc2FsYXJ5KSBjCisgICBGUk9NIGVtcHNhbGFyeSkgZW1wCitXSEVSRSAzIDw9IGM7CisK IC0tIFRlc3QgU29ydCBub2RlIGNvbGxhcHNpbmcKIEVYUExBSU4gKENPU1RTIE9GRikKIFNFTEVD VCAqIEZST00KLS0gCjIuMzAuMgoK --0000000000005b277305c60c3a88--