Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1tY9iu-004ldn-QU for pgsql-hackers@arkaria.postgresql.org; Wed, 15 Jan 2025 20:10:45 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1tY9it-00Gq7c-GG for pgsql-hackers@arkaria.postgresql.org; Wed, 15 Jan 2025 20:10:43 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1tY9is-00Gq7S-JQ for pgsql-hackers@lists.postgresql.org; Wed, 15 Jan 2025 20:10:43 +0000 Received: from mail-wm1-x332.google.com ([2a00:1450:4864:20::332]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1tY9ir-000aZu-08 for pgsql-hackers@postgresql.org; Wed, 15 Jan 2025 20:10:42 +0000 Received: by mail-wm1-x332.google.com with SMTP id 5b1f17b1804b1-436202dd730so602885e9.2 for ; Wed, 15 Jan 2025 12:10:40 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1736971839; x=1737576639; darn=postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=ZwC4oaxevpbZlJy0kevrjtNGmXTsYjPzV26faThk3k8=; b=Kr0+/BiGqbZvT9U5mRX44OWVTxXEVhoMuYtLaQIm2tJKVAg75oDTIocWELWBV/j7l+ gZI6kaWGmAMb8thsx9Bl3f4IW+LTrQAcbhRFqjjHhC/9IfxP2rLprgAleF3//IF0woQS z0Qkn9ktvbCm1JKIi/AK1gDhldT721J9VP1iLRJt0hp5kxsgdHbaaDw50+7hE7iHiItX ndvOYhy1Y4jVNG2NFawD7Ayi4vaZRgPsh2aJqmyJEayHlRMGBdW6UeNYqiUGKQM9fN0j mh2HKwsyjkaJYygMjbP/aVTdQOI0Fyf19n13340hMZ6cnTTcym1PpuX9mUYcDr2QLBQN OI0Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1736971839; x=1737576639; 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=ZwC4oaxevpbZlJy0kevrjtNGmXTsYjPzV26faThk3k8=; b=TDn2BgwpYinVfUfawkEz7g4ACQTv3BO3kc/TbF7LYdxdvHOdzi0iiClrlmqUgIc6zm /cE//P4ci9uC9O86YB8GNjh0EGHiLtuo51msuCeOYfc+Z+FeQomdWLTLmu5k+8aIG5yM PAxs320Y2Fio3CxIBNmr/ODA9764QgfY2f17RrNS2JQkEZsTADSeoBqcsyg/XliOY/bl xoXTbNyx61nvb5Un/9fejgKlk0ZmULIn2a1x/8R4gggbOPJ4fhdIwYyxjS2wG2YnWRib ZKxktGiszvBFE9F7NE1/Vv/+kFtjmMhScoLZDnO1kvjKhPbNH9XiJI418WeIC18qpept ivmg== X-Forwarded-Encrypted: i=1; AJvYcCVgRM8GDjsQvEY5+Vu76x/IpK8Gqg2F+8SCUD2ImLnmo352x22a5RYq3StS9inXhO1C9p+dEXMb9cIql/ZM@postgresql.org X-Gm-Message-State: AOJu0YwChuEn8Qa2sI5KIU6fUFAuM93UkyKlChUYhaMrn1aWH8u+L/LN kCY1UhZE8K9VezswFzaVD2VMeHGPF66PNWVmPa1ASi90ngFsv14sk5NzxvpL6p3XahHpW/dqNPF XuvQUh5n7Iri4Le7xGlda9xZ0VB8= X-Gm-Gg: ASbGncv35iBT5iRLALlv/n2xCcHagf0qqiW/hk4O/b6CK5ELZ8Zm3AK8sGLIyV0eNfZ y1Q5QlB9wVq23Nit9fkxErtrOr94Rd5bqFdofYB4= X-Google-Smtp-Source: AGHT+IHytAHTFHvoa2TtHVCU+HkpN9G0IcuK2boTEgYqdibN/Ddgh7fZiWf8i0PYD1akGIvTTUDyayd1rPJcnElsxi8= X-Received: by 2002:a05:600c:1552:b0:434:fb65:ebbb with SMTP id 5b1f17b1804b1-436e26be5a3mr300863045e9.17.1736971838923; Wed, 15 Jan 2025 12:10:38 -0800 (PST) MIME-Version: 1.0 References: <202501110844.5ztsym4vbflm@alvherre.pgsql> In-Reply-To: From: Mahendra Singh Thalor Date: Thu, 16 Jan 2025 01:40:27 +0530 X-Gm-Features: AbW1kvZZNGsq1t74LV2bwOSGB4rXXJrqohtQzO2raX2tSV3b3VB7O4FvUSFLaYQ Message-ID: Subject: Re: Non-text mode for pg_dumpall To: jian he Cc: Alvaro Herrera , Guillaume Lelarge , Nathan Bossart , Magnus Hagander , Tom Lane , Andrew Dunstan , PostgreSQL-development , Dilip Kumar Content-Type: multipart/mixed; boundary="00000000000071cb0d062bc44503" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000071cb0d062bc44503 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Thanks Jian for the review and testing. On Wed, 15 Jan 2025 at 14:29, jian he wrote: > > On Sun, Jan 12, 2025 at 5:31=E2=80=AFAM Mahendra Singh Thalor > wrote: > > > > > > > > you also need change > > > > > > > > > > > > > > > > > > Send output to the specified file. If this is omitted, the > > > standard output is used. > > > > > > > > > > > > ? > > > > > > since if --format=3Dd, > > > > > > can not be omitted. > > > > No, we don't need this change. With --fromat=3Dd, we can omit the --fil= e option. > > > I think this is not correct. since the following three will fail. > > $BIN6/pg_dumpall --format=3Dcustom --exclude-database=3D*template* --sche= ma-only > $BIN6/pg_dumpall --format=3Ddirectory --exclude-database=3D*template* --s= chema-only > $BIN6/pg_dumpall --format=3Dtar --exclude-database=3D*template* --schema-= only > > that means, pg_dumpall, when format is {custom|directory|tar} --file > option cannot be omitted. Thanks. I got your point. I added one note for this case in the attached pa= tch. > > you introduced a format p(plain) for pg_restore? since > $BIN6/pg_restore --dbname=3Dsrc6 --format=3Dp > will not error out. > but doc/src/sgml/ref/pg_restore.sgml didn't mention this format. Yes, I will do more doc changes and will modify some comments in code as per new options. > > > + if (archDumpFormat =3D=3D archDirectory) > + appendPQExpBufferStr(&cmd, " -F d "); > + else if (archDumpFormat =3D=3D archCustom) > + appendPQExpBufferStr(&cmd, " -F c "); > + else if (archDumpFormat =3D=3D archTar) > + appendPQExpBufferStr(&cmd, " -F t "); > can we use long format, i think that would improve the readability. > like changing from > appendPQExpBufferStr(&cmd, " -F d "); > to > appendPQExpBufferStr(&cmd, " --format=3Ddirectory"); Fixed. In the whole file, we are using shortcuts for other options also but as per your comment, I made the changes. > > ------------------------<<>>>------ > I have tested {pg_dump && pg_restore --list}. pg_restore --list works > fine with format {directory|custom|tar} > but it seems there may be some problems with {pg_dumpall && pg_restore > --list} where format is not plain. > > with your v08 patch, in my local environment. > $BIN6/pg_dumpall --format=3Dcustom --exclude-database=3D*template* > --schema-only --file=3Ddumpall_src6.custom > > $BIN6/pg_restore --dbname=3Dsrc6 --verbose --schema-only --list > $SRC6/dumpall_src6.custom > error: > pg_restore: error: option -C/--create should be specified when using > dump of pg_dumpall > > $BIN6/pg_restore --dbname=3Dsrc6 --create --verbose --schema-only --list > $SRC6/dumpall_src6.custom > following is some of the output: > > pg_restore: found dbname as : "`s3or" and db_oid:1 in map.dat file > while restoring > pg_restore: found dbname as : "`s3or" and db_oid:5 in map.dat file > while restoring > pg_restore: found total 2 database names in map.dat file > pg_restore: needs to restore 2 databases out of 2 databases > pg_restore: restoring database "`s3or" > pg_restore: error: could not open input file > "/home/jian/Desktop/pg_src/src6/postgres/dumpall_src6.custom/databases/1"= : > No such file or directory Fixed. > On Sat, 11 Jan 2025 at 14:14, Alvaro Herrera wr= ote: > > Hmm, this patch adds a function connectDatabase() to pg_restore, but a > function that's almost identical already exists in pg_dumpall. I > suggest they should be unified. Maybe create a new file for connection > management routines? (since this clearly doesn't fit common.c nor > dumputils.c). Fixed. I made a new file with common_dumpall_restore.c and have moved all common functions into the new file. Apart from this, I added handling for some special database names in the map.dat file. ex: "database name is one" Here, I am attaching an updated patch for review and testing. Thanks and Regards Mahendra Singh Thalor EnterpriseDB: http://www.enterprisedb.com --00000000000071cb0d062bc44503 Content-Type: application/octet-stream; name="v09_pg_dumpall-with-directory-tar-custom-format-16-jan.patch" Content-Disposition: attachment; filename="v09_pg_dumpall-with-directory-tar-custom-format-16-jan.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m5yc5f1n0 RnJvbSA2ZDU3MzAxZGY0NGE3ZWIwNDAyMGIyZWYzODM0OTY4MWE2NGMxMzRjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYWhlbmRyYSBTaW5naCBUaGFsb3IgPG1haGk2cnVuQGdtYWls LmNvbT4KRGF0ZTogVGh1LCAxNiBKYW4gMjAyNSAwMToyNTo1MiArMDUzMApTdWJqZWN0OiBbUEFU Q0hdIHBnX2R1bXBhbGwgd2l0aCBkaXJlY3Rvcnl8dGFyfGN1c3RvbSBmb3JtYXQgYW5kIHJlc3Rv cmUgIGl0IAogYnkgcGdfcmVzdG9yZQoKbmV3IG9wdGlvbiB0byBwZ19kdW1wYWxsOgotRiwgLS1m b3JtYXQ9ZHx0fGN8cCAgb3V0cHV0IGZpbGUgZm9ybWF0ICggcGxhaW4gdGV4dCAoZGVmYXVsdCkp CgpFeDoxIC4vcGdfZHVtcGFsbCAtLWZvcm1hdD1kaXJlY3RvcnkgLS1maWxlPWR1bXBEaXJOYW1l CkV4OjIgLi9wZ19kdW1wYWxsIC0tZm9ybWF0PXRhciAtLWZpbGU9ZHVtcERpck5hbWUKRXg6MyAu L3BnX2R1bXBhbGwgLS1mb3JtYXQ9Y3VzdG9tIC0tZmlsZT1kdW1wRGlyTmFtZQpFeDo0IC4vcGdf ZHVtcGFsbCAtLWZvcm1hdD1wbGFpbiAtLWZpbGU9ZHVtcERpck5hbWUKCmR1bXBzIGFyZSBhczoK Z2xvYmFsLmRhdCA6OjogZ2xvYmFsIHNxbCBjb21tYW5kcyBpbiBzaW1wbGUgcGxhaW4gZm9ybWF0 Cm1hcC5kYXQuICAgOjo6IGRib2lkIGRibmFtZSAtLS1lbnRyaWVzIGZvciBhbGwgZGF0YWJhc2Vz IGluIHNpbXBsZSB0ZXh0IGZvcm0KZGF0YWJhc2VzLiA6OjoKICAgICAgc3ViZGlyICAgICBkYm9p ZDEgIC0+IHRvYy5kYXQgYW5kIGRhdGEgZmlsZXMgaW4gYXJjaGl2ZSBmb3JtYXQKICAgICAgc3Vi ZGlyICAgICBkYm9pZDIuIC0+IHRvYy5kYXQgYW5kIGRhdGEgZmlsZXMgaW4gYXJjaGl2ZSBmb3Jt YXQKICAgICAgICAgICAgICBldGMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCk5PVEU6CmlmIG5lZWRlZCwg cmVzdG9yZSBzaW5nbGUgZGIgYnkgcGFydGljdWxhciBzdWJkaXIKCkV4OiAuL3BnX3Jlc3RvcmUg LS1mb3JtYXQ9ZGlyZWN0b3J5IC1kIHBvc3RncmVzIGR1bXBEaXJOYW1lL2RhdGFiYXNlcy81CiAg IC0tIGhlcmUsIDUgaXMgdGhlIGRib2lkIG9mIHBvc3RncmVzIGRiCiAgIC0tIHRvIGdldCBkYm9p ZCwgcmVmZXIgZGJuYW1lIGluIG1hcC5maWxlCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpuZXcgb3B0aW9u cyB0byBwZ19yZXN0b3JlOgotZywgLS1nbG9iYWxzLW9ubHkgICAgICAgICAgIHJlc3RvcmUgb25s eSBnbG9iYWwgb2JqZWN0cywgbm8gZGF0YWJhc2VzCi0tZXhjbHVkZS1kYXRhYmFzZT1QQVRURVJO ICAgZXhjbHVkZSBkYXRhYmFzZSB3aG9zZSBuYW1lIG1hdGNoZXMgcGF0dGVybgoKV2hlbiB3ZSBn aXZlIC1nLy0tZ2xvYmFscy1vbmx5IG9wdGlvbiwgdGhlbiBvbmx5IHJlc3RvcmUgZ2xvYmFscywg bm8gZGIgcmVzdG9yaW5nLgoKRGVzaWduOgpXaGVuIC0tZm9ybWF0PWR8dHxjIGlzIHNwZWNpZmll ZCBhbmQgdGhlcmUgaXMgbm8gdG9jLmRhdCBpbiBtYWluIGRpcmVjdG9yeSwgdGhlbiBjaGVjawpm b3IgZ2xvYmFsLmRhdCBhbmQgbWFwLmRhdCB0byByZXN0b3JlIGFsbCBkYXRhYmFzZXMuIElmIGJv dGggZmlsZXMgYXJlIGV4aXN0cyBpbiBkaXJlY3RvcnksCnRoZW4gZmlyc3QgcmVzdG9yZSBhbGwg Z2xvYmFscyBmcm9tIGdsb2JhbC5kYXQgYW5kIHRoZW4gcmVzdG9yZSBhbGwgZGF0YWJhc2VzIG9u ZSBieSBvbmUKZnJvbSBtYXAuZGF0IGxpc3QuCgpUT0RPMTogV2UgbmVlZCB0byB0aGluayBmb3Ig LS1leGNsdWRlLWRhdGFiYXNlPVBBVFRFUk4gZm9yIHBnX3Jlc3RvcmUuCgpUT0RPMjogV2UgbmVl ZCB0byBtYWtlIGNoYW5nZXMgZm9yIGV4aXRfbmljZWx5IGFzIHdlIGFyZSBvbmUgZW50cnkgZm9y IGVhY2ggZGF0YWJhc2Ugd2hpbGUKcmVzdG9yaW5nLiBNQVhfT05fRVhJVF9OSUNFTFkKClRPRE8z OiBzb21lIG1vcmUgdGVzdCBjYXNlcyBmb3IgbmV3IGFkZGVkIG9wdGlvbnMuCgpUT0RPNDogV2Ug Y2FuIGR1bXAgYW5kIHJlc3RvcmUgZGF0YWJhc2VzIGluIHBhcmFsbGVsIG1vZGUuClRoaXMgbmVl ZHMgbW9yZSBzdHVkeS4KLS0tCiBkb2Mvc3JjL3NnbWwvcmVmL3BnX2R1bXBhbGwuc2dtbCAgICAg ICAgICAgIHwgIDc3ICsrLQogZG9jL3NyYy9zZ21sL3JlZi9wZ19yZXN0b3JlLnNnbWwgICAgICAg ICAgICB8ICAyOSArCiBzcmMvYmluL3BnX2R1bXAvTWFrZWZpbGUgICAgICAgICAgICAgICAgICAg IHwgICA4ICstCiBzcmMvYmluL3BnX2R1bXAvY29tbW9uX2R1bXBhbGxfcmVzdG9yZS5jICAgIHwg MzE0ICsrKysrKysrKwogc3JjL2Jpbi9wZ19kdW1wL2NvbW1vbl9kdW1wYWxsX3Jlc3RvcmUuaCAg ICB8ICAyNiArCiBzcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwLmggICAgICAgICAgICAgICAgIHwg ICA0ICstCiBzcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmMgICAgICAgIHwgIDE1 ICstCiBzcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX3Rhci5jICAgICAgICAgICAgIHwgICAyICst CiBzcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX3V0aWxzLmMgICAgICAgICAgIHwgICAzICstCiBz cmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jICAgICAgICAgICAgICAgICAgIHwgICAyICstCiBzcmMv YmluL3BnX2R1bXAvcGdfZHVtcGFsbC5jICAgICAgICAgICAgICAgIHwgNDczICsrKysrKy0tLS0t LS0tCiBzcmMvYmluL3BnX2R1bXAvcGdfcmVzdG9yZS5jICAgICAgICAgICAgICAgIHwgNjg2ICsr KysrKysrKysrKysrKysrKystCiBzcmMvYmluL3BnX2R1bXAvdC8wMDFfYmFzaWMucGwgICAgICAg ICAgICAgIHwgICA0ICsKIHNyYy9iaW4vcGdfZHVtcC90LzAwNV9wZ19kdW1wX2ZpbHRlcmZpbGUu cGwgfCAgIDggKwogMTQgZmlsZXMgY2hhbmdlZCwgMTMyMyBpbnNlcnRpb25zKCspLCAzMjggZGVs ZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2Jpbi9wZ19kdW1wL2NvbW1vbl9kdW1w YWxsX3Jlc3RvcmUuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9iaW4vcGdfZHVtcC9jb21tb25f ZHVtcGFsbF9yZXN0b3JlLmgKIG1vZGUgY2hhbmdlIDEwMDY0NCA9PiAxMDA3NTUgc3JjL2Jpbi9w Z19kdW1wL3QvMDAxX2Jhc2ljLnBsCgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL3JlZi9wZ19k dW1wYWxsLnNnbWwgYi9kb2Mvc3JjL3NnbWwvcmVmL3BnX2R1bXBhbGwuc2dtbAppbmRleCAwMTRm Mjc5MjU4OS4uMmJlOGY3YmQ4ZWEgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9yZWYvcGdfZHVt cGFsbC5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9yZWYvcGdfZHVtcGFsbC5zZ21sCkBAIC0xMjEs NyArMTIxLDgyIEBAIFBvc3RncmVTUUwgZG9jdW1lbnRhdGlvbgogICAgICAgIDxwYXJhPgogICAg ICAgICBTZW5kIG91dHB1dCB0byB0aGUgc3BlY2lmaWVkIGZpbGUuICBJZiB0aGlzIGlzIG9taXR0 ZWQsIHRoZQogICAgICAgICBzdGFuZGFyZCBvdXRwdXQgaXMgdXNlZC4KLSAgICAgICA8L3BhcmE+ CisgICAgICAgIE5vdGU6IFRoaXMgb3B0aW9uIGNhbiBiZSBvbWl0dGVkIG9ubHkgd2hlbiAtLWZv cm1hdD1wfHBsYWluLgorICAgICAgIDwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgIDwv dmFybGlzdGVudHJ5PgorCis8dmFybGlzdGVudHJ5PgorICAgICAgPHRlcm0+PG9wdGlvbj4tRiA8 cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+Zm9ybWF0PC9yZXBsYWNlYWJsZT48L29wdGlv bj48L3Rlcm0+CisgICAgICA8dGVybT48b3B0aW9uPi0tZm9ybWF0PTxyZXBsYWNlYWJsZSBjbGFz cz0icGFyYW1ldGVyIj5mb3JtYXQ8L3JlcGxhY2VhYmxlPjwvb3B0aW9uPjwvdGVybT4KKyAgICAg IDxsaXN0aXRlbT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAgU3BlY2lmeSBmb3JtYXQgb2YgZHVt cCBmaWxlcy4gIElmIHdlIHdhbnQgdG8gZHVtcCBhbGwgdGhlIGRhdGFiYXNlcywKKyAgICAgICAg dGhlbiBwYXNzIHRoaXMgYXMgbm9uLXBsYWluIHNvIHRoYXQgZHVtcCBvZiBhbGwgZGF0YWJhc2Vz IGNhbiBiZSB0YWtlbgorICAgICAgICBpbiBzZXBhcmF0ZSBzdWJkaXJlY3RvcnkgaW4gYXJjaGl2 ZSBmb3JtYXQuCisgICAgICAgIGJ5IGRlZmF1bHQsIHRoaXMgaXMgcGxhaW4gZm9ybWF0LgorCisg ICAgICAgIElmIG5vbi1wbGFpbiBtb2RlIGlzIHBhc3NlZCwgdGhlbiBnbG9iYWwuZGF0IChnbG9i YWwgc3FsIGNvbW1hbmRzKSBhbmQKKyAgICAgICAgbWFwLmRhdChkYm9pZCBhbmQgZGJuYW1lcyBs aXN0IG9mIGFsbCB0aGUgZGF0YWJhc2VzKSBmaWxlcyB3aWxsIGJlIGNyZWF0ZWQuCisgICAgICAg IEFwYXJ0IGZyb20gdGhlc2UgZmlsZXMsIG9uZSBzdWJkaXJlY3Rvcnkgd2l0aCBkYXRhYmFzZXMg bmFtZSB3aWxsIGJlIGNyZWF0ZWQuCisgICAgICAgIFVuZGVyIHRoaXMgZGF0YWJhc2VzIHN1YmRp cmVjdG9yeSwgdGhlcmUgd2lsbCBiZSBzdWJkaXJlY3Rvcnkgd2l0aCBkYm9pZCBuYW1lCisgICAg ICAgIGZvciBlYWNoIGRhdGFiYXNlLgorCisgICAgICAgPHZhcmlhYmxlbGlzdD4KKyAgICAgICAg PHZhcmxpc3RlbnRyeT4KKyAgICAgICAgIDx0ZXJtPjxsaXRlcmFsPmQ8L2xpdGVyYWw+PC90ZXJt PgorICAgICAgICAgPHRlcm0+PGxpdGVyYWw+ZGlyZWN0b3J5PC9saXRlcmFsPjwvdGVybT4KKyAg ICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgT3V0cHV0IGEg ZGlyZWN0b3J5LWZvcm1hdCBhcmNoaXZlIHN1aXRhYmxlIGZvciBpbnB1dCBpbnRvIHBnX3Jlc3Rv cmUuIFVuZGVyIGRib2lkCisgICAgICAgICAgIHN1YmRpcmVjdG9yeSwgdGhpcyB3aWxsIGNyZWF0 ZSBhIGRpcmVjdG9yeSB3aXRoIG9uZSBmaWxlIGZvciBlYWNoIHRhYmxlIGFuZCBsYXJnZQorICAg ICAgICAgICBvYmplY3QgYmVpbmcgZHVtcGVkLCBwbHVzIGEgc28tY2FsbGVkIFRhYmxlIG9mIENv bnRlbnRzIGZpbGUgZGVzY3JpYmluZyB0aGUgZHVtcGVkCisgICAgICAgICAgIG9iamVjdHMgaW4g YSBtYWNoaW5lLXJlYWRhYmxlIGZvcm1hdCB0aGF0IHBnX3Jlc3RvcmUgY2FuIHJlYWQuIEEgZGly ZWN0b3J5IGZvcm1hdAorICAgICAgICAgICBhcmNoaXZlIGNhbiBiZSBtYW5pcHVsYXRlZCB3aXRo IHN0YW5kYXJkIFVuaXggdG9vbHM7IGZvciBleGFtcGxlLCBmaWxlcyBpbiBhbgorICAgICAgICAg ICB1bmNvbXByZXNzZWQgYXJjaGl2ZSBjYW4gYmUgY29tcHJlc3NlZCB3aXRoIHRoZSBnemlwLCBs ejQsIG9yIHpzdGQgdG9vbHMuIFRoaXMKKyAgICAgICAgICAgZm9ybWF0IGlzIGNvbXByZXNzZWQg YnkgZGVmYXVsdCB1c2luZyBnemlwIGFuZCBhbHNvIHN1cHBvcnRzIHBhcmFsbGVsIGR1bXBzLgor ICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDwvdmFybGlz dGVudHJ5PgorCisgICAgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAgICA8dGVybT48bGl0ZXJh bD5wPC9saXRlcmFsPjwvdGVybT4KKyAgICAgICAgIDx0ZXJtPjxsaXRlcmFsPnBsYWluPC9saXRl cmFsPjwvdGVybT4KKyAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICA8cGFyYT4KKyAgICAg ICAgICAgT3V0cHV0IGEgcGxhaW4tdGV4dCBTUUwgc2NyaXB0IGZpbGUgKHRoZSBkZWZhdWx0KS4K KyAgICAgICAgICA8L3BhcmE+CisgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8L3Zhcmxp c3RlbnRyeT4KKworICAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAgPHRlcm0+PGxpdGVy YWw+YzwvbGl0ZXJhbD48L3Rlcm0+CisgICAgICAgICA8dGVybT48bGl0ZXJhbD5jdXN0b208L2xp dGVyYWw+PC90ZXJtPgorICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgIDxwYXJhPgorICAg ICAgICAgICBPdXRwdXQgYSBjdXN0b20tZm9ybWF0IGFyY2hpdmUgc3VpdGFibGUgZm9yIGlucHV0 IGludG8gcGdfcmVzdG9yZS4gVG9nZXRoZXIgd2l0aCB0aGUKKyAgICAgICAgICAgZGlyZWN0b3J5 IG91dHB1dCBmb3JtYXQsIHRoaXMgaXMgdGhlIG1vc3QgZmxleGlibGUgb3V0cHV0IGZvcm1hdCBp biB0aGF0IGl0IGFsbG93cyBtYW51YWwKKyAgICAgICAgICAgc2VsZWN0aW9uIGFuZCByZW9yZGVy aW5nIG9mIGFyY2hpdmVkIGl0ZW1zIGR1cmluZyByZXN0b3JlLiBUaGlzIGZvcm1hdCBpcyBhbHNv CisgICAgICAgICAgIGNvbXByZXNzZWQgYnkgZGVmYXVsdC4KKyAgICAgICAgICA8L3BhcmE+Cisg ICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgICAgICAg PHZhcmxpc3RlbnRyeT4KKyAgICAgICAgIDx0ZXJtPjxsaXRlcmFsPnQ8L2xpdGVyYWw+PC90ZXJt PgorICAgICAgICAgPHRlcm0+PGxpdGVyYWw+dGFyPC9saXRlcmFsPjwvdGVybT4KKyAgICAgICAg IDxsaXN0aXRlbT4KKyAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgT3V0cHV0IGEgdGFyLWZv cm1hdCBhcmNoaXZlIHN1aXRhYmxlIGZvciBpbnB1dCBpbnRvIHBnX3Jlc3RvcmUuIFRoZSB0YXIg Zm9ybWF0IGlzCisgICAgICAgICAgIGNvbXBhdGlibGUgd2l0aCB0aGUgZGlyZWN0b3J5IGZvcm1h dDogZXh0cmFjdGluZyBhIHRhci1mb3JtYXQgYXJjaGl2ZSBwcm9kdWNlcyBhIHZhbGlkCisgICAg ICAgICAgIGRpcmVjdG9yeS1mb3JtYXQgYXJjaGl2ZS4gSG93ZXZlciwgdGhlIHRhciBmb3JtYXQg ZG9lcyBub3Qgc3VwcG9ydCBjb21wcmVzc2lvbi4gQWxzbywKKyAgICAgICAgICAgd2hlbiB1c2lu ZyB0YXIgZm9ybWF0IHRoZSByZWxhdGl2ZSBvcmRlciBvZiB0YWJsZSBkYXRhIGl0ZW1zIGNhbm5v dCBiZSBjaGFuZ2VkIGR1cmluZyByZXN0b3JlLgorICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAg IDwvbGlzdGl0ZW0+CisgICAgICAgIDwvdmFybGlzdGVudHJ5PgorCisgICAgICAgIDwvdmFyaWFi bGVsaXN0PgorICAgICAgICA8L3BhcmE+CiAgICAgICA8L2xpc3RpdGVtPgogICAgICA8L3Zhcmxp c3RlbnRyeT4KIApkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL3JlZi9wZ19yZXN0b3JlLnNnbWwg Yi9kb2Mvc3JjL3NnbWwvcmVmL3BnX3Jlc3RvcmUuc2dtbAppbmRleCBiOGIyN2UxNzE5ZS4uYmEy OTEzYjMzNTYgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9yZWYvcGdfcmVzdG9yZS5zZ21sCisr KyBiL2RvYy9zcmMvc2dtbC9yZWYvcGdfcmVzdG9yZS5zZ21sCkBAIC0xNjYsNiArMTY2LDI1IEBA IFBvc3RncmVTUUwgZG9jdW1lbnRhdGlvbgogICAgICAgPC9saXN0aXRlbT4KICAgICAgPC92YXJs aXN0ZW50cnk+CiAKKyAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgIDx0ZXJtPjxvcHRpb24+LS1l eGNsdWRlLWRhdGFiYXNlPTxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5wYXR0ZXJuPC9y ZXBsYWNlYWJsZT48L29wdGlvbj48L3Rlcm0+CisgICAgICA8bGlzdGl0ZW0+CisgICAgICAgPHBh cmE+CisgICAgICAgIERvIG5vdCByZXN0b3JlIGRhdGFiYXNlcyB3aG9zZSBuYW1lIG1hdGNoZXMK KyAgICAgICAgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPnBhdHRlcm48L3JlcGxhY2Vh YmxlPi4KKyAgICAgICAgTXVsdGlwbGUgcGF0dGVybnMgY2FuIGJlIGV4Y2x1ZGVkIGJ5IHdyaXRp bmcgbXVsdGlwbGUKKyAgICAgICAgPG9wdGlvbj4tLWV4Y2x1ZGUtZGF0YWJhc2U8L29wdGlvbj4g c3dpdGNoZXMuICBUaGUKKyAgICAgICAgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPnBh dHRlcm48L3JlcGxhY2VhYmxlPiBwYXJhbWV0ZXIgaXMKKyAgICAgICAgaW50ZXJwcmV0ZWQgYXMg YSBwYXR0ZXJuIGFjY29yZGluZyB0byB0aGUgc2FtZSBydWxlcyB1c2VkIGJ5CisgICAgICAgIDxh cHBsaWNhdGlvbj5wc3FsPC9hcHBsaWNhdGlvbj4ncyA8bGl0ZXJhbD5cZDwvbGl0ZXJhbD4KKyAg ICAgICAgY29tbWFuZHMgKHNlZSA8eHJlZiBsaW5rZW5kPSJhcHAtcHNxbC1wYXR0ZXJucyIvPiks CisgICAgICAgIHNvIG11bHRpcGxlIGRhdGFiYXNlcyBjYW4gYWxzbyBiZSBleGNsdWRlZCBieSB3 cml0aW5nIHdpbGRjYXJkCisgICAgICAgIGNoYXJhY3RlcnMgaW4gdGhlIHBhdHRlcm4uICBXaGVu IHVzaW5nIHdpbGRjYXJkcywgYmUgY2FyZWZ1bCB0bworICAgICAgICBxdW90ZSB0aGUgcGF0dGVy biBpZiBuZWVkZWQgdG8gcHJldmVudCBzaGVsbCB3aWxkY2FyZCBleHBhbnNpb24uCisgICAgICAg PC9wYXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAgICAgPC92YXJsaXN0ZW50cnk+CisKICAgICAg PHZhcmxpc3RlbnRyeT4KICAgICAgIDx0ZXJtPjxvcHRpb24+LWU8L29wdGlvbj48L3Rlcm0+CiAg ICAgICA8dGVybT48b3B0aW9uPi0tZXhpdC1vbi1lcnJvcjwvb3B0aW9uPjwvdGVybT4KQEAgLTMx NSw2ICszMzQsMTYgQEAgUG9zdGdyZVNRTCBkb2N1bWVudGF0aW9uCiAgICAgICA8L2xpc3RpdGVt PgogICAgICA8L3Zhcmxpc3RlbnRyeT4KIAorICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgPHRl cm0+PG9wdGlvbj4tZzwvb3B0aW9uPjwvdGVybT4KKyAgICAgIDx0ZXJtPjxvcHRpb24+LS1nbG9i YWxzLW9ubHk8L29wdGlvbj48L3Rlcm0+CisgICAgICA8bGlzdGl0ZW0+CisgICAgICAgPHBhcmE+ CisgICAgICAgIFJlc3RvcmUgb25seSBnbG9iYWwgb2JqZWN0cyAocm9sZXMgYW5kIHRhYmxlc3Bh Y2VzKSwgbm8gZGF0YWJhc2VzLgorICAgICAgIDwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+Cisg ICAgIDwvdmFybGlzdGVudHJ5PgorCiAgICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgICA8dGVybT48 b3B0aW9uPi1JIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5pbmRleDwvcmVwbGFjZWFi bGU+PC9vcHRpb24+PC90ZXJtPgogICAgICAgPHRlcm0+PG9wdGlvbj4tLWluZGV4PTxyZXBsYWNl YWJsZSBjbGFzcz0icGFyYW1ldGVyIj5pbmRleDwvcmVwbGFjZWFibGU+PC9vcHRpb24+PC90ZXJt PgpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL01ha2VmaWxlIGIvc3JjL2Jpbi9wZ19kdW1w L01ha2VmaWxlCmluZGV4IDIzM2FkMTVjYTc1Li5hNGU1NTdkNjJjNyAxMDA2NDQKLS0tIGEvc3Jj L2Jpbi9wZ19kdW1wL01ha2VmaWxlCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9NYWtlZmlsZQpAQCAt NDcsMTEgKzQ3LDExIEBAIGFsbDogcGdfZHVtcCBwZ19yZXN0b3JlIHBnX2R1bXBhbGwKIHBnX2R1 bXA6IHBnX2R1bXAubyBjb21tb24ubyBwZ19kdW1wX3NvcnQubyAkKE9CSlMpIHwgc3VibWFrZS1s aWJwcSBzdWJtYWtlLWxpYnBncG9ydCBzdWJtYWtlLWxpYnBnZmV1dGlscwogCSQoQ0MpICQoQ0ZM QUdTKSBwZ19kdW1wLm8gY29tbW9uLm8gcGdfZHVtcF9zb3J0Lm8gJChPQkpTKSAkKExERkxBR1Mp ICQoTERGTEFHU19FWCkgJChMSUJTKSAtbyAkQCQoWCkKIAotcGdfcmVzdG9yZTogcGdfcmVzdG9y ZS5vICQoT0JKUykgfCBzdWJtYWtlLWxpYnBxIHN1Ym1ha2UtbGlicGdwb3J0IHN1Ym1ha2UtbGli cGdmZXV0aWxzCi0JJChDQykgJChDRkxBR1MpIHBnX3Jlc3RvcmUubyAkKE9CSlMpICQoTERGTEFH UykgJChMREZMQUdTX0VYKSAkKExJQlMpIC1vICRAJChYKQorcGdfcmVzdG9yZTogcGdfcmVzdG9y ZS5vIGNvbW1vbl9kdW1wYWxsX3Jlc3RvcmUubyAkKE9CSlMpIHwgc3VibWFrZS1saWJwcSBzdWJt YWtlLWxpYnBncG9ydCBzdWJtYWtlLWxpYnBnZmV1dGlscworCSQoQ0MpICQoQ0ZMQUdTKSBwZ19y ZXN0b3JlLm8gY29tbW9uX2R1bXBhbGxfcmVzdG9yZS5vICQoT0JKUykgJChMREZMQUdTKSAkKExE RkxBR1NfRVgpICQoTElCUykgLW8gJEAkKFgpCiAKLXBnX2R1bXBhbGw6IHBnX2R1bXBhbGwubyBk dW1wdXRpbHMubyBmaWx0ZXIubyAkKFdJTjMyUkVTKSB8IHN1Ym1ha2UtbGlicHEgc3VibWFrZS1s aWJwZ3BvcnQgc3VibWFrZS1saWJwZ2ZldXRpbHMKLQkkKENDKSAkKENGTEFHUykgcGdfZHVtcGFs bC5vIGR1bXB1dGlscy5vIGZpbHRlci5vICQoV0lOMzJSRVMpICQoTERGTEFHUykgJChMREZMQUdT X0VYKSAkKExJQlMpIC1vICRAJChYKQorcGdfZHVtcGFsbDogcGdfZHVtcGFsbC5vIGR1bXB1dGls cy5vIGZpbHRlci5vIGNvbW1vbl9kdW1wYWxsX3Jlc3RvcmUubyAkKFdJTjMyUkVTKSB8IHN1Ym1h a2UtbGlicHEgc3VibWFrZS1saWJwZ3BvcnQgc3VibWFrZS1saWJwZ2ZldXRpbHMKKwkkKENDKSAk KENGTEFHUykgcGdfZHVtcGFsbC5vIGR1bXB1dGlscy5vIGZpbHRlci5vIGNvbW1vbl9kdW1wYWxs X3Jlc3RvcmUubyAkKFdJTjMyUkVTKSAkKExERkxBR1MpICQoTERGTEFHU19FWCkgJChMSUJTKSAt byAkQCQoWCkKIAogaW5zdGFsbDogYWxsIGluc3RhbGxkaXJzCiAJJChJTlNUQUxMX1BST0dSQU0p IHBnX2R1bXAkKFgpICckKERFU1RESVIpJChiaW5kaXIpJy9wZ19kdW1wJChYKQpkaWZmIC0tZ2l0 IGEvc3JjL2Jpbi9wZ19kdW1wL2NvbW1vbl9kdW1wYWxsX3Jlc3RvcmUuYyBiL3NyYy9iaW4vcGdf ZHVtcC9jb21tb25fZHVtcGFsbF9yZXN0b3JlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMDAwMDAuLmFjZTUwNzcwODVjCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2Jpbi9wZ19k dW1wL2NvbW1vbl9kdW1wYWxsX3Jlc3RvcmUuYwpAQCAtMCwwICsxLDMxNCBAQAorLyotLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgKgorICogY29tbW9uX2R1bXBhbGxfcmVzdG9yZS5jCisgKgorICogUG9ydGlv bnMgQ29weXJpZ2h0IChjKSAxOTk2LTIwMjUsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50 IEdyb3VwCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTQsIFJlZ2VudHMgb2YgdGhlIFVu aXZlcnNpdHkgb2YgQ2FsaWZvcm5pYQorICoKKyAqIHRoaXMgaXMgYSBjb21tb24gZmlsZSBmb3Ig cGdfZHVtcGFsbCBhbmQgcGdfcmVzdG9yZS4KKyAqIHNyYy9iaW4vcGdfZHVtcC9jb21tb25fZHVt cGFsbF9yZXN0b3JlLmMKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisjaW5jbHVkZSAi cG9zdGdyZXNfZmUuaCIKKworI2luY2x1ZGUgImNvbW1vbi9jb25uZWN0LmgiCisjaW5jbHVkZSAi Y29tbW9uL2xvZ2dpbmcuaCIKKyNpbmNsdWRlICJjb21tb24vc3RyaW5nLmgiCisjaW5jbHVkZSAi Y29tbW9uX2R1bXBhbGxfcmVzdG9yZS5oIgorI2luY2x1ZGUgImR1bXB1dGlscy5oIgorI2luY2x1 ZGUgImZlX3V0aWxzL3N0cmluZ191dGlscy5oIgorCitzdGF0aWMgY2hhciAqY29uc3RydWN0Q29u blN0cihjb25zdCBjaGFyICoqa2V5d29yZHMsIGNvbnN0IGNoYXIgKip2YWx1ZXMpOworI2RlZmlu ZSBleGl0X25pY2VseShjb2RlKSBleGl0KGNvZGUpCisKKy8qCisgKiBNYWtlIGEgZGF0YWJhc2Ug Y29ubmVjdGlvbiB3aXRoIHRoZSBnaXZlbiBwYXJhbWV0ZXJzLiAgQW4KKyAqIGludGVyYWN0aXZl IHBhc3N3b3JkIHByb21wdCBpcyBhdXRvbWF0aWNhbGx5IGlzc3VlZCBpZiByZXF1aXJlZC4KKyAq CisgKiBJZiBmYWlsX29uX2Vycm9yIGlzIGZhbHNlLCB3ZSByZXR1cm4gTlVMTCB3aXRob3V0IHBy aW50aW5nIGFueSBtZXNzYWdlCisgKiBvbiBmYWlsdXJlLCBidXQgcHJlc2VydmUgYW55IHByb21w dGVkIHBhc3N3b3JkIGZvciB0aGUgbmV4dCB0cnkuCisgKgorICogT24gc3VjY2VzcywgdGhlIGds b2JhbCB2YXJpYWJsZSAnY29ubnN0cicgaXMgc2V0IHRvIGEgY29ubmVjdGlvbiBzdHJpbmcKKyAq IGNvbnRhaW5pbmcgdGhlIG9wdGlvbnMgdXNlZC4KKyAqLworUEdjb25uICoKK2Nvbm5lY3REYXRh YmFzZShjb25zdCBjaGFyICpkYm5hbWUsIGNvbnN0IGNoYXIgKmNvbm5lY3Rpb25fc3RyaW5nLAor CQkJCWNvbnN0IGNoYXIgKnBnaG9zdCwgY29uc3QgY2hhciAqcGdwb3J0LCBjb25zdCBjaGFyICpw Z3VzZXIsCisJCQkJdHJpdmFsdWUgcHJvbXB0X3Bhc3N3b3JkLCBib29sIGZhaWxfb25fZXJyb3Is IGNvbnN0IGNoYXIgKnByb2duYW1lLAorCQkJCWNvbnN0IGNoYXIgKipjb25uc3RyLCBpbnQgKnNl cnZlcl92ZXJzaW9uKQoreworCVBHY29ubgkgICAqY29ubjsKKwlib29sCQluZXdfcGFzczsKKwlj b25zdCBjaGFyICpyZW1vdGV2ZXJzaW9uX3N0cjsKKwlpbnQJCQlteV92ZXJzaW9uOworCWNvbnN0 IGNoYXIgKiprZXl3b3JkcyA9IE5VTEw7CisJY29uc3QgY2hhciAqKnZhbHVlcyA9IE5VTEw7CisJ UFFjb25uaW5mb09wdGlvbiAqY29ubl9vcHRzID0gTlVMTDsKKwlzdGF0aWMgY2hhciAqcGFzc3dv cmQgPSBOVUxMOworCWludAkJCXNlcnZlcl92ZXJzaW9uX3RlbXA7CisKKwlpZiAocHJvbXB0X3Bh c3N3b3JkID09IFRSSV9ZRVMgJiYgIXBhc3N3b3JkKQorCQlwYXNzd29yZCA9IHNpbXBsZV9wcm9t cHQoIlBhc3N3b3JkOiAiLCBmYWxzZSk7CisKKwkvKgorCSAqIFN0YXJ0IHRoZSBjb25uZWN0aW9u LiAgTG9vcCB1bnRpbCB3ZSBoYXZlIGEgcGFzc3dvcmQgaWYgcmVxdWVzdGVkIGJ5CisJICogYmFj a2VuZC4KKwkgKi8KKwlkbworCXsKKwkJaW50CQkJYXJnY291bnQgPSA2OworCQlQUWNvbm5pbmZv T3B0aW9uICpjb25uX29wdDsKKwkJY2hhcgkgICAqZXJyX21zZyA9IE5VTEw7CisJCWludAkJCWkg PSAwOworCisJCWZyZWUoa2V5d29yZHMpOworCQlmcmVlKHZhbHVlcyk7CisJCVBRY29ubmluZm9G cmVlKGNvbm5fb3B0cyk7CisKKwkJLyoKKwkJICogTWVyZ2UgdGhlIGNvbm5lY3Rpb24gaW5mbyBp bnB1dHMgZ2l2ZW4gaW4gZm9ybSBvZiBjb25uZWN0aW9uIHN0cmluZworCQkgKiBhbmQgb3RoZXIg b3B0aW9ucy4gIEV4cGxpY2l0bHkgZGlzY2FyZCBhbnkgZGJuYW1lIHZhbHVlIGluIHRoZQorCQkg KiBjb25uZWN0aW9uIHN0cmluZzsgb3RoZXJ3aXNlLCBQUWNvbm5lY3RkYlBhcmFtcygpIHdvdWxk IGludGVycHJldAorCQkgKiB0aGF0IHZhbHVlIGFzIGJlaW5nIGl0c2VsZiBhIGNvbm5lY3Rpb24g c3RyaW5nLgorCQkgKi8KKwkJaWYgKGNvbm5lY3Rpb25fc3RyaW5nKQorCQl7CisJCQljb25uX29w dHMgPSBQUWNvbm5pbmZvUGFyc2UoY29ubmVjdGlvbl9zdHJpbmcsICZlcnJfbXNnKTsKKwkJCWlm IChjb25uX29wdHMgPT0gTlVMTCkKKwkJCQlwZ19mYXRhbCgiJXMiLCBlcnJfbXNnKTsKKworCQkJ Zm9yIChjb25uX29wdCA9IGNvbm5fb3B0czsgY29ubl9vcHQtPmtleXdvcmQgIT0gTlVMTDsgY29u bl9vcHQrKykKKwkJCXsKKwkJCQlpZiAoY29ubl9vcHQtPnZhbCAhPSBOVUxMICYmIGNvbm5fb3B0 LT52YWxbMF0gIT0gJ1wwJyAmJgorCQkJCQlzdHJjbXAoY29ubl9vcHQtPmtleXdvcmQsICJkYm5h bWUiKSAhPSAwKQorCQkJCQlhcmdjb3VudCsrOworCQkJfQorCisJCQlrZXl3b3JkcyA9IHBnX21h bGxvYzAoKGFyZ2NvdW50ICsgMSkgKiBzaXplb2YoKmtleXdvcmRzKSk7CisJCQl2YWx1ZXMgPSBw Z19tYWxsb2MwKChhcmdjb3VudCArIDEpICogc2l6ZW9mKCp2YWx1ZXMpKTsKKworCQkJZm9yIChj b25uX29wdCA9IGNvbm5fb3B0czsgY29ubl9vcHQtPmtleXdvcmQgIT0gTlVMTDsgY29ubl9vcHQr KykKKwkJCXsKKwkJCQlpZiAoY29ubl9vcHQtPnZhbCAhPSBOVUxMICYmIGNvbm5fb3B0LT52YWxb MF0gIT0gJ1wwJyAmJgorCQkJCQlzdHJjbXAoY29ubl9vcHQtPmtleXdvcmQsICJkYm5hbWUiKSAh PSAwKQorCQkJCXsKKwkJCQkJa2V5d29yZHNbaV0gPSBjb25uX29wdC0+a2V5d29yZDsKKwkJCQkJ dmFsdWVzW2ldID0gY29ubl9vcHQtPnZhbDsKKwkJCQkJaSsrOworCQkJCX0KKwkJCX0KKwkJfQor CQllbHNlCisJCXsKKwkJCWtleXdvcmRzID0gcGdfbWFsbG9jMCgoYXJnY291bnQgKyAxKSAqIHNp emVvZigqa2V5d29yZHMpKTsKKwkJCXZhbHVlcyA9IHBnX21hbGxvYzAoKGFyZ2NvdW50ICsgMSkg KiBzaXplb2YoKnZhbHVlcykpOworCQl9CisKKwkJaWYgKHBnaG9zdCkKKwkJeworCQkJa2V5d29y ZHNbaV0gPSAiaG9zdCI7CisJCQl2YWx1ZXNbaV0gPSBwZ2hvc3Q7CisJCQlpKys7CisJCX0KKwkJ aWYgKHBncG9ydCkKKwkJeworCQkJa2V5d29yZHNbaV0gPSAicG9ydCI7CisJCQl2YWx1ZXNbaV0g PSBwZ3BvcnQ7CisJCQlpKys7CisJCX0KKwkJaWYgKHBndXNlcikKKwkJeworCQkJa2V5d29yZHNb aV0gPSAidXNlciI7CisJCQl2YWx1ZXNbaV0gPSBwZ3VzZXI7CisJCQlpKys7CisJCX0KKwkJaWYg KHBhc3N3b3JkKQorCQl7CisJCQlrZXl3b3Jkc1tpXSA9ICJwYXNzd29yZCI7CisJCQl2YWx1ZXNb aV0gPSBwYXNzd29yZDsKKwkJCWkrKzsKKwkJfQorCQlpZiAoZGJuYW1lKQorCQl7CisJCQlrZXl3 b3Jkc1tpXSA9ICJkYm5hbWUiOworCQkJdmFsdWVzW2ldID0gZGJuYW1lOworCQkJaSsrOworCQl9 CisJCWtleXdvcmRzW2ldID0gImZhbGxiYWNrX2FwcGxpY2F0aW9uX25hbWUiOworCQl2YWx1ZXNb aV0gPSBwcm9nbmFtZTsKKwkJaSsrOworCisJCW5ld19wYXNzID0gZmFsc2U7CisJCWNvbm4gPSBQ UWNvbm5lY3RkYlBhcmFtcyhrZXl3b3JkcywgdmFsdWVzLCB0cnVlKTsKKworCQlpZiAoIWNvbm4p CisJCQlwZ19mYXRhbCgiY291bGQgbm90IGNvbm5lY3QgdG8gZGF0YWJhc2UgXCIlc1wiIiwgZGJu YW1lKTsKKworCQlpZiAoUFFzdGF0dXMoY29ubikgPT0gQ09OTkVDVElPTl9CQUQgJiYKKwkJCVBR Y29ubmVjdGlvbk5lZWRzUGFzc3dvcmQoY29ubikgJiYKKwkJCSFwYXNzd29yZCAmJgorCQkJcHJv bXB0X3Bhc3N3b3JkICE9IFRSSV9OTykKKwkJeworCQkJUFFmaW5pc2goY29ubik7CisJCQlwYXNz d29yZCA9IHNpbXBsZV9wcm9tcHQoIlBhc3N3b3JkOiAiLCBmYWxzZSk7CisJCQluZXdfcGFzcyA9 IHRydWU7CisJCX0KKwl9IHdoaWxlIChuZXdfcGFzcyk7CisKKwkvKiBjaGVjayB0byBzZWUgdGhh dCB0aGUgYmFja2VuZCBjb25uZWN0aW9uIHdhcyBzdWNjZXNzZnVsbHkgbWFkZSAqLworCWlmIChQ UXN0YXR1cyhjb25uKSA9PSBDT05ORUNUSU9OX0JBRCkKKwl7CisJCWlmIChmYWlsX29uX2Vycm9y KQorCQkJcGdfZmF0YWwoIiVzIiwgUFFlcnJvck1lc3NhZ2UoY29ubikpOworCQllbHNlCisJCXsK KwkJCVBRZmluaXNoKGNvbm4pOworCisJCQlmcmVlKGtleXdvcmRzKTsKKwkJCWZyZWUodmFsdWVz KTsKKwkJCVBRY29ubmluZm9GcmVlKGNvbm5fb3B0cyk7CisKKwkJCXJldHVybiBOVUxMOworCQl9 CisJfQorCisJLyoKKwkgKiBPaywgY29ubmVjdGVkIHN1Y2Nlc3NmdWxseS4gUmVtZW1iZXIgdGhl IG9wdGlvbnMgdXNlZCwgaW4gdGhlIGZvcm0gb2YgYQorCSAqIGNvbm5lY3Rpb24gc3RyaW5nLgor CSAqLworCWlmIChjb25uc3RyKQorCQkqY29ubnN0ciA9IGNvbnN0cnVjdENvbm5TdHIoa2V5d29y ZHMsIHZhbHVlcyk7CisKKwlmcmVlKGtleXdvcmRzKTsKKwlmcmVlKHZhbHVlcyk7CisJUFFjb25u aW5mb0ZyZWUoY29ubl9vcHRzKTsKKworCS8qIENoZWNrIHZlcnNpb24gKi8KKwlyZW1vdGV2ZXJz aW9uX3N0ciA9IFBRcGFyYW1ldGVyU3RhdHVzKGNvbm4sICJzZXJ2ZXJfdmVyc2lvbiIpOworCWlm ICghcmVtb3RldmVyc2lvbl9zdHIpCisJCXBnX2ZhdGFsKCJjb3VsZCBub3QgZ2V0IHNlcnZlciB2 ZXJzaW9uIik7CisJc2VydmVyX3ZlcnNpb25fdGVtcCA9IFBRc2VydmVyVmVyc2lvbihjb25uKTsK KwlpZiAoc2VydmVyX3ZlcnNpb25fdGVtcCA9PSAwKQorCQlwZ19mYXRhbCgiY291bGQgbm90IHBh cnNlIHNlcnZlciB2ZXJzaW9uIFwiJXNcIiIsCisJCQkJIHJlbW90ZXZlcnNpb25fc3RyKTsKKwor CS8qIElmIG5lZWRlZCwgdGhlbiBjb3B5IHNlcnZlciB2ZXJzaW9uIHRvIG91dGVyIGZ1bmN0aW9u LiAqLworCWlmIChzZXJ2ZXJfdmVyc2lvbikKKwkJKnNlcnZlcl92ZXJzaW9uID0gc2VydmVyX3Zl cnNpb25fdGVtcDsKKworCW15X3ZlcnNpb24gPSBQR19WRVJTSU9OX05VTTsKKworCS8qCisJICog V2UgYWxsb3cgdGhlIHNlcnZlciB0byBiZSBiYWNrIHRvIDkuMiwgYW5kIHVwIHRvIGFueSBtaW5v ciByZWxlYXNlIG9mCisJICogb3VyIG93biBtYWpvciB2ZXJzaW9uLiAgKFNlZSBhbHNvIHZlcnNp b24gY2hlY2sgaW4gcGdfZHVtcC5jLikKKwkgKi8KKwlpZiAobXlfdmVyc2lvbiAhPSBzZXJ2ZXJf dmVyc2lvbl90ZW1wCisJCSYmIChzZXJ2ZXJfdmVyc2lvbl90ZW1wIDwgOTAyMDAgfHwKKwkJCShz ZXJ2ZXJfdmVyc2lvbl90ZW1wIC8gMTAwKSA+IChteV92ZXJzaW9uIC8gMTAwKSkpCisJeworCQlw Z19sb2dfZXJyb3IoImFib3J0aW5nIGJlY2F1c2Ugb2Ygc2VydmVyIHZlcnNpb24gbWlzbWF0Y2gi KTsKKwkJcGdfbG9nX2Vycm9yX2RldGFpbCgic2VydmVyIHZlcnNpb246ICVzOyAlcyB2ZXJzaW9u OiAlcyIsCisJCQkJCQkJcmVtb3RldmVyc2lvbl9zdHIsIHByb2duYW1lLCBQR19WRVJTSU9OKTsK KwkJZXhpdF9uaWNlbHkoMSk7CisJfQorCisJUFFjbGVhcihleGVjdXRlUXVlcnkoY29ubiwgQUxX QVlTX1NFQ1VSRV9TRUFSQ0hfUEFUSF9TUUwpKTsKKworCXJldHVybiBjb25uOworfQorCisvKiAt LS0tLS0tLS0tCisgKiBDb25zdHJ1Y3QgYSBjb25uZWN0aW9uIHN0cmluZyBmcm9tIHRoZSBnaXZl biBrZXl3b3JkL3ZhbHVlIHBhaXJzLiBJdCBpcworICogdXNlZCB0byBwYXNzIHRoZSBjb25uZWN0 aW9uIG9wdGlvbnMgdG8gdGhlIHBnX2R1bXAgc3VicHJvY2Vzcy4KKyAqCisgKiBUaGUgZm9sbG93 aW5nIHBhcmFtZXRlcnMgYXJlIGV4Y2x1ZGVkOgorICoJZGJuYW1lCQktIHZhcmllcyBpbiBlYWNo IHBnX2R1bXAgaW52b2NhdGlvbgorICoJcGFzc3dvcmQJLSBpdCdzIG5vdCBzZWN1cmUgdG8gcGFz cyBhIHBhc3N3b3JkIG9uIHRoZSBjb21tYW5kIGxpbmUKKyAqCWZhbGxiYWNrX2FwcGxpY2F0aW9u X25hbWUgLSB3ZSdsbCBsZXQgcGdfZHVtcCBzZXQgaXQKKyAqIC0tLS0tLS0tLS0KKyAqLworc3Rh dGljIGNoYXIgKgorY29uc3RydWN0Q29ublN0cihjb25zdCBjaGFyICoqa2V5d29yZHMsIGNvbnN0 IGNoYXIgKip2YWx1ZXMpCit7CisJUFFFeHBCdWZmZXIgYnVmID0gY3JlYXRlUFFFeHBCdWZmZXIo KTsKKwljaGFyCSAgICpjb25uc3RyOworCWludAkJCWk7CisJYm9vbAkJZmlyc3RrZXl3b3JkID0g dHJ1ZTsKKworCS8qIENvbnN0cnVjdCBhIG5ldyBjb25uZWN0aW9uIHN0cmluZyBpbiBrZXk9J3Zh bHVlJyBmb3JtYXQuICovCisJZm9yIChpID0gMDsga2V5d29yZHNbaV0gIT0gTlVMTDsgaSsrKQor CXsKKwkJaWYgKHN0cmNtcChrZXl3b3Jkc1tpXSwgImRibmFtZSIpID09IDAgfHwKKwkJCXN0cmNt cChrZXl3b3Jkc1tpXSwgInBhc3N3b3JkIikgPT0gMCB8fAorCQkJc3RyY21wKGtleXdvcmRzW2ld LCAiZmFsbGJhY2tfYXBwbGljYXRpb25fbmFtZSIpID09IDApCisJCQljb250aW51ZTsKKworCQlp ZiAoIWZpcnN0a2V5d29yZCkKKwkJCWFwcGVuZFBRRXhwQnVmZmVyQ2hhcihidWYsICcgJyk7CisJ CWZpcnN0a2V5d29yZCA9IGZhbHNlOworCQlhcHBlbmRQUUV4cEJ1ZmZlcihidWYsICIlcz0iLCBr ZXl3b3Jkc1tpXSk7CisJCWFwcGVuZENvbm5TdHJWYWwoYnVmLCB2YWx1ZXNbaV0pOworCX0KKwor CWNvbm5zdHIgPSBwZ19zdHJkdXAoYnVmLT5kYXRhKTsKKwlkZXN0cm95UFFFeHBCdWZmZXIoYnVm KTsKKwlyZXR1cm4gY29ubnN0cjsKK30KKworLyoKKyAqIFJ1biBhIHF1ZXJ5LCByZXR1cm4gdGhl IHJlc3VsdHMsIGV4aXQgcHJvZ3JhbSBvbiBmYWlsdXJlLgorICovCitQR3Jlc3VsdCAqCitleGVj dXRlUXVlcnkoUEdjb25uICpjb25uLCBjb25zdCBjaGFyICpxdWVyeSkKK3sKKwlQR3Jlc3VsdCAg ICpyZXM7CisKKwlwZ19sb2dfaW5mbygiZXhlY3V0aW5nICVzIiwgcXVlcnkpOworCisJcmVzID0g UFFleGVjKGNvbm4sIHF1ZXJ5KTsKKwlpZiAoIXJlcyB8fAorCQlQUXJlc3VsdFN0YXR1cyhyZXMp ICE9IFBHUkVTX1RVUExFU19PSykKKwl7CisJCXBnX2xvZ19lcnJvcigicXVlcnkgZmFpbGVkOiAl cyIsIFBRZXJyb3JNZXNzYWdlKGNvbm4pKTsKKwkJcGdfbG9nX2Vycm9yX2RldGFpbCgiUXVlcnkg d2FzOiAlcyIsIHF1ZXJ5KTsKKwkJUFFmaW5pc2goY29ubik7CisJCWV4aXRfbmljZWx5KDEpOwor CX0KKworCXJldHVybiByZXM7Cit9CisKKy8qCisgKiBwYXJzZUR1bXBGb3JtYXQKKyAqCisgKiBU aGlzIHdpbGwgdmFsaWRhdGUgZHVtcCBmb3JtYXRzLgorICovCitBcmNoaXZlRm9ybWF0CitwYXJz ZUR1bXBGb3JtYXQoY29uc3QgY2hhciAqZm9ybWF0KQoreworCUFyY2hpdmVGb3JtYXQJYXJjaER1 bXBGb3JtYXQ7CisKKwlpZiAocGdfc3RyY2FzZWNtcChmb3JtYXQsICJjIikgPT0gMCkKKwkJYXJj aER1bXBGb3JtYXQgPSBhcmNoQ3VzdG9tOworCWVsc2UgaWYgKHBnX3N0cmNhc2VjbXAoZm9ybWF0 LCAiY3VzdG9tIikgPT0gMCkKKwkJYXJjaER1bXBGb3JtYXQgPSBhcmNoQ3VzdG9tOworCWVsc2Ug aWYgKHBnX3N0cmNhc2VjbXAoZm9ybWF0LCAiZCIpID09IDApCisJCWFyY2hEdW1wRm9ybWF0ID0g YXJjaERpcmVjdG9yeTsKKwllbHNlIGlmIChwZ19zdHJjYXNlY21wKGZvcm1hdCwgImRpcmVjdG9y eSIpID09IDApCisJCWFyY2hEdW1wRm9ybWF0ID0gYXJjaERpcmVjdG9yeTsKKwllbHNlIGlmIChw Z19zdHJjYXNlY21wKGZvcm1hdCwgInAiKSA9PSAwKQorCQlhcmNoRHVtcEZvcm1hdCA9IGFyY2hO dWxsOworCWVsc2UgaWYgKHBnX3N0cmNhc2VjbXAoZm9ybWF0LCAicGxhaW4iKSA9PSAwKQorCQlh cmNoRHVtcEZvcm1hdCA9IGFyY2hOdWxsOworCWVsc2UgaWYgKHBnX3N0cmNhc2VjbXAoZm9ybWF0 LCAidCIpID09IDApCisJCWFyY2hEdW1wRm9ybWF0ID0gYXJjaFRhcjsKKwllbHNlIGlmIChwZ19z dHJjYXNlY21wKGZvcm1hdCwgInRhciIpID09IDApCisJCWFyY2hEdW1wRm9ybWF0ID0gYXJjaFRh cjsKKwllbHNlCisJCXBnX2ZhdGFsKCJ1bnJlY29nbml6ZWQgYXJjaGl2ZSBmb3JtYXQgXCIlc1wi OyBwbGVhc2Ugc3BlY2lmeSBcImNcIiwgXCJkXCIsIG9yIFwidFwiIiwKKwkJCQlmb3JtYXQpOwor CisJcmV0dXJuIGFyY2hEdW1wRm9ybWF0OworfQpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1w L2NvbW1vbl9kdW1wYWxsX3Jlc3RvcmUuaCBiL3NyYy9iaW4vcGdfZHVtcC9jb21tb25fZHVtcGFs bF9yZXN0b3JlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmEyN2Mz ZTlmYjg5Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL2NvbW1vbl9kdW1wYWxs X3Jlc3RvcmUuaApAQCAtMCwwICsxLDI2IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBj b21tb25fZHVtcGFsbF9yZXN0b3JlLmgKKyAqICAgICAgQ29tbW9uIGhlYWRlciBmaWxlIGZvciBw Z19kdW1wYWxsIGFuZCBwZ19yZXN0b3JlCisgKgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAx OTk2LTIwMjUsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKiBQb3J0aW9u cyBDb3B5cmlnaHQgKGMpIDE5OTQsIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZv cm5pYQorICoKKyAqIElERU5USUZJQ0FUSU9OCisgKiAgICBzcmMvYmluL3BnX2R1bXAvY29tbW9u X2R1bXBhbGxfcmVzdG9yZS5oCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpZm5kZWYg Q09NTU9OX0RVTVBBTExfUkVTVE9SRV9ICisjZGVmaW5lIENPTU1PTl9EVU1QQUxMX1JFU1RPUkVf SAorCisjaW5jbHVkZSAicGdfYmFja3VwLmgiCisKK2V4dGVybiBQR2Nvbm4gKmNvbm5lY3REYXRh YmFzZShjb25zdCBjaGFyICpkYm5hbWUsCisJCWNvbnN0IGNoYXIgKmNvbm5lY3Rpb25fc3RyaW5n LCBjb25zdCBjaGFyICpwZ2hvc3QsCisJCWNvbnN0IGNoYXIgKnBncG9ydCwgY29uc3QgY2hhciAq cGd1c2VyLAorCQl0cml2YWx1ZSBwcm9tcHRfcGFzc3dvcmQsIGJvb2wgZmFpbF9vbl9lcnJvciwK KwkJY29uc3QgY2hhciAqcHJvZ25hbWUsIGNvbnN0IGNoYXIgKipjb25uc3RyLCBpbnQgKnNlcnZl cl92ZXJzaW9uKTsKK2V4dGVybiAgUEdyZXN1bHQgKmV4ZWN1dGVRdWVyeShQR2Nvbm4gKmNvbm4s IGNvbnN0IGNoYXIgKnF1ZXJ5KTsKK2V4dGVybiBBcmNoaXZlRm9ybWF0IHBhcnNlRHVtcEZvcm1h dChjb25zdCBjaGFyICpmb3JtYXQpOworI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAv KiBDT01NT05fRFVNUEFMTF9SRVNUT1JFX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVt cC9wZ19iYWNrdXAuaCBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXAuaAppbmRleCBmMGYxOWJi MGIyOS4uNjUwMDBlNWEwODMgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXAu aAorKysgYi9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwLmgKQEAgLTMwNiw3ICszMDYsNyBAQCBl eHRlcm4gdm9pZCBTZXRBcmNoaXZlT3B0aW9ucyhBcmNoaXZlICpBSCwgRHVtcE9wdGlvbnMgKmRv cHQsIFJlc3RvcmVPcHRpb25zICpybwogCiBleHRlcm4gdm9pZCBQcm9jZXNzQXJjaGl2ZVJlc3Rv cmVPcHRpb25zKEFyY2hpdmUgKkFIWCk7CiAKLWV4dGVybiB2b2lkIFJlc3RvcmVBcmNoaXZlKEFy Y2hpdmUgKkFIWCk7CitleHRlcm4gdm9pZCBSZXN0b3JlQXJjaGl2ZShBcmNoaXZlICpBSFgsIGJv b2wgYXBwZW5kX2RhdGEpOwogCiAvKiBPcGVuIGFuIGV4aXN0aW5nIGFyY2hpdmUgKi8KIGV4dGVy biBBcmNoaXZlICpPcGVuQXJjaGl2ZShjb25zdCBjaGFyICpGaWxlU3BlYywgY29uc3QgQXJjaGl2 ZUZvcm1hdCBmbXQpOwpAQCAtMzE5LDcgKzMxOSw3IEBAIGV4dGVybiBBcmNoaXZlICpDcmVhdGVB cmNoaXZlKGNvbnN0IGNoYXIgKkZpbGVTcGVjLCBjb25zdCBBcmNoaXZlRm9ybWF0IGZtdCwKIAkJ CQkJCQkgIERhdGFEaXJTeW5jTWV0aG9kIHN5bmNfbWV0aG9kKTsKIAogLyogVGhlIC0tbGlzdCBv cHRpb24gKi8KLWV4dGVybiB2b2lkIFByaW50VE9DU3VtbWFyeShBcmNoaXZlICpBSFgpOworZXh0 ZXJuIHZvaWQgUHJpbnRUT0NTdW1tYXJ5KEFyY2hpdmUgKkFIWCwgYm9vbCBhcHBlbmRfZGF0YSk7 CiAKIGV4dGVybiBSZXN0b3JlT3B0aW9ucyAqTmV3UmVzdG9yZU9wdGlvbnModm9pZCk7CiAKZGlm ZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuYyBiL3NyYy9iaW4v cGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuYwppbmRleCA3MDdhM2ZjODQ0Yy4uNzE1M2Q0YTQw YjYgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuYworKysg Yi9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmMKQEAgLTgyLDcgKzgyLDcgQEAg c3RhdGljIGludAlSZXN0b3JpbmdUb0RCKEFyY2hpdmVIYW5kbGUgKkFIKTsKIHN0YXRpYyB2b2lk IGR1bXBfbG9fYnVmKEFyY2hpdmVIYW5kbGUgKkFIKTsKIHN0YXRpYyB2b2lkIGR1bXBUaW1lc3Rh bXAoQXJjaGl2ZUhhbmRsZSAqQUgsIGNvbnN0IGNoYXIgKm1zZywgdGltZV90IHRpbSk7CiBzdGF0 aWMgdm9pZCBTZXRPdXRwdXQoQXJjaGl2ZUhhbmRsZSAqQUgsIGNvbnN0IGNoYXIgKmZpbGVuYW1l LAotCQkJCQkgIGNvbnN0IHBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Npb25fc3Bl Yyk7CisJCQljb25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWMs IGJvb2wgYXBwZW5kX2RhdGEpOwogc3RhdGljIENvbXByZXNzRmlsZUhhbmRsZSAqU2F2ZU91dHB1 dChBcmNoaXZlSGFuZGxlICpBSCk7CiBzdGF0aWMgdm9pZCBSZXN0b3JlT3V0cHV0KEFyY2hpdmVI YW5kbGUgKkFILCBDb21wcmVzc0ZpbGVIYW5kbGUgKnNhdmVkT3V0cHV0KTsKIApAQCAtMzMzLDcg KzMzMyw3IEBAIFByb2Nlc3NBcmNoaXZlUmVzdG9yZU9wdGlvbnMoQXJjaGl2ZSAqQUhYKQogCiAv KiBQdWJsaWMgKi8KIHZvaWQKLVJlc3RvcmVBcmNoaXZlKEFyY2hpdmUgKkFIWCkKK1Jlc3RvcmVB cmNoaXZlKEFyY2hpdmUgKkFIWCwgYm9vbCBhcHBlbmRfZGF0YSkKIHsKIAlBcmNoaXZlSGFuZGxl ICpBSCA9IChBcmNoaXZlSGFuZGxlICopIEFIWDsKIAlSZXN0b3JlT3B0aW9ucyAqcm9wdCA9IEFI LT5wdWJsaWMucm9wdDsKQEAgLTQ1MCw3ICs0NTAsNyBAQCBSZXN0b3JlQXJjaGl2ZShBcmNoaXZl ICpBSFgpCiAJICovCiAJc2F2ID0gU2F2ZU91dHB1dChBSCk7CiAJaWYgKHJvcHQtPmZpbGVuYW1l IHx8IHJvcHQtPmNvbXByZXNzaW9uX3NwZWMuYWxnb3JpdGhtICE9IFBHX0NPTVBSRVNTSU9OX05P TkUpCi0JCVNldE91dHB1dChBSCwgcm9wdC0+ZmlsZW5hbWUsIHJvcHQtPmNvbXByZXNzaW9uX3Nw ZWMpOworCQlTZXRPdXRwdXQoQUgsIHJvcHQtPmZpbGVuYW1lLCByb3B0LT5jb21wcmVzc2lvbl9z cGVjLCBhcHBlbmRfZGF0YSk7CiAKIAlhaHByaW50ZihBSCwgIi0tXG4tLSBQb3N0Z3JlU1FMIGRh dGFiYXNlIGR1bXBcbi0tXG5cbiIpOwogCkBAIC0xMjYzLDcgKzEyNjMsNyBAQCBBcmNoaXZlRW50 cnkoQXJjaGl2ZSAqQUhYLCBDYXRhbG9nSWQgY2F0YWxvZ0lkLCBEdW1wSWQgZHVtcElkLAogCiAv KiBQdWJsaWMgKi8KIHZvaWQKLVByaW50VE9DU3VtbWFyeShBcmNoaXZlICpBSFgpCitQcmludFRP Q1N1bW1hcnkoQXJjaGl2ZSAqQUhYLCBib29sIGFwcGVuZF9kYXRhKQogewogCUFyY2hpdmVIYW5k bGUgKkFIID0gKEFyY2hpdmVIYW5kbGUgKikgQUhYOwogCVJlc3RvcmVPcHRpb25zICpyb3B0ID0g QUgtPnB1YmxpYy5yb3B0OwpAQCAtMTI3OSw3ICsxMjc5LDcgQEAgUHJpbnRUT0NTdW1tYXJ5KEFy Y2hpdmUgKkFIWCkKIAogCXNhdiA9IFNhdmVPdXRwdXQoQUgpOwogCWlmIChyb3B0LT5maWxlbmFt ZSkKLQkJU2V0T3V0cHV0KEFILCByb3B0LT5maWxlbmFtZSwgb3V0X2NvbXByZXNzaW9uX3NwZWMp OworCQlTZXRPdXRwdXQoQUgsIHJvcHQtPmZpbGVuYW1lLCBvdXRfY29tcHJlc3Npb25fc3BlYywg YXBwZW5kX2RhdGEpOwogCiAJaWYgKHN0cmZ0aW1lKHN0YW1wX3N0ciwgc2l6ZW9mKHN0YW1wX3N0 ciksIFBHRFVNUF9TVFJGVElNRV9GTVQsCiAJCQkJIGxvY2FsdGltZSgmQUgtPmNyZWF0ZURhdGUp KSA9PSAwKQpAQCAtMTY1OCw3ICsxNjU4LDggQEAgYXJjaHByaW50ZihBcmNoaXZlICpBSCwgY29u c3QgY2hhciAqZm10LC4uLikKIAogc3RhdGljIHZvaWQKIFNldE91dHB1dChBcmNoaXZlSGFuZGxl ICpBSCwgY29uc3QgY2hhciAqZmlsZW5hbWUsCi0JCSAgY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lm aWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjKQorCQkgIGNvbnN0IHBnX2NvbXByZXNzX3NwZWNpZmlj YXRpb24gY29tcHJlc3Npb25fc3BlYywKKwkJICBib29sIGFwcGVuZF9kYXRhKQogewogCUNvbXBy ZXNzRmlsZUhhbmRsZSAqQ0ZIOwogCWNvbnN0IGNoYXIgKm1vZGU7CkBAIC0xNjc4LDcgKzE2Nzks NyBAQCBTZXRPdXRwdXQoQXJjaGl2ZUhhbmRsZSAqQUgsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLAog CWVsc2UKIAkJZm4gPSBmaWxlbm8oc3Rkb3V0KTsKIAotCWlmIChBSC0+bW9kZSA9PSBhcmNoTW9k ZUFwcGVuZCkKKwlpZiAoYXBwZW5kX2RhdGEgfHwgQUgtPm1vZGUgPT0gYXJjaE1vZGVBcHBlbmQp CiAJCW1vZGUgPSBQR19CSU5BUllfQTsKIAllbHNlCiAJCW1vZGUgPSBQR19CSU5BUllfVzsKZGlm ZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfdGFyLmMgYi9zcmMvYmluL3BnX2R1 bXAvcGdfYmFja3VwX3Rhci5jCmluZGV4IGI1YmEzYjQ2ZGQ5Li5kOTRkMGRlMmE1ZCAxMDA2NDQK LS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF90YXIuYworKysgYi9zcmMvYmluL3BnX2R1 bXAvcGdfYmFja3VwX3Rhci5jCkBAIC04MjYsNyArODI2LDcgQEAgX0Nsb3NlQXJjaGl2ZShBcmNo aXZlSGFuZGxlICpBSCkKIAkJc2F2VmVyYm9zZSA9IEFILT5wdWJsaWMudmVyYm9zZTsKIAkJQUgt PnB1YmxpYy52ZXJib3NlID0gMDsKIAotCQlSZXN0b3JlQXJjaGl2ZSgoQXJjaGl2ZSAqKSBBSCk7 CisJCVJlc3RvcmVBcmNoaXZlKChBcmNoaXZlICopIEFILCBmYWxzZSk7CiAKIAkJU2V0QXJjaGl2 ZU9wdGlvbnMoKEFyY2hpdmUgKikgQUgsIHNhdkRvcHQsIHNhdlJvcHQpOwogCmRpZmYgLS1naXQg YS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX3V0aWxzLmMgYi9zcmMvYmluL3BnX2R1bXAvcGdf YmFja3VwX3V0aWxzLmMKaW5kZXggNzlhZWM1ZjUxNTguLmY3MGVhOTIzM2ZlIDEwMDY0NAotLS0g YS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX3V0aWxzLmMKKysrIGIvc3JjL2Jpbi9wZ19kdW1w L3BnX2JhY2t1cF91dGlscy5jCkBAIC0yMSw3ICsyMSw4IEBACiAvKiBHbG9iYWxzIGV4cG9ydGVk IGJ5IHRoaXMgZmlsZSAqLwogY29uc3QgY2hhciAqcHJvZ25hbWUgPSBOVUxMOwogCi0jZGVmaW5l IE1BWF9PTl9FWElUX05JQ0VMWQkJCQkyMAorLyogVE9ETzogaW5jcmVhc2luZyB0aGlzIHRvIGtl ZXAgMTAwIGRiIHJlc3RvcmluZyBieSBzaW5nbGUgcGdfcmVzdG9yZSBjb21tYW5kLiAqLworI2Rl ZmluZSBNQVhfT05fRVhJVF9OSUNFTFkJCQkJMTAwCiAKIHN0YXRpYyBzdHJ1Y3QKIHsKZGlmZiAt LWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMgYi9zcmMvYmluL3BnX2R1bXAvcGdfZHVt cC5jCmluZGV4IDhmNzNhNWRmOTU2Li5lYWU2MjZmNjIxMyAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9w Z19kdW1wL3BnX2R1bXAuYworKysgYi9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jCkBAIC0xMTQ3 LDcgKzExNDcsNyBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkgKiByaWdodCBub3cu CiAJICovCiAJaWYgKHBsYWluVGV4dCkKLQkJUmVzdG9yZUFyY2hpdmUoZm91dCk7CisJCVJlc3Rv cmVBcmNoaXZlKGZvdXQsIGZhbHNlKTsKIAogCUNsb3NlQXJjaGl2ZShmb3V0KTsKIApkaWZmIC0t Z2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXBhbGwuYyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19k dW1wYWxsLmMKaW5kZXggMzk2Zjc5NzgxYzUuLjRiYjBjODAzMGUyIDEwMDY0NAotLS0gYS9zcmMv YmluL3BnX2R1bXAvcGdfZHVtcGFsbC5jCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wYWxs LmMKQEAgLTE1LDYgKzE1LDcgQEAKIAogI2luY2x1ZGUgInBvc3RncmVzX2ZlLmgiCiAKKyNpbmNs dWRlIDxzeXMvc3RhdC5oPgogI2luY2x1ZGUgPHRpbWUuaD4KICNpbmNsdWRlIDx1bmlzdGQuaD4K IApAQCAtMjQsMTQgKzI1LDE3IEBACiAjaW5jbHVkZSAiY29tbW9uL2hhc2hmbl91bnN0YWJsZS5o IgogI2luY2x1ZGUgImNvbW1vbi9sb2dnaW5nLmgiCiAjaW5jbHVkZSAiY29tbW9uL3N0cmluZy5o IgorI2luY2x1ZGUgImNvbW1vbl9kdW1wYWxsX3Jlc3RvcmUuaCIKICNpbmNsdWRlICJkdW1wdXRp bHMuaCIKICNpbmNsdWRlICJmZV91dGlscy9zdHJpbmdfdXRpbHMuaCIKICNpbmNsdWRlICJmaWx0 ZXIuaCIKICNpbmNsdWRlICJnZXRvcHRfbG9uZy5oIgogI2luY2x1ZGUgInBnX2JhY2t1cC5oIgor I2luY2x1ZGUgInBnX2JhY2t1cF9hcmNoaXZlci5oIgogCiAvKiB2ZXJzaW9uIHN0cmluZyB3ZSBl eHBlY3QgYmFjayBmcm9tIHBnX2R1bXAgKi8KICNkZWZpbmUgUEdEVU1QX1ZFUlNJT05TVFIgInBn X2R1bXAgKFBvc3RncmVTUUwpICIgUEdfVkVSU0lPTiAiXG4iCisjZGVmaW5lIGV4aXRfbmljZWx5 KGNvZGUpIGV4aXQoY29kZSkKIAogdHlwZWRlZiBzdHJ1Y3QKIHsKQEAgLTY0LDI4ICs2OCwyNCBA QCBzdGF0aWMgdm9pZCBkcm9wVGFibGVzcGFjZXMoUEdjb25uICpjb25uKTsKIHN0YXRpYyB2b2lk IGR1bXBUYWJsZXNwYWNlcyhQR2Nvbm4gKmNvbm4pOwogc3RhdGljIHZvaWQgZHJvcERCcyhQR2Nv bm4gKmNvbm4pOwogc3RhdGljIHZvaWQgZHVtcFVzZXJDb25maWcoUEdjb25uICpjb25uLCBjb25z dCBjaGFyICp1c2VybmFtZSk7Ci1zdGF0aWMgdm9pZCBkdW1wRGF0YWJhc2VzKFBHY29ubiAqY29u bik7CitzdGF0aWMgdm9pZCBkdW1wRGF0YWJhc2VzKFBHY29ubiAqY29ubiwgQXJjaGl2ZUZvcm1h dCBhcmNoRHVtcEZvcm1hdCk7CiBzdGF0aWMgdm9pZCBkdW1wVGltZXN0YW1wKGNvbnN0IGNoYXIg Km1zZyk7Ci1zdGF0aWMgaW50CXJ1blBnRHVtcChjb25zdCBjaGFyICpkYm5hbWUsIGNvbnN0IGNo YXIgKmNyZWF0ZV9vcHRzKTsKK3N0YXRpYyBpbnQgcnVuUGdEdW1wKGNvbnN0IGNoYXIgKmRibmFt ZSwgY29uc3QgY2hhciAqY3JlYXRlX29wdHMsCisJCQkJCSBjaGFyICpkYmZpbGUsIEFyY2hpdmVG b3JtYXQgYXJjaER1bXBGb3JtYXQpOwogc3RhdGljIHZvaWQgYnVpbGRTaFNlY0xhYmVscyhQR2Nv bm4gKmNvbm4sCiAJCQkJCQkJIGNvbnN0IGNoYXIgKmNhdGFsb2dfbmFtZSwgT2lkIG9iamVjdElk LAogCQkJCQkJCSBjb25zdCBjaGFyICpvYmp0eXBlLCBjb25zdCBjaGFyICpvYmpuYW1lLAogCQkJ CQkJCSBQUUV4cEJ1ZmZlciBidWZmZXIpOwotc3RhdGljIFBHY29ubiAqY29ubmVjdERhdGFiYXNl KGNvbnN0IGNoYXIgKmRibmFtZSwKLQkJCQkJCQkgICBjb25zdCBjaGFyICpjb25uZWN0aW9uX3N0 cmluZywgY29uc3QgY2hhciAqcGdob3N0LAotCQkJCQkJCSAgIGNvbnN0IGNoYXIgKnBncG9ydCwg Y29uc3QgY2hhciAqcGd1c2VyLAotCQkJCQkJCSAgIHRyaXZhbHVlIHByb21wdF9wYXNzd29yZCwg Ym9vbCBmYWlsX29uX2Vycm9yKTsKLXN0YXRpYyBjaGFyICpjb25zdHJ1Y3RDb25uU3RyKGNvbnN0 IGNoYXIgKiprZXl3b3JkcywgY29uc3QgY2hhciAqKnZhbHVlcyk7Ci1zdGF0aWMgUEdyZXN1bHQg KmV4ZWN1dGVRdWVyeShQR2Nvbm4gKmNvbm4sIGNvbnN0IGNoYXIgKnF1ZXJ5KTsKIHN0YXRpYyB2 b2lkIGV4ZWN1dGVDb21tYW5kKFBHY29ubiAqY29ubiwgY29uc3QgY2hhciAqcXVlcnkpOwogc3Rh dGljIHZvaWQgZXhwYW5kX2RibmFtZV9wYXR0ZXJucyhQR2Nvbm4gKmNvbm4sIFNpbXBsZVN0cmlu Z0xpc3QgKnBhdHRlcm5zLAogCQkJCQkJCQkgICBTaW1wbGVTdHJpbmdMaXN0ICpuYW1lcyk7CiBz dGF0aWMgdm9pZCByZWFkX2R1bXBhbGxfZmlsdGVycyhjb25zdCBjaGFyICpmaWxlbmFtZSwgU2lt cGxlU3RyaW5nTGlzdCAqcGF0dGVybik7CitzdGF0aWMgdm9pZCBjcmVhdGVfb3Jfb3Blbl9kaXIo Y29uc3QgY2hhciAqZGlybmFtZSk7CiAKIHN0YXRpYyBjaGFyIHBnX2R1bXBfYmluW01BWFBHUEFU SF07CiBzdGF0aWMgY29uc3QgY2hhciAqcHJvZ25hbWU7CiBzdGF0aWMgUFFFeHBCdWZmZXIgcGdk dW1wb3B0czsKLXN0YXRpYyBjaGFyICpjb25uc3RyID0gIiI7CitzdGF0aWMgY29uc3QgY2hhciAq Y29ubnN0ciA9ICIiOwogc3RhdGljIGJvb2wgb3V0cHV0X2NsZWFuID0gZmFsc2U7CiBzdGF0aWMg Ym9vbCBza2lwX2FjbHMgPSBmYWxzZTsKIHN0YXRpYyBib29sIHZlcmJvc2UgPSBmYWxzZTsKQEAg LTEwNyw3ICsxMDcsNyBAQCBzdGF0aWMgaW50CW5vX3N1YnNjcmlwdGlvbnMgPSAwOwogc3RhdGlj IGludAlub190b2FzdF9jb21wcmVzc2lvbiA9IDA7CiBzdGF0aWMgaW50CW5vX3VubG9nZ2VkX3Rh YmxlX2RhdGEgPSAwOwogc3RhdGljIGludAlub19yb2xlX3Bhc3N3b3JkcyA9IDA7Ci1zdGF0aWMg aW50CXNlcnZlcl92ZXJzaW9uOworc3RhdGljIGludCBzZXJ2ZXJfdmVyc2lvbjsKIHN0YXRpYyBp bnQJbG9hZF92aWFfcGFydGl0aW9uX3Jvb3QgPSAwOwogc3RhdGljIGludAlvbl9jb25mbGljdF9k b19ub3RoaW5nID0gMDsKIApAQCAtMTIxLDggKzEyMSw2IEBAIHN0YXRpYyBjaGFyICpmaWxlbmFt ZSA9IE5VTEw7CiBzdGF0aWMgU2ltcGxlU3RyaW5nTGlzdCBkYXRhYmFzZV9leGNsdWRlX3BhdHRl cm5zID0ge05VTEwsIE5VTEx9Owogc3RhdGljIFNpbXBsZVN0cmluZ0xpc3QgZGF0YWJhc2VfZXhj bHVkZV9uYW1lcyA9IHtOVUxMLCBOVUxMfTsKIAotI2RlZmluZSBleGl0X25pY2VseShjb2RlKSBl eGl0KGNvZGUpCi0KIGludAogbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogewpAQCAtMTQ3 LDYgKzE0NSw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAkJeyJwYXNzd29yZCIs IG5vX2FyZ3VtZW50LCBOVUxMLCAnVyd9LAogCQl7Im5vLXByaXZpbGVnZXMiLCBub19hcmd1bWVu dCwgTlVMTCwgJ3gnfSwKIAkJeyJuby1hY2wiLCBub19hcmd1bWVudCwgTlVMTCwgJ3gnfSwKKwkJ eyJmb3JtYXQiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgJ0YnfSwKIAogCQkvKgogCQkgKiB0 aGUgZm9sbG93aW5nIG9wdGlvbnMgZG9uJ3QgaGF2ZSBhbiBlcXVpdmFsZW50IHNob3J0IG9wdGlv biBsZXR0ZXIKQEAgLTE4OCw2ICsxODcsOCBAQCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10p CiAJY2hhcgkgICAqcGdkYiA9IE5VTEw7CiAJY2hhcgkgICAqdXNlX3JvbGUgPSBOVUxMOwogCWNv bnN0IGNoYXIgKmR1bXBlbmNvZGluZyA9IE5VTEw7CisJQXJjaGl2ZUZvcm1hdCBhcmNoRHVtcEZv cm1hdCA9IGFyY2hOdWxsOworCWNvbnN0IGNoYXIgKmZvcm1hdE5hbWUgPSAicCI7CiAJdHJpdmFs dWUJcHJvbXB0X3Bhc3N3b3JkID0gVFJJX0RFRkFVTFQ7CiAJYm9vbAkJZGF0YV9vbmx5ID0gZmFs c2U7CiAJYm9vbAkJZ2xvYmFsc19vbmx5ID0gZmFsc2U7CkBAIC0yMzcsNyArMjM4LDcgQEAgbWFp bihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCiAJcGdkdW1wb3B0cyA9IGNyZWF0ZVBRRXhwQnVm ZmVyKCk7CiAKLQl3aGlsZSAoKGMgPSBnZXRvcHRfbG9uZyhhcmdjLCBhcmd2LCAiYWNkOkU6Zjpn aDpsOk9wOnJzUzp0VTp2d1d4IiwgbG9uZ19vcHRpb25zLCAmb3B0aW5kZXgpKSAhPSAtMSkKKwl3 aGlsZSAoKGMgPSBnZXRvcHRfbG9uZyhhcmdjLCBhcmd2LCAiYWNkOkU6ZjpGOmdoOmw6T3A6cnNT OnRVOnZ3V3giLCBsb25nX29wdGlvbnMsICZvcHRpbmRleCkpICE9IC0xKQogCXsKIAkJc3dpdGNo IChjKQogCQl7CkBAIC0yNjUsNyArMjY2LDkgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltd KQogCQkJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKHBnZHVtcG9wdHMsICIgLWYgIik7CiAJCQkJYXBw ZW5kU2hlbGxTdHJpbmcocGdkdW1wb3B0cywgZmlsZW5hbWUpOwogCQkJCWJyZWFrOwotCisJCQlj YXNlICdGJzoKKwkJCQlmb3JtYXROYW1lID0gcGdfc3RyZHVwKG9wdGFyZyk7CisJCQkJYnJlYWs7 CiAJCQljYXNlICdnJzoKIAkJCQlnbG9iYWxzX29ubHkgPSB0cnVlOwogCQkJCWJyZWFrOwpAQCAt NDE0LDYgKzQxNywyMSBAQCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJCWV4aXRfbmlj ZWx5KDEpOwogCX0KIAorCS8qIEdldCBmb3JtYXQgZm9yIGR1bXAuICovCisJYXJjaER1bXBGb3Jt YXQgPSBwYXJzZUR1bXBGb3JtYXQoZm9ybWF0TmFtZSk7CisKKwkvKgorCSAqIElmIG5vbi1wbGFp biBmb3JtYXQgaXMgc3BlY2lmaWVkIHRoZW4gd2UgbXVzdCBwcm92aWRlIHRoZQorCSAqIGZpbGUg bmFtZSB0byBjcmVhdGUgb25lIG1haW4gZGlyZWN0b3J5LgorCSAqLworCWlmIChhcmNoRHVtcEZv cm1hdCAhPSBhcmNoTnVsbCAmJgorCQkJKCFmaWxlbmFtZSB8fCBzdHJjbXAoZmlsZW5hbWUsICIi KSA9PSAwKSkKKwl7CisJCXBnX2xvZ19lcnJvcigib3B0aW9ucyAtRi8tLWZvcm1hdD1kfGN8dCBy ZXF1aXJlcyBvcHRpb24gLWYvLS1maWxlbmFtZSB3aXRoIG5vbi1lbXB0eSBzdHJpbmciKTsKKwkJ cGdfbG9nX2Vycm9yX2hpbnQoIlRyeSBcIiVzIC0taGVscFwiIGZvciBtb3JlIGluZm9ybWF0aW9u LiIsIHByb2duYW1lKTsKKwkJZXhpdF9uaWNlbHkoMSk7CisJfQorCiAJLyoKIAkgKiBJZiBwYXNz d29yZCB2YWx1ZXMgYXJlIG5vdCByZXF1aXJlZCBpbiB0aGUgZHVtcCwgc3dpdGNoIHRvIHVzaW5n CiAJICogcGdfcm9sZXMgd2hpY2ggaXMgZXF1YWxseSB1c2VmdWwsIGp1c3QgbW9yZSBsaWtlbHkg dG8gaGF2ZSB1bnJlc3RyaWN0ZWQKQEAgLTQ2OCw3ICs0ODYsOCBAQCBtYWluKGludCBhcmdjLCBj aGFyICphcmd2W10pCiAJaWYgKHBnZGIpCiAJewogCQljb25uID0gY29ubmVjdERhdGFiYXNlKHBn ZGIsIGNvbm5zdHIsIHBnaG9zdCwgcGdwb3J0LCBwZ3VzZXIsCi0JCQkJCQkJICAgcHJvbXB0X3Bh c3N3b3JkLCBmYWxzZSk7CisJCQkJCQkJICAgcHJvbXB0X3Bhc3N3b3JkLCBmYWxzZSwKKwkJCQkJ CQkgICBwcm9nbmFtZSwgJmNvbm5zdHIsICZzZXJ2ZXJfdmVyc2lvbik7CiAKIAkJaWYgKCFjb25u KQogCQkJcGdfZmF0YWwoImNvdWxkIG5vdCBjb25uZWN0IHRvIGRhdGFiYXNlIFwiJXNcIiIsIHBn ZGIpOwpAQCAtNDc2LDEwICs0OTUsMTIgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQog CWVsc2UKIAl7CiAJCWNvbm4gPSBjb25uZWN0RGF0YWJhc2UoInBvc3RncmVzIiwgY29ubnN0ciwg cGdob3N0LCBwZ3BvcnQsIHBndXNlciwKLQkJCQkJCQkgICBwcm9tcHRfcGFzc3dvcmQsIGZhbHNl KTsKKwkJCQkJCQkgICBwcm9tcHRfcGFzc3dvcmQsIGZhbHNlLAorCQkJCQkJCSAgIHByb2duYW1l LCAmY29ubnN0ciwgJnNlcnZlcl92ZXJzaW9uKTsKIAkJaWYgKCFjb25uKQogCQkJY29ubiA9IGNv bm5lY3REYXRhYmFzZSgidGVtcGxhdGUxIiwgY29ubnN0ciwgcGdob3N0LCBwZ3BvcnQsIHBndXNl ciwKLQkJCQkJCQkJICAgcHJvbXB0X3Bhc3N3b3JkLCB0cnVlKTsKKwkJCQkJCQkJICAgcHJvbXB0 X3Bhc3N3b3JkLCB0cnVlLAorCQkJCQkJCQkgICBwcm9nbmFtZSwgJmNvbm5zdHIsICZzZXJ2ZXJf dmVyc2lvbik7CiAKIAkJaWYgKCFjb25uKQogCQl7CkBAIC00OTcsOSArNTE4LDIzIEBAIG1haW4o aW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAkJCQkJCSAgICZkYXRhYmFzZV9leGNsdWRlX25hbWVz KTsKIAogCS8qCi0JICogT3BlbiB0aGUgb3V0cHV0IGZpbGUgaWYgcmVxdWlyZWQsIG90aGVyd2lz ZSB1c2Ugc3Rkb3V0CisJICogT3BlbiB0aGUgb3V0cHV0IGZpbGUgaWYgcmVxdWlyZWQsIG90aGVy d2lzZSB1c2Ugc3Rkb3V0LiAgSWYgcmVxdWlyZWQsCisJICogdGhlbiBjcmVhdGUgbmV3IGRpcmVj dG9yeSBhbmQgZ2xvYmFsLmRhdCBmaWxlLgogCSAqLwotCWlmIChmaWxlbmFtZSkKKwlpZiAoYXJj aER1bXBGb3JtYXQgIT0gYXJjaE51bGwpCisJeworCQljaGFyCXRvY19wYXRoW01BWFBHUEFUSF07 CisKKwkJLyogQ3JlYXRlIG5ldyBkaXJlY3RvcnkgYW5kIGFjY2VwdCB0aGUgZW1wdHkgZXhpc3Rp bmcgZGlyZWN0b3J5LiAqLworCQljcmVhdGVfb3Jfb3Blbl9kaXIoZmlsZW5hbWUpOworCisJCXNu cHJpbnRmKHRvY19wYXRoLCBNQVhQR1BBVEgsICIlcy9nbG9iYWwuZGF0IiwgZmlsZW5hbWUpOwor CisJCU9QRiA9IGZvcGVuKHRvY19wYXRoLCAidyIpOworCQlpZiAoIU9QRikKKwkJCXBnX2ZhdGFs KCJjb3VsZCBub3Qgb3BlbiBnbG9iYWwuZGF0IGZpbGU6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsK Kwl9CisJZWxzZSBpZiAoZmlsZW5hbWUpCiAJewogCQlPUEYgPSBmb3BlbihmaWxlbmFtZSwgUEdf QklOQVJZX1cpOwogCQlpZiAoIU9QRikKQEAgLTYwNyw3ICs2NDIsNyBAQCBtYWluKGludCBhcmdj LCBjaGFyICphcmd2W10pCiAJfQogCiAJaWYgKCFnbG9iYWxzX29ubHkgJiYgIXJvbGVzX29ubHkg JiYgIXRhYmxlc3BhY2VzX29ubHkpCi0JCWR1bXBEYXRhYmFzZXMoY29ubik7CisJCWR1bXBEYXRh YmFzZXMoY29ubiwgYXJjaER1bXBGb3JtYXQpOwogCiAJUFFmaW5pc2goY29ubik7CiAKQEAgLTYy MCw3ICs2NTUsNyBAQCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJCWZjbG9zZShPUEYp OwogCiAJCS8qIHN5bmMgdGhlIHJlc3VsdGluZyBmaWxlLCBlcnJvcnMgYXJlIG5vdCBmYXRhbCAq LwotCQlpZiAoZG9zeW5jKQorCQlpZiAoZG9zeW5jICYmIChhcmNoRHVtcEZvcm1hdCA9PSBhcmNo TnVsbCkpCiAJCQkodm9pZCkgZnN5bmNfZm5hbWUoZmlsZW5hbWUsIGZhbHNlKTsKIAl9CiAKQEAg LTYzNyw2ICs2NzIsOCBAQCBoZWxwKHZvaWQpCiAKIAlwcmludGYoXygiXG5HZW5lcmFsIG9wdGlv bnM6XG4iKSk7CiAJcHJpbnRmKF8oIiAgLWYsIC0tZmlsZT1GSUxFTkFNRSAgICAgICAgICBvdXRw dXQgZmlsZSBuYW1lXG4iKSk7CisJcHJpbnRmKF8oIiAgLUYsIC0tZm9ybWF0PWN8ZHx0fHAgICAg ICAgICBvdXRwdXQgZmlsZSBmb3JtYXQgKGN1c3RvbSwgZGlyZWN0b3J5LCB0YXIsXG4iCisJCQkJ IiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFpbiB0ZXh0IChkZWZhdWx0KSlcbiIpKTsK IAlwcmludGYoXygiICAtdiwgLS12ZXJib3NlICAgICAgICAgICAgICAgIHZlcmJvc2UgbW9kZVxu IikpOwogCXByaW50ZihfKCIgIC1WLCAtLXZlcnNpb24gICAgICAgICAgICAgICAgb3V0cHV0IHZl cnNpb24gaW5mb3JtYXRpb24sIHRoZW4gZXhpdFxuIikpOwogCXByaW50ZihfKCIgIC0tbG9jay13 YWl0LXRpbWVvdXQ9VElNRU9VVCAgZmFpbCBhZnRlciB3YWl0aW5nIFRJTUVPVVQgZm9yIGEgdGFi bGUgbG9ja1xuIikpOwpAQCAtMTQ4NywxMCArMTUyNCwxMyBAQCBleHBhbmRfZGJuYW1lX3BhdHRl cm5zKFBHY29ubiAqY29ubiwKICAqIER1bXAgY29udGVudHMgb2YgZGF0YWJhc2VzLgogICovCiBz dGF0aWMgdm9pZAotZHVtcERhdGFiYXNlcyhQR2Nvbm4gKmNvbm4pCitkdW1wRGF0YWJhc2VzKFBH Y29ubiAqY29ubiwgQXJjaGl2ZUZvcm1hdCBhcmNoRHVtcEZvcm1hdCkKIHsKIAlQR3Jlc3VsdCAg ICpyZXM7CiAJaW50CQkJaTsKKwljaGFyCQlkYl9zdWJkaXJbTUFYUEdQQVRIXTsKKwljaGFyCQlk YmZpbGVwYXRoW01BWFBHUEFUSF07CisJRklMRSAgICAgICAqbWFwX2ZpbGU7CiAKIAkvKgogCSAq IFNraXAgZGF0YWJhc2VzIG1hcmtlZCBub3QgZGF0YWxsb3djb25uLCBzaW5jZSB3ZSdkIGJlIHVu YWJsZSB0byBjb25uZWN0CkBAIC0xNTA0LDcgKzE1NDQsNyBAQCBkdW1wRGF0YWJhc2VzKFBHY29u biAqY29ubikKIAkgKiBkb2Vzbid0IGhhdmUgc29tZSBmYWlsdXJlIG1vZGUgd2l0aCAtLWNsZWFu LgogCSAqLwogCXJlcyA9IGV4ZWN1dGVRdWVyeShjb25uLAotCQkJCQkgICAiU0VMRUNUIGRhdG5h bWUgIgorCQkJCQkgICAiU0VMRUNUIGRhdG5hbWUsIG9pZCAiCiAJCQkJCSAgICJGUk9NIHBnX2Rh dGFiYXNlIGQgIgogCQkJCQkgICAiV0hFUkUgZGF0YWxsb3djb25uIEFORCBkYXRjb25ubGltaXQg IT0gLTIgIgogCQkJCQkgICAiT1JERVIgQlkgKGRhdG5hbWUgPD4gJ3RlbXBsYXRlMScpLCBkYXRu YW1lIik7CkBAIC0xNTEyLDkgKzE1NTIsMzMgQEAgZHVtcERhdGFiYXNlcyhQR2Nvbm4gKmNvbm4p CiAJaWYgKFBRbnR1cGxlcyhyZXMpID4gMCkKIAkJZnByaW50ZihPUEYsICItLVxuLS0gRGF0YWJh c2VzXG4tLVxuXG4iKTsKIAorCS8qCisJICogSWYgZGlyZWN0b3J5L3Rhci9jdXN0b20gZm9ybWF0 IGlzIHNwZWNpZmllZCB0aGVuIGNyZWF0ZSBhIHN1YmRpcmVjdG9yeQorCSAqIHVuZGVyIHRoZSBt YWluIGRpcmVjdG9yeSBhbmQgZWFjaCBkYXRhYmFzZSBkdW1wIGZpbGUgc3ViZGlyZWN0b3J5IHdp bGwKKwkgKiBiZSBjcmVhdGVkIHVuZGVyIHRoZSBzdWJkaXJlY3RvcnkgaW4gYXJjaGl2ZSBtb2Rl IGFzIHBlciBzaW5nbGUgZGIgcGdfZHVtcC4KKwkgKi8KKwlpZiAoYXJjaER1bXBGb3JtYXQgIT0g YXJjaE51bGwpCisJeworCQljaGFyCW1hcF9maWxlX3BhdGhbTUFYUEdQQVRIXTsKKworCQlzbnBy aW50ZihkYl9zdWJkaXIsIE1BWFBHUEFUSCwgIiVzL2RhdGFiYXNlcyIsIGZpbGVuYW1lKTsKKwor CQkvKiBDcmVhdGUgYSBzdWJkaXJlY3Rvcnkgd2l0aCAnZGF0YWJhc2VzJyBuYW1lIHVuZGVyIG1h aW4gZGlyZWN0b3J5LiAqLworCQlpZiAobWtkaXIoZGJfc3ViZGlyLCAwNzU1KSAhPSAwKQorCQkJ cGdfbG9nX2Vycm9yKCJjb3VsZCBub3QgY3JlYXRlIHN1YmRpcmVjdG9yeSBcIiVzXCI6ICVtIiwg ZGJfc3ViZGlyKTsKKworCQlzbnByaW50ZihtYXBfZmlsZV9wYXRoLCBNQVhQR1BBVEgsICIlcy9t YXAuZGF0IiwgZmlsZW5hbWUpOworCisJCS8qIENyZWF0ZSBhIG1hcCBmaWxlICh0byBzdG9yZSBk Ym9pZCBhbmQgZGJuYW1lKSAqLworCQltYXBfZmlsZSA9IGZvcGVuKG1hcF9maWxlX3BhdGgsICJ3 Iik7CisJCWlmICghbWFwX2ZpbGUpCisJCQlwZ19mYXRhbCgiY291bGQgbm90IG9wZW4gbWFwIGZp bGU6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKKwl9CisKIAlmb3IgKGkgPSAwOyBpIDwgUFFudHVw bGVzKHJlcyk7IGkrKykKIAl7CiAJCWNoYXIJICAgKmRibmFtZSA9IFBRZ2V0dmFsdWUocmVzLCBp LCAwKTsKKwkJY2hhcgkgICAqb2lkID0gUFFnZXR2YWx1ZShyZXMsIGksIDEpOwogCQljb25zdCBj aGFyICpjcmVhdGVfb3B0czsKIAkJaW50CQkJcmV0OwogCkBAIC0xNTI5LDkgKzE1OTMsMjIgQEAg ZHVtcERhdGFiYXNlcyhQR2Nvbm4gKmNvbm4pCiAJCQljb250aW51ZTsKIAkJfQogCisJCS8qCisJ CSAqIElmIHRoaXMgaXMgbm9uLXBsYWluIGR1bXAgZm9ybWF0LCB0aGVuIGFwcGVuZCBkYm9pZCBh bmQgZGJuYW1lIHRvCisJCSAqIHRoZSBtYXAuZGF0IGZpbGUuCisJCSAqLworCQlpZiAoYXJjaER1 bXBGb3JtYXQgIT0gYXJjaE51bGwpCisJCXsKKwkJCXNucHJpbnRmKGRiZmlsZXBhdGgsIE1BWFBH UEFUSCwgIlwiJXNcIi9cIiVzXCIiLCBkYl9zdWJkaXIsIG9pZCk7CisKKwkJCS8qIFB1dCBvbmUg bGluZSBlbnRyeSBmb3IgZGJvaWQgYW5kIGRibmFtZSBpbiBtYXAgZmlsZS4gKi8KKwkJCWZwcmlu dGYobWFwX2ZpbGUsICIlcyAlc1xuIiwgb2lkLCBwZ19zdHJkdXAoZGJuYW1lKSk7CisJCX0KKwog CQlwZ19sb2dfaW5mbygiZHVtcGluZyBkYXRhYmFzZSBcIiVzXCIiLCBkYm5hbWUpOwogCi0JCWZw cmludGYoT1BGLCAiLS1cbi0tIERhdGFiYXNlIFwiJXNcIiBkdW1wXG4tLVxuXG4iLCBkYm5hbWUp OworCQlpZiAoYXJjaER1bXBGb3JtYXQgPT0gYXJjaE51bGwpCisJCQlmcHJpbnRmKE9QRiwgIi0t XG4tLSBEYXRhYmFzZSBcIiVzXCIgZHVtcFxuLS1cblxuIiwgZGJuYW1lKTsKIAogCQkvKgogCQkg KiBXZSBhc3N1bWUgdGhhdCAidGVtcGxhdGUxIiBhbmQgInBvc3RncmVzIiBhbHJlYWR5IGV4aXN0 IGluIHRoZQpAQCAtMTU0OSwyMCArMTYyNiwyMSBAQCBkdW1wRGF0YWJhc2VzKFBHY29ubiAqY29u bikKIAkJCXsKIAkJCQljcmVhdGVfb3B0cyA9ICIiOwogCQkJCS8qIFNpbmNlIHBnX2R1bXAgd29u J3QgZW1pdCBhIFxjb25uZWN0IGNvbW1hbmQsIHdlIG11c3QgKi8KLQkJCQlmcHJpbnRmKE9QRiwg IlxcY29ubmVjdCAlc1xuXG4iLCBkYm5hbWUpOworCQkJCWlmIChhcmNoRHVtcEZvcm1hdCA9PSBh cmNoTnVsbCkKKwkJCQkJZnByaW50ZihPUEYsICJcXGNvbm5lY3QgJXNcblxuIiwgZGJuYW1lKTsK IAkJCX0KIAkJfQogCQllbHNlCiAJCQljcmVhdGVfb3B0cyA9ICItLWNyZWF0ZSI7CiAKLQkJaWYg KGZpbGVuYW1lKQorCQlpZiAoKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKSAmJiBmaWxlbmFt ZSkKIAkJCWZjbG9zZShPUEYpOwogCi0JCXJldCA9IHJ1blBnRHVtcChkYm5hbWUsIGNyZWF0ZV9v cHRzKTsKKwkJcmV0ID0gcnVuUGdEdW1wKGRibmFtZSwgY3JlYXRlX29wdHMsIGRiZmlsZXBhdGgs IGFyY2hEdW1wRm9ybWF0KTsKIAkJaWYgKHJldCAhPSAwKQogCQkJcGdfZmF0YWwoInBnX2R1bXAg ZmFpbGVkIG9uIGRhdGFiYXNlIFwiJXNcIiwgZXhpdGluZyIsIGRibmFtZSk7CiAKLQkJaWYgKGZp bGVuYW1lKQorCQlpZiAoKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKSAmJiBmaWxlbmFtZSkK IAkJewogCQkJT1BGID0gZm9wZW4oZmlsZW5hbWUsIFBHX0JJTkFSWV9BKTsKIAkJCWlmICghT1BG KQpAQCAtMTU3MSw2ICsxNjQ5LDEwIEBAIGR1bXBEYXRhYmFzZXMoUEdjb25uICpjb25uKQogCQl9 CiAJfQogCisJLyogQ2xvc2UgbWFwIGZpbGUgKi8KKwlpZiAoYXJjaER1bXBGb3JtYXQgIT0gYXJj aE51bGwpCisJCWZjbG9zZShtYXBfZmlsZSk7CisKIAlQUWNsZWFyKHJlcyk7CiB9CiAKQEAgLTE1 ODAsNyArMTY2Miw4IEBAIGR1bXBEYXRhYmFzZXMoUEdjb25uICpjb25uKQogICogUnVuIHBnX2R1 bXAgb24gZGJuYW1lLCB3aXRoIHNwZWNpZmllZCBvcHRpb25zLgogICovCiBzdGF0aWMgaW50Ci1y dW5QZ0R1bXAoY29uc3QgY2hhciAqZGJuYW1lLCBjb25zdCBjaGFyICpjcmVhdGVfb3B0cykKK3J1 blBnRHVtcChjb25zdCBjaGFyICpkYm5hbWUsIGNvbnN0IGNoYXIgKmNyZWF0ZV9vcHRzLCBjaGFy ICpkYmZpbGUsCisJCUFyY2hpdmVGb3JtYXQgYXJjaER1bXBGb3JtYXQpCiB7CiAJUFFFeHBCdWZm ZXJEYXRhIGNvbm5zdHJidWY7CiAJUFFFeHBCdWZmZXJEYXRhIGNtZDsKQEAgLTE1ODksMTcgKzE2 NzIsMzYgQEAgcnVuUGdEdW1wKGNvbnN0IGNoYXIgKmRibmFtZSwgY29uc3QgY2hhciAqY3JlYXRl X29wdHMpCiAJaW5pdFBRRXhwQnVmZmVyKCZjb25uc3RyYnVmKTsKIAlpbml0UFFFeHBCdWZmZXIo JmNtZCk7CiAKLQlwcmludGZQUUV4cEJ1ZmZlcigmY21kLCAiXCIlc1wiICVzICVzIiwgcGdfZHVt cF9iaW4sCi0JCQkJCSAgcGdkdW1wb3B0cy0+ZGF0YSwgY3JlYXRlX29wdHMpOwotCiAJLyoKLQkg KiBJZiB3ZSBoYXZlIGEgZmlsZW5hbWUsIHVzZSB0aGUgdW5kb2N1bWVudGVkIHBsYWluLWFwcGVu ZCBwZ19kdW1wCi0JICogZm9ybWF0LgorCSAqIElmIHRoaXMgaXMgbm9uLXBsYWluIGZvcm1hdCBk dW1wLCB0aGVuIGFwcGVuZCBmaWxlIG5hbWUgYW5kIGR1bXAKKwkgKiBmb3JtYXQgdG8gdGhlIHBn X2R1bXAgY29tbWFuZCB0byBnZXQgYXJjaGl2ZSBkdW1wLgogCSAqLwotCWlmIChmaWxlbmFtZSkK LQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmNtZCwgIiAtRmEgIik7CisJaWYgKGFyY2hEdW1wRm9y bWF0ICE9IGFyY2hOdWxsKQorCXsKKwkJcHJpbnRmUFFFeHBCdWZmZXIoJmNtZCwgIlwiJXNcIiAt ZiAlcyAlcyIsIHBnX2R1bXBfYmluLAorCQkJCQkJICBkYmZpbGUsIGNyZWF0ZV9vcHRzKTsKKwor CQlpZiAoYXJjaER1bXBGb3JtYXQgPT0gYXJjaERpcmVjdG9yeSkKKwkJCWFwcGVuZFBRRXhwQnVm ZmVyU3RyKCZjbWQsICIgIC0tZm9ybWF0PWRpcmVjdG9yeSAiKTsKKwkJZWxzZSBpZiAoYXJjaER1 bXBGb3JtYXQgPT0gYXJjaEN1c3RvbSkKKwkJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZjbWQsICIg IC0tZm9ybWF0PWN1c3RvbSAiKTsKKwkJZWxzZSBpZiAoYXJjaER1bXBGb3JtYXQgPT0gYXJjaFRh cikKKwkJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZjbWQsICIgIC0tZm9ybWF0PXRhciAiKTsKKwl9 CiAJZWxzZQotCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmY21kLCAiIC1GcCAiKTsKKwl7CisJCXBy aW50ZlBRRXhwQnVmZmVyKCZjbWQsICJcIiVzXCIgJXMgJXMiLCBwZ19kdW1wX2JpbiwKKwkJCQkJ CXBnZHVtcG9wdHMtPmRhdGEsIGNyZWF0ZV9vcHRzKTsKKworCQkvKgorCQkqIElmIHdlIGhhdmUg YSBmaWxlbmFtZSwgdXNlIHRoZSB1bmRvY3VtZW50ZWQgcGxhaW4tYXBwZW5kIHBnX2R1bXAKKwkJ KiBmb3JtYXQuCisJCSovCisJCWlmIChmaWxlbmFtZSkKKwkJCWFwcGVuZFBRRXhwQnVmZmVyU3Ry KCZjbWQsICIgLUZhICIpOworCQllbHNlCisJCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmY21kLCAi IC1GcCAiKTsKKwl9CiAKIAkvKgogCSAqIEFwcGVuZCB0aGUgZGF0YWJhc2UgbmFtZSB0byB0aGUg YWxyZWFkeS1jb25zdHJ1Y3RlZCBzdGVtIG9mIGNvbm5lY3Rpb24KQEAgLTE2NDksMjU2ICsxNzUx LDYgQEAgYnVpbGRTaFNlY0xhYmVscyhQR2Nvbm4gKmNvbm4sIGNvbnN0IGNoYXIgKmNhdGFsb2df bmFtZSwgT2lkIG9iamVjdElkLAogCWRlc3Ryb3lQUUV4cEJ1ZmZlcihzcWwpOwogfQogCi0vKgot ICogTWFrZSBhIGRhdGFiYXNlIGNvbm5lY3Rpb24gd2l0aCB0aGUgZ2l2ZW4gcGFyYW1ldGVycy4g IEFuCi0gKiBpbnRlcmFjdGl2ZSBwYXNzd29yZCBwcm9tcHQgaXMgYXV0b21hdGljYWxseSBpc3N1 ZWQgaWYgcmVxdWlyZWQuCi0gKgotICogSWYgZmFpbF9vbl9lcnJvciBpcyBmYWxzZSwgd2UgcmV0 dXJuIE5VTEwgd2l0aG91dCBwcmludGluZyBhbnkgbWVzc2FnZQotICogb24gZmFpbHVyZSwgYnV0 IHByZXNlcnZlIGFueSBwcm9tcHRlZCBwYXNzd29yZCBmb3IgdGhlIG5leHQgdHJ5LgotICoKLSAq IE9uIHN1Y2Nlc3MsIHRoZSBnbG9iYWwgdmFyaWFibGUgJ2Nvbm5zdHInIGlzIHNldCB0byBhIGNv bm5lY3Rpb24gc3RyaW5nCi0gKiBjb250YWluaW5nIHRoZSBvcHRpb25zIHVzZWQuCi0gKi8KLXN0 YXRpYyBQR2Nvbm4gKgotY29ubmVjdERhdGFiYXNlKGNvbnN0IGNoYXIgKmRibmFtZSwgY29uc3Qg Y2hhciAqY29ubmVjdGlvbl9zdHJpbmcsCi0JCQkJY29uc3QgY2hhciAqcGdob3N0LCBjb25zdCBj aGFyICpwZ3BvcnQsIGNvbnN0IGNoYXIgKnBndXNlciwKLQkJCQl0cml2YWx1ZSBwcm9tcHRfcGFz c3dvcmQsIGJvb2wgZmFpbF9vbl9lcnJvcikKLXsKLQlQR2Nvbm4JICAgKmNvbm47Ci0JYm9vbAkJ bmV3X3Bhc3M7Ci0JY29uc3QgY2hhciAqcmVtb3RldmVyc2lvbl9zdHI7Ci0JaW50CQkJbXlfdmVy c2lvbjsKLQljb25zdCBjaGFyICoqa2V5d29yZHMgPSBOVUxMOwotCWNvbnN0IGNoYXIgKip2YWx1 ZXMgPSBOVUxMOwotCVBRY29ubmluZm9PcHRpb24gKmNvbm5fb3B0cyA9IE5VTEw7Ci0Jc3RhdGlj IGNoYXIgKnBhc3N3b3JkID0gTlVMTDsKLQotCWlmIChwcm9tcHRfcGFzc3dvcmQgPT0gVFJJX1lF UyAmJiAhcGFzc3dvcmQpCi0JCXBhc3N3b3JkID0gc2ltcGxlX3Byb21wdCgiUGFzc3dvcmQ6ICIs IGZhbHNlKTsKLQotCS8qCi0JICogU3RhcnQgdGhlIGNvbm5lY3Rpb24uICBMb29wIHVudGlsIHdl IGhhdmUgYSBwYXNzd29yZCBpZiByZXF1ZXN0ZWQgYnkKLQkgKiBiYWNrZW5kLgotCSAqLwotCWRv Ci0JewotCQlpbnQJCQlhcmdjb3VudCA9IDY7Ci0JCVBRY29ubmluZm9PcHRpb24gKmNvbm5fb3B0 OwotCQljaGFyCSAgICplcnJfbXNnID0gTlVMTDsKLQkJaW50CQkJaSA9IDA7Ci0KLQkJZnJlZShr ZXl3b3Jkcyk7Ci0JCWZyZWUodmFsdWVzKTsKLQkJUFFjb25uaW5mb0ZyZWUoY29ubl9vcHRzKTsK LQotCQkvKgotCQkgKiBNZXJnZSB0aGUgY29ubmVjdGlvbiBpbmZvIGlucHV0cyBnaXZlbiBpbiBm b3JtIG9mIGNvbm5lY3Rpb24gc3RyaW5nCi0JCSAqIGFuZCBvdGhlciBvcHRpb25zLiAgRXhwbGlj aXRseSBkaXNjYXJkIGFueSBkYm5hbWUgdmFsdWUgaW4gdGhlCi0JCSAqIGNvbm5lY3Rpb24gc3Ry aW5nOyBvdGhlcndpc2UsIFBRY29ubmVjdGRiUGFyYW1zKCkgd291bGQgaW50ZXJwcmV0Ci0JCSAq IHRoYXQgdmFsdWUgYXMgYmVpbmcgaXRzZWxmIGEgY29ubmVjdGlvbiBzdHJpbmcuCi0JCSAqLwot CQlpZiAoY29ubmVjdGlvbl9zdHJpbmcpCi0JCXsKLQkJCWNvbm5fb3B0cyA9IFBRY29ubmluZm9Q YXJzZShjb25uZWN0aW9uX3N0cmluZywgJmVycl9tc2cpOwotCQkJaWYgKGNvbm5fb3B0cyA9PSBO VUxMKQotCQkJCXBnX2ZhdGFsKCIlcyIsIGVycl9tc2cpOwotCi0JCQlmb3IgKGNvbm5fb3B0ID0g Y29ubl9vcHRzOyBjb25uX29wdC0+a2V5d29yZCAhPSBOVUxMOyBjb25uX29wdCsrKQotCQkJewot CQkJCWlmIChjb25uX29wdC0+dmFsICE9IE5VTEwgJiYgY29ubl9vcHQtPnZhbFswXSAhPSAnXDAn ICYmCi0JCQkJCXN0cmNtcChjb25uX29wdC0+a2V5d29yZCwgImRibmFtZSIpICE9IDApCi0JCQkJ CWFyZ2NvdW50Kys7Ci0JCQl9Ci0KLQkJCWtleXdvcmRzID0gcGdfbWFsbG9jMCgoYXJnY291bnQg KyAxKSAqIHNpemVvZigqa2V5d29yZHMpKTsKLQkJCXZhbHVlcyA9IHBnX21hbGxvYzAoKGFyZ2Nv dW50ICsgMSkgKiBzaXplb2YoKnZhbHVlcykpOwotCi0JCQlmb3IgKGNvbm5fb3B0ID0gY29ubl9v cHRzOyBjb25uX29wdC0+a2V5d29yZCAhPSBOVUxMOyBjb25uX29wdCsrKQotCQkJewotCQkJCWlm IChjb25uX29wdC0+dmFsICE9IE5VTEwgJiYgY29ubl9vcHQtPnZhbFswXSAhPSAnXDAnICYmCi0J CQkJCXN0cmNtcChjb25uX29wdC0+a2V5d29yZCwgImRibmFtZSIpICE9IDApCi0JCQkJewotCQkJ CQlrZXl3b3Jkc1tpXSA9IGNvbm5fb3B0LT5rZXl3b3JkOwotCQkJCQl2YWx1ZXNbaV0gPSBjb25u X29wdC0+dmFsOwotCQkJCQlpKys7Ci0JCQkJfQotCQkJfQotCQl9Ci0JCWVsc2UKLQkJewotCQkJ a2V5d29yZHMgPSBwZ19tYWxsb2MwKChhcmdjb3VudCArIDEpICogc2l6ZW9mKCprZXl3b3Jkcykp OwotCQkJdmFsdWVzID0gcGdfbWFsbG9jMCgoYXJnY291bnQgKyAxKSAqIHNpemVvZigqdmFsdWVz KSk7Ci0JCX0KLQotCQlpZiAocGdob3N0KQotCQl7Ci0JCQlrZXl3b3Jkc1tpXSA9ICJob3N0IjsK LQkJCXZhbHVlc1tpXSA9IHBnaG9zdDsKLQkJCWkrKzsKLQkJfQotCQlpZiAocGdwb3J0KQotCQl7 Ci0JCQlrZXl3b3Jkc1tpXSA9ICJwb3J0IjsKLQkJCXZhbHVlc1tpXSA9IHBncG9ydDsKLQkJCWkr KzsKLQkJfQotCQlpZiAocGd1c2VyKQotCQl7Ci0JCQlrZXl3b3Jkc1tpXSA9ICJ1c2VyIjsKLQkJ CXZhbHVlc1tpXSA9IHBndXNlcjsKLQkJCWkrKzsKLQkJfQotCQlpZiAocGFzc3dvcmQpCi0JCXsK LQkJCWtleXdvcmRzW2ldID0gInBhc3N3b3JkIjsKLQkJCXZhbHVlc1tpXSA9IHBhc3N3b3JkOwot CQkJaSsrOwotCQl9Ci0JCWlmIChkYm5hbWUpCi0JCXsKLQkJCWtleXdvcmRzW2ldID0gImRibmFt ZSI7Ci0JCQl2YWx1ZXNbaV0gPSBkYm5hbWU7Ci0JCQlpKys7Ci0JCX0KLQkJa2V5d29yZHNbaV0g PSAiZmFsbGJhY2tfYXBwbGljYXRpb25fbmFtZSI7Ci0JCXZhbHVlc1tpXSA9IHByb2duYW1lOwot CQlpKys7Ci0KLQkJbmV3X3Bhc3MgPSBmYWxzZTsKLQkJY29ubiA9IFBRY29ubmVjdGRiUGFyYW1z KGtleXdvcmRzLCB2YWx1ZXMsIHRydWUpOwotCi0JCWlmICghY29ubikKLQkJCXBnX2ZhdGFsKCJj b3VsZCBub3QgY29ubmVjdCB0byBkYXRhYmFzZSBcIiVzXCIiLCBkYm5hbWUpOwotCi0JCWlmIChQ UXN0YXR1cyhjb25uKSA9PSBDT05ORUNUSU9OX0JBRCAmJgotCQkJUFFjb25uZWN0aW9uTmVlZHNQ YXNzd29yZChjb25uKSAmJgotCQkJIXBhc3N3b3JkICYmCi0JCQlwcm9tcHRfcGFzc3dvcmQgIT0g VFJJX05PKQotCQl7Ci0JCQlQUWZpbmlzaChjb25uKTsKLQkJCXBhc3N3b3JkID0gc2ltcGxlX3By b21wdCgiUGFzc3dvcmQ6ICIsIGZhbHNlKTsKLQkJCW5ld19wYXNzID0gdHJ1ZTsKLQkJfQotCX0g d2hpbGUgKG5ld19wYXNzKTsKLQotCS8qIGNoZWNrIHRvIHNlZSB0aGF0IHRoZSBiYWNrZW5kIGNv bm5lY3Rpb24gd2FzIHN1Y2Nlc3NmdWxseSBtYWRlICovCi0JaWYgKFBRc3RhdHVzKGNvbm4pID09 IENPTk5FQ1RJT05fQkFEKQotCXsKLQkJaWYgKGZhaWxfb25fZXJyb3IpCi0JCQlwZ19mYXRhbCgi JXMiLCBQUWVycm9yTWVzc2FnZShjb25uKSk7Ci0JCWVsc2UKLQkJewotCQkJUFFmaW5pc2goY29u bik7Ci0KLQkJCWZyZWUoa2V5d29yZHMpOwotCQkJZnJlZSh2YWx1ZXMpOwotCQkJUFFjb25uaW5m b0ZyZWUoY29ubl9vcHRzKTsKLQotCQkJcmV0dXJuIE5VTEw7Ci0JCX0KLQl9Ci0KLQkvKgotCSAq IE9rLCBjb25uZWN0ZWQgc3VjY2Vzc2Z1bGx5LiBSZW1lbWJlciB0aGUgb3B0aW9ucyB1c2VkLCBp biB0aGUgZm9ybSBvZiBhCi0JICogY29ubmVjdGlvbiBzdHJpbmcuCi0JICovCi0JY29ubnN0ciA9 IGNvbnN0cnVjdENvbm5TdHIoa2V5d29yZHMsIHZhbHVlcyk7Ci0KLQlmcmVlKGtleXdvcmRzKTsK LQlmcmVlKHZhbHVlcyk7Ci0JUFFjb25uaW5mb0ZyZWUoY29ubl9vcHRzKTsKLQotCS8qIENoZWNr IHZlcnNpb24gKi8KLQlyZW1vdGV2ZXJzaW9uX3N0ciA9IFBRcGFyYW1ldGVyU3RhdHVzKGNvbm4s ICJzZXJ2ZXJfdmVyc2lvbiIpOwotCWlmICghcmVtb3RldmVyc2lvbl9zdHIpCi0JCXBnX2ZhdGFs KCJjb3VsZCBub3QgZ2V0IHNlcnZlciB2ZXJzaW9uIik7Ci0Jc2VydmVyX3ZlcnNpb24gPSBQUXNl cnZlclZlcnNpb24oY29ubik7Ci0JaWYgKHNlcnZlcl92ZXJzaW9uID09IDApCi0JCXBnX2ZhdGFs KCJjb3VsZCBub3QgcGFyc2Ugc2VydmVyIHZlcnNpb24gXCIlc1wiIiwKLQkJCQkgcmVtb3RldmVy c2lvbl9zdHIpOwotCi0JbXlfdmVyc2lvbiA9IFBHX1ZFUlNJT05fTlVNOwotCi0JLyoKLQkgKiBX ZSBhbGxvdyB0aGUgc2VydmVyIHRvIGJlIGJhY2sgdG8gOS4yLCBhbmQgdXAgdG8gYW55IG1pbm9y IHJlbGVhc2Ugb2YKLQkgKiBvdXIgb3duIG1ham9yIHZlcnNpb24uICAoU2VlIGFsc28gdmVyc2lv biBjaGVjayBpbiBwZ19kdW1wLmMuKQotCSAqLwotCWlmIChteV92ZXJzaW9uICE9IHNlcnZlcl92 ZXJzaW9uCi0JCSYmIChzZXJ2ZXJfdmVyc2lvbiA8IDkwMjAwIHx8Ci0JCQkoc2VydmVyX3ZlcnNp b24gLyAxMDApID4gKG15X3ZlcnNpb24gLyAxMDApKSkKLQl7Ci0JCXBnX2xvZ19lcnJvcigiYWJv cnRpbmcgYmVjYXVzZSBvZiBzZXJ2ZXIgdmVyc2lvbiBtaXNtYXRjaCIpOwotCQlwZ19sb2dfZXJy b3JfZGV0YWlsKCJzZXJ2ZXIgdmVyc2lvbjogJXM7ICVzIHZlcnNpb246ICVzIiwKLQkJCQkJCQly ZW1vdGV2ZXJzaW9uX3N0ciwgcHJvZ25hbWUsIFBHX1ZFUlNJT04pOwotCQlleGl0X25pY2VseSgx KTsKLQl9Ci0KLQlQUWNsZWFyKGV4ZWN1dGVRdWVyeShjb25uLCBBTFdBWVNfU0VDVVJFX1NFQVJD SF9QQVRIX1NRTCkpOwotCi0JcmV0dXJuIGNvbm47Ci19Ci0KLS8qIC0tLS0tLS0tLS0KLSAqIENv bnN0cnVjdCBhIGNvbm5lY3Rpb24gc3RyaW5nIGZyb20gdGhlIGdpdmVuIGtleXdvcmQvdmFsdWUg cGFpcnMuIEl0IGlzCi0gKiB1c2VkIHRvIHBhc3MgdGhlIGNvbm5lY3Rpb24gb3B0aW9ucyB0byB0 aGUgcGdfZHVtcCBzdWJwcm9jZXNzLgotICoKLSAqIFRoZSBmb2xsb3dpbmcgcGFyYW1ldGVycyBh cmUgZXhjbHVkZWQ6Ci0gKglkYm5hbWUJCS0gdmFyaWVzIGluIGVhY2ggcGdfZHVtcCBpbnZvY2F0 aW9uCi0gKglwYXNzd29yZAktIGl0J3Mgbm90IHNlY3VyZSB0byBwYXNzIGEgcGFzc3dvcmQgb24g dGhlIGNvbW1hbmQgbGluZQotICoJZmFsbGJhY2tfYXBwbGljYXRpb25fbmFtZSAtIHdlJ2xsIGxl dCBwZ19kdW1wIHNldCBpdAotICogLS0tLS0tLS0tLQotICovCi1zdGF0aWMgY2hhciAqCi1jb25z dHJ1Y3RDb25uU3RyKGNvbnN0IGNoYXIgKiprZXl3b3JkcywgY29uc3QgY2hhciAqKnZhbHVlcykK LXsKLQlQUUV4cEJ1ZmZlciBidWYgPSBjcmVhdGVQUUV4cEJ1ZmZlcigpOwotCWNoYXIJICAgKmNv bm5zdHI7Ci0JaW50CQkJaTsKLQlib29sCQlmaXJzdGtleXdvcmQgPSB0cnVlOwotCi0JLyogQ29u c3RydWN0IGEgbmV3IGNvbm5lY3Rpb24gc3RyaW5nIGluIGtleT0ndmFsdWUnIGZvcm1hdC4gKi8K LQlmb3IgKGkgPSAwOyBrZXl3b3Jkc1tpXSAhPSBOVUxMOyBpKyspCi0JewotCQlpZiAoc3RyY21w KGtleXdvcmRzW2ldLCAiZGJuYW1lIikgPT0gMCB8fAotCQkJc3RyY21wKGtleXdvcmRzW2ldLCAi cGFzc3dvcmQiKSA9PSAwIHx8Ci0JCQlzdHJjbXAoa2V5d29yZHNbaV0sICJmYWxsYmFja19hcHBs aWNhdGlvbl9uYW1lIikgPT0gMCkKLQkJCWNvbnRpbnVlOwotCi0JCWlmICghZmlyc3RrZXl3b3Jk KQotCQkJYXBwZW5kUFFFeHBCdWZmZXJDaGFyKGJ1ZiwgJyAnKTsKLQkJZmlyc3RrZXl3b3JkID0g ZmFsc2U7Ci0JCWFwcGVuZFBRRXhwQnVmZmVyKGJ1ZiwgIiVzPSIsIGtleXdvcmRzW2ldKTsKLQkJ YXBwZW5kQ29ublN0clZhbChidWYsIHZhbHVlc1tpXSk7Ci0JfQotCi0JY29ubnN0ciA9IHBnX3N0 cmR1cChidWYtPmRhdGEpOwotCWRlc3Ryb3lQUUV4cEJ1ZmZlcihidWYpOwotCXJldHVybiBjb25u c3RyOwotfQotCi0vKgotICogUnVuIGEgcXVlcnksIHJldHVybiB0aGUgcmVzdWx0cywgZXhpdCBw cm9ncmFtIG9uIGZhaWx1cmUuCi0gKi8KLXN0YXRpYyBQR3Jlc3VsdCAqCi1leGVjdXRlUXVlcnko UEdjb25uICpjb25uLCBjb25zdCBjaGFyICpxdWVyeSkKLXsKLQlQR3Jlc3VsdCAgICpyZXM7Ci0K LQlwZ19sb2dfaW5mbygiZXhlY3V0aW5nICVzIiwgcXVlcnkpOwotCi0JcmVzID0gUFFleGVjKGNv bm4sIHF1ZXJ5KTsKLQlpZiAoIXJlcyB8fAotCQlQUXJlc3VsdFN0YXR1cyhyZXMpICE9IFBHUkVT X1RVUExFU19PSykKLQl7Ci0JCXBnX2xvZ19lcnJvcigicXVlcnkgZmFpbGVkOiAlcyIsIFBRZXJy b3JNZXNzYWdlKGNvbm4pKTsKLQkJcGdfbG9nX2Vycm9yX2RldGFpbCgiUXVlcnkgd2FzOiAlcyIs IHF1ZXJ5KTsKLQkJUFFmaW5pc2goY29ubik7Ci0JCWV4aXRfbmljZWx5KDEpOwotCX0KLQotCXJl dHVybiByZXM7Ci19Ci0KIC8qCiAgKiBBcyBhYm92ZSBmb3IgYSBTUUwgY29tbWFuZCAod2hpY2gg cmV0dXJucyBub3RoaW5nKS4KICAqLwpAQCAtMTk5NCwzICsxODQ2LDUwIEBAIHJlYWRfZHVtcGFs bF9maWx0ZXJzKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBTaW1wbGVTdHJpbmdMaXN0ICpwYXR0ZXJu KQogCiAJZmlsdGVyX2ZyZWUoJmZzdGF0ZSk7CiB9CisKKy8qCisgKiBjcmVhdGVfb3Jfb3Blbl9k aXIKKyAqCisgKiBUaGlzIHdpbGwgY3JlYXRlIGEgbmV3IGRpcmVjdG9yeSB3aXRoIGdpdmVuIG5h bWUuICBJZiB0aGVyZSBpcyBhbHJlYWR5IHNhbWUKKyAqIGVtcHR5IGRpcmVjdG9yeSBleGlzdCwg dGhlbiB1c2UgaXQuCisgKi8KK3N0YXRpYyB2b2lkCitjcmVhdGVfb3Jfb3Blbl9kaXIoY29uc3Qg Y2hhciAqZGlybmFtZSkKK3sKKwlzdHJ1Y3Qgc3RhdAkJc3Q7CisJYm9vbAkJCWlzX2VtcHR5ID0g ZmFsc2U7CisKKwkvKiB3ZSBhY2NlcHQgYW4gZW1wdHkgZXhpc3RpbmcgZGlyZWN0b3J5ICovCisJ aWYgKHN0YXQoZGlybmFtZSwgJnN0KSA9PSAwICYmIFNfSVNESVIoc3Quc3RfbW9kZSkpCisJewor CQlESVIJCSpkaXIgPSBvcGVuZGlyKGRpcm5hbWUpOworCisJCWlmIChkaXIpCisJCXsKKwkJCXN0 cnVjdCBkaXJlbnQJKmQ7CisKKwkJCWlzX2VtcHR5ID0gdHJ1ZTsKKworCQkJd2hpbGUgKGVycm5v ID0gMCwgKGQgPSByZWFkZGlyKGRpcikpKQorCQkJeworCQkJCWlmIChzdHJjbXAoZC0+ZF9uYW1l LCAiLiIpICE9IDAgJiYgc3RyY21wKGQtPmRfbmFtZSwgIi4uIikgIT0gMCkKKwkJCQl7CisJCQkJ CWlzX2VtcHR5ID0gZmFsc2U7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKworCQkJaWYgKGVy cm5vKQorCQkJCXBnX2ZhdGFsKCJjb3VsZCBub3QgcmVhZCBkaXJlY3RvcnkgXCIlc1wiOiAlbSIs CisJCQkJCQlkaXJuYW1lKTsKKworCQkJaWYgKGNsb3NlZGlyKGRpcikpCisJCQkJcGdfZmF0YWwo ImNvdWxkIG5vdCBjbG9zZSBkaXJlY3RvcnkgXCIlc1wiOiAlbSIsCisJCQkJCQlkaXJuYW1lKTsK KwkJfQorCX0KKworCWlmICghaXNfZW1wdHkgJiYgbWtkaXIoZGlybmFtZSwgMDcwMCkgPCAwKQor CQlwZ19mYXRhbCgiY291bGQgbm90IGNyZWF0ZSBkaXJlY3RvcnkgXCIlc1wiOiAlbSIsCisJCQkJ ZGlybmFtZSk7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGdfcmVzdG9yZS5jIGIv c3JjL2Jpbi9wZ19kdW1wL3BnX3Jlc3RvcmUuYwppbmRleCA4OGFlMzlkOTM4YS4uNGJlY2UyMDhk YjQgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9wZ19yZXN0b3JlLmMKKysrIGIvc3JjL2Jp bi9wZ19kdW1wL3BnX3Jlc3RvcmUuYwpAQCAtNDEsMjcgKzQxLDY3IEBACiAjaW5jbHVkZSAicG9z dGdyZXNfZmUuaCIKIAogI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4K ICNpZmRlZiBIQVZFX1RFUk1JT1NfSAogI2luY2x1ZGUgPHRlcm1pb3MuaD4KICNlbmRpZgogCisj aW5jbHVkZSAiY29tbW9uL2Nvbm5lY3QuaCIKKyNpbmNsdWRlICJjb21wcmVzc19pby5oIgorI2lu Y2x1ZGUgImNvbW1vbi9zdHJpbmcuaCIKKyNpbmNsdWRlICJjb21tb25fZHVtcGFsbF9yZXN0b3Jl LmgiCiAjaW5jbHVkZSAiZmVfdXRpbHMvb3B0aW9uX3V0aWxzLmgiCisjaW5jbHVkZSAiZmVfdXRp bHMvc3RyaW5nX3V0aWxzLmgiCiAjaW5jbHVkZSAiZmlsdGVyLmgiCiAjaW5jbHVkZSAiZ2V0b3B0 X2xvbmcuaCIKICNpbmNsdWRlICJwYXJhbGxlbC5oIgorI2luY2x1ZGUgInBnX2JhY2t1cF9hcmNo aXZlci5oIgogI2luY2x1ZGUgInBnX2JhY2t1cF91dGlscy5oIgogCit0eXBlZGVmIHN0cnVjdCBT aW1wbGVEYXRhYmFzZU9pZExpc3RDZWxsCit7CisJc3RydWN0IFNpbXBsZURhdGFiYXNlT2lkTGlz dENlbGwJKm5leHQ7CisJT2lkCQkJCQkJCQkJZGJfb2lkOworCWNvbnN0IGNoYXIJCQkJCQkJKmRi X25hbWU7Cit9IFNpbXBsZURhdGFiYXNlT2lkTGlzdENlbGw7CisKK3R5cGVkZWYgc3RydWN0IFNp bXBsZURhdGFiYXNlT2lkTGlzdAoreworCVNpbXBsZURhdGFiYXNlT2lkTGlzdENlbGwgKmhlYWQ7 CisJU2ltcGxlRGF0YWJhc2VPaWRMaXN0Q2VsbCAqdGFpbDsKK30gU2ltcGxlRGF0YWJhc2VPaWRM aXN0OworCitzdGF0aWMgdm9pZAorc2ltcGxlX2RiX29pZF9saXN0X2FwcGVuZChTaW1wbGVEYXRh YmFzZU9pZExpc3QgKmxpc3QsIE9pZCBkYl9vaWQsIGNvbnN0IGNoYXIgKmRibmFtZSk7CisKIHN0 YXRpYyB2b2lkIHVzYWdlKGNvbnN0IGNoYXIgKnByb2duYW1lKTsKIHN0YXRpYyB2b2lkIHJlYWRf cmVzdG9yZV9maWx0ZXJzKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBSZXN0b3JlT3B0aW9ucyAqb3B0 cyk7CitzdGF0aWMgYm9vbCBJc0ZpbGVFeGlzdHNJbkRpcmVjdG9yeShjb25zdCBjaGFyICpkaXIs IGNvbnN0IGNoYXIgKmZpbGVuYW1lKTsKK3N0YXRpYyBib29sIHJlc3RvcmVPbmVEYXRhYmFzZShj b25zdCBjaGFyICppbnB1dEZpbGVTcGVjLAorCQlSZXN0b3JlT3B0aW9ucyAqb3B0cywgaW50IG51 bVdvcmtlcnMsIGJvb2wgYXBwZW5kX2RhdGEpOworc3RhdGljIGludCBSZWFkT25lU3RhdGVtZW50 KFN0cmluZ0luZm8gaW5CdWYsIEZJTEUgKnBmaWxlKTsKK3N0YXRpYyBpbnQgcmVzdG9yZUFsbERh dGFiYXNlcyhQR2Nvbm4gKmNvbm4sIGNvbnN0IGNoYXIgKmR1bXBkaXJwYXRoLAorCVNpbXBsZVN0 cmluZ0xpc3QgZGJfZXhjbHVkZV9wYXR0ZXJucywgUmVzdG9yZU9wdGlvbnMgKm9wdHMsIGludCBu dW1Xb3JrZXJzKTsKK3N0YXRpYyB2b2lkIGV4ZWN1dGVfZ2xvYmFsX3NxbF9jb21tYW5kcyhQR2Nv bm4gKmNvbm4sIGNvbnN0IGNoYXIgKmR1bXBkaXJwYXRoLAorCQljb25zdCBjaGFyICpvdXRmaWxl KTsKK3N0YXRpYyBpbnQgZmlsdGVyX2RibmFtZXNfZm9yX3Jlc3RvcmUoUEdjb25uICpjb25uLAor CQlTaW1wbGVEYXRhYmFzZU9pZExpc3QgKmRibmFtZV9vaWRfbGlzdCwgU2ltcGxlU3RyaW5nTGlz dCBkYl9leGNsdWRlX3BhdHRlcm5zKTsKK3N0YXRpYyBpbnQgZ2V0X2RibmFtZV9vaWRfbGlzdF9m cm9tX21maWxlKGNvbnN0IGNoYXIgKmR1bXBkaXJwYXRoLAorCQlTaW1wbGVEYXRhYmFzZU9pZExp c3QgKmRibmFtZV9vaWRfbGlzdCk7CitzdGF0aWMgdm9pZCBzaW1wbGVfZGJfb2lkX2xpc3RfYXBw ZW5kKFNpbXBsZURhdGFiYXNlT2lkTGlzdCAqbGlzdCwgT2lkIGRiX29pZCwKKwkJY29uc3QgY2hh ciAqZGJuYW1lKTsKK3N0YXRpYyBib29sIGlzX2Z1bGxfcGF0dGVybihQR2Nvbm4gKmNvbm4sIGNv bnN0IGNoYXIgKnN0ciwgY29uc3QgY2hhciAqcHRybik7CitzdGF0aWMgdm9pZCBzaW1wbGVfc3Ry aW5nX2Z1bGxfbGlzdF9kZWxldGUoU2ltcGxlU3RyaW5nTGlzdCAqbGlzdCk7CitzdGF0aWMgdm9p ZCBzaW1wbGVfZGJfb2lkX2Z1bGxfbGlzdF9kZWxldGUoU2ltcGxlRGF0YWJhc2VPaWRMaXN0ICps aXN0KTsKK3N0YXRpYyB2b2lkIHNpbXBsZV9kYl9vaWRfbGlzdF9kZWxldGUoU2ltcGxlRGF0YWJh c2VPaWRMaXN0ICpsaXN0LAorCQlTaW1wbGVEYXRhYmFzZU9pZExpc3RDZWxsICpjZWxsLCBTaW1w bGVEYXRhYmFzZU9pZExpc3RDZWxsICpwcmV2KTsKIAogaW50CiBtYWluKGludCBhcmdjLCBjaGFy ICoqYXJndikKIHsKIAlSZXN0b3JlT3B0aW9ucyAqb3B0czsKIAlpbnQJCQljOwotCWludAkJCWV4 aXRfY29kZTsKIAlpbnQJCQludW1Xb3JrZXJzID0gMTsKLQlBcmNoaXZlICAgICpBSDsKIAljaGFy CSAgICppbnB1dEZpbGVTcGVjOwogCXN0YXRpYyBpbnQJZGlzYWJsZV90cmlnZ2VycyA9IDA7CiAJ c3RhdGljIGludAllbmFibGVfcm93X3NlY3VyaXR5ID0gMDsKQEAgLTc3LDExICsxMTcsMTQgQEAg bWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJc3RhdGljIGludAlzdHJpY3RfbmFtZXMgPSAw OwogCWJvb2wJCWRhdGFfb25seSA9IGZhbHNlOwogCWJvb2wJCXNjaGVtYV9vbmx5ID0gZmFsc2U7 CisJU2ltcGxlU3RyaW5nTGlzdCAgICBkYl9leGNsdWRlX3BhdHRlcm5zID0ge05VTEwsIE5VTEx9 OworCWJvb2wJCQkJZ2xvYmFsc19vbmx5ID0gZmFsc2U7CiAKIAlzdHJ1Y3Qgb3B0aW9uIGNtZG9w dHNbXSA9IHsKIAkJeyJjbGVhbiIsIDAsIE5VTEwsICdjJ30sCiAJCXsiY3JlYXRlIiwgMCwgTlVM TCwgJ0MnfSwKIAkJeyJkYXRhLW9ubHkiLCAwLCBOVUxMLCAnYSd9LAorCQl7Imdsb2JhbHMtb25s eSIsIDAsIE5VTEwsICdnJ30sCiAJCXsiZGJuYW1lIiwgMSwgTlVMTCwgJ2QnfSwKIAkJeyJleGl0 LW9uLWVycm9yIiwgMCwgTlVMTCwgJ2UnfSwKIAkJeyJleGNsdWRlLXNjaGVtYSIsIDEsIE5VTEws ICdOJ30sCkBAIC0xMjgsNiArMTcxLDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJ CXsibm8tc2VjdXJpdHktbGFiZWxzIiwgbm9fYXJndW1lbnQsICZub19zZWN1cml0eV9sYWJlbHMs IDF9LAogCQl7Im5vLXN1YnNjcmlwdGlvbnMiLCBub19hcmd1bWVudCwgJm5vX3N1YnNjcmlwdGlv bnMsIDF9LAogCQl7ImZpbHRlciIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCA0fSwKKwkJeyJl eGNsdWRlLWRhdGFiYXNlIiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsIDZ9LAogCiAJCXtOVUxM LCAwLCBOVUxMLCAwfQogCX07CkBAIC0xNTYsNyArMjAwLDcgQEAgbWFpbihpbnQgYXJnYywgY2hh ciAqKmFyZ3YpCiAJCX0KIAl9CiAKLQl3aGlsZSAoKGMgPSBnZXRvcHRfbG9uZyhhcmdjLCBhcmd2 LCAiYWNDZDplZjpGOmg6STpqOmxMOm46TjpPcDpQOlJzUzp0OlQ6VTp2d1d4MSIsCisJd2hpbGUg KChjID0gZ2V0b3B0X2xvbmcoYXJnYywgYXJndiwgImFBY0NkOmVmOkY6Z2g6STpqOmxMOm46TjpP cDpQOlJzUzp0OlQ6VTp2d1d4MSIsCiAJCQkJCQkJY21kb3B0cywgTlVMTCkpICE9IC0xKQogCXsK IAkJc3dpdGNoIChjKQpAQCAtMTgzLDExICsyMjcsMTQgQEAgbWFpbihpbnQgYXJnYywgY2hhciAq KmFyZ3YpCiAJCQkJaWYgKHN0cmxlbihvcHRhcmcpICE9IDApCiAJCQkJCW9wdHMtPmZvcm1hdE5h bWUgPSBwZ19zdHJkdXAob3B0YXJnKTsKIAkJCQlicmVhazsKKwkJCWNhc2UgJ2cnOgorCQkJCS8q IHJlc3RvcmUgb25seSBnbG9iYWwuZGF0IGZpbGUgZnJvbSBkaXJlY3RvcnkgKi8KKwkJCQlnbG9i YWxzX29ubHkgPSB0cnVlOworCQkJCWJyZWFrOwogCQkJY2FzZSAnaCc6CiAJCQkJaWYgKHN0cmxl bihvcHRhcmcpICE9IDApCiAJCQkJCW9wdHMtPmNwYXJhbXMucGdob3N0ID0gcGdfc3RyZHVwKG9w dGFyZyk7CiAJCQkJYnJlYWs7Ci0KIAkJCWNhc2UgJ2onOgkJCS8qIG51bWJlciBvZiByZXN0b3Jl IGpvYnMgKi8KIAkJCQlpZiAoIW9wdGlvbl9wYXJzZV9pbnQob3B0YXJnLCAiLWovLS1qb2JzIiwg MSwKIAkJCQkJCQkJCSAgUEdfTUFYX0pPQlMsCkBAIC0zMDIsNiArMzQ5LDEwIEBAIG1haW4oaW50 IGFyZ2MsIGNoYXIgKiphcmd2KQogCQkJCQlleGl0KDEpOwogCQkJCW9wdHMtPmV4aXRfb25fZXJy b3IgPSB0cnVlOwogCQkJCWJyZWFrOworCQkJY2FzZSA2OgorCQkJCS8qIGxpc3Qgb2YgZGF0YWJh c2VzIHBhdHRlcm5zIHRob3NlIG5lZWRzIHRvIHNraXAgd2hpbGUgcmVzdG9yaW5nICovCisJCQkJ c2ltcGxlX3N0cmluZ19saXN0X2FwcGVuZCgmZGJfZXhjbHVkZV9wYXR0ZXJucywgb3B0YXJnKTsK KwkJCQlicmVhazsKIAogCQkJZGVmYXVsdDoKIAkJCQkvKiBnZXRvcHRfbG9uZyBhbHJlYWR5IGVt aXR0ZWQgYSBjb21wbGFpbnQgKi8KQEAgLTMyOSw2ICszODAsMTMgQEAgbWFpbihpbnQgYXJnYywg Y2hhciAqKmFyZ3YpCiAJaWYgKCFvcHRzLT5jcGFyYW1zLmRibmFtZSAmJiAhb3B0cy0+ZmlsZW5h bWUgJiYgIW9wdHMtPnRvY1N1bW1hcnkpCiAJCXBnX2ZhdGFsKCJvbmUgb2YgLWQvLS1kYm5hbWUg YW5kIC1mLy0tZmlsZSBtdXN0IGJlIHNwZWNpZmllZCIpOwogCisJaWYgKGRiX2V4Y2x1ZGVfcGF0 dGVybnMuaGVhZCAhPSBOVUxMICYmIGdsb2JhbHNfb25seSkKKwl7CisJCXBnX2xvZ19lcnJvcigi b3B0aW9uIC0tZXhjbHVkZS1kYXRhYmFzZSBjYW5ub3QgYmUgdXNlZCB0b2dldGhlciB3aXRoIC1n Ly0tZ2xvYmFscy1vbmx5Iik7CisJCXBnX2xvZ19lcnJvcl9oaW50KCJUcnkgXCIlcyAtLWhlbHBc IiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iLCBwcm9nbmFtZSk7CisJCWV4aXRfbmljZWx5KDEpOwor CX0KKwogCS8qIFNob3VsZCBnZXQgYXQgbW9zdCBvbmUgb2YgLWQgYW5kIC1mLCBlbHNlIHVzZXIg aXMgY29uZnVzZWQgKi8KIAlpZiAob3B0cy0+Y3BhcmFtcy5kYm5hbWUpCiAJewpAQCAtMzgzLDI4 ICs0NDEsODAgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAKIAlpZiAob3B0cy0+Zm9y bWF0TmFtZSkKIAl7Ci0JCXN3aXRjaCAob3B0cy0+Zm9ybWF0TmFtZVswXSkKKwkJb3B0cy0+Zm9y bWF0ID0gcGFyc2VEdW1wRm9ybWF0KG9wdHMtPmZvcm1hdE5hbWUpOworCX0KKworCS8qCisJICog SWYgdG9jLmRhdCBmaWxlIGRvZXMgbm90IHByZXNlbnQgaW4gY3VycmVudCBwYXRoLCB0aGVuIGNo ZWNrIGZvcgorCSAqIGdsb2JhbC5kYXQgYW5kIG1hcC5kYXQgZmlsZXMuICBJZiBib3RoIGZpbGVz IGFyZSBwcmVzZW50LCB0aGVuCisJICogcmVzdG9yZSBhbGwgdGhlIGRhdGFiYXNlcyBmcm9tIG1h cC5kYXQgZmlsZSBsaXN0IGFuZCBza2lwIHJlc3RvcmluZyBmb3IKKwkgKiAtLWV4Y2x1ZGUtZGF0 YWJhc2UgcGF0dGVybnMuCisJICovCisJaWYgKGlucHV0RmlsZVNwZWMgIT0gTlVMTCAmJgorCQkJ IUlzRmlsZUV4aXN0c0luRGlyZWN0b3J5KGlucHV0RmlsZVNwZWMsICJ0b2MuZGF0IikpCisJewor CQkvKiBJZiBnbG9iYWwuZGF0IGFuZCBtYXAuZGF0IGFyZSBleGlzdCwgdGhlbiBwcm9jZXMgdGhl bS4gKi8KKwkJaWYgKElzRmlsZUV4aXN0c0luRGlyZWN0b3J5KHBnX3N0cmR1cChpbnB1dEZpbGVT cGVjKSwgImdsb2JhbC5kYXQiKQorCQkJCSYmIElzRmlsZUV4aXN0c0luRGlyZWN0b3J5KHBnX3N0 cmR1cChpbnB1dEZpbGVTcGVjKSwgIm1hcC5kYXQiKSkKIAkJewotCQkJY2FzZSAnYyc6Ci0JCQlj YXNlICdDJzoKLQkJCQlvcHRzLT5mb3JtYXQgPSBhcmNoQ3VzdG9tOwotCQkJCWJyZWFrOworCQkJ UEdjb25uCSpjb25uID0gTlVMTDsgLyogQ29ubmVjdGlvbiB0byByZXN0b3JlIGdsb2JhbCBzcWwg Y29tbWFuZHMuICovCisJCQlpbnQJCWV4aXRfY29kZSA9IDA7CisKKwkJCS8qCisJCQkgKiBUbyBy ZXN0b3JlIG11bHRpcGxlIGRhdGFiYXNlcywgY3JlYXRlIGRhdGFiYXNlIG9wdGlvbiBzaG91bGQg YmUKKwkJCSAqIHNwZWNpZmllZC4KKwkJCSAqLworCQkJaWYgKG9wdHMtPmNyZWF0ZURCICE9IDEp CisJCQkJcGdfZmF0YWwoIm9wdGlvbiAtQy8tLWNyZWF0ZSBzaG91bGQgYmUgc3BlY2lmaWVkIHdo ZW4gdXNpbmcgZHVtcCBvZiBwZ19kdW1wYWxsIik7CisKKwkJCS8qIENvbm5lY3QgdG8gZGF0YWJh c2UgdG8gZXhlY3V0ZSBnbG9iYWwgc3FsIGNvbW1hbmRzIGZyb20gZ2xvYmFsLmRhdCBmaWxlLiAq LworCQkJaWYgKG9wdHMtPmNwYXJhbXMuZGJuYW1lKQorCQkJeworCQkJCWNvbm4gPSBjb25uZWN0 RGF0YWJhc2Uob3B0cy0+Y3BhcmFtcy5kYm5hbWUsIE5VTEwsIG9wdHMtPmNwYXJhbXMucGdob3N0 LAorCQkJCQkJb3B0cy0+Y3BhcmFtcy5wZ3BvcnQsIG9wdHMtPmNwYXJhbXMudXNlcm5hbWUsIFRS SV9ERUZBVUxULCBmYWxzZSwKKwkJCQkJCXByb2duYW1lLCBOVUxMLCBOVUxMKTsKIAotCQkJY2Fz ZSAnZCc6Ci0JCQljYXNlICdEJzoKLQkJCQlvcHRzLT5mb3JtYXQgPSBhcmNoRGlyZWN0b3J5Owot CQkJCWJyZWFrOworCQkJCWlmICghY29ubikKKwkJCQkJcGdfZmF0YWwoImNvdWxkIG5vdCBjb25u ZWN0IHRvIGRhdGFiYXNlIFwiJXNcIiIsIG9wdHMtPmNwYXJhbXMuZGJuYW1lKTsKKwkJCX0KIAot CQkJY2FzZSAndCc6Ci0JCQljYXNlICdUJzoKLQkJCQlvcHRzLT5mb3JtYXQgPSBhcmNoVGFyOwot CQkJCWJyZWFrOworCQkJLyogT3BlbiBnbG9iYWwuZGF0IGZpbGUgYW5kIGV4ZWN1dGUvYXBwZW5k IGFsbCB0aGUgZ2xvYmFsIHNxbCBjb21tYW5kcy4gKi8KKwkJCWV4ZWN1dGVfZ2xvYmFsX3NxbF9j b21tYW5kcyhjb25uLCBpbnB1dEZpbGVTcGVjLCBvcHRzLT5maWxlbmFtZSk7CiAKLQkJCWRlZmF1 bHQ6Ci0JCQkJcGdfZmF0YWwoInVucmVjb2duaXplZCBhcmNoaXZlIGZvcm1hdCBcIiVzXCI7IHBs ZWFzZSBzcGVjaWZ5IFwiY1wiLCBcImRcIiwgb3IgXCJ0XCIiLAotCQkJCQkJIG9wdHMtPmZvcm1h dE5hbWUpOwotCQl9Ci0JfQorCQkJLyogSWYgZ2xvYmFscy1vbmx5LCB0aGVuIHJldHVybiBmcm9t IGhlcmUuICovCisJCQlpZiAoZ2xvYmFsc19vbmx5KQorCQkJeworCQkJCWlmIChjb25uKQorCQkJ CQlQUWZpbmlzaChjb25uKTsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQkvKiBOb3cgcmVzdG9y ZSBhbGwgdGhlIGRhdGFiYXNlcyBmcm9tIG1hcC5kYXQgZmlsZS4gKi8KKwkJCQlleGl0X2NvZGUg PSByZXN0b3JlQWxsRGF0YWJhc2VzKGNvbm4sIGlucHV0RmlsZVNwZWMsIGRiX2V4Y2x1ZGVfcGF0 dGVybnMsCisJCQkJCQlvcHRzLCBudW1Xb3JrZXJzKTsKKwkJCX0KKworCQkJLyogRnJlZSBkYiBw YXR0ZXJuIGxpc3QuICovCisJCQlzaW1wbGVfc3RyaW5nX2Z1bGxfbGlzdF9kZWxldGUoJmRiX2V4 Y2x1ZGVfcGF0dGVybnMpOworCisJCQlyZXR1cm4gZXhpdF9jb2RlOworCQl9LyogZW5kIGlmICov CisJfS8qIGVuZCBpZiAqLworCisJcmV0dXJuIHJlc3RvcmVPbmVEYXRhYmFzZShpbnB1dEZpbGVT cGVjLCBvcHRzLCBudW1Xb3JrZXJzLCBmYWxzZSk7Cit9CisKKy8qCisgKiByZXN0b3JlT25lRGF0 YWJhc2UKKyAqCisgKiBUaGlzIHdpbGwgcmVzdG9yZSBvbmUgZGF0YWJhc2UgdXNpbmcgdG9jLmRh dCBmaWxlLgorICovCitzdGF0aWMgYm9vbAorcmVzdG9yZU9uZURhdGFiYXNlKGNvbnN0IGNoYXIg KmlucHV0RmlsZVNwZWMsIFJlc3RvcmVPcHRpb25zICpvcHRzLAorCQlpbnQgbnVtV29ya2Vycywg Ym9vbCBhcHBlbmRfZGF0YSkKK3sKKwlBcmNoaXZlCQkqQUg7CisJYm9vbAkJZXhpdF9jb2RlOwog CiAJQUggPSBPcGVuQXJjaGl2ZShpbnB1dEZpbGVTcGVjLCBvcHRzLT5mb3JtYXQpOwogCkBAIC00 MzEsMTEgKzU0MSwxMSBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAlBSC0+bnVtV29y a2VycyA9IG51bVdvcmtlcnM7CiAKIAlpZiAob3B0cy0+dG9jU3VtbWFyeSkKLQkJUHJpbnRUT0NT dW1tYXJ5KEFIKTsKKwkJUHJpbnRUT0NTdW1tYXJ5KEFILCBhcHBlbmRfZGF0YSk7CiAJZWxzZQog CXsKIAkJUHJvY2Vzc0FyY2hpdmVSZXN0b3JlT3B0aW9ucyhBSCk7Ci0JCVJlc3RvcmVBcmNoaXZl KEFIKTsKKwkJUmVzdG9yZUFyY2hpdmUoQUgsIGFwcGVuZF9kYXRhKTsKIAl9CiAKIAkvKiBkb25l LCBwcmludCBhIHN1bW1hcnkgb2YgaWdub3JlZCBlcnJvcnMgKi8KQEAgLTQ3MSw2ICs1ODEsNyBA QCB1c2FnZShjb25zdCBjaGFyICpwcm9nbmFtZSkKIAlwcmludGYoXygiICAtYywgLS1jbGVhbiAg ICAgICAgICAgICAgICAgIGNsZWFuIChkcm9wKSBkYXRhYmFzZSBvYmplY3RzIGJlZm9yZSByZWNy ZWF0aW5nXG4iKSk7CiAJcHJpbnRmKF8oIiAgLUMsIC0tY3JlYXRlICAgICAgICAgICAgICAgICBj cmVhdGUgdGhlIHRhcmdldCBkYXRhYmFzZVxuIikpOwogCXByaW50ZihfKCIgIC1lLCAtLWV4aXQt b24tZXJyb3IgICAgICAgICAgZXhpdCBvbiBlcnJvciwgZGVmYXVsdCBpcyB0byBjb250aW51ZVxu IikpOworCXByaW50ZihfKCIgIC1nLCAtLWdsb2JhbHMtb25seSAgICAgICAgICAgcmVzdG9yZSBv bmx5IGdsb2JhbCBvYmplY3RzLCBubyBkYXRhYmFzZXNcbiIpKTsKIAlwcmludGYoXygiICAtSSwg LS1pbmRleD1OQU1FICAgICAgICAgICAgIHJlc3RvcmUgbmFtZWQgaW5kZXhcbiIpKTsKIAlwcmlu dGYoXygiICAtaiwgLS1qb2JzPU5VTSAgICAgICAgICAgICAgIHVzZSB0aGlzIG1hbnkgcGFyYWxs ZWwgam9icyB0byByZXN0b3JlXG4iKSk7CiAJcHJpbnRmKF8oIiAgLUwsIC0tdXNlLWxpc3Q9RklM RU5BTUUgICAgICB1c2UgdGFibGUgb2YgY29udGVudHMgZnJvbSB0aGlzIGZpbGUgZm9yXG4iCkBA IC00ODMsNiArNTk0LDcgQEAgdXNhZ2UoY29uc3QgY2hhciAqcHJvZ25hbWUpCiAJcHJpbnRmKF8o IiAgLVMsIC0tc3VwZXJ1c2VyPU5BTUUgICAgICAgICBzdXBlcnVzZXIgdXNlciBuYW1lIHRvIHVz ZSBmb3IgZGlzYWJsaW5nIHRyaWdnZXJzXG4iKSk7CiAJcHJpbnRmKF8oIiAgLXQsIC0tdGFibGU9 TkFNRSAgICAgICAgICAgICByZXN0b3JlIG5hbWVkIHJlbGF0aW9uICh0YWJsZSwgdmlldywgZXRj LilcbiIpKTsKIAlwcmludGYoXygiICAtVCwgLS10cmlnZ2VyPU5BTUUgICAgICAgICAgIHJlc3Rv cmUgbmFtZWQgdHJpZ2dlclxuIikpOworCXByaW50ZihfKCIgIC0tZXhjbHVkZS1kYXRhYmFzZT1Q QVRURVJOICAgZXhjbHVkZSBkYXRhYmFzZXMgd2hvc2UgbmFtZSBtYXRjaGVzIHdpdGggcGF0dGVy blxuIikpOwogCXByaW50ZihfKCIgIC14LCAtLW5vLXByaXZpbGVnZXMgICAgICAgICAgc2tpcCBy ZXN0b3JhdGlvbiBvZiBhY2Nlc3MgcHJpdmlsZWdlcyAoZ3JhbnQvcmV2b2tlKVxuIikpOwogCXBy aW50ZihfKCIgIC0xLCAtLXNpbmdsZS10cmFuc2FjdGlvbiAgICAgcmVzdG9yZSBhcyBhIHNpbmds ZSB0cmFuc2FjdGlvblxuIikpOwogCXByaW50ZihfKCIgIC0tZGlzYWJsZS10cmlnZ2VycyAgICAg ICAgICAgZGlzYWJsZSB0cmlnZ2VycyBkdXJpbmcgZGF0YS1vbmx5IHJlc3RvcmVcbiIpKTsKQEAg LTYyMSwzICs3MzMsNTI5IEBAIHJlYWRfcmVzdG9yZV9maWx0ZXJzKGNvbnN0IGNoYXIgKmZpbGVu YW1lLCBSZXN0b3JlT3B0aW9ucyAqb3B0cykKIAogCWZpbHRlcl9mcmVlKCZmc3RhdGUpOwogfQor CisvKgorICogSXNGaWxlRXhpc3RzSW5EaXJlY3RvcnkKKyAqCisgKiBSZXR1cm5zIHRydWUgaWYg ZmlsZSBleGlzdCBpbiBjdXJyZW50IGRpcmVjdG9yeS4KKyAqLworc3RhdGljIGJvb2wKK0lzRmls ZUV4aXN0c0luRGlyZWN0b3J5KGNvbnN0IGNoYXIgKmRpciwgY29uc3QgY2hhciAqZmlsZW5hbWUp Cit7CisJc3RydWN0IHN0YXQJCQlzdDsKKwljaGFyCQkJCWJ1ZltNQVhQR1BBVEhdOworCisJaWYg KHNucHJpbnRmKGJ1ZiwgTUFYUEdQQVRILCAiJXMvJXMiLCBkaXIsIGZpbGVuYW1lKSA+PSBNQVhQ R1BBVEgpCisJCXBnX2ZhdGFsKCJkaXJlY3RvcnkgbmFtZSB0b28gbG9uZzogXCIlc1wiIiwgZGly KTsKKworCXJldHVybiAoc3RhdChidWYsICZzdCkgPT0gMCAmJiBTX0lTUkVHKHN0LnN0X21vZGUp KTsKK30KKworLyoKKyAqIFJlYWRPbmVTdGF0ZW1lbnQKKyAqCisgKiBUaGlzIHdpbGwgc3RhcnQg cmVhZGluZyBmcm9tIHBhc3NlZCBmaWxlIHBvaW50ZXIgdXNpbmcgZmdldGMgYW5kIHJlYWQgdGls bAorICogc2VtaWNvbG9uKHNxbCBzdGF0ZW1lbnQgdGVybWluYXRvciBmb3IgZ2xvYmFsLnNxbCBm aWxlKQorICoKKyAqIEVPRiBpcyByZXR1cm5lZCBpZiBlbmQtb2YtZmlsZSBpbnB1dCBpcyBzZWVu OyB0aW1lIHRvIHNodXQgZG93bi4KKyAqLworCitzdGF0aWMgaW50CitSZWFkT25lU3RhdGVtZW50 KFN0cmluZ0luZm8gaW5CdWYsIEZJTEUgKnBmaWxlKQoreworCWludAkJCWM7IC8qIGNoYXJhY3Rl ciByZWFkIGZyb20gZ2V0YygpICovCisKKwlyZXNldFN0cmluZ0luZm8oaW5CdWYpOworCisJLyoK KwkgKiBSZWFkIGNoYXJhY3RlcnMgdW50aWwgRU9GIG9yIHRoZSBhcHByb3ByaWF0ZSBkZWxpbWl0 ZXIgaXMgc2Vlbi4KKwkgKi8KKwl3aGlsZSAoKGMgPSBmZ2V0YyhwZmlsZSkpICE9IEVPRikKKwl7 CisJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGluQnVmLCAoY2hhcikgYyk7CisKKwkJaWYgKGMgPT0g J1xuJykKKwkJeworCQkJaWYoaW5CdWYtPmxlbiA+IDEgJiYKKwkJCQkJaW5CdWYtPmRhdGFbaW5C dWYtPmxlbiAtIDJdID09ICc7JykKKwkJCQlicmVhazsKKwkJCWVsc2UKKwkJCQljb250aW51ZTsK KwkJfQorCX0KKworCS8qIE5vIGlucHV0IGJlZm9yZSBFT0Ygc2lnbmFsIG1lYW5zIHRpbWUgdG8g cXVpdC4gKi8KKwlpZiAoYyA9PSBFT0YgJiYgaW5CdWYtPmxlbiA9PSAwKQorCQlyZXR1cm4gRU9G OworCisJLyogQWRkICdcMCcgdG8gbWFrZSBpdCBsb29rIHRoZSBzYW1lIGFzIG1lc3NhZ2UgY2Fz ZS4gKi8KKwlhcHBlbmRTdHJpbmdJbmZvQ2hhcihpbkJ1ZiwgKGNoYXIpICdcMCcpOworCisJcmV0 dXJuICdRJzsKK30KKworLyoKKyAqIGZpbHRlcl9kYm5hbWVzX2Zvcl9yZXN0b3JlCisgKgorICog VGhpcyB3aWxsIHJlbW92ZSBuYW1lcyBmcm9tIGFsbCBkYmxpc3QgdGhhdCBhcmUgZ2l2ZW4gd2l0 aCBleGNsdWRlLWRhdGFiYXNlCisgKiBvcHRpb24uCisgKgorICogcmV0dXJucyBudW1iZXIgb2Yg ZGJuYW1lcyB0aG9zZSB3aWxsIGJlIHJlc3RvcmVkLgorICovCitzdGF0aWMgaW50CitmaWx0ZXJf ZGJuYW1lc19mb3JfcmVzdG9yZShQR2Nvbm4gKmNvbm4sIFNpbXBsZURhdGFiYXNlT2lkTGlzdCAq ZGJuYW1lX29pZF9saXN0LAorCQlTaW1wbGVTdHJpbmdMaXN0IGRiX2V4Y2x1ZGVfcGF0dGVybnMp Cit7CisJU2ltcGxlRGF0YWJhc2VPaWRMaXN0Q2VsbAkqZGJvaWRfY2VsbCA9IGRibmFtZV9vaWRf bGlzdC0+aGVhZDsKKwlTaW1wbGVEYXRhYmFzZU9pZExpc3RDZWxsCSpkYm9pZHByZWNlbGwgPSBO VUxMOworCWludAkJCQkJCQljb3VudF9kYiA9IDA7CisKKwkvKiBSZXR1cm4gMCBpZiB0aGVyZSBp cyBubyBkYiB0byByZXN0b3JlLiAqLworCWlmIChkYm9pZF9jZWxsID09IE5VTEwpCisJCXJldHVy biAwOworCisJLyogUHJvY2VzcyBvbmUgYnkgb25lIGFsbCBkYm5hbWVzIGFuZCBpZiBuZWVkcyB0 byBza2lwIHJlc3RvcmluZy4gKi8KKwl3aGlsZSAoZGJvaWRfY2VsbCAhPSBOVUxMKQorCXsKKwkJ Ym9vbAkJCQkJCXNraXBfZGJfcmVzdG9yZSA9IGZhbHNlOworCQlTaW1wbGVEYXRhYmFzZU9pZExp c3RDZWxsCSpuZXh0ID0gZGJvaWRfY2VsbC0+bmV4dDsKKworCQkvKiBOb3cgbWF0Y2ggdGhpcyBk Ym5hbWUgd2l0aCBleGNsdWRlLWRhdGFiYXNlIGxpc3QuICovCisJCWZvciAoU2ltcGxlU3RyaW5n TGlzdENlbGwgKmNlbGxkYiA9IGRiX2V4Y2x1ZGVfcGF0dGVybnMuaGVhZDsgY2VsbGRiOyBjZWxs ZGIgPSBjZWxsZGItPm5leHQpCisJCXsKKwkJCWlmICgoY29ubiAmJiBpc19mdWxsX3BhdHRlcm4o Y29ubiwgZGJvaWRfY2VsbC0+ZGJfbmFtZSwgY2VsbGRiLT52YWwpKSB8fAorCQkJCQkoIWNvbm4g JiYgcGdfc3RyY2FzZWNtcChkYm9pZF9jZWxsLT5kYl9uYW1lLCBjZWxsZGItPnZhbCkgPT0gMCkp CisJCQl7CisJCQkJLyoKKwkJCQkgKiBBcyB3ZSBuZWVkIHRvIHNraXAgdGhpcyBkYm5hbWUgc28g c2V0IGZsYWcgdG8gcmVtb3ZlIGl0IGZyb20KKwkJCQkgKiBsaXN0LgorCQkJCSAqCisJCQkJICog Tm90ZTogd2UgY2FuJ3QgcmVtb3ZlIHRoaXMgcGF0dGVybiBmcm9tIHNraXAgbGlzdCBhcyB3ZQor CQkJCSAqIG1pZ2h0IGhhdmUgbXVsdGlwbGUgZGF0YWJhc2UgbmFtZSB3aXRoIHRoaXMgc2FtZSBw YXR0ZXJuLgorCQkJCSAqLworCQkJCXNraXBfZGJfcmVzdG9yZSA9IHRydWU7CisJCQkJYnJlYWs7 CisJCQl9CisJCX0KKworCQkvKiBJbmNyZW1lbnQgY291bnQgaWYgZGIgbmVlZHMgdG8gYmUgcmVz dG9yZWQuICovCisJCWlmIChza2lwX2RiX3Jlc3RvcmUpCisJCXsKKwkJCXBnX2xvZ19pbmZvKCJl eGNsdWRpbmcgZGF0YWJhc2UgXCIlc1wiIiwgZGJvaWRfY2VsbC0+ZGJfbmFtZSk7CisJCQlzaW1w bGVfZGJfb2lkX2xpc3RfZGVsZXRlKGRibmFtZV9vaWRfbGlzdCwgZGJvaWRfY2VsbCwgZGJvaWRw cmVjZWxsKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCWNvdW50X2RiKys7IC8qIEluY3JlbWVudCBk YiBjb3V0ZXIuICovCisJCQlkYm9pZHByZWNlbGwgPSBkYm9pZF9jZWxsOworCQl9CisKKwkJLyog UHJvY2VzcyBuZXh0IGRibmFtZSBmcm9tIGRibmFtZSBsaXN0LiAqLworCQlkYm9pZF9jZWxsID0g bmV4dDsKKwl9CisKKwlyZXR1cm4gY291bnRfZGI7Cit9CisKKy8qCisgKiBnZXRfZGJuYW1lX29p ZF9saXN0X2Zyb21fbWZpbGUKKyAqCisgKiBPcGVuIG1hcC5kYXQgZmlsZSBhbmQgcmVhZCBsaW5l IGJ5IGxpbmUgYW5kIHRoZW4gcHJlcGFyZSBhIGxpc3Qgb2YgZGF0YWJhc2UKKyAqIG5hbWVzIGFu ZCBjb3JyZXNwb2RpbmcgZGJfb2lkLgorICoKKyAqIFJldHVybnMsIHRvdGFsIG51bWJlciBvZiBk YXRhYmFzZSBuYW1lcyBpbiBtYXAuZGF0IGZpbGUuCisgKi8KK3N0YXRpYyBpbnQKK2dldF9kYm5h bWVfb2lkX2xpc3RfZnJvbV9tZmlsZShjb25zdCBjaGFyICpkdW1wZGlycGF0aCwgU2ltcGxlRGF0 YWJhc2VPaWRMaXN0ICpkYm5hbWVfb2lkX2xpc3QpCit7CisJRklMRSAgICAqcGZpbGU7CisJY2hh ciAgICBtYXBfZmlsZV9wYXRoW01BWFBHUEFUSF07CisJY2hhciAgICBsaW5lW01BWFBHUEFUSF07 CisJaW50ICAgICBjb3VudCA9IDA7CisKKwlzbnByaW50ZihtYXBfZmlsZV9wYXRoLCBNQVhQR1BB VEgsICIlcy9tYXAuZGF0IiwgZHVtcGRpcnBhdGgpOworCisJLyogT3BlbiBtYXAuZGF0IGZpbGUu ICovCisJcGZpbGUgPSBmb3BlbihtYXBfZmlsZV9wYXRoLCAiciIpOworCisJaWYgKHBmaWxlID09 IE5VTEwpCisJCXBnX2ZhdGFsKCJjb3VsZCBub3Qgb3BlbiBtYXAuZGF0IGZpbGU6IFwiJXNcIiIs IG1hcF9maWxlX3BhdGgpOworCisJLyogQXBwZW5kIGFsbCB0aGUgZGJuYW1lIGFuZCBkYl9vaWQg dG8gdGhlIGxpc3QuICovCisJd2hpbGUoKGZnZXRzKGxpbmUsIE1BWFBHUEFUSCwgcGZpbGUpKSAh PSBOVUxMKQorCXsKKwkJT2lkICAgICAgICAgZGJfb2lkOworCQljaGFyCQlkYl9vaWRfc3RyW01B WFBHUEFUSCArIDFdOworCQljaGFyICAgICAgICBkYm5hbWVbTUFYUEdQQVRIICsgMV07CisKKwkJ LyogRXh0cmFjdCBkYm9pZC4gKi8KKwkJc3NjYW5mKGxpbmUsICIldSIgLCAmZGJfb2lkKTsKKwkJ c3NjYW5mKGxpbmUsICIlcyIgLCBkYl9vaWRfc3RyKTsKKworCQkvKiBOb3cgY29weSBkYm5hbWUu ICovCisJCXN0cmNweShkYm5hbWUsIGxpbmUgKyBzdHJsZW4oZGJfb2lkX3N0cikgKyAxKTsKKwor CQkvKiBSZW1vdmUgXG4gZnJvbSBkYmFubWUuICovCisJCWRibmFtZVtzdHJsZW4oZGJuYW1lKSAt IDFdID0gJ1wwJzsKKworCQlwZ19sb2dfaW5mbygiZm91bmQgZGJuYW1lIGFzIDogXCIlc1wiIGFu ZCBkYl9vaWQ6JXUgaW4gbWFwLmRhdCBmaWxlIHdoaWxlIHJlc3RvcmluZyIsIGRibmFtZSwgZGJf b2lkKTsKKworCQkvKiBSZXBvcnQgZXJyb3IgaWYgZmlsZSBoYXMgYW55IGNvcnJ1cHRlZCBkYXRh LiAqLworCQlpZiAoIU9pZElzVmFsaWQoZGJfb2lkKSB8fCBzdHJsZW4oZGJuYW1lKSA9PSAwKQor CQkJcGdfZmF0YWwoImludmFsaWQgZW50cnkgaW4gbWFwLmRhdCBmaWxlIGF0IGxpbmUgOiAlZCIs IGNvdW50ICsgMSk7CisKKwkJLyoKKwkJICogWFhYIDogYmVmb3JlIGFkZGluZyBkYm5hbWUgaW50 byBsaXN0LCB3ZSBjYW4gdmVyaWZ5IHRoYXQgdGhpcyBkYgorCQkgKiBuZWVkcyB0byBza2lwcGVk IGZvciByZXN0b3JlIG9yIG5vdCBidXQgYXMgb2Ygbm93LCB3ZSBhcmUgbWFraW5nCisJCSAqIGEg bGlzdCBvZiBhbGwgdGhlIGRhdGFiYXNlcy4KKwkJICovCisJCXNpbXBsZV9kYl9vaWRfbGlzdF9h cHBlbmQoZGJuYW1lX29pZF9saXN0LCBkYl9vaWQsIGRibmFtZSk7CisJCWNvdW50Kys7CisJfQor CisJLyogQ2xvc2UgbWFwLmRhdCBmaWxlLiAqLworCWZjbG9zZShwZmlsZSk7CisKKwlyZXR1cm4g Y291bnQ7Cit9CisKKy8qCisgKiByZXN0b3JlQWxsRGF0YWJhc2VzCisgKgorICogVGhpcyB3aWxs IHJlc3RvcmUgZGF0YWJhc2VzIHRob3NlIGR1bXBzIGFyZSBwcmVzZW50IGluCisgKiBkaXJlY3Rv cnkgYmFzZWQgb24gbWFwLmRhdCBmaWxlIG1hcHBpbmcuCisgKgorICogVGhpcyB3aWxsIHNraXAg cmVzdG9yaW5nIGZvciBkYXRhYmFzZXMgdGhhdCBhcmUgc3BlY2lmaWVkIHdpdGgKKyAqIGV4Y2x1 ZGUtZGF0YWJhc2Ugb3B0aW9uLgorICovCitzdGF0aWMgaW50CityZXN0b3JlQWxsRGF0YWJhc2Vz KFBHY29ubiAqY29ubiwgY29uc3QgY2hhciAqZHVtcGRpcnBhdGgsCisJCVNpbXBsZVN0cmluZ0xp c3QgZGJfZXhjbHVkZV9wYXR0ZXJucywgUmVzdG9yZU9wdGlvbnMgKm9wdHMsCisJCWludCBudW1X b3JrZXJzKQoreworCVNpbXBsZURhdGFiYXNlT2lkTGlzdAkJCWRibmFtZV9vaWRfbGlzdCA9IHtO VUxMLCBOVUxMfTsKKwlTaW1wbGVEYXRhYmFzZU9pZExpc3RDZWxsCQkqZGJvaWRfY2VsbDsKKwlp bnQJCQkJCQkJCWV4aXRfY29kZSA9IDA7CisJaW50CQkJCQkJCQludW1fZGJfcmVzdG9yZTsKKwlp bnQJCQkJCQkJCW51bV90b3RhbF9kYjsKKworCW51bV90b3RhbF9kYiA9IGdldF9kYm5hbWVfb2lk X2xpc3RfZnJvbV9tZmlsZShkdW1wZGlycGF0aCwgJmRibmFtZV9vaWRfbGlzdCk7CisKKwkvKiBJ ZiBtYXAuZGF0IGhhcyBubyBlbnRyeSwgcmV0dXJuIGZyb20gaGVyZS4gKi8KKwlpZiAoZGJuYW1l X29pZF9saXN0LmhlYWQgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwlwZ19sb2dfaW5mbygiZm91 bmQgdG90YWwgJWQgZGF0YWJhc2UgbmFtZXMgaW4gbWFwLmRhdCBmaWxlIiwgbnVtX3RvdGFsX2Ri KTsKKworCWlmICghY29ubikKKwl7CisJCXBnX2xvZ19pbmZvKCJ0cnlpbmcgdG8gY29ubmVjdCBw b3N0Z3JlcyBkYXRhYmFzZSB0byBkdW1wIGludG8gb3V0IGZpbGUiKTsKKworCQljb25uID0gY29u bmVjdERhdGFiYXNlKCJwb3N0Z3JlcyIsIE5VTEwsIG9wdHMtPmNwYXJhbXMucGdob3N0LAorCQkJ CW9wdHMtPmNwYXJhbXMucGdwb3J0LCBvcHRzLT5jcGFyYW1zLnVzZXJuYW1lLCBUUklfREVGQVVM VCwgZmFsc2UsCisJCQkJcHJvZ25hbWUsIE5VTEwsIE5VTEwpOworCisJCS8qIFRyeSB3aXRoIHRl bXBsYXRlMS4gKi8KKwkJaWYgKCFjb25uKQorCQl7CisJCQlwZ19sb2dfaW5mbygidHJ5aW5nIHRv IGNvbm5lY3QgdGVtcGxhdGUxIGRhdGFiYXNlIGFzIGZhaWxlZCB0byBjb25uZWN0IHRvIHBvc3Rn cmVzIHRvIGR1bXAgaW50byBvdXQgZmlsZSIpOworCisJCQljb25uID0gY29ubmVjdERhdGFiYXNl KCJ0ZW1wbGF0ZTEiLCBOVUxMLCBvcHRzLT5jcGFyYW1zLnBnaG9zdCwKKwkJCQkJb3B0cy0+Y3Bh cmFtcy5wZ3BvcnQsIG9wdHMtPmNwYXJhbXMudXNlcm5hbWUsIFRSSV9ERUZBVUxULCBmYWxzZSwK KwkJCQkJcHJvZ25hbWUsIE5VTEwsIE5VTEwpOworCisJCQlpZiAoIWNvbm4pCisJCQkJcGdfbG9n X2luZm8oInRoZXJlIGlzIG5vIGRhdGFiYXNlIGNvbm5lY3Rpb24gc28gY29uc2lkZXIgcGF0dGVy biBhcyBzaW1wbGUgbmFtZSBmb3IgZXhjbHVkZS1kYXRhYmFzZSIpOworCQl9CisJfQorCisJLyoK KwkgKiBUT0RPOiBUbyBza2lwIGRhdGFiYXNlcywgd2UgbmVlZCB0byBtYWtlIGEgZGVzaWduLgor CSAqCisJICogU2tpcCBhbnkgZXhwbGljaXRseSBleGNsdWRlZCBkYXRhYmFzZS4gIElmIHRoZXJl IGlzIG5vIGRhdGFiYXNlCisJICogY29ubmVjdGlvbiwgdGhlbiBqdXN0IGNvbnNpZGVyIHBhdHRl cm4gYXMgc2ltcGxlIG5hbWUgdG8gY29tcGFyZS4KKwkgKi8KKwludW1fZGJfcmVzdG9yZSA9IGZp bHRlcl9kYm5hbWVzX2Zvcl9yZXN0b3JlKGNvbm4sICZkYm5hbWVfb2lkX2xpc3QsCisJCQlkYl9l eGNsdWRlX3BhdHRlcm5zKTsKKworCS8qIENsb3NlIHRoZSBkYiBjb25uZWN0aW9uIGFzIHdlIGFy ZSBkb25lIGdsb2JhbHMgYW5kIHBhdHRlcm5zLiAqLworCWlmIChjb25uKQorCQlQUWZpbmlzaChj b25uKTsKKworCS8qIEV4aXQgaWYgbm8gZGIgbmVlZHMgdG8gYmUgcmVzdG9yZWQuICovCisJaWYg KGRibmFtZV9vaWRfbGlzdC5oZWFkID09IE5VTEwpCisJCXJldHVybiAwOworCisJcGdfbG9nX2lu Zm8oIm5lZWRzIHRvIHJlc3RvcmUgJWQgZGF0YWJhc2VzIG91dCBvZiAlZCBkYXRhYmFzZXMiLCBu dW1fZGJfcmVzdG9yZSwgbnVtX3RvdGFsX2RiKTsKKworCS8qIFRPRE86IE1BWF9PTl9FWElUX05J Q0VMWSBpcyAxMDAgbm93Li4uIG1heCBBSCBoYW5kbGUgcmVnaXN0ZXIgb24gZXhpdCAuKi8KKwlp ZiAobnVtX2RiX3Jlc3RvcmUgPiAxMDApCisJeworCQlzaW1wbGVfZGJfb2lkX2Z1bGxfbGlzdF9k ZWxldGUoJmRibmFtZV9vaWRfbGlzdCk7CisJCXBnX2ZhdGFsKCJjb3VuZCBub3QgcmVzdG9yZSBt b3JlIHRoYW4gMTAwIGRhdGFiYXNlcyBieSBzaW5nbGUgcGdfcmVzdG9yZSwgaGVyZSB0b3RhbCBk YjolZCIsIG51bV9kYl9yZXN0b3JlKTsKKwl9CisKKwkvKgorCSAqIFhYWDogVE9ETyB0aWxsIG5v dywgd2UgbWFkZSBhIGxpc3Qgb2YgZGF0YWJhc2VzLCB0aG9zZSBuZWVkcyB0byBiZSByZXN0b3Jl ZAorCSAqIGFmdGVyIHNraXBwaW5nIG5hbWVzIG9mIGV4Y2x1ZGUtZGF0YWJhc2UuICBOb3cgd2Ug Y2FuIGxhdW5jaCBwYXJhbGxlbAorCSAqIHdvcmtlcnMgdG8gcmVzdG9yZSB0aGVzZSBkYXRhYmFz ZXMuCisJICovCisJZGJvaWRfY2VsbCA9IGRibmFtZV9vaWRfbGlzdC5oZWFkOworCisJd2hpbGUo ZGJvaWRfY2VsbCAhPSBOVUxMKQorCXsKKwkJY2hhcgkJc3ViZGlycGF0aFtNQVhQR1BBVEhdOwor CQlpbnQJCQlkYmV4aXRfY29kZTsKKworCQkvKgorCQkgKiBXZSBuZWVkIHRvIHJlc2V0IG92ZXJy aWRlX2RibmFtZSBzbyB0aGF0IG9iamVjdHMgY2FuIGJlIHJlc3RvcmVkIGludG8KKwkJICogYWxy ZWFkeSBjcmVhdGVkIGRhdGFiYXNlLiAodXNlZCB3aXRoIC1kLy0tZGJuYW1lIG9wdGlvbikKKwkJ ICovCisJCWlmIChvcHRzLT5jcGFyYW1zLm92ZXJyaWRlX2RibmFtZSkKKwkJeworCQkJcGZyZWUo b3B0cy0+Y3BhcmFtcy5vdmVycmlkZV9kYm5hbWUpOworCQkJb3B0cy0+Y3BhcmFtcy5vdmVycmlk ZV9kYm5hbWUgPSBOVUxMOworCQl9CisKKwkJc25wcmludGYoc3ViZGlycGF0aCwgTUFYUEdQQVRI LCAiJXMvZGF0YWJhc2VzLyV1IiwgZHVtcGRpcnBhdGgsIGRib2lkX2NlbGwtPmRiX29pZCk7CisK KwkJcGdfbG9nX2luZm8oInJlc3RvcmluZyBkYXRhYmFzZSBcIiVzXCIiLCBkYm9pZF9jZWxsLT5k Yl9uYW1lKTsKKworCQlkYmV4aXRfY29kZSA9IHJlc3RvcmVPbmVEYXRhYmFzZShzdWJkaXJwYXRo LCBvcHRzLCBudW1Xb3JrZXJzLCB0cnVlKTsKKworCQkvKiBTdG9yZSBleGl0X2NvZGUgdG8gcmVw b3J0IGl0IGJhY2suICovCisJCWlmIChleGl0X2NvZGUgPT0gMCAmJiBkYmV4aXRfY29kZSAhPSAw KQorCQkJZXhpdF9jb2RlID0gZGJleGl0X2NvZGU7CisKKwkJZGJvaWRfY2VsbCA9IGRib2lkX2Nl bGwtPm5leHQ7CisJfSAvKiBlbmQgd2hpbGUgKi8KKworCS8qIExvZyBudW1iZXIgb2YgcHJvY2Vz c2VkIGRhdGFiYXNlcy4qLworCXBnX2xvZ19pbmZvKCJudW1iZXIgb2YgcmVzdG9yZWQgZGF0YWJh c2VzIGFyZSAlZCIsIG51bV9kYl9yZXN0b3JlKTsKKworCS8qIEZyZWUgZGJuYW1lIGFuZCBkYm9p ZCBsaXN0LiAqLworCXNpbXBsZV9kYl9vaWRfZnVsbF9saXN0X2RlbGV0ZSgmZGJuYW1lX29pZF9s aXN0KTsKKworCXJldHVybiBleGl0X2NvZGU7Cit9CisKKy8qCisgKiBleGVjdXRlX2dsb2JhbF9z cWxfY29tbWFuZHMKKyAqCisgKiBUaGlzIHdpbGwgb3BlbiBnbG9iYWwuZGF0IGZpbGUgYW5kIHdp bGwgZXhlY3V0ZSBhbGwgZ2xvYmFsIHNxbCBjb21tYW5kcyBvbmUKKyAqIGJ5IG9uZSBzdGF0ZW1l bnQuCisgKiBTZW1pY29sb24gaXMgY29uc2lkZXJlZCBhcyBzdGF0ZW1lbnQgdGVybWluYXRvci4g IElmIG91dGZpbGUgaXMgcGFzc2VkLCB0aGVuCisgKiB0aGlzIHdpbGwgY29weSBhbGwgc3FsIGNv bW1hbmRzIGludG8gb3V0ZmlsZSByYXRoZXIgdGhlbiBleGVjdXRpbmcgdGhlbS4KKyAqLworc3Rh dGljIHZvaWQKK2V4ZWN1dGVfZ2xvYmFsX3NxbF9jb21tYW5kcyhQR2Nvbm4gKmNvbm4sIGNvbnN0 IGNoYXIgKmR1bXBkaXJwYXRoLCBjb25zdCBjaGFyICpvdXRmaWxlKQoreworCWNoYXIgICAgICAg ICAgICBnbG9iYWxfZmlsZV9wYXRoW01BWFBHUEFUSF07CisJUEdyZXN1bHQJCSpyZXN1bHQ7CisJ U3RyaW5nSW5mb0RhdGEJc3Fsc3RhdGVtZW50OworCUZJTEUJCQkqcGZpbGU7CisKKwlzbnByaW50 ZihnbG9iYWxfZmlsZV9wYXRoLCBNQVhQR1BBVEgsICIlcy9nbG9iYWwuZGF0IiwgZHVtcGRpcnBh dGgpOworCisJLyogTm93IG9wZW4gZ2xvYmFsLmRhdCBmaWxlLiAqLworCXBmaWxlID0gZm9wZW4o Z2xvYmFsX2ZpbGVfcGF0aCwgInIiKTsKKworCWlmIChwZmlsZSA9PSBOVUxMKQorCQlwZ19mYXRh bCgiY291bGQgbm90IG9wZW4gZ2xvYmFsLmRhdCBmaWxlOiBcIiVzXCIiLCBnbG9iYWxfZmlsZV9w YXRoKTsKKworCS8qCisJICogSWYgb3V0ZmlsZSBpcyBnaXZlbiwgdGhlbiBqdXN0IGNvcHkgYWxs IGdsb2JhbC5kYXQgZmlsZSBkYXRhIGludG8KKwkgKiBvdXRmaWxlLgorCSAqLworCWlmIChvdXRm aWxlKQorCXsKKwkJY2hhciAgICAgICAgICAgIG91dF9maWxlX3BhdGhbTUFYUEdQQVRIXTsKKwkJ RklMRSAgICAgICAgICAgICpvZmlsZTsKKwkJaW50CQkJCWM7CisKKwkJc25wcmludGYob3V0X2Zp bGVfcGF0aCwgTUFYUEdQQVRILCAiXCIlc1wiIiwgb3V0ZmlsZSk7CisKKwkJb2ZpbGUgPSBmb3Bl bihvdXRfZmlsZV9wYXRoLCAidyIpOworCisJCWlmIChvZmlsZSA9PSBOVUxMKQorCQl7CisJCQlm Y2xvc2UocGZpbGUpOworCQkJcGdfZmF0YWwoImNvdWxkIG5vdCBvcGVuIGZpbGU6IFwiJXNcIiIs IG91dF9maWxlX3BhdGgpOworCQl9CisKKwkJLyogTm93IGFwcGVuZCBnbG9iYWwuZGF0IGlub3Qg b3V0ZmlsZS4gKi8KKwkJd2hpbGUgKChjID0gZmdldGMocGZpbGUpKSAhPSBFT0YpCisJCXsKKwkJ CWZwdXRjKGMsIG9maWxlKTsKKwkJfQorCisJCWZjbG9zZShwZmlsZSk7CisJCWZjbG9zZShvZmls ZSk7CisJCXJldHVybjsKKwl9CisKKwkvKiBJbml0IHNxbHN0YXRlbWVudCB0byBhcHBlbmQgY29t bWFuZHMgKi8KKwlpbml0U3RyaW5nSW5mbygmc3Fsc3RhdGVtZW50KTsKKworCS8qIFByb2Nlc3Mg ZmlsZSB0aWxsIEVPRiBhbmQgZXhlY3V0ZSBzcWwgc3RhdGVtZW50cyAqLworCXdoaWxlIChSZWFk T25lU3RhdGVtZW50KCZzcWxzdGF0ZW1lbnQsIHBmaWxlKSAhPSBFT0YpCisJeworCQlyZXN1bHQg PSBQUWV4ZWMoY29ubiwgc3Fsc3RhdGVtZW50LmRhdGEpOworCisJCXN3aXRjaCAoUFFyZXN1bHRT dGF0dXMocmVzdWx0KSkKKwkJeworCQkJY2FzZSBQR1JFU19DT01NQU5EX09LOgorCQkJY2FzZSBQ R1JFU19UVVBMRVNfT0s6CisJCQljYXNlIFBHUkVTX0VNUFRZX1FVRVJZOgorCQkJCWJyZWFrOwor CQkJZGVmYXVsdDoKKwkJCQlwZ19sb2dfZXJyb3IoImNvdWxkIG5vdCBleGVjdXRlIHF1ZXJ5OiBc IiVzXCIgXG5Db21tYW5kIHdhczogXCIlc1wiIiwgUFFlcnJvck1lc3NhZ2UoY29ubiksIHNxbHN0 YXRlbWVudC5kYXRhKTsKKwkJfQorCQlQUWNsZWFyKHJlc3VsdCk7CisJfQorCisJZmNsb3NlKHBm aWxlKTsKK30KKworLyoKKyAqIHNpbXBsZV9kYl9vaWRfbGlzdF9hcHBlbmQKKyAqCisgKiBhcHBl bmRzIGEgbm9kZSB0byB0aGUgbGlzdCBpbiB0aGUgZW5kLgorICovCitzdGF0aWMgdm9pZAorc2lt cGxlX2RiX29pZF9saXN0X2FwcGVuZChTaW1wbGVEYXRhYmFzZU9pZExpc3QgKmxpc3QsIE9pZCBk Yl9vaWQsIGNvbnN0IGNoYXIgKmRibmFtZSkKK3sKKwlTaW1wbGVEYXRhYmFzZU9pZExpc3RDZWxs ICpjZWxsOworCisJY2VsbCA9IHBnX21hbGxvY19vYmplY3QoU2ltcGxlRGF0YWJhc2VPaWRMaXN0 Q2VsbCk7CisKKwljZWxsLT5uZXh0ID0gTlVMTDsKKwljZWxsLT5kYl9vaWQgPSBkYl9vaWQ7CisJ Y2VsbC0+ZGJfbmFtZSA9IHBnX3N0cmR1cChkYm5hbWUpOworCisJaWYgKGxpc3QtPnRhaWwpCisJ CWxpc3QtPnRhaWwtPm5leHQgPSBjZWxsOworCWVsc2UKKwkJbGlzdC0+aGVhZCA9IGNlbGw7CisJ bGlzdC0+dGFpbCA9IGNlbGw7Cit9CisKKy8qCisgKiBzaW1wbGVfZGJfb2lkX2Z1bGxfbGlzdF9k ZWxldGUKKyAqCisgKiBkZWxldGUgYWxsIGNlbGwgZnJvbSBkYm5hbWUgYW5kIGRib2lkIGxpc3Qu CisgKi8KK3N0YXRpYyB2b2lkCitzaW1wbGVfZGJfb2lkX2Z1bGxfbGlzdF9kZWxldGUoU2ltcGxl RGF0YWJhc2VPaWRMaXN0ICpsaXN0KQoreworCVNpbXBsZURhdGFiYXNlT2lkTGlzdENlbGwJKmNl bGwgPSBsaXN0LT5oZWFkOworCVNpbXBsZURhdGFiYXNlT2lkTGlzdENlbGwJKm5leHRjZWxsID0g TlVMTDsKKworCXdoaWxlIChjZWxsKQorCXsKKwkJbmV4dGNlbGwgPSBjZWxsLT5uZXh0OworCQlw ZnJlZSAoY2VsbCk7CisJCWNlbGwgPSBuZXh0Y2VsbDsKKwl9CisKKwlsaXN0LT5oZWFkID0gTlVM TDsKKwlsaXN0LT50YWlsID0gTlVMTDsKK30KKworLyoKKyAqIHNpbXBsZV9zdHJpbmdfZnVsbF9s aXN0X2RlbGV0ZQorICoKKyAqIGRlbGV0ZSBhbGwgY2VsbCBmcm9tIHN0cmluZyBsaXN0LgorICov CitzdGF0aWMgdm9pZAorc2ltcGxlX3N0cmluZ19mdWxsX2xpc3RfZGVsZXRlKFNpbXBsZVN0cmlu Z0xpc3QgKmxpc3QpCit7CisJU2ltcGxlU3RyaW5nTGlzdENlbGwJKmNlbGwgPSBsaXN0LT5oZWFk OworCVNpbXBsZVN0cmluZ0xpc3RDZWxsICAgICpjZWxsbmV4dCA9IE5VTEw7CisKKwl3aGlsZSAo Y2VsbCkKKwl7CisJCWNlbGxuZXh0ID0gY2VsbC0+bmV4dDsKKwkJcGZyZWUoY2VsbCk7CisJCWNl bGwgPSBjZWxsbmV4dDsKKwl9CisKKwlsaXN0LT5oZWFkID0gTlVMTDsKKwlsaXN0LT50YWlsID0g TlVMTDsKK30KKworLyoKKyAqIHNpbXBsZV9kYl9vaWRfbGlzdF9kZWxldGUKKyAqCisgKiBkZWxl dGUgY2VsbCBmcm9tIGRhdGFiYXNlIGFuZCBvaWQgbGlzdC4KKyAqLworc3RhdGljIHZvaWQKK3Np bXBsZV9kYl9vaWRfbGlzdF9kZWxldGUoU2ltcGxlRGF0YWJhc2VPaWRMaXN0ICpsaXN0LCBTaW1w bGVEYXRhYmFzZU9pZExpc3RDZWxsICpjZWxsLAorCQlTaW1wbGVEYXRhYmFzZU9pZExpc3RDZWxs ICpwcmV2KQoreworCWlmIChwcmV2ID09IE5VTEwpCisJeworCQlsaXN0LT5oZWFkID0gY2VsbC0+ bmV4dDsKKwkJcGZyZWUoY2VsbCk7CisJfQorCWVsc2UKKwl7CisJCXByZXYtPm5leHQgPSBjZWxs LT5uZXh0OworCQlwZnJlZShjZWxsKTsKKwl9Cit9CisKKy8qCisgKiBpc19mdWxsX3BhdHRlcm4K KyAqCisgKiBUaGlzIHVzZXMgc3Vic3RyaW5nIGZ1bmN0aW9uIHRvIG1ha2UgMXN0IHN0cmluZyBm cm9tIHBhdHRlcm4uCisgKiBPdXRzdHJpbmcgb2Ygc3Vic3RyaW5nIGZ1bmN0aW9uIGlzIGNvbXBh cmVkIHdpdGggMXN0IHN0cmluZyB0bworICogdmFsaWRhdGUgdGhpcyBwYXR0ZXJuLgorICoKKyAq IFJldHVybnMgdHJ1ZSBpZiAxc3Qgc3RyaW5nIGNhbiBiZSBjb25zdHJ1Y3RlZCBmcm9tIGdpdmVu IHBhdHRlcm4uCisgKgorICovCitzdGF0aWMgYm9vbAoraXNfZnVsbF9wYXR0ZXJuKFBHY29ubiAq Y29ubiwgY29uc3QgY2hhciAqc3RyLCBjb25zdCBjaGFyICpwdHJuKQoreworCVBRRXhwQnVmZmVy CQlxdWVyeTsKKwlQR3Jlc3VsdAkJKnJlc3VsdDsKKworCXF1ZXJ5ID0gY3JlYXRlUFFFeHBCdWZm ZXIoKTsKKworCXByaW50ZlBRRXhwQnVmZmVyKHF1ZXJ5LAorCQkJIlNFTEVDVCBzdWJzdHJpbmcg KCAiCisJCQkiICclcycgLCAiCisJCQkiICclcycgKSAiLCBzdHIsIHB0cm4pOworCisgICByZXN1 bHQgPSBleGVjdXRlUXVlcnkoY29ubiwgcXVlcnktPmRhdGEpOworCisJaWYgKFBRcmVzdWx0U3Rh dHVzKHJlc3VsdCkgPT0gUEdSRVNfVFVQTEVTX09LKQorCXsKKwkJaWYgKFBRbnR1cGxlcyhyZXN1 bHQpID09IDEpCisJCXsKKwkJCWNvbnN0IGNoYXIJKm91dHN0cjsKKworCQkJb3V0c3RyID0gUFFn ZXR2YWx1ZShyZXN1bHQsIDAsIDApOworCisJCQlQUWNsZWFyKHJlc3VsdCk7CisJCQlkZXN0cm95 UFFFeHBCdWZmZXIocXVlcnkpOworCisJCQkvKgorCQkJICogSWYgb3V0cHV0IHN0cmluZyBvZiBz dWJzdHJpbmcgZnVuY3Rpb24gaXMgbWF0Y2hlcyB3aXRoIHN0ciwgdGhlbgorCQkJICogd2UgY2Fu IGNvbnN0cnVjdCBzdHIgZnJvbSBwYXR0ZXJuLgorCQkJICovCisJCQlpZiAob3V0c3RyICYmIHBn X3N0cmNhc2VjbXAob3V0c3RyLCBzdHIpID09IDApCisJCQkJcmV0dXJuIHRydWU7CisJCQllbHNl CisJCQkJcmV0dXJuIGZhbHNlOworCQl9CisJfQorCWVsc2UKKwkJcGdfbG9nX2Vycm9yKCJjb3Vs ZCBub3QgZXhlY3V0ZSBxdWVyeTogXCIlc1wiIFxuQ29tbWFuZCB3YXM6IFwiJXNcIiIsIFBRZXJy b3JNZXNzYWdlKGNvbm4pLCBxdWVyeS0+ZGF0YSk7CisKKwlQUWNsZWFyKHJlc3VsdCk7CisJZGVz dHJveVBRRXhwQnVmZmVyKHF1ZXJ5KTsKKworCXJldHVybiBmYWxzZTsKK30KZGlmZiAtLWdpdCBh L3NyYy9iaW4vcGdfZHVtcC90LzAwMV9iYXNpYy5wbCBiL3NyYy9iaW4vcGdfZHVtcC90LzAwMV9i YXNpYy5wbApvbGQgbW9kZSAxMDA2NDQKbmV3IG1vZGUgMTAwNzU1CmluZGV4IDIxNDI0MGYxYWU1 Li5kNDJlOGJkZWJiZgotLS0gYS9zcmMvYmluL3BnX2R1bXAvdC8wMDFfYmFzaWMucGwKKysrIGIv c3JjL2Jpbi9wZ19kdW1wL3QvMDAxX2Jhc2ljLnBsCkBAIC0yMjYsNCArMjI2LDggQEAgY29tbWFu ZF9mYWlsc19saWtlKAogCSdwZ19kdW1wYWxsOiBvcHRpb24gLS1leGNsdWRlLWRhdGFiYXNlIGNh bm5vdCBiZSB1c2VkIHRvZ2V0aGVyIHdpdGggLWcvLS1nbG9iYWxzLW9ubHknCiApOwogCitjb21t YW5kX2ZhaWxzX2xpa2UoCisJWyAncGdfZHVtcGFsbCcsICctLWZvcm1hdCcsICd4JyBdLAorCXFy L1xRcGdfZHVtcGFsbDogZXJyb3I6IHVucmVjb2duaXplZCBhcmNoaXZlIGZvcm1hdCAieCI7XEUv LAorCSdwZ19kdW1wYWxsOiB1bnJlY29nbml6ZWQgYXJjaGl2ZSBmb3JtYXQnKTsKIGRvbmVfdGVz dGluZygpOwpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3QvMDA1X3BnX2R1bXBfZmlsdGVy ZmlsZS5wbCBiL3NyYy9iaW4vcGdfZHVtcC90LzAwNV9wZ19kdW1wX2ZpbHRlcmZpbGUucGwKaW5k ZXggMzU2OGEyNDZiMjMuLmZlY2QzNDc4ZGRlIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAv dC8wMDVfcGdfZHVtcF9maWx0ZXJmaWxlLnBsCisrKyBiL3NyYy9iaW4vcGdfZHVtcC90LzAwNV9w Z19kdW1wX2ZpbHRlcmZpbGUucGwKQEAgLTUyOSw2ICs1MjksMTQgQEAgY29tbWFuZF9mYWlsc19s aWtlKAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIyBwZ19y ZXN0b3JlIHRlc3RzCitjb21tYW5kX2ZhaWxzX2xpa2UoCisJWworCQkncGdfcmVzdG9yZScsICct cCcsICRwb3J0LCAnLWYnLCAkcGxhaW5maWxlLAorCQkiLS1leGNsdWRlLWRhdGFiYXNlPWdyYWJh ZGdlIiwKKwkJJy0tZ2xvYmFscy1vbmx5JworCV0sCisJcXIvXFFnX3Jlc3RvcmU6IGVycm9yOiBv cHRpb24gLS1leGNsdWRlLWRhdGFiYXNlIGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyIHdpdGggLWdc Ly0tZ2xvYmFscy1vbmx5XEUvLAorCSdwZ19yZXN0b3JlOiBvcHRpb24gLS1leGNsdWRlLWRhdGFi YXNlIGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyIHdpdGggLWcvLS1nbG9iYWxzLW9ubHknKTsKIAog Y29tbWFuZF9vaygKIAlbCi0tIAoyLjM5LjMKCg== --00000000000071cb0d062bc44503--