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 1tkjKg-006Ju6-Dn for pgsql-hackers@arkaria.postgresql.org; Wed, 19 Feb 2025 12:37:42 +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 1tkjKe-00801a-P7 for pgsql-hackers@arkaria.postgresql.org; Wed, 19 Feb 2025 12:37:40 +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 1tkjKd-00801O-Sz for pgsql-hackers@lists.postgresql.org; Wed, 19 Feb 2025 12:37:40 +0000 Received: from mail-qt1-x82e.google.com ([2607:f8b0:4864:20::82e]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1tkjKb-001hz5-34 for pgsql-hackers@lists.postgresql.org; Wed, 19 Feb 2025 12:37:39 +0000 Received: by mail-qt1-x82e.google.com with SMTP id d75a77b69052e-471f2e1bea9so25737151cf.2 for ; Wed, 19 Feb 2025 04:37:37 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1739968657; x=1740573457; darn=lists.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=FxRoPREn4XIK0XwprU+fChxmyH3WEP+YvFoLfbxviig=; b=O7aZYSGXBeeQYhqVJZUTfFA0Pz6nN8omOZv2GU4Brv1gofQQ1J5YIHuB6vikDaoN2p MnUENzqJDC7FAqKdG54SJBT137OiK0/njcm+FmALe4Z+X/DrGmfrZJ8d5pxtV8hp+zD0 WgkWNULorYajGPXSl1BV9hkzKIzu90vdohBBeNTbkLV3vAztcGMfVg2zHKHwVxakMkgf 48VzZOdcn7TGlIDjHZV0Hob6+ymZuRopt7jHQcaxq7kl1mPeeaw6GEasnrMFgB2lqFEG zZ+cCB0wnv59x3OrBWE5FBMgg6nh6ysUrWY8p/jtjbPKL37nW8UBEKw2mGeRN8t2pg40 /xDg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739968657; x=1740573457; 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=FxRoPREn4XIK0XwprU+fChxmyH3WEP+YvFoLfbxviig=; b=K966y3gIQ78XoYuijsAYsd5XNjBRGWneGXGV+YF89dvWw/CA/+k6lDJuV/1lacr90D K4xeRe29udMLiRZRMWUEOOXeD3zUqE3SVWzPi/5m0p3OoBwg5qSbXKsdT0yJzj1Epjme Lno+vHiqqJvGWFWngkvLhrg0BvsrcjLIb/ug62c3n3+QojduLCVa4Dw+vAxVbPSbe9qm XJeVLEwkAKHEPFmjSVneYaEAbYP2it/71rVcdxhn40eXyzKYiTNJXhpcYbCMvwtvRpQK snGk9VTVsPrmNiTWkEmm3c20rUR5Z+RHoo8zpsMIv2A9YWDKVwLVBQws+ZqcV88uvSXz Epmg== X-Forwarded-Encrypted: i=1; AJvYcCUIbQFpPW8n2OMvxs+gTijWRYD97Wb8qRhRwb1qf1qAYrKxUrblboo/XsuIThWqZGilqEb7+BPRPlpcHwqy@lists.postgresql.org X-Gm-Message-State: AOJu0YzTV5LNegA7rwRmXT8/A5gnQqgbJEWyv2arzohhB1kp8BwSJrPv YdBl9tr+YyHyC4wAMxmRFKPxsmuenbn3DASsvBgjhWAUxy1LkqVYHL7WnkqwQ2srp7fvgjEtIv0 xuZeSQb1Or/ORu0p5kugSUuwdTdA= X-Gm-Gg: ASbGncslzCX8uBXJuE/oF3C5CbaUwxfVDuQ+rqcxTzPsSzxz+BqLaYGcRyrD6znSPgc V73Fige3sBuBJMubgE9D63ZB6HwiRYFCIvHNuZaeBU55L8rAmbNaNWPzYz2hZ15vJDLVclU5QGE gOWx+TuOM9AgMWkDbXF3e4PTbAwIeGkA== X-Google-Smtp-Source: AGHT+IE226Fq6a/01i1TPgVDZ2EhQGjDLO9VquO44dRU4Cwf0wqieydrkADGJqZcP6UxntKfgUsnWplwfL6wDhIkm8Y= X-Received: by 2002:ac8:7f4a:0:b0:471:d976:567b with SMTP id d75a77b69052e-47208233148mr38995071cf.10.1739968656703; Wed, 19 Feb 2025 04:37:36 -0800 (PST) MIME-Version: 1.0 References: <202501110844.5ztsym4vbflm@alvherre.pgsql> In-Reply-To: From: Mahendra Singh Thalor Date: Wed, 19 Feb 2025 18:07:25 +0530 X-Gm-Features: AWEUYZkSAMRGwfAUqCpLqV3aMJigxa8UM5vTa9F64hzqEsZCui10JJK1eCRYd-I Message-ID: Subject: Re: Non-text mode for pg_dumpall To: jian he Cc: Srinath Reddy , pgsql-hackers@lists.postgresql.org Content-Type: multipart/mixed; boundary="000000000000b41fcb062e7e0597" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000b41fcb062e7e0597 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Tue, 18 Feb 2025 at 10:00, Srinath Reddy wrote: > > Hi, > i think during restore we should not force user to use -C during cases li= ke > ./pg_restore pdd -g -f - > ./pg_restore pdd -a -f - > ./pg_restore pdd -s -f - > because its not good to use -C to create database every time when we are = using these options individually. > latest patch throws following error for all the above cases Fixed. (./pg_restore pdd -g -f -) Thanks Jian and Srinath for the review and testing. On Tue, 18 Feb 2025 at 11:41, jian he wrote: > > hi. > > > pg_restore > > restore a PostgreSQL database from an > archive file created by pg_dump > or restore multiple PostgreSQL database fro= m an > archive directory created by pg_dumpall > > > > i think it's way too verbose. we can change it to: > > restore PostgreSQL database from an > archive file created by pg_dump or > pg_dumpall > Fixed. > > > > pg_restore is a utility for restoring a > PostgreSQL database from an archive > created by in one of the non-plain-text > formats. > we can change it to > > pg_restore is a utility for restoring > PostgreSQL databases from an archive > created by or linkend=3D"app-pgdumpall"/> in one of the non-plain-text > formats. Fixed. > > > similarly, pg_dumpall first 3 sentences in the description section > needs to change. > I think we can keep them for pg_dumpall. > > in pg_restore.sgml maybe we can explicitly mention that restoring multiple databases, > is required. > like: "This option is required when restoring multiple databases." Fixed. > > > restoreAllDatabases > + if (!conn) > + pg_log_info("there is no database connection so consider pattern as > simple name for --exclude-database"); > filter_dbnames_for_restore > + if (!conn) > + pg_log_info("considering PATTERN as NAME for --exclude-database > option as no db connection while doing pg_restore."); > > these two log messages sent out the same information. > maybe we can remove the first one, and change the second to > if (!conn && db_exclude_patterns.head !=3D NULL) > pg_log_info("considering PATTERN as NAME for > --exclude-database option as no db connection while doing > pg_restore."); Fixed. > > > as mentioned in the previous thread, there is no need to change PrintTOCS= ummary. Yes, I removed it. > > > another minor issue about comments. > I guess we can tolerate this minor issue. > $BIN10/pg_restore --format=3Dtar --create --file=3D1.sql > --exclude-database=3Dsrc10 --verbose tar10 > dir_format 2>&1 > 1.sql file will copy tar10/global.dat as is. but we already excluded > src10. but 1.sql will still have comments as > -- > -- Database "src10" dump > -- Fixed. > > $BIN10/pg_dumpall --format=3Dcustom --file=3Dx1.dump --globals-only > $BIN10/pg_dumpall --format=3Dcustom --file=3Dx2.dump > > Currently x1.dump/global.dat is differ from x2.dump/global.dat > if we dump multiple databases using pg_dumpall we have > " > -- > -- Databases > -- > -- > -- Database "template1" dump > -- > -- > -- Database "src10" dump > -- > -- > -- Database "x" dump > -- > " > maybe there are not need, since we already have map.dat file Okay. Fixed. > > > I am not sure if the following is as expected or not. > $BIN10/pg_dumpall --format=3Dcustom --file=3Dx1.dump --globals-only > $BIN10/pg_restore --create --file=3D3.sql --globals-only x1.dump --verbos= e > $BIN10/pg_restore --create --file=3D3.sql x1.dump --verbose > > the first pg_restore command will copy x1.dump/global.dat as is to 3.sql= , > the second pg_restore will not copy anything to 3.sql. > but the second command implies copying global dumps to 3.sql? We should copy global.dat. I fixed this in the v18 patch. On Tue, 18 Feb 2025 at 14:02, jian he wrote: > > On Tue, Feb 18, 2025 at 2:10=E2=80=AFPM jian he wrote: > > > > hi. > > hi. more cosmetic minor issues. > > +static int > +get_dbname_oid_list_from_mfile(const char *dumpdirpath, > SimpleDatabaseOidList *dbname_oid_list) > ... > + /* > + * XXX : before adding dbname into list, we can verify that this db > + * needs to skipped for restore or not but as of now, we are making > + * a list of all the databases. > + */ > i think the above comment in get_dbname_oid_list_from_mfile is not necess= ary. > we already have comments in filter_dbnames_for_restore. As of now, I am keeping this comment as this will be helpful while implementing parallel pg_restore. > > in get_dbname_oid_list_from_mfile: > ``` > pfile =3D fopen(map_file_path, PG_BINARY_R); > if (pfile =3D=3D NULL) > pg_fatal("could not open map.dat file: \"%s\"", map_file_path); > ``` > file does not exist, we use pg_fatal, so if the directory does not > exist, we should also use pg_fatal. > so > if (!IsFileExistsInDirectory(pg_strdup(dumpdirpath), "map.dat")) > { > pg_log_info("databases restoring is skipped as map.dat file is > not present in \"%s\"", dumpdirpath); > return 0; > } > can be > if (!IsFileExistsInDirectory(pg_strdup(dumpdirpath), "map.dat")) > pg_fatal("map.dat file: \"%s\"/map.dat does not exists", dumpdirp= ath); No, we can't add FATAL here as in case of global-only dump, we will not have a map.dat file. > > > + /* Report error if file has any corrupted data. */ > + if (!OidIsValid(db_oid) || strlen(dbname) =3D=3D 0) > + pg_fatal("invalid entry in map.dat file at line : %d", count + 1); > i think the comments should be > + /* Report error and exit if the file has any corrupted data. */ Fixed. > > > +/* > + * filter_dbnames_for_restore > + * > + * This will remove names from all dblist those can > + * be constructed from database_exclude_pattern list. > + * > + * returns number of dbnames those will be restored. > + */ > +static int > +filter_dbnames_for_restore(PGconn *conn, > + SimpleDatabaseOidList *dbname_oid_list, > there is no "database_exclude_pattern" list, so the above comments are > slightly wrong. Fixed. > > > +/* > + * ReadOneStatement > + * > + * This will start reading from passed file pointer using fgetc and read= till > + * semicolon(sql statement terminator for global.sql file) > + * > + * EOF is returned if end-of-file input is seen; time to shut down. > + */ > here, "global sql" should change to "gloal.dat". Fixed. > > > /* sync the resulting file, errors are not fatal */ > - if (dosync) > + if (dosync && (archDumpFormat =3D=3D archNull)) > (void) fsync_fname(filename, false); > does this mean pg_dumpall --no-sync option only works for plain format. > if so, we need to update the pg_dumpall --no-sync section. As of now, we are using this option with plain format as we dump server commands in different db file. We can test this more. On Wed, 19 Feb 2025 at 17:08, jian he wrote: > > hi. > > Currently, pg_retore says > --exit-on-error > Exit if an error is encountered while sending SQL commands to the > database. The default is to continue and to display a count of errors > at the end of the restoration. > Do we need to apply this to restore executing global commands (create > role, create tablespace)? > If not then we need to put some words in pg_restoe --exit-on-error > option saying that while restoring global objects --exit-on-error > option is ignored. I think this is the same for all pg_restore commands. Still if we want to add some docs, we can put. > > > > IMHO, in pg_restore.sgml, we need words explicitly saying that > when restoring multiple databases, all the specified options will > apply to each individual database. We can skip this extra info. I will try in the next version if we can add something in doc. > > I tested the following options for restoring multiple databases. The > results look good to me. > --index=3Dindex > --table=3Dtable > --schema-only > --transaction-size > --no-comments > some part of (--filter=3Dfilename) > --exclude-schema=3Dschema Thank you for detailed testing. > > attach is a minor cosmetic change. Okay. Here, I am attaching an updated patch for review and testing. --=20 Thanks and Regards Mahendra Singh Thalor EnterpriseDB: http://www.enterprisedb.com --000000000000b41fcb062e7e0597 Content-Type: application/octet-stream; name="v18_pg_dumpall-with-non-text_format-19th_feb.patch" Content-Disposition: attachment; filename="v18_pg_dumpall-with-non-text_format-19th_feb.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m7bwc8b30 RnJvbSAwYjQ4NjRlZWRmMjBiMGEzMjNkODhkNTE1OGJjYmZhMGQ2ZmZkYTk0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYWhlbmRyYSBTaW5naCBUaGFsb3IgPG1haGk2cnVuQGdtYWls LmNvbT4KRGF0ZTogV2VkLCAxOSBGZWIgMjAyNSAxNzo0NzoyNyArMDUzMApTdWJqZWN0OiBbUEFU Q0hdIHBnX2R1bXBhbGwgd2l0aCBkaXJlY3Rvcnl8dGFyfGN1c3RvbSBmb3JtYXQgYW5kIHJlc3Rv cmUgaXQgCiBieSBwZ19yZXN0b3JlCgpuZXcgb3B0aW9uIHRvIHBnX2R1bXBhbGw6Ci1GLCAtLWZv cm1hdD1kfHR8Y3xwICBvdXRwdXQgZmlsZSBmb3JtYXQgKCBwbGFpbiB0ZXh0IChkZWZhdWx0KSkK CkV4OjEgLi9wZ19kdW1wYWxsIC0tZm9ybWF0PWRpcmVjdG9yeSAtLWZpbGU9ZHVtcERpck5hbWUK RXg6MiAuL3BnX2R1bXBhbGwgLS1mb3JtYXQ9dGFyIC0tZmlsZT1kdW1wRGlyTmFtZQpFeDozIC4v cGdfZHVtcGFsbCAtLWZvcm1hdD1jdXN0b20gLS1maWxlPWR1bXBEaXJOYW1lCkV4OjQgLi9wZ19k dW1wYWxsIC0tZm9ybWF0PXBsYWluIC0tZmlsZT1kdW1wRGlyTmFtZQoKZHVtcHMgYXJlIGFzOgpn bG9iYWwuZGF0IDo6OiBnbG9iYWwgc3FsIGNvbW1hbmRzIGluIHNpbXBsZSBwbGFpbiBmb3JtYXQK bWFwLmRhdC4gICA6OjogZGJvaWQgZGJuYW1lIC0tLWVudHJpZXMgZm9yIGFsbCBkYXRhYmFzZXMg aW4gc2ltcGxlIHRleHQgZm9ybQpkYXRhYmFzZXMuIDo6OgogICAgICBzdWJkaXIgICAgIGRib2lk MSAgLT4gdG9jLmRhdCBhbmQgZGF0YSBmaWxlcyBpbiBhcmNoaXZlIGZvcm1hdAogICAgICBzdWJk aXIgICAgIGRib2lkMi4gLT4gdG9jLmRhdCBhbmQgZGF0YSBmaWxlcyBpbiBhcmNoaXZlIGZvcm1h dAogICAgICAgICAgICAgIGV0YwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KTk9URToKaWYgbmVlZGVkLCBy ZXN0b3JlIHNpbmdsZSBkYiBieSBwYXJ0aWN1bGFyIHN1YmRpcgoKRXg6IC4vcGdfcmVzdG9yZSAt LWZvcm1hdD1kaXJlY3RvcnkgLWQgcG9zdGdyZXMgZHVtcERpck5hbWUvZGF0YWJhc2VzLzUKICAg LS0gaGVyZSwgNSBpcyB0aGUgZGJvaWQgb2YgcG9zdGdyZXMgZGIKICAgLS0gdG8gZ2V0IGRib2lk LCByZWZlciBkYm5hbWUgaW4gbWFwLmZpbGUKCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCm5ldyBvcHRpb25z IHRvIHBnX3Jlc3RvcmU6Ci1nLCAtLWdsb2JhbHMtb25seSAgICAgICAgICAgcmVzdG9yZSBvbmx5 IGdsb2JhbCBvYmplY3RzLCBubyBkYXRhYmFzZXMKLS1leGNsdWRlLWRhdGFiYXNlPVBBVFRFUk4g ICBleGNsdWRlIGRhdGFiYXNlIHdob3NlIG5hbWUgbWF0Y2hlcyBwYXR0ZXJuCgpXaGVuIHdlIGdp dmUgLWcvLS1nbG9iYWxzLW9ubHkgb3B0aW9uLCB0aGVuIG9ubHkgcmVzdG9yZSBnbG9iYWxzLCBu byBkYiByZXN0b3JpbmcuCgpEZXNpZ246CldoZW4gLS1mb3JtYXQ9ZHx0fGMgaXMgc3BlY2lmaWVk IGFuZCB0aGVyZSBpcyBubyB0b2MuZGF0IGluIG1haW4gZGlyZWN0b3J5LCB0aGVuIGNoZWNrCmZv ciBnbG9iYWwuZGF0IHRvIHJlc3RvcmUgYWxsIGRhdGFiYXNlcy4gSWYgZ2xvYmFsLmRhdCBmaWxl IGlzIGV4aXN0IGluIGRpcmVjdG9yeSwKdGhlbiBmaXJzdCByZXN0b3JlIGFsbCBnbG9iYWxzIGZy b20gZ2xvYmFsLmRhdCBhbmQgdGhlbiByZXN0b3JlIGFsbCBkYXRhYmFzZXMgb25lIGJ5IG9uZQpm cm9tIG1hcC5kYXQgbGlzdCAoaWYgZXhpc3QpCgpUT0RPMTogV2UgbmVlZCB0byB0aGluayBmb3Ig LS1leGNsdWRlLWRhdGFiYXNlPVBBVFRFUk4gZm9yIHBnX3Jlc3RvcmUuCmFzIG9mIG5vdywgU0VM RUNUIDEgV0hFUkUgWFhYIE9QRVJBVE9SKHBnX2NhdGFsb2cufikgJ14oUEFUVEVSTikkJyBDT0xM QVRFIHBnX2NhdGFsb2cuZGVmYXVsdAppZiBkYiBjb25uZWN0aW9uLAppZiBubyBkYiBjb25uZWN0 aW9uLCB0aGVuIFBBVFRFUk49TkFNRSBtYXRjaGluZyBvbmx5CgpUT0RPMjogV2UgbmVlZCB0byBt YWtlIGNoYW5nZXMgZm9yIGV4aXRfbmljZWx5IGFzIHdlIGFyZSBvbmUgZW50cnkgZm9yIGVhY2gg ZGF0YWJhc2Ugd2hpbGUKcmVzdG9yaW5nLiBNQVhfT05fRVhJVF9OSUNFTFkKClRPRE8zOiBzb21l IG1vcmUgdGVzdCBjYXNlcyBmb3IgbmV3IGFkZGVkIG9wdGlvbnMuCgpUT0RPNDogV2UgY2FuIGR1 bXAgYW5kIHJlc3RvcmUgZGF0YWJhc2VzIGluIHBhcmFsbGVsIG1vZGUuClRoaXMgbmVlZHMgbW9y ZSBzdHVkeQoKdGhyZWFkOgpodHRwczovL3d3dy5wb3N0Z3Jlc3FsLm9yZy9tZXNzYWdlLWlkL2Zs YXQvQ0FLWXROQXA5dk90eWRYTDNfcG5HSiUyQlRldFp0TiUzREZZU25aU01DcVhjZVUzbWtIUHhQ ZyU0MG1haWwuZ21haWwuY29tIzA2NjQzM2NiNWFlMDA3Y2JlMzVmZWZkZGY3OTZkNTJmCi0tLQog ZG9jL3NyYy9zZ21sL3JlZi9wZ19kdW1wYWxsLnNnbWwgICAgICAgICB8ICA4MCArKy0KIGRvYy9z cmMvc2dtbC9yZWYvcGdfcmVzdG9yZS5zZ21sICAgICAgICAgfCAgNDEgKy0KIHNyYy9iaW4vcGdf ZHVtcC9NYWtlZmlsZSAgICAgICAgICAgICAgICAgfCAgIDggKy0KIHNyYy9iaW4vcGdfZHVtcC9j b21tb25fZHVtcGFsbF9yZXN0b3JlLmMgfCAyODYgKysrKysrKysKIHNyYy9iaW4vcGdfZHVtcC9j b21tb25fZHVtcGFsbF9yZXN0b3JlLmggfCAgMjYgKwogc3JjL2Jpbi9wZ19kdW1wL21lc29uLmJ1 aWxkICAgICAgICAgICAgICB8ICAgMiArCiBzcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwLmggICAg ICAgICAgICAgIHwgICA0ICstCiBzcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmMg ICAgIHwgIDIyICstCiBzcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX3Rhci5jICAgICAgICAgIHwg ICAyICstCiBzcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX3V0aWxzLmMgICAgICAgIHwgICAzICst CiBzcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jICAgICAgICAgICAgICAgIHwgICAyICstCiBzcmMv YmluL3BnX2R1bXAvcGdfZHVtcGFsbC5jICAgICAgICAgICAgIHwgNTUyICsrKysrKystLS0tLS0t LQogc3JjL2Jpbi9wZ19kdW1wL3BnX3Jlc3RvcmUuYyAgICAgICAgICAgICB8IDgyNyArKysrKysr KysrKysrKysrKysrKysrLQogc3JjL2Jpbi9wZ19kdW1wL3QvMDAxX2Jhc2ljLnBsICAgICAgICAg ICB8ICAgOSArCiBzcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCAgICAgICAgIHwgICAy ICsKIDE1IGZpbGVzIGNoYW5nZWQsIDE1MzMgaW5zZXJ0aW9ucygrKSwgMzMzIGRlbGV0aW9ucygt KQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9iaW4vcGdfZHVtcC9jb21tb25fZHVtcGFsbF9yZXN0 b3JlLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmluL3BnX2R1bXAvY29tbW9uX2R1bXBhbGxf cmVzdG9yZS5oCiBtb2RlIGNoYW5nZSAxMDA2NDQgPT4gMTAwNzU1IHNyYy9iaW4vcGdfZHVtcC90 LzAwMV9iYXNpYy5wbAoKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvcGdfZHVtcGFsbC5z Z21sIGIvZG9jL3NyYy9zZ21sL3JlZi9wZ19kdW1wYWxsLnNnbWwKaW5kZXggMzlkOTNjMmMwZTMu LjZlMTk3NWY1ZmYwIDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvcmVmL3BnX2R1bXBhbGwuc2dt bAorKysgYi9kb2Mvc3JjL3NnbWwvcmVmL3BnX2R1bXBhbGwuc2dtbApAQCAtMTYsNyArMTYsNyBA QCBQb3N0Z3JlU1FMIGRvY3VtZW50YXRpb24KIAogIDxyZWZuYW1lZGl2PgogICA8cmVmbmFtZT5w Z19kdW1wYWxsPC9yZWZuYW1lPgotICA8cmVmcHVycG9zZT5leHRyYWN0IGEgPHByb2R1Y3RuYW1l PlBvc3RncmVTUUw8L3Byb2R1Y3RuYW1lPiBkYXRhYmFzZSBjbHVzdGVyIGludG8gYSBzY3JpcHQg ZmlsZTwvcmVmcHVycG9zZT4KKyAgPHJlZnB1cnBvc2U+ZXh0cmFjdCBhIDxwcm9kdWN0bmFtZT5Q b3N0Z3JlU1FMPC9wcm9kdWN0bmFtZT4gZGF0YWJhc2UgY2x1c3RlciBiYXNlZCBvbiBzcGVjaWZp ZWQgZHVtcCBmb3JtYXQgPC9yZWZwdXJwb3NlPgogIDwvcmVmbmFtZWRpdj4KIAogIDxyZWZzeW5v cHNpc2Rpdj4KQEAgLTEyMSw3ICsxMjEsODMgQEAgUG9zdGdyZVNRTCBkb2N1bWVudGF0aW9uCiAg ICAgICAgPHBhcmE+CiAgICAgICAgIFNlbmQgb3V0cHV0IHRvIHRoZSBzcGVjaWZpZWQgZmlsZS4g IElmIHRoaXMgaXMgb21pdHRlZCwgdGhlCiAgICAgICAgIHN0YW5kYXJkIG91dHB1dCBpcyB1c2Vk LgotICAgICAgIDwvcGFyYT4KKyAgICAgICAgTm90ZTogVGhpcyBvcHRpb24gY2FuIGJlIG9taXR0 ZWQgb25seSB3aGVuIDxvcHRpb24+LS1mb3JtYXQ8L29wdGlvbj4gaXMgcGxhaW4KKyAgICAgICA8 L3BhcmE+CisgICAgICA8L2xpc3RpdGVtPgorICAgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgICA8 dmFybGlzdGVudHJ5PgorICAgICAgPHRlcm0+PG9wdGlvbj4tRiA8cmVwbGFjZWFibGUgY2xhc3M9 InBhcmFtZXRlciI+Zm9ybWF0PC9yZXBsYWNlYWJsZT48L29wdGlvbj48L3Rlcm0+CisgICAgICA8 dGVybT48b3B0aW9uPi0tZm9ybWF0PTxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5mb3Jt YXQ8L3JlcGxhY2VhYmxlPjwvb3B0aW9uPjwvdGVybT4KKyAgICAgIDxsaXN0aXRlbT4KKyAgICAg ICA8cGFyYT4KKyAgICAgICAgU3BlY2lmeSBmb3JtYXQgb2YgZHVtcCBmaWxlcy4gIElmIHdlIHdh bnQgdG8gZHVtcCBhbGwgdGhlIGRhdGFiYXNlcywKKyAgICAgICAgdGhlbiBwYXNzIHRoaXMgYXMg bm9uLXBsYWluIHNvIHRoYXQgZHVtcCBvZiBhbGwgZGF0YWJhc2VzIGNhbiBiZSB0YWtlbgorICAg ICAgICBpbiBzZXBhcmF0ZSBzdWJkaXJlY3RvcnkgaW4gYXJjaGl2ZSBmb3JtYXQuCisgICAgICAg IGJ5IGRlZmF1bHQsIHRoaXMgaXMgcGxhaW4gZm9ybWF0LgorCisgICAgICAgIElmIG5vbi1wbGFp biBtb2RlIGlzIHBhc3NlZCwgdGhlbiBnbG9iYWwuZGF0IChnbG9iYWwgc3FsIGNvbW1hbmRzKSBh bmQKKyAgICAgICAgbWFwLmRhdChkYm9pZCBhbmQgZGJuYW1lcyBsaXN0IG9mIGFsbCB0aGUgZGF0 YWJhc2VzKSBmaWxlcyB3aWxsIGJlIGNyZWF0ZWQuCisgICAgICAgIEFwYXJ0IGZyb20gdGhlc2Ug ZmlsZXMsIG9uZSBzdWJkaXJlY3Rvcnkgd2l0aCBkYXRhYmFzZXMgbmFtZSB3aWxsIGJlIGNyZWF0 ZWQuCisgICAgICAgIFVuZGVyIHRoaXMgZGF0YWJhc2VzIHN1YmRpcmVjdG9yeSwgdGhlcmUgd2ls bCBiZSBmaWxlcyB3aXRoIGRib2lkIG5hbWUgZm9yIGVhY2gKKyAgICAgICAgZGF0YWJhc2UgYW5k IGlmIDxvcHRpb24+LS1mb3JtYXQ8L29wdGlvbj4gaXMgZGlyZWN0b3J5LCB0aGVuIHRvYy5kYXQg YW5kIG90aGVyCisgICAgICAgIGR1bXAgZmlsZXMgd2lsbCBiZSB1bmRlciBkYm9pZCBzdWJkaXJl Y3RvcnkuCisKKyAgICAgICA8dmFyaWFibGVsaXN0PgorICAgICAgICA8dmFybGlzdGVudHJ5Pgor ICAgICAgICAgPHRlcm0+PGxpdGVyYWw+ZDwvbGl0ZXJhbD48L3Rlcm0+CisgICAgICAgICA8dGVy bT48bGl0ZXJhbD5kaXJlY3Rvcnk8L2xpdGVyYWw+PC90ZXJtPgorICAgICAgICAgPGxpc3RpdGVt PgorICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICBPdXRwdXQgYSBkaXJlY3RvcnktZm9ybWF0 IGFyY2hpdmUgc3VpdGFibGUgZm9yIGlucHV0IGludG8gcGdfcmVzdG9yZS4gVW5kZXIgZGJvaWQK KyAgICAgICAgICAgc3ViZGlyZWN0b3J5LCB0aGlzIHdpbGwgY3JlYXRlIGEgZGlyZWN0b3J5IHdp dGggb25lIGZpbGUgZm9yIGVhY2ggdGFibGUgYW5kIGxhcmdlCisgICAgICAgICAgIG9iamVjdCBi ZWluZyBkdW1wZWQsIHBsdXMgYSBzby1jYWxsZWQgVGFibGUgb2YgQ29udGVudHMgZmlsZSBkZXNj cmliaW5nIHRoZSBkdW1wZWQKKyAgICAgICAgICAgb2JqZWN0cyBpbiBhIG1hY2hpbmUtcmVhZGFi bGUgZm9ybWF0IHRoYXQgcGdfcmVzdG9yZSBjYW4gcmVhZC4gQSBkaXJlY3RvcnkgZm9ybWF0Cisg ICAgICAgICAgIGFyY2hpdmUgY2FuIGJlIG1hbmlwdWxhdGVkIHdpdGggc3RhbmRhcmQgVW5peCB0 b29sczsgZm9yIGV4YW1wbGUsIGZpbGVzIGluIGFuCisgICAgICAgICAgIHVuY29tcHJlc3NlZCBh cmNoaXZlIGNhbiBiZSBjb21wcmVzc2VkIHdpdGggdGhlIGd6aXAsIGx6NCwgb3IgenN0ZCB0b29s cy4gVGhpcworICAgICAgICAgICBmb3JtYXQgaXMgY29tcHJlc3NlZCBieSBkZWZhdWx0IHVzaW5n IGd6aXAgYW5kIGFsc28gc3VwcG9ydHMgcGFyYWxsZWwgZHVtcHMuCisgICAgICAgICAgPC9wYXJh PgorICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPC92YXJsaXN0ZW50cnk+CisKKyAgICAg ICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgIDx0ZXJtPjxsaXRlcmFsPnA8L2xpdGVyYWw+PC90 ZXJtPgorICAgICAgICAgPHRlcm0+PGxpdGVyYWw+cGxhaW48L2xpdGVyYWw+PC90ZXJtPgorICAg ICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICBPdXRwdXQgYSBw bGFpbi10ZXh0IFNRTCBzY3JpcHQgZmlsZSAodGhlIGRlZmF1bHQpLgorICAgICAgICAgIDwvcGFy YT4KKyAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDwvdmFybGlzdGVudHJ5PgorCisgICAg ICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAgICA8dGVybT48bGl0ZXJhbD5jPC9saXRlcmFsPjwv dGVybT4KKyAgICAgICAgIDx0ZXJtPjxsaXRlcmFsPmN1c3RvbTwvbGl0ZXJhbD48L3Rlcm0+Cisg ICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgIE91dHB1dCBh IGN1c3RvbS1mb3JtYXQgYXJjaGl2ZSBzdWl0YWJsZSBmb3IgaW5wdXQgaW50byBwZ19yZXN0b3Jl LiBUb2dldGhlciB3aXRoIHRoZQorICAgICAgICAgICBkaXJlY3Rvcnkgb3V0cHV0IGZvcm1hdCwg dGhpcyBpcyB0aGUgbW9zdCBmbGV4aWJsZSBvdXRwdXQgZm9ybWF0IGluIHRoYXQgaXQgYWxsb3dz IG1hbnVhbAorICAgICAgICAgICBzZWxlY3Rpb24gYW5kIHJlb3JkZXJpbmcgb2YgYXJjaGl2ZWQg aXRlbXMgZHVyaW5nIHJlc3RvcmUuIFRoaXMgZm9ybWF0IGlzIGFsc28KKyAgICAgICAgICAgY29t cHJlc3NlZCBieSBkZWZhdWx0LgorICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgIDwvbGlzdGl0 ZW0+CisgICAgICAgIDwvdmFybGlzdGVudHJ5PgorCisgICAgICAgICA8dmFybGlzdGVudHJ5Pgor ICAgICAgICAgPHRlcm0+PGxpdGVyYWw+dDwvbGl0ZXJhbD48L3Rlcm0+CisgICAgICAgICA8dGVy bT48bGl0ZXJhbD50YXI8L2xpdGVyYWw+PC90ZXJtPgorICAgICAgICAgPGxpc3RpdGVtPgorICAg ICAgICAgIDxwYXJhPgorICAgICAgICAgICBPdXRwdXQgYSB0YXItZm9ybWF0IGFyY2hpdmUgc3Vp dGFibGUgZm9yIGlucHV0IGludG8gcGdfcmVzdG9yZS4gVGhlIHRhciBmb3JtYXQgaXMKKyAgICAg ICAgICAgY29tcGF0aWJsZSB3aXRoIHRoZSBkaXJlY3RvcnkgZm9ybWF0OiBleHRyYWN0aW5nIGEg dGFyLWZvcm1hdCBhcmNoaXZlIHByb2R1Y2VzIGEgdmFsaWQKKyAgICAgICAgICAgZGlyZWN0b3J5 LWZvcm1hdCBhcmNoaXZlLiBIb3dldmVyLCB0aGUgdGFyIGZvcm1hdCBkb2VzIG5vdCBzdXBwb3J0 IGNvbXByZXNzaW9uLiBBbHNvLAorICAgICAgICAgICB3aGVuIHVzaW5nIHRhciBmb3JtYXQgdGhl IHJlbGF0aXZlIG9yZGVyIG9mIHRhYmxlIGRhdGEgaXRlbXMgY2Fubm90IGJlIGNoYW5nZWQgZHVy aW5nIHJlc3RvcmUuCisgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgPC9saXN0aXRlbT4KKyAg ICAgICAgPC92YXJsaXN0ZW50cnk+CisKKyAgICAgICAgPC92YXJpYWJsZWxpc3Q+CisgICAgICAg IDwvcGFyYT4KICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgIDwvdmFybGlzdGVudHJ5PgogCmRpZmYg LS1naXQgYS9kb2Mvc3JjL3NnbWwvcmVmL3BnX3Jlc3RvcmUuc2dtbCBiL2RvYy9zcmMvc2dtbC9y ZWYvcGdfcmVzdG9yZS5zZ21sCmluZGV4IGI4YjI3ZTE3MTllLi44MzViMzMxNTcxMyAxMDA2NDQK LS0tIGEvZG9jL3NyYy9zZ21sL3JlZi9wZ19yZXN0b3JlLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21s L3JlZi9wZ19yZXN0b3JlLnNnbWwKQEAgLTE4LDggKzE4LDkgQEAgUG9zdGdyZVNRTCBkb2N1bWVu dGF0aW9uCiAgIDxyZWZuYW1lPnBnX3Jlc3RvcmU8L3JlZm5hbWU+CiAKICAgPHJlZnB1cnBvc2U+ Ci0gICByZXN0b3JlIGEgPHByb2R1Y3RuYW1lPlBvc3RncmVTUUw8L3Byb2R1Y3RuYW1lPiBkYXRh YmFzZSBmcm9tIGFuCi0gICBhcmNoaXZlIGZpbGUgY3JlYXRlZCBieSA8YXBwbGljYXRpb24+cGdf ZHVtcDwvYXBwbGljYXRpb24+CisgICByZXN0b3JlIDxwcm9kdWN0bmFtZT5Qb3N0Z3JlU1FMPC9w cm9kdWN0bmFtZT4gZGF0YWJhc2UgZnJvbSBhbgorICAgYXJjaGl2ZSBmaWxlIGNyZWF0ZWQgYnkg PGFwcGxpY2F0aW9uPnBnX2R1bXA8L2FwcGxpY2F0aW9uPiBvcgorICAgPGFwcGxpY2F0aW9uPnBn X2R1bXBhbGw8L2FwcGxpY2F0aW9uPgogICA8L3JlZnB1cnBvc2U+CiAgPC9yZWZuYW1lZGl2Pgog CkBAIC0zNyw5ICszOCwxMCBAQCBQb3N0Z3JlU1FMIGRvY3VtZW50YXRpb24KICAgPHRpdGxlPkRl c2NyaXB0aW9uPC90aXRsZT4KIAogICA8cGFyYT4KLSAgIDxhcHBsaWNhdGlvbj5wZ19yZXN0b3Jl PC9hcHBsaWNhdGlvbj4gaXMgYSB1dGlsaXR5IGZvciByZXN0b3JpbmcgYQorICAgPGFwcGxpY2F0 aW9uPnBnX3Jlc3RvcmU8L2FwcGxpY2F0aW9uPiBpcyBhIHV0aWxpdHkgZm9yIHJlc3RvcmluZwog ICAgPHByb2R1Y3RuYW1lPlBvc3RncmVTUUw8L3Byb2R1Y3RuYW1lPiBkYXRhYmFzZSBmcm9tIGFu IGFyY2hpdmUKLSAgIGNyZWF0ZWQgYnkgPHhyZWYgbGlua2VuZD0iYXBwLXBnZHVtcCIvPiBpbiBv bmUgb2YgdGhlIG5vbi1wbGFpbi10ZXh0CisgICBjcmVhdGVkIGJ5IDx4cmVmIGxpbmtlbmQ9ImFw cC1wZ2R1bXAiLz4gb3IKKyAgIDx4cmVmIGxpbmtlbmQ9ImFwcC1wZy1kdW1wYWxsIi8+IGluIG9u ZSBvZiB0aGUgbm9uLXBsYWluLXRleHQKICAgIGZvcm1hdHMuICBJdCB3aWxsIGlzc3VlIHRoZSBj b21tYW5kcyBuZWNlc3NhcnkgdG8gcmVjb25zdHJ1Y3QgdGhlCiAgICBkYXRhYmFzZSB0byB0aGUg c3RhdGUgaXQgd2FzIGluIGF0IHRoZSB0aW1lIGl0IHdhcyBzYXZlZC4gIFRoZQogICAgYXJjaGl2 ZSBmaWxlcyBhbHNvIGFsbG93IDxhcHBsaWNhdGlvbj5wZ19yZXN0b3JlPC9hcHBsaWNhdGlvbj4g dG8KQEAgLTE0MCw2ICsxNDIsOCBAQCBQb3N0Z3JlU1FMIGRvY3VtZW50YXRpb24KICAgICAgICAg Y29tbWFuZHMgdGhhdCBtZW50aW9uIHRoaXMgZGF0YWJhc2UuCiAgICAgICAgIEFjY2VzcyBwcml2 aWxlZ2VzIGZvciB0aGUgZGF0YWJhc2UgaXRzZWxmIGFyZSBhbHNvIHJlc3RvcmVkLAogICAgICAg ICB1bmxlc3MgPG9wdGlvbj4tLW5vLWFjbDwvb3B0aW9uPiBpcyBzcGVjaWZpZWQuCisgICAgICAg IDxvcHRpb24+LS1jcmVhdGU8L29wdGlvbj4gaXMgcmVxdWlyZWQgd2hlbiByZXN0b3JpbmcgbXVs dGlwbGUgZGF0YWJhc2VzCisgICAgICAgIGZyb20gZHVtcCBvZiA8YXBwbGljYXRpb24+cGdfZHVt cGFsbDwvYXBwbGljYXRpb24+LgogICAgICAgIDwvcGFyYT4KIAogICAgICAgIDxwYXJhPgpAQCAt MTY2LDYgKzE3MCwyNSBAQCBQb3N0Z3JlU1FMIGRvY3VtZW50YXRpb24KICAgICAgIDwvbGlzdGl0 ZW0+CiAgICAgIDwvdmFybGlzdGVudHJ5PgogCisgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICA8 dGVybT48b3B0aW9uPi0tZXhjbHVkZS1kYXRhYmFzZT08cmVwbGFjZWFibGUgY2xhc3M9InBhcmFt ZXRlciI+cGF0dGVybjwvcmVwbGFjZWFibGU+PC9vcHRpb24+PC90ZXJtPgorICAgICAgPGxpc3Rp dGVtPgorICAgICAgIDxwYXJhPgorICAgICAgICBEbyBub3QgcmVzdG9yZSBkYXRhYmFzZXMgd2hv c2UgbmFtZSBtYXRjaGVzCisgICAgICAgIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5w YXR0ZXJuPC9yZXBsYWNlYWJsZT4uCisgICAgICAgIE11bHRpcGxlIHBhdHRlcm5zIGNhbiBiZSBl eGNsdWRlZCBieSB3cml0aW5nIG11bHRpcGxlCisgICAgICAgIDxvcHRpb24+LS1leGNsdWRlLWRh dGFiYXNlPC9vcHRpb24+IHN3aXRjaGVzLiAgVGhlCisgICAgICAgIDxyZXBsYWNlYWJsZSBjbGFz cz0icGFyYW1ldGVyIj5wYXR0ZXJuPC9yZXBsYWNlYWJsZT4gcGFyYW1ldGVyIGlzCisgICAgICAg IGludGVycHJldGVkIGFzIGEgcGF0dGVybiBhY2NvcmRpbmcgdG8gdGhlIHNhbWUgcnVsZXMgdXNl ZCBieQorICAgICAgICA8YXBwbGljYXRpb24+cHNxbDwvYXBwbGljYXRpb24+J3MgPGxpdGVyYWw+ XGQ8L2xpdGVyYWw+CisgICAgICAgIGNvbW1hbmRzIChzZWUgPHhyZWYgbGlua2VuZD0iYXBwLXBz cWwtcGF0dGVybnMiLz4pLAorICAgICAgICBzbyBtdWx0aXBsZSBkYXRhYmFzZXMgY2FuIGFsc28g YmUgZXhjbHVkZWQgYnkgd3JpdGluZyB3aWxkY2FyZAorICAgICAgICBjaGFyYWN0ZXJzIGluIHRo ZSBwYXR0ZXJuLiAgV2hlbiB1c2luZyB3aWxkY2FyZHMsIGJlIGNhcmVmdWwgdG8KKyAgICAgICAg cXVvdGUgdGhlIHBhdHRlcm4gaWYgbmVlZGVkIHRvIHByZXZlbnQgc2hlbGwgd2lsZGNhcmQgZXhw YW5zaW9uLgorICAgICAgIDwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgIDwvdmFybGlz dGVudHJ5PgorCiAgICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgICA8dGVybT48b3B0aW9uPi1lPC9v cHRpb24+PC90ZXJtPgogICAgICAgPHRlcm0+PG9wdGlvbj4tLWV4aXQtb24tZXJyb3I8L29wdGlv bj48L3Rlcm0+CkBAIC0zMTUsNiArMzM4LDE2IEBAIFBvc3RncmVTUUwgZG9jdW1lbnRhdGlvbgog ICAgICAgPC9saXN0aXRlbT4KICAgICAgPC92YXJsaXN0ZW50cnk+CiAKKyAgICAgPHZhcmxpc3Rl bnRyeT4KKyAgICAgIDx0ZXJtPjxvcHRpb24+LWc8L29wdGlvbj48L3Rlcm0+CisgICAgICA8dGVy bT48b3B0aW9uPi0tZ2xvYmFscy1vbmx5PC9vcHRpb24+PC90ZXJtPgorICAgICAgPGxpc3RpdGVt PgorICAgICAgIDxwYXJhPgorICAgICAgICBSZXN0b3JlIG9ubHkgZ2xvYmFsIG9iamVjdHMgKHJv bGVzIGFuZCB0YWJsZXNwYWNlcyksIG5vIGRhdGFiYXNlcy4KKyAgICAgICA8L3BhcmE+CisgICAg ICA8L2xpc3RpdGVtPgorICAgICA8L3Zhcmxpc3RlbnRyeT4KKwogICAgICA8dmFybGlzdGVudHJ5 PgogICAgICAgPHRlcm0+PG9wdGlvbj4tSSA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+ aW5kZXg8L3JlcGxhY2VhYmxlPjwvb3B0aW9uPjwvdGVybT4KICAgICAgIDx0ZXJtPjxvcHRpb24+ LS1pbmRleD08cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+aW5kZXg8L3JlcGxhY2VhYmxl Pjwvb3B0aW9uPjwvdGVybT4KZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9NYWtlZmlsZSBi L3NyYy9iaW4vcGdfZHVtcC9NYWtlZmlsZQppbmRleCAyMzNhZDE1Y2E3NS4uYTRlNTU3ZDYyYzcg MTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9NYWtlZmlsZQorKysgYi9zcmMvYmluL3BnX2R1 bXAvTWFrZWZpbGUKQEAgLTQ3LDExICs0NywxMSBAQCBhbGw6IHBnX2R1bXAgcGdfcmVzdG9yZSBw Z19kdW1wYWxsCiBwZ19kdW1wOiBwZ19kdW1wLm8gY29tbW9uLm8gcGdfZHVtcF9zb3J0Lm8gJChP QkpTKSB8IHN1Ym1ha2UtbGlicHEgc3VibWFrZS1saWJwZ3BvcnQgc3VibWFrZS1saWJwZ2ZldXRp bHMKIAkkKENDKSAkKENGTEFHUykgcGdfZHVtcC5vIGNvbW1vbi5vIHBnX2R1bXBfc29ydC5vICQo T0JKUykgJChMREZMQUdTKSAkKExERkxBR1NfRVgpICQoTElCUykgLW8gJEAkKFgpCiAKLXBnX3Jl c3RvcmU6IHBnX3Jlc3RvcmUubyAkKE9CSlMpIHwgc3VibWFrZS1saWJwcSBzdWJtYWtlLWxpYnBn cG9ydCBzdWJtYWtlLWxpYnBnZmV1dGlscwotCSQoQ0MpICQoQ0ZMQUdTKSBwZ19yZXN0b3JlLm8g JChPQkpTKSAkKExERkxBR1MpICQoTERGTEFHU19FWCkgJChMSUJTKSAtbyAkQCQoWCkKK3BnX3Jl c3RvcmU6IHBnX3Jlc3RvcmUubyBjb21tb25fZHVtcGFsbF9yZXN0b3JlLm8gJChPQkpTKSB8IHN1 Ym1ha2UtbGlicHEgc3VibWFrZS1saWJwZ3BvcnQgc3VibWFrZS1saWJwZ2ZldXRpbHMKKwkkKEND KSAkKENGTEFHUykgcGdfcmVzdG9yZS5vIGNvbW1vbl9kdW1wYWxsX3Jlc3RvcmUubyAkKE9CSlMp ICQoTERGTEFHUykgJChMREZMQUdTX0VYKSAkKExJQlMpIC1vICRAJChYKQogCi1wZ19kdW1wYWxs OiBwZ19kdW1wYWxsLm8gZHVtcHV0aWxzLm8gZmlsdGVyLm8gJChXSU4zMlJFUykgfCBzdWJtYWtl LWxpYnBxIHN1Ym1ha2UtbGlicGdwb3J0IHN1Ym1ha2UtbGlicGdmZXV0aWxzCi0JJChDQykgJChD RkxBR1MpIHBnX2R1bXBhbGwubyBkdW1wdXRpbHMubyBmaWx0ZXIubyAkKFdJTjMyUkVTKSAkKExE RkxBR1MpICQoTERGTEFHU19FWCkgJChMSUJTKSAtbyAkQCQoWCkKK3BnX2R1bXBhbGw6IHBnX2R1 bXBhbGwubyBkdW1wdXRpbHMubyBmaWx0ZXIubyBjb21tb25fZHVtcGFsbF9yZXN0b3JlLm8gJChX SU4zMlJFUykgfCBzdWJtYWtlLWxpYnBxIHN1Ym1ha2UtbGlicGdwb3J0IHN1Ym1ha2UtbGlicGdm ZXV0aWxzCisJJChDQykgJChDRkxBR1MpIHBnX2R1bXBhbGwubyBkdW1wdXRpbHMubyBmaWx0ZXIu byBjb21tb25fZHVtcGFsbF9yZXN0b3JlLm8gJChXSU4zMlJFUykgJChMREZMQUdTKSAkKExERkxB R1NfRVgpICQoTElCUykgLW8gJEAkKFgpCiAKIGluc3RhbGw6IGFsbCBpbnN0YWxsZGlycwogCSQo SU5TVEFMTF9QUk9HUkFNKSBwZ19kdW1wJChYKSAnJChERVNURElSKSQoYmluZGlyKScvcGdfZHVt cCQoWCkKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9jb21tb25fZHVtcGFsbF9yZXN0b3Jl LmMgYi9zcmMvYmluL3BnX2R1bXAvY29tbW9uX2R1bXBhbGxfcmVzdG9yZS5jCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5iMTYyY2Y2OTQxMgotLS0gL2Rldi9udWxsCisr KyBiL3NyYy9iaW4vcGdfZHVtcC9jb21tb25fZHVtcGFsbF9yZXN0b3JlLmMKQEAgLTAsMCArMSwy ODYgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIGNvbW1vbl9kdW1wYWxsX3Jlc3RvcmUu YworICoKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5Ni0yMDI1LCBQb3N0Z3JlU1FMIEds b2JhbCBEZXZlbG9wbWVudCBHcm91cAorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk0LCBS ZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEKKyAqCisgKiBUaGlzIGlzIGEg Y29tbW9uIGZpbGUgZm9yIHBnX2R1bXBhbGwgYW5kIHBnX3Jlc3RvcmUuCisgKiBzcmMvYmluL3Bn X2R1bXAvY29tbW9uX2R1bXBhbGxfcmVzdG9yZS5jCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg Ki8KKworI2luY2x1ZGUgInBvc3RncmVzX2ZlLmgiCisKKyNpbmNsdWRlICJjb21tb24vY29ubmVj dC5oIgorI2luY2x1ZGUgImNvbW1vbi9sb2dnaW5nLmgiCisjaW5jbHVkZSAiY29tbW9uL3N0cmlu Zy5oIgorI2luY2x1ZGUgImNvbW1vbl9kdW1wYWxsX3Jlc3RvcmUuaCIKKyNpbmNsdWRlICJkdW1w dXRpbHMuaCIKKyNpbmNsdWRlICJmZV91dGlscy9zdHJpbmdfdXRpbHMuaCIKKworc3RhdGljIGNo YXIgKmNvbnN0cnVjdENvbm5TdHIoY29uc3QgY2hhciAqKmtleXdvcmRzLCBjb25zdCBjaGFyICoq dmFsdWVzKTsKKyNkZWZpbmUgZXhpdF9uaWNlbHkoY29kZSkgZXhpdChjb2RlKQorCisvKgorICog Y29ubmVjdERhdGFiYXNlCisgKgorICogTWFrZSBhIGRhdGFiYXNlIGNvbm5lY3Rpb24gd2l0aCB0 aGUgZ2l2ZW4gcGFyYW1ldGVycy4gIEFuCisgKiBpbnRlcmFjdGl2ZSBwYXNzd29yZCBwcm9tcHQg aXMgYXV0b21hdGljYWxseSBpc3N1ZWQgaWYgcmVxdWlyZWQuCisgKgorICogSWYgZmFpbF9vbl9l cnJvciBpcyBmYWxzZSwgd2UgcmV0dXJuIE5VTEwgd2l0aG91dCBwcmludGluZyBhbnkgbWVzc2Fn ZQorICogb24gZmFpbHVyZSwgYnV0IHByZXNlcnZlIGFueSBwcm9tcHRlZCBwYXNzd29yZCBmb3Ig dGhlIG5leHQgdHJ5LgorICoKKyAqIE9uIHN1Y2Nlc3MsIHRoZSBnbG9iYWwgdmFyaWFibGUgJ2Nv bm5zdHInIGlzIHNldCB0byBhIGNvbm5lY3Rpb24gc3RyaW5nCisgKiBjb250YWluaW5nIHRoZSBv cHRpb25zIHVzZWQuCisgKi8KK1BHY29ubiAqCitjb25uZWN0RGF0YWJhc2UoY29uc3QgY2hhciAq ZGJuYW1lLCBjb25zdCBjaGFyICpjb25uZWN0aW9uX3N0cmluZywKKwkJCQljb25zdCBjaGFyICpw Z2hvc3QsIGNvbnN0IGNoYXIgKnBncG9ydCwgY29uc3QgY2hhciAqcGd1c2VyLAorCQkJCXRyaXZh bHVlIHByb21wdF9wYXNzd29yZCwgYm9vbCBmYWlsX29uX2Vycm9yLCBjb25zdCBjaGFyICpwcm9n bmFtZSwKKwkJCQljb25zdCBjaGFyICoqY29ubnN0ciwgaW50ICpzZXJ2ZXJfdmVyc2lvbikKK3sK KwlQR2Nvbm4JICAgKmNvbm47CisJYm9vbAkJbmV3X3Bhc3M7CisJY29uc3QgY2hhciAqcmVtb3Rl dmVyc2lvbl9zdHI7CisJaW50CQkJbXlfdmVyc2lvbjsKKwljb25zdCBjaGFyICoqa2V5d29yZHMg PSBOVUxMOworCWNvbnN0IGNoYXIgKip2YWx1ZXMgPSBOVUxMOworCVBRY29ubmluZm9PcHRpb24g KmNvbm5fb3B0cyA9IE5VTEw7CisJc3RhdGljIGNoYXIgKnBhc3N3b3JkID0gTlVMTDsKKwlpbnQJ CQlzZXJ2ZXJfdmVyc2lvbl90ZW1wOworCisJaWYgKHByb21wdF9wYXNzd29yZCA9PSBUUklfWUVT ICYmICFwYXNzd29yZCkKKwkJcGFzc3dvcmQgPSBzaW1wbGVfcHJvbXB0KCJQYXNzd29yZDogIiwg ZmFsc2UpOworCisJLyoKKwkgKiBTdGFydCB0aGUgY29ubmVjdGlvbi4gIExvb3AgdW50aWwgd2Ug aGF2ZSBhIHBhc3N3b3JkIGlmIHJlcXVlc3RlZCBieQorCSAqIGJhY2tlbmQuCisJICovCisJZG8K Kwl7CisJCWludAkJCWFyZ2NvdW50ID0gNjsKKwkJUFFjb25uaW5mb09wdGlvbiAqY29ubl9vcHQ7 CisJCWNoYXIJICAgKmVycl9tc2cgPSBOVUxMOworCQlpbnQJCQlpID0gMDsKKworCQlmcmVlKGtl eXdvcmRzKTsKKwkJZnJlZSh2YWx1ZXMpOworCQlQUWNvbm5pbmZvRnJlZShjb25uX29wdHMpOwor CisJCS8qCisJCSAqIE1lcmdlIHRoZSBjb25uZWN0aW9uIGluZm8gaW5wdXRzIGdpdmVuIGluIGZv cm0gb2YgY29ubmVjdGlvbiBzdHJpbmcKKwkJICogYW5kIG90aGVyIG9wdGlvbnMuICBFeHBsaWNp dGx5IGRpc2NhcmQgYW55IGRibmFtZSB2YWx1ZSBpbiB0aGUKKwkJICogY29ubmVjdGlvbiBzdHJp bmc7IG90aGVyd2lzZSwgUFFjb25uZWN0ZGJQYXJhbXMoKSB3b3VsZCBpbnRlcnByZXQKKwkJICog dGhhdCB2YWx1ZSBhcyBiZWluZyBpdHNlbGYgYSBjb25uZWN0aW9uIHN0cmluZy4KKwkJICovCisJ CWlmIChjb25uZWN0aW9uX3N0cmluZykKKwkJeworCQkJY29ubl9vcHRzID0gUFFjb25uaW5mb1Bh cnNlKGNvbm5lY3Rpb25fc3RyaW5nLCAmZXJyX21zZyk7CisJCQlpZiAoY29ubl9vcHRzID09IE5V TEwpCisJCQkJcGdfZmF0YWwoIiVzIiwgZXJyX21zZyk7CisKKwkJCWZvciAoY29ubl9vcHQgPSBj b25uX29wdHM7IGNvbm5fb3B0LT5rZXl3b3JkICE9IE5VTEw7IGNvbm5fb3B0KyspCisJCQl7CisJ CQkJaWYgKGNvbm5fb3B0LT52YWwgIT0gTlVMTCAmJiBjb25uX29wdC0+dmFsWzBdICE9ICdcMCcg JiYKKwkJCQkJc3RyY21wKGNvbm5fb3B0LT5rZXl3b3JkLCAiZGJuYW1lIikgIT0gMCkKKwkJCQkJ YXJnY291bnQrKzsKKwkJCX0KKworCQkJa2V5d29yZHMgPSBwZ19tYWxsb2MwKChhcmdjb3VudCAr IDEpICogc2l6ZW9mKCprZXl3b3JkcykpOworCQkJdmFsdWVzID0gcGdfbWFsbG9jMCgoYXJnY291 bnQgKyAxKSAqIHNpemVvZigqdmFsdWVzKSk7CisKKwkJCWZvciAoY29ubl9vcHQgPSBjb25uX29w dHM7IGNvbm5fb3B0LT5rZXl3b3JkICE9IE5VTEw7IGNvbm5fb3B0KyspCisJCQl7CisJCQkJaWYg KGNvbm5fb3B0LT52YWwgIT0gTlVMTCAmJiBjb25uX29wdC0+dmFsWzBdICE9ICdcMCcgJiYKKwkJ CQkJc3RyY21wKGNvbm5fb3B0LT5rZXl3b3JkLCAiZGJuYW1lIikgIT0gMCkKKwkJCQl7CisJCQkJ CWtleXdvcmRzW2ldID0gY29ubl9vcHQtPmtleXdvcmQ7CisJCQkJCXZhbHVlc1tpXSA9IGNvbm5f b3B0LT52YWw7CisJCQkJCWkrKzsKKwkJCQl9CisJCQl9CisJCX0KKwkJZWxzZQorCQl7CisJCQlr ZXl3b3JkcyA9IHBnX21hbGxvYzAoKGFyZ2NvdW50ICsgMSkgKiBzaXplb2YoKmtleXdvcmRzKSk7 CisJCQl2YWx1ZXMgPSBwZ19tYWxsb2MwKChhcmdjb3VudCArIDEpICogc2l6ZW9mKCp2YWx1ZXMp KTsKKwkJfQorCisJCWlmIChwZ2hvc3QpCisJCXsKKwkJCWtleXdvcmRzW2ldID0gImhvc3QiOwor CQkJdmFsdWVzW2ldID0gcGdob3N0OworCQkJaSsrOworCQl9CisJCWlmIChwZ3BvcnQpCisJCXsK KwkJCWtleXdvcmRzW2ldID0gInBvcnQiOworCQkJdmFsdWVzW2ldID0gcGdwb3J0OworCQkJaSsr OworCQl9CisJCWlmIChwZ3VzZXIpCisJCXsKKwkJCWtleXdvcmRzW2ldID0gInVzZXIiOworCQkJ dmFsdWVzW2ldID0gcGd1c2VyOworCQkJaSsrOworCQl9CisJCWlmIChwYXNzd29yZCkKKwkJewor CQkJa2V5d29yZHNbaV0gPSAicGFzc3dvcmQiOworCQkJdmFsdWVzW2ldID0gcGFzc3dvcmQ7CisJ CQlpKys7CisJCX0KKwkJaWYgKGRibmFtZSkKKwkJeworCQkJa2V5d29yZHNbaV0gPSAiZGJuYW1l IjsKKwkJCXZhbHVlc1tpXSA9IGRibmFtZTsKKwkJCWkrKzsKKwkJfQorCQlrZXl3b3Jkc1tpXSA9 ICJmYWxsYmFja19hcHBsaWNhdGlvbl9uYW1lIjsKKwkJdmFsdWVzW2ldID0gcHJvZ25hbWU7CisJ CWkrKzsKKworCQluZXdfcGFzcyA9IGZhbHNlOworCQljb25uID0gUFFjb25uZWN0ZGJQYXJhbXMo a2V5d29yZHMsIHZhbHVlcywgdHJ1ZSk7CisKKwkJaWYgKCFjb25uKQorCQkJcGdfZmF0YWwoImNv dWxkIG5vdCBjb25uZWN0IHRvIGRhdGFiYXNlIFwiJXNcIiIsIGRibmFtZSk7CisKKwkJaWYgKFBR c3RhdHVzKGNvbm4pID09IENPTk5FQ1RJT05fQkFEICYmCisJCQlQUWNvbm5lY3Rpb25OZWVkc1Bh c3N3b3JkKGNvbm4pICYmCisJCQkhcGFzc3dvcmQgJiYKKwkJCXByb21wdF9wYXNzd29yZCAhPSBU UklfTk8pCisJCXsKKwkJCVBRZmluaXNoKGNvbm4pOworCQkJcGFzc3dvcmQgPSBzaW1wbGVfcHJv bXB0KCJQYXNzd29yZDogIiwgZmFsc2UpOworCQkJbmV3X3Bhc3MgPSB0cnVlOworCQl9CisJfSB3 aGlsZSAobmV3X3Bhc3MpOworCisJLyogY2hlY2sgdG8gc2VlIHRoYXQgdGhlIGJhY2tlbmQgY29u bmVjdGlvbiB3YXMgc3VjY2Vzc2Z1bGx5IG1hZGUgKi8KKwlpZiAoUFFzdGF0dXMoY29ubikgPT0g Q09OTkVDVElPTl9CQUQpCisJeworCQlpZiAoZmFpbF9vbl9lcnJvcikKKwkJCXBnX2ZhdGFsKCIl cyIsIFBRZXJyb3JNZXNzYWdlKGNvbm4pKTsKKwkJZWxzZQorCQl7CisJCQlQUWZpbmlzaChjb25u KTsKKworCQkJZnJlZShrZXl3b3Jkcyk7CisJCQlmcmVlKHZhbHVlcyk7CisJCQlQUWNvbm5pbmZv RnJlZShjb25uX29wdHMpOworCisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCX0KKworCS8qCisJICog T2ssIGNvbm5lY3RlZCBzdWNjZXNzZnVsbHkuIFJlbWVtYmVyIHRoZSBvcHRpb25zIHVzZWQsIGlu IHRoZSBmb3JtIG9mIGEKKwkgKiBjb25uZWN0aW9uIHN0cmluZy4KKwkgKi8KKwlpZiAoY29ubnN0 cikKKwkJKmNvbm5zdHIgPSBjb25zdHJ1Y3RDb25uU3RyKGtleXdvcmRzLCB2YWx1ZXMpOworCisJ ZnJlZShrZXl3b3Jkcyk7CisJZnJlZSh2YWx1ZXMpOworCVBRY29ubmluZm9GcmVlKGNvbm5fb3B0 cyk7CisKKwkvKiBDaGVjayB2ZXJzaW9uICovCisJcmVtb3RldmVyc2lvbl9zdHIgPSBQUXBhcmFt ZXRlclN0YXR1cyhjb25uLCAic2VydmVyX3ZlcnNpb24iKTsKKwlpZiAoIXJlbW90ZXZlcnNpb25f c3RyKQorCQlwZ19mYXRhbCgiY291bGQgbm90IGdldCBzZXJ2ZXIgdmVyc2lvbiIpOworCXNlcnZl cl92ZXJzaW9uX3RlbXAgPSBQUXNlcnZlclZlcnNpb24oY29ubik7CisJaWYgKHNlcnZlcl92ZXJz aW9uX3RlbXAgPT0gMCkKKwkJcGdfZmF0YWwoImNvdWxkIG5vdCBwYXJzZSBzZXJ2ZXIgdmVyc2lv biBcIiVzXCIiLAorCQkJCSByZW1vdGV2ZXJzaW9uX3N0cik7CisKKwkvKiBJZiBuZWVkZWQsIHRo ZW4gY29weSBzZXJ2ZXIgdmVyc2lvbiB0byBvdXRlciBmdW5jdGlvbi4gKi8KKwlpZiAoc2VydmVy X3ZlcnNpb24pCisJCSpzZXJ2ZXJfdmVyc2lvbiA9IHNlcnZlcl92ZXJzaW9uX3RlbXA7CisKKwlt eV92ZXJzaW9uID0gUEdfVkVSU0lPTl9OVU07CisKKwkvKgorCSAqIFdlIGFsbG93IHRoZSBzZXJ2 ZXIgdG8gYmUgYmFjayB0byA5LjIsIGFuZCB1cCB0byBhbnkgbWlub3IgcmVsZWFzZSBvZgorCSAq IG91ciBvd24gbWFqb3IgdmVyc2lvbi4gIChTZWUgYWxzbyB2ZXJzaW9uIGNoZWNrIGluIHBnX2R1 bXAuYy4pCisJICovCisJaWYgKG15X3ZlcnNpb24gIT0gc2VydmVyX3ZlcnNpb25fdGVtcAorCQkm JiAoc2VydmVyX3ZlcnNpb25fdGVtcCA8IDkwMjAwIHx8CisJCQkoc2VydmVyX3ZlcnNpb25fdGVt cCAvIDEwMCkgPiAobXlfdmVyc2lvbiAvIDEwMCkpKQorCXsKKwkJcGdfbG9nX2Vycm9yKCJhYm9y dGluZyBiZWNhdXNlIG9mIHNlcnZlciB2ZXJzaW9uIG1pc21hdGNoIik7CisJCXBnX2xvZ19lcnJv cl9kZXRhaWwoInNlcnZlciB2ZXJzaW9uOiAlczsgJXMgdmVyc2lvbjogJXMiLAorCQkJCQkJCXJl bW90ZXZlcnNpb25fc3RyLCBwcm9nbmFtZSwgUEdfVkVSU0lPTik7CisJCWV4aXRfbmljZWx5KDEp OworCX0KKworCVBRY2xlYXIoZXhlY3V0ZVF1ZXJ5KGNvbm4sIEFMV0FZU19TRUNVUkVfU0VBUkNI X1BBVEhfU1FMKSk7CisKKwlyZXR1cm4gY29ubjsKK30KKworLyoKKyAqIGNvbnN0cnVjdENvbm5T dHIKKyAqCisgKiBDb25zdHJ1Y3QgYSBjb25uZWN0aW9uIHN0cmluZyBmcm9tIHRoZSBnaXZlbiBr ZXl3b3JkL3ZhbHVlIHBhaXJzLiBJdCBpcworICogdXNlZCB0byBwYXNzIHRoZSBjb25uZWN0aW9u IG9wdGlvbnMgdG8gdGhlIHBnX2R1bXAgc3VicHJvY2Vzcy4KKyAqCisgKiBUaGUgZm9sbG93aW5n IHBhcmFtZXRlcnMgYXJlIGV4Y2x1ZGVkOgorICoJZGJuYW1lCQktIHZhcmllcyBpbiBlYWNoIHBn X2R1bXAgaW52b2NhdGlvbgorICoJcGFzc3dvcmQJLSBpdCdzIG5vdCBzZWN1cmUgdG8gcGFzcyBh IHBhc3N3b3JkIG9uIHRoZSBjb21tYW5kIGxpbmUKKyAqCWZhbGxiYWNrX2FwcGxpY2F0aW9uX25h bWUgLSB3ZSdsbCBsZXQgcGdfZHVtcCBzZXQgaXQKKyAqLworc3RhdGljIGNoYXIgKgorY29uc3Ry dWN0Q29ublN0cihjb25zdCBjaGFyICoqa2V5d29yZHMsIGNvbnN0IGNoYXIgKip2YWx1ZXMpCit7 CisJUFFFeHBCdWZmZXIgYnVmID0gY3JlYXRlUFFFeHBCdWZmZXIoKTsKKwljaGFyCSAgICpjb25u c3RyOworCWludAkJCWk7CisJYm9vbAkJZmlyc3RrZXl3b3JkID0gdHJ1ZTsKKworCS8qIENvbnN0 cnVjdCBhIG5ldyBjb25uZWN0aW9uIHN0cmluZyBpbiBrZXk9J3ZhbHVlJyBmb3JtYXQuICovCisJ Zm9yIChpID0gMDsga2V5d29yZHNbaV0gIT0gTlVMTDsgaSsrKQorCXsKKwkJaWYgKHN0cmNtcChr ZXl3b3Jkc1tpXSwgImRibmFtZSIpID09IDAgfHwKKwkJCXN0cmNtcChrZXl3b3Jkc1tpXSwgInBh c3N3b3JkIikgPT0gMCB8fAorCQkJc3RyY21wKGtleXdvcmRzW2ldLCAiZmFsbGJhY2tfYXBwbGlj YXRpb25fbmFtZSIpID09IDApCisJCQljb250aW51ZTsKKworCQlpZiAoIWZpcnN0a2V5d29yZCkK KwkJCWFwcGVuZFBRRXhwQnVmZmVyQ2hhcihidWYsICcgJyk7CisJCWZpcnN0a2V5d29yZCA9IGZh bHNlOworCQlhcHBlbmRQUUV4cEJ1ZmZlcihidWYsICIlcz0iLCBrZXl3b3Jkc1tpXSk7CisJCWFw cGVuZENvbm5TdHJWYWwoYnVmLCB2YWx1ZXNbaV0pOworCX0KKworCWNvbm5zdHIgPSBwZ19zdHJk dXAoYnVmLT5kYXRhKTsKKwlkZXN0cm95UFFFeHBCdWZmZXIoYnVmKTsKKwlyZXR1cm4gY29ubnN0 cjsKK30KKworLyoKKyAqIGV4ZWN1dGVRdWVyeQorICoKKyAqIFJ1biBhIHF1ZXJ5LCByZXR1cm4g dGhlIHJlc3VsdHMsIGV4aXQgcHJvZ3JhbSBvbiBmYWlsdXJlLgorICovCitQR3Jlc3VsdCAqCitl eGVjdXRlUXVlcnkoUEdjb25uICpjb25uLCBjb25zdCBjaGFyICpxdWVyeSkKK3sKKwlQR3Jlc3Vs dCAgICpyZXM7CisKKwlwZ19sb2dfaW5mbygiZXhlY3V0aW5nICVzIiwgcXVlcnkpOworCisJcmVz ID0gUFFleGVjKGNvbm4sIHF1ZXJ5KTsKKwlpZiAoIXJlcyB8fAorCQlQUXJlc3VsdFN0YXR1cyhy ZXMpICE9IFBHUkVTX1RVUExFU19PSykKKwl7CisJCXBnX2xvZ19lcnJvcigicXVlcnkgZmFpbGVk OiAlcyIsIFBRZXJyb3JNZXNzYWdlKGNvbm4pKTsKKwkJcGdfbG9nX2Vycm9yX2RldGFpbCgiUXVl cnkgd2FzOiAlcyIsIHF1ZXJ5KTsKKwkJUFFmaW5pc2goY29ubik7CisJCWV4aXRfbmljZWx5KDEp OworCX0KKworCXJldHVybiByZXM7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvY29t bW9uX2R1bXBhbGxfcmVzdG9yZS5oIGIvc3JjL2Jpbi9wZ19kdW1wL2NvbW1vbl9kdW1wYWxsX3Jl c3RvcmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYTBkY2RiZTA4 MDcKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmluL3BnX2R1bXAvY29tbW9uX2R1bXBhbGxfcmVz dG9yZS5oCkBAIC0wLDAgKzEsMjYgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIGNvbW1v bl9kdW1wYWxsX3Jlc3RvcmUuaAorICogICAgICBDb21tb24gaGVhZGVyIGZpbGUgZm9yIHBnX2R1 bXBhbGwgYW5kIHBnX3Jlc3RvcmUKKyAqCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYt MjAyNSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqIFBvcnRpb25zIENv cHlyaWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlh CisgKgorICogSURFTlRJRklDQVRJT04KKyAqICAgIHNyYy9iaW4vcGdfZHVtcC9jb21tb25fZHVt cGFsbF9yZXN0b3JlLmgKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2lmbmRlZiBDT01N T05fRFVNUEFMTF9SRVNUT1JFX0gKKyNkZWZpbmUgQ09NTU9OX0RVTVBBTExfUkVTVE9SRV9ICisK KyNpbmNsdWRlICJwZ19iYWNrdXAuaCIKKworLyogVE9ETzogaW5jcmVhc2luZyB0aGlzIHRvIGtl ZXAgMTAwIGRiIHJlc3RvcmluZyBieSBzaW5nbGUgcGdfcmVzdG9yZSBjb21tYW5kLiAqLworI2Rl ZmluZSBNQVhfT05fRVhJVF9OSUNFTFkJCQkJMTAwCitleHRlcm4gUEdjb25uICpjb25uZWN0RGF0 YWJhc2UoY29uc3QgY2hhciAqZGJuYW1lLCBjb25zdCBjaGFyICpjb25uZWN0aW9uX3N0cmluZywg Y29uc3QgY2hhciAqcGdob3N0LAorCQkJCQkJCSAgIGNvbnN0IGNoYXIgKnBncG9ydCwgY29uc3Qg Y2hhciAqcGd1c2VyLAorCQkJCQkJCSAgIHRyaXZhbHVlIHByb21wdF9wYXNzd29yZCwgYm9vbCBm YWlsX29uX2Vycm9yLAorCQkJCQkJCSAgIGNvbnN0IGNoYXIgKnByb2duYW1lLCBjb25zdCBjaGFy ICoqY29ubnN0ciwgaW50ICpzZXJ2ZXJfdmVyc2lvbik7CitleHRlcm4gIFBHcmVzdWx0ICpleGVj dXRlUXVlcnkoUEdjb25uICpjb25uLCBjb25zdCBjaGFyICpxdWVyeSk7CisjZW5kaWYgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIENPTU1PTl9EVU1QQUxMX1JFU1RPUkVfSCAqLwpkaWZmIC0t Z2l0IGEvc3JjL2Jpbi9wZ19kdW1wL21lc29uLmJ1aWxkIGIvc3JjL2Jpbi9wZ19kdW1wL21lc29u LmJ1aWxkCmluZGV4IDYwM2JhNmNmYmYwLi5kZGVjYWM1Y2YwOSAxMDA2NDQKLS0tIGEvc3JjL2Jp bi9wZ19kdW1wL21lc29uLmJ1aWxkCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9tZXNvbi5idWlsZApA QCAtNDksNiArNDksNyBAQCBiaW5fdGFyZ2V0cyArPSBwZ19kdW1wCiAKIHBnX2R1bXBhbGxfc291 cmNlcyA9IGZpbGVzKAogICAncGdfZHVtcGFsbC5jJywKKyAgJ2NvbW1vbl9kdW1wYWxsX3Jlc3Rv cmUuYycsCiApCiAKIGlmIGhvc3Rfc3lzdGVtID09ICd3aW5kb3dzJwpAQCAtNjgsNiArNjksNyBA QCBiaW5fdGFyZ2V0cyArPSBwZ19kdW1wYWxsCiAKIHBnX3Jlc3RvcmVfc291cmNlcyA9IGZpbGVz KAogICAncGdfcmVzdG9yZS5jJywKKyAgJ2NvbW1vbl9kdW1wYWxsX3Jlc3RvcmUuYycsCiApCiAK IGlmIGhvc3Rfc3lzdGVtID09ICd3aW5kb3dzJwpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1w L3BnX2JhY2t1cC5oIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cC5oCmluZGV4IGYwZjE5YmIw YjI5Li42NTAwMGU1YTA4MyAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cC5o CisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXAuaApAQCAtMzA2LDcgKzMwNiw3IEBAIGV4 dGVybiB2b2lkIFNldEFyY2hpdmVPcHRpb25zKEFyY2hpdmUgKkFILCBEdW1wT3B0aW9ucyAqZG9w dCwgUmVzdG9yZU9wdGlvbnMgKnJvCiAKIGV4dGVybiB2b2lkIFByb2Nlc3NBcmNoaXZlUmVzdG9y ZU9wdGlvbnMoQXJjaGl2ZSAqQUhYKTsKIAotZXh0ZXJuIHZvaWQgUmVzdG9yZUFyY2hpdmUoQXJj aGl2ZSAqQUhYKTsKK2V4dGVybiB2b2lkIFJlc3RvcmVBcmNoaXZlKEFyY2hpdmUgKkFIWCwgYm9v bCBhcHBlbmRfZGF0YSk7CiAKIC8qIE9wZW4gYW4gZXhpc3RpbmcgYXJjaGl2ZSAqLwogZXh0ZXJu IEFyY2hpdmUgKk9wZW5BcmNoaXZlKGNvbnN0IGNoYXIgKkZpbGVTcGVjLCBjb25zdCBBcmNoaXZl Rm9ybWF0IGZtdCk7CkBAIC0zMTksNyArMzE5LDcgQEAgZXh0ZXJuIEFyY2hpdmUgKkNyZWF0ZUFy Y2hpdmUoY29uc3QgY2hhciAqRmlsZVNwZWMsIGNvbnN0IEFyY2hpdmVGb3JtYXQgZm10LAogCQkJ CQkJCSAgRGF0YURpclN5bmNNZXRob2Qgc3luY19tZXRob2QpOwogCiAvKiBUaGUgLS1saXN0IG9w dGlvbiAqLwotZXh0ZXJuIHZvaWQgUHJpbnRUT0NTdW1tYXJ5KEFyY2hpdmUgKkFIWCk7CitleHRl cm4gdm9pZCBQcmludFRPQ1N1bW1hcnkoQXJjaGl2ZSAqQUhYLCBib29sIGFwcGVuZF9kYXRhKTsK IAogZXh0ZXJuIFJlc3RvcmVPcHRpb25zICpOZXdSZXN0b3JlT3B0aW9ucyh2b2lkKTsKIApkaWZm IC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5jIGIvc3JjL2Jpbi9w Z19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5jCmluZGV4IGI5ZDdhYjk4YzNlLi5iOGIwNzU2MjA2 OSAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5jCisrKyBi L3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuYwpAQCAtODIsNyArODIsNyBAQCBz dGF0aWMgaW50CVJlc3RvcmluZ1RvREIoQXJjaGl2ZUhhbmRsZSAqQUgpOwogc3RhdGljIHZvaWQg ZHVtcF9sb19idWYoQXJjaGl2ZUhhbmRsZSAqQUgpOwogc3RhdGljIHZvaWQgZHVtcFRpbWVzdGFt cChBcmNoaXZlSGFuZGxlICpBSCwgY29uc3QgY2hhciAqbXNnLCB0aW1lX3QgdGltKTsKIHN0YXRp YyB2b2lkIFNldE91dHB1dChBcmNoaXZlSGFuZGxlICpBSCwgY29uc3QgY2hhciAqZmlsZW5hbWUs Ci0JCQkJCSAgY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVj KTsKKwkJCWNvbnN0IHBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Npb25fc3BlYywg Ym9vbCBhcHBlbmRfZGF0YSk7CiBzdGF0aWMgQ29tcHJlc3NGaWxlSGFuZGxlICpTYXZlT3V0cHV0 KEFyY2hpdmVIYW5kbGUgKkFIKTsKIHN0YXRpYyB2b2lkIFJlc3RvcmVPdXRwdXQoQXJjaGl2ZUhh bmRsZSAqQUgsIENvbXByZXNzRmlsZUhhbmRsZSAqc2F2ZWRPdXRwdXQpOwogCkBAIC0zMzEsOSAr MzMxLDE0IEBAIFByb2Nlc3NBcmNoaXZlUmVzdG9yZU9wdGlvbnMoQXJjaGl2ZSAqQUhYKQogCQlT dHJpY3ROYW1lc0NoZWNrKHJvcHQpOwogfQogCi0vKiBQdWJsaWMgKi8KKy8qCisgKiBSZXN0b3Jl QXJjaGl2ZQorICoKKyAqIElmIGFwcGVuZF9kYXRhIGlzIHNldCwgdGhlbiBhcHBlbmQgZGF0YSBp bnRvIGZpbGUgYXMgd2UgYXJlIHJlc3RvcmluZyBkdW1wCisgKiBvZiBtdWx0aXBsZSBkYXRhYmFz ZXMgd2hpY2ggd2FzIHRha2VuIGJ5IHBnX2R1bXBhbGwuCisgKi8KIHZvaWQKLVJlc3RvcmVBcmNo aXZlKEFyY2hpdmUgKkFIWCkKK1Jlc3RvcmVBcmNoaXZlKEFyY2hpdmUgKkFIWCwgYm9vbCBhcHBl bmRfZGF0YSkKIHsKIAlBcmNoaXZlSGFuZGxlICpBSCA9IChBcmNoaXZlSGFuZGxlICopIEFIWDsK IAlSZXN0b3JlT3B0aW9ucyAqcm9wdCA9IEFILT5wdWJsaWMucm9wdDsKQEAgLTQ1MCw3ICs0NTUs NyBAQCBSZXN0b3JlQXJjaGl2ZShBcmNoaXZlICpBSFgpCiAJICovCiAJc2F2ID0gU2F2ZU91dHB1 dChBSCk7CiAJaWYgKHJvcHQtPmZpbGVuYW1lIHx8IHJvcHQtPmNvbXByZXNzaW9uX3NwZWMuYWxn b3JpdGhtICE9IFBHX0NPTVBSRVNTSU9OX05PTkUpCi0JCVNldE91dHB1dChBSCwgcm9wdC0+Zmls ZW5hbWUsIHJvcHQtPmNvbXByZXNzaW9uX3NwZWMpOworCQlTZXRPdXRwdXQoQUgsIHJvcHQtPmZp bGVuYW1lLCByb3B0LT5jb21wcmVzc2lvbl9zcGVjLCBhcHBlbmRfZGF0YSk7CiAKIAlhaHByaW50 ZihBSCwgIi0tXG4tLSBQb3N0Z3JlU1FMIGRhdGFiYXNlIGR1bXBcbi0tXG5cbiIpOwogCkBAIC0x MjYzLDcgKzEyNjgsNyBAQCBBcmNoaXZlRW50cnkoQXJjaGl2ZSAqQUhYLCBDYXRhbG9nSWQgY2F0 YWxvZ0lkLCBEdW1wSWQgZHVtcElkLAogCiAvKiBQdWJsaWMgKi8KIHZvaWQKLVByaW50VE9DU3Vt bWFyeShBcmNoaXZlICpBSFgpCitQcmludFRPQ1N1bW1hcnkoQXJjaGl2ZSAqQUhYLCBib29sIGFw cGVuZF9kYXRhKQogewogCUFyY2hpdmVIYW5kbGUgKkFIID0gKEFyY2hpdmVIYW5kbGUgKikgQUhY OwogCVJlc3RvcmVPcHRpb25zICpyb3B0ID0gQUgtPnB1YmxpYy5yb3B0OwpAQCAtMTI3OSw3ICsx Mjg0LDcgQEAgUHJpbnRUT0NTdW1tYXJ5KEFyY2hpdmUgKkFIWCkKIAogCXNhdiA9IFNhdmVPdXRw dXQoQUgpOwogCWlmIChyb3B0LT5maWxlbmFtZSkKLQkJU2V0T3V0cHV0KEFILCByb3B0LT5maWxl bmFtZSwgb3V0X2NvbXByZXNzaW9uX3NwZWMpOworCQlTZXRPdXRwdXQoQUgsIHJvcHQtPmZpbGVu YW1lLCBvdXRfY29tcHJlc3Npb25fc3BlYywgYXBwZW5kX2RhdGEpOwogCiAJaWYgKHN0cmZ0aW1l KHN0YW1wX3N0ciwgc2l6ZW9mKHN0YW1wX3N0ciksIFBHRFVNUF9TVFJGVElNRV9GTVQsCiAJCQkJ IGxvY2FsdGltZSgmQUgtPmNyZWF0ZURhdGUpKSA9PSAwKQpAQCAtMTY1OCw3ICsxNjYzLDggQEAg YXJjaHByaW50ZihBcmNoaXZlICpBSCwgY29uc3QgY2hhciAqZm10LC4uLikKIAogc3RhdGljIHZv aWQKIFNldE91dHB1dChBcmNoaXZlSGFuZGxlICpBSCwgY29uc3QgY2hhciAqZmlsZW5hbWUsCi0J CSAgY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjKQorCQkg IGNvbnN0IHBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Npb25fc3BlYywKKwkJICBi b29sIGFwcGVuZF9kYXRhKQogewogCUNvbXByZXNzRmlsZUhhbmRsZSAqQ0ZIOwogCWNvbnN0IGNo YXIgKm1vZGU7CkBAIC0xNjc4LDcgKzE2ODQsNyBAQCBTZXRPdXRwdXQoQXJjaGl2ZUhhbmRsZSAq QUgsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLAogCWVsc2UKIAkJZm4gPSBmaWxlbm8oc3Rkb3V0KTsK IAotCWlmIChBSC0+bW9kZSA9PSBhcmNoTW9kZUFwcGVuZCkKKwlpZiAoYXBwZW5kX2RhdGEgfHwg QUgtPm1vZGUgPT0gYXJjaE1vZGVBcHBlbmQpCiAJCW1vZGUgPSBQR19CSU5BUllfQTsKIAllbHNl CiAJCW1vZGUgPSBQR19CSU5BUllfVzsKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9wZ19i YWNrdXBfdGFyLmMgYi9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX3Rhci5jCmluZGV4IGI1YmEz YjQ2ZGQ5Li5kOTRkMGRlMmE1ZCAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1 cF90YXIuYworKysgYi9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX3Rhci5jCkBAIC04MjYsNyAr ODI2LDcgQEAgX0Nsb3NlQXJjaGl2ZShBcmNoaXZlSGFuZGxlICpBSCkKIAkJc2F2VmVyYm9zZSA9 IEFILT5wdWJsaWMudmVyYm9zZTsKIAkJQUgtPnB1YmxpYy52ZXJib3NlID0gMDsKIAotCQlSZXN0 b3JlQXJjaGl2ZSgoQXJjaGl2ZSAqKSBBSCk7CisJCVJlc3RvcmVBcmNoaXZlKChBcmNoaXZlICop IEFILCBmYWxzZSk7CiAKIAkJU2V0QXJjaGl2ZU9wdGlvbnMoKEFyY2hpdmUgKikgQUgsIHNhdkRv cHQsIHNhdlJvcHQpOwogCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX3V0 aWxzLmMgYi9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX3V0aWxzLmMKaW5kZXggNzlhZWM1ZjUx NTguLjQ3NTg5Y2NhOTBmIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX3V0 aWxzLmMKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF91dGlscy5jCkBAIC0xMyw2ICsx Myw3IEBACiAgKi8KICNpbmNsdWRlICJwb3N0Z3Jlc19mZS5oIgogCisjaW5jbHVkZSAiY29tbW9u X2R1bXBhbGxfcmVzdG9yZS5oIgogI2lmZGVmIFdJTjMyCiAjaW5jbHVkZSAicGFyYWxsZWwuaCIK ICNlbmRpZgpAQCAtMjEsOCArMjIsNiBAQAogLyogR2xvYmFscyBleHBvcnRlZCBieSB0aGlzIGZp bGUgKi8KIGNvbnN0IGNoYXIgKnByb2duYW1lID0gTlVMTDsKIAotI2RlZmluZSBNQVhfT05fRVhJ VF9OSUNFTFkJCQkJMjAKLQogc3RhdGljIHN0cnVjdAogewogCW9uX2V4aXRfbmljZWx5X2NhbGxi YWNrIGZ1bmN0aW9uOwpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYyBiL3Ny Yy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMKaW5kZXggMzBkZmRhOGMzZmYuLjJiMjhjYjM5OTA1IDEw MDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jCisrKyBiL3NyYy9iaW4vcGdfZHVt cC9wZ19kdW1wLmMKQEAgLTExNDgsNyArMTE0OCw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiph cmd2KQogCSAqIHJpZ2h0IG5vdy4KIAkgKi8KIAlpZiAocGxhaW5UZXh0KQotCQlSZXN0b3JlQXJj aGl2ZShmb3V0KTsKKwkJUmVzdG9yZUFyY2hpdmUoZm91dCwgZmFsc2UpOwogCiAJQ2xvc2VBcmNo aXZlKGZvdXQpOwogCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcGFsbC5jIGIv c3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXBhbGwuYwppbmRleCA2NGE2MGEyNjA5Mi4uYjc1ZTRmNTZm MzEgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wYWxsLmMKKysrIGIvc3JjL2Jp bi9wZ19kdW1wL3BnX2R1bXBhbGwuYwpAQCAtMTUsNiArMTUsNyBAQAogCiAjaW5jbHVkZSAicG9z dGdyZXNfZmUuaCIKIAorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CiAjaW5jbHVkZSA8dGltZS5oPgog I2luY2x1ZGUgPHVuaXN0ZC5oPgogCkBAIC0yNCwxNCArMjUsMTcgQEAKICNpbmNsdWRlICJjb21t b24vaGFzaGZuX3Vuc3RhYmxlLmgiCiAjaW5jbHVkZSAiY29tbW9uL2xvZ2dpbmcuaCIKICNpbmNs dWRlICJjb21tb24vc3RyaW5nLmgiCisjaW5jbHVkZSAiY29tbW9uX2R1bXBhbGxfcmVzdG9yZS5o IgogI2luY2x1ZGUgImR1bXB1dGlscy5oIgogI2luY2x1ZGUgImZlX3V0aWxzL3N0cmluZ191dGls cy5oIgogI2luY2x1ZGUgImZpbHRlci5oIgogI2luY2x1ZGUgImdldG9wdF9sb25nLmgiCiAjaW5j bHVkZSAicGdfYmFja3VwLmgiCisjaW5jbHVkZSAicGdfYmFja3VwX2FyY2hpdmVyLmgiCiAKIC8q IHZlcnNpb24gc3RyaW5nIHdlIGV4cGVjdCBiYWNrIGZyb20gcGdfZHVtcCAqLwogI2RlZmluZSBQ R0RVTVBfVkVSU0lPTlNUUiAicGdfZHVtcCAoUG9zdGdyZVNRTCkgIiBQR19WRVJTSU9OICJcbiIK KyNkZWZpbmUgZXhpdF9uaWNlbHkoY29kZSkgZXhpdChjb2RlKQogCiB0eXBlZGVmIHN0cnVjdAog ewpAQCAtNjQsMjggKzY4LDI1IEBAIHN0YXRpYyB2b2lkIGRyb3BUYWJsZXNwYWNlcyhQR2Nvbm4g KmNvbm4pOwogc3RhdGljIHZvaWQgZHVtcFRhYmxlc3BhY2VzKFBHY29ubiAqY29ubik7CiBzdGF0 aWMgdm9pZCBkcm9wREJzKFBHY29ubiAqY29ubik7CiBzdGF0aWMgdm9pZCBkdW1wVXNlckNvbmZp ZyhQR2Nvbm4gKmNvbm4sIGNvbnN0IGNoYXIgKnVzZXJuYW1lKTsKLXN0YXRpYyB2b2lkIGR1bXBE YXRhYmFzZXMoUEdjb25uICpjb25uKTsKK3N0YXRpYyB2b2lkIGR1bXBEYXRhYmFzZXMoUEdjb25u ICpjb25uLCBBcmNoaXZlRm9ybWF0IGFyY2hEdW1wRm9ybWF0KTsKIHN0YXRpYyB2b2lkIGR1bXBU aW1lc3RhbXAoY29uc3QgY2hhciAqbXNnKTsKLXN0YXRpYyBpbnQJcnVuUGdEdW1wKGNvbnN0IGNo YXIgKmRibmFtZSwgY29uc3QgY2hhciAqY3JlYXRlX29wdHMpOworc3RhdGljIGludCBydW5QZ0R1 bXAoY29uc3QgY2hhciAqZGJuYW1lLCBjb25zdCBjaGFyICpjcmVhdGVfb3B0cywKKwkJCQkJIGNo YXIgKmRiZmlsZSwgQXJjaGl2ZUZvcm1hdCBhcmNoRHVtcEZvcm1hdCk7CiBzdGF0aWMgdm9pZCBi dWlsZFNoU2VjTGFiZWxzKFBHY29ubiAqY29ubiwKIAkJCQkJCQkgY29uc3QgY2hhciAqY2F0YWxv Z19uYW1lLCBPaWQgb2JqZWN0SWQsCiAJCQkJCQkJIGNvbnN0IGNoYXIgKm9ianR5cGUsIGNvbnN0 IGNoYXIgKm9iam5hbWUsCiAJCQkJCQkJIFBRRXhwQnVmZmVyIGJ1ZmZlcik7Ci1zdGF0aWMgUEdj b25uICpjb25uZWN0RGF0YWJhc2UoY29uc3QgY2hhciAqZGJuYW1lLAotCQkJCQkJCSAgIGNvbnN0 IGNoYXIgKmNvbm5lY3Rpb25fc3RyaW5nLCBjb25zdCBjaGFyICpwZ2hvc3QsCi0JCQkJCQkJICAg Y29uc3QgY2hhciAqcGdwb3J0LCBjb25zdCBjaGFyICpwZ3VzZXIsCi0JCQkJCQkJICAgdHJpdmFs dWUgcHJvbXB0X3Bhc3N3b3JkLCBib29sIGZhaWxfb25fZXJyb3IpOwotc3RhdGljIGNoYXIgKmNv bnN0cnVjdENvbm5TdHIoY29uc3QgY2hhciAqKmtleXdvcmRzLCBjb25zdCBjaGFyICoqdmFsdWVz KTsKLXN0YXRpYyBQR3Jlc3VsdCAqZXhlY3V0ZVF1ZXJ5KFBHY29ubiAqY29ubiwgY29uc3QgY2hh ciAqcXVlcnkpOwogc3RhdGljIHZvaWQgZXhlY3V0ZUNvbW1hbmQoUEdjb25uICpjb25uLCBjb25z dCBjaGFyICpxdWVyeSk7CiBzdGF0aWMgdm9pZCBleHBhbmRfZGJuYW1lX3BhdHRlcm5zKFBHY29u biAqY29ubiwgU2ltcGxlU3RyaW5nTGlzdCAqcGF0dGVybnMsCiAJCQkJCQkJCSAgIFNpbXBsZVN0 cmluZ0xpc3QgKm5hbWVzKTsKIHN0YXRpYyB2b2lkIHJlYWRfZHVtcGFsbF9maWx0ZXJzKGNvbnN0 IGNoYXIgKmZpbGVuYW1lLCBTaW1wbGVTdHJpbmdMaXN0ICpwYXR0ZXJuKTsKK3N0YXRpYyB2b2lk IGNyZWF0ZV9vcl9vcGVuX2Rpcihjb25zdCBjaGFyICpkaXJuYW1lKTsKK3N0YXRpYyBBcmNoaXZl Rm9ybWF0IHBhcnNlRHVtcEZvcm1hdChjb25zdCBjaGFyICpmb3JtYXQpOwogCiBzdGF0aWMgY2hh ciBwZ19kdW1wX2JpbltNQVhQR1BBVEhdOwogc3RhdGljIGNvbnN0IGNoYXIgKnByb2duYW1lOwog c3RhdGljIFBRRXhwQnVmZmVyIHBnZHVtcG9wdHM7Ci1zdGF0aWMgY2hhciAqY29ubnN0ciA9ICIi Oworc3RhdGljIGNvbnN0IGNoYXIgKmNvbm5zdHIgPSAiIjsKIHN0YXRpYyBib29sIG91dHB1dF9j bGVhbiA9IGZhbHNlOwogc3RhdGljIGJvb2wgc2tpcF9hY2xzID0gZmFsc2U7CiBzdGF0aWMgYm9v bCB2ZXJib3NlID0gZmFsc2U7CkBAIC0xMDcsNyArMTA4LDcgQEAgc3RhdGljIGludAlub19zdWJz Y3JpcHRpb25zID0gMDsKIHN0YXRpYyBpbnQJbm9fdG9hc3RfY29tcHJlc3Npb24gPSAwOwogc3Rh dGljIGludAlub191bmxvZ2dlZF90YWJsZV9kYXRhID0gMDsKIHN0YXRpYyBpbnQJbm9fcm9sZV9w YXNzd29yZHMgPSAwOwotc3RhdGljIGludAlzZXJ2ZXJfdmVyc2lvbjsKK3N0YXRpYyBpbnQgc2Vy dmVyX3ZlcnNpb247CiBzdGF0aWMgaW50CWxvYWRfdmlhX3BhcnRpdGlvbl9yb290ID0gMDsKIHN0 YXRpYyBpbnQJb25fY29uZmxpY3RfZG9fbm90aGluZyA9IDA7CiAKQEAgLTEyMSw4ICsxMjIsNiBA QCBzdGF0aWMgY2hhciAqZmlsZW5hbWUgPSBOVUxMOwogc3RhdGljIFNpbXBsZVN0cmluZ0xpc3Qg ZGF0YWJhc2VfZXhjbHVkZV9wYXR0ZXJucyA9IHtOVUxMLCBOVUxMfTsKIHN0YXRpYyBTaW1wbGVT dHJpbmdMaXN0IGRhdGFiYXNlX2V4Y2x1ZGVfbmFtZXMgPSB7TlVMTCwgTlVMTH07CiAKLSNkZWZp bmUgZXhpdF9uaWNlbHkoY29kZSkgZXhpdChjb2RlKQotCiBpbnQKIG1haW4oaW50IGFyZ2MsIGNo YXIgKmFyZ3ZbXSkKIHsKQEAgLTE0Nyw2ICsxNDYsNyBAQCBtYWluKGludCBhcmdjLCBjaGFyICph cmd2W10pCiAJCXsicGFzc3dvcmQiLCBub19hcmd1bWVudCwgTlVMTCwgJ1cnfSwKIAkJeyJuby1w cml2aWxlZ2VzIiwgbm9fYXJndW1lbnQsIE5VTEwsICd4J30sCiAJCXsibm8tYWNsIiwgbm9fYXJn dW1lbnQsIE5VTEwsICd4J30sCisJCXsiZm9ybWF0IiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEws ICdGJ30sCiAKIAkJLyoKIAkJICogdGhlIGZvbGxvd2luZyBvcHRpb25zIGRvbid0IGhhdmUgYW4g ZXF1aXZhbGVudCBzaG9ydCBvcHRpb24gbGV0dGVyCkBAIC0xODgsNiArMTg4LDggQEAgbWFpbihp bnQgYXJnYywgY2hhciAqYXJndltdKQogCWNoYXIJICAgKnBnZGIgPSBOVUxMOwogCWNoYXIJICAg KnVzZV9yb2xlID0gTlVMTDsKIAljb25zdCBjaGFyICpkdW1wZW5jb2RpbmcgPSBOVUxMOworCUFy Y2hpdmVGb3JtYXQgYXJjaER1bXBGb3JtYXQgPSBhcmNoTnVsbDsKKwljb25zdCBjaGFyICpmb3Jt YXROYW1lID0gInAiOwogCXRyaXZhbHVlCXByb21wdF9wYXNzd29yZCA9IFRSSV9ERUZBVUxUOwog CWJvb2wJCWRhdGFfb25seSA9IGZhbHNlOwogCWJvb2wJCWdsb2JhbHNfb25seSA9IGZhbHNlOwpA QCAtMjM3LDcgKzIzOSw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAogCXBnZHVt cG9wdHMgPSBjcmVhdGVQUUV4cEJ1ZmZlcigpOwogCi0Jd2hpbGUgKChjID0gZ2V0b3B0X2xvbmco YXJnYywgYXJndiwgImFjZDpFOmY6Z2g6bDpPcDpyc1M6dFU6dndXeCIsIGxvbmdfb3B0aW9ucywg Jm9wdGluZGV4KSkgIT0gLTEpCisJd2hpbGUgKChjID0gZ2V0b3B0X2xvbmcoYXJnYywgYXJndiwg ImFjZDpFOmY6RjpnaDpsOk9wOnJzUzp0VTp2d1d4IiwgbG9uZ19vcHRpb25zLCAmb3B0aW5kZXgp KSAhPSAtMSkKIAl7CiAJCXN3aXRjaCAoYykKIAkJewpAQCAtMjY1LDcgKzI2Nyw5IEBAIG1haW4o aW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAkJCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihwZ2R1bXBv cHRzLCAiIC1mICIpOwogCQkJCWFwcGVuZFNoZWxsU3RyaW5nKHBnZHVtcG9wdHMsIGZpbGVuYW1l KTsKIAkJCQlicmVhazsKLQorCQkJY2FzZSAnRic6CisJCQkJZm9ybWF0TmFtZSA9IHBnX3N0cmR1 cChvcHRhcmcpOworCQkJCWJyZWFrOwogCQkJY2FzZSAnZyc6CiAJCQkJZ2xvYmFsc19vbmx5ID0g dHJ1ZTsKIAkJCQlicmVhazsKQEAgLTQxNCw2ICs0MTgsMjEgQEAgbWFpbihpbnQgYXJnYywgY2hh ciAqYXJndltdKQogCQlleGl0X25pY2VseSgxKTsKIAl9CiAKKwkvKiBHZXQgZm9ybWF0IGZvciBk dW1wLiAqLworCWFyY2hEdW1wRm9ybWF0ID0gcGFyc2VEdW1wRm9ybWF0KGZvcm1hdE5hbWUpOwor CisJLyoKKwkgKiBJZiBub24tcGxhaW4gZm9ybWF0IGlzIHNwZWNpZmllZCB0aGVuIHdlIG11c3Qg cHJvdmlkZSB0aGUKKwkgKiBmaWxlIG5hbWUgdG8gY3JlYXRlIG9uZSBtYWluIGRpcmVjdG9yeS4K KwkgKi8KKwlpZiAoYXJjaER1bXBGb3JtYXQgIT0gYXJjaE51bGwgJiYKKwkJCSghZmlsZW5hbWUg fHwgc3RyY21wKGZpbGVuYW1lLCAiIikgPT0gMCkpCisJeworCQlwZ19sb2dfZXJyb3IoIm9wdGlv bnMgLUYvLS1mb3JtYXQ9ZHxjfHQgcmVxdWlyZXMgb3B0aW9uIC1mLy0tZmlsZSB3aXRoIG5vbi1l bXB0eSBzdHJpbmciKTsKKwkJcGdfbG9nX2Vycm9yX2hpbnQoIlRyeSBcIiVzIC0taGVscFwiIGZv ciBtb3JlIGluZm9ybWF0aW9uLiIsIHByb2duYW1lKTsKKwkJZXhpdF9uaWNlbHkoMSk7CisJfQor CiAJLyoKIAkgKiBJZiBwYXNzd29yZCB2YWx1ZXMgYXJlIG5vdCByZXF1aXJlZCBpbiB0aGUgZHVt cCwgc3dpdGNoIHRvIHVzaW5nCiAJICogcGdfcm9sZXMgd2hpY2ggaXMgZXF1YWxseSB1c2VmdWws IGp1c3QgbW9yZSBsaWtlbHkgdG8gaGF2ZSB1bnJlc3RyaWN0ZWQKQEAgLTQ2MCw2ICs0NzksMzMg QEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCWlmIChvbl9jb25mbGljdF9kb19ub3Ro aW5nKQogCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihwZ2R1bXBvcHRzLCAiIC0tb24tY29uZmxpY3Qt ZG8tbm90aGluZyIpOwogCisJLyoKKwkgKiBPcGVuIHRoZSBvdXRwdXQgZmlsZSBpZiByZXF1aXJl ZCwgb3RoZXJ3aXNlIHVzZSBzdGRvdXQuICBJZiByZXF1aXJlZCwKKwkgKiB0aGVuIGNyZWF0ZSBu ZXcgZGlyZWN0b3J5IGFuZCBnbG9iYWwuZGF0IGZpbGUuCisJICovCisJaWYgKGFyY2hEdW1wRm9y bWF0ICE9IGFyY2hOdWxsKQorCXsKKwkJY2hhcgl0b2NfcGF0aFtNQVhQR1BBVEhdOworCisJCS8q IENyZWF0ZSBuZXcgZGlyZWN0b3J5IG9yIGFjY2VwdCB0aGUgZW1wdHkgZXhpc3RpbmcgZGlyZWN0 b3J5LiAqLworCQljcmVhdGVfb3Jfb3Blbl9kaXIoZmlsZW5hbWUpOworCisJCXNucHJpbnRmKHRv Y19wYXRoLCBNQVhQR1BBVEgsICIlcy9nbG9iYWwuZGF0IiwgZmlsZW5hbWUpOworCisJCU9QRiA9 IGZvcGVuKHRvY19wYXRoLCBQR19CSU5BUllfVyk7CisJCWlmICghT1BGKQorCQkJcGdfZmF0YWwo ImNvdWxkIG5vdCBvcGVuIGdsb2JhbC5kYXQgZmlsZTogJXMiLCBzdHJlcnJvcihlcnJubykpOwor CX0KKwllbHNlIGlmIChmaWxlbmFtZSkKKwl7CisJCU9QRiA9IGZvcGVuKGZpbGVuYW1lLCBQR19C SU5BUllfVyk7CisJCWlmICghT1BGKQorCQkJcGdfZmF0YWwoImNvdWxkIG5vdCBvcGVuIG91dHB1 dCBmaWxlIFwiJXNcIjogJW0iLAorCQkJCQkgZmlsZW5hbWUpOworCX0KKwllbHNlCisJCU9QRiA9 IHN0ZG91dDsKKwogCS8qCiAJICogSWYgdGhlcmUgd2FzIGEgZGF0YWJhc2Ugc3BlY2lmaWVkIG9u IHRoZSBjb21tYW5kIGxpbmUsIHVzZSB0aGF0LAogCSAqIG90aGVyd2lzZSB0cnkgdG8gY29ubmVj dCB0byBkYXRhYmFzZSAicG9zdGdyZXMiLCBhbmQgZmFpbGluZyB0aGF0CkBAIC00NjgsNyArNTE0 LDggQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCWlmIChwZ2RiKQogCXsKIAkJY29u biA9IGNvbm5lY3REYXRhYmFzZShwZ2RiLCBjb25uc3RyLCBwZ2hvc3QsIHBncG9ydCwgcGd1c2Vy LAotCQkJCQkJCSAgIHByb21wdF9wYXNzd29yZCwgZmFsc2UpOworCQkJCQkJCSAgIHByb21wdF9w YXNzd29yZCwgZmFsc2UsCisJCQkJCQkJICAgcHJvZ25hbWUsICZjb25uc3RyLCAmc2VydmVyX3Zl cnNpb24pOwogCiAJCWlmICghY29ubikKIAkJCXBnX2ZhdGFsKCJjb3VsZCBub3QgY29ubmVjdCB0 byBkYXRhYmFzZSBcIiVzXCIiLCBwZ2RiKTsKQEAgLTQ3NiwxMCArNTIzLDEyIEBAIG1haW4oaW50 IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAllbHNlCiAJewogCQljb25uID0gY29ubmVjdERhdGFiYXNl KCJwb3N0Z3JlcyIsIGNvbm5zdHIsIHBnaG9zdCwgcGdwb3J0LCBwZ3VzZXIsCi0JCQkJCQkJICAg cHJvbXB0X3Bhc3N3b3JkLCBmYWxzZSk7CisJCQkJCQkJICAgcHJvbXB0X3Bhc3N3b3JkLCBmYWxz ZSwKKwkJCQkJCQkgICBwcm9nbmFtZSwgJmNvbm5zdHIsICZzZXJ2ZXJfdmVyc2lvbik7CiAJCWlm ICghY29ubikKIAkJCWNvbm4gPSBjb25uZWN0RGF0YWJhc2UoInRlbXBsYXRlMSIsIGNvbm5zdHIs IHBnaG9zdCwgcGdwb3J0LCBwZ3VzZXIsCi0JCQkJCQkJCSAgIHByb21wdF9wYXNzd29yZCwgdHJ1 ZSk7CisJCQkJCQkJCSAgIHByb21wdF9wYXNzd29yZCwgdHJ1ZSwKKwkJCQkJCQkJICAgcHJvZ25h bWUsICZjb25uc3RyLCAmc2VydmVyX3ZlcnNpb24pOwogCiAJCWlmICghY29ubikKIAkJewpAQCAt NDk2LDE5ICs1NDUsNiBAQCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJZXhwYW5kX2Ri bmFtZV9wYXR0ZXJucyhjb25uLCAmZGF0YWJhc2VfZXhjbHVkZV9wYXR0ZXJucywKIAkJCQkJCSAg ICZkYXRhYmFzZV9leGNsdWRlX25hbWVzKTsKIAotCS8qCi0JICogT3BlbiB0aGUgb3V0cHV0IGZp bGUgaWYgcmVxdWlyZWQsIG90aGVyd2lzZSB1c2Ugc3Rkb3V0Ci0JICovCi0JaWYgKGZpbGVuYW1l KQotCXsKLQkJT1BGID0gZm9wZW4oZmlsZW5hbWUsIFBHX0JJTkFSWV9XKTsKLQkJaWYgKCFPUEYp Ci0JCQlwZ19mYXRhbCgiY291bGQgbm90IG9wZW4gb3V0cHV0IGZpbGUgXCIlc1wiOiAlbSIsCi0J CQkJCSBmaWxlbmFtZSk7Ci0JfQotCWVsc2UKLQkJT1BGID0gc3Rkb3V0OwotCiAJLyoKIAkgKiBT ZXQgdGhlIGNsaWVudCBlbmNvZGluZyBpZiByZXF1ZXN0ZWQuCiAJICovCkBAIC02MDgsNyArNjQ0 LDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCX0KIAogCWlmICghZ2xvYmFsc19v bmx5ICYmICFyb2xlc19vbmx5ICYmICF0YWJsZXNwYWNlc19vbmx5KQotCQlkdW1wRGF0YWJhc2Vz KGNvbm4pOworCQlkdW1wRGF0YWJhc2VzKGNvbm4sIGFyY2hEdW1wRm9ybWF0KTsKIAogCVBRZmlu aXNoKGNvbm4pOwogCkBAIC02MjEsNyArNjU3LDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJn dltdKQogCQlmY2xvc2UoT1BGKTsKIAogCQkvKiBzeW5jIHRoZSByZXN1bHRpbmcgZmlsZSwgZXJy b3JzIGFyZSBub3QgZmF0YWwgKi8KLQkJaWYgKGRvc3luYykKKwkJaWYgKGRvc3luYyAmJiAoYXJj aER1bXBGb3JtYXQgPT0gYXJjaE51bGwpKQogCQkJKHZvaWQpIGZzeW5jX2ZuYW1lKGZpbGVuYW1l LCBmYWxzZSk7CiAJfQogCkBAIC02MzIsMTIgKzY2OCwxNCBAQCBtYWluKGludCBhcmdjLCBjaGFy ICphcmd2W10pCiBzdGF0aWMgdm9pZAogaGVscCh2b2lkKQogewotCXByaW50ZihfKCIlcyBleHRy YWN0cyBhIFBvc3RncmVTUUwgZGF0YWJhc2UgY2x1c3RlciBpbnRvIGFuIFNRTCBzY3JpcHQgZmls ZS5cblxuIiksIHByb2duYW1lKTsKKwlwcmludGYoXygiJXMgZXh0cmFjdHMgYSBQb3N0Z3JlU1FM IGRhdGFiYXNlIGNsdXN0ZXIgYmFzZWQgb24gc3BlY2lmaWVkIGR1bXAgZm9ybWF0LlxuXG4iKSwg cHJvZ25hbWUpOwogCXByaW50ZihfKCJVc2FnZTpcbiIpKTsKIAlwcmludGYoXygiICAlcyBbT1BU SU9OXS4uLlxuIiksIHByb2duYW1lKTsKIAogCXByaW50ZihfKCJcbkdlbmVyYWwgb3B0aW9uczpc biIpKTsKIAlwcmludGYoXygiICAtZiwgLS1maWxlPUZJTEVOQU1FICAgICAgICAgIG91dHB1dCBm aWxlIG5hbWVcbiIpKTsKKwlwcmludGYoXygiICAtRiwgLS1mb3JtYXQ9Y3xkfHR8cCAgICAgICAg IG91dHB1dCBmaWxlIGZvcm1hdCAoY3VzdG9tLCBkaXJlY3RvcnksIHRhcixcbiIKKwkJCSAiICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWluIHRleHQgKGRlZmF1bHQpKVxuIikpOwog CXByaW50ZihfKCIgIC12LCAtLXZlcmJvc2UgICAgICAgICAgICAgICAgdmVyYm9zZSBtb2RlXG4i KSk7CiAJcHJpbnRmKF8oIiAgLVYsIC0tdmVyc2lvbiAgICAgICAgICAgICAgICBvdXRwdXQgdmVy c2lvbiBpbmZvcm1hdGlvbiwgdGhlbiBleGl0XG4iKSk7CiAJcHJpbnRmKF8oIiAgLS1sb2NrLXdh aXQtdGltZW91dD1USU1FT1VUICBmYWlsIGFmdGVyIHdhaXRpbmcgVElNRU9VVCBmb3IgYSB0YWJs ZSBsb2NrXG4iKSk7CkBAIC0xNDg4LDEwICsxNTI2LDEzIEBAIGV4cGFuZF9kYm5hbWVfcGF0dGVy bnMoUEdjb25uICpjb25uLAogICogRHVtcCBjb250ZW50cyBvZiBkYXRhYmFzZXMuCiAgKi8KIHN0 YXRpYyB2b2lkCi1kdW1wRGF0YWJhc2VzKFBHY29ubiAqY29ubikKK2R1bXBEYXRhYmFzZXMoUEdj b25uICpjb25uLCBBcmNoaXZlRm9ybWF0IGFyY2hEdW1wRm9ybWF0KQogewogCVBHcmVzdWx0ICAg KnJlczsKIAlpbnQJCQlpOworCWNoYXIJCWRiX3N1YmRpcltNQVhQR1BBVEhdOworCWNoYXIJCWRi ZmlsZXBhdGhbTUFYUEdQQVRIXTsKKwlGSUxFICAgICAgICptYXBfZmlsZSA9IE5VTEw7CiAKIAkv KgogCSAqIFNraXAgZGF0YWJhc2VzIG1hcmtlZCBub3QgZGF0YWxsb3djb25uLCBzaW5jZSB3ZSdk IGJlIHVuYWJsZSB0byBjb25uZWN0CkBAIC0xNTA1LDcgKzE1NDYsNyBAQCBkdW1wRGF0YWJhc2Vz KFBHY29ubiAqY29ubikKIAkgKiBkb2Vzbid0IGhhdmUgc29tZSBmYWlsdXJlIG1vZGUgd2l0aCAt LWNsZWFuLgogCSAqLwogCXJlcyA9IGV4ZWN1dGVRdWVyeShjb25uLAotCQkJCQkgICAiU0VMRUNU IGRhdG5hbWUgIgorCQkJCQkgICAiU0VMRUNUIGRhdG5hbWUsIG9pZCAiCiAJCQkJCSAgICJGUk9N IHBnX2RhdGFiYXNlIGQgIgogCQkJCQkgICAiV0hFUkUgZGF0YWxsb3djb25uIEFORCBkYXRjb25u bGltaXQgIT0gLTIgIgogCQkJCQkgICAiT1JERVIgQlkgKGRhdG5hbWUgPD4gJ3RlbXBsYXRlMScp LCBkYXRuYW1lIik7CkBAIC0xNTEzLDkgKzE1NTQsMzMgQEAgZHVtcERhdGFiYXNlcyhQR2Nvbm4g KmNvbm4pCiAJaWYgKFBRbnR1cGxlcyhyZXMpID4gMCkKIAkJZnByaW50ZihPUEYsICItLVxuLS0g RGF0YWJhc2VzXG4tLVxuXG4iKTsKIAorCS8qCisJICogSWYgZGlyZWN0b3J5L3Rhci9jdXN0b20g Zm9ybWF0IGlzIHNwZWNpZmllZCB0aGVuIGNyZWF0ZSBhIHN1YmRpcmVjdG9yeQorCSAqIHVuZGVy IHRoZSBtYWluIGRpcmVjdG9yeSBhbmQgZWFjaCBkYXRhYmFzZSBkdW1wIGZpbGUgc3ViZGlyZWN0 b3J5IHdpbGwKKwkgKiBiZSBjcmVhdGVkIHVuZGVyIHRoZSBzdWJkaXJlY3RvcnkgaW4gYXJjaGl2 ZSBtb2RlIGFzIHBlciBzaW5nbGUgZGIgcGdfZHVtcC4KKwkgKi8KKwlpZiAoYXJjaER1bXBGb3Jt YXQgIT0gYXJjaE51bGwpCisJeworCQljaGFyCW1hcF9maWxlX3BhdGhbTUFYUEdQQVRIXTsKKwor CQlzbnByaW50ZihkYl9zdWJkaXIsIE1BWFBHUEFUSCwgIiVzL2RhdGFiYXNlcyIsIGZpbGVuYW1l KTsKKworCQkvKiBDcmVhdGUgYSBzdWJkaXJlY3Rvcnkgd2l0aCAnZGF0YWJhc2VzJyBuYW1lIHVu ZGVyIG1haW4gZGlyZWN0b3J5LiAqLworCQlpZiAobWtkaXIoZGJfc3ViZGlyLCAwNzU1KSAhPSAw KQorCQkJcGdfZmF0YWwoImNvdWxkIG5vdCBjcmVhdGUgc3ViZGlyZWN0b3J5IFwiJXNcIjogJW0i LCBkYl9zdWJkaXIpOworCisJCXNucHJpbnRmKG1hcF9maWxlX3BhdGgsIE1BWFBHUEFUSCwgIiVz L21hcC5kYXQiLCBmaWxlbmFtZSk7CisKKwkJLyogQ3JlYXRlIGEgbWFwIGZpbGUgKHRvIHN0b3Jl IGRib2lkIGFuZCBkYm5hbWUpICovCisJCW1hcF9maWxlID0gZm9wZW4obWFwX2ZpbGVfcGF0aCwg UEdfQklOQVJZX1cpOworCQlpZiAoIW1hcF9maWxlKQorCQkJcGdfZmF0YWwoImNvdWxkIG5vdCBv cGVuIG1hcCBmaWxlOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CisJfQorCiAJZm9yIChpID0gMDsg aSA8IFBRbnR1cGxlcyhyZXMpOyBpKyspCiAJewogCQljaGFyCSAgICpkYm5hbWUgPSBQUWdldHZh bHVlKHJlcywgaSwgMCk7CisJCWNoYXIJICAgKm9pZCA9IFBRZ2V0dmFsdWUocmVzLCBpLCAxKTsK IAkJY29uc3QgY2hhciAqY3JlYXRlX29wdHM7CiAJCWludAkJCXJldDsKIApAQCAtMTUzMCw2ICsx NTk1LDE4IEBAIGR1bXBEYXRhYmFzZXMoUEdjb25uICpjb25uKQogCQkJY29udGludWU7CiAJCX0K IAorCQkvKgorCQkgKiBJZiB0aGlzIGlzIG5vbi1wbGFpbiBkdW1wIGZvcm1hdCwgdGhlbiBhcHBl bmQgZGJvaWQgYW5kIGRibmFtZSB0bworCQkgKiB0aGUgbWFwLmRhdCBmaWxlLgorCQkgKi8KKwkJ aWYgKGFyY2hEdW1wRm9ybWF0ICE9IGFyY2hOdWxsKQorCQl7CisJCQlzbnByaW50ZihkYmZpbGVw YXRoLCBNQVhQR1BBVEgsICJcIiVzXCIvXCIlc1wiIiwgZGJfc3ViZGlyLCBvaWQpOworCisJCQkv KiBQdXQgb25lIGxpbmUgZW50cnkgZm9yIGRib2lkIGFuZCBkYm5hbWUgaW4gbWFwIGZpbGUuICov CisJCQlmcHJpbnRmKG1hcF9maWxlLCAiJXMgJXNcbiIsIG9pZCwgcGdfc3RyZHVwKGRibmFtZSkp OworCQl9CisKIAkJcGdfbG9nX2luZm8oImR1bXBpbmcgZGF0YWJhc2UgXCIlc1wiIiwgZGJuYW1l KTsKIAogCQlmcHJpbnRmKE9QRiwgIi0tXG4tLSBEYXRhYmFzZSBcIiVzXCIgZHVtcFxuLS1cblxu IiwgZGJuYW1lKTsKQEAgLTE1NDgsOSArMTYyNSwxNyBAQCBkdW1wRGF0YWJhc2VzKFBHY29ubiAq Y29ubikKIAkJCQljcmVhdGVfb3B0cyA9ICItLWNsZWFuIC0tY3JlYXRlIjsKIAkJCWVsc2UKIAkJ CXsKLQkJCQljcmVhdGVfb3B0cyA9ICIiOwogCQkJCS8qIFNpbmNlIHBnX2R1bXAgd29uJ3QgZW1p dCBhIFxjb25uZWN0IGNvbW1hbmQsIHdlIG11c3QgKi8KLQkJCQlmcHJpbnRmKE9QRiwgIlxcY29u bmVjdCAlc1xuXG4iLCBkYm5hbWUpOworCQkJCWlmIChhcmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVs bCkKKwkJCQl7CisJCQkJCWNyZWF0ZV9vcHRzID0gIiI7CisJCQkJCWZwcmludGYoT1BGLCAiXFxj b25uZWN0ICVzXG5cbiIsIGRibmFtZSk7CisJCQkJfQorCQkJCWVsc2UKKwkJCQl7CisJCQkJCS8q IER1bXBpbmcgYWxsIGRhdGFiYXNlcyBzbyBhZGQgLS1jcmVhdGUgb3B0aW9uLiAqLworCQkJCQlj cmVhdGVfb3B0cyA9ICItLWNyZWF0ZSI7CisJCQkJfQogCQkJfQogCQl9CiAJCWVsc2UKQEAgLTE1 NTksMTkgKzE2NDQsMzAgQEAgZHVtcERhdGFiYXNlcyhQR2Nvbm4gKmNvbm4pCiAJCWlmIChmaWxl bmFtZSkKIAkJCWZjbG9zZShPUEYpOwogCi0JCXJldCA9IHJ1blBnRHVtcChkYm5hbWUsIGNyZWF0 ZV9vcHRzKTsKKwkJcmV0ID0gcnVuUGdEdW1wKGRibmFtZSwgY3JlYXRlX29wdHMsIGRiZmlsZXBh dGgsIGFyY2hEdW1wRm9ybWF0KTsKIAkJaWYgKHJldCAhPSAwKQogCQkJcGdfZmF0YWwoInBnX2R1 bXAgZmFpbGVkIG9uIGRhdGFiYXNlIFwiJXNcIiwgZXhpdGluZyIsIGRibmFtZSk7CiAKIAkJaWYg KGZpbGVuYW1lKQogCQl7Ci0JCQlPUEYgPSBmb3BlbihmaWxlbmFtZSwgUEdfQklOQVJZX0EpOwor CQkJY2hhcgl0b2NfcGF0aFtNQVhQR1BBVEhdOworCisJCQlpZiAoYXJjaER1bXBGb3JtYXQgIT0g YXJjaE51bGwpCisJCQkJc25wcmludGYodG9jX3BhdGgsIE1BWFBHUEFUSCwgIiVzL2dsb2JhbC5k YXQiLCBmaWxlbmFtZSk7CisJCQllbHNlCisJCQkJc25wcmludGYodG9jX3BhdGgsIE1BWFBHUEFU SCwgIiVzIiwgZmlsZW5hbWUpOworCisJCQlPUEYgPSBmb3Blbih0b2NfcGF0aCwgUEdfQklOQVJZ X0EpOwogCQkJaWYgKCFPUEYpCiAJCQkJcGdfZmF0YWwoImNvdWxkIG5vdCByZS1vcGVuIHRoZSBv dXRwdXQgZmlsZSBcIiVzXCI6ICVtIiwKLQkJCQkJCSBmaWxlbmFtZSk7CisJCQkJCQkgdG9jX3Bh dGgpOwogCQl9CiAJfQogCisJLyogQ2xvc2UgbWFwIGZpbGUgKi8KKwlpZiAoYXJjaER1bXBGb3Jt YXQgIT0gYXJjaE51bGwpCisJCWZjbG9zZShtYXBfZmlsZSk7CisKIAlQUWNsZWFyKHJlcyk7CiB9 CiAKQEAgLTE1ODEsNyArMTY3Nyw4IEBAIGR1bXBEYXRhYmFzZXMoUEdjb25uICpjb25uKQogICog UnVuIHBnX2R1bXAgb24gZGJuYW1lLCB3aXRoIHNwZWNpZmllZCBvcHRpb25zLgogICovCiBzdGF0 aWMgaW50Ci1ydW5QZ0R1bXAoY29uc3QgY2hhciAqZGJuYW1lLCBjb25zdCBjaGFyICpjcmVhdGVf b3B0cykKK3J1blBnRHVtcChjb25zdCBjaGFyICpkYm5hbWUsIGNvbnN0IGNoYXIgKmNyZWF0ZV9v cHRzLCBjaGFyICpkYmZpbGUsCisJCUFyY2hpdmVGb3JtYXQgYXJjaER1bXBGb3JtYXQpCiB7CiAJ UFFFeHBCdWZmZXJEYXRhIGNvbm5zdHJidWY7CiAJUFFFeHBCdWZmZXJEYXRhIGNtZDsKQEAgLTE1 OTAsMTcgKzE2ODcsMzYgQEAgcnVuUGdEdW1wKGNvbnN0IGNoYXIgKmRibmFtZSwgY29uc3QgY2hh ciAqY3JlYXRlX29wdHMpCiAJaW5pdFBRRXhwQnVmZmVyKCZjb25uc3RyYnVmKTsKIAlpbml0UFFF eHBCdWZmZXIoJmNtZCk7CiAKLQlwcmludGZQUUV4cEJ1ZmZlcigmY21kLCAiXCIlc1wiICVzICVz IiwgcGdfZHVtcF9iaW4sCi0JCQkJCSAgcGdkdW1wb3B0cy0+ZGF0YSwgY3JlYXRlX29wdHMpOwot CiAJLyoKLQkgKiBJZiB3ZSBoYXZlIGEgZmlsZW5hbWUsIHVzZSB0aGUgdW5kb2N1bWVudGVkIHBs YWluLWFwcGVuZCBwZ19kdW1wCi0JICogZm9ybWF0LgorCSAqIElmIHRoaXMgaXMgbm9uLXBsYWlu IGZvcm1hdCBkdW1wLCB0aGVuIGFwcGVuZCBmaWxlIG5hbWUgYW5kIGR1bXAKKwkgKiBmb3JtYXQg dG8gdGhlIHBnX2R1bXAgY29tbWFuZCB0byBnZXQgYXJjaGl2ZSBkdW1wLgogCSAqLwotCWlmIChm aWxlbmFtZSkKLQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmNtZCwgIiAtRmEgIik7CisJaWYgKGFy Y2hEdW1wRm9ybWF0ICE9IGFyY2hOdWxsKQorCXsKKwkJcHJpbnRmUFFFeHBCdWZmZXIoJmNtZCwg IlwiJXNcIiAtZiAlcyAlcyIsIHBnX2R1bXBfYmluLAorCQkJCQkJICBkYmZpbGUsIGNyZWF0ZV9v cHRzKTsKKworCQlpZiAoYXJjaER1bXBGb3JtYXQgPT0gYXJjaERpcmVjdG9yeSkKKwkJCWFwcGVu ZFBRRXhwQnVmZmVyU3RyKCZjbWQsICIgIC0tZm9ybWF0PWRpcmVjdG9yeSAiKTsKKwkJZWxzZSBp ZiAoYXJjaER1bXBGb3JtYXQgPT0gYXJjaEN1c3RvbSkKKwkJCWFwcGVuZFBRRXhwQnVmZmVyU3Ry KCZjbWQsICIgIC0tZm9ybWF0PWN1c3RvbSAiKTsKKwkJZWxzZSBpZiAoYXJjaER1bXBGb3JtYXQg PT0gYXJjaFRhcikKKwkJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZjbWQsICIgIC0tZm9ybWF0PXRh ciAiKTsKKwl9CiAJZWxzZQotCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmY21kLCAiIC1GcCAiKTsK Kwl7CisJCXByaW50ZlBRRXhwQnVmZmVyKCZjbWQsICJcIiVzXCIgJXMgJXMiLCBwZ19kdW1wX2Jp biwKKwkJCQkJCXBnZHVtcG9wdHMtPmRhdGEsIGNyZWF0ZV9vcHRzKTsKKworCQkvKgorCQkqIElm IHdlIGhhdmUgYSBmaWxlbmFtZSwgdXNlIHRoZSB1bmRvY3VtZW50ZWQgcGxhaW4tYXBwZW5kIHBn X2R1bXAKKwkJKiBmb3JtYXQuCisJCSovCisJCWlmIChmaWxlbmFtZSkKKwkJCWFwcGVuZFBRRXhw QnVmZmVyU3RyKCZjbWQsICIgLUZhICIpOworCQllbHNlCisJCQlhcHBlbmRQUUV4cEJ1ZmZlclN0 cigmY21kLCAiIC1GcCAiKTsKKwl9CiAKIAkvKgogCSAqIEFwcGVuZCB0aGUgZGF0YWJhc2UgbmFt ZSB0byB0aGUgYWxyZWFkeS1jb25zdHJ1Y3RlZCBzdGVtIG9mIGNvbm5lY3Rpb24KQEAgLTE2NTAs MjU2ICsxNzY2LDYgQEAgYnVpbGRTaFNlY0xhYmVscyhQR2Nvbm4gKmNvbm4sIGNvbnN0IGNoYXIg KmNhdGFsb2dfbmFtZSwgT2lkIG9iamVjdElkLAogCWRlc3Ryb3lQUUV4cEJ1ZmZlcihzcWwpOwog fQogCi0vKgotICogTWFrZSBhIGRhdGFiYXNlIGNvbm5lY3Rpb24gd2l0aCB0aGUgZ2l2ZW4gcGFy YW1ldGVycy4gIEFuCi0gKiBpbnRlcmFjdGl2ZSBwYXNzd29yZCBwcm9tcHQgaXMgYXV0b21hdGlj YWxseSBpc3N1ZWQgaWYgcmVxdWlyZWQuCi0gKgotICogSWYgZmFpbF9vbl9lcnJvciBpcyBmYWxz ZSwgd2UgcmV0dXJuIE5VTEwgd2l0aG91dCBwcmludGluZyBhbnkgbWVzc2FnZQotICogb24gZmFp bHVyZSwgYnV0IHByZXNlcnZlIGFueSBwcm9tcHRlZCBwYXNzd29yZCBmb3IgdGhlIG5leHQgdHJ5 LgotICoKLSAqIE9uIHN1Y2Nlc3MsIHRoZSBnbG9iYWwgdmFyaWFibGUgJ2Nvbm5zdHInIGlzIHNl dCB0byBhIGNvbm5lY3Rpb24gc3RyaW5nCi0gKiBjb250YWluaW5nIHRoZSBvcHRpb25zIHVzZWQu Ci0gKi8KLXN0YXRpYyBQR2Nvbm4gKgotY29ubmVjdERhdGFiYXNlKGNvbnN0IGNoYXIgKmRibmFt ZSwgY29uc3QgY2hhciAqY29ubmVjdGlvbl9zdHJpbmcsCi0JCQkJY29uc3QgY2hhciAqcGdob3N0 LCBjb25zdCBjaGFyICpwZ3BvcnQsIGNvbnN0IGNoYXIgKnBndXNlciwKLQkJCQl0cml2YWx1ZSBw cm9tcHRfcGFzc3dvcmQsIGJvb2wgZmFpbF9vbl9lcnJvcikKLXsKLQlQR2Nvbm4JICAgKmNvbm47 Ci0JYm9vbAkJbmV3X3Bhc3M7Ci0JY29uc3QgY2hhciAqcmVtb3RldmVyc2lvbl9zdHI7Ci0JaW50 CQkJbXlfdmVyc2lvbjsKLQljb25zdCBjaGFyICoqa2V5d29yZHMgPSBOVUxMOwotCWNvbnN0IGNo YXIgKip2YWx1ZXMgPSBOVUxMOwotCVBRY29ubmluZm9PcHRpb24gKmNvbm5fb3B0cyA9IE5VTEw7 Ci0Jc3RhdGljIGNoYXIgKnBhc3N3b3JkID0gTlVMTDsKLQotCWlmIChwcm9tcHRfcGFzc3dvcmQg PT0gVFJJX1lFUyAmJiAhcGFzc3dvcmQpCi0JCXBhc3N3b3JkID0gc2ltcGxlX3Byb21wdCgiUGFz c3dvcmQ6ICIsIGZhbHNlKTsKLQotCS8qCi0JICogU3RhcnQgdGhlIGNvbm5lY3Rpb24uICBMb29w IHVudGlsIHdlIGhhdmUgYSBwYXNzd29yZCBpZiByZXF1ZXN0ZWQgYnkKLQkgKiBiYWNrZW5kLgot CSAqLwotCWRvCi0JewotCQlpbnQJCQlhcmdjb3VudCA9IDY7Ci0JCVBRY29ubmluZm9PcHRpb24g KmNvbm5fb3B0OwotCQljaGFyCSAgICplcnJfbXNnID0gTlVMTDsKLQkJaW50CQkJaSA9IDA7Ci0K LQkJZnJlZShrZXl3b3Jkcyk7Ci0JCWZyZWUodmFsdWVzKTsKLQkJUFFjb25uaW5mb0ZyZWUoY29u bl9vcHRzKTsKLQotCQkvKgotCQkgKiBNZXJnZSB0aGUgY29ubmVjdGlvbiBpbmZvIGlucHV0cyBn aXZlbiBpbiBmb3JtIG9mIGNvbm5lY3Rpb24gc3RyaW5nCi0JCSAqIGFuZCBvdGhlciBvcHRpb25z LiAgRXhwbGljaXRseSBkaXNjYXJkIGFueSBkYm5hbWUgdmFsdWUgaW4gdGhlCi0JCSAqIGNvbm5l Y3Rpb24gc3RyaW5nOyBvdGhlcndpc2UsIFBRY29ubmVjdGRiUGFyYW1zKCkgd291bGQgaW50ZXJw cmV0Ci0JCSAqIHRoYXQgdmFsdWUgYXMgYmVpbmcgaXRzZWxmIGEgY29ubmVjdGlvbiBzdHJpbmcu Ci0JCSAqLwotCQlpZiAoY29ubmVjdGlvbl9zdHJpbmcpCi0JCXsKLQkJCWNvbm5fb3B0cyA9IFBR Y29ubmluZm9QYXJzZShjb25uZWN0aW9uX3N0cmluZywgJmVycl9tc2cpOwotCQkJaWYgKGNvbm5f b3B0cyA9PSBOVUxMKQotCQkJCXBnX2ZhdGFsKCIlcyIsIGVycl9tc2cpOwotCi0JCQlmb3IgKGNv bm5fb3B0ID0gY29ubl9vcHRzOyBjb25uX29wdC0+a2V5d29yZCAhPSBOVUxMOyBjb25uX29wdCsr KQotCQkJewotCQkJCWlmIChjb25uX29wdC0+dmFsICE9IE5VTEwgJiYgY29ubl9vcHQtPnZhbFsw XSAhPSAnXDAnICYmCi0JCQkJCXN0cmNtcChjb25uX29wdC0+a2V5d29yZCwgImRibmFtZSIpICE9 IDApCi0JCQkJCWFyZ2NvdW50Kys7Ci0JCQl9Ci0KLQkJCWtleXdvcmRzID0gcGdfbWFsbG9jMCgo YXJnY291bnQgKyAxKSAqIHNpemVvZigqa2V5d29yZHMpKTsKLQkJCXZhbHVlcyA9IHBnX21hbGxv YzAoKGFyZ2NvdW50ICsgMSkgKiBzaXplb2YoKnZhbHVlcykpOwotCi0JCQlmb3IgKGNvbm5fb3B0 ID0gY29ubl9vcHRzOyBjb25uX29wdC0+a2V5d29yZCAhPSBOVUxMOyBjb25uX29wdCsrKQotCQkJ ewotCQkJCWlmIChjb25uX29wdC0+dmFsICE9IE5VTEwgJiYgY29ubl9vcHQtPnZhbFswXSAhPSAn XDAnICYmCi0JCQkJCXN0cmNtcChjb25uX29wdC0+a2V5d29yZCwgImRibmFtZSIpICE9IDApCi0J CQkJewotCQkJCQlrZXl3b3Jkc1tpXSA9IGNvbm5fb3B0LT5rZXl3b3JkOwotCQkJCQl2YWx1ZXNb aV0gPSBjb25uX29wdC0+dmFsOwotCQkJCQlpKys7Ci0JCQkJfQotCQkJfQotCQl9Ci0JCWVsc2UK LQkJewotCQkJa2V5d29yZHMgPSBwZ19tYWxsb2MwKChhcmdjb3VudCArIDEpICogc2l6ZW9mKCpr ZXl3b3JkcykpOwotCQkJdmFsdWVzID0gcGdfbWFsbG9jMCgoYXJnY291bnQgKyAxKSAqIHNpemVv ZigqdmFsdWVzKSk7Ci0JCX0KLQotCQlpZiAocGdob3N0KQotCQl7Ci0JCQlrZXl3b3Jkc1tpXSA9 ICJob3N0IjsKLQkJCXZhbHVlc1tpXSA9IHBnaG9zdDsKLQkJCWkrKzsKLQkJfQotCQlpZiAocGdw b3J0KQotCQl7Ci0JCQlrZXl3b3Jkc1tpXSA9ICJwb3J0IjsKLQkJCXZhbHVlc1tpXSA9IHBncG9y dDsKLQkJCWkrKzsKLQkJfQotCQlpZiAocGd1c2VyKQotCQl7Ci0JCQlrZXl3b3Jkc1tpXSA9ICJ1 c2VyIjsKLQkJCXZhbHVlc1tpXSA9IHBndXNlcjsKLQkJCWkrKzsKLQkJfQotCQlpZiAocGFzc3dv cmQpCi0JCXsKLQkJCWtleXdvcmRzW2ldID0gInBhc3N3b3JkIjsKLQkJCXZhbHVlc1tpXSA9IHBh c3N3b3JkOwotCQkJaSsrOwotCQl9Ci0JCWlmIChkYm5hbWUpCi0JCXsKLQkJCWtleXdvcmRzW2ld ID0gImRibmFtZSI7Ci0JCQl2YWx1ZXNbaV0gPSBkYm5hbWU7Ci0JCQlpKys7Ci0JCX0KLQkJa2V5 d29yZHNbaV0gPSAiZmFsbGJhY2tfYXBwbGljYXRpb25fbmFtZSI7Ci0JCXZhbHVlc1tpXSA9IHBy b2duYW1lOwotCQlpKys7Ci0KLQkJbmV3X3Bhc3MgPSBmYWxzZTsKLQkJY29ubiA9IFBRY29ubmVj dGRiUGFyYW1zKGtleXdvcmRzLCB2YWx1ZXMsIHRydWUpOwotCi0JCWlmICghY29ubikKLQkJCXBn X2ZhdGFsKCJjb3VsZCBub3QgY29ubmVjdCB0byBkYXRhYmFzZSBcIiVzXCIiLCBkYm5hbWUpOwot Ci0JCWlmIChQUXN0YXR1cyhjb25uKSA9PSBDT05ORUNUSU9OX0JBRCAmJgotCQkJUFFjb25uZWN0 aW9uTmVlZHNQYXNzd29yZChjb25uKSAmJgotCQkJIXBhc3N3b3JkICYmCi0JCQlwcm9tcHRfcGFz c3dvcmQgIT0gVFJJX05PKQotCQl7Ci0JCQlQUWZpbmlzaChjb25uKTsKLQkJCXBhc3N3b3JkID0g c2ltcGxlX3Byb21wdCgiUGFzc3dvcmQ6ICIsIGZhbHNlKTsKLQkJCW5ld19wYXNzID0gdHJ1ZTsK LQkJfQotCX0gd2hpbGUgKG5ld19wYXNzKTsKLQotCS8qIGNoZWNrIHRvIHNlZSB0aGF0IHRoZSBi YWNrZW5kIGNvbm5lY3Rpb24gd2FzIHN1Y2Nlc3NmdWxseSBtYWRlICovCi0JaWYgKFBRc3RhdHVz KGNvbm4pID09IENPTk5FQ1RJT05fQkFEKQotCXsKLQkJaWYgKGZhaWxfb25fZXJyb3IpCi0JCQlw Z19mYXRhbCgiJXMiLCBQUWVycm9yTWVzc2FnZShjb25uKSk7Ci0JCWVsc2UKLQkJewotCQkJUFFm aW5pc2goY29ubik7Ci0KLQkJCWZyZWUoa2V5d29yZHMpOwotCQkJZnJlZSh2YWx1ZXMpOwotCQkJ UFFjb25uaW5mb0ZyZWUoY29ubl9vcHRzKTsKLQotCQkJcmV0dXJuIE5VTEw7Ci0JCX0KLQl9Ci0K LQkvKgotCSAqIE9rLCBjb25uZWN0ZWQgc3VjY2Vzc2Z1bGx5LiBSZW1lbWJlciB0aGUgb3B0aW9u cyB1c2VkLCBpbiB0aGUgZm9ybSBvZiBhCi0JICogY29ubmVjdGlvbiBzdHJpbmcuCi0JICovCi0J Y29ubnN0ciA9IGNvbnN0cnVjdENvbm5TdHIoa2V5d29yZHMsIHZhbHVlcyk7Ci0KLQlmcmVlKGtl eXdvcmRzKTsKLQlmcmVlKHZhbHVlcyk7Ci0JUFFjb25uaW5mb0ZyZWUoY29ubl9vcHRzKTsKLQot CS8qIENoZWNrIHZlcnNpb24gKi8KLQlyZW1vdGV2ZXJzaW9uX3N0ciA9IFBRcGFyYW1ldGVyU3Rh dHVzKGNvbm4sICJzZXJ2ZXJfdmVyc2lvbiIpOwotCWlmICghcmVtb3RldmVyc2lvbl9zdHIpCi0J CXBnX2ZhdGFsKCJjb3VsZCBub3QgZ2V0IHNlcnZlciB2ZXJzaW9uIik7Ci0Jc2VydmVyX3ZlcnNp b24gPSBQUXNlcnZlclZlcnNpb24oY29ubik7Ci0JaWYgKHNlcnZlcl92ZXJzaW9uID09IDApCi0J CXBnX2ZhdGFsKCJjb3VsZCBub3QgcGFyc2Ugc2VydmVyIHZlcnNpb24gXCIlc1wiIiwKLQkJCQkg cmVtb3RldmVyc2lvbl9zdHIpOwotCi0JbXlfdmVyc2lvbiA9IFBHX1ZFUlNJT05fTlVNOwotCi0J LyoKLQkgKiBXZSBhbGxvdyB0aGUgc2VydmVyIHRvIGJlIGJhY2sgdG8gOS4yLCBhbmQgdXAgdG8g YW55IG1pbm9yIHJlbGVhc2Ugb2YKLQkgKiBvdXIgb3duIG1ham9yIHZlcnNpb24uICAoU2VlIGFs c28gdmVyc2lvbiBjaGVjayBpbiBwZ19kdW1wLmMuKQotCSAqLwotCWlmIChteV92ZXJzaW9uICE9 IHNlcnZlcl92ZXJzaW9uCi0JCSYmIChzZXJ2ZXJfdmVyc2lvbiA8IDkwMjAwIHx8Ci0JCQkoc2Vy dmVyX3ZlcnNpb24gLyAxMDApID4gKG15X3ZlcnNpb24gLyAxMDApKSkKLQl7Ci0JCXBnX2xvZ19l cnJvcigiYWJvcnRpbmcgYmVjYXVzZSBvZiBzZXJ2ZXIgdmVyc2lvbiBtaXNtYXRjaCIpOwotCQlw Z19sb2dfZXJyb3JfZGV0YWlsKCJzZXJ2ZXIgdmVyc2lvbjogJXM7ICVzIHZlcnNpb246ICVzIiwK LQkJCQkJCQlyZW1vdGV2ZXJzaW9uX3N0ciwgcHJvZ25hbWUsIFBHX1ZFUlNJT04pOwotCQlleGl0 X25pY2VseSgxKTsKLQl9Ci0KLQlQUWNsZWFyKGV4ZWN1dGVRdWVyeShjb25uLCBBTFdBWVNfU0VD VVJFX1NFQVJDSF9QQVRIX1NRTCkpOwotCi0JcmV0dXJuIGNvbm47Ci19Ci0KLS8qIC0tLS0tLS0t LS0KLSAqIENvbnN0cnVjdCBhIGNvbm5lY3Rpb24gc3RyaW5nIGZyb20gdGhlIGdpdmVuIGtleXdv cmQvdmFsdWUgcGFpcnMuIEl0IGlzCi0gKiB1c2VkIHRvIHBhc3MgdGhlIGNvbm5lY3Rpb24gb3B0 aW9ucyB0byB0aGUgcGdfZHVtcCBzdWJwcm9jZXNzLgotICoKLSAqIFRoZSBmb2xsb3dpbmcgcGFy YW1ldGVycyBhcmUgZXhjbHVkZWQ6Ci0gKglkYm5hbWUJCS0gdmFyaWVzIGluIGVhY2ggcGdfZHVt cCBpbnZvY2F0aW9uCi0gKglwYXNzd29yZAktIGl0J3Mgbm90IHNlY3VyZSB0byBwYXNzIGEgcGFz c3dvcmQgb24gdGhlIGNvbW1hbmQgbGluZQotICoJZmFsbGJhY2tfYXBwbGljYXRpb25fbmFtZSAt IHdlJ2xsIGxldCBwZ19kdW1wIHNldCBpdAotICogLS0tLS0tLS0tLQotICovCi1zdGF0aWMgY2hh ciAqCi1jb25zdHJ1Y3RDb25uU3RyKGNvbnN0IGNoYXIgKiprZXl3b3JkcywgY29uc3QgY2hhciAq KnZhbHVlcykKLXsKLQlQUUV4cEJ1ZmZlciBidWYgPSBjcmVhdGVQUUV4cEJ1ZmZlcigpOwotCWNo YXIJICAgKmNvbm5zdHI7Ci0JaW50CQkJaTsKLQlib29sCQlmaXJzdGtleXdvcmQgPSB0cnVlOwot Ci0JLyogQ29uc3RydWN0IGEgbmV3IGNvbm5lY3Rpb24gc3RyaW5nIGluIGtleT0ndmFsdWUnIGZv cm1hdC4gKi8KLQlmb3IgKGkgPSAwOyBrZXl3b3Jkc1tpXSAhPSBOVUxMOyBpKyspCi0JewotCQlp ZiAoc3RyY21wKGtleXdvcmRzW2ldLCAiZGJuYW1lIikgPT0gMCB8fAotCQkJc3RyY21wKGtleXdv cmRzW2ldLCAicGFzc3dvcmQiKSA9PSAwIHx8Ci0JCQlzdHJjbXAoa2V5d29yZHNbaV0sICJmYWxs YmFja19hcHBsaWNhdGlvbl9uYW1lIikgPT0gMCkKLQkJCWNvbnRpbnVlOwotCi0JCWlmICghZmly c3RrZXl3b3JkKQotCQkJYXBwZW5kUFFFeHBCdWZmZXJDaGFyKGJ1ZiwgJyAnKTsKLQkJZmlyc3Rr ZXl3b3JkID0gZmFsc2U7Ci0JCWFwcGVuZFBRRXhwQnVmZmVyKGJ1ZiwgIiVzPSIsIGtleXdvcmRz W2ldKTsKLQkJYXBwZW5kQ29ublN0clZhbChidWYsIHZhbHVlc1tpXSk7Ci0JfQotCi0JY29ubnN0 ciA9IHBnX3N0cmR1cChidWYtPmRhdGEpOwotCWRlc3Ryb3lQUUV4cEJ1ZmZlcihidWYpOwotCXJl dHVybiBjb25uc3RyOwotfQotCi0vKgotICogUnVuIGEgcXVlcnksIHJldHVybiB0aGUgcmVzdWx0 cywgZXhpdCBwcm9ncmFtIG9uIGZhaWx1cmUuCi0gKi8KLXN0YXRpYyBQR3Jlc3VsdCAqCi1leGVj dXRlUXVlcnkoUEdjb25uICpjb25uLCBjb25zdCBjaGFyICpxdWVyeSkKLXsKLQlQR3Jlc3VsdCAg ICpyZXM7Ci0KLQlwZ19sb2dfaW5mbygiZXhlY3V0aW5nICVzIiwgcXVlcnkpOwotCi0JcmVzID0g UFFleGVjKGNvbm4sIHF1ZXJ5KTsKLQlpZiAoIXJlcyB8fAotCQlQUXJlc3VsdFN0YXR1cyhyZXMp ICE9IFBHUkVTX1RVUExFU19PSykKLQl7Ci0JCXBnX2xvZ19lcnJvcigicXVlcnkgZmFpbGVkOiAl cyIsIFBRZXJyb3JNZXNzYWdlKGNvbm4pKTsKLQkJcGdfbG9nX2Vycm9yX2RldGFpbCgiUXVlcnkg d2FzOiAlcyIsIHF1ZXJ5KTsKLQkJUFFmaW5pc2goY29ubik7Ci0JCWV4aXRfbmljZWx5KDEpOwot CX0KLQotCXJldHVybiByZXM7Ci19Ci0KIC8qCiAgKiBBcyBhYm92ZSBmb3IgYSBTUUwgY29tbWFu ZCAod2hpY2ggcmV0dXJucyBub3RoaW5nKS4KICAqLwpAQCAtMTk5NSwzICsxODYxLDkxIEBAIHJl YWRfZHVtcGFsbF9maWx0ZXJzKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBTaW1wbGVTdHJpbmdMaXN0 ICpwYXR0ZXJuKQogCiAJZmlsdGVyX2ZyZWUoJmZzdGF0ZSk7CiB9CisKKy8qCisgKiBjcmVhdGVf b3Jfb3Blbl9kaXIKKyAqCisgKiBUaGlzIHdpbGwgY3JlYXRlIGEgbmV3IGRpcmVjdG9yeSB3aXRo IGdpdmVuIG5hbWUuICBJZiB0aGVyZSBpcyBhbHJlYWR5IHNhbWUKKyAqIGVtcHR5IGRpcmVjdG9y eSBleGlzdCwgdGhlbiB1c2UgaXQuCisgKi8KK3N0YXRpYyB2b2lkCitjcmVhdGVfb3Jfb3Blbl9k aXIoY29uc3QgY2hhciAqZGlybmFtZSkKK3sKKwlzdHJ1Y3Qgc3RhdAkJc3Q7CisJYm9vbAkJCWlz X2VtcHR5ID0gZmFsc2U7CisKKwkvKiB3ZSBhY2NlcHQgYW4gZW1wdHkgZXhpc3RpbmcgZGlyZWN0 b3J5ICovCisJaWYgKHN0YXQoZGlybmFtZSwgJnN0KSA9PSAwICYmIFNfSVNESVIoc3Quc3RfbW9k ZSkpCisJeworCQlESVIJCSpkaXIgPSBvcGVuZGlyKGRpcm5hbWUpOworCisJCWlmIChkaXIpCisJ CXsKKwkJCXN0cnVjdCBkaXJlbnQJKmQ7CisKKwkJCWlzX2VtcHR5ID0gdHJ1ZTsKKworCQkJd2hp bGUgKGVycm5vID0gMCwgKGQgPSByZWFkZGlyKGRpcikpKQorCQkJeworCQkJCWlmIChzdHJjbXAo ZC0+ZF9uYW1lLCAiLiIpICE9IDAgJiYgc3RyY21wKGQtPmRfbmFtZSwgIi4uIikgIT0gMCkKKwkJ CQl7CisJCQkJCWlzX2VtcHR5ID0gZmFsc2U7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwor CQkJaWYgKGVycm5vKQorCQkJCXBnX2ZhdGFsKCJjb3VsZCBub3QgcmVhZCBkaXJlY3RvcnkgXCIl c1wiOiAlbSIsCisJCQkJCQlkaXJuYW1lKTsKKworCQkJaWYgKGNsb3NlZGlyKGRpcikpCisJCQkJ cGdfZmF0YWwoImNvdWxkIG5vdCBjbG9zZSBkaXJlY3RvcnkgXCIlc1wiOiAlbSIsCisJCQkJCQlk aXJuYW1lKTsKKwkJfQorCisJCWlmKCFpc19lbXB0eSkKKwkJeworCQkJcGdfbG9nX2Vycm9yKCJk aXJlY3RvcnkgXCIlc1wiIGV4aXN0cyBidXQgaXMgbm90IGVtcHR5IiwgZGlybmFtZSk7CisJCQlw Z19sb2dfZXJyb3JfaGludCgiSWYgeW91IHdhbnQgdG8gZHVtcCBkYXRhIG9uIHRoaXMgZGlyZWN0 b3J5LCBlaXRoZXIgcmVtb3ZlIG9yIGVtcHR5ICIKKwkJCQkJCQkgICJ0aGlzIGRpcmVjdG9yeSBc IiVzXCIgb3IgcnVuICVzICIKKwkJCQkJCQkgICJ3aXRoIGFuIGFyZ3VtZW50IG90aGVyIHRoYW4g XCIlc1wiLiIsCisJCQkJCQkJICBkaXJuYW1lLCBwcm9nbmFtZSwgZGlybmFtZSk7CisJCQlleGl0 X25pY2VseSgxKTsKKwkJfQorCX0KKwllbHNlIGlmIChta2RpcihkaXJuYW1lLCAwNzAwKSA8IDAp CisJCXBnX2ZhdGFsKCJjb3VsZCBub3QgY3JlYXRlIGRpcmVjdG9yeSBcIiVzXCI6ICVtIiwgZGly bmFtZSk7Cit9CisKKy8qCisgKiBwYXJzZUR1bXBGb3JtYXQKKyAqCisgKiBUaGlzIHdpbGwgdmFs aWRhdGUgZHVtcCBmb3JtYXRzLgorICovCitzdGF0aWMgQXJjaGl2ZUZvcm1hdAorcGFyc2VEdW1w Rm9ybWF0KGNvbnN0IGNoYXIgKmZvcm1hdCkKK3sKKwlBcmNoaXZlRm9ybWF0CWFyY2hEdW1wRm9y bWF0OworCisJaWYgKHBnX3N0cmNhc2VjbXAoZm9ybWF0LCAiYyIpID09IDApCisJCWFyY2hEdW1w Rm9ybWF0ID0gYXJjaEN1c3RvbTsKKwllbHNlIGlmIChwZ19zdHJjYXNlY21wKGZvcm1hdCwgImN1 c3RvbSIpID09IDApCisJCWFyY2hEdW1wRm9ybWF0ID0gYXJjaEN1c3RvbTsKKwllbHNlIGlmIChw Z19zdHJjYXNlY21wKGZvcm1hdCwgImQiKSA9PSAwKQorCQlhcmNoRHVtcEZvcm1hdCA9IGFyY2hE aXJlY3Rvcnk7CisJZWxzZSBpZiAocGdfc3RyY2FzZWNtcChmb3JtYXQsICJkaXJlY3RvcnkiKSA9 PSAwKQorCQlhcmNoRHVtcEZvcm1hdCA9IGFyY2hEaXJlY3Rvcnk7CisJZWxzZSBpZiAocGdfc3Ry Y2FzZWNtcChmb3JtYXQsICJwIikgPT0gMCkKKwkJYXJjaER1bXBGb3JtYXQgPSBhcmNoTnVsbDsK KwllbHNlIGlmIChwZ19zdHJjYXNlY21wKGZvcm1hdCwgInBsYWluIikgPT0gMCkKKwkJYXJjaER1 bXBGb3JtYXQgPSBhcmNoTnVsbDsKKwllbHNlIGlmIChwZ19zdHJjYXNlY21wKGZvcm1hdCwgInQi KSA9PSAwKQorCQlhcmNoRHVtcEZvcm1hdCA9IGFyY2hUYXI7CisJZWxzZSBpZiAocGdfc3RyY2Fz ZWNtcChmb3JtYXQsICJ0YXIiKSA9PSAwKQorCQlhcmNoRHVtcEZvcm1hdCA9IGFyY2hUYXI7CisJ ZWxzZQorCQlwZ19mYXRhbCgidW5yZWNvZ25pemVkIGFyY2hpdmUgZm9ybWF0IFwiJXNcIjsgcGxl YXNlIHNwZWNpZnkgXCJjXCIsIFwiZFwiLCBcInBcIiwgb3IgXCJ0XCIiLAorCQkJCWZvcm1hdCk7 CisKKwlyZXR1cm4gYXJjaER1bXBGb3JtYXQ7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1 bXAvcGdfcmVzdG9yZS5jIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX3Jlc3RvcmUuYwppbmRleCBjNjAy MjcyZDdkYi4uODk3NGVlODg2ZDUgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9wZ19yZXN0 b3JlLmMKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX3Jlc3RvcmUuYwpAQCAtMiw3ICsyLDcgQEAK ICAqCiAgKiBwZ19yZXN0b3JlLmMKICAqCXBnX3Jlc3RvcmUgaXMgYW4gdXRpbGl0eSBleHRyYWN0 aW5nIHBvc3RncmVzIGRhdGFiYXNlIGRlZmluaXRpb25zCi0gKglmcm9tIGEgYmFja3VwIGFyY2hp dmUgY3JlYXRlZCBieSBwZ19kdW1wIHVzaW5nIHRoZSBhcmNoaXZlcgorICoJZnJvbSBhIGJhY2t1 cCBhcmNoaXZlIGNyZWF0ZWQgYnkgcGdfZHVtcC9wZ19kdW1wYWxsIHVzaW5nIHRoZSBhcmNoaXZl cgogICoJaW50ZXJmYWNlLgogICoKICAqCXBnX3Jlc3RvcmUgd2lsbCByZWFkIHRoZSBiYWNrdXAg YXJjaGl2ZSBhbmQKQEAgLTQxLDI3ICs0MSw3MSBAQAogI2luY2x1ZGUgInBvc3RncmVzX2ZlLmgi CiAKICNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CiAjaWZkZWYgSEFW RV9URVJNSU9TX0gKICNpbmNsdWRlIDx0ZXJtaW9zLmg+CiAjZW5kaWYKIAorI2luY2x1ZGUgImNv bW1vbi9jb25uZWN0LmgiCisjaW5jbHVkZSAiY29tcHJlc3NfaW8uaCIKKyNpbmNsdWRlICJjb21t b24vc3RyaW5nLmgiCisjaW5jbHVkZSAiY29tbW9uX2R1bXBhbGxfcmVzdG9yZS5oIgogI2luY2x1 ZGUgImZlX3V0aWxzL29wdGlvbl91dGlscy5oIgorI2luY2x1ZGUgImZlX3V0aWxzL3N0cmluZ191 dGlscy5oIgogI2luY2x1ZGUgImZpbHRlci5oIgogI2luY2x1ZGUgImdldG9wdF9sb25nLmgiCiAj aW5jbHVkZSAicGFyYWxsZWwuaCIKKyNpbmNsdWRlICJwZ19iYWNrdXBfYXJjaGl2ZXIuaCIKICNp bmNsdWRlICJwZ19iYWNrdXBfdXRpbHMuaCIKIAordHlwZWRlZiBzdHJ1Y3QgU2ltcGxlRGF0YWJh c2VPaWRMaXN0Q2VsbAoreworCXN0cnVjdCBTaW1wbGVEYXRhYmFzZU9pZExpc3RDZWxsCSpuZXh0 OworCU9pZAkJCQkJCQkJCWRiX29pZDsKKwljb25zdCBjaGFyCQkJCQkJCSpkYl9uYW1lOworfSBT aW1wbGVEYXRhYmFzZU9pZExpc3RDZWxsOworCit0eXBlZGVmIHN0cnVjdCBTaW1wbGVEYXRhYmFz ZU9pZExpc3QKK3sKKwlTaW1wbGVEYXRhYmFzZU9pZExpc3RDZWxsICpoZWFkOworCVNpbXBsZURh dGFiYXNlT2lkTGlzdENlbGwgKnRhaWw7Cit9IFNpbXBsZURhdGFiYXNlT2lkTGlzdDsKKwogc3Rh dGljIHZvaWQgdXNhZ2UoY29uc3QgY2hhciAqcHJvZ25hbWUpOwogc3RhdGljIHZvaWQgcmVhZF9y ZXN0b3JlX2ZpbHRlcnMoY29uc3QgY2hhciAqZmlsZW5hbWUsIFJlc3RvcmVPcHRpb25zICpvcHRz KTsKK3N0YXRpYyBib29sIElzRmlsZUV4aXN0c0luRGlyZWN0b3J5KGNvbnN0IGNoYXIgKmRpciwg Y29uc3QgY2hhciAqZmlsZW5hbWUpOworc3RhdGljIGludCByZXN0b3JlT25lRGF0YWJhc2UoY29u c3QgY2hhciAqaW5wdXRGaWxlU3BlYywgUmVzdG9yZU9wdGlvbnMgKm9wdHMsCisJCQkJCQkJICBp bnQgbnVtV29ya2VycywgYm9vbCBhcHBlbmRfZGF0YSwKKwkJCQkJCQkgIGNvbnN0IGNoYXIgKmRi bmFtZSk7CitzdGF0aWMgaW50IFJlYWRPbmVTdGF0ZW1lbnQoU3RyaW5nSW5mbyBpbkJ1ZiwgRklM RSAqcGZpbGUpOworc3RhdGljIGludCByZXN0b3JlQWxsRGF0YWJhc2VzKFBHY29ubiAqY29ubiwg Y29uc3QgY2hhciAqZHVtcGRpcnBhdGgsCisJCQkJCQkJICAgU2ltcGxlU3RyaW5nTGlzdCBkYl9l eGNsdWRlX3BhdHRlcm5zLCBSZXN0b3JlT3B0aW9ucyAqb3B0cywgaW50IG51bVdvcmtlcnMpOwor c3RhdGljIHZvaWQgcHJvY2Vzc19nbG9iYWxfc3FsX2NvbW1hbmRzKFBHY29ubiAqY29ubiwgY29u c3QgY2hhciAqZHVtcGRpcnBhdGgsCisJCQkJCQkJCQkJY29uc3QgY2hhciAqb3V0ZmlsZSk7Citz dGF0aWMgdm9pZCBjb3B5X2dsb2JhbF9maWxlX3RvX291dF9maWxlKGNvbnN0IGNoYXIgKm91dGZp bGUsIEZJTEUgKnBmaWxlKTsKK3N0YXRpYyBpbnQgZ2V0X2RibmFtZXNfbGlzdF90b19yZXN0b3Jl KFBHY29ubiAqY29ubiwKKwkJU2ltcGxlRGF0YWJhc2VPaWRMaXN0ICpkYm5hbWVfb2lkX2xpc3Qs CisJCVNpbXBsZVN0cmluZ0xpc3QgZGJfZXhjbHVkZV9wYXR0ZXJucyk7CitzdGF0aWMgaW50IGdl dF9kYm5hbWVfb2lkX2xpc3RfZnJvbV9tZmlsZShjb25zdCBjaGFyICpkdW1wZGlycGF0aCwKKwkJ CQkJCQkJCQkgIFNpbXBsZURhdGFiYXNlT2lkTGlzdCAqZGJuYW1lX29pZF9saXN0KTsKK3N0YXRp YyB2b2lkIHNpbXBsZV9kYl9vaWRfbGlzdF9hcHBlbmQoU2ltcGxlRGF0YWJhc2VPaWRMaXN0ICps aXN0LCBPaWQgZGJfb2lkLAorCQkJCQkJCQkJICBjb25zdCBjaGFyICpkYm5hbWUpOworc3RhdGlj IHZvaWQgc2ltcGxlX3N0cmluZ19mdWxsX2xpc3RfZGVsZXRlKFNpbXBsZVN0cmluZ0xpc3QgKmxp c3QpOworc3RhdGljIHZvaWQgc2ltcGxlX2RiX29pZF9mdWxsX2xpc3RfZGVsZXRlKFNpbXBsZURh dGFiYXNlT2lkTGlzdCAqbGlzdCk7CitzdGF0aWMgdm9pZCBzaW1wbGVfZGJfb2lkX2xpc3RfZGVs ZXRlKFNpbXBsZURhdGFiYXNlT2lkTGlzdCAqbGlzdCwKKwkJCQkJCQkJCSAgU2ltcGxlRGF0YWJh c2VPaWRMaXN0Q2VsbCAqY2VsbCwKKwkJCQkJCQkJCSAgU2ltcGxlRGF0YWJhc2VPaWRMaXN0Q2Vs bCAqcHJldik7CitzdGF0aWMgdm9pZCBzaW1wbGVfZGJfb2lkX2xpc3RfYXBwZW5kKFNpbXBsZURh dGFiYXNlT2lkTGlzdCAqbGlzdCwKKwkJT2lkIGRiX29pZCwgY29uc3QgY2hhciAqZGJuYW1lKTsK K3N0YXRpYyBzaXplX3QgcXVvdGVfbGl0ZXJhbF9pbnRlcm5hbChjaGFyICpkc3QsIGNvbnN0IGNo YXIgKnNyYywgc2l6ZV90IGxlbik7CitzdGF0aWMgY2hhciAqcXVvdGVfbGl0ZXJhbF9jc3RyKGNv bnN0IGNoYXIgKnJhd3N0cik7CiAKIGludAogbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiB7 CiAJUmVzdG9yZU9wdGlvbnMgKm9wdHM7CiAJaW50CQkJYzsKLQlpbnQJCQlleGl0X2NvZGU7CiAJ aW50CQkJbnVtV29ya2VycyA9IDE7Ci0JQXJjaGl2ZSAgICAqQUg7CiAJY2hhcgkgICAqaW5wdXRG aWxlU3BlYzsKIAlzdGF0aWMgaW50CWRpc2FibGVfdHJpZ2dlcnMgPSAwOwogCXN0YXRpYyBpbnQJ ZW5hYmxlX3Jvd19zZWN1cml0eSA9IDA7CkBAIC03NywxMSArMTIxLDE0IEBAIG1haW4oaW50IGFy Z2MsIGNoYXIgKiphcmd2KQogCXN0YXRpYyBpbnQJc3RyaWN0X25hbWVzID0gMDsKIAlib29sCQlk YXRhX29ubHkgPSBmYWxzZTsKIAlib29sCQlzY2hlbWFfb25seSA9IGZhbHNlOworCWJvb2wJCQkJ Z2xvYmFsc19vbmx5ID0gZmFsc2U7CisJU2ltcGxlU3RyaW5nTGlzdAlkYl9leGNsdWRlX3BhdHRl cm5zID0ge05VTEwsIE5VTEx9OwogCiAJc3RydWN0IG9wdGlvbiBjbWRvcHRzW10gPSB7CiAJCXsi Y2xlYW4iLCAwLCBOVUxMLCAnYyd9LAogCQl7ImNyZWF0ZSIsIDAsIE5VTEwsICdDJ30sCiAJCXsi ZGF0YS1vbmx5IiwgMCwgTlVMTCwgJ2EnfSwKKwkJeyJnbG9iYWxzLW9ubHkiLCAwLCBOVUxMLCAn Zyd9LAogCQl7ImRibmFtZSIsIDEsIE5VTEwsICdkJ30sCiAJCXsiZXhpdC1vbi1lcnJvciIsIDAs IE5VTEwsICdlJ30sCiAJCXsiZXhjbHVkZS1zY2hlbWEiLCAxLCBOVUxMLCAnTid9LApAQCAtMTI4 LDYgKzE3NSw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQl7Im5vLXNlY3VyaXR5 LWxhYmVscyIsIG5vX2FyZ3VtZW50LCAmbm9fc2VjdXJpdHlfbGFiZWxzLCAxfSwKIAkJeyJuby1z dWJzY3JpcHRpb25zIiwgbm9fYXJndW1lbnQsICZub19zdWJzY3JpcHRpb25zLCAxfSwKIAkJeyJm aWx0ZXIiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgNH0sCisJCXsiZXhjbHVkZS1kYXRhYmFz ZSIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCA2fSwKIAogCQl7TlVMTCwgMCwgTlVMTCwgMH0K IAl9OwpAQCAtMTU2LDcgKzIwNCw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQl9 CiAJfQogCi0Jd2hpbGUgKChjID0gZ2V0b3B0X2xvbmcoYXJnYywgYXJndiwgImFjQ2Q6ZWY6Rjpo Okk6ajpsTDpuOk46T3A6UDpSc1M6dDpUOlU6dndXeDEiLAorCXdoaWxlICgoYyA9IGdldG9wdF9s b25nKGFyZ2MsIGFyZ3YsICJhQWNDZDplZjpGOmdoOkk6ajpsTDpuOk46T3A6UDpSc1M6dDpUOlU6 dndXeDEiLAogCQkJCQkJCWNtZG9wdHMsIE5VTEwpKSAhPSAtMSkKIAl7CiAJCXN3aXRjaCAoYykK QEAgLTE4MywxMSArMjMxLDE0IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQkJCWlm IChzdHJsZW4ob3B0YXJnKSAhPSAwKQogCQkJCQlvcHRzLT5mb3JtYXROYW1lID0gcGdfc3RyZHVw KG9wdGFyZyk7CiAJCQkJYnJlYWs7CisJCQljYXNlICdnJzoKKwkJCQkvKiByZXN0b3JlIG9ubHkg Z2xvYmFsLmRhdCBmaWxlIGZyb20gZGlyZWN0b3J5ICovCisJCQkJZ2xvYmFsc19vbmx5ID0gdHJ1 ZTsKKwkJCQlicmVhazsKIAkJCWNhc2UgJ2gnOgogCQkJCWlmIChzdHJsZW4ob3B0YXJnKSAhPSAw KQogCQkJCQlvcHRzLT5jcGFyYW1zLnBnaG9zdCA9IHBnX3N0cmR1cChvcHRhcmcpOwogCQkJCWJy ZWFrOwotCiAJCQljYXNlICdqJzoJCQkvKiBudW1iZXIgb2YgcmVzdG9yZSBqb2JzICovCiAJCQkJ aWYgKCFvcHRpb25fcGFyc2VfaW50KG9wdGFyZywgIi1qLy0tam9icyIsIDEsCiAJCQkJCQkJCQkg IFBHX01BWF9KT0JTLApAQCAtMzAyLDYgKzM1MywxMCBAQCBtYWluKGludCBhcmdjLCBjaGFyICoq YXJndikKIAkJCQkJZXhpdCgxKTsKIAkJCQlvcHRzLT5leGl0X29uX2Vycm9yID0gdHJ1ZTsKIAkJ CQlicmVhazsKKwkJCWNhc2UgNjoKKwkJCQkvKiBsaXN0IG9mIGRhdGFiYXNlcyBwYXR0ZXJucyB0 aG9zZSBuZWVkcyB0byBza2lwIHdoaWxlIHJlc3RvcmluZyAqLworCQkJCXNpbXBsZV9zdHJpbmdf bGlzdF9hcHBlbmQoJmRiX2V4Y2x1ZGVfcGF0dGVybnMsIG9wdGFyZyk7CisJCQkJYnJlYWs7CiAK IAkJCWRlZmF1bHQ6CiAJCQkJLyogZ2V0b3B0X2xvbmcgYWxyZWFkeSBlbWl0dGVkIGEgY29tcGxh aW50ICovCkBAIC0zMjksNiArMzg0LDEzIEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQog CWlmICghb3B0cy0+Y3BhcmFtcy5kYm5hbWUgJiYgIW9wdHMtPmZpbGVuYW1lICYmICFvcHRzLT50 b2NTdW1tYXJ5KQogCQlwZ19mYXRhbCgib25lIG9mIC1kLy0tZGJuYW1lIGFuZCAtZi8tLWZpbGUg bXVzdCBiZSBzcGVjaWZpZWQiKTsKIAorCWlmIChkYl9leGNsdWRlX3BhdHRlcm5zLmhlYWQgIT0g TlVMTCAmJiBnbG9iYWxzX29ubHkpCisJeworCQlwZ19sb2dfZXJyb3IoIm9wdGlvbiAtLWV4Y2x1 ZGUtZGF0YWJhc2UgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIgd2l0aCAtZy8tLWdsb2JhbHMtb25s eSIpOworCQlwZ19sb2dfZXJyb3JfaGludCgiVHJ5IFwiJXMgLS1oZWxwXCIgZm9yIG1vcmUgaW5m b3JtYXRpb24uIiwgcHJvZ25hbWUpOworCQlleGl0X25pY2VseSgxKTsKKwl9CisKIAkvKiBTaG91 bGQgZ2V0IGF0IG1vc3Qgb25lIG9mIC1kIGFuZCAtZiwgZWxzZSB1c2VyIGlzIGNvbmZ1c2VkICov CiAJaWYgKG9wdHMtPmNwYXJhbXMuZGJuYW1lKQogCXsKQEAgLTQwNCw2ICs0NjYsMTA2IEBAIG1h aW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQkJCQkgb3B0cy0+Zm9ybWF0TmFtZSk7CiAJfQog CisJLyoKKwkgKiBJZiB0b2MuZGF0IGZpbGUgZG9lcyBub3QgcHJlc2VudCBpbiBjdXJyZW50IHBh dGgsIHRoZW4gY2hlY2sgZm9yCisJICogZ2xvYmFsLmRhdC4gIElmIGdsb2JhbC5kYXQgZmlsZSBp cyBwcmVzZW50LCB0aGVuIHJlc3RvcmUgYWxsIHRoZQorCSAqIGRhdGFiYXNlcyBmcm9tIG1hcC5k YXQoaWYgZXhpc3QpIGZpbGUgbGlzdCBhbmQgc2tpcCByZXN0b3JpbmcgZm9yCisJICogLS1leGNs dWRlLWRhdGFiYXNlIHBhdHRlcm5zLgorCSAqLworCWlmIChpbnB1dEZpbGVTcGVjICE9IE5VTEwg JiYgIUlzRmlsZUV4aXN0c0luRGlyZWN0b3J5KGlucHV0RmlsZVNwZWMsICJ0b2MuZGF0IikpCisJ eworCQkvKiBJZiBnbG9iYWwuZGF0IGlzIGV4aXN0LCB0aGVuIHByb2Nlc3MgaXQuICovCisJCWlm IChJc0ZpbGVFeGlzdHNJbkRpcmVjdG9yeShwZ19zdHJkdXAoaW5wdXRGaWxlU3BlYyksICJnbG9i YWwuZGF0IikpCisJCXsKKwkJCVBHY29ubiAgKmNvbm4gPSBOVUxMOyAvKiBDb25uZWN0aW9uIHRv IHJlc3RvcmUgZ2xvYmFsIHNxbCBjb21tYW5kcy4gKi8KKwkJCWludCAgICAgZXhpdF9jb2RlID0g MDsKKworCQkJLyoKKwkJCSAqIFVzZXIgaXMgc3VnZ2VzdGVkIHRvIHVzZSBzaW5nbGUgZGF0YWJh c2UgZHVtcCBmb3IgLS1saXN0IG9wdGlvbi4KKwkJCSAqLworCQkJaWYgKG9wdHMtPnRvY1N1bW1h cnkpCisJCQkJcGdfZmF0YWwoIm9wdGlvbiAtbC8tLWxpc3QgY2Fubm90IGJlIHVzZWQgd2hlbiBy ZXN0b3JpbmcgbXVsdGlwbGUgZGF0YWJhc2VzIGJ5IGFyY2hpdmUgb2YgcGdfZHVtcGFsbCIpOwor CisJCQkvKgorCQkJICogVG8gcmVzdG9yZSBtdWx0aXBsZSBkYXRhYmFzZXMsIC1DIChjcmVhdGUg ZGF0YWJhc2UpIG9wdGlvbgorCQkJICogc2hvdWxkIGJlIHNwZWNpZmllZC4KKwkJCSAqIEV2ZW4g dGhlcmUgaXMgc2luZ2xlIGRhdGFiYXNlIGluIGR1bXAsIHJlcG9ydCBlcnJvciBiZWNhdXNlIGl0 CisJCQkgKiBtaWdodCBiZSBwb3NzaWJsZSB0aGF0IGRhdGFiYXNlIGhhc24ndCBjcmVhdGVkIHNv IGJldHRlciB3ZQorCQkJICogcmVwb3J0IGVycm9yLgorCQkJICovCisJCQlpZiAoIWdsb2JhbHNf b25seSAmJiBvcHRzLT5jcmVhdGVEQiAhPSAxKQorCQkJeworCQkJCXBnX2xvZ19lcnJvcigiLUMv LS1jcmVhdGUgb3B0aW9uIHNob3VsZCBiZSBzcGVjaWZpZWQgd2hlbiByZXN0b3JpbmcgbXVsdGlw bGUgZGF0YWJhc2VzIGJ5IGFyY2hpdmUgb2YgcGdfZHVtcGFsbCIpOworCQkJCXBnX2xvZ19lcnJv cl9oaW50KCJUcnkgXCIlcyAtLWhlbHBcIiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iLCBwcm9nbmFt ZSk7CisJCQkJcGdfbG9nX2Vycm9yX2hpbnQoIklmIGRiIGlzIGFscmVhZHkgY3JlYXRlZCBhbmQg ZHVtcCBoYXMgc2luZ2xlIGRiIGR1bXAsIHRoZW4gdXNlIHBhcnRpY3VsYXIgZHVtcCBmaWxlLiIp OworCQkJCWV4aXRfbmljZWx5KDEpOworCQkJfQorCisJCQkvKgorCQkJICogQ29ubmVjdCB0byBk YXRhYmFzZSB0byBleGVjdXRlIGdsb2JhbCBzcWwgY29tbWFuZHMgZnJvbQorCQkJICogZ2xvYmFs LmRhdCBmaWxlLgorCQkJICovCisJCQlpZiAob3B0cy0+Y3BhcmFtcy5kYm5hbWUpCisJCQl7CisJ CQkJY29ubiA9IGNvbm5lY3REYXRhYmFzZShvcHRzLT5jcGFyYW1zLmRibmFtZSwgTlVMTCwgb3B0 cy0+Y3BhcmFtcy5wZ2hvc3QsCisJCQkJCQkJCQkgICBvcHRzLT5jcGFyYW1zLnBncG9ydCwgb3B0 cy0+Y3BhcmFtcy51c2VybmFtZSwgVFJJX0RFRkFVTFQsCisJCQkJCQkJCQkgICBmYWxzZSwgcHJv Z25hbWUsIE5VTEwsIE5VTEwpOworCisJCQkJaWYgKCFjb25uKQorCQkJCQlwZ19mYXRhbCgiY291 bGQgbm90IGNvbm5lY3QgdG8gZGF0YWJhc2UgXCIlc1wiIiwgb3B0cy0+Y3BhcmFtcy5kYm5hbWUp OworCQkJfQorCisJCQkvKiBJZiBnbG9iYWxzLW9ubHksIHRoZW4gcmV0dXJuIGZyb20gaGVyZS4g Ki8KKwkJCWlmIChnbG9iYWxzX29ubHkpCisJCQl7CisJCQkJLyoKKwkJCQkgKiBPcGVuIGdsb2Jh bC5kYXQgZmlsZSBhbmQgZXhlY3V0ZS9hcHBlbmQgYWxsIHRoZSBnbG9iYWwgc3FsCisJCQkJICog Y29tbWFuZHMuCisJCQkJICovCisJCQkJcHJvY2Vzc19nbG9iYWxfc3FsX2NvbW1hbmRzKGNvbm4s IGlucHV0RmlsZVNwZWMsIG9wdHMtPmZpbGVuYW1lKTsKKworCQkJCWlmIChjb25uKQorCQkJCQlQ UWZpbmlzaChjb25uKTsKKworCQkJCXBnX2xvZ19pbmZvKCJkYXRhYmFzZXMgcmVzdG9yaW5nIGlz IHNraXBwZWQgYXMgLWcvLS1nbG9iYWxzLW9ubHkgb3B0aW9uIGlzIHNwZWNpZmllZCIpOworCQkJ fQorCQkJZWxzZQorCQkJeworCQkJCS8qIE5vdyByZXN0b3JlIGFsbCB0aGUgZGF0YWJhc2VzIGZy b20gbWFwLmRhdCBmaWxlLiAqLworCQkJCWV4aXRfY29kZSA9IHJlc3RvcmVBbGxEYXRhYmFzZXMo Y29ubiwgaW5wdXRGaWxlU3BlYywKKwkJCQkJCQkJCQkJCWRiX2V4Y2x1ZGVfcGF0dGVybnMsCisJ CQkJCQkJCQkJCQlvcHRzLAorCQkJCQkJCQkJCQkJbnVtV29ya2Vycyk7CisJCQl9CisKKwkJCS8q IEZyZWUgZGIgcGF0dGVybiBsaXN0LiAqLworCQkJc2ltcGxlX3N0cmluZ19mdWxsX2xpc3RfZGVs ZXRlKCZkYl9leGNsdWRlX3BhdHRlcm5zKTsKKworCQkJcmV0dXJuIGV4aXRfY29kZTsKKwkJfQor CX0KKworCWlmIChkYl9leGNsdWRlX3BhdHRlcm5zLmhlYWQgIT0gTlVMTCkKKwkJcGdfZmF0YWwo Im9wdGlvbiAtLWV4Y2x1ZGUtZGF0YWJhc2UgY2FuIGJlIHVzZWQgb25seSB3aGVuIHJlc3Rvcmlu ZyBtdWx0aXBsZSBkYXRhYmFzZXMgYnkgYXJjaGl2ZSBvZiBwZ19kdW1wYWxsIik7CisKKwlpZiAo Z2xvYmFsc19vbmx5KQorCQlwZ19mYXRhbCgib3B0aW9uIC1nLy0tZ2xvYmFscy1vbmx5IGNhbiBi ZSB1c2VkIG9ubHkgd2hlbiByZXN0b3JpbmcgbXVsdGlwbGUgZGF0YWJhc2VzIGJ5IGFyY2hpdmUg b2YgcGdfZHVtcGFsbCIpOworCisJcmV0dXJuIHJlc3RvcmVPbmVEYXRhYmFzZShpbnB1dEZpbGVT cGVjLCBvcHRzLCBudW1Xb3JrZXJzLCBmYWxzZSwgTlVMTCk7Cit9CisvKgorICogcmVzdG9yZU9u ZURhdGFiYXNlCisgKgorICogVGhpcyB3aWxsIHJlc3RvcmUgb25lIGRhdGFiYXNlIHVzaW5nIHRv Yy5kYXQgZmlsZS4KKyAqIGRibmFtZSBpcyB0aGUgY3VycmVudCB0byBiZSByZXN0b3JlZCBkYXRh YmFzZSBuYW1lLgorICovCitzdGF0aWMgaW50CityZXN0b3JlT25lRGF0YWJhc2UoY29uc3QgY2hh ciAqaW5wdXRGaWxlU3BlYywgUmVzdG9yZU9wdGlvbnMgKm9wdHMsCisJCQkJICAgaW50IG51bVdv cmtlcnMsIGJvb2wgYXBwZW5kX2RhdGEsIGNvbnN0IGNoYXIgKmRibmFtZSkKK3sKKwlBcmNoaXZl CQkqQUg7CisJaW50CQkJZXhpdF9jb2RlOworCiAJQUggPSBPcGVuQXJjaGl2ZShpbnB1dEZpbGVT cGVjLCBvcHRzLT5mb3JtYXQpOwogCiAJU2V0QXJjaGl2ZU9wdGlvbnMoQUgsIE5VTEwsIG9wdHMp OwpAQCAtNDI5LDExICs1OTEsMTEgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJQUgt Pm51bVdvcmtlcnMgPSBudW1Xb3JrZXJzOwogCiAJaWYgKG9wdHMtPnRvY1N1bW1hcnkpCi0JCVBy aW50VE9DU3VtbWFyeShBSCk7CisJCVByaW50VE9DU3VtbWFyeShBSCwgYXBwZW5kX2RhdGEpOwog CWVsc2UKIAl7CiAJCVByb2Nlc3NBcmNoaXZlUmVzdG9yZU9wdGlvbnMoQUgpOwotCQlSZXN0b3Jl QXJjaGl2ZShBSCk7CisJCVJlc3RvcmVBcmNoaXZlKEFILCBhcHBlbmRfZGF0YSk7CiAJfQogCiAJ LyogZG9uZSwgcHJpbnQgYSBzdW1tYXJ5IG9mIGlnbm9yZWQgZXJyb3JzICovCkBAIC00NTEsNyAr NjEzLDggQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiBzdGF0aWMgdm9pZAogdXNhZ2Uo Y29uc3QgY2hhciAqcHJvZ25hbWUpCiB7Ci0JcHJpbnRmKF8oIiVzIHJlc3RvcmVzIGEgUG9zdGdy ZVNRTCBkYXRhYmFzZSBmcm9tIGFuIGFyY2hpdmUgY3JlYXRlZCBieSBwZ19kdW1wLlxuXG4iKSwg cHJvZ25hbWUpOworCXByaW50ZihfKCIlcyByZXN0b3JlcyBhIFBvc3RncmVTUUwgZGF0YWJhc2Ug ZnJvbSBhbiBhcmNoaXZlIGNyZWF0ZWQgYnkgcGdfZHVtcC5cbiIKKwkJCQkiSWYgYXJjaGl2ZSBp cyBjcmVhdGVkIGJ5IHBnX2R1bXBhbGwsIHRoZW4gcmVzdG9yZXMgbXVsdGlwbGUgZGF0YWJhc2Vz IGFsc28uIFxuXG4iKSwgcHJvZ25hbWUpOwogCXByaW50ZihfKCJVc2FnZTpcbiIpKTsKIAlwcmlu dGYoXygiICAlcyBbT1BUSU9OXS4uLiBbRklMRV1cbiIpLCBwcm9nbmFtZSk7CiAKQEAgLTQ2OSw2 ICs2MzIsNyBAQCB1c2FnZShjb25zdCBjaGFyICpwcm9nbmFtZSkKIAlwcmludGYoXygiICAtYywg LS1jbGVhbiAgICAgICAgICAgICAgICAgIGNsZWFuIChkcm9wKSBkYXRhYmFzZSBvYmplY3RzIGJl Zm9yZSByZWNyZWF0aW5nXG4iKSk7CiAJcHJpbnRmKF8oIiAgLUMsIC0tY3JlYXRlICAgICAgICAg ICAgICAgICBjcmVhdGUgdGhlIHRhcmdldCBkYXRhYmFzZVxuIikpOwogCXByaW50ZihfKCIgIC1l LCAtLWV4aXQtb24tZXJyb3IgICAgICAgICAgZXhpdCBvbiBlcnJvciwgZGVmYXVsdCBpcyB0byBj b250aW51ZVxuIikpOworCXByaW50ZihfKCIgIC1nLCAtLWdsb2JhbHMtb25seSAgICAgICAgICAg cmVzdG9yZSBvbmx5IGdsb2JhbCBvYmplY3RzLCBubyBkYXRhYmFzZXNcbiIpKTsKIAlwcmludGYo XygiICAtSSwgLS1pbmRleD1OQU1FICAgICAgICAgICAgIHJlc3RvcmUgbmFtZWQgaW5kZXhcbiIp KTsKIAlwcmludGYoXygiICAtaiwgLS1qb2JzPU5VTSAgICAgICAgICAgICAgIHVzZSB0aGlzIG1h bnkgcGFyYWxsZWwgam9icyB0byByZXN0b3JlXG4iKSk7CiAJcHJpbnRmKF8oIiAgLUwsIC0tdXNl LWxpc3Q9RklMRU5BTUUgICAgICB1c2UgdGFibGUgb2YgY29udGVudHMgZnJvbSB0aGlzIGZpbGUg Zm9yXG4iCkBAIC00ODEsNiArNjQ1LDcgQEAgdXNhZ2UoY29uc3QgY2hhciAqcHJvZ25hbWUpCiAJ cHJpbnRmKF8oIiAgLVMsIC0tc3VwZXJ1c2VyPU5BTUUgICAgICAgICBzdXBlcnVzZXIgdXNlciBu YW1lIHRvIHVzZSBmb3IgZGlzYWJsaW5nIHRyaWdnZXJzXG4iKSk7CiAJcHJpbnRmKF8oIiAgLXQs IC0tdGFibGU9TkFNRSAgICAgICAgICAgICByZXN0b3JlIG5hbWVkIHJlbGF0aW9uICh0YWJsZSwg dmlldywgZXRjLilcbiIpKTsKIAlwcmludGYoXygiICAtVCwgLS10cmlnZ2VyPU5BTUUgICAgICAg ICAgIHJlc3RvcmUgbmFtZWQgdHJpZ2dlclxuIikpOworCXByaW50ZihfKCIgIC0tZXhjbHVkZS1k YXRhYmFzZT1QQVRURVJOICAgZXhjbHVkZSBkYXRhYmFzZXMgd2hvc2UgbmFtZSBtYXRjaGVzIHdp dGggcGF0dGVyblxuIikpOwogCXByaW50ZihfKCIgIC14LCAtLW5vLXByaXZpbGVnZXMgICAgICAg ICAgc2tpcCByZXN0b3JhdGlvbiBvZiBhY2Nlc3MgcHJpdmlsZWdlcyAoZ3JhbnQvcmV2b2tlKVxu IikpOwogCXByaW50ZihfKCIgIC0xLCAtLXNpbmdsZS10cmFuc2FjdGlvbiAgICAgcmVzdG9yZSBh cyBhIHNpbmdsZSB0cmFuc2FjdGlvblxuIikpOwogCXByaW50ZihfKCIgIC0tZGlzYWJsZS10cmln Z2VycyAgICAgICAgICAgZGlzYWJsZSB0cmlnZ2VycyBkdXJpbmcgZGF0YS1vbmx5IHJlc3RvcmVc biIpKTsKQEAgLTUxMyw4ICs2NzgsOCBAQCB1c2FnZShjb25zdCBjaGFyICpwcm9nbmFtZSkKIAlw cmludGYoXygiICAtLXJvbGU9Uk9MRU5BTUUgICAgICAgICAgZG8gU0VUIFJPTEUgYmVmb3JlIHJl c3RvcmVcbiIpKTsKIAogCXByaW50ZihfKCJcbiIKLQkJCSAiVGhlIG9wdGlvbnMgLUksIC1uLCAt TiwgLVAsIC10LCAtVCwgYW5kIC0tc2VjdGlvbiBjYW4gYmUgY29tYmluZWQgYW5kIHNwZWNpZmll ZFxuIgotCQkJICJtdWx0aXBsZSB0aW1lcyB0byBzZWxlY3QgbXVsdGlwbGUgb2JqZWN0cy5cbiIp KTsKKwkJCSAiVGhlIG9wdGlvbnMgLUksIC1uLCAtTiwgLVAsIC10LCAtVCwgLS1zZWN0aW9uLCBh bmQgLS1leGNsdWRlLWRhdGFiYXNlIGNhbiBiZSBjb21iaW5lZFxuIgorCQkJICJhbmQgc3BlY2lm aWVkIG11bHRpcGxlIHRpbWVzIHRvIHNlbGVjdCBtdWx0aXBsZSBvYmplY3RzLlxuIikpOwogCXBy aW50ZihfKCJcbklmIG5vIGlucHV0IGZpbGUgbmFtZSBpcyBzdXBwbGllZCwgdGhlbiBzdGFuZGFy ZCBpbnB1dCBpcyB1c2VkLlxuXG4iKSk7CiAJcHJpbnRmKF8oIlJlcG9ydCBidWdzIHRvIDwlcz4u XG4iKSwgUEFDS0FHRV9CVUdSRVBPUlQpOwogCXByaW50ZihfKCIlcyBob21lIHBhZ2U6IDwlcz5c biIpLCBQQUNLQUdFX05BTUUsIFBBQ0tBR0VfVVJMKTsKQEAgLTYxOSwzICs3ODQsNjQ1IEBAIHJl YWRfcmVzdG9yZV9maWx0ZXJzKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBSZXN0b3JlT3B0aW9ucyAq b3B0cykKIAogCWZpbHRlcl9mcmVlKCZmc3RhdGUpOwogfQorCisvKgorICogSXNGaWxlRXhpc3Rz SW5EaXJlY3RvcnkKKyAqCisgKiBSZXR1cm5zIHRydWUgaWYgZmlsZSBleGlzdCBpbiBjdXJyZW50 IGRpcmVjdG9yeS4KKyAqLworc3RhdGljIGJvb2wKK0lzRmlsZUV4aXN0c0luRGlyZWN0b3J5KGNv bnN0IGNoYXIgKmRpciwgY29uc3QgY2hhciAqZmlsZW5hbWUpCit7CisJc3RydWN0IHN0YXQJCQlz dDsKKwljaGFyCQkJCWJ1ZltNQVhQR1BBVEhdOworCisJaWYgKHNucHJpbnRmKGJ1ZiwgTUFYUEdQ QVRILCAiJXMvJXMiLCBkaXIsIGZpbGVuYW1lKSA+PSBNQVhQR1BBVEgpCisJCXBnX2ZhdGFsKCJk aXJlY3RvcnkgbmFtZSB0b28gbG9uZzogXCIlc1wiIiwgZGlyKTsKKworCXJldHVybiAoc3RhdChi dWYsICZzdCkgPT0gMCAmJiBTX0lTUkVHKHN0LnN0X21vZGUpKTsKK30KKworLyoKKyAqIFJlYWRP bmVTdGF0ZW1lbnQKKyAqCisgKiBUaGlzIHdpbGwgc3RhcnQgcmVhZGluZyBmcm9tIHBhc3NlZCBm aWxlIHBvaW50ZXIgdXNpbmcgZmdldGMgYW5kIHJlYWQgdGlsbAorICogc2VtaWNvbG9uKHNxbCBz dGF0ZW1lbnQgdGVybWluYXRvciBmb3IgZ2xvYmFsLmRhdCBmaWxlKQorICoKKyAqIEVPRiBpcyBy ZXR1cm5lZCBpZiBlbmQtb2YtZmlsZSBpbnB1dCBpcyBzZWVuOyB0aW1lIHRvIHNodXQgZG93bi4K KyAqLworCitzdGF0aWMgaW50CitSZWFkT25lU3RhdGVtZW50KFN0cmluZ0luZm8gaW5CdWYsIEZJ TEUgKnBmaWxlKQoreworCWludAkJCWM7IC8qIGNoYXJhY3RlciByZWFkIGZyb20gZ2V0YygpICov CisJaW50CQkJbTsKKworCVN0cmluZ0luZm9EYXRhCXE7CisJaW5pdFN0cmluZ0luZm8oJnEpOwor CisJcmVzZXRTdHJpbmdJbmZvKGluQnVmKTsKKworCS8qCisJICogUmVhZCBjaGFyYWN0ZXJzIHVu dGlsIEVPRiBvciB0aGUgYXBwcm9wcmlhdGUgZGVsaW1pdGVyIGlzIHNlZW4uCisJICovCisJd2hp bGUgKChjID0gZmdldGMocGZpbGUpKSAhPSBFT0YpCisJeworCQlpZiAoYyAhPSAnXCcnICYmIGMg IT0gJyInICYmIGMgIT0gJ1xuJyAmJiBjICE9ICc7JykKKwkJeworCQkJYXBwZW5kU3RyaW5nSW5m b0NoYXIoaW5CdWYsIChjaGFyKSBjKTsKKwkJCXdoaWxlICgoYyA9IGZnZXRjKHBmaWxlKSkgIT0g RU9GKQorCQkJeworCQkJCWlmIChjICE9ICdcJycgJiYgYyAhPSAnIicgJiYgYyAhPSAnOycgJiYg YyAhPSAnXG4nKQorCQkJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihpbkJ1ZiwgKGNoYXIpIGMpOwor CQkJCWVsc2UKKwkJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQlpZiAoYyA9PSAnXCcnIHx8IGMg PT0gJyInKQorCQl7CisJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcigmcSwgKGNoYXIpIGMpOworCQkJ bSA9IGM7CisKKwkJCXdoaWxlICgoYyA9IGZnZXRjKHBmaWxlKSkgIT0gRU9GKQorCQkJeworCQkJ CWFwcGVuZFN0cmluZ0luZm9DaGFyKCZxLCAoY2hhcikgYyk7CisKKwkJCQlpZihjID09IG0pCisJ CQkJeworCQkJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGluQnVmLCBxLmRhdGEpOworCQkJCQly ZXNldFN0cmluZ0luZm8oJnEpOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCX0KKworCQlp ZiAoYyA9PSAnOycpCisJCXsKKwkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGluQnVmLCAoY2hhcikg JzsnKTsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKGMgPT0gJ1xuJykKKwkJCWFwcGVuZFN0cmlu Z0luZm9DaGFyKGluQnVmLCAoY2hhcikgJ1xuJyk7CisJfQorCisJLyogTm8gaW5wdXQgYmVmb3Jl IEVPRiBzaWduYWwgbWVhbnMgdGltZSB0byBxdWl0LiAqLworCWlmIChjID09IEVPRiAmJiBpbkJ1 Zi0+bGVuID09IDApCisJCXJldHVybiBFT0Y7CisKKwkvKiBBZGQgJ1wwJyB0byBtYWtlIGl0IGxv b2sgdGhlIHNhbWUgYXMgbWVzc2FnZSBjYXNlLiAqLworCWFwcGVuZFN0cmluZ0luZm9DaGFyKGlu QnVmLCAoY2hhcikgJ1wwJyk7CisKKwlyZXR1cm4gJ1EnOworfQorCisvKgorICogZ2V0X2RibmFt ZXNfbGlzdF90b19yZXN0b3JlCisgKgorICogVGhpcyB3aWxsIHJlbW92ZSBlbnRyaWVzIGZyb20g ZGJuYW1lX29pZF9saXN0IHRoYXQgcGF0dGVybiBtYXRjaGluZyBhbnkKKyAqIGluIHRoZSBkYl9l eGNsdWRlX3BhdHRlcm5zIGxpc3QuICBkYm5hbWVfb2lkX2xpc3QgbWF5YmUgaW5wbGFjZSBtb2Rp ZmllZC4KKyAqCisgKiByZXR1cm5zLCBudW1iZXIgb2YgZGF0YWJhc2Ugd2lsbCBiZSByZXN0b3Jl ZC4KKyAqCisgKi8KK3N0YXRpYyBpbnQKK2dldF9kYm5hbWVzX2xpc3RfdG9fcmVzdG9yZShQR2Nv bm4gKmNvbm4sCisJCVNpbXBsZURhdGFiYXNlT2lkTGlzdCAqZGJuYW1lX29pZF9saXN0LAorCQlT aW1wbGVTdHJpbmdMaXN0IGRiX2V4Y2x1ZGVfcGF0dGVybnMpCit7CisJU2ltcGxlRGF0YWJhc2VP aWRMaXN0Q2VsbAkqZGJvaWRfY2VsbCA9IGRibmFtZV9vaWRfbGlzdC0+aGVhZDsKKwlTaW1wbGVE YXRhYmFzZU9pZExpc3RDZWxsCSpkYm9pZHByZWNlbGwgPSBOVUxMOworCWludAkJCQkJCQljb3Vu dF9kYiA9IDA7CisJUFFFeHBCdWZmZXIgcXVlcnk7CisJUEdyZXN1bHQgICAqcmVzOworCisJLyog UmV0dXJuIDAgaWYgdGhlcmUgaXMgbm8gZGF0YWJhc2UgdG8gcmVzdG9yZS4gKi8KKwlpZiAoZGJv aWRfY2VsbCA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKworCXF1ZXJ5ID0gY3JlYXRlUFFFeHBCdWZm ZXIoKTsKKworCWlmICghY29ubikKKwkJcGdfbG9nX2luZm8oImNvbnNpZGVyaW5nIFBBVFRFUk4g YXMgTkFNRSBmb3IgLS1leGNsdWRlLWRhdGFiYXNlIG9wdGlvbiBhcyBubyBkYiBjb25uZWN0aW9u IHdoaWxlIGRvaW5nIHBnX3Jlc3RvcmUuIik7CisKKwkvKgorCSAqIFByb2Nlc3Mgb25lIGJ5IG9u ZSBhbGwgZGJuYW1lcyBhbmQgaWYgc3BlY2lmaWVkIHRvIHNraXAgcmVzdG9yaW5nLCB0aGVuCisJ ICogcmVtb3ZlIGRibmFtZSBmcm9tIGxpc3QuCisJICovCisJd2hpbGUgKGRib2lkX2NlbGwgIT0g TlVMTCkKKwl7CisJCWJvb2wJCQkJCQlza2lwX2RiX3Jlc3RvcmUgPSBmYWxzZTsKKwkJU2ltcGxl RGF0YWJhc2VPaWRMaXN0Q2VsbAkqbmV4dCA9IGRib2lkX2NlbGwtPm5leHQ7CisKKwkJZm9yIChT aW1wbGVTdHJpbmdMaXN0Q2VsbCAqY2VsbGRiID0gZGJfZXhjbHVkZV9wYXR0ZXJucy5oZWFkOyBj ZWxsZGI7IGNlbGxkYiA9IGNlbGxkYi0+bmV4dCkKKwkJeworCQkJLyoKKwkJCSAqIHRoZSBjb25z dHJ1Y3QgcGF0dGVybiBtYXRjaGluZyBxdWVyeToKKwkJCSAqIFNFTEVDVCAxIFdIRVJFIFhYWCBP UEVSQVRPUihwZ19jYXRhbG9nLn4pICdeKFBBVFRFUk4pJCcgQ09MTEFURQorCQkJICogcGdfY2F0 YWxvZy5kZWZhdWx0CisJCQkgKgorCQkJICogWFhYIHJlcHJlc2VudHMgdGhlIHN0cmluZyBsaXRl cmFsIGRhdGFiYXNlIG5hbWUgZGVyaXZlZCBmcm9tIHRoZQorCQkJICogZGJuYW1lX29pZF9saXN0 LCB3aGljaCBpcyBpbml0aWFsbHkgZXh0cmFjdGVkIGZyb20gdGhlIG1hcC5kYXQKKwkJCSAqIGZp bGUgbG9jYXRlZCBpbiB0aGUgYmFja3VwIGRpcmVjdG9yeS4gIHRoYXQncyB3aHkgd2UgbmVlZAor CQkJICogcXVvdGVfbGl0ZXJhbF9jc3RyLgorCQkJICoKKwkJCSAqIElmIG5vIGRiIGNvbm5lY3Rp b24sIHRoZW4gY29uc2lkZXIgUEFUVEVSTiBhcyBOQU1FLgorCQkJICovCisJCQlpZiAocGdfc3Ry Y2FzZWNtcChkYm9pZF9jZWxsLT5kYl9uYW1lLCBjZWxsZGItPnZhbCkgPT0gMCkKKwkJCSAgIHNr aXBfZGJfcmVzdG9yZSA9IHRydWU7CisJCQllbHNlIGlmIChjb25uKQorCQkJeworCQkJCWludAlk b3RjbnQ7CisKKwkJCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihxdWVyeSwgIlNFTEVDVCAxICIpOwor CQkJCXByb2Nlc3NTUUxOYW1lUGF0dGVybihjb25uLCBxdWVyeSwgY2VsbGRiLT52YWwsIGZhbHNl LAorCQkJCQkJCQkJICBmYWxzZSwgTlVMTCwgcXVvdGVfbGl0ZXJhbF9jc3RyKGRib2lkX2NlbGwt PmRiX25hbWUpLAorCQkJCQkJCQkJICBOVUxMLCBOVUxMLCBOVUxMLCAmZG90Y250KTsKKworCQkJ CWlmIChkb3RjbnQgPiAwKQorCQkJCXsKKwkJCQkJcGdfbG9nX2Vycm9yKCJpbXByb3BlciBxdWFs aWZpZWQgbmFtZSAodG9vIG1hbnkgZG90dGVkIG5hbWVzKTogJXMiLAorCQkJCQkJCQkgIGNlbGxk Yi0+dmFsKTsKKwkJCQkJUFFmaW5pc2goY29ubik7CisJCQkJCWV4aXRfbmljZWx5KDEpOworCQkJ CX0KKworCQkJCXJlcyA9IGV4ZWN1dGVRdWVyeShjb25uLCBxdWVyeS0+ZGF0YSk7CisKKwkJCQlp ZiAoKFBRcmVzdWx0U3RhdHVzKHJlcykgPT0gUEdSRVNfVFVQTEVTX09LKSAmJiBQUW50dXBsZXMo cmVzKSkKKwkJCQl7CisJCQkJCXNraXBfZGJfcmVzdG9yZSA9IHRydWU7CisJCQkJCXBnX2xvZ19p bmZvKCJkYXRhYmFzZSBcIiVzXCIgaXMgbWF0Y2hpbmcgd2l0aCBleGNsdWRlIHBhdHRlcm46IFwi JXNcIiIsIGRib2lkX2NlbGwtPmRiX25hbWUsIGNlbGxkYi0+dmFsKTsKKwkJCQl9CisKKwkJCQlQ UWNsZWFyKHJlcyk7CisJCQkJcmVzZXRQUUV4cEJ1ZmZlcihxdWVyeSk7CisJCQl9CisKKwkJCWlm IChza2lwX2RiX3Jlc3RvcmUpCisJCQkJYnJlYWs7CisJCX0KKworCQkvKiBJbmNyZW1lbnQgY291 bnQgaWYgZGF0YWJhc2UgbmVlZHMgdG8gYmUgcmVzdG9yZWQuICovCisJCWlmIChza2lwX2RiX3Jl c3RvcmUpCisJCXsKKwkJCXBnX2xvZ19pbmZvKCJleGNsdWRpbmcgZGF0YWJhc2UgXCIlc1wiIiwg ZGJvaWRfY2VsbC0+ZGJfbmFtZSk7CisJCQlzaW1wbGVfZGJfb2lkX2xpc3RfZGVsZXRlKGRibmFt ZV9vaWRfbGlzdCwgZGJvaWRfY2VsbCwgZGJvaWRwcmVjZWxsKTsKKwkJfQorCQllbHNlCisJCXsK KwkJCWNvdW50X2RiKys7CisJCQlkYm9pZHByZWNlbGwgPSBkYm9pZF9jZWxsOworCQl9CisKKwkJ LyogUHJvY2VzcyBuZXh0IGRibmFtZSBmcm9tIGRibmFtZSBsaXN0LiAqLworCQlkYm9pZF9jZWxs ID0gbmV4dDsKKwl9CisKKwlyZXR1cm4gY291bnRfZGI7Cit9CisKKy8qCisgKiBnZXRfZGJuYW1l X29pZF9saXN0X2Zyb21fbWZpbGUKKyAqCisgKiBPcGVuIG1hcC5kYXQgZmlsZSBhbmQgcmVhZCBs aW5lIGJ5IGxpbmUgYW5kIHRoZW4gcHJlcGFyZSBhIGxpc3Qgb2YgZGF0YWJhc2UKKyAqIG5hbWVz IGFuZCBjb3JyZXNwb25kaW5nIGRiX29pZC4KKyAqCisgKiBSZXR1cm5zLCB0b3RhbCBudW1iZXIg b2YgZGF0YWJhc2UgbmFtZXMgaW4gbWFwLmRhdCBmaWxlLgorICovCitzdGF0aWMgaW50CitnZXRf ZGJuYW1lX29pZF9saXN0X2Zyb21fbWZpbGUoY29uc3QgY2hhciAqZHVtcGRpcnBhdGgsIFNpbXBs ZURhdGFiYXNlT2lkTGlzdCAqZGJuYW1lX29pZF9saXN0KQoreworCUZJTEUgICAgKnBmaWxlOwor CWNoYXIgICAgbWFwX2ZpbGVfcGF0aFtNQVhQR1BBVEhdOworCWNoYXIgICAgbGluZVtNQVhQR1BB VEhdOworCWludCAgICAgY291bnQgPSAwOworCisJLyoKKwkgKiBJZiB0aGVyZSBpcyBvbmx5IGds b2JhbC5kYXQgZmlsZSBpbiBkdW1wLCB0aGVuIHJldHVybiBmcm9tIGhlcmUgYXMgdGhlcmUKKwkg KiBpcyBubyBkYXRhYmFzZSB0byByZXN0b3JlLgorCSAqLworCWlmICghSXNGaWxlRXhpc3RzSW5E aXJlY3RvcnkocGdfc3RyZHVwKGR1bXBkaXJwYXRoKSwgIm1hcC5kYXQiKSkKKwl7CisJCXBnX2xv Z19pbmZvKCJkYXRhYmFzZXMgcmVzdG9yaW5nIGlzIHNraXBwZWQgYXMgbWFwLmRhdCBmaWxlIGlz IG5vdCBwcmVzZW50IGluIFwiJXNcIiIsIGR1bXBkaXJwYXRoKTsKKwkJcmV0dXJuIDA7CisJfQor CisJc25wcmludGYobWFwX2ZpbGVfcGF0aCwgTUFYUEdQQVRILCAiJXMvbWFwLmRhdCIsIGR1bXBk aXJwYXRoKTsKKworCS8qIE9wZW4gbWFwLmRhdCBmaWxlLiAqLworCXBmaWxlID0gZm9wZW4obWFw X2ZpbGVfcGF0aCwgUEdfQklOQVJZX1IpOworCisJaWYgKHBmaWxlID09IE5VTEwpCisJCXBnX2Zh dGFsKCJjb3VsZCBub3Qgb3BlbiBtYXAuZGF0IGZpbGU6IFwiJXNcIiIsIG1hcF9maWxlX3BhdGgp OworCisJLyogQXBwZW5kIGFsbCB0aGUgZGJuYW1lIGFuZCBkYl9vaWQgdG8gdGhlIGxpc3QuICov CisJd2hpbGUoKGZnZXRzKGxpbmUsIE1BWFBHUEFUSCwgcGZpbGUpKSAhPSBOVUxMKQorCXsKKwkJ T2lkICAgICAgICAgZGJfb2lkID0gSW52YWxpZE9pZDsKKwkJY2hhcgkJZGJfb2lkX3N0cltNQVhQ R1BBVEggKyAxXSA9IHsnXDAnfTsKKwkJY2hhciAgICAgICAgZGJuYW1lW01BWFBHUEFUSCArIDFd ID0geydcMCd9OworCisJCS8qIEV4dHJhY3QgZGJvaWQuICovCisJCXNzY2FuZihsaW5lLCAiJXUi ICwgJmRiX29pZCk7CisJCXNzY2FuZihsaW5lLCAiJXMiICwgZGJfb2lkX3N0cik7CisKKwkJLyog Tm93IGNvcHkgZGJuYW1lLiAqLworCQlzdHJjcHkoZGJuYW1lLCBsaW5lICsgc3RybGVuKGRiX29p ZF9zdHIpICsgMSk7CisKKwkJLyogUmVtb3ZlIFxuIGZyb20gZGJhbm1lLiAqLworCQlkYm5hbWVb c3RybGVuKGRibmFtZSkgLSAxXSA9ICdcMCc7CisKKwkJcGdfbG9nX2luZm8oImZvdW5kIGRhdGFi YXNlIFwiJXNcIiAoT0lEOiAldSkgaW4gbWFwLmRhdCBmaWxlIHdoaWxlIHJlc3RvcmluZy4iLCBk Ym5hbWUsIGRiX29pZCk7CisKKwkJLyogUmVwb3J0IGVycm9yIGFuZCBleGl0IGlmIHRoZSBmaWxl IGhhcyBhbnkgY29ycnVwdGVkIGRhdGEuICovCisJCWlmICghT2lkSXNWYWxpZChkYl9vaWQpIHx8 IHN0cmxlbihkYm5hbWUpID09IDApCisJCQlwZ19mYXRhbCgiaW52YWxpZCBlbnRyeSBpbiBtYXAu ZGF0IGZpbGUgYXQgbGluZSA6ICVkIiwgY291bnQgKyAxKTsKKworCQkvKgorCQkgKiBYWFggOiBi ZWZvcmUgYWRkaW5nIGRibmFtZSBpbnRvIGxpc3QsIHdlIGNhbiB2ZXJpZnkgdGhhdCB0aGlzIGRi CisJCSAqIG5lZWRzIHRvIHNraXBwZWQgZm9yIHJlc3RvcmUgb3Igbm90IGJ1dCBhcyBvZiBub3cs IHdlIGFyZSBtYWtpbmcKKwkJICogYSBsaXN0IG9mIGFsbCB0aGUgZGF0YWJhc2VzLgorCQkgKi8K KwkJc2ltcGxlX2RiX29pZF9saXN0X2FwcGVuZChkYm5hbWVfb2lkX2xpc3QsIGRiX29pZCwgZGJu YW1lKTsKKwkJY291bnQrKzsKKwl9CisKKwkvKiBDbG9zZSBtYXAuZGF0IGZpbGUuICovCisJZmNs b3NlKHBmaWxlKTsKKworCXJldHVybiBjb3VudDsKK30KKworLyoKKyAqIHJlc3RvcmVBbGxEYXRh YmFzZXMKKyAqCisgKiBUaGlzIHdpbGwgcmVzdG9yZSBkYXRhYmFzZXMgdGhvc2UgZHVtcHMgYXJl IHByZXNlbnQgaW4KKyAqIGRpcmVjdG9yeSBiYXNlZCBvbiBtYXAuZGF0IGZpbGUgbWFwcGluZy4K KyAqCisgKiBUaGlzIHdpbGwgc2tpcCByZXN0b3JpbmcgZm9yIGRhdGFiYXNlcyB0aGF0IGFyZSBz cGVjaWZpZWQgd2l0aAorICogZXhjbHVkZS1kYXRhYmFzZSBvcHRpb24uCisgKi8KK3N0YXRpYyBp bnQKK3Jlc3RvcmVBbGxEYXRhYmFzZXMoUEdjb25uICpjb25uLCBjb25zdCBjaGFyICpkdW1wZGly cGF0aCwKKwkJCQkJU2ltcGxlU3RyaW5nTGlzdCBkYl9leGNsdWRlX3BhdHRlcm5zLCBSZXN0b3Jl T3B0aW9ucyAqb3B0cywKKwkJCQkJaW50IG51bVdvcmtlcnMpCit7CisJU2ltcGxlRGF0YWJhc2VP aWRMaXN0CQkJZGJuYW1lX29pZF9saXN0ID0ge05VTEwsIE5VTEx9OworCVNpbXBsZURhdGFiYXNl T2lkTGlzdENlbGwJCSpkYm9pZF9jZWxsOworCWludAkJCQkJCQkJZXhpdF9jb2RlID0gMDsKKwlp bnQJCQkJCQkJCW51bV9kYl9yZXN0b3JlID0gMDsKKwlpbnQJCQkJCQkJCW51bV90b3RhbF9kYjsK KworCW51bV90b3RhbF9kYiA9IGdldF9kYm5hbWVfb2lkX2xpc3RfZnJvbV9tZmlsZShkdW1wZGly cGF0aCwgJmRibmFtZV9vaWRfbGlzdCk7CisKKwkvKgorCSAqIElmIG1hcC5kYXQgaGFzIG5vIGVu dHJ5LCByZXR1cm4gZnJvbSBoZXJlIGFmdGVyIHByb2Nlc3NpbmcKKwkgKiBnbG9iYWwuZGF0IGZp bGUuCisJICovCisJaWYgKGRibmFtZV9vaWRfbGlzdC5oZWFkID09IE5VTEwpCisJeworCQlwcm9j ZXNzX2dsb2JhbF9zcWxfY29tbWFuZHMoY29ubiwgZHVtcGRpcnBhdGgsIG9wdHMtPmZpbGVuYW1l KTsKKwkJcmV0dXJuIDA7CisJfQorCisJcGdfbG9nX2luZm8oImZvdW5kIHRvdGFsICVkIGRhdGFi YXNlIG5hbWVzIGluIG1hcC5kYXQgZmlsZSIsIG51bV90b3RhbF9kYik7CisKKwlpZiAoIWNvbm4p CisJeworCQlwZ19sb2dfaW5mbygidHJ5aW5nIHRvIGNvbm5lY3QgZGF0YWJhc2UgXCJwb3N0Z3Jl c1wiICB0byBkdW1wIGludG8gb3V0IGZpbGUiKTsKKworCQljb25uID0gY29ubmVjdERhdGFiYXNl KCJwb3N0Z3JlcyIsIE5VTEwsIG9wdHMtPmNwYXJhbXMucGdob3N0LAorCQkJCQkJCSAgIG9wdHMt PmNwYXJhbXMucGdwb3J0LCBvcHRzLT5jcGFyYW1zLnVzZXJuYW1lLCBUUklfREVGQVVMVCwKKwkJ CQkJCQkgICBmYWxzZSwgcHJvZ25hbWUsIE5VTEwsIE5VTEwpOworCisJCS8qIFRyeSB3aXRoIHRl bXBsYXRlMS4gKi8KKwkJaWYgKCFjb25uKQorCQl7CisJCQlwZ19sb2dfaW5mbygidHJ5aW5nIHRv IGNvbm5lY3QgZGF0YWJhc2UgXCJ0ZW1wbGF0ZTFcIiBhcyBmYWlsZWQgdG8gY29ubmVjdCB0byBk YXRhYmFzZSBcInBvc3RncmVzXCIgdG8gZHVtcCBpbnRvIG91dCBmaWxlIik7CisKKwkJCWNvbm4g PSBjb25uZWN0RGF0YWJhc2UoInRlbXBsYXRlMSIsIE5VTEwsIG9wdHMtPmNwYXJhbXMucGdob3N0 LAorCQkJCQkJCQkgICBvcHRzLT5jcGFyYW1zLnBncG9ydCwgb3B0cy0+Y3BhcmFtcy51c2VybmFt ZSwgVFJJX0RFRkFVTFQsCisJCQkJCQkJCSAgIGZhbHNlLCBwcm9nbmFtZSwgTlVMTCwgTlVMTCk7 CisKKwkJfQorCX0KKworCS8qCisJICogcHJvY2Vzc2luZyBwZ19yZXRzb3JlIC0tZXhjbHVkZS1k YXRhYmFzZT1QQVRURVJOL05BTUUgaWYgbm8gY29ubmVjdGlvbi4KKwkgKi8KKwludW1fZGJfcmVz dG9yZSA9IGdldF9kYm5hbWVzX2xpc3RfdG9fcmVzdG9yZShjb25uLCAmZGJuYW1lX29pZF9saXN0 LAorCQkJZGJfZXhjbHVkZV9wYXR0ZXJucyk7CisKKwkvKiBUT0RPOiBNQVhfT05fRVhJVF9OSUNF TFkgaXMgMTAwIG5vdy4uLiBtYXggQUggaGFuZGxlIHJlZ2lzdGVyIG9uIGV4aXQgLiovCisJaWYg KG51bV9kYl9yZXN0b3JlID4gTUFYX09OX0VYSVRfTklDRUxZKQorCXsKKwkJc2ltcGxlX2RiX29p ZF9mdWxsX2xpc3RfZGVsZXRlKCZkYm5hbWVfb2lkX2xpc3QpOworCQlwZ19mYXRhbCgiY291bmQg bm90IHJlc3RvcmUgbW9yZSB0aGFuICVkIGRhdGFiYXNlcyBieSBzaW5nbGUgcGdfcmVzdG9yZSwg aGVyZSB0b3RhbCBkYXRhYmFzZTolZCIsCisJCQkJICBNQVhfT05fRVhJVF9OSUNFTFksCisJCQkJ ICBudW1fZGJfcmVzdG9yZSk7CisJfQorCisJLyogT3BlbiBnbG9iYWwuZGF0IGZpbGUgYW5kIGV4 ZWN1dGUvYXBwZW5kIGFsbCB0aGUgZ2xvYmFsIHNxbCBjb21tYW5kcy4gKi8KKwlwcm9jZXNzX2ds b2JhbF9zcWxfY29tbWFuZHMoY29ubiwgZHVtcGRpcnBhdGgsIG9wdHMtPmZpbGVuYW1lKTsKKwor CS8qIENsb3NlIHRoZSBkYiBjb25uZWN0aW9uIGFzIHdlIGFyZSBkb25lIHdpdGggZ2xvYmFscyBh bmQgcGF0dGVybnMuICovCisJaWYgKGNvbm4pCisJCVBRZmluaXNoKGNvbm4pOworCisJLyogRXhp dCBpZiBubyBkYiBuZWVkcyB0byBiZSByZXN0b3JlZC4gKi8KKwlpZiAoZGJuYW1lX29pZF9saXN0 LmhlYWQgPT0gTlVMTCkKKwl7CisJCXBnX2xvZ19pbmZvKCJubyBkYXRhYmFzZSBuZWVkcyB0byBy ZXN0b3JlIG91dCBvZiAlZCBkYXRhYmFzZXMiLCBudW1fdG90YWxfZGIpOworCQlyZXR1cm4gMDsK Kwl9CisKKwlwZ19sb2dfaW5mbygibmVlZHMgdG8gcmVzdG9yZSAlZCBkYXRhYmFzZXMgb3V0IG9m ICVkIGRhdGFiYXNlcyIsIG51bV9kYl9yZXN0b3JlLCBudW1fdG90YWxfZGIpOworCisJLyoKKwkg KiBYWFg6IFRPRE8gdGlsbCBub3csIHdlIG1hZGUgYSBsaXN0IG9mIGRhdGFiYXNlcywgdGhvc2Ug bmVlZHMgdG8gYmUgcmVzdG9yZWQKKwkgKiBhZnRlciBza2lwcGluZyBuYW1lcyBvZiBleGNsdWRl LWRhdGFiYXNlLiAgTm93IHdlIGNhbiBsYXVuY2ggcGFyYWxsZWwKKwkgKiB3b3JrZXJzIHRvIHJl c3RvcmUgdGhlc2UgZGF0YWJhc2VzLgorCSAqLworCWRib2lkX2NlbGwgPSBkYm5hbWVfb2lkX2xp c3QuaGVhZDsKKworCXdoaWxlKGRib2lkX2NlbGwgIT0gTlVMTCkKKwl7CisJCWNoYXIJCXN1YmRp cnBhdGhbTUFYUEdQQVRIXTsKKwkJaW50CQkJZGJleGl0X2NvZGU7CisKKwkJLyoKKwkJICogV2Ug bmVlZCB0byByZXNldCBvdmVycmlkZV9kYm5hbWUgc28gdGhhdCBvYmplY3RzIGNhbiBiZSByZXN0 b3JlZCBpbnRvCisJCSAqIGFscmVhZHkgY3JlYXRlZCBkYXRhYmFzZS4gKHVzZWQgd2l0aCAtZC8t LWRibmFtZSBvcHRpb24pCisJCSAqLworCQlpZiAob3B0cy0+Y3BhcmFtcy5vdmVycmlkZV9kYm5h bWUpCisJCXsKKwkJCXBmcmVlKG9wdHMtPmNwYXJhbXMub3ZlcnJpZGVfZGJuYW1lKTsKKwkJCW9w dHMtPmNwYXJhbXMub3ZlcnJpZGVfZGJuYW1lID0gTlVMTDsKKwkJfQorCisJCXNucHJpbnRmKHN1 YmRpcnBhdGgsIE1BWFBHUEFUSCwgIiVzL2RhdGFiYXNlcy8ldSIsIGR1bXBkaXJwYXRoLCBkYm9p ZF9jZWxsLT5kYl9vaWQpOworCisJCXBnX2xvZ19pbmZvKCJyZXN0b3JpbmcgZGF0YWJhc2UgXCIl c1wiIiwgZGJvaWRfY2VsbC0+ZGJfbmFtZSk7CisKKwkJLyogUmVzdG9yZSBzaW5nbGUgZGF0YWJh c2UgYW5kIHNhdmUgZXhpdF9jb2RlLiAqLworCQlkYmV4aXRfY29kZSA9IHJlc3RvcmVPbmVEYXRh YmFzZShzdWJkaXJwYXRoLCBvcHRzLCBudW1Xb3JrZXJzLAorCQkJCXRydWUsIGRib2lkX2NlbGwt PmRiX25hbWUpOworCisJCS8qIFN0b3JlIGV4aXRfY29kZSB0byByZXBvcnQgaXQgYmFjay4gKi8K KwkJaWYgKGV4aXRfY29kZSA9PSAwICYmIGRiZXhpdF9jb2RlICE9IDApCisJCQlleGl0X2NvZGUg PSBkYmV4aXRfY29kZTsKKworCQlkYm9pZF9jZWxsID0gZGJvaWRfY2VsbC0+bmV4dDsKKwl9CisK KwkvKiBMb2cgbnVtYmVyIG9mIHByb2Nlc3NlZCBkYXRhYmFzZXMuKi8KKwlwZ19sb2dfaW5mbygi bnVtYmVyIG9mIHJlc3RvcmVkIGRhdGFiYXNlcyBhcmUgJWQiLCBudW1fZGJfcmVzdG9yZSk7CisK KwkvKiBGcmVlIGRibmFtZSBhbmQgZGJvaWQgbGlzdC4gKi8KKwlzaW1wbGVfZGJfb2lkX2Z1bGxf bGlzdF9kZWxldGUoJmRibmFtZV9vaWRfbGlzdCk7CisKKwlyZXR1cm4gZXhpdF9jb2RlOworfQor CisvKgorICogcHJvY2Vzc19nbG9iYWxfc3FsX2NvbW1hbmRzCisgKgorICogVGhpcyB3aWxsIG9w ZW4gZ2xvYmFsLmRhdCBmaWxlIGFuZCB3aWxsIGV4ZWN1dGUgYWxsIGdsb2JhbCBzcWwgY29tbWFu ZHMgb25lCisgKiBieSBvbmUgc3RhdGVtZW50LgorICogU2VtaWNvbG9uIGlzIGNvbnNpZGVyZWQg YXMgc3RhdGVtZW50IHRlcm1pbmF0b3IuICBJZiBvdXRmaWxlIGlzIHBhc3NlZCwgdGhlbgorICog dGhpcyB3aWxsIGNvcHkgYWxsIHNxbCBjb21tYW5kcyBpbnRvIG91dGZpbGUgcmF0aGVyIHRoZW4g ZXhlY3V0aW5nIHRoZW0uCisgKi8KK3N0YXRpYyB2b2lkCitwcm9jZXNzX2dsb2JhbF9zcWxfY29t bWFuZHMoUEdjb25uICpjb25uLCBjb25zdCBjaGFyICpkdW1wZGlycGF0aCwgY29uc3QgY2hhciAq b3V0ZmlsZSkKK3sKKwljaGFyICAgICAgICAgICAgZ2xvYmFsX2ZpbGVfcGF0aFtNQVhQR1BBVEhd OworCVBHcmVzdWx0CQkqcmVzdWx0OworCVN0cmluZ0luZm9EYXRhCXNxbHN0YXRlbWVudDsKKwlG SUxFCQkJKnBmaWxlOworCisJc25wcmludGYoZ2xvYmFsX2ZpbGVfcGF0aCwgTUFYUEdQQVRILCAi JXMvZ2xvYmFsLmRhdCIsIGR1bXBkaXJwYXRoKTsKKworCS8qIE5vdyBvcGVuIGdsb2JhbC5kYXQg ZmlsZS4gKi8KKwlwZmlsZSA9IGZvcGVuKGdsb2JhbF9maWxlX3BhdGgsIFBHX0JJTkFSWV9SKTsK KworCWlmIChwZmlsZSA9PSBOVUxMKQorCQlwZ19mYXRhbCgiY291bGQgbm90IG9wZW4gZ2xvYmFs LmRhdCBmaWxlOiBcIiVzXCIiLCBnbG9iYWxfZmlsZV9wYXRoKTsKKworCS8qCisJICogSWYgb3V0 ZmlsZSBpcyBnaXZlbiwgdGhlbiBqdXN0IGNvcHkgYWxsIGdsb2JhbC5kYXQgZmlsZSBkYXRhIGlu dG8KKwkgKiBvdXRmaWxlLgorCSAqLworCWlmIChvdXRmaWxlKQorCXsKKwkJY29weV9nbG9iYWxf ZmlsZV90b19vdXRfZmlsZShvdXRmaWxlLCBwZmlsZSk7CisJCXJldHVybjsKKwl9CisKKwkvKiBJ bml0IHNxbHN0YXRlbWVudCB0byBhcHBlbmQgY29tbWFuZHMuICovCisJaW5pdFN0cmluZ0luZm8o JnNxbHN0YXRlbWVudCk7CisKKwkvKiBQcm9jZXNzIGZpbGUgdGlsbCBFT0YgYW5kIGV4ZWN1dGUg c3FsIHN0YXRlbWVudHMuICovCisJd2hpbGUgKFJlYWRPbmVTdGF0ZW1lbnQoJnNxbHN0YXRlbWVu dCwgcGZpbGUpICE9IEVPRikKKwl7CisJCXBnX2xvZ19pbmZvKCJleGVjdXRpbmcgcXVlcnk6ICVz Iiwgc3Fsc3RhdGVtZW50LmRhdGEpOworCQlyZXN1bHQgPSBQUWV4ZWMoY29ubiwgc3Fsc3RhdGVt ZW50LmRhdGEpOworCisJCXN3aXRjaCAoUFFyZXN1bHRTdGF0dXMocmVzdWx0KSkKKwkJeworCQkJ Y2FzZSBQR1JFU19DT01NQU5EX09LOgorCQkJY2FzZSBQR1JFU19UVVBMRVNfT0s6CisJCQljYXNl IFBHUkVTX0VNUFRZX1FVRVJZOgorCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlwZ19sb2df ZXJyb3IoImNvdWxkIG5vdCBleGVjdXRlIHF1ZXJ5OiBcIiVzXCIgXG5Db21tYW5kIHdhczogXCIl c1wiIiwgUFFlcnJvck1lc3NhZ2UoY29ubiksIHNxbHN0YXRlbWVudC5kYXRhKTsKKwkJfQorCQlQ UWNsZWFyKHJlc3VsdCk7CisJfQorCisJZmNsb3NlKHBmaWxlKTsKK30KKworLyoKKyAqIGNvcHlf Z2xvYmFsX2ZpbGVfdG9fb3V0X2ZpbGUKKyAqCisgKiBUaGlzIHdpbGwgY29weSBnbG9iYWwuZGF0 IGZpbGUgaW50byBvdXQgZmlsZS4gIElmICItIiBpcyB1c2VkIGFzIG91dGZpbGUsCisgKiB0aGVu IHByaW50IGNvbW1hbmRzIHRvIHRoZSBzdGRvdXQuCisgKi8KK3N0YXRpYyB2b2lkCitjb3B5X2ds b2JhbF9maWxlX3RvX291dF9maWxlKGNvbnN0IGNoYXIgKm91dGZpbGUsIEZJTEUgKnBmaWxlKQor eworCWNoYXIJb3V0X2ZpbGVfcGF0aFtNQVhQR1BBVEhdOworCUZJTEUJKk9QRjsKKwlpbnQJCWM7 CisKKwkvKiAiLSIgaXMgdXNlZCBmb3Igc3Rkb3V0LiAqLworCWlmIChzdHJjbXAob3V0ZmlsZSwg Ii0iKSA9PSAwKQorCQlPUEYgPSBzdGRvdXQ7CisJZWxzZQorCXsKKwkJc25wcmludGYob3V0X2Zp bGVfcGF0aCwgTUFYUEdQQVRILCAiJXMiLCBvdXRmaWxlKTsKKwkJT1BGID0gZm9wZW4ob3V0X2Zp bGVfcGF0aCwgUEdfQklOQVJZX1cpOworCisJCWlmIChPUEYgPT0gTlVMTCkKKwkJeworCQkJZmNs b3NlKHBmaWxlKTsKKwkJCXBnX2ZhdGFsKCJjb3VsZCBub3Qgb3BlbiBmaWxlOiBcIiVzXCIiLCBv dXRmaWxlKTsKKwkJfQorCX0KKworCS8qIE5vdyBhcHBlbmQgZ2xvYmFsLmRhdCBpbnRvIG91dCBm aWxlLiAqLworCXdoaWxlICgoYyA9IGZnZXRjKHBmaWxlKSkgIT0gRU9GKQorCQlmcHV0YyhjLCBP UEYpOworCisJZmNsb3NlKHBmaWxlKTsKKworCS8qIENsb3NlIG91dCBmaWxlLiAqLworCWlmIChz dHJjbXAob3V0ZmlsZSwgIi0iKSAhPSAwKQorCQlmY2xvc2UoT1BGKTsKK30KKworLyoKKyAqIHNp bXBsZV9kYl9vaWRfbGlzdF9hcHBlbmQKKyAqCisgKiBhcHBlbmRzIGEgbm9kZSB0byB0aGUgbGlz dCBpbiB0aGUgZW5kLgorICovCitzdGF0aWMgdm9pZAorc2ltcGxlX2RiX29pZF9saXN0X2FwcGVu ZChTaW1wbGVEYXRhYmFzZU9pZExpc3QgKmxpc3QsIE9pZCBkYl9vaWQsCisJCWNvbnN0IGNoYXIg KmRibmFtZSkKK3sKKwlTaW1wbGVEYXRhYmFzZU9pZExpc3RDZWxsICpjZWxsOworCisJY2VsbCA9 IHBnX21hbGxvY19vYmplY3QoU2ltcGxlRGF0YWJhc2VPaWRMaXN0Q2VsbCk7CisKKwljZWxsLT5u ZXh0ID0gTlVMTDsKKwljZWxsLT5kYl9vaWQgPSBkYl9vaWQ7CisJY2VsbC0+ZGJfbmFtZSA9IHBn X3N0cmR1cChkYm5hbWUpOworCisJaWYgKGxpc3QtPnRhaWwpCisJCWxpc3QtPnRhaWwtPm5leHQg PSBjZWxsOworCWVsc2UKKwkJbGlzdC0+aGVhZCA9IGNlbGw7CisJbGlzdC0+dGFpbCA9IGNlbGw7 Cit9CisKKy8qCisgKiBzaW1wbGVfZGJfb2lkX2Z1bGxfbGlzdF9kZWxldGUKKyAqCisgKiBkZWxl dGUgYWxsIGNlbGwgZnJvbSBkYm5hbWUgYW5kIGRib2lkIGxpc3QuCisgKi8KK3N0YXRpYyB2b2lk CitzaW1wbGVfZGJfb2lkX2Z1bGxfbGlzdF9kZWxldGUoU2ltcGxlRGF0YWJhc2VPaWRMaXN0ICps aXN0KQoreworCVNpbXBsZURhdGFiYXNlT2lkTGlzdENlbGwJKmNlbGwgPSBsaXN0LT5oZWFkOwor CVNpbXBsZURhdGFiYXNlT2lkTGlzdENlbGwJKm5leHRjZWxsID0gTlVMTDsKKworCXdoaWxlIChj ZWxsKQorCXsKKwkJbmV4dGNlbGwgPSBjZWxsLT5uZXh0OworCQlwZnJlZSAoY2VsbCk7CisJCWNl bGwgPSBuZXh0Y2VsbDsKKwl9CisKKwlsaXN0LT5oZWFkID0gTlVMTDsKKwlsaXN0LT50YWlsID0g TlVMTDsKK30KKworLyoKKyAqIHNpbXBsZV9zdHJpbmdfZnVsbF9saXN0X2RlbGV0ZQorICoKKyAq IGRlbGV0ZSBhbGwgY2VsbCBmcm9tIHN0cmluZyBsaXN0LgorICovCitzdGF0aWMgdm9pZAorc2lt cGxlX3N0cmluZ19mdWxsX2xpc3RfZGVsZXRlKFNpbXBsZVN0cmluZ0xpc3QgKmxpc3QpCit7CisJ U2ltcGxlU3RyaW5nTGlzdENlbGwJKmNlbGwgPSBsaXN0LT5oZWFkOworCVNpbXBsZVN0cmluZ0xp c3RDZWxsICAgICpjZWxsbmV4dCA9IE5VTEw7CisKKwl3aGlsZSAoY2VsbCkKKwl7CisJCWNlbGxu ZXh0ID0gY2VsbC0+bmV4dDsKKwkJcGZyZWUoY2VsbCk7CisJCWNlbGwgPSBjZWxsbmV4dDsKKwl9 CisKKwlsaXN0LT5oZWFkID0gTlVMTDsKKwlsaXN0LT50YWlsID0gTlVMTDsKK30KKworLyoKKyAq IHNpbXBsZV9kYl9vaWRfbGlzdF9kZWxldGUKKyAqCisgKiBkZWxldGUgY2VsbCBmcm9tIGRhdGFi YXNlIGFuZCBvaWQgbGlzdC4KKyAqLworc3RhdGljIHZvaWQKK3NpbXBsZV9kYl9vaWRfbGlzdF9k ZWxldGUoU2ltcGxlRGF0YWJhc2VPaWRMaXN0ICpsaXN0LAorCQlTaW1wbGVEYXRhYmFzZU9pZExp c3RDZWxsICpjZWxsLAorCQlTaW1wbGVEYXRhYmFzZU9pZExpc3RDZWxsICpwcmV2KQoreworCWlm IChwcmV2ID09IE5VTEwpCisJeworCQlsaXN0LT5oZWFkID0gY2VsbC0+bmV4dDsKKwkJcGZyZWUo Y2VsbCk7CisJfQorCWVsc2UKKwl7CisJCXByZXYtPm5leHQgPSBjZWxsLT5uZXh0OworCQlwZnJl ZShjZWxsKTsKKwl9Cit9CisKKy8qCisgKiBxdW90ZV9saXRlcmFsX2ludGVybmFsCisgKi8KK3N0 YXRpYyBzaXplX3QKK3F1b3RlX2xpdGVyYWxfaW50ZXJuYWwoY2hhciAqZHN0LCBjb25zdCBjaGFy ICpzcmMsIHNpemVfdCBsZW4pCit7CisJY29uc3QgY2hhciAqczsKKwljaGFyCSAgICpzYXZlZHN0 ID0gZHN0OworCisJZm9yIChzID0gc3JjOyBzIDwgc3JjICsgbGVuOyBzKyspCisJeworCQlpZiAo KnMgPT0gJ1xcJykKKwkJeworCQkJKmRzdCsrID0gRVNDQVBFX1NUUklOR19TWU5UQVg7CisJCQli cmVhazsKKwkJfQorCX0KKworCSpkc3QrKyA9ICdcJyc7CisJd2hpbGUgKGxlbi0tID4gMCkKKwl7 CisJCWlmIChTUUxfU1RSX0RPVUJMRSgqc3JjLCB0cnVlKSkKKwkJCSpkc3QrKyA9ICpzcmM7CisJ CSpkc3QrKyA9ICpzcmMrKzsKKwl9CisJKmRzdCsrID0gJ1wnJzsKKworCXJldHVybiBkc3QgLSBz YXZlZHN0OworfQorCisvKgorICogcXVvdGVfbGl0ZXJhbF9jc3RyCisgKgorICoJICByZXR1cm5z IGEgcHJvcGVybHkgcXVvdGVkIGxpdGVyYWwKKyAqIGNvcGllZCBmcm9tIHNyYy9iYWNrZW5kL3V0 aWxzL2FkdC9xdW90ZS5jCisgKi8KK3N0YXRpYyBjaGFyICoKK3F1b3RlX2xpdGVyYWxfY3N0cihj b25zdCBjaGFyICpyYXdzdHIpCit7CisJY2hhcgkgICAqcmVzdWx0OworCWludAkJCWxlbjsKKwlp bnQJCQluZXdsZW47CisKKwlsZW4gPSBzdHJsZW4ocmF3c3RyKTsKKworCS8qIFdlIG1ha2UgYSB3 b3JzdC1jYXNlIHJlc3VsdCBhcmVhOyB3YXN0aW5nIGEgbGl0dGxlIHNwYWNlIGlzIE9LICovCisJ cmVzdWx0ID0gcGdfbWFsbG9jKGxlbiAqIDIgKyAzICsgMSk7CisKKwluZXdsZW4gPSBxdW90ZV9s aXRlcmFsX2ludGVybmFsKHJlc3VsdCwgcmF3c3RyLCBsZW4pOworCXJlc3VsdFtuZXdsZW5dID0g J1wwJzsKKworCXJldHVybiByZXN1bHQ7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAv dC8wMDFfYmFzaWMucGwgYi9zcmMvYmluL3BnX2R1bXAvdC8wMDFfYmFzaWMucGwKb2xkIG1vZGUg MTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQppbmRleCAyMTQyNDBmMWFlNS4uZGU0MWVjMDZkODYKLS0t IGEvc3JjL2Jpbi9wZ19kdW1wL3QvMDAxX2Jhc2ljLnBsCisrKyBiL3NyYy9iaW4vcGdfZHVtcC90 LzAwMV9iYXNpYy5wbApAQCAtMjE5LDYgKzIxOSwxMSBAQCBjb21tYW5kX2ZhaWxzX2xpa2UoCiAJ J3BnX3Jlc3RvcmU6IG9wdGlvbnMgLUNcLy0tY3JlYXRlIGFuZCAtMVwvLS1zaW5nbGUtdHJhbnNh Y3Rpb24gY2Fubm90IGJlIHVzZWQgdG9nZXRoZXInCiApOwogCitjb21tYW5kX2ZhaWxzX2xpa2Uo CisJWyAncGdfcmVzdG9yZScsICctLWV4Y2x1ZGUtZGF0YWJhc2U9Zm9vJywgJy0tZ2xvYmFscy1v bmx5JywgJy1kJywgJ3h4eCcgXSwKKwlxci9cUXBnX3Jlc3RvcmU6IGVycm9yOiBvcHRpb24gLS1l eGNsdWRlLWRhdGFiYXNlIGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyIHdpdGggLWdcLy0tZ2xvYmFs cy1vbmx5XEUvLAorCSdwZ19yZXN0b3JlOiBvcHRpb24gLS1leGNsdWRlLWRhdGFiYXNlIGNhbm5v dCBiZSB1c2VkIHRvZ2V0aGVyIHdpdGggLWcvLS1nbG9iYWxzLW9ubHknKTsKKwogIyBhbHNvIGZh aWxzIGZvciAtciBhbmQgLXQsIGJ1dCBpdCBzZWVtcyBwb2ludGxlc3MgdG8gYWRkIG1vcmUgdGVz dHMgZm9yIHRob3NlLgogY29tbWFuZF9mYWlsc19saWtlKAogCVsgJ3BnX2R1bXBhbGwnLCAnLS1l eGNsdWRlLWRhdGFiYXNlPWZvbycsICctLWdsb2JhbHMtb25seScgXSwKQEAgLTIyNiw0ICsyMzEs OCBAQCBjb21tYW5kX2ZhaWxzX2xpa2UoCiAJJ3BnX2R1bXBhbGw6IG9wdGlvbiAtLWV4Y2x1ZGUt ZGF0YWJhc2UgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIgd2l0aCAtZy8tLWdsb2JhbHMtb25seScK ICk7CiAKK2NvbW1hbmRfZmFpbHNfbGlrZSgKKwlbICdwZ19kdW1wYWxsJywgJy0tZm9ybWF0Jywg J3gnIF0sCisJcXIvXFFwZ19kdW1wYWxsOiBlcnJvcjogdW5yZWNvZ25pemVkIGFyY2hpdmUgZm9y bWF0ICJ4IjtcRS8sCisJJ3BnX2R1bXBhbGw6IHVucmVjb2duaXplZCBhcmNoaXZlIGZvcm1hdCcp OwogZG9uZV90ZXN0aW5nKCk7CmRpZmYgLS1naXQgYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRl ZnMubGlzdCBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CmluZGV4IDgwYWE1MGQ1 NWE0Li4wMmEwMTI1MWIwNCAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZz Lmxpc3QKKysrIGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKQEAgLTI2NzYsNiAr MjY3Niw4IEBAIFNodXRkb3duTW9kZQogU2lnblRTVmVjdG9yCiBTaW1wbGVBY3Rpb25MaXN0CiBT aW1wbGVBY3Rpb25MaXN0Q2VsbAorU2ltcGxlRGF0YWJhc2VPaWRMaXN0CitTaW1wbGVEYXRhYmFz ZU9pZExpc3RDZWxsCiBTaW1wbGVFY29udGV4dFN0YWNrRW50cnkKIFNpbXBsZU9pZExpc3QKIFNp bXBsZU9pZExpc3RDZWxsCi0tIAoyLjM5LjMKCg== --000000000000b41fcb062e7e0597--