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 1mdVj4-00039P-CE for pgsql-hackers@arkaria.postgresql.org; Thu, 21 Oct 2021 10:55:11 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1mdVj3-0007Dr-6a for pgsql-hackers@arkaria.postgresql.org; Thu, 21 Oct 2021 10:55:09 +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 1mdVj2-0007Dg-Oh for pgsql-hackers@lists.postgresql.org; Thu, 21 Oct 2021 10:55:08 +0000 Received: from mail.postgrespro.ru ([93.174.131.139]) by magus.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1mdViz-0003Hx-6U for pgsql-hackers@postgresql.org; Thu, 21 Oct 2021 10:55:08 +0000 Received: from mail.postgrespro.ru (cyclops.postgrespro.ru [93.174.131.138]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client did not present a certificate) by mail.postgrespro.ru (Postfix) with ESMTPSA id 1C5D021C37C7; Thu, 21 Oct 2021 13:55:04 +0300 (MSK) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=postgrespro.ru; s=mail; t=1634813704; bh=aRVXwVW0P9MqoEC2nndaA5sojWZcDakCMSgJC37Bj6I=; h=Date:From:To:Cc:Subject:In-Reply-To:References; b=DGOAFv1te0BAbQYiUsFFM8lSKGq6Ug4SK9Be9v4k7EXE5J8yM2TxwvN7OT+8m9hV9 5mD3pLslq97sOWLeUcOwsB/+zq/9eZaW6sYwpoiT046mMeh5/yFB2cEQbMjZe5XRqD jobJYx8pciuM3Xf7sDxDdeW+ED1p3PSrFncHh+Ig= MIME-Version: 1.0 Date: Thu, 21 Oct 2021 13:55:04 +0300 From: Alexander Pyhalov To: Tomas Vondra Cc: pgsql-hackers@postgresql.org Subject: Re: Partial aggregates pushdown In-Reply-To: <504e576d-984f-d73c-2694-8ee9624f8def@enterprisedb.com> References: <2486a6db3f068efb97c1277c23402e0d@postgrespro.ru> <504e576d-984f-d73c-2694-8ee9624f8def@enterprisedb.com> User-Agent: Roundcube Webmail/1.4.11 Message-ID: <07fa4d5a56f402732acfce25e7207cae@postgrespro.ru> X-Sender: a.pyhalov@postgrespro.ru Content-Type: multipart/mixed; boundary="=_465e830084efd1ca219f1bad544ab3db" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --=_465e830084efd1ca219f1bad544ab3db Content-Transfer-Encoding: 8bit Content-Type: text/plain; charset=UTF-8; format=flowed Tomas Vondra писал 2021-10-19 16:25: > On 10/19/21 08:56, Alexander Pyhalov wrote: >> Hi. >> >> Tomas Vondra писал 2021-10-15 17:56: >>> As for the proposed approach, it's probably good enough for the first >>> version to restrict this to aggregates where the aggregate result is >>> sufficient, i.e. we don't need any new export/import procedures. >>> >>> But it's very unlikely we'd want to restrict it the way the patch >>> does >>> it, i.e. based on aggregate name. That's both fragile (people can >>> create new aggregates with such name) and against the PostgreSQL >>> extensibility (people may implement custom aggregates, but won't be >>> able to benefit from this just because of name). >>> >>> So for v0 maybe, but I think there neeeds to be a way to relax this >>> in >>> some way, for example we could add a new flag to pg_aggregate to mark >>> aggregates supporting this. >>> >> >> Updated patch to mark aggregates as pushdown-safe in pg_aggregates. >> >> So far have no solution for aggregates with internal aggtranstype. Hi. Updated patch. Now aggregates with internal states can be pushed down, if they are marked as pushdown safe (this flag is set to true for min/max/sum), have internal states and associated converters. Converters are called locally, they transform aggregate result to serialized internal representation. As converters don't have access to internal aggregate state, partial aggregates like avg() are still not pushable. For now the overall logic is quite simple. We now also call add_foreign_grouping_paths() for partial aggregation. In foreign_expr_walker() we check if aggregate is pushable (which means that it is simple, marked as pushable and if has 'internal' as aggtranstype, has associated converter). If it is pushable, we proceed as with usual aggregates (but forbid having pushdown). During postgresGetForeignPlan() we produce list of converters for aggregates. As converters has different input argument type from their result (bytea), we have to generate alternative metadata, which is used by make_tuple_from_result_row(). If make_tuple_from_result_row() encounters field with converter, it calls converter and returns result. For now we expect converter to have only one input and output argument. Existing converters just transform input value to internal representation and return its serialized form. -- Best regards, Alexander Pyhalov, Postgres Professional --=_465e830084efd1ca219f1bad544ab3db Content-Transfer-Encoding: base64 Content-Type: text/x-diff; name=0001-Partial-aggregates-push-down-v03.patch Content-Disposition: attachment; filename=0001-Partial-aggregates-push-down-v03.patch; size=59230 RnJvbSA1MmNkNjFmZGI1Y2I1ZmNlZWFjZDgzMjQ2MjQ2OGQ4Njc2ZjU3Y2E2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbGV4YW5kZXIgUHloYWxvdiA8YS5weWhhbG92QHBvc3RncmVz cHJvLnJ1PgpEYXRlOiBUaHUsIDE0IE9jdCAyMDIxIDE3OjMwOjM0ICswMzAwClN1YmplY3Q6IFtQ QVRDSF0gUGFydGlhbCBhZ2dyZWdhdGVzIHB1c2ggZG93bgoKLS0tCiBjb250cmliL3Bvc3RncmVz X2Zkdy9kZXBhcnNlLmMgICAgICAgICAgICAgICAgfCAgNDkgKysrKy0KIC4uLi9wb3N0Z3Jlc19m ZHcvZXhwZWN0ZWQvcG9zdGdyZXNfZmR3Lm91dCAgICB8IDE4NSArKysrKysrKysrKysrKysrLQog Y29udHJpYi9wb3N0Z3Jlc19mZHcvcG9zdGdyZXNfZmR3LmMgICAgICAgICAgIHwgMTk1ICsrKysr KysrKysrKysrKysrLQogY29udHJpYi9wb3N0Z3Jlc19mZHcvc3FsL3Bvc3RncmVzX2Zkdy5zcWwg ICAgIHwgIDI3ICsrLQogc3JjL2JhY2tlbmQvY2F0YWxvZy9wZ19hZ2dyZWdhdGUuYyAgICAgICAg ICAgIHwgIDI4ICsrLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvYWdncmVnYXRlY21kcy5jICAgICAg ICAgIHwgIDIzICsrLQogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L251bWVyaWMuYyAgICAgICAgICAg ICAgIHwgIDk2ICsrKysrKysrKwogc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYyAgICAgICAgICAg ICAgICAgICAgIHwgIDIxICstCiBzcmMvaW5jbHVkZS9jYXRhbG9nL2NhdHZlcnNpb24uaCAgICAg ICAgICAgICAgfCAgIDIgKy0KIHNyYy9pbmNsdWRlL2NhdGFsb2cvcGdfYWdncmVnYXRlLmRhdCAg ICAgICAgICB8IDEwNiArKysrKy0tLS0tCiBzcmMvaW5jbHVkZS9jYXRhbG9nL3BnX2FnZ3JlZ2F0 ZS5oICAgICAgICAgICAgfCAgMTAgKy0KIHNyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQg ICAgICAgICAgICAgICB8ICAgNiArCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL29pZGpvaW5z Lm91dCAgICAgICAgfCAgIDEgKwogMTMgZmlsZXMgY2hhbmdlZCwgNjY2IGluc2VydGlvbnMoKyks IDgzIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcG9zdGdyZXNfZmR3L2RlcGFy c2UuYyBiL2NvbnRyaWIvcG9zdGdyZXNfZmR3L2RlcGFyc2UuYwppbmRleCBkOThiZDY2NjgxOC4u NTBlZjEwMDliOTcgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvcG9zdGdyZXNfZmR3L2RlcGFyc2UuYwor KysgYi9jb250cmliL3Bvc3RncmVzX2Zkdy9kZXBhcnNlLmMKQEAgLTE5Niw2ICsxOTYsNyBAQCBz dGF0aWMgYm9vbCBpc19zdWJxdWVyeV92YXIoVmFyICpub2RlLCBSZWxPcHRJbmZvICpmb3JlaWdu cmVsLAogc3RhdGljIHZvaWQgZ2V0X3JlbGF0aW9uX2NvbHVtbl9hbGlhc19pZHMoVmFyICpub2Rl LCBSZWxPcHRJbmZvICpmb3JlaWducmVsLAogCQkJCQkJCQkJCSAgaW50ICpyZWxubywgaW50ICpj b2xubyk7CiAKK3N0YXRpYyBib29sIHBhcnRpYWxfYWdnX29rKEFnZ3JlZiAqYWdnKTsKIAogLyoK ICAqIEV4YW1pbmUgZWFjaCBxdWFsIGNsYXVzZSBpbiBpbnB1dF9jb25kcywgYW5kIGNsYXNzaWZ5 IHRoZW0gaW50byB0d28gZ3JvdXBzLApAQCAtODMxLDggKzgzMiwxMCBAQCBmb3JlaWduX2V4cHJf d2Fsa2VyKE5vZGUgKm5vZGUsCiAJCQkJaWYgKCFJU19VUFBFUl9SRUwoZ2xvYl9jeHQtPmZvcmVp Z25yZWwpKQogCQkJCQlyZXR1cm4gZmFsc2U7CiAKLQkJCQkvKiBPbmx5IG5vbi1zcGxpdCBhZ2dy ZWdhdGVzIGFyZSBwdXNoYWJsZS4gKi8KLQkJCQlpZiAoYWdnLT5hZ2dzcGxpdCAhPSBBR0dTUExJ VF9TSU1QTEUpCisJCQkJaWYgKChhZ2ctPmFnZ3NwbGl0ICE9IEFHR1NQTElUX1NJTVBMRSkgJiYg KGFnZy0+YWdnc3BsaXQgIT0gQUdHU1BMSVRfSU5JVElBTF9TRVJJQUwpKQorCQkJCQlyZXR1cm4g ZmFsc2U7CisKKwkJCQlpZiAoYWdnLT5hZ2dzcGxpdCA9PSBBR0dTUExJVF9JTklUSUFMX1NFUklB TCAmJiAhcGFydGlhbF9hZ2dfb2soYWdnKSkKIAkJCQkJcmV0dXJuIGZhbHNlOwogCiAJCQkJLyog QXMgdXN1YWwsIGl0IG11c3QgYmUgc2hpcHBhYmxlLiAqLwpAQCAtMzI0OSw3ICszMjUyLDcgQEAg ZGVwYXJzZUFnZ3JlZihBZ2dyZWYgKm5vZGUsIGRlcGFyc2VfZXhwcl9jeHQgKmNvbnRleHQpCiAJ Ym9vbAkJdXNlX3ZhcmlhZGljOwogCiAJLyogT25seSBiYXNpYywgbm9uLXNwbGl0IGFnZ3JlZ2F0 aW9uIGFjY2VwdGVkLiAqLwotCUFzc2VydChub2RlLT5hZ2dzcGxpdCA9PSBBR0dTUExJVF9TSU1Q TEUpOworCUFzc2VydChub2RlLT5hZ2dzcGxpdCA9PSBBR0dTUExJVF9TSU1QTEUgfHwgbm9kZS0+ YWdnc3BsaXQgPT0gQUdHU1BMSVRfSU5JVElBTF9TRVJJQUwpOwogCiAJLyogQ2hlY2sgaWYgbmVl ZCB0byBwcmludCBWQVJJQURJQyAoY2YuIHJ1bGV1dGlscy5jKSAqLwogCXVzZV92YXJpYWRpYyA9 IG5vZGUtPmFnZ3ZhcmlhZGljOwpAQCAtMzcxOSwzICszNzIyLDQzIEBAIGdldF9yZWxhdGlvbl9j b2x1bW5fYWxpYXNfaWRzKFZhciAqbm9kZSwgUmVsT3B0SW5mbyAqZm9yZWlnbnJlbCwKIAkvKiBT aG91bGRuJ3QgZ2V0IGhlcmUgKi8KIAllbG9nKEVSUk9SLCAidW5leHBlY3RlZCBleHByZXNzaW9u IGluIHN1YnF1ZXJ5IG91dHB1dCIpOwogfQorCisvKgorICogQ2hlY2sgdGhhdCBwYXJ0aWFsIGFn Z3JlZ2F0ZSBhZ2cgaXMgZmluZSB0byBwdXNoIGRvd24KKyAqLworc3RhdGljIGJvb2wKK3BhcnRp YWxfYWdnX29rKEFnZ3JlZiAqYWdnKQoreworCUhlYXBUdXBsZQlhZ2d0dXA7CisJRm9ybV9wZ19h Z2dyZWdhdGUgYWdnZm9ybTsKKwlib29sCQlvayA9IHRydWU7CisKKwlBc3NlcnQoYWdnLT5hZ2dz cGxpdCA9PSBBR0dTUExJVF9JTklUSUFMX1NFUklBTCk7CisKKwkvKiBXZSBkb24ndCBzdXBwb3J0 IGNvbXBsZXggcGFydGlhbCBhZ2dyZWdhdGVzICovCisJaWYgKGFnZy0+YWdnZGlzdGluY3QgfHwg YWdnLT5hZ2d2YXJpYWRpYyB8fCBhZ2ctPmFnZ2tpbmQgIT0gQUdHS0lORF9OT1JNQUwgfHwgYWdn LT5hZ2dvcmRlciAhPSBOSUwpCisJCW9rID0gZmFsc2U7CisKKwlpZiAob2spCisJeworCQlhZ2d0 dXAgPSBTZWFyY2hTeXNDYWNoZTEoQUdHRk5PSUQsIE9iamVjdElkR2V0RGF0dW0oYWdnLT5hZ2dm bm9pZCkpOworCQlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoYWdndHVwKSkKKwkJCWVsb2coRVJST1Is ICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBmdW5jdGlvbiAldSIsIGFnZy0+YWdnZm5vaWQpOwor CQlhZ2dmb3JtID0gKEZvcm1fcGdfYWdncmVnYXRlKSBHRVRTVFJVQ1QoYWdndHVwKTsKKworCQkv KiBPbmx5IGFnZ3JlZ2F0ZXMsIG1hcmtlZCBhcyBwdXNoZG93biBzYWZlLCBhcmUgYWxsb3dlZCAq LworCQlpZiAoYWdnZm9ybS0+YWdncGFydGlhbHB1c2hkb3duc2FmZSAhPSB0cnVlKQorCQkJb2sg PSBmYWxzZTsKKworCQkvKgorCQkgKiBCdXQgaWYgYW4gYWdncmVnYXRlIHJlcXVpcmVzIHNlcmlh bGl6YXRpb24vZGVzZXJpYWxpemF0aW9uLCBwYXJ0aWFsCisJCSAqIGNvbnZlcnRlciBzaG91bGQg YmUgZGVmaW5lZAorCQkgKi8KKwkJaWYgKG9rICYmIGFnZy0+YWdndHJhbnN0eXBlID09IElOVEVS TkFMT0lEKQorCQkJb2sgPSAoYWdnZm9ybS0+YWdncGFydGlhbGNvbnZlcnRlcmZuICE9IEludmFs aWRPaWQpOworCisJCVJlbGVhc2VTeXNDYWNoZShhZ2d0dXApOworCX0KKworCXJldHVybiBvazsK K30KZGlmZiAtLWdpdCBhL2NvbnRyaWIvcG9zdGdyZXNfZmR3L2V4cGVjdGVkL3Bvc3RncmVzX2Zk dy5vdXQgYi9jb250cmliL3Bvc3RncmVzX2Zkdy9leHBlY3RlZC9wb3N0Z3Jlc19mZHcub3V0Cmlu ZGV4IDQ0YzQzNjdiOGY5Li4zZTFiOTk3ODc1ZSAxMDA2NDQKLS0tIGEvY29udHJpYi9wb3N0Z3Jl c19mZHcvZXhwZWN0ZWQvcG9zdGdyZXNfZmR3Lm91dAorKysgYi9jb250cmliL3Bvc3RncmVzX2Zk dy9leHBlY3RlZC9wb3N0Z3Jlc19mZHcub3V0CkBAIC05Mjc5LDEzICs5Mjc5LDEzIEBAIFJFU0VU IGVuYWJsZV9wYXJ0aXRpb253aXNlX2pvaW47CiAtLSA9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAtLSB0ZXN0IHBhcnRp dGlvbndpc2UgYWdncmVnYXRlcwogLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotQ1JFQVRFIFRBQkxFIHBhZ2dfdGFi IChhIGludCwgYiBpbnQsIGMgdGV4dCkgUEFSVElUSU9OIEJZIFJBTkdFKGEpOworQ1JFQVRFIFRB QkxFIHBhZ2dfdGFiIChhIGludCwgYiBpbnQsIGMgdGV4dCwgZCBudW1lcmljKSBQQVJUSVRJT04g QlkgUkFOR0UoYSk7CiBDUkVBVEUgVEFCTEUgcGFnZ190YWJfcDEgKExJS0UgcGFnZ190YWIpOwog Q1JFQVRFIFRBQkxFIHBhZ2dfdGFiX3AyIChMSUtFIHBhZ2dfdGFiKTsKIENSRUFURSBUQUJMRSBw YWdnX3RhYl9wMyAoTElLRSBwYWdnX3RhYik7Ci1JTlNFUlQgSU5UTyBwYWdnX3RhYl9wMSBTRUxF Q1QgaSAlIDMwLCBpICUgNTAsIHRvX2NoYXIoaS8zMCwgJ0ZNMDAwMCcpIEZST00gZ2VuZXJhdGVf c2VyaWVzKDEsIDMwMDApIGkgV0hFUkUgKGkgJSAzMCkgPCAxMDsKLUlOU0VSVCBJTlRPIHBhZ2df dGFiX3AyIFNFTEVDVCBpICUgMzAsIGkgJSA1MCwgdG9fY2hhcihpLzMwLCAnRk0wMDAwJykgRlJP TSBnZW5lcmF0ZV9zZXJpZXMoMSwgMzAwMCkgaSBXSEVSRSAoaSAlIDMwKSA8IDIwIGFuZCAoaSAl IDMwKSA+PSAxMDsKLUlOU0VSVCBJTlRPIHBhZ2dfdGFiX3AzIFNFTEVDVCBpICUgMzAsIGkgJSA1 MCwgdG9fY2hhcihpLzMwLCAnRk0wMDAwJykgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgMzAwMCkg aSBXSEVSRSAoaSAlIDMwKSA8IDMwIGFuZCAoaSAlIDMwKSA+PSAyMDsKK0lOU0VSVCBJTlRPIHBh Z2dfdGFiX3AxIFNFTEVDVCBpICUgMzAsIGkgJSA1MCwgdG9fY2hhcihpLzMwLCAnRk0wMDAwJyks IGkgJSA0MCBGUk9NIGdlbmVyYXRlX3NlcmllcygxLCAzMDAwKSBpIFdIRVJFIChpICUgMzApIDwg MTA7CitJTlNFUlQgSU5UTyBwYWdnX3RhYl9wMiBTRUxFQ1QgaSAlIDMwLCBpICUgNTAsIHRvX2No YXIoaS8zMCwgJ0ZNMDAwMCcpLCBpICUgNDAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgMzAwMCkg aSBXSEVSRSAoaSAlIDMwKSA8IDIwIGFuZCAoaSAlIDMwKSA+PSAxMDsKK0lOU0VSVCBJTlRPIHBh Z2dfdGFiX3AzIFNFTEVDVCBpICUgMzAsIGkgJSA1MCwgdG9fY2hhcihpLzMwLCAnRk0wMDAwJyks IGkgJSA0MCBGUk9NIGdlbmVyYXRlX3NlcmllcygxLCAzMDAwKSBpIFdIRVJFIChpICUgMzApIDwg MzAgYW5kIChpICUgMzApID49IDIwOwogLS0gQ3JlYXRlIGZvcmVpZ24gcGFydGl0aW9ucwogQ1JF QVRFIEZPUkVJR04gVEFCTEUgZnBhZ2dfdGFiX3AxIFBBUlRJVElPTiBPRiBwYWdnX3RhYiBGT1Ig VkFMVUVTIEZST00gKDApIFRPICgxMCkgU0VSVkVSIGxvb3BiYWNrIE9QVElPTlMgKHRhYmxlX25h bWUgJ3BhZ2dfdGFiX3AxJyk7CiBDUkVBVEUgRk9SRUlHTiBUQUJMRSBmcGFnZ190YWJfcDIgUEFS VElUSU9OIE9GIHBhZ2dfdGFiIEZPUiBWQUxVRVMgRlJPTSAoMTApIFRPICgyMCkgU0VSVkVSIGxv b3BiYWNrIE9QVElPTlMgKHRhYmxlX25hbWUgJ3BhZ2dfdGFiX3AyJyk7CkBAIC05MzQ0LDggKzkz NDQsOCBAQCBTRUxFQ1QgYSwgc3VtKGIpLCBtaW4oYiksIGNvdW50KCopIEZST00gcGFnZ190YWIg R1JPVVAgQlkgYSBIQVZJTkcgYXZnKGIpIDwgMjIgTwogLS0gU2hvdWxkIGhhdmUgYWxsIHRoZSBj b2x1bW5zIGluIHRoZSB0YXJnZXQgbGlzdCBmb3IgdGhlIGdpdmVuIHJlbGF0aW9uCiBFWFBMQUlO IChWRVJCT1NFLCBDT1NUUyBPRkYpCiBTRUxFQ1QgYSwgY291bnQodDEpIEZST00gcGFnZ190YWIg dDEgR1JPVVAgQlkgYSBIQVZJTkcgYXZnKGIpIDwgMjIgT1JERVIgQlkgMTsKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFV RVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQogIFNvcnQKICAgIE91dHB1dDogdDEuYSwgKGNvdW50KCgodDEuKik6OnBhZ2dfdGFiKSkp CiAgICBTb3J0IEtleTogdDEuYQpAQCAtOTM1NiwyMSArOTM1NiwyMSBAQCBTRUxFQ1QgYSwgY291 bnQodDEpIEZST00gcGFnZ190YWIgdDEgR1JPVVAgQlkgYSBIQVZJTkcgYXZnKGIpIDwgMjIgT1JE RVIgQlkgMTsKICAgICAgICAgICAgICAgIEZpbHRlcjogKGF2Zyh0MS5iKSA8ICcyMic6Om51bWVy aWMpCiAgICAgICAgICAgICAgICAtPiAgRm9yZWlnbiBTY2FuIG9uIHB1YmxpYy5mcGFnZ190YWJf cDEgdDEKICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDEuYSwgdDEuKiwgdDEuYgotICAg ICAgICAgICAgICAgICAgICAgUmVtb3RlIFNRTDogU0VMRUNUIGEsIGIsIGMgRlJPTSBwdWJsaWMu cGFnZ190YWJfcDEKKyAgICAgICAgICAgICAgICAgICAgIFJlbW90ZSBTUUw6IFNFTEVDVCBhLCBi LCBjLCBkIEZST00gcHVibGljLnBhZ2dfdGFiX3AxCiAgICAgICAgICAtPiAgSGFzaEFnZ3JlZ2F0 ZQogICAgICAgICAgICAgICAgT3V0cHV0OiB0MV8xLmEsIGNvdW50KCgodDFfMS4qKTo6cGFnZ190 YWIpKQogICAgICAgICAgICAgICAgR3JvdXAgS2V5OiB0MV8xLmEKICAgICAgICAgICAgICAgIEZp bHRlcjogKGF2Zyh0MV8xLmIpIDwgJzIyJzo6bnVtZXJpYykKICAgICAgICAgICAgICAgIC0+ICBG b3JlaWduIFNjYW4gb24gcHVibGljLmZwYWdnX3RhYl9wMiB0MV8xCiAgICAgICAgICAgICAgICAg ICAgICBPdXRwdXQ6IHQxXzEuYSwgdDFfMS4qLCB0MV8xLmIKLSAgICAgICAgICAgICAgICAgICAg IFJlbW90ZSBTUUw6IFNFTEVDVCBhLCBiLCBjIEZST00gcHVibGljLnBhZ2dfdGFiX3AyCisgICAg ICAgICAgICAgICAgICAgICBSZW1vdGUgU1FMOiBTRUxFQ1QgYSwgYiwgYywgZCBGUk9NIHB1Ymxp Yy5wYWdnX3RhYl9wMgogICAgICAgICAgLT4gIEhhc2hBZ2dyZWdhdGUKICAgICAgICAgICAgICAg IE91dHB1dDogdDFfMi5hLCBjb3VudCgoKHQxXzIuKik6OnBhZ2dfdGFiKSkKICAgICAgICAgICAg ICAgIEdyb3VwIEtleTogdDFfMi5hCiAgICAgICAgICAgICAgICBGaWx0ZXI6IChhdmcodDFfMi5i KSA8ICcyMic6Om51bWVyaWMpCiAgICAgICAgICAgICAgICAtPiAgRm9yZWlnbiBTY2FuIG9uIHB1 YmxpYy5mcGFnZ190YWJfcDMgdDFfMgogICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MV8y LmEsIHQxXzIuKiwgdDFfMi5iCi0gICAgICAgICAgICAgICAgICAgICBSZW1vdGUgU1FMOiBTRUxF Q1QgYSwgYiwgYyBGUk9NIHB1YmxpYy5wYWdnX3RhYl9wMworICAgICAgICAgICAgICAgICAgICAg UmVtb3RlIFNRTDogU0VMRUNUIGEsIGIsIGMsIGQgRlJPTSBwdWJsaWMucGFnZ190YWJfcDMKICgy NSByb3dzKQogCiBTRUxFQ1QgYSwgY291bnQodDEpIEZST00gcGFnZ190YWIgdDEgR1JPVVAgQlkg YSBIQVZJTkcgYXZnKGIpIDwgMjIgT1JERVIgQlkgMTsKQEAgLTk0MDYsNiArOTQwNiwxNzMgQEAg U0VMRUNUIGIsIGF2ZyhhKSwgbWF4KGEpLCBjb3VudCgqKSBGUk9NIHBhZ2dfdGFiIEdST1VQIEJZ IGIgSEFWSU5HIHN1bShhKSA8IDcwMAogICAgICAgICAgICAgICAgICAgICAgLT4gIEZvcmVpZ24g U2NhbiBvbiBmcGFnZ190YWJfcDMgcGFnZ190YWJfMgogKDE1IHJvd3MpCiAKKy0tIEl0J3MgdW5z YWZlIHRvIHB1c2ggZG93biBoYXZpbmcgY2xhdXNlIHdoZW4gdGhlcmUgYXJlIHBhcnRpYWwgYWdn cmVnYXRlcworRVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKQorU0VMRUNUIGIsIG1heChhKSwg Y291bnQoKikgRlJPTSBwYWdnX3RhYiBHUk9VUCBCWSBiIEhBVklORyBzdW0oYSkgPCA3MDAgT1JE RVIgQlkgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgU29ydAorICAgT3V0cHV0OiBwYWdnX3RhYi5iLCAobWF4KHBhZ2dfdGFi LmEpKSwgKGNvdW50KCopKQorICAgU29ydCBLZXk6IHBhZ2dfdGFiLmIKKyAgIC0+ICBGaW5hbGl6 ZSBIYXNoQWdncmVnYXRlCisgICAgICAgICBPdXRwdXQ6IHBhZ2dfdGFiLmIsIG1heChwYWdnX3Rh Yi5hKSwgY291bnQoKikKKyAgICAgICAgIEdyb3VwIEtleTogcGFnZ190YWIuYgorICAgICAgICAg RmlsdGVyOiAoc3VtKHBhZ2dfdGFiLmEpIDwgNzAwKQorICAgICAgICAgLT4gIEFwcGVuZAorICAg ICAgICAgICAgICAgLT4gIFBhcnRpYWwgSGFzaEFnZ3JlZ2F0ZQorICAgICAgICAgICAgICAgICAg ICAgT3V0cHV0OiBwYWdnX3RhYi5iLCBQQVJUSUFMIG1heChwYWdnX3RhYi5hKSwgUEFSVElBTCBj b3VudCgqKSwgUEFSVElBTCBzdW0ocGFnZ190YWIuYSkKKyAgICAgICAgICAgICAgICAgICAgIEdy b3VwIEtleTogcGFnZ190YWIuYgorICAgICAgICAgICAgICAgICAgICAgLT4gIEZvcmVpZ24gU2Nh biBvbiBwdWJsaWMuZnBhZ2dfdGFiX3AxIHBhZ2dfdGFiCisgICAgICAgICAgICAgICAgICAgICAg ICAgICBPdXRwdXQ6IHBhZ2dfdGFiLmIsIHBhZ2dfdGFiLmEKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgIFJlbW90ZSBTUUw6IFNFTEVDVCBhLCBiIEZST00gcHVibGljLnBhZ2dfdGFiX3AxCisg ICAgICAgICAgICAgICAtPiAgUGFydGlhbCBIYXNoQWdncmVnYXRlCisgICAgICAgICAgICAgICAg ICAgICBPdXRwdXQ6IHBhZ2dfdGFiXzEuYiwgUEFSVElBTCBtYXgocGFnZ190YWJfMS5hKSwgUEFS VElBTCBjb3VudCgqKSwgUEFSVElBTCBzdW0ocGFnZ190YWJfMS5hKQorICAgICAgICAgICAgICAg ICAgICAgR3JvdXAgS2V5OiBwYWdnX3RhYl8xLmIKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBG b3JlaWduIFNjYW4gb24gcHVibGljLmZwYWdnX3RhYl9wMiBwYWdnX3RhYl8xCisgICAgICAgICAg ICAgICAgICAgICAgICAgICBPdXRwdXQ6IHBhZ2dfdGFiXzEuYiwgcGFnZ190YWJfMS5hCisgICAg ICAgICAgICAgICAgICAgICAgICAgICBSZW1vdGUgU1FMOiBTRUxFQ1QgYSwgYiBGUk9NIHB1Ymxp Yy5wYWdnX3RhYl9wMgorICAgICAgICAgICAgICAgLT4gIFBhcnRpYWwgSGFzaEFnZ3JlZ2F0ZQor ICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiBwYWdnX3RhYl8yLmIsIFBBUlRJQUwgbWF4KHBh Z2dfdGFiXzIuYSksIFBBUlRJQUwgY291bnQoKiksIFBBUlRJQUwgc3VtKHBhZ2dfdGFiXzIuYSkK KyAgICAgICAgICAgICAgICAgICAgIEdyb3VwIEtleTogcGFnZ190YWJfMi5iCisgICAgICAgICAg ICAgICAgICAgICAtPiAgRm9yZWlnbiBTY2FuIG9uIHB1YmxpYy5mcGFnZ190YWJfcDMgcGFnZ190 YWJfMgorICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiBwYWdnX3RhYl8yLmIsIHBh Z2dfdGFiXzIuYQorICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVtb3RlIFNRTDogU0VMRUNU IGEsIGIgRlJPTSBwdWJsaWMucGFnZ190YWJfcDMKKygyNiByb3dzKQorCistLSBQYXJ0aWFsIGFn Z3JlZ2F0ZXMgYXJlIGZpbmUgdG8gcHVzaCBkb3duIHdpdGhvdXQgaGF2aW5nIGNsYXVzZQorRVhQ TEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKQorU0VMRUNUIGIsIG1heChhKSwgY291bnQoKikgRlJP TSBwYWdnX3RhYiBHUk9VUCBCWSBiIE9SREVSIEJZIDE7CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyBTb3J0CisgICBPdXRwdXQ6IHBhZ2dfdGFiLmIsIChtYXgocGFnZ190YWIuYSkpLCAoY291bnQo KikpCisgICBTb3J0IEtleTogcGFnZ190YWIuYgorICAgLT4gIEZpbmFsaXplIEhhc2hBZ2dyZWdh dGUKKyAgICAgICAgIE91dHB1dDogcGFnZ190YWIuYiwgbWF4KHBhZ2dfdGFiLmEpLCBjb3VudCgq KQorICAgICAgICAgR3JvdXAgS2V5OiBwYWdnX3RhYi5iCisgICAgICAgICAtPiAgQXBwZW5kCisg ICAgICAgICAgICAgICAtPiAgRm9yZWlnbiBTY2FuCisgICAgICAgICAgICAgICAgICAgICBPdXRw dXQ6IHBhZ2dfdGFiLmIsIChQQVJUSUFMIG1heChwYWdnX3RhYi5hKSksIChQQVJUSUFMIGNvdW50 KCopKQorICAgICAgICAgICAgICAgICAgICAgUmVsYXRpb25zOiBBZ2dyZWdhdGUgb24gKHB1Ymxp Yy5mcGFnZ190YWJfcDEgcGFnZ190YWIpCisgICAgICAgICAgICAgICAgICAgICBSZW1vdGUgU1FM OiBTRUxFQ1QgYiwgbWF4KGEpLCBjb3VudCgqKSBGUk9NIHB1YmxpYy5wYWdnX3RhYl9wMSBHUk9V UCBCWSAxCisgICAgICAgICAgICAgICAtPiAgRm9yZWlnbiBTY2FuCisgICAgICAgICAgICAgICAg ICAgICBPdXRwdXQ6IHBhZ2dfdGFiXzEuYiwgKFBBUlRJQUwgbWF4KHBhZ2dfdGFiXzEuYSkpLCAo UEFSVElBTCBjb3VudCgqKSkKKyAgICAgICAgICAgICAgICAgICAgIFJlbGF0aW9uczogQWdncmVn YXRlIG9uIChwdWJsaWMuZnBhZ2dfdGFiX3AyIHBhZ2dfdGFiXzEpCisgICAgICAgICAgICAgICAg ICAgICBSZW1vdGUgU1FMOiBTRUxFQ1QgYiwgbWF4KGEpLCBjb3VudCgqKSBGUk9NIHB1YmxpYy5w YWdnX3RhYl9wMiBHUk9VUCBCWSAxCisgICAgICAgICAgICAgICAtPiAgRm9yZWlnbiBTY2FuCisg ICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHBhZ2dfdGFiXzIuYiwgKFBBUlRJQUwgbWF4KHBh Z2dfdGFiXzIuYSkpLCAoUEFSVElBTCBjb3VudCgqKSkKKyAgICAgICAgICAgICAgICAgICAgIFJl bGF0aW9uczogQWdncmVnYXRlIG9uIChwdWJsaWMuZnBhZ2dfdGFiX3AzIHBhZ2dfdGFiXzIpCisg ICAgICAgICAgICAgICAgICAgICBSZW1vdGUgU1FMOiBTRUxFQ1QgYiwgbWF4KGEpLCBjb3VudCgq KSBGUk9NIHB1YmxpYy5wYWdnX3RhYl9wMyBHUk9VUCBCWSAxCisoMTkgcm93cykKKworU0VMRUNU IGIsIG1heChhKSwgY291bnQoKikgRlJPTSBwYWdnX3RhYiBHUk9VUCBCWSBiIE9SREVSIEJZIDE7 CisgYiAgfCBtYXggfCBjb3VudCAKKy0tLS0rLS0tLS0rLS0tLS0tLQorICAwIHwgIDIwIHwgICAg NjAKKyAgMSB8ICAyMSB8ICAgIDYwCisgIDIgfCAgMjIgfCAgICA2MAorICAzIHwgIDIzIHwgICAg NjAKKyAgNCB8ICAyNCB8ICAgIDYwCisgIDUgfCAgMjUgfCAgICA2MAorICA2IHwgIDI2IHwgICAg NjAKKyAgNyB8ICAyNyB8ICAgIDYwCisgIDggfCAgMjggfCAgICA2MAorICA5IHwgIDI5IHwgICAg NjAKKyAxMCB8ICAyMCB8ICAgIDYwCisgMTEgfCAgMjEgfCAgICA2MAorIDEyIHwgIDIyIHwgICAg NjAKKyAxMyB8ICAyMyB8ICAgIDYwCisgMTQgfCAgMjQgfCAgICA2MAorIDE1IHwgIDI1IHwgICAg NjAKKyAxNiB8ICAyNiB8ICAgIDYwCisgMTcgfCAgMjcgfCAgICA2MAorIDE4IHwgIDI4IHwgICAg NjAKKyAxOSB8ICAyOSB8ICAgIDYwCisgMjAgfCAgMjAgfCAgICA2MAorIDIxIHwgIDIxIHwgICAg NjAKKyAyMiB8ICAyMiB8ICAgIDYwCisgMjMgfCAgMjMgfCAgICA2MAorIDI0IHwgIDI0IHwgICAg NjAKKyAyNSB8ICAyNSB8ICAgIDYwCisgMjYgfCAgMjYgfCAgICA2MAorIDI3IHwgIDI3IHwgICAg NjAKKyAyOCB8ICAyOCB8ICAgIDYwCisgMjkgfCAgMjkgfCAgICA2MAorIDMwIHwgIDIwIHwgICAg NjAKKyAzMSB8ICAyMSB8ICAgIDYwCisgMzIgfCAgMjIgfCAgICA2MAorIDMzIHwgIDIzIHwgICAg NjAKKyAzNCB8ICAyNCB8ICAgIDYwCisgMzUgfCAgMjUgfCAgICA2MAorIDM2IHwgIDI2IHwgICAg NjAKKyAzNyB8ICAyNyB8ICAgIDYwCisgMzggfCAgMjggfCAgICA2MAorIDM5IHwgIDI5IHwgICAg NjAKKyA0MCB8ICAyMCB8ICAgIDYwCisgNDEgfCAgMjEgfCAgICA2MAorIDQyIHwgIDIyIHwgICAg NjAKKyA0MyB8ICAyMyB8ICAgIDYwCisgNDQgfCAgMjQgfCAgICA2MAorIDQ1IHwgIDI1IHwgICAg NjAKKyA0NiB8ICAyNiB8ICAgIDYwCisgNDcgfCAgMjcgfCAgICA2MAorIDQ4IHwgIDI4IHwgICAg NjAKKyA0OSB8ICAyOSB8ICAgIDYwCisoNTAgcm93cykKKworLS0gUGFydGlhbCBhZ2dyZWdhdGVz IGFyZSBmaW5lIHRvIHB1c2ggZG93bgorRVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKQorU0VM RUNUIG1heChhKSwgY291bnQoKiksIHN1bShkKSBGUk9NIHBhZ2dfdGFiOworICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorIEZpbmFsaXplIEFnZ3JlZ2F0ZQorICAgT3V0cHV0OiBtYXgo cGFnZ190YWIuYSksIGNvdW50KCopLCBzdW0ocGFnZ190YWIuZCkKKyAgIC0+ICBBcHBlbmQKKyAg ICAgICAgIC0+ICBGb3JlaWduIFNjYW4KKyAgICAgICAgICAgICAgIE91dHB1dDogKFBBUlRJQUwg bWF4KHBhZ2dfdGFiLmEpKSwgKFBBUlRJQUwgY291bnQoKikpLCAoUEFSVElBTCBzdW0ocGFnZ190 YWIuZCkpCisgICAgICAgICAgICAgICBSZWxhdGlvbnM6IEFnZ3JlZ2F0ZSBvbiAocHVibGljLmZw YWdnX3RhYl9wMSBwYWdnX3RhYikKKyAgICAgICAgICAgICAgIFJlbW90ZSBTUUw6IFNFTEVDVCBt YXgoYSksIGNvdW50KCopLCBzdW0oZCkgRlJPTSBwdWJsaWMucGFnZ190YWJfcDEKKyAgICAgICAg IC0+ICBGb3JlaWduIFNjYW4KKyAgICAgICAgICAgICAgIE91dHB1dDogKFBBUlRJQUwgbWF4KHBh Z2dfdGFiXzEuYSkpLCAoUEFSVElBTCBjb3VudCgqKSksIChQQVJUSUFMIHN1bShwYWdnX3RhYl8x LmQpKQorICAgICAgICAgICAgICAgUmVsYXRpb25zOiBBZ2dyZWdhdGUgb24gKHB1YmxpYy5mcGFn Z190YWJfcDIgcGFnZ190YWJfMSkKKyAgICAgICAgICAgICAgIFJlbW90ZSBTUUw6IFNFTEVDVCBt YXgoYSksIGNvdW50KCopLCBzdW0oZCkgRlJPTSBwdWJsaWMucGFnZ190YWJfcDIKKyAgICAgICAg IC0+ICBGb3JlaWduIFNjYW4KKyAgICAgICAgICAgICAgIE91dHB1dDogKFBBUlRJQUwgbWF4KHBh Z2dfdGFiXzIuYSkpLCAoUEFSVElBTCBjb3VudCgqKSksIChQQVJUSUFMIHN1bShwYWdnX3RhYl8y LmQpKQorICAgICAgICAgICAgICAgUmVsYXRpb25zOiBBZ2dyZWdhdGUgb24gKHB1YmxpYy5mcGFn Z190YWJfcDMgcGFnZ190YWJfMikKKyAgICAgICAgICAgICAgIFJlbW90ZSBTUUw6IFNFTEVDVCBt YXgoYSksIGNvdW50KCopLCBzdW0oZCkgRlJPTSBwdWJsaWMucGFnZ190YWJfcDMKKygxNSByb3dz KQorCitTRUxFQ1QgbWF4KGEpLCBjb3VudCgqKSwgc3VtKGQpIEZST00gcGFnZ190YWI7CisgbWF4 IHwgY291bnQgfCAgc3VtICAKKy0tLS0tKy0tLS0tLS0rLS0tLS0tLQorICAyOSB8ICAzMDAwIHwg NTg1MDAKKygxIHJvdykKKworLS0gU2hvdWxkbid0IHRyeSB0byBwdXNoIGRvd24KK0VYUExBSU4g KFZFUkJPU0UsIENPU1RTIE9GRikKK1NFTEVDVCBtYXgoYSksIGNvdW50KGRpc3RpbmN0IGIpIEZS T00gcGFnZ190YWI7CisgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAg ICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEFnZ3JlZ2F0ZQorICAgT3V0cHV0OiBtYXgo cGFnZ190YWIuYSksIGNvdW50KERJU1RJTkNUIHBhZ2dfdGFiLmIpCisgICAtPiAgQXBwZW5kCisg ICAgICAgICAtPiAgRm9yZWlnbiBTY2FuIG9uIHB1YmxpYy5mcGFnZ190YWJfcDEgcGFnZ190YWJf MQorICAgICAgICAgICAgICAgT3V0cHV0OiBwYWdnX3RhYl8xLmEsIHBhZ2dfdGFiXzEuYgorICAg ICAgICAgICAgICAgUmVtb3RlIFNRTDogU0VMRUNUIGEsIGIgRlJPTSBwdWJsaWMucGFnZ190YWJf cDEKKyAgICAgICAgIC0+ICBGb3JlaWduIFNjYW4gb24gcHVibGljLmZwYWdnX3RhYl9wMiBwYWdn X3RhYl8yCisgICAgICAgICAgICAgICBPdXRwdXQ6IHBhZ2dfdGFiXzIuYSwgcGFnZ190YWJfMi5i CisgICAgICAgICAgICAgICBSZW1vdGUgU1FMOiBTRUxFQ1QgYSwgYiBGUk9NIHB1YmxpYy5wYWdn X3RhYl9wMgorICAgICAgICAgLT4gIEZvcmVpZ24gU2NhbiBvbiBwdWJsaWMuZnBhZ2dfdGFiX3Az IHBhZ2dfdGFiXzMKKyAgICAgICAgICAgICAgIE91dHB1dDogcGFnZ190YWJfMy5hLCBwYWdnX3Rh Yl8zLmIKKyAgICAgICAgICAgICAgIFJlbW90ZSBTUUw6IFNFTEVDVCBhLCBiIEZST00gcHVibGlj LnBhZ2dfdGFiX3AzCisoMTIgcm93cykKKworU0VMRUNUIG1heChhKSwgY291bnQoZGlzdGluY3Qg YikgRlJPTSBwYWdnX3RhYjsKKyBtYXggfCBjb3VudCAKKy0tLS0tKy0tLS0tLS0KKyAgMjkgfCAg ICA1MAorKDEgcm93KQorCiAtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAtLSBhY2Nlc3MgcmlnaHRzIGFuZCBzdXBl cnVzZXIKIC0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT0KZGlmZiAtLWdpdCBhL2NvbnRyaWIvcG9zdGdyZXNfZmR3L3Bv c3RncmVzX2Zkdy5jIGIvY29udHJpYi9wb3N0Z3Jlc19mZHcvcG9zdGdyZXNfZmR3LmMKaW5kZXgg NDVhMDkzMzdkMDguLmI5NGJiMjc1N2EwIDEwMDY0NAotLS0gYS9jb250cmliL3Bvc3RncmVzX2Zk dy9wb3N0Z3Jlc19mZHcuYworKysgYi9jb250cmliL3Bvc3RncmVzX2Zkdy9wb3N0Z3Jlc19mZHcu YwpAQCAtMTgsNiArMTgsOCBAQAogI2luY2x1ZGUgImFjY2Vzcy9zeXNhdHRyLmgiCiAjaW5jbHVk ZSAiYWNjZXNzL3RhYmxlLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19jbGFzcy5oIgorI2luY2x1 ZGUgImNhdGFsb2cvcGdfYWdncmVnYXRlLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19wcm9jLmgi CiAjaW5jbHVkZSAiY29tbWFuZHMvZGVmcmVtLmgiCiAjaW5jbHVkZSAiY29tbWFuZHMvZXhwbGFp bi5oIgogI2luY2x1ZGUgImNvbW1hbmRzL3ZhY3V1bS5oIgpAQCAtNDgsNiArNTAsNyBAQAogI2lu Y2x1ZGUgInV0aWxzL3JlbC5oIgogI2luY2x1ZGUgInV0aWxzL3NhbXBsaW5nLmgiCiAjaW5jbHVk ZSAidXRpbHMvc2VsZnVuY3MuaCIKKyNpbmNsdWRlICJ1dGlscy9zeXNjYWNoZS5oIgogCiBQR19N T0RVTEVfTUFHSUM7CiAKQEAgLTgwLDcgKzgzLDEyIEBAIGVudW0gRmR3U2NhblByaXZhdGVJbmRl eAogCSAqIFN0cmluZyBkZXNjcmliaW5nIGpvaW4gaS5lLiBuYW1lcyBvZiByZWxhdGlvbnMgYmVp bmcgam9pbmVkIGFuZCB0eXBlcwogCSAqIG9mIGpvaW4sIGFkZGVkIHdoZW4gdGhlIHNjYW4gaXMg am9pbgogCSAqLwotCUZkd1NjYW5Qcml2YXRlUmVsYXRpb25zCisJRmR3U2NhblByaXZhdGVSZWxh dGlvbnMsCisKKwkvKgorCSAqIExpc3Qgb2YgZnVuY3Rpb25zIHRvIGNvbnZlcnQgcGFydGlhbCBh Z2dyZWdhdGUgcmVzdWx0CisJICovCisJRmR3U2NhblByaXZhdGVDb252ZXJ0b3JzCiB9OwogCiAv KgpAQCAtMTM5LDEwICsxNDcsMTMgQEAgdHlwZWRlZiBzdHJ1Y3QgUGdGZHdTY2FuU3RhdGUKIAkJ CQkJCQkJICogZm9yIGEgZm9yZWlnbiBqb2luIHNjYW4uICovCiAJVHVwbGVEZXNjCXR1cGRlc2M7 CQkvKiB0dXBsZSBkZXNjcmlwdG9yIG9mIHNjYW4gKi8KIAlBdHRJbk1ldGFkYXRhICphdHRpbm1l dGE7CS8qIGF0dHJpYnV0ZSBkYXRhdHlwZSBjb252ZXJzaW9uIG1ldGFkYXRhICovCisJQXR0SW5N ZXRhZGF0YSAqcmN2ZF9hdHRpbm1ldGE7CS8qIG1ldGFkYXRhIGZvciByZWNlaXZlZCB0dXBsZXMs IE5VTEwgaWYKKwkJCQkJCQkJCSAqIHRoZXJlJ3Mgbm8gY29udmVydGVycyAqLwogCiAJLyogZXh0 cmFjdGVkIGZkd19wcml2YXRlIGRhdGEgKi8KIAljaGFyCSAgICpxdWVyeTsJCQkvKiB0ZXh0IG9m IFNFTEVDVCBjb21tYW5kICovCiAJTGlzdAkgICAqcmV0cmlldmVkX2F0dHJzOwkvKiBsaXN0IG9m IHJldHJpZXZlZCBhdHRyaWJ1dGUgbnVtYmVycyAqLworCUxpc3QJICAgKmNvbnZfbGlzdDsJCS8q IGxpc3Qgb2YgY29udmVydGVycyAqLwogCiAJLyogZm9yIHJlbW90ZSBxdWVyeSBleGVjdXRpb24g Ki8KIAlQR2Nvbm4JICAgKmNvbm47CQkJLyogY29ubmVjdGlvbiBmb3IgdGhlIHNjYW4gKi8KQEAg LTUxMCw2ICs1MjEsNyBAQCBzdGF0aWMgSGVhcFR1cGxlIG1ha2VfdHVwbGVfZnJvbV9yZXN1bHRf cm93KFBHcmVzdWx0ICpyZXMsCiAJCQkJCQkJCQkJCVJlbGF0aW9uIHJlbCwKIAkJCQkJCQkJCQkJ QXR0SW5NZXRhZGF0YSAqYXR0aW5tZXRhLAogCQkJCQkJCQkJCQlMaXN0ICpyZXRyaWV2ZWRfYXR0 cnMsCisJCQkJCQkJCQkJCUxpc3QgKmNvbnZfbGlzdCwKIAkJCQkJCQkJCQkJRm9yZWlnblNjYW5T dGF0ZSAqZnNzdGF0ZSwKIAkJCQkJCQkJCQkJTWVtb3J5Q29udGV4dCB0ZW1wX2NvbnRleHQpOwog c3RhdGljIHZvaWQgY29udmVyc2lvbl9lcnJvcl9jYWxsYmFjayh2b2lkICphcmcpOwpAQCAtNTE3 LDcgKzUyOSw3IEBAIHN0YXRpYyBib29sIGZvcmVpZ25fam9pbl9vayhQbGFubmVySW5mbyAqcm9v dCwgUmVsT3B0SW5mbyAqam9pbnJlbCwKIAkJCQkJCQlKb2luVHlwZSBqb2ludHlwZSwgUmVsT3B0 SW5mbyAqb3V0ZXJyZWwsIFJlbE9wdEluZm8gKmlubmVycmVsLAogCQkJCQkJCUpvaW5QYXRoRXh0 cmFEYXRhICpleHRyYSk7CiBzdGF0aWMgYm9vbCBmb3JlaWduX2dyb3VwaW5nX29rKFBsYW5uZXJJ bmZvICpyb290LCBSZWxPcHRJbmZvICpncm91cGVkX3JlbCwKLQkJCQkJCQkJTm9kZSAqaGF2aW5n UXVhbCk7CisJCQkJCQkJCU5vZGUgKmhhdmluZ1F1YWwsIGJvb2wgcGFydGlhbCk7CiBzdGF0aWMg TGlzdCAqZ2V0X3VzZWZ1bF9wYXRoa2V5c19mb3JfcmVsYXRpb24oUGxhbm5lckluZm8gKnJvb3Qs CiAJCQkJCQkJCQkJCSAgUmVsT3B0SW5mbyAqcmVsKTsKIHN0YXRpYyBMaXN0ICpnZXRfdXNlZnVs X2Vjc19mb3JfcmVsYXRpb24oUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCk7CkBA IC01MjYsNyArNTM4LDggQEAgc3RhdGljIHZvaWQgYWRkX3BhdGhzX3dpdGhfcGF0aGtleXNfZm9y X3JlbChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogc3RhdGljIHZvaWQgYWRk X2ZvcmVpZ25fZ3JvdXBpbmdfcGF0aHMoUGxhbm5lckluZm8gKnJvb3QsCiAJCQkJCQkJCQkgICBS ZWxPcHRJbmZvICppbnB1dF9yZWwsCiAJCQkJCQkJCQkgICBSZWxPcHRJbmZvICpncm91cGVkX3Jl bCwKLQkJCQkJCQkJCSAgIEdyb3VwUGF0aEV4dHJhRGF0YSAqZXh0cmEpOworCQkJCQkJCQkJICAg R3JvdXBQYXRoRXh0cmFEYXRhICpleHRyYSwKKwkJCQkJCQkJCSAgIGJvb2wgcGFydGlhbCk7CiBz dGF0aWMgdm9pZCBhZGRfZm9yZWlnbl9vcmRlcmVkX3BhdGhzKFBsYW5uZXJJbmZvICpyb290LAog CQkJCQkJCQkJICBSZWxPcHRJbmZvICppbnB1dF9yZWwsCiAJCQkJCQkJCQkgIFJlbE9wdEluZm8g Km9yZGVyZWRfcmVsKTsKQEAgLTU0MSw2ICs1NTQsNyBAQCBzdGF0aWMgdm9pZCBtZXJnZV9mZHdf b3B0aW9ucyhQZ0Zkd1JlbGF0aW9uSW5mbyAqZnBpbmZvLAogCQkJCQkJCSAgY29uc3QgUGdGZHdS ZWxhdGlvbkluZm8gKmZwaW5mb19pKTsKIHN0YXRpYyBpbnQJZ2V0X2JhdGNoX3NpemVfb3B0aW9u KFJlbGF0aW9uIHJlbCk7CiAKK3N0YXRpYyBMaXN0ICpidWlsZF9jb252X2xpc3QoUmVsT3B0SW5m byAqZm9yZWlnbnJlbCk7CiAKIC8qCiAgKiBGb3JlaWduLWRhdGEgd3JhcHBlciBoYW5kbGVyIGZ1 bmN0aW9uOiByZXR1cm4gYSBzdHJ1Y3Qgd2l0aCBwb2ludGVycwpAQCAtMTIzMyw2ICsxMjQ3LDcg QEAgcG9zdGdyZXNHZXRGb3JlaWduUGxhbihQbGFubmVySW5mbyAqcm9vdCwKIAlMaXN0CSAgICps b2NhbF9leHBycyA9IE5JTDsKIAlMaXN0CSAgICpwYXJhbXNfbGlzdCA9IE5JTDsKIAlMaXN0CSAg ICpmZHdfc2Nhbl90bGlzdCA9IE5JTDsKKwlMaXN0CSAgICpmZHdfY29udl9saXN0ID0gTklMOwog CUxpc3QJICAgKmZkd19yZWNoZWNrX3F1YWxzID0gTklMOwogCUxpc3QJICAgKnJldHJpZXZlZF9h dHRyczsKIAlTdHJpbmdJbmZvRGF0YSBzcWw7CkBAIC0xMzM2LDYgKzEzNTEsOSBAQCBwb3N0Z3Jl c0dldEZvcmVpZ25QbGFuKFBsYW5uZXJJbmZvICpyb290LAogCQkvKiBCdWlsZCB0aGUgbGlzdCBv ZiBjb2x1bW5zIHRvIGJlIGZldGNoZWQgZnJvbSB0aGUgZm9yZWlnbiBzZXJ2ZXIuICovCiAJCWZk d19zY2FuX3RsaXN0ID0gYnVpbGRfdGxpc3RfdG9fZGVwYXJzZShmb3JlaWducmVsKTsKIAorCQkv KiBCdWlsZCB0aGUgbGlzdCBvZiBjb252ZXJ0ZXJzIGZvciBwYXJ0aWFsIGFnZ3JlZ2F0ZXMuICov CisJCWZkd19jb252X2xpc3QgPSBidWlsZF9jb252X2xpc3QoZm9yZWlnbnJlbCk7CisKIAkJLyoK IAkJICogRW5zdXJlIHRoYXQgdGhlIG91dGVyIHBsYW4gcHJvZHVjZXMgYSB0dXBsZSB3aG9zZSBk ZXNjcmlwdG9yCiAJCSAqIG1hdGNoZXMgb3VyIHNjYW4gdHVwbGUgc2xvdC4gIEFsc28sIHJlbW92 ZSB0aGUgbG9jYWwgY29uZGl0aW9ucwpAQCAtMTQxNSw2ICsxNDMzLDggQEAgcG9zdGdyZXNHZXRG b3JlaWduUGxhbihQbGFubmVySW5mbyAqcm9vdCwKIAlpZiAoSVNfSk9JTl9SRUwoZm9yZWlnbnJl bCkgfHwgSVNfVVBQRVJfUkVMKGZvcmVpZ25yZWwpKQogCQlmZHdfcHJpdmF0ZSA9IGxhcHBlbmQo ZmR3X3ByaXZhdGUsCiAJCQkJCQkJICBtYWtlU3RyaW5nKGZwaW5mby0+cmVsYXRpb25fbmFtZSkp OworCWlmIChJU19VUFBFUl9SRUwoZm9yZWlnbnJlbCkpCisJCWZkd19wcml2YXRlID0gbGFwcGVu ZChmZHdfcHJpdmF0ZSwgZmR3X2NvbnZfbGlzdCk7CiAKIAkvKgogCSAqIENyZWF0ZSB0aGUgRm9y ZWlnblNjYW4gbm9kZSBmb3IgdGhlIGdpdmVuIHJlbGF0aW9uLgpAQCAtMTQzMyw2ICsxNDUzLDQ4 IEBAIHBvc3RncmVzR2V0Rm9yZWlnblBsYW4oUGxhbm5lckluZm8gKnJvb3QsCiAJCQkJCQkJb3V0 ZXJfcGxhbik7CiB9CiAKKy8qCisgKiBHZW5lcmF0ZSBhdHRpbm1ldGEgaWYgdGhlcmUgYXJlIHNv bWUgY29udmVydGVyczoKKyAqIHRoZXkgYXJlIGV4cGVjeHRlZCB0byByZXR1cm4gQllURUEsIGJ1 dCByZWFsIGlucHV0IHR5cGUgaXMgbGlrZWx5IGRpZmZlcmVudC4KKyAqLworc3RhdGljIEF0dElu TWV0YWRhdGEgKgorZ2V0X3JjdmRfYXR0aW5tZXRhKFR1cGxlRGVzYyB0dXBkZXNjLCBMaXN0ICpj b252X2xpc3QpCit7CisJVHVwbGVEZXNjCXJjdmRfdHVwZGVzYzsKKworCUFzc2VydChjb252X2xp c3QgIT0gTklMKTsKKworCXJjdmRfdHVwZGVzYyA9IENyZWF0ZVR1cGxlRGVzY0NvcHkodHVwZGVz Yyk7CisJZm9yIChpbnQgaSA9IDA7IGkgPCByY3ZkX3R1cGRlc2MtPm5hdHRzOyBpKyspCisJewor CQlPaWQJCQljb252ZXJ0ZXIgPSBJbnZhbGlkT2lkOworCQlGb3JtX3BnX2F0dHJpYnV0ZSBhdHQg PSBUdXBsZURlc2NBdHRyKHJjdmRfdHVwZGVzYywgaSk7CisKKwkJY29udmVydGVyID0gbGlzdF9u dGhfb2lkKGNvbnZfbGlzdCwgaSk7CisJCWlmIChjb252ZXJ0ZXIgIT0gSW52YWxpZE9pZCkKKwkJ eworCQkJSGVhcFR1cGxlCXByb2N0dXA7CisJCQlGb3JtX3BnX3Byb2MgcHJvY2Zvcm07CisKKwkJ CXByb2N0dXAgPSBTZWFyY2hTeXNDYWNoZTEoUFJPQ09JRCwgT2JqZWN0SWRHZXREYXR1bShjb252 ZXJ0ZXIpKTsKKworCQkJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHByb2N0dXApKQorCQkJCWVsb2co RVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBmdW5jdGlvbiAldSIsIGNvbnZlcnRlcik7 CisKKwkJCXByb2Nmb3JtID0gKEZvcm1fcGdfcHJvYykgR0VUU1RSVUNUKHByb2N0dXApOworCisJ CQlpZiAocHJvY2Zvcm0tPnByb25hcmdzICE9IDEpCisJCQkJZWxvZyhFUlJPUiwgImNvbnZlcnRl ciAlcyBpcyBleHBlY3RlZCB0byBoYXZlIG9uZSBhcmd1bWVudCIsIE5hbWVTdHIocHJvY2Zvcm0t PnByb25hbWUpKTsKKworCQkJYXR0LT5hdHR0eXBpZCA9IHByb2Nmb3JtLT5wcm9hcmd0eXBlcy52 YWx1ZXNbMF07CisKKwkJCVJlbGVhc2VTeXNDYWNoZShwcm9jdHVwKTsKKwkJfQorCX0KKworCXJl dHVybiBUdXBsZURlc2NHZXRBdHRJbk1ldGFkYXRhKHJjdmRfdHVwZGVzYyk7Cit9CisKIC8qCiAg KiBDb25zdHJ1Y3QgYSB0dXBsZSBkZXNjcmlwdG9yIGZvciB0aGUgc2NhbiB0dXBsZXMgaGFuZGxl ZCBieSBhIGZvcmVpZ24gam9pbi4KICAqLwpAQCAtMTU0NSw2ICsxNjA3LDEyIEBAIHBvc3RncmVz QmVnaW5Gb3JlaWduU2NhbihGb3JlaWduU2NhblN0YXRlICpub2RlLCBpbnQgZWZsYWdzKQogCQkJ CQkJCQkJIEZkd1NjYW5Qcml2YXRlU2VsZWN0U3FsKSk7CiAJZnNzdGF0ZS0+cmV0cmlldmVkX2F0 dHJzID0gKExpc3QgKikgbGlzdF9udGgoZnNwbGFuLT5mZHdfcHJpdmF0ZSwKIAkJCQkJCQkJCQkJ CSBGZHdTY2FuUHJpdmF0ZVJldHJpZXZlZEF0dHJzKTsKKworCWlmIChsaXN0X2xlbmd0aChmc3Bs YW4tPmZkd19wcml2YXRlKSA+IEZkd1NjYW5Qcml2YXRlQ29udmVydG9ycykKKwkJZnNzdGF0ZS0+ Y29udl9saXN0ID0gKExpc3QgKikgbGlzdF9udGgoZnNwbGFuLT5mZHdfcHJpdmF0ZSwKKwkJCQkJ CQkJCQkJICAgRmR3U2NhblByaXZhdGVDb252ZXJ0b3JzKTsKKworCiAJZnNzdGF0ZS0+ZmV0Y2hf c2l6ZSA9IGludFZhbChsaXN0X250aChmc3BsYW4tPmZkd19wcml2YXRlLAogCQkJCQkJCQkJCSAg RmR3U2NhblByaXZhdGVGZXRjaFNpemUpKTsKIApAQCAtMTU3Miw2ICsxNjQwLDggQEAgcG9zdGdy ZXNCZWdpbkZvcmVpZ25TY2FuKEZvcmVpZ25TY2FuU3RhdGUgKm5vZGUsIGludCBlZmxhZ3MpCiAJ fQogCiAJZnNzdGF0ZS0+YXR0aW5tZXRhID0gVHVwbGVEZXNjR2V0QXR0SW5NZXRhZGF0YShmc3N0 YXRlLT50dXBkZXNjKTsKKwlpZiAoZnNzdGF0ZS0+Y29udl9saXN0ICE9IE5JTCkKKwkJZnNzdGF0 ZS0+cmN2ZF9hdHRpbm1ldGEgPSBnZXRfcmN2ZF9hdHRpbm1ldGEoZnNzdGF0ZS0+dHVwZGVzYywg ZnNzdGF0ZS0+Y29udl9saXN0KTsKIAogCS8qCiAJICogUHJlcGFyZSBmb3IgcHJvY2Vzc2luZyBv ZiBwYXJhbWV0ZXJzIHVzZWQgaW4gcmVtb3RlIHF1ZXJ5LCBpZiBhbnkuCkBAIC0zODE1LDEzICsz ODg1LDIxIEBAIGZldGNoX21vcmVfZGF0YShGb3JlaWduU2NhblN0YXRlICpub2RlKQogCiAJCWZv ciAoaSA9IDA7IGkgPCBudW1yb3dzOyBpKyspCiAJCXsKKwkJCUF0dEluTWV0YWRhdGEgKmF0dGlu bWV0YTsKKwogCQkJQXNzZXJ0KElzQShub2RlLT5zcy5wcy5wbGFuLCBGb3JlaWduU2NhbikpOwog CisJCQlpZiAoZnNzdGF0ZS0+cmN2ZF9hdHRpbm1ldGEpCisJCQkJYXR0aW5tZXRhID0gZnNzdGF0 ZS0+cmN2ZF9hdHRpbm1ldGE7CisJCQllbHNlCisJCQkJYXR0aW5tZXRhID0gZnNzdGF0ZS0+YXR0 aW5tZXRhOworCiAJCQlmc3N0YXRlLT50dXBsZXNbaV0gPQogCQkJCW1ha2VfdHVwbGVfZnJvbV9y ZXN1bHRfcm93KHJlcywgaSwKIAkJCQkJCQkJCQkgICBmc3N0YXRlLT5yZWwsCi0JCQkJCQkJCQkJ ICAgZnNzdGF0ZS0+YXR0aW5tZXRhLAorCQkJCQkJCQkJCSAgIGF0dGlubWV0YSwKIAkJCQkJCQkJ CQkgICBmc3N0YXRlLT5yZXRyaWV2ZWRfYXR0cnMsCisJCQkJCQkJCQkJICAgZnNzdGF0ZS0+Y29u dl9saXN0LAogCQkJCQkJCQkJCSAgIG5vZGUsCiAJCQkJCQkJCQkJICAgZnNzdGF0ZS0+dGVtcF9j eHQpOwogCQl9CkBAIC00MzA5LDYgKzQzODcsNyBAQCBzdG9yZV9yZXR1cm5pbmdfcmVzdWx0KFBn RmR3TW9kaWZ5U3RhdGUgKmZtc3RhdGUsCiAJCQkJCQkJCQkJCWZtc3RhdGUtPnJlbCwKIAkJCQkJ CQkJCQkJZm1zdGF0ZS0+YXR0aW5tZXRhLAogCQkJCQkJCQkJCQlmbXN0YXRlLT5yZXRyaWV2ZWRf YXR0cnMsCisJCQkJCQkJCQkJCU5JTCwKIAkJCQkJCQkJCQkJTlVMTCwKIAkJCQkJCQkJCQkJZm1z dGF0ZS0+dGVtcF9jeHQpOwogCkBAIC00NjAzLDYgKzQ2ODIsNyBAQCBnZXRfcmV0dXJuaW5nX2Rh dGEoRm9yZWlnblNjYW5TdGF0ZSAqbm9kZSkKIAkJCQkJCQkJCQkJCWRtc3RhdGUtPnJlbCwKIAkJ CQkJCQkJCQkJCWRtc3RhdGUtPmF0dGlubWV0YSwKIAkJCQkJCQkJCQkJCWRtc3RhdGUtPnJldHJp ZXZlZF9hdHRycywKKwkJCQkJCQkJCQkJCU5JTCwKIAkJCQkJCQkJCQkJCW5vZGUsCiAJCQkJCQkJ CQkJCQlkbXN0YXRlLT50ZW1wX2N4dCk7CiAJCQlFeGVjU3RvcmVIZWFwVHVwbGUobmV3dHVwLCBz bG90LCBmYWxzZSk7CkBAIC01MTgzLDYgKzUyNjMsNyBAQCBhbmFseXplX3Jvd19wcm9jZXNzb3Io UEdyZXN1bHQgKnJlcywgaW50IHJvdywgUGdGZHdBbmFseXplU3RhdGUgKmFzdGF0ZSkKIAkJCQkJ CQkJCQkJCQkgICBhc3RhdGUtPnJlbCwKIAkJCQkJCQkJCQkJCQkgICBhc3RhdGUtPmF0dGlubWV0 YSwKIAkJCQkJCQkJCQkJCQkgICBhc3RhdGUtPnJldHJpZXZlZF9hdHRycywKKwkJCQkJCQkJCQkJ CQkgICBOSUwsCiAJCQkJCQkJCQkJCQkJICAgTlVMTCwKIAkJCQkJCQkJCQkJCQkgICBhc3RhdGUt PnRlbXBfY3h0KTsKIApAQCAtNjA4Myw3ICs2MTY0LDcgQEAgcG9zdGdyZXNHZXRGb3JlaWduSm9p blBhdGhzKFBsYW5uZXJJbmZvICpyb290LAogICovCiBzdGF0aWMgYm9vbAogZm9yZWlnbl9ncm91 cGluZ19vayhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqZ3JvdXBlZF9yZWwsCi0JCQkJ CU5vZGUgKmhhdmluZ1F1YWwpCisJCQkJCU5vZGUgKmhhdmluZ1F1YWwsIGJvb2wgcGFydGlhbCkK IHsKIAlRdWVyeQkgICAqcXVlcnkgPSByb290LT5wYXJzZTsKIAlQZ0Zkd1JlbGF0aW9uSW5mbyAq ZnBpbmZvID0gKFBnRmR3UmVsYXRpb25JbmZvICopIGdyb3VwZWRfcmVsLT5mZHdfcHJpdmF0ZTsK QEAgLTYwOTcsNiArNjE3OCwxMSBAQCBmb3JlaWduX2dyb3VwaW5nX29rKFBsYW5uZXJJbmZvICpy b290LCBSZWxPcHRJbmZvICpncm91cGVkX3JlbCwKIAlpZiAocXVlcnktPmdyb3VwaW5nU2V0cykK IAkJcmV0dXJuIGZhbHNlOwogCisKKwkvKiBJdCdzIHVuc2FmZSB0byBwdXNoIGhhdmluZyBzdGF0 ZW1lbnRzIHdpdGggcGFydGlhbCBhZ2dyZWdhdGVzICovCisJaWYgKHBhcnRpYWwgJiYgaGF2aW5n UXVhbCkKKwkJcmV0dXJuIGZhbHNlOworCiAJLyogR2V0IHRoZSBmcGluZm8gb2YgdGhlIHVuZGVy bHlpbmcgc2NhbiByZWxhdGlvbi4gKi8KIAlvZnBpbmZvID0gKFBnRmR3UmVsYXRpb25JbmZvICop IGZwaW5mby0+b3V0ZXJyZWwtPmZkd19wcml2YXRlOwogCkBAIC02MzM2LDYgKzY0MjIsNyBAQCBw b3N0Z3Jlc0dldEZvcmVpZ25VcHBlclBhdGhzKFBsYW5uZXJJbmZvICpyb290LCBVcHBlclJlbGF0 aW9uS2luZCBzdGFnZSwKIAogCS8qIElnbm9yZSBzdGFnZXMgd2UgZG9uJ3Qgc3VwcG9ydDsgYW5k IHNraXAgYW55IGR1cGxpY2F0ZSBjYWxscy4gKi8KIAlpZiAoKHN0YWdlICE9IFVQUEVSUkVMX0dS T1VQX0FHRyAmJgorCQkgc3RhZ2UgIT0gVVBQRVJSRUxfUEFSVElBTF9HUk9VUF9BR0cgJiYKIAkJ IHN0YWdlICE9IFVQUEVSUkVMX09SREVSRUQgJiYKIAkJIHN0YWdlICE9IFVQUEVSUkVMX0ZJTkFM KSB8fAogCQlvdXRwdXRfcmVsLT5mZHdfcHJpdmF0ZSkKQEAgLTYzNTAsNyArNjQzNywxMSBAQCBw b3N0Z3Jlc0dldEZvcmVpZ25VcHBlclBhdGhzKFBsYW5uZXJJbmZvICpyb290LCBVcHBlclJlbGF0 aW9uS2luZCBzdGFnZSwKIAl7CiAJCWNhc2UgVVBQRVJSRUxfR1JPVVBfQUdHOgogCQkJYWRkX2Zv cmVpZ25fZ3JvdXBpbmdfcGF0aHMocm9vdCwgaW5wdXRfcmVsLCBvdXRwdXRfcmVsLAotCQkJCQkJ CQkJICAgKEdyb3VwUGF0aEV4dHJhRGF0YSAqKSBleHRyYSk7CisJCQkJCQkJCQkgICAoR3JvdXBQ YXRoRXh0cmFEYXRhICopIGV4dHJhLCBmYWxzZSk7CisJCQlicmVhazsKKwkJY2FzZSBVUFBFUlJF TF9QQVJUSUFMX0dST1VQX0FHRzoKKwkJCWFkZF9mb3JlaWduX2dyb3VwaW5nX3BhdGhzKHJvb3Qs IGlucHV0X3JlbCwgb3V0cHV0X3JlbCwKKwkJCQkJCQkJCSAgIChHcm91cFBhdGhFeHRyYURhdGEg KikgZXh0cmEsIHRydWUpOwogCQkJYnJlYWs7CiAJCWNhc2UgVVBQRVJSRUxfT1JERVJFRDoKIAkJ CWFkZF9mb3JlaWduX29yZGVyZWRfcGF0aHMocm9vdCwgaW5wdXRfcmVsLCBvdXRwdXRfcmVsKTsK QEAgLTYzNzUsNyArNjQ2Niw4IEBAIHBvc3RncmVzR2V0Rm9yZWlnblVwcGVyUGF0aHMoUGxhbm5l ckluZm8gKnJvb3QsIFVwcGVyUmVsYXRpb25LaW5kIHN0YWdlLAogc3RhdGljIHZvaWQKIGFkZF9m b3JlaWduX2dyb3VwaW5nX3BhdGhzKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICppbnB1 dF9yZWwsCiAJCQkJCQkgICBSZWxPcHRJbmZvICpncm91cGVkX3JlbCwKLQkJCQkJCSAgIEdyb3Vw UGF0aEV4dHJhRGF0YSAqZXh0cmEpCisJCQkJCQkgICBHcm91cFBhdGhFeHRyYURhdGEgKmV4dHJh LAorCQkJCQkJICAgYm9vbCBwYXJ0aWFsKQogewogCVF1ZXJ5CSAgICpwYXJzZSA9IHJvb3QtPnBh cnNlOwogCVBnRmR3UmVsYXRpb25JbmZvICppZnBpbmZvID0gaW5wdXRfcmVsLT5mZHdfcHJpdmF0 ZTsKQEAgLTYzOTEsOCArNjQ4Myw5IEBAIGFkZF9mb3JlaWduX2dyb3VwaW5nX3BhdGhzKFBsYW5u ZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICppbnB1dF9yZWwsCiAJCSFyb290LT5oYXNIYXZpbmdR dWFsKQogCQlyZXR1cm47CiAKLQlBc3NlcnQoZXh0cmEtPnBhdHlwZSA9PSBQQVJUSVRJT05XSVNF X0FHR1JFR0FURV9OT05FIHx8Ci0JCSAgIGV4dHJhLT5wYXR5cGUgPT0gUEFSVElUSU9OV0lTRV9B R0dSRUdBVEVfRlVMTCk7CisJQXNzZXJ0KCgoZXh0cmEtPnBhdHlwZSA9PSBQQVJUSVRJT05XSVNF X0FHR1JFR0FURV9OT05FIHx8CisJCQkgZXh0cmEtPnBhdHlwZSA9PSBQQVJUSVRJT05XSVNFX0FH R1JFR0FURV9GVUxMKSAmJiAhcGFydGlhbCkgfHwKKwkJICAgKGV4dHJhLT5wYXR5cGUgPT0gUEFS VElUSU9OV0lTRV9BR0dSRUdBVEVfUEFSVElBTCAmJiBwYXJ0aWFsKSk7CiAKIAkvKiBzYXZlIHRo ZSBpbnB1dF9yZWwgYXMgb3V0ZXJyZWwgaW4gZnBpbmZvICovCiAJZnBpbmZvLT5vdXRlcnJlbCA9 IGlucHV0X3JlbDsKQEAgLTY0MTIsNyArNjUwNSw3IEBAIGFkZF9mb3JlaWduX2dyb3VwaW5nX3Bh dGhzKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICppbnB1dF9yZWwsCiAJICogVXNlIEhB VklORyBxdWFsIGZyb20gZXh0cmEuIEluIGNhc2Ugb2YgY2hpbGQgcGFydGl0aW9uLCBpdCB3aWxs IGhhdmUKIAkgKiB0cmFuc2xhdGVkIFZhcnMuCiAJICovCi0JaWYgKCFmb3JlaWduX2dyb3VwaW5n X29rKHJvb3QsIGdyb3VwZWRfcmVsLCBleHRyYS0+aGF2aW5nUXVhbCkpCisJaWYgKCFmb3JlaWdu X2dyb3VwaW5nX29rKHJvb3QsIGdyb3VwZWRfcmVsLCBleHRyYS0+aGF2aW5nUXVhbCwgcGFydGlh bCkpCiAJCXJldHVybjsKIAogCS8qCkBAIC03MTA4LDYgKzcyMDEsMzAgQEAgY29tcGxldGVfcGVu ZGluZ19yZXF1ZXN0KEFzeW5jUmVxdWVzdCAqYXJlcSkKIAkJCQkJCQkgIFR1cElzTnVsbChhcmVx LT5yZXN1bHQpID8gMC4wIDogMS4wKTsKIH0KIAorLyoKKyAqIEludGVyZmFjZSB0byBmbWdyIHRv IGNhbGwgY29udmVydGVycworICovCitzdGF0aWMgRGF0dW0KK2NhbGxfY29udmVydGVyKE9pZCBj b252ZXJ0ZXIsIE9pZCBjb2xsYXRpb24sIERhdHVtIHZhbHVlLCBib29sIGlzbnVsbCwgYm9vbCAq cmVzX2lzbnVsbCkKK3sKKwlMT0NBTF9GQ0lORk8oZmNpbmZvLCAxKTsKKwlGbWdySW5mbwlmbGlu Zm87CisJRGF0dW0JCXJlc3VsdDsKKworCWZtZ3JfaW5mbyhjb252ZXJ0ZXIsICZmbGluZm8pOwor CisJSW5pdEZ1bmN0aW9uQ2FsbEluZm9EYXRhKCpmY2luZm8sICZmbGluZm8sIDEsIGNvbGxhdGlv biwgTlVMTCwgTlVMTCk7CisKKwlmY2luZm8tPmFyZ3NbMF0udmFsdWUgPSB2YWx1ZTsKKwlmY2lu Zm8tPmFyZ3NbMF0uaXNudWxsID0gaXNudWxsOworCisJcmVzdWx0ID0gRnVuY3Rpb25DYWxsSW52 b2tlKGZjaW5mbyk7CisKKwlpZiAocmVzX2lzbnVsbCkKKwkJKnJlc19pc251bGwgPSBmY2luZm8t PmlzbnVsbDsKKwlyZXR1cm4gcmVzdWx0OworfQorCiAvKgogICogQ3JlYXRlIGEgdHVwbGUgZnJv bSB0aGUgc3BlY2lmaWVkIHJvdyBvZiB0aGUgUEdyZXN1bHQuCiAgKgpAQCAtNzEyNyw2ICs3MjQ0 LDcgQEAgbWFrZV90dXBsZV9mcm9tX3Jlc3VsdF9yb3coUEdyZXN1bHQgKnJlcywKIAkJCQkJCSAg IFJlbGF0aW9uIHJlbCwKIAkJCQkJCSAgIEF0dEluTWV0YWRhdGEgKmF0dGlubWV0YSwKIAkJCQkJ CSAgIExpc3QgKnJldHJpZXZlZF9hdHRycywKKwkJCQkJCSAgIExpc3QgKmNvbnZfbGlzdCwKIAkJ CQkJCSAgIEZvcmVpZ25TY2FuU3RhdGUgKmZzc3RhdGUsCiAJCQkJCQkgICBNZW1vcnlDb250ZXh0 IHRlbXBfY29udGV4dCkKIHsKQEAgLTcxNzgsNiArNzI5Niw3IEBAIG1ha2VfdHVwbGVfZnJvbV9y ZXN1bHRfcm93KFBHcmVzdWx0ICpyZXMsCiAJZXJyY2FsbGJhY2sucHJldmlvdXMgPSBlcnJvcl9j b250ZXh0X3N0YWNrOwogCWVycm9yX2NvbnRleHRfc3RhY2sgPSAmZXJyY2FsbGJhY2s7CiAKKwog CS8qCiAJICogaSBpbmRleGVzIGNvbHVtbnMgaW4gdGhlIHJlbGF0aW9uLCBqIGluZGV4ZXMgY29s dW1ucyBpbiB0aGUgUEdyZXN1bHQuCiAJICovCkBAIC03MjA5LDYgKzczMjgsMjAgQEAgbWFrZV90 dXBsZV9mcm9tX3Jlc3VsdF9yb3coUEdyZXN1bHQgKnJlcywKIAkJCQkJCQkJCQkJICB2YWxzdHIs CiAJCQkJCQkJCQkJCSAgYXR0aW5tZXRhLT5hdHRpb3BhcmFtc1tpIC0gMV0sCiAJCQkJCQkJCQkJ CSAgYXR0aW5tZXRhLT5hdHR0eXBtb2RzW2kgLSAxXSk7CisJCQlpZiAoY29udl9saXN0ICE9IE5J TCkKKwkJCXsKKwkJCQlPaWQJCQljb252ZXJ0ZXIgPSBsaXN0X250aF9vaWQoY29udl9saXN0LCBp IC0gMSk7CisKKwkJCQlpZiAoY29udmVydGVyICE9IEludmFsaWRPaWQpCisJCQkJeworCQkJCQlG b3JtX3BnX2F0dHJpYnV0ZSBhdHQgPSBUdXBsZURlc2NBdHRyKHR1cGRlc2MsIGkpOworCQkJCQli b29sCXJlc19pc251bGw7CisKKwkJCQkJdmFsdWVzW2kgLSAxXSA9CWNhbGxfY29udmVydGVyKGNv bnZlcnRlciwgYXR0LT5hdHRjb2xsYXRpb24sIHZhbHVlc1tpIC0gMV0sIG51bGxzW2kgLSAxXSwg JnJlc19pc251bGwpOworCisJCQkJCW51bGxzW2kgLSAxXSA9IHJlc19pc251bGw7CisJCQkJfQor CQkJfQogCQl9CiAJCWVsc2UgaWYgKGkgPT0gU2VsZkl0ZW1Qb2ludGVyQXR0cmlidXRlTnVtYmVy KQogCQl7CkBAIC03NDcyLDMgKzc2MDUsNDUgQEAgZ2V0X2JhdGNoX3NpemVfb3B0aW9uKFJlbGF0 aW9uIHJlbCkKIAogCXJldHVybiBiYXRjaF9zaXplOwogfQorCitzdGF0aWMgTGlzdCAqCitidWls ZF9jb252X2xpc3QoUmVsT3B0SW5mbyAqZm9yZWlnbnJlbCkKK3sKKwlMaXN0CSAgICpjb252bGlz dCA9IE5JTDsKKwlQZ0Zkd1JlbGF0aW9uSW5mbyAqZnBpbmZvID0gKFBnRmR3UmVsYXRpb25JbmZv ICopIGZvcmVpZ25yZWwtPmZkd19wcml2YXRlOworCUxpc3RDZWxsICAgKmxjOworCisJaWYgKElT X1VQUEVSX1JFTChmb3JlaWducmVsKSkKKwl7CisJCWZvcmVhY2gobGMsIGZwaW5mby0+Z3JvdXBl ZF90bGlzdCkKKwkJeworCQkJVGFyZ2V0RW50cnkgKnRsZW50cnkgPSAoVGFyZ2V0RW50cnkgKikg bGZpcnN0KGxjKTsKKwkJCU9pZAkJCWNvbnZlcnRlcl9vaWQgPSBJbnZhbGlkT2lkOworCisJCQlp ZiAoSXNBKHRsZW50cnktPmV4cHIsIEFnZ3JlZikpCisJCQl7CisJCQkJQWdncmVmCSAgICphZ2cg PSAoQWdncmVmICopIHRsZW50cnktPmV4cHI7CisKKwkJCQlpZiAoYWdnLT5hZ2dzcGxpdCA9PSBB R0dTUExJVF9JTklUSUFMX1NFUklBTCAmJiBhZ2ctPmFnZ3RyYW5zdHlwZSA9PSBJTlRFUk5BTE9J RCkKKwkJCQl7CisJCQkJCUhlYXBUdXBsZQlhZ2d0dXA7CisJCQkJCUZvcm1fcGdfYWdncmVnYXRl IGFnZ2Zvcm07CisKKwkJCQkJYWdndHVwID0gU2VhcmNoU3lzQ2FjaGUxKEFHR0ZOT0lELCBPYmpl Y3RJZEdldERhdHVtKGFnZy0+YWdnZm5vaWQpKTsKKwkJCQkJaWYgKCFIZWFwVHVwbGVJc1ZhbGlk KGFnZ3R1cCkpCisJCQkJCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgZnVu Y3Rpb24gJXUiLCBhZ2ctPmFnZ2Zub2lkKTsKKworCQkJCQlhZ2dmb3JtID0gKEZvcm1fcGdfYWdn cmVnYXRlKSBHRVRTVFJVQ1QoYWdndHVwKTsKKworCQkJCQljb252ZXJ0ZXJfb2lkID0gYWdnZm9y bS0+YWdncGFydGlhbGNvbnZlcnRlcmZuOworCQkJCQlBc3NlcnQoY29udmVydGVyX29pZCAhPSBJ bnZhbGlkT2lkKTsKKworCQkJCQlSZWxlYXNlU3lzQ2FjaGUoYWdndHVwKTsKKwkJCQl9CisJCQl9 CisJCQljb252bGlzdCA9IGxhcHBlbmRfb2lkKGNvbnZsaXN0LCBjb252ZXJ0ZXJfb2lkKTsKKwkJ fQorCX0KKworCXJldHVybiBjb252bGlzdDsKK30KZGlmZiAtLWdpdCBhL2NvbnRyaWIvcG9zdGdy ZXNfZmR3L3NxbC9wb3N0Z3Jlc19mZHcuc3FsIGIvY29udHJpYi9wb3N0Z3Jlc19mZHcvc3FsL3Bv c3RncmVzX2Zkdy5zcWwKaW5kZXggZTdiODY5ZjhjZWEuLmRiM2YxMmYzMGJlIDEwMDY0NAotLS0g YS9jb250cmliL3Bvc3RncmVzX2Zkdy9zcWwvcG9zdGdyZXNfZmR3LnNxbAorKysgYi9jb250cmli L3Bvc3RncmVzX2Zkdy9zcWwvcG9zdGdyZXNfZmR3LnNxbApAQCAtMjcyOSwxNSArMjcyOSwxNSBA QCBSRVNFVCBlbmFibGVfcGFydGl0aW9ud2lzZV9qb2luOwogLS0gdGVzdCBwYXJ0aXRpb253aXNl IGFnZ3JlZ2F0ZXMKIC0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAotQ1JFQVRFIFRBQkxFIHBhZ2dfdGFiIChhIGlu dCwgYiBpbnQsIGMgdGV4dCkgUEFSVElUSU9OIEJZIFJBTkdFKGEpOworQ1JFQVRFIFRBQkxFIHBh Z2dfdGFiIChhIGludCwgYiBpbnQsIGMgdGV4dCwgZCBudW1lcmljKSBQQVJUSVRJT04gQlkgUkFO R0UoYSk7CiAKIENSRUFURSBUQUJMRSBwYWdnX3RhYl9wMSAoTElLRSBwYWdnX3RhYik7CiBDUkVB VEUgVEFCTEUgcGFnZ190YWJfcDIgKExJS0UgcGFnZ190YWIpOwogQ1JFQVRFIFRBQkxFIHBhZ2df dGFiX3AzIChMSUtFIHBhZ2dfdGFiKTsKIAotSU5TRVJUIElOVE8gcGFnZ190YWJfcDEgU0VMRUNU IGkgJSAzMCwgaSAlIDUwLCB0b19jaGFyKGkvMzAsICdGTTAwMDAnKSBGUk9NIGdlbmVyYXRlX3Nl cmllcygxLCAzMDAwKSBpIFdIRVJFIChpICUgMzApIDwgMTA7Ci1JTlNFUlQgSU5UTyBwYWdnX3Rh Yl9wMiBTRUxFQ1QgaSAlIDMwLCBpICUgNTAsIHRvX2NoYXIoaS8zMCwgJ0ZNMDAwMCcpIEZST00g Z2VuZXJhdGVfc2VyaWVzKDEsIDMwMDApIGkgV0hFUkUgKGkgJSAzMCkgPCAyMCBhbmQgKGkgJSAz MCkgPj0gMTA7Ci1JTlNFUlQgSU5UTyBwYWdnX3RhYl9wMyBTRUxFQ1QgaSAlIDMwLCBpICUgNTAs IHRvX2NoYXIoaS8zMCwgJ0ZNMDAwMCcpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDMwMDApIGkg V0hFUkUgKGkgJSAzMCkgPCAzMCBhbmQgKGkgJSAzMCkgPj0gMjA7CitJTlNFUlQgSU5UTyBwYWdn X3RhYl9wMSBTRUxFQ1QgaSAlIDMwLCBpICUgNTAsIHRvX2NoYXIoaS8zMCwgJ0ZNMDAwMCcpLCBp ICUgNDAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgMzAwMCkgaSBXSEVSRSAoaSAlIDMwKSA8IDEw OworSU5TRVJUIElOVE8gcGFnZ190YWJfcDIgU0VMRUNUIGkgJSAzMCwgaSAlIDUwLCB0b19jaGFy KGkvMzAsICdGTTAwMDAnKSwgaSAlIDQwIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDMwMDApIGkg V0hFUkUgKGkgJSAzMCkgPCAyMCBhbmQgKGkgJSAzMCkgPj0gMTA7CitJTlNFUlQgSU5UTyBwYWdn X3RhYl9wMyBTRUxFQ1QgaSAlIDMwLCBpICUgNTAsIHRvX2NoYXIoaS8zMCwgJ0ZNMDAwMCcpLCBp ICUgNDAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgMzAwMCkgaSBXSEVSRSAoaSAlIDMwKSA8IDMw IGFuZCAoaSAlIDMwKSA+PSAyMDsKIAogLS0gQ3JlYXRlIGZvcmVpZ24gcGFydGl0aW9ucwogQ1JF QVRFIEZPUkVJR04gVEFCTEUgZnBhZ2dfdGFiX3AxIFBBUlRJVElPTiBPRiBwYWdnX3RhYiBGT1Ig VkFMVUVTIEZST00gKDApIFRPICgxMCkgU0VSVkVSIGxvb3BiYWNrIE9QVElPTlMgKHRhYmxlX25h bWUgJ3BhZ2dfdGFiX3AxJyk7CkBAIC0yNzcxLDYgKzI3NzEsMjUgQEAgU0VMRUNUIGEsIGNvdW50 KHQxKSBGUk9NIHBhZ2dfdGFiIHQxIEdST1VQIEJZIGEgSEFWSU5HIGF2ZyhiKSA8IDIyIE9SREVS IEJZIDE7CiBFWFBMQUlOIChDT1NUUyBPRkYpCiBTRUxFQ1QgYiwgYXZnKGEpLCBtYXgoYSksIGNv dW50KCopIEZST00gcGFnZ190YWIgR1JPVVAgQlkgYiBIQVZJTkcgc3VtKGEpIDwgNzAwIE9SREVS IEJZIDE7CiAKKy0tIEl0J3MgdW5zYWZlIHRvIHB1c2ggZG93biBoYXZpbmcgY2xhdXNlIHdoZW4g dGhlcmUgYXJlIHBhcnRpYWwgYWdncmVnYXRlcworRVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZG KQorU0VMRUNUIGIsIG1heChhKSwgY291bnQoKikgRlJPTSBwYWdnX3RhYiBHUk9VUCBCWSBiIEhB VklORyBzdW0oYSkgPCA3MDAgT1JERVIgQlkgMTsKKworLS0gUGFydGlhbCBhZ2dyZWdhdGVzIGFy ZSBmaW5lIHRvIHB1c2ggZG93biB3aXRob3V0IGhhdmluZyBjbGF1c2UKK0VYUExBSU4gKFZFUkJP U0UsIENPU1RTIE9GRikKK1NFTEVDVCBiLCBtYXgoYSksIGNvdW50KCopIEZST00gcGFnZ190YWIg R1JPVVAgQlkgYiBPUkRFUiBCWSAxOworU0VMRUNUIGIsIG1heChhKSwgY291bnQoKikgRlJPTSBw YWdnX3RhYiBHUk9VUCBCWSBiIE9SREVSIEJZIDE7CisKKy0tIFBhcnRpYWwgYWdncmVnYXRlcyBh cmUgZmluZSB0byBwdXNoIGRvd24KK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikKK1NFTEVD VCBtYXgoYSksIGNvdW50KCopLCBzdW0oZCkgRlJPTSBwYWdnX3RhYjsKK1NFTEVDVCBtYXgoYSks IGNvdW50KCopLCBzdW0oZCkgRlJPTSBwYWdnX3RhYjsKKworLS0gU2hvdWxkbid0IHRyeSB0byBw dXNoIGRvd24KK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikKK1NFTEVDVCBtYXgoYSksIGNv dW50KGRpc3RpbmN0IGIpIEZST00gcGFnZ190YWI7CitTRUxFQ1QgbWF4KGEpLCBjb3VudChkaXN0 aW5jdCBiKSBGUk9NIHBhZ2dfdGFiOworCiAtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAtLSBhY2Nlc3MgcmlnaHRz IGFuZCBzdXBlcnVzZXIKIC0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2Nh dGFsb2cvcGdfYWdncmVnYXRlLmMgYi9zcmMvYmFja2VuZC9jYXRhbG9nL3BnX2FnZ3JlZ2F0ZS5j CmluZGV4IDFmNjNkODA4MWIyLi42MzllYTRjZjlhNiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv Y2F0YWxvZy9wZ19hZ2dyZWdhdGUuYworKysgYi9zcmMvYmFja2VuZC9jYXRhbG9nL3BnX2FnZ3Jl Z2F0ZS5jCkBAIC02MCw2ICs2MCw3IEBAIEFnZ3JlZ2F0ZUNyZWF0ZShjb25zdCBjaGFyICphZ2dO YW1lLAogCQkJCUxpc3QgKmFnZ2NvbWJpbmVmbk5hbWUsCiAJCQkJTGlzdCAqYWdnc2VyaWFsZm5O YW1lLAogCQkJCUxpc3QgKmFnZ2Rlc2VyaWFsZm5OYW1lLAorCQkJCUxpc3QgKmFnZ3BhcnRpYWxj b252ZXJ0ZXJmbk5hbWUsCiAJCQkJTGlzdCAqYWdnbXRyYW5zZm5OYW1lLAogCQkJCUxpc3QgKmFn Z21pbnZ0cmFuc2ZuTmFtZSwKIAkJCQlMaXN0ICphZ2dtZmluYWxmbk5hbWUsCkBAIC03NCw3ICs3 NSw4IEBAIEFnZ3JlZ2F0ZUNyZWF0ZShjb25zdCBjaGFyICphZ2dOYW1lLAogCQkJCWludDMyIGFn Z21UcmFuc1NwYWNlLAogCQkJCWNvbnN0IGNoYXIgKmFnZ2luaXR2YWwsCiAJCQkJY29uc3QgY2hh ciAqYWdnbWluaXR2YWwsCi0JCQkJY2hhciBwcm9wYXJhbGxlbCkKKwkJCQljaGFyIHByb3BhcmFs bGVsLAorCQkJCWJvb2wgcGFydGlhbFB1c2hkb3duU2FmZSkKIHsKIAlSZWxhdGlvbglhZ2dkZXNj OwogCUhlYXBUdXBsZQl0dXA7CkBAIC04OCw2ICs5MCw3IEBAIEFnZ3JlZ2F0ZUNyZWF0ZShjb25z dCBjaGFyICphZ2dOYW1lLAogCU9pZAkJCWNvbWJpbmVmbiA9IEludmFsaWRPaWQ7IC8qIGNhbiBi ZSBvbWl0dGVkICovCiAJT2lkCQkJc2VyaWFsZm4gPSBJbnZhbGlkT2lkOwkvKiBjYW4gYmUgb21p dHRlZCAqLwogCU9pZAkJCWRlc2VyaWFsZm4gPSBJbnZhbGlkT2lkOwkvKiBjYW4gYmUgb21pdHRl ZCAqLworCU9pZAkJCXBhcnRpYWxjb252ZXJ0ZXJmbiA9IEludmFsaWRPaWQ7CS8qIGNhbiBiZSBv bWl0dGVkICovCiAJT2lkCQkJbXRyYW5zZm4gPSBJbnZhbGlkT2lkOwkvKiBjYW4gYmUgb21pdHRl ZCAqLwogCU9pZAkJCW1pbnZ0cmFuc2ZuID0gSW52YWxpZE9pZDsJLyogY2FuIGJlIG9taXR0ZWQg Ki8KIAlPaWQJCQltZmluYWxmbiA9IEludmFsaWRPaWQ7CS8qIGNhbiBiZSBvbWl0dGVkICovCkBA IC01NjksNiArNTcyLDI3IEBAIEFnZ3JlZ2F0ZUNyZWF0ZShjb25zdCBjaGFyICphZ2dOYW1lLAog CQkJCQkJCWZvcm1hdF90eXBlX2JlKGZpbmFsdHlwZSkpKSk7CiAJfQogCisJLyoKKwkgKiBWYWxp ZGF0ZSB0aGUgcGFydGlhbCBjb252ZXJ0ZXIsIGlmIHByZXNlbnQuCisJICovCisJaWYgKGFnZ3Bh cnRpYWxjb252ZXJ0ZXJmbk5hbWUpCisJeworCQlmbkFyZ3NbMF0gPSBmaW5hbHR5cGU7CisKKwkJ cGFydGlhbGNvbnZlcnRlcmZuID0gbG9va3VwX2FnZ19mdW5jdGlvbihhZ2dwYXJ0aWFsY29udmVy dGVyZm5OYW1lLCAxLAorCQkJCQkJCQkJCQkgIGZuQXJncywgSW52YWxpZE9pZCwKKwkJCQkJCQkJ CQkJICAmcmV0dHlwZSk7CisKKwkJaWYgKHJldHR5cGUgIT0gQllURUFPSUQpCisJCQllcmVwb3J0 KEVSUk9SLAorCQkJCQkoZXJyY29kZShFUlJDT0RFX0RBVEFUWVBFX01JU01BVENIKSwKKwkJCQkJ IGVycm1zZygicmV0dXJuIHR5cGUgb2YgcGFydGlhbCBzZXJpYWxpemF0aW9uIGZ1bmN0aW9uICVz IGlzIG5vdCAlcyIsCisJCQkJCQkJTmFtZUxpc3RUb1N0cmluZyhhZ2dzZXJpYWxmbk5hbWUpLAor CQkJCQkJCWZvcm1hdF90eXBlX2JlKEJZVEVBT0lEKSkpKTsKKworCX0KKworCiAJLyogaGFuZGxl IHNvcnRvcCwgaWYgc3VwcGxpZWQgKi8KIAlpZiAoYWdnc29ydG9wTmFtZSkKIAl7CkBAIC02NjQs NiArNjg4LDcgQEAgQWdncmVnYXRlQ3JlYXRlKGNvbnN0IGNoYXIgKmFnZ05hbWUsCiAJdmFsdWVz W0FudW1fcGdfYWdncmVnYXRlX2FnZ2NvbWJpbmVmbiAtIDFdID0gT2JqZWN0SWRHZXREYXR1bShj b21iaW5lZm4pOwogCXZhbHVlc1tBbnVtX3BnX2FnZ3JlZ2F0ZV9hZ2dzZXJpYWxmbiAtIDFdID0g T2JqZWN0SWRHZXREYXR1bShzZXJpYWxmbik7CiAJdmFsdWVzW0FudW1fcGdfYWdncmVnYXRlX2Fn Z2Rlc2VyaWFsZm4gLSAxXSA9IE9iamVjdElkR2V0RGF0dW0oZGVzZXJpYWxmbik7CisJdmFsdWVz W0FudW1fcGdfYWdncmVnYXRlX2FnZ3BhcnRpYWxjb252ZXJ0ZXJmbiAtIDFdID0gT2JqZWN0SWRH ZXREYXR1bShwYXJ0aWFsY29udmVydGVyZm4pOwogCXZhbHVlc1tBbnVtX3BnX2FnZ3JlZ2F0ZV9h Z2dtdHJhbnNmbiAtIDFdID0gT2JqZWN0SWRHZXREYXR1bShtdHJhbnNmbik7CiAJdmFsdWVzW0Fu dW1fcGdfYWdncmVnYXRlX2FnZ21pbnZ0cmFuc2ZuIC0gMV0gPSBPYmplY3RJZEdldERhdHVtKG1p bnZ0cmFuc2ZuKTsKIAl2YWx1ZXNbQW51bV9wZ19hZ2dyZWdhdGVfYWdnbWZpbmFsZm4gLSAxXSA9 IE9iamVjdElkR2V0RGF0dW0obWZpbmFsZm4pOwpAQCAtNjc2LDYgKzcwMSw3IEBAIEFnZ3JlZ2F0 ZUNyZWF0ZShjb25zdCBjaGFyICphZ2dOYW1lLAogCXZhbHVlc1tBbnVtX3BnX2FnZ3JlZ2F0ZV9h Z2d0cmFuc3NwYWNlIC0gMV0gPSBJbnQzMkdldERhdHVtKGFnZ1RyYW5zU3BhY2UpOwogCXZhbHVl c1tBbnVtX3BnX2FnZ3JlZ2F0ZV9hZ2dtdHJhbnN0eXBlIC0gMV0gPSBPYmplY3RJZEdldERhdHVt KGFnZ21UcmFuc1R5cGUpOwogCXZhbHVlc1tBbnVtX3BnX2FnZ3JlZ2F0ZV9hZ2dtdHJhbnNzcGFj ZSAtIDFdID0gSW50MzJHZXREYXR1bShhZ2dtVHJhbnNTcGFjZSk7CisJdmFsdWVzW0FudW1fcGdf YWdncmVnYXRlX2FnZ3BhcnRpYWxwdXNoZG93bnNhZmUgLSAxXSA9IEJvb2xHZXREYXR1bShwYXJ0 aWFsUHVzaGRvd25TYWZlKTsKIAlpZiAoYWdnaW5pdHZhbCkKIAkJdmFsdWVzW0FudW1fcGdfYWdn cmVnYXRlX2FnZ2luaXR2YWwgLSAxXSA9IENTdHJpbmdHZXRUZXh0RGF0dW0oYWdnaW5pdHZhbCk7 CiAJZWxzZQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvYWdncmVnYXRlY21kcy5j IGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvYWdncmVnYXRlY21kcy5jCmluZGV4IDA0NmNmMmRmMDhm Li44MWNiMTdhMTE5ZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvYWdncmVnYXRl Y21kcy5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2FnZ3JlZ2F0ZWNtZHMuYwpAQCAtNjks MTEgKzY5LDEzIEBAIERlZmluZUFnZ3JlZ2F0ZShQYXJzZVN0YXRlICpwc3RhdGUsCiAJTGlzdAkg ICAqY29tYmluZWZ1bmNOYW1lID0gTklMOwogCUxpc3QJICAgKnNlcmlhbGZ1bmNOYW1lID0gTklM OwogCUxpc3QJICAgKmRlc2VyaWFsZnVuY05hbWUgPSBOSUw7CisJTGlzdAkgICAqcGFydGlhbGNv bnZlcnRlcmZ1bmNOYW1lID0gTklMOwogCUxpc3QJICAgKm10cmFuc2Z1bmNOYW1lID0gTklMOwog CUxpc3QJICAgKm1pbnZ0cmFuc2Z1bmNOYW1lID0gTklMOwogCUxpc3QJICAgKm1maW5hbGZ1bmNO YW1lID0gTklMOwogCWJvb2wJCWZpbmFsZnVuY0V4dHJhQXJncyA9IGZhbHNlOwogCWJvb2wJCW1m aW5hbGZ1bmNFeHRyYUFyZ3MgPSBmYWxzZTsKKwlib29sCQlwYXJ0aWFsUHVzaGRvd25TYWZlID0g ZmFsc2U7CiAJY2hhcgkJZmluYWxmdW5jTW9kaWZ5ID0gMDsKIAljaGFyCQltZmluYWxmdW5jTW9k aWZ5ID0gMDsKIAlMaXN0CSAgICpzb3J0b3BlcmF0b3JOYW1lID0gTklMOwpAQCAtMTQyLDYgKzE0 NCw4IEBAIERlZmluZUFnZ3JlZ2F0ZShQYXJzZVN0YXRlICpwc3RhdGUsCiAJCQlzZXJpYWxmdW5j TmFtZSA9IGRlZkdldFF1YWxpZmllZE5hbWUoZGVmZWwpOwogCQllbHNlIGlmIChzdHJjbXAoZGVm ZWwtPmRlZm5hbWUsICJkZXNlcmlhbGZ1bmMiKSA9PSAwKQogCQkJZGVzZXJpYWxmdW5jTmFtZSA9 IGRlZkdldFF1YWxpZmllZE5hbWUoZGVmZWwpOworCQllbHNlIGlmIChzdHJjbXAoZGVmZWwtPmRl Zm5hbWUsICJwYXJ0aWFsY29udmVydGVyZnVuYyIpID09IDApCisJCQlwYXJ0aWFsY29udmVydGVy ZnVuY05hbWUgPSBkZWZHZXRRdWFsaWZpZWROYW1lKGRlZmVsKTsKIAkJZWxzZSBpZiAoc3RyY21w KGRlZmVsLT5kZWZuYW1lLCAibXNmdW5jIikgPT0gMCkKIAkJCW10cmFuc2Z1bmNOYW1lID0gZGVm R2V0UXVhbGlmaWVkTmFtZShkZWZlbCk7CiAJCWVsc2UgaWYgKHN0cmNtcChkZWZlbC0+ZGVmbmFt ZSwgIm1pbnZmdW5jIikgPT0gMCkKQEAgLTE4OSw2ICsxOTMsOCBAQCBEZWZpbmVBZ2dyZWdhdGUo UGFyc2VTdGF0ZSAqcHN0YXRlLAogCQkJbWluaXR2YWwgPSBkZWZHZXRTdHJpbmcoZGVmZWwpOwog CQllbHNlIGlmIChzdHJjbXAoZGVmZWwtPmRlZm5hbWUsICJwYXJhbGxlbCIpID09IDApCiAJCQlw YXJhbGxlbCA9IGRlZkdldFN0cmluZyhkZWZlbCk7CisJCWVsc2UgaWYgKHN0cmNtcChkZWZlbC0+ ZGVmbmFtZSwgInBhcnRpYWxfcHVzaGRvd25fc2FmZSIpID09IDApCisJCQlwYXJ0aWFsUHVzaGRv d25TYWZlID0gZGVmR2V0Qm9vbGVhbihkZWZlbCk7CiAJCWVsc2UKIAkJCWVyZXBvcnQoV0FSTklO RywKIAkJCQkJKGVycmNvZGUoRVJSQ09ERV9TWU5UQVhfRVJST1IpLApAQCAtMzcyLDYgKzM3OCwx OCBAQCBEZWZpbmVBZ2dyZWdhdGUoUGFyc2VTdGF0ZSAqcHN0YXRlLAogCQkJCSBlcnJtc2coIm11 c3Qgc3BlY2lmeSBib3RoIG9yIG5laXRoZXIgb2Ygc2VyaWFsaXphdGlvbiBhbmQgZGVzZXJpYWxp emF0aW9uIGZ1bmN0aW9ucyIpKSk7CiAJfQogCisJaWYgKHBhcnRpYWxjb252ZXJ0ZXJmdW5jTmFt ZSkKKwl7CisJCS8qCisJCSAqIFNlcmlhbGl6YXRpb24gaXMgb25seSBuZWVkZWQvYWxsb3dlZCBm b3IgdHJhbnN0eXBlIElOVEVSTkFMLgorCQkgKi8KKwkJaWYgKHRyYW5zVHlwZUlkICE9IElOVEVS TkFMT0lEKQorCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElE X0ZVTkNUSU9OX0RFRklOSVRJT04pLAorCQkJCQkgZXJybXNnKCJzZXJpYWxpemF0aW9uIGZ1bmN0 aW9ucyBtYXkgYmUgc3BlY2lmaWVkIG9ubHkgd2hlbiB0aGUgYWdncmVnYXRlIHRyYW5zaXRpb24g ZGF0YSB0eXBlIGlzICVzIiwKKwkJCQkJCQlmb3JtYXRfdHlwZV9iZShJTlRFUk5BTE9JRCkpKSk7 CisJfQorCiAJLyoKIAkgKiBJZiBhIG1vdmluZy1hZ2dyZWdhdGUgdHJhbnN0eXBlIGlzIHNwZWNp ZmllZCwgbG9vayB0aGF0IHVwLiAgU2FtZQogCSAqIHJlc3RyaWN0aW9ucyBhcyBmb3IgdHJhbnN0 eXBlLgpAQCAtNDU3LDYgKzQ3NSw4IEBAIERlZmluZUFnZ3JlZ2F0ZShQYXJzZVN0YXRlICpwc3Rh dGUsCiAJCQkJCQkgICBjb21iaW5lZnVuY05hbWUsIC8qIGNvbWJpbmUgZnVuY3Rpb24gbmFtZSAq LwogCQkJCQkJICAgc2VyaWFsZnVuY05hbWUsCS8qIHNlcmlhbCBmdW5jdGlvbiBuYW1lICovCiAJ CQkJCQkgICBkZXNlcmlhbGZ1bmNOYW1lLAkvKiBkZXNlcmlhbCBmdW5jdGlvbiBuYW1lICovCisJ CQkJCQkgICBwYXJ0aWFsY29udmVydGVyZnVuY05hbWUsCS8qIHBhcnRpYWwgY29udmVydGVyIGZ1 bmN0aW9uCisJCQkJCQkJCQkJCQkJICogbmFtZSAqLwogCQkJCQkJICAgbXRyYW5zZnVuY05hbWUs CS8qIGZ3ZCB0cmFucyBmdW5jdGlvbiBuYW1lICovCiAJCQkJCQkgICBtaW52dHJhbnNmdW5jTmFt ZSwJLyogaW52IHRyYW5zIGZ1bmN0aW9uIG5hbWUgKi8KIAkJCQkJCSAgIG1maW5hbGZ1bmNOYW1l LAkvKiBmaW5hbCBmdW5jdGlvbiBuYW1lICovCkBAIC00NzEsNyArNDkxLDggQEAgRGVmaW5lQWdn cmVnYXRlKFBhcnNlU3RhdGUgKnBzdGF0ZSwKIAkJCQkJCSAgIG10cmFuc1NwYWNlLCAvKiB0cmFu c2l0aW9uIHNwYWNlICovCiAJCQkJCQkgICBpbml0dmFsLCAvKiBpbml0aWFsIGNvbmRpdGlvbiAq LwogCQkJCQkJICAgbWluaXR2YWwsCS8qIGluaXRpYWwgY29uZGl0aW9uICovCi0JCQkJCQkgICBw cm9wYXJhbGxlbCk7CS8qIHBhcmFsbGVsIHNhZmU/ICovCisJCQkJCQkgICBwcm9wYXJhbGxlbCwg LyogcGFyYWxsZWwgc2FmZT8gKi8KKwkJCQkJCSAgIHBhcnRpYWxQdXNoZG93blNhZmUpOwkvKiBw YXJ0aWFsIHB1c2hkb3duIHNhZmU/ICovCiB9CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC91dGlscy9hZHQvbnVtZXJpYy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L251bWVyaWMuYwpp bmRleCAxZGU3NDQ4NTVmMy4uMDgxNDgxNjE1YzAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0 aWxzL2FkdC9udW1lcmljLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L251bWVyaWMuYwpA QCAtNTc3MCw2ICs1NzcwLDUyIEBAIGludDhfYXZnX2Rlc2VyaWFsaXplKFBHX0ZVTkNUSU9OX0FS R1MpCiAJUEdfUkVUVVJOX1BPSU5URVIocmVzdWx0KTsKIH0KIAorLyoKKyAqIGludDhfc3VtX3Rv X2ludGVybmFsX3NlcmlhbGl6ZQorICoJCUNvbnZlcnQgaW50OCBhcmd1bWVudCB0byBzZXJpYWxp emVkIGludGVybmFsIHJlcHJlc2VudGF0aW9uCisgKi8KK0RhdHVtCitpbnQ4X3N1bV90b19pbnRl cm5hbF9zZXJpYWxpemUoUEdfRlVOQ1RJT05fQVJHUykKK3sKKwlQb2x5TnVtQWdnU3RhdGUgKnN0 YXRlID0gTlVMTDsKKwlTdHJpbmdJbmZvRGF0YSBidWY7CisJYnl0ZWEJICAgKnJlc3VsdDsKKwlO dW1lcmljVmFyCXRtcF92YXI7CisKKwlzdGF0ZSA9IChJbnQxMjhBZ2dTdGF0ZSAqKSBwYWxsb2Mw KHNpemVvZihJbnQxMjhBZ2dTdGF0ZSkpOworCXN0YXRlLT5jYWxjU3VtWDIgPSBmYWxzZTsKKwor CWlmICghUEdfQVJHSVNOVUxMKDApKQorCXsKKyNpZmRlZiBIQVZFX0lOVDEyOAorCQlkb19pbnQx MjhfYWNjdW0oc3RhdGUsIChpbnQxMjgpIFBHX0dFVEFSR19JTlQ2NCgwKSk7CisjZWxzZQorCQlk b19udW1lcmljX2FjY3VtKHN0YXRlLCBpbnQ2NF90b19udW1lcmljKFBHX0dFVEFSR19JTlQ2NCgw KSkpOworI2VuZGlmCisJfQorCisJaW5pdF92YXIoJnRtcF92YXIpOworCisJcHFfYmVnaW50eXBz ZW5kKCZidWYpOworCisJLyogTiAqLworCXBxX3NlbmRpbnQ2NCgmYnVmLCBzdGF0ZS0+Tik7CisK KwkvKiBzdW1YICovCisjaWZkZWYgSEFWRV9JTlQxMjgKKwlpbnQxMjhfdG9fbnVtZXJpY3Zhcihz dGF0ZS0+c3VtWCwgJnRtcF92YXIpOworI2Vsc2UKKwlhY2N1bV9zdW1fZmluYWwoJnN0YXRlLT5z dW1YLCAmdG1wX3Zhcik7CisjZW5kaWYKKwludW1lcmljdmFyX3NlcmlhbGl6ZSgmYnVmLCAmdG1w X3Zhcik7CisKKwlyZXN1bHQgPSBwcV9lbmR0eXBzZW5kKCZidWYpOworCisJZnJlZV92YXIoJnRt cF92YXIpOworCisJUEdfUkVUVVJOX0JZVEVBX1AocmVzdWx0KTsKK30KKwogLyoKICAqIEludmVy c2UgdHJhbnNpdGlvbiBmdW5jdGlvbnMgdG8gZ28gd2l0aCB0aGUgYWJvdmUuCiAgKi8KQEAgLTU5 OTUsNiArNjA0MSw1NiBAQCBudW1lcmljX3N1bShQR19GVU5DVElPTl9BUkdTKQogCVBHX1JFVFVS Tl9OVU1FUklDKHJlc3VsdCk7CiB9CiAKKy8qCisgKiBudW1lcmljX3N1bV90b19pbnRlcm5hbF9z ZXJpYWxpemUKKyAqCQlDb252ZXJ0IG51bWVyaWMgYXJndW1lbnQgdG8gc2VyaWFsaXplZCBpbnRl cm5hbCByZXByZXNlbnRhdGlvbgorICovCitEYXR1bQorbnVtZXJpY19zdW1fdG9faW50ZXJuYWxf c2VyaWFsaXplKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJTnVtZXJpY0FnZ1N0YXRlICpzdGF0ZSA9 IE5VTEw7CisJU3RyaW5nSW5mb0RhdGEgYnVmOworCWJ5dGVhICAgICAgKnJlc3VsdDsKKwlOdW1l cmljVmFyICAgICAgdG1wX3ZhcjsKKworCXN0YXRlID0gbWFrZU51bWVyaWNBZ2dTdGF0ZUN1cnJl bnRDb250ZXh0KGZhbHNlKTsKKworCWlmICghUEdfQVJHSVNOVUxMKDApKQorCQlkb19udW1lcmlj X2FjY3VtKHN0YXRlLCBQR19HRVRBUkdfTlVNRVJJQygwKSk7CisKKwlpbml0X3ZhcigmdG1wX3Zh cik7CisKKwlwcV9iZWdpbnR5cHNlbmQoJmJ1Zik7CisKKwkvKiBOICovCisJcHFfc2VuZGludDY0 KCZidWYsIHN0YXRlLT5OKTsKKworCS8qIHN1bVggKi8KKwlhY2N1bV9zdW1fZmluYWwoJnN0YXRl LT5zdW1YLCAmdG1wX3Zhcik7CisJbnVtZXJpY3Zhcl9zZXJpYWxpemUoJmJ1ZiwgJnRtcF92YXIp OworCisJLyogbWF4U2NhbGUgKi8KKwlwcV9zZW5kaW50MzIoJmJ1Ziwgc3RhdGUtPm1heFNjYWxl KTsKKworCS8qIG1heFNjYWxlQ291bnQgKi8KKwlwcV9zZW5kaW50NjQoJmJ1Ziwgc3RhdGUtPm1h eFNjYWxlQ291bnQpOworCisJLyogTmFOY291bnQgKi8KKwlwcV9zZW5kaW50NjQoJmJ1Ziwgc3Rh dGUtPk5hTmNvdW50KTsKKworCS8qIHBJbmZjb3VudCAqLworCXBxX3NlbmRpbnQ2NCgmYnVmLCBz dGF0ZS0+cEluZmNvdW50KTsKKworCS8qIG5JbmZjb3VudCAqLworCXBxX3NlbmRpbnQ2NCgmYnVm LCBzdGF0ZS0+bkluZmNvdW50KTsKKworCXJlc3VsdCA9IHBxX2VuZHR5cHNlbmQoJmJ1Zik7CisK KwlmcmVlX3ZhcigmdG1wX3Zhcik7CisKKwlQR19SRVRVUk5fQllURUFfUChyZXN1bHQpOworfQor CiAvKgogICogV29ya2hvcnNlIHJvdXRpbmUgZm9yIHRoZSBzdGFuZGFyZCBkZXZpYW5jZSBhbmQg dmFyaWFuY2UKICAqIGFnZ3JlZ2F0ZXMuICdzdGF0ZScgaXMgYWdncmVnYXRlJ3MgdHJhbnNpdGlv biBzdGF0ZS4KZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMgYi9zcmMvYmlu L3BnX2R1bXAvcGdfZHVtcC5jCmluZGV4IGE0ODVmYjJkMDcwLi5hZjM3NjhmOWU2ZSAxMDA2NDQK LS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYworKysgYi9zcmMvYmluL3BnX2R1bXAvcGdf ZHVtcC5jCkBAIC0xNDIyNCwxMSArMTQyMjQsMTMgQEAgZHVtcEFnZyhBcmNoaXZlICpmb3V0LCBj b25zdCBBZ2dJbmZvICphZ2dpbmZvKQogCWNvbnN0IGNoYXIgKmFnZ2NvbWJpbmVmbjsKIAljb25z dCBjaGFyICphZ2dzZXJpYWxmbjsKIAljb25zdCBjaGFyICphZ2dkZXNlcmlhbGZuOworCWNvbnN0 IGNoYXIgKmFnZ3BhcnRpYWxjb252ZXJ0ZXJmbjsKIAljb25zdCBjaGFyICphZ2dtdHJhbnNmbjsK IAljb25zdCBjaGFyICphZ2dtaW52dHJhbnNmbjsKIAljb25zdCBjaGFyICphZ2dtZmluYWxmbjsK IAlib29sCQlhZ2dmaW5hbGV4dHJhOwogCWJvb2wJCWFnZ21maW5hbGV4dHJhOworCWJvb2wJCWFn Z3BhcnRpYWxwdXNoZG93bnNhZmU7CiAJY2hhcgkJYWdnZmluYWxtb2RpZnk7CiAJY2hhcgkJYWdn bWZpbmFsbW9kaWZ5OwogCWNvbnN0IGNoYXIgKmFnZ3NvcnRvcDsKQEAgLTE0MzEzLDExICsxNDMx NSwxOSBAQCBkdW1wQWdnKEFyY2hpdmUgKmZvdXQsIGNvbnN0IEFnZ0luZm8gKmFnZ2luZm8pCiAJ aWYgKGZvdXQtPnJlbW90ZVZlcnNpb24gPj0gMTEwMDAwKQogCQlhcHBlbmRQUUV4cEJ1ZmZlclN0 cihxdWVyeSwKIAkJCQkJCQkgImFnZ2ZpbmFsbW9kaWZ5LFxuIgotCQkJCQkJCSAiYWdnbWZpbmFs bW9kaWZ5XG4iKTsKKwkJCQkJCQkgImFnZ21maW5hbG1vZGlmeSxcbiIpOwogCWVsc2UKIAkJYXBw ZW5kUFFFeHBCdWZmZXJTdHIocXVlcnksCiAJCQkJCQkJICInMCcgQVMgYWdnZmluYWxtb2RpZnks XG4iCi0JCQkJCQkJICInMCcgQVMgYWdnbWZpbmFsbW9kaWZ5XG4iKTsKKwkJCQkJCQkgIicwJyBB UyBhZ2dtZmluYWxtb2RpZnksXG4iKTsKKwlpZiAoZm91dC0+cmVtb3RlVmVyc2lvbiA+PSAxNTAw MDApCisJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKHF1ZXJ5LAorCQkJCQkJCSAiYWdncGFydGlhbGNv bnZlcnRlcmZuLFxuIgorCQkJCQkJCSAiYWdncGFydGlhbHB1c2hkb3duc2FmZVxuIik7CisJZWxz ZQorCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihxdWVyeSwKKwkJCQkJCQkgIicwJyBBUyBhZ2dwYXJ0 aWFsY29udmVydGVyZm4sXG4iCisJCQkJCQkJICJmYWxzZSBhcyBhZ2dwYXJ0aWFscHVzaGRvd25z YWZlXG4iKTsKIAogCWFwcGVuZFBRRXhwQnVmZmVyKHF1ZXJ5LAogCQkJCQkgICJGUk9NIHBnX2Nh dGFsb2cucGdfYWdncmVnYXRlIGEsIHBnX2NhdGFsb2cucGdfcHJvYyBwICIKQEAgLTE0MzM1LDYg KzE0MzQ1LDggQEAgZHVtcEFnZyhBcmNoaXZlICpmb3V0LCBjb25zdCBBZ2dJbmZvICphZ2dpbmZv KQogCWFnZ2NvbWJpbmVmbiA9IFBRZ2V0dmFsdWUocmVzLCAwLCBQUWZudW1iZXIocmVzLCAiYWdn Y29tYmluZWZuIikpOwogCWFnZ3NlcmlhbGZuID0gUFFnZXR2YWx1ZShyZXMsIDAsIFBRZm51bWJl cihyZXMsICJhZ2dzZXJpYWxmbiIpKTsKIAlhZ2dkZXNlcmlhbGZuID0gUFFnZXR2YWx1ZShyZXMs IDAsIFBRZm51bWJlcihyZXMsICJhZ2dkZXNlcmlhbGZuIikpOworCWFnZ3BhcnRpYWxjb252ZXJ0 ZXJmbiA9IFBRZ2V0dmFsdWUocmVzLCAwLCBQUWZudW1iZXIocmVzLCAiYWdncGFydGlhbGNvbnZl cnRlcmZuIikpOworCWFnZ3BhcnRpYWxwdXNoZG93bnNhZmUgPSAoUFFnZXR2YWx1ZShyZXMsIDAs IFBRZm51bWJlcihyZXMsICJhZ2dwYXJ0aWFscHVzaGRvd25zYWZlIikpWzBdID09ICd0Jyk7CiAJ YWdnbXRyYW5zZm4gPSBQUWdldHZhbHVlKHJlcywgMCwgUFFmbnVtYmVyKHJlcywgImFnZ210cmFu c2ZuIikpOwogCWFnZ21pbnZ0cmFuc2ZuID0gUFFnZXR2YWx1ZShyZXMsIDAsIFBRZm51bWJlcihy ZXMsICJhZ2dtaW52dHJhbnNmbiIpKTsKIAlhZ2dtZmluYWxmbiA9IFBRZ2V0dmFsdWUocmVzLCAw LCBQUWZudW1iZXIocmVzLCAiYWdnbWZpbmFsZm4iKSk7CkBAIC0xNDQyOSw2ICsxNDQ0MSwxMSBA QCBkdW1wQWdnKEFyY2hpdmUgKmZvdXQsIGNvbnN0IEFnZ0luZm8gKmFnZ2luZm8pCiAJaWYgKHN0 cmNtcChhZ2dkZXNlcmlhbGZuLCAiLSIpICE9IDApCiAJCWFwcGVuZFBRRXhwQnVmZmVyKGRldGFp bHMsICIsXG4gICAgREVTRVJJQUxGVU5DID0gJXMiLCBhZ2dkZXNlcmlhbGZuKTsKIAorCWlmIChz dHJjbXAoYWdncGFydGlhbGNvbnZlcnRlcmZuLCAiLSIpICE9IDApCisJCWFwcGVuZFBRRXhwQnVm ZmVyKGRldGFpbHMsICIsXG4gICAgUEFSVElBTENPTlZFUlRFUkZVTkMgPSAlcyIsIGFnZ3BhcnRp YWxjb252ZXJ0ZXJmbik7CisJaWYgKGFnZ3BhcnRpYWxwdXNoZG93bnNhZmUpCisJCWFwcGVuZFBR RXhwQnVmZmVyU3RyKGRldGFpbHMsICIsXG4gICAgUEFSVElBTF9QVVNIRE9XTl9TQUZFIik7CisK IAlpZiAoc3RyY21wKGFnZ210cmFuc2ZuLCAiLSIpICE9IDApCiAJewogCQlhcHBlbmRQUUV4cEJ1 ZmZlcihkZXRhaWxzLCAiLFxuICAgIE1TRlVOQyA9ICVzLFxuICAgIE1JTlZGVU5DID0gJXMsXG4g ICAgTVNUWVBFID0gJXMiLApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9jYXR2ZXJz aW9uLmggYi9zcmMvaW5jbHVkZS9jYXRhbG9nL2NhdHZlcnNpb24uaAppbmRleCAzMjUzYjg3NTFi MS4uMTg3YzgxYjQ4NTcgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvY2F0dmVyc2lv bi5oCisrKyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvY2F0dmVyc2lvbi5oCkBAIC01Myw2ICs1Myw2 IEBACiAgKi8KIAogLyoJCQkJCQkJeXl5eW1tZGROICovCi0jZGVmaW5lIENBVEFMT0dfVkVSU0lP Tl9OTwkyMDIxMDkxMDEKKyNkZWZpbmUgQ0FUQUxPR19WRVJTSU9OX05PCTIwMjExMDE5MQogCiAj ZW5kaWYKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfYWdncmVnYXRlLmRhdCBi L3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfYWdncmVnYXRlLmRhdAppbmRleCBmYzZkM2JmZDk0NS4u NjFjNGQ4MTJiMzQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfYWdncmVnYXRl LmRhdAorKysgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX2FnZ3JlZ2F0ZS5kYXQKQEAgLTU2LDI2 ICs1NiwyNyBAQAogICBhZ2dzZXJpYWxmbiA9PiAnaW50OF9hdmdfc2VyaWFsaXplJywgYWdnZGVz ZXJpYWxmbiA9PiAnaW50OF9hdmdfZGVzZXJpYWxpemUnLAogICBhZ2dtdHJhbnNmbiA9PiAnaW50 OF9hdmdfYWNjdW0nLCBhZ2dtaW52dHJhbnNmbiA9PiAnaW50OF9hdmdfYWNjdW1faW52JywKICAg YWdnbWZpbmFsZm4gPT4gJ251bWVyaWNfcG9seV9zdW0nLCBhZ2d0cmFuc3R5cGUgPT4gJ2ludGVy bmFsJywKLSAgYWdndHJhbnNzcGFjZSA9PiAnNDgnLCBhZ2dtdHJhbnN0eXBlID0+ICdpbnRlcm5h bCcsIGFnZ210cmFuc3NwYWNlID0+ICc0OCcgfSwKKyAgYWdndHJhbnNzcGFjZSA9PiAnNDgnLCBh Z2dtdHJhbnN0eXBlID0+ICdpbnRlcm5hbCcsIGFnZ210cmFuc3NwYWNlID0+ICc0OCcsCisgIGFn Z3BhcnRpYWxjb252ZXJ0ZXJmbiA9PiAnaW50OF9zdW1fdG9faW50ZXJuYWxfc2VyaWFsaXplJywg YWdncGFydGlhbHB1c2hkb3duc2FmZSA9PiAndCcgfSwKIHsgYWdnZm5vaWQgPT4gJ3N1bShpbnQ0 KScsIGFnZ3RyYW5zZm4gPT4gJ2ludDRfc3VtJywgYWdnY29tYmluZWZuID0+ICdpbnQ4cGwnLAog ICBhZ2dtdHJhbnNmbiA9PiAnaW50NF9hdmdfYWNjdW0nLCBhZ2dtaW52dHJhbnNmbiA9PiAnaW50 NF9hdmdfYWNjdW1faW52JywKICAgYWdnbWZpbmFsZm4gPT4gJ2ludDJpbnQ0X3N1bScsIGFnZ3Ry YW5zdHlwZSA9PiAnaW50OCcsCi0gIGFnZ210cmFuc3R5cGUgPT4gJ19pbnQ4JywgYWdnbWluaXR2 YWwgPT4gJ3swLDB9JyB9LAorICBhZ2dtdHJhbnN0eXBlID0+ICdfaW50OCcsIGFnZ21pbml0dmFs ID0+ICd7MCwwfScsIGFnZ3BhcnRpYWxwdXNoZG93bnNhZmUgPT4gJ3QnIH0sCiB7IGFnZ2Zub2lk ID0+ICdzdW0oaW50MiknLCBhZ2d0cmFuc2ZuID0+ICdpbnQyX3N1bScsIGFnZ2NvbWJpbmVmbiA9 PiAnaW50OHBsJywKICAgYWdnbXRyYW5zZm4gPT4gJ2ludDJfYXZnX2FjY3VtJywgYWdnbWludnRy YW5zZm4gPT4gJ2ludDJfYXZnX2FjY3VtX2ludicsCiAgIGFnZ21maW5hbGZuID0+ICdpbnQyaW50 NF9zdW0nLCBhZ2d0cmFuc3R5cGUgPT4gJ2ludDgnLAotICBhZ2dtdHJhbnN0eXBlID0+ICdfaW50 OCcsIGFnZ21pbml0dmFsID0+ICd7MCwwfScgfSwKKyAgYWdnbXRyYW5zdHlwZSA9PiAnX2ludDgn LCBhZ2dtaW5pdHZhbCA9PiAnezAsMH0nLCBhZ2dwYXJ0aWFscHVzaGRvd25zYWZlID0+ICd0JyB9 LAogeyBhZ2dmbm9pZCA9PiAnc3VtKGZsb2F0NCknLCBhZ2d0cmFuc2ZuID0+ICdmbG9hdDRwbCcs Ci0gIGFnZ2NvbWJpbmVmbiA9PiAnZmxvYXQ0cGwnLCBhZ2d0cmFuc3R5cGUgPT4gJ2Zsb2F0NCcg fSwKKyAgYWdnY29tYmluZWZuID0+ICdmbG9hdDRwbCcsIGFnZ3RyYW5zdHlwZSA9PiAnZmxvYXQ0 JywgYWdncGFydGlhbHB1c2hkb3duc2FmZSA9PiAndCcgfSwKIHsgYWdnZm5vaWQgPT4gJ3N1bShm bG9hdDgpJywgYWdndHJhbnNmbiA9PiAnZmxvYXQ4cGwnLAotICBhZ2djb21iaW5lZm4gPT4gJ2Zs b2F0OHBsJywgYWdndHJhbnN0eXBlID0+ICdmbG9hdDgnIH0sCisgIGFnZ2NvbWJpbmVmbiA9PiAn ZmxvYXQ4cGwnLCBhZ2d0cmFuc3R5cGUgPT4gJ2Zsb2F0OCcsIGFnZ3BhcnRpYWxwdXNoZG93bnNh ZmUgPT4gJ3QnIH0sCiB7IGFnZ2Zub2lkID0+ICdzdW0obW9uZXkpJywgYWdndHJhbnNmbiA9PiAn Y2FzaF9wbCcsIGFnZ2NvbWJpbmVmbiA9PiAnY2FzaF9wbCcsCiAgIGFnZ210cmFuc2ZuID0+ICdj YXNoX3BsJywgYWdnbWludnRyYW5zZm4gPT4gJ2Nhc2hfbWknLAotICBhZ2d0cmFuc3R5cGUgPT4g J21vbmV5JywgYWdnbXRyYW5zdHlwZSA9PiAnbW9uZXknIH0sCisgIGFnZ3RyYW5zdHlwZSA9PiAn bW9uZXknLCBhZ2dtdHJhbnN0eXBlID0+ICdtb25leScsIGFnZ3BhcnRpYWxwdXNoZG93bnNhZmUg PT4gJ3QnIH0sCiB7IGFnZ2Zub2lkID0+ICdzdW0oaW50ZXJ2YWwpJywgYWdndHJhbnNmbiA9PiAn aW50ZXJ2YWxfcGwnLAogICBhZ2djb21iaW5lZm4gPT4gJ2ludGVydmFsX3BsJywgYWdnbXRyYW5z Zm4gPT4gJ2ludGVydmFsX3BsJywKICAgYWdnbWludnRyYW5zZm4gPT4gJ2ludGVydmFsX21pJywg YWdndHJhbnN0eXBlID0+ICdpbnRlcnZhbCcsCi0gIGFnZ210cmFuc3R5cGUgPT4gJ2ludGVydmFs JyB9LAorICBhZ2dtdHJhbnN0eXBlID0+ICdpbnRlcnZhbCcsIGFnZ3BhcnRpYWxwdXNoZG93bnNh ZmUgPT4gJ3QnIH0sCiB7IGFnZ2Zub2lkID0+ICdzdW0obnVtZXJpYyknLCBhZ2d0cmFuc2ZuID0+ ICdudW1lcmljX2F2Z19hY2N1bScsCiAgIGFnZ2ZpbmFsZm4gPT4gJ251bWVyaWNfc3VtJywgYWdn Y29tYmluZWZuID0+ICdudW1lcmljX2F2Z19jb21iaW5lJywKICAgYWdnc2VyaWFsZm4gPT4gJ251 bWVyaWNfYXZnX3NlcmlhbGl6ZScsCkBAIC04MywxNDYgKzg0LDE0OSBAQAogICBhZ2dtdHJhbnNm biA9PiAnbnVtZXJpY19hdmdfYWNjdW0nLCBhZ2dtaW52dHJhbnNmbiA9PiAnbnVtZXJpY19hY2N1 bV9pbnYnLAogICBhZ2dtZmluYWxmbiA9PiAnbnVtZXJpY19zdW0nLCBhZ2d0cmFuc3R5cGUgPT4g J2ludGVybmFsJywKICAgYWdndHJhbnNzcGFjZSA9PiAnMTI4JywgYWdnbXRyYW5zdHlwZSA9PiAn aW50ZXJuYWwnLAotICBhZ2dtdHJhbnNzcGFjZSA9PiAnMTI4JyB9LAorICBhZ2dtdHJhbnNzcGFj ZSA9PiAnMTI4JywgYWdncGFydGlhbGNvbnZlcnRlcmZuID0+ICdudW1lcmljX3N1bV90b19pbnRl cm5hbF9zZXJpYWxpemUnLCBhZ2dwYXJ0aWFscHVzaGRvd25zYWZlID0+ICd0JyB9LAogCiAjIG1h eAogeyBhZ2dmbm9pZCA9PiAnbWF4KGludDgpJywgYWdndHJhbnNmbiA9PiAnaW50OGxhcmdlcics CiAgIGFnZ2NvbWJpbmVmbiA9PiAnaW50OGxhcmdlcicsIGFnZ3NvcnRvcCA9PiAnPihpbnQ4LGlu dDgpJywKLSAgYWdndHJhbnN0eXBlID0+ICdpbnQ4JyB9LAorICBhZ2d0cmFuc3R5cGUgPT4gJ2lu dDgnLCBhZ2dwYXJ0aWFscHVzaGRvd25zYWZlID0+ICd0JyB9LAogeyBhZ2dmbm9pZCA9PiAnbWF4 KGludDQpJywgYWdndHJhbnNmbiA9PiAnaW50NGxhcmdlcicsCiAgIGFnZ2NvbWJpbmVmbiA9PiAn aW50NGxhcmdlcicsIGFnZ3NvcnRvcCA9PiAnPihpbnQ0LGludDQpJywKLSAgYWdndHJhbnN0eXBl ID0+ICdpbnQ0JyB9LAorICBhZ2d0cmFuc3R5cGUgPT4gJ2ludDQnLCBhZ2dwYXJ0aWFscHVzaGRv d25zYWZlID0+ICd0JyB9LAogeyBhZ2dmbm9pZCA9PiAnbWF4KGludDIpJywgYWdndHJhbnNmbiA9 PiAnaW50MmxhcmdlcicsCiAgIGFnZ2NvbWJpbmVmbiA9PiAnaW50MmxhcmdlcicsIGFnZ3NvcnRv cCA9PiAnPihpbnQyLGludDIpJywKLSAgYWdndHJhbnN0eXBlID0+ICdpbnQyJyB9LAorICBhZ2d0 cmFuc3R5cGUgPT4gJ2ludDInLCBhZ2dwYXJ0aWFscHVzaGRvd25zYWZlID0+ICd0JyB9LAogeyBh Z2dmbm9pZCA9PiAnbWF4KG9pZCknLCBhZ2d0cmFuc2ZuID0+ICdvaWRsYXJnZXInLAogICBhZ2dj b21iaW5lZm4gPT4gJ29pZGxhcmdlcicsIGFnZ3NvcnRvcCA9PiAnPihvaWQsb2lkKScsCi0gIGFn Z3RyYW5zdHlwZSA9PiAnb2lkJyB9LAorICBhZ2d0cmFuc3R5cGUgPT4gJ29pZCcsIGFnZ3BhcnRp YWxwdXNoZG93bnNhZmUgPT4gJ3QnIH0sCiB7IGFnZ2Zub2lkID0+ICdtYXgoZmxvYXQ0KScsIGFn Z3RyYW5zZm4gPT4gJ2Zsb2F0NGxhcmdlcicsCiAgIGFnZ2NvbWJpbmVmbiA9PiAnZmxvYXQ0bGFy Z2VyJywgYWdnc29ydG9wID0+ICc+KGZsb2F0NCxmbG9hdDQpJywKLSAgYWdndHJhbnN0eXBlID0+ ICdmbG9hdDQnIH0sCisgIGFnZ3RyYW5zdHlwZSA9PiAnZmxvYXQ0JywgYWdncGFydGlhbHB1c2hk b3duc2FmZSA9PiAndCcgfSwKIHsgYWdnZm5vaWQgPT4gJ21heChmbG9hdDgpJywgYWdndHJhbnNm biA9PiAnZmxvYXQ4bGFyZ2VyJywKICAgYWdnY29tYmluZWZuID0+ICdmbG9hdDhsYXJnZXInLCBh Z2dzb3J0b3AgPT4gJz4oZmxvYXQ4LGZsb2F0OCknLAotICBhZ2d0cmFuc3R5cGUgPT4gJ2Zsb2F0 OCcgfSwKKyAgYWdndHJhbnN0eXBlID0+ICdmbG9hdDgnLCBhZ2dwYXJ0aWFscHVzaGRvd25zYWZl ID0+ICd0JyB9LAogeyBhZ2dmbm9pZCA9PiAnbWF4KGRhdGUpJywgYWdndHJhbnNmbiA9PiAnZGF0 ZV9sYXJnZXInLAogICBhZ2djb21iaW5lZm4gPT4gJ2RhdGVfbGFyZ2VyJywgYWdnc29ydG9wID0+ ICc+KGRhdGUsZGF0ZSknLAotICBhZ2d0cmFuc3R5cGUgPT4gJ2RhdGUnIH0sCisgIGFnZ3RyYW5z dHlwZSA9PiAnZGF0ZScsIGFnZ3BhcnRpYWxwdXNoZG93bnNhZmUgPT4gJ3QnIH0sCiB7IGFnZ2Zu b2lkID0+ICdtYXgodGltZSknLCBhZ2d0cmFuc2ZuID0+ICd0aW1lX2xhcmdlcicsCiAgIGFnZ2Nv bWJpbmVmbiA9PiAndGltZV9sYXJnZXInLCBhZ2dzb3J0b3AgPT4gJz4odGltZSx0aW1lKScsCi0g IGFnZ3RyYW5zdHlwZSA9PiAndGltZScgfSwKKyAgYWdndHJhbnN0eXBlID0+ICd0aW1lJywgYWdn cGFydGlhbHB1c2hkb3duc2FmZSA9PiAndCcgfSwKIHsgYWdnZm5vaWQgPT4gJ21heCh0aW1ldHop JywgYWdndHJhbnNmbiA9PiAndGltZXR6X2xhcmdlcicsCiAgIGFnZ2NvbWJpbmVmbiA9PiAndGlt ZXR6X2xhcmdlcicsIGFnZ3NvcnRvcCA9PiAnPih0aW1ldHosdGltZXR6KScsCi0gIGFnZ3RyYW5z dHlwZSA9PiAndGltZXR6JyB9LAorICBhZ2d0cmFuc3R5cGUgPT4gJ3RpbWV0eicsIGFnZ3BhcnRp YWxwdXNoZG93bnNhZmUgPT4gJ3QnIH0sCiB7IGFnZ2Zub2lkID0+ICdtYXgobW9uZXkpJywgYWdn dHJhbnNmbiA9PiAnY2FzaGxhcmdlcicsCiAgIGFnZ2NvbWJpbmVmbiA9PiAnY2FzaGxhcmdlcics IGFnZ3NvcnRvcCA9PiAnPihtb25leSxtb25leSknLAotICBhZ2d0cmFuc3R5cGUgPT4gJ21vbmV5 JyB9LAorICBhZ2d0cmFuc3R5cGUgPT4gJ21vbmV5JywgYWdncGFydGlhbHB1c2hkb3duc2FmZSA9 PiAndCcgfSwKIHsgYWdnZm5vaWQgPT4gJ21heCh0aW1lc3RhbXApJywgYWdndHJhbnNmbiA9PiAn dGltZXN0YW1wX2xhcmdlcicsCiAgIGFnZ2NvbWJpbmVmbiA9PiAndGltZXN0YW1wX2xhcmdlcics IGFnZ3NvcnRvcCA9PiAnPih0aW1lc3RhbXAsdGltZXN0YW1wKScsCi0gIGFnZ3RyYW5zdHlwZSA9 PiAndGltZXN0YW1wJyB9LAorICBhZ2d0cmFuc3R5cGUgPT4gJ3RpbWVzdGFtcCcsIGFnZ3BhcnRp YWxwdXNoZG93bnNhZmUgPT4gJ3QnIH0sCiB7IGFnZ2Zub2lkID0+ICdtYXgodGltZXN0YW1wdHop JywgYWdndHJhbnNmbiA9PiAndGltZXN0YW1wdHpfbGFyZ2VyJywKICAgYWdnY29tYmluZWZuID0+ ICd0aW1lc3RhbXB0el9sYXJnZXInLAogICBhZ2dzb3J0b3AgPT4gJz4odGltZXN0YW1wdHosdGlt ZXN0YW1wdHopJywgYWdndHJhbnN0eXBlID0+ICd0aW1lc3RhbXB0eicgfSwKIHsgYWdnZm5vaWQg PT4gJ21heChpbnRlcnZhbCknLCBhZ2d0cmFuc2ZuID0+ICdpbnRlcnZhbF9sYXJnZXInLAogICBh Z2djb21iaW5lZm4gPT4gJ2ludGVydmFsX2xhcmdlcicsIGFnZ3NvcnRvcCA9PiAnPihpbnRlcnZh bCxpbnRlcnZhbCknLAotICBhZ2d0cmFuc3R5cGUgPT4gJ2ludGVydmFsJyB9LAorICBhZ2d0cmFu c3R5cGUgPT4gJ2ludGVydmFsJywgYWdncGFydGlhbHB1c2hkb3duc2FmZSA9PiAndCcgfSwKIHsg YWdnZm5vaWQgPT4gJ21heCh0ZXh0KScsIGFnZ3RyYW5zZm4gPT4gJ3RleHRfbGFyZ2VyJywKICAg YWdnY29tYmluZWZuID0+ICd0ZXh0X2xhcmdlcicsIGFnZ3NvcnRvcCA9PiAnPih0ZXh0LHRleHQp JywKLSAgYWdndHJhbnN0eXBlID0+ICd0ZXh0JyB9LAorICBhZ2d0cmFuc3R5cGUgPT4gJ3RleHQn LCBhZ2dwYXJ0aWFscHVzaGRvd25zYWZlID0+ICd0JyB9LAogeyBhZ2dmbm9pZCA9PiAnbWF4KG51 bWVyaWMpJywgYWdndHJhbnNmbiA9PiAnbnVtZXJpY19sYXJnZXInLAogICBhZ2djb21iaW5lZm4g PT4gJ251bWVyaWNfbGFyZ2VyJywgYWdnc29ydG9wID0+ICc+KG51bWVyaWMsbnVtZXJpYyknLAot ICBhZ2d0cmFuc3R5cGUgPT4gJ251bWVyaWMnIH0sCisgIGFnZ3RyYW5zdHlwZSA9PiAnbnVtZXJp YycsIGFnZ3BhcnRpYWxwdXNoZG93bnNhZmUgPT4gJ3QnIH0sCiB7IGFnZ2Zub2lkID0+ICdtYXgo YW55YXJyYXkpJywgYWdndHJhbnNmbiA9PiAnYXJyYXlfbGFyZ2VyJywKICAgYWdnY29tYmluZWZu ID0+ICdhcnJheV9sYXJnZXInLCBhZ2dzb3J0b3AgPT4gJz4oYW55YXJyYXksYW55YXJyYXkpJywK LSAgYWdndHJhbnN0eXBlID0+ICdhbnlhcnJheScgfSwKKyAgYWdndHJhbnN0eXBlID0+ICdhbnlh cnJheScsIGFnZ3BhcnRpYWxwdXNoZG93bnNhZmUgPT4gJ3QnIH0sCiB7IGFnZ2Zub2lkID0+ICdt YXgoYnBjaGFyKScsIGFnZ3RyYW5zZm4gPT4gJ2JwY2hhcl9sYXJnZXInLAogICBhZ2djb21iaW5l Zm4gPT4gJ2JwY2hhcl9sYXJnZXInLCBhZ2dzb3J0b3AgPT4gJz4oYnBjaGFyLGJwY2hhciknLAot ICBhZ2d0cmFuc3R5cGUgPT4gJ2JwY2hhcicgfSwKKyAgYWdndHJhbnN0eXBlID0+ICdicGNoYXIn LCBhZ2dwYXJ0aWFscHVzaGRvd25zYWZlID0+ICd0JyB9LAogeyBhZ2dmbm9pZCA9PiAnbWF4KHRp ZCknLCBhZ2d0cmFuc2ZuID0+ICd0aWRsYXJnZXInLAogICBhZ2djb21iaW5lZm4gPT4gJ3RpZGxh cmdlcicsIGFnZ3NvcnRvcCA9PiAnPih0aWQsdGlkKScsCi0gIGFnZ3RyYW5zdHlwZSA9PiAndGlk JyB9LAorICBhZ2d0cmFuc3R5cGUgPT4gJ3RpZCcsIGFnZ3BhcnRpYWxwdXNoZG93bnNhZmUgPT4g J3QnIH0sCiB7IGFnZ2Zub2lkID0+ICdtYXgoYW55ZW51bSknLCBhZ2d0cmFuc2ZuID0+ICdlbnVt X2xhcmdlcicsCiAgIGFnZ2NvbWJpbmVmbiA9PiAnZW51bV9sYXJnZXInLCBhZ2dzb3J0b3AgPT4g Jz4oYW55ZW51bSxhbnllbnVtKScsCi0gIGFnZ3RyYW5zdHlwZSA9PiAnYW55ZW51bScgfSwKKyAg YWdndHJhbnN0eXBlID0+ICdhbnllbnVtJywgYWdncGFydGlhbHB1c2hkb3duc2FmZSA9PiAndCcg fSwKIHsgYWdnZm5vaWQgPT4gJ21heChpbmV0KScsIGFnZ3RyYW5zZm4gPT4gJ25ldHdvcmtfbGFy Z2VyJywKICAgYWdnY29tYmluZWZuID0+ICduZXR3b3JrX2xhcmdlcicsIGFnZ3NvcnRvcCA9PiAn PihpbmV0LGluZXQpJywKLSAgYWdndHJhbnN0eXBlID0+ICdpbmV0JyB9LAorICBhZ2d0cmFuc3R5 cGUgPT4gJ2luZXQnLCBhZ2dwYXJ0aWFscHVzaGRvd25zYWZlID0+ICd0JyB9LAogeyBhZ2dmbm9p ZCA9PiAnbWF4KHBnX2xzbiknLCBhZ2d0cmFuc2ZuID0+ICdwZ19sc25fbGFyZ2VyJywKICAgYWdn Y29tYmluZWZuID0+ICdwZ19sc25fbGFyZ2VyJywgYWdnc29ydG9wID0+ICc+KHBnX2xzbixwZ19s c24pJywKLSAgYWdndHJhbnN0eXBlID0+ICdwZ19sc24nIH0sCisgIGFnZ3RyYW5zdHlwZSA9PiAn cGdfbHNuJywgYWdncGFydGlhbHB1c2hkb3duc2FmZSA9PiAndCcgfSwKIAogIyBtaW4KIHsgYWdn Zm5vaWQgPT4gJ21pbihpbnQ4KScsIGFnZ3RyYW5zZm4gPT4gJ2ludDhzbWFsbGVyJywKICAgYWdn Y29tYmluZWZuID0+ICdpbnQ4c21hbGxlcicsIGFnZ3NvcnRvcCA9PiAnPChpbnQ4LGludDgpJywK LSAgYWdndHJhbnN0eXBlID0+ICdpbnQ4JyB9LAorICBhZ2d0cmFuc3R5cGUgPT4gJ2ludDgnLCBh Z2dwYXJ0aWFscHVzaGRvd25zYWZlID0+ICd0JyB9LAogeyBhZ2dmbm9pZCA9PiAnbWluKGludDQp JywgYWdndHJhbnNmbiA9PiAnaW50NHNtYWxsZXInLAogICBhZ2djb21iaW5lZm4gPT4gJ2ludDRz bWFsbGVyJywgYWdnc29ydG9wID0+ICc8KGludDQsaW50NCknLAotICBhZ2d0cmFuc3R5cGUgPT4g J2ludDQnIH0sCisgIGFnZ3RyYW5zdHlwZSA9PiAnaW50NCcsIGFnZ3BhcnRpYWxwdXNoZG93bnNh ZmUgPT4gJ3QnIH0sCiB7IGFnZ2Zub2lkID0+ICdtaW4oaW50MiknLCBhZ2d0cmFuc2ZuID0+ICdp bnQyc21hbGxlcicsCiAgIGFnZ2NvbWJpbmVmbiA9PiAnaW50MnNtYWxsZXInLCBhZ2dzb3J0b3Ag PT4gJzwoaW50MixpbnQyKScsCi0gIGFnZ3RyYW5zdHlwZSA9PiAnaW50MicgfSwKKyAgYWdndHJh bnN0eXBlID0+ICdpbnQyJywgYWdncGFydGlhbHB1c2hkb3duc2FmZSA9PiAndCcgfSwKIHsgYWdn Zm5vaWQgPT4gJ21pbihvaWQpJywgYWdndHJhbnNmbiA9PiAnb2lkc21hbGxlcicsCiAgIGFnZ2Nv bWJpbmVmbiA9PiAnb2lkc21hbGxlcicsIGFnZ3NvcnRvcCA9PiAnPChvaWQsb2lkKScsCi0gIGFn Z3RyYW5zdHlwZSA9PiAnb2lkJyB9LAorICBhZ2d0cmFuc3R5cGUgPT4gJ29pZCcsIGFnZ3BhcnRp YWxwdXNoZG93bnNhZmUgPT4gJ3QnIH0sCiB7IGFnZ2Zub2lkID0+ICdtaW4oZmxvYXQ0KScsIGFn Z3RyYW5zZm4gPT4gJ2Zsb2F0NHNtYWxsZXInLAogICBhZ2djb21iaW5lZm4gPT4gJ2Zsb2F0NHNt YWxsZXInLCBhZ2dzb3J0b3AgPT4gJzwoZmxvYXQ0LGZsb2F0NCknLAotICBhZ2d0cmFuc3R5cGUg PT4gJ2Zsb2F0NCcgfSwKKyAgYWdndHJhbnN0eXBlID0+ICdmbG9hdDQnLCBhZ2dwYXJ0aWFscHVz aGRvd25zYWZlID0+ICd0JyB9LAogeyBhZ2dmbm9pZCA9PiAnbWluKGZsb2F0OCknLCBhZ2d0cmFu c2ZuID0+ICdmbG9hdDhzbWFsbGVyJywKICAgYWdnY29tYmluZWZuID0+ICdmbG9hdDhzbWFsbGVy JywgYWdnc29ydG9wID0+ICc8KGZsb2F0OCxmbG9hdDgpJywKLSAgYWdndHJhbnN0eXBlID0+ICdm bG9hdDgnIH0sCisgIGFnZ3RyYW5zdHlwZSA9PiAnZmxvYXQ4JywgYWdncGFydGlhbHB1c2hkb3du c2FmZSA9PiAndCcgfSwKIHsgYWdnZm5vaWQgPT4gJ21pbihkYXRlKScsIGFnZ3RyYW5zZm4gPT4g J2RhdGVfc21hbGxlcicsCiAgIGFnZ2NvbWJpbmVmbiA9PiAnZGF0ZV9zbWFsbGVyJywgYWdnc29y dG9wID0+ICc8KGRhdGUsZGF0ZSknLAotICBhZ2d0cmFuc3R5cGUgPT4gJ2RhdGUnIH0sCisgIGFn Z3RyYW5zdHlwZSA9PiAnZGF0ZScsIGFnZ3BhcnRpYWxwdXNoZG93bnNhZmUgPT4gJ3QnIH0sCiB7 IGFnZ2Zub2lkID0+ICdtaW4odGltZSknLCBhZ2d0cmFuc2ZuID0+ICd0aW1lX3NtYWxsZXInLAog ICBhZ2djb21iaW5lZm4gPT4gJ3RpbWVfc21hbGxlcicsIGFnZ3NvcnRvcCA9PiAnPCh0aW1lLHRp bWUpJywKLSAgYWdndHJhbnN0eXBlID0+ICd0aW1lJyB9LAorICBhZ2d0cmFuc3R5cGUgPT4gJ3Rp bWUnLCBhZ2dwYXJ0aWFscHVzaGRvd25zYWZlID0+ICd0JyB9LAogeyBhZ2dmbm9pZCA9PiAnbWlu KHRpbWV0eiknLCBhZ2d0cmFuc2ZuID0+ICd0aW1ldHpfc21hbGxlcicsCiAgIGFnZ2NvbWJpbmVm biA9PiAndGltZXR6X3NtYWxsZXInLCBhZ2dzb3J0b3AgPT4gJzwodGltZXR6LHRpbWV0eiknLAot ICBhZ2d0cmFuc3R5cGUgPT4gJ3RpbWV0eicgfSwKKyAgYWdndHJhbnN0eXBlID0+ICd0aW1ldHon LCBhZ2dwYXJ0aWFscHVzaGRvd25zYWZlID0+ICd0JyB9LAogeyBhZ2dmbm9pZCA9PiAnbWluKG1v bmV5KScsIGFnZ3RyYW5zZm4gPT4gJ2Nhc2hzbWFsbGVyJywKICAgYWdnY29tYmluZWZuID0+ICdj YXNoc21hbGxlcicsIGFnZ3NvcnRvcCA9PiAnPChtb25leSxtb25leSknLAotICBhZ2d0cmFuc3R5 cGUgPT4gJ21vbmV5JyB9LAorICBhZ2d0cmFuc3R5cGUgPT4gJ21vbmV5JywgYWdncGFydGlhbHB1 c2hkb3duc2FmZSA9PiAndCcgfSwKIHsgYWdnZm5vaWQgPT4gJ21pbih0aW1lc3RhbXApJywgYWdn dHJhbnNmbiA9PiAndGltZXN0YW1wX3NtYWxsZXInLAogICBhZ2djb21iaW5lZm4gPT4gJ3RpbWVz dGFtcF9zbWFsbGVyJywgYWdnc29ydG9wID0+ICc8KHRpbWVzdGFtcCx0aW1lc3RhbXApJywKLSAg YWdndHJhbnN0eXBlID0+ICd0aW1lc3RhbXAnIH0sCisgIGFnZ3RyYW5zdHlwZSA9PiAndGltZXN0 YW1wJywgYWdncGFydGlhbHB1c2hkb3duc2FmZSA9PiAndCcgfSwKIHsgYWdnZm5vaWQgPT4gJ21p bih0aW1lc3RhbXB0eiknLCBhZ2d0cmFuc2ZuID0+ICd0aW1lc3RhbXB0el9zbWFsbGVyJywKICAg YWdnY29tYmluZWZuID0+ICd0aW1lc3RhbXB0el9zbWFsbGVyJywKLSAgYWdnc29ydG9wID0+ICc8 KHRpbWVzdGFtcHR6LHRpbWVzdGFtcHR6KScsIGFnZ3RyYW5zdHlwZSA9PiAndGltZXN0YW1wdHon IH0sCisgIGFnZ3NvcnRvcCA9PiAnPCh0aW1lc3RhbXB0eix0aW1lc3RhbXB0eiknLCBhZ2d0cmFu c3R5cGUgPT4gJ3RpbWVzdGFtcHR6JywKKyAgYWdncGFydGlhbHB1c2hkb3duc2FmZSA9PiAndCcg fSwKIHsgYWdnZm5vaWQgPT4gJ21pbihpbnRlcnZhbCknLCBhZ2d0cmFuc2ZuID0+ICdpbnRlcnZh bF9zbWFsbGVyJywKICAgYWdnY29tYmluZWZuID0+ICdpbnRlcnZhbF9zbWFsbGVyJywgYWdnc29y dG9wID0+ICc8KGludGVydmFsLGludGVydmFsKScsCi0gIGFnZ3RyYW5zdHlwZSA9PiAnaW50ZXJ2 YWwnIH0sCisgIGFnZ3RyYW5zdHlwZSA9PiAnaW50ZXJ2YWwnLCBhZ2dwYXJ0aWFscHVzaGRvd25z YWZlID0+ICd0JyB9LAogeyBhZ2dmbm9pZCA9PiAnbWluKHRleHQpJywgYWdndHJhbnNmbiA9PiAn dGV4dF9zbWFsbGVyJywKICAgYWdnY29tYmluZWZuID0+ICd0ZXh0X3NtYWxsZXInLCBhZ2dzb3J0 b3AgPT4gJzwodGV4dCx0ZXh0KScsCi0gIGFnZ3RyYW5zdHlwZSA9PiAndGV4dCcgfSwKKyAgYWdn dHJhbnN0eXBlID0+ICd0ZXh0JywgYWdncGFydGlhbHB1c2hkb3duc2FmZSA9PiAndCcgfSwKIHsg YWdnZm5vaWQgPT4gJ21pbihudW1lcmljKScsIGFnZ3RyYW5zZm4gPT4gJ251bWVyaWNfc21hbGxl cicsCiAgIGFnZ2NvbWJpbmVmbiA9PiAnbnVtZXJpY19zbWFsbGVyJywgYWdnc29ydG9wID0+ICc8 KG51bWVyaWMsbnVtZXJpYyknLAotICBhZ2d0cmFuc3R5cGUgPT4gJ251bWVyaWMnIH0sCisgIGFn Z3RyYW5zdHlwZSA9PiAnbnVtZXJpYycsIGFnZ3BhcnRpYWxwdXNoZG93bnNhZmUgPT4gJ3QnIH0s CiB7IGFnZ2Zub2lkID0+ICdtaW4oYW55YXJyYXkpJywgYWdndHJhbnNmbiA9PiAnYXJyYXlfc21h bGxlcicsCiAgIGFnZ2NvbWJpbmVmbiA9PiAnYXJyYXlfc21hbGxlcicsIGFnZ3NvcnRvcCA9PiAn PChhbnlhcnJheSxhbnlhcnJheSknLAotICBhZ2d0cmFuc3R5cGUgPT4gJ2FueWFycmF5JyB9LAor ICBhZ2d0cmFuc3R5cGUgPT4gJ2FueWFycmF5JywgYWdncGFydGlhbHB1c2hkb3duc2FmZSA9PiAn dCcgfSwKIHsgYWdnZm5vaWQgPT4gJ21pbihicGNoYXIpJywgYWdndHJhbnNmbiA9PiAnYnBjaGFy X3NtYWxsZXInLAogICBhZ2djb21iaW5lZm4gPT4gJ2JwY2hhcl9zbWFsbGVyJywgYWdnc29ydG9w ID0+ICc8KGJwY2hhcixicGNoYXIpJywKLSAgYWdndHJhbnN0eXBlID0+ICdicGNoYXInIH0sCisg IGFnZ3RyYW5zdHlwZSA9PiAnYnBjaGFyJywgYWdncGFydGlhbHB1c2hkb3duc2FmZSA9PiAndCcg fSwKIHsgYWdnZm5vaWQgPT4gJ21pbih0aWQpJywgYWdndHJhbnNmbiA9PiAndGlkc21hbGxlcics CiAgIGFnZ2NvbWJpbmVmbiA9PiAndGlkc21hbGxlcicsIGFnZ3NvcnRvcCA9PiAnPCh0aWQsdGlk KScsCi0gIGFnZ3RyYW5zdHlwZSA9PiAndGlkJyB9LAorICBhZ2d0cmFuc3R5cGUgPT4gJ3RpZCcs IGFnZ3BhcnRpYWxwdXNoZG93bnNhZmUgPT4gJ3QnIH0sCiB7IGFnZ2Zub2lkID0+ICdtaW4oYW55 ZW51bSknLCBhZ2d0cmFuc2ZuID0+ICdlbnVtX3NtYWxsZXInLAogICBhZ2djb21iaW5lZm4gPT4g J2VudW1fc21hbGxlcicsIGFnZ3NvcnRvcCA9PiAnPChhbnllbnVtLGFueWVudW0pJywKLSAgYWdn dHJhbnN0eXBlID0+ICdhbnllbnVtJyB9LAorICBhZ2d0cmFuc3R5cGUgPT4gJ2FueWVudW0nLCBh Z2dwYXJ0aWFscHVzaGRvd25zYWZlID0+ICd0JyB9LAogeyBhZ2dmbm9pZCA9PiAnbWluKGluZXQp JywgYWdndHJhbnNmbiA9PiAnbmV0d29ya19zbWFsbGVyJywKICAgYWdnY29tYmluZWZuID0+ICdu ZXR3b3JrX3NtYWxsZXInLCBhZ2dzb3J0b3AgPT4gJzwoaW5ldCxpbmV0KScsCi0gIGFnZ3RyYW5z dHlwZSA9PiAnaW5ldCcgfSwKKyAgYWdndHJhbnN0eXBlID0+ICdpbmV0JywgYWdncGFydGlhbHB1 c2hkb3duc2FmZSA9PiAndCcgfSwKIHsgYWdnZm5vaWQgPT4gJ21pbihwZ19sc24pJywgYWdndHJh bnNmbiA9PiAncGdfbHNuX3NtYWxsZXInLAogICBhZ2djb21iaW5lZm4gPT4gJ3BnX2xzbl9zbWFs bGVyJywgYWdnc29ydG9wID0+ICc8KHBnX2xzbixwZ19sc24pJywKLSAgYWdndHJhbnN0eXBlID0+ ICdwZ19sc24nIH0sCisgIGFnZ3RyYW5zdHlwZSA9PiAncGdfbHNuJyAsIGFnZ3BhcnRpYWxwdXNo ZG93bnNhZmUgPT4gJ3QnfSwKIAogIyBjb3VudAogeyBhZ2dmbm9pZCA9PiAnY291bnQoYW55KScs IGFnZ3RyYW5zZm4gPT4gJ2ludDhpbmNfYW55JywKICAgYWdnY29tYmluZWZuID0+ICdpbnQ4cGwn LCBhZ2dtdHJhbnNmbiA9PiAnaW50OGluY19hbnknLAogICBhZ2dtaW52dHJhbnNmbiA9PiAnaW50 OGRlY19hbnknLCBhZ2d0cmFuc3R5cGUgPT4gJ2ludDgnLAotICBhZ2dtdHJhbnN0eXBlID0+ICdp bnQ4JywgYWdnaW5pdHZhbCA9PiAnMCcsIGFnZ21pbml0dmFsID0+ICcwJyB9LAorICBhZ2dtdHJh bnN0eXBlID0+ICdpbnQ4JywgYWdnaW5pdHZhbCA9PiAnMCcsIGFnZ21pbml0dmFsID0+ICcwJywK KyAgYWdncGFydGlhbHB1c2hkb3duc2FmZSA9PiAndCcgfSwKIHsgYWdnZm5vaWQgPT4gJ2NvdW50 KCknLCBhZ2d0cmFuc2ZuID0+ICdpbnQ4aW5jJywgYWdnY29tYmluZWZuID0+ICdpbnQ4cGwnLAog ICBhZ2dtdHJhbnNmbiA9PiAnaW50OGluYycsIGFnZ21pbnZ0cmFuc2ZuID0+ICdpbnQ4ZGVjJywg YWdndHJhbnN0eXBlID0+ICdpbnQ4JywKLSAgYWdnbXRyYW5zdHlwZSA9PiAnaW50OCcsIGFnZ2lu aXR2YWwgPT4gJzAnLCBhZ2dtaW5pdHZhbCA9PiAnMCcgfSwKKyAgYWdnbXRyYW5zdHlwZSA9PiAn aW50OCcsIGFnZ2luaXR2YWwgPT4gJzAnLCBhZ2dtaW5pdHZhbCA9PiAnMCcsCisgIGFnZ3BhcnRp YWxwdXNoZG93bnNhZmUgPT4gJ3QnIH0sCiAKICMgdmFyX3BvcAogeyBhZ2dmbm9pZCA9PiAndmFy X3BvcChpbnQ4KScsIGFnZ3RyYW5zZm4gPT4gJ2ludDhfYWNjdW0nLApkaWZmIC0tZ2l0IGEvc3Jj L2luY2x1ZGUvY2F0YWxvZy9wZ19hZ2dyZWdhdGUuaCBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdf YWdncmVnYXRlLmgKaW5kZXggMDhjOTM3OWJhNzcuLjJjNjMxMDJmZjMxIDEwMDY0NAotLS0gYS9z cmMvaW5jbHVkZS9jYXRhbG9nL3BnX2FnZ3JlZ2F0ZS5oCisrKyBiL3NyYy9pbmNsdWRlL2NhdGFs b2cvcGdfYWdncmVnYXRlLmgKQEAgLTU1LDYgKzU1LDkgQEAgQ0FUQUxPRyhwZ19hZ2dyZWdhdGUs MjYwMCxBZ2dyZWdhdGVSZWxhdGlvbklkKQogCS8qIGZ1bmN0aW9uIHRvIGNvbnZlcnQgYnl0ZWEg dG8gdHJhbnN0eXBlICgwIGlmIG5vbmUpICovCiAJcmVncHJvYwkJYWdnZGVzZXJpYWxmbiBCS0lf REVGQVVMVCgtKSBCS0lfTE9PS1VQX09QVChwZ19wcm9jKTsKIAorCS8qIGZ1bmN0aW9uIHRvIGNv bnZlcnQgYWdncmVnYXRlIHJlc3VsdCB0byBieXRlYSAoMCBpZiBub25lKSAqLworCXJlZ3Byb2MJ CWFnZ3BhcnRpYWxjb252ZXJ0ZXJmbiBCS0lfREVGQVVMVCgtKSBCS0lfTE9PS1VQX09QVChwZ19w cm9jKTsKKwogCS8qIGZvcndhcmQgZnVuY3Rpb24gZm9yIG1vdmluZy1hZ2dyZWdhdGUgbW9kZSAo MCBpZiBub25lKSAqLwogCXJlZ3Byb2MJCWFnZ210cmFuc2ZuIEJLSV9ERUZBVUxUKC0pIEJLSV9M T09LVVBfT1BUKHBnX3Byb2MpOwogCkBAIC05MSw2ICs5NCw5IEBAIENBVEFMT0cocGdfYWdncmVn YXRlLDI2MDAsQWdncmVnYXRlUmVsYXRpb25JZCkKIAkvKiBlc3RpbWF0ZWQgc2l6ZSBvZiBtb3Zp bmctYWdnIHN0YXRlICgwIGZvciBkZWZhdWx0IGVzdCkgKi8KIAlpbnQzMgkJYWdnbXRyYW5zc3Bh Y2UgQktJX0RFRkFVTFQoMCk7CiAKKwkvKiB0cnVlIGlmIHBhcnRpYWwgYWdncmVnYXRlIGlzIGZp bmUgdG8gcHVzaCBkb3duICovCisJYm9vbAkJYWdncGFydGlhbHB1c2hkb3duc2FmZSBCS0lfREVG QVVMVChmKTsKKwogI2lmZGVmIENBVEFMT0dfVkFSTEVOCQkJLyogdmFyaWFibGUtbGVuZ3RoIGZp ZWxkcyBzdGFydCBoZXJlICovCiAKIAkvKiBpbml0aWFsIHZhbHVlIGZvciB0cmFuc2l0aW9uIHN0 YXRlIChjYW4gYmUgTlVMTCkgKi8KQEAgLTE2MSw2ICsxNjcsNyBAQCBleHRlcm4gT2JqZWN0QWRk cmVzcyBBZ2dyZWdhdGVDcmVhdGUoY29uc3QgY2hhciAqYWdnTmFtZSwKIAkJCQkJCQkJCSBMaXN0 ICphZ2djb21iaW5lZm5OYW1lLAogCQkJCQkJCQkJIExpc3QgKmFnZ3NlcmlhbGZuTmFtZSwKIAkJ CQkJCQkJCSBMaXN0ICphZ2dkZXNlcmlhbGZuTmFtZSwKKwkJCQkJCQkJCSBMaXN0ICphZ2dwYXJ0 aWFsY29udmVydGVyZm5OYW1lLAogCQkJCQkJCQkJIExpc3QgKmFnZ210cmFuc2ZuTmFtZSwKIAkJ CQkJCQkJCSBMaXN0ICphZ2dtaW52dHJhbnNmbk5hbWUsCiAJCQkJCQkJCQkgTGlzdCAqYWdnbWZp bmFsZm5OYW1lLApAQCAtMTc1LDYgKzE4Miw3IEBAIGV4dGVybiBPYmplY3RBZGRyZXNzIEFnZ3Jl Z2F0ZUNyZWF0ZShjb25zdCBjaGFyICphZ2dOYW1lLAogCQkJCQkJCQkJIGludDMyIGFnZ21UcmFu c1NwYWNlLAogCQkJCQkJCQkJIGNvbnN0IGNoYXIgKmFnZ2luaXR2YWwsCiAJCQkJCQkJCQkgY29u c3QgY2hhciAqYWdnbWluaXR2YWwsCi0JCQkJCQkJCQkgY2hhciBwcm9wYXJhbGxlbCk7CisJCQkJ CQkJCQkgY2hhciBwcm9wYXJhbGxlbCwKKwkJCQkJCQkJCSBib29sIHBhcnRpYWxQdXNoZG93blNh ZmUpOwogCiAjZW5kaWYJCQkJCQkJLyogUEdfQUdHUkVHQVRFX0ggKi8KZGlmZiAtLWdpdCBhL3Ny Yy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3By b2MuZGF0CmluZGV4IGQwNjhkNjUzMmVjLi4xY2YyM2IxNWRmMCAxMDA2NDQKLS0tIGEvc3JjL2lu Y2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdAorKysgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3By b2MuZGF0CkBAIC00Nzk4LDYgKzQ3OTgsMTIgQEAKIHsgb2lkID0+ICcyNzg2JywgZGVzY3IgPT4g J2FnZ3JlZ2F0ZSBzZXJpYWwgZnVuY3Rpb24nLAogICBwcm9uYW1lID0+ICdpbnQ4X2F2Z19zZXJp YWxpemUnLCBwcm9yZXR0eXBlID0+ICdieXRlYScsCiAgIHByb2FyZ3R5cGVzID0+ICdpbnRlcm5h bCcsIHByb3NyYyA9PiAnaW50OF9hdmdfc2VyaWFsaXplJyB9LAoreyBvaWQgPT4gJzk2MzAnLCBk ZXNjciA9PiAncGFydGlhbCBhZ2dyZWdhdGUgY29udmVydGVyIGZ1bmN0aW9uJywKKyAgcHJvbmFt ZSA9PiAnaW50OF9zdW1fdG9faW50ZXJuYWxfc2VyaWFsaXplJywgcHJvcmV0dHlwZSA9PiAnYnl0 ZWEnLAorICBwcm9hcmd0eXBlcyA9PiAnaW50OCcsIHByb3NyYyA9PiAnaW50OF9zdW1fdG9faW50 ZXJuYWxfc2VyaWFsaXplJyB9LAoreyBvaWQgPT4gJzk2MzEnLCBkZXNjciA9PiAncGFydGlhbCBh Z2dyZWdhdGUgY29udmVydGVyIGZ1bmN0aW9uJywKKyAgcHJvbmFtZSA9PiAnbnVtZXJpY19zdW1f dG9faW50ZXJuYWxfc2VyaWFsaXplJywgcHJvcmV0dHlwZSA9PiAnYnl0ZWEnLAorICBwcm9hcmd0 eXBlcyA9PiAnbnVtZXJpYycsIHByb3NyYyA9PiAnbnVtZXJpY19zdW1fdG9faW50ZXJuYWxfc2Vy aWFsaXplJyB9LAogeyBvaWQgPT4gJzI3ODcnLCBkZXNjciA9PiAnYWdncmVnYXRlIGRlc2VyaWFs IGZ1bmN0aW9uJywKICAgcHJvbmFtZSA9PiAnaW50OF9hdmdfZGVzZXJpYWxpemUnLCBwcm9yZXR0 eXBlID0+ICdpbnRlcm5hbCcsCiAgIHByb2FyZ3R5cGVzID0+ICdieXRlYSBpbnRlcm5hbCcsIHBy b3NyYyA9PiAnaW50OF9hdmdfZGVzZXJpYWxpemUnIH0sCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9y ZWdyZXNzL2V4cGVjdGVkL29pZGpvaW5zLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQv b2lkam9pbnMub3V0CmluZGV4IDE0NjFlOTQ3Y2RmLi5lMTY4MDA1NGMzMCAxMDA2NDQKLS0tIGEv c3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9vaWRqb2lucy5vdXQKKysrIGIvc3JjL3Rlc3QvcmVn cmVzcy9leHBlY3RlZC9vaWRqb2lucy5vdXQKQEAgLTE0NSw2ICsxNDUsNyBAQCBOT1RJQ0U6ICBj aGVja2luZyBwZ19hZ2dyZWdhdGUge2FnZ2ZpbmFsZm59ID0+IHBnX3Byb2Mge29pZH0KIE5PVElD RTogIGNoZWNraW5nIHBnX2FnZ3JlZ2F0ZSB7YWdnY29tYmluZWZufSA9PiBwZ19wcm9jIHtvaWR9 CiBOT1RJQ0U6ICBjaGVja2luZyBwZ19hZ2dyZWdhdGUge2FnZ3NlcmlhbGZufSA9PiBwZ19wcm9j IHtvaWR9CiBOT1RJQ0U6ICBjaGVja2luZyBwZ19hZ2dyZWdhdGUge2FnZ2Rlc2VyaWFsZm59ID0+ IHBnX3Byb2Mge29pZH0KK05PVElDRTogIGNoZWNraW5nIHBnX2FnZ3JlZ2F0ZSB7YWdncGFydGlh bGNvbnZlcnRlcmZufSA9PiBwZ19wcm9jIHtvaWR9CiBOT1RJQ0U6ICBjaGVja2luZyBwZ19hZ2dy ZWdhdGUge2FnZ210cmFuc2ZufSA9PiBwZ19wcm9jIHtvaWR9CiBOT1RJQ0U6ICBjaGVja2luZyBw Z19hZ2dyZWdhdGUge2FnZ21pbnZ0cmFuc2ZufSA9PiBwZ19wcm9jIHtvaWR9CiBOT1RJQ0U6ICBj aGVja2luZyBwZ19hZ2dyZWdhdGUge2FnZ21maW5hbGZufSA9PiBwZ19wcm9jIHtvaWR9Ci0tIAoy LjI1LjEKCg== --=_465e830084efd1ca219f1bad544ab3db--