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 1urwPP-00Ey0I-HL for pgsql-hackers@arkaria.postgresql.org; Fri, 29 Aug 2025 10:32:41 +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 1urwPO-008uKF-UT for pgsql-hackers@arkaria.postgresql.org; Fri, 29 Aug 2025 10:32:39 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1urwPO-008uK3-IS for pgsql-hackers@lists.postgresql.org; Fri, 29 Aug 2025 10:32:39 +0000 Received: from mail-ua1-x92f.google.com ([2607:f8b0:4864:20::92f]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1urwPM-002UFr-20 for pgsql-hackers@lists.postgresql.org; Fri, 29 Aug 2025 10:32:38 +0000 Received: by mail-ua1-x92f.google.com with SMTP id a1e0cc1a2514c-8941a2d6a14so1827086241.1 for ; Fri, 29 Aug 2025 03:32:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1756463555; x=1757068355; 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=+4/FT/Gmk4/Wb5r7Ru1dWp5RfqrCatoV8gyJAHcbqns=; b=PxT3gsTQiY22S/2RI9l0RCpJY9uqZGWlulIMtscmagOGmot/o0zyt+8p4KVduNC30l vm5Ew7yU0cjZ1T5SlHrG8nz8IoRdAowMXN3RGBjAARH3ZIbySNxQWSJeJvlE5NVWXX5q 6hwn5LDoaYNxGLoS5W6RU51+WAkXJaatOJTvnNdg1tHtMI/9Qk4rRHf3/+hpBeChwNHx 2FUxn02FYCFV2eBQ79e04Gojtnf/sb77AFLCxS1n3yMzwbXpS4ZS7i8dDarz2eCRslux QAvGauyUK4mTOhE6BNZL1QMnZ1E/zdim/uhLVTsDDhtBC5D/jGBkePD9aHFUyshl1yPX p3cQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756463555; x=1757068355; 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=+4/FT/Gmk4/Wb5r7Ru1dWp5RfqrCatoV8gyJAHcbqns=; b=dqEdeCPYcZcYCrecgYoWOHjfWFa3c4s6v9Zx+0+8u/xFVO0PWexTqnNbEwDFAGvc/i C+RgNS7a6CLdQsJYOFiu9k7+MMN7XLA0LbxglEW34YDG4aVKGId3HMppdETMLQJ3st8l 5+Cu1LVVN4jsU2asJ9Za8pPCTpYASL/iWElrWDgEnw7uHl6nn99bGVgjcG90lUHRST9p qeBot6fIIp0dbT0SdftdMzY0qx2qeZPE+J3WSx7LOYs88/LsPPkxRcWgTOrWNE3MADGn Ma3R/DmlcGNKc844L6fK2YUSICaFxg0caHI3jIPbRGA5gBMP5/3nAPy8WduVByEWv09J aBhQ== X-Gm-Message-State: AOJu0YwI+W7i3PWekhrjaQ8KwjulVaKnfKsYHs0R+a6zG/hdifuUwwkG io5uQogjv34w4XY5LepeABKCdGsUJ4RJzYE6LAidTznxlgqueS2vt43LaxptcWqNdYbO8jAdU6d KXOh7EEHhE3VqqiKudD3HmTipXGg06xv68/weCMdpBw== X-Gm-Gg: ASbGnctgbgl2agqCadRSOdnerl5EyR9h2F9/Gqgr9nxqDXZ3c4UuTC4OSTt9vokbbao r3cEnxrpYCd7lJfVOnojSiKj4s/RLFKC0L06FHd2leNDtGVS7A0gQX0l/rlCBAHFGniQKUUla3L IUPIsEhe77n4+/Q3sWN8pCoL9f8yGzb4lKx6ZJBziJMBSPYY49xKoUBIig1Xxk0LegN2AZMdgQ9 f1krSXIBq0jUXnb913xBrd0w0iTwPCI4mPrFH7Nt5ToPfTqXaMjDPBRI+eldcEpbsBrK5Lt4IRy S3SLUw== X-Google-Smtp-Source: AGHT+IHjQQjrDw9WrDgHXHv5BAstSm5dxFkSie3WdTJOEnKTNI1xixFIwM/WA00yxnvzAc2rrtSTL7Cdkv8ItTkNvHY= X-Received: by 2002:a05:6102:6495:20b0:519:534a:6c36 with SMTP id ada2fe7eead31-5248bbc70bfmr3236287137.14.1756463554956; Fri, 29 Aug 2025 03:32:34 -0700 (PDT) MIME-Version: 1.0 References: <171085360143.2046436.7217841141682511557.pgcf@coridan.postgresql.org> <195b67ee-ef41-4451-9396-844442eef1a4@postgrespro.ru> In-Reply-To: From: jian he Date: Fri, 29 Aug 2025 18:31:58 +0800 X-Gm-Features: Ac12FXzNi-Bp-VXjZopBWMqIwqsGyxV2wBZ_gO5-n85eR5NzbYVLj3ojEYatGno Message-ID: Subject: Re: Add SPLIT PARTITION/MERGE PARTITIONS commands To: Dmitry Koval Cc: pgsql-hackers@lists.postgresql.org Content-Type: multipart/mixed; boundary="000000000000416202063d7e8a30" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000416202063d7e8a30 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Tue, Aug 26, 2025 at 4:05=E2=80=AFPM Dmitry Koval wrote: > > Hi! > Thanks for the notes and patches! > hi. ORDER BY regclass seems not stable, see https://git.postgresql.org/cgit/postgresql.git/commit/?id=3D17bcf4f5450430f= 67b744c225566c9e0e6413e95 some of the SQL tests seem not necessary, so I refactored tests. +static List * +getAttributesList(Relation parent_rel) +{ ..... + + for (parent_attno =3D 1; parent_attno <=3D modelDesc->natts; + parent_attno++) + { .... + + /* Add to column list */ + colList =3D lappend(colList, def); + + /* + * Although we don't transfer the column's default/generation + * expression now, we need to mark it GENERATED if appropriate. + */ + if (attribute->atthasdef && attribute->attgenerated) + def->generated =3D attribute->attgenerated; + + def->storage =3D attribute->attstorage; + + /* Likewise, copy compression if requested */ + if (CompressionMethodIsValid(attribute->attcompression)) + def->compression =3D + pstrdup(GetCompressionMethodName(attribute->attcompression)); + else + def->compression =3D NULL; + } + + return colList; the last part seems intuitive? "colList =3D lappend(colList, def);" should be at the end of the for loop? +-- Indexname values should be 'tp_1_2_pkey' and 'tp_1_2_i_idx'. +-- Not-null constraint name should be 'tp_1_2_i_not_null'. +\d+ tp_1_2 + Table "partitions_merge_schema.tp_1_2" + Column | Type | Collation | Nullable | Default | Storage | Stats target | Description +--------+---------+-----------+----------+---------+---------+------------= --+------------- + i | integer | | not null | | plain | = | +Partition of: t FOR VALUES FROM (0) TO (2) +Partition constraint: ((i IS NOT NULL) AND (i >=3D 0) AND (i < 2)) +Indexes: + "tp_1_2_pkey" PRIMARY KEY, btree (i) + "tp_1_2_i_idx" btree (i) +Not-null constraints: + "t_i_not_null" NOT NULL "i" (inherited) + "-- Not-null constraint name should be 'tp_1_2_i_not_null'. Comments conflict with the result. + /* + * We reject whole-row variables because the whole point of LIKE is + * that the new table's rowtype might later diverge from the parent's. + * So, while translation might be possible right now, it wouldn't be + * possible to guarantee it would work in future. + */ + if (found_whole_row) + elog(ERROR, "Constraint \"%s\" contains a whole-row reference to table \"%s\".", + ccname, + RelationGetRelationName(parent_rel)); the above comment needs change, since LIKE is not related to here. + foreach_ptr(NewConstraint, con, tab->constraints) + { + switch (con->contype) + { + case CONSTR_CHECK: + + /* + * We already expanded virtual expression in + * createTableConstraints. + */ + con->qualstate =3D ExecPrepareExpr((Expr *) expand_generated_columns_in_expr(con->qual, newPartRel, 1), estate); + break; here, we don't need expand_generated_columns_in_expr, the comment also explained it. the attached patch is the changes for the above comments. --000000000000416202063d7e8a30 Content-Type: application/octet-stream; name="v53-0001-refactor-src-test-regress-sql-partition_merge.sql.no-cfbot" Content-Disposition: attachment; filename="v53-0001-refactor-src-test-regress-sql-partition_merge.sql.no-cfbot" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mewoyq6i0 RnJvbSAxYWRmODgyYzY5NzEyODJkOTBlZDYyZTI2YjUxMDZjZTNiMDM0ZmZhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBqaWFuIGhlIDxqaWFuLnVuaXZlcnNhbGl0eUBnbWFpbC5jb20+ CkRhdGU6IEZyaSwgMjkgQXVnIDIwMjUgMTU6MzQ6MTggKzA4MDAKU3ViamVjdDogW1BBVENIIHY1 MyAxLzFdIHJlZmFjdG9yIHNyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3BhcnRpdGlvbl9tZXJnZS5zcWwK CmFsc28gbWlub3IgcmVmYWN0cm9yIGdldEF0dHJpYnV0ZXNMaXN0Ci0tLQogc3JjL2JhY2tlbmQv Y29tbWFuZHMvdGFibGVjbWRzLmMgICAgICAgICAgICAgIHwgIDIwICsrLS0KIHNyYy90ZXN0L3Jl Z3Jlc3MvZXhwZWN0ZWQvcGFydGl0aW9uX21lcmdlLm91dCB8IDEwMSArKysrKysrKy0tLS0tLS0t LS0KIHNyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3BhcnRpdGlvbl9tZXJnZS5zcWwgICAgICB8ICA0NiAr KysrLS0tLQogMyBmaWxlcyBjaGFuZ2VkLCA3MiBpbnNlcnRpb25zKCspLCA5NSBkZWxldGlvbnMo LSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYyBiL3NyYy9i YWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jCmluZGV4IDVhM2M1M2QzZTU5Li44ZmExYTM3N2Ex NCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMKKysrIGIvc3Jj L2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMKQEAgLTIyMTIwLDcgKzIyMTIwLDcgQEAgYnVp bGRFeHByZXNzaW9uRXhlY3V0aW9uU3RhdGVzKEFsdGVyZWRUYWJsZUluZm8gKnRhYiwgUmVsYXRp b24gbmV3UGFydFJlbCwgRVN0YXQKIAkJCQkgKiBXZSBhbHJlYWR5IGV4cGFuZGVkIHZpcnR1YWwg ZXhwcmVzc2lvbiBpbgogCQkJCSAqIGNyZWF0ZVRhYmxlQ29uc3RyYWludHMuCiAJCQkJICovCi0J CQkJY29uLT5xdWFsc3RhdGUgPSBFeGVjUHJlcGFyZUV4cHIoKEV4cHIgKikgZXhwYW5kX2dlbmVy YXRlZF9jb2x1bW5zX2luX2V4cHIoY29uLT5xdWFsLCBuZXdQYXJ0UmVsLCAxKSwgZXN0YXRlKTsK KwkJCQljb24tPnF1YWxzdGF0ZSA9IEV4ZWNQcmVwYXJlRXhwcigoRXhwciAqKSBjb24tPnF1YWws IGVzdGF0ZSk7CiAJCQkJYnJlYWs7CiAJCQljYXNlIENPTlNUUl9OT1ROVUxMOgogCQkJCS8qIE5v dGhpbmcgdG8gZG8gaGVyZS4gKi8KQEAgLTIyMjExLDI3ICsyMjIxMSwyMyBAQCBnZXRBdHRyaWJ1 dGVzTGlzdChSZWxhdGlvbiBwYXJlbnRfcmVsKQogCiAJCWRlZi0+aXNfbm90X251bGwgPSBhdHRy aWJ1dGUtPmF0dG5vdG51bGw7CiAKLQkJLyogQ29weSBpZGVudGl0eSBmb3IgbmV3IHBhcnRpdGlv bi4gKi8KKwkJLyogQ29weSBpZGVudGl0eSAqLwogCQlkZWYtPmlkZW50aXR5ID0gYXR0cmlidXRl LT5hdHRpZGVudGl0eTsKIAotCQkvKiBBZGQgdG8gY29sdW1uIGxpc3QgKi8KLQkJY29sTGlzdCA9 IGxhcHBlbmQoY29sTGlzdCwgZGVmKTsKLQotCQkvKgotCQkgKiBBbHRob3VnaCB3ZSBkb24ndCB0 cmFuc2ZlciB0aGUgY29sdW1uJ3MgZGVmYXVsdC9nZW5lcmF0aW9uCi0JCSAqIGV4cHJlc3Npb24g bm93LCB3ZSBuZWVkIHRvIG1hcmsgaXQgR0VORVJBVEVEIGlmIGFwcHJvcHJpYXRlLgotCQkgKi8K LQkJaWYgKGF0dHJpYnV0ZS0+YXR0aGFzZGVmICYmIGF0dHJpYnV0ZS0+YXR0Z2VuZXJhdGVkKQot CQkJZGVmLT5nZW5lcmF0ZWQgPSBhdHRyaWJ1dGUtPmF0dGdlbmVyYXRlZDsKKwkJLyogQ29weSBh dHRnZW5lcmF0ZWQgKi8KKwkJZGVmLT5nZW5lcmF0ZWQgPSBhdHRyaWJ1dGUtPmF0dGdlbmVyYXRl ZDsKIAogCQlkZWYtPnN0b3JhZ2UgPSBhdHRyaWJ1dGUtPmF0dHN0b3JhZ2U7CiAKLQkJLyogTGlr ZXdpc2UsIGNvcHkgY29tcHJlc3Npb24gaWYgcmVxdWVzdGVkICovCisJCS8qIExpa2V3aXNlLCBj b3B5IGNvbXByZXNzaW9uICovCiAJCWlmIChDb21wcmVzc2lvbk1ldGhvZElzVmFsaWQoYXR0cmli dXRlLT5hdHRjb21wcmVzc2lvbikpCiAJCQlkZWYtPmNvbXByZXNzaW9uID0KIAkJCQlwc3RyZHVw KEdldENvbXByZXNzaW9uTWV0aG9kTmFtZShhdHRyaWJ1dGUtPmF0dGNvbXByZXNzaW9uKSk7CiAJ CWVsc2UKIAkJCWRlZi0+Y29tcHJlc3Npb24gPSBOVUxMOworCisJCS8qIEFkZCB0byBjb2x1bW4g bGlzdCAqLworCQljb2xMaXN0ID0gbGFwcGVuZChjb2xMaXN0LCBkZWYpOwogCX0KIAogCXJldHVy biBjb2xMaXN0OwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wYXJ0aXRp b25fbWVyZ2Uub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wYXJ0aXRpb25fbWVyZ2Uu b3V0CmluZGV4IGY2MjYyMmY4YWM5Li42OWY4NjY3MjFmZSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3Qv cmVncmVzcy9leHBlY3RlZC9wYXJ0aXRpb25fbWVyZ2Uub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jl c3MvZXhwZWN0ZWQvcGFydGl0aW9uX21lcmdlLm91dApAQCAtMTQ0LDEzICsxNDQsOSBAQCBTRUxF Q1QgKiBGUk9NIHBnX2luZGV4ZXMgV0hFUkUgdGFibGVuYW1lID0gJ3NhbGVzX2ZlYl9tYXJfYXBy MjAyMicgYW5kIHNjaGVtYW5hbQogIHBhcnRpdGlvbnNfbWVyZ2Vfc2NoZW1hMiB8IHNhbGVzX2Zl Yl9tYXJfYXByMjAyMiB8IHNhbGVzX2ZlYl9tYXJfYXByMjAyMl9zYWxlc19kYXRlX2lkeCB8ICAg ICAgICAgICAgfCBDUkVBVEUgSU5ERVggc2FsZXNfZmViX21hcl9hcHIyMDIyX3NhbGVzX2RhdGVf aWR4IE9OIHBhcnRpdGlvbnNfbWVyZ2Vfc2NoZW1hMi5zYWxlc19mZWJfbWFyX2FwcjIwMjIgVVNJ TkcgYnRyZWUgKHNhbGVzX2RhdGUpCiAoMSByb3cpCiAKLVNFTEVDVCB0YWJsZW9pZDo6cmVnY2xh c3MsICogRlJPTSBzYWxlc19yYW5nZSBPUkRFUiBCWSB0YWJsZW9pZCwgc2FsZXNwZXJzb25faWQ7 CitTRUxFQ1QgdGFibGVvaWQ6OnJlZ2NsYXNzLCAqIEZST00gc2FsZXNfcmFuZ2UgT1JERVIgQlkg dGFibGVvaWQ6OnJlZ2NsYXNzOjp0ZXh0IENPTExBVEUgIkMiLCBzYWxlc3BlcnNvbl9pZDsKICAg ICAgICAgICAgICAgICAgICAgdGFibGVvaWQgICAgICAgICAgICAgICAgICAgIHwgc2FsZXNwZXJz b25faWQgfCBzYWxlc3BlcnNvbl9uYW1lIHwgc2FsZXNfYW1vdW50IHwgc2FsZXNfZGF0ZSAKIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0KLSBz YWxlc19qYW4yMDIyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAg ICAgIDEgfCBNYXkgICAgICAgICAgICAgIHwgICAgICAgICAxMDAwIHwgMDEtMzEtMjAyMgotIHNh bGVzX2phbjIwMjIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAg ICAxMCB8IEhhbGRlciAgICAgICAgICAgfCAgICAgICAgICAzNTAgfCAwMS0yOC0yMDIyCi0gc2Fs ZXNfamFuMjAyMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAg IDEzIHwgR2FuZGkgICAgICAgICAgICB8ICAgICAgICAgIDM3NyB8IDAxLTA5LTIwMjIKLSBzYWxl c19vdGhlcnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAg MTQgfCBTbWl0aCAgICAgICAgICAgIHwgICAgICAgICAgNTEwIHwgMDUtMDQtMjAyMgogIHBhcnRp dGlvbnNfbWVyZ2Vfc2NoZW1hMi5zYWxlc19mZWJfbWFyX2FwcjIwMjIgfCAgICAgICAgICAgICAg MiB8IFNtaXJub2ZmICAgICAgICAgfCAgICAgICAgICA1MDAgfCAwMi0xMC0yMDIyCiAgcGFydGl0 aW9uc19tZXJnZV9zY2hlbWEyLnNhbGVzX2ZlYl9tYXJfYXByMjAyMiB8ICAgICAgICAgICAgICAz IHwgRm9yZCAgICAgICAgICAgICB8ICAgICAgICAgMjAwMCB8IDA0LTMwLTIwMjIKICBwYXJ0aXRp b25zX21lcmdlX3NjaGVtYTIuc2FsZXNfZmViX21hcl9hcHIyMDIyIHwgICAgICAgICAgICAgIDQg fCBJdmFub3YgICAgICAgICAgIHwgICAgICAgICAgNzUwIHwgMDQtMTMtMjAyMgpAQCAtMTYxLDYg KzE1NywxMCBAQCBTRUxFQ1QgdGFibGVvaWQ6OnJlZ2NsYXNzLCAqIEZST00gc2FsZXNfcmFuZ2Ug T1JERVIgQlkgdGFibGVvaWQsIHNhbGVzcGVyc29uX2lkOwogIHBhcnRpdGlvbnNfbWVyZ2Vfc2No ZW1hMi5zYWxlc19mZWJfbWFyX2FwcjIwMjIgfCAgICAgICAgICAgICAgOSB8IE11bGxlciAgICAg ICAgICAgfCAgICAgICAgICAyNTAgfCAwMy0xMS0yMDIyCiAgcGFydGl0aW9uc19tZXJnZV9zY2hl bWEyLnNhbGVzX2ZlYl9tYXJfYXByMjAyMiB8ICAgICAgICAgICAgIDExIHwgVHJ1bXAgICAgICAg ICAgICB8ICAgICAgICAgIDM4MCB8IDA0LTA2LTIwMjIKICBwYXJ0aXRpb25zX21lcmdlX3NjaGVt YTIuc2FsZXNfZmViX21hcl9hcHIyMDIyIHwgICAgICAgICAgICAgMTIgfCBQbGF0byAgICAgICAg ICAgIHwgICAgICAgICAgMzUwIHwgMDMtMTktMjAyMgorIHNhbGVzX2phbjIwMjIgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgMSB8IE1heSAgICAgICAgICAg ICAgfCAgICAgICAgIDEwMDAgfCAwMS0zMS0yMDIyCisgc2FsZXNfamFuMjAyMiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgIDEwIHwgSGFsZGVyICAgICAgICAg ICB8ICAgICAgICAgIDM1MCB8IDAxLTI4LTIwMjIKKyBzYWxlc19qYW4yMDIyICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgMTMgfCBHYW5kaSAgICAgICAgICAg IHwgICAgICAgICAgMzc3IHwgMDEtMDktMjAyMgorIHNhbGVzX290aGVycyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAxNCB8IFNtaXRoICAgICAgICAgICAg fCAgICAgICAgICA1MTAgfCAwNS0wNC0yMDIyCiAoMTQgcm93cykKIAogLS0gVXNlIGluZGV4c2Nh biBmb3IgdGVzdGluZyBpbmRleGVzCkBAIC00MzcsNyArNDM3LDcgQEAgSU5TRVJUIElOVE8gc2Fs ZXNfcmFuZ2UgVkFMVUVTCiAgICgxMiwgJ1BsYXRvJywgICAgMzUwLCAgJzIwMjItMDMtMTknKSwK ICAgKDEzLCAnR2FuZGknLCAgICAzNzcsICAnMjAyMi0wMS0wOScpLAogICAoMTQsICdTbWl0aCcs ICAgIDUxMCwgICcyMDIyLTA1LTA0Jyk7Ci1TRUxFQ1QgdGFibGVvaWQ6OnJlZ2NsYXNzLCAqIEZS T00gc2FsZXNfYXByMjAyMiBPUkRFUiBCWSB0YWJsZW9pZCwgc2FsZXNwZXJzb25faWQ7CitTRUxF Q1QgdGFibGVvaWQ6OnJlZ2NsYXNzLCAqIEZST00gc2FsZXNfYXByMjAyMiBPUkRFUiBCWSB0YWJs ZW9pZDo6cmVnY2xhc3M6OnRleHQgQ09MTEFURSAiQyIsIHNhbGVzcGVyc29uX2lkOwogICAgICAg dGFibGVvaWQgICAgICAgfCBzYWxlc3BlcnNvbl9pZCB8IHNhbGVzcGVyc29uX25hbWUgfCBzYWxl c19hbW91bnQgfCBzYWxlc19kYXRlIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLQogIHNh bGVzX2FwcjIwMjJfMDFfMTAgfCAgICAgICAgICAgICAgNSB8IERlZXYgICAgICAgICAgICAgfCAg ICAgICAgICAyNTAgfCAwNC0wNy0yMDIyCkBAIC00NDcsNyArNDQ3LDcgQEAgU0VMRUNUIHRhYmxl b2lkOjpyZWdjbGFzcywgKiBGUk9NIHNhbGVzX2FwcjIwMjIgT1JERVIgQlkgdGFibGVvaWQsIHNh bGVzcGVyc29uX2kKICg0IHJvd3MpCiAKIEFMVEVSIFRBQkxFIHNhbGVzX2FwcjIwMjIgTUVSR0Ug UEFSVElUSU9OUyAoc2FsZXNfYXByMjAyMl8wMV8xMCwgc2FsZXNfYXByMjAyMl8xMF8yMCwgc2Fs ZXNfYXByMjAyMl8yMF8zMCkgSU5UTyBzYWxlc19hcHJfYWxsOwotU0VMRUNUIHRhYmxlb2lkOjpy ZWdjbGFzcywgKiBGUk9NIHNhbGVzX2FwcjIwMjIgT1JERVIgQlkgdGFibGVvaWQsIHNhbGVzcGVy c29uX2lkOworU0VMRUNUIHRhYmxlb2lkOjpyZWdjbGFzcywgKiBGUk9NIHNhbGVzX2FwcjIwMjIg T1JERVIgQlkgdGFibGVvaWQ6OnJlZ2NsYXNzOjp0ZXh0IENPTExBVEUgIkMiLCBzYWxlc3BlcnNv bl9pZDsKICAgIHRhYmxlb2lkICAgIHwgc2FsZXNwZXJzb25faWQgfCBzYWxlc3BlcnNvbl9uYW1l IHwgc2FsZXNfYW1vdW50IHwgc2FsZXNfZGF0ZSAKIC0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0KICBz YWxlc19hcHJfYWxsIHwgICAgICAgICAgICAgIDMgfCBGb3JkICAgICAgICAgICAgIHwgICAgICAg ICAyMDAwIHwgMDQtMzAtMjAyMgpAQCAtNTQ5LDEzICs1NDksOSBAQCBFWEVDVVRFIGdldF9wYXJ0 aXRpb25faW5mbygne3NhbGVzX2xpc3R9Jyk7CiAgc2FsZXNfb3RoZXJzIHwgcCAgICAgICAgICAg ICAgfCByICAgICAgIHwgZiAgICAgICAgICAgICAgICB8IERFRkFVTFQKICgzIHJvd3MpCiAKLVNF TEVDVCB0YWJsZW9pZDo6cmVnY2xhc3MsICogRlJPTSBzYWxlc19saXN0IE9SREVSIEJZIHRhYmxl b2lkLCBzYWxlc3BlcnNvbl9pZDsKK1NFTEVDVCB0YWJsZW9pZDo6cmVnY2xhc3MsICogRlJPTSBz YWxlc19saXN0IE9SREVSIEJZIHRhYmxlb2lkOjpyZWdjbGFzczo6dGV4dCBDT0xMQVRFICJDIiwg c2FsZXNwZXJzb25faWQ7CiAgIHRhYmxlb2lkICB8IHNhbGVzcGVyc29uX2lkIHwgc2FsZXNwZXJz b25fbmFtZSB8ICBzYWxlc19zdGF0ZSAgIHwgc2FsZXNfYW1vdW50IHwgc2FsZXNfZGF0ZSAKIC0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLQotIHNhbGVzX25vcmQgfCAgICAgICAg ICAgICAgMyB8IEZvcmQgICAgICAgICAgICAgfCBTdC4gUGV0ZXJzYnVyZyB8ICAgICAgICAgMjAw MCB8IDAzLTA1LTIwMjIKLSBzYWxlc19ub3JkIHwgICAgICAgICAgICAgIDcgfCBNYXkgICAgICAg ICAgICAgIHwgSGVsc2lua2kgICAgICAgfCAgICAgICAgIDEyMDAgfCAwMy0wNi0yMDIyCi0gc2Fs ZXNfbm9yZCB8ICAgICAgICAgICAgICA5IHwgTWF5ICAgICAgICAgICAgICB8IEhlbHNpbmtpICAg ICAgIHwgICAgICAgICAxMjAwIHwgMDMtMTEtMjAyMgotIHNhbGVzX25vcmQgfCAgICAgICAgICAg ICAxMCB8IEhhbGRlciAgICAgICAgICAgfCBPc2xvICAgICAgICAgICB8ICAgICAgICAgIDgwMCB8 IDAzLTAyLTIwMjIKICBzYWxlc19hbGwgIHwgICAgICAgICAgICAgIDEgfCBUcnVtcCAgICAgICAg ICAgIHwgQmVqaW5nICAgICAgICAgfCAgICAgICAgIDEwMDAgfCAwMy0wMS0yMDIyCiAgc2FsZXNf YWxsICB8ICAgICAgICAgICAgICAyIHwgU21pcm5vZmYgICAgICAgICB8IE5ldyBZb3JrICAgICAg IHwgICAgICAgICAgNTAwIHwgMDMtMDMtMjAyMgogIHNhbGVzX2FsbCAgfCAgICAgICAgICAgICAg NCB8IEl2YW5vdiAgICAgICAgICAgfCBXYXJzYXcgICAgICAgICB8ICAgICAgICAgIDc1MCB8IDAz LTA0LTIwMjIKQEAgLTU2Niw2ICs1NjIsMTAgQEAgU0VMRUNUIHRhYmxlb2lkOjpyZWdjbGFzcywg KiBGUk9NIHNhbGVzX2xpc3QgT1JERVIgQlkgdGFibGVvaWQsIHNhbGVzcGVyc29uX2lkOwogIHNh bGVzX2FsbCAgfCAgICAgICAgICAgICAxMiB8IFNtaXRoICAgICAgICAgICAgfCBLeWl2ICAgICAg ICAgICB8ICAgICAgICAgIDM1MCB8IDAzLTEwLTIwMjIKICBzYWxlc19hbGwgIHwgICAgICAgICAg ICAgMTMgfCBHYW5kaSAgICAgICAgICAgIHwgV2Fyc2F3ICAgICAgICAgfCAgICAgICAgICAxNTAg fCAwMy0wOC0yMDIyCiAgc2FsZXNfYWxsICB8ICAgICAgICAgICAgIDE0IHwgUGxhdG8gICAgICAg ICAgICB8IExpc2JvbiAgICAgICAgIHwgICAgICAgICAgOTUwIHwgMDMtMDUtMjAyMgorIHNhbGVz X25vcmQgfCAgICAgICAgICAgICAgMyB8IEZvcmQgICAgICAgICAgICAgfCBTdC4gUGV0ZXJzYnVy ZyB8ICAgICAgICAgMjAwMCB8IDAzLTA1LTIwMjIKKyBzYWxlc19ub3JkIHwgICAgICAgICAgICAg IDcgfCBNYXkgICAgICAgICAgICAgIHwgSGVsc2lua2kgICAgICAgfCAgICAgICAgIDEyMDAgfCAw My0wNi0yMDIyCisgc2FsZXNfbm9yZCB8ICAgICAgICAgICAgICA5IHwgTWF5ICAgICAgICAgICAg ICB8IEhlbHNpbmtpICAgICAgIHwgICAgICAgICAxMjAwIHwgMDMtMTEtMjAyMgorIHNhbGVzX25v cmQgfCAgICAgICAgICAgICAxMCB8IEhhbGRlciAgICAgICAgICAgfCBPc2xvICAgICAgICAgICB8 ICAgICAgICAgIDgwMCB8IDAzLTAyLTIwMjIKICgxNCByb3dzKQogCiAtLSBVc2UgaW5kZXhzY2Fu IGZvciB0ZXN0aW5nIGluZGV4ZXMgYWZ0ZXIgbWVyZ2luZyBwYXJ0aXRpb25zCkBAIC02NTEsNyAr NjUxLDYgQEAgQ1JFQVRFIFRBQkxFIHRwXzFfMiBQQVJUSVRJT04gT0YgdCBGT1IgVkFMVUVTIEZS T00gKDEpIFRPICgyKTsKIENSRUFURSBJTkRFWCB0aWR4IE9OIHQoaSk7CiBBTFRFUiBUQUJMRSB0 IE1FUkdFIFBBUlRJVElPTlMgKHRwXzFfMiwgdHBfMF8xKSBJTlRPIHRwXzFfMjsKIC0tIEluZGV4 bmFtZSB2YWx1ZXMgc2hvdWxkIGJlICd0cF8xXzJfcGtleScgYW5kICd0cF8xXzJfaV9pZHgnLgot LS0gTm90LW51bGwgY29uc3RyYWludCBuYW1lIHNob3VsZCBiZSAndHBfMV8yX2lfbm90X251bGwn LgogXGQrIHRwXzFfMgogICAgICAgICAgICAgICAgICAgICAgICAgICBUYWJsZSAicGFydGl0aW9u c19tZXJnZV9zY2hlbWEudHBfMV8yIgogIENvbHVtbiB8ICBUeXBlICAgfCBDb2xsYXRpb24gfCBO dWxsYWJsZSB8IERlZmF1bHQgfCBTdG9yYWdlIHwgU3RhdHMgdGFyZ2V0IHwgRGVzY3JpcHRpb24g CkBAIC04MDcsNjYgKzgwNiw1NiBAQCBDUkVBVEUgVEFCTEUgdCAoaSBpbnQpIFBBUlRJVElPTiBC WSBSQU5HRSAoaSk7CiBDUkVBVEUgVEFCTEUgdHBfMF8xIFBBUlRJVElPTiBPRiB0IEZPUiBWQUxV RVMgRlJPTSAoMCkgVE8gKDEpOwogQ1JFQVRFIFRBQkxFIHRwXzFfMiBQQVJUSVRJT04gT0YgdCBG T1IgVkFMVUVTIEZST00gKDEpIFRPICgyKTsKIFNFVCBTRVNTSU9OIEFVVEhPUklaQVRJT04gcmVn cmVzc19wYXJ0aXRpb25fbWVyZ2VfYm9iOwotQUxURVIgVEFCTEUgdCBNRVJHRSBQQVJUSVRJT05T ICh0cF8wXzEsIHRwXzFfMikgSU5UTyB0cF8wXzI7CitBTFRFUiBUQUJMRSB0IE1FUkdFIFBBUlRJ VElPTlMgKHRwXzBfMSwgdHBfMV8yKSBJTlRPIHRwXzBfMjsgLS1lcnJvcgogRVJST1I6ICBtdXN0 IGJlIG93bmVyIG9mIHRhYmxlIHQKIFJFU0VUIFNFU1NJT04gQVVUSE9SSVpBVElPTjsKIEFMVEVS IFRBQkxFIHQgT1dORVIgVE8gcmVncmVzc19wYXJ0aXRpb25fbWVyZ2VfYm9iOwogU0VUIFNFU1NJ T04gQVVUSE9SSVpBVElPTiByZWdyZXNzX3BhcnRpdGlvbl9tZXJnZV9ib2I7Ci1BTFRFUiBUQUJM RSB0IE1FUkdFIFBBUlRJVElPTlMgKHRwXzBfMSwgdHBfMV8yKSBJTlRPIHRwXzBfMjsKK0FMVEVS IFRBQkxFIHQgTUVSR0UgUEFSVElUSU9OUyAodHBfMF8xLCB0cF8xXzIpIElOVE8gdHBfMF8yOyAt LWVycm9yCiBFUlJPUjogIG11c3QgYmUgb3duZXIgb2YgdGFibGUgdHBfMF8xCiBSRVNFVCBTRVNT SU9OIEFVVEhPUklaQVRJT047CiBBTFRFUiBUQUJMRSB0cF8wXzEgT1dORVIgVE8gcmVncmVzc19w YXJ0aXRpb25fbWVyZ2VfYm9iOwogU0VUIFNFU1NJT04gQVVUSE9SSVpBVElPTiByZWdyZXNzX3Bh cnRpdGlvbl9tZXJnZV9ib2I7Ci1BTFRFUiBUQUJMRSB0IE1FUkdFIFBBUlRJVElPTlMgKHRwXzBf MSwgdHBfMV8yKSBJTlRPIHRwXzBfMjsKK0FMVEVSIFRBQkxFIHQgTUVSR0UgUEFSVElUSU9OUyAo dHBfMF8xLCB0cF8xXzIpIElOVE8gdHBfMF8yOyAtLWVycm9yCiBFUlJPUjogIG11c3QgYmUgb3du ZXIgb2YgdGFibGUgdHBfMV8yCiBSRVNFVCBTRVNTSU9OIEFVVEhPUklaQVRJT047CiBBTFRFUiBU QUJMRSB0cF8xXzIgT1dORVIgVE8gcmVncmVzc19wYXJ0aXRpb25fbWVyZ2VfYm9iOwogU0VUIFNF U1NJT04gQVVUSE9SSVpBVElPTiByZWdyZXNzX3BhcnRpdGlvbl9tZXJnZV9ib2I7Ci1BTFRFUiBU QUJMRSB0IE1FUkdFIFBBUlRJVElPTlMgKHRwXzBfMSwgdHBfMV8yKSBJTlRPIHRwXzBfMjsKK0FM VEVSIFRBQkxFIHQgTUVSR0UgUEFSVElUSU9OUyAodHBfMF8xLCB0cF8xXzIpIElOVE8gdHBfMF8y OyAtLW9rCiBSRVNFVCBTRVNTSU9OIEFVVEhPUklaQVRJT047CiBEUk9QIFRBQkxFIHQ7Ci1SRVZP S0UgQUxMIE9OIFNDSEVNQSBwYXJ0aXRpb25zX21lcmdlX3NjaGVtYSBGUk9NIHJlZ3Jlc3NfcGFy dGl0aW9uX21lcmdlX2FsaWNlOwotUkVWT0tFIEFMTCBPTiBTQ0hFTUEgcGFydGl0aW9uc19tZXJn ZV9zY2hlbWEgRlJPTSByZWdyZXNzX3BhcnRpdGlvbl9tZXJnZV9ib2I7Ci1EUk9QIFJPTEUgcmVn cmVzc19wYXJ0aXRpb25fbWVyZ2VfYWxpY2U7Ci1EUk9QIFJPTEUgcmVncmVzc19wYXJ0aXRpb25f bWVyZ2VfYm9iOwogLS0gVGVzdDogd2UgY2FuJ3QgbWVyZ2UgcGFydGl0aW9ucyB3aXRoIGRpZmZl cmVudCBvd25lcnMKLUNSRUFURSBST0xFIHJlZ3Jlc3NfcGFydGl0aW9uc19tZXJnZV9hbGljZTsK LUNSRUFURSBST0xFIHJlZ3Jlc3NfcGFydGl0aW9uc19tZXJnZV9ib2I7Ci1HUkFOVCBBTEwgT04g U0NIRU1BIHBhcnRpdGlvbnNfbWVyZ2Vfc2NoZW1hIFRPIHJlZ3Jlc3NfcGFydGl0aW9uc19tZXJn ZV9hbGljZTsKLUdSQU5UIEFMTCBPTiBTQ0hFTUEgcGFydGl0aW9uc19tZXJnZV9zY2hlbWEgVE8g cmVncmVzc19wYXJ0aXRpb25zX21lcmdlX2JvYjsKLVNFVCBTRVNTSU9OIEFVVEhPUklaQVRJT04g cmVncmVzc19wYXJ0aXRpb25zX21lcmdlX2FsaWNlOwogQ1JFQVRFIFRBQkxFIHRwXzBfMShpIGlu dCk7Ci1SRVNFVCBTRVNTSU9OIEFVVEhPUklaQVRJT047Ci1TRVQgU0VTU0lPTiBBVVRIT1JJWkFU SU9OIHJlZ3Jlc3NfcGFydGl0aW9uc19tZXJnZV9ib2I7CitBTFRFUiBUQUJMRSB0cF8wXzEgT1dO RVIgVE8gcmVncmVzc19wYXJ0aXRpb25fbWVyZ2VfYWxpY2U7CiBDUkVBVEUgVEFCTEUgdHBfMV8y KGkgaW50KTsKLVJFU0VUIFNFU1NJT04gQVVUSE9SSVpBVElPTjsKK0FMVEVSIFRBQkxFIHRwXzFf MiBPV05FUiBUTyByZWdyZXNzX3BhcnRpdGlvbl9tZXJnZV9ib2I7CiBDUkVBVEUgVEFCTEUgdCAo aSBpbnQpIFBBUlRJVElPTiBCWSBSQU5HRSAoaSk7CiBBTFRFUiBUQUJMRSB0IEFUVEFDSCBQQVJU SVRJT04gdHBfMF8xIEZPUiBWQUxVRVMgRlJPTSAoMCkgVE8gKDEpOwogQUxURVIgVEFCTEUgdCBB VFRBQ0ggUEFSVElUSU9OIHRwXzFfMiBGT1IgVkFMVUVTIEZST00gKDEpIFRPICgyKTsKLS0tIE93 bmVyIGlzICdyZWdyZXNzX3BhcnRpdGlvbnNfbWVyZ2VfYWxpY2UnOgorLS0gT3duZXIgaXMgJ3Jl Z3Jlc3NfcGFydGl0aW9uX21lcmdlX2FsaWNlJzoKIFxkdCB0cF8wXzEKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIExpc3Qgb2YgdGFibGVzCi0gICAgICAgICBTY2hlbWEgICAgICAgICAg fCAgTmFtZSAgfCBUeXBlICB8ICAgICAgICAgICAgIE93bmVyICAgICAgICAgICAgICAKLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQotIHBhcnRpdGlvbnNfbWVyZ2Vfc2NoZW1hIHwgdHBfMF8xIHwgdGFibGUg fCByZWdyZXNzX3BhcnRpdGlvbnNfbWVyZ2VfYWxpY2UKKyAgICAgICAgIFNjaGVtYSAgICAgICAg ICB8ICBOYW1lICB8IFR5cGUgIHwgICAgICAgICAgICAgT3duZXIgICAgICAgICAgICAgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorIHBhcnRpdGlvbnNfbWVyZ2Vfc2NoZW1hIHwgdHBfMF8xIHwgdGFibGUg fCByZWdyZXNzX3BhcnRpdGlvbl9tZXJnZV9hbGljZQogKDEgcm93KQogCi0tLSBPd25lciBpcyAn cmVncmVzc19wYXJ0aXRpb25zX21lcmdlX2JvYic6CistLSBPd25lciBpcyAncmVncmVzc19wYXJ0 aXRpb25fbWVyZ2VfYm9iJzoKIFxkdCB0cF8xXzIKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgTGlzdCBvZiB0YWJsZXMKLSAgICAgICAgIFNjaGVtYSAgICAgICAgICB8ICBOYW1lICB8IFR5 cGUgIHwgICAgICAgICAgICBPd25lciAgICAgICAgICAgICAKLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0rLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSBw YXJ0aXRpb25zX21lcmdlX3NjaGVtYSB8IHRwXzFfMiB8IHRhYmxlIHwgcmVncmVzc19wYXJ0aXRp b25zX21lcmdlX2JvYgorICAgICAgICAgU2NoZW1hICAgICAgICAgIHwgIE5hbWUgIHwgVHlwZSAg fCAgICAgICAgICAgIE93bmVyICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tKy0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBwYXJ0aXRp b25zX21lcmdlX3NjaGVtYSB8IHRwXzFfMiB8IHRhYmxlIHwgcmVncmVzc19wYXJ0aXRpb25fbWVy Z2VfYm9iCiAoMSByb3cpCiAKIC0tIEVSUk9SOiAgcGFydGl0aW9ucyBiZWluZyBtZXJnZWQgaGF2 ZSBkaWZmZXJlbnQgb3duZXJzCiBBTFRFUiBUQUJMRSB0IE1FUkdFIFBBUlRJVElPTlMgKHRwXzBf MSwgdHBfMV8yKSBJTlRPIHRwXzBfMjsKIEVSUk9SOiAgcGFydGl0aW9ucyBiZWluZyBtZXJnZWQg aGF2ZSBkaWZmZXJlbnQgb3duZXJzCiBEUk9QIFRBQkxFIHQ7Ci1SRVZPS0UgQUxMIE9OIFNDSEVN QSBwYXJ0aXRpb25zX21lcmdlX3NjaGVtYSBGUk9NIHJlZ3Jlc3NfcGFydGl0aW9uc19tZXJnZV9h bGljZTsKLVJFVk9LRSBBTEwgT04gU0NIRU1BIHBhcnRpdGlvbnNfbWVyZ2Vfc2NoZW1hIEZST00g cmVncmVzc19wYXJ0aXRpb25zX21lcmdlX2JvYjsKLURST1AgUk9MRSByZWdyZXNzX3BhcnRpdGlv bnNfbWVyZ2VfYWxpY2U7Ci1EUk9QIFJPTEUgcmVncmVzc19wYXJ0aXRpb25zX21lcmdlX2JvYjsK K1JFVk9LRSBBTEwgT04gU0NIRU1BIHBhcnRpdGlvbnNfbWVyZ2Vfc2NoZW1hIEZST00gcmVncmVz c19wYXJ0aXRpb25fbWVyZ2VfYWxpY2U7CitSRVZPS0UgQUxMIE9OIFNDSEVNQSBwYXJ0aXRpb25z X21lcmdlX3NjaGVtYSBGUk9NIHJlZ3Jlc3NfcGFydGl0aW9uX21lcmdlX2JvYjsKK0RST1AgUk9M RSByZWdyZXNzX3BhcnRpdGlvbl9tZXJnZV9hbGljZTsKK0RST1AgUk9MRSByZWdyZXNzX3BhcnRp dGlvbl9tZXJnZV9ib2I7CiAtLSBUZXN0IGZvciBoYXNoIHBhcnRpdGlvbmVkIHRhYmxlCiBDUkVB VEUgVEFCTEUgdCAoaSBpbnQpIFBBUlRJVElPTiBCWSBIQVNIKGkpOwogQ1JFQVRFIFRBQkxFIHRw MSBQQVJUSVRJT04gT0YgdCBGT1IgVkFMVUVTIFdJVEggKE1PRFVMVVMgMiwgUkVNQUlOREVSIDAp OwpAQCAtODg1LDYgKzg3NCw3IEBAIERST1AgVEFCTEUgdDsKIC0tICogU1RPUkFHRSBpcyB0aGUg c2FtZSBhcyBTVE9SQUdFIGZvciBwYXJ0aXRpb25lZCB0YWJsZQogLS0gKiBHRU5FUkFURUQgYW5k IENPTlNUUkFJTlRTIGFyZSB0aGUgc2FtZSBhcyBHRU5FUkFURUQgYW5kIENPTlNUUkFJTlRTIGZv ciBwYXJ0aXRpb25lZCB0YWJsZQogLS0gKiBUUklHR0VSUyBhcmUgdGhlIHNhbWUgYXMgVFJJR0dF UlMgZm9yIHBhcnRpdGlvbmVkIHRhYmxlCitcc2V0IEhJREVfVE9BU1RfQ09NUFJFU1NJT04gZmFs c2UKIENSRUFURSBUQUJMRSB0CiAoaSBpbnQgTk9UIE5VTEwsCiAgdCB0ZXh0IFNUT1JBR0UgRVhU RU5ERUQgQ09NUFJFU1NJT04gcGdseiBERUZBVUxUICdkZWZhdWx0X3QnLApAQCAtOTI4LDEzICs5 MTgsMTMgQEAgQ1JFQVRFIFRSSUdHRVIgdHBfMF8xX2JlZm9yZV9pbnNlcnRfcm93X3RyaWdnZXIg QkVGT1JFIElOU0VSVCBPTiB0cF8wXzEgRk9SIEVBQ0gKIENSRUFURSBUUklHR0VSIHRwXzFfMl9i ZWZvcmVfaW5zZXJ0X3Jvd190cmlnZ2VyIEJFRk9SRSBJTlNFUlQgT04gdHBfMV8yIEZPUiBFQUNI IFJPVwogICBFWEVDVVRFIFBST0NFRFVSRSB0cmlnZ2VyX2Z1bmN0aW9uKCd0cF8xXzInKTsKIFxk KyB0cF8wXzEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBU YWJsZSAicGFydGl0aW9uc19tZXJnZV9zY2hlbWEudHBfMF8xIgotIENvbHVtbiB8ICBUeXBlICAg fCBDb2xsYXRpb24gfCBOdWxsYWJsZSB8ICAgICAgICAgICAgICAgICAgICAgRGVmYXVsdCAgICAg ICAgICAgICAgICAgICAgIHwgU3RvcmFnZSB8IFN0YXRzIHRhcmdldCB8IERlc2NyaXB0aW9uIAot LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tLQotIGkgICAgICB8IGludGVnZXIgfCAgICAgICAgICAgfCBub3QgbnVs bCB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcGxh aW4gICB8ICAgICAgICAgICAgICB8IHRwXzBfMS5pCi0gdCAgICAgIHwgdGV4dCAgICB8ICAgICAg ICAgICB8ICAgICAgICAgIHwgJ2RlZmF1bHRfdHBfMF8xJzo6dGV4dCAgICAgICAgICAgICAgICAg ICAgICAgICAgfCBtYWluICAgIHwgICAgICAgICAgICAgIHwgCi0gYiAgICAgIHwgYmlnaW50ICB8 ICAgICAgICAgICB8IG5vdCBudWxsIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgfCBwbGFpbiAgIHwgICAgICAgICAgICAgIHwgCi0gZCAgICAgIHwgZGF0 ZSAgICB8ICAgICAgICAgICB8ICAgICAgICAgIHwgZ2VuZXJhdGVkIGFsd2F5cyBhcyAoJzAyLTAy LTIwMjInOjpkYXRlKSBzdG9yZWQgfCBwbGFpbiAgIHwgICAgICAgICAgICAgIHwgCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRhYmxlICJwYXJ0 aXRpb25zX21lcmdlX3NjaGVtYS50cF8wXzEiCisgQ29sdW1uIHwgIFR5cGUgICB8IENvbGxhdGlv biB8IE51bGxhYmxlIHwgICAgICAgICAgICAgICAgICAgICBEZWZhdWx0ICAgICAgICAgICAgICAg ICAgICAgfCBTdG9yYWdlIHwgQ29tcHJlc3Npb24gfCBTdGF0cyB0YXJnZXQgfCBEZXNjcmlwdGlv biAKKy0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLQorIGkgICAgICB8IGludGVnZXIgfCAg ICAgICAgICAgfCBub3QgbnVsbCB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHwgcGxhaW4gICB8ICAgICAgICAgICAgIHwgICAgICAgICAgICAgIHwgdHBf MF8xLmkKKyB0ICAgICAgfCB0ZXh0ICAgIHwgICAgICAgICAgIHwgICAgICAgICAgfCAnZGVmYXVs dF90cF8wXzEnOjp0ZXh0ICAgICAgICAgICAgICAgICAgICAgICAgICB8IG1haW4gICAgfCAgICAg ICAgICAgICB8ICAgICAgICAgICAgICB8IAorIGIgICAgICB8IGJpZ2ludCAgfCAgICAgICAgICAg fCBub3QgbnVsbCB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHwgcGxhaW4gICB8ICAgICAgICAgICAgIHwgICAgICAgICAgICAgIHwgCisgZCAgICAgIHwg ZGF0ZSAgICB8ICAgICAgICAgICB8ICAgICAgICAgIHwgZ2VuZXJhdGVkIGFsd2F5cyBhcyAoJzAy LTAyLTIwMjInOjpkYXRlKSBzdG9yZWQgfCBwbGFpbiAgIHwgICAgICAgICAgICAgfCAgICAgICAg ICAgICAgfCAKIFBhcnRpdGlvbiBvZjogdCBGT1IgVkFMVUVTIEZST00gKDApIFRPICgxKQogUGFy dGl0aW9uIGNvbnN0cmFpbnQ6ICgoYWJzKGkpIElTIE5PVCBOVUxMKSBBTkQgKGFicyhpKSA+PSAw KSBBTkQgKGFicyhpKSA8IDEpKQogQ2hlY2sgY29uc3RyYWludHM6CkBAIC05NTIsMTMgKzk0Miwx MyBAQCBUcmlnZ2VyczoKIAogQUxURVIgVEFCTEUgdCBNRVJHRSBQQVJUSVRJT05TICh0cF8wXzEs IHRwXzFfMikgSU5UTyB0cF8wXzE7CiBcZCsgdHBfMF8xCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgVGFibGUgInBhcnRpdGlvbnNfbWVyZ2Vfc2NoZW1hLnRw XzBfMSIKLSBDb2x1bW4gfCAgVHlwZSAgIHwgQ29sbGF0aW9uIHwgTnVsbGFibGUgfCAgICAgICAg ICAgICAgICAgICAgIERlZmF1bHQgICAgICAgICAgICAgICAgICAgICB8IFN0b3JhZ2UgIHwgU3Rh dHMgdGFyZ2V0IHwgRGVzY3JpcHRpb24gCi0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0r LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLQotIGkgICAgICB8IGlu dGVnZXIgfCAgICAgICAgICAgfCBub3QgbnVsbCB8ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHwgcGxhaW4gICAgfCAgICAgICAgICAgICAgfCAKLSB0ICAg ICAgfCB0ZXh0ICAgIHwgICAgICAgICAgIHwgICAgICAgICAgfCAnZGVmYXVsdF90Jzo6dGV4dCAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGV4dGVuZGVkIHwgICAgICAgICAgICAgIHwg Ci0gYiAgICAgIHwgYmlnaW50ICB8ICAgICAgICAgICB8IG5vdCBudWxsIHwgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwbGFpbiAgICB8ICAgICAgICAg ICAgICB8IAotIGQgICAgICB8IGRhdGUgICAgfCAgICAgICAgICAgfCAgICAgICAgICB8IGdlbmVy YXRlZCBhbHdheXMgYXMgKCcwMS0wMS0yMDIyJzo6ZGF0ZSkgc3RvcmVkIHwgcGxhaW4gICAgfCAg ICAgICAgICAgICAgfCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgVGFibGUgInBhcnRpdGlvbnNfbWVyZ2Vfc2NoZW1hLnRwXzBfMSIKKyBDb2x1 bW4gfCAgVHlwZSAgIHwgQ29sbGF0aW9uIHwgTnVsbGFibGUgfCAgICAgICAgICAgICAgICAgICAg IERlZmF1bHQgICAgICAgICAgICAgICAgICAgICB8IFN0b3JhZ2UgIHwgQ29tcHJlc3Npb24gfCBT dGF0cyB0YXJnZXQgfCBEZXNjcmlwdGlvbiAKKy0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0t LSstLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LS0KKyBpICAgICAgfCBpbnRlZ2VyIHwgICAgICAgICAgIHwgbm90IG51bGwgfCAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHBsYWluICAgIHwgICAgICAg ICAgICAgfCAgICAgICAgICAgICAgfCAKKyB0ICAgICAgfCB0ZXh0ICAgIHwgICAgICAgICAgIHwg ICAgICAgICAgfCAnZGVmYXVsdF90Jzo6dGV4dCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB8IGV4dGVuZGVkIHwgcGdseiAgICAgICAgfCAgICAgICAgICAgICAgfCAKKyBiICAgICAgfCBi aWdpbnQgIHwgICAgICAgICAgIHwgbm90IG51bGwgfCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB8IHBsYWluICAgIHwgICAgICAgICAgICAgfCAgICAgICAg ICAgICAgfCAKKyBkICAgICAgfCBkYXRlICAgIHwgICAgICAgICAgIHwgICAgICAgICAgfCBnZW5l cmF0ZWQgYWx3YXlzIGFzICgnMDEtMDEtMjAyMic6OmRhdGUpIHN0b3JlZCB8IHBsYWluICAgIHwg ICAgICAgICAgICAgfCAgICAgICAgICAgICAgfCAKIFBhcnRpdGlvbiBvZjogdCBGT1IgVkFMVUVT IEZST00gKDApIFRPICgyKQogUGFydGl0aW9uIGNvbnN0cmFpbnQ6ICgoYWJzKGkpIElTIE5PVCBO VUxMKSBBTkQgKGFicyhpKSA+PSAwKSBBTkQgKGFicyhpKSA8IDIpKQogQ2hlY2sgY29uc3RyYWlu dHM6CkBAIC05ODMsNiArOTczLDcgQEAgU0VMRUNUIHRhYmxlb2lkOjpyZWdjbGFzcywgKiBGUk9N IHQgT1JERVIgQlkgYjsKIAogRFJPUCBUQUJMRSB0OwogRFJPUCBGVU5DVElPTiB0cmlnZ2VyX2Z1 bmN0aW9uKCk7Citcc2V0IEhJREVfVE9BU1RfQ09NUFJFU1NJT04gdHJ1ZQogLS0gVGVzdCBNRVJH RSBQQVJUSVRJT05TIHdpdGggbm90IHZhbGlkIGZvcmVpZ24ga2V5IGNvbnN0cmFpbnQKIENSRUFU RSBUQUJMRSB0IChpIElOVCBQUklNQVJZIEtFWSkgUEFSVElUSU9OIEJZIFJBTkdFIChpKTsKIENS RUFURSBUQUJMRSB0cF8wXzEgUEFSVElUSU9OIE9GIHQgRk9SIFZBTFVFUyBGUk9NICgwKSBUTyAo MSk7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9wYXJ0aXRpb25fbWVyZ2Uuc3Fs IGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvcGFydGl0aW9uX21lcmdlLnNxbAppbmRleCBjZmI2MDgz ZTEyYy4uNzI3NWM4ZGExZmEgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3BhcnRp dGlvbl9tZXJnZS5zcWwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvcGFydGl0aW9uX21lcmdl LnNxbApAQCAtMTExLDcgKzExMSw3IEBAIEVYRUNVVEUgZ2V0X3BhcnRpdGlvbl9pbmZvKCd7c2Fs ZXNfcmFuZ2V9Jyk7CiAKIFNFTEVDVCAqIEZST00gcGdfaW5kZXhlcyBXSEVSRSB0YWJsZW5hbWUg PSAnc2FsZXNfZmViX21hcl9hcHIyMDIyJyBhbmQgc2NoZW1hbmFtZSA9ICdwYXJ0aXRpb25zX21l cmdlX3NjaGVtYTInOwogCi1TRUxFQ1QgdGFibGVvaWQ6OnJlZ2NsYXNzLCAqIEZST00gc2FsZXNf cmFuZ2UgT1JERVIgQlkgdGFibGVvaWQsIHNhbGVzcGVyc29uX2lkOworU0VMRUNUIHRhYmxlb2lk OjpyZWdjbGFzcywgKiBGUk9NIHNhbGVzX3JhbmdlIE9SREVSIEJZIHRhYmxlb2lkOjpyZWdjbGFz czo6dGV4dCBDT0xMQVRFICJDIiwgc2FsZXNwZXJzb25faWQ7CiAKIC0tIFVzZSBpbmRleHNjYW4g Zm9yIHRlc3RpbmcgaW5kZXhlcwogU0VUIGVuYWJsZV9zZXFzY2FuID0gT0ZGOwpAQCAtMzIwLDEx ICszMjAsMTEgQEAgSU5TRVJUIElOVE8gc2FsZXNfcmFuZ2UgVkFMVUVTCiAgICgxMywgJ0dhbmRp JywgICAgMzc3LCAgJzIwMjItMDEtMDknKSwKICAgKDE0LCAnU21pdGgnLCAgICA1MTAsICAnMjAy Mi0wNS0wNCcpOwogCi1TRUxFQ1QgdGFibGVvaWQ6OnJlZ2NsYXNzLCAqIEZST00gc2FsZXNfYXBy MjAyMiBPUkRFUiBCWSB0YWJsZW9pZCwgc2FsZXNwZXJzb25faWQ7CitTRUxFQ1QgdGFibGVvaWQ6 OnJlZ2NsYXNzLCAqIEZST00gc2FsZXNfYXByMjAyMiBPUkRFUiBCWSB0YWJsZW9pZDo6cmVnY2xh c3M6OnRleHQgQ09MTEFURSAiQyIsIHNhbGVzcGVyc29uX2lkOwogCiBBTFRFUiBUQUJMRSBzYWxl c19hcHIyMDIyIE1FUkdFIFBBUlRJVElPTlMgKHNhbGVzX2FwcjIwMjJfMDFfMTAsIHNhbGVzX2Fw cjIwMjJfMTBfMjAsIHNhbGVzX2FwcjIwMjJfMjBfMzApIElOVE8gc2FsZXNfYXByX2FsbDsKIAot U0VMRUNUIHRhYmxlb2lkOjpyZWdjbGFzcywgKiBGUk9NIHNhbGVzX2FwcjIwMjIgT1JERVIgQlkg dGFibGVvaWQsIHNhbGVzcGVyc29uX2lkOworU0VMRUNUIHRhYmxlb2lkOjpyZWdjbGFzcywgKiBG Uk9NIHNhbGVzX2FwcjIwMjIgT1JERVIgQlkgdGFibGVvaWQ6OnJlZ2NsYXNzOjp0ZXh0IENPTExB VEUgIkMiLCBzYWxlc3BlcnNvbl9pZDsKIAogRFJPUCBUQUJMRSBzYWxlc19yYW5nZTsKIApAQCAt NDEzLDcgKzQxMyw3IEBAIEFMVEVSIFRBQkxFIHNhbGVzX2xpc3QgTUVSR0UgUEFSVElUSU9OUyAo c2FsZXNfd2VzdCwgc2FsZXNfZWFzdCwgc2FsZXNfY2VudHJhbCkKIC0tIHNob3cgcGFydGl0aW9u cyB3aXRoIGNvbmRpdGlvbnM6CiBFWEVDVVRFIGdldF9wYXJ0aXRpb25faW5mbygne3NhbGVzX2xp c3R9Jyk7CiAKLVNFTEVDVCB0YWJsZW9pZDo6cmVnY2xhc3MsICogRlJPTSBzYWxlc19saXN0IE9S REVSIEJZIHRhYmxlb2lkLCBzYWxlc3BlcnNvbl9pZDsKK1NFTEVDVCB0YWJsZW9pZDo6cmVnY2xh c3MsICogRlJPTSBzYWxlc19saXN0IE9SREVSIEJZIHRhYmxlb2lkOjpyZWdjbGFzczo6dGV4dCBD T0xMQVRFICJDIiwgc2FsZXNwZXJzb25faWQ7CiAKIC0tIFVzZSBpbmRleHNjYW4gZm9yIHRlc3Rp bmcgaW5kZXhlcyBhZnRlciBtZXJnaW5nIHBhcnRpdGlvbnMKIFNFVCBlbmFibGVfc2Vxc2NhbiA9 IE9GRjsKQEAgLTQ2MSw3ICs0NjEsNiBAQCBDUkVBVEUgSU5ERVggdGlkeCBPTiB0KGkpOwogQUxU RVIgVEFCTEUgdCBNRVJHRSBQQVJUSVRJT05TICh0cF8xXzIsIHRwXzBfMSkgSU5UTyB0cF8xXzI7 CiAKIC0tIEluZGV4bmFtZSB2YWx1ZXMgc2hvdWxkIGJlICd0cF8xXzJfcGtleScgYW5kICd0cF8x XzJfaV9pZHgnLgotLS0gTm90LW51bGwgY29uc3RyYWludCBuYW1lIHNob3VsZCBiZSAndHBfMV8y X2lfbm90X251bGwnLgogXGQrIHRwXzFfMgogCiBEUk9QIFRBQkxFIHQ7CkBAIC01NjgsNjEgKzU2 Nyw1MCBAQCBDUkVBVEUgVEFCTEUgdHBfMF8xIFBBUlRJVElPTiBPRiB0IEZPUiBWQUxVRVMgRlJP TSAoMCkgVE8gKDEpOwogQ1JFQVRFIFRBQkxFIHRwXzFfMiBQQVJUSVRJT04gT0YgdCBGT1IgVkFM VUVTIEZST00gKDEpIFRPICgyKTsKIAogU0VUIFNFU1NJT04gQVVUSE9SSVpBVElPTiByZWdyZXNz X3BhcnRpdGlvbl9tZXJnZV9ib2I7Ci1BTFRFUiBUQUJMRSB0IE1FUkdFIFBBUlRJVElPTlMgKHRw XzBfMSwgdHBfMV8yKSBJTlRPIHRwXzBfMjsKK0FMVEVSIFRBQkxFIHQgTUVSR0UgUEFSVElUSU9O UyAodHBfMF8xLCB0cF8xXzIpIElOVE8gdHBfMF8yOyAtLWVycm9yCiBSRVNFVCBTRVNTSU9OIEFV VEhPUklaQVRJT047CiAKIEFMVEVSIFRBQkxFIHQgT1dORVIgVE8gcmVncmVzc19wYXJ0aXRpb25f bWVyZ2VfYm9iOwogU0VUIFNFU1NJT04gQVVUSE9SSVpBVElPTiByZWdyZXNzX3BhcnRpdGlvbl9t ZXJnZV9ib2I7Ci1BTFRFUiBUQUJMRSB0IE1FUkdFIFBBUlRJVElPTlMgKHRwXzBfMSwgdHBfMV8y KSBJTlRPIHRwXzBfMjsKK0FMVEVSIFRBQkxFIHQgTUVSR0UgUEFSVElUSU9OUyAodHBfMF8xLCB0 cF8xXzIpIElOVE8gdHBfMF8yOyAtLWVycm9yCiBSRVNFVCBTRVNTSU9OIEFVVEhPUklaQVRJT047 CiAKIEFMVEVSIFRBQkxFIHRwXzBfMSBPV05FUiBUTyByZWdyZXNzX3BhcnRpdGlvbl9tZXJnZV9i b2I7CiBTRVQgU0VTU0lPTiBBVVRIT1JJWkFUSU9OIHJlZ3Jlc3NfcGFydGl0aW9uX21lcmdlX2Jv YjsKLUFMVEVSIFRBQkxFIHQgTUVSR0UgUEFSVElUSU9OUyAodHBfMF8xLCB0cF8xXzIpIElOVE8g dHBfMF8yOworQUxURVIgVEFCTEUgdCBNRVJHRSBQQVJUSVRJT05TICh0cF8wXzEsIHRwXzFfMikg SU5UTyB0cF8wXzI7IC0tZXJyb3IKIFJFU0VUIFNFU1NJT04gQVVUSE9SSVpBVElPTjsKIAogQUxU RVIgVEFCTEUgdHBfMV8yIE9XTkVSIFRPIHJlZ3Jlc3NfcGFydGl0aW9uX21lcmdlX2JvYjsKIFNF VCBTRVNTSU9OIEFVVEhPUklaQVRJT04gcmVncmVzc19wYXJ0aXRpb25fbWVyZ2VfYm9iOwotQUxU RVIgVEFCTEUgdCBNRVJHRSBQQVJUSVRJT05TICh0cF8wXzEsIHRwXzFfMikgSU5UTyB0cF8wXzI7 CitBTFRFUiBUQUJMRSB0IE1FUkdFIFBBUlRJVElPTlMgKHRwXzBfMSwgdHBfMV8yKSBJTlRPIHRw XzBfMjsgLS1vawogUkVTRVQgU0VTU0lPTiBBVVRIT1JJWkFUSU9OOwogCiBEUk9QIFRBQkxFIHQ7 Ci1SRVZPS0UgQUxMIE9OIFNDSEVNQSBwYXJ0aXRpb25zX21lcmdlX3NjaGVtYSBGUk9NIHJlZ3Jl c3NfcGFydGl0aW9uX21lcmdlX2FsaWNlOwotUkVWT0tFIEFMTCBPTiBTQ0hFTUEgcGFydGl0aW9u c19tZXJnZV9zY2hlbWEgRlJPTSByZWdyZXNzX3BhcnRpdGlvbl9tZXJnZV9ib2I7Ci1EUk9QIFJP TEUgcmVncmVzc19wYXJ0aXRpb25fbWVyZ2VfYWxpY2U7Ci1EUk9QIFJPTEUgcmVncmVzc19wYXJ0 aXRpb25fbWVyZ2VfYm9iOwotCiAKIC0tIFRlc3Q6IHdlIGNhbid0IG1lcmdlIHBhcnRpdGlvbnMg d2l0aCBkaWZmZXJlbnQgb3duZXJzCi1DUkVBVEUgUk9MRSByZWdyZXNzX3BhcnRpdGlvbnNfbWVy Z2VfYWxpY2U7Ci1DUkVBVEUgUk9MRSByZWdyZXNzX3BhcnRpdGlvbnNfbWVyZ2VfYm9iOwotR1JB TlQgQUxMIE9OIFNDSEVNQSBwYXJ0aXRpb25zX21lcmdlX3NjaGVtYSBUTyByZWdyZXNzX3BhcnRp dGlvbnNfbWVyZ2VfYWxpY2U7Ci1HUkFOVCBBTEwgT04gU0NIRU1BIHBhcnRpdGlvbnNfbWVyZ2Vf c2NoZW1hIFRPIHJlZ3Jlc3NfcGFydGl0aW9uc19tZXJnZV9ib2I7Ci1TRVQgU0VTU0lPTiBBVVRI T1JJWkFUSU9OIHJlZ3Jlc3NfcGFydGl0aW9uc19tZXJnZV9hbGljZTsKIENSRUFURSBUQUJMRSB0 cF8wXzEoaSBpbnQpOwotUkVTRVQgU0VTU0lPTiBBVVRIT1JJWkFUSU9OOwotU0VUIFNFU1NJT04g QVVUSE9SSVpBVElPTiByZWdyZXNzX3BhcnRpdGlvbnNfbWVyZ2VfYm9iOworQUxURVIgVEFCTEUg dHBfMF8xIE9XTkVSIFRPIHJlZ3Jlc3NfcGFydGl0aW9uX21lcmdlX2FsaWNlOwogQ1JFQVRFIFRB QkxFIHRwXzFfMihpIGludCk7Ci1SRVNFVCBTRVNTSU9OIEFVVEhPUklaQVRJT047CitBTFRFUiBU QUJMRSB0cF8xXzIgT1dORVIgVE8gcmVncmVzc19wYXJ0aXRpb25fbWVyZ2VfYm9iOwogCiBDUkVB VEUgVEFCTEUgdCAoaSBpbnQpIFBBUlRJVElPTiBCWSBSQU5HRSAoaSk7CiAKIEFMVEVSIFRBQkxF IHQgQVRUQUNIIFBBUlRJVElPTiB0cF8wXzEgRk9SIFZBTFVFUyBGUk9NICgwKSBUTyAoMSk7CiBB TFRFUiBUQUJMRSB0IEFUVEFDSCBQQVJUSVRJT04gdHBfMV8yIEZPUiBWQUxVRVMgRlJPTSAoMSkg VE8gKDIpOwogCi0tLSBPd25lciBpcyAncmVncmVzc19wYXJ0aXRpb25zX21lcmdlX2FsaWNlJzoK Ky0tIE93bmVyIGlzICdyZWdyZXNzX3BhcnRpdGlvbl9tZXJnZV9hbGljZSc6CiBcZHQgdHBfMF8x Ci0tLSBPd25lciBpcyAncmVncmVzc19wYXJ0aXRpb25zX21lcmdlX2JvYic6CistLSBPd25lciBp cyAncmVncmVzc19wYXJ0aXRpb25fbWVyZ2VfYm9iJzoKIFxkdCB0cF8xXzIKIAogLS0gRVJST1I6 ICBwYXJ0aXRpb25zIGJlaW5nIG1lcmdlZCBoYXZlIGRpZmZlcmVudCBvd25lcnMKIEFMVEVSIFRB QkxFIHQgTUVSR0UgUEFSVElUSU9OUyAodHBfMF8xLCB0cF8xXzIpIElOVE8gdHBfMF8yOwogCiBE Uk9QIFRBQkxFIHQ7Ci1SRVZPS0UgQUxMIE9OIFNDSEVNQSBwYXJ0aXRpb25zX21lcmdlX3NjaGVt YSBGUk9NIHJlZ3Jlc3NfcGFydGl0aW9uc19tZXJnZV9hbGljZTsKLVJFVk9LRSBBTEwgT04gU0NI RU1BIHBhcnRpdGlvbnNfbWVyZ2Vfc2NoZW1hIEZST00gcmVncmVzc19wYXJ0aXRpb25zX21lcmdl X2JvYjsKLURST1AgUk9MRSByZWdyZXNzX3BhcnRpdGlvbnNfbWVyZ2VfYWxpY2U7Ci1EUk9QIFJP TEUgcmVncmVzc19wYXJ0aXRpb25zX21lcmdlX2JvYjsKK1JFVk9LRSBBTEwgT04gU0NIRU1BIHBh cnRpdGlvbnNfbWVyZ2Vfc2NoZW1hIEZST00gcmVncmVzc19wYXJ0aXRpb25fbWVyZ2VfYWxpY2U7 CitSRVZPS0UgQUxMIE9OIFNDSEVNQSBwYXJ0aXRpb25zX21lcmdlX3NjaGVtYSBGUk9NIHJlZ3Jl c3NfcGFydGl0aW9uX21lcmdlX2JvYjsKK0RST1AgUk9MRSByZWdyZXNzX3BhcnRpdGlvbl9tZXJn ZV9hbGljZTsKK0RST1AgUk9MRSByZWdyZXNzX3BhcnRpdGlvbl9tZXJnZV9ib2I7CiAKIAogLS0g VGVzdCBmb3IgaGFzaCBwYXJ0aXRpb25lZCB0YWJsZQpAQCAtNjQ2LDYgKzYzNCw3IEBAIERST1Ag VEFCTEUgdDsKIC0tICogU1RPUkFHRSBpcyB0aGUgc2FtZSBhcyBTVE9SQUdFIGZvciBwYXJ0aXRp b25lZCB0YWJsZQogLS0gKiBHRU5FUkFURUQgYW5kIENPTlNUUkFJTlRTIGFyZSB0aGUgc2FtZSBh cyBHRU5FUkFURUQgYW5kIENPTlNUUkFJTlRTIGZvciBwYXJ0aXRpb25lZCB0YWJsZQogLS0gKiBU UklHR0VSUyBhcmUgdGhlIHNhbWUgYXMgVFJJR0dFUlMgZm9yIHBhcnRpdGlvbmVkIHRhYmxlCitc c2V0IEhJREVfVE9BU1RfQ09NUFJFU1NJT04gZmFsc2UKIAogQ1JFQVRFIFRBQkxFIHQKIChpIGlu dCBOT1QgTlVMTCwKQEAgLTcwNCw2ICs2OTMsNyBAQCBJTlNFUlQgSU5UTyB0KGksIHQsIGIpIFZB TFVFUygxLCBERUZBVUxULCAzKTsKIFNFTEVDVCB0YWJsZW9pZDo6cmVnY2xhc3MsICogRlJPTSB0 IE9SREVSIEJZIGI7CiBEUk9QIFRBQkxFIHQ7CiBEUk9QIEZVTkNUSU9OIHRyaWdnZXJfZnVuY3Rp b24oKTsKK1xzZXQgSElERV9UT0FTVF9DT01QUkVTU0lPTiB0cnVlCiAKIAogLS0gVGVzdCBNRVJH RSBQQVJUSVRJT05TIHdpdGggbm90IHZhbGlkIGZvcmVpZ24ga2V5IGNvbnN0cmFpbnQKLS0gCjIu MzQuMQoK --000000000000416202063d7e8a30--