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 1pHPcn-0005NB-Uk for pgsql-hackers@arkaria.postgresql.org; Mon, 16 Jan 2023 13:34:10 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1pHPcm-0000cy-MW for pgsql-hackers@arkaria.postgresql.org; Mon, 16 Jan 2023 13:34:08 +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 1pHPcl-0000ck-MR for pgsql-hackers@lists.postgresql.org; Mon, 16 Jan 2023 13:34:08 +0000 Received: from mail-yb1-xb29.google.com ([2607:f8b0:4864:20::b29]) by magus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1pHPch-00085U-DF for pgsql-hackers@lists.postgresql.org; Mon, 16 Jan 2023 13:34:06 +0000 Received: by mail-yb1-xb29.google.com with SMTP id c124so30230586ybb.13 for ; Mon, 16 Jan 2023 05:34:03 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=GcFGRQxMcuygXV/QDcf2l6ZWPkJicYDZtibcvgmMmB8=; b=DBORQ9Rtw8unWDAp3kefjCZMtlVf3j1ShSIPV7boe7h5cIBPpB6txofIJpSA13IvaB 9t0n/0C8JSAcP6S3/MfIYuL1EzYr7zSOWD7ZbA5QIfdvpit9fEuqkbP9F2YY1XGYA+ei U46lGuNhuvwfo04iMoOX8RdISRLwRaCquhHC8qXiU6b42SPDWcZsGX0UospS9hMew3iv 7ukdOgncrZLlQntS+Pbry0SXcCIs8++ozundCIbMBSp/6OqTxPK46mptPPpDn2tIA8k/ c/lTzw/Tlr3UpB5g9Ta9FrHgZhcEbSbJYIMrdW6NMq98pJlD7dTec1/LrcGwJROA4Zn+ mD0Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=GcFGRQxMcuygXV/QDcf2l6ZWPkJicYDZtibcvgmMmB8=; b=F0gZa71uCgdyl6LPo0eCpYbHDpvAegy06nWs+Z2Uz9kit1WOaZTdgahGLpStGBb9ci kaX5BpANeEkR1Zu4QLleBqoowWu9+Y6rMb2oYikOOW20mieZ3EPcURE1ugEdvyRy4YOU PhCaIsXrRIFl7GKoJs7wT8QQYQcYISf+8m/6P8Qwv4ancnxSsP2gOSKGV2y2irH9jmV6 WzfmaGtQvgH5b3Ow3x9ZhonuhIZnHNMn39+9iaV4vmJi+2nsfYSWL3oVb70F6HNzRWCW bMiy6u+Opvh0WmdZ5wvWjhTYVNwxVGwl91iRS+Y4LANgpKXFm4ARNBbSsijjPf7+9p7/ opSA== X-Gm-Message-State: AFqh2krzKln8ma3CWDzV98oTy8JS23umj2e88v6bU0Sd35XTa/iJnSIf 2fJuRVyYYY2ts7eMrqod9BP3n0RwjB/uBff4a+A= X-Google-Smtp-Source: AMrXdXszXwIERU1LqmeWarQHYQT+8qPuFoFwgmFtntMe80+kzpIB562PlGJlpu4NfGu0hkzmEerhtkNlFUSKW3bYNC0= X-Received: by 2002:a25:d757:0:b0:7cb:7169:b5de with SMTP id o84-20020a25d757000000b007cb7169b5demr1181645ybg.377.1673876041210; Mon, 16 Jan 2023 05:34:01 -0800 (PST) MIME-Version: 1.0 References: <20221006171601.6um4ey5idm4h62vf@alvherre.pgsql> In-Reply-To: From: Ajin Cherian Date: Tue, 17 Jan 2023 00:33:49 +1100 Message-ID: Subject: Re: Support logical replication of DDLs To: vignesh C Cc: Zheng Li , Peter Smith , li jie , Dilip Kumar , Alvaro Herrera , "houzj.fnst@fujitsu.com" , Amit Kapila , Masahiko Sawada , Japin Li , rajesh singarapu , PostgreSQL Hackers Content-Type: multipart/mixed; boundary="000000000000d6784f05f261a2df" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000d6784f05f261a2df Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Mon, Jan 16, 2023 at 2:13 PM vignesh C wrote: > > On Sun, 15 Jan 2023 at 09:39, Ajin Cherian wrote: > > > > On Fri, Jan 13, 2023 at 5:33 PM vignesh C wrote: > > > Adding support for CREATE/ALTER/DROP Publication ddl deparsing. > > > The attached v61 patch has the changes for the same. > > > > > > > Hi Vignesh, > > this doesn't seem to compile: > > > > gcc -std=3Dgnu99 -Wall -Wmissing-prototypes -Wpointer-arith > > -Wdeclaration-after-statement -Werror=3Dvla -Wendif-labels > > -Wmissing-format-attribute -Wformat-security -fno-strict-aliasing > > -fwrapv -fexcess-precision=3Dstandard -g -ggdb -Og -g3 > > -fno-omit-frame-pointer -I../../../src/include -D_GNU_SOURCE -c -o > > ddl_deparse.o ddl_deparse.c > > ddl_deparse.c: In function =E2=80=98deparse_PublicationObjects=E2=80=99= : > > ddl_deparse.c:8956:3: error: unknown type name =E2=80=98publication_rel= =E2=80=99 > > publication_rel *pub_rel =3D (publication_rel *) lfirst(lc1); > > ^ > > ddl_deparse.c:8956:31: error: =E2=80=98publication_rel=E2=80=99 undecla= red (first use > > in this function) > > publication_rel *pub_rel =3D (publication_rel *) lfirst(lc1); > > ^ > > ddl_deparse.c:8956:31: note: each undeclared identifier is reported > > only once for each function it appears in > > ddl_deparse.c:8956:48: error: expected expression before =E2=80=98)=E2= =80=99 token > > publication_rel *pub_rel =3D (publication_rel *) lfirst(lc1); > > I was able to apply all the patches and compile successfully, also > cfbot as in [1] has compiled successfully. One thing I noticed is that > structure is available at 006 patch, if you did not apply all the > patch it might fail, we will take care of structure movement in the > next version. > [1] - https://cirrus-ci.com/task/5231672585617408 > Fixing an earlier comment from Peter: On Mon, Oct 31, 2022 at 7:07 PM Peter Smith wrote: > >0. append_object_to_format_string >Instead of this little loop why doesn't the code just look for the ?name delimiters? > >e.g. >pstart =3D strch(sub_fmt, '{'); >pend =3D strbrk(pstart, ":}"); > >then the 'name' is what lies in between... made the logic simpler with strchr. Also: 1. fixed a compilation warning seen in publicationcmds.c 2. fixed a broken documentation build 3. changed a failed build of patch 3 due to missing header. regards, Ajin Cherian Fujitsu Australia --000000000000d6784f05f261a2df Content-Type: application/octet-stream; name="v62-0002-Functions-to-deparse-Table-DDL-commands.patch" Content-Disposition: attachment; filename="v62-0002-Functions-to-deparse-Table-DDL-commands.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lcyuikh61 RnJvbSAzNGY3NzI0ZTkwZTY1ODMzNWVhOGUzNDE4ZWUxMDkyMzY1MjNmMTIzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBamluIENoZXJpYW4gPGFqaW5jQGZhc3QuYXUuZnVqaXRzdS5j b20+CkRhdGU6IE1vbiwgMTYgSmFuIDIwMjMgMDc6Mzk6NTkgLTA1MDAKU3ViamVjdDogW1BBVENI IHY2MiAyLzddIEZ1bmN0aW9ucyB0byBkZXBhcnNlIFRhYmxlIERETCBjb21tYW5kcy4KClRoaXMg cGF0Y2ggcHJvdmlkZXMgSlNPTiBibG9icyByZXByZXNlbnRpbmcgRERMIGNvbW1hbmRzLCB3aGlj aCBjYW4KbGF0ZXIgYmUgcmUtcHJvY2Vzc2VkIGludG8gcGxhaW4gc3RyaW5ncyBieSB3ZWxsLWRl ZmluZWQgc3ByaW50Zi1saWtlCmV4cGFuc2lvbi4gVGhlc2UgSlNPTiBvYmplY3RzIGFyZSBpbnRl bmRlZCB0byBhbGxvdyBmb3IgbWFjaGluZS1lZGl0aW5nIG9mCnRoZSBjb21tYW5kcywgYnkgcmVw bGFjaW5nIGNlcnRhaW4gbm9kZXMgd2l0aGluIHRoZSBvYmplY3RzLgoKTXVjaCBvZiB0aGUgaW5m b3JtYXRpb24gaW4gdGhlIG91dHB1dCBibG9iIGFjdHVhbGx5IGNvbWVzIGZyb20gc3lzdGVtCmNh dGFsb2dzLCBub3QgZnJvbSB0aGUgY29tbWFuZCBwYXJzZSBub2RlLCBhcyBpdCBpcyBpbXBvc3Np YmxlIHRvIHJlbGlhYmx5CmNvbnN0cnVjdCBhIGZ1bGx5LXNwZWNpZmllZCBjb21tYW5kIChpLmUu IG9uZSBub3QgZGVwZW5kZW50IG9uIHNlYXJjaF9wYXRoCmV0YykgbG9va2luZyBvbmx5IGF0IHRo ZSBwYXJzZSBub2RlLgoKVGhpcyBwcm92aWRlcyBhIGJhc2UgZm9yIGxvZ2ljYWwgcmVwbGljYXRp b24gb2YgRERMIHN0YXRlbWVudHMuIEN1cnJlbnRseSwKdGhlIHBhdGNoIGhhcyBzdXBwb3J0IGZv cjoKCkNSRUFURS9BTFRFUi9EUk9QIFRBQkxFIC0tIE5vdGUgIzEsIE5vdGUgIzIKCihOb3RlICMx KSBTb21lIHJlY2VudGx5IGludHJvZHVjZWQgRERMcyhlLmcuIERETHMgcmVsYXRlZCB0bwpQQVJU SVRJT05FRCBUQUJMRSkgYXJlIHVuc3VwcG9ydGVkLiBXZSBjYW4gZXh0ZW5kIGl0IGFzIHdlIG5l ZWQgbW9yZQpmdW5jdGlvbmFsaXR5IGZvciBEREwgcmVwbGljYXRpb24uCgooTm90ZSAjMikgRm9y IEFUVEFDSC9ERVRBQ0ggUEFSVElUSU9OLCB3ZSBoYXZlbid0IGFkZGVkIGV4dHJhIGxvZ2ljIG9u CnRoZSBzdWJzY3JpYmVyIHRvIGhhbmRsZSB0aGUgY2FzZSB3aGVyZSB0aGUgdGFibGUgb24gdGhl IHB1Ymxpc2hlciBpcyBhIFBBUlRJVElPTkVEClRBQkxFIHdoaWxlIHRoZSB0YXJnZXQgdGFibGUg b24gdGhlIHN1YmNyaWJlciBzaWRlIGlzIGEgTk9STUFMIHRhYmxlLiBXZSB3aWxsCnJlc2VhcmNo IHRoaXMgbW9yZSBhbmQgaW1wcm92ZSBpdCBsYXRlci4KLS0tCiBzcmMvYmFja2VuZC9jb21tYW5k cy9NYWtlZmlsZSAgICAgICAgfCAgICAyICsKIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2RkbF9kZXBh cnNlLmMgICB8IDM2MTYgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogc3JjL2Jh Y2tlbmQvY29tbWFuZHMvZGRsX2pzb24uYyAgICAgIHwgIDc3NiArKysrKysrKwogc3JjL2JhY2tl bmQvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5jIHwgICAgMyArCiBzcmMvYmFja2VuZC9jb21tYW5k cy9tZXNvbi5idWlsZCAgICAgfCAgICAyICsKIHNyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5k YXQgICAgICB8ICAgIDYgKwogc3JjL2luY2x1ZGUvbm9kZXMvcGFyc2Vub2Rlcy5oICAgICAgIHwg ICAgMSArCiBzcmMvaW5jbHVkZS90Y29wL2RkbF9kZXBhcnNlLmggICAgICAgfCAgIDIzICsKIHNy Yy9pbmNsdWRlL3Rjb3AvZGVwYXJzZV91dGlsaXR5LmggICB8ICAgMTEgKy0KIHNyYy90b29scy9w Z2luZGVudC90eXBlZGVmcy5saXN0ICAgICB8ICAgIDQgKwogMTAgZmlsZXMgY2hhbmdlZCwgNDQ0 MyBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCiBjcmVhdGUgbW9kZSAxMDA3NTUgc3JjL2Jh Y2tlbmQvY29tbWFuZHMvZGRsX2RlcGFyc2UuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9iYWNr ZW5kL2NvbW1hbmRzL2RkbF9qc29uLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvaW5jbHVkZS90 Y29wL2RkbF9kZXBhcnNlLmgKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9NYWtl ZmlsZSBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL01ha2VmaWxlCmluZGV4IDQ4ZjczNDguLjE3MWRm YjIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL01ha2VmaWxlCisrKyBiL3NyYy9i YWNrZW5kL2NvbW1hbmRzL01ha2VmaWxlCkBAIC0yOSw2ICsyOSw4IEBAIE9CSlMgPSBcCiAJY29w eXRvLm8gXAogCWNyZWF0ZWFzLm8gXAogCWRiY29tbWFuZHMubyBcCisJZGRsX2RlcGFyc2UubyBc CisJZGRsX2pzb24ubyBcCiAJZGVmaW5lLm8gXAogCWRpc2NhcmQubyBcCiAJZHJvcGNtZHMubyBc CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9kZGxfZGVwYXJzZS5jIGIvc3JjL2Jh Y2tlbmQvY29tbWFuZHMvZGRsX2RlcGFyc2UuYwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAw MDAwMDAwLi44OTY4YzgzCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMv ZGRsX2RlcGFyc2UuYwpAQCAtMCwwICsxLDM2MTYgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoK KyAqIGRkbF9kZXBhcnNlLmMKKyAqCSAgRnVuY3Rpb25zIHRvIGNvbnZlcnQgdXRpbGl0eSBjb21t YW5kcyB0byBtYWNoaW5lLXBhcnNlYWJsZQorICoJICByZXByZXNlbnRhdGlvbgorICoKKyAqIFBv cnRpb25zIENvcHlyaWdodCAoYykgMTk5Ni0yMDIyLCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9w bWVudCBHcm91cAorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk0LCBSZWdlbnRzIG9mIHRo ZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEKKyAqCisgKiBOT1RFUworICoKKyAqIFRoaXMgaXMg aW50ZW5kZWQgdG8gcHJvdmlkZSBKU09OIGJsb2JzIHJlcHJlc2VudGluZyBEREwgY29tbWFuZHMs IHdoaWNoIGNhbgorICogbGF0ZXIgYmUgcmUtcHJvY2Vzc2VkIGludG8gcGxhaW4gc3RyaW5ncyBi eSB3ZWxsLWRlZmluZWQgc3ByaW50Zi1saWtlCisgKiBleHBhbnNpb24uICBUaGVzZSBKU09OIG9i amVjdHMgYXJlIGludGVuZGVkIHRvIGFsbG93IGZvciBtYWNoaW5lLWVkaXRpbmcgb2YKKyAqIHRo ZSBjb21tYW5kcywgYnkgcmVwbGFjaW5nIGNlcnRhaW4gbm9kZXMgd2l0aGluIHRoZSBvYmplY3Rz LgorICoKKyAqIE11Y2ggb2YgdGhlIGluZm9ybWF0aW9uIGluIHRoZSBvdXRwdXQgYmxvYiBhY3R1 YWxseSBjb21lcyBmcm9tIHN5c3RlbQorICogY2F0YWxvZ3MsIG5vdCBmcm9tIHRoZSBjb21tYW5k IHBhcnNlIG5vZGUsIGFzIGl0IGlzIGltcG9zc2libGUgdG8gcmVsaWFibHkKKyAqIGNvbnN0cnVj dCBhIGZ1bGx5LXNwZWNpZmllZCBjb21tYW5kIChpLmUuIG9uZSBub3QgZGVwZW5kZW50IG9uIHNl YXJjaF9wYXRoCisgKiBldGMpIGxvb2tpbmcgb25seSBhdCB0aGUgcGFyc2Ugbm9kZS4KKyAqCisg KiBEZXBhcnNlIG9iamVjdCB0cmVlIGlzIGNyZWF0ZWQgYnkgdXNpbmc6CisgKiAJYSkgbmV3X29i anRyZWUoImtub3cgY29udGVudHMiKSB3aGVyZSB0aGUgY29tcGxldGUgdHJlZSBjb250ZW50IGlz IGtub3duIG9yCisgKiAgICAgdGhlIGluaXRpYWwgdHJlZSBjb250ZW50IGlzIGtub3duLgorICog CWIpIG5ld19vYmp0cmVlKCIiKSBmb3IgdGhlIHN5bnRheCB3aGVyZSB0aGUgb2JqZWN0IHRyZWUg d2lsbCBiZSBkZXJpdmVkCisgKiAgICAgYmFzZWQgb24gc29tZSBjb25kaXRpb25hbCBjaGVja3Mu CisgKiAJYykgbmV3X29ianRyZWVfVkEgd2hlcmUgdGhlIGNvbXBsZXRlIHRyZWUgY2FuIGJlIGRl cml2ZWQgdXNpbmcgc29tZSBmaXhlZAorICogICAgIGNvbnRlbnQgYW5kL29yIHNvbWUgdmFyaWFi bGUgYXJndW1lbnRzLgorICoKKyAqIElERU5USUZJQ0FUSU9OCisgKgkgIHNyYy9iYWNrZW5kL2Nv bW1hbmRzL2RkbF9kZXBhcnNlLmMKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2luY2x1 ZGUgInBvc3RncmVzLmgiCisKKyNpbmNsdWRlICJhY2Nlc3MvYW1hcGkuaCIKKyNpbmNsdWRlICJh Y2Nlc3MvcmVsYXRpb24uaCIKKyNpbmNsdWRlICJhY2Nlc3MvdGFibGUuaCIKKyNpbmNsdWRlICJj YXRhbG9nL25hbWVzcGFjZS5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfYW0uaCIKKyNpbmNsdWRl ICJjYXRhbG9nL3BnX2FnZ3JlZ2F0ZS5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfYXV0aGlkLmgi CisjaW5jbHVkZSAiY2F0YWxvZy9wZ19jYXN0LmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19jb2xs YXRpb24uaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX2NvbnN0cmFpbnQuaCIKKyNpbmNsdWRlICJj YXRhbG9nL3BnX2NvbnZlcnNpb24uaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX2RlcGVuZC5oIgor I2luY2x1ZGUgImNhdGFsb2cvcGdfZXh0ZW5zaW9uLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19m b3JlaWduX2RhdGFfd3JhcHBlci5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfZm9yZWlnbl9zZXJ2 ZXIuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX2luaGVyaXRzLmgiCisjaW5jbHVkZSAiY2F0YWxv Zy9wZ19sYW5ndWFnZS5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfbGFyZ2VvYmplY3QuaCIKKyNp bmNsdWRlICJjYXRhbG9nL3BnX25hbWVzcGFjZS5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfb3Bj bGFzcy5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfb3BlcmF0b3IuaCIKKyNpbmNsdWRlICJjYXRh bG9nL3BnX29wZmFtaWx5LmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19wb2xpY3kuaCIKKyNpbmNs dWRlICJjYXRhbG9nL3BnX3Byb2MuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX3JhbmdlLmgiCisj aW5jbHVkZSAiY2F0YWxvZy9wZ19yZXdyaXRlLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19zZXF1 ZW5jZS5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfc3RhdGlzdGljX2V4dC5oIgorI2luY2x1ZGUg ImNhdGFsb2cvcGdfdHJhbnNmb3JtLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ190c19jb25maWcu aCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX3RzX2RpY3QuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3Bn X3RzX3BhcnNlci5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfdHNfdGVtcGxhdGUuaCIKKyNpbmNs dWRlICJjYXRhbG9nL3BnX3R5cGUuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX3VzZXJfbWFwcGlu Zy5oIgorI2luY2x1ZGUgImNvbW1hbmRzL2RlZnJlbS5oIgorI2luY2x1ZGUgImNvbW1hbmRzL3Nl cXVlbmNlLmgiCisjaW5jbHVkZSAiY29tbWFuZHMvdGFibGVzcGFjZS5oIgorI2luY2x1ZGUgImZv cmVpZ24vZm9yZWlnbi5oIgorI2luY2x1ZGUgImZ1bmNhcGkuaCIKKyNpbmNsdWRlICJtYi9wZ193 Y2hhci5oIgorI2luY2x1ZGUgIm5vZGVzL25vZGVGdW5jcy5oIgorI2luY2x1ZGUgIm5vZGVzL3Bh cnNlbm9kZXMuaCIKKyNpbmNsdWRlICJvcHRpbWl6ZXIvb3B0aW1pemVyLmgiCisjaW5jbHVkZSAi cGFyc2VyL3BhcnNlX3R5cGUuaCIKKyNpbmNsdWRlICJyZXdyaXRlL3Jld3JpdGVIYW5kbGVyLmgi CisjaW5jbHVkZSAidGNvcC9kZGxfZGVwYXJzZS5oIgorI2luY2x1ZGUgInRjb3AvdXRpbGl0eS5o IgorI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCisjaW5jbHVkZSAidXRpbHMvZm1ncm9pZHMu aCIKKyNpbmNsdWRlICJ1dGlscy9ndWMuaCIKKyNpbmNsdWRlICJ1dGlscy9qc29uYi5oIgorI2lu Y2x1ZGUgInV0aWxzL2xzeXNjYWNoZS5oIgorI2luY2x1ZGUgInV0aWxzL3JlbC5oIgorI2luY2x1 ZGUgInV0aWxzL3J1bGV1dGlscy5oIgorI2luY2x1ZGUgInV0aWxzL3N5c2NhY2hlLmgiCisKKy8q IEVzdGltYXRlZCBsZW5ndGggb2YgdGhlIGdlbmVyYXRlZCBqc29uYiBzdHJpbmcgKi8KKyNkZWZp bmUgSlNPTkJfRVNUSU1BVEVEX0xFTiAxMjgKKworLyoKKyAqIEJlZm9yZSB0aGV5IGFyZSB0dXJu ZWQgaW50byBKU09OQiByZXByZXNlbnRhdGlvbiwgZWFjaCBjb21tYW5kIGlzCisgKiByZXByZXNl bnRlZCBhcyBhbiBvYmplY3QgdHJlZSwgdXNpbmcgdGhlIHN0cnVjdHMgYmVsb3cuCisgKi8KK3R5 cGVkZWYgZW51bQoreworCU9ialR5cGVOdWxsLAorCU9ialR5cGVCb29sLAorCU9ialR5cGVTdHJp bmcsCisJT2JqVHlwZUFycmF5LAorCU9ialR5cGVJbnRlZ2VyLAorCU9ialR5cGVGbG9hdCwKKwlP YmpUeXBlT2JqZWN0Cit9IE9ialR5cGU7CisKKy8qCisgKiBSZXByZXNlbnQgdGhlIGNvbW1hbmQg YXMgYW4gb2JqZWN0IHRyZWUuCisgKi8KK3R5cGVkZWYgc3RydWN0IE9ialRyZWUKK3sKKwlzbGlz dF9oZWFkCXBhcmFtczsJCQkvKiBPYmplY3QgdHJlZSBwYXJhbWV0ZXJzICovCisJaW50CQkJbnVt UGFyYW1zOwkJLyogTnVtYmVyIG9mIHBhcmFtZXRlcnMgaW4gdGhlIG9iamVjdCB0cmVlICovCisJ U3RyaW5nSW5mbwlmbXRpbmZvOwkJLyogRm9ybWF0IHN0cmluZyBvZiB0aGUgT2JqVHJlZSAqLwor CWJvb2wJCXByZXNlbnQ7CQkvKiBJbmRpY2F0ZXMgaWYgYm9vbGVhbiB2YWx1ZSBzaG91bGQgYmUg c3RvcmVkICovCit9IE9ialRyZWU7CisKKy8qCisgKiBBbiBlbGVtZW50IG9mIGFuIG9iamVjdCB0 cmVlIChPYmpUcmVlKS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgT2JqRWxlbQoreworCWNoYXIJICAg Km5hbWU7CQkJLyogTmFtZSBvZiBvYmplY3QgZWxlbWVudCAqLworCU9ialR5cGUJCW9ianR5cGU7 CQkvKiBPYmplY3QgdHlwZSAqLworCisJdW5pb24KKwl7CisJCWJvb2wJCWJvb2xlYW47CisJCWNo YXIJICAgKnN0cmluZzsKKwkJaW50NjQJCWludGVnZXI7CisJCWZsb2F0OAkJZmx0OworCQlPYmpU cmVlICAgICpvYmplY3Q7CisJCUxpc3QJICAgKmFycmF5OworCX0JCQl2YWx1ZTsJCQkvKiBTdG9y ZSB0aGUgb2JqZWN0IHZhbHVlIGJhc2VkIG9uIHRoZSBvYmplY3QKKwkJCQkJCQkJICogdHlwZSAq LworCXNsaXN0X25vZGUJbm9kZTsJCQkvKiBVc2VkIGluIGNvbnZlcnRpbmcgYmFjayB0byBPYmpF bGVtCisJCQkJCQkJCSAqIHN0cnVjdHVyZSAqLworfSBPYmpFbGVtOworCisvKgorICogUmVkdWNl IHNvbWUgdW5uZWNlc3Nhcnkgc3RyaW5ncyBmcm9tIHRoZSBvdXRwdXQganNvbiB3aGVuIHZlcmJv c2UKKyAqIGFuZCAicHJlc2VudCIgbWVtYmVyIGlzIGZhbHNlLiBUaGlzIG1lYW5zIHRoZXNlIHN0 cmluZ3Mgd29uJ3QgYmUgbWVyZ2VkIGludG8KKyAqIHRoZSBsYXN0IERETCBjb21tYW5kLgorICov Citib29sCQl2ZXJib3NlID0gdHJ1ZTsKKworc3RhdGljIHZvaWQgYXBwZW5kX2FycmF5X29iamVj dChPYmpUcmVlICp0cmVlLCBjaGFyICpzdWJfZm10LCBMaXN0ICphcnJheSk7CitzdGF0aWMgdm9p ZCBhcHBlbmRfYm9vbF9vYmplY3QoT2JqVHJlZSAqdHJlZSwgY2hhciAqc3ViX2ZtdCwgYm9vbCB2 YWx1ZSk7CitzdGF0aWMgdm9pZCBhcHBlbmRfbnVsbF9vYmplY3QoT2JqVHJlZSAqdHJlZSwgY2hh ciAqc3ViX2ZtdCk7CitzdGF0aWMgdm9pZCBhcHBlbmRfb2JqZWN0X29iamVjdChPYmpUcmVlICp0 cmVlLCBjaGFyICpzdWJfZm10LCBPYmpUcmVlICp2YWx1ZSk7CitzdGF0aWMgY2hhciAqYXBwZW5k X29iamVjdF90b19mb3JtYXRfc3RyaW5nKE9ialRyZWUgKnRyZWUsIGNoYXIgKnN1Yl9mbXQpOwor c3RhdGljIHZvaWQgYXBwZW5kX3ByZW1hZGVfb2JqZWN0KE9ialRyZWUgKnRyZWUsIE9iakVsZW0g KmVsZW0pOworc3RhdGljIHZvaWQgYXBwZW5kX3N0cmluZ19vYmplY3QoT2JqVHJlZSAqdHJlZSwg Y2hhciAqc3ViX2ZtdCwgY2hhciAqbmFtZSwKKwkJCQkJCQkJIGNoYXIgKnZhbHVlKTsKK3N0YXRp YyB2b2lkIGZvcm1hdF90eXBlX2RldGFpbGVkKE9pZCB0eXBlX29pZCwgaW50MzIgdHlwZW1vZCwK KwkJCQkJCQkJIE9pZCAqbnNwaWQsIGNoYXIgKip0eXBuYW1lLCBjaGFyICoqdHlwZW1vZHN0ciwK KwkJCQkJCQkJIGJvb2wgKnR5cGFycmF5KTsKK3N0YXRpYyBPYmpFbGVtICpuZXdfb2JqZWN0KE9i alR5cGUgdHlwZSwgY2hhciAqbmFtZSk7CitzdGF0aWMgT2JqVHJlZSAqbmV3X29ianRyZWVfZm9y X3F1YWxuYW1lX2lkKE9pZCBjbGFzc0lkLCBPaWQgb2JqZWN0SWQpOworc3RhdGljIE9iakVsZW0g Km5ld19vYmplY3Rfb2JqZWN0KE9ialRyZWUgKnZhbHVlKTsKK3N0YXRpYyBPYmpUcmVlICpuZXdf b2JqdHJlZV9WQShjaGFyICpmbXQsIGludCBudW1vYmpzLC4uLik7CitzdGF0aWMgSnNvbmJWYWx1 ZSAqb2JqdHJlZV90b19qc29uYl9yZWMoT2JqVHJlZSAqdHJlZSwgSnNvbmJQYXJzZVN0YXRlICpz dGF0ZSk7CitzdGF0aWMgdm9pZCBwZ19nZXRfaW5kZXhkZWZfZGV0YWlsZWQoT2lkIGluZGV4cmVs aWQsCisJCQkJCQkJCQkgY2hhciAqKmluZGV4X2FtLAorCQkJCQkJCQkJIGNoYXIgKipkZWZpbml0 aW9uLAorCQkJCQkJCQkJIGNoYXIgKipyZWxvcHRpb25zLAorCQkJCQkJCQkJIGNoYXIgKip0YWJs ZXNwYWNlLAorCQkJCQkJCQkJIGNoYXIgKip3aGVyZUNsYXVzZSk7CitzdGF0aWMgY2hhciAqUmVs YXRpb25HZXRDb2x1bW5EZWZhdWx0KFJlbGF0aW9uIHJlbCwgQXR0ck51bWJlciBhdHRubywKKwkJ CQkJCQkJCSAgTGlzdCAqZHBjb250ZXh0LCBMaXN0ICoqZXhwcnMpOworCitzdGF0aWMgT2JqVHJl ZSAqZGVwYXJzZV9Db2x1bW5EZWYoUmVsYXRpb24gcmVsYXRpb24sIExpc3QgKmRwY29udGV4dCwg Ym9vbCBjb21wb3NpdGUsCisJCQkJCQkJCSAgQ29sdW1uRGVmICpjb2xkZWYsIGJvb2wgaXNfYWx0 ZXIsIExpc3QgKipleHBycyk7CitzdGF0aWMgT2JqVHJlZSAqZGVwYXJzZV9Db2x1bW5JZGVudGl0 eShPaWQgc2VxcmVsaWQsIGNoYXIgaWRlbnRpdHksIGJvb2wgYWx0ZXJfdGFibGUpOworc3RhdGlj IE9ialRyZWUgKmRlcGFyc2VfQ29sdW1uU2V0T3B0aW9ucyhBbHRlclRhYmxlQ21kICpzdWJjbWQp OworCitzdGF0aWMgT2JqVHJlZSAqZGVwYXJzZV9EZWZFbGVtKERlZkVsZW0gKmVsZW0sIGJvb2wg aXNfcmVzZXQpOworc3RhdGljIE9ialRyZWUgKmRlcGFyc2VfT25Db21taXRDbGF1c2UoT25Db21t aXRBY3Rpb24gb3B0aW9uKTsKK3N0YXRpYyBPYmpUcmVlICpkZXBhcnNlX1JlbFNldE9wdGlvbnMo QWx0ZXJUYWJsZUNtZCAqc3ViY21kKTsKKworc3RhdGljIGlubGluZSBPYmpFbGVtICpkZXBhcnNl X1NlcV9DYWNoZShGb3JtX3BnX3NlcXVlbmNlIHNlcWRhdGEsIGJvb2wgYWx0ZXJfdGFibGUpOwor c3RhdGljIGlubGluZSBPYmpFbGVtICpkZXBhcnNlX1NlcV9DeWNsZShGb3JtX3BnX3NlcXVlbmNl IHNlcWRhdGEsIGJvb2wgYWx0ZXJfdGFibGUpOworc3RhdGljIGlubGluZSBPYmpFbGVtICpkZXBh cnNlX1NlcV9JbmNyZW1lbnRCeShGb3JtX3BnX3NlcXVlbmNlIHNlcWRhdGEsIGJvb2wgYWx0ZXJf dGFibGUpOworc3RhdGljIGlubGluZSBPYmpFbGVtICpkZXBhcnNlX1NlcV9NaW52YWx1ZShGb3Jt X3BnX3NlcXVlbmNlIHNlcWRhdGEsIGJvb2wgYWx0ZXJfdGFibGUpOworc3RhdGljIGlubGluZSBP YmpFbGVtICpkZXBhcnNlX1NlcV9NYXh2YWx1ZShGb3JtX3BnX3NlcXVlbmNlIHNlcWRhdGEsIGJv b2wgYWx0ZXJfdGFibGUpOworc3RhdGljIGlubGluZSBPYmpFbGVtICpkZXBhcnNlX1NlcV9SZXN0 YXJ0KEZvcm1fcGdfc2VxdWVuY2VfZGF0YSBzZXFkYXRhKTsKK3N0YXRpYyBpbmxpbmUgT2JqRWxl bSAqZGVwYXJzZV9TZXFfU3RhcnR3aXRoKEZvcm1fcGdfc2VxdWVuY2Ugc2VxZGF0YSwgYm9vbCBh bHRlcl90YWJsZSk7CitzdGF0aWMgaW5saW5lIE9iakVsZW0gKmRlcGFyc2VfU2VxX0FzKERlZkVs ZW0gKmVsZW0pOworc3RhdGljIGlubGluZSBPYmpFbGVtICpkZXBhcnNlX1R5cGVfU3RvcmFnZShG b3JtX3BnX3R5cGUgdHlwRm9ybSk7CitzdGF0aWMgaW5saW5lIE9iakVsZW0gKmRlcGFyc2VfVHlw ZV9SZWNlaXZlKEZvcm1fcGdfdHlwZSB0eXBGb3JtKTsKK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAq ZGVwYXJzZV9UeXBlX1NlbmQoRm9ybV9wZ190eXBlIHR5cEZvcm0pOworc3RhdGljIGlubGluZSBP YmpFbGVtICpkZXBhcnNlX1R5cGVfVHlwbW9kX0luKEZvcm1fcGdfdHlwZSB0eXBGb3JtKTsKK3N0 YXRpYyBpbmxpbmUgT2JqRWxlbSAqZGVwYXJzZV9UeXBlX1R5cG1vZF9PdXQoRm9ybV9wZ190eXBl IHR5cEZvcm0pOworc3RhdGljIGlubGluZSBPYmpFbGVtICpkZXBhcnNlX1R5cGVfQW5hbHl6ZShG b3JtX3BnX3R5cGUgdHlwRm9ybSk7CitzdGF0aWMgaW5saW5lIE9iakVsZW0gKmRlcGFyc2VfVHlw ZV9TdWJzY3JpcHQoRm9ybV9wZ190eXBlIHR5cEZvcm0pOworCitzdGF0aWMgTGlzdCAqZGVwYXJz ZV9JbmhSZWxhdGlvbnMoT2lkIG9iamVjdElkKTsKK3N0YXRpYyBMaXN0ICpkZXBhcnNlX1RhYmxl RWxlbWVudHMoUmVsYXRpb24gcmVsYXRpb24sIExpc3QgKnRhYmxlRWxlbWVudHMsIExpc3QgKmRw Y29udGV4dCwKKwkJCQkJCQkJICAgYm9vbCB0eXBlZCwgYm9vbCBjb21wb3NpdGUpOworCisvKgor ICogQXBwZW5kIHByZXNlbnQgYXMgZmFsc2UgdG8gYSB0cmVlLgorICovCitzdGF0aWMgdm9pZAor YXBwZW5kX25vdF9wcmVzZW50KE9ialRyZWUgKnRyZWUpCit7CisJYXBwZW5kX2Jvb2xfb2JqZWN0 KHRyZWUsICJwcmVzZW50IiwgZmFsc2UpOworfQorCisvKgorICogQXBwZW5kIGFuIGFycmF5IHBh cmFtZXRlciB0byBhIHRyZWUuCisgKi8KK3N0YXRpYyB2b2lkCithcHBlbmRfYXJyYXlfb2JqZWN0 KE9ialRyZWUgKnRyZWUsIGNoYXIgKnN1Yl9mbXQsIExpc3QgKmFycmF5KQoreworCU9iakVsZW0g ICAgKnBhcmFtOworCWNoYXIJICAgKm9iamVjdF9uYW1lOworCisJQXNzZXJ0KHN1Yl9mbXQpOwor CisJaWYgKGxpc3RfbGVuZ3RoKGFycmF5KSA9PSAwKQorCQlyZXR1cm47CisKKwlpZiAoIXZlcmJv c2UpCisJeworCQlMaXN0Q2VsbCAgICpsYzsKKworCQkvKiBSZW1vdmUgZWxlbWVudHMgd2hlcmUg cHJlc2VudCBmbGFnIGlzIGZhbHNlICovCisJCWZvcmVhY2gobGMsIGFycmF5KQorCQl7CisJCQlP YmpFbGVtICAgICplbGVtID0gKE9iakVsZW0gKikgbGZpcnN0KGxjKTsKKworCQkJQXNzZXJ0KGVs ZW0tPm9ianR5cGUgPT0gT2JqVHlwZU9iamVjdCB8fAorCQkJCSAgIGVsZW0tPm9ianR5cGUgPT0g T2JqVHlwZVN0cmluZyk7CisKKwkJCWlmICghZWxlbS0+dmFsdWUub2JqZWN0LT5wcmVzZW50ICYm CisJCQkJZWxlbS0+b2JqdHlwZSA9PSBPYmpUeXBlT2JqZWN0KQorCQkJCWFycmF5ID0gZm9yZWFj aF9kZWxldGVfY3VycmVudChhcnJheSwgbGMpOworCQl9CisKKwl9CisKKwkvKiBDaGVjayBmb3Ig ZW1wdHkgbGlzdCBhZnRlciByZW1vdmluZyBlbGVtZW50cyAqLworCWlmIChsaXN0X2xlbmd0aChh cnJheSkgPT0gMCkKKwkJcmV0dXJuOworCisJb2JqZWN0X25hbWUgPSBhcHBlbmRfb2JqZWN0X3Rv X2Zvcm1hdF9zdHJpbmcodHJlZSwgc3ViX2ZtdCk7CisKKwlwYXJhbSA9IG5ld19vYmplY3QoT2Jq VHlwZUFycmF5LCBvYmplY3RfbmFtZSk7CisJcGFyYW0tPnZhbHVlLmFycmF5ID0gYXJyYXk7CisJ YXBwZW5kX3ByZW1hZGVfb2JqZWN0KHRyZWUsIHBhcmFtKTsKK30KKworLyoKKyAqIEFwcGVuZCBh IGJvb2xlYW4gcGFyYW1ldGVyIHRvIGEgdHJlZS4KKyAqLworc3RhdGljIHZvaWQKK2FwcGVuZF9i b29sX29iamVjdChPYmpUcmVlICp0cmVlLCBjaGFyICpzdWJfZm10LCBib29sIHZhbHVlKQorewor CU9iakVsZW0gICAgKnBhcmFtOworCWNoYXIJICAgKm9iamVjdF9uYW1lID0gc3ViX2ZtdDsKKwli b29sCQlpc19wcmVzZW50X2ZsYWcgPSBmYWxzZTsKKworCUFzc2VydChzdWJfZm10KTsKKworCS8q CisJICogQ2hlY2sgaWYgdGhlIGZvcm1hdCBzdHJpbmcgaXMgJ3ByZXNlbnQnIGFuZCBpZiB5ZXMs IHN0b3JlIHRoZSBib29sZWFuCisJICogdmFsdWUKKwkgKi8KKwlpZiAoc3RyY21wKHN1Yl9mbXQs ICJwcmVzZW50IikgPT0gMCkKKwl7CisJCWlzX3ByZXNlbnRfZmxhZyA9IHRydWU7CisJCXRyZWUt PnByZXNlbnQgPSB2YWx1ZTsKKwl9CisKKwlpZiAoIXZlcmJvc2UgJiYgIXRyZWUtPnByZXNlbnQp CisJCXJldHVybjsKKworCWlmICghaXNfcHJlc2VudF9mbGFnKQorCQlvYmplY3RfbmFtZSA9IGFw cGVuZF9vYmplY3RfdG9fZm9ybWF0X3N0cmluZyh0cmVlLCBzdWJfZm10KTsKKworCXBhcmFtID0g bmV3X29iamVjdChPYmpUeXBlQm9vbCwgb2JqZWN0X25hbWUpOworCXBhcmFtLT52YWx1ZS5ib29s ZWFuID0gdmFsdWU7CisJYXBwZW5kX3ByZW1hZGVfb2JqZWN0KHRyZWUsIHBhcmFtKTsKK30KKwor LyoKKyAqIEFwcGVuZCB0aGUgaW5wdXQgZm9ybWF0IHN0cmluZyB0byB0aGUgT2JqVHJlZS4KKyAq Lworc3RhdGljIHZvaWQKK2FwcGVuZF9mb3JtYXRfc3RyaW5nKE9ialRyZWUgKnRyZWUsIGNoYXIg KnN1Yl9mbXQpCit7CisJaW50CQkJbGVuOworCWNoYXIJICAgKmZtdDsKKworCWlmICh0cmVlLT5m bXRpbmZvID09IE5VTEwpCisJCXJldHVybjsKKworCWZtdCA9IHRyZWUtPmZtdGluZm8tPmRhdGE7 CisJbGVuID0gdHJlZS0+Zm10aW5mby0+bGVuOworCisJLyogQWRkIGEgc2VwYXJhdG9yIGlmIG5l Y2Vzc2FyeSAqLworCWlmIChsZW4gPiAwICYmIGZtdFtsZW4gLSAxXSAhPSAnICcpCisJCWFwcGVu ZFN0cmluZ0luZm9TcGFjZXModHJlZS0+Zm10aW5mbywgMSk7CisKKwlhcHBlbmRTdHJpbmdJbmZv U3RyaW5nKHRyZWUtPmZtdGluZm8sIHN1Yl9mbXQpOworfQorCisvKgorICogQXBwZW5kIGEgTlVM TCBvYmplY3QgdG8gYSB0cmVlLgorICovCitzdGF0aWMgdm9pZAorYXBwZW5kX251bGxfb2JqZWN0 KE9ialRyZWUgKnRyZWUsIGNoYXIgKnN1Yl9mbXQpCit7CisJY2hhcgkgICAqb2JqZWN0X25hbWU7 CisKKwlBc3NlcnQoc3ViX2ZtdCk7CisKKwlpZiAoIXZlcmJvc2UpCisJCXJldHVybjsKKworCW9i amVjdF9uYW1lID0gYXBwZW5kX29iamVjdF90b19mb3JtYXRfc3RyaW5nKHRyZWUsIHN1Yl9mbXQp OworCisJYXBwZW5kX3ByZW1hZGVfb2JqZWN0KHRyZWUsIG5ld19vYmplY3QoT2JqVHlwZU51bGws IG9iamVjdF9uYW1lKSk7Cit9CisKKy8qCisgKiBBcHBlbmQgYW4gb2JqZWN0IHBhcmFtZXRlciB0 byBhIHRyZWUuCisgKi8KK3N0YXRpYyB2b2lkCithcHBlbmRfb2JqZWN0X29iamVjdChPYmpUcmVl ICp0cmVlLCBjaGFyICpzdWJfZm10LCBPYmpUcmVlICp2YWx1ZSkKK3sKKwlPYmpFbGVtICAgICpw YXJhbTsKKwljaGFyCSAgICpvYmplY3RfbmFtZTsKKworCUFzc2VydChzdWJfZm10KTsKKworCWlm ICghdmVyYm9zZSAmJiAhdmFsdWUtPnByZXNlbnQpCisJCXJldHVybjsKKworCW9iamVjdF9uYW1l ID0gYXBwZW5kX29iamVjdF90b19mb3JtYXRfc3RyaW5nKHRyZWUsIHN1Yl9mbXQpOworCisJcGFy YW0gPSBuZXdfb2JqZWN0KE9ialR5cGVPYmplY3QsIG9iamVjdF9uYW1lKTsKKwlwYXJhbS0+dmFs dWUub2JqZWN0ID0gdmFsdWU7CisJYXBwZW5kX3ByZW1hZGVfb2JqZWN0KHRyZWUsIHBhcmFtKTsK K30KKworLyoKKyAqIFJldHVybiB0aGUgb2JqZWN0IG5hbWUgd2hpY2ggaXMgZXh0cmFjdGVkIGZy b20gdGhlIGlucHV0ICIqJXtuYW1lWzouXX0qIgorICogc3R5bGUgc3RyaW5nLiBBbmQgYXBwZW5k IHRoZSBpbnB1dCBmb3JtYXQgc3RyaW5nIHRvIHRoZSBPYmpUcmVlLgorICovCitzdGF0aWMgY2hh ciAqCithcHBlbmRfb2JqZWN0X3RvX2Zvcm1hdF9zdHJpbmcoT2JqVHJlZSAqdHJlZSwgY2hhciAq c3ViX2ZtdCkKK3sKKwlTdHJpbmdJbmZvRGF0YSBvYmplY3RfbmFtZTsKKwljb25zdCBjaGFyICpl bmRfcHRyLCAqc3RhcnRfcHRyOworCWludCAgICAgICAgIGxlbmd0aDsKKwljaGFyICAgICAgICAq dG1wX3N0cjsKKworCWlmIChzdWJfZm10ID09IE5VTEwgfHwgdHJlZS0+Zm10aW5mbyA9PSBOVUxM KQorCQlyZXR1cm4gc3ViX2ZtdDsKKworCWluaXRTdHJpbmdJbmZvKCZvYmplY3RfbmFtZSk7CisK KwlzdGFydF9wdHIgPSBzdHJjaHIoc3ViX2ZtdCwgJ3snKTsKKwllbmRfcHRyID0gc3RyY2hyKHN1 Yl9mbXQsICc6Jyk7CisJaWYgKGVuZF9wdHIgPT0gTlVMTCkKKwkJZW5kX3B0ciA9IHN0cmNocihz dWJfZm10LCAnfScpOworCisJaWYgKHN0YXJ0X3B0ciAhPSBOVUxMICYmIGVuZF9wdHIgIT0gTlVM TCkKKwl7CisJCWxlbmd0aCA9IGVuZF9wdHIgLSBzdGFydF9wdHIgLSAxOworCQl0bXBfc3RyID0g KGNoYXIgKikgcGFsbG9jKGxlbmd0aCArIDEpOworCQlzdHJuY3B5KHRtcF9zdHIsIHN0YXJ0X3B0 ciArIDEsIGxlbmd0aCk7CisJCXRtcF9zdHJbbGVuZ3RoXSA9ICdcMCc7CisJCWFwcGVuZFN0cmlu Z0luZm9TdHJpbmcoJm9iamVjdF9uYW1lLCB0bXBfc3RyKTsKKwkJcGZyZWUodG1wX3N0cik7CisJ fQorCisJaWYgKG9iamVjdF9uYW1lLmxlbiA9PSAwKQorCQllbG9nKEVSUk9SLCAib2JqZWN0IG5h bWUgbm90IGZvdW5kIik7CisKKwlhcHBlbmRfZm9ybWF0X3N0cmluZyh0cmVlLCBzdWJfZm10KTsK KworCXJldHVybiBvYmplY3RfbmFtZS5kYXRhOworCit9CisKKy8qCisgKiBBcHBlbmQgYSBwcmVh bGxvY2F0ZWQgcGFyYW1ldGVyIHRvIGEgdHJlZS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkCith cHBlbmRfcHJlbWFkZV9vYmplY3QoT2JqVHJlZSAqdHJlZSwgT2JqRWxlbSAqZWxlbSkKK3sKKwlz bGlzdF9wdXNoX2hlYWQoJnRyZWUtPnBhcmFtcywgJmVsZW0tPm5vZGUpOworCXRyZWUtPm51bVBh cmFtcysrOworfQorCisvKgorICogQXBwZW5kIGEgc3RyaW5nIHBhcmFtZXRlciB0byBhIHRyZWUu CisgKi8KK3N0YXRpYyB2b2lkCithcHBlbmRfc3RyaW5nX29iamVjdChPYmpUcmVlICp0cmVlLCBj aGFyICpzdWJfZm10LCBjaGFyICogb2JqZWN0X25hbWUsCisJCQkJCSBjaGFyICp2YWx1ZSkKK3sK KwlPYmpFbGVtICAgICpwYXJhbTsKKworCUFzc2VydChzdWJfZm10KTsKKworCWlmICghdmVyYm9z ZSAmJiAodmFsdWUgPT0gTlVMTCB8fCB2YWx1ZVswXSA9PSAnXDAnKSkKKwkJcmV0dXJuOworCisJ YXBwZW5kX2Zvcm1hdF9zdHJpbmcodHJlZSwgc3ViX2ZtdCk7CisJcGFyYW0gPSBuZXdfb2JqZWN0 KE9ialR5cGVTdHJpbmcsIG9iamVjdF9uYW1lKTsKKwlwYXJhbS0+dmFsdWUuc3RyaW5nID0gdmFs dWU7CisJYXBwZW5kX3ByZW1hZGVfb2JqZWN0KHRyZWUsIHBhcmFtKTsKK30KKworLyoKKyAqIFNp bWlsYXIgdG8gZm9ybWF0X3R5cGVfZXh0ZW5kZWQsIGV4Y2VwdCB3ZSByZXR1cm4gZWFjaCBiaXQg b2YgaW5mb3JtYXRpb24KKyAqIHNlcGFyYXRlbHk6CisgKgorICogLSBuc3BpZCBpcyB0aGUgc2No ZW1hIE9JRC4gIEZvciBjZXJ0YWluIFNRTC1zdGFuZGFyZCB0eXBlcyB3aGljaCBoYXZlIHdlaXJk CisgKiAgIHR5cG1vZCBydWxlcywgd2UgcmV0dXJuIEludmFsaWRPaWQ7IHRoZSBjYWxsZXIgaXMg ZXhwZWN0ZWQgdG8gbm90IHNjaGVtYS0KKyAqICAgcXVhbGlmeSB0aGUgbmFtZSBub3IgYWRkIHF1 b3RlcyB0byB0aGUgdHlwZSBuYW1lIGluIHRoaXMgY2FzZS4KKyAqCisgKiAtIHR5cG5hbWUgaXMg c2V0IHRvIHRoZSB0eXBlIG5hbWUsIHdpdGhvdXQgcXVvdGVzCisgKgorICogLSB0eXBlbW9kc3Ry IGlzIHNldCB0byB0aGUgdHlwZW1vZCwgaWYgYW55LCBhcyBhIHN0cmluZyB3aXRoIHBhcmVudGhl c2VzCisgKgorICogLSB0eXBhcnJheSBpbmRpY2F0ZXMgd2hldGhlciBbXXMgbXVzdCBiZSBhZGRl ZAorICoKKyAqIFdlIGRvbid0IHRyeSB0byBkZWNvZGUgdHlwZSBuYW1lcyB0byB0aGVpciBzdGFu ZGFyZC1tYW5kYXRlZCBuYW1lcywgZXhjZXB0CisgKiBpbiB0aGUgY2FzZXMgb2YgdHlwZXMgd2l0 aCB1bnVzdWFsIHR5cG1vZCBydWxlcy4KKyAqLworc3RhdGljIHZvaWQKK2Zvcm1hdF90eXBlX2Rl dGFpbGVkKE9pZCB0eXBlX29pZCwgaW50MzIgdHlwZW1vZCwKKwkJCQkJIE9pZCAqbnNwaWQsIGNo YXIgKip0eXBlbmFtZSwgY2hhciAqKnR5cGVtb2RzdHIsCisJCQkJCSBib29sICp0eXBlYXJyYXkp Cit7CisJSGVhcFR1cGxlCXR1cGxlOworCUZvcm1fcGdfdHlwZSB0eXBlZm9ybTsKKwlPaWQJCQlh cnJheV9iYXNlX3R5cGU7CisKKwl0dXBsZSA9IFNlYXJjaFN5c0NhY2hlMShUWVBFT0lELCBPYmpl Y3RJZEdldERhdHVtKHR5cGVfb2lkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHR1cGxlKSkK KwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHR5cGUgd2l0aCBPSUQgJXUi LCB0eXBlX29pZCk7CisKKwl0eXBlZm9ybSA9IChGb3JtX3BnX3R5cGUpIEdFVFNUUlVDVCh0dXBs ZSk7CisKKwkvKgorCSAqIENoZWNrIGlmIGl0J3MgYSByZWd1bGFyICh2YXJpYWJsZSBsZW5ndGgp IGFycmF5IHR5cGUuICBBcyBhYm92ZSwKKwkgKiBmaXhlZC1sZW5ndGggYXJyYXkgdHlwZXMgc3Vj aCBhcyAibmFtZSIgc2hvdWxkbid0IGdldCBkZWNvbnN0cnVjdGVkLgorCSAqLworCWFycmF5X2Jh c2VfdHlwZSA9IHR5cGVmb3JtLT50eXBlbGVtOworCisJKnR5cGVhcnJheSA9IChJc1RydWVBcnJh eVR5cGUodHlwZWZvcm0pICYmIHR5cGVmb3JtLT50eXBzdG9yYWdlICE9IFRZUFNUT1JBR0VfUExB SU4pOworCisJaWYgKCp0eXBlYXJyYXkpCisJeworCQkvKiBTd2l0Y2ggb3VyIGF0dGVudGlvbiB0 byB0aGUgYXJyYXkgZWxlbWVudCB0eXBlICovCisJCVJlbGVhc2VTeXNDYWNoZSh0dXBsZSk7CisJ CXR1cGxlID0gU2VhcmNoU3lzQ2FjaGUxKFRZUEVPSUQsIE9iamVjdElkR2V0RGF0dW0oYXJyYXlf YmFzZV90eXBlKSk7CisJCWlmICghSGVhcFR1cGxlSXNWYWxpZCh0dXBsZSkpCisJCQllbG9nKEVS Uk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgdHlwZSB3aXRoIE9JRCAldSIsIHR5cGVfb2lk KTsKKworCQl0eXBlZm9ybSA9IChGb3JtX3BnX3R5cGUpIEdFVFNUUlVDVCh0dXBsZSk7CisJCXR5 cGVfb2lkID0gYXJyYXlfYmFzZV90eXBlOworCX0KKworCS8qCisJICogU3BlY2lhbC1jYXNlIGNy b2NrIGZvciB0eXBlcyB3aXRoIHN0cmFuZ2UgdHlwbW9kIHJ1bGVzIHdoZXJlIHdlIHB1dAorCSAq IHR5cGVtb2QgYXQgdGhlIG1pZGRsZSBvZiBuYW1lIChlLmcuIFRJTUUoNikgd2l0aCB0aW1lIHpv bmUpLiBXZSBjYW5ub3QKKwkgKiBzY2hlbWEtcXVhbGlmeSBub3IgYWRkIHF1b3RlcyB0byB0aGUg dHlwZSBuYW1lIGluIHRoZXNlIGNhc2VzLgorCSAqLworCSpuc3BpZCA9IEludmFsaWRPaWQ7CisK Kwlzd2l0Y2ggKHR5cGVfb2lkKQorCXsKKwkJY2FzZSBJTlRFUlZBTE9JRDoKKwkJCSp0eXBlbmFt ZSA9IHBzdHJkdXAoIklOVEVSVkFMIik7CisJCQlicmVhazsKKwkJY2FzZSBUSU1FU1RBTVBUWk9J RDoKKwkJCWlmICh0eXBlbW9kIDwgMCkKKwkJCQkqdHlwZW5hbWUgPSBwc3RyZHVwKCJUSU1FU1RB TVAgV0lUSCBUSU1FIFpPTkUiKTsKKwkJCWVsc2UKKwkJCQkvKiBvdGhlcndpc2UsIFdJVEggVFog aXMgYWRkZWQgYnkgdHlwbW9kLiAqLworCQkJCSp0eXBlbmFtZSA9IHBzdHJkdXAoIlRJTUVTVEFN UCIpOworCQkJYnJlYWs7CisJCWNhc2UgVElNRVNUQU1QT0lEOgorCQkJKnR5cGVuYW1lID0gcHN0 cmR1cCgiVElNRVNUQU1QIik7CisJCQlicmVhazsKKwkJY2FzZSBUSU1FVFpPSUQ6CisJCQlpZiAo dHlwZW1vZCA8IDApCisJCQkJKnR5cGVuYW1lID0gcHN0cmR1cCgiVElNRSBXSVRIIFRJTUUgWk9O RSIpOworCQkJZWxzZQorCQkJCS8qIG90aGVyd2lzZSwgV0lUSCBUWiBpcyBhZGRlZCBieSB0eXBt b2QuICovCisJCQkJKnR5cGVuYW1lID0gcHN0cmR1cCgiVElNRSIpOworCQkJYnJlYWs7CisJCWNh c2UgVElNRU9JRDoKKwkJCSp0eXBlbmFtZSA9IHBzdHJkdXAoIlRJTUUiKTsKKwkJCWJyZWFrOwor CQlkZWZhdWx0OgorCisJCQkvKgorCQkJICogTm8gYWRkaXRpb25hbCBwcm9jZXNzaW5nIGlzIHJl cXVpcmVkIGZvciBvdGhlciB0eXBlcywgc28gZ2V0CisJCQkgKiB0aGUgdHlwZSBuYW1lIGFuZCBz Y2hlbWEgZGlyZWN0bHkgZnJvbSB0aGUgY2F0YWxvZy4KKwkJCSAqLworCQkJKm5zcGlkID0gdHlw ZWZvcm0tPnR5cG5hbWVzcGFjZTsKKwkJCSp0eXBlbmFtZSA9IHBzdHJkdXAoTmFtZVN0cih0eXBl Zm9ybS0+dHlwbmFtZSkpOworCX0KKworCWlmICh0eXBlbW9kID49IDApCisJCSp0eXBlbW9kc3Ry ID0gcHJpbnRUeXBtb2QoIiIsIHR5cGVtb2QsIHR5cGVmb3JtLT50eXBtb2RvdXQpOworCWVsc2UK KwkJKnR5cGVtb2RzdHIgPSBwc3RyZHVwKCIiKTsKKworCVJlbGVhc2VTeXNDYWNoZSh0dXBsZSk7 Cit9CisKKy8qCisgKiBSZXR1cm4gdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgZ2l2 ZW4gUkVMUEVSU0lTVEVOQ0UgdmFsdWUuCisgKi8KK3N0YXRpYyBjaGFyICoKK2dldF9wZXJzaXN0 ZW5jZV9zdHIoY2hhciBwZXJzaXN0ZW5jZSkKK3sKKwlzd2l0Y2ggKHBlcnNpc3RlbmNlKQorCXsK KwkJY2FzZSBSRUxQRVJTSVNURU5DRV9URU1QOgorCQkJcmV0dXJuICJURU1QT1JBUlkiOworCQlj YXNlIFJFTFBFUlNJU1RFTkNFX1VOTE9HR0VEOgorCQkJcmV0dXJuICJVTkxPR0dFRCI7CisJCWNh c2UgUkVMUEVSU0lTVEVOQ0VfUEVSTUFORU5UOgorCQkJcmV0dXJuICIiOworCQlkZWZhdWx0Ogor CQkJZWxvZyhFUlJPUiwgInVuZXhwZWN0ZWQgcGVyc2lzdGVuY2UgbWFya2luZyAlYyIsIHBlcnNp c3RlbmNlKTsKKwkJCXJldHVybiAiIjsJCQkvKiBtYWtlIGNvbXBpbGVyIGhhcHB5ICovCisJfQor fQorCisvKgorICogUmV0dXJuIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdpdmVu IHN0b3JhZ2V0eXBlIHZhbHVlLgorICovCitzdGF0aWMgaW5saW5lIGNoYXIgKgorZ2V0X3R5cGVf c3RvcmFnZShjaGFyIHN0b3JhZ2V0eXBlKQoreworCXN3aXRjaCAoc3RvcmFnZXR5cGUpCisJewor CQljYXNlICdwJzoKKwkJCXJldHVybiAicGxhaW4iOworCQljYXNlICdlJzoKKwkJCXJldHVybiAi ZXh0ZXJuYWwiOworCQljYXNlICd4JzoKKwkJCXJldHVybiAiZXh0ZW5kZWQiOworCQljYXNlICdt JzoKKwkJCXJldHVybiAibWFpbiI7CisJCWRlZmF1bHQ6CisJCQllbG9nKEVSUk9SLCAiaW52YWxp ZCBzdG9yYWdlIHNwZWNpZmllciAlYyIsIHN0b3JhZ2V0eXBlKTsKKwl9Cit9CisKKy8qCisgKiBB bGxvY2F0ZSBhIG5ldyBwYXJhbWV0ZXIuCisgKi8KK3N0YXRpYyBPYmpFbGVtICoKK25ld19vYmpl Y3QoT2JqVHlwZSB0eXBlLCBjaGFyICpuYW1lKQoreworCU9iakVsZW0gICAgKnBhcmFtOworCisJ cGFyYW0gPSBwYWxsb2MwKHNpemVvZihPYmpFbGVtKSk7CisJcGFyYW0tPm5hbWUgPSBuYW1lOwor CXBhcmFtLT5vYmp0eXBlID0gdHlwZTsKKworCXJldHVybiBwYXJhbTsKK30KKworLyoKKyAqIEFs bG9jYXRlIGEgbmV3IG9iamVjdCBwYXJhbWV0ZXIuCisgKi8KK3N0YXRpYyBPYmpFbGVtICoKK25l d19vYmplY3Rfb2JqZWN0KE9ialRyZWUgKnZhbHVlKQoreworCU9iakVsZW0gICAgKnBhcmFtOwor CisJcGFyYW0gPSBuZXdfb2JqZWN0KE9ialR5cGVPYmplY3QsIE5VTEwpOworCXBhcmFtLT52YWx1 ZS5vYmplY3QgPSB2YWx1ZTsKKworCXJldHVybiBwYXJhbTsKK30KKworLyoKKyAqIEFsbG9jYXRl IGEgbmV3IG9iamVjdCB0cmVlIHRvIHN0b3JlIHBhcmFtZXRlciB2YWx1ZXMuCisgKi8KK3N0YXRp YyBPYmpUcmVlICoKK25ld19vYmp0cmVlKGNoYXIgKmZtdCkKK3sKKwlPYmpUcmVlICAgICpwYXJh bXM7CisKKwlwYXJhbXMgPSBwYWxsb2MwKHNpemVvZihPYmpUcmVlKSk7CisJcGFyYW1zLT5wcmVz ZW50ID0gdHJ1ZTsKKwlzbGlzdF9pbml0KCZwYXJhbXMtPnBhcmFtcyk7CisKKwlpZiAoZm10KQor CXsKKwkJcGFyYW1zLT5mbXRpbmZvID0gbWFrZVN0cmluZ0luZm8oKTsKKwkJYXBwZW5kU3RyaW5n SW5mb1N0cmluZyhwYXJhbXMtPmZtdGluZm8sIGZtdCk7CisJfQorCisJcmV0dXJuIHBhcmFtczsK K30KKworLyoKKyAqIEEgaGVscGVyIHJvdXRpbmUgdG8gc2V0IHVwICV7fUQgYW5kICV7fU8gZWxl bWVudHMuCisgKgorICogRWxlbWVudHMgInNjaGVtYV9uYW1lIiBhbmQgIm9ial9uYW1lIiBhcmUg c2V0LiAgSWYgdGhlIG5hbWVzcGFjZSBPSUQKKyAqIGNvcnJlc3BvbmRzIHRvIGEgdGVtcCBzY2hl bWEsIHRoYXQncyBzZXQgdG8gInBnX3RlbXAiLgorICoKKyAqIFRoZSBkaWZmZXJlbmNlIGJldHdl ZW4gdGhvc2UgdHdvIGVsZW1lbnQgdHlwZXMgaXMgd2hldGhlciB0aGUgb2JqX25hbWUgd2lsbAor ICogYmUgcXVvdGVkIGFzIGFuIGlkZW50aWZpZXIgb3Igbm90LCB3aGljaCBpcyBub3Qgc29tZXRo aW5nIHRoYXQgdGhpcyByb3V0aW5lCisgKiBjb25jZXJucyBpdHNlbGYgd2l0aDsgdGhhdCB3aWxs IGJlIHVwIHRvIHRoZSBleHBhbmQgZnVuY3Rpb24uCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK25l d19vYmp0cmVlX2Zvcl9xdWFsbmFtZShPaWQgbnNwaWQsIGNoYXIgKm5hbWUpCit7CisJT2JqVHJl ZSAgICAqcXVhbGlmaWVkOworCWNoYXIJICAgKm5hbWVzcGFjZTsKKworCWlmIChpc0FueVRlbXBO YW1lc3BhY2UobnNwaWQpKQorCQluYW1lc3BhY2UgPSBwc3RyZHVwKCJwZ190ZW1wIik7CisJZWxz ZQorCQluYW1lc3BhY2UgPSBnZXRfbmFtZXNwYWNlX25hbWUobnNwaWQpOworCisJcXVhbGlmaWVk ID0gbmV3X29ianRyZWVfVkEoTlVMTCwgMiwKKwkJCQkJCQkgICAic2NoZW1hbmFtZSIsIE9ialR5 cGVTdHJpbmcsIG5hbWVzcGFjZSwKKwkJCQkJCQkgICAib2JqbmFtZSIsIE9ialR5cGVTdHJpbmcs IHBzdHJkdXAobmFtZSkpOworCisJcmV0dXJuIHF1YWxpZmllZDsKK30KKworLyoKKyAqIEEgaGVs cGVyIHJvdXRpbmUgdG8gc2V0IHVwICV7fUQgYW5kICV7fU8gZWxlbWVudHMsIHdpdGggdGhlIG9i amVjdCBzcGVjaWZpZWQKKyAqIGJ5IGNsYXNzSWQvb2JqSWQuCisgKi8KK3N0YXRpYyBPYmpUcmVl ICoKK25ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChPaWQgY2xhc3NJZCwgT2lkIG9iamVjdElk KQoreworCU9ialRyZWUgICAgKnF1YWxpZmllZDsKKwlSZWxhdGlvbgljYXRhbG9nOworCUhlYXBU dXBsZQljYXRvYmo7CisJRGF0dW0JCW9ial9uc3A7CisJRGF0dW0JCW9ial9uYW1lOworCUF0dHJO dW1iZXIJQW51bV9uYW1lOworCUF0dHJOdW1iZXIJQW51bV9uYW1lc3BhY2U7CisJQXR0ck51bWJl cglBbnVtX29pZCA9IGdldF9vYmplY3RfYXR0bnVtX29pZChjbGFzc0lkKTsKKwlib29sCQlpc251 bGw7CisKKwljYXRhbG9nID0gdGFibGVfb3BlbihjbGFzc0lkLCBBY2Nlc3NTaGFyZUxvY2spOwor CisJY2F0b2JqID0gZ2V0X2NhdGFsb2dfb2JqZWN0X2J5X29pZChjYXRhbG9nLCBBbnVtX29pZCwg b2JqZWN0SWQpOworCWlmICghY2F0b2JqKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZh aWxlZCBmb3Igb2JqZWN0IHdpdGggT0lEICV1IG9mIGNhdGFsb2cgXCIlc1wiIiwKKwkJCSBvYmpl Y3RJZCwgUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUoY2F0YWxvZykpOworCUFudW1fbmFtZSA9IGdl dF9vYmplY3RfYXR0bnVtX25hbWUoY2xhc3NJZCk7CisJQW51bV9uYW1lc3BhY2UgPSBnZXRfb2Jq ZWN0X2F0dG51bV9uYW1lc3BhY2UoY2xhc3NJZCk7CisKKwlvYmpfbnNwID0gaGVhcF9nZXRhdHRy KGNhdG9iaiwgQW51bV9uYW1lc3BhY2UsIFJlbGF0aW9uR2V0RGVzY3IoY2F0YWxvZyksCisJCQkJ CQkgICZpc251bGwpOworCWlmIChpc251bGwpCisJCWVsb2coRVJST1IsICJudWxsIG5hbWVzcGFj ZSBmb3Igb2JqZWN0ICV1Iiwgb2JqZWN0SWQpOworCisJb2JqX25hbWUgPSBoZWFwX2dldGF0dHIo Y2F0b2JqLCBBbnVtX25hbWUsIFJlbGF0aW9uR2V0RGVzY3IoY2F0YWxvZyksCisJCQkJCQkgICAm aXNudWxsKTsKKwlpZiAoaXNudWxsKQorCQllbG9nKEVSUk9SLCAibnVsbCBhdHRyaWJ1dGUgbmFt ZSBmb3Igb2JqZWN0ICV1Iiwgb2JqZWN0SWQpOworCisJcXVhbGlmaWVkID0gbmV3X29ianRyZWVf Zm9yX3F1YWxuYW1lKERhdHVtR2V0T2JqZWN0SWQob2JqX25zcCksCisJCQkJCQkJCQkJIE5hbWVT dHIoKkRhdHVtR2V0TmFtZShvYmpfbmFtZSkpKTsKKwl0YWJsZV9jbG9zZShjYXRhbG9nLCBBY2Nl c3NTaGFyZUxvY2spOworCisJcmV0dXJuIHF1YWxpZmllZDsKK30KKworLyoKKyAqIEEgaGVscGVy IHJvdXRpbmUgdG8gc2V0dXAgJXt9VCBlbGVtZW50cy4KKyAqLworc3RhdGljIE9ialRyZWUgKgor bmV3X29ianRyZWVfZm9yX3R5cGUoT2lkIHR5cGVJZCwgaW50MzIgdHlwbW9kKQoreworCU9pZAkJ CXR5cG5zcGlkOworCWNoYXIJICAgKnR5cGVfbnNwOworCWNoYXIJICAgKnR5cGVfbmFtZSA9IE5V TEw7CisJY2hhcgkgICAqdHlwbW9kc3RyOworCWJvb2wJCXR5cGVfYXJyYXk7CisKKwlmb3JtYXRf dHlwZV9kZXRhaWxlZCh0eXBlSWQsIHR5cG1vZCwKKwkJCQkJCSAmdHlwbnNwaWQsICZ0eXBlX25h bWUsICZ0eXBtb2RzdHIsICZ0eXBlX2FycmF5KTsKKworCWlmIChPaWRJc1ZhbGlkKHR5cG5zcGlk KSkKKwkJdHlwZV9uc3AgPSBnZXRfbmFtZXNwYWNlX25hbWVfb3JfdGVtcCh0eXBuc3BpZCk7CisJ ZWxzZQorCQl0eXBlX25zcCA9IHBzdHJkdXAoIiIpOworCisJcmV0dXJuIG5ld19vYmp0cmVlX1ZB KE5VTEwsIDQsCisJCQkJCQkgICJzY2hlbWFuYW1lIiwgT2JqVHlwZVN0cmluZywgdHlwZV9uc3As CisJCQkJCQkgICJ0eXBlbmFtZSIsIE9ialR5cGVTdHJpbmcsIHR5cGVfbmFtZSwKKwkJCQkJCSAg InR5cG1vZCIsIE9ialR5cGVTdHJpbmcsIHR5cG1vZHN0ciwKKwkJCQkJCSAgInR5cGFycmF5Iiwg T2JqVHlwZUJvb2wsIHR5cGVfYXJyYXkpOworfQorCisvKgorICogQWxsb2NhdGUgYSBuZXcgb2Jq ZWN0IHRyZWUgdG8gc3RvcmUgcGFyYW1ldGVyIHZhbHVlcyAtLSB2YXJhcmdzIHZlcnNpb24uCisg KgorICogVGhlICJmbXQiIGFyZ3VtZW50IGlzIHVzZWQgdG8gYXBwZW5kIGFzIGEgImZtdCIgZWxl bWVudCBpbiB0aGUgb3V0cHV0IGJsb2IuCisgKiBudW1vYmpzIGluZGljYXRlcyB0aGUgbnVtYmVy IG9mIGV4dHJhIGVsZW1lbnRzIHRvIGFwcGVuZDsgZm9yIGVhY2ggb25lLCBhCisgKiBuYW1lIChz dHJpbmcpLCB0eXBlIChmcm9tIHRoZSBPYmpUeXBlIGVudW0pIGFuZCB2YWx1ZSBtdXN0IGJlIHN1 cHBsaWVkLiAgVGhlCisgKiB2YWx1ZSBtdXN0IG1hdGNoIHRoZSB0eXBlIGdpdmVuOyBmb3IgaW5z dGFuY2UsIE9ialR5cGVJbnRlZ2VyIHJlcXVpcmVzIGFuCisgKiBpbnQ2NCwgT2JqVHlwZVN0cmlu ZyByZXF1aXJlcyBhIGNoYXIgKiwgT2JqVHlwZUFycmF5IHJlcXVpcmVzIGEgbGlzdCAob2YKKyAq IE9iakVsZW0pLCBPYmpUeXBlT2JqZWN0IHJlcXVpcmVzIGFuIE9ialRyZWUsIGFuZCBzbyBvbi4g IEVhY2ggZWxlbWVudCB0eXBlICoKKyAqIG11c3QgbWF0Y2ggdGhlIGNvbnZlcnNpb24gc3BlY2lm aWVyIGdpdmVuIGluIHRoZSBmb3JtYXQgc3RyaW5nLCBhcyBkZXNjcmliZWQKKyAqIGluIGRkbF9k ZXBhcnNlX2V4cGFuZF9jb21tYW5kLCBxLnYuCisgKgorICogTm90ZSB3ZSBkb24ndCBoYXZlIHRo ZSBsdXh1cnkgb2Ygc3ByaW50Zi1saWtlIGNvbXBpbGVyIHdhcm5pbmdzIGZvcgorICogbWFsZm9y bWVkIGFyZ3VtZW50IGxpc3RzLgorICovCitzdGF0aWMgT2JqVHJlZSAqCituZXdfb2JqdHJlZV9W QShjaGFyICpmbXQsIGludCBudW1vYmpzLC4uLikKK3sKKwlPYmpUcmVlICAgICp0cmVlOworCXZh X2xpc3QJCWFyZ3M7CisJaW50CQkJaTsKKworCS8qIFNldCB1cCB0aGUgdG9wbGV2ZWwgb2JqZWN0 IGFuZCBpdHMgImZtdCIgKi8KKwl0cmVlID0gbmV3X29ianRyZWUoZm10KTsKKworCS8qIEFuZCBw cm9jZXNzIHRoZSBnaXZlbiB2YXJhcmdzICovCisJdmFfc3RhcnQoYXJncywgbnVtb2Jqcyk7CisJ Zm9yIChpID0gMDsgaSA8IG51bW9ianM7IGkrKykKKwl7CisJCWNoYXIJICAgKm5hbWU7CisJCU9i alR5cGUJCXR5cGU7CisJCU9iakVsZW0gICAgKmVsZW07CisKKwkJbmFtZSA9IHZhX2FyZyhhcmdz LCBjaGFyICopOworCQl0eXBlID0gdmFfYXJnKGFyZ3MsIE9ialR5cGUpOworCQllbGVtID0gbmV3 X29iamVjdCh0eXBlLCBOVUxMKTsKKworCQkvKgorCQkgKiBGb3IgYWxsIHBhcmFtIHR5cGVzIG90 aGVyIHRoYW4gT2JqVHlwZU51bGwsIHRoZXJlIG11c3QgYmUgYSB2YWx1ZSBpbgorCQkgKiB0aGUg dmFyYXJncy4gRmV0Y2ggaXQgYW5kIGFkZCB0aGUgZnVsbHkgZm9ybWVkIHN1Ym9iamVjdCBpbnRv IHRoZQorCQkgKiBtYWluIG9iamVjdC4KKwkJICovCisJCXN3aXRjaCAodHlwZSkKKwkJeworCQkJ Y2FzZSBPYmpUeXBlTnVsbDoKKwkJCQkvKiBOdWxsIHBhcmFtcyBkb24ndCBoYXZlIGEgdmFsdWUg KG9idmlvdXNseSkgKi8KKwkJCQlicmVhazsKKwkJCWNhc2UgT2JqVHlwZUJvb2w6CisJCQkJZWxl bS0+dmFsdWUuYm9vbGVhbiA9IHZhX2FyZyhhcmdzLCBpbnQpOworCQkJCWJyZWFrOworCQkJY2Fz ZSBPYmpUeXBlU3RyaW5nOgorCQkJCWVsZW0tPnZhbHVlLnN0cmluZyA9IHZhX2FyZyhhcmdzLCBj aGFyICopOworCQkJCWJyZWFrOworCQkJY2FzZSBPYmpUeXBlQXJyYXk6CisJCQkJZWxlbS0+dmFs dWUuYXJyYXkgPSB2YV9hcmcoYXJncywgTGlzdCAqKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgT2Jq VHlwZUludGVnZXI6CisJCQkJZWxlbS0+dmFsdWUuaW50ZWdlciA9IHZhX2FyZyhhcmdzLCBpbnQp OworCQkJCWJyZWFrOworCQkJY2FzZSBPYmpUeXBlRmxvYXQ6CisJCQkJZWxlbS0+dmFsdWUuZmx0 ID0gdmFfYXJnKGFyZ3MsIGRvdWJsZSk7CisJCQkJYnJlYWs7CisJCQljYXNlIE9ialR5cGVPYmpl Y3Q6CisJCQkJZWxlbS0+dmFsdWUub2JqZWN0ID0gdmFfYXJnKGFyZ3MsIE9ialRyZWUgKik7CisJ CQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCWVsb2coRVJST1IsICJpbnZhbGlkIE9ialRyZWUg ZWxlbWVudCB0eXBlICVkIiwgdHlwZSk7CisJCX0KKworCQllbGVtLT5uYW1lID0gbmFtZTsKKwkJ YXBwZW5kX3ByZW1hZGVfb2JqZWN0KHRyZWUsIGVsZW0pOworCX0KKworCXZhX2VuZChhcmdzKTsK KwlyZXR1cm4gdHJlZTsKK30KKworLyoKKyAqIFByb2Nlc3MgdGhlIHByZS1idWlsdCBmb3JtYXQg c3RyaW5nIGZyb20gdGhlIE9ialRyZWUgaW50byB0aGUgb3V0cHV0IHBhcnNlCisgKiBzdGF0ZS4K KyAqLworc3RhdGljIHZvaWQKK29ianRyZWVfZm10X3RvX2pzb25iX2VsZW1lbnQoSnNvbmJQYXJz ZVN0YXRlICpzdGF0ZSwgT2JqVHJlZSAqdHJlZSkKK3sKKwlKc29uYlZhbHVlCWtleTsKKwlKc29u YlZhbHVlCXZhbDsKKworCWlmICh0cmVlLT5mbXRpbmZvID09IE5VTEwpCisJCXJldHVybjsKKwor CS8qIFB1c2ggdGhlIGtleSBmaXJzdCAqLworCWtleS50eXBlID0gamJ2U3RyaW5nOworCWtleS52 YWwuc3RyaW5nLnZhbCA9ICJmbXQiOworCWtleS52YWwuc3RyaW5nLmxlbiA9IHN0cmxlbihrZXku dmFsLnN0cmluZy52YWwpOworCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgV0pCX0tFWSwgJmtleSk7 CisKKwkvKiBUaGVuIHByb2Nlc3MgdGhlIHByZS1idWlsdCBmb3JtYXQgc3RyaW5nICovCisJdmFs LnR5cGUgPSBqYnZTdHJpbmc7CisJdmFsLnZhbC5zdHJpbmcubGVuID0gdHJlZS0+Zm10aW5mby0+ bGVuOworCXZhbC52YWwuc3RyaW5nLnZhbCA9IHRyZWUtPmZtdGluZm8tPmRhdGE7CisJcHVzaEpz b25iVmFsdWUoJnN0YXRlLCBXSkJfVkFMVUUsICZ2YWwpOworfQorCisvKgorICogQ3JlYXRlIGEg SlNPTkIgcmVwcmVzZW50YXRpb24gZnJvbSBhbiBPYmpUcmVlLgorICovCitzdGF0aWMgSnNvbmIg Kgorb2JqdHJlZV90b19qc29uYihPYmpUcmVlICp0cmVlKQoreworCUpzb25iVmFsdWUgKnZhbHVl OworCisJdmFsdWUgPSBvYmp0cmVlX3RvX2pzb25iX3JlYyh0cmVlLCBOVUxMKTsKKwlyZXR1cm4g SnNvbmJWYWx1ZVRvSnNvbmIodmFsdWUpOworfQorCisvKgorICogSGVscGVyIGZvciBvYmp0cmVl X3RvX2pzb25iOiBwcm9jZXNzIGFuIGluZGl2aWR1YWwgZWxlbWVudCBmcm9tIGFuIG9iamVjdCBv cgorICogYW4gYXJyYXkgaW50byB0aGUgb3V0cHV0IHBhcnNlIHN0YXRlLgorICovCitzdGF0aWMg dm9pZAorb2JqdHJlZV90b19qc29uYl9lbGVtZW50KEpzb25iUGFyc2VTdGF0ZSAqc3RhdGUsIE9i akVsZW0gKm9iamVjdCwKKwkJCQkJCSBKc29uYkl0ZXJhdG9yVG9rZW4gZWxlbV90b2tlbikKK3sK KwlKc29uYlZhbHVlCXZhbDsKKworCXN3aXRjaCAob2JqZWN0LT5vYmp0eXBlKQorCXsKKwkJY2Fz ZSBPYmpUeXBlTnVsbDoKKwkJCXZhbC50eXBlID0gamJ2TnVsbDsKKwkJCXB1c2hKc29uYlZhbHVl KCZzdGF0ZSwgZWxlbV90b2tlbiwgJnZhbCk7CisJCQlicmVhazsKKworCQljYXNlIE9ialR5cGVT dHJpbmc6CisJCQl2YWwudHlwZSA9IGpidlN0cmluZzsKKwkJCXZhbC52YWwuc3RyaW5nLmxlbiA9 IHN0cmxlbihvYmplY3QtPnZhbHVlLnN0cmluZyk7CisJCQl2YWwudmFsLnN0cmluZy52YWwgPSBv YmplY3QtPnZhbHVlLnN0cmluZzsKKwkJCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgZWxlbV90b2tl biwgJnZhbCk7CisJCQlicmVhazsKKworCQljYXNlIE9ialR5cGVJbnRlZ2VyOgorCQkJdmFsLnR5 cGUgPSBqYnZOdW1lcmljOworCQkJdmFsLnZhbC5udW1lcmljID0gKE51bWVyaWMpCisJCQkJRGF0 dW1HZXROdW1lcmljKERpcmVjdEZ1bmN0aW9uQ2FsbDEoaW50OF9udW1lcmljLAorCQkJCQkJCQkJ CQkJCW9iamVjdC0+dmFsdWUuaW50ZWdlcikpOworCQkJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBl bGVtX3Rva2VuLCAmdmFsKTsKKwkJCWJyZWFrOworCisJCWNhc2UgT2JqVHlwZUZsb2F0OgorCQkJ dmFsLnR5cGUgPSBqYnZOdW1lcmljOworCQkJdmFsLnZhbC5udW1lcmljID0gKE51bWVyaWMpCisJ CQkJRGF0dW1HZXROdW1lcmljKERpcmVjdEZ1bmN0aW9uQ2FsbDEoZmxvYXQ4X251bWVyaWMsCisJ CQkJCQkJCQkJCQkJb2JqZWN0LT52YWx1ZS5pbnRlZ2VyKSk7CisJCQlwdXNoSnNvbmJWYWx1ZSgm c3RhdGUsIGVsZW1fdG9rZW4sICZ2YWwpOworCQkJYnJlYWs7CisKKwkJY2FzZSBPYmpUeXBlQm9v bDoKKwkJCXZhbC50eXBlID0gamJ2Qm9vbDsKKwkJCXZhbC52YWwuYm9vbGVhbiA9IG9iamVjdC0+ dmFsdWUuYm9vbGVhbjsKKwkJCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgZWxlbV90b2tlbiwgJnZh bCk7CisJCQlicmVhazsKKworCQljYXNlIE9ialR5cGVPYmplY3Q6CisJCQkvKiBSZWN1cnNpdmVs eSBhZGQgdGhlIG9iamVjdCBpbnRvIHRoZSBleGlzdGluZyBwYXJzZSBzdGF0ZSAqLworCQkJb2Jq dHJlZV90b19qc29uYl9yZWMob2JqZWN0LT52YWx1ZS5vYmplY3QsIHN0YXRlKTsKKwkJCWJyZWFr OworCisJCWNhc2UgT2JqVHlwZUFycmF5OgorCQkJeworCQkJCUxpc3RDZWxsICAgKmNlbGw7CisK KwkJCQlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdKQl9CRUdJTl9BUlJBWSwgTlVMTCk7CisJCQkJ Zm9yZWFjaChjZWxsLCBvYmplY3QtPnZhbHVlLmFycmF5KQorCQkJCXsKKwkJCQkJT2JqRWxlbSAg ICAqZWxlbSA9IGxmaXJzdChjZWxsKTsKKworCQkJCQlvYmp0cmVlX3RvX2pzb25iX2VsZW1lbnQo c3RhdGUsIGVsZW0sIFdKQl9FTEVNKTsKKwkJCQl9CisJCQkJcHVzaEpzb25iVmFsdWUoJnN0YXRl LCBXSkJfRU5EX0FSUkFZLCBOVUxMKTsKKwkJCX0KKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJ CQllbG9nKEVSUk9SLCAidW5yZWNvZ25pemVkIG9iamVjdCB0eXBlICVkIiwgb2JqZWN0LT5vYmp0 eXBlKTsKKwkJCWJyZWFrOworCX0KK30KKworLyoKKyAqIFJlY3Vyc2l2ZSBoZWxwZXIgZm9yIG9i anRyZWVfdG9fanNvbmIuCisgKi8KK3N0YXRpYyBKc29uYlZhbHVlICoKK29ianRyZWVfdG9fanNv bmJfcmVjKE9ialRyZWUgKnRyZWUsIEpzb25iUGFyc2VTdGF0ZSAqc3RhdGUpCit7CisJc2xpc3Rf aXRlcglpdGVyOworCisJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBXSkJfQkVHSU5fT0JKRUNULCBO VUxMKTsKKworCW9ianRyZWVfZm10X3RvX2pzb25iX2VsZW1lbnQoc3RhdGUsIHRyZWUpOworCisJ c2xpc3RfZm9yZWFjaChpdGVyLCAmdHJlZS0+cGFyYW1zKQorCXsKKwkJT2JqRWxlbSAgICAqb2Jq ZWN0ID0gc2xpc3RfY29udGFpbmVyKE9iakVsZW0sIG5vZGUsIGl0ZXIuY3VyKTsKKwkJSnNvbmJW YWx1ZQlrZXk7CisKKwkJLyogUHVzaCB0aGUga2V5IGZpcnN0ICovCisJCWtleS50eXBlID0gamJ2 U3RyaW5nOworCQlrZXkudmFsLnN0cmluZy5sZW4gPSBzdHJsZW4ob2JqZWN0LT5uYW1lKTsKKwkJ a2V5LnZhbC5zdHJpbmcudmFsID0gb2JqZWN0LT5uYW1lOworCQlwdXNoSnNvbmJWYWx1ZSgmc3Rh dGUsIFdKQl9LRVksICZrZXkpOworCisJCS8qIFRoZW4gcHJvY2VzcyB0aGUgdmFsdWUgYWNjb3Jk aW5nIHRvIGl0cyB0eXBlICovCisJCW9ianRyZWVfdG9fanNvbmJfZWxlbWVudChzdGF0ZSwgb2Jq ZWN0LCBXSkJfVkFMVUUpOworCX0KKworCXJldHVybiBwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdK Ql9FTkRfT0JKRUNULCBOVUxMKTsKK30KKworLyoKKyAqIFN1YnJvdXRpbmUgZm9yIENSRUFURSBU QUJMRS9DUkVBVEUgRE9NQUlOIGRlcGFyc2luZy4KKyAqCisgKiBHaXZlbiBhIHRhYmxlIE9JRCBv ciBkb21haW4gT0lELCBvYnRhaW4gaXRzIGNvbnN0cmFpbnRzIGFuZCBhcHBlbmQgdGhlbSB0bwor ICogdGhlIGdpdmVuIGVsZW1lbnRzIGxpc3QuICBUaGUgdXBkYXRlZCBsaXN0IGlzIHJldHVybmVk LgorICoKKyAqIFRoaXMgd29ya3MgZm9yIHR5cGVkIHRhYmxlcywgcmVndWxhciB0YWJsZXMsIGFu ZCBkb21haW5zLgorICoKKyAqIE5vdGUgdGhhdCBDT05TVFJBSU5UX0ZPUkVJR04gY29uc3RyYWlu dHMgYXJlIGFsd2F5cyBpZ25vcmVkLgorICovCitzdGF0aWMgTGlzdCAqCitvYnRhaW5Db25zdHJh aW50cyhMaXN0ICplbGVtZW50cywgT2lkIHJlbGF0aW9uSWQsIE9pZCBkb21haW5JZCkKK3sKKwlS ZWxhdGlvbgljb25SZWw7CisJU2NhbktleURhdGEga2V5OworCVN5c1NjYW5EZXNjIHNjYW47CisJ SGVhcFR1cGxlCXR1cGxlOworCU9ialRyZWUgICAgKmNvbnN0cjsKKworCS8qIE9ubHkgb25lIG1h eSBiZSB2YWxpZCAqLworCUFzc2VydChPaWRJc1ZhbGlkKHJlbGF0aW9uSWQpIF4gT2lkSXNWYWxp ZChkb21haW5JZCkpOworCisJLyoKKwkgKiBTY2FuIHBnX2NvbnN0cmFpbnQgdG8gZmV0Y2ggYWxs IGNvbnN0cmFpbnRzIGxpbmtlZCB0byB0aGUgZ2l2ZW4KKwkgKiByZWxhdGlvbi4KKwkgKi8KKwlj b25SZWwgPSB0YWJsZV9vcGVuKENvbnN0cmFpbnRSZWxhdGlvbklkLCBBY2Nlc3NTaGFyZUxvY2sp OworCWlmIChPaWRJc1ZhbGlkKHJlbGF0aW9uSWQpKQorCXsKKwkJU2NhbktleUluaXQoJmtleSwK KwkJCQkJQW51bV9wZ19jb25zdHJhaW50X2NvbnJlbGlkLAorCQkJCQlCVEVxdWFsU3RyYXRlZ3lO dW1iZXIsIEZfT0lERVEsCisJCQkJCU9iamVjdElkR2V0RGF0dW0ocmVsYXRpb25JZCkpOworCQlz Y2FuID0gc3lzdGFibGVfYmVnaW5zY2FuKGNvblJlbCwgQ29uc3RyYWludFJlbGlkVHlwaWROYW1l SW5kZXhJZCwKKwkJCQkJCQkJICB0cnVlLCBOVUxMLCAxLCAma2V5KTsKKwl9CisJZWxzZQorCXsK KwkJU2NhbktleUluaXQoJmtleSwKKwkJCQkJQW51bV9wZ19jb25zdHJhaW50X2NvbnR5cGlkLAor CQkJCQlCVEVxdWFsU3RyYXRlZ3lOdW1iZXIsIEZfT0lERVEsCisJCQkJCU9iamVjdElkR2V0RGF0 dW0oZG9tYWluSWQpKTsKKwkJc2NhbiA9IHN5c3RhYmxlX2JlZ2luc2Nhbihjb25SZWwsIENvbnN0 cmFpbnRUeXBpZEluZGV4SWQsCisJCQkJCQkJCSAgdHJ1ZSwgTlVMTCwgMSwgJmtleSk7CisJfQor CisJLyoKKwkgKiBGb3IgZWFjaCBjb25zdHJhaW50LCBhZGQgYSBub2RlIHRvIHRoZSBsaXN0IG9m IHRhYmxlIGVsZW1lbnRzLiAgSW4KKwkgKiB0aGVzZSBub2RlcyB3ZSBpbmNsdWRlIG5vdCBvbmx5 IHRoZSBwcmludGFibGUgaW5mb3JtYXRpb24gKCJmbXQiKSwgYnV0CisJICogYWxzbyBzZXBhcmF0 ZSBhdHRyaWJ1dGVzIHRvIGluZGljYXRlIHRoZSB0eXBlIG9mIGNvbnN0cmFpbnQsIGZvcgorCSAq IGF1dG9tYXRpYyBwcm9jZXNzaW5nLgorCSAqLworCXdoaWxlIChIZWFwVHVwbGVJc1ZhbGlkKHR1 cGxlID0gc3lzdGFibGVfZ2V0bmV4dChzY2FuKSkpCisJeworCQlGb3JtX3BnX2NvbnN0cmFpbnQg Y29uc3RyRm9ybTsKKwkJY2hhcgkgICAqY29udHlwZTsKKworCQljb25zdHJGb3JtID0gKEZvcm1f cGdfY29uc3RyYWludCkgR0VUU1RSVUNUKHR1cGxlKTsKKworCQlzd2l0Y2ggKGNvbnN0ckZvcm0t PmNvbnR5cGUpCisJCXsKKwkJCWNhc2UgQ09OU1RSQUlOVF9DSEVDSzoKKwkJCQljb250eXBlID0g ImNoZWNrIjsKKwkJCQlicmVhazsKKwkJCWNhc2UgQ09OU1RSQUlOVF9GT1JFSUdOOgorCQkJCWNv bnRpbnVlOwkJLyogbm90IGhlcmUgKi8KKwkJCWNhc2UgQ09OU1RSQUlOVF9QUklNQVJZOgorCQkJ CWNvbnR5cGUgPSAicHJpbWFyeSBrZXkiOworCQkJCWJyZWFrOworCQkJY2FzZSBDT05TVFJBSU5U X1VOSVFVRToKKwkJCQljb250eXBlID0gInVuaXF1ZSI7CisJCQkJYnJlYWs7CisJCQljYXNlIENP TlNUUkFJTlRfVFJJR0dFUjoKKwkJCQljb250eXBlID0gInRyaWdnZXIiOworCQkJCWJyZWFrOwor CQkJY2FzZSBDT05TVFJBSU5UX0VYQ0xVU0lPTjoKKwkJCQljb250eXBlID0gImV4Y2x1c2lvbiI7 CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCWVsb2coRVJST1IsICJ1bnJlY29nbml6ZWQg Y29uc3RyYWludCB0eXBlIik7CisJCX0KKworCQkvKgorCQkgKiAidHlwZSIgYW5kICJjb250eXBl IiBhcmUgbm90IHBhcnQgb2YgdGhlIHByaW50YWJsZSBvdXRwdXQsIGJ1dCBhcmUKKwkJICogdXNl ZnVsIHRvIHByb2dyYW1tYXRpY2FsbHkgZGlzdGluZ3Vpc2ggdGhlc2UgZnJvbSBjb2x1bW5zIGFu ZCBhbW9uZworCQkgKiBkaWZmZXJlbnQgY29uc3RyYWludCB0eXBlcy4KKwkJICoKKwkJICogWFhY IGl0IG1pZ2h0IGJlIHVzZWZ1bCB0byBhbHNvIGxpc3QgdGhlIGNvbHVtbiBuYW1lcyBpbiBhIFBL LCBldGMuCisJCSAqLworCQljb25zdHIgPSBuZXdfb2JqdHJlZV9WQSgiQ09OU1RSQUlOVCAle25h bWV9SSAle2RlZmluaXRpb259cyIsIDQsCisJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywg ImNvbnN0cmFpbnQiLAorCQkJCQkJCQkiY29udHlwZSIsIE9ialR5cGVTdHJpbmcsIGNvbnR5cGUs CisJCQkJCQkJCSJuYW1lIiwgT2JqVHlwZVN0cmluZywgTmFtZVN0cihjb25zdHJGb3JtLT5jb25u YW1lKSwKKwkJCQkJCQkJImRlZmluaXRpb24iLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQlwZ19n ZXRfY29uc3RyYWludGRlZl9jb21tYW5kX3NpbXBsZShjb25zdHJGb3JtLT5vaWQpKTsKKwkJZWxl bWVudHMgPSBsYXBwZW5kKGVsZW1lbnRzLCBuZXdfb2JqZWN0X29iamVjdChjb25zdHIpKTsKKwl9 CisKKwlzeXN0YWJsZV9lbmRzY2FuKHNjYW4pOworCXRhYmxlX2Nsb3NlKGNvblJlbCwgQWNjZXNz U2hhcmVMb2NrKTsKKworCXJldHVybiBlbGVtZW50czsKK30KKworLyoKKyAqIFJldHVybiBhbiBp bmRleCBkZWZpbml0aW9uLCBzcGxpdCBpbnRvIHNldmVyYWwgcGllY2VzLgorICoKKyAqIEEgbGFy Z2UgYW1vdW50IG9mIGNvZGUgaXMgZHVwbGljYXRlZCBmcm9tICBwZ19nZXRfaW5kZXhkZWZfd29y a2VyLCBidXQKKyAqIGNvbnRyb2wgZmxvdyBpcyBkaWZmZXJlbnQgZW5vdWdoIHRoYXQgaXQgZG9l c24ndCBzZWVtIHdvcnRoIGtlZXBpbmcgdGhlbQorICogdG9nZXRoZXIuCisgKi8KK3N0YXRpYyB2 b2lkCitwZ19nZXRfaW5kZXhkZWZfZGV0YWlsZWQoT2lkIGluZGV4cmVsaWQsCisJCQkJCQkgY2hh ciAqKmluZGV4X2FtLAorCQkJCQkJIGNoYXIgKipkZWZpbml0aW9uLAorCQkJCQkJIGNoYXIgKipy ZWxvcHRpb25zLAorCQkJCQkJIGNoYXIgKip0YWJsZXNwYWNlLAorCQkJCQkJIGNoYXIgKip3aGVy ZUNsYXVzZSkKK3sKKwlIZWFwVHVwbGUJaHRfaWR4OworCUhlYXBUdXBsZQlodF9pZHhyZWw7CisJ SGVhcFR1cGxlCWh0X2FtOworCUZvcm1fcGdfaW5kZXggaWR4cmVjOworCUZvcm1fcGdfY2xhc3Mg aWR4cmVscmVjOworCUZvcm1fcGdfYW0JYW1yZWM7CisJSW5kZXhBbVJvdXRpbmUgKmFtcm91dGlu ZTsKKwlMaXN0CSAgICppbmRleHByczsKKwlMaXN0Q2VsbCAgICppbmRleHByX2l0ZW07CisJTGlz dAkgICAqY29udGV4dDsKKwlPaWQJCQlpbmRyZWxpZDsKKwlpbnQJCQlrZXlubzsKKwlEYXR1bQkJ aW5kY29sbERhdHVtOworCURhdHVtCQlpbmRjbGFzc0RhdHVtOworCURhdHVtCQlpbmRvcHRpb25E YXR1bTsKKwlib29sCQlpc251bGw7CisJb2lkdmVjdG9yICAqaW5kY29sbGF0aW9uOworCW9pZHZl Y3RvciAgKmluZGNsYXNzOworCWludDJ2ZWN0b3IgKmluZG9wdGlvbjsKKwlTdHJpbmdJbmZvRGF0 YSBkZWZpbml0aW9uQnVmOworCisJKnRhYmxlc3BhY2UgPSBOVUxMOworCSp3aGVyZUNsYXVzZSA9 IE5VTEw7CisKKwkvKiBGZXRjaCB0aGUgcGdfaW5kZXggdHVwbGUgYnkgdGhlIE9pZCBvZiB0aGUg aW5kZXggKi8KKwlodF9pZHggPSBTZWFyY2hTeXNDYWNoZTEoSU5ERVhSRUxJRCwgT2JqZWN0SWRH ZXREYXR1bShpbmRleHJlbGlkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGh0X2lkeCkpCisJ CWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBpbmRleCB3aXRoIE9JRCAldSIs IGluZGV4cmVsaWQpOworCWlkeHJlYyA9IChGb3JtX3BnX2luZGV4KSBHRVRTVFJVQ1QoaHRfaWR4 KTsKKworCWluZHJlbGlkID0gaWR4cmVjLT5pbmRyZWxpZDsKKwlBc3NlcnQoaW5kZXhyZWxpZCA9 PSBpZHhyZWMtPmluZGV4cmVsaWQpOworCisJLyogTXVzdCBnZXQgaW5kY29sbGF0aW9uLCBpbmRj bGFzcywgYW5kIGluZG9wdGlvbiB0aGUgaGFyZCB3YXkgKi8KKwlpbmRjb2xsRGF0dW0gPSBTeXND YWNoZUdldEF0dHIoSU5ERVhSRUxJRCwgaHRfaWR4LAorCQkJCQkJCQkgICBBbnVtX3BnX2luZGV4 X2luZGNvbGxhdGlvbiwgJmlzbnVsbCk7CisJQXNzZXJ0KCFpc251bGwpOworCWluZGNvbGxhdGlv biA9IChvaWR2ZWN0b3IgKikgRGF0dW1HZXRQb2ludGVyKGluZGNvbGxEYXR1bSk7CisKKwlpbmRj bGFzc0RhdHVtID0gU3lzQ2FjaGVHZXRBdHRyKElOREVYUkVMSUQsIGh0X2lkeCwKKwkJCQkJCQkJ CUFudW1fcGdfaW5kZXhfaW5kY2xhc3MsICZpc251bGwpOworCUFzc2VydCghaXNudWxsKTsKKwlp bmRjbGFzcyA9IChvaWR2ZWN0b3IgKikgRGF0dW1HZXRQb2ludGVyKGluZGNsYXNzRGF0dW0pOwor CisJaW5kb3B0aW9uRGF0dW0gPSBTeXNDYWNoZUdldEF0dHIoSU5ERVhSRUxJRCwgaHRfaWR4LAor CQkJCQkJCQkJIEFudW1fcGdfaW5kZXhfaW5kb3B0aW9uLCAmaXNudWxsKTsKKwlBc3NlcnQoIWlz bnVsbCk7CisJaW5kb3B0aW9uID0gKGludDJ2ZWN0b3IgKikgRGF0dW1HZXRQb2ludGVyKGluZG9w dGlvbkRhdHVtKTsKKworCS8qIEZldGNoIHRoZSBwZ19jbGFzcyB0dXBsZSBvZiB0aGUgaW5kZXgg cmVsYXRpb24gKi8KKwlodF9pZHhyZWwgPSBTZWFyY2hTeXNDYWNoZTEoUkVMT0lELCBPYmplY3RJ ZEdldERhdHVtKGluZGV4cmVsaWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoaHRfaWR4cmVs KSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHJlbGF0aW9uIHdpdGgg T0lEICV1IiwgaW5kZXhyZWxpZCk7CisJaWR4cmVscmVjID0gKEZvcm1fcGdfY2xhc3MpIEdFVFNU UlVDVChodF9pZHhyZWwpOworCisJLyogRmV0Y2ggdGhlIHBnX2FtIHR1cGxlIG9mIHRoZSBpbmRl eCcgYWNjZXNzIG1ldGhvZCAqLworCWh0X2FtID0gU2VhcmNoU3lzQ2FjaGUxKEFNT0lELCBPYmpl Y3RJZEdldERhdHVtKGlkeHJlbHJlYy0+cmVsYW0pKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQo aHRfYW0pKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgYWNjZXNzIG1l dGhvZCB3aXRoIE9JRCAldSIsCisJCQkgaWR4cmVscmVjLT5yZWxhbSk7CisJYW1yZWMgPSAoRm9y bV9wZ19hbSkgR0VUU1RSVUNUKGh0X2FtKTsKKworCS8qCisJICogR2V0IHRoZSBpbmRleCBleHBy ZXNzaW9ucywgaWYgYW55LiAgKE5PVEU6IHdlIGRvIG5vdCB1c2UgdGhlIHJlbGNhY2hlCisJICog dmVyc2lvbnMgb2YgdGhlIGV4cHJlc3Npb25zIGFuZCBwcmVkaWNhdGUsIGJlY2F1c2Ugd2Ugd2Fu dCB0byBkaXNwbGF5CisJICogbm9uLWNvbnN0LWZvbGRlZCBleHByZXNzaW9ucy4pCisJICovCisJ aWYgKCFoZWFwX2F0dGlzbnVsbChodF9pZHgsIEFudW1fcGdfaW5kZXhfaW5kZXhwcnMsIE5VTEwp KQorCXsKKwkJRGF0dW0JCWV4cHJzRGF0dW07CisJCWNoYXIJICAgKmV4cHJzU3RyaW5nOworCisJ CWV4cHJzRGF0dW0gPSBTeXNDYWNoZUdldEF0dHIoSU5ERVhSRUxJRCwgaHRfaWR4LAorCQkJCQkJ CQkJIEFudW1fcGdfaW5kZXhfaW5kZXhwcnMsICZpc251bGwpOworCQlBc3NlcnQoIWlzbnVsbCk7 CisJCWV4cHJzU3RyaW5nID0gVGV4dERhdHVtR2V0Q1N0cmluZyhleHByc0RhdHVtKTsKKwkJaW5k ZXhwcnMgPSAoTGlzdCAqKSBzdHJpbmdUb05vZGUoZXhwcnNTdHJpbmcpOworCQlwZnJlZShleHBy c1N0cmluZyk7CisJfQorCWVsc2UKKwkJaW5kZXhwcnMgPSBOSUw7CisKKwlpbmRleHByX2l0ZW0g PSBsaXN0X2hlYWQoaW5kZXhwcnMpOworCisJY29udGV4dCA9IGRlcGFyc2VfY29udGV4dF9mb3Io Z2V0X3JlbF9uYW1lKGluZHJlbGlkKSwgaW5kcmVsaWQpOworCisJaW5pdFN0cmluZ0luZm8oJmRl ZmluaXRpb25CdWYpOworCisJLyogT3V0cHV0IGluZGV4IEFNICovCisJKmluZGV4X2FtID0gcHN0 cmR1cChxdW90ZV9pZGVudGlmaWVyKE5hbWVTdHIoYW1yZWMtPmFtbmFtZSkpKTsKKworCS8qIEZl dGNoIHRoZSBpbmRleCBBTSdzIEFQSSBzdHJ1Y3QgKi8KKwlhbXJvdXRpbmUgPSBHZXRJbmRleEFt Um91dGluZShhbXJlYy0+YW1oYW5kbGVyKTsKKworCS8qCisJICogT3V0cHV0IGluZGV4IGRlZmlu aXRpb24uICBOb3RlIHRoZSBvdXRlciBwYXJlbnMgbXVzdCBiZSBzdXBwbGllZCBieQorCSAqIGNh bGxlci4KKwkgKi8KKwlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZkZWZpbml0aW9uQnVmLCAiKCIp OworCWZvciAoa2V5bm8gPSAwOyBrZXlubyA8IGlkeHJlYy0+aW5kbmF0dHM7IGtleW5vKyspCisJ eworCQlBdHRyTnVtYmVyCWF0dG51bSA9IGlkeHJlYy0+aW5ka2V5LnZhbHVlc1trZXlub107CisJ CWludDE2CQlvcHQgPSBpbmRvcHRpb24tPnZhbHVlc1trZXlub107CisJCU9pZAkJCWtleWNvbHR5 cGU7CisJCU9pZAkJCWtleWNvbGNvbGxhdGlvbjsKKworCQkvKiBQcmludCBJTkNMVURFIHRvIGRp dmlkZSBrZXkgYW5kIG5vbi1rZXkgYXR0cnMuICovCisJCWlmIChrZXlubyA9PSBpZHhyZWMtPmlu ZG5rZXlhdHRzKQorCQl7CisJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZkZWZpbml0aW9uQnVm LCAiKSBJTkNMVURFICgiKTsKKwkJfQorCQllbHNlCisJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5n KCZkZWZpbml0aW9uQnVmLCBrZXlubyA9PSAwID8gIiIgOiAiLCAiKTsKKworCQlpZiAoYXR0bnVt ICE9IDApCisJCXsKKwkJCS8qIFNpbXBsZSBpbmRleCBjb2x1bW4gKi8KKwkJCWNoYXIJICAgKmF0 dG5hbWU7CisJCQlpbnQzMgkJa2V5Y29sdHlwbW9kOworCisJCQlhdHRuYW1lID0gZ2V0X2F0dG5h bWUoaW5kcmVsaWQsIGF0dG51bSwgZmFsc2UpOworCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygm ZGVmaW5pdGlvbkJ1ZiwgcXVvdGVfaWRlbnRpZmllcihhdHRuYW1lKSk7CisJCQlnZXRfYXR0dHlw ZXR5cG1vZGNvbGwoaW5kcmVsaWQsIGF0dG51bSwKKwkJCQkJCQkJICAma2V5Y29sdHlwZSwgJmtl eWNvbHR5cG1vZCwKKwkJCQkJCQkJICAma2V5Y29sY29sbGF0aW9uKTsKKwkJfQorCQllbHNlCisJ CXsKKwkJCS8qIEV4cHJlc3Npb25hbCBpbmRleCAqLworCQkJTm9kZQkgICAqaW5kZXhrZXk7CisJ CQljaGFyCSAgICpzdHI7CisKKwkJCWlmIChpbmRleHByX2l0ZW0gPT0gTlVMTCkKKwkJCQllbG9n KEVSUk9SLCAidG9vIGZldyBlbnRyaWVzIGluIGluZGV4cHJzIGxpc3QiKTsKKwkJCWluZGV4a2V5 ID0gKE5vZGUgKikgbGZpcnN0KGluZGV4cHJfaXRlbSk7CisJCQlpbmRleHByX2l0ZW0gPSBsbmV4 dChpbmRleHBycywgaW5kZXhwcl9pdGVtKTsKKworCQkJLyogRGVwYXJzZSAqLworCQkJc3RyID0g ZGVwYXJzZV9leHByZXNzaW9uKGluZGV4a2V5LCBjb250ZXh0LCBmYWxzZSwgZmFsc2UpOworCisJ CQkvKiBOZWVkIHBhcmVucyBpZiBpdCdzIG5vdCBhIGJhcmUgZnVuY3Rpb24gY2FsbCAqLworCQkJ aWYgKGluZGV4a2V5ICYmIElzQShpbmRleGtleSwgRnVuY0V4cHIpICYmCisJCQkJKChGdW5jRXhw ciAqKSBpbmRleGtleSktPmZ1bmNmb3JtYXQgPT0gQ09FUkNFX0VYUExJQ0lUX0NBTEwpCisJCQkJ YXBwZW5kU3RyaW5nSW5mb1N0cmluZygmZGVmaW5pdGlvbkJ1Ziwgc3RyKTsKKwkJCWVsc2UKKwkJ CQlhcHBlbmRTdHJpbmdJbmZvKCZkZWZpbml0aW9uQnVmLCAiKCVzKSIsIHN0cik7CisKKwkJCWtl eWNvbHR5cGUgPSBleHByVHlwZShpbmRleGtleSk7CisJCQlrZXljb2xjb2xsYXRpb24gPSBleHBy Q29sbGF0aW9uKGluZGV4a2V5KTsKKwkJfQorCisJCS8qIFByaW50IGFkZGl0aW9uYWwgZGVjb3Jh dGlvbiBmb3IgKHNlbGVjdGVkKSBrZXkgY29sdW1ucywgZXZlbiBpZiBkZWZhdWx0ICovCisJCWlm IChrZXlubyA8IGlkeHJlYy0+aW5kbmtleWF0dHMpCisJCXsKKwkJCU9pZCBpbmRjb2xsID0gaW5k Y29sbGF0aW9uLT52YWx1ZXNba2V5bm9dOworCQkJaWYgKE9pZElzVmFsaWQoaW5kY29sbCkpCisJ CQkJYXBwZW5kU3RyaW5nSW5mbygmZGVmaW5pdGlvbkJ1ZiwgIiBDT0xMQVRFICVzIiwKKwkJCQkJ CQkJZ2VuZXJhdGVfY29sbGF0aW9uX25hbWUoKGluZGNvbGwpKSk7CisKKwkJCS8qIEFkZCB0aGUg b3BlcmF0b3IgY2xhc3MgbmFtZSwgZXZlbiBpZiBkZWZhdWx0ICovCisJCQlnZXRfb3BjbGFzc19u YW1lKGluZGNsYXNzLT52YWx1ZXNba2V5bm9dLCBJbnZhbGlkT2lkLCAmZGVmaW5pdGlvbkJ1Zik7 CisKKwkJCS8qIEFkZCBvcHRpb25zIGlmIHJlbGV2YW50ICovCisJCQlpZiAoYW1yb3V0aW5lLT5h bWNhbm9yZGVyKQorCQkJeworCQkJCS8qIElmIGl0IHN1cHBvcnRzIHNvcnQgb3JkZXJpbmcsIHJl cG9ydCBERVNDIGFuZCBOVUxMUyBvcHRzICovCisJCQkJaWYgKG9wdCAmIElORE9QVElPTl9ERVND KQorCQkJCXsKKwkJCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmZGVmaW5pdGlvbkJ1ZiwgIiBE RVNDIik7CisJCQkJCS8qIE5VTExTIEZJUlNUIGlzIHRoZSBkZWZhdWx0IGluIHRoaXMgY2FzZSAq LworCQkJCQlpZiAoIShvcHQgJiBJTkRPUFRJT05fTlVMTFNfRklSU1QpKQorCQkJCQkJYXBwZW5k U3RyaW5nSW5mb1N0cmluZygmZGVmaW5pdGlvbkJ1ZiwgIiBOVUxMUyBMQVNUIik7CisJCQkJfQor CQkJCWVsc2UKKwkJCQl7CisJCQkJCWlmIChvcHQgJiBJTkRPUFRJT05fTlVMTFNfRklSU1QpCisJ CQkJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZkZWZpbml0aW9uQnVmLCAiIE5VTExTIEZJUlNU Iik7CisJCQkJfQorCQkJfQorCisJCQkvKiBYWFggZXhjbHVkZU9wcyB0aGluZ3kgd2FzIGhlcmU7 IGRvIHdlIG5lZWQgYW55dGhpbmc/ICovCisJCX0KKwl9CisJYXBwZW5kU3RyaW5nSW5mb1N0cmlu ZygmZGVmaW5pdGlvbkJ1ZiwgIikiKTsKKwkqZGVmaW5pdGlvbiA9IGRlZmluaXRpb25CdWYuZGF0 YTsKKworCS8qIE91dHB1dCByZWxvcHRpb25zICovCisJKnJlbG9wdGlvbnMgPSBmbGF0dGVuX3Jl bG9wdGlvbnMoaW5kZXhyZWxpZCk7CisKKwkvKiBPdXRwdXQgdGFibGVzcGFjZSAqLworCXsKKwkJ T2lkCQkJdGJsc3BjOworCisJCXRibHNwYyA9IGdldF9yZWxfdGFibGVzcGFjZShpbmRleHJlbGlk KTsKKwkJaWYgKE9pZElzVmFsaWQodGJsc3BjKSkKKwkJCSp0YWJsZXNwYWNlID0gcHN0cmR1cChx dW90ZV9pZGVudGlmaWVyKGdldF90YWJsZXNwYWNlX25hbWUodGJsc3BjKSkpOworCX0KKworCS8q IFJlcG9ydCBpbmRleCBwcmVkaWNhdGUsIGlmIGFueSAqLworCWlmICghaGVhcF9hdHRpc251bGwo aHRfaWR4LCBBbnVtX3BnX2luZGV4X2luZHByZWQsIE5VTEwpKQorCXsKKwkJTm9kZQkgICAqbm9k ZTsKKwkJRGF0dW0JCXByZWREYXR1bTsKKwkJY2hhcgkgICAqcHJlZFN0cmluZzsKKworCQkvKiBD b252ZXJ0IHRleHQgc3RyaW5nIHRvIG5vZGUgdHJlZSAqLworCQlwcmVkRGF0dW0gPSBTeXNDYWNo ZUdldEF0dHIoSU5ERVhSRUxJRCwgaHRfaWR4LAorCQkJCQkJCQkJQW51bV9wZ19pbmRleF9pbmRw cmVkLCAmaXNudWxsKTsKKwkJQXNzZXJ0KCFpc251bGwpOworCQlwcmVkU3RyaW5nID0gVGV4dERh dHVtR2V0Q1N0cmluZyhwcmVkRGF0dW0pOworCQlub2RlID0gKE5vZGUgKikgc3RyaW5nVG9Ob2Rl KHByZWRTdHJpbmcpOworCQlwZnJlZShwcmVkU3RyaW5nKTsKKworCQkvKiBEZXBhcnNlICovCisJ CSp3aGVyZUNsYXVzZSA9IGRlcGFyc2VfZXhwcmVzc2lvbihub2RlLCBjb250ZXh0LCBmYWxzZSwg ZmFsc2UpOworCX0KKworCS8qIENsZWFuIHVwICovCisJUmVsZWFzZVN5c0NhY2hlKGh0X2lkeCk7 CisJUmVsZWFzZVN5c0NhY2hlKGh0X2lkeHJlbCk7CisJUmVsZWFzZVN5c0NhY2hlKGh0X2FtKTsK K30KKworLyoKKyAqIE9idGFpbiB0aGUgZGVwYXJzZWQgZGVmYXVsdCB2YWx1ZSBmb3IgdGhlIGdp dmVuIGNvbHVtbiBvZiB0aGUgZ2l2ZW4gdGFibGUuCisgKgorICogQ2FsbGVyIG11c3QgaGF2ZSBz ZXQgYSBjb3JyZWN0IGRlcGFyc2UgY29udGV4dC4KKyAqLworc3RhdGljIGNoYXIgKgorUmVsYXRp b25HZXRDb2x1bW5EZWZhdWx0KFJlbGF0aW9uIHJlbCwgQXR0ck51bWJlciBhdHRubywgTGlzdCAq ZHBjb250ZXh0LAorCQkJCQkJIExpc3QgKipleHBycykKK3sKKwlOb2RlCSAgICpkZWZ2YWw7CisJ Y2hhcgkgICAqZGVmc3RyOworCisJZGVmdmFsID0gYnVpbGRfY29sdW1uX2RlZmF1bHQocmVsLCBh dHRubyk7CisJZGVmc3RyID0gZGVwYXJzZV9leHByZXNzaW9uKGRlZnZhbCwgZHBjb250ZXh0LCBm YWxzZSwgZmFsc2UpOworCisJLyogQ29sbGVjdCB0aGUgZXhwcmVzc2lvbiBmb3IgbGF0ZXIgcmVw bGljYXRpb24gc2FmZXR5IGNoZWNrcyAqLworCWlmIChleHBycykKKwkJKmV4cHJzID0gbGFwcGVu ZCgqZXhwcnMsIGRlZnZhbCk7CisKKwlyZXR1cm4gZGVmc3RyOworfQorCisvKgorICogT2J0YWlu IHRoZSBkZXBhcnNlZCBwYXJ0aXRpb24gYm91bmQgZXhwcmVzc2lvbiBmb3IgdGhlIGdpdmVuIHRh YmxlLgorICovCitzdGF0aWMgY2hhciAqCitSZWxhdGlvbkdldFBhcnRpdGlvbkJvdW5kKE9pZCBy ZWxpZCkKK3sKKwlEYXR1bQkJZGVwYXJzZWQ7CisJRGF0dW0JCWJvdW5kRGF0dW07CisJYm9vbAkJ aXNudWxsOworCUhlYXBUdXBsZQl0dXBsZTsKKworCXR1cGxlID0gU2VhcmNoU3lzQ2FjaGUxKFJF TE9JRCwgcmVsaWQpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZCh0dXBsZSkpCisJCWVsb2coRVJS T1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciByZWxhdGlvbiB3aXRoIE9JRCAldSIsIHJlbGlk KTsKKworCWJvdW5kRGF0dW0gPSBTeXNDYWNoZUdldEF0dHIoUkVMT0lELCB0dXBsZSwKKwkJCQkJ CQkJIEFudW1fcGdfY2xhc3NfcmVscGFydGJvdW5kLAorCQkJCQkJCQkgJmlzbnVsbCk7CisKKwlk ZXBhcnNlZCA9IERpcmVjdEZ1bmN0aW9uQ2FsbDIocGdfZ2V0X2V4cHIsCisJCQkJCQkJCSAgIENT dHJpbmdHZXRUZXh0RGF0dW0oVGV4dERhdHVtR2V0Q1N0cmluZyhib3VuZERhdHVtKSksCisJCQkJ CQkJCSAgIHJlbGlkKTsKKworCVJlbGVhc2VTeXNDYWNoZSh0dXBsZSk7CisKKwlyZXR1cm4gVGV4 dERhdHVtR2V0Q1N0cmluZyhkZXBhcnNlZCk7Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgQ29sdW1u RGVmIG5vZGUgd2l0aGluIGEgcmVndWxhciAobm9uLXR5cGVkKSB0YWJsZSBjcmVhdGlvbi4KKyAq CisgKiBOT1QgTlVMTCBjb25zdHJhaW50cyBpbiB0aGUgY29sdW1uIGRlZmluaXRpb24gYXJlIGVt aXR0ZWQgZGlyZWN0bHkgaW4gdGhlCisgKiBjb2x1bW4gZGVmaW5pdGlvbiBieSB0aGlzIHJvdXRp bmU7IG90aGVyIGNvbnN0cmFpbnRzIG11c3QgYmUgZW1pdHRlZAorICogZWxzZXdoZXJlICh0aGUg aW5mbyBpbiB0aGUgcGFyc2Ugbm9kZSBpcyBpbmNvbXBsZXRlIGFueXdheSkuCisgKgorICogVmVy Ym9zZSBzeW50YXgKKyAqICV7bmFtZX1JICV7Y29sdHlwZX1UICV7Y29tcHJlc3Npb259cyAle2Rl ZmF1bHR9cyAle25vdF9udWxsfXMgJXtjb2xsYXRpb259cworICovCitzdGF0aWMgT2JqVHJlZSAq CitkZXBhcnNlX0NvbHVtbkRlZihSZWxhdGlvbiByZWxhdGlvbiwgTGlzdCAqZHBjb250ZXh0LCBi b29sIGNvbXBvc2l0ZSwKKwkJCQkgIENvbHVtbkRlZiAqY29sZGVmLCBib29sIGlzX2FsdGVyLCBM aXN0ICoqZXhwcnMpCit7CisJT2JqVHJlZSAgICAqcmV0OworCU9ialRyZWUgICAgKnRtcF9vYmo7 CisJT2lkCQkJcmVsaWQgPSBSZWxhdGlvbkdldFJlbGlkKHJlbGF0aW9uKTsKKwlIZWFwVHVwbGUJ YXR0clR1cDsKKwlGb3JtX3BnX2F0dHJpYnV0ZSBhdHRyRm9ybTsKKwlPaWQJCQl0eXBpZDsKKwlp bnQzMgkJdHlwbW9kOworCU9pZAkJCXR5cGNvbGxhdGlvbjsKKwlib29sCQlzYXdfbm90bnVsbDsK KwlMaXN0Q2VsbCAgICpjZWxsOworCisJLyoKKwkgKiBJbmhlcml0ZWQgY29sdW1ucyB3aXRob3V0 IGxvY2FsIGRlZmluaXRpb25zIG11c3Qgbm90IGJlIGVtaXR0ZWQuCisJICoKKwkgKiBYWFggbWF5 YmUgaXQgaXMgdXNlZnVsIHRvIGhhdmUgdGhlbSB3aXRoICJwcmVzZW50ID0gZmFsc2UiIG9yIHNv bWUKKwkgKiBzdWNoPworCSAqLworCWlmICghY29sZGVmLT5pc19sb2NhbCkKKwkJcmV0dXJuIE5V TEw7CisKKwlhdHRyVHVwID0gU2VhcmNoU3lzQ2FjaGVBdHROYW1lKHJlbGlkLCBjb2xkZWYtPmNv bG5hbWUpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChhdHRyVHVwKSkKKwkJZWxvZyhFUlJPUiwg ImNvdWxkIG5vdCBmaW5kIGNhY2hlIGVudHJ5IGZvciBjb2x1bW4gXCIlc1wiIG9mIHJlbGF0aW9u ICV1IiwKKwkJCSBjb2xkZWYtPmNvbG5hbWUsIHJlbGlkKTsKKwlhdHRyRm9ybSA9IChGb3JtX3Bn X2F0dHJpYnV0ZSkgR0VUU1RSVUNUKGF0dHJUdXApOworCisJZ2V0X2F0dHR5cGV0eXBtb2Rjb2xs KHJlbGlkLCBhdHRyRm9ybS0+YXR0bnVtLAorCQkJCQkJICAmdHlwaWQsICZ0eXBtb2QsICZ0eXBj b2xsYXRpb24pOworCisJcmV0ID0gbmV3X29ianRyZWVfVkEoIiV7bmFtZX1JICV7Y29sdHlwZX1U IiwgMywKKwkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJjb2x1bW4iLAorCQkJCQkJICJu YW1lIiwgT2JqVHlwZVN0cmluZywgY29sZGVmLT5jb2xuYW1lLAorCQkJCQkJICJjb2x0eXBlIiwg T2JqVHlwZU9iamVjdCwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfdHlwZSh0eXBpZCwgdHlwbW9k KSk7CisKKwlpZiAoIWNvbXBvc2l0ZSkKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QocmV0LCAiU1RP UkFHRSAle2NvbHN0b3JhZ2V9cyIsICJjb2xzdG9yYWdlIiwKKwkJCQkJCQkgZ2V0X3R5cGVfc3Rv cmFnZShhdHRyRm9ybS0+YXR0c3RvcmFnZSkpOworCisJLyogVVNJTkcgY2xhdXNlICovCisJdG1w X29iaiA9IG5ld19vYmp0cmVlKCJDT01QUkVTU0lPTiIpOworCWlmIChjb2xkZWYtPmNvbXByZXNz aW9uKQorCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBfb2JqLCAiJXtjb21wcmVzc2lvbl9tZXRo b2R9SSIsCisJCQkJCQkJICJjb21wcmVzc2lvbl9tZXRob2QiLCBjb2xkZWYtPmNvbXByZXNzaW9u KTsKKwllbHNlCisJeworCQlhcHBlbmRfbnVsbF9vYmplY3QodG1wX29iaiwgIiV7Y29tcHJlc3Np b25fbWV0aG9kfUkiKTsKKwkJYXBwZW5kX25vdF9wcmVzZW50KHRtcF9vYmopOworCX0KKwlhcHBl bmRfb2JqZWN0X29iamVjdChyZXQsICIle2NvbXByZXNzaW9ufXMiLCB0bXBfb2JqKTsKKworCXRt cF9vYmogPSBuZXdfb2JqdHJlZSgiQ09MTEFURSIpOworCWlmIChPaWRJc1ZhbGlkKHR5cGNvbGxh dGlvbikpCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcF9vYmosICIle25hbWV9RCIsCisJCQkJ CQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChDb2xsYXRpb25SZWxhdGlvbklkLAorCQkJ CQkJCQkJCQkJCQkgdHlwY29sbGF0aW9uKSk7CisJZWxzZQorCQlhcHBlbmRfbm90X3ByZXNlbnQo dG1wX29iaik7CisJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiJXtjb2xsYXRpb259cyIsIHRt cF9vYmopOworCisJaWYgKCFjb21wb3NpdGUpCisJeworCQlPaWQJCQlzZXFyZWxpZCA9IEludmFs aWRPaWQ7CisKKwkJLyoKKwkJICogRW1pdCBhIE5PVCBOVUxMIGRlY2xhcmF0aW9uIGlmIG5lY2Vz c2FyeS4gIE5vdGUgdGhhdCB3ZSBjYW5ub3QKKwkJICogdHJ1c3QgcGdfYXR0cmlidXRlLmF0dG5v dG51bGwgaGVyZSwgYmVjYXVzZSB0aGF0IGJpdCBpcyBhbHNvIHNldAorCQkgKiB3aGVuIHByaW1h cnkga2V5cyBhcmUgc3BlY2lmaWVkOyB3ZSBtdXN0IG5vdCBlbWl0IGEgTk9UIE5VTEwKKwkJICog Y29uc3RyYWludCBpbiB0aGF0IGNhc2UsIHVubGVzcyBleHBsaWNpdGx5IHNwZWNpZmllZC4gIFRo ZXJlZm9yZSwKKwkJICogd2Ugc2NhbiB0aGUgbGlzdCBvZiBjb25zdHJhaW50cyBhdHRhY2hlZCB0 byB0aGlzIGNvbHVtbiB0bworCQkgKiBkZXRlcm1pbmUgd2hldGhlciB3ZSBuZWVkIHRvIGVtaXQg YW55dGhpbmcuIChGb3J0dW5hdGVseSwgTk9UIE5VTEwKKwkJICogY29uc3RyYWludHMgY2Fubm90 IGJlIHRhYmxlIGNvbnN0cmFpbnRzLikKKwkJICoKKwkJICogSW4gdGhlIEFMVEVSIFRBQkxFIGNh c2VzLCB3ZSBhbHNvIGFkZCBhIE5PVCBOVUxMIGlmIHRoZSBjb2xEZWYgaXMKKwkJICogbWFya2Vk IGlzX25vdF9udWxsLgorCQkgKi8KKwkJc2F3X25vdG51bGwgPSBmYWxzZTsKKwkJZm9yZWFjaChj ZWxsLCBjb2xkZWYtPmNvbnN0cmFpbnRzKQorCQl7CisJCQlDb25zdHJhaW50ICpjb25zdHIgPSAo Q29uc3RyYWludCAqKSBsZmlyc3QoY2VsbCk7CisKKwkJCWlmIChjb25zdHItPmNvbnR5cGUgPT0g Q09OU1RSX05PVE5VTEwpCisJCQl7CisJCQkJc2F3X25vdG51bGwgPSB0cnVlOworCQkJCWJyZWFr OworCQkJfQorCQl9CisKKwkJaWYgKGlzX2FsdGVyICYmIGNvbGRlZi0+aXNfbm90X251bGwpCisJ CQlzYXdfbm90bnVsbCA9IHRydWU7CisKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QocmV0LCAiJXtu b3RfbnVsbH1zIiwgIm5vdF9udWxsIiwKKwkJCQkJCQkgc2F3X25vdG51bGwgPyAiTk9UIE5VTEwi IDogIiIpOworCisJCXRtcF9vYmogPSBuZXdfb2JqdHJlZSgiREVGQVVMVCIpOworCQlpZiAoYXR0 ckZvcm0tPmF0dGhhc2RlZiAmJgorCQkJY29sZGVmLT5nZW5lcmF0ZWQgIT0gQVRUUklCVVRFX0dF TkVSQVRFRF9TVE9SRUQpCisJCXsKKwkJCWNoYXIJICAgKmRlZnN0cjsKKworCQkJZGVmc3RyID0g UmVsYXRpb25HZXRDb2x1bW5EZWZhdWx0KHJlbGF0aW9uLCBhdHRyRm9ybS0+YXR0bnVtLAorCQkJ CQkJCQkJCQkgIGRwY29udGV4dCwgZXhwcnMpOworCisJCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0 bXBfb2JqLCAiJXtkZWZhdWx0fXMiLCAiZGVmYXVsdCIsIGRlZnN0cik7CisJCX0KKwkJZWxzZQor CQkJYXBwZW5kX25vdF9wcmVzZW50KHRtcF9vYmopOworCQlhcHBlbmRfb2JqZWN0X29iamVjdChy ZXQsICIle2RlZmF1bHR9cyIsIHRtcF9vYmopOworCisJCS8qIElERU5USVRZIENPTFVNTiAqLwor CQlpZiAoY29sZGVmLT5pZGVudGl0eSkKKwkJeworCQkJT2lkCQkJYXR0bm8gPSBnZXRfYXR0bnVt KHJlbGlkLCBjb2xkZWYtPmNvbG5hbWUpOworCisJCQlzZXFyZWxpZCA9IGdldElkZW50aXR5U2Vx dWVuY2UocmVsaWQsIGF0dG5vLCBmYWxzZSk7CisJCX0KKworCQlpZiAoT2lkSXNWYWxpZChzZXFy ZWxpZCkpCisJCXsKKwkJCXRtcF9vYmogPSBkZXBhcnNlX0NvbHVtbklkZW50aXR5KHNlcXJlbGlk LCBjb2xkZWYtPmlkZW50aXR5LCBpc19hbHRlcik7CisJCQlhcHBlbmRfb2JqZWN0X29iamVjdChy ZXQsICIle2lkZW50aXR5X2NvbHVtbn1zIiwgdG1wX29iaik7CisJCX0KKworCQkvKiBHRU5FUkFU RUQgQ09MVU1OIEVYUFJFU1NJT04gKi8KKwkJdG1wX29iaiA9IG5ld19vYmp0cmVlKCJHRU5FUkFU RUQgQUxXQVlTIEFTIik7CisJCWlmIChjb2xkZWYtPmdlbmVyYXRlZCA9PSBBVFRSSUJVVEVfR0VO RVJBVEVEX1NUT1JFRCkKKwkJeworCQkJY2hhcgkgICAqZGVmc3RyOworCisJCQlkZWZzdHIgPSBS ZWxhdGlvbkdldENvbHVtbkRlZmF1bHQocmVsYXRpb24sIGF0dHJGb3JtLT5hdHRudW0sCisJCQkJ CQkJCQkJCSAgZHBjb250ZXh0LCBleHBycyk7CisJCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBf b2JqLCAiJXtnZW5lcmF0aW9uX2V4cHJ9cyBTVE9SRUQiLAorCQkJCQkJCQkgImdlbmVyYXRpb25f ZXhwciIsIGRlZnN0cik7CisJCX0KKwkJZWxzZQorCQkJYXBwZW5kX25vdF9wcmVzZW50KHRtcF9v YmopOworCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7Z2VuZXJhdGVkX2NvbHVtbn1z IiwgdG1wX29iaik7CisJfQorCisJUmVsZWFzZVN5c0NhY2hlKGF0dHJUdXApOworCisJcmV0dXJu IHJldDsKK30KKworLyoKKyAqIERlcGFyc2UgYSBDb2x1bW5EZWYgbm9kZSB3aXRoaW4gYSB0eXBl ZCB0YWJsZSBjcmVhdGlvbi4JVGhpcyBpcyBzaW1wbGVyCisgKiB0aGFuIHRoZSByZWd1bGFyIGNh c2UsIGJlY2F1c2Ugd2UgZG9uJ3QgaGF2ZSB0byBlbWl0IHRoZSB0eXBlIGRlY2xhcmF0aW9uLAor ICogY29sbGF0aW9uLCBvciBkZWZhdWx0LiAgSGVyZSB3ZSBvbmx5IHJldHVybiBzb21ldGhpbmcg aWYgdGhlIGNvbHVtbiBpcyBiZWluZworICogZGVjbGFyZWQgTk9UIE5VTEwuCisgKgorICogQXMg aW4gZGVwYXJzZV9Db2x1bW5EZWYsIGFueSBvdGhlciBjb25zdHJhaW50IGlzIHByb2Nlc3NlZCBl bHNld2hlcmUuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqICV7bmFtZX1JIFdJVEggT1BUSU9O UyAle2RlZmF1bHR9cyAle25vdF9udWxsfXMuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFy c2VfQ29sdW1uRGVmX3R5cGVkKFJlbGF0aW9uIHJlbGF0aW9uLCBMaXN0ICpkcGNvbnRleHQsIENv bHVtbkRlZiAqY29sZGVmKQoreworCU9ialRyZWUgICAgKnJldCA9IE5VTEw7CisJT2JqVHJlZSAg ICAqdG1wX29iajsKKwlPaWQJCQlyZWxpZCA9IFJlbGF0aW9uR2V0UmVsaWQocmVsYXRpb24pOwor CUhlYXBUdXBsZQlhdHRyVHVwOworCUZvcm1fcGdfYXR0cmlidXRlIGF0dHJGb3JtOworCU9pZAkJ CXR5cGlkOworCWludDMyCQl0eXBtb2Q7CisJT2lkCQkJdHlwY29sbGF0aW9uOworCWJvb2wJCXNh d19ub3RudWxsOworCUxpc3RDZWxsICAgKmNlbGw7CisKKwlhdHRyVHVwID0gU2VhcmNoU3lzQ2Fj aGVBdHROYW1lKHJlbGlkLCBjb2xkZWYtPmNvbG5hbWUpOworCWlmICghSGVhcFR1cGxlSXNWYWxp ZChhdHRyVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNvdWxkIG5vdCBmaW5kIGNhY2hlIGVudHJ5IGZv ciBjb2x1bW4gXCIlc1wiIG9mIHJlbGF0aW9uICV1IiwKKwkJCSBjb2xkZWYtPmNvbG5hbWUsIHJl bGlkKTsKKwlhdHRyRm9ybSA9IChGb3JtX3BnX2F0dHJpYnV0ZSkgR0VUU1RSVUNUKGF0dHJUdXAp OworCisJZ2V0X2F0dHR5cGV0eXBtb2Rjb2xsKHJlbGlkLCBhdHRyRm9ybS0+YXR0bnVtLAorCQkJ CQkJICAmdHlwaWQsICZ0eXBtb2QsICZ0eXBjb2xsYXRpb24pOworCisJLyoKKwkgKiBTZWFyY2gg Zm9yIGEgTk9UIE5VTEwgZGVjbGFyYXRpb24uICBBcyBpbiBkZXBhcnNlX0NvbHVtbkRlZiwgd2Ug cmVseSBvbgorCSAqIGZpbmRpbmcgYSBjb25zdHJhaW50IG9uIHRoZSBjb2x1bW4gcmF0aGVyIHRo YW4gY29sZGVmLT5pc19ub3RfbnVsbC4KKwkgKiAoVGhpcyByb3V0aW5lIGlzIG5ldmVyIHVzZWQg Zm9yIEFMVEVSIGNhc2VzLikKKwkgKi8KKwlzYXdfbm90bnVsbCA9IGZhbHNlOworCWZvcmVhY2go Y2VsbCwgY29sZGVmLT5jb25zdHJhaW50cykKKwl7CisJCUNvbnN0cmFpbnQgKmNvbnN0ciA9IChD b25zdHJhaW50ICopIGxmaXJzdChjZWxsKTsKKworCQlpZiAoY29uc3RyLT5jb250eXBlID09IENP TlNUUl9OT1ROVUxMKQorCQl7CisJCQlzYXdfbm90bnVsbCA9IHRydWU7CisJCQlicmVhazsKKwkJ fQorCX0KKworCWlmICghc2F3X25vdG51bGwgJiYgIWF0dHJGb3JtLT5hdHRoYXNkZWYpCisJewor CQlSZWxlYXNlU3lzQ2FjaGUoYXR0clR1cCk7CisJCXJldHVybiBOVUxMOworCX0KKworCXRtcF9v YmogPSBuZXdfb2JqdHJlZSgiREVGQVVMVCIpOworCWlmIChhdHRyRm9ybS0+YXR0aGFzZGVmKQor CXsKKwkJY2hhcgkgICAqZGVmc3RyOworCisJCWRlZnN0ciA9IFJlbGF0aW9uR2V0Q29sdW1uRGVm YXVsdChyZWxhdGlvbiwgYXR0ckZvcm0tPmF0dG51bSwKKwkJCQkJCQkJCQkgIGRwY29udGV4dCwg TlVMTCk7CisKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wX29iaiwgIiV7ZGVmYXVsdH1zIiwg ImRlZmF1bHQiLCBkZWZzdHIpOworCX0KKwllbHNlCisJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXBf b2JqKTsKKworCXJldCA9IG5ld19vYmp0cmVlX1ZBKCIle25hbWV9SSBXSVRIIE9QVElPTlMgJXtu b3RfbnVsbH1zICV7ZGVmYXVsdH1zIiwgNCwKKwkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcs ICJjb2x1bW4iLAorCQkJCQkJICJuYW1lIiwgT2JqVHlwZVN0cmluZywgY29sZGVmLT5jb2xuYW1l LAorCQkJCQkJICJub3RfbnVsbCIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkgc2F3X25vdG51bGwg PyAiTk9UIE5VTEwiIDogIiIsCisJCQkJCQkgImRlZmF1bHQiLCBPYmpUeXBlT2JqZWN0LCB0bXBf b2JqKTsKKworCS8qIEdlbmVyYXRlZCBjb2x1bW5zIGFyZSBub3Qgc3VwcG9ydGVkIG9uIHR5cGVk IHRhYmxlcywgc28gd2UgYXJlIGRvbmUgKi8KKworCVJlbGVhc2VTeXNDYWNoZShhdHRyVHVwKTsK KworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIHRoZSBkZWZpbml0aW9uIG9mIGNv bHVtbiBpZGVudGl0eS4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogU0VUIEdFTkVSQVRFRCAl e29wdGlvbn1zICV7aWRlbnRpdHlfdHlwZX1zICV7c2VxX2RlZmluaXRpb246IH1zCisgKiAJT1IK KyAqIEdFTkVSQVRFRCAle29wdGlvbn1zIEFTIElERU5USVRZICV7aWRlbnRpdHlfdHlwZX1zICgg JXtzZXFfZGVmaW5pdGlvbjogfXMgKQorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0Nv bHVtbklkZW50aXR5KE9pZCBzZXFyZWxpZCwgY2hhciBpZGVudGl0eSwgYm9vbCBhbHRlcl90YWJs ZSkKK3sKKwlPYmpUcmVlICAgICpyZXQ7CisJT2JqVHJlZSAgICAqaWRlbnRfb2JqOworCUxpc3QJ ICAgKmVsZW1zID0gTklMOworCVJlbGF0aW9uCXJlbDsKKwlIZWFwVHVwbGUJc2VxdHVwbGU7CisJ Rm9ybV9wZ19zZXF1ZW5jZSBzZXFmb3JtOworCUZvcm1fcGdfc2VxdWVuY2VfZGF0YSBzZXFkYXRh OworCWNoYXIJICAgKmlkZW50Zm10OworCWNoYXIJICAgKm9iamZtdDsKKworCWlmIChhbHRlcl90 YWJsZSkKKwl7CisJCWlkZW50Zm10ID0gIlNFVCBHRU5FUkFURUQgIjsKKwkJb2JqZm10ID0gIiV7 b3B0aW9ufXMiOworCX0KKwllbHNlCisJeworCQlpZGVudGZtdCA9ICJHRU5FUkFURUQgIjsKKwkJ b2JqZm10ID0gIiV7b3B0aW9ufXMgQVMgSURFTlRJVFkiOworCX0KKworCWlkZW50X29iaiA9IG5l d19vYmp0cmVlKGlkZW50Zm10KTsKKworCWlmIChpZGVudGl0eSA9PSBBVFRSSUJVVEVfSURFTlRJ VFlfQUxXQVlTKQorCQlhcHBlbmRfc3RyaW5nX29iamVjdChpZGVudF9vYmosIG9iamZtdCwgIm9w dGlvbiIsICJBTFdBWVMiKTsKKwllbHNlIGlmIChpZGVudGl0eSA9PSBBVFRSSUJVVEVfSURFTlRJ VFlfQllfREVGQVVMVCkKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QoaWRlbnRfb2JqLCBvYmpmbXQs ICJvcHRpb24iLCAiQlkgREVGQVVMVCIpOworCWVsc2UKKwkJYXBwZW5kX25vdF9wcmVzZW50KGlk ZW50X29iaik7CisKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiJXtpZGVudGl0eV90eXBlfXMiLCAx LAorCQkJCQkJICJpZGVudGl0eV90eXBlIiwgT2JqVHlwZU9iamVjdCwgaWRlbnRfb2JqKTsKKwor CXJlbCA9IHRhYmxlX29wZW4oU2VxdWVuY2VSZWxhdGlvbklkLCBSb3dFeGNsdXNpdmVMb2NrKTsK KwlzZXF0dXBsZSA9IFNlYXJjaFN5c0NhY2hlQ29weTEoU0VRUkVMSUQsIHNlcXJlbGlkKTsKKwlp ZiAoIUhlYXBUdXBsZUlzVmFsaWQoc2VxdHVwbGUpKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9v a3VwIGZhaWxlZCBmb3Igc2VxdWVuY2Ugd2l0aCBPSUQgJXUiLAorCQkJIHNlcXJlbGlkKTsKKwor CXNlcWZvcm0gPSAoRm9ybV9wZ19zZXF1ZW5jZSkgR0VUU1RSVUNUKHNlcXR1cGxlKTsKKwlzZXFk YXRhID0gZ2V0X3NlcXVlbmNlX3ZhbHVlcyhzZXFyZWxpZCk7CisKKwkvKiBEZWZpbml0aW9uIGVs ZW1lbnRzICovCisJZWxlbXMgPSBsYXBwZW5kKGVsZW1zLCBkZXBhcnNlX1NlcV9DYWNoZShzZXFm b3JtLCBhbHRlcl90YWJsZSkpOworCWVsZW1zID0gbGFwcGVuZChlbGVtcywgZGVwYXJzZV9TZXFf Q3ljbGUoc2VxZm9ybSwgYWx0ZXJfdGFibGUpKTsKKwllbGVtcyA9IGxhcHBlbmQoZWxlbXMsIGRl cGFyc2VfU2VxX0luY3JlbWVudEJ5KHNlcWZvcm0sIGFsdGVyX3RhYmxlKSk7CisJZWxlbXMgPSBs YXBwZW5kKGVsZW1zLCBkZXBhcnNlX1NlcV9NaW52YWx1ZShzZXFmb3JtLCBhbHRlcl90YWJsZSkp OworCWVsZW1zID0gbGFwcGVuZChlbGVtcywgZGVwYXJzZV9TZXFfTWF4dmFsdWUoc2VxZm9ybSwg YWx0ZXJfdGFibGUpKTsKKwllbGVtcyA9IGxhcHBlbmQoZWxlbXMsIGRlcGFyc2VfU2VxX1N0YXJ0 d2l0aChzZXFmb3JtLCBhbHRlcl90YWJsZSkpOworCWVsZW1zID0gbGFwcGVuZChlbGVtcywgZGVw YXJzZV9TZXFfUmVzdGFydChzZXFkYXRhKSk7CisJLyogV2UgcHVycG9zZWZ1bGx5IGRvIG5vdCBl bWl0IE9XTkVEIEJZIGhlcmUgKi8KKworCWlmIChhbHRlcl90YWJsZSkKKwkJYXBwZW5kX2FycmF5 X29iamVjdChyZXQsICIle3NlcV9kZWZpbml0aW9uOiB9cyIsIGVsZW1zKTsKKwllbHNlCisJCWFw cGVuZF9hcnJheV9vYmplY3QocmV0LCAiKCAle3NlcV9kZWZpbml0aW9uOiB9cyApIiwgZWxlbXMp OworCisJdGFibGVfY2xvc2UocmVsLCBSb3dFeGNsdXNpdmVMb2NrKTsKKworCXJldHVybiByZXQ7 Cit9CisKKy8qCisgKiAuLi4gQUxURVIgQ09MVU1OIC4uLiBTRVQvUkVTRVQgKC4uLikKKyAqCisg KiBWZXJib3NlIHN5bnRheAorICogQUxURVIgQ09MVU1OICV7Y29sdW1ufUkgUkVTRVR8U0VUICgl e29wdGlvbnM6LCB9cykKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9Db2x1bW5TZXRP cHRpb25zKEFsdGVyVGFibGVDbWQgKnN1YmNtZCkKK3sKKwlMaXN0CSAgICpzZXRzID0gTklMOwor CUxpc3RDZWxsICAgKmNlbGw7CisJT2JqVHJlZSAgICAqcmV0OworCWJvb2wJCWlzX3Jlc2V0ID0g c3ViY21kLT5zdWJ0eXBlID09IEFUX1Jlc2V0T3B0aW9uczsKKworCXJldCA9IG5ld19vYmp0cmVl X1ZBKCJBTFRFUiBDT0xVTU4gJXtjb2x1bW59SSAle29wdGlvbn1zIiwgMiwKKwkJCQkJCSAiY29s dW1uIiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lLAorCQkJCQkJICJvcHRpb24iLCBPYmpU eXBlU3RyaW5nLCBpc19yZXNldCA/ICJSRVNFVCIgOiAiU0VUIik7CisKKwlmb3JlYWNoKGNlbGws IChMaXN0ICopIHN1YmNtZC0+ZGVmKQorCXsKKwkJRGVmRWxlbSAgICAqZWxlbTsKKwkJT2JqVHJl ZSAgICAqc2V0OworCisJCWVsZW0gPSAoRGVmRWxlbSAqKSBsZmlyc3QoY2VsbCk7CisJCXNldCA9 IGRlcGFyc2VfRGVmRWxlbShlbGVtLCBpc19yZXNldCk7CisJCXNldHMgPSBsYXBwZW5kKHNldHMs IG5ld19vYmplY3Rfb2JqZWN0KHNldCkpOworCX0KKworCUFzc2VydChzZXRzKTsKKwlhcHBlbmRf YXJyYXlfb2JqZWN0KHJldCwgIigle29wdGlvbnM6LCB9cykiLCBzZXRzKTsKKworCXJldHVybiBy ZXQ7Cit9CisKKy8qCisgKiAuLi4gQUxURVIgQ09MVU1OIC4uLiBTRVQvUkVTRVQgKC4uLikKKyAq CisgKiBWZXJib3NlIHN5bnRheAorICogUkVTRVR8U0VUICgle29wdGlvbnM6LCB9cykKKyAqLwor c3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9SZWxTZXRPcHRpb25zKEFsdGVyVGFibGVDbWQgKnN1 YmNtZCkKK3sKKwlMaXN0CSAgICpzZXRzID0gTklMOworCUxpc3RDZWxsICAgKmNlbGw7CisJYm9v bAkJaXNfcmVzZXQgPSBzdWJjbWQtPnN1YnR5cGUgPT0gQVRfUmVzZXRSZWxPcHRpb25zOworCisJ Zm9yZWFjaChjZWxsLCAoTGlzdCAqKSBzdWJjbWQtPmRlZikKKwl7CisJCURlZkVsZW0gICAgKmVs ZW07CisJCU9ialRyZWUgICAgKnNldDsKKworCQllbGVtID0gKERlZkVsZW0gKikgbGZpcnN0KGNl bGwpOworCQlzZXQgPSBkZXBhcnNlX0RlZkVsZW0oZWxlbSwgaXNfcmVzZXQpOworCQlzZXRzID0g bGFwcGVuZChzZXRzLCBuZXdfb2JqZWN0X29iamVjdChzZXQpKTsKKwl9CisKKwlBc3NlcnQoc2V0 cyk7CisKKwlyZXR1cm4gbmV3X29ianRyZWVfVkEoIiV7c2V0X3Jlc2V0fXMgKCV7b3B0aW9uczos IH1zKSIsIDIsCisJCQkJCQkgICJzZXRfcmVzZXQiLCBPYmpUeXBlU3RyaW5nLCBpc19yZXNldCA/ ICJSRVNFVCIgOiAiU0VUIiwKKwkJCQkJCSAgIm9wdGlvbnMiLCBPYmpUeXBlQXJyYXksIHNldHMp OworfQorCisvKgorICogRGVwYXJzZSBEZWZFbGVtcywgYXMgdXNlZCBlLmcuIGJ5IEFMVEVSIENP TFVNTiAuLi4gU0VULCBpbnRvIGEgbGlzdCBvZiBTRVQKKyAqICguLi4pICBvciBSRVNFVCAoLi4u KSBjb250ZW50cy4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogJXtsYWJlbH1zID0gJXt2YWx1 ZX1MCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfRGVmRWxlbShEZWZFbGVtICplbGVt LCBib29sIGlzX3Jlc2V0KQoreworCU9ialRyZWUgICAgKnJldDsKKwlPYmpUcmVlICAgICpvcHRu YW1lID0gbmV3X29ianRyZWUoIiIpOworCisJaWYgKGVsZW0tPmRlZm5hbWVzcGFjZSAhPSBOVUxM KQorCQlhcHBlbmRfc3RyaW5nX29iamVjdChvcHRuYW1lLCAiJXtzY2hlbWF9SS4iLCAic2NoZW1h IiwKKwkJCQkJCQkgZWxlbS0+ZGVmbmFtZXNwYWNlKTsKKworCWFwcGVuZF9zdHJpbmdfb2JqZWN0 KG9wdG5hbWUsICIle2xhYmVsfUkiLCAibGFiZWwiLCBlbGVtLT5kZWZuYW1lKTsKKworCXJldCA9 IG5ld19vYmp0cmVlX1ZBKCIle2xhYmVsfXMiLCAxLAorCQkJCQkJICJsYWJlbCIsIE9ialR5cGVP YmplY3QsIG9wdG5hbWUpOworCisJaWYgKCFpc19yZXNldCkKKwkJYXBwZW5kX3N0cmluZ19vYmpl Y3QocmV0LCAiPSAle3ZhbHVlfUwiLCAidmFsdWUiLAorCQkJCQkJCSBlbGVtLT5hcmcgPyBkZWZH ZXRTdHJpbmcoZWxlbSkgOgorCQkJCQkJCSBkZWZHZXRCb29sZWFuKGVsZW0pID8gIlRSVUUiIDog IkZBTFNFIik7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogRGVwYXJzZSB0aGUgSU5IRVJJ VFMgcmVsYXRpb25zLgorICoKKyAqIEdpdmVuIGEgdGFibGUgT0lELCByZXR1cm4gYSBzY2hlbWEt cXVhbGlmaWVkIHRhYmxlIGxpc3QgcmVwcmVzZW50aW5nCisgKiB0aGUgcGFyZW50IHRhYmxlcy4K KyAqLworc3RhdGljIExpc3QgKgorZGVwYXJzZV9JbmhSZWxhdGlvbnMoT2lkIG9iamVjdElkKQor eworCUxpc3QJICAgKnBhcmVudHMgPSBOSUw7CisJUmVsYXRpb24JaW5oUmVsOworCVN5c1NjYW5E ZXNjIHNjYW47CisJU2NhbktleURhdGEga2V5OworCUhlYXBUdXBsZQl0dXBsZTsKKworCWluaFJl bCA9IHRhYmxlX29wZW4oSW5oZXJpdHNSZWxhdGlvbklkLCBSb3dFeGNsdXNpdmVMb2NrKTsKKwor CVNjYW5LZXlJbml0KCZrZXksCisJCQkJQW51bV9wZ19pbmhlcml0c19pbmhyZWxpZCwKKwkJCQlC VEVxdWFsU3RyYXRlZ3lOdW1iZXIsIEZfT0lERVEsCisJCQkJT2JqZWN0SWRHZXREYXR1bShvYmpl Y3RJZCkpOworCisJc2NhbiA9IHN5c3RhYmxlX2JlZ2luc2NhbihpbmhSZWwsIEluaGVyaXRzUmVs aWRTZXFub0luZGV4SWQsCisJCQkJCQkJICB0cnVlLCBOVUxMLCAxLCAma2V5KTsKKworCXdoaWxl IChIZWFwVHVwbGVJc1ZhbGlkKHR1cGxlID0gc3lzdGFibGVfZ2V0bmV4dChzY2FuKSkpCisJewor CQlPYmpUcmVlICAgICpwYXJlbnQ7CisJCUZvcm1fcGdfaW5oZXJpdHMgZm9ybUluaCA9IChGb3Jt X3BnX2luaGVyaXRzKSBHRVRTVFJVQ1QodHVwbGUpOworCisJCXBhcmVudCA9IG5ld19vYmp0cmVl X2Zvcl9xdWFsbmFtZV9pZChSZWxhdGlvblJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCSBmb3JtSW5o LT5pbmhwYXJlbnQpOworCQlwYXJlbnRzID0gbGFwcGVuZChwYXJlbnRzLCBuZXdfb2JqZWN0X29i amVjdChwYXJlbnQpKTsKKwl9CisKKwlzeXN0YWJsZV9lbmRzY2FuKHNjYW4pOworCXRhYmxlX2Ns b3NlKGluaFJlbCwgUm93RXhjbHVzaXZlTG9jayk7CisKKwlyZXR1cm4gcGFyZW50czsKK30KKwor LyoKKyAqIERlcGFyc2UgdGhlIE9OIENPTU1JVCAuLi4gY2xhdXNlIGZvciBDUkVBVEUgLi4uIFRF TVBPUkFSWSAuLi4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogT04gQ09NTUlUICV7b25fY29t bWl0X3ZhbHVlfXMKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9PbkNvbW1pdENsYXVz ZShPbkNvbW1pdEFjdGlvbiBvcHRpb24pCit7CisJT2JqVHJlZSAgICAqcmV0ICA9IG5ld19vYmp0 cmVlKCJPTiBDT01NSVQiKTsKKwlzd2l0Y2ggKG9wdGlvbikKKwl7CisJCWNhc2UgT05DT01NSVRf RFJPUDoKKwkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJldCwgIiV7b25fY29tbWl0X3ZhbHVlfXMi LAorCQkJCQkJCQkgIm9uX2NvbW1pdF92YWx1ZSIsICJEUk9QIik7CisJCQlicmVhazsKKworCQlj YXNlIE9OQ09NTUlUX0RFTEVURV9ST1dTOgorCQkJYXBwZW5kX3N0cmluZ19vYmplY3QocmV0LCAi JXtvbl9jb21taXRfdmFsdWV9cyIsCisJCQkJCQkJCSAib25fY29tbWl0X3ZhbHVlIiwgIkRFTEVU RSBST1dTIik7CisJCQlicmVhazsKKworCQljYXNlIE9OQ09NTUlUX1BSRVNFUlZFX1JPV1M6CisJ CQlhcHBlbmRfc3RyaW5nX29iamVjdChyZXQsICIle29uX2NvbW1pdF92YWx1ZX1zIiwKKwkJCQkJ CQkJICJvbl9jb21taXRfdmFsdWUiLCAiUFJFU0VSVkUgUk9XUyIpOworCQkJYnJlYWs7CisKKwkJ Y2FzZSBPTkNPTU1JVF9OT09QOgorCQkJYXBwZW5kX251bGxfb2JqZWN0KHJldCwgIiV7b25fY29t bWl0X3ZhbHVlfXMiKTsKKwkJCWFwcGVuZF9ub3RfcHJlc2VudChyZXQpOworCQkJYnJlYWs7CisJ fQorCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIERlcGFyc2UgdGhlIHNlcXVlbmNlIENBQ0hF IG9wdGlvbi4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogU0VUIENBQ0hFICV7dmFsdWV9cwor ICogT1IKKyAqIENBQ0hFICV7dmFsdWV9CisgKi8KK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqCitk ZXBhcnNlX1NlcV9DYWNoZShGb3JtX3BnX3NlcXVlbmNlIHNlcWRhdGEsIGJvb2wgYWx0ZXJfdGFi bGUpCit7CisJT2JqVHJlZSAgICAqcmV0OworCWNoYXIJICAgKnRtcHN0cjsKKwljaGFyCSAgICpm bXQ7CisKKwlmbXQgPSBhbHRlcl90YWJsZSA/ICJTRVQgQ0FDSEUgJXt2YWx1ZX1zIiA6ICJDQUNI RSAle3ZhbHVlfXMiOworCisJdG1wc3RyID0gcHNwcmludGYoSU5UNjRfRk9STUFULCBzZXFkYXRh LT5zZXFjYWNoZSk7CisJcmV0ID0gbmV3X29ianRyZWVfVkEoZm10LCAyLAorCQkJCQkJICJjbGF1 c2UiLCBPYmpUeXBlU3RyaW5nLCAiY2FjaGUiLAorCQkJCQkJICJ2YWx1ZSIsIE9ialR5cGVTdHJp bmcsIHRtcHN0cik7CisKKwlyZXR1cm4gbmV3X29iamVjdF9vYmplY3QocmV0KTsKK30KKworLyoK KyAqIERlcGFyc2UgdGhlIHNlcXVlbmNlIENZQ0xFIG9wdGlvbi4KKyAqCisgKiBWZXJib3NlIHN5 bnRheAorICogU0VUICV7bm99cyBDWUNMRQorICogT1IKKyAqICV7bm99cyBDWUNMRQorICovCitz dGF0aWMgaW5saW5lIE9iakVsZW0gKgorZGVwYXJzZV9TZXFfQ3ljbGUoRm9ybV9wZ19zZXF1ZW5j ZSBzZXFkYXRhLCBib29sIGFsdGVyX3RhYmxlKQoreworCU9ialRyZWUgICAgKnJldDsKKwljaGFy CSAgICpmbXQ7CisKKwlmbXQgPSBhbHRlcl90YWJsZSA/ICJTRVQgJXtub31zIENZQ0xFIiA6ICIl e25vfXMgQ1lDTEUiOworCisJcmV0ID0gbmV3X29ianRyZWVfVkEoZm10LCAyLAorCQkJCQkJICJj bGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAiY3ljbGUiLAorCQkJCQkJICJubyIsIE9ialR5cGVTdHJp bmcsCisJCQkJCQkgc2VxZGF0YS0+c2VxY3ljbGUgPyAiIiA6ICJOTyIpOworCisJcmV0dXJuIG5l d19vYmplY3Rfb2JqZWN0KHJldCk7Cit9CisKKy8qCisgKiBEZXBhcnNlIHRoZSBzZXF1ZW5jZSBJ TkNSRU1FTlQgQlkgb3B0aW9uLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBTRVQgSU5DUkVN RU5UIEJZICV7dmFsdWV9cworICogT1IKKyAqIElOQ1JFTUVOVCBCWSAle3ZhbHVlfXMKKyAqLwor c3RhdGljIGlubGluZSBPYmpFbGVtICoKK2RlcGFyc2VfU2VxX0luY3JlbWVudEJ5KEZvcm1fcGdf c2VxdWVuY2Ugc2VxZGF0YSwgYm9vbCBhbHRlcl90YWJsZSkKK3sKKwlPYmpUcmVlICAgICpyZXQ7 CisJY2hhcgkgICAqdG1wc3RyOworCWNoYXIJICAgKmZtdDsKKworCWZtdCA9IGFsdGVyX3RhYmxl ID8gIlNFVCBJTkNSRU1FTlQgQlkgJXt2YWx1ZX1zIiA6ICJJTkNSRU1FTlQgQlkgJXt2YWx1ZX1z IjsKKworCXRtcHN0ciA9IHBzcHJpbnRmKElOVDY0X0ZPUk1BVCwgc2VxZGF0YS0+c2VxaW5jcmVt ZW50KTsKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQShmbXQsIDIsCisJCQkJCQkgImNsYXVzZSIsIE9i alR5cGVTdHJpbmcsICJzZXFpbmNyZW1lbnQiLAorCQkJCQkJICJ2YWx1ZSIsIE9ialR5cGVTdHJp bmcsIHRtcHN0cik7CisKKwlyZXR1cm4gbmV3X29iamVjdF9vYmplY3QocmV0KTsKK30KKworLyoK KyAqIERlcGFyc2UgdGhlIHNlcXVlbmNlIE1BWFZBTFVFIG9wdGlvbi4KKyAqCisgKiBWZXJib3Nl IHN5bnRheAorICogU0VUIE1BWFZBTFVFICV7dmFsdWV9cworICogT1IKKyAqIE1BWFZBTFVFICV7 dmFsdWV9cworICovCitzdGF0aWMgaW5saW5lIE9iakVsZW0gKgorZGVwYXJzZV9TZXFfTWF4dmFs dWUoRm9ybV9wZ19zZXF1ZW5jZSBzZXFkYXRhLCBib29sIGFsdGVyX3RhYmxlKQoreworCU9ialRy ZWUgICAgKnJldDsKKwljaGFyCSAgICp0bXBzdHI7CisJY2hhcgkgICAqZm10OworCisJZm10ID0g YWx0ZXJfdGFibGUgPyAiU0VUIE1BWFZBTFVFICV7dmFsdWV9cyIgOiAiTUFYVkFMVUUgJXt2YWx1 ZX1zIjsKKworCXRtcHN0ciA9IHBzcHJpbnRmKElOVDY0X0ZPUk1BVCwgc2VxZGF0YS0+c2VxbWF4 KTsKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQShmbXQsIDIsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5 cGVTdHJpbmcsICJtYXh2YWx1ZSIsCisJCQkJCQkgInZhbHVlIiwgT2JqVHlwZVN0cmluZywgdG1w c3RyKTsKKworCXJldHVybiBuZXdfb2JqZWN0X29iamVjdChyZXQpOworfQorCisvKgorICogRGVw YXJzZSB0aGUgc2VxdWVuY2UgTUlOVkFMVUUgb3B0aW9uLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4 CisgKiBTRVQgTUlOVkFMVUUgJXt2YWx1ZX1zCisgKiBPUgorICogTUlOVkFMVUUgJXt2YWx1ZX1z CisgKi8KK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqCitkZXBhcnNlX1NlcV9NaW52YWx1ZShGb3Jt X3BnX3NlcXVlbmNlIHNlcWRhdGEsIGJvb2wgYWx0ZXJfdGFibGUpCit7CisJT2JqVHJlZSAgICAq cmV0OworCWNoYXIJICAgKnRtcHN0cjsKKwljaGFyCSAgICpmbXQ7CisKKwlmbXQgPSBhbHRlcl90 YWJsZSA/ICJTRVQgTUlOVkFMVUUgJXt2YWx1ZX1zIiA6ICJNSU5WQUxVRSAle3ZhbHVlfXMiOwor CisJdG1wc3RyID0gcHNwcmludGYoSU5UNjRfRk9STUFULCBzZXFkYXRhLT5zZXFtaW4pOworCXJl dCA9IG5ld19vYmp0cmVlX1ZBKGZtdCwgMiwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmlu ZywgIm1pbnZhbHVlIiwKKwkJCQkJCSAidmFsdWUiLCBPYmpUeXBlU3RyaW5nLCB0bXBzdHIpOwor CisJcmV0dXJuIG5ld19vYmplY3Rfb2JqZWN0KHJldCk7Cit9CisKKy8qCisgKiBEZXBhcnNlIHRo ZSBzZXF1ZW5jZSBSRVNUQVJUIG9wdGlvbi4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogUkVT VEFSVCAle3ZhbHVlfXMKKyAqLworc3RhdGljIGlubGluZSBPYmpFbGVtICoKK2RlcGFyc2VfU2Vx X1Jlc3RhcnQoRm9ybV9wZ19zZXF1ZW5jZV9kYXRhIHNlcWRhdGEpCit7CisJT2JqVHJlZSAgICAq cmV0OworCWNoYXIJICAgKnRtcHN0cjsKKworCXRtcHN0ciA9IHBzcHJpbnRmKElOVDY0X0ZPUk1B VCwgc2VxZGF0YS0+bGFzdF92YWx1ZSk7CisJcmV0ID0gbmV3X29ianRyZWVfVkEoIlJFU1RBUlQg JXt2YWx1ZX1zIiwgMiwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgInJlc3RhcnQi LAorCQkJCQkJICJ2YWx1ZSIsIE9ialR5cGVTdHJpbmcsIHRtcHN0cik7CisKKwlyZXR1cm4gbmV3 X29iamVjdF9vYmplY3QocmV0KTsKK30KKworLyoKKyAqIERlcGFyc2UgdGhlIHNlcXVlbmNlIEFT IG9wdGlvbi4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogQVMgJXtpZGVudGl0eX1ECisgKi8K K3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqCitkZXBhcnNlX1NlcV9BcyhEZWZFbGVtICplbGVtKQor eworCU9ialRyZWUgICAgKnJldDsKKwlUeXBlCQlsaWtlVHlwZTsKKwlGb3JtX3BnX3R5cGUgbGlr ZUZvcm07CisKKwlsaWtlVHlwZSA9IHR5cGVuYW1lVHlwZShOVUxMLCBkZWZHZXRUeXBlTmFtZShl bGVtKSwgTlVMTCk7CisJbGlrZUZvcm0gPSAoRm9ybV9wZ190eXBlKSBHRVRTVFJVQ1QobGlrZVR5 cGUpOworCisJcmV0ID0gbmV3X29ianRyZWVfVkEoIkFTICV7aWRlbnRpdHl9RCIsIDEsCisJCQkJ CQkgImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVh bG5hbWUobGlrZUZvcm0tPnR5cG5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCSAgTmFtZVN0cihsaWtl Rm9ybS0+dHlwbmFtZSkpKTsKKwlSZWxlYXNlU3lzQ2FjaGUobGlrZVR5cGUpOworCisJcmV0dXJu IG5ld19vYmplY3Rfb2JqZWN0KHJldCk7Cit9CisKKy8qCisgKiBEZXBhcnNlIHRoZSBzZXF1ZW5j ZSBTVEFSVCBXSVRIIG9wdGlvbi4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogU0VUIFNUQVJU IFdJVEggJXt2YWx1ZX1zCisgKiBPUgorICogU1RBUlQgV0lUSCAle3ZhbHVlfXMKKyAqLworc3Rh dGljIGlubGluZSBPYmpFbGVtICoKK2RlcGFyc2VfU2VxX1N0YXJ0d2l0aChGb3JtX3BnX3NlcXVl bmNlIHNlcWRhdGEsIGJvb2wgYWx0ZXJfdGFibGUpCit7CisJT2JqVHJlZSAgICAqcmV0OworCWNo YXIJICAgKnRtcHN0cjsKKwljaGFyCSAgICpmbXQ7CisKKwlmbXQgPSBhbHRlcl90YWJsZSA/ICJT RVQgU1RBUlQgV0lUSCAle3ZhbHVlfXMiIDogIlNUQVJUIFdJVEggJXt2YWx1ZX1zIjsKKworCXRt cHN0ciA9IHBzcHJpbnRmKElOVDY0X0ZPUk1BVCwgc2VxZGF0YS0+c2Vxc3RhcnQpOworCXJldCA9 IG5ld19vYmp0cmVlX1ZBKGZtdCwgMiwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywg InN0YXJ0IiwKKwkJCQkJCSAidmFsdWUiLCBPYmpUeXBlU3RyaW5nLCB0bXBzdHIpOworCisJcmV0 dXJuIG5ld19vYmplY3Rfb2JqZWN0KHJldCk7Cit9CisKKy8qCisgKiBEZXBhcnNlIHRoZSB0eXBl IFNUT1JBR0Ugb3B0aW9uLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBTVE9SQUdFPSV7dmFs dWV9cworICovCitzdGF0aWMgaW5saW5lIE9iakVsZW0gKgorZGVwYXJzZV9UeXBlX1N0b3JhZ2Uo Rm9ybV9wZ190eXBlIHR5cEZvcm0pCit7CisJT2JqVHJlZSAgICAqcmV0OworCXJldCA9IG5ld19v Ymp0cmVlX1ZBKCJTVE9SQUdFID0gJXt2YWx1ZX1zIiwgMiwKKwkJCQkJCSAiY2xhdXNlIiwgT2Jq VHlwZVN0cmluZywgInN0b3JhZ2UiLAorCQkJCQkJICJ2YWx1ZSIsIE9ialR5cGVTdHJpbmcsIGdl dF90eXBlX3N0b3JhZ2UodHlwRm9ybS0+dHlwc3RvcmFnZSkpOworCisJcmV0dXJuIG5ld19vYmpl Y3Rfb2JqZWN0KHJldCk7Cit9CisKKy8qCisgKiBEZXBhcnNlIHRoZSB0eXBlIFJFQ0VJVkUgb3B0 aW9uLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBSRUNFSVZFPSV7cHJvY2VkdXJlfUQKKyAq Lworc3RhdGljIGlubGluZSBPYmpFbGVtICoKK2RlcGFyc2VfVHlwZV9SZWNlaXZlKEZvcm1fcGdf dHlwZSB0eXBGb3JtKQoreworCU9ialRyZWUgICAgKnJldDsKKworCXJldCA9IG5ld19vYmp0cmVl X1ZBKCJSRUNFSVZFPSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJyZWNl aXZlIik7CisJaWYgKE9pZElzVmFsaWQodHlwRm9ybS0+dHlwcmVjZWl2ZSkpCisJCWFwcGVuZF9v YmplY3Rfb2JqZWN0KHJldCwgIiV7cHJvY2VkdXJlfUQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9m b3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJIHR5cEZv cm0tPnR5cHJlY2VpdmUpKTsKKwllbHNlCisJCWFwcGVuZF9ub3RfcHJlc2VudChyZXQpOworCisJ cmV0dXJuIG5ld19vYmplY3Rfb2JqZWN0KHJldCk7Cit9CisKKy8qCisgKiBEZXBhcnNlIHRoZSB0 eXBlIFNFTkQgb3B0aW9uLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBTRU5EPSV7cHJvY2Vk dXJlfUQKKyAqLworc3RhdGljIGlubGluZSBPYmpFbGVtICoKK2RlcGFyc2VfVHlwZV9TZW5kKEZv cm1fcGdfdHlwZSB0eXBGb3JtKQoreworCU9ialRyZWUgICAgKnJldDsKKworCXJldCA9IG5ld19v Ymp0cmVlX1ZBKCJTRU5EPSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJz ZW5kIik7CisJaWYgKE9pZElzVmFsaWQodHlwRm9ybS0+dHlwc2VuZCkpCisJCWFwcGVuZF9vYmpl Y3Rfb2JqZWN0KHJldCwgIiV7cHJvY2VkdXJlfUQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3Jf cXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJIHR5cEZvcm0t PnR5cHNlbmQpKTsKKwllbHNlCisJCWFwcGVuZF9ub3RfcHJlc2VudChyZXQpOworCisJcmV0dXJu IG5ld19vYmplY3Rfb2JqZWN0KHJldCk7Cit9CisKKy8qCisgKiBEZXBhcnNlIHRoZSB0eXBlIHR5 cG1vZF9pbiBvcHRpb24uCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIFRZUE1PRF9JTj0le3By b2NlZHVyZX1ECisgKi8KK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqCitkZXBhcnNlX1R5cGVfVHlw bW9kX0luKEZvcm1fcGdfdHlwZSB0eXBGb3JtKQoreworCU9ialRyZWUgICAgKnJldDsKKworCXJl dCA9IG5ld19vYmp0cmVlX1ZBKCJUWVBNT0RfSU49IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2Jq VHlwZVN0cmluZywgInR5cG1vZF9pbiIpOworCWlmIChPaWRJc1ZhbGlkKHR5cEZvcm0tPnR5cG1v ZGluKSkKKwkJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiJXtwcm9jZWR1cmV9RCIsCisJCQkJ CQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJ CQkJCQkJCQkJCQkgdHlwRm9ybS0+dHlwbW9kaW4pKTsKKwllbHNlCisJCWFwcGVuZF9ub3RfcHJl c2VudChyZXQpOworCisJcmV0dXJuIG5ld19vYmplY3Rfb2JqZWN0KHJldCk7Cit9CisKKy8qCisg KiBEZXBhcnNlIHRoZSB0eXBlIHR5cG1vZF9vdXQgb3B0aW9uLgorICoKKyAqIFZlcmJvc2Ugc3lu dGF4CisgKiBUWVBNT0RfT1VUPSV7cHJvY2VkdXJlfUQKKyAqLworc3RhdGljIGlubGluZSBPYmpF bGVtICoKK2RlcGFyc2VfVHlwZV9UeXBtb2RfT3V0KEZvcm1fcGdfdHlwZSB0eXBGb3JtKQorewor CU9ialRyZWUgICAgKnJldDsKKworCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJUWVBNT0RfT1VUPSIs IDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJ0eXBtb2Rfb3V0Iik7CisJaWYg KE9pZElzVmFsaWQodHlwRm9ybS0+dHlwbW9kb3V0KSkKKwkJYXBwZW5kX29iamVjdF9vYmplY3Qo cmV0LCAiJXtwcm9jZWR1cmV9RCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9p ZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkgdHlwRm9ybS0+dHlwbW9kb3V0 KSk7CisJZWxzZQorCQlhcHBlbmRfbm90X3ByZXNlbnQocmV0KTsKKworCXJldHVybiBuZXdfb2Jq ZWN0X29iamVjdChyZXQpOworfQorCisvKgorICogRGVwYXJzZSB0aGUgdHlwZSBhbmFseXplIG9w dGlvbi4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogQU5BTFlaRT0le3Byb2NlZHVyZX1ECisg Ki8KK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqCitkZXBhcnNlX1R5cGVfQW5hbHl6ZShGb3JtX3Bn X3R5cGUgdHlwRm9ybSkKK3sKKwlPYmpUcmVlICAgICpyZXQ7CisKKwlyZXQgPSBuZXdfb2JqdHJl ZV9WQSgiQU5BTFlaRT0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAiYW5h bHl6ZSIpOworCWlmIChPaWRJc1ZhbGlkKHR5cEZvcm0tPnR5cGFuYWx5emUpKQorCQlhcHBlbmRf b2JqZWN0X29iamVjdChyZXQsICIle3Byb2NlZHVyZX1EIiwKKwkJCQkJCQkgbmV3X29ianRyZWVf Zm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCSB0eXBG b3JtLT50eXBhbmFseXplKSk7CisJZWxzZQorCQlhcHBlbmRfbm90X3ByZXNlbnQocmV0KTsKKwor CXJldHVybiBuZXdfb2JqZWN0X29iamVjdChyZXQpOworfQorCisvKgorICogRGVwYXJzZSB0aGUg dHlwZSBzdWJzY3JpcHQgb3B0aW9uLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBTVUJTQ1JJ UFQ9JXtwcm9jZWR1cmV9RAorICovCitzdGF0aWMgaW5saW5lIE9iakVsZW0gKgorZGVwYXJzZV9U eXBlX1N1YnNjcmlwdChGb3JtX3BnX3R5cGUgdHlwRm9ybSkKK3sKKwlPYmpUcmVlICAgICpyZXQ7 CisKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiU1VCU0NSSVBUPSIsIDEsCisJCQkJCQkgImNsYXVz ZSIsIE9ialR5cGVTdHJpbmcsICJzdWJzY3JpcHQiKTsKKwlpZiAoT2lkSXNWYWxpZCh0eXBGb3Jt LT50eXBzdWJzY3JpcHQpKQorCQlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICIle3Byb2NlZHVy ZX1EIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0 aW9uSWQsCisJCQkJCQkJCQkJCQkJCSB0eXBGb3JtLT50eXBzdWJzY3JpcHQpKTsKKwllbHNlCisJ CWFwcGVuZF9ub3RfcHJlc2VudChyZXQpOworCisJcmV0dXJuIG5ld19vYmplY3Rfb2JqZWN0KHJl dCk7Cit9CisKKy8qCisgKiBTdWJyb3V0aW5lIGZvciBDUkVBVEUgVEFCTEUgZGVwYXJzaW5nLgor ICoKKyAqIERlYWwgd2l0aCBhbGwgdGhlIHRhYmxlIGVsZW1lbnRzIChjb2x1bW5zIGFuZCBjb25z dHJhaW50cykuCisgKgorICogTm90ZSB3ZSBpZ25vcmUgY29uc3RyYWludHMgaW4gdGhlIHBhcnNl IG5vZGUgaGVyZTsgdGhleSBhcmUgZXh0cmFjdGVkIGZyb20KKyAqIHN5c3RlbSBjYXRhbG9ncyBp bnN0ZWFkLgorICovCitzdGF0aWMgTGlzdCAqCitkZXBhcnNlX1RhYmxlRWxlbWVudHMoUmVsYXRp b24gcmVsYXRpb24sIExpc3QgKnRhYmxlRWxlbWVudHMsIExpc3QgKmRwY29udGV4dCwKKwkJCQkJ ICBib29sIHR5cGVkLCBib29sIGNvbXBvc2l0ZSkKK3sKKwlMaXN0CSAgICplbGVtZW50cyA9IE5J TDsKKwlMaXN0Q2VsbCAgICpsYzsKKworCWZvcmVhY2gobGMsIHRhYmxlRWxlbWVudHMpCisJewor CQlOb2RlCSAgICplbHQgPSAoTm9kZSAqKSBsZmlyc3QobGMpOworCisJCXN3aXRjaCAobm9kZVRh ZyhlbHQpKQorCQl7CisJCQljYXNlIFRfQ29sdW1uRGVmOgorCQkJCXsKKwkJCQkJT2JqVHJlZSAg ICAqdHJlZTsKKworCQkJCQl0cmVlID0gdHlwZWQgPworCQkJCQkJZGVwYXJzZV9Db2x1bW5EZWZf dHlwZWQocmVsYXRpb24sIGRwY29udGV4dCwKKwkJCQkJCQkJCQkJCShDb2x1bW5EZWYgKikgZWx0 KSA6CisJCQkJCQlkZXBhcnNlX0NvbHVtbkRlZihyZWxhdGlvbiwgZHBjb250ZXh0LAorCQkJCQkJ CQkJCSAgY29tcG9zaXRlLCAoQ29sdW1uRGVmICopIGVsdCwKKwkJCQkJCQkJCQkgIGZhbHNlLCBO VUxMKTsKKwkJCQkJaWYgKHRyZWUgIT0gTlVMTCkKKwkJCQkJCWVsZW1lbnRzID0gbGFwcGVuZChl bGVtZW50cywgbmV3X29iamVjdF9vYmplY3QodHJlZSkpOworCQkJCX0KKwkJCQlicmVhazsKKwkJ CWNhc2UgVF9Db25zdHJhaW50OgorCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQllbG9nKEVS Uk9SLCAiaW52YWxpZCBub2RlIHR5cGUgJWQiLCBub2RlVGFnKGVsdCkpOworCQl9CisJfQorCisJ cmV0dXJuIGVsZW1lbnRzOworfQorCisvKgorICogRGVwYXJzZSBhIENyZWF0ZVNlcVN0bXQuCisg KgorICogR2l2ZW4gYSBzZXF1ZW5jZSBPSUQgYW5kIHRoZSBwYXJzZSB0cmVlIHRoYXQgY3JlYXRl ZCBpdCwgcmV0dXJuIGFuIE9ialRyZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgY3JlYXRpb24gY29t bWFuZC4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogQ1JFQVRFICV7cGVyc2lzdGVuY2V9cyBT RVFVRU5DRSAle2lkZW50aXR5fUQKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9DcmVh dGVTZXFTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCU9ialRyZWUgICAg KnJldDsKKwlSZWxhdGlvbglyZWxhdGlvbjsKKwlGb3JtX3BnX3NlcXVlbmNlX2RhdGEgc2VxZGF0 YTsKKwlMaXN0CSAgICplbGVtcyA9IE5JTDsKKwlGb3JtX3BnX3NlcXVlbmNlIHNlcWZvcm07CisJ UmVsYXRpb24JcmVsOworCUhlYXBUdXBsZQlzZXF0dXBsZTsKKwlDcmVhdGVTZXFTdG10ICpjcmVh dGVTZXFTdG10ID0gKENyZWF0ZVNlcVN0bXQgKikgcGFyc2V0cmVlOworCisJLyoKKwkgKiBTZXF1 ZW5jZSBmb3IgSURFTlRJVFkgQ09MVU1OIG91dHB1dCBzZXBhcmF0ZWx5ICh2aWEgQ1JFQVRFIFRB QkxFIG9yCisJICogQUxURVIgVEFCTEUpOyByZXR1cm4gZW1wdHkgaGVyZS4KKwkgKi8KKwlpZiAo Y3JlYXRlU2VxU3RtdC0+Zm9yX2lkZW50aXR5KQorCQlyZXR1cm4gTlVMTDsKKworCXNlcWRhdGEg PSBnZXRfc2VxdWVuY2VfdmFsdWVzKG9iamVjdElkKTsKKworCXJlbGF0aW9uID0gcmVsYXRpb25f b3BlbihvYmplY3RJZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwlyZWwgPSB0YWJsZV9vcGVuKFNlcXVl bmNlUmVsYXRpb25JZCwgUm93RXhjbHVzaXZlTG9jayk7CisJc2VxdHVwbGUgPSBTZWFyY2hTeXND YWNoZUNvcHkxKFNFUVJFTElELAorCQkJCQkJCQkgICBPYmplY3RJZEdldERhdHVtKG9iamVjdElk KSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHNlcXR1cGxlKSkKKwkJZWxvZyhFUlJPUiwgImNh Y2hlIGxvb2t1cCBmYWlsZWQgZm9yIHNlcXVlbmNlIHdpdGggT0lEICV1IiwKKwkJCSBvYmplY3RJ ZCk7CisKKwlzZXFmb3JtID0gKEZvcm1fcGdfc2VxdWVuY2UpIEdFVFNUUlVDVChzZXF0dXBsZSk7 CisKKwkvKiBEZWZpbml0aW9uIGVsZW1lbnRzICovCisJZWxlbXMgPSBsYXBwZW5kKGVsZW1zLCBk ZXBhcnNlX1NlcV9DYWNoZShzZXFmb3JtLCBmYWxzZSkpOworCWVsZW1zID0gbGFwcGVuZChlbGVt cywgZGVwYXJzZV9TZXFfQ3ljbGUoc2VxZm9ybSwgZmFsc2UpKTsKKwllbGVtcyA9IGxhcHBlbmQo ZWxlbXMsIGRlcGFyc2VfU2VxX0luY3JlbWVudEJ5KHNlcWZvcm0sIGZhbHNlKSk7CisJZWxlbXMg PSBsYXBwZW5kKGVsZW1zLCBkZXBhcnNlX1NlcV9NaW52YWx1ZShzZXFmb3JtLCBmYWxzZSkpOwor CWVsZW1zID0gbGFwcGVuZChlbGVtcywgZGVwYXJzZV9TZXFfTWF4dmFsdWUoc2VxZm9ybSwgZmFs c2UpKTsKKwllbGVtcyA9IGxhcHBlbmQoZWxlbXMsIGRlcGFyc2VfU2VxX1N0YXJ0d2l0aChzZXFm b3JtLCBmYWxzZSkpOworCWVsZW1zID0gbGFwcGVuZChlbGVtcywgZGVwYXJzZV9TZXFfUmVzdGFy dChzZXFkYXRhKSk7CisKKwkvKiBXZSBwdXJwb3NlZnVsbHkgZG8gbm90IGVtaXQgT1dORUQgQlkg aGVyZSAqLworCisJcmV0ID0gbmV3X29ianRyZWVfVkEoIkNSRUFURSAle3BlcnNpc3RlbmNlfXMg U0VRVUVOQ0UgJXtpZl9ub3RfZXhpc3RzfXMgJXtpZGVudGl0eX1EICV7ZGVmaW5pdGlvbjogfXMi LCA0LAorCQkJCQkJICJwZXJzaXN0ZW5jZSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkgZ2V0X3Bl cnNpc3RlbmNlX3N0cihyZWxhdGlvbi0+cmRfcmVsLT5yZWxwZXJzaXN0ZW5jZSksCisJCQkJCQkg ImlmX25vdF9leGlzdHMiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJIGNyZWF0ZVNlcVN0bXQtPmlm X25vdF9leGlzdHMgPyAiSUYgTk9UIEVYSVNUUyIgOiAiIiwKKwkJCQkJCSAiaWRlbnRpdHkiLCBP YmpUeXBlT2JqZWN0LAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShyZWxhdGlvbi0+ cmRfcmVsLT5yZWxuYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkgIFJlbGF0aW9uR2V0UmVsYXRpb25O YW1lKHJlbGF0aW9uKSksCisJCQkJCQkgImRlZmluaXRpb24iLCBPYmpUeXBlQXJyYXksIGVsZW1z KTsKKworCXRhYmxlX2Nsb3NlKHJlbCwgUm93RXhjbHVzaXZlTG9jayk7CisJcmVsYXRpb25fY2xv c2UocmVsYXRpb24sIEFjY2Vzc1NoYXJlTG9jayk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgor ICogRGVwYXJzZSBhbiBJbmRleFN0bXQuCisgKgorICogR2l2ZW4gYW4gaW5kZXggT0lEIGFuZCB0 aGUgcGFyc2UgdHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVybiBhbiBPYmpUcmVlCisgKiByZXBy ZXNlbnRpbmcgdGhlIGNyZWF0aW9uIGNvbW1hbmQuCisgKgorICogSWYgdGhlIGluZGV4IGNvcnJl c3BvbmRzIHRvIGEgY29uc3RyYWludCwgTlVMTCBpcyByZXR1cm5lZC4KKyAqCisgKiBWZXJib3Nl IHN5bnRheAorICogQ1JFQVRFICV7dW5pcXVlfXMgSU5ERVggJXtjb25jdXJyZW50bHl9cyAle2lm X25vdF9leGlzdHN9cyAle25hbWV9SSBPTgorICogJXt0YWJsZX1EIFVTSU5HICV7aW5kZXhfYW19 cyAle2RlZmluaXRpb259cyAle3dpdGh9cyAle3RhYmxlc3BhY2V9cworICogJXt3aGVyZV9jbGF1 c2V9cworICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0luZGV4U3RtdChPaWQgb2JqZWN0 SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlJbmRleFN0bXQgICpub2RlID0gKEluZGV4U3RtdCAq KSBwYXJzZXRyZWU7CisJT2JqVHJlZSAgICAqcmV0OworCU9ialRyZWUgICAgKnRtcF9vYmo7CisJ UmVsYXRpb24JaWR4cmVsOworCVJlbGF0aW9uCWhlYXByZWw7CisJY2hhcgkgICAqaW5kZXhfYW07 CisJY2hhcgkgICAqZGVmaW5pdGlvbjsKKwljaGFyCSAgICpyZWxvcHRpb25zOworCWNoYXIJICAg KnRhYmxlc3BhY2U7CisJY2hhcgkgICAqd2hlcmVDbGF1c2U7CisKKwlpZiAobm9kZS0+cHJpbWFy eSB8fCBub2RlLT5pc2NvbnN0cmFpbnQpCisJeworCQkvKgorCQkgKiBJbmRleGVzIGZvciBQUklN QVJZIEtFWSBhbmQgb3RoZXIgY29uc3RyYWludHMgYXJlIG91dHB1dAorCQkgKiBzZXBhcmF0ZWx5 OyByZXR1cm4gZW1wdHkgaGVyZS4KKwkJICovCisJCXJldHVybiBOVUxMOworCX0KKworCWlkeHJl bCA9IHJlbGF0aW9uX29wZW4ob2JqZWN0SWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJaGVhcHJlbCA9 IHJlbGF0aW9uX29wZW4oaWR4cmVsLT5yZF9pbmRleC0+aW5kcmVsaWQsIEFjY2Vzc1NoYXJlTG9j ayk7CisKKwlwZ19nZXRfaW5kZXhkZWZfZGV0YWlsZWQob2JqZWN0SWQsCisJCQkJCQkJICZpbmRl eF9hbSwgJmRlZmluaXRpb24sICZyZWxvcHRpb25zLAorCQkJCQkJCSAmdGFibGVzcGFjZSwgJndo ZXJlQ2xhdXNlKTsKKworCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJDUkVBVEUgJXt1bmlxdWV9cyBJ TkRFWCAle2NvbmN1cnJlbnRseX1zICV7aWZfbm90X2V4aXN0c31zICV7bmFtZX1JIE9OICV7dGFi bGV9RCBVU0lORyAle2luZGV4X2FtfXMgJXtkZWZpbml0aW9ufXMiLCA3LAorCQkJCQkJICJ1bmlx dWUiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJIG5vZGUtPnVuaXF1ZSA/ICJVTklRVUUiIDogIiIs CisJCQkJCQkgImNvbmN1cnJlbnRseSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkgbm9kZS0+Y29u Y3VycmVudCA/ICJDT05DVVJSRU5UTFkiIDogIiIsCisJCQkJCQkgImlmX25vdF9leGlzdHMiLCBP YmpUeXBlU3RyaW5nLAorCQkJCQkJIG5vZGUtPmlmX25vdF9leGlzdHMgPyAiSUYgTk9UIEVYSVNU UyIgOiAiIiwKKwkJCQkJCSAibmFtZSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkgUmVsYXRpb25H ZXRSZWxhdGlvbk5hbWUoaWR4cmVsKSwKKwkJCQkJCSAidGFibGUiLCBPYmpUeXBlT2JqZWN0LAor CQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShoZWFwcmVsLT5yZF9yZWwtPnJlbG5hbWVz cGFjZSwKKwkJCQkJCQkJCQkJCSAgUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUoaGVhcHJlbCkpLAor CQkJCQkJICJpbmRleF9hbSIsIE9ialR5cGVTdHJpbmcsIGluZGV4X2FtLAorCQkJCQkJICJkZWZp bml0aW9uIiwgT2JqVHlwZVN0cmluZywgZGVmaW5pdGlvbik7CisKKwkvKiByZWxvcHRpb25zICov CisJdG1wX29iaiA9IG5ld19vYmp0cmVlKCJXSVRIIik7CisJaWYgKHJlbG9wdGlvbnMpCisJCWFw cGVuZF9zdHJpbmdfb2JqZWN0KHRtcF9vYmosICIoJXtvcHRzfXMpIiwgIm9wdHMiLCByZWxvcHRp b25zKTsKKwllbHNlCisJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXBfb2JqKTsKKwlhcHBlbmRfb2Jq ZWN0X29iamVjdChyZXQsICIle3dpdGh9cyIsIHRtcF9vYmopOworCisJLyogdGFibGVzcGFjZSAq LworCXRtcF9vYmogPSBuZXdfb2JqdHJlZSgiVEFCTEVTUEFDRSIpOworCWlmICh0YWJsZXNwYWNl KQorCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBfb2JqLCAiJXt0YWJsZXNwYWNlfXMiLCAidGFi bGVzcGFjZSIsIHRhYmxlc3BhY2UpOworCWVsc2UKKwkJYXBwZW5kX25vdF9wcmVzZW50KHRtcF9v YmopOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7dGFibGVzcGFjZX1zIiwgdG1wX29i aik7CisKKwkvKiBXSEVSRSBjbGF1c2UgKi8KKwl0bXBfb2JqID0gbmV3X29ianRyZWUoIldIRVJF Iik7CisJaWYgKHdoZXJlQ2xhdXNlKQorCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBfb2JqLCAi JXt3aGVyZX1zIiwgIndoZXJlIiwgd2hlcmVDbGF1c2UpOworCWVsc2UKKwkJYXBwZW5kX25vdF9w cmVzZW50KHRtcF9vYmopOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7d2hlcmVfY2xh dXNlfXMiLCB0bXBfb2JqKTsKKworCXRhYmxlX2Nsb3NlKGlkeHJlbCwgQWNjZXNzU2hhcmVMb2Nr KTsKKwl0YWJsZV9jbG9zZShoZWFwcmVsLCBBY2Nlc3NTaGFyZUxvY2spOworCisJcmV0dXJuIHJl dDsKK30KKworLyoKKyAqIERlcGFyc2UgYSBDcmVhdGVTdG10IChDUkVBVEUgVEFCTEUpLgorICoK KyAqIEdpdmVuIGEgdGFibGUgT0lEIGFuZCB0aGUgcGFyc2UgdHJlZSB0aGF0IGNyZWF0ZWQgaXQs IHJldHVybiBhbiBPYmpUcmVlCisgKiByZXByZXNlbnRpbmcgdGhlIGNyZWF0aW9uIGNvbW1hbmQu CisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIENSRUFURSAle3BlcnNpc3RlbmNlfXMgVEFCTEUg JXtpZl9ub3RfZXhpc3RzfXMgJXtpZGVudGl0eX1EIFtPRgorICogJXtvZl90eXBlfVQgfCBQQVJU SVRJT04gT0YgJXtwYXJlbnRfaWRlbnRpdHl9RF0gJXt0YWJsZV9lbGVtZW50c31zCisgKiAle2lu aGVyaXRzfXMgJXtwYXJ0aXRpb25fYnl9cyAle2FjY2Vzc19tZXRob2R9cyAle3dpdGhfY2xhdXNl fXMKKyAqICV7b25fY29tbWl0fXMgJXt0YWJsZXNwYWNlfXMKKyAqLworc3RhdGljIE9ialRyZWUg KgorZGVwYXJzZV9DcmVhdGVTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQorewor CUNyZWF0ZVN0bXQgKm5vZGUgPSAoQ3JlYXRlU3RtdCAqKSBwYXJzZXRyZWU7CisJUmVsYXRpb24J cmVsYXRpb24gPSByZWxhdGlvbl9vcGVuKG9iamVjdElkLCBBY2Nlc3NTaGFyZUxvY2spOworCUxp c3QJICAgKmRwY29udGV4dDsKKwlPYmpUcmVlICAgICpyZXQ7CisJT2JqVHJlZSAgICAqdG1wX29i ajsKKwlMaXN0CSAgICpsaXN0ID0gTklMOworCUxpc3RDZWxsICAgKmNlbGw7CisKKwlyZXQgPSBu ZXdfb2JqdHJlZV9WQSgiQ1JFQVRFICV7cGVyc2lzdGVuY2V9cyBUQUJMRSAle2lmX25vdF9leGlz dHN9cyAle2lkZW50aXR5fUQiLCAzLAorCQkJCQkJICJwZXJzaXN0ZW5jZSIsIE9ialR5cGVTdHJp bmcsCisJCQkJCQkgZ2V0X3BlcnNpc3RlbmNlX3N0cihyZWxhdGlvbi0+cmRfcmVsLT5yZWxwZXJz aXN0ZW5jZSksCisJCQkJCQkgImlmX25vdF9leGlzdHMiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJ IG5vZGUtPmlmX25vdF9leGlzdHMgPyAiSUYgTk9UIEVYSVNUUyIgOiAiIiwKKwkJCQkJCSAiaWRl bnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShy ZWxhdGlvbi0+cmRfcmVsLT5yZWxuYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkgIFJlbGF0aW9uR2V0 UmVsYXRpb25OYW1lKHJlbGF0aW9uKSkpOworCisJZHBjb250ZXh0ID0gZGVwYXJzZV9jb250ZXh0 X2ZvcihSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShyZWxhdGlvbiksCisJCQkJCQkJCQlvYmplY3RJ ZCk7CisKKwkvKgorCSAqIFR5cGVkIHRhYmxlcyBhbmQgcGFydGl0aW9ucyB1c2UgYSBzbGlnaHRs eSBkaWZmZXJlbnQgZm9ybWF0IHN0cmluZzogd2UKKwkgKiBtdXN0IG5vdCBwdXQgdGFibGVfZWxl bWVudHMgd2l0aCBwYXJlbnRzIGRpcmVjdGx5IGluIHRoZSBmbXQgc3RyaW5nLAorCSAqIGJlY2F1 c2UgaWYgdGhlcmUgYXJlIG5vIG9wdGlvbnMgdGhlIHBhcmVudGhlc2VzIG11c3Qgbm90IGJlIGVt aXR0ZWQ7CisJICogYW5kIGFsc28sIHR5cGVkIHRhYmxlcyBkbyBub3QgYWxsb3cgZm9yIGluaGVy aXRhbmNlLgorCSAqLworCWlmIChub2RlLT5vZlR5cGVuYW1lIHx8IG5vZGUtPnBhcnRib3VuZCkK Kwl7CisJCUxpc3QJICAgKnRhYmxlZWx0cyA9IE5JTDsKKworCQkvKgorCQkgKiBXZSBjYW4ndCBw dXQgdGFibGUgZWxlbWVudHMgZGlyZWN0bHkgaW4gdGhlIGZtdCBzdHJpbmcgYXMgYW4gYXJyYXkK KwkJICogc3Vycm91bmRlZCBieSBwYXJlbnRoZXNlcyBoZXJlLCBiZWNhdXNlIGFuIGVtcHR5IGNs YXVzZSB3b3VsZCBjYXVzZQorCQkgKiBhIHN5bnRheCBlcnJvci4gIFRoZXJlZm9yZSwgd2UgdXNl IGFuIGluZGlyZWN0aW9uIGVsZW1lbnQgYW5kIHNldAorCQkgKiBwcmVzZW50PWZhbHNlIHdoZW4g dGhlcmUgYXJlIG5vIGVsZW1lbnRzLgorCQkgKi8KKwkJaWYgKG5vZGUtPm9mVHlwZW5hbWUpCisJ CXsKKwkJCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9mb3JfdHlwZShyZWxhdGlvbi0+cmRfcmVsLT5y ZWxvZnR5cGUsIC0xKTsKKwkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIk9GICV7b2ZfdHlw ZX1UIiwgdG1wX29iaik7CisJCX0KKwkJZWxzZQorCQl7CisJCQlMaXN0CSAgICpwYXJlbnRzOwor CQkJT2JqRWxlbSAgICAqZWxlbTsKKworCQkJcGFyZW50cyA9IGRlcGFyc2VfSW5oUmVsYXRpb25z KG9iamVjdElkKTsKKwkJCWVsZW0gPSAoT2JqRWxlbSAqKSBsaW5pdGlhbChwYXJlbnRzKTsKKwor CQkJQXNzZXJ0KGxpc3RfbGVuZ3RoKHBhcmVudHMpID09IDEpOworCisJCQlhcHBlbmRfZm9ybWF0 X3N0cmluZyhyZXQsICJQQVJUSVRJT04gT0YiKTsKKworCQkJYXBwZW5kX29iamVjdF9vYmplY3Qo cmV0LCAiJXtwYXJlbnRfaWRlbnRpdHl9RCIsCisJCQkJCQkJCSBlbGVtLT52YWx1ZS5vYmplY3Qp OworCQl9CisKKwkJdGFibGVlbHRzID0gZGVwYXJzZV9UYWJsZUVsZW1lbnRzKHJlbGF0aW9uLCBu b2RlLT50YWJsZUVsdHMsIGRwY29udGV4dCwKKwkJCQkJCQkJCQkgIHRydWUsIC8qIHR5cGVkIHRh YmxlICovCisJCQkJCQkJCQkJICBmYWxzZSk7CS8qIG5vdCBjb21wb3NpdGUgKi8KKwkJdGFibGVl bHRzID0gb2J0YWluQ29uc3RyYWludHModGFibGVlbHRzLCBvYmplY3RJZCwgSW52YWxpZE9pZCk7 CisKKwkJdG1wX29iaiA9IG5ld19vYmp0cmVlKCIiKTsKKwkJaWYgKHRhYmxlZWx0cykKKwkJCWFw cGVuZF9hcnJheV9vYmplY3QodG1wX29iaiwgIigle2VsZW1lbnRzOiwgfXMpIiwgdGFibGVlbHRz KTsKKwkJZWxzZQorCQkJYXBwZW5kX25vdF9wcmVzZW50KHRtcF9vYmopOworCisJCWFwcGVuZF9v YmplY3Rfb2JqZWN0KHJldCwgIiV7dGFibGVfZWxlbWVudHN9cyIsIHRtcF9vYmopOworCX0KKwll bHNlCisJeworCQlMaXN0CSAgICp0YWJsZWVsdHMgPSBOSUw7CisKKwkJLyoKKwkJICogVGhlcmUg aXMgbm8gbmVlZCB0byBwcm9jZXNzIExJS0UgY2xhdXNlcyBzZXBhcmF0ZWx5OyB0aGV5IGhhdmUK KwkJICogYWxyZWFkeSBiZWVuIHRyYW5zZm9ybWVkIGludG8gY29sdW1ucyBhbmQgY29uc3RyYWlu dHMuCisJCSAqLworCisJCS8qCisJCSAqIFByb2Nlc3MgdGFibGUgZWxlbWVudHM6IGNvbHVtbiBk ZWZpbml0aW9ucyBhbmQgY29uc3RyYWludHMuICBPbmx5CisJCSAqIHRoZSBjb2x1bW4gZGVmaW5p dGlvbnMgYXJlIG9idGFpbmVkIGZyb20gdGhlIHBhcnNlIG5vZGUgaXRzZWxmLiAgVG8KKwkJICog Z2V0IGNvbnN0cmFpbnRzIHdlIHJlbHkgb24gcGdfY29uc3RyYWludCwgYmVjYXVzZSB0aGUgcGFy c2Ugbm9kZQorCQkgKiBtaWdodCBiZSBtaXNzaW5nIHNvbWUgdGhpbmdzIHN1Y2ggYXMgdGhlIG5h bWUgb2YgdGhlIGNvbnN0cmFpbnRzLgorCQkgKi8KKwkJdGFibGVlbHRzID0gZGVwYXJzZV9UYWJs ZUVsZW1lbnRzKHJlbGF0aW9uLCBub2RlLT50YWJsZUVsdHMsIGRwY29udGV4dCwKKwkJCQkJCQkJ CQkgIGZhbHNlLAkvKiBub3QgdHlwZWQgdGFibGUgKi8KKwkJCQkJCQkJCQkgIGZhbHNlKTsJLyog bm90IGNvbXBvc2l0ZSAqLworCQl0YWJsZWVsdHMgPSBvYnRhaW5Db25zdHJhaW50cyh0YWJsZWVs dHMsIG9iamVjdElkLCBJbnZhbGlkT2lkKTsKKworCQlpZiAodGFibGVlbHRzKQorCQkJYXBwZW5k X2FycmF5X29iamVjdChyZXQsICIoJXt0YWJsZV9lbGVtZW50czosIH1zKSIsIHRhYmxlZWx0cyk7 CisJCWVsc2UKKwkJCWFwcGVuZF9mb3JtYXRfc3RyaW5nKHJldCwgIigpIik7CisKKwkJLyoKKwkJ ICogQWRkIGluaGVyaXRhbmNlIHNwZWNpZmljYXRpb24uICBXZSBjYW5ub3Qgc2ltcGx5IHNjYW4g dGhlIGxpc3Qgb2YKKwkJICogcGFyZW50cyBmcm9tIHRoZSBwYXJzZXIgbm9kZSwgYmVjYXVzZSB0 aGF0IG1heSBsYWNrIHRoZSBhY3R1YWwKKwkJICogcXVhbGlmaWVkIG5hbWVzIG9mIHRoZSBwYXJl bnQgcmVsYXRpb25zLiAgUmF0aGVyIHRoYW4gdHJ5aW5nIHRvCisJCSAqIHJlLXJlc29sdmUgdGhl bSBmcm9tIHRoZSBpbmZvcm1hdGlvbiBpbiB0aGUgcGFyc2Ugbm9kZSwgaXQgc2VlbXMKKwkJICog bW9yZSBhY2N1cmF0ZSBhbmQgY29udmVuaWVudCB0byBncmFiIGl0IGZyb20gcGdfaW5oZXJpdHMu CisJCSAqLworCQl0bXBfb2JqID0gbmV3X29ianRyZWUoIklOSEVSSVRTIik7CisJCWlmIChub2Rl LT5pbmhSZWxhdGlvbnMgIT0gTklMKQorCQkJYXBwZW5kX2FycmF5X29iamVjdCh0bXBfb2JqLCAi KCV7cGFyZW50czosIH1EKSIsIGRlcGFyc2VfSW5oUmVsYXRpb25zKG9iamVjdElkKSk7CisJCWVs c2UKKwkJeworCQkJYXBwZW5kX251bGxfb2JqZWN0KHRtcF9vYmosICIoJXtwYXJlbnRzOiwgfUQp Iik7CisJCQlhcHBlbmRfbm90X3ByZXNlbnQodG1wX29iaik7CisJCX0KKwkJYXBwZW5kX29iamVj dF9vYmplY3QocmV0LCAiJXtpbmhlcml0c31zIiwgdG1wX29iaik7CisJfQorCisJdG1wX29iaiA9 IG5ld19vYmp0cmVlKCJUQUJMRVNQQUNFIik7CisJaWYgKG5vZGUtPnRhYmxlc3BhY2VuYW1lKQor CQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBfb2JqLCAiJXt0YWJsZXNwYWNlfUkiLCAidGFibGVz cGFjZSIsCisJCQkJCQkJIG5vZGUtPnRhYmxlc3BhY2VuYW1lKTsKKwllbHNlCisJeworCQlhcHBl bmRfbnVsbF9vYmplY3QodG1wX29iaiwgIiV7dGFibGVzcGFjZX1JIik7CisJCWFwcGVuZF9ub3Rf cHJlc2VudCh0bXBfb2JqKTsKKwl9CisJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiJXt0YWJs ZXNwYWNlfXMiLCB0bXBfb2JqKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICIle29uX2Nv bW1pdH1zIiwKKwkJCQkJCSBkZXBhcnNlX09uQ29tbWl0Q2xhdXNlKG5vZGUtPm9uY29tbWl0KSk7 CisKKwkvKiBGT1IgVkFMVUVTIGNsYXVzZSAqLworCWlmIChub2RlLT5wYXJ0Ym91bmQpCisJewor CQkvKgorCQkgKiBHZXQgcGdfY2xhc3MucmVscGFydGJvdW5kLiBXZSBjYW5ub3QgdXNlIHBhcnRi b3VuZCBpbiB0aGUgcGFyc2V0cmVlCisJCSAqIGRpcmVjdGx5IGFzIGl0J3MgdGhlIG9yaWdpbmFs IHBhcnRib3VuZCBleHByZXNzaW9uIHdoaWNoIGhhdmVuJ3QKKwkJICogYmVlbiB0cmFuc2Zvcm1l ZC4KKwkJICovCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJldCwgIiV7cGFydGl0aW9uX2JvdW5k fXMiLCAicGFydGl0aW9uX2JvdW5kIiwKKwkJCQkJCQkgUmVsYXRpb25HZXRQYXJ0aXRpb25Cb3Vu ZChvYmplY3RJZCkpOworCX0KKworCS8qIFBBUlRJVElPTiBCWSBjbGF1c2UgKi8KKwl0bXBfb2Jq ID0gbmV3X29ianRyZWUoIlBBUlRJVElPTiBCWSIpOworCWlmIChyZWxhdGlvbi0+cmRfcmVsLT5y ZWxraW5kID09IFJFTEtJTkRfUEFSVElUSU9ORURfVEFCTEUpCisJCWFwcGVuZF9zdHJpbmdfb2Jq ZWN0KHRtcF9vYmosICIle2RlZmluaXRpb259cyIsICJkZWZpbml0aW9uIiwKKwkJCQkJCQkgcGdf Z2V0X3BhcnRrZXlkZWZfc2ltcGxlKG9iamVjdElkKSk7CisJZWxzZQorCXsKKwkJYXBwZW5kX251 bGxfb2JqZWN0KHRtcF9vYmosICIle2RlZmluaXRpb259cyIpOworCQlhcHBlbmRfbm90X3ByZXNl bnQodG1wX29iaik7CisJfQorCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7cGFydGl0aW9u X2J5fXMiLCB0bXBfb2JqKTsKKworCS8qIFVTSU5HIGNsYXVzZSAqLworCXRtcF9vYmogPSBuZXdf b2JqdHJlZSgiVVNJTkciKTsKKwlpZiAobm9kZS0+YWNjZXNzTWV0aG9kKQorCQlhcHBlbmRfc3Ry aW5nX29iamVjdCh0bXBfb2JqLCAiJXthY2Nlc3NfbWV0aG9kfUkiLCAiYWNjZXNzX21ldGhvZCIs CisJCQkJCQkJIG5vZGUtPmFjY2Vzc01ldGhvZCk7CisJZWxzZQorCXsKKwkJYXBwZW5kX251bGxf b2JqZWN0KHRtcF9vYmosICIle2FjY2Vzc19tZXRob2R9SSIpOworCQlhcHBlbmRfbm90X3ByZXNl bnQodG1wX29iaik7CisJfQorCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7YWNjZXNzX21l dGhvZH1zIiwgdG1wX29iaik7CisKKwkvKiBXSVRIIGNsYXVzZSAqLworCXRtcF9vYmogPSBuZXdf b2JqdHJlZSgiV0lUSCIpOworCisJZm9yZWFjaChjZWxsLCBub2RlLT5vcHRpb25zKQorCXsKKwkJ T2JqVHJlZSAgICAqdG1wX29iajI7CisJCURlZkVsZW0gICAgKm9wdCA9IChEZWZFbGVtICopIGxm aXJzdChjZWxsKTsKKworCQl0bXBfb2JqMiA9IGRlcGFyc2VfRGVmRWxlbShvcHQsIGZhbHNlKTsK KwkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wX29iajIpKTsKKwl9 CisKKwlpZiAobGlzdCkKKwkJYXBwZW5kX2FycmF5X29iamVjdCh0bXBfb2JqLCAiKCV7d2l0aDos IH1zKSIsIGxpc3QpOworCWVsc2UKKwkJYXBwZW5kX25vdF9wcmVzZW50KHRtcF9vYmopOworCisJ YXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiJXt3aXRoX2NsYXVzZX1zIiwgdG1wX29iaik7CisK KwlyZWxhdGlvbl9jbG9zZShyZWxhdGlvbiwgQWNjZXNzU2hhcmVMb2NrKTsKKworCXJldHVybiBy ZXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIENSRUFURSBUQUJMRSBBUyBjb21tYW5kLgorICoKKyAq IGRlcGFyc2VfQ3JlYXRlU3RtdCBkbyB0aGUgYWN0dWFsIHdvcmsgYXMgd2UgZGVwYXJzZSB0aGUg ZmluYWwgQ3JlYXRlU3RtdCBmb3IKKyAqIENSRUFURSBUQUJMRSBBUyBjb21tYW5kLgorICovCitz dGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NyZWF0ZVRhYmxlQXNTdG10KENvbGxlY3RlZENvbW1h bmQgKmNtZCkKK3sKKwlPaWQJCQlvYmplY3RJZDsKKwlOb2RlCSAgICpwYXJzZXRyZWU7CisKKwlB c3NlcnQoY21kLT50eXBlID09IFNDVF9DcmVhdGVUYWJsZUFzKTsKKworCXBhcnNldHJlZSA9IGNt ZC0+ZC5jdGFzLnJlYWxfY3JlYXRlOworCW9iamVjdElkID0gY21kLT5kLmN0YXMuYWRkcmVzcy5v YmplY3RJZDsKKworCXJldHVybiBkZXBhcnNlX0NyZWF0ZVN0bXQob2JqZWN0SWQsIHBhcnNldHJl ZSk7Cit9CisKKy8qCisgKiBEZXBhcnNlIGFsbCB0aGUgY29sbGVjdGVkIHN1YmNvbW1hbmRzIGFu ZCByZXR1cm4gYW4gT2JqVHJlZSByZXByZXNlbnRpbmcgdGhlCisgKiBhbHRlciBjb21tYW5kLgor ICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBBTFRFUiByZWx0eXBlICV7aWRlbnRpdHl9RCAle3N1 YmNtZHM6LCB9cworICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0FsdGVyUmVsYXRpb24o Q29sbGVjdGVkQ29tbWFuZCAqY21kKQoreworCU9ialRyZWUgICAgKnJldDsKKwlPYmpUcmVlICAg ICp0bXBfb2JqOworCU9ialRyZWUgICAgKnRtcF9vYmoyOworCUxpc3QJICAgKmRwY29udGV4dDsK KwlSZWxhdGlvbglyZWw7CisJTGlzdAkgICAqc3ViY21kcyA9IE5JTDsKKwlMaXN0Q2VsbCAgICpj ZWxsOworCWNvbnN0IGNoYXIgKnJlbHR5cGU7CisJYm9vbAkJaXN0eXBlID0gZmFsc2U7CisJYm9v bAkJaXN0YWJsZSA9IGZhbHNlOworCUxpc3QJICAgKmV4cHJzID0gTklMOworCU9pZAkJCXJlbElk ID0gY21kLT5kLmFsdGVyVGFibGUub2JqZWN0SWQ7CisJQWx0ZXJUYWJsZVN0bXQgKnN0bXQgPSBO VUxMOworCisJQXNzZXJ0KGNtZC0+dHlwZSA9PSBTQ1RfQWx0ZXJUYWJsZSk7CisJc3RtdCA9IChB bHRlclRhYmxlU3RtdCAqKSBjbWQtPnBhcnNldHJlZTsKKwlBc3NlcnQoSXNBKHN0bXQsIEFsdGVy VGFibGVTdG10KSk7CisKKwkvKgorCSAqIEFMVEVSIFRBQkxFIHN1YmNvbW1hbmRzIGdlbmVyYXRl ZCBmb3IgVGFibGVMaWtlQ2xhdXNlIGlzIHByb2Nlc3NlZCBpbgorCSAqIHRoZSB0b3AgbGV2ZWwg Q1JFQVRFIFRBQkxFIGNvbW1hbmQ7IHJldHVybiBlbXB0eSBoZXJlLgorCSAqLworCWlmIChzdG10 LT50YWJsZV9saWtlKQorCQlyZXR1cm4gTlVMTDsKKworCXJlbCA9IHJlbGF0aW9uX29wZW4ocmVs SWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJZHBjb250ZXh0ID0gZGVwYXJzZV9jb250ZXh0X2ZvcihS ZWxhdGlvbkdldFJlbGF0aW9uTmFtZShyZWwpLAorCQkJCQkJCQkJcmVsSWQpOworCisJc3dpdGNo IChyZWwtPnJkX3JlbC0+cmVsa2luZCkKKwl7CisJCWNhc2UgUkVMS0lORF9SRUxBVElPTjoKKwkJ Y2FzZSBSRUxLSU5EX1BBUlRJVElPTkVEX1RBQkxFOgorCQkJcmVsdHlwZSA9ICJUQUJMRSI7CisJ CQlpc3RhYmxlID0gdHJ1ZTsKKwkJCWJyZWFrOworCQljYXNlIFJFTEtJTkRfSU5ERVg6CisJCWNh c2UgUkVMS0lORF9QQVJUSVRJT05FRF9JTkRFWDoKKwkJCXJlbHR5cGUgPSAiSU5ERVgiOworCQkJ YnJlYWs7CisJCWNhc2UgUkVMS0lORF9WSUVXOgorCQkJcmVsdHlwZSA9ICJWSUVXIjsKKwkJCWJy ZWFrOworCQljYXNlIFJFTEtJTkRfQ09NUE9TSVRFX1RZUEU6CisJCQlyZWx0eXBlID0gIlRZUEUi OworCQkJaXN0eXBlID0gdHJ1ZTsKKwkJCWJyZWFrOworCQljYXNlIFJFTEtJTkRfRk9SRUlHTl9U QUJMRToKKwkJCXJlbHR5cGUgPSAiRk9SRUlHTiBUQUJMRSI7CisJCQlicmVhazsKKwkJY2FzZSBS RUxLSU5EX01BVFZJRVc6CisJCQlyZWx0eXBlID0gIk1BVEVSSUFMSVpFRCBWSUVXIjsKKwkJCWJy ZWFrOworCisJCQkvKiBUT0RPIHN1cHBvcnQgZm9yIHBhcnRpdGlvbmVkIHRhYmxlICovCisKKwkJ ZGVmYXVsdDoKKwkJCWVsb2coRVJST1IsICJ1bmV4cGVjdGVkIHJlbGtpbmQgJWQiLCByZWwtPnJk X3JlbC0+cmVsa2luZCk7CisJfQorCisJcmV0ID0gbmV3X29ianRyZWVfVkEoIkFMVEVSICV7b2Jq dHlwZX1zICV7aWRlbnRpdHl9RCIsIDIsCisJCQkJCQkgIm9ianR5cGUiLCBPYmpUeXBlU3RyaW5n LCByZWx0eXBlLAorCQkJCQkJICJpZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkgbmV3 X29ianRyZWVfZm9yX3F1YWxuYW1lKHJlbC0+cmRfcmVsLT5yZWxuYW1lc3BhY2UsCisJCQkJCQkJ CQkJCQkgIFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHJlbCkpKTsKKworCWZvcmVhY2goY2VsbCwg Y21kLT5kLmFsdGVyVGFibGUuc3ViY21kcykKKwl7CisJCUNvbGxlY3RlZEFUU3ViY21kICpzdWIg PSAoQ29sbGVjdGVkQVRTdWJjbWQgKikgbGZpcnN0KGNlbGwpOworCQlBbHRlclRhYmxlQ21kICpz dWJjbWQgPSAoQWx0ZXJUYWJsZUNtZCAqKSBzdWItPnBhcnNldHJlZTsKKwkJT2JqVHJlZSAgICAq dHJlZTsKKworCQlBc3NlcnQoSXNBKHN1YmNtZCwgQWx0ZXJUYWJsZUNtZCkpOworCisJICAgLyoK KwkJKiBTa2lwIGRlcGFyc2Ugb2YgdGhlIHN1YmNvbW1hbmQgaWYgdGhlIG9iamVjdElkIGRvZXNu J3QgbWF0Y2ggdGhlCisJCSogdGFyZ2V0IHJlbGF0aW9uIElELiBJdCBjYW4gaGFwcGVuIGZvciBp bmhlcml0ZWQgdGFibGVzIHdoZW4KKwkJKiBzdWJjb21tYW5kcyBmb3IgaW5oZXJpdGVkIHRhYmxl cyBhbmQgdGhlIHBhcmVudCB0YWJsZSBhcmUgYm90aAorCQkqIGNvbGxlY3RlZCBpbiB0aGUgQUxU RVIgVEFMQkUgY29tbWFuZCBmb3IgdGhlIHBhcmVudCB0YWJsZS4gV2l0aCB0aGUKKwkJKiBleGNl cHRpb24gb2YgdGhlIGludGVybmFsbHkgZ2VuZXJhdGVkIEFkZENvbnN0cmFpbnQgKGZvcgorCQkq IEFMVEVSIFRBQkxFIEFERCBDT05TVFJBSU5UIEZPUkVJR04gS0VZIFJFRkVSRU5DRVMpIHdoZXJl IHRoZQorCQkqIG9iamVjdElkcyBjb3VsZCBtaXNtYXRjaCAoZm9yZWluIHRhYmxlIGlkIGFuZCB0 aGUgcmVmZXJlbmNlZCB0YWJsZQorCQkqIGlkKS4KKwkJKi8KKwkJaWYgKChzdWItPmFkZHJlc3Mu b2JqZWN0SWQgIT0gcmVsSWQgJiYKKwkJCSBzdWItPmFkZHJlc3Mub2JqZWN0SWQgIT0gSW52YWxp ZE9pZCkgJiYKKwkJCSEoc3ViY21kLT5zdWJ0eXBlID09IEFUX0FkZENvbnN0cmFpbnQgJiYKKwkJ CSAgc3ViY21kLT5yZWN1cnNlKSAmJgorCQkJaXN0YWJsZSkKKwkJCWNvbnRpbnVlOworCisJCXN3 aXRjaCAoc3ViY21kLT5zdWJ0eXBlKQorCQl7CisJCQljYXNlIEFUX0FkZENvbHVtbjoKKwkJCQkv KiBYWFggbmVlZCB0byBzZXQgdGhlICJyZWN1cnNlIiBiaXQgc29tZXdoZXJlPyAqLworCQkJCUFz c2VydChJc0Eoc3ViY21kLT5kZWYsIENvbHVtbkRlZikpOworCQkJCXRyZWUgPSBkZXBhcnNlX0Nv bHVtbkRlZihyZWwsIGRwY29udGV4dCwgZmFsc2UsCisJCQkJCQkJCQkJIChDb2x1bW5EZWYgKikg c3ViY21kLT5kZWYsIHRydWUsICZleHBycyk7CisJCQkJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZB KCJBREQgJXtvYmp0eXBlfXMgJXtpZl9ub3RfZXhpc3RzfXMgJXtkZWZpbml0aW9ufXMiLCA0LAor CQkJCQkJCQkJCSJvYmp0eXBlIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJCQlpc3R5cGUgPyAi QVRUUklCVVRFIiA6ICJDT0xVTU4iLAorCQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywg ImFkZCBjb2x1bW4iLAorCQkJCQkJCQkJCSJpZl9ub3RfZXhpc3RzIiwgT2JqVHlwZVN0cmluZywK KwkJCQkJCQkJCQlzdWJjbWQtPm1pc3Npbmdfb2sgPyAiSUYgTk9UIEVYSVNUUyIgOiAiIiwKKwkJ CQkJCQkJCQkiZGVmaW5pdGlvbiIsIE9ialR5cGVPYmplY3QsIHRyZWUpOworCQkJCXN1YmNtZHMg PSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKwkJCQlicmVh azsKKworCQkJY2FzZSBBVF9BZGRJbmRleENvbnN0cmFpbnQ6CisJCQkJeworCQkJCQlJbmRleFN0 bXQgICppc3RtdDsKKwkJCQkJUmVsYXRpb24JaWR4OworCQkJCQlPaWQJCQljb25zdHJPaWQgPSBz dWItPmFkZHJlc3Mub2JqZWN0SWQ7CisKKwkJCQkJQXNzZXJ0KElzQShzdWJjbWQtPmRlZiwgSW5k ZXhTdG10KSk7CisJCQkJCWlzdG10ID0gKEluZGV4U3RtdCAqKSBzdWJjbWQtPmRlZjsKKworCQkJ CQlBc3NlcnQoaXN0bXQtPmlzY29uc3RyYWludCAmJiBpc3RtdC0+dW5pcXVlKTsKKworCQkJCQlp ZHggPSByZWxhdGlvbl9vcGVuKGlzdG10LT5pbmRleE9pZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwor CQkJCQkvKgorCQkJCQkgKiBWZXJib3NlIHN5bnRheAorCQkJCQkgKgorCQkJCQkgKiBBREQgQ09O U1RSQUlOVCAle25hbWV9SSAle2NvbnN0cmFpbnRfdHlwZX1zIFVTSU5HIElOREVYCisJCQkJCSAq ICVpbmRleF9uYW1lfUkgJXtkZWZlcnJhYmxlfXMgJXtpbml0X2RlZmVycmVkfXMKKwkJCQkJICov CisJCQkJCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiQUREIENPTlNUUkFJTlQgJXtuYW1lfUkg JXtjb25zdHJhaW50X3R5cGV9cyBVU0lORyBJTkRFWCAle2luZGV4X25hbWV9SSAle2RlZmVycmFi bGV9cyAle2luaXRfZGVmZXJyZWR9cyIsIDYsCisJCQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0 cmluZywgImFkZCBjb25zdHJhaW50IHVzaW5nIGluZGV4IiwKKwkJCQkJCQkJCQkJIm5hbWUiLCBP YmpUeXBlU3RyaW5nLCBnZXRfY29uc3RyYWludF9uYW1lKGNvbnN0ck9pZCksCisJCQkJCQkJCQkJ CSJjb25zdHJhaW50X3R5cGUiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJCQlpc3RtdC0+cHJp bWFyeSA/ICJQUklNQVJZIEtFWSIgOiAiVU5JUVVFIiwKKwkJCQkJCQkJCQkJImluZGV4X25hbWUi LCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJCQlSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShpZHgp LAorCQkJCQkJCQkJCQkiZGVmZXJyYWJsZSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCQkJCWlz dG10LT5kZWZlcnJhYmxlID8gIkRFRkVSUkFCTEUiIDogIk5PVCBERUZFUlJBQkxFIiwKKwkJCQkJ CQkJCQkJImluaXRfZGVmZXJyZWQiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJCQlpc3RtdC0+ aW5pdGRlZmVycmVkID8gIklOSVRJQUxMWSBERUZFUlJFRCIgOiAiSU5JVElBTExZIElNTUVESUFU RSIpOworCisJCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0 KHRtcF9vYmopKTsKKworCQkJCQlyZWxhdGlvbl9jbG9zZShpZHgsIEFjY2Vzc1NoYXJlTG9jayk7 CisJCQkJfQorCQkJCWJyZWFrOworCisJCQljYXNlIEFUX1JlQWRkSW5kZXg6CisJCQljYXNlIEFU X1JlQWRkQ29uc3RyYWludDoKKwkJCWNhc2UgQVRfUmVBZGRDb21tZW50OgorCQkJY2FzZSBBVF9S ZXBsYWNlUmVsT3B0aW9uczoKKwkJCWNhc2UgQVRfQ2hlY2tOb3ROdWxsOgorCQkJY2FzZSBBVF9S ZUFkZFN0YXRpc3RpY3M6CisJCQkJLyogU3VidHlwZXMgdXNlZCBmb3IgaW50ZXJuYWwgb3BlcmF0 aW9uczsgbm90aGluZyB0byBkbyBoZXJlICovCisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfQ29v a2VkQ29sdW1uRGVmYXVsdDoKKwkJCQl7CisJCQkJCVJlbGF0aW9uCWF0dHJyZWw7CisJCQkJCUhl YXBUdXBsZQlhdHR0dXA7CisJCQkJCUZvcm1fcGdfYXR0cmlidXRlIGF0dFN0cnVjdDsKKworCQkJ CQlhdHRycmVsID0gdGFibGVfb3BlbihBdHRyaWJ1dGVSZWxhdGlvbklkLCBSb3dFeGNsdXNpdmVM b2NrKTsKKwkJCQkJYXR0dHVwID0gU2VhcmNoU3lzQ2FjaGVDb3B5MihBVFROVU0sCisJCQkJCQkJ CQkJCQkgT2JqZWN0SWRHZXREYXR1bShSZWxhdGlvbkdldFJlbGlkKHJlbCkpLAorCQkJCQkJCQkJ CQkJIEludDE2R2V0RGF0dW0oc3ViY21kLT5udW0pKTsKKwkJCQkJaWYgKCFIZWFwVHVwbGVJc1Zh bGlkKGF0dHR1cCkpCisJCQkJCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3Ig YXR0cmlidXRlICVkIG9mIHJlbGF0aW9uIHdpdGggT0lEICV1IiwKKwkJCQkJCQkgc3ViY21kLT5u dW0sIFJlbGF0aW9uR2V0UmVsaWQocmVsKSk7CisJCQkJCWF0dFN0cnVjdCA9IChGb3JtX3BnX2F0 dHJpYnV0ZSkgR0VUU1RSVUNUKGF0dHR1cCk7CisKKwkJCQkJLyoKKwkJCQkJICogQm90aCBkZWZh dWx0IGFuZCBnZW5lcmF0aW9uIGV4cHJlc3Npb24gbm90IHN1cHBvcnRlZAorCQkJCQkgKiB0b2dl dGhlci4KKwkJCQkJICovCisJCQkJCWlmICghYXR0U3RydWN0LT5hdHRnZW5lcmF0ZWQpCisJCQkJ CQllbG9nKFdBUk5JTkcsICJ1bnN1cHBvcnRlZCBhbHRlciB0YWJsZSBzdWJ0eXBlICVkIiwKKwkJ CQkJCQkgc3ViY21kLT5zdWJ0eXBlKTsKKworCQkJCQloZWFwX2ZyZWV0dXBsZShhdHR0dXApOwor CQkJCQl0YWJsZV9jbG9zZShhdHRycmVsLCBSb3dFeGNsdXNpdmVMb2NrKTsKKwkJCQkJYnJlYWs7 CisJCQkJfQorCisJCQljYXNlIEFUX0FkZENvbHVtblRvVmlldzoKKwkJCQkvKiBDUkVBVEUgT1Ig UkVQTEFDRSBWSUVXIC0tIG5vdGhpbmcgdG8gZG8gaGVyZSAqLworCQkJCWJyZWFrOworCisJCQlj YXNlIEFUX0NvbHVtbkRlZmF1bHQ6CisJCQkJaWYgKHN1YmNtZC0+ZGVmID09IE5VTEwpCisJCQkJ CXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgQ09MVU1OICV7Y29sdW1ufUkgRFJPUCBE RUZBVUxUIiwgMiwKKwkJCQkJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiZHJvcCBkZWZh dWx0IiwKKwkJCQkJCQkJCQkJImNvbHVtbiIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7 CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJTGlzdAkgICAqZHBjb250ZXh0X3JlbDsKKwkJCQkJSGVh cFR1cGxlCWF0dHJ0dXA7CisJCQkJCUF0dHJOdW1iZXIJYXR0bm87CisKKwkJCQkJdG1wX29iaiA9 IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBDT0xVTU4gJXtjb2x1bW59SSBTRVQgREVGQVVMVCIsIDIs CisJCQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgInNldCBkZWZhdWx0IiwKKwkJCQkJ CQkJCQkJImNvbHVtbiIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisKKwkJCQkJZHBj b250ZXh0X3JlbCA9IGRlcGFyc2VfY29udGV4dF9mb3IoUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUo cmVsKSwKKwkJCQkJCQkJCQkJCQkJUmVsYXRpb25HZXRSZWxpZChyZWwpKTsKKwkJCQkJYXR0cnR1 cCA9IFNlYXJjaFN5c0NhY2hlQXR0TmFtZShSZWxhdGlvbkdldFJlbGlkKHJlbCksIHN1YmNtZC0+ bmFtZSk7CisJCQkJCWF0dG5vID0gKChGb3JtX3BnX2F0dHJpYnV0ZSkgR0VUU1RSVUNUKGF0dHJ0 dXApKS0+YXR0bnVtOworCQkJCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBfb2JqLCAiJXtkZWZp bml0aW9ufXMiLCAiZGVmaW5pdGlvbiIsCisJCQkJCQkJCQkJIFJlbGF0aW9uR2V0Q29sdW1uRGVm YXVsdChyZWwsIGF0dG5vLAorCQkJCQkJCQkJCQkJCQkJCSAgZHBjb250ZXh0X3JlbCwKKwkJCQkJ CQkJCQkJCQkJCQkgIE5VTEwpKTsKKwkJCQkJUmVsZWFzZVN5c0NhY2hlKGF0dHJ0dXApOworCQkJ CX0KKworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRt cF9vYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9Ecm9wTm90TnVsbDoKKwkJCQl0bXBf b2JqID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIENPTFVNTiAle2NvbHVtbn1JIERST1AgTk9UIE5V TEwiLCAyLAorCQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImRyb3Agbm90IG51bGwi LAorCQkJCQkJCQkJCSJjb2x1bW4iLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCQkJ CXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsK KwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9Gb3JjZVJvd1NlY3VyaXR5OgorCQkJCXRtcF9vYmog PSBuZXdfb2JqdHJlZSgiRk9SQ0UgUk9XIExFVkVMIFNFQ1VSSVRZIik7CisJCQkJc3ViY21kcyA9 IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wX29iaikpOworCQkJCWJyZWFr OworCisJCQljYXNlIEFUX05vRm9yY2VSb3dTZWN1cml0eToKKwkJCQl0bXBfb2JqID0gbmV3X29i anRyZWUoIk5PIEZPUkNFIFJPVyBMRVZFTCBTRUNVUklUWSIpOworCQkJCXN1YmNtZHMgPSBsYXBw ZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKwkJCQlicmVhazsKKwor CQkJY2FzZSBBVF9TZXROb3ROdWxsOgorCQkJCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiQUxU RVIgQ09MVU1OICV7Y29sdW1ufUkgU0VUIE5PVCBOVUxMIiwgMiwKKwkJCQkJCQkJCQkidHlwZSIs IE9ialR5cGVTdHJpbmcsICJzZXQgbm90IG51bGwiLAorCQkJCQkJCQkJCSJjb2x1bW4iLCBPYmpU eXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMs IG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9E cm9wRXhwcmVzc2lvbjoKKwkJCQl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIENPTFVN TiAle2NvbHVtbn1JIERST1AgRVhQUkVTU0lPTiAle2lmX2V4aXN0c31zIiwgMywKKwkJCQkJCQkJ CQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJkcm9wIGV4cHJlc3Npb24iLAorCQkJCQkJCQkJCSJj b2x1bW4iLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUsCisJCQkJCQkJCQkJImlmX2V4aXN0 cyIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCQkJc3ViY21kLT5taXNzaW5nX29rID8gIklGIEVY SVNUUyIgOiAiIik7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9v YmplY3QodG1wX29iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX1NldFN0YXRpc3RpY3M6 CisJCQkJeworCQkJCQlBc3NlcnQoSXNBKHN1YmNtZC0+ZGVmLCBJbnRlZ2VyKSk7CisJCQkJCWlm IChzdWJjbWQtPm5hbWUpCisJCQkJCQl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIENP TFVNTiAle2NvbHVtbn1JIFNFVCBTVEFUSVNUSUNTICV7c3RhdGlzdGljc31uIiwgMywKKwkJCQkJ CQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgInNldCBzdGF0aXN0aWNzIiwKKwkJCQkJCQkJ CQkJCSJjb2x1bW4iLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUsCisJCQkJCQkJCQkJCQki c3RhdGlzdGljcyIsIE9ialR5cGVJbnRlZ2VyLAorCQkJCQkJCQkJCQkJaW50VmFsKChJbnRlZ2Vy ICopIHN1YmNtZC0+ZGVmKSk7CisJCQkJCWVsc2UKKwkJCQkJCXRtcF9vYmogPSBuZXdfb2JqdHJl ZV9WQSgiQUxURVIgQ09MVU1OICV7Y29sdW1ufW4gU0VUIFNUQVRJU1RJQ1MgJXtzdGF0aXN0aWNz fW4iLCAzLAorCQkJCQkJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAic2V0IHN0YXRpc3Rp Y3MiLAorCQkJCQkJCQkJCQkJImNvbHVtbiIsIE9ialR5cGVJbnRlZ2VyLCBzdWJjbWQtPm51bSwK KwkJCQkJCQkJCQkJCSJzdGF0aXN0aWNzIiwgT2JqVHlwZUludGVnZXIsCisJCQkJCQkJCQkJCQlp bnRWYWwoKEludGVnZXIgKikgc3ViY21kLT5kZWYpKTsKKwkJCQkJc3ViY21kcyA9IGxhcHBlbmQo c3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wX29iaikpOworCQkJCX0KKwkJCQlicmVhazsK KworCQkJY2FzZSBBVF9TZXRPcHRpb25zOgorCQkJY2FzZSBBVF9SZXNldE9wdGlvbnM6CisJCQkJ c3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QoCisJCQkJCQkJCQkJ CQkJCQkgZGVwYXJzZV9Db2x1bW5TZXRPcHRpb25zKHN1YmNtZCkpKTsKKwkJCQlicmVhazsKKwor CQkJY2FzZSBBVF9TZXRTdG9yYWdlOgorCQkJCUFzc2VydChJc0Eoc3ViY21kLT5kZWYsIFN0cmlu ZykpOworCQkJCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgQ09MVU1OICV7Y29sdW1u fUkgU0VUIFNUT1JBR0UgJXtzdG9yYWdlfXMiLCAzLAorCQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlw ZVN0cmluZywgInNldCBzdG9yYWdlIiwKKwkJCQkJCQkJCQkiY29sdW1uIiwgT2JqVHlwZVN0cmlu Zywgc3ViY21kLT5uYW1lLAorCQkJCQkJCQkJCSJzdG9yYWdlIiwgT2JqVHlwZVN0cmluZywKKwkJ CQkJCQkJCQlzdHJWYWwoKFN0cmluZyAqKSBzdWJjbWQtPmRlZikpOworCQkJCXN1YmNtZHMgPSBs YXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKwkJCQlicmVhazsK KworCQkJY2FzZSBBVF9TZXRDb21wcmVzc2lvbjoKKwkJCQlBc3NlcnQoSXNBKHN1YmNtZC0+ZGVm LCBTdHJpbmcpKTsKKwkJCQl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIENPTFVNTiAl e2NvbHVtbn1JIFNFVCBDT01QUkVTU0lPTiAle2NvbXByZXNzaW9uX21ldGhvZH1zIiwgMywKKwkJ CQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJzZXQgY29tcHJlc3Npb24iLAorCQkJCQkJ CQkJCSJjb2x1bW4iLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUsCisJCQkJCQkJCQkJImNv bXByZXNzaW9uX21ldGhvZCIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCQkJc3RyVmFsKChTdHJp bmcgKikgc3ViY21kLT5kZWYpKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdf b2JqZWN0X29iamVjdCh0bXBfb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRHJvcENv bHVtbjoKKwkJCQl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIkRST1AgJXtvYmp0eXBlfXMgJXtp Zl9ub3RfZXhpc3RzfXMgJXtjb2x1bW59SSIsIDQsCisJCQkJCQkJCQkJIm9ianR5cGUiLCBPYmpU eXBlU3RyaW5nLAorCQkJCQkJCQkJCWlzdHlwZSA/ICJBVFRSSUJVVEUiIDogIkNPTFVNTiIsCisJ CQkJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiZHJvcCBjb2x1bW4iLAorCQkJCQkJCQkJ CSJpZl9ub3RfZXhpc3RzIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJCQlzdWJjbWQtPm1pc3Np bmdfb2sgPyAiSUYgTk9UIEVYSVNUUyIgOiAiIiwKKwkJCQkJCQkJCQkiY29sdW1uIiwgT2JqVHlw ZVN0cmluZywgc3ViY21kLT5uYW1lKTsKKwkJCQl0bXBfb2JqMiA9IG5ld19vYmp0cmVlX1ZBKCJD QVNDQURFIiwgMSwKKwkJCQkJCQkJCQkgInByZXNlbnQiLCBPYmpUeXBlQm9vbCwgc3ViY21kLT5i ZWhhdmlvcik7CisJCQkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wX29iaiwgIiV7Y2FzY2FkZX1z IiwgdG1wX29iajIpOworCisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVj dF9vYmplY3QodG1wX29iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0FkZEluZGV4Ogor CQkJCXsKKwkJCQkJT2lkCQkJaWR4T2lkID0gc3ViLT5hZGRyZXNzLm9iamVjdElkOworCQkJCQlJ bmRleFN0bXQgICppc3RtdDsKKwkJCQkJUmVsYXRpb24JaWR4OworCQkJCQljb25zdCBjaGFyICpp ZHhuYW1lOworCQkJCQlPaWQJCQljb25zdHJPaWQ7CisKKwkJCQkJQXNzZXJ0KElzQShzdWJjbWQt PmRlZiwgSW5kZXhTdG10KSk7CisJCQkJCWlzdG10ID0gKEluZGV4U3RtdCAqKSBzdWJjbWQtPmRl ZjsKKworCQkJCQlpZiAoIWlzdG10LT5pc2NvbnN0cmFpbnQpCisJCQkJCQlicmVhazsKKworCQkJ CQlpZHggPSByZWxhdGlvbl9vcGVuKGlkeE9pZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwkJCQkJaWR4 bmFtZSA9IFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKGlkeCk7CisKKwkJCQkJY29uc3RyT2lkID0g Z2V0X3JlbGF0aW9uX2NvbnN0cmFpbnRfb2lkKAorCQkJCQkJCQkJCQkJCQkJY21kLT5kLmFsdGVy VGFibGUub2JqZWN0SWQsIGlkeG5hbWUsIGZhbHNlKTsKKworCQkJCQl0bXBfb2JqID0gbmV3X29i anRyZWVfVkEoIkFERCBDT05TVFJBSU5UICV7bmFtZX1JICV7ZGVmaW5pdGlvbn1zIiwgMywKKwkJ CQkJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiYWRkIGNvbnN0cmFpbnQiLAorCQkJCQkJ CQkJCQkibmFtZSIsIE9ialR5cGVTdHJpbmcsIGlkeG5hbWUsCisJCQkJCQkJCQkJCSJkZWZpbml0 aW9uIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJCQkJcGdfZ2V0X2NvbnN0cmFpbnRkZWZfY29t bWFuZF9zaW1wbGUoY29uc3RyT2lkKSk7CisJCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMs IG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKworCQkJCQlyZWxhdGlvbl9jbG9zZShpZHgs IEFjY2Vzc1NoYXJlTG9jayk7CisJCQkJfQorCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0FkZENv bnN0cmFpbnQ6CisJCQkJeworCQkJCQkvKiBYWFggbmVlZCB0byBzZXQgdGhlICJyZWN1cnNlIiBi aXQgc29tZXdoZXJlPyAqLworCQkJCQlPaWQJCQljb25zdHJPaWQgPSBzdWItPmFkZHJlc3Mub2Jq ZWN0SWQ7CisJCQkJCWJvb2wJCWlzbnVsbDsKKwkJCQkJSGVhcFR1cGxlCXR1cDsKKwkJCQkJRGF0 dW0JCXZhbDsKKwkJCQkJQ29uc3RyYWludCAqY29uc3RyOworCisJCQkJCUFzc2VydChJc0Eoc3Vi Y21kLT5kZWYsIENvbnN0cmFpbnQpKTsKKwkJCQkJY29uc3RyID0gY2FzdE5vZGUoQ29uc3RyYWlu dCwgc3ViY21kLT5kZWYpOworCisJCQkJCWlmICghY29uc3RyLT5za2lwX3ZhbGlkYXRpb24pCisJ CQkJCXsKKwkJCQkJCXR1cCA9IFNlYXJjaFN5c0NhY2hlMShDT05TVFJPSUQsIE9iamVjdElkR2V0 RGF0dW0oY29uc3RyT2lkKSk7CisKKwkJCQkJCWlmIChIZWFwVHVwbGVJc1ZhbGlkKHR1cCkpCisJ CQkJCQl7CisJCQkJCQkJY2hhcgkgICAqY29uYmluOworCisJCQkJCQkJLyogRmV0Y2ggY29uc3Ry YWludCBleHByZXNzaW9uIGluIHBhcnNldHJlZSBmb3JtICovCisJCQkJCQkJdmFsID0gU3lzQ2Fj aGVHZXRBdHRyKENPTlNUUk9JRCwgdHVwLAorCQkJCQkJCQkJCQkJICBBbnVtX3BnX2NvbnN0cmFp bnRfY29uYmluLCAmaXNudWxsKTsKKworCQkJCQkJCWlmICghaXNudWxsKQorCQkJCQkJCXsKKwkJ CQkJCQkJY29uYmluID0gVGV4dERhdHVtR2V0Q1N0cmluZyh2YWwpOworCQkJCQkJCQlleHBycyA9 IGxhcHBlbmQoZXhwcnMsIHN0cmluZ1RvTm9kZShjb25iaW4pKTsKKwkJCQkJCQl9CisKKwkJCQkJ CQlSZWxlYXNlU3lzQ2FjaGUodHVwKTsKKwkJCQkJCX0KKwkJCQkJfQorCisJCQkJCXRtcF9vYmog PSBuZXdfb2JqdHJlZV9WQSgiQUREIENPTlNUUkFJTlQgJXtuYW1lfUkgJXtkZWZpbml0aW9ufXMi LCAzLAorCQkJCQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJhZGQgY29uc3RyYWludCIs CisJCQkJCQkJCQkJCSJuYW1lIiwgT2JqVHlwZVN0cmluZywgZ2V0X2NvbnN0cmFpbnRfbmFtZShj b25zdHJPaWQpLAorCQkJCQkJCQkJCQkiZGVmaW5pdGlvbiIsIE9ialR5cGVTdHJpbmcsCisJCQkJ CQkJCQkJCXBnX2dldF9jb25zdHJhaW50ZGVmX2NvbW1hbmRfc2ltcGxlKGNvbnN0ck9pZCkpOwor CQkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBfb2Jq KSk7CisJCQkJfQorCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0FsdGVyQ29uc3RyYWludDoKKwkJ CQl7CisJCQkJCU9pZAkJCWNvbnN0ck9pZCA9IHN1Yi0+YWRkcmVzcy5vYmplY3RJZDsKKwkJCQkJ Q29uc3RyYWludCAqYyA9IChDb25zdHJhaW50ICopIHN1YmNtZC0+ZGVmOworCisJCQkJCS8qIElm IG5vIGNvbnN0cmFpbnQgd2FzIGFsdGVyZWQsIHNpbGVudGx5IHNraXAgaXQgKi8KKwkJCQkJaWYg KCFPaWRJc1ZhbGlkKGNvbnN0ck9pZCkpCisJCQkJCQlicmVhazsKKworCQkJCQlBc3NlcnQoSXNB KGMsIENvbnN0cmFpbnQpKTsKKwkJCQkJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBD T05TVFJBSU5UICV7bmFtZX1JICV7ZGVmZXJyYWJsZX1zICV7aW5pdF9kZWZlcnJlZH1zIiwgNCwK KwkJCQkJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiYWx0ZXIgY29uc3RyYWludCIsCisJ CQkJCQkJCQkJCSJuYW1lIiwgT2JqVHlwZVN0cmluZywgZ2V0X2NvbnN0cmFpbnRfbmFtZShjb25z dHJPaWQpLAorCQkJCQkJCQkJCQkiZGVmZXJyYWJsZSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJ CQkJCWMtPmRlZmVycmFibGUgPyAiREVGRVJSQUJMRSIgOiAiTk9UIERFRkVSUkFCTEUiLAorCQkJ CQkJCQkJCQkiaW5pdF9kZWZlcnJlZCIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCQkJCWMtPmlu aXRkZWZlcnJlZCA/ICJJTklUSUFMTFkgREVGRVJSRUQiIDogIklOSVRJQUxMWSBJTU1FRElBVEUi KTsKKworCQkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0 bXBfb2JqKSk7CisJCQkJfQorCQkJCWJyZWFrOworCisJCQljYXNlIEFUX1ZhbGlkYXRlQ29uc3Ry YWludDoKKwkJCQl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIlZBTElEQVRFIENPTlNUUkFJTlQg JXtjb25zdHJhaW50fUkiLCAyLAorCQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgInZh bGlkYXRlIGNvbnN0cmFpbnQiLAorCQkJCQkJCQkJCSJjb25zdHJhaW50IiwgT2JqVHlwZVN0cmlu Zywgc3ViY21kLT5uYW1lKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2Jq ZWN0X29iamVjdCh0bXBfb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRHJvcENvbnN0 cmFpbnQ6CisJCQkJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJEUk9QIENPTlNUUkFJTlQgJXtj b25zdHJhaW50fUkgJXtpZl9ub3RfZXhpc3RzfXMiLCAzLAorCQkJCQkJCQkJCSJ0eXBlIiwgT2Jq VHlwZVN0cmluZywgImRyb3AgY29uc3RyYWludCIsCisJCQkJCQkJCQkJImlmX25vdF9leGlzdHMi LCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJCXN1YmNtZC0+bWlzc2luZ19vayA/ICJJRiBOT1Qg RVhJU1RTIiA6ICIiLAorCQkJCQkJCQkJCSJjb25zdHJhaW50IiwgT2JqVHlwZVN0cmluZywgc3Vi Y21kLT5uYW1lKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29i amVjdCh0bXBfb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfQWx0ZXJDb2x1bW5UeXBl OgorCQkJCXsKKwkJCQkJVHVwbGVEZXNjCXR1cGRlc2MgPSBSZWxhdGlvbkdldERlc2NyKHJlbCk7 CisJCQkJCUZvcm1fcGdfYXR0cmlidXRlIGF0dDsKKwkJCQkJQ29sdW1uRGVmICAqZGVmOworCisJ CQkJCWF0dCA9ICYodHVwZGVzYy0+YXR0cnNbc3ViLT5hZGRyZXNzLm9iamVjdFN1YklkIC0gMV0p OworCQkJCQlkZWYgPSAoQ29sdW1uRGVmICopIHN1YmNtZC0+ZGVmOworCQkJCQlBc3NlcnQoSXNB KGRlZiwgQ29sdW1uRGVmKSk7CisKKwkJCQkJLyoKKwkJCQkJICogVmVyYm9zZSBzeW50YXgKKwkJ CQkJICoKKwkJCQkJICogQ29tcG9zaXRlIHR5cGVzOiBBTFRFUiByZWx0eXBlICV7Y29sdW1ufUkg U0VUIERBVEEgVFlQRQorCQkJCQkgKiAle2RhdGF0eXBlfVQgJXtjb2xsYXRpb259cyBBVFRSSUJV VEUgJXtjYXNjYWRlfXMKKwkJCQkJICoKKwkJCQkJICogTm9ybWFsIHR5cGVzOiBBTFRFUiByZWx0 eXBlICV7Y29sdW1ufUkgU0VUIERBVEEgVFlQRQorCQkJCQkgKiAle2RhdGF0eXBlfVQgJXtjb2xs YXRpb259cyBDT0xVTU4gJXt1c2luZ31zCisJCQkJCSAqLworCQkJCQl0bXBfb2JqID0gbmV3X29i anRyZWVfVkEoIkFMVEVSICV7b2JqdHlwZX1zICV7Y29sdW1ufUkgU0VUIERBVEEgVFlQRSAle2Rh dGF0eXBlfVQiLCA0LAorCQkJCQkJCQkJCQkib2JqdHlwZSIsIE9ialR5cGVTdHJpbmcsCisJCQkJ CQkJCQkJCWlzdHlwZSA/ICJBVFRSSUJVVEUiIDogIkNPTFVNTiIsCisJCQkJCQkJCQkJCSJ0eXBl IiwgT2JqVHlwZVN0cmluZywgImFsdGVyIGNvbHVtbiB0eXBlIiwKKwkJCQkJCQkJCQkJImNvbHVt biIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSwKKwkJCQkJCQkJCQkJImRhdGF0eXBlIiwg T2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJCQkJbmV3X29ianRyZWVfZm9yX3R5cGUoYXR0LT5hdHR0 eXBpZCwKKwkJCQkJCQkJCQkJCQkJCQkgYXR0LT5hdHR0eXBtb2QpKTsKKworCQkJCQkvKiBBZGQg YSBDT0xMQVRFIGNsYXVzZSwgaWYgbmVlZGVkICovCisJCQkJCXRtcF9vYmoyID0gbmV3X29ianRy ZWUoIkNPTExBVEUiKTsKKwkJCQkJaWYgKE9pZElzVmFsaWQoYXR0LT5hdHRjb2xsYXRpb24pKQor CQkJCQl7CisJCQkJCQlPYmpUcmVlICAgICpjb2xsbmFtZTsKKworCQkJCQkJY29sbG5hbWUgPSBu ZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoQ29sbGF0aW9uUmVsYXRpb25JZCwKKwkJCQkJCQkJ CQkJCQkJCSAgIGF0dC0+YXR0Y29sbGF0aW9uKTsKKwkJCQkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0 KHRtcF9vYmoyLCAiJXtuYW1lfUQiLCBjb2xsbmFtZSk7CisJCQkJCX0KKwkJCQkJZWxzZQorCQkJ CQkJYXBwZW5kX25vdF9wcmVzZW50KHRtcF9vYmoyKTsKKwkJCQkJYXBwZW5kX29iamVjdF9vYmpl Y3QodG1wX29iaiwgIiV7Y29sbGF0aW9ufXMiLCB0bXBfb2JqMik7CisKKwkJCQkJLyogSWYgbm90 IGEgY29tcG9zaXRlIHR5cGUsIGFkZCB0aGUgVVNJTkcgY2xhdXNlICovCisJCQkJCWlmICghaXN0 eXBlKQorCQkJCQl7CisJCQkJCQkvKgorCQkJCQkJICogSWYgdGhlcmUncyBhIFVTSU5HIGNsYXVz ZSwgdHJhbnNmb3JtQWx0ZXJUYWJsZVN0bXQKKwkJCQkJCSAqIHJhbiBpdCB0aHJvdWdoIHRyYW5z Zm9ybUV4cHIgYW5kIHN0b3JlZCB0aGUKKwkJCQkJCSAqIHJlc3VsdGluZyBub2RlIGluIGNvb2tl ZF9kZWZhdWx0LCB3aGljaCB3ZSBjYW4gdXNlCisJCQkJCQkgKiBoZXJlLgorCQkJCQkJICovCisJ CQkJCQl0bXBfb2JqMiA9IG5ld19vYmp0cmVlKCJVU0lORyIpOworCQkJCQkJaWYgKGRlZi0+cmF3 X2RlZmF1bHQpCisJCQkJCQkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wX29iajIsICIle2V4cHJl c3Npb259cyIsCisJCQkJCQkJCQkJCQkgImV4cHJlc3Npb24iLAorCQkJCQkJCQkJCQkJIHN1Yi0+ dXNpbmdleHByKTsKKwkJCQkJCWVsc2UKKwkJCQkJCQlhcHBlbmRfbm90X3ByZXNlbnQodG1wX29i ajIpOworCQkJCQkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wX29iaiwgIiV7dXNpbmd9cyIsIHRt cF9vYmoyKTsKKwkJCQkJfQorCisJCQkJCS8qIElmIGl0J3MgYSBjb21wb3NpdGUgdHlwZSwgYWRk IHRoZSBDQVNDQURFIGNsYXVzZSAqLworCQkJCQlpZiAoaXN0eXBlKQorCQkJCQl7CisJCQkJCQl0 bXBfb2JqMiA9IG5ld19vYmp0cmVlKCJDQVNDQURFIik7CisJCQkJCQlpZiAoc3ViY21kLT5iZWhh dmlvciAhPSBEUk9QX0NBU0NBREUpCisJCQkJCQkJYXBwZW5kX25vdF9wcmVzZW50KHRtcF9vYmoy KTsKKwkJCQkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcF9vYmosICIle2Nhc2NhZGV9cyIsIHRt cF9vYmoyKTsKKwkJCQkJfQorCisJCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19v YmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKwkJCQl9CisJCQkJYnJlYWs7CisKKyNpZmRlZiBUT0RP TElTVAorCQkJY2FzZSBBVF9BbHRlckNvbHVtbkdlbmVyaWNPcHRpb25zOgorCQkJCXRtcF9vYmog PSBkZXBhcnNlX0Zkd09wdGlvbnMoKExpc3QgKikgc3ViY21kLT5kZWYsCisJCQkJCQkJCQkJCXN1 YmNtZC0+bmFtZSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9v YmplY3QodG1wX29iaikpOworCQkJCWJyZWFrOworI2VuZGlmCisJCQljYXNlIEFUX0NoYW5nZU93 bmVyOgorCQkJCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiT1dORVIgVE8gJXtvd25lcn1JIiwg MiwKKwkJCQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJjaGFuZ2Ugb3duZXIiLAorCQkJ CQkJCQkJCSJvd25lciIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCQkJZ2V0X3JvbGVzcGVjX25h bWUoc3ViY21kLT5uZXdvd25lcikpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5l d19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9DbHVz dGVyT246CisJCQkJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJDTFVTVEVSIE9OICV7aW5kZXh9 SSIsIDIsCisJCQkJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiY2x1c3RlciBvbiIsCisJ CQkJCQkJCQkJImluZGV4IiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lKTsKKwkJCQlzdWJj bWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBfb2JqKSk7CisJCQkJ YnJlYWs7CisKKwkJCWNhc2UgQVRfRHJvcENsdXN0ZXI6CisJCQkJdG1wX29iaiA9IG5ld19vYmp0 cmVlX1ZBKCJTRVQgV0lUSE9VVCBDTFVTVEVSIiwgMSwKKwkJCQkJCQkJCQkidHlwZSIsIE9ialR5 cGVTdHJpbmcsICJzZXQgd2l0aG91dCBjbHVzdGVyIik7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQo c3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wX29iaikpOworCQkJCWJyZWFrOworCisJCQlj YXNlIEFUX1NldExvZ2dlZDoKKwkJCQl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIlNFVCBMT0dH RUQiLCAxLAorCQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgInNldCBsb2dnZWQiKTsK KwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBfb2Jq KSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfU2V0VW5Mb2dnZWQ6CisJCQkJdG1wX29iaiA9 IG5ld19vYmp0cmVlX1ZBKCJTRVQgVU5MT0dHRUQiLCAxLAorCQkJCQkJCQkJCSJ0eXBlIiwgT2Jq VHlwZVN0cmluZywgInNldCB1bmxvZ2dlZCIpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNt ZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBB VF9Ecm9wT2lkczoKKwkJCQl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIlNFVCBXSVRIT1VUIE9J RFMiLCAxLAorCQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgInNldCB3aXRob3V0IG9p ZHMiKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0 bXBfb2JqKSk7CisJCQkJYnJlYWs7CisJCQljYXNlIEFUX1NldEFjY2Vzc01ldGhvZDoKKwkJCQl0 bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIlNFVCBBQ0NFU1MgTUVUSE9EICV7YWNjZXNzX21ldGhv ZH1JIiwgMiwKKwkJCQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJzZXQgYWNjZXNzIG1l dGhvZCIsCisJCQkJCQkJCQkJImFjY2Vzc19tZXRob2QiLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQt Pm5hbWUpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0 KHRtcF9vYmopKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgQVRfU2V0VGFibGVTcGFjZToKKwkJCQl0 bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIlNFVCBUQUJMRVNQQUNFICV7dGFibGVzcGFjZX1JIiwg MiwKKwkJCQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJzZXQgdGFibGVzcGFjZSIsCisJ CQkJCQkJCQkJInRhYmxlc3BhY2UiLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCQkJ CXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsK KwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9TZXRSZWxPcHRpb25zOgorCQkJY2FzZSBBVF9SZXNl dFJlbE9wdGlvbnM6CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9v YmplY3QoCisJCQkJCQkJCQkJCQkJCQkgZGVwYXJzZV9SZWxTZXRPcHRpb25zKHN1YmNtZCkpKTsK KwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9FbmFibGVUcmlnOgorCQkJCXRtcF9vYmogPSBuZXdf b2JqdHJlZV9WQSgiRU5BQkxFIFRSSUdHRVIgJXt0cmlnZ2VyfUkiLCAyLAorCQkJCQkJCQkJCSJ0 eXBlIiwgT2JqVHlwZVN0cmluZywgImVuYWJsZSB0cmlnZ2VyIiwKKwkJCQkJCQkJCQkidHJpZ2dl ciIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQo c3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wX29iaikpOworCQkJCWJyZWFrOworCisJCQlj YXNlIEFUX0VuYWJsZUFsd2F5c1RyaWc6CisJCQkJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJF TkFCTEUgQUxXQVlTIFRSSUdHRVIgJXt0cmlnZ2VyfUkiLCAyLAorCQkJCQkJCQkJCSJ0eXBlIiwg T2JqVHlwZVN0cmluZywgImVuYWJsZSBhbHdheXMgdHJpZ2dlciIsCisJCQkJCQkJCQkJInRyaWdn ZXIiLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5k KHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKwkJCQlicmVhazsKKworCQkJ Y2FzZSBBVF9FbmFibGVSZXBsaWNhVHJpZzoKKwkJCQl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEo IkVOQUJMRSBSRVBMSUNBIFRSSUdHRVIgJXt0cmlnZ2VyfUkiLCAyLAorCQkJCQkJCQkJCSJ0eXBl IiwgT2JqVHlwZVN0cmluZywgImVuYWJsZSByZXBsaWNhIHRyaWdnZXIiLAorCQkJCQkJCQkJCSJ0 cmlnZ2VyIiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lKTsKKwkJCQlzdWJjbWRzID0gbGFw cGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBfb2JqKSk7CisJCQkJYnJlYWs7CisK KwkJCWNhc2UgQVRfRGlzYWJsZVRyaWc6CisJCQkJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJE SVNBQkxFIFRSSUdHRVIgJXt0cmlnZ2VyfUkiLCAyLAorCQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlw ZVN0cmluZywgImRpc2FibGUgdHJpZ2dlciIsCisJCQkJCQkJCQkJInRyaWdnZXIiLCBPYmpUeXBl U3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5l d19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9FbmFi bGVUcmlnQWxsOgorCQkJCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiRU5BQkxFIFRSSUdHRVIg QUxMIiwgMSwKKwkJCQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJlbmFibGUgdHJpZ2dl ciBhbGwiKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVj dCh0bXBfb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRGlzYWJsZVRyaWdBbGw6CisJ CQkJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJESVNBQkxFIFRSSUdHRVIgQUxMIiwgMSwKKwkJ CQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJkaXNhYmxlIHRyaWdnZXIgYWxsIik7CisJ CQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wX29iaikp OworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0VuYWJsZVRyaWdVc2VyOgorCQkJCXRtcF9vYmog PSBuZXdfb2JqdHJlZV9WQSgiRU5BQkxFIFRSSUdHRVIgVVNFUiIsIDEsCisJCQkJCQkJCQkJInR5 cGUiLCBPYmpUeXBlU3RyaW5nLCAiZW5hYmxlIHRyaWdnZXIgdXNlciIpOworCQkJCXN1YmNtZHMg PSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKwkJCQlicmVh azsKKworCQkJY2FzZSBBVF9EaXNhYmxlVHJpZ1VzZXI6CisJCQkJdG1wX29iaiA9IG5ld19vYmp0 cmVlX1ZBKCJESVNBQkxFIFRSSUdHRVIgVVNFUiIsIDEsCisJCQkJCQkJCQkJInR5cGUiLCBPYmpU eXBlU3RyaW5nLCAiZGlzYWJsZSB0cmlnZ2VyIHVzZXIiKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVu ZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBfb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJ CWNhc2UgQVRfRW5hYmxlUnVsZToKKwkJCQl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIkVOQUJM RSBSVUxFICV7cnVsZX1JIiwgMiwKKwkJCQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJl bmFibGUgcnVsZSIsCisJCQkJCQkJCQkJInJ1bGUiLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5h bWUpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRt cF9vYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9FbmFibGVBbHdheXNSdWxlOgorCQkJ CXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiRU5BQkxFIEFMV0FZUyBSVUxFICV7cnVsZX1JIiwg MiwKKwkJCQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJlbmFibGUgYWx3YXlzIHJ1bGUi LAorCQkJCQkJCQkJCSJydWxlIiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lKTsKKwkJCQlz dWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBfb2JqKSk7CisJ CQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRW5hYmxlUmVwbGljYVJ1bGU6CisJCQkJdG1wX29iaiA9 IG5ld19vYmp0cmVlX1ZBKCJFTkFCTEUgUkVQTElDQSBSVUxFICV7cnVsZX1JIiwgMiwKKwkJCQkJ CQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJlbmFibGUgcmVwbGljYSBydWxlIiwKKwkJCQkJ CQkJCQkicnVsZSIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisJCQkJc3ViY21kcyA9 IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wX29iaikpOworCQkJCWJyZWFr OworCisJCQljYXNlIEFUX0Rpc2FibGVSdWxlOgorCQkJCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9W QSgiRElTQUJMRSBSVUxFICV7cnVsZX1JIiwgMiwKKwkJCQkJCQkJCQkidHlwZSIsIE9ialR5cGVT dHJpbmcsICJkaXNhYmxlIHJ1bGUiLAorCQkJCQkJCQkJCSJydWxlIiwgT2JqVHlwZVN0cmluZywg c3ViY21kLT5uYW1lKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0 X29iamVjdCh0bXBfb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfQWRkSW5oZXJpdDoK KwkJCQl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIklOSEVSSVQgJXtwYXJlbnR9RCIsIDIsCisJ CQkJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiaW5oZXJpdCIsCisJCQkJCQkJCQkJInBh cmVudCIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJCQkJbmV3X29ianRyZWVfZm9yX3F1YWxuYW1l X2lkKFJlbGF0aW9uUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJCQkJc3ViLT5hZGRyZXNzLm9i amVjdElkKSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmpl Y3QodG1wX29iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0Ryb3BJbmhlcml0OgorCQkJ CXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiTk8gSU5IRVJJVCAle3BhcmVudH1EIiwgMiwKKwkJ CQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJkcm9wIGluaGVyaXQiLAorCQkJCQkJCQkJ CSJwYXJlbnQiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCQkJCW5ld19vYmp0cmVlX2Zvcl9xdWFs bmFtZV9pZChSZWxhdGlvblJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCQkJCXN1Yi0+YWRkcmVz cy5vYmplY3RJZCkpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rf b2JqZWN0KHRtcF9vYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9BZGRPZjoKKwkJCQl0 bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIk9GICV7dHlwZV9vZn1UIiwgMiwKKwkJCQkJCQkJCQki dHlwZSIsIE9ialR5cGVTdHJpbmcsICJhZGQgb2YiLAorCQkJCQkJCQkJCSJ0eXBlX29mIiwgT2Jq VHlwZU9iamVjdCwKKwkJCQkJCQkJCQluZXdfb2JqdHJlZV9mb3JfdHlwZShzdWItPmFkZHJlc3Mu b2JqZWN0SWQsIC0xKSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVj dF9vYmplY3QodG1wX29iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0Ryb3BPZjoKKwkJ CQl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIk5PVCBPRiIsIDEsCisJCQkJCQkJCQkJInR5cGUi LCBPYmpUeXBlU3RyaW5nLCAibm90IG9mIik7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21k cywgbmV3X29iamVjdF9vYmplY3QodG1wX29iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFU X1JlcGxpY2FJZGVudGl0eToKKwkJCQl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIlJFUExJQ0Eg SURFTlRJVFkiLCAxLAorCQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgInJlcGxpY2Eg aWRlbnRpdHkiKTsKKwkJCQlzd2l0Y2ggKCgoUmVwbGljYUlkZW50aXR5U3RtdCAqKSBzdWJjbWQt PmRlZiktPmlkZW50aXR5X3R5cGUpCisJCQkJeworCQkJCQljYXNlIFJFUExJQ0FfSURFTlRJVFlf REVGQVVMVDoKKwkJCQkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcF9vYmosICIle2lkZW50fXMi LCAiaWRlbnQiLAorCQkJCQkJCQkJCQkgIkRFRkFVTFQiKTsKKwkJCQkJCWJyZWFrOworCQkJCQlj YXNlIFJFUExJQ0FfSURFTlRJVFlfRlVMTDoKKwkJCQkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRt cF9vYmosICIle2lkZW50fXMiLCAiaWRlbnQiLAorCQkJCQkJCQkJCQkgIkZVTEwiKTsKKwkJCQkJ CWJyZWFrOworCQkJCQljYXNlIFJFUExJQ0FfSURFTlRJVFlfTk9USElORzoKKwkJCQkJCWFwcGVu ZF9zdHJpbmdfb2JqZWN0KHRtcF9vYmosICIle2lkZW50fXMiLCAiaWRlbnQiLAorCQkJCQkJCQkJ CQkgIk5PVEhJTkciKTsKKwkJCQkJCWJyZWFrOworCQkJCQljYXNlIFJFUExJQ0FfSURFTlRJVFlf SU5ERVg6CisJCQkJCQl0bXBfb2JqMiA9IG5ld19vYmp0cmVlX1ZBKCJVU0lORyBJTkRFWCAle2lu ZGV4fUkiLCAxLAorCQkJCQkJCQkJCQkJICJpbmRleCIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJ CQkJCQkgKChSZXBsaWNhSWRlbnRpdHlTdG10ICopIHN1YmNtZC0+ZGVmKS0+bmFtZSk7CisJCQkJ CQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBfb2JqLCAiJXtpZGVudH1zIiwgdG1wX29iajIpOwor CQkJCQkJYnJlYWs7CisJCQkJfQorCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19v YmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9FbmFibGVS b3dTZWN1cml0eToKKwkJCQl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIkVOQUJMRSBST1cgTEVW RUwgU0VDVVJJVFkiLCAxLAorCQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImVuYWJs ZSByb3cgc2VjdXJpdHkiKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2Jq ZWN0X29iamVjdCh0bXBfb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRGlzYWJsZVJv d1NlY3VyaXR5OgorCQkJCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiRElTQUJMRSBST1cgTEVW RUwgU0VDVVJJVFkiLCAxLAorCQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImRpc2Fi bGUgcm93IHNlY3VyaXR5Iik7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29i amVjdF9vYmplY3QodG1wX29iaikpOworCQkJCWJyZWFrOworI2lmZGVmIFRPRE9MSVNUCisJCQlj YXNlIEFUX0dlbmVyaWNPcHRpb25zOgorCQkJCXRtcF9vYmogPSBkZXBhcnNlX0Zkd09wdGlvbnMo KExpc3QgKikgc3ViY21kLT5kZWYsIE5VTEwpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNt ZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKwkJCQlicmVhazsKKyNlbmRpZgorCQkJ Y2FzZSBBVF9BdHRhY2hQYXJ0aXRpb246CisJCQkJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJB VFRBQ0ggUEFSVElUSU9OICV7cGFydGl0aW9uX2lkZW50aXR5fUQiLCAyLAorCQkJCQkJCQkJCSJ0 eXBlIiwgT2JqVHlwZVN0cmluZywgImF0dGFjaCBwYXJ0aXRpb24iLAorCQkJCQkJCQkJCSJwYXJ0 aXRpb25faWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCQkJCW5ld19vYmp0cmVlX2Zv cl9xdWFsbmFtZV9pZChSZWxhdGlvblJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCQkJCXN1Yi0+ YWRkcmVzcy5vYmplY3RJZCkpOworCisJCQkJaWYgKHJlbC0+cmRfcmVsLT5yZWxraW5kID09IFJF TEtJTkRfUEFSVElUSU9ORURfVEFCTEUpCisJCQkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcF9v YmosICIle3BhcnRpdGlvbl9ib3VuZH1zIiwKKwkJCQkJCQkJCQkgInBhcnRpdGlvbl9ib3VuZCIs CisJCQkJCQkJCQkJIFJlbGF0aW9uR2V0UGFydGl0aW9uQm91bmQoc3ViLT5hZGRyZXNzLm9iamVj dElkKSk7CisKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVj dCh0bXBfb2JqKSk7CisJCQkJYnJlYWs7CisJCQljYXNlIEFUX0RldGFjaFBhcnRpdGlvbjoKKwkJ CXsKKwkJCQlQYXJ0aXRpb25DbWQgKmNtZDsKKworCQkJCUFzc2VydChJc0Eoc3ViY21kLT5kZWYs IFBhcnRpdGlvbkNtZCkpOworCQkJCWNtZCA9IChQYXJ0aXRpb25DbWQgKikgc3ViY21kLT5kZWY7 CisKKwkJCQl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIkRFVEFDSCBQQVJUSVRJT04gJXtwYXJ0 aXRpb25faWRlbnRpdHl9RCAle2NvbmN1cnJlbnR9cyIsIDMsCisJCQkJCQkJCQkJInR5cGUiLCBP YmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJCSJkZXRhY2ggcGFydGl0aW9uIiwKKwkJCQkJCQkJCQki cGFydGl0aW9uX2lkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJCQluZXdfb2JqdHJl ZV9mb3JfcXVhbG5hbWVfaWQoUmVsYXRpb25SZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkJCQlz dWItPmFkZHJlc3Mub2JqZWN0SWQpLAorCQkJCQkJCQkJCWNtZC0+Y29uY3VycmVudCA/ICJDT05D VVJSRU5UTFkiIDogIiIpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmpl Y3Rfb2JqZWN0KHRtcF9vYmopKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWNhc2UgQVRfRGV0YWNo UGFydGl0aW9uRmluYWxpemU6CisJCQkJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJERVRBQ0gg UEFSVElUSU9OICV7cGFydGl0aW9uX2lkZW50aXR5fUQgRklOQUxJWkUiLCAyLAorCQkJCQkJCQkJ CSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImRldGFjaCBwYXJ0aXRpb24gZmluYWxpemUiLAorCQkJ CQkJCQkJCSJwYXJ0aXRpb25faWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCQkJCW5l d19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChSZWxhdGlvblJlbGF0aW9uSWQsCisJCQkJCQkJCQkJ CQkJCQkJCXN1Yi0+YWRkcmVzcy5vYmplY3RJZCkpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1 YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKwkJCQlicmVhazsKKwkJCWNhc2Ug QVRfQWRkSWRlbnRpdHk6CisJCQkJeworCQkJCQlBdHRyTnVtYmVyCWF0dG51bTsKKwkJCQkJT2lk CQkJc2VxX3JlbGlkOworCQkJCQlPYmpUcmVlICAgICpzZXFkZWY7CisJCQkJCUNvbHVtbkRlZiAg KmNvbGRlZiA9IChDb2x1bW5EZWYgKikgc3ViY21kLT5kZWY7CisKKwkJCQkJdG1wX29iaiA9IG5l d19vYmp0cmVlX1ZBKCJBTFRFUiBDT0xVTU4gJXtjb2x1bW59SSIsIDIsCisJCQkJCQkJCQkJCSJ0 eXBlIiwgT2JqVHlwZVN0cmluZywgImFkZCBpZGVudGl0eSIsCisJCQkJCQkJCQkJCSJjb2x1bW4i LCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCisJCQkJCWF0dG51bSA9IGdldF9hdHRu dW0oUmVsYXRpb25HZXRSZWxpZChyZWwpLCBzdWJjbWQtPm5hbWUpOworCQkJCQlzZXFfcmVsaWQg PSBnZXRJZGVudGl0eVNlcXVlbmNlKFJlbGF0aW9uR2V0UmVsaWQocmVsKSwgYXR0bnVtLCB0cnVl KTsKKworCQkJCQlpZiAoT2lkSXNWYWxpZChzZXFfcmVsaWQpKQorCQkJCQl7CisJCQkJCQlzZXFk ZWYgPSBkZXBhcnNlX0NvbHVtbklkZW50aXR5KHNlcV9yZWxpZCwgY29sZGVmLT5pZGVudGl0eSwg ZmFsc2UpOworCQkJCQkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wX29iaiwgIkFERCAle2lkZW50 aXR5X2NvbHVtbn1zIiwgc2VxZGVmKTsKKwkJCQkJfQorCisJCQkJCXN1YmNtZHMgPSBsYXBwZW5k KHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKwkJCQl9CisJCQkJYnJlYWs7 CisJCQljYXNlIEFUX1NldElkZW50aXR5OgorCQkJCXsKKwkJCQkJRGVmRWxlbSAgICAqZGVmZWw7 CisJCQkJCWNoYXIJCWlkZW50aXR5ID0gMDsKKwkJCQkJT2JqVHJlZSAgICAqc2VxZGVmOworCQkJ CQlBdHRyTnVtYmVyCWF0dG51bTsKKwkJCQkJT2lkCQkJc2VxX3JlbGlkOworCisKKwkJCQkJdG1w X29iaiA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBDT0xVTU4gJXtjb2x1bW59SSIsIDIsCisJCQkJ CQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgInNldCBpZGVudGl0eSIsCisJCQkJCQkJCQkJ CSJjb2x1bW4iLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCisJCQkJCWlmIChzdWJj bWQtPmRlZikKKwkJCQkJeworCQkJCQkJTGlzdAkgICAqZGVmID0gKExpc3QgKikgc3ViY21kLT5k ZWY7CisKKwkJCQkJCUFzc2VydChJc0Eoc3ViY21kLT5kZWYsIExpc3QpKTsKKworCQkJCQkJZGVm ZWwgPSBsaW5pdGlhbF9ub2RlKERlZkVsZW0sIGRlZik7CisJCQkJCQlpZGVudGl0eSA9IGRlZkdl dEludDMyKGRlZmVsKTsKKwkJCQkJfQorCisJCQkJCWF0dG51bSA9IGdldF9hdHRudW0oUmVsYXRp b25HZXRSZWxpZChyZWwpLCBzdWJjbWQtPm5hbWUpOworCQkJCQlzZXFfcmVsaWQgPSBnZXRJZGVu dGl0eVNlcXVlbmNlKFJlbGF0aW9uR2V0UmVsaWQocmVsKSwgYXR0bnVtLCB0cnVlKTsKKworCQkJ CQlpZiAoT2lkSXNWYWxpZChzZXFfcmVsaWQpKQorCQkJCQl7CisJCQkJCQlzZXFkZWYgPSBkZXBh cnNlX0NvbHVtbklkZW50aXR5KHNlcV9yZWxpZCwgaWRlbnRpdHksIHRydWUpOworCQkJCQkJYXBw ZW5kX29iamVjdF9vYmplY3QodG1wX29iaiwgIiV7ZGVmaW5pdGlvbn1zIiwgc2VxZGVmKTsKKwkJ CQkJfQorCisJCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0 KHRtcF9vYmopKTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJY2FzZSBBVF9Ecm9wSWRlbnRpdHk6 CisJCQkJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBDT0xVTU4gJXtjb2x1bW59SSBE Uk9QIElERU5USVRZIiwgMiwKKwkJCQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJkcm9w IGlkZW50aXR5IiwKKwkJCQkJCQkJCQkiY29sdW1uIiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5u YW1lKTsKKworCQkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcF9vYmosICIle2lmX2V4aXN0c31z IiwKKwkJCQkJCQkJCSAiaWZfZXhpc3RzIiwKKwkJCQkJCQkJCSBzdWJjbWQtPm1pc3Npbmdfb2sg PyAiSUYgRVhJU1RTIiA6ICIiKTsKKworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5l d19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJ ZWxvZyhXQVJOSU5HLCAidW5zdXBwb3J0ZWQgYWx0ZXIgdGFibGUgc3VidHlwZSAlZCIsCisJCQkJ CSBzdWJjbWQtPnN1YnR5cGUpOworCQkJCWJyZWFrOworCQl9CisKKwkJLyoKKwkJICogV2UgZG9u J3Qgc3VwcG9ydCByZXBsaWNhdGluZyBBTFRFUiBUQUJMRSB3aGljaCBjb250YWlucyB2b2xhdGls ZQorCQkgKiBmdW5jdGlvbnMgYmVjYXVzZSBJdCdzIHBvc3NpYmxlIHRoZSBmdW5jdGlvbnMgY29u dGFpbiBEREwvRE1MIGluCisJCSAqIHdoaWNoIGNhc2UgdGhlc2Ugb3BlcmF0aW9ucyB3aWxsIGJl IGV4ZWN1dGVkIHR3aWNlIGFuZCBjYXVzZQorCQkgKiBkdXBsaWNhdGUgZGF0YS4gSW4gYWRkaXRp b24sIHdlIGRvbid0IGtub3cgd2hldGhlciB0aGUgdGFibGVzIGJlaW5nCisJCSAqIGFjY2Vzc2Vk IGJ5IHRoZXNlIERETC9ETUwgYXJlIHB1Ymxpc2hlZCBvciBub3QuIFNvIGJsaW5kbHkgYWxsb3dp bmcKKwkJICogc3VjaCBmdW5jdGlvbnMgY2FuIGFsbG93IHVuaW50ZW5kZWQgY2xhdXNlcyBsaWtl IHRoZSB0YWJsZXMKKwkJICogYWNjZXNzZWQgaW4gdGhvc2UgZnVuY3Rpb25zIG1heSBub3QgZXZl biBleGlzdCBvbiB0aGUgc3Vic2NyaWJlci4KKwkJICovCisJCWlmIChjb250YWluX3ZvbGF0aWxl X2Z1bmN0aW9ucygoTm9kZSAqKSBleHBycykpCisJCQllbG9nKEVSUk9SLCAiQUxURVIgVEFCTEUg Y29tbWFuZCB1c2luZyB2b2xhdGlsZSBmdW5jdGlvbiBjYW5ub3QgYmUgcmVwbGljYXRlZCIpOwor CisJCS8qCisJCSAqIENsZWFuIHRoZSBsaXN0IGFzIHdlIGFscmVhZHkgY29uZmlybWVkIHRoZXJl IGlzIG5vIHZvbGF0aWxlCisJCSAqIGZ1bmN0aW9uLgorCQkgKi8KKwkJbGlzdF9mcmVlKGV4cHJz KTsKKwkJZXhwcnMgPSBOSUw7CisJfQorCisJdGFibGVfY2xvc2UocmVsLCBBY2Nlc3NTaGFyZUxv Y2spOworCisJaWYgKGxpc3RfbGVuZ3RoKHN1YmNtZHMpID09IDApCisJCXJldHVybiBOVUxMOwor CisJYXBwZW5kX2FycmF5X29iamVjdChyZXQsICIle3N1YmNtZHM6LCB9cyIsIHN1YmNtZHMpOwor CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIEhhbmRsZSBkZXBhcnNpbmcgb2YgRFJPUCBjb21t YW5kcy4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogRFJPUCAlcyBJRiBFWElTVFMgJSV7b2Jq aWRlbnRpdHl9cyAle2Nhc2NhZGV9cworICovCitjaGFyICoKK2RlcGFyc2VfZHJvcF9jb21tYW5k KGNvbnN0IGNoYXIgKm9iamlkZW50aXR5LCBjb25zdCBjaGFyICpvYmplY3R0eXBlLAorCQkJCQkg RHJvcEJlaGF2aW9yIGJlaGF2aW9yKQoreworCVN0cmluZ0luZm9EYXRhIHN0cjsKKwljaGFyCSAg ICpjb21tYW5kOworCWNoYXIJICAgKmlkZW50aXR5ID0gKGNoYXIgKikgb2JqaWRlbnRpdHk7CisJ T2JqVHJlZSAgICAqc3RtdDsKKwlPYmpUcmVlICAgICp0bXBfb2JqOworCUpzb25iCSAgICpqc29u YjsKKworCWluaXRTdHJpbmdJbmZvKCZzdHIpOworCisJc3RtdCA9IG5ld19vYmp0cmVlX1ZBKCJE Uk9QICV7b2JqdHlwZX1zIElGIEVYSVNUUyAle29iamlkZW50aXR5fXMiLCAyLAorCQkJCQkJICAi b2JqdHlwZSIsIE9ialR5cGVTdHJpbmcsIG9iamVjdHR5cGUsCisJCQkJCQkgICJvYmppZGVudGl0 eSIsIE9ialR5cGVTdHJpbmcsIGlkZW50aXR5KTsKKworCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9W QSgiQ0FTQ0FERSIsIDEsCisJCQkJCQkJInByZXNlbnQiLCBPYmpUeXBlQm9vbCwgYmVoYXZpb3Ig PT0gRFJPUF9DQVNDQURFKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdChzdG10LCAiJXtjYXNjYWRl fXMiLCB0bXBfb2JqKTsKKworCWpzb25iID0gb2JqdHJlZV90b19qc29uYihzdG10KTsKKwljb21t YW5kID0gSnNvbmJUb0NTdHJpbmcoJnN0ciwgJmpzb25iLT5yb290LCBKU09OQl9FU1RJTUFURURf TEVOKTsKKworCXJldHVybiBjb21tYW5kOworfQorCisvKgorICogSGFuZGxlIGRlcGFyc2luZyBv ZiBzaW1wbGUgY29tbWFuZHMuCisgKgorICogVGhpcyBmdW5jdGlvbiBzaG91bGQgY292ZXIgYWxs IGNhc2VzIGhhbmRsZWQgaW4gUHJvY2Vzc1V0aWxpdHlTbG93LgorICovCitzdGF0aWMgT2JqVHJl ZSAqCitkZXBhcnNlX3NpbXBsZV9jb21tYW5kKENvbGxlY3RlZENvbW1hbmQgKmNtZCkKK3sKKwlP aWQJCQlvYmplY3RJZDsKKwlOb2RlCSAgICpwYXJzZXRyZWU7CisKKwlBc3NlcnQoY21kLT50eXBl ID09IFNDVF9TaW1wbGUpOworCisJcGFyc2V0cmVlID0gY21kLT5wYXJzZXRyZWU7CisJb2JqZWN0 SWQgPSBjbWQtPmQuc2ltcGxlLmFkZHJlc3Mub2JqZWN0SWQ7CisKKwlpZiAoY21kLT5pbl9leHRl bnNpb24gJiYgKG5vZGVUYWcocGFyc2V0cmVlKSAhPSBUX0NyZWF0ZUV4dGVuc2lvblN0bXQpKQor CQlyZXR1cm4gTlVMTDsKKworCS8qIFRoaXMgc3dpdGNoIG5lZWRzIHRvIGhhbmRsZSBldmVyeXRo aW5nIHRoYXQgUHJvY2Vzc1V0aWxpdHlTbG93IGRvZXMgKi8KKwlzd2l0Y2ggKG5vZGVUYWcocGFy c2V0cmVlKSkKKwl7CisJCWNhc2UgVF9DcmVhdGVTZXFTdG10OgorCQkJcmV0dXJuIGRlcGFyc2Vf Q3JlYXRlU2VxU3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKworCQljYXNlIFRfQ3JlYXRlU3Rt dDoKKwkJCXJldHVybiBkZXBhcnNlX0NyZWF0ZVN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisK KwkJY2FzZSBUX0luZGV4U3RtdDoKKwkJCXJldHVybiBkZXBhcnNlX0luZGV4U3RtdChvYmplY3RJ ZCwgcGFyc2V0cmVlKTsKKworCQlkZWZhdWx0OgorCQkJZWxvZyhMT0csICJ1bnJlY29nbml6ZWQg bm9kZSB0eXBlIGluIGRlcGFyc2UgY29tbWFuZDogJWQiLAorCQkJCSAoaW50KSBub2RlVGFnKHBh cnNldHJlZSkpOworCX0KKworCXJldHVybiBOVUxMOworfQorCisvKgorICogV29ya2hvcnNlIHRv IGRlcGFyc2UgYSBDb2xsZWN0ZWRDb21tYW5kLgorICovCitjaGFyICoKK2RlcGFyc2VfdXRpbGl0 eV9jb21tYW5kKENvbGxlY3RlZENvbW1hbmQgKmNtZCwgYm9vbCB2ZXJib3NlX21vZGUpCit7CisJ T3ZlcnJpZGVTZWFyY2hQYXRoICpvdmVycmlkZVBhdGg7CisJTWVtb3J5Q29udGV4dCBvbGRjeHQ7 CisJTWVtb3J5Q29udGV4dCB0bXBjeHQ7CisJT2JqVHJlZSAgICAqdHJlZTsKKwljaGFyCSAgICpj b21tYW5kID0gTlVMTDsKKwlTdHJpbmdJbmZvRGF0YSBzdHI7CisKKwkvKgorCSAqIEFsbG9jYXRl IGV2ZXJ5dGhpbmcgZG9uZSBieSB0aGUgZGVwYXJzaW5nIHJvdXRpbmVzIGludG8gYSB0ZW1wIGNv bnRleHQsCisJICogdG8gYXZvaWQgaGF2aW5nIHRvIHNwcmlua2xlIHRoZW0gd2l0aCBtZW1vcnkg aGFuZGxpbmcgY29kZSwgYnV0CisJICogYWxsb2NhdGUgdGhlIG91dHB1dCBTdHJpbmdJbmZvIGJl Zm9yZSBzd2l0Y2hpbmcuCisJICovCisJaW5pdFN0cmluZ0luZm8oJnN0cik7CisJdG1wY3h0ID0g QWxsb2NTZXRDb250ZXh0Q3JlYXRlKEN1cnJlbnRNZW1vcnlDb250ZXh0LAorCQkJCQkJCQkgICAi ZGVwYXJzZSBjdHgiLAorCQkJCQkJCQkgICBBTExPQ1NFVF9ERUZBVUxUX01JTlNJWkUsCisJCQkJ CQkJCSAgIEFMTE9DU0VUX0RFRkFVTFRfSU5JVFNJWkUsCisJCQkJCQkJCSAgIEFMTE9DU0VUX0RF RkFVTFRfTUFYU0laRSk7CisJb2xkY3h0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKHRtcGN4dCk7 CisKKwkvKgorCSAqIE1hbnkgcm91dGluZXMgdW5kZXJseWluZyB0aGlzIG9uZSB3aWxsIGludm9r ZSBydWxldXRpbHMuYyBmdW5jdGlvbmFsaXR5CisJICogdG8gb2J0YWluIGRlcGFyc2VkIHZlcnNp b25zIG9mIGV4cHJlc3Npb25zLiAgSW4gc3VjaCByZXN1bHRzLCB3ZSB3YW50CisJICogYWxsIG9i amVjdCBuYW1lcyB0byBiZSBxdWFsaWZpZWQsIHNvIHRoYXQgcmVzdWx0cyBhcmUgInBvcnRhYmxl IiB0bworCSAqIGVudmlyb25tZW50cyB3aXRoIGRpZmZlcmVudCBzZWFyY2hfcGF0aCBzZXR0aW5n cy4gIFJhdGhlciB0aGFuIGluamVjdAorCSAqIHdoYXQgd291bGQgYmUgcmVwZXRpdGl2ZSBjYWxs cyB0byBvdmVycmlkZSBzZWFyY2ggcGF0aCBhbGwgb3ZlciB0aGUKKwkgKiBwbGFjZSwgd2UgZG8g aXQgY2VudHJhbGx5IGhlcmUuCisJICovCisJb3ZlcnJpZGVQYXRoID0gR2V0T3ZlcnJpZGVTZWFy Y2hQYXRoKEN1cnJlbnRNZW1vcnlDb250ZXh0KTsKKwlvdmVycmlkZVBhdGgtPnNjaGVtYXMgPSBO SUw7CisJb3ZlcnJpZGVQYXRoLT5hZGRDYXRhbG9nID0gZmFsc2U7CisJb3ZlcnJpZGVQYXRoLT5h ZGRUZW1wID0gdHJ1ZTsKKwlQdXNoT3ZlcnJpZGVTZWFyY2hQYXRoKG92ZXJyaWRlUGF0aCk7CisK Kwl2ZXJib3NlID0gdmVyYm9zZV9tb2RlOworCisJc3dpdGNoIChjbWQtPnR5cGUpCisJeworCQlj YXNlIFNDVF9TaW1wbGU6CisJCQl0cmVlID0gZGVwYXJzZV9zaW1wbGVfY29tbWFuZChjbWQpOwor CQkJYnJlYWs7CisJCWNhc2UgU0NUX0FsdGVyVGFibGU6CisJCQl0cmVlID0gZGVwYXJzZV9BbHRl clJlbGF0aW9uKGNtZCk7CisJCQlicmVhazsKKwkJY2FzZSBTQ1RfQ3JlYXRlVGFibGVBczoKKwkJ CXRyZWUgPSBkZXBhcnNlX0NyZWF0ZVRhYmxlQXNTdG10KGNtZCk7CisJCQlicmVhazsKKwkJZGVm YXVsdDoKKwkJCWVsb2coRVJST1IsICJ1bmV4cGVjdGVkIGRlcGFyc2Ugbm9kZSB0eXBlICVkIiwg Y21kLT50eXBlKTsKKwl9CisKKwlQb3BPdmVycmlkZVNlYXJjaFBhdGgoKTsKKworCWlmICh0cmVl KQorCXsKKwkJSnNvbmIJICAgKmpzb25iOworCisJCWpzb25iID0gb2JqdHJlZV90b19qc29uYih0 cmVlKTsKKwkJY29tbWFuZCA9IEpzb25iVG9DU3RyaW5nKCZzdHIsICZqc29uYi0+cm9vdCwgSlNP TkJfRVNUSU1BVEVEX0xFTik7CisJfQorCisJLyoKKwkgKiBDbGVhbiB1cC4gIE5vdGUgdGhhdCBz aW5jZSB3ZSBjcmVhdGVkIHRoZSBTdHJpbmdJbmZvIGluIHRoZSBjYWxsZXIncworCSAqIGNvbnRl eHQsIHRoZSBvdXRwdXQgc3RyaW5nIGlzIG5vdCBkZWxldGVkIGhlcmUuCisJICovCisJTWVtb3J5 Q29udGV4dFN3aXRjaFRvKG9sZGN4dCk7CisJTWVtb3J5Q29udGV4dERlbGV0ZSh0bXBjeHQpOwor CisJcmV0dXJuIGNvbW1hbmQ7Cit9CisKKy8qCisgKiBHaXZlbiBhIENvbGxlY3RlZENvbW1hbmQs IHJldHVybiBhIEpTT04gcmVwcmVzZW50YXRpb24gb2YgaXQuCisgKgorICogVGhlIGNvbW1hbmQg aXMgZXhwYW5kZWQgZnVsbHkgc28gdGhhdCB0aGVyZSBhcmUgbm8gYW1iaWd1aXRpZXMgZXZlbiBp biB0aGUKKyAqIGZhY2Ugb2Ygc2VhcmNoX3BhdGggY2hhbmdlcy4KKyAqLworRGF0dW0KK2RkbF9k ZXBhcnNlX3RvX2pzb24oUEdfRlVOQ1RJT05fQVJHUykKK3sKKwlDb2xsZWN0ZWRDb21tYW5kICpj bWQgPSAoQ29sbGVjdGVkQ29tbWFuZCAqKSBQR19HRVRBUkdfUE9JTlRFUigwKTsKKwljaGFyCSAg ICpjb21tYW5kOworCisJY29tbWFuZCA9IGRlcGFyc2VfdXRpbGl0eV9jb21tYW5kKGNtZCwgdHJ1 ZSk7CisKKwlpZiAoY29tbWFuZCkKKwkJUEdfUkVUVVJOX1RFWFRfUChjc3RyaW5nX3RvX3RleHQo Y29tbWFuZCkpOworCisJUEdfUkVUVVJOX05VTEwoKTsKK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL2NvbW1hbmRzL2RkbF9qc29uLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9kZGxfanNvbi5j Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiZDNiNTQKLS0tIC9kZXYvbnVs bAorKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9kZGxfanNvbi5jCkBAIC0wLDAgKzEsNzc2IEBA CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBkZGxfanNvbi5jCisgKgkgIEpTT04gY29kZSBy ZWxhdGVkIHRvIERETCBjb21tYW5kIGRlcGFyc2luZworICoKKyAqIFBvcnRpb25zIENvcHlyaWdo dCAoYykgMTk5Ni0yMDIyLCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICog UG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk0LCBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9m IENhbGlmb3JuaWEKKyAqCisgKiBJREVOVElGSUNBVElPTgorICoJICBzcmMvYmFja2VuZC9jb21t YW5kcy9kZGxfanNvbi5jCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpbmNsdWRlICJw b3N0Z3Jlcy5oIgorCisjaW5jbHVkZSAibGliL3N0cmluZ2luZm8uaCIKKyNpbmNsdWRlICJ1dGls cy9idWlsdGlucy5oIgorI2luY2x1ZGUgInV0aWxzL2pzb25iLmgiCisKKworLyoKKyAqIENvbnZl cnNpb24gc3BlY2lmaWVyIHdoaWNoIGRldGVybWluZXMgaG93IHdlIGV4cGFuZCB0aGUgSlNPTiBl bGVtZW50IGludG8KKyAqIHN0cmluZy4KKyAqLwordHlwZWRlZiBlbnVtCit7CisJU3BlY1R5cGVO YW1lLAorCVNwZWNPcGVyYXRvck5hbWUsCisJU3BlY0RvdHRlZE5hbWUsCisJU3BlY1N0cmluZywK KwlTcGVjTnVtYmVyLAorCVNwZWNTdHJpbmdMaXRlcmFsLAorCVNwZWNJZGVudGlmaWVyLAorCVNw ZWNSb2xlCit9IGNvbnZTcGVjaWZpZXI7CisKKy8qCisgKiBBIHRlcm5hcnkgdmFsdWUgdGhhdCBy ZXByZXNlbnRzIGEgYm9vbGVhbiB0eXBlIEpzb25iVmFsdWUuCisgKi8KK3R5cGVkZWYgZW51bQor eworCXR2X2Fic2VudCwKKwl0dl90cnVlLAorCXR2X2ZhbHNlCit9CQkJanNvbl90cml2YWx1ZTsK Kworc3RhdGljIGJvb2wgZXhwYW5kX29uZV9qc29uYl9lbGVtZW50KFN0cmluZ0luZm8gYnVmLCBj aGFyICpwYXJhbSwKKwkJCQkJCQkJCSBKc29uYlZhbHVlICpqc29udmFsLCBjb252U3BlY2lmaWVy IHNwZWNpZmllciwKKwkJCQkJCQkJCSBjb25zdCBjaGFyICpmbXQpOworc3RhdGljIHZvaWQgZXhw YW5kX2pzb25iX2FycmF5KFN0cmluZ0luZm8gYnVmLCBjaGFyICpwYXJhbSwKKwkJCQkJCQkgICBK c29uYlZhbHVlICpqc29uYXJyLCBjaGFyICphcnJheXNlcCwKKwkJCQkJCQkgICBjb252U3BlY2lm aWVyIHNwZWNpZmllciwgY29uc3QgY2hhciAqZm10KTsKK3N0YXRpYyB2b2lkIGZtdHN0cl9lcnJv cl9jYWxsYmFjayh2b2lkICphcmcpOworY2hhciAqZGVwYXJzZV9kZGxfanNvbl90b19zdHJpbmco Y2hhciAqanNvbmIpOworCisvKgorICogR2l2ZW4gYSBKc29uYkNvbnRhaW5lciwgZmluZCB0aGUg SnNvbmJWYWx1ZSB3aXRoIHRoZSBnaXZlbiBrZXkgbmFtZSBpbiBpdC4KKyAqIElmIGl0J3Mgb2Yg YSB0eXBlIG90aGVyIHRoYW4gamJ2Qm9vbCwgYW4gZXJyb3IgaXMgcmFpc2VkLiBJZiBpdCBkb2Vz bid0CisgKiBleGlzdCwgdHZfYWJzZW50IGlzIHJldHVybmVkOyBvdGhlcndpc2UgcmV0dXJuIHRo ZSBhY3R1YWwganNvbl90cml2YWx1ZS4KKyAqLworc3RhdGljIGpzb25fdHJpdmFsdWUKK2ZpbmRf Ym9vbF9pbl9qc29uYmNvbnRhaW5lcihKc29uYkNvbnRhaW5lciAqY29udGFpbmVyLCBjaGFyICpr ZXluYW1lKQoreworCUpzb25iVmFsdWUJa2V5OworCUpzb25iVmFsdWUgKnZhbHVlOworCWpzb25f dHJpdmFsdWUgcmVzdWx0OworCisJa2V5LnR5cGUgPSBqYnZTdHJpbmc7CisJa2V5LnZhbC5zdHJp bmcudmFsID0ga2V5bmFtZTsKKwlrZXkudmFsLnN0cmluZy5sZW4gPSBzdHJsZW4oa2V5bmFtZSk7 CisJdmFsdWUgPSBmaW5kSnNvbmJWYWx1ZUZyb21Db250YWluZXIoY29udGFpbmVyLAorCQkJCQkJ CQkJCUpCX0ZPQkpFQ1QsICZrZXkpOworCWlmICh2YWx1ZSA9PSBOVUxMKQorCQlyZXR1cm4gdHZf YWJzZW50OworCWlmICh2YWx1ZS0+dHlwZSAhPSBqYnZCb29sKQorCQllcmVwb3J0KEVSUk9SLAor CQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCSBlcnJt c2coImVsZW1lbnQgXCIlc1wiIGlzIG5vdCBvZiB0eXBlIGJvb2xlYW4iLAorCQkJCQkJa2V5bmFt ZSkpKTsKKwlyZXN1bHQgPSB2YWx1ZS0+dmFsLmJvb2xlYW4gPyB0dl90cnVlIDogdHZfZmFsc2U7 CisJcGZyZWUodmFsdWUpOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIEdpdmVuIGEg SnNvbmJDb250YWluZXIsIGZpbmQgdGhlIEpzb25iVmFsdWUgd2l0aCB0aGUgZ2l2ZW4ga2V5IG5h bWUgaW4gaXQuCisgKiBJZiBpdCdzIG9mIGEgdHlwZSBvdGhlciB0aGFuIGpidlN0cmluZywgYW4g ZXJyb3IgaXMgcmFpc2VkLiAgSWYgaXQgZG9lc24ndAorICogZXhpc3QsIGFuIGVycm9yIGlzIHJh aXNlZCB1bmxlc3MgbWlzc2luZ19vazsgb3RoZXJ3aXNlIHJldHVybiBOVUxMLgorICoKKyAqIElm IGl0IGV4aXN0cyBhbmQgaXMgYSBzdHJpbmcsIGEgZnJlc2hseSBwYWxsb2MnZWQgY29weSBpcyBy ZXR1cm5lZC4KKyAqCisgKiBJZiAqbGVuZ3RoIGlzIG5vdCBOVUxMLCBpdCBpcyBzZXQgdG8gdGhl IGxlbmd0aCBvZiB0aGUgc3RyaW5nLgorICovCitzdGF0aWMgY2hhciAqCitmaW5kX3N0cmluZ19p bl9qc29uYmNvbnRhaW5lcihKc29uYkNvbnRhaW5lciAqY29udGFpbmVyLCBjaGFyICprZXluYW1l LAorCQkJCQkJCSAgYm9vbCBtaXNzaW5nX29rLCBpbnQgKmxlbmd0aCkKK3sKKwlKc29uYlZhbHVl CWtleTsKKwlKc29uYlZhbHVlICp2YWx1ZTsKKwljaGFyCSAgICpzdHI7CisKKwkvKiBYWFggdmVy aWZ5IHRoYXQgdGhpcyBpcyBhbiBvYmplY3QsIG5vdCBhbiBhcnJheSAqLworCisJa2V5LnR5cGUg PSBqYnZTdHJpbmc7CisJa2V5LnZhbC5zdHJpbmcudmFsID0ga2V5bmFtZTsKKwlrZXkudmFsLnN0 cmluZy5sZW4gPSBzdHJsZW4oa2V5bmFtZSk7CisJdmFsdWUgPSBmaW5kSnNvbmJWYWx1ZUZyb21D b250YWluZXIoY29udGFpbmVyLAorCQkJCQkJCQkJCUpCX0ZPQkpFQ1QsICZrZXkpOworCWlmICh2 YWx1ZSA9PSBOVUxMKQorCXsKKwkJaWYgKG1pc3Npbmdfb2spCisJCQlyZXR1cm4gTlVMTDsKKwkJ ZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZB TFVFKSwKKwkJCQkgZXJybXNnKCJtaXNzaW5nIGVsZW1lbnQgXCIlc1wiIGluIEpTT04gb2JqZWN0 Iiwga2V5bmFtZSkpKTsKKwl9CisKKwlpZiAodmFsdWUtPnR5cGUgIT0gamJ2U3RyaW5nKQorCQll cmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFM VUUpLAorCQkJCSBlcnJtc2coImVsZW1lbnQgXCIlc1wiIGlzIG5vdCBvZiB0eXBlIHN0cmluZyIs IGtleW5hbWUpKSk7CisKKwlzdHIgPSBwbnN0cmR1cCh2YWx1ZS0+dmFsLnN0cmluZy52YWwsIHZh bHVlLT52YWwuc3RyaW5nLmxlbik7CisJaWYgKGxlbmd0aCkKKwkJKmxlbmd0aCA9IHZhbHVlLT52 YWwuc3RyaW5nLmxlbjsKKwlwZnJlZSh2YWx1ZSk7CisJcmV0dXJuIHN0cjsKK30KKworI2RlZmlu ZSBBRFZBTkNFX1BBUlNFX1BPSU5URVIocHRyLGVuZF9wdHIpIFwKKwlkbyB7IFwKKwkJaWYgKCsr KHB0cikgPj0gKGVuZF9wdHIpKSBcCisJCQllcmVwb3J0KEVSUk9SLCBcCisJCQkJCShlcnJjb2Rl KEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLCBcCisJCQkJCSBlcnJtc2coInVudGVy bWluYXRlZCBmb3JtYXQgc3BlY2lmaWVyIikpKTsgXAorCX0gd2hpbGUgKDApCisKKy8qCisgKiBS ZWN1cnNpdmUgaGVscGVyIGZvciBkZXBhcnNlX2RkbF9qc29uX3RvX3N0cmluZy4KKyAqCisgKiBG aW5kIHRoZSAiZm10IiBlbGVtZW50IGluIHRoZSBnaXZlbiBjb250YWluZXIsIGFuZCBleHBhbmQg aXQgaW50byB0aGUKKyAqIHByb3ZpZGVkIFN0cmluZ0luZm8uCisgKi8KK3N0YXRpYyB2b2lkCitl eHBhbmRfZm10X3JlY3Vyc2l2ZShKc29uYkNvbnRhaW5lciAqY29udGFpbmVyLCBTdHJpbmdJbmZv IGJ1ZikKK3sKKwlKc29uYlZhbHVlCWtleTsKKwlKc29uYlZhbHVlICp2YWx1ZTsKKwljb25zdCBj aGFyICpjcDsKKwljb25zdCBjaGFyICpzdGFydF9wdHI7CisJY29uc3QgY2hhciAqZW5kX3B0cjsK KwlpbnQJCQlsZW47CisKKwlzdGFydF9wdHIgPSBmaW5kX3N0cmluZ19pbl9qc29uYmNvbnRhaW5l cihjb250YWluZXIsICJmbXQiLCBmYWxzZSwgJmxlbik7CisJZW5kX3B0ciA9IHN0YXJ0X3B0ciAr IGxlbjsKKworCWZvciAoY3AgPSBzdGFydF9wdHI7IGNwIDwgZW5kX3B0cjsgY3ArKykKKwl7CisJ CWNvbnZTcGVjaWZpZXIgc3BlY2lmaWVyOworCQlib29sCQlpc19hcnJheSA9IGZhbHNlOworCQlj aGFyCSAgICpwYXJhbSA9IE5VTEw7CisJCWNoYXIJICAgKmFycmF5c2VwID0gTlVMTDsKKworCQlp ZiAoKmNwICE9ICclJykKKwkJeworCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXJNYWNybyhidWYsICpj cCk7CisJCQljb250aW51ZTsKKwkJfQorCisKKwkJQURWQU5DRV9QQVJTRV9QT0lOVEVSKGNwLCBl bmRfcHRyKTsKKworCQkvKiBFYXN5IGNhc2U6ICUlIG91dHB1dHMgYSBzaW5nbGUgJSAqLworCQlp ZiAoKmNwID09ICclJykKKwkJeworCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXJNYWNybyhidWYsICpj cCk7CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qCisJCSAqIFNjYW4gdGhlIG1hbmRhdG9yeSBl bGVtZW50IG5hbWUuICBBbGxvdyBmb3IgYW4gYXJyYXkgc2VwYXJhdG9yCisJCSAqICh3aGljaCBt YXkgYmUgdGhlIGVtcHR5IHN0cmluZykgdG8gYmUgc3BlY2lmaWVkIGFmdGVyIGEgY29sb24uCisJ CSAqLworCQlpZiAoKmNwID09ICd7JykKKwkJeworCQkJU3RyaW5nSW5mb0RhdGEgcGFyYnVmOwor CQkJU3RyaW5nSW5mb0RhdGEgYXJyYXlzZXBidWY7CisJCQlTdHJpbmdJbmZvCWFwcGVuZFRvOwor CisJCQlpbml0U3RyaW5nSW5mbygmcGFyYnVmKTsKKwkJCWFwcGVuZFRvID0gJnBhcmJ1ZjsKKwor CQkJQURWQU5DRV9QQVJTRV9QT0lOVEVSKGNwLCBlbmRfcHRyKTsKKwkJCWZvciAoOyBjcCA8IGVu ZF9wdHI7KQorCQkJeworCQkJCWlmICgqY3AgPT0gJzonKQorCQkJCXsKKwkJCQkJLyoKKwkJCQkJ ICogRm91bmQgYXJyYXkgc2VwYXJhdG9yIGRlbGltaXRlcjsgZWxlbWVudCBuYW1lIGlzIG5vdwor CQkJCQkgKiBjb21wbGV0ZSwgc3RhcnQgZmlsbGluZyB0aGUgc2VwYXJhdG9yLgorCQkJCQkgKi8K KwkJCQkJaW5pdFN0cmluZ0luZm8oJmFycmF5c2VwYnVmKTsKKwkJCQkJYXBwZW5kVG8gPSAmYXJy YXlzZXBidWY7CisJCQkJCWlzX2FycmF5ID0gdHJ1ZTsKKwkJCQkJQURWQU5DRV9QQVJTRV9QT0lO VEVSKGNwLCBlbmRfcHRyKTsKKwkJCQkJY29udGludWU7CisJCQkJfQorCisJCQkJaWYgKCpjcCA9 PSAnfScpCisJCQkJeworCQkJCQlBRFZBTkNFX1BBUlNFX1BPSU5URVIoY3AsIGVuZF9wdHIpOwor CQkJCQlicmVhazsKKwkJCQl9CisJCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXJNYWNybyhhcHBlbmRU bywgKmNwKTsKKwkJCQlBRFZBTkNFX1BBUlNFX1BPSU5URVIoY3AsIGVuZF9wdHIpOworCQkJfQor CQkJcGFyYW0gPSBwYXJidWYuZGF0YTsKKwkJCWlmIChpc19hcnJheSkKKwkJCQlhcnJheXNlcCA9 IGFycmF5c2VwYnVmLmRhdGE7CisJCX0KKwkJaWYgKHBhcmFtID09IE5VTEwpCisJCQllcmVwb3J0 KEVSUk9SLAorCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwK KwkJCQkJIGVycm1zZygibWlzc2luZyBjb252ZXJzaW9uIG5hbWUgaW4gY29udmVyc2lvbiBzcGVj aWZpZXIiKSkpOworCisJCXN3aXRjaCAoKmNwKQorCQl7CisJCQljYXNlICdJJzoKKwkJCQlzcGVj aWZpZXIgPSBTcGVjSWRlbnRpZmllcjsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ0QnOgorCQkJCXNw ZWNpZmllciA9IFNwZWNEb3R0ZWROYW1lOworCQkJCWJyZWFrOworCQkJY2FzZSAncyc6CisJCQkJ c3BlY2lmaWVyID0gU3BlY1N0cmluZzsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ0wnOgorCQkJCXNw ZWNpZmllciA9IFNwZWNTdHJpbmdMaXRlcmFsOworCQkJCWJyZWFrOworCQkJY2FzZSAnVCc6CisJ CQkJc3BlY2lmaWVyID0gU3BlY1R5cGVOYW1lOworCQkJCWJyZWFrOworCQkJY2FzZSAnTyc6CisJ CQkJc3BlY2lmaWVyID0gU3BlY09wZXJhdG9yTmFtZTsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ24n OgorCQkJCXNwZWNpZmllciA9IFNwZWNOdW1iZXI7CisJCQkJYnJlYWs7CisJCQljYXNlICdSJzoK KwkJCQlzcGVjaWZpZXIgPSBTcGVjUm9sZTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJ ZXJlcG9ydChFUlJPUiwKKwkJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJf VkFMVUUpLAorCQkJCQkJIGVycm1zZygiaW52YWxpZCBjb252ZXJzaW9uIHNwZWNpZmllciBcIiVj XCIiLCAqY3ApKSk7CisJCX0KKworCQkvKgorCQkgKiBPYnRhaW4gdGhlIGVsZW1lbnQgdG8gYmUg ZXhwYW5kZWQuCisJCSAqLworCQlrZXkudHlwZSA9IGpidlN0cmluZzsKKwkJa2V5LnZhbC5zdHJp bmcudmFsID0gcGFyYW07CisJCWtleS52YWwuc3RyaW5nLmxlbiA9IHN0cmxlbihwYXJhbSk7CisK KwkJdmFsdWUgPSBmaW5kSnNvbmJWYWx1ZUZyb21Db250YWluZXIoY29udGFpbmVyLCBKQl9GT0JK RUNULCAma2V5KTsKKworCQkvKgorCQkgKiBFeHBhbmQgdGhlIGRhdGEgKHBvc3NpYmx5IGFuIGFy cmF5KSBpbnRvIHRoZSBvdXRwdXQgU3RyaW5nSW5mby4KKwkJICovCisJCWlmIChpc19hcnJheSkK KwkJCWV4cGFuZF9qc29uYl9hcnJheShidWYsIHBhcmFtLCB2YWx1ZSwgYXJyYXlzZXAsIHNwZWNp Zmllciwgc3RhcnRfcHRyKTsKKwkJZWxzZQorCQkJZXhwYW5kX29uZV9qc29uYl9lbGVtZW50KGJ1 ZiwgcGFyYW0sIHZhbHVlLCBzcGVjaWZpZXIsIHN0YXJ0X3B0cik7CisJfQorfQorCisvKgorICog RXhwYW5kIGEganNvbiB2YWx1ZSBhcyBhIHF1b3RlZCBpZGVudGlmaWVyLiAgVGhlIHZhbHVlIG11 c3QgYmUgb2YgdHlwZSBzdHJpbmcuCisgKi8KK3N0YXRpYyB2b2lkCitleHBhbmRfanNvbnZhbF9p ZGVudGlmaWVyKFN0cmluZ0luZm8gYnVmLCBKc29uYlZhbHVlICpqc29udmFsKQoreworCWNoYXIJ ICAgKnN0cjsKKworCUFzc2VydChqc29udmFsLT50eXBlID09IGpidlN0cmluZyk7CisKKwlzdHIg PSBwbnN0cmR1cChqc29udmFsLT52YWwuc3RyaW5nLnZhbCwganNvbnZhbC0+dmFsLnN0cmluZy5s ZW4pOworCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCBxdW90ZV9pZGVudGlmaWVyKHN0cikp OworCXBmcmVlKHN0cik7Cit9CisKKy8qCisgKiBFeHBhbmQgYSBqc29uIHZhbHVlIGFzIGEgZG90 LXNlcGFyYXRlZC1uYW1lLiAgVGhlIHZhbHVlIG11c3QgYmUgb2YgdHlwZQorICogYmluYXJ5IGFu ZCBtYXkgY29udGFpbiBlbGVtZW50cyAic2NoZW1hbmFtZSIgKG9wdGlvbmFsKSwgIm9iam5hbWUi CisgKiAobWFuZGF0b3J5KSwgImF0dHJuYW1lIiAob3B0aW9uYWwpLiAgRG91YmxlIHF1b3RlcyBh cmUgYWRkZWQgdG8gZWFjaCBlbGVtZW50CisgKiBhcyBuZWNlc3NhcnksIGFuZCBkb3Qgc2VwYXJh dG9ycyB3aGVyZSBuZWVkZWQuCisgKgorICogT25lIGRheSB3ZSBtaWdodCBuZWVkIGEgImNhdGFs b2ciIGVsZW1lbnQgYXMgd2VsbCwgYnV0IG5vIGN1cnJlbnQgdXNlIGNhc2UKKyAqIG5lZWRzIHRo YXQuCisgKi8KK3N0YXRpYyB2b2lkCitleHBhbmRfanNvbnZhbF9kb3R0ZWRuYW1lKFN0cmluZ0lu Zm8gYnVmLCBKc29uYlZhbHVlICpqc29udmFsKQoreworCWNoYXIJICAgKnN0cjsKKworCUFzc2Vy dChqc29udmFsLT50eXBlID09IGpidkJpbmFyeSk7CisKKwlzdHIgPSBmaW5kX3N0cmluZ19pbl9q c29uYmNvbnRhaW5lcihqc29udmFsLT52YWwuYmluYXJ5LmRhdGEsCisJCQkJCQkJCQkJInNjaGVt YW5hbWUiLCB0cnVlLCBOVUxMKTsKKwlpZiAoc3RyKQorCXsKKwkJYXBwZW5kU3RyaW5nSW5mbyhi dWYsICIlcy4iLCBxdW90ZV9pZGVudGlmaWVyKHN0cikpOworCQlwZnJlZShzdHIpOworCX0KKwor CXN0ciA9IGZpbmRfc3RyaW5nX2luX2pzb25iY29udGFpbmVyKGpzb252YWwtPnZhbC5iaW5hcnku ZGF0YSwKKwkJCQkJCQkJCQkib2JqbmFtZSIsIGZhbHNlLCBOVUxMKTsKKwlhcHBlbmRTdHJpbmdJ bmZvKGJ1ZiwgIiVzIiwgcXVvdGVfaWRlbnRpZmllcihzdHIpKTsKKwlwZnJlZShzdHIpOworCisJ c3RyID0gZmluZF9zdHJpbmdfaW5fanNvbmJjb250YWluZXIoanNvbnZhbC0+dmFsLmJpbmFyeS5k YXRhLAorCQkJCQkJCQkJCSJhdHRybmFtZSIsIHRydWUsIE5VTEwpOworCWlmIChzdHIpCisJewor CQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIi4lcyIsIHF1b3RlX2lkZW50aWZpZXIoc3RyKSk7CisJ CXBmcmVlKHN0cik7CisJfQorfQorCisvKgorICogRXhwYW5kIGEgSlNPTiB2YWx1ZSBhcyBhIHR5 cGUgbmFtZS4KKyAqLworc3RhdGljIHZvaWQKK2V4cGFuZF9qc29udmFsX3R5cGVuYW1lKFN0cmlu Z0luZm8gYnVmLCBKc29uYlZhbHVlICpqc29udmFsKQoreworCWNoYXIJICAgKnNjaGVtYSA9IE5V TEw7CisJY2hhcgkgICAqdHlwZW5hbWU7CisJY2hhcgkgICAqdHlwbW9kc3RyOworCWpzb25fdHJp dmFsdWUgaXNfYXJyYXk7CisJY2hhcgkgICAqYXJyYXlfZGVjb3I7CisKKwkvKgorCSAqIFdlIG9t aXQgc2NoZW1hLXF1YWxpZnlpbmcgdGhlIG91dHB1dCBuYW1lIGlmIHRoZSBzY2hlbWEgZWxlbWVu dCBpcworCSAqIGVpdGhlciB0aGUgZW1wdHkgc3RyaW5nIG9yIE5VTEw7IHRoZSBkaWZmZXJlbmNl IGJldHdlZW4gdGhvc2UgdHdvIGNhc2VzCisJICogaXMgdGhhdCBpbiB0aGUgbGF0dGVyIHdlIHF1 b3RlIHRoZSB0eXBlIG5hbWUsIGluIHRoZSBmb3JtZXIgd2UgZG9uJ3QuCisJICogVGhpcyBhbGxv d3MgZm9yIHR5cGVzIHdpdGggc3BlY2lhbCB0eXBtb2QgbmVlZHMsIHN1Y2ggYXMgaW50ZXJ2YWwg YW5kCisJICogdGltZXN0YW1wIChzZWUgZm9ybWF0X3R5cGVfZGV0YWlsZWQpLCB3aGlsZSBhdCB0 aGUgc2FtZSB0aW1lIGFsbG93aW5nCisJICogZm9yIHRoZSBzY2hlbWEgbmFtZSB0byBiZSBvbWl0 dGVkIGZyb20gdHlwZSBuYW1lcyB0aGF0IHJlcXVpcmUgcXVvdGVzCisJICogYnV0IGFyZSB0byBi ZSBvYnRhaW5lZCBmcm9tIGEgdXNlciBzY2hlbWEuCisJICovCisKKwlzY2hlbWEgPSBmaW5kX3N0 cmluZ19pbl9qc29uYmNvbnRhaW5lcihqc29udmFsLT52YWwuYmluYXJ5LmRhdGEsCisJCQkJCQkJ CQkJICAgInNjaGVtYW5hbWUiLCB0cnVlLCBOVUxMKTsKKwl0eXBlbmFtZSA9IGZpbmRfc3RyaW5n X2luX2pzb25iY29udGFpbmVyKGpzb252YWwtPnZhbC5iaW5hcnkuZGF0YSwKKwkJCQkJCQkJCQkJ ICJ0eXBlbmFtZSIsIGZhbHNlLCBOVUxMKTsKKwl0eXBtb2RzdHIgPSBmaW5kX3N0cmluZ19pbl9q c29uYmNvbnRhaW5lcihqc29udmFsLT52YWwuYmluYXJ5LmRhdGEsCisJCQkJCQkJCQkJCSAgInR5 cG1vZCIsIHRydWUsIE5VTEwpOworCWlzX2FycmF5ID0gZmluZF9ib29sX2luX2pzb25iY29udGFp bmVyKGpzb252YWwtPnZhbC5iaW5hcnkuZGF0YSwKKwkJCQkJCQkJCQkgICAidHlwYXJyYXkiKTsK Kwlzd2l0Y2ggKGlzX2FycmF5KQorCXsKKwkJY2FzZSB0dl90cnVlOgorCQkJYXJyYXlfZGVjb3Ig PSAiW10iOworCQkJYnJlYWs7CisKKwkJY2FzZSB0dl9mYWxzZToKKwkJCWFycmF5X2RlY29yID0g IiI7CisJCQlicmVhazsKKworCQljYXNlIHR2X2Fic2VudDoKKwkJZGVmYXVsdDoKKwkJCWVyZXBv cnQoRVJST1IsCisJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUp LAorCQkJCQkgZXJybXNnKCJtaXNzaW5nIHR5cGFycmF5IGVsZW1lbnQiKSkpOworCX0KKworCWlm IChzY2hlbWEgPT0gTlVMTCkKKwkJYXBwZW5kU3RyaW5nSW5mbyhidWYsICIlcyIsIHF1b3RlX2lk ZW50aWZpZXIodHlwZW5hbWUpKTsKKwllbHNlIGlmIChzY2hlbWFbMF0gPT0gJ1wwJykKKwkJYXBw ZW5kU3RyaW5nSW5mbyhidWYsICIlcyIsIHR5cGVuYW1lKTsJLyogU3BlY2lhbCB0eXBtb2QgbmVl ZHMgKi8KKwllbHNlCisJCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAiJXMuJXMiLCBxdW90ZV9pZGVu dGlmaWVyKHNjaGVtYSksCisJCQkJCQkgcXVvdGVfaWRlbnRpZmllcih0eXBlbmFtZSkpOworCisJ YXBwZW5kU3RyaW5nSW5mbyhidWYsICIlcyVzIiwgdHlwbW9kc3RyID8gdHlwbW9kc3RyIDogIiIs IGFycmF5X2RlY29yKTsKKwlwZnJlZShzY2hlbWEpOworCXBmcmVlKHR5cGVuYW1lKTsKKwlwZnJl ZSh0eXBtb2RzdHIpOworfQorCisvKgorICogRXhwYW5kIGEgSlNPTiB2YWx1ZSBhcyBhbiBvcGVy YXRvciBuYW1lLgorICovCitzdGF0aWMgdm9pZAorZXhwYW5kX2pzb252YWxfb3BlcmF0b3IoU3Ry aW5nSW5mbyBidWYsIEpzb25iVmFsdWUgKmpzb252YWwpCit7CisJY2hhcgkgICAqc3RyOworCisJ c3RyID0gZmluZF9zdHJpbmdfaW5fanNvbmJjb250YWluZXIoanNvbnZhbC0+dmFsLmJpbmFyeS5k YXRhLAorCQkJCQkJCQkJCSJzY2hlbWFuYW1lIiwgdHJ1ZSwgTlVMTCk7CisJLyogU2NoZW1hIG1p Z2h0IGJlIE5VTEwgb3IgZW1wdHkgKi8KKwlpZiAoc3RyICE9IE5VTEwgJiYgc3RyWzBdICE9ICdc MCcpCisJeworCQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIiVzLiIsIHF1b3RlX2lkZW50aWZpZXIo c3RyKSk7CisJCXBmcmVlKHN0cik7CisJfQorCisJc3RyID0gZmluZF9zdHJpbmdfaW5fanNvbmJj b250YWluZXIoanNvbnZhbC0+dmFsLmJpbmFyeS5kYXRhLAorCQkJCQkJCQkJCSJvYmpuYW1lIiwg ZmFsc2UsIE5VTEwpOworCisJaWYgKHN0cikKKwl7CisJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmco YnVmLCBzdHIpOworCQlwZnJlZShzdHIpOworCX0KK30KKworLyoKKyAqIEV4cGFuZCBhIEpTT04g dmFsdWUgYXMgYSBzdHJpbmcuICBUaGUgdmFsdWUgbXVzdCBiZSBvZiB0eXBlIHN0cmluZyBvciBv ZgorICogdHlwZSBCaW5hcnkuICBJbiB0aGUgbGF0dGVyIGNhc2UsIGl0IG11c3QgY29udGFpbiBh ICJmbXQiIGVsZW1lbnQgd2hpY2ggd2lsbAorICogYmUgcmVjdXJzaXZlbHkgZXhwYW5kZWQ7IGFs c28sIGlmIHRoZSBvYmplY3QgY29udGFpbnMgYW4gZWxlbWVudCAicHJlc2VudCIKKyAqIGFuZCBp dCBpcyBzZXQgdG8gZmFsc2UsIHRoZSBleHBhbnNpb24gaXMgdGhlIGVtcHR5IHN0cmluZy4KKyAq CisgKiBSZXR1cm5zIGZhbHNlIGlmIG5vIGFjdHVhbCBleHBhbnNpb24gd2FzIG1hZGUgZHVlIHRv IHRoZSAicHJlc2VudCIgZmxhZworICogYmVpbmcgc2V0IHRvICJmYWxzZSIuCisgKgorICogVGhl IGNhbGxlciBpcyByZXNwb25zaWJsZSB0byBjaGVjayBqc29udmFsIGlzIG9mIHR5cGUgamJ2U3Ry aW5nIG9yIGpidkJpbmFyeS4KKyAqLworc3RhdGljIGJvb2wKK2V4cGFuZF9qc29udmFsX3N0cmlu ZyhTdHJpbmdJbmZvIGJ1ZiwgSnNvbmJWYWx1ZSAqanNvbnZhbCkKK3sKKwlpZiAoanNvbnZhbC0+ dHlwZSA9PSBqYnZTdHJpbmcpCisJeworCQlhcHBlbmRCaW5hcnlTdHJpbmdJbmZvKGJ1ZiwganNv bnZhbC0+dmFsLnN0cmluZy52YWwsCisJCQkJCQkJICAganNvbnZhbC0+dmFsLnN0cmluZy5sZW4p OworCX0KKwllbHNlIGlmIChqc29udmFsLT50eXBlID09IGpidkJpbmFyeSkKKwl7CisJCWpzb25f dHJpdmFsdWUgcHJlc2VudDsKKworCQlwcmVzZW50ID0gZmluZF9ib29sX2luX2pzb25iY29udGFp bmVyKGpzb252YWwtPnZhbC5iaW5hcnkuZGF0YSwKKwkJCQkJCQkJCQkJICAicHJlc2VudCIpOwor CisJCS8qCisJCSAqIElmICJwcmVzZW50IiBpcyBzZXQgdG8gZmFsc2UsIHRoaXMgZWxlbWVudCBl eHBhbmRzIHRvIGVtcHR5OworCQkgKiBvdGhlcndpc2UgKGVpdGhlciB0cnVlIG9yIGFic2VudCks IGZhbGwgdGhyb3VnaCB0byBleHBhbmQgImZtdCIuCisJCSAqLworCQlpZiAocHJlc2VudCA9PSB0 dl9mYWxzZSkKKwkJCXJldHVybiBmYWxzZTsKKworCQlleHBhbmRfZm10X3JlY3Vyc2l2ZShqc29u dmFsLT52YWwuYmluYXJ5LmRhdGEsIGJ1Zik7CisJfQorCWVsc2UKKwkJcmV0dXJuIGZhbHNlOwor CisJcmV0dXJuIHRydWU7Cit9CisKKy8qCisgKiBFeHBhbmQgYSBKU09OIHZhbHVlIGFzIGEgc3Ry aW5nIGxpdGVyYWwuCisgKi8KK3N0YXRpYyB2b2lkCitleHBhbmRfanNvbnZhbF9zdHJsaXQoU3Ry aW5nSW5mbyBidWYsIEpzb25iVmFsdWUgKmpzb252YWwpCit7CisJY2hhcgkgICAqc3RyOworCVN0 cmluZ0luZm9EYXRhIGRxZGVsaW07CisJc3RhdGljIGNvbnN0IGNoYXIgZHFzdWZmaXhlc1tdID0g Il9YWVpaWVhfIjsKKwlpbnQJCQlkcW5leHRjaGFyID0gMDsKKworCXN0ciA9IHBuc3RyZHVwKGpz b252YWwtPnZhbC5zdHJpbmcudmFsLCBqc29udmFsLT52YWwuc3RyaW5nLmxlbik7CisKKwkvKiBF YXN5IGNhc2U6IGlmIHRoZXJlIGFyZSBubyAnIGFuZCBubyBcLCBqdXN0IHVzZSBhIHNpbmdsZSBx dW90ZSAqLworCWlmIChzdHJwYnJrKHN0ciwgIlwnXFwiKSA9PSBOVUxMKQorCXsKKwkJYXBwZW5k U3RyaW5nSW5mbyhidWYsICInJXMnIiwgc3RyKTsKKwkJcGZyZWUoc3RyKTsKKwkJcmV0dXJuOwor CX0KKworCS8qIE90aGVyd2lzZSBuZWVkIHRvIGZpbmQgYSB1c2VmdWwgZG9sbGFyLXF1b3RlIGRl bGltaXRlciAqLworCWluaXRTdHJpbmdJbmZvKCZkcWRlbGltKTsKKwlhcHBlbmRTdHJpbmdJbmZv U3RyaW5nKCZkcWRlbGltLCAiJCIpOworCXdoaWxlIChzdHJzdHIoc3RyLCBkcWRlbGltLmRhdGEp ICE9IE5VTEwpCisJeworCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcigmZHFkZWxpbSwgZHFzdWZmaXhl c1tkcW5leHRjaGFyKytdKTsKKwkJZHFuZXh0Y2hhciA9IGRxbmV4dGNoYXIgJSAoc2l6ZW9mKGRx c3VmZml4ZXMpIC0gMSk7CisJfQorCS8qIEFkZCB0cmFpbGluZyAkICovCisJYXBwZW5kU3RyaW5n SW5mb0NoYXIoJmRxZGVsaW0sICckJyk7CisKKwkvKiBBbmQgZmluYWxseSBwcm9kdWNlIHRoZSBx dW90ZWQgbGl0ZXJhbCBpbnRvIHRoZSBvdXRwdXQgU3RyaW5nSW5mbyAqLworCWFwcGVuZFN0cmlu Z0luZm8oYnVmLCAiJXMlcyVzIiwgZHFkZWxpbS5kYXRhLCBzdHIsIGRxZGVsaW0uZGF0YSk7CisJ cGZyZWUoZHFkZWxpbS5kYXRhKTsKKwlwZnJlZShzdHIpOworfQorCisvKgorICogRXhwYW5kIGEg SlNPTiB2YWx1ZSBhcyBhbiBpbnRlZ2VyIHF1YW50aXR5LgorICovCitzdGF0aWMgdm9pZAorZXhw YW5kX2pzb252YWxfbnVtYmVyKFN0cmluZ0luZm8gYnVmLCBKc29uYlZhbHVlICpqc29udmFsKQor eworCWNoYXIJICAgKnN0cmRhdHVtOworCisJc3RyZGF0dW0gPSBEYXR1bUdldENTdHJpbmcoRGly ZWN0RnVuY3Rpb25DYWxsMShudW1lcmljX291dCwKKwkJCQkJCQkJCQkJCSAgIE51bWVyaWNHZXRE YXR1bShqc29udmFsLT52YWwubnVtZXJpYykpKTsKKwlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1 Ziwgc3RyZGF0dW0pOworCXBmcmVlKHN0cmRhdHVtKTsKK30KKworLyoKKyAqIEV4cGFuZCBhIEpT T04gdmFsdWUgYXMgYSByb2xlIG5hbWUuICBJZiB0aGUgaXNfcHVibGljIGVsZW1lbnQgaXMgc2V0 IHRvCisgKiB0cnVlLCBQVUJMSUMgaXMgZXhwYW5kZWQgKG5vIHF1b3Rlcyk7IG90aGVyd2lzZSwg ZXhwYW5kIHRoZSBnaXZlbiByb2xlIG5hbWUsCisgKiBxdW90aW5nIGFzIGFuIGlkZW50aWZpZXIu CisgKi8KK3N0YXRpYyB2b2lkCitleHBhbmRfanNvbnZhbF9yb2xlKFN0cmluZ0luZm8gYnVmLCBK c29uYlZhbHVlICpqc29udmFsKQoreworCWpzb25fdHJpdmFsdWUgaXNfcHVibGljOworCisJaXNf cHVibGljID0gZmluZF9ib29sX2luX2pzb25iY29udGFpbmVyKGpzb252YWwtPnZhbC5iaW5hcnku ZGF0YSwKKwkJCQkJCQkJCQkJImlzX3B1YmxpYyIpOworCWlmIChpc19wdWJsaWMgPT0gdHZfdHJ1 ZSkKKwkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsICJQVUJMSUMiKTsKKwllbHNlCisJewor CQljaGFyCSAgICpyb2xlbmFtZTsKKworCQlyb2xlbmFtZSA9IGZpbmRfc3RyaW5nX2luX2pzb25i Y29udGFpbmVyKGpzb252YWwtPnZhbC5iaW5hcnkuZGF0YSwKKwkJCQkJCQkJCQkJCSAicm9sZW5h bWUiLCBmYWxzZSwgTlVMTCk7CisJCWlmIChyb2xlbmFtZSkKKwkJeworCQkJYXBwZW5kU3RyaW5n SW5mb1N0cmluZyhidWYsIHF1b3RlX2lkZW50aWZpZXIocm9sZW5hbWUpKTsKKwkJCXBmcmVlKHJv bGVuYW1lKTsKKwkJfQorCX0KK30KKworLyoKKyAqIEV4cGFuZCBvbmUgSlNPTiBlbGVtZW50IGlu dG8gdGhlIG91dHB1dCBTdHJpbmdJbmZvIGFjY29yZGluZyB0byB0aGUKKyAqIGNvbnZlcnNpb24g c3BlY2lmaWVyLiAgVGhlIGVsZW1lbnQgdHlwZSBpcyB2YWxpZGF0ZWQsIGFuZCBhbiBlcnJvciBp cyByYWlzZWQKKyAqIGlmIGl0IGRvZXNuJ3QgbWF0Y2ggd2hhdCB3ZSBleHBlY3QgZm9yIHRoZSBj b252ZXJzaW9uIHNwZWNpZmllci4KKyAqCisgKiBSZXR1cm5zIGZhbHNlIGlmIG5vIGFjdHVhbCBl eHBhbnNpb24gd2FzIG1hZGUgKGR1ZSB0byB0aGUgInByZXNlbnQiIGZsYWcKKyAqIGJlaW5nIHNl dCB0byAiZmFsc2UiIGluIGZvcm1hdHRlZCBzdHJpbmcgZXhwYW5zaW9uKS4KKyAqLworc3RhdGlj IGJvb2wKK2V4cGFuZF9vbmVfanNvbmJfZWxlbWVudChTdHJpbmdJbmZvIGJ1ZiwgY2hhciAqcGFy YW0sIEpzb25iVmFsdWUgKmpzb252YWwsCisJCQkJCQkgY29udlNwZWNpZmllciBzcGVjaWZpZXIs IGNvbnN0IGNoYXIgKmZtdCkKK3sKKwlib29sCQlyZXN1bHQgPSB0cnVlOworCUVycm9yQ29udGV4 dENhbGxiYWNrIHNxbGVycmNvbnRleHQ7CisKKwkvKiBJZiB3ZSB3ZXJlIGdpdmVuIGEgZm9ybWF0 IHN0cmluZywgc2V0dXAgYW4gZXJlcG9ydCgpIGNvbnRleHQgY2FsbGJhY2sgKi8KKwlpZiAoZm10 KQorCXsKKwkJc3FsZXJyY29udGV4dC5jYWxsYmFjayA9IGZtdHN0cl9lcnJvcl9jYWxsYmFjazsK KwkJc3FsZXJyY29udGV4dC5hcmcgPSAodm9pZCAqKSBmbXQ7CisJCXNxbGVycmNvbnRleHQucHJl dmlvdXMgPSBlcnJvcl9jb250ZXh0X3N0YWNrOworCQllcnJvcl9jb250ZXh0X3N0YWNrID0gJnNx bGVycmNvbnRleHQ7CisJfQorCisJaWYgKCFqc29udmFsKQorCQllcmVwb3J0KEVSUk9SLAorCQkJ CShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCSBlcnJtc2co ImVsZW1lbnQgXCIlc1wiIG5vdCBmb3VuZCIsIHBhcmFtKSkpOworCisJc3dpdGNoIChzcGVjaWZp ZXIpCisJeworCQljYXNlIFNwZWNJZGVudGlmaWVyOgorCQkJaWYgKGpzb252YWwtPnR5cGUgIT0g amJ2U3RyaW5nKQorCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQkoZXJyY29kZShFUlJDT0RFX0lO VkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJCSBlcnJtc2coImV4cGVjdGVkIEpTT04gc3Ry aW5nIGZvciAlJUkgZWxlbWVudCBcIiVzXCIsIGdvdCAlZCIsCisJCQkJCQkJCXBhcmFtLCBqc29u dmFsLT50eXBlKSkpOworCQkJZXhwYW5kX2pzb252YWxfaWRlbnRpZmllcihidWYsIGpzb252YWwp OworCQkJYnJlYWs7CisKKwkJY2FzZSBTcGVjRG90dGVkTmFtZToKKwkJCWlmIChqc29udmFsLT50 eXBlICE9IGpidkJpbmFyeSkKKwkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJKGVycmNvZGUoRVJS Q09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJCQkgZXJybXNnKCJleHBlY3RlZCBK U09OIHN0cnVjdCBmb3IgJSVEIGVsZW1lbnQgXCIlc1wiLCBnb3QgJWQiLAorCQkJCQkJCQlwYXJh bSwganNvbnZhbC0+dHlwZSkpKTsKKwkJCWV4cGFuZF9qc29udmFsX2RvdHRlZG5hbWUoYnVmLCBq c29udmFsKTsKKwkJCWJyZWFrOworCisJCWNhc2UgU3BlY1N0cmluZzoKKwkJCWlmIChqc29udmFs LT50eXBlICE9IGpidlN0cmluZyAmJgorCQkJCWpzb252YWwtPnR5cGUgIT0gamJ2QmluYXJ5KQor CQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1F VEVSX1ZBTFVFKSwKKwkJCQkJCSBlcnJtc2coImV4cGVjdGVkIEpTT04gc3RyaW5nIG9yIHN0cnVj dCBmb3IgJSVzIGVsZW1lbnQgXCIlc1wiLCBnb3QgJWQiLAorCQkJCQkJCQlwYXJhbSwganNvbnZh bC0+dHlwZSkpKTsKKwkJCXJlc3VsdCA9IGV4cGFuZF9qc29udmFsX3N0cmluZyhidWYsIGpzb252 YWwpOworCQkJYnJlYWs7CisKKwkJY2FzZSBTcGVjU3RyaW5nTGl0ZXJhbDoKKwkJCWlmIChqc29u dmFsLT50eXBlICE9IGpidlN0cmluZykKKwkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJKGVycmNv ZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJCQkgZXJybXNnKCJleHBl Y3RlZCBKU09OIHN0cmluZyBmb3IgJSVMIGVsZW1lbnQgXCIlc1wiLCBnb3QgJWQiLAorCQkJCQkJ CQlwYXJhbSwganNvbnZhbC0+dHlwZSkpKTsKKwkJCWV4cGFuZF9qc29udmFsX3N0cmxpdChidWYs IGpzb252YWwpOworCQkJYnJlYWs7CisKKwkJY2FzZSBTcGVjVHlwZU5hbWU6CisJCQlpZiAoanNv bnZhbC0+dHlwZSAhPSBqYnZCaW5hcnkpCisJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCShlcnJj b2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCQkJIGVycm1zZygiZXhw ZWN0ZWQgSlNPTiBzdHJ1Y3QgZm9yICUlVCBlbGVtZW50IFwiJXNcIiwgZ290ICVkIiwKKwkJCQkJ CQkJcGFyYW0sIGpzb252YWwtPnR5cGUpKSk7CisJCQlleHBhbmRfanNvbnZhbF90eXBlbmFtZShi dWYsIGpzb252YWwpOworCQkJYnJlYWs7CisKKwkJY2FzZSBTcGVjT3BlcmF0b3JOYW1lOgorCQkJ aWYgKGpzb252YWwtPnR5cGUgIT0gamJ2QmluYXJ5KQorCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJ CQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJCSBlcnJt c2coImV4cGVjdGVkIEpTT04gc3RydWN0IGZvciAlJU8gZWxlbWVudCBcIiVzXCIsIGdvdCAlZCIs CisJCQkJCQkJCXBhcmFtLCBqc29udmFsLT50eXBlKSkpOworCQkJZXhwYW5kX2pzb252YWxfb3Bl cmF0b3IoYnVmLCBqc29udmFsKTsKKwkJCWJyZWFrOworCisJCWNhc2UgU3BlY051bWJlcjoKKwkJ CWlmIChqc29udmFsLT50eXBlICE9IGpidk51bWVyaWMpCisJCQkJZXJlcG9ydChFUlJPUiwKKwkJ CQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCQkJIGVy cm1zZygiZXhwZWN0ZWQgSlNPTiBudW1lcmljIGZvciAlJW4gZWxlbWVudCBcIiVzXCIsIGdvdCAl ZCIsCisJCQkJCQkJCXBhcmFtLCBqc29udmFsLT50eXBlKSkpOworCQkJZXhwYW5kX2pzb252YWxf bnVtYmVyKGJ1ZiwganNvbnZhbCk7CisJCQlicmVhazsKKworCQljYXNlIFNwZWNSb2xlOgorCQkJ aWYgKGpzb252YWwtPnR5cGUgIT0gamJ2QmluYXJ5KQorCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJ CQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJCSBlcnJt c2coImV4cGVjdGVkIEpTT04gc3RydWN0IGZvciAlJVIgZWxlbWVudCBcIiVzXCIsIGdvdCAlZCIs CisJCQkJCQkJCXBhcmFtLCBqc29udmFsLT50eXBlKSkpOworCQkJZXhwYW5kX2pzb252YWxfcm9s ZShidWYsIGpzb252YWwpOworCQkJYnJlYWs7CisJfQorCisJaWYgKGZtdCkKKwkJZXJyb3JfY29u dGV4dF9zdGFjayA9IHNxbGVycmNvbnRleHQucHJldmlvdXM7CisKKwlyZXR1cm4gcmVzdWx0Owor fQorCisvKgorICogSXRlcmF0ZSBvbiB0aGUgZWxlbWVudHMgb2YgYSBKU09OIGFycmF5LCBleHBh bmRpbmcgZWFjaCBvbmUgaW50byB0aGUgb3V0cHV0CisgKiBTdHJpbmdJbmZvIHBlciB0aGUgZ2l2 ZW4gY29udmVyc2lvbiBzcGVjaWZpZXIsIHNlcGFyYXRlZCBieSB0aGUgZ2l2ZW4KKyAqIHNlcGFy YXRvci4KKyAqLworc3RhdGljIHZvaWQKK2V4cGFuZF9qc29uYl9hcnJheShTdHJpbmdJbmZvIGJ1 ZiwgY2hhciAqcGFyYW0sCisJCQkJICAgSnNvbmJWYWx1ZSAqanNvbmFyciwgY2hhciAqYXJyYXlz ZXAsIGNvbnZTcGVjaWZpZXIgc3BlY2lmaWVyLAorCQkJCSAgIGNvbnN0IGNoYXIgKmZtdCkKK3sK KwlFcnJvckNvbnRleHRDYWxsYmFjayBzcWxlcnJjb250ZXh0OworCUpzb25iQ29udGFpbmVyICpj b250YWluZXI7CisJSnNvbmJJdGVyYXRvciAqaXQ7CisJSnNvbmJWYWx1ZQl2OworCWludAkJCXR5 cGU7CisJYm9vbAkJZmlyc3QgPSB0cnVlOworCVN0cmluZ0luZm9EYXRhIGFycmF5ZWxlbTsKKwor CS8qIElmIHdlIHdlcmUgZ2l2ZW4gYSBmb3JtYXQgc3RyaW5nLCBzZXR1cCBhbiBlcmVwb3J0KCkg Y29udGV4dCBjYWxsYmFjayAqLworCWlmIChmbXQpCisJeworCQlzcWxlcnJjb250ZXh0LmNhbGxi YWNrID0gZm10c3RyX2Vycm9yX2NhbGxiYWNrOworCQlzcWxlcnJjb250ZXh0LmFyZyA9ICh2b2lk ICopIGZtdDsKKwkJc3FsZXJyY29udGV4dC5wcmV2aW91cyA9IGVycm9yX2NvbnRleHRfc3RhY2s7 CisJCWVycm9yX2NvbnRleHRfc3RhY2sgPSAmc3FsZXJyY29udGV4dDsKKwl9CisKKwlpZiAoanNv bmFyci0+dHlwZSAhPSBqYnZCaW5hcnkpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUo RVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJIGVycm1zZygiZWxlbWVudCBc IiVzXCIgaXMgbm90IGEgSlNPTiBhcnJheSIsIHBhcmFtKSkpOworCisJY29udGFpbmVyID0ganNv bmFyci0+dmFsLmJpbmFyeS5kYXRhOworCWlmICghSnNvbkNvbnRhaW5lcklzQXJyYXkoY29udGFp bmVyKSkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFS QU1FVEVSX1ZBTFVFKSwKKwkJCQkgZXJybXNnKCJlbGVtZW50IFwiJXNcIiBpcyBub3QgYSBKU09O IGFycmF5IiwgcGFyYW0pKSk7CisKKwlpbml0U3RyaW5nSW5mbygmYXJyYXllbGVtKTsKKworCWl0 ID0gSnNvbmJJdGVyYXRvckluaXQoY29udGFpbmVyKTsKKwl3aGlsZSAoKHR5cGUgPSBKc29uYkl0 ZXJhdG9yTmV4dCgmaXQsICZ2LCB0cnVlKSkgIT0gV0pCX0RPTkUpCisJeworCQlpZiAodHlwZSA9 PSBXSkJfRUxFTSkKKwkJeworCQkJcmVzZXRTdHJpbmdJbmZvKCZhcnJheWVsZW0pOworCisJCQlp ZiAoZXhwYW5kX29uZV9qc29uYl9lbGVtZW50KCZhcnJheWVsZW0sIHBhcmFtLCAmdiwgc3BlY2lm aWVyLCBOVUxMKSkKKwkJCXsKKwkJCQlpZiAoIWZpcnN0KQorCQkJCQlhcHBlbmRTdHJpbmdJbmZv U3RyaW5nKGJ1ZiwgYXJyYXlzZXApOworCisJCQkJYXBwZW5kQmluYXJ5U3RyaW5nSW5mbyhidWYs IGFycmF5ZWxlbS5kYXRhLCBhcnJheWVsZW0ubGVuKTsKKwkJCQlmaXJzdCA9IGZhbHNlOworCQkJ fQorCQl9CisJfQorCisJaWYgKGZtdCkKKwkJZXJyb3JfY29udGV4dF9zdGFjayA9IHNxbGVycmNv bnRleHQucHJldmlvdXM7Cit9CisKKy8qCisgKiBXb3JraG9yc2UgZm9yIGRkbF9kZXBhcnNlX2V4 cGFuZF9jb21tYW5kLgorICovCitjaGFyICoKK2RlcGFyc2VfZGRsX2pzb25fdG9fc3RyaW5nKGNo YXIgKmpzb25fc3RyKQoreworCURhdHVtCQlkOworCUpzb25iCSAgICpqc29uYjsKKwlTdHJpbmdJ bmZvCWJ1ZiA9IChTdHJpbmdJbmZvKSBwYWxsb2MwKHNpemVvZihTdHJpbmdJbmZvRGF0YSkpOwor CisJaW5pdFN0cmluZ0luZm8oYnVmKTsKKworCWQgPSBEaXJlY3RGdW5jdGlvbkNhbGwxKGpzb25i X2luLCBQb2ludGVyR2V0RGF0dW0oanNvbl9zdHIpKTsKKwlqc29uYiA9IChKc29uYiAqKSBEYXR1 bUdldFBvaW50ZXIoZCk7CisKKwlleHBhbmRfZm10X3JlY3Vyc2l2ZSgmanNvbmItPnJvb3QsIGJ1 Zik7CisKKwlyZXR1cm4gYnVmLT5kYXRhOworfQorCisvKi0tLS0tLQorICogUmV0dXJucyBhIGZv cm1hdHRlZCBzdHJpbmcgZnJvbSBhIEpTT04gb2JqZWN0LgorICoKKyAqIFRoZSBzdGFydGluZyBw b2ludCBpcyB0aGUgZWxlbWVudCBuYW1lZCAiZm10IiAod2hpY2ggbXVzdCBiZSBhIHN0cmluZyku CisgKiBUaGlzIGZvcm1hdCBzdHJpbmcgbWF5IGNvbnRhaW4gemVybyBvciBtb3JlICUtZXNjYXBl cywgd2hpY2ggY29uc2lzdCBvZiBhbgorICogZWxlbWVudCBuYW1lIGVuY2xvc2VkIGluIHsgfSwg cG9zc2libHkgZm9sbG93ZWQgYnkgYSBjb252ZXJzaW9uIG1vZGlmaWVyLAorICogZm9sbG93ZWQg YnkgYSBjb252ZXJzaW9uIHNwZWNpZmllci4gIFBvc3NpYmxlIGNvbnZlcnNpb24gc3BlY2lmaWVy cyBhcmU6CisgKgorICogJQkJZXhwYW5kIHRvIGEgbGl0ZXJhbCAlCisgKiBJCQlleHBhbmQgYXMg YSBzaW5nbGUsIG5vbi1xdWFsaWZpZWQgaWRlbnRpZmllcgorICogRAkJZXhwYW5kIGFzIGEgcG9z c2libHktcXVhbGlmaWVkIGlkZW50aWZpZXIKKyAqIFQJCWV4cGFuZCBhcyBhIHR5cGUgbmFtZQor ICogTwkJZXhwYW5kIGFzIGFuIG9wZXJhdG9yIG5hbWUKKyAqIEwJCWV4cGFuZCBhcyBhIHN0cmlu ZyBsaXRlcmFsIChxdW90ZSB1c2luZyBzaW5nbGUgcXVvdGVzKQorICogcwkJZXhwYW5kIGFzIGEg c2ltcGxlIHN0cmluZyAobm8gcXVvdGluZykKKyAqIG4JCWV4cGFuZCBhcyBhIHNpbXBsZSBudW1i ZXIgKG5vIHF1b3RpbmcpCisgKiBSCQlleHBhbmQgYXMgYSByb2xlIG5hbWUgKHBvc3NpYmx5IHF1 b3RlZCBuYW1lLCBvciBQVUJMSUMpCisgKgorICogVGhlIGVsZW1lbnQgbmFtZSBtYXkgaGF2ZSBh biBvcHRpb25hbCBzZXBhcmF0b3Igc3BlY2lmaWNhdGlvbiBwcmVjZWRlZAorICogYnkgYSBjb2xv bi4gIEl0cyBwcmVzZW5jZSBpbmRpY2F0ZXMgdGhhdCB0aGUgZWxlbWVudCBpcyBleHBlY3RlZCB0 byBiZQorICogYW4gYXJyYXk7IHRoZSBzcGVjaWZpZWQgc2VwYXJhdG9yIGlzIHVzZWQgdG8gam9p biB0aGUgYXJyYXkgZWxlbWVudHMuCisgKi0tLS0tLQorICovCitEYXR1bQorZGRsX2RlcGFyc2Vf ZXhwYW5kX2NvbW1hbmQoUEdfRlVOQ1RJT05fQVJHUykKK3sKKwl0ZXh0CSAgICpqc29uID0gUEdf R0VUQVJHX1RFWFRfUCgwKTsKKwljaGFyCSAgICpqc29uX3N0cjsKKworCWpzb25fc3RyID0gdGV4 dF90b19jc3RyaW5nKGpzb24pOworCisJUEdfUkVUVVJOX1RFWFRfUChjc3RyaW5nX3RvX3RleHQo ZGVwYXJzZV9kZGxfanNvbl90b19zdHJpbmcoanNvbl9zdHIpKSk7Cit9CisKKy8qCisgKiBFcnJv ciBjb250ZXh0IGNhbGxiYWNrIGZvciBKU09OIGZvcm1hdCBzdHJpbmcgZXhwYW5zaW9uLgorICoK KyAqIFhYWDogaW5kaWNhdGUgd2hpY2ggZWxlbWVudCB3ZSdyZSBleHBhbmRpbmcsIGlmIGFwcGxp Y2FibGUuCisgKi8KK3N0YXRpYyB2b2lkCitmbXRzdHJfZXJyb3JfY2FsbGJhY2sodm9pZCAqYXJn KQoreworCWVycmNvbnRleHQoIndoaWxlIGV4cGFuZGluZyBmb3JtYXQgc3RyaW5nIFwiJXNcIiIs IChjaGFyICopIGFyZyk7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9ldmVu dF90cmlnZ2VyLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmMKaW5kZXgg NjkwMjcwOS4uNDQ3MmUyOCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXZlbnRf dHJpZ2dlci5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuYwpAQCAt MTgyNSw2ICsxODI1LDcgQEAgcGdfZXZlbnRfdHJpZ2dlcl9kZGxfY29tbWFuZHMoUEdfRlVOQ1RJ T05fQVJHUykKIAkJCWNhc2UgU0NUX0FsdGVyT3BGYW1pbHk6CiAJCQljYXNlIFNDVF9DcmVhdGVP cENsYXNzOgogCQkJY2FzZSBTQ1RfQWx0ZXJUU0NvbmZpZzoKKwkJCWNhc2UgU0NUX0NyZWF0ZVRh YmxlQXM6CiAJCQkJewogCQkJCQljaGFyCSAgICppZGVudGl0eTsKIAkJCQkJY2hhcgkgICAqdHlw ZTsKQEAgLTE4NDIsNiArMTg0Myw4IEBAIHBnX2V2ZW50X3RyaWdnZXJfZGRsX2NvbW1hbmRzKFBH X0ZVTkNUSU9OX0FSR1MpCiAJCQkJCQlhZGRyID0gY21kLT5kLmNyZWF0ZW9wYy5hZGRyZXNzOwog CQkJCQllbHNlIGlmIChjbWQtPnR5cGUgPT0gU0NUX0FsdGVyVFNDb25maWcpCiAJCQkJCQlhZGRy ID0gY21kLT5kLmF0c2NmZy5hZGRyZXNzOworCQkJCQllbHNlIGlmIChjbWQtPnR5cGUgPT0gU0NU X0NyZWF0ZVRhYmxlQXMpCisJCQkJCQlhZGRyID0gY21kLT5kLmN0YXMuYWRkcmVzczsKIAogCQkJ CQkvKgogCQkJCQkgKiBJZiBhbiBvYmplY3Qgd2FzIGRyb3BwZWQgaW4gdGhlIHNhbWUgY29tbWFu ZCB3ZSBtYXkgZW5kCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9tZXNvbi5idWls ZCBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL21lc29uLmJ1aWxkCmluZGV4IDQyY2NlZDkuLjI4NDRk MzYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL21lc29uLmJ1aWxkCisrKyBiL3Ny Yy9iYWNrZW5kL2NvbW1hbmRzL21lc29uLmJ1aWxkCkBAIC0xNyw2ICsxNyw4IEBAIGJhY2tlbmRf c291cmNlcyArPSBmaWxlcygKICAgJ2NvcHl0by5jJywKICAgJ2NyZWF0ZWFzLmMnLAogICAnZGJj b21tYW5kcy5jJywKKyAgJ2RkbF9kZXBhcnNlLmMnLAorICAnZGRsX2pzb24uYycsCiAgICdkZWZp bmUuYycsCiAgICdkaXNjYXJkLmMnLAogICAnZHJvcGNtZHMuYycsCmRpZmYgLS1naXQgYS9zcmMv aW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0IGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9j LmRhdAppbmRleCAzODEwZGU3Li43YTlkODQ2IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jYXRh bG9nL3BnX3Byb2MuZGF0CisrKyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKQEAg LTExODkxLDQgKzExODkxLDEwIEBACiAgIHByb3JldHR5cGUgPT4gJ2J5dGVhJywgcHJvYXJndHlw ZXMgPT4gJ3BnX2JyaW5fbWlubWF4X211bHRpX3N1bW1hcnknLAogICBwcm9zcmMgPT4gJ2JyaW5f bWlubWF4X211bHRpX3N1bW1hcnlfc2VuZCcgfSwKIAoreyBvaWQgPT4gJzQ2NDInLCBkZXNjciA9 PiAnZGVwYXJzZSB0aGUgRERMIGNvbW1hbmQgaW50byBKU09OIGZvcm1hdCBzdHJpbmcnLAorICBw cm9uYW1lID0+ICdkZGxfZGVwYXJzZV90b19qc29uJywgcHJvcmV0dHlwZSA9PiAndGV4dCcsCisg IHByb2FyZ3R5cGVzID0+ICdwZ19kZGxfY29tbWFuZCcsIHByb3NyYyA9PiAnZGRsX2RlcGFyc2Vf dG9fanNvbicgfSwKK3sgb2lkID0+ICc0NjQzJywgZGVzY3IgPT4gJ2V4cGFuZCBKU09OIGZvcm1h dCBEREwgdG8gYSBwbGFpbiBEREwgY29tbWFuZCcsCisgIHByb25hbWUgPT4gJ2RkbF9kZXBhcnNl X2V4cGFuZF9jb21tYW5kJywgcHJvcmV0dHlwZSA9PiAndGV4dCcsCisgIHByb2FyZ3R5cGVzID0+ ICd0ZXh0JywgcHJvc3JjID0+ICdkZGxfZGVwYXJzZV9leHBhbmRfY29tbWFuZCcgfSwKIF0KZGlm ZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL3BhcnNlbm9kZXMuaCBiL3NyYy9pbmNsdWRlL25v ZGVzL3BhcnNlbm9kZXMuaAppbmRleCBjZmVjYTk2Li42ZjE0MWY0IDEwMDY0NAotLS0gYS9zcmMv aW5jbHVkZS9ub2Rlcy9wYXJzZW5vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGFyc2Vu b2Rlcy5oCkBAIC0xOTYzLDYgKzE5NjMsNyBAQCB0eXBlZGVmIHN0cnVjdCBBbHRlclRhYmxlU3Rt dAogCUxpc3QJICAgKmNtZHM7CQkJLyogbGlzdCBvZiBzdWJjb21tYW5kcyAqLwogCU9iamVjdFR5 cGUJb2JqdHlwZTsJCS8qIHR5cGUgb2Ygb2JqZWN0ICovCiAJYm9vbAkJbWlzc2luZ19vazsJCS8q IHNraXAgZXJyb3IgaWYgdGFibGUgbWlzc2luZyAqLworCWJvb2wgICAgICAgIHRhYmxlX2xpa2U7 CQkvKiBpbnRlcm5hbGx5IGdlbmVyYXRlZCBmb3IgVGFibGVMaWtlQ2xhdXNlICovCiB9IEFsdGVy VGFibGVTdG10OwogCiB0eXBlZGVmIGVudW0gQWx0ZXJUYWJsZVR5cGUKZGlmZiAtLWdpdCBhL3Ny Yy9pbmNsdWRlL3Rjb3AvZGRsX2RlcGFyc2UuaCBiL3NyYy9pbmNsdWRlL3Rjb3AvZGRsX2RlcGFy c2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YzI1NDljCi0tLSAvZGV2 L251bGwKKysrIGIvc3JjL2luY2x1ZGUvdGNvcC9kZGxfZGVwYXJzZS5oCkBAIC0wLDAgKzEsMjMg QEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIGRkbF9kZXBhcnNlLmgKKyAqCisgKiBQb3J0 aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYtMjAyMiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1l bnQgR3JvdXAKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0aGUg VW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhCisgKgorICogc3JjL2luY2x1ZGUvdGNvcC9kZGxfZGVw YXJzZS5oCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpZm5kZWYgRERMX0RFUEFSU0Vf SAorI2RlZmluZSBERExfREVQQVJTRV9ICisKKyNpbmNsdWRlICJ0Y29wL2RlcGFyc2VfdXRpbGl0 eS5oIgorCitleHRlcm4gY2hhciAqZGVwYXJzZV91dGlsaXR5X2NvbW1hbmQoQ29sbGVjdGVkQ29t bWFuZCAqY21kLCBib29sIHZlcmJvc2VfbW9kZSk7CitleHRlcm4gY2hhciAqZGVwYXJzZV9kZGxf anNvbl90b19zdHJpbmcoY2hhciAqanNvbmIpOworZXh0ZXJuIGNoYXIgKmRlcGFyc2VfZHJvcF9j b21tYW5kKGNvbnN0IGNoYXIgKm9iamlkZW50aXR5LCBjb25zdCBjaGFyICpvYmplY3R0eXBlLAor CQkJCQkJCQkgIERyb3BCZWhhdmlvciBiZWhhdmlvcik7CisKKworI2VuZGlmCQkJCQkJCS8qIERE TF9ERVBBUlNFX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3Rjb3AvZGVwYXJzZV91dGls aXR5LmggYi9zcmMvaW5jbHVkZS90Y29wL2RlcGFyc2VfdXRpbGl0eS5oCmluZGV4IGI1ODU4MTAu LjFmY2EyMjcgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3Rjb3AvZGVwYXJzZV91dGlsaXR5LmgK KysrIGIvc3JjL2luY2x1ZGUvdGNvcC9kZXBhcnNlX3V0aWxpdHkuaApAQCAtMjksNyArMjksOCBA QCB0eXBlZGVmIGVudW0gQ29sbGVjdGVkQ29tbWFuZFR5cGUKIAlTQ1RfQWx0ZXJPcEZhbWlseSwK IAlTQ1RfQWx0ZXJEZWZhdWx0UHJpdmlsZWdlcywKIAlTQ1RfQ3JlYXRlT3BDbGFzcywKLQlTQ1Rf QWx0ZXJUU0NvbmZpZworCVNDVF9BbHRlclRTQ29uZmlnLAorCVNDVF9DcmVhdGVUYWJsZUFzCiB9 IENvbGxlY3RlZENvbW1hbmRUeXBlOwogCiAvKgpAQCAtMzksNiArNDAsNyBAQCB0eXBlZGVmIHN0 cnVjdCBDb2xsZWN0ZWRBVFN1YmNtZAogewogCU9iamVjdEFkZHJlc3MgYWRkcmVzczsJCS8qIGFm ZmVjdGVkIGNvbHVtbiwgY29uc3RyYWludCwgaW5kZXgsIC4uLiAqLwogCU5vZGUJICAgKnBhcnNl dHJlZTsKKwljaGFyCSAgICp1c2luZ2V4cHI7CiB9IENvbGxlY3RlZEFUU3ViY21kOwogCiB0eXBl ZGVmIHN0cnVjdCBDb2xsZWN0ZWRDb21tYW5kCkBAIC02Miw2ICs2NCw3IEBAIHR5cGVkZWYgc3Ry dWN0IENvbGxlY3RlZENvbW1hbmQKIAkJewogCQkJT2lkCQkJb2JqZWN0SWQ7CiAJCQlPaWQJCQlj bGFzc0lkOworCQkJYm9vbAkJcmV3cml0ZTsKIAkJCUxpc3QJICAgKnN1YmNtZHM7CiAJCX0JCQlh bHRlclRhYmxlOwogCkBAIC0xMDAsNiArMTAzLDEyIEBAIHR5cGVkZWYgc3RydWN0IENvbGxlY3Rl ZENvbW1hbmQKIAkJewogCQkJT2JqZWN0VHlwZQlvYmp0eXBlOwogCQl9CQkJZGVmcHJpdnM7CisK KwkJc3RydWN0CisJCXsKKwkJCU9iamVjdEFkZHJlc3MgYWRkcmVzczsKKwkJCU5vZGUJCSAqcmVh bF9jcmVhdGU7CisJCX0JCQljdGFzOwogCX0JCQlkOwogCiAJc3RydWN0IENvbGxlY3RlZENvbW1h bmQgKnBhcmVudDsJLyogd2hlbiBuZXN0ZWQgKi8KZGlmZiAtLWdpdCBhL3NyYy90b29scy9wZ2lu ZGVudC90eXBlZGVmcy5saXN0IGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKaW5k ZXggMjNiYWZlYy4uNTk2MmQ2MSAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVk ZWZzLmxpc3QKKysrIGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKQEAgLTE2MTIs NiArMTYxMiw5IEBAIE9TSW5mbwogT1NTTENpcGhlcgogT1NTTERpZ2VzdAogT1ZFUkxBUFBFRAor T2JqRWxlbQorT2JqVHJlZQorT2JqVHlwZQogT2JqZWN0QWNjZXNzRHJvcAogT2JqZWN0QWNjZXNz TmFtZXNwYWNlU2VhcmNoCiBPYmplY3RBY2Nlc3NQb3N0QWx0ZXIKQEAgLTMxODUsNiArMzE4OCw3 IEBAIGNvbXBhcmVfY29udGV4dAogY29uZmlnX3Zhcl92YWx1ZQogY29udGFpbl9hZ2dzX29mX2xl dmVsX2NvbnRleHQKIGNvbnZlcnRfdGVzdGV4cHJfY29udGV4dAorY29udlNwZWNpZmllcgogY29w eV9kYXRhX2Rlc3RfY2IKIGNvcHlfZGF0YV9zb3VyY2VfY2IKIGNvcmVfWVlTVFlQRQotLSAKMS44 LjMuMQoK --000000000000d6784f05f261a2df Content-Type: application/octet-stream; name="v62-0001-Infrastructure-to-support-DDL-deparsing.patch" Content-Disposition: attachment; filename="v62-0001-Infrastructure-to-support-DDL-deparsing.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lcyuikgn0 RnJvbSBlZjk1OTkyZTc1NzRjMWVkYmRkMGRlODk4YWExMDYyOTA5MDhjZDM5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBamluIENoZXJpYW4gPGFqaW5jQGZhc3QuYXUuZnVqaXRzdS5j b20+CkRhdGU6IE1vbiwgMTYgSmFuIDIwMjMgMDc6MzM6NDQgLTA1MDAKU3ViamVjdDogW1BBVENI IHY2MiAxLzddIEluZnJhc3RydWN0dXJlIHRvIHN1cHBvcnQgRERMIGRlcGFyc2luZy4KCkluZnJh c3RydWN0dXJlIHRvIHN1cHBvcnQgRERMIGRlcGFyc2luZy4KLS0tCiBzcmMvYmFja2VuZC9jYXRh bG9nL2FjbGNoay5jICAgICAgICAgICAgICAgICB8ICAgOSArLQogc3JjL2JhY2tlbmQvY2F0YWxv Zy9vYmplY3RhZGRyZXNzLmMgICAgICAgICAgfCAgIDIgKy0KIHNyYy9iYWNrZW5kL2NvbW1hbmRz L2NvbGxhdGlvbmNtZHMuYyAgICAgICAgIHwgIDEwICstCiBzcmMvYmFja2VuZC9jb21tYW5kcy9l dmVudF90cmlnZ2VyLmMgICAgICAgICB8ICA0MCArLS0tLQogc3JjL2JhY2tlbmQvY29tbWFuZHMv c2VjbGFiZWwuYyAgICAgICAgICAgICAgfCAgIDMgKwogc3JjL2JhY2tlbmQvY29tbWFuZHMvc2Vx dWVuY2UuYyAgICAgICAgICAgICAgfCAgMzMgKysrKwogc3JjL2JhY2tlbmQvdGNvcC91dGlsaXR5 LmMgICAgICAgICAgICAgICAgICAgfCAgOTEgKysrKysrKysrLQogc3JjL2JhY2tlbmQvdXRpbHMv YWR0L2Zvcm1hdF90eXBlLmMgICAgICAgICAgfCAgIDQgKy0KIHNyYy9iYWNrZW5kL3V0aWxzL2Fk dC9yZWdwcm9jLmMgICAgICAgICAgICAgIHwgIDUzICsrKysrKwogc3JjL2JhY2tlbmQvdXRpbHMv YWR0L3J1bGV1dGlscy5jICAgICAgICAgICAgfCAyNTggKysrKysrKysrKysrKysrKysrKystLS0t LS0tCiBzcmMvaW5jbHVkZS9jb21tYW5kcy9jb2xsYXRpb25jbWRzLmggICAgICAgICB8ICAgMyAr LQogc3JjL2luY2x1ZGUvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5oICAgICAgICAgfCAgMzkgKysr Kwogc3JjL2luY2x1ZGUvY29tbWFuZHMvc2VxdWVuY2UuaCAgICAgICAgICAgICAgfCAgIDEgKwog c3JjL2luY2x1ZGUvdGNvcC91dGlsaXR5LmggICAgICAgICAgICAgICAgICAgfCAgIDIgKwogc3Jj L2luY2x1ZGUvdXRpbHMvYWNsLmggICAgICAgICAgICAgICAgICAgICAgfCAgIDIgKwogc3JjL2lu Y2x1ZGUvdXRpbHMvYWNsY2hrX2ludGVybmFsLmggICAgICAgICAgfCAgIDEgKwogc3JjL2luY2x1 ZGUvdXRpbHMvYnVpbHRpbnMuaCAgICAgICAgICAgICAgICAgfCAgIDIgKwogc3JjL2luY2x1ZGUv dXRpbHMvcnVsZXV0aWxzLmggICAgICAgICAgICAgICAgfCAgMTkgKysKIHNyYy90ZXN0L3JlZ3Jl c3MvZXhwZWN0ZWQvb2JqZWN0X2FkZHJlc3Mub3V0IHwgICAyICstCiAxOSBmaWxlcyBjaGFuZ2Vk LCA0NTUgaW5zZXJ0aW9ucygrKSwgMTE5IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL2NhdGFsb2cvYWNsY2hrLmMgYi9zcmMvYmFja2VuZC9jYXRhbG9nL2FjbGNoay5jCmlu ZGV4IGNjNmUyNjAuLmJlZGM0NTcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvYWNs Y2hrLmMKKysrIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9hY2xjaGsuYwpAQCAtMTI5LDcgKzEyOSw2 IEBAIHN0YXRpYyB2b2lkIGV4cGFuZF9hbGxfY29sX3ByaXZpbGVnZXMoT2lkIHRhYmxlX29pZCwg Rm9ybV9wZ19jbGFzcyBjbGFzc0Zvcm0sCiAJCQkJCQkJCQkgIEFjbE1vZGUgKmNvbF9wcml2aWxl Z2VzLAogCQkJCQkJCQkJICBpbnQgbnVtX2NvbF9wcml2aWxlZ2VzKTsKIHN0YXRpYyBBY2xNb2Rl IHN0cmluZ190b19wcml2aWxlZ2UoY29uc3QgY2hhciAqcHJpdm5hbWUpOwotc3RhdGljIGNvbnN0 IGNoYXIgKnByaXZpbGVnZV90b19zdHJpbmcoQWNsTW9kZSBwcml2aWxlZ2UpOwogc3RhdGljIEFj bE1vZGUgcmVzdHJpY3RfYW5kX2NoZWNrX2dyYW50KGJvb2wgaXNfZ3JhbnQsIEFjbE1vZGUgYXZh aWxfZ29wdGlvbnMsCiAJCQkJCQkJCQkJYm9vbCBhbGxfcHJpdnMsIEFjbE1vZGUgcHJpdmlsZWdl cywKIAkJCQkJCQkJCQlPaWQgb2JqZWN0SWQsIE9pZCBncmFudG9ySWQsCkBAIC0zODUsMTEgKzM4 NCwxMCBAQCBFeGVjdXRlR3JhbnRTdG10KEdyYW50U3RtdCAqc3RtdCkKIAlMaXN0Q2VsbCAgICpj ZWxsOwogCWNvbnN0IGNoYXIgKmVycm9ybXNnOwogCUFjbE1vZGUJCWFsbF9wcml2aWxlZ2VzOwor CU9pZAkJCWdyYW50b3IgPSBJbnZhbGlkT2lkOwogCiAJaWYgKHN0bXQtPmdyYW50b3IpCiAJewot CQlPaWQJCQlncmFudG9yOwotCiAJCWdyYW50b3IgPSBnZXRfcm9sZXNwZWNfb2lkKHN0bXQtPmdy YW50b3IsIGZhbHNlKTsKIAogCQkvKgpAQCAtNDA4LDYgKzQwNiw5IEBAIEV4ZWN1dGVHcmFudFN0 bXQoR3JhbnRTdG10ICpzdG10KQogCWlzdG10LmlzX2dyYW50ID0gc3RtdC0+aXNfZ3JhbnQ7CiAJ aXN0bXQub2JqdHlwZSA9IHN0bXQtPm9ianR5cGU7CiAKKwkvKiBDb3B5IHRoZSBncmFudG9yIGlk IG5lZWRlZCBmb3IgRERMIGRlcGFyc2luZyBvZiBHcmFudCAqLworCWlzdG10LmdyYW50b3JfdWlk ID0gZ3JhbnRvcjsKKwogCS8qIENvbGxlY3QgdGhlIE9JRHMgb2YgdGhlIHRhcmdldCBvYmplY3Rz ICovCiAJc3dpdGNoIChzdG10LT50YXJndHlwZSkKIAl7CkBAIC0yNjI4LDcgKzI2MjksNyBAQCBz dHJpbmdfdG9fcHJpdmlsZWdlKGNvbnN0IGNoYXIgKnByaXZuYW1lKQogCXJldHVybiAwOwkJCQkJ LyogYXBwZWFzZSBjb21waWxlciAqLwogfQogCi1zdGF0aWMgY29uc3QgY2hhciAqCitjb25zdCBj aGFyICoKIHByaXZpbGVnZV90b19zdHJpbmcoQWNsTW9kZSBwcml2aWxlZ2UpCiB7CiAJc3dpdGNo IChwcml2aWxlZ2UpCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jYXRhbG9nL29iamVjdGFkZHJl c3MuYyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvb2JqZWN0YWRkcmVzcy5jCmluZGV4IDI1YzUwZDYu LjJmNjg4MTYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvb2JqZWN0YWRkcmVzcy5j CisrKyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvb2JqZWN0YWRkcmVzcy5jCkBAIC01OTIyLDcgKzU5 MjIsNyBAQCBnZXRPYmplY3RJZGVudGl0eVBhcnRzKGNvbnN0IE9iamVjdEFkZHJlc3MgKm9iamVj dCwKIAkJCQl0cmFuc2Zvcm1UeXBlID0gZm9ybWF0X3R5cGVfYmVfcXVhbGlmaWVkKHRyYW5zZm9y bS0+dHJmdHlwZSk7CiAJCQkJdHJhbnNmb3JtTGFuZyA9IGdldF9sYW5ndWFnZV9uYW1lKHRyYW5z Zm9ybS0+dHJmbGFuZywgZmFsc2UpOwogCi0JCQkJYXBwZW5kU3RyaW5nSW5mbygmYnVmZmVyLCAi Zm9yICVzIG9uIGxhbmd1YWdlICVzIiwKKwkJCQlhcHBlbmRTdHJpbmdJbmZvKCZidWZmZXIsICJm b3IgJXMgbGFuZ3VhZ2UgJXMiLAogCQkJCQkJCQkgdHJhbnNmb3JtVHlwZSwKIAkJCQkJCQkJIHRy YW5zZm9ybUxhbmcpOwogCQkJCWlmIChvYmpuYW1lKQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv Y29tbWFuZHMvY29sbGF0aW9uY21kcy5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvY29sbGF0aW9u Y21kcy5jCmluZGV4IDZhNDMxMWMuLmFiMmFmMmQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2Nv bW1hbmRzL2NvbGxhdGlvbmNtZHMuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9jb2xsYXRp b25jbWRzLmMKQEAgLTUyLDcgKzUyLDggQEAgdHlwZWRlZiBzdHJ1Y3QKICAqIENSRUFURSBDT0xM QVRJT04KICAqLwogT2JqZWN0QWRkcmVzcwotRGVmaW5lQ29sbGF0aW9uKFBhcnNlU3RhdGUgKnBz dGF0ZSwgTGlzdCAqbmFtZXMsIExpc3QgKnBhcmFtZXRlcnMsIGJvb2wgaWZfbm90X2V4aXN0cykK K0RlZmluZUNvbGxhdGlvbihQYXJzZVN0YXRlICpwc3RhdGUsIExpc3QgKm5hbWVzLCBMaXN0ICpw YXJhbWV0ZXJzLAorCQkJCSBib29sIGlmX25vdF9leGlzdHMsIE9iamVjdEFkZHJlc3MgKmZyb21f ZXhpc3RpbmdfY29sbGlkKQogewogCWNoYXIJICAgKmNvbGxOYW1lOwogCU9pZAkJCWNvbGxOYW1l c3BhY2U7CkBAIC0xMzksNiArMTQwLDEzIEBAIERlZmluZUNvbGxhdGlvbihQYXJzZVN0YXRlICpw c3RhdGUsIExpc3QgKm5hbWVzLCBMaXN0ICpwYXJhbWV0ZXJzLCBib29sIGlmX25vdF9lCiAJCWlm ICghSGVhcFR1cGxlSXNWYWxpZCh0cCkpCiAJCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZh aWxlZCBmb3IgY29sbGF0aW9uICV1IiwgY29sbGlkKTsKIAorCQkvKgorCQkgKiBNYWtlIGZyb20g ZXhpc3RpbmcgY29sbGF0aW9uaWQgYXZhaWxhYmxlIHRvIGNhbGxlcnMgZm9yIHN0YXRlbWVudCBz dWNoIGFzCisJCSAqIENSRUFURSBDT0xMQVRJT04gYW55X25hbWUgRlJPTSBhbnlfbmFtZQorCQkg Ki8KKwkJaWYgKGZyb21fZXhpc3RpbmdfY29sbGlkICYmIE9pZElzVmFsaWQoY29sbGlkKSkKKwkJ CU9iamVjdEFkZHJlc3NTZXQoKmZyb21fZXhpc3RpbmdfY29sbGlkLCBDb2xsYXRpb25SZWxhdGlv bklkLCBjb2xsaWQpOworCiAJCWNvbGxwcm92aWRlciA9ICgoRm9ybV9wZ19jb2xsYXRpb24pIEdF VFNUUlVDVCh0cCkpLT5jb2xscHJvdmlkZXI7CiAJCWNvbGxpc2RldGVybWluaXN0aWMgPSAoKEZv cm1fcGdfY29sbGF0aW9uKSBHRVRTVFJVQ1QodHApKS0+Y29sbGlzZGV0ZXJtaW5pc3RpYzsKIAkJ Y29sbGVuY29kaW5nID0gKChGb3JtX3BnX2NvbGxhdGlvbikgR0VUU1RSVUNUKHRwKSktPmNvbGxl bmNvZGluZzsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIu YyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuYwppbmRleCBkNGIwMGQxLi42 OTAyNzA5IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmMK KysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5jCkBAIC00OCw0NSArNDgs NyBAQAogI2luY2x1ZGUgInV0aWxzL3JlbC5oIgogI2luY2x1ZGUgInV0aWxzL3N5c2NhY2hlLmgi CiAKLXR5cGVkZWYgc3RydWN0IEV2ZW50VHJpZ2dlclF1ZXJ5U3RhdGUKLXsKLQkvKiBtZW1vcnkg Y29udGV4dCBmb3IgdGhpcyBzdGF0ZSdzIG9iamVjdHMgKi8KLQlNZW1vcnlDb250ZXh0IGN4dDsK LQotCS8qIHNxbF9kcm9wICovCi0Jc2xpc3RfaGVhZAlTUUxEcm9wTGlzdDsKLQlib29sCQlpbl9z cWxfZHJvcDsKLQotCS8qIHRhYmxlX3Jld3JpdGUgKi8KLQlPaWQJCQl0YWJsZV9yZXdyaXRlX29p ZDsJLyogSW52YWxpZE9pZCwgb3Igc2V0IGZvciB0YWJsZV9yZXdyaXRlCi0JCQkJCQkJCQkgKiBl dmVudCAqLwotCWludAkJCXRhYmxlX3Jld3JpdGVfcmVhc29uOwkvKiBBVF9SRVdSSVRFIHJlYXNv biAqLwotCi0JLyogU3VwcG9ydCBmb3IgY29tbWFuZCBjb2xsZWN0aW9uICovCi0JYm9vbAkJY29t bWFuZENvbGxlY3Rpb25JbmhpYml0ZWQ7Ci0JQ29sbGVjdGVkQ29tbWFuZCAqY3VycmVudENvbW1h bmQ7Ci0JTGlzdAkgICAqY29tbWFuZExpc3Q7CS8qIGxpc3Qgb2YgQ29sbGVjdGVkQ29tbWFuZDsg c2VlCi0JCQkJCQkJCSAqIGRlcGFyc2VfdXRpbGl0eS5oICovCi0Jc3RydWN0IEV2ZW50VHJpZ2dl clF1ZXJ5U3RhdGUgKnByZXZpb3VzOwotfSBFdmVudFRyaWdnZXJRdWVyeVN0YXRlOwotCi1zdGF0 aWMgRXZlbnRUcmlnZ2VyUXVlcnlTdGF0ZSAqY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlID0gTlVM TDsKLQotLyogU3VwcG9ydCBmb3IgZHJvcHBlZCBvYmplY3RzICovCi10eXBlZGVmIHN0cnVjdCBT UUxEcm9wT2JqZWN0Ci17Ci0JT2JqZWN0QWRkcmVzcyBhZGRyZXNzOwotCWNvbnN0IGNoYXIgKnNj aGVtYW5hbWU7Ci0JY29uc3QgY2hhciAqb2JqbmFtZTsKLQljb25zdCBjaGFyICpvYmppZGVudGl0 eTsKLQljb25zdCBjaGFyICpvYmplY3R0eXBlOwotCUxpc3QJICAgKmFkZHJuYW1lczsKLQlMaXN0 CSAgICphZGRyYXJnczsKLQlib29sCQlvcmlnaW5hbDsKLQlib29sCQlub3JtYWw7Ci0JYm9vbAkJ aXN0ZW1wOwotCXNsaXN0X25vZGUJbmV4dDsKLX0gU1FMRHJvcE9iamVjdDsKK0V2ZW50VHJpZ2dl clF1ZXJ5U3RhdGUgKmN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZSA9IE5VTEw7CiAKIHN0YXRpYyB2 b2lkIEFsdGVyRXZlbnRUcmlnZ2VyT3duZXJfaW50ZXJuYWwoUmVsYXRpb24gcmVsLAogCQkJCQkJ CQkJCQlIZWFwVHVwbGUgdHVwLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvc2Vj bGFiZWwuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3NlY2xhYmVsLmMKaW5kZXggN2ZmMTZlMy4u MWU4MzFmZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvc2VjbGFiZWwuYworKysg Yi9zcmMvYmFja2VuZC9jb21tYW5kcy9zZWNsYWJlbC5jCkBAIC0xMzQsNiArMTM0LDkgQEAgRXhl Y1NlY0xhYmVsU3RtdChTZWNMYWJlbFN0bXQgKnN0bXQpCiAJCQkJCShlcnJjb2RlKEVSUkNPREVf SU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAogCQkJCQkgZXJybXNnKCJtdXN0IHNwZWNpZnkgcHJv dmlkZXIgd2hlbiBtdWx0aXBsZSBzZWN1cml0eSBsYWJlbCBwcm92aWRlcnMgaGF2ZSBiZWVuIGxv YWRlZCIpKSk7CiAJCXByb3ZpZGVyID0gKExhYmVsUHJvdmlkZXIgKikgbGluaXRpYWwobGFiZWxf cHJvdmlkZXJfbGlzdCk7CisKKwkJLyogQ29weSB0aGUgcHJvdmlkZXIgbmFtZSB0byB0aGUgcGFy c2V0cmVlLCBuZWVkZWQgZm9yIERETCBkZXBhcnNpbmcgb2YgU2VjTGFiZWxTdG10ICovCisJCXN0 bXQtPnByb3ZpZGVyID0gcHN0cmR1cChwcm92aWRlci0+cHJvdmlkZXJfbmFtZSk7CiAJfQogCWVs c2UKIAl7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9zZXF1ZW5jZS5jIGIvc3Jj L2JhY2tlbmQvY29tbWFuZHMvc2VxdWVuY2UuYwppbmRleCBiZmUyNzljLi4zMDQ5ZTBlIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9zZXF1ZW5jZS5jCisrKyBiL3NyYy9iYWNrZW5k L2NvbW1hbmRzL3NlcXVlbmNlLmMKQEAgLTE3MDgsNiArMTcwOCwzOSBAQCBwcm9jZXNzX293bmVk X2J5KFJlbGF0aW9uIHNlcXJlbCwgTGlzdCAqb3duZWRfYnksIGJvb2wgZm9yX2lkZW50aXR5KQog CQlyZWxhdGlvbl9jbG9zZSh0YWJsZXJlbCwgTm9Mb2NrKTsKIH0KIAorLyoKKyAqIFJldHVybiBz ZXF1ZW5jZSBwYXJhbWV0ZXJzLCBkZXRhaWxlZAorICovCitGb3JtX3BnX3NlcXVlbmNlX2RhdGEK K2dldF9zZXF1ZW5jZV92YWx1ZXMoT2lkIHNlcXVlbmNlSWQpCit7CisJQnVmZmVyICAgICAgYnVm OworCVNlcVRhYmxlICAgIGVsbTsKKwlSZWxhdGlvbiAgICBzZXFyZWw7CisJSGVhcFR1cGxlRGF0 YSBzZXF0dXBsZTsKKwlGb3JtX3BnX3NlcXVlbmNlX2RhdGEgc2VxOworCUZvcm1fcGdfc2VxdWVu Y2VfZGF0YSByZXRTZXE7CisKKwkvKiBPcGVuIGFuZCBBY2Nlc3NTaGFyZUxvY2sgc2VxdWVuY2Ug Ki8KKwlpbml0X3NlcXVlbmNlKHNlcXVlbmNlSWQsICZlbG0sICZzZXFyZWwpOworCisJaWYgKHBn X2NsYXNzX2FjbGNoZWNrKHNlcXVlbmNlSWQsIEdldFVzZXJJZCgpLAorCQkJQUNMX1NFTEVDVCB8 IEFDTF9VUERBVEUgfCBBQ0xfVVNBR0UpICE9IEFDTENIRUNLX09LKQorCQllcmVwb3J0KEVSUk9S LAorCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOU1VGRklDSUVOVF9QUklWSUxFR0UpLAorCQkJCQkg ZXJybXNnKCJwZXJtaXNzaW9uIGRlbmllZCBmb3Igc2VxdWVuY2UgJXMiLAorCQkJCQkJCVJlbGF0 aW9uR2V0UmVsYXRpb25OYW1lKHNlcXJlbCkpKSk7CisKKwlzZXEgPSByZWFkX3NlcV90dXBsZShz ZXFyZWwsICZidWYsICZzZXF0dXBsZSk7CisJcmV0U2VxID0gcGFsbG9jKHNpemVvZihGb3JtRGF0 YV9wZ19zZXF1ZW5jZV9kYXRhKSk7CisKKwltZW1jcHkocmV0U2VxLCBzZXEsIHNpemVvZihGb3Jt RGF0YV9wZ19zZXF1ZW5jZV9kYXRhKSk7CisKKwlVbmxvY2tSZWxlYXNlQnVmZmVyKGJ1Zik7CisJ cmVsYXRpb25fY2xvc2Uoc2VxcmVsLCBOb0xvY2spOworCisJcmV0dXJuIHJldFNlcTsKK30KIAog LyoKICAqIFJldHVybiBzZXF1ZW5jZSBwYXJhbWV0ZXJzIGluIGEgbGlzdCBvZiB0aGUgZm9ybSBj cmVhdGVkIGJ5IHRoZSBwYXJzZXIuCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC90Y29wL3V0aWxp dHkuYyBiL3NyYy9iYWNrZW5kL3Rjb3AvdXRpbGl0eS5jCmluZGV4IGM3ZDlkOTYuLjFlODNjZmUg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Rjb3AvdXRpbGl0eS5jCisrKyBiL3NyYy9iYWNrZW5k L3Rjb3AvdXRpbGl0eS5jCkBAIC0xNDQ2LDcgKzE0NDYsOCBAQCBQcm9jZXNzVXRpbGl0eVNsb3co UGFyc2VTdGF0ZSAqcHN0YXRlLAogCQkJCQkJCWFkZHJlc3MgPSBEZWZpbmVDb2xsYXRpb24ocHN0 YXRlLAogCQkJCQkJCQkJCQkJCSAgc3RtdC0+ZGVmbmFtZXMsCiAJCQkJCQkJCQkJCQkJICBzdG10 LT5kZWZpbml0aW9uLAotCQkJCQkJCQkJCQkJCSAgc3RtdC0+aWZfbm90X2V4aXN0cyk7CisJCQkJ CQkJCQkJCQkJICBzdG10LT5pZl9ub3RfZXhpc3RzLAorCQkJCQkJCQkJCQkJCSAgJnNlY29uZGFy eU9iamVjdCk7CiAJCQkJCQkJYnJlYWs7CiAJCQkJCQlkZWZhdWx0OgogCQkJCQkJCWVsb2coRVJS T1IsICJ1bnJlY29nbml6ZWQgZGVmaW5lIHN0bXQgdHlwZTogJWQiLApAQCAtMjE5Niw2ICsyMTk3 LDk0IEBAIFV0aWxpdHlDb250YWluc1F1ZXJ5KE5vZGUgKnBhcnNldHJlZSkKIAl9CiB9CiAKKy8q CisgKiBSZXR1cm4gdGhlIGdpdmVuIG9iamVjdCB0eXBlIGFzIGEgc3RyaW5nLgorICovCitjb25z dCBjaGFyICoKK3N0cmluZ2lmeV9vYmp0eXBlKE9iamVjdFR5cGUgb2JqdHlwZSwgYm9vbCBpc2dy YW50KQoreworCXN3aXRjaCAob2JqdHlwZSkKKwl7CisJCWNhc2UgT0JKRUNUX0FHR1JFR0FURToK KwkJCXJldHVybiAiQUdHUkVHQVRFIjsKKwkJY2FzZSBPQkpFQ1RfQ0FTVDoKKwkJCXJldHVybiAi Q0FTVCI7CisJCWNhc2UgT0JKRUNUX0NPTExBVElPTjoKKwkJCXJldHVybiAiQ09MTEFUSU9OIjsK KwkJY2FzZSBPQkpFQ1RfQ09MVU1OOgorCQkJcmV0dXJuIGlzZ3JhbnQgPyAiVEFCTEUiIDogIkNP TFVNTiI7CisJCWNhc2UgT0JKRUNUX0NPTlZFUlNJT046CisJCQlyZXR1cm4gIkNPTlZFUlNJT04i OworCQljYXNlIE9CSkVDVF9EQVRBQkFTRToKKwkJCXJldHVybiAiREFUQUJBU0UiOworCQljYXNl IE9CSkVDVF9ET01BSU46CisJCQlyZXR1cm4gIkRPTUFJTiI7CisJCWNhc2UgT0JKRUNUX0VWRU5U X1RSSUdHRVI6CisJCQlyZXR1cm4gIkVWRU5UIFRSSUdHRVIiOworCQljYXNlIE9CSkVDVF9FWFRF TlNJT046CisJCQlyZXR1cm4gIkVYVEVOU0lPTiI7CisJCWNhc2UgT0JKRUNUX0ZEVzoKKwkJCXJl dHVybiAiRk9SRUlHTiBEQVRBIFdSQVBQRVIiOworCQljYXNlIE9CSkVDVF9GT1JFSUdOX1NFUlZF UjoKKwkJCXJldHVybiBpc2dyYW50ID8gIkZPUkVJR04gU0VSVkVSIiA6ICJTRVJWRVIiOworCQlj YXNlIE9CSkVDVF9GT1JFSUdOX1RBQkxFOgorCQkJcmV0dXJuICJGT1JFSUdOIFRBQkxFIjsKKwkJ Y2FzZSBPQkpFQ1RfRlVOQ1RJT046CisJCQlyZXR1cm4gIkZVTkNUSU9OIjsKKwkJY2FzZSBPQkpF Q1RfSU5ERVg6CisJCQlyZXR1cm4gIklOREVYIjsKKwkJY2FzZSBPQkpFQ1RfTEFOR1VBR0U6CisJ CQlyZXR1cm4gIkxBTkdVQUdFIjsKKwkJY2FzZSBPQkpFQ1RfTEFSR0VPQkpFQ1Q6CisJCQlyZXR1 cm4gIkxBUkdFIE9CSkVDVCI7CisJCWNhc2UgT0JKRUNUX01BVFZJRVc6CisJCQlyZXR1cm4gIk1B VEVSSUFMSVpFRCBWSUVXIjsKKwkJY2FzZSBPQkpFQ1RfT1BDTEFTUzoKKwkJCXJldHVybiAiT1BF UkFUT1IgQ0xBU1MiOworCQljYXNlIE9CSkVDVF9PUEVSQVRPUjoKKwkJCXJldHVybiAiT1BFUkFU T1IiOworCQljYXNlIE9CSkVDVF9PUEZBTUlMWToKKwkJCXJldHVybiAiT1BFUkFUT1IgRkFNSUxZ IjsKKwkJY2FzZSBPQkpFQ1RfUE9MSUNZOgorCQkJcmV0dXJuICJQT0xJQ1kiOworCQljYXNlIE9C SkVDVF9QUk9DRURVUkU6CisJCQlyZXR1cm4gIlBST0NFRFVSRSI7CisJCWNhc2UgT0JKRUNUX1JP TEU6CisJCQlyZXR1cm4gIlJPTEUiOworCQljYXNlIE9CSkVDVF9ST1VUSU5FOgorCQkJcmV0dXJu ICJST1VUSU5FIjsKKwkJY2FzZSBPQkpFQ1RfUlVMRToKKwkJCXJldHVybiAiUlVMRSI7CisJCWNh c2UgT0JKRUNUX1NDSEVNQToKKwkJCXJldHVybiAiU0NIRU1BIjsKKwkJY2FzZSBPQkpFQ1RfU0VR VUVOQ0U6CisJCQlyZXR1cm4gIlNFUVVFTkNFIjsKKwkJY2FzZSBPQkpFQ1RfU1RBVElTVElDX0VY VDoKKwkJCXJldHVybiAiU1RBVElTVElDUyI7CisJCWNhc2UgT0JKRUNUX1RBQkxFOgorCQkJcmV0 dXJuICJUQUJMRSI7CisJCWNhc2UgT0JKRUNUX1RBQkxFU1BBQ0U6CisJCQlyZXR1cm4gIlRBQkxF U1BBQ0UiOworCQljYXNlIE9CSkVDVF9UUklHR0VSOgorCQkJcmV0dXJuICJUUklHR0VSIjsKKwkJ Y2FzZSBPQkpFQ1RfVFNDT05GSUdVUkFUSU9OOgorCQkJcmV0dXJuICJURVhUIFNFQVJDSCBDT05G SUdVUkFUSU9OIjsKKwkJY2FzZSBPQkpFQ1RfVFNESUNUSU9OQVJZOgorCQkJcmV0dXJuICJURVhU IFNFQVJDSCBESUNUSU9OQVJZIjsKKwkJY2FzZSBPQkpFQ1RfVFNQQVJTRVI6CisJCQlyZXR1cm4g IlRFWFQgU0VBUkNIIFBBUlNFUiI7CisJCWNhc2UgT0JKRUNUX1RTVEVNUExBVEU6CisJCQlyZXR1 cm4gIlRFWFQgU0VBUkNIIFRFTVBMQVRFIjsKKwkJY2FzZSBPQkpFQ1RfVFlQRToKKwkJCXJldHVy biAiVFlQRSI7CisJCWNhc2UgT0JKRUNUX1VTRVJfTUFQUElORzoKKwkJCXJldHVybiAiVVNFUiBN QVBQSU5HIjsKKwkJY2FzZSBPQkpFQ1RfVklFVzoKKwkJCXJldHVybiAiVklFVyI7CisJCWRlZmF1 bHQ6CisJCQllbG9nKEVSUk9SLCAidW5zdXBwb3J0ZWQgb2JqZWN0IHR5cGUgJWQiLCBvYmp0eXBl KTsKKwl9Cit9CiAKIC8qCiAgKiBBbHRlck9iamVjdFR5cGVDb21tYW5kVGFnCmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC91dGlscy9hZHQvZm9ybWF0X3R5cGUuYyBiL3NyYy9iYWNrZW5kL3V0aWxz L2FkdC9mb3JtYXRfdHlwZS5jCmluZGV4IDEyNDAyYTAuLjdiNDc2YWQgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL3V0aWxzL2FkdC9mb3JtYXRfdHlwZS5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxz L2FkdC9mb3JtYXRfdHlwZS5jCkBAIC0yNyw4ICsyNyw2IEBACiAjaW5jbHVkZSAidXRpbHMvbnVt ZXJpYy5oIgogI2luY2x1ZGUgInV0aWxzL3N5c2NhY2hlLmgiCiAKLXN0YXRpYyBjaGFyICpwcmlu dFR5cG1vZChjb25zdCBjaGFyICp0eXBuYW1lLCBpbnQzMiB0eXBtb2QsIE9pZCB0eXBtb2RvdXQp OwotCiAKIC8qCiAgKiBTUUwgZnVuY3Rpb246IGZvcm1hdF90eXBlKHR5cGVfb2lkLCB0eXBlbW9k KQpAQCAtMzYzLDcgKzM2MSw3IEBAIGZvcm1hdF90eXBlX3dpdGhfdHlwZW1vZChPaWQgdHlwZV9v aWQsIGludDMyIHR5cGVtb2QpCiAvKgogICogQWRkIHR5cG1vZCBkZWNvcmF0aW9uIHRvIHRoZSBi YXNpYyB0eXBlIG5hbWUKICAqLwotc3RhdGljIGNoYXIgKgorY2hhciAqCiBwcmludFR5cG1vZChj b25zdCBjaGFyICp0eXBuYW1lLCBpbnQzMiB0eXBtb2QsIE9pZCB0eXBtb2RvdXQpCiB7CiAJY2hh cgkgICAqcmVzOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3JlZ3Byb2MuYyBi L3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9yZWdwcm9jLmMKaW5kZXggMjk2OTMwZS4uMTI4YzE3OSAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3JlZ3Byb2MuYworKysgYi9zcmMvYmFj a2VuZC91dGlscy9hZHQvcmVncHJvYy5jCkBAIC00OSw2ICs0OSw4IEBAIHN0YXRpYyBib29sIHBh cnNlTmFtZUFuZEFyZ1R5cGVzKGNvbnN0IGNoYXIgKnN0cmluZywgYm9vbCBhbGxvd05vbmUsCiAJ CQkJCQkJCSBMaXN0ICoqbmFtZXMsIGludCAqbmFyZ3MsIE9pZCAqYXJndHlwZXMsCiAJCQkJCQkJ CSBOb2RlICplc2NvbnRleHQpOwogCitzdGF0aWMgdm9pZCBmb3JtYXRfcHJvY2VkdXJlX2FyZ3Nf aW50ZXJuYWwoRm9ybV9wZ19wcm9jIHByb2Nmb3JtLAorCQkJCQkJCQkJCSAgIFN0cmluZ0luZm8g YnVmLCBib29sIGZvcmNlX3F1YWxpZnkpOwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCSBV U0VSIEkvTyBST1VUSU5FUwkJCQkJCQkJCQkJCQkJICoKQEAgLTMwOCw2ICszMTAsMjkgQEAgZm9y bWF0X3Byb2NlZHVyZV9xdWFsaWZpZWQoT2lkIHByb2NlZHVyZV9vaWQpCiB9CiAKIC8qCisgKiBm b3JtYXRfcHJvY2VkdXJlX2FyZ3MgICAtIGNvbnZlcnRzIHByb2MgT0lEIHRvICIoYXJncykiCisg Ki8KK2NoYXIgKgorZm9ybWF0X3Byb2NlZHVyZV9hcmdzKE9pZCBwcm9jZWR1cmVfb2lkLCBib29s IGZvcmNlX3F1YWxpZnkpCit7CisJU3RyaW5nSW5mb0RhdGEgYnVmOworCUhlYXBUdXBsZSAgIHBy b2N0dXA7CisJRm9ybV9wZ19wcm9jIHByb2Nmb3JtOworCisJcHJvY3R1cCA9IFNlYXJjaFN5c0Nh Y2hlMShQUk9DT0lELCBPYmplY3RJZEdldERhdHVtKHByb2NlZHVyZV9vaWQpKTsKKwlpZiAoIUhl YXBUdXBsZUlzVmFsaWQocHJvY3R1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFp bGVkIGZvciBwcm9jZWR1cmUgJXUiLCBwcm9jZWR1cmVfb2lkKTsKKwlwcm9jZm9ybSA9IChGb3Jt X3BnX3Byb2MpIEdFVFNUUlVDVChwcm9jdHVwKTsKKworCWluaXRTdHJpbmdJbmZvKCZidWYpOwor CWZvcm1hdF9wcm9jZWR1cmVfYXJnc19pbnRlcm5hbChwcm9jZm9ybSwgJmJ1ZiwgZm9yY2VfcXVh bGlmeSk7CisKKwlSZWxlYXNlU3lzQ2FjaGUocHJvY3R1cCk7CisKKwlyZXR1cm4gYnVmLmRhdGE7 Cit9CisKKy8qCiAgKiBmb3JtYXRfcHJvY2VkdXJlX2V4dGVuZGVkIC0gY29udmVydHMgcHJvY2Vk dXJlIE9JRCB0byAicHJvX25hbWUoYXJncykiCiAgKgogICogVGhpcyBleHBvcnRzIHRoZSB1c2Vm dWwgZnVuY3Rpb25hbGl0eSBvZiByZWdwcm9jZWR1cmVvdXQgZm9yIHVzZQpAQCAtMjAxNiwzICsy MDQxLDMxIEBAIHBhcnNlTmFtZUFuZEFyZ1R5cGVzKGNvbnN0IGNoYXIgKnN0cmluZywgYm9vbCBh bGxvd05vbmUsIExpc3QgKipuYW1lcywKIAogCXJldHVybiB0cnVlOwogfQorCisvKgorICogQXBw ZW5kIHRoZSBwYXJlbnRoZXNpemVkIGFyZ3VtZW50cyBvZiB0aGUgZ2l2ZW4gcGdfcHJvYyByb3cg aW50byB0aGUgb3V0cHV0CisgKiBidWZmZXIuIGZvcmNlX3F1YWxpZnkgaW5kaWNhdGVzIHdoZXRo ZXIgdG8gc2NoZW1hLXF1YWxpZnkgdHlwZSBuYW1lcworICogcmVnYXJkbGVzcyBvZiB2aXNpYmls aXR5LgorICovCitzdGF0aWMgdm9pZAorZm9ybWF0X3Byb2NlZHVyZV9hcmdzX2ludGVybmFsKEZv cm1fcGdfcHJvYyBwcm9jZm9ybSwgU3RyaW5nSW5mbyBidWYsCisJCQkJCQkJICAgYm9vbCBmb3Jj ZV9xdWFsaWZ5KQoreworCWludAkJCWk7CisJY2hhcioJCSgqZnVuY1syXSkoT2lkKSA9IHtmb3Jt YXRfdHlwZV9iZSwgZm9ybWF0X3R5cGVfYmVfcXVhbGlmaWVkfTsKKworCWFwcGVuZFN0cmluZ0lu Zm9DaGFyKGJ1ZiwgJygnKTsKKwlmb3IgKGkgPSAwOyBpIDwgcHJvY2Zvcm0tPnByb25hcmdzOyBp KyspCisJeworCQlPaWQJCQl0aGlzYXJndHlwZSA9IHByb2Nmb3JtLT5wcm9hcmd0eXBlcy52YWx1 ZXNbaV07CisJCWNoYXIJICAgKmFyZ3R5cGUgPSBOVUxMOworCisJCWlmIChpID4gMCkKKwkJCWFw cGVuZFN0cmluZ0luZm9DaGFyKGJ1ZiwgJywnKTsKKworCQlhcmd0eXBlID0gZnVuY1tmb3JjZV9x dWFsaWZ5XSh0aGlzYXJndHlwZSk7CisJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCBhcmd0 eXBlKTsKKwkJcGZyZWUoYXJndHlwZSk7CisJfQorCWFwcGVuZFN0cmluZ0luZm9DaGFyKGJ1Ziwg JyknKTsKK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9ydWxldXRpbHMuYyBi L3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9ydWxldXRpbHMuYwppbmRleCA5YWM0MmVmLi4xZjQxMjA2 IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvcnVsZXV0aWxzLmMKKysrIGIvc3Jj L2JhY2tlbmQvdXRpbHMvYWR0L3J1bGV1dGlscy5jCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVk ZSAiY2F0YWxvZy9wZ19vcGVyYXRvci5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfcGFydGl0aW9u ZWRfdGFibGUuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX3Byb2MuaCIKKyNpbmNsdWRlICJjYXRh bG9nL3BnX3Jld3JpdGUuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX3N0YXRpc3RpY19leHQuaCIK ICNpbmNsdWRlICJjYXRhbG9nL3BnX3RyaWdnZXIuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX3R5 cGUuaCIKQEAgLTM1OCw3ICszNTksNiBAQCBzdGF0aWMgaW50CXByaW50X2Z1bmN0aW9uX2FyZ3Vt ZW50cyhTdHJpbmdJbmZvIGJ1ZiwgSGVhcFR1cGxlIHByb2N0dXAsCiAJCQkJCQkJCQkgYm9vbCBw cmludF90YWJsZV9hcmdzLCBib29sIHByaW50X2RlZmF1bHRzKTsKIHN0YXRpYyB2b2lkIHByaW50 X2Z1bmN0aW9uX3JldHR5cGUoU3RyaW5nSW5mbyBidWYsIEhlYXBUdXBsZSBwcm9jdHVwKTsKIHN0 YXRpYyB2b2lkIHByaW50X2Z1bmN0aW9uX3RyZnR5cGVzKFN0cmluZ0luZm8gYnVmLCBIZWFwVHVw bGUgcHJvY3R1cCk7Ci1zdGF0aWMgdm9pZCBwcmludF9mdW5jdGlvbl9zcWxib2R5KFN0cmluZ0lu Zm8gYnVmLCBIZWFwVHVwbGUgcHJvY3R1cCk7CiBzdGF0aWMgdm9pZCBzZXRfcnRhYmxlX25hbWVz KGRlcGFyc2VfbmFtZXNwYWNlICpkcG5zLCBMaXN0ICpwYXJlbnRfbmFtZXNwYWNlcywKIAkJCQkJ CQkgQml0bWFwc2V0ICpyZWxzX3VzZWQpOwogc3RhdGljIHZvaWQgc2V0X2RlcGFyc2VfZm9yX3F1 ZXJ5KGRlcGFyc2VfbmFtZXNwYWNlICpkcG5zLCBRdWVyeSAqcXVlcnksCkBAIC00ODIsMjIgKzQ4 MiwxNSBAQCBzdGF0aWMgdm9pZCBnZXRfZnJvbV9jbGF1c2VfY29sZGVmbGlzdChSYW5nZVRibEZ1 bmN0aW9uICpydGZ1bmMsCiAJCQkJCQkJCQkgICBkZXBhcnNlX2NvbnRleHQgKmNvbnRleHQpOwog c3RhdGljIHZvaWQgZ2V0X3RhYmxlc2FtcGxlX2RlZihUYWJsZVNhbXBsZUNsYXVzZSAqdGFibGVz YW1wbGUsCiAJCQkJCQkJCWRlcGFyc2VfY29udGV4dCAqY29udGV4dCk7Ci1zdGF0aWMgdm9pZCBn ZXRfb3BjbGFzc19uYW1lKE9pZCBvcGNsYXNzLCBPaWQgYWN0dWFsX2RhdGF0eXBlLAotCQkJCQkJ CSBTdHJpbmdJbmZvIGJ1Zik7CiBzdGF0aWMgTm9kZSAqcHJvY2Vzc0luZGlyZWN0aW9uKE5vZGUg Km5vZGUsIGRlcGFyc2VfY29udGV4dCAqY29udGV4dCk7CiBzdGF0aWMgdm9pZCBwcmludFN1YnNj cmlwdHMoU3Vic2NyaXB0aW5nUmVmICpzYnNyZWYsIGRlcGFyc2VfY29udGV4dCAqY29udGV4dCk7 CiBzdGF0aWMgY2hhciAqZ2V0X3JlbGF0aW9uX25hbWUoT2lkIHJlbGlkKTsKIHN0YXRpYyBjaGFy ICpnZW5lcmF0ZV9yZWxhdGlvbl9uYW1lKE9pZCByZWxpZCwgTGlzdCAqbmFtZXNwYWNlcyk7CiBz dGF0aWMgY2hhciAqZ2VuZXJhdGVfcXVhbGlmaWVkX3JlbGF0aW9uX25hbWUoT2lkIHJlbGlkKTsK LXN0YXRpYyBjaGFyICpnZW5lcmF0ZV9mdW5jdGlvbl9uYW1lKE9pZCBmdW5jaWQsIGludCBuYXJn cywKLQkJCQkJCQkJCUxpc3QgKmFyZ25hbWVzLCBPaWQgKmFyZ3R5cGVzLAotCQkJCQkJCQkJYm9v bCBoYXNfdmFyaWFkaWMsIGJvb2wgKnVzZV92YXJpYWRpY19wLAotCQkJCQkJCQkJUGFyc2VFeHBy S2luZCBzcGVjaWFsX2V4cHJraW5kKTsKIHN0YXRpYyBjaGFyICpnZW5lcmF0ZV9vcGVyYXRvcl9u YW1lKE9pZCBvcGVyaWQsIE9pZCBhcmcxLCBPaWQgYXJnMik7CiBzdGF0aWMgdm9pZCBhZGRfY2Fz dF90byhTdHJpbmdJbmZvIGJ1ZiwgT2lkIHR5cGlkKTsKIHN0YXRpYyBjaGFyICpnZW5lcmF0ZV9x dWFsaWZpZWRfdHlwZV9uYW1lKE9pZCB0eXBpZCk7CiBzdGF0aWMgdGV4dCAqc3RyaW5nX3RvX3Rl eHQoY2hhciAqc3RyKTsKLXN0YXRpYyBjaGFyICpmbGF0dGVuX3JlbG9wdGlvbnMoT2lkIHJlbGlk KTsKIHN0YXRpYyB2b2lkIGdldF9yZWxvcHRpb25zKFN0cmluZ0luZm8gYnVmLCBEYXR1bSByZWxv cHRpb25zKTsKIAogI2RlZmluZSBvbmx5X21hcmtlcihydGUpICAoKHJ0ZSktPmluaCA/ICIiIDog Ik9OTFkgIikKQEAgLTU0NSw2ICs1MzgsMTA0IEBAIHBnX2dldF9ydWxlZGVmX2V4dChQR19GVU5D VElPTl9BUkdTKQogCVBHX1JFVFVSTl9URVhUX1Aoc3RyaW5nX3RvX3RleHQocmVzKSk7CiB9CiAK Ky8qCisgKiBHaXZlbiBhIHBhaXIgb2YgRGF0dW0gY29ycmVzcG9uZGluZyB0byBhIHJ1bGUncyBw Z19yZXdyaXRlLmV2X3F1YWwgYW5kCisgKiBldl9hY3Rpb24gY29sdW1ucywgcmV0dXJuIHRoZWly IHRleHQgcmVwcmVzZW50YXRpb247IGV2X3F1YWwgYXMgYSBzaW5nbGUKKyAqIHN0cmluZyBpbiB3 aGVyZUNsYXVzZSBhbmQgZXZfYWN0aW9uIGFzIGEgTGlzdCBvZiBzdHJpbmdzICh3aGljaCBtaWdo dCBiZQorICogTklMLCBzaWduYWxsaW5nIE5PVEhJTkcpIGluIGFjdGlvbnMuCisgKi8KK3ZvaWQK K3BnX2dldF9ydWxlZGVmX2RldGFpbGVkKERhdHVtIGV2X3F1YWwsIERhdHVtIGV2X2FjdGlvbiwK KwkJCQkJCWNoYXIgKip3aGVyZUNsYXVzZSwgTGlzdCAqKmFjdGlvbnMpCit7CisJaW50CQkJcHJl dHR5RmxhZ3MgPSAwOworCWNoYXIJICAgKnF1YWxzdHIgPSBUZXh0RGF0dW1HZXRDU3RyaW5nKGV2 X3F1YWwpOworCWNoYXIJICAgKmFjdGlvbnN0ciA9IFRleHREYXR1bUdldENTdHJpbmcoZXZfYWN0 aW9uKTsKKwlMaXN0CSAgICphY3Rpb25Ob2RlTGlzdCA9IChMaXN0ICopIHN0cmluZ1RvTm9kZShh Y3Rpb25zdHIpOworCVN0cmluZ0luZm9EYXRhIGJ1ZjsKKworCSp3aGVyZUNsYXVzZSA9IE5VTEw7 CisJKmFjdGlvbnMgPSBOSUw7CisJaW5pdFN0cmluZ0luZm8oJmJ1Zik7CisJaWYgKHN0cmxlbihx dWFsc3RyKSA+IDAgJiYgc3RyY21wKHF1YWxzdHIsICI8PiIpICE9IDApCisJeworCQlOb2RlCSAg ICpxdWFsOworCQlRdWVyeQkgICAqcXVlcnk7CisJCWRlcGFyc2VfY29udGV4dCBjb250ZXh0Owor CQlkZXBhcnNlX25hbWVzcGFjZSBkcG5zOworCisJCXF1YWwgPSBzdHJpbmdUb05vZGUocXVhbHN0 cik7CisKKwkJcXVlcnkgPSAoUXVlcnkgKikgbGluaXRpYWwoYWN0aW9uTm9kZUxpc3QpOworCQlx dWVyeSA9IGdldEluc2VydFNlbGVjdFF1ZXJ5KHF1ZXJ5LCBOVUxMKTsKKworCQlBY3F1aXJlUmV3 cml0ZUxvY2tzKHF1ZXJ5LCBmYWxzZSwgZmFsc2UpOworCisJCWNvbnRleHQuYnVmID0gJmJ1ZjsK KwkJY29udGV4dC5uYW1lc3BhY2VzID0gbGlzdF9tYWtlMSgmZHBucyk7CisJCWNvbnRleHQud2lu ZG93Q2xhdXNlID0gTklMOworCQljb250ZXh0LndpbmRvd1RMaXN0ID0gTklMOworCQljb250ZXh0 LnZhcnByZWZpeCA9IChsaXN0X2xlbmd0aChxdWVyeS0+cnRhYmxlKSAhPSAxKTsKKwkJY29udGV4 dC5wcmV0dHlGbGFncyA9IHByZXR0eUZsYWdzOworCQljb250ZXh0LndyYXBDb2x1bW4gPSBXUkFQ X0NPTFVNTl9ERUZBVUxUOworCQljb250ZXh0LmluZGVudExldmVsID0gUFJFVFRZSU5ERU5UX1NU RDsKKworCQlzZXRfZGVwYXJzZV9mb3JfcXVlcnkoJmRwbnMsIHF1ZXJ5LCBOSUwpOworCisJCWdl dF9ydWxlX2V4cHIocXVhbCwgJmNvbnRleHQsIGZhbHNlKTsKKworCQkqd2hlcmVDbGF1c2UgPSBw c3RyZHVwKGJ1Zi5kYXRhKTsKKwl9CisKKwlpZiAobGlzdF9sZW5ndGgoYWN0aW9uTm9kZUxpc3Qp ID4gMCkKKwl7CisJCUxpc3RDZWxsICAgKmNlbGw7CisKKwkJZm9yZWFjaChjZWxsLCBhY3Rpb25O b2RlTGlzdCkKKwkJeworCQkJUXVlcnkJICAgKnF1ZXJ5ID0gKFF1ZXJ5ICopIGxmaXJzdChjZWxs KTsKKworCQkJaWYgKHF1ZXJ5LT5jb21tYW5kVHlwZSA9PSBDTURfTk9USElORykKKwkJCQljb250 aW51ZTsKKworCQkJcmVzZXRTdHJpbmdJbmZvKCZidWYpOworCQkJZ2V0X3F1ZXJ5X2RlZihxdWVy eSwgJmJ1ZiwgTklMLCBOVUxMLCB0cnVlLAorCQkJCQkJICBwcmV0dHlGbGFncywgV1JBUF9DT0xV TU5fREVGQVVMVCwgMCk7CisJCQkqYWN0aW9ucyA9IGxhcHBlbmQoKmFjdGlvbnMsIHBzdHJkdXAo YnVmLmRhdGEpKTsKKwkJfQorCX0KK30KKworLyoKKyAqIFRvIGdldCB0aGUgcmV3cml0ZSBydWxl IG9mIGEgdmlldyB3aGVuIHRoZSBDUkVBVEUgVklFVyBjb21tYW5kIGV4ZWN1dGlvbiBpcworICog c3RpbGwgaW4gcHJvZ3Jlc3M6IHdlIHNlYXJjaCB0aGUgc3lzdGVtIGNhY2hlIFJVTEVSRUxOQU1F IHRvIGdldCB0aGUgcmV3cml0ZQorICogcnVsZSBvZiB0aGUgdmlldyBhcyBvcHBvc2VkIHRvIHF1 ZXJ5aW5nIHBnX3Jld3JpdGUgYXMgaW4gcGdfZ2V0X3ZpZXdkZWZfd29ya2VyKCksCisgKiB3aGlj aCB3aWxsIHJldHVybiBlbXB0eSByZXN1bHQuCisgKi8KK2NoYXIgKgorcGdfZ2V0X3ZpZXdkZWZf aW50ZXJuYWwoT2lkIHZpZXdvaWQpCit7CisJU3RyaW5nSW5mb0RhdGEgYnVmOworCVJlbGF0aW9u CXBnX3Jld3JpdGU7CisJSGVhcFR1cGxlCXJ1bGV0dXA7CisJVHVwbGVEZXNjCXJ1bGV0dGM7CisK Kwlpbml0U3RyaW5nSW5mbygmYnVmKTsKKwlwZ19yZXdyaXRlID0gdGFibGVfb3BlbihSZXdyaXRl UmVsYXRpb25JZCwgQWNjZXNzU2hhcmVMb2NrKTsKKworCXJ1bGV0dXAgPSBTZWFyY2hTeXNDYWNo ZTIoUlVMRVJFTE5BTUUsCisJCQkJCQkJICBPYmplY3RJZEdldERhdHVtKHZpZXdvaWQpLAorCQkJ CQkJCSAgUG9pbnRlckdldERhdHVtKFZpZXdTZWxlY3RSdWxlTmFtZSkpOworCWlmICghSGVhcFR1 cGxlSXNWYWxpZChydWxldHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQg Zm9yIHJld3JpdGUgcnVsZSBmb3IgdmlldyB3aXRoIE9JRCAldSIsIHZpZXdvaWQpOworCisJcnVs ZXR0YyA9IHBnX3Jld3JpdGUtPnJkX2F0dDsKKwltYWtlX3ZpZXdkZWYoJmJ1ZiwgcnVsZXR1cCwg cnVsZXR0YywgMCwgV1JBUF9DT0xVTU5fREVGQVVMVCk7CisJUmVsZWFzZVN5c0NhY2hlKHJ1bGV0 dXApOworCXRhYmxlX2Nsb3NlKHBnX3Jld3JpdGUsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwlyZXR1 cm4gYnVmLmRhdGE7Cit9CiAKIHN0YXRpYyBjaGFyICoKIHBnX2dldF9ydWxlZGVmX3dvcmtlcihP aWQgcnVsZW9pZCwgaW50IHByZXR0eUZsYWdzKQpAQCAtMTAxNSw2NSArMTEwNiwxMiBAQCBwZ19n ZXRfdHJpZ2dlcmRlZl93b3JrZXIoT2lkIHRyaWdpZCwgYm9vbCBwcmV0dHkpCiAJaWYgKCFpc251 bGwpCiAJewogCQlOb2RlCSAgICpxdWFsOwotCQljaGFyCQlyZWxraW5kOwotCQlkZXBhcnNlX2Nv bnRleHQgY29udGV4dDsKLQkJZGVwYXJzZV9uYW1lc3BhY2UgZHBuczsKLQkJUmFuZ2VUYmxFbnRy eSAqb2xkcnRlOwotCQlSYW5nZVRibEVudHJ5ICpuZXdydGU7Ci0KLQkJYXBwZW5kU3RyaW5nSW5m b1N0cmluZygmYnVmLCAiV0hFTiAoIik7CisJCWNoYXIJICAgKnF1YWxzdHI7CiAKIAkJcXVhbCA9 IHN0cmluZ1RvTm9kZShUZXh0RGF0dW1HZXRDU3RyaW5nKHZhbHVlKSk7CisJCXF1YWxzdHIgPSBw Z19nZXRfdHJpZ2dlcl93aGVuY2xhdXNlKHRyaWdyZWMsIHF1YWwsIHByZXR0eSk7CiAKLQkJcmVs a2luZCA9IGdldF9yZWxfcmVsa2luZCh0cmlncmVjLT50Z3JlbGlkKTsKLQotCQkvKiBCdWlsZCBt aW5pbWFsIE9MRCBhbmQgTkVXIFJURXMgZm9yIHRoZSByZWwgKi8KLQkJb2xkcnRlID0gbWFrZU5v ZGUoUmFuZ2VUYmxFbnRyeSk7Ci0JCW9sZHJ0ZS0+cnRla2luZCA9IFJURV9SRUxBVElPTjsKLQkJ b2xkcnRlLT5yZWxpZCA9IHRyaWdyZWMtPnRncmVsaWQ7Ci0JCW9sZHJ0ZS0+cmVsa2luZCA9IHJl bGtpbmQ7Ci0JCW9sZHJ0ZS0+cmVsbG9ja21vZGUgPSBBY2Nlc3NTaGFyZUxvY2s7Ci0JCW9sZHJ0 ZS0+YWxpYXMgPSBtYWtlQWxpYXMoIm9sZCIsIE5JTCk7Ci0JCW9sZHJ0ZS0+ZXJlZiA9IG9sZHJ0 ZS0+YWxpYXM7Ci0JCW9sZHJ0ZS0+bGF0ZXJhbCA9IGZhbHNlOwotCQlvbGRydGUtPmluaCA9IGZh bHNlOwotCQlvbGRydGUtPmluRnJvbUNsID0gdHJ1ZTsKLQotCQluZXdydGUgPSBtYWtlTm9kZShS YW5nZVRibEVudHJ5KTsKLQkJbmV3cnRlLT5ydGVraW5kID0gUlRFX1JFTEFUSU9OOwotCQluZXdy dGUtPnJlbGlkID0gdHJpZ3JlYy0+dGdyZWxpZDsKLQkJbmV3cnRlLT5yZWxraW5kID0gcmVsa2lu ZDsKLQkJbmV3cnRlLT5yZWxsb2NrbW9kZSA9IEFjY2Vzc1NoYXJlTG9jazsKLQkJbmV3cnRlLT5h bGlhcyA9IG1ha2VBbGlhcygibmV3IiwgTklMKTsKLQkJbmV3cnRlLT5lcmVmID0gbmV3cnRlLT5h bGlhczsKLQkJbmV3cnRlLT5sYXRlcmFsID0gZmFsc2U7Ci0JCW5ld3J0ZS0+aW5oID0gZmFsc2U7 Ci0JCW5ld3J0ZS0+aW5Gcm9tQ2wgPSB0cnVlOwotCi0JCS8qIEJ1aWxkIHR3by1lbGVtZW50IHJ0 YWJsZSAqLwotCQltZW1zZXQoJmRwbnMsIDAsIHNpemVvZihkcG5zKSk7Ci0JCWRwbnMucnRhYmxl ID0gbGlzdF9tYWtlMihvbGRydGUsIG5ld3J0ZSk7Ci0JCWRwbnMuc3VicGxhbnMgPSBOSUw7Ci0J CWRwbnMuY3RlcyA9IE5JTDsKLQkJZHBucy5hcHBlbmRyZWxzID0gTlVMTDsKLQkJc2V0X3J0YWJs ZV9uYW1lcygmZHBucywgTklMLCBOVUxMKTsKLQkJc2V0X3NpbXBsZV9jb2x1bW5fbmFtZXMoJmRw bnMpOwotCi0JCS8qIFNldCB1cCBjb250ZXh0IHdpdGggb25lLWRlZXAgbmFtZXNwYWNlIHN0YWNr ICovCi0JCWNvbnRleHQuYnVmID0gJmJ1ZjsKLQkJY29udGV4dC5uYW1lc3BhY2VzID0gbGlzdF9t YWtlMSgmZHBucyk7Ci0JCWNvbnRleHQud2luZG93Q2xhdXNlID0gTklMOwotCQljb250ZXh0Lndp bmRvd1RMaXN0ID0gTklMOwotCQljb250ZXh0LnZhcnByZWZpeCA9IHRydWU7Ci0JCWNvbnRleHQu cHJldHR5RmxhZ3MgPSBHRVRfUFJFVFRZX0ZMQUdTKHByZXR0eSk7Ci0JCWNvbnRleHQud3JhcENv bHVtbiA9IFdSQVBfQ09MVU1OX0RFRkFVTFQ7Ci0JCWNvbnRleHQuaW5kZW50TGV2ZWwgPSBQUkVU VFlJTkRFTlRfU1REOwotCQljb250ZXh0LnNwZWNpYWxfZXhwcmtpbmQgPSBFWFBSX0tJTkRfTk9O RTsKLQkJY29udGV4dC5hcHBlbmRwYXJlbnRzID0gTlVMTDsKLQotCQlnZXRfcnVsZV9leHByKHF1 YWwsICZjb250ZXh0LCBmYWxzZSk7Ci0KLQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmYnVmLCAi KSAiKTsKKwkJYXBwZW5kU3RyaW5nSW5mbygmYnVmLCAiV0hFTiAoJXMpICIsIHF1YWxzdHIpOwog CX0KIAogCWFwcGVuZFN0cmluZ0luZm8oJmJ1ZiwgIkVYRUNVVEUgRlVOQ1RJT04gJXMoIiwKQEAg LTExMTQsNiArMTE1Miw2OSBAQCBwZ19nZXRfdHJpZ2dlcmRlZl93b3JrZXIoT2lkIHRyaWdpZCwg Ym9vbCBwcmV0dHkpCiAJcmV0dXJuIGJ1Zi5kYXRhOwogfQogCisvKgorICogUGFyc2UgYmFjayB0 aGUgVHJpZ2dlcldoZW4gY2xhdXNlIG9mIGEgdHJpZ2dlciBnaXZlbiB0aGUgcGdfdHJpZ2dlciBy ZWNvcmQgYW5kCisgKiB0aGUgZXhwcmVzc2lvbiB0cmVlIChpbiBub2RlVG9TdHJpbmcoKSByZXBy ZXNlbnRhdGlvbikgZnJvbSBwZ190cmlnZ2VyLnRncXVhbAorICogZm9yIHRoZSB0cmlnZ2VyJ3Mg V0hFTiBjb25kaXRpb24uCisgKi8KK2NoYXIgKgorcGdfZ2V0X3RyaWdnZXJfd2hlbmNsYXVzZShG b3JtX3BnX3RyaWdnZXIgdHJpZ3JlYywgTm9kZSAqd2hlbkNsYXVzZSwgYm9vbCBwcmV0dHkpCit7 CisJU3RyaW5nSW5mb0RhdGEgYnVmOworCWNoYXIJCXJlbGtpbmQ7CisJZGVwYXJzZV9jb250ZXh0 IGNvbnRleHQ7CisJZGVwYXJzZV9uYW1lc3BhY2UgZHBuczsKKwlSYW5nZVRibEVudHJ5ICpvbGRy dGU7CisJUmFuZ2VUYmxFbnRyeSAqbmV3cnRlOworCisJaW5pdFN0cmluZ0luZm8oJmJ1Zik7CisK KwlyZWxraW5kID0gZ2V0X3JlbF9yZWxraW5kKHRyaWdyZWMtPnRncmVsaWQpOworCisJLyogQnVp bGQgbWluaW1hbCBPTEQgYW5kIE5FVyBSVEVzIGZvciB0aGUgcmVsICovCisJb2xkcnRlID0gbWFr ZU5vZGUoUmFuZ2VUYmxFbnRyeSk7CisJb2xkcnRlLT5ydGVraW5kID0gUlRFX1JFTEFUSU9OOwor CW9sZHJ0ZS0+cmVsaWQgPSB0cmlncmVjLT50Z3JlbGlkOworCW9sZHJ0ZS0+cmVsa2luZCA9IHJl bGtpbmQ7CisJb2xkcnRlLT5hbGlhcyA9IG1ha2VBbGlhcygib2xkIiwgTklMKTsKKwlvbGRydGUt PmVyZWYgPSBvbGRydGUtPmFsaWFzOworCW9sZHJ0ZS0+bGF0ZXJhbCA9IGZhbHNlOworCW9sZHJ0 ZS0+aW5oID0gZmFsc2U7CisJb2xkcnRlLT5pbkZyb21DbCA9IHRydWU7CisKKwluZXdydGUgPSBt YWtlTm9kZShSYW5nZVRibEVudHJ5KTsKKwluZXdydGUtPnJ0ZWtpbmQgPSBSVEVfUkVMQVRJT047 CisJbmV3cnRlLT5yZWxpZCA9IHRyaWdyZWMtPnRncmVsaWQ7CisJbmV3cnRlLT5yZWxraW5kID0g cmVsa2luZDsKKwluZXdydGUtPmFsaWFzID0gbWFrZUFsaWFzKCJuZXciLCBOSUwpOworCW5ld3J0 ZS0+ZXJlZiA9IG5ld3J0ZS0+YWxpYXM7CisJbmV3cnRlLT5sYXRlcmFsID0gZmFsc2U7CisJbmV3 cnRlLT5pbmggPSBmYWxzZTsKKwluZXdydGUtPmluRnJvbUNsID0gdHJ1ZTsKKworCS8qIEJ1aWxk IHR3by1lbGVtZW50IHJ0YWJsZSAqLworCW1lbXNldCgmZHBucywgMCwgc2l6ZW9mKGRwbnMpKTsK KwlkcG5zLnJ0YWJsZSA9IGxpc3RfbWFrZTIob2xkcnRlLCBuZXdydGUpOworCWRwbnMuY3RlcyA9 IE5JTDsKKwlzZXRfcnRhYmxlX25hbWVzKCZkcG5zLCBOSUwsIE5VTEwpOworCXNldF9zaW1wbGVf Y29sdW1uX25hbWVzKCZkcG5zKTsKKworCS8qIFNldCB1cCBjb250ZXh0IHdpdGggb25lLWRlZXAg bmFtZXNwYWNlIHN0YWNrICovCisJY29udGV4dC5idWYgPSAmYnVmOworCWNvbnRleHQubmFtZXNw YWNlcyA9IGxpc3RfbWFrZTEoJmRwbnMpOworCWNvbnRleHQud2luZG93Q2xhdXNlID0gTklMOwor CWNvbnRleHQud2luZG93VExpc3QgPSBOSUw7CisJY29udGV4dC52YXJwcmVmaXggPSB0cnVlOwor CWNvbnRleHQucHJldHR5RmxhZ3MgPSBwcmV0dHkgPyBQUkVUVFlGTEFHX1BBUkVOIHwgUFJFVFRZ RkxBR19JTkRFTlQgOiBQUkVUVFlGTEFHX0lOREVOVDsKKwljb250ZXh0LndyYXBDb2x1bW4gPSBX UkFQX0NPTFVNTl9ERUZBVUxUOworCWNvbnRleHQuaW5kZW50TGV2ZWwgPSBQUkVUVFlJTkRFTlRf U1REOworCWNvbnRleHQuc3BlY2lhbF9leHBya2luZCA9IEVYUFJfS0lORF9OT05FOworCisJZ2V0 X3J1bGVfZXhwcih3aGVuQ2xhdXNlLCAmY29udGV4dCwgZmFsc2UpOworCisJcmV0dXJuIGJ1Zi5k YXRhOworfQorCiAvKiAtLS0tLS0tLS0tCiAgKiBwZ19nZXRfaW5kZXhkZWYJCQktIEdldCB0aGUg ZGVmaW5pdGlvbiBvZiBhbiBpbmRleAogICoKQEAgLTE4ODAsNiArMTk4MSwxMyBAQCBwZ19nZXRf cGFydGtleWRlZl9jb2x1bW5zKE9pZCByZWxpZCwgYm9vbCBwcmV0dHkpCiAJcmV0dXJuIHBnX2dl dF9wYXJ0a2V5ZGVmX3dvcmtlcihyZWxpZCwgcHJldHR5RmxhZ3MsIHRydWUsIGZhbHNlKTsKIH0K IAorLyogSW50ZXJuYWwgdmVyc2lvbiB0aGF0IHJlcG9ydHMgdGhlIGZ1bGwgcGFydGl0aW9uIGtl eSBkZWZpbml0aW9uICovCitjaGFyICoKK3BnX2dldF9wYXJ0a2V5ZGVmX3NpbXBsZShPaWQgcmVs aWQpCit7CisJcmV0dXJuIHBnX2dldF9wYXJ0a2V5ZGVmX3dvcmtlcihyZWxpZCwgMCwgZmFsc2Us IGZhbHNlKTsKK30KKwogLyoKICAqIEludGVybmFsIHdvcmtob3JzZSB0byBkZWNvbXBpbGUgYSBw YXJ0aXRpb24ga2V5IGRlZmluaXRpb24uCiAgKi8KQEAgLTIxMzIsNiArMjI0MCwxNSBAQCBwZ19n ZXRfY29uc3RyYWludGRlZl9leHQoUEdfRlVOQ1RJT05fQVJHUykKIH0KIAogLyoKKyAqIEludGVy bmFsIHZlcnNpb24gdGhhdCByZXR1cm5zIHRoZSBkZWZpbml0aW9uIG9mIGEgQ09OU1RSQUlOVCBj b21tYW5kCisgKi8KK2NoYXIgKgorcGdfZ2V0X2NvbnN0cmFpbnRkZWZfY29tbWFuZF9zaW1wbGUo T2lkIGNvbnN0cmFpbnRJZCkKK3sKKwlyZXR1cm4gcGdfZ2V0X2NvbnN0cmFpbnRkZWZfd29ya2Vy KGNvbnN0cmFpbnRJZCwgZmFsc2UsIDAsIGZhbHNlKTsKK30KKworLyoKICAqIEludGVybmFsIHZl cnNpb24gdGhhdCByZXR1cm5zIGEgZnVsbCBBTFRFUiBUQUJMRSAuLi4gQUREIENPTlNUUkFJTlQg Y29tbWFuZAogICovCiBjaGFyICoKQEAgLTM1MDEsNyArMzYxOCwxMiBAQCBwZ19nZXRfZnVuY3Rp b25fYXJnX2RlZmF1bHQoUEdfRlVOQ1RJT05fQVJHUykKIAlQR19SRVRVUk5fVEVYVF9QKHN0cmlu Z190b190ZXh0KHN0cikpOwogfQogCi1zdGF0aWMgdm9pZAorLyoKKyAqIFByb2R1Y2UgdGhlIGZv cm1hdHRlZCBTUUwgYm9keSAobm90IHRoZSB3aG9sZSBmdW5jdGlvbiBkZWZpbml0aW9uKQorICog b2YgYSBmdW5jdGlvbiBnaXZlbiB0aGUgcGdfcHJvYyB0dXBsZS4gU2F2ZSB0aGUgZm9ybWF0dGVk IFNRTCBpbiB0aGUKKyAqIGdpdmVuIFN0cmluZ0luZm8uCisgKi8KK3ZvaWQKIHByaW50X2Z1bmN0 aW9uX3NxbGJvZHkoU3RyaW5nSW5mbyBidWYsIEhlYXBUdXBsZSBwcm9jdHVwKQogewogCWludAkJ CW51bWFyZ3M7CkBAIC0xMTM1Nyw3ICsxMTQ3OSw3IEBAIGdldF90YWJsZXNhbXBsZV9kZWYoVGFi bGVTYW1wbGVDbGF1c2UgKnRhYmxlc2FtcGxlLCBkZXBhcnNlX2NvbnRleHQgKmNvbnRleHQpCiAg KiBhY3R1YWxfZGF0YXR5cGUuICAoSWYgeW91IGRvbid0IHdhbnQgdGhpcyBiZWhhdmlvciwganVz dCBwYXNzCiAgKiBJbnZhbGlkT2lkIGZvciBhY3R1YWxfZGF0YXR5cGUuKQogICovCi1zdGF0aWMg dm9pZAordm9pZAogZ2V0X29wY2xhc3NfbmFtZShPaWQgb3BjbGFzcywgT2lkIGFjdHVhbF9kYXRh dHlwZSwKIAkJCQkgU3RyaW5nSW5mbyBidWYpCiB7CkBAIC0xMTc1MSw3ICsxMTg3Myw3IEBAIGdl bmVyYXRlX3F1YWxpZmllZF9yZWxhdGlvbl9uYW1lKE9pZCByZWxpZCkKICAqCiAgKiBUaGUgcmVz dWx0IGluY2x1ZGVzIGFsbCBuZWNlc3NhcnkgcXVvdGluZyBhbmQgc2NoZW1hLXByZWZpeGluZy4K ICAqLwotc3RhdGljIGNoYXIgKgorY2hhciAqCiBnZW5lcmF0ZV9mdW5jdGlvbl9uYW1lKE9pZCBm dW5jaWQsIGludCBuYXJncywgTGlzdCAqYXJnbmFtZXMsIE9pZCAqYXJndHlwZXMsCiAJCQkJCSAg IGJvb2wgaGFzX3ZhcmlhZGljLCBib29sICp1c2VfdmFyaWFkaWNfcCwKIAkJCQkJICAgUGFyc2VF eHByS2luZCBzcGVjaWFsX2V4cHJraW5kKQpAQCAtMTIxMzcsNyArMTIyNTksNyBAQCBnZXRfcmVs b3B0aW9ucyhTdHJpbmdJbmZvIGJ1ZiwgRGF0dW0gcmVsb3B0aW9ucykKIC8qCiAgKiBHZW5lcmF0 ZSBhIEMgc3RyaW5nIHJlcHJlc2VudGluZyBhIHJlbGF0aW9uJ3MgcmVsb3B0aW9ucywgb3IgTlVM TCBpZiBub25lLgogICovCi1zdGF0aWMgY2hhciAqCitjaGFyICoKIGZsYXR0ZW5fcmVsb3B0aW9u cyhPaWQgcmVsaWQpCiB7CiAJY2hhcgkgICAqcmVzdWx0ID0gTlVMTDsKZGlmZiAtLWdpdCBhL3Ny Yy9pbmNsdWRlL2NvbW1hbmRzL2NvbGxhdGlvbmNtZHMuaCBiL3NyYy9pbmNsdWRlL2NvbW1hbmRz L2NvbGxhdGlvbmNtZHMuaAppbmRleCBiNzZjN2IzLi41M2M0YTFhIDEwMDY0NAotLS0gYS9zcmMv aW5jbHVkZS9jb21tYW5kcy9jb2xsYXRpb25jbWRzLmgKKysrIGIvc3JjL2luY2x1ZGUvY29tbWFu ZHMvY29sbGF0aW9uY21kcy5oCkBAIC0xOCw3ICsxOCw4IEBACiAjaW5jbHVkZSAiY2F0YWxvZy9v YmplY3RhZGRyZXNzLmgiCiAjaW5jbHVkZSAicGFyc2VyL3BhcnNlX25vZGUuaCIKIAotZXh0ZXJu IE9iamVjdEFkZHJlc3MgRGVmaW5lQ29sbGF0aW9uKFBhcnNlU3RhdGUgKnBzdGF0ZSwgTGlzdCAq bmFtZXMsIExpc3QgKnBhcmFtZXRlcnMsIGJvb2wgaWZfbm90X2V4aXN0cyk7CitleHRlcm4gT2Jq ZWN0QWRkcmVzcyBEZWZpbmVDb2xsYXRpb24oUGFyc2VTdGF0ZSAqcHN0YXRlLCBMaXN0ICpuYW1l cywgTGlzdCAqcGFyYW1ldGVycywKKwkJCQkJCQkJCSAgYm9vbCBpZl9ub3RfZXhpc3RzLCBPYmpl Y3RBZGRyZXNzICpmcm9tX2NvbGxpZCk7CiBleHRlcm4gdm9pZCBJc1RoZXJlQ29sbGF0aW9uSW5O YW1lc3BhY2UoY29uc3QgY2hhciAqY29sbG5hbWUsIE9pZCBuc3BPaWQpOwogZXh0ZXJuIE9iamVj dEFkZHJlc3MgQWx0ZXJDb2xsYXRpb24oQWx0ZXJDb2xsYXRpb25TdG10ICpzdG10KTsKIApkaWZm IC0tZ2l0IGEvc3JjL2luY2x1ZGUvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5oIGIvc3JjL2luY2x1 ZGUvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5oCmluZGV4IDVlZDZlY2UuLjQ4YzY1ZWYgMTAwNjQ0 Ci0tLSBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuaAorKysgYi9zcmMvaW5j bHVkZS9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmgKQEAgLTE2LDYgKzE2LDcgQEAKICNpbmNsdWRl ICJjYXRhbG9nL2RlcGVuZGVuY3kuaCIKICNpbmNsdWRlICJjYXRhbG9nL29iamVjdGFkZHJlc3Mu aCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX2V2ZW50X3RyaWdnZXIuaCIKKyNpbmNsdWRlICJsaWIv aWxpc3QuaCIKICNpbmNsdWRlICJub2Rlcy9wYXJzZW5vZGVzLmgiCiAjaW5jbHVkZSAidGNvcC9j bWR0YWcuaCIKICNpbmNsdWRlICJ0Y29wL2RlcGFyc2VfdXRpbGl0eS5oIgpAQCAtMjksNiArMzAs NDQgQEAgdHlwZWRlZiBzdHJ1Y3QgRXZlbnRUcmlnZ2VyRGF0YQogCUNvbW1hbmRUYWcJdGFnOwog fSBFdmVudFRyaWdnZXJEYXRhOwogCit0eXBlZGVmIHN0cnVjdCBFdmVudFRyaWdnZXJRdWVyeVN0 YXRlCit7CisJLyogbWVtb3J5IGNvbnRleHQgZm9yIHRoaXMgc3RhdGUncyBvYmplY3RzICovCisJ TWVtb3J5Q29udGV4dCBjeHQ7CisKKwkvKiBzcWxfZHJvcCAqLworCXNsaXN0X2hlYWQJU1FMRHJv cExpc3Q7CisJYm9vbAkJaW5fc3FsX2Ryb3A7CisKKwkvKiB0YWJsZV9yZXdyaXRlICovCisJT2lk CQkJdGFibGVfcmV3cml0ZV9vaWQ7CS8qIEludmFsaWRPaWQsIG9yIHNldCBmb3IgdGFibGVfcmV3 cml0ZQorCQkJCQkJCQkJICogZXZlbnQgKi8KKwlpbnQJCQl0YWJsZV9yZXdyaXRlX3JlYXNvbjsJ LyogQVRfUkVXUklURSByZWFzb24gKi8KKworCS8qIFN1cHBvcnQgZm9yIGNvbW1hbmQgY29sbGVj dGlvbiAqLworCWJvb2wJCWNvbW1hbmRDb2xsZWN0aW9uSW5oaWJpdGVkOworCUNvbGxlY3RlZENv bW1hbmQgKmN1cnJlbnRDb21tYW5kOworCUxpc3QJICAgKmNvbW1hbmRMaXN0OwkvKiBsaXN0IG9m IENvbGxlY3RlZENvbW1hbmQ7IHNlZQorCQkJCQkJCQkgKiBkZXBhcnNlX3V0aWxpdHkuaCAqLwor CXN0cnVjdCBFdmVudFRyaWdnZXJRdWVyeVN0YXRlICpwcmV2aW91czsKK30gRXZlbnRUcmlnZ2Vy UXVlcnlTdGF0ZTsKKworLyogU3VwcG9ydCBmb3IgZHJvcHBlZCBvYmplY3RzICovCit0eXBlZGVm IHN0cnVjdCBTUUxEcm9wT2JqZWN0Cit7CisJT2JqZWN0QWRkcmVzcyBhZGRyZXNzOworCWNvbnN0 IGNoYXIgKnNjaGVtYW5hbWU7CisJY29uc3QgY2hhciAqb2JqbmFtZTsKKwljb25zdCBjaGFyICpv YmppZGVudGl0eTsKKwljb25zdCBjaGFyICpvYmplY3R0eXBlOworCUxpc3QJICAgKmFkZHJuYW1l czsKKwlMaXN0CSAgICphZGRyYXJnczsKKwlib29sCQlvcmlnaW5hbDsKKwlib29sCQlub3JtYWw7 CisJYm9vbAkJaXN0ZW1wOworCXNsaXN0X25vZGUJbmV4dDsKK30gU1FMRHJvcE9iamVjdDsKKwog I2RlZmluZSBBVF9SRVdSSVRFX0FMVEVSX1BFUlNJU1RFTkNFCTB4MDEKICNkZWZpbmUgQVRfUkVX UklURV9ERUZBVUxUX1ZBTAkJCTB4MDIKICNkZWZpbmUgQVRfUkVXUklURV9DT0xVTU5fUkVXUklU RQkJMHgwNApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY29tbWFuZHMvc2VxdWVuY2UuaCBiL3Ny Yy9pbmNsdWRlL2NvbW1hbmRzL3NlcXVlbmNlLmgKaW5kZXggN2RiN2IzZC4uMzA5ZGEwYyAxMDA2 NDQKLS0tIGEvc3JjL2luY2x1ZGUvY29tbWFuZHMvc2VxdWVuY2UuaAorKysgYi9zcmMvaW5jbHVk ZS9jb21tYW5kcy9zZXF1ZW5jZS5oCkBAIC01NCw2ICs1NCw3IEBAIHR5cGVkZWYgc3RydWN0IHhs X3NlcV9yZWMKIGV4dGVybiBpbnQ2NCBuZXh0dmFsX2ludGVybmFsKE9pZCByZWxpZCwgYm9vbCBj aGVja19wZXJtaXNzaW9ucyk7CiBleHRlcm4gRGF0dW0gbmV4dHZhbChQR19GVU5DVElPTl9BUkdT KTsKIGV4dGVybiBMaXN0ICpzZXF1ZW5jZV9vcHRpb25zKE9pZCByZWxpZCk7CitleHRlcm4gRm9y bV9wZ19zZXF1ZW5jZV9kYXRhIGdldF9zZXF1ZW5jZV92YWx1ZXMoT2lkIHNlcXVlbmNlSWQpOwog CiBleHRlcm4gT2JqZWN0QWRkcmVzcyBEZWZpbmVTZXF1ZW5jZShQYXJzZVN0YXRlICpwc3RhdGUs IENyZWF0ZVNlcVN0bXQgKnNlcSk7CiBleHRlcm4gT2JqZWN0QWRkcmVzcyBBbHRlclNlcXVlbmNl KFBhcnNlU3RhdGUgKnBzdGF0ZSwgQWx0ZXJTZXFTdG10ICpzdG10KTsKZGlmZiAtLWdpdCBhL3Ny Yy9pbmNsdWRlL3Rjb3AvdXRpbGl0eS5oIGIvc3JjL2luY2x1ZGUvdGNvcC91dGlsaXR5LmgKaW5k ZXggNTllNjRhZS4uYTY4Y2UzZCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdGNvcC91dGlsaXR5 LmgKKysrIGIvc3JjL2luY2x1ZGUvdGNvcC91dGlsaXR5LmgKQEAgLTk5LDYgKzk5LDggQEAgZXh0 ZXJuIFF1ZXJ5ICpVdGlsaXR5Q29udGFpbnNRdWVyeShOb2RlICpwYXJzZXRyZWUpOwogCiBleHRl cm4gQ29tbWFuZFRhZyBDcmVhdGVDb21tYW5kVGFnKE5vZGUgKnBhcnNldHJlZSk7CiAKK2V4dGVy biBjb25zdCBjaGFyICpzdHJpbmdpZnlfb2JqdHlwZShPYmplY3RUeXBlIG9ianR5cGUsIGJvb2wg aXNncmFudCk7CisKIHN0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqCiBDcmVhdGVDb21tYW5kTmFt ZShOb2RlICpwYXJzZXRyZWUpCiB7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGlscy9hY2wu aCBiL3NyYy9pbmNsdWRlL3V0aWxzL2FjbC5oCmluZGV4IGY4ZTEyMzguLmYwNTU3OGQgMTAwNjQ0 Ci0tLSBhL3NyYy9pbmNsdWRlL3V0aWxzL2FjbC5oCisrKyBiL3NyYy9pbmNsdWRlL3V0aWxzL2Fj bC5oCkBAIC0yMDksNiArMjA5LDggQEAgZXh0ZXJuIEFjbE1vZGUgYWNsbWFzayhjb25zdCBBY2wg KmFjbCwgT2lkIHJvbGVpZCwgT2lkIG93bmVySWQsCiAJCQkJCSAgIEFjbE1vZGUgbWFzaywgQWNs TWFza0hvdyBob3cpOwogZXh0ZXJuIGludAlhY2xtZW1iZXJzKGNvbnN0IEFjbCAqYWNsLCBPaWQg Kipyb2xlaWRzKTsKIAorZXh0ZXJuIGNvbnN0IGNoYXIgKnByaXZpbGVnZV90b19zdHJpbmcoQWNs TW9kZSBwcml2aWxlZ2UpOworCiBleHRlcm4gYm9vbCBoYXNfcHJpdnNfb2Zfcm9sZShPaWQgbWVt YmVyLCBPaWQgcm9sZSk7CiBleHRlcm4gYm9vbCBtZW1iZXJfY2FuX3NldF9yb2xlKE9pZCBtZW1i ZXIsIE9pZCByb2xlKTsKIGV4dGVybiB2b2lkIGNoZWNrX2Nhbl9zZXRfcm9sZShPaWQgbWVtYmVy LCBPaWQgcm9sZSk7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGlscy9hY2xjaGtfaW50ZXJu YWwuaCBiL3NyYy9pbmNsdWRlL3V0aWxzL2FjbGNoa19pbnRlcm5hbC5oCmluZGV4IDU1YWY2MjQu Ljk0NjU0NWYgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3V0aWxzL2FjbGNoa19pbnRlcm5hbC5o CisrKyBiL3NyYy9pbmNsdWRlL3V0aWxzL2FjbGNoa19pbnRlcm5hbC5oCkBAIC0zOSw2ICszOSw3 IEBAIHR5cGVkZWYgc3RydWN0CiAJTGlzdAkgICAqZ3JhbnRlZXM7CiAJYm9vbAkJZ3JhbnRfb3B0 aW9uOwogCURyb3BCZWhhdmlvciBiZWhhdmlvcjsKKwlPaWQJCQlncmFudG9yX3VpZDsKIH0gSW50 ZXJuYWxHcmFudDsKIAogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGlscy9idWlsdGlucy5o IGIvc3JjL2luY2x1ZGUvdXRpbHMvYnVpbHRpbnMuaAppbmRleCAyZjhiNDZkLi40OGI4YmZkIDEw MDY0NAotLS0gYS9zcmMvaW5jbHVkZS91dGlscy9idWlsdGlucy5oCisrKyBiL3NyYy9pbmNsdWRl L3V0aWxzL2J1aWx0aW5zLmgKQEAgLTEyMywxMCArMTIzLDEyIEBAIGV4dGVybiBEYXR1bSBudW1l cmljX2Zsb2F0OF9ub19vdmVyZmxvdyhQR19GVU5DVElPTl9BUkdTKTsKICNkZWZpbmUgRk9STUFU X1RZUEVfRk9SQ0VfUVVBTElGWQkweDA0CS8qIGZvcmNlIHF1YWxpZmljYXRpb24gb2YgdHlwZSAq LwogI2RlZmluZSBGT1JNQVRfVFlQRV9JTlZBTElEX0FTX05VTEwJMHgwOAkvKiBOVUxMIGlmIHVu ZGVmaW5lZCAqLwogZXh0ZXJuIGNoYXIgKmZvcm1hdF90eXBlX2V4dGVuZGVkKE9pZCB0eXBlX29p ZCwgaW50MzIgdHlwZW1vZCwgYml0czE2IGZsYWdzKTsKK2V4dGVybiBjaGFyICpmb3JtYXRfcHJv Y2VkdXJlX2FyZ3MoT2lkIHByb2NlZHVyZV9vaWQsIGJvb2wgZm9yY2VfcXVhbGlmeSk7CiAKIGV4 dGVybiBjaGFyICpmb3JtYXRfdHlwZV9iZShPaWQgdHlwZV9vaWQpOwogZXh0ZXJuIGNoYXIgKmZv cm1hdF90eXBlX2JlX3F1YWxpZmllZChPaWQgdHlwZV9vaWQpOwogZXh0ZXJuIGNoYXIgKmZvcm1h dF90eXBlX3dpdGhfdHlwZW1vZChPaWQgdHlwZV9vaWQsIGludDMyIHR5cGVtb2QpOworZXh0ZXJu IGNoYXIgKnByaW50VHlwbW9kKGNvbnN0IGNoYXIgKnR5cG5hbWUsIGludDMyIHR5cG1vZCwgT2lk IHR5cG1vZG91dCk7CiAKIGV4dGVybiBpbnQzMiB0eXBlX21heGltdW1fc2l6ZShPaWQgdHlwZV9v aWQsIGludDMyIHR5cGVtb2QpOwogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGlscy9ydWxl dXRpbHMuaCBiL3NyYy9pbmNsdWRlL3V0aWxzL3J1bGV1dGlscy5oCmluZGV4IDFhNDJkOWYuLmMz M2M4ZDAgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3V0aWxzL3J1bGV1dGlscy5oCisrKyBiL3Ny Yy9pbmNsdWRlL3V0aWxzL3J1bGV1dGlscy5oCkBAIC0xMyw5ICsxMywxMiBAQAogI2lmbmRlZiBS VUxFVVRJTFNfSAogI2RlZmluZSBSVUxFVVRJTFNfSAogCisjaW5jbHVkZSAiYWNjZXNzL2h0dXAu aCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX3RyaWdnZXIuaCIKICNpbmNsdWRlICJub2Rlcy9ub2Rl cy5oIgogI2luY2x1ZGUgIm5vZGVzL3BhcnNlbm9kZXMuaCIKICNpbmNsdWRlICJub2Rlcy9wZ19s aXN0LmgiCisjaW5jbHVkZSAicGFyc2VyL3BhcnNlX25vZGUuaCIKIAogc3RydWN0IFBsYW47CQkJ CQkvKiBhdm9pZCBpbmNsdWRpbmcgcGxhbm5vZGVzLmggaGVyZSAqLwogc3RydWN0IFBsYW5uZWRT dG10OwpAQCAtMjMsMTIgKzI2LDIwIEBAIHN0cnVjdCBQbGFubmVkU3RtdDsKIAogZXh0ZXJuIGNo YXIgKnBnX2dldF9pbmRleGRlZl9zdHJpbmcoT2lkIGluZGV4cmVsaWQpOwogZXh0ZXJuIGNoYXIg KnBnX2dldF9pbmRleGRlZl9jb2x1bW5zKE9pZCBpbmRleHJlbGlkLCBib29sIHByZXR0eSk7Citl eHRlcm4gY2hhciAqcGdfZ2V0X3RyaWdnZXJfd2hlbmNsYXVzZShGb3JtX3BnX3RyaWdnZXIgdHJp Z3JlYywKKwkJCQkJCQkJCSAgIE5vZGUgKndoZW5DbGF1c2UsIGJvb2wgcHJldHR5KTsKIGV4dGVy biBjaGFyICpwZ19nZXRfcXVlcnlkZWYoUXVlcnkgKnF1ZXJ5LCBib29sIHByZXR0eSk7CitleHRl cm4gY2hhciAqcGdfZ2V0X3ZpZXdkZWZfaW50ZXJuYWwoT2lkIHZpZXdvaWQpOwogCiBleHRlcm4g Y2hhciAqcGdfZ2V0X3BhcnRrZXlkZWZfY29sdW1ucyhPaWQgcmVsaWQsIGJvb2wgcHJldHR5KTsK K2V4dGVybiBjaGFyICpwZ19nZXRfcGFydGtleWRlZl9zaW1wbGUoT2lkIHJlbGlkKTsKIGV4dGVy biBjaGFyICpwZ19nZXRfcGFydGNvbnN0cmRlZl9zdHJpbmcoT2lkIHBhcnRpdGlvbklkLCBjaGFy ICphbGlhc25hbWUpOwogCiBleHRlcm4gY2hhciAqcGdfZ2V0X2NvbnN0cmFpbnRkZWZfY29tbWFu ZChPaWQgY29uc3RyYWludElkKTsKK2V4dGVybiBjaGFyICpwZ19nZXRfY29uc3RyYWludGRlZl9j b21tYW5kX3NpbXBsZShPaWQgY29uc3RyYWludElkKTsKK2V4dGVybiB2b2lkIHBnX2dldF9ydWxl ZGVmX2RldGFpbGVkKERhdHVtIGV2X3F1YWwsIERhdHVtIGV2X2FjdGlvbiwKKwkJCQkJCQkJCWNo YXIgKip3aGVyZUNsYXVzZSwgTGlzdCAqKmFjdGlvbnMpOworCiBleHRlcm4gY2hhciAqZGVwYXJz ZV9leHByZXNzaW9uKE5vZGUgKmV4cHIsIExpc3QgKmRwY29udGV4dCwKIAkJCQkJCQkJYm9vbCBm b3JjZXByZWZpeCwgYm9vbCBzaG93aW1wbGljaXQpOwogZXh0ZXJuIExpc3QgKmRlcGFyc2VfY29u dGV4dF9mb3IoY29uc3QgY2hhciAqYWxpYXNuYW1lLCBPaWQgcmVsaWQpOwpAQCAtNDAsOCArNTEs MTYgQEAgZXh0ZXJuIExpc3QgKnNlbGVjdF9ydGFibGVfbmFtZXNfZm9yX2V4cGxhaW4oTGlzdCAq cnRhYmxlLAogCQkJCQkJCQkJCQkgQml0bWFwc2V0ICpyZWxzX3VzZWQpOwogZXh0ZXJuIGNoYXIg KmdlbmVyYXRlX2NvbGxhdGlvbl9uYW1lKE9pZCBjb2xsaWQpOwogZXh0ZXJuIGNoYXIgKmdlbmVy YXRlX29wY2xhc3NfbmFtZShPaWQgb3BjbGFzcyk7CitleHRlcm4gY2hhciAqZ2VuZXJhdGVfZnVu Y3Rpb25fbmFtZShPaWQgZnVuY2lkLCBpbnQgbmFyZ3MsIExpc3QgKmFyZ25hbWVzLAorCQkJCQkJ CQkJT2lkICphcmd0eXBlcywgYm9vbCBoYXNfdmFyaWFkaWMsCisJCQkJCQkJCQlib29sICp1c2Vf dmFyaWFkaWNfcCwKKwkJCQkJCQkJCVBhcnNlRXhwcktpbmQgc3BlY2lhbF9leHBya2luZCk7CiBl eHRlcm4gY2hhciAqZ2V0X3JhbmdlX3BhcnRib3VuZF9zdHJpbmcoTGlzdCAqYm91bmRfZGF0dW1z KTsKK2V4dGVybiB2b2lkIGdldF9vcGNsYXNzX25hbWUoT2lkIG9wY2xhc3MsIE9pZCBhY3R1YWxf ZGF0YXR5cGUsCisJCQkJCQkJIFN0cmluZ0luZm8gYnVmKTsKK2V4dGVybiBjaGFyICpmbGF0dGVu X3JlbG9wdGlvbnMoT2lkIHJlbGlkKTsKIAogZXh0ZXJuIGNoYXIgKnBnX2dldF9zdGF0aXN0aWNz b2JqZGVmX3N0cmluZyhPaWQgc3RhdGV4dGlkKTsKK2V4dGVybiB2b2lkIHByaW50X2Z1bmN0aW9u X3NxbGJvZHkoU3RyaW5nSW5mbyBidWYsIEhlYXBUdXBsZSBwcm9jdHVwKTsKIAogI2VuZGlmCQkJ CQkJCS8qIFJVTEVVVElMU19IICovCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVj dGVkL29iamVjdF9hZGRyZXNzLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvb2JqZWN0 X2FkZHJlc3Mub3V0CmluZGV4IDI1YzE3NGYuLmZjNDJkNDEgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0 L3JlZ3Jlc3MvZXhwZWN0ZWQvb2JqZWN0X2FkZHJlc3Mub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jl c3MvZXhwZWN0ZWQvb2JqZWN0X2FkZHJlc3Mub3V0CkBAIC00OTYsNyArNDk2LDcgQEAgb3BlcmF0 b3IgZmFtaWx5fHBnX2NhdGFsb2d8aW50ZWdlcl9vcHN8cGdfY2F0YWxvZy5pbnRlZ2VyX29wcyBV U0lORyBidHJlZXx0CiBwb2xpY3l8TlVMTHxOVUxMfGdlbnBvbCBvbiBhZGRyX25zcC5nZW50YWJs ZXx0CiBzdGF0aXN0aWNzIG9iamVjdHxhZGRyX25zcHxnZW50YWJsZV9zdGF0fGFkZHJfbnNwLmdl bnRhYmxlX3N0YXR8dAogY29sbGF0aW9ufHBnX2NhdGFsb2d8ImRlZmF1bHQifHBnX2NhdGFsb2cu ImRlZmF1bHQifHQKLXRyYW5zZm9ybXxOVUxMfE5VTEx8Zm9yIGludGVnZXIgb24gbGFuZ3VhZ2Ug c3FsfHQKK3RyYW5zZm9ybXxOVUxMfE5VTEx8Zm9yIGludGVnZXIgbGFuZ3VhZ2Ugc3FsfHQKIHRl eHQgc2VhcmNoIGRpY3Rpb25hcnl8YWRkcl9uc3B8YWRkcl90c19kaWN0fGFkZHJfbnNwLmFkZHJf dHNfZGljdHx0CiB0ZXh0IHNlYXJjaCBwYXJzZXJ8YWRkcl9uc3B8YWRkcl90c19wcnN8YWRkcl9u c3AuYWRkcl90c19wcnN8dAogdGV4dCBzZWFyY2ggY29uZmlndXJhdGlvbnxhZGRyX25zcHxhZGRy X3RzX2NvbmZ8YWRkcl9uc3AuYWRkcl90c19jb25mfHQKLS0gCjEuOC4zLjEKCg== --000000000000d6784f05f261a2df Content-Type: application/octet-stream; name="v62-0005-DDL-messaging-infrastructure-for-DDL-replication.patch" Content-Disposition: attachment; filename="v62-0005-DDL-messaging-infrastructure-for-DDL-replication.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lcyuikhb4 RnJvbSBlNzE2YzJlZTc1NGU2MzlkOGZlY2E1ZmM2YTRkMDZkMDgyZDI4OGQ1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBamluIENoZXJpYW4gPGFqaW5jQGZhc3QuYXUuZnVqaXRzdS5j b20+CkRhdGU6IE1vbiwgMTYgSmFuIDIwMjMgMDc6NTM6MTggLTA1MDAKU3ViamVjdDogW1BBVENI IHY2MiA1LzddIERETCBtZXNzYWdpbmcgaW5mcmFzdHJ1Y3R1cmUgZm9yIERETCByZXBsaWNhdGlv bi4KCkRETCBtZXNzYWdpbmcgaW5mcmFzdHJ1Y3R1cmUgZm9yIERETCByZXBsaWNhdGlvbi4KLS0t CiBjb250cmliL3Rlc3RfZGVjb2RpbmcvZXhwZWN0ZWQvZGRsLm91dCAgICAgICAgICB8ICAyNiAr KysrKwogY29udHJpYi90ZXN0X2RlY29kaW5nL3NxbC9kZGwuc3FsICAgICAgICAgICAgICAgfCAg IDUgKwogY29udHJpYi90ZXN0X2RlY29kaW5nL3Rlc3RfZGVjb2RpbmcuYyAgICAgICAgICAgfCAg NDggKysrKysrKysrCiBzcmMvYmFja2VuZC9hY2Nlc3Mvcm1ncmRlc2MvTWFrZWZpbGUgICAgICAg ICAgICB8ICAgMSArCiBzcmMvYmFja2VuZC9hY2Nlc3Mvcm1ncmRlc2MvbG9naWNhbGRkbG1zZ2Rl c2MuYyB8ICA1MiArKysrKysrKysrCiBzcmMvYmFja2VuZC9hY2Nlc3Mvcm1ncmRlc2MvbWVzb24u YnVpbGQgICAgICAgICB8ICAgMSArCiBzcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9ybWdyLmMg ICAgICAgICAgICAgICB8ICAgMSArCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL01h a2VmaWxlICAgICAgICB8ICAgMSArCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2Rk bG1lc3NhZ2UuYyAgICB8ICA4NCArKysrKysrKysrKysrKysrCiBzcmMvYmFja2VuZC9yZXBsaWNh dGlvbi9sb2dpY2FsL2RlY29kZS5jICAgICAgICB8ICA0MSArKysrKysrKwogc3JjL2JhY2tlbmQv cmVwbGljYXRpb24vbG9naWNhbC9sb2dpY2FsLmMgICAgICAgfCAgNDQgKysrKysrKysKIHNyYy9i YWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbG9naWNhbGZ1bmNzLmMgIHwgIDI0ICsrKysrCiBz cmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL21lc29uLmJ1aWxkICAgICB8ICAgMSArCiBz cmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Jlb3JkZXJidWZmZXIuYyB8IDEyNyArKysr KysrKysrKysrKysrKysrKysrKysKIHNyYy9iaW4vcGdfd2FsZHVtcC9ybWdyZGVzYy5jICAgICAg ICAgICAgICAgICAgIHwgICAxICsKIHNyYy9pbmNsdWRlL2FjY2Vzcy9ybWdybGlzdC5oICAgICAg ICAgICAgICAgICAgIHwgICAxICsKIHNyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQgICAg ICAgICAgICAgICAgIHwgICA4ICsrCiBzcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9kZGxtZXNzYWdl LmggICAgICAgICAgICB8ICA2MCArKysrKysrKysrKwogc3JjL2luY2x1ZGUvcmVwbGljYXRpb24v ZGVjb2RlLmggICAgICAgICAgICAgICAgfCAgIDEgKwogc3JjL2luY2x1ZGUvcmVwbGljYXRpb24v b3V0cHV0X3BsdWdpbi5oICAgICAgICAgfCAgMTQgKysrCiBzcmMvaW5jbHVkZS9yZXBsaWNhdGlv bi9yZW9yZGVyYnVmZmVyLmggICAgICAgICB8ICAyNyArKysrKwogMjEgZmlsZXMgY2hhbmdlZCwg NTY4IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmFja2VuZC9hY2Nlc3Mv cm1ncmRlc2MvbG9naWNhbGRkbG1zZ2Rlc2MuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9iYWNr ZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvZGRsbWVzc2FnZS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQg c3JjL2luY2x1ZGUvcmVwbGljYXRpb24vZGRsbWVzc2FnZS5oCgpkaWZmIC0tZ2l0IGEvY29udHJp Yi90ZXN0X2RlY29kaW5nL2V4cGVjdGVkL2RkbC5vdXQgYi9jb250cmliL3Rlc3RfZGVjb2Rpbmcv ZXhwZWN0ZWQvZGRsLm91dAppbmRleCA5YTI4YjVkLi4wZjUxZjJiIDEwMDY0NAotLS0gYS9jb250 cmliL3Rlc3RfZGVjb2RpbmcvZXhwZWN0ZWQvZGRsLm91dAorKysgYi9jb250cmliL3Rlc3RfZGVj b2RpbmcvZXhwZWN0ZWQvZGRsLm91dApAQCAtODMxLDYgKzgzMSwzMiBAQCBTRUxFQ1QgZGF0YSBG Uk9NIHBnX2xvZ2ljYWxfc2xvdF9nZXRfY2hhbmdlcygncmVncmVzc2lvbl9zbG90JywgTlVMTCwg TlVMTCwgJ2luYwogLS0tLS0tCiAoMCByb3dzKQogCitTRUxFQ1QgJ2RkbCBtc2cxJyBGUk9NIHBn X2xvZ2ljYWxfZW1pdF9kZGxfbWVzc2FnZSgnZGRsIG1zZzEnLCAxNjM5NCwgMSwgJ21zZzEnKTsK KyA/Y29sdW1uPyAKKy0tLS0tLS0tLS0KKyBkZGwgbXNnMQorKDEgcm93KQorCitTRUxFQ1QgJ2Rk bCBtc2cyJyBGUk9NIHBnX2xvZ2ljYWxfZW1pdF9kZGxfbWVzc2FnZSgnZGRsIG1zZzInLCAxNjM5 NCwgMSwgJ3siZm10IjogIkNSRUFURSBTQ0hFTUEgJXtpZl9ub3RfZXhpc3RzfXMgJXtuYW1lfUkg JXthdXRob3JpemF0aW9ufXMiLCAibmFtZSI6ICJmb28iLCAiYXV0aG9yaXphdGlvbiI6IHsiZm10 IjogIkFVVEhPUklaQVRJT04gJXthdXRob3JpemF0aW9uX3JvbGV9SSIsICJwcmVzZW50IjogZmFs c2UsICJhdXRob3JpemF0aW9uX3JvbGUiOiBudWxsfSwgImlmX25vdF9leGlzdHMiOiAiIn0nKTsK KyA/Y29sdW1uPyAKKy0tLS0tLS0tLS0KKyBkZGwgbXNnMgorKDEgcm93KQorCitTRUxFQ1QgJ2Rk bCBtc2czJyBGUk9NIHBnX2xvZ2ljYWxfZW1pdF9kZGxfbWVzc2FnZSgnZGRsIG1zZzMnLCAxNjM5 NCwgMSwgJ3siZm10IjogIkNSRUFURSAle3BlcnNpc3RlbmNlfXMgVEFCTEUgJXtpZl9ub3RfZXhp c3RzfXMgJXtpZGVudGl0eX1EICgle3RhYmxlX2VsZW1lbnRzOiwgfXMpICV7aW5oZXJpdHN9cyAl e3RhYmxlc3BhY2V9cyAle29uX2NvbW1pdH1zICV7cGFydGl0aW9uX2J5fXMgJXthY2Nlc3NfbWV0 aG9kfXMgJXt3aXRoX2NsYXVzZX1zIiwgImlkZW50aXR5IjogeyJvYmpuYW1lIjogImZvbyIsICJz Y2hlbWFuYW1lIjogImVsZW1lbnRfdGVzdCJ9LCAiaW5oZXJpdHMiOiB7ImZtdCI6ICJJTkhFUklU UyAoJXtwYXJlbnRzOiwgfUQpIiwgInBhcmVudHMiOiBudWxsLCAicHJlc2VudCI6IGZhbHNlfSwg Im9uX2NvbW1pdCI6IHsiZm10IjogIk9OIENPTU1JVCAle29uX2NvbW1pdF92YWx1ZX1zIiwgInBy ZXNlbnQiOiBmYWxzZSwgIm9uX2NvbW1pdF92YWx1ZSI6IG51bGx9LCAidGFibGVzcGFjZSI6IHsi Zm10IjogIlRBQkxFU1BBQ0UgJXt0YWJsZXNwYWNlfUkiLCAicHJlc2VudCI6IGZhbHNlLCAidGFi bGVzcGFjZSI6IG51bGx9LCAicGVyc2lzdGVuY2UiOiAiIiwgIndpdGhfY2xhdXNlIjogeyJmbXQi OiAiV0lUSCIsICJwcmVzZW50IjogZmFsc2V9LCAicGFydGl0aW9uX2J5IjogeyJmbXQiOiAiUEFS VElUSU9OIEJZICV7ZGVmaW5pdGlvbn1zIiwgInByZXNlbnQiOiBmYWxzZSwgImRlZmluaXRpb24i OiBudWxsfSwgImFjY2Vzc19tZXRob2QiOiB7ImZtdCI6ICJVU0lORyAle2FjY2Vzc19tZXRob2R9 SSIsICJwcmVzZW50IjogZmFsc2UsICJhY2Nlc3NfbWV0aG9kIjogbnVsbH0sICJpZl9ub3RfZXhp c3RzIjogIiIsICJ0YWJsZV9lbGVtZW50cyI6IFt7ImZtdCI6ICIle25hbWV9SSAle2NvbHR5cGV9 VCBTVE9SQUdFICV7Y29sc3RvcmFnZX1zICV7Y29tcHJlc3Npb259cyAle2NvbGxhdGlvbn1zICV7 bm90X251bGx9cyAle2RlZmF1bHR9cyAle2dlbmVyYXRlZF9jb2x1bW59cyIsICJuYW1lIjogImlk IiwgInR5cGUiOiAiY29sdW1uIiwgImNvbHR5cGUiOiB7InR5cG1vZCI6ICIiLCAidHlwYXJyYXki OiBmYWxzZSwgInR5cGVuYW1lIjogImludDQiLCAic2NoZW1hbmFtZSI6ICJwZ19jYXRhbG9nIn0s ICJkZWZhdWx0IjogeyJmbXQiOiAiREVGQVVMVCIsICJwcmVzZW50IjogZmFsc2V9LCAibm90X251 bGwiOiAiIiwgImNvbGxhdGlvbiI6IHsiZm10IjogIkNPTExBVEUiLCAicHJlc2VudCI6IGZhbHNl fSwgImNvbHN0b3JhZ2UiOiAicGxhaW4iLCAiY29tcHJlc3Npb24iOiB7ImZtdCI6ICJDT01QUkVT U0lPTiAle2NvbXByZXNzaW9uX21ldGhvZH1JIiwgInByZXNlbnQiOiBmYWxzZSwgImNvbXByZXNz aW9uX21ldGhvZCI6IG51bGx9LCAiZ2VuZXJhdGVkX2NvbHVtbiI6IHsiZm10IjogIkdFTkVSQVRF RCBBTFdBWVMgQVMiLCAicHJlc2VudCI6IGZhbHNlfX1dfX0nKTsKKyA/Y29sdW1uPyAKKy0tLS0t LS0tLS0KKyBkZGwgbXNnMworKDEgcm93KQorCitTRUxFQ1QgZGF0YSBGUk9NIHBnX2xvZ2ljYWxf c2xvdF9nZXRfY2hhbmdlcygncmVncmVzc2lvbl9zbG90JywgTlVMTCwgTlVMTCwgJ2luY2x1ZGUt eGlkcycsICcwJywgJ3NraXAtZW1wdHkteGFjdHMnLCAnMScpOworICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIG1lc3NhZ2U6IHByZWZpeDogZGRsIG1z ZzEsIHJlbGlkOiAxNjM5NCwgY21kdHlwZTogRHJvcCBzdGFydCwgc3o6IDQgY29udGVudDptc2cx CisgbWVzc2FnZTogcHJlZml4OiBkZGwgbXNnMiwgcmVsaWQ6IDE2Mzk0LCBjbWR0eXBlOiBEcm9w IHN0YXJ0LCBzejogMjE3IGNvbnRlbnQ6eyJmbXQiOiAiQ1JFQVRFIFNDSEVNQSAle2lmX25vdF9l eGlzdHN9cyAle25hbWV9SSAle2F1dGhvcml6YXRpb259cyIsICJuYW1lIjogImZvbyIsICJhdXRo b3JpemF0aW9uIjogeyJmbXQiOiAiQVVUSE9SSVpBVElPTiAle2F1dGhvcml6YXRpb25fcm9sZX1J IiwgInByZXNlbnQiOiBmYWxzZSwgImF1dGhvcml6YXRpb25fcm9sZSI6IG51bGx9LCAiaWZfbm90 X2V4aXN0cyI6ICIifQorIG1lc3NhZ2U6IHByZWZpeDogZGRsIG1zZzMsIHJlbGlkOiAxNjM5NCwg Y21kdHlwZTogRHJvcCBzdGFydCwgc3o6IDEzOTYgY29udGVudDp7ImZtdCI6ICJDUkVBVEUgJXtw ZXJzaXN0ZW5jZX1zIFRBQkxFICV7aWZfbm90X2V4aXN0c31zICV7aWRlbnRpdHl9RCAoJXt0YWJs ZV9lbGVtZW50czosIH1zKSAle2luaGVyaXRzfXMgJXt0YWJsZXNwYWNlfXMgJXtvbl9jb21taXR9 cyAle3BhcnRpdGlvbl9ieX1zICV7YWNjZXNzX21ldGhvZH1zICV7d2l0aF9jbGF1c2V9cyIsICJp ZGVudGl0eSI6IHsib2JqbmFtZSI6ICJmb28iLCAic2NoZW1hbmFtZSI6ICJlbGVtZW50X3Rlc3Qi fSwgImluaGVyaXRzIjogeyJmbXQiOiAiSU5IRVJJVFMgKCV7cGFyZW50czosIH1EKSIsICJwYXJl bnRzIjogbnVsbCwgInByZXNlbnQiOiBmYWxzZX0sICJvbl9jb21taXQiOiB7ImZtdCI6ICJPTiBD T01NSVQgJXtvbl9jb21taXRfdmFsdWV9cyIsICJwcmVzZW50IjogZmFsc2UsICJvbl9jb21taXRf dmFsdWUiOiBudWxsfSwgInRhYmxlc3BhY2UiOiB7ImZtdCI6ICJUQUJMRVNQQUNFICV7dGFibGVz cGFjZX1JIiwgInByZXNlbnQiOiBmYWxzZSwgInRhYmxlc3BhY2UiOiBudWxsfSwgInBlcnNpc3Rl bmNlIjogIiIsICJ3aXRoX2NsYXVzZSI6IHsiZm10IjogIldJVEgiLCAicHJlc2VudCI6IGZhbHNl fSwgInBhcnRpdGlvbl9ieSI6IHsiZm10IjogIlBBUlRJVElPTiBCWSAle2RlZmluaXRpb259cyIs ICJwcmVzZW50IjogZmFsc2UsICJkZWZpbml0aW9uIjogbnVsbH0sICJhY2Nlc3NfbWV0aG9kIjog eyJmbXQiOiAiVVNJTkcgJXthY2Nlc3NfbWV0aG9kfUkiLCAicHJlc2VudCI6IGZhbHNlLCAiYWNj ZXNzX21ldGhvZCI6IG51bGx9LCAiaWZfbm90X2V4aXN0cyI6ICIiLCAidGFibGVfZWxlbWVudHMi OiBbeyJmbXQiOiAiJXtuYW1lfUkgJXtjb2x0eXBlfVQgU1RPUkFHRSAle2NvbHN0b3JhZ2V9cyAl e2NvbXByZXNzaW9ufXMgJXtjb2xsYXRpb259cyAle25vdF9udWxsfXMgJXtkZWZhdWx0fXMgJXtn ZW5lcmF0ZWRfY29sdW1ufXMiLCAibmFtZSI6ICJpZCIsICJ0eXBlIjogImNvbHVtbiIsICJjb2x0 eXBlIjogeyJ0eXBtb2QiOiAiIiwgInR5cGFycmF5IjogZmFsc2UsICJ0eXBlbmFtZSI6ICJpbnQ0 IiwgInNjaGVtYW5hbWUiOiAicGdfY2F0YWxvZyJ9LCAiZGVmYXVsdCI6IHsiZm10IjogIkRFRkFV TFQiLCAicHJlc2VudCI6IGZhbHNlfSwgIm5vdF9udWxsIjogIiIsICJjb2xsYXRpb24iOiB7ImZt dCI6ICJDT0xMQVRFIiwgInByZXNlbnQiOiBmYWxzZX0sICJjb2xzdG9yYWdlIjogInBsYWluIiwg ImNvbXByZXNzaW9uIjogeyJmbXQiOiAiQ09NUFJFU1NJT04gJXtjb21wcmVzc2lvbl9tZXRob2R9 SSIsICJwcmVzZW50IjogZmFsc2UsICJjb21wcmVzc2lvbl9tZXRob2QiOiBudWxsfSwgImdlbmVy YXRlZF9jb2x1bW4iOiB7ImZtdCI6ICJHRU5FUkFURUQgQUxXQVlTIEFTIiwgInByZXNlbnQiOiBm YWxzZX19XX19CisoMyByb3dzKQorCiBTRUxFQ1QgcGdfZHJvcF9yZXBsaWNhdGlvbl9zbG90KCdy ZWdyZXNzaW9uX3Nsb3QnKTsKICBwZ19kcm9wX3JlcGxpY2F0aW9uX3Nsb3QgCiAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvY29udHJpYi90ZXN0X2RlY29kaW5nL3NxbC9k ZGwuc3FsIGIvY29udHJpYi90ZXN0X2RlY29kaW5nL3NxbC9kZGwuc3FsCmluZGV4IDRmNzZiZWQu LjFlYTVhNGIgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvdGVzdF9kZWNvZGluZy9zcWwvZGRsLnNxbAor KysgYi9jb250cmliL3Rlc3RfZGVjb2Rpbmcvc3FsL2RkbC5zcWwKQEAgLTQzMSw2ICs0MzEsMTEg QEAgU0VMRUNUIGRhdGEgRlJPTSBwZ19sb2dpY2FsX3Nsb3RfZ2V0X2NoYW5nZXMoJ3JlZ3Jlc3Np b25fc2xvdCcsIE5VTEwsIE5VTEwsICdpbmMKIC0tIGRvbmUsIGZyZWUgbG9naWNhbCByZXBsaWNh dGlvbiBzbG90CiBTRUxFQ1QgZGF0YSBGUk9NIHBnX2xvZ2ljYWxfc2xvdF9nZXRfY2hhbmdlcygn cmVncmVzc2lvbl9zbG90JywgTlVMTCwgTlVMTCwgJ2luY2x1ZGUteGlkcycsICcwJywgJ3NraXAt ZW1wdHkteGFjdHMnLCAnMScpOwogCitTRUxFQ1QgJ2RkbCBtc2cxJyBGUk9NIHBnX2xvZ2ljYWxf ZW1pdF9kZGxfbWVzc2FnZSgnZGRsIG1zZzEnLCAxNjM5NCwgMSwgJ21zZzEnKTsKK1NFTEVDVCAn ZGRsIG1zZzInIEZST00gcGdfbG9naWNhbF9lbWl0X2RkbF9tZXNzYWdlKCdkZGwgbXNnMicsIDE2 Mzk0LCAxLCAneyJmbXQiOiAiQ1JFQVRFIFNDSEVNQSAle2lmX25vdF9leGlzdHN9cyAle25hbWV9 SSAle2F1dGhvcml6YXRpb259cyIsICJuYW1lIjogImZvbyIsICJhdXRob3JpemF0aW9uIjogeyJm bXQiOiAiQVVUSE9SSVpBVElPTiAle2F1dGhvcml6YXRpb25fcm9sZX1JIiwgInByZXNlbnQiOiBm YWxzZSwgImF1dGhvcml6YXRpb25fcm9sZSI6IG51bGx9LCAiaWZfbm90X2V4aXN0cyI6ICIifScp OworU0VMRUNUICdkZGwgbXNnMycgRlJPTSBwZ19sb2dpY2FsX2VtaXRfZGRsX21lc3NhZ2UoJ2Rk bCBtc2czJywgMTYzOTQsIDEsICd7ImZtdCI6ICJDUkVBVEUgJXtwZXJzaXN0ZW5jZX1zIFRBQkxF ICV7aWZfbm90X2V4aXN0c31zICV7aWRlbnRpdHl9RCAoJXt0YWJsZV9lbGVtZW50czosIH1zKSAl e2luaGVyaXRzfXMgJXt0YWJsZXNwYWNlfXMgJXtvbl9jb21taXR9cyAle3BhcnRpdGlvbl9ieX1z ICV7YWNjZXNzX21ldGhvZH1zICV7d2l0aF9jbGF1c2V9cyIsICJpZGVudGl0eSI6IHsib2JqbmFt ZSI6ICJmb28iLCAic2NoZW1hbmFtZSI6ICJlbGVtZW50X3Rlc3QifSwgImluaGVyaXRzIjogeyJm bXQiOiAiSU5IRVJJVFMgKCV7cGFyZW50czosIH1EKSIsICJwYXJlbnRzIjogbnVsbCwgInByZXNl bnQiOiBmYWxzZX0sICJvbl9jb21taXQiOiB7ImZtdCI6ICJPTiBDT01NSVQgJXtvbl9jb21taXRf dmFsdWV9cyIsICJwcmVzZW50IjogZmFsc2UsICJvbl9jb21taXRfdmFsdWUiOiBudWxsfSwgInRh Ymxlc3BhY2UiOiB7ImZtdCI6ICJUQUJMRVNQQUNFICV7dGFibGVzcGFjZX1JIiwgInByZXNlbnQi OiBmYWxzZSwgInRhYmxlc3BhY2UiOiBudWxsfSwgInBlcnNpc3RlbmNlIjogIiIsICJ3aXRoX2Ns YXVzZSI6IHsiZm10IjogIldJVEgiLCAicHJlc2VudCI6IGZhbHNlfSwgInBhcnRpdGlvbl9ieSI6 IHsiZm10IjogIlBBUlRJVElPTiBCWSAle2RlZmluaXRpb259cyIsICJwcmVzZW50IjogZmFsc2Us ICJkZWZpbml0aW9uIjogbnVsbH0sICJhY2Nlc3NfbWV0aG9kIjogeyJmbXQiOiAiVVNJTkcgJXth Y2Nlc3NfbWV0aG9kfUkiLCAicHJlc2VudCI6IGZhbHNlLCAiYWNjZXNzX21ldGhvZCI6IG51bGx9 LCAiaWZfbm90X2V4aXN0cyI6ICIiLCAidGFibGVfZWxlbWVudHMiOiBbeyJmbXQiOiAiJXtuYW1l fUkgJXtjb2x0eXBlfVQgU1RPUkFHRSAle2NvbHN0b3JhZ2V9cyAle2NvbXByZXNzaW9ufXMgJXtj b2xsYXRpb259cyAle25vdF9udWxsfXMgJXtkZWZhdWx0fXMgJXtnZW5lcmF0ZWRfY29sdW1ufXMi LCAibmFtZSI6ICJpZCIsICJ0eXBlIjogImNvbHVtbiIsICJjb2x0eXBlIjogeyJ0eXBtb2QiOiAi IiwgInR5cGFycmF5IjogZmFsc2UsICJ0eXBlbmFtZSI6ICJpbnQ0IiwgInNjaGVtYW5hbWUiOiAi cGdfY2F0YWxvZyJ9LCAiZGVmYXVsdCI6IHsiZm10IjogIkRFRkFVTFQiLCAicHJlc2VudCI6IGZh bHNlfSwgIm5vdF9udWxsIjogIiIsICJjb2xsYXRpb24iOiB7ImZtdCI6ICJDT0xMQVRFIiwgInBy ZXNlbnQiOiBmYWxzZX0sICJjb2xzdG9yYWdlIjogInBsYWluIiwgImNvbXByZXNzaW9uIjogeyJm bXQiOiAiQ09NUFJFU1NJT04gJXtjb21wcmVzc2lvbl9tZXRob2R9SSIsICJwcmVzZW50IjogZmFs c2UsICJjb21wcmVzc2lvbl9tZXRob2QiOiBudWxsfSwgImdlbmVyYXRlZF9jb2x1bW4iOiB7ImZt dCI6ICJHRU5FUkFURUQgQUxXQVlTIEFTIiwgInByZXNlbnQiOiBmYWxzZX19XX19Jyk7CitTRUxF Q1QgZGF0YSBGUk9NIHBnX2xvZ2ljYWxfc2xvdF9nZXRfY2hhbmdlcygncmVncmVzc2lvbl9zbG90 JywgTlVMTCwgTlVMTCwgJ2luY2x1ZGUteGlkcycsICcwJywgJ3NraXAtZW1wdHkteGFjdHMnLCAn MScpOworCiBTRUxFQ1QgcGdfZHJvcF9yZXBsaWNhdGlvbl9zbG90KCdyZWdyZXNzaW9uX3Nsb3Qn KTsKIAogLyogY2hlY2sgdGhhdCB0aGUgc2xvdCBpcyBnb25lICovCmRpZmYgLS1naXQgYS9jb250 cmliL3Rlc3RfZGVjb2RpbmcvdGVzdF9kZWNvZGluZy5jIGIvY29udHJpYi90ZXN0X2RlY29kaW5n L3Rlc3RfZGVjb2RpbmcuYwppbmRleCBlNTIzZDIyLi5jYWJmMGJjIDEwMDY0NAotLS0gYS9jb250 cmliL3Rlc3RfZGVjb2RpbmcvdGVzdF9kZWNvZGluZy5jCisrKyBiL2NvbnRyaWIvdGVzdF9kZWNv ZGluZy90ZXN0X2RlY29kaW5nLmMKQEAgLTE0LDkgKzE0LDExIEBACiAKICNpbmNsdWRlICJjYXRh bG9nL3BnX3R5cGUuaCIKIAorI2luY2x1ZGUgInJlcGxpY2F0aW9uL2RkbG1lc3NhZ2UuaCIKICNp bmNsdWRlICJyZXBsaWNhdGlvbi9sb2dpY2FsLmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vb3Jp Z2luLmgiCiAKKyNpbmNsdWRlICJ0Y29wL2RkbF9kZXBhcnNlLmgiCiAjaW5jbHVkZSAidXRpbHMv YnVpbHRpbnMuaCIKICNpbmNsdWRlICJ1dGlscy9sc3lzY2FjaGUuaCIKICNpbmNsdWRlICJ1dGls cy9tZW11dGlscy5oIgpAQCAtNzIsNiArNzQsMTIgQEAgc3RhdGljIHZvaWQgcGdfZGVjb2RlX21l c3NhZ2UoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LAogCQkJCQkJCSAgUmVvcmRlckJ1ZmZl clRYTiAqdHhuLCBYTG9nUmVjUHRyIGxzbiwKIAkJCQkJCQkgIGJvb2wgdHJhbnNhY3Rpb25hbCwg Y29uc3QgY2hhciAqcHJlZml4LAogCQkJCQkJCSAgU2l6ZSBzeiwgY29uc3QgY2hhciAqbWVzc2Fn ZSk7CitzdGF0aWMgdm9pZCBwZ19kZWNvZGVfZGRsX21lc3NhZ2UoTG9naWNhbERlY29kaW5nQ29u dGV4dCAqY3R4LAorCQkJCQkJCQkgIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKKwkJCQkJCQkJICBY TG9nUmVjUHRyIG1lc3NhZ2VfbHNuLAorCQkJCQkJCQkgIGNvbnN0IGNoYXIgKnByZWZpeCwgT2lk IHJlbGlkLAorCQkJCQkJCQkgIERlcGFyc2VkQ29tbWFuZFR5cGUgY21kdHlwZSwKKwkJCQkJCQkJ ICBTaXplIHN6LCBjb25zdCBjaGFyICptZXNzYWdlKTsKIHN0YXRpYyBib29sIHBnX2RlY29kZV9m aWx0ZXJfcHJlcGFyZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsCiAJCQkJCQkJCQkgVHJh bnNhY3Rpb25JZCB4aWQsCiAJCQkJCQkJCQkgY29uc3QgY2hhciAqZ2lkKTsKQEAgLTEzNyw2ICsx NDUsNyBAQCBfUEdfb3V0cHV0X3BsdWdpbl9pbml0KE91dHB1dFBsdWdpbkNhbGxiYWNrcyAqY2Ip CiAJY2ItPmZpbHRlcl9ieV9vcmlnaW5fY2IgPSBwZ19kZWNvZGVfZmlsdGVyOwogCWNiLT5zaHV0 ZG93bl9jYiA9IHBnX2RlY29kZV9zaHV0ZG93bjsKIAljYi0+bWVzc2FnZV9jYiA9IHBnX2RlY29k ZV9tZXNzYWdlOworCWNiLT5kZGxfY2IgPSBwZ19kZWNvZGVfZGRsX21lc3NhZ2U7CiAJY2ItPmZp bHRlcl9wcmVwYXJlX2NiID0gcGdfZGVjb2RlX2ZpbHRlcl9wcmVwYXJlOwogCWNiLT5iZWdpbl9w cmVwYXJlX2NiID0gcGdfZGVjb2RlX2JlZ2luX3ByZXBhcmVfdHhuOwogCWNiLT5wcmVwYXJlX2Ni ID0gcGdfZGVjb2RlX3ByZXBhcmVfdHhuOwpAQCAtNzUzLDYgKzc2Miw0NSBAQCBwZ19kZWNvZGVf bWVzc2FnZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsCiB9CiAKIHN0YXRpYyB2b2lkCitw Z19kZWNvZGVfZGRsX21lc3NhZ2UoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBSZW9yZGVy QnVmZmVyVFhOICp0eG4sCisJCQkJCSAgWExvZ1JlY1B0ciBtZXNzYWdlX2xzbiwgY29uc3QgY2hh ciAqcHJlZml4LCBPaWQgcmVsaWQsCisJCQkJCSAgRGVwYXJzZWRDb21tYW5kVHlwZSBjbWR0eXBl LCBTaXplIHN6LCBjb25zdCBjaGFyICptZXNzYWdlKQoreworCU91dHB1dFBsdWdpblByZXBhcmVX cml0ZShjdHgsIHRydWUpOworCWFwcGVuZFN0cmluZ0luZm8oY3R4LT5vdXQsICJtZXNzYWdlOiBw cmVmaXg6ICVzLCByZWxpZDogJXUsICIsCisJCQkJCSBwcmVmaXgsIHJlbGlkKTsKKworCXN3aXRj aChjbWR0eXBlKQorCXsKKwljYXNlIERDVF9TaW1wbGVDbWQ6CisJCWFwcGVuZFN0cmluZ0luZm8o Y3R4LT5vdXQsICJjbWR0eXBlOiBTaW1wbGUsICIpOworCQlicmVhazsKKwljYXNlIERDVF9UYWJs ZURyb3BTdGFydDoKKwkJYXBwZW5kU3RyaW5nSW5mbyhjdHgtPm91dCwgImNtZHR5cGU6IERyb3Ag c3RhcnQsICIpOworCQlicmVhazsKKwljYXNlIERDVF9UYWJsZURyb3BFbmQ6CisJCWFwcGVuZFN0 cmluZ0luZm8oY3R4LT5vdXQsICJjbWR0eXBlOiBEcm9wIGVuZCwgIik7CisJCWJyZWFrOworCWNh c2UgRENUX1RhYmxlQWx0ZXI6CisJCWFwcGVuZFN0cmluZ0luZm8oY3R4LT5vdXQsICJjbWR0eXBl OiBBbHRlciB0YWJsZSwgIik7CisJCWJyZWFrOworCWNhc2UgRENUX09iamVjdENyZWF0ZToKKwkJ YXBwZW5kU3RyaW5nSW5mbyhjdHgtPm91dCwgImNtZHR5cGU6IENyZWF0ZSwgIik7CisJCWJyZWFr OworCWNhc2UgRENUX09iamVjdERyb3A6CisJCWFwcGVuZFN0cmluZ0luZm8oY3R4LT5vdXQsICJj bWR0eXBlOiBEcm9wLCAiKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYXBwZW5kU3RyaW5nSW5m byhjdHgtPm91dCwgImNtZHR5cGU6IEludmFsaWQsICIpOworCQlicmVhazsKKwl9CisKKwlhcHBl bmRTdHJpbmdJbmZvKGN0eC0+b3V0LCAic3o6ICV6dSBjb250ZW50OiIsIHN6KTsKKwlhcHBlbmRC aW5hcnlTdHJpbmdJbmZvKGN0eC0+b3V0LCBtZXNzYWdlLCBzeik7CisJT3V0cHV0UGx1Z2luV3Jp dGUoY3R4LCB0cnVlKTsKK30KKworc3RhdGljIHZvaWQKIHBnX2RlY29kZV9zdHJlYW1fc3RhcnQo TG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LAogCQkJCQkgICBSZW9yZGVyQnVmZmVyVFhOICp0 eG4pCiB7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3Mvcm1ncmRlc2MvTWFrZWZpbGUg Yi9zcmMvYmFja2VuZC9hY2Nlc3Mvcm1ncmRlc2MvTWFrZWZpbGUKaW5kZXggZjg4ZDcyZi4uMmZm MDFlNiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNjL01ha2VmaWxlCisr KyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy9NYWtlZmlsZQpAQCAtMTgsNiArMTgsNyBA QCBPQkpTID0gXAogCWdpc3RkZXNjLm8gXAogCWhhc2hkZXNjLm8gXAogCWhlYXBkZXNjLm8gXAor CWxvZ2ljYWxkZGxtc2dkZXNjLm8gXAogCWxvZ2ljYWxtc2dkZXNjLm8gXAogCW14YWN0ZGVzYy5v IFwKIAluYnRkZXNjLm8gXApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNj L2xvZ2ljYWxkZGxtc2dkZXNjLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3Mvcm1ncmRlc2MvbG9naWNh bGRkbG1zZ2Rlc2MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNWU5MzBj Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNjL2xvZ2ljYWxk ZGxtc2dkZXNjLmMKQEAgLTAsMCArMSw1MiBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICog bG9naWNhbGRkbG1zZ2Rlc2MuYworICoJICBybWdyIGRlc2NyaXB0b3Igcm91dGluZXMgZm9yIHJl cGxpY2F0aW9uL2xvZ2ljYWwvZGRsbWVzc2FnZS5jCisgKgorICogUG9ydGlvbnMgQ29weXJpZ2h0 IChjKSAyMDE1LTIwMjIsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKgor ICoKKyAqIElERU5USUZJQ0FUSU9OCisgKgkgIHNyYy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy9s b2dpY2FsZGRsbXNnZGVzYy5jCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpbmNsdWRl ICJwb3N0Z3Jlcy5oIgorCisjaW5jbHVkZSAicmVwbGljYXRpb24vZGRsbWVzc2FnZS5oIgorCit2 b2lkCitsb2dpY2FsZGRsbXNnX2Rlc2MoU3RyaW5nSW5mbyBidWYsIFhMb2dSZWFkZXJTdGF0ZSAq cmVjb3JkKQoreworCWNoYXIJICAgKnJlYyA9IFhMb2dSZWNHZXREYXRhKHJlY29yZCk7CisJdWlu dDgJCWluZm8gPSBYTG9nUmVjR2V0SW5mbyhyZWNvcmQpICYgflhMUl9JTkZPX01BU0s7CisKKwlp ZiAoaW5mbyA9PSBYTE9HX0xPR0lDQUxfRERMX01FU1NBR0UpCisJeworCQl4bF9sb2dpY2FsX2Rk bF9tZXNzYWdlICp4bHJlYyA9ICh4bF9sb2dpY2FsX2RkbF9tZXNzYWdlICopIHJlYzsKKwkJY2hh cgkgICAqcHJlZml4ID0geGxyZWMtPm1lc3NhZ2U7CisJCWNoYXIJICAgKm1lc3NhZ2UgPSB4bHJl Yy0+bWVzc2FnZSArIHhscmVjLT5wcmVmaXhfc2l6ZTsKKwkJY2hhcgkgICAqc2VwID0gIiI7CisK KwkJQXNzZXJ0KHByZWZpeFt4bHJlYy0+cHJlZml4X3NpemVdICE9ICdcMCcpOworCisJCWFwcGVu ZFN0cmluZ0luZm8oYnVmLCAicHJlZml4IFwiJXNcIjsgcGF5bG9hZCAoJXp1IGJ5dGVzKTogIiwK KwkJCQkJCSBwcmVmaXgsIHhscmVjLT5tZXNzYWdlX3NpemUpOworCQlhcHBlbmRTdHJpbmdJbmZv KGJ1ZiwgInJlbGlkICV1IGNtZHR5cGUgJXUiLCB4bHJlYy0+cmVsaWQsIHhscmVjLT5jbWR0eXBl KTsKKwkJLyogV3JpdGUgbWVzc2FnZSBwYXlsb2FkIGFzIGEgc2VyaWVzIG9mIGhleCBieXRlcyAq LworCQlmb3IgKGludCBjbnQgPSAwOyBjbnQgPCB4bHJlYy0+bWVzc2FnZV9zaXplOyBjbnQrKykK KwkJeworCQkJYXBwZW5kU3RyaW5nSW5mbyhidWYsICIlcyUwMlgiLCBzZXAsICh1bnNpZ25lZCBj aGFyKSBtZXNzYWdlW2NudF0pOworCQkJc2VwID0gIiAiOworCQl9CisJfQorfQorCitjb25zdCBj aGFyICoKK2xvZ2ljYWxkZGxtc2dfaWRlbnRpZnkodWludDggaW5mbykKK3sKKwlpZiAoKGluZm8g JiB+WExSX0lORk9fTUFTSykgPT0gWExPR19MT0dJQ0FMX0RETF9NRVNTQUdFKQorCQlyZXR1cm4g IkRETCI7CisKKwlyZXR1cm4gTlVMTDsKK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vz cy9ybWdyZGVzYy9tZXNvbi5idWlsZCBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy9tZXNv bi5idWlsZAppbmRleCAxNjZjZWU2Li43ODFlMmQ3IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9h Y2Nlc3Mvcm1ncmRlc2MvbWVzb24uYnVpbGQKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3Jk ZXNjL21lc29uLmJ1aWxkCkBAIC0xMSw2ICsxMSw3IEBAIHJtZ3JfZGVzY19zb3VyY2VzID0gZmls ZXMoCiAgICdnaXN0ZGVzYy5jJywKICAgJ2hhc2hkZXNjLmMnLAogICAnaGVhcGRlc2MuYycsCisg ICdsb2dpY2FsZGRsbXNnZGVzYy5jJywKICAgJ2xvZ2ljYWxtc2dkZXNjLmMnLAogICAnbXhhY3Rk ZXNjLmMnLAogICAnbmJ0ZGVzYy5jJywKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90 cmFuc2FtL3JtZ3IuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3JtZ3IuYwppbmRleCA3 ZDY3ZWRhLi42NzhlODFhIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9y bWdyLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vcm1nci5jCkBAIC0yNyw2ICsy Nyw3IEBACiAjaW5jbHVkZSAiZm1nci5oIgogI2luY2x1ZGUgImZ1bmNhcGkuaCIKICNpbmNsdWRl ICJtaXNjYWRtaW4uaCIKKyNpbmNsdWRlICJyZXBsaWNhdGlvbi9kZGxtZXNzYWdlLmgiCiAjaW5j bHVkZSAicmVwbGljYXRpb24vZGVjb2RlLmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vbWVzc2Fn ZS5oIgogI2luY2x1ZGUgInJlcGxpY2F0aW9uL29yaWdpbi5oIgpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9NYWtlZmlsZSBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0 aW9uL2xvZ2ljYWwvTWFrZWZpbGUKaW5kZXggMmRjMjVlMy4uZDM2ODBlOSAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9NYWtlZmlsZQorKysgYi9zcmMvYmFja2Vu ZC9yZXBsaWNhdGlvbi9sb2dpY2FsL01ha2VmaWxlCkBAIC0xNiw2ICsxNiw3IEBAIG92ZXJyaWRl IENQUEZMQUdTIDo9IC1JJChzcmNkaXIpICQoQ1BQRkxBR1MpCiAKIE9CSlMgPSBcCiAJYXBwbHlw YXJhbGxlbHdvcmtlci5vIFwKKwlkZGxtZXNzYWdlLm8gXAogCWRlY29kZS5vIFwKIAlsYXVuY2hl ci5vIFwKIAlsb2dpY2FsLm8gXApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24v bG9naWNhbC9kZGxtZXNzYWdlLmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2Rk bG1lc3NhZ2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTFlNTZlCi0t LSAvZGV2L251bGwKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9kZGxtZXNz YWdlLmMKQEAgLTAsMCArMSw4NCBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogZGRsbWVz c2FnZS5jCisgKgkgIExvZ2ljYWwgRERMIG1lc3NhZ2VzLgorICoKKyAqIENvcHlyaWdodCAoYykg MjAyMiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKiBJREVOVElG SUNBVElPTgorICoJICBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2RkbG1lc3NhZ2Uu YworICoKKyAqIE5PVEVTCisgKgorICogTG9naWNhbCBEREwgbWVzc2FnZXMgYWxsb3cgWExPRyBs b2dnaW5nIG9mIERETCBjb21tYW5kIHN0cmluZ3MgdGhhdAorICogZ2V0IHBhc3NlZCB0byB0aGUg bG9naWNhbCBkZWNvZGluZyBwbHVnaW4uIEluIG5vcm1hbCBYTE9HIHByb2Nlc3NpbmcgdGhleQor ICogYXJlIHNhbWUgYXMgTk9PUC4KKyAqCisgKiBVbmxpa2UgZ2VuZXJpYyBsb2dpY2FsIG1lc3Nh Z2VzLCB0aGVzZSBEREwgbWVzc2FnZXMgaGF2ZSBvbmx5IHRyYW5zYWN0aW9uYWwKKyAqIG1vZGUu IE5vdGUgYnkgZGVmYXVsdCBERExzIGluIFBvc3RncmVTUUwgYXJlIHRyYW5zYWN0aW9uYWwuCisg KgorICogVGhlc2UgbWVzc2FnZXMgYXJlIHBhcnQgb2YgY3VycmVudCB0cmFuc2FjdGlvbiBhbmQg d2lsbCBiZSBzZW50IHRvCisgKiBkZWNvZGluZyBwbHVnaW4gdXNpbmcgaW4gYSBzYW1lIHdheSBh cyBETUwgb3BlcmF0aW9ucy4KKyAqCisgKiBFdmVyeSBtZXNzYWdlIGNhcnJpZXMgcHJlZml4IHRv IGF2b2lkIGNvbmZsaWN0cyBiZXR3ZWVuIGRpZmZlcmVudCBkZWNvZGluZworICogcGx1Z2lucy4g VGhlIHBsdWdpbiBhdXRob3JzIG11c3QgdGFrZSBleHRyYSBjYXJlIHRvIHVzZSB1bmlxdWUgcHJl Zml4LAorICogZ29vZCBvcHRpb25zIHNlZW1zIHRvIGJlIGZvciBleGFtcGxlIHRvIHVzZSB0aGUg bmFtZSBvZiB0aGUgZXh0ZW5zaW9uLgorICoKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisK KyNpbmNsdWRlICJwb3N0Z3Jlcy5oIgorCisjaW5jbHVkZSAiYWNjZXNzL3hhY3QuaCIKKyNpbmNs dWRlICJhY2Nlc3MveGxvZ2luc2VydC5oIgorI2luY2x1ZGUgImNhdGFsb2cvbmFtZXNwYWNlLmgi CisjaW5jbHVkZSAibWlzY2FkbWluLmgiCisjaW5jbHVkZSAibm9kZXMvZXhlY25vZGVzLmgiCisj aW5jbHVkZSAicmVwbGljYXRpb24vbG9naWNhbC5oIgorI2luY2x1ZGUgInJlcGxpY2F0aW9uL2Rk bG1lc3NhZ2UuaCIKKyNpbmNsdWRlICJ1dGlscy9tZW11dGlscy5oIgorCisvKgorICogV3JpdGUg bG9naWNhbCBkZWNvZGluZyBEREwgbWVzc2FnZSBpbnRvIFhMb2cuCisgKi8KK1hMb2dSZWNQdHIK K0xvZ0xvZ2ljYWxERExNZXNzYWdlKGNvbnN0IGNoYXIgKnByZWZpeCwgT2lkIHJlbGlkLCBEZXBh cnNlZENvbW1hbmRUeXBlIGNtZHR5cGUsCisJCQkJCSBjb25zdCBjaGFyICptZXNzYWdlLCBzaXpl X3Qgc2l6ZSkKK3sKKwl4bF9sb2dpY2FsX2RkbF9tZXNzYWdlIHhscmVjOworCisJIC8qIEVuc3Vy ZSB3ZSBoYXZlIGEgdmFsaWQgdHJhbnNhY3Rpb24gaWQuICovCisJQXNzZXJ0KElzVHJhbnNhY3Rp b25TdGF0ZSgpKTsKKwlHZXRDdXJyZW50VHJhbnNhY3Rpb25JZCgpOworCisJeGxyZWMuZGJJZCA9 IE15RGF0YWJhc2VJZDsKKwkvKiBUcmFpbGluZyB6ZXJvIGlzIGNyaXRpY2FsOyBzZWUgbG9naWNh bGRkbG1zZ19kZXNjICovCisJeGxyZWMucHJlZml4X3NpemUgPSBzdHJsZW4ocHJlZml4KSArIDE7 CisJeGxyZWMubWVzc2FnZV9zaXplID0gc2l6ZTsKKwl4bHJlYy5yZWxpZCA9IHJlbGlkOworCXhs cmVjLmNtZHR5cGUgPSBjbWR0eXBlOworCisJWExvZ0JlZ2luSW5zZXJ0KCk7CisJWExvZ1JlZ2lz dGVyRGF0YSgoY2hhciAqKSAmeGxyZWMsIFNpemVPZkxvZ2ljYWxERExNZXNzYWdlKTsKKwlYTG9n UmVnaXN0ZXJEYXRhKHVuY29uc3RpZnkoY2hhciAqLCBwcmVmaXgpLCB4bHJlYy5wcmVmaXhfc2l6 ZSk7CisJWExvZ1JlZ2lzdGVyRGF0YSh1bmNvbnN0aWZ5KGNoYXIgKiwgbWVzc2FnZSksIHNpemUp OworCisJLyogQWxsb3cgb3JpZ2luIGZpbHRlcmluZyAqLworCVhMb2dTZXRSZWNvcmRGbGFncyhY TE9HX0lOQ0xVREVfT1JJR0lOKTsKKworCXJldHVybiBYTG9nSW5zZXJ0KFJNX0xPR0lDQUxERExN U0dfSUQsIFhMT0dfTE9HSUNBTF9ERExfTUVTU0FHRSk7Cit9CisKKy8qCisgKiBSZWRvIGlzIGJh c2ljYWxseSBqdXN0IG5vb3AgZm9yIGxvZ2ljYWwgZGVjb2RpbmcgZGRsIG1lc3NhZ2VzLgorICov Cit2b2lkCitsb2dpY2FsZGRsbXNnX3JlZG8oWExvZ1JlYWRlclN0YXRlICpyZWNvcmQpCit7CisJ dWludDgJCWluZm8gPSBYTG9nUmVjR2V0SW5mbyhyZWNvcmQpICYgflhMUl9JTkZPX01BU0s7CisK KwlpZiAoaW5mbyAhPSBYTE9HX0xPR0lDQUxfRERMX01FU1NBR0UpCisJCWVsb2coUEFOSUMsICJs b2dpY2FsZGRsbXNnX3JlZG86IHVua25vd24gb3AgY29kZSAldSIsIGluZm8pOworCisJLyogVGhp cyBpcyBvbmx5IGludGVyZXN0aW5nIGZvciBsb2dpY2FsIGRlY29kaW5nLCBzZWUgZGVjb2RlLmMu ICovCit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2RlY29k ZS5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9kZWNvZGUuYwppbmRleCBhNTNl MjNjLi40MTUxYWE3IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2Fs L2RlY29kZS5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvZGVjb2RlLmMK QEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlICJhY2Nlc3MveGxvZ3V0aWxzLmgiCiAjaW5jbHVk ZSAiY2F0YWxvZy9wZ19jb250cm9sLmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vZGVjb2RlLmgi CisjaW5jbHVkZSAicmVwbGljYXRpb24vZGRsbWVzc2FnZS5oIgogI2luY2x1ZGUgInJlcGxpY2F0 aW9uL2xvZ2ljYWwuaCIKICNpbmNsdWRlICJyZXBsaWNhdGlvbi9tZXNzYWdlLmgiCiAjaW5jbHVk ZSAicmVwbGljYXRpb24vb3JpZ2luLmgiCkBAIC02MDQsNiArNjA1LDQ2IEBAIGxvZ2ljYWxtc2df ZGVjb2RlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgWExvZ1JlY29yZEJ1ZmZlciAqYnVm KQogfQogCiAvKgorICogSGFuZGxlIHJtZ3IgTE9HSUNBTERETE1TR19JRCByZWNvcmRzIGZvciBE ZWNvZGVSZWNvcmRJbnRvUmVvcmRlckJ1ZmZlcigpLgorICovCit2b2lkCitsb2dpY2FsZGRsX2Rl Y29kZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsIFhMb2dSZWNvcmRCdWZmZXIgKmJ1ZikK K3sKKwlTbmFwQnVpbGQgICpidWlsZGVyID0gY3R4LT5zbmFwc2hvdF9idWlsZGVyOworCVhMb2dS ZWFkZXJTdGF0ZSAqciA9IGJ1Zi0+cmVjb3JkOworCVRyYW5zYWN0aW9uSWQgeGlkID0gWExvZ1Jl Y0dldFhpZChyKTsKKwl1aW50OAkJaW5mbyA9IFhMb2dSZWNHZXRJbmZvKHIpICYgflhMUl9JTkZP X01BU0s7CisJUmVwT3JpZ2luSWQgb3JpZ2luX2lkID0gWExvZ1JlY0dldE9yaWdpbihyKTsKKwl4 bF9sb2dpY2FsX2RkbF9tZXNzYWdlICptZXNzYWdlOworCisJaWYgKGluZm8gIT0gWExPR19MT0dJ Q0FMX0RETF9NRVNTQUdFKQorCQllbG9nKEVSUk9SLCAidW5leHBlY3RlZCBSTV9MT0dJQ0FMRERM TVNHX0lEIHJlY29yZCB0eXBlOiAldSIsIGluZm8pOworCisJUmVvcmRlckJ1ZmZlclByb2Nlc3NY aWQoY3R4LT5yZW9yZGVyLCBYTG9nUmVjR2V0WGlkKHIpLCBidWYtPm9yaWdwdHIpOworCisJLyoK KwkgKiBJZiB3ZSBkb24ndCBoYXZlIHNuYXBzaG90IG9yIHdlIGFyZSBqdXN0IGZhc3QtZm9yd2Fy ZGluZywgdGhlcmUgaXMgbm8KKwkgKiBwb2ludCBpbiBkZWNvZGluZyBkZGwgbWVzc2FnZXMuCisJ ICovCisJaWYgKFNuYXBCdWlsZEN1cnJlbnRTdGF0ZShidWlsZGVyKSA8IFNOQVBCVUlMRF9GVUxM X1NOQVBTSE9UIHx8CisJCWN0eC0+ZmFzdF9mb3J3YXJkKQorCQlyZXR1cm47CisKKwltZXNzYWdl ID0gKHhsX2xvZ2ljYWxfZGRsX21lc3NhZ2UgKikgWExvZ1JlY0dldERhdGEocik7CisKKwlpZiAo bWVzc2FnZS0+ZGJJZCAhPSBjdHgtPnNsb3QtPmRhdGEuZGF0YWJhc2UgfHwKKwkJRmlsdGVyQnlP cmlnaW4oY3R4LCBvcmlnaW5faWQpKQorCQlyZXR1cm47CisKKwlpZiAoU25hcEJ1aWxkUHJvY2Vz c0NoYW5nZShidWlsZGVyLCB4aWQsIGJ1Zi0+b3JpZ3B0cikpCisJCVJlb3JkZXJCdWZmZXJRdWV1 ZURETE1lc3NhZ2UoY3R4LT5yZW9yZGVyLCB4aWQsIGJ1Zi0+ZW5kcHRyLAorCQkJCQkJCQkJIG1l c3NhZ2UtPm1lc3NhZ2UsIC8qIGZpcnN0IHBhcnQgb2YgbWVzc2FnZSBpcyBwcmVmaXggKi8KKwkJ CQkJCQkJCSBtZXNzYWdlLT5tZXNzYWdlX3NpemUsCisJCQkJCQkJCQkgbWVzc2FnZS0+bWVzc2Fn ZSArIG1lc3NhZ2UtPnByZWZpeF9zaXplLAorCQkJCQkJCQkJIG1lc3NhZ2UtPnJlbGlkLCBtZXNz YWdlLT5jbWR0eXBlKTsKK30KKworLyoKICAqIENvbnNvbGlkYXRlZCBjb21taXQgcmVjb3JkIGhh bmRsaW5nIGJldHdlZW4gdGhlIGRpZmZlcmVudCBmb3JtIG9mIGNvbW1pdAogICogcmVjb3Jkcy4K ICAqCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2xvZ2ljYWwu YyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbG9naWNhbC5jCmluZGV4IDFhNThk ZDcuLmQ1YWZhZTkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwv bG9naWNhbC5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbG9naWNhbC5j CkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiZm1nci5oIgogI2luY2x1ZGUgIm1pc2NhZG1p bi5oIgogI2luY2x1ZGUgInBnc3RhdC5oIgorI2luY2x1ZGUgInJlcGxpY2F0aW9uL2RkbG1lc3Nh Z2UuaCIKICNpbmNsdWRlICJyZXBsaWNhdGlvbi9kZWNvZGUuaCIKICNpbmNsdWRlICJyZXBsaWNh dGlvbi9sb2dpY2FsLmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vb3JpZ2luLmgiCkBAIC03Myw2 ICs3NCwxMCBAQCBzdGF0aWMgdm9pZCB0cnVuY2F0ZV9jYl93cmFwcGVyKFJlb3JkZXJCdWZmZXIg KmNhY2hlLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCiBzdGF0aWMgdm9pZCBtZXNzYWdlX2NiX3dy YXBwZXIoUmVvcmRlckJ1ZmZlciAqY2FjaGUsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKIAkJCQkJ CQkgICBYTG9nUmVjUHRyIG1lc3NhZ2VfbHNuLCBib29sIHRyYW5zYWN0aW9uYWwsCiAJCQkJCQkJ ICAgY29uc3QgY2hhciAqcHJlZml4LCBTaXplIG1lc3NhZ2Vfc2l6ZSwgY29uc3QgY2hhciAqbWVz c2FnZSk7CitzdGF0aWMgdm9pZCBkZGxfY2Jfd3JhcHBlcihSZW9yZGVyQnVmZmVyICpjYWNoZSwg UmVvcmRlckJ1ZmZlclRYTiAqdHhuLAorCQkJCQkJCQkgIFhMb2dSZWNQdHIgbWVzc2FnZV9sc24s IGNvbnN0IGNoYXIgKnByZWZpeCwKKwkJCQkJCQkJICBPaWQgcmVsaWQsIERlcGFyc2VkQ29tbWFu ZFR5cGUgY21kdHlwZSwKKwkJCQkJCQkJICBTaXplIG1lc3NhZ2Vfc2l6ZSwgY29uc3QgY2hhciAq bWVzc2FnZSk7CiAKIC8qIHN0cmVhbWluZyBjYWxsYmFja3MgKi8KIHN0YXRpYyB2b2lkIHN0cmVh bV9zdGFydF9jYl93cmFwcGVyKFJlb3JkZXJCdWZmZXIgKmNhY2hlLCBSZW9yZGVyQnVmZmVyVFhO ICp0eG4sCkBAIC0yMTgsNiArMjIzLDcgQEAgU3RhcnR1cERlY29kaW5nQ29udGV4dChMaXN0ICpv dXRwdXRfcGx1Z2luX29wdGlvbnMsCiAJY3R4LT5yZW9yZGVyLT5hcHBseV90cnVuY2F0ZSA9IHRy dW5jYXRlX2NiX3dyYXBwZXI7CiAJY3R4LT5yZW9yZGVyLT5jb21taXQgPSBjb21taXRfY2Jfd3Jh cHBlcjsKIAljdHgtPnJlb3JkZXItPm1lc3NhZ2UgPSBtZXNzYWdlX2NiX3dyYXBwZXI7CisJY3R4 LT5yZW9yZGVyLT5kZGwgPSBkZGxfY2Jfd3JhcHBlcjsKIAogCS8qCiAJICogVG8gc3VwcG9ydCBz dHJlYW1pbmcsIHdlIHJlcXVpcmUgc3RhcnQvc3RvcC9hYm9ydC9jb21taXQvY2hhbmdlCkBAIC0x MjIzLDYgKzEyMjksNDQgQEAgbWVzc2FnZV9jYl93cmFwcGVyKFJlb3JkZXJCdWZmZXIgKmNhY2hl LCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCiB9CiAKIHN0YXRpYyB2b2lkCitkZGxfY2Jfd3JhcHBl cihSZW9yZGVyQnVmZmVyICpjYWNoZSwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAorCQkJCQkgIFhM b2dSZWNQdHIgbWVzc2FnZV9sc24sCisJCQkJCSAgY29uc3QgY2hhciAqcHJlZml4LCBPaWQgcmVs aWQsIERlcGFyc2VkQ29tbWFuZFR5cGUgY21kdHlwZSwKKwkJCQkJICBTaXplIG1lc3NhZ2Vfc2l6 ZSwKKwkJCQkJICBjb25zdCBjaGFyICptZXNzYWdlKQoreworCUxvZ2ljYWxEZWNvZGluZ0NvbnRl eHQgKmN0eCA9IGNhY2hlLT5wcml2YXRlX2RhdGE7CisJTG9naWNhbEVycm9yQ2FsbGJhY2tTdGF0 ZSBzdGF0ZTsKKwlFcnJvckNvbnRleHRDYWxsYmFjayBlcnJjYWxsYmFjazsKKworCUFzc2VydCgh Y3R4LT5mYXN0X2ZvcndhcmQpOworCisJaWYgKGN0eC0+Y2FsbGJhY2tzLmRkbF9jYiA9PSBOVUxM KQorCQlyZXR1cm47CisKKwkvKiBQdXNoIGNhbGxiYWNrICsgaW5mbyBvbiB0aGUgZXJyb3IgY29u dGV4dCBzdGFjayAqLworCXN0YXRlLmN0eCA9IGN0eDsKKwlzdGF0ZS5jYWxsYmFja19uYW1lID0g ImRkbCI7CisJc3RhdGUucmVwb3J0X2xvY2F0aW9uID0gbWVzc2FnZV9sc247CisJZXJyY2FsbGJh Y2suY2FsbGJhY2sgPSBvdXRwdXRfcGx1Z2luX2Vycm9yX2NhbGxiYWNrOworCWVycmNhbGxiYWNr LmFyZyA9ICh2b2lkICopICZzdGF0ZTsKKwllcnJjYWxsYmFjay5wcmV2aW91cyA9IGVycm9yX2Nv bnRleHRfc3RhY2s7CisJZXJyb3JfY29udGV4dF9zdGFjayA9ICZlcnJjYWxsYmFjazsKKworCS8q IHNldCBvdXRwdXQgc3RhdGUgKi8KKwljdHgtPmFjY2VwdF93cml0ZXMgPSB0cnVlOworCWN0eC0+ d3JpdGVfeGlkID0gdHhuICE9IE5VTEwgPyB0eG4tPnhpZCA6IEludmFsaWRUcmFuc2FjdGlvbklk OworCWN0eC0+d3JpdGVfbG9jYXRpb24gPSBtZXNzYWdlX2xzbjsKKworCS8qIGRvIHRoZSBhY3R1 YWwgd29yazogY2FsbCBjYWxsYmFjayAqLworCWN0eC0+Y2FsbGJhY2tzLmRkbF9jYihjdHgsIHR4 biwgbWVzc2FnZV9sc24sIHByZWZpeCwgcmVsaWQsIGNtZHR5cGUsCisJCQkJCQkJCSBtZXNzYWdl X3NpemUsIG1lc3NhZ2UpOworCisJLyogUG9wIHRoZSBlcnJvciBjb250ZXh0IHN0YWNrICovCisJ ZXJyb3JfY29udGV4dF9zdGFjayA9IGVycmNhbGxiYWNrLnByZXZpb3VzOworfQorCitzdGF0aWMg dm9pZAogc3RyZWFtX3N0YXJ0X2NiX3dyYXBwZXIoUmVvcmRlckJ1ZmZlciAqY2FjaGUsIFJlb3Jk ZXJCdWZmZXJUWE4gKnR4biwKIAkJCQkJCVhMb2dSZWNQdHIgZmlyc3RfbHNuKQogewpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9sb2dpY2FsZnVuY3MuYyBiL3Ny Yy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbG9naWNhbGZ1bmNzLmMKaW5kZXggZmExYjY0 MS4uOTJmNWY5MyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9s b2dpY2FsZnVuY3MuYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2xvZ2lj YWxmdW5jcy5jCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAibm9kZXMvbWFrZWZ1bmNzLmgi CiAjaW5jbHVkZSAicmVwbGljYXRpb24vZGVjb2RlLmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24v bG9naWNhbC5oIgorI2luY2x1ZGUgInJlcGxpY2F0aW9uL2RkbG1lc3NhZ2UuaCIKICNpbmNsdWRl ICJyZXBsaWNhdGlvbi9tZXNzYWdlLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9mZC5oIgogI2luY2x1 ZGUgInV0aWxzL2FycmF5LmgiCkBAIC0zODgsMyArMzg5LDI2IEBAIHBnX2xvZ2ljYWxfZW1pdF9t ZXNzYWdlX3RleHQoUEdfRlVOQ1RJT05fQVJHUykKIAkvKiBieXRlYSBhbmQgdGV4dCBhcmUgY29t cGF0aWJsZSAqLwogCXJldHVybiBwZ19sb2dpY2FsX2VtaXRfbWVzc2FnZV9ieXRlYShmY2luZm8p OwogfQorCisvKgorICogU1FMIGZ1bmN0aW9uIGZvciB3cml0aW5nIGxvZ2ljYWwgZGVjb2Rpbmcg RERMIG1lc3NhZ2UgaW50byBXQUwuCisgKi8KK0RhdHVtCitwZ19sb2dpY2FsX2VtaXRfZGRsX21l c3NhZ2VfYnl0ZWEoUEdfRlVOQ1RJT05fQVJHUykKK3sKKwljaGFyCSAgICpwcmVmaXggPSB0ZXh0 X3RvX2NzdHJpbmcoUEdfR0VUQVJHX1RFWFRfUFAoMCkpOworCU9pZAkJCXJlbGlkID0gUEdfR0VU QVJHX09JRCgxKTsKKwlEZXBhcnNlZENvbW1hbmRUeXBlIGNtZHR5cGUgPSBQR19HRVRBUkdfSU5U MTYoMik7CisJY2hhcgkgICAqZGF0YSA9IHRleHRfdG9fY3N0cmluZyhQR19HRVRBUkdfVEVYVF9Q UCgzKSk7CisJWExvZ1JlY1B0cglsc247CisKKwlsc24gPSBMb2dMb2dpY2FsRERMTWVzc2FnZShw cmVmaXgsIHJlbGlkLCBjbWR0eXBlLCBkYXRhLCBzdHJsZW4oZGF0YSkpOworCVBHX1JFVFVSTl9M U04obHNuKTsKK30KKworRGF0dW0KK3BnX2xvZ2ljYWxfZW1pdF9kZGxfbWVzc2FnZV90ZXh0KFBH X0ZVTkNUSU9OX0FSR1MpCit7CisJLyogYnl0ZWEgYW5kIHRleHQgYXJlIGNvbXBhdGlibGUgKi8K KwlyZXR1cm4gcGdfbG9naWNhbF9lbWl0X2RkbF9tZXNzYWdlX2J5dGVhKGZjaW5mbyk7Cit9CmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL21lc29uLmJ1aWxkIGIv c3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9tZXNvbi5idWlsZAppbmRleCBkNDhjZDRj Li45OWM2MDhkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL21l c29uLmJ1aWxkCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbWVzb24uYnVp bGQKQEAgLTIsNiArMiw3IEBACiAKIGJhY2tlbmRfc291cmNlcyArPSBmaWxlcygKICAgJ2FwcGx5 cGFyYWxsZWx3b3JrZXIuYycsCisgICdkZGxtZXNzYWdlLmMnLAogICAnZGVjb2RlLmMnLAogICAn bGF1bmNoZXIuYycsCiAgICdsb2dpY2FsLmMnLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVw bGljYXRpb24vbG9naWNhbC9yZW9yZGVyYnVmZmVyLmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlv bi9sb2dpY2FsL3Jlb3JkZXJidWZmZXIuYwppbmRleCA1NGVlODI0Li45YTdkYzllIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Jlb3JkZXJidWZmZXIuYworKysg Yi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Jlb3JkZXJidWZmZXIuYwpAQCAtOTQs NiArOTQsNyBAQAogI2luY2x1ZGUgImxpYi9iaW5hcnloZWFwLmgiCiAjaW5jbHVkZSAibWlzY2Fk bWluLmgiCiAjaW5jbHVkZSAicGdzdGF0LmgiCisjaW5jbHVkZSAicmVwbGljYXRpb24vZGRsbWVz c2FnZS5oIgogI2luY2x1ZGUgInJlcGxpY2F0aW9uL2xvZ2ljYWwuaCIKICNpbmNsdWRlICJyZXBs aWNhdGlvbi9yZW9yZGVyYnVmZmVyLmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vc2xvdC5oIgpA QCAtNTE2LDYgKzUxNywxNCBAQCBSZW9yZGVyQnVmZmVyUmV0dXJuQ2hhbmdlKFJlb3JkZXJCdWZm ZXIgKnJiLCBSZW9yZGVyQnVmZmVyQ2hhbmdlICpjaGFuZ2UsCiAJCQkJcGZyZWUoY2hhbmdlLT5k YXRhLm1zZy5tZXNzYWdlKTsKIAkJCWNoYW5nZS0+ZGF0YS5tc2cubWVzc2FnZSA9IE5VTEw7CiAJ CQlicmVhazsKKwkJY2FzZSBSRU9SREVSX0JVRkZFUl9DSEFOR0VfRERMOgorCQkJaWYgKGNoYW5n ZS0+ZGF0YS5kZGwucHJlZml4ICE9IE5VTEwpCisJCQkJcGZyZWUoY2hhbmdlLT5kYXRhLmRkbC5w cmVmaXgpOworCQkJY2hhbmdlLT5kYXRhLmRkbC5wcmVmaXggPSBOVUxMOworCQkJaWYgKGNoYW5n ZS0+ZGF0YS5kZGwubWVzc2FnZSAhPSBOVUxMKQorCQkJCXBmcmVlKGNoYW5nZS0+ZGF0YS5kZGwu bWVzc2FnZSk7CisJCQljaGFuZ2UtPmRhdGEuZGRsLm1lc3NhZ2UgPSBOVUxMOworCQkJYnJlYWs7 CiAJCWNhc2UgUkVPUkRFUl9CVUZGRVJfQ0hBTkdFX0lOVkFMSURBVElPTjoKIAkJCWlmIChjaGFu Z2UtPmRhdGEuaW52YWwuaW52YWxpZGF0aW9ucykKIAkJCQlwZnJlZShjaGFuZ2UtPmRhdGEuaW52 YWwuaW52YWxpZGF0aW9ucyk7CkBAIC04OTUsNiArOTA0LDM2IEBAIFJlb3JkZXJCdWZmZXJRdWV1 ZU1lc3NhZ2UoUmVvcmRlckJ1ZmZlciAqcmIsIFRyYW5zYWN0aW9uSWQgeGlkLAogfQogCiAvKgor ICogQSB0cmFuc2FjdGlvbmFsIERETCBtZXNzYWdlIGlzIHF1ZXVlZCB0byBiZSBwcm9jZXNzZWQg dXBvbiBjb21taXQuCisgKi8KK3ZvaWQKK1Jlb3JkZXJCdWZmZXJRdWV1ZURETE1lc3NhZ2UoUmVv cmRlckJ1ZmZlciAqcmIsIFRyYW5zYWN0aW9uSWQgeGlkLAorCQkJCQkJCSBYTG9nUmVjUHRyIGxz biwgY29uc3QgY2hhciAqcHJlZml4LAorCQkJCQkJCSBTaXplIG1lc3NhZ2Vfc2l6ZSwgY29uc3Qg Y2hhciAqbWVzc2FnZSwKKwkJCQkJCQkgT2lkIHJlbGlkLCBEZXBhcnNlZENvbW1hbmRUeXBlIGNt ZHR5cGUpCit7CisJTWVtb3J5Q29udGV4dCBvbGRjb250ZXh0OworCVJlb3JkZXJCdWZmZXJDaGFu Z2UgKmNoYW5nZTsKKworCUFzc2VydChUcmFuc2FjdGlvbklkSXNWYWxpZCh4aWQpKTsKKworCW9s ZGNvbnRleHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8ocmItPmNvbnRleHQpOworCisJY2hhbmdl ID0gUmVvcmRlckJ1ZmZlckdldENoYW5nZShyYik7CisJY2hhbmdlLT5hY3Rpb24gPSBSRU9SREVS X0JVRkZFUl9DSEFOR0VfRERMOworCWNoYW5nZS0+ZGF0YS5kZGwucHJlZml4ID0gcHN0cmR1cChw cmVmaXgpOworCWNoYW5nZS0+ZGF0YS5kZGwucmVsaWQgPSByZWxpZDsKKwljaGFuZ2UtPmRhdGEu ZGRsLmNtZHR5cGUgPSBjbWR0eXBlOworCWNoYW5nZS0+ZGF0YS5kZGwubWVzc2FnZV9zaXplID0g bWVzc2FnZV9zaXplOworCWNoYW5nZS0+ZGF0YS5kZGwubWVzc2FnZSA9IHBhbGxvYyhtZXNzYWdl X3NpemUpOworCW1lbWNweShjaGFuZ2UtPmRhdGEuZGRsLm1lc3NhZ2UsIG1lc3NhZ2UsIG1lc3Nh Z2Vfc2l6ZSk7CisKKwlSZW9yZGVyQnVmZmVyUXVldWVDaGFuZ2UocmIsIHhpZCwgbHNuLCBjaGFu Z2UsIGZhbHNlKTsKKworCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjb250ZXh0KTsKK30KKwor LyoKICAqIEFzc2VydFRYTkxzbk9yZGVyCiAgKgkJVmVyaWZ5IExTTiBvcmRlcmluZyBvZiB0cmFu c2FjdGlvbiBsaXN0cyBpbiB0aGUgcmVvcmRlcmJ1ZmZlcgogICoKQEAgLTIwMDMsNiArMjA0Miwy MSBAQCBSZW9yZGVyQnVmZmVyQXBwbHlNZXNzYWdlKFJlb3JkZXJCdWZmZXIgKnJiLCBSZW9yZGVy QnVmZmVyVFhOICp0eG4sCiB9CiAKIC8qCisgKiBIZWxwZXIgZnVuY3Rpb24gZm9yIFJlb3JkZXJC dWZmZXJQcm9jZXNzVFhOIGZvciBhcHBseWluZyB0aGUgRERMIG1lc3NhZ2UuCisgKi8KK3N0YXRp YyBpbmxpbmUgdm9pZAorUmVvcmRlckJ1ZmZlckFwcGx5RERMTWVzc2FnZShSZW9yZGVyQnVmZmVy ICpyYiwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAorCQkJCQkJCSBSZW9yZGVyQnVmZmVyQ2hhbmdl ICpjaGFuZ2UsIGJvb2wgc3RyZWFtaW5nKQoreworCXJiLT5kZGwocmIsIHR4biwgY2hhbmdlLT5s c24sCisJCQljaGFuZ2UtPmRhdGEuZGRsLnByZWZpeCwKKwkJCWNoYW5nZS0+ZGF0YS5kZGwucmVs aWQsCisJCQljaGFuZ2UtPmRhdGEuZGRsLmNtZHR5cGUsCisJCQljaGFuZ2UtPmRhdGEuZGRsLm1l c3NhZ2Vfc2l6ZSwKKwkJCWNoYW5nZS0+ZGF0YS5kZGwubWVzc2FnZSk7Cit9CisKKy8qCiAgKiBG dW5jdGlvbiB0byBzdG9yZSB0aGUgY29tbWFuZCBpZCBhbmQgc25hcHNob3QgYXQgdGhlIGVuZCBv ZiB0aGUgY3VycmVudAogICogc3RyZWFtIHNvIHRoYXQgd2UgY2FuIHJldXNlIHRoZSBzYW1lIHdo aWxlIHNlbmRpbmcgdGhlIG5leHQgc3RyZWFtLgogICovCkBAIC0yMzgyLDYgKzI0MzYsMTAgQEAg UmVvcmRlckJ1ZmZlclByb2Nlc3NUWE4oUmVvcmRlckJ1ZmZlciAqcmIsIFJlb3JkZXJCdWZmZXJU WE4gKnR4biwKIAkJCQkJUmVvcmRlckJ1ZmZlckFwcGx5TWVzc2FnZShyYiwgdHhuLCBjaGFuZ2Us IHN0cmVhbWluZyk7CiAJCQkJCWJyZWFrOwogCisJCQkJY2FzZSBSRU9SREVSX0JVRkZFUl9DSEFO R0VfRERMOgorCQkJCQlSZW9yZGVyQnVmZmVyQXBwbHlERExNZXNzYWdlKHJiLCB0eG4sIGNoYW5n ZSwgc3RyZWFtaW5nKTsKKwkJCQkJYnJlYWs7CisKIAkJCQljYXNlIFJFT1JERVJfQlVGRkVSX0NI QU5HRV9JTlZBTElEQVRJT046CiAJCQkJCS8qIEV4ZWN1dGUgdGhlIGludmFsaWRhdGlvbiBtZXNz YWdlcyBsb2NhbGx5ICovCiAJCQkJCVJlb3JkZXJCdWZmZXJFeGVjdXRlSW52YWxpZGF0aW9ucyhj aGFuZ2UtPmRhdGEuaW52YWwubmludmFsaWRhdGlvbnMsCkBAIC0zODIzLDYgKzM4ODEsMzkgQEAg UmVvcmRlckJ1ZmZlclNlcmlhbGl6ZUNoYW5nZShSZW9yZGVyQnVmZmVyICpyYiwgUmVvcmRlckJ1 ZmZlclRYTiAqdHhuLAogCiAJCQkJYnJlYWs7CiAJCQl9CisJCWNhc2UgUkVPUkRFUl9CVUZGRVJf Q0hBTkdFX0RETDoKKwkJCXsKKwkJCQljaGFyCSAgICpkYXRhOworCQkJCVNpemUJCXByZWZpeF9z aXplID0gc3RybGVuKGNoYW5nZS0+ZGF0YS5kZGwucHJlZml4KSArIDE7CisKKwkJCQlzeiArPSBw cmVmaXhfc2l6ZSArIGNoYW5nZS0+ZGF0YS5kZGwubWVzc2FnZV9zaXplICsKKwkJCQkJc2l6ZW9m KFNpemUpICsgc2l6ZW9mKE9pZCkgKyBzaXplb2YoaW50KSArIHNpemVvZihTaXplKTsKKwkJCQlS ZW9yZGVyQnVmZmVyU2VyaWFsaXplUmVzZXJ2ZShyYiwgc3opOworCisJCQkJZGF0YSA9ICgoY2hh ciAqKSByYi0+b3V0YnVmKSArIHNpemVvZihSZW9yZGVyQnVmZmVyRGlza0NoYW5nZSk7CisKKwkJ CQkvKiBtaWdodCBoYXZlIGJlZW4gcmVhbGxvY2F0ZWQgYWJvdmUgKi8KKwkJCQlvbmRpc2sgPSAo UmVvcmRlckJ1ZmZlckRpc2tDaGFuZ2UgKikgcmItPm91dGJ1ZjsKKworCQkJCS8qIHdyaXRlIHRo ZSBwcmVmaXgsIHJlbGlkIGFuZCBjbWR0eXBlIGluY2x1ZGluZyB0aGUgc2l6ZSAqLworCQkJCW1l bWNweShkYXRhLCAmcHJlZml4X3NpemUsIHNpemVvZihTaXplKSk7CisJCQkJZGF0YSArPSBzaXpl b2YoU2l6ZSk7CisJCQkJbWVtY3B5KGRhdGEsICZjaGFuZ2UtPmRhdGEuZGRsLnJlbGlkLCBzaXpl b2YoT2lkKSk7CisJCQkJZGF0YSArPSBzaXplb2YoT2lkKTsKKwkJCQltZW1jcHkoZGF0YSwgJmNo YW5nZS0+ZGF0YS5kZGwuY21kdHlwZSwgc2l6ZW9mKERlcGFyc2VkQ29tbWFuZFR5cGUpKTsKKwkJ CQlkYXRhICs9IHNpemVvZihpbnQpOworCQkJCW1lbWNweShkYXRhLCBjaGFuZ2UtPmRhdGEuZGRs LnByZWZpeCwgcHJlZml4X3NpemUpOworCQkJCWRhdGEgKz0gcHJlZml4X3NpemU7CisKKwkJCQkv KiB3cml0ZSB0aGUgbWVzc2FnZSBpbmNsdWRpbmcgdGhlIHNpemUgKi8KKwkJCQltZW1jcHkoZGF0 YSwgJmNoYW5nZS0+ZGF0YS5kZGwubWVzc2FnZV9zaXplLCBzaXplb2YoU2l6ZSkpOworCQkJCWRh dGEgKz0gc2l6ZW9mKFNpemUpOworCQkJCW1lbWNweShkYXRhLCBjaGFuZ2UtPmRhdGEuZGRsLm1l c3NhZ2UsCisJCQkJCSAgIGNoYW5nZS0+ZGF0YS5kZGwubWVzc2FnZV9zaXplKTsKKwkJCQlkYXRh ICs9IGNoYW5nZS0+ZGF0YS5kZGwubWVzc2FnZV9zaXplOworCisJCQkJYnJlYWs7CisJCQl9CiAJ CWNhc2UgUkVPUkRFUl9CVUZGRVJfQ0hBTkdFX0lOVkFMSURBVElPTjoKIAkJCXsKIAkJCQljaGFy CSAgICpkYXRhOwpAQCAtNDEzNyw2ICs0MjI4LDE1IEBAIFJlb3JkZXJCdWZmZXJDaGFuZ2VTaXpl KFJlb3JkZXJCdWZmZXJDaGFuZ2UgKmNoYW5nZSkKIAogCQkJCWJyZWFrOwogCQkJfQorCQljYXNl IFJFT1JERVJfQlVGRkVSX0NIQU5HRV9EREw6CisJCQl7CisJCQkJU2l6ZQkJcHJlZml4X3NpemUg PSBzdHJsZW4oY2hhbmdlLT5kYXRhLmRkbC5wcmVmaXgpICsgMTsKKworCQkJCXN6ICs9IHByZWZp eF9zaXplICsgY2hhbmdlLT5kYXRhLmRkbC5tZXNzYWdlX3NpemUgKworCQkJCQlzaXplb2YoU2l6 ZSkgKyBzaXplb2YoU2l6ZSkgKyBzaXplb2YoT2lkKSArIHNpemVvZihEZXBhcnNlZENvbW1hbmRU eXBlKTsKKworCQkJCWJyZWFrOworCQkJfQogCQljYXNlIFJFT1JERVJfQlVGRkVSX0NIQU5HRV9J TlZBTElEQVRJT046CiAJCQl7CiAJCQkJc3ogKz0gc2l6ZW9mKFNoYXJlZEludmFsaWRhdGlvbk1l c3NhZ2UpICoKQEAgLTQ0MTQsNiArNDUxNCwzMyBAQCBSZW9yZGVyQnVmZmVyUmVzdG9yZUNoYW5n ZShSZW9yZGVyQnVmZmVyICpyYiwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCiAJCQkJYnJlYWs7 CiAJCQl9CisJCWNhc2UgUkVPUkRFUl9CVUZGRVJfQ0hBTkdFX0RETDoKKwkJCXsKKwkJCQlTaXpl CQlwcmVmaXhfc2l6ZTsKKworCQkJCS8qIHJlYWQgcHJlZml4ICovCisJCQkJbWVtY3B5KCZwcmVm aXhfc2l6ZSwgZGF0YSwgc2l6ZW9mKFNpemUpKTsKKwkJCQlkYXRhICs9IHNpemVvZihTaXplKTsK KwkJCQltZW1jcHkoJmNoYW5nZS0+ZGF0YS5kZGwucmVsaWQsIGRhdGEsIHNpemVvZihPaWQpKTsK KwkJCQlkYXRhICs9IHNpemVvZihPaWQpOworCQkJCW1lbWNweSgmY2hhbmdlLT5kYXRhLmRkbC5j bWR0eXBlLCBkYXRhLCBzaXplb2YoRGVwYXJzZWRDb21tYW5kVHlwZSkpOworCQkJCWRhdGEgKz0g c2l6ZW9mKGludCk7CisJCQkJY2hhbmdlLT5kYXRhLmRkbC5wcmVmaXggPSBNZW1vcnlDb250ZXh0 QWxsb2MocmItPmNvbnRleHQsIHByZWZpeF9zaXplKTsKKwkJCQltZW1jcHkoY2hhbmdlLT5kYXRh LmRkbC5wcmVmaXgsIGRhdGEsIHByZWZpeF9zaXplKTsKKwkJCQlBc3NlcnQoY2hhbmdlLT5kYXRh LmRkbC5wcmVmaXhbcHJlZml4X3NpemUgLSAxXSA9PSAnXDAnKTsKKwkJCQlkYXRhICs9IHByZWZp eF9zaXplOworCisJCQkJLyogcmVhZCB0aGUgbWVzc2FnZSAqLworCQkJCW1lbWNweSgmY2hhbmdl LT5kYXRhLm1zZy5tZXNzYWdlX3NpemUsIGRhdGEsIHNpemVvZihTaXplKSk7CisJCQkJZGF0YSAr PSBzaXplb2YoU2l6ZSk7CisJCQkJY2hhbmdlLT5kYXRhLm1zZy5tZXNzYWdlID0gTWVtb3J5Q29u dGV4dEFsbG9jKHJiLT5jb250ZXh0LAorCQkJCQkJCQkJCQkJCQkJICBjaGFuZ2UtPmRhdGEubXNn Lm1lc3NhZ2Vfc2l6ZSk7CisJCQkJbWVtY3B5KGNoYW5nZS0+ZGF0YS5tc2cubWVzc2FnZSwgZGF0 YSwKKwkJCQkJICAgY2hhbmdlLT5kYXRhLm1zZy5tZXNzYWdlX3NpemUpOworCQkJCWRhdGEgKz0g Y2hhbmdlLT5kYXRhLm1zZy5tZXNzYWdlX3NpemU7CisKKwkJCQlicmVhazsKKwkJCX0KIAkJY2Fz ZSBSRU9SREVSX0JVRkZFUl9DSEFOR0VfSU5WQUxJREFUSU9OOgogCQkJewogCQkJCVNpemUJCWlu dmFsX3NpemUgPSBzaXplb2YoU2hhcmVkSW52YWxpZGF0aW9uTWVzc2FnZSkgKgpkaWZmIC0tZ2l0 IGEvc3JjL2Jpbi9wZ193YWxkdW1wL3JtZ3JkZXNjLmMgYi9zcmMvYmluL3BnX3dhbGR1bXAvcm1n cmRlc2MuYwppbmRleCA2YjhjMTdiLi5kYWYxNzMwIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX3dh bGR1bXAvcm1ncmRlc2MuYworKysgYi9zcmMvYmluL3BnX3dhbGR1bXAvcm1ncmRlc2MuYwpAQCAt MjYsNiArMjYsNyBAQAogI2luY2x1ZGUgImNvbW1hbmRzL2RiY29tbWFuZHNfeGxvZy5oIgogI2lu Y2x1ZGUgImNvbW1hbmRzL3NlcXVlbmNlLmgiCiAjaW5jbHVkZSAiY29tbWFuZHMvdGFibGVzcGFj ZS5oIgorI2luY2x1ZGUgInJlcGxpY2F0aW9uL2RkbG1lc3NhZ2UuaCIKICNpbmNsdWRlICJyZXBs aWNhdGlvbi9tZXNzYWdlLmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vb3JpZ2luLmgiCiAjaW5j bHVkZSAicm1ncmRlc2MuaCIKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9ybWdybGlz dC5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3JtZ3JsaXN0LmgKaW5kZXggNDYzYmNiNi4uYWJjYmU5 NyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL3JtZ3JsaXN0LmgKKysrIGIvc3JjL2lu Y2x1ZGUvYWNjZXNzL3JtZ3JsaXN0LmgKQEAgLTQ3LDMgKzQ3LDQgQEAgUEdfUk1HUihSTV9DT01N SVRfVFNfSUQsICJDb21taXRUcyIsIGNvbW1pdF90c19yZWRvLCBjb21taXRfdHNfZGVzYywgY29t bWl0X3RzX2kKIFBHX1JNR1IoUk1fUkVQTE9SSUdJTl9JRCwgIlJlcGxpY2F0aW9uT3JpZ2luIiwg cmVwbG9yaWdpbl9yZWRvLCByZXBsb3JpZ2luX2Rlc2MsIHJlcGxvcmlnaW5faWRlbnRpZnksIE5V TEwsIE5VTEwsIE5VTEwsIE5VTEwpCiBQR19STUdSKFJNX0dFTkVSSUNfSUQsICJHZW5lcmljIiwg Z2VuZXJpY19yZWRvLCBnZW5lcmljX2Rlc2MsIGdlbmVyaWNfaWRlbnRpZnksIE5VTEwsIE5VTEws IGdlbmVyaWNfbWFzaywgTlVMTCkKIFBHX1JNR1IoUk1fTE9HSUNBTE1TR19JRCwgIkxvZ2ljYWxN ZXNzYWdlIiwgbG9naWNhbG1zZ19yZWRvLCBsb2dpY2FsbXNnX2Rlc2MsIGxvZ2ljYWxtc2dfaWRl bnRpZnksIE5VTEwsIE5VTEwsIE5VTEwsIGxvZ2ljYWxtc2dfZGVjb2RlKQorUEdfUk1HUihSTV9M T0dJQ0FMRERMTVNHX0lELCAiTG9naWNhbERETE1lc3NhZ2UiLCBsb2dpY2FsZGRsbXNnX3JlZG8s IGxvZ2ljYWxkZGxtc2dfZGVzYywgbG9naWNhbGRkbG1zZ19pZGVudGlmeSwgTlVMTCwgTlVMTCwg TlVMTCwgbG9naWNhbGRkbF9kZWNvZGUpCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jYXRhbG9n L3BnX3Byb2MuZGF0IGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdAppbmRleCA3YTlk ODQ2Li5mNWQxYjAxIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0 CisrKyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKQEAgLTExMDA0LDYgKzExMDA0 LDE0IEBACiAgIHByb25hbWUgPT4gJ3BnX2xvZ2ljYWxfZW1pdF9tZXNzYWdlJywgcHJvdm9sYXRp bGUgPT4gJ3YnLCBwcm9wYXJhbGxlbCA9PiAndScsCiAgIHByb3JldHR5cGUgPT4gJ3BnX2xzbics IHByb2FyZ3R5cGVzID0+ICdib29sIHRleHQgYnl0ZWEnLAogICBwcm9zcmMgPT4gJ3BnX2xvZ2lj YWxfZW1pdF9tZXNzYWdlX2J5dGVhJyB9LAoreyBvaWQgPT4gJzM4MTMnLCBkZXNjciA9PiAnZW1p dCBhIHRleHR1YWwgbG9naWNhbCBkZWNvZGluZyBtZXNzYWdlJywKKyAgcHJvbmFtZSA9PiAncGdf bG9naWNhbF9lbWl0X2RkbF9tZXNzYWdlJywgcHJvdm9sYXRpbGUgPT4gJ3YnLCBwcm9wYXJhbGxl bCA9PiAndScsCisgIHByb3JldHR5cGUgPT4gJ3BnX2xzbicsIHByb2FyZ3R5cGVzID0+ICdib29s IHRleHQgdGV4dCcsCisgIHByb3NyYyA9PiAncGdfbG9naWNhbF9lbWl0X2RkbF9tZXNzYWdlX3Rl eHQnIH0sCit7IG9pZCA9PiAnMzgxNCcsIGRlc2NyID0+ICdlbWl0IGEgYmluYXJ5IGxvZ2ljYWwg ZGVjb2RpbmcgbWVzc2FnZScsCisgIHByb25hbWUgPT4gJ3BnX2xvZ2ljYWxfZW1pdF9kZGxfbWVz c2FnZScsIHByb3ZvbGF0aWxlID0+ICd2JywgcHJvcGFyYWxsZWwgPT4gJ3UnLAorICBwcm9yZXR0 eXBlID0+ICdwZ19sc24nLCBwcm9hcmd0eXBlcyA9PiAndGV4dCByZWdjbGFzcyBpbnQ0IHRleHQn LAorICBwcm9zcmMgPT4gJ3BnX2xvZ2ljYWxfZW1pdF9kZGxfbWVzc2FnZV9ieXRlYScgfSwKIAog IyBldmVudCB0cmlnZ2VycwogeyBvaWQgPT4gJzM1NjYnLCBkZXNjciA9PiAnbGlzdCBvYmplY3Rz IGRyb3BwZWQgYnkgdGhlIGN1cnJlbnQgY29tbWFuZCcsCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVk ZS9yZXBsaWNhdGlvbi9kZGxtZXNzYWdlLmggYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9kZGxt ZXNzYWdlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzdkZjZlYQotLS0g L2Rldi9udWxsCisrKyBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2RkbG1lc3NhZ2UuaApAQCAt MCwwICsxLDYwIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIGRkbG1lc3NhZ2UuaAorICoJICAg RXhwb3J0cyBmcm9tIHJlcGxpY2F0aW9uL2xvZ2ljYWwvZGRsbWVzc2FnZS5jCisgKgorICogQ29w eXJpZ2h0IChjKSAyMDIyLCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICoK KyAqIHNyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2RkbG1lc3NhZ2UuaAorICotLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgKi8KKyNpZm5kZWYgUEdfTE9HSUNBTF9ERExfTUVTU0FHRV9ICisjZGVmaW5lIFBHX0xP R0lDQUxfRERMX01FU1NBR0VfSAorCisjaW5jbHVkZSAiYWNjZXNzL3hsb2cuaCIKKyNpbmNsdWRl ICJhY2Nlc3MveGxvZ2RlZnMuaCIKKyNpbmNsdWRlICJhY2Nlc3MveGxvZ3JlYWRlci5oIgorI2lu Y2x1ZGUgIm5vZGVzL25vZGVzLmgiCisKKworLyoKKyAqIFN1cHBvcnQgZm9yIGtlZXBpbmcgdHJh Y2sgb2YgZGVwYXJzZWQgY29tbWFuZHMuCisgKi8KK3R5cGVkZWYgZW51bSBEZXBhcnNlZENvbW1h bmRUeXBlCit7CisJRENUX1NpbXBsZUNtZCwKKwlEQ1RfVGFibGVEcm9wU3RhcnQsCisJRENUX1Rh YmxlRHJvcEVuZCwKKwlEQ1RfVGFibGVBbHRlciwKKwlEQ1RfT2JqZWN0Q3JlYXRlLAorCURDVF9P YmplY3REcm9wCit9IERlcGFyc2VkQ29tbWFuZFR5cGU7CisKKy8qCisgKiBHZW5lcmljIGxvZ2lj YWwgZGVjb2RpbmcgRERMIG1lc3NhZ2Ugd2FsIHJlY29yZC4KKyAqLwordHlwZWRlZiBzdHJ1Y3Qg eGxfbG9naWNhbF9kZGxfbWVzc2FnZQoreworCU9pZAkJCWRiSWQ7CQkJLyogZGF0YWJhc2UgT2lk IGVtaXR0ZWQgZnJvbSAqLworCVNpemUJCXByZWZpeF9zaXplOwkvKiBsZW5ndGggb2YgcHJlZml4 IGluY2x1ZGluZyBudWxsIHRlcm1pbmF0b3IgKi8KKwlPaWQJCQlyZWxpZDsJCQkvKiBpZCBvZiB0 aGUgdGFibGUgKi8KKwlEZXBhcnNlZENvbW1hbmRUeXBlIGNtZHR5cGU7CS8qIHR5cGUgb2Ygc3Fs IGNvbW1hbmQgKi8KKwlTaXplCQltZXNzYWdlX3NpemU7CS8qIHNpemUgb2YgdGhlIG1lc3NhZ2Ug Ki8KKworCS8qCisJICogcGF5bG9hZCwgaW5jbHVkaW5nIG51bGwtdGVybWluYXRlZCBwcmVmaXgg b2YgbGVuZ3RoIHByZWZpeF9zaXplCisJICovCisJY2hhcgkJbWVzc2FnZVtGTEVYSUJMRV9BUlJB WV9NRU1CRVJdOworfSB4bF9sb2dpY2FsX2RkbF9tZXNzYWdlOworCisjZGVmaW5lIFNpemVPZkxv Z2ljYWxERExNZXNzYWdlCShvZmZzZXRvZih4bF9sb2dpY2FsX2RkbF9tZXNzYWdlLCBtZXNzYWdl KSkKKworZXh0ZXJuIFhMb2dSZWNQdHIgTG9nTG9naWNhbERETE1lc3NhZ2UoY29uc3QgY2hhciAq cHJlZml4LCBPaWQgcmVsaWQsIERlcGFyc2VkQ29tbWFuZFR5cGUgY21kdHlwZSwKKwkJCQkJCQkJ CSAgIGNvbnN0IGNoYXIgKmRkbF9tZXNzYWdlLCBzaXplX3Qgc2l6ZSk7CisKKy8qIFJNR1IgQVBJ Ki8KKyNkZWZpbmUgWExPR19MT0dJQ0FMX0RETF9NRVNTQUdFCTB4MDAKK3ZvaWQJCWxvZ2ljYWxk ZGxtc2dfcmVkbyhYTG9nUmVhZGVyU3RhdGUgKnJlY29yZCk7Cit2b2lkCQlsb2dpY2FsZGRsbXNn X2Rlc2MoU3RyaW5nSW5mbyBidWYsIFhMb2dSZWFkZXJTdGF0ZSAqcmVjb3JkKTsKK2NvbnN0IGNo YXIgKmxvZ2ljYWxkZGxtc2dfaWRlbnRpZnkodWludDggaW5mbyk7CisKKyNlbmRpZgpkaWZmIC0t Z2l0IGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vZGVjb2RlLmggYi9zcmMvaW5jbHVkZS9yZXBs aWNhdGlvbi9kZWNvZGUuaAppbmRleCAxNGZhOTIxLi5jOWFjNzA4IDEwMDY0NAotLS0gYS9zcmMv aW5jbHVkZS9yZXBsaWNhdGlvbi9kZWNvZGUuaAorKysgYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlv bi9kZWNvZGUuaApAQCAtMjcsNiArMjcsNyBAQCBleHRlcm4gdm9pZCBoZWFwMl9kZWNvZGUoTG9n aWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBYTG9nUmVjb3JkQnVmZmVyICpidWYpOwogZXh0ZXJu IHZvaWQgeGFjdF9kZWNvZGUoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBYTG9nUmVjb3Jk QnVmZmVyICpidWYpOwogZXh0ZXJuIHZvaWQgc3RhbmRieV9kZWNvZGUoTG9naWNhbERlY29kaW5n Q29udGV4dCAqY3R4LCBYTG9nUmVjb3JkQnVmZmVyICpidWYpOwogZXh0ZXJuIHZvaWQgbG9naWNh bG1zZ19kZWNvZGUoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBYTG9nUmVjb3JkQnVmZmVy ICpidWYpOworZXh0ZXJuIHZvaWQgbG9naWNhbGRkbF9kZWNvZGUoTG9naWNhbERlY29kaW5nQ29u dGV4dCAqY3R4LCBYTG9nUmVjb3JkQnVmZmVyICpidWYpOwogCiBleHRlcm4gdm9pZCBMb2dpY2Fs RGVjb2RpbmdQcm9jZXNzUmVjb3JkKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwKIAkJCQkJ CQkJCQkgWExvZ1JlYWRlclN0YXRlICpyZWNvcmQpOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUv cmVwbGljYXRpb24vb3V0cHV0X3BsdWdpbi5oIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vb3V0 cHV0X3BsdWdpbi5oCmluZGV4IDJkODlkMjYuLjVlZDVlNmEgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNs dWRlL3JlcGxpY2F0aW9uL291dHB1dF9wbHVnaW4uaAorKysgYi9zcmMvaW5jbHVkZS9yZXBsaWNh dGlvbi9vdXRwdXRfcGx1Z2luLmgKQEAgLTksNiArOSw3IEBACiAjaWZuZGVmIE9VVFBVVF9QTFVH SU5fSAogI2RlZmluZSBPVVRQVVRfUExVR0lOX0gKIAorI2luY2x1ZGUgInJlcGxpY2F0aW9uL2Rk bG1lc3NhZ2UuaCIKICNpbmNsdWRlICJyZXBsaWNhdGlvbi9yZW9yZGVyYnVmZmVyLmgiCiAKIHN0 cnVjdCBMb2dpY2FsRGVjb2RpbmdDb250ZXh0OwpAQCAtOTEsNiArOTIsMTggQEAgdHlwZWRlZiB2 b2lkICgqTG9naWNhbERlY29kZU1lc3NhZ2VDQikgKHN0cnVjdCBMb2dpY2FsRGVjb2RpbmdDb250 ZXh0ICpjdHgsCiAJCQkJCQkJCQkJY29uc3QgY2hhciAqbWVzc2FnZSk7CiAKIC8qCisgKiBDYWxs ZWQgZm9yIHRoZSBsb2dpY2FsIGRlY29kaW5nIERETCBtZXNzYWdlcy4KKyAqLwordHlwZWRlZiB2 b2lkICgqTG9naWNhbERlY29kZURETE1lc3NhZ2VDQikgKHN0cnVjdCBMb2dpY2FsRGVjb2RpbmdD b250ZXh0ICpjdHgsCisJCQkJCQkJCQkJICAgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAorCQkJCQkJ CQkJCSAgIFhMb2dSZWNQdHIgbWVzc2FnZV9sc24sCisJCQkJCQkJCQkJICAgY29uc3QgY2hhciAq cHJlZml4LAorCQkJCQkJCQkJCSAgIE9pZCByZWxpZCwKKwkJCQkJCQkJCQkgICBEZXBhcnNlZENv bW1hbmRUeXBlIGNtZHR5cGUsCisJCQkJCQkJCQkJICAgU2l6ZSBtZXNzYWdlX3NpemUsCisJCQkJ CQkJCQkJICAgY29uc3QgY2hhciAqbWVzc2FnZSk7CisKKy8qCiAgKiBGaWx0ZXIgY2hhbmdlcyBi eSBvcmlnaW4uCiAgKi8KIHR5cGVkZWYgYm9vbCAoKkxvZ2ljYWxEZWNvZGVGaWx0ZXJCeU9yaWdp bkNCKSAoc3RydWN0IExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwKQEAgLTIyMSw2ICsyMzQs NyBAQCB0eXBlZGVmIHN0cnVjdCBPdXRwdXRQbHVnaW5DYWxsYmFja3MKIAlMb2dpY2FsRGVjb2Rl VHJ1bmNhdGVDQiB0cnVuY2F0ZV9jYjsKIAlMb2dpY2FsRGVjb2RlQ29tbWl0Q0IgY29tbWl0X2Ni OwogCUxvZ2ljYWxEZWNvZGVNZXNzYWdlQ0IgbWVzc2FnZV9jYjsKKwlMb2dpY2FsRGVjb2RlRERM TWVzc2FnZUNCIGRkbF9jYjsKIAlMb2dpY2FsRGVjb2RlRmlsdGVyQnlPcmlnaW5DQiBmaWx0ZXJf Ynlfb3JpZ2luX2NiOwogCUxvZ2ljYWxEZWNvZGVTaHV0ZG93bkNCIHNodXRkb3duX2NiOwogCmRp ZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9yZW9yZGVyYnVmZmVyLmggYi9zcmMv aW5jbHVkZS9yZXBsaWNhdGlvbi9yZW9yZGVyYnVmZmVyLmgKaW5kZXggZjZjNGRkNy4uN2I2YTYz MyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vcmVvcmRlcmJ1ZmZlci5oCisr KyBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3Jlb3JkZXJidWZmZXIuaApAQCAtMTEsNiArMTEs OCBAQAogCiAjaW5jbHVkZSAiYWNjZXNzL2h0dXBfZGV0YWlscy5oIgogI2luY2x1ZGUgImxpYi9p bGlzdC5oIgorI2luY2x1ZGUgIm5vZGVzL25vZGVzLmgiCisjaW5jbHVkZSAicmVwbGljYXRpb24v ZGRsbWVzc2FnZS5oIgogI2luY2x1ZGUgInN0b3JhZ2Uvc2ludmFsLmgiCiAjaW5jbHVkZSAidXRp bHMvaHNlYXJjaC5oIgogI2luY2x1ZGUgInV0aWxzL3JlbGNhY2hlLmgiCkBAIC02NCw2ICs2Niw3 IEBAIHR5cGVkZWYgZW51bSBSZW9yZGVyQnVmZmVyQ2hhbmdlVHlwZQogCVJFT1JERVJfQlVGRkVS X0NIQU5HRV9JTlNFUlQsCiAJUkVPUkRFUl9CVUZGRVJfQ0hBTkdFX1VQREFURSwKIAlSRU9SREVS X0JVRkZFUl9DSEFOR0VfREVMRVRFLAorCVJFT1JERVJfQlVGRkVSX0NIQU5HRV9EREwsCiAJUkVP UkRFUl9CVUZGRVJfQ0hBTkdFX01FU1NBR0UsCiAJUkVPUkRFUl9CVUZGRVJfQ0hBTkdFX0lOVkFM SURBVElPTiwKIAlSRU9SREVSX0JVRkZFUl9DSEFOR0VfSU5URVJOQUxfU05BUFNIT1QsCkBAIC0x MzgsNiArMTQxLDE2IEBAIHR5cGVkZWYgc3RydWN0IFJlb3JkZXJCdWZmZXJDaGFuZ2UKIAkJCWNo YXIJICAgKm1lc3NhZ2U7CiAJCX0JCQltc2c7CiAKKwkJLyogRERMICovCisJCXN0cnVjdAorCQl7 CisJCQljaGFyCSAgICpwcmVmaXg7CisJCQlTaXplCQltZXNzYWdlX3NpemU7CisJCQljaGFyCSAg ICptZXNzYWdlOworCQkJT2lkCQkJcmVsaWQ7CisJCQlEZXBhcnNlZENvbW1hbmRUeXBlIGNtZHR5 cGU7CisJCX0JCQlkZGw7CisKIAkJLyogTmV3IHNuYXBzaG90LCBzZXQgd2hlbiBhY3Rpb24gPT0g Kl9JTlRFUk5BTF9TTkFQU0hPVCAqLwogCQlTbmFwc2hvdAlzbmFwc2hvdDsKIApAQCAtNDUxLDYg KzQ2NCwxNiBAQCB0eXBlZGVmIHZvaWQgKCpSZW9yZGVyQnVmZmVyTWVzc2FnZUNCKSAoUmVvcmRl ckJ1ZmZlciAqcmIsCiAJCQkJCQkJCQkJY29uc3QgY2hhciAqcHJlZml4LCBTaXplIHN6LAogCQkJ CQkJCQkJCWNvbnN0IGNoYXIgKm1lc3NhZ2UpOwogCisvKiBEREwgbWVzc2FnZSBjYWxsYmFjayBz aWduYXR1cmUgKi8KK3R5cGVkZWYgdm9pZCAoKlJlb3JkZXJCdWZmZXJERExNZXNzYWdlQ0IpIChS ZW9yZGVyQnVmZmVyICpyYiwKKwkJCQkJCQkJCQkgICBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCisJ CQkJCQkJCQkJICAgWExvZ1JlY1B0ciBtZXNzYWdlX2xzbiwKKwkJCQkJCQkJCQkgICBjb25zdCBj aGFyICpwcmVmaXgsCisJCQkJCQkJCQkJICAgT2lkIHJlbGlkLAorCQkJCQkJCQkJCSAgIERlcGFy c2VkQ29tbWFuZFR5cGUgY21kdHlwZSwKKwkJCQkJCQkJCQkgICBTaXplIHN6LAorCQkJCQkJCQkJ CSAgIGNvbnN0IGNoYXIgKm1lc3NhZ2UpOworCiAvKiBiZWdpbiBwcmVwYXJlIGNhbGxiYWNrIHNp Z25hdHVyZSAqLwogdHlwZWRlZiB2b2lkICgqUmVvcmRlckJ1ZmZlckJlZ2luUHJlcGFyZUNCKSAo UmVvcmRlckJ1ZmZlciAqcmIsCiAJCQkJCQkJCQkJCSBSZW9yZGVyQnVmZmVyVFhOICp0eG4pOwpA QCAtNTY3LDYgKzU5MCw3IEBAIHN0cnVjdCBSZW9yZGVyQnVmZmVyCiAJUmVvcmRlckJ1ZmZlckFw cGx5VHJ1bmNhdGVDQiBhcHBseV90cnVuY2F0ZTsKIAlSZW9yZGVyQnVmZmVyQ29tbWl0Q0IgY29t bWl0OwogCVJlb3JkZXJCdWZmZXJNZXNzYWdlQ0IgbWVzc2FnZTsKKwlSZW9yZGVyQnVmZmVyRERM TWVzc2FnZUNCIGRkbDsKIAogCS8qCiAJICogQ2FsbGJhY2tzIHRvIGJlIGNhbGxlZCB3aGVuIHN0 cmVhbWluZyBhIHRyYW5zYWN0aW9uIGF0IHByZXBhcmUgdGltZS4KQEAgLTY2NSw2ICs2ODksOSBA QCBleHRlcm4gdm9pZCBSZW9yZGVyQnVmZmVyUXVldWVNZXNzYWdlKFJlb3JkZXJCdWZmZXIgKnJi LCBUcmFuc2FjdGlvbklkIHhpZCwKIAkJCQkJCQkJCSAgU25hcHNob3Qgc25hcCwgWExvZ1JlY1B0 ciBsc24sCiAJCQkJCQkJCQkgIGJvb2wgdHJhbnNhY3Rpb25hbCwgY29uc3QgY2hhciAqcHJlZml4 LAogCQkJCQkJCQkJICBTaXplIG1lc3NhZ2Vfc2l6ZSwgY29uc3QgY2hhciAqbWVzc2FnZSk7Citl eHRlcm4gdm9pZCBSZW9yZGVyQnVmZmVyUXVldWVERExNZXNzYWdlKFJlb3JkZXJCdWZmZXIgKiwg VHJhbnNhY3Rpb25JZCwgWExvZ1JlY1B0ciBsc24sCisJCQkJCQkJCQkJIGNvbnN0IGNoYXIgKnBy ZWZpeCwgU2l6ZSBtZXNzYWdlX3NpemUsCisJCQkJCQkJCQkJIGNvbnN0IGNoYXIgKm1lc3NhZ2Us IE9pZCByZWxpZCwgRGVwYXJzZWRDb21tYW5kVHlwZSBjbWR0eXBlKTsKIGV4dGVybiB2b2lkIFJl b3JkZXJCdWZmZXJDb21taXQoUmVvcmRlckJ1ZmZlciAqcmIsIFRyYW5zYWN0aW9uSWQgeGlkLAog CQkJCQkJCQlYTG9nUmVjUHRyIGNvbW1pdF9sc24sIFhMb2dSZWNQdHIgZW5kX2xzbiwKIAkJCQkJ CQkJVGltZXN0YW1wVHogY29tbWl0X3RpbWUsIFJlcE9yaWdpbklkIG9yaWdpbl9pZCwgWExvZ1Jl Y1B0ciBvcmlnaW5fbHNuKTsKLS0gCjEuOC4zLjEKCg== --000000000000d6784f05f261a2df Content-Type: application/octet-stream; name="v62-0004-Introduce-the-test_ddl_deparse_regress-test-modu.patch" Content-Disposition: attachment; filename="v62-0004-Introduce-the-test_ddl_deparse_regress-test-modu.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lcyuikha3 RnJvbSA0NjFiNWU4ZmYzODZjZTg4MzczYzNmNmE2YTRmZjFlM2NkN2QxNGE2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBamluIENoZXJpYW4gPGFqaW5jQGZhc3QuYXUuZnVqaXRzdS5j b20+CkRhdGU6IE1vbiwgMTYgSmFuIDIwMjMgMDc6NTA6MzMgLTA1MDAKU3ViamVjdDogW1BBVENI IHY2MiA0LzddIEludHJvZHVjZSB0aGUgdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzIHRlc3QgbW9k dWxlLgoKVGhpcyB0ZXN0aW5nIG1vZHVsZSBhaW1zIHRvIGFjaGlldmUgdGhlIGZvbGxvd2luZyBm b3VyIHRlc3RpbmcgZ29hbHMgZm9yIHRoZSBEREwgZGVwYXJzZXI6CjEuIFRlc3QgdGhhdCB0aGUg Z2VuZXJhdGVkIEpTT04gYmxvYiBpcyBleHBlY3RlZCB1c2luZyBTUUwgdGVzdHMuCjIuIFRlc3Qg dGhhdCB0aGUgcmUtZm9ybWVkIERETCBjb21tYW5kIGlzIGV4cGVjdGVkIHVzaW5nIFNRTCB0ZXN0 cy4KMy4gVGVzdCB0aGF0IHRoZSByZS1mb3JtZWQgRERMIGNvbW1hbmQgaGFzIHRoZSBzYW1lIGVm ZmVjdCBhcyB0aGUgb3JpZ2luYWwgY29tbWFuZCBieSBjb21wYXJpbmcKICAgdGhlIHJlc3VsdHMg b2YgcGdfZHVtcCwgdXNpbmcgdGhlIFNRTCB0ZXN0cyBpbiAxIGFuZCAyLgo0LiBUZXN0IHRoYXQg bmV3IERETCBzeW50YXggaXMgaGFuZGxlZCBieSB0aGUgRERMIGRlcGFyc2VyIGJ5IGNhcHR1cmlu ZyBhbmQgZGVwYXJpbmcgRERMIGNvbW1hbmRzCiAgIHJhbiBieSBwZ19yZWdyZXNzLgoKMSBhbmQg MiBpcyB0ZXN0ZWQgd2l0aCBTUUwgdGVzdHMsIGJ5IHByaW50aW5nIHRoZSBkZXBhcnNlZCBKU09O IGJsb2IgYW5kIHRoZSByZS1mb3JtZWQgY29tbWFuZC4KCkdvYWwgMyBpcyB0ZXN0ZWQgd2l0aCBU QVAgZnJhbWV3b3JrIGluIHQvMDAxX2NvbXBhcmVfZHVtcGVkX3Jlc3VsdHMucGwKCkdvYWwgNCBp cyB0ZXN0ZWQgd2l0aCBUQVAgZnJhbWV3b3JrIGFuZCBwZ19yZWdyZXNzIGluIDAwMl9yZWdyZXNz X3Rlc3RzLnBsLCB0aGUgZXhlY3V0aW9uIGlzIGN1cnJlbnRseSBjb21tZW50ZWQgb3V0IGJlY2F1 c2UgaXQgd2lsbCBmYWlsIGR1ZSB1bmltcGxlbWVudGVkIGNvbW1hbmRzIGluIHRoZSBEREwgZGVw YXJzZXIuCi0tLQogc3JjL3Rlc3QvbW9kdWxlcy9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAg ICAgICAgfCAgIDEgKwogLi4uL21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzLy5naXRp Z25vcmUgICAgfCAgIDQgKwogc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jl c3MvTWFrZWZpbGUgfCAgNDQgKysrKysKIC4uLi9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVn cmVzcy9SRUFETUUubWQgICAgIHwgIDIyICsrKwogLi4uL2V4cGVjdGVkL2FnZ3JlZ2F0ZS5vdXQg ICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDggKwogLi4uL2V4cGVjdGVkL2NyZWF0ZV9leHRl bnNpb24ub3V0ICAgICAgICAgICAgICAgICAgfCAgIDYgKwogLi4uL2V4cGVjdGVkL2NyZWF0ZV9z Y2hlbWEub3V0ICAgICAgICAgICAgICAgICAgICAgfCAgMjIgKysrCiAuLi4vZXhwZWN0ZWQvY3Jl YXRlX3RhYmxlLm91dCAgICAgICAgICAgICAgICAgICAgICB8ICAzNiArKysrCiAuLi4vZXhwZWN0 ZWQvdGVzdF9kZGxfZGVwYXJzZS5vdXQgICAgICAgICAgICAgICAgICB8ICAxOCArKwogLi4uL21v ZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL21lc29uLmJ1aWxkICAgfCAgNDIgKysrKysK IC4uLi90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3Mvc3FsL2FnZ3JlZ2F0ZS5zcWwgICAgIHwgICA3 ICsKIC4uLi9zcWwvY3JlYXRlX2V4dGVuc2lvbi5zcWwgICAgICAgICAgICAgICAgICAgICAgIHwg ICA1ICsKIC4uLi90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3Mvc3FsL2NyZWF0ZV9zY2hlbWEuc3Fs IHwgIDE2ICsrCiAuLi4vdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL3NxbC9jcmVhdGVfdGFibGUu c3FsICB8ICAxNiArKwogLi4uL3NxbC90ZXN0X2RkbF9kZXBhcnNlLnNxbCAgICAgICAgICAgICAg ICAgICAgICAgfCAgMjAgKysKIC4uLi90LzAwMV9jb21wYXJlX2R1bXBlZF9yZXN1bHRzLnBsICAg ICAgICAgICAgICAgIHwgMTgxICsrKysrKysrKysrKysrKysrKwogLi4uL3QvMDAyX3JlZ3Jlc3Nf dGVzdHMucGwgICAgICAgICAgICAgICAgICAgICAgICAgfCAyMDcgKysrKysrKysrKysrKysrKysr KysrCiAuLi4vdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzLS0xLjAuc3FsICAgICAgICAgICAgICB8 ICAgOSArCiAuLi4vdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzLmMgICAgICAgICAgICAgICAgICAg ICB8ICA1OSArKysrKysKIC4uLi90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MuY29udHJvbCAgICAg ICAgICAgICAgIHwgICA0ICsKIDIwIGZpbGVzIGNoYW5nZWQsIDcyNyBpbnNlcnRpb25zKCspCiBj cmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jl c3MvLmdpdGlnbm9yZQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvdGVzdF9k ZGxfZGVwYXJzZV9yZWdyZXNzL01ha2VmaWxlCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3Qv bW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvUkVBRE1FLm1kCiBjcmVhdGUgbW9kZSAx MDA2NDQgc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvZXhwZWN0ZWQv YWdncmVnYXRlLm91dAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvdGVzdF9k ZGxfZGVwYXJzZV9yZWdyZXNzL2V4cGVjdGVkL2NyZWF0ZV9leHRlbnNpb24ub3V0CiBjcmVhdGUg bW9kZSAxMDA2NDQgc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvZXhw ZWN0ZWQvY3JlYXRlX3NjaGVtYS5vdXQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1 bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9leHBlY3RlZC9jcmVhdGVfdGFibGUub3V0CiBj cmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jl c3MvZXhwZWN0ZWQvdGVzdF9kZGxfZGVwYXJzZS5vdXQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMv dGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9tZXNvbi5idWlsZAogY3JlYXRl IG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL3Nx bC9hZ2dyZWdhdGUuc3FsCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvbW9kdWxlcy90ZXN0 X2RkbF9kZXBhcnNlX3JlZ3Jlc3Mvc3FsL2NyZWF0ZV9leHRlbnNpb24uc3FsCiBjcmVhdGUgbW9k ZSAxMDA2NDQgc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3Mvc3FsL2Ny ZWF0ZV9zY2hlbWEuc3FsCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvbW9kdWxlcy90ZXN0 X2RkbF9kZXBhcnNlX3JlZ3Jlc3Mvc3FsL2NyZWF0ZV90YWJsZS5zcWwKIGNyZWF0ZSBtb2RlIDEw MDY0NCBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9zcWwvdGVzdF9k ZGxfZGVwYXJzZS5zcWwKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL3Rlc3Rf ZGRsX2RlcGFyc2VfcmVncmVzcy90LzAwMV9jb21wYXJlX2R1bXBlZF9yZXN1bHRzLnBsCiBjcmVh dGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3Mv dC8wMDJfcmVncmVzc190ZXN0cy5wbAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVs ZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy0tMS4w LnNxbAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJz ZV9yZWdyZXNzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy5jCiBjcmVhdGUgbW9kZSAxMDA2NDQg c3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvdGVzdF9kZGxfZGVwYXJz ZV9yZWdyZXNzLmNvbnRyb2wKCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL01ha2VmaWxl IGIvc3JjL3Rlc3QvbW9kdWxlcy9NYWtlZmlsZQppbmRleCBjNjI5Y2JlLi5jMjcyYzY0IDEwMDY0 NAotLS0gYS9zcmMvdGVzdC9tb2R1bGVzL01ha2VmaWxlCisrKyBiL3NyYy90ZXN0L21vZHVsZXMv TWFrZWZpbGUKQEAgLTE4LDYgKzE4LDcgQEAgU1VCRElSUyA9IFwKIAkJICB0ZXN0X2NvcHlfY2Fs bGJhY2tzIFwKIAkJICB0ZXN0X2N1c3RvbV9ybWdycyBcCiAJCSAgdGVzdF9kZGxfZGVwYXJzZSBc CisJCSAgdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzIFwKIAkJICB0ZXN0X2V4dGVuc2lvbnMgXAog CQkgIHRlc3RfZ2lucG9zdGluZ2xpc3QgXAogCQkgIHRlc3RfaW50ZWdlcnNldCBcCmRpZmYgLS1n aXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy8uZ2l0aWdub3Jl IGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvLmdpdGlnbm9yZQpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZGNiM2ZmCi0tLSAvZGV2L251bGwK KysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvLmdpdGlnbm9y ZQpAQCAtMCwwICsxLDQgQEAKKyMgR2VuZXJhdGVkIHN1YmRpcmVjdG9yaWVzCisvbG9nLworL3Jl c3VsdHMvCisvdG1wX2NoZWNrLwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2Rk bF9kZXBhcnNlX3JlZ3Jlc3MvTWFrZWZpbGUgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2Rl cGFyc2VfcmVncmVzcy9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw Li41ZDVhOWU4Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9k ZXBhcnNlX3JlZ3Jlc3MvTWFrZWZpbGUKQEAgLTAsMCArMSw0NCBAQAorIy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyMKKyMgTWFrZWZpbGUgZm9yIHNyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9y ZWdyZXNzCisjCisjIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5Ni0yMDIyLCBQb3N0Z3JlU1FM IEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorIyBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTQs IFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYQorIworIyBzcmMvdGVzdC9t b2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9NYWtlZmlsZQorIworIy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKworCitNT0RVTEVTID0gdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzCitQR0ZJTEVERVND ID0gInRlc3RfZGRsX2RlcGFyc2VfcmVncmVzcyAtIHJlZ3Jlc3Npb24gdGVzdGluZyBmb3IgRERM IGRlcGFyc2luZyIKKworRVhURU5TSU9OID0gdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzCitEQVRB ID0gdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzLS0xLjAuc3FsCisKKyMgdGVzdF9kZGxfZGVwYXJz ZSBtdXN0IGJlIGZpcnN0CitSRUdSRVNTID0gdGVzdF9kZGxfZGVwYXJzZSBcCisJY3JlYXRlX2V4 dGVuc2lvbiBcCisJY3JlYXRlX3NjaGVtYSBcCisJY3JlYXRlX3RhYmxlIFwKKwlhZ2dyZWdhdGUK KworZXhwb3J0IFJFR1JFU1MKKworRVhUUkFfSU5TVEFMTCA9IGNvbnRyaWIvcGdfc3RhdF9zdGF0 ZW1lbnRzCisKK1RBUF9URVNUUyA9IDEKKworaWZkZWYgVVNFX1BHWFMKK1BHX0NPTkZJRyA9IHBn X2NvbmZpZworUEdYUyA6PSAkKHNoZWxsICQoUEdfQ09ORklHKSAtLXBneHMpCitpbmNsdWRlICQo UEdYUykKK2Vsc2UKK3N1YmRpciA9IHNyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9y ZWdyZXNzCit0b3BfYnVpbGRkaXIgPSAuLi8uLi8uLi8uLgoraW5jbHVkZSAkKHRvcF9idWlsZGRp cikvc3JjL01ha2VmaWxlLmdsb2JhbAoraW5jbHVkZSAkKHRvcF9zcmNkaXIpL2NvbnRyaWIvY29u dHJpYi1nbG9iYWwubWsKK2VuZGlmCisKK1JFR1JFU1NfU0hMSUI9JChhYnNfdG9wX2J1aWxkZGly KS9zcmMvdGVzdC9yZWdyZXNzL3JlZ3Jlc3MkKERMU1VGRklYKQorZXhwb3J0IFJFR1JFU1NfU0hM SUIKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNz L1JFQURNRS5tZCBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL1JF QURNRS5tZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYzI1MTk4Ci0tLSAv ZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3Mv UkVBRE1FLm1kCkBAIC0wLDAgKzEsMjIgQEAKKyMgVGVzdGluZyBoYXJuZXNzIGZvciBEREwgZGVw YXJzZXIKKworIyMgVGVzdGluZyBnb2FscworCitEREwgRGVwYXJzZXIgcHJvdmlkZXMgdGhlIGFi aWxpdHkgdG8gZW5jb2RlIHRoZSBvcmlnaW5hbCBEREwgY29tbWFuZCB0byBhIEpTT04gc3RyaW5n LCB0aGVuIGRlY29kZSBpdCB0byBhIGZ1bGx5IHNjaGVtYS1xdWFsaWZpZWQgRERMIGNvbW1hbmQg d2hpY2ggaXMgc3VwcG9zZWQgdG8gaGF2ZSB0aGUgc2FtZSBlZmZlY3QgYXMgdGhlIG9yaWdpbmFs IGNvbW1hbmQuIFRoaXMgdGVzdGluZyBtb2R1bGUgYWltcyB0byBhY2hpZXZlIHRoZSBmb2xsb3dp bmcgZm91ciB0ZXN0aW5nIGZvciB0aGUgRERMIGRlcGFyc2VyOgorCisxLiBUZXN0IHRoYXQgdGhl IGdlbmVyYXRlZCBKU09OIGJsb2IgaXMgZXhwZWN0ZWQgdXNpbmcgU1FMIHRlc3RzLgorMi4gVGVz dCB0aGF0IHRoZSByZS1mb3JtZWQgRERMIGNvbW1hbmQgaXMgZXhwZWN0ZWQgdXNpbmcgU1FMIHRl c3RzLgorMy4gVGVzdAl0aGF0IHRoZSByZS1mb3JtZWQgRERMIGNvbW1hbmQgaGFzIHRoZSBzYW1l IGVmZmVjdCBhcyB0aGUgb3JpZ2luYWwgY29tbWFuZAorICAgYnkgY29tcGFyaW5nCXRoZSByZXN1 bHRzIG9mIHBnX2R1bXAsCXVzaW5nIHRoZSBTUUwgdGVzdHMgaW4gMSBhbmQgMi4KKzQuIFRlc3QJ dGhhdCBuZXcgRERMIHN5bnRheCBpcyBoYW5kbGVkIGJ5IHRoZSBEREwgZGVwYXJzZXIgYnkgY2Fw dHVyaW5nIGFuZCBkZXBhcmluZworICAgRERMIGNvbW1hbmRzCXJhbiBieSBwZ19yZWdyZXNzLgor CisxIGFuZCAyIGlzIHRlc3RlZCB3aXRoIFNRTCB0ZXN0cywgYnkgbm90aWNpbmcgdGhlIGRlcGFy c2VkIEpTT04gYmxvYiBhbmQgdGhlIHJlLWZvcm1lZCBjb21tYW5kLgorCitHb2FsIDMgaXMgdGVz dGVkIHdpdGggVEFQIGZyYW1ld29yayBpbiB0LzAwMV9jb21wYXJlX2R1bXBlZF9yZXN1bHRzLnBs CisKK0dvYWwgNCBpcyB0ZXN0ZWQgd2l0aCBUQVAgZnJhbWV3b3JrIGFuZCBwZ19yZWdyZXNzIGlu IDAwMl9yZWdyZXNzX3Rlc3RzLnBsCisKKyMjIFVzYWdlCisKK1J1biBgbWFrZSBjaGVja2AsIGl0 IHdpbGwgcnVuIHRoZSBTUUwgdGVzdHMgZmlyc3QsIHRoZW4gaXQgd2lsbCBydW4gdGhlIFRBUCB0 ZXN0cy4gVGhlIGV4ZWN1dGlvbiBvZiAwMDJfcmVncmVzc190ZXN0cy5wbCBpcyBjdXJyZW50bHkg Y29tbWVudGVkIG91dCBiZWNhdXNlIGl0IHdpbGwgZmFpbCBkdWUgdG8gdW5pbXBsZW1lbnRlZCBj b21tYW5kcyBpbiB0aGUgRERMIGRlcGFyc2VyLgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxl cy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvZXhwZWN0ZWQvYWdncmVnYXRlLm91dCBiL3NyYy90 ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL2V4cGVjdGVkL2FnZ3JlZ2F0ZS5v dXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTkzOTVkMAotLS0gL2Rldi9u dWxsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL2V4cGVj dGVkL2FnZ3JlZ2F0ZS5vdXQKQEAgLTAsMCArMSw4IEBACitDUkVBVEUgQUdHUkVHQVRFIG5ld2F2 ZyhpbnQ0KSAoCisgICBzZnVuYyA9IGludDRfYXZnX2FjY3VtLCBzdHlwZSA9IF9pbnQ4LAorICAg ZmluYWxmdW5jID0gaW50OF9hdmcsCisgICBpbml0Y29uZDEgPSAnezAsMH0nCispOworTk9USUNF OiAgZGVwYXJzZWQganNvbjogeyJmbXQiOiAiQ1JFQVRFIEFHR1JFR0FURSAle2lkZW50aXR5fUQg KCV7dHlwZXN9cykgKCV7ZWxlbXM6LCB9cykiLCAiZWxlbXMiOiBbeyJmbXQiOiAiU0ZVTkM9JXtw cm9jZWR1cmV9RCIsICJwcm9jZWR1cmUiOiB7Im9iam5hbWUiOiAiaW50NF9hdmdfYWNjdW0iLCAi c2NoZW1hbmFtZSI6ICJwZ19jYXRhbG9nIn19LCB7ImZtdCI6ICJTVFlQRT0le3R5cGV9VCIsICJ0 eXBlIjogeyJ0eXBtb2QiOiAiIiwgInR5cGFycmF5IjogdHJ1ZSwgInR5cGVuYW1lIjogImludDgi LCAic2NoZW1hbmFtZSI6ICJwZ19jYXRhbG9nIn19LCB7ImZtdCI6ICJTU1BBQ0U9JXtzcGFjZX1u IiwgInByZXNlbnQiOiBmYWxzZX0sIHsiZm10IjogIkZJTkFMRlVOQz0le3Byb2NlZHVyZX1EIiwg InByb2NlZHVyZSI6IHsib2JqbmFtZSI6ICJpbnQ4X2F2ZyIsICJzY2hlbWFuYW1lIjogInBnX2Nh dGFsb2cifX0sIHsiZm10IjogIkZJTkFMRlVOQ19FWFRSQT0le3ZhbHVlfXMiLCAidmFsdWUiOiAi ZmFsc2UifSwgeyJmbXQiOiAiSU5JVENPTkQ9JXtpbml0dmFsfUwiLCAiaW5pdHZhbCI6ICJ7MCww fSJ9LCB7ImZtdCI6ICJNU0ZVTkM9JXtwcm9jZWR1cmV9RCIsICJwcmVzZW50IjogZmFsc2V9LCB7 ImZtdCI6ICJNU1RZUEU9JXt0eXBlfVQiLCAicHJlc2VudCI6IGZhbHNlfSwgeyJmbXQiOiAiTVNT UEFDRT0le3NwYWNlfW4iLCAicHJlc2VudCI6IGZhbHNlfSwgeyJmbXQiOiAiTUlOVkZVTkM9PSV7 dHlwZX1UIiwgInByZXNlbnQiOiBmYWxzZX0sIHsiZm10IjogIk1GSU5BTEZVTkM9JXtwcm9jZWR1 cmV9RCIsICJwcmVzZW50IjogZmFsc2V9LCB7ImZtdCI6ICJNRklOQUxGVU5DX0VYVFJBPSV7dmFs dWV9cyIsICJwcmVzZW50IjogZmFsc2V9LCB7ImZtdCI6ICJNSU5JVENPTkQ9JXtpbml0dmFsfUwi LCAicHJlc2VudCI6IGZhbHNlfSwgeyJmbXQiOiAiSFlQT1RIRVRJQ0FMPSV7dmFsdWV9cyIsICJw cmVzZW50IjogZmFsc2V9LCB7ImZtdCI6ICJTT1JUT1A9JXtvcGVyYXRvcn1EIiwgInByZXNlbnQi OiBmYWxzZX1dLCAidHlwZXMiOiB7ImZtdCI6ICIle2RpcmVjdDosIH1zIiwgImRpcmVjdCI6IFt7 ImZtdCI6ICIle21vZGV9cyAle25hbWV9cyAle3R5cGV9VCIsICJtb2RlIjogIiIsICJuYW1lIjog IiIsICJ0eXBlIjogeyJ0eXBtb2QiOiAiIiwgInR5cGFycmF5IjogZmFsc2UsICJ0eXBlbmFtZSI6 ICJpbnQ0IiwgInNjaGVtYW5hbWUiOiAicGdfY2F0YWxvZyJ9fV19LCAiaWRlbnRpdHkiOiB7Im9i am5hbWUiOiAibmV3YXZnIiwgInNjaGVtYW5hbWUiOiAicHVibGljIn19CitOT1RJQ0U6ICByZS1m b3JtZWQgY29tbWFuZDogQ1JFQVRFIEFHR1JFR0FURSBwdWJsaWMubmV3YXZnICggIHBnX2NhdGFs b2cuaW50NCkgKFNGVU5DPXBnX2NhdGFsb2cuaW50NF9hdmdfYWNjdW0sIFNUWVBFPXBnX2NhdGFs b2cuaW50OFtdLCBGSU5BTEZVTkM9cGdfY2F0YWxvZy5pbnQ4X2F2ZywgRklOQUxGVU5DX0VYVFJB PWZhbHNlLCBJTklUQ09ORD0nezAsMH0nKQorRFJPUCBBR0dSRUdBVEUgbmV3YXZnKGludDQpOwpk aWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvZXhw ZWN0ZWQvY3JlYXRlX2V4dGVuc2lvbi5vdXQgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2Rl cGFyc2VfcmVncmVzcy9leHBlY3RlZC9jcmVhdGVfZXh0ZW5zaW9uLm91dApuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNmNjYzYyCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rl c3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvZXhwZWN0ZWQvY3JlYXRlX2V4dGVu c2lvbi5vdXQKQEAgLTAsMCArMSw2IEBACistLS0KKy0tLSBDUkVBVEVfRVhURU5TSU9OCistLS0K K0NSRUFURSBFWFRFTlNJT04gcGdfc3RhdF9zdGF0ZW1lbnRzOworTk9USUNFOiAgZGVwYXJzZWQg anNvbjogeyJmbXQiOiAiQ1JFQVRFIEVYVEVOU0lPTiAle2lmX25vdF9leGlzdHN9cyAle25hbWV9 SSAle29wdGlvbnM6IH1zIiwgIm5hbWUiOiAicGdfc3RhdF9zdGF0ZW1lbnRzIiwgIm9wdGlvbnMi OiBbeyJmbXQiOiAiU0NIRU1BICV7c2NoZW1hfUkiLCAidHlwZSI6ICJzY2hlbWEiLCAic2NoZW1h IjogInB1YmxpYyJ9XSwgImlmX25vdF9leGlzdHMiOiAiIn0KK05PVElDRTogIHJlLWZvcm1lZCBj b21tYW5kOiBDUkVBVEUgRVhURU5TSU9OICBwZ19zdGF0X3N0YXRlbWVudHMgU0NIRU1BIHB1Ymxp YwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3Mv ZXhwZWN0ZWQvY3JlYXRlX3NjaGVtYS5vdXQgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2Rl cGFyc2VfcmVncmVzcy9leHBlY3RlZC9jcmVhdGVfc2NoZW1hLm91dApuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwLi4xZTA5ZGE1Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3Qv bW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvZXhwZWN0ZWQvY3JlYXRlX3NjaGVtYS5v dXQKQEAgLTAsMCArMSwyMiBAQAorLS0KKy0tIENSRUFURV9TQ0hFTUEKKy0tCitDUkVBVEUgU0NI RU1BIGZvbzsKK05PVElDRTogIGRlcGFyc2VkIGpzb246IHsiZm10IjogIkNSRUFURSBTQ0hFTUEg JXtpZl9ub3RfZXhpc3RzfXMgJXtuYW1lfUkgJXthdXRob3JpemF0aW9ufXMiLCAibmFtZSI6ICJm b28iLCAiYXV0aG9yaXphdGlvbiI6IHsiZm10IjogIkFVVEhPUklaQVRJT04gJXthdXRob3JpemF0 aW9uX3JvbGV9SSIsICJwcmVzZW50IjogZmFsc2UsICJhdXRob3JpemF0aW9uX3JvbGUiOiBudWxs fSwgImlmX25vdF9leGlzdHMiOiAiIn0KK05PVElDRTogIHJlLWZvcm1lZCBjb21tYW5kOiBDUkVB VEUgU0NIRU1BICBmb28gCitDUkVBVEUgU0NIRU1BIElGIE5PVCBFWElTVFMgYmFyOworTk9USUNF OiAgZGVwYXJzZWQganNvbjogeyJmbXQiOiAiQ1JFQVRFIFNDSEVNQSAle2lmX25vdF9leGlzdHN9 cyAle25hbWV9SSAle2F1dGhvcml6YXRpb259cyIsICJuYW1lIjogImJhciIsICJhdXRob3JpemF0 aW9uIjogeyJmbXQiOiAiQVVUSE9SSVpBVElPTiAle2F1dGhvcml6YXRpb25fcm9sZX1JIiwgInBy ZXNlbnQiOiBmYWxzZSwgImF1dGhvcml6YXRpb25fcm9sZSI6IG51bGx9LCAiaWZfbm90X2V4aXN0 cyI6ICJJRiBOT1QgRVhJU1RTIn0KK05PVElDRTogIHJlLWZvcm1lZCBjb21tYW5kOiBDUkVBVEUg U0NIRU1BIElGIE5PVCBFWElTVFMgYmFyIAorQ1JFQVRFIFNDSEVNQSBiYXo7CitOT1RJQ0U6ICBk ZXBhcnNlZCBqc29uOiB7ImZtdCI6ICJDUkVBVEUgU0NIRU1BICV7aWZfbm90X2V4aXN0c31zICV7 bmFtZX1JICV7YXV0aG9yaXphdGlvbn1zIiwgIm5hbWUiOiAiYmF6IiwgImF1dGhvcml6YXRpb24i OiB7ImZtdCI6ICJBVVRIT1JJWkFUSU9OICV7YXV0aG9yaXphdGlvbl9yb2xlfUkiLCAicHJlc2Vu dCI6IGZhbHNlLCAiYXV0aG9yaXphdGlvbl9yb2xlIjogbnVsbH0sICJpZl9ub3RfZXhpc3RzIjog IiJ9CitOT1RJQ0U6ICByZS1mb3JtZWQgY29tbWFuZDogQ1JFQVRFIFNDSEVNQSAgYmF6IAorLS0g V2lsbCBub3QgYmUgY3JlYXRlZCwgYW5kIHdpbGwgbm90IGJlIGhhbmRsZWQgYnkgdGhlCistLSBl dmVudCB0cmlnZ2VyCitDUkVBVEUgU0NIRU1BIElGIE5PVCBFWElTVFMgYmF6OworTk9USUNFOiAg c2NoZW1hICJiYXoiIGFscmVhZHkgZXhpc3RzLCBza2lwcGluZworQ1JFQVRFIFNDSEVNQSBlbGVt ZW50X3Rlc3QKKyAgQ1JFQVRFIFRBQkxFIGZvbyAoaWQgaW50KQorTk9USUNFOiAgZGVwYXJzZWQg anNvbjogeyJmbXQiOiAiQ1JFQVRFIFNDSEVNQSAle2lmX25vdF9leGlzdHN9cyAle25hbWV9SSAl e2F1dGhvcml6YXRpb259cyIsICJuYW1lIjogImVsZW1lbnRfdGVzdCIsICJhdXRob3JpemF0aW9u IjogeyJmbXQiOiAiQVVUSE9SSVpBVElPTiAle2F1dGhvcml6YXRpb25fcm9sZX1JIiwgInByZXNl bnQiOiBmYWxzZSwgImF1dGhvcml6YXRpb25fcm9sZSI6IG51bGx9LCAiaWZfbm90X2V4aXN0cyI6 ICIifQorTk9USUNFOiAgcmUtZm9ybWVkIGNvbW1hbmQ6IENSRUFURSBTQ0hFTUEgIGVsZW1lbnRf dGVzdCAKK05PVElDRTogIGRlcGFyc2VkIGpzb246IHsiZm10IjogIkNSRUFURSAle3BlcnNpc3Rl bmNlfXMgVEFCTEUgJXtpZl9ub3RfZXhpc3RzfXMgJXtpZGVudGl0eX1EICgle3RhYmxlX2VsZW1l bnRzOiwgfXMpICV7aW5oZXJpdHN9cyAle3RhYmxlc3BhY2V9cyAle29uX2NvbW1pdH1zICV7cGFy dGl0aW9uX2J5fXMgJXthY2Nlc3NfbWV0aG9kfXMgJXt3aXRoX2NsYXVzZX1zIiwgImlkZW50aXR5 IjogeyJvYmpuYW1lIjogImZvbyIsICJzY2hlbWFuYW1lIjogImVsZW1lbnRfdGVzdCJ9LCAiaW5o ZXJpdHMiOiB7ImZtdCI6ICJJTkhFUklUUyAoJXtwYXJlbnRzOiwgfUQpIiwgInBhcmVudHMiOiBu dWxsLCAicHJlc2VudCI6IGZhbHNlfSwgIm9uX2NvbW1pdCI6IHsiZm10IjogIk9OIENPTU1JVCAl e29uX2NvbW1pdF92YWx1ZX1zIiwgInByZXNlbnQiOiBmYWxzZSwgIm9uX2NvbW1pdF92YWx1ZSI6 IG51bGx9LCAidGFibGVzcGFjZSI6IHsiZm10IjogIlRBQkxFU1BBQ0UgJXt0YWJsZXNwYWNlfUki LCAicHJlc2VudCI6IGZhbHNlLCAidGFibGVzcGFjZSI6IG51bGx9LCAicGVyc2lzdGVuY2UiOiAi IiwgIndpdGhfY2xhdXNlIjogeyJmbXQiOiAiV0lUSCIsICJwcmVzZW50IjogZmFsc2V9LCAicGFy dGl0aW9uX2J5IjogeyJmbXQiOiAiUEFSVElUSU9OIEJZICV7ZGVmaW5pdGlvbn1zIiwgInByZXNl bnQiOiBmYWxzZSwgImRlZmluaXRpb24iOiBudWxsfSwgImFjY2Vzc19tZXRob2QiOiB7ImZtdCI6 ICJVU0lORyAle2FjY2Vzc19tZXRob2R9SSIsICJwcmVzZW50IjogZmFsc2UsICJhY2Nlc3NfbWV0 aG9kIjogbnVsbH0sICJpZl9ub3RfZXhpc3RzIjogIiIsICJ0YWJsZV9lbGVtZW50cyI6IFt7ImZt dCI6ICIle25hbWV9SSAle2NvbHR5cGV9VCBTVE9SQUdFICV7Y29sc3RvcmFnZX1zICV7Y29tcHJl c3Npb259cyAle2NvbGxhdGlvbn1zICV7bm90X251bGx9cyAle2RlZmF1bHR9cyAle2dlbmVyYXRl ZF9jb2x1bW59cyIsICJuYW1lIjogImlkIiwgInR5cGUiOiAiY29sdW1uIiwgImNvbHR5cGUiOiB7 InR5cG1vZCI6ICIiLCAidHlwYXJyYXkiOiBmYWxzZSwgInR5cGVuYW1lIjogImludDQiLCAic2No ZW1hbmFtZSI6ICJwZ19jYXRhbG9nIn0sICJkZWZhdWx0IjogeyJmbXQiOiAiREVGQVVMVCIsICJw cmVzZW50IjogZmFsc2V9LCAibm90X251bGwiOiAiIiwgImNvbGxhdGlvbiI6IHsiZm10IjogIkNP TExBVEUiLCAicHJlc2VudCI6IGZhbHNlfSwgImNvbHN0b3JhZ2UiOiAicGxhaW4iLCAiY29tcHJl c3Npb24iOiB7ImZtdCI6ICJDT01QUkVTU0lPTiAle2NvbXByZXNzaW9uX21ldGhvZH1JIiwgInBy ZXNlbnQiOiBmYWxzZSwgImNvbXByZXNzaW9uX21ldGhvZCI6IG51bGx9LCAiZ2VuZXJhdGVkX2Nv bHVtbiI6IHsiZm10IjogIkdFTkVSQVRFRCBBTFdBWVMgQVMiLCAicHJlc2VudCI6IGZhbHNlfX1d fQorTk9USUNFOiAgcmUtZm9ybWVkIGNvbW1hbmQ6IENSRUFURSAgVEFCTEUgIGVsZW1lbnRfdGVz dC5mb28gKGlkIHBnX2NhdGFsb2cuaW50NCBTVE9SQUdFIHBsYWluICAgICApICAgICAgCmRpZmYg LS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9leHBlY3Rl ZC9jcmVhdGVfdGFibGUub3V0IGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3Jl Z3Jlc3MvZXhwZWN0ZWQvY3JlYXRlX3RhYmxlLm91dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwLi45ZWVhYTFjCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90 ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvZXhwZWN0ZWQvY3JlYXRlX3RhYmxlLm91dApAQCAtMCww ICsxLDM2IEBACitDUkVBVEUgVEFCTEUgc2ltcGxlX3RhYmxlKAorICAgIGlkIGludCwKKyAgICBu YW1lIHZhcmNoYXIoNSkKKyk7CitOT1RJQ0U6ICBkZXBhcnNlZCBqc29uOiB7ImZtdCI6ICJDUkVB VEUgJXtwZXJzaXN0ZW5jZX1zIFRBQkxFICV7aWZfbm90X2V4aXN0c31zICV7aWRlbnRpdHl9RCAo JXt0YWJsZV9lbGVtZW50czosIH1zKSAle2luaGVyaXRzfXMgJXt0YWJsZXNwYWNlfXMgJXtvbl9j b21taXR9cyAle3BhcnRpdGlvbl9ieX1zICV7YWNjZXNzX21ldGhvZH1zICV7d2l0aF9jbGF1c2V9 cyIsICJpZGVudGl0eSI6IHsib2JqbmFtZSI6ICJzaW1wbGVfdGFibGUiLCAic2NoZW1hbmFtZSI6 ICJwdWJsaWMifSwgImluaGVyaXRzIjogeyJmbXQiOiAiSU5IRVJJVFMgKCV7cGFyZW50czosIH1E KSIsICJwYXJlbnRzIjogbnVsbCwgInByZXNlbnQiOiBmYWxzZX0sICJvbl9jb21taXQiOiB7ImZt dCI6ICJPTiBDT01NSVQgJXtvbl9jb21taXRfdmFsdWV9cyIsICJwcmVzZW50IjogZmFsc2UsICJv bl9jb21taXRfdmFsdWUiOiBudWxsfSwgInRhYmxlc3BhY2UiOiB7ImZtdCI6ICJUQUJMRVNQQUNF ICV7dGFibGVzcGFjZX1JIiwgInByZXNlbnQiOiBmYWxzZSwgInRhYmxlc3BhY2UiOiBudWxsfSwg InBlcnNpc3RlbmNlIjogIiIsICJ3aXRoX2NsYXVzZSI6IHsiZm10IjogIldJVEgiLCAicHJlc2Vu dCI6IGZhbHNlfSwgInBhcnRpdGlvbl9ieSI6IHsiZm10IjogIlBBUlRJVElPTiBCWSAle2RlZmlu aXRpb259cyIsICJwcmVzZW50IjogZmFsc2UsICJkZWZpbml0aW9uIjogbnVsbH0sICJhY2Nlc3Nf bWV0aG9kIjogeyJmbXQiOiAiVVNJTkcgJXthY2Nlc3NfbWV0aG9kfUkiLCAicHJlc2VudCI6IGZh bHNlLCAiYWNjZXNzX21ldGhvZCI6IG51bGx9LCAiaWZfbm90X2V4aXN0cyI6ICIiLCAidGFibGVf ZWxlbWVudHMiOiBbeyJmbXQiOiAiJXtuYW1lfUkgJXtjb2x0eXBlfVQgU1RPUkFHRSAle2NvbHN0 b3JhZ2V9cyAle2NvbXByZXNzaW9ufXMgJXtjb2xsYXRpb259cyAle25vdF9udWxsfXMgJXtkZWZh dWx0fXMgJXtnZW5lcmF0ZWRfY29sdW1ufXMiLCAibmFtZSI6ICJpZCIsICJ0eXBlIjogImNvbHVt biIsICJjb2x0eXBlIjogeyJ0eXBtb2QiOiAiIiwgInR5cGFycmF5IjogZmFsc2UsICJ0eXBlbmFt ZSI6ICJpbnQ0IiwgInNjaGVtYW5hbWUiOiAicGdfY2F0YWxvZyJ9LCAiZGVmYXVsdCI6IHsiZm10 IjogIkRFRkFVTFQiLCAicHJlc2VudCI6IGZhbHNlfSwgIm5vdF9udWxsIjogIiIsICJjb2xsYXRp b24iOiB7ImZtdCI6ICJDT0xMQVRFIiwgInByZXNlbnQiOiBmYWxzZX0sICJjb2xzdG9yYWdlIjog InBsYWluIiwgImNvbXByZXNzaW9uIjogeyJmbXQiOiAiQ09NUFJFU1NJT04gJXtjb21wcmVzc2lv bl9tZXRob2R9SSIsICJwcmVzZW50IjogZmFsc2UsICJjb21wcmVzc2lvbl9tZXRob2QiOiBudWxs fSwgImdlbmVyYXRlZF9jb2x1bW4iOiB7ImZtdCI6ICJHRU5FUkFURUQgQUxXQVlTIEFTIiwgInBy ZXNlbnQiOiBmYWxzZX19LCB7ImZtdCI6ICIle25hbWV9SSAle2NvbHR5cGV9VCBTVE9SQUdFICV7 Y29sc3RvcmFnZX1zICV7Y29tcHJlc3Npb259cyAle2NvbGxhdGlvbn1zICV7bm90X251bGx9cyAl e2RlZmF1bHR9cyAle2dlbmVyYXRlZF9jb2x1bW59cyIsICJuYW1lIjogIm5hbWUiLCAidHlwZSI6 ICJjb2x1bW4iLCAiY29sdHlwZSI6IHsidHlwbW9kIjogIig1KSIsICJ0eXBhcnJheSI6IGZhbHNl LCAidHlwZW5hbWUiOiAidmFyY2hhciIsICJzY2hlbWFuYW1lIjogInBnX2NhdGFsb2cifSwgImRl ZmF1bHQiOiB7ImZtdCI6ICJERUZBVUxUIiwgInByZXNlbnQiOiBmYWxzZX0sICJub3RfbnVsbCI6 ICIiLCAiY29sbGF0aW9uIjogeyJmbXQiOiAiQ09MTEFURSAle25hbWV9RCIsICJuYW1lIjogeyJv YmpuYW1lIjogImRlZmF1bHQiLCAic2NoZW1hbmFtZSI6ICJwZ19jYXRhbG9nIn19LCAiY29sc3Rv cmFnZSI6ICJleHRlbmRlZCIsICJjb21wcmVzc2lvbiI6IHsiZm10IjogIkNPTVBSRVNTSU9OICV7 Y29tcHJlc3Npb25fbWV0aG9kfUkiLCAicHJlc2VudCI6IGZhbHNlLCAiY29tcHJlc3Npb25fbWV0 aG9kIjogbnVsbH0sICJnZW5lcmF0ZWRfY29sdW1uIjogeyJmbXQiOiAiR0VORVJBVEVEIEFMV0FZ UyBBUyIsICJwcmVzZW50IjogZmFsc2V9fV19CitOT1RJQ0U6ICByZS1mb3JtZWQgY29tbWFuZDog Q1JFQVRFICBUQUJMRSAgcHVibGljLnNpbXBsZV90YWJsZSAoaWQgcGdfY2F0YWxvZy5pbnQ0IFNU T1JBR0UgcGxhaW4gICAgICwgbmFtZSBwZ19jYXRhbG9nLiJ2YXJjaGFyIig1KSBTVE9SQUdFIGV4 dGVuZGVkICBDT0xMQVRFIHBnX2NhdGFsb2cuImRlZmF1bHQiICAgKSAgICAgIAorLS0gVGVzdCBD UkVBVEUgSU5ERVggd2l0aCBhbiBJTkNMVURFIENMQVVTRQorQ1JFQVRFIFVOSVFVRSBJTkRFWCBj b3ZlcmluZ19pbmRleCBvbiBzaW1wbGVfdGFibGUgKGlkKSBJTkNMVURFIChuYW1lKTsKK05PVElD RTogIGRlcGFyc2VkIGpzb246IHsiZm10IjogIkNSRUFURSAle3VuaXF1ZX1zIElOREVYICV7Y29u Y3VycmVudGx5fXMgJXtpZl9ub3RfZXhpc3RzfXMgJXtuYW1lfUkgT04gJXt0YWJsZX1EIFVTSU5H ICV7aW5kZXhfYW19cyAle2RlZmluaXRpb259cyAle3dpdGh9cyAle3RhYmxlc3BhY2V9cyAle3do ZXJlX2NsYXVzZX1zIiwgIm5hbWUiOiAiY292ZXJpbmdfaW5kZXgiLCAid2l0aCI6IHsiZm10Ijog IldJVEgiLCAicHJlc2VudCI6IGZhbHNlfSwgInRhYmxlIjogeyJvYmpuYW1lIjogInNpbXBsZV90 YWJsZSIsICJzY2hlbWFuYW1lIjogInB1YmxpYyJ9LCAidW5pcXVlIjogIlVOSVFVRSIsICJpbmRl eF9hbSI6ICJidHJlZSIsICJkZWZpbml0aW9uIjogIihpZCBwZ19jYXRhbG9nLmludDRfb3BzKSBJ TkNMVURFIChuYW1lKSIsICJ0YWJsZXNwYWNlIjogeyJmbXQiOiAiVEFCTEVTUEFDRSIsICJwcmVz ZW50IjogZmFsc2V9LCAiY29uY3VycmVudGx5IjogIiIsICJ3aGVyZV9jbGF1c2UiOiB7ImZtdCI6 ICJXSEVSRSIsICJwcmVzZW50IjogZmFsc2V9LCAiaWZfbm90X2V4aXN0cyI6ICIifQorTk9USUNF OiAgcmUtZm9ybWVkIGNvbW1hbmQ6IENSRUFURSBVTklRVUUgSU5ERVggICBjb3ZlcmluZ19pbmRl eCBPTiBwdWJsaWMuc2ltcGxlX3RhYmxlIFVTSU5HIGJ0cmVlIChpZCBwZ19jYXRhbG9nLmludDRf b3BzKSBJTkNMVURFIChuYW1lKSAgIAorLS0gVGVzdCBUYWJsZUxpa2VDbGF1c2UgaXMgaGFuZGxl ZCBwcm9wZXJseQorQ1JFQVRFIFRBQkxFIGN0bHQxIChhIHRleHQgQ0hFQ0sgKGxlbmd0aChhKSA+ IDIpIFBSSU1BUlkgS0VZLCBiIHRleHQpOworTk9USUNFOiAgZGVwYXJzZWQganNvbjogeyJmbXQi OiAiQ1JFQVRFICV7cGVyc2lzdGVuY2V9cyBUQUJMRSAle2lmX25vdF9leGlzdHN9cyAle2lkZW50 aXR5fUQgKCV7dGFibGVfZWxlbWVudHM6LCB9cykgJXtpbmhlcml0c31zICV7dGFibGVzcGFjZX1z ICV7b25fY29tbWl0fXMgJXtwYXJ0aXRpb25fYnl9cyAle2FjY2Vzc19tZXRob2R9cyAle3dpdGhf Y2xhdXNlfXMiLCAiaWRlbnRpdHkiOiB7Im9iam5hbWUiOiAiY3RsdDEiLCAic2NoZW1hbmFtZSI6 ICJwdWJsaWMifSwgImluaGVyaXRzIjogeyJmbXQiOiAiSU5IRVJJVFMgKCV7cGFyZW50czosIH1E KSIsICJwYXJlbnRzIjogbnVsbCwgInByZXNlbnQiOiBmYWxzZX0sICJvbl9jb21taXQiOiB7ImZt dCI6ICJPTiBDT01NSVQgJXtvbl9jb21taXRfdmFsdWV9cyIsICJwcmVzZW50IjogZmFsc2UsICJv bl9jb21taXRfdmFsdWUiOiBudWxsfSwgInRhYmxlc3BhY2UiOiB7ImZtdCI6ICJUQUJMRVNQQUNF ICV7dGFibGVzcGFjZX1JIiwgInByZXNlbnQiOiBmYWxzZSwgInRhYmxlc3BhY2UiOiBudWxsfSwg InBlcnNpc3RlbmNlIjogIiIsICJ3aXRoX2NsYXVzZSI6IHsiZm10IjogIldJVEgiLCAicHJlc2Vu dCI6IGZhbHNlfSwgInBhcnRpdGlvbl9ieSI6IHsiZm10IjogIlBBUlRJVElPTiBCWSAle2RlZmlu aXRpb259cyIsICJwcmVzZW50IjogZmFsc2UsICJkZWZpbml0aW9uIjogbnVsbH0sICJhY2Nlc3Nf bWV0aG9kIjogeyJmbXQiOiAiVVNJTkcgJXthY2Nlc3NfbWV0aG9kfUkiLCAicHJlc2VudCI6IGZh bHNlLCAiYWNjZXNzX21ldGhvZCI6IG51bGx9LCAiaWZfbm90X2V4aXN0cyI6ICIiLCAidGFibGVf ZWxlbWVudHMiOiBbeyJmbXQiOiAiJXtuYW1lfUkgJXtjb2x0eXBlfVQgU1RPUkFHRSAle2NvbHN0 b3JhZ2V9cyAle2NvbXByZXNzaW9ufXMgJXtjb2xsYXRpb259cyAle25vdF9udWxsfXMgJXtkZWZh dWx0fXMgJXtnZW5lcmF0ZWRfY29sdW1ufXMiLCAibmFtZSI6ICJhIiwgInR5cGUiOiAiY29sdW1u IiwgImNvbHR5cGUiOiB7InR5cG1vZCI6ICIiLCAidHlwYXJyYXkiOiBmYWxzZSwgInR5cGVuYW1l IjogInRleHQiLCAic2NoZW1hbmFtZSI6ICJwZ19jYXRhbG9nIn0sICJkZWZhdWx0IjogeyJmbXQi OiAiREVGQVVMVCIsICJwcmVzZW50IjogZmFsc2V9LCAibm90X251bGwiOiAiIiwgImNvbGxhdGlv biI6IHsiZm10IjogIkNPTExBVEUgJXtuYW1lfUQiLCAibmFtZSI6IHsib2JqbmFtZSI6ICJkZWZh dWx0IiwgInNjaGVtYW5hbWUiOiAicGdfY2F0YWxvZyJ9fSwgImNvbHN0b3JhZ2UiOiAiZXh0ZW5k ZWQiLCAiY29tcHJlc3Npb24iOiB7ImZtdCI6ICJDT01QUkVTU0lPTiAle2NvbXByZXNzaW9uX21l dGhvZH1JIiwgInByZXNlbnQiOiBmYWxzZSwgImNvbXByZXNzaW9uX21ldGhvZCI6IG51bGx9LCAi Z2VuZXJhdGVkX2NvbHVtbiI6IHsiZm10IjogIkdFTkVSQVRFRCBBTFdBWVMgQVMiLCAicHJlc2Vu dCI6IGZhbHNlfX0sIHsiZm10IjogIiV7bmFtZX1JICV7Y29sdHlwZX1UIFNUT1JBR0UgJXtjb2xz dG9yYWdlfXMgJXtjb21wcmVzc2lvbn1zICV7Y29sbGF0aW9ufXMgJXtub3RfbnVsbH1zICV7ZGVm YXVsdH1zICV7Z2VuZXJhdGVkX2NvbHVtbn1zIiwgIm5hbWUiOiAiYiIsICJ0eXBlIjogImNvbHVt biIsICJjb2x0eXBlIjogeyJ0eXBtb2QiOiAiIiwgInR5cGFycmF5IjogZmFsc2UsICJ0eXBlbmFt ZSI6ICJ0ZXh0IiwgInNjaGVtYW5hbWUiOiAicGdfY2F0YWxvZyJ9LCAiZGVmYXVsdCI6IHsiZm10 IjogIkRFRkFVTFQiLCAicHJlc2VudCI6IGZhbHNlfSwgIm5vdF9udWxsIjogIiIsICJjb2xsYXRp b24iOiB7ImZtdCI6ICJDT0xMQVRFICV7bmFtZX1EIiwgIm5hbWUiOiB7Im9iam5hbWUiOiAiZGVm YXVsdCIsICJzY2hlbWFuYW1lIjogInBnX2NhdGFsb2cifX0sICJjb2xzdG9yYWdlIjogImV4dGVu ZGVkIiwgImNvbXByZXNzaW9uIjogeyJmbXQiOiAiQ09NUFJFU1NJT04gJXtjb21wcmVzc2lvbl9t ZXRob2R9SSIsICJwcmVzZW50IjogZmFsc2UsICJjb21wcmVzc2lvbl9tZXRob2QiOiBudWxsfSwg ImdlbmVyYXRlZF9jb2x1bW4iOiB7ImZtdCI6ICJHRU5FUkFURUQgQUxXQVlTIEFTIiwgInByZXNl bnQiOiBmYWxzZX19LCB7ImZtdCI6ICJDT05TVFJBSU5UICV7bmFtZX1JICV7ZGVmaW5pdGlvbn1z IiwgIm5hbWUiOiAiY3RsdDFfYV9jaGVjayIsICJ0eXBlIjogImNvbnN0cmFpbnQiLCAiY29udHlw ZSI6ICJjaGVjayIsICJkZWZpbml0aW9uIjogIkNIRUNLICgocGdfY2F0YWxvZy5sZW5ndGgoYSkg T1BFUkFUT1IocGdfY2F0YWxvZy4+KSAyKSkifSwgeyJmbXQiOiAiQ09OU1RSQUlOVCAle25hbWV9 SSAle2RlZmluaXRpb259cyIsICJuYW1lIjogImN0bHQxX3BrZXkiLCAidHlwZSI6ICJjb25zdHJh aW50IiwgImNvbnR5cGUiOiAicHJpbWFyeSBrZXkiLCAiZGVmaW5pdGlvbiI6ICJQUklNQVJZIEtF WSAoYSkifV19CitOT1RJQ0U6ICByZS1mb3JtZWQgY29tbWFuZDogQ1JFQVRFICBUQUJMRSAgcHVi bGljLmN0bHQxIChhIHBnX2NhdGFsb2cudGV4dCBTVE9SQUdFIGV4dGVuZGVkICBDT0xMQVRFIHBn X2NhdGFsb2cuImRlZmF1bHQiICAgLCBiIHBnX2NhdGFsb2cudGV4dCBTVE9SQUdFIGV4dGVuZGVk ICBDT0xMQVRFIHBnX2NhdGFsb2cuImRlZmF1bHQiICAgLCBDT05TVFJBSU5UIGN0bHQxX2FfY2hl Y2sgQ0hFQ0sgKChwZ19jYXRhbG9nLmxlbmd0aChhKSBPUEVSQVRPUihwZ19jYXRhbG9nLj4pIDIp KSwgQ09OU1RSQUlOVCBjdGx0MV9wa2V5IFBSSU1BUlkgS0VZIChhKSkgICAgICAKK05PVElDRTog IGRlcGFyc2VkIGpzb246IDxOVUxMPgorTk9USUNFOiAgcmUtZm9ybWVkIGNvbW1hbmQ6IDxOVUxM PgorQUxURVIgVEFCTEUgY3RsdDEgQUxURVIgQ09MVU1OIGEgU0VUIFNUT1JBR0UgTUFJTjsKK05P VElDRTogIGRlcGFyc2VkIGpzb246IHsiZm10IjogIkFMVEVSICV7b2JqdHlwZX1zICV7aWRlbnRp dHl9RCAle3N1YmNtZHM6LCB9cyIsICJvYmp0eXBlIjogIlRBQkxFIiwgInN1YmNtZHMiOiBbeyJm bXQiOiAiQUxURVIgQ09MVU1OICV7Y29sdW1ufUkgU0VUIFNUT1JBR0UgJXtzdG9yYWdlfXMiLCAi dHlwZSI6ICJzZXQgc3RvcmFnZSIsICJjb2x1bW4iOiAiYSIsICJzdG9yYWdlIjogIm1haW4ifV0s ICJpZGVudGl0eSI6IHsib2JqbmFtZSI6ICJjdGx0MSIsICJzY2hlbWFuYW1lIjogInB1YmxpYyJ9 fQorTk9USUNFOiAgcmUtZm9ybWVkIGNvbW1hbmQ6IEFMVEVSIFRBQkxFIHB1YmxpYy5jdGx0MSBB TFRFUiBDT0xVTU4gYSBTRVQgU1RPUkFHRSBtYWluCitBTFRFUiBUQUJMRSBjdGx0MSBBTFRFUiBD T0xVTU4gYiBTRVQgU1RPUkFHRSBFWFRFUk5BTDsKK05PVElDRTogIGRlcGFyc2VkIGpzb246IHsi Zm10IjogIkFMVEVSICV7b2JqdHlwZX1zICV7aWRlbnRpdHl9RCAle3N1YmNtZHM6LCB9cyIsICJv Ymp0eXBlIjogIlRBQkxFIiwgInN1YmNtZHMiOiBbeyJmbXQiOiAiQUxURVIgQ09MVU1OICV7Y29s dW1ufUkgU0VUIFNUT1JBR0UgJXtzdG9yYWdlfXMiLCAidHlwZSI6ICJzZXQgc3RvcmFnZSIsICJj b2x1bW4iOiAiYiIsICJzdG9yYWdlIjogImV4dGVybmFsIn1dLCAiaWRlbnRpdHkiOiB7Im9iam5h bWUiOiAiY3RsdDEiLCAic2NoZW1hbmFtZSI6ICJwdWJsaWMifX0KK05PVElDRTogIHJlLWZvcm1l ZCBjb21tYW5kOiBBTFRFUiBUQUJMRSBwdWJsaWMuY3RsdDEgQUxURVIgQ09MVU1OIGIgU0VUIFNU T1JBR0UgZXh0ZXJuYWwKKy0tIFRlc3QgZm9yZWlnbiBrZXkgY29uc3RyYWludCBpcyBoYW5kbGVk IGluIGEgZm9sbG93aW5nIEFMVEVSIFRBQkxFIEFERCBDT05TVFJBSU5UIEZPUkVJR04gS0VZIFJF RkVSRU5DRVMgc3ViY29tbWFuZAorQ1JFQVRFIFRBQkxFIHByb2R1Y3QgKGlkIGludCBQUklNQVJZ IEtFWSwgbmFtZSB0ZXh0KTsKK05PVElDRTogIGRlcGFyc2VkIGpzb246IHsiZm10IjogIkNSRUFU RSAle3BlcnNpc3RlbmNlfXMgVEFCTEUgJXtpZl9ub3RfZXhpc3RzfXMgJXtpZGVudGl0eX1EICgl e3RhYmxlX2VsZW1lbnRzOiwgfXMpICV7aW5oZXJpdHN9cyAle3RhYmxlc3BhY2V9cyAle29uX2Nv bW1pdH1zICV7cGFydGl0aW9uX2J5fXMgJXthY2Nlc3NfbWV0aG9kfXMgJXt3aXRoX2NsYXVzZX1z IiwgImlkZW50aXR5IjogeyJvYmpuYW1lIjogInByb2R1Y3QiLCAic2NoZW1hbmFtZSI6ICJwdWJs aWMifSwgImluaGVyaXRzIjogeyJmbXQiOiAiSU5IRVJJVFMgKCV7cGFyZW50czosIH1EKSIsICJw YXJlbnRzIjogbnVsbCwgInByZXNlbnQiOiBmYWxzZX0sICJvbl9jb21taXQiOiB7ImZtdCI6ICJP TiBDT01NSVQgJXtvbl9jb21taXRfdmFsdWV9cyIsICJwcmVzZW50IjogZmFsc2UsICJvbl9jb21t aXRfdmFsdWUiOiBudWxsfSwgInRhYmxlc3BhY2UiOiB7ImZtdCI6ICJUQUJMRVNQQUNFICV7dGFi bGVzcGFjZX1JIiwgInByZXNlbnQiOiBmYWxzZSwgInRhYmxlc3BhY2UiOiBudWxsfSwgInBlcnNp c3RlbmNlIjogIiIsICJ3aXRoX2NsYXVzZSI6IHsiZm10IjogIldJVEgiLCAicHJlc2VudCI6IGZh bHNlfSwgInBhcnRpdGlvbl9ieSI6IHsiZm10IjogIlBBUlRJVElPTiBCWSAle2RlZmluaXRpb259 cyIsICJwcmVzZW50IjogZmFsc2UsICJkZWZpbml0aW9uIjogbnVsbH0sICJhY2Nlc3NfbWV0aG9k IjogeyJmbXQiOiAiVVNJTkcgJXthY2Nlc3NfbWV0aG9kfUkiLCAicHJlc2VudCI6IGZhbHNlLCAi YWNjZXNzX21ldGhvZCI6IG51bGx9LCAiaWZfbm90X2V4aXN0cyI6ICIiLCAidGFibGVfZWxlbWVu dHMiOiBbeyJmbXQiOiAiJXtuYW1lfUkgJXtjb2x0eXBlfVQgU1RPUkFHRSAle2NvbHN0b3JhZ2V9 cyAle2NvbXByZXNzaW9ufXMgJXtjb2xsYXRpb259cyAle25vdF9udWxsfXMgJXtkZWZhdWx0fXMg JXtnZW5lcmF0ZWRfY29sdW1ufXMiLCAibmFtZSI6ICJpZCIsICJ0eXBlIjogImNvbHVtbiIsICJj b2x0eXBlIjogeyJ0eXBtb2QiOiAiIiwgInR5cGFycmF5IjogZmFsc2UsICJ0eXBlbmFtZSI6ICJp bnQ0IiwgInNjaGVtYW5hbWUiOiAicGdfY2F0YWxvZyJ9LCAiZGVmYXVsdCI6IHsiZm10IjogIkRF RkFVTFQiLCAicHJlc2VudCI6IGZhbHNlfSwgIm5vdF9udWxsIjogIiIsICJjb2xsYXRpb24iOiB7 ImZtdCI6ICJDT0xMQVRFIiwgInByZXNlbnQiOiBmYWxzZX0sICJjb2xzdG9yYWdlIjogInBsYWlu IiwgImNvbXByZXNzaW9uIjogeyJmbXQiOiAiQ09NUFJFU1NJT04gJXtjb21wcmVzc2lvbl9tZXRo b2R9SSIsICJwcmVzZW50IjogZmFsc2UsICJjb21wcmVzc2lvbl9tZXRob2QiOiBudWxsfSwgImdl bmVyYXRlZF9jb2x1bW4iOiB7ImZtdCI6ICJHRU5FUkFURUQgQUxXQVlTIEFTIiwgInByZXNlbnQi OiBmYWxzZX19LCB7ImZtdCI6ICIle25hbWV9SSAle2NvbHR5cGV9VCBTVE9SQUdFICV7Y29sc3Rv cmFnZX1zICV7Y29tcHJlc3Npb259cyAle2NvbGxhdGlvbn1zICV7bm90X251bGx9cyAle2RlZmF1 bHR9cyAle2dlbmVyYXRlZF9jb2x1bW59cyIsICJuYW1lIjogIm5hbWUiLCAidHlwZSI6ICJjb2x1 bW4iLCAiY29sdHlwZSI6IHsidHlwbW9kIjogIiIsICJ0eXBhcnJheSI6IGZhbHNlLCAidHlwZW5h bWUiOiAidGV4dCIsICJzY2hlbWFuYW1lIjogInBnX2NhdGFsb2cifSwgImRlZmF1bHQiOiB7ImZt dCI6ICJERUZBVUxUIiwgInByZXNlbnQiOiBmYWxzZX0sICJub3RfbnVsbCI6ICIiLCAiY29sbGF0 aW9uIjogeyJmbXQiOiAiQ09MTEFURSAle25hbWV9RCIsICJuYW1lIjogeyJvYmpuYW1lIjogImRl ZmF1bHQiLCAic2NoZW1hbmFtZSI6ICJwZ19jYXRhbG9nIn19LCAiY29sc3RvcmFnZSI6ICJleHRl bmRlZCIsICJjb21wcmVzc2lvbiI6IHsiZm10IjogIkNPTVBSRVNTSU9OICV7Y29tcHJlc3Npb25f bWV0aG9kfUkiLCAicHJlc2VudCI6IGZhbHNlLCAiY29tcHJlc3Npb25fbWV0aG9kIjogbnVsbH0s ICJnZW5lcmF0ZWRfY29sdW1uIjogeyJmbXQiOiAiR0VORVJBVEVEIEFMV0FZUyBBUyIsICJwcmVz ZW50IjogZmFsc2V9fSwgeyJmbXQiOiAiQ09OU1RSQUlOVCAle25hbWV9SSAle2RlZmluaXRpb259 cyIsICJuYW1lIjogInByb2R1Y3RfcGtleSIsICJ0eXBlIjogImNvbnN0cmFpbnQiLCAiY29udHlw ZSI6ICJwcmltYXJ5IGtleSIsICJkZWZpbml0aW9uIjogIlBSSU1BUlkgS0VZIChpZCkifV19CitO T1RJQ0U6ICByZS1mb3JtZWQgY29tbWFuZDogQ1JFQVRFICBUQUJMRSAgcHVibGljLnByb2R1Y3Qg KGlkIHBnX2NhdGFsb2cuaW50NCBTVE9SQUdFIHBsYWluICAgICAsIG5hbWUgcGdfY2F0YWxvZy50 ZXh0IFNUT1JBR0UgZXh0ZW5kZWQgIENPTExBVEUgcGdfY2F0YWxvZy4iZGVmYXVsdCIgICAsIENP TlNUUkFJTlQgcHJvZHVjdF9wa2V5IFBSSU1BUlkgS0VZIChpZCkpICAgICAgCitOT1RJQ0U6ICBk ZXBhcnNlZCBqc29uOiA8TlVMTD4KK05PVElDRTogIHJlLWZvcm1lZCBjb21tYW5kOiA8TlVMTD4K K0NSRUFURSBUQUJMRSBvcmRlcnMgKG9yZGVyX2lkIGludCBQUklNQVJZIEtFWSwgcHJvZHVjdF9p ZCBpbnQKK1JFRkVSRU5DRVMgcHJvZHVjdCAoaWQpKTsKK05PVElDRTogIGRlcGFyc2VkIGpzb246 IHsiZm10IjogIkNSRUFURSAle3BlcnNpc3RlbmNlfXMgVEFCTEUgJXtpZl9ub3RfZXhpc3RzfXMg JXtpZGVudGl0eX1EICgle3RhYmxlX2VsZW1lbnRzOiwgfXMpICV7aW5oZXJpdHN9cyAle3RhYmxl c3BhY2V9cyAle29uX2NvbW1pdH1zICV7cGFydGl0aW9uX2J5fXMgJXthY2Nlc3NfbWV0aG9kfXMg JXt3aXRoX2NsYXVzZX1zIiwgImlkZW50aXR5IjogeyJvYmpuYW1lIjogIm9yZGVycyIsICJzY2hl bWFuYW1lIjogInB1YmxpYyJ9LCAiaW5oZXJpdHMiOiB7ImZtdCI6ICJJTkhFUklUUyAoJXtwYXJl bnRzOiwgfUQpIiwgInBhcmVudHMiOiBudWxsLCAicHJlc2VudCI6IGZhbHNlfSwgIm9uX2NvbW1p dCI6IHsiZm10IjogIk9OIENPTU1JVCAle29uX2NvbW1pdF92YWx1ZX1zIiwgInByZXNlbnQiOiBm YWxzZSwgIm9uX2NvbW1pdF92YWx1ZSI6IG51bGx9LCAidGFibGVzcGFjZSI6IHsiZm10IjogIlRB QkxFU1BBQ0UgJXt0YWJsZXNwYWNlfUkiLCAicHJlc2VudCI6IGZhbHNlLCAidGFibGVzcGFjZSI6 IG51bGx9LCAicGVyc2lzdGVuY2UiOiAiIiwgIndpdGhfY2xhdXNlIjogeyJmbXQiOiAiV0lUSCIs ICJwcmVzZW50IjogZmFsc2V9LCAicGFydGl0aW9uX2J5IjogeyJmbXQiOiAiUEFSVElUSU9OIEJZ ICV7ZGVmaW5pdGlvbn1zIiwgInByZXNlbnQiOiBmYWxzZSwgImRlZmluaXRpb24iOiBudWxsfSwg ImFjY2Vzc19tZXRob2QiOiB7ImZtdCI6ICJVU0lORyAle2FjY2Vzc19tZXRob2R9SSIsICJwcmVz ZW50IjogZmFsc2UsICJhY2Nlc3NfbWV0aG9kIjogbnVsbH0sICJpZl9ub3RfZXhpc3RzIjogIiIs ICJ0YWJsZV9lbGVtZW50cyI6IFt7ImZtdCI6ICIle25hbWV9SSAle2NvbHR5cGV9VCBTVE9SQUdF ICV7Y29sc3RvcmFnZX1zICV7Y29tcHJlc3Npb259cyAle2NvbGxhdGlvbn1zICV7bm90X251bGx9 cyAle2RlZmF1bHR9cyAle2dlbmVyYXRlZF9jb2x1bW59cyIsICJuYW1lIjogIm9yZGVyX2lkIiwg InR5cGUiOiAiY29sdW1uIiwgImNvbHR5cGUiOiB7InR5cG1vZCI6ICIiLCAidHlwYXJyYXkiOiBm YWxzZSwgInR5cGVuYW1lIjogImludDQiLCAic2NoZW1hbmFtZSI6ICJwZ19jYXRhbG9nIn0sICJk ZWZhdWx0IjogeyJmbXQiOiAiREVGQVVMVCIsICJwcmVzZW50IjogZmFsc2V9LCAibm90X251bGwi OiAiIiwgImNvbGxhdGlvbiI6IHsiZm10IjogIkNPTExBVEUiLCAicHJlc2VudCI6IGZhbHNlfSwg ImNvbHN0b3JhZ2UiOiAicGxhaW4iLCAiY29tcHJlc3Npb24iOiB7ImZtdCI6ICJDT01QUkVTU0lP TiAle2NvbXByZXNzaW9uX21ldGhvZH1JIiwgInByZXNlbnQiOiBmYWxzZSwgImNvbXByZXNzaW9u X21ldGhvZCI6IG51bGx9LCAiZ2VuZXJhdGVkX2NvbHVtbiI6IHsiZm10IjogIkdFTkVSQVRFRCBB TFdBWVMgQVMiLCAicHJlc2VudCI6IGZhbHNlfX0sIHsiZm10IjogIiV7bmFtZX1JICV7Y29sdHlw ZX1UIFNUT1JBR0UgJXtjb2xzdG9yYWdlfXMgJXtjb21wcmVzc2lvbn1zICV7Y29sbGF0aW9ufXMg JXtub3RfbnVsbH1zICV7ZGVmYXVsdH1zICV7Z2VuZXJhdGVkX2NvbHVtbn1zIiwgIm5hbWUiOiAi cHJvZHVjdF9pZCIsICJ0eXBlIjogImNvbHVtbiIsICJjb2x0eXBlIjogeyJ0eXBtb2QiOiAiIiwg InR5cGFycmF5IjogZmFsc2UsICJ0eXBlbmFtZSI6ICJpbnQ0IiwgInNjaGVtYW5hbWUiOiAicGdf Y2F0YWxvZyJ9LCAiZGVmYXVsdCI6IHsiZm10IjogIkRFRkFVTFQiLCAicHJlc2VudCI6IGZhbHNl fSwgIm5vdF9udWxsIjogIiIsICJjb2xsYXRpb24iOiB7ImZtdCI6ICJDT0xMQVRFIiwgInByZXNl bnQiOiBmYWxzZX0sICJjb2xzdG9yYWdlIjogInBsYWluIiwgImNvbXByZXNzaW9uIjogeyJmbXQi OiAiQ09NUFJFU1NJT04gJXtjb21wcmVzc2lvbl9tZXRob2R9SSIsICJwcmVzZW50IjogZmFsc2Us ICJjb21wcmVzc2lvbl9tZXRob2QiOiBudWxsfSwgImdlbmVyYXRlZF9jb2x1bW4iOiB7ImZtdCI6 ICJHRU5FUkFURUQgQUxXQVlTIEFTIiwgInByZXNlbnQiOiBmYWxzZX19LCB7ImZtdCI6ICJDT05T VFJBSU5UICV7bmFtZX1JICV7ZGVmaW5pdGlvbn1zIiwgIm5hbWUiOiAib3JkZXJzX3BrZXkiLCAi dHlwZSI6ICJjb25zdHJhaW50IiwgImNvbnR5cGUiOiAicHJpbWFyeSBrZXkiLCAiZGVmaW5pdGlv biI6ICJQUklNQVJZIEtFWSAob3JkZXJfaWQpIn1dfQorTk9USUNFOiAgcmUtZm9ybWVkIGNvbW1h bmQ6IENSRUFURSAgVEFCTEUgIHB1YmxpYy5vcmRlcnMgKG9yZGVyX2lkIHBnX2NhdGFsb2cuaW50 NCBTVE9SQUdFIHBsYWluICAgICAsIHByb2R1Y3RfaWQgcGdfY2F0YWxvZy5pbnQ0IFNUT1JBR0Ug cGxhaW4gICAgICwgQ09OU1RSQUlOVCBvcmRlcnNfcGtleSBQUklNQVJZIEtFWSAob3JkZXJfaWQp KSAgICAgIAorTk9USUNFOiAgZGVwYXJzZWQganNvbjogPE5VTEw+CitOT1RJQ0U6ICByZS1mb3Jt ZWQgY29tbWFuZDogPE5VTEw+CitOT1RJQ0U6ICBkZXBhcnNlZCBqc29uOiB7ImZtdCI6ICJBTFRF UiAle29ianR5cGV9cyAle2lkZW50aXR5fUQgJXtzdWJjbWRzOiwgfXMiLCAib2JqdHlwZSI6ICJU QUJMRSIsICJzdWJjbWRzIjogW3siZm10IjogIkFERCBDT05TVFJBSU5UICV7bmFtZX1JICV7ZGVm aW5pdGlvbn1zIiwgIm5hbWUiOiAib3JkZXJzX3Byb2R1Y3RfaWRfZmtleSIsICJ0eXBlIjogImFk ZCBjb25zdHJhaW50IiwgImRlZmluaXRpb24iOiAiRk9SRUlHTiBLRVkgKHByb2R1Y3RfaWQpIFJF RkVSRU5DRVMgcHVibGljLnByb2R1Y3QoaWQpIn1dLCAiaWRlbnRpdHkiOiB7Im9iam5hbWUiOiAi b3JkZXJzIiwgInNjaGVtYW5hbWUiOiAicHVibGljIn19CitOT1RJQ0U6ICByZS1mb3JtZWQgY29t bWFuZDogQUxURVIgVEFCTEUgcHVibGljLm9yZGVycyBBREQgQ09OU1RSQUlOVCBvcmRlcnNfcHJv ZHVjdF9pZF9ma2V5IEZPUkVJR04gS0VZIChwcm9kdWN0X2lkKSBSRUZFUkVOQ0VTIHB1YmxpYy5w cm9kdWN0KGlkKQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNl X3JlZ3Jlc3MvZXhwZWN0ZWQvdGVzdF9kZGxfZGVwYXJzZS5vdXQgYi9zcmMvdGVzdC9tb2R1bGVz L3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9leHBlY3RlZC90ZXN0X2RkbF9kZXBhcnNlLm91dApu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMGUyYmYyCi0tLSAvZGV2L251bGwK KysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvZXhwZWN0ZWQv dGVzdF9kZGxfZGVwYXJzZS5vdXQKQEAgLTAsMCArMSwxOCBAQAorQ1JFQVRFIEVYVEVOU0lPTiB0 ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3M7CitDUkVBVEUgT1IgUkVQTEFDRSBGVU5DVElPTiB0ZXN0 X2RkbF9kZXBhcnNlKCkKKyAgUkVUVVJOUyBldmVudF90cmlnZ2VyIExBTkdVQUdFIHBscGdzcWwg QVMKKyQkCitERUNMQVJFCisJciByZWNvcmQ7CisJZGVwYXJzZWRfanNvbiB0ZXh0OworQkVHSU4K KwlGT1IgciBJTiBTRUxFQ1QgKiBGUk9NIHBnX2V2ZW50X3RyaWdnZXJfZGRsX2NvbW1hbmRzKCkK KwlMT09QCisJCWRlcGFyc2VkX2pzb24gPSBwZ19jYXRhbG9nLmRkbF9kZXBhcnNlX3RvX2pzb24o ci5jb21tYW5kKTsKKwkJUkFJU0UgTk9USUNFICdkZXBhcnNlZCBqc29uOiAlJywgZGVwYXJzZWRf anNvbjsKKwkJUkFJU0UgTk9USUNFICdyZS1mb3JtZWQgY29tbWFuZDogJScsIHBnX2NhdGFsb2cu ZGRsX2RlcGFyc2VfZXhwYW5kX2NvbW1hbmQoZGVwYXJzZWRfanNvbik7CisJRU5EIExPT1A7CitF TkQ7CiskJDsKK0NSRUFURSBFVkVOVCBUUklHR0VSIHRlc3RfZGRsX2RlcGFyc2UKK09OIGRkbF9j b21tYW5kX2VuZCBFWEVDVVRFIFBST0NFRFVSRSB0ZXN0X2RkbF9kZXBhcnNlKCk7CmRpZmYgLS1n aXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9tZXNvbi5idWls ZCBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL21lc29uLmJ1aWxk Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhMTUyYTIKLS0tIC9kZXYvbnVs bAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9tZXNvbi5i dWlsZApAQCAtMCwwICsxLDQyIEBACisjIEZJWE1FOiBwcmV2ZW50IGluc3RhbGwgZHVyaW5nIG1h aW4gaW5zdGFsbCwgYnV0IG5vdCBkdXJpbmcgdGVzdCA6LworCit0ZXN0X2RkbF9kZXBhcnNlX3Jl Z3Jlc3Nfc291cmNlcyA9IGZpbGVzKAorICAndGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzLmMnLAor KQorCitpZiBob3N0X3N5c3RlbSA9PSAnd2luZG93cycKKyAgdGVzdF9kZGxfZGVwYXJzZV9yZWdy ZXNzX3NvdXJjZXMgKz0gcmNfbGliX2dlbi5wcm9jZXNzKHdpbjMydmVyX3JjLCBleHRyYV9hcmdz OiBbCisgICAgJy0tTkFNRScsICd0ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MnLAorICAgICctLUZJ TEVERVNDJywgJ3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcyAtIHJlZ3Jlc3Npb24gdGVzdGluZyBm b3IgRERMIGRlcGFyc2luZycsXSkKK2VuZGlmCisKK3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcyA9 IHNoYXJlZF9tb2R1bGUoJ3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcycsCisgIHRlc3RfZGRsX2Rl cGFyc2VfcmVncmVzc19zb3VyY2VzLAorICBrd2FyZ3M6IHBnX21vZF9hcmdzLAorKQordGVzdHBy ZXBfdGFyZ2V0cyArPSB0ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MKKworaW5zdGFsbF9kYXRhKAor ICAndGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzLmNvbnRyb2wnLAorICAndGVzdF9kZGxfZGVwYXJz ZV9yZWdyZXNzLS0xLjAuc3FsJywKKyAga3dhcmdzOiBjb250cmliX2RhdGFfYXJncywKKykKKwor dGVzdHMgKz0geworICAnbmFtZSc6ICd0ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MnLAorICAnc2Qn OiBtZXNvbi5jdXJyZW50X3NvdXJjZV9kaXIoKSwKKyAgJ2JkJzogbWVzb24uY3VycmVudF9idWls ZF9kaXIoKSwKKyAgJ3JlZ3Jlc3MnOiB7CisgICAgJ3NxbCc6IFsKKyAgICAgICd0ZXN0X2RkbF9k ZXBhcnNlJywKKyAgICAgICdjcmVhdGVfZXh0ZW5zaW9uJywKKyAgICAgICdjcmVhdGVfc2NoZW1h JywKKyAgICAgICdjcmVhdGVfdGFibGUnLAorICAgIF0sCisgIH0sCisgICd0YXAnOiB7CisgICAg J3Rlc3RzJzogWworICAgICAgJ3QvMDAxX2NvbXBhcmVfZHVtcGVkX3Jlc3VsdHMucGwnLAorICAg IF0sCisgIH0sCit9CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFy c2VfcmVncmVzcy9zcWwvYWdncmVnYXRlLnNxbCBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxf ZGVwYXJzZV9yZWdyZXNzL3NxbC9hZ2dyZWdhdGUuc3FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAuLjU2MWI0ZTEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVz L3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9zcWwvYWdncmVnYXRlLnNxbApAQCAtMCwwICsxLDcg QEAKK0NSRUFURSBBR0dSRUdBVEUgbmV3YXZnKGludDQpICgKKyAgIHNmdW5jID0gaW50NF9hdmdf YWNjdW0sIHN0eXBlID0gX2ludDgsCisgICBmaW5hbGZ1bmMgPSBpbnQ4X2F2ZywKKyAgIGluaXRj b25kMSA9ICd7MCwwfScKKyk7CisKK0RST1AgQUdHUkVHQVRFIG5ld2F2ZyhpbnQ0KTsKZGlmZiAt LWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL3NxbC9jcmVh dGVfZXh0ZW5zaW9uLnNxbCBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdy ZXNzL3NxbC9jcmVhdGVfZXh0ZW5zaW9uLnNxbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwLi5kMjNlN2ZkCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0 X2RkbF9kZXBhcnNlX3JlZ3Jlc3Mvc3FsL2NyZWF0ZV9leHRlbnNpb24uc3FsCkBAIC0wLDAgKzEs NSBAQAorLS0tCistLS0gQ1JFQVRFX0VYVEVOU0lPTgorLS0tCisKK0NSRUFURSBFWFRFTlNJT04g cGdfc3RhdF9zdGF0ZW1lbnRzOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2Rk bF9kZXBhcnNlX3JlZ3Jlc3Mvc3FsL2NyZWF0ZV9zY2hlbWEuc3FsIGIvc3JjL3Rlc3QvbW9kdWxl cy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3Mvc3FsL2NyZWF0ZV9zY2hlbWEuc3FsCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwYjEzZjAKLS0tIC9kZXYvbnVsbAorKysgYi9z cmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9zcWwvY3JlYXRlX3NjaGVt YS5zcWwKQEAgLTAsMCArMSwxNiBAQAorLS0KKy0tIENSRUFURV9TQ0hFTUEKKy0tCisKK0NSRUFU RSBTQ0hFTUEgZm9vOworCitDUkVBVEUgU0NIRU1BIElGIE5PVCBFWElTVFMgYmFyOworCitDUkVB VEUgU0NIRU1BIGJhejsKKworLS0gV2lsbCBub3QgYmUgY3JlYXRlZCwgYW5kIHdpbGwgbm90IGJl IGhhbmRsZWQgYnkgdGhlCistLSBldmVudCB0cmlnZ2VyCitDUkVBVEUgU0NIRU1BIElGIE5PVCBF WElTVFMgYmF6OworCitDUkVBVEUgU0NIRU1BIGVsZW1lbnRfdGVzdAorICBDUkVBVEUgVEFCTEUg Zm9vIChpZCBpbnQpCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFy c2VfcmVncmVzcy9zcWwvY3JlYXRlX3RhYmxlLnNxbCBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9k ZGxfZGVwYXJzZV9yZWdyZXNzL3NxbC9jcmVhdGVfdGFibGUuc3FsCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAuLjk5N2QyZjUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9t b2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9zcWwvY3JlYXRlX3RhYmxlLnNxbApAQCAt MCwwICsxLDE2IEBACitDUkVBVEUgVEFCTEUgc2ltcGxlX3RhYmxlKAorICAgIGlkIGludCwKKyAg ICBuYW1lIHZhcmNoYXIoNSkKKyk7CistLSBUZXN0IENSRUFURSBJTkRFWCB3aXRoIGFuIElOQ0xV REUgQ0xBVVNFCitDUkVBVEUgVU5JUVVFIElOREVYIGNvdmVyaW5nX2luZGV4IG9uIHNpbXBsZV90 YWJsZSAoaWQpIElOQ0xVREUgKG5hbWUpOworCistLSBUZXN0IFRhYmxlTGlrZUNsYXVzZSBpcyBo YW5kbGVkIHByb3Blcmx5CitDUkVBVEUgVEFCTEUgY3RsdDEgKGEgdGV4dCBDSEVDSyAobGVuZ3Ro KGEpID4gMikgUFJJTUFSWSBLRVksIGIgdGV4dCk7CitBTFRFUiBUQUJMRSBjdGx0MSBBTFRFUiBD T0xVTU4gYSBTRVQgU1RPUkFHRSBNQUlOOworQUxURVIgVEFCTEUgY3RsdDEgQUxURVIgQ09MVU1O IGIgU0VUIFNUT1JBR0UgRVhURVJOQUw7CisKKy0tIFRlc3QgZm9yZWlnbiBrZXkgY29uc3RyYWlu dCBpcyBoYW5kbGVkIGluIGEgZm9sbG93aW5nIEFMVEVSIFRBQkxFIEFERCBDT05TVFJBSU5UIEZP UkVJR04gS0VZIFJFRkVSRU5DRVMgc3ViY29tbWFuZAorQ1JFQVRFIFRBQkxFIHByb2R1Y3QgKGlk IGludCBQUklNQVJZIEtFWSwgbmFtZSB0ZXh0KTsKK0NSRUFURSBUQUJMRSBvcmRlcnMgKG9yZGVy X2lkIGludCBQUklNQVJZIEtFWSwgcHJvZHVjdF9pZCBpbnQKK1JFRkVSRU5DRVMgcHJvZHVjdCAo aWQpKTsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdy ZXNzL3NxbC90ZXN0X2RkbF9kZXBhcnNlLnNxbCBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxf ZGVwYXJzZV9yZWdyZXNzL3NxbC90ZXN0X2RkbF9kZXBhcnNlLnNxbApuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwLi4wODg5ZmEwCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3Qv bW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3Mvc3FsL3Rlc3RfZGRsX2RlcGFyc2Uuc3Fs CkBAIC0wLDAgKzEsMjAgQEAKK0NSRUFURSBFWFRFTlNJT04gdGVzdF9kZGxfZGVwYXJzZV9yZWdy ZXNzOworCitDUkVBVEUgT1IgUkVQTEFDRSBGVU5DVElPTiB0ZXN0X2RkbF9kZXBhcnNlKCkKKyAg UkVUVVJOUyBldmVudF90cmlnZ2VyIExBTkdVQUdFIHBscGdzcWwgQVMKKyQkCitERUNMQVJFCisJ ciByZWNvcmQ7CisJZGVwYXJzZWRfanNvbiB0ZXh0OworQkVHSU4KKwlGT1IgciBJTiBTRUxFQ1Qg KiBGUk9NIHBnX2V2ZW50X3RyaWdnZXJfZGRsX2NvbW1hbmRzKCkKKwlMT09QCisJCWRlcGFyc2Vk X2pzb24gPSBwZ19jYXRhbG9nLmRkbF9kZXBhcnNlX3RvX2pzb24oci5jb21tYW5kKTsKKwkJUkFJ U0UgTk9USUNFICdkZXBhcnNlZCBqc29uOiAlJywgZGVwYXJzZWRfanNvbjsKKwkJUkFJU0UgTk9U SUNFICdyZS1mb3JtZWQgY29tbWFuZDogJScsIHBnX2NhdGFsb2cuZGRsX2RlcGFyc2VfZXhwYW5k X2NvbW1hbmQoZGVwYXJzZWRfanNvbik7CisJRU5EIExPT1A7CitFTkQ7CiskJDsKKworQ1JFQVRF IEVWRU5UIFRSSUdHRVIgdGVzdF9kZGxfZGVwYXJzZQorT04gZGRsX2NvbW1hbmRfZW5kIEVYRUNV VEUgUFJPQ0VEVVJFIHRlc3RfZGRsX2RlcGFyc2UoKTsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21v ZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL3QvMDAxX2NvbXBhcmVfZHVtcGVkX3Jlc3Vs dHMucGwgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy90LzAwMV9j b21wYXJlX2R1bXBlZF9yZXN1bHRzLnBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAuLjY2NGFkMzQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRs X2RlcGFyc2VfcmVncmVzcy90LzAwMV9jb21wYXJlX2R1bXBlZF9yZXN1bHRzLnBsCkBAIC0wLDAg KzEsMTgxIEBACit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzOwordXNlIEVudjsKK3VzZSBQb3N0 Z3JlU1FMOjpUZXN0OjpDbHVzdGVyOwordXNlIFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOwordXNl IFRlc3Q6Ok1vcmU7Cit1c2UgRmlsZTo6QmFzZW5hbWU7CisKK3N1YiBleGVjdXRlX3Rlc3RfY2Fz ZSB7CisgICAgbXkgJHRlc3RfbmFtZSA9ICRfWzBdOworICAgIG15ICRwdWJfbm9kZSA9ICRfWzFd OworICAgIG15ICRzdWJfbm9kZSA9ICRfWzJdOworICAgIG15ICRkYm5hbWUgPSAkX1szXTsKKyAg ICBteSAkb3V0cHV0ZGlyID0gJFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOjp0bXBfY2hlY2s7CisK KyAgICAjIHNldCB1cCBkZXBhcnNlIHRlc3RpbmcgcmVzb3VyY2VzCisgICAgY3JlYXRlX2RlcGFy c2VfdGVzdGluZ19yZXNvdXJjZXNfb25fcHViX25vZGUoJHB1Yl9ub2RlLCAkZGJuYW1lKTsKKwor ICAgIG15ICR0ZXN0X2ZpbGUgPSAiLi9zcWwvJHt0ZXN0X25hbWV9LnNxbCI7CisgICAgbXkgJGNv bnRlbnQgPSBkb3tsb2NhbChAQVJHViwkLyk9JHRlc3RfZmlsZTs8Pn07CisKKyAgICAkcHViX25v ZGUgLT4gcHNxbCgkZGJuYW1lLCAkY29udGVudCk7CisKKyAgICAjIHJldHJpZXZlIFNRTCBjb21t YW5kcyBnZW5lcmF0ZWQgZnJvbSBkZXBhcnNlZCBERExzIG9uIHB1YiBub2RlCisgICAgbXkgJGRk bF9zcWwgPSAnJzsKKyAgICAkcHViX25vZGUgLT4gcHNxbCgkZGJuYW1lLHEoCisgICAgICAgIHNl bGVjdCBkZGxfZGVwYXJzZV9leHBhbmRfY29tbWFuZChkZGwpIHx8ICc7JyBmcm9tIGRlcGFyc2Vk X2RkbHMgT1JERVIgQlkgaWQgQVNDKSwKKyAgICAgICAgc3Rkb3V0ID0+IFwkZGRsX3NxbCk7CisK KyAgICBwcmludCAiXG5zdGFydCBwcmludGluZyByZS1mb3JtZWQgc3FsXG4iOworICAgIHByaW50 ICRkZGxfc3FsOworICAgIHByaW50ICJcbmVuZCBwcmludGluZyByZS1mb3JtZWQgc3FsXG4iOwor ICAgICMgZXhlY3V0ZSBTUUwgY29tbWFuZHMgb24gc3ViIG5vZGUKKyAgICAkc3ViX25vZGUgLT4g cHNxbCgkZGJuYW1lLCAkZGRsX3NxbCk7CisKKyAgICAjIGNsZWFuIHVwIGRlcGFyc2UgdGVzdGlu ZyByZXNvdXJjZXMKKyAgICBjbGVhbl9kZXBhcnNlX3Rlc3RpbmdfcmVzb3VyY2VzX29uX3B1Yl9u b2RlKCRwdWJfbm9kZSwgJGRibmFtZSk7CisKKyAgICAjIGR1bXAgZnJvbSBwdWIgbm9kZSBhbmQg c3ViIG5vZGUKKyAgICBta2RpciAke291dHB1dGRpcn0uIi9kdW1wcyIsIDA3NTU7CisgICAgbXkg JHB1Yl9kdW1wID0gJHtvdXRwdXRkaXJ9LiIvZHVtcHMvJHt0ZXN0X25hbWV9X3B1Yi5kdW1wIjsK KyAgICBteSAkc3ViX2R1bXAgPSAke291dHB1dGRpcn0uIi9kdW1wcy8ke3Rlc3RfbmFtZX1fc3Vi LmR1bXAiOworICAgIHN5c3RlbSgicGdfZHVtcGFsbCAiCisgICAgICAgIC4gIi1zICIKKyAgICAg ICAgLiAiLWYgIgorICAgICAgICAuICRwdWJfZHVtcCAuICIgIgorICAgICAgICAuICItLW5vLXN5 bmMgIgorICAgICAgICAuICAnLXAgJworICAgICAgICAuICRwdWJfbm9kZS0+cG9ydCkgID09IDAg b3IgZGllICJEdW1wIHB1YiBub2RlIGZhaWxlZCBpbiAke3Rlc3RfbmFtZX0iOworICAgIHN5c3Rl bSgicGdfZHVtcGFsbCAiCisgICAgICAgIC4gIi1zICIKKyAgICAgICAgLiAiLWYgIgorICAgICAg ICAuICRzdWJfZHVtcCAuICIgIgorICAgICAgICAuICItLW5vLXN5bmMgIgorICAgICAgICAuICAn LXAgJworICAgICAgICAuICRzdWJfbm9kZS0+cG9ydCkgID09IDAgb3IgZGllICJEdW1wIHN1YiBu b2RlIGZhaWxlZCBpbiAke3Rlc3RfbmFtZX0iOworCisgICAgIyBjb21wYXJlIGR1bXBlZCByZXN1 bHRzCisgICAgaXMoc3lzdGVtKCJkaWZmICIKKyAgICAuICRwdWJfZHVtcCAuICIgIgorICAgIC4g JHN1Yl9kdW1wKSwgMCwgIkR1bXBlZCByZXN1bHRzIGRpZmYgaW4gJHt0ZXN0X25hbWV9Iik7Cit9 CisKK3N1YiBpbml0X25vZGUgeworICAgIG15ICRub2RlX25hbWUgPSAkX1swXTsKKyAgICBteSAk bm9kZSA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygkbm9kZV9uYW1lKTsKKyAgICAk bm9kZS0+aW5pdDsKKyAgICAjIGluY3JlYXNlIHNvbWUgc2V0dGluZ3MgdGhhdCBDbHVzdGVyLT5u ZXcgbWFrZXMgdG9vIGxvdyBieSBkZWZhdWx0LgorICAgICRub2RlLT5hZGp1c3RfY29uZigncG9z dGdyZXNxbC5jb25mJywgJ21heF9jb25uZWN0aW9ucycsICcyNScpOworICAgICRub2RlLT5hcHBl bmRfY29uZigncG9zdGdyZXNxbC5jb25mJywKKwkJICAgJ21heF9wcmVwYXJlZF90cmFuc2FjdGlv bnMgPSAxMCcpOworICAgIHJldHVybiAkbm9kZTsKK30KKworc3ViIGluaXRfcHViX25vZGUgewor ICAgIG15ICRub2RlX25hbWUgPSAkX1swXS4iX3B1YiI7CisgICAgcmV0dXJuIGluaXRfbm9kZSgk bm9kZV9uYW1lKQorfQorCitzdWIgaW5pdF9zdWJfbm9kZSB7CisgICAgbXkgJG5vZGVfbmFtZSA9 ICRfWzBdLiJfc3ViIjsKKyAgICByZXR1cm4gaW5pdF9ub2RlKCRub2RlX25hbWUpCit9CisKK3N1 YiBjcmVhdGVfZGVwYXJzZV90ZXN0aW5nX3Jlc291cmNlc19vbl9wdWJfbm9kZSB7CisgICAgbXkg JG5vZGUgPSAkX1swXTsKKyAgICBteSAkZGJuYW1lID0gJF9bMV07CisgICAgJG5vZGUgLT4gcHNx bCgkZGJuYW1lLCBxKAorICAgICAgICBiZWdpbjsKKyAgICAgICAgQ1JFQVRFIEVYVEVOU0lPTiB0 ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3M7CisgICAgICAgIGNyZWF0ZSB0YWJsZSBkZXBhcnNlZF9k ZGxzKGlkIFNFUklBTCBQUklNQVJZIEtFWSwgdGFnIHRleHQsIG9iamVjdF9pZGVudGl0eSB0ZXh0 LCBkZGwgdGV4dCk7CisKKyAgICAgICAgY3JlYXRlIG9yIHJlcGxhY2UgZnVuY3Rpb24gZGVwYXJz ZV90b19qc29uKCkKKyAgICAgICAgICAgIHJldHVybnMgZXZlbnRfdHJpZ2dlciBsYW5ndWFnZSBw bHBnc3FsIGFzCisgICAgICAgICQkCisgICAgICAgIGRlY2xhcmUKKyAgICAgICAgICAgIHIgcmVj b3JkOworICAgICAgICBiZWdpbgorICAgICAgICAgICAgZm9yIHIgaW4gc2VsZWN0ICogZnJvbSBw Z19ldmVudF90cmlnZ2VyX2RkbF9jb21tYW5kcygpCisgICAgICAgICAgICBsb29wCisgICAgICAg ICAgICAgICAgaW5zZXJ0IGludG8gZGVwYXJzZWRfZGRscyh0YWcsIG9iamVjdF9pZGVudGl0eSwg ZGRsKSB2YWx1ZXMgKHIuY29tbWFuZF90YWcsIHIub2JqZWN0X2lkZW50aXR5LCBwZ19jYXRhbG9n LmRkbF9kZXBhcnNlX3RvX2pzb24oci5jb21tYW5kKSk7CisgICAgICAgICAgICBlbmQgbG9vcDsK KyAgICAgICAgRU5EOworICAgICAgICAkJDsKKworICAgICAgICBjcmVhdGUgb3IgcmVwbGFjZSBm dW5jdGlvbiBkZXBhcnNlX2Ryb3BzX3RvX2pzb24oKQorICAgICAgICAgICAgcmV0dXJucyBldmVu dF90cmlnZ2VyIGxhbmd1YWdlIHBscGdzcWwgYXMKKyAgICAgICAgJCQKKyAgICAgICAgZGVjbGFy ZQorICAgICAgICAgICAgciByZWNvcmQ7CisgICAgICAgIGJlZ2luCisgICAgICAgICAgICBmb3Ig ciBpbiBzZWxlY3QgKiBmcm9tIHBnX2V2ZW50X3RyaWdnZXJfZHJvcHBlZF9vYmplY3RzKCkKKyAg ICAgICAgICAgIGxvb3AKKyAgICAgICAgICAgICAgICBpbnNlcnQgaW50byBkZXBhcnNlZF9kZGxz KHRhZywgb2JqZWN0X2lkZW50aXR5LCBkZGwpIHZhbHVlcyAoci5vYmplY3RfdHlwZSwgci5vYmpl Y3RfaWRlbnRpdHksIHB1YmxpYy5kZXBhcnNlX2Ryb3BfZGRsKHIub2JqZWN0X2lkZW50aXR5LCBy Lm9iamVjdF90eXBlKSk7CisgICAgICAgICAgICBlbmQgbG9vcDsKKyAgICAgICAgRU5EOworICAg ICAgICAkJDsKKworICAgICAgICBjcmVhdGUgZXZlbnQgdHJpZ2dlciBkZGxfZGVwYXJzZV90cmln CisgICAgICAgIG9uIGRkbF9jb21tYW5kX2VuZCBleGVjdXRlIHByb2NlZHVyZSBkZXBhcnNlX3Rv X2pzb24oKTsKKworICAgICAgICBjcmVhdGUgZXZlbnQgdHJpZ2dlciBkZGxfZHJvcHNfZGVwYXJz ZV90cmlnCisgICAgICAgIG9uIHNxbF9kcm9wIGV4ZWN1dGUgcHJvY2VkdXJlIGRlcGFyc2VfZHJv cHNfdG9fanNvbigpOworCisgICAgICAgIGNvbW1pdDsKKyAgICApKTsKK30KKworc3ViIGNsZWFu X2RlcGFyc2VfdGVzdGluZ19yZXNvdXJjZXNfb25fcHViX25vZGUgeworICAgIG15ICRub2RlID0g JF9bMF07CisgICAgbXkgJGRibmFtZSA9ICRfWzFdOworICAgICMgRHJvcCB0aGUgZXZlbnQgdHJp Z2dlciBhbmQgdGhlIGZ1bmN0aW9uIGJlZm9yZSB0YWtpbmcgYSBsb2dpY2FsIGR1bXAuCisgICAg JG5vZGUgLT4gc2FmZV9wc3FsKCRkYm5hbWUscSgKKyAgICAgICAgZHJvcCBldmVudCB0cmlnZ2Vy IGRkbF9kZXBhcnNlX3RyaWc7CisgICAgICAgIGRyb3AgZXZlbnQgdHJpZ2dlciBkZGxfZHJvcHNf ZGVwYXJzZV90cmlnOworICAgICAgICBkcm9wIGZ1bmN0aW9uIGRlcGFyc2VfdG9fanNvbigpOwor ICAgICAgICBkcm9wIGZ1bmN0aW9uIGRlcGFyc2VfZHJvcHNfdG9fanNvbigpOworICAgICAgICBk cm9wIHRhYmxlIGRlcGFyc2VkX2RkbHM7CisgICAgICAgIERST1AgRVhURU5TSU9OIHRlc3RfZGRs X2RlcGFyc2VfcmVncmVzczsKKyAgICApKTsKK30KKworc3ViIHRyaW0geworICAgIG15IEBvdXQg PSBAXzsKKyAgICBmb3IgKEBvdXQpIHsKKyAgICAgICAgcy9eXHMrLy87CisgICAgICAgIHMvXHMr JC8vOworICAgIH0KKyAgICByZXR1cm4gd2FudGFycmF5ID8gQG91dCA6ICRvdXRbMF07Cit9CisK KyMgQ3JlYXRlIGFuZCBzdGFydCBwdWIgc3ViIG5vZGVzCitteSAkcHViX25vZGUgPSBpbml0X3B1 Yl9ub2RlKCJ0ZXN0Iik7CitteSAkc3ViX25vZGUgPSBpbml0X3N1Yl9ub2RlKCJ0ZXN0Iik7Citt eSAkZGJuYW1lID0gInBvc3RncmVzIjsKKyRwdWJfbm9kZSAtPiBzdGFydDsKKyRzdWJfbm9kZSAt PiBzdGFydDsKKworIyBsb2FkIHRlc3QgY2FzZXMgZnJvbSB0aGUgcmVncmVzc2lvbiB0ZXN0cwor bXkgQHJlZ3Jlc3NfdGVzdHMgPSBzcGxpdCAvXHMrLywgJEVOVntSRUdSRVNTfTsKKworZm9yZWFj aChAcmVncmVzc190ZXN0cykgeworICAgIG15ICR0ZXN0X25hbWUgPSB0cmltKCRfKTsKKyAgICAj IHNraXAgaWYgaXQncyByZWdyZXNzaW9uIHRlc3QgcHJlcGFyYXRpb24gb3IgZW1wdHkgc3RyaW5n CisgICAgaWYgKCR0ZXN0X25hbWUgZXEgIiIgb3IgJHRlc3RfbmFtZSBlcSAidGVzdF9kZGxfZGVw YXJzZSIpCisgICAgeworICAgICAgICBuZXh0OworICAgIH0KKyAgICBldmFsIHtleGVjdXRlX3Rl c3RfY2FzZSgkdGVzdF9uYW1lLCAkcHViX25vZGUsICRzdWJfbm9kZSwgJGRibmFtZSk7fTsKKyAg ICBpZiAoJEAgbmUgIiIpCisgICAgeworICAgICAgICBmYWlsKCRAKTsKKyAgICB9Cit9CitjbG9z ZTsKKworIyBDbG9zZSBub2RlcworJHB1Yl9ub2RlLT5zdG9wOworJHN1Yl9ub2RlLT5zdG9wOwor Citkb25lX3Rlc3RpbmcoKTsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxf ZGVwYXJzZV9yZWdyZXNzL3QvMDAyX3JlZ3Jlc3NfdGVzdHMucGwgYi9zcmMvdGVzdC9tb2R1bGVz L3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy90LzAwMl9yZWdyZXNzX3Rlc3RzLnBsCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhODc1YzMKLS0tIC9kZXYvbnVsbAorKysgYi9z cmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy90LzAwMl9yZWdyZXNzX3Rl c3RzLnBsCkBAIC0wLDAgKzEsMjA3IEBACit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzOwordXNl IEVudjsKK3VzZSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyOwordXNlIFBvc3RncmVTUUw6OlRl c3Q6OlV0aWxzOwordXNlIFRlc3Q6Ok1vcmU7Cit1c2UgRmlsZTo6QmFzZW5hbWU7CisKK3N1YiBl eGVjdXRlX3JlZ3Jlc3NfdGVzdCB7CisgICAgbXkgJHB1Yl9ub2RlID0gJF9bMF07CisgICAgbXkg JHN1Yl9ub2RlID0gJF9bMV07CisgICAgbXkgJGRibmFtZSA9ICJwb3N0Z3JlcyI7CisgICAgbXkg JGRscGF0aCAgICA9IGRpcm5hbWUoJEVOVntSRUdSRVNTX1NITElCfSk7CisgICAgbXkgJGlucHV0 ZGlyID0gIi4uLy4uL3JlZ3Jlc3MiOworICAgIG15ICRvdXRwdXRkaXIgPSAkUG9zdGdyZVNRTDo6 VGVzdDo6VXRpbHM6OnRtcF9jaGVjazsKKworICAgICMgc2V0IHVwIGRlcGFyc2UgdGVzdGluZyBy ZXNvdXJjZXMKKyAgICBjcmVhdGVfZGVwYXJzZV90ZXN0aW5nX3Jlc291cmNlc19vbl9wdWJfbm9k ZSgkcHViX25vZGUsICRkYm5hbWUpOworCisgICAgIyBleGVjdXRlIGNvcmUgcmVncmVzc2lvbiB0 ZXN0cyBvbiBwdWIgbm9kZQorICAgIG15ICRyZWdyZXNzX2NtZCA9ICRFTlZ7UEdfUkVHUkVTU30K KyAgICAgICAgLiAiICIKKyAgICAgICAgLiAiLS1kbHBhdGg9XCIkZGxwYXRoXCIgIgorICAgICAg ICAuICItLW1heC1jb25jdXJyZW50LXRlc3RzPTIwICIKKyAgICAgICAgLiAiLS1kYm5hbWU9Igor ICAgICAgICAuICRkYm5hbWUgLiAiICIKKyAgICAgICAgLiAiLS11c2UtZXhpc3RpbmcgIgorICAg ICAgICAuICItLWhvc3Q9IgorICAgICAgICAuICRwdWJfbm9kZS0+aG9zdCAuICIgIgorICAgICAg ICAuICItLXBvcnQ9IgorICAgICAgICAuICRwdWJfbm9kZS0+cG9ydCAuICIgIgorICAgICAgICAu ICItLWlucHV0ZGlyPSRpbnB1dGRpciAiCisgICAgICAgIC4gIi0tb3V0cHV0ZGlyPVwiJG91dHB1 dGRpclwiICIKKyAgICAgICAgLiAiLS1zY2hlZHVsZT0kaW5wdXRkaXIvcGFyYWxsZWxfc2NoZWR1 bGUiOworICAgIHByaW50ICJSZWdyZXNzaW9uIHRlc3QgY29tbWFuZCBpcyAkcmVncmVzc19jbWQi OworICAgIG15ICRyYyA9IHN5c3RlbSgkcmVncmVzc19jbWQpOworICAgIGlmICgkcmMgIT0gMCkK KyAgICB7CisgICAgICAgICMgSWYgcmVncmVzc2lvbiB0ZXN0IGZhaWxzLCBkdW1wIG91dCB0aGUg cmVncmVzc2lvbiBkaWZmcyBmaWxlCisgICAgICAgIG15ICRkaWZmcyA9ICIke291dHB1dGRpcn0v cmVncmVzc2lvbi9yZWdyZXNzaW9uLmRpZmZzIjsKKyAgICAgICAgaWYgKC1lICRkaWZmcykKKyAg ICAgICAgeworICAgICAgICAgICAgcHJpbnQgIj09PSBkdW1waW5nICRkaWZmcyA9PT1cbiI7Cisg ICAgICAgICAgICBwcmludCBzbHVycF9maWxlKCRkaWZmcyk7CisgICAgICAgICAgICBwcmludCAi PT09IEVPRiA9PT1cbiI7CisgICAgICAgIH0KKyAgICAgICAgZGllICJSZWdyZXNzaW9uIHRlc3Qg ZmFpbGVkIjsKKyAgICB9CisKKyAgICAjIFJldHJpZXZlIFNRTCBjb21tYW5kcyBnZW5lcmF0ZWQg ZnJvbSBkZXBhcnNlZCBERExzIG9uIHB1YiBub2RlCisgICAgbXkgJGRkbF9zcWwgPSAnJzsKKyAg ICAkcHViX25vZGUgLT4gcHNxbCgkZGJuYW1lLHEoCisgICAgICAgIHNlbGVjdCBkZGxfZGVwYXJz ZV9leHBhbmRfY29tbWFuZChkZGwpIHx8ICc7JyBmcm9tIGRlcGFyc2VkX2RkbHMgT1JERVIgQlkg aWQgQVNDKSwKKyAgICAgICAgc3Rkb3V0ID0+IFwkZGRsX3NxbCk7CisKKyAgICAjIEV4ZWN1dGUg U1FMIGNvbW1hbmRzIG9uIHN1YiBub2RlCisgICAgJHN1Yl9ub2RlIC0+IHBzcWwoJGRibmFtZSwg JGRkbF9zcWwpOworCisgICAgIyBDbGVhbiB1cCBkZXBhcnNlIHRlc3RpbmcgcmVzb3VyY2VzCisg ICAgY2xlYW5fZGVwYXJzZV90ZXN0aW5nX3Jlc291cmNlc19vbl9wdWJfbm9kZSgkcHViX25vZGUs ICRkYm5hbWUpOworCisgICAgIyBEdW1wIGZyb20gcHViIG5vZGUgYW5kIHN1YiBub2RlCisgICAg bWtkaXIgJHtvdXRwdXRkaXJ9LiIvZHVtcHMiLCAwNzU1OworICAgIG15ICRwdWJfZHVtcCA9ICR7 b3V0cHV0ZGlyfS4iL2R1bXBzL3JlZ3Jlc3NfcHViLmR1bXAiOworICAgIG15ICRzdWJfZHVtcCA9 ICR7b3V0cHV0ZGlyfS4iL2R1bXBzL3JlZ3Jlc3Nfc3ViLmR1bXAiOworICAgIHN5c3RlbSgicGdf ZHVtcGFsbCAiCisgICAgICAgIC4gIi1zICIKKyAgICAgICAgLiAiLWYgIgorICAgICAgICAuICRw dWJfZHVtcCAuICIgIgorICAgICAgICAuICItLW5vLXN5bmMgIgorICAgICAgICAuICAnLXAgJwor ICAgICAgICAuICRwdWJfbm9kZS0+cG9ydCkgID09IDAgb3IgZGllICJEdW1wIHB1YiBub2RlIGZh aWxlZCI7CisgICAgc3lzdGVtKCJwZ19kdW1wYWxsICIKKyAgICAgICAgLiAiLXMgIgorICAgICAg ICAuICItZiAiCisgICAgICAgIC4gJHN1Yl9kdW1wIC4gIiAiCisgICAgICAgIC4gIi0tbm8tc3lu YyAiCisgICAgICAgIC4gICctcCAnCisgICAgICAgIC4gJHN1Yl9ub2RlLT5wb3J0KSAgPT0gMCBv ciBkaWUgIkR1bXAgc3ViIG5vZGUgZmFpbGVkIjsKKworICAgICMgQ29tcGFyZSBkdW1wZWQgcmVz dWx0cworICAgIGlzKHN5c3RlbSgiZGlmZiAiCisgICAgLiAkcHViX2R1bXAgLiAiICIKKyAgICAu ICRzdWJfZHVtcCksIDAsICJDb21wYXJpbmcgZHVtcGVkIG91dHB1dCIpOworCisgICAgIyBDbG9z ZSBub2RlcworICAgICRwdWJfbm9kZS0+c3RvcDsKKyAgICAkc3ViX25vZGUtPnN0b3A7Cit9CisK K3N1YiBpbml0X25vZGUgeworICAgIG15ICRub2RlX25hbWUgPSAkX1swXTsKKyAgICBteSAkbm9k ZSA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygkbm9kZV9uYW1lKTsKKyAgICAkbm9k ZS0+aW5pdDsKKyAgICAjIGluY3JlYXNlIHNvbWUgc2V0dGluZ3MgdGhhdCBDbHVzdGVyLT5uZXcg bWFrZXMgdG9vIGxvdyBieSBkZWZhdWx0LgorICAgICRub2RlLT5hZGp1c3RfY29uZigncG9zdGdy ZXNxbC5jb25mJywgJ21heF9jb25uZWN0aW9ucycsICcyNScpOworICAgICRub2RlLT5hcHBlbmRf Y29uZigncG9zdGdyZXNxbC5jb25mJywKKwkJICAgJ21heF9wcmVwYXJlZF90cmFuc2FjdGlvbnMg PSAxMCcpOworICAgIHJldHVybiAkbm9kZTsKK30KKworc3ViIGluaXRfcHViX25vZGUgeworICAg IG15ICRub2RlX25hbWUgPSAkX1swXS4iX3B1YiI7CisgICAgcmV0dXJuIGluaXRfbm9kZSgkbm9k ZV9uYW1lKQorfQorCitzdWIgaW5pdF9zdWJfbm9kZSB7CisgICAgbXkgJG5vZGVfbmFtZSA9ICRf WzBdLiJfc3ViIjsKKyAgICByZXR1cm4gaW5pdF9ub2RlKCRub2RlX25hbWUpCit9CisKK3N1YiBj cmVhdGVfZGVwYXJzZV90ZXN0aW5nX3Jlc291cmNlc19vbl9wdWJfbm9kZSB7CisgICAgbXkgJG5v ZGUgPSAkX1swXTsKKyAgICBteSAkZGJuYW1lID0gJF9bMV07CisgICAgJG5vZGUgLT4gcHNxbCgk ZGJuYW1lLCBxKAorICAgICAgICBiZWdpbjsKKyAgICAgICAgQ1JFQVRFIEVYVEVOU0lPTiB0ZXN0 X2RkbF9kZXBhcnNlX3JlZ3Jlc3M7CisgICAgICAgIGNyZWF0ZSB0YWJsZSBkZXBhcnNlZF9kZGxz KGlkIFNFUklBTCBQUklNQVJZIEtFWSwgdGFnIHRleHQsIG9iamVjdF9pZGVudGl0eSB0ZXh0LCBk ZGwgdGV4dCk7CisgICAgICAgIGNyZWF0ZSBvciByZXBsYWNlIGZ1bmN0aW9uIGRlcGFyc2VfdG9f anNvbigpCisgICAgICAgICAgICByZXR1cm5zIGV2ZW50X3RyaWdnZXIgbGFuZ3VhZ2UgcGxwZ3Nx bCBhcworICAgICAgICAkJAorICAgICAgICBkZWNsYXJlCisgICAgICAgICAgICByIHJlY29yZDsK KyAgICAgICAgYmVnaW4KKyAgICAgICAgICAgIGZvciByIGluIHNlbGVjdCAqIGZyb20gcGdfZXZl bnRfdHJpZ2dlcl9kZGxfY29tbWFuZHMoKQorICAgICAgICAgICAgbG9vcAorICAgICAgICAgICAg ICAgIGluc2VydCBpbnRvIGRlcGFyc2VkX2RkbHModGFnLCBvYmplY3RfaWRlbnRpdHksIGRkbCkg dmFsdWVzIChyLmNvbW1hbmRfdGFnLCByLm9iamVjdF9pZGVudGl0eSwgcGdfY2F0YWxvZy5kZGxf ZGVwYXJzZV90b19qc29uKHIuY29tbWFuZCkpOworICAgICAgICAgICAgZW5kIGxvb3A7CisgICAg ICAgIEVORDsKKyAgICAgICAgJCQ7CisgICAgICAgIGNyZWF0ZSBvciByZXBsYWNlIGZ1bmN0aW9u IGRlcGFyc2VfZHJvcHNfdG9fanNvbigpCisgICAgICAgICAgICByZXR1cm5zIGV2ZW50X3RyaWdn ZXIgbGFuZ3VhZ2UgcGxwZ3NxbCBhcworICAgICAgICAkJAorICAgICAgICBkZWNsYXJlCisgICAg ICAgICAgICByIHJlY29yZDsKKyAgICAgICAgYmVnaW4KKyAgICAgICAgICAgIGZvciByIGluIHNl bGVjdCAqIGZyb20gcGdfZXZlbnRfdHJpZ2dlcl9kcm9wcGVkX29iamVjdHMoKQorICAgICAgICAg ICAgbG9vcAorICAgICAgICAgICAgICAgIGluc2VydCBpbnRvIGRlcGFyc2VkX2RkbHModGFnLCBv YmplY3RfaWRlbnRpdHksIGRkbCkgdmFsdWVzIChyLm9iamVjdF90eXBlLCByLm9iamVjdF9pZGVu dGl0eSwgcHVibGljLmRlcGFyc2VfZHJvcF9kZGwoci5vYmplY3RfaWRlbnRpdHksIHIub2JqZWN0 X3R5cGUpKTsKKyAgICAgICAgICAgIGVuZCBsb29wOworICAgICAgICBFTkQ7CisgICAgICAgICQk OworICAgICAgICBjcmVhdGUgZXZlbnQgdHJpZ2dlciBkZGxfZGVwYXJzZV90cmlnCisgICAgICAg IG9uIGRkbF9jb21tYW5kX2VuZCBleGVjdXRlIHByb2NlZHVyZSBkZXBhcnNlX3RvX2pzb24oKTsK KyAgICAgICAgY3JlYXRlIGV2ZW50IHRyaWdnZXIgZGRsX2Ryb3BzX2RlcGFyc2VfdHJpZworICAg ICAgICBvbiBzcWxfZHJvcCBleGVjdXRlIHByb2NlZHVyZSBkZXBhcnNlX2Ryb3BzX3RvX2pzb24o KTsKKyAgICAgICAgY29tbWl0OworICAgICkpOworfQorCitzdWIgY2xlYW5fZGVwYXJzZV90ZXN0 aW5nX3Jlc291cmNlc19vbl9wdWJfbm9kZSB7CisgICAgbXkgJG5vZGUgPSAkX1swXTsKKyAgICBt eSAkZGJuYW1lID0gJF9bMV07CisgICAgIyBEcm9wIHRoZSBldmVudCB0cmlnZ2VyIGFuZCB0aGUg ZnVuY3Rpb24gYmVmb3JlIHRha2luZyBhIGxvZ2ljYWwgZHVtcC4KKyAgICAkbm9kZSAtPiBzYWZl X3BzcWwoJGRibmFtZSxxKAorICAgICAgICBkcm9wIGV2ZW50IHRyaWdnZXIgZGRsX2RlcGFyc2Vf dHJpZzsKKyAgICAgICAgZHJvcCBldmVudCB0cmlnZ2VyIGRkbF9kcm9wc19kZXBhcnNlX3RyaWc7 CisgICAgICAgIGRyb3AgZnVuY3Rpb24gZGVwYXJzZV90b19qc29uKCk7CisgICAgICAgIGRyb3Ag ZnVuY3Rpb24gZGVwYXJzZV9kcm9wc190b19qc29uKCk7CisgICAgICAgIGRyb3AgdGFibGUgZGVw YXJzZWRfZGRsczsKKyAgICAgICAgRFJPUCBFWFRFTlNJT04gdGVzdF9kZGxfZGVwYXJzZV9yZWdy ZXNzOworICAgICkpOworfQorCitzdWIgdHJpbSB7CisgICAgbXkgQG91dCA9IEBfOworICAgIGZv ciAoQG91dCkgeworICAgICAgICBzL15ccysvLzsKKyAgICAgICAgcy9ccyskLy87CisgICAgfQor ICAgIHJldHVybiB3YW50YXJyYXkgPyBAb3V0IDogJG91dFswXTsKK30KKworIyBDcmVhdGUgYW5k IHN0YXJ0IHB1YiBzdWIgbm9kZXMKK215ICRwdWJfbm9kZSA9IGluaXRfcHViX25vZGUoInJlZ3Jl c3MiKTsKK215ICRzdWJfbm9kZSA9IGluaXRfc3ViX25vZGUoInJlZ3Jlc3MiKTsKKyRwdWJfbm9k ZSAtPiBzdGFydDsKKyRzdWJfbm9kZSAtPiBzdGFydDsKKworIyBDb21tZW50IHRoZSBleGVjdXRp b24gdGVtcG9yYXJpbHksIGFuIGVycm9yIGluIGRkbF9kZXBhcnNlLmMgd2lsbCBjYXVzZSB0aGUg ZGF0YWJhc2UgZXhpdHMgYWJub3JtYWxseSwgZXJyb3Igc2lnbmF0dXJlOgorIworIyAyMDIyLTEy LTAzIDIzOjAyOjQ0Ljc3OCBVVEMgWzEyOTEwMl0gcGdfcmVncmVzcy90YWJsZXNwYWNlIExPRzog IHN0YXRlbWVudDogQUxURVIgVEFCTEUgQUxMIElOIFRBQkxFU1BBQ0UgcmVncmVzc190YmxzcGFj ZV9yZW5hbWVkIFNFVCBUQUJMRVNQQUNFIHBnX2RlZmF1bHQ7CisjIFRSQVA6IGZhaWxlZCBBc3Nl cnQoIklzQShzdG10LCBBbHRlclRhYmxlU3RtdCkiKSwgRmlsZTogImRkbF9kZXBhcnNlLmMiLCBM aW5lOiAzMzcxLCBQSUQ6IDEyOTEwMgorIyBwb3N0Z3JlczogcmVncmVzc19wdWI6IHJ1bnFpIHBv c3RncmVzIFtsb2NhbF0gQUxURVIgVEFCTEUoRXhjZXB0aW9uYWxDb25kaXRpb24rMHhiYilbMHg1 NjNiZDZlYTViMGRdCisjIC4uLgorIyAvbGliL3g4Nl82NC1saW51eC1nbnUvbGliYy5zby42KCsw eDI5ZDkwKVsweDdmZDZhNzRhNmQ5MF0KKyMgL2xpYi94ODZfNjQtbGludXgtZ251L2xpYmMuc28u NihfX2xpYmNfc3RhcnRfbWFpbisweDgwKVsweDdmZDZhNzRhNmU0MF0KKyMgcG9zdGdyZXM6IHJl Z3Jlc3NfcHViOiBydW5xaSBwb3N0Z3JlcyBbbG9jYWxdIEFMVEVSIFRBQkxFKF9zdGFydCsweDI1 KVsweDU2M2JkNjcyZjFlNV0KKyMgMjAyMi0xMi0wMyAyMzowMjo0NC44NTAgVVRDIFsxMjkwNThd IExPRzogIHNlcnZlciBwcm9jZXNzIChQSUQgMTI5MTAyKSB3YXMgdGVybWluYXRlZCBieSBzaWdu YWwgNjogQWJvcnRlZAorIyAyMDIyLTEyLTAzIDIzOjAyOjQ0Ljg1MCBVVEMgWzEyOTA1OF0gREVU QUlMOiAgRmFpbGVkIHByb2Nlc3Mgd2FzIHJ1bm5pbmc6IEFMVEVSIFRBQkxFIEFMTCBJTiBUQUJM RVNQQUNFIHJlZ3Jlc3NfdGJsc3BhY2VfcmVuYW1lZCBTRVQgVEFCTEVTUEFDRSBwZ19kZWZhdWx0 OworIyAyMDIyLTEyLTAzIDIzOjAyOjQ0Ljg1MCBVVEMgWzEyOTA1OF0gTE9HOiAgdGVybWluYXRp bmcgYW55IG90aGVyIGFjdGl2ZSBzZXJ2ZXIgcHJvY2Vzc2VzCisjIDIwMjItMTItMDMgMjM6MDI6 NDQuODUxIFVUQyBbMTI5MDU4XSBMT0c6ICBzaHV0dGluZyBkb3duIGJlY2F1c2UgcmVzdGFydF9h ZnRlcl9jcmFzaCBpcyBvZmYKKyMgMjAyMi0xMi0wMyAyMzowMjo0NC44NTIgVVRDIFsxMjkwNThd IExPRzogIGRhdGFiYXNlIHN5c3RlbSBpcyBzaHV0IGRvd24KKworIyBldmFsIHtleGVjdXRlX3Jl Z3Jlc3NfdGVzdCgkcHViX25vZGUsICRzdWJfbm9kZSk7fTsKKyMgaWYgKCRAIG5lICIiKQorIyB7 CisjICAgICBmYWlsKCRAKTsKKyMgfQorCisjIENsb3NlIG5vZGVzCiskcHViX25vZGUtPnN0b3A7 Ciskc3ViX25vZGUtPnN0b3A7CisKK3Bhc3MoInJlZ3Jlc3NzaW9uIHRlc3QgcGFzc2VkIik7CisK K2RvbmVfdGVzdGluZygpOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBh L3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL3Rlc3RfZGRsX2RlcGFy c2VfcmVncmVzcy0tMS4wLnNxbCBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9y ZWdyZXNzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy0tMS4wLnNxbApuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwLi4xNDA3MGNkCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3Qv bW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNz LS0xLjAuc3FsCkBAIC0wLDAgKzEsOSBAQAorLyogc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9k ZXBhcnNlX3JlZ3Jlc3MvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzLS0xLjAuc3FsICovCisKKy0t IGNvbXBsYWluIGlmIHNjcmlwdCBpcyBzb3VyY2VkIGluIHBzcWwsIHJhdGhlciB0aGFuIHZpYSBD UkVBVEUgRVhURU5TSU9OCitcZWNobyBVc2UgIkNSRUFURSBFWFRFTlNJT04gdGVzdF9kZGxfZGVw YXJzZV9yZWdyZXNzIiB0byBsb2FkIHRoaXMgZmlsZS4gXHF1aXQKKworQ1JFQVRFIEZVTkNUSU9O IGRlcGFyc2VfZHJvcF9kZGwoSU4gb2JqaWRlbnRpdHkgdGV4dCwKKyAgICBJTiBvYmplY3R0eXBl IHRleHQpCisgIFJFVFVSTlMgdGV4dCBJTU1VVEFCTEUgU1RSSUNUCisgIEFTICdNT0RVTEVfUEFU SE5BTUUnIExBTkdVQUdFIEM7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0 IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvdGVzdF9kZGxfZGVw YXJzZV9yZWdyZXNzLmMgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVz cy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwLi5iZDY5OTJiCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0 X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzLmMKQEAgLTAsMCAr MSw1OSBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiB0ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MuYwor ICoJCVN1cHBvcnQgZnVuY3Rpb25zIGZvciB0aGUgdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzIG1v ZHVsZQorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIyLCBQb3N0Z3JlU1FMIEdsb2JhbCBE ZXZlbG9wbWVudCBHcm91cAorICoKKyAqIElERU5USUZJQ0FUSU9OCisgKgkgIHNyYy90ZXN0L21v ZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy5j CisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2luY2x1ZGUgInBvc3RncmVzLmgiCisKKyNpbmNsdWRl ICJjYXRhbG9nL3BnX3R5cGUuaCIKKyNpbmNsdWRlICJmdW5jYXBpLmgiCisjaW5jbHVkZSAibm9k ZXMvZXhlY25vZGVzLmgiCisjaW5jbHVkZSAidGNvcC9kZXBhcnNlX3V0aWxpdHkuaCIKKyNpbmNs dWRlICJ0Y29wL3V0aWxpdHkuaCIKKyNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgorI2luY2x1 ZGUgInRjb3AvZGRsX2RlcGFyc2UuaCIKKworUEdfTU9EVUxFX01BR0lDOworCitQR19GVU5DVElP Tl9JTkZPX1YxKGRlcGFyc2VfZHJvcF9kZGwpOworCisvKgorICogR2l2ZW4gb2JqZWN0X2lkZW50 aXR5IGFuZCBvYmplY3RfdHlwZSBvZiBkcm9wcGVkIG9iamVjdCwgcmV0dXJuIGEgSlNPTiByZXBy ZXNlbnRhdGlvbiBvZiBEUk9QIGNvbW1hbmQuCisgKi8KK0RhdHVtCitkZXBhcnNlX2Ryb3BfZGRs KFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJdGV4dAkgICAqb2JqaWRlbnRpdHkgPSBQR19HRVRBUkdf VEVYVF9QKDApOworCWNvbnN0IGNoYXIJICAgKm9iamlkZW50aXR5X3N0ciA9IHRleHRfdG9fY3N0 cmluZyhvYmppZGVudGl0eSk7CisJdGV4dAkgICAqb2JqZWN0dHlwZSA9IFBHX0dFVEFSR19URVhU X1AoMSk7CisJY29uc3QgY2hhcgkgICAqb2JqZWN0dHlwZV9zdHIgPSB0ZXh0X3RvX2NzdHJpbmco b2JqZWN0dHlwZSk7CisKKwljaGFyCQkgICAqY29tbWFuZDsKKworCS8vIGNvbnN0cmFpbnQgaXMg cGFydCBvZiBhbHRlciB0YWJsZSBjb21tYW5kLCBubyBuZWVkIHRvIGRyb3AgaW4gRFJPUCBjb21t YW5kCisJaWYgKHN0cmNtcChvYmplY3R0eXBlX3N0ciwgInRhYmxlIGNvbnN0cmFpbnQiKSA9PSAw KSB7CisJCVBHX1JFVFVSTl9OVUxMKCk7CisJfSBlbHNlIGlmIChzdHJjbXAob2JqZWN0dHlwZV9z dHIsICJ0b2FzdCB0YWJsZSIpID09IDApIHsKKwkJb2JqZWN0dHlwZV9zdHIgPSAidGFibGUiOwor CX0gIGVsc2UgaWYgKHN0cmNtcChvYmplY3R0eXBlX3N0ciwgImRlZmF1bHQgdmFsdWUiKSA9PSAw KSB7CisJCVBHX1JFVFVSTl9OVUxMKCk7CisJfSBlbHNlIGlmIChzdHJjbXAob2JqZWN0dHlwZV9z dHIsICJvcGVyYXRvciBvZiBhY2Nlc3MgbWV0aG9kIikgPT0gMCkgeworCQlQR19SRVRVUk5fTlVM TCgpOworCX0gZWxzZSBpZiAoc3RyY21wKG9iamVjdHR5cGVfc3RyLCAiZnVuY3Rpb24gb2YgYWNj ZXNzIG1ldGhvZCIpID09IDApIHsKKwkJUEdfUkVUVVJOX05VTEwoKTsKKwl9IGVsc2UgaWYgKHN0 cmNtcChvYmplY3R0eXBlX3N0ciwgInRhYmxlIGNvbHVtbiIpID09IDApIHsKKwkJUEdfUkVUVVJO X05VTEwoKTsKKwl9CisKKwljb21tYW5kID0gZGVwYXJzZV9kcm9wX2NvbW1hbmQob2JqaWRlbnRp dHlfc3RyLCBvYmplY3R0eXBlX3N0ciwgRFJPUF9DQVNDQURFKTsKKworCWlmIChjb21tYW5kKQor CQlQR19SRVRVUk5fVEVYVF9QKGNzdHJpbmdfdG9fdGV4dChjb21tYW5kKSk7CisKKwlQR19SRVRV Uk5fTlVMTCgpOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Ny Yy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL3Rlc3RfZGRsX2RlcGFyc2Vf cmVncmVzcy5jb250cm9sIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jl c3MvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzLmNvbnRyb2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMC4uYTFmOTM0ZQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L21vZHVs ZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy5jb250 cm9sCkBAIC0wLDAgKzEsNCBAQAorY29tbWVudCA9ICdUZXN0IGNvZGUgZm9yIERETCBkZXBhcnNl IHJlZ3Jlc3MgZmVhdHVyZScKK2RlZmF1bHRfdmVyc2lvbiA9ICcxLjAnCittb2R1bGVfcGF0aG5h bWUgPSAnJGxpYmRpci90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MnCityZWxvY2F0YWJsZSA9IHRy dWUKLS0gCjEuOC4zLjEKCg== --000000000000d6784f05f261a2df Content-Type: application/octet-stream; name="v62-0003-Support-DDL-deparse-of-the-rest-commands.patch" Content-Disposition: attachment; filename="v62-0003-Support-DDL-deparse-of-the-rest-commands.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lcyuikh82 RnJvbSAyNjkwZmYzMDU5NzZiMmYzOTk2M2ZkNGM1ZDk2MzFkY2Y4YWYxY2VkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBamluIENoZXJpYW4gPGFqaW5jQGZhc3QuYXUuZnVqaXRzdS5j b20+CkRhdGU6IE1vbiwgMTYgSmFuIDIwMjMgMDc6NDg6MzkgLTA1MDAKU3ViamVjdDogW1BBVENI IHY2MiAzLzddIFN1cHBvcnQgRERMIGRlcGFyc2Ugb2YgdGhlIHJlc3QgY29tbWFuZHMuCgogICAg Q1JFQVRFL0RST1AgQUNDRVNTIE1FVEhPRAogICAgQ1JFQVRFL0FMVEVSL0RST1AgQUdHUkVHQVRF CiAgICBDUkVBVEUvQUxURVIvRFJPUCBDQVNUCiAgICBDUkVBVEUvQUxURVIvRFJPUCBDT0xMQVRJ T04KICAgIENPTU1FTlQKICAgIENSRUFURS9BTFRFUi9EUk9QIENPTlZFUlNJT04KICAgIEFMVEVS IERFRkFVTFQgUFJJVklMRUdFUwogICAgQ1JFQVRFL0FMVEVSL0RST1AgRE9NQUlOCiAgICBDUkVB VEUvQUxURVIvRFJPUCBFWFRFTlNJT04KICAgIENSRUFURS9BTFRFUi9EUk9QIEZPUkVJR04gREFU QSBXUkFQUEVSCiAgICBDUkVBVEUvQUxURVIvRFJPUCBGT1JFSUdOIFRBQkxFCiAgICBDUkVBVEUv QUxURVIgRlVOQ1RJT04vUFJPQ0VEVVJFCiAgICBHUkFOVAogICAgQ1JFQVRFL0RST1AgSU5ERVgK ICAgIENSRUFURS9BTFRFUi9EUk9QIExBTkdVQUdFCiAgICBDUkVBVEUvQUxURVIvRFJPUCBNQVRF UklBTElaRUQgVklFVwogICAgQ1JFQVRFL0RST1AgT1BFUkFUT1IgW0NMQVNTL0ZBTUlMWV0KICAg IENSRUFURS9BTFRFUi9EUk9QIFBVQkxJQ0FUSU9OCiAgICBDUkVBVEUvQUxURVIvRFJPUCBQT0xJ Q1kKICAgIFJFRlJFU0ggTUFURVJJQUxJWkVEIFZJRVcKICAgIFJFVk9LRQogICAgQUxURVIvRFJP UCBST1VUSU5FCiAgICBDUkVBVEUvQUxURVIvRFJPUCBSVUxFCiAgICBDUkVBVEUvQUxURVIvRFJP UCBTQ0hFTUEKICAgIFNFQ1VSSVRZIExBQkVMCiAgICBDUkVBVEUvQUxURVIvRFJPUCBTRVFVRU5D RQogICAgQ1JFQVRFL0FMVEVSL0RST1AgU0VSVkVSCiAgICBDUkVBVEUvQUxURVIvRFJPUCBTVEFU SVNUSUNTCiAgICBDUkVBVEUvQUxURVIvRFJPUCBURVhUIFNFQVJDSCBDT05GSUdVUkFUSU9OL1BB UlNFUi9ESUNUSU9OQVJZL1RFTVBMQVRFCiAgICBDUkVBVEUvRFJPUCBUUkFOU0ZPUk0KICAgIENS RUFURS9BTFRFUiBUUklHR0VSCiAgICBDUkVBVEUvQUxURVIvRFJPUCBUWVBFCiAgICBDUkVBVEUv QUxURVIvRFJPUCBVU0VSIE1BUFBJTkcKICAgIENSRUFURS9BTFRFUi9EUk9QIFZJRVcgLS0gTm90 ZSAjNAoKKE5vdGUgIzMpIFJlbW92ZWQgYW4gdW5kZXNpcmFibGUgJ29uJyBmcm9tIHRoZSBpZGVu dGl0eSBzdHJpbmcgZm9yIFRSQU5TRk9STQppbiBnZXRPYmplY3RJZGVudGl0eVBhcnRzLiBUaGlz IGlzIG5lZWRlZCB0byBtYWtlIGRlcGFyc2Ugb2YgRFJPUApUUkFOU0ZPUk0gY29tbWFuZCB3b3Jr IHNpbmNlICdvbicgaXMgbm90IHByZXNlbnQgaW4gdGhlIGN1cnJlbnQKRFJPUCBUUkFOU0ZPUk0g c3ludGF4LiBGb3IgZXhhbXBsZSwgdGhlIGNvcnJlY3Qgc3ludGF4IGlzCkRST1AgVFJBTlNGT1JN IHRyZiBGT1IgSU5UIExBTkdVQUdFIFNRTDsKaW5zdGVhZCBvZiBEUk9QIFRSQU5TRk9STSB0cmYg Rk9SIElOVCBPTiBMQU5HVUFHRSBTUUw7CgooTm90ZSAjNCkgRm9yIFZJRVdTVE1ULCB3ZSBjcmVh dGVkIHBnX2dldF92aWV3ZGVmX2ludGVybmFsIHRvIGdldCB0aGUKU0VMRUNUIHF1ZXJ5IG9mIHRo ZSBwZW5kaW5nIFZJRVdTVE1ULiBJbiB0aGUgY2FzZSB0aGF0IHRoZSBDUkVBVEUgVklFVyBjb21t YW5kCmlzIHN0aWxsIGluIHByb2dyZXNzLCB3ZSB3b3VsZCBuZWVkIHRvIHNlYXJjaCB0aGUgc3lz dGVtIGNhY2hlIFJVTEVSRUxOQU1FIHRvIGdldCB0aGUKcmV3cml0ZSBydWxlIG9mIHRoZSB2aWV3 IGFzIG9wcG9zZSB0byBxdWVyeWluZyBwZ19yZXdyaXRlIGFzIGluIHBnX2dldF92aWV3ZGVmX3dv cmtlcigpLAp0aGUgbGF0dGVyIHdpbGwgcmV0dXJuIGVtcHR5IHJlc3VsdC4KLS0tCiBzcmMvYmFj a2VuZC9jb21tYW5kcy9kZGxfZGVwYXJzZS5jIHwgNjM5NCArKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKy0KIHNyYy9pbmNsdWRlL3Rjb3AvZGRsX2RlcGFyc2UuaCAgICAgfCAgIDEw ICsKIHNyYy9pbmNsdWRlL3Rjb3AvZGVwYXJzZV91dGlsaXR5LmggfCAgIDIwICstCiAzIGZpbGVz IGNoYW5nZWQsIDYzNjIgaW5zZXJ0aW9ucygrKSwgNjIgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvZGRsX2RlcGFyc2UuYyBiL3NyYy9iYWNrZW5kL2NvbW1h bmRzL2RkbF9kZXBhcnNlLmMKaW5kZXggODk2OGM4My4uMDkyMzEzNSAxMDA3NTUKLS0tIGEvc3Jj L2JhY2tlbmQvY29tbWFuZHMvZGRsX2RlcGFyc2UuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5k cy9kZGxfZGVwYXJzZS5jCkBAIC0xNTEsNiArMTUxLDcgQEAgYm9vbAkJdmVyYm9zZSA9IHRydWU7 CiAKIHN0YXRpYyB2b2lkIGFwcGVuZF9hcnJheV9vYmplY3QoT2JqVHJlZSAqdHJlZSwgY2hhciAq c3ViX2ZtdCwgTGlzdCAqYXJyYXkpOwogc3RhdGljIHZvaWQgYXBwZW5kX2Jvb2xfb2JqZWN0KE9i alRyZWUgKnRyZWUsIGNoYXIgKnN1Yl9mbXQsIGJvb2wgdmFsdWUpOworc3RhdGljIHZvaWQgYXBw ZW5kX2Zsb2F0X29iamVjdChPYmpUcmVlICp0cmVlLCBjaGFyICpzdWJfZm10LCBmbG9hdDggdmFs dWUpOwogc3RhdGljIHZvaWQgYXBwZW5kX251bGxfb2JqZWN0KE9ialRyZWUgKnRyZWUsIGNoYXIg KnN1Yl9mbXQpOwogc3RhdGljIHZvaWQgYXBwZW5kX29iamVjdF9vYmplY3QoT2JqVHJlZSAqdHJl ZSwgY2hhciAqc3ViX2ZtdCwgT2JqVHJlZSAqdmFsdWUpOwogc3RhdGljIGNoYXIgKmFwcGVuZF9v YmplY3RfdG9fZm9ybWF0X3N0cmluZyhPYmpUcmVlICp0cmVlLCBjaGFyICpzdWJfZm10KTsKQEAg LTE2MCwxMCArMTYxLDE0IEBAIHN0YXRpYyB2b2lkIGFwcGVuZF9zdHJpbmdfb2JqZWN0KE9ialRy ZWUgKnRyZWUsIGNoYXIgKnN1Yl9mbXQsIGNoYXIgKm5hbWUsCiBzdGF0aWMgdm9pZCBmb3JtYXRf dHlwZV9kZXRhaWxlZChPaWQgdHlwZV9vaWQsIGludDMyIHR5cGVtb2QsCiAJCQkJCQkJCSBPaWQg Km5zcGlkLCBjaGFyICoqdHlwbmFtZSwgY2hhciAqKnR5cGVtb2RzdHIsCiAJCQkJCQkJCSBib29s ICp0eXBhcnJheSk7CitzdGF0aWMgTGlzdCAqRnVuY3Rpb25HZXREZWZhdWx0cyh0ZXh0ICpwcm9h cmdkZWZhdWx0cyk7CiBzdGF0aWMgT2JqRWxlbSAqbmV3X29iamVjdChPYmpUeXBlIHR5cGUsIGNo YXIgKm5hbWUpOwogc3RhdGljIE9ialRyZWUgKm5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChP aWQgY2xhc3NJZCwgT2lkIG9iamVjdElkKTsKK3N0YXRpYyBPYmpUcmVlICpuZXdfb2JqdHJlZV9m b3Jfcm9sZXNwZWMoUm9sZVNwZWMgKnNwZWMpOwogc3RhdGljIE9iakVsZW0gKm5ld19vYmplY3Rf b2JqZWN0KE9ialRyZWUgKnZhbHVlKTsKIHN0YXRpYyBPYmpUcmVlICpuZXdfb2JqdHJlZV9WQShj aGFyICpmbXQsIGludCBudW1vYmpzLC4uLik7CitzdGF0aWMgT2JqVHJlZSAqbmV3X29ianRyZWUo Y2hhciAqZm10KTsKK3N0YXRpYyBPYmpFbGVtICpuZXdfc3RyaW5nX29iamVjdChjaGFyICp2YWx1 ZSk7CiBzdGF0aWMgSnNvbmJWYWx1ZSAqb2JqdHJlZV90b19qc29uYl9yZWMoT2JqVHJlZSAqdHJl ZSwgSnNvbmJQYXJzZVN0YXRlICpzdGF0ZSk7CiBzdGF0aWMgdm9pZCBwZ19nZXRfaW5kZXhkZWZf ZGV0YWlsZWQoT2lkIGluZGV4cmVsaWQsCiAJCQkJCQkJCQkgY2hhciAqKmluZGV4X2FtLApAQCAt MTc4LDggKzE4MywxOCBAQCBzdGF0aWMgT2JqVHJlZSAqZGVwYXJzZV9Db2x1bW5EZWYoUmVsYXRp b24gcmVsYXRpb24sIExpc3QgKmRwY29udGV4dCwgYm9vbCBjb21wbwogCQkJCQkJCQkgIENvbHVt bkRlZiAqY29sZGVmLCBib29sIGlzX2FsdGVyLCBMaXN0ICoqZXhwcnMpOwogc3RhdGljIE9ialRy ZWUgKmRlcGFyc2VfQ29sdW1uSWRlbnRpdHkoT2lkIHNlcXJlbGlkLCBjaGFyIGlkZW50aXR5LCBi b29sIGFsdGVyX3RhYmxlKTsKIHN0YXRpYyBPYmpUcmVlICpkZXBhcnNlX0NvbHVtblNldE9wdGlv bnMoQWx0ZXJUYWJsZUNtZCAqc3ViY21kKTsKK3N0YXRpYyBPYmpUcmVlICpkZXBhcnNlX0RlZmlu ZVN0bXRfQWdncmVnYXRlKE9pZCBvYmplY3RJZCwgRGVmaW5lU3RtdCAqZGVmaW5lKTsKK3N0YXRp YyBPYmpUcmVlICpkZXBhcnNlX0RlZmluZVN0bXRfQ29sbGF0aW9uKE9pZCBvYmplY3RJZCwgRGVm aW5lU3RtdCAqZGVmaW5lLAorCQkJCQkJCQkJCQkgT2JqZWN0QWRkcmVzcyBmcm9tQ29sbGlkKTsK K3N0YXRpYyBPYmpUcmVlICpkZXBhcnNlX0RlZmluZVN0bXRfT3BlcmF0b3IoT2lkIG9iamVjdElk LCBEZWZpbmVTdG10ICpkZWZpbmUpOworc3RhdGljIE9ialRyZWUgKmRlcGFyc2VfRGVmaW5lU3Rt dF9UeXBlKE9pZCBvYmplY3RJZCwgRGVmaW5lU3RtdCAqZGVmaW5lKTsKK3N0YXRpYyBPYmpUcmVl ICpkZXBhcnNlX0RlZmluZVN0bXRfVFNDb25maWcoT2lkIG9iamVjdElkLCBEZWZpbmVTdG10ICpk ZWZpbmUsIE9iamVjdEFkZHJlc3MgY29waWVkKTsKK3N0YXRpYyBPYmpUcmVlICpkZXBhcnNlX0Rl ZmluZVN0bXRfVFNQYXJzZXIoT2lkIG9iamVjdElkLCBEZWZpbmVTdG10ICpkZWZpbmUpOworc3Rh dGljIE9ialRyZWUgKmRlcGFyc2VfRGVmaW5lU3RtdF9UU0RpY3Rpb25hcnkoT2lkIG9iamVjdElk LCBEZWZpbmVTdG10ICpkZWZpbmUpOworc3RhdGljIE9ialRyZWUgKmRlcGFyc2VfRGVmaW5lU3Rt dF9UU1RlbXBsYXRlKE9pZCBvYmplY3RJZCwgRGVmaW5lU3RtdCAqZGVmaW5lKTsKIAogc3RhdGlj IE9ialRyZWUgKmRlcGFyc2VfRGVmRWxlbShEZWZFbGVtICplbGVtLCBib29sIGlzX3Jlc2V0KTsK K3N0YXRpYyBPYmpUcmVlICpkZXBhcnNlX0Z1bmN0aW9uU2V0KFZhcmlhYmxlU2V0S2luZCBraW5k LCBjaGFyICpuYW1lLCBjaGFyICp2YWx1ZSk7CiBzdGF0aWMgT2JqVHJlZSAqZGVwYXJzZV9PbkNv bW1pdENsYXVzZShPbkNvbW1pdEFjdGlvbiBvcHRpb24pOwogc3RhdGljIE9ialRyZWUgKmRlcGFy c2VfUmVsU2V0T3B0aW9ucyhBbHRlclRhYmxlQ21kICpzdWJjbWQpOwogCkBAIC0xODgsNiArMjAz LDcgQEAgc3RhdGljIGlubGluZSBPYmpFbGVtICpkZXBhcnNlX1NlcV9DeWNsZShGb3JtX3BnX3Nl cXVlbmNlIHNlcWRhdGEsIGJvb2wgYWx0ZXJfdGEKIHN0YXRpYyBpbmxpbmUgT2JqRWxlbSAqZGVw YXJzZV9TZXFfSW5jcmVtZW50QnkoRm9ybV9wZ19zZXF1ZW5jZSBzZXFkYXRhLCBib29sIGFsdGVy X3RhYmxlKTsKIHN0YXRpYyBpbmxpbmUgT2JqRWxlbSAqZGVwYXJzZV9TZXFfTWludmFsdWUoRm9y bV9wZ19zZXF1ZW5jZSBzZXFkYXRhLCBib29sIGFsdGVyX3RhYmxlKTsKIHN0YXRpYyBpbmxpbmUg T2JqRWxlbSAqZGVwYXJzZV9TZXFfTWF4dmFsdWUoRm9ybV9wZ19zZXF1ZW5jZSBzZXFkYXRhLCBi b29sIGFsdGVyX3RhYmxlKTsKK3N0YXRpYyBPYmpFbGVtICpkZXBhcnNlX1NlcV9Pd25lZEJ5KE9p ZCBzZXF1ZW5jZUlkLCBib29sIGFsdGVyX3RhYmxlKTsKIHN0YXRpYyBpbmxpbmUgT2JqRWxlbSAq ZGVwYXJzZV9TZXFfUmVzdGFydChGb3JtX3BnX3NlcXVlbmNlX2RhdGEgc2VxZGF0YSk7CiBzdGF0 aWMgaW5saW5lIE9iakVsZW0gKmRlcGFyc2VfU2VxX1N0YXJ0d2l0aChGb3JtX3BnX3NlcXVlbmNl IHNlcWRhdGEsIGJvb2wgYWx0ZXJfdGFibGUpOwogc3RhdGljIGlubGluZSBPYmpFbGVtICpkZXBh cnNlX1NlcV9BcyhEZWZFbGVtICplbGVtKTsKQEAgLTIwMyw2ICsyMTksOCBAQCBzdGF0aWMgTGlz dCAqZGVwYXJzZV9JbmhSZWxhdGlvbnMoT2lkIG9iamVjdElkKTsKIHN0YXRpYyBMaXN0ICpkZXBh cnNlX1RhYmxlRWxlbWVudHMoUmVsYXRpb24gcmVsYXRpb24sIExpc3QgKnRhYmxlRWxlbWVudHMs IExpc3QgKmRwY29udGV4dCwKIAkJCQkJCQkJICAgYm9vbCB0eXBlZCwgYm9vbCBjb21wb3NpdGUp OwogCitzdGF0aWMgY2hhciAqRG9tYWluR2V0RGVmYXVsdChIZWFwVHVwbGUgZG9tVHVwLCBib29s IG1pc3Npbmdfb2spOworCiAvKgogICogQXBwZW5kIHByZXNlbnQgYXMgZmFsc2UgdG8gYSB0cmVl LgogICovCkBAIC0yMTMsNiArMjMxLDI0IEBAIGFwcGVuZF9ub3RfcHJlc2VudChPYmpUcmVlICp0 cmVlKQogfQogCiAvKgorICogQXBwZW5kIGEgZmxvYXQ4IHBhcmFtZXRlciB0byBhIHRyZWUuCisg Ki8KK3N0YXRpYyB2b2lkCithcHBlbmRfZmxvYXRfb2JqZWN0KE9ialRyZWUgKnRyZWUsIGNoYXIg KnN1Yl9mbXQsIGZsb2F0OCB2YWx1ZSkKK3sKKwlPYmpFbGVtICAgICpwYXJhbTsKKwljaGFyCSAg ICpvYmplY3RfbmFtZTsKKworCUFzc2VydChzdWJfZm10KTsKKworCW9iamVjdF9uYW1lID0gYXBw ZW5kX29iamVjdF90b19mb3JtYXRfc3RyaW5nKHRyZWUsIHN1Yl9mbXQpOworCisJcGFyYW0gPSBu ZXdfb2JqZWN0KE9ialR5cGVGbG9hdCwgb2JqZWN0X25hbWUpOworCXBhcmFtLT52YWx1ZS5mbHQg PSB2YWx1ZTsKKwlhcHBlbmRfcHJlbWFkZV9vYmplY3QodHJlZSwgcGFyYW0pOworfQorCisvKgog ICogQXBwZW5kIGFuIGFycmF5IHBhcmFtZXRlciB0byBhIHRyZWUuCiAgKi8KIHN0YXRpYyB2b2lk CkBAIC00MjIsNiArNDU4LDM0IEBAIGFwcGVuZF9zdHJpbmdfb2JqZWN0KE9ialRyZWUgKnRyZWUs IGNoYXIgKnN1Yl9mbXQsIGNoYXIgKiBvYmplY3RfbmFtZSwKIH0KIAogLyoKKyAqIEFwcGVuZCBh IE5VTEwtb3ItcXVvdGVkLWxpdGVyYWwgY2xhdXNlLiAgVXNlZnVsIGZvciBDT01NRU5UIGFuZCBT RUNVUklUWQorICogTEFCRUwuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqICV7bnVsbH1zICV7 bGl0ZXJhbH1zCisgKi8KK3N0YXRpYyB2b2lkCithcHBlbmRfbGl0ZXJhbF9vcl9udWxsKE9ialRy ZWUgKnBhcmVudCwgY2hhciAqZWxlbW5hbWUsIGNoYXIgKnZhbHVlKQoreworCU9ialRyZWUgICAg KnRvcDsKKwlPYmpUcmVlICAgICpwYXJ0OworCisJdG9wID0gbmV3X29ianRyZWUoIiIpOworCXBh cnQgPSBuZXdfb2JqdHJlZV9WQSgiTlVMTCIsIDEsCisJCQkJCQkgICJwcmVzZW50IiwgT2JqVHlw ZUJvb2wsICF2YWx1ZSk7CisJYXBwZW5kX29iamVjdF9vYmplY3QodG9wLCAiJXtudWxsfXMiLCBw YXJ0KTsKKworCXBhcnQgPSBuZXdfb2JqdHJlZV9WQSgiIiwgMSwKKwkJCQkJCSAgInByZXNlbnQi LCBPYmpUeXBlQm9vbCwgdmFsdWUgIT0gTlVMTCk7CisKKwlpZiAodmFsdWUpCisJCWFwcGVuZF9z dHJpbmdfb2JqZWN0KHBhcnQsICIle3ZhbHVlfUwiLCAidmFsdWUiLCB2YWx1ZSk7CisJYXBwZW5k X29iamVjdF9vYmplY3QodG9wLCAiJXtsaXRlcmFsfXMiLCBwYXJ0KTsKKworCWFwcGVuZF9vYmpl Y3Rfb2JqZWN0KHBhcmVudCwgZWxlbW5hbWUsIHRvcCk7Cit9CisKKy8qCiAgKiBTaW1pbGFyIHRv IGZvcm1hdF90eXBlX2V4dGVuZGVkLCBleGNlcHQgd2UgcmV0dXJuIGVhY2ggYml0IG9mIGluZm9y bWF0aW9uCiAgKiBzZXBhcmF0ZWx5OgogICoKQEAgLTUyNCw2ICs1ODgsMzEgQEAgZm9ybWF0X3R5 cGVfZGV0YWlsZWQoT2lkIHR5cGVfb2lkLCBpbnQzMiB0eXBlbW9kLAogfQogCiAvKgorICogUmV0 dXJuIHRoZSBkZWZhdWx0IHZhbHVlcyBvZiBhcmd1bWVudHMgdG8gYSBmdW5jdGlvbiwgYXMgYSBs aXN0IG9mCisgKiBkZXBhcnNlZCBleHByZXNzaW9ucy4KKyAqLworc3RhdGljIExpc3QgKgorRnVu Y3Rpb25HZXREZWZhdWx0cyh0ZXh0ICpwcm9hcmdkZWZhdWx0cykKK3sKKwlMaXN0CSAgICpub2Rl ZGVmczsKKwlMaXN0CSAgICpzdHJkZWZzID0gTklMOworCUxpc3RDZWxsICAgKmNlbGw7CisKKwlu b2RlZGVmcyA9IChMaXN0ICopIHN0cmluZ1RvTm9kZSh0ZXh0X3RvX2NzdHJpbmcocHJvYXJnZGVm YXVsdHMpKTsKKwlpZiAoIUlzQShub2RlZGVmcywgTGlzdCkpCisJCWVsb2coRVJST1IsICJwcm9h cmdkZWZhdWx0cyBpcyBub3QgYSBsaXN0Iik7CisKKwlmb3JlYWNoKGNlbGwsIG5vZGVkZWZzKQor CXsKKwkJTm9kZQkgICAqb25lZGVmID0gbGZpcnN0KGNlbGwpOworCisJCXN0cmRlZnMgPSBsYXBw ZW5kKHN0cmRlZnMsIGRlcGFyc2VfZXhwcmVzc2lvbihvbmVkZWYsIE5JTCwgZmFsc2UsIGZhbHNl KSk7CisJfQorCisJcmV0dXJuIHN0cmRlZnM7Cit9CisKKy8qCiAgKiBSZXR1cm4gdGhlIHN0cmlu ZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgZ2l2ZW4gUkVMUEVSU0lTVEVOQ0UgdmFsdWUuCiAgKi8K IHN0YXRpYyBjaGFyICoKQEAgLTcxMyw2ICs4MDIsNTcgQEAgbmV3X29ianRyZWVfZm9yX3R5cGUo T2lkIHR5cGVJZCwgaW50MzIgdHlwbW9kKQogfQogCiAvKgorICogSGVscGVyIHJvdXRpbmUgZm9y ICV7fVIgb2JqZWN0cywgd2l0aCByb2xlIHNwZWNpZmllZCBieSBSb2xlU3BlYyBub2RlLgorICog U3BlY2lhbCB2YWx1ZXMgc3VjaCBhcyBST0xFU1BFQ19DVVJSRU5UX1VTRVIgYXJlIGV4cGFuZGVk IHRvIHRoZWlyIGZpbmFsCisgKiBuYW1lcy4KKyAqLworc3RhdGljIE9ialRyZWUgKgorbmV3X29i anRyZWVfZm9yX3JvbGVzcGVjKFJvbGVTcGVjICpzcGVjKQoreworCWNoYXIJICAgKnJvbGV0eXBl OworCisJaWYgKHNwZWMtPnJvbGV0eXBlICE9IFJPTEVTUEVDX1BVQkxJQykKKwkJcm9sZXR5cGUg PSBnZXRfcm9sZXNwZWNfbmFtZShzcGVjKTsKKwllbHNlCisJCXJvbGV0eXBlID0gcHN0cmR1cCgi Iik7CisKKwlyZXR1cm4gbmV3X29ianRyZWVfVkEoTlVMTCwgMiwKKwkJCQkJCSAgImlzX3B1Ymxp YyIsIE9ialR5cGVCb29sLCBzcGVjLT5yb2xldHlwZSA9PSBST0xFU1BFQ19QVUJMSUMsCisJCQkJ CQkgICJyb2xlbmFtZSIsIE9ialR5cGVTdHJpbmcsIHJvbGV0eXBlKTsKK30KKworLyoKKyAqIEhl bHBlciByb3V0aW5lIGZvciAle31SIG9iamVjdHMsIHdpdGggcm9sZSBzcGVjaWZpZWQgYnkgT0lE LiAoQUNMX0lEX1BVQkxJQworICogbWVhbnMgdG8gdXNlICJwdWJsaWMiKS4KKyAqLworc3RhdGlj IE9ialRyZWUgKgorbmV3X29ianRyZWVfZm9yX3JvbGVfaWQoT2lkIHJvbGVvaWQpCit7CisJT2Jq VHJlZSAgICAqcm9sZTsKKworCWlmIChyb2xlb2lkICE9IEFDTF9JRF9QVUJMSUMpCisJeworCQlI ZWFwVHVwbGUJcm9sdHVwOworCQljaGFyCSAgICpyb2xlX25hbWU7CisKKwkJcm9sdHVwID0gU2Vh cmNoU3lzQ2FjaGUxKEFVVEhPSUQsIE9iamVjdElkR2V0RGF0dW0ocm9sZW9pZCkpOworCQlpZiAo IUhlYXBUdXBsZUlzVmFsaWQocm9sdHVwKSkKKwkJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAg ZmFpbGVkIGZvciByb2xlIHdpdGggT0lEICV1Iiwgcm9sZW9pZCk7CisKKwkJcm9sZV9uYW1lID0g TmFtZVN0cigoKEZvcm1fcGdfYXV0aGlkKSBHRVRTVFJVQ1Qocm9sdHVwKSktPnJvbG5hbWUpOwor CQlyb2xlID0gbmV3X29ianRyZWVfVkEoIiV7cm9sZW5hbWV9SSIsIDEsCisJCQkJCQkJICAicm9s ZW5hbWUiLCBPYmpUeXBlU3RyaW5nLCBwc3RyZHVwKHJvbGVfbmFtZSkpOworCisJCVJlbGVhc2VT eXNDYWNoZShyb2x0dXApOworCX0KKwllbHNlCisJCXJvbGUgPSBuZXdfb2JqdHJlZV9WQSgiJXty b2xlbmFtZX1JIiwgMSwKKwkJCQkJCQkgICJyb2xlbmFtZSIsIE9ialR5cGVTdHJpbmcsICJwdWJs aWMiKTsKKworCXJldHVybiByb2xlOworfQorCisvKgogICogQWxsb2NhdGUgYSBuZXcgb2JqZWN0 IHRyZWUgdG8gc3RvcmUgcGFyYW1ldGVyIHZhbHVlcyAtLSB2YXJhcmdzIHZlcnNpb24uCiAgKgog ICogVGhlICJmbXQiIGFyZ3VtZW50IGlzIHVzZWQgdG8gYXBwZW5kIGFzIGEgImZtdCIgZWxlbWVu dCBpbiB0aGUgb3V0cHV0IGJsb2IuCkBAIC03OTAsNiArOTMwLDIyIEBAIG5ld19vYmp0cmVlX1ZB KGNoYXIgKmZtdCwgaW50IG51bW9ianMsLi4uKQogfQogCiAvKgorICogQWxsb2NhdGUgYSBuZXcg c3RyaW5nIG9iamVjdC4KKyAqLworc3RhdGljIE9iakVsZW0gKgorbmV3X3N0cmluZ19vYmplY3Qo Y2hhciAqdmFsdWUpCit7CisJT2JqRWxlbSAgICAqcGFyYW07CisKKwlBc3NlcnQodmFsdWUpOwor CisJcGFyYW0gPSBuZXdfb2JqZWN0KE9ialR5cGVTdHJpbmcsIE5VTEwpOworCXBhcmFtLT52YWx1 ZS5zdHJpbmcgPSB2YWx1ZTsKKworCXJldHVybiBwYXJhbTsKK30KKworLyoKICAqIFByb2Nlc3Mg dGhlIHByZS1idWlsdCBmb3JtYXQgc3RyaW5nIGZyb20gdGhlIE9ialRyZWUgaW50byB0aGUgb3V0 cHV0IHBhcnNlCiAgKiBzdGF0ZS4KICAqLwpAQCAtMTkzMyw2ICsyMDg5LDgzIEBAIGRlcGFyc2Vf U2VxX01pbnZhbHVlKEZvcm1fcGdfc2VxdWVuY2Ugc2VxZGF0YSwgYm9vbCBhbHRlcl90YWJsZSkK IH0KIAogLyoKKyAqIERlcGFyc2UgdGhlIHNlcXVlbmNlIE9XTkVEIEJZIGNvbW1hbmQuCisgKgor ICogVmVyYm9zZSBzeW50YXgKKyAqIE9XTkVEIEJZICV7b3duZXJ9RAorICovCitzdGF0aWMgT2Jq RWxlbSAqCitkZXBhcnNlX1NlcV9Pd25lZEJ5KE9pZCBzZXF1ZW5jZUlkLCBib29sIGFsdGVyX3Rh YmxlKQoreworCU9ialRyZWUgICAgKnJldCA9IE5VTEw7CisJUmVsYXRpb24JZGVwUmVsOworCVN5 c1NjYW5EZXNjIHNjYW47CisJU2NhbktleURhdGEga2V5c1szXTsKKwlIZWFwVHVwbGUJdHVwbGU7 CisKKwlkZXBSZWwgPSB0YWJsZV9vcGVuKERlcGVuZFJlbGF0aW9uSWQsIEFjY2Vzc1NoYXJlTG9j ayk7CisJU2NhbktleUluaXQoJmtleXNbMF0sCisJCQkJQW51bV9wZ19kZXBlbmRfY2xhc3NpZCwK KwkJCQlCVEVxdWFsU3RyYXRlZ3lOdW1iZXIsIEZfT0lERVEsCisJCQkJT2JqZWN0SWRHZXREYXR1 bShSZWxhdGlvblJlbGF0aW9uSWQpKTsKKwlTY2FuS2V5SW5pdCgma2V5c1sxXSwKKwkJCQlBbnVt X3BnX2RlcGVuZF9vYmppZCwKKwkJCQlCVEVxdWFsU3RyYXRlZ3lOdW1iZXIsIEZfT0lERVEsCisJ CQkJT2JqZWN0SWRHZXREYXR1bShzZXF1ZW5jZUlkKSk7CisJU2NhbktleUluaXQoJmtleXNbMl0s CisJCQkJQW51bV9wZ19kZXBlbmRfb2Jqc3ViaWQsCisJCQkJQlRFcXVhbFN0cmF0ZWd5TnVtYmVy LCBGX0lOVDRFUSwKKwkJCQlJbnQzMkdldERhdHVtKDApKTsKKworCXNjYW4gPSBzeXN0YWJsZV9i ZWdpbnNjYW4oZGVwUmVsLCBEZXBlbmREZXBlbmRlckluZGV4SWQsIHRydWUsCisJCQkJCQkJICBO VUxMLCAzLCBrZXlzKTsKKwl3aGlsZSAoSGVhcFR1cGxlSXNWYWxpZCh0dXBsZSA9IHN5c3RhYmxl X2dldG5leHQoc2NhbikpKQorCXsKKwkJT2lkCQkJb3duZXJJZDsKKwkJRm9ybV9wZ19kZXBlbmQg ZGVwZm9ybTsKKwkJT2JqVHJlZSAgICAqdG1wX29iajsKKwkJY2hhcgkgICAqY29sbmFtZTsKKwor CQlkZXBmb3JtID0gKEZvcm1fcGdfZGVwZW5kKSBHRVRTVFJVQ1QodHVwbGUpOworCisJCS8qIE9u bHkgY29uc2lkZXIgQVVUTyBkZXBlbmRlbmNpZXMgb24gcGdfY2xhc3MgKi8KKwkJaWYgKGRlcGZv cm0tPmRlcHR5cGUgIT0gREVQRU5ERU5DWV9BVVRPKQorCQkJY29udGludWU7CisJCWlmIChkZXBm b3JtLT5yZWZjbGFzc2lkICE9IFJlbGF0aW9uUmVsYXRpb25JZCkKKwkJCWNvbnRpbnVlOworCQlp ZiAoZGVwZm9ybS0+cmVmb2Jqc3ViaWQgPD0gMCkKKwkJCWNvbnRpbnVlOworCisJCW93bmVySWQg PSBkZXBmb3JtLT5yZWZvYmppZDsKKwkJY29sbmFtZSA9IGdldF9hdHRuYW1lKG93bmVySWQsIGRl cGZvcm0tPnJlZm9ianN1YmlkLCBmYWxzZSk7CisJCWlmIChjb2xuYW1lID09IE5VTEwpCisJCQlj b250aW51ZTsKKworCQl0bXBfb2JqID0gbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFJlbGF0 aW9uUmVsYXRpb25JZCwgb3duZXJJZCk7CisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcF9vYmos ICJhdHRybmFtZSIsICJhdHRybmFtZSIsIGNvbG5hbWUpOworCQlyZXQgPSBuZXdfb2JqdHJlZV9W QSgiT1dORUQgQlkgJXtvd25lcn1EIiwgMiwKKwkJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJp bmcsICJvd25lZCIsCisJCQkJCQkJICJvd25lciIsIE9ialR5cGVPYmplY3QsIHRtcF9vYmopOwor CX0KKworCXN5c3RhYmxlX2VuZHNjYW4oc2Nhbik7CisJcmVsYXRpb25fY2xvc2UoZGVwUmVsLCBB Y2Nlc3NTaGFyZUxvY2spOworCisJLyoKKwkgKiBJZiB0aGVyZSdzIG5vIG93bmVyIGNvbHVtbiwg ZW1pdCBhbiBlbXB0eSBPV05FRCBCWSBlbGVtZW50LCBzZXQgdXAgc28KKwkgKiB0aGF0IGl0IHdv bid0IHByaW50IGFueXRoaW5nLgorCSAqLworCWlmICghcmV0KQorCQkvKiBYWFggdGhpcyBzaG91 bGRuJ3QgaGFwcGVuIC4uLiAqLworCQlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiT1dORUQgQlkgJXtv d25lcn1EIiwgMywKKwkJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJvd25lZCIsCisJ CQkJCQkJICJvd25lciIsIE9ialR5cGVOdWxsLAorCQkJCQkJCSAicHJlc2VudCIsIE9ialR5cGVC b29sLCBmYWxzZSk7CisKKwlyZXR1cm4gbmV3X29iamVjdF9vYmplY3QocmV0KTsKK30KKworLyoK ICAqIERlcGFyc2UgdGhlIHNlcXVlbmNlIFJFU1RBUlQgb3B0aW9uLgogICoKICAqIFZlcmJvc2Ug c3ludGF4CkBAIC0zNDgwLDk2ICszNzEzLDYxMzUgQEAgZGVwYXJzZV9kcm9wX2NvbW1hbmQoY29u c3QgY2hhciAqb2JqaWRlbnRpdHksIGNvbnN0IGNoYXIgKm9iamVjdHR5cGUsCiB9CiAKIC8qCi0g KiBIYW5kbGUgZGVwYXJzaW5nIG9mIHNpbXBsZSBjb21tYW5kcy4KKyAqIERlcGFyc2UgYW4gQWx0 ZXJDb2xsYXRpb25TdG10IChBTFRFUiBDT0xMQVRJT04pCiAgKgotICogVGhpcyBmdW5jdGlvbiBz aG91bGQgY292ZXIgYWxsIGNhc2VzIGhhbmRsZWQgaW4gUHJvY2Vzc1V0aWxpdHlTbG93LgorICog R2l2ZW4gYSBjb2xsYXRpb24gT0lEIGFuZCB0aGUgcGFyc2UgdHJlZSB0aGF0IGNyZWF0ZWQgaXQs IHJldHVybiBhbiBPYmpUcmVlCisgKiByZXByZXNlbnRpbmcgdGhlIGFsdGVyIGNvbW1hbmQuCisg KgorICogVmVyYm9zZSBzeW50YXg6CisgKiBBTFRFUiBDT0xMQVRJT04gJXtpZGVudGl0eX1PIFJF RlJFU0ggVkVSU0lPTgogICovCiBzdGF0aWMgT2JqVHJlZSAqCi1kZXBhcnNlX3NpbXBsZV9jb21t YW5kKENvbGxlY3RlZENvbW1hbmQgKmNtZCkKK2RlcGFyc2VfQWx0ZXJDb2xsYXRpb24oT2lkIG9i amVjdElkLCBOb2RlICpwYXJzZXRyZWUpCiB7Ci0JT2lkCQkJb2JqZWN0SWQ7Ci0JTm9kZQkgICAq cGFyc2V0cmVlOworCU9ialRyZWUgICAgKnJldDsKKwlIZWFwVHVwbGUJY29sVHVwOworCUZvcm1f cGdfY29sbGF0aW9uIGNvbEZvcm07CiAKLQlBc3NlcnQoY21kLT50eXBlID09IFNDVF9TaW1wbGUp OworCWNvbFR1cCA9IFNlYXJjaFN5c0NhY2hlMShDT0xMT0lELCBPYmplY3RJZEdldERhdHVtKG9i amVjdElkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGNvbFR1cCkpCisJCWVsb2coRVJST1Is ICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBjb2xsYXRpb24gd2l0aCBPSUQgJXUiLCBvYmplY3RJ ZCk7CisJY29sRm9ybSA9IChGb3JtX3BnX2NvbGxhdGlvbikgR0VUU1RSVUNUKGNvbFR1cCk7CiAK LQlwYXJzZXRyZWUgPSBjbWQtPnBhcnNldHJlZTsKLQlvYmplY3RJZCA9IGNtZC0+ZC5zaW1wbGUu YWRkcmVzcy5vYmplY3RJZDsKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgQ09MTEFUSU9O ICV7aWRlbnRpdHl9TyBSRUZSRVNIIFZFUlNJT04iLCAxLAorCQkJCQkJICJpZGVudGl0eSIsIE9i alR5cGVPYmplY3QsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKGNvbEZvcm0tPmNv bGxuYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkgIE5hbWVTdHIoY29sRm9ybS0+Y29sbG5hbWUpKSk7 CiAKLQlpZiAoY21kLT5pbl9leHRlbnNpb24gJiYgKG5vZGVUYWcocGFyc2V0cmVlKSAhPSBUX0Ny ZWF0ZUV4dGVuc2lvblN0bXQpKQotCQlyZXR1cm4gTlVMTDsKKwlSZWxlYXNlU3lzQ2FjaGUoY29s VHVwKTsKIAotCS8qIFRoaXMgc3dpdGNoIG5lZWRzIHRvIGhhbmRsZSBldmVyeXRoaW5nIHRoYXQg UHJvY2Vzc1V0aWxpdHlTbG93IGRvZXMgKi8KLQlzd2l0Y2ggKG5vZGVUYWcocGFyc2V0cmVlKSkK LQl7Ci0JCWNhc2UgVF9DcmVhdGVTZXFTdG10OgotCQkJcmV0dXJuIGRlcGFyc2VfQ3JlYXRlU2Vx U3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKwlyZXR1cm4gcmV0OworfQogCi0JCWNhc2UgVF9D cmVhdGVTdG10OgotCQkJcmV0dXJuIGRlcGFyc2VfQ3JlYXRlU3RtdChvYmplY3RJZCwgcGFyc2V0 cmVlKTsKKy8qCisgKiBIYW5kbGUgZGVwYXJzaW5nIHNldHRpbmcgb2YgRnVuY3Rpb24KKyAqCisg KiBWZXJib3NlIHN5bnRheAorICogUkVTRVQgQUxMCisgKiBPUgorICogU0VUICV7c2V0X25hbWV9 SSBUTyAle3NldF92YWx1ZX1zCisgKiBPUgorICogUkVTRVQgJXtzZXRfbmFtZX1JCisgKi8KK3N0 YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfRnVuY3Rpb25TZXQoVmFyaWFibGVTZXRLaW5kIGtpbmQs IGNoYXIgKm5hbWUsIGNoYXIgKnZhbHVlKQoreworCU9ialRyZWUgICAgKnJldDsKIAotCQljYXNl IFRfSW5kZXhTdG10OgotCQkJcmV0dXJuIGRlcGFyc2VfSW5kZXhTdG10KG9iamVjdElkLCBwYXJz ZXRyZWUpOworCWlmIChraW5kID09IFZBUl9SRVNFVF9BTEwpCisJCXJldCA9IG5ld19vYmp0cmVl KCJSRVNFVCBBTEwiKTsKKwllbHNlIGlmIChraW5kID09IFZBUl9TRVRfVkFMVUUpCisJeworCQly ZXQgPSBuZXdfb2JqdHJlZV9WQSgiU0VUICV7c2V0X25hbWV9SSIsIDEsCisJCQkJCQkJICJzZXRf bmFtZSIsIE9ialR5cGVTdHJpbmcsIG5hbWUpOwogCi0JCWRlZmF1bHQ6Ci0JCQllbG9nKExPRywg InVucmVjb2duaXplZCBub2RlIHR5cGUgaW4gZGVwYXJzZSBjb21tYW5kOiAlZCIsCi0JCQkJIChp bnQpIG5vZGVUYWcocGFyc2V0cmVlKSk7CisJCS8qCisJCSAqIFNvbWUgR1VDIHZhcmlhYmxlIG5h bWVzIGFyZSAnTElTVCcgdHlwZSBhbmQgaGVuY2UgbXVzdCBub3QgYmUKKwkJICogcXVvdGVkLgor CQkgKi8KKwkJaWYgKEdldENvbmZpZ09wdGlvbkZsYWdzKG5hbWUsIHRydWUpICYgR1VDX0xJU1Rf UVVPVEUpCisJCQlhcHBlbmRfc3RyaW5nX29iamVjdChyZXQsICJUTyAle3NldF92YWx1ZX1zIiwg InNldF92YWx1ZSIsIHZhbHVlKTsKKwkJZWxzZQorCQkJYXBwZW5kX3N0cmluZ19vYmplY3QocmV0 LCAiVE8gJXtzZXRfdmFsdWV9TCIsICJzZXRfdmFsdWUiLCB2YWx1ZSk7CiAJfQorCWVsc2UKKwkJ cmV0ID0gbmV3X29ianRyZWVfVkEoIlJFU0VUICV7c2V0X25hbWV9SSIsIDEsCisJCQkJCQkJICJz ZXRfbmFtZSIsIE9ialR5cGVTdHJpbmcsIG5hbWUpOwogCi0JcmV0dXJuIE5VTEw7CisJcmV0dXJu IHJldDsKIH0KIAogLyoKLSAqIFdvcmtob3JzZSB0byBkZXBhcnNlIGEgQ29sbGVjdGVkQ29tbWFu ZC4KKyAqIERlcGFyc2UgYW4gQWx0ZXJGdW5jdGlvblN0bXQgKEFMVEVSIEZVTkNUSU9OL1JPVVRJ TkUvUFJPQ0VEVVJFKQorICoKKyAqIEdpdmVuIGEgZnVuY3Rpb24gT0lEIGFuZCB0aGUgcGFyc2Ug dHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVybiBhbiBPYmpUcmVlCisgKiByZXByZXNlbnRpbmcg dGhlIGFsdGVyIGNvbW1hbmQuCisgKgorICogVmVyYm9zZSBzeW50YXg6CisgKiBBTFRFUiBGVU5D VElPTi9ST1VUSU5FL1BST0NFRFVSRSAle3NpZ25hdHVyZX1zICV7ZGVmaW5pdGlvbjogfXMKICAq LwotY2hhciAqCi1kZXBhcnNlX3V0aWxpdHlfY29tbWFuZChDb2xsZWN0ZWRDb21tYW5kICpjbWQs IGJvb2wgdmVyYm9zZV9tb2RlKQorc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9BbHRlckZ1bmN0 aW9uKE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQogewotCU92ZXJyaWRlU2VhcmNoUGF0 aCAqb3ZlcnJpZGVQYXRoOwotCU1lbW9yeUNvbnRleHQgb2xkY3h0OwotCU1lbW9yeUNvbnRleHQg dG1wY3h0OwotCU9ialRyZWUgICAgKnRyZWU7Ci0JY2hhcgkgICAqY29tbWFuZCA9IE5VTEw7Ci0J U3RyaW5nSW5mb0RhdGEgc3RyOworCUFsdGVyRnVuY3Rpb25TdG10ICpub2RlID0gKEFsdGVyRnVu Y3Rpb25TdG10ICopIHBhcnNldHJlZTsKKwlPYmpUcmVlICAgICpyZXQ7CisJT2JqVHJlZSAgICAq c2lnbjsKKwlIZWFwVHVwbGUJcHJvY1R1cDsKKwlGb3JtX3BnX3Byb2MgcHJvY0Zvcm07CisJTGlz dAkgICAqcGFyYW1zID0gTklMOworCUxpc3QJICAgKmVsZW1zID0gTklMOworCUxpc3RDZWxsICAg KmNlbGw7CisJaW50CQkJaTsKKworCS8qIEdldCB0aGUgcGdfcHJvYyB0dXBsZSAqLworCXByb2NU dXAgPSBTZWFyY2hTeXNDYWNoZTEoUFJPQ09JRCwgb2JqZWN0SWQpOworCWlmICghSGVhcFR1cGxl SXNWYWxpZChwcm9jVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9y IGZ1bmN0aW9uIHdpdGggT0lEICV1Iiwgb2JqZWN0SWQpOworCXByb2NGb3JtID0gKEZvcm1fcGdf cHJvYykgR0VUU1RSVUNUKHByb2NUdXApOworCisJaWYgKHByb2NGb3JtLT5wcm9raW5kID09IFBS T0tJTkRfUFJPQ0VEVVJFKQorCQlyZXQgPSBuZXdfb2JqdHJlZSgiQUxURVIgUFJPQ0VEVVJFIik7 CisJZWxzZQorCQlyZXQgPSBuZXdfb2JqdHJlZShub2RlLT5vYmp0eXBlID09IE9CSkVDVF9ST1VU SU5FID8KKwkJCQkJCSAgIkFMVEVSIFJPVVRJTkUiIDogIkFMVEVSIEZVTkNUSU9OIik7CiAKIAkv KgotCSAqIEFsbG9jYXRlIGV2ZXJ5dGhpbmcgZG9uZSBieSB0aGUgZGVwYXJzaW5nIHJvdXRpbmVz IGludG8gYSB0ZW1wIGNvbnRleHQsCi0JICogdG8gYXZvaWQgaGF2aW5nIHRvIHNwcmlua2xlIHRo ZW0gd2l0aCBtZW1vcnkgaGFuZGxpbmcgY29kZSwgYnV0Ci0JICogYWxsb2NhdGUgdGhlIG91dHB1 dCBTdHJpbmdJbmZvIGJlZm9yZSBzd2l0Y2hpbmcuCisJICogQUxURVIgRlVOQ1RJT04gZG9lcyBu b3QgY2hhbmdlIHNpZ25hdHVyZSBzbyB3ZSBjYW4gdXNlIGNhdGFsb2cgdG8gZ2V0CisJICogaW5w dXQgdHlwZSBPaWRzLgogCSAqLwotCWluaXRTdHJpbmdJbmZvKCZzdHIpOwotCXRtcGN4dCA9IEFs bG9jU2V0Q29udGV4dENyZWF0ZShDdXJyZW50TWVtb3J5Q29udGV4dCwKLQkJCQkJCQkJICAgImRl cGFyc2UgY3R4IiwKLQkJCQkJCQkJICAgQUxMT0NTRVRfREVGQVVMVF9NSU5TSVpFLAotCQkJCQkJ CQkgICBBTExPQ1NFVF9ERUZBVUxUX0lOSVRTSVpFLAotCQkJCQkJCQkgICBBTExPQ1NFVF9ERUZB VUxUX01BWFNJWkUpOwotCW9sZGN4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyh0bXBjeHQpOwor CWZvciAoaSA9IDA7IGkgPCBwcm9jRm9ybS0+cHJvbmFyZ3M7IGkrKykKKwl7CisJCU9ialRyZWUg ICAgKnRtcF9vYmo7CisKKwkJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCIle3R5cGV9VCIsIDEs CisJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJbmV3X29ianRyZWVfZm9y X3R5cGUocHJvY0Zvcm0tPnByb2FyZ3R5cGVzLnZhbHVlc1tpXSwgLTEpKTsKKwkJcGFyYW1zID0g bGFwcGVuZChwYXJhbXMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKwl9CisKKwlzaWdu ID0gbmV3X29ianRyZWVfVkEoIiV7aWRlbnRpdHl9RCAoJXthcmd1bWVudHM6LCB9cykiLCAyLAor CQkJCQkJICAiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJICBuZXdfb2JqdHJlZV9m b3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwgb2JqZWN0SWQpLAorCQkJCQkJICAi YXJndW1lbnRzIiwgT2JqVHlwZUFycmF5LCBwYXJhbXMpOworCisJYXBwZW5kX29iamVjdF9vYmpl Y3QocmV0LCAiJXtzaWduYXR1cmV9cyIsIHNpZ24pOworCisJZm9yZWFjaChjZWxsLCBub2RlLT5h Y3Rpb25zKQorCXsKKwkJRGVmRWxlbSAgICAqZGVmZWwgPSAoRGVmRWxlbSAqKSBsZmlyc3QoY2Vs bCk7CisJCU9ialRyZWUgICAgKnRtcF9vYmogPSBOVUxMOworCisJCWlmIChzdHJjbXAoZGVmZWwt PmRlZm5hbWUsICJ2b2xhdGlsaXR5IikgPT0gMCkKKwkJCXRtcF9vYmogPSBuZXdfb2JqdHJlZShz dHJWYWwoZGVmZWwtPmFyZykpOworCQllbHNlIGlmIChzdHJjbXAoZGVmZWwtPmRlZm5hbWUsICJz dHJpY3QiKSA9PSAwKQorCQkJdG1wX29iaiA9IG5ld19vYmp0cmVlKGJvb2xWYWwoZGVmZWwtPmFy ZykgPworCQkJCQkJCQkgIlJFVFVSTlMgTlVMTCBPTiBOVUxMIElOUFVUIiA6CisJCQkJCQkJCSAi Q0FMTEVEIE9OIE5VTEwgSU5QVVQiKTsKKwkJZWxzZSBpZiAoc3RyY21wKGRlZmVsLT5kZWZuYW1l LCAic2VjdXJpdHkiKSA9PSAwKQorCQkJdG1wX29iaiA9IG5ld19vYmp0cmVlKGJvb2xWYWwoZGVm ZWwtPmFyZykgPworCQkJCQkJCQkgIlNFQ1VSSVRZIERFRklORVIiIDogIlNFQ1VSSVRZIElOVk9L RVIiKTsKKwkJZWxzZSBpZiAoc3RyY21wKGRlZmVsLT5kZWZuYW1lLCAibGVha3Byb29mIikgPT0g MCkKKwkJCXRtcF9vYmogPSBuZXdfb2JqdHJlZShib29sVmFsKGRlZmVsLT5hcmcpID8KKwkJCQkJ CQkJICJMRUFLUFJPT0YiIDogIk5PVCBMRUFLUFJPT0YiKTsKKwkJZWxzZSBpZiAoc3RyY21wKGRl ZmVsLT5kZWZuYW1lLCAiY29zdCIpID09IDApCisJCQl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEo IkNPU1QgJXtjb3N0fW4iLCAxLAorCQkJCQkJCQkJImNvc3QiLCBPYmpUeXBlRmxvYXQsCisJCQkJ CQkJCQlkZWZHZXROdW1lcmljKGRlZmVsKSk7CisJCWVsc2UgaWYgKHN0cmNtcChkZWZlbC0+ZGVm bmFtZSwgInJvd3MiKSA9PSAwKQorCQl7CisJCQl0bXBfb2JqID0gbmV3X29ianRyZWUoIlJPV1Mi KTsKKwkJCWlmIChkZWZHZXROdW1lcmljKGRlZmVsKSA9PSAwKQorCQkJCWFwcGVuZF9ub3RfcHJl c2VudCh0bXBfb2JqKTsKKwkJCWVsc2UKKwkJCQlhcHBlbmRfZmxvYXRfb2JqZWN0KHRtcF9vYmos ICIle3Jvd3N9biIsCisJCQkJCQkJCQlkZWZHZXROdW1lcmljKGRlZmVsKSk7CisJCX0KKwkJZWxz ZSBpZiAoc3RyY21wKGRlZmVsLT5kZWZuYW1lLCAic2V0IikgPT0gMCkKKwkJeworCQkJVmFyaWFi bGVTZXRTdG10ICpzc3RtdCA9IChWYXJpYWJsZVNldFN0bXQgKikgZGVmZWwtPmFyZzsKKwkJCWNo YXIJICAgKnZhbHVlID0gRXh0cmFjdFNldFZhcmlhYmxlQXJncyhzc3RtdCk7CisKKwkJCXRtcF9v YmogPSBkZXBhcnNlX0Z1bmN0aW9uU2V0KHNzdG10LT5raW5kLCBzc3RtdC0+bmFtZSwgdmFsdWUp OworCQl9CisJCWVsc2UgaWYgKHN0cmNtcChkZWZlbC0+ZGVmbmFtZSwgInN1cHBvcnQiKSA9PSAw KQorCQl7CisJCQlPaWQJCQlhcmd0eXBlc1sxXTsKKworCQkJdG1wX29iaiA9IG5ld19vYmp0cmVl KCJTVVBQT1JUIik7CisKKwkJCUFzc2VydChwcm9jRm9ybS0+cHJvc3VwcG9ydCk7CisKKwkJCS8q CisJCQkgKiBXZSBzaG91bGQgcXVhbGlmeSB0aGUgc3VwcG9ydCBmdW5jdGlvbidzIG5hbWUgaWYg aXQgd291bGRuJ3QgYmUKKwkJCSAqIHJlc29sdmVkIGJ5IGxvb2t1cCBpbiB0aGUgY3VycmVudCBz ZWFyY2ggcGF0aC4KKwkJCSAqLworCQkJYXJndHlwZXNbMF0gPSBJTlRFUk5BTE9JRDsKKwkJCWFw cGVuZF9zdHJpbmdfb2JqZWN0KHRtcF9vYmosICIle25hbWV9cyIsICJuYW1lIiwKKwkJCQkJCQkJ IGdlbmVyYXRlX2Z1bmN0aW9uX25hbWUocHJvY0Zvcm0tPnByb3N1cHBvcnQsIDEsCisJCQkJCQkJ CQkJCQkJCU5JTCwgYXJndHlwZXMsCisJCQkJCQkJCQkJCQkJCWZhbHNlLCBOVUxMLAorCQkJCQkJ CQkJCQkJCQlFWFBSX0tJTkRfTk9ORSkpOworCQl9CisJCWVsc2UgaWYgKHN0cmNtcChkZWZlbC0+ ZGVmbmFtZSwgInBhcmFsbGVsIikgPT0gMCkKKwkJCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgi UEFSQUxMRUwgJXt2YWx1ZX1zIiwgMSwKKwkJCQkJCQkJCSJ2YWx1ZSIsIE9ialR5cGVTdHJpbmcs IHN0clZhbChkZWZlbC0+YXJnKSk7CisKKwkJZWxlbXMgPSBsYXBwZW5kKGVsZW1zLCBuZXdfb2Jq ZWN0X29iamVjdCh0bXBfb2JqKSk7CisJfQorCisJYXBwZW5kX2FycmF5X29iamVjdChyZXQsICIl e2RlZmluaXRpb246IH1zIiwgZWxlbXMpOworCisJUmVsZWFzZVN5c0NhY2hlKHByb2NUdXApOwor CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIERlcGFyc2UgYW4gQWx0ZXJPYmplY3RTY2hlbWFT dG10IChBTFRFUiAuLi4gU0VUIFNDSEVNQSBjb21tYW5kKQorICoKKyAqIEdpdmVuIHRoZSBvYmpl Y3QgYWRkcmVzcyBhbmQgdGhlIHBhcnNlIHRyZWUgdGhhdCBjcmVhdGVkIGl0LCByZXR1cm4gYW4K KyAqIE9ialRyZWUgcmVwcmVzZW50aW5nIHRoZSBhbHRlciBjb21tYW5kLgorICoKKyAqIFZlcmJv c2Ugc3ludGF4CisgKiBBTFRFUiAlcyAle2lkZW50aXR5fXMgU0VUIFNDSEVNQSAle25ld3NjaGVt YX1JCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQWx0ZXJPYmplY3RTY2hlbWFTdG10 KE9iamVjdEFkZHJlc3MgYWRkcmVzcywgTm9kZSAqcGFyc2V0cmVlLAorCQkJCQkJCSAgT2JqZWN0 QWRkcmVzcyBvbGRfc2NoZW1hKQoreworCUFsdGVyT2JqZWN0U2NoZW1hU3RtdCAqbm9kZSA9IChB bHRlck9iamVjdFNjaGVtYVN0bXQgKikgcGFyc2V0cmVlOworCWNoYXIJICAgKmlkZW50aXR5Owor CWNoYXIJICAgKm5ld19zY2hlbWEgPSBub2RlLT5uZXdzY2hlbWE7CisJY2hhcgkgICAqb2xkX3Nj aG5hbWU7CisJY2hhcgkgICAqaWRlbnQ7CiAKIAkvKgotCSAqIE1hbnkgcm91dGluZXMgdW5kZXJs eWluZyB0aGlzIG9uZSB3aWxsIGludm9rZSBydWxldXRpbHMuYyBmdW5jdGlvbmFsaXR5Ci0JICog dG8gb2J0YWluIGRlcGFyc2VkIHZlcnNpb25zIG9mIGV4cHJlc3Npb25zLiAgSW4gc3VjaCByZXN1 bHRzLCB3ZSB3YW50Ci0JICogYWxsIG9iamVjdCBuYW1lcyB0byBiZSBxdWFsaWZpZWQsIHNvIHRo YXQgcmVzdWx0cyBhcmUgInBvcnRhYmxlIiB0bwotCSAqIGVudmlyb25tZW50cyB3aXRoIGRpZmZl cmVudCBzZWFyY2hfcGF0aCBzZXR0aW5ncy4gIFJhdGhlciB0aGFuIGluamVjdAotCSAqIHdoYXQg d291bGQgYmUgcmVwZXRpdGl2ZSBjYWxscyB0byBvdmVycmlkZSBzZWFyY2ggcGF0aCBhbGwgb3Zl ciB0aGUKLQkgKiBwbGFjZSwgd2UgZG8gaXQgY2VudHJhbGx5IGhlcmUuCisJICogU2luY2UgdGhl IGNvbW1hbmQgaGFzIGFscmVhZHkgdGFrZW4gcGxhY2UgZnJvbSB0aGUgcG9pbnQgb2YgdmlldyBv ZgorCSAqIGNhdGFsb2dzLCBnZXRPYmplY3RJZGVudGl0eSByZXR1cm5zIHRoZSBvYmplY3QgbmFt ZSB3aXRoIHRoZSBhbHJlYWR5CisJICogY2hhbmdlZCBzY2hlbWEuICBUaGUgb3V0cHV0IG9mIG91 ciBkZXBhcnNpbmcgbXVzdCByZXR1cm4gdGhlIG9yaWdpbmFsCisJICogc2NoZW1hIG5hbWUsIGhv d2V2ZXIsIHNvIHdlIGNob3AgdGhlIHNjaGVtYSBuYW1lIG9mZiB0aGUgaWRlbnRpdHkKKwkgKiBz dHJpbmcgYW5kIHRoZW4gcHJlcGVuZCB0aGUgcXVvdGVkIHNjaGVtYSBuYW1lLgorCSAqCisJICog WFhYIFRoaXMgaXMgcHJldHR5IGNsdW5reS4gQ2FuIHdlIGRvIGJldHRlcj8KIAkgKi8KLQlvdmVy cmlkZVBhdGggPSBHZXRPdmVycmlkZVNlYXJjaFBhdGgoQ3VycmVudE1lbW9yeUNvbnRleHQpOwot CW92ZXJyaWRlUGF0aC0+c2NoZW1hcyA9IE5JTDsKLQlvdmVycmlkZVBhdGgtPmFkZENhdGFsb2cg PSBmYWxzZTsKLQlvdmVycmlkZVBhdGgtPmFkZFRlbXAgPSB0cnVlOwotCVB1c2hPdmVycmlkZVNl YXJjaFBhdGgob3ZlcnJpZGVQYXRoKTsKKwlpZGVudGl0eSA9IGdldE9iamVjdElkZW50aXR5KCZh ZGRyZXNzLCBmYWxzZSk7CisJb2xkX3NjaG5hbWUgPSBnZXRfbmFtZXNwYWNlX25hbWUob2xkX3Nj aGVtYS5vYmplY3RJZCk7CisJaWYgKCFvbGRfc2NobmFtZSkKKwkJZWxvZyhFUlJPUiwgImNhY2hl IGxvb2t1cCBmYWlsZWQgZm9yIHNjaGVtYSB3aXRoIE9JRCAldSIsCisJCQkgb2xkX3NjaGVtYS5v YmplY3RJZCk7CisKKwlpZGVudCA9IHBzcHJpbnRmKCIlcyVzIiwgcXVvdGVfaWRlbnRpZmllcihv bGRfc2NobmFtZSksCisJCQkJCSBpZGVudGl0eSArIHN0cmxlbihxdW90ZV9pZGVudGlmaWVyKG5l d19zY2hlbWEpKSk7CisKKwlyZXR1cm4gbmV3X29ianRyZWVfVkEoIkFMVEVSICV7b2JqdHlwZX1z ICV7aWRlbnRpdHl9cyBTRVQgU0NIRU1BICV7bmV3c2NoZW1hfUkiLCAzLAorCQkJCQkJICAib2Jq dHlwZSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkgIHN0cmluZ2lmeV9vYmp0eXBlKG5vZGUtPm9i amVjdFR5cGUsIGZhbHNlKSwKKwkJCQkJCSAgImlkZW50aXR5IiwgT2JqVHlwZVN0cmluZywgaWRl bnQsCisJCQkJCQkgICJuZXdzY2hlbWEiLCBPYmpUeXBlU3RyaW5nLCBuZXdfc2NoZW1hKTsKK30K IAotCXZlcmJvc2UgPSB2ZXJib3NlX21vZGU7CisvKgorICogRGVwYXJzZSBhIEdSQU5UL1JFVk9L RSBjb21tYW5kLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBHUkFOVCAle3ByaXZpbGVnZXM6 LCB9cyBPTiIgJXtvYmp0eXBlfXMgJXtwcml2dGFyZ2V0OiwgfXMgVE8gJXtncmFudGVlczosIH1z CisgKiAle2dyYW50X29wdGlvbn1zIEdSQU5URUQgQlkgJXtyb2xlbmFtZX1zCisgKiAJCU9SCisg KiBSRVZPS0UgJXtwcml2aWxlZ2VzOiwgfXMgT04iICV7b2JqdHlwZX1zICV7cHJpdnRhcmdldDos IH1zCisgKiBGUk9NICV7Z3JhbnRlZXM6LCB9cyAle2dyYW50X29wdGlvbn1zICV7Y2FzY2FkZX1z CisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfR3JhbnRTdG10KENvbGxlY3RlZENvbW1h bmQgKmNtZCkKK3sKKwlJbnRlcm5hbEdyYW50ICppc3RtdDsKKwlPYmpUcmVlICAgICpyZXQ7CisJ TGlzdAkgICAqbGlzdCA9IE5JTDsKKwlMaXN0Q2VsbCAgICpjZWxsOworCU9pZAkJCWNsYXNzSWQ7 CisJT2JqVHJlZSAgICAqdG1wOwogCi0Jc3dpdGNoIChjbWQtPnR5cGUpCisJLyogRG9uJ3QgZGVw YXJzZSBTUUwgY29tbWFuZHMgZ2VuZXJhdGVkIHdoaWxlIGNyZWF0aW5nIGV4dGVuc2lvbiAqLwor CWlmIChjbWQtPmluX2V4dGVuc2lvbikKKwkJcmV0dXJuIE5VTEw7CisKKwlpc3RtdCA9IGNtZC0+ ZC5ncmFudC5pc3RtdDsKKworCS8qCisJICogSWYgdGhlcmUgYXJlIG5vIG9iamVjdHMgZnJvbSAi QUxMIC4uLiBJTiBTQ0hFTUEiIHRvIGJlIGdyYW50ZWQsIHRoZW4KKwkgKiBub3RoaW5nIHRvIGRv LgorCSAqLworCWlmIChpc3RtdC0+b2JqZWN0cyA9PSBOSUwpCisJCXJldHVybiBOVUxMOworCisJ c3dpdGNoIChpc3RtdC0+b2JqdHlwZSkKIAl7Ci0JCWNhc2UgU0NUX1NpbXBsZToKLQkJCXRyZWUg PSBkZXBhcnNlX3NpbXBsZV9jb21tYW5kKGNtZCk7CisJCWNhc2UgT0JKRUNUX0NPTFVNTjoKKwkJ Y2FzZSBPQkpFQ1RfVEFCTEU6CisJCWNhc2UgT0JKRUNUX1NFUVVFTkNFOgorCQkJY2xhc3NJZCA9 IFJlbGF0aW9uUmVsYXRpb25JZDsKIAkJCWJyZWFrOwotCQljYXNlIFNDVF9BbHRlclRhYmxlOgot CQkJdHJlZSA9IGRlcGFyc2VfQWx0ZXJSZWxhdGlvbihjbWQpOworCQljYXNlIE9CSkVDVF9ET01B SU46CisJCWNhc2UgT0JKRUNUX1RZUEU6CisJCQljbGFzc0lkID0gVHlwZVJlbGF0aW9uSWQ7CiAJ CQlicmVhazsKLQkJY2FzZSBTQ1RfQ3JlYXRlVGFibGVBczoKLQkJCXRyZWUgPSBkZXBhcnNlX0Ny ZWF0ZVRhYmxlQXNTdG10KGNtZCk7CisJCWNhc2UgT0JKRUNUX0ZEVzoKKwkJCWNsYXNzSWQgPSBG b3JlaWduRGF0YVdyYXBwZXJSZWxhdGlvbklkOworCQkJYnJlYWs7CisJCWNhc2UgT0JKRUNUX0ZP UkVJR05fU0VSVkVSOgorCQkJY2xhc3NJZCA9IEZvcmVpZ25TZXJ2ZXJSZWxhdGlvbklkOworCQkJ YnJlYWs7CisJCWNhc2UgT0JKRUNUX0ZVTkNUSU9OOgorCQljYXNlIE9CSkVDVF9QUk9DRURVUkU6 CisJCWNhc2UgT0JKRUNUX1JPVVRJTkU6CisJCQljbGFzc0lkID0gUHJvY2VkdXJlUmVsYXRpb25J ZDsKKwkJCWJyZWFrOworCQljYXNlIE9CSkVDVF9MQU5HVUFHRToKKwkJCWNsYXNzSWQgPSBMYW5n dWFnZVJlbGF0aW9uSWQ7CisJCQlicmVhazsKKwkJY2FzZSBPQkpFQ1RfTEFSR0VPQkpFQ1Q6CisJ CQljbGFzc0lkID0gTGFyZ2VPYmplY3RSZWxhdGlvbklkOworCQkJYnJlYWs7CisJCWNhc2UgT0JK RUNUX1NDSEVNQToKKwkJCWNsYXNzSWQgPSBOYW1lc3BhY2VSZWxhdGlvbklkOworCQkJYnJlYWs7 CisJCWNhc2UgT0JKRUNUX0RBVEFCQVNFOgorCQljYXNlIE9CSkVDVF9UQUJMRVNQQUNFOgorCQkJ Y2xhc3NJZCA9IEludmFsaWRPaWQ7CisJCQllbG9nKEVSUk9SLCAiZ2xvYmFsIG9iamVjdHMgbm90 IHN1cHBvcnRlZCIpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQllbG9nKEVSUk9SLCAiaW52 YWxpZCBPQkpFQ1QgdmFsdWUgJWQiLCBpc3RtdC0+b2JqdHlwZSk7CisJfQorCisJLyogR1JBTlQg VE8gb3IgUkVWT0tFIEZST00gKi8KKwlyZXQgPSBuZXdfb2JqdHJlZShpc3RtdC0+aXNfZ3JhbnQg PyAiR1JBTlQiIDogIlJFVk9LRSIpOworCisJLyogQnVpbGQgYSBsaXN0IG9mIHByaXZpbGVnZXMg dG8gZ3JhbnQvcmV2b2tlICovCisJaWYgKGlzdG10LT5hbGxfcHJpdnMpCisJeworCQl0bXAgPSBu ZXdfb2JqdHJlZSgiQUxMIFBSSVZJTEVHRVMiKTsKKwkJbGlzdCA9IGxpc3RfbWFrZTEobmV3X29i amVjdF9vYmplY3QodG1wKSk7CisJfQorCWVsc2UKKwl7CisJCWNoYXIgKnByaXY7CisJCWlmIChp c3RtdC0+cHJpdmlsZWdlcyAmIEFDTF9JTlNFUlQpCisJCXsKKwkJCXByaXYgPSAoY2hhciAqKXBy aXZpbGVnZV90b19zdHJpbmcoQUNMX0lOU0VSVCk7CisJCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBu ZXdfc3RyaW5nX29iamVjdChwcml2KSk7CisJCX0KKwkJaWYgKGlzdG10LT5wcml2aWxlZ2VzICYg QUNMX1NFTEVDVCkKKwkJeworCQkJcHJpdiA9IChjaGFyICopcHJpdmlsZWdlX3RvX3N0cmluZyhB Q0xfU0VMRUNUKTsKKwkJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19zdHJpbmdfb2JqZWN0KHBy aXYpKTsKKwkJfQorCQlpZiAoaXN0bXQtPnByaXZpbGVnZXMgJiBBQ0xfVVBEQVRFKQorCQl7CisJ CQlwcml2ID0gKGNoYXIgKilwcml2aWxlZ2VfdG9fc3RyaW5nKEFDTF9VUERBVEUpOworCQkJbGlz dCA9IGxhcHBlbmQobGlzdCwgbmV3X3N0cmluZ19vYmplY3QocHJpdikpOworCQl9CisJCWlmIChp c3RtdC0+cHJpdmlsZWdlcyAmIEFDTF9ERUxFVEUpCisJCXsKKwkJCXByaXYgPSAoY2hhciAqKXBy aXZpbGVnZV90b19zdHJpbmcoQUNMX0RFTEVURSk7CisJCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBu ZXdfc3RyaW5nX29iamVjdChwcml2KSk7CisJCX0KKwkJaWYgKGlzdG10LT5wcml2aWxlZ2VzICYg QUNMX1RSVU5DQVRFKQorCQl7CisJCQlwcml2ID0gKGNoYXIgKilwcml2aWxlZ2VfdG9fc3RyaW5n KEFDTF9UUlVOQ0FURSk7CisJCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfc3RyaW5nX29iamVj dChwcml2KSk7CisJCX0KKwkJaWYgKGlzdG10LT5wcml2aWxlZ2VzICYgQUNMX1JFRkVSRU5DRVMp CisJCXsKKwkJCXByaXYgPSAoY2hhciAqKXByaXZpbGVnZV90b19zdHJpbmcoQUNMX1JFRkVSRU5D RVMpOworCQkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X3N0cmluZ19vYmplY3QocHJpdikpOwor CQl9CisJCWlmIChpc3RtdC0+cHJpdmlsZWdlcyAmIEFDTF9UUklHR0VSKQorCQl7CisJCQlwcml2 ID0gKGNoYXIgKilwcml2aWxlZ2VfdG9fc3RyaW5nKEFDTF9UUklHR0VSKTsKKwkJCWxpc3QgPSBs YXBwZW5kKGxpc3QsIG5ld19zdHJpbmdfb2JqZWN0KHByaXYpKTsKKwkJfQorCQlpZiAoaXN0bXQt PnByaXZpbGVnZXMgJiBBQ0xfRVhFQ1VURSkKKwkJeworCQkJcHJpdiA9IChjaGFyICopcHJpdmls ZWdlX3RvX3N0cmluZyhBQ0xfRVhFQ1VURSk7CisJCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdf c3RyaW5nX29iamVjdChwcml2KSk7CisJCX0KKwkJaWYgKGlzdG10LT5wcml2aWxlZ2VzICYgQUNM X1VTQUdFKQorCQl7CisJCQlwcml2ID0gKGNoYXIgKilwcml2aWxlZ2VfdG9fc3RyaW5nKEFDTF9V U0FHRSk7CisJCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfc3RyaW5nX29iamVjdChwcml2KSk7 CisJCX0KKwkJaWYgKGlzdG10LT5wcml2aWxlZ2VzICYgQUNMX0NSRUFURSkKKwkJeworCQkJcHJp diA9IChjaGFyICopcHJpdmlsZWdlX3RvX3N0cmluZyhBQ0xfQ1JFQVRFKTsKKwkJCWxpc3QgPSBs YXBwZW5kKGxpc3QsIG5ld19zdHJpbmdfb2JqZWN0KHByaXYpKTsKKwkJfQorCQlpZiAoaXN0bXQt PnByaXZpbGVnZXMgJiBBQ0xfQ1JFQVRFX1RFTVApCisJCXsKKwkJCXByaXYgPSAoY2hhciAqKXBy aXZpbGVnZV90b19zdHJpbmcoQUNMX0NSRUFURV9URU1QKTsKKwkJCWxpc3QgPSBsYXBwZW5kKGxp c3QsIG5ld19zdHJpbmdfb2JqZWN0KHByaXYpKTsKKwkJfQorCQlpZiAoaXN0bXQtPnByaXZpbGVn ZXMgJiBBQ0xfQ09OTkVDVCkKKwkJeworCQkJcHJpdiA9IChjaGFyICopcHJpdmlsZWdlX3RvX3N0 cmluZyhBQ0xfQ09OTkVDVCk7CisJCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfc3RyaW5nX29i amVjdChwcml2KSk7CisJCX0KKwkJaWYgKGlzdG10LT5wcml2aWxlZ2VzICYgQUNMX01BSU5UQUlO KQorCQl7CisJCQlwcml2ID0gKGNoYXIgKilwcml2aWxlZ2VfdG9fc3RyaW5nKEFDTF9NQUlOVEFJ Tik7CisJCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfc3RyaW5nX29iamVjdChwcml2KSk7CisJ CX0KKworCQlpZiAoIWlzdG10LT5pc19ncmFudCAmJiBpc3RtdC0+Z3JhbnRfb3B0aW9uKQorCQkJ YXBwZW5kX3N0cmluZ19vYmplY3QocmV0LCAiJXtncmFudF9vcHRpb259cyIsICJncmFudF9vcHRp b24iLAorCQkJCQkJCQkgaXN0bXQtPmdyYW50X29wdGlvbiA/ICJHUkFOVCBPUFRJT04gRk9SIiA6 ICIiKTsKKworCQlpZiAoaXN0bXQtPmNvbF9wcml2cyAhPSBOSUwpCisJCXsKKwkJCUxpc3RDZWxs ICAgKm9jZWxsOworCisJCQlmb3JlYWNoKG9jZWxsLCBpc3RtdC0+Y29sX3ByaXZzKQorCQkJewor CQkJCUFjY2Vzc1ByaXYgKnByaXYgPSBsZmlyc3Qob2NlbGwpOworCQkJCUxpc3QJICAgKmNvbHMg PSBOSUw7CisKKwkJCQlmb3JlYWNoKGNlbGwsIHByaXYtPmNvbHMpCisJCQkJeworCQkJCQlTdHJp bmcJICAgKmNvbG5hbWUgPSBsZmlyc3Rfbm9kZShTdHJpbmcsIGNlbGwpOworCisJCQkJCWNvbHMg PSBsYXBwZW5kKGNvbHMsCisJCQkJCQkJCSAgIG5ld19zdHJpbmdfb2JqZWN0KHN0clZhbChjb2xu YW1lKSkpOworCQkJCX0KKworCQkJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCIoJXtjb2xzOiwgfXMp ICV7cHJpdn1zIiwgMiwKKwkJCQkJCQkJCSAiY29scyIsIE9ialR5cGVBcnJheSwgY29scywKKwkJ CQkJCQkJCSAicHJpdiIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCQkgIHByaXYtPnByaXZfbmFt ZSA/IHByaXYtPnByaXZfbmFtZSA6ICJBTEwgUFJJVklMRUdFUyIpOworCisJCQkJbGlzdCA9IGxh cHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisJCQl9CisJCX0KKwl9CisJYXBw ZW5kX2FycmF5X29iamVjdChyZXQsICIle3ByaXZpbGVnZXM6LCB9cyBPTiIsIGxpc3QpOworCisJ YXBwZW5kX3N0cmluZ19vYmplY3QocmV0LCAiJXtvYmp0eXBlfXMiLCAib2JqdHlwZSIsCisJCQkJ CQkgKGNoYXIgKilzdHJpbmdpZnlfb2JqdHlwZShpc3RtdC0+b2JqdHlwZSwgdHJ1ZSkpOworCisJ LyogVGFyZ2V0IG9iamVjdHMuICBXZSB1c2Ugb2JqZWN0IGlkZW50aXRpZXMgaGVyZSAqLworCWxp c3QgPSBOSUw7CisJZm9yZWFjaChjZWxsLCBpc3RtdC0+b2JqZWN0cykKKwl7CisJCU9pZAkJCW9i amlkID0gbGZpcnN0X29pZChjZWxsKTsKKwkJT2JqZWN0QWRkcmVzcyBhZGRyOworCisJCWFkZHIu Y2xhc3NJZCA9IGNsYXNzSWQ7CisJCWFkZHIub2JqZWN0SWQgPSBvYmppZDsKKwkJYWRkci5vYmpl Y3RTdWJJZCA9IDA7CisKKwkJdG1wID0gbmV3X29ianRyZWVfVkEoIiV7aWRlbnRpdHl9cyIsIDEs CisJCQkJCQkJICJpZGVudGl0eSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJIGdldE9iamVjdElk ZW50aXR5KCZhZGRyLCBmYWxzZSkpOworCisJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmpl Y3Rfb2JqZWN0KHRtcCkpOworCX0KKwlhcHBlbmRfYXJyYXlfb2JqZWN0KHJldCwgIiV7cHJpdnRh cmdldDosIH1zIiwgbGlzdCk7CisKKwlhcHBlbmRfZm9ybWF0X3N0cmluZyhyZXQsIGlzdG10LT5p c19ncmFudCA/ICJUTyIgOiAiRlJPTSIpOworCisJLyogTGlzdCBvZiBncmFudGVlcyAqLworCWxp c3QgPSBOSUw7CisJZm9yZWFjaChjZWxsLCBpc3RtdC0+Z3JhbnRlZXMpCisJeworCQlPaWQJCQln cmFudGVlID0gbGZpcnN0X29pZChjZWxsKTsKKworCQl0bXAgPSBuZXdfb2JqdHJlZV9mb3Jfcm9s ZV9pZChncmFudGVlKTsKKwkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3Qo dG1wKSk7CisJfQorCisJYXBwZW5kX2FycmF5X29iamVjdChyZXQsICIle2dyYW50ZWVzOiwgfXMi LCBsaXN0KTsKKworCS8qIFRoZSB3b3JkaW5nIG9mIHRoZSBncmFudCBvcHRpb24gaXMgdmFyaWFi bGUgLi4uICovCisJaWYgKGlzdG10LT5pc19ncmFudCkKKwkJYXBwZW5kX3N0cmluZ19vYmplY3Qo cmV0LCAiJXtncmFudF9vcHRpb259cyIsICJncmFudF9vcHRpb24iLAorCQkJCQkJCSBpc3RtdC0+ Z3JhbnRfb3B0aW9uID8gIldJVEggR1JBTlQgT1BUSU9OIiA6ICIiKTsKKworCWlmIChpc3RtdC0+ Z3JhbnRvcl91aWQpCisJeworCQlIZWFwVHVwbGUJcm9sdHVwOworCQljaGFyCSAgICpyb2xlbmFt ZTsKKworCQlyb2x0dXAgPSBTZWFyY2hTeXNDYWNoZTEoQVVUSE9JRCwgT2JqZWN0SWRHZXREYXR1 bShpc3RtdC0+Z3JhbnRvcl91aWQpKTsKKwkJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHJvbHR1cCkp CisJCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3Igcm9sZSB3aXRoIE9JRCAl dSIsCisJCQkJIGlzdG10LT5ncmFudG9yX3VpZCk7CisKKwkJcm9sZW5hbWUgPSBOYW1lU3RyKCgo Rm9ybV9wZ19hdXRoaWQpIEdFVFNUUlVDVChyb2x0dXApKS0+cm9sbmFtZSk7CisJCWFwcGVuZF9z dHJpbmdfb2JqZWN0KHJldCwgIkdSQU5URUQgQlkgJXtyb2xlbmFtZX1zIiwKKwkJCQkJCQkgInJv bGVuYW1lIiwgcm9sZW5hbWUpOworCQlSZWxlYXNlU3lzQ2FjaGUocm9sdHVwKTsKKwl9CisKKwlp ZiAoIWlzdG10LT5pc19ncmFudCkKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QocmV0LCAiJXtjYXNj YWRlfXMiLCAiY2FzY2FkZSIsCisJCQkJCQkJIGlzdG10LT5iZWhhdmlvciA9PSBEUk9QX0NBU0NB REUgPyAiQ0FTQ0FERSIgOiAiIik7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogRGVwYXJz ZSBhbiBBbHRlck9wZXJhdG9yU3RtdCAoQUxURVIgT1BFUkFUT1IgLi4uIFNFVCAuLi4pLgorICoK KyAqIEdpdmVuIGFuIG9wZXJhdG9yIE9JRCBhbmQgdGhlIHBhcnNlIHRyZWUgdGhhdCBjcmVhdGVk IGl0LCByZXR1cm4gYW4gT2JqVHJlZQorICogcmVwcmVzZW50aW5nIHRoZSBhbHRlciBjb21tYW5k LgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBBTFRFUiBPUEVSQVRPUiAle2lkZW50aXR5fU8g KCV7bGVmdF90eXBlfVQsICV7cmlnaHRfdHlwZX1UKQorICogU0VUICgle2VsZW1zOiwgfXMpCisg Ki8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQWx0ZXJPcGVyYXRvclN0bXQoT2lkIG9iamVj dElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJSGVhcFR1cGxlCW9wclR1cDsKKwlBbHRlck9wZXJh dG9yU3RtdCAqbm9kZSA9IChBbHRlck9wZXJhdG9yU3RtdCAqKSBwYXJzZXRyZWU7CisJT2JqVHJl ZSAgICAqcmV0OworCUZvcm1fcGdfb3BlcmF0b3Igb3ByRm9ybTsKKwlMaXN0Q2VsbCAgICpjZWxs OworCUxpc3QJICAgKmxpc3QgPSBOSUw7CisKKwlvcHJUdXAgPSBTZWFyY2hTeXNDYWNoZTEoT1BF Uk9JRCwgT2JqZWN0SWRHZXREYXR1bShvYmplY3RJZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxp ZChvcHJUdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3Igb3BlcmF0 b3Igd2l0aCBPSUQgJXUiLCBvYmplY3RJZCk7CisJb3ByRm9ybSA9IChGb3JtX3BnX29wZXJhdG9y KSBHRVRTVFJVQ1Qob3ByVHVwKTsKKworCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBPUEVS QVRPUiAle2lkZW50aXR5fU8iLCAxLAorCQkJCQkJICJpZGVudGl0eSIsIE9ialR5cGVPYmplY3Qs CisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKG9wckZvcm0tPm9wcm5hbWVzcGFjZSwK KwkJCQkJCQkJCQkJCSAgTmFtZVN0cihvcHJGb3JtLT5vcHJuYW1lKSkpOworCisJLyogTEVGVEFS RyAqLworCWlmIChPaWRJc1ZhbGlkKG9wckZvcm0tPm9wcmxlZnQpKQorCQlhcHBlbmRfb2JqZWN0 X29iamVjdChyZXQsICIoJXtsZWZ0X3R5cGV9VCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl90 eXBlKG9wckZvcm0tPm9wcmxlZnQsIC0xKSk7CisJZWxzZQorCQlhcHBlbmRfc3RyaW5nX29iamVj dChyZXQsICIoJXtsZWZ0X3R5cGV9cyIsICJsZWZ0X3R5cGUiLCAiTk9ORSIpOworCisJLyogUklH SFRBUkcgKi8KKwlBc3NlcnQoT2lkSXNWYWxpZChvcHJGb3JtLT5vcHJsZWZ0KSk7CisJYXBwZW5k X29iamVjdF9vYmplY3QocmV0LCAiLCAle3JpZ2h0X3R5cGV9VCkiLAorCQkJCQkJIG5ld19vYmp0 cmVlX2Zvcl90eXBlKG9wckZvcm0tPm9wcnJpZ2h0LCAtMSkpOworCisJZm9yZWFjaChjZWxsLCBu b2RlLT5vcHRpb25zKQorCXsKKwkJRGVmRWxlbSAgICAqZWxlbSA9IChEZWZFbGVtICopIGxmaXJz dChjZWxsKTsKKwkJT2JqVHJlZSAgICAqdG1wX29iaiA9IE5VTEw7CisKKwkJaWYgKHN0cmNtcChl bGVtLT5kZWZuYW1lLCAicmVzdHJpY3QiKSA9PSAwKQorCQl7CisJCQl0bXBfb2JqID0gbmV3X29i anRyZWVfVkEoIlJFU1RSSUNUPSIsIDEsCisJCQkJCQkJCQkiY2xhdXNlIiwgT2JqVHlwZVN0cmlu ZywgInJlc3RyaWN0Iik7CisJCQlpZiAoT2lkSXNWYWxpZChvcHJGb3JtLT5vcHJyZXN0KSkKKwkJ CQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBfb2JqLCAiJXtwcm9jZWR1cmV9RCIsCisJCQkJCQkJ CQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJ CQkJCQkJCQkJCQkJIG9wckZvcm0tPm9wcnJlc3QpKTsKKwkJCWVsc2UKKwkJCQlhcHBlbmRfc3Ry aW5nX29iamVjdCh0bXBfb2JqLCAiJXtwcm9jZWR1cmV9cyIsICJwcm9jZWR1cmUiLAorCQkJCQkJ CQkJICJOT05FIik7CisJCX0KKwkJZWxzZSBpZiAoc3RyY21wKGVsZW0tPmRlZm5hbWUsICJqb2lu IikgPT0gMCkKKwkJeworCQkJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJKT0lOPSIsIDEsCisJ CQkJCQkJCQkiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgImpvaW4iKTsKKwkJCWlmIChPaWRJc1Zh bGlkKG9wckZvcm0tPm9wcmpvaW4pKQorCQkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcF9vYmos ICIle3Byb2NlZHVyZX1EIiwKKwkJCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQo UHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJCQkgb3ByRm9ybS0+b3Byam9pbikp OworCQkJZWxzZQorCQkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcF9vYmosICIle3Byb2NlZHVy ZX1zIiwgInByb2NlZHVyZSIsCisJCQkJCQkJCQkgIk5PTkUiKTsKKwkJfQorCisJCUFzc2VydCh0 bXBfb2JqKTsKKwkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wX29i aikpOworCX0KKworCWFwcGVuZF9hcnJheV9vYmplY3QocmV0LCAiU0VUICgle2VsZW1zOiwgfXMp IiwgbGlzdCk7CisKKwlSZWxlYXNlU3lzQ2FjaGUob3ByVHVwKTsKKworCXJldHVybiByZXQ7Cit9 CisKKy8qCisgKiBEZXBhcnNlIGFuIEFMVEVSIE9QRVJBVE9SIEZBTUlMWSBBREQvRFJPUCBjb21t YW5kLgorICoKKyAqIEdpdmVuIHRoZSBDb2xsZWN0ZWRDb21tYW5kLCByZXR1cm4gYW4gT2JqVHJl ZSByZXByZXNlbnRpbmcgdGhlIEFsdGVyCisgKiBPcGVyYXRvciBjb21tYW5kLgorICoKKyAqIFZl cmJvc2Ugc3ludGF4CisgKiBBTFRFUiBPUEVSQVRPUiBGQU1JTFkgJXtpZGVudGl0eX1EIFVTSU5H ICV7YW1uYW1lfUkgQUREL0RST1AgJXtpdGVtczosfXMKKyAqLworc3RhdGljIE9ialRyZWUgKgor ZGVwYXJzZV9BbHRlck9wRmFtaWx5KENvbGxlY3RlZENvbW1hbmQgKmNtZCkKK3sKKwlPYmpUcmVl ICAgICpyZXQ7CisJQWx0ZXJPcEZhbWlseVN0bXQgKnN0bXQgPSAoQWx0ZXJPcEZhbWlseVN0bXQg KikgY21kLT5wYXJzZXRyZWU7CisJSGVhcFR1cGxlCWZ0cDsKKwlGb3JtX3BnX29wZmFtaWx5IG9w ZkZvcm07CisJTGlzdAkgICAqbGlzdCA9IE5JTDsKKwlMaXN0Q2VsbCAgICpjZWxsOworCisJLyog RG9uJ3QgZGVwYXJzZSBTUUwgY29tbWFuZHMgZ2VuZXJhdGVkIHdoaWxlIGNyZWF0aW5nIGV4dGVu c2lvbiAqLworCWlmIChjbWQtPmluX2V4dGVuc2lvbikKKwkJcmV0dXJuIE5VTEw7CisKKwlmdHAg PSBTZWFyY2hTeXNDYWNoZTEoT1BGQU1JTFlPSUQsCisJCQkJCQkgIE9iamVjdElkR2V0RGF0dW0o Y21kLT5kLm9wZmFtLmFkZHJlc3Mub2JqZWN0SWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQo ZnRwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIG9wZXJhdG9yIGZh bWlseSB3aXRoIE9JRCAldSIsCisJCQkgY21kLT5kLm9wZmFtLmFkZHJlc3Mub2JqZWN0SWQpOwor CW9wZkZvcm0gPSAoRm9ybV9wZ19vcGZhbWlseSkgR0VUU1RSVUNUKGZ0cCk7CisKKwlyZXQgPSBu ZXdfb2JqdHJlZV9WQSgiQUxURVIgT1BFUkFUT1IgRkFNSUxZICV7aWRlbnRpdHl9RCBVU0lORyAl e2FtbmFtZX1JIiwgMiwKKwkJCQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJ IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShvcGZGb3JtLT5vcGZuYW1lc3BhY2UsCisJCQkJCQkJ CQkJCQkgIE5hbWVTdHIob3BmRm9ybS0+b3BmbmFtZSkpLAorCQkJCQkJICJhbW5hbWUiLCBPYmpU eXBlU3RyaW5nLCBzdG10LT5hbW5hbWUpOworCisJZm9yZWFjaChjZWxsLCBjbWQtPmQub3BmYW0u b3BlcmF0b3JzKQorCXsKKwkJT3BGYW1pbHlNZW1iZXIgKm9wZXIgPSBsZmlyc3QoY2VsbCk7CisJ CU9ialRyZWUgICAgKnRtcF9vYmo7CisKKwkJLyoKKwkJICogVmVyYm9zZSBzeW50YXgKKwkJICoK KwkJICogT1BFUkFUT1IgJXtudW19biAle29wZXJhdG9yfU8oJXtsdHlwZX1ULCAle3J0eXBlfVQp ICV7cHVycG9zZX1zCisJCSAqLworCQl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIk9QRVJBVE9S ICV7bnVtfW4iLCAxLAorCQkJCQkJCQkibnVtIiwgT2JqVHlwZUludGVnZXIsIG9wZXItPm51bWJl cik7CisKKwkJLyogQWRkIHRoZSBvcGVyYXRvciBuYW1lOyB0aGUgRFJPUCBjYXNlIGRvZXNuJ3Qg aGF2ZSB0aGlzICovCisJCWlmICghc3RtdC0+aXNEcm9wKQorCQkJYXBwZW5kX29iamVjdF9vYmpl Y3QodG1wX29iaiwgIiV7b3BlcmF0b3J9TyIsCisJCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVh bG5hbWVfaWQoT3BlcmF0b3JSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkJIG9wZXItPm9iamVj dCkpOworCisJCS8qIEFkZCB0aGUgdHlwZXMgKi8KKwkJYXBwZW5kX29iamVjdF9vYmplY3QodG1w X29iaiwgIigle2x0eXBlfVQsIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3R5cGUob3Blci0+ bGVmdHR5cGUsIC0xKSk7CisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcF9vYmosICIle3J0eXBl fVQpIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3R5cGUob3Blci0+cmlnaHR0eXBlLCAtMSkp OworCisJCS8qIEFkZCB0aGUgRk9SIFNFQVJDSCAvIEZPUiBPUkRFUiBCWSBjbGF1c2U7IG5vdCBp biB0aGUgRFJPUCBjYXNlICovCisJCWlmICghc3RtdC0+aXNEcm9wKQorCQl7CisJCQlpZiAob3Bl ci0+c29ydGZhbWlseSA9PSBJbnZhbGlkT2lkKQorCQkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRt cF9vYmosICIle3B1cnBvc2V9cyIsICJwdXJwb3NlIiwKKwkJCQkJCQkJCSAiRk9SIFNFQVJDSCIp OworCQkJZWxzZQorCQkJeworCQkJCU9ialRyZWUgICAgKm9yZGVyYnlfb2JqOworCisJCQkJb3Jk ZXJieV9vYmogPSBuZXdfb2JqdHJlZV9WQSgiRk9SIE9SREVSIEJZICV7b3BmYW1pbHl9RCIsIDEs CisJCQkJCQkJCQkJCSJvcGZhbWlseSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJCQkJCW5ld19v Ymp0cmVlX2Zvcl9xdWFsbmFtZV9pZChPcGVyYXRvckZhbWlseVJlbGF0aW9uSWQsCisJCQkJCQkJ CQkJCQkJCQkJCQlvcGVyLT5zb3J0ZmFtaWx5KSk7CisJCQkJYXBwZW5kX29iamVjdF9vYmplY3Qo dG1wX29iaiwgIiV7cHVycG9zZX1zIiwgb3JkZXJieV9vYmopOworCQkJfQorCQl9CisKKwkJbGlz dCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wX29iaikpOworCX0KKworCWZv cmVhY2goY2VsbCwgY21kLT5kLm9wZmFtLnByb2NlZHVyZXMpCisJeworCQlPcEZhbWlseU1lbWJl ciAqcHJvYyA9IGxmaXJzdChjZWxsKTsKKwkJT2JqVHJlZSAgICAqdG1wX29iajsKKworCQl0bXBf b2JqID0gbmV3X29ianRyZWVfVkEoIkZVTkNUSU9OICV7bnVtfW4gKCV7bHR5cGV9VCwgJXtydHlw ZX1UKSIsIDMsCisJCQkJCQkJCSJudW0iLCBPYmpUeXBlSW50ZWdlciwgcHJvYy0+bnVtYmVyLAor CQkJCQkJCQkibHR5cGUiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCQluZXdfb2JqdHJlZV9mb3Jf dHlwZShwcm9jLT5sZWZ0dHlwZSwgLTEpLAorCQkJCQkJCQkicnR5cGUiLCBPYmpUeXBlT2JqZWN0 LAorCQkJCQkJCQluZXdfb2JqdHJlZV9mb3JfdHlwZShwcm9jLT5yaWdodHR5cGUsIC0xKSk7CisK KwkJLyoKKwkJICogQWRkIHRoZSBmdW5jdGlvbiBuYW1lIGFuZCBhcmcgdHlwZXM7IHRoZSBEUk9Q IGNhc2UgZG9lc24ndCBoYXZlCisJCSAqIHRoaXMKKwkJICovCisJCWlmICghc3RtdC0+aXNEcm9w KQorCQl7CisJCQlIZWFwVHVwbGUJcHJvY1R1cDsKKwkJCUZvcm1fcGdfcHJvYyBwcm9jRm9ybTsK KwkJCU9pZAkJICAgKnByb2FyZ3R5cGVzOworCQkJTGlzdAkgICAqYXJnbGlzdCA9IE5JTDsKKwkJ CWludAkJCWk7CisKKwkJCXByb2NUdXAgPSBTZWFyY2hTeXNDYWNoZTEoUFJPQ09JRCwgT2JqZWN0 SWRHZXREYXR1bShwcm9jLT5vYmplY3QpKTsKKwkJCWlmICghSGVhcFR1cGxlSXNWYWxpZChwcm9j VHVwKSkKKwkJCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgcHJvY2VkdXJl IHdpdGggT0lEICV1IiwKKwkJCQkJIHByb2MtPm9iamVjdCk7CisJCQlwcm9jRm9ybSA9IChGb3Jt X3BnX3Byb2MpIEdFVFNUUlVDVChwcm9jVHVwKTsKKworCQkJcHJvYXJndHlwZXMgPSBwcm9jRm9y bS0+cHJvYXJndHlwZXMudmFsdWVzOworCQkJZm9yIChpID0gMDsgaSA8IHByb2NGb3JtLT5wcm9u YXJnczsgaSsrKQorCQkJeworCQkJCU9ialRyZWUgICAgKmFyZzsKKworCQkJCWFyZyA9IG5ld19v Ymp0cmVlX2Zvcl90eXBlKHByb2FyZ3R5cGVzW2ldLCAtMSk7CisJCQkJYXJnbGlzdCA9IGxhcHBl bmQoYXJnbGlzdCwgbmV3X29iamVjdF9vYmplY3QoYXJnKSk7CisJCQl9CisKKwkJCWFwcGVuZF9v YmplY3Rfb2JqZWN0KHRtcF9vYmosICIle2Z1bmN0aW9ufUQiLAorCQkJCQkJCQkgbmV3X29ianRy ZWVfZm9yX3F1YWxuYW1lKHByb2NGb3JtLT5wcm9uYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkJCSAg TmFtZVN0cihwcm9jRm9ybS0+cHJvbmFtZSkpKTsKKworCQkJYXBwZW5kX2Zvcm1hdF9zdHJpbmco dG1wX29iaiwgIigiKTsKKwkJCWFwcGVuZF9hcnJheV9vYmplY3QodG1wX29iaiwgIiV7YXJndHlw ZXM6LCB9VCIsIGFyZ2xpc3QpOworCQkJYXBwZW5kX2Zvcm1hdF9zdHJpbmcodG1wX29iaiwgIiki KTsKKworCQkJUmVsZWFzZVN5c0NhY2hlKHByb2NUdXApOworCQl9CisKKwkJbGlzdCA9IGxhcHBl bmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wX29iaikpOworCX0KKworCWlmIChzdG10LT5p c0Ryb3ApCisJCWFwcGVuZF9mb3JtYXRfc3RyaW5nKHJldCwgIkRST1AiKTsKKwllbHNlCisJCWFw cGVuZF9mb3JtYXRfc3RyaW5nKHJldCwgIkFERCIpOworCisJYXBwZW5kX2FycmF5X29iamVjdChy ZXQsICIle2l0ZW1zOiwgfXMiLCBsaXN0KTsKKworCVJlbGVhc2VTeXNDYWNoZShmdHApOworCisJ cmV0dXJuIHJldDsKK30KKworLyoKKyAqIERlcGFyc2UgYW4gQWx0ZXJPd25lclN0bXQgKEFMVEVS IC4uLiBPV05FUiBUTyAuLi4pLgorICoKKyAqIEdpdmVuIHRoZSBvYmplY3QgYWRkcmVzcyBhbmQg dGhlIHBhcnNlIHRyZWUgdGhhdCBjcmVhdGVkIGl0LCByZXR1cm4gYW4KKyAqIE9ialRyZWUgcmVw cmVzZW50aW5nIHRoZSBhbHRlciBjb21tYW5kLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBB TFRFUiAlcyAle2lkZW50aXR5fXMgT1dORVIgVE8gJXtuZXdvd25lcn1JCisgKi8KK3N0YXRpYyBP YmpUcmVlICoKK2RlcGFyc2VfQWx0ZXJPd25lclN0bXQoT2JqZWN0QWRkcmVzcyBhZGRyZXNzLCBO b2RlICpwYXJzZXRyZWUpCit7CisJQWx0ZXJPd25lclN0bXQgKm5vZGUgPSAoQWx0ZXJPd25lclN0 bXQgKikgcGFyc2V0cmVlOworCisJcmV0dXJuIG5ld19vYmp0cmVlX1ZBKCJBTFRFUiAle29ianR5 cGV9cyAle2lkZW50aXR5fXMgT1dORVIgVE8gJXtuZXdvd25lcn1JIiwgMywKKwkJCQkJCSAgIm9i anR5cGUiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJICBzdHJpbmdpZnlfb2JqdHlwZShub2RlLT5v YmplY3RUeXBlLCBmYWxzZSksCisJCQkJCQkgICJpZGVudGl0eSIsIE9ialR5cGVTdHJpbmcsCisJ CQkJCQkgIGdldE9iamVjdElkZW50aXR5KCZhZGRyZXNzLCBmYWxzZSksCisJCQkJCQkgICJuZXdv d25lciIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkgIGdldF9yb2xlc3BlY19uYW1lKG5vZGUtPm5l d293bmVyKSk7Cit9CisKKy8qCisgKiBEZXBhcnNlIGFuIEFsdGVyU2VxU3RtdC4KKyAqCisgKiBH aXZlbiBhIHNlcXVlbmNlIE9JRCBhbmQgYSBwYXJzZSB0cmVlIHRoYXQgbW9kaWZpZWQgaXQsIHJl dHVybiBhbiBPYmpUcmVlCisgKiByZXByZXNlbnRpbmcgdGhlIGFsdGVyIGNvbW1hbmQuCisgKgor ICogVmVyYm9zZSBzeW50YXgKKyAqIEFMVEVSIFNFUVVFTkNFICV7aWRlbnRpdHl9RCAle2RlZmlu aXRpb246IH1zCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQWx0ZXJTZXFTdG10KE9p ZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCU9ialRyZWUgICAgKnJldDsKKwlSZWxh dGlvbglyZWxhdGlvbjsKKwlGb3JtX3BnX3NlcXVlbmNlX2RhdGEgc2VxZGF0YTsKKwlMaXN0CSAg ICplbGVtcyA9IE5JTDsKKwlMaXN0Q2VsbCAgICpjZWxsOworCUZvcm1fcGdfc2VxdWVuY2Ugc2Vx Zm9ybTsKKwlSZWxhdGlvbglyZWw7CisJSGVhcFR1cGxlCXNlcXR1cGxlOworCUFsdGVyU2VxU3Rt dCAqYWx0ZXJTZXFTdG10ID0gKEFsdGVyU2VxU3RtdCAqKSBwYXJzZXRyZWU7CisKKwkvKgorCSAq IFNlcXVlbmNlIGZvciBJREVOVElUWSBDT0xVTU4gb3V0cHV0IHNlcGFyYXRlbHkgKHZpYSBDUkVB VEUgVEFCTEUgb3IKKwkgKiBBTFRFUiBUQUJMRSk7IHJldHVybiBlbXB0eSBoZXJlLgorCSAqLwor CWlmIChhbHRlclNlcVN0bXQtPmZvcl9pZGVudGl0eSkKKwkJcmV0dXJuIE5VTEw7CisKKwlzZXFk YXRhID0gZ2V0X3NlcXVlbmNlX3ZhbHVlcyhvYmplY3RJZCk7CisKKwlyZWxhdGlvbiA9IHJlbGF0 aW9uX29wZW4ob2JqZWN0SWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJcmVsID0gdGFibGVfb3BlbihT ZXF1ZW5jZVJlbGF0aW9uSWQsIFJvd0V4Y2x1c2l2ZUxvY2spOworCXNlcXR1cGxlID0gU2VhcmNo U3lzQ2FjaGVDb3B5MShTRVFSRUxJRCwKKwkJCQkJCQkJICAgT2JqZWN0SWRHZXREYXR1bShvYmpl Y3RJZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChzZXF0dXBsZSkpCisJCWVsb2coRVJST1Is ICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBzZXF1ZW5jZSB3aXRoIE9JRCAgJXUiLCBvYmplY3RJ ZCk7CisKKwlzZXFmb3JtID0gKEZvcm1fcGdfc2VxdWVuY2UpIEdFVFNUUlVDVChzZXF0dXBsZSk7 CisKKwlmb3JlYWNoKGNlbGwsICgoQWx0ZXJTZXFTdG10ICopIHBhcnNldHJlZSktPm9wdGlvbnMp CisJeworCQlEZWZFbGVtICAgICplbGVtID0gKERlZkVsZW0gKikgbGZpcnN0KGNlbGwpOworCQlP YmpFbGVtICAgICpuZXdlbG07CisKKwkJaWYgKHN0cmNtcChlbGVtLT5kZWZuYW1lLCAiY2FjaGUi KSA9PSAwKQorCQkJbmV3ZWxtID0gZGVwYXJzZV9TZXFfQ2FjaGUoc2VxZm9ybSwgZmFsc2UpOwor CQllbHNlIGlmIChzdHJjbXAoZWxlbS0+ZGVmbmFtZSwgImN5Y2xlIikgPT0gMCkKKwkJCW5ld2Vs bSA9IGRlcGFyc2VfU2VxX0N5Y2xlKHNlcWZvcm0sIGZhbHNlKTsKKwkJZWxzZSBpZiAoc3RyY21w KGVsZW0tPmRlZm5hbWUsICJpbmNyZW1lbnQiKSA9PSAwKQorCQkJbmV3ZWxtID0gZGVwYXJzZV9T ZXFfSW5jcmVtZW50Qnkoc2VxZm9ybSwgZmFsc2UpOworCQllbHNlIGlmIChzdHJjbXAoZWxlbS0+ ZGVmbmFtZSwgIm1pbnZhbHVlIikgPT0gMCkKKwkJCW5ld2VsbSA9IGRlcGFyc2VfU2VxX01pbnZh bHVlKHNlcWZvcm0sIGZhbHNlKTsKKwkJZWxzZSBpZiAoc3RyY21wKGVsZW0tPmRlZm5hbWUsICJt YXh2YWx1ZSIpID09IDApCisJCQluZXdlbG0gPSBkZXBhcnNlX1NlcV9NYXh2YWx1ZShzZXFmb3Jt LCBmYWxzZSk7CisJCWVsc2UgaWYgKHN0cmNtcChlbGVtLT5kZWZuYW1lLCAic3RhcnQiKSA9PSAw KQorCQkJbmV3ZWxtID0gZGVwYXJzZV9TZXFfU3RhcnR3aXRoKHNlcWZvcm0sIGZhbHNlKTsKKwkJ ZWxzZSBpZiAoc3RyY21wKGVsZW0tPmRlZm5hbWUsICJyZXN0YXJ0IikgPT0gMCkKKwkJCW5ld2Vs bSA9IGRlcGFyc2VfU2VxX1Jlc3RhcnQoc2VxZGF0YSk7CisJCWVsc2UgaWYgKHN0cmNtcChlbGVt LT5kZWZuYW1lLCAib3duZWRfYnkiKSA9PSAwKQorCQkJbmV3ZWxtID0gZGVwYXJzZV9TZXFfT3du ZWRCeShvYmplY3RJZCwgZmFsc2UpOworCQllbHNlIGlmIChzdHJjbXAoZWxlbS0+ZGVmbmFtZSwg ImFzIikgPT0gMCkKKwkJCW5ld2VsbSA9IGRlcGFyc2VfU2VxX0FzKGVsZW0pOworCQllbHNlCisJ CQllbG9nKEVSUk9SLCAiaW52YWxpZCBzZXF1ZW5jZSBvcHRpb24gJXMiLCBlbGVtLT5kZWZuYW1l KTsKKworCQllbGVtcyA9IGxhcHBlbmQoZWxlbXMsIG5ld2VsbSk7CisJfQorCisJcmV0ID0gbmV3 X29ianRyZWVfVkEoIkFMVEVSIFNFUVVFTkNFICV7aWRlbnRpdHl9RCAle2RlZmluaXRpb246IH1z IiwgMiwKKwkJCQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJIG5ld19vYmp0 cmVlX2Zvcl9xdWFsbmFtZShyZWxhdGlvbi0+cmRfcmVsLT5yZWxuYW1lc3BhY2UsCisJCQkJCQkJ CQkJCQkgIFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHJlbGF0aW9uKSksCisJCQkJCQkgImRlZmlu aXRpb24iLCBPYmpUeXBlQXJyYXksIGVsZW1zKTsKKworCXRhYmxlX2Nsb3NlKHJlbCwgUm93RXhj bHVzaXZlTG9jayk7CisJcmVsYXRpb25fY2xvc2UocmVsYXRpb24sIEFjY2Vzc1NoYXJlTG9jayk7 CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogRGVwYXJzZSBhbiBBbHRlclR5cGVTdG10Lgor ICoKKyAqIEdpdmVuIGEgdHlwZSBPSUQgYW5kIGEgcGFyc2UgdHJlZSB0aGF0IG1vZGlmaWVkIGl0 LCByZXR1cm4gYW4gT2JqVHJlZQorICogcmVwcmVzZW50aW5nIHRoZSBhbHRlciB0eXBlLgorICoK KyAqIFZlcmJvc2Ugc3ludGF4CisgKiBBTFRFUiBUWVBFICV7aWRlbnRpdHl9RCAoJXtkZWZpbml0 aW9uOiB9cykKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9BbHRlclR5cGVTZXRTdG10 KE9pZCBvYmplY3RJZCwgTm9kZSAqY21kKQoreworCUFsdGVyVHlwZVN0bXQgKmFsdGVyVHlwZVNl dFN0bXQgPSAoQWx0ZXJUeXBlU3RtdCAqKSBjbWQ7CisJTGlzdENlbGwgICAqcGw7CisJTGlzdAkg ICAqZWxlbXMgPSBOSUw7CisJSGVhcFR1cGxlCXR5cFR1cDsKKwlGb3JtX3BnX3R5cGUgdHlwRm9y bTsKKworCXR5cFR1cCA9IFNlYXJjaFN5c0NhY2hlMShUWVBFT0lELCBPYmplY3RJZEdldERhdHVt KG9iamVjdElkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHR5cFR1cCkpCisJCWVsb2coRVJS T1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciB0eXBlIHdpdGggT0lEICV1Iiwgb2JqZWN0SWQp OworCXR5cEZvcm0gPSAoRm9ybV9wZ190eXBlKSBHRVRTVFJVQ1QodHlwVHVwKTsKKworCWZvcmVh Y2gocGwsIGFsdGVyVHlwZVNldFN0bXQtPm9wdGlvbnMpCisJeworCQlEZWZFbGVtICAgICpkZWZl bCA9IChEZWZFbGVtICopIGxmaXJzdChwbCk7CisJCU9iakVsZW0gICAgKm5ld2VsbTsKKworCQlp ZiAoc3RyY21wKGRlZmVsLT5kZWZuYW1lLCAic3RvcmFnZSIpID09IDApCisJCQluZXdlbG0gPSBk ZXBhcnNlX1R5cGVfU3RvcmFnZSh0eXBGb3JtKTsKKwkJaWYgKHN0cmNtcChkZWZlbC0+ZGVmbmFt ZSwgInJlY2VpdmUiKSA9PSAwKQorCQkJbmV3ZWxtID0gZGVwYXJzZV9UeXBlX1JlY2VpdmUodHlw Rm9ybSk7CisJCWlmIChzdHJjbXAoZGVmZWwtPmRlZm5hbWUsICJzZW5kIikgPT0gMCkKKwkJCW5l d2VsbSA9IGRlcGFyc2VfVHlwZV9TZW5kKHR5cEZvcm0pOworCQlpZiAoc3RyY21wKGRlZmVsLT5k ZWZuYW1lLCAidHlwbW9kX2luIikgPT0gMCkKKwkJCW5ld2VsbSA9IGRlcGFyc2VfVHlwZV9UeXBt b2RfSW4odHlwRm9ybSk7CisJCWlmIChzdHJjbXAoZGVmZWwtPmRlZm5hbWUsICJ0eXBtb2Rfb3V0 IikgPT0gMCkKKwkJCW5ld2VsbSA9IGRlcGFyc2VfVHlwZV9UeXBtb2RfT3V0KHR5cEZvcm0pOwor CQlpZiAoc3RyY21wKGRlZmVsLT5kZWZuYW1lLCAiYW5hbHl6ZSIpID09IDApCisJCQluZXdlbG0g PSBkZXBhcnNlX1R5cGVfQW5hbHl6ZSh0eXBGb3JtKTsKKwkJaWYgKHN0cmNtcChkZWZlbC0+ZGVm bmFtZSwgInN1YnNjcmlwdCIpID09IDApCisJCQluZXdlbG0gPSBkZXBhcnNlX1R5cGVfU3Vic2Ny aXB0KHR5cEZvcm0pOworCQllbHNlCisJCQllbG9nKEVSUk9SLCAiaW52YWxpZCB0eXBlIG9wdGlv biAlcyIsIGRlZmVsLT5kZWZuYW1lKTsKKworCQllbGVtcyA9IGxhcHBlbmQoZWxlbXMsIG5ld2Vs bSk7CisJfQorCisJUmVsZWFzZVN5c0NhY2hlKHR5cFR1cCk7CisKKwlyZXR1cm4gbmV3X29ianRy ZWVfVkEoIkFMVEVSIFRZUEUgJXtpZGVudGl0eX1EIFNFVCAoJXtkZWZpbml0aW9uOiB9cykiLCAy LAorCQkJCQkJICAiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJICBuZXdfb2JqdHJl ZV9mb3JfcXVhbG5hbWVfaWQoVHlwZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJICBvYmplY3RJ ZCksCisJCQkJCQkgICJkZWZpbml0aW9uIiwgT2JqVHlwZUFycmF5LCBlbGVtcyk7Cit9CisKKy8q CisgKiBEZXBhcnNlIGEgQ29tcG9zaXRlVHlwZVN0bXQgKENSRUFURSBUWVBFIEFTKQorICoKKyAq IEdpdmVuIGEgQ29tcG9zaXRlIHR5cGUgT0lEIGFuZCB0aGUgcGFyc2UgdHJlZSB0aGF0IGNyZWF0 ZWQgaXQsIHJldHVybiBhbgorICogT2JqVHJlZSByZXByZXNlbnRpbmcgdGhlIGNyZWF0aW9uIGNv bW1hbmQuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIENSRUFURSBUWVBFICV7aWRlbnRpdHl9 RCBBUyAoJXtjb2x1bW5zOiwgfXMpCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQ29t cG9zaXRlVHlwZVN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJQ29tcG9z aXRlVHlwZVN0bXQgKm5vZGUgPSAoQ29tcG9zaXRlVHlwZVN0bXQgKikgcGFyc2V0cmVlOworCUhl YXBUdXBsZQl0eXB0dXA7CisJRm9ybV9wZ190eXBlIHR5cGZvcm07CisJUmVsYXRpb24JdHlwZXJl bDsKKwlMaXN0CSAgICpkcGNvbnRleHQ7CisJTGlzdAkgICAqdGFibGVlbHRzID0gTklMOworCisJ LyogRmluZCB0aGUgcGdfdHlwZSBlbnRyeSBhbmQgb3BlbiB0aGUgY29ycmVzcG9uZGluZyByZWxh dGlvbiAqLworCXR5cHR1cCA9IFNlYXJjaFN5c0NhY2hlMShUWVBFT0lELCBPYmplY3RJZEdldERh dHVtKG9iamVjdElkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHR5cHR1cCkpCisJCWVsb2co RVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciB0eXBlIHdpdGggT0lEICV1Iiwgb2JqZWN0 SWQpOworCXR5cGZvcm0gPSAoRm9ybV9wZ190eXBlKSBHRVRTVFJVQ1QodHlwdHVwKTsKKwl0eXBl cmVsID0gcmVsYXRpb25fb3Blbih0eXBmb3JtLT50eXByZWxpZCwgQWNjZXNzU2hhcmVMb2NrKTsK KworCWRwY29udGV4dCA9IGRlcGFyc2VfY29udGV4dF9mb3IoUmVsYXRpb25HZXRSZWxhdGlvbk5h bWUodHlwZXJlbCksCisJCQkJCQkJCQlSZWxhdGlvbkdldFJlbGlkKHR5cGVyZWwpKTsKKworCXRh YmxlZWx0cyA9IGRlcGFyc2VfVGFibGVFbGVtZW50cyh0eXBlcmVsLCBub2RlLT5jb2xkZWZsaXN0 LCBkcGNvbnRleHQsCisJCQkJCQkJCQkgIGZhbHNlLAkvKiBub3QgdHlwZWQgKi8KKwkJCQkJCQkJ CSAgdHJ1ZSk7CS8qIGNvbXBvc2l0ZSB0eXBlICovCisKKwl0YWJsZV9jbG9zZSh0eXBlcmVsLCBB Y2Nlc3NTaGFyZUxvY2spOworCVJlbGVhc2VTeXNDYWNoZSh0eXB0dXApOworCisJcmV0dXJuIG5l d19vYmp0cmVlX1ZBKCJDUkVBVEUgVFlQRSAle2lkZW50aXR5fUQgQVMgKCV7Y29sdW1uczosIH1z KSIsIDIsCisJCQkJCQkgICJpZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkgIG5ld19v Ymp0cmVlX2Zvcl9xdWFsbmFtZV9pZChUeXBlUmVsYXRpb25JZCwgb2JqZWN0SWQpLAorCQkJCQkJ ICAiY29sdW1ucyIsIE9ialR5cGVBcnJheSwgdGFibGVlbHRzKTsKK30KKworLyoKKyAqIERlcGFy c2UgYSBDcmVhdGVDb252ZXJzaW9uU3RtdAorICoKKyAqIEdpdmVuIGEgY29udmVyc2lvbiBPSUQg YW5kIHRoZSBwYXJzZSB0cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0dXJuIGFuIE9ialRyZWUKKyAq IHJlcHJlc2VudGluZyB0aGUgY3JlYXRpb24gY29tbWFuZC4KKyAqCisgKiBWZXJib3NlIHN5bnRh eAorICogQ1JFQVRFICV7ZGVmYXVsdH1zIENPTlZFUlNJT04gJXtpZGVudGl0eX1EIEZPUiAle3Nv dXJjZX1MIFRPICV7ZGVzdH1MCisgKiBGUk9NICV7ZnVuY3Rpb259RAorICovCitzdGF0aWMgT2Jq VHJlZSAqCitkZXBhcnNlX0NyZWF0ZUNvbnZlcnNpb24oT2lkIG9iamVjdElkLCBOb2RlICpwYXJz ZXRyZWUpCit7CisJSGVhcFR1cGxlCWNvblR1cDsKKwlSZWxhdGlvbgljb252cmVsOworCUZvcm1f cGdfY29udmVyc2lvbiBjb25Gb3JtOworCU9ialRyZWUgICAgKnJldDsKKworCWNvbnZyZWwgPSB0 YWJsZV9vcGVuKENvbnZlcnNpb25SZWxhdGlvbklkLCBBY2Nlc3NTaGFyZUxvY2spOworCWNvblR1 cCA9IGdldF9jYXRhbG9nX29iamVjdF9ieV9vaWQoY29udnJlbCwgQW51bV9wZ19jb252ZXJzaW9u X29pZCwgb2JqZWN0SWQpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChjb25UdXApKQorCQllbG9n KEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgY29udmVyc2lvbiB3aXRoIE9JRCAldSIs IG9iamVjdElkKTsKKwljb25Gb3JtID0gKEZvcm1fcGdfY29udmVyc2lvbikgR0VUU1RSVUNUKGNv blR1cCk7CisKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQ1JFQVRFICV7ZGVmYXVsdH1zIENPTlZF UlNJT04gJXtpZGVudGl0eX1EIEZPUiAle3NvdXJjZX1MIFRPICV7ZGVzdH1MIEZST00gJXtmdW5j dGlvbn1EIiwgNSwKKwkJCQkJCSAgImRlZmF1bHQiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJICBj b25Gb3JtLT5jb25kZWZhdWx0ID8gIkRFRkFVTFQiIDogIiIsCisJCQkJCQkgICJpZGVudGl0eSIs IE9ialR5cGVPYmplY3QsCisJCQkJCQkgIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShjb25Gb3Jt LT5jb25uYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkgICBOYW1lU3RyKGNvbkZvcm0tPmNvbm5hbWUp KSwKKwkJCQkJCSAgInNvdXJjZSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkgIChjaGFyICopcGdf ZW5jb2RpbmdfdG9fY2hhcihjb25Gb3JtLT5jb25mb3JlbmNvZGluZyksCisJCQkJCQkgICJkZXN0 IiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCSAgKGNoYXIgKilwZ19lbmNvZGluZ190b19jaGFyKGNv bkZvcm0tPmNvbnRvZW5jb2RpbmcpLAorCQkJCQkJICAiZnVuY3Rpb24iLCBPYmpUeXBlT2JqZWN0 LAorCQkJCQkJICBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25J ZCwKKwkJCQkJCQkJCQkJCQkgIGNvbkZvcm0tPmNvbnByb2MpKTsKKworCXRhYmxlX2Nsb3NlKGNv bnZyZWwsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogRGVw YXJzZSBhIENyZWF0ZUVudW1TdG10IChDUkVBVEUgVFlQRSBBUyBFTlVNKQorICoKKyAqIEdpdmVu IGEgRW51bSB0eXBlIE9JRCBhbmQgdGhlIHBhcnNlIHRyZWUgdGhhdCBjcmVhdGVkIGl0LCByZXR1 cm4gYW4gT2JqVHJlZQorICogcmVwcmVzZW50aW5nIHRoZSBjcmVhdGlvbiBjb21tYW5kLgorICoK KyAqIFZlcmJvc2Ugc3ludGF4CisgKiBDUkVBVEUgVFlQRSAle2lkZW50aXR5fUQgQVMgRU5VTSAo JXt2YWx1ZXM6LCB9TCkKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9DcmVhdGVFbnVt U3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlDcmVhdGVFbnVtU3RtdCAq bm9kZSA9IChDcmVhdGVFbnVtU3RtdCAqKSBwYXJzZXRyZWU7CisJTGlzdAkgICAqdmFsdWVzID0g TklMOworCUxpc3RDZWxsICAgKmNlbGw7CisKKwlmb3JlYWNoKGNlbGwsIG5vZGUtPnZhbHMpCisJ CXZhbHVlcyA9IGxhcHBlbmQodmFsdWVzLCBuZXdfc3RyaW5nX29iamVjdChzdHJWYWwobGZpcnN0 X25vZGUoU3RyaW5nLCBjZWxsKSkpKTsKKworCXJldHVybiBuZXdfb2JqdHJlZV9WQSgiQ1JFQVRF IFRZUEUgJXtpZGVudGl0eX1EIEFTIEVOVU0gKCV7dmFsdWVzOiwgfUwpIiwgMiwKKwkJCQkJCSAg ImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSAgbmV3X29ianRyZWVfZm9yX3F1YWxu YW1lX2lkKFR5cGVSZWxhdGlvbklkLCBvYmplY3RJZCksCisJCQkJCQkgICJ2YWx1ZXMiLCBPYmpU eXBlQXJyYXksIHZhbHVlcyk7Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgQ3JlYXRlRXh0ZW5zaW9u U3RtdAorICoKKyAqIEdpdmVuIGFuIGV4dGVuc2lvbiBPSUQgYW5kIHRoZSBwYXJzZSB0cmVlIHRo YXQgY3JlYXRlZCBpdCwgcmV0dXJuIGFuIE9ialRyZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgY3Jl YXRpb24gY29tbWFuZC4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogQ1JFQVRFIEVYVEVOU0lP TiAle2lmX25vdF9leGlzdHN9cyAle25hbWV9SSAle29wdGlvbnM6IH1zCisgKi8KK3N0YXRpYyBP YmpUcmVlICoKK2RlcGFyc2VfQ3JlYXRlRXh0ZW5zaW9uU3RtdChPaWQgb2JqZWN0SWQsIE5vZGUg KnBhcnNldHJlZSkKK3sKKwlDcmVhdGVFeHRlbnNpb25TdG10ICpub2RlID0gKENyZWF0ZUV4dGVu c2lvblN0bXQgKikgcGFyc2V0cmVlOworCVJlbGF0aW9uCXBnX2V4dGVuc2lvbjsKKwlIZWFwVHVw bGUJZXh0VHVwOworCUZvcm1fcGdfZXh0ZW5zaW9uIGV4dEZvcm07CisJT2JqVHJlZSAgICAqdG1w OworCUxpc3QJICAgKmxpc3QgPSBOSUw7CisJTGlzdENlbGwgICAqY2VsbDsKKworCXBnX2V4dGVu c2lvbiA9IHRhYmxlX29wZW4oRXh0ZW5zaW9uUmVsYXRpb25JZCwgQWNjZXNzU2hhcmVMb2NrKTsK KwlleHRUdXAgPSBnZXRfY2F0YWxvZ19vYmplY3RfYnlfb2lkKHBnX2V4dGVuc2lvbiwgQW51bV9w Z19leHRlbnNpb25fb2lkLCBvYmplY3RJZCk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGV4dFR1 cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBleHRlbnNpb24gd2l0 aCBPSUQgJXUiLCBvYmplY3RJZCk7CisJZXh0Rm9ybSA9IChGb3JtX3BnX2V4dGVuc2lvbikgR0VU U1RSVUNUKGV4dFR1cCk7CisKKwkvKiBMaXN0IG9mIG9wdGlvbnMgKi8KKwlmb3JlYWNoKGNlbGws IG5vZGUtPm9wdGlvbnMpCisJeworCQlEZWZFbGVtICAgICpvcHQgPSAoRGVmRWxlbSAqKSBsZmly c3QoY2VsbCk7CisKKwkJaWYgKHN0cmNtcChvcHQtPmRlZm5hbWUsICJzY2hlbWEiKSA9PSAwKQor CQl7CisJCQkvKiBTa2lwIHRoaXMgb25lOyB3ZSBhZGQgb25lIHVuY29uZGl0aW9uYWxseSBiZWxv dyAqLworCQkJY29udGludWU7CisJCX0KKwkJZWxzZSBpZiAoc3RyY21wKG9wdC0+ZGVmbmFtZSwg Im5ld192ZXJzaW9uIikgPT0gMCkKKwkJeworCQkJdG1wID0gbmV3X29ianRyZWVfVkEoIlZFUlNJ T04gJXt2ZXJzaW9ufUwiLCAyLAorCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAidmVy c2lvbiIsCisJCQkJCQkJCSAidmVyc2lvbiIsIE9ialR5cGVTdHJpbmcsIGRlZkdldFN0cmluZyhv cHQpKTsKKwkJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOwor CQl9CisJCWVsc2UgaWYgKHN0cmNtcChvcHQtPmRlZm5hbWUsICJvbGRfdmVyc2lvbiIpID09IDAp CisJCXsKKwkJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJGUk9NICV7dmVyc2lvbn1MIiwgMiwKKwkJ CQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImZyb20iLAorCQkJCQkJCQkgInZlcnNpb24i LCBPYmpUeXBlU3RyaW5nLCBkZWZHZXRTdHJpbmcob3B0KSk7CisJCQlsaXN0ID0gbGFwcGVuZChs aXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwkJfQorCQllbHNlCisJCQllbG9nKEVSUk9S LCAidW5zdXBwb3J0ZWQgb3B0aW9uICVzIiwgb3B0LT5kZWZuYW1lKTsKKwl9CisKKwkvKiBBZGQg dGhlIFNDSEVNQSBvcHRpb24gKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiU0NIRU1BICV7c2No ZW1hfUkiLCAyLAorCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgInNjaGVtYSIsCisJCQkJ CQkgInNjaGVtYSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkgZ2V0X25hbWVzcGFjZV9uYW1lKGV4 dEZvcm0tPmV4dG5hbWVzcGFjZSkpOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rf b2JqZWN0KHRtcCkpOworCXRhYmxlX2Nsb3NlKHBnX2V4dGVuc2lvbiwgQWNjZXNzU2hhcmVMb2Nr KTsKKworCXJldHVybiBuZXdfb2JqdHJlZV9WQSgiQ1JFQVRFIEVYVEVOU0lPTiAle2lmX25vdF9l eGlzdHN9cyAle25hbWV9SSAle29wdGlvbnM6IH1zIiwgMywKKwkJCQkJCSAgImlmX25vdF9leGlz dHMiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJICBub2RlLT5pZl9ub3RfZXhpc3RzID8gIklGIE5P VCBFWElTVFMiIDogIiIsCisJCQkJCQkgICJuYW1lIiwgT2JqVHlwZVN0cmluZywgbm9kZS0+ZXh0 bmFtZSwKKwkJCQkJCSAgIm9wdGlvbnMiLCBPYmpUeXBlQXJyYXksIGxpc3QpOworfQorCisvKgor ICogSWYgYSBjb2x1bW4gbmFtZSBpcyBzcGVjaWZpZWQsIGFkZCBhbiBlbGVtZW50IGZvciBpdDsg b3RoZXJ3aXNlIGl0J3MgYQorICogdGFibGUtbGV2ZWwgb3B0aW9uLgorICovCitzdGF0aWMgT2Jq VHJlZSAqCitkZXBhcnNlX0Zkd09wdGlvbnMoTGlzdCAqb3B0aW9ucywgY2hhciAqY29sbmFtZSkK K3sKKwlPYmpUcmVlICAgICpyZXQ7CisKKwlpZiAoY29sbmFtZSkKKwkJcmV0ID0gbmV3X29ianRy ZWVfVkEoIkFMVEVSIENPTFVNTiAle2NvbHVtbn1JIiwgMSwKKwkJCQkJCQkgImNvbHVtbiIsIE9i alR5cGVTdHJpbmcsIGNvbG5hbWUpOworCWVsc2UKKwkJcmV0ID0gbmV3X29ianRyZWUoIk9QVElP TlMiKTsKKworCWlmIChvcHRpb25zICE9IE5JTCkKKwl7CisJCUxpc3QJICAgKm9wdG91dCA9IE5J TDsKKwkJTGlzdENlbGwgICAqY2VsbDsKKworCQlmb3JlYWNoKGNlbGwsIG9wdGlvbnMpCisJCXsK KwkJCURlZkVsZW0gICAgKmVsZW07CisJCQlPYmpUcmVlICAgICpvcHQ7CisKKwkJCWVsZW0gPSAo RGVmRWxlbSAqKSBsZmlyc3QoY2VsbCk7CisKKwkJCXN3aXRjaCAoZWxlbS0+ZGVmYWN0aW9uKQor CQkJeworCQkJCWNhc2UgREVGRUxFTV9VTlNQRUM6CisJCQkJCW9wdCA9IG5ld19vYmp0cmVlX1ZB KCIle2xhYmVsfUkgJXt2YWx1ZX1MIiwgMiwKKwkJCQkJCQkJCQkgImxhYmVsIiwgT2JqVHlwZVN0 cmluZywgZWxlbS0+ZGVmbmFtZSwKKwkJCQkJCQkJCQkgInZhbHVlIiwgT2JqVHlwZVN0cmluZywK KwkJCQkJCQkJCQkgZWxlbS0+YXJnID8gZGVmR2V0U3RyaW5nKGVsZW0pIDoKKwkJCQkJCQkJCQkg ZGVmR2V0Qm9vbGVhbihlbGVtKSA/ICJUUlVFIiA6ICJGQUxTRSIpOworCQkJCQlicmVhazsKKwkJ CQljYXNlIERFRkVMRU1fU0VUOgorCQkJCQlvcHQgPSBuZXdfb2JqdHJlZV9WQSgiU0VUICV7bGFi ZWx9SSAle3ZhbHVlfUwiLCAyLAorCQkJCQkJCQkJCSAibGFiZWwiLCBPYmpUeXBlU3RyaW5nLCBl bGVtLT5kZWZuYW1lLAorCQkJCQkJCQkJCSAidmFsdWUiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJ CQkJCSBlbGVtLT5hcmcgPyBkZWZHZXRTdHJpbmcoZWxlbSkgOgorCQkJCQkJCQkJCSBkZWZHZXRC b29sZWFuKGVsZW0pID8gIlRSVUUiIDogIkZBTFNFIik7CisJCQkJCWJyZWFrOworCQkJCWNhc2Ug REVGRUxFTV9BREQ6CisJCQkJCW9wdCA9IG5ld19vYmp0cmVlX1ZBKCJBREQgJXtsYWJlbH1JICV7 dmFsdWV9TCIsIDIsCisJCQkJCQkJCQkJICJsYWJlbCIsIE9ialR5cGVTdHJpbmcsIGVsZW0tPmRl Zm5hbWUsCisJCQkJCQkJCQkJICJ2YWx1ZSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCQkJIGVs ZW0tPmFyZyA/IGRlZkdldFN0cmluZyhlbGVtKSA6CisJCQkJCQkJCQkJIGRlZkdldEJvb2xlYW4o ZWxlbSkgPyAiVFJVRSIgOiAiRkFMU0UiKTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSBERUZFTEVN X0RST1A6CisJCQkJCW9wdCA9IG5ld19vYmp0cmVlX1ZBKCJEUk9QICV7bGFiZWx9SSIsIDEsCisJ CQkJCQkJCQkJICJsYWJlbCIsIE9ialR5cGVTdHJpbmcsIGVsZW0tPmRlZm5hbWUpOworCQkJCQli cmVhazsKKwkJCQlkZWZhdWx0OgorCQkJCQllbG9nKEVSUk9SLCAiaW52YWxpZCBkZWYgYWN0aW9u ICVkIiwgZWxlbS0+ZGVmYWN0aW9uKTsKKwkJCQkJb3B0ID0gTlVMTDsKKwkJCX0KKworCQkJb3B0 b3V0ID0gbGFwcGVuZChvcHRvdXQsIG5ld19vYmplY3Rfb2JqZWN0KG9wdCkpOworCQl9CisKKwkJ YXBwZW5kX2FycmF5X29iamVjdChyZXQsICIoJXtvcHRpb246ICx9cykiLCBvcHRvdXQpOworCX0K KwllbHNlCisJCWFwcGVuZF9ub3RfcHJlc2VudChyZXQpOworCisJcmV0dXJuIHJldDsKK30KKwor LyoKKyAqIERlcGFyc2UgYSBDcmVhdGVGZHdTdG10IChDUkVBVEUgRk9SRUlHTiBEQVRBIFdSQVBQ RVIpCisgKgorICogR2l2ZW4gYW4gRkRXIE9JRCBhbmQgdGhlIHBhcnNlIHRyZWUgdGhhdCBjcmVh dGVkIGl0LCByZXR1cm4gYW4gT2JqVHJlZQorICogcmVwcmVzZW50aW5nIHRoZSBjcmVhdGlvbiBj b21tYW5kLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBDUkVBVEUgRk9SRUlHTiBEQVRBIFdS QVBQRVIgJXtpZGVudGl0eX1JICV7aGFuZGxlcn1zICV7dmFsaWRhdG9yfXMgJXtnZW5lcmljX29w dGlvbnN9cworICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NyZWF0ZUZkd1N0bXQoT2lk IG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJQ3JlYXRlRmR3U3RtdCAqbm9kZSA9IChD cmVhdGVGZHdTdG10ICopIHBhcnNldHJlZTsKKwlIZWFwVHVwbGUJZmR3VHVwOworCUZvcm1fcGdf Zm9yZWlnbl9kYXRhX3dyYXBwZXIgZmR3Rm9ybTsKKwlSZWxhdGlvbglyZWw7CisJT2JqVHJlZSAg ICAqcmV0OworCU9ialRyZWUgICAgKnRtcDsKKworCXJlbCA9IHRhYmxlX29wZW4oRm9yZWlnbkRh dGFXcmFwcGVyUmVsYXRpb25JZCwgUm93RXhjbHVzaXZlTG9jayk7CisKKwlmZHdUdXAgPSBTZWFy Y2hTeXNDYWNoZTEoRk9SRUlHTkRBVEFXUkFQUEVST0lELAorCQkJCQkJCSBPYmplY3RJZEdldERh dHVtKG9iamVjdElkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGZkd1R1cCkpCisJCWVsb2co RVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBmb3JlaWduLWRhdGEgd3JhcHBlciB3aXRo IE9JRCAldSIsCisJCQkgb2JqZWN0SWQpOworCisJZmR3Rm9ybSA9IChGb3JtX3BnX2ZvcmVpZ25f ZGF0YV93cmFwcGVyKSBHRVRTVFJVQ1QoZmR3VHVwKTsKKworCXJldCA9IG5ld19vYmp0cmVlX1ZB KCJDUkVBVEUgRk9SRUlHTiBEQVRBIFdSQVBQRVIgJXtpZGVudGl0eX1JIiwgMSwKKwkJCQkJCSAi aWRlbnRpdHkiLCBPYmpUeXBlU3RyaW5nLCBOYW1lU3RyKGZkd0Zvcm0tPmZkd25hbWUpKTsKKwor CS8qIEFkZCBIQU5ETEVSIGNsYXVzZSAqLworCWlmICghT2lkSXNWYWxpZChmZHdGb3JtLT5mZHdo YW5kbGVyKSkKKwkJdG1wID0gbmV3X29ianRyZWUoIk5PIEhBTkRMRVIiKTsKKwllbHNlCisJewor CQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiSEFORExFUiAle3Byb2NlZHVyZX1EIiwgMSwKKwkJCQkJ CQkgInByb2NlZHVyZSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9x dWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkgZmR3Rm9ybS0+ ZmR3aGFuZGxlcikpOworCX0KKwlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICIle2hhbmRsZXJ9 cyIsIHRtcCk7CisKKwkvKiBBZGQgVkFMSURBVE9SIGNsYXVzZSAqLworCWlmICghT2lkSXNWYWxp ZChmZHdGb3JtLT5mZHd2YWxpZGF0b3IpKQorCQl0bXAgPSBuZXdfb2JqdHJlZSgiTk8gVkFMSURB VE9SIik7CisJZWxzZQorCXsKKwkJdG1wID0gbmV3X29ianRyZWVfVkEoIlZBTElEQVRPUiAle3By b2NlZHVyZX1EIiwgMSwKKwkJCQkJCQkgInByb2NlZHVyZSIsIE9ialR5cGVPYmplY3QsCisJCQkJ CQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJ CQkJCQkJCQkJCQkgZmR3Rm9ybS0+ZmR3dmFsaWRhdG9yKSk7CisJfQorCWFwcGVuZF9vYmplY3Rf b2JqZWN0KHJldCwgIiV7dmFsaWRhdG9yfXMiLCB0bXApOworCisJLyogQWRkIGFuIE9QVElPTlMg Y2xhdXNlLCBpZiBhbnkgKi8KKwlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICIle2dlbmVyaWNf b3B0aW9uc31zIiwKKwkJCQkJCSBkZXBhcnNlX0Zkd09wdGlvbnMobm9kZS0+b3B0aW9ucywgTlVM TCkpOworCisJUmVsZWFzZVN5c0NhY2hlKGZkd1R1cCk7CisJdGFibGVfY2xvc2UocmVsLCBSb3dF eGNsdXNpdmVMb2NrKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGFuIEFs dGVyRmR3U3RtdCAoQUxURVIgRk9SRUlHTiBEQVRBIFdSQVBQRVIpCisgKgorICogR2l2ZW4gYW4g RkRXIE9JRCBhbmQgdGhlIHBhcnNlIHRyZWUgdGhhdCBjcmVhdGVkIGl0LCByZXR1cm4gYW4gT2Jq VHJlZQorICogcmVwcmVzZW50aW5nIHRoZSBhbHRlciBjb21tYW5kLgorICoKKyAqIFZlcmJvc2Ug c3ludGF4CisgKiBBTFRFUiBGT1JFSUdOIERBVEEgV1JBUFBFUiAle2lkZW50aXR5fUkgJXtmZHdf b3B0aW9uczogfXMgJXtnZW5lcmljX29wdGlvbnN9RAorICovCitzdGF0aWMgT2JqVHJlZSAqCitk ZXBhcnNlX0FsdGVyRmR3U3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlB bHRlckZkd1N0bXQgKm5vZGUgPSAoQWx0ZXJGZHdTdG10ICopIHBhcnNldHJlZTsKKwlIZWFwVHVw bGUJZmR3VHVwOworCUZvcm1fcGdfZm9yZWlnbl9kYXRhX3dyYXBwZXIgZmR3Rm9ybTsKKwlSZWxh dGlvbglyZWw7CisJT2JqVHJlZSAgICAqcmV0OworCUxpc3QJICAgKmZkd19vcHRpb25zID0gTklM OworCUxpc3RDZWxsICAgKmNlbGw7CisKKwlyZWwgPSB0YWJsZV9vcGVuKEZvcmVpZ25EYXRhV3Jh cHBlclJlbGF0aW9uSWQsIFJvd0V4Y2x1c2l2ZUxvY2spOworCisJZmR3VHVwID0gU2VhcmNoU3lz Q2FjaGUxKEZPUkVJR05EQVRBV1JBUFBFUk9JRCwKKwkJCQkJCQkgT2JqZWN0SWRHZXREYXR1bShv YmplY3RJZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChmZHdUdXApKQorCQllbG9nKEVSUk9S LCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgZm9yZWlnbi1kYXRhIHdyYXBwZXIgd2l0aCBPSUQg JXUiLAorCQkJIG9iamVjdElkKTsKKworCWZkd0Zvcm0gPSAoRm9ybV9wZ19mb3JlaWduX2RhdGFf d3JhcHBlcikgR0VUU1RSVUNUKGZkd1R1cCk7CisKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQUxU RVIgRk9SRUlHTiBEQVRBIFdSQVBQRVIgJXtpZGVudGl0eX1JIiwgMSwKKwkJCQkJCSAiaWRlbnRp dHkiLCBPYmpUeXBlU3RyaW5nLCBOYW1lU3RyKGZkd0Zvcm0tPmZkd25hbWUpKTsKKworCS8qCisJ ICogSXRlcmF0ZSB0aHJvdWdoIG9wdGlvbnMsIHRvIHNlZSB3aGF0IGNoYW5nZWQsIGJ1dCB1c2Ug Y2F0YWxvZyBhcyBhCisJICogYmFzaXMgZm9yIG5ldyB2YWx1ZXMuCisJICovCisJZm9yZWFjaChj ZWxsLCBub2RlLT5mdW5jX29wdGlvbnMpCisJeworCQlEZWZFbGVtICAgICplbGVtOworCQlPYmpU cmVlICAgICp0bXA7CisKKwkJZWxlbSA9IGxmaXJzdChjZWxsKTsKKworCQlpZiAocGdfc3RyY2Fz ZWNtcChlbGVtLT5kZWZuYW1lLCAiaGFuZGxlciIpID09IDApCisJCXsKKwkJCS8qIGFkZCBIQU5E TEVSIGNsYXVzZSAqLworCQkJaWYgKCFPaWRJc1ZhbGlkKGZkd0Zvcm0tPmZkd2hhbmRsZXIpKQor CQkJCXRtcCA9IG5ld19vYmp0cmVlKCJOTyBIQU5ETEVSIik7CisJCQllbHNlCisJCQl7CisJCQkJ dG1wID0gbmV3X29ianRyZWVfVkEoIkhBTkRMRVIgJXtwcm9jZWR1cmV9RCIsIDEsCisJCQkJCQkJ CQkgInByb2NlZHVyZSIsCisJCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFBy b2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCQkJIGZkd0Zvcm0tPmZkd2hhbmRsZXIp KTsKKwkJCX0KKwkJCWZkd19vcHRpb25zID0gbGFwcGVuZChmZHdfb3B0aW9ucywgbmV3X29iamVj dF9vYmplY3QodG1wKSk7CisJCX0KKwkJZWxzZSBpZiAocGdfc3RyY2FzZWNtcChlbGVtLT5kZWZu YW1lLCAidmFsaWRhdG9yIikgPT0gMCkKKwkJeworCQkJLyogYWRkIFZBTElEQVRPUiBjbGF1c2Ug Ki8KKwkJCWlmICghT2lkSXNWYWxpZChmZHdGb3JtLT5mZHd2YWxpZGF0b3IpKQorCQkJCXRtcCA9 IG5ld19vYmp0cmVlKCJOTyBWQUxJREFUT1IiKTsKKwkJCWVsc2UKKwkJCXsKKwkJCQl0bXAgPSBu ZXdfb2JqdHJlZV9WQSgiVkFMSURBVE9SICV7cHJvY2VkdXJlfUQiLCAxLAorCQkJCQkJCQkJICJw cm9jZWR1cmUiLAorCQkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1 cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkJCSBmZHdGb3JtLT5mZHd2YWxpZGF0b3IpKTsK KwkJCX0KKwkJCWZkd19vcHRpb25zID0gbGFwcGVuZChmZHdfb3B0aW9ucywgbmV3X29iamVjdF9v YmplY3QodG1wKSk7CisJCX0KKwl9CisKKwkvKiBBZGQgSEFORExFUi9WQUxJREFUT1IgaWYgc3Bl Y2lmaWVkICovCisJYXBwZW5kX2FycmF5X29iamVjdChyZXQsICIle2Zkd19vcHRpb25zOiB9cyIs IGZkd19vcHRpb25zKTsKKworCS8qIEFkZCBhbiBPUFRJT05TIGNsYXVzZSwgaWYgYW55ICovCisJ YXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiJXtnZW5lcmljX29wdGlvbnN9RCIsCisJCQkJCQkg ZGVwYXJzZV9GZHdPcHRpb25zKG5vZGUtPm9wdGlvbnMsIE5VTEwpKTsKKworCVJlbGVhc2VTeXND YWNoZShmZHdUdXApOworCXRhYmxlX2Nsb3NlKHJlbCwgUm93RXhjbHVzaXZlTG9jayk7CisKKwly ZXR1cm4gcmV0OworfQorCisvKgorICogRGVwYXJzZSBhIENSRUFURSBUWVBFIEFTIFJBTkdFIHN0 YXRlbWVudAorICoKKyAqIEdpdmVuIGEgUmFuZ2UgdHlwZSBPSUQgYW5kIHRoZSBwYXJzZSB0cmVl IHRoYXQgY3JlYXRlZCBpdCwgcmV0dXJuIGFuIE9ialRyZWUKKyAqIHJlcHJlc2VudGluZyB0aGUg Y3JlYXRpb24gY29tbWFuZC4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogQ1JFQVRFIFRZUEUg JXtpZGVudGl0eX1EIEFTIFJBTkdFICgle2RlZmluaXRpb246LCB9cykKKyAqLworc3RhdGljIE9i alRyZWUgKgorZGVwYXJzZV9DcmVhdGVSYW5nZVN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJz ZXRyZWUpCit7CisJT2JqVHJlZSAgICAqdG1wOworCUxpc3QJICAgKmRlZmluaXRpb24gPSBOSUw7 CisJUmVsYXRpb24JcGdfcmFuZ2U7CisJSGVhcFR1cGxlCXJhbmdlVHVwOworCUZvcm1fcGdfcmFu Z2UgcmFuZ2VGb3JtOworCVNjYW5LZXlEYXRhIGtleVsxXTsKKwlTeXNTY2FuRGVzYyBzY2FuOwor CisJcGdfcmFuZ2UgPSB0YWJsZV9vcGVuKFJhbmdlUmVsYXRpb25JZCwgUm93RXhjbHVzaXZlTG9j ayk7CisKKwlTY2FuS2V5SW5pdCgma2V5WzBdLAorCQkJCUFudW1fcGdfcmFuZ2Vfcm5ndHlwaWQs CisJCQkJQlRFcXVhbFN0cmF0ZWd5TnVtYmVyLCBGX09JREVRLAorCQkJCU9iamVjdElkR2V0RGF0 dW0ob2JqZWN0SWQpKTsKKworCXNjYW4gPSBzeXN0YWJsZV9iZWdpbnNjYW4ocGdfcmFuZ2UsIFJh bmdlVHlwaWRJbmRleElkLCB0cnVlLAorCQkJCQkJCSAgTlVMTCwgMSwga2V5KTsKKworCXJhbmdl VHVwID0gc3lzdGFibGVfZ2V0bmV4dChzY2FuKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQocmFu Z2VUdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgcmFuZ2Ugd2l0 aCB0eXBlIE9JRCAldSIsCisJCQkgb2JqZWN0SWQpOworCisJcmFuZ2VGb3JtID0gKEZvcm1fcGdf cmFuZ2UpIEdFVFNUUlVDVChyYW5nZVR1cCk7CisKKwkvKiBTVUJUWVBFICovCisJdG1wID0gbmV3 X29ianRyZWVfVkEoIlNVQlRZUEUgPSAle3R5cGV9RCIsIDIsCisJCQkJCQkgImNsYXVzZSIsIE9i alR5cGVTdHJpbmcsICJzdWJ0eXBlIiwKKwkJCQkJCSAidHlwZSIsIE9ialR5cGVPYmplY3QsCisJ CQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFR5cGVSZWxhdGlvbklkLCByYW5nZUZv cm0tPnJuZ3N1YnR5cGUpKTsKKwlkZWZpbml0aW9uID0gbGFwcGVuZChkZWZpbml0aW9uLCBuZXdf b2JqZWN0X29iamVjdCh0bXApKTsKKworCS8qIFNVQlRZUEVfT1BDTEFTUyAqLworCWlmIChPaWRJ c1ZhbGlkKHJhbmdlRm9ybS0+cm5nc3Vib3BjKSkKKwl7CisJCXRtcCA9IG5ld19vYmp0cmVlX1ZB KCJTVUJUWVBFX09QQ0xBU1MgPSAle29wY2xhc3N9RCIsIDIsCisJCQkJCQkJICJjbGF1c2UiLCBP YmpUeXBlU3RyaW5nLCAib3BjbGFzcyIsCisJCQkJCQkJICJvcGNsYXNzIiwgT2JqVHlwZU9iamVj dCwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKE9wZXJhdG9yQ2xhc3NSZWxh dGlvbklkLAorCQkJCQkJCQkJCQkJCQkgcmFuZ2VGb3JtLT5ybmdzdWJvcGMpKTsKKwkJZGVmaW5p dGlvbiA9IGxhcHBlbmQoZGVmaW5pdGlvbiwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisJfQor CisJLyogQ09MTEFUSU9OICovCisJaWYgKE9pZElzVmFsaWQocmFuZ2VGb3JtLT5ybmdjb2xsYXRp b24pKQorCXsKKwkJdG1wID0gbmV3X29ianRyZWVfVkEoIkNPTExBVElPTiA9ICV7Y29sbGF0aW9u fUQiLCAyLAorCQkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgImNvbGxhdGlvbiIsCisJ CQkJCQkJICJjb2xsYXRpb24iLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCSBuZXdfb2JqdHJlZV9m b3JfcXVhbG5hbWVfaWQoQ29sbGF0aW9uUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJIHJhbmdl Rm9ybS0+cm5nY29sbGF0aW9uKSk7CisJCWRlZmluaXRpb24gPSBsYXBwZW5kKGRlZmluaXRpb24s IG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCX0KKworCS8qIENBTk9OSUNBTCAqLworCWlmIChP aWRJc1ZhbGlkKHJhbmdlRm9ybS0+cm5nY2Fub25pY2FsKSkKKwl7CisJCXRtcCA9IG5ld19vYmp0 cmVlX1ZBKCJDQU5PTklDQUwgPSAle2Nhbm9uaWNhbH1EIiwgMiwKKwkJCQkJCQkgImNsYXVzZSIs IE9ialR5cGVTdHJpbmcsICJjYW5vbmljYWwiLAorCQkJCQkJCSAiY2Fub25pY2FsIiwgT2JqVHlw ZU9iamVjdCwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJl bGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCSByYW5nZUZvcm0tPnJuZ2Nhbm9uaWNhbCkpOworCQlk ZWZpbml0aW9uID0gbGFwcGVuZChkZWZpbml0aW9uLCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsK Kwl9CisKKwkvKiBTVUJUWVBFX0RJRkYgKi8KKwlpZiAoT2lkSXNWYWxpZChyYW5nZUZvcm0tPnJu Z3N1YmRpZmYpKQorCXsKKwkJdG1wID0gbmV3X29ianRyZWVfVkEoIlNVQlRZUEVfRElGRiA9ICV7 c3VidHlwZV9kaWZmfUQiLCAyLAorCQkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgInN1 YnR5cGVfZGlmZiIsCisJCQkJCQkJICJzdWJ0eXBlX2RpZmYiLCBPYmpUeXBlT2JqZWN0LAorCQkJ CQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJ CQkJCQkJCQkJCQkJIHJhbmdlRm9ybS0+cm5nc3ViZGlmZikpOworCQlkZWZpbml0aW9uID0gbGFw cGVuZChkZWZpbml0aW9uLCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwl9CisKKwlzeXN0YWJs ZV9lbmRzY2FuKHNjYW4pOworCXRhYmxlX2Nsb3NlKHBnX3JhbmdlLCBSb3dFeGNsdXNpdmVMb2Nr KTsKKworCXJldHVybiBuZXdfb2JqdHJlZV9WQSgiQ1JFQVRFIFRZUEUgJXtpZGVudGl0eX1EIEFT IFJBTkdFICgle2RlZmluaXRpb246LCB9cykiLCAyLAorCQkJCQkJICAiaWRlbnRpdHkiLCBPYmpU eXBlT2JqZWN0LAorCQkJCQkJICBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoVHlwZVJlbGF0 aW9uSWQsIG9iamVjdElkKSwKKwkJCQkJCSAgImRlZmluaXRpb24iLCBPYmpUeXBlQXJyYXksIGRl ZmluaXRpb24pOworfQorCisvKgorICogRGVwYXJzZSBhbiBBbHRlckVudW1TdG10LgorICoKKyAq IEdpdmVuIGFuIGVudW0gT0lEIGFuZCBhIHBhcnNlIHRyZWUgdGhhdCBtb2RpZmllZCBpdCwgcmV0 dXJuIGFuIE9ialRyZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgYWx0ZXIgdHlwZS4KKyAqCisgKiBW ZXJib3NlIHN5bnRheAorICogQUxURVIgVFlQRSAle2lkZW50aXR5fUQgQUREIFZBTFVFICV7aWZf bm90X2V4aXN0c31zICV7dmFsdWV9TAorICogJXthZnRlcl9vcl9iZWZvcmV9cyAle25laWdoYm9y fUwKKyAqIAlPUgorICogQUxURVIgVFlQRSAle2lkZW50aXR5fUQgUkVOQU1FIFZBTFVFICV7dmFs dWV9TCBUTyAle25ld3ZhbHVlfUwKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9BbHRl ckVudW1TdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCUFsdGVyRW51bVN0 bXQgKm5vZGUgPSAoQWx0ZXJFbnVtU3RtdCAqKSBwYXJzZXRyZWU7CisJT2JqVHJlZSAgICAqcmV0 OworCisJcmV0ID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIFRZUEUgJXtpZGVudGl0eX1EIiwgMSwK KwkJCQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJIG5ld19vYmp0cmVlX2Zv cl9xdWFsbmFtZV9pZChUeXBlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkgb2JqZWN0SWQpKTsK KworCWlmICghbm9kZS0+b2xkVmFsKQorCXsKKwkJYXBwZW5kX2Zvcm1hdF9zdHJpbmcocmV0LCAi QUREIFZBTFVFIik7CisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJldCwgIiV7aWZfbm90X2V4aXN0 c31zIiwgImlmX25vdF9leGlzdHMiLAorCQkJCQkJCSBub2RlLT5za2lwSWZOZXdWYWxFeGlzdHMg PyAiSUYgTk9UIEVYSVNUUyIgOiAiIik7CisKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QocmV0LCAi JXt2YWx1ZX1MIiwgInZhbHVlIiwgbm9kZS0+bmV3VmFsKTsKKworCQlpZiAobm9kZS0+bmV3VmFs TmVpZ2hib3IpCisJCXsKKwkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJldCwgIiV7YWZ0ZXJfb3Jf YmVmb3JlfXMiLAorCQkJCQkJCQkgImFmdGVyX29yX2JlZm9yZSIsCisJCQkJCQkJCSBub2RlLT5u ZXdWYWxJc0FmdGVyID8gIkFGVEVSIiA6ICJCRUZPUkUiKTsKKwkJCWFwcGVuZF9zdHJpbmdfb2Jq ZWN0KHJldCwgIiV7bmVpZ2hib3J9TCIsICJuZWlnaGJvciIsCisJCQkJCQkJCSBub2RlLT5uZXdW YWxOZWlnaGJvcik7CisJCX0KKwl9CisJZWxzZQorCXsKKwkJYXBwZW5kX3N0cmluZ19vYmplY3Qo cmV0LCAiUkVOQU1FIFZBTFVFICV7dmFsdWV9TCBUTyIsICJ2YWx1ZSIsCisJCQkJCQkJIG5vZGUt Pm9sZFZhbCk7CisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJldCwgIiV7bmV3dmFsdWV9TCIsICJu ZXd2YWx1ZSIsIG5vZGUtPm5ld1ZhbCk7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAq IERlcGFyc2UgYW4gQWx0ZXJFeHRlbnNpb25TdG10IChBTFRFUiBFWFRFTlNJT04gLi4gVVBEQVRF IFRPIFZFUlNJT04pCisgKgorICogR2l2ZW4gYW4gZXh0ZW5zaW9uIE9JRCBhbmQgYSBwYXJzZSB0 cmVlIHRoYXQgbW9kaWZpZWQgaXQsIHJldHVybiBhbiBPYmpUcmVlCisgKiByZXByZXNlbnRpbmcg dGhlIGFsdGVyIHR5cGUuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIEFMVEVSIEVYVEVOU0lP TiAle2lkZW50aXR5fUkgVVBEQVRFICV7b3B0aW9uczogfXMKKyAqLworc3RhdGljIE9ialRyZWUg KgorZGVwYXJzZV9BbHRlckV4dGVuc2lvblN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRy ZWUpCit7CisJQWx0ZXJFeHRlbnNpb25TdG10ICpub2RlID0gKEFsdGVyRXh0ZW5zaW9uU3RtdCAq KSBwYXJzZXRyZWU7CisJUmVsYXRpb24JcGdfZXh0ZW5zaW9uOworCUhlYXBUdXBsZQlleHRUdXA7 CisJRm9ybV9wZ19leHRlbnNpb24gZXh0Rm9ybTsKKwlPYmpUcmVlICAgICpyZXQ7CisJTGlzdAkg ICAqbGlzdCA9IE5JTDsKKwlMaXN0Q2VsbCAgICpjZWxsOworCURlZkVsZW0gICAgKmRfbmV3X3Zl cnNpb24gPSBOVUxMOworCisJcGdfZXh0ZW5zaW9uID0gdGFibGVfb3BlbihFeHRlbnNpb25SZWxh dGlvbklkLCBBY2Nlc3NTaGFyZUxvY2spOworCWV4dFR1cCA9IGdldF9jYXRhbG9nX29iamVjdF9i eV9vaWQocGdfZXh0ZW5zaW9uLCBBbnVtX3BnX2V4dGVuc2lvbl9vaWQsIG9iamVjdElkKTsKKwlp ZiAoIUhlYXBUdXBsZUlzVmFsaWQoZXh0VHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1 cCBmYWlsZWQgZm9yIGV4dGVuc2lvbiB3aXRoIE9JRCAldSIsCisJCQkgb2JqZWN0SWQpOworCWV4 dEZvcm0gPSAoRm9ybV9wZ19leHRlbnNpb24pIEdFVFNUUlVDVChleHRUdXApOworCisJZm9yZWFj aChjZWxsLCBub2RlLT5vcHRpb25zKQorCXsKKwkJRGVmRWxlbSAgICAqb3B0ID0gKERlZkVsZW0g KikgbGZpcnN0KGNlbGwpOworCisJCWlmIChzdHJjbXAob3B0LT5kZWZuYW1lLCAibmV3X3ZlcnNp b24iKSA9PSAwKQorCQl7CisJCQlPYmpUcmVlICAgICp0bXA7CisKKwkJCWlmIChkX25ld192ZXJz aW9uKQorCQkJCWVsb2coRVJST1IsICJjb25mbGljdGluZyBvciByZWR1bmRhbnQgb3B0aW9ucyBm b3IgZXh0ZW5zaW9uIHdpdGggT0lEICV1IiwKKwkJCQkJIG9iamVjdElkKTsKKworCQkJZF9uZXdf dmVyc2lvbiA9IG9wdDsKKworCQkJdG1wID0gbmV3X29ianRyZWVfVkEoIlRPICV7dmVyc2lvbn1M IiwgMiwKKwkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgInZlcnNpb24iLAorCQkJCQkJ CQkgInZlcnNpb24iLCBPYmpUeXBlU3RyaW5nLCBkZWZHZXRTdHJpbmcob3B0KSk7CisJCQlsaXN0 ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwkJfQorCQllbHNlCisJ CQllbG9nKEVSUk9SLCAidW5zdXBwb3J0ZWQgb3B0aW9uICVzIiwgb3B0LT5kZWZuYW1lKTsKKwl9 CisKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgRVhURU5TSU9OICV7aWRlbnRpdHl9SSBV UERBVEUgJXtvcHRpb25zOiB9cyIsIDIsCisJCQkJCQkgImlkZW50aXR5IiwgT2JqVHlwZVN0cmlu ZywgTmFtZVN0cihleHRGb3JtLT5leHRuYW1lKSwKKwkJCQkJCSAib3B0aW9ucyIsIE9ialR5cGVB cnJheSwgbGlzdCk7CisKKwl0YWJsZV9jbG9zZShwZ19leHRlbnNpb24sIEFjY2Vzc1NoYXJlTG9j ayk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogRGVwYXJzZSBhbiBBbHRlckV4dGVuc2lv bkNvbnRlbnRzU3RtdCAoQUxURVIgRVhURU5TSU9OIGV4dCBBREQvRFJPUCBvYmplY3QpCisgKgor ICogVmVyYm9zZSBzeW50YXgKKyAqIEFMVEVSIEVYVEVOU0lPTiAle2V4dGlkZW50aXR5fUkgQURE L0RST1AgJXtvYmppZGVudGl0eX1zCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQWx0 ZXJFeHRlbnNpb25Db250ZW50c1N0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUsCisJ CQkJCQkJCSAgIE9iamVjdEFkZHJlc3Mgb2JqZWN0QWRkcmVzcykKK3sKKwlBbHRlckV4dGVuc2lv bkNvbnRlbnRzU3RtdCAqbm9kZSA9IChBbHRlckV4dGVuc2lvbkNvbnRlbnRzU3RtdCAqKSBwYXJz ZXRyZWU7CisKKwlBc3NlcnQobm9kZS0+YWN0aW9uID09ICsxIHx8IG5vZGUtPmFjdGlvbiA9PSAt MSk7CisKKwlyZXR1cm4gbmV3X29ianRyZWVfVkEoIkFMVEVSIEVYVEVOU0lPTiAle2V4dGlkZW50 aXR5fUkgJXtleHRvcHRpb259cyAle2V4dG9ianR5cGV9cyAle29iamlkZW50aXR5fXMiLCA0LAor CQkJCQkJICAiZXh0aWRlbnRpdHkiLCBPYmpUeXBlU3RyaW5nLCBub2RlLT5leHRuYW1lLAorCQkJ CQkJICAiZXh0b3B0aW9uIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCSAgbm9kZS0+YWN0aW9uID09 ICsxID8gIkFERCIgOiAiRFJPUCIsCisJCQkJCQkgICJleHRvYmp0eXBlIiwgT2JqVHlwZVN0cmlu ZywKKwkJCQkJCSAgc3RyaW5naWZ5X29ianR5cGUobm9kZS0+b2JqdHlwZSwgZmFsc2UpLAorCQkJ CQkJICAib2JqaWRlbnRpdHkiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJICBnZXRPYmplY3RJZGVu dGl0eSgmb2JqZWN0QWRkcmVzcywgZmFsc2UpKTsKK30KKworLyoKKyAqIERlcGFyc2UgYW4gQ3Jl YXRlQ2FzdFN0bXQuCisgKgorICogR2l2ZW4gYSBzZXF1ZW5jZSBPSUQgYW5kIGEgcGFyc2UgdHJl ZSB0aGF0IG1vZGlmaWVkIGl0LCByZXR1cm4gYW4gT2JqVHJlZQorICogcmVwcmVzZW50aW5nIHRo ZSBjcmVhdGlvbiBjb21tYW5kLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBDUkVBVEUgQ0FT VCAoJXtzb3VyY2V0eXBlfVQgQVMgJXt0YXJnZXR0eXBlfVQpICV7bWVjaGFuaXNtfXMgJXtjb250 ZXh0fXMKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9DcmVhdGVDYXN0U3RtdChPaWQg b2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlDcmVhdGVDYXN0U3RtdCAqbm9kZSA9IChD cmVhdGVDYXN0U3RtdCAqKSBwYXJzZXRyZWU7CisJUmVsYXRpb24JY2FzdHJlbDsKKwlIZWFwVHVw bGUJY2FzdFR1cDsKKwlGb3JtX3BnX2Nhc3QgY2FzdEZvcm07CisJT2JqVHJlZSAgICAqcmV0Owor CWNoYXIJICAgKmNvbnRleHQ7CisKKwljYXN0cmVsID0gdGFibGVfb3BlbihDYXN0UmVsYXRpb25J ZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwljYXN0VHVwID0gZ2V0X2NhdGFsb2dfb2JqZWN0X2J5X29p ZChjYXN0cmVsLCBBbnVtX3BnX2Nhc3Rfb2lkLCBvYmplY3RJZCk7CisJaWYgKCFIZWFwVHVwbGVJ c1ZhbGlkKGNhc3RUdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3Ig Y2FzdCB3aXRoIE9JRCAldSIsIG9iamVjdElkKTsKKwljYXN0Rm9ybSA9IChGb3JtX3BnX2Nhc3Qp IEdFVFNUUlVDVChjYXN0VHVwKTsKKworCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJDUkVBVEUgQ0FT VCAoJXtzb3VyY2V0eXBlfVQgQVMgJXt0YXJnZXR0eXBlfVQpIiwgMiwKKwkJCQkJCSAic291cmNl dHlwZSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3R5cGUoY2FzdEZv cm0tPmNhc3Rzb3VyY2UsIC0xKSwKKwkJCQkJCSAidGFyZ2V0dHlwZSIsIE9ialR5cGVPYmplY3Qs CisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3R5cGUoY2FzdEZvcm0tPmNhc3R0YXJnZXQsIC0xKSk7 CisKKwlpZiAobm9kZS0+aW5vdXQpCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJldCwgIiV7bWVj aGFuaXNtfXMiLCAibWVjaGFuaXNtIiwKKwkJCQkJCQkgIldJVEggSU5PVVQiKTsKKwllbHNlIGlm IChub2RlLT5mdW5jID09IE5VTEwpCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJldCwgIiV7bWVj aGFuaXNtfXMiLCAibWVjaGFuaXNtIiwKKwkJCQkJCQkgIldJVEhPVVQgRlVOQ1RJT04iKTsKKwll bHNlCisJeworCQlPYmpUcmVlICAgICp0bXBfb2JqOworCQlTdHJpbmdJbmZvRGF0YSBmdW5jOwor CQlIZWFwVHVwbGUJZnVuY1R1cDsKKwkJRm9ybV9wZ19wcm9jIGZ1bmNGb3JtOworCQlpbnQJCQlp OworCisJCWZ1bmNUdXAgPSBTZWFyY2hTeXNDYWNoZTEoUFJPQ09JRCwgY2FzdEZvcm0tPmNhc3Rm dW5jKTsKKwkJZnVuY0Zvcm0gPSAoRm9ybV9wZ19wcm9jKSBHRVRTVFJVQ1QoZnVuY1R1cCk7CisK KwkJaW5pdFN0cmluZ0luZm8oJmZ1bmMpOworCQlhcHBlbmRTdHJpbmdJbmZvKCZmdW5jLCAiJXMo IiwKKwkJCQkJCSBxdW90ZV9xdWFsaWZpZWRfaWRlbnRpZmllcihnZXRfbmFtZXNwYWNlX25hbWUo ZnVuY0Zvcm0tPnByb25hbWVzcGFjZSksCisJCQkJCQkJCQkJCQkJTmFtZVN0cihmdW5jRm9ybS0+ cHJvbmFtZSkpKTsKKwkJZm9yIChpID0gMDsgaSA8IGZ1bmNGb3JtLT5wcm9uYXJnczsgaSsrKQor CQl7CisJCQlpZiAoaSAhPSAwKQorCQkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKCZmdW5jLCAnLCcp OworCisJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZmdW5jLAorCQkJCQkJCQkgICBmb3JtYXRf dHlwZV9iZV9xdWFsaWZpZWQoZnVuY0Zvcm0tPnByb2FyZ3R5cGVzLnZhbHVlc1tpXSkpOworCQl9 CisJCWFwcGVuZFN0cmluZ0luZm9DaGFyKCZmdW5jLCAnKScpOworCisJCXRtcF9vYmogPSBuZXdf b2JqdHJlZV9WQSgiV0lUSCBGVU5DVElPTiAle2Nhc3RmdW5jdGlvbn1zIiwgMSwKKwkJCQkJCQkJ ImNhc3RmdW5jdGlvbiIsIE9ialR5cGVTdHJpbmcsIGZ1bmMuZGF0YSk7CisJCWFwcGVuZF9vYmpl Y3Rfb2JqZWN0KHJldCwgIiV7bWVjaGFuaXNtfXMiLCB0bXBfb2JqKTsKKworCQlSZWxlYXNlU3lz Q2FjaGUoZnVuY1R1cCk7CisJfQorCisJc3dpdGNoIChub2RlLT5jb250ZXh0KQorCXsKKwkJY2Fz ZSBDT0VSQ0lPTl9JTVBMSUNJVDoKKwkJCWNvbnRleHQgPSAiQVMgSU1QTElDSVQiOworCQkJYnJl YWs7CisJCWNhc2UgQ09FUkNJT05fQVNTSUdOTUVOVDoKKwkJCWNvbnRleHQgPSAiQVMgQVNTSUdO TUVOVCI7CisJCQlicmVhazsKKwkJY2FzZSBDT0VSQ0lPTl9FWFBMSUNJVDoKKwkJCWNvbnRleHQg PSAiIjsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZWxvZyhFUlJPUiwgImludmFsaWQgY29l cmNpb24gY29kZSAlYyIsIG5vZGUtPmNvbnRleHQpOworCQkJcmV0dXJuIE5VTEw7CQkvKiBrZWVw IGNvbXBpbGVyIHF1aWV0ICovCisJfQorCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJldCwgIiV7Y29u dGV4dH1zIiwgImNvbnRleHQiLCBjb250ZXh0KTsKKworCXRhYmxlX2Nsb3NlKGNhc3RyZWwsIEFj Y2Vzc1NoYXJlTG9jayk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogRGVwYXJzZSBhbiBB TFRFUiBERUZBVUxUIFBSSVZJTEVHRVMgc3RhdGVtZW50LgorICoKKyAqIFZlcmJvc2Ugc3ludGF4 CisgKiBBTFRFUiBERUZBVUxUIFBSSVZJTEVHRVMgJXtpbl9zY2hlbWF9cyAle2Zvcl9yb2xlc31z ICV7Z3JhbnR9cworICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0FsdGVyRGVmYXVsdFBy aXZpbGVnZXNTdG10KENvbGxlY3RlZENvbW1hbmQgKmNtZCkKK3sKKwlPYmpUcmVlICAgICpyZXQ7 CisJQWx0ZXJEZWZhdWx0UHJpdmlsZWdlc1N0bXQgKnN0bXQgPSAoQWx0ZXJEZWZhdWx0UHJpdmls ZWdlc1N0bXQgKikgY21kLT5wYXJzZXRyZWU7CisJTGlzdAkgICAqcm9sZXMgPSBOSUw7CisJTGlz dAkgICAqc2NoZW1hcyA9IE5JTDsKKwlMaXN0CSAgICpncmFudGVlczsKKwlMaXN0CSAgICpwcml2 czsKKwlMaXN0Q2VsbCAgICpjZWxsOworCU9ialRyZWUgICAgKnRtcDsKKwlPYmpUcmVlICAgICpn cmFudDsKKwljaGFyCSAgICpvYmp0eXBlOworCisJcmV0ID0gbmV3X29ianRyZWUoIkFMVEVSIERF RkFVTFQgUFJJVklMRUdFUyIpOworCisJLyogU2NhbiB0aGUgcGFyc2Ugbm9kZSB0byBkaWcgb3V0 IHRoZSBGT1IgUk9MRSBhbmQgSU4gU0NIRU1BIGNsYXVzZXMgKi8KKwlmb3JlYWNoKGNlbGwsIHN0 bXQtPm9wdGlvbnMpCisJeworCQlEZWZFbGVtICAgICpvcHQgPSAoRGVmRWxlbSAqKSBsZmlyc3Qo Y2VsbCk7CisJCUxpc3RDZWxsICAgKmNlbGwyOworCisJCUFzc2VydChJc0Eob3B0LCBEZWZFbGVt KSk7CisJCUFzc2VydChJc0Eob3B0LT5hcmcsIExpc3QpKTsKKwkJaWYgKHN0cmNtcChvcHQtPmRl Zm5hbWUsICJyb2xlcyIpID09IDApCisJCXsKKwkJCWZvcmVhY2goY2VsbDIsIChMaXN0ICopIG9w dC0+YXJnKQorCQkJeworCQkJCVJvbGVTcGVjICAgKnJvbGVzcGVjID0gbGZpcnN0KGNlbGwyKTsK KwkJCQlPYmpUcmVlICAgICpvYmogPSBuZXdfb2JqdHJlZV9mb3Jfcm9sZXNwZWMocm9sZXNwZWMp OworCisJCQkJcm9sZXMgPSBsYXBwZW5kKHJvbGVzLCBuZXdfb2JqZWN0X29iamVjdChvYmopKTsK KwkJCX0KKwkJfQorCQllbHNlIGlmIChzdHJjbXAob3B0LT5kZWZuYW1lLCAic2NoZW1hcyIpID09 IDApCisJCXsKKwkJCWZvcmVhY2goY2VsbDIsIChMaXN0ICopIG9wdC0+YXJnKQorCQkJeworCQkJ CVN0cmluZwkgICAqdmFsID0gbGZpcnN0X25vZGUoU3RyaW5nLCBjZWxsMik7CisKKwkJCQlzY2hl bWFzID0gbGFwcGVuZChzY2hlbWFzLCBuZXdfc3RyaW5nX29iamVjdChzdHJWYWwodmFsKSkpOwor CQkJfQorCQl9CisJfQorCisJLyogQWRkIHRoZSBJTiBTQ0hFTUEgY2xhdXNlLCBpZiBhbnkgKi8K Kwl0bXAgPSBuZXdfb2JqdHJlZSgiSU4gU0NIRU1BIik7CisJYXBwZW5kX2FycmF5X29iamVjdCh0 bXAsICIle3NjaGVtYXM6LCB9SSIsIHNjaGVtYXMpOworCWlmIChzY2hlbWFzID09IE5JTCkKKwkJ YXBwZW5kX25vdF9wcmVzZW50KHRtcCk7CisJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiJXtp bl9zY2hlbWF9cyIsIHRtcCk7CisKKwkvKiBBZGQgdGhlIEZPUiBST0xFIGNsYXVzZSwgaWYgYW55 ICovCisJdG1wID0gbmV3X29ianRyZWUoIkZPUiBST0xFIik7CisJYXBwZW5kX2FycmF5X29iamVj dCh0bXAsICIle3JvbGVzOiwgfVIiLCByb2xlcyk7CisJaWYgKHJvbGVzID09IE5JTCkKKwkJYXBw ZW5kX25vdF9wcmVzZW50KHRtcCk7CisJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiJXtmb3Jf cm9sZXN9cyIsIHRtcCk7CisKKwkvKgorCSAqIEFkZCB0aGUgR1JBTlQgc3ViY29tbWFuZAorCSAq IFZlcmJvc2Ugc3ludGF4CisJICogR1JBTlQgJXtwcml2aWxlZ2VzOiwgfXMgT04gJXt0YXJnZXR9 cyBUTyAle2dyYW50ZWVzOiwgfVIgJXtncmFudF9vcHRpb259cworCSAqIG9yCisJICogUkVWT0tF ICV7Z3JhbnRfb3B0aW9ufXMgJXtwcml2aWxlZ2VzOiwgfXMgT04gJXt0YXJnZXR9cyBGUk9NICV7 Z3JhbnRlZXM6LCB9UgorCSAqLworCWlmIChzdG10LT5hY3Rpb24tPmlzX2dyYW50KQorCQlncmFu dCA9IG5ld19vYmp0cmVlKCJHUkFOVCIpOworCWVsc2UKKwl7CisJCWdyYW50ID0gbmV3X29ianRy ZWUoIlJFVk9LRSIpOworCisJCS8qIEFkZCB0aGUgR1JBTlQgT1BUSU9OIGNsYXVzZSBmb3IgUkVW T0tFIHN1YmNvbW1hbmQgKi8KKwkJdG1wID0gbmV3X29ianRyZWVfVkEoIkdSQU5UIE9QVElPTiBG T1IiLCAxLAorCQkJCQkJCSAicHJlc2VudCIsIE9ialR5cGVCb29sLAorCQkJCQkJCSBzdG10LT5h Y3Rpb24tPmdyYW50X29wdGlvbik7CisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGdyYW50LCAiJXtn cmFudF9vcHRpb259cyIsIHRtcCk7CisJfQorCisJLyoKKwkgKiBBZGQgdGhlIHByaXZpbGVnZXMg bGlzdC4gIFRoaXMgdXNlcyB0aGUgcGFyc2VyIHN0cnVjdCwgYXMgb3Bwb3NlZCB0bworCSAqIHRo ZSBJbnRlcm5hbEdyYW50IGZvcm1hdCB1c2VkIGJ5IEdSQU5ULiAgVGhlcmUgYXJlIGVub3VnaCBv dGhlcgorCSAqIGRpZmZlcmVuY2VzIHRoYXQgdGhpcyBkb2Vzbid0IHNlZW0gd29ydGggaW1wcm92 aW5nLgorCSAqLworCWlmIChzdG10LT5hY3Rpb24tPnByaXZpbGVnZXMgPT0gTklMKQorCQlwcml2 cyA9IGxpc3RfbWFrZTEobmV3X3N0cmluZ19vYmplY3QoIkFMTCBQUklWSUxFR0VTIikpOworCWVs c2UKKwl7CisJCXByaXZzID0gTklMOworCisJCWZvcmVhY2goY2VsbCwgc3RtdC0+YWN0aW9uLT5w cml2aWxlZ2VzKQorCQl7CisJCQlBY2Nlc3NQcml2ICpwcml2ID0gbGZpcnN0KGNlbGwpOworCisJ CQlBc3NlcnQocHJpdi0+Y29scyA9PSBOSUwpOworCQkJcHJpdnMgPSBsYXBwZW5kKHByaXZzLCBu ZXdfc3RyaW5nX29iamVjdChwcml2LT5wcml2X25hbWUpKTsKKwkJfQorCX0KKworCWFwcGVuZF9h cnJheV9vYmplY3QoZ3JhbnQsICIle3ByaXZpbGVnZXM6LCB9cyIsIHByaXZzKTsKKworCXN3aXRj aCAoY21kLT5kLmRlZnByaXZzLm9ianR5cGUpCisJeworCQljYXNlIE9CSkVDVF9UQUJMRToKKwkJ CW9ianR5cGUgPSAiVEFCTEVTIjsKKwkJCWJyZWFrOworCQljYXNlIE9CSkVDVF9GVU5DVElPTjoK KwkJCW9ianR5cGUgPSAiRlVOQ1RJT05TIjsKKwkJCWJyZWFrOworCQljYXNlIE9CSkVDVF9ST1VU SU5FOgorCQkJb2JqdHlwZSA9ICJST1VUSU5FUyI7CisJCQlicmVhazsKKwkJY2FzZSBPQkpFQ1Rf U0VRVUVOQ0U6CisJCQlvYmp0eXBlID0gIlNFUVVFTkNFUyI7CisJCQlicmVhazsKKwkJY2FzZSBP QkpFQ1RfVFlQRToKKwkJCW9ianR5cGUgPSAiVFlQRVMiOworCQkJYnJlYWs7CisJCWNhc2UgT0JK RUNUX1NDSEVNQToKKwkJCW9ianR5cGUgPSAiU0NIRU1BUyI7CisJCQlicmVhazsKKwkJZGVmYXVs dDoKKwkJCWVsb2coRVJST1IsICJpbnZhbGlkIE9CSkVDVCB2YWx1ZSAlZCBmb3IgZGVmYXVsdCBw cml2aWxlZ2VzIiwgY21kLT5kLmRlZnByaXZzLm9ianR5cGUpOworCX0KKworCS8qIEFkZCB0aGUg dGFyZ2V0IG9iamVjdCB0eXBlICovCisJYXBwZW5kX3N0cmluZ19vYmplY3QoZ3JhbnQsICJPTiAl e3RhcmdldH1zIiwgInRhcmdldCIsIG9ianR5cGUpOworCisJLyogQWRkIHRoZSBncmFudGVlIGxp c3QgKi8KKwlncmFudGVlcyA9IE5JTDsKKwlmb3JlYWNoKGNlbGwsIHN0bXQtPmFjdGlvbi0+Z3Jh bnRlZXMpCisJeworCQlSb2xlU3BlYyAgICpzcGVjID0gKFJvbGVTcGVjICopIGxmaXJzdChjZWxs KTsKKwkJT2JqVHJlZSAgICAqb2JqID0gbmV3X29ianRyZWVfZm9yX3JvbGVzcGVjKHNwZWMpOwor CisJCWdyYW50ZWVzID0gbGFwcGVuZChncmFudGVlcywgbmV3X29iamVjdF9vYmplY3Qob2JqKSk7 CisJfQorCisJaWYgKHN0bXQtPmFjdGlvbi0+aXNfZ3JhbnQpCisJeworCQlhcHBlbmRfYXJyYXlf b2JqZWN0KGdyYW50LCAiVE8gJXtncmFudGVlczosIH1SIiwgZ3JhbnRlZXMpOworCisJCS8qIEFk ZCB0aGUgV0lUSCBHUkFOVCBPUFRJT04gY2xhdXNlIGZvciBHUkFOVCBzdWJjb21tYW5kICovCisJ CXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJXSVRIIEdSQU5UIE9QVElPTiIsIDEsCisJCQkJCQkJICJw cmVzZW50IiwgT2JqVHlwZUJvb2wsCisJCQkJCQkJIHN0bXQtPmFjdGlvbi0+Z3JhbnRfb3B0aW9u KTsKKwkJYXBwZW5kX29iamVjdF9vYmplY3QoZ3JhbnQsICIle2dyYW50X29wdGlvbn1zIiwgdG1w KTsKKwl9CisJZWxzZQorCQlhcHBlbmRfYXJyYXlfb2JqZWN0KGdyYW50LCAiRlJPTSAle2dyYW50 ZWVzOiwgfVIiLCBncmFudGVlcyk7CisKKwlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICIle2dy YW50fXMiLCBncmFudCk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogRGVwYXJzZSB0aGUg Q1JFQVRFIERPTUFJTgorICoKKyAqIEdpdmVuIGEgZnVuY3Rpb24gT0lEIGFuZCB0aGUgcGFyc2Ug dHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVybiBhbiBPYmpUcmVlCisgKiByZXByZXNlbnRpbmcg dGhlIGNyZWF0aW9uIGNvbW1hbmQuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIENSRUFURSBE T01BSU4gJXtpZGVudGl0eX1EIEFTICV7dHlwZX1UICV7bm90X251bGx9cyAle2NvbnN0cmFpbnRz fXMKKyAqICV7Y29sbGF0aW9ufXMKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9DcmVh dGVEb21haW4oT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJT2JqVHJlZSAgICAq cmV0OworCU9ialRyZWUgICAgKnRtcF9vYmo7CisJSGVhcFR1cGxlCXR5cFR1cDsKKwlGb3JtX3Bn X3R5cGUgdHlwRm9ybTsKKwlMaXN0CSAgICpjb25zdHJhaW50czsKKwljaGFyCSAgICpkZWZ2YWw7 CisKKwl0eXBUdXAgPSBTZWFyY2hTeXNDYWNoZTEoVFlQRU9JRCwgb2JqZWN0SWQpOworCWlmICgh SGVhcFR1cGxlSXNWYWxpZCh0eXBUdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZh aWxlZCBmb3IgZG9tYWluIHdpdGggT0lEICV1Iiwgb2JqZWN0SWQpOworCXR5cEZvcm0gPSAoRm9y bV9wZ190eXBlKSBHRVRTVFJVQ1QodHlwVHVwKTsKKworCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJD UkVBVEUgRE9NQUlOICV7aWRlbnRpdHl9RCBBUyAle3R5cGV9VCAle25vdF9udWxsfXMiLCAzLAor CQkJCQkJICJpZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkgbmV3X29ianRyZWVfZm9y X3F1YWxuYW1lX2lkKFR5cGVSZWxhdGlvbklkLCBvYmplY3RJZCksCisJCQkJCQkgInR5cGUiLCBP YmpUeXBlT2JqZWN0LAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl90eXBlKHR5cEZvcm0tPnR5cGJh c2V0eXBlLAorCQkJCQkJCQkJCQkgIHR5cEZvcm0tPnR5cHR5cG1vZCksCisJCQkJCQkgIm5vdF9u dWxsIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCSB0eXBGb3JtLT50eXBub3RudWxsID8gIk5PVCBO VUxMIiA6ICIiKTsKKworCWNvbnN0cmFpbnRzID0gb2J0YWluQ29uc3RyYWludHMoTklMLCBJbnZh bGlkT2lkLCBvYmplY3RJZCk7CisJaWYgKGNvbnN0cmFpbnRzID09IE5JTCkKKwl7CisJCXRtcF9v YmogPSBuZXdfb2JqdHJlZSgiIik7CisJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXBfb2JqKTsKKwl9 CisJZWxzZQorCQl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIiV7ZWxlbWVudHM6LCB9cyIsIDEs CisJCQkJCQkJCSJlbGVtZW50cyIsIE9ialR5cGVBcnJheSwgY29uc3RyYWludHMpOworCWFwcGVu ZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7Y29uc3RyYWludHN9cyIsIHRtcF9vYmopOworCisJdG1w X29iaiA9IG5ld19vYmp0cmVlKCJDT0xMQVRFIik7CisJaWYgKE9pZElzVmFsaWQodHlwRm9ybS0+ dHlwY29sbGF0aW9uKSkKKwl7CisJCU9ialRyZWUgICAgKmNvbGxuYW1lOworCisJCWNvbGxuYW1l ID0gbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKENvbGxhdGlvblJlbGF0aW9uSWQsCisJCQkJ CQkJCQkJCSAgIHR5cEZvcm0tPnR5cGNvbGxhdGlvbik7CisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0 KHRtcF9vYmosICIle25hbWV9RCIsIGNvbGxuYW1lKTsKKwl9CisJZWxzZQorCQlhcHBlbmRfbm90 X3ByZXNlbnQodG1wX29iaik7CisJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiJXtjb2xsYXRp b259cyIsIHRtcF9vYmopOworCisJZGVmdmFsID0gRG9tYWluR2V0RGVmYXVsdCh0eXBUdXAsIHRy dWUpOworCWlmIChkZWZ2YWwpCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJldCwgIkRFRkFVTFQg JXtkZWZhdWx0fXMiLCAiZGVmYXVsdCIsIGRlZnZhbCk7CisKKwlSZWxlYXNlU3lzQ2FjaGUodHlw VHVwKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgQ3JlYXRlRnVuY3Rp b25TdG10IChDUkVBVEUgRlVOQ1RJT04pCisgKgorICogR2l2ZW4gYSBmdW5jdGlvbiBPSUQgYW5k IHRoZSBwYXJzZSB0cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0dXJuIGFuIE9ialRyZWUKKyAqIHJl cHJlc2VudGluZyB0aGUgY3JlYXRpb24gY29tbWFuZC4KKyAqCisgKiBWZXJib3NlIHN5bnRheAor ICoKKyAqIENSRUFURSAle29yX3JlcGxhY2V9cyBGVU5DVElPTiAle3NpZ25hdHVyZX1zIFJFVFVS TlMgJXtyZXR1cm5fdHlwZX1zCisgKiBMQU5HVUFHRSAle3RyYW5zZm9ybV90eXBlfXMgJXtsYW5n dWFnZX1JICV7d2luZG93fXMgJXt2b2xhdGlsaXR5fXMKKyAqICV7cGFyYWxsZWxfc2FmZXR5fXMg JXtsZWFrcHJvb2Z9cyAle3N0cmljdH1zICV7c2VjdXJpdHlfZGVmaW5lcn1zCisgKiAle2Nvc3R9 cyAle3Jvd3N9cyAle3N1cHBvcnR9cyAle3NldF9vcHRpb25zOiB9cyBBUyAle29iamZpbGV9TCwK KyAqICV7c3ltYm9sfUwKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9DcmVhdGVGdW5j dGlvbihPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlDcmVhdGVGdW5jdGlvblN0 bXQgKm5vZGUgPSAoQ3JlYXRlRnVuY3Rpb25TdG10ICopIHBhcnNldHJlZTsKKwlPYmpUcmVlICAg ICpyZXQ7CisJT2JqVHJlZSAgICAqdG1wX29iajsKKwlEYXR1bQkJdG1wZGF0dW07CisJY2hhcgkg ICAqc291cmNlOworCWNoYXIJICAgKnByb2JpbiA9IE5VTEw7CisJTGlzdAkgICAqcGFyYW1zOwor CUxpc3QJICAgKmRlZmF1bHRzOworCUxpc3QJICAgKnNldHMgPSBOSUw7CisJTGlzdAkgICAqdHlw ZXMgPSBOSUw7CisJTGlzdENlbGwgICAqY2VsbDsKKwlMaXN0Q2VsbCAgICpjdXJkZWY7CisJTGlz dENlbGwgICAqdGFibGVfcGFyYW1zID0gTlVMTDsKKwlIZWFwVHVwbGUJcHJvY1R1cDsKKwlGb3Jt X3BnX3Byb2MgcHJvY0Zvcm07CisJSGVhcFR1cGxlCWxhbmdUdXA7CisJT2lkCQkgICAqdHlwYXJy YXk7CisJT2lkCQkgICAqdHJmdHlwZXM7CisJRm9ybV9wZ19sYW5ndWFnZSBsYW5nRm9ybTsKKwlp bnQJCQlpOworCWludAkJCXR5cG51bTsKKwlpbnQJCQludHlwZXM7CisJaW50CQkJcGFyYW1jb3Vu dCA9IGxpc3RfbGVuZ3RoKG5vZGUtPnBhcmFtZXRlcnMpOworCWJvb2wJCWlzbnVsbDsKKwlib29s CQlpc2Z1bmN0aW9uOworCisJLyogR2V0IHRoZSBwZ19wcm9jIHR1cGxlICovCisJcHJvY1R1cCA9 IFNlYXJjaFN5c0NhY2hlMShQUk9DT0lELCBvYmplY3RJZCk7CisJaWYgKCFIZWFwVHVwbGVJc1Zh bGlkKHByb2NUdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgZnVu Y3Rpb24gd2l0aCBPSUQgJXUiLAorCQkJIG9iamVjdElkKTsKKwlwcm9jRm9ybSA9IChGb3JtX3Bn X3Byb2MpIEdFVFNUUlVDVChwcm9jVHVwKTsKKworCS8qIEdldCB0aGUgY29ycmVzcG9uZGluZyBw Z19sYW5ndWFnZSB0dXBsZSAqLworCWxhbmdUdXAgPSBTZWFyY2hTeXNDYWNoZTEoTEFOR09JRCwg cHJvY0Zvcm0tPnByb2xhbmcpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChsYW5nVHVwKSkKKwkJ ZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIGxhbmd1YWdlIHdpdGggT0lEICV1 IiwKKwkJCSBwcm9jRm9ybS0+cHJvbGFuZyk7CisJbGFuZ0Zvcm0gPSAoRm9ybV9wZ19sYW5ndWFn ZSkgR0VUU1RSVUNUKGxhbmdUdXApOworCisJLyoKKwkgKiBEZXRlcm1pbmUgdXNlZnVsIHZhbHVl cyBmb3IgcHJvc3JjIGFuZCBwcm9iaW4uICBXZSBjb3BlIHdpdGggcHJvYmluCisJICogYmVpbmcg ZWl0aGVyIE5VTEwgb3IgIi0iLCBidXQgcHJvc3JjIG11c3QgaGF2ZSBhIHZhbGlkIHZhbHVlLgor CSAqLworCXRtcGRhdHVtID0gU3lzQ2FjaGVHZXRBdHRyKFBST0NPSUQsIHByb2NUdXAsCisJCQkJ CQkJICAgQW51bV9wZ19wcm9jX3Byb3NyYywgJmlzbnVsbCk7CisJaWYgKGlzbnVsbCkKKwkJZWxv ZyhFUlJPUiwgIm51bGwgcHJvc3JjIGluIGZ1bmN0aW9uIHdpdGggT0lEICV1Iiwgb2JqZWN0SWQp OworCXNvdXJjZSA9IFRleHREYXR1bUdldENTdHJpbmcodG1wZGF0dW0pOworCisJLyogRGV0ZXJt aW5lIGEgdXNlZnVsIHZhbHVlIGZvciBwcm9iaW4gKi8KKwl0bXBkYXR1bSA9IFN5c0NhY2hlR2V0 QXR0cihQUk9DT0lELCBwcm9jVHVwLAorCQkJCQkJCSAgIEFudW1fcGdfcHJvY19wcm9iaW4sICZp c251bGwpOworCWlmICghaXNudWxsKQorCXsKKwkJcHJvYmluID0gVGV4dERhdHVtR2V0Q1N0cmlu Zyh0bXBkYXR1bSk7CisJCWlmIChwcm9iaW5bMF0gPT0gJ1wwJyB8fCBzdHJjbXAocHJvYmluLCAi LSIpID09IDApCisJCQlwcm9iaW4gPSBOVUxMOworCX0KKworCXJldCA9IG5ld19vYmp0cmVlX1ZB KCJDUkVBVEUgJXtvcl9yZXBsYWNlfXMiLCAxLAorCQkJCQkJICJvcl9yZXBsYWNlIiwgT2JqVHlw ZVN0cmluZywKKwkJCQkJCSBub2RlLT5yZXBsYWNlID8gIk9SIFJFUExBQ0UiIDogIiIpOworCisJ LyoKKwkgKiBUbyBjb25zdHJ1Y3QgdGhlIGFyZ3VtZW50cyBhcnJheSwgZXh0cmFjdCB0aGUgdHlw ZSBPSURzIGZyb20gdGhlCisJICogZnVuY3Rpb24ncyBwZ19wcm9jIGVudHJ5LiAgSWYgcHJvbmFy Z3MgZXF1YWxzIHRoZSBwYXJhbWV0ZXIgbGlzdAorCSAqIGxlbmd0aCwgdGhlcmUgYXJlIG5vIE9V VCBwYXJhbWV0ZXJzIGFuZCB0aHVzIHdlIGNhbiBleHRyYWN0IHRoZSB0eXBlCisJICogT0lEIGZy b20gcHJvYXJndHlwZXM7IG90aGVyd2lzZSB3ZSBuZWVkIHRvIGRlY29kZSBwcm9hbGxhcmd0eXBl cywgd2hpY2gKKwkgKiBpcyBhIGJpdCBtb3JlIGludm9sdmVkLgorCSAqLworCXR5cGFycmF5ID0g cGFsbG9jKHBhcmFtY291bnQgKiBzaXplb2YoT2lkKSk7CisJaWYgKHBhcmFtY291bnQgPiBwcm9j Rm9ybS0+cHJvbmFyZ3MpCisJeworCQlEYXR1bQkJYWxsdHlwZXM7CisJCURhdHVtCSAgICp2YWx1 ZXM7CisJCWJvb2wJICAgKm51bGxzOworCQlpbnQJCQluZWxlbXM7CisKKwkJYWxsdHlwZXMgPSBT eXNDYWNoZUdldEF0dHIoUFJPQ09JRCwgcHJvY1R1cCwKKwkJCQkJCQkJICAgQW51bV9wZ19wcm9j X3Byb2FsbGFyZ3R5cGVzLCAmaXNudWxsKTsKKwkJaWYgKGlzbnVsbCkKKwkJCWVsb2coRVJST1Is ICJudWxsIHByb2FsbGFyZ3R5cGVzLCBtb3JlIG51bWJlciBvZiBwYXJhbWV0ZXJzIHRoYW4gYXJn cyBpbiBmdW5jdGlvbiB3aXRoIE9JRCAldSIsCisJCQkJIG9iamVjdElkKTsKKwkJZGVjb25zdHJ1 Y3RfYXJyYXkoRGF0dW1HZXRBcnJheVR5cGVQKGFsbHR5cGVzKSwKKwkJCQkJCSAgT0lET0lELCA0 LCAndCcsICdpJywKKwkJCQkJCSAgJnZhbHVlcywgJm51bGxzLCAmbmVsZW1zKTsKKwkJaWYgKG5l bGVtcyAhPSBwYXJhbWNvdW50KQorCQkJZWxvZyhFUlJPUiwgIm1pc21hdGNoZWQgcHJvYWxsYXJn YXR5cGVzIik7CisJCWZvciAoaSA9IDA7IGkgPCBwYXJhbWNvdW50OyBpKyspCisJCQl0eXBhcnJh eVtpXSA9IHZhbHVlc1tpXTsKKwl9CisJZWxzZQorCXsKKwkJZm9yIChpID0gMDsgaSA8IHBhcmFt Y291bnQ7IGkrKykKKwkJCXR5cGFycmF5W2ldID0gcHJvY0Zvcm0tPnByb2FyZ3R5cGVzLnZhbHVl c1tpXTsKKwl9CisKKwkvKgorCSAqIElmIHRoZXJlIGFyZSBhbnkgZGVmYXVsdCBleHByZXNzaW9u cywgd2UgcmVhZCB0aGUgZGVwYXJzZWQgZXhwcmVzc2lvbgorCSAqIGFzIGEgbGlzdCBzbyB0aGF0 IHdlIGNhbiBhdHRhY2ggdGhlbSB0byBlYWNoIGFyZ3VtZW50LgorCSAqLworCXRtcGRhdHVtID0g U3lzQ2FjaGVHZXRBdHRyKFBST0NPSUQsIHByb2NUdXAsCisJCQkJCQkJICAgQW51bV9wZ19wcm9j X3Byb2FyZ2RlZmF1bHRzLCAmaXNudWxsKTsKKwlpZiAoIWlzbnVsbCkKKwl7CisJCWRlZmF1bHRz ID0gRnVuY3Rpb25HZXREZWZhdWx0cyhEYXR1bUdldFRleHRQKHRtcGRhdHVtKSk7CisJCWN1cmRl ZiA9IGxpc3RfaGVhZChkZWZhdWx0cyk7CisJfQorCWVsc2UKKwl7CisJCWRlZmF1bHRzID0gTklM OworCQljdXJkZWYgPSBOVUxMOworCX0KKworCS8qCisJICogTm93IGl0ZXJhdGUgb3ZlciBlYWNo IHBhcmFtZXRlciBpbiB0aGUgcGFyc2UgdHJlZSB0byBjcmVhdGUgdGhlCisJICogcGFyYW1ldGVy cyBhcnJheS4KKwkgKi8KKwlwYXJhbXMgPSBOSUw7CisJdHlwbnVtID0gMDsKKwlmb3JlYWNoKGNl bGwsIG5vZGUtPnBhcmFtZXRlcnMpCisJeworCQlGdW5jdGlvblBhcmFtZXRlciAqcGFyYW0gPSAo RnVuY3Rpb25QYXJhbWV0ZXIgKikgbGZpcnN0KGNlbGwpOworCQlPYmpUcmVlICAgICpwYXJhbV9v Ymo7CisJCU9ialRyZWUgICAgKmRlZmF1bHR2YWw7CisJCU9ialRyZWUgICAgKm5hbWU7CisKKwkJ LyoKKwkJICogQSBQQVJBTV9UQUJMRSBwYXJhbWV0ZXIgaW5kaWNhdGVzIHRoZSBlbmQgb2YgaW5w dXQgYXJndW1lbnRzOyB0aGUKKwkJICogZm9sbG93aW5nIHBhcmFtZXRlcnMgYXJlIHBhcnQgb2Yg dGhlIHJldHVybiB0eXBlLiAgV2UgaWdub3JlIHRoZW0KKwkJICogaGVyZSwgYnV0IGtlZXAgdHJh Y2sgb2YgdGhlIGN1cnJlbnQgcG9zaXRpb24gaW4gdGhlIGxpc3Qgc28gdGhhdCB3ZQorCQkgKiBj YW4gZWFzaWx5IHByb2R1Y2UgdGhlIHJldHVybiB0eXBlIGJlbG93LgorCQkgKi8KKwkJaWYgKHBh cmFtLT5tb2RlID09IEZVTkNfUEFSQU1fVEFCTEUpCisJCXsKKwkJCXRhYmxlX3BhcmFtcyA9IGNl bGw7CisJCQlicmVhazsKKwkJfQorCisJCS8qCisJCSAqIFZlcmJvc2Ugc3ludGF4IGZvciBwYXJh bWF0ZXI6ICV7bW9kZX1zICV7bmFtZX1zICV7dHlwZX1UCisJCSAqICV7ZGVmYXVsdH1zCisJCSAq LworCQlwYXJhbV9vYmogPSBuZXdfb2JqdHJlZV9WQSgiJXttb2RlfXMiLCAxLAorCQkJCQkJCQkg ICJtb2RlIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJICBwYXJhbS0+bW9kZSA9PSBGVU5DX1BB UkFNX09VVCA/ICJPVVQiIDoKKwkJCQkJCQkJICBwYXJhbS0+bW9kZSA9PSBGVU5DX1BBUkFNX0lO T1VUID8gIklOT1VUIiA6CisJCQkJCQkJCSAgcGFyYW0tPm1vZGUgPT0gRlVOQ19QQVJBTV9WQVJJ QURJQyA/ICJWQVJJQURJQyIgOgorCQkJCQkJCQkgICJJTiIpOworCisJCS8qIE9wdGlvbmFsIHdo b2xlc2FsZSBzdXBwcmVzc2lvbiBvZiAibmFtZSIgb2NjdXJzIGhlcmUgKi8KKwkJbmFtZSA9IG5l d19vYmp0cmVlKCIiKTsKKwkJaWYgKHBhcmFtLT5uYW1lKQorCQkJYXBwZW5kX3N0cmluZ19vYmpl Y3QobmFtZSwgIiV7bmFtZX1JIiwgIm5hbWUiLCBwYXJhbS0+bmFtZSk7CisJCWVsc2UKKwkJewor CQkJYXBwZW5kX251bGxfb2JqZWN0KG5hbWUsICIle25hbWV9SSIpOworCQkJYXBwZW5kX25vdF9w cmVzZW50KG5hbWUpOworCQl9CisKKwkJYXBwZW5kX29iamVjdF9vYmplY3QocGFyYW1fb2JqLCAi JXtuYW1lfXMiLCBuYW1lKTsKKworCQlkZWZhdWx0dmFsID0gbmV3X29ianRyZWUoIkRFRkFVTFQi KTsKKwkJaWYgKFBvaW50ZXJJc1ZhbGlkKHBhcmFtLT5kZWZleHByKSkKKwkJeworCQkJY2hhcgkg ICAqZXhwcjsKKworCQkJaWYgKGN1cmRlZiA9PSBOVUxMKQorCQkJCWVsb2coRVJST1IsICJwcm9h cmdkZWZhdWx0cyBsaXN0IHRvbyBzaG9ydCIpOworCQkJZXhwciA9IGxmaXJzdChjdXJkZWYpOwor CisJCQlhcHBlbmRfc3RyaW5nX29iamVjdChkZWZhdWx0dmFsLCAiJXt2YWx1ZX1zIiwgInZhbHVl IiwgZXhwcik7CisJCQljdXJkZWYgPSBsbmV4dChkZWZhdWx0cywgY3VyZGVmKTsKKwkJfQorCQll bHNlCisJCQlhcHBlbmRfbm90X3ByZXNlbnQoZGVmYXVsdHZhbCk7CisKKwkJYXBwZW5kX29iamVj dF9vYmplY3QocGFyYW1fb2JqLCAiJXt0eXBlfVQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3Jf dHlwZSh0eXBhcnJheVt0eXBudW0rK10sIC0xKSk7CisKKwkJYXBwZW5kX29iamVjdF9vYmplY3Qo cGFyYW1fb2JqLCAiJXtkZWZhdWx0fXMiLCBkZWZhdWx0dmFsKTsKKworCQlwYXJhbXMgPSBsYXBw ZW5kKHBhcmFtcywgbmV3X29iamVjdF9vYmplY3QocGFyYW1fb2JqKSk7CisJfQorCisJdG1wX29i aiA9IG5ld19vYmp0cmVlX1ZBKCIle2lkZW50aXR5fUQiLCAxLAorCQkJCQkJCSJpZGVudGl0eSIs IE9ialR5cGVPYmplY3QsCisJCQkJCQkJbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2Nl ZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCW9iamVjdElkKSk7CisKKwlhcHBlbmRfZm9y bWF0X3N0cmluZyh0bXBfb2JqLCAiKCIpOworCWFwcGVuZF9hcnJheV9vYmplY3QodG1wX29iaiwg IiV7YXJndW1lbnRzOiwgfXMiLCBwYXJhbXMpOworCWFwcGVuZF9mb3JtYXRfc3RyaW5nKHRtcF9v YmosICIpIik7CisKKwlpc2Z1bmN0aW9uID0gKHByb2NGb3JtLT5wcm9raW5kICE9IFBST0tJTkRf UFJPQ0VEVVJFKTsKKworCWlmIChpc2Z1bmN0aW9uKQorCQlhcHBlbmRfb2JqZWN0X29iamVjdChy ZXQsICJGVU5DVElPTiAle3NpZ25hdHVyZX1zIiwgdG1wX29iaik7CisJZWxzZQorCQlhcHBlbmRf b2JqZWN0X29iamVjdChyZXQsICJQUk9DRURVUkUgJXtzaWduYXR1cmV9cyIsIHRtcF9vYmopOwor CisJLyoKKwkgKiBBIHJldHVybiB0eXBlIGNhbiBhZG9wdCBvbmUgb2YgdHdvIGZvcm1zOiBlaXRo ZXIgYSBbU0VUT0ZdIHNvbWVfdHlwZSwKKwkgKiBvciBhIFRBQkxFKGxpc3Qtb2YtdHlwZXMpLiAg V2UgY2FuIHRlbGwgdGhlIHNlY29uZCBmb3JtIGJlY2F1c2Ugd2Ugc2F3CisJICogYSB0YWJsZSBw YXJhbSBhYm92ZSB3aGlsZSBzY2FubmluZyB0aGUgYXJndW1lbnQgbGlzdC4KKwkgKi8KKwlpZiAo dGFibGVfcGFyYW1zID09IE5VTEwpCisJeworCQl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIiIs IDEsCisJCQkJCQkJCSJyZXR1cm5fZm9ybSIsIE9ialR5cGVTdHJpbmcsICJwbGFpbiIpOworCQlh cHBlbmRfc3RyaW5nX29iamVjdCh0bXBfb2JqLCAiJXtzZXRvZn1zIiwgInNldG9mIiwKKwkJCQkJ CQkgcHJvY0Zvcm0tPnByb3JldHNldCA/ICJTRVRPRiIgOiAiIik7CisJCWFwcGVuZF9vYmplY3Rf b2JqZWN0KHRtcF9vYmosICIle3JldHR5cGV9VCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl90 eXBlKHByb2NGb3JtLT5wcm9yZXR0eXBlLCAtMSkpOworCX0KKwllbHNlCisJeworCQlMaXN0CSAg ICpyZXR0eXBlcyA9IE5JTDsKKwkJT2JqVHJlZSAgICAqcGFyYW1fb2JqOworCisJCXRtcF9vYmog PSBuZXdfb2JqdHJlZV9WQSgiVEFCTEUiLCAxLAorCQkJCQkJCQkicmV0dXJuX2Zvcm0iLCBPYmpU eXBlU3RyaW5nLCAidGFibGUiKTsKKwkJZm9yICg7IHRhYmxlX3BhcmFtcyAhPSBOVUxMOyB0YWJs ZV9wYXJhbXMgPSBsbmV4dChub2RlLT5wYXJhbWV0ZXJzLCB0YWJsZV9wYXJhbXMpKQorCQl7CisJ CQlGdW5jdGlvblBhcmFtZXRlciAqcGFyYW0gPSBsZmlyc3QodGFibGVfcGFyYW1zKTsKKworCQkJ cGFyYW1fb2JqID0gbmV3X29ianRyZWVfVkEoIiV7bmFtZX1JICV7dHlwZX1UIiwgMiwKKwkJCQkJ CQkJCSAgIm5hbWUiLCBPYmpUeXBlU3RyaW5nLCBwYXJhbS0+bmFtZSwKKwkJCQkJCQkJCSAgInR5 cGUiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCQkJICBuZXdfb2JqdHJlZV9mb3JfdHlwZSh0eXBh cnJheVt0eXBudW0rK10sIC0xKSk7CisJCQlyZXR0eXBlcyA9IGxhcHBlbmQocmV0dHlwZXMsIG5l d19vYmplY3Rfb2JqZWN0KHBhcmFtX29iaikpOworCQl9CisKKwkJYXBwZW5kX2FycmF5X29iamVj dCh0bXBfb2JqLCAiKCV7cmV0dHlwZXM6LCB9cykiLCByZXR0eXBlcyk7CisJfQorCisJaWYgKGlz ZnVuY3Rpb24pCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIlJFVFVSTlMgJXtyZXR1cm5f dHlwZX1zIiwgdG1wX29iaik7CisKKwkvKiBUUkFOU0ZPUk0gRk9SIFRZUEUgKi8KKwl0bXBfb2Jq ID0gbmV3X29ianRyZWUoIlRSQU5TRk9STSIpOworCisJbnR5cGVzID0gZ2V0X2Z1bmNfdHJmdHlw ZXMocHJvY1R1cCwgJnRyZnR5cGVzKTsKKwlmb3IgKGkgPSAwOyBpIDwgbnR5cGVzOyBpKyspCisJ eworCQl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIkZPUiBUWVBFICV7dHlwZX1UIiwgMSwKKwkJ CQkJCQkJInR5cGUiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCQluZXdfb2JqdHJlZV9mb3JfdHlw ZSh0cmZ0eXBlc1tpXSwgLTEpKTsKKwkJdHlwZXMgPSBsYXBwZW5kKHR5cGVzLCB0bXBfb2JqKTsK Kwl9CisKKwlpZiAodHlwZXMpCisJCWFwcGVuZF9hcnJheV9vYmplY3QodG1wX29iaiwgIiV7Zm9y X3R5cGU6LCB9cyIsIHR5cGVzKTsKKwllbHNlCisJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXBfb2Jq KTsKKworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7dHJhbnNmb3JtX3R5cGV9cyIsIHRt cF9vYmopOworCisJYXBwZW5kX3N0cmluZ19vYmplY3QocmV0LCAiTEFOR1VBR0UgJXtsYW5ndWFn ZX1JIiwgImxhbmd1YWdlIiwKKwkJCQkJCSBOYW1lU3RyKGxhbmdGb3JtLT5sYW5uYW1lKSk7CisK KwlpZiAoaXNmdW5jdGlvbikKKwl7CisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJldCwgIiV7d2lu ZG93fXMiLCAid2luZG93IiwKKwkJCQkJCQkgcHJvY0Zvcm0tPnByb2tpbmQgPT0gUFJPS0lORF9X SU5ET1cgPyAiV0lORE9XIiA6ICIiKTsKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QocmV0LCAiJXt2 b2xhdGlsaXR5fXMiLCAidm9sYXRpbGl0eSIsCisJCQkJCQkJIHByb2NGb3JtLT5wcm92b2xhdGls ZSA9PSBQUk9WT0xBVElMRV9WT0xBVElMRSA/CisJCQkJCQkJICJWT0xBVElMRSIgOgorCQkJCQkJ CSBwcm9jRm9ybS0+cHJvdm9sYXRpbGUgPT0gUFJPVk9MQVRJTEVfU1RBQkxFID8KKwkJCQkJCQkg IlNUQUJMRSIgOiAiSU1NVVRBQkxFIik7CisKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QocmV0LCAi JXtwYXJhbGxlbF9zYWZldHl9cyIsCisJCQkJCQkJICJwYXJhbGxlbF9zYWZldHkiLAorCQkJCQkJ CSBwcm9jRm9ybS0+cHJvcGFyYWxsZWwgPT0gUFJPUEFSQUxMRUxfU0FGRSA/CisJCQkJCQkJICJQ QVJBTExFTCBTQUZFIiA6CisJCQkJCQkJIHByb2NGb3JtLT5wcm9wYXJhbGxlbCA9PSBQUk9QQVJB TExFTF9SRVNUUklDVEVEID8KKwkJCQkJCQkgIlBBUkFMTEVMIFJFU1RSSUNURUQiIDogIlBBUkFM TEVMIFVOU0FGRSIpOworCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJldCwgIiV7bGVha3Byb29m fXMiLCAibGVha3Byb29mIiwKKwkJCQkJCQkgcHJvY0Zvcm0tPnByb2xlYWtwcm9vZiA/ICJMRUFL UFJPT0YiIDogIiIpOworCQlhcHBlbmRfc3RyaW5nX29iamVjdChyZXQsICIle3N0cmljdH1zIiwg InN0cmljdCIsCisJCQkJCQkJIHByb2NGb3JtLT5wcm9pc3N0cmljdCA/CisJCQkJCQkJICJSRVRV Uk5TIE5VTEwgT04gTlVMTCBJTlBVVCIgOgorCQkJCQkJCSAiQ0FMTEVEIE9OIE5VTEwgSU5QVVQi KTsKKworCQlhcHBlbmRfc3RyaW5nX29iamVjdChyZXQsICIle3NlY3VyaXR5X2RlZmluZXJ9cyIs CisJCQkJCQkJICJzZWN1cml0eV9kZWZpbmVyIiwKKwkJCQkJCQkgcHJvY0Zvcm0tPnByb3NlY2Rl ZiA/CisJCQkJCQkJICJTRUNVUklUWSBERUZJTkVSIiA6ICJTRUNVUklUWSBJTlZPS0VSIik7CisK KwkJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiJXtjb3N0fXMiLAorCQkJCQkJCSBuZXdfb2Jq dHJlZV9WQSgiQ09TVCAle2Nvc3R9biIsIDEsCisJCQkJCQkJCQkJCSJjb3N0IiwgT2JqVHlwZUZs b2F0LAorCQkJCQkJCQkJCQlwcm9jRm9ybS0+cHJvY29zdCkpOworCisJCXRtcF9vYmogPSBuZXdf b2JqdHJlZSgiUk9XUyIpOworCQlpZiAocHJvY0Zvcm0tPnByb3Jvd3MgPT0gMCkKKwkJCWFwcGVu ZF9ub3RfcHJlc2VudCh0bXBfb2JqKTsKKwkJZWxzZQorCQkJYXBwZW5kX2Zsb2F0X29iamVjdCh0 bXBfb2JqLCAiJXtyb3dzfW4iLCBwcm9jRm9ybS0+cHJvcm93cyk7CisJCWFwcGVuZF9vYmplY3Rf b2JqZWN0KHJldCwgIiV7cm93c31zIiwgdG1wX29iaik7CisKKwkJdG1wX29iaiA9IG5ld19vYmp0 cmVlKCJTVVBQT1JUICV7bmFtZX1zIik7CisJCWlmIChwcm9jRm9ybS0+cHJvc3VwcG9ydCkKKwkJ eworCQkJT2lkCQkJYXJndHlwZXNbXSA9IHsgSU5URVJOQUxPSUQgfTsKKworCQkJLyoKKwkJCSAq IFdlIHNob3VsZCBxdWFsaWZ5IHRoZSBzdXBwb3J0IGZ1bmN0aW9uJ3MgbmFtZSBpZiBpdCB3b3Vs ZG4ndCBiZQorCQkJICogcmVzb2x2ZWQgYnkgbG9va3VwIGluIHRoZSBjdXJyZW50IHNlYXJjaCBw YXRoLgorCQkJICovCisJCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBfb2JqLCAiJXtuYW1lfXMi LCAibmFtZSIsCisJCQkJCQkJCSBnZW5lcmF0ZV9mdW5jdGlvbl9uYW1lKHByb2NGb3JtLT5wcm9z dXBwb3J0LCAxLAorCQkJCQkJCQkJCQkJCQlOSUwsIGFyZ3R5cGVzLAorCQkJCQkJCQkJCQkJCQlm YWxzZSwgTlVMTCwKKwkJCQkJCQkJCQkJCQkJRVhQUl9LSU5EX05PTkUpKTsKKwkJfQorCQllbHNl CisJCQlhcHBlbmRfbm90X3ByZXNlbnQodG1wX29iaik7CisKKwkJYXBwZW5kX29iamVjdF9vYmpl Y3QocmV0LCAiJXtzdXBwb3J0fXMiLCB0bXBfb2JqKTsKKwl9CisKKwlmb3JlYWNoKGNlbGwsIG5v ZGUtPm9wdGlvbnMpCisJeworCQlEZWZFbGVtICAgICpkZWZlbCA9IChEZWZFbGVtICopIGxmaXJz dChjZWxsKTsKKworCQlpZiAoc3RyY21wKGRlZmVsLT5kZWZuYW1lLCAic2V0IikgPT0gMCkKKwkJ eworCQkJVmFyaWFibGVTZXRTdG10ICpzc3RtdCA9IChWYXJpYWJsZVNldFN0bXQgKikgZGVmZWwt PmFyZzsKKwkJCWNoYXIJICAgKnZhbHVlID0gRXh0cmFjdFNldFZhcmlhYmxlQXJncyhzc3RtdCk7 CisKKwkJCXRtcF9vYmogPSBkZXBhcnNlX0Z1bmN0aW9uU2V0KHNzdG10LT5raW5kLCBzc3RtdC0+ bmFtZSwgdmFsdWUpOworCQkJc2V0cyA9IGxhcHBlbmQoc2V0cywgbmV3X29iamVjdF9vYmplY3Qo dG1wX29iaikpOworCQl9CisJfQorCWFwcGVuZF9hcnJheV9vYmplY3QocmV0LCAiJXtzZXRfb3B0 aW9uczogfXMiLCBzZXRzKTsKKworCS8qIEFkZCB0aGUgZnVuY3Rpb24gZGVmaW5pdGlvbiAqLwor CSh2b2lkKSBTeXNDYWNoZUdldEF0dHIoUFJPQ09JRCwgcHJvY1R1cCwgQW51bV9wZ19wcm9jX3By b3NxbGJvZHksICZpc251bGwpOworCWlmIChwcm9jRm9ybS0+cHJvbGFuZyA9PSBTUUxsYW5ndWFn ZUlkICYmICFpc251bGwpCisJeworCQlTdHJpbmdJbmZvRGF0YSBidWY7CisKKwkJaW5pdFN0cmlu Z0luZm8oJmJ1Zik7CisJCXByaW50X2Z1bmN0aW9uX3NxbGJvZHkoJmJ1ZiwgcHJvY1R1cCk7CisK KwkJYXBwZW5kX3N0cmluZ19vYmplY3QocmV0LCAiJXtkZWZpbml0aW9ufXMiLCAiZGVmaW5pdGlv biIsCisJCQkJCQkJIGJ1Zi5kYXRhKTsKKwl9CisJZWxzZSBpZiAocHJvYmluID09IE5VTEwpCisJ CWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJldCwgIkFTICV7ZGVmaW5pdGlvbn1MIiwgImRlZmluaXRp b24iLCBzb3VyY2UpOworCWVsc2UKKwl7CisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJldCwgIkFT ICV7b2JqZmlsZX1MIiwgIm9iamZpbGUiLCBwcm9iaW4pOworCQlhcHBlbmRfc3RyaW5nX29iamVj dChyZXQsICIsICV7c3ltYm9sfUwiLCAic3ltYm9sIiwgc291cmNlKTsKKwl9CisKKwlSZWxlYXNl U3lzQ2FjaGUobGFuZ1R1cCk7CisJUmVsZWFzZVN5c0NhY2hlKHByb2NUdXApOworCisJcmV0dXJu IHJldDsKK30KKworLyoKKyAqIERlcGFyc2UgYSBDUkVBVEUgT1BFUkFUT1IgQ0xBU1MgY29tbWFu ZC4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogQ1JFQVRFIE9QRVJBVE9SIENMQVNTICV7aWRl bnRpdHl9RCAle2RlZmF1bHR9cyBGT1IgVFlQRSAle3R5cGV9VCBVU0lORworICogJXthbW5hbWV9 SSAle29wZmFtaWx5fXMgQVMgJXtpdGVtczosIH1zCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2Rl cGFyc2VfQ3JlYXRlT3BDbGFzc1N0bXQoQ29sbGVjdGVkQ29tbWFuZCAqY21kKQoreworCU9pZAkJ CW9wY29pZCA9IGNtZC0+ZC5jcmVhdGVvcGMuYWRkcmVzcy5vYmplY3RJZDsKKwlIZWFwVHVwbGUJ b3BjVHVwOworCUhlYXBUdXBsZQlvcGZUdXA7CisJRm9ybV9wZ19vcGZhbWlseSBvcGZGb3JtOwor CUZvcm1fcGdfb3BjbGFzcyBvcGNGb3JtOworCU9ialRyZWUgICAgKnJldDsKKwlPYmpUcmVlICAg ICp0bXBfb2JqOworCUxpc3QJICAgKmxpc3Q7CisJTGlzdENlbGwgICAqY2VsbDsKKworCS8qIERv bid0IGRlcGFyc2UgU1FMIGNvbW1hbmRzIGdlbmVyYXRlZCB3aGlsZSBjcmVhdGluZyBleHRlbnNp b24gKi8KKwlpZiAoY21kLT5pbl9leHRlbnNpb24pCisJCXJldHVybiBOVUxMOworCisJb3BjVHVw ID0gU2VhcmNoU3lzQ2FjaGUxKENMQU9JRCwgT2JqZWN0SWRHZXREYXR1bShvcGNvaWQpKTsKKwlp ZiAoIUhlYXBUdXBsZUlzVmFsaWQob3BjVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1 cCBmYWlsZWQgZm9yIG9wY2xhc3Mgd2l0aCBPSUQgJXUiLCBvcGNvaWQpOworCW9wY0Zvcm0gPSAo Rm9ybV9wZ19vcGNsYXNzKSBHRVRTVFJVQ1Qob3BjVHVwKTsKKworCW9wZlR1cCA9IFNlYXJjaFN5 c0NhY2hlMShPUEZBTUlMWU9JRCwgb3BjRm9ybS0+b3BjZmFtaWx5KTsKKwlpZiAoIUhlYXBUdXBs ZUlzVmFsaWQob3BmVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9y IG9wZXJhdG9yIGZhbWlseSB3aXRoIE9JRCAldSIsIG9wY0Zvcm0tPm9wY2ZhbWlseSk7CisJb3Bm Rm9ybSA9IChGb3JtX3BnX29wZmFtaWx5KSBHRVRTVFJVQ1Qob3BmVHVwKTsKKworCXJldCA9IG5l d19vYmp0cmVlX1ZBKCJDUkVBVEUgT1BFUkFUT1IgQ0xBU1MgJXtpZGVudGl0eX1EICV7ZGVmYXVs dH1zIEZPUiBUWVBFICV7dHlwZX1UIFVTSU5HICV7YW1uYW1lfUkiLCA0LAorCQkJCQkJICJpZGVu dGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKG9w Y0Zvcm0tPm9wY25hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCSAgTmFtZVN0cihvcGNGb3JtLT5vcGNu YW1lKSksCisJCQkJCQkgImRlZmF1bHQiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJIG9wY0Zvcm0t Pm9wY2RlZmF1bHQgPyAiREVGQVVMVCIgOiAiIiwKKwkJCQkJCSAidHlwZSIsIE9ialR5cGVPYmpl Y3QsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3R5cGUob3BjRm9ybS0+b3BjaW50eXBlLCAtMSks CisJCQkJCQkgImFtbmFtZSIsIE9ialR5cGVTdHJpbmcsIGdldF9hbV9uYW1lKG9wY0Zvcm0tPm9w Y21ldGhvZCkpOworCisJLyoKKwkgKiBBZGQgdGhlIEZBTUlMWSBjbGF1c2UsIGJ1dCBpZiBpdCBo YXMgdGhlIHNhbWUgbmFtZSBhbmQgbmFtZXNwYWNlIGFzIHRoZQorCSAqIG9wY2xhc3MsIHRoZW4g aGF2ZSBpdCBleHBhbmQgdG8gZW1wdHkgYmVjYXVzZSBpdCB3b3VsZCBjYXVzZSBhIGZhaWx1cmUK KwkgKiBpZiB0aGUgb3BmYW1pbHkgd2FzIGNyZWF0ZWQgaW50ZXJuYWxseS4KKwkgKi8KKwl0bXBf b2JqID0gbmV3X29ianRyZWVfVkEoIkZBTUlMWSAle29wZmFtaWx5fUQiLCAxLAorCQkJCQkJCSJv cGZhbWlseSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJbmV3X29ianRyZWVfZm9yX3F1YWxuYW1l KG9wZkZvcm0tPm9wZm5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCQkgTmFtZVN0cihvcGZGb3JtLT5v cGZuYW1lKSkpOworCisJaWYgKHN0cmNtcChOYW1lU3RyKG9wZkZvcm0tPm9wZm5hbWUpLCBOYW1l U3RyKG9wY0Zvcm0tPm9wY25hbWUpKSA9PSAwICYmCisJCW9wZkZvcm0tPm9wZm5hbWVzcGFjZSA9 PSBvcGNGb3JtLT5vcGNuYW1lc3BhY2UpCisJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXBfb2JqKTsK KworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7b3BmYW1pbHl9cyIsIHRtcF9vYmopOwor CisJLyoKKwkgKiBBZGQgdGhlIGluaXRpYWwgaXRlbSBsaXN0LiAgTm90ZSB3ZSBhbHdheXMgYWRk IHRoZSBTVE9SQUdFIGNsYXVzZSwgZXZlbgorCSAqIHdoZW4gaXQgaXMgaW1wbGljaXQgaW4gdGhl IG9yaWdpbmFsIGNvbW1hbmQuCisJICovCisJdG1wX29iaiA9IG5ld19vYmp0cmVlKCJTVE9SQUdF Iik7CisJYXBwZW5kX29iamVjdF9vYmplY3QodG1wX29iaiwgIiV7dHlwZX1UIiwKKwkJCQkJCSBu ZXdfb2JqdHJlZV9mb3JfdHlwZShPaWRJc1ZhbGlkKG9wY0Zvcm0tPm9wY2tleXR5cGUpID8KKwkJ CQkJCQkJCQkJICBvcGNGb3JtLT5vcGNrZXl0eXBlIDogb3BjRm9ybS0+b3BjaW50eXBlLAorCQkJ CQkJCQkJCQkgIC0xKSk7CisJbGlzdCA9IGxpc3RfbWFrZTEobmV3X29iamVjdF9vYmplY3QodG1w X29iaikpOworCisJLyogQWRkIHRoZSBkZWNsYXJlZCBvcGVyYXRvcnMgKi8KKwlmb3JlYWNoKGNl bGwsIGNtZC0+ZC5jcmVhdGVvcGMub3BlcmF0b3JzKQorCXsKKwkJT3BGYW1pbHlNZW1iZXIgKm9w ZXIgPSBsZmlyc3QoY2VsbCk7CisKKwkJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJPUEVSQVRP UiAle251bX1uICV7b3BlcmF0b3J9Tygle2x0eXBlfVQsICV7cnR5cGV9VCkiLCA0LAorCQkJCQkJ CQkibnVtIiwgT2JqVHlwZUludGVnZXIsIG9wZXItPm51bWJlciwKKwkJCQkJCQkJIm9wZXJhdG9y IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKE9w ZXJhdG9yUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJCW9wZXItPm9iamVjdCksCisJCQkJCQkJ CSJsdHlwZSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJCW5ld19vYmp0cmVlX2Zvcl90eXBlKG9w ZXItPmxlZnR0eXBlLCAtMSksCisJCQkJCQkJCSJydHlwZSIsIE9ialR5cGVPYmplY3QsCisJCQkJ CQkJCW5ld19vYmp0cmVlX2Zvcl90eXBlKG9wZXItPnJpZ2h0dHlwZSwgLTEpKTsKKworCQkvKiBB ZGQgdGhlIEZPUiBTRUFSQ0ggLyBGT1IgT1JERVIgQlkgY2xhdXNlICovCisJCWlmIChvcGVyLT5z b3J0ZmFtaWx5ID09IEludmFsaWRPaWQpCisJCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBfb2Jq LCAiJXtwdXJwb3NlfXMiLCAicHVycG9zZSIsCisJCQkJCQkJCSAiRk9SIFNFQVJDSCIpOworCQll bHNlCisJCXsKKwkJCU9ialRyZWUgICAgKnRtcF9vYmoyOworCisJCQl0bXBfb2JqMiA9IG5ld19v Ymp0cmVlKCJGT1IgT1JERVIgQlkgJXtvcGZhbWlseX1EIik7CisJCQlhcHBlbmRfb2JqZWN0X29i amVjdCh0bXBfb2JqMiwgIm9wZmFtaWx5IiwKKwkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFs bmFtZV9pZChPcGVyYXRvckZhbWlseVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCQkgb3Blci0+ c29ydGZhbWlseSkpOworCQkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wX29iaiwgIiV7cHVycG9z ZX1zIiwgdG1wX29iajIpOworCQl9CisKKwkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVj dF9vYmplY3QodG1wX29iaikpOworCX0KKworCS8qIEFkZCB0aGUgZGVjbGFyZWQgc3VwcG9ydCBm dW5jdGlvbnMgKi8KKwlmb3JlYWNoKGNlbGwsIGNtZC0+ZC5jcmVhdGVvcGMucHJvY2VkdXJlcykK Kwl7CisJCU9wRmFtaWx5TWVtYmVyICpwcm9jID0gbGZpcnN0KGNlbGwpOworCQlIZWFwVHVwbGUJ cHJvY1R1cDsKKwkJRm9ybV9wZ19wcm9jIHByb2NGb3JtOworCQlPaWQJCSAgICpwcm9hcmd0eXBl czsKKwkJTGlzdAkgICAqYXJnbGlzdCA9IE5JTDsKKwkJaW50CQkJaTsKKworCQlwcm9jVHVwID0g U2VhcmNoU3lzQ2FjaGUxKFBST0NPSUQsIE9iamVjdElkR2V0RGF0dW0ocHJvYy0+b2JqZWN0KSk7 CisJCWlmICghSGVhcFR1cGxlSXNWYWxpZChwcm9jVHVwKSkKKwkJCWVsb2coRVJST1IsICJjYWNo ZSBsb29rdXAgZmFpbGVkIGZvciBwcm9jZWR1cmUgd2l0aCBPSUQgJXUiLAorCQkJCSBwcm9jLT5v YmplY3QpOworCQlwcm9jRm9ybSA9IChGb3JtX3BnX3Byb2MpIEdFVFNUUlVDVChwcm9jVHVwKTsK KworCQl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIkZVTkNUSU9OICV7bnVtfW4gKCV7bHR5cGV9 VCwgJXtydHlwZX1UKSAle2Z1bmN0aW9ufUQiLCA0LAorCQkJCQkJCQkibnVtIiwgT2JqVHlwZUlu dGVnZXIsIHByb2MtPm51bWJlciwKKwkJCQkJCQkJImx0eXBlIiwgT2JqVHlwZU9iamVjdCwKKwkJ CQkJCQkJbmV3X29ianRyZWVfZm9yX3R5cGUocHJvYy0+bGVmdHR5cGUsIC0xKSwKKwkJCQkJCQkJ InJ0eXBlIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJbmV3X29ianRyZWVfZm9yX3R5cGUocHJv Yy0+cmlnaHR0eXBlLCAtMSksCisJCQkJCQkJCSJmdW5jdGlvbiIsIE9ialR5cGVPYmplY3QsCisJ CQkJCQkJCW5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShwcm9jRm9ybS0+cHJvbmFtZXNwYWNlLAor CQkJCQkJCQkJCQkJCQkgTmFtZVN0cihwcm9jRm9ybS0+cHJvbmFtZSkpKTsKKworCQlwcm9hcmd0 eXBlcyA9IHByb2NGb3JtLT5wcm9hcmd0eXBlcy52YWx1ZXM7CisJCWZvciAoaSA9IDA7IGkgPCBw cm9jRm9ybS0+cHJvbmFyZ3M7IGkrKykKKwkJeworCQkJT2JqVHJlZSAgICAqYXJnOworCisJCQlh cmcgPSBuZXdfb2JqdHJlZV9mb3JfdHlwZShwcm9hcmd0eXBlc1tpXSwgLTEpOworCQkJYXJnbGlz dCA9IGxhcHBlbmQoYXJnbGlzdCwgbmV3X29iamVjdF9vYmplY3QoYXJnKSk7CisJCX0KKworCQlh cHBlbmRfZm9ybWF0X3N0cmluZyh0bXBfb2JqLCAiKCIpOworCQlhcHBlbmRfYXJyYXlfb2JqZWN0 KHRtcF9vYmosICIle2FyZ3R5cGVzOiwgfVQiLCBhcmdsaXN0KTsKKwkJYXBwZW5kX2Zvcm1hdF9z dHJpbmcodG1wX29iaiwgIikiKTsKKworCQlSZWxlYXNlU3lzQ2FjaGUocHJvY1R1cCk7CisKKwkJ bGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wX29iaikpOworCX0KKwor CWFwcGVuZF9hcnJheV9vYmplY3QocmV0LCAiQVMgJXtpdGVtczosIH1zIiwgbGlzdCk7CisKKwlS ZWxlYXNlU3lzQ2FjaGUob3BmVHVwKTsKKwlSZWxlYXNlU3lzQ2FjaGUob3BjVHVwKTsKKworCXJl dHVybiByZXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgQ3JlYXRlT3BGYW1pbHlTdG10IChDUkVB VEUgT1BFUkFUT1IgRkFNSUxZKQorICoKKyAqIEdpdmVuIGEgb3BlcmF0b3IgZmFtaWx5IE9JRCBh bmQgdGhlIHBhcnNlIHRyZWUgdGhhdCBjcmVhdGVkIGl0LCByZXR1cm4gYW4KKyAqIE9ialRyZWUg cmVwcmVzZW50aW5nIHRoZSBjcmVhdGlvbiBjb21tYW5kLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4 CisgKiBDUkVBVEUgT1BFUkFUT1IgRkFNSUxZICV7aWRlbnRpdHl9RCBVU0lORyAle2FtbmFtZX1J CisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQ3JlYXRlT3BGYW1pbHkoT2lkIG9iamVj dElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJSGVhcFR1cGxlCW9wZlR1cDsKKwlIZWFwVHVwbGUJ YW1UdXA7CisJRm9ybV9wZ19vcGZhbWlseSBvcGZGb3JtOworCUZvcm1fcGdfYW0JYW1Gb3JtOwor CU9ialRyZWUgICAgKnJldDsKKworCW9wZlR1cCA9IFNlYXJjaFN5c0NhY2hlMShPUEZBTUlMWU9J RCwgT2JqZWN0SWRHZXREYXR1bShvYmplY3RJZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChv cGZUdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3Igb3BlcmF0b3Ig ZmFtaWx5IHdpdGggT0lEICV1Iiwgb2JqZWN0SWQpOworCW9wZkZvcm0gPSAoRm9ybV9wZ19vcGZh bWlseSkgR0VUU1RSVUNUKG9wZlR1cCk7CisKKwlhbVR1cCA9IFNlYXJjaFN5c0NhY2hlMShBTU9J RCwgT2JqZWN0SWRHZXREYXR1bShvcGZGb3JtLT5vcGZtZXRob2QpKTsKKwlpZiAoIUhlYXBUdXBs ZUlzVmFsaWQoYW1UdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3Ig YWNjZXNzIG1ldGhvZCB3aXRoIE9JRCAldSIsCisJCQkgb3BmRm9ybS0+b3BmbWV0aG9kKTsKKwlh bUZvcm0gPSAoRm9ybV9wZ19hbSkgR0VUU1RSVUNUKGFtVHVwKTsKKworCXJldCA9IG5ld19vYmp0 cmVlX1ZBKCJDUkVBVEUgT1BFUkFUT1IgRkFNSUxZICV7aWRlbnRpdHl9RCBVU0lORyAle2FtbmFt ZX1JIiwgMiwKKwkJCQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJIG5ld19v Ymp0cmVlX2Zvcl9xdWFsbmFtZShvcGZGb3JtLT5vcGZuYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkg IE5hbWVTdHIob3BmRm9ybS0+b3BmbmFtZSkpLAorCQkJCQkJICJhbW5hbWUiLCBPYmpUeXBlU3Ry aW5nLCBOYW1lU3RyKGFtRm9ybS0+YW1uYW1lKSk7CisKKwlSZWxlYXNlU3lzQ2FjaGUoYW1UdXAp OworCVJlbGVhc2VTeXNDYWNoZShvcGZUdXApOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAq IEFkZCBjb21tb24gY2xhdXNlcyB0byBDcmVhdGVQb2xpY3kgb3IgQWx0ZXJQb2xpY3kgZGVwYXJz ZSBvYmplY3RzLgorICovCitzdGF0aWMgdm9pZAorYWRkX3BvbGljeV9jbGF1c2VzKE9ialRyZWUg KnJldCwgT2lkIHBvbGljeU9pZCwgTGlzdCAqcm9sZXMsIGJvb2wgZG9fcXVhbCwKKwkJCQkgICBi b29sIGRvX3dpdGhfY2hlY2spCit7CisJUmVsYXRpb24JcG9sUmVsID0gdGFibGVfb3BlbihQb2xp Y3lSZWxhdGlvbklkLCBBY2Nlc3NTaGFyZUxvY2spOworCUhlYXBUdXBsZQlwb2xUdXAgPSBnZXRf Y2F0YWxvZ19vYmplY3RfYnlfb2lkKHBvbFJlbCwgQW51bV9wZ19wb2xpY3lfb2lkLCBwb2xpY3lP aWQpOworCUZvcm1fcGdfcG9saWN5IHBvbEZvcm07CisKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQo cG9sVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHBvbGljeSB3 aXRoIE9JRCAldSIsIHBvbGljeU9pZCk7CisKKwlwb2xGb3JtID0gKEZvcm1fcGdfcG9saWN5KSBH RVRTVFJVQ1QocG9sVHVwKTsKKworCS8qIEFkZCB0aGUgIk9OIHRhYmxlIiBjbGF1c2UgKi8KKwlh cHBlbmRfb2JqZWN0X29iamVjdChyZXQsICJPTiAle3RhYmxlfUQiLAorCQkJCQkJIG5ld19vYmp0 cmVlX2Zvcl9xdWFsbmFtZV9pZChSZWxhdGlvblJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJIHBv bEZvcm0tPnBvbHJlbGlkKSk7CisKKwkvKgorCSAqIEFkZCB0aGUgIlRPIHJvbGUiIGNsYXVzZSwg aWYgYW55LiAgSW4gdGhlIENSRUFURSBjYXNlLCBpdCBhbHdheXMKKwkgKiBjb250YWlucyBhdCBs ZWFzdCBQVUJMSUMsIGJ1dCBpbiB0aGUgQUxURVIgY2FzZSBpdCBtaWdodCBiZSBlbXB0eS4KKwkg Ki8KKwlpZiAocm9sZXMpCisJeworCQlMaXN0CSAgICpsaXN0ID0gTklMOworCQlMaXN0Q2VsbCAg ICpjZWxsOworCisJCWZvcmVhY2goY2VsbCwgcm9sZXMpCisJCXsKKwkJCVJvbGVTcGVjICAgKnNw ZWMgPSAoUm9sZVNwZWMgKikgbGZpcnN0KGNlbGwpOworCisJCQlsaXN0ID0gbGFwcGVuZChsaXN0 LAorCQkJCQkJICAgbmV3X29iamVjdF9vYmplY3QobmV3X29ianRyZWVfZm9yX3JvbGVzcGVjKHNw ZWMpKSk7CisJCX0KKwkJYXBwZW5kX2FycmF5X29iamVjdChyZXQsICJUTyAle3JvbGU6LCB9UiIs IGxpc3QpOworCX0KKwllbHNlCisJCWFwcGVuZF9ub3RfcHJlc2VudChyZXQpOworCisJLyogQWRk IHRoZSBVU0lORyBjbGF1c2UsIGlmIGFueSAqLworCWlmIChkb19xdWFsKQorCXsKKwkJRGF0dW0J CWRlcGFyc2VkOworCQlEYXR1bQkJc3RvcmVkZXhwcjsKKwkJYm9vbAkJaXNudWxsOworCisJCXN0 b3JlZGV4cHIgPSBoZWFwX2dldGF0dHIocG9sVHVwLCBBbnVtX3BnX3BvbGljeV9wb2xxdWFsLAor CQkJCQkJCQkgIFJlbGF0aW9uR2V0RGVzY3IocG9sUmVsKSwgJmlzbnVsbCk7CisJCWlmIChpc251 bGwpCisJCQllbG9nKEVSUk9SLCAibnVsbCBwb2xxdWFsIGV4cHJlc3Npb24gaW4gcG9saWN5ICV1 IiwgcG9saWN5T2lkKTsKKwkJZGVwYXJzZWQgPSBEaXJlY3RGdW5jdGlvbkNhbGwyKHBnX2dldF9l eHByLCBzdG9yZWRleHByLCBwb2xGb3JtLT5wb2xyZWxpZCk7CisJCWFwcGVuZF9zdHJpbmdfb2Jq ZWN0KHJldCwgIlVTSU5HICgle2V4cHJlc3Npb259cykiLCAiZXhwcmVzc2lvbiIsCisJCQkJCQkJ IFRleHREYXR1bUdldENTdHJpbmcoZGVwYXJzZWQpKTsKKwl9CisJZWxzZQorCQlhcHBlbmRfbm90 X3ByZXNlbnQocmV0KTsKKworCS8qIEFkZCB0aGUgV0lUSCBDSEVDSyBjbGF1c2UsIGlmIGFueSAq LworCWlmIChkb193aXRoX2NoZWNrKQorCXsKKwkJRGF0dW0JCWRlcGFyc2VkOworCQlEYXR1bQkJ c3RvcmVkZXhwcjsKKwkJYm9vbAkJaXNudWxsOworCisJCXN0b3JlZGV4cHIgPSBoZWFwX2dldGF0 dHIocG9sVHVwLCBBbnVtX3BnX3BvbGljeV9wb2x3aXRoY2hlY2ssCisJCQkJCQkJCSAgUmVsYXRp b25HZXREZXNjcihwb2xSZWwpLCAmaXNudWxsKTsKKwkJaWYgKGlzbnVsbCkKKwkJCWVsb2coRVJS T1IsICJudWxsIHBvbHdpdGhjaGVjayBleHByZXNzaW9uIGluIHBvbGljeSAldSIsIHBvbGljeU9p ZCk7CisJCWRlcGFyc2VkID0gRGlyZWN0RnVuY3Rpb25DYWxsMihwZ19nZXRfZXhwciwgc3RvcmVk ZXhwciwgcG9sRm9ybS0+cG9scmVsaWQpOworCQlhcHBlbmRfc3RyaW5nX29iamVjdChyZXQsICJX SVRIIENIRUNLICgle2V4cHJlc3Npb259cykiLAorCQkJCQkJCSAiZXhwcmVzc2lvbiIsIFRleHRE YXR1bUdldENTdHJpbmcoZGVwYXJzZWQpKTsKKwl9CisJZWxzZQorCQlhcHBlbmRfbm90X3ByZXNl bnQocmV0KTsKKworCXJlbGF0aW9uX2Nsb3NlKHBvbFJlbCwgQWNjZXNzU2hhcmVMb2NrKTsKK30K KworLyoKKyAqIERlcGFyc2UgYSBDcmVhdGVQb2xpY3lTdG10IChDUkVBVEUgUE9MSUNZKQorICoK KyAqIEdpdmVuIGEgcG9saWN5IE9JRCBhbmQgdGhlIHBhcnNlIHRyZWUgdGhhdCBjcmVhdGVkIGl0 LCByZXR1cm4gYW4gT2JqVHJlZQorICogcmVwcmVzZW50aW5nIHRoZSBjcmVhdGlvbiBjb21tYW5k LgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBDUkVBVEUgUE9MSUNZICV7aWRlbnRpdHl9SQor ICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NyZWF0ZVBvbGljeVN0bXQoT2lkIG9iamVj dElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJQ3JlYXRlUG9saWN5U3RtdCAqbm9kZSA9IChDcmVh dGVQb2xpY3lTdG10ICopIHBhcnNldHJlZTsKKwlPYmpUcmVlICAgICpyZXQ7CisKKwlyZXQgPSBu ZXdfb2JqdHJlZV9WQSgiQ1JFQVRFIFBPTElDWSAle2lkZW50aXR5fUkiLCAxLAorCQkJCQkJICJp ZGVudGl0eSIsIE9ialR5cGVTdHJpbmcsIG5vZGUtPnBvbGljeV9uYW1lKTsKKworCS8qIEFkZCB0 aGUgcmVzdCBvZiB0aGUgc3R1ZmYgKi8KKwlhZGRfcG9saWN5X2NsYXVzZXMocmV0LCBvYmplY3RJ ZCwgbm9kZS0+cm9sZXMsIG5vZGUtPnF1YWwgIT0gTlVMTCwKKwkJCQkJICAgbm9kZS0+d2l0aF9j aGVjayAhPSBOVUxMKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgQWx0 ZXJQb2xpY3lTdG10IChBTFRFUiBQT0xJQ1kpCisgKgorICogR2l2ZW4gYSBwb2xpY3kgT0lEIGFu ZCB0aGUgcGFyc2UgdHJlZSBvZiB0aGUgQUxURVIgUE9MSUNZIGNvbW1hbmQsIHJldHVybgorICog YW4gT2JqVHJlZSByZXByZXNlbnRpbmcgdGhlIGFsdGVyIGNvbW1hbmQuCisgKgorICogVmVyYm9z ZSBzeW50YXgKKyAqIEFMVEVSIFBPTElDWSAle2lkZW50aXR5fUkKKyAqLworc3RhdGljIE9ialRy ZWUgKgorZGVwYXJzZV9BbHRlclBvbGljeVN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRy ZWUpCit7CisJQWx0ZXJQb2xpY3lTdG10ICpub2RlID0gKEFsdGVyUG9saWN5U3RtdCAqKSBwYXJz ZXRyZWU7CisJT2JqVHJlZSAgICAqcmV0OworCisJcmV0ID0gbmV3X29ianRyZWVfVkEoIkFMVEVS IFBPTElDWSAle2lkZW50aXR5fUkiLCAxLAorCQkJCQkJICJpZGVudGl0eSIsIE9ialR5cGVTdHJp bmcsIG5vZGUtPnBvbGljeV9uYW1lKTsKKworCS8qIEFkZCB0aGUgcmVzdCBvZiB0aGUgc3R1ZmYg Ki8KKwlhZGRfcG9saWN5X2NsYXVzZXMocmV0LCBvYmplY3RJZCwgbm9kZS0+cm9sZXMsIG5vZGUt PnF1YWwgIT0gTlVMTCwKKwkJCQkJICAgbm9kZS0+d2l0aF9jaGVjayAhPSBOVUxMKTsKKworCXJl dHVybiByZXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgQ3JlYXRlU2NoZW1hU3RtdC4KKyAqCisg KiBHaXZlbiBhIHNjaGVtYSBPSUQgYW5kIHRoZSBwYXJzZSB0cmVlIHRoYXQgY3JlYXRlZCBpdCwg cmV0dXJuIGFuIE9ialRyZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgY3JlYXRpb24gY29tbWFuZC4K KyAqCisgKiBWZXJib3NlIHN5bnRheAorICogQ1JFQVRFIFNDSEVNQSAle2lmX25vdF9leGlzdHN9 cyAle25hbWV9SSAle2F1dGhvcml6YXRpb259cworKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFy c2VfQ3JlYXRlU2NoZW1hU3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlD cmVhdGVTY2hlbWFTdG10ICpub2RlID0gKENyZWF0ZVNjaGVtYVN0bXQgKikgcGFyc2V0cmVlOwor CU9ialRyZWUgICAgKnJldDsKKwlPYmpUcmVlICAgICphdXRoOworCisJcmV0ID0gbmV3X29ianRy ZWVfVkEoIkNSRUFURSBTQ0hFTUEgJXtpZl9ub3RfZXhpc3RzfXMgJXtuYW1lfUkiLCAyLAorCQkJ CQkJICJpZl9ub3RfZXhpc3RzIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCSBub2RlLT5pZl9ub3Rf ZXhpc3RzID8gIklGIE5PVCBFWElTVFMiIDogIiIsCisJCQkJCQkgIm5hbWUiLCBPYmpUeXBlU3Ry aW5nLAorCQkJCQkJIG5vZGUtPnNjaGVtYW5hbWUgPyBub2RlLT5zY2hlbWFuYW1lIDogIiIpOwor CisJYXV0aCA9IG5ld19vYmp0cmVlKCJBVVRIT1JJWkFUSU9OIik7CisJaWYgKG5vZGUtPmF1dGhy b2xlKQorCQlhcHBlbmRfc3RyaW5nX29iamVjdChhdXRoLCAiJXthdXRob3JpemF0aW9uX3JvbGV9 SSIsCisJCQkJCQkJICJhdXRob3JpemF0aW9uX3JvbGUiLAorCQkJCQkJCSBnZXRfcm9sZXNwZWNf bmFtZShub2RlLT5hdXRocm9sZSkpOworCWVsc2UKKwl7CisJCWFwcGVuZF9udWxsX29iamVjdChh dXRoLCAiJXthdXRob3JpemF0aW9uX3JvbGV9SSIpOworCQlhcHBlbmRfbm90X3ByZXNlbnQoYXV0 aCk7CisJfQorCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7YXV0aG9yaXphdGlvbn1zIiwg YXV0aCk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogUmV0dXJuIHRoZSBkZWZhdWx0IHZh bHVlIG9mIGEgZG9tYWluLgorICovCitzdGF0aWMgY2hhciAqCitEb21haW5HZXREZWZhdWx0KEhl YXBUdXBsZSBkb21UdXAsIGJvb2wgbWlzc2luZ19vaykKK3sKKwlEYXR1bQkJZGVmOworCU5vZGUJ ICAgKmRlZnZhbDsKKwljaGFyCSAgICpkZWZzdHI7CisJYm9vbAkJaXNudWxsOworCisJZGVmID0g U3lzQ2FjaGVHZXRBdHRyKFRZUEVPSUQsIGRvbVR1cCwgQW51bV9wZ190eXBlX3R5cGRlZmF1bHRi aW4sCisJCQkJCQkgICZpc251bGwpOworCWlmIChpc251bGwpCisJeworCQlpZiAoIW1pc3Npbmdf b2spCisJCQllbG9nKEVSUk9SLCAiZG9tYWluIFwiJXNcIiBkb2VzIG5vdCBoYXZlIGEgZGVmYXVs dCB2YWx1ZSIsCisJCQkJTmFtZVN0cigoKEZvcm1fcGdfdHlwZSkgR0VUU1RSVUNUKGRvbVR1cCkp LT50eXBuYW1lKSk7CisJCWVsc2UKKwkJCXJldHVybiBOVUxMOworCX0KKworCWRlZnZhbCA9IHN0 cmluZ1RvTm9kZShUZXh0RGF0dW1HZXRDU3RyaW5nKGRlZikpOworCWRlZnN0ciA9IGRlcGFyc2Vf ZXhwcmVzc2lvbihkZWZ2YWwsIE5VTEwgLyogZHBjb250ZXh0PyAqLyAsCisJCQkJCQkJCWZhbHNl LCBmYWxzZSk7CisKKwlyZXR1cm4gZGVmc3RyOworfQorCisvKgorICogRGVwYXJzZSBhIEFsdGVy RG9tYWluU3RtdC4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogQUxURVIgRE9NQUlOICV7aWRl bnRpdHl9RCBEUk9QIERFRkFVTFQKKyAqIE9SCisgKiBBTFRFUiBET01BSU4gJXtpZGVudGl0eX1E IFNFVCBERUZBVUxUICV7ZGVmYXVsdH1zCisgKiBPUgorICogQUxURVIgRE9NQUlOICV7aWRlbnRp dHl9RCBEUk9QIE5PVCBOVUxMCisgKiBPUgorICogQUxURVIgRE9NQUlOICV7aWRlbnRpdHl9RCBT RVQgTk9UIE5VTEwKKyAqIE9SCisgKiBBTFRFUiBET01BSU4gJXtpZGVudGl0eX1EIEFERCBDT05T VFJBSU5UICV7Y29uc3RyYWludF9uYW1lfXMgJXtkZWZpbml0aW9ufXMKKyAqIE9SCisgKiBBTFRF UiBET01BSU4gJXtpZGVudGl0eX1EIERST1AgQ09OU1RSQUlOVCBJRiBFWElTVFMgJXtjb25zdHJh aW50X25hbWV9cyAle2Nhc2NhZGV9cworICogT1IKKyAqIEFMVEVSIERPTUFJTiAle2lkZW50aXR5 fUQgVkFMSURBVEUgQ09OU1RSQUlOVCAle2NvbnN0cmFpbnRfbmFtZX1zCisgKi8KK3N0YXRpYyBP YmpUcmVlICoKK2RlcGFyc2VfQWx0ZXJEb21haW5TdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFy c2V0cmVlLAorCQkJCQkJT2JqZWN0QWRkcmVzcyBjb25zdHJhaW50QWRkcikKK3sKKwlBbHRlckRv bWFpblN0bXQgKm5vZGUgPSAoQWx0ZXJEb21haW5TdG10ICopIHBhcnNldHJlZTsKKwlIZWFwVHVw bGUJZG9tVHVwOworCUZvcm1fcGdfdHlwZSBkb21Gb3JtOworCU9ialRyZWUgICAgKnJldDsKKwor CWRvbVR1cCA9IFNlYXJjaFN5c0NhY2hlMShUWVBFT0lELCBvYmplY3RJZCk7CisJaWYgKCFIZWFw VHVwbGVJc1ZhbGlkKGRvbVR1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVk IGZvciBkb21haW4gd2l0aCBPSUQgJXUiLCBvYmplY3RJZCk7CisJZG9tRm9ybSA9IChGb3JtX3Bn X3R5cGUpIEdFVFNUUlVDVChkb21UdXApOworCisJc3dpdGNoIChub2RlLT5zdWJ0eXBlKQorCXsK KwkJY2FzZSAnVCc6CisJCQkvKiBTRVQgREVGQVVMVCAvIERST1AgREVGQVVMVCAqLworCQkJaWYg KG5vZGUtPmRlZiA9PSBOVUxMKQorCQkJCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBET01B SU4gJXtpZGVudGl0eX1EIERST1AgREVGQVVMVCIsIDIsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpU eXBlU3RyaW5nLCAiZHJvcCBkZWZhdWx0IiwKKwkJCQkJCQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBl T2JqZWN0LAorCQkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShkb21Gb3JtLT50eXBu YW1lc3BhY2UsCisJCQkJCQkJCQkJCQkJCQkgIE5hbWVTdHIoZG9tRm9ybS0+dHlwbmFtZSkpKTsK KwkJCWVsc2UKKwkJCQlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgRE9NQUlOICV7aWRlbnRp dHl9RCBTRVQgREVGQVVMVCAle2RlZmF1bHR9cyIsIDMsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpU eXBlU3RyaW5nLCAic2V0IGRlZmF1bHQiLAorCQkJCQkJCQkJICJpZGVudGl0eSIsIE9ialR5cGVP YmplY3QsCisJCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKGRvbUZvcm0tPnR5cG5h bWVzcGFjZSwKKwkJCQkJCQkJCQkJCQkJCSAgTmFtZVN0cihkb21Gb3JtLT50eXBuYW1lKSksCisJ CQkJCQkJCQkgImRlZmF1bHQiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJIERvbWFpbkdldERl ZmF1bHQoZG9tVHVwLCBmYWxzZSkpOworCQkJYnJlYWs7CisJCWNhc2UgJ04nOgorCQkJLyogRFJP UCBOT1QgTlVMTCAqLworCQkJcmV0ID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIERPTUFJTiAle2lk ZW50aXR5fUQgRFJPUCBOT1QgTlVMTCIsIDIsCisJCQkJCQkJCQkgICJ0eXBlIiwgT2JqVHlwZVN0 cmluZywgImRyb3Agbm90IG51bGwiLAorCQkJCQkJCQkJICAiaWRlbnRpdHkiLCBPYmpUeXBlT2Jq ZWN0LAorCQkJCQkJCQkJICBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUoZG9tRm9ybS0+dHlwbmFt ZXNwYWNlLAorCQkJCQkJCQkJCQkJCQkJICAgTmFtZVN0cihkb21Gb3JtLT50eXBuYW1lKSkpOwor CQkJYnJlYWs7CisJCWNhc2UgJ08nOgorCQkJLyogU0VUIE5PVCBOVUxMICovCisJCQlyZXQgPSBu ZXdfb2JqdHJlZV9WQSgiQUxURVIgRE9NQUlOICV7aWRlbnRpdHl9RCBTRVQgTk9UIE5VTEwiLCAy LAorCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAic2V0IG5vdCBudWxsIiwKKwkJCQkJ CQkJICJpZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3Jf cXVhbG5hbWUoZG9tRm9ybS0+dHlwbmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJCQkgIE5hbWVTdHIo ZG9tRm9ybS0+dHlwbmFtZSkpKTsKKwkJCWJyZWFrOworCQljYXNlICdDJzoKKwkJCS8qCisJCQkg KiBBREQgQ09OU1RSQUlOVC4gIE9ubHkgQ0hFQ0sgY29uc3RyYWludHMgYXJlIHN1cHBvcnRlZCBi eQorCQkJICogZG9tYWlucworCQkJICovCisJCQlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIg RE9NQUlOICV7aWRlbnRpdHl9RCBBREQgQ09OU1RSQUlOVCAle2NvbnN0cmFpbnRfbmFtZX1zICV7 ZGVmaW5pdGlvbn1zIiwgNCwKKwkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImFkZCBj b25zdHJhaW50IiwKKwkJCQkJCQkJICJpZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJ CSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUoZG9tRm9ybS0+dHlwbmFtZXNwYWNlLAorCQkJCQkJ CQkJCQkJCQkgIE5hbWVTdHIoZG9tRm9ybS0+dHlwbmFtZSkpLAorCQkJCQkJCQkgImNvbnN0cmFp bnRfbmFtZSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCSBnZXRfY29uc3RyYWludF9uYW1lKGNv bnN0cmFpbnRBZGRyLm9iamVjdElkKSwKKwkJCQkJCQkJICJkZWZpbml0aW9uIiwgT2JqVHlwZVN0 cmluZywKKwkJCQkJCQkJIHBnX2dldF9jb25zdHJhaW50ZGVmX2NvbW1hbmRfc2ltcGxlKGNvbnN0 cmFpbnRBZGRyLm9iamVjdElkKSk7CisJCQlicmVhazsKKwkJY2FzZSAnVic6CisJCQkvKiBWQUxJ REFURSBDT05TVFJBSU5UICovCisJCQkvKgorCQkJICogUHJvY2VzcyBzdWJ0eXBlPXNwZWNpZmlj IG9wdGlvbnMuIFZhbGlkYXRpb24gYSBjb25zdHJhaW50CisJCQkgKiByZXF1aXJlcyBpdHMgbmFt ZS4KKwkJCSAqLworCQkJcmV0ID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIERPTUFJTiAle2lkZW50 aXR5fUQgVkFMSURBVEUgQ09OU1RSQUlOVCAle2NvbnN0cmFpbnRfbmFtZX1zIiwgMywKKwkJCQkJ CQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgInZhbGlkYXRlIGNvbnN0cmFpbnQiLAorCQkJCQkJ CQkgImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9x dWFsbmFtZShkb21Gb3JtLT50eXBuYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkJCSAgTmFtZVN0cihk b21Gb3JtLT50eXBuYW1lKSksCisJCQkJCQkJCSAiY29uc3RyYWludF9uYW1lIiwgT2JqVHlwZVN0 cmluZywgbm9kZS0+bmFtZSk7CisJCQlicmVhazsKKwkJY2FzZSAnWCc6CisJCQl7CisJCQkJT2Jq VHJlZSAgICAqdG1wX29iajsKKworCQkJCS8qIERST1AgQ09OU1RSQUlOVCAqLworCQkJCXJldCA9 IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBET01BSU4gJXtpZGVudGl0eX1EIERST1AgQ09OU1RSQUlO VCBJRiBFWElTVFMgJXtjb25zdHJhaW50X25hbWV9cyIsIDMsCisJCQkJCQkJCQkJInR5cGUiLCBP YmpUeXBlU3RyaW5nLCAiZHJvcCBjb25zdHJhaW50IiwKKwkJCQkJCQkJCQkiaWRlbnRpdHkiLCBP YmpUeXBlT2JqZWN0LAorCQkJCQkJCQkJCW5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShkb21Gb3Jt LT50eXBuYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkJCQkJTmFtZVN0cihkb21Gb3JtLT50eXBuYW1l KSksCisJCQkJCQkJCQkJImNvbnN0cmFpbnRfbmFtZSIsIE9ialR5cGVTdHJpbmcsIG5vZGUtPm5h bWUpOworCisJCQkJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJDQVNDQURFIiwgMSwKKwkJCQkJ CQkJCQkicHJlc2VudCIsIE9ialR5cGVCb29sLCBub2RlLT5iZWhhdmlvciA9PSBEUk9QX0NBU0NB REUpOworCisJCQkJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiJXtjYXNjYWRlfXMiLCB0bXBf b2JqKTsKKwkJCX0KKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZWxvZyhFUlJPUiwgImludmFs aWQgc3VidHlwZSAlYyIsIG5vZGUtPnN1YnR5cGUpOworCX0KKworCS8qIERvbmUgKi8KKwlSZWxl YXNlU3lzQ2FjaGUoZG9tVHVwKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBEZXBhcnNl IGEgQ3JlYXRlU3RhdHNTdG10LgorICoKKyAqIEdpdmVuIGEgc3RhdGlzdGljcyBPSUQgYW5kIHRo ZSBwYXJzZSB0cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0dXJuIGFuIE9ialRyZWUKKyAqIHJlcHJl c2VudGluZyB0aGUgY3JlYXRpb24gY29tbWFuZC4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICog Q1JFQVRFIFNUQVRJU1RJQ1MgJXtpZl9ub3RfZXhpc3RzfXMgJXtpZGVudGl0eX1EIE9OICV7ZXhw cjosIH1zIEZST00gJXtzdGF0X3RhYmxlX2lkZW50aXR5fUQKKyAqLworc3RhdGljIE9ialRyZWUg KgorZGVwYXJzZV9DcmVhdGVTdGF0aXN0aWNzU3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNl dHJlZSkKK3sKKwlDcmVhdGVTdGF0c1N0bXQgKm5vZGUgPSAoQ3JlYXRlU3RhdHNTdG10ICopIHBh cnNldHJlZTsKKwlGb3JtX3BnX3N0YXRpc3RpY19leHQgc3RhdGZvcm07CisJT2JqVHJlZSAgICAq cmV0OworCUhlYXBUdXBsZQl0dXA7CisJRGF0dW0JCWRhdHVtOworCWJvb2wJCWlzbnVsbDsKKwlM aXN0CSAgICpzdGF0ZXhwcnMgPSBOSUw7CisKKwl0dXAgPSBTZWFyY2hTeXNDYWNoZTEoU1RBVEVY VE9JRCwgT2JqZWN0SWRHZXREYXR1bShvYmplY3RJZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxp ZCh0dXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3Igc3RhdGlzdGlj IHdpdGggT0lEICV1Iiwgb2JqZWN0SWQpOworCisJc3RhdGZvcm0gPSAoRm9ybV9wZ19zdGF0aXN0 aWNfZXh0KSBHRVRTVFJVQ1QodHVwKTsKKworCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJDUkVBVEUg U1RBVElTVElDUyAle2lmX25vdF9leGlzdHN9cyAle2lkZW50aXR5fUQiLCAyLAorCQkJCQkJICJp Zl9ub3RfZXhpc3RzIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCSBub2RlLT5pZl9ub3RfZXhpc3Rz ID8gIklGIE5PVCBFWElTVFMiIDogIiIsCisJCQkJCQkgImlkZW50aXR5IiwgT2JqVHlwZU9iamVj dCwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUoc3RhdGZvcm0tPnN0eG5hbWVzcGFj ZSwKKwkJCQkJCQkJCQkJCSAgTmFtZVN0cihzdGF0Zm9ybS0+c3R4bmFtZSkpKTsKKworCWRhdHVt ID0gU3lzQ2FjaGVHZXRBdHRyKFNUQVRFWFRPSUQsIHR1cCwgQW51bV9wZ19zdGF0aXN0aWNfZXh0 X3N0eGV4cHJzLAorCQkJCQkJCSZpc251bGwpOworCWlmICghaXNudWxsKQorCXsKKwkJTGlzdENl bGwgICAqbGM7CisJCVJlbGF0aW9uCXN0YXRzcmVsOworCQlMaXN0CSAgICpjb250ZXh0OworCQlM aXN0CSAgICpleHBycyA9IE5JTDsKKwkJY2hhcgkgICAqZXhwcnNTdHJpbmc7CisKKwkJc3RhdHNy ZWwgPSByZWxhdGlvbl9vcGVuKHN0YXRmb3JtLT5zdHhyZWxpZCwgQWNjZXNzU2hhcmVMb2NrKTsK KwkJY29udGV4dCA9IGRlcGFyc2VfY29udGV4dF9mb3IoUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUo c3RhdHNyZWwpLAorCQkJCQkJCQkJICBSZWxhdGlvbkdldFJlbGlkKHN0YXRzcmVsKSk7CisKKwkJ ZXhwcnNTdHJpbmcgPSBUZXh0RGF0dW1HZXRDU3RyaW5nKGRhdHVtKTsKKwkJZXhwcnMgPSAoTGlz dCAqKSBzdHJpbmdUb05vZGUoZXhwcnNTdHJpbmcpOworCisJCWZvcmVhY2gobGMsIGV4cHJzKQor CQl7CisJCQlOb2RlCSAgICpleHByID0gKE5vZGUgKikgbGZpcnN0KGxjKTsKKwkJCWNoYXIJICAg KnN0YXRleHByOworCisJCQlzdGF0ZXhwciA9IGRlcGFyc2VfZXhwcmVzc2lvbihleHByLCBjb250 ZXh0LCBmYWxzZSwgZmFsc2UpOworCQkJc3RhdGV4cHJzID0gbGFwcGVuZChzdGF0ZXhwcnMsIG5l d19zdHJpbmdfb2JqZWN0KHN0YXRleHByKSk7CisJCX0KKworCQlhcHBlbmRfYXJyYXlfb2JqZWN0 KHJldCwgIk9OICV7ZXhwcjosIH1zIiwgc3RhdGV4cHJzKTsKKwkJcGZyZWUoZXhwcnNTdHJpbmcp OworCQlyZWxhdGlvbl9jbG9zZShzdGF0c3JlbCwgQWNjZXNzU2hhcmVMb2NrKTsKKwl9CisKKwlk YXR1bSA9IFN5c0NhY2hlR2V0QXR0cihTVEFURVhUT0lELCB0dXAsIEFudW1fcGdfc3RhdGlzdGlj X2V4dF9zdHhrZXlzLAorCQkJCQkJCSZpc251bGwpOworCWlmICghaXNudWxsKQorCXsKKwkJaW50 CQkJa2V5bm87CisJCWNoYXIJICAgKmF0dG5hbWU7CisJCUxpc3QJICAgKnN0YXRjb2xzID0gTklM OworCQlpbnQydmVjdG9yICppbmRvcHRpb247CisKKwkJaW5kb3B0aW9uID0gKGludDJ2ZWN0b3Ig KikgRGF0dW1HZXRQb2ludGVyKGRhdHVtKTsKKworCQlmb3IgKGtleW5vID0gMDsga2V5bm8gPCBp bmRvcHRpb24tPmRpbTE7IGtleW5vKyspCisJCXsKKwkJCWF0dG5hbWUgPSBnZXRfYXR0bmFtZShz dGF0Zm9ybS0+c3R4cmVsaWQsIGluZG9wdGlvbi0+dmFsdWVzW2tleW5vXSwKKwkJCQkJCQkJICBm YWxzZSk7CisJCQlzdGF0Y29scyA9IGxhcHBlbmQoc3RhdGNvbHMsIG5ld19zdHJpbmdfb2JqZWN0 KGF0dG5hbWUpKTsKKwkJfQorCisJCWlmIChpbmRvcHRpb24tPmRpbTEpCisJCXsKKwkJCS8qIEFw cGVuZCBhICcsJyBpZiBzdGF0ZXhwcnMgaXMgcHJlc2VudCBlbHNlIGFwcGVuZCAnT04nICovCisJ CQlhcHBlbmRfc3RyaW5nX29iamVjdChyZXQsICIle2NvbW1hfXMiLCAiY29tbWEiLAorCQkJCQkJ CQkgc3RhdGV4cHJzID8gIiwiIDogIk9OIik7CisJCQlhcHBlbmRfYXJyYXlfb2JqZWN0KHJldCwg IiV7Y29sczosIH1zIiwgc3RhdGNvbHMpOworCQl9CisJfQorCisJYXBwZW5kX29iamVjdF9vYmpl Y3QocmV0LCAiRlJPTSAle3N0YXRfdGFibGVfaWRlbnRpdHl9RCIsCisJCQkJCQkgbmV3X29ianRy ZWVfZm9yX3F1YWxuYW1lKGdldF9yZWxfbmFtZXNwYWNlKHN0YXRmb3JtLT5zdHhyZWxpZCksCisJ CQkJCQkJCQkJCQkgIGdldF9yZWxfbmFtZShzdGF0Zm9ybS0+c3R4cmVsaWQpKSk7CisKKwlSZWxl YXNlU3lzQ2FjaGUodHVwKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGFu IENyZWF0ZUZvcmVpZ25TZXJ2ZXJTdG10IChDUkVBVEUgU0VSVkVSKQorICoKKyAqIEdpdmVuIGEg c2VydmVyIE9JRCBhbmQgdGhlIHBhcnNlIHRyZWUgdGhhdCBjcmVhdGVkIGl0LCByZXR1cm4gYW4g T2JqVHJlZQorICogcmVwcmVzZW50aW5nIHRoZSBhbHRlciBjb21tYW5kLgorICoKKyAqIFZlcmJv c2Ugc3ludGF4CisgKiBDUkVBVEUgU0VSVkVSICV7aWRlbnRpdHl9SSAle3R5cGV9cyAle3ZlcnNp b259cyBGT1JFSUdOIERBVEEgV1JBUFBFUiAle2Zkd31JCisgKiAle2dlbmVyaWNfb3B0aW9uc31z CisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQ3JlYXRlRm9yZWlnblNlcnZlclN0bXQo T2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJQ3JlYXRlRm9yZWlnblNlcnZlclN0 bXQgKm5vZGUgPSAoQ3JlYXRlRm9yZWlnblNlcnZlclN0bXQgKikgcGFyc2V0cmVlOworCU9ialRy ZWUgICAgKnJldDsKKwlPYmpUcmVlICAgICp0bXA7CisKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgi Q1JFQVRFIFNFUlZFUiAle2lkZW50aXR5fUkiLCAxLAorCQkJCQkJICJpZGVudGl0eSIsIE9ialR5 cGVTdHJpbmcsIG5vZGUtPnNlcnZlcm5hbWUpOworCisJLyogQWRkIGEgVFlQRSBjbGF1c2UsIGlm IGFueSAqLworCXRtcCA9IG5ld19vYmp0cmVlKCJUWVBFIik7CisJaWYgKG5vZGUtPnNlcnZlcnR5 cGUpCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcCwgIiV7dHlwZX1MIiwgInR5cGUiLCBub2Rl LT5zZXJ2ZXJ0eXBlKTsKKwllbHNlCisJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXApOworCWFwcGVu ZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7dHlwZX1zIiwgdG1wKTsKKworCS8qIEFkZCBhIFZFUlNJ T04gY2xhdXNlLCBpZiBhbnkgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZSgiVkVSU0lPTiIpOworCWlm IChub2RlLT52ZXJzaW9uKQorCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXAsICIle3ZlcnNpb259 TCIsICJ2ZXJzaW9uIiwgbm9kZS0+dmVyc2lvbik7CisJZWxzZQorCQlhcHBlbmRfbm90X3ByZXNl bnQodG1wKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICIle3ZlcnNpb259cyIsIHRtcCk7 CisKKwlhcHBlbmRfc3RyaW5nX29iamVjdChyZXQsICJGT1JFSUdOIERBVEEgV1JBUFBFUiAle2Zk d31JIiwgImZkdyIsCisJCQkJCQkgbm9kZS0+ZmR3bmFtZSk7CisKKwkvKiBBZGQgYW4gT1BUSU9O UyBjbGF1c2UsIGlmIGFueSAqLworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7Z2VuZXJp Y19vcHRpb25zfXMiLAorCQkJCQkJIGRlcGFyc2VfRmR3T3B0aW9ucyhub2RlLT5vcHRpb25zLCBO VUxMKSk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogRGVwYXJzZSBhbiBBbHRlckZvcmVp Z25TZXJ2ZXJTdG10IChBTFRFUiBTRVJWRVIpCisgKgorICogR2l2ZW4gYSBzZXJ2ZXIgT0lEIGFu ZCB0aGUgcGFyc2UgdHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVybiBhbiBPYmpUcmVlCisgKiBy ZXByZXNlbnRpbmcgdGhlIGFsdGVyIGNvbW1hbmQuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAq IEFMVEVSIFNFUlZFUiAle2lkZW50aXR5fUkgJXt2ZXJzaW9ufXMgJXtnZW5lcmljX29wdGlvbnN9 cworICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0FsdGVyRm9yZWlnblNlcnZlclN0bXQo T2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJQWx0ZXJGb3JlaWduU2VydmVyU3Rt dCAqbm9kZSA9IChBbHRlckZvcmVpZ25TZXJ2ZXJTdG10ICopIHBhcnNldHJlZTsKKwlPYmpUcmVl ICAgICp0bXA7CisKKwkvKiBBZGQgYSBWRVJTSU9OIGNsYXVzZSwgaWYgYW55ICovCisJdG1wID0g bmV3X29ianRyZWUoIlZFUlNJT04iKTsKKwlpZiAobm9kZS0+aGFzX3ZlcnNpb24gJiYgbm9kZS0+ dmVyc2lvbikKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wLCAiJXt2ZXJzaW9ufUwiLCAidmVy c2lvbiIsIG5vZGUtPnZlcnNpb24pOworCWVsc2UgaWYgKG5vZGUtPmhhc192ZXJzaW9uKQorCQlh cHBlbmRfc3RyaW5nX29iamVjdCh0bXAsICJ2ZXJzaW9uIiwgInZlcnNpb24iLCAiTlVMTCIpOwor CWVsc2UKKwkJYXBwZW5kX25vdF9wcmVzZW50KHRtcCk7CisKKwlyZXR1cm4gbmV3X29ianRyZWVf VkEoIkFMVEVSIFNFUlZFUiAle2lkZW50aXR5fUkgJXt2ZXJzaW9ufXMgJXtnZW5lcmljX29wdGlv bnN9cyIsIDMsCisJCQkJCQkgICJpZGVudGl0eSIsIE9ialR5cGVTdHJpbmcsIG5vZGUtPnNlcnZl cm5hbWUsCisJCQkJCQkgICJ2ZXJzaW9uIiwgT2JqVHlwZU9iamVjdCwgdG1wLAorCQkJCQkJICAi Z2VuZXJpY19vcHRpb25zIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSAgZGVwYXJzZV9GZHdPcHRp b25zKG5vZGUtPm9wdGlvbnMsIE5VTEwpKTsKK30KKworLyoKKyAqIERlcGFyc2UgYSBDcmVhdGVQ TGFuZ1N0bXQuCisgKgorICogR2l2ZW4gYSBsYW5ndWFnZSBPSUQgYW5kIHRoZSBwYXJzZSB0cmVl IHRoYXQgY3JlYXRlZCBpdCwgcmV0dXJuIGFuIE9ialRyZWUKKyAqIHJlcHJlc2VudGluZyB0aGUg Y3JlYXRpb24gY29tbWFuZC4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogQ1JFQVRFICV7b3Jf cmVwbGFjZX1zICV7dHJ1c3RlZH1zIExBTkdVQUdFICV7aWRlbnRpdHl9cyBIQU5ETEVSICV7aGFu ZGxlcn1ECisgKiAle2lubGluZX1zICV7dmFsaWRhdG9yfXMKKyAqLworc3RhdGljIE9ialRyZWUg KgorZGVwYXJzZV9DcmVhdGVMYW5nU3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkK K3sKKwlDcmVhdGVQTGFuZ1N0bXQgKm5vZGUgPSAoQ3JlYXRlUExhbmdTdG10ICopIHBhcnNldHJl ZTsKKwlPYmpUcmVlICAgICpyZXQ7CisJT2JqVHJlZSAgICAqdG1wOworCUhlYXBUdXBsZQlsYW5n VHVwOworCUZvcm1fcGdfbGFuZ3VhZ2UgbGFuZ0Zvcm07CisKKwlsYW5nVHVwID0gU2VhcmNoU3lz Q2FjaGUxKExBTkdPSUQsCisJCQkJCQkJICBPYmplY3RJZEdldERhdHVtKG9iamVjdElkKSk7CisJ aWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGxhbmdUdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9v a3VwIGZhaWxlZCBmb3IgbGFuZ3VhZ2Ugd2l0aCBPSUQgJXUiLCBvYmplY3RJZCk7CisJbGFuZ0Zv cm0gPSAoRm9ybV9wZ19sYW5ndWFnZSkgR0VUU1RSVUNUKGxhbmdUdXApOworCisJcmV0ID0gbmV3 X29ianRyZWVfVkEoIkNSRUFURSAle29yX3JlcGxhY2V9cyAle3RydXN0ZWR9cyBMQU5HVUFHRSAl e2lkZW50aXR5fXMiLCAzLAorCQkJCQkJICJvcl9yZXBsYWNlIiwgT2JqVHlwZVN0cmluZywKKwkJ CQkJCSBub2RlLT5yZXBsYWNlID8gIk9SIFJFUExBQ0UiIDogIiIsCisJCQkJCQkgInRydXN0ZWQi LCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJIGxhbmdGb3JtLT5sYW5wbHRydXN0ZWQgPyAiVFJVU1RF RCIgOiAiIiwKKwkJCQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBlU3RyaW5nLCBub2RlLT5wbG5hbWUp OworCisJaWYgKG5vZGUtPnBsaGFuZGxlciAhPSBOSUwpCisJeworCQkvKiBBZGQgdGhlIEhBTkRM RVIgY2xhdXNlICovCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIkhBTkRMRVIgJXtoYW5k bGVyfUQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVs YXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJIGxhbmdGb3JtLT5sYW5wbGNhbGxmb2lkKSk7CisKKwkJ LyogQWRkIHRoZSBJTkxJTkUgY2xhdXNlLCBpZiBhbnkgKi8KKwkJdG1wID0gbmV3X29ianRyZWUo IklOTElORSIpOworCQlpZiAoT2lkSXNWYWxpZChsYW5nRm9ybS0+bGFuaW5saW5lKSkKKwkJewor CQkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wLCAiJXtoYW5kbGVyX25hbWV9RCIsCisJCQkJCQkJ CSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJ CQkJCQkJCQkJCSBsYW5nRm9ybS0+bGFuaW5saW5lKSk7CisJCX0KKwkJZWxzZQorCQkJYXBwZW5k X25vdF9wcmVzZW50KHRtcCk7CisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7aW5saW5l fXMiLCB0bXApOworCisJCS8qIEFkZCB0aGUgVkFMSURBVE9SIGNsYXVzZSwgaWYgYW55ICovCisJ CXRtcCA9IG5ld19vYmp0cmVlKCJWQUxJREFUT1IiKTsKKwkJaWYgKE9pZElzVmFsaWQobGFuZ0Zv cm0tPmxhbnZhbGlkYXRvcikpCisJCXsKKwkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcCwgIiV7 aGFuZGxlcl9uYW1lfUQiLAorCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFBy b2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCQkgbGFuZ0Zvcm0tPmxhbnZhbGlkYXRv cikpOworCQl9CisJCWVsc2UKKwkJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXApOworCQlhcHBlbmRf b2JqZWN0X29iamVjdChyZXQsICIle3ZhbGlkYXRvcn1zIiwgdG1wKTsKKwl9CisKKwlSZWxlYXNl U3lzQ2FjaGUobGFuZ1R1cCk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogRGVwYXJzZSBh IENyZWF0ZUZvcmVpZ25UYWJsZVN0bXQgKENSRUFURSBGT1JFSUdOIFRBQkxFKS4KKyAqCisgKiBH aXZlbiBhIHRhYmxlIE9JRCBhbmQgdGhlIHBhcnNlIHRyZWUgdGhhdCBjcmVhdGVkIGl0LCByZXR1 cm4gYW4gT2JqVHJlZQorICogcmVwcmVzZW50aW5nIHRoZSBjcmVhdGlvbiBjb21tYW5kLgorICoK KyAqIENSRUFURSBGT1JFSUdOIFRBQkxFICV7aWZfbm90X2V4aXN0c31zICV7aWRlbnRpdHl9RAor ICogWygle3RhYmxlX2VsZW1lbnRzOiwgfXMpICV7aW5oZXJpdHN9cworICogIHwgUEFSVElUSU9O IE9GICV7cGFyZW50X2lkZW50aXR5fUQgKCV7dHlwZWRfdGFibGVfZWxlbWVudHM6LCB9cykgJXtw YXJ0aXRpb25fYm91bmR9c10KKyAqIFNFUlZFUiAle3NlcnZlcn1JICV7Z2VuZXJpY19vcHRpb25z fXMKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9DcmVhdGVGb3JlaWduVGFibGVTdG10 KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCUNyZWF0ZUZvcmVpZ25UYWJsZVN0 bXQgKnN0bXQgPSAoQ3JlYXRlRm9yZWlnblRhYmxlU3RtdCAqKSBwYXJzZXRyZWU7CisJUmVsYXRp b24JcmVsYXRpb24gPSByZWxhdGlvbl9vcGVuKG9iamVjdElkLCBBY2Nlc3NTaGFyZUxvY2spOwor CUxpc3QJICAgKmRwY29udGV4dDsKKwlPYmpUcmVlICAgICpjcmVhdGVTdG10OworCU9ialRyZWUg ICAgKnRtcG9iajsKKwlMaXN0CSAgICp0YWJsZWVsdHMgPSBOSUw7CisKKwljcmVhdGVTdG10ID0g bmV3X29ianRyZWUoIkNSRUFURSBGT1JFSUdOIFRBQkxFIik7CisKKwlhcHBlbmRfc3RyaW5nX29i amVjdChjcmVhdGVTdG10LCAiJXtpZl9ub3RfZXhpc3RzfXMiLCAiaWZfbm90X2V4aXN0cyIsCisJ CQkJCQkgc3RtdC0+YmFzZS5pZl9ub3RfZXhpc3RzID8gIklGIE5PVCBFWElTVFMiIDogIiIpOwor CisJdG1wb2JqID0gbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKHJlbGF0aW9uLT5yZF9yZWwtPnJl bG5hbWVzcGFjZSwKKwkJCQkJCQkJICAgUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmVsYXRpb24p KTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdChjcmVhdGVTdG10LCAiJXtpZGVudGl0eX1EIiwgdG1w b2JqKTsKKworCWRwY29udGV4dCA9IGRlcGFyc2VfY29udGV4dF9mb3IoUmVsYXRpb25HZXRSZWxh dGlvbk5hbWUocmVsYXRpb24pLAorCQkJCQkJCQkJb2JqZWN0SWQpOworCWlmIChzdG10LT5iYXNl LnBhcnRib3VuZCkKKwl7CisJCS8qIFBhcnRpdGlvbmVkIHRhYmxlICovCisJCUxpc3QJICAgKnBh cmVudHM7CisJCU9iakVsZW0gICAgKmVsZW07CisKKwkJcGFyZW50cyA9IGRlcGFyc2VfSW5oUmVs YXRpb25zKG9iamVjdElkKTsKKwkJZWxlbSA9IChPYmpFbGVtICopIGxpbml0aWFsKHBhcmVudHMp OworCisJCUFzc2VydChsaXN0X2xlbmd0aChwYXJlbnRzKSA9PSAxKTsKKworCQlhcHBlbmRfZm9y bWF0X3N0cmluZyhjcmVhdGVTdG10LCAiUEFSVElUSU9OIE9GIik7CisKKwkJYXBwZW5kX29iamVj dF9vYmplY3QoY3JlYXRlU3RtdCwgIiV7cGFyZW50X2lkZW50aXR5fUQiLAorCQkJCQkJCQkJCSBl bGVtLT52YWx1ZS5vYmplY3QpOworCisJCXRhYmxlZWx0cyA9IGRlcGFyc2VfVGFibGVFbGVtZW50 cyhyZWxhdGlvbiwgc3RtdC0+YmFzZS50YWJsZUVsdHMsIGRwY29udGV4dCwKKwkJCQkJCQkJCQkg IHRydWUsIC8qIHR5cGVkIHRhYmxlICovCisJCQkJCQkJCQkJICBmYWxzZSk7CS8qIG5vdCBjb21w b3NpdGUgKi8KKwkJdGFibGVlbHRzID0gb2J0YWluQ29uc3RyYWludHModGFibGVlbHRzLCBvYmpl Y3RJZCwgSW52YWxpZE9pZCk7CisKKwkJdG1wb2JqID0gbmV3X29ianRyZWUoIiIpOworCQlpZiAo dGFibGVlbHRzKQorCQkJYXBwZW5kX2FycmF5X29iamVjdCh0bXBvYmosICIoJXtlbGVtZW50czos IH1zKSIsIHRhYmxlZWx0cyk7CisJCWVsc2UKKwkJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXBvYmop OworCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNyZWF0ZVN0bXQsICIle3R5cGVkX3RhYmxlX2Vs ZW1lbnRzfXMiLCB0bXBvYmopOworCisJCS8qCisJCSAqIEFkZCB0aGUgcGFydGl0aW9uX2JvdW5k X3NwZWMsIGkuZS4gdGhlIEZPUiBWQUxVRVMgY2xhdXNlLgorCQkgKiBHZXQgcGdfY2xhc3MucmVs cGFydGJvdW5kLiBXZSBjYW5ub3QgdXNlIHBhcnRib3VuZCBpbiB0aGUgcGFyc2V0cmVlCisJCSAq IGRpcmVjdGx5IGFzIGl0J3MgdGhlIG9yaWdpbmFsIHBhcnRib3VuZCBleHByZXNzaW9uIHdoaWNo IGhhdmVuJ3QKKwkJICogYmVlbiB0cmFuc2Zvcm1lZC4KKwkJICovCisJCWFwcGVuZF9zdHJpbmdf b2JqZWN0KGNyZWF0ZVN0bXQsICIle3BhcnRpdGlvbl9ib3VuZH1zIiwgInBhcnRpdGlvbl9ib3Vu ZCIsCisJCQkJCQkJIFJlbGF0aW9uR2V0UGFydGl0aW9uQm91bmQob2JqZWN0SWQpKTsKKworCQkv KiBObyBQQVJUSVRJT04gQlkgY2xhdXNlIGZvciBDUkVBVEUgRk9SRUlHTiBUQUJMRSAqLworCX0K KwllbHNlCisJeworCQl0YWJsZWVsdHMgPSBkZXBhcnNlX1RhYmxlRWxlbWVudHMocmVsYXRpb24s IHN0bXQtPmJhc2UudGFibGVFbHRzLCBkcGNvbnRleHQsCisJCQkJCQkJCQkJICBmYWxzZSwJCS8q IG5vdCB0eXBlZCB0YWJsZSAqLworCQkJCQkJCQkJCSAgZmFsc2UpOwkvKiBub3QgY29tcG9zaXRl ICovCisJCXRhYmxlZWx0cyA9IG9idGFpbkNvbnN0cmFpbnRzKHRhYmxlZWx0cywgb2JqZWN0SWQs IEludmFsaWRPaWQpOworCisJCWlmICh0YWJsZWVsdHMpCisJCQlhcHBlbmRfYXJyYXlfb2JqZWN0 KGNyZWF0ZVN0bXQsICIoJXt0YWJsZV9lbGVtZW50czosIH1zKSIsIHRhYmxlZWx0cyk7CisJCWVs c2UKKwkJCWFwcGVuZF9mb3JtYXRfc3RyaW5nKGNyZWF0ZVN0bXQsICIoKSIpOworCisJCS8qCisJ CSogQWRkIGluaGVyaXRhbmNlIHNwZWNpZmljYXRpb24uICBXZSBjYW5ub3Qgc2ltcGx5IHNjYW4g dGhlIGxpc3Qgb2YKKwkJKiBwYXJlbnRzIGZyb20gdGhlIHBhcnNlciBub2RlLCBiZWNhdXNlIHRo YXQgbWF5IGxhY2sgdGhlIGFjdHVhbAorCQkqIHF1YWxpZmllZCBuYW1lcyBvZiB0aGUgcGFyZW50 IHJlbGF0aW9ucy4gIFJhdGhlciB0aGFuIHRyeWluZyB0bworCQkqIHJlLXJlc29sdmUgdGhlbSBm cm9tIHRoZSBpbmZvcm1hdGlvbiBpbiB0aGUgcGFyc2Ugbm9kZSwgaXQgc2VlbXMKKwkJKiBtb3Jl IGFjY3VyYXRlIGFuZCBjb252ZW5pZW50IHRvIGdyYWIgaXQgZnJvbSBwZ19pbmhlcml0cy4KKwkJ Ki8KKwkJdG1wb2JqID0gbmV3X29ianRyZWUoIklOSEVSSVRTIik7CisJCWlmIChzdG10LT5iYXNl LmluaFJlbGF0aW9ucyAhPSBOSUwpCisJCQlhcHBlbmRfYXJyYXlfb2JqZWN0KHRtcG9iaiwgIigl e3BhcmVudHM6LCB9RCkiLCBkZXBhcnNlX0luaFJlbGF0aW9ucyhvYmplY3RJZCkpOworCQllbHNl CisJCXsKKwkJCWFwcGVuZF9udWxsX29iamVjdCh0bXBvYmosICIoJXtwYXJlbnRzOiwgfUQpIik7 CisJCQlhcHBlbmRfbm90X3ByZXNlbnQodG1wb2JqKTsKKwkJfQorCQlhcHBlbmRfb2JqZWN0X29i amVjdChjcmVhdGVTdG10LCAiJXtpbmhlcml0c31zIiwgdG1wb2JqKTsKKwl9CisKKwlhcHBlbmRf c3RyaW5nX29iamVjdChjcmVhdGVTdG10LCAiU0VSVkVSICV7c2VydmVyfUkiLCAic2VydmVyIiwg c3RtdC0+c2VydmVybmFtZSk7CisKKwkvKiBhZGQgYW4gT1BUSU9OUyBjbGF1c2UsIGlmIGFueSAq LworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNyZWF0ZVN0bXQsICIle2dlbmVyaWNfb3B0aW9uc31z IiwKKwkJCQkJCSBkZXBhcnNlX0Zkd09wdGlvbnMoc3RtdC0+b3B0aW9ucywgTlVMTCkpOworCisJ cmVsYXRpb25fY2xvc2UocmVsYXRpb24sIEFjY2Vzc1NoYXJlTG9jayk7CisKKwlyZXR1cm4gY3Jl YXRlU3RtdDsKK30KKworLyoKKyAqIERlcGFyc2UgYSBEZWZpbmVTdG10LgorICovCitzdGF0aWMg T2JqVHJlZSAqCitkZXBhcnNlX0RlZmluZVN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRy ZWUsIE9iamVjdEFkZHJlc3Mgc2Vjb25kYXJ5T2JqKQoreworCURlZmluZVN0bXQgKmRlZmluZSA9 IChEZWZpbmVTdG10ICopIHBhcnNldHJlZTsKKworCXN3aXRjaCAoZGVmaW5lLT5raW5kKQorCXsK KwkJY2FzZSBPQkpFQ1RfQUdHUkVHQVRFOgorCQkJcmV0dXJuIGRlcGFyc2VfRGVmaW5lU3RtdF9B Z2dyZWdhdGUob2JqZWN0SWQsIGRlZmluZSk7CisKKwkJY2FzZSBPQkpFQ1RfQ09MTEFUSU9OOgor CQkJcmV0dXJuIGRlcGFyc2VfRGVmaW5lU3RtdF9Db2xsYXRpb24ob2JqZWN0SWQsIGRlZmluZSwg c2Vjb25kYXJ5T2JqKTsKKworCQljYXNlIE9CSkVDVF9PUEVSQVRPUjoKKwkJCXJldHVybiBkZXBh cnNlX0RlZmluZVN0bXRfT3BlcmF0b3Iob2JqZWN0SWQsIGRlZmluZSk7CisKKwkJY2FzZSBPQkpF Q1RfVFNDT05GSUdVUkFUSU9OOgorCQkJcmV0dXJuIGRlcGFyc2VfRGVmaW5lU3RtdF9UU0NvbmZp ZyhvYmplY3RJZCwgZGVmaW5lLCBzZWNvbmRhcnlPYmopOworCisJCWNhc2UgT0JKRUNUX1RTRElD VElPTkFSWToKKwkJCXJldHVybiBkZXBhcnNlX0RlZmluZVN0bXRfVFNEaWN0aW9uYXJ5KG9iamVj dElkLCBkZWZpbmUpOworCisJCWNhc2UgT0JKRUNUX1RTUEFSU0VSOgorCQkJcmV0dXJuIGRlcGFy c2VfRGVmaW5lU3RtdF9UU1BhcnNlcihvYmplY3RJZCwgZGVmaW5lKTsKKworCQljYXNlIE9CSkVD VF9UU1RFTVBMQVRFOgorCQkJcmV0dXJuIGRlcGFyc2VfRGVmaW5lU3RtdF9UU1RlbXBsYXRlKG9i amVjdElkLCBkZWZpbmUpOworCisJCWNhc2UgT0JKRUNUX1RZUEU6CisJCQlyZXR1cm4gZGVwYXJz ZV9EZWZpbmVTdG10X1R5cGUob2JqZWN0SWQsIGRlZmluZSk7CisKKwkJZGVmYXVsdDoKKwkJCWVs b2coRVJST1IsICJ1bnN1cHBvcnRlZCBvYmplY3Qga2luZDogJWQiLCBkZWZpbmUtPmtpbmQpOwor CX0KKworCXJldHVybiBOVUxMOworfQorCisvKgorICogRm9ybSBhbiBPYmpFbGVtIHRvIGJlIHVz ZWQgYXMgYSBzaW5nbGUgYXJndW1lbnQgaW4gYW4gYWdncmVnYXRlIGFyZ3VtZW50CisgKiBsaXN0 CisgKi8KK3N0YXRpYyBPYmpFbGVtICoKK2Zvcm1fYWdnX2FyZ3VtZW50KGludCBpZHgsIGNoYXIg Km1vZGVzLCBjaGFyICoqbmFtZXMsIE9pZCAqdHlwZXMpCit7CisJT2JqVHJlZQkgICAqYXJnOwor CisJYXJnID0gbmV3X29ianRyZWUoIiIpOworCisJYXBwZW5kX3N0cmluZ19vYmplY3QoYXJnLCAi JXttb2RlfXMiLCAibW9kZSIsCisJCQkJCQkgKG1vZGVzICYmIG1vZGVzW2lkeF0gPT0gJ3YnKSA/ ICJWQVJJQURJQyIgOiAiIik7CisJYXBwZW5kX3N0cmluZ19vYmplY3QoYXJnLCAiJXtuYW1lfXMi LCAibmFtZSIsIG5hbWVzID8gbmFtZXNbaWR4XSA6ICIiKTsKKwlhcHBlbmRfb2JqZWN0X29iamVj dChhcmcsICIle3R5cGV9VCIsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3R5cGUodHlwZXNbaWR4 XSwgLTEpKTsKKworCXJldHVybiBuZXdfb2JqZWN0X29iamVjdChhcmcpOworfQorCisvKgorICog RGVwYXJzZSBhIERlZmluZVN0bXQgKENSRUFURSBBR0dSRUdBVEUpCisgKgorICogR2l2ZW4gYSBh Z2dyZWdhdGUgT0lELCByZXR1cm4gYW4gT2JqVHJlZSByZXByZXNlbnRpbmcgdGhlIENSRUFURSBj b21tYW5kLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBDUkVBVEUgQUdHUkVHQVRFICV7aWRl bnRpdHl9RCgle3R5cGVzfXMpICgle2VsZW1zOiwgfXMpCisgKi8KK3N0YXRpYyBPYmpUcmVlICoK K2RlcGFyc2VfRGVmaW5lU3RtdF9BZ2dyZWdhdGUoT2lkIG9iamVjdElkLCBEZWZpbmVTdG10ICpk ZWZpbmUpCit7CisJSGVhcFR1cGxlICAgYWdnVHVwOworCUhlYXBUdXBsZSAgIHByb2NUdXA7CisJ T2JqVHJlZQkgICAqc3RtdDsKKwlPYmpUcmVlCSAgICp0bXA7CisJTGlzdAkgICAqbGlzdDsKKwlE YXR1bQkJaW5pdHZhbDsKKwlib29sCQlpc251bGw7CisJRm9ybV9wZ19hZ2dyZWdhdGUgYWdnOwor CUZvcm1fcGdfcHJvYyBwcm9jOworCUZvcm1fcGdfb3BlcmF0b3Igb3A7CisJSGVhcFR1cGxlCXR1 cDsKKworCWFnZ1R1cCA9IFNlYXJjaFN5c0NhY2hlMShBR0dGTk9JRCwgT2JqZWN0SWRHZXREYXR1 bShvYmplY3RJZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChhZ2dUdXApKQorCQllbG9nKEVS Uk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgYWdncmVnYXRlIHdpdGggT0lEICV1Iiwgb2Jq ZWN0SWQpOworCWFnZyA9IChGb3JtX3BnX2FnZ3JlZ2F0ZSkgR0VUU1RSVUNUKGFnZ1R1cCk7CisK Kwlwcm9jVHVwID0gU2VhcmNoU3lzQ2FjaGUxKFBST0NPSUQsIE9iamVjdElkR2V0RGF0dW0oYWdn LT5hZ2dmbm9pZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChwcm9jVHVwKSkKKwkJZWxvZyhF UlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHByb2NlZHVyZSB3aXRoIE9JRCAldSIsCisJ CQkgYWdnLT5hZ2dmbm9pZCk7CisJcHJvYyA9IChGb3JtX3BnX3Byb2MpIEdFVFNUUlVDVChwcm9j VHVwKTsKKworCXN0bXQgPSBuZXdfb2JqdHJlZSgiQ1JFQVRFIEFHR1JFR0FURSIpOworCisJYXBw ZW5kX29iamVjdF9vYmplY3Qoc3RtdCwgIiV7aWRlbnRpdHl9RCIsCisJCQkJCQkgbmV3X29ianRy ZWVfZm9yX3F1YWxuYW1lKHByb2MtPnByb25hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCSAgTmFtZVN0 cihwcm9jLT5wcm9uYW1lKSkpOworCisJLyoKKwkgKiBBZGQgdGhlIGFyZ3VtZW50IGxpc3QuICBU aGVyZSBhcmUgdGhyZWUgY2FzZXMgdG8gY29uc2lkZXI6CisJICoKKwkgKiAxLiBubyBhcmd1bWVu dHMsIGluIHdoaWNoIGNhc2UgdGhlIHNpZ25hdHVyZSBpcyAoKikuCisJICoKKwkgKiAyLiBOb3Qg YW4gb3JkZXJlZC1zZXQgYWdncmVnYXRlLiAgSW4gdGhpcyBjYXNlIHRoZXJlJ3Mgb25lIG9yIG1v cmUKKwkgKiBhcmd1bWVudHMuCisJICoKKwkgKiAzLiBPcmRlcmVkLXNldCBhZ2dyZWdhdGVzLiBU aGVzZSBoYXZlIHplcm8gb3IgbW9yZSBkaXJlY3QgYXJndW1lbnRzLCBhbmQKKwkgKiBvbmUgb3Ig bW9yZSBvcmRlcmVkIGFyZ3VtZW50cy4KKwkgKgorCSAqIFdlIGRvbid0IG5lZWQgdG8gY29uc2lk ZXIgZGVmYXVsdCB2YWx1ZXMgb3IgdGFibGUgcGFyYW1ldGVycywgYW5kIHRoZQorCSAqIG9ubHkg bW9kZSB0aGF0IHdlIG5lZWQgdG8gY29uc2lkZXIgaXMgVkFSSUFESUMuCisJICovCisKKwlpZiAo cHJvYy0+cHJvbmFyZ3MgPT0gMCkKKwkJYXBwZW5kX3N0cmluZ19vYmplY3Qoc3RtdCwgIigle3R5 cGVzfXMpIiwgInR5cGVzIiwgIioiKTsKKwllbHNlIGlmICghQUdHS0lORF9JU19PUkRFUkVEX1NF VChhZ2ctPmFnZ2tpbmQpKQorCXsKKwkJaW50CQkJaTsKKwkJaW50CQkJbmFyZ3M7CisJCU9pZAkJ ICAgKnR5cGVzOworCQljaGFyCSAgICptb2RlczsKKwkJY2hhcgkgICoqbmFtZXM7CisKKwkJbmFy Z3MgPSBnZXRfZnVuY19hcmdfaW5mbyhwcm9jVHVwLCAmdHlwZXMsICZuYW1lcywgJm1vZGVzKTsK KworCQkvKiBvbmx5IGRpcmVjdCBhcmd1bWVudHMgaW4gdGhpcyBjYXNlICovCisJCWxpc3QgPSBO SUw7CisJCWZvciAoaSA9IDA7IGkgPCBuYXJnczsgaSsrKQorCQl7CisJCQlsaXN0ID0gbGFwcGVu ZChsaXN0LCBmb3JtX2FnZ19hcmd1bWVudChpLCBtb2RlcywgbmFtZXMsIHR5cGVzKSk7CisJCX0K KworCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiJXtkaXJlY3Q6LCB9cyIsIDEsCisJCQkJCQkJICJk aXJlY3QiLCBPYmpUeXBlQXJyYXksIGxpc3QpOworCQlhcHBlbmRfb2JqZWN0X29iamVjdChzdG10 LCAiKCV7dHlwZXN9cykiLCB0bXApOworCX0KKwllbHNlCisJeworCQlpbnQJCQlpOworCQlpbnQJ CQluYXJnczsKKwkJT2lkCQkgICAqdHlwZXM7CisJCWNoYXIJICAgKm1vZGVzOworCQljaGFyCSAg KipuYW1lczsKKworCQluYXJncyA9IGdldF9mdW5jX2FyZ19pbmZvKHByb2NUdXAsICZ0eXBlcywg Jm5hbWVzLCAmbW9kZXMpOworCisJCS8qIGRpcmVjdCBhcmd1bWVudHMgLi4uICovCisJCWxpc3Qg PSBOSUw7CisJCWZvciAoaSA9IDA7IGkgPCBhZ2ctPmFnZ251bWRpcmVjdGFyZ3M7IGkrKykKKwkJ eworCQkJbGlzdCA9IGxhcHBlbmQobGlzdCwgZm9ybV9hZ2dfYXJndW1lbnQoaSwgbW9kZXMsIG5h bWVzLCB0eXBlcykpOworCQl9CisJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCIle2RpcmVjdDosIH1z IiwgMSwKKwkJCQkJCQkgImRpcmVjdCIsIE9ialR5cGVBcnJheSwgbGlzdCk7CisKKwkJLyoKKwkJ ICogLi4uIGFuZCBhZ2dyZWdhdGVkIGFyZ3VtZW50cy4gIElmIHRoZSBsYXN0IGRpcmVjdCBhcmd1 bWVudCBpcworCQkgKiBWQVJJQURJQywgd2UgbmVlZCB0byByZXBlYXQgaXQgaGVyZSByYXRoZXIg dGhhbiBzZWFyY2hpbmcgZm9yIG1vcmUKKwkJICogYXJndW1lbnRzLiAgKFNlZSBhZ2dyX2FyZ3Mg cHJvZHVjdGlvbiBpbiBncmFtLnkgZm9yIGFuIGV4cGxhbmF0aW9uLikKKwkJICovCisJCWlmICht b2RlcyAmJiBtb2Rlc1thZ2ctPmFnZ251bWRpcmVjdGFyZ3MgLSAxXSA9PSAndicpCisJCXsKKwkJ CWxpc3QgPSBsaXN0X21ha2UxKGZvcm1fYWdnX2FyZ3VtZW50KGFnZy0+YWdnbnVtZGlyZWN0YXJn cyAtIDEsCisJCQkJCQkJCQkJCQltb2RlcywgbmFtZXMsIHR5cGVzKSk7CisJCX0KKwkJZWxzZQor CQl7CisJCQlsaXN0ID0gTklMOworCQkJZm9yIChpID0gYWdnLT5hZ2dudW1kaXJlY3RhcmdzOyBp IDwgbmFyZ3M7IGkrKykKKwkJCXsKKwkJCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBmb3JtX2FnZ19h cmd1bWVudChpLCBtb2RlcywgbmFtZXMsIHR5cGVzKSk7CisJCQl9CisJCX0KKwkJYXBwZW5kX2Fy cmF5X29iamVjdCh0bXAsICJPUkRFUiBCWSAle2FnZ3JlZ2F0ZWQ6LCB9cyIsIGxpc3QpOworCisJ CWFwcGVuZF9vYmplY3Rfb2JqZWN0KHN0bXQsICIoJXt0eXBlc31zKSIsIHRtcCk7CisJfQorCisJ LyogQWRkIHRoZSBkZWZpbml0aW9uIGNsYXVzZSAqLworCWxpc3QgPSBOSUw7CisKKwkvKiBTRlVO QyAqLworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJTRlVOQz0le3Byb2NlZHVyZX1EIiwgMSwKKwkJ CQkJCSAicHJvY2VkdXJlIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3Jf cXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwgYWdnLT5hZ2d0cmFuc2ZuKSk7CisJbGlz dCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkvKiBTVFlQRSAq LworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJTVFlQRT0le3R5cGV9VCIsIDEsCisJCQkJCQkgInR5 cGUiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl90eXBlKGFnZy0+YWdn dHJhbnN0eXBlLCAtMSkpOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0 KHRtcCkpOworCisJLyogU1NQQUNFICovCisJaWYgKGFnZy0+YWdndHJhbnNzcGFjZSAhPSAwKQor CXsKKwkJdG1wID0gbmV3X29ianRyZWVfVkEoIlNTUEFDRT0le3NwYWNlfW4iLCAxLAorCQkJCQkJ CSAic3BhY2UiLCBPYmpUeXBlSW50ZWdlciwgYWdnLT5hZ2d0cmFuc3NwYWNlKTsKKwl9CisJZWxz ZQorCXsKKwkJdG1wID0gbmV3X29ianRyZWUoIlNTUEFDRT0le3NwYWNlfW4iKTsKKwkJYXBwZW5k X2Jvb2xfb2JqZWN0KHRtcCwgInByZXNlbnQiLCBmYWxzZSk7CisJfQorCWxpc3QgPSBsYXBwZW5k KGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJLyogRklOQUxGVU5DICovCisJaWYg KE9pZElzVmFsaWQoYWdnLT5hZ2dmaW5hbGZuKSkKKwkJdG1wID0gbmV3X29ianRyZWVfVkEoIkZJ TkFMRlVOQz0le3Byb2NlZHVyZX1EIiwgMSwKKwkJCQkJCQkgInByb2NlZHVyZSIsIE9ialR5cGVP YmplY3QsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxh dGlvbklkLAorCQkJCQkJCQkJCQkJCQkgYWdnLT5hZ2dmaW5hbGZuKSk7CisJZWxzZQorCXsKKwkJ dG1wID0gbmV3X29ianRyZWUoIkZJTkFMRlVOQz0le3Byb2NlZHVyZX1EIik7CisJCWFwcGVuZF9i b29sX29iamVjdCh0bXAsICJwcmVzZW50IiwgZmFsc2UpOworCX0KKwlsaXN0ID0gbGFwcGVuZChs aXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCS8qIEZJTkFMRlVOQ19FWFRSQSAqLwor CWlmIChhZ2ctPmFnZ2ZpbmFsZXh0cmEpCisJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJGSU5BTEZV TkNfRVhUUkE9JXt2YWx1ZX1zIiwgMSwKKwkJCQkJCQkgInZhbHVlIiwgT2JqVHlwZVN0cmluZywg InRydWUiKTsKKwllbHNlCisJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJGSU5BTEZVTkNfRVhUUkE9 JXt2YWx1ZX1zIiwgMSwKKwkJCQkJCQkgInZhbHVlIiwgT2JqVHlwZVN0cmluZywgImZhbHNlIik7 CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkvKiBJ TklUQ09ORCAqLworCWluaXR2YWwgPSBTeXNDYWNoZUdldEF0dHIoQUdHRk5PSUQsIGFnZ1R1cCwK KwkJCQkJCQkgIEFudW1fcGdfYWdncmVnYXRlX2FnZ2luaXR2YWwsCisJCQkJCQkJICAmaXNudWxs KTsKKwl0bXAgPSBuZXdfb2JqdHJlZSgiSU5JVENPTkQ9Iik7CisJaWYgKCFpc251bGwpCisJCXRt cCA9IG5ld19vYmp0cmVlX1ZBKCJJTklUQ09ORD0le2luaXR2YWx9TCIsIDEsCisJCQkJCQkJICJp bml0dmFsIiwgT2JqVHlwZVN0cmluZywgVGV4dERhdHVtR2V0Q1N0cmluZyhpbml0dmFsKSk7CisJ ZWxzZQorCXsKKwkJdG1wID0gbmV3X29ianRyZWUoIklOSVRDT05EPSV7aW5pdHZhbH1MIik7CisJ CWFwcGVuZF9ib29sX29iamVjdCh0bXAsICJwcmVzZW50IiwgZmFsc2UpOworCX0KKwlsaXN0ID0g bGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCS8qIE1TRlVOQyAqLwor CWlmIChPaWRJc1ZhbGlkKGFnZy0+YWdnbXRyYW5zZm4pKQorCQl0bXAgPSBuZXdfb2JqdHJlZV9W QSgiTVNGVU5DPSV7cHJvY2VkdXJlfUQiLCAxLAorCQkJCQkJCSAicHJvY2VkdXJlIiwgT2JqVHlw ZU9iamVjdCwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJl bGF0aW9uSWQsIGFnZy0+YWdnbXRyYW5zZm4pKTsKKwllbHNlCisJeworCQl0bXAgPSBuZXdfb2Jq dHJlZSgiTVNGVU5DPSV7cHJvY2VkdXJlfUQiKTsKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcCwg InByZXNlbnQiLCBmYWxzZSk7CisJfQorCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rf b2JqZWN0KHRtcCkpOworCisJLyogTVNUWVBFICovCisJaWYgKE9pZElzVmFsaWQoYWdnLT5hZ2dt dHJhbnN0eXBlKSkKKwkJdG1wID0gbmV3X29ianRyZWVfVkEoIk1TVFlQRT0le3R5cGV9VCIsIDEs CisJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZU9iamVjdCwgbmV3X29ianRyZWVfZm9yX3R5cGUoYWdn LT5hZ2dtdHJhbnN0eXBlLCAtMSkpOworCWVsc2UKKwl7CisJCXRtcCA9IG5ld19vYmp0cmVlKCJN U1RZUEU9JXt0eXBlfVQiKTsKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcCwgInByZXNlbnQiLCBm YWxzZSk7CisJfQorCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkp OworCisJLyogTVNTUEFDRSAqLworCWlmIChhZ2ctPmFnZ210cmFuc3NwYWNlICE9IDApCisJCXRt cCA9IG5ld19vYmp0cmVlX1ZBKCJNU1NQQUNFPSV7c3BhY2V9biIsIDEsCisJCQkJCQkJICJzcGFj ZSIsIE9ialR5cGVJbnRlZ2VyLGFnZy0+YWdnbXRyYW5zc3BhY2UpOworCWVsc2UKKwl7CisJCXRt cCA9IG5ld19vYmp0cmVlKCJNU1NQQUNFPSV7c3BhY2V9biIpOworCQlhcHBlbmRfYm9vbF9vYmpl Y3QodG1wLCAicHJlc2VudCIsIGZhbHNlKTsKKwl9CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3 X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkvKiBNSU5WRlVOQyAqLworCWlmIChPaWRJc1ZhbGlk KGFnZy0+YWdnbWludnRyYW5zZm4pKQorCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiTUlOVkZVTkM9 JXt0eXBlfVQiLCAxLAorCQkJCQkJCSAidHlwZSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJIG5l d19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJ CQkJCQkgYWdnLT5hZ2dtaW52dHJhbnNmbikpOworCWVsc2UKKwl7CisJCXRtcCA9IG5ld19vYmp0 cmVlKCJNSU5WRlVOQz09JXt0eXBlfVQiKTsKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcCwgInBy ZXNlbnQiLCBmYWxzZSk7CisJfQorCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2Jq ZWN0KHRtcCkpOworCisJLyogTUZJTkFMRlVOQyAqLworCWlmIChPaWRJc1ZhbGlkKGFnZy0+YWdn bWZpbmFsZm4pKQorCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiTUZJTkFMRlVOQz0le3Byb2NlZHVy ZX1EIiwgMSwKKwkJCQkJCQkgInByb2NlZHVyZSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJIG5l d19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJ CQkJCQkgYWdnLT5hZ2dtZmluYWxmbikpOworCWVsc2UKKwl7CisJCXRtcCA9IG5ld19vYmp0cmVl KCJNRklOQUxGVU5DPSV7cHJvY2VkdXJlfUQiKTsKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcCwg InByZXNlbnQiLCBmYWxzZSk7CisJfQorCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rf b2JqZWN0KHRtcCkpOworCisJLyogTUZJTkFMRlVOQ19FWFRSQSAqLworCWlmIChhZ2ctPmFnZ21m aW5hbGV4dHJhKQorCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiTUZJTkFMRlVOQ19FWFRSQT0le3Zh bHVlfXMiLCAxLAorCQkJCQkJCSAidmFsdWUiLCBPYmpUeXBlU3RyaW5nLCAidHJ1ZSIpOworCWVs c2UKKwl7CisJCXRtcCA9IG5ld19vYmp0cmVlKCJNRklOQUxGVU5DX0VYVFJBPSV7dmFsdWV9cyIp OworCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wLCAicHJlc2VudCIsIGZhbHNlKTsKKwl9CisJbGlz dCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkvKiBNSU5JVENP TkQgKi8KKwlpbml0dmFsID0gU3lzQ2FjaGVHZXRBdHRyKEFHR0ZOT0lELCBhZ2dUdXAsCisJCQkJ CQkJICBBbnVtX3BnX2FnZ3JlZ2F0ZV9hZ2dtaW5pdHZhbCwKKwkJCQkJCQkgICZpc251bGwpOwor CWlmICghaXNudWxsKQorCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiTUlOSVRDT05EPSV7aW5pdHZh bH1MIiwgMSwKKwkJCQkJCQkgImluaXR2YWwiLCBPYmpUeXBlU3RyaW5nLCBUZXh0RGF0dW1HZXRD U3RyaW5nKGluaXR2YWwpKTsKKwllbHNlCisJeworCQl0bXAgPSBuZXdfb2JqdHJlZSgiTUlOSVRD T05EPSV7aW5pdHZhbH1MIik7CisJCWFwcGVuZF9ib29sX29iamVjdCh0bXAsICJwcmVzZW50Iiwg ZmFsc2UpOworCX0KKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXAp KTsKKworCS8qIEhZUE9USEVUSUNBTCAqLworCWlmIChhZ2ctPmFnZ2tpbmQgPT0gQUdHS0lORF9I WVBPVEhFVElDQUwpCisJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJIWVBPVEhFVElDQUw9JXt2YWx1 ZX1zIiwgMSwKKwkJCQkJCQkgInZhbHVlIiwgT2JqVHlwZVN0cmluZywgInRydWUiKTsKKwllbHNl CisJeworCQl0bXAgPSBuZXdfb2JqdHJlZSgiSFlQT1RIRVRJQ0FMPSV7dmFsdWV9cyIpOworCQlh cHBlbmRfYm9vbF9vYmplY3QodG1wLCAicHJlc2VudCIsIGZhbHNlKTsKKwl9CisJbGlzdCA9IGxh cHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkvKiBTT1JUT1AgKi8KKwlp ZiAoT2lkSXNWYWxpZChhZ2ctPmFnZ3NvcnRvcCkpCisJeworCQl0dXAgPSBTZWFyY2hTeXNDYWNo ZTEoT1BFUk9JRCwgT2JqZWN0SWRHZXREYXR1bShhZ2ctPmFnZ3NvcnRvcCkpOworCQlpZiAoIUhl YXBUdXBsZUlzVmFsaWQodHVwKSkKKwkJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVk IGZvciBvcGVyYXRvciB3aXRoIE9JRCAldSIsIGFnZy0+YWdnc29ydG9wKTsKKwkJb3AgPSAoRm9y bV9wZ19vcGVyYXRvcikgR0VUU1RSVUNUKHR1cCk7CisJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJT T1JUT1A9JXtvcGVyYXRvcn1EIiwgMSwKKwkJCQkJCQkgIm9wZXJhdG9yIiwgT2JqVHlwZU9iamVj dCwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKG9wLT5vcHJuYW1lc3BhY2UsCisJ CQkJCQkJCQkJCQkJICBOYW1lU3RyKG9wLT5vcHJuYW1lKSkpOworCisJCVJlbGVhc2VTeXNDYWNo ZSh0dXApOworCX0KKwllbHNlCisJeworCQl0bXAgPSBuZXdfb2JqdHJlZSgiU09SVE9QPSV7b3Bl cmF0b3J9RCIpOworCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wLCAicHJlc2VudCIsIGZhbHNlKTsK Kwl9CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkv KiBEb25lIHdpdGggdGhlIGRlZmluaXRpb24gY2xhdXNlICovCisJYXBwZW5kX2FycmF5X29iamVj dChzdG10LCAiKCV7ZWxlbXM6LCB9cykiLCBsaXN0KTsKKworCVJlbGVhc2VTeXNDYWNoZShwcm9j VHVwKTsKKwlSZWxlYXNlU3lzQ2FjaGUoYWdnVHVwKTsKKworCXJldHVybiBzdG10OworfQorCisv KgorICogRGVwYXJzZSBhIERlZmluZVN0bXQgKENSRUFURSBDT0xMQVRJT04pCisgKgorICogR2l2 ZW4gYSBjb2xsYXRpb24gT0lELCByZXR1cm4gYW4gT2JqVHJlZSByZXByZXNlbnRpbmcgdGhlIENS RUFURSBjb21tYW5kLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBDUkVBVEUgQ09MTEFUSU9O ICV7aWRlbnRpdHl9RCBGUk9NICV7ZnJvbV9pZGVudGl0eX1EICgle2VsZW1zOiwgfXMpCisgKi8K K3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfRGVmaW5lU3RtdF9Db2xsYXRpb24oT2lkIG9iamVj dElkLCBEZWZpbmVTdG10ICpkZWZpbmUsCisJCQkJCQkJIE9iamVjdEFkZHJlc3MgZnJvbUNvbGxp ZCkKK3sKKwlPYmpUcmVlICAgICpyZXQ7CisJSGVhcFR1cGxlCWNvbFR1cDsKKwlGb3JtX3BnX2Nv bGxhdGlvbiBjb2xGb3JtOworCURhdHVtCQlkYXR1bTsKKwlib29sCQlpc251bGw7CisJT2JqVHJl ZSAgICAqdG1wOworCUxpc3QJICAgKmxpc3QgPSBOSUw7CisKKwljb2xUdXAgPSBTZWFyY2hTeXND YWNoZTEoQ09MTE9JRCwgT2JqZWN0SWRHZXREYXR1bShvYmplY3RJZCkpOworCWlmICghSGVhcFR1 cGxlSXNWYWxpZChjb2xUdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBm b3IgY29sbGF0aW9uIHdpdGggT0lEICV1Iiwgb2JqZWN0SWQpOworCWNvbEZvcm0gPSAoRm9ybV9w Z19jb2xsYXRpb24pIEdFVFNUUlVDVChjb2xUdXApOworCisJcmV0ID0gbmV3X29ianRyZWVfVkEo IkNSRUFURSBDT0xMQVRJT04gJXtpZGVudGl0eX1EIiwgMSwKKwkJCQkJCSAiaWRlbnRpdHkiLCBP YmpUeXBlT2JqZWN0LAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShjb2xGb3JtLT5j b2xsbmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJICBOYW1lU3RyKGNvbEZvcm0tPmNvbGxuYW1lKSkp OworCisJaWYgKE9pZElzVmFsaWQoZnJvbUNvbGxpZC5vYmplY3RJZCkpCisJeworCQlPaWQJCQlj b2xsaWQgPSBmcm9tQ29sbGlkLm9iamVjdElkOworCQlIZWFwVHVwbGUJdHA7CisJCUZvcm1fcGdf Y29sbGF0aW9uIGZyb21Db2xGb3JtOworCisJCS8qCisJCSAqIENSRUFURSBDT0xMQVRJT04gJXtp ZGVudGl0eX1EIEZST00gZXhpc3RpbmdfY29sbGF0aW9uOworCQkgKi8KKwkJdHAgPSBTZWFyY2hT eXNDYWNoZTEoQ09MTE9JRCwgT2JqZWN0SWRHZXREYXR1bShjb2xsaWQpKTsKKwkJaWYgKCFIZWFw VHVwbGVJc1ZhbGlkKHRwKSkKKwkJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZv ciBjb2xsYXRpb24gd2l0aCBPSUQgJXUiLCBjb2xsaWQpOworCisJCWZyb21Db2xGb3JtID0gKEZv cm1fcGdfY29sbGF0aW9uKSBHRVRTVFJVQ1QodHApOworCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0 KHJldCwgIkZST00gJXtmcm9tX2lkZW50aXR5fUQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3Jf cXVhbG5hbWUoZnJvbUNvbEZvcm0tPmNvbGxuYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkJICBOYW1l U3RyKGZyb21Db2xGb3JtLT5jb2xsbmFtZSkpKTsKKworCQlSZWxlYXNlU3lzQ2FjaGUodHApOwor CQlSZWxlYXNlU3lzQ2FjaGUoY29sVHVwKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwkvKiBMT0NB TEUgKi8KKwlkYXR1bSA9IFN5c0NhY2hlR2V0QXR0cihDT0xMT0lELCBjb2xUdXAsIEFudW1fcGdf Y29sbGF0aW9uX2NvbGxpY3Vsb2NhbGUsICZpc251bGwpOworCWlmICghaXNudWxsKQorCXsKKwkJ dG1wID0gbmV3X29ianRyZWVfVkEoIkxPQ0FMRT0le2xvY2FsZX1MIiwgMiwKKwkJCQkJCQkgImNs YXVzZSIsIE9ialR5cGVTdHJpbmcsICJsb2NhbGUiLAorCQkJCQkJCSAibG9jYWxlIiwgT2JqVHlw ZVN0cmluZywKKwkJCQkJCQkgcHNwcmludGYoIiVzIiwgVGV4dERhdHVtR2V0Q1N0cmluZyhkYXR1 bSkpKTsKKwkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisJ fQorCisJLyogTENfQ09MTEFURSAqLworCWRhdHVtID0gU3lzQ2FjaGVHZXRBdHRyKENPTExPSUQs IGNvbFR1cCwgQW51bV9wZ19jb2xsYXRpb25fY29sbGNvbGxhdGUsICZpc251bGwpOworCWlmICgh aXNudWxsKQorCXsKKwkJdG1wID0gbmV3X29ianRyZWVfVkEoIkxDX0NPTExBVEU9JXtjb2xsYXRl fUwiLCAyLAorCQkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgImNvbGxhdGUiLAorCQkJ CQkJCSAiY29sbGF0ZSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJIHBzcHJpbnRmKCIlcyIsIFRl eHREYXR1bUdldENTdHJpbmcoZGF0dW0pKSk7CisJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19v YmplY3Rfb2JqZWN0KHRtcCkpOworCX0KKworCS8qIExDX0NUWVBFICovCisJZGF0dW0gPSBTeXND YWNoZUdldEF0dHIoQ09MTE9JRCwgY29sVHVwLCBBbnVtX3BnX2NvbGxhdGlvbl9jb2xsY3R5cGUs ICZpc251bGwpOworCWlmICghaXNudWxsKQorCXsKKwkJdG1wID0gbmV3X29ianRyZWVfVkEoIkxD X0NUWVBFPSV7Y3R5cGV9TCIsIDIsCisJCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAi Y3R5cGUiLAorCQkJCQkJCSAiY3R5cGUiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCSBwc3ByaW50 ZigiJXMiLCBUZXh0RGF0dW1HZXRDU3RyaW5nKGRhdHVtKSkpOworCQlsaXN0ID0gbGFwcGVuZChs aXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwl9CisKKwkvKiBQUk9WSURFUiAqLworCWlm IChjb2xGb3JtLT5jb2xscHJvdmlkZXIgPT0gQ09MTFBST1ZJREVSX0lDVSkKKwl7CisJCXRtcCA9 IG5ld19vYmp0cmVlX1ZBKCJQUk9WSURFUj0le3Byb3ZpZGVyfUwiLCAyLAorCQkJCQkJCSAiY2xh dXNlIiwgT2JqVHlwZVN0cmluZywgInByb3ZpZGVyIiwKKwkJCQkJCQkgInByb3ZpZGVyIiwgT2Jq VHlwZVN0cmluZywKKwkJCQkJCQkgcHNwcmludGYoIiVzIiwgImljdSIpKTsKKwkJbGlzdCA9IGxh cHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisJfQorCWVsc2UgaWYgKGNvbEZv cm0tPmNvbGxwcm92aWRlciA9PSBDT0xMUFJPVklERVJfTElCQykKKwl7CisJCXRtcCA9IG5ld19v Ymp0cmVlX1ZBKCJQUk9WSURFUj0le3Byb3ZpZGVyfUwiLCAyLAorCQkJCQkJCSAiY2xhdXNlIiwg T2JqVHlwZVN0cmluZywgInByb3ZpZGVyIiwKKwkJCQkJCQkgInByb3ZpZGVyIiwgT2JqVHlwZVN0 cmluZywKKwkJCQkJCQkgcHNwcmludGYoIiVzIiwgImxpYmMiKSk7CisJCWxpc3QgPSBsYXBwZW5k KGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCX0KKworCS8qIERFVEVSTUlOSVNUSUMg Ki8KKwlpZiAoY29sRm9ybS0+Y29sbGlzZGV0ZXJtaW5pc3RpYykKKwl7CisJCXRtcCA9IG5ld19v Ymp0cmVlX1ZBKCJERVRFUk1JTklTVElDPSV7ZGV0ZXJtaW5pc3RpY31MIiwgMiwKKwkJCQkJCQkg ImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJkZXRlcm1pbmlzdGljIiwKKwkJCQkJCQkgImRldGVy bWluaXN0aWMiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCSBwc3ByaW50ZigiJXMiLCAidHJ1ZSIp KTsKKwkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisJfQor CisJLyogVkVSU0lPTiAqLworCWRhdHVtID0gU3lzQ2FjaGVHZXRBdHRyKENPTExPSUQsIGNvbFR1 cCwgQW51bV9wZ19jb2xsYXRpb25fY29sbHZlcnNpb24sICZpc251bGwpOworCWlmICghaXNudWxs KQorCXsKKwkJdG1wID0gbmV3X29ianRyZWVfVkEoIlZFUlNJT049JXt2ZXJzaW9ufUwiLCAyLAor CQkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgInZlcnNpb24iLAorCQkJCQkJCSAidmVy c2lvbiIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJIHBzcHJpbnRmKCIlcyIsIFRleHREYXR1bUdl dENTdHJpbmcoZGF0dW0pKSk7CisJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2Jq ZWN0KHRtcCkpOworCX0KKworCWFwcGVuZF9hcnJheV9vYmplY3QocmV0LCAiKCV7ZWxlbXM6LCB9 cykiLCBsaXN0KTsKKwlSZWxlYXNlU3lzQ2FjaGUoY29sVHVwKTsKKworCXJldHVybiByZXQ7Cit9 CisKKy8qCisgKiBEZXBhcnNlIGEgRGVmaW5lU3RtdCAoQ1JFQVRFIE9QRVJBVE9SKQorICoKKyAq IEdpdmVuIGEgb3BlcmF0b3IgT0lEIGFuZCB0aGUgcGFyc2UgdHJlZSB0aGF0IGNyZWF0ZWQgaXQs IHJldHVybiBhbiBPYmpUcmVlCisgKiByZXByZXNlbnRpbmcgdGhlIGNyZWF0aW9uIGNvbW1hbmQu CisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIENSRUFURSBPUEVSQVRPUiAle2lkZW50aXR5fU8g KCV7ZWxlbXM6LCB9cykKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9EZWZpbmVTdG10 X09wZXJhdG9yKE9pZCBvYmplY3RJZCwgRGVmaW5lU3RtdCAqZGVmaW5lKQoreworCUhlYXBUdXBs ZQlvcHJUdXA7CisJT2JqVHJlZSAgICAqcmV0OworCU9ialRyZWUgICAgKnRtcF9vYmo7CisJTGlz dAkgICAqbGlzdCA9IE5JTDsKKwlGb3JtX3BnX29wZXJhdG9yIG9wckZvcm07CisKKwlvcHJUdXAg PSBTZWFyY2hTeXNDYWNoZTEoT1BFUk9JRCwgT2JqZWN0SWRHZXREYXR1bShvYmplY3RJZCkpOwor CWlmICghSGVhcFR1cGxlSXNWYWxpZChvcHJUdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9v a3VwIGZhaWxlZCBmb3Igb3BlcmF0b3Igd2l0aCBPSUQgJXUiLCBvYmplY3RJZCk7CisJb3ByRm9y bSA9IChGb3JtX3BnX29wZXJhdG9yKSBHRVRTVFJVQ1Qob3ByVHVwKTsKKworCXJldCA9IG5ld19v Ymp0cmVlX1ZBKCJDUkVBVEUgT1BFUkFUT1IgJXtpZGVudGl0eX1PIiwgMSwKKwkJCQkJCSAiaWRl bnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShv cHJGb3JtLT5vcHJuYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkgIE5hbWVTdHIob3ByRm9ybS0+b3By bmFtZSkpKTsKKworCS8qIFBST0NFRFVSRSAqLworCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgi UFJPQ0VEVVJFPSV7cHJvY2VkdXJlfUQiLCAyLAorCQkJCQkJCSJjbGF1c2UiLCBPYmpUeXBlU3Ry aW5nLCAicHJvY2VkdXJlIiwKKwkJCQkJCQkicHJvY2VkdXJlIiwgT2JqVHlwZU9iamVjdCwKKwkJ CQkJCQluZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJ CQkJCQkJCQkJCQkJb3ByRm9ybS0+b3ByY29kZSkpOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5l d19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKworCS8qIExFRlRBUkcgKi8KKwl0bXBfb2JqID0g bmV3X29ianRyZWVfVkEoIkxFRlRBUkc9IiwgMSwKKwkJCQkJCQkiY2xhdXNlIiwgT2JqVHlwZVN0 cmluZywgImxlZnRhcmciKTsKKwlpZiAoT2lkSXNWYWxpZChvcHJGb3JtLT5vcHJsZWZ0KSkKKwkJ YXBwZW5kX29iamVjdF9vYmplY3QodG1wX29iaiwgIiV7dHlwZX1UIiwKKwkJCQkJCQkgbmV3X29i anRyZWVfZm9yX3R5cGUob3ByRm9ybS0+b3BybGVmdCwgLTEpKTsKKwllbHNlCisJCWFwcGVuZF9u b3RfcHJlc2VudCh0bXBfb2JqKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29i amVjdCh0bXBfb2JqKSk7CisKKwkvKiBSSUdIVEFSRyAqLworCXRtcF9vYmogPSBuZXdfb2JqdHJl ZV9WQSgiUklHSFRBUkc9IiwgMSwKKwkJCQkJCQkiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgInJp Z2h0YXJnIik7CisJaWYgKE9pZElzVmFsaWQob3ByRm9ybS0+b3BycmlnaHQpKQorCQlhcHBlbmRf b2JqZWN0X29iamVjdCh0bXBfb2JqLCAiJXt0eXBlfVQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9m b3JfdHlwZShvcHJGb3JtLT5vcHJyaWdodCwgLTEpKTsKKwllbHNlCisJCWFwcGVuZF9ub3RfcHJl c2VudCh0bXBfb2JqKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0 bXBfb2JqKSk7CisKKwkvKiBDT01NVVRBVE9SICovCisJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZB KCJDT01NVVRBVE9SPSIsIDEsCisJCQkJCQkJImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJjb21t dXRhdG9yIik7CisJaWYgKE9pZElzVmFsaWQob3ByRm9ybS0+b3ByY29tKSkKKwkJYXBwZW5kX29i amVjdF9vYmplY3QodG1wX29iaiwgIiV7b3Blcn1EIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9y X3F1YWxuYW1lX2lkKE9wZXJhdG9yUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJIG9wckZvcm0t Pm9wcmNvbSkpOworCWVsc2UKKwkJYXBwZW5kX25vdF9wcmVzZW50KHRtcF9vYmopOworCWxpc3Qg PSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKworCS8qIE5FR0FU T1IgKi8KKwl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIk5FR0FUT1I9IiwgMSwKKwkJCQkJCQki Y2xhdXNlIiwgT2JqVHlwZVN0cmluZywgIm5lZ2F0b3IiKTsKKwlpZiAoT2lkSXNWYWxpZChvcHJG b3JtLT5vcHJuZWdhdGUpKQorCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBfb2JqLCAiJXtvcGVy fUQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoT3BlcmF0b3JSZWxhdGlv bklkLAorCQkJCQkJCQkJCQkJCQkgb3ByRm9ybS0+b3BybmVnYXRlKSk7CisJZWxzZQorCQlhcHBl bmRfbm90X3ByZXNlbnQodG1wX29iaik7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVj dF9vYmplY3QodG1wX29iaikpOworCisJLyogUkVTVFJJQ1QgKi8KKwl0bXBfb2JqID0gbmV3X29i anRyZWVfVkEoIlJFU1RSSUNUPSIsIDEsCisJCQkJCQkJImNsYXVzZSIsIE9ialR5cGVTdHJpbmcs ICJyZXN0cmljdCIpOworCWlmIChPaWRJc1ZhbGlkKG9wckZvcm0tPm9wcnJlc3QpKQorCQlhcHBl bmRfb2JqZWN0X29iamVjdCh0bXBfb2JqLCAiJXtwcm9jZWR1cmV9RCIsCisJCQkJCQkJIG5ld19v Ymp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJ CQkgb3ByRm9ybS0+b3BycmVzdCkpOworCWVsc2UKKwkJYXBwZW5kX25vdF9wcmVzZW50KHRtcF9v YmopOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsK KworCS8qIEpPSU4gKi8KKwl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIkpPSU49IiwgMSwKKwkJ CQkJCQkiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgImpvaW4iKTsKKwlpZiAoT2lkSXNWYWxpZChv cHJGb3JtLT5vcHJqb2luKSkKKwkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wX29iaiwgIiV7cHJv Y2VkdXJlfUQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJl UmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJIG9wckZvcm0tPm9wcmpvaW4pKTsKKwllbHNlCisJ CWFwcGVuZF9ub3RfcHJlc2VudCh0bXBfb2JqKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdf b2JqZWN0X29iamVjdCh0bXBfb2JqKSk7CisKKwkvKiBIQVNIRVMgKi8KKwl0bXBfb2JqID0gbmV3 X29ianRyZWVfVkEoIkhBU0hFUyIsIDEsCisJCQkJCQkJImNsYXVzZSIsIE9ialR5cGVTdHJpbmcs ICJoYXNoZXMiKTsKKwlpZiAoIW9wckZvcm0tPm9wcmNhbmhhc2gpCisJCWFwcGVuZF9ub3RfcHJl c2VudCh0bXBfb2JqKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0 bXBfb2JqKSk7CisKKwkvKiBNRVJHRVMgKi8KKwl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIk1F UkdFUyIsIDEsCisJCQkJCQkJImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJtZXJnZXMiKTsKKwlp ZiAoIW9wckZvcm0tPm9wcmNhbm1lcmdlKQorCQlhcHBlbmRfbm90X3ByZXNlbnQodG1wX29iaik7 CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wX29iaikpOworCisJ YXBwZW5kX2FycmF5X29iamVjdChyZXQsICIoJXtlbGVtczosIH1zKSIsIGxpc3QpOworCisJUmVs ZWFzZVN5c0NhY2hlKG9wclR1cCk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogRGVwYXJz ZSBhIENSRUFURSBUWVBFIHN0YXRlbWVudC4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogQ1JF QVRFIFRZUEUgJXtpZGVudGl0eX1EICV7ZWxlbXM6LCB9cykKKyAqLworc3RhdGljIE9ialRyZWUg KgorZGVwYXJzZV9EZWZpbmVTdG10X1R5cGUoT2lkIG9iamVjdElkLCBEZWZpbmVTdG10ICpkZWZp bmUpCit7CisJSGVhcFR1cGxlCXR5cFR1cDsKKwlPYmpUcmVlICAgICpyZXQ7CisJT2JqVHJlZSAg ICAqdG1wOworCUxpc3QJICAgKmxpc3QgPSBOSUw7CisJY2hhcgkgICAqc3RyOworCURhdHVtCQlk Zmx0OworCWJvb2wJCWlzbnVsbDsKKwlGb3JtX3BnX3R5cGUgdHlwRm9ybTsKKworCXR5cFR1cCA9 IFNlYXJjaFN5c0NhY2hlMShUWVBFT0lELCBPYmplY3RJZEdldERhdHVtKG9iamVjdElkKSk7CisJ aWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHR5cFR1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29r dXAgZmFpbGVkIGZvciB0eXBlIHdpdGggT0lEICV1Iiwgb2JqZWN0SWQpOworCXR5cEZvcm0gPSAo Rm9ybV9wZ190eXBlKSBHRVRTVFJVQ1QodHlwVHVwKTsKKworCXJldCA9IG5ld19vYmp0cmVlX1ZB KCJDUkVBVEUgVFlQRSAle2lkZW50aXR5fUQiLCAxLAorCQkJCQkJICJpZGVudGl0eSIsIE9ialR5 cGVPYmplY3QsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKHR5cEZvcm0tPnR5cG5h bWVzcGFjZSwKKwkJCQkJCQkJCQkJCSAgTmFtZVN0cih0eXBGb3JtLT50eXBuYW1lKSkpOworCisJ LyogU2hlbGwgdHlwZXMuICovCisJaWYgKCF0eXBGb3JtLT50eXBpc2RlZmluZWQpCisJeworCQlS ZWxlYXNlU3lzQ2FjaGUodHlwVHVwKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwkvKiBBZGQgdGhl IGRlZmluaXRpb24gY2xhdXNlICovCisJLyogSU5QVVQgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9W QSgiKElOUFVUPSV7cHJvY2VkdXJlfUQiLCAyLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3Ry aW5nLCAiaW5wdXQiLAorCQkJCQkJICJwcm9jZWR1cmUiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJ IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJ CQkJCQkJCSB0eXBGb3JtLT50eXBpbnB1dCkpOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19v YmplY3Rfb2JqZWN0KHRtcCkpOworCisJLyogT1VUUFVUICovCisJdG1wID0gbmV3X29ianRyZWVf VkEoIk9VVFBVVD0le3Byb2NlZHVyZX1EIiwgMiwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0 cmluZywgIm91dHB1dCIsCisJCQkJCQkgInByb2NlZHVyZSIsIE9ialR5cGVPYmplY3QsCisJCQkJ CQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJ CQkJCQkJCQkJIHR5cEZvcm0tPnR5cG91dHB1dCkpOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5l d19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJLyogUkVDRUlWRSAqLworCXRtcCA9IG5ld19vYmp0 cmVlX1ZBKCJSRUNFSVZFPSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJy ZWNlaXZlIik7CisJaWYgKE9pZElzVmFsaWQodHlwRm9ybS0+dHlwcmVjZWl2ZSkpCisJCWFwcGVu ZF9vYmplY3Rfb2JqZWN0KHRtcCwgIiV7cHJvY2VkdXJlfUQiLAorCQkJCQkJCSBuZXdfb2JqdHJl ZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJIHR5 cEZvcm0tPnR5cHJlY2VpdmUpKTsKKwllbHNlCisJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXApOwor CWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJLyogU0VO RCAqLworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJTRU5EPSIsIDEsCisJCQkJCQkgImNsYXVzZSIs IE9ialR5cGVTdHJpbmcsICJzZW5kIik7CisJaWYgKE9pZElzVmFsaWQodHlwRm9ybS0+dHlwc2Vu ZCkpCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcCwgIiV7cHJvY2VkdXJlfUQiLAorCQkJCQkJ CSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJ CQkJCQkJCQkJIHR5cEZvcm0tPnR5cHNlbmQpKTsKKwllbHNlCisJCWFwcGVuZF9ub3RfcHJlc2Vu dCh0bXApOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOwor CisJLyogVFlQTU9EX0lOICovCisJdG1wID0gbmV3X29ianRyZWVfVkEoIlRZUE1PRF9JTj0iLCAx LAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAidHlwbW9kX2luIik7CisJaWYgKE9p ZElzVmFsaWQodHlwRm9ybS0+dHlwbW9kaW4pKQorCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXAs ICIle3Byb2NlZHVyZX1EIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFBy b2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCSB0eXBGb3JtLT50eXBtb2RpbikpOwor CWVsc2UKKwkJYXBwZW5kX25vdF9wcmVzZW50KHRtcCk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwg bmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkvKiBUWVBNT0RfT1VUICovCisJdG1wID0gbmV3 X29ianRyZWVfVkEoIlRZUE1PRF9PVVQ9IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0 cmluZywgInR5cG1vZF9vdXQiKTsKKwlpZiAoT2lkSXNWYWxpZCh0eXBGb3JtLT50eXBtb2RvdXQp KQorCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXAsICIle3Byb2NlZHVyZX1EIiwKKwkJCQkJCQkg bmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJ CQkJCQkJCSB0eXBGb3JtLT50eXBtb2RvdXQpKTsKKwllbHNlCisJCWFwcGVuZF9ub3RfcHJlc2Vu dCh0bXApOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOwor CisJLyogQU5BTFlaRSAqLworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJBTkFMWVpFPSIsIDEsCisJ CQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJhbmFseXplIik7CisJaWYgKE9pZElzVmFs aWQodHlwRm9ybS0+dHlwYW5hbHl6ZSkpCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcCwgIiV7 cHJvY2VkdXJlfUQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2Vk dXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJIHR5cEZvcm0tPnR5cGFuYWx5emUpKTsKKwll bHNlCisJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXApOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5l d19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJLyogSU5URVJOQUxMRU5HVEggKi8KKwlpZiAodHlw Rm9ybS0+dHlwbGVuID09IC0xKQorCQl0bXAgPSBuZXdfb2JqdHJlZSgiSU5URVJOQUxMRU5HVEg9 VkFSSUFCTEUiKTsKKwllbHNlCisJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJJTlRFUk5BTExFTkdU SD0le3R5cGxlbn1uIiwgMSwKKwkJCQkJCQkgInR5cGxlbiIsIE9ialR5cGVJbnRlZ2VyLCB0eXBG b3JtLT50eXBsZW4pOworCisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3Qo dG1wKSk7CisKKwkvKiBQQVNTRURCWVZBTFVFICovCisJdG1wID0gbmV3X29ianRyZWVfVkEoIlBB U1NFREJZVkFMVUUiLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAicGFzc2Vk Ynl2YWx1ZSIpOworCWlmICghdHlwRm9ybS0+dHlwYnl2YWwpCisJCWFwcGVuZF9ub3RfcHJlc2Vu dCh0bXApOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOwor CisJLyogWFhYIGl0J3Mgb2RkIHRvIHJlcHJlc2VudCBhbGlnbm1lbnQgd2l0aCBzY2hlbWEtcXVh bGlmaWVkIHR5cGUgbmFtZXMgKi8KKwlzd2l0Y2ggKHR5cEZvcm0tPnR5cGFsaWduKQorCXsKKwkJ Y2FzZSAnZCc6CisJCQlzdHIgPSAicGdfY2F0YWxvZy5mbG9hdDgiOworCQkJYnJlYWs7CisJCWNh c2UgJ2knOgorCQkJc3RyID0gInBnX2NhdGFsb2cuaW50NCI7CisJCQlicmVhazsKKwkJY2FzZSAn cyc6CisJCQlzdHIgPSAicGdfY2F0YWxvZy5pbnQyIjsKKwkJCWJyZWFrOworCQljYXNlICdjJzoK KwkJCXN0ciA9ICJwZ19jYXRhbG9nLmJwY2hhciI7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJ CWVsb2coRVJST1IsICJpbnZhbGlkIGFsaWdubWVudCAlYyIsIHR5cEZvcm0tPnR5cGFsaWduKTsK Kwl9CisKKwkvKiBBTElHTk1FTlQgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiQUxJR05NRU5U PSV7YWxpZ259cyIsIDIsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJhbGlnbm1l bnQiLAorCQkJCQkJICJhbGlnbiIsIE9ialR5cGVTdHJpbmcsIHN0cik7CisJbGlzdCA9IGxhcHBl bmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkvKiBTVE9SQUdFICovCisJdG1w ID0gbmV3X29ianRyZWVfVkEoIlNUT1JBR0U9JXtzdG9yYWdlfXMiLCAyLAorCQkJCQkJICJjbGF1 c2UiLCBPYmpUeXBlU3RyaW5nLCAic3RvcmFnZSIsCisJCQkJCQkgInN0b3JhZ2UiLCBPYmpUeXBl U3RyaW5nLAorCQkJCQkJIGdldF90eXBlX3N0b3JhZ2UodHlwRm9ybS0+dHlwc3RvcmFnZSkpOwor CWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJLyogQ0FU RUdPUlkgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiQ0FURUdPUlk9JXtjYXRlZ29yeX1zIiwg MiwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgImNhdGVnb3J5IiwKKwkJCQkJCSAi Y2F0ZWdvcnkiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJIHBzcHJpbnRmKCIlYyIsIHR5cEZvcm0t PnR5cGNhdGVnb3J5KSk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3Qo dG1wKSk7CisKKwkvKiBQUkVGRVJSRUQgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiUFJFRkVS UkVEPSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJwcmVmZXJyZWQiKTsK KwlpZiAoIXR5cEZvcm0tPnR5cGlzcHJlZmVycmVkKQorCQlhcHBlbmRfbm90X3ByZXNlbnQodG1w KTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCS8q IERFRkFVTFQgKi8KKwlkZmx0ID0gU3lzQ2FjaGVHZXRBdHRyKFRZUEVPSUQsIHR5cFR1cCwKKwkJ CQkJCSAgIEFudW1fcGdfdHlwZV90eXBkZWZhdWx0LAorCQkJCQkJICAgJmlzbnVsbCk7CisJdG1w ID0gbmV3X29ianRyZWVfVkEoIkRFRkFVTFQ9IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlw ZVN0cmluZywgImRlZmF1bHQiKTsKKwlpZiAoIWlzbnVsbCkKKwkJYXBwZW5kX3N0cmluZ19vYmpl Y3QodG1wLCAiJXtkZWZhdWx0fXMiLCAiZGVmYXVsdCIsCisJCQkJCQkJIFRleHREYXR1bUdldENT dHJpbmcoZGZsdCkpOworCWVsc2UKKwkJYXBwZW5kX25vdF9wcmVzZW50KHRtcCk7CisJbGlzdCA9 IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkvKiBFTEVNRU5UICov CisJdG1wID0gbmV3X29ianRyZWVfVkEoIkVMRU1FTlQ9IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwg T2JqVHlwZVN0cmluZywgImVsZW1lbnQiKTsKKwlpZiAoT2lkSXNWYWxpZCh0eXBGb3JtLT50eXBl bGVtKSkKKwkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wLCAiZWxlbSIsCisJCQkJCQkJIG5ld19v Ymp0cmVlX2Zvcl90eXBlKHR5cEZvcm0tPnR5cGVsZW0sIC0xKSk7CisJZWxzZQorCQlhcHBlbmRf bm90X3ByZXNlbnQodG1wKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVj dCh0bXApKTsKKworCS8qIERFTElNSVRFUiAqLworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJERUxJ TUlURVI9IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgImRlbGltaXRlciIp OworCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcCwgIiV7ZGVsaW19TCIsICJkZWxpbSIsCisJCQkJ CQkgcHNwcmludGYoIiVjIiwgdHlwRm9ybS0+dHlwZGVsaW0pKTsKKwlsaXN0ID0gbGFwcGVuZChs aXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCS8qIENPTExBVEFCTEUgKi8KKwl0bXAg PSBuZXdfb2JqdHJlZV9WQSgiQ09MTEFUQUJMRT0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpU eXBlU3RyaW5nLCAiY29sbGF0YWJsZSIpOworCWlmICghT2lkSXNWYWxpZCh0eXBGb3JtLT50eXBj b2xsYXRpb24pKQorCQlhcHBlbmRfbm90X3ByZXNlbnQodG1wKTsKKwlsaXN0ID0gbGFwcGVuZChs aXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCWFwcGVuZF9hcnJheV9vYmplY3QocmV0 LCAiJXtlbGVtczosIH1zKSIsIGxpc3QpOworCisJUmVsZWFzZVN5c0NhY2hlKHR5cFR1cCk7CisK KwlyZXR1cm4gcmV0OworfQorCisvKgorICogRGVwYXJzZSBhIENSRUFURSBURVhUIFNFQVJDSCBD T05GSUdVUkFUSU9OIHN0YXRlbWVudC4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogQ1JFQVRF IFRFWFQgU0VBUkNIIENPTkZJR1VSQVRJT04gJXtpZGVudGl0eX1EICgle2VsZW1zOiwgfXMpCisg Ki8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfRGVmaW5lU3RtdF9UU0NvbmZpZyhPaWQgb2Jq ZWN0SWQsIERlZmluZVN0bXQgKmRlZmluZSwKKwkJCQkJCQlPYmplY3RBZGRyZXNzIGNvcGllZCkK K3sKKwlIZWFwVHVwbGUJdHNjVHVwOworCUhlYXBUdXBsZQl0c3BUdXA7CisJT2JqVHJlZSAgICAq cmV0OworCU9ialRyZWUgICAgKnRtcDsKKwlGb3JtX3BnX3RzX2NvbmZpZyB0c2NGb3JtOworCUZv cm1fcGdfdHNfcGFyc2VyIHRzcEZvcm07CisJTGlzdAkgICAqbGlzdCA9IE5JTDsKKworCXRzY1R1 cCA9IFNlYXJjaFN5c0NhY2hlMShUU0NPTkZJR09JRCwgT2JqZWN0SWRHZXREYXR1bShvYmplY3RJ ZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZCh0c2NUdXApKQorCQllbG9nKEVSUk9SLCAiY2Fj aGUgbG9va3VwIGZhaWxlZCBmb3IgdGV4dCBzZWFyY2ggY29uZmlndXJhdGlvbiB3aXRoIE9JRCAl dSIsCisJCQkgb2JqZWN0SWQpOworCXRzY0Zvcm0gPSAoRm9ybV9wZ190c19jb25maWcpIEdFVFNU UlVDVCh0c2NUdXApOworCisJdHNwVHVwID0gU2VhcmNoU3lzQ2FjaGUxKFRTUEFSU0VST0lELCBP YmplY3RJZEdldERhdHVtKHRzY0Zvcm0tPmNmZ3BhcnNlcikpOworCWlmICghSGVhcFR1cGxlSXNW YWxpZCh0c3BUdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgdGV4 dCBzZWFyY2ggcGFyc2VyICV1IiwKKwkJCSB0c2NGb3JtLT5jZmdwYXJzZXIpOworCXRzcEZvcm0g PSAoRm9ybV9wZ190c19wYXJzZXIpIEdFVFNUUlVDVCh0c3BUdXApOworCisJLyoKKwkgKiBBZGQg dGhlIGRlZmluaXRpb24gY2xhdXNlLiAgSWYgd2UgaGF2ZSBDT1BZJ2VkIGFuIGV4aXN0aW5nIGNv bmZpZywgYWRkCisJICogYSBDT1BZIGNsYXVzZTsgb3RoZXJ3aXNlIGFkZCBhIFBBUlNFUiBjbGF1 c2UuCisJICovCisJLyogQ09QWSAqLworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJDT1BZPSIsIDEs CisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJjb3B5Iik7CisJaWYgKE9pZElzVmFs aWQoY29waWVkLm9iamVjdElkKSkKKwkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wLCAiJXt0c2Nv bmZpZ31EIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFRTQ29uZmlnUmVs YXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJIGNvcGllZC5vYmplY3RJZCkpOworCWVsc2UKKwkJYXBw ZW5kX25vdF9wcmVzZW50KHRtcCk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9v YmplY3QodG1wKSk7CisKKwkvKiBQQVJTRVIgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiUEFS U0VSPSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJwYXJzZXIiKTsKKwlp ZiAoY29waWVkLm9iamVjdElkID09IEludmFsaWRPaWQpCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0 KHRtcCwgIiV7cGFyc2VyfUQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUodHNw Rm9ybS0+cHJzbmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJCSAgTmFtZVN0cih0c3BGb3JtLT5wcnNu YW1lKSkpOworCWVsc2UKKwkJYXBwZW5kX25vdF9wcmVzZW50KHRtcCk7CisJbGlzdCA9IGxhcHBl bmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwlyZXQgPSBuZXdfb2JqdHJlZV9W QSgiQ1JFQVRFIFRFWFQgU0VBUkNIIENPTkZJR1VSQVRJT04gJXtpZGVudGl0eX1EICgle2VsZW1z OiwgfXMpIiwgMiwKKwkJCQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJIG5l d19vYmp0cmVlX2Zvcl9xdWFsbmFtZSh0c2NGb3JtLT5jZmduYW1lc3BhY2UsCisJCQkJCQkJCQkJ CQkgIE5hbWVTdHIodHNjRm9ybS0+Y2ZnbmFtZSkpLAorCQkJCQkJICJlbGVtcyIsIE9ialR5cGVB cnJheSwgbGlzdCk7CisKKwlSZWxlYXNlU3lzQ2FjaGUodHNwVHVwKTsKKwlSZWxlYXNlU3lzQ2Fj aGUodHNjVHVwKTsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogRGVwYXJzZSBhIENSRUFURSBU RVhUIFNFQVJDSCBQQVJTRVIgc3RhdGVtZW50LgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBD UkVBVEUgVEVYVCBTRUFSQ0ggUEFSU0VSICV7aWRlbnRpdHl9RCAoJXtlbGVtczosIH1zKQorICov CitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0RlZmluZVN0bXRfVFNQYXJzZXIoT2lkIG9iamVj dElkLCBEZWZpbmVTdG10ICpkZWZpbmUpCit7CisJSGVhcFR1cGxlCXRzcFR1cDsKKwlPYmpUcmVl ICAgICpyZXQ7CisJT2JqVHJlZSAgICAqdG1wOworCUxpc3QJICAgKmxpc3QgPSBOSUw7CisJRm9y bV9wZ190c19wYXJzZXIgdHNwRm9ybTsKKworCXRzcFR1cCA9IFNlYXJjaFN5c0NhY2hlMShUU1BB UlNFUk9JRCwgT2JqZWN0SWRHZXREYXR1bShvYmplY3RJZCkpOworCWlmICghSGVhcFR1cGxlSXNW YWxpZCh0c3BUdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgdGV4 dCBzZWFyY2ggcGFyc2VyIHdpdGggT0lEICV1IiwKKwkJCSBvYmplY3RJZCk7CisJdHNwRm9ybSA9 IChGb3JtX3BnX3RzX3BhcnNlcikgR0VUU1RSVUNUKHRzcFR1cCk7CisKKwkvKiBBZGQgdGhlIGRl ZmluaXRpb24gY2xhdXNlICovCisJLyogU1RBUlQgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgi U1RBUlQ9JXtwcm9jZWR1cmV9RCIsIDIsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcs ICJzdGFydCIsCisJCQkJCQkgInByb2NlZHVyZSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkgbmV3 X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJ CQkJIHRzcEZvcm0tPnByc3N0YXJ0KSk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVj dF9vYmplY3QodG1wKSk7CisKKwkvKiBHRVRUT0tFTiAqLworCXRtcCA9IG5ld19vYmp0cmVlX1ZB KCJHRVRUT0tFTj0le3Byb2NlZHVyZX1EIiwgMiwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0 cmluZywgImdldHRva2VuIiwKKwkJCQkJCSAicHJvY2VkdXJlIiwgT2JqVHlwZU9iamVjdCwKKwkJ CQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJ CQkJCQkJCQkJCQkgdHNwRm9ybS0+cHJzdG9rZW4pKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBu ZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCS8qIEVORCAqLworCXRtcCA9IG5ld19vYmp0cmVl X1ZBKCJFTkQ9JXtwcm9jZWR1cmV9RCIsIDIsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJp bmcsICJlbmQiLAorCQkJCQkJICJwcm9jZWR1cmUiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJIG5l d19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJ CQkJCSB0c3BGb3JtLT5wcnNlbmQpKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0 X29iamVjdCh0bXApKTsKKworCS8qIExFWFRZUEVTICovCisJdG1wID0gbmV3X29ianRyZWVfVkEo IkxFWFRZUEVTPSV7cHJvY2VkdXJlfUQiLCAyLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3Ry aW5nLCAibGV4dHlwZXMiLAorCQkJCQkJICJwcm9jZWR1cmUiLCBPYmpUeXBlT2JqZWN0LAorCQkJ CQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJ CQkJCQkJCQkJCSB0c3BGb3JtLT5wcnNsZXh0eXBlKSk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwg bmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkvKiBIRUFETElORSAqLworCXRtcCA9IG5ld19v Ymp0cmVlX1ZBKCJIRUFETElORT0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5n LCAiaGVhZGxpbmUiKTsKKwlpZiAoT2lkSXNWYWxpZCh0c3BGb3JtLT5wcnNoZWFkbGluZSkpCisJ CWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcCwgIiV7cHJvY2VkdXJlfUQiLAorCQkJCQkJCSBuZXdf b2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJ CQkJIHRzcEZvcm0tPnByc2hlYWRsaW5lKSk7CisJZWxzZQorCQlhcHBlbmRfbm90X3ByZXNlbnQo dG1wKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwor CXJldCA9IG5ld19vYmp0cmVlX1ZBKCJDUkVBVEUgVEVYVCBTRUFSQ0ggUEFSU0VSICV7aWRlbnRp dHl9RCAoJXtlbGVtczosIH1zKSIsIDIsCisJCQkJCQkgImlkZW50aXR5IiwgT2JqVHlwZU9iamVj dCwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUodHNwRm9ybS0+cHJzbmFtZXNwYWNl LAorCQkJCQkJCQkJCQkJICBOYW1lU3RyKHRzcEZvcm0tPnByc25hbWUpKSwKKwkJCQkJCSAiZWxl bXMiLCBPYmpUeXBlQXJyYXksIGxpc3QpOworCisJUmVsZWFzZVN5c0NhY2hlKHRzcFR1cCk7CisJ cmV0dXJuIHJldDsKK30KKworLyoKKyAqIERlcGFyc2UgYSBDUkVBVEUgVEVYVCBTRUFSQ0ggRElD VElPTkFSWSBzdGF0ZW1lbnQuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIENSRUFURSBURVhU IFNFQVJDSCBESUNUSU9OQVJZICV7aWRlbnRpdHl9RCAoJXtlbGVtczosIH1zKQorICovCitzdGF0 aWMgT2JqVHJlZSAqCitkZXBhcnNlX0RlZmluZVN0bXRfVFNEaWN0aW9uYXJ5KE9pZCBvYmplY3RJ ZCwgRGVmaW5lU3RtdCAqZGVmaW5lKQoreworCUhlYXBUdXBsZQl0c2RUdXA7CisJT2JqVHJlZSAg ICAqcmV0OworCU9ialRyZWUgICAgKnRtcDsKKwlMaXN0CSAgICpsaXN0ID0gTklMOworCURhdHVt CQlvcHRpb25zOworCWJvb2wJCWlzbnVsbDsKKwlGb3JtX3BnX3RzX2RpY3QgdHNkRm9ybTsKKwor CXRzZFR1cCA9IFNlYXJjaFN5c0NhY2hlMShUU0RJQ1RPSUQsIE9iamVjdElkR2V0RGF0dW0ob2Jq ZWN0SWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQodHNkVHVwKSkKKwkJZWxvZyhFUlJPUiwg ImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHRleHQgc2VhcmNoIGRpY3Rpb25hcnkgd2l0aCBPSUQg JXUiLAorCQkJIG9iamVjdElkKTsKKwl0c2RGb3JtID0gKEZvcm1fcGdfdHNfZGljdCkgR0VUU1RS VUNUKHRzZFR1cCk7CisKKworCisJLyogQWRkIHRoZSBkZWZpbml0aW9uIGNsYXVzZSAqLworCS8q IFRFTVBMQVRFICovCisJdG1wID0gbmV3X29ianRyZWVfVkEoIlRFTVBMQVRFPSIsIDEsCisJCQkJ CQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJ0ZW1wbGF0ZSIpOworCWFwcGVuZF9vYmplY3Rf b2JqZWN0KHRtcCwgIiV7dGVtcGxhdGV9RCIsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxu YW1lX2lkKFRTVGVtcGxhdGVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCSB0c2RGb3JtLT5kaWN0 dGVtcGxhdGUpKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXAp KTsKKworCS8qCisJICogb3B0aW9ucy4gIFhYWCB0aGlzIGlzIGEgcHJldHR5IHVzZWxlc3MgcmVw cmVzZW50YXRpb24sIGJ1dCB3ZSBjYW4ndCBkbworCSAqIGJldHRlciB3aXRob3V0IG1vcmUgdHNf Y2FjaGUuYyBjb29wZXJhdGlvbiAuLi4KKwkgKi8KKwlvcHRpb25zID0gU3lzQ2FjaGVHZXRBdHRy KFRTRElDVE9JRCwgdHNkVHVwLAorCQkJCQkJCSAgQW51bV9wZ190c19kaWN0X2RpY3Rpbml0b3B0 aW9uLAorCQkJCQkJCSAgJmlzbnVsbCk7CisJdG1wID0gbmV3X29ianRyZWUoIiIpOworCWlmICgh aXNudWxsKQorCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXAsICIle29wdGlvbnN9cyIsICJvcHRp b25zIiwKKwkJCQkJCQkgVGV4dERhdHVtR2V0Q1N0cmluZyhvcHRpb25zKSk7CisJZWxzZQorCQlh cHBlbmRfbm90X3ByZXNlbnQodG1wKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0 X29iamVjdCh0bXApKTsKKworCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJDUkVBVEUgVEVYVCBTRUFS Q0ggRElDVElPTkFSWSAle2lkZW50aXR5fUQgKCV7ZWxlbXM6LCB9cykiLCAyLAorCQkJCQkJICJp ZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1l KHRzZEZvcm0tPmRpY3RuYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkgIE5hbWVTdHIodHNkRm9ybS0+ ZGljdG5hbWUpKSwKKwkJCQkJCSAiZWxlbXMiLCBPYmpUeXBlQXJyYXksIGxpc3QpOworCisJUmVs ZWFzZVN5c0NhY2hlKHRzZFR1cCk7CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIERlcGFyc2Ug YSBDUkVBVEUgVEVYVCBTRUFSQ0ggVEVNUExBVEUgc3RhdGVtZW50LgorICoKKyAqIFZlcmJvc2Ug c3ludGF4CisgKiBDUkVBVEUgVEVYVCBTRUFSQ0ggVEVNUExBVEUgJXtpZGVudGl0eX1EICgle2Vs ZW1zOiwgfXMpCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfRGVmaW5lU3RtdF9UU1Rl bXBsYXRlKE9pZCBvYmplY3RJZCwgRGVmaW5lU3RtdCAqZGVmaW5lKQoreworCUhlYXBUdXBsZQl0 c3RUdXA7CisJT2JqVHJlZSAgICAqcmV0OworCU9ialRyZWUgICAgKnRtcDsKKwlMaXN0CSAgICps aXN0ID0gTklMOworCUZvcm1fcGdfdHNfdGVtcGxhdGUgdHN0Rm9ybTsKKworCXRzdFR1cCA9IFNl YXJjaFN5c0NhY2hlMShUU1RFTVBMQVRFT0lELCBPYmplY3RJZEdldERhdHVtKG9iamVjdElkKSk7 CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHRzdFR1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBs b29rdXAgZmFpbGVkIGZvciB0ZXh0IHNlYXJjaCB0ZW1wbGF0ZSB3aXRoIE9JRCAldSIsCisJCQkg b2JqZWN0SWQpOworCXRzdEZvcm0gPSAoRm9ybV9wZ190c190ZW1wbGF0ZSkgR0VUU1RSVUNUKHRz dFR1cCk7CisKKwkvKiBBZGQgdGhlIGRlZmluaXRpb24gY2xhdXNlICovCisJLyogSU5JVCAqLwor CXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJJTklUPSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5 cGVTdHJpbmcsICJpbml0Iik7CisJaWYgKE9pZElzVmFsaWQodHN0Rm9ybS0+dG1wbGluaXQpKQor CQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXAsICIle3Byb2NlZHVyZX1EIiwKKwkJCQkJCQkgbmV3 X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJ CQkJCSB0c3RGb3JtLT50bXBsaW5pdCkpOworCWVsc2UKKwkJYXBwZW5kX25vdF9wcmVzZW50KHRt cCk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkv KiBMRVhJWkUgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiTEVYSVpFPSV7cHJvY2VkdXJlfUQi LCAyLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAibGV4aXplIiwKKwkJCQkJCSAi cHJvY2VkdXJlIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5h bWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkgdHN0Rm9ybS0+dG1wbGxl eGl6ZSkpOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOwor CisJcmV0ID0gbmV3X29ianRyZWVfVkEoIkNSRUFURSBURVhUIFNFQVJDSCBURU1QTEFURSAle2lk ZW50aXR5fUQgKCV7ZWxlbXM6LCB9cykiLCAyLAorCQkJCQkJICJpZGVudGl0eSIsIE9ialR5cGVP YmplY3QsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKHRzdEZvcm0tPnRtcGxuYW1l c3BhY2UsCisJCQkJCQkJCQkJCQkgIE5hbWVTdHIodHN0Rm9ybS0+dG1wbG5hbWUpKSwKKwkJCQkJ CSAiZWxlbXMiLCBPYmpUeXBlQXJyYXksIGxpc3QpOworCisJUmVsZWFzZVN5c0NhY2hlKHRzdFR1 cCk7CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIERlcGFyc2UgYW4gQUxURVIgVEVYVCBTRUFS Q0ggQ09ORklHVVJBVElPTiBzdGF0ZW1lbnQuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIEFM VEVSIFRFWFQgU0VBUkNIIENPTkZJR1VSQVRJT04gJXtpZGVudGl0eX1EIEFERCBNQVBQSU5HCisg KiBGT1IgJXt0b2tlbnR5cGU6LCB9SSBXSVRIICV7ZGljdGlvbmFyaWVzOiwgfUQKKyAqCU9SCisg KiBBTFRFUiBURVhUIFNFQVJDSCBDT05GSUdVUkFUSU9OICV7aWRlbnRpdHl9RCBEUk9QIE1BUFBJ TkcgJXtpZl9leGlzdHN9cworICogRk9SICV7dG9rZW50eXBlfUkKKyAqCU9SCisgKiBBTFRFUiBU RVhUIFNFQVJDSCBDT05GSUdVUkFUSU9OICV7aWRlbnRpdHl9RCBBTFRFUiBNQVBQSU5HCisgKiBG T1IgJXt0b2tlbnR5cGU6LCB9SSBXSVRIICV7ZGljdGlvbmFyaWVzOiwgfUQKKyAqCU9SCisgKiBB TFRFUiBURVhUIFNFQVJDSCBDT05GSUdVUkFUSU9OICV7aWRlbnRpdHl9RCBBTFRFUiBNQVBQSU5H CisgKiBSRVBMQUNFICV7b2xkX2RpY3Rpb25hcnl9RCBXSVRIICV7bmV3X2RpY3Rpb25hcnl9RAor ICoJT1IKKyAqIEFMVEVSIFRFWFQgU0VBUkNIIENPTkZJR1VSQVRJT04gJXtpZGVudGl0eX1EIEFM VEVSIE1BUFBJTkcKKyAqIEZPUiAle3Rva2VudHlwZTosIH1JIFJFUExBQ0UgJXtvbGRfZGljdGlv bmFyeX1EIFdJVEggJXtuZXdfZGljdGlvbmFyeX1ECisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2Rl cGFyc2VfQWx0ZXJUU0NvbmZpZ3VyYXRpb25TdG10KENvbGxlY3RlZENvbW1hbmQgKmNtZCkKK3sK KwlBbHRlclRTQ29uZmlndXJhdGlvblN0bXQgKm5vZGUgPSAoQWx0ZXJUU0NvbmZpZ3VyYXRpb25T dG10ICopIGNtZC0+cGFyc2V0cmVlOworCU9ialRyZWUgICAgKnJldDsKKwlPYmpUcmVlICAgICp0 bXA7CisJTGlzdAkgICAqbGlzdCA9IE5JTDsKKwlMaXN0Q2VsbCAgICpjZWxsOworCWludAkJCWk7 CisKKwlyZXQgPSBuZXdfb2JqdHJlZSgiQUxURVIgVEVYVCBTRUFSQ0ggQ09ORklHVVJBVElPTiIp OworCisJLyogRGV0ZXJtaW5lIHRoZSBmb3JtYXQgc3RyaW5nIGFwcHJvcHJpYXRlIHRvIGVhY2gg c3ViY29tbWFuZCAqLworCXN3aXRjaCAobm9kZS0+a2luZCkKKwl7CisJCWNhc2UgQUxURVJfVFND T05GSUdfQUREX01BUFBJTkc6CisJCQlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICIle2lkZW50 aXR5fUQgQUREIE1BUFBJTkciLAorCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lk KGNtZC0+ZC5hdHNjZmcuYWRkcmVzcy5jbGFzc0lkLAorCQkJCQkJCQkJCQkJCQkJIGNtZC0+ZC5h dHNjZmcuYWRkcmVzcy5vYmplY3RJZCkpOworCQkJYnJlYWs7CisKKwkJY2FzZSBBTFRFUl9UU0NP TkZJR19EUk9QX01BUFBJTkc6CisJCQlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICIle2lkZW50 aXR5fUQgRFJPUCBNQVBQSU5HIiwKKwkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9p ZChjbWQtPmQuYXRzY2ZnLmFkZHJlc3MuY2xhc3NJZCwKKwkJCQkJCQkJCQkJCQkJCSBjbWQtPmQu YXRzY2ZnLmFkZHJlc3Mub2JqZWN0SWQpKTsKKwkJCXRtcCA9IG5ld19vYmp0cmVlKCJJRiBFWElT VFMiKTsKKwkJCWFwcGVuZF9ib29sX29iamVjdCh0bXAsICJwcmVzZW50Iiwgbm9kZS0+bWlzc2lu Z19vayk7CisJCQlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICIle2lmX2V4aXN0c31zIiwgdG1w KTsKKwkJCWJyZWFrOworCisJCWNhc2UgQUxURVJfVFNDT05GSUdfQUxURVJfTUFQUElOR19GT1Jf VE9LRU46CisJCWNhc2UgQUxURVJfVFNDT05GSUdfUkVQTEFDRV9ESUNUOgorCQljYXNlIEFMVEVS X1RTQ09ORklHX1JFUExBQ0VfRElDVF9GT1JfVE9LRU46CisJCQlhcHBlbmRfb2JqZWN0X29iamVj dChyZXQsICIle2lkZW50aXR5fUQgQUxURVIgTUFQUElORyIsCisJCQkJCQkJCSBuZXdfb2JqdHJl ZV9mb3JfcXVhbG5hbWVfaWQoY21kLT5kLmF0c2NmZy5hZGRyZXNzLmNsYXNzSWQsCisJCQkJCQkJ CQkJCQkJCQkgY21kLT5kLmF0c2NmZy5hZGRyZXNzLm9iamVjdElkKSk7CisJCQlicmVhazsKKwl9 CisKKwkvKiBBZGQgdGhlIGFmZmVjdGVkIHRva2VuIGxpc3QsIGZvciBzdWJjb21tYW5kcyB0aGF0 IGhhdmUgb25lICovCisJaWYgKG5vZGUtPmtpbmQgPT0gQUxURVJfVFNDT05GSUdfQUREX01BUFBJ TkcgfHwKKwkJbm9kZS0+a2luZCA9PSBBTFRFUl9UU0NPTkZJR19BTFRFUl9NQVBQSU5HX0ZPUl9U T0tFTiB8fAorCQlub2RlLT5raW5kID09IEFMVEVSX1RTQ09ORklHX1JFUExBQ0VfRElDVF9GT1Jf VE9LRU4gfHwKKwkJbm9kZS0+a2luZCA9PSBBTFRFUl9UU0NPTkZJR19EUk9QX01BUFBJTkcpCisJ eworCQlmb3JlYWNoKGNlbGwsIG5vZGUtPnRva2VudHlwZSkKKwkJCWxpc3QgPSBsYXBwZW5kKGxp c3QsIG5ld19zdHJpbmdfb2JqZWN0KHN0clZhbChsZmlyc3QoY2VsbCkpKSk7CisJCWFwcGVuZF9h cnJheV9vYmplY3QocmV0LCAiRk9SICV7dG9rZW50eXBlOiwgfUkiLCBsaXN0KTsKKwl9CisKKwkv KiBBZGQgZnVydGhlciBzdWJjb21tYW5kLXNwZWNpZmljIGVsZW1lbnRzICovCisJaWYgKG5vZGUt PmtpbmQgPT0gQUxURVJfVFNDT05GSUdfQUREX01BUFBJTkcgfHwKKwkJbm9kZS0+a2luZCA9PSBB TFRFUl9UU0NPTkZJR19BTFRFUl9NQVBQSU5HX0ZPUl9UT0tFTikKKwl7CisJCS8qIEFERCBNQVBQ SU5HIGFuZCBBTFRFUiBNQVBQSU5HIEZPUiBuZWVkIGEgbGlzdCBvZiBkaWN0aW9uYXJpZXMgKi8K KwkJbGlzdCA9IE5JTDsKKwkJZm9yIChpID0gMDsgaSA8IGNtZC0+ZC5hdHNjZmcubmRpY3RzOyBp KyspCisJCXsKKwkJCU9ialRyZWUgICAgKmRpY3Rfb2JqOworCisJCQlkaWN0X29iaiA9IG5ld19v Ymp0cmVlX2Zvcl9xdWFsbmFtZV9pZChUU0RpY3Rpb25hcnlSZWxhdGlvbklkLAorCQkJCQkJCQkJ CQkJICBjbWQtPmQuYXRzY2ZnLmRpY3RJZHNbaV0pOworCQkJbGlzdCA9IGxhcHBlbmQobGlzdCwK KwkJCQkJCSAgIG5ld19vYmplY3Rfb2JqZWN0KGRpY3Rfb2JqKSk7CisJCX0KKwkJYXBwZW5kX2Fy cmF5X29iamVjdChyZXQsICJXSVRIICV7ZGljdGlvbmFyaWVzOiwgfUQiLCBsaXN0KTsKKwl9CisJ ZWxzZSBpZiAobm9kZS0+a2luZCA9PSBBTFRFUl9UU0NPTkZJR19SRVBMQUNFX0RJQ1QgfHwKKwkJ CSBub2RlLT5raW5kID09IEFMVEVSX1RTQ09ORklHX1JFUExBQ0VfRElDVF9GT1JfVE9LRU4pCisJ eworCQkvKiBUaGUgUkVQTEFDRSBmb3JtcyB3YW50IG9sZCBhbmQgbmV3IGRpY3Rpb25hcmllcyAq LworCQlBc3NlcnQoY21kLT5kLmF0c2NmZy5uZGljdHMgPT0gMik7CisJCWFwcGVuZF9vYmplY3Rf b2JqZWN0KHJldCwgIlJFUExBQ0UgJXtvbGRfZGljdGlvbmFyeX1EIiwKKwkJCQkJCQkgbmV3X29i anRyZWVfZm9yX3F1YWxuYW1lX2lkKFRTRGljdGlvbmFyeVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJ CQkJCSBjbWQtPmQuYXRzY2ZnLmRpY3RJZHNbMF0pKTsKKwkJYXBwZW5kX29iamVjdF9vYmplY3Qo cmV0LCAiV0lUSCAle25ld19kaWN0aW9uYXJ5fUQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3Jf cXVhbG5hbWVfaWQoVFNEaWN0aW9uYXJ5UmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJIGNtZC0+ ZC5hdHNjZmcuZGljdElkc1sxXSkpOworCX0KKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBE ZXBhcnNlIGFuIEFMVEVSIFRFWFQgU0VBUkNIIERJQ1RJT05BUlkgc3RhdGVtZW50LgorICoKKyAq IFZlcmJvc2Ugc3ludGF4CisgKiBBTFRFUiBURVhUIFNFQVJDSCBESUNUSU9OQVJZICV7aWRlbnRp dHl9RCAoJXtkZWZpbml0aW9uOiwgfXMpCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2Vf QWx0ZXJUU0RpY3Rpb25hcnlTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQorewor CU9ialRyZWUgICAgKnJldDsKKwlPYmpUcmVlICAgICp0bXA7CisJRGF0dW0JCW9wdGlvbnM7CisJ TGlzdAkgICAqZGVmaW5pdGlvbiA9IE5JTDsKKwlib29sCQlpc251bGw7CisJSGVhcFR1cGxlCXRz ZFR1cDsKKwlGb3JtX3BnX3RzX2RpY3QgdHNkRm9ybTsKKworCXRzZFR1cCA9IFNlYXJjaFN5c0Nh Y2hlMShUU0RJQ1RPSUQsIE9iamVjdElkR2V0RGF0dW0ob2JqZWN0SWQpKTsKKwlpZiAoIUhlYXBU dXBsZUlzVmFsaWQodHNkVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQg Zm9yIHRleHQgc2VhcmNoIGRpY3Rpb25hcnkgd2l0aCBPSUQgJXUiLAorCQkJIG9iamVjdElkKTsK Kwl0c2RGb3JtID0gKEZvcm1fcGdfdHNfZGljdCkgR0VUU1RSVUNUKHRzZFR1cCk7CisKKwkvKgor CSAqIEFkZCB0aGUgZGVmaW5pdGlvbiBsaXN0IGFjY29yZGluZyB0byB0aGUgcGdfdHNfZGljdCBk aWN0aW5pdG9wdGlvbgorCSAqIGNvbHVtbgorCSAqLworCW9wdGlvbnMgPSBTeXNDYWNoZUdldEF0 dHIoVFNESUNUT0lELCB0c2RUdXAsCisJCQkJCQkJICBBbnVtX3BnX3RzX2RpY3RfZGljdGluaXRv cHRpb24sCisJCQkJCQkJICAmaXNudWxsKTsKKwl0bXAgPSBuZXdfb2JqdHJlZSgiIik7CisJaWYg KCFpc251bGwpCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcCwgIiV7b3B0aW9uc31zIiwgIm9w dGlvbnMiLAorCQkJCQkJCSBUZXh0RGF0dW1HZXRDU3RyaW5nKG9wdGlvbnMpKTsKKwllbHNlCisJ CWFwcGVuZF9ub3RfcHJlc2VudCh0bXApOworCisJZGVmaW5pdGlvbiA9IGxhcHBlbmQoZGVmaW5p dGlvbiwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgi QUxURVIgVEVYVCBTRUFSQ0ggRElDVElPTkFSWSAle2lkZW50aXR5fUQgKCV7ZGVmaW5pdGlvbjos IH1zKSIsIDIsCisJCQkJCQkgImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSBuZXdf b2JqdHJlZV9mb3JfcXVhbG5hbWUodHNkRm9ybS0+ZGljdG5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJ CSAgTmFtZVN0cih0c2RGb3JtLT5kaWN0bmFtZSkpLAorCQkJCQkJICJkZWZpbml0aW9uIiwgT2Jq VHlwZUFycmF5LCBkZWZpbml0aW9uKTsKKworCVJlbGVhc2VTeXNDYWNoZSh0c2RUdXApOworCXJl dHVybiByZXQ7Cit9CisKKy8qCisgKiBkZXBhcnNlX1ZpZXdTdG10CisgKgkJZGVwYXJzZSBhIFZp ZXdTdG10CisgKgorICogR2l2ZW4gYSB2aWV3IE9JRCBhbmQgdGhlIHBhcnNlIHRyZWUgdGhhdCBj cmVhdGVkIGl0LCByZXR1cm4gYW4gT2JqVHJlZQorICogcmVwcmVzZW50aW5nIHRoZSBjcmVhdGlv biBjb21tYW5kLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBDUkVBVEUgJXtvcl9yZXBsYWNl fXMgJXtwZXJzaXN0ZW5jZX1zIFZJRVcgJXtpZGVudGl0eX1EIEFTICV7cXVlcnl9cworICovCitz dGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX1ZpZXdTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFy c2V0cmVlKQoreworCVZpZXdTdG10ICAgKm5vZGUgPSAoVmlld1N0bXQgKikgcGFyc2V0cmVlOwor CU9ialRyZWUgICAgKnJldDsKKwlSZWxhdGlvbglyZWxhdGlvbjsKKworCXJlbGF0aW9uID0gcmVs YXRpb25fb3BlbihvYmplY3RJZCwgQWNjZXNzU2hhcmVMb2NrKTsKKworCXJldCA9IG5ld19vYmp0 cmVlX1ZBKCJDUkVBVEUgJXtvcl9yZXBsYWNlfXMgJXtwZXJzaXN0ZW5jZX1zIFZJRVcgJXtpZGVu dGl0eX1EIEFTICV7cXVlcnl9cyIsIDQsCisJCQkJCQkgIm9yX3JlcGxhY2UiLCBPYmpUeXBlU3Ry aW5nLAorCQkJCQkJIG5vZGUtPnJlcGxhY2UgPyAiT1IgUkVQTEFDRSIgOiAiIiwKKwkJCQkJCSAi cGVyc2lzdGVuY2UiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJIGdldF9wZXJzaXN0ZW5jZV9zdHIo cmVsYXRpb24tPnJkX3JlbC0+cmVscGVyc2lzdGVuY2UpLAorCQkJCQkJICJpZGVudGl0eSIsIE9i alR5cGVPYmplY3QsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKHJlbGF0aW9uLT5y ZF9yZWwtPnJlbG5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCSAgUmVsYXRpb25HZXRSZWxhdGlvbk5h bWUocmVsYXRpb24pKSwKKwkJCQkJCSAicXVlcnkiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJIHBn X2dldF92aWV3ZGVmX2ludGVybmFsKG9iamVjdElkKSk7CisKKwlyZWxhdGlvbl9jbG9zZShyZWxh dGlvbiwgQWNjZXNzU2hhcmVMb2NrKTsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogRGVwYXJz ZSBDUkVBVEUgTWF0ZXJpYWxpemVkIFZpZXcgc3RhdGVtZW50LCBpdCBpcyBhIHZhcmlhbnQgb2YK KyAqIENyZWF0ZVRhYmxlQXNTdG10CisgKgorICogTm90ZSB0aGF0IENSRUFURSBUQUJMRSBBUyBT RUxFQ1QgSU5UTyBjYW4gYWxzbyBiZSBkZXBhcnNlZCBieQorICogZGVwYXJzZV9DcmVhdGVUYWJs ZUFzU3RtdCB0byByZW1vdmUgdGhlIFNFTEVDVCBJTlRPIGNsYXVzZS4KKyAqCisgKiBWZXJib3Nl IHN5bnRheAorICogQ1JFQVRFICV7cGVyc2lzdGVuY2V9cyBbTUFURVJJQUxJWkVEIFZJRVcgfCBU QUJMRV0gJXtpZl9ub3RfZXhpc3RzfXMKKyAqIAkJJXtpZGVudGl0eX1EICV7Y29sdW1uc31zIFsl e29uX2NvbW1pdH1zXSAle3RhYmxlc3BhY2V9cworICogIAkJQVMgJXtxdWVyeX1zICV7d2l0aF9u b19kYXRhfXMiCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQ3JlYXRlVGFibGVBc1N0 bXRfdmFuaWxsYShPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlDcmVhdGVUYWJs ZUFzU3RtdCAqbm9kZSA9IChDcmVhdGVUYWJsZUFzU3RtdCAqKSBwYXJzZXRyZWU7CisJUmVsYXRp b24JcmVsYXRpb24gPSByZWxhdGlvbl9vcGVuKG9iamVjdElkLCBBY2Nlc3NTaGFyZUxvY2spOwor CU9ialRyZWUgICAgKnJldDsKKwlPYmpUcmVlICAgICp0bXA7CisJT2JqVHJlZSAgICAqdG1wMjsK KwljaGFyCSAgICpmbXQ7CisJTGlzdAkgICAqbGlzdCA9IE5JTDsKKwlMaXN0Q2VsbCAgICpjZWxs OworCisJLyogUmVqZWN0IHVuc3VwcG9ydGVkIGNhc2UgcmlnaHQgYXdheS4gKi8KKwlpZiAoKChR dWVyeSAqKSAobm9kZS0+cXVlcnkpKS0+Y29tbWFuZFR5cGUgPT0gQ01EX1VUSUxJVFkpCisJCWVs b2coRVJST1IsICJ1bmltcGxlbWVudGVkIGRlcGFyc2Ugb2YgQ1JFQVRFIFRBQkxFIEFTIEVYRUNV VEUiKTsKKworCS8qCisJICogTm90ZSB0aGF0IElOU0VSVCBJTlRPIGlzIGRlcGFyc2VkIGFzIENS RUFURSBUQUJMRSBBUy4gIFRoZXkgYXJlCisJICogZnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQgc3lu b255bXMgc28gdGhlcmUgaXMgbm8gaGFybSBmcm9tIHRoaXMuCisJICovCisJaWYgKG5vZGUtPm9i anR5cGUgPT0gT0JKRUNUX01BVFZJRVcpCisJCWZtdCA9ICJDUkVBVEUgJXtwZXJzaXN0ZW5jZX1z IE1BVEVSSUFMSVpFRCBWSUVXICV7aWZfbm90X2V4aXN0c31zICV7aWRlbnRpdHl9RCI7CisJZWxz ZQorCQlmbXQgPSAiQ1JFQVRFICV7cGVyc2lzdGVuY2V9cyBUQUJMRSAle2lmX25vdF9leGlzdHN9 cyAle2lkZW50aXR5fUQiOworCisJcmV0ID0gbmV3X29ianRyZWVfVkEoZm10LCAzLAorCQkJCQkJ ICJwZXJzaXN0ZW5jZSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkgZ2V0X3BlcnNpc3RlbmNlX3N0 cihub2RlLT5pbnRvLT5yZWwtPnJlbHBlcnNpc3RlbmNlKSwKKwkJCQkJCSAiaWZfbm90X2V4aXN0 cyIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkgbm9kZS0+aWZfbm90X2V4aXN0cyA/ICJJRiBOT1Qg RVhJU1RTIiA6ICIiLAorCQkJCQkJICJpZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkg bmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFJlbGF0aW9uUmVsYXRpb25JZCwKKwkJCQkJCQkJ CQkJCQkgb2JqZWN0SWQpKTsKKworCS8qIENPTFVNTlMgY2xhdXNlICovCisJaWYgKG5vZGUtPmlu dG8tPmNvbE5hbWVzKQorCXsKKwkJZm9yZWFjaChjZWxsLCBub2RlLT5pbnRvLT5jb2xOYW1lcykK KwkJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19zdHJpbmdfb2JqZWN0KHN0clZhbChsZmlyc3Qo Y2VsbCkpKSk7CisKKwkJdG1wID0gbmV3X29ianRyZWVfVkEoIigle2NvbHVtbnM6LCB9SSkiLCAx LAorCQkJCQkJCSAiY29sdW1ucyIsIE9ialR5cGVBcnJheSwgbGlzdCk7CisJfQorCWVsc2UKKwkJ dG1wID0gbmV3X29ianRyZWVfVkEoIiIsIDEsCisJCQkJCQkJICJwcmVzZW50IiwgT2JqVHlwZUJv b2wsIGZhbHNlKTsKKworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7Y29sdW1uc31zIiwg dG1wKTsKKworCS8qIFVTSU5HIGNsYXVzZSAqLworCXRtcCA9IG5ld19vYmp0cmVlKCJVU0lORyIp OworCWlmIChub2RlLT5pbnRvLT5hY2Nlc3NNZXRob2QpCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0 KHRtcCwgIiV7YWNjZXNzX21ldGhvZH1JIiwgImFjY2Vzc19tZXRob2QiLAorCQkJCQkJCSBub2Rl LT5pbnRvLT5hY2Nlc3NNZXRob2QpOworCWVsc2UKKwl7CisJCWFwcGVuZF9udWxsX29iamVjdCh0 bXAsICIle2FjY2Vzc19tZXRob2R9SSIpOworCQlhcHBlbmRfbm90X3ByZXNlbnQodG1wKTsKKwl9 CisJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiJXthY2Nlc3NfbWV0aG9kfXMiLCB0bXApOwor CisJLyogV0lUSCBjbGF1c2UgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZSgiV0lUSCIpOworCWxpc3Qg PSBOSUw7CisKKwlmb3JlYWNoKGNlbGwsIG5vZGUtPmludG8tPm9wdGlvbnMpCisJeworCQlEZWZF bGVtICAgICpvcHQgPSAoRGVmRWxlbSAqKSBsZmlyc3QoY2VsbCk7CisKKwkJdG1wMiA9IGRlcGFy c2VfRGVmRWxlbShvcHQsIGZhbHNlKTsKKwkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVj dF9vYmplY3QodG1wMikpOworCX0KKworCWlmIChsaXN0KQorCQlhcHBlbmRfYXJyYXlfb2JqZWN0 KHRtcCwgIigle3dpdGg6LCB9cykiLCBsaXN0KTsKKwllbHNlCisJCWFwcGVuZF9ub3RfcHJlc2Vu dCh0bXApOworCisJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiJXt3aXRoX2NsYXVzZX1zIiwg dG1wKTsKKworCS8qIE9OIENPTU1JVCBjbGF1c2UuICBDUkVBVEUgTUFURVJJQUxJWkVEIFZJRVcg ZG9lc24ndCBoYXZlIG9uZSAqLworCWlmIChub2RlLT5vYmp0eXBlID09IE9CSkVDVF9UQUJMRSkK KwkJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiJXtvbl9jb21taXR9cyIsCisJCQkJCQkJIGRl cGFyc2VfT25Db21taXRDbGF1c2Uobm9kZS0+aW50by0+b25Db21taXQpKTsKKworCS8qIFRBQkxF U1BBQ0UgY2xhdXNlICovCisJdG1wID0gbmV3X29ianRyZWUoIlRBQkxFU1BBQ0UgJXt0YWJsZXNw YWNlfUkiKTsKKwlpZiAobm9kZS0+aW50by0+dGFibGVTcGFjZU5hbWUpCisJCWFwcGVuZF9zdHJp bmdfb2JqZWN0KHRtcCwgIiV7dGFibGVzcGFjZX1zIiwgInRhYmxlc3BhY2UiLAorCQkJCQkJCSBu b2RlLT5pbnRvLT50YWJsZVNwYWNlTmFtZSk7CisJZWxzZQorCXsKKwkJYXBwZW5kX251bGxfb2Jq ZWN0KHRtcCwgIiV7dGFibGVzcGFjZX1JIik7CisJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXApOwor CX0KKwlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICIle3RhYmxlc3BhY2V9cyIsIHRtcCk7CisK KwkvKiBBZGQgdGhlIHF1ZXJ5ICovCisJQXNzZXJ0KElzQShub2RlLT5xdWVyeSwgUXVlcnkpKTsK KwlhcHBlbmRfc3RyaW5nX29iamVjdChyZXQsICJBUyAle3F1ZXJ5fXMiLCAicXVlcnkiLAorCQkJ CQkJIHBnX2dldF9xdWVyeWRlZigoUXVlcnkgKikgbm9kZS0+cXVlcnksIGZhbHNlKSk7CisKKwkv KiBBZGQgYSBXSVRIIE5PIERBVEEgY2xhdXNlICovCisJdG1wID0gbmV3X29ianRyZWVfVkEoIldJ VEggTk8gREFUQSIsIDEsCisJCQkJCQkgInByZXNlbnQiLCBPYmpUeXBlQm9vbCwKKwkJCQkJCSBu b2RlLT5pbnRvLT5za2lwRGF0YSA/IHRydWUgOiBmYWxzZSk7CisJYXBwZW5kX29iamVjdF9vYmpl Y3QocmV0LCAiJXt3aXRoX25vX2RhdGF9cyIsIHRtcCk7CisKKwlyZWxhdGlvbl9jbG9zZShyZWxh dGlvbiwgQWNjZXNzU2hhcmVMb2NrKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBEZXBh cnNlIGEgQ3JlYXRlVHJpZ1N0bXQgKENSRUFURSBUUklHR0VSKQorICoKKyAqIEdpdmVuIGEgdHJp Z2dlciBPSUQgYW5kIHRoZSBwYXJzZSB0cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0dXJuIGFuIE9i alRyZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgY3JlYXRpb24gY29tbWFuZC4KKyAqCisgKiBWZXJi b3NlIHN5bnRheAorICogQ1JFQVRFICV7Y29uc3RyYWludH1zIFRSSUdHRVIgJXtuYW1lfUkgJXt0 aW1lfXMgJXtldmVudHM6IE9SIH1zIE9OCisgKiAle3JlbGF0aW9ufUQgJXtmcm9tX3RhYmxlfXMg JXtjb25zdHJhaW50X2F0dHJzOiB9cyBGT1IgRUFDSAorICogJXtmb3JfZWFjaH1zICV7d2hlbn1z IEVYRUNVVEUgUFJPQ0VEVVJFICV7ZnVuY3Rpb259cworICovCitzdGF0aWMgT2JqVHJlZSAqCitk ZXBhcnNlX0NyZWF0ZVRyaWdTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQorewor CUNyZWF0ZVRyaWdTdG10ICpub2RlID0gKENyZWF0ZVRyaWdTdG10ICopIHBhcnNldHJlZTsKKwlS ZWxhdGlvbglwZ190cmlnZ2VyOworCUhlYXBUdXBsZQl0cmlnVHVwOworCUZvcm1fcGdfdHJpZ2dl ciB0cmlnRm9ybTsKKwlPYmpUcmVlICAgICpyZXQ7CisJT2JqVHJlZSAgICAqdG1wX29iajsKKwlp bnQJCQl0Z25hcmdzOworCUxpc3QJICAgKmxpc3QgPSBOSUw7CisJTGlzdAkgICAqZXZlbnRzOwor CWNoYXIJICAgKnRyaWd0aW1pbmc7CisKKwlwZ190cmlnZ2VyID0gdGFibGVfb3BlbihUcmlnZ2Vy UmVsYXRpb25JZCwgQWNjZXNzU2hhcmVMb2NrKTsKKworCXRyaWdUdXAgPSBnZXRfY2F0YWxvZ19v YmplY3RfYnlfb2lkKHBnX3RyaWdnZXIsIEFudW1fcGdfdHJpZ2dlcl9vaWQsIG9iamVjdElkKTsK Kwl0cmlnRm9ybSA9IChGb3JtX3BnX3RyaWdnZXIpIEdFVFNUUlVDVCh0cmlnVHVwKTsKKworCXRy aWd0aW1pbmcgPSBub2RlLT50aW1pbmcgPT0gVFJJR0dFUl9UWVBFX0JFRk9SRSA/ICJCRUZPUkUi IDoKKwkJbm9kZS0+dGltaW5nID09IFRSSUdHRVJfVFlQRV9BRlRFUiA/ICJBRlRFUiIgOgorCQlu b2RlLT50aW1pbmcgPT0gVFJJR0dFUl9UWVBFX0lOU1RFQUQgPyAiSU5TVEVBRCBPRiIgOgorCQlO VUxMOworCWlmICghdHJpZ3RpbWluZykKKwkJZWxvZyhFUlJPUiwgInVucmVjb2duaXplZCB0cmln Z2VyIHRpbWluZyB0eXBlICVkIiwgbm9kZS0+dGltaW5nKTsKKworCXJldCA9IG5ld19vYmp0cmVl X1ZBKCJDUkVBVEUgJXtjb25zdHJhaW50fXMgVFJJR0dFUiAle25hbWV9SSAle3RpbWV9cyIsIDMs CisJCQkJCQkgImNvbnN0cmFpbnQiLCBPYmpUeXBlU3RyaW5nLCBub2RlLT5pc2NvbnN0cmFpbnQg PyAiQ09OU1RSQUlOVCIgOiAiIiwKKwkJCQkJCSAibmFtZSIsIE9ialR5cGVTdHJpbmcsIG5vZGUt PnRyaWduYW1lLAorCQkJCQkJICJ0aW1lIiwgT2JqVHlwZVN0cmluZywgdHJpZ3RpbWluZyk7CisK KwkvKgorCSAqIERlY29kZSB0aGUgZXZlbnRzIHRoYXQgdGhlIHRyaWdnZXIgZmlyZXMgZm9yLiAg VGhlIG91dHB1dCBpcyBhIGxpc3Q7IGluCisJICogbW9zdCBjYXNlcyBpdCB3aWxsIGp1c3QgYmUg YSBzdHJpbmcgd2l0aCB0aGUgZXZlbnQgbmFtZSwgYnV0IHdoZW4KKwkgKiB0aGVyZSdzIGFuIFVQ REFURSB3aXRoIGEgbGlzdCBvZiBjb2x1bW5zLCB3ZSByZXR1cm4gYSBKU09OIG9iamVjdC4KKwkg Ki8KKwlldmVudHMgPSBOSUw7CisJaWYgKG5vZGUtPmV2ZW50cyAmIFRSSUdHRVJfVFlQRV9JTlNF UlQpCisJCWV2ZW50cyA9IGxhcHBlbmQoZXZlbnRzLCBuZXdfc3RyaW5nX29iamVjdCgiSU5TRVJU IikpOworCWlmIChub2RlLT5ldmVudHMgJiBUUklHR0VSX1RZUEVfREVMRVRFKQorCQlldmVudHMg PSBsYXBwZW5kKGV2ZW50cywgbmV3X3N0cmluZ19vYmplY3QoIkRFTEVURSIpKTsKKwlpZiAobm9k ZS0+ZXZlbnRzICYgVFJJR0dFUl9UWVBFX1RSVU5DQVRFKQorCQlldmVudHMgPSBsYXBwZW5kKGV2 ZW50cywgbmV3X3N0cmluZ19vYmplY3QoIlRSVU5DQVRFIikpOworCWlmIChub2RlLT5ldmVudHMg JiBUUklHR0VSX1RZUEVfVVBEQVRFKQorCXsKKwkJaWYgKG5vZGUtPmNvbHVtbnMgPT0gTklMKQor CQl7CisJCQlldmVudHMgPSBsYXBwZW5kKGV2ZW50cywgbmV3X3N0cmluZ19vYmplY3QoIlVQREFU RSIpKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCU9ialRyZWUgICAgKnVwZGF0ZTsKKwkJCUxpc3RD ZWxsICAgKmNlbGw7CisJCQlMaXN0CSAgICpjb2xzID0gTklMOworCisJCQkvKgorCQkJICogQ3Vy cmVudGx5IG9ubHkgVVBEQVRFIE9GIGNhbiBiZSBvYmplY3RzIGluIHRoZSBvdXRwdXQgSlNPTiwg YnV0CisJCQkgKiB3ZSBhZGQgYSAia2luZCIgZWxlbWVudCBzbyB0aGF0IHVzZXIgY29kZSBjYW4g ZGlzdGluZ3Vpc2gKKwkJCSAqIHBvc3NpYmxlIGZ1dHVyZSBuZXcgZXZlbnQgdHlwZXMuCisJCQkg Ki8KKwkJCXVwZGF0ZSA9IG5ld19vYmp0cmVlX1ZBKCJVUERBVEUgT0YiLCAxLAorCQkJCQkJCQkJ ImtpbmQiLCBPYmpUeXBlU3RyaW5nLCAidXBkYXRlX29mIik7CisKKwkJCWZvcmVhY2goY2VsbCwg bm9kZS0+Y29sdW1ucykKKwkJCXsKKwkJCQljaGFyCSAgICpjb2xuYW1lID0gc3RyVmFsKGxmaXJz dChjZWxsKSk7CisKKwkJCQljb2xzID0gbGFwcGVuZChjb2xzLCBuZXdfc3RyaW5nX29iamVjdChj b2xuYW1lKSk7CisJCQl9CisKKwkJCWFwcGVuZF9hcnJheV9vYmplY3QodXBkYXRlLCAiJXtjb2x1 bW5zOiwgfUkiLCBjb2xzKTsKKworCQkJZXZlbnRzID0gbGFwcGVuZChldmVudHMsIG5ld19vYmpl Y3Rfb2JqZWN0KHVwZGF0ZSkpOworCQl9CisJfQorCWFwcGVuZF9hcnJheV9vYmplY3QocmV0LCAi JXtldmVudHM6IE9SIH1zIiwgZXZlbnRzKTsKKworCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9mb3Jf cXVhbG5hbWVfaWQoUmVsYXRpb25SZWxhdGlvbklkLAorCQkJCQkJCQkJCSB0cmlnRm9ybS0+dGdy ZWxpZCk7CisJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiT04gJXtyZWxhdGlvbn1EIiwgdG1w X29iaik7CisKKwl0bXBfb2JqID0gbmV3X29ianRyZWUoIkZST00iKTsKKwlpZiAodHJpZ0Zvcm0t PnRnY29uc3RycmVsaWQpCisJeworCQlPYmpUcmVlICAgICpyZWw7CisKKwkJcmVsID0gbmV3X29i anRyZWVfZm9yX3F1YWxuYW1lX2lkKFJlbGF0aW9uUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkgIHRy aWdGb3JtLT50Z2NvbnN0cnJlbGlkKTsKKwkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wX29iaiwg IiV7cmVsYXRpb259RCIsIHJlbCk7CisJfQorCWVsc2UKKwkJYXBwZW5kX25vdF9wcmVzZW50KHRt cF9vYmopOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7ZnJvbV90YWJsZX1zIiwgdG1w X29iaik7CisKKwlpZiAobm9kZS0+ZGVmZXJyYWJsZSkKKwkJbGlzdCA9IGxhcHBlbmQobGlzdCwg bmV3X3N0cmluZ19vYmplY3QoIkRFRkVSUkFCTEUiKSk7CisJaWYgKG5vZGUtPmluaXRkZWZlcnJl ZCkKKwkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X3N0cmluZ19vYmplY3QoIklOSVRJQUxMWSBE RUZFUlJFRCIpKTsKKwlhcHBlbmRfYXJyYXlfb2JqZWN0KHJldCwgIiV7Y29uc3RyYWludF9hdHRy czogfXMiLCBsaXN0KTsKKworCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJldCwgIkZPUiBFQUNIICV7 Zm9yX2VhY2h9cyIsICJmb3JfZWFjaCIsCisJCQkJCQkgbm9kZS0+cm93ID8gIlJPVyIgOiAiU1RB VEVNRU5UIik7CisKKwl0bXBfb2JqID0gbmV3X29ianRyZWUoIldIRU4iKTsKKwlpZiAobm9kZS0+ d2hlbkNsYXVzZSkKKwl7CisJCU5vZGUJICAgKndoZW5DbGF1c2U7CisJCURhdHVtCQl2YWx1ZTsK KwkJYm9vbAkJaXNudWxsOworCisJCXZhbHVlID0gZmFzdGdldGF0dHIodHJpZ1R1cCwgQW51bV9w Z190cmlnZ2VyX3RncXVhbCwKKwkJCQkJCQlSZWxhdGlvbkdldERlc2NyKHBnX3RyaWdnZXIpLCAm aXNudWxsKTsKKwkJaWYgKGlzbnVsbCkKKwkJCWVsb2coRVJST1IsICJudWxsIHRncXVhbCBmb3Ig dHJpZ2dlciBcIiVzXCIiLAorCQkJCSBOYW1lU3RyKHRyaWdGb3JtLT50Z25hbWUpKTsKKworCQl3 aGVuQ2xhdXNlID0gc3RyaW5nVG9Ob2RlKFRleHREYXR1bUdldENTdHJpbmcodmFsdWUpKTsKKwkJ YXBwZW5kX3N0cmluZ19vYmplY3QodG1wX29iaiwgIigle2NsYXVzZX1zKSIsICJjbGF1c2UiLAor CQkJCQkJCSBwZ19nZXRfdHJpZ2dlcl93aGVuY2xhdXNlKHRyaWdGb3JtLAorCQkJCQkJCQkJCQkJ CSAgIHdoZW5DbGF1c2UsCisJCQkJCQkJCQkJCQkJICAgZmFsc2UpKTsKKwl9CisJZWxzZQorCQlh cHBlbmRfbm90X3ByZXNlbnQodG1wX29iaik7CisJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAi JXt3aGVufXMiLCB0bXBfb2JqKTsKKworCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiJXtmdW5j bmFtZX1EIiwgMSwKKwkJCQkJCQkiZnVuY25hbWUiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCW5l d19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJ CQkJCQl0cmlnRm9ybS0+dGdmb2lkKSk7CisJbGlzdCA9IE5JTDsKKwl0Z25hcmdzID0gdHJpZ0Zv cm0tPnRnbmFyZ3M7CisJaWYgKHRnbmFyZ3MgPiAwKQorCXsKKwkJYnl0ZWEJICAgKnRnYXJnczsK KwkJY2hhcgkgICAqYXJnc3RyOworCQlib29sCQlpc251bGw7CisJCWludAkJCWZpbmR4OworCQlp bnQJCQlsZW50Z2FyZ3M7CisJCWNoYXIJICAgKnA7CisKKwkJdGdhcmdzID0gRGF0dW1HZXRCeXRl YVAoZmFzdGdldGF0dHIodHJpZ1R1cCwKKwkJCQkJCQkJCQkJQW51bV9wZ190cmlnZ2VyX3RnYXJn cywKKwkJCQkJCQkJCQkJUmVsYXRpb25HZXREZXNjcihwZ190cmlnZ2VyKSwKKwkJCQkJCQkJCQkJ JmlzbnVsbCkpOworCQlpZiAoaXNudWxsKQorCQkJZWxvZyhFUlJPUiwgIm51bGwgdGdhcmdzIGZv ciB0cmlnZ2VyIFwiJXNcIiIsCisJCQkJIE5hbWVTdHIodHJpZ0Zvcm0tPnRnbmFtZSkpOworCQlh cmdzdHIgPSAoY2hhciAqKSBWQVJEQVRBKHRnYXJncyk7CisJCWxlbnRnYXJncyA9IFZBUlNJWkVf QU5ZX0VYSERSKHRnYXJncyk7CisKKwkJcCA9IGFyZ3N0cjsKKwkJZm9yIChmaW5keCA9IDA7IGZp bmR4IDwgdGduYXJnczsgZmluZHgrKykKKwkJeworCQkJc2l6ZV90CQl0bGVuOworCisJCQkvKiBW ZXJpZnkgdGhhdCB0aGUgYXJndW1lbnQgZW5jb2RpbmcgaXMgY29ycmVjdCAqLworCQkJdGxlbiA9 IHN0cmxlbihwKTsKKwkJCWlmIChwICsgdGxlbiA+PSBhcmdzdHIgKyBsZW50Z2FyZ3MpCisJCQkJ ZWxvZyhFUlJPUiwgImludmFsaWQgYXJndW1lbnQgc3RyaW5nICglcykgZm9yIHRyaWdnZXIgXCIl c1wiIiwKKwkJCQkJIGFyZ3N0ciwgTmFtZVN0cih0cmlnRm9ybS0+dGduYW1lKSk7CisKKwkJCWxp c3QgPSBsYXBwZW5kKGxpc3QsIG5ld19zdHJpbmdfb2JqZWN0KHApKTsKKworCQkJcCArPSB0bGVu ICsgMTsKKwkJfQorCX0KKworCWFwcGVuZF9mb3JtYXRfc3RyaW5nKHRtcF9vYmosICIoIik7CisJ YXBwZW5kX2FycmF5X29iamVjdCh0bXBfb2JqLCAiJXthcmdzOiwgfUwiLCBsaXN0KTsJLyogbWln aHQgYmUgTklMICovCisJYXBwZW5kX2Zvcm1hdF9zdHJpbmcodG1wX29iaiwgIikiKTsKKworCWFw cGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIkVYRUNVVEUgUFJPQ0VEVVJFICV7ZnVuY3Rpb259cyIs IHRtcF9vYmopOworCisJdGFibGVfY2xvc2UocGdfdHJpZ2dlciwgQWNjZXNzU2hhcmVMb2NrKTsK KworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgQ3JlYXRlVXNlck1hcHBpbmdT dG10IChDUkVBVEUgVVNFUiBNQVBQSU5HKQorICoKKyAqIEdpdmVuIGEgVXNlciBNYXBwaW5nIE9J RCBhbmQgdGhlIHBhcnNlIHRyZWUgdGhhdCBjcmVhdGVkIGl0LAorICogcmV0dXJuIGFuIE9ialRy ZWUgcmVwcmVzZW50aW5nIHRoZSBDUkVBVEUgVVNFUiBNQVBQSU5HIGNvbW1hbmQuCisgKgorICog VmVyYm9zZSBzeW50YXgKKyAqIENSRUFURSBVU0VSIE1BUFBJTkcgRk9SICV7cm9sZX1SIFNFUlZF UiAle3NlcnZlcn1JCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQ3JlYXRlVXNlck1h cHBpbmdTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCUNyZWF0ZVVzZXJN YXBwaW5nU3RtdCAqbm9kZSA9IChDcmVhdGVVc2VyTWFwcGluZ1N0bXQgKikgcGFyc2V0cmVlOwor CU9ialRyZWUgICAgKnJldDsKKwlSZWxhdGlvbglyZWw7CisJSGVhcFR1cGxlCXRwOworCUZvcm1f cGdfdXNlcl9tYXBwaW5nIGZvcm07CisJRm9yZWlnblNlcnZlciAqc2VydmVyOworCisJcmVsID0g dGFibGVfb3BlbihVc2VyTWFwcGluZ1JlbGF0aW9uSWQsIFJvd0V4Y2x1c2l2ZUxvY2spOworCisJ LyoKKwkgKiBMb29rdXAgb2JqZWN0IGluIHRoZSBjYXRhbG9nLCBzbyB3ZSBkb24ndCBoYXZlIHRv IGRlYWwgd2l0aAorCSAqIGN1cnJlbnRfdXNlciBhbmQgc3VjaC4KKwkgKi8KKwl0cCA9IFNlYXJj aFN5c0NhY2hlMShVU0VSTUFQUElOR09JRCwgT2JqZWN0SWRHZXREYXR1bShvYmplY3RJZCkpOwor CWlmICghSGVhcFR1cGxlSXNWYWxpZCh0cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAg ZmFpbGVkIGZvciB1c2VyIG1hcHBpbmcgd2l0aCBPSUQgJXUiLAorCQkJIG9iamVjdElkKTsKKwor CWZvcm0gPSAoRm9ybV9wZ191c2VyX21hcHBpbmcpIEdFVFNUUlVDVCh0cCk7CisKKwlzZXJ2ZXIg PSBHZXRGb3JlaWduU2VydmVyKGZvcm0tPnVtc2VydmVyKTsKKworCXJldCA9IG5ld19vYmp0cmVl X1ZBKCJDUkVBVEUgVVNFUiBNQVBQSU5HIEZPUiAle3JvbGV9UiBTRVJWRVIgJXtzZXJ2ZXJ9SSAl e2dlbmVyaWNfb3B0aW9uc31zIiwgMywKKwkJCQkJCSAicm9sZSIsIE9ialR5cGVPYmplY3QsCisJ CQkJCQkgbmV3X29ianRyZWVfZm9yX3JvbGVfaWQoZm9ybS0+dW11c2VyKSwKKwkJCQkJCSAic2Vy dmVyIiwgT2JqVHlwZVN0cmluZywgc2VydmVyLT5zZXJ2ZXJuYW1lLAorCQkJCQkJICJnZW5lcmlj X29wdGlvbnMiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJIGRlcGFyc2VfRmR3T3B0aW9ucyhub2Rl LT5vcHRpb25zLCBOVUxMKSk7CisKKwlSZWxlYXNlU3lzQ2FjaGUodHApOworCXRhYmxlX2Nsb3Nl KHJlbCwgUm93RXhjbHVzaXZlTG9jayk7CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIGRlcGFy c2VfQWx0ZXJVc2VyTWFwcGluZworICoKKyAqIEdpdmVuIGEgVXNlciBNYXBwaW5nIE9JRCBhbmQg dGhlIHBhcnNlIHRyZWUgdGhhdCBjcmVhdGVkIGl0LCByZXR1cm4gYW4KKyAqIE9ialRyZWUgcmVw cmVzZW50aW5nIHRoZSBhbHRlciBjb21tYW5kLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBB TFRFUiBVU0VSIE1BUFBJTkcgRk9SICV7cm9sZX1SIFNFUlZFUiAle3NlcnZlcn1JCisgKi8KK3N0 YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQWx0ZXJVc2VyTWFwcGluZ1N0bXQoT2lkIG9iamVjdElk LCBOb2RlICpwYXJzZXRyZWUpCit7CisJQWx0ZXJVc2VyTWFwcGluZ1N0bXQgKm5vZGUgPSAoQWx0 ZXJVc2VyTWFwcGluZ1N0bXQgKikgcGFyc2V0cmVlOworCU9ialRyZWUgICAgKnJldDsKKwlSZWxh dGlvbglyZWw7CisJSGVhcFR1cGxlCXRwOworCUZvcm1fcGdfdXNlcl9tYXBwaW5nIGZvcm07CisJ Rm9yZWlnblNlcnZlciAqc2VydmVyOworCisJcmVsID0gdGFibGVfb3BlbihVc2VyTWFwcGluZ1Jl bGF0aW9uSWQsIFJvd0V4Y2x1c2l2ZUxvY2spOworCisJLyoKKwkgKiBMb29rdXAgb2JqZWN0IGlu IHRoZSBjYXRhbG9nLCBzbyB3ZSBkb24ndCBoYXZlIHRvIGRlYWwgd2l0aAorCSAqIGN1cnJlbnRf dXNlciBhbmQgc3VjaC4KKwkgKi8KKwl0cCA9IFNlYXJjaFN5c0NhY2hlMShVU0VSTUFQUElOR09J RCwgT2JqZWN0SWRHZXREYXR1bShvYmplY3RJZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZCh0 cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciB1c2VyIG1hcHBpbmcg d2l0aCBPSUQgJXUiLAorCQkJIG9iamVjdElkKTsKKworCWZvcm0gPSAoRm9ybV9wZ191c2VyX21h cHBpbmcpIEdFVFNUUlVDVCh0cCk7CisKKwlzZXJ2ZXIgPSBHZXRGb3JlaWduU2VydmVyKGZvcm0t PnVtc2VydmVyKTsKKworCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBVU0VSIE1BUFBJTkcg Rk9SICV7cm9sZX1SIFNFUlZFUiAle3NlcnZlcn1JICV7Z2VuZXJpY19vcHRpb25zfXMiLCAzLAor CQkJCQkJICJyb2xlIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3Jfcm9s ZV9pZChmb3JtLT51bXVzZXIpLAorCQkJCQkJICJzZXJ2ZXIiLCBPYmpUeXBlU3RyaW5nLCBzZXJ2 ZXItPnNlcnZlcm5hbWUsCisJCQkJCQkgImdlbmVyaWNfb3B0aW9ucyIsIE9ialR5cGVPYmplY3Qs CisJCQkJCQkgZGVwYXJzZV9GZHdPcHRpb25zKG5vZGUtPm9wdGlvbnMsIE5VTEwpKTsKKworCVJl bGVhc2VTeXNDYWNoZSh0cCk7CisJdGFibGVfY2xvc2UocmVsLCBSb3dFeGNsdXNpdmVMb2NrKTsK KwlyZXR1cm4gcmV0OworfQorCisvKgorICogRGVwYXJzZSBhbiBBbHRlclN0YXRzU3RtdCAoQUxU RVIgU1RBVElTVElDUykKKyAqCisgKiBHaXZlbiBhIGFsdGVyIHN0YXRpc3RpY3MgT0lEIGFuZCB0 aGUgcGFyc2UgdHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVybiBhbgorICogT2JqVHJlZSByZXBy ZXNlbnRpbmcgdGhlIGFsdGVyIGNvbW1hbmQuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIEFM VEVSIFNUQVRJU1RJQ1MgJXtpZGVudGl0eX1EIFNFVCBTVEFUSVNUSUNTICV7dGFyZ2V0fW4KKyAq Lworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9BbHRlclN0YXRzU3RtdChPaWQgb2JqZWN0SWQs IE5vZGUgKnBhcnNldHJlZSkKK3sKKwlBbHRlclN0YXRzU3RtdCAqbm9kZSA9IChBbHRlclN0YXRz U3RtdCAqKSBwYXJzZXRyZWU7CisJT2JqVHJlZSAgICAqcmV0OworCUhlYXBUdXBsZQl0cDsKKwlG b3JtX3BnX3N0YXRpc3RpY19leHQgc3RhdGZvcm07CisKKwlpZiAoIW5vZGUtPnN0eHN0YXR0YXJn ZXQpCisJCXJldHVybiBOVUxMOworCisJLyogTG9va3VwIG9iamVjdCBpbiB0aGUgY2F0YWxvZyAq LworCXRwID0gU2VhcmNoU3lzQ2FjaGUxKFNUQVRFWFRPSUQsIE9iamVjdElkR2V0RGF0dW0ob2Jq ZWN0SWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQodHApKQorCQllbG9nKEVSUk9SLCAiY2Fj aGUgbG9va3VwIGZhaWxlZCBmb3Igc3RhdGlzdGljIHdpdGggT0lEICV1Iiwgb2JqZWN0SWQpOwor CisJc3RhdGZvcm0gPSAoRm9ybV9wZ19zdGF0aXN0aWNfZXh0KSBHRVRTVFJVQ1QodHApOworCXJl dCA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBTVEFUSVNUSUNTICV7aWRlbnRpdHl9RCBTRVQgU1RB VElTVElDUyAle3RhcmdldH1uIiwgMiwKKwkJCQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0 LAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShzdGF0Zm9ybS0+c3R4bmFtZXNwYWNl LAorCQkJCQkJCQkJCQkJICBOYW1lU3RyKHN0YXRmb3JtLT5zdHhuYW1lKSksCisJCQkJCQkgInRh cmdldCIsIE9ialR5cGVJbnRlZ2VyLCBub2RlLT5zdHhzdGF0dGFyZ2V0KTsKKworCVJlbGVhc2VT eXNDYWNoZSh0cCk7CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIERlcGFyc2UgYSBSZWZyZXNo TWF0Vmlld1N0bXQgKFJFRlJFU0ggTUFURVJJQUxJWkVEIFZJRVcpCisgKgorICogR2l2ZW4gYSBt YXRlcmlhbGl6ZWQgdmlldyBPSUQgYW5kIHRoZSBwYXJzZSB0cmVlIHRoYXQgY3JlYXRlZCBpdCwg cmV0dXJuIGFuCisgKiBPYmpUcmVlIHJlcHJlc2VudGluZyB0aGUgcmVmcmVzaCBjb21tYW5kLgor ICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBSRUZSRVNIIE1BVEVSSUFMSVpFRCBWSUVXICV7Y29u Y3VycmVudGx5fXMgJXtpZGVudGl0eX1EICV7d2l0aF9ub19kYXRhfXMKKyAqLworc3RhdGljIE9i alRyZWUgKgorZGVwYXJzZV9SZWZyZXNoTWF0Vmlld1N0bXQoT2lkIG9iamVjdElkLCBOb2RlICpw YXJzZXRyZWUpCit7CisJUmVmcmVzaE1hdFZpZXdTdG10ICpub2RlID0gKFJlZnJlc2hNYXRWaWV3 U3RtdCAqKSBwYXJzZXRyZWU7CisJT2JqVHJlZSAgICAqcmV0OworCU9ialRyZWUgICAgKnRtcDsK KworCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJSRUZSRVNIIE1BVEVSSUFMSVpFRCBWSUVXICV7Y29u Y3VycmVudGx5fXMgJXtpZGVudGl0eX1EIiwgMiwKKwkJCQkJCSAiY29uY3VycmVudGx5IiwgT2Jq VHlwZVN0cmluZywKKwkJCQkJCSBub2RlLT5jb25jdXJyZW50ID8gIkNPTkNVUlJFTlRMWSIgOiAi IiwKKwkJCQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJIG5ld19vYmp0cmVl X2Zvcl9xdWFsbmFtZV9pZChSZWxhdGlvblJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJIG9iamVj dElkKSk7CisKKwkvKiBBZGQgYSBXSVRIIE5PIERBVEEgY2xhdXNlICovCisJdG1wID0gbmV3X29i anRyZWVfVkEoIldJVEggTk8gREFUQSIsIDEsCisJCQkJCQkgInByZXNlbnQiLCBPYmpUeXBlQm9v bCwKKwkJCQkJCSBub2RlLT5za2lwRGF0YSA/IHRydWUgOiBmYWxzZSk7CisJYXBwZW5kX29iamVj dF9vYmplY3QocmV0LCAiJXt3aXRoX25vX2RhdGF9cyIsIHRtcCk7CisKKwlyZXR1cm4gcmV0Owor fQorCisvKgorICogRGVwYXJzZSBhIFJlbmFtZVN0bXQuCisgKgorICogVmVyYm9zZSBzeW50YXgK KyAqIEFMVEVSICVzICV7aWZfZXhpc3RzfXMgJXtpZGVudGl0eX1EIFJFTkFNRSBUTyAle25ld25h bWV9SQorICogT1IKKyAqIEFMVEVSIFBPTElDWSAle2lmX2V4aXN0c31zICV7cG9saWN5bmFtZX1J IE9OICV7aWRlbnRpdHl9RCBSRU5BTUUgVE8gJXtuZXduYW1lfUkKKyAqIE9SCisgKiBBTFRFUiBv Ymp0eXBlICV7aWRlbnRpdHl9RCBSRU5BTUUgQVRUUklCVVRFICV7Y29sbmFtZX1JIFRPICV7bmV3 bmFtZX1JICV7Y2FzY2FkZX1zCisgKiBPUgorICogQUxURVIgb2JqdHlwZSAle2lmX2V4aXN0c31z ICUle2lkZW50aXR5fUQgUkVOQU1FIENPTFVNTiAle2NvbG5hbWV9SSBUTyAle25ld25hbWV9SQor ICogT1IKKyAqIEFMVEVSICVzICUle2lkZW50aXR5fXMgUkVOQU1FIFRPICUle25ld25hbWV9SQor ICogT1IKKyAqIEFMVEVSICVzICUle2lkZW50aXR5fUQgVVNJTkcgJSV7aW5kZXhfbWV0aG9kfXMg UkVOQU1FIFRPICUle25ld25hbWV9SQorICogT1IKKyAqIEFMVEVSIFNDSEVNQSAle2lkZW50aXR5 fUkgUkVOQU1FIFRPICV7bmV3bmFtZX1JCisgKiBPUgorICogQUxURVIgUlVMRSAle3J1bGVuYW1l fUkgT04gJXtpZGVudGl0eX1EIFJFTkFNRSBUTyAle25ld25hbWV9SQorICogT1IKKyAqIEFMVEVS IFRSSUdHRVIgJXt0cmlnZ2VybmFtZX1JIE9OICV7aWRlbnRpdHl9RCBSRU5BTUUgVE8gJXtuZXdu YW1lfUkKKyAqIE9SCisgKiBBTFRFUiAlcyAlJXtpZGVudGl0eX1EIFJFTkFNRSBUTyAlJXtuZXdu YW1lfUkKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9SZW5hbWVTdG10KE9iamVjdEFk ZHJlc3MgYWRkcmVzcywgTm9kZSAqcGFyc2V0cmVlKQoreworCVJlbmFtZVN0bXQgKm5vZGUgPSAo UmVuYW1lU3RtdCAqKSBwYXJzZXRyZWU7CisJT2JqVHJlZSAgICAqcmV0OworCVJlbGF0aW9uCXJl bGF0aW9uOworCU9pZAkJCXNjaGVtYUlkOworCisJLyoKKwkgKiBJbiBhbiBBTFRFUiAuLiBSRU5B TUUgY29tbWFuZCwgd2UgZG9uJ3QgaGF2ZSB0aGUgb3JpZ2luYWwgbmFtZSBvZiB0aGUKKwkgKiBv YmplY3QgaW4gc3lzdGVtIGNhdGFsb2dzOiBzaW5jZSB3ZSBpbnNwZWN0IHRoZW0gYWZ0ZXIgdGhl IGNvbW1hbmQgaGFzCisJICogZXhlY3V0ZWQsIHRoZSBvbGQgbmFtZSBpcyBhbHJlYWR5IGdvbmUu ICBUaGVyZWZvcmUsIHdlIGV4dHJhY3QgaXQgZnJvbQorCSAqIHRoZSBwYXJzZSBub2RlLiAgTm90 ZSB3ZSBzdGlsbCBleHRyYWN0IHRoZSBzY2hlbWEgbmFtZSBmcm9tIHRoZSBjYXRhbG9nCisJICog KGl0IG1pZ2h0IG5vdCBiZSBwcmVzZW50IGluIHRoZSBwYXJzZSBub2RlKTsgaXQgY2Fubm90IHBv c3NpYmx5IGhhdmUKKwkgKiBjaGFuZ2VkIGFueXdheS4KKwkgKi8KKwlzd2l0Y2ggKG5vZGUtPnJl bmFtZVR5cGUpCisJeworCQljYXNlIE9CSkVDVF9UQUJMRToKKwkJY2FzZSBPQkpFQ1RfSU5ERVg6 CisJCWNhc2UgT0JKRUNUX1NFUVVFTkNFOgorCQljYXNlIE9CSkVDVF9WSUVXOgorCQljYXNlIE9C SkVDVF9NQVRWSUVXOgorCQkJcmVsYXRpb24gPSByZWxhdGlvbl9vcGVuKGFkZHJlc3Mub2JqZWN0 SWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJCQlzY2hlbWFJZCA9IFJlbGF0aW9uR2V0TmFtZXNwYWNl KHJlbGF0aW9uKTsKKwkJCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiAle29ianR5cGV9cyAl e2lmX2V4aXN0c31zICV7aWRlbnRpdHl9RCBSRU5BTUUgVE8gJXtuZXduYW1lfUkiLCA0LAorCQkJ CQkJCQkgIm9ianR5cGUiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkgc3RyaW5naWZ5X29ianR5 cGUobm9kZS0+cmVuYW1lVHlwZSwgZmFsc2UpLAorCQkJCQkJCQkgImlmX2V4aXN0cyIsIE9ialR5 cGVTdHJpbmcsCisJCQkJCQkJCSBub2RlLT5taXNzaW5nX29rID8gIklGIEVYSVNUUyIgOiAiIiwK KwkJCQkJCQkJICJpZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJCSBuZXdfb2JqdHJl ZV9mb3JfcXVhbG5hbWUoc2NoZW1hSWQsCisJCQkJCQkJCQkJCQkJCSAgbm9kZS0+cmVsYXRpb24t PnJlbG5hbWUpLAorCQkJCQkJCQkgIm5ld25hbWUiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkg bm9kZS0+bmV3bmFtZSk7CisJCQlyZWxhdGlvbl9jbG9zZShyZWxhdGlvbiwgQWNjZXNzU2hhcmVM b2NrKTsKKwkJCWJyZWFrOworCisJCWNhc2UgT0JKRUNUX1BPTElDWToKKwkJCXsKKwkJCQlIZWFw VHVwbGUJcG9sVHVwOworCQkJCUZvcm1fcGdfcG9saWN5IHBvbEZvcm07CisJCQkJUmVsYXRpb24J cGdfcG9saWN5OworCQkJCVNjYW5LZXlEYXRhIGtleTsKKwkJCQlTeXNTY2FuRGVzYyBzY2FuOwor CisJCQkJcGdfcG9saWN5ID0gcmVsYXRpb25fb3BlbihQb2xpY3lSZWxhdGlvbklkLCBBY2Nlc3NT aGFyZUxvY2spOworCQkJCVNjYW5LZXlJbml0KCZrZXksIEFudW1fcGdfcG9saWN5X29pZCwKKwkJ CQkJCQlCVEVxdWFsU3RyYXRlZ3lOdW1iZXIsIEZfT0lERVEsCisJCQkJCQkJT2JqZWN0SWRHZXRE YXR1bShhZGRyZXNzLm9iamVjdElkKSk7CisJCQkJc2NhbiA9IHN5c3RhYmxlX2JlZ2luc2Nhbihw Z19wb2xpY3ksIFBvbGljeU9pZEluZGV4SWQsIHRydWUsCisJCQkJCQkJCQkJICBOVUxMLCAxLCAm a2V5KTsKKwkJCQlwb2xUdXAgPSBzeXN0YWJsZV9nZXRuZXh0KHNjYW4pOworCQkJCWlmICghSGVh cFR1cGxlSXNWYWxpZChwb2xUdXApKQorCQkJCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZh aWxlZCBmb3IgcG9saWN5IHdpdGggT0lEICV1IiwKKwkJCQkJCSBhZGRyZXNzLm9iamVjdElkKTsK KwkJCQlwb2xGb3JtID0gKEZvcm1fcGdfcG9saWN5KSBHRVRTVFJVQ1QocG9sVHVwKTsKKworCQkJ CXJldCA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBQT0xJQ1kgJXtpZl9leGlzdHN9cyAle3BvbGlj eW5hbWV9SSBPTiAle2lkZW50aXR5fUQgUkVOQU1FIFRPICV7bmV3bmFtZX1JIiwgNCwKKwkJCQkJ CQkJCSAiaWZfZXhpc3RzIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJCSBub2RlLT5taXNzaW5n X29rID8gIklGIEVYSVNUUyIgOiAiIiwKKwkJCQkJCQkJCSAicG9saWN5bmFtZSIsIE9ialR5cGVT dHJpbmcsCisJCQkJCQkJCQkgbm9kZS0+c3VibmFtZSwKKwkJCQkJCQkJCSAiaWRlbnRpdHkiLCBP YmpUeXBlT2JqZWN0LAorCQkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChSZWxh dGlvblJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCQkJIHBvbEZvcm0tPnBvbHJlbGlkKSwKKwkJ CQkJCQkJCSAibmV3bmFtZSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCQkgbm9kZS0+bmV3bmFt ZSk7CisJCQkJc3lzdGFibGVfZW5kc2NhbihzY2FuKTsKKwkJCQlyZWxhdGlvbl9jbG9zZShwZ19w b2xpY3ksIEFjY2Vzc1NoYXJlTG9jayk7CisJCQl9CisJCQlicmVhazsKKworCQljYXNlIE9CSkVD VF9BVFRSSUJVVEU6CisJCWNhc2UgT0JKRUNUX0NPTFVNTjoKKwkJCXJlbGF0aW9uID0gcmVsYXRp b25fb3BlbihhZGRyZXNzLm9iamVjdElkLCBBY2Nlc3NTaGFyZUxvY2spOworCQkJc2NoZW1hSWQg PSBSZWxhdGlvbkdldE5hbWVzcGFjZShyZWxhdGlvbik7CisKKwkJCWlmIChub2RlLT5yZW5hbWVU eXBlID09IE9CSkVDVF9BVFRSSUJVVEUpCisJCQkJcmV0ID0gbmV3X29ianRyZWVfVkEoIkFMVEVS IFRZUEUgJXtpZGVudGl0eX1EIFJFTkFNRSBBVFRSSUJVVEUgJXtjb2xuYW1lfUkiLCAyLAorCQkJ CQkJCQkJICJpZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJCQkgbmV3X29ianRyZWVf Zm9yX3F1YWxuYW1lKHNjaGVtYUlkLAorCQkJCQkJCQkJCQkJCQkJICBub2RlLT5yZWxhdGlvbi0+ cmVsbmFtZSksCisJCQkJCQkJCQkgImNvbG5hbWUiLCBPYmpUeXBlU3RyaW5nLCBub2RlLT5zdWJu YW1lKTsKKwkJCWVsc2UKKwkJCXsKKwkJCQlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgJXtv Ymp0eXBlfXMiLCAxLAorCQkJCQkJCQkJICJvYmp0eXBlIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJ CQkJCSBzdHJpbmdpZnlfb2JqdHlwZShub2RlLT5yZWxhdGlvblR5cGUsIGZhbHNlKSk7CisKKwkJ CQkvKiBDb21wb3NpdGUgdHlwZXMgZG8gbm90IHN1cHBvcnQgSUYgRVhJU1RTICovCisJCQkJaWYg KG5vZGUtPnJlbmFtZVR5cGUgPT0gT0JKRUNUX0NPTFVNTikKKwkJCQkJYXBwZW5kX3N0cmluZ19v YmplY3QocmV0LCAiJXtpZl9leGlzdHN9cyIsCisJCQkJCQkJCQkJICJpZl9leGlzdHMiLAorCQkJ CQkJCQkJCSBub2RlLT5taXNzaW5nX29rID8gIklGIEVYSVNUUyIgOiAiIik7CisKKwkJCQlhcHBl bmRfb2JqZWN0X29iamVjdChyZXQsICIle2lkZW50aXR5fUQiLAorCQkJCQkJCQkJIG5ld19vYmp0 cmVlX2Zvcl9xdWFsbmFtZShzY2hlbWFJZCwKKwkJCQkJCQkJCQkJCQkJCSAgbm9kZS0+cmVsYXRp b24tPnJlbG5hbWUpKTsKKwkJCQlhcHBlbmRfc3RyaW5nX29iamVjdChyZXQsICJSRU5BTUUgQ09M VU1OICV7Y29sbmFtZX1JIiwKKwkJCQkJCQkJCSAiY29sbmFtZSIsIG5vZGUtPnN1Ym5hbWUpOwor CQkJfQorCisJCQlhcHBlbmRfc3RyaW5nX29iamVjdChyZXQsICJUTyAle25ld25hbWV9SSIsICJu ZXduYW1lIiwKKwkJCQkJCQkJIG5vZGUtPm5ld25hbWUpOworCisJCQlpZiAobm9kZS0+cmVuYW1l VHlwZSA9PSBPQkpFQ1RfQVRUUklCVVRFKQorCQkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwg IiV7Y2FzY2FkZX1zIiwKKwkJCQkJCQkJCSBuZXdfb2JqdHJlZV9WQSgiQ0FTQ0FERSIsIDEsCisJ CQkJCQkJCQkJCQkJInByZXNlbnQiLCBPYmpUeXBlQm9vbCwKKwkJCQkJCQkJCQkJCQlub2RlLT5i ZWhhdmlvciA9PSBEUk9QX0NBU0NBREUpKTsKKworCQkJcmVsYXRpb25fY2xvc2UocmVsYXRpb24s IEFjY2Vzc1NoYXJlTG9jayk7CisJCQlicmVhazsKKworCQljYXNlIE9CSkVDVF9BR0dSRUdBVEU6 CisJCWNhc2UgT0JKRUNUX0ZVTkNUSU9OOgorCQljYXNlIE9CSkVDVF9ST1VUSU5FOgorCQkJewor CQkJCWNoYXIJICAgKmlkZW50OworCQkJCUhlYXBUdXBsZQlwcm9jdHVwOworCQkJCUZvcm1fcGdf cHJvYyBwcm9jZm9ybTsKKwkJCQlMaXN0CSAgICppZGVudGl0eTsKKworCQkJCUFzc2VydChJc0Eo bm9kZS0+b2JqZWN0LCBPYmplY3RXaXRoQXJncykpOworCQkJCWlkZW50aXR5ID0gKChPYmplY3RX aXRoQXJncyAqKSBub2RlLT5vYmplY3QpLT5vYmpuYW1lOworCisJCQkJcHJvY3R1cCA9IFNlYXJj aFN5c0NhY2hlMShQUk9DT0lELAorCQkJCQkJCQkJCSAgT2JqZWN0SWRHZXREYXR1bShhZGRyZXNz Lm9iamVjdElkKSk7CisJCQkJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHByb2N0dXApKQorCQkJCQll bG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgcHJvY2VkdXJlIHdpdGggT0lEICV1 IiwKKwkJCQkJCSBhZGRyZXNzLm9iamVjdElkKTsKKwkJCQlwcm9jZm9ybSA9IChGb3JtX3BnX3By b2MpIEdFVFNUUlVDVChwcm9jdHVwKTsKKworCQkJCS8qIFhYWCBkb2VzIHRoaXMgd29yayBmb3Ig b3JkZXJlZC1zZXQgYWdncmVnYXRlcz8gKi8KKwkJCQlpZGVudCA9IHBzcHJpbnRmKCIlcyVzIiwK KwkJCQkJCQkJIHF1b3RlX3F1YWxpZmllZF9pZGVudGlmaWVyKGdldF9uYW1lc3BhY2VfbmFtZShw cm9jZm9ybS0+cHJvbmFtZXNwYWNlKSwKKwkJCQkJCQkJCQkJCQkJCXN0clZhbChsbGFzdChpZGVu dGl0eSkpKSwKKwkJCQkJCQkJIGZvcm1hdF9wcm9jZWR1cmVfYXJncyhhZGRyZXNzLm9iamVjdElk LCB0cnVlKSk7CisKKwkJCQlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgJXtvYmp0eXBlfXMg JXtpZGVudGl0eX1zIFJFTkFNRSBUTyAle25ld25hbWV9SSIsIDMsCisJCQkJCQkJCQkgIm9ianR5 cGUiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJIHN0cmluZ2lmeV9vYmp0eXBlKG5vZGUtPnJl bmFtZVR5cGUsIGZhbHNlKSwKKwkJCQkJCQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBlU3RyaW5nLCBp ZGVudCwKKwkJCQkJCQkJCSAibmV3bmFtZSIsIE9ialR5cGVTdHJpbmcsIG5vZGUtPm5ld25hbWUp OworCisJCQkJUmVsZWFzZVN5c0NhY2hlKHByb2N0dXApOworCQkJfQorCQkJYnJlYWs7CisKKwkJ Y2FzZSBPQkpFQ1RfT1BDTEFTUzoKKwkJCXsKKwkJCQlIZWFwVHVwbGUJb3BjVHVwOworCQkJCUZv cm1fcGdfb3BjbGFzcyBvcGNGb3JtOworCQkJCUxpc3QJICAgKm9sZG5hbWVzOworCQkJCWNoYXIJ ICAgKnNjaGVtYW5hbWU7CisJCQkJY2hhcgkgICAqb3BjbmFtZTsKKworCQkJCW9wY1R1cCA9IFNl YXJjaFN5c0NhY2hlMShDTEFPSUQsIE9iamVjdElkR2V0RGF0dW0oYWRkcmVzcy5vYmplY3RJZCkp OworCQkJCWlmICghSGVhcFR1cGxlSXNWYWxpZChvcGNUdXApKQorCQkJCQllbG9nKEVSUk9SLCAi Y2FjaGUgbG9va3VwIGZhaWxlZCBmb3Igb3BjbGFzcyB3aXRoIE9JRCAldSIsCisJCQkJCQkgYWRk cmVzcy5vYmplY3RJZCk7CisKKwkJCQlvcGNGb3JtID0gKEZvcm1fcGdfb3BjbGFzcykgR0VUU1RS VUNUKG9wY1R1cCk7CisKKwkJCQlvbGRuYW1lcyA9IGxpc3RfY29weV90YWlsKChMaXN0ICopIG5v ZGUtPm9iamVjdCwgMSk7CisKKwkJCQkvKiBEZWNvbnN0cnVjdCB0aGUgbmFtZSBsaXN0ICovCisJ CQkJRGVjb25zdHJ1Y3RRdWFsaWZpZWROYW1lKG9sZG5hbWVzLCAmc2NoZW1hbmFtZSwgJm9wY25h bWUpOworCisJCQkJcmV0ID0gbmV3X29ianRyZWVfVkEoIkFMVEVSICV7b2JqdHlwZX1zICV7aWRl bnRpdHl9RCBVU0lORyAle2luZGV4X21ldGhvZH1zIFJFTkFNRSBUTyAle25ld25hbWV9SSIsIDQs CisJCQkJCQkJCQkgIm9ianR5cGUiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJIHN0cmluZ2lm eV9vYmp0eXBlKG5vZGUtPnJlbmFtZVR5cGUsIGZhbHNlKSwKKwkJCQkJCQkJCSAiaWRlbnRpdHki LCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShvcGNG b3JtLT5vcGNuYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkJCQkgIG9wY25hbWUpLAorCQkJCQkJCQkJ ICJpbmRleF9tZXRob2QiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJIGdldF9hbV9uYW1lKG9w Y0Zvcm0tPm9wY21ldGhvZCksCisJCQkJCQkJCQkgIm5ld25hbWUiLCBPYmpUeXBlU3RyaW5nLCBu b2RlLT5uZXduYW1lKTsKKworCQkJCVJlbGVhc2VTeXNDYWNoZShvcGNUdXApOworCQkJfQorCQkJ YnJlYWs7CisKKwkJY2FzZSBPQkpFQ1RfT1BGQU1JTFk6CisJCQl7CisJCQkJSGVhcFR1cGxlCW9w ZlR1cDsKKwkJCQlIZWFwVHVwbGUJYW1UdXA7CisJCQkJRm9ybV9wZ19vcGZhbWlseSBvcGZGb3Jt OworCQkJCUZvcm1fcGdfYW0JYW1Gb3JtOworCQkJCUxpc3QJICAgKm9sZG5hbWVzOworCQkJCWNo YXIJICAgKnNjaGVtYW5hbWU7CisJCQkJY2hhcgkgICAqb3BmbmFtZTsKKworCQkJCW9wZlR1cCA9 IFNlYXJjaFN5c0NhY2hlMShPUEZBTUlMWU9JRCwgYWRkcmVzcy5vYmplY3RJZCk7CisJCQkJaWYg KCFIZWFwVHVwbGVJc1ZhbGlkKG9wZlR1cCkpCisJCQkJCWVsb2coRVJST1IsICJjYWNoZSBsb29r dXAgZmFpbGVkIGZvciBvcGVyYXRvciBmYW1pbHkgd2l0aCBPSUQgJXUiLAorCQkJCQkJIGFkZHJl c3Mub2JqZWN0SWQpOworCQkJCW9wZkZvcm0gPSAoRm9ybV9wZ19vcGZhbWlseSkgR0VUU1RSVUNU KG9wZlR1cCk7CisKKwkJCQlhbVR1cCA9IFNlYXJjaFN5c0NhY2hlMShBTU9JRCwgT2JqZWN0SWRH ZXREYXR1bShvcGZGb3JtLT5vcGZtZXRob2QpKTsKKwkJCQlpZiAoIUhlYXBUdXBsZUlzVmFsaWQo YW1UdXApKQorCQkJCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgYWNjZXNz IG1ldGhvZCB3aXRoIE9JRCAldSIsCisJCQkJCQkgb3BmRm9ybS0+b3BmbWV0aG9kKTsKKworCQkJ CWFtRm9ybSA9IChGb3JtX3BnX2FtKSBHRVRTVFJVQ1QoYW1UdXApOworCisJCQkJb2xkbmFtZXMg PSBsaXN0X2NvcHlfdGFpbCgoTGlzdCAqKSBub2RlLT5vYmplY3QsIDEpOworCisJCQkJLyogRGVj b25zdHJ1Y3QgdGhlIG5hbWUgbGlzdCAqLworCQkJCURlY29uc3RydWN0UXVhbGlmaWVkTmFtZShv bGRuYW1lcywgJnNjaGVtYW5hbWUsICZvcGZuYW1lKTsKKworCQkJCXJldCA9IG5ld19vYmp0cmVl X1ZBKCJBTFRFUiAle29ianR5cGV9cyAle2lkZW50aXR5fUQgVVNJTkcgJXtpbmRleF9tZXRob2R9 cyBSRU5BTUUgVE8gJXtuZXduYW1lfUkiLCA0LAorCQkJCQkJCQkJICJvYmp0eXBlIiwgT2JqVHlw ZVN0cmluZywKKwkJCQkJCQkJCSBzdHJpbmdpZnlfb2JqdHlwZShub2RlLT5yZW5hbWVUeXBlLCBm YWxzZSksCisJCQkJCQkJCQkgImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJCSBu ZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUob3BmRm9ybS0+b3BmbmFtZXNwYWNlLAorCQkJCQkJCQkJ CQkJCQkJICBvcGZuYW1lKSwKKwkJCQkJCQkJCSAiaW5kZXhfbWV0aG9kIiwgT2JqVHlwZVN0cmlu ZywKKwkJCQkJCQkJCSBOYW1lU3RyKGFtRm9ybS0+YW1uYW1lKSwKKwkJCQkJCQkJCSAibmV3bmFt ZSIsIE9ialR5cGVTdHJpbmcsIG5vZGUtPm5ld25hbWUpOworCisJCQkJUmVsZWFzZVN5c0NhY2hl KGFtVHVwKTsKKwkJCQlSZWxlYXNlU3lzQ2FjaGUob3BmVHVwKTsKKwkJCX0KKwkJCWJyZWFrOwor CisJCWNhc2UgT0JKRUNUX1NDSEVNQToKKwkJCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBT Q0hFTUEgJXtpZGVudGl0eX1JIFJFTkFNRSBUTyAle25ld25hbWV9SSIsIDIsCisJCQkJCQkJCSAi aWRlbnRpdHkiLCBPYmpUeXBlU3RyaW5nLCBub2RlLT5zdWJuYW1lLAorCQkJCQkJCQkgIm5ld25h bWUiLCBPYmpUeXBlU3RyaW5nLCBub2RlLT5uZXduYW1lKTsKKwkJCWJyZWFrOworCisJCWNhc2Ug T0JKRUNUX0ZEVzoKKwkJY2FzZSBPQkpFQ1RfTEFOR1VBR0U6CisJCWNhc2UgT0JKRUNUX0ZPUkVJ R05fU0VSVkVSOgorCQljYXNlIE9CSkVDVF9QVUJMSUNBVElPTjoKKwkJCXJldCA9IG5ld19vYmp0 cmVlX1ZBKCJBTFRFUiAle29ianR5cGV9cyAle2lkZW50aXR5fXMgUkVOQU1FIFRPICV7bmV3bmFt ZX1JIiwgMywKKwkJCQkJCQkJICJvYmp0eXBlIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJIHN0 cmluZ2lmeV9vYmp0eXBlKG5vZGUtPnJlbmFtZVR5cGUsIGZhbHNlKSwKKwkJCQkJCQkJICJpZGVu dGl0eSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCSBzdHJWYWwoY2FzdE5vZGUoU3RyaW5nLCBu b2RlLT5vYmplY3QpKSwKKwkJCQkJCQkJICJuZXduYW1lIiwgT2JqVHlwZVN0cmluZywgbm9kZS0+ bmV3bmFtZSk7CisJCQlicmVhazsKKworCQljYXNlIE9CSkVDVF9SVUxFOgorCQkJeworCQkJCUhl YXBUdXBsZQlyZXdyVHVwOworCQkJCUZvcm1fcGdfcmV3cml0ZSByZXdyRm9ybTsKKwkJCQlSZWxh dGlvbglwZ19yZXdyaXRlOworCisJCQkJcGdfcmV3cml0ZSA9IHJlbGF0aW9uX29wZW4oUmV3cml0 ZVJlbGF0aW9uSWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJCQkJcmV3clR1cCA9IGdldF9jYXRhbG9n X29iamVjdF9ieV9vaWQocGdfcmV3cml0ZSwgQW51bV9wZ19yZXdyaXRlX29pZCwgYWRkcmVzcy5v YmplY3RJZCk7CisJCQkJcmV3ckZvcm0gPSAoRm9ybV9wZ19yZXdyaXRlKSBHRVRTVFJVQ1QocmV3 clR1cCk7CisKKwkJCQlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgUlVMRSAle3J1bGVuYW1l fUkgT04gJXtpZGVudGl0eX1EIFJFTkFNRSBUTyAle25ld25hbWV9SSIsIDMsCisJCQkJCQkJCQkg InJ1bGVuYW1lIiwgT2JqVHlwZVN0cmluZywgbm9kZS0+c3VibmFtZSwKKwkJCQkJCQkJCSAiaWRl bnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFt ZV9pZChSZWxhdGlvblJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCQkJIHJld3JGb3JtLT5ldl9j bGFzcyksCisJCQkJCQkJCQkgIm5ld25hbWUiLCBPYmpUeXBlU3RyaW5nLCBub2RlLT5uZXduYW1l KTsKKwkJCQlyZWxhdGlvbl9jbG9zZShwZ19yZXdyaXRlLCBBY2Nlc3NTaGFyZUxvY2spOworCQkJ fQorCQkJYnJlYWs7CisKKwkJY2FzZSBPQkpFQ1RfVFJJR0dFUjoKKwkJCXsKKwkJCQlIZWFwVHVw bGUJdHJpZ1R1cDsKKwkJCQlGb3JtX3BnX3RyaWdnZXIgdHJpZ0Zvcm07CisJCQkJUmVsYXRpb24J cGdfdHJpZ2dlcjsKKworCQkJCXBnX3RyaWdnZXIgPSByZWxhdGlvbl9vcGVuKFRyaWdnZXJSZWxh dGlvbklkLCBBY2Nlc3NTaGFyZUxvY2spOworCQkJCXRyaWdUdXAgPSBnZXRfY2F0YWxvZ19vYmpl Y3RfYnlfb2lkKHBnX3RyaWdnZXIsIGdldF9vYmplY3RfYXR0bnVtX29pZChhZGRyZXNzLmNsYXNz SWQpLCBhZGRyZXNzLm9iamVjdElkKTsKKwkJCQl0cmlnRm9ybSA9IChGb3JtX3BnX3RyaWdnZXIp IEdFVFNUUlVDVCh0cmlnVHVwKTsKKworCQkJCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBU UklHR0VSICV7dHJpZ2dlcm5hbWV9SSBPTiAle2lkZW50aXR5fUQgUkVOQU1FIFRPICV7bmV3bmFt ZX1JIiwgMywKKwkJCQkJCQkJCSAidHJpZ2dlcm5hbWUiLCBPYmpUeXBlU3RyaW5nLCBub2RlLT5z dWJuYW1lLAorCQkJCQkJCQkJICJpZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJCQkg bmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFJlbGF0aW9uUmVsYXRpb25JZCwKKwkJCQkJCQkJ CQkJCQkJCQkgdHJpZ0Zvcm0tPnRncmVsaWQpLAorCQkJCQkJCQkJICJuZXduYW1lIiwgT2JqVHlw ZVN0cmluZywgbm9kZS0+bmV3bmFtZSk7CisKKwkJCQlyZWxhdGlvbl9jbG9zZShwZ190cmlnZ2Vy LCBBY2Nlc3NTaGFyZUxvY2spOworCQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBPQkpFQ1RfQ09M TEFUSU9OOgorCQljYXNlIE9CSkVDVF9TVEFUSVNUSUNfRVhUOgorCQljYXNlIE9CSkVDVF9UWVBF OgorCQljYXNlIE9CSkVDVF9DT05WRVJTSU9OOgorCQljYXNlIE9CSkVDVF9ET01BSU46CisJCWNh c2UgT0JKRUNUX1RTRElDVElPTkFSWToKKwkJY2FzZSBPQkpFQ1RfVFNQQVJTRVI6CisJCWNhc2Ug T0JKRUNUX1RTVEVNUExBVEU6CisJCWNhc2UgT0JKRUNUX1RTQ09ORklHVVJBVElPTjoKKwkJCXsK KwkJCQlIZWFwVHVwbGUJb2JqVHVwOworCQkJCVJlbGF0aW9uCWNhdGFsb2c7CisJCQkJRGF0dW0J CW9iam5zcDsKKwkJCQlib29sCQlpc251bGw7CisJCQkJQXR0ck51bWJlcglBbnVtX25hbWVzcGFj ZTsKKwkJCQlMaXN0CSAgICppZGVudGl0eSA9IGNhc3ROb2RlKExpc3QsIG5vZGUtPm9iamVjdCk7 CisKKwkJCQkvKiBPYnRhaW4gb2JqZWN0IHR1cGxlICovCisJCQkJY2F0YWxvZyA9IHJlbGF0aW9u X29wZW4oYWRkcmVzcy5jbGFzc0lkLCBBY2Nlc3NTaGFyZUxvY2spOworCQkJCW9ialR1cCA9IGdl dF9jYXRhbG9nX29iamVjdF9ieV9vaWQoY2F0YWxvZywgZ2V0X29iamVjdF9hdHRudW1fb2lkKGFk ZHJlc3MuY2xhc3NJZCksIGFkZHJlc3Mub2JqZWN0SWQpOworCisJCQkJLyogT2J0YWluIG5hbWVz cGFjZSAqLworCQkJCUFudW1fbmFtZXNwYWNlID0gZ2V0X29iamVjdF9hdHRudW1fbmFtZXNwYWNl KGFkZHJlc3MuY2xhc3NJZCk7CisJCQkJb2JqbnNwID0gaGVhcF9nZXRhdHRyKG9ialR1cCwgQW51 bV9uYW1lc3BhY2UsCisJCQkJCQkJCQkgIFJlbGF0aW9uR2V0RGVzY3IoY2F0YWxvZyksICZpc251 bGwpOworCQkJCWlmIChpc251bGwpCisJCQkJCWVsb2coRVJST1IsICJpbnZhbGlkIE5VTEwgbmFt ZXNwYWNlIik7CisKKwkJCQlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgJXtvYmp0eXBlfXMg JXtpZGVudGl0eX1EIFJFTkFNRSBUTyAle25ld25hbWV9SSIsIDMsCisJCQkJCQkJCQkgIm9ianR5 cGUiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJIHN0cmluZ2lmeV9vYmp0eXBlKG5vZGUtPnJl bmFtZVR5cGUsIGZhbHNlKSwKKwkJCQkJCQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAor CQkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShEYXR1bUdldE9iamVjdElkKG9iam5z cCksCisJCQkJCQkJCQkJCQkJCQkgIHN0clZhbChsbGFzdChpZGVudGl0eSkpKSwKKwkJCQkJCQkJ CSAibmV3bmFtZSIsIE9ialR5cGVTdHJpbmcsIG5vZGUtPm5ld25hbWUpOworCQkJCXJlbGF0aW9u X2Nsb3NlKGNhdGFsb2csIEFjY2Vzc1NoYXJlTG9jayk7CisJCQl9CisJCQlicmVhazsKKworCQlk ZWZhdWx0OgorCQkJZWxvZyhFUlJPUiwgInVuc3VwcG9ydGVkIG9iamVjdCB0eXBlICVkIiwgbm9k ZS0+cmVuYW1lVHlwZSk7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIERlcGFyc2Ug YSBBbHRlck9iamVjdERlcGVuZHNTdG10IChBTFRFUiAuLi4gREVQRU5EUyBPTiAuLi4pLgorICoK KyAqIFZlcmJvc2Ugc3ludGF4CisgKiBBTFRFUiBJTkRFWCAle2lkZW50aXR5fUQgJXtub31zIERF UEVORFMgT04gRVhURU5TSU9OICV7bmV3bmFtZX1JCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2Rl cGFyc2VfQWx0ZXJEZXBlbmRTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQorewor CUFsdGVyT2JqZWN0RGVwZW5kc1N0bXQgKm5vZGUgPSAoQWx0ZXJPYmplY3REZXBlbmRzU3RtdCAq KSBwYXJzZXRyZWU7CisJT2JqVHJlZSAgICAqcmV0ID0gTlVMTDsKKworCWlmIChub2RlLT5vYmpl Y3RUeXBlID09IE9CSkVDVF9JTkRFWCkKKwl7CisJCU9ialRyZWUgICAgKnF1YWxpZmllZDsKKwkJ UmVsYXRpb24JcmVsYXRpb24gPSByZWxhdGlvbl9vcGVuKG9iamVjdElkLCBBY2Nlc3NTaGFyZUxv Y2spOworCisJCXF1YWxpZmllZCA9IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShyZWxhdGlvbi0+ cmRfcmVsLT5yZWxuYW1lc3BhY2UsCisJCQkJCQkJCQkJCSBub2RlLT5yZWxhdGlvbi0+cmVsbmFt ZSk7CisJCXJlbGF0aW9uX2Nsb3NlKHJlbGF0aW9uLCBBY2Nlc3NTaGFyZUxvY2spOworCisJCXJl dCA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBJTkRFWCAle2lkZW50aXR5fUQgJXtub31zIERFUEVO RFMgT04gRVhURU5TSU9OICV7bmV3bmFtZX1JIiwgMywKKwkJCQkJCQkgImlkZW50aXR5IiwgT2Jq VHlwZU9iamVjdCwgcXVhbGlmaWVkLAorCQkJCQkJCSAibm8iLCBPYmpUeXBlU3RyaW5nLAorCQkJ CQkJCSBub2RlLT5yZW1vdmUgPyAiTk8iIDogIiIsCisJCQkJCQkJICJuZXduYW1lIiwgT2JqVHlw ZVN0cmluZywgc3RyVmFsKG5vZGUtPmV4dG5hbWUpKTsKKwl9CisJZWxzZQorCQllbG9nKExPRywg InVucmVjb2duaXplZCBub2RlIHR5cGUgaW4gZGVwYXJzZSBjb21tYW5kOiAlZCIsCisJCQkgKGlu dCkgbm9kZVRhZyhwYXJzZXRyZWUpKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBIZWxw ZXIgZm9yIGRlcGFyc2VfQ3JlYXRlUHVibGljYXRpb25TdG10IGFuZCBkZXBhcnNlX0FsdGVyUHVi bGljYXRpb25TdG10LgorICovCitzdGF0aWMgdm9pZAorZGVwYXJzZV9QdWJsaWNhdGlvbk9iamVj dHMoTGlzdCAqcmVscywgTGlzdCAqc2NoZW1hcywKKwkJCQkJCSAgIExpc3QgKipwdWJyZWxzLCBM aXN0ICoqcHVic2NoZW1hcykKK3sKKwlMaXN0Q2VsbCAgICpsYzE7CisJTGlzdENlbGwgICAqbGMy OworCisJKnB1YnJlbHMgPSBOSUw7CisJKnB1YnNjaGVtYXMgPSBOSUw7CisKKwlmb3JlYWNoKGxj MSwgcmVscykKKwl7CisJCU9ialRyZWUgICAgKnRtcF9yZWw7CisJCUxpc3QJICAgKmNvbGxpc3Qg PSBOSUw7CisJCVJlbGF0aW9uCXJlbGF0aW9uOworCisJCXB1YmxpY2F0aW9uX3JlbCAqcHViX3Jl bCA9IChwdWJsaWNhdGlvbl9yZWwgKikgbGZpcnN0KGxjMSk7CisKKwkJcmVsYXRpb24gPSByZWxh dGlvbl9vcGVuKHB1Yl9yZWwtPnJlbGlkLCBBY2Nlc3NTaGFyZUxvY2spOworCisJCXRtcF9yZWwg PSBuZXdfb2JqdHJlZV9WQSgiJXt0YWJsZW5hbWV9RCIsIDEsCisJCQkJCQkJCSAidGFibGVuYW1l IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShyZWxh dGlvbi0+cmRfcmVsLT5yZWxuYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkJCSAgUmVsYXRpb25HZXRS ZWxhdGlvbk5hbWUocmVsYXRpb24pKSk7CisKKwkJaWYgKHB1Yl9yZWwtPmNvbHVtbkxpc3QpCisJ CXsKKwkJCWZvcmVhY2gobGMyLCBwdWJfcmVsLT5jb2x1bW5MaXN0KQorCQkJCWNvbGxpc3QgPSBs YXBwZW5kKGNvbGxpc3QsCisJCQkJCQkJCSAgbmV3X3N0cmluZ19vYmplY3Qoc3RyVmFsKGxmaXJz dChsYzIpKSkpOworCisJCQlhcHBlbmRfYXJyYXlfb2JqZWN0KHRtcF9yZWwsICIoJXtjb2xzOiwg fXMpIiwgY29sbGlzdCk7CisJCX0KKworCQlpZiAocHViX3JlbC0+d2hlcmVDbGF1c2UpCisJCXsK KwkJCUxpc3QJICAgKmNvbnRleHQ7CisJCQljaGFyCSAgICp3aGVyZUNsYXVzZTsKKworCQkJY29u dGV4dCA9IGRlcGFyc2VfY29udGV4dF9mb3IoUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmVsYXRp b24pLAorCQkJCQkJCQkJCSAgcHViX3JlbC0+cmVsaWQpOworCisJCQkvKiBEZXBhcnNlIHRoZSBl eHByZXNzaW9uICovCisJCQl3aGVyZUNsYXVzZSA9CisJCQkJZGVwYXJzZV9leHByZXNzaW9uKHB1 Yl9yZWwtPndoZXJlQ2xhdXNlLCBjb250ZXh0LCBmYWxzZSwgZmFsc2UpOworCisJCQlhcHBlbmRf c3RyaW5nX29iamVjdCh0bXBfcmVsLCAiV0hFUkUgJXt3aGVyZX1zIiwgIndoZXJlIiwgd2hlcmVD bGF1c2UpOworCQl9CisKKwkJcmVsYXRpb25fY2xvc2UocmVsYXRpb24sIEFjY2Vzc1NoYXJlTG9j ayk7CisKKwkJKnB1YnJlbHMgPSBsYXBwZW5kKCpwdWJyZWxzLCBuZXdfb2JqZWN0X29iamVjdCh0 bXBfcmVsKSk7CisJfQorCisJZm9yZWFjaChsYzEsIHNjaGVtYXMpCisJCSogcHVic2NoZW1hcyA9 IGxhcHBlbmQoKnB1YnNjaGVtYXMsCisJCQkJCQkJICAgbmV3X3N0cmluZ19vYmplY3QoZ2V0X25h bWVzcGFjZV9uYW1lKGxmaXJzdF9vaWQobGMxKSkpKTsKK30KKworLyoKKyAqIERlcGFyc2UgYSBD UkVBVEUgUFVCTElDQVRJT04gc3RhdGVtZW50LgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBD UkVBVEUgUFVCTElDQVRJT04gJXtpZGVudGl0eX1zIEZPUiBBTEwgVEFCTEVTIFdJVEggKCV7d2l0 aDosIH1zKQorICoJT1IKKyAqIENSRUFURSBQVUJMSUNBVElPTiAle2lkZW50aXR5fXMgRk9SIFRB QkxFICV7dGFibGVzOiwgfXMgV0lUSCAoJXt3aXRoOiwgfXMpCisgKglPUgorICogQ1JFQVRFIFBV QkxJQ0FUSU9OICV7aWRlbnRpdHl9cyBGT1IgVEFCTEVTIElOIFNDSEVNQSAle3NjaGVtYXM6LCB9 cworICogV0lUSCAoJXt3aXRoOiwgfXMpCisgKglPUgorICogQ1JFQVRFIFBVQkxJQ0FUSU9OICV7 aWRlbnRpdHl9cyBGT1IgVEFCTEUgJXt0YWJsZXM6LCB9cywKKyAqIFRBQkxFUyBJTiBTQ0hFTUEg JXtzY2hlbWFzOiwgfXMgV0lUSCAoJXt3aXRoOiwgfXMpCisgKi8KK3N0YXRpYyBPYmpUcmVlICoK K2RlcGFyc2VfQ3JlYXRlUHVibGljYXRpb25TdG10KENvbGxlY3RlZENvbW1hbmQgKmNtZCkKK3sK KwlPaWQJCQlvYmplY3RJZCA9IGNtZC0+ZC5jcmVhdGVwdWIuYWRkcmVzcy5vYmplY3RJZDsKKwlD cmVhdGVQdWJsaWNhdGlvblN0bXQgKm5vZGUgPSAoQ3JlYXRlUHVibGljYXRpb25TdG10ICopIGNt ZC0+cGFyc2V0cmVlOworCU9ialRyZWUgICAgKmNyZWF0ZVB1YjsKKwlIZWFwVHVwbGUJcHVidHVw OworCUZvcm1fcGdfcHVibGljYXRpb24gcHViZm9ybTsKKwlMaXN0CSAgICpsaXN0ID0gTklMOwor CUxpc3RDZWxsICAgKmNlbGw7CisJTGlzdAkgICAqcmVsbGlzdCA9IE5JTDsKKwlMaXN0CSAgICpz Y2hsaXN0ID0gTklMOworCisJLyogRG9uJ3QgZGVwYXJzZSBzcWwgY29tbWFuZHMgZ2VuZXJhdGVk IHdoaWxlIGNyZWF0aW5nIGV4dGVuc2lvbiAqLworCWlmIChjbWQtPmluX2V4dGVuc2lvbikKKwkJ cmV0dXJuIE5VTEw7CisKKwkvKiBGaW5kIHRoZSBwZ19wdWJsaWNhdGlvbiBlbnRyeSBhbmQgb3Bl biB0aGUgY29ycmVzcG9uZGluZyByZWxhdGlvbiAqLworCXB1YnR1cCA9IFNlYXJjaFN5c0NhY2hl MShQVUJMSUNBVElPTk9JRCwgT2JqZWN0SWRHZXREYXR1bShvYmplY3RJZCkpOworCWlmICghSGVh cFR1cGxlSXNWYWxpZChwdWJ0dXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxl ZCBmb3IgcHVibGljYXRpb24gd2l0aCBPSUQgJXUiLAorCQkJIG9iamVjdElkKTsKKworCXB1YmZv cm0gPSAoRm9ybV9wZ19wdWJsaWNhdGlvbikgR0VUU1RSVUNUKHB1YnR1cCk7CisJcHViZm9ybS0+ b2lkID0gcHViZm9ybS0+b2lkOworCisJY3JlYXRlUHViID0gbmV3X29ianRyZWVfVkEoIkNSRUFU RSBQVUJMSUNBVElPTiAle2lkZW50aXR5fXMiLCAxLAorCQkJCQkJCSAgICJpZGVudGl0eSIsIE9i alR5cGVTdHJpbmcsCisJCQkJCQkJICAgTmFtZVN0cihwdWJmb3JtLT5wdWJuYW1lKSk7CisKKwkv KiBGT1IgQUxMIFRBQkxFUyBwdWJsaWNhdGlvbiAqLworCWlmIChwdWJmb3JtLT5wdWJhbGx0YWJs ZXMpCisJCWFwcGVuZF9mb3JtYXRfc3RyaW5nKGNyZWF0ZVB1YiwgIkZPUiBBTEwgVEFCTEVTIik7 CisJZWxzZQorCXsKKwkJZGVwYXJzZV9QdWJsaWNhdGlvbk9iamVjdHMoY21kLT5kLmNyZWF0ZXB1 Yi5yZWxzLAorCQkJCQkJCQkgICBjbWQtPmQuY3JlYXRlcHViLnNjaGVtYXMsCisJCQkJCQkJCSAg ICZyZWxsaXN0LCAmc2NobGlzdCk7CisKKwkJLyogQXBwZW5kIHRoZSBwdWJsaWNhdGlvbiB0YWJs ZXMgKi8KKwkJaWYgKHJlbGxpc3QpCisJCQlhcHBlbmRfYXJyYXlfb2JqZWN0KGNyZWF0ZVB1Yiwg IkZPUiBUQUJMRSAle3RhYmxlczosIH1zIiwgcmVsbGlzdCk7CisKKwkJLyogQXBwZW5kIHRoZSBw dWJsaWNhdGlvbiBzY2hlbWFzICovCisJCWlmIChzY2hsaXN0KQorCQl7CisJCQlpZiAocmVsbGlz dCkKKwkJCQlhcHBlbmRfZm9ybWF0X3N0cmluZyhjcmVhdGVQdWIsICIsIFRBQkxFUyBJTiBTQ0hF TUEiKTsKKwkJCWVsc2UKKwkJCQlhcHBlbmRfZm9ybWF0X3N0cmluZyhjcmVhdGVQdWIsICJGT1Ig VEFCTEVTIElOIFNDSEVNQSIpOworCisJCQlhcHBlbmRfYXJyYXlfb2JqZWN0KGNyZWF0ZVB1Yiwg IiV7c2NoZW1hczosIH1zIiwgc2NobGlzdCk7CisJCX0KKwl9CisKKwkvKiBXSVRIIGNsYXVzZSAq LworCWZvcmVhY2goY2VsbCwgbm9kZS0+b3B0aW9ucykKKwl7CisJCU9ialRyZWUgICAgKnRtcF9v Ymo7CisJCURlZkVsZW0gICAgKm9wdCA9IChEZWZFbGVtICopIGxmaXJzdChjZWxsKTsKKworCQl0 bXBfb2JqID0gZGVwYXJzZV9EZWZFbGVtKG9wdCwgZmFsc2UpOworCQlsaXN0ID0gbGFwcGVuZChs aXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXBfb2JqKSk7CisJfQorCisJYXBwZW5kX2FycmF5X29i amVjdChjcmVhdGVQdWIsICJXSVRIICgle3dpdGg6LCB9cykiLCBsaXN0KTsKKworCVJlbGVhc2VT eXNDYWNoZShwdWJ0dXApOworCXJldHVybiBjcmVhdGVQdWI7Cit9CisKKy8qCisgKiBEZXBhcnNl IGEgQUxURVIgUFVCTElDQVRJT04gc3RhdGVtZW50LgorICoKKyAqIFZlcmJvc2Ugc3ludGF4Cisg KiBBTFRFUiBQVUJMSUNBVElPTiAle2lkZW50aXR5fXMgQUREfERST1B8U0VUIFRBQkxFICV7dGFi bGVzOiwgfXMKKyAqIAlPUgorICogQUxURVIgUFVCTElDQVRJT04gJXtpZGVudGl0eX1zIEFERHxE Uk9QfFNFVCBUQUJMRVMgSU4gU0NIRU1BICV7c2NoZW1hczosIH1zCisgKglPUgorICogQUxURVIg UFVCTElDQVRJT04gJXtpZGVudGl0eX1zIEFERHxEUk9QfFNFVCBUQUJMRSAle3RhYmxlczosIH1z LAorICogVEFCTEVTIElOIFNDSEVNQSAle3NjaGVtYXM6LCB9cworICovCitzdGF0aWMgT2JqVHJl ZSAqCitkZXBhcnNlX0FsdGVyUHVibGljYXRpb25TdG10KENvbGxlY3RlZENvbW1hbmQgKmNtZCkK K3sKKwlPaWQJCQlvYmplY3RJZCA9IGNtZC0+ZC5jcmVhdGVwdWIuYWRkcmVzcy5vYmplY3RJZDsK KwlBbHRlclB1YmxpY2F0aW9uU3RtdCAqbm9kZSA9IChBbHRlclB1YmxpY2F0aW9uU3RtdCAqKSBj bWQtPnBhcnNldHJlZTsKKwlPYmpUcmVlICAgICphbHRlcnB1YjsKKwlIZWFwVHVwbGUJcHVidHVw OworCUZvcm1fcGdfcHVibGljYXRpb24gcHViZm9ybTsKKwlMaXN0Q2VsbCAgICpjZWxsOworCUxp c3QJICAgKnJlbGxpc3QgPSBOSUw7CisJTGlzdAkgICAqc2NobGlzdCA9IE5JTDsKKworCS8qIERv bid0IGRlcGFyc2Ugc3FsIGNvbW1hbmRzIGdlbmVyYXRlZCB3aGlsZSBjcmVhdGluZyBleHRlbnNp b24gKi8KKwlpZiAoY21kLT5pbl9leHRlbnNpb24pCisJCXJldHVybiBOVUxMOworCisJLyogRmlu ZCB0aGUgcGdfcHVibGljYXRpb24gZW50cnkgYW5kIG9wZW4gdGhlIGNvcnJlc3BvbmRpbmcgcmVs YXRpb24gKi8KKwlwdWJ0dXAgPSBTZWFyY2hTeXNDYWNoZTEoUFVCTElDQVRJT05PSUQsIE9iamVj dElkR2V0RGF0dW0ob2JqZWN0SWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQocHVidHVwKSkK KwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHB1YmxpY2F0aW9uIHdpdGgg T0lEICV1IiwKKwkJCSBvYmplY3RJZCk7CisJcHViZm9ybSA9IChGb3JtX3BnX3B1YmxpY2F0aW9u KSBHRVRTVFJVQ1QocHVidHVwKTsKKworCXB1YmZvcm0tPm9pZCA9IHB1YmZvcm0tPm9pZDsKKwor CWFsdGVycHViID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIFBVQkxJQ0FUSU9OICV7aWRlbnRpdHl9 cyIsIDEsCisJCQkJCQkJICAiaWRlbnRpdHkiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCSAgTmFt ZVN0cihwdWJmb3JtLT5wdWJuYW1lKSk7CisKKwlpZiAobm9kZS0+b3B0aW9ucykKKwl7CisJCS8q IFNFVCBvcHRpb24gKi8KKwkJTGlzdAkgICAqbGlzdCA9IE5JTDsKKworCQlmb3JlYWNoKGNlbGws IG5vZGUtPm9wdGlvbnMpCisJCXsKKwkJCU9ialRyZWUgICAgKnRtcF9vYmo7CisJCQlEZWZFbGVt ICAgICpvcHQgPSAoRGVmRWxlbSAqKSBsZmlyc3QoY2VsbCk7CisKKwkJCXRtcF9vYmogPSBkZXBh cnNlX0RlZkVsZW0ob3B0LCBmYWxzZSk7CisJCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2Jq ZWN0X29iamVjdCh0bXBfb2JqKSk7CisJCX0KKworCQkvKiBBcHBlbmQgdGhlIHB1YmxpY2F0aW9u IG9wdGlvbnMgKi8KKwkJYXBwZW5kX2FycmF5X29iamVjdChhbHRlcnB1YiwgIlNFVCAoJXtvcHRp b25zOiwgfXMpIiwgbGlzdCk7CisKKwkJUmVsZWFzZVN5c0NhY2hlKHB1YnR1cCk7CisJCXJldHVy biBhbHRlcnB1YjsKKwl9CisKKwlpZiAobm9kZS0+YWN0aW9uID09IEFQX0FkZE9iamVjdHMpCisJ CWFwcGVuZF9mb3JtYXRfc3RyaW5nKGFsdGVycHViLCAiQUREIik7CisJZWxzZSBpZiAobm9kZS0+ YWN0aW9uID09IEFQX0Ryb3BPYmplY3RzKQorCQlhcHBlbmRfZm9ybWF0X3N0cmluZyhhbHRlcnB1 YiwgIkRST1AiKTsKKwllbHNlCisJCWFwcGVuZF9mb3JtYXRfc3RyaW5nKGFsdGVycHViLCAiU0VU Iik7CisKKwlkZXBhcnNlX1B1YmxpY2F0aW9uT2JqZWN0cyhjbWQtPmQuYWx0ZXJwdWIucmVscywg Y21kLT5kLmFsdGVycHViLnNjaGVtYXMsCisJCQkJCQkJICAgJnJlbGxpc3QsICZzY2hsaXN0KTsK KworCS8qIEFwcGVuZCB0aGUgcHVibGljYXRpb24gdGFibGVzICovCisJaWYgKHJlbGxpc3QpCisJ CWFwcGVuZF9hcnJheV9vYmplY3QoYWx0ZXJwdWIsICJUQUJMRSAle3RhYmxlczosIH1zIiwgcmVs bGlzdCk7CisKKwlpZiAoc2NobGlzdCkKKwl7CisJCWlmIChjbWQtPmQuY3JlYXRlcHViLnJlbHMp CisJCQlhcHBlbmRfZm9ybWF0X3N0cmluZyhhbHRlcnB1YiwgIiwgVEFCTEVTIElOIFNDSEVNQSIp OworCQllbHNlCisJCQlhcHBlbmRfZm9ybWF0X3N0cmluZyhhbHRlcnB1YiwgIlRBQkxFUyBJTiBT Q0hFTUEiKTsKKworCQkvKiBBcHBlbmQgdGhlIHB1YmxpY2F0aW9uIHNjaGVtYXMgKi8KKwkJYXBw ZW5kX2FycmF5X29iamVjdChhbHRlcnB1YiwgIiV7c2NoZW1hczosIH1zIiwgc2NobGlzdCk7CisJ fQorCisJUmVsZWFzZVN5c0NhY2hlKHB1YnR1cCk7CisJcmV0dXJuIGFsdGVycHViOworfQorCisv KgorICogRGVwYXJzZSBhIFJ1bGVTdG10IChDUkVBVEUgUlVMRSkuCisgKgorICogR2l2ZW4gYSBy dWxlIE9JRCBhbmQgdGhlIHBhcnNlIHRyZWUgdGhhdCBjcmVhdGVkIGl0LCByZXR1cm4gYW4gT2Jq VHJlZQorICogcmVwcmVzZW50aW5nIHRoZSBydWxlIGNvbW1hbmQuCisgKgorICogVmVyYm9zZSBz eW50YXgKKyAqIENSRUFURSBSVUxFICV7b3JfcmVwbGFjZX1zICV7aWRlbnRpdHl9SSBBUyBPTiAl e2V2ZW50fXMgVE8gJXt0YWJsZX1ECisgKiAle3doZXJlX2NsYXVzZX1zIERPICV7aW5zdGVhZH1z ICV7YWN0aW9uczosIH1zCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfUnVsZVN0bXQo T2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJUnVsZVN0bXQgICAqbm9kZSA9IChS dWxlU3RtdCAqKSBwYXJzZXRyZWU7CisJT2JqVHJlZSAgICAqcmV0OworCU9ialRyZWUgICAgKnRt cDsKKwlSZWxhdGlvbglwZ19yZXdyaXRlOworCUZvcm1fcGdfcmV3cml0ZSByZXdyRm9ybTsKKwlI ZWFwVHVwbGUJcmV3clR1cDsKKwlTeXNTY2FuRGVzYyBzY2FuOworCVNjYW5LZXlEYXRhIGtleTsK KwlEYXR1bQkJZXZfcXVhbDsKKwlEYXR1bQkJZXZfYWN0aW9uczsKKwlib29sCQlpc251bGw7CisJ Y2hhcgkgICAqcXVhbDsKKwlMaXN0CSAgICphY3Rpb25zOworCUxpc3QJICAgKmxpc3QgPSBOSUw7 CisJTGlzdENlbGwgICAqY2VsbDsKKwljaGFyCSAgICpldmVudF9zdHI7CisKKwlwZ19yZXdyaXRl ID0gdGFibGVfb3BlbihSZXdyaXRlUmVsYXRpb25JZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwlTY2Fu S2V5SW5pdCgma2V5LAorCQkJCUFudW1fcGdfcmV3cml0ZV9vaWQsCisJCQkJQlRFcXVhbFN0cmF0 ZWd5TnVtYmVyLAorCQkJCUZfT0lERVEsIE9iamVjdElkR2V0RGF0dW0ob2JqZWN0SWQpKTsKKwor CXNjYW4gPSBzeXN0YWJsZV9iZWdpbnNjYW4ocGdfcmV3cml0ZSwgUmV3cml0ZU9pZEluZGV4SWQs IHRydWUsCisJCQkJCQkJICBOVUxMLCAxLCAma2V5KTsKKwlyZXdyVHVwID0gc3lzdGFibGVfZ2V0 bmV4dChzY2FuKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQocmV3clR1cCkpCisJCWVsb2coRVJS T1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciByZXdyaXRlIHJ1bGUgd2l0aCBPSUQgJXUiLAor CQkJIG9iamVjdElkKTsKKworCXJld3JGb3JtID0gKEZvcm1fcGdfcmV3cml0ZSkgR0VUU1RSVUNU KHJld3JUdXApOworCisJZXZlbnRfc3RyID0gbm9kZS0+ZXZlbnQgPT0gQ01EX1NFTEVDVCA/ICJT RUxFQ1QiIDoKKwkJbm9kZS0+ZXZlbnQgPT0gQ01EX1VQREFURSA/ICJVUERBVEUiIDoKKwkJbm9k ZS0+ZXZlbnQgPT0gQ01EX0RFTEVURSA/ICJERUxFVEUiIDoKKwkJbm9kZS0+ZXZlbnQgPT0gQ01E X0lOU0VSVCA/ICJJTlNFUlQiIDogTlVMTDsKKwlBc3NlcnQoZXZlbnRfc3RyICE9IE5VTEwpOwor CisJZXZfcXVhbCA9IGhlYXBfZ2V0YXR0cihyZXdyVHVwLCBBbnVtX3BnX3Jld3JpdGVfZXZfcXVh bCwKKwkJCQkJCSAgIFJlbGF0aW9uR2V0RGVzY3IocGdfcmV3cml0ZSksICZpc251bGwpOworCWV2 X2FjdGlvbnMgPSBoZWFwX2dldGF0dHIocmV3clR1cCwgQW51bV9wZ19yZXdyaXRlX2V2X2FjdGlv biwKKwkJCQkJCQkgIFJlbGF0aW9uR2V0RGVzY3IocGdfcmV3cml0ZSksICZpc251bGwpOworCisJ cGdfZ2V0X3J1bGVkZWZfZGV0YWlsZWQoZXZfcXVhbCwgZXZfYWN0aW9ucywgJnF1YWwsICZhY3Rp b25zKTsKKworCXRtcCA9IG5ld19vYmp0cmVlKCIiKTsKKwlpZiAocXVhbCkKKwkJYXBwZW5kX3N0 cmluZ19vYmplY3QodG1wLCAiV0hFUkUgJXtjbGF1c2V9cyIsICJjbGF1c2UiLCBxdWFsKTsKKwll bHNlCisJeworCQlhcHBlbmRfbnVsbF9vYmplY3QodG1wLCAiV0hFUkUgJXtjbGF1c2V9cyIpOwor CQlhcHBlbmRfbm90X3ByZXNlbnQodG1wKTsKKwl9CisKKwlpZiAoYWN0aW9ucyA9PSBOSUwpCisJ CWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19zdHJpbmdfb2JqZWN0KCJOT1RISU5HIikpOworCWVs c2UKKwl7CisJCWZvcmVhY2goY2VsbCwgYWN0aW9ucykKKwkJCWxpc3QgPSBsYXBwZW5kKGxpc3Qs IG5ld19zdHJpbmdfb2JqZWN0KGxmaXJzdChjZWxsKSkpOworCX0KKworCXJldCA9IG5ld19vYmp0 cmVlX1ZBKCJDUkVBVEUgUlVMRSAle29yX3JlcGxhY2V9cyAle2lkZW50aXR5fUkgQVMgT04gJXtl dmVudH1zIFRPICV7dGFibGV9RCAle3doZXJlX2NsYXVzZX1zIERPICV7aW5zdGVhZH1zICV7YWN0 aW9uczosIH1zIiwgNywKKwkJCQkJCSAib3JfcmVwbGFjZSIsIE9ialR5cGVTdHJpbmcsCisJCQkJ CQkgbm9kZS0+cmVwbGFjZSA/ICJPUiBSRVBMQUNFIiA6ICIiLAorCQkJCQkJICJpZGVudGl0eSIs IE9ialR5cGVTdHJpbmcsIG5vZGUtPnJ1bGVuYW1lLAorCQkJCQkJICJldmVudCIsIE9ialR5cGVT dHJpbmcsIGV2ZW50X3N0ciwKKwkJCQkJCSAidGFibGUiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJ IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChSZWxhdGlvblJlbGF0aW9uSWQsCisJCQkJCQkJ CQkJCQkJIHJld3JGb3JtLT5ldl9jbGFzcyksCisJCQkJCQkgIndoZXJlX2NsYXVzZSIsIE9ialR5 cGVPYmplY3QsIHRtcCwKKwkJCQkJCSAiaW5zdGVhZCIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkg bm9kZS0+aW5zdGVhZCA/ICJJTlNURUFEIiA6ICJBTFNPIiwKKwkJCQkJCSAiYWN0aW9ucyIsIE9i alR5cGVBcnJheSwgbGlzdCk7CisKKwlzeXN0YWJsZV9lbmRzY2FuKHNjYW4pOworCXRhYmxlX2Ns b3NlKHBnX3Jld3JpdGUsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwlyZXR1cm4gcmV0OworfQorCisv KgorICogRGVwYXJzZSBhIENyZWF0ZVRyYW5zZm9ybVN0bXQgKENSRUFURSBUUkFOU0ZPUk0pLgor ICoKKyAqIEdpdmVuIGEgdHJhbnNmb3JtIE9JRCBhbmQgdGhlIHBhcnNlIHRyZWUgdGhhdCBjcmVh dGVkIGl0LCByZXR1cm4gYW4gT2JqVHJlZQorICogcmVwcmVzZW50aW5nIHRoZSBDUkVBVEUgVFJB TlNGT1JNIGNvbW1hbmQuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIENSRUFURSAle29yX3Jl cGxhY2V9cyBUUkFOU0ZPUk0gRk9SICV7dHlwZW5hbWV9RCBMQU5HVUFHRSAle2xhbmd1YWdlfUkK KyAqICggRlJPTSBTUUwgV0lUSCBGVU5DVElPTiAle3NpZ25hdHVyZX1zLCBUTyBTUUwgV0lUSCBG VU5DVElPTgorICogJXtzaWduYXR1cmVfdG9mfXMgKQorICovCitzdGF0aWMgT2JqVHJlZSAqCitk ZXBhcnNlX0NyZWF0ZVRyYW5zZm9ybVN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUp Cit7CisJQ3JlYXRlVHJhbnNmb3JtU3RtdCAqbm9kZSA9IChDcmVhdGVUcmFuc2Zvcm1TdG10ICop IHBhcnNldHJlZTsKKwlPYmpUcmVlICAgICpyZXQ7CisJT2JqVHJlZSAgICAqc2lnbmF0dXJlOwor CUhlYXBUdXBsZQl0cmZUdXA7CisJSGVhcFR1cGxlCWxhbmdUdXA7CisJSGVhcFR1cGxlCXByb2NU dXA7CisJRm9ybV9wZ190cmFuc2Zvcm0gdHJmRm9ybTsKKwlGb3JtX3BnX2xhbmd1YWdlIGxhbmdG b3JtOworCUZvcm1fcGdfcHJvYyBwcm9jRm9ybTsKKwlpbnQJCQlpOworCisJLyogR2V0IHRoZSBw Z190cmFuc2Zvcm0gdHVwbGUgKi8KKwl0cmZUdXAgPSBTZWFyY2hTeXNDYWNoZTEoVFJGT0lELCBP YmplY3RJZEdldERhdHVtKG9iamVjdElkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHRyZlR1 cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciB0cmFuc2Zvcm0gd2l0 aCBPSUQgJXUiLAorCQkJIG9iamVjdElkKTsKKwl0cmZGb3JtID0gKEZvcm1fcGdfdHJhbnNmb3Jt KSBHRVRTVFJVQ1QodHJmVHVwKTsKKworCS8qIEdldCB0aGUgY29ycmVzcG9uZGluZyBwZ19sYW5n dWFnZSB0dXBsZSAqLworCWxhbmdUdXAgPSBTZWFyY2hTeXNDYWNoZTEoTEFOR09JRCwgdHJmRm9y bS0+dHJmbGFuZyk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGxhbmdUdXApKQorCQllbG9nKEVS Uk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgbGFuZ3VhZ2Ugd2l0aCBPSUQgJXUiLAorCQkJ IHRyZkZvcm0tPnRyZmxhbmcpOworCWxhbmdGb3JtID0gKEZvcm1fcGdfbGFuZ3VhZ2UpIEdFVFNU UlVDVChsYW5nVHVwKTsKKworCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJDUkVBVEUgJXtvcl9yZXBs YWNlfXMgVFJBTlNGT1JNIEZPUiAle3R5cGVuYW1lfUQgTEFOR1VBR0UgJXtsYW5ndWFnZX1JIiwg MywKKwkJCQkJCSAib3JfcmVwbGFjZSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkgbm9kZS0+cmVw bGFjZSA/ICJPUiBSRVBMQUNFIiA6ICIiLAorCQkJCQkJICJ0eXBlbmFtZSIsIE9ialR5cGVPYmpl Y3QsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFR5cGVSZWxhdGlvbklkLAor CQkJCQkJCQkJCQkJCSB0cmZGb3JtLT50cmZ0eXBlKSwKKwkJCQkJCSAibGFuZ3VhZ2UiLCBPYmpU eXBlU3RyaW5nLAorCQkJCQkJIE5hbWVTdHIobGFuZ0Zvcm0tPmxhbm5hbWUpKTsKKworCS8qIERl cGFyc2UgdGhlIHRyYW5zZm9ybV9lbGVtZW50X2xpc3QgKi8KKwlpZiAoT2lkSXNWYWxpZCh0cmZG b3JtLT50cmZmcm9tc3FsKSkKKwl7CisJCUxpc3QJICAgKnBhcmFtcyA9IE5JTDsKKworCQkvKiBH ZXQgdGhlIHBnX3Byb2MgdHVwbGUgZm9yIHRoZSBGUk9NIEZVTkNUSU9OICovCisJCXByb2NUdXAg PSBTZWFyY2hTeXNDYWNoZTEoUFJPQ09JRCwgdHJmRm9ybS0+dHJmZnJvbXNxbCk7CisJCWlmICgh SGVhcFR1cGxlSXNWYWxpZChwcm9jVHVwKSkKKwkJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAg ZmFpbGVkIGZvciBmdW5jdGlvbiB3aXRoIE9JRCAldSIsCisJCQkJIHRyZkZvcm0tPnRyZmZyb21z cWwpOworCQlwcm9jRm9ybSA9IChGb3JtX3BnX3Byb2MpIEdFVFNUUlVDVChwcm9jVHVwKTsKKwor CQkvKgorCQkgKiBDUkVBVEUgVFJBTlNGT1JNIGRvZXMgbm90IGNoYW5nZSBmdW5jdGlvbiBzaWdu YXR1cmUgc28gd2UgY2FuIHVzZQorCQkgKiBjYXRhbG9nIHRvIGdldCBpbnB1dCB0eXBlIE9pZHMu CisJCSAqLworCQlmb3IgKGkgPSAwOyBpIDwgcHJvY0Zvcm0tPnByb25hcmdzOyBpKyspCisJCXsK KwkJCU9ialRyZWUgICAgKnBhcmFtX29iajsKKworCQkJcGFyYW1fb2JqID0gbmV3X29ianRyZWVf VkEoIiV7dHlwZX1UIiwgMSwKKwkJCQkJCQkJCSAgInR5cGUiLCBPYmpUeXBlT2JqZWN0LAorCQkJ CQkJCQkgbmV3X29ianRyZWVfZm9yX3R5cGUocHJvY0Zvcm0tPnByb2FyZ3R5cGVzLnZhbHVlc1tp XSwgLTEpKTsKKwkJCXBhcmFtcyA9IGxhcHBlbmQocGFyYW1zLCBuZXdfb2JqZWN0X29iamVjdChw YXJhbV9vYmopKTsKKwkJfQorCisJCXNpZ25hdHVyZSA9IG5ld19vYmp0cmVlX1ZBKCIle2lkZW50 aXR5fUQgKCV7YXJndW1lbnRzOiwgfXMpIiwgMiwKKwkJCQkJCQkJICAgImlkZW50aXR5IiwgT2Jq VHlwZU9iamVjdCwKKwkJCQkJCQkJICAgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKHByb2NGb3Jt LT5wcm9uYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkJCQlOYW1lU3RyKHByb2NGb3JtLT5wcm9uYW1l KSksCisJCQkJCQkJCSAgICJhcmd1bWVudHMiLCBPYmpUeXBlQXJyYXksIHBhcmFtcyk7CisKKwkJ YXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiKEZST00gU1FMIFdJVEggRlVOQ1RJT04gJXtzaWdu YXR1cmV9cyIsCisJCQkJCQkJIHNpZ25hdHVyZSk7CisJCVJlbGVhc2VTeXNDYWNoZShwcm9jVHVw KTsKKwl9CisJaWYgKE9pZElzVmFsaWQodHJmRm9ybS0+dHJmdG9zcWwpKQorCXsKKwkJTGlzdAkg ICAqcGFyYW1zID0gTklMOworCisJCS8qIEFwcGVuZCBhICcsJyBpZiB0cmZmcm9tc3FsIGlzIHBy ZXNlbnQsIGVsc2UgYXBwZW5kICcoJyAqLworCQlhcHBlbmRfZm9ybWF0X3N0cmluZyhyZXQsIE9p ZElzVmFsaWQodHJmRm9ybS0+dHJmZnJvbXNxbCkgPyAiLCIgOiAiKCIpOworCisJCS8qIEdldCB0 aGUgcGdfcHJvYyB0dXBsZSBmb3IgdGhlIFRPIEZVTkNUSU9OICovCisJCXByb2NUdXAgPSBTZWFy Y2hTeXNDYWNoZTEoUFJPQ09JRCwgdHJmRm9ybS0+dHJmdG9zcWwpOworCQlpZiAoIUhlYXBUdXBs ZUlzVmFsaWQocHJvY1R1cCkpCisJCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBm b3IgZnVuY3Rpb24gd2l0aCBPSUQgJXUiLAorCQkJCSB0cmZGb3JtLT50cmZ0b3NxbCk7CisJCXBy b2NGb3JtID0gKEZvcm1fcGdfcHJvYykgR0VUU1RSVUNUKHByb2NUdXApOworCisJCS8qCisJCSAq IENSRUFURSBUUkFOU0ZPUk0gZG9lcyBub3QgY2hhbmdlIGZ1bmN0aW9uIHNpZ25hdHVyZSBzbyB3 ZSBjYW4gdXNlCisJCSAqIGNhdGFsb2cgdG8gZ2V0IGlucHV0IHR5cGUgT2lkcy4KKwkJICovCisJ CWZvciAoaSA9IDA7IGkgPCBwcm9jRm9ybS0+cHJvbmFyZ3M7IGkrKykKKwkJeworCQkJT2JqVHJl ZSAgICAqcGFyYW1fb2JqID0gbmV3X29ianRyZWUoIiIpOworCisJCQlwYXJhbV9vYmogPSBuZXdf b2JqdHJlZV9WQSgiJXt0eXBlfVQiLCAxLAorCQkJCQkJCQkJICAidHlwZSIsIE9ialR5cGVPYmpl Y3QsCisJCQkJCQkJCQkgIG5ld19vYmp0cmVlX2Zvcl90eXBlKHByb2NGb3JtLT5wcm9hcmd0eXBl cy52YWx1ZXNbaV0sIC0xKSk7CisJCQlwYXJhbXMgPSBsYXBwZW5kKHBhcmFtcywgbmV3X29iamVj dF9vYmplY3QocGFyYW1fb2JqKSk7CisJCX0KKworCQlzaWduYXR1cmUgPSBuZXdfb2JqdHJlZV9W QSgiJXtpZGVudGl0eX1EICgle2FyZ3VtZW50czosIH1zKSIsIDIsCisJCQkJCQkJCSAgICJpZGVu dGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJCSAgIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFt ZShwcm9jRm9ybS0+cHJvbmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJCQkJTmFtZVN0cihwcm9jRm9y bS0+cHJvbmFtZSkpLAorCQkJCQkJCQkgICAiYXJndW1lbnRzIiwgT2JqVHlwZUFycmF5LCBwYXJh bXMpOworCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIlRPIFNRTCBXSVRIIEZVTkNUSU9O ICV7c2lnbmF0dXJlX3RvZn1zIiwKKwkJCQkJCQkgc2lnbmF0dXJlKTsKKwkJUmVsZWFzZVN5c0Nh Y2hlKHByb2NUdXApOworCX0KKworCWFwcGVuZF9mb3JtYXRfc3RyaW5nKHJldCwgIikiKTsKKwor CVJlbGVhc2VTeXNDYWNoZShsYW5nVHVwKTsKKwlSZWxlYXNlU3lzQ2FjaGUodHJmVHVwKTsKKwly ZXR1cm4gcmV0OworfQorCisvKgorICogRGVwYXJzZSBhIENvbW1lbnRTdG10IHdoZW4gaXQgcGVy dGFpbnMgdG8gYSBjb25zdHJhaW50LgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBDT01NRU5U IE9OIENPTlNUUkFJTlQgJXtpZGVudGl0eX1zIE9OIFtET01BSU5dICV7cGFyZW50b2JqfXMgSVMg JXtjb21tZW50fXMKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9Db21tZW50T25Db25z dHJhaW50U210KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCUNvbW1lbnRTdG10 ICpub2RlID0gKENvbW1lbnRTdG10ICopIHBhcnNldHJlZTsKKwlPYmpUcmVlICAgICpyZXQ7CisJ SGVhcFR1cGxlCWNvbnN0clR1cDsKKwlGb3JtX3BnX2NvbnN0cmFpbnQgY29uc3RyRm9ybTsKKwlP YmplY3RBZGRyZXNzIGFkZHI7CisKKwlBc3NlcnQobm9kZS0+b2JqdHlwZSA9PSBPQkpFQ1RfVEFC Q09OU1RSQUlOVCB8fCBub2RlLT5vYmp0eXBlID09IE9CSkVDVF9ET01DT05TVFJBSU5UKTsKKwor CWNvbnN0clR1cCA9IFNlYXJjaFN5c0NhY2hlMShDT05TVFJPSUQsIG9iamVjdElkKTsKKwlpZiAo IUhlYXBUdXBsZUlzVmFsaWQoY29uc3RyVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1 cCBmYWlsZWQgZm9yIGNvbnN0cmFpbnQgd2l0aCBPSUQgJXUiLCBvYmplY3RJZCk7CisJY29uc3Ry Rm9ybSA9IChGb3JtX3BnX2NvbnN0cmFpbnQpIEdFVFNUUlVDVChjb25zdHJUdXApOworCisJaWYg KE9pZElzVmFsaWQoY29uc3RyRm9ybS0+Y29ucmVsaWQpKQorCQlPYmplY3RBZGRyZXNzU2V0KGFk ZHIsIFJlbGF0aW9uUmVsYXRpb25JZCwgY29uc3RyRm9ybS0+Y29ucmVsaWQpOworCWVsc2UKKwkJ T2JqZWN0QWRkcmVzc1NldChhZGRyLCBUeXBlUmVsYXRpb25JZCwgY29uc3RyRm9ybS0+Y29udHlw aWQpOworCisJcmV0ID0gbmV3X29ianRyZWVfVkEoIkNPTU1FTlQgT04gQ09OU1RSQUlOVCAle2lk ZW50aXR5fXMgT04gJXtkb21haW59cyAle3BhcmVudG9ian1zIiwgMywKKwkJCQkJCSAiaWRlbnRp dHkiLCBPYmpUeXBlU3RyaW5nLCBwc3RyZHVwKE5hbWVTdHIoY29uc3RyRm9ybS0+Y29ubmFtZSkp LAorCQkJCQkJICJkb21haW4iLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJIChub2RlLT5vYmp0eXBl ID09IE9CSkVDVF9ET01DT05TVFJBSU5UKSA/ICJET01BSU4iIDogIiIsCisJCQkJCQkgInBhcmVu dG9iaiIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkgZ2V0T2JqZWN0SWRlbnRpdHkoJmFkZHIsIGZh bHNlKSk7CisKKwkvKiBBZGQgdGhlIGNvbW1lbnQgY2xhdXNlICovCisJYXBwZW5kX2xpdGVyYWxf b3JfbnVsbChyZXQsICJJUyAle2NvbW1lbnR9cyIsIG5vZGUtPmNvbW1lbnQpOworCisJUmVsZWFz ZVN5c0NhY2hlKGNvbnN0clR1cCk7CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIERlcGFyc2Ug YW4gQ29tbWVudFN0bXQgKENPTU1FTlQgT04gLi4uKS4KKyAqCisgKiBHaXZlbiB0aGUgb2JqZWN0 IGFkZHJlc3MgYW5kIHRoZSBwYXJzZSB0cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0dXJuIGFuCisg KiBPYmpUcmVlIHJlcHJlc2VudGluZyB0aGUgY29tbWVudCBjb21tYW5kLgorICoKKyAqIFZlcmJv c2Ugc3ludGF4CisgKiBDT01NRU5UIE9OICV7b2JqdHlwZX1zICV7aWRlbnRpdHl9cyBJUyAle2Nv bW1lbnR9cworICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NvbW1lbnRTdG10KE9iamVj dEFkZHJlc3MgYWRkcmVzcywgTm9kZSAqcGFyc2V0cmVlKQoreworCUNvbW1lbnRTdG10ICpub2Rl ID0gKENvbW1lbnRTdG10ICopIHBhcnNldHJlZTsKKwlPYmpUcmVlICAgICpyZXQ7CisJY2hhcgkg ICAqaWRlbnRpdHk7CisKKwkvKgorCSAqIENvbnN0cmFpbnRzIGFyZSBzdWZmaWNpZW50bHkgZGlm ZmVyZW50IHRoYXQgaXQgaXMgZWFzaWVyIHRvIGhhbmRsZSB0aGVtCisJICogc2VwYXJhdGVseS4K KwkgKi8KKwlpZiAobm9kZS0+b2JqdHlwZSA9PSBPQkpFQ1RfRE9NQ09OU1RSQUlOVCB8fAorCQlu b2RlLT5vYmp0eXBlID09IE9CSkVDVF9UQUJDT05TVFJBSU5UKQorCXsKKwkJQXNzZXJ0KGFkZHJl c3MuY2xhc3NJZCA9PSBDb25zdHJhaW50UmVsYXRpb25JZCk7CisJCXJldHVybiBkZXBhcnNlX0Nv bW1lbnRPbkNvbnN0cmFpbnRTbXQoYWRkcmVzcy5vYmplY3RJZCwgcGFyc2V0cmVlKTsKKwl9CisK KwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQ09NTUVOVCBPTiAle29ianR5cGV9cyIsIDEsCisJCQkJ CQkgIm9ianR5cGUiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJIChjaGFyICopIHN0cmluZ2lmeV9v Ymp0eXBlKG5vZGUtPm9ianR5cGUsIGZhbHNlKSk7CisKKwkvKgorCSAqIEFkZCB0aGUgb2JqZWN0 IGlkZW50aXR5IGNsYXVzZS4gIEZvciB6ZXJvIGFyZ3VtZW50IGFnZ3JlZ2F0ZXMgd2UgbmVlZAor CSAqIHRvIGFkZCB0aGUgKCopIGJpdDsgaW4gYWxsIG90aGVyIGNhc2VzIHdlIGNhbiBqdXN0IHVz ZQorCSAqIGdldE9iamVjdElkZW50aXR5LgorCSAqCisJICogWFhYIHNob3VsZG4ndCB3ZSBpbnN0 ZWFkIGZpeCB0aGUgb2JqZWN0IGlkZW50aXRpZXMgZm9yIHplcm8tYXJndW1lbnQKKwkgKiBhZ2dy ZWdhdGVzPworCSAqLworCWlmIChub2RlLT5vYmp0eXBlID09IE9CSkVDVF9BR0dSRUdBVEUpCisJ eworCQlIZWFwVHVwbGUJcHJvY1R1cDsKKwkJRm9ybV9wZ19wcm9jIHByb2NGb3JtOworCisJCXBy b2NUdXAgPSBTZWFyY2hTeXNDYWNoZTEoUFJPQ09JRCwgT2JqZWN0SWRHZXREYXR1bShhZGRyZXNz Lm9iamVjdElkKSk7CisJCWlmICghSGVhcFR1cGxlSXNWYWxpZChwcm9jVHVwKSkKKwkJCWVsb2co RVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBwcm9jZWR1cmUgd2l0aCBPSUQgJXUiLAor CQkJCSBhZGRyZXNzLm9iamVjdElkKTsKKwkJcHJvY0Zvcm0gPSAoRm9ybV9wZ19wcm9jKSBHRVRT VFJVQ1QocHJvY1R1cCk7CisJCWlmIChwcm9jRm9ybS0+cHJvbmFyZ3MgPT0gMCkKKwkJCWlkZW50 aXR5ID0gcHNwcmludGYoIiVzKCopIiwKKwkJCQkJCQkJcXVvdGVfcXVhbGlmaWVkX2lkZW50aWZp ZXIoZ2V0X25hbWVzcGFjZV9uYW1lKHByb2NGb3JtLT5wcm9uYW1lc3BhY2UpLAorCQkJCQkJCQkJ CQkJCQkgICBOYW1lU3RyKHByb2NGb3JtLT5wcm9uYW1lKSkpOworCQllbHNlCisJCQlpZGVudGl0 eSA9IGdldE9iamVjdElkZW50aXR5KCZhZGRyZXNzLCBmYWxzZSk7CisJCVJlbGVhc2VTeXNDYWNo ZShwcm9jVHVwKTsKKwl9CisJZWxzZQorCQlpZGVudGl0eSA9IGdldE9iamVjdElkZW50aXR5KCZh ZGRyZXNzLCBmYWxzZSk7CisKKwlhcHBlbmRfc3RyaW5nX29iamVjdChyZXQsICIle2lkZW50aXR5 fXMiLCAiaWRlbnRpdHkiLCBpZGVudGl0eSk7CisKKwkvKiBBZGQgdGhlIGNvbW1lbnQgY2xhdXNl OyBjYW4gYmUgZWl0aGVyIE5VTEwgb3IgYSBxdW90ZWQgbGl0ZXJhbC4gKi8KKwlhcHBlbmRfbGl0 ZXJhbF9vcl9udWxsKHJldCwgIklTICV7Y29tbWVudH1zIiwgbm9kZS0+Y29tbWVudCk7CisKKwly ZXR1cm4gcmV0OworfQorCisvKgorICogRGVwYXJzZSBhIFNlY0xhYmVsU3RtdCAoU0VDVVJJVFkg TEFCRUwpCisgKgorICogR2l2ZW4gdGhlIE9iamVjdEFkZHJlc3Mgb2YgdGhlIHRhcmdldCBvYmpl Y3QgYW5kIHRoZSBwYXJzZSB0cmVlIG9mIHRoZQorICogU0VDVVJJVFkgTEFCRUwgY29tbWFuZCwg cmV0dXJuIGFuIE9ialRyZWUgcmVwcmVzZW50aW5nIHRoZSBTRUNVUklUWSBMQUJFTAorICogY29t bWFuZC4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogU0VDVVJJVFkgTEFCRUwgRk9SICV7cHJv dmlkZXJ9cyBPTiAle29iamVjdF90eXBlX25hbWV9cyAle2lkZW50aXR5fXMgSVMgJXtsYWJlbH1z CisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfU2VjTGFiZWxTdG10KE9iamVjdEFkZHJl c3MgYWRkcmVzcywgTm9kZSAqcGFyc2V0cmVlKQoreworCVNlY0xhYmVsU3RtdCAqbm9kZSA9IChT ZWNMYWJlbFN0bXQgKikgcGFyc2V0cmVlOworCU9ialRyZWUJICAgKnJldDsKKworCUFzc2VydChu b2RlLT5wcm92aWRlcik7CisKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiU0VDVVJJVFkgTEFCRUwg Rk9SICV7cHJvdmlkZXJ9cyBPTiAle29ianR5cGV9cyAle2lkZW50aXR5fXMiLCAzLAorCQkJCQkJ ICJwcm92aWRlciIsIE9ialR5cGVTdHJpbmcsIG5vZGUtPnByb3ZpZGVyLAorCQkJCQkJICJvYmp0 eXBlIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCSBzdHJpbmdpZnlfb2JqdHlwZShub2RlLT5vYmp0 eXBlLCBmYWxzZSksCisJCQkJCQkgImlkZW50aXR5IiwgT2JqVHlwZVN0cmluZywgZ2V0T2JqZWN0 SWRlbnRpdHkoJmFkZHJlc3MsIGZhbHNlKSk7CisKKwkvKiBBZGQgdGhlIGxhYmVsIGNsYXVzZTsg Y2FuIGJlIGVpdGhlciBOVUxMIG9yIGEgcXVvdGVkIGxpdGVyYWwuICovCisJYXBwZW5kX2xpdGVy YWxfb3JfbnVsbChyZXQsICJJUyAle2xhYmVsfXMiLCBub2RlLT5sYWJlbCk7CisKKwlyZXR1cm4g cmV0OworfQorCisvKgorICogRGVwYXJzZSBhIENyZWF0ZUFtU3RtdCAoQ1JFQVRFIEFDQ0VTUyBN RVRIT0QpLgorICoKKyAqIEdpdmVuIGFuIGFjY2VzcyBtZXRob2QgT0lEIGFuZCB0aGUgcGFyc2Ug dHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVybiBhbgorICogT2JqVHJlZSByZXByZXNlbnRpbmcg dGhlIENSRUFURSBBQ0NFU1MgTUVUSE9EIGNvbW1hbmQuCisgKgorICogVmVyYm9zZSBzeW50YXgK KyAqIENSRUFURSBBQ0NFU1MgTUVUSE9EICV7aWRlbnRpdHl9SSBUWVBFICV7YW1fdHlwZX1zIEhB TkRMRVIgJXtoYW5kbGVyfUQKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9DcmVhdGVB bVN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJT2JqVHJlZSAgICAqcmV0 OworCUhlYXBUdXBsZQlhbVR1cDsKKwlGb3JtX3BnX2FtCWFtRm9ybTsKKwljaGFyCSAgICphbXR5 cGU7CisKKwlhbVR1cCA9IFNlYXJjaFN5c0NhY2hlMShBTU9JRCwgT2JqZWN0SWRHZXREYXR1bShv YmplY3RJZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChhbVR1cCkpCisJCWVsb2coRVJST1Is ICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBhY2Nlc3MgbWV0aG9kIHdpdGggT0lEICV1IiwKKwkJ CSBvYmplY3RJZCk7CisJYW1Gb3JtID0gKEZvcm1fcGdfYW0pIEdFVFNUUlVDVChhbVR1cCk7CisK Kwlzd2l0Y2ggKGFtRm9ybS0+YW10eXBlKQorCXsKKwkJY2FzZSAnaSc6CisJCQlhbXR5cGUgPSAi SU5ERVgiOworCQkJYnJlYWs7CisJCWNhc2UgJ3QnOgorCQkJYW10eXBlID0gIlRBQkxFIjsKKwkJ CWJyZWFrOworCQlkZWZhdWx0OgorCQkJZWxvZyhFUlJPUiwgImludmFsaWQgdHlwZSAlYyBmb3Ig YWNjZXNzIG1ldGhvZCIsIGFtRm9ybS0+YW10eXBlKTsKKwl9CisKKwlyZXQgPSBuZXdfb2JqdHJl ZV9WQSgiQ1JFQVRFIEFDQ0VTUyBNRVRIT0QgJXtpZGVudGl0eX1JIFRZUEUgJXthbV90eXBlfXMg SEFORExFUiAle2hhbmRsZXJ9RCIsIDMsCisJCQkJCQkgImlkZW50aXR5IiwgT2JqVHlwZVN0cmlu ZywKKwkJCQkJCSBOYW1lU3RyKGFtRm9ybS0+YW1uYW1lKSwKKwkJCQkJCSAiYW1fdHlwZSIsIE9i alR5cGVTdHJpbmcsIGFtdHlwZSwKKwkJCQkJCSAiaGFuZGxlciIsIE9ialR5cGVPYmplY3QsCisJ CQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJ CQkJCQkJCQkJCQkJIGFtRm9ybS0+YW1oYW5kbGVyKSk7CisKKwlSZWxlYXNlU3lzQ2FjaGUoYW1U dXApOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIEhhbmRsZSBkZXBhcnNpbmcgb2Ygc2lt cGxlIGNvbW1hbmRzLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGNvdmVyIGFsbCBjYXNl cyBoYW5kbGVkIGluIFByb2Nlc3NVdGlsaXR5U2xvdy4KKyAqLworc3RhdGljIE9ialRyZWUgKgor ZGVwYXJzZV9zaW1wbGVfY29tbWFuZChDb2xsZWN0ZWRDb21tYW5kICpjbWQpCit7CisJT2lkCQkJ b2JqZWN0SWQ7CisJTm9kZQkgICAqcGFyc2V0cmVlOworCisJQXNzZXJ0KGNtZC0+dHlwZSA9PSBT Q1RfU2ltcGxlKTsKKworCXBhcnNldHJlZSA9IGNtZC0+cGFyc2V0cmVlOworCW9iamVjdElkID0g Y21kLT5kLnNpbXBsZS5hZGRyZXNzLm9iamVjdElkOworCisJaWYgKGNtZC0+aW5fZXh0ZW5zaW9u ICYmIChub2RlVGFnKHBhcnNldHJlZSkgIT0gVF9DcmVhdGVFeHRlbnNpb25TdG10KSkKKwkJcmV0 dXJuIE5VTEw7CisKKwkvKiBUaGlzIHN3aXRjaCBuZWVkcyB0byBoYW5kbGUgZXZlcnl0aGluZyB0 aGF0IFByb2Nlc3NVdGlsaXR5U2xvdyBkb2VzICovCisJc3dpdGNoIChub2RlVGFnKHBhcnNldHJl ZSkpCisJeworCQljYXNlIFRfQWx0ZXJDb2xsYXRpb25TdG10OgorCQkJcmV0dXJuIGRlcGFyc2Vf QWx0ZXJDb2xsYXRpb24ob2JqZWN0SWQsIHBhcnNldHJlZSk7CisKKwkJY2FzZSBUX0FsdGVyRG9t YWluU3RtdDoKKwkJCXJldHVybiBkZXBhcnNlX0FsdGVyRG9tYWluU3RtdChvYmplY3RJZCwgcGFy c2V0cmVlLAorCQkJCQkJCQkJCSAgIGNtZC0+ZC5zaW1wbGUuc2Vjb25kYXJ5T2JqZWN0KTsKKwor CQljYXNlIFRfQWx0ZXJFbnVtU3RtdDoKKwkJCXJldHVybiBkZXBhcnNlX0FsdGVyRW51bVN0bXQo b2JqZWN0SWQsIHBhcnNldHJlZSk7CisKKwkJY2FzZSBUX0FsdGVyRXh0ZW5zaW9uQ29udGVudHNT dG10OgorCQkJcmV0dXJuIGRlcGFyc2VfQWx0ZXJFeHRlbnNpb25Db250ZW50c1N0bXQob2JqZWN0 SWQsIHBhcnNldHJlZSwKKwkJCQkJCQkJCQkJCQkgIGNtZC0+ZC5zaW1wbGUuc2Vjb25kYXJ5T2Jq ZWN0KTsKKworCQljYXNlIFRfQWx0ZXJFeHRlbnNpb25TdG10OgorCQkJcmV0dXJuIGRlcGFyc2Vf QWx0ZXJFeHRlbnNpb25TdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCisJCWNhc2UgVF9BbHRl ckZkd1N0bXQ6CisJCQlyZXR1cm4gZGVwYXJzZV9BbHRlckZkd1N0bXQob2JqZWN0SWQsIHBhcnNl dHJlZSk7CisKKwkJY2FzZSBUX0FsdGVyRm9yZWlnblNlcnZlclN0bXQ6CisJCQlyZXR1cm4gZGVw YXJzZV9BbHRlckZvcmVpZ25TZXJ2ZXJTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCisJCWNh c2UgVF9BbHRlckZ1bmN0aW9uU3RtdDoKKwkJCXJldHVybiBkZXBhcnNlX0FsdGVyRnVuY3Rpb24o b2JqZWN0SWQsIHBhcnNldHJlZSk7CisKKwkJY2FzZSBUX0FsdGVyT2JqZWN0RGVwZW5kc1N0bXQ6 CisJCQlyZXR1cm4gZGVwYXJzZV9BbHRlckRlcGVuZFN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7 CisKKwkJY2FzZSBUX0FsdGVyT2JqZWN0U2NoZW1hU3RtdDoKKwkJCXJldHVybiBkZXBhcnNlX0Fs dGVyT2JqZWN0U2NoZW1hU3RtdChjbWQtPmQuc2ltcGxlLmFkZHJlc3MsCisJCQkJCQkJCQkJCQkg cGFyc2V0cmVlLAorCQkJCQkJCQkJCQkJIGNtZC0+ZC5zaW1wbGUuc2Vjb25kYXJ5T2JqZWN0KTsK KworCQljYXNlIFRfQWx0ZXJPcGVyYXRvclN0bXQ6CisJCQlyZXR1cm4gZGVwYXJzZV9BbHRlck9w ZXJhdG9yU3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKworCQljYXNlIFRfQWx0ZXJPd25lclN0 bXQ6CisJCQlyZXR1cm4gZGVwYXJzZV9BbHRlck93bmVyU3RtdChjbWQtPmQuc2ltcGxlLmFkZHJl c3MsIHBhcnNldHJlZSk7CisKKwkJY2FzZSBUX0FsdGVyUG9saWN5U3RtdDoKKwkJCXJldHVybiBk ZXBhcnNlX0FsdGVyUG9saWN5U3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKworCQljYXNlIFRf QWx0ZXJTZXFTdG10OgorCQkJcmV0dXJuIGRlcGFyc2VfQWx0ZXJTZXFTdG10KG9iamVjdElkLCBw YXJzZXRyZWUpOworCisJCWNhc2UgVF9BbHRlclN0YXRzU3RtdDoKKwkJCXJldHVybiBkZXBhcnNl X0FsdGVyU3RhdHNTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCisJCWNhc2UgVF9BbHRlclRT RGljdGlvbmFyeVN0bXQ6CisJCQlyZXR1cm4gZGVwYXJzZV9BbHRlclRTRGljdGlvbmFyeVN0bXQo b2JqZWN0SWQsIHBhcnNldHJlZSk7CisKKwkJY2FzZSBUX0FsdGVyVHlwZVN0bXQ6CisJCQlyZXR1 cm4gZGVwYXJzZV9BbHRlclR5cGVTZXRTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCisJCWNh c2UgVF9BbHRlclVzZXJNYXBwaW5nU3RtdDoKKwkJCXJldHVybiBkZXBhcnNlX0FsdGVyVXNlck1h cHBpbmdTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCisJCWNhc2UgVF9Db21tZW50U3RtdDoK KwkJCXJldHVybiBkZXBhcnNlX0NvbW1lbnRTdG10KGNtZC0+ZC5zaW1wbGUuYWRkcmVzcywgcGFy c2V0cmVlKTsKKworCQljYXNlIFRfQ29tcG9zaXRlVHlwZVN0bXQ6CisJCQlyZXR1cm4gZGVwYXJz ZV9Db21wb3NpdGVUeXBlU3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKworCQljYXNlIFRfQ3Jl YXRlQW1TdG10OgorCQkJcmV0dXJuIGRlcGFyc2VfQ3JlYXRlQW1TdG10KG9iamVjdElkLCBwYXJz ZXRyZWUpOworCisJCWNhc2UgVF9DcmVhdGVDYXN0U3RtdDoKKwkJCXJldHVybiBkZXBhcnNlX0Ny ZWF0ZUNhc3RTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCisJCWNhc2UgVF9DcmVhdGVDb252 ZXJzaW9uU3RtdDoKKwkJCXJldHVybiBkZXBhcnNlX0NyZWF0ZUNvbnZlcnNpb24ob2JqZWN0SWQs IHBhcnNldHJlZSk7CisKKwkJY2FzZSBUX0NyZWF0ZURvbWFpblN0bXQ6CisJCQlyZXR1cm4gZGVw YXJzZV9DcmVhdGVEb21haW4ob2JqZWN0SWQsIHBhcnNldHJlZSk7CisKKwkJY2FzZSBUX0NyZWF0 ZUVudW1TdG10OgkvKiBDUkVBVEUgVFlQRSBBUyBFTlVNICovCisJCQlyZXR1cm4gZGVwYXJzZV9D cmVhdGVFbnVtU3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKworCQljYXNlIFRfQ3JlYXRlRXh0 ZW5zaW9uU3RtdDoKKwkJCXJldHVybiBkZXBhcnNlX0NyZWF0ZUV4dGVuc2lvblN0bXQob2JqZWN0 SWQsIHBhcnNldHJlZSk7CisKKwkJY2FzZSBUX0NyZWF0ZUZkd1N0bXQ6CisJCQlyZXR1cm4gZGVw YXJzZV9DcmVhdGVGZHdTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCisJCWNhc2UgVF9DcmVh dGVGb3JlaWduU2VydmVyU3RtdDoKKwkJCXJldHVybiBkZXBhcnNlX0NyZWF0ZUZvcmVpZ25TZXJ2 ZXJTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCisJCWNhc2UgVF9DcmVhdGVGdW5jdGlvblN0 bXQ6CisJCQlyZXR1cm4gZGVwYXJzZV9DcmVhdGVGdW5jdGlvbihvYmplY3RJZCwgcGFyc2V0cmVl KTsKKworCQljYXNlIFRfQ3JlYXRlT3BGYW1pbHlTdG10OgorCQkJcmV0dXJuIGRlcGFyc2VfQ3Jl YXRlT3BGYW1pbHkob2JqZWN0SWQsIHBhcnNldHJlZSk7CisKKwkJY2FzZSBUX0NyZWF0ZVBMYW5n U3RtdDoKKwkJCXJldHVybiBkZXBhcnNlX0NyZWF0ZUxhbmdTdG10KG9iamVjdElkLCBwYXJzZXRy ZWUpOworCisJCWNhc2UgVF9DcmVhdGVQb2xpY3lTdG10OgorCQkJcmV0dXJuIGRlcGFyc2VfQ3Jl YXRlUG9saWN5U3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKworCQljYXNlIFRfQ3JlYXRlUmFu Z2VTdG10OiAvKiBDUkVBVEUgVFlQRSBBUyBSQU5HRSAqLworCQkJcmV0dXJuIGRlcGFyc2VfQ3Jl YXRlUmFuZ2VTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCisJCWNhc2UgVF9DcmVhdGVTY2hl bWFTdG10OgorCQkJcmV0dXJuIGRlcGFyc2VfQ3JlYXRlU2NoZW1hU3RtdChvYmplY3RJZCwgcGFy c2V0cmVlKTsKKworCQljYXNlIFRfQ3JlYXRlU2VxU3RtdDoKKwkJCXJldHVybiBkZXBhcnNlX0Ny ZWF0ZVNlcVN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisKKwkJY2FzZSBUX0NyZWF0ZVN0YXRz U3RtdDoKKwkJCXJldHVybiBkZXBhcnNlX0NyZWF0ZVN0YXRpc3RpY3NTdG10KG9iamVjdElkLCBw YXJzZXRyZWUpOworCisJCWNhc2UgVF9DcmVhdGVTdG10OgorCQkJcmV0dXJuIGRlcGFyc2VfQ3Jl YXRlU3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKworCQljYXNlIFRfQ3JlYXRlRm9yZWlnblRh YmxlU3RtdDoKKwkJCXJldHVybiBkZXBhcnNlX0NyZWF0ZUZvcmVpZ25UYWJsZVN0bXQob2JqZWN0 SWQsIHBhcnNldHJlZSk7CisKKwkJY2FzZSBUX0NyZWF0ZVRhYmxlQXNTdG10OgkvKiBDUkVBVEUg TUFURVJJQUxJWkVEIFZJRVcgKi8KKwkJCXJldHVybiBkZXBhcnNlX0NyZWF0ZVRhYmxlQXNTdG10 X3ZhbmlsbGEob2JqZWN0SWQsIHBhcnNldHJlZSk7CisKKwkJY2FzZSBUX0NyZWF0ZVRyYW5zZm9y bVN0bXQ6CisJCQlyZXR1cm4gZGVwYXJzZV9DcmVhdGVUcmFuc2Zvcm1TdG10KG9iamVjdElkLCBw YXJzZXRyZWUpOworCisJCWNhc2UgVF9DcmVhdGVUcmlnU3RtdDoKKwkJCXJldHVybiBkZXBhcnNl X0NyZWF0ZVRyaWdTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCisJCWNhc2UgVF9DcmVhdGVV c2VyTWFwcGluZ1N0bXQ6CisJCQlyZXR1cm4gZGVwYXJzZV9DcmVhdGVVc2VyTWFwcGluZ1N0bXQo b2JqZWN0SWQsIHBhcnNldHJlZSk7CisKKwkJY2FzZSBUX0RlZmluZVN0bXQ6CisJCQlyZXR1cm4g ZGVwYXJzZV9EZWZpbmVTdG10KG9iamVjdElkLCBwYXJzZXRyZWUsCisJCQkJCQkJCQkgIGNtZC0+ ZC5zaW1wbGUuc2Vjb25kYXJ5T2JqZWN0KTsKKworCQljYXNlIFRfSW5kZXhTdG10OgorCQkJcmV0 dXJuIGRlcGFyc2VfSW5kZXhTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCisJCWNhc2UgVF9S ZWZyZXNoTWF0Vmlld1N0bXQ6CisJCQlyZXR1cm4gZGVwYXJzZV9SZWZyZXNoTWF0Vmlld1N0bXQo b2JqZWN0SWQsIHBhcnNldHJlZSk7CisKKwkJY2FzZSBUX1JlbmFtZVN0bXQ6CisJCQlyZXR1cm4g ZGVwYXJzZV9SZW5hbWVTdG10KGNtZC0+ZC5zaW1wbGUuYWRkcmVzcywgcGFyc2V0cmVlKTsKKwor CQljYXNlIFRfUnVsZVN0bXQ6CisJCQlyZXR1cm4gZGVwYXJzZV9SdWxlU3RtdChvYmplY3RJZCwg cGFyc2V0cmVlKTsKKworCQljYXNlIFRfVmlld1N0bXQ6CQkvKiBDUkVBVEUgVklFVyAqLworCQkJ cmV0dXJuIGRlcGFyc2VfVmlld1N0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisKKwkJY2FzZSBU X1NlY0xhYmVsU3RtdDoKKwkJCXJldHVybiBkZXBhcnNlX1NlY0xhYmVsU3RtdChjbWQtPmQuc2lt cGxlLmFkZHJlc3MsIHBhcnNldHJlZSk7CisKKwkJZGVmYXVsdDoKKwkJCWVsb2coTE9HLCAidW5y ZWNvZ25pemVkIG5vZGUgdHlwZSBpbiBkZXBhcnNlIGNvbW1hbmQ6ICVkIiwKKwkJCQkgKGludCkg bm9kZVRhZyhwYXJzZXRyZWUpKTsKKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KKworLyoKKyAqIFdv cmtob3JzZSB0byBkZXBhcnNlIGEgQ29sbGVjdGVkQ29tbWFuZC4KKyAqLworY2hhciAqCitkZXBh cnNlX3V0aWxpdHlfY29tbWFuZChDb2xsZWN0ZWRDb21tYW5kICpjbWQsIGJvb2wgdmVyYm9zZV9t b2RlKQoreworCU92ZXJyaWRlU2VhcmNoUGF0aCAqb3ZlcnJpZGVQYXRoOworCU1lbW9yeUNvbnRl eHQgb2xkY3h0OworCU1lbW9yeUNvbnRleHQgdG1wY3h0OworCU9ialRyZWUgICAgKnRyZWU7CisJ Y2hhcgkgICAqY29tbWFuZCA9IE5VTEw7CisJU3RyaW5nSW5mb0RhdGEgc3RyOworCisJLyoKKwkg KiBBbGxvY2F0ZSBldmVyeXRoaW5nIGRvbmUgYnkgdGhlIGRlcGFyc2luZyByb3V0aW5lcyBpbnRv IGEgdGVtcCBjb250ZXh0LAorCSAqIHRvIGF2b2lkIGhhdmluZyB0byBzcHJpbmtsZSB0aGVtIHdp dGggbWVtb3J5IGhhbmRsaW5nIGNvZGUsIGJ1dAorCSAqIGFsbG9jYXRlIHRoZSBvdXRwdXQgU3Ry aW5nSW5mbyBiZWZvcmUgc3dpdGNoaW5nLgorCSAqLworCWluaXRTdHJpbmdJbmZvKCZzdHIpOwor CXRtcGN4dCA9IEFsbG9jU2V0Q29udGV4dENyZWF0ZShDdXJyZW50TWVtb3J5Q29udGV4dCwKKwkJ CQkJCQkJICAgImRlcGFyc2UgY3R4IiwKKwkJCQkJCQkJICAgQUxMT0NTRVRfREVGQVVMVF9NSU5T SVpFLAorCQkJCQkJCQkgICBBTExPQ1NFVF9ERUZBVUxUX0lOSVRTSVpFLAorCQkJCQkJCQkgICBB TExPQ1NFVF9ERUZBVUxUX01BWFNJWkUpOworCW9sZGN4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hU byh0bXBjeHQpOworCisJLyoKKwkgKiBNYW55IHJvdXRpbmVzIHVuZGVybHlpbmcgdGhpcyBvbmUg d2lsbCBpbnZva2UgcnVsZXV0aWxzLmMgZnVuY3Rpb25hbGl0eQorCSAqIHRvIG9idGFpbiBkZXBh cnNlZCB2ZXJzaW9ucyBvZiBleHByZXNzaW9ucy4gIEluIHN1Y2ggcmVzdWx0cywgd2Ugd2FudAor CSAqIGFsbCBvYmplY3QgbmFtZXMgdG8gYmUgcXVhbGlmaWVkLCBzbyB0aGF0IHJlc3VsdHMgYXJl ICJwb3J0YWJsZSIgdG8KKwkgKiBlbnZpcm9ubWVudHMgd2l0aCBkaWZmZXJlbnQgc2VhcmNoX3Bh dGggc2V0dGluZ3MuICBSYXRoZXIgdGhhbiBpbmplY3QKKwkgKiB3aGF0IHdvdWxkIGJlIHJlcGV0 aXRpdmUgY2FsbHMgdG8gb3ZlcnJpZGUgc2VhcmNoIHBhdGggYWxsIG92ZXIgdGhlCisJICogcGxh Y2UsIHdlIGRvIGl0IGNlbnRyYWxseSBoZXJlLgorCSAqLworCW92ZXJyaWRlUGF0aCA9IEdldE92 ZXJyaWRlU2VhcmNoUGF0aChDdXJyZW50TWVtb3J5Q29udGV4dCk7CisJb3ZlcnJpZGVQYXRoLT5z Y2hlbWFzID0gTklMOworCW92ZXJyaWRlUGF0aC0+YWRkQ2F0YWxvZyA9IGZhbHNlOworCW92ZXJy aWRlUGF0aC0+YWRkVGVtcCA9IHRydWU7CisJUHVzaE92ZXJyaWRlU2VhcmNoUGF0aChvdmVycmlk ZVBhdGgpOworCisJdmVyYm9zZSA9IHZlcmJvc2VfbW9kZTsKKworCXN3aXRjaCAoY21kLT50eXBl KQorCXsKKwkJY2FzZSBTQ1RfU2ltcGxlOgorCQkJdHJlZSA9IGRlcGFyc2Vfc2ltcGxlX2NvbW1h bmQoY21kKTsKKwkJCWJyZWFrOworCQljYXNlIFNDVF9BbHRlclRhYmxlOgorCQkJdHJlZSA9IGRl cGFyc2VfQWx0ZXJSZWxhdGlvbihjbWQpOworCQkJYnJlYWs7CisJCWNhc2UgU0NUX0dyYW50Ogor CQkJdHJlZSA9IGRlcGFyc2VfR3JhbnRTdG10KGNtZCk7CisJCQlicmVhazsKKwkJY2FzZSBTQ1Rf Q3JlYXRlVGFibGVBczoKKwkJCXRyZWUgPSBkZXBhcnNlX0NyZWF0ZVRhYmxlQXNTdG10KGNtZCk7 CisJCQlicmVhazsKKwkJY2FzZSBTQ1RfQWx0ZXJPcEZhbWlseToKKwkJCXRyZWUgPSBkZXBhcnNl X0FsdGVyT3BGYW1pbHkoY21kKTsKKwkJCWJyZWFrOworCQljYXNlIFNDVF9DcmVhdGVPcENsYXNz OgorCQkJdHJlZSA9IGRlcGFyc2VfQ3JlYXRlT3BDbGFzc1N0bXQoY21kKTsKKwkJCWJyZWFrOwor CQljYXNlIFNDVF9BbHRlckRlZmF1bHRQcml2aWxlZ2VzOgorCQkJdHJlZSA9IGRlcGFyc2VfQWx0 ZXJEZWZhdWx0UHJpdmlsZWdlc1N0bXQoY21kKTsKKwkJCWJyZWFrOworCQljYXNlIFNDVF9DcmVh dGVQdWJsaWNhdGlvbjoKKwkJCXRyZWUgPSBkZXBhcnNlX0NyZWF0ZVB1YmxpY2F0aW9uU3RtdChj bWQpOworCQkJYnJlYWs7CisJCWNhc2UgU0NUX0FsdGVyUHVibGljYXRpb246CisJCQl0cmVlID0g ZGVwYXJzZV9BbHRlclB1YmxpY2F0aW9uU3RtdChjbWQpOworCQkJYnJlYWs7CisJCWNhc2UgU0NU X0FsdGVyVFNDb25maWc6CisJCQl0cmVlID0gZGVwYXJzZV9BbHRlclRTQ29uZmlndXJhdGlvblN0 bXQoY21kKTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJZWxvZyhFUlJPUiwgInVuZXhwZWN0 ZWQgZGVwYXJzZSBub2RlIHR5cGUgJWQiLCBjbWQtPnR5cGUpOwpkaWZmIC0tZ2l0IGEvc3JjL2lu Y2x1ZGUvdGNvcC9kZGxfZGVwYXJzZS5oIGIvc3JjL2luY2x1ZGUvdGNvcC9kZGxfZGVwYXJzZS5o CmluZGV4IDljMjU0OWMuLjRlMWM3ODAgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3Rjb3AvZGRs X2RlcGFyc2UuaAorKysgYi9zcmMvaW5jbHVkZS90Y29wL2RkbF9kZXBhcnNlLmgKQEAgLTE0LDYg KzE0LDE2IEBACiAKICNpbmNsdWRlICJ0Y29wL2RlcGFyc2VfdXRpbGl0eS5oIgogCisvKgorICog UmVwcmVzZW50IHRoZSBwdWJsaWNhdGlvbiByZWxhdGlvbiBmb3IgZGVwYXJzaW5nLgorICovCit0 eXBlZGVmIHN0cnVjdCBwdWJsaWNhdGlvbl9yZWwKK3sKKyAgICBPaWQgICAgICAgICByZWxpZDsg ICAgICAgICAgLyogcmVsYXRpb24gaWQgKi8KKyAgICBOb2RlICAgICAgICp3aGVyZUNsYXVzZTsg ICAgLyogcm93IGZpbHRlciAqLworICAgIExpc3QgICAgICAgKmNvbHVtbkxpc3Q7ICAgICAvKiBj b2x1bW4gbGlzdCAqLworfSBwdWJsaWNhdGlvbl9yZWw7CisKIGV4dGVybiBjaGFyICpkZXBhcnNl X3V0aWxpdHlfY29tbWFuZChDb2xsZWN0ZWRDb21tYW5kICpjbWQsIGJvb2wgdmVyYm9zZV9tb2Rl KTsKIGV4dGVybiBjaGFyICpkZXBhcnNlX2RkbF9qc29uX3RvX3N0cmluZyhjaGFyICpqc29uYik7 CiBleHRlcm4gY2hhciAqZGVwYXJzZV9kcm9wX2NvbW1hbmQoY29uc3QgY2hhciAqb2JqaWRlbnRp dHksIGNvbnN0IGNoYXIgKm9iamVjdHR5cGUsCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS90Y29w L2RlcGFyc2VfdXRpbGl0eS5oIGIvc3JjL2luY2x1ZGUvdGNvcC9kZXBhcnNlX3V0aWxpdHkuaApp bmRleCAxZmNhMjI3Li5jMWFiYTVhIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS90Y29wL2RlcGFy c2VfdXRpbGl0eS5oCisrKyBiL3NyYy9pbmNsdWRlL3Rjb3AvZGVwYXJzZV91dGlsaXR5LmgKQEAg LTMwLDcgKzMwLDkgQEAgdHlwZWRlZiBlbnVtIENvbGxlY3RlZENvbW1hbmRUeXBlCiAJU0NUX0Fs dGVyRGVmYXVsdFByaXZpbGVnZXMsCiAJU0NUX0NyZWF0ZU9wQ2xhc3MsCiAJU0NUX0FsdGVyVFND b25maWcsCi0JU0NUX0NyZWF0ZVRhYmxlQXMKKwlTQ1RfQ3JlYXRlVGFibGVBcywKKwlTQ1RfQ3Jl YXRlUHVibGljYXRpb24sCisJU0NUX0FsdGVyUHVibGljYXRpb24KIH0gQ29sbGVjdGVkQ29tbWFu ZFR5cGU7CiAKIC8qCkBAIC05MCw2ICs5MiwyMiBAQCB0eXBlZGVmIHN0cnVjdCBDb2xsZWN0ZWRD b21tYW5kCiAJCQlMaXN0CSAgICpwcm9jZWR1cmVzOwogCQl9CQkJY3JlYXRlb3BjOwogCisgICAg ICAgIC8qIENSRUFURSBQVUJMSUNBVElPTiAqLworICAgICAgICBzdHJ1Y3QKKyAgICAgICAgewor ICAgICAgICAgICAgT2JqZWN0QWRkcmVzcyBhZGRyZXNzOworICAgICAgICAgICAgTGlzdCAgICAg ICAqcmVsczsKKyAgICAgICAgICAgIExpc3QgICAgICAgKnNjaGVtYXM7CisgICAgICAgIH0gICAg ICAgICAgIGNyZWF0ZXB1YjsKKworICAgICAgICAvKiBBTFRFUiBQVUJMSUNBVElPTiAqLworICAg ICAgICBzdHJ1Y3QgYWx0ZXJwdWIKKyAgICAgICAgeworICAgICAgICAgICAgT2JqZWN0QWRkcmVz cyBhZGRyZXNzOworICAgICAgICAgICAgTGlzdCAgICAgICAqcmVsczsKKyAgICAgICAgICAgIExp c3QgICAgICAgKnNjaGVtYXM7CisgICAgICAgIH0gICAgICAgICAgIGFsdGVycHViOworCiAJCS8q IEFMVEVSIFRFWFQgU0VBUkNIIENPTkZJR1VSQVRJT04gQUREL0FMVEVSL0RST1AgTUFQUElORyAq LwogCQlzdHJ1Y3QKIAkJewotLSAKMS44LjMuMQoK --000000000000d6784f05f261a2df Content-Type: application/octet-stream; name="v62-0006-Support-DDL-replication.patch" Content-Disposition: attachment; filename="v62-0006-Support-DDL-replication.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lcyuikhd5 RnJvbSBhMDNiMmJmOTU1NjgzYWQ0ZTMxZTkzNDRiMGMwZGNkMzdlMTY1YWJlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBamluIENoZXJpYW4gPGFqaW5jQGZhc3QuYXUuZnVqaXRzdS5j b20+CkRhdGU6IE1vbiwgMTYgSmFuIDIwMjMgMDg6MTc6NDUgLTA1MDAKU3ViamVjdDogW1BBVENI IHY2MiA2LzddIFN1cHBvcnQgRERMIHJlcGxpY2F0aW9uLgoKVG8gc3VwcG9ydCBEREwgcmVwbGlj YXRpb24sIHdlIHVzZSBldmVudCB0cmlnZ2VyIGFuZCBEREwgZGVwYXJzaW5nCmZhY2lsaXRpZXMu IER1cmluZyBDUkVBVEUgUFVCTElDQVRJT04gd2UgcmVnaXN0ZXIgYSBjb21tYW5kIGVuZCB0cmln Z2VyIHRoYXQKZGVwYXJzZXMgdGhlIERETCAoaWYgdGhlIERETCBpcyBhbm5vdGF0ZWQgYXMgZGRs cmVwbG9rIGZvciBEREwgcmVwbGljYXRpb24gaW4KY21kdGFnbGlzdC5oKSBhcyBhIEpTT04gYmxv YiwgYW5kIFdBTCBsb2dzIGl0LiBUaGUgZXZlbnQgdHJpZ2dlciBpcyBhdXRvbWF0aWNhbGx5CnJl bW92ZWQgYXQgdGhlIHRpbWUgb2YgRFJPUCBQVUJMSUNBVElPTi4gVGhlIFdBTFNlbmRlciBkZWNv ZGVzIHRoZSBXQUwgYW5kIHNlbmRzCml0IGRvd25zdHJlYW0gc2ltaWxhciB0byBvdGhlciBETUwg Y29tbWFuZHMuIFRoZSBzdWJzY3JpYmVyIHRoZW4gY29udmVydHMgSlNPTgpiYWNrIHRvIHRoZSBE REwgY29tbWFuZCBzdHJpbmcgYW5kIGV4ZWN1dGVzIGl0LiBJbiB0aGUgc3Vic2NyaWJlciwgd2Ug YWxzbyBhZGQKdGhlIG5ld2x5IGFkZGVkIHJlbCB0byBwZ19zdWJzY3JpcHRpb25fcmVsIHNvIHRo YXQgdGhlIERNTCBjaGFuZ2VzIG9uIHRoZSBuZXcKdGFibGUgY2FuIGJlIHJlcGxpY2F0ZWQgd2l0 aG91dCBoYXZpbmcgdG8gbWFudWFsbHkgcnVuCiJBTFRFUiBTVUJTQ1JJUFRJT04gLi4uIFJFRlJF U0ggUFVCTElDQVRJT04iLgoKLSBGb3Igbm9uLXJld3JpdGUgQUxURVIgb2JqZWN0IGNvbW1hbmQg YW5kCi0gICAgIENSRUFURSBvYmplY3QgY29tbWFuZDoKd2UgZGVwYXJzZSB0aGUgY29tbWFuZCBh dCBkZGxfY29tbWFuZF9lbmQgZXZlbnQgdHJpZ2dlciBhbmQgV0FMIGxvZyB0aGUKZGVwYXJzZWQg anNvbiBzdHJpbmcuIFRoZSBXQUxTZW5kZXIgZGVjb2RlcyB0aGUgV0FMIGFuZCBzZW5kcyBpdCB0 bwpzdWJzY3JpYmVyIGlmIHRoZSBjcmVhdGVkL2FsdGVyZWQgdGFibGUgaXMgcHVibGlzaGVkLiBJ dCBzdXBwb3J0cyBtb3N0IG9mCkFMVEVSIFRBQkxFIGNvbW1hbmQgZXhjZXB0IHNvbWUgY29tbWFu ZHMoRERMIHJlbGF0ZWQgdG8gUEFSVElUSU9ORUQgVEFCTEUKLi4uKSB0aGF0IGludHJvZHVjZWQg cmVjZW50bHkgd2hpY2ggaGF2ZW4ndCBiZWVuIHN1cHBvcnRlZCBieSB0aGUgY3VycmVudApkZGxf ZGVwYXJzZXIsIHdlIHdpbGwgc3VwcG9ydCB0aGF0IGxhdGVyLgoKLSBGb3IgRFJPUCBvYmplY3Q6 ClRoZSAnY29tbWFuZCBzdGFydCcgZXZlbnQgaGFuZGxlciBsb2dzIGEgZGRsIG1lc3NhZ2Ugd2l0 aCB0aGUgcmVsaWRzIG9mCnRoZSB0YWJsZXMgdGhhdCBhcmUgZHJvcHBlZCB3aGljaCB0aGUgb3V0 cHV0IHBsdWdpbiAocGdvdXRwdXQpIHN0b3JlcyBpbgppdHMgaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1 cmUgYWZ0ZXIgdmVyaWZ5aW5nIHRoYXQgaXQgaXMgZm9yIGEgdGFibGUgdGhhdCBpcwpwYXJ0IG9m IHRoZSBwdWJsaWNhdGlvbi4gTGF0ZXIgdGhlICdjb21tYW5kIGVuZCcgZXZlbnQgaGFuZGxlciBz ZW5kcyB0aGUKYWN0dWFsIGRyb3AgbWVzc2FnZS4gUGdvdXRwdXQgb24gcmVjZWl2aW5nIHRoZSBj b21tYW5kIGVuZCwgb25seSBzZW5kcyBvdXQKdGhlIGRyb3AgY29tbWFuZCBvbmx5IGlmIGl0IGlz IGZvciBvbmUgb2YgdGhlIHJlbGlkcyBtYXJrZWQgZm9yIGRlbGV0aW5nLgpUaGUgcmVhc29uIHdl IGhhdmUgdG8gZG8gdGhpcyBpcyBiZWNhdXNlLCBvbmNlIHRoZSBsb2dpY2FsIGRlY29kZXIKcmVj ZWl2ZXMgdGhlICdjb21tYW5kIGVuZCcgbWVzc2FnZSwgIHRoZSByZWxpZCBvZiB0aGUgdGFibGUg aXMgbm8gbG9uZ2VyCnZhbGlkIGFzIGl0IGhhcyBiZWVuIGRlbGV0ZWQgYXMgcGFydCBvZiBpbnZh bGlkYXRpb25zIHJlY2VpdmVkIGZvciB0aGUKZHJvcCB0YWJsZSBjb21tYW5kLiBJdCBpcyBubyBs b25nZXIgcG9zc2libGUgdG8gdmVyaWZ5IGlmIHRoZSB0YWJsZSBpcwpwYXJ0IG9mIHRoZSBwdWJs aWNhdGlvbiBsaXN0IG9yIG5vdC4gVG8gbWFrZSB0aGlzIHBvc3NpYmxlLCBJIGhhdmUgYWRkZWQK dHdvIG1vcmUgZWxlbWVudHMgdG8gdGhlIGRkbCB4bG9nIGFuZCBkZGwgbWVzc2FnZSwgKHJlbGlk IGFuZCBjbWR0eXBlKS4KCldlIGNvdWxkIGhhdmUgYWxzbyBoYW5kbGVkIGFsbCB0aGlzIG9uIHRo ZSBzdWJzY3JpYmVyIHNpZGUgYXMgd2VsbCwgYnV0CnRoYXQgd291bGQgbWVhbiBzZW5kaW5nIHNw dXJpb3VzIGRkbCBtZXNzYWdlcyBmb3IgdGFibGVzIHRoYXQgYXJlIG5vdCBwYXJ0Cm9mIHRoZSBw dWJsaWNhdGlvbi4KCi0gRm9yIHRhYmxlX3Jld3JpdGUgQUxURVIgVEFCTEUgY29tbWFuZDoKKEFM VEVSIENPTFVNTiBUWVBFLCBBREQgQ09MVU1OIERFRkFVTFQsIFNFVCBMT0dHRUQsIFNFVCBBQ0NF U1MgTUVUSE9EKQoKd2UgZGVwYXJzZSB0aGUgY29tbWFuZCBhbmQgV0FMIGxvZyB0aGUgZGVwYXJz ZWQganNvbiBzdHJpbmcgYXQKdGFibGVfcmV3cml0ZSBldmVudCB0cmlnZ2VyLiBUaGUgV0FMU2Vu ZGVyIGRlY29kZXMgdGhlIFdBTCBhbmQgc2VuZHMgaXQgdG8Kc3Vic2NyaWJlciBpZiB0aGUgYWx0 ZXJlZCB0YWJsZSBpcyBwdWJsaXNoZWQuIFRoZW4sIHRoZSBXQUxTZW5kZXIgd2lsbApjb252ZXJ0 IHRoZSB1cGNvbWluZyByZXdyaXRlIElOU0VSVHMgdG8gVVBEQVRFcyBhbmQgc2VuZCB0aGVtIHRv CnN1YnNjcmliZXIgc28gdGhhdCB0aGUgZGF0YSBiZXR3ZWVuIHB1Ymxpc2hlciBhbmQgc3Vic2Ny aWJlciBjYW4gYWx3YXlzIGJlCmNvbnNpc3RlbnQuIE5vdGUgdGhhdCB0aGUgdGFibGVzIHRoYXQg cHVibGlzaCByZXdyaXRlIGRkbCBtdXN0IGhhdmUgYQpyZXBsaWNhIGlkZW50aXR5IGNvbmZpZ3Vy ZWQgaW4gb3JkZXIgdG8gYmUgYWJsZSB0byByZXBsaWNhdGUgdGhlIHVwY29taW5nCnJld3JpdGUg VVBEQVRFcy4KCldlIGRvIHRoaXMgd2F5IGJlY2F1c2Ugb2YgdHdvIHJlYXNvbjoKKDEpIFRoZSBk YXRhIGJlZm9yZSB0aGUgcmV3cml0ZSBkZGwgY291bGQgYWxyZWFkeSBiZSBkaWZmZXJlbnQgYW1v bmcKcHVibGlzaGVyIGFuZCBzdWJzY3JpYmVyLiBUbyBtYWtlIHN1cmUgdGhlIGV4dHJhIGRhdGEg aW4gc3Vic2NyaWJlciB3aGljaApkb2Vzbid0IGV4aXN0IGluIHB1Ymxpc2hlciBhbHNvIGdldCBy ZXdyaXR0ZW4sIHdlIG5lZWQgdG8gbGV0IHRoZQpzdWJzY3JpYmVyIGV4ZWN1dGUgdGhlIG9yaWdp bmFsIHJld3JpdGUgZGRsIHRvIHJld3JpdGUgYWxsIHRoZSBkYXRhIGF0CmZpcnN0LgoKKDIpIHRo ZSBkYXRhIGFmdGVyIGV4ZWN1dGluZyByZXdyaXRlIGRkbCBjb3VsZCBiZSBkaWZmZXJlbnQgYW1v bmcKcHVibGlzaGVyIGFuZCBzdWJzY3JpYmVyKGR1ZSB0byBkaWZmZXJlbnQgZnVuY3Rpb25zL29w ZXJhdG9ycyB1c2VkIGR1cmluZwpyZXdyaXRlKSwgc28gd2UgbmVlZCB0byByZXBsaWNhdGUgdGhl IHJld3JpdGUgVVBEQVRFcyB0byBrZWVwIHRoZSBkYXRhCmNvbnNpc3RlbnQuCgpUTyBJTVBST1ZF OgpUaGlzIGFwcHJvYWNoIGNvdWxkIGJlIGltcHJvdmVkIGJ5IGxldHRpbmcgdGhlIHN1YnNjcmli ZXIgdHJ5IHRvIHVwZGF0ZQp0aGUgZXh0cmEgZGF0YSBpdHNlbGYgaW5zdGVhZCBvZiBkb2luZyBm dWxseSByZXdyaXRlIGRkbCBhbmQgdXNlIHRoZQp1cGNvbWluZyByZXdyaXRlIFVQREFURXMgdG8g cmV3cml0ZSB0aGUgcmVzdCBkYXRhLiBUbyBhY2hpZXZlIHRoaXMsIHdlCmNvdWxkIG1vZGlmeSB0 aGUgZGVwYXJzZWQganNvbiBzdHJpbmcgdG8gdGVtcG9yYXJpbHkgcmVtb3ZlIHRoZSByZXdyaXRl CnBhcnQgYW5kIGFkZCBzb21lIGxvZ2ljIGluIHN1YnNjcmliZXIgdG8gdXBkYXRlIHRoZSBleHRy YSBkYXRhLgpCZXNpZGVzLCB3ZSBtYXkgbm90IG5lZWQgdG8gc2VuZCByZXdyaXRlIGNoYW5nZXMg Zm9yIGFsbCB0eXBlIG9mIHJld3JpdGUKZGRsLCBmb3IgZXhhbXBsZSwgaXQgc2VlbXMgZmluZSB0 byBza2lwIHNlbmRpbmcgcmV3cml0ZSBjaGFuZ2VzIGZvciBBTFRFUgpUQUJMRSBTRVQgTE9HR0VE IGFzIHRoZSBkYXRhIGluIHRoZSB0YWJsZSBkb2Vzbid0IGFjdHVhbGx5IGJlIGNoYW5nZWQuIFdl CmNvdWxkIHVzZSB0aGUgZGVwYXJzZXIgYW5kIGV2ZW50IHRyaWdnZXIgdG8gZmlsdGVyIHRoZXNl IGRkbHMgYW5kIHNraXAKc2VuZGluZyByZXdyaXRlIGNoYW5nZXMgZm9yIHRoZW0uCi0tLQogc3Jj L2JhY2tlbmQvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5jICAgICAgICAgICAgICAgfCAgIDIgKwog c3JjL2JhY2tlbmQvY29tbWFuZHMvY3JlYXRlYXMuYyAgICAgICAgICAgICAgICAgICAgfCAgMTAg Kwogc3JjL2JhY2tlbmQvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5jICAgICAgICAgICAgICAgfCAz ODYgKysrKysrKysrKysrKysrKy0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL3B1YmxpY2F0aW9uY21k cy5jICAgICAgICAgICAgIHwgMjgwICsrKysrKysrKysrLS0KIHNyYy9iYWNrZW5kL2NvbW1hbmRz L3RhYmxlY21kcy5jICAgICAgICAgICAgICAgICAgIHwgIDEwICstCiBzcmMvYmFja2VuZC9wYXJz ZXIvcGFyc2VfdXRpbGNtZC5jICAgICAgICAgICAgICAgICB8ICAgMSArCiBzcmMvYmFja2VuZC9y ZXBsaWNhdGlvbi9sb2dpY2FsL01ha2VmaWxlICAgICAgICAgICB8ICAgMSArCiBzcmMvYmFja2Vu ZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2RkbHRyaWdnZXIuYyAgICAgICB8IDM1OCArKysrKysrKysr KysrKysrCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2xvZ2ljYWwuYyAgICAgICAg ICB8ICA0OSArKysKIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbWVzb24uYnVpbGQg ICAgICAgIHwgICAxICsKIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcHJvdG8uYyAg ICAgICAgICAgIHwgIDQzICsrCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Jlb3Jk ZXJidWZmZXIuYyAgICB8ICAyMCArLQogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC93 b3JrZXIuYyAgICAgICAgICAgfCAyNDAgKysrKysrKysrKysKIHNyYy9iYWNrZW5kL3JlcGxpY2F0 aW9uL3Bnb3V0cHV0L3Bnb3V0cHV0LmMgICAgICAgIHwgMTkwICsrKysrKysrLQogc3JjL2JhY2tl bmQvdGNvcC9jbWR0YWcuYyAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMjYgKy0KIHNyYy9i YWNrZW5kL3Rjb3AvdXRpbGl0eS5jICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDE1ICstCiBz cmMvYmFja2VuZC91dGlscy9jYWNoZS9ldnRjYWNoZS5jICAgICAgICAgICAgICAgICB8ICAgMiAr CiBzcmMvYmFja2VuZC91dGlscy9jYWNoZS9yZWxjYWNoZS5jICAgICAgICAgICAgICAgICB8ICAg MiArCiBzcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jICAgICAgICAgICAgICAgICAgICAgICAgICB8 ICA0MCArLQogc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuaCAgICAgICAgICAgICAgICAgICAgICAg ICAgfCAgIDIgKwogc3JjL2Jpbi9wZ19kdW1wL3QvMDAyX3BnX2R1bXAucGwgICAgICAgICAgICAg ICAgICAgfCAgMTAgKy0KIHNyYy9iaW4vcHNxbC9kZXNjcmliZS5jICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHwgIDQ0ICstCiBzcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0ICAgICAg ICAgICAgICAgICAgICB8ICAxMiArCiBzcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3B1YmxpY2F0aW9u LmggICAgICAgICAgICAgICB8ICAgOCArCiBzcmMvaW5jbHVkZS9jb21tYW5kcy9ldmVudF90cmln Z2VyLmggICAgICAgICAgICAgICB8ICAxNyArLQogc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vbG9n aWNhbHByb3RvLmggICAgICAgICAgICAgfCAgIDQgKwogc3JjL2luY2x1ZGUvcmVwbGljYXRpb24v b3V0cHV0X3BsdWdpbi5oICAgICAgICAgICAgfCAgMTUgKy0KIHNyYy9pbmNsdWRlL3JlcGxpY2F0 aW9uL3Bnb3V0cHV0LmggICAgICAgICAgICAgICAgIHwgICAxICsKIHNyYy9pbmNsdWRlL3JlcGxp Y2F0aW9uL3Jlb3JkZXJidWZmZXIuaCAgICAgICAgICAgIHwgIDEyICsKIHNyYy9pbmNsdWRlL3Rj b3AvY21kdGFnLmggICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA0ICstCiBzcmMvaW5jbHVk ZS90Y29wL2NtZHRhZ2xpc3QuaCAgICAgICAgICAgICAgICAgICAgICB8IDM4NiArKysrKysrKy0t LS0tLS0tLQogc3JjL2luY2x1ZGUvdXRpbHMvZXZ0Y2FjaGUuaCAgICAgICAgICAgICAgICAgICAg ICAgfCAgIDMgKy0KIC4uLi9leHBlY3RlZC9jcmVhdGVfdGFibGUub3V0ICAgICAgICAgICAgICAg ICAgICAgIHwgICA3ICsKIC4uLi90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3Mvc3FsL2NyZWF0ZV90 YWJsZS5zcWwgIHwgICAxICsKIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcHNxbC5vdXQgICAg ICAgICAgICAgICAgIHwgICA2ICstCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3B1YmxpY2F0 aW9uLm91dCAgICAgICAgICB8IDQyMCArKysrKysrKystLS0tLS0tLS0tCiBzcmMvdGVzdC9zdWJz Y3JpcHRpb24vdC8wMzJfZGRsX3JlcGxpY2F0aW9uLnBsICAgICB8IDQ2NSArKysrKysrKysrKysr KysrKysrKysKIHNyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0ICAgICAgICAgICAgICAg ICAgIHwgICA2ICsKIDM4IGZpbGVzIGNoYW5nZWQsIDI2MTQgaW5zZXJ0aW9ucygrKSwgNDg1IGRl bGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xv Z2ljYWwvZGRsdHJpZ2dlci5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3Qvc3Vic2NyaXB0 aW9uL3QvMDMyX2RkbF9yZXBsaWNhdGlvbi5wbAoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2Nh dGFsb2cvcGdfcHVibGljYXRpb24uYyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvcGdfcHVibGljYXRp b24uYwppbmRleCBhOThmY2FkLi5jNTA1ZjI0IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jYXRh bG9nL3BnX3B1YmxpY2F0aW9uLmMKKysrIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9wZ19wdWJsaWNh dGlvbi5jCkBAIC0xMDA1LDYgKzEwMDUsOCBAQCBHZXRQdWJsaWNhdGlvbihPaWQgcHViaWQpCiAJ cHViLT5wdWJhY3Rpb25zLnB1YnVwZGF0ZSA9IHB1YmZvcm0tPnB1YnVwZGF0ZTsKIAlwdWItPnB1 YmFjdGlvbnMucHViZGVsZXRlID0gcHViZm9ybS0+cHViZGVsZXRlOwogCXB1Yi0+cHViYWN0aW9u cy5wdWJ0cnVuY2F0ZSA9IHB1YmZvcm0tPnB1YnRydW5jYXRlOworCXB1Yi0+cHViYWN0aW9ucy5w dWJkZGxfYWxsID0gcHViZm9ybS0+cHViZGRsX2FsbDsKKwlwdWItPnB1YmFjdGlvbnMucHViZGRs X3RhYmxlID0gcHViZm9ybS0+cHViZGRsX3RhYmxlOwogCXB1Yi0+cHVidmlhcm9vdCA9IHB1YmZv cm0tPnB1YnZpYXJvb3Q7CiAKIAlSZWxlYXNlU3lzQ2FjaGUodHVwKTsKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL2NvbW1hbmRzL2NyZWF0ZWFzLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9jcmVh dGVhcy5jCmluZGV4IGQ2YzZkNTEuLjc3ZGNiOWM5IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9j b21tYW5kcy9jcmVhdGVhcy5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NyZWF0ZWFzLmMK QEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJjYXRhbG9nL25hbWVzcGFjZS5oIgogI2luY2x1 ZGUgImNhdGFsb2cvdG9hc3RpbmcuaCIKICNpbmNsdWRlICJjb21tYW5kcy9jcmVhdGVhcy5oIgor I2luY2x1ZGUgImNvbW1hbmRzL2V2ZW50X3RyaWdnZXIuaCIKICNpbmNsdWRlICJjb21tYW5kcy9t YXR2aWV3LmgiCiAjaW5jbHVkZSAiY29tbWFuZHMvcHJlcGFyZS5oIgogI2luY2x1ZGUgImNvbW1h bmRzL3RhYmxlY21kcy5oIgpAQCAtMTQzLDYgKzE0NCwxNSBAQCBjcmVhdGVfY3Rhc19pbnRlcm5h bChMaXN0ICphdHRyTGlzdCwgSW50b0NsYXVzZSAqaW50bykKIAkJU3RvcmVWaWV3UXVlcnkoaW50 b1JlbGF0aW9uQWRkci5vYmplY3RJZCwgcXVlcnksIGZhbHNlKTsKIAkJQ29tbWFuZENvdW50ZXJJ bmNyZW1lbnQoKTsKIAl9CisJZWxzZQorCXsKKwkJLyoKKwkJICogRmlyZSB0aGUgdHJpZ2dlciBm b3IgdGFibGVfaW5pdF93cml0ZSBhZnRlciBjcmVhdGluZyB0aGUgdGFibGUgc28KKwkJICogdGhh dCB3ZSBjYW4gYWNjZXNzIHRoZSBjYXRhbG9nIGluZm8gYWJvdXQgdGhlIG5ld2x5IGNyZWF0ZWQg dGFibGUKKwkJICogaW4gdGhlIHRyaWdnZXIgZnVuY3Rpb24uCisJCSAqLworCQlFdmVudFRyaWdn ZXJUYWJsZUluaXRXcml0ZSgoTm9kZSAqKSBjcmVhdGUsIGludG9SZWxhdGlvbkFkZHIpOworCX0K IAogCXJldHVybiBpbnRvUmVsYXRpb25BZGRyOwogfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv Y29tbWFuZHMvZXZlbnRfdHJpZ2dlci5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXZlbnRfdHJp Z2dlci5jCmluZGV4IDQ0NzJlMjguLmQ3YTk1ZjUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2Nv bW1hbmRzL2V2ZW50X3RyaWdnZXIuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9ldmVudF90 cmlnZ2VyLmMKQEAgLTM3LDggKzM3LDExIEBACiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCiAjaW5j bHVkZSAicGFyc2VyL3BhcnNlX2Z1bmMuaCIKICNpbmNsdWRlICJwZ3N0YXQuaCIKKyNpbmNsdWRl ICJyZXBsaWNhdGlvbi9kZGxtZXNzYWdlLmgiCisjaW5jbHVkZSAicmVwbGljYXRpb24vbWVzc2Fn ZS5oIgogI2luY2x1ZGUgInRjb3AvZGVwYXJzZV91dGlsaXR5LmgiCiAjaW5jbHVkZSAidGNvcC91 dGlsaXR5LmgiCisjaW5jbHVkZSAidGNvcC9kZGxfZGVwYXJzZS5oIgogI2luY2x1ZGUgInV0aWxz L2FjbC5oIgogI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCiAjaW5jbHVkZSAidXRpbHMvZXZ0 Y2FjaGUuaCIKQEAgLTkyLDcgKzk1LDggQEAgQ3JlYXRlRXZlbnRUcmlnZ2VyKENyZWF0ZUV2ZW50 VHJpZ1N0bXQgKnN0bXQpCiAJaWYgKHN0cmNtcChzdG10LT5ldmVudG5hbWUsICJkZGxfY29tbWFu ZF9zdGFydCIpICE9IDAgJiYKIAkJc3RyY21wKHN0bXQtPmV2ZW50bmFtZSwgImRkbF9jb21tYW5k X2VuZCIpICE9IDAgJiYKIAkJc3RyY21wKHN0bXQtPmV2ZW50bmFtZSwgInNxbF9kcm9wIikgIT0g MCAmJgotCQlzdHJjbXAoc3RtdC0+ZXZlbnRuYW1lLCAidGFibGVfcmV3cml0ZSIpICE9IDApCisJ CXN0cmNtcChzdG10LT5ldmVudG5hbWUsICJ0YWJsZV9yZXdyaXRlIikgIT0gMCAmJgorCQlzdHJj bXAoc3RtdC0+ZXZlbnRuYW1lLCAidGFibGVfaW5pdF93cml0ZSIpICE9IDApCiAJCWVyZXBvcnQo RVJST1IsCiAJCQkJKGVycmNvZGUoRVJSQ09ERV9TWU5UQVhfRVJST1IpLAogCQkJCSBlcnJtc2co InVucmVjb2duaXplZCBldmVudCBuYW1lIFwiJXNcIiIsCkBAIC0xMTgsNyArMTIyLDggQEAgQ3Jl YXRlRXZlbnRUcmlnZ2VyKENyZWF0ZUV2ZW50VHJpZ1N0bXQgKnN0bXQpCiAJLyogVmFsaWRhdGUg dGFnIGxpc3QsIGlmIGFueS4gKi8KIAlpZiAoKHN0cmNtcChzdG10LT5ldmVudG5hbWUsICJkZGxf Y29tbWFuZF9zdGFydCIpID09IDAgfHwKIAkJIHN0cmNtcChzdG10LT5ldmVudG5hbWUsICJkZGxf Y29tbWFuZF9lbmQiKSA9PSAwIHx8Ci0JCSBzdHJjbXAoc3RtdC0+ZXZlbnRuYW1lLCAic3FsX2Ry b3AiKSA9PSAwKQorCQkgc3RyY21wKHN0bXQtPmV2ZW50bmFtZSwgInNxbF9kcm9wIikgPT0gMCB8 fAorCQkgc3RyY21wKHN0bXQtPmV2ZW50bmFtZSwgInRhYmxlX2luaXRfd3JpdGUiKSA9PSAwKQog CQkmJiB0YWdzICE9IE5VTEwpCiAJCXZhbGlkYXRlX2RkbF90YWdzKCJ0YWciLCB0YWdzKTsKIAll bHNlIGlmIChzdHJjbXAoc3RtdC0+ZXZlbnRuYW1lLCAidGFibGVfcmV3cml0ZSIpID09IDAKQEAg LTU0NCw3ICs1NDksOCBAQCBFdmVudFRyaWdnZXJDb21tb25TZXR1cChOb2RlICpwYXJzZXRyZWUs CiAJCWRiZ3RhZyA9IENyZWF0ZUNvbW1hbmRUYWcocGFyc2V0cmVlKTsKIAkJaWYgKGV2ZW50ID09 IEVWVF9ERExDb21tYW5kU3RhcnQgfHwKIAkJCWV2ZW50ID09IEVWVF9ERExDb21tYW5kRW5kIHx8 Ci0JCQlldmVudCA9PSBFVlRfU1FMRHJvcCkKKwkJCWV2ZW50ID09IEVWVF9TUUxEcm9wIHx8CisJ CQlldmVudCA9PSBFVlRfVGFibGVJbml0V3JpdGUpCiAJCXsKIAkJCWlmICghY29tbWFuZF90YWdf ZXZlbnRfdHJpZ2dlcl9vayhkYmd0YWcpKQogCQkJCWVsb2coRVJST1IsICJ1bmV4cGVjdGVkIGNv bW1hbmQgdGFnIFwiJXNcIiIsIEdldENvbW1hbmRUYWdOYW1lKGRiZ3RhZykpOwpAQCAtODI3LDYg KzgzMywxNDEgQEAgRXZlbnRUcmlnZ2VyVGFibGVSZXdyaXRlKE5vZGUgKnBhcnNldHJlZSwgT2lk IHRhYmxlT2lkLCBpbnQgcmVhc29uKQogCUNvbW1hbmRDb3VudGVySW5jcmVtZW50KCk7CiB9CiAK KworLyoKKyAqIEV2ZW50VHJpZ2dlclRhYmxlSW5pdFdyaXRlU3RhcnQKKyAqICAgICBQcmVwYXJl IHRvIHJlY2VpdmUgZGF0YSBvbiBhbiBDUkVBVEUgVEFCTEUgQVMvU0VMRVQgSU5UTyBjb21tYW5k IGFib3V0CisgKiAgICAgdG8gYmUgZXhlY3V0ZWQuCisgKi8KK3ZvaWQKK0V2ZW50VHJpZ2dlclRh YmxlSW5pdFdyaXRlU3RhcnQoTm9kZSAqcGFyc2V0cmVlKQoreworCU1lbW9yeUNvbnRleHQgb2xk Y3h0OworCUNvbGxlY3RlZENvbW1hbmQgKmNvbW1hbmQ7CisJQ3JlYXRlVGFibGVBc1N0bXQgKnN0 bXQgPSAoQ3JlYXRlVGFibGVBc1N0bXQgKilwYXJzZXRyZWU7CisKKwkvKiBpZ25vcmUgaWYgZXZl bnQgdHJpZ2dlciBjb250ZXh0IG5vdCBzZXQsIG9yIGNvbGxlY3Rpb24gZGlzYWJsZWQgKi8KKwlp ZiAoIWN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZSB8fAorCQljdXJyZW50RXZlbnRUcmlnZ2VyU3Rh dGUtPmNvbW1hbmRDb2xsZWN0aW9uSW5oaWJpdGVkKQorCQlyZXR1cm47CisKKwlvbGRjeHQgPSBN ZW1vcnlDb250ZXh0U3dpdGNoVG8oY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlLT5jeHQpOworCisJ Y29tbWFuZCA9IHBhbGxvYyhzaXplb2YoQ29sbGVjdGVkQ29tbWFuZCkpOworCisJY29tbWFuZC0+ dHlwZSA9IChzdG10LT5vYmp0eXBlID09IE9CSkVDVF9UQUJMRSkgPyBTQ1RfQ3JlYXRlVGFibGVB cyA6IFNDVF9TaW1wbGU7CisJY29tbWFuZC0+aW5fZXh0ZW5zaW9uID0gY3JlYXRpbmdfZXh0ZW5z aW9uOworCWNvbW1hbmQtPmQuY3Rhcy5hZGRyZXNzID0gSW52YWxpZE9iamVjdEFkZHJlc3M7CisJ Y29tbWFuZC0+ZC5jdGFzLnJlYWxfY3JlYXRlID0gTlVMTDsKKwljb21tYW5kLT5wYXJzZXRyZWUg PSBjb3B5T2JqZWN0KHBhcnNldHJlZSk7CisKKwljb21tYW5kLT5wYXJlbnQgPSBjdXJyZW50RXZl bnRUcmlnZ2VyU3RhdGUtPmN1cnJlbnRDb21tYW5kOworCWN1cnJlbnRFdmVudFRyaWdnZXJTdGF0 ZS0+Y3VycmVudENvbW1hbmQgPSBjb21tYW5kOworCisJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9s ZGN4dCk7Cit9CisKKy8qCisgKiBFdmVudFRyaWdnZXJUYWJsZUluaXRXcml0ZUVuZAorICoJCUZp bmlzaCB1cCBzYXZpbmcgYW4gQ1JFQVRFIFRBQkxFIEFTL1NFTEVDVCBJTlRPIGNvbW1hbmQuCisg KgorICogRklYTUUgdGhpcyBBUEkgaXNuJ3QgY29uc2lkZXJpbmcgdGhlIHBvc3NpYmlsaXR5IHRo YXQgYW4geGFjdC9zdWJ4YWN0IGlzCisgKiBhYm9ydGVkIHBhcnR3YXkgdGhyb3VnaC4gIFByb2Jh Ymx5IGl0J3MgYmVzdCB0byBhZGQgYW4KKyAqIEF0RU9TdWJYYWN0X0V2ZW50VHJpZ2dlcnMoKSB0 byBmaXggdGhpcy4KKyAqLwordm9pZAorRXZlbnRUcmlnZ2VyVGFibGVJbml0V3JpdGVFbmQoT2Jq ZWN0QWRkcmVzcyBhZGRyZXNzKQoreworCUNvbGxlY3RlZENvbW1hbmQgKnBhcmVudDsKKwlDcmVh dGVUYWJsZUFzU3RtdCAqc3RtdDsKKworCS8qIGlnbm9yZSBpZiBldmVudCB0cmlnZ2VyIGNvbnRl eHQgbm90IHNldCwgb3IgY29sbGVjdGlvbiBkaXNhYmxlZCAqLworCWlmICghY3VycmVudEV2ZW50 VHJpZ2dlclN0YXRlIHx8CisJCWN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y29tbWFuZENvbGxl Y3Rpb25JbmhpYml0ZWQpCisJCXJldHVybjsKKworCXN0bXQgPSAgKENyZWF0ZVRhYmxlQXNTdG10 ICopY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlLT5jdXJyZW50Q29tbWFuZC0+cGFyc2V0cmVlOwor CisJaWYgKHN0bXQtPm9ianR5cGUgPT0gT0JKRUNUX1RBQkxFKQorCXsKKwkJcGFyZW50ID0gY3Vy cmVudEV2ZW50VHJpZ2dlclN0YXRlLT5jdXJyZW50Q29tbWFuZC0+cGFyZW50OworCisJCXBmcmVl KGN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y3VycmVudENvbW1hbmQpOworCisJCWN1cnJlbnRF dmVudFRyaWdnZXJTdGF0ZS0+Y3VycmVudENvbW1hbmQgPSBwYXJlbnQ7CisJfQorCWVsc2UKKwl7 CisJCU1lbW9yeUNvbnRleHQgb2xkY3h0OworCisJCW9sZGN4dCA9IE1lbW9yeUNvbnRleHRTd2l0 Y2hUbyhjdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmN4dCk7CisKKwkJY3VycmVudEV2ZW50VHJp Z2dlclN0YXRlLT5jdXJyZW50Q29tbWFuZC0+ZC5zaW1wbGUuYWRkcmVzcyA9IGFkZHJlc3M7CisJ CWN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y29tbWFuZExpc3QgPQorCQkJbGFwcGVuZChjdXJy ZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmNvbW1hbmRMaXN0LAorCQkJCQljdXJyZW50RXZlbnRUcmln Z2VyU3RhdGUtPmN1cnJlbnRDb21tYW5kKTsKKworCQlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xk Y3h0KTsKKwl9Cit9CisKKy8qCisgKiBGaXJlIHRhYmxlX2luaXRfcmV3cml0ZSB0cmlnZ2Vycy4K KyAqLwordm9pZAorRXZlbnRUcmlnZ2VyVGFibGVJbml0V3JpdGUoTm9kZSAqcmVhbF9jcmVhdGUs IE9iamVjdEFkZHJlc3MgYWRkcmVzcykKK3sKKwlMaXN0CSAgICpydW5saXN0OworCUV2ZW50VHJp Z2dlckRhdGEgdHJpZ2RhdGE7CisJQ29sbGVjdGVkQ29tbWFuZCAqY29tbWFuZDsKKworCS8qCisJ ICogU2VlIEV2ZW50VHJpZ2dlckRETENvbW1hbmRTdGFydCBmb3IgYSBkaXNjdXNzaW9uIGFib3V0 IHdoeSBldmVudAorCSAqIHRyaWdnZXJzIGFyZSBkaXNhYmxlZCBpbiBzaW5nbGUgdXNlciBtb2Rl LgorCSAqLworCWlmICghSXNVbmRlclBvc3RtYXN0ZXIpCisJCXJldHVybjsKKworCS8qCisJICog QWxzbyBkbyBub3RoaW5nIGlmIG91ciBzdGF0ZSBpc24ndCBzZXQgdXAsIHdoaWNoIGl0IHdvbid0 IGJlIGlmIHRoZXJlCisJICogd2VyZW4ndCBhbnkgcmVsZXZhbnQgZXZlbnQgdHJpZ2dlcnMgYXQg dGhlIHN0YXJ0IG9mIHRoZSBjdXJyZW50IERETAorCSAqIGNvbW1hbmQuICBUaGlzIHRlc3QgbWln aHQgdGhlcmVmb3JlIHNlZW0gb3B0aW9uYWwsIGJ1dCBpdCdzCisJICogKm5lY2Vzc2FyeSosIGJl Y2F1c2UgRXZlbnRUcmlnZ2VyQ29tbW9uU2V0dXAgbWlnaHQgZmluZCB0cmlnZ2VycyB0aGF0CisJ ICogZGlkbid0IGV4aXN0IGF0IHRoZSB0aW1lIHRoZSBjb21tYW5kIHN0YXJ0ZWQuCisJICovCisJ aWYgKCFjdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUpCisJCXJldHVybjsKKworCS8qIERvIG5vdGhp bmcgaWYgbm8gY29tbWFuZCB3YXMgY29sbGVjdGVkLiAqLworCWlmICghY3VycmVudEV2ZW50VHJp Z2dlclN0YXRlLT5jdXJyZW50Q29tbWFuZCkKKwkJcmV0dXJuOworCisJY29tbWFuZCA9IGN1cnJl bnRFdmVudFRyaWdnZXJTdGF0ZS0+Y3VycmVudENvbW1hbmQ7CisKKwlydW5saXN0ID0gRXZlbnRU cmlnZ2VyQ29tbW9uU2V0dXAoY29tbWFuZC0+cGFyc2V0cmVlLAorCQkJCQkJCQkJICBFVlRfVGFi bGVJbml0V3JpdGUsCisJCQkJCQkJCQkgICJ0YWJsZV9pbml0X3dyaXRlIiwKKwkJCQkJCQkJCSAg JnRyaWdkYXRhKTsKKwlpZiAocnVubGlzdCA9PSBOSUwpCisJCXJldHVybjsKKworCS8qIFNldCB0 aGUgcmVhbCBDcmVhdGVUYWJsZSBzdGF0bWVudCBhbmQgb2JqZWN0IGFkZHJlc3MgKi8KKwljb21t YW5kLT5kLmN0YXMucmVhbF9jcmVhdGUgPSByZWFsX2NyZWF0ZTsKKwljb21tYW5kLT5kLmN0YXMu YWRkcmVzcyA9IGFkZHJlc3M7CisKKwkvKiBSdW4gdGhlIHRyaWdnZXJzLiAqLworCUV2ZW50VHJp Z2dlckludm9rZShydW5saXN0LCAmdHJpZ2RhdGEpOworCisJLyogQ2xlYW51cC4gKi8KKwlsaXN0 X2ZyZWUocnVubGlzdCk7CisKKwkvKgorCSAqIE1ha2Ugc3VyZSBhbnl0aGluZyB0aGUgZXZlbnQg dHJpZ2dlcnMgZGlkIHdpbGwgYmUgdmlzaWJsZSB0byB0aGUgbWFpbgorCSAqIGNvbW1hbmQuCisJ ICovCisJQ29tbWFuZENvdW50ZXJJbmNyZW1lbnQoKTsKK30KKwogLyoKICAqIEludm9rZSBlYWNo IGV2ZW50IHRyaWdnZXIgaW4gYSBsaXN0IG9mIGV2ZW50IHRyaWdnZXJzLgogICovCkBAIC0xMTA4 LDcgKzEyNDksOCBAQCB0cmFja0Ryb3BwZWRPYmplY3RzTmVlZGVkKHZvaWQpCiAJICovCiAJcmV0 dXJuIChFdmVudENhY2hlTG9va3VwKEVWVF9TUUxEcm9wKSAhPSBOSUwpIHx8CiAJCShFdmVudENh Y2hlTG9va3VwKEVWVF9UYWJsZVJld3JpdGUpICE9IE5JTCkgfHwKLQkJKEV2ZW50Q2FjaGVMb29r dXAoRVZUX0RETENvbW1hbmRFbmQpICE9IE5JTCk7CisJCShFdmVudENhY2hlTG9va3VwKEVWVF9E RExDb21tYW5kRW5kKSAhPSBOSUwpIHx8CisJCShFdmVudENhY2hlTG9va3VwKEVWVF9UYWJsZUlu aXRXcml0ZSkgIT0gTklMKTsKIH0KIAogLyoKQEAgLTE0OTksNiArMTY0MSw3IEBAIEV2ZW50VHJp Z2dlckFsdGVyVGFibGVTdGFydChOb2RlICpwYXJzZXRyZWUpCiAKIAljb21tYW5kLT5kLmFsdGVy VGFibGUuY2xhc3NJZCA9IFJlbGF0aW9uUmVsYXRpb25JZDsKIAljb21tYW5kLT5kLmFsdGVyVGFi bGUub2JqZWN0SWQgPSBJbnZhbGlkT2lkOworCWNvbW1hbmQtPmQuYWx0ZXJUYWJsZS5yZXdyaXRl ID0gZmFsc2U7CiAJY29tbWFuZC0+ZC5hbHRlclRhYmxlLnN1YmNtZHMgPSBOSUw7CiAJY29tbWFu ZC0+cGFyc2V0cmVlID0gY29weU9iamVjdChwYXJzZXRyZWUpOwogCkBAIC0xNTMyLDcgKzE2NzUs NyBAQCBFdmVudFRyaWdnZXJBbHRlclRhYmxlUmVsaWQoT2lkIG9iamVjdElkKQogICogaW50ZXJu YWxseSwgc28gdGhhdCdzIGFsbCB0aGF0IHRoaXMgY29kZSBuZWVkcyB0byBoYW5kbGUgYXQgdGhl IG1vbWVudC4KICAqLwogdm9pZAotRXZlbnRUcmlnZ2VyQ29sbGVjdEFsdGVyVGFibGVTdWJjbWQo Tm9kZSAqc3ViY21kLCBPYmplY3RBZGRyZXNzIGFkZHJlc3MpCitFdmVudFRyaWdnZXJDb2xsZWN0 QWx0ZXJUYWJsZVN1YmNtZChOb2RlICpzdWJjbWQsIE9iamVjdEFkZHJlc3MgYWRkcmVzcywgYm9v bCByZXdyaXRlKQogewogCU1lbW9yeUNvbnRleHQgb2xkY3h0OwogCUNvbGxlY3RlZEFUU3ViY21k ICpuZXdzdWI7CkBAIC0xNTUyLDYgKzE2OTUsNyBAQCBFdmVudFRyaWdnZXJDb2xsZWN0QWx0ZXJU YWJsZVN1YmNtZChOb2RlICpzdWJjbWQsIE9iamVjdEFkZHJlc3MgYWRkcmVzcykKIAluZXdzdWIt PmFkZHJlc3MgPSBhZGRyZXNzOwogCW5ld3N1Yi0+cGFyc2V0cmVlID0gY29weU9iamVjdChzdWJj bWQpOwogCisJY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlLT5jdXJyZW50Q29tbWFuZC0+ZC5hbHRl clRhYmxlLnJld3JpdGUgfD0gcmV3cml0ZTsKIAljdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmN1 cnJlbnRDb21tYW5kLT5kLmFsdGVyVGFibGUuc3ViY21kcyA9CiAJCWxhcHBlbmQoY3VycmVudEV2 ZW50VHJpZ2dlclN0YXRlLT5jdXJyZW50Q29tbWFuZC0+ZC5hbHRlclRhYmxlLnN1YmNtZHMsIG5l d3N1Yik7CiAKQEAgLTE1NTksNiArMTcwMywxMzMgQEAgRXZlbnRUcmlnZ2VyQ29sbGVjdEFsdGVy VGFibGVTdWJjbWQoTm9kZSAqc3ViY21kLCBPYmplY3RBZGRyZXNzIGFkZHJlc3MpCiB9CiAKIC8q CisgKiBFdmVudFRyaWdnZXJBbHRlclR5cGVTdGFydAorICoJCVNhdmUgZGF0YSBhYm91dCBhIHNp bmdsZSBwYXJ0IG9mIGFuIEFMVEVSIFRZUEUuCisgKgorICogQUxURVIgVEFCTEUgY2FuIGhhdmUg bXVsdGlwbGUgc3ViY29tbWFuZHMgd2hpY2ggbWlnaHQgaW5jbHVkZSBEUk9QIENPTFVNTgorICog Y29tbWFuZCBhbmQgQUxURVIgVFlQRSByZWZlcnJpbmcgdGhlIGRyb3AgY29sdW1uIGluIFVTSU5H IGV4cHJlc3Npb24uCisgKiBBcyB0aGUgZHJvcHBlZCBjb2x1bW4gY2Fubm90IGJlIGFjY2Vzc2Vk IGFmdGVyIHRoZSBleGVjdXRpb24gb2YgRFJPUCBDT0xVTU4sCisgKiBhIHNwZWNpYWwgdHJpZ2dl ciBpcyByZXF1aXJlZCB0byBoYW5kbGUgdGhpcyBjYXNlIGJlZm9yZSB0aGUgZHJvcCBjb2x1bW4g aXMKKyAqIGV4ZWN1dGVkLgorICovCit2b2lkCitFdmVudFRyaWdnZXJBbHRlclR5cGVTdGFydChB bHRlclRhYmxlQ21kICpzdWJjbWQsIFJlbGF0aW9uIHJlbCkKK3sKKwlNZW1vcnlDb250ZXh0IG9s ZGN4dDsKKwlDb2xsZWN0ZWRBVFN1YmNtZCAqbmV3c3ViOworCUNvbHVtbkRlZiAgKmRlZjsKKwlS ZWxhdGlvbglhdHRyZWxhdGlvbjsKKwlIZWFwVHVwbGUJaGVhcFR1cDsKKwlGb3JtX3BnX2F0dHJp YnV0ZSBhdHRUdXA7CisJQXR0ck51bWJlcglhdHRudW07CisJT2JqZWN0QWRkcmVzcyBhZGRyZXNz OworCisJLyogaWdub3JlIGlmIGV2ZW50IHRyaWdnZXIgY29udGV4dCBub3Qgc2V0LCBvciBjb2xs ZWN0aW9uIGRpc2FibGVkICovCisJaWYgKCFjdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUgfHwKKwkJ Y3VycmVudEV2ZW50VHJpZ2dlclN0YXRlLT5jb21tYW5kQ29sbGVjdGlvbkluaGliaXRlZCkKKwkJ cmV0dXJuOworCisJQXNzZXJ0KElzQShzdWJjbWQsIEFsdGVyVGFibGVDbWQpKTsKKwlBc3NlcnQo c3ViY21kLT5zdWJ0eXBlID09IEFUX0FsdGVyQ29sdW1uVHlwZSk7CisJQXNzZXJ0KGN1cnJlbnRF dmVudFRyaWdnZXJTdGF0ZS0+Y3VycmVudENvbW1hbmQgIT0gTlVMTCk7CisJQXNzZXJ0KE9pZElz VmFsaWQoY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlLT5jdXJyZW50Q29tbWFuZC0+ZC5hbHRlclRh YmxlLm9iamVjdElkKSk7CisKKwlkZWYgPSAoQ29sdW1uRGVmICopIHN1YmNtZC0+ZGVmOworCUFz c2VydChJc0EoZGVmLCBDb2x1bW5EZWYpKTsKKworCW9sZGN4dCA9IE1lbW9yeUNvbnRleHRTd2l0 Y2hUbyhjdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmN4dCk7CisKKwluZXdzdWIgPSBwYWxsb2Mo c2l6ZW9mKENvbGxlY3RlZEFUU3ViY21kKSk7CisJbmV3c3ViLT5wYXJzZXRyZWUgPSAoTm9kZSAq KWNvcHlPYmplY3Qoc3ViY21kKTsKKworCWF0dHJlbGF0aW9uID0gdGFibGVfb3BlbihBdHRyaWJ1 dGVSZWxhdGlvbklkLCBSb3dFeGNsdXNpdmVMb2NrKTsKKworCS8qIExvb2sgdXAgdGhlIHRhcmdl dCBjb2x1bW4gKi8KKwloZWFwVHVwID0gU2VhcmNoU3lzQ2FjaGVDb3B5QXR0TmFtZShSZWxhdGlv bkdldFJlbGlkKHJlbCksIHN1YmNtZC0+bmFtZSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGhl YXBUdXApKSAvKiBzaG91bGRuJ3QgaGFwcGVuICovCisJCWVyZXBvcnQoRVJST1IsCisJCQkJZXJy Y29kZShFUlJDT0RFX1VOREVGSU5FRF9DT0xVTU4pLAorCQkJCWVycm1zZygiY29sdW1uIFwiJXNc IiBvZiByZWxhdGlvbiBcIiVzXCIgZG9lcyBub3QgZXhpc3QiLAorCQkJCQkgICBzdWJjbWQtPm5h bWUsIFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHJlbCkpKTsKKwlhdHRUdXAgPSAoRm9ybV9wZ19h dHRyaWJ1dGUpIEdFVFNUUlVDVChoZWFwVHVwKTsKKwlhdHRudW0gPSBhdHRUdXAtPmF0dG51bTsK KworCU9iamVjdEFkZHJlc3NTdWJTZXQoYWRkcmVzcywgUmVsYXRpb25SZWxhdGlvbklkLAorCQkJ CQkJUmVsYXRpb25HZXRSZWxpZChyZWwpLCBhdHRudW0pOworCWhlYXBfZnJlZXR1cGxlKGhlYXBU dXApOworCXRhYmxlX2Nsb3NlKGF0dHJlbGF0aW9uLCBSb3dFeGNsdXNpdmVMb2NrKTsKKwluZXdz dWItPmFkZHJlc3MgPSBhZGRyZXNzOworCisJaWYgKGRlZi0+cmF3X2RlZmF1bHQpCisJeworCQlj aGFyCSAgICpkZWZleHByOworCisJCWRlZmV4cHIgPSBub2RlVG9TdHJpbmcoZGVmLT5jb29rZWRf ZGVmYXVsdCk7CisJCW5ld3N1Yi0+dXNpbmdleHByID0gVGV4dERhdHVtR2V0Q1N0cmluZyhEaXJl Y3RGdW5jdGlvbkNhbGwyKHBnX2dldF9leHByLAorCQkJCQkJCQkJCQkJCQkJCQlDU3RyaW5nR2V0 VGV4dERhdHVtKGRlZmV4cHIpLAorCQkJCQkJCQkJCQkJCQkJCQlSZWxhdGlvbkdldFJlbGlkKHJl bCkpKTsKKwl9CisJZWxzZQorCQluZXdzdWItPnVzaW5nZXhwciA9IE5VTEw7CisKKwljdXJyZW50 RXZlbnRUcmlnZ2VyU3RhdGUtPmN1cnJlbnRDb21tYW5kLT5kLmFsdGVyVGFibGUuc3ViY21kcyA9 CisJCWxhcHBlbmQoY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlLT5jdXJyZW50Q29tbWFuZC0+ZC5h bHRlclRhYmxlLnN1YmNtZHMsIG5ld3N1Yik7CisKKwlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xk Y3h0KTsKK30KKworLyoKKyAqIEV2ZW50VHJpZ2dlckFsdGVyVHlwZUVuZAorICoJCUZpbmlzaCB1 cCBzYXZpbmcgYW4gQUxURVIgVFlQRSBjb21tYW5kLCBhbmQgYWRkIGl0IHRvIGNvbW1hbmQgbGlz dC4KKyAqLwordm9pZAorRXZlbnRUcmlnZ2VyQWx0ZXJUeXBlRW5kKE5vZGUgKnN1YmNtZCwgT2Jq ZWN0QWRkcmVzcyBhZGRyZXNzLCBib29sIHJld3JpdGUpCit7CisJTWVtb3J5Q29udGV4dCBvbGRj eHQ7CisJQ29sbGVjdGVkQVRTdWJjbWQgKm5ld3N1YjsKKwlMaXN0Q2VsbCAgICpjZWxsOworCUNv bGxlY3RlZENvbW1hbmQgKmNtZDsKKwlBbHRlclRhYmxlQ21kICphbHRzdWJjbWQgPSAoQWx0ZXJU YWJsZUNtZCAqKXN1YmNtZDsKKworCS8qIGlnbm9yZSBpZiBldmVudCB0cmlnZ2VyIGNvbnRleHQg bm90IHNldCwgb3IgY29sbGVjdGlvbiBkaXNhYmxlZCAqLworCWlmICghY3VycmVudEV2ZW50VHJp Z2dlclN0YXRlIHx8CisJCWN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y29tbWFuZENvbGxlY3Rp b25JbmhpYml0ZWQpCisJCXJldHVybjsKKworCWNtZCA9IGN1cnJlbnRFdmVudFRyaWdnZXJTdGF0 ZS0+Y3VycmVudENvbW1hbmQ7CisKKwlBc3NlcnQoSXNBKHN1YmNtZCwgQWx0ZXJUYWJsZUNtZCkp OworCUFzc2VydChjbWQgIT0gTlVMTCk7CisJQXNzZXJ0KE9pZElzVmFsaWQoY21kLT5kLmFsdGVy VGFibGUub2JqZWN0SWQpKTsKKworCWZvcmVhY2goY2VsbCwgY21kLT5kLmFsdGVyVGFibGUuc3Vi Y21kcykKKwl7CisJCUNvbGxlY3RlZEFUU3ViY21kICpzdWIgPSAoQ29sbGVjdGVkQVRTdWJjbWQg KikgbGZpcnN0KGNlbGwpOworCQlBbHRlclRhYmxlQ21kICpjb2xsY21kID0gKEFsdGVyVGFibGVD bWQgKikgc3ViLT5wYXJzZXRyZWU7CisKKwkJaWYgKGNvbGxjbWQtPnN1YnR5cGUgPT0gYWx0c3Vi Y21kLT5zdWJ0eXBlICYmCisJCQlhZGRyZXNzLmNsYXNzSWQgPT0gc3ViLT5hZGRyZXNzLmNsYXNz SWQgJiYKKwkJCWFkZHJlc3Mub2JqZWN0SWQgPT0gc3ViLT5hZGRyZXNzLm9iamVjdElkICYmCisJ CQlhZGRyZXNzLm9iamVjdFN1YklkID09IHN1Yi0+YWRkcmVzcy5vYmplY3RTdWJJZCkKKwkJewor CQkJY21kLT5kLmFsdGVyVGFibGUucmV3cml0ZSB8PSByZXdyaXRlOworCQkJcmV0dXJuOworCQl9 CisJfQorCisJb2xkY3h0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKGN1cnJlbnRFdmVudFRyaWdn ZXJTdGF0ZS0+Y3h0KTsKKworCW5ld3N1YiA9IHBhbGxvYyhzaXplb2YoQ29sbGVjdGVkQVRTdWJj bWQpKTsKKwluZXdzdWItPmFkZHJlc3MgPSBhZGRyZXNzOworCW5ld3N1Yi0+cGFyc2V0cmVlID0g Y29weU9iamVjdChzdWJjbWQpOworCisJY21kLT5kLmFsdGVyVGFibGUucmV3cml0ZSB8PSByZXdy aXRlOworCWNtZC0+ZC5hbHRlclRhYmxlLnN1YmNtZHMgPSBsYXBwZW5kKGNtZC0+ZC5hbHRlclRh YmxlLnN1YmNtZHMsIG5ld3N1Yik7CisKKwlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY3h0KTsK K30KKworLyoKICAqIEV2ZW50VHJpZ2dlckFsdGVyVGFibGVFbmQKICAqCQlGaW5pc2ggdXAgc2F2 aW5nIGFuIEFMVEVSIFRBQkxFIGNvbW1hbmQsIGFuZCBhZGQgaXQgdG8gY29tbWFuZCBsaXN0Lgog ICoKQEAgLTE3MTEsNiArMTk4MiwxMDUgQEAgRXZlbnRUcmlnZ2VyQ29sbGVjdENyZWF0ZU9wQ2xh c3MoQ3JlYXRlT3BDbGFzc1N0bXQgKnN0bXQsIE9pZCBvcGNvaWQsCiB9CiAKIC8qCisgKiBFdmVu dFRyaWdnZXJDb2xsZWN0Q3JlYXRlUHVibGljYXRpb24KKyAqCQlTYXZlIGRhdGEgYWJvdXQgYSBD UkVBVEUgUFVCTElDQVRJT04gY29tbWFuZCBiZWluZyBleGVjdXRlZAorICovCit2b2lkCitFdmVu dFRyaWdnZXJDb2xsZWN0Q3JlYXRlUHVibGljYXRpb24oQ3JlYXRlUHVibGljYXRpb25TdG10ICpz dG10LAorCQkJCQkJCQkJIE9pZCBwdWJpZCwgTGlzdCAqcmVsYXRpb25zLAorCQkJCQkJCQkJIExp c3QgKnNjaGVtYXMpCit7CisJTWVtb3J5Q29udGV4dCBvbGRjeHQ7CisJQ29sbGVjdGVkQ29tbWFu ZCAqY29tbWFuZDsKKwlMaXN0Q2VsbCAgICpsYzsKKworCS8qIGlnbm9yZSBpZiBldmVudCB0cmln Z2VyIGNvbnRleHQgbm90IHNldCwgb3IgY29sbGVjdGlvbiBkaXNhYmxlZCAqLworCWlmICghY3Vy cmVudEV2ZW50VHJpZ2dlclN0YXRlIHx8CisJCWN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y29t bWFuZENvbGxlY3Rpb25JbmhpYml0ZWQpCisJCXJldHVybjsKKworCW9sZGN4dCA9IE1lbW9yeUNv bnRleHRTd2l0Y2hUbyhjdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmN4dCk7CisKKwljb21tYW5k ID0gcGFsbG9jMChzaXplb2YoQ29sbGVjdGVkQ29tbWFuZCkpOworCWNvbW1hbmQtPnR5cGUgPSBT Q1RfQ3JlYXRlUHVibGljYXRpb247CisJY29tbWFuZC0+aW5fZXh0ZW5zaW9uID0gY3JlYXRpbmdf ZXh0ZW5zaW9uOworCU9iamVjdEFkZHJlc3NTZXQoY29tbWFuZC0+ZC5jcmVhdGVwdWIuYWRkcmVz cywKKwkJCQkJIFB1YmxpY2F0aW9uUmVsYXRpb25JZCwgcHViaWQpOworCWNvbW1hbmQtPnBhcnNl dHJlZSA9IChOb2RlICopIGNvcHlPYmplY3Qoc3RtdCk7CisKKwlmb3JlYWNoKGxjLCByZWxhdGlv bnMpCisJeworCQlQdWJsaWNhdGlvblRhYmxlICpwdWJfcmVsID0gKFB1YmxpY2F0aW9uVGFibGUg KikgbGZpcnN0KGxjKTsKKworCQlwdWJsaWNhdGlvbl9yZWwgKmFkZHJlbCA9IChwdWJsaWNhdGlv bl9yZWwgKikgcGFsbG9jKHNpemVvZihwdWJsaWNhdGlvbl9yZWwpKTsKKworCQlSZWxhdGlvbgly ZWwgPSB0YWJsZV9vcGVucnYocHViX3JlbC0+cmVsYXRpb24sIEFjY2Vzc1NoYXJlTG9jayk7CisK KwkJYWRkcmVsLT5yZWxpZCA9IFJlbGF0aW9uR2V0UmVsaWQocmVsKTsKKwkJYWRkcmVsLT53aGVy ZUNsYXVzZSA9IGNvcHlPYmplY3QocHViX3JlbC0+d2hlcmVDbGF1c2UpOworCQlhZGRyZWwtPmNv bHVtbkxpc3QgPSBsaXN0X2NvcHlfZGVlcChwdWJfcmVsLT5jb2x1bW5zKTsKKwkJY29tbWFuZC0+ ZC5jcmVhdGVwdWIucmVscyA9IGxhcHBlbmQoY29tbWFuZC0+ZC5jcmVhdGVwdWIucmVscywgYWRk cmVsKTsKKwkJdGFibGVfY2xvc2UocmVsLCBBY2Nlc3NTaGFyZUxvY2spOworCX0KKworCWNvbW1h bmQtPmQuY3JlYXRlcHViLnNjaGVtYXMgPSBsaXN0X2NvcHkoc2NoZW1hcyk7CisKKwljdXJyZW50 RXZlbnRUcmlnZ2VyU3RhdGUtPmNvbW1hbmRMaXN0ID0KKwkJbGFwcGVuZChjdXJyZW50RXZlbnRU cmlnZ2VyU3RhdGUtPmNvbW1hbmRMaXN0LCBjb21tYW5kKTsKKworCU1lbW9yeUNvbnRleHRTd2l0 Y2hUbyhvbGRjeHQpOworfQorCisvKgorICogRXZlbnRUcmlnZ2VyQ29sbGVjdEFsdGVyUHVibGlj YXRpb24KKyAqCQlTYXZlIGRhdGEgYWJvdXQgYSBBTFRFUiBQVUJMSUNBVElPTiBjb21tYW5kIGJl aW5nIGV4ZWN1dGVkCisgKi8KK3ZvaWQKK0V2ZW50VHJpZ2dlckNvbGxlY3RBbHRlclB1YmxpY2F0 aW9uKEFsdGVyUHVibGljYXRpb25TdG10ICpzdG10LCBPaWQgcHViaWQsCisJCQkJCQkJCQlMaXN0 ICpyZWxhdGlvbnMsIExpc3QgKnNjaGVtYXMpCit7CisJTWVtb3J5Q29udGV4dCBvbGRjeHQ7CisJ Q29sbGVjdGVkQ29tbWFuZCAqY29tbWFuZDsKKwlMaXN0Q2VsbCAgICpsYzsKKworCS8qIGlnbm9y ZSBpZiBldmVudCB0cmlnZ2VyIGNvbnRleHQgbm90IHNldCwgb3IgY29sbGVjdGlvbiBkaXNhYmxl ZCAqLworCWlmICghY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlIHx8CisJCWN1cnJlbnRFdmVudFRy aWdnZXJTdGF0ZS0+Y29tbWFuZENvbGxlY3Rpb25JbmhpYml0ZWQpCisJCXJldHVybjsKKworCW9s ZGN4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhjdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmN4 dCk7CisKKwljb21tYW5kID0gcGFsbG9jMChzaXplb2YoQ29sbGVjdGVkQ29tbWFuZCkpOworCWNv bW1hbmQtPnR5cGUgPSBTQ1RfQWx0ZXJQdWJsaWNhdGlvbjsKKwljb21tYW5kLT5pbl9leHRlbnNp b24gPSBjcmVhdGluZ19leHRlbnNpb247CisJT2JqZWN0QWRkcmVzc1NldChjb21tYW5kLT5kLmFs dGVycHViLmFkZHJlc3MsCisJCQkJCSBQdWJsaWNhdGlvblJlbGF0aW9uSWQsIHB1YmlkKTsKKwlj b21tYW5kLT5wYXJzZXRyZWUgPSAoTm9kZSAqKSBjb3B5T2JqZWN0KHN0bXQpOworCisJZm9yZWFj aChsYywgcmVsYXRpb25zKQorCXsKKwkJUHVibGljYXRpb25UYWJsZSAqcHViX3JlbCA9IChQdWJs aWNhdGlvblRhYmxlICopIGxmaXJzdChsYyk7CisKKwkJcHVibGljYXRpb25fcmVsICphZGRyZWwg PSAocHVibGljYXRpb25fcmVsICopIHBhbGxvYyhzaXplb2YocHVibGljYXRpb25fcmVsKSk7CisK KwkJUmVsYXRpb24JcmVsID0gdGFibGVfb3BlbnJ2KHB1Yl9yZWwtPnJlbGF0aW9uLCBBY2Nlc3NT aGFyZUxvY2spOworCisJCWFkZHJlbC0+cmVsaWQgPSBSZWxhdGlvbkdldFJlbGlkKHJlbCk7CisJ CWFkZHJlbC0+d2hlcmVDbGF1c2UgPSBjb3B5T2JqZWN0KHB1Yl9yZWwtPndoZXJlQ2xhdXNlKTsK KwkJYWRkcmVsLT5jb2x1bW5MaXN0ID0gbGlzdF9jb3B5X2RlZXAocHViX3JlbC0+Y29sdW1ucyk7 CisJCWNvbW1hbmQtPmQuYWx0ZXJwdWIucmVscyA9IGxhcHBlbmQoY29tbWFuZC0+ZC5hbHRlcnB1 Yi5yZWxzLCBhZGRyZWwpOworCQl0YWJsZV9jbG9zZShyZWwsIEFjY2Vzc1NoYXJlTG9jayk7CisJ fQorCisJY29tbWFuZC0+ZC5hbHRlcnB1Yi5zY2hlbWFzID0gbGlzdF9jb3B5KHNjaGVtYXMpOwor CisJY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlLT5jb21tYW5kTGlzdCA9CisJCWxhcHBlbmQoY3Vy cmVudEV2ZW50VHJpZ2dlclN0YXRlLT5jb21tYW5kTGlzdCwgY29tbWFuZCk7CisKKwlNZW1vcnlD b250ZXh0U3dpdGNoVG8ob2xkY3h0KTsKK30KKworLyoKICAqIEV2ZW50VHJpZ2dlckNvbGxlY3RB bHRlclRTQ29uZmlnCiAgKgkJU2F2ZSBkYXRhIGFib3V0IGFuIEFMVEVSIFRFWFQgU0VBUkNIIENP TkZJR1VSQVRJT04gY29tbWFuZCBiZWluZwogICoJCWV4ZWN1dGVkCkBAIC0xODI2LDYgKzIxOTYs OCBAQCBwZ19ldmVudF90cmlnZ2VyX2RkbF9jb21tYW5kcyhQR19GVU5DVElPTl9BUkdTKQogCQkJ Y2FzZSBTQ1RfQ3JlYXRlT3BDbGFzczoKIAkJCWNhc2UgU0NUX0FsdGVyVFNDb25maWc6CiAJCQlj YXNlIFNDVF9DcmVhdGVUYWJsZUFzOgorCQkJY2FzZSBTQ1RfQ3JlYXRlUHVibGljYXRpb246CisJ CQljYXNlIFNDVF9BbHRlclB1YmxpY2F0aW9uOgogCQkJCXsKIAkJCQkJY2hhcgkgICAqaWRlbnRp dHk7CiAJCQkJCWNoYXIJICAgKnR5cGU7CkBAIC0xODQ1LDYgKzIyMTcsMTAgQEAgcGdfZXZlbnRf dHJpZ2dlcl9kZGxfY29tbWFuZHMoUEdfRlVOQ1RJT05fQVJHUykKIAkJCQkJCWFkZHIgPSBjbWQt PmQuYXRzY2ZnLmFkZHJlc3M7CiAJCQkJCWVsc2UgaWYgKGNtZC0+dHlwZSA9PSBTQ1RfQ3JlYXRl VGFibGVBcykKIAkJCQkJCWFkZHIgPSBjbWQtPmQuY3Rhcy5hZGRyZXNzOworCQkJCQllbHNlIGlm IChjbWQtPnR5cGUgPT0gU0NUX0NyZWF0ZVB1YmxpY2F0aW9uKQorCQkJCQkJYWRkciA9IGNtZC0+ ZC5jcmVhdGVwdWIuYWRkcmVzczsKKwkJCQkJZWxzZSBpZiAoY21kLT50eXBlID09IFNDVF9BbHRl clB1YmxpY2F0aW9uKQorCQkJCQkJYWRkciA9IGNtZC0+ZC5hbHRlcnB1Yi5hZGRyZXNzOwogCiAJ CQkJCS8qCiAJCQkJCSAqIElmIGFuIG9iamVjdCB3YXMgZHJvcHBlZCBpbiB0aGUgc2FtZSBjb21t YW5kIHdlIG1heSBlbmQKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3B1YmxpY2F0 aW9uY21kcy5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvcHVibGljYXRpb25jbWRzLmMKaW5kZXgg ZjRiYTU3Mi4uNTc3NDM1NCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvcHVibGlj YXRpb25jbWRzLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvcHVibGljYXRpb25jbWRzLmMK QEAgLTM4LDEwICszOCwxMiBAQAogI2luY2x1ZGUgImNvbW1hbmRzL3B1YmxpY2F0aW9uY21kcy5o IgogI2luY2x1ZGUgImZ1bmNhcGkuaCIKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKKyNpbmNsdWRl ICJub2Rlcy9tYWtlZnVuY3MuaCIKICNpbmNsdWRlICJub2Rlcy9ub2RlRnVuY3MuaCIKICNpbmNs dWRlICJwYXJzZXIvcGFyc2VfY2xhdXNlLmgiCiAjaW5jbHVkZSAicGFyc2VyL3BhcnNlX2NvbGxh dGUuaCIKICNpbmNsdWRlICJwYXJzZXIvcGFyc2VfcmVsYXRpb24uaCIKKyNpbmNsdWRlICJwYXJz ZXIvcGFyc2VyLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9sbWdyLmgiCiAjaW5jbHVkZSAidXRpbHMv YWNsLmgiCiAjaW5jbHVkZSAidXRpbHMvYXJyYXkuaCIKQEAgLTgyLDIxICs4NCwyNiBAQCBzdGF0 aWMgdm9pZCBQdWJsaWNhdGlvbkRyb3BTY2hlbWFzKE9pZCBwdWJpZCwgTGlzdCAqc2NoZW1hcywg Ym9vbCBtaXNzaW5nX29rKTsKIHN0YXRpYyB2b2lkCiBwYXJzZV9wdWJsaWNhdGlvbl9vcHRpb25z KFBhcnNlU3RhdGUgKnBzdGF0ZSwKIAkJCQkJCSAgTGlzdCAqb3B0aW9ucywKKwkJCQkJCSAgYm9v bCBmb3JfYWxsX3RhYmxlcywKIAkJCQkJCSAgYm9vbCAqcHVibGlzaF9naXZlbiwKIAkJCQkJCSAg UHVibGljYXRpb25BY3Rpb25zICpwdWJhY3Rpb25zLAogCQkJCQkJICBib29sICpwdWJsaXNoX3Zp YV9wYXJ0aXRpb25fcm9vdF9naXZlbiwKLQkJCQkJCSAgYm9vbCAqcHVibGlzaF92aWFfcGFydGl0 aW9uX3Jvb3QpCisJCQkJCQkgIGJvb2wgKnB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290LAorCQkJ CQkJICBib29sICpkZGxfdHlwZV9naXZlbikKIHsKIAlMaXN0Q2VsbCAgICpsYzsKIAogCSpwdWJs aXNoX2dpdmVuID0gZmFsc2U7CiAJKnB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290X2dpdmVuID0g ZmFsc2U7CisJKmRkbF90eXBlX2dpdmVuID0gZmFsc2U7CiAKIAkvKiBkZWZhdWx0cyAqLwogCXB1 YmFjdGlvbnMtPnB1Ymluc2VydCA9IHRydWU7CiAJcHViYWN0aW9ucy0+cHVidXBkYXRlID0gdHJ1 ZTsKIAlwdWJhY3Rpb25zLT5wdWJkZWxldGUgPSB0cnVlOwogCXB1YmFjdGlvbnMtPnB1YnRydW5j YXRlID0gdHJ1ZTsKKwlwdWJhY3Rpb25zLT5wdWJkZGxfYWxsID0gZmFsc2U7CisJcHViYWN0aW9u cy0+cHViZGRsX3RhYmxlID0gZmFsc2U7CiAJKnB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290ID0g ZmFsc2U7CiAKIAkvKiBQYXJzZSBvcHRpb25zICovCkBAIC0xMjMsNyArMTMwLDcgQEAgcGFyc2Vf cHVibGljYXRpb25fb3B0aW9ucyhQYXJzZVN0YXRlICpwc3RhdGUsCiAJCQlwdWJhY3Rpb25zLT5w dWJ0cnVuY2F0ZSA9IGZhbHNlOwogCiAJCQkqcHVibGlzaF9naXZlbiA9IHRydWU7Ci0JCQlwdWJs aXNoID0gZGVmR2V0U3RyaW5nKGRlZmVsKTsKKwkJCXB1Ymxpc2ggPSBwc3RyZHVwKGRlZkdldFN0 cmluZyhkZWZlbCkpOwogCiAJCQlpZiAoIVNwbGl0SWRlbnRpZmllclN0cmluZyhwdWJsaXNoLCAn LCcsICZwdWJsaXNoX2xpc3QpKQogCQkJCWVyZXBvcnQoRVJST1IsCkBAIC0xNTgsNiArMTY1LDUy IEBAIHBhcnNlX3B1YmxpY2F0aW9uX29wdGlvbnMoUGFyc2VTdGF0ZSAqcHN0YXRlLAogCQkJKnB1 Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290X2dpdmVuID0gdHJ1ZTsKIAkJCSpwdWJsaXNoX3ZpYV9w YXJ0aXRpb25fcm9vdCA9IGRlZkdldEJvb2xlYW4oZGVmZWwpOwogCQl9CisJCWVsc2UgaWYgKHN0 cmNtcChkZWZlbC0+ZGVmbmFtZSwgImRkbCIpID09IDApCisJCXsKKwkJCWNoYXIJICAgKmRkbF9s ZXZlbDsKKwkJCUxpc3QJICAgKmRkbF9saXN0OworCQkJTGlzdENlbGwgICAqbGMzOworCisJCQlp ZiAoKmRkbF90eXBlX2dpdmVuKQorCQkJCWVycm9yQ29uZmxpY3RpbmdEZWZFbGVtKGRlZmVsLCBw c3RhdGUpOworCisJCQlpZiAoIWZvcl9hbGxfdGFibGVzKQorCQkJCWVyZXBvcnQoRVJST1IsCisJ CQkJCQkoZXJyY29kZShFUlJDT0RFX1NZTlRBWF9FUlJPUiksCisJCQkJCQkgZXJybXNnKCJEREwg cmVwbGljYXRpb24gaXMgb25seSBzdXBwb3J0ZWQgaW4gRk9SIEFMTCBUQUJMRVMgcHVibGljYXRp b24iKSkpOworCQkJLyoKKwkJCSAqIElmIGRkbCBvcHRpb24gd2FzIGdpdmVuIG9ubHkgdGhlIGV4 cGxpY2l0bHkgbGlzdGVkIGRkbCB0eXBlcworCQkJICogc2hvdWxkIGJlIHB1Ymxpc2hlZC4KKwkJ CSAqLworCQkJcHViYWN0aW9ucy0+cHViZGRsX2FsbCA9IGZhbHNlOworCQkJcHViYWN0aW9ucy0+ cHViZGRsX3RhYmxlID0gZmFsc2U7CisKKwkJCSpkZGxfdHlwZV9naXZlbiA9IHRydWU7CisJCQlk ZGxfbGV2ZWwgPSBkZWZHZXRTdHJpbmcoZGVmZWwpOworCisJCQlpZiAoIVNwbGl0SWRlbnRpZmll clN0cmluZyhkZGxfbGV2ZWwsICcsJywgJmRkbF9saXN0KSkKKwkJCQllcmVwb3J0KEVSUk9SLAor CQkJCQkJKGVycmNvZGUoRVJSQ09ERV9TWU5UQVhfRVJST1IpLAorCQkJCQkJIGVycm1zZygiaW52 YWxpZCBsaXN0IHN5bnRheCBmb3IgXCJkZGxcIiBvcHRpb24iKSkpOworCisJCQkvKiBQcm9jZXNz IHRoZSBvcHRpb24gbGlzdC4gKi8KKwkJCWZvcmVhY2gobGMzLCBkZGxfbGlzdCkKKwkJCXsKKwkJ CQljaGFyCSAgICpwdWJsaXNoX29wdCA9IChjaGFyICopIGxmaXJzdChsYzMpOworCisJCQkJaWYg KHN0cmNtcChwdWJsaXNoX29wdCwgImFsbCIpID09IDApCisJCQkJeworCQkJCQlwdWJhY3Rpb25z LT5wdWJkZGxfYWxsID0gdHJ1ZTsKKwkJCQkJcHViYWN0aW9ucy0+cHViZGRsX3RhYmxlID0gdHJ1 ZTsKKwkJCQl9CisJCQkJZWxzZSBpZiAoc3RyY21wKHB1Ymxpc2hfb3B0LCAidGFibGUiKSA9PSAw KQorCQkJCQlwdWJhY3Rpb25zLT5wdWJkZGxfdGFibGUgPSB0cnVlOworCQkJCWVsc2UKKwkJCQkJ ZXJlcG9ydChFUlJPUiwKKwkJCQkJCQkoZXJyY29kZShFUlJDT0RFX1NZTlRBWF9FUlJPUiksCisJ CQkJCQkJIGVycm1zZygidW5yZWNvZ25pemVkIFwiZGRsXCIgdmFsdWU6IFwiJXNcIiIsIHB1Ymxp c2hfb3B0KSkpOworCQkJfQorCQl9CiAJCWVsc2UKIAkJCWVyZXBvcnQoRVJST1IsCiAJCQkJCShl cnJjb2RlKEVSUkNPREVfU1lOVEFYX0VSUk9SKSwKQEAgLTYwMCwxMyArNjUzLDU2IEBAIGNoZWNr X3NpbXBsZV9yb3dmaWx0ZXJfZXhwcihOb2RlICpub2RlLCBQYXJzZVN0YXRlICpwc3RhdGUpCiB9 CiAKIC8qCisgKiBIZWxwZXIgZnVuY3Rpb24gdG8gdHJhbmZvcm0gYSB3aGVyZSBjbGF1c2UuCisg KgorICogQWxzbyBjaGVjayB0aGUgcHVibGljYXRpb24gcm93IGZpbHRlciBleHByZXNzaW9uIGFu ZCB0aHJvdyBhbiBlcnJvciBpZgorICogYW55dGhpbmcgbm90IHBlcm1pdHRlZCBvciB1bmV4cGVj dGVkIGlzIGVuY291bnRlcmVkLgorICovCitzdGF0aWMgTm9kZSAqCitHZXRUcmFuc2Zvcm1XaGVy ZUNsYXVzZXMoY29uc3QgY2hhciAqcXVlcnlTdHJpbmcsIFJlbGF0aW9uIHJlbGF0aW9uLAorCQkJ CQkJIE5vZGUgKndoZXJlQ2xhdXNlLCBib29sIGNoZWNrX2V4cHIpCit7CisJTm9kZQkgICAqdHJh bnNmb3JtZWRXaGVyZUNsYXVzZSA9IE5VTEw7CisJUGFyc2VOYW1lc3BhY2VJdGVtICpuc2l0ZW07 CisJUGFyc2VTdGF0ZSAqcHN0YXRlOworCisJLyoKKwkgKiBBIGZyZXNoIHBzdGF0ZSBpcyByZXF1 aXJlZCBzbyB0aGF0IHdlIG9ubHkgaGF2ZSAidGhpcyIgdGFibGUgaW4gaXRzCisJICogcmFuZ2V0 YWJsZQorCSAqLworCXBzdGF0ZSA9IG1ha2VfcGFyc2VzdGF0ZShOVUxMKTsKKwlwc3RhdGUtPnBf c291cmNldGV4dCA9IHF1ZXJ5U3RyaW5nOworCW5zaXRlbSA9IGFkZFJhbmdlVGFibGVFbnRyeUZv clJlbGF0aW9uKHBzdGF0ZSwgcmVsYXRpb24sCisJCQkJCQkJCQkJICAgQWNjZXNzU2hhcmVMb2Nr LCBOVUxMLAorCQkJCQkJCQkJCSAgIGZhbHNlLCBmYWxzZSk7CisJYWRkTlNJdGVtVG9RdWVyeShw c3RhdGUsIG5zaXRlbSwgZmFsc2UsIHRydWUsIHRydWUpOworCisJdHJhbnNmb3JtZWRXaGVyZUNs YXVzZSA9IHRyYW5zZm9ybVdoZXJlQ2xhdXNlKHBzdGF0ZSwKKwkJCQkJCQkJCQkJCSAgY29weU9i amVjdCh3aGVyZUNsYXVzZSksCisJCQkJCQkJCQkJCQkgIEVYUFJfS0lORF9XSEVSRSwKKwkJCQkJ CQkJCQkJCSAgIlBVQkxJQ0FUSU9OIFdIRVJFIik7CisKKwkvKiBGaXggdXAgY29sbGF0aW9uIGlu Zm9ybWF0aW9uICovCisJYXNzaWduX2V4cHJfY29sbGF0aW9ucyhwc3RhdGUsIHRyYW5zZm9ybWVk V2hlcmVDbGF1c2UpOworCisJLyoKKwkgKiBXZSBhbGxvdyBvbmx5IHNpbXBsZSBleHByZXNzaW9u cyBpbiByb3cgZmlsdGVycy4gU2VlCisJICogY2hlY2tfc2ltcGxlX3Jvd2ZpbHRlcl9leHByX3dh bGtlci4KKwkgKi8KKwlpZiAoY2hlY2tfZXhwcikKKwkJY2hlY2tfc2ltcGxlX3Jvd2ZpbHRlcl9l eHByKHRyYW5zZm9ybWVkV2hlcmVDbGF1c2UsIHBzdGF0ZSk7CisKKwlmcmVlX3BhcnNlc3RhdGUo cHN0YXRlKTsKKworCXJldHVybiB0cmFuc2Zvcm1lZFdoZXJlQ2xhdXNlOworfQorCisvKgogICog VHJhbnNmb3JtIHRoZSBwdWJsaWNhdGlvbiBXSEVSRSBleHByZXNzaW9uIGZvciBhbGwgdGhlIHJl bGF0aW9ucyBpbiB0aGUgbGlzdCwKICAqIGVuc3VyaW5nIGl0IGlzIGNvZXJjZWQgdG8gYm9vbGVh biBhbmQgbmVjZXNzYXJ5IGNvbGxhdGlvbiBpbmZvcm1hdGlvbiBpcwogICogYWRkZWQgaWYgcmVx dWlyZWQsIGFuZCBhZGQgYSBuZXcgbnNpdGVtL1JURSBmb3IgdGhlIGFzc29jaWF0ZWQgcmVsYXRp b24gdG8KICAqIHRoZSBQYXJzZVN0YXRlJ3MgbmFtZXNwYWNlIGxpc3QuCiAgKgotICogQWxzbyBj aGVjayB0aGUgcHVibGljYXRpb24gcm93IGZpbHRlciBleHByZXNzaW9uIGFuZCB0aHJvdyBhbiBl cnJvciBpZgotICogYW55dGhpbmcgbm90IHBlcm1pdHRlZCBvciB1bmV4cGVjdGVkIGlzIGVuY291 bnRlcmVkLgogICovCiBzdGF0aWMgdm9pZAogVHJhbnNmb3JtUHViV2hlcmVDbGF1c2VzKExpc3Qg KnRhYmxlcywgY29uc3QgY2hhciAqcXVlcnlTdHJpbmcsCkBAIC02MTYsOSArNzEyLDcgQEAgVHJh bnNmb3JtUHViV2hlcmVDbGF1c2VzKExpc3QgKnRhYmxlcywgY29uc3QgY2hhciAqcXVlcnlTdHJp bmcsCiAKIAlmb3JlYWNoKGxjLCB0YWJsZXMpCiAJewotCQlQYXJzZU5hbWVzcGFjZUl0ZW0gKm5z aXRlbTsKLQkJTm9kZQkgICAqd2hlcmVjbGF1c2UgPSBOVUxMOwotCQlQYXJzZVN0YXRlICpwc3Rh dGU7CisKIAkJUHVibGljYXRpb25SZWxJbmZvICpwcmkgPSAoUHVibGljYXRpb25SZWxJbmZvICop IGxmaXJzdChsYyk7CiAKIAkJaWYgKHByaS0+d2hlcmVDbGF1c2UgPT0gTlVMTCkKQEAgLTYzOCwz OCArNzMyLDM4IEBAIFRyYW5zZm9ybVB1YldoZXJlQ2xhdXNlcyhMaXN0ICp0YWJsZXMsIGNvbnN0 IGNoYXIgKnF1ZXJ5U3RyaW5nLAogCQkJCQkgZXJyZGV0YWlsKCJXSEVSRSBjbGF1c2UgY2Fubm90 IGJlIHVzZWQgZm9yIGEgcGFydGl0aW9uZWQgdGFibGUgd2hlbiAlcyBpcyBmYWxzZS4iLAogCQkJ CQkJCSAgICJwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCIpKSk7CiAKLQkJLyoKLQkJICogQSBm cmVzaCBwc3RhdGUgaXMgcmVxdWlyZWQgc28gdGhhdCB3ZSBvbmx5IGhhdmUgInRoaXMiIHRhYmxl IGluIGl0cwotCQkgKiByYW5nZXRhYmxlCi0JCSAqLwotCQlwc3RhdGUgPSBtYWtlX3BhcnNlc3Rh dGUoTlVMTCk7Ci0JCXBzdGF0ZS0+cF9zb3VyY2V0ZXh0ID0gcXVlcnlTdHJpbmc7Ci0JCW5zaXRl bSA9IGFkZFJhbmdlVGFibGVFbnRyeUZvclJlbGF0aW9uKHBzdGF0ZSwgcHJpLT5yZWxhdGlvbiwK LQkJCQkJCQkJCQkJICAgQWNjZXNzU2hhcmVMb2NrLCBOVUxMLAotCQkJCQkJCQkJCQkgICBmYWxz ZSwgZmFsc2UpOwotCQlhZGROU0l0ZW1Ub1F1ZXJ5KHBzdGF0ZSwgbnNpdGVtLCBmYWxzZSwgdHJ1 ZSwgdHJ1ZSk7CisJCXByaS0+d2hlcmVDbGF1c2UgPSBHZXRUcmFuc2Zvcm1XaGVyZUNsYXVzZXMo cXVlcnlTdHJpbmcsIHByaS0+cmVsYXRpb24sCisJCQkJCQkJCQkJCQkJcHJpLT53aGVyZUNsYXVz ZSwgdHJ1ZSk7CisJfQorfQogCi0JCXdoZXJlY2xhdXNlID0gdHJhbnNmb3JtV2hlcmVDbGF1c2Uo cHN0YXRlLAotCQkJCQkJCQkJCSAgIGNvcHlPYmplY3QocHJpLT53aGVyZUNsYXVzZSksCi0JCQkJ CQkJCQkJICAgRVhQUl9LSU5EX1dIRVJFLAotCQkJCQkJCQkJCSAgICJQVUJMSUNBVElPTiBXSEVS RSIpOworLyoKKyAqIFRyYW5zZm9ybSB0aGUgcHVibGljYXRpb24gV0hFUkUgZXhwcmVzc2lvbiBm b3IgYWxsIHRoZSByZWxhdGlvbnMgaW4gdGhlIGxpc3QsCisgKiBlbnN1cmluZyBpdCBpcyBjb2Vy Y2VkIHRvIGJvb2xlYW4gYW5kIG5lY2Vzc2FyeSBjb2xsYXRpb24gaW5mb3JtYXRpb24gaXMKKyAq IGFkZGVkIGlmIHJlcXVpcmVkLCBhbmQgYWRkIGEgbmV3IG5zaXRlbS9SVEUgZm9yIHRoZSBhc3Nv Y2lhdGVkIHJlbGF0aW9uIHRvCisgKiB0aGUgUGFyc2VTdGF0ZSdzIG5hbWVzcGFjZSBsaXN0Lgor ICovCitzdGF0aWMgdm9pZAorVHJhbnNmb3JtUHViVGFibGVXaGVyZUNsYXVzZXMoTGlzdCAqdGFi bGVzLCBjb25zdCBjaGFyICpxdWVyeVN0cmluZykKK3sKKwlMaXN0Q2VsbCAgICpsYzsKIAotCQkv KiBGaXggdXAgY29sbGF0aW9uIGluZm9ybWF0aW9uICovCi0JCWFzc2lnbl9leHByX2NvbGxhdGlv bnMocHN0YXRlLCB3aGVyZWNsYXVzZSk7CisJZm9yZWFjaChsYywgdGFibGVzKQorCXsKKwkJUHVi bGljYXRpb25UYWJsZSAqcHJpID0gKFB1YmxpY2F0aW9uVGFibGUgKikgbGZpcnN0KGxjKTsKKwkJ UmVsYXRpb24JcmVsOwogCi0JCS8qCi0JCSAqIFdlIGFsbG93IG9ubHkgc2ltcGxlIGV4cHJlc3Np b25zIGluIHJvdyBmaWx0ZXJzLiBTZWUKLQkJICogY2hlY2tfc2ltcGxlX3Jvd2ZpbHRlcl9leHBy X3dhbGtlci4KLQkJICovCi0JCWNoZWNrX3NpbXBsZV9yb3dmaWx0ZXJfZXhwcih3aGVyZWNsYXVz ZSwgcHN0YXRlKTsKKwkJaWYgKHByaS0+d2hlcmVDbGF1c2UgPT0gTlVMTCkKKwkJCWNvbnRpbnVl OwogCi0JCWZyZWVfcGFyc2VzdGF0ZShwc3RhdGUpOworCQlyZWwgPSB0YWJsZV9vcGVucnYocHJp LT5yZWxhdGlvbiwgQWNjZXNzU2hhcmVMb2NrKTsKIAotCQlwcmktPndoZXJlQ2xhdXNlID0gd2hl cmVjbGF1c2U7CisJCXByaS0+d2hlcmVDbGF1c2UgPSBHZXRUcmFuc2Zvcm1XaGVyZUNsYXVzZXMo cXVlcnlTdHJpbmcsIHJlbCwKKwkJCQkJCQkJCQkJCQlwcmktPndoZXJlQ2xhdXNlLCBmYWxzZSk7 CisJCXRhYmxlX2Nsb3NlKHJlbCwgQWNjZXNzU2hhcmVMb2NrKTsKIAl9CiB9CiAKLQogLyoKICAq IEdpdmVuIGEgbGlzdCBvZiB0YWJsZXMgdGhhdCBhcmUgZ29pbmcgdG8gYmUgYWRkZWQgdG8gYSBw dWJsaWNhdGlvbiwKICAqIHZlcmlmeSB0aGF0IHRoZXkgZnVsZmlsbCB0aGUgbmVjZXNzYXJ5IHBy ZWNvbmRpdGlvbnMsIG5hbWVseTogbm8gdGFibGVzCkBAIC03MjksNiArODIzLDUzIEBAIENoZWNr UHViUmVsYXRpb25Db2x1bW5MaXN0KGNoYXIgKnB1Ym5hbWUsIExpc3QgKnRhYmxlcywKIH0KIAog LyoKKyAqIENyZWF0ZSBldmVudCB0cmlnZ2VyIHdoaWNoIGlzIHVzZWQgZm9yIERETCByZXBsaWNh dGlvbi4KKyAqLworc3RhdGljIHZvaWQKK0NyZWF0ZURETFJlcGxpY2FFdmVudFRyaWdnZXIoY2hh ciAqZXZlbnRuYW1lLCBDb21tYW5kVGFnICpjb21tYW5kcywKKwkJCQkJCQkgaW50IG5jb21tYW5k cywgT2JqZWN0QWRkcmVzcyBwdWJhZGRyZXNzLAorCQkJCQkJCSBPaWQgcHVib2lkKQoreworCWlu dAkJCWk7CisJTGlzdAkgICAqdGFncyA9IE5JTDsKKwlPaWQJCQl0cmlnZ2VyX2lkOworCU9iamVj dEFkZHJlc3MgcmVmZXJlbmNlZDsKKwlDcmVhdGVFdmVudFRyaWdTdG10ICpkZGxfdHJpZ2dlcjsK KwljaGFyCQl0cmlnZ2VyX25hbWVbTkFNRURBVEFMRU5dOworCWNoYXIJCXRyaWdnZXJfZnVuY19u YW1lW05BTUVEQVRBTEVOXTsKKwlzdGF0aWMgY29uc3QgY2hhciAqdHJpZ2dlcl9uYW1lX3ByZWZp eCA9ICJwZ19kZXBhcnNlX3RyaWdfJXNfJXUiOworCXN0YXRpYyBjb25zdCBjaGFyICp0cmlnZ2Vy X2Z1bmNfcHJlZml4ID0gInB1YmxpY2F0aW9uX2RlcGFyc2VfJXMiOworCisJZGRsX3RyaWdnZXIg PSBtYWtlTm9kZShDcmVhdGVFdmVudFRyaWdTdG10KTsKKworCXNucHJpbnRmKHRyaWdnZXJfbmFt ZSwgc2l6ZW9mKHRyaWdnZXJfbmFtZSksIHRyaWdnZXJfbmFtZV9wcmVmaXgsCisJCQkgZXZlbnRu YW1lLCBwdWJvaWQpOworCXNucHJpbnRmKHRyaWdnZXJfZnVuY19uYW1lLCBzaXplb2YodHJpZ2dl cl9mdW5jX25hbWUpLCB0cmlnZ2VyX2Z1bmNfcHJlZml4LAorCQkJIGV2ZW50bmFtZSk7CisKKwlk ZGxfdHJpZ2dlci0+dHJpZ25hbWUgPSBwc3RyZHVwKHRyaWdnZXJfbmFtZSk7CisJZGRsX3RyaWdn ZXItPmV2ZW50bmFtZSA9IGV2ZW50bmFtZTsKKwlkZGxfdHJpZ2dlci0+ZnVuY25hbWUgPSBTeXN0 ZW1GdW5jTmFtZSh0cmlnZ2VyX2Z1bmNfbmFtZSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbmNvbW1h bmRzOyBpKyspCisJeworCQlTdHJpbmcJICAgKnRhZyA9IG1ha2VTdHJpbmcocHN0cmR1cChHZXRD b21tYW5kVGFnTmFtZShjb21tYW5kc1tpXSkpKTsKKworCQl0YWdzID0gbGFwcGVuZCh0YWdzLCB0 YWcpOworCX0KKworCWRkbF90cmlnZ2VyLT53aGVuY2xhdXNlID0gbGlzdF9tYWtlMShtYWtlRGVm RWxlbSgidGFnIiwgKE5vZGUgKikgdGFncywgLTEpKTsKKworCXRyaWdnZXJfaWQgPSBDcmVhdGVF dmVudFRyaWdnZXIoZGRsX3RyaWdnZXIpOworCisJLyoKKwkgKiBSZWdpc3RlciB0aGUgZXZlbnQg dHJpZ2dlcnMgYXMgaW50ZXJuYWxseSBkZXBlbmRlbnQgb24gdGhlIHB1YmxpY2F0aW9uLgorCSAq LworCU9iamVjdEFkZHJlc3NTZXQocmVmZXJlbmNlZCwgRXZlbnRUcmlnZ2VyUmVsYXRpb25JZCwg dHJpZ2dlcl9pZCk7CisJcmVjb3JkRGVwZW5kZW5jeU9uKCZyZWZlcmVuY2VkLCAmcHViYWRkcmVz cywgREVQRU5ERU5DWV9JTlRFUk5BTCk7Cit9CisKKy8qCiAgKiBDcmVhdGUgbmV3IHB1YmxpY2F0 aW9uLgogICovCiBPYmplY3RBZGRyZXNzCkBAIC03NDEsNiArODgyLDcgQEAgQ3JlYXRlUHVibGlj YXRpb24oUGFyc2VTdGF0ZSAqcHN0YXRlLCBDcmVhdGVQdWJsaWNhdGlvblN0bXQgKnN0bXQpCiAJ RGF0dW0JCXZhbHVlc1tOYXR0c19wZ19wdWJsaWNhdGlvbl07CiAJSGVhcFR1cGxlCXR1cDsKIAli b29sCQlwdWJsaXNoX2dpdmVuOworCWJvb2wJCWRkbF90eXBlX2dpdmVuOwogCVB1YmxpY2F0aW9u QWN0aW9ucyBwdWJhY3Rpb25zOwogCWJvb2wJCXB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290X2dp dmVuOwogCWJvb2wJCXB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290OwpAQCAtNzgxLDkgKzkyMywx MSBAQCBDcmVhdGVQdWJsaWNhdGlvbihQYXJzZVN0YXRlICpwc3RhdGUsIENyZWF0ZVB1YmxpY2F0 aW9uU3RtdCAqc3RtdCkKIAogCXBhcnNlX3B1YmxpY2F0aW9uX29wdGlvbnMocHN0YXRlLAogCQkJ CQkJCSAgc3RtdC0+b3B0aW9ucywKKwkJCQkJCQkgIHN0bXQtPmZvcl9hbGxfdGFibGVzLAogCQkJ CQkJCSAgJnB1Ymxpc2hfZ2l2ZW4sICZwdWJhY3Rpb25zLAogCQkJCQkJCSAgJnB1Ymxpc2hfdmlh X3BhcnRpdGlvbl9yb290X2dpdmVuLAotCQkJCQkJCSAgJnB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9y b290KTsKKwkJCQkJCQkgICZwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCwKKwkJCQkJCQkgICZk ZGxfdHlwZV9naXZlbik7CiAKIAlwdWJvaWQgPSBHZXROZXdPaWRXaXRoSW5kZXgocmVsLCBQdWJs aWNhdGlvbk9iamVjdEluZGV4SWQsCiAJCQkJCQkJCUFudW1fcGdfcHVibGljYXRpb25fb2lkKTsK QEAgLTc5OCw2ICs5NDIsMTAgQEAgQ3JlYXRlUHVibGljYXRpb24oUGFyc2VTdGF0ZSAqcHN0YXRl LCBDcmVhdGVQdWJsaWNhdGlvblN0bXQgKnN0bXQpCiAJCUJvb2xHZXREYXR1bShwdWJhY3Rpb25z LnB1YmRlbGV0ZSk7CiAJdmFsdWVzW0FudW1fcGdfcHVibGljYXRpb25fcHVidHJ1bmNhdGUgLSAx XSA9CiAJCUJvb2xHZXREYXR1bShwdWJhY3Rpb25zLnB1YnRydW5jYXRlKTsKKwl2YWx1ZXNbQW51 bV9wZ19wdWJsaWNhdGlvbl9wdWJkZGxfYWxsIC0gMV0gPQorCQlCb29sR2V0RGF0dW0ocHViYWN0 aW9ucy5wdWJkZGxfYWxsKTsKKwl2YWx1ZXNbQW51bV9wZ19wdWJsaWNhdGlvbl9wdWJkZGxfdGFi bGUgLSAxXSA9CisJQm9vbEdldERhdHVtKHB1YmFjdGlvbnMucHViZGRsX3RhYmxlKTsKIAl2YWx1 ZXNbQW51bV9wZ19wdWJsaWNhdGlvbl9wdWJ2aWFyb290IC0gMV0gPQogCQlCb29sR2V0RGF0dW0o cHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QpOwogCkBAIC04NTgsNiArMTAwNiw1MyBAQCBDcmVh dGVQdWJsaWNhdGlvbihQYXJzZVN0YXRlICpwc3RhdGUsIENyZWF0ZVB1YmxpY2F0aW9uU3RtdCAq c3RtdCkKIAkJfQogCX0KIAorCVRyYW5zZm9ybVB1YlRhYmxlV2hlcmVDbGF1c2VzKHJlbGF0aW9u cywgcHN0YXRlLT5wX3NvdXJjZXRleHQpOworCUV2ZW50VHJpZ2dlckNvbGxlY3RDcmVhdGVQdWJs aWNhdGlvbihzdG10LCBwdWJvaWQsIHJlbGF0aW9ucywgc2NoZW1haWRsaXN0KTsKKworCS8qCisJ ICogQ3JlYXRlIGFuIGV2ZW50IHRyaWdnZXIgdG8gYWxsb3cgbG9nZ2luZyBvZiBEREwgc3RhdGVt ZW50cy4KKwkgKgorCSAqLworCWlmIChwdWJhY3Rpb25zLnB1YmRkbF90YWJsZSB8fCBwdWJhY3Rp b25zLnB1YmRkbF9hbGwpCisJeworCQlDb21tYW5kVGFnCXN0YXJ0X2NvbW1hbmRzW10gPSB7Q01E VEFHX0RST1BfVEFCTEV9OworCQlDb21tYW5kVGFnCXJld3JpdGVfY29tbWFuZHNbXSA9IHtDTURU QUdfQUxURVJfVEFCTEV9OworCQlDb21tYW5kVGFnCWluaXRfY29tbWFuZHNbXSA9IHsKKwkJCUNN RFRBR19DUkVBVEVfVEFCTEVfQVMsCisJCQlDTURUQUdfU0VMRUNUX0lOVE8KKwkJfTsKKwkJaW50 IG5jb21tYW5kcyA9IDA7CisJCUNvbW1hbmRUYWcgKmVuZF9jb21tYW5kcyA9IE5VTEw7CisKKwkJ aWYgKHB1YmFjdGlvbnMucHViZGRsX2FsbCkKKwkJCWVuZF9jb21tYW5kcyA9IEdldENvbW1hbmRU YWdzRm9yRERMUmVwbCgmbmNvbW1hbmRzKTsKKwkJZWxzZSBpZiAocHViYWN0aW9ucy5wdWJkZGxf dGFibGUpCisJCXsKKwkJCW5jb21tYW5kcyA9IDM7CisJCQllbmRfY29tbWFuZHMgPSBwYWxsb2Mw KG5jb21tYW5kcyAqIHNpemVvZihDb21tYW5kVGFnKSk7CisJCQllbmRfY29tbWFuZHNbMF0gPSBD TURUQUdfQ1JFQVRFX1RBQkxFOworCQkJZW5kX2NvbW1hbmRzWzFdID0gQ01EVEFHX0FMVEVSX1RB QkxFOworCQkJZW5kX2NvbW1hbmRzWzJdID0gQ01EVEFHX0RST1BfVEFCTEU7CisJCX0KKworCQkv KiBDcmVhdGUgdGhlIGRkbF9jb21tYW5kX2VuZCBldmVudCB0cmlnZ2VyICovCisJCUNyZWF0ZURE TFJlcGxpY2FFdmVudFRyaWdnZXIoImRkbF9jb21tYW5kX2VuZCIsIGVuZF9jb21tYW5kcywKKwkJ CQkJCQkJCSBuY29tbWFuZHMsIG15c2VsZiwgcHVib2lkKTsKKwkJcGZyZWUoZW5kX2NvbW1hbmRz KTsKKworCQkvKiBDcmVhdGUgdGhlIGRkbF9jb21tYW5kX3N0YXJ0IGV2ZW50IHRyaWdnZXIgKi8K KwkJQ3JlYXRlRERMUmVwbGljYUV2ZW50VHJpZ2dlcigiZGRsX2NvbW1hbmRfc3RhcnQiLCBzdGFy dF9jb21tYW5kcywKKwkJCQkJCQkJCSBsZW5ndGhvZihzdGFydF9jb21tYW5kcyksIG15c2VsZiwg cHVib2lkKTsKKworCQkvKiBDcmVhdGUgdGhlIHRhYmxlX3Jld3JpdGUgZXZlbnQgdHJpZ2dlciAq LworCQlDcmVhdGVERExSZXBsaWNhRXZlbnRUcmlnZ2VyKCJ0YWJsZV9yZXdyaXRlIiwgcmV3cml0 ZV9jb21tYW5kcywKKwkJCQkJCQkJCSBsZW5ndGhvZihyZXdyaXRlX2NvbW1hbmRzKSwgbXlzZWxm LCBwdWJvaWQpOworCisJCS8qIENyZWF0ZSB0aGUgdGFibGVfaW5pdF93cml0ZSBldmVudCB0cmln Z2VyICovCisJCUNyZWF0ZURETFJlcGxpY2FFdmVudFRyaWdnZXIoInRhYmxlX2luaXRfd3JpdGUi LCBpbml0X2NvbW1hbmRzLAorCQkJCQkJCQkJIGxlbmd0aG9mKGluaXRfY29tbWFuZHMpLCBteXNl bGYsIHB1Ym9pZCk7CisJfQorCiAJdGFibGVfY2xvc2UocmVsLCBSb3dFeGNsdXNpdmVMb2NrKTsK IAogCUludm9rZU9iamVjdFBvc3RDcmVhdGVIb29rKFB1YmxpY2F0aW9uUmVsYXRpb25JZCwgcHVi b2lkLCAwKTsKQEAgLTg4Miw2ICsxMDc3LDcgQEAgQWx0ZXJQdWJsaWNhdGlvbk9wdGlvbnMoUGFy c2VTdGF0ZSAqcHN0YXRlLCBBbHRlclB1YmxpY2F0aW9uU3RtdCAqc3RtdCwKIAlib29sCQlyZXBs YWNlc1tOYXR0c19wZ19wdWJsaWNhdGlvbl07CiAJRGF0dW0JCXZhbHVlc1tOYXR0c19wZ19wdWJs aWNhdGlvbl07CiAJYm9vbAkJcHVibGlzaF9naXZlbjsKKwlib29sCQlkZGxfdHlwZV9naXZlbjsK IAlQdWJsaWNhdGlvbkFjdGlvbnMgcHViYWN0aW9uczsKIAlib29sCQlwdWJsaXNoX3ZpYV9wYXJ0 aXRpb25fcm9vdF9naXZlbjsKIAlib29sCQlwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdDsKQEAg LTg5MCwxMSArMTA4NiwxNSBAQCBBbHRlclB1YmxpY2F0aW9uT3B0aW9ucyhQYXJzZVN0YXRlICpw c3RhdGUsIEFsdGVyUHVibGljYXRpb25TdG10ICpzdG10LAogCUxpc3QJICAgKnJvb3RfcmVsaWRz ID0gTklMOwogCUxpc3RDZWxsICAgKmxjOwogCisJcHViZm9ybSA9IChGb3JtX3BnX3B1YmxpY2F0 aW9uKSBHRVRTVFJVQ1QodHVwKTsKKwogCXBhcnNlX3B1YmxpY2F0aW9uX29wdGlvbnMocHN0YXRl LAogCQkJCQkJCSAgc3RtdC0+b3B0aW9ucywKKwkJCQkJCQkgIHB1YmZvcm0tPnB1YmFsbHRhYmxl cywKIAkJCQkJCQkgICZwdWJsaXNoX2dpdmVuLCAmcHViYWN0aW9ucywKIAkJCQkJCQkgICZwdWJs aXNoX3ZpYV9wYXJ0aXRpb25fcm9vdF9naXZlbiwKLQkJCQkJCQkgICZwdWJsaXNoX3ZpYV9wYXJ0 aXRpb25fcm9vdCk7CisJCQkJCQkJICAmcHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QsCisJCQkJ CQkJICAmZGRsX3R5cGVfZ2l2ZW4pOwogCiAJcHViZm9ybSA9IChGb3JtX3BnX3B1YmxpY2F0aW9u KSBHRVRTVFJVQ1QodHVwKTsKIApAQCAtOTk2LDYgKzExOTYsMTIgQEAgQWx0ZXJQdWJsaWNhdGlv bk9wdGlvbnMoUGFyc2VTdGF0ZSAqcHN0YXRlLCBBbHRlclB1YmxpY2F0aW9uU3RtdCAqc3RtdCwK IAogCQl2YWx1ZXNbQW51bV9wZ19wdWJsaWNhdGlvbl9wdWJ0cnVuY2F0ZSAtIDFdID0gQm9vbEdl dERhdHVtKHB1YmFjdGlvbnMucHVidHJ1bmNhdGUpOwogCQlyZXBsYWNlc1tBbnVtX3BnX3B1Ymxp Y2F0aW9uX3B1YnRydW5jYXRlIC0gMV0gPSB0cnVlOworCisJCXZhbHVlc1tBbnVtX3BnX3B1Ymxp Y2F0aW9uX3B1YmRkbF9hbGwgLSAxXSA9IEJvb2xHZXREYXR1bShwdWJhY3Rpb25zLnB1YmRkbF9h bGwpOworCQlyZXBsYWNlc1tBbnVtX3BnX3B1YmxpY2F0aW9uX3B1YmRkbF9hbGwgLSAxXSA9IHRy dWU7CisKKwkJdmFsdWVzW0FudW1fcGdfcHVibGljYXRpb25fcHViZGRsX3RhYmxlIC0gMV0gPSBC b29sR2V0RGF0dW0ocHViYWN0aW9ucy5wdWJkZGxfdGFibGUpOworCQlyZXBsYWNlc1tBbnVtX3Bn X3B1YmxpY2F0aW9uX3B1YmRkbF90YWJsZSAtIDFdID0gdHJ1ZTsKIAl9CiAKIAlpZiAocHVibGlz aF92aWFfcGFydGl0aW9uX3Jvb3RfZ2l2ZW4pCkBAIC0xMzgwLDYgKzE1ODYsOCBAQCBBbHRlclB1 YmxpY2F0aW9uKFBhcnNlU3RhdGUgKnBzdGF0ZSwgQWx0ZXJQdWJsaWNhdGlvblN0bXQgKnN0bXQp CiAJUmVsYXRpb24JcmVsOwogCUhlYXBUdXBsZQl0dXA7CiAJRm9ybV9wZ19wdWJsaWNhdGlvbiBw dWJmb3JtOworCUxpc3QJICAgKnJlbGF0aW9ucyA9IE5JTDsKKwlMaXN0CSAgICpzY2hlbWFpZGxp c3QgPSBOSUw7CiAKIAlyZWwgPSB0YWJsZV9vcGVuKFB1YmxpY2F0aW9uUmVsYXRpb25JZCwgUm93 RXhjbHVzaXZlTG9jayk7CiAKQEAgLTE0MDMsOCArMTYxMSw2IEBAIEFsdGVyUHVibGljYXRpb24o UGFyc2VTdGF0ZSAqcHN0YXRlLCBBbHRlclB1YmxpY2F0aW9uU3RtdCAqc3RtdCkKIAkJQWx0ZXJQ dWJsaWNhdGlvbk9wdGlvbnMocHN0YXRlLCBzdG10LCByZWwsIHR1cCk7CiAJZWxzZQogCXsKLQkJ TGlzdAkgICAqcmVsYXRpb25zID0gTklMOwotCQlMaXN0CSAgICpzY2hlbWFpZGxpc3QgPSBOSUw7 CiAJCU9pZAkJCXB1YmlkID0gcHViZm9ybS0+b2lkOwogCiAJCU9iamVjdHNJblB1YmxpY2F0aW9u VG9PaWRzKHN0bXQtPnB1Ym9iamVjdHMsIHBzdGF0ZSwgJnJlbGF0aW9ucywKQEAgLTE0MzYsNiAr MTY0MiwxMCBAQCBBbHRlclB1YmxpY2F0aW9uKFBhcnNlU3RhdGUgKnBzdGF0ZSwgQWx0ZXJQdWJs aWNhdGlvblN0bXQgKnN0bXQpCiAJCUFsdGVyUHVibGljYXRpb25TY2hlbWFzKHN0bXQsIHR1cCwg c2NoZW1haWRsaXN0KTsKIAl9CiAKKwlUcmFuc2Zvcm1QdWJUYWJsZVdoZXJlQ2xhdXNlcyhyZWxh dGlvbnMsIHBzdGF0ZS0+cF9zb3VyY2V0ZXh0KTsKKwlFdmVudFRyaWdnZXJDb2xsZWN0QWx0ZXJQ dWJsaWNhdGlvbihzdG10LCBwdWJmb3JtLT5vaWQsIHJlbGF0aW9ucywKKwkJCQkJCQkJCQlzY2hl bWFpZGxpc3QpOworCiAJLyogQ2xlYW51cC4gKi8KIAloZWFwX2ZyZWV0dXBsZSh0dXApOwogCXRh YmxlX2Nsb3NlKHJlbCwgUm93RXhjbHVzaXZlTG9jayk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9jb21tYW5kcy90YWJsZWNtZHMuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5j CmluZGV4IDdjNjk3YTIuLjE1YWFjMmEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRz L3RhYmxlY21kcy5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jCkBAIC00 NjY1LDYgKzQ2NjUsOSBAQCBBVFByZXBDbWQoTGlzdCAqKndxdWV1ZSwgUmVsYXRpb24gcmVsLCBB bHRlclRhYmxlQ21kICpjbWQsCiAJCQljbWQgPSBBVFBhcnNlVHJhbnNmb3JtQ21kKHdxdWV1ZSwg dGFiLCByZWwsIGNtZCwgcmVjdXJzZSwgbG9ja21vZGUsCiAJCQkJCQkJCQkgIEFUX1BBU1NfVU5T RVQsIGNvbnRleHQpOwogCQkJQXNzZXJ0KGNtZCAhPSBOVUxMKTsKKworCQkJRXZlbnRUcmlnZ2Vy QWx0ZXJUeXBlU3RhcnQoY21kLCByZWwpOworCiAJCQkvKiBQZXJmb3JtcyBvd24gcmVjdXJzaW9u ICovCiAJCQlBVFByZXBBbHRlckNvbHVtblR5cGUod3F1ZXVlLCB0YWIsIHJlbCwgcmVjdXJzZSwg cmVjdXJzaW5nLCBjbWQsCiAJCQkJCQkJCSAgbG9ja21vZGUsIGNvbnRleHQpOwpAQCAtNDkzNiw2 ICs0OTM5LDcgQEAgQVRFeGVjQ21kKExpc3QgKip3cXVldWUsIEFsdGVyZWRUYWJsZUluZm8gKnRh YiwKIHsKIAlPYmplY3RBZGRyZXNzIGFkZHJlc3MgPSBJbnZhbGlkT2JqZWN0QWRkcmVzczsKIAlS ZWxhdGlvbglyZWwgPSB0YWItPnJlbDsKKwlib29sCQljb21tYW5kQ29sbGVjdGVkID0gZmFsc2U7 CiAKIAlzd2l0Y2ggKGNtZC0+c3VidHlwZSkKIAl7CkBAIC01MDU5LDYgKzUwNjMsOCBAQCBBVEV4 ZWNDbWQoTGlzdCAqKndxdWV1ZSwgQWx0ZXJlZFRhYmxlSW5mbyAqdGFiLAogCQljYXNlIEFUX0Fs dGVyQ29sdW1uVHlwZToJLyogQUxURVIgQ09MVU1OIFRZUEUgKi8KIAkJCS8qIHBhcnNlIHRyYW5z Zm9ybWF0aW9uIHdhcyBkb25lIGVhcmxpZXIgKi8KIAkJCWFkZHJlc3MgPSBBVEV4ZWNBbHRlckNv bHVtblR5cGUodGFiLCByZWwsIGNtZCwgbG9ja21vZGUpOworCQkJRXZlbnRUcmlnZ2VyQWx0ZXJU eXBlRW5kKChOb2RlICopIGNtZCwgYWRkcmVzcywgdGFiLT5yZXdyaXRlKTsKKwkJCWNvbW1hbmRD b2xsZWN0ZWQgPSB0cnVlOwogCQkJYnJlYWs7CiAJCWNhc2UgQVRfQWx0ZXJDb2x1bW5HZW5lcmlj T3B0aW9uczoJLyogQUxURVIgQ09MVU1OIE9QVElPTlMgKi8KIAkJCWFkZHJlc3MgPQpAQCAtNTIz MSw4ICs1MjM3LDggQEAgQVRFeGVjQ21kKExpc3QgKip3cXVldWUsIEFsdGVyZWRUYWJsZUluZm8g KnRhYiwKIAkvKgogCSAqIFJlcG9ydCB0aGUgc3ViY29tbWFuZCB0byBpbnRlcmVzdGVkIGV2ZW50 IHRyaWdnZXJzLgogCSAqLwotCWlmIChjbWQpCi0JCUV2ZW50VHJpZ2dlckNvbGxlY3RBbHRlclRh YmxlU3ViY21kKChOb2RlICopIGNtZCwgYWRkcmVzcyk7CisJaWYgKGNtZCAmJiAhY29tbWFuZENv bGxlY3RlZCkKKwkJRXZlbnRUcmlnZ2VyQ29sbGVjdEFsdGVyVGFibGVTdWJjbWQoKE5vZGUgKikg Y21kLCBhZGRyZXNzLCB0YWItPnJld3JpdGUpOwogCiAJLyoKIAkgKiBCdW1wIHRoZSBjb21tYW5k IGNvdW50ZXIgdG8gZW5zdXJlIHRoZSBuZXh0IHN1YmNvbW1hbmQgaW4gdGhlIHNlcXVlbmNlCmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfdXRpbGNtZC5jIGIvc3JjL2JhY2tl bmQvcGFyc2VyL3BhcnNlX3V0aWxjbWQuYwppbmRleCBmOTIxOGY0Li44YjUzYjQzIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfdXRpbGNtZC5jCisrKyBiL3NyYy9iYWNrZW5k L3BhcnNlci9wYXJzZV91dGlsY21kLmMKQEAgLTEzOTIsNiArMTM5Miw3IEBAIGV4cGFuZFRhYmxl TGlrZUNsYXVzZShSYW5nZVZhciAqaGVhcFJlbCwgVGFibGVMaWtlQ2xhdXNlICp0YWJsZV9saWtl X2NsYXVzZSkKIAkJYXRjbWQtPmNtZHMgPSBhdHN1YmNtZHM7CiAJCWF0Y21kLT5vYmp0eXBlID0g T0JKRUNUX1RBQkxFOwogCQlhdGNtZC0+bWlzc2luZ19vayA9IGZhbHNlOworCQlhdGNtZC0+dGFi bGVfbGlrZSA9IHRydWU7CiAJCXJlc3VsdCA9IGxjb25zKGF0Y21kLCByZXN1bHQpOwogCX0KIApk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9NYWtlZmlsZSBiL3Ny Yy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvTWFrZWZpbGUKaW5kZXggZDM2ODBlOS4uYjc5 ZGRkOCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9NYWtlZmls ZQorKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL01ha2VmaWxlCkBAIC0xNyw2 ICsxNyw3IEBAIG92ZXJyaWRlIENQUEZMQUdTIDo9IC1JJChzcmNkaXIpICQoQ1BQRkxBR1MpCiBP QkpTID0gXAogCWFwcGx5cGFyYWxsZWx3b3JrZXIubyBcCiAJZGRsbWVzc2FnZS5vIFwKKwlkZGx0 cmlnZ2VyLm8gXAogCWRlY29kZS5vIFwKIAlsYXVuY2hlci5vIFwKIAlsb2dpY2FsLm8gXApkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9kZGx0cmlnZ2VyLmMgYi9z cmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2RkbHRyaWdnZXIuYwpuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwLi4zY2FkNDY5Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2Jh Y2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9kZGx0cmlnZ2VyLmMKQEAgLTAsMCArMSwzNTggQEAK Ky8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIGRkbHRyaWdnZXIuYworICoJICBMb2dpY2FsIERE TCBtZXNzYWdlcy4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMjIsIFBvc3RncmVTUUwgR2xvYmFs IERldmVsb3BtZW50IEdyb3VwCisgKgorICogSURFTlRJRklDQVRJT04KKyAqCSAgc3JjL2JhY2tl bmQvcmVwbGljYXRpb24vbG9naWNhbC9kZGx0cmlnZ2VyLmMKKyAqCisgKiBOT1RFUworICoKKyAq IERlcGFyc2UgdGhlIGRkbCBjb21tYW5kIGFuZCBsb2cgaXQuCisgKgorICogLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgKi8KKworI2luY2x1ZGUgInBvc3RncmVzLmgiCisKKyNpbmNsdWRlICJhY2Nlc3Mv dGFibGUuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX2NsYXNzLmgiCisjaW5jbHVkZSAiY29tbWFu ZHMvZXZlbnRfdHJpZ2dlci5oIgorI2luY2x1ZGUgImZ1bmNhcGkuaCIKKyNpbmNsdWRlICJsaWIv aWxpc3QuaCIKKyNpbmNsdWRlICJyZXBsaWNhdGlvbi9kZGxtZXNzYWdlLmgiCisjaW5jbHVkZSAi dGNvcC9kZGxfZGVwYXJzZS5oIgorI2luY2x1ZGUgInV0aWxzL2ZtZ3Jwcm90b3MuaCIKKyNpbmNs dWRlICJ1dGlscy9sc3lzY2FjaGUuaCIKKworZXh0ZXJuIEV2ZW50VHJpZ2dlclF1ZXJ5U3RhdGUg KmN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZTsKKworLyoKKyAqIERlcGFyc2UgdGhlIGRkbCBjb21t YW5kIGFuZCBsb2cgaXQgcHJpb3IgdG8KKyAqIGV4ZWN1dGlvbi4gQ3VycmVudGx5IG9ubHkgdXNl ZCBmb3IgRFJPUCBUQUJMRSBjb21tYW5kCisgKiBzbyB0aGF0IGNhdGFsb2cgY2FuIGJlIGFjY2Vz c2VkIGJlZm9yZSBiZWluZyBkZWxldGVkLgorICogVGhpcyBpcyB0byBjaGVjayBpZiB0aGUgdGFi bGUgaXMgcGFydCBvZiB0aGUgcHVibGljYXRpb24KKyAqIG9yIG5vdC4KKyAqLworRGF0dW0KK3B1 YmxpY2F0aW9uX2RlcGFyc2VfZGRsX2NvbW1hbmRfc3RhcnQoUEdfRlVOQ1RJT05fQVJHUykKK3sK KwlFdmVudFRyaWdnZXJEYXRhICp0cmlnZGF0YTsKKwljaGFyCSAgICpjb21tYW5kID0gcHNwcmlu dGYoIkRyb3AgdGFibGUgY29tbWFuZCBzdGFydCIpOworCURyb3BTdG10ICAgKnN0bXQ7CisJTGlz dENlbGwgICAqY2VsbDE7CisKKwlpZiAoIUNBTExFRF9BU19FVkVOVF9UUklHR0VSKGZjaW5mbykp CisJCWVsb2coRVJST1IsICJub3QgZmlyZWQgYnkgZXZlbnQgdHJpZ2dlciBtYW5hZ2VyIik7CisK Kwl0cmlnZGF0YSA9IChFdmVudFRyaWdnZXJEYXRhICopIGZjaW5mby0+Y29udGV4dDsKKwlzdG10 ID0gKERyb3BTdG10ICopIHRyaWdkYXRhLT5wYXJzZXRyZWU7CisKKwkvKiBFeHRyYWN0IHRoZSBy ZWxpZCBmcm9tIHRoZSBwYXJzZSB0cmVlICovCisJZm9yZWFjaChjZWxsMSwgc3RtdC0+b2JqZWN0 cykKKwl7CisJCWNoYXIJCXJlbHBlcnNpc3Q7CisJCU5vZGUJICAgKm9iamVjdCA9IGxmaXJzdChj ZWxsMSk7CisJCU9iamVjdEFkZHJlc3MgYWRkcmVzczsKKwkJUmVsYXRpb24JcmVsYXRpb24gPSBO VUxMOworCisJCWFkZHJlc3MgPSBnZXRfb2JqZWN0X2FkZHJlc3Moc3RtdC0+cmVtb3ZlVHlwZSwK KwkJCQkJCQkJCSBvYmplY3QsCisJCQkJCQkJCQkgJnJlbGF0aW9uLAorCQkJCQkJCQkJIEFjY2Vz c0V4Y2x1c2l2ZUxvY2ssCisJCQkJCQkJCQkgdHJ1ZSk7CisKKwkJLyogT2JqZWN0IGRvZXMgbm90 IGV4aXN0LCBub3RoaW5nIHRvIGRvICovCisJCWlmICghcmVsYXRpb24pCisJCQljb250aW51ZTsK KworCQlyZWxwZXJzaXN0ID0gZ2V0X3JlbF9wZXJzaXN0ZW5jZShhZGRyZXNzLm9iamVjdElkKTsK KworCQkvKgorCQkgKiBEbyBub3QgZ2VuZXJhdGUgd2FsIGxvZyBmb3IgY29tbWFuZHMgd2hvc2Ug dGFyZ2V0IHRhYmxlIGlzIGEKKwkJICogdGVtcG9yYXJ5IHRhYmxlLgorCQkgKgorCQkgKiBXZSB3 aWxsIGdlbmVyYXRlIHdhbCBsb2dzIGZvciB1bmxvZ2dlZCB0YWJsZXMgc28gdGhhdCB1bmxvZ2dl ZAorCQkgKiB0YWJsZXMgY2FuIGFsc28gYmUgY3JlYXRlZCBhbmQgYWx0ZXJlZCBvbiB0aGUgc3Vi c2NyaWJlciBzaWRlLiBUaGlzCisJCSAqIG1ha2VzIGl0IHBvc3NpYmxlIHRvIGRpcmVjdGx5IHJl cGxheSB0aGUgU0VUIExPR0dFRCBjb21tYW5kIGFuZCB0aGUKKwkJICogaW5jb21pbmcgcmV3cml0 ZSBtZXNzYWdlIHdpdGhvdXQgY3JlYXRpbmcgYSBuZXcgdGFibGUuCisJCSAqLworCQlpZiAocmVs cGVyc2lzdCAhPSBSRUxQRVJTSVNURU5DRV9URU1QKQorCQkJTG9nTG9naWNhbERETE1lc3NhZ2Uo ImRlcGFyc2UiLCBhZGRyZXNzLm9iamVjdElkLCBEQ1RfVGFibGVEcm9wU3RhcnQsCisJCQkJCQkJ CSBjb21tYW5kLCBzdHJsZW4oY29tbWFuZCkgKyAxKTsKKworCQlpZiAocmVsYXRpb24pCisJCQl0 YWJsZV9jbG9zZShyZWxhdGlvbiwgTm9Mb2NrKTsKKwl9CisJcmV0dXJuIFBvaW50ZXJHZXREYXR1 bShOVUxMKTsKK30KKworLyoKKyAqIHB1YmxpY2F0aW9uX2RlcGFyc2VfdGFibGVfcmV3cml0ZQor ICoKKyAqIERlcGFyc2UgdGhlIGRkbCB0YWJsZSByZXdyaXRlIGNvbW1hbmQgYW5kIGxvZyBpdC4K KyAqLworRGF0dW0KK3B1YmxpY2F0aW9uX2RlcGFyc2VfdGFibGVfcmV3cml0ZShQR19GVU5DVElP Tl9BUkdTKQoreworCWNoYXIJCXJlbHBlcnNpc3Q7CisJQ29sbGVjdGVkQ29tbWFuZCAqY21kOwor CWNoYXIJICAgKmpzb25fc3RyaW5nOworCisJaWYgKCFDQUxMRURfQVNfRVZFTlRfVFJJR0dFUihm Y2luZm8pKQorCQllbG9nKEVSUk9SLCAibm90IGZpcmVkIGJ5IGV2ZW50IHRyaWdnZXIgbWFuYWdl ciIpOworCisJY21kID0gY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlLT5jdXJyZW50Q29tbWFuZDsK KworCUFzc2VydChjbWQgJiYgY21kLT5kLmFsdGVyVGFibGUucmV3cml0ZSk7CisKKwlyZWxwZXJz aXN0ID0gZ2V0X3JlbF9wZXJzaXN0ZW5jZShjbWQtPmQuYWx0ZXJUYWJsZS5vYmplY3RJZCk7CisK KwkvKgorCSAqIERvIG5vdCBnZW5lcmF0ZSB3YWwgbG9nIGZvciBjb21tYW5kcyB3aG9zZSB0YXJn ZXQgdGFibGUgaXMgYSB0ZW1wb3JhcnkKKwkgKiB0YWJsZS4KKwkgKgorCSAqIFdlIHdpbGwgZ2Vu ZXJhdGUgd2FsIGxvZ3MgZm9yIHVubG9nZ2VkIHRhYmxlcyBzbyB0aGF0IHVubG9nZ2VkIHRhYmxl cworCSAqIGNhbiBhbHNvIGJlIGNyZWF0ZWQgYW5kIGFsdGVyZWQgb24gdGhlIHN1YnNjcmliZXIg c2lkZS4gVGhpcyBtYWtlcyBpdAorCSAqIHBvc3NpYmxlIHRvIGRpcmVjdGx5IHJlcGxheSB0aGUg U0VUIExPR0dFRCBjb21tYW5kIGFuZCB0aGUgaW5jb21pbmcKKwkgKiByZXdyaXRlIG1lc3NhZ2Ug d2l0aG91dCBjcmVhdGluZyBhIG5ldyB0YWJsZS4KKwkgKi8KKwlpZiAocmVscGVyc2lzdCAhPSBS RUxQRVJTSVNURU5DRV9URU1QKQorCXsKKwkJLyogRGVwYXJzZSB0aGUgRERMIGNvbW1hbmQgYW5k IFdBTCBsb2cgaXQgdG8gYWxsb3cgZGVjb2Rpbmcgb2YgdGhlIHNhbWUuICovCisJCWpzb25fc3Ry aW5nID0gZGVwYXJzZV91dGlsaXR5X2NvbW1hbmQoY21kLCBmYWxzZSk7CisKKwkJaWYgKGpzb25f c3RyaW5nICE9IE5VTEwpCisJCQlMb2dMb2dpY2FsRERMTWVzc2FnZSgiZGVwYXJzZSIsIGNtZC0+ ZC5hbHRlclRhYmxlLm9iamVjdElkLCBEQ1RfVGFibGVBbHRlciwKKwkJCQkJCQkJIGpzb25fc3Ry aW5nLCBzdHJsZW4oanNvbl9zdHJpbmcpICsgMSk7CisJfQorCisJcmV0dXJuIFBvaW50ZXJHZXRE YXR1bShOVUxMKTsKK30KKworLyoKKyAqIERlcGFyc2UgdGhlIGRkbCBjb21tYW5kIGFuZCBsb2cg aXQuIFRoaXMgZnVuY3Rpb24KKyAqIGlzIGNhbGxlZCBhZnRlciB0aGUgZXhlY3V0aW9uIG9mIHRo ZSBjb21tYW5kIGJ1dCBiZWZvcmUgdGhlCisgKiB0cmFuc2FjdGlvbiBjb21taXRzLgorICovCitE YXR1bQorcHVibGljYXRpb25fZGVwYXJzZV9kZGxfY29tbWFuZF9lbmQoUEdfRlVOQ1RJT05fQVJH UykKK3sKKwlMaXN0Q2VsbCAgICpsYzsKKwlzbGlzdF9pdGVyCWl0ZXI7CisJRGVwYXJzZWRDb21t YW5kVHlwZSB0eXBlOworCU9pZAkJCXJlbGlkOworCWNoYXIJCXJlbGtpbmQ7CisKKwlpZiAoIUNB TExFRF9BU19FVkVOVF9UUklHR0VSKGZjaW5mbykpCisJCWVsb2coRVJST1IsICJub3QgZmlyZWQg YnkgZXZlbnQgdHJpZ2dlciBtYW5hZ2VyIik7CisKKwlmb3JlYWNoKGxjLCBjdXJyZW50RXZlbnRU cmlnZ2VyU3RhdGUtPmNvbW1hbmRMaXN0KQorCXsKKwkJY2hhcgkJcmVscGVyc2lzdCA9IFJFTFBF UlNJU1RFTkNFX1BFUk1BTkVOVDsKKwkJQ29sbGVjdGVkQ29tbWFuZCAqY21kID0gbGZpcnN0KGxj KTsKKwkJY2hhcgkgICAqanNvbl9zdHJpbmc7CisKKwkJLyogUmV3cml0ZSBEREwgaGFzIGJlZW4g aGFuZGxlZCBpbiB0YWJsZV9yZXdyaXRlIHRyaWdnZXIgKi8KKwkJaWYgKGNtZC0+ZC5hbHRlclRh YmxlLnJld3JpdGUpCisJCXsKKwkJCVJlbmFtZVN0bXQgKnJlbmFtZVN0bXQgPSAoUmVuYW1lU3Rt dCAqKSBjbWQtPnBhcnNldHJlZTsKKworCQkJaWYgKHJlbmFtZVN0bXQgJiYgcmVuYW1lU3RtdC0+ cmVsYXRpb25UeXBlICE9IE9CSkVDVF9UWVBFICYmCisJCQkJcmVuYW1lU3RtdC0+cmVsYXRpb25U eXBlICE9IE9CSkVDVF9UQUJMRSkKKwkJCQljb250aW51ZTsKKwkJfQorCisJCWlmIChjbWQtPnR5 cGUgPT0gU0NUX1NpbXBsZSAmJgorCQkJIU9pZElzVmFsaWQoY21kLT5kLnNpbXBsZS5hZGRyZXNz Lm9iamVjdElkKSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChjbWQtPnR5cGUgPT0gU0NUX0FsdGVy VGFibGUpCisJCXsKKwkJCXJlbGlkID0gY21kLT5kLmFsdGVyVGFibGUub2JqZWN0SWQ7CisJCQl0 eXBlID0gRENUX1RhYmxlQWx0ZXI7CisJCX0KKwkJZWxzZQorCQl7CisJCQkvKiBPbmx5IFNDVF9T aW1wbGUgZm9yIG5vdyAqLworCQkJcmVsaWQgPSBjbWQtPmQuc2ltcGxlLmFkZHJlc3Mub2JqZWN0 SWQ7CisJCQl0eXBlID0gRENUX1NpbXBsZUNtZDsKKwkJfQorCisJCXJlbGtpbmQgPSBnZXRfcmVs X3JlbGtpbmQocmVsaWQpOworCQlpZiAocmVsa2luZCkKKwkJCXJlbHBlcnNpc3QgPSBnZXRfcmVs X3BlcnNpc3RlbmNlKHJlbGlkKTsKKworCQkvKgorCQkgKiBEbyBub3QgZ2VuZXJhdGUgd2FsIGxv ZyBmb3IgY29tbWFuZHMgd2hvc2UgdGFyZ2V0IHRhYmxlIGlzIGEKKwkJICogdGVtcG9yYXJ5IHRh YmxlLgorCQkgKgorCQkgKiBXZSB3aWxsIGdlbmVyYXRlIHdhbCBsb2dzIGZvciB1bmxvZ2dlZCB0 YWJsZXMgc28gdGhhdCB1bmxvZ2dlZAorCQkgKiB0YWJsZXMgY2FuIGFsc28gYmUgY3JlYXRlZCBh bmQgYWx0ZXJlZCBvbiB0aGUgc3Vic2NyaWJlciBzaWRlLiBUaGlzCisJCSAqIG1ha2VzIGl0IHBv c3NpYmxlIHRvIGRpcmVjdGx5IHJlcGxheSB0aGUgU0VUIExPR0dFRCBjb21tYW5kIGFuZCB0aGUK KwkJICogaW5jb21pbmcgcmV3cml0ZSBtZXNzYWdlIHdpdGhvdXQgY3JlYXRpbmcgYSBuZXcgdGFi bGUuCisJCSAqLworCQlpZiAocmVscGVyc2lzdCAhPSBSRUxQRVJTSVNURU5DRV9URU1QKQorCQl7 CisJCQkvKgorCQkJICogRGVwYXJzZSB0aGUgRERMIGNvbW1hbmQgYW5kIFdBTCBsb2cgaXQgdG8g YWxsb3cgZGVjb2Rpbmcgb2YgdGhlCisJCQkgKiBzYW1lLgorCQkJICovCisJCQlqc29uX3N0cmlu ZyA9IGRlcGFyc2VfdXRpbGl0eV9jb21tYW5kKGNtZCwgZmFsc2UpOworCisJCQlpZiAoanNvbl9z dHJpbmcgIT0gTlVMTCkKKwkJCQlMb2dMb2dpY2FsRERMTWVzc2FnZSgiZGVwYXJzZSIsIHJlbGlk LCB0eXBlLCBqc29uX3N0cmluZywKKwkJCQkJCQkJCSBzdHJsZW4oanNvbl9zdHJpbmcpICsgMSk7 CisJCX0KKwl9CisKKwlzbGlzdF9mb3JlYWNoKGl0ZXIsICYoY3VycmVudEV2ZW50VHJpZ2dlclN0 YXRlLT5TUUxEcm9wTGlzdCkpCisJeworCQl2b2xhdGlsZSBTUUxEcm9wT2JqZWN0ICpvYmo7CisJ CURyb3BTdG10ICAgKnN0bXQ7CisJCUV2ZW50VHJpZ2dlckRhdGEgKnRyaWdkYXRhOworCQljaGFy CSAgICpjb21tYW5kOworCQlEZXBhcnNlZENvbW1hbmRUeXBlIGNtZHR5cGU7CisJCWNvbnN0IGNo YXIgKnRtcHR5cGU7CisJCU9iamVjdENsYXNzCW9iamNsYXNzOworCQlPYmplY3RBZGRyZXNzIG9i amFkZHI7CisKKwkJdHJpZ2RhdGEgPSAoRXZlbnRUcmlnZ2VyRGF0YSAqKSBmY2luZm8tPmNvbnRl eHQ7CisJCXN0bXQgPSAoRHJvcFN0bXQgKikgdHJpZ2RhdGEtPnBhcnNldHJlZTsKKworCQlvYmog PSBzbGlzdF9jb250YWluZXIoU1FMRHJvcE9iamVjdCwgbmV4dCwgaXRlci5jdXIpOworCQlvYmph ZGRyID0gb2JqLT5hZGRyZXNzOworCQlvYmpjbGFzcyA9IGdldE9iamVjdENsYXNzKCZvYmphZGRy KTsKKworCQlpZiAoc3RyY21wKG9iai0+b2JqZWN0dHlwZSwgInRhYmxlIikgPT0gMCkKKwkJCWNt ZHR5cGUgPSBEQ1RfVGFibGVEcm9wRW5kOworCQllbHNlIGlmIChvYmpjbGFzcyA9PSBPQ0xBU1Nf U0NIRU1BIHx8CisJCQkJIG9iamNsYXNzID09IE9DTEFTU19PUEVSQVRPUiB8fAorCQkJCSBvYmpj bGFzcyA9PSBPQ0xBU1NfT1BDTEFTUyB8fAorCQkJCSBvYmpjbGFzcyA9PSBPQ0xBU1NfT1BGQU1J TFkgfHwKKwkJCQkgb2JqY2xhc3MgPT0gT0NMQVNTX0NBU1QgfHwKKwkJCQkgb2JqY2xhc3MgPT0g T0NMQVNTX1RZUEUgfHwKKwkJCQkgb2JqY2xhc3MgPT0gT0NMQVNTX1RSSUdHRVIgfHwKKwkJCQkg b2JqY2xhc3MgPT0gT0NMQVNTX0NPTlZFUlNJT04gfHwKKwkJCQkgb2JqY2xhc3MgPT0gT0NMQVNT X1BPTElDWSB8fAorCQkJCSBvYmpjbGFzcyA9PSBPQ0xBU1NfUkVXUklURSB8fAorCQkJCSBvYmpj bGFzcyA9PSBPQ0xBU1NfRVhURU5TSU9OIHx8CisJCQkJIG9iamNsYXNzID09IE9DTEFTU19GRFcg fHwKKwkJCQkgb2JqY2xhc3MgPT0gT0NMQVNTX1RTQ09ORklHIHx8CisJCQkJIG9iamNsYXNzID09 IE9DTEFTU19UU0RJQ1QgfHwKKwkJCQkgb2JqY2xhc3MgPT0gT0NMQVNTX1RTVEVNUExBVEUgfHwK KwkJCQkgb2JqY2xhc3MgPT0gT0NMQVNTX1RTUEFSU0VSIHx8CisJCQkJIG9iamNsYXNzID09IE9D TEFTU19UUkFOU0ZPUk0gfHwKKwkJCQkgb2JqY2xhc3MgPT0gT0NMQVNTX0ZPUkVJR05fU0VSVkVS IHx8CisJCQkJIG9iamNsYXNzID09IE9DTEFTU19DT0xMQVRJT04gfHwKKwkJCQkgb2JqY2xhc3Mg PT0gT0NMQVNTX1VTRVJfTUFQUElORyB8fAorCQkJCSBvYmpjbGFzcyA9PSBPQ0xBU1NfTEFOR1VB R0UgfHwKKwkJCQkgb2JqY2xhc3MgPT0gT0NMQVNTX1NUQVRJU1RJQ19FWFQgfHwKKwkJCQkgb2Jq Y2xhc3MgPT0gT0NMQVNTX0FNIHx8CisJCQkJIG9iamNsYXNzID09IE9DTEFTU19QVUJMSUNBVElP TiB8fAorCQkJCSBzdHJjbXAob2JqLT5vYmplY3R0eXBlLCAiZm9yZWlnbiB0YWJsZSIpID09IDAg fHwKKwkJCQkgc3RyY21wKG9iai0+b2JqZWN0dHlwZSwgImluZGV4IikgPT0gMCB8fAorCQkJCSBz dHJjbXAob2JqLT5vYmplY3R0eXBlLCAic2VxdWVuY2UiKSA9PSAwIHx8CisJCQkJIHN0cmNtcChv YmotPm9iamVjdHR5cGUsICJ2aWV3IikgPT0gMCB8fAorCQkJCSBzdHJjbXAob2JqLT5vYmplY3R0 eXBlLCAiZnVuY3Rpb24iKSA9PSAwIHx8CisJCQkJIHN0cmNtcChvYmotPm9iamVjdHR5cGUsICJt YXRlcmlhbGl6ZWQgdmlldyIpID09IDAgfHwKKwkJCQkgc3RyY21wKG9iai0+b2JqZWN0dHlwZSwg InByb2NlZHVyZSIpID09IDAgfHwKKwkJCQkgc3RyY21wKG9iai0+b2JqZWN0dHlwZSwgInJvdXRp bmUiKSA9PSAwIHx8CisJCQkJIHN0cmNtcChvYmotPm9iamVjdHR5cGUsICJhZ2dyZWdhdGUiKSA9 PSAwKQorCQkJY21kdHlwZSA9IERDVF9PYmplY3REcm9wOworCQllbHNlCisJCQljb250aW51ZTsK KworCQkvKiBDaGFuZ2UgZm9yZWlnbi1kYXRhIHdyYXBwZXIgdG8gZm9yZWlnbiBkYXRhIHdyYXBw ZXIgKi8KKwkJaWYgKHN0cm5jbXAob2JqLT5vYmplY3R0eXBlLCAiZm9yZWlnbi1kYXRhIHdyYXBw ZXIiLCAyMCkgPT0gMCkKKwkJeworCQkJdG1wdHlwZSA9IHBzdHJkdXAoImZvcmVpZ24gZGF0YSB3 cmFwcGVyIik7CisJCQljb21tYW5kID0gZGVwYXJzZV9kcm9wX2NvbW1hbmQob2JqLT5vYmppZGVu dGl0eSwgdG1wdHlwZSwKKwkJCQkJCQkJCQkgICBzdG10LT5iZWhhdmlvcik7CisJCX0KKworCQkv KiBDaGFuZ2Ugc3RhdGlzdGljcyBvYmplY3QgdG8gc3RhdGlzdGljcyAqLworCQllbHNlIGlmIChz dHJuY21wKG9iai0+b2JqZWN0dHlwZSwgInN0YXRpc3RpY3Mgb2JqZWN0IiwKKwkJCQkJCSBzdHJs ZW4oInN0YXRpc3RpY3Mgb2JqZWN0IikpID09IDApCisJCXsKKwkJCXRtcHR5cGUgPSBwc3RyZHVw KCJzdGF0aXN0aWNzIik7CisJCQljb21tYW5kID0gZGVwYXJzZV9kcm9wX2NvbW1hbmQob2JqLT5v YmppZGVudGl0eSwgdG1wdHlwZSwKKwkJCQkJCQkJCQkgICBzdG10LT5iZWhhdmlvcik7CisJCX0K KworCQkvKgorCQkgKiBPYmplY3QgaWRlbnRpdHkgbmVlZHMgdG8gYmUgbW9kaWZpZWQgdG8gbWFr ZSB0aGUgZHJvcCB3b3JrCisJCSAqCisJCSAqIEZST006IDxyb2xlPiBvbiBzZXJ2ZXIgPHNlcnZl cm5hbWU+IFRPICA6IGZvciA8cm9sZT4gc2VydmVyCisJCSAqIDxzZXJ2ZXJuYW1lPgorCQkgKgor CQkgKi8KKwkJZWxzZSBpZiAoc3RybmNtcChvYmotPm9iamVjdHR5cGUsICJ1c2VyIG1hcHBpbmci LCAxMikgPT0gMCkKKwkJeworCQkJY2hhcgkgICAqb25fc2VydmVyOworCisJCQl0bXB0eXBlID0g cGFsbG9jKHN0cmxlbihvYmotPm9iamlkZW50aXR5KSArIDIpOworCQkJb25fc2VydmVyID0gc3Ry c3RyKG9iai0+b2JqaWRlbnRpdHksICJvbiBzZXJ2ZXIiKTsKKworCQkJc3ByaW50ZigoY2hhciAq KSB0bXB0eXBlLCAiZm9yICIpOworCQkJc3RybmNhdCgoY2hhciAqKSB0bXB0eXBlLCBvYmotPm9i amlkZW50aXR5LCBvbl9zZXJ2ZXIgLSBvYmotPm9iamlkZW50aXR5KTsKKwkJCXN0cmNhdCgoY2hh ciAqKSB0bXB0eXBlLCBvbl9zZXJ2ZXIgKyAzKTsKKwkJCWNvbW1hbmQgPSBkZXBhcnNlX2Ryb3Bf Y29tbWFuZCh0bXB0eXBlLCBvYmotPm9iamVjdHR5cGUsCisJCQkJCQkJCQkJICAgc3RtdC0+YmVo YXZpb3IpOworCQl9CisJCWVsc2UKKwkJCWNvbW1hbmQgPSBkZXBhcnNlX2Ryb3BfY29tbWFuZChv YmotPm9iamlkZW50aXR5LCBvYmotPm9iamVjdHR5cGUsCisJCQkJCQkJCQkJICAgc3RtdC0+YmVo YXZpb3IpOworCisJCWlmIChjb21tYW5kKQorCQkJTG9nTG9naWNhbERETE1lc3NhZ2UoImRlcGFy c2UiLCBvYmotPmFkZHJlc3Mub2JqZWN0SWQsIGNtZHR5cGUsCisJCQkJCQkJCSBjb21tYW5kLCBz dHJsZW4oY29tbWFuZCkgKyAxKTsKKwl9CisKKwlyZXR1cm4gUG9pbnRlckdldERhdHVtKE5VTEwp OworfQorCisKKy8qCisgKiBwdWJsaWNhdGlvbl9kZXBhcnNlX3RhYmxlX2luaXRfd3JpdGUKKyAq CisgKiBEZXBhcnNlIHRoZSBkZGwgdGFibGUgY3JlYXRlIGNvbW1hbmQgYW5kIGxvZyBpdC4KKyAq LworRGF0dW0KK3B1YmxpY2F0aW9uX2RlcGFyc2VfdGFibGVfaW5pdF93cml0ZShQR19GVU5DVElP Tl9BUkdTKQoreworCWNoYXIJCXJlbHBlcnNpc3Q7CisJQ29sbGVjdGVkQ29tbWFuZCAqY21kOwor CWNoYXIJICAgKmpzb25fc3RyaW5nOworCisJaWYgKCFDQUxMRURfQVNfRVZFTlRfVFJJR0dFUihm Y2luZm8pKQorCQllbG9nKEVSUk9SLCAibm90IGZpcmVkIGJ5IGV2ZW50IHRyaWdnZXIgbWFuYWdl ciIpOworCisJY21kID0gY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlLT5jdXJyZW50Q29tbWFuZDsK KwlBc3NlcnQoY21kKTsKKworCXJlbHBlcnNpc3QgPSBnZXRfcmVsX3BlcnNpc3RlbmNlKGNtZC0+ ZC5zaW1wbGUuYWRkcmVzcy5vYmplY3RJZCk7CisKKwkvKgorCSAqIERvIG5vdCBnZW5lcmF0ZSB3 YWwgbG9nIGZvciBjb21tYW5kcyB3aG9zZSB0YXJnZXQgdGFibGUgaXMgYSB0ZW1wb3JhcnkKKwkg KiB0YWJsZS4KKwkgKgorCSAqIFdlIHdpbGwgZ2VuZXJhdGUgd2FsIGxvZ3MgZm9yIHVubG9nZ2Vk IHRhYmxlcyBzbyB0aGF0IHVubG9nZ2VkIHRhYmxlcworCSAqIGNhbiBhbHNvIGJlIGNyZWF0ZWQg YW5kIGFsdGVyZWQgb24gdGhlIHN1YnNjcmliZXIgc2lkZS4gVGhpcyBtYWtlcyBpdAorCSAqIHBv c3NpYmxlIHRvIGRpcmVjdGx5IHJlcGxheSB0aGUgU0VUIExPR0dFRCBjb21tYW5kIGFuZCB0aGUg aW5jb21pbmcKKwkgKiByZXdyaXRlIG1lc3NhZ2Ugd2l0aG91dCBjcmVhdGluZyBhIG5ldyB0YWJs ZS4KKwkgKi8KKwlpZiAocmVscGVyc2lzdCA9PSBSRUxQRVJTSVNURU5DRV9URU1QKQorCQlyZXR1 cm4gUG9pbnRlckdldERhdHVtKE5VTEwpOworCisJLyogRGVwYXJzZSB0aGUgRERMIGNvbW1hbmQg YW5kIFdBTCBsb2cgaXQgdG8gYWxsb3cgZGVjb2Rpbmcgb2YgdGhlIHNhbWUuICovCisJanNvbl9z dHJpbmcgPSBkZXBhcnNlX3V0aWxpdHlfY29tbWFuZChjbWQsIGZhbHNlKTsKKworCWlmIChqc29u X3N0cmluZyAhPSBOVUxMKQorCQlMb2dMb2dpY2FsRERMTWVzc2FnZSgiZGVwYXJzZSIsIGNtZC0+ ZC5zaW1wbGUuYWRkcmVzcy5vYmplY3RJZCwgRENUX1NpbXBsZUNtZCwKKwkJCQkJCQkganNvbl9z dHJpbmcsIHN0cmxlbihqc29uX3N0cmluZykgKyAxKTsKKworCXJldHVybiBQb2ludGVyR2V0RGF0 dW0oTlVMTCk7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2Fs L2xvZ2ljYWwuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbG9naWNhbC5jCmlu ZGV4IGQ1YWZhZTkuLmM4NTk3YzYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9u L2xvZ2ljYWwvbG9naWNhbC5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwv bG9naWNhbC5jCkBAIC05NSw2ICs5NSwxMSBAQCBzdGF0aWMgdm9pZCBzdHJlYW1fY2hhbmdlX2Ni X3dyYXBwZXIoUmVvcmRlckJ1ZmZlciAqY2FjaGUsIFJlb3JkZXJCdWZmZXJUWE4gKnR4bgogc3Rh dGljIHZvaWQgc3RyZWFtX21lc3NhZ2VfY2Jfd3JhcHBlcihSZW9yZGVyQnVmZmVyICpjYWNoZSwg UmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCQkJCQkJCQkJICBYTG9nUmVjUHRyIG1lc3NhZ2VfbHNu LCBib29sIHRyYW5zYWN0aW9uYWwsCiAJCQkJCQkJCQkgIGNvbnN0IGNoYXIgKnByZWZpeCwgU2l6 ZSBtZXNzYWdlX3NpemUsIGNvbnN0IGNoYXIgKm1lc3NhZ2UpOworc3RhdGljIHZvaWQgc3RyZWFt X2RkbF9jYl93cmFwcGVyKFJlb3JkZXJCdWZmZXIgKmNhY2hlLCBSZW9yZGVyQnVmZmVyVFhOICp0 eG4sCisJCQkJCQkJCQkJIFhMb2dSZWNQdHIgbWVzc2FnZV9sc24sCisJCQkJCQkJCQkJIGNvbnN0 IGNoYXIgKnByZWZpeCwKKwkJCQkJCQkJCQkgT2lkIHJlbGlkLCBEZXBhcnNlZENvbW1hbmRUeXBl IGNtZHR5cGUsCisJCQkJCQkJCQkJIFNpemUgbWVzc2FnZV9zaXplLCBjb25zdCBjaGFyICptZXNz YWdlKTsKIHN0YXRpYyB2b2lkIHN0cmVhbV90cnVuY2F0ZV9jYl93cmFwcGVyKFJlb3JkZXJCdWZm ZXIgKmNhY2hlLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCiAJCQkJCQkJCQkgICBpbnQgbnJlbGF0 aW9ucywgUmVsYXRpb24gcmVsYXRpb25zW10sIFJlb3JkZXJCdWZmZXJDaGFuZ2UgKmNoYW5nZSk7 CiAKQEAgLTI0MCw2ICsyNDUsNyBAQCBTdGFydHVwRGVjb2RpbmdDb250ZXh0KExpc3QgKm91dHB1 dF9wbHVnaW5fb3B0aW9ucywKIAkJKGN0eC0+Y2FsbGJhY2tzLnN0cmVhbV9jb21taXRfY2IgIT0g TlVMTCkgfHwKIAkJKGN0eC0+Y2FsbGJhY2tzLnN0cmVhbV9jaGFuZ2VfY2IgIT0gTlVMTCkgfHwK IAkJKGN0eC0+Y2FsbGJhY2tzLnN0cmVhbV9tZXNzYWdlX2NiICE9IE5VTEwpIHx8CisJCShjdHgt PmNhbGxiYWNrcy5zdHJlYW1fZGRsX2NiICE9IE5VTEwpIHx8CiAJCShjdHgtPmNhbGxiYWNrcy5z dHJlYW1fdHJ1bmNhdGVfY2IgIT0gTlVMTCk7CiAKIAkvKgpAQCAtMjU3LDYgKzI2Myw3IEBAIFN0 YXJ0dXBEZWNvZGluZ0NvbnRleHQoTGlzdCAqb3V0cHV0X3BsdWdpbl9vcHRpb25zLAogCWN0eC0+ cmVvcmRlci0+c3RyZWFtX2NvbW1pdCA9IHN0cmVhbV9jb21taXRfY2Jfd3JhcHBlcjsKIAljdHgt PnJlb3JkZXItPnN0cmVhbV9jaGFuZ2UgPSBzdHJlYW1fY2hhbmdlX2NiX3dyYXBwZXI7CiAJY3R4 LT5yZW9yZGVyLT5zdHJlYW1fbWVzc2FnZSA9IHN0cmVhbV9tZXNzYWdlX2NiX3dyYXBwZXI7CisJ Y3R4LT5yZW9yZGVyLT5zdHJlYW1fZGRsID0gc3RyZWFtX2RkbF9jYl93cmFwcGVyOwogCWN0eC0+ cmVvcmRlci0+c3RyZWFtX3RydW5jYXRlID0gc3RyZWFtX3RydW5jYXRlX2NiX3dyYXBwZXI7CiAK IApAQCAtMTU4Miw2ICsxNTg5LDQ4IEBAIHN0cmVhbV9tZXNzYWdlX2NiX3dyYXBwZXIoUmVvcmRl ckJ1ZmZlciAqY2FjaGUsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKIH0KIAogc3RhdGljIHZvaWQK K3N0cmVhbV9kZGxfY2Jfd3JhcHBlcihSZW9yZGVyQnVmZmVyICpjYWNoZSwgUmVvcmRlckJ1ZmZl clRYTiAqdHhuLAorCQkJCQkJCSBYTG9nUmVjUHRyIG1lc3NhZ2VfbHNuLAorCQkJCQkJCSBjb25z dCBjaGFyICpwcmVmaXgsIE9pZCByZWxpZCwgRGVwYXJzZWRDb21tYW5kVHlwZSBjbWR0eXBlLAor CQkJCQkJCSBTaXplIG1lc3NhZ2Vfc2l6ZSwKKwkJCQkJCQkgY29uc3QgY2hhciAqbWVzc2FnZSkK K3sKKwlMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHggPSBjYWNoZS0+cHJpdmF0ZV9kYXRhOwor CUxvZ2ljYWxFcnJvckNhbGxiYWNrU3RhdGUgc3RhdGU7CisJRXJyb3JDb250ZXh0Q2FsbGJhY2sg ZXJyY2FsbGJhY2s7CisKKwlBc3NlcnQoIWN0eC0+ZmFzdF9mb3J3YXJkKTsKKworCS8qIFdlJ3Jl IG9ubHkgc3VwcG9zZWQgdG8gY2FsbCB0aGlzIHdoZW4gc3RyZWFtaW5nIGlzIHN1cHBvcnRlZC4g Ki8KKwlBc3NlcnQoY3R4LT5zdHJlYW1pbmcpOworCisJLyogdGhpcyBjYWxsYmFjayBpcyBvcHRp b25hbCAqLworCWlmIChjdHgtPmNhbGxiYWNrcy5zdHJlYW1fZGRsX2NiID09IE5VTEwpCisJCXJl dHVybjsKKworCS8qIFB1c2ggY2FsbGJhY2sgKyBpbmZvIG9uIHRoZSBlcnJvciBjb250ZXh0IHN0 YWNrICovCisJc3RhdGUuY3R4ID0gY3R4OworCXN0YXRlLmNhbGxiYWNrX25hbWUgPSAic3RyZWFt X2RkbCI7CisJc3RhdGUucmVwb3J0X2xvY2F0aW9uID0gbWVzc2FnZV9sc247CisJZXJyY2FsbGJh Y2suY2FsbGJhY2sgPSBvdXRwdXRfcGx1Z2luX2Vycm9yX2NhbGxiYWNrOworCWVycmNhbGxiYWNr LmFyZyA9ICh2b2lkICopICZzdGF0ZTsKKwllcnJjYWxsYmFjay5wcmV2aW91cyA9IGVycm9yX2Nv bnRleHRfc3RhY2s7CisJZXJyb3JfY29udGV4dF9zdGFjayA9ICZlcnJjYWxsYmFjazsKKworCS8q IHNldCBvdXRwdXQgc3RhdGUgKi8KKwljdHgtPmFjY2VwdF93cml0ZXMgPSB0cnVlOworCWN0eC0+ d3JpdGVfeGlkID0gdHhuICE9IE5VTEwgPyB0eG4tPnhpZCA6IEludmFsaWRUcmFuc2FjdGlvbklk OworCWN0eC0+d3JpdGVfbG9jYXRpb24gPSBtZXNzYWdlX2xzbjsKKworCS8qIGRvIHRoZSBhY3R1 YWwgd29yazogY2FsbCBjYWxsYmFjayAqLworCWN0eC0+Y2FsbGJhY2tzLnN0cmVhbV9kZGxfY2Io Y3R4LCB0eG4sIG1lc3NhZ2VfbHNuLCBwcmVmaXgsIHJlbGlkLAorCQkJCQkJCQkJCWNtZHR5cGUs IG1lc3NhZ2Vfc2l6ZSwgbWVzc2FnZSk7CisKKwkvKiBQb3AgdGhlIGVycm9yIGNvbnRleHQgc3Rh Y2sgKi8KKwllcnJvcl9jb250ZXh0X3N0YWNrID0gZXJyY2FsbGJhY2sucHJldmlvdXM7Cit9CisK K3N0YXRpYyB2b2lkCiBzdHJlYW1fdHJ1bmNhdGVfY2Jfd3JhcHBlcihSZW9yZGVyQnVmZmVyICpj YWNoZSwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCQkJCQkJICAgaW50IG5yZWxhdGlvbnMsIFJl bGF0aW9uIHJlbGF0aW9uc1tdLAogCQkJCQkJICAgUmVvcmRlckJ1ZmZlckNoYW5nZSAqY2hhbmdl KQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9tZXNvbi5idWls ZCBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbWVzb24uYnVpbGQKaW5kZXggOTlj NjA4ZC4uMDVlNzc1NiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNh bC9tZXNvbi5idWlsZAorKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL21lc29u LmJ1aWxkCkBAIC0zLDYgKzMsNyBAQAogYmFja2VuZF9zb3VyY2VzICs9IGZpbGVzKAogICAnYXBw bHlwYXJhbGxlbHdvcmtlci5jJywKICAgJ2RkbG1lc3NhZ2UuYycsCisgICdkZGx0cmlnZ2VyLmMn LAogICAnZGVjb2RlLmMnLAogICAnbGF1bmNoZXIuYycsCiAgICdsb2dpY2FsLmMnLApkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9wcm90by5jIGIvc3JjL2JhY2tl bmQvcmVwbGljYXRpb24vbG9naWNhbC9wcm90by5jCmluZGV4IDNhOWQ1M2EuLmRlODc0YzIgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcHJvdG8uYworKysgYi9z cmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Byb3RvLmMKQEAgLTY2NCw2ICs2NjQsNDcg QEAgbG9naWNhbHJlcF93cml0ZV9tZXNzYWdlKFN0cmluZ0luZm8gb3V0LCBUcmFuc2FjdGlvbklk IHhpZCwgWExvZ1JlY1B0ciBsc24sCiB9CiAKIC8qCisgKiBSZWFkIERETCBNRVNTQUdFIGZyb20g c3RyZWFtCisgKi8KK2NoYXIgKgorbG9naWNhbHJlcF9yZWFkX2RkbChTdHJpbmdJbmZvIGluLCBY TG9nUmVjUHRyICpsc24sCisJCQkJCQkgICBjb25zdCBjaGFyICoqcHJlZml4LAorCQkJCQkJICAg U2l6ZSAqc3opCit7CisJdWludDggZmxhZ3M7CisJY2hhciAqbXNnOworCisJZmxhZ3MgPSBwcV9n ZXRtc2dpbnQoaW4sIDEpOworCWlmIChmbGFncyAhPSAwKQorCQllbG9nKEVSUk9SLCAidW5yZWNv Z25pemVkIGZsYWdzICV1IGluIGRkbCBtZXNzYWdlIiwgZmxhZ3MpOworCisJKmxzbiA9IHBxX2dl dG1zZ2ludDY0KGluKTsKKwkqcHJlZml4ID0gcHFfZ2V0bXNnc3RyaW5nKGluKTsKKwkqc3ogPSBw cV9nZXRtc2dpbnQoaW4sIDQpOworCW1zZyA9IChjaGFyICopIHBxX2dldG1zZ2J5dGVzKGluLCAq c3opOworCisJcmV0dXJuIG1zZzsKK30KKworLyoKKyAqIFdyaXRlIERETCBNRVNTQUdFIHRvIHN0 cmVhbQorICovCit2b2lkCitsb2dpY2FscmVwX3dyaXRlX2RkbChTdHJpbmdJbmZvIG91dCwgWExv Z1JlY1B0ciBsc24sCisJCQkJCQkJY29uc3QgY2hhciAqcHJlZml4LCBTaXplIHN6LCBjb25zdCBj aGFyICptZXNzYWdlKQoreworCXVpbnQ4CQlmbGFncyA9IDA7CisKKwlwcV9zZW5kYnl0ZShvdXQs IExPR0lDQUxfUkVQX01TR19EREwpOworCisJcHFfc2VuZGludDgob3V0LCBmbGFncyk7CisJcHFf c2VuZGludDY0KG91dCwgbHNuKTsKKwlwcV9zZW5kc3RyaW5nKG91dCwgcHJlZml4KTsKKwlwcV9z ZW5kaW50MzIob3V0LCBzeik7CisJcHFfc2VuZGJ5dGVzKG91dCwgbWVzc2FnZSwgc3opOworfQor CisvKgogICogV3JpdGUgcmVsYXRpb24gZGVzY3JpcHRpb24gdG8gdGhlIG91dHB1dCBzdHJlYW0u CiAgKi8KIHZvaWQKQEAgLTEyNDQsNiArMTI4NSw4IEBAIGxvZ2ljYWxyZXBfbWVzc2FnZV90eXBl KExvZ2ljYWxSZXBNc2dUeXBlIGFjdGlvbikKIAkJCXJldHVybiAiVFlQRSI7CiAJCWNhc2UgTE9H SUNBTF9SRVBfTVNHX01FU1NBR0U6CiAJCQlyZXR1cm4gIk1FU1NBR0UiOworCQljYXNlIExPR0lD QUxfUkVQX01TR19EREw6CisJCQlyZXR1cm4gIkRETCI7CiAJCWNhc2UgTE9HSUNBTF9SRVBfTVNH X0JFR0lOX1BSRVBBUkU6CiAJCQlyZXR1cm4gIkJFR0lOIFBSRVBBUkUiOwogCQljYXNlIExPR0lD QUxfUkVQX01TR19QUkVQQVJFOgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24v bG9naWNhbC9yZW9yZGVyYnVmZmVyLmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2Fs L3Jlb3JkZXJidWZmZXIuYwppbmRleCA5YTdkYzllLi5mZDRkMWJiIDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Jlb3JkZXJidWZmZXIuYworKysgYi9zcmMvYmFj a2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Jlb3JkZXJidWZmZXIuYwpAQCAtMjA0OCwxMiArMjA0 OCwyMCBAQCBzdGF0aWMgaW5saW5lIHZvaWQKIFJlb3JkZXJCdWZmZXJBcHBseURETE1lc3NhZ2Uo UmVvcmRlckJ1ZmZlciAqcmIsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKIAkJCQkJCQkgUmVvcmRl ckJ1ZmZlckNoYW5nZSAqY2hhbmdlLCBib29sIHN0cmVhbWluZykKIHsKLQlyYi0+ZGRsKHJiLCB0 eG4sIGNoYW5nZS0+bHNuLAotCQkJY2hhbmdlLT5kYXRhLmRkbC5wcmVmaXgsCi0JCQljaGFuZ2Ut PmRhdGEuZGRsLnJlbGlkLAotCQkJY2hhbmdlLT5kYXRhLmRkbC5jbWR0eXBlLAotCQkJY2hhbmdl LT5kYXRhLmRkbC5tZXNzYWdlX3NpemUsCi0JCQljaGFuZ2UtPmRhdGEuZGRsLm1lc3NhZ2UpOwor CWlmIChzdHJlYW1pbmcpCisJCXJiLT5zdHJlYW1fZGRsKHJiLCB0eG4sIGNoYW5nZS0+bHNuLAor CQkJCQkJCSAgY2hhbmdlLT5kYXRhLmRkbC5wcmVmaXgsCisJCQkJCQkJICBjaGFuZ2UtPmRhdGEu ZGRsLnJlbGlkLAorCQkJCQkJCSAgY2hhbmdlLT5kYXRhLmRkbC5jbWR0eXBlLAorCQkJCQkJCSAg Y2hhbmdlLT5kYXRhLmRkbC5tZXNzYWdlX3NpemUsCisJCQkJCQkJICBjaGFuZ2UtPmRhdGEuZGRs Lm1lc3NhZ2UpOworCWVsc2UKKwkJcmItPmRkbChyYiwgdHhuLCBjaGFuZ2UtPmxzbiwKKwkJCQkJ ICAgY2hhbmdlLT5kYXRhLmRkbC5wcmVmaXgsCisJCQkJCSAgIGNoYW5nZS0+ZGF0YS5kZGwucmVs aWQsCisJCQkJCSAgIGNoYW5nZS0+ZGF0YS5kZGwuY21kdHlwZSwKKwkJCQkJICAgY2hhbmdlLT5k YXRhLmRkbC5tZXNzYWdlX3NpemUsCisJCQkJCSAgIGNoYW5nZS0+ZGF0YS5kZGwubWVzc2FnZSk7 CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3dv cmtlci5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC93b3JrZXIuYwppbmRleCBk OGI4YTM3Li40NjNhOGJlIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dp Y2FsL3dvcmtlci5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvd29ya2Vy LmMKQEAgLTE2Niw2ICsxNjYsNyBAQAogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgogI2luY2x1ZGUg Im5vZGVzL21ha2VmdW5jcy5oIgogI2luY2x1ZGUgIm9wdGltaXplci9vcHRpbWl6ZXIuaCIKKyNp bmNsdWRlICJwYXJzZXIvYW5hbHl6ZS5oIgogI2luY2x1ZGUgInBhcnNlci9wYXJzZV9yZWxhdGlv bi5oIgogI2luY2x1ZGUgInBnc3RhdC5oIgogI2luY2x1ZGUgInBvc3RtYXN0ZXIvYmd3b3JrZXIu aCIKQEAgLTE5MCw3ICsxOTEsMTAgQEAKICNpbmNsdWRlICJzdG9yYWdlL2xtZ3IuaCIKICNpbmNs dWRlICJzdG9yYWdlL3Byb2MuaCIKICNpbmNsdWRlICJzdG9yYWdlL3Byb2NhcnJheS5oIgorI2lu Y2x1ZGUgInRjb3AvZGRsX2RlcGFyc2UuaCIKKyNpbmNsdWRlICJ0Y29wL3BxdWVyeS5oIgogI2lu Y2x1ZGUgInRjb3AvdGNvcHByb3QuaCIKKyNpbmNsdWRlICJ0Y29wL3V0aWxpdHkuaCIKICNpbmNs dWRlICJ1dGlscy9hY2wuaCIKICNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgogI2luY2x1ZGUg InV0aWxzL2NhdGNhY2hlLmgiCkBAIC0zMjIzLDYgKzMyMjcsMjM4IEBAIGFwcGx5X2hhbmRsZV90 cnVuY2F0ZShTdHJpbmdJbmZvIHMpCiAJZW5kX3JlcGxpY2F0aW9uX3N0ZXAoKTsKIH0KIAorLyoK KyAqIFNwZWNpYWwgaGFuZGxpbmcgZm9yIENSRUFURSBUQUJMRSBBUyBhbmQgU0VMRUNUIElOVE8K KyAqIHRvIG5vdCBwb3B1bGF0ZSBkYXRhIGZyb20gdGhlIHNvdXJjZSB0YWJsZSBvbiB0aGUgc3Vi c2NyaWJlci4KKyAqIEFsbG93IHRoZSBkYXRhIHRvIGJlIHJlcGxpY2F0ZWQgdGhyb3VnaCBJTlNF UlRzIG9uIHRoZSBwdWJsaXNoZXIuCisgKi8KK3N0YXRpYyB2b2lkCitwcmVwcm9jZXNzX2NyZWF0 ZV90YWJsZShSYXdTdG10ICpjb21tYW5kKQoreworCUNvbW1hbmRUYWcJY29tbWFuZFRhZzsKKwor CWNvbW1hbmRUYWcgPSBDcmVhdGVDb21tYW5kVGFnKChOb2RlICopIGNvbW1hbmQpOworCisJc3dp dGNoIChjb21tYW5kVGFnKQorCXsKKwkJY2FzZSBDTURUQUdfQ1JFQVRFX1RBQkxFX0FTOgorCQlj YXNlIENNRFRBR19TRUxFQ1RfSU5UTzoKKwkJCXsKKwkJCQlDcmVhdGVUYWJsZUFzU3RtdCAqY2Fz dG10ID0gKENyZWF0ZVRhYmxlQXNTdG10ICopIGNvbW1hbmQtPnN0bXQ7CisKKwkJCQlpZiAoY2Fz dG10LT5vYmp0eXBlID09IE9CSkVDVF9UQUJMRSkKKwkJCQl7CisJCQkJCS8qCisJCQkJCSAqIEZv cmNlIHNraXBwaW5nIGRhdGEgcG9wdWxhdGlvbiB0byBhdm9pZCBkYXRhCisJCQkJCSAqIGluY29u c2lzdGVuY3kuIERhdGEgc2hvdWxkIGJlIHJlcGxpY2F0ZWQgZnJvbSB0aGUKKwkJCQkJICogcHVi bGlzaGVyIGluc3RlYWQuCisJCQkJCSAqLworCQkJCQljYXN0bXQtPmludG8tPnNraXBEYXRhID0g dHJ1ZTsKKwkJCQl9CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBDTURUQUdfU0VMRUNUOgorCQkJ eworCQkJCVNlbGVjdFN0bXQgKnNzdG10ID0gKFNlbGVjdFN0bXQgKikgY29tbWFuZC0+c3RtdDsK KworCQkJCWlmIChzc3RtdC0+aW50b0NsYXVzZSAhPSBOVUxMKQorCQkJCXsKKwkJCQkJLyoKKwkJ CQkJICogRm9yY2Ugc2tpcHBpbmcgZGF0YSBwb3B1bGF0aW9uIHRvIGF2b2lkIGRhdGEKKwkJCQkJ ICogaW5jb25zaXN0ZW5jeS4gRGF0YSBzaG91bGQgYmUgcmVwbGljYXRlZCBmcm9tIHRoZQorCQkJ CQkgKiBwdWJsaXNoZXIgaW5zdGVhZC4KKwkJCQkJICovCisJCQkJCXNzdG10LT5pbnRvQ2xhdXNl LT5za2lwRGF0YSA9IHRydWU7CisJCQkJfQorCQkJfQorCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJ CQlicmVhazsKKwl9Cit9CisKKy8qCisgKiBIYW5kbGUgQ1JFQVRFIFRBQkxFIGNvbW1hbmQKKyAq CisgKiBDYWxsIEFkZFN1YnNjcmlwdGlvblJlbFN0YXRlIGZvciBDUkVBVEUgTEFCRUwgY29tbWFu ZCB0byBzZXQgdGhlIHJlbHN0YXRlIHRvCisgKiBTVUJSRUxfU1RBVEVfUkVBRFkgc28gRE1MIGNo YW5nZXMgb24gdGhpcyBuZXcgdGFibGUgY2FuIGJlIHJlcGxpY2F0ZWQgd2l0aG91dAorICogaGF2 aW5nIHRvIG1hbnVhbGx5IHJ1biAiYWx0ZXIgc3Vic2NyaXB0aW9uIC4uLiByZWZyZXNoIHB1Ymxp Y2F0aW9uIgorICovCitzdGF0aWMgdm9pZAoraGFuZGxlX2NyZWF0ZV90YWJsZShSYXdTdG10ICpj b21tYW5kKQoreworCUNvbW1hbmRUYWcJY29tbWFuZFRhZzsKKwlSYW5nZVZhciAgICpydiA9IE5V TEw7CisJT2lkCQkJcmVsaWQ7CisJT2lkCQkJcmVsbmFtZXNwYWNlID0gSW52YWxpZE9pZDsKKwlD cmVhdGVTdG10ICpjc3RtdDsKKwljaGFyCSAgICpzY2hlbWFuYW1lID0gTlVMTDsKKwljaGFyCSAg ICpyZWxuYW1lID0gTlVMTDsKKworCWNvbW1hbmRUYWcgPSBDcmVhdGVDb21tYW5kVGFnKChOb2Rl ICopIGNvbW1hbmQpOworCWNzdG10ID0gKENyZWF0ZVN0bXQgKikgY29tbWFuZC0+c3RtdDsKKwly diA9IGNzdG10LT5yZWxhdGlvbjsKKworCWlmIChjb21tYW5kVGFnID09IENNRFRBR19DUkVBVEVf VEFCTEUpCisJeworCQljc3RtdCA9IChDcmVhdGVTdG10ICopIGNvbW1hbmQtPnN0bXQ7CisJCXJ2 ID0gY3N0bXQtPnJlbGF0aW9uOworCX0KKwllbHNlCisJeworCQlyZXR1cm47CisJfQorCisJaWYg KCFydikKKwkJcmV0dXJuOworCisJc2NoZW1hbmFtZSA9IHJ2LT5zY2hlbWFuYW1lOworCXJlbG5h bWUgPSBydi0+cmVsbmFtZTsKKworCWlmIChzY2hlbWFuYW1lICE9IE5VTEwpCisJCXJlbG5hbWVz cGFjZSA9IGdldF9uYW1lc3BhY2Vfb2lkKHNjaGVtYW5hbWUsIGZhbHNlKTsKKworCWlmIChyZWxu YW1lc3BhY2UgIT0gSW52YWxpZE9pZCkKKwkJcmVsaWQgPSBnZXRfcmVsbmFtZV9yZWxpZChyZWxu YW1lLCByZWxuYW1lc3BhY2UpOworCWVsc2UKKwkJcmVsaWQgPSBSZWxuYW1lR2V0UmVsaWQocmVs bmFtZSk7CisKKwlpZiAoT2lkSXNWYWxpZChyZWxpZCkpCisJeworCQlBZGRTdWJzY3JpcHRpb25S ZWxTdGF0ZShNeVN1YnNjcmlwdGlvbi0+b2lkLCByZWxpZCwKKwkJCQkJCQkJU1VCUkVMX1NUQVRF X1JFQURZLAorCQkJCQkJCQlJbnZhbGlkWExvZ1JlY1B0cik7CisJCWVyZXBvcnQoREVCVUcxLAor CQkJCShlcnJtc2dfaW50ZXJuYWwoInRhYmxlIFwiJXNcIiBhZGRlZCB0byBzdWJzY3JpcHRpb24g XCIlc1wiIiwKKwkJCQkJCQkJIHJlbG5hbWUsIE15U3Vic2NyaXB0aW9uLT5uYW1lKSkpOworCX0K K30KKworLyoKKyAqIEhhbmRsZSBEREwgcmVwbGljYXRpb24gbWVzc2FnZXMuCisgKi8KK3N0YXRp YyB2b2lkCithcHBseV9oYW5kbGVfZGRsKFN0cmluZ0luZm8gcykKK3sKKwlYTG9nUmVjUHRyCWxz bjsKKwljb25zdCBjaGFyICpwcmVmaXggPSBOVUxMOworCWNoYXIJICAgKm1lc3NhZ2UgPSBOVUxM OworCWNoYXIJICAgKmRkbF9jb21tYW5kOworCVNpemUJCXN6OworCUxpc3QJICAgKnBhcnNldHJl ZV9saXN0OworCUxpc3RDZWxsICAgKnBhcnNldHJlZV9pdGVtOworCURlc3RSZWNlaXZlciAqcmVj ZWl2ZXI7CisJTWVtb3J5Q29udGV4dCBvbGRjb250ZXh0OworCWNvbnN0IGNoYXIgKnNhdmVfZGVi dWdfcXVlcnlfc3RyaW5nID0gZGVidWdfcXVlcnlfc3RyaW5nOworCisJbWVzc2FnZSA9IGxvZ2lj YWxyZXBfcmVhZF9kZGwocywgJmxzbiwgJnByZWZpeCwgJnN6KTsKKworCS8qIE1ha2Ugc3VyZSB3 ZSBhcmUgaW4gYSB0cmFuc2FjdGlvbiBjb21tYW5kICovCisJYmVnaW5fcmVwbGljYXRpb25fc3Rl cCgpOworCisJZGRsX2NvbW1hbmQgPSBkZXBhcnNlX2RkbF9qc29uX3RvX3N0cmluZyhtZXNzYWdl KTsKKwlkZWJ1Z19xdWVyeV9zdHJpbmcgPSBkZGxfY29tbWFuZDsKKworCS8qIERlc3ROb25lIGZv ciBsb2dpY2FsIHJlcGxpY2F0aW9uICovCisJcmVjZWl2ZXIgPSBDcmVhdGVEZXN0UmVjZWl2ZXIo RGVzdE5vbmUpOworCXBhcnNldHJlZV9saXN0ID0gcGdfcGFyc2VfcXVlcnkoZGRsX2NvbW1hbmQp OworCisJZm9yZWFjaChwYXJzZXRyZWVfaXRlbSwgcGFyc2V0cmVlX2xpc3QpCisJeworCQlMaXN0 CSAgICpwbGFudHJlZV9saXN0OworCQlMaXN0CSAgICpxdWVyeXRyZWVfbGlzdDsKKwkJUmF3U3Rt dCAgICAqY29tbWFuZCA9IChSYXdTdG10ICopIGxmaXJzdChwYXJzZXRyZWVfaXRlbSk7CisJCUNv bW1hbmRUYWcJY29tbWFuZFRhZzsKKwkJTWVtb3J5Q29udGV4dCBwZXJfcGFyc2V0cmVlX2NvbnRl eHQgPSBOVUxMOworCQlQb3J0YWwJCXBvcnRhbDsKKwkJYm9vbAkJc25hcHNob3Rfc2V0ID0gZmFs c2U7CisKKwkJY29tbWFuZFRhZyA9IENyZWF0ZUNvbW1hbmRUYWcoKE5vZGUgKikgY29tbWFuZCk7 CisKKwkJLyogSWYgd2UgZ290IGEgY2FuY2VsIHNpZ25hbCBpbiBwYXJzaW5nIG9yIHByaW9yIGNv bW1hbmQsIHF1aXQgKi8KKwkJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKKworCQkvKiBSZW1vdmUg ZGF0YSBwb3B1bGF0aW9uIGZyb20gdGhlIGNvbW1hbmQgKi8KKwkJcHJlcHJvY2Vzc19jcmVhdGVf dGFibGUoY29tbWFuZCk7CisKKwkJLyoKKwkJICogU2V0IHVwIGEgc25hcHNob3QgaWYgcGFyc2Ug YW5hbHlzaXMvcGxhbm5pbmcgd2lsbCBuZWVkIG9uZS4KKwkJICovCisJCWlmIChhbmFseXplX3Jl cXVpcmVzX3NuYXBzaG90KGNvbW1hbmQpKQorCQl7CisJCQlQdXNoQWN0aXZlU25hcHNob3QoR2V0 VHJhbnNhY3Rpb25TbmFwc2hvdCgpKTsKKwkJCXNuYXBzaG90X3NldCA9IHRydWU7CisJCX0KKwor CQkvKgorCQkgKiBXZSBkbyB0aGUgd29yayBmb3IgZWFjaCBwYXJzZXRyZWUgaW4gYSBzaG9ydC1s aXZlZCBjb250ZXh0LCB0bworCQkgKiBsaW1pdCB0aGUgbWVtb3J5IHVzZWQgd2hlbiB0aGVyZSBh cmUgbWFueSBjb21tYW5kcyBpbiB0aGUgc3RyaW5nLgorCQkgKi8KKwkJcGVyX3BhcnNldHJlZV9j b250ZXh0ID0KKwkJCUFsbG9jU2V0Q29udGV4dENyZWF0ZShDdXJyZW50TWVtb3J5Q29udGV4dCwK KwkJCQkJCQkJICAiZXhlY3V0ZV9zcWxfc3RyaW5nIHBlci1zdGF0ZW1lbnQgY29udGV4dCIsCisJ CQkJCQkJCSAgQUxMT0NTRVRfREVGQVVMVF9TSVpFUyk7CisJCW9sZGNvbnRleHQgPSBNZW1vcnlD b250ZXh0U3dpdGNoVG8ocGVyX3BhcnNldHJlZV9jb250ZXh0KTsKKworCQlxdWVyeXRyZWVfbGlz dCA9IHBnX2FuYWx5emVfYW5kX3Jld3JpdGVfZml4ZWRwYXJhbXMoY29tbWFuZCwKKwkJCQkJCQkJ CQkJCQkJCWRkbF9jb21tYW5kLAorCQkJCQkJCQkJCQkJCQkJTlVMTCwgMCwgTlVMTCk7CisKKwkJ cGxhbnRyZWVfbGlzdCA9IHBnX3BsYW5fcXVlcmllcyhxdWVyeXRyZWVfbGlzdCwgZGRsX2NvbW1h bmQsIDAsIE5VTEwpOworCisJCS8qIERvbmUgd2l0aCB0aGUgc25hcHNob3QgdXNlZCBmb3IgcGFy c2luZy9wbGFubmluZyAqLworCQlpZiAoc25hcHNob3Rfc2V0KQorCQkJUG9wQWN0aXZlU25hcHNo b3QoKTsKKworCQlwb3J0YWwgPSBDcmVhdGVQb3J0YWwoImxvZ2ljYWwgcmVwbGljYXRpb24iLCB0 cnVlLCB0cnVlKTsKKworCQkvKgorCQkgKiBXZSBkb24ndCBoYXZlIHRvIGNvcHkgYW55dGhpbmcg aW50byB0aGUgcG9ydGFsLCBiZWNhdXNlIGV2ZXJ5dGhpbmcKKwkJICogd2UgYXJlIHBhc3Npbmcg aGVyZSBpcyBpbiBBcHBseU1lc3NhZ2VDb250ZXh0IG9yIHRoZQorCQkgKiBwZXJfcGFyc2V0cmVl X2NvbnRleHQsIGFuZCBzbyB3aWxsIG91dGxpdmUgdGhlIHBvcnRhbCBhbnl3YXkuCisJCSAqLwor CQlQb3J0YWxEZWZpbmVRdWVyeShwb3J0YWwsCisJCQkJCQkgIE5VTEwsCisJCQkJCQkgIGRkbF9j b21tYW5kLAorCQkJCQkJICBjb21tYW5kVGFnLAorCQkJCQkJICBwbGFudHJlZV9saXN0LAorCQkJ CQkJICBOVUxMKTsKKworCQkvKgorCQkgKiBTdGFydCB0aGUgcG9ydGFsLiAgTm8gcGFyYW1ldGVy cyBoZXJlLgorCQkgKi8KKwkJUG9ydGFsU3RhcnQocG9ydGFsLCBOVUxMLCAwLCBJbnZhbGlkU25h cHNob3QpOworCisJCS8qCisJCSAqIFN3aXRjaCBiYWNrIHRvIHRyYW5zYWN0aW9uIGNvbnRleHQg Zm9yIGV4ZWN1dGlvbi4KKwkJICovCisJCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjb250ZXh0 KTsKKworCQkodm9pZCkgUG9ydGFsUnVuKHBvcnRhbCwKKwkJCQkJCSBGRVRDSF9BTEwsCisJCQkJ CQkgdHJ1ZSwKKwkJCQkJCSB0cnVlLAorCQkJCQkJIHJlY2VpdmVyLAorCQkJCQkJIHJlY2VpdmVy LAorCQkJCQkJIE5VTEwpOworCisJCVBvcnRhbERyb3AocG9ydGFsLCBmYWxzZSk7CisKKwkJQ29t bWFuZENvdW50ZXJJbmNyZW1lbnQoKTsKKworCQkvKgorCQkgKiBUYWJsZSBjcmVhdGVkIGJ5IERE TCByZXBsaWNhdGlvbiAoZGF0YWJhc2UgbGV2ZWwpIGlzIGF1dG9tYXRpY2FsbHkKKwkJICogYWRk ZWQgdG8gdGhlIHN1YnNjcmlwdGlvbiBoZXJlLgorCQkgKi8KKwkJaGFuZGxlX2NyZWF0ZV90YWJs ZShjb21tYW5kKTsKKworCQkvKiBOb3cgd2UgbWF5IGRyb3AgdGhlIHBlci1wYXJzZXRyZWUgY29u dGV4dCwgaWYgb25lIHdhcyBjcmVhdGVkLiAqLworCQlNZW1vcnlDb250ZXh0RGVsZXRlKHBlcl9w YXJzZXRyZWVfY29udGV4dCk7CisJfQorCisJZGVidWdfcXVlcnlfc3RyaW5nID0gc2F2ZV9kZWJ1 Z19xdWVyeV9zdHJpbmc7CisJZW5kX3JlcGxpY2F0aW9uX3N0ZXAoKTsKK30KIAogLyoKICAqIExv Z2ljYWwgcmVwbGljYXRpb24gcHJvdG9jb2wgbWVzc2FnZSBkaXNwYXRjaGVyLgpAQCAtMzI4OCw2 ICszNTI0LDEwIEBAIGFwcGx5X2Rpc3BhdGNoKFN0cmluZ0luZm8gcykKIAkJCSAqLwogCQkJYnJl YWs7CiAKKwkJY2FzZSBMT0dJQ0FMX1JFUF9NU0dfRERMOgorCQkJYXBwbHlfaGFuZGxlX2RkbChz KTsKKwkJCWJyZWFrOworCiAJCWNhc2UgTE9HSUNBTF9SRVBfTVNHX1NUUkVBTV9TVEFSVDoKIAkJ CWFwcGx5X2hhbmRsZV9zdHJlYW1fc3RhcnQocyk7CiAJCQlicmVhazsKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL3JlcGxpY2F0aW9uL3Bnb3V0cHV0L3Bnb3V0cHV0LmMgYi9zcmMvYmFja2VuZC9y ZXBsaWNhdGlvbi9wZ291dHB1dC9wZ291dHB1dC5jCmluZGV4IDFhODBkNjcuLjdkMGM1NTAgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3Bnb3V0cHV0L3Bnb3V0cHV0LmMKKysr IGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vcGdvdXRwdXQvcGdvdXRwdXQuYwpAQCAtNTQsNiAr NTQsMTEgQEAgc3RhdGljIHZvaWQgcGdvdXRwdXRfbWVzc2FnZShMb2dpY2FsRGVjb2RpbmdDb250 ZXh0ICpjdHgsCiAJCQkJCQkJIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwgWExvZ1JlY1B0ciBtZXNz YWdlX2xzbiwKIAkJCQkJCQkgYm9vbCB0cmFuc2FjdGlvbmFsLCBjb25zdCBjaGFyICpwcmVmaXgs CiAJCQkJCQkJIFNpemUgc3osIGNvbnN0IGNoYXIgKm1lc3NhZ2UpOworc3RhdGljIHZvaWQgcGdv dXRwdXRfZGRsKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwKKwkJCQkJCQkJUmVvcmRlckJ1 ZmZlclRYTiAqdHhuLCBYTG9nUmVjUHRyIG1lc3NhZ2VfbHNuLAorCQkJCQkJCQljb25zdCBjaGFy ICpwcmVmaXgsIE9pZCByZWxpZCwKKwkJCQkJCQkJRGVwYXJzZWRDb21tYW5kVHlwZSBjbWR0eXBl LAorCQkJCQkJCQlTaXplIHN6LCBjb25zdCBjaGFyICptZXNzYWdlKTsKIHN0YXRpYyBib29sIHBn b3V0cHV0X29yaWdpbl9maWx0ZXIoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LAogCQkJCQkJ CQkgICBSZXBPcmlnaW5JZCBvcmlnaW5faWQpOwogc3RhdGljIHZvaWQgcGdvdXRwdXRfYmVnaW5f cHJlcGFyZV90eG4oTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LApAQCAtMjU3LDYgKzI2Miw3 IEBAIF9QR19vdXRwdXRfcGx1Z2luX2luaXQoT3V0cHV0UGx1Z2luQ2FsbGJhY2tzICpjYikKIAlj Yi0+Y2hhbmdlX2NiID0gcGdvdXRwdXRfY2hhbmdlOwogCWNiLT50cnVuY2F0ZV9jYiA9IHBnb3V0 cHV0X3RydW5jYXRlOwogCWNiLT5tZXNzYWdlX2NiID0gcGdvdXRwdXRfbWVzc2FnZTsKKwljYi0+ ZGRsX2NiID0gcGdvdXRwdXRfZGRsOwogCWNiLT5jb21taXRfY2IgPSBwZ291dHB1dF9jb21taXRf dHhuOwogCiAJY2ItPmJlZ2luX3ByZXBhcmVfY2IgPSBwZ291dHB1dF9iZWdpbl9wcmVwYXJlX3R4 bjsKQEAgLTI3Myw2ICsyNzksNyBAQCBfUEdfb3V0cHV0X3BsdWdpbl9pbml0KE91dHB1dFBsdWdp bkNhbGxiYWNrcyAqY2IpCiAJY2ItPnN0cmVhbV9jb21taXRfY2IgPSBwZ291dHB1dF9zdHJlYW1f Y29tbWl0OwogCWNiLT5zdHJlYW1fY2hhbmdlX2NiID0gcGdvdXRwdXRfY2hhbmdlOwogCWNiLT5z dHJlYW1fbWVzc2FnZV9jYiA9IHBnb3V0cHV0X21lc3NhZ2U7CisJY2ItPnN0cmVhbV9kZGxfY2Ig PSBwZ291dHB1dF9kZGw7CiAJY2ItPnN0cmVhbV90cnVuY2F0ZV9jYiA9IHBnb3V0cHV0X3RydW5j YXRlOwogCS8qIHRyYW5zYWN0aW9uIHN0cmVhbWluZyAtIHR3by1waGFzZSBjb21taXQgKi8KIAlj Yi0+c3RyZWFtX3ByZXBhcmVfY2IgPSBwZ291dHB1dF9zdHJlYW1fcHJlcGFyZV90eG47CkBAIC00 MjcsNiArNDM0LDcgQEAgcGdvdXRwdXRfc3RhcnR1cChMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpj dHgsIE91dHB1dFBsdWdpbk9wdGlvbnMgKm9wdCwKIAogCS8qIFRoaXMgcGx1Z2luIHVzZXMgYmlu YXJ5IHByb3RvY29sLiAqLwogCW9wdC0+b3V0cHV0X3R5cGUgPSBPVVRQVVRfUExVR0lOX0JJTkFS WV9PVVRQVVQ7CisJb3B0LT5yZWNlaXZlX3Jld3JpdGVzID0gdHJ1ZTsKIAogCS8qCiAJICogVGhp cyBpcyByZXBsaWNhdGlvbiBzdGFydCBhbmQgbm90IHNsb3QgaW5pdGlhbGl6YXRpb24uCkBAIC01 MDcsNiArNTE1LDcgQEAgcGdvdXRwdXRfc3RhcnR1cChMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpj dHgsIE91dHB1dFBsdWdpbk9wdGlvbnMgKm9wdCwKIAogCQkvKiBJbml0IHB1YmxpY2F0aW9uIHN0 YXRlLiAqLwogCQlkYXRhLT5wdWJsaWNhdGlvbnMgPSBOSUw7CisJCWRhdGEtPmRlbGV0ZWRfcmVs aWRzID0gTklMOwogCQlwdWJsaWNhdGlvbnNfdmFsaWQgPSBmYWxzZTsKIAkJQ2FjaGVSZWdpc3Rl clN5c2NhY2hlQ2FsbGJhY2soUFVCTElDQVRJT05PSUQsCiAJCQkJCQkJCQkgIHB1YmxpY2F0aW9u X2ludmFsaWRhdGlvbl9jYiwKQEAgLTE0MDAsOSArMTQwOSwyMiBAQCBwZ291dHB1dF9jaGFuZ2Uo TG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCiAJUmVv cmRlckJ1ZmZlckNoYW5nZVR5cGUgYWN0aW9uID0gY2hhbmdlLT5hY3Rpb247CiAJVHVwbGVUYWJs ZVNsb3QgKm9sZF9zbG90ID0gTlVMTDsKIAlUdXBsZVRhYmxlU2xvdCAqbmV3X3Nsb3QgPSBOVUxM OworCWJvb2wJCXRhYmxlX3Jld3JpdGUgPSBmYWxzZTsKIAogCXVwZGF0ZV9yZXBsaWNhdGlvbl9w cm9ncmVzcyhjdHgsIGZhbHNlKTsKIAorCS8qCisJICogRm9yIGhlYXAgcmV3cml0ZXMsIHdlIG1p Z2h0IG5lZWQgdG8gcmVwbGljYXRlIHRoZW0gaWYgdGhlIHJld3JpdHRlbgorCSAqIHRhYmxlIHB1 Ymxpc2hlcyByZXdyaXRlIGRkbCBtZXNzYWdlLiBTbyBnZXQgdGhlIGFjdHVhbCByZWxhdGlvbiBo ZXJlCisJICogYW5kIGNoZWNrIHRoZSBwdWJhY3Rpb24gbGF0ZXIuCisJICovCisJaWYgKHJlbGF0 aW9uLT5yZF9yZWwtPnJlbHJld3JpdGUpCisJeworCQl0YWJsZV9yZXdyaXRlID0gdHJ1ZTsKKwkJ cmVsYXRpb24gPSBSZWxhdGlvbklkR2V0UmVsYXRpb24ocmVsYXRpb24tPnJkX3JlbC0+cmVscmV3 cml0ZSk7CisJCXRhcmdldHJlbCA9IHJlbGF0aW9uOworCX0KKwogCWlmICghaXNfcHVibGlzaGFi bGVfcmVsYXRpb24ocmVsYXRpb24pKQogCQlyZXR1cm47CiAKQEAgLTE0MzYsNiArMTQ1OCwxMyBA QCBwZ291dHB1dF9jaGFuZ2UoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBSZW9yZGVyQnVm ZmVyVFhOICp0eG4sCiAJCQlBc3NlcnQoZmFsc2UpOwogCX0KIAorCS8qCisJICogV2UgZG9uJ3Qg cHVibGlzaCB0YWJsZSByZXdyaXRlIGNoYW5nZSB1bmxlc3Mgd2UgcHVibGlzaCB0aGUgcmV3cml0 ZSBkZGwKKwkgKiBtZXNzYWdlLgorCSAqLworCWlmICh0YWJsZV9yZXdyaXRlICYmICFyZWxlbnRy eS0+cHViYWN0aW9ucy5wdWJkZGxfdGFibGUpCisJCXJldHVybjsKKwogCS8qIEF2b2lkIGxlYWtp bmcgbWVtb3J5IGJ5IHVzaW5nIGFuZCByZXNldHRpbmcgb3VyIG93biBjb250ZXh0ICovCiAJb2xk ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKGRhdGEtPmNvbnRleHQpOwogCkBAIC0xNDY1LDggKzE0 OTQsOCBAQCBwZ291dHB1dF9jaGFuZ2UoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBSZW9y ZGVyQnVmZmVyVFhOICp0eG4sCiAJCQl9CiAKIAkJCS8qIENoZWNrIHJvdyBmaWx0ZXIgKi8KLQkJ CWlmICghcGdvdXRwdXRfcm93X2ZpbHRlcih0YXJnZXRyZWwsIE5VTEwsICZuZXdfc2xvdCwgcmVs ZW50cnksCi0JCQkJCQkJCQkgJmFjdGlvbikpCisJCQlpZiAoIXRhYmxlX3Jld3JpdGUgJiYKKwkJ CQkhcGdvdXRwdXRfcm93X2ZpbHRlcih0YXJnZXRyZWwsIE5VTEwsICZuZXdfc2xvdCwgcmVsZW50 cnksICZhY3Rpb24pKQogCQkJCWJyZWFrOwogCiAJCQkvKgpAQCAtMTQ4Niw4ICsxNTE1LDE5IEBA IHBnb3V0cHV0X2NoYW5nZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsIFJlb3JkZXJCdWZm ZXJUWE4gKnR4biwKIAkJCW1heWJlX3NlbmRfc2NoZW1hKGN0eCwgY2hhbmdlLCByZWxhdGlvbiwg cmVsZW50cnkpOwogCiAJCQlPdXRwdXRQbHVnaW5QcmVwYXJlV3JpdGUoY3R4LCB0cnVlKTsKLQkJ CWxvZ2ljYWxyZXBfd3JpdGVfaW5zZXJ0KGN0eC0+b3V0LCB4aWQsIHRhcmdldHJlbCwgbmV3X3Ns b3QsCi0JCQkJCQkJCQlkYXRhLT5iaW5hcnksIHJlbGVudHJ5LT5jb2x1bW5zKTsKKworCQkJLyoK KwkJCSAqIENvbnZlcnQgdGhlIHJld3JpdGUgaW5zZXJ0cyB0byB1cGRhdGVzIHNvIHRoYXQgdGhl IHN1YnNjcmliZXIKKwkJCSAqIGNhbiByZXBsYXkgaXQuIFRoaXMgaXMgbmVlZGVkIHRvIG1ha2Ug c3VyZSB0aGUgZGF0YSBiZXR3ZWVuCisJCQkgKiBwdWJsaXNoZXIgYW5kIHN1YnNjcmliZXIgaXMg Y29uc2lzdGVudC4KKwkJCSAqLworCQkJaWYgKHRhYmxlX3Jld3JpdGUpCisJCQkJbG9naWNhbHJl cF93cml0ZV91cGRhdGUoY3R4LT5vdXQsIHhpZCwgdGFyZ2V0cmVsLAorCQkJCQkJCQkJCU5VTEws IG5ld19zbG90LCBkYXRhLT5iaW5hcnksCisJCQkJCQkJCQkJcmVsZW50cnktPmNvbHVtbnMpOwor CQkJZWxzZQorCQkJCWxvZ2ljYWxyZXBfd3JpdGVfaW5zZXJ0KGN0eC0+b3V0LCB4aWQsIHRhcmdl dHJlbCwgbmV3X3Nsb3QsCisJCQkJCQkJCQkJZGF0YS0+YmluYXJ5LCByZWxlbnRyeS0+Y29sdW1u cyk7CiAJCQlPdXRwdXRQbHVnaW5Xcml0ZShjdHgsIHRydWUpOwogCQkJYnJlYWs7CiAJCWNhc2Ug UkVPUkRFUl9CVUZGRVJfQ0hBTkdFX1VQREFURToKQEAgLTE2MTksNiArMTY1OSw5IEBAIHBnb3V0 cHV0X2NoYW5nZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsIFJlb3JkZXJCdWZmZXJUWE4g KnR4biwKIAkJYW5jZXN0b3IgPSBOVUxMOwogCX0KIAorCWlmICh0YWJsZV9yZXdyaXRlKQorCQlS ZWxhdGlvbkNsb3NlKHJlbGF0aW9uKTsKKwogCS8qIENsZWFudXAgKi8KIAlNZW1vcnlDb250ZXh0 U3dpdGNoVG8ob2xkKTsKIAlNZW1vcnlDb250ZXh0UmVzZXQoZGF0YS0+Y29udGV4dCk7CkBAIC0x NzM4LDYgKzE3ODEsMTM4IEBAIHBnb3V0cHV0X21lc3NhZ2UoTG9naWNhbERlY29kaW5nQ29udGV4 dCAqY3R4LCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCiB9CiAKIC8qCisgKiBTZW5kIHRoZSBkZWNv ZGVkIERETCBvdmVyIHdpcmUuCisgKi8KK3N0YXRpYyB2b2lkCitwZ291dHB1dF9kZGwoTG9naWNh bERlY29kaW5nQ29udGV4dCAqY3R4LCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCisJCQkJCVhMb2dS ZWNQdHIgbWVzc2FnZV9sc24sCisJCQkJCWNvbnN0IGNoYXIgKnByZWZpeCwgT2lkIHJlbGlkLCBE ZXBhcnNlZENvbW1hbmRUeXBlIGNtZHR5cGUsCisJCQkJCVNpemUgc3osIGNvbnN0IGNoYXIgKm1l c3NhZ2UpCit7CisJUEdPdXRwdXREYXRhICpkYXRhID0gKFBHT3V0cHV0RGF0YSAqKSBjdHgtPm91 dHB1dF9wbHVnaW5fcHJpdmF0ZTsKKwlQR091dHB1dFR4bkRhdGEgKnR4bmRhdGEgPSAoUEdPdXRw dXRUeG5EYXRhICopIHR4bi0+b3V0cHV0X3BsdWdpbl9wcml2YXRlOworCVJlbGF0aW9uCXJlbGF0 aW9uID0gTlVMTDsKKwlSZWxhdGlvblN5bmNFbnRyeSAqcmVsZW50cnk7CisKKwlzd2l0Y2ggKGNt ZHR5cGUpCisJeworCQljYXNlIERDVF9UYWJsZURyb3BTdGFydDoKKworCQkJLyoKKwkJCSAqIE9u IERST1Agc3RhcnQsIGFkZCB0aGUgcmVsaWQgdG8gYSBkZWxldGVkX3JlbGlkIGxpc3QgaWYgdGhl CisJCQkgKiByZWxpZCBpcyBwYXJ0IG9mIGEgcHVibGljYXRpb24gdGhhdCBzdXBwb3J0cyBkZGwg cHVibGljYXRpb24uCisJCQkgKiBXZSBuZWVkIHRoaXMgYmVjYXVzZSBvbiBEUk9QIGVuZCwgdGhl IHJlbGlkIHdpbGwgbm8gbG9uZ2VyIGJlCisJCQkgKiB2YWxpZC4gTGF0ZXIgb24gRHJvcCBlbmQs IHZlcmlmeSB0aGF0IHRoZSBkcm9wIGlzIGZvciBhIHJlbGlkCisJCQkgKiB0aGF0IGlzIG9uIHRo ZSBkZWxldGVkX3JpZCBsaXN0LCBhbmQgb25seSB0aGVuIHNlbmQgdGhlIGRkbAorCQkJICogbWVz c2FnZS4KKwkJCSAqLworCQkJcmVsYXRpb24gPSBSZWxhdGlvbklkR2V0UmVsYXRpb24ocmVsaWQp OworCisJCQlBc3NlcnQocmVsYXRpb24pOworCQkJcmVsZW50cnkgPSBnZXRfcmVsX3N5bmNfZW50 cnkoZGF0YSwgcmVsYXRpb24pOworCisJCQlpZiAocmVsZW50cnktPnB1YmFjdGlvbnMucHViZGRs X3RhYmxlKQorCQkJCWRhdGEtPmRlbGV0ZWRfcmVsaWRzID0gbGFwcGVuZF9vaWQoZGF0YS0+ZGVs ZXRlZF9yZWxpZHMsIHJlbGlkKTsKKworCQkJUmVsYXRpb25DbG9zZShyZWxhdGlvbik7CisJCQly ZXR1cm47CisKKwkJY2FzZSBEQ1RfVGFibGVEcm9wRW5kOgorCQkJaWYgKCFsaXN0X21lbWJlcl9v aWQoZGF0YS0+ZGVsZXRlZF9yZWxpZHMsIHJlbGlkKSkKKwkJCQlyZXR1cm47CisJCQllbHNlCisJ CQkJZGF0YS0+ZGVsZXRlZF9yZWxpZHMgPSBsaXN0X2RlbGV0ZV9vaWQoZGF0YS0+ZGVsZXRlZF9y ZWxpZHMsIHJlbGlkKTsKKwkJCWJyZWFrOworCisJCWNhc2UgRENUX1RhYmxlQWx0ZXI6CisKKwkJ CS8qCisJCQkgKiBGb3IgdGFibGUgcmV3cml0ZSBkZGwsIHdlIGZpcnN0IHNlbmQgdGhlIG9yaWdp bmFsIGRkbCBtZXNzYWdlCisJCQkgKiB0byBzdWJzY3JpYmVyLCB0aGVuIGNvbnZlcnQgdGhlIHVw Y29taW5nIHJld3JpdGUgSU5TRVJUIHRvCisJCQkgKiBVUERBVEUgYW5kIHNlbmQgdGhlbSB0byBz dWJzY3JpYmVyIHNvIHRoYXQgdGhlIGRhdGEgYmV0d2VlbgorCQkJICogcHVibGlzaGVyIGFuZCBz dWJzY3JpYmVyIGNhbiBhbHdheXMgYmUgY29uc2lzdGVudC4KKwkJCSAqCisJCQkgKiBXZSBkbyB0 aGlzIHdheSBiZWNhdXNlIG9mIHR3byByZWFzb246CisJCQkgKgorCQkJICogKDEpIFRoZSBkYXRh IGJlZm9yZSB0aGUgcmV3cml0ZSBkZGwgY291bGQgYWxyZWFkeSBiZSBkaWZmZXJlbnQKKwkJCSAq IGFtb25nIHB1Ymxpc2hlciBhbmQgc3Vic2NyaWJlci4gVG8gbWFrZSBzdXJlIHRoZSBleHRyYSBk YXRhIGluCisJCQkgKiBzdWJzY3JpYmVyIHdoaWNoIGRvZXNuJ3QgZXhpc3QgaW4gcHVibGlzaGVy IGFsc28gZ2V0IHJld3JpdHRlbiwKKwkJCSAqIHdlIG5lZWQgdG8gbGV0IHRoZSBzdWJzY3JpYmVy IGV4ZWN1dGUgdGhlIG9yaWdpbmFsIHJld3JpdGUgZGRsCisJCQkgKiB0byByZXdyaXRlIGFsbCB0 aGUgZGF0YSBhdCBmaXJzdC4KKwkJCSAqCisJCQkgKiAoMikgdGhlIGRhdGEgYWZ0ZXIgZXhlY3V0 aW5nIHJld3JpdGUgZGRsIGNvdWxkIGJlIGRpZmZlcmVudAorCQkJICogYW1vbmcgcHVibGlzaGVy IGFuZCBzdWJzY3JpYmVyKGR1ZSB0byBkaWZmZXJlbnQKKwkJCSAqIGZ1bmN0aW9ucy9vcGVyYXRv cnMgdXNlZCBkdXJpbmcgcmV3cml0ZSksIHNvIHdlIG5lZWQgdG8KKwkJCSAqIHJlcGxpY2F0ZSB0 aGUgcmV3cml0ZSBVUERBVEVzIHRvIGtlZXAgdGhlIGRhdGEgY29uc2lzdGVudC4KKwkJCSAqCisJ CQkgKiBUTyBJTVBST1ZFOiBXZSBjb3VsZCBpbXByb3ZlIHRoaXMgYnkgbGV0dGluZyB0aGUgc3Vi c2NyaWJlcgorCQkJICogb25seSByZXdyaXRlIHRoZSBleHRyYSBkYXRhIGluc3RlYWQgb2YgZG9p bmcgZnVsbHkgcmV3cml0ZSBhbmQKKwkJCSAqIHVzZSB0aGUgdXBjb21pbmcgcmV3cml0ZSBVUERB VEVzIHRvIHJld3JpdGUgdGhlIHJlc3QgZGF0YS4KKwkJCSAqIEJlc2lkZXMsIHdlIG1heSBub3Qg bmVlZCB0byBzZW5kIHJld3JpdGUgY2hhbmdlcyBmb3IgYWxsIHR5cGUKKwkJCSAqIG9mIHJld3Jp dGUgZGRsLCBmb3IgZXhhbXBsZSwgaXQgc2VlbXMgZmluZSB0byBza2lwIHNlbmRpbmcKKwkJCSAq IHJld3JpdGUgY2hhbmdlcyBmb3IgQUxURVIgVEFCTEUgU0VUIExPR0dFRCBhcyB0aGUgZGF0YSBp biB0aGUKKwkJCSAqIHRhYmxlIGRvZXNuJ3QgYWN0dWFsbHkgYmUgY2hhbmdlZC4KKwkJCSAqLwor CQkJcmVsYXRpb24gPSBSZWxhdGlvbklkR2V0UmVsYXRpb24ocmVsaWQpOworCQkJQXNzZXJ0KHJl bGF0aW9uKTsKKworCQkJcmVsZW50cnkgPSBnZXRfcmVsX3N5bmNfZW50cnkoZGF0YSwgcmVsYXRp b24pOworCisJCQkvKgorCQkJICogU2tpcCBzZW5kaW5nIHRoaXMgZGRsIGlmIHdlIGRvbid0IHB1 Ymxpc2ggZGRsIG1lc3NhZ2Ugb3IgdGhlCisJCQkgKiBkZGwgbmVlZCB0byBiZSBwdWJsaXNoZWQg dmlhIGl0cyByb290IHJlbGF0aW9uLgorCQkJICovCisJCQlpZiAoIXJlbGVudHJ5LT5wdWJhY3Rp b25zLnB1YmRkbF90YWJsZSB8fAorCQkJCXJlbGVudHJ5LT5wdWJsaXNoX2FzX3JlbGlkICE9IHJl bGlkKQorCQkJeworCQkJCVJlbGF0aW9uQ2xvc2UocmVsYXRpb24pOworCQkJCXJldHVybjsKKwkJ CX0KKworCQkJYnJlYWs7CisKKwkJY2FzZSBEQ1RfU2ltcGxlQ21kOgorCQkJcmVsYXRpb24gPSBS ZWxhdGlvbklkR2V0UmVsYXRpb24ocmVsaWQpOworCisJCQlpZiAocmVsYXRpb24gPT0gTlVMTCkK KwkJCQlicmVhazsKKworCQkJcmVsZW50cnkgPSBnZXRfcmVsX3N5bmNfZW50cnkoZGF0YSwgcmVs YXRpb24pOworCisJCQlpZiAoIXJlbGVudHJ5LT5wdWJhY3Rpb25zLnB1YmRkbF90YWJsZSkKKwkJ CXsKKwkJCQlSZWxhdGlvbkNsb3NlKHJlbGF0aW9uKTsKKwkJCQlyZXR1cm47CisJCQl9CisKKwkJ CWJyZWFrOworCisJCWNhc2UgRENUX09iamVjdERyb3A6CisJCQkvKiBkbyBub3RoaW5nICovCisJ CQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJZWxvZyhFUlJPUiwgInVuc3VwcG9ydGVkIHR5cGUg JWQiLCBjbWR0eXBlKTsKKwkJCWJyZWFrOworCX0KKworCS8qIFNlbmQgQkVHSU4gaWYgd2UgaGF2 ZW4ndCB5ZXQgKi8KKwlpZiAodHhuZGF0YSAmJiAhdHhuZGF0YS0+c2VudF9iZWdpbl90eG4pCisJ CXBnb3V0cHV0X3NlbmRfYmVnaW4oY3R4LCB0eG4pOworCisJT3V0cHV0UGx1Z2luUHJlcGFyZVdy aXRlKGN0eCwgdHJ1ZSk7CisJbG9naWNhbHJlcF93cml0ZV9kZGwoY3R4LT5vdXQsCisJCQkJCQkJ CW1lc3NhZ2VfbHNuLAorCQkJCQkJCQlwcmVmaXgsCisJCQkJCQkJCXN6LAorCQkJCQkJCQltZXNz YWdlKTsKKwlPdXRwdXRQbHVnaW5Xcml0ZShjdHgsIHRydWUpOworCisJaWYgKHJlbGF0aW9uKQor CQlSZWxhdGlvbkNsb3NlKHJlbGF0aW9uKTsKK30KKworLyoKICAqIFJldHVybiB0cnVlIGlmIHRo ZSBkYXRhIGlzIGFzc29jaWF0ZWQgd2l0aCBhbiBvcmlnaW4gYW5kIHRoZSB1c2VyIGhhcwogICog cmVxdWVzdGVkIHRoZSBjaGFuZ2VzIHRoYXQgZG9uJ3QgaGF2ZSBhbiBvcmlnaW4sIGZhbHNlIG90 aGVyd2lzZS4KICAqLwpAQCAtMjAzNyw3ICsyMjEyLDggQEAgZ2V0X3JlbF9zeW5jX2VudHJ5KFBH T3V0cHV0RGF0YSAqZGF0YSwgUmVsYXRpb24gcmVsYXRpb24pCiAJCWVudHJ5LT5zY2hlbWFfc2Vu dCA9IGZhbHNlOwogCQllbnRyeS0+c3RyZWFtZWRfdHhucyA9IE5JTDsKIAkJZW50cnktPnB1YmFj dGlvbnMucHViaW5zZXJ0ID0gZW50cnktPnB1YmFjdGlvbnMucHVidXBkYXRlID0KLQkJCWVudHJ5 LT5wdWJhY3Rpb25zLnB1YmRlbGV0ZSA9IGVudHJ5LT5wdWJhY3Rpb25zLnB1YnRydW5jYXRlID0g ZmFsc2U7CisJCQllbnRyeS0+cHViYWN0aW9ucy5wdWJkZWxldGUgPSBlbnRyeS0+cHViYWN0aW9u cy5wdWJ0cnVuY2F0ZSA9CisJCQllbnRyeS0+cHViYWN0aW9ucy5wdWJkZGxfYWxsID0gZW50cnkt PnB1YmFjdGlvbnMucHViZGRsX3RhYmxlID0gZmFsc2U7CiAJCWVudHJ5LT5uZXdfc2xvdCA9IE5V TEw7CiAJCWVudHJ5LT5vbGRfc2xvdCA9IE5VTEw7CiAJCW1lbXNldChlbnRyeS0+ZXhwcnN0YXRl LCAwLCBzaXplb2YoZW50cnktPmV4cHJzdGF0ZSkpOwpAQCAtMjA5NSw2ICsyMjcxLDggQEAgZ2V0 X3JlbF9zeW5jX2VudHJ5KFBHT3V0cHV0RGF0YSAqZGF0YSwgUmVsYXRpb24gcmVsYXRpb24pCiAJ CWVudHJ5LT5wdWJhY3Rpb25zLnB1YnVwZGF0ZSA9IGZhbHNlOwogCQllbnRyeS0+cHViYWN0aW9u cy5wdWJkZWxldGUgPSBmYWxzZTsKIAkJZW50cnktPnB1YmFjdGlvbnMucHVidHJ1bmNhdGUgPSBm YWxzZTsKKwkJZW50cnktPnB1YmFjdGlvbnMucHViZGRsX2FsbCA9IGZhbHNlOworCQllbnRyeS0+ cHViYWN0aW9ucy5wdWJkZGxfdGFibGUgPSBmYWxzZTsKIAogCQkvKgogCQkgKiBUdXBsZSBzbG90 cyBjbGVhbnVwcy4gKFdpbGwgYmUgcmVidWlsdCBsYXRlciBpZiBuZWVkZWQpLgpAQCAtMjIwOCw2 ICsyMzg2LDggQEAgZ2V0X3JlbF9zeW5jX2VudHJ5KFBHT3V0cHV0RGF0YSAqZGF0YSwgUmVsYXRp b24gcmVsYXRpb24pCiAJCQkJZW50cnktPnB1YmFjdGlvbnMucHVidXBkYXRlIHw9IHB1Yi0+cHVi YWN0aW9ucy5wdWJ1cGRhdGU7CiAJCQkJZW50cnktPnB1YmFjdGlvbnMucHViZGVsZXRlIHw9IHB1 Yi0+cHViYWN0aW9ucy5wdWJkZWxldGU7CiAJCQkJZW50cnktPnB1YmFjdGlvbnMucHVidHJ1bmNh dGUgfD0gcHViLT5wdWJhY3Rpb25zLnB1YnRydW5jYXRlOworCQkJCWVudHJ5LT5wdWJhY3Rpb25z LnB1YmRkbF9hbGwgfD0gcHViLT5wdWJhY3Rpb25zLnB1YmRkbF9hbGw7CisJCQkJZW50cnktPnB1 YmFjdGlvbnMucHViZGRsX3RhYmxlIHw9IHB1Yi0+cHViYWN0aW9ucy5wdWJkZGxfdGFibGU7CiAK IAkJCQkvKgogCQkJCSAqIFdlIHdhbnQgdG8gcHVibGlzaCB0aGUgY2hhbmdlcyBhcyB0aGUgdG9w LW1vc3QgYW5jZXN0b3IKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Rjb3AvY21kdGFnLmMgYi9z cmMvYmFja2VuZC90Y29wL2NtZHRhZy5jCmluZGV4IDRiZDcxM2EuLmNlMDljNWYgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL3Rjb3AvY21kdGFnLmMKKysrIGIvc3JjL2JhY2tlbmQvdGNvcC9jbWR0 YWcuYwpAQCAtMjYsMTAgKzI2LDExIEBAIHR5cGVkZWYgc3RydWN0IENvbW1hbmRUYWdCZWhhdmlv cgogCWNvbnN0IGJvb2wJdGFibGVfcmV3cml0ZV9vazsKIAljb25zdCBib29sCWRpc3BsYXlfcm93 Y291bnQ7CS8qIHNob3VsZCB0aGUgbnVtYmVyIG9mIHJvd3MgYWZmZWN0ZWQgYmUKIAkJCQkJCQkJ CSAqIHNob3duIGluIHRoZSBjb21tYW5kIGNvbXBsZXRpb24gc3RyaW5nICovCisJY29uc3QgYm9v bAlkZGxfcmVwbGljYXRpb25fb2s7CiB9IENvbW1hbmRUYWdCZWhhdmlvcjsKIAotI2RlZmluZSBQ R19DTURUQUcodGFnLCBuYW1lLCBldnRyZ29rLCByd3Jvaywgcm93Y250KSBcCi0JeyBuYW1lLCAo dWludDgpIChzaXplb2YobmFtZSkgLSAxKSwgZXZ0cmdvaywgcndyb2ssIHJvd2NudCB9LAorI2Rl ZmluZSBQR19DTURUQUcodGFnLCBuYW1lLCBldnRyZ29rLCByd3Jvaywgcm93Y250LCBkZGxyZXBs b2spIFwKKwl7IG5hbWUsICh1aW50OCkgKHNpemVvZihuYW1lKSAtIDEpLCBldnRyZ29rLCByd3Jv aywgcm93Y250LCBkZGxyZXBsb2sgfSwKIAogc3RhdGljIGNvbnN0IENvbW1hbmRUYWdCZWhhdmlv ciB0YWdfYmVoYXZpb3JbQ09NTUFORF9UQUdfTkVYVFRBR10gPSB7CiAjaW5jbHVkZSAidGNvcC9j bWR0YWdsaXN0LmgiCkBAIC01Nyw2ICs1OCwyMSBAQCBHZXRDb21tYW5kVGFnTmFtZUFuZExlbihD b21tYW5kVGFnIGNvbW1hbmRUYWcsIFNpemUgKmxlbikKIAlyZXR1cm4gdGFnX2JlaGF2aW9yW2Nv bW1hbmRUYWddLm5hbWU7CiB9CiAKK0NvbW1hbmRUYWcgKgorR2V0Q29tbWFuZFRhZ3NGb3JERExS ZXBsKGludCAqbmNvbW1hbmRzKQoreworCUNvbW1hbmRUYWcgKmRkbHJlcGxfY29tbWFuZHMgPSBw YWxsb2MwKENPTU1BTkRfVEFHX05FWFRUQUcgKiBzaXplb2YoQ29tbWFuZFRhZykpOworCSpuY29t bWFuZHMgPSAwOworCisJZm9yKGludCBpID0gMDsgaSA8IENPTU1BTkRfVEFHX05FWFRUQUc7IGkr KykKKwl7CisJCWlmICh0YWdfYmVoYXZpb3JbaV0uZGRsX3JlcGxpY2F0aW9uX29rKQorCQkJZGRs cmVwbF9jb21tYW5kc1soKm5jb21tYW5kcykrK10gPSAoQ29tbWFuZFRhZykgaTsKKwl9CisKKwly ZXR1cm4gZGRscmVwbF9jb21tYW5kczsKK30KKwogYm9vbAogY29tbWFuZF90YWdfZGlzcGxheV9y b3djb3VudChDb21tYW5kVGFnIGNvbW1hbmRUYWcpCiB7CkBAIC03NSw2ICs5MSwxMiBAQCBjb21t YW5kX3RhZ190YWJsZV9yZXdyaXRlX29rKENvbW1hbmRUYWcgY29tbWFuZFRhZykKIAlyZXR1cm4g dGFnX2JlaGF2aW9yW2NvbW1hbmRUYWddLnRhYmxlX3Jld3JpdGVfb2s7CiB9CiAKK2Jvb2wKK2Nv bW1hbmRfdGFnX2RkbF9yZXBsaWNhdGlvbl9vayhDb21tYW5kVGFnIGNvbW1hbmRUYWcpCit7CisJ cmV0dXJuIHRhZ19iZWhhdmlvcltjb21tYW5kVGFnXS5kZGxfcmVwbGljYXRpb25fb2s7Cit9CisK IC8qCiAgKiBTZWFyY2ggQ29tbWFuZFRhZyBieSBuYW1lCiAgKgpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvdGNvcC91dGlsaXR5LmMgYi9zcmMvYmFja2VuZC90Y29wL3V0aWxpdHkuYwppbmRleCAx ZTgzY2ZlLi4zYjg0MDAzIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC90Y29wL3V0aWxpdHkuYwor KysgYi9zcmMvYmFja2VuZC90Y29wL3V0aWxpdHkuYwpAQCAtMTY2Niw4ICsxNjY2LDExIEBAIFBy b2Nlc3NVdGlsaXR5U2xvdyhQYXJzZVN0YXRlICpwc3RhdGUsCiAJCQkJYnJlYWs7CiAKIAkJCWNh c2UgVF9DcmVhdGVUYWJsZUFzU3RtdDoKKwkJCQlFdmVudFRyaWdnZXJUYWJsZUluaXRXcml0ZVN0 YXJ0KHBhcnNldHJlZSk7CiAJCQkJYWRkcmVzcyA9IEV4ZWNDcmVhdGVUYWJsZUFzKHBzdGF0ZSwg KENyZWF0ZVRhYmxlQXNTdG10ICopIHBhcnNldHJlZSwKIAkJCQkJCQkJCQkJcGFyYW1zLCBxdWVy eUVudiwgcWMpOworCQkJCUV2ZW50VHJpZ2dlclRhYmxlSW5pdFdyaXRlRW5kKGFkZHJlc3MpOwor CQkJCWNvbW1hbmRDb2xsZWN0ZWQgPSB0cnVlOwogCQkJCWJyZWFrOwogCiAJCQljYXNlIFRfUmVm cmVzaE1hdFZpZXdTdG10OgpAQCAtMTgzNSwxNCArMTgzOCwyMCBAQCBQcm9jZXNzVXRpbGl0eVNs b3coUGFyc2VTdGF0ZSAqcHN0YXRlLAogCiAJCQljYXNlIFRfQ3JlYXRlUHVibGljYXRpb25TdG10 OgogCQkJCWFkZHJlc3MgPSBDcmVhdGVQdWJsaWNhdGlvbihwc3RhdGUsIChDcmVhdGVQdWJsaWNh dGlvblN0bXQgKikgcGFyc2V0cmVlKTsKKworCQkJCS8qCisJCQkJICogQ3JlYXRlUHVibGljYXRp b24gY2FsbHMgRXZlbnRUcmlnZ2VyQ29sbGVjdENyZWF0ZVB1YmxpY2F0aW9uCisJCQkJICogZGly ZWN0bHkKKwkJCQkgKi8KKwkJCQljb21tYW5kQ29sbGVjdGVkID0gdHJ1ZTsKIAkJCQlicmVhazsK IAogCQkJY2FzZSBUX0FsdGVyUHVibGljYXRpb25TdG10OgogCQkJCUFsdGVyUHVibGljYXRpb24o cHN0YXRlLCAoQWx0ZXJQdWJsaWNhdGlvblN0bXQgKikgcGFyc2V0cmVlKTsKIAogCQkJCS8qCi0J CQkJICogQWx0ZXJQdWJsaWNhdGlvbiBjYWxscyBFdmVudFRyaWdnZXJDb2xsZWN0U2ltcGxlQ29t bWFuZAotCQkJCSAqIGRpcmVjdGx5CisJCQkJICogQWx0ZXJQdWJsaWNhdGlvbiBjYWxscyBFdmVu dFRyaWdnZXJDb2xsZWN0U2ltcGxlQ29tbWFuZCBhbmQKKwkJCQkgKiBFdmVudFRyaWdnZXJDb2xs ZWN0QWx0ZXJQdWJsaWNhdGlvbiBkaXJlY3RseQogCQkJCSAqLwogCQkJCWNvbW1hbmRDb2xsZWN0 ZWQgPSB0cnVlOwogCQkJCWJyZWFrOwpAQCAtMjI0OSw2ICsyMjU4LDggQEAgc3RyaW5naWZ5X29i anR5cGUoT2JqZWN0VHlwZSBvYmp0eXBlLCBib29sIGlzZ3JhbnQpCiAJCQlyZXR1cm4gIlBPTElD WSI7CiAJCWNhc2UgT0JKRUNUX1BST0NFRFVSRToKIAkJCXJldHVybiAiUFJPQ0VEVVJFIjsKKwkJ Y2FzZSBPQkpFQ1RfUFVCTElDQVRJT046CisJCQlyZXR1cm4gIlBVQkxJQ0FUSU9OIjsKIAkJY2Fz ZSBPQkpFQ1RfUk9MRToKIAkJCXJldHVybiAiUk9MRSI7CiAJCWNhc2UgT0JKRUNUX1JPVVRJTkU6 CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9ldnRjYWNoZS5jIGIvc3JjL2Jh Y2tlbmQvdXRpbHMvY2FjaGUvZXZ0Y2FjaGUuYwppbmRleCAxZjVlN2ViLi5mMmE5ZjVkIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9ldnRjYWNoZS5jCisrKyBiL3NyYy9iYWNr ZW5kL3V0aWxzL2NhY2hlL2V2dGNhY2hlLmMKQEAgLTE2Nyw2ICsxNjcsOCBAQCBCdWlsZEV2ZW50 VHJpZ2dlckNhY2hlKHZvaWQpCiAJCQlldmVudCA9IEVWVF9TUUxEcm9wOwogCQllbHNlIGlmIChz dHJjbXAoZXZ0ZXZlbnQsICJ0YWJsZV9yZXdyaXRlIikgPT0gMCkKIAkJCWV2ZW50ID0gRVZUX1Rh YmxlUmV3cml0ZTsKKwkJZWxzZSBpZiAoc3RyY21wKGV2dGV2ZW50LCAidGFibGVfaW5pdF93cml0 ZSIpID09IDApCisJCQlldmVudCA9IEVWVF9UYWJsZUluaXRXcml0ZTsKIAkJZWxzZQogCQkJY29u dGludWU7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL3JlbGNhY2hlLmMg Yi9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9yZWxjYWNoZS5jCmluZGV4IGQxNzFjZmMuLjVmOGZi MDQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL3JlbGNhY2hlLmMKKysrIGIv c3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvcmVsY2FjaGUuYwpAQCAtNTY5MCw2ICs1NjkwLDggQEAg UmVsYXRpb25CdWlsZFB1YmxpY2F0aW9uRGVzYyhSZWxhdGlvbiByZWxhdGlvbiwgUHVibGljYXRp b25EZXNjICpwdWJkZXNjKQogCQlwdWJkZXNjLT5wdWJhY3Rpb25zLnB1YnVwZGF0ZSB8PSBwdWJm b3JtLT5wdWJ1cGRhdGU7CiAJCXB1YmRlc2MtPnB1YmFjdGlvbnMucHViZGVsZXRlIHw9IHB1YmZv cm0tPnB1YmRlbGV0ZTsKIAkJcHViZGVzYy0+cHViYWN0aW9ucy5wdWJ0cnVuY2F0ZSB8PSBwdWJm b3JtLT5wdWJ0cnVuY2F0ZTsKKwkJcHViZGVzYy0+cHViYWN0aW9ucy5wdWJkZGxfYWxsIHw9IHB1 YmZvcm0tPnB1YmRkbF9hbGw7CisJCXB1YmRlc2MtPnB1YmFjdGlvbnMucHViZGRsX3RhYmxlIHw9 IHB1YmZvcm0tPnB1YmRkbF90YWJsZTsKIAogCQkvKgogCQkgKiBDaGVjayBpZiBhbGwgY29sdW1u cyByZWZlcmVuY2VkIGluIHRoZSBmaWx0ZXIgZXhwcmVzc2lvbiBhcmUgcGFydApkaWZmIC0tZ2l0 IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMK aW5kZXggMmMwYTk2OS4uMTQ0ZmY1ZSAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1 bXAuYworKysgYi9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jCkBAIC0zOTQ5LDYgKzM5NDksOCBA QCBnZXRQdWJsaWNhdGlvbnMoQXJjaGl2ZSAqZm91dCwgaW50ICpudW1QdWJsaWNhdGlvbnMpCiAJ aW50CQkJaV9wdWJ1cGRhdGU7CiAJaW50CQkJaV9wdWJkZWxldGU7CiAJaW50CQkJaV9wdWJ0cnVu Y2F0ZTsKKwlpbnQJCQlpX3B1YmRkbF9hbGw7CisJaW50CQkJaV9wdWJkZGxfdGFibGU7CiAJaW50 CQkJaV9wdWJ2aWFyb290OwogCWludAkJCWksCiAJCQkJbnR1cHM7CkBAIC0zOTY0LDIzICszOTY2 LDIzIEBAIGdldFB1YmxpY2F0aW9ucyhBcmNoaXZlICpmb3V0LCBpbnQgKm51bVB1YmxpY2F0aW9u cykKIAlyZXNldFBRRXhwQnVmZmVyKHF1ZXJ5KTsKIAogCS8qIEdldCB0aGUgcHVibGljYXRpb25z LiAqLwotCWlmIChmb3V0LT5yZW1vdGVWZXJzaW9uID49IDEzMDAwMCkKKwlpZiAoZm91dC0+cmVt b3RlVmVyc2lvbiA+PSAxNjAwMDApCiAJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKHF1ZXJ5LAogCQkJ CQkJCSAiU0VMRUNUIHAudGFibGVvaWQsIHAub2lkLCBwLnB1Ym5hbWUsICIKIAkJCQkJCQkgInAu cHVib3duZXIsICIKLQkJCQkJCQkgInAucHViYWxsdGFibGVzLCBwLnB1Ymluc2VydCwgcC5wdWJ1 cGRhdGUsIHAucHViZGVsZXRlLCBwLnB1YnRydW5jYXRlLCBwLnB1YnZpYXJvb3QgIgorCQkJCQkJ CSAicC5wdWJhbGx0YWJsZXMsIHAucHViaW5zZXJ0LCBwLnB1YnVwZGF0ZSwgcC5wdWJkZWxldGUs IHAucHVidHJ1bmNhdGUsIHAucHViZGRsX2FsbCwgcC5wdWJkZGxfdGFibGUsIHAucHVidmlhcm9v dCAiCiAJCQkJCQkJICJGUk9NIHBnX3B1YmxpY2F0aW9uIHAiKTsKIAllbHNlIGlmIChmb3V0LT5y ZW1vdGVWZXJzaW9uID49IDExMDAwMCkKIAkJYXBwZW5kUFFFeHBCdWZmZXJTdHIocXVlcnksCiAJ CQkJCQkJICJTRUxFQ1QgcC50YWJsZW9pZCwgcC5vaWQsIHAucHVibmFtZSwgIgogCQkJCQkJCSAi cC5wdWJvd25lciwgIgotCQkJCQkJCSAicC5wdWJhbGx0YWJsZXMsIHAucHViaW5zZXJ0LCBwLnB1 YnVwZGF0ZSwgcC5wdWJkZWxldGUsIHAucHVidHJ1bmNhdGUsIGZhbHNlIEFTIHB1YnZpYXJvb3Qg IgorCQkJCQkJCSAicC5wdWJhbGx0YWJsZXMsIHAucHViaW5zZXJ0LCBwLnB1YnVwZGF0ZSwgcC5w dWJkZWxldGUsIHAucHVidHJ1bmNhdGUsIGZhbHNlIGFzIHAucHViZGRsX2FsbCwgZmFsc2UgYXMg cC5wdWJkZGxfdGFibGUsIGZhbHNlIEFTIHB1YnZpYXJvb3QgIgogCQkJCQkJCSAiRlJPTSBwZ19w dWJsaWNhdGlvbiBwIik7CiAJZWxzZQogCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihxdWVyeSwKIAkJ CQkJCQkgIlNFTEVDVCBwLnRhYmxlb2lkLCBwLm9pZCwgcC5wdWJuYW1lLCAiCiAJCQkJCQkJICJw LnB1Ym93bmVyLCAiCi0JCQkJCQkJICJwLnB1YmFsbHRhYmxlcywgcC5wdWJpbnNlcnQsIHAucHVi dXBkYXRlLCBwLnB1YmRlbGV0ZSwgZmFsc2UgQVMgcHVidHJ1bmNhdGUsIGZhbHNlIEFTIHB1YnZp YXJvb3QgIgorCQkJCQkJCSAicC5wdWJhbGx0YWJsZXMsIHAucHViaW5zZXJ0LCBwLnB1YnVwZGF0 ZSwgcC5wdWJkZWxldGUsIGZhbHNlIEFTIHB1YnRydW5jYXRlLCBmYWxzZSBhcyBwLnB1YmRkbF9h bGwsIGZhbHNlIGFzIHAucHViZGRsX3RhYmxlLCBmYWxzZSBBUyBwdWJ2aWFyb290ICIKIAkJCQkJ CQkgIkZST00gcGdfcHVibGljYXRpb24gcCIpOwogCiAJcmVzID0gRXhlY3V0ZVNxbFF1ZXJ5KGZv dXQsIHF1ZXJ5LT5kYXRhLCBQR1JFU19UVVBMRVNfT0spOwpAQCAtMzk5Niw2ICszOTk4LDggQEAg Z2V0UHVibGljYXRpb25zKEFyY2hpdmUgKmZvdXQsIGludCAqbnVtUHVibGljYXRpb25zKQogCWlf cHVidXBkYXRlID0gUFFmbnVtYmVyKHJlcywgInB1YnVwZGF0ZSIpOwogCWlfcHViZGVsZXRlID0g UFFmbnVtYmVyKHJlcywgInB1YmRlbGV0ZSIpOwogCWlfcHVidHJ1bmNhdGUgPSBQUWZudW1iZXIo cmVzLCAicHVidHJ1bmNhdGUiKTsKKwlpX3B1YmRkbF9hbGwgPSBQUWZudW1iZXIocmVzLCAicHVi ZGRsX2FsbCIpOworCWlfcHViZGRsX3RhYmxlID0gUFFmbnVtYmVyKHJlcywgInB1YmRkbF90YWJs ZSIpOwogCWlfcHVidmlhcm9vdCA9IFBRZm51bWJlcihyZXMsICJwdWJ2aWFyb290Iik7CiAKIAlw dWJpbmZvID0gcGdfbWFsbG9jKG50dXBzICogc2l6ZW9mKFB1YmxpY2F0aW9uSW5mbykpOwpAQCAt NDAxOSw2ICs0MDIzLDEwIEBAIGdldFB1YmxpY2F0aW9ucyhBcmNoaXZlICpmb3V0LCBpbnQgKm51 bVB1YmxpY2F0aW9ucykKIAkJCShzdHJjbXAoUFFnZXR2YWx1ZShyZXMsIGksIGlfcHViZGVsZXRl KSwgInQiKSA9PSAwKTsKIAkJcHViaW5mb1tpXS5wdWJ0cnVuY2F0ZSA9CiAJCQkoc3RyY21wKFBR Z2V0dmFsdWUocmVzLCBpLCBpX3B1YnRydW5jYXRlKSwgInQiKSA9PSAwKTsKKwkJcHViaW5mb1tp XS5wdWJkZGxfYWxsID0KKwkJCShzdHJjbXAoUFFnZXR2YWx1ZShyZXMsIGksIGlfcHViZGRsX2Fs bCksICJ0IikgPT0gMCk7CisJCXB1YmluZm9baV0ucHViZGRsX3RhYmxlID0KKwkJCShzdHJjbXAo UFFnZXR2YWx1ZShyZXMsIGksIGlfcHViZGRsX3RhYmxlKSwgInQiKSA9PSAwKTsKIAkJcHViaW5m b1tpXS5wdWJ2aWFyb290ID0KIAkJCShzdHJjbXAoUFFnZXR2YWx1ZShyZXMsIGksIGlfcHVidmlh cm9vdCksICJ0IikgPT0gMCk7CiAKQEAgLTQwOTgsNyArNDEwNiwyOSBAQCBkdW1wUHVibGljYXRp b24oQXJjaGl2ZSAqZm91dCwgY29uc3QgUHVibGljYXRpb25JbmZvICpwdWJpbmZvKQogCQlmaXJz dCA9IGZhbHNlOwogCX0KIAotCWFwcGVuZFBRRXhwQnVmZmVyQ2hhcihxdWVyeSwgJ1wnJyk7CisJ YXBwZW5kUFFFeHBCdWZmZXJTdHIocXVlcnksICInIik7CisKKwlhcHBlbmRQUUV4cEJ1ZmZlclN0 cihxdWVyeSwgIiwgZGRsID0gJyIpOworCWZpcnN0ID0gdHJ1ZTsKKwlpZiAocHViaW5mby0+cHVi ZGRsX2FsbCkKKwl7CisJCWlmICghZmlyc3QpCisJCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihxdWVy eSwgIiwgIik7CisKKwkJYXBwZW5kUFFFeHBCdWZmZXJTdHIocXVlcnksICJhbGwiKTsKKwkJZmly c3QgPSBmYWxzZTsKKwl9CisKKwlpZiAocHViaW5mby0+cHViZGRsX3RhYmxlKQorCXsKKwkJaWYg KCFmaXJzdCkKKwkJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKHF1ZXJ5LCAiLCAiKTsKKworCQlhcHBl bmRQUUV4cEJ1ZmZlclN0cihxdWVyeSwgInRhYmxlIik7CisJCWZpcnN0ID0gZmFsc2U7CisJfQor CisJYXBwZW5kUFFFeHBCdWZmZXJTdHIocXVlcnksICInIik7CiAKIAlpZiAocHViaW5mby0+cHVi dmlhcm9vdCkKIAkJYXBwZW5kUFFFeHBCdWZmZXJTdHIocXVlcnksICIsIHB1Ymxpc2hfdmlhX3Bh cnRpdGlvbl9yb290ID0gdHJ1ZSIpOwpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1 bXAuaCBiL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmgKaW5kZXggZTdjYmQ4ZC4uZTMyNjc0MGQg MTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmgKKysrIGIvc3JjL2Jpbi9wZ19k dW1wL3BnX2R1bXAuaApAQCAtNjE5LDYgKzYxOSw4IEBAIHR5cGVkZWYgc3RydWN0IF9QdWJsaWNh dGlvbkluZm8KIAlib29sCQlwdWJ1cGRhdGU7CiAJYm9vbAkJcHViZGVsZXRlOwogCWJvb2wJCXB1 YnRydW5jYXRlOworCWJvb2wJCXB1YmRkbF9hbGw7CisJYm9vbAkJcHViZGRsX3RhYmxlOwogCWJv b2wJCXB1YnZpYXJvb3Q7CiB9IFB1YmxpY2F0aW9uSW5mbzsKIApkaWZmIC0tZ2l0IGEvc3JjL2Jp bi9wZ19kdW1wL3QvMDAyX3BnX2R1bXAucGwgYi9zcmMvYmluL3BnX2R1bXAvdC8wMDJfcGdfZHVt cC5wbAppbmRleCAyZWVlZjJhLi4xNmI0ZGFmIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAv dC8wMDJfcGdfZHVtcC5wbAorKysgYi9zcmMvYmluL3BnX2R1bXAvdC8wMDJfcGdfZHVtcC5wbApA QCAtMjQ4NCw3ICsyNDg0LDcgQEAgbXkgJXRlc3RzID0gKAogCQljcmVhdGVfb3JkZXIgPT4gNTAs CiAJCWNyZWF0ZV9zcWwgICA9PiAnQ1JFQVRFIFBVQkxJQ0FUSU9OIHB1YjE7JywKIAkJcmVnZXhw ICAgICAgID0+IHFyL14KLQkJCVxRQ1JFQVRFIFBVQkxJQ0FUSU9OIHB1YjEgV0lUSCAocHVibGlz aCA9ICdpbnNlcnQsIHVwZGF0ZSwgZGVsZXRlLCB0cnVuY2F0ZScpO1xFCisJCQlcUUNSRUFURSBQ VUJMSUNBVElPTiBwdWIxIFdJVEggKHB1Ymxpc2ggPSAnaW5zZXJ0LCB1cGRhdGUsIGRlbGV0ZSwg dHJ1bmNhdGUnLCBkZGwgPSAnJyk7XEUKIAkJCS94bSwKIAkJbGlrZSA9PiB7ICVmdWxsX3J1bnMs IHNlY3Rpb25fcG9zdF9kYXRhID0+IDEsIH0sCiAJfSwKQEAgLTI0OTMsOSArMjQ5Myw5IEBAIG15 ICV0ZXN0cyA9ICgKIAkJY3JlYXRlX29yZGVyID0+IDUwLAogCQljcmVhdGVfc3FsICAgPT4gJ0NS RUFURSBQVUJMSUNBVElPTiBwdWIyCiAJCQkJCQkgRk9SIEFMTCBUQUJMRVMKLQkJCQkJCSBXSVRI IChwdWJsaXNoID0gXCdcJyk7JywKKwkJCQkJCSBXSVRIIChwdWJsaXNoID0gXCdcJywgZGRsID0g XCdcJyk7JywKIAkJcmVnZXhwID0+IHFyL14KLQkJCVxRQ1JFQVRFIFBVQkxJQ0FUSU9OIHB1YjIg Rk9SIEFMTCBUQUJMRVMgV0lUSCAocHVibGlzaCA9ICcnKTtcRQorCQkJXFFDUkVBVEUgUFVCTElD QVRJT04gcHViMiBGT1IgQUxMIFRBQkxFUyBXSVRIIChwdWJsaXNoID0gJycsIGRkbCA9ICcnKTtc RQogCQkJL3htLAogCQlsaWtlID0+IHsgJWZ1bGxfcnVucywgc2VjdGlvbl9wb3N0X2RhdGEgPT4g MSwgfSwKIAl9LApAQCAtMjUwNCw3ICsyNTA0LDcgQEAgbXkgJXRlc3RzID0gKAogCQljcmVhdGVf b3JkZXIgPT4gNTAsCiAJCWNyZWF0ZV9zcWwgICA9PiAnQ1JFQVRFIFBVQkxJQ0FUSU9OIHB1YjM7 JywKIAkJcmVnZXhwICAgICAgID0+IHFyL14KLQkJCVxRQ1JFQVRFIFBVQkxJQ0FUSU9OIHB1YjMg V0lUSCAocHVibGlzaCA9ICdpbnNlcnQsIHVwZGF0ZSwgZGVsZXRlLCB0cnVuY2F0ZScpO1xFCisJ CQlcUUNSRUFURSBQVUJMSUNBVElPTiBwdWIzIFdJVEggKHB1Ymxpc2ggPSAnaW5zZXJ0LCB1cGRh dGUsIGRlbGV0ZSwgdHJ1bmNhdGUnLCBkZGwgPSAnJyk7XEUKIAkJCS94bSwKIAkJbGlrZSA9PiB7 ICVmdWxsX3J1bnMsIHNlY3Rpb25fcG9zdF9kYXRhID0+IDEsIH0sCiAJfSwKQEAgLTI1MTMsNyAr MjUxMyw3IEBAIG15ICV0ZXN0cyA9ICgKIAkJY3JlYXRlX29yZGVyID0+IDUwLAogCQljcmVhdGVf c3FsICAgPT4gJ0NSRUFURSBQVUJMSUNBVElPTiBwdWI0OycsCiAJCXJlZ2V4cCAgICAgICA9PiBx ci9eCi0JCQlcUUNSRUFURSBQVUJMSUNBVElPTiBwdWI0IFdJVEggKHB1Ymxpc2ggPSAnaW5zZXJ0 LCB1cGRhdGUsIGRlbGV0ZSwgdHJ1bmNhdGUnKTtcRQorCQkJXFFDUkVBVEUgUFVCTElDQVRJT04g cHViNCBXSVRIIChwdWJsaXNoID0gJ2luc2VydCwgdXBkYXRlLCBkZWxldGUsIHRydW5jYXRlJywg ZGRsID0gJycpO1xFCiAJCQkveG0sCiAJCWxpa2UgPT4geyAlZnVsbF9ydW5zLCBzZWN0aW9uX3Bv c3RfZGF0YSA9PiAxLCB9LAogCX0sCmRpZmYgLS1naXQgYS9zcmMvYmluL3BzcWwvZGVzY3JpYmUu YyBiL3NyYy9iaW4vcHNxbC9kZXNjcmliZS5jCmluZGV4IGM4YTBiYjcuLjc4MzJlZjAgMTAwNjQ0 Ci0tLSBhL3NyYy9iaW4vcHNxbC9kZXNjcmliZS5jCisrKyBiL3NyYy9iaW4vcHNxbC9kZXNjcmli ZS5jCkBAIC02MTYyLDcgKzYxNjIsNyBAQCBsaXN0UHVibGljYXRpb25zKGNvbnN0IGNoYXIgKnBh dHRlcm4pCiAJUFFFeHBCdWZmZXJEYXRhIGJ1ZjsKIAlQR3Jlc3VsdCAgICpyZXM7CiAJcHJpbnRR dWVyeU9wdCBteW9wdCA9IHBzZXQucG9wdDsKLQlzdGF0aWMgY29uc3QgYm9vbCB0cmFuc2xhdGVf Y29sdW1uc1tdID0ge2ZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZh bHNlLCBmYWxzZX07CisJc3RhdGljIGNvbnN0IGJvb2wgdHJhbnNsYXRlX2NvbHVtbnNbXSA9IHtm YWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZh bHNlLCBmYWxzZX07CiAKIAlpZiAocHNldC5zdmVyc2lvbiA8IDEwMDAwMCkKIAl7CkBAIC02MTc5 LDEzICs2MTc5LDIzIEBAIGxpc3RQdWJsaWNhdGlvbnMoY29uc3QgY2hhciAqcGF0dGVybikKIAlw cmludGZQUUV4cEJ1ZmZlcigmYnVmLAogCQkJCQkgICJTRUxFQ1QgcHVibmFtZSBBUyBcIiVzXCIs XG4iCiAJCQkJCSAgIiAgcGdfY2F0YWxvZy5wZ19nZXRfdXNlcmJ5aWQocHVib3duZXIpIEFTIFwi JXNcIixcbiIKLQkJCQkJICAiICBwdWJhbGx0YWJsZXMgQVMgXCIlc1wiLFxuIgotCQkJCQkgICIg IHB1Ymluc2VydCBBUyBcIiVzXCIsXG4iCi0JCQkJCSAgIiAgcHVidXBkYXRlIEFTIFwiJXNcIixc biIKLQkJCQkJICAiICBwdWJkZWxldGUgQVMgXCIlc1wiIiwKKwkJCQkJICAiICBwdWJhbGx0YWJs ZXMgQVMgXCIlc1wiIiwKIAkJCQkJICBnZXR0ZXh0X25vb3AoIk5hbWUiKSwKIAkJCQkJICBnZXR0 ZXh0X25vb3AoIk93bmVyIiksCi0JCQkJCSAgZ2V0dGV4dF9ub29wKCJBbGwgdGFibGVzIiksCisJ CQkJCSAgZ2V0dGV4dF9ub29wKCJBbGwgdGFibGVzIikpOworCWlmIChwc2V0LnN2ZXJzaW9uID49 IDE2MDAwMCkKKwl7CisJCWFwcGVuZFBRRXhwQnVmZmVyKCZidWYsCisJCQkJCQkgICIsXG4gIHB1 YmRkbF9hbGwgQVMgXCIlc1wiIiwKKwkJCQkJCSAgZ2V0dGV4dF9ub29wKCJBbGwgRERMcyIpKTsK KwkJYXBwZW5kUFFFeHBCdWZmZXIoJmJ1ZiwKKwkJCQkJCSAgIixcbiAgcHViZGRsX3RhYmxlIEFT IFwiJXNcIiIsCisJCQkJCQkgIGdldHRleHRfbm9vcCgiVGFibGUgRERMcyIpKTsKKwl9CisJYXBw ZW5kUFFFeHBCdWZmZXIoJmJ1ZiwKKwkJCQkJICAiLFxuICBwdWJpbnNlcnQgQVMgXCIlc1wiLFxu IgorCQkJCQkgICIgIHB1YnVwZGF0ZSBBUyBcIiVzXCIsXG4iCisJCQkJCSAgIiAgcHViZGVsZXRl IEFTIFwiJXNcIiIsCiAJCQkJCSAgZ2V0dGV4dF9ub29wKCJJbnNlcnRzIiksCiAJCQkJCSAgZ2V0 dGV4dF9ub29wKCJVcGRhdGVzIiksCiAJCQkJCSAgZ2V0dGV4dF9ub29wKCJEZWxldGVzIikpOwpA QCAtNjE5Nyw3ICs2MjA3LDYgQEAgbGlzdFB1YmxpY2F0aW9ucyhjb25zdCBjaGFyICpwYXR0ZXJu KQogCQlhcHBlbmRQUUV4cEJ1ZmZlcigmYnVmLAogCQkJCQkJICAiLFxuICBwdWJ2aWFyb290IEFT IFwiJXNcIiIsCiAJCQkJCQkgIGdldHRleHRfbm9vcCgiVmlhIHJvb3QiKSk7Ci0KIAlhcHBlbmRQ UUV4cEJ1ZmZlclN0cigmYnVmLAogCQkJCQkJICJcbkZST00gcGdfY2F0YWxvZy5wZ19wdWJsaWNh dGlvblxuIik7CiAKQEAgLTYyODcsNiArNjI5Niw3IEBAIGRlc2NyaWJlUHVibGljYXRpb25zKGNv bnN0IGNoYXIgKnBhdHRlcm4pCiAJUEdyZXN1bHQgICAqcmVzOwogCWJvb2wJCWhhc19wdWJ0cnVu Y2F0ZTsKIAlib29sCQloYXNfcHVidmlhcm9vdDsKKwlib29sCQloYXNfcHViZGRsOwogCiAJUFFF eHBCdWZmZXJEYXRhIHRpdGxlOwogCXByaW50VGFibGVDb250ZW50IGNvbnQ7CkBAIC02MzAzLDEz ICs2MzEzLDE5IEBAIGRlc2NyaWJlUHVibGljYXRpb25zKGNvbnN0IGNoYXIgKnBhdHRlcm4pCiAK IAloYXNfcHVidHJ1bmNhdGUgPSAocHNldC5zdmVyc2lvbiA+PSAxMTAwMDApOwogCWhhc19wdWJ2 aWFyb290ID0gKHBzZXQuc3ZlcnNpb24gPj0gMTMwMDAwKTsKKwloYXNfcHViZGRsID0gIChwc2V0 LnN2ZXJzaW9uID49IDE2MDAwMCk7CiAKIAlpbml0UFFFeHBCdWZmZXIoJmJ1Zik7CiAKIAlwcmlu dGZQUUV4cEJ1ZmZlcigmYnVmLAogCQkJCQkgICJTRUxFQ1Qgb2lkLCBwdWJuYW1lLFxuIgogCQkJ CQkgICIgIHBnX2NhdGFsb2cucGdfZ2V0X3VzZXJieWlkKHB1Ym93bmVyKSBBUyBvd25lcixcbiIK LQkJCQkJICAiICBwdWJhbGx0YWJsZXMsIHB1Ymluc2VydCwgcHVidXBkYXRlLCBwdWJkZWxldGUi KTsKKwkJCQkJICAiICBwdWJhbGx0YWJsZXMiKTsKKwlpZiAoaGFzX3B1YmRkbCkKKwkJYXBwZW5k UFFFeHBCdWZmZXJTdHIoJmJ1ZiwKKwkJCQkJCQkgIiwgcHViZGRsX2FsbCwgcHViZGRsX3RhYmxl Iik7CisJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmJ1ZiwKKwkJCQkJCSAiLCAgcHViaW5zZXJ0LCBw dWJ1cGRhdGUsIHB1YmRlbGV0ZSIpOwogCWlmIChoYXNfcHVidHJ1bmNhdGUpCiAJCWFwcGVuZFBR RXhwQnVmZmVyU3RyKCZidWYsCiAJCQkJCQkJICIsIHB1YnRydW5jYXRlIik7CkBAIC02MzY3LDYg KzYzODMsOCBAQCBkZXNjcmliZVB1YmxpY2F0aW9ucyhjb25zdCBjaGFyICpwYXR0ZXJuKQogCQkJ bmNvbHMrKzsKIAkJaWYgKGhhc19wdWJ2aWFyb290KQogCQkJbmNvbHMrKzsKKwkJaWYgKGhhc19w dWJkZGwpCisJCQluY29scyArPSAyOwogCiAJCWluaXRQUUV4cEJ1ZmZlcigmdGl0bGUpOwogCQlw cmludGZQUUV4cEJ1ZmZlcigmdGl0bGUsIF8oIlB1YmxpY2F0aW9uICVzIiksIHB1Ym5hbWUpOwpA QCAtNjM3NCw2ICs2MzkyLDExIEBAIGRlc2NyaWJlUHVibGljYXRpb25zKGNvbnN0IGNoYXIgKnBh dHRlcm4pCiAKIAkJcHJpbnRUYWJsZUFkZEhlYWRlcigmY29udCwgZ2V0dGV4dF9ub29wKCJPd25l ciIpLCB0cnVlLCBhbGlnbik7CiAJCXByaW50VGFibGVBZGRIZWFkZXIoJmNvbnQsIGdldHRleHRf bm9vcCgiQWxsIHRhYmxlcyIpLCB0cnVlLCBhbGlnbik7CisJCWlmIChoYXNfcHViZGRsKQorCQl7 CisJCQlwcmludFRhYmxlQWRkSGVhZGVyKCZjb250LCBnZXR0ZXh0X25vb3AoIkFsbCBERExzIiks IHRydWUsIGFsaWduKTsKKwkJCXByaW50VGFibGVBZGRIZWFkZXIoJmNvbnQsIGdldHRleHRfbm9v cCgiVGFibGUgRERMcyIpLCB0cnVlLCBhbGlnbik7CisJCX0KIAkJcHJpbnRUYWJsZUFkZEhlYWRl cigmY29udCwgZ2V0dGV4dF9ub29wKCJJbnNlcnRzIiksIHRydWUsIGFsaWduKTsKIAkJcHJpbnRU YWJsZUFkZEhlYWRlcigmY29udCwgZ2V0dGV4dF9ub29wKCJVcGRhdGVzIiksIHRydWUsIGFsaWdu KTsKIAkJcHJpbnRUYWJsZUFkZEhlYWRlcigmY29udCwgZ2V0dGV4dF9ub29wKCJEZWxldGVzIiks IHRydWUsIGFsaWduKTsKQEAgLTYzOTEsNiArNjQxNCwxMSBAQCBkZXNjcmliZVB1YmxpY2F0aW9u cyhjb25zdCBjaGFyICpwYXR0ZXJuKQogCQkJcHJpbnRUYWJsZUFkZENlbGwoJmNvbnQsIFBRZ2V0 dmFsdWUocmVzLCBpLCA3KSwgZmFsc2UsIGZhbHNlKTsKIAkJaWYgKGhhc19wdWJ2aWFyb290KQog CQkJcHJpbnRUYWJsZUFkZENlbGwoJmNvbnQsIFBRZ2V0dmFsdWUocmVzLCBpLCA4KSwgZmFsc2Us IGZhbHNlKTsKKwkJaWYgKGhhc19wdWJkZGwpCisJCXsKKwkJCXByaW50VGFibGVBZGRDZWxsKCZj b250LCBQUWdldHZhbHVlKHJlcywgaSwgOSksIGZhbHNlLCBmYWxzZSk7CisJCQlwcmludFRhYmxl QWRkQ2VsbCgmY29udCwgUFFnZXR2YWx1ZShyZXMsIGksIDEwKSwgZmFsc2UsIGZhbHNlKTsKKwkJ fQogCiAJCWlmICghcHViYWxsdGFibGVzKQogCQl7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9j YXRhbG9nL3BnX3Byb2MuZGF0IGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdAppbmRl eCBmNWQxYjAxLi41MDEzZDA0IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3By b2MuZGF0CisrKyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKQEAgLTExOTA1LDQg KzExOTA1LDE2IEBACiB7IG9pZCA9PiAnNDY0MycsIGRlc2NyID0+ICdleHBhbmQgSlNPTiBmb3Jt YXQgRERMIHRvIGEgcGxhaW4gRERMIGNvbW1hbmQnLAogICBwcm9uYW1lID0+ICdkZGxfZGVwYXJz ZV9leHBhbmRfY29tbWFuZCcsIHByb3JldHR5cGUgPT4gJ3RleHQnLAogICBwcm9hcmd0eXBlcyA9 PiAndGV4dCcsIHByb3NyYyA9PiAnZGRsX2RlcGFyc2VfZXhwYW5kX2NvbW1hbmQnIH0sCit7IG9p ZCA9PiAnNDY0NCcsIGRlc2NyID0+ICd0cmlnZ2VyIGZvciBkZGwgY29tbWFuZCBkZXBhcnNlIGVu ZCcsCisgIHByb25hbWUgPT4gJ3B1YmxpY2F0aW9uX2RlcGFyc2VfZGRsX2NvbW1hbmRfZW5kJywg cHJvcmV0dHlwZSA9PiAnZXZlbnRfdHJpZ2dlcicsCisgIHByb2FyZ3R5cGVzID0+ICcnLCBwcm9z cmMgPT4gJ3B1YmxpY2F0aW9uX2RlcGFyc2VfZGRsX2NvbW1hbmRfZW5kJyB9LAoreyBvaWQgPT4g JzQ2NDUnLCBkZXNjciA9PiAndHJpZ2dlciBmb3IgZGRsIGNvbW1hbmQgZGVwYXJzZSBzdGFydCcs CisgIHByb25hbWUgPT4gJ3B1YmxpY2F0aW9uX2RlcGFyc2VfZGRsX2NvbW1hbmRfc3RhcnQnLCBw cm9yZXR0eXBlID0+ICdldmVudF90cmlnZ2VyJywKKyAgcHJvYXJndHlwZXMgPT4gJycsIHByb3Ny YyA9PiAncHVibGljYXRpb25fZGVwYXJzZV9kZGxfY29tbWFuZF9zdGFydCcgfSwKK3sgb2lkID0+ ICc0NjQ2JywgZGVzY3IgPT4gJ3RyaWdnZXIgZm9yIGRkbCBjb21tYW5kIGRlcGFyc2UgdGFibGUg cmV3cml0ZScsCisgIHByb25hbWUgPT4gJ3B1YmxpY2F0aW9uX2RlcGFyc2VfdGFibGVfcmV3cml0 ZScsIHByb3JldHR5cGUgPT4gJ2V2ZW50X3RyaWdnZXInLAorICBwcm9hcmd0eXBlcyA9PiAnJywg cHJvc3JjID0+ICdwdWJsaWNhdGlvbl9kZXBhcnNlX3RhYmxlX3Jld3JpdGUnIH0sCit7IG9pZCA9 PiAnNDY0NycsIGRlc2NyID0+ICd0cmlnZ2VyIGZvciBkZGwgY29tbWFuZCBkZXBhcnNlIHRhYmxl IGluaXQnLAorICBwcm9uYW1lID0+ICdwdWJsaWNhdGlvbl9kZXBhcnNlX3RhYmxlX2luaXRfd3Jp dGUnLCBwcm9yZXR0eXBlID0+ICdldmVudF90cmlnZ2VyJywKKyAgcHJvYXJndHlwZXMgPT4gJycs IHByb3NyYyA9PiAncHVibGljYXRpb25fZGVwYXJzZV90YWJsZV9pbml0X3dyaXRlJyB9LAogXQpk aWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5oIGIvc3JjL2lu Y2x1ZGUvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5oCmluZGV4IDZlY2FhMmEuLmQ2MzZkY2MgMTAw NjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHVibGljYXRpb24uaAorKysgYi9zcmMv aW5jbHVkZS9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmgKQEAgLTU0LDYgKzU0LDEyIEBAIENBVEFM T0cocGdfcHVibGljYXRpb24sNjEwNCxQdWJsaWNhdGlvblJlbGF0aW9uSWQpCiAKIAkvKiB0cnVl IGlmIHBhcnRpdGlvbiBjaGFuZ2VzIGFyZSBwdWJsaXNoZWQgdXNpbmcgcm9vdCBzY2hlbWEgKi8K IAlib29sCQlwdWJ2aWFyb290OworCisJLyogdHJ1ZSBpZiBhbGwgc3VwcG9ydGVkIGRkbHMgYXJl IHB1Ymxpc2hlZCAqLworCWJvb2wJCXB1YmRkbF9hbGw7CisKKwkvKiB0cnVlIGlmIHRhYmxlIGRk bHMgYXJlIHB1Ymxpc2hlZCAqLworCWJvb2wJCXB1YmRkbF90YWJsZTsKIH0gRm9ybURhdGFfcGdf cHVibGljYXRpb247CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0KQEAgLTcyLDYgKzc4LDggQEAgdHlw ZWRlZiBzdHJ1Y3QgUHVibGljYXRpb25BY3Rpb25zCiAJYm9vbAkJcHVidXBkYXRlOwogCWJvb2wJ CXB1YmRlbGV0ZTsKIAlib29sCQlwdWJ0cnVuY2F0ZTsKKwlib29sCQlwdWJkZGxfYWxsOworCWJv b2wJCXB1YmRkbF90YWJsZTsKIH0gUHVibGljYXRpb25BY3Rpb25zOwogCiB0eXBlZGVmIHN0cnVj dCBQdWJsaWNhdGlvbkRlc2MKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2V2ZW50 X3RyaWdnZXIuaCBiL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuaAppbmRleCA0 OGM2NWVmLi5iYWFlMWRjIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jb21tYW5kcy9ldmVudF90 cmlnZ2VyLmgKKysrIGIvc3JjL2luY2x1ZGUvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5oCkBAIC05 NCw2ICs5NCwxMCBAQCBleHRlcm4gdm9pZCBFdmVudFRyaWdnZXJERExDb21tYW5kRW5kKE5vZGUg KnBhcnNldHJlZSk7CiBleHRlcm4gdm9pZCBFdmVudFRyaWdnZXJTUUxEcm9wKE5vZGUgKnBhcnNl dHJlZSk7CiBleHRlcm4gdm9pZCBFdmVudFRyaWdnZXJUYWJsZVJld3JpdGUoTm9kZSAqcGFyc2V0 cmVlLCBPaWQgdGFibGVPaWQsIGludCByZWFzb24pOwogCitleHRlcm4gdm9pZCBFdmVudFRyaWdn ZXJUYWJsZUluaXRXcml0ZVN0YXJ0KE5vZGUgKnBhcnNldHJlZSk7CitleHRlcm4gdm9pZCBFdmVu dFRyaWdnZXJUYWJsZUluaXRXcml0ZShOb2RlICpwYXJzZXRyZWUsIE9iamVjdEFkZHJlc3MgYWRk cmVzcyk7CitleHRlcm4gdm9pZCBFdmVudFRyaWdnZXJUYWJsZUluaXRXcml0ZUVuZChPYmplY3RB ZGRyZXNzIGFkZHJlc3MpOworCiBleHRlcm4gYm9vbCBFdmVudFRyaWdnZXJCZWdpbkNvbXBsZXRl UXVlcnkodm9pZCk7CiBleHRlcm4gdm9pZCBFdmVudFRyaWdnZXJFbmRDb21wbGV0ZVF1ZXJ5KHZv aWQpOwogZXh0ZXJuIGJvb2wgdHJhY2tEcm9wcGVkT2JqZWN0c05lZWRlZCh2b2lkKTsKQEAgLTEx MCw3ICsxMTQsMTIgQEAgZXh0ZXJuIHZvaWQgRXZlbnRUcmlnZ2VyQ29sbGVjdFNpbXBsZUNvbW1h bmQoT2JqZWN0QWRkcmVzcyBhZGRyZXNzLAogZXh0ZXJuIHZvaWQgRXZlbnRUcmlnZ2VyQWx0ZXJU YWJsZVN0YXJ0KE5vZGUgKnBhcnNldHJlZSk7CiBleHRlcm4gdm9pZCBFdmVudFRyaWdnZXJBbHRl clRhYmxlUmVsaWQoT2lkIG9iamVjdElkKTsKIGV4dGVybiB2b2lkIEV2ZW50VHJpZ2dlckNvbGxl Y3RBbHRlclRhYmxlU3ViY21kKE5vZGUgKnN1YmNtZCwKLQkJCQkJCQkJCQkJCU9iamVjdEFkZHJl c3MgYWRkcmVzcyk7CisJCQkJCQkJCQkJCQlPYmplY3RBZGRyZXNzIGFkZHJlc3MsCisJCQkJCQkJ CQkJCQlib29sIHJld3JpdGUpOworCitleHRlcm4gdm9pZCBFdmVudFRyaWdnZXJBbHRlclR5cGVT dGFydChBbHRlclRhYmxlQ21kICpzdWJjbWQsIFJlbGF0aW9uIHJlbCk7CitleHRlcm4gdm9pZCBF dmVudFRyaWdnZXJBbHRlclR5cGVFbmQoTm9kZSAqc3ViY21kLCBPYmplY3RBZGRyZXNzIGFkZHJl c3MsCisJCQkJCQkJCQkgYm9vbCByZXdyaXRlKTsKIGV4dGVybiB2b2lkIEV2ZW50VHJpZ2dlckFs dGVyVGFibGVFbmQodm9pZCk7CiAKIGV4dGVybiB2b2lkIEV2ZW50VHJpZ2dlckNvbGxlY3RHcmFu dChJbnRlcm5hbEdyYW50ICppc3RtdCk7CkBAIC0xMjAsNiArMTI5LDEyIEBAIGV4dGVybiB2b2lk IEV2ZW50VHJpZ2dlckNvbGxlY3RBbHRlck9wRmFtKEFsdGVyT3BGYW1pbHlTdG10ICpzdG10LAog ZXh0ZXJuIHZvaWQgRXZlbnRUcmlnZ2VyQ29sbGVjdENyZWF0ZU9wQ2xhc3MoQ3JlYXRlT3BDbGFz c1N0bXQgKnN0bXQsCiAJCQkJCQkJCQkJCSBPaWQgb3Bjb2lkLCBMaXN0ICpvcGVyYXRvcnMsCiAJ CQkJCQkJCQkJCSBMaXN0ICpwcm9jZWR1cmVzKTsKK2V4dGVybiB2b2lkIEV2ZW50VHJpZ2dlckNv bGxlY3RDcmVhdGVQdWJsaWNhdGlvbihDcmVhdGVQdWJsaWNhdGlvblN0bXQgKnN0bXQsCisJCQkJ CQkJCQkJCQkgT2lkIHB1YmlkLCBMaXN0ICpyZWxhdGlvbnMsCisJCQkJCQkJCQkJCQkgTGlzdCAq c2NoZW1hcyk7CitleHRlcm4gdm9pZCBFdmVudFRyaWdnZXJDb2xsZWN0QWx0ZXJQdWJsaWNhdGlv bihBbHRlclB1YmxpY2F0aW9uU3RtdCAqc3RtdCwKKwkJCQkJCQkJCQkJCU9pZCBwdWJpZCwgTGlz dCAqcmVsYXRpb25zLAorCQkJCQkJCQkJCQkJTGlzdCAqc2NoZW1hcyk7CiBleHRlcm4gdm9pZCBF dmVudFRyaWdnZXJDb2xsZWN0QWx0ZXJUU0NvbmZpZyhBbHRlclRTQ29uZmlndXJhdGlvblN0bXQg KnN0bXQsCiAJCQkJCQkJCQkJCSBPaWQgY2ZnSWQsIE9pZCAqZGljdElkcywgaW50IG5kaWN0cyk7 CiBleHRlcm4gdm9pZCBFdmVudFRyaWdnZXJDb2xsZWN0QWx0ZXJEZWZQcml2cyhBbHRlckRlZmF1 bHRQcml2aWxlZ2VzU3RtdCAqc3RtdCk7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9yZXBsaWNh dGlvbi9sb2dpY2FscHJvdG8uaCBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2xvZ2ljYWxwcm90 by5oCmluZGV4IDBlYTJkZjUuLjVmYjNiYWEgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3JlcGxp Y2F0aW9uL2xvZ2ljYWxwcm90by5oCisrKyBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2xvZ2lj YWxwcm90by5oCkBAIC02Niw2ICs2Niw3IEBAIHR5cGVkZWYgZW51bSBMb2dpY2FsUmVwTXNnVHlw ZQogCUxPR0lDQUxfUkVQX01TR19SRUxBVElPTiA9ICdSJywKIAlMT0dJQ0FMX1JFUF9NU0dfVFlQ RSA9ICdZJywKIAlMT0dJQ0FMX1JFUF9NU0dfTUVTU0FHRSA9ICdNJywKKwlMT0dJQ0FMX1JFUF9N U0dfRERMID0gJ0wnLAogCUxPR0lDQUxfUkVQX01TR19CRUdJTl9QUkVQQVJFID0gJ2InLAogCUxP R0lDQUxfUkVQX01TR19QUkVQQVJFID0gJ1AnLAogCUxPR0lDQUxfUkVQX01TR19DT01NSVRfUFJF UEFSRUQgPSAnSycsCkBAIC0yNDYsNiArMjQ3LDkgQEAgZXh0ZXJuIExpc3QgKmxvZ2ljYWxyZXBf cmVhZF90cnVuY2F0ZShTdHJpbmdJbmZvIGluLAogCQkJCQkJCQkJICBib29sICpjYXNjYWRlLCBi b29sICpyZXN0YXJ0X3NlcXMpOwogZXh0ZXJuIHZvaWQgbG9naWNhbHJlcF93cml0ZV9tZXNzYWdl KFN0cmluZ0luZm8gb3V0LCBUcmFuc2FjdGlvbklkIHhpZCwgWExvZ1JlY1B0ciBsc24sCiAJCQkJ CQkJCQkgYm9vbCB0cmFuc2FjdGlvbmFsLCBjb25zdCBjaGFyICpwcmVmaXgsIFNpemUgc3osIGNv bnN0IGNoYXIgKm1lc3NhZ2UpOworZXh0ZXJuIHZvaWQgbG9naWNhbHJlcF93cml0ZV9kZGwoU3Ry aW5nSW5mbyBvdXQsIFhMb2dSZWNQdHIgbHNuLAorCQkJCQkJCQkJCWNvbnN0IGNoYXIgKnByZWZp eCwgU2l6ZSBzeiwgY29uc3QgY2hhciAqbWVzc2FnZSk7CitleHRlcm4gY2hhciAqbG9naWNhbHJl cF9yZWFkX2RkbChTdHJpbmdJbmZvIGluLCBYTG9nUmVjUHRyICpsc24sIGNvbnN0IGNoYXIgKipw cmVmaXgsIFNpemUgKnN6KTsKIGV4dGVybiB2b2lkIGxvZ2ljYWxyZXBfd3JpdGVfcmVsKFN0cmlu Z0luZm8gb3V0LCBUcmFuc2FjdGlvbklkIHhpZCwKIAkJCQkJCQkJIFJlbGF0aW9uIHJlbCwgQml0 bWFwc2V0ICpjb2x1bW5zKTsKIGV4dGVybiBMb2dpY2FsUmVwUmVsYXRpb24gKmxvZ2ljYWxyZXBf cmVhZF9yZWwoU3RyaW5nSW5mbyBpbik7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9yZXBsaWNh dGlvbi9vdXRwdXRfcGx1Z2luLmggYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9vdXRwdXRfcGx1 Z2luLmgKaW5kZXggNWVkNWU2YS4uNDRiYWY0MCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcmVw bGljYXRpb24vb3V0cHV0X3BsdWdpbi5oCisrKyBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL291 dHB1dF9wbHVnaW4uaApAQCAtOSw3ICs5LDYgQEAKICNpZm5kZWYgT1VUUFVUX1BMVUdJTl9ICiAj ZGVmaW5lIE9VVFBVVF9QTFVHSU5fSAogCi0jaW5jbHVkZSAicmVwbGljYXRpb24vZGRsbWVzc2Fn ZS5oIgogI2luY2x1ZGUgInJlcGxpY2F0aW9uL3Jlb3JkZXJidWZmZXIuaCIKIAogc3RydWN0IExv Z2ljYWxEZWNvZGluZ0NvbnRleHQ7CkBAIC0yMTUsNiArMjE0LDE5IEBAIHR5cGVkZWYgdm9pZCAo KkxvZ2ljYWxEZWNvZGVTdHJlYW1NZXNzYWdlQ0IpIChzdHJ1Y3QgTG9naWNhbERlY29kaW5nQ29u dGV4dCAqY3R4CiAJCQkJCQkJCQkJCSAgY29uc3QgY2hhciAqbWVzc2FnZSk7CiAKIC8qCisgKiBD YWxsYmFjayBmb3Igc3RyZWFtaW5nIGxvZ2ljYWwgZGVjb2RpbmcgRERMIG1lc3NhZ2VzIGZyb20g aW4tcHJvZ3Jlc3MKKyAqIHRyYW5zYWN0aW9ucy4KKyAqLwordHlwZWRlZiB2b2lkICgqTG9naWNh bERlY29kZVN0cmVhbURETE1lc3NhZ2VDQikgKHN0cnVjdCBMb2dpY2FsRGVjb2RpbmdDb250ZXh0 ICpjdHgsCisJCQkJCQkJCQkJCQkgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAorCQkJCQkJCQkJCQkJ IFhMb2dSZWNQdHIgbWVzc2FnZV9sc24sCisJCQkJCQkJCQkJCQkgY29uc3QgY2hhciAqcHJlZml4 LAorCQkJCQkJCQkJCQkJIE9pZCByZWxpZCwKKwkJCQkJCQkJCQkJCSBEZXBhcnNlZENvbW1hbmRU eXBlIGNtZHR5cGUsCisJCQkJCQkJCQkJCQkgU2l6ZSBtZXNzYWdlX3NpemUsCisJCQkJCQkJCQkJ CQkgY29uc3QgY2hhciAqbWVzc2FnZSk7CisKKy8qCiAgKiBDYWxsYmFjayBmb3Igc3RyZWFtaW5n IHRydW5jYXRlcyBmcm9tIGluLXByb2dyZXNzIHRyYW5zYWN0aW9ucy4KICAqLwogdHlwZWRlZiB2 b2lkICgqTG9naWNhbERlY29kZVN0cmVhbVRydW5jYXRlQ0IpIChzdHJ1Y3QgTG9naWNhbERlY29k aW5nQ29udGV4dCAqY3R4LApAQCAtMjUzLDYgKzI2NSw3IEBAIHR5cGVkZWYgc3RydWN0IE91dHB1 dFBsdWdpbkNhbGxiYWNrcwogCUxvZ2ljYWxEZWNvZGVTdHJlYW1Db21taXRDQiBzdHJlYW1fY29t bWl0X2NiOwogCUxvZ2ljYWxEZWNvZGVTdHJlYW1DaGFuZ2VDQiBzdHJlYW1fY2hhbmdlX2NiOwog CUxvZ2ljYWxEZWNvZGVTdHJlYW1NZXNzYWdlQ0Igc3RyZWFtX21lc3NhZ2VfY2I7CisJTG9naWNh bERlY29kZVN0cmVhbURETE1lc3NhZ2VDQiBzdHJlYW1fZGRsX2NiOwogCUxvZ2ljYWxEZWNvZGVT dHJlYW1UcnVuY2F0ZUNCIHN0cmVhbV90cnVuY2F0ZV9jYjsKIH0gT3V0cHV0UGx1Z2luQ2FsbGJh Y2tzOwogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9wZ291dHB1dC5oIGIv c3JjL2luY2x1ZGUvcmVwbGljYXRpb24vcGdvdXRwdXQuaAppbmRleCBiNGE4MDE1Li5hMmNmOTli IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9wZ291dHB1dC5oCisrKyBiL3Ny Yy9pbmNsdWRlL3JlcGxpY2F0aW9uL3Bnb3V0cHV0LmgKQEAgLTI1LDYgKzI1LDcgQEAgdHlwZWRl ZiBzdHJ1Y3QgUEdPdXRwdXREYXRhCiAJdWludDMyCQlwcm90b2NvbF92ZXJzaW9uOwogCUxpc3QJ ICAgKnB1YmxpY2F0aW9uX25hbWVzOwogCUxpc3QJICAgKnB1YmxpY2F0aW9uczsKKwlMaXN0CSAg ICpkZWxldGVkX3JlbGlkczsKIAlib29sCQliaW5hcnk7CiAJY2hhcgkJc3RyZWFtaW5nOwogCWJv b2wJCW1lc3NhZ2VzOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vcmVvcmRl cmJ1ZmZlci5oIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vcmVvcmRlcmJ1ZmZlci5oCmluZGV4 IDdiNmE2MzMuLjYxN2Y2YTMgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3Jl b3JkZXJidWZmZXIuaAorKysgYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9yZW9yZGVyYnVmZmVy LmgKQEAgLTU0MCw2ICs1NDAsMTcgQEAgdHlwZWRlZiB2b2lkICgqUmVvcmRlckJ1ZmZlclN0cmVh bU1lc3NhZ2VDQikgKAogCQkJCQkJCQkJCQkgIGNvbnN0IGNoYXIgKnByZWZpeCwgU2l6ZSBzeiwK IAkJCQkJCQkJCQkJICBjb25zdCBjaGFyICptZXNzYWdlKTsKIAorLyogc3RyZWFtIERETCBtZXNz YWdlIGNhbGxiYWNrIHNpZ25hdHVyZSAqLwordHlwZWRlZiB2b2lkICgqUmVvcmRlckJ1ZmZlclN0 cmVhbURETE1lc3NhZ2VDQikgKAorCQkJCQkJCQkJCQkJIFJlb3JkZXJCdWZmZXIgKnJiLAorCQkJ CQkJCQkJCQkJIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKKwkJCQkJCQkJCQkJCSBYTG9nUmVjUHRy IG1lc3NhZ2VfbHNuLAorCQkJCQkJCQkJCQkJIGNvbnN0IGNoYXIgKnByZWZpeCwKKwkJCQkJCQkJ CQkJCSBPaWQgcmVsaWQsCisJCQkJCQkJCQkJCQkgRGVwYXJzZWRDb21tYW5kVHlwZSBjbWR0eXBl LAorCQkJCQkJCQkJCQkJIFNpemUgc3osCisJCQkJCQkJCQkJCQkgY29uc3QgY2hhciAqbWVzc2Fn ZSk7CisKIC8qIHN0cmVhbSB0cnVuY2F0ZSBjYWxsYmFjayBzaWduYXR1cmUgKi8KIHR5cGVkZWYg dm9pZCAoKlJlb3JkZXJCdWZmZXJTdHJlYW1UcnVuY2F0ZUNCKSAoCiAJCQkJCQkJCQkJCSAgIFJl b3JkZXJCdWZmZXIgKnJiLApAQCAtNjEwLDYgKzYyMSw3IEBAIHN0cnVjdCBSZW9yZGVyQnVmZmVy CiAJUmVvcmRlckJ1ZmZlclN0cmVhbUNvbW1pdENCIHN0cmVhbV9jb21taXQ7CiAJUmVvcmRlckJ1 ZmZlclN0cmVhbUNoYW5nZUNCIHN0cmVhbV9jaGFuZ2U7CiAJUmVvcmRlckJ1ZmZlclN0cmVhbU1l c3NhZ2VDQiBzdHJlYW1fbWVzc2FnZTsKKwlSZW9yZGVyQnVmZmVyU3RyZWFtRERMTWVzc2FnZUNC IHN0cmVhbV9kZGw7CiAJUmVvcmRlckJ1ZmZlclN0cmVhbVRydW5jYXRlQ0Igc3RyZWFtX3RydW5j YXRlOwogCiAJLyoKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3Rjb3AvY21kdGFnLmggYi9zcmMv aW5jbHVkZS90Y29wL2NtZHRhZy5oCmluZGV4IDFlNzUxNGQuLjA3NmMyN2UgMTAwNjQ0Ci0tLSBh L3NyYy9pbmNsdWRlL3Rjb3AvY21kdGFnLmgKKysrIGIvc3JjL2luY2x1ZGUvdGNvcC9jbWR0YWcu aApAQCAtMTYsNyArMTYsNyBAQAogLyogYnVmZmVyIHNpemUgcmVxdWlyZWQgZm9yIGNvbW1hbmQg Y29tcGxldGlvbiB0YWdzICovCiAjZGVmaW5lIENPTVBMRVRJT05fVEFHX0JVRlNJWkUJNjQKIAot I2RlZmluZSBQR19DTURUQUcodGFnLCBuYW1lLCBldnRyZ29rLCByd3Jvaywgcm93Y250KSBcCisj ZGVmaW5lIFBHX0NNRFRBRyh0YWcsIG5hbWUsIGV2dHJnb2ssIHJ3cm9rLCByb3djbnQsIGRkbHJl cGxvaykgXAogCXRhZywKIAogdHlwZWRlZiBlbnVtIENvbW1hbmRUYWcKQEAgLTUzLDkgKzUzLDEx IEBAIENvcHlRdWVyeUNvbXBsZXRpb24oUXVlcnlDb21wbGV0aW9uICpkc3QsIGNvbnN0IFF1ZXJ5 Q29tcGxldGlvbiAqc3JjKQogZXh0ZXJuIHZvaWQgSW5pdGlhbGl6ZVF1ZXJ5Q29tcGxldGlvbihR dWVyeUNvbXBsZXRpb24gKnFjKTsKIGV4dGVybiBjb25zdCBjaGFyICpHZXRDb21tYW5kVGFnTmFt ZShDb21tYW5kVGFnIGNvbW1hbmRUYWcpOwogZXh0ZXJuIGNvbnN0IGNoYXIgKkdldENvbW1hbmRU YWdOYW1lQW5kTGVuKENvbW1hbmRUYWcgY29tbWFuZFRhZywgU2l6ZSAqbGVuKTsKK2V4dGVybiBD b21tYW5kVGFnICpHZXRDb21tYW5kVGFnc0ZvckRETFJlcGwoaW50ICpuY29tbWFuZHMpOwogZXh0 ZXJuIGJvb2wgY29tbWFuZF90YWdfZGlzcGxheV9yb3djb3VudChDb21tYW5kVGFnIGNvbW1hbmRU YWcpOwogZXh0ZXJuIGJvb2wgY29tbWFuZF90YWdfZXZlbnRfdHJpZ2dlcl9vayhDb21tYW5kVGFn IGNvbW1hbmRUYWcpOwogZXh0ZXJuIGJvb2wgY29tbWFuZF90YWdfdGFibGVfcmV3cml0ZV9vayhD b21tYW5kVGFnIGNvbW1hbmRUYWcpOworZXh0ZXJuIGJvb2wgY29tbWFuZF90YWdfZGRsX3JlcGxp Y2F0aW9uX29rKENvbW1hbmRUYWcgY29tbWFuZFRhZyk7CiBleHRlcm4gQ29tbWFuZFRhZyBHZXRD b21tYW5kVGFnRW51bShjb25zdCBjaGFyICpjb21tYW5kbmFtZSk7CiBleHRlcm4gU2l6ZSBCdWls ZFF1ZXJ5Q29tcGxldGlvblN0cmluZyhjaGFyICpidWZmLCBjb25zdCBRdWVyeUNvbXBsZXRpb24g KnFjLAogCQkJCQkJCQkJICAgYm9vbCBuYW1lb25seSk7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVk ZS90Y29wL2NtZHRhZ2xpc3QuaCBiL3NyYy9pbmNsdWRlL3Rjb3AvY21kdGFnbGlzdC5oCmluZGV4 IGU3MzhhYzEuLjE4YjY5ZTQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3Rjb3AvY21kdGFnbGlz dC5oCisrKyBiL3NyYy9pbmNsdWRlL3Rjb3AvY21kdGFnbGlzdC5oCkBAIC0yMywxOTYgKzIzLDE5 NiBAQAogICogdGV4dHVhbCBuYW1lLCBzbyB0aGF0IHdlIGNhbiBic2VhcmNoIG9uIGl0OyBzZWUg R2V0Q29tbWFuZFRhZ0VudW0oKS4KICAqLwogCi0vKiBzeW1ib2wgbmFtZSwgdGV4dHVhbCBuYW1l LCBldmVudF90cmlnZ2VyX29rLCB0YWJsZV9yZXdyaXRlX29rLCByb3djb3VudCAqLwotUEdfQ01E VEFHKENNRFRBR19VTktOT1dOLCAiPz8/IiwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRB RyhDTURUQUdfQUxURVJfQUNDRVNTX01FVEhPRCwgIkFMVEVSIEFDQ0VTUyBNRVRIT0QiLCB0cnVl LCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0FMVEVSX0FHR1JFR0FURSwgIkFMVEVS IEFHR1JFR0FURSIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQUxURVJf Q0FTVCwgIkFMVEVSIENBU1QiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFH X0FMVEVSX0NPTExBVElPTiwgIkFMVEVSIENPTExBVElPTiIsIHRydWUsIGZhbHNlLCBmYWxzZSkK LVBHX0NNRFRBRyhDTURUQUdfQUxURVJfQ09OU1RSQUlOVCwgIkFMVEVSIENPTlNUUkFJTlQiLCB0 cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0FMVEVSX0NPTlZFUlNJT04sICJB TFRFUiBDT05WRVJTSU9OIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19B TFRFUl9EQVRBQkFTRSwgIkFMVEVSIERBVEFCQVNFIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKLVBH X0NNRFRBRyhDTURUQUdfQUxURVJfREVGQVVMVF9QUklWSUxFR0VTLCAiQUxURVIgREVGQVVMVCBQ UklWSUxFR0VTIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19BTFRFUl9E T01BSU4sICJBTFRFUiBET01BSU4iLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01E VEFHX0FMVEVSX0VWRU5UX1RSSUdHRVIsICJBTFRFUiBFVkVOVCBUUklHR0VSIiwgZmFsc2UsIGZh bHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQUxURVJfRVhURU5TSU9OLCAiQUxURVIgRVhU RU5TSU9OIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19BTFRFUl9GT1JF SUdOX0RBVEFfV1JBUFBFUiwgIkFMVEVSIEZPUkVJR04gREFUQSBXUkFQUEVSIiwgdHJ1ZSwgZmFs c2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19BTFRFUl9GT1JFSUdOX1RBQkxFLCAiQUxURVIg Rk9SRUlHTiBUQUJMRSIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQUxU RVJfRlVOQ1RJT04sICJBTFRFUiBGVU5DVElPTiIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NN RFRBRyhDTURUQUdfQUxURVJfSU5ERVgsICJBTFRFUiBJTkRFWCIsIHRydWUsIGZhbHNlLCBmYWxz ZSkKLVBHX0NNRFRBRyhDTURUQUdfQUxURVJfTEFOR1VBR0UsICJBTFRFUiBMQU5HVUFHRSIsIHRy dWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQUxURVJfTEFSR0VfT0JKRUNULCAi QUxURVIgTEFSR0UgT0JKRUNUIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRB R19BTFRFUl9NQVRFUklBTElaRURfVklFVywgIkFMVEVSIE1BVEVSSUFMSVpFRCBWSUVXIiwgdHJ1 ZSwgdHJ1ZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0FMVEVSX09QRVJBVE9SLCAiQUxURVIg T1BFUkFUT1IiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0FMVEVSX09Q RVJBVE9SX0NMQVNTLCAiQUxURVIgT1BFUkFUT1IgQ0xBU1MiLCB0cnVlLCBmYWxzZSwgZmFsc2Up Ci1QR19DTURUQUcoQ01EVEFHX0FMVEVSX09QRVJBVE9SX0ZBTUlMWSwgIkFMVEVSIE9QRVJBVE9S IEZBTUlMWSIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQUxURVJfUE9M SUNZLCAiQUxURVIgUE9MSUNZIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRB R19BTFRFUl9QUk9DRURVUkUsICJBTFRFUiBQUk9DRURVUkUiLCB0cnVlLCBmYWxzZSwgZmFsc2Up Ci1QR19DTURUQUcoQ01EVEFHX0FMVEVSX1BVQkxJQ0FUSU9OLCAiQUxURVIgUFVCTElDQVRJT04i LCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0FMVEVSX1JPTEUsICJBTFRF UiBST0xFIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQUxURVJfUk9V VElORSwgIkFMVEVSIFJPVVRJTkUiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01E VEFHX0FMVEVSX1JVTEUsICJBTFRFUiBSVUxFIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01E VEFHKENNRFRBR19BTFRFUl9TQ0hFTUEsICJBTFRFUiBTQ0hFTUEiLCB0cnVlLCBmYWxzZSwgZmFs c2UpCi1QR19DTURUQUcoQ01EVEFHX0FMVEVSX1NFUVVFTkNFLCAiQUxURVIgU0VRVUVOQ0UiLCB0 cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0FMVEVSX1NFUlZFUiwgIkFMVEVS IFNFUlZFUiIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQUxURVJfU1RB VElTVElDUywgIkFMVEVSIFNUQVRJU1RJQ1MiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURU QUcoQ01EVEFHX0FMVEVSX1NVQlNDUklQVElPTiwgIkFMVEVSIFNVQlNDUklQVElPTiIsIHRydWUs IGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQUxURVJfU1lTVEVNLCAiQUxURVIgU1lT VEVNIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQUxURVJfVEFCTEUs ICJBTFRFUiBUQUJMRSIsIHRydWUsIHRydWUsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19BTFRF Ul9UQUJMRVNQQUNFLCAiQUxURVIgVEFCTEVTUEFDRSIsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCi1Q R19DTURUQUcoQ01EVEFHX0FMVEVSX1RFWFRfU0VBUkNIX0NPTkZJR1VSQVRJT04sICJBTFRFUiBU RVhUIFNFQVJDSCBDT05GSUdVUkFUSU9OIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFH KENNRFRBR19BTFRFUl9URVhUX1NFQVJDSF9ESUNUSU9OQVJZLCAiQUxURVIgVEVYVCBTRUFSQ0gg RElDVElPTkFSWSIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQUxURVJf VEVYVF9TRUFSQ0hfUEFSU0VSLCAiQUxURVIgVEVYVCBTRUFSQ0ggUEFSU0VSIiwgdHJ1ZSwgZmFs c2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19BTFRFUl9URVhUX1NFQVJDSF9URU1QTEFURSwg IkFMVEVSIFRFWFQgU0VBUkNIIFRFTVBMQVRFIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01E VEFHKENNRFRBR19BTFRFUl9UUkFOU0ZPUk0sICJBTFRFUiBUUkFOU0ZPUk0iLCB0cnVlLCBmYWxz ZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0FMVEVSX1RSSUdHRVIsICJBTFRFUiBUUklHR0VS IiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19BTFRFUl9UWVBFLCAiQUxU RVIgVFlQRSIsIHRydWUsIHRydWUsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19BTFRFUl9VU0VS X01BUFBJTkcsICJBTFRFUiBVU0VSIE1BUFBJTkciLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19D TURUQUcoQ01EVEFHX0FMVEVSX1ZJRVcsICJBTFRFUiBWSUVXIiwgdHJ1ZSwgZmFsc2UsIGZhbHNl KQotUEdfQ01EVEFHKENNRFRBR19BTkFMWVpFLCAiQU5BTFlaRSIsIGZhbHNlLCBmYWxzZSwgZmFs c2UpCi1QR19DTURUQUcoQ01EVEFHX0JFR0lOLCAiQkVHSU4iLCBmYWxzZSwgZmFsc2UsIGZhbHNl KQotUEdfQ01EVEFHKENNRFRBR19DQUxMLCAiQ0FMTCIsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCi1Q R19DTURUQUcoQ01EVEFHX0NIRUNLUE9JTlQsICJDSEVDS1BPSU5UIiwgZmFsc2UsIGZhbHNlLCBm YWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQ0xPU0UsICJDTE9TRSIsIGZhbHNlLCBmYWxzZSwgZmFs c2UpCi1QR19DTURUQUcoQ01EVEFHX0NMT1NFX0NVUlNPUiwgIkNMT1NFIENVUlNPUiIsIGZhbHNl LCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0NMT1NFX0NVUlNPUl9BTEwsICJDTE9T RSBDVVJTT1IgQUxMIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQ0xV U1RFUiwgIkNMVVNURVIiLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19D T01NRU5ULCAiQ09NTUVOVCIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdf Q09NTUlULCAiQ09NTUlUIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdf Q09NTUlUX1BSRVBBUkVELCAiQ09NTUlUIFBSRVBBUkVEIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSkK LVBHX0NNRFRBRyhDTURUQUdfQ09QWSwgIkNPUFkiLCBmYWxzZSwgZmFsc2UsIHRydWUpCi1QR19D TURUQUcoQ01EVEFHX0NPUFlfRlJPTSwgIkNPUFkgRlJPTSIsIGZhbHNlLCBmYWxzZSwgZmFsc2Up Ci1QR19DTURUQUcoQ01EVEFHX0NSRUFURV9BQ0NFU1NfTUVUSE9ELCAiQ1JFQVRFIEFDQ0VTUyBN RVRIT0QiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0NSRUFURV9BR0dS RUdBVEUsICJDUkVBVEUgQUdHUkVHQVRFIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFH KENNRFRBR19DUkVBVEVfQ0FTVCwgIkNSRUFURSBDQVNUIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQot UEdfQ01EVEFHKENNRFRBR19DUkVBVEVfQ09MTEFUSU9OLCAiQ1JFQVRFIENPTExBVElPTiIsIHRy dWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX0NPTlNUUkFJTlQsICJD UkVBVEUgQ09OU1RSQUlOVCIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdf Q1JFQVRFX0NPTlZFUlNJT04sICJDUkVBVEUgQ09OVkVSU0lPTiIsIHRydWUsIGZhbHNlLCBmYWxz ZSkKLVBHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX0RBVEFCQVNFLCAiQ1JFQVRFIERBVEFCQVNFIiwg ZmFsc2UsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX0RPTUFJTiwgIkNS RUFURSBET01BSU4iLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0NSRUFU RV9FVkVOVF9UUklHR0VSLCAiQ1JFQVRFIEVWRU5UIFRSSUdHRVIiLCBmYWxzZSwgZmFsc2UsIGZh bHNlKQotUEdfQ01EVEFHKENNRFRBR19DUkVBVEVfRVhURU5TSU9OLCAiQ1JFQVRFIEVYVEVOU0lP TiIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX0ZPUkVJR05f REFUQV9XUkFQUEVSLCAiQ1JFQVRFIEZPUkVJR04gREFUQSBXUkFQUEVSIiwgdHJ1ZSwgZmFsc2Us IGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19DUkVBVEVfRk9SRUlHTl9UQUJMRSwgIkNSRUFURSBG T1JFSUdOIFRBQkxFIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19DUkVB VEVfRlVOQ1RJT04sICJDUkVBVEUgRlVOQ1RJT04iLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19D TURUQUcoQ01EVEFHX0NSRUFURV9JTkRFWCwgIkNSRUFURSBJTkRFWCIsIHRydWUsIGZhbHNlLCBm YWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX0xBTkdVQUdFLCAiQ1JFQVRFIExBTkdVQUdF IiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19DUkVBVEVfTUFURVJJQUxJ WkVEX1ZJRVcsICJDUkVBVEUgTUFURVJJQUxJWkVEIFZJRVciLCB0cnVlLCBmYWxzZSwgZmFsc2Up Ci1QR19DTURUQUcoQ01EVEFHX0NSRUFURV9PUEVSQVRPUiwgIkNSRUFURSBPUEVSQVRPUiIsIHRy dWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX09QRVJBVE9SX0NMQVNT LCAiQ1JFQVRFIE9QRVJBVE9SIENMQVNTIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFH KENNRFRBR19DUkVBVEVfT1BFUkFUT1JfRkFNSUxZLCAiQ1JFQVRFIE9QRVJBVE9SIEZBTUlMWSIs IHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX1BPTElDWSwgIkNS RUFURSBQT0xJQ1kiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0NSRUFU RV9QUk9DRURVUkUsICJDUkVBVEUgUFJPQ0VEVVJFIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdf Q01EVEFHKENNRFRBR19DUkVBVEVfUFVCTElDQVRJT04sICJDUkVBVEUgUFVCTElDQVRJT04iLCB0 cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0NSRUFURV9ST0xFLCAiQ1JFQVRF IFJPTEUiLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19DUkVBVEVfUk9V VElORSwgIkNSRUFURSBST1VUSU5FIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENN RFRBR19DUkVBVEVfUlVMRSwgIkNSRUFURSBSVUxFIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdf Q01EVEFHKENNRFRBR19DUkVBVEVfU0NIRU1BLCAiQ1JFQVRFIFNDSEVNQSIsIHRydWUsIGZhbHNl LCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX1NFUVVFTkNFLCAiQ1JFQVRFIFNFUVVF TkNFIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19DUkVBVEVfU0VSVkVS LCAiQ1JFQVRFIFNFUlZFUiIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdf Q1JFQVRFX1NUQVRJU1RJQ1MsICJDUkVBVEUgU1RBVElTVElDUyIsIHRydWUsIGZhbHNlLCBmYWxz ZSkKLVBHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX1NVQlNDUklQVElPTiwgIkNSRUFURSBTVUJTQ1JJ UFRJT04iLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0NSRUFURV9UQUJM RSwgIkNSRUFURSBUQUJMRSIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdf Q1JFQVRFX1RBQkxFX0FTLCAiQ1JFQVRFIFRBQkxFIEFTIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQot UEdfQ01EVEFHKENNRFRBR19DUkVBVEVfVEFCTEVTUEFDRSwgIkNSRUFURSBUQUJMRVNQQUNFIiwg ZmFsc2UsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX1RFWFRfU0VBUkNI X0NPTkZJR1VSQVRJT04sICJDUkVBVEUgVEVYVCBTRUFSQ0ggQ09ORklHVVJBVElPTiIsIHRydWUs IGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX1RFWFRfU0VBUkNIX0RJQ1RJ T05BUlksICJDUkVBVEUgVEVYVCBTRUFSQ0ggRElDVElPTkFSWSIsIHRydWUsIGZhbHNlLCBmYWxz ZSkKLVBHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX1RFWFRfU0VBUkNIX1BBUlNFUiwgIkNSRUFURSBU RVhUIFNFQVJDSCBQQVJTRVIiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFH X0NSRUFURV9URVhUX1NFQVJDSF9URU1QTEFURSwgIkNSRUFURSBURVhUIFNFQVJDSCBURU1QTEFU RSIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX1RSQU5TRk9S TSwgIkNSRUFURSBUUkFOU0ZPUk0iLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01E VEFHX0NSRUFURV9UUklHR0VSLCAiQ1JFQVRFIFRSSUdHRVIiLCB0cnVlLCBmYWxzZSwgZmFsc2Up Ci1QR19DTURUQUcoQ01EVEFHX0NSRUFURV9UWVBFLCAiQ1JFQVRFIFRZUEUiLCB0cnVlLCBmYWxz ZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0NSRUFURV9VU0VSX01BUFBJTkcsICJDUkVBVEUg VVNFUiBNQVBQSU5HIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19DUkVB VEVfVklFVywgIkNSRUFURSBWSUVXIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENN RFRBR19ERUFMTE9DQVRFLCAiREVBTExPQ0FURSIsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCi1QR19D TURUQUcoQ01EVEFHX0RFQUxMT0NBVEVfQUxMLCAiREVBTExPQ0FURSBBTEwiLCBmYWxzZSwgZmFs c2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19ERUNMQVJFX0NVUlNPUiwgIkRFQ0xBUkUgQ1VS U09SIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfREVMRVRFLCAiREVM RVRFIiwgZmFsc2UsIGZhbHNlLCB0cnVlKQotUEdfQ01EVEFHKENNRFRBR19ESVNDQVJELCAiRElT Q0FSRCIsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0RJU0NBUkRfQUxM LCAiRElTQ0FSRCBBTEwiLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19E SVNDQVJEX1BMQU5TLCAiRElTQ0FSRCBQTEFOUyIsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCi1QR19D TURUQUcoQ01EVEFHX0RJU0NBUkRfU0VRVUVOQ0VTLCAiRElTQ0FSRCBTRVFVRU5DRVMiLCBmYWxz ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19ESVNDQVJEX1RFTVAsICJESVNDQVJE IFRFTVAiLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19ETywgIkRPIiwg ZmFsc2UsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfRFJPUF9BQ0NFU1NfTUVUSE9E LCAiRFJPUCBBQ0NFU1MgTUVUSE9EIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENN RFRBR19EUk9QX0FHR1JFR0FURSwgIkRST1AgQUdHUkVHQVRFIiwgdHJ1ZSwgZmFsc2UsIGZhbHNl KQotUEdfQ01EVEFHKENNRFRBR19EUk9QX0NBU1QsICJEUk9QIENBU1QiLCB0cnVlLCBmYWxzZSwg ZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0RST1BfQ09MTEFUSU9OLCAiRFJPUCBDT0xMQVRJT04i LCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0RST1BfQ09OU1RSQUlOVCwg IkRST1AgQ09OU1RSQUlOVCIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdf RFJPUF9DT05WRVJTSU9OLCAiRFJPUCBDT05WRVJTSU9OIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQot UEdfQ01EVEFHKENNRFRBR19EUk9QX0RBVEFCQVNFLCAiRFJPUCBEQVRBQkFTRSIsIGZhbHNlLCBm YWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0RST1BfRE9NQUlOLCAiRFJPUCBET01BSU4i LCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0RST1BfRVZFTlRfVFJJR0dF UiwgIkRST1AgRVZFTlQgVFJJR0dFUiIsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUco Q01EVEFHX0RST1BfRVhURU5TSU9OLCAiRFJPUCBFWFRFTlNJT04iLCB0cnVlLCBmYWxzZSwgZmFs c2UpCi1QR19DTURUQUcoQ01EVEFHX0RST1BfRk9SRUlHTl9EQVRBX1dSQVBQRVIsICJEUk9QIEZP UkVJR04gREFUQSBXUkFQUEVSIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRB R19EUk9QX0ZPUkVJR05fVEFCTEUsICJEUk9QIEZPUkVJR04gVEFCTEUiLCB0cnVlLCBmYWxzZSwg ZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0RST1BfRlVOQ1RJT04sICJEUk9QIEZVTkNUSU9OIiwg dHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19EUk9QX0lOREVYLCAiRFJPUCBJ TkRFWCIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfRFJPUF9MQU5HVUFH RSwgIkRST1AgTEFOR1VBR0UiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFH X0RST1BfTUFURVJJQUxJWkVEX1ZJRVcsICJEUk9QIE1BVEVSSUFMSVpFRCBWSUVXIiwgdHJ1ZSwg ZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19EUk9QX09QRVJBVE9SLCAiRFJPUCBPUEVS QVRPUiIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfRFJPUF9PUEVSQVRP Ul9DTEFTUywgIkRST1AgT1BFUkFUT1IgQ0xBU1MiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19D TURUQUcoQ01EVEFHX0RST1BfT1BFUkFUT1JfRkFNSUxZLCAiRFJPUCBPUEVSQVRPUiBGQU1JTFki LCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0RST1BfT1dORUQsICJEUk9Q IE9XTkVEIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19EUk9QX1BPTElD WSwgIkRST1AgUE9MSUNZIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19E Uk9QX1BST0NFRFVSRSwgIkRST1AgUFJPQ0VEVVJFIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdf Q01EVEFHKENNRFRBR19EUk9QX1BVQkxJQ0FUSU9OLCAiRFJPUCBQVUJMSUNBVElPTiIsIHRydWUs IGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfRFJPUF9ST0xFLCAiRFJPUCBST0xFIiwg ZmFsc2UsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfRFJPUF9ST1VUSU5FLCAiRFJP UCBST1VUSU5FIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19EUk9QX1JV TEUsICJEUk9QIFJVTEUiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0RS T1BfU0NIRU1BLCAiRFJPUCBTQ0hFTUEiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUco Q01EVEFHX0RST1BfU0VRVUVOQ0UsICJEUk9QIFNFUVVFTkNFIiwgdHJ1ZSwgZmFsc2UsIGZhbHNl KQotUEdfQ01EVEFHKENNRFRBR19EUk9QX1NFUlZFUiwgIkRST1AgU0VSVkVSIiwgdHJ1ZSwgZmFs c2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19EUk9QX1NUQVRJU1RJQ1MsICJEUk9QIFNUQVRJ U1RJQ1MiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0RST1BfU1VCU0NS SVBUSU9OLCAiRFJPUCBTVUJTQ1JJUFRJT04iLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURU QUcoQ01EVEFHX0RST1BfVEFCTEUsICJEUk9QIFRBQkxFIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQot UEdfQ01EVEFHKENNRFRBR19EUk9QX1RBQkxFU1BBQ0UsICJEUk9QIFRBQkxFU1BBQ0UiLCBmYWxz ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19EUk9QX1RFWFRfU0VBUkNIX0NPTkZJ R1VSQVRJT04sICJEUk9QIFRFWFQgU0VBUkNIIENPTkZJR1VSQVRJT04iLCB0cnVlLCBmYWxzZSwg ZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0RST1BfVEVYVF9TRUFSQ0hfRElDVElPTkFSWSwgIkRS T1AgVEVYVCBTRUFSQ0ggRElDVElPTkFSWSIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRB RyhDTURUQUdfRFJPUF9URVhUX1NFQVJDSF9QQVJTRVIsICJEUk9QIFRFWFQgU0VBUkNIIFBBUlNF UiIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfRFJPUF9URVhUX1NFQVJD SF9URU1QTEFURSwgIkRST1AgVEVYVCBTRUFSQ0ggVEVNUExBVEUiLCB0cnVlLCBmYWxzZSwgZmFs c2UpCi1QR19DTURUQUcoQ01EVEFHX0RST1BfVFJBTlNGT1JNLCAiRFJPUCBUUkFOU0ZPUk0iLCB0 cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0RST1BfVFJJR0dFUiwgIkRST1Ag VFJJR0dFUiIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfRFJPUF9UWVBF LCAiRFJPUCBUWVBFIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19EUk9Q X1VTRVJfTUFQUElORywgIkRST1AgVVNFUiBNQVBQSU5HIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQot UEdfQ01EVEFHKENNRFRBR19EUk9QX1ZJRVcsICJEUk9QIFZJRVciLCB0cnVlLCBmYWxzZSwgZmFs c2UpCi1QR19DTURUQUcoQ01EVEFHX0VYRUNVVEUsICJFWEVDVVRFIiwgZmFsc2UsIGZhbHNlLCBm YWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfRVhQTEFJTiwgIkVYUExBSU4iLCBmYWxzZSwgZmFsc2Us IGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19GRVRDSCwgIkZFVENIIiwgZmFsc2UsIGZhbHNlLCB0 cnVlKQotUEdfQ01EVEFHKENNRFRBR19HUkFOVCwgIkdSQU5UIiwgdHJ1ZSwgZmFsc2UsIGZhbHNl KQotUEdfQ01EVEFHKENNRFRBR19HUkFOVF9ST0xFLCAiR1JBTlQgUk9MRSIsIGZhbHNlLCBmYWxz ZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0lNUE9SVF9GT1JFSUdOX1NDSEVNQSwgIklNUE9S VCBGT1JFSUdOIFNDSEVNQSIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdf SU5TRVJULCAiSU5TRVJUIiwgZmFsc2UsIGZhbHNlLCB0cnVlKQotUEdfQ01EVEFHKENNRFRBR19M SVNURU4sICJMSVNURU4iLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19M T0FELCAiTE9BRCIsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0xPQ0tf VEFCTEUsICJMT0NLIFRBQkxFIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURU QUdfTUVSR0UsICJNRVJHRSIsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKLVBHX0NNRFRBRyhDTURUQUdf TU9WRSwgIk1PVkUiLCBmYWxzZSwgZmFsc2UsIHRydWUpCi1QR19DTURUQUcoQ01EVEFHX05PVElG WSwgIk5PVElGWSIsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX1BSRVBB UkUsICJQUkVQQVJFIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfUFJF UEFSRV9UUkFOU0FDVElPTiwgIlBSRVBBUkUgVFJBTlNBQ1RJT04iLCBmYWxzZSwgZmFsc2UsIGZh bHNlKQotUEdfQ01EVEFHKENNRFRBR19SRUFTU0lHTl9PV05FRCwgIlJFQVNTSUdOIE9XTkVEIiwg ZmFsc2UsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfUkVGUkVTSF9NQVRFUklBTEla RURfVklFVywgIlJFRlJFU0ggTUFURVJJQUxJWkVEIFZJRVciLCB0cnVlLCBmYWxzZSwgZmFsc2Up Ci1QR19DTURUQUcoQ01EVEFHX1JFSU5ERVgsICJSRUlOREVYIiwgZmFsc2UsIGZhbHNlLCBmYWxz ZSkKLVBHX0NNRFRBRyhDTURUQUdfUkVMRUFTRSwgIlJFTEVBU0UiLCBmYWxzZSwgZmFsc2UsIGZh bHNlKQotUEdfQ01EVEFHKENNRFRBR19SRVNFVCwgIlJFU0VUIiwgZmFsc2UsIGZhbHNlLCBmYWxz ZSkKLVBHX0NNRFRBRyhDTURUQUdfUkVWT0tFLCAiUkVWT0tFIiwgdHJ1ZSwgZmFsc2UsIGZhbHNl KQotUEdfQ01EVEFHKENNRFRBR19SRVZPS0VfUk9MRSwgIlJFVk9LRSBST0xFIiwgZmFsc2UsIGZh bHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfUk9MTEJBQ0ssICJST0xMQkFDSyIsIGZhbHNl LCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX1JPTExCQUNLX1BSRVBBUkVELCAiUk9M TEJBQ0sgUFJFUEFSRUQiLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19T QVZFUE9JTlQsICJTQVZFUE9JTlQiLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENN RFRBR19TRUNVUklUWV9MQUJFTCwgIlNFQ1VSSVRZIExBQkVMIiwgdHJ1ZSwgZmFsc2UsIGZhbHNl KQotUEdfQ01EVEFHKENNRFRBR19TRUxFQ1QsICJTRUxFQ1QiLCBmYWxzZSwgZmFsc2UsIHRydWUp Ci1QR19DTURUQUcoQ01EVEFHX1NFTEVDVF9GT1JfS0VZX1NIQVJFLCAiU0VMRUNUIEZPUiBLRVkg U0hBUkUiLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19TRUxFQ1RfRk9S X05PX0tFWV9VUERBVEUsICJTRUxFQ1QgRk9SIE5PIEtFWSBVUERBVEUiLCBmYWxzZSwgZmFsc2Us IGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19TRUxFQ1RfRk9SX1NIQVJFLCAiU0VMRUNUIEZPUiBT SEFSRSIsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX1NFTEVDVF9GT1Jf VVBEQVRFLCAiU0VMRUNUIEZPUiBVUERBVEUiLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01E VEFHKENNRFRBR19TRUxFQ1RfSU5UTywgIlNFTEVDVCBJTlRPIiwgdHJ1ZSwgZmFsc2UsIGZhbHNl KQotUEdfQ01EVEFHKENNRFRBR19TRVQsICJTRVQiLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQotUEdf Q01EVEFHKENNRFRBR19TRVRfQ09OU1RSQUlOVFMsICJTRVQgQ09OU1RSQUlOVFMiLCBmYWxzZSwg ZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19TSE9XLCAiU0hPVyIsIGZhbHNlLCBmYWxz ZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX1NUQVJUX1RSQU5TQUNUSU9OLCAiU1RBUlQgVFJB TlNBQ1RJT04iLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19UUlVOQ0FU RV9UQUJMRSwgIlRSVU5DQVRFIFRBQkxFIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRB RyhDTURUQUdfVU5MSVNURU4sICJVTkxJU1RFTiIsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCi1QR19D TURUQUcoQ01EVEFHX1VQREFURSwgIlVQREFURSIsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKLVBHX0NN RFRBRyhDTURUQUdfVkFDVVVNLCAiVkFDVVVNIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKKy8qIHN5 bWJvbCBuYW1lLCB0ZXh0dWFsIG5hbWUsIGV2ZW50X3RyaWdnZXJfb2ssIHRhYmxlX3Jld3JpdGVf b2ssIHJvd2NvdW50LCBkZGxyZXBsb2sgKi8KK1BHX0NNRFRBRyhDTURUQUdfVU5LTk9XTiwgIj8/ PyIsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQorUEdfQ01EVEFHKENNRFRBR19BTFRFUl9B Q0NFU1NfTUVUSE9ELCAiQUxURVIgQUNDRVNTIE1FVEhPRCIsIHRydWUsIGZhbHNlLCBmYWxzZSwg ZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX0FMVEVSX0FHR1JFR0FURSwgIkFMVEVSIEFHR1JFR0FU RSIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfQUxURVJfQ0FT VCwgIkFMVEVSIENBU1QiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01E VEFHX0FMVEVSX0NPTExBVElPTiwgIkFMVEVSIENPTExBVElPTiIsIHRydWUsIGZhbHNlLCBmYWxz ZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfQUxURVJfQ09OU1RSQUlOVCwgIkFMVEVSIENPTlNU UkFJTlQiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQorUEdfQ01EVEFHKENNRFRBR19BTFRF Ul9DT05WRVJTSU9OLCAiQUxURVIgQ09OVkVSU0lPTiIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1 ZSkKK1BHX0NNRFRBRyhDTURUQUdfQUxURVJfREFUQUJBU0UsICJBTFRFUiBEQVRBQkFTRSIsIGZh bHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQorUEdfQ01EVEFHKENNRFRBR19BTFRFUl9ERUZBVUxU X1BSSVZJTEVHRVMsICJBTFRFUiBERUZBVUxUIFBSSVZJTEVHRVMiLCB0cnVlLCBmYWxzZSwgZmFs c2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0FMVEVSX0RPTUFJTiwgIkFMVEVSIERPTUFJTiIs IHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfQUxURVJfRVZFTlRf VFJJR0dFUiwgIkFMVEVSIEVWRU5UIFRSSUdHRVIiLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxz ZSkKK1BHX0NNRFRBRyhDTURUQUdfQUxURVJfRVhURU5TSU9OLCAiQUxURVIgRVhURU5TSU9OIiwg dHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19BTFRFUl9GT1JFSUdO X0RBVEFfV1JBUFBFUiwgIkFMVEVSIEZPUkVJR04gREFUQSBXUkFQUEVSIiwgdHJ1ZSwgZmFsc2Us IGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19BTFRFUl9GT1JFSUdOX1RBQkxFLCAiQUxU RVIgRk9SRUlHTiBUQUJMRSIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhD TURUQUdfQUxURVJfRlVOQ1RJT04sICJBTFRFUiBGVU5DVElPTiIsIHRydWUsIGZhbHNlLCBmYWxz ZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfQUxURVJfSU5ERVgsICJBTFRFUiBJTkRFWCIsIHRy dWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfQUxURVJfTEFOR1VBR0Us ICJBTFRFUiBMQU5HVUFHRSIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhD TURUQUdfQUxURVJfTEFSR0VfT0JKRUNULCAiQUxURVIgTEFSR0UgT0JKRUNUIiwgdHJ1ZSwgZmFs c2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfQUxURVJfTUFURVJJQUxJWkVEX1ZJ RVcsICJBTFRFUiBNQVRFUklBTElaRUQgVklFVyIsIHRydWUsIHRydWUsIGZhbHNlLCB0cnVlKQor UEdfQ01EVEFHKENNRFRBR19BTFRFUl9PUEVSQVRPUiwgIkFMVEVSIE9QRVJBVE9SIiwgdHJ1ZSwg ZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19BTFRFUl9PUEVSQVRPUl9DTEFT UywgIkFMVEVSIE9QRVJBVE9SIENMQVNTIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdf Q01EVEFHKENNRFRBR19BTFRFUl9PUEVSQVRPUl9GQU1JTFksICJBTFRFUiBPUEVSQVRPUiBGQU1J TFkiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0FMVEVSX1BP TElDWSwgIkFMVEVSIFBPTElDWSIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRB RyhDTURUQUdfQUxURVJfUFJPQ0VEVVJFLCAiQUxURVIgUFJPQ0VEVVJFIiwgdHJ1ZSwgZmFsc2Us IGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19BTFRFUl9QVUJMSUNBVElPTiwgIkFMVEVS IFBVQkxJQ0FUSU9OIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRB R19BTFRFUl9ST0xFLCAiQUxURVIgUk9MRSIsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQor UEdfQ01EVEFHKENNRFRBR19BTFRFUl9ST1VUSU5FLCAiQUxURVIgUk9VVElORSIsIHRydWUsIGZh bHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfQUxURVJfUlVMRSwgIkFMVEVSIFJV TEUiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0FMVEVSX1ND SEVNQSwgIkFMVEVSIFNDSEVNQSIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRB RyhDTURUQUdfQUxURVJfU0VRVUVOQ0UsICJBTFRFUiBTRVFVRU5DRSIsIHRydWUsIGZhbHNlLCBm YWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfQUxURVJfU0VSVkVSLCAiQUxURVIgU0VSVkVS IiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19BTFRFUl9TVEFU SVNUSUNTLCAiQUxURVIgU1RBVElTVElDUyIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BH X0NNRFRBRyhDTURUQUdfQUxURVJfU1VCU0NSSVBUSU9OLCAiQUxURVIgU1VCU0NSSVBUSU9OIiwg dHJ1ZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfQUxURVJfU1lTVEVN LCAiQUxURVIgU1lTVEVNIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCitQR19DTURUQUco Q01EVEFHX0FMVEVSX1RBQkxFLCAiQUxURVIgVEFCTEUiLCB0cnVlLCB0cnVlLCBmYWxzZSwgdHJ1 ZSkKK1BHX0NNRFRBRyhDTURUQUdfQUxURVJfVEFCTEVTUEFDRSwgIkFMVEVSIFRBQkxFU1BBQ0Ui LCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfQUxURVJfVEVY VF9TRUFSQ0hfQ09ORklHVVJBVElPTiwgIkFMVEVSIFRFWFQgU0VBUkNIIENPTkZJR1VSQVRJT04i LCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0FMVEVSX1RFWFRf U0VBUkNIX0RJQ1RJT05BUlksICJBTFRFUiBURVhUIFNFQVJDSCBESUNUSU9OQVJZIiwgdHJ1ZSwg ZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19BTFRFUl9URVhUX1NFQVJDSF9Q QVJTRVIsICJBTFRFUiBURVhUIFNFQVJDSCBQQVJTRVIiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRy dWUpCitQR19DTURUQUcoQ01EVEFHX0FMVEVSX1RFWFRfU0VBUkNIX1RFTVBMQVRFLCAiQUxURVIg VEVYVCBTRUFSQ0ggVEVNUExBVEUiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURU QUcoQ01EVEFHX0FMVEVSX1RSQU5TRk9STSwgIkFMVEVSIFRSQU5TRk9STSIsIHRydWUsIGZhbHNl LCBmYWxzZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX0FMVEVSX1RSSUdHRVIsICJBTFRFUiBU UklHR0VSIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19BTFRF Ul9UWVBFLCAiQUxURVIgVFlQRSIsIHRydWUsIHRydWUsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFH KENNRFRBR19BTFRFUl9VU0VSX01BUFBJTkcsICJBTFRFUiBVU0VSIE1BUFBJTkciLCB0cnVlLCBm YWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0FMVEVSX1ZJRVcsICJBTFRFUiBW SUVXIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19BTkFMWVpF LCAiQU5BTFlaRSIsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQorUEdfQ01EVEFHKENNRFRB R19CRUdJTiwgIkJFR0lOIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCitQR19DTURUQUco Q01EVEFHX0NBTEwsICJDQUxMIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCitQR19DTURU QUcoQ01EVEFHX0NIRUNLUE9JTlQsICJDSEVDS1BPSU5UIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSwg ZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX0NMT1NFLCAiQ0xPU0UiLCBmYWxzZSwgZmFsc2UsIGZh bHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfQ0xPU0VfQ1VSU09SLCAiQ0xPU0UgQ1VSU09S IiwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX0NMT1NFX0NV UlNPUl9BTEwsICJDTE9TRSBDVVJTT1IgQUxMIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2Up CitQR19DTURUQUcoQ01EVEFHX0NMVVNURVIsICJDTFVTVEVSIiwgZmFsc2UsIGZhbHNlLCBmYWxz ZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX0NPTU1FTlQsICJDT01NRU5UIiwgdHJ1ZSwgZmFs c2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19DT01NSVQsICJDT01NSVQiLCBmYWxz ZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfQ09NTUlUX1BSRVBBUkVE LCAiQ09NTUlUIFBSRVBBUkVEIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCitQR19DTURU QUcoQ01EVEFHX0NPUFksICJDT1BZIiwgZmFsc2UsIGZhbHNlLCB0cnVlLCBmYWxzZSkKK1BHX0NN RFRBRyhDTURUQUdfQ09QWV9GUk9NLCAiQ09QWSBGUk9NIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSwg ZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX0NSRUFURV9BQ0NFU1NfTUVUSE9ELCAiQ1JFQVRFIEFD Q0VTUyBNRVRIT0QiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFH X0NSRUFURV9BR0dSRUdBVEUsICJDUkVBVEUgQUdHUkVHQVRFIiwgdHJ1ZSwgZmFsc2UsIGZhbHNl LCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19DUkVBVEVfQ0FTVCwgIkNSRUFURSBDQVNUIiwgdHJ1 ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19DUkVBVEVfQ09MTEFUSU9O LCAiQ1JFQVRFIENPTExBVElPTiIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRB RyhDTURUQUdfQ1JFQVRFX0NPTlNUUkFJTlQsICJDUkVBVEUgQ09OU1RSQUlOVCIsIHRydWUsIGZh bHNlLCBmYWxzZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX0NSRUFURV9DT05WRVJTSU9OLCAi Q1JFQVRFIENPTlZFUlNJT04iLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUco Q01EVEFHX0NSRUFURV9EQVRBQkFTRSwgIkNSRUFURSBEQVRBQkFTRSIsIGZhbHNlLCBmYWxzZSwg ZmFsc2UsIGZhbHNlKQorUEdfQ01EVEFHKENNRFRBR19DUkVBVEVfRE9NQUlOLCAiQ1JFQVRFIERP TUFJTiIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfQ1JFQVRF X0VWRU5UX1RSSUdHRVIsICJDUkVBVEUgRVZFTlQgVFJJR0dFUiIsIGZhbHNlLCBmYWxzZSwgZmFs c2UsIGZhbHNlKQorUEdfQ01EVEFHKENNRFRBR19DUkVBVEVfRVhURU5TSU9OLCAiQ1JFQVRFIEVY VEVOU0lPTiIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfQ1JF QVRFX0ZPUkVJR05fREFUQV9XUkFQUEVSLCAiQ1JFQVRFIEZPUkVJR04gREFUQSBXUkFQUEVSIiwg dHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19DUkVBVEVfRk9SRUlH Tl9UQUJMRSwgIkNSRUFURSBGT1JFSUdOIFRBQkxFIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVl KQorUEdfQ01EVEFHKENNRFRBR19DUkVBVEVfRlVOQ1RJT04sICJDUkVBVEUgRlVOQ1RJT04iLCB0 cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0NSRUFURV9JTkRFWCwg IkNSRUFURSBJTkRFWCIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURU QUdfQ1JFQVRFX0xBTkdVQUdFLCAiQ1JFQVRFIExBTkdVQUdFIiwgdHJ1ZSwgZmFsc2UsIGZhbHNl LCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19DUkVBVEVfTUFURVJJQUxJWkVEX1ZJRVcsICJDUkVB VEUgTUFURVJJQUxJWkVEIFZJRVciLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURU QUcoQ01EVEFHX0NSRUFURV9PUEVSQVRPUiwgIkNSRUFURSBPUEVSQVRPUiIsIHRydWUsIGZhbHNl LCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX09QRVJBVE9SX0NMQVNTLCAi Q1JFQVRFIE9QRVJBVE9SIENMQVNTIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01E VEFHKENNRFRBR19DUkVBVEVfT1BFUkFUT1JfRkFNSUxZLCAiQ1JFQVRFIE9QRVJBVE9SIEZBTUlM WSIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX1BP TElDWSwgIkNSRUFURSBQT0xJQ1kiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURU QUcoQ01EVEFHX0NSRUFURV9QUk9DRURVUkUsICJDUkVBVEUgUFJPQ0VEVVJFIiwgdHJ1ZSwgZmFs c2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19DUkVBVEVfUFVCTElDQVRJT04sICJD UkVBVEUgUFVCTElDQVRJT04iLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUco Q01EVEFHX0NSRUFURV9ST0xFLCAiQ1JFQVRFIFJPTEUiLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBm YWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX1JPVVRJTkUsICJDUkVBVEUgUk9VVElORSIs IHRydWUsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX0NSRUFURV9SVUxF LCAiQ1JFQVRFIFJVTEUiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01E VEFHX0NSRUFURV9TQ0hFTUEsICJDUkVBVEUgU0NIRU1BIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0 cnVlKQorUEdfQ01EVEFHKENNRFRBR19DUkVBVEVfU0VRVUVOQ0UsICJDUkVBVEUgU0VRVUVOQ0Ui LCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0NSRUFURV9TRVJW RVIsICJDUkVBVEUgU0VSVkVSIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFH KENNRFRBR19DUkVBVEVfU1RBVElTVElDUywgIkNSRUFURSBTVEFUSVNUSUNTIiwgdHJ1ZSwgZmFs c2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19DUkVBVEVfU1VCU0NSSVBUSU9OLCAi Q1JFQVRFIFNVQlNDUklQVElPTiIsIHRydWUsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCitQR19DTURU QUcoQ01EVEFHX0NSRUFURV9UQUJMRSwgIkNSRUFURSBUQUJMRSIsIHRydWUsIGZhbHNlLCBmYWxz ZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX1RBQkxFX0FTLCAiQ1JFQVRFIFRBQkxF IEFTIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfQ1JFQVRF X1RBQkxFU1BBQ0UsICJDUkVBVEUgVEFCTEVTUEFDRSIsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZh bHNlKQorUEdfQ01EVEFHKENNRFRBR19DUkVBVEVfVEVYVF9TRUFSQ0hfQ09ORklHVVJBVElPTiwg IkNSRUFURSBURVhUIFNFQVJDSCBDT05GSUdVUkFUSU9OIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0 cnVlKQorUEdfQ01EVEFHKENNRFRBR19DUkVBVEVfVEVYVF9TRUFSQ0hfRElDVElPTkFSWSwgIkNS RUFURSBURVhUIFNFQVJDSCBESUNUSU9OQVJZIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQor UEdfQ01EVEFHKENNRFRBR19DUkVBVEVfVEVYVF9TRUFSQ0hfUEFSU0VSLCAiQ1JFQVRFIFRFWFQg U0VBUkNIIFBBUlNFUiIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURU QUdfQ1JFQVRFX1RFWFRfU0VBUkNIX1RFTVBMQVRFLCAiQ1JFQVRFIFRFWFQgU0VBUkNIIFRFTVBM QVRFIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19DUkVBVEVf VFJBTlNGT1JNLCAiQ1JFQVRFIFRSQU5TRk9STSIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkK K1BHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX1RSSUdHRVIsICJDUkVBVEUgVFJJR0dFUiIsIHRydWUs IGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX1RZUEUsICJDUkVB VEUgVFlQRSIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfQ1JF QVRFX1VTRVJfTUFQUElORywgIkNSRUFURSBVU0VSIE1BUFBJTkciLCB0cnVlLCBmYWxzZSwgZmFs c2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0NSRUFURV9WSUVXLCAiQ1JFQVRFIFZJRVciLCB0 cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0RFQUxMT0NBVEUsICJE RUFMTE9DQVRFIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFH X0RFQUxMT0NBVEVfQUxMLCAiREVBTExPQ0FURSBBTEwiLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBm YWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfREVDTEFSRV9DVVJTT1IsICJERUNMQVJFIENVUlNPUiIs IGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQorUEdfQ01EVEFHKENNRFRBR19ERUxFVEUsICJE RUxFVEUiLCBmYWxzZSwgZmFsc2UsIHRydWUsIGZhbHNlKQorUEdfQ01EVEFHKENNRFRBR19ESVND QVJELCAiRElTQ0FSRCIsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQorUEdfQ01EVEFHKENN RFRBR19ESVNDQVJEX0FMTCwgIkRJU0NBUkQgQUxMIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFs c2UpCitQR19DTURUQUcoQ01EVEFHX0RJU0NBUkRfUExBTlMsICJESVNDQVJEIFBMQU5TIiwgZmFs c2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX0RJU0NBUkRfU0VRVUVO Q0VTLCAiRElTQ0FSRCBTRVFVRU5DRVMiLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BH X0NNRFRBRyhDTURUQUdfRElTQ0FSRF9URU1QLCAiRElTQ0FSRCBURU1QIiwgZmFsc2UsIGZhbHNl LCBmYWxzZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX0RPLCAiRE8iLCBmYWxzZSwgZmFsc2Us IGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfRFJPUF9BQ0NFU1NfTUVUSE9ELCAiRFJP UCBBQ0NFU1MgTUVUSE9EIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENN RFRBR19EUk9QX0FHR1JFR0FURSwgIkRST1AgQUdHUkVHQVRFIiwgdHJ1ZSwgZmFsc2UsIGZhbHNl LCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19EUk9QX0NBU1QsICJEUk9QIENBU1QiLCB0cnVlLCBm YWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0RST1BfQ09MTEFUSU9OLCAiRFJP UCBDT0xMQVRJT04iLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFH X0RST1BfQ09OU1RSQUlOVCwgIkRST1AgQ09OU1RSQUlOVCIsIHRydWUsIGZhbHNlLCBmYWxzZSwg ZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX0RST1BfQ09OVkVSU0lPTiwgIkRST1AgQ09OVkVSU0lP TiIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfRFJPUF9EQVRB QkFTRSwgIkRST1AgREFUQUJBU0UiLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NN RFRBRyhDTURUQUdfRFJPUF9ET01BSU4sICJEUk9QIERPTUFJTiIsIHRydWUsIGZhbHNlLCBmYWxz ZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfRFJPUF9FVkVOVF9UUklHR0VSLCAiRFJPUCBFVkVO VCBUUklHR0VSIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFH X0RST1BfRVhURU5TSU9OLCAiRFJPUCBFWFRFTlNJT04iLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRy dWUpCitQR19DTURUQUcoQ01EVEFHX0RST1BfRk9SRUlHTl9EQVRBX1dSQVBQRVIsICJEUk9QIEZP UkVJR04gREFUQSBXUkFQUEVSIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFH KENNRFRBR19EUk9QX0ZPUkVJR05fVEFCTEUsICJEUk9QIEZPUkVJR04gVEFCTEUiLCB0cnVlLCBm YWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0RST1BfRlVOQ1RJT04sICJEUk9Q IEZVTkNUSU9OIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19E Uk9QX0lOREVYLCAiRFJPUCBJTkRFWCIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NN RFRBRyhDTURUQUdfRFJPUF9MQU5HVUFHRSwgIkRST1AgTEFOR1VBR0UiLCB0cnVlLCBmYWxzZSwg ZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0RST1BfTUFURVJJQUxJWkVEX1ZJRVcsICJE Uk9QIE1BVEVSSUFMSVpFRCBWSUVXIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01E VEFHKENNRFRBR19EUk9QX09QRVJBVE9SLCAiRFJPUCBPUEVSQVRPUiIsIHRydWUsIGZhbHNlLCBm YWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfRFJPUF9PUEVSQVRPUl9DTEFTUywgIkRST1Ag T1BFUkFUT1IgQ0xBU1MiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01E VEFHX0RST1BfT1BFUkFUT1JfRkFNSUxZLCAiRFJPUCBPUEVSQVRPUiBGQU1JTFkiLCB0cnVlLCBm YWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0RST1BfT1dORUQsICJEUk9QIE9X TkVEIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfRFJPUF9Q T0xJQ1ksICJEUk9QIFBPTElDWSIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRB RyhDTURUQUdfRFJPUF9QUk9DRURVUkUsICJEUk9QIFBST0NFRFVSRSIsIHRydWUsIGZhbHNlLCBm YWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfRFJPUF9QVUJMSUNBVElPTiwgIkRST1AgUFVC TElDQVRJT04iLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0RS T1BfUk9MRSwgIkRST1AgUk9MRSIsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQorUEdfQ01E VEFHKENNRFRBR19EUk9QX1JPVVRJTkUsICJEUk9QIFJPVVRJTkUiLCB0cnVlLCBmYWxzZSwgZmFs c2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0RST1BfUlVMRSwgIkRST1AgUlVMRSIsIHRydWUs IGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfRFJPUF9TQ0hFTUEsICJEUk9Q IFNDSEVNQSIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfRFJP UF9TRVFVRU5DRSwgIkRST1AgU0VRVUVOQ0UiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQ R19DTURUQUcoQ01EVEFHX0RST1BfU0VSVkVSLCAiRFJPUCBTRVJWRVIiLCB0cnVlLCBmYWxzZSwg ZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0RST1BfU1RBVElTVElDUywgIkRST1AgU1RB VElTVElDUyIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfRFJP UF9TVUJTQ1JJUFRJT04sICJEUk9QIFNVQlNDUklQVElPTiIsIHRydWUsIGZhbHNlLCBmYWxzZSwg ZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX0RST1BfVEFCTEUsICJEUk9QIFRBQkxFIiwgdHJ1ZSwg ZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19EUk9QX1RBQkxFU1BBQ0UsICJE Uk9QIFRBQkxFU1BBQ0UiLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhD TURUQUdfRFJPUF9URVhUX1NFQVJDSF9DT05GSUdVUkFUSU9OLCAiRFJPUCBURVhUIFNFQVJDSCBD T05GSUdVUkFUSU9OIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRB R19EUk9QX1RFWFRfU0VBUkNIX0RJQ1RJT05BUlksICJEUk9QIFRFWFQgU0VBUkNIIERJQ1RJT05B UlkiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0RST1BfVEVY VF9TRUFSQ0hfUEFSU0VSLCAiRFJPUCBURVhUIFNFQVJDSCBQQVJTRVIiLCB0cnVlLCBmYWxzZSwg ZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0RST1BfVEVYVF9TRUFSQ0hfVEVNUExBVEUs ICJEUk9QIFRFWFQgU0VBUkNIIFRFTVBMQVRFIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQor UEdfQ01EVEFHKENNRFRBR19EUk9QX1RSQU5TRk9STSwgIkRST1AgVFJBTlNGT1JNIiwgdHJ1ZSwg ZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19EUk9QX1RSSUdHRVIsICJEUk9Q IFRSSUdHRVIiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0RS T1BfVFlQRSwgIkRST1AgVFlQRSIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRB RyhDTURUQUdfRFJPUF9VU0VSX01BUFBJTkcsICJEUk9QIFVTRVIgTUFQUElORyIsIHRydWUsIGZh bHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfRFJPUF9WSUVXLCAiRFJPUCBWSUVX IiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19FWEVDVVRFLCAi RVhFQ1VURSIsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQorUEdfQ01EVEFHKENNRFRBR19F WFBMQUlOLCAiRVhQTEFJTiIsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQorUEdfQ01EVEFH KENNRFRBR19GRVRDSCwgIkZFVENIIiwgZmFsc2UsIGZhbHNlLCB0cnVlLCBmYWxzZSkKK1BHX0NN RFRBRyhDTURUQUdfR1JBTlQsICJHUkFOVCIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BH X0NNRFRBRyhDTURUQUdfR1JBTlRfUk9MRSwgIkdSQU5UIFJPTEUiLCBmYWxzZSwgZmFsc2UsIGZh bHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfSU1QT1JUX0ZPUkVJR05fU0NIRU1BLCAiSU1Q T1JUIEZPUkVJR04gU0NIRU1BIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFH KENNRFRBR19JTlNFUlQsICJJTlNFUlQiLCBmYWxzZSwgZmFsc2UsIHRydWUsIGZhbHNlKQorUEdf Q01EVEFHKENNRFRBR19MSVNURU4sICJMSVNURU4iLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxz ZSkKK1BHX0NNRFRBRyhDTURUQUdfTE9BRCwgIkxPQUQiLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBm YWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfTE9DS19UQUJMRSwgIkxPQ0sgVEFCTEUiLCBmYWxzZSwg ZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfTUVSR0UsICJNRVJHRSIsIGZh bHNlLCBmYWxzZSwgdHJ1ZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX01PVkUsICJNT1ZFIiwg ZmFsc2UsIGZhbHNlLCB0cnVlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfTk9USUZZLCAiTk9U SUZZIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX1BSRVBB UkUsICJQUkVQQVJFIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCitQR19DTURUQUcoQ01E VEFHX1BSRVBBUkVfVFJBTlNBQ1RJT04sICJQUkVQQVJFIFRSQU5TQUNUSU9OIiwgZmFsc2UsIGZh bHNlLCBmYWxzZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX1JFQVNTSUdOX09XTkVELCAiUkVB U1NJR04gT1dORUQiLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURU QUdfUkVGUkVTSF9NQVRFUklBTElaRURfVklFVywgIlJFRlJFU0ggTUFURVJJQUxJWkVEIFZJRVci LCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX1JFSU5ERVgsICJS RUlOREVYIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX1JF TEVBU0UsICJSRUxFQVNFIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCitQR19DTURUQUco Q01EVEFHX1JFU0VULCAiUkVTRVQiLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NN RFRBRyhDTURUQUdfUkVWT0tFLCAiUkVWT0tFIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQor UEdfQ01EVEFHKENNRFRBR19SRVZPS0VfUk9MRSwgIlJFVk9LRSBST0xFIiwgZmFsc2UsIGZhbHNl LCBmYWxzZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX1JPTExCQUNLLCAiUk9MTEJBQ0siLCBm YWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfUk9MTEJBQ0tfUFJF UEFSRUQsICJST0xMQkFDSyBQUkVQQVJFRCIsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQor UEdfQ01EVEFHKENNRFRBR19TQVZFUE9JTlQsICJTQVZFUE9JTlQiLCBmYWxzZSwgZmFsc2UsIGZh bHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfU0VDVVJJVFlfTEFCRUwsICJTRUNVUklUWSBM QUJFTCIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfU0VMRUNU LCAiU0VMRUNUIiwgZmFsc2UsIGZhbHNlLCB0cnVlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdf U0VMRUNUX0ZPUl9LRVlfU0hBUkUsICJTRUxFQ1QgRk9SIEtFWSBTSEFSRSIsIGZhbHNlLCBmYWxz ZSwgZmFsc2UsIGZhbHNlKQorUEdfQ01EVEFHKENNRFRBR19TRUxFQ1RfRk9SX05PX0tFWV9VUERB VEUsICJTRUxFQ1QgRk9SIE5PIEtFWSBVUERBVEUiLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxz ZSkKK1BHX0NNRFRBRyhDTURUQUdfU0VMRUNUX0ZPUl9TSEFSRSwgIlNFTEVDVCBGT1IgU0hBUkUi LCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfU0VMRUNUX0ZP Ul9VUERBVEUsICJTRUxFQ1QgRk9SIFVQREFURSIsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNl KQorUEdfQ01EVEFHKENNRFRBR19TRUxFQ1RfSU5UTywgIlNFTEVDVCBJTlRPIiwgdHJ1ZSwgZmFs c2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfU0VULCAiU0VUIiwgZmFsc2UsIGZh bHNlLCBmYWxzZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX1NFVF9DT05TVFJBSU5UUywgIlNF VCBDT05TVFJBSU5UUyIsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQorUEdfQ01EVEFHKENN RFRBR19TSE9XLCAiU0hPVyIsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQorUEdfQ01EVEFH KENNRFRBR19TVEFSVF9UUkFOU0FDVElPTiwgIlNUQVJUIFRSQU5TQUNUSU9OIiwgZmFsc2UsIGZh bHNlLCBmYWxzZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX1RSVU5DQVRFX1RBQkxFLCAiVFJV TkNBVEUgVEFCTEUiLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURU QUdfVU5MSVNURU4sICJVTkxJU1RFTiIsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQorUEdf Q01EVEFHKENNRFRBR19VUERBVEUsICJVUERBVEUiLCBmYWxzZSwgZmFsc2UsIHRydWUsIGZhbHNl KQorUEdfQ01EVEFHKENNRFRBR19WQUNVVU0sICJWQUNVVU0iLCBmYWxzZSwgZmFsc2UsIGZhbHNl LCBmYWxzZSkKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3V0aWxzL2V2dGNhY2hlLmggYi9zcmMv aW5jbHVkZS91dGlscy9ldnRjYWNoZS5oCmluZGV4IGQzNDAwMjYuLjkxZDRiZGQgMTAwNjQ0Ci0t LSBhL3NyYy9pbmNsdWRlL3V0aWxzL2V2dGNhY2hlLmgKKysrIGIvc3JjL2luY2x1ZGUvdXRpbHMv ZXZ0Y2FjaGUuaApAQCAtMjIsNyArMjIsOCBAQCB0eXBlZGVmIGVudW0KIAlFVlRfRERMQ29tbWFu ZFN0YXJ0LAogCUVWVF9ERExDb21tYW5kRW5kLAogCUVWVF9TUUxEcm9wLAotCUVWVF9UYWJsZVJl d3JpdGUKKwlFVlRfVGFibGVSZXdyaXRlLAorCUVWVF9UYWJsZUluaXRXcml0ZQogfSBFdmVudFRy aWdnZXJFdmVudDsKIAogdHlwZWRlZiBzdHJ1Y3QKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVs ZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL2V4cGVjdGVkL2NyZWF0ZV90YWJsZS5vdXQgYi9z cmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9leHBlY3RlZC9jcmVhdGVf dGFibGUub3V0CmluZGV4IDllZWFhMWMuLjhlNmZmYTkgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L21v ZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL2V4cGVjdGVkL2NyZWF0ZV90YWJsZS5vdXQK KysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvZXhwZWN0ZWQv Y3JlYXRlX3RhYmxlLm91dApAQCAtMjAsNiArMjAsMTMgQEAgTk9USUNFOiAgcmUtZm9ybWVkIGNv bW1hbmQ6IEFMVEVSIFRBQkxFIHB1YmxpYy5jdGx0MSBBTFRFUiBDT0xVTU4gYSBTRVQgU1RPUkFH RQogQUxURVIgVEFCTEUgY3RsdDEgQUxURVIgQ09MVU1OIGIgU0VUIFNUT1JBR0UgRVhURVJOQUw7 CiBOT1RJQ0U6ICBkZXBhcnNlZCBqc29uOiB7ImZtdCI6ICJBTFRFUiAle29ianR5cGV9cyAle2lk ZW50aXR5fUQgJXtzdWJjbWRzOiwgfXMiLCAib2JqdHlwZSI6ICJUQUJMRSIsICJzdWJjbWRzIjog W3siZm10IjogIkFMVEVSIENPTFVNTiAle2NvbHVtbn1JIFNFVCBTVE9SQUdFICV7c3RvcmFnZX1z IiwgInR5cGUiOiAic2V0IHN0b3JhZ2UiLCAiY29sdW1uIjogImIiLCAic3RvcmFnZSI6ICJleHRl cm5hbCJ9XSwgImlkZW50aXR5IjogeyJvYmpuYW1lIjogImN0bHQxIiwgInNjaGVtYW5hbWUiOiAi cHVibGljIn19CiBOT1RJQ0U6ICByZS1mb3JtZWQgY29tbWFuZDogQUxURVIgVEFCTEUgcHVibGlj LmN0bHQxIEFMVEVSIENPTFVNTiBiIFNFVCBTVE9SQUdFIGV4dGVybmFsCitDUkVBVEUgVEFCTEUg Y3RsdDFfbGlrZSAoTElLRSBjdGx0MSBJTkNMVURJTkcgQUxMKTsKK05PVElDRTogIGRlcGFyc2Vk IGpzb246IHsiZm10IjogIkNSRUFURSAle3BlcnNpc3RlbmNlfXMgVEFCTEUgJXtpZl9ub3RfZXhp c3RzfXMgJXtpZGVudGl0eX1EICgle3RhYmxlX2VsZW1lbnRzOiwgfXMpICV7aW5oZXJpdHN9cyAl e3RhYmxlc3BhY2V9cyAle29uX2NvbW1pdH1zICV7cGFydGl0aW9uX2J5fXMgJXthY2Nlc3NfbWV0 aG9kfXMgJXt3aXRoX2NsYXVzZX1zIiwgImlkZW50aXR5IjogeyJvYmpuYW1lIjogImN0bHQxX2xp a2UiLCAic2NoZW1hbmFtZSI6ICJwdWJsaWMifSwgImluaGVyaXRzIjogeyJmbXQiOiAiSU5IRVJJ VFMgKCV7cGFyZW50czosIH1EKSIsICJwYXJlbnRzIjogbnVsbCwgInByZXNlbnQiOiBmYWxzZX0s ICJvbl9jb21taXQiOiB7ImZtdCI6ICJPTiBDT01NSVQgJXtvbl9jb21taXRfdmFsdWV9cyIsICJw cmVzZW50IjogZmFsc2UsICJvbl9jb21taXRfdmFsdWUiOiBudWxsfSwgInRhYmxlc3BhY2UiOiB7 ImZtdCI6ICJUQUJMRVNQQUNFICV7dGFibGVzcGFjZX1JIiwgInByZXNlbnQiOiBmYWxzZSwgInRh Ymxlc3BhY2UiOiBudWxsfSwgInBlcnNpc3RlbmNlIjogIiIsICJ3aXRoX2NsYXVzZSI6IHsiZm10 IjogIldJVEgiLCAicHJlc2VudCI6IGZhbHNlfSwgInBhcnRpdGlvbl9ieSI6IHsiZm10IjogIlBB UlRJVElPTiBCWSAle2RlZmluaXRpb259cyIsICJwcmVzZW50IjogZmFsc2UsICJkZWZpbml0aW9u IjogbnVsbH0sICJhY2Nlc3NfbWV0aG9kIjogeyJmbXQiOiAiVVNJTkcgJXthY2Nlc3NfbWV0aG9k fUkiLCAicHJlc2VudCI6IGZhbHNlLCAiYWNjZXNzX21ldGhvZCI6IG51bGx9LCAiaWZfbm90X2V4 aXN0cyI6ICIiLCAidGFibGVfZWxlbWVudHMiOiBbeyJmbXQiOiAiJXtuYW1lfUkgJXtjb2x0eXBl fVQgU1RPUkFHRSAle2NvbHN0b3JhZ2V9cyAle2NvbXByZXNzaW9ufXMgJXtjb2xsYXRpb259cyAl e25vdF9udWxsfXMgJXtkZWZhdWx0fXMgJXtnZW5lcmF0ZWRfY29sdW1ufXMiLCAibmFtZSI6ICJh IiwgInR5cGUiOiAiY29sdW1uIiwgImNvbHR5cGUiOiB7InR5cG1vZCI6ICIiLCAidHlwYXJyYXki OiBmYWxzZSwgInR5cGVuYW1lIjogInRleHQiLCAic2NoZW1hbmFtZSI6ICJwZ19jYXRhbG9nIn0s ICJkZWZhdWx0IjogeyJmbXQiOiAiREVGQVVMVCIsICJwcmVzZW50IjogZmFsc2V9LCAibm90X251 bGwiOiAiIiwgImNvbGxhdGlvbiI6IHsiZm10IjogIkNPTExBVEUgJXtuYW1lfUQiLCAibmFtZSI6 IHsib2JqbmFtZSI6ICJkZWZhdWx0IiwgInNjaGVtYW5hbWUiOiAicGdfY2F0YWxvZyJ9fSwgImNv bHN0b3JhZ2UiOiAibWFpbiIsICJjb21wcmVzc2lvbiI6IHsiZm10IjogIkNPTVBSRVNTSU9OICV7 Y29tcHJlc3Npb25fbWV0aG9kfUkiLCAicHJlc2VudCI6IGZhbHNlLCAiY29tcHJlc3Npb25fbWV0 aG9kIjogbnVsbH0sICJnZW5lcmF0ZWRfY29sdW1uIjogeyJmbXQiOiAiR0VORVJBVEVEIEFMV0FZ UyBBUyIsICJwcmVzZW50IjogZmFsc2V9fSwgeyJmbXQiOiAiJXtuYW1lfUkgJXtjb2x0eXBlfVQg U1RPUkFHRSAle2NvbHN0b3JhZ2V9cyAle2NvbXByZXNzaW9ufXMgJXtjb2xsYXRpb259cyAle25v dF9udWxsfXMgJXtkZWZhdWx0fXMgJXtnZW5lcmF0ZWRfY29sdW1ufXMiLCAibmFtZSI6ICJiIiwg InR5cGUiOiAiY29sdW1uIiwgImNvbHR5cGUiOiB7InR5cG1vZCI6ICIiLCAidHlwYXJyYXkiOiBm YWxzZSwgInR5cGVuYW1lIjogInRleHQiLCAic2NoZW1hbmFtZSI6ICJwZ19jYXRhbG9nIn0sICJk ZWZhdWx0IjogeyJmbXQiOiAiREVGQVVMVCIsICJwcmVzZW50IjogZmFsc2V9LCAibm90X251bGwi OiAiIiwgImNvbGxhdGlvbiI6IHsiZm10IjogIkNPTExBVEUgJXtuYW1lfUQiLCAibmFtZSI6IHsi b2JqbmFtZSI6ICJkZWZhdWx0IiwgInNjaGVtYW5hbWUiOiAicGdfY2F0YWxvZyJ9fSwgImNvbHN0 b3JhZ2UiOiAiZXh0ZXJuYWwiLCAiY29tcHJlc3Npb24iOiB7ImZtdCI6ICJDT01QUkVTU0lPTiAl e2NvbXByZXNzaW9uX21ldGhvZH1JIiwgInByZXNlbnQiOiBmYWxzZSwgImNvbXByZXNzaW9uX21l dGhvZCI6IG51bGx9LCAiZ2VuZXJhdGVkX2NvbHVtbiI6IHsiZm10IjogIkdFTkVSQVRFRCBBTFdB WVMgQVMiLCAicHJlc2VudCI6IGZhbHNlfX0sIHsiZm10IjogIkNPTlNUUkFJTlQgJXtuYW1lfUkg JXtkZWZpbml0aW9ufXMiLCAibmFtZSI6ICJjdGx0MV9hX2NoZWNrIiwgInR5cGUiOiAiY29uc3Ry YWludCIsICJjb250eXBlIjogImNoZWNrIiwgImRlZmluaXRpb24iOiAiQ0hFQ0sgKChwZ19jYXRh bG9nLmxlbmd0aChhKSBPUEVSQVRPUihwZ19jYXRhbG9nLj4pIDIpKSJ9LCB7ImZtdCI6ICJDT05T VFJBSU5UICV7bmFtZX1JICV7ZGVmaW5pdGlvbn1zIiwgIm5hbWUiOiAiY3RsdDFfbGlrZV9wa2V5 IiwgInR5cGUiOiAiY29uc3RyYWludCIsICJjb250eXBlIjogInByaW1hcnkga2V5IiwgImRlZmlu aXRpb24iOiAiUFJJTUFSWSBLRVkgKGEpIn1dfQorTk9USUNFOiAgcmUtZm9ybWVkIGNvbW1hbmQ6 IENSRUFURSAgVEFCTEUgIHB1YmxpYy5jdGx0MV9saWtlIChhIHBnX2NhdGFsb2cudGV4dCBTVE9S QUdFIG1haW4gIENPTExBVEUgcGdfY2F0YWxvZy4iZGVmYXVsdCIgICAsIGIgcGdfY2F0YWxvZy50 ZXh0IFNUT1JBR0UgZXh0ZXJuYWwgIENPTExBVEUgcGdfY2F0YWxvZy4iZGVmYXVsdCIgICAsIENP TlNUUkFJTlQgY3RsdDFfYV9jaGVjayBDSEVDSyAoKHBnX2NhdGFsb2cubGVuZ3RoKGEpIE9QRVJB VE9SKHBnX2NhdGFsb2cuPikgMikpLCBDT05TVFJBSU5UIGN0bHQxX2xpa2VfcGtleSBQUklNQVJZ IEtFWSAoYSkpICAgICAgCitOT1RJQ0U6ICBkZXBhcnNlZCBqc29uOiA8TlVMTD4KK05PVElDRTog IHJlLWZvcm1lZCBjb21tYW5kOiA8TlVMTD4KK05PVElDRTogIGRlcGFyc2VkIGpzb246IDxOVUxM PgorTk9USUNFOiAgcmUtZm9ybWVkIGNvbW1hbmQ6IDxOVUxMPgogLS0gVGVzdCBmb3JlaWduIGtl eSBjb25zdHJhaW50IGlzIGhhbmRsZWQgaW4gYSBmb2xsb3dpbmcgQUxURVIgVEFCTEUgQUREIENP TlNUUkFJTlQgRk9SRUlHTiBLRVkgUkVGRVJFTkNFUyBzdWJjb21tYW5kCiBDUkVBVEUgVEFCTEUg cHJvZHVjdCAoaWQgaW50IFBSSU1BUlkgS0VZLCBuYW1lIHRleHQpOwogTk9USUNFOiAgZGVwYXJz ZWQganNvbjogeyJmbXQiOiAiQ1JFQVRFICV7cGVyc2lzdGVuY2V9cyBUQUJMRSAle2lmX25vdF9l eGlzdHN9cyAle2lkZW50aXR5fUQgKCV7dGFibGVfZWxlbWVudHM6LCB9cykgJXtpbmhlcml0c31z ICV7dGFibGVzcGFjZX1zICV7b25fY29tbWl0fXMgJXtwYXJ0aXRpb25fYnl9cyAle2FjY2Vzc19t ZXRob2R9cyAle3dpdGhfY2xhdXNlfXMiLCAiaWRlbnRpdHkiOiB7Im9iam5hbWUiOiAicHJvZHVj dCIsICJzY2hlbWFuYW1lIjogInB1YmxpYyJ9LCAiaW5oZXJpdHMiOiB7ImZtdCI6ICJJTkhFUklU UyAoJXtwYXJlbnRzOiwgfUQpIiwgInBhcmVudHMiOiBudWxsLCAicHJlc2VudCI6IGZhbHNlfSwg Im9uX2NvbW1pdCI6IHsiZm10IjogIk9OIENPTU1JVCAle29uX2NvbW1pdF92YWx1ZX1zIiwgInBy ZXNlbnQiOiBmYWxzZSwgIm9uX2NvbW1pdF92YWx1ZSI6IG51bGx9LCAidGFibGVzcGFjZSI6IHsi Zm10IjogIlRBQkxFU1BBQ0UgJXt0YWJsZXNwYWNlfUkiLCAicHJlc2VudCI6IGZhbHNlLCAidGFi bGVzcGFjZSI6IG51bGx9LCAicGVyc2lzdGVuY2UiOiAiIiwgIndpdGhfY2xhdXNlIjogeyJmbXQi OiAiV0lUSCIsICJwcmVzZW50IjogZmFsc2V9LCAicGFydGl0aW9uX2J5IjogeyJmbXQiOiAiUEFS VElUSU9OIEJZICV7ZGVmaW5pdGlvbn1zIiwgInByZXNlbnQiOiBmYWxzZSwgImRlZmluaXRpb24i OiBudWxsfSwgImFjY2Vzc19tZXRob2QiOiB7ImZtdCI6ICJVU0lORyAle2FjY2Vzc19tZXRob2R9 SSIsICJwcmVzZW50IjogZmFsc2UsICJhY2Nlc3NfbWV0aG9kIjogbnVsbH0sICJpZl9ub3RfZXhp c3RzIjogIiIsICJ0YWJsZV9lbGVtZW50cyI6IFt7ImZtdCI6ICIle25hbWV9SSAle2NvbHR5cGV9 VCBTVE9SQUdFICV7Y29sc3RvcmFnZX1zICV7Y29tcHJlc3Npb259cyAle2NvbGxhdGlvbn1zICV7 bm90X251bGx9cyAle2RlZmF1bHR9cyAle2dlbmVyYXRlZF9jb2x1bW59cyIsICJuYW1lIjogImlk IiwgInR5cGUiOiAiY29sdW1uIiwgImNvbHR5cGUiOiB7InR5cG1vZCI6ICIiLCAidHlwYXJyYXki OiBmYWxzZSwgInR5cGVuYW1lIjogImludDQiLCAic2NoZW1hbmFtZSI6ICJwZ19jYXRhbG9nIn0s ICJkZWZhdWx0IjogeyJmbXQiOiAiREVGQVVMVCIsICJwcmVzZW50IjogZmFsc2V9LCAibm90X251 bGwiOiAiIiwgImNvbGxhdGlvbiI6IHsiZm10IjogIkNPTExBVEUiLCAicHJlc2VudCI6IGZhbHNl fSwgImNvbHN0b3JhZ2UiOiAicGxhaW4iLCAiY29tcHJlc3Npb24iOiB7ImZtdCI6ICJDT01QUkVT U0lPTiAle2NvbXByZXNzaW9uX21ldGhvZH1JIiwgInByZXNlbnQiOiBmYWxzZSwgImNvbXByZXNz aW9uX21ldGhvZCI6IG51bGx9LCAiZ2VuZXJhdGVkX2NvbHVtbiI6IHsiZm10IjogIkdFTkVSQVRF RCBBTFdBWVMgQVMiLCAicHJlc2VudCI6IGZhbHNlfX0sIHsiZm10IjogIiV7bmFtZX1JICV7Y29s dHlwZX1UIFNUT1JBR0UgJXtjb2xzdG9yYWdlfXMgJXtjb21wcmVzc2lvbn1zICV7Y29sbGF0aW9u fXMgJXtub3RfbnVsbH1zICV7ZGVmYXVsdH1zICV7Z2VuZXJhdGVkX2NvbHVtbn1zIiwgIm5hbWUi OiAibmFtZSIsICJ0eXBlIjogImNvbHVtbiIsICJjb2x0eXBlIjogeyJ0eXBtb2QiOiAiIiwgInR5 cGFycmF5IjogZmFsc2UsICJ0eXBlbmFtZSI6ICJ0ZXh0IiwgInNjaGVtYW5hbWUiOiAicGdfY2F0 YWxvZyJ9LCAiZGVmYXVsdCI6IHsiZm10IjogIkRFRkFVTFQiLCAicHJlc2VudCI6IGZhbHNlfSwg Im5vdF9udWxsIjogIiIsICJjb2xsYXRpb24iOiB7ImZtdCI6ICJDT0xMQVRFICV7bmFtZX1EIiwg Im5hbWUiOiB7Im9iam5hbWUiOiAiZGVmYXVsdCIsICJzY2hlbWFuYW1lIjogInBnX2NhdGFsb2ci fX0sICJjb2xzdG9yYWdlIjogImV4dGVuZGVkIiwgImNvbXByZXNzaW9uIjogeyJmbXQiOiAiQ09N UFJFU1NJT04gJXtjb21wcmVzc2lvbl9tZXRob2R9SSIsICJwcmVzZW50IjogZmFsc2UsICJjb21w cmVzc2lvbl9tZXRob2QiOiBudWxsfSwgImdlbmVyYXRlZF9jb2x1bW4iOiB7ImZtdCI6ICJHRU5F UkFURUQgQUxXQVlTIEFTIiwgInByZXNlbnQiOiBmYWxzZX19LCB7ImZtdCI6ICJDT05TVFJBSU5U ICV7bmFtZX1JICV7ZGVmaW5pdGlvbn1zIiwgIm5hbWUiOiAicHJvZHVjdF9wa2V5IiwgInR5cGUi OiAiY29uc3RyYWludCIsICJjb250eXBlIjogInByaW1hcnkga2V5IiwgImRlZmluaXRpb24iOiAi UFJJTUFSWSBLRVkgKGlkKSJ9XX0KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9k ZGxfZGVwYXJzZV9yZWdyZXNzL3NxbC9jcmVhdGVfdGFibGUuc3FsIGIvc3JjL3Rlc3QvbW9kdWxl cy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3Mvc3FsL2NyZWF0ZV90YWJsZS5zcWwKaW5kZXggOTk3 ZDJmNS4uMWM1ZjBjMiAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBh cnNlX3JlZ3Jlc3Mvc3FsL2NyZWF0ZV90YWJsZS5zcWwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90 ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3Mvc3FsL2NyZWF0ZV90YWJsZS5zcWwKQEAgLTksNiArOSw3 IEBAIENSRUFURSBVTklRVUUgSU5ERVggY292ZXJpbmdfaW5kZXggb24gc2ltcGxlX3RhYmxlIChp ZCkgSU5DTFVERSAobmFtZSk7CiBDUkVBVEUgVEFCTEUgY3RsdDEgKGEgdGV4dCBDSEVDSyAobGVu Z3RoKGEpID4gMikgUFJJTUFSWSBLRVksIGIgdGV4dCk7CiBBTFRFUiBUQUJMRSBjdGx0MSBBTFRF UiBDT0xVTU4gYSBTRVQgU1RPUkFHRSBNQUlOOwogQUxURVIgVEFCTEUgY3RsdDEgQUxURVIgQ09M VU1OIGIgU0VUIFNUT1JBR0UgRVhURVJOQUw7CitDUkVBVEUgVEFCTEUgY3RsdDFfbGlrZSAoTElL RSBjdGx0MSBJTkNMVURJTkcgQUxMKTsKIAogLS0gVGVzdCBmb3JlaWduIGtleSBjb25zdHJhaW50 IGlzIGhhbmRsZWQgaW4gYSBmb2xsb3dpbmcgQUxURVIgVEFCTEUgQUREIENPTlNUUkFJTlQgRk9S RUlHTiBLRVkgUkVGRVJFTkNFUyBzdWJjb21tYW5kCiBDUkVBVEUgVEFCTEUgcHJvZHVjdCAoaWQg aW50IFBSSU1BUlkgS0VZLCBuYW1lIHRleHQpOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVz cy9leHBlY3RlZC9wc3FsLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcHNxbC5vdXQK aW5kZXggOGZjNjJjZS4uZDhhZmZhZSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBl Y3RlZC9wc3FsLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3BzcWwub3V0CkBA IC02MTk0LDkgKzYxOTQsOSBAQCBMaXN0IG9mIHNjaGVtYXMKICgwIHJvd3MpCiAKIFxkUnAgIm5v LnN1Y2gucHVibGljYXRpb24iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0IG9m IHB1YmxpY2F0aW9ucwotIE5hbWUgfCBPd25lciB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBk YXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLSstLS0tLS0tKy0t LS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0t LS0tLS0tCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0IG9m IHB1YmxpY2F0aW9ucworIE5hbWUgfCBPd25lciB8IEFsbCB0YWJsZXMgfCBBbGwgRERMcyB8IFRh YmxlIERETHMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEg cm9vdCAKKy0tLS0tLSstLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCiAo MCByb3dzKQogCiBcZFJzICJuby5zdWNoLnN1YnNjcmlwdGlvbiIKZGlmZiAtLWdpdCBhL3NyYy90 ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcHVibGljYXRpb24ub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9l eHBlY3RlZC9wdWJsaWNhdGlvbi5vdXQKaW5kZXggNDI3Zjg3ZS4uYjIzMTdlNyAxMDA2NDQKLS0t IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wdWJsaWNhdGlvbi5vdXQKKysrIGIvc3JjL3Rl c3QvcmVncmVzcy9leHBlY3RlZC9wdWJsaWNhdGlvbi5vdXQKQEAgLTMwLDIwICszMCwyMCBAQCBF UlJPUjogIGNvbmZsaWN0aW5nIG9yIHJlZHVuZGFudCBvcHRpb25zCiBMSU5FIDE6IC4uLnViX3h4 eCBXSVRIIChwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCA9ICd0cnVlJywgcHVibGlzaF92aS4u LgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIF4KIFxkUnAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBMaXN0IG9mIHB1YmxpY2F0aW9ucwotICAgICAgICBOYW1lICAgICAgICB8ICAgICAgICAg IE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0 ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gdGVzdHBpYl9pbnNfdHJ1bmN0IHwgcmVncmVz c19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAg ICAgICB8IGYgICAgICAgICB8IGYKLSB0ZXN0cHViX2RlZmF1bHQgICAgfCByZWdyZXNzX3B1Ymxp Y2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgZiAgICAgICB8IHQgICAgICAgfCBmICAgICAgIHwg ZiAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIExpc3Qgb2YgcHVibGljYXRpb25zCisgICAgICAgIE5hbWUgICAgICAg IHwgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEFsbCBERExzIHwgVGFi bGUgRERMcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSBy b290IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KKyB0ZXN0cGliX2luc190cnVuY3QgfCByZWdy ZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgZiAgICAgICAgfCBmICAgICAgICAg IHwgdCAgICAgICB8IGYgICAgICAgfCBmICAgICAgIHwgZiAgICAgICAgIHwgZgorIHRlc3RwdWJf ZGVmYXVsdCAgICB8IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCBmICAg ICAgICB8IGYgICAgICAgICAgfCBmICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgfCBmICAgICAg ICAgfCBmCiAoMiByb3dzKQogCiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViX2RlZmF1bHQgU0VU IChwdWJsaXNoID0gJ2luc2VydCwgdXBkYXRlLCBkZWxldGUnKTsKIFxkUnAKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0IG9mIHB1YmxpY2F0aW9ucwot ICAgICAgICBOYW1lICAgICAgICB8ICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJs ZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAK LS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0t Ci0gdGVzdHBpYl9pbnNfdHJ1bmN0IHwgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAg ICAgICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgICB8IGYKLSB0ZXN0 cHViX2RlZmF1bHQgICAgfCByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICAgIHwgZgorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpc3Qgb2YgcHVi bGljYXRpb25zCisgICAgICAgIE5hbWUgICAgICAgIHwgICAgICAgICAgT3duZXIgICAgICAgICAg IHwgQWxsIHRhYmxlcyB8IEFsbCBERExzIHwgVGFibGUgRERMcyB8IEluc2VydHMgfCBVcGRhdGVz IHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0t LS0KKyB0ZXN0cGliX2luc190cnVuY3QgfCByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAg ICAgICAgIHwgZiAgICAgICAgfCBmICAgICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgfCBmICAg ICAgIHwgZiAgICAgICAgIHwgZgorIHRlc3RwdWJfZGVmYXVsdCAgICB8IHJlZ3Jlc3NfcHVibGlj YXRpb25fdXNlciB8IGYgICAgICAgICAgfCBmICAgICAgICB8IGYgICAgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgfCBmICAgICAgICAgfCBmCiAoMiByb3dzKQogCiAtLS0gYWRk aW5nIHRhYmxlcwpAQCAtODcsMTAgKzg3LDEwIEBAIFJFU0VUIGNsaWVudF9taW5fbWVzc2FnZXM7 CiAtLSBzaG91bGQgYmUgYWJsZSB0byBhZGQgc2NoZW1hIHRvICdGT1IgVEFCTEUnIHB1YmxpY2F0 aW9uCiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvcnRhYmxlIEFERCBUQUJMRVMgSU4gU0NI RU1BIHB1Yl90ZXN0OwogXGRScCsgdGVzdHB1Yl9mb3J0YWJsZQotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnRhYmxlCi0gICAgICAgICAgT3du ZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8 IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0t LS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnRhYmxlCisgICAgICAg ICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEFsbCBERExzIHwgVGFibGUgRERMcyB8 IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0K KyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgZiAgICAgICAgfCBmICAg ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgogVGFi bGVzOgogICAgICJwdWJsaWMudGVzdHB1Yl90YmwxIgogVGFibGVzIGZyb20gc2NoZW1hczoKQEAg LTk5LDIwICs5OSwyMCBAQCBUYWJsZXMgZnJvbSBzY2hlbWFzOgogLS0gc2hvdWxkIGJlIGFibGUg dG8gZHJvcCBzY2hlbWEgZnJvbSAnRk9SIFRBQkxFJyBwdWJsaWNhdGlvbgogQUxURVIgUFVCTElD QVRJT04gdGVzdHB1Yl9mb3J0YWJsZSBEUk9QIFRBQkxFUyBJTiBTQ0hFTUEgcHViX3Rlc3Q7CiBc ZFJwKyB0ZXN0cHViX2ZvcnRhYmxlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1 YmxpY2F0aW9uIHRlc3RwdWJfZm9ydGFibGUKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBB bGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlh IHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVi bGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAg fCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9ydGFibGUKKyAgICAgICAgICBPd25lciAgICAgICAg ICAgfCBBbGwgdGFibGVzIHwgQWxsIERETHMgfCBUYWJsZSBERExzIHwgSW5zZXJ0cyB8IFVwZGF0 ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCistLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQorIHJlZ3Jlc3NfcHVibGlj YXRpb25fdXNlciB8IGYgICAgICAgICAgfCBmICAgICAgICB8IGYgICAgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCiBUYWJsZXM6CiAgICAgInB1Ymxp Yy50ZXN0cHViX3RibDEiCiAKIC0tIHNob3VsZCBiZSBhYmxlIHRvIHNldCBzY2hlbWEgdG8gJ0ZP UiBUQUJMRScgcHVibGljYXRpb24KIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9ydGFibGUg U0VUIFRBQkxFUyBJTiBTQ0hFTUEgcHViX3Rlc3Q7CiBcZFJwKyB0ZXN0cHViX2ZvcnRhYmxlCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9ydGFi bGUKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVw ZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJf Zm9ydGFibGUKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgQWxsIERE THMgfCBUYWJsZSBERExzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVz IHwgVmlhIHJvb3QgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tLS0rLS0tLS0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAg fCBmICAgICAgICB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJwdWJfdGVzdCIKIApAQCAt MTIzLDEwICsxMjMsMTAgQEAgQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9yc2NoZW1hIEZP UiBUQUJMRVMgSU4gU0NIRU1BIHB1Yl90ZXN0OwogQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWJf Zm9yX3RibF9zY2hlbWEgRk9SIFRBQkxFUyBJTiBTQ0hFTUEgcHViX3Rlc3QsIFRBQkxFIHB1Yl90 ZXN0LnRlc3RwdWJfbm9wazsKIFJFU0VUIGNsaWVudF9taW5fbWVzc2FnZXM7CiBcZFJwKyB0ZXN0 cHViX2Zvcl90Ymxfc2NoZW1hCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0 aW9uIHRlc3RwdWJfZm9yX3RibF9zY2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBB bGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlh IHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVi bGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAg fCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9yX3RibF9zY2hlbWEKKyAgICAgICAgICBPd25lciAgICAg ICAgICAgfCBBbGwgdGFibGVzIHwgQWxsIERETHMgfCBUYWJsZSBERExzIHwgSW5zZXJ0cyB8IFVw ZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQorIHJlZ3Jlc3NfcHVi bGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCBmICAgICAgICB8IGYgICAgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCiBUYWJsZXM6CiAgICAgInB1 Yl90ZXN0LnRlc3RwdWJfbm9wayIKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CkBAIC0xMzUsMTAgKzEz NSwxMCBAQCBUYWJsZXMgZnJvbSBzY2hlbWFzOgogLS0gc2hvdWxkIGJlIGFibGUgdG8gYWRkIGEg dGFibGUgb2YgdGhlIHNhbWUgc2NoZW1hIHRvIHRoZSBzY2hlbWEgcHVibGljYXRpb24KIEFMVEVS IFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9yc2NoZW1hIEFERCBUQUJMRSBwdWJfdGVzdC50ZXN0cHVi X25vcGs7CiBcZFJwKyB0ZXN0cHViX2ZvcnNjaGVtYQotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAg ICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5j YXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSBy ZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9yc2NoZW1hCisgICAgICAgICAgT3du ZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEFsbCBERExzIHwgVGFibGUgRERMcyB8IEluc2Vy dHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KKyByZWdy ZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgZiAgICAgICAgfCBmICAgICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgogVGFibGVzOgog ICAgICJwdWJfdGVzdC50ZXN0cHViX25vcGsiCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgpAQCAtMTQ3 LDEwICsxNDcsMTAgQEAgVGFibGVzIGZyb20gc2NoZW1hczoKIC0tIHNob3VsZCBiZSBhYmxlIHRv IGRyb3AgdGhlIHRhYmxlCiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvcnNjaGVtYSBEUk9Q IFRBQkxFIHB1Yl90ZXN0LnRlc3RwdWJfbm9wazsKIFxkUnArIHRlc3RwdWJfZm9yc2NoZW1hCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3JzY2hl bWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVw ZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9m b3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgQWxsIERE THMgfCBUYWJsZSBERExzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVz IHwgVmlhIHJvb3QgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tLS0rLS0tLS0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAg fCBmICAgICAgICB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJwdWJfdGVzdCIKIApAQCAt MTYxLDEwICsxNjEsMTAgQEAgRVJST1I6ICByZWxhdGlvbiAidGVzdHB1Yl9ub3BrIiBpcyBub3Qg cGFydCBvZiB0aGUgcHVibGljYXRpb24KIC0tIHNob3VsZCBiZSBhYmxlIHRvIHNldCB0YWJsZSB0 byBzY2hlbWEgcHVibGljYXRpb24KIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9yc2NoZW1h IFNFVCBUQUJMRSBwdWJfdGVzdC50ZXN0cHViX25vcGs7CiBcZFJwKyB0ZXN0cHViX2ZvcnNjaGVt YQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9y c2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMg fCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAg ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3Rw dWJfZm9yc2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEFs bCBERExzIHwgVGFibGUgRERMcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5j YXRlcyB8IFZpYSByb290IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLS0tKy0tLS0tLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAg ICAgIHwgZiAgICAgICAgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICAgIHwgZgogVGFibGVzOgogICAgICJwdWJfdGVzdC50ZXN0cHViX25vcGsiCiAK QEAgLTE4NiwxMCArMTg2LDEwIEBAIFB1YmxpY2F0aW9uczoKICAgICAidGVzdHB1Yl9mb3JhbGx0 YWJsZXMiCiAKIFxkUnArIHRlc3RwdWJfZm9yYWxsdGFibGVzCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcmFsbHRhYmxlcwotICAgICAgICAgIE93 bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMg fCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0t LS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgdCAgICAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9yYWxsdGFibGVzCisgICAg ICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEFsbCBERExzIHwgVGFibGUgRERM cyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAor LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0t LS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCB0ICAgICAgICAgIHwgZiAgICAgICAgfCBm ICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAgICAgIHwgZgog KDEgcm93KQogCiBEUk9QIFRBQkxFIHRlc3RwdWJfdGJsMjsKQEAgLTIwMSwxOSArMjAxLDE5IEBA IENSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHViMyBGT1IgVEFCTEUgdGVzdHB1Yl90YmwzOwogQ1JF QVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWI0IEZPUiBUQUJMRSBPTkxZIHRlc3RwdWJfdGJsMzsKIFJF U0VUIGNsaWVudF9taW5fbWVzc2FnZXM7CiBcZFJwKyB0ZXN0cHViMwotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjMKLSAgICAgICAgICBPd25l ciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwg VHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0t LQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMworICAgICAgICAgIE93 bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBBbGwgRERMcyB8IFRhYmxlIERETHMgfCBJbnNl cnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCisgcmVn cmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IGYgICAgICAgIHwgZiAgICAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKIFRhYmxlczoK ICAgICAicHVibGljLnRlc3RwdWJfdGJsMyIKICAgICAicHVibGljLnRlc3RwdWJfdGJsM2EiCiAK IFxkUnArIHRlc3RwdWI0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJs aWNhdGlvbiB0ZXN0cHViNAotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMg fCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91 c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAg ICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1 YmxpY2F0aW9uIHRlc3RwdWI0CisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxl cyB8IEFsbCBERExzIHwgVGFibGUgRERMcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8 IFRydW5jYXRlcyB8IFZpYSByb290IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBm ICAgICAgICAgIHwgZiAgICAgICAgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgIHwgdCAgICAgICAgIHwgZgogVGFibGVzOgogICAgICJwdWJsaWMudGVzdHB1Yl90Ymwz IgogCkBAIC0yMzQsMTAgKzIzNCwxMCBAQCBVUERBVEUgdGVzdHB1Yl9wYXJ0ZWQxIFNFVCBhID0g MTsKIC0tIG9ubHkgcGFyZW50IGlzIGxpc3RlZCBhcyBiZWluZyBpbiBwdWJsaWNhdGlvbiwgbm90 IHRoZSBwYXJ0aXRpb24KIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9ycGFydGVkIEFERCBU QUJMRSB0ZXN0cHViX3BhcnRlZDsKIFxkUnArIHRlc3RwdWJfZm9ycGFydGVkCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3JwYXJ0ZWQKLSAgICAg ICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBE ZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0r LS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3JwYXJ0ZWQK KyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgQWxsIERETHMgfCBUYWJs ZSBERExzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJv b3QgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0t LS0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCBmICAgICAg ICB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAg fCBmCiBUYWJsZXM6CiAgICAgInB1YmxpYy50ZXN0cHViX3BhcnRlZCIKIApAQCAtMjUyLDEwICsy NTIsMTAgQEAgQUxURVIgVEFCTEUgdGVzdHB1Yl9wYXJ0ZWQgREVUQUNIIFBBUlRJVElPTiB0ZXN0 cHViX3BhcnRlZDE7CiBVUERBVEUgdGVzdHB1Yl9wYXJ0ZWQxIFNFVCBhID0gMTsKIEFMVEVSIFBV QkxJQ0FUSU9OIHRlc3RwdWJfZm9ycGFydGVkIFNFVCAocHVibGlzaF92aWFfcGFydGl0aW9uX3Jv b3QgPSB0cnVlKTsKIFxkUnArIHRlc3RwdWJfZm9ycGFydGVkCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3JwYXJ0ZWQKLSAgICAgICAgICBPd25l ciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwg VHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0t LQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCB0CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3JwYXJ0ZWQKKyAgICAgICAg ICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgQWxsIERETHMgfCBUYWJsZSBERExzIHwg SW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQor IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCBmICAgICAgICB8IGYgICAg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCB0CiBUYWJs ZXM6CiAgICAgInB1YmxpYy50ZXN0cHViX3BhcnRlZCIKIApAQCAtMjg0LDEwICsyODQsMTAgQEAg U0VUIGNsaWVudF9taW5fbWVzc2FnZXMgPSAnRVJST1InOwogQ1JFQVRFIFBVQkxJQ0FUSU9OIHRl c3RwdWI1IEZPUiBUQUJMRSB0ZXN0cHViX3JmX3RibDEsIHRlc3RwdWJfcmZfdGJsMiBXSEVSRSAo YyA8PiAndGVzdCcgQU5EIGQgPCA1KSBXSVRIIChwdWJsaXNoID0gJ2luc2VydCcpOwogUkVTRVQg Y2xpZW50X21pbl9tZXNzYWdlczsKIFxkUnArIHRlc3RwdWI1Ci0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViNQotICAgICAgICAgIE93bmVyICAg ICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVu Y2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0g cmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCBmICAgICAg IHwgZiAgICAgICB8IGYgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWI1CisgICAgICAgICAgT3duZXIg ICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEFsbCBERExzIHwgVGFibGUgRERMcyB8IEluc2VydHMg fCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KKyByZWdyZXNz X3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgZiAgICAgICAgfCBmICAgICAgICAgIHwg dCAgICAgICB8IGYgICAgICAgfCBmICAgICAgIHwgZiAgICAgICAgIHwgZgogVGFibGVzOgogICAg ICJwdWJsaWMudGVzdHB1Yl9yZl90YmwxIgogICAgICJwdWJsaWMudGVzdHB1Yl9yZl90YmwyIiBX SEVSRSAoKGMgPD4gJ3Rlc3QnOjp0ZXh0KSBBTkQgKGQgPCA1KSkKQEAgLTMwMCwxMCArMzAwLDEw IEBAIFRhYmxlczoKIAogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1YjUgQUREIFRBQkxFIHRlc3Rw dWJfcmZfdGJsMyBXSEVSRSAoZSA+IDEwMDAgQU5EIGUgPCAyMDAwKTsKIFxkUnArIHRlc3RwdWI1 Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHVi NQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBk YXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAg ICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgICB8IGYKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3Rw dWI1CisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEFsbCBERExzIHwg VGFibGUgRERMcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZp YSByb290IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgZiAg ICAgICAgfCBmICAgICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgfCBmICAgICAgIHwgZiAgICAg ICAgIHwgZgogVGFibGVzOgogICAgICJwdWJsaWMudGVzdHB1Yl9yZl90YmwxIgogICAgICJwdWJs aWMudGVzdHB1Yl9yZl90YmwyIiBXSEVSRSAoKGMgPD4gJ3Rlc3QnOjp0ZXh0KSBBTkQgKGQgPCA1 KSkKQEAgLTMxOSwxMCArMzE5LDEwIEBAIFB1YmxpY2F0aW9uczoKIAogQUxURVIgUFVCTElDQVRJ T04gdGVzdHB1YjUgRFJPUCBUQUJMRSB0ZXN0cHViX3JmX3RibDI7CiBcZFJwKyB0ZXN0cHViNQot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjUK LSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0 ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAg fCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgfCBmICAgICAgICAgfCBmCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHVi NQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBBbGwgRERMcyB8IFRh YmxlIERETHMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEg cm9vdCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSst LS0tLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IGYgICAg ICAgIHwgZiAgICAgICAgICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAgICB8IGYgICAgICAg ICB8IGYKIFRhYmxlczoKICAgICAicHVibGljLnRlc3RwdWJfcmZfdGJsMSIKICAgICAicHVibGlj LnRlc3RwdWJfcmZfdGJsMyIgV0hFUkUgKChlID4gMTAwMCkgQU5EIChlIDwgMjAwMCkpCkBAIC0z MzAsMTAgKzMzMCwxMCBAQCBUYWJsZXM6CiAtLSByZW1vdmUgdGVzdHB1Yl9yZl90YmwxIGFuZCBh ZGQgdGVzdHB1Yl9yZl90YmwzIGFnYWluIChhbm90aGVyIFdIRVJFIGV4cHJlc3Npb24pCiBBTFRF UiBQVUJMSUNBVElPTiB0ZXN0cHViNSBTRVQgVEFCTEUgdGVzdHB1Yl9yZl90YmwzIFdIRVJFIChl ID4gMzAwIEFORCBlIDwgNTAwKTsKIFxkUnArIHRlc3RwdWI1Ci0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViNQotICAgICAgICAgIE93bmVyICAg ICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVu Y2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0g cmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCBmICAgICAg IHwgZiAgICAgICB8IGYgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWI1CisgICAgICAgICAgT3duZXIg ICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEFsbCBERExzIHwgVGFibGUgRERMcyB8IEluc2VydHMg fCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KKyByZWdyZXNz X3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgZiAgICAgICAgfCBmICAgICAgICAgIHwg dCAgICAgICB8IGYgICAgICAgfCBmICAgICAgIHwgZiAgICAgICAgIHwgZgogVGFibGVzOgogICAg ICJwdWJsaWMudGVzdHB1Yl9yZl90YmwzIiBXSEVSRSAoKGUgPiAzMDApIEFORCAoZSA8IDUwMCkp CiAKQEAgLTM2NiwxMCArMzY2LDEwIEBAIFNFVCBjbGllbnRfbWluX21lc3NhZ2VzID0gJ0VSUk9S JzsKIENSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHViX3N5bnRheDEgRk9SIFRBQkxFIHRlc3RwdWJf cmZfdGJsMSwgT05MWSB0ZXN0cHViX3JmX3RibDMgV0hFUkUgKGUgPCA5OTkpIFdJVEggKHB1Ymxp c2ggPSAnaW5zZXJ0Jyk7CiBSRVNFVCBjbGllbnRfbWluX21lc3NhZ2VzOwogXGRScCsgdGVzdHB1 Yl9zeW50YXgxCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRl c3RwdWJfc3ludGF4MQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJ bnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2Vy IHwgZiAgICAgICAgICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgICB8 IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRp b24gdGVzdHB1Yl9zeW50YXgxCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxl cyB8IEFsbCBERExzIHwgVGFibGUgRERMcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8 IFRydW5jYXRlcyB8IFZpYSByb290IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBm ICAgICAgICAgIHwgZiAgICAgICAgfCBmICAgICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgfCBm ICAgICAgIHwgZiAgICAgICAgIHwgZgogVGFibGVzOgogICAgICJwdWJsaWMudGVzdHB1Yl9yZl90 YmwxIgogICAgICJwdWJsaWMudGVzdHB1Yl9yZl90YmwzIiBXSEVSRSAoZSA8IDk5OSkKQEAgLTM3 OSwxMCArMzc5LDEwIEBAIFNFVCBjbGllbnRfbWluX21lc3NhZ2VzID0gJ0VSUk9SJzsKIENSRUFU RSBQVUJMSUNBVElPTiB0ZXN0cHViX3N5bnRheDIgRk9SIFRBQkxFIHRlc3RwdWJfcmZfdGJsMSwg dGVzdHB1Yl9yZl9zY2hlbWExLnRlc3RwdWJfcmZfdGJsNSBXSEVSRSAoaCA8IDk5OSkgV0lUSCAo cHVibGlzaCA9ICdpbnNlcnQnKTsKIFJFU0VUIGNsaWVudF9taW5fbWVzc2FnZXM7CiBcZFJwKyB0 ZXN0cHViX3N5bnRheDIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRp b24gdGVzdHB1Yl9zeW50YXgyCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxl cyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAot LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9u X3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgfCBmICAgICAgIHwgZiAgICAg ICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJs aWNhdGlvbiB0ZXN0cHViX3N5bnRheDIKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwg dGFibGVzIHwgQWxsIERETHMgfCBUYWJsZSBERExzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxl dGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNl ciB8IGYgICAgICAgICAgfCBmICAgICAgICB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgZiAgICAg ICB8IGYgICAgICAgfCBmICAgICAgICAgfCBmCiBUYWJsZXM6CiAgICAgInB1YmxpYy50ZXN0cHVi X3JmX3RibDEiCiAgICAgInRlc3RwdWJfcmZfc2NoZW1hMS50ZXN0cHViX3JmX3RibDUiIFdIRVJF IChoIDwgOTk5KQpAQCAtNDk3LDEwICs0OTcsMTAgQEAgQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3Rw dWI2IEZPUiBUQUJMRVMgSU4gU0NIRU1BIHRlc3RwdWJfcmZfc2NoZW1hMjsKIEFMVEVSIFBVQkxJ Q0FUSU9OIHRlc3RwdWI2IFNFVCBUQUJMRVMgSU4gU0NIRU1BIHRlc3RwdWJfcmZfc2NoZW1hMiwg VEFCTEUgdGVzdHB1Yl9yZl9zY2hlbWEyLnRlc3RwdWJfcmZfdGJsNiBXSEVSRSAoaSA8IDk5KTsK IFJFU0VUIGNsaWVudF9taW5fbWVzc2FnZXM7CiBcZFJwKyB0ZXN0cHViNgotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjYKLSAgICAgICAgICBP d25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVz IHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0t LS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViNgorICAgICAgICAg IE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBBbGwgRERMcyB8IFRhYmxlIERETHMgfCBJ bnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCisg cmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IGYgICAgICAgIHwgZiAgICAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKIFRhYmxl czoKICAgICAidGVzdHB1Yl9yZl9zY2hlbWEyLnRlc3RwdWJfcmZfdGJsNiIgV0hFUkUgKGkgPCA5 OSkKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CkBAIC03MTQsMTAgKzcxNCwxMCBAQCBDUkVBVEUgUFVC TElDQVRJT04gdGVzdHB1Yl90YWJsZV9pbnMgV0lUSCAocHVibGlzaCA9ICdpbnNlcnQsIHRydW5j YXRlJyk7CiBSRVNFVCBjbGllbnRfbWluX21lc3NhZ2VzOwogQUxURVIgUFVCTElDQVRJT04gdGVz dHB1Yl90YWJsZV9pbnMgQUREIFRBQkxFIHRlc3RwdWJfdGJsNSAoYSk7CQktLSBvawogXGRScCsg dGVzdHB1Yl90YWJsZV9pbnMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNh dGlvbiB0ZXN0cHViX3RhYmxlX2lucwotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0 YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9v dCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNh dGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAgICB8IHQg ICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQ dWJsaWNhdGlvbiB0ZXN0cHViX3RhYmxlX2lucworICAgICAgICAgIE93bmVyICAgICAgICAgICB8 IEFsbCB0YWJsZXMgfCBBbGwgRERMcyB8IFRhYmxlIERETHMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8 IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlv bl91c2VyIHwgZiAgICAgICAgICB8IGYgICAgICAgIHwgZiAgICAgICAgICB8IHQgICAgICAgfCBm ICAgICAgIHwgZiAgICAgICB8IHQgICAgICAgICB8IGYKIFRhYmxlczoKICAgICAicHVibGljLnRl c3RwdWJfdGJsNSIgKGEpCiAKQEAgLTg5MSwxMCArODkxLDEwIEBAIENSRUFURSBUQUJMRSB0ZXN0 cHViX3RibF9ib3RoX2ZpbHRlcnMgKGEgaW50LCBiIGludCwgYyBpbnQsIFBSSU1BUlkgS0VZIChh LGMpKTsKIEFMVEVSIFRBQkxFIHRlc3RwdWJfdGJsX2JvdGhfZmlsdGVycyBSRVBMSUNBIElERU5U SVRZIFVTSU5HIElOREVYIHRlc3RwdWJfdGJsX2JvdGhfZmlsdGVyc19wa2V5OwogQUxURVIgUFVC TElDQVRJT04gdGVzdHB1Yl9ib3RoX2ZpbHRlcnMgQUREIFRBQkxFIHRlc3RwdWJfdGJsX2JvdGhf ZmlsdGVycyAoYSxjKSBXSEVSRSAoYyAhPSAxKTsKIFxkUnArIHRlc3RwdWJfYm90aF9maWx0ZXJz Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2JvdGhf ZmlsdGVycwotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRz IHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAg ICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3Rw dWJfYm90aF9maWx0ZXJzCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8 IEFsbCBERExzIHwgVGFibGUgRERMcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRy dW5jYXRlcyB8IFZpYSByb290IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAg ICAgICAgIHwgZiAgICAgICAgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICAgIHwgZgogVGFibGVzOgogICAgICJwdWJsaWMudGVzdHB1Yl90YmxfYm90 aF9maWx0ZXJzIiAoYSwgYykgV0hFUkUgKGMgPD4gMSkKIApAQCAtMTA5OSwxMCArMTA5OSwxMCBA QCBFUlJPUjogIHJlbGF0aW9uICJ0ZXN0cHViX3RibDEiIGlzIGFscmVhZHkgbWVtYmVyIG9mIHB1 YmxpY2F0aW9uICJ0ZXN0cHViX2ZvcnRibAogQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9y dGJsIEZPUiBUQUJMRSB0ZXN0cHViX3RibDE7CiBFUlJPUjogIHB1YmxpY2F0aW9uICJ0ZXN0cHVi X2ZvcnRibCIgYWxyZWFkeSBleGlzdHMKIFxkUnArIHRlc3RwdWJfZm9ydGJsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnRibAotICAgICAg ICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERl bGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSst LS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9ydGJsCisg ICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEFsbCBERExzIHwgVGFibGUg RERMcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290 IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0t LS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgZiAgICAgICAg fCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwg ZgogVGFibGVzOgogICAgICJwdWJfdGVzdC50ZXN0cHViX25vcGsiCiAgICAgInB1YmxpYy50ZXN0 cHViX3RibDEiCkBAIC0xMTQwLDEwICsxMTQwLDEwIEBAIFB1YmxpY2F0aW9uczoKICAgICAidGVz dHB1Yl9mb3J0YmwiCiAKIFxkUnArIHRlc3RwdWJfZGVmYXVsdAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2RlZmF1bHQKLSAgICAgICAgICBPd25l ciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwg VHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0t LQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAg ICAgICB8IHQgICAgICAgfCBmICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZGVmYXVsdAorICAgICAgICAg IE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBBbGwgRERMcyB8IFRhYmxlIERETHMgfCBJ bnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCisg cmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IGYgICAgICAgIHwgZiAgICAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgICB8IGYKIFRhYmxl czoKICAgICAicHViX3Rlc3QudGVzdHB1Yl9ub3BrIgogICAgICJwdWJsaWMudGVzdHB1Yl90Ymwx IgpAQCAtMTIyMSwxMCArMTIyMSwxMCBAQCBSRVZPS0UgQ1JFQVRFIE9OIERBVEFCQVNFIHJlZ3Jl c3Npb24gRlJPTSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIyOwogRFJPUCBUQUJMRSB0ZXN0cHVi X3BhcnRlZDsKIERST1AgVEFCTEUgdGVzdHB1Yl90YmwxOwogXGRScCsgdGVzdHB1Yl9kZWZhdWx0 Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZGVm YXVsdAotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwg VXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgICB8IGYKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1 Yl9kZWZhdWx0CisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEFsbCBE RExzIHwgVGFibGUgRERMcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRl cyB8IFZpYSByb290IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLS0tKy0tLS0tLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAg IHwgZiAgICAgICAgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwg ZiAgICAgICAgIHwgZgogKDEgcm93KQogCiAtLSBmYWlsIC0gbXVzdCBiZSBvd25lciBvZiBwdWJs aWNhdGlvbgpAQCAtMTIzNCwyMCArMTIzNCwyMCBAQCBFUlJPUjogIG11c3QgYmUgb3duZXIgb2Yg cHVibGljYXRpb24gdGVzdHB1Yl9kZWZhdWx0CiBSRVNFVCBST0xFOwogQUxURVIgUFVCTElDQVRJ T04gdGVzdHB1Yl9kZWZhdWx0IFJFTkFNRSBUTyB0ZXN0cHViX2ZvbzsKIFxkUnAgdGVzdHB1Yl9m b28KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0IG9mIHB1 YmxpY2F0aW9ucwotICAgIE5hbWUgICAgIHwgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxs IHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSBy b290IAotLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQot IHRlc3RwdWJfZm9vIHwgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgICB8IGYKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0IG9mIHB1YmxpY2F0 aW9ucworICAgIE5hbWUgICAgIHwgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxl cyB8IEFsbCBERExzIHwgVGFibGUgRERMcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8 IFRydW5jYXRlcyB8IFZpYSByb290IAorLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQorIHRlc3RwdWJfZm9vIHwg cmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IGYgICAgICAgIHwgZiAgICAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgICB8IGYKICgxIHJv dykKIAogLS0gcmVuYW1lIGJhY2sgdG8ga2VlcCB0aGUgcmVzdCBzaW1wbGUKIEFMVEVSIFBVQkxJ Q0FUSU9OIHRlc3RwdWJfZm9vIFJFTkFNRSBUTyB0ZXN0cHViX2RlZmF1bHQ7CiBBTFRFUiBQVUJM SUNBVElPTiB0ZXN0cHViX2RlZmF1bHQgT1dORVIgVE8gcmVncmVzc19wdWJsaWNhdGlvbl91c2Vy MjsKIFxkUnAgdGVzdHB1Yl9kZWZhdWx0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBMaXN0IG9mIHB1YmxpY2F0aW9ucwotICAgICAgTmFtZSAgICAgICB8ICAg ICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMg fCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSB0ZXN0cHViX2RlZmF1bHQgfCByZWdy ZXNzX3B1YmxpY2F0aW9uX3VzZXIyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICB8IGYgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIExpc3Qgb2YgcHVibGljYXRpb25zCisgICAgICBOYW1l ICAgICAgIHwgICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBBbGwgRERM cyB8IFRhYmxlIERETHMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMg fCBWaWEgcm9vdCAKKy0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQorIHRlc3RwdWJfZGVmYXVsdCB8IHJl Z3Jlc3NfcHVibGljYXRpb25fdXNlcjIgfCBmICAgICAgICAgIHwgZiAgICAgICAgfCBmICAgICAg ICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICAgIHwgZgogKDEgcm93 KQogCiAtLSBhZGRpbmcgc2NoZW1hcyBhbmQgdGFibGVzCkBAIC0xMjYzLDE5ICsxMjYzLDE5IEBA IENSRUFURSBUQUJMRSAiQ1VSUkVOVF9TQ0hFTUEiLiJDVVJSRU5UX1NDSEVNQSIoaWQgaW50KTsK IFNFVCBjbGllbnRfbWluX21lc3NhZ2VzID0gJ0VSUk9SJzsKIENSRUFURSBQVUJMSUNBVElPTiB0 ZXN0cHViMV9mb3JzY2hlbWEgRk9SIFRBQkxFUyBJTiBTQ0hFTUEgcHViX3Rlc3QxOwogXGRScCsg dGVzdHB1YjFfZm9yc2NoZW1hCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGlj YXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxs IHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSBy b290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1Ymxp Y2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFB1YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVyICAgICAgICAg ICB8IEFsbCB0YWJsZXMgfCBBbGwgRERMcyB8IFRhYmxlIERETHMgfCBJbnNlcnRzIHwgVXBkYXRl cyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCisgcmVncmVzc19wdWJsaWNh dGlvbl91c2VyIHwgZiAgICAgICAgICB8IGYgICAgICAgIHwgZiAgICAgICAgICB8IHQgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVtYXM6 CiAgICAgInB1Yl90ZXN0MSIKIAogQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWIyX2ZvcnNjaGVt YSBGT1IgVEFCTEVTIElOIFNDSEVNQSBwdWJfdGVzdDEsIHB1Yl90ZXN0MiwgcHViX3Rlc3QzOwog XGRScCsgdGVzdHB1YjJfZm9yc2NoZW1hCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg UHVibGljYXRpb24gdGVzdHB1YjJfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAgICAg IHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8 IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNz X3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIyX2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVyICAg ICAgICAgICB8IEFsbCB0YWJsZXMgfCBBbGwgRERMcyB8IFRhYmxlIERETHMgfCBJbnNlcnRzIHwg VXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCisgcmVncmVzc19w dWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IGYgICAgICAgIHwgZiAgICAgICAgICB8IHQg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKIFRhYmxlcyBmcm9tIHNj aGVtYXM6CiAgICAgInB1Yl90ZXN0MSIKICAgICAicHViX3Rlc3QyIgpAQCAtMTI4OSw0NCArMTI4 OSw0NCBAQCBDUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1YjZfZm9yc2NoZW1hIEZPUiBUQUJMRVMg SU4gU0NIRU1BICJDVVJSRU5UX1NDSEVNQSIsIENVUgogQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3Rw dWJfZm9ydGFibGUgRk9SIFRBQkxFICJDVVJSRU5UX1NDSEVNQSIuIkNVUlJFTlRfU0NIRU1BIjsK IFJFU0VUIGNsaWVudF9taW5fbWVzc2FnZXM7CiBcZFJwKyB0ZXN0cHViM19mb3JzY2hlbWEKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViM19mb3JzY2hl bWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVw ZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjNf Zm9yc2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEFsbCBE RExzIHwgVGFibGUgRERMcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRl cyB8IFZpYSByb290IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLS0tKy0tLS0tLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAg IHwgZiAgICAgICAgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICAgIHwgZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAgICAicHVibGljIgogCiBcZFJw KyB0ZXN0cHViNF9mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJs aWNhdGlvbiB0ZXN0cHViNF9mb3JzY2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBB bGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlh IHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVi bGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAg fCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgUHVibGljYXRpb24gdGVzdHB1YjRfZm9yc2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAg ICAgIHwgQWxsIHRhYmxlcyB8IEFsbCBERExzIHwgVGFibGUgRERMcyB8IEluc2VydHMgfCBVcGRh dGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KKyByZWdyZXNzX3B1Ymxp Y2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgZiAgICAgICAgfCBmICAgICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgogVGFibGVzIGZyb20gc2NoZW1h czoKICAgICAiQ1VSUkVOVF9TQ0hFTUEiCiAKIFxkUnArIHRlc3RwdWI1X2ZvcnNjaGVtYQotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWI1X2ZvcnNjaGVt YQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBk YXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViNV9m b3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgQWxsIERE THMgfCBUYWJsZSBERExzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVz IHwgVmlhIHJvb3QgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tLS0rLS0tLS0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAg fCBmICAgICAgICB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJDVVJSRU5UX1NDSEVNQSIK ICAgICAicHVibGljIgogCiBcZFJwKyB0ZXN0cHViNl9mb3JzY2hlbWEKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViNl9mb3JzY2hlbWEKLSAgICAgICAg ICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxl dGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0t LS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjZfZm9yc2NoZW1hCisg ICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEFsbCBERExzIHwgVGFibGUg RERMcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290 IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0t LS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgZiAgICAgICAg fCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwg ZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAgICAiQ1VSUkVOVF9TQ0hFTUEiCiAgICAgInB1Ymxp YyIKIAogXGRScCsgdGVzdHB1Yl9mb3J0YWJsZQotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnRhYmxlCi0gICAgICAgICAgT3duZXIgICAgICAg ICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRl cyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdy ZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnRhYmxlCisgICAgICAgICAgT3duZXIg ICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEFsbCBERExzIHwgVGFibGUgRERMcyB8IEluc2VydHMg fCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KKyByZWdyZXNz X3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgZiAgICAgICAgfCBmICAgICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgogVGFibGVzOgogICAg ICJDVVJSRU5UX1NDSEVNQS5DVVJSRU5UX1NDSEVNQSIKIApAQCAtMTM2MCwxMCArMTM2MCwxMCBA QCBFUlJPUjogIHNjaGVtYSAidGVzdHB1Yl92aWV3IiBkb2VzIG5vdCBleGlzdAogLS0gZHJvcHBp bmcgdGhlIHNjaGVtYSBzaG91bGQgcmVmbGVjdCB0aGUgY2hhbmdlIGluIHB1YmxpY2F0aW9uCiBE Uk9QIFNDSEVNQSBwdWJfdGVzdDM7CiBcZFJwKyB0ZXN0cHViMl9mb3JzY2hlbWEKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMl9mb3JzY2hlbWEKLSAg ICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMg fCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t LS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0 ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjJfZm9yc2No ZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEFsbCBERExzIHwg VGFibGUgRERMcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZp YSByb290IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgZiAg ICAgICAgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICAgIHwgZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAgICAicHViX3Rlc3QxIgogICAgICJwdWJf dGVzdDIiCkBAIC0xMzcxLDIwICsxMzcxLDIwIEBAIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAtLSBy ZW5hbWluZyB0aGUgc2NoZW1hIHNob3VsZCByZWZsZWN0IHRoZSBjaGFuZ2UgaW4gcHVibGljYXRp b24KIEFMVEVSIFNDSEVNQSBwdWJfdGVzdDEgUkVOQU1FIHRvIHB1Yl90ZXN0MV9yZW5hbWVkOwog XGRScCsgdGVzdHB1YjJfZm9yc2NoZW1hCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg UHVibGljYXRpb24gdGVzdHB1YjJfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAgICAg IHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8 IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNz X3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIyX2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVyICAg ICAgICAgICB8IEFsbCB0YWJsZXMgfCBBbGwgRERMcyB8IFRhYmxlIERETHMgfCBJbnNlcnRzIHwg VXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCisgcmVncmVzc19w dWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IGYgICAgICAgIHwgZiAgICAgICAgICB8IHQg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKIFRhYmxlcyBmcm9tIHNj aGVtYXM6CiAgICAgInB1Yl90ZXN0MV9yZW5hbWVkIgogICAgICJwdWJfdGVzdDIiCiAKIEFMVEVS IFNDSEVNQSBwdWJfdGVzdDFfcmVuYW1lZCBSRU5BTUUgdG8gcHViX3Rlc3QxOwogXGRScCsgdGVz dHB1YjJfZm9yc2NoZW1hCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRp b24gdGVzdHB1YjJfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRh YmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290 IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0 aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAg ICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1 YmxpY2F0aW9uIHRlc3RwdWIyX2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8 IEFsbCB0YWJsZXMgfCBBbGwgRERMcyB8IFRhYmxlIERETHMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8 IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlv bl91c2VyIHwgZiAgICAgICAgICB8IGYgICAgICAgIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAg ICAgInB1Yl90ZXN0MSIKICAgICAicHViX3Rlc3QyIgpAQCAtMTM5MiwxMCArMTM5MiwxMCBAQCBU YWJsZXMgZnJvbSBzY2hlbWFzOgogLS0gYWx0ZXIgcHVibGljYXRpb24gYWRkIHNjaGVtYQogQUxU RVIgUFVCTElDQVRJT04gdGVzdHB1YjFfZm9yc2NoZW1hIEFERCBUQUJMRVMgSU4gU0NIRU1BIHB1 Yl90ZXN0MjsKIFxkUnArIHRlc3RwdWIxX2ZvcnNjaGVtYQotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVy ICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBU cnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0t Ci0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKKyAgICAgICAg ICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgQWxsIERETHMgfCBUYWJsZSBERExzIHwg SW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQor IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCBmICAgICAgICB8IGYgICAg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCiBUYWJs ZXMgZnJvbSBzY2hlbWFzOgogICAgICJwdWJfdGVzdDEiCiAgICAgInB1Yl90ZXN0MiIKQEAgLTE0 MDQsMTAgKzE0MDQsMTAgQEAgVGFibGVzIGZyb20gc2NoZW1hczoKIEFMVEVSIFBVQkxJQ0FUSU9O IHRlc3RwdWIxX2ZvcnNjaGVtYSBBREQgVEFCTEVTIElOIFNDSEVNQSBub25fZXhpc3RlbnRfc2No ZW1hOwogRVJST1I6ICBzY2hlbWEgIm5vbl9leGlzdGVudF9zY2hlbWEiIGRvZXMgbm90IGV4aXN0 CiBcZFJwKyB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAg ICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVz IHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jl c3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQg ICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCisgICAgICAgICAgT3duZXIg ICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEFsbCBERExzIHwgVGFibGUgRERMcyB8IEluc2VydHMg fCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KKyByZWdyZXNz X3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgZiAgICAgICAgfCBmICAgICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgogVGFibGVzIGZyb20g c2NoZW1hczoKICAgICAicHViX3Rlc3QxIgogICAgICJwdWJfdGVzdDIiCkBAIC0xNDE2LDEwICsx NDE2LDEwIEBAIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHVi MV9mb3JzY2hlbWEgQUREIFRBQkxFUyBJTiBTQ0hFTUEgcHViX3Rlc3QxOwogRVJST1I6ICBzY2hl bWEgInB1Yl90ZXN0MSIgaXMgYWxyZWFkeSBtZW1iZXIgb2YgcHVibGljYXRpb24gInRlc3RwdWIx X2ZvcnNjaGVtYSIKIFxkUnArIHRlc3RwdWIxX2ZvcnNjaGVtYQotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVtYQotICAgICAgICAgIE93 bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMg fCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0t LS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKKyAgICAg ICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgQWxsIERETHMgfCBUYWJsZSBERExz IHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0t LQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCBmICAgICAgICB8IGYg ICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCiBU YWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJwdWJfdGVzdDEiCiAgICAgInB1Yl90ZXN0MiIKQEAg LTE0MjcsMTAgKzE0MjcsMTAgQEAgVGFibGVzIGZyb20gc2NoZW1hczoKIC0tIGFsdGVyIHB1Ymxp Y2F0aW9uIGRyb3Agc2NoZW1hCiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViMV9mb3JzY2hlbWEg RFJPUCBUQUJMRVMgSU4gU0NIRU1BIHB1Yl90ZXN0MjsKIFxkUnArIHRlc3RwdWIxX2ZvcnNjaGVt YQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIxX2Zv cnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRz IHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAg ICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0 cHViMV9mb3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwg QWxsIERETHMgfCBUYWJsZSBERExzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1 bmNhdGVzIHwgVmlhIHJvb3QgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tLS0rLS0tLS0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAg ICAgICAgfCBmICAgICAgICB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJwdWJfdGVzdDEi CiAKQEAgLTE0MzgsMTAgKzE0MzgsMTAgQEAgVGFibGVzIGZyb20gc2NoZW1hczoKIEFMVEVSIFBV QkxJQ0FUSU9OIHRlc3RwdWIxX2ZvcnNjaGVtYSBEUk9QIFRBQkxFUyBJTiBTQ0hFTUEgcHViX3Rl c3QyOwogRVJST1I6ICB0YWJsZXMgZnJvbSBzY2hlbWEgInB1Yl90ZXN0MiIgYXJlIG5vdCBwYXJ0 IG9mIHRoZSBwdWJsaWNhdGlvbgogXGRScCsgdGVzdHB1YjFfZm9yc2NoZW1hCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCi0gICAg ICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwg RGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVt YQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBBbGwgRERMcyB8IFRh YmxlIERETHMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEg cm9vdCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSst LS0tLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IGYgICAg ICAgIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAg ICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAgICAgInB1Yl90ZXN0MSIKIApAQCAtMTQ0OSwy OSArMTQ0OSwyOSBAQCBUYWJsZXMgZnJvbSBzY2hlbWFzOgogQUxURVIgUFVCTElDQVRJT04gdGVz dHB1YjFfZm9yc2NoZW1hIERST1AgVEFCTEVTIElOIFNDSEVNQSBub25fZXhpc3RlbnRfc2NoZW1h OwogRVJST1I6ICBzY2hlbWEgIm5vbl9leGlzdGVudF9zY2hlbWEiIGRvZXMgbm90IGV4aXN0CiBc ZFJwKyB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQ dWJsaWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAg fCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwg VmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3Nf cHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgUHVibGljYXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCisgICAgICAgICAgT3duZXIgICAg ICAgICAgIHwgQWxsIHRhYmxlcyB8IEFsbCBERExzIHwgVGFibGUgRERMcyB8IEluc2VydHMgfCBV cGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KKyByZWdyZXNzX3B1 YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgZiAgICAgICAgfCBmICAgICAgICAgIHwgdCAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgogVGFibGVzIGZyb20gc2No ZW1hczoKICAgICAicHViX3Rlc3QxIgogCiAtLSBkcm9wIGFsbCBzY2hlbWFzCiBBTFRFUiBQVUJM SUNBVElPTiB0ZXN0cHViMV9mb3JzY2hlbWEgRFJPUCBUQUJMRVMgSU4gU0NIRU1BIHB1Yl90ZXN0 MTsKIFxkUnArIHRlc3RwdWIxX2ZvcnNjaGVtYQotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAg ICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0 ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVn cmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKKyAgICAgICAgICBPd25l ciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgQWxsIERETHMgfCBUYWJsZSBERExzIHwgSW5zZXJ0 cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQorIHJlZ3Jl c3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCBmICAgICAgICB8IGYgICAgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCiAoMSByb3cpCiAK IC0tIGFsdGVyIHB1YmxpY2F0aW9uIHNldCBtdWx0aXBsZSBzY2hlbWEKIEFMVEVSIFBVQkxJQ0FU SU9OIHRlc3RwdWIxX2ZvcnNjaGVtYSBTRVQgVEFCTEVTIElOIFNDSEVNQSBwdWJfdGVzdDEsIHB1 Yl90ZXN0MjsKIFxkUnArIHRlc3RwdWIxX2ZvcnNjaGVtYQotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVy ICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBU cnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0t Ci0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKKyAgICAgICAg ICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgQWxsIERETHMgfCBUYWJsZSBERExzIHwg SW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQor IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCBmICAgICAgICB8IGYgICAg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCiBUYWJs ZXMgZnJvbSBzY2hlbWFzOgogICAgICJwdWJfdGVzdDEiCiAgICAgInB1Yl90ZXN0MiIKQEAgLTE0 ODAsMTAgKzE0ODAsMTAgQEAgVGFibGVzIGZyb20gc2NoZW1hczoKIEFMVEVSIFBVQkxJQ0FUSU9O IHRlc3RwdWIxX2ZvcnNjaGVtYSBTRVQgVEFCTEVTIElOIFNDSEVNQSBub25fZXhpc3RlbnRfc2No ZW1hOwogRVJST1I6ICBzY2hlbWEgIm5vbl9leGlzdGVudF9zY2hlbWEiIGRvZXMgbm90IGV4aXN0 CiBcZFJwKyB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAg ICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVz IHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jl c3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQg ICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCisgICAgICAgICAgT3duZXIg ICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEFsbCBERExzIHwgVGFibGUgRERMcyB8IEluc2VydHMg fCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KKyByZWdyZXNz X3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgZiAgICAgICAgfCBmICAgICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgogVGFibGVzIGZyb20g c2NoZW1hczoKICAgICAicHViX3Rlc3QxIgogICAgICJwdWJfdGVzdDIiCkBAIC0xNDkyLDEwICsx NDkyLDEwIEBAIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAtLSByZW1vdmluZyB0aGUgZHVwbGljYXRl IHNjaGVtYXMKIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWIxX2ZvcnNjaGVtYSBTRVQgVEFCTEVT IElOIFNDSEVNQSBwdWJfdGVzdDEsIHB1Yl90ZXN0MTsKIFxkUnArIHRlc3RwdWIxX2ZvcnNjaGVt YQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIxX2Zv cnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRz IHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAg ICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0 cHViMV9mb3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwg QWxsIERETHMgfCBUYWJsZSBERExzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1 bmNhdGVzIHwgVmlhIHJvb3QgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tLS0rLS0tLS0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAg ICAgICAgfCBmICAgICAgICB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJwdWJfdGVzdDEi CiAKQEAgLTE1NzQsMTggKzE1NzQsMTggQEAgU0VUIGNsaWVudF9taW5fbWVzc2FnZXMgPSAnRVJS T1InOwogQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWIzX2ZvcnNjaGVtYTsKIFJFU0VUIGNsaWVu dF9taW5fbWVzc2FnZXM7CiBcZFJwKyB0ZXN0cHViM19mb3JzY2hlbWEKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViM19mb3JzY2hlbWEKLSAgICAgICAg ICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxl dGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0t LS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjNfZm9yc2NoZW1hCisg ICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEFsbCBERExzIHwgVGFibGUg RERMcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290 IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0t LS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgZiAgICAgICAg fCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwg ZgogKDEgcm93KQogCiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViM19mb3JzY2hlbWEgU0VUIFRB QkxFUyBJTiBTQ0hFTUEgcHViX3Rlc3QxOwogXGRScCsgdGVzdHB1YjNfZm9yc2NoZW1hCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjNfZm9yc2NoZW1h Ci0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRh dGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIzX2Zv cnNjaGVtYQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBBbGwgRERM cyB8IFRhYmxlIERETHMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMg fCBWaWEgcm9vdCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0t LS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0tLSstLS0tLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8 IGYgICAgICAgIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQg ICAgICAgICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAgICAgInB1Yl90ZXN0MSIKIApAQCAt MTU5NSwyMCArMTU5NSwyMCBAQCBDUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1Yl9mb3JzY2hlbWFf Zm9ydGFibGUgRk9SIFRBQkxFUyBJTiBTQ0hFTUEgcHViX3Rlc3QxLCBUQQogQ1JFQVRFIFBVQkxJ Q0FUSU9OIHRlc3RwdWJfZm9ydGFibGVfZm9yc2NoZW1hIEZPUiBUQUJMRSBwdWJfdGVzdDIudGJs MSwgVEFCTEVTIElOIFNDSEVNQSBwdWJfdGVzdDE7CiBSRVNFVCBjbGllbnRfbWluX21lc3NhZ2Vz OwogXGRScCsgdGVzdHB1Yl9mb3JzY2hlbWFfZm9ydGFibGUKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9yc2NoZW1hX2ZvcnRhYmxlCi0gICAgICAgICAg T3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRl cyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0t LS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8 IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3JzY2hlbWFfZm9ydGFibGUK KyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgQWxsIERETHMgfCBUYWJs ZSBERExzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJv b3QgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0t LS0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCBmICAgICAg ICB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAg fCBmCiBUYWJsZXM6CiAgICAgInB1Yl90ZXN0Mi50YmwxIgogVGFibGVzIGZyb20gc2NoZW1hczoK ICAgICAicHViX3Rlc3QxIgogCiBcZFJwKyB0ZXN0cHViX2ZvcnRhYmxlX2ZvcnNjaGVtYQotICAg ICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3J0YWJsZV9mb3Jz Y2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8 IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2Zv cnRhYmxlX2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMg fCBBbGwgRERMcyB8IFRhYmxlIERETHMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBU cnVuY2F0ZXMgfCBWaWEgcm9vdCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAg ICAgICAgICB8IGYgICAgICAgIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAg ICAgICB8IHQgICAgICAgICB8IGYKIFRhYmxlczoKICAgICAicHViX3Rlc3QyLnRibDEiCiBUYWJs ZXMgZnJvbSBzY2hlbWFzOgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDMy X2RkbF9yZXBsaWNhdGlvbi5wbCBiL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAzMl9kZGxfcmVw bGljYXRpb24ucGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGJjNGZmMgot LS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAzMl9kZGxfcmVwbGlj YXRpb24ucGwKQEAgLTAsMCArMSw0NjUgQEAKKyMgQ29weXJpZ2h0IChjKSAyMDIyLCBQb3N0Z3Jl U1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorIyBSZWdyZXNzaW9uIHRlc3RzIGZvciBsb2dp Y2FsIHJlcGxpY2F0aW9uIG9mIERETHMKKyMKK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3M7Cit1 c2UgUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3RlcjsKK3VzZSBQb3N0Z3JlU1FMOjpUZXN0OjpVdGls czsKK3VzZSBUZXN0OjpNb3JlOworCitteSAkbm9kZV9wdWJsaXNoZXIgPSBQb3N0Z3JlU1FMOjpU ZXN0OjpDbHVzdGVyLT5uZXcoJ3B1Ymxpc2hlcicpOworJG5vZGVfcHVibGlzaGVyLT5pbml0KGFs bG93c19zdHJlYW1pbmcgPT4gJ2xvZ2ljYWwnKTsKKyRub2RlX3B1Ymxpc2hlci0+c3RhcnQ7CisK K215ICRub2RlX3N1YnNjcmliZXIgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoJ3N1 YnNjcmliZXInKTsKKyRub2RlX3N1YnNjcmliZXItPmluaXQoYWxsb3dzX3N0cmVhbWluZyA9PiAn bG9naWNhbCcpOworJG5vZGVfc3Vic2NyaWJlci0+c3RhcnQ7CisKK215ICRkZGwgPSAiQ1JFQVRF IFRBQkxFIHRlc3RfcmVwKGlkIGludCBwcmltYXJ5IGtleSwgbmFtZSB2YXJjaGFyLCB2YWx1ZSBp bnRlZ2VyKTsiOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgJGRkbCk7 Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdGVz dF9yZXAgVkFMVUVTICgxLCAnZGF0YTEnLCAxKTsiKTsKKyRub2RlX3N1YnNjcmliZXItPnNhZmVf cHNxbCgncG9zdGdyZXMnLCAkZGRsKTsKKworbXkgJHB1Ymxpc2hlcl9jb25uc3RyID0gJG5vZGVf cHVibGlzaGVyLT5jb25uc3RyIC4gJyBkYm5hbWU9cG9zdGdyZXMnOworJG5vZGVfcHVibGlzaGVy LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQ1JFQVRFIFBVQkxJQ0FUSU9OIG15cHViIEZPUiBB TEwgVEFCTEVTIHdpdGggKHB1Ymxpc2ggPSAnaW5zZXJ0LCB1cGRhdGUsIGRlbGV0ZScsIGRkbCA9 ICdhbGwnKTsiKTsKKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJD UkVBVEUgU1VCU0NSSVBUSU9OIG15c3ViIENPTk5FQ1RJT04gJyRwdWJsaXNoZXJfY29ubnN0cicg UFVCTElDQVRJT04gbXlwdWI7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAo J215c3ViJyk7CisKKyMgTWFrZSBzdXJlIHdlIGhhdmUgZnVsbHkgc3luY2hyb25pemVkIHRoZSB0 YWJsZS4KKyMgVGhpcyBwcmV2ZW50cyBBTFRFUiBUQUJMRSBjb21tYW5kIGJlbG93IGZyb20gYmVp bmcgZXhlY3V0ZWQgZHVyaW5nIHRhYmxlIHN5bmNocm9uaXphdGlvbi4KKyRub2RlX3N1YnNjcmli ZXItPnBvbGxfcXVlcnlfdW50aWwoJ3Bvc3RncmVzJywKKyAgICJTRUxFQ1QgQ09VTlQoMSkgPSAw IEZST00gcGdfc3Vic2NyaXB0aW9uX3JlbCBzciBXSEVSRSBzci5zcnN1YnN0YXRlIE5PVCBJTiAo J3MnLCAncicpIEFORCBzci5zcnJlbGlkID0gJ3Rlc3RfcmVwJzo6cmVnY2xhc3MiCispOworCisj IFRlc3QgQUxURVIgVEFCTEUgQURECiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLCAiQUxURVIgVEFCTEUgdGVzdF9yZXAgQUREIGM0IGludDsiKTsKKyRub2RlX3B1Ymxpc2hl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0ZXN0X3JlcCBWQUxVRVMgKDIs ICdkYXRhMicsIDIsIDIpOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdt eXN1YicpOworbXkgJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLCAiU0VMRUNUIGNvdW50KCopIEZST00gdGVzdF9yZXAgV0hFUkUgYzQgPSAyOyIpOworaXMo JHJlc3VsdCwgcXEoMSksICdBTFRFUiB0ZXN0X3JlcCBBREQgcmVwbGljYXRlZCcpOworCisjIFRl c3QgQUxURVIgVEFCTEUgRFJPUAorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywgIkFMVEVSIFRBQkxFIHRlc3RfcmVwIERST1AgYzQ7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCAiREVMRVRFIEZST00gdGVzdF9yZXAgd2hlcmUgaWQgPSAyOyIp OworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJHJlc3VsdCA9 ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCop IGZyb20gdGVzdF9yZXA7Iik7CitpcygkcmVzdWx0LCBxcSgxKSwgJ0FMVEVSIHRlc3RfcmVwIERS T1AgcmVwbGljYXRlZCcpOworCisjIFRlc3QgQUxURVIgVEFCTEUgQUxURVIgVFlQRQorJG5vZGVf cHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkFMVEVSIFRBQkxFIHRlc3RfcmVwIEFM VEVSIHZhbHVlIFRZUEUgdmFyY2hhciIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgIklOU0VSVCBJTlRPIHRlc3RfcmVwIFZBTFVFUyAoMywgJ2RhdGEzJywgJzMnKTsi KTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRyZXN1bHQg PSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgq KSBGUk9NIHRlc3RfcmVwIFdIRVJFIHZhbHVlID0gJzMnOyIpOworaXMoJHJlc3VsdCwgcXEoMSks ICdBTFRFUiB0ZXN0X3JlcCBBTFRFUiBDT0xVTU4gVFlQRSByZXBsaWNhdGVkJyk7CisKKyMgVGVz dCBBTFRFUiBUQUJMRSBBTFRFUiBTRVQgREVGQVVMVAorIyBDaGVjayBpZiB3ZSBoYXZlIHRoZSBk ZWZhdWx0IHZhbHVlIGFmdGVyIHRoZSBkaXJlY3QgaW5zZXJ0IHRvIHN1YnNjcmliZXIgbm9kZS4K KyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJBTFRFUiBUQUJMRSB0ZXN0 X3JlcCBBTFRFUiBDT0xVTU4gdmFsdWUgU0VUIERFRkFVTFQgJ2ZvbyciKTsKKyRub2RlX3B1Ymxp c2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3N1YnNjcmliZXItPnNhZmVf cHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdGVzdF9yZXAgVkFMVUVTICg0LCAnZGF0YTQn KTsiKTsKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywg IlNFTEVDVCB2YWx1ZSBGUk9NIHRlc3RfcmVwIFdIRVJFIGlkID0gNDsiKTsKK2lzKCRyZXN1bHQs ICdmb28nLCAnQUxURVIgdGVzdF9yZXAgQUxURVIgU0VUIERFRkFVTFQgcmVwbGljYXRlZCcpOwor CisjIFRlc3QgQUxURVIgVEFCTEUgQUxURVIgRFJPUCBERUZBVUxUCisjIENoZWNrIGlmIHdlIGRv bid0IGhhdmUgdGhlIGRlZmF1bHQgdmFsdWUgcHJldmlvdXNseSBkZWZpbmVkLgorJG5vZGVfcHVi bGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkFMVEVSIFRBQkxFIHRlc3RfcmVwIEFMVEVS IENPTFVNTiB2YWx1ZSBEUk9QIERFRkFVTFQ7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9y X2NhdGNodXAoJ215c3ViJyk7Ciskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywgIklOU0VSVCBJTlRPIHRlc3RfcmVwIFZBTFVFUyAoNSwgJ2RhdGE1Jyk7Iik7CiskcmVzdWx0 ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgdmFsdWUg SVMgTlVMTCBGUk9NIHRlc3RfcmVwIFdIRVJFIGlkID0gNTsiKTsKK2lzKCRyZXN1bHQsIHEodCks ICdBTFRFUiB0ZXN0X3JlcCBBTFRFUiBEUk9QIERFRkFVTFQgcmVwbGljYXRlZCcpOworCisjIFRl c3QgQUxURVIgVEFCTEUgQUxURVIgU0VUIE5PVCBOVUxMCisjIFJlbW92ZSB0aGUgZXhpc3Rpbmcg cmVjb3JkIHRoYXQgY29udGFpbnMgbnVsbCB2YWx1ZSBmaXJzdC4KK215ICgkc3Rkb3V0LCAkc3Rk ZXJyKTsKKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiREVMRVRFIEZS T00gdGVzdF9yZXAgV0hFUkUgaWQgPSA1OyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywgIkFMVEVSIFRBQkxFIHRlc3RfcmVwIEFMVEVSIHZhbHVlIFNFVCBOT1QgTlVM TDsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2Rl X3N1YnNjcmliZXItPnBzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRlc3RfcmVwIFZBTFVF UyAoNiwgJ2RhdGE2Jyk7IiwKKwkJCQkJICAgb25fZXJyb3Jfc3RvcCA9PiAwLAorCQkJCQkgICBz dGRlcnIgPT4gXCRzdGRlcnIsCisJCQkJCSAgIHN0ZG91dCA9PiBcJHN0ZG91dCk7Ciskc3RkZXJy ID1+IC9FUlJPUjogIG51bGwgdmFsdWUgaW4gY29sdW1uIFwidmFsdWVcIiBvZiByZWxhdGlvbiBc InRlc3RfcmVwXCIgdmlvbGF0ZXMgbm90LW51bGwgY29uc3RyYWludC8KKyAgb3IgZGllICJmYWls ZWQgdG8gcmVwbGljYXRlIEFMVEVSIFRBQkxFIEFMVEVSIFNFVCBOT1QgTlVMTCI7CisKKyMgVGVz dCBBTFRFUiBUQUJMRSBBTFRFUiBEUk9QIE5PVCBOVUxMCiskbm9kZV9wdWJsaXNoZXItPnNhZmVf cHNxbCgncG9zdGdyZXMnLCAiQUxURVIgVEFCTEUgdGVzdF9yZXAgQUxURVIgdmFsdWUgRFJPUCBO T1QgTlVMTDsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsK KyMgSW5zZXJ0IHNhbWUgZGF0YSB0aGF0IGhhcyBOVUxMIHZhbHVlLiBUaGlzIGZhaWxlZCBiZWZv cmUgYnV0IG5vdyBzaG91bGQgc3VjY2VlZC4KKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgn cG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdGVzdF9yZXAgVkFMVUVTICg2LCAnZGF0YTYnKTsiKTsK KyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVD VCB2YWx1ZSBJUyBOVUxMIEZST00gdGVzdF9yZXAgV0hFUkUgaWQgPSA2OyIpOworaXMoJHJlc3Vs dCwgcSh0KSwgIkFMVEVSIHRlc3RfcmVwIEFMVEVSIERST1AgTk9UIE5VTEwgcmVwbGljYXRlZCIp OworCisjIFRlc3QgQUxURVIgVEFCTEUgU0VUIFVOTE9HR0VECiskbm9kZV9wdWJsaXNoZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCAnQUxURVIgVEFCTEUgdGVzdF9yZXAgU0VUIFVOTE9HR0VEOycp OworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJG5vZGVfcHVi bGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRlc3RfcmVwIFZBTFVF UyAoNywgJ2RhdGE3JywgJzcnKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1 cCgnbXlzdWInKTsKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywgIlNFTEVDVCBjb3VudCgqKSBGUk9NIHRlc3RfcmVwIFdIRVJFIGlkID0gNzsiKTsKK2lz KCRyZXN1bHQsIHFxKDApLCAnQUxURVIgdGVzdF9yZXAgU0VUIFVOTE9HR0VEIHJlcGxpY2F0ZWQn KTsKKworIyBUZXN0IEFMVEVSIFRBQkxFIFNFVCBMT0dHRUQKKyRub2RlX3B1Ymxpc2hlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICdBTFRFUiBUQUJMRSB0ZXN0X3JlcCBTRVQgTE9HR0VEOycpOwor JG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJG5vZGVfcHVibGlz aGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRlc3RfcmVwIFZBTFVFUyAo OCwgJ2RhdGE4JywgJzgnKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgn bXlzdWInKTsKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywgIlNFTEVDVCBjb3VudCgqKSBGUk9NIHRlc3RfcmVwIFdIRVJFIGlkID0gODsiKTsKK2lzKCRy ZXN1bHQsIHFxKDEpLCAnQUxURVIgdGVzdF9yZXAgU0VUIExPR0dFRCByZXBsaWNhdGVkJyk7CisK KyMgVGVzdCBDUkVBVEUgVEFCTEUgYW5kIERNTCBjaGFuZ2VzCiskbm9kZV9wdWJsaXNoZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIHRtcCAoYSBpbnQsIGIgdmFyY2hhcik7 Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7CiskcmVzdWx0 ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQo KikgZnJvbSBwZ190YWJsZXMgd2hlcmUgdGFibGVuYW1lID0gJ3RtcCc7Iik7CitpcygkcmVzdWx0 LCBxcSgxKSwgJ0NSRUFURSB0bXAgaXMgcmVwbGljYXRlZCcpOworJG5vZGVfcHVibGlzaGVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCB2YWx1ZXMgKDEsICdhJykiKTsK KyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAg dmFsdWVzICgyLCAnYicpIik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215 c3ViJyk7CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs ICJTRUxFQ1QgY291bnQoKikgZnJvbSB0bXA7Iik7CitpcygkcmVzdWx0LCBxcSgyKSwgJ0RNTCBD aGFuZ2VzIHRvIHRtcCBhcmUgcmVwbGljYXRlZCcpOworCisjIFRlc3QgQ1JFQVRFIFRBQkxFIElO SEVSSVRTCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRB QkxFIHRtcDIgKGMzIGludCkgSU5IRVJJVFMgKHRtcCk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wMiBWQUxVRVMgKDEsICdhJywgMSk7 Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7CiskcmVzdWx0 ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQo KikgZnJvbSBwZ190YWJsZXMgd2hlcmUgdGFibGVuYW1lID0gJ3RtcDInOyIpOworaXMoJHJlc3Vs dCwgcXEoMSksICdDUkVBVEUgVEFCTEUgSU5IRVJJVFMgaXMgcmVwbGljYXRlZCcpOworJHJlc3Vs dCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50 KCopIGZyb20gdG1wMjsiKTsKK2lzKCRyZXN1bHQsIHFxKDEpLCAnaW5zZXJ0aW5nIHNvbWUgZGF0 YSB0byBpbmhlcml0ZWQgdGFibGUgcmVwbGljYXRlZCcpOworJG5vZGVfcHVibGlzaGVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdG1wMiIpOworCisjIFRlc3QgQ1JFQVRFIFRB QkxFIExJS0UKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUg VEFCTEUgdG1wMyAoYzMgaW50LCBMSUtFIHRtcCk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVf cHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wMyBWQUxVRVMgKDEsIDEsICdhJyk7Iik7 Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7CiskcmVzdWx0ID0g JG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQoKikg ZnJvbSBwZ190YWJsZXMgd2hlcmUgdGFibGVuYW1lID0gJ3RtcDMnOyIpOworaXMoJHJlc3VsdCwg cXEoMSksICdDUkVBVEUgVEFCTEUgTElLRSByZXBsaWNhdGVkJyk7CiskcmVzdWx0ID0gJG5vZGVf c3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQoKikgZnJvbSB0 bXAzOyIpOworaXMoJHJlc3VsdCwgcXEoMSksICdpbnNlcnQgc29tZSBkYXRhIHRvIGEgdGFibGUg ZGVmaW5lZCB3aXRoIExJS0UgcmVwbGljYXRlZCcpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdG1wMyIpOworCisjIFRlc3QgRFJPUCBUQUJMRQor JG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdG1wOyIp OworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJHJlc3VsdCA9 ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCop IGZyb20gcGdfdGFibGVzIHdoZXJlIHRhYmxlbmFtZSA9ICd0bXAnOyIpOworaXMoJHJlc3VsdCwg cXEoMCksICdUQUJMRSB0bXAgaXMgZHJvcHBlZCcpOworCisjIFRlc3QgQ1JFQVRFIFVOTE9HR0VE IFRBQkxFCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFVO TE9HR0VEIFRBQkxFIHRtcCAoaWQgaW50KTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgxKTsiKTsKKyRub2RlX3B1Ymxp c2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3Jp YmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgqKSBmcm9tIHBnX3RhYmxl cyB3aGVyZSB0YWJsZW5hbWUgPSAndG1wJzsiKTsKK2lzKCRyZXN1bHQsIHFxKDEpLCAnQ1JFQVRF IFVOTE9HR0VEIFRBQkxFIGlzIHJlcGxpY2F0ZWQgY29ycmVjdGx5Jyk7CiskcmVzdWx0ID0gJG5v ZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQoKikgZnJv bSB0bXA7Iik7CitpcygkcmVzdWx0LCBxcSgwKSwgJ2luc2VydGluZyBkYXRhIHRvIHVubG9nZ2Vk IHRhYmxlIGlzIG5vdCByZXBsaWNhdGVkIGNvcnJlY3RseScpOworJG5vZGVfcHVibGlzaGVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdG1wIik7CisKKyMgVGVzdCBDUkVBVEUg VEFCTEUgSUYgTk9UIEVYSVNUUworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywgIkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIHRtcCAoaWQgaW50KTsiKTsKKyRub2RlX3B1 Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgx KTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRyZXN1 bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3Vu dCgqKSBmcm9tIHBnX3RhYmxlcyB3aGVyZSB0YWJsZW5hbWUgPSAndG1wJzsiKTsKK2lzKCRyZXN1 bHQsIHFxKDEpLCAnQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgcmVwbGljYXRlZCcpOworJHJl c3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNv dW50KCopIGZyb20gdG1wOyIpOworaXMoJHJlc3VsdCwgcXEoMSksICdpbnNlcnRpbmcgZGF0YSB0 byBhIHRhYmxlIHJlcGxpY2F0ZWQnKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0 Z3JlcycsICJEUk9QIFRBQkxFIHRtcCIpOworCisjIFRlc3QgQ1JFQVRFIFRBQkxFIElGIE5PVCBF WElTVFMgKGNoZWNrIGlmIHdlIHNraXAgdG8gY3JlYXRlIGEgdGFibGUKKyMgd2hlbiB3ZSBoYXZl IHRoZSB0YWJsZSBvbiB0aGUgc3Vic2NyaWJlciBpbiBhZHZhbmNlLCBhbmQgaWYgd2Ugc3VjY2Vl ZAorIyBpbiByZXBsaWNhdGluZyBjaGFuZ2VzLikKKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNx bCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIHRtcCAoaWQgaW50KTsiKTsKKyRub2RlX3B1Ymxp c2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyB0 bXAgKGlkIGludCk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAi SU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMSk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9y X2NhdGNodXAoJ215c3ViJyk7CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQoKikgZnJvbSB0bXA7Iik7CitpcygkcmVzdWx0LCBx cSgxKSwgJ0NSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIHJlcGxpY2F0ZWQnKTsKKyRub2RlX3B1 Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHRtcCIpOworCisjIFRl c3QgQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgKGNoZWNrIGlmIHdlIHNraXAgdG8gY3JlYXRl IGEgdGFibGUKKyMgd2hlbiB3ZSBoYXZlIHRoZSB0YWJsZSBvbiB0aGUgcHVibGlzaGVyLCBidXQg bm90IG9uIHRoZSBzdWJzY3JpYmVyLikKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0 Z3JlcycsICJDUkVBVEUgVEFCTEUgdG1wIChpZCBpbnQpOyIpOworJG5vZGVfcHVibGlzaGVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIHRtcCAoaWQg aW50KTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQg SU5UTyB0bXAgVkFMVUVTICgxKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1 cCgnbXlzdWInKTsKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywgIlNFTEVDVCBjb3VudCgqKSBmcm9tIHRtcDsiKTsKK2lzKCRyZXN1bHQsIHFxKDEpLCAn Q1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgcmVwbGljYXRlZCcpOworJG5vZGVfcHVibGlzaGVy LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdG1wIik7CisKKyMgVGVzdCBDUkVB VEUgVEFCTEUgd2l0aCBjb2xsYXRlCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLCAiQ1JFQVRFIFRBQkxFIHRtcCAobmFtZSB0ZXh0IENPTExBVEUgXCJDXCIpOyIpOworJG5v ZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxV RVMgKCdmb28nKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWIn KTsKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNF TEVDVCBjb2xsYXRpb25fbmFtZSBGUk9NIGluZm9ybWF0aW9uX3NjaGVtYS5jb2x1bW5zIFdIRVJF IHRhYmxlX25hbWUgPSAndG1wJzsiKTsKK2lzKCRyZXN1bHQsIHFxKEMpLCAnQ1JFQVRFIFRBQkxF IHdpdGggY29sbGF0ZSByZXBsaWNhdGVkJyk7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgn cG9zdGdyZXMnLCAiRFJPUCBUQUJMRSB0bXAiKTsKKworIyBUZXN0IENSRUFURSBUQUJMRSB3aXRo IG5hbWVkIGNvbnN0cmFpbnQKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs ICJDUkVBVEUgVEFCTEUgdG1wIChpZCBpbnQgQ09OU1RSQUlOVCBcIm11c3QgYmUgYmlnZ2VyIHRo YW4gMTBcIiBDSEVDSyAoaWQgPiAxMCkpOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9j YXRjaHVwKCdteXN1YicpOworJG5vZGVfc3Vic2NyaWJlci0+cHNxbCgncG9zdGdyZXMnLCAiSU5T RVJUIElOVE8gdG1wIFZBTFVFUyAoMSk7IiwKKwkJCQkJICAgb25fZXJyb3Jfc3RvcCA9PiAwLAor CQkJCQkgICBzdGRlcnIgPT4gXCRzdGRlcnIsCisJCQkJCSAgIHN0ZG91dCA9PiBcJHN0ZG91dCk7 Ciskc3RkZXJyID1+IC9FUlJPUjogIG5ldyByb3cgZm9yIHJlbGF0aW9uICJ0bXAiIHZpb2xhdGVz IGNoZWNrIGNvbnN0cmFpbnQgIm11c3QgYmUgYmlnZ2VyIHRoYW4gMTAiLworICBvciBkaWUgImZh aWxlZCB0byByZXBsaWNhdGUgbmFtZWQgY29uc3RyYWludCBhdCBjcmVhdGluZyB0YWJsZSI7Cisk bm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSB0bXA7Iik7 CisKKyMgVGVzdCBDUkVBVEUgVEFCTEUgd2l0aCB2YXJpb3VzIHR5cGVzIG9mIGNvbnN0cmFpbnRz LgorIyBOT1QgTlVMTCBjb25zdHJhaW50Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9z dGdyZXMnLCAiQ1JFQVRFIFRBQkxFIHRtcCAoaWQgaW50LCBuYW1lIHRleHQgTk9UIE5VTEwpOyIp OworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJG5vZGVfc3Vi c2NyaWJlci0+cHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMSk7IiwK KwkJCQkJICAgb25fZXJyb3Jfc3RvcCA9PiAwLAorCQkJCQkgICBzdGRlcnIgPT4gXCRzdGRlcnIs CisJCQkJCSAgIHN0ZG91dCA9PiBcJHN0ZG91dCk7Ciskc3RkZXJyID1+IC9FUlJPUjogIG51bGwg dmFsdWUgaW4gY29sdW1uICJuYW1lIiBvZiByZWxhdGlvbiAidG1wIiB2aW9sYXRlcyBub3QtbnVs bCBjb25zdHJhaW50LworICBvciBkaWUgImZhaWxlZCB0byByZXBsaWNhdGUgbm9uIG51bGwgY29u c3RyYWludCBhdCBjcmVhdGluZyB0YWJsZSI7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgn cG9zdGdyZXMnLCAiRFJPUCBUQUJMRSB0bXA7Iik7CisKKyMgTlVMTCBjb25zdHJhaW50Ciskbm9k ZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIHRtcCAoaWQg aW50LCBuYW1lIHRleHQgTlVMTCk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNo dXAoJ215c3ViJyk7Ciskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklO U0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEpOyIpOworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXIt PnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIG5hbWUgSVMgTlVMTCBGUk9NIHRtcDsiKTsK K2lzKCRyZXN1bHQsIHFxKHQpLCAiQ1JFQVRFIFRBQkxFIHdpdGggTlVMTCBjb25zdHJhaW50IHJl cGxpY2F0ZWQiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9Q IFRBQkxFIHRtcCIpOworCisjIENIRUNLIGNvbnN0cmFpbnQKKyRub2RlX3B1Ymxpc2hlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgdG1wIChpZCBpbnQsIHByb2R1Y3RfYW1l IHRleHQsIHByaWNlIGludCBDSEVDSyAocHJpY2UgPiAwKSk7Iik7Ciskbm9kZV9wdWJsaXNoZXIt PndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Ciskbm9kZV9zdWJzY3JpYmVyLT5wc3FsKCdwb3N0 Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgxLCAnZm9vJywgLTEwMCk7IiwKKwkJCQkJ ICAgb25fZXJyb3Jfc3RvcCA9PiAwLAorCQkJCQkgICBzdGRlcnIgPT4gXCRzdGRlcnIsCisJCQkJ CSAgIHN0ZG91dCA9PiBcJHN0ZG91dCk7Ciskc3RkZXJyID1+IC9FUlJPUjogIG5ldyByb3cgZm9y IHJlbGF0aW9uICJ0bXAiIHZpb2xhdGVzIGNoZWNrIGNvbnN0cmFpbnQgInRtcF9wcmljZV9jaGVj ayIvCisgIG9yIGRpZSAiZmFpbGVkIHRvIHJlcGxpY2F0ZSBDSEVDSyBjb25zdHJhaW50IjsKKyRu b2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHRtcDsiKTsK KworIyBERUZBVUxUCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JF QVRFIFRBQkxFIHRtcCAoaWQgaW50LCBuYW1lIHRleHQgREVGQVVMVCAnZm9vJyk7Iik7Ciskbm9k ZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Ciskbm9kZV9zdWJzY3JpYmVy LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEpOyIpOwor JHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNU IG5hbWUgZnJvbSB0bXA7Iik7CitpcygkcmVzdWx0LCBxcShmb28pLCAiQ1JFQVRFIFRBQkxFIHdp dGggZGVmYXVsdCB2YWx1ZSByZXBsaWNhdGVkIik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNx bCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSB0bXAiKTsKKworIyBVTklRVUUgY29uc3RyYWludAor JG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRSB0bXAg KGlkIGludCBVTklRVUUpOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEpOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0 X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJG5vZGVfc3Vic2NyaWJlci0+cHNxbCgncG9zdGdyZXMn LCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMSk7IiwKKwkJCQkJICAgb25fZXJyb3Jfc3RvcCA9 PiAwLAorCQkJCQkgICBzdGRlcnIgPT4gXCRzdGRlcnIsCisJCQkJCSAgIHN0ZG91dCA9PiBcJHN0 ZG91dCk7Ciskc3RkZXJyID1+IC9FUlJPUjogIGR1cGxpY2F0ZSBrZXkgdmFsdWUgdmlvbGF0ZXMg dW5pcXVlIGNvbnN0cmFpbnQgInRtcF9pZF9rZXkiLworICBvciBkaWUgImZhaWxlZCB0byByZXBs aWNhdGUgY29uc3RyYWludCBhdCBjcmVhdGluZyB0YWJsZSI7Ciskbm9kZV9wdWJsaXNoZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSB0bXA7Iik7CisKKyMgUFJJTUFSWSBLRVkK KyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgdG1w IChpZCBpbnQgUFJJTUFSWSBLRVksIG5hbWUgdGV4dCk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMSwgJ2ZvbycpOyIp OworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJG5vZGVfc3Vi c2NyaWJlci0+cHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMSwgJ2Jh cicpOyIsCisJCQkJCSAgIG9uX2Vycm9yX3N0b3AgPT4gMCwKKwkJCQkJICAgc3RkZXJyID0+IFwk c3RkZXJyLAorCQkJCQkgICBzdGRvdXQgPT4gXCRzdGRvdXQpOworJHN0ZGVyciA9fiAvRVJST1I6 ICBkdXBsaWNhdGUga2V5IHZhbHVlIHZpb2xhdGVzIHVuaXF1ZSBjb25zdHJhaW50ICJ0bXBfcGtl eSIvCisgIG9yIGRpZSAiZmFpbGVkIHRvIHJlcGxpY2F0ZSBwcmltYXJ5IGtleSBhdCBjcmVhdGlu ZyB0YWJsZSI7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBU QUJMRSB0bXA7Iik7CisKKyMgRVhDTFVERQorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgIkNSRUFURSBUQUJMRSBjaXJjbGVzIChjIGNpcmNsZSwgRVhDTFVERSBVU0lORyBn aXN0IChjIFdJVEggJiYpKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsICJJTlNFUlQgSU5UTyBjaXJjbGVzIFZBTFVFUyAoJzwoMSwgMSksIDE+Jzo6Y2lyY2xlKTsi KTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3N1 YnNjcmliZXItPnBzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIGNpcmNsZXMgVkFMVUVTICgn PCgxLCAxKSwgMT4nOjpjaXJjbGUpOyIsCisJCQkJCSAgIG9uX2Vycm9yX3N0b3AgPT4gMCwKKwkJ CQkJICAgc3RkZXJyID0+IFwkc3RkZXJyLAorCQkJCQkgICBzdGRvdXQgPT4gXCRzdGRvdXQpOwor JHN0ZGVyciA9fiAvRVJST1I6ICBjb25mbGljdGluZyBrZXkgdmFsdWUgdmlvbGF0ZXMgZXhjbHVz aW9uIGNvbnN0cmFpbnQgImNpcmNsZXNfY19leGNsIi8KKyAgb3IgZGllICJmYWlsZWQgdG8gcmVw bGljYXRlIEVYQ0xVREUgYXQgY3JlYXRpbmcgdGFibGUiOworJG5vZGVfcHVibGlzaGVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgY2lyY2xlcyIpOworCisjIFJFRkVSRU5DRVMK KyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgcHJv ZHVjdCAoaWQgaW50IFBSSU1BUlkgS0VZLCBuYW1lIHRleHQpOyIpOworJG5vZGVfcHVibGlzaGVy LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHByb2R1Y3QgVkFMVUVTICgxLCAn Zm9vJyk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJU IElOVE8gcHJvZHVjdCBWQUxVRVMgKDIsICdiYXInKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgb3JkZXJzIChvcmRlcl9pZCBpbnQgUFJJ TUFSWSBLRVksIHByb2R1Y3RfaWQgaW50IFJFRkVSRU5DRVMgcHJvZHVjdCAoaWQpKSIpOworJG5v ZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJG5vZGVfc3Vic2NyaWJl ci0+cHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gb3JkZXJzIFZBTFVFUyAoMSwgMTApIiwK KwkJCQkJICAgb25fZXJyb3Jfc3RvcCA9PiAwLAorCQkJCQkgICBzdGRlcnIgPT4gXCRzdGRlcnIs CisJCQkJCSAgIHN0ZG91dCA9PiBcJHN0ZG91dCk7Ciskc3RkZXJyID1+IC9FUlJPUjogIGluc2Vy dCBvciB1cGRhdGUgb24gdGFibGUgIm9yZGVycyIgdmlvbGF0ZXMgZm9yZWlnbiBrZXkgY29uc3Ry YWludCAib3JkZXJzX3Byb2R1Y3RfaWRfZmtleSIvCisgIG9yIGRpZSAiZmFpbGVkIHRvIHJlcGxp Y2F0ZSBSRUZFUkVOQ0VTIGF0IGNyZWF0aW5nIHRhYmxlIjsKKyRub2RlX3B1Ymxpc2hlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIG9yZGVycyIpOworJG5vZGVfcHVibGlzaGVy LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgcHJvZHVjdCIpOworCisjIERFRkVS UkFCTEUKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFC TEUgdG1wIChpZCBpbnQgUFJJTUFSWSBLRVkgREVGRVJSQUJMRSwgbmFtZSB0ZXh0KTsiKTsKKyRu b2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgVkFM VUVTICgxLCAnZm9vJyk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMn LCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMiwgJ2JhcicpOyIpOworJG5vZGVfcHVibGlzaGVy LT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworIyBRdWljayBjaGVjayBvZiBkZWZlcnJhYmxl IGNsYXVzZQorJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJVUERBVEUg dG1wIFNFVCBpZCA9IGlkICsgMTsiKTsKKyMgQWxzbywgZXhlY3V0ZSBhIHRlc3QgdGhhdCBzaG91 bGQgZmFpbCBmb3IgSU5JVElBTExZIElNTUVESUFURSh0aGUgZGVmYXVsdCkKKyRub2RlX3N1YnNj cmliZXItPnBzcWwoJ3Bvc3RncmVzJywgcXEoCitCRUdJTjsKK1VQREFURSB0bXAgU0VUIGlkID0g aWQgKyAxOworSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMywgJ2Zvb2JhcicpOworREVMRVRFIEZS T00gdG1wIFdIRVJFIGlkID0gMzsKK0NPTU1JVDsKKyksIG9uX2Vycm9yX3N0b3AgPT4gMCwgc3Rk ZXJyID0+IFwkc3RkZXJyLCBzdGRvdXQgPT4gXCRzdGRvdXQpOworJHN0ZGVyciA9fiAvRVJST1I6 ICBkdXBsaWNhdGUga2V5IHZhbHVlIHZpb2xhdGVzIHVuaXF1ZSBjb25zdHJhaW50ICJ0bXBfcGtl eSIvCisgIG9yIGRpZSAiZmFpbGVkIHRvIHJlcGxpY2F0ZSBERUZFUlJBQkxFIGF0IGNyZWF0aW5n IHRhYmxlIjsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRB QkxFIHRtcDsiKTsKKworIyBOT1QgREVGRVJSQUJMRQorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRSB0bXAgKGlkIGludCBQUklNQVJZIEtFWSBOT1Qg REVGRVJSQUJMRSwgbmFtZSB0ZXh0KTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgxLCAnZm9vJyk7Iik7Ciskbm9kZV9w dWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAo MiwgJ2JhcicpOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1Yicp OworJG5vZGVfc3Vic2NyaWJlci0+cHNxbCgncG9zdGdyZXMnLCAiVVBEQVRFIHRtcCBTRVQgaWQg PSBpZCArIDE7IiwKKwkJCQkJICAgb25fZXJyb3Jfc3RvcCA9PiAwLAorCQkJCQkgICBzdGRlcnIg PT4gXCRzdGRlcnIsCisJCQkJCSAgIHN0ZG91dCA9PiBcJHN0ZG91dCk7Ciskc3RkZXJyID1+IC9F UlJPUjogIGR1cGxpY2F0ZSBrZXkgdmFsdWUgdmlvbGF0ZXMgdW5pcXVlIGNvbnN0cmFpbnQgInRt cF9wa2V5Ii8KKyAgb3IgZGllICJmYWlsZWQgdG8gcmVwbGljYXRlIE5PVCBERUZFUlJBQkxFIGF0 IGNyZWF0aW5nIHRhYmxlIjsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs ICJEUk9QIFRBQkxFIHRtcDsiKTsKKworIyBERUZFUlJBQkxFIGFuZCBJTklUSUFMTFkgREVGRVJS RUQKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEUg dG1wIChpZCBpbnQgUFJJTUFSWSBLRVkgREVGRVJSQUJMRSBJTklUSUFMTFkgREVGRVJSRUQsIG5h bWUgdGV4dCk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5T RVJUIElOVE8gdG1wIFZBTFVFUyAoMSwgJ2ZvbycpOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDIsICdiYXInKTsiKTsK KyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyMgUXVpY2sgY2hl Y2sgb2YgZGVmZXJyYWJsZSBjbGF1c2UKKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9z dGdyZXMnLCAiVVBEQVRFIHRtcCBTRVQgaWQgPSBpZCArIDE7Iik7CisjIEFsc28sIGV4ZWN1dGUg YSB0ZXN0IHRoYXQgc2hvdWxkIHN1Y2NlZWQgZm9yIElOSVRJQUxMWSBERUZFUlJFRAorJG5vZGVf c3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHFxKAorQkVHSU47CitVUERBVEUgdG1w IFNFVCBpZCA9IGlkICsgMTsKK0lOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDMsICdmb29iYXInKTsK K0RFTEVURSBGUk9NIHRtcCBXSEVSRSBpZCA9IDM7CitDT01NSVQ7CispKTsKKyRub2RlX3B1Ymxp c2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHRtcDsiKTsKKworIyBUZXN0 IENSRUFURSBUQUJMRSB3aXRoIHRhYmxlIGNvbnN0cmFpbnQKKyMgV2Ugd2lsbCBzZXQgdHdvIGNo ZWNrcyBhbmQgY29uZHVjdCB0d28gaW5zZXJ0cyB0aGF0IHNob3VsZCBmYWlsIHJlc3BlY3RpdmVs eS4KKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIkNSRUFURSBUQUJM RSB0bXAgKHByaWNlIGludCwgZGlzY291bnRlZF9wcmljZSBpbnQsIENIRUNLIChkaXNjb3VudGVk X3ByaWNlID4gMCBBTkQgcHJpY2UgPiBkaXNjb3VudGVkX3ByaWNlKSk7Iik7Ciskbm9kZV9wdWJs aXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Ciskbm9kZV9zdWJzY3JpYmVyLT5wc3Fs KCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgxMDAsIDApOyIsCisJCQkJCSAg IG9uX2Vycm9yX3N0b3AgPT4gMCwKKwkJCQkJICAgc3RkZXJyID0+IFwkc3RkZXJyLAorCQkJCQkg ICBzdGRvdXQgPT4gXCRzdGRvdXQpOworJHN0ZGVyciA9fiAvRVJST1I6ICBuZXcgcm93IGZvciBy ZWxhdGlvbiAidG1wIiB2aW9sYXRlcyBjaGVjayBjb25zdHJhaW50ICJ0bXBfY2hlY2siLworICBv ciBkaWUgImZhaWxlZCB0byByZXBsaWNhdGUgdGFibGUgY29uc3RyYWludCAoZmlyc3QgY29uZGl0 aW9uKSBhdCBjcmVhdGluZyB0YWJsZSI7Ciskbm9kZV9zdWJzY3JpYmVyLT5wc3FsKCdwb3N0Z3Jl cycsICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICg1MCwgMTAwKTsiLAorCQkJCQkgICBvbl9lcnJv cl9zdG9wID0+IDAsCisJCQkJCSAgIHN0ZGVyciA9PiBcJHN0ZGVyciwKKwkJCQkJICAgc3Rkb3V0 ID0+IFwkc3Rkb3V0KTsKKyRzdGRlcnIgPX4gL0VSUk9SOiAgbmV3IHJvdyBmb3IgcmVsYXRpb24g InRtcCIgdmlvbGF0ZXMgY2hlY2sgY29uc3RyYWludCAidG1wX2NoZWNrIi8KKyAgb3IgZGllICJm YWlsZWQgdG8gcmVwbGljYXRlIHRhYmxlIGNvbnN0cmFpbnQgKHNlY29uZCBjb25kaXRpb24pIGF0 IGNyZWF0aW5nIHRhYmxlIjsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs ICJEUk9QIFRBQkxFIHRtcDsiKTsKKworIyBUZXN0IENSRUFURSBUQUJMRSBXSVRIIHN0cm9yYWdl X3BhcmFtZXRlcgorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFU RSBUQUJMRSB0bXAgKGlkIGludCkgV0lUSCAoZmlsbGZhY3RvciA9IDgwKTsiKTsKKyRub2RlX3B1 Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgx KTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2Rl X3N1YnNjcmliZXItPnBzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCByZWxvcHRpb25zIEZST00gcGdf Y2xhc3MgV0hFUkUgcmVsbmFtZSA9ICd0bXAnOyIsCisJCQkJCSAgIG9uX2Vycm9yX3N0b3AgPT4g MCwKKwkJCQkJICAgc3RkZXJyID0+IFwkc3RkZXJyLAorCQkJCQkgICBzdGRvdXQgPT4gXCRzdGRv dXQpOworJHN0ZG91dCA9fiAve2ZpbGxmYWN0b3I9ODB9LworICBvciBkaWUgImZhaWxlZCB0byBy ZXBsaWNhdGUgc3RvcmFnZSBvcHRpb24iOworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCopIGZyb20gdG1wOyIpOworaXMoJHJl c3VsdCwgcXEoMSksICdDUkVBVEUgVEFCTEUgd2l0aCBzdG9yYWdlX3BhcmFtZXRlciByZXBsaWNh dGVkJyk7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJM RSB0bXA7Iik7CisKKyMgVGVzdCBDUkVBVEUgVEFCTEUgVEFCTEVTUEFDRSAoY3JlYXRpbmcgYSB0 YWJsZXNwYWNlIGlzIG5vdCByZXBsaWNhdGVkKQorIyBQcmVwYXJlIHRoZSBkaXJlY3RvcmllcyBm b3IgdGhlIHB1Ymxpc2hlciBhbmQgc3Vic2NyaWJlciBmaXJzdC4KK215ICgkYmFzZWRpciwgJHRh Ymxlc3BhY2VfZGlyKTsKKworJGJhc2VkaXIgPSAkbm9kZV9wdWJsaXNoZXItPmJhc2VkaXI7Cisk dGFibGVzcGFjZV9kaXIgPSAiJGJhc2VkaXIvdGJsc3BjX3B1YiI7Citta2RpcigkdGFibGVzcGFj ZV9kaXIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBU QUJMRVNQQUNFIG15dGJsc3BjIExPQ0FUSU9OICckdGFibGVzcGFjZV9kaXInOyIpOworJGJhc2Vk aXIgPSAkbm9kZV9zdWJzY3JpYmVyLT5iYXNlZGlyOworJHRhYmxlc3BhY2VfZGlyID0gIiRiYXNl ZGlyL3RibHNwY19zdWIiOworbWtkaXIgKCR0YWJsZXNwYWNlX2Rpcik7Ciskbm9kZV9zdWJzY3Jp YmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRVNQQUNFIG15dGJsc3BjIExP Q0FUSU9OICckdGFibGVzcGFjZV9kaXInOyIpOworCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNx bCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIHRtcCAoaWQgaW50KSBUQUJMRVNQQUNFIG15dGJs c3BjOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJ TlRPIHRtcCBWQUxVRVMgKDEpOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVw KCdteXN1YicpOworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLCAiU0VMRUNUIGNvdW50KCopIGZyb20gdG1wOyIpOworaXMoJHJlc3VsdCwgcXEoMSksICdD UkVBVEUgVEFCTEUgVEFCTEVTUEFDRSByZXBsaWNhdGVkJyk7Ciskbm9kZV9wdWJsaXNoZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSB0bXA7Iik7CisKKyMgVGVzdCBDUkVBVEUg VFlQRQorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUWVBF IG15dHlwZSBBUyAoaWQgaW50LCBuYW1lIHRleHQsIGFnZSBpbnQpOyIpOworJG5vZGVfcHVibGlz aGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRSB0bXAgT0YgbXl0eXBlOyIpOworJG5vZGVfcHVi bGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEs ICdiYXInKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsK KyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVD VCBjb3VudCgqKSBmcm9tIHRtcDsiKTsKK2lzKCRyZXN1bHQsIHFxKDEpLCAnQ1JFQVRFIFRBQkxF IE9GIHJlcGxpY2F0ZWQnKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs ICJEUk9QIFRBQkxFIHRtcCIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywgIkRST1AgVFlQRSBteXR5cGUiKTsKKworIyBUZXN0IENSRUFURSBFTlVNIFRZUEUKKyRub2Rl X3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVFlQRSBteWVudW10eXBl IEFTIEVOVU0gKCduZXcnLCAnb3BlbicsICdjbG9zZWQnKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+ d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgdG1wIChzdGF0dXMgbXllbnVtdHlwZSk7Iik7Ciskbm9k ZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVF UyAoJ25ldycpOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1Yicp OworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VM RUNUICogZnJvbSB0bXA7Iik7CitpcygkcmVzdWx0LCBxcShuZXcpLCAnQ1JFQVRFIFRBQkxFIE9G IHJlcGxpY2F0ZWQnKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJE Uk9QIFRBQkxFIHRtcCIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywg IkRST1AgVFlQRSBteWVudW10eXBlIik7CisKKyMgVGVzdCBDUkVBVEUgUkFOR0UgVFlQRQorJG5v ZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUWVBFIGZsb2F0OF9y YW5nZSBBUyBSQU5HRSAoc3VidHlwZSA9IGZsb2F0OCwgc3VidHlwZV9kaWZmID0gZmxvYXQ4bWkp OyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJG5vZGVf cHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRSB0bXAgKHZhbCBm bG9hdDhfcmFuZ2UpOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywg Imluc2VydCBpbnRvIHRtcCB2YWx1ZXMoZmxvYXQ4X3JhbmdlKC0xMi4zNCwgJzEuMTExMTEzZTMn KSk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7CiskcmVz dWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgKiBm cm9tIHRtcDsiKTsKK2lzKCRyZXN1bHQsIHFxKFstMTIuMzQsMTExMS4xMTNcKSksICdDUkVBVEUg VEFCTEUgT0YgcmVwbGljYXRlZCcpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywgIkRST1AgVEFCTEUgdG1wIik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9z dGdyZXMnLCAiRFJPUCBUWVBFIGZsb2F0OF9yYW5nZSIpOworCisjIFRlc3QgQ1JFQVRFIEJBU0Ug REFUQSBUWVBFIGFuZCB1c2UgaXQgaW4gdGFibGUgZGVmaW5pdGlvbgorJG5vZGVfcHVibGlzaGVy LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIgorQ1JFQVRFIFRZUEUgaW50NDI7CitDUkVBVEUgRlVO Q1RJT04gaW50NDJfaW4oY3N0cmluZykKKyAgIFJFVFVSTlMgaW50NDIKKyAgIEFTICdpbnQ0aW4n CisgICBMQU5HVUFHRSBpbnRlcm5hbCBTVFJJQ1QgSU1NVVRBQkxFOworQ1JFQVRFIEZVTkNUSU9O IGludDQyX291dChpbnQ0MikKKyAgIFJFVFVSTlMgY3N0cmluZworICAgQVMgJ2ludDRvdXQnCisg ICBMQU5HVUFHRSBpbnRlcm5hbCBTVFJJQ1QgSU1NVVRBQkxFOworQ1JFQVRFIFRZUEUgaW50NDIg KAorICAgaW50ZXJuYWxsZW5ndGggPSA0LAorICAgaW5wdXQgPSBpbnQ0Ml9pbiwKKyAgIG91dHB1 dCA9IGludDQyX291dCwKKyAgIGFsaWdubWVudCA9IGludDQsCisgICBkZWZhdWx0ID0gNDIsCisg ICBwYXNzZWRieXZhbHVlCispOworQ1JFQVRFIFRBQkxFIHRtcCAoZjEgaW50NDIpOworSU5TRVJU IElOVE8gdG1wIERFRkFVTFQgVkFMVUVTOworIik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9y X2NhdGNodXAoJ215c3ViJyk7CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsICJTRUxFQ1QgKiBmcm9tIHRtcDsiKTsKK2lzKCRyZXN1bHQsIHFxKDQyKSwg J0NSRUFURSBUQUJMRSBPRiByZXBsaWNhdGVkJyk7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNx bCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSB0bXAiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsICJEUk9QIFRZUEUgaW50NDIgY2FzY2FkZSIpOworCitwYXNzICJEREwg cmVwbGljYXRpb24gdGVzdHMgcGFzc2VkOiI7CisKKyRub2RlX3N1YnNjcmliZXItPnN0b3A7Cisk bm9kZV9wdWJsaXNoZXItPnN0b3A7CisKK2RvbmVfdGVzdGluZygpOwpkaWZmIC0tZ2l0IGEvc3Jj L3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRl ZnMubGlzdAppbmRleCA1OTYyZDYxLi43MTFiNTU0IDEwMDY0NAotLS0gYS9zcmMvdG9vbHMvcGdp bmRlbnQvdHlwZWRlZnMubGlzdAorKysgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlz dApAQCAtNTU5LDYgKzU1OSw3IEBAIERlZkVsZW1BY3Rpb24KIERlZmF1bHRBQ0xJbmZvCiBEZWZp bmVTdG10CiBEZWxldGVTdG10CitEZXBhcnNlZENvbW1hbmRUeXBlCiBEZXBlbmRlbmN5R2VuZXJh dG9yCiBEZXBlbmRlbmN5R2VuZXJhdG9yRGF0YQogRGVwZW5kZW5jeVR5cGUKQEAgLTE0MzksNiAr MTQ0MCw4IEBAIExvZ2ljYWxEZWNvZGVCZWdpblByZXBhcmVDQgogTG9naWNhbERlY29kZUNoYW5n ZUNCCiBMb2dpY2FsRGVjb2RlQ29tbWl0Q0IKIExvZ2ljYWxEZWNvZGVDb21taXRQcmVwYXJlZENC CitMb2dpY2FsRGVjb2RlRERMTWVzc2FnZUNCCitMb2dpY2FsRGVjb2RlU3RyZWFtRERMTWVzc2Fn ZUNCCiBMb2dpY2FsRGVjb2RlRmlsdGVyQnlPcmlnaW5DQgogTG9naWNhbERlY29kZUZpbHRlclBy ZXBhcmVDQgogTG9naWNhbERlY29kZU1lc3NhZ2VDQgpAQCAtMjI5Myw2ICsyMjk2LDggQEAgUmVv cmRlckJ1ZmZlckNoYW5nZQogUmVvcmRlckJ1ZmZlckNoYW5nZVR5cGUKIFJlb3JkZXJCdWZmZXJD b21taXRDQgogUmVvcmRlckJ1ZmZlckNvbW1pdFByZXBhcmVkQ0IKK1Jlb3JkZXJCdWZmZXJERExN ZXNzYWdlQ0IKK1Jlb3JkZXJCdWZmZXJTdHJlYW1ERExNZXNzYWdlQ0IKIFJlb3JkZXJCdWZmZXJE aXNrQ2hhbmdlCiBSZW9yZGVyQnVmZmVySXRlclRYTkVudHJ5CiBSZW9yZGVyQnVmZmVySXRlclRY TlN0YXRlCkBAIC0zNTkzLDYgKzM1OTgsNyBAQCBwdGhyZWFkX211dGV4X3QKIHB0aHJlYWRfb25j ZV90CiBwdGhyZWFkX3QKIHB0cmRpZmZfdAorcHVibGljYXRpb25fcmVsCiBwdWxsX3Zhcl9jbGF1 c2VfY29udGV4dAogcHVsbF92YXJhdHRub3NfY29udGV4dAogcHVsbF92YXJub3NfY29udGV4dAot LSAKMS44LjMuMQoK --000000000000d6784f05f261a2df Content-Type: application/octet-stream; name="v62-0007-Document-DDL-replication-and-DDL-deparser.patch" Content-Disposition: attachment; filename="v62-0007-Document-DDL-replication-and-DDL-deparser.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lcyuikhf6 RnJvbSAzNTdiNTMzZjc3ODBjODYwNTA0YmZmODlkODA0NjA2OGM4NjBlNmM3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBamluIENoZXJpYW4gPGFqaW5jQGZhc3QuYXUuZnVqaXRzdS5j b20+CkRhdGU6IE1vbiwgMTYgSmFuIDIwMjMgMDg6MjQ6MzIgLTA1MDAKU3ViamVjdDogW1BBVENI IHY2MiA3LzddIERvY3VtZW50IERETCByZXBsaWNhdGlvbiBhbmQgRERMIGRlcGFyc2VyLgoKLS0t CiBkb2Mvc3JjL3NnbWwvbG9naWNhbC1yZXBsaWNhdGlvbi5zZ21sIHwgMTA1NyArKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysKIDEgZmlsZSBjaGFuZ2VkLCAxMDU3IGluc2VydGlvbnMo KykKCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvbG9naWNhbC1yZXBsaWNhdGlvbi5zZ21sIGIv ZG9jL3NyYy9zZ21sL2xvZ2ljYWwtcmVwbGljYXRpb24uc2dtbAppbmRleCA1NGY0OGJlLi5hOWFm MDAwIDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvbG9naWNhbC1yZXBsaWNhdGlvbi5zZ21sCisr KyBiL2RvYy9zcmMvc2dtbC9sb2dpY2FsLXJlcGxpY2F0aW9uLnNnbWwKQEAgLTE0MzcsNiArMTQz NywxMDYzIEBAIHRlc3Rfc3ViPSMgU0VMRUNUICogRlJPTSB0MSBPUkRFUiBCWSBpZDsKIAogIDwv c2VjdDE+CiAKKyA8c2VjdDEgaWQ9ImxvZ2ljYWwtcmVwbGljYXRpb24tZGRsIj4KKyAgPHRpdGxl PkRETCBSZXBsaWNhdGlvbjwvdGl0bGU+CisgIDxwYXJhPgorICAgIERhdGEgRGVmaW5pdGlvbiBD b21tYW5kcyAoRERMcykgY2FuIGJlIHJlcGxpY2F0ZWQgdXNpbmcgbG9naWNhbCByZXBsaWNhdGlv bi4KKyAgICBXaGlsZSBlbmFibGVkIHRoaXMgZmVhdHVyZSBhdXRvbWF0aWNhbGx5IHJlcGxpY2F0 ZXMgc3VwcG9ydGVkIERETCBjb21tYW5kcworICAgIHRoYXQgYXJlIHN1Y2Nlc3NmdWxseSBleGVj dXRlZCBvbiBhIHB1Ymxpc2hlciB0byBhIHN1YnNjcmliZXIuIFRoaXMgaXMKKyAgICBlc3BlY2lh bGx5IHVzZWZ1bCBpZiB5b3UgaGF2ZSBsb3RzIHNjaGVtYSBjaGFuZ2VzIG92ZXIgdGltZSB0aGF0 IG5lZWQgcmVwbGljYXRpb24uCisgIDwvcGFyYT4KKworICA8cGFyYT4KKyAgICBGb3IgZXhhbXBs ZSwgd2hlbiBlbmFibGVkIGEgQ1JFQVRFIFRBQkxFIGNvbW1hbmQgZXhlY3V0ZWQgb24gdGhlIHB1 Ymxpc2hlciBnZXRzCisgICAgV0FMLWxvZ2dlZCwgYW5kIGZvcndhcmRlZCB0byB0aGUgc3Vic2Ny aWJlciB0byByZXBsYXk7IGEgc3Vic2VxdWVudCAiQUxURVIKKyAgICBTVUJTQ1JJUFRJT04gLi4u IFJFRlJFU0ggUFVCTElDQVRJT04iIGlzIHJ1biBvbiB0aGUgc3Vic2NyaWVyIGRhdGFiYXNlIHNv IGFueQorICAgIGZvbGxvd2luZyBETUwgY2hhbmdlcyBvbiB0aGUgbmV3IHRhYmxlIGNhbiBiZSBy ZXBsaWNhdGVkIHdpdGhvdXQgYSBoaXRjaC4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgIERE TCByZXBsaWNhdGlvbiBpcyBkaXNhYmxlZCBieSBkZWZhdWx0LCBpdCBjYW4gYmUgZW5hYmxlZCBh dCBkaWZmZXJlbnQgbGV2ZWxzCisgICAgdXNpbmcgdGhlIGRkbCBQVUJMSUNBVElPTiBvcHRpb24u IFRoaXMgb3B0aW9uIGN1cnJlbnRseSBoYXMgdHdvIGxldmVscyBhbmQgYXJlCisgICAgb25seSBh bGxvd2VkIHRvIGJlIHNldCBpZiB0aGUgUFVCTElDQVRJT04gaXMgRk9SIEFMTCBUQUJMRVMuCisg IDwvcGFyYT4KKworICA8aXRlbWl6ZWRsaXN0PgorICAgIDxsaXN0aXRlbT4KKyAgICAgIDxwYXJh PgorICAgICAgICBhbGw6IHRoaXMgb3B0aW9uIGVuYWJsZXMgcmVwbGljYXRpb24gb2YgYWxsIHN1 cHBvcnRlZCBEREwgY29tbWFuZHMuCisgICAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKwor ICAgIDxsaXN0aXRlbT4KKyAgICAgIDxwYXJhPgorICAgICAgICB0YWJsZTogdGhpcyBvcHRpb24g ZW5hYmxlcyByZXBsaWNhdGlvbiBvZiBUYWJsZSBEREwgY29tbWFuZHMsCisgICAgICAgIHdoaWNo IGluY2x1ZGU6CisgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgPGxpc3RpdGVtPgor ICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgIENSRUFURS9BTFRFUi9EUk9QIFRBQkxF CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgPC9saXN0aXRlbT4KKworICAgICAgICAg IDxsaXN0aXRlbT4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICBDUkVBVEUgVEFC TEUgQVMKKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICA8L2xpc3RpdGVtPgorCisgICAg ICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgIDwv aXRlbWl6ZWRsaXN0PgorCisgIDxzZWN0MiBpZD0iZGRsLXJlcGxpY2F0aW9uLW9wdGlvbi1leGFt cGxlcyI+CisgICAgPHRpdGxlPkV4YW1wbGVzIC0gU2V0dXAgRERMIFJlcGxpY2F0aW9uIG9uIHRo ZSBQdWJsaXNoZXI8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICBDcmVhdGUgYSBuZXcgcHVi bGljYXRpb24gd2l0aCBhbGwgZGRsIHJlcGxpY2F0aW9uIGVuYWJsZWQ6Cis8cHJvZ3JhbWxpc3Rp bmc+CitDUkVBVEUgUFVCTElDQVRJT04gbXlwdWIgRk9SIEFMTCBUQUJMRVMgd2l0aCAoZGRsID0g J2FsbCcpOworPC9wcm9ncmFtbGlzdGluZz48L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgIEVu YWJsZSB0YWJsZSBkZGwgcmVwbGljYXRpb24gZm9yIGFuIGV4aXN0aW5nIFB1YmxpY2F0aW9uOgor PHByb2dyYW1saXN0aW5nPgorQUxURVIgUFVCTElDQVRJT04gbXlwdWIgU0VUIChkZGwgPSAndGFi bGUnKTsKKzwvcHJvZ3JhbWxpc3Rpbmc+PC9wYXJhPgorCisgIDwvc2VjdDI+CisKKyAgPHNlY3Qy IGlkPSJkZGwtcmVwbGljYXRpb24tc3VwcG9ydGVkLWNvbW1hbmRzIj4KKyAgICA8dGl0bGU+U3Vw cG9ydGVkIERETCBjb21tYW5kczwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgIFRoZSBEREwg Y29tbWFuZHMgc3VwcG9ydGVkIGZvciBsb2dpY2FsIHJlcGxpY2F0aW9uIGFyZSBsaXN0ZWQgaW4g dGhlIGZvbGxvd2luZworICAgICAgbWF0cml4LiBOb3RlIHRoYXQgZ2xvYmFsIGNvbW1hbmRzIGNh biBiZSBleGVjdXRlZCBhdCBhbnkgZGF0YWJhc2UgYW5kIGFyZSBjdXJyZW50bHkKKyAgICAgIG5v dCBzdXBwb3J0ZWQgZm9yIHJlcGxpY2F0aW9uLCBnbG9iYWwgY29tbWFuZHMgaW5jbHVkZSBST0xF IHN0YXRlbWVudHMsIERhdGFiYXNlCisgICAgICBzdGF0ZW1lbnRzLCBUYWJsZVNwYWNlIHN0YXRl bWVudHMgYW5kIHNvbWUgb2YgdGhlIEdyYW50U3RtdC9SZXZva2VTdG10IGlmIHRoZSB0YXJnZXQK KyAgICAgIG9iamVjdCBpcyBhIGdsb2JhbCBvYmplY3QuCisgICAgPC9wYXJhPgorCisgICAgPHRh YmxlIGlkPSJkZGwtcmVwbGljYXRpb24tYnktY29tbWFuZC10YWciPgorICAgICAgPHRpdGxlPkRE TCBSZXBsaWNhdGlvbiBTdXBwb3J0IGJ5IENvbW1hbmQgVGFnPC90aXRsZT4KKyAgICAgIDx0Z3Jv dXAgY29scz0iMyI+CisgICAgICAgIDxjb2xzcGVjIGNvbG5hbWU9ImNvbDEiIGNvbHdpZHRoPSIy KiIvPgorICAgICAgICA8Y29sc3BlYyBjb2xuYW1lPSJjb2wyIiBjb2x3aWR0aD0iMSoiLz4KKyAg ICAgICAgPGNvbHNwZWMgY29sbmFtZT0iY29sMyIgY29sd2lkdGg9IjEqIi8+CisgICAgICA8dGhl YWQ+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5PkNvbW1hbmQgVGFnPC9lbnRyeT4KKyAg ICAgICAgPGVudHJ5PkZvciBSZXBsaWNhdGlvbjwvZW50cnk+CisgICAgICAgIDxlbnRyeT5Ob3Rl czwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICA8L3RoZWFkPgorICAgICAgPHRib2R5Pgor ICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+QUxURVIg QUdHUkVHQVRFPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVy Ij48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVm dCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkg YWxpZ249ImxlZnQiPjxsaXRlcmFsPkFMVEVSIENBU1Q8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAg ICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAg ICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAg IDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+QUxURVIgQ09MTEFU SU9OPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0 ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9l bnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249 ImxlZnQiPjxsaXRlcmFsPkFMVEVSIENPTlZFUlNJT048L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAg ICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAg ICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAg IDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+QUxURVIgREFUQUJB U0U8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRl cmFsPi08L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2Vu dHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0i bGVmdCI+PGxpdGVyYWw+QUxURVIgREVGQVVMVCBQUklWSUxFR0VTPC9saXRlcmFsPjwvZW50cnk+ CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50 cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4K KyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkFMVEVS IERPTUFJTjwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+ PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQi PjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFs aWduPSJsZWZ0Ij48bGl0ZXJhbD5BTFRFUiBFVkVOVCBUUklHR0VSPC9saXRlcmFsPjwvZW50cnk+ CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD4tPC9saXRlcmFsPjwvZW50 cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4K KyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkFMVEVS IEVYVEVOU0lPTjwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRl ciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249Imxl ZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5 IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5BTFRFUiBGT1JFSUdOIERBVEEgV1JBUFBFUjwvbGl0ZXJh bD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0 ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAg ICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0 ZXJhbD5BTFRFUiBGT1JFSUdOIFRBQkxFPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRy eSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxl bnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93Pgor ICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkFMVEVSIEZVTkNUSU9OPC9saXRl cmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9s aXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAg ICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxs aXRlcmFsPkFMVEVSIElOREVYPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGln bj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBh bGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAg ICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkFMVEVSIExBTkdVQUdFPC9saXRlcmFsPjwv ZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFs PjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8 L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFs PkFMVEVSIExBUkdFIE9CSkVDVDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxp Z249ImNlbnRlciI+PGxpdGVyYWw+LTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkg YWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAg ICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5BTFRFUiBNQVRFUklBTElaRUQgVklFVzwv bGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+ WDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+ CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0 Ij48bGl0ZXJhbD5BTFRFUiBPUEVSQVRPUjwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50 cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8 ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4K KyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5BTFRFUiBPUEVSQVRPUiBDTEFT UzwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVy YWw+WDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50 cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJs ZWZ0Ij48bGl0ZXJhbD5BTFRFUiBPUEVSQVRPUiBGQU1JTFk8L2xpdGVyYWw+PC9lbnRyeT4KKyAg ICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4K KyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAg ICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+QUxURVIgUE9M SUNZPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0 ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9l bnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249 ImxlZnQiPjxsaXRlcmFsPkFMVEVSIFBST0NFRFVSRTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAg ICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5PgorICAg ICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAg PHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5BTFRFUiBQVUJMSUNB VElPTjwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxp dGVyYWw+LTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwv ZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWdu PSJsZWZ0Ij48bGl0ZXJhbD5BTFRFUiBST0xFPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxl bnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD4tPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAg IDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93 PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkFMVEVSIFJPVVRJTkU8L2xp dGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8 L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5Pgor ICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+ PGxpdGVyYWw+QUxURVIgUlVMRVI8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFs aWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5 IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAg ICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+QUxURVIgU0NIRU1BPC9saXRlcmFsPjwv ZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFs PjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8 L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFs PkFMVEVSIFNFUVVFTkNFPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0i Y2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGln bj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8 ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkFMVEVSIFNFUlZFUjwvbGl0ZXJhbD48L2VudHJ5 PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2Vu dHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+ CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5BTFRF UiBTVEFUSVNUSUNTPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2Vu dGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0i bGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50 cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkFMVEVSIFNVQlNDUklQVElPTjwvbGl0ZXJhbD48L2Vu dHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+LTwvbGl0ZXJhbD48 L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9y b3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5B TFRFUiBTWVNURU08L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50 ZXIiPjxsaXRlcmFsPi08L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJs ZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRy eSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+QUxURVIgVEFCTEU8L2xpdGVyYWw+PC9lbnRyeT4KKyAg ICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4K KyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAg ICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+QUxURVIgVEFC TEVTUEFDRTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+ PGxpdGVyYWw+LTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQi PjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFs aWduPSJsZWZ0Ij48bGl0ZXJhbD5BTFRFUiBURVhUIFNFQVJDSCBDT05GSUdVUkFUSU9OPC9saXRl cmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9s aXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAg ICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxs aXRlcmFsPkFMVEVSIFRFWFQgU0VBUkNIIERJQ1RJT05BUlk8L2xpdGVyYWw+PC9lbnRyeT4KKyAg ICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4K KyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAg ICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+QUxURVIgVEVY VCBTRUFSQ0ggUEFSU0VSPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0i Y2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGln bj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8 ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkFMVEVSIFRFWFQgU0VBUkNIIFRFTVBMQVRFPC9s aXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5Y PC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4K KyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQi PjxsaXRlcmFsPkFMVEVSIFRSQU5TRk9STTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50 cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+LTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8 ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4K KyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5BTFRFUiBUUklHR0VSPC9saXRl cmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9s aXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAg ICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxs aXRlcmFsPkFMVEVSIFRZUEU8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWdu PSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFs aWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAg IDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+QUxURVIgVVNFUiBNQVBQSU5HPC9saXRlcmFs PjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRl cmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAg ICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRl cmFsPkFMVEVSIFZJRVc8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJj ZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWdu PSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxl bnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+QU5BTFlaRTwvbGl0ZXJhbD48L2VudHJ5PgorICAg ICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+LTwvbGl0ZXJhbD48L2VudHJ5Pgor ICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAg ICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5CRUdJTjwvbGl0 ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+LTwv bGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+Cisg ICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48 bGl0ZXJhbD5DQUxMPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2Vu dGVyIj48bGl0ZXJhbD4tPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0i bGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50 cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkNIRUNLUE9JTlQ8L2xpdGVyYWw+PC9lbnRyeT4KKyAg ICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPi08L2xpdGVyYWw+PC9lbnRyeT4K KyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAg ICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+Q0xPU0U8L2xp dGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPi08 L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5Pgor ICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+ PGxpdGVyYWw+Q0xPU0UgQ1VSU09SPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBh bGlnbj0iY2VudGVyIj48bGl0ZXJhbD4tPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRy eSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAg ICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkNMT1NFIENVUlNPUiBBTEw8L2xpdGVy YWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPi08L2xp dGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAg ICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxp dGVyYWw+Q0xVU1RFUjwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNl bnRlciI+PGxpdGVyYWw+LTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249 ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVu dHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5DT01NRU5UPC9saXRlcmFsPjwvZW50cnk+CisgICAg ICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+Cisg ICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAg ICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkNPTU1JVDwvbGl0 ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+LTwv bGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+Cisg ICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48 bGl0ZXJhbD5DT01NSVQgUFJFUEFSRUQ8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5 IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPi08L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVu dHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+Cisg ICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+Q09QWTwvbGl0ZXJhbD48L2VudHJ5 PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+LTwvbGl0ZXJhbD48L2Vu dHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+ CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5DT1BZ IEZST008L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxs aXRlcmFsPi08L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48 L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGln bj0ibGVmdCI+PGxpdGVyYWw+Q1JFQVRFIEFDQ0VTUyBNRVRIT0Q8L2xpdGVyYWw+PC9lbnRyeT4K KyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRy eT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93Pgor ICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+Q1JFQVRF IEFHR1JFR0FURTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRl ciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249Imxl ZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5 IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5DUkVBVEUgQ0FTVDwvbGl0ZXJhbD48L2VudHJ5PgorICAg ICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5Pgor ICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAg ICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5DUkVBVEUgQ09M TEFUSU9OPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48 bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+ PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxp Z249ImxlZnQiPjxsaXRlcmFsPkNSRUFURSBDT05TVFJBSU5UPC9saXRlcmFsPjwvZW50cnk+Cisg ICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+ CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAg ICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkNSRUFURSBD T05WRVJTSU9OPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVy Ij48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVm dCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkg YWxpZ249ImxlZnQiPjxsaXRlcmFsPkNSRUFURSBEQVRBQkFTRTwvbGl0ZXJhbD48L2VudHJ5Pgor ICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+LTwvbGl0ZXJhbD48L2VudHJ5 PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+Cisg ICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5DUkVBVEUg RE9NQUlOPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48 bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+ PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxp Z249ImxlZnQiPjxsaXRlcmFsPkNSRUFURSBFVkVOVCBUUklHR0VSPC9saXRlcmFsPjwvZW50cnk+ CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD4tPC9saXRlcmFsPjwvZW50 cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4K KyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkNSRUFU RSBFWFRFTlNJT048L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50 ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJs ZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRy eSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+Q1JFQVRFIEZPUkVJR04gREFUQSBXUkFQUEVSPC9saXRl cmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9s aXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAg ICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxs aXRlcmFsPkNSRUFURSBGT1JFSUdOIFRBQkxFPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxl bnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAg IDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93 PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkNSRUFURSBGVU5DVElPTjwv bGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+ WDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+ CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0 Ij48bGl0ZXJhbD5DUkVBVEUgSU5ERVg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5 IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVu dHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+Cisg ICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+Q1JFQVRFIExBTkdVQUdFPC9saXRl cmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9s aXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAg ICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxs aXRlcmFsPkNSRUFURSBNQVRFUklBTElaRUQgVklFVzwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAg ICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5PgorICAg ICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAg PHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5DUkVBVEUgT1BFUkFU T1I8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRl cmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2Vu dHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0i bGVmdCI+PGxpdGVyYWw+Q1JFQVRFIE9QRVJBVE9SIENMQVNTPC9saXRlcmFsPjwvZW50cnk+Cisg ICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+ CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAg ICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkNSRUFURSBP UEVSQVRPUiBGQU1JTFk8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJj ZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWdu PSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxl bnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+Q1JFQVRFIFBPTElDWTwvbGl0ZXJhbD48L2VudHJ5 PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2Vu dHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+ CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5DUkVB VEUgUFJPQ0VEVVJFPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2Vu dGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0i bGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50 cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkNSRUFURSBQVUJMSUNBVElPTjwvbGl0ZXJhbD48L2Vu dHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+LTwvbGl0ZXJhbD48 L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9y b3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5D UkVBVEUgUk9MRTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRl ciI+PGxpdGVyYWw+LTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249Imxl ZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5 IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5DUkVBVEUgUlVMRTwvbGl0ZXJhbD48L2VudHJ5PgorICAg ICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5Pgor ICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAg ICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5DUkVBVEUgU0NI RU1BPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0 ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9l bnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249 ImxlZnQiPjxsaXRlcmFsPkNSRUFURSBTRVFVRU5DRTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAg ICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5PgorICAg ICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAg PHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5DUkVBVEUgU0VSVkVS PC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJh bD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRy eT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249Imxl ZnQiPjxsaXRlcmFsPkNSRUFURSBTVEFUSVNUSUNTPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAg IDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAg ICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8 cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkNSRUFURSBTVUJTQ1JJ UFRJT048L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxs aXRlcmFsPi08L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48 L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGln bj0ibGVmdCI+PGxpdGVyYWw+Q1JFQVRFIFRBQkxFPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAg IDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAg ICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8 cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkNSRUFURSBUQUJMRSBB UzwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVy YWw+WDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50 cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJs ZWZ0Ij48bGl0ZXJhbD5DUkVBVEUgVEFCTEVTUEFDRTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAg ICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+LTwvbGl0ZXJhbD48L2VudHJ5PgorICAg ICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAg PHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5DUkVBVEUgVEVYVCBT RUFSQ0ggQ09ORklHVVJBVElPTjwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxp Z249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkg YWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAg ICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5DUkVBVEUgVEVYVCBTRUFSQ0ggRElDVElP TkFSWTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxp dGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwv ZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWdu PSJsZWZ0Ij48bGl0ZXJhbD5DUkVBVEUgVEVYVCBTRUFSQ0ggUEFSU0VSPC9saXRlcmFsPjwvZW50 cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwv ZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jv dz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkNS RUFURSBURVhUIFNFQVJDSCBURU1QTEFURTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50 cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8 ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4K KyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5DUkVBVEUgVFJBTlNGT1JNPC9s aXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5Y PC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4K KyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQi PjxsaXRlcmFsPkNSRUFURSBUUklHR0VSPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRy eSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxl bnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93Pgor ICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkNSRUFURSBUWVBFPC9saXRlcmFs PjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRl cmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAg ICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRl cmFsPkNSRUFURSBVU0VSIE1BUFBJTkc8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5 IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVu dHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+Cisg ICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+Q1JFQVRFIFZJRVc8L2xpdGVyYWw+ PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVy YWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAg IDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVy YWw+REVBTExPQ0FURTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNl bnRlciI+PGxpdGVyYWw+LTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249 ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVu dHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5ERUFMTE9DQVRFIEFMTDwvbGl0ZXJhbD48L2VudHJ5 PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+LTwvbGl0ZXJhbD48L2Vu dHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+ CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5ERUNM QVJFIENVUlNPUjwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRl ciI+PGxpdGVyYWw+LTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249Imxl ZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5 IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5ERUxFVEU8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAg PGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPi08L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAg ICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxy b3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+RElTQ0FSRDwvbGl0ZXJh bD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+LTwvbGl0 ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAg ICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0 ZXJhbD5ESVNDQVJEIEFMTDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249 ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxp Z249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAg PGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5ESVNDQVJEIFBMQU5TPC9saXRlcmFsPjwvZW50 cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD4tPC9saXRlcmFsPjwv ZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jv dz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkRJ U0NBUkQgU0VRVUVOQ0VTPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0i Y2VudGVyIj48bGl0ZXJhbD4tPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGln bj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8 ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkRJU0NBUkQgVEVNUDwvbGl0ZXJhbD48L2VudHJ5 PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+LTwvbGl0ZXJhbD48L2Vu dHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+ CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5ETzwv bGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+ LTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+ CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0 Ij48bGl0ZXJhbD5EUk9QIEFDQ0VTUyBNRVRIT0Q8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAg PGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAg ICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxy b3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+RFJPUCBBR0dSRUdBVEU8 L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFs Plg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5 PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVm dCI+PGxpdGVyYWw+RFJPUCBDQVNUPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBh bGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRy eSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAg ICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkRST1AgQ09MTEFUSU9OPC9saXRlcmFs PjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRl cmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAg ICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRl cmFsPkRST1AgQ09OU1RSQUlOVDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxp Z249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkg YWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAg ICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5EUk9QIENPTlZFUlNJT048L2xpdGVyYWw+ PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVy YWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAg IDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVy YWw+RFJPUCBEQVRBQkFTRTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249 ImNlbnRlciI+PGxpdGVyYWw+LTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxp Z249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAg PGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5EUk9QIERPTUFJTjwvbGl0ZXJhbD48L2VudHJ5 PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2Vu dHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+ CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5EUk9Q IEVWRU5UIFRSSUdHRVI8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJj ZW50ZXIiPjxsaXRlcmFsPi08L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWdu PSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxl bnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+RFJPUCBFWFRFTlNJT048L2xpdGVyYWw+PC9lbnRy eT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9l bnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93 PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+RFJP UCBGT1JFSUdOIERBVEEgV1JBUFBFUjwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkg YWxpZ249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50 cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAg ICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5EUk9QIEZPUkVJR04gVEFCTEU8L2xp dGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8 L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5Pgor ICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+ PGxpdGVyYWw+RFJPUCBGVU5DVElPTjwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkg YWxpZ249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50 cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAg ICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5EUk9QIElOREVYPC9saXRlcmFsPjwv ZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFs PjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8 L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFs PkRST1AgTEFOR1VBR0U8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJj ZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWdu PSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxl bnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+RFJPUCBNQVRFUklBTElaRUQgVklFVzwvbGl0ZXJh bD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0 ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAg ICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0 ZXJhbD5EUk9QIE9QRVJBVE9SPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGln bj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBh bGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAg ICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkRST1AgT1BFUkFUT1IgQ0xBU1M8L2xpdGVy YWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xp dGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAg ICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxp dGVyYWw+RFJPUCBPUEVSQVRPUiBGQU1JTFk8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVu dHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAg PGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+ CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+RFJPUCBPV05FRDwvbGl0ZXJh bD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+LTwvbGl0 ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAg ICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0 ZXJhbD5EUk9QIFBPTElDWTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249 ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxp Z249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAg PGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5EUk9QIFBST0NFRFVSRTwvbGl0ZXJhbD48L2Vu dHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48 L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9y b3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5E Uk9QIFBVQkxJQ0FUSU9OPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0i Y2VudGVyIj48bGl0ZXJhbD4tPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGln bj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8 ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkRST1AgUk9MRTwvbGl0ZXJhbD48L2VudHJ5Pgor ICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+LTwvbGl0ZXJhbD48L2VudHJ5 PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+Cisg ICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5EUk9QIFJP VVRJTkU8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxs aXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48 L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGln bj0ibGVmdCI+PGxpdGVyYWw+RFJPUCBSVUxFPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxl bnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAg IDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93 PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkRST1AgU0NIRU1BPC9saXRl cmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9s aXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAg ICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxs aXRlcmFsPkRST1AgU0VRVUVOQ0U8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFs aWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5 IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAg ICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+RFJPUCBTRVJWRVI8L2xpdGVyYWw+PC9l bnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+ PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwv cm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+ RFJPUCBTVEFUSVNUSUNTPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0i Y2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGln bj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8 ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkRST1AgU1VCU0NSSVBUSU9OPC9saXRlcmFsPjwv ZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD4tPC9saXRlcmFs PjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8 L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFs PkRST1AgVEFCTEU8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50 ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJs ZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRy eSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+RFJPUCBUQUJMRVNQQUNFPC9saXRlcmFsPjwvZW50cnk+ CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD4tPC9saXRlcmFsPjwvZW50 cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4K KyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkRST1Ag VEVYVCBTRUFSQ0ggQ09ORklHVVJBVElPTjwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50 cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8 ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4K KyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5EUk9QIFRFWFQgU0VBUkNIIERJ Q1RJT05BUlk8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIi PjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0 Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBh bGlnbj0ibGVmdCI+PGxpdGVyYWw+RFJPUCBURVhUIFNFQVJDSCBQQVJTRVI8L2xpdGVyYWw+PC9l bnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+ PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwv cm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+ RFJPUCBURVhUIFNFQVJDSCBURU1QTEFURTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50 cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8 ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4K KyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5EUk9QIFRSQU5TRk9STTwvbGl0 ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+WDwv bGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+Cisg ICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48 bGl0ZXJhbD5EUk9QIFRSSUdHRVI8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFs aWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5 IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAg ICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+RFJPUCBUWVBFPC9saXRlcmFsPjwvZW50 cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwv ZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jv dz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkRS T1AgVVNFUiBNQVBQSU5HPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0i Y2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGln bj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8 ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkRST1AgVklFVzwvbGl0ZXJhbD48L2VudHJ5Pgor ICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5 PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+Cisg ICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5FWEVDVVRF PC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJh bD4tPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRy eT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249Imxl ZnQiPjxsaXRlcmFsPkVYUExBSU48L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFs aWduPSJjZW50ZXIiPjxsaXRlcmFsPi08L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5 IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAg ICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+RkVUQ0g8L2xpdGVyYWw+PC9lbnRyeT4K KyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPi08L2xpdGVyYWw+PC9lbnRy eT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93Pgor ICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+R1JBTlQ8 L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFs Plg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5 PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVm dCI+PGxpdGVyYWw+R1JBTlQgUk9MRTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkg YWxpZ249ImNlbnRlciI+PGxpdGVyYWw+LTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50 cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAg ICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5JTVBPUlQgRk9SRUlHTiBTQ0hFTUE8 L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFs Plg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5 PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVm dCI+PGxpdGVyYWw+SU5TRVJUPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGln bj0iY2VudGVyIj48bGl0ZXJhbD4tPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBh bGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAg ICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkxJU1RFTjwvbGl0ZXJhbD48L2VudHJ5Pgor ICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+LTwvbGl0ZXJhbD48L2VudHJ5 PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+Cisg ICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5MT0FEPC9s aXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD4t PC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4K KyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQi PjxsaXRlcmFsPkxPQ0sgVEFCTEU8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFs aWduPSJjZW50ZXIiPjxsaXRlcmFsPi08L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5 IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAg ICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+TUVSR0U8L2xpdGVyYWw+PC9lbnRyeT4K KyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPi08L2xpdGVyYWw+PC9lbnRy eT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93Pgor ICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+TU9WRTwv bGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+ LTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+ CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0 Ij48bGl0ZXJhbD5OT1RJRlk8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWdu PSJjZW50ZXIiPjxsaXRlcmFsPi08L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFs aWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAg IDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+UFJFUEFSRTwvbGl0ZXJhbD48L2VudHJ5Pgor ICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+LTwvbGl0ZXJhbD48L2VudHJ5 PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+Cisg ICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5QUkVQQVJF IFRSQU5TQUNUSU9OPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2Vu dGVyIj48bGl0ZXJhbD4tPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0i bGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50 cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPlJFQVNTSUdOIE9XTkVEPC9saXRlcmFsPjwvZW50cnk+ CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD4tPC9saXRlcmFsPjwvZW50 cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4K KyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPlJFRlJF U0ggTUFURVJJQUxJWkVEIFZJRVc8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFs aWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5 IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAg ICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+UkVJTkRFWDwvbGl0ZXJhbD48L2VudHJ5 PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+LTwvbGl0ZXJhbD48L2Vu dHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+ CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5SRUxF QVNFPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0 ZXJhbD4tPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9l bnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249 ImxlZnQiPjxsaXRlcmFsPlJFU0VUPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBh bGlnbj0iY2VudGVyIj48bGl0ZXJhbD4tPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRy eSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAg ICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPlJFVk9LRTwvbGl0ZXJhbD48L2VudHJ5 PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2Vu dHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+ CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5SRVZP S0UgUk9MRTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+ PGxpdGVyYWw+LTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQi PjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFs aWduPSJsZWZ0Ij48bGl0ZXJhbD5ST0xMQkFDSzwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8 ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+LTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAg ICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJv dz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5ST0xMQkFDSyBQUkVQQVJF RDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVy YWw+LTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50 cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJs ZWZ0Ij48bGl0ZXJhbD5TQVZFUE9JTlQ8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5 IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPi08L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVu dHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+Cisg ICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+U0VDVVJJVFkgTEFCRUw8L2xpdGVy YWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xp dGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAg ICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxp dGVyYWw+U0VUPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVy Ij48bGl0ZXJhbD4tPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVm dCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkg YWxpZ249ImxlZnQiPjxsaXRlcmFsPlNFVCBDT05TVFJBSU5UUzwvbGl0ZXJhbD48L2VudHJ5Pgor ICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+LTwvbGl0ZXJhbD48L2VudHJ5 PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+Cisg ICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5TSE9XPC9s aXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD4t PC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4K KyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQi PjxsaXRlcmFsPlNUQVJUIFRSQU5TQUNUSU9OPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxl bnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD4tPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAg IDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93 PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPlVOTElTVEVOPC9saXRlcmFs PjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD4tPC9saXRl cmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAg ICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRl cmFsPlVQREFURTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRl ciI+PGxpdGVyYWw+LTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249Imxl ZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5 IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5WQUNVVU08L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAg PGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPi08L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAg ICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgIDwvdGJv ZHk+CisgICAgPC90Z3JvdXA+CisgICAgPC90YWJsZT4KKyAgPC9zZWN0Mj4KKworICA8c2VjdDIg aWQ9ImRkbC1yZXBsaWNhdGlvbi1kZGwtZGVwYXJzZXIiPgorICAgIDx0aXRsZT5EREwgRGVwYXJz ZXI8L3RpdGxlPgorICAgIDxwYXJhPgorICAgICAgVGhlIERETCBkZXBhcnNlciB1dGlsaXR5IGlz IGludm9rZWQgZHVyaW5nIHRoZSByZXBsaWNhdGlvbiBvZiBERExzLiBUaGUgRERMCisgICAgICBk ZXBhcnNlciBpcyBjYXBhYmxlIG9mIGNvbnZlcnRpbmcgYSBEREwgY29tbWFuZCBpbnRvIGZvcm1h dHRlZCBKU09OIGJsb2IsIHdpdGgKKyAgICAgIHRoZSBuZWNlc3NhcnkgaW5mb3JtYXRpb24gdG8g cmVjb25zdHJ1Y3QgdGhlIERETCBjb21tYW5kcyBhdCB0aGUgZGVzdGluYXRpb24uIFRoZQorICAg ICAgYmVuZWZpdCBvZiB1c2luZyB0aGUgZGVwYXJzZXIgb3V0cHV0IGNvbXBhcmVkIHRvIHRoZSBv cmlnaW5hbCBjb21tYW5kIHN0cmluZworICAgICAgaW5jbHVkZXM6CisgICAgICA8aXRlbWl6ZWRs aXN0PgorICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBF dmVyeSBkYXRhYmFzZSBvYmplY3QgaW4gdGhlIGRlcGFyc2VkIG91dHB1dCBpcyBzY2hlbWEtcXVh bGlmaWVkLCBzbyB0aGF0CisgICAgICAgICAgICB0aGVyZSBhcmUgbm8gYW1iaWd1aXRpZXMgZXZl biBpbiB0aGUgZmFjZSBvZiBzZWFyY2hfcGF0aCBjaGFuZ2VzLgorICAgICAgICAgIDwvcGFyYT4K KyAgICAgICAgPC9saXN0aXRlbT4KKworICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgPHBh cmE+CisgICAgICAgICAgICBUaGUgc3RydWN0dXJlZCBKU09OIGFuZCB0aGUgZm9ybWF0dGVkIG91 dHB1dCBtYWtlcyBpdCBwb3NzaWJsZSBmb3IKKyAgICAgICAgICAgIG1hY2hpbmUgZWRpdGluZy4g VGhpcyBjYW4gYmUgdXNlZnVsIGlmIHRoZSBzdWJzY3JpYmVyIGlzIG9uIGEgZGlmZmVyZW50Cisg ICAgICAgICAgICBQRyB2ZXJzaW9uIGFuZCBoYXMgY2VydGFpbiBEREwgc3ludGF4IGRpZmZlcmVu Y2VzIHdoaWNoIG5lZWQgdG8gYmUKKyAgICAgICAgICAgIHJlc29sdmVkIGJlZm9yZSBhcHBseS4K KyAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvbGlzdGl0ZW0+CisKKyAgICAgIDwvaXRlbWl6 ZWRsaXN0PgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgVGhlIERETCBkZXBhcnNl ciBleHBvc2VzIHR3byBTUUwgZnVuY3Rpb25zOgorICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAg ICAgPGxpc3RpdGVtPgorICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgZGRsX2RlcGFyc2Vf dG9fanNvbjogZ2l2ZW4gYSBDb2xsZWN0ZWRDb21tYW5kIGZyb20gZXZlbnQgdHJpZ2dlciwKKyAg ICAgICAgICAgIHJldHVybnMgYSBKU09OIHJlcHJlc2VudGF0aW9uIG9mIGl0LiBUaGUgY29tbWFu ZCBpcyBleHBhbmRlZCBmdWxseQorICAgICAgICAgICAgc28gdGhhdCB0aGVyZSBhcmUgbm8gYW1i aWd1aXRpZXMgZXZlbiBpbiB0aGUgZmFjZSBvZiBzZWFyY2hfcGF0aAorICAgICAgICAgICAgY2hh bmdlcy4KKyAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICA8L2l0 ZW1pemVkbGlzdD4KKworICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgPGxpc3RpdGVtPgor ICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgZGRsX2RlcGFyc2VfZXhwYW5kX2NvbW1hbmQ6 IEV4cGFuZCBKU09OIGZvcm1hdCBEREwgZ2VuZXJhdGVkIGJ5CisgICAgICAgICAgICBkZGxfZGVw YXJzZV90b19qc29uIHRvIGEgcGxhaW4gRERMIGNvbW1hbmQuCisgICAgICAgICAgPC9wYXJhPgor ICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgPC9wYXJhPgor ICA8L3NlY3QyPgorCisgPC9zZWN0MT4KKwogIDxzZWN0MSBpZD0ibG9naWNhbC1yZXBsaWNhdGlv bi1jb25mbGljdHMiPgogICA8dGl0bGU+Q29uZmxpY3RzPC90aXRsZT4KIAotLSAKMS44LjMuMQoK --000000000000d6784f05f261a2df--