Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1h7Our-00042y-5I for pgsql-hackers@arkaria.postgresql.org; Fri, 22 Mar 2019 18:29:18 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.89) (envelope-from ) id 1h7Oup-00077l-JQ for pgsql-hackers@arkaria.postgresql.org; Fri, 22 Mar 2019 18:29:15 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1h7Oup-00077e-69 for pgsql-hackers@lists.postgresql.org; Fri, 22 Mar 2019 18:29:15 +0000 Received: from cyclops.postgrespro.ru ([93.174.131.138] helo=mail.postgrespro.ru) by magus.postgresql.org with esmtp (Exim 4.89) (envelope-from ) id 1h7Oul-0004ss-MS for pgsql-hackers@postgresql.org; Fri, 22 Mar 2019 18:29:14 +0000 Received: from localhost (localhost [127.0.0.1]) by mail.postgrespro.ru (Postfix) with ESMTP id 4D34A21C4AFB; Fri, 22 Mar 2019 21:29:10 +0300 (MSK) X-Virus-Scanned: Debian amavisd-new at postgrespro.ru X-Spam-Flag: NO X-Spam-Score: 0 X-Spam-Level: X-Spam-Status: No, score=x tagged_above=-99 required=4 WHITELISTED tests=[] autolearn=unavailable Received: from Zloj-machine (gw.postgrespro.ru [93.174.131.141]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mail.postgrespro.ru (Postfix) with ESMTPSA id EE69621C4AF3; Fri, 22 Mar 2019 21:29:09 +0300 (MSK) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=postgrespro.ru; s=mail; t=1553279350; bh=7H3HVIYI1ibl3zJaySg5KZYyTDejqN5jYGOXlRZKweg=; h=Subject:From:To:Cc:Date:In-Reply-To:References; b=a9RT3ne8ts25WLPzXmOLYuTDDUFyuB7UkTmhjYBrJwHT4oQ+xfizAq2bnNAX+PN4g yMTMBAQKZ5REes81wm3PGbhhKC5lFAlsFESkpxD1H2WWCQI8jlKVjYHqv2cIz7YVhu tDUS9zfoe3GunuygshyXzutC+H1KjvdS2pLcjCdM= Message-ID: Subject: Re: Psql patch to show access methods info From: Sergey Cherkashin To: Nikita Glukhov , Kyotaro HORIGUCHI , David Steele Cc: michael@paquier.xyz, alvherre@2ndquadrant.com, pgsql-hackers@postgresql.org Date: Fri, 22 Mar 2019 21:29:09 +0300 In-Reply-To: References: <2239fec8b8369bb845ecce8d8504adf6c0214ce5.camel@postgrespro.ru> <20181129064741.GB2356@paquier.xyz> <70e94e339dd0fa2be5d3eebec68da7bf@postgrespro.ru> <20190308.135236.65082441.horiguchi.kyotaro@lab.ntt.co.jp> Organization: Postgres Professional Content-Type: multipart/mixed; boundary="=-GSUCKO/84HWbQ1wIA635" X-Mailer: Evolution 3.28.5-0ubuntu0.18.04.1 Mime-Version: 1.0 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk --=-GSUCKO/84HWbQ1wIA635 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 7bit Taking into account the wishes of all the reviewers, the current position of the patch is as follows: The \dA command displays a list of access methods. # \dA List of access methods Name | Type | Handler --------+-------+---------------------- brin | index | brinhandler btree | index | bthandler gin | index | ginhandler gist | index | gisthandler hash | index | hashhandler heap | table | heap_tableam_handler spgist | index | spghandler (7 rows) With + it shows description: # \dA+ List of access methods Name | Type | Handler | Description --------+-------+----------------------+------------------------------- --------- brin | index | brinhandler | block range index (BRIN) access method btree | index | bthandler | b-tree index access method gin | index | ginhandler | GIN index access method gist | index | gisthandler | GiST index access method hash | index | hashhandler | hash index access method heap | table | heap_tableam_handler | heap table access method spgist | index | spghandler | SP-GiST index access method (7 rows) The functionality of the \dAp command has been moved to \dA NAME. Now the user can query the properties of a particular AM (or several, using the search pattern) as follows: # \dA h* Index access method properties AM | Can order | Support unique indexes | Support indexes with multiple columns | Support exclusion constraints | Can include non-key columns ------+-----------+------------------------+--------------------------- ------------+-------------------------------+------------------------ ----- hash | no | no | no | yes | no (1 row) Table access method properties Name | Type | Handler | Description ------+-------+----------------------+-------------------------- heap | table | heap_tableam_handler | heap table access method (1 row) Note that for heap, as well as for future table AM, a separate table is displayed, since it is not clear which properties can be displayed for them. The \dAoc command has been renamed to \dAc. The command displays information about operator classes. The "Input type" field was left, because the user may first be interested in what type of data opclass can work with, and in the second - how it will keep this type inside. Nikita also chose to leave the opfamily field as additional information. # \dAc btree name Index access method operator classes AM | Input type | Storage type | Operator class | Default? -------+------------+--------------+----------------+---------- btree | name | cstring | name_ops | yes (1 row) # \dAc+ btree record Index access method operator classes AM | Input type | Storage type | Operator class | Default? | Operator family | Owner -------+------------+--------------+------------------+----------+----- -------------+------- btree | record | | record_image_ops | no | record_image_ops | zloj btree | record | | record_ops | yes | record_ops | zloj (2 rows) The \dAfo command has been renamed to \dAo. \dAo displays information about operators as follows: # \dAo gin jsonb_ops List operators of family related to access method AM | Opfamily Schema | Opfamily Name | Operator -----+-----------------+---------------+-------------------- gin | pg_catalog | jsonb_ops | @> (jsonb, jsonb) gin | pg_catalog | jsonb_ops | ? (jsonb, text) gin | pg_catalog | jsonb_ops | ?| (jsonb, text[]) gin | pg_catalog | jsonb_ops | ?& (jsonb, text[]) (4 rows) # \dAo+ gist circle_ops List operators of family related to access method AM | Opfamily Schema | Opfamily Name | Operator | Strategy | Purpose | Sort family ------+-----------------+---------------+----------------------+------- ---+----------+------------- gist | pg_catalog | circle_ops | << (circle, circle) | 1 | search | ... gist | pg_catalog | circle_ops | <-> (circle, point) | 15 | ordering | float_ops The \dAop command has been renamed to \dAp. It displays list of support procedures associated with access method operator families. # \dAp hash array_ops List of operator family procedures AM | Family schema | Family name | Left | Right | Number ------+---------------+-------------+----------+----------+-------- hash | pg_catalog | array_ops | anyarray | anyarray | 1 hash | pg_catalog | array_ops | anyarray | anyarray | 2 (2 rows) # \dAp+ hash array_ops List of operator family procedures AM | Family schema | Family name | Left | Right | Number | Proc name ------+---------------+-------------+----------+----------+--------+--- ------------------ hash | pg_catalog | array_ops | anyarray | anyarray | 1 | hash_array hash | pg_catalog | array_ops | anyarray | anyarray | 2 | hash_array_extended (2 rows) It may be easier for the user to navigate in this list if the defining feature in addition to the number is also the procedure name. Even if it does not carry important information, it improves the readability of the list. Maybe it makes sense to return field "Proc name" to the main output? 0002-psql_add_index_info-v5.patch The commands \dip and \dicp have so far been left in the current form, because although they display properties common to the whole AM, as Nikita already wrote, this properties can be redefined. # \dip pg_am_oid_index Index properties Schema | Name | Access method | Clusterable | Index scan | Bitmap scan | Backward scan ------------+-----------------+---------------+-------------+-------- ----+-------------+--------------- pg_catalog | pg_am_oid_index | btree | yes | yes | yes | yes (1 row) # \dicp pg_amop_opr_fam_index Index pg_catalog.pg_amop_opr_fam_index Column name | Expr | Opclass | ASC | Nulls first | Orderable | Distance orderable | Returnable | Search array | Search nulls -------------+-------------+----------+-----+-------------+----------- +--------------------+------------+--------------+-------------- amopopr | amopopr | oid_ops | yes | no | yes | no | yes | yes | yes amoppurpose | amoppurpose | char_ops | yes | no | yes | no | yes | yes | yes amopfamily | amopfamily | oid_ops | yes | no | yes | no | yes | yes | yes Table: pg_amop Access method: btree Also please look through the documentation for these features. I am sure that the information specified there can be submitted in a more accurate and convenient form. P.S. Since the formatting of the letter can brake the form of the tables, I attach a text file with the same content so that you do not have to do too much copy/paste to see original view =) Sincerely Sergey Cherkashin. --=-GSUCKO/84HWbQ1wIA635 Content-Disposition: attachment; filename="0001-psql_add_am_info-v5.patch" Content-Type: text/x-patch; name="0001-psql_add_am_info-v5.patch"; charset="UTF-8" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9jYXRhbG9ncy5zZ21sIGIvZG9jL3NyYy9zZ21sL2Nh dGFsb2dzLnNnbWwKaW5kZXggMGZkNzkyZmYxYS4uNjEwNTY4MGJlNiAxMDA2NDQKLS0tIGEvZG9j L3NyYy9zZ21sL2NhdGFsb2dzLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL2NhdGFsb2dzLnNnbWwK QEAgLTY3NSw3ICs2NzUsNyBAQAogICAgc2VhcmNoIGFuZCBvcmRlcmluZyBwdXJwb3Nlcy4pCiAg IDwvcGFyYT4KIAotICA8dGFibGU+CisgIDx0YWJsZSBpZD0iY2F0YWxvZy1wZy1hbW9wLXRhYmxl Ij4KICAgIDx0aXRsZT48c3RydWN0bmFtZT5wZ19hbW9wPC9zdHJ1Y3RuYW1lPiBDb2x1bW5zPC90 aXRsZT4KIAogICAgPHRncm91cCBjb2xzPSI0Ij4KQEAgLTgxOCw3ICs4MTgsNyBAQAogICAgaXMg b25lIHJvdyBmb3IgZWFjaCBzdXBwb3J0IGZ1bmN0aW9uIGJlbG9uZ2luZyB0byBhbiBvcGVyYXRv ciBmYW1pbHkuCiAgIDwvcGFyYT4KIAotICA8dGFibGU+CisgIDx0YWJsZSBpZD0iY2F0YWxvZy1w Zy1hbXByb2MtdGFibGUiPgogICAgPHRpdGxlPjxzdHJ1Y3RuYW1lPnBnX2FtcHJvYzwvc3RydWN0 bmFtZT4gQ29sdW1uczwvdGl0bGU+CiAKICAgIDx0Z3JvdXAgY29scz0iNCI+CkBAIC00NDM4LDcg KzQ0MzgsNyBAQCBTQ1JBTS1TSEEtMjU2JDxyZXBsYWNlYWJsZT4mbHQ7aXRlcmF0aW9uIGNvdW50 Jmd0OzwvcmVwbGFjZWFibGU+OjxyZXBsYWNlYWJsZT4mbAogICAgT3BlcmF0b3IgY2xhc3NlcyBh cmUgZGVzY3JpYmVkIGF0IGxlbmd0aCBpbiA8eHJlZiBsaW5rZW5kPSJ4aW5kZXgiLz4uCiAgIDwv cGFyYT4KIAotICA8dGFibGU+CisgIDx0YWJsZSBpZD0iY2F0YWxvZy1wZy1vcGNsYXNzLXRhYmxl Ij4KICAgIDx0aXRsZT48c3RydWN0bmFtZT5wZ19vcGNsYXNzPC9zdHJ1Y3RuYW1lPiBDb2x1bW5z PC90aXRsZT4KIAogICAgPHRncm91cCBjb2xzPSI0Ij4KQEAgLTQ3MDAsNyArNDcwMCw3IEBAIFND UkFNLVNIQS0yNTYkPHJlcGxhY2VhYmxlPiZsdDtpdGVyYXRpb24gY291bnQmZ3Q7PC9yZXBsYWNl YWJsZT46PHJlcGxhY2VhYmxlPiZsCiAgICBPcGVyYXRvciBmYW1pbGllcyBhcmUgZGVzY3JpYmVk IGF0IGxlbmd0aCBpbiA8eHJlZiBsaW5rZW5kPSJ4aW5kZXgiLz4uCiAgIDwvcGFyYT4KIAotICA8 dGFibGU+CisgIDx0YWJsZSBpZD0iY2F0YWxvZy1wZy1vcGZhbWlseS10YWJsZSI+CiAgICA8dGl0 bGU+PHN0cnVjdG5hbWU+cGdfb3BmYW1pbHk8L3N0cnVjdG5hbWU+IENvbHVtbnM8L3RpdGxlPgog CiAgICA8dGdyb3VwIGNvbHM9IjQiPgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL3JlZi9wc3Fs LXJlZi5zZ21sIGIvZG9jL3NyYy9zZ21sL3JlZi9wc3FsLXJlZi5zZ21sCmluZGV4IDFiNWQ4MmVk OGUuLmRhODVmNjM0MDAgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9yZWYvcHNxbC1yZWYuc2dt bAorKysgYi9kb2Mvc3JjL3NnbWwvcmVmL3BzcWwtcmVmLnNnbWwKQEAgLTEyMTksMTEgKzEyMTks ODIgQEAgdGVzdGRiPSZndDsKIAogICAgICAgICA8bGlzdGl0ZW0+CiAgICAgICAgIDxwYXJhPgot ICAgICAgICBMaXN0cyBhY2Nlc3MgbWV0aG9kcy4gSWYgPHJlcGxhY2VhYmxlCi0gICAgICAgIGNs YXNzPSJwYXJhbWV0ZXIiPnBhdHRlcm48L3JlcGxhY2VhYmxlPiBpcyBzcGVjaWZpZWQsIG9ubHkg YWNjZXNzCi0gICAgICAgIG1ldGhvZHMgd2hvc2UgbmFtZXMgbWF0Y2ggdGhlIHBhdHRlcm4gYXJl IHNob3duLiBJZgotICAgICAgICA8bGl0ZXJhbD4rPC9saXRlcmFsPiBpcyBhcHBlbmRlZCB0byB0 aGUgY29tbWFuZCBuYW1lLCBlYWNoIGFjY2VzcwotICAgICAgICBtZXRob2QgaXMgbGlzdGVkIHdp dGggaXRzIGFzc29jaWF0ZWQgaGFuZGxlciBmdW5jdGlvbiBhbmQgZGVzY3JpcHRpb24uCisgICAg ICAgIExpc3RzIGFjY2VzcyBtZXRob2RzIHdpdGggdGhlaXIgYXNzb2NpYXRlZCBoYW5kbGVyIGZ1 bmN0aW9uLiBJZgorICAgICAgICA8bGl0ZXJhbD4rPC9saXRlcmFsPiBpcyBhcHBlbmRlZCB0byB0 aGUgY29tbWFuZCBuYW1lLCBhZGRpdGlvbmFsCisgICAgICAgIGRlc2NyaXB0aW9uIGlzIHByb3Zp ZGVkLgorICAgICAgICBJZiA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+cGF0dGVybjwv cmVwbGFjZWFibGU+IGlzIHNwZWNpZmllZCwKKyAgICAgICAgdGhlIGNvbW1hbmQgZGlzcGxheXMg dGhlIHByb3BlcnRpZXMgb2YgdGhlIGFjY2VzcyBtZXRob2RzIHdob3NlIG5hbWVzCisgICAgICAg IG1hdGNoIHRoZSBzZWFyY2ggcGF0dGVybi4KKyAgICAgICAgPC9wYXJhPgorICAgICAgICA8L2xp c3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisKKyAgICAgIDx2YXJsaXN0ZW50cnk+Cisg ICAgICAgIDx0ZXJtPgorICAgICAgICAgIDxsaXRlcmFsPlxkQWNbK10KKyAgICAgICAgICAgIFs8 bGluayBsaW5rZW5kPSJhcHAtcHNxbC1wYXR0ZXJucyI+PHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJh bWV0ZXIiPmFjY2Vzcy1tZXRob2QtcGF0dGVybjwvcmVwbGFjZWFibGU+PC9saW5rPgorICAgICAg ICAgICAgICBbPGxpbmsgbGlua2VuZD0iYXBwLXBzcWwtcGF0dGVybnMiPjxyZXBsYWNlYWJsZSBj bGFzcz0icGFyYW1ldGVyIj5pbnB1dC10eXBlLXBhdHRlcm48L3JlcGxhY2VhYmxlPjwvbGluaz5d XQorICAgICAgICAgIDwvbGl0ZXJhbD4KKyAgICAgICAgPC90ZXJtPgorICAgICAgICA8bGlzdGl0 ZW0+CisgICAgICAgIDxwYXJhPgorICAgICAgICBTaG93cyBpbmZvIGluZGV4IGFjY2VzcyBtZXRo b2Qgb3BlcmF0b3IgY2xhc3NlcyBsaXN0ZWQgaW4KKyAgICAgICAgPHhyZWYgbGlua2VuZD0iY2F0 YWxvZy1wZy1vcGNsYXNzLXRhYmxlIi8+LgorICAgICAgICBJZiA8cmVwbGFjZWFibGUgY2xhc3M9 InBhcmFtZXRlciI+YWNjZXNzLW1ldGhvZC1wYXR0dGVybjwvcmVwbGFjZWFibGU+CisgICAgICAg IGlzIHNwZWNpZmllZCwgb25seSBvcGVyYXRvciBjbGFzc2VzIGFzc29jaWF0ZWQgd2l0aCBhY2Nl c3MgbWV0aG9kIHdob3NlCisgICAgICAgIG5hbWUgbWF0Y2hlcyBwYXR0ZXJuIGFyZSBzaG93bi4K KyAgICAgICAgSWYgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmlucHV0LXR5cGUtcGF0 dGVybjwvcmVwbGFjZWFibGU+CisgICAgICAgIGlzIHNwZWNpZmllZCwgb25seSBwcm9jZWR1cmVz IGFzc29jaWF0ZWQgd2l0aCBmYW1pbGllcyB3aG9zZSBpbnB1dCB0eXBlCisgICAgICAgIG1hdGNo ZXMgdGhlIHBhdHRlcm4gYXJlIHNob3duLgorICAgICAgICBJZiA8bGl0ZXJhbD4rPC9saXRlcmFs PiBpcyBhcHBlbmRlZCB0byB0aGUgY29tbWFuZCBuYW1lLCBvcGVyYXRvciBmYW1pbHkKKyAgICAg ICAgYW5kIG93bmVyIGFyZSBsaXN0ZWQuCisgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9saXN0 aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorCisgICAgICA8dmFybGlzdGVudHJ5PgorICAg ICAgICA8dGVybT4KKyAgICAgICAgICA8bGl0ZXJhbD5cZEFvWytdCisgICAgICAgICAgICBbPGxp bmsgbGlua2VuZD0iYXBwLXBzcWwtcGF0dGVybnMiPjxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1l dGVyIj5hY2Nlc3MtbWV0aG9kLXBhdHRlcm48L3JlcGxhY2VhYmxlPjwvbGluaz4KKyAgICAgICAg ICAgICAgWzxsaW5rIGxpbmtlbmQ9ImFwcC1wc3FsLXBhdHRlcm5zIj48cmVwbGFjZWFibGUgY2xh c3M9InBhcmFtZXRlciI+b3BlcmF0b3ItZmFtaWx5LXBhdHRlcm48L3JlcGxhY2VhYmxlPjwvbGlu az5dXQorICAgICAgICAgIDwvbGl0ZXJhbD4KKyAgICAgICAgPC90ZXJtPgorCisgICAgICAgIDxs aXN0aXRlbT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgIExpc3RzIG9wZXJhdG9ycyAoPHhyZWYg bGlua2VuZD0iY2F0YWxvZy1wZy1hbW9wLXRhYmxlIi8+KSBhc3NvY2lhdGVkCisgICAgICAgIHdp dGggYWNjZXNzIG1ldGhvZCBvcGVyYXRvciBmYW1pbGllcy4gSWYKKyAgICAgICAgPHJlcGxhY2Vh YmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmFjY2Vzcy1tZXRob2QtcGF0dHRlcm48L3JlcGxhY2VhYmxl PiBpcworICAgICAgICBzcGVjaWZpZWQsIG9ubHkgb3BlcmF0b3JzIGFzc29jaWF0ZWQgd2l0aCBh Y2Nlc3MgbWV0aG9kIHdob3NlIG5hbWUKKyAgICAgICAgbWF0Y2hlcyBwYXR0ZXJuIGFyZSBzaG93 bi4gSWYKKyAgICAgICAgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPm9wZXJhdG9yLWZh bWlseS1wYXR0ZXJuPC9yZXBsYWNlYWJsZT4gaXMKKyAgICAgICAgc3BlY2lmaWVkLCBvbmx5IG9w ZXJhdG9ycyBhc3NvY2lhdGVkIHdpdGggZmFtaWxpZXMgd2hvc2UgbmFtZSBtYXRjaGVzCisgICAg ICAgIHRoZSBwYXR0ZXJuIGFyZSBzaG93bi4KKyAgICAgICAgSWYgPGxpdGVyYWw+KzwvbGl0ZXJh bD4gaXMgYXBwZW5kZWQgdG8gdGhlIGNvbW1hbmQgbmFtZSwgZGlzcGxheXMKKyAgICAgICAgYWRk aXRpb25hbCBpbmZvLgorICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvbGlzdGl0ZW0+CisgICAg ICA8L3Zhcmxpc3RlbnRyeT4KKworICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgPHRlcm0+ CisgICAgICAgICAgPGxpdGVyYWw+XGRBcFsrXQorICAgICAgICAgICAgWzxsaW5rIGxpbmtlbmQ9 ImFwcC1wc3FsLXBhdHRlcm5zIj48cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+YWNjZXNz LW1ldGhvZC1wYXR0ZXJuPC9yZXBsYWNlYWJsZT48L2xpbms+CisgICAgICAgICAgICAgIFs8bGlu ayBsaW5rZW5kPSJhcHAtcHNxbC1wYXR0ZXJucyI+PHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0 ZXIiPm9wZXJhdG9yLWZhbWlseS1wYXR0ZXJuPC9yZXBsYWNlYWJsZT48L2xpbms+XV0KKyAgICAg ICAgICA8L2xpdGVyYWw+CisgICAgICAgIDwvdGVybT4KKyAgICAgICAgPGxpc3RpdGVtPgorICAg ICAgICA8cGFyYT4KKyAgICAgICAgTGlzdHMgcHJvY2VkdXJlcyAoPHhyZWYgbGlua2VuZD0iY2F0 YWxvZy1wZy1hbXByb2MtdGFibGUiLz4pIGFzc29jaWF0ZWQKKyAgICAgICAgd2l0aCBhY2Nlc3Mg bWV0aG9kIG9wZXJhdG9yIGZhbWlsaWVzLgorICAgICAgICBJZiA8cmVwbGFjZWFibGUgY2xhc3M9 InBhcmFtZXRlciI+YWNjZXNzLW1ldGhvZC1wYXR0dGVybjwvcmVwbGFjZWFibGU+CisgICAgICAg IGlzIHNwZWNpZmllZCwgb25seSBwcm9jZWR1cmVzIGFzc29jaWF0ZWQgd2l0aCBhY2Nlc3MgbWV0 aG9kIHdob3NlIG5hbWUKKyAgICAgICAgbWF0Y2hlcyBwYXR0ZXJuIGFyZSBzaG93bi4KKyAgICAg ICAgSWYgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPm9wZXJhdG9yLWZhbWlseS1wYXR0 ZXJuPC9yZXBsYWNlYWJsZT4KKyAgICAgICAgaXMgc3BlY2lmaWVkLCBvbmx5IHByb2NlZHVyZXMg YXNzb2NpYXRlZCB3aXRoIGZhbWlsaWVzIHdob3NlIG5hbWUKKyAgICAgICAgbWF0Y2hlcyB0aGUg cGF0dGVybiBhcmUgc2hvd24uCisgICAgICAgIElmIDxsaXRlcmFsPis8L2xpdGVyYWw+IGlzIGFw cGVuZGVkIHRvIHRoZSBjb21tYW5kIG5hbWUsIHByb2NlZHVyZXMKKyAgICAgICAgbGlzdGVkIHdp dGggaXRzIG5hbWVzLgogICAgICAgICA8L3BhcmE+CiAgICAgICAgIDwvbGlzdGl0ZW0+CiAgICAg ICA8L3Zhcmxpc3RlbnRyeT4KZGlmZiAtLWdpdCBhL3NyYy9iaW4vcHNxbC9jb21tYW5kLmMgYi9z cmMvYmluL3BzcWwvY29tbWFuZC5jCmluZGV4IGFiMjU5YzQ3M2EuLjdiNTdjN2NiNDkgMTAwNjQ0 Ci0tLSBhL3NyYy9iaW4vcHNxbC9jb21tYW5kLmMKKysrIGIvc3JjL2Jpbi9wc3FsL2NvbW1hbmQu YwpAQCAtNzE5LDcgKzcxOSwyNSBAQCBleGVjX2NvbW1hbmRfZChQc3FsU2NhblN0YXRlIHNjYW5f c3RhdGUsIGJvb2wgYWN0aXZlX2JyYW5jaCwgY29uc3QgY2hhciAqY21kKQogCQkJCQlzdWNjZXNz ID0gbGlzdFRhYmxlcygidHZtc0UiLCBOVUxMLCBzaG93X3ZlcmJvc2UsIHNob3dfc3lzdGVtKTsK IAkJCQlicmVhazsKIAkJCWNhc2UgJ0EnOgotCQkJCXN1Y2Nlc3MgPSBkZXNjcmliZUFjY2Vzc01l dGhvZHMocGF0dGVybiwgc2hvd192ZXJib3NlKTsKKwkJCQl7CisJCQkJCWNoYXIJICAgKnBhdHRl cm4yID0gTlVMTDsKKwkJCQkJaWYgKHBhdHRlcm4pCisJCQkJCQlwYXR0ZXJuMiA9IHBzcWxfc2Nh bl9zbGFzaF9vcHRpb24oc2Nhbl9zdGF0ZSwgT1RfTk9STUFMLCBOVUxMLCB0cnVlKTsKKworCQkJ CQlpZiAoc3RybmNtcChjbWQsICJkQW8iLCAzKSA9PSAwKQorCQkJCQkJc3VjY2VzcyA9IGxpc3RG YW1pbHlDbGFzc09wZXJhdG9ycyhwYXR0ZXJuLCBwYXR0ZXJuMiwgc2hvd192ZXJib3NlKTsKKwkJ CQkJZWxzZSBpZiAoc3RybmNtcChjbWQsICJkQXAiLCAzKSA9PSAwKQorCQkJCQkJc3VjY2VzcyA9 IGxpc3RPcGVyYXRvckZhbWlseVByb2NlZHVyZXMocGF0dGVybiwgcGF0dGVybjIsIHNob3dfdmVy Ym9zZSk7CisJCQkJCWVsc2UgaWYgKHN0cm5jbXAoY21kLCAiZEFjIiwgMykgPT0gMCkKKwkJCQkJ CXN1Y2Nlc3MgPSBkZXNjcmliZUFjY2Vzc01ldGhvZE9wZXJhdG9yQ2xhc3NlcyhwYXR0ZXJuLCBw YXR0ZXJuMiwgc2hvd192ZXJib3NlKTsKKwkJCQkJZWxzZSBpZiAocGF0dGVybikKKwkJCQkJCXN1 Y2Nlc3MgPSBkZXNjcmliZUFjY2Vzc01ldGhvZFByb3BlcnRpZXMocGF0dGVybik7CisJCQkJCWVs c2UKKwkJCQkJCXN1Y2Nlc3MgPSBsaXN0QWNjZXNzTWV0aG9kcyhzaG93X3ZlcmJvc2UpOworCisJ CQkJCWlmIChwYXR0ZXJuMikKKwkJCQkJCWZyZWUocGF0dGVybjIpOworCQkJCX0KIAkJCQlicmVh azsKIAkJCWNhc2UgJ2EnOgogCQkJCXN1Y2Nlc3MgPSBkZXNjcmliZUFnZ3JlZ2F0ZXMocGF0dGVy biwgc2hvd192ZXJib3NlLCBzaG93X3N5c3RlbSk7CmRpZmYgLS1naXQgYS9zcmMvYmluL3BzcWwv ZGVzY3JpYmUuYyBiL3NyYy9iaW4vcHNxbC9kZXNjcmliZS5jCmluZGV4IDc3OWU0ODQzN2MuLmU1 NTM1ZTYxOWMgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcHNxbC9kZXNjcmliZS5jCisrKyBiL3NyYy9i aW4vcHNxbC9kZXNjcmliZS5jCkBAIC0xNCw2ICsxNCw3IEBACiAKICNpbmNsdWRlIDxjdHlwZS5o PgogCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19hbS5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfYXR0 cmlidXRlX2QuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX2Nhc3RfZC5oIgogI2luY2x1ZGUgImNh dGFsb2cvcGdfY2xhc3NfZC5oIgpAQCAtMTQ2LDcgKzE0Nyw3IEBAIGRlc2NyaWJlQWdncmVnYXRl cyhjb25zdCBjaGFyICpwYXR0ZXJuLCBib29sIHZlcmJvc2UsIGJvb2wgc2hvd1N5c3RlbSkKICAq IFRha2VzIGFuIG9wdGlvbmFsIHJlZ2V4cCB0byBzZWxlY3QgcGFydGljdWxhciBhY2Nlc3MgbWV0 aG9kcwogICovCiBib29sCi1kZXNjcmliZUFjY2Vzc01ldGhvZHMoY29uc3QgY2hhciAqcGF0dGVy biwgYm9vbCB2ZXJib3NlKQorbGlzdEFjY2Vzc01ldGhvZHMoYm9vbCB2ZXJib3NlKQogewogCVBR RXhwQnVmZmVyRGF0YSBidWY7CiAJUEdyZXN1bHQgICAqcmVzOwpAQCAtMTY4LDI5ICsxNjksMjMg QEAgZGVzY3JpYmVBY2Nlc3NNZXRob2RzKGNvbnN0IGNoYXIgKnBhdHRlcm4sIGJvb2wgdmVyYm9z ZSkKIAlwcmludGZQUUV4cEJ1ZmZlcigmYnVmLAogCQkJCQkgICJTRUxFQ1QgYW1uYW1lIEFTIFwi JXNcIixcbiIKIAkJCQkJICAiICBDQVNFIGFtdHlwZSIKLQkJCQkJICAiIFdIRU4gJ2knIFRIRU4g JyVzJyIKLQkJCQkJICAiIEVORCBBUyBcIiVzXCIiLAorCQkJCQkgICIgICAgV0hFTiAnaScgVEhF TiAnJXMnIgorCQkJCQkgICIgICAgV0hFTiAndCcgVEhFTiAnJXMnIgorCQkJCQkgICIgIEVORCBB UyBcIiVzXCIsXG4iCisJCQkJCSAgIiAgYW1oYW5kbGVyIEFTIFwiJXNcIiIsCiAJCQkJCSAgZ2V0 dGV4dF9ub29wKCJOYW1lIiksCi0JCQkJCSAgZ2V0dGV4dF9ub29wKCJJbmRleCIpLAotCQkJCQkg IGdldHRleHRfbm9vcCgiVHlwZSIpKTsKKwkJCQkJICBnZXR0ZXh0X25vb3AoImluZGV4IiksCisJ CQkJCSAgZ2V0dGV4dF9ub29wKCJ0YWJsZSIpLAorCQkJCQkgIGdldHRleHRfbm9vcCgiVHlwZSIp LAorCQkJCQkgIGdldHRleHRfbm9vcCgiSGFuZGxlciIpKTsKIAogCWlmICh2ZXJib3NlKQotCXsK IAkJYXBwZW5kUFFFeHBCdWZmZXIoJmJ1ZiwKLQkJCQkJCSAgIixcbiAgYW1oYW5kbGVyIEFTIFwi JXNcIixcbiIKLQkJCQkJCSAgIiAgcGdfY2F0YWxvZy5vYmpfZGVzY3JpcHRpb24ob2lkLCAncGdf YW0nKSBBUyBcIiVzXCIiLAotCQkJCQkJICBnZXR0ZXh0X25vb3AoIkhhbmRsZXIiKSwKKwkJCQkJ CSAgIixcbiAgcGdfY2F0YWxvZy5vYmpfZGVzY3JpcHRpb24ob2lkLCAncGdfYW0nKSBBUyBcIiVz XCIiLAogCQkJCQkJICBnZXR0ZXh0X25vb3AoIkRlc2NyaXB0aW9uIikpOwotCX0KLQogCWFwcGVu ZFBRRXhwQnVmZmVyU3RyKCZidWYsCi0JCQkJCQkgIlxuRlJPTSBwZ19jYXRhbG9nLnBnX2FtXG4i KTsKLQotCXByb2Nlc3NTUUxOYW1lUGF0dGVybihwc2V0LmRiLCAmYnVmLCBwYXR0ZXJuLCBmYWxz ZSwgZmFsc2UsCi0JCQkJCQkgIE5VTEwsICJhbW5hbWUiLCBOVUxMLAotCQkJCQkJICBOVUxMKTsK LQotCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZidWYsICJPUkRFUiBCWSAxOyIpOworCQkJCQkJICJc bkZST00gcGdfY2F0YWxvZy5wZ19hbVxuIgorCQkJCQkJICJPUkRFUiBCWSAxOyIpOwogCiAJcmVz ID0gUFNRTGV4ZWMoYnVmLmRhdGEpOwogCXRlcm1QUUV4cEJ1ZmZlcigmYnVmKTsKQEAgLTU2MjUs MyArNTYyMCwzODIgQEAgcHJpbnRBQ0xDb2x1bW4oUFFFeHBCdWZmZXIgYnVmLCBjb25zdCBjaGFy ICpjb2xuYW1lKQogCQkJCQkJICAicGdfY2F0YWxvZy5hcnJheV90b19zdHJpbmcoJXMsICdcXG4n KSBBUyBcIiVzXCIiLAogCQkJCQkJICBjb2xuYW1lLCBnZXR0ZXh0X25vb3AoIkFjY2VzcyBwcml2 aWxlZ2VzIikpOwogfQorCisvKgorICogXGRBIE5BTUUKKyAqIERlc2NyaWJlcyBhY2Nlc3MgbWV0 aG9kIHByb3BlcnRpZXMuCisgKgorICogVGFrZXMgYW4gb3B0aW9uYWwgcmVnZXhwIHRvIHNlbGVj dCBwYXJ0aWN1bGFyIGFjY2VzcyBtZXRob2RzCisgKi8KK2Jvb2wKK2Rlc2NyaWJlQWNjZXNzTWV0 aG9kUHJvcGVydGllcyhjb25zdCBjaGFyICpwYXR0ZXJuKQoreworCVBRRXhwQnVmZmVyRGF0YSBi dWY7CisJUEdyZXN1bHQJICAgKnJlczsKKwlib29sCQkJZm91bmRfcmVzdWx0ID0gZmFsc2U7CisJ cHJpbnRRdWVyeU9wdCBteW9wdCA9IHBzZXQucG9wdDsKKwlzdGF0aWMgY29uc3QgYm9vbCB0cmFu c2xhdGVfY29sdW1uc19pW10gPSB7dHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZX07 CisJc3RhdGljIGNvbnN0IGJvb2wgdHJhbnNsYXRlX2NvbHVtbnNfdFtdID0ge3RydWUsIHRydWUs IHRydWUsIHRydWV9OworCisJaWYgKHBzZXQuc3ZlcnNpb24gPCA5MDYwMCkKKwl7CisJCWNoYXIJ CXN2ZXJidWZbMzJdOworCisJCXBzcWxfZXJyb3IoIlRoZSBzZXJ2ZXIgKHZlcnNpb24gJXMpIGRv ZXMgbm90IHN1cHBvcnQgYWNjZXNzIG1ldGhvZHMuXG4iLAorCQkJCSAgIGZvcm1hdFBHVmVyc2lv bk51bWJlcihwc2V0LnN2ZXJzaW9uLCBmYWxzZSwKKwkJCQkJCQkJCQkgc3ZlcmJ1Ziwgc2l6ZW9m KHN2ZXJidWYpKSk7CisJCXJldHVybiB0cnVlOworCX0KKworCWluaXRQUUV4cEJ1ZmZlcigmYnVm KTsKKworCXByaW50ZlBRRXhwQnVmZmVyKCZidWYsCisJCQkJCSAgcHNldC5zdmVyc2lvbiA+PSA5 MDYwMCA/CisJCQkJCSAgIlNFTEVDVCBhLmFtbmFtZSBBUyBcIiUxJHNcIixcbiIKKwkJCQkJICAi ICBDQVNFIFdIRU4gcGdfY2F0YWxvZy5wZ19pbmRleGFtX2hhc19wcm9wZXJ0eShhLm9pZCwgJ2Nh bl9vcmRlcicpXG4iCisJCQkJCSAgIiAgICBUSEVOICclMiRzJyBFTFNFICclMyRzJyBFTkQgQVMg XCIlNCRzXCIsXG4iCisJCQkJCSAgIiAgQ0FTRSBXSEVOIHBnX2NhdGFsb2cucGdfaW5kZXhhbV9o YXNfcHJvcGVydHkoYS5vaWQsICdjYW5fdW5pcXVlJylcbiIKKwkJCQkJICAiICAgIFRIRU4gJyUy JHMnIEVMU0UgJyUzJHMnIEVORCBBUyBcIiU1JHNcIixcbiIKKwkJCQkJICAiICBDQVNFIFdIRU4g cGdfY2F0YWxvZy5wZ19pbmRleGFtX2hhc19wcm9wZXJ0eShhLm9pZCwgJ2Nhbl9tdWx0aV9jb2wn KVxuIgorCQkJCQkgICIgICAgVEhFTiAnJTIkcycgRUxTRSAnJTMkcycgRU5EIEFTIFwiJTYkc1wi LFxuIgorCQkJCQkgICIgIENBU0UgV0hFTiBwZ19jYXRhbG9nLnBnX2luZGV4YW1faGFzX3Byb3Bl cnR5KGEub2lkLCAnY2FuX2V4Y2x1ZGUnKVxuIgorCQkJCQkgICIgICAgVEhFTiAnJTIkcycgRUxT RSAnJTMkcycgRU5EIEFTIFwiJTckc1wiLFxuIgorCQkJCQkgIDoKKwkJCQkJICAiU0VMRUNUIGEu YW1uYW1lIEFTIFwiJTEkc1wiLFxuIgorCQkJCQkgICIgIENBU0UgV0hFTiBhLmFtY2Fub3JkZXIg VEhFTiAnJTIkcycgRUxTRSAnJTMkcycgRU5EIEFTIFwiJTQkc1wiLFxuIgorCQkJCQkgICIgIENB U0UgV0hFTiBhLmFtY2FudW5pcXVlIFRIRU4gJyUyJHMnIEVMU0UgJyUzJHMnIEVORCBBUyBcIiU1 JHNcIixcbiIKKwkJCQkJICAiICBDQVNFIFdIRU4gYS5hbWNhbm11bHRpY29sIFRIRU4gJyUyJHMn IEVMU0UgJyUzJHMnIEVORCBBUyBcIiU2JHNcIixcbiIKKwkJCQkJICAiICBDQVNFIFdIRU4gYS5h bWdldHR1cGxlIDw+IDAgVEhFTiAnJTIkcycgRUxTRSAnJTMkcycgRU5EIEFTIFwiJTckc1wiLFxu IiwKKwkJCQkJICBnZXR0ZXh0X25vb3AoIkFNIiksCisJCQkJCSAgZ2V0dGV4dF9ub29wKCJ5ZXMi KSwKKwkJCQkJICBnZXR0ZXh0X25vb3AoIm5vIiksCisJCQkJCSAgZ2V0dGV4dF9ub29wKCJDYW4g b3JkZXIiKSwKKwkJCQkJICBnZXR0ZXh0X25vb3AoIlN1cHBvcnQgdW5pcXVlIGluZGV4ZXMiKSwK KwkJCQkJICBnZXR0ZXh0X25vb3AoIlN1cHBvcnQgaW5kZXhlcyB3aXRoIG11bHRpcGxlIGNvbHVt bnMiKSwKKwkJCQkJICBnZXR0ZXh0X25vb3AoIlN1cHBvcnQgZXhjbHVzaW9uIGNvbnN0cmFpbnRz IikpOworCisJYXBwZW5kUFFFeHBCdWZmZXIoJmJ1ZiwKKwkJCQkJICBwc2V0LnN2ZXJzaW9uID49 IDExMDAwMAorCQkJCQkJPyAiICBDQVNFIFdIRU4gcGdfY2F0YWxvZy5wZ19pbmRleGFtX2hhc19w cm9wZXJ0eShhLm9pZCwgJ2Nhbl9pbmNsdWRlJylcbiIKKwkJCQkJCSAgIiAgICBUSEVOICclMSRz JyBFTFNFICclMiRzJyBFTkQgQVMgXCIlMyRzXCIiCisJCQkJCQk6ICIgIENBU0UgV0hFTiBmYWxz ZSBUSEVOICclMSRzJyBFTFNFICclMiRzJyBFTkQgQVMgXCIlMyRzXCIiLAorCQkJCQkgIGdldHRl eHRfbm9vcCgieWVzIiksIGdldHRleHRfbm9vcCgibm8iKSwKKwkJCQkJICBnZXR0ZXh0X25vb3Ao IkNhbiBpbmNsdWRlIG5vbi1rZXkgY29sdW1ucyIpKTsKKworCWFwcGVuZFBRRXhwQnVmZmVyU3Ry KCZidWYsCisJCQkJCQkgIlxuRlJPTSBwZ19jYXRhbG9nLnBnX2FtIGFcbiIKKwkJCQkJCSAiICBX SEVSRSBhLmFtdHlwZSA9ICdpJ1xuIik7CisKKwlwcm9jZXNzU1FMTmFtZVBhdHRlcm4ocHNldC5k YiwgJmJ1ZiwgcGF0dGVybiwgdHJ1ZSwgZmFsc2UsCisJCQkJCQkgIE5VTEwsICJhbW5hbWUiLCBO VUxMLCBOVUxMKTsKKworCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZidWYsICJPUkRFUiBCWSAxOyIp OworCXJlcyA9IFBTUUxleGVjKGJ1Zi5kYXRhKTsKKwl0ZXJtUFFFeHBCdWZmZXIoJmJ1Zik7CisJ aWYgKCFyZXMpCisJCXJldHVybiBmYWxzZTsKKworCW15b3B0Lm51bGxQcmludCA9IE5VTEw7CisJ bXlvcHQudGl0bGUgPSBfKCJJbmRleCBhY2Nlc3MgbWV0aG9kIHByb3BlcnRpZXMiKTsKKwlteW9w dC50cmFuc2xhdGVfaGVhZGVyID0gdHJ1ZTsKKwlteW9wdC50cmFuc2xhdGVfY29sdW1ucyA9IHRy YW5zbGF0ZV9jb2x1bW5zX2k7CisJbXlvcHQubl90cmFuc2xhdGVfY29sdW1ucyA9IGxlbmd0aG9m KHRyYW5zbGF0ZV9jb2x1bW5zX2kpOworCisJaWYgKFBRbnR1cGxlcyhyZXMpID4gMCkKKwl7CisJ CXByaW50UXVlcnkocmVzLCAmbXlvcHQsIHBzZXQucXVlcnlGb3V0LCBmYWxzZSwgcHNldC5sb2dm aWxlKTsKKwkJZm91bmRfcmVzdWx0ID0gdHJ1ZTsKKwl9CisKKwlQUWNsZWFyKHJlcyk7CisKKwkv KiBUYWJsZSBBTSAqLworCWluaXRQUUV4cEJ1ZmZlcigmYnVmKTsKKwlwcmludGZQUUV4cEJ1ZmZl cigmYnVmLAorCQkJCQkgICJTRUxFQ1QgYS5hbW5hbWUgQVMgXCIlc1wiLFxuIgorCQkJCQkgICIg ICd0YWJsZScgQVMgXCIlc1wiLFxuIgorCQkJCQkgICIgIGEuYW1oYW5kbGVyIEFTIFwiJXNcIixc biIKKwkJCQkJICAiICBwZ19jYXRhbG9nLm9ial9kZXNjcmlwdGlvbihhLm9pZCwgJ3BnX2FtJykg QVMgXCIlc1wiXG4iCisJCQkJCSAgIkZST00gcGdfY2F0YWxvZy5wZ19hbSBhXG4iCisJCQkJCSAg IiAgV0hFUkUgYS5hbXR5cGUgPSAndCdcbiIsCisJCQkJCSAgZ2V0dGV4dF9ub29wKCJOYW1lIiks CisJCQkJCSAgZ2V0dGV4dF9ub29wKCJUeXBlIiksCisJCQkJCSAgZ2V0dGV4dF9ub29wKCJIYW5k bGVyIiksCisJCQkJCSAgZ2V0dGV4dF9ub29wKCJEZXNjcmlwdGlvbiIpKTsKKworCXByb2Nlc3NT UUxOYW1lUGF0dGVybihwc2V0LmRiLCAmYnVmLCBwYXR0ZXJuLCB0cnVlLCBmYWxzZSwKKwkJCQkJ CSAgTlVMTCwgImEuYW1uYW1lIiwgTlVMTCwgTlVMTCk7CisJYXBwZW5kUFFFeHBCdWZmZXJTdHIo JmJ1ZiwgIk9SREVSIEJZIDE7Iik7CisKKwlyZXMgPSBQU1FMZXhlYyhidWYuZGF0YSk7CisJdGVy bVBRRXhwQnVmZmVyKCZidWYpOworCisJbXlvcHQubnVsbFByaW50ID0gTlVMTDsKKwlteW9wdC50 aXRsZSA9IF8oIlRhYmxlIGFjY2VzcyBtZXRob2QgcHJvcGVydGllcyIpOworCW15b3B0LnRyYW5z bGF0ZV9oZWFkZXIgPSB0cnVlOworCW15b3B0LnRyYW5zbGF0ZV9jb2x1bW5zID0gdHJhbnNsYXRl X2NvbHVtbnNfdDsKKwlteW9wdC5uX3RyYW5zbGF0ZV9jb2x1bW5zID0gbGVuZ3Rob2YodHJhbnNs YXRlX2NvbHVtbnNfdCk7CisKKwlpZiAoUFFudHVwbGVzKHJlcykgPiAwKQorCXsKKwkJcHJpbnRR dWVyeShyZXMsICZteW9wdCwgcHNldC5xdWVyeUZvdXQsIGZhbHNlLCBwc2V0LmxvZ2ZpbGUpOwor CQlmb3VuZF9yZXN1bHQgPSB0cnVlOworCX0KKworCVBRY2xlYXIocmVzKTsKKworCWlmICghZm91 bmRfcmVzdWx0KQorCQlwc3FsX2Vycm9yKCJEaWQgbm90IGZpbmQgYW55IEFNIG5hbWVkIFwiJXNc Ii5cbiIsIHBhdHRlcm4pOworCisJcmV0dXJuIHRydWU7Cit9CisKKy8qCisgKiBcZEFvCisgKiBM aXN0cyBvcGVyYXRvcnMgYXNzb2NpYXRlZCB3aXRoIGFjY2VzcyBtZXRob2Qgb3BlcmF0b3IgZmFt aWxpZXMuCisgKgorICogVGFrZXMgYW4gb3B0aW9uYWwgcmVnZXhwIHRvIHNlbGVjdCBwYXJ0aWN1 bGFyIGFjY2VzcyBtZXRob2RzCisgKiBhbmQgb3BlcmF0b3IgZmFtaWxpZXMKKyAqLworYm9vbAor bGlzdEZhbWlseUNsYXNzT3BlcmF0b3JzKGNvbnN0IGNoYXIgKmFjY2Vzc19tZXRob2RfcGF0dGVy biwKKwkJCQkJCSBjb25zdCBjaGFyICpmYW1pbHlfcGF0dGVybiwgYm9vbCB2ZXJib3NlKQorewor CVBRRXhwQnVmZmVyRGF0YSBidWY7CisJUEdyZXN1bHQgICAqcmVzOworCXByaW50UXVlcnlPcHQg bXlvcHQgPSBwc2V0LnBvcHQ7CisJYm9vbAkJaGF2ZV93aGVyZSA9IGZhbHNlOworCisJc3RhdGlj IGNvbnN0IGJvb2wgdHJhbnNsYXRlX2NvbHVtbnNbXSA9IHtmYWxzZSwgZmFsc2UsIGZhbHNlLCBm YWxzZSwgZmFsc2UsCisJCQkJCQkJCQkJCSBmYWxzZSwgZmFsc2UsIHRydWUsIGZhbHNlfTsKKwor CWluaXRQUUV4cEJ1ZmZlcigmYnVmKTsKKworCXByaW50ZlBRRXhwQnVmZmVyKCZidWYsCisJCQkJ CSAgIlNFTEVDVFxuIgorCQkJCQkgICIgIGFtLmFtbmFtZSBBUyBcIiVzXCIsXG4iCisJCQkJCSAg IiAgbnNmLm5zcG5hbWUgQVMgXCIlc1wiLFxuIgorCQkJCQkgICIgIG9mLm9wZm5hbWUgQVMgXCIl c1wiLFxuIgorCQkJCQkgICIgIGZvcm1hdCAoJyUlcyAoJSVzLCAlJXMpJyxcbiIKKwkJCQkJICAi ICAgIENBU0VcbiIKKwkJCQkJICAiICAgICAgV0hFTiBwZ19jYXRhbG9nLnBnX29wZXJhdG9yX2lz X3Zpc2libGUob3Aub2lkKSBcbiIKKwkJCQkJICAiICAgICAgVEhFTiBvcC5vcHJuYW1lOjpwZ19j YXRhbG9nLnRleHQgXG4iCisJCQkJCSAgIiAgICAgIEVMU0Ugby5hbW9wb3ByOjpwZ19jYXRhbG9n LnJlZ29wZXI6OnBnX2NhdGFsb2cudGV4dCBcbiIKKwkJCQkJICAiICAgIEVORCxcbiIKKwkJCQkJ ICAiICAgIHBnX2NhdGFsb2cuZm9ybWF0X3R5cGUoby5hbW9wbGVmdHR5cGUsIE5VTEwpLFxuIgor CQkJCQkgICIgICAgcGdfY2F0YWxvZy5mb3JtYXRfdHlwZShvLmFtb3ByaWdodHR5cGUsIE5VTEwp XG4iCisJCQkJCSAgIiAgKSBBUyBcIiVzXCJcbiIsCisJCQkJCSAgZ2V0dGV4dF9ub29wKCJBTSIp LAorCQkJCQkgIGdldHRleHRfbm9vcCgiT3BmYW1pbHkgU2NoZW1hIiksCisJCQkJCSAgZ2V0dGV4 dF9ub29wKCJPcGZhbWlseSBOYW1lIiksCisJCQkJCSAgZ2V0dGV4dF9ub29wKCJPcGVyYXRvciIp KTsKKworCWlmICh2ZXJib3NlKQorCQlhcHBlbmRQUUV4cEJ1ZmZlcigmYnVmLAorCQkJCQkgICIs IG8uYW1vcHN0cmF0ZWd5IEFTIFwiJXNcIixcbiIKKwkJCQkJICAiICBDQVNFIG8uYW1vcHB1cnBv c2VcbiIKKwkJCQkJICAiICAgIFdIRU4gJ28nIFRIRU4gJyVzJ1xuIgorCQkJCQkgICIgICAgV0hF TiAncycgVEhFTiAnJXMnXG4iCisJCQkJCSAgIiAgRU5EIEFTIFwiJXNcIixcbiIKKwkJCQkJICAi ICBvZnMub3BmbmFtZSBBUyBcIiVzXCJcbiIsCisJCQkJCSAgZ2V0dGV4dF9ub29wKCJTdHJhdGVn eSIpLAorCQkJCQkgIGdldHRleHRfbm9vcCgib3JkZXJpbmciKSwKKwkJCQkJICBnZXR0ZXh0X25v b3AoInNlYXJjaCIpLAorCQkJCQkgIGdldHRleHRfbm9vcCgiUHVycG9zZSIpLAorCQkJCQkgIGdl dHRleHRfbm9vcCgiU29ydCBmYW1pbHkiKSk7CisJYXBwZW5kUFFFeHBCdWZmZXIoJmJ1ZiwKKwkJ CQkJICAiRlJPTSBwZ19jYXRhbG9nLnBnX2Ftb3Agb1xuIgorCQkJCQkgICIgIExFRlQgSk9JTiBw Z19jYXRhbG9nLnBnX29wZXJhdG9yIG9wIE9OIG9wLm9pZCA9IG8uYW1vcG9wclxuIgorCQkJCQkg ICIgIExFRlQgSk9JTiBwZ19jYXRhbG9nLnBnX29wZmFtaWx5IG9mIE9OIG9mLm9pZCA9IG8uYW1v cGZhbWlseVxuIgorCQkJCQkgICIgIExFRlQgSk9JTiBwZ19jYXRhbG9nLnBnX2FtIGFtIE9OIGFt Lm9pZCA9IG9mLm9wZm1ldGhvZCBBTkQgYW0ub2lkID0gby5hbW9wbWV0aG9kXG4iCisJCQkJCSAg IiAgTEVGVCBKT0lOIHBnX2NhdGFsb2cucGdfbmFtZXNwYWNlIG5zZiBPTiBvZi5vcGZuYW1lc3Bh Y2UgPSBuc2Yub2lkXG4iKTsKKwlpZiAodmVyYm9zZSkKKwkJYXBwZW5kUFFFeHBCdWZmZXIoJmJ1 ZiwKKwkJCQkJICAiICBMRUZUIEpPSU4gcGdfY2F0YWxvZy5wZ19vcGZhbWlseSBvZnMgT04gb2Zz Lm9pZCA9IG8uYW1vcHNvcnRmYW1pbHlcbiIpOworCisJaWYgKGFjY2Vzc19tZXRob2RfcGF0dGVy bikKKwkJaGF2ZV93aGVyZSA9IHByb2Nlc3NTUUxOYW1lUGF0dGVybihwc2V0LmRiLCAmYnVmLCBh Y2Nlc3NfbWV0aG9kX3BhdHRlcm4sCisJCQkJCQkJCQkJICAgZmFsc2UsIGZhbHNlLCBOVUxMLCAi YW0uYW1uYW1lIiwKKwkJCQkJCQkJCQkgICBOVUxMLCBOVUxMKTsKKworCWlmIChmYW1pbHlfcGF0 dGVybikKKwkJcHJvY2Vzc1NRTE5hbWVQYXR0ZXJuKHBzZXQuZGIsICZidWYsIGZhbWlseV9wYXR0 ZXJuLCBoYXZlX3doZXJlLCBmYWxzZSwKKwkJCQkJCQkgICJuc2YubnNwbmFtZSIsICJvZi5vcGZu YW1lIiwgTlVMTCwgTlVMTCk7CisKKwlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmYnVmLCAiT1JERVIg QlkgMSwgMiwgMywgby5hbW9wc3RyYXRlZ3ksIDQ7Iik7CisKKwlyZXMgPSBQU1FMZXhlYyhidWYu ZGF0YSk7CisJdGVybVBRRXhwQnVmZmVyKCZidWYpOworCWlmICghcmVzKQorCQlyZXR1cm4gZmFs c2U7CisKKwlteW9wdC5udWxsUHJpbnQgPSBOVUxMOworCW15b3B0LnRpdGxlID0gXygiTGlzdCBv cGVyYXRvcnMgb2YgZmFtaWx5IHJlbGF0ZWQgdG8gYWNjZXNzIG1ldGhvZCIpOworCW15b3B0LnRy YW5zbGF0ZV9oZWFkZXIgPSB0cnVlOworCW15b3B0LnRyYW5zbGF0ZV9jb2x1bW5zID0gdHJhbnNs YXRlX2NvbHVtbnM7CisJbXlvcHQubl90cmFuc2xhdGVfY29sdW1ucyA9IGxlbmd0aG9mKHRyYW5z bGF0ZV9jb2x1bW5zKTsKKworCXByaW50UXVlcnkocmVzLCAmbXlvcHQsIHBzZXQucXVlcnlGb3V0 LCBmYWxzZSwgcHNldC5sb2dmaWxlKTsKKworCVBRY2xlYXIocmVzKTsKKwlyZXR1cm4gdHJ1ZTsK K30KKworLyoKKyAqIFxkQXAKKyAqIExpc3RzIHByb2NlZHVyZXMgYXNzb2NpYXRlZCB3aXRoIGFj Y2VzcyBtZXRob2Qgb3BlcmF0b3IgZmFtaWxpZXMuCisgKgorICogVGFrZXMgYW4gb3B0aW9uYWwg cmVnZXhwIHRvIHNlbGVjdCBwYXJ0aWN1bGFyIGFjY2VzcyBtZXRob2RzCisgKiBhbmQgb3BlcmF0 b3IgZmFtaWxpZXMKKyAqLworYm9vbAorbGlzdE9wZXJhdG9yRmFtaWx5UHJvY2VkdXJlcyhjb25z dCBjaGFyICphY2Nlc3NfbWV0aG9kX3BhdHRlcm4sCisJCQkJCQkJIGNvbnN0IGNoYXIgKmZhbWls eV9wYXR0ZXJuLCBib29sIHZlcmJvc2UpCit7CisJUFFFeHBCdWZmZXJEYXRhIGJ1ZjsKKwlQR3Jl c3VsdCAgICpyZXM7CisJcHJpbnRRdWVyeU9wdCBteW9wdCA9IHBzZXQucG9wdDsKKwlib29sCQlo YXZlX3doZXJlID0gZmFsc2U7CisJc3RhdGljIGNvbnN0IGJvb2wgdHJhbnNsYXRlX2NvbHVtbnNb XSA9IHtmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZX07CisK Kwlpbml0UFFFeHBCdWZmZXIoJmJ1Zik7CisKKwlwcmludGZQUUV4cEJ1ZmZlcigmYnVmLAorCQkJ CQkgICJTRUxFQ1QgRElTVElOQ1RcbiIKKwkJCQkJICAiICBhbS5hbW5hbWUgQVMgXCIlc1wiLFxu IgorCQkJCQkgICIgIG5zLm5zcG5hbWUgQVMgXCIlc1wiLFxuIgorCQkJCQkgICIgIG9mLm9wZm5h bWUgQVMgXCIlc1wiLFxuIgorCQkJCQkgICIgIHBnX2NhdGFsb2cuZm9ybWF0X3R5cGUoYXAuYW1w cm9jbGVmdHR5cGUsIE5VTEwpIEFTIFwiJXNcIixcbiIKKwkJCQkJICAiICBwZ19jYXRhbG9nLmZv cm1hdF90eXBlKGFwLmFtcHJvY3JpZ2h0dHlwZSwgTlVMTCkgQVMgXCIlc1wiLFxuIgorCQkJCQkg ICIgIGFwLmFtcHJvY251bSBBUyBcIiVzXCJcbiIsCisJCQkJCSAgZ2V0dGV4dF9ub29wKCJBTSIp LAorCQkJCQkgIGdldHRleHRfbm9vcCgiRmFtaWx5IHNjaGVtYSIpLAorCQkJCQkgIGdldHRleHRf bm9vcCgiRmFtaWx5IG5hbWUiKSwKKwkJCQkJICBnZXR0ZXh0X25vb3AoIkxlZnQiKSwKKwkJCQkJ ICBnZXR0ZXh0X25vb3AoIlJpZ2h0IiksCisJCQkJCSAgZ2V0dGV4dF9ub29wKCJOdW1iZXIiKSk7 CisJaWYgKHZlcmJvc2UpCisJCWFwcGVuZFBRRXhwQnVmZmVyKCZidWYsCisJCQkJCSAgIiwgYXAu YW1wcm9jOjpwZ19jYXRhbG9nLnJlZ3Byb2M6OnBnX2NhdGFsb2cudGV4dCBBUyBcIiVzXCJcbiIs CisJCQkJCSAgZ2V0dGV4dF9ub29wKCJQcm9jIG5hbWUiKSk7CisJYXBwZW5kUFFFeHBCdWZmZXIo JmJ1ZiwKKwkJCQkJICAiRlJPTSBwZ19jYXRhbG9nLnBnX2FtcHJvYyBhcFxuIgorCQkJCQkgICIg IExFRlQgSk9JTiBwZ19jYXRhbG9nLnBnX29wZmFtaWx5IG9mIE9OIG9mLm9pZCA9IGFwLmFtcHJv Y2ZhbWlseVxuIgorCQkJCQkgICIgIExFRlQgSk9JTiBwZ19jYXRhbG9nLnBnX2FtIGFtIE9OIGFt Lm9pZCA9IG9mLm9wZm1ldGhvZFxuIgorCQkJCQkgICIgIExFRlQgSk9JTiBwZ19jYXRhbG9nLnBn X25hbWVzcGFjZSBucyBPTiBvZi5vcGZuYW1lc3BhY2UgPSBucy5vaWRcbiIpOworCisJaWYgKGFj Y2Vzc19tZXRob2RfcGF0dGVybikKKwkJaGF2ZV93aGVyZSA9IHByb2Nlc3NTUUxOYW1lUGF0dGVy bihwc2V0LmRiLCAmYnVmLCBhY2Nlc3NfbWV0aG9kX3BhdHRlcm4sCisJCQkJCQkJCQkJICAgZmFs c2UsIGZhbHNlLCBOVUxMLCAiYW0uYW1uYW1lIiwKKwkJCQkJCQkJCQkgICBOVUxMLCBOVUxMKTsK KwlpZiAoZmFtaWx5X3BhdHRlcm4pCisJCXByb2Nlc3NTUUxOYW1lUGF0dGVybihwc2V0LmRiLCAm YnVmLCBmYW1pbHlfcGF0dGVybiwgaGF2ZV93aGVyZSwgZmFsc2UsCisJCQkJCQkJICAibnMubnNw bmFtZSIsICJvZi5vcGZuYW1lIiwgTlVMTCwgTlVMTCk7CisKKwlhcHBlbmRQUUV4cEJ1ZmZlclN0 cigmYnVmLAorCQkJCQkJICJPUkRFUiBCWSAxLCAyLCAzLCA0LCA1LCA2OyIpOworCisJcmVzID0g UFNRTGV4ZWMoYnVmLmRhdGEpOworCXRlcm1QUUV4cEJ1ZmZlcigmYnVmKTsKKwlpZiAoIXJlcykK KwkJcmV0dXJuIGZhbHNlOworCisJbXlvcHQubnVsbFByaW50ID0gTlVMTDsKKwlteW9wdC50aXRs ZSA9IF8oIkxpc3Qgb2Ygb3BlcmF0b3IgZmFtaWx5IHByb2NlZHVyZXMiKTsKKwlteW9wdC50cmFu c2xhdGVfaGVhZGVyID0gdHJ1ZTsKKwlteW9wdC50cmFuc2xhdGVfY29sdW1ucyA9IHRyYW5zbGF0 ZV9jb2x1bW5zOworCW15b3B0Lm5fdHJhbnNsYXRlX2NvbHVtbnMgPSBsZW5ndGhvZih0cmFuc2xh dGVfY29sdW1ucyk7CisKKwlwcmludFF1ZXJ5KHJlcywgJm15b3B0LCBwc2V0LnF1ZXJ5Rm91dCwg ZmFsc2UsIHBzZXQubG9nZmlsZSk7CisKKwlQUWNsZWFyKHJlcyk7CisJcmV0dXJuIHRydWU7Cit9 CisKKy8qCisgKiBcZEFjCisgKiBMaXN0IGluZGV4IGFjY2VzcyBtZXRob2Qgb3BlcmF0b3IgY2xh c3Nlcy4KKyAqIFRha2VzIGFuIG9wdGlvbmFsIHJlZ2V4cCB0byBzZWxlY3QgcGFydGljdWxhciBh Y2Nlc3MgbWV0aG9kIGFuZCBvcGVyYXRvciBjbGFzcy4KKyAqLworYm9vbAorZGVzY3JpYmVBY2Nl c3NNZXRob2RPcGVyYXRvckNsYXNzZXMoY29uc3QgY2hhciAqYWNjZXNzX21ldGhvZF9wYXR0ZXJu LAorCQkJCQkJCQkJY29uc3QgY2hhciAqdHlwZV9wYXR0ZXJuLCBib29sIHZlcmJvc2UpCit7CisJ UFFFeHBCdWZmZXJEYXRhIGJ1ZjsKKwlQR3Jlc3VsdCAgICpyZXM7CisJcHJpbnRRdWVyeU9wdCBt eW9wdCA9IHBzZXQucG9wdDsKKwlib29sCQloYXZlX3doZXJlID0gZmFsc2U7CisJc3RhdGljIGNv bnN0IGJvb2wgdHJhbnNsYXRlX2NvbHVtbnNbXSA9IHtmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxz ZSwgZmFsc2UsCisJCQkJCQkJCQkJCSBmYWxzZSwgZmFsc2UsIGZhbHNlfTsKKworCWluaXRQUUV4 cEJ1ZmZlcigmYnVmKTsKKworCXByaW50ZlBRRXhwQnVmZmVyKCZidWYsCisJCQkJCSAgIlNFTEVD VCBESVNUSU5DVCIKKwkJCQkJICAiICBhbS5hbW5hbWUgQVMgXCIlc1wiLFxuIgorCQkJCQkgICIg IGMub3BjaW50eXBlOjpwZ19jYXRhbG9nLnJlZ3R5cGUgQVMgXCIlc1wiLFxuIgorCQkJCQkgICIg IChDQVNFIFdIRU4gYy5vcGNrZXl0eXBlIDw+IDAgQU5EIGMub3Bja2V5dHlwZSA8PiBjLm9wY2lu dHlwZVxuIgorCQkJCQkgICIgICAgVEhFTiBjLm9wY2tleXR5cGVcbiIKKwkJCQkJICAiICAgIEVM U0UgTlVMTCAtLSBjLm9wY2ludHlwZVxuIgorCQkJCQkgICIgIEVORCk6OnBnX2NhdGFsb2cucmVn dHlwZSBBUyBcIiVzXCIsXG4iCisJCQkJCSAgIiAgQ0FTRVxuIgorCQkJCQkgICIgICAgV0hFTiBw Z19jYXRhbG9nLnBnX29wY2xhc3NfaXNfdmlzaWJsZShjLm9pZClcbiIKKwkJCQkJICAiICAgIFRI RU4gZm9ybWF0KCclJUknLCBjLm9wY25hbWUpXG4iCisJCQkJCSAgIiAgICBFTFNFIGZvcm1hdCgn JSVJLiUlSScsIG4ubnNwbmFtZSwgYy5vcGNuYW1lKVxuIgorCQkJCQkgICIgIEVORCBBUyBcIiVz XCIsXG4iCisJCQkJCSAgIiAgKENBU0UgV0hFTiBjLm9wY2RlZmF1bHRcbiIKKwkJCQkJICAiICAg IFRIRU4gJyVzJ1xuIgorCQkJCQkgICIgICAgRUxTRSAnJXMnXG4iCisJCQkJCSAgIiAgRU5EKSBB UyBcIiVzXCIiLAorCQkJCQkgIGdldHRleHRfbm9vcCgiQU0iKSwKKwkJCQkJICBnZXR0ZXh0X25v b3AoIklucHV0IHR5cGUiKSwKKwkJCQkJICBnZXR0ZXh0X25vb3AoIlN0b3JhZ2UgdHlwZSIpLAor CQkJCQkgIGdldHRleHRfbm9vcCgiT3BlcmF0b3IgY2xhc3MiKSwKKwkJCQkJICBnZXR0ZXh0X25v b3AoInllcyIpLAorCQkJCQkgIGdldHRleHRfbm9vcCgibm8iKSwKKwkJCQkJICBnZXR0ZXh0X25v b3AoIkRlZmF1bHQ/IikpOworCWlmICh2ZXJib3NlKQorCQlhcHBlbmRQUUV4cEJ1ZmZlcigmYnVm LAorCQkJCQkJICAiLFxuICBDQVNFXG4iCisJCQkJCQkgICIgICAgV0hFTiBwZ19jYXRhbG9nLnBn X29wZmFtaWx5X2lzX3Zpc2libGUob2Yub2lkKVxuIgorCQkJCQkJICAiICAgIFRIRU4gZm9ybWF0 KCclJUknLCBvZi5vcGZuYW1lKVxuIgorCQkJCQkJICAiICAgIEVMU0UgZm9ybWF0KCclJUkuJSVJ Jywgb2ZuLm5zcG5hbWUsIG9mLm9wZm5hbWUpXG4iCisJCQkJCQkgICIgIEVORCBBUyBcIiVzXCIs XG4iCisJCQkJCQkgICIgcGdfY2F0YWxvZy5wZ19nZXRfdXNlcmJ5aWQoYy5vcGNvd25lcikgQVMg XCIlc1wiXG4iLAorCQkJCQkJICBnZXR0ZXh0X25vb3AoIk9wZXJhdG9yIGZhbWlseSIpLAorCQkJ CQkJICBnZXR0ZXh0X25vb3AoIk93bmVyIikpOworCWFwcGVuZFBRRXhwQnVmZmVyKCZidWYsCisJ CQkJCSAgIlxuRlJPTSBwZ19jYXRhbG9nLnBnX29wY2xhc3MgY1xuIgorCQkJCQkgICIgIExFRlQg Sk9JTiBwZ19jYXRhbG9nLnBnX2FtIGFtIG9uIGFtLm9pZCA9IGMub3BjbWV0aG9kXG4iCisJCQkJ CSAgIiAgTEVGVCBKT0lOIHBnX2NhdGFsb2cucGdfbmFtZXNwYWNlIG4gT04gbi5vaWQgPSBjLm9w Y25hbWVzcGFjZVxuIgorCQkJCQkgICIgIExFRlQgSk9JTiBwZ19jYXRhbG9nLnBnX3R5cGUgdDEg T04gdDEub2lkID0gYy5vcGNpbnR5cGVcbiIKKwkJCQkJICApOworCWlmICh2ZXJib3NlKQorCQlh cHBlbmRQUUV4cEJ1ZmZlcigmYnVmLAorCQkJCQkJICAiICBMRUZUIEpPSU4gcGdfY2F0YWxvZy5w Z19vcGZhbWlseSBvZiBPTiBvZi5vaWQgPSBjLm9wY2ZhbWlseVxuIgorCQkJCQkJICAiICBMRUZU IEpPSU4gcGdfY2F0YWxvZy5wZ19uYW1lc3BhY2Ugb2ZuIE9OIG9mbi5vaWQgPSBvZi5vcGZuYW1l c3BhY2VcbiIpOworCisJaWYgKGFjY2Vzc19tZXRob2RfcGF0dGVybikKKwkJaGF2ZV93aGVyZSA9 IHByb2Nlc3NTUUxOYW1lUGF0dGVybihwc2V0LmRiLCAmYnVmLCBhY2Nlc3NfbWV0aG9kX3BhdHRl cm4sCisJCQkJCQkJCQkJICAgZmFsc2UsIGZhbHNlLCBOVUxMLCAiYW0uYW1uYW1lIiwgTlVMTCwg TlVMTCk7CisJaWYgKHR5cGVfcGF0dGVybikKKwkJcHJvY2Vzc1NRTE5hbWVQYXR0ZXJuKHBzZXQu ZGIsICZidWYsIHR5cGVfcGF0dGVybiwgaGF2ZV93aGVyZSwgZmFsc2UsCisJCQkJCQkJICBOVUxM LCAidDEudHlwbmFtZSIsIE5VTEwsIE5VTEwpOworCisJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmJ1 ZiwgIk9SREVSIEJZIDEsIDIsIDQ7Iik7CisJcmVzID0gUFNRTGV4ZWMoYnVmLmRhdGEpOworCXRl cm1QUUV4cEJ1ZmZlcigmYnVmKTsKKwlpZiAoIXJlcykKKwkJcmV0dXJuIGZhbHNlOworCisJbXlv cHQubnVsbFByaW50ID0gTlVMTDsKKwlteW9wdC50aXRsZSA9IF8oIkluZGV4IGFjY2VzcyBtZXRo b2Qgb3BlcmF0b3IgY2xhc3NlcyIpOworCW15b3B0LnRyYW5zbGF0ZV9oZWFkZXIgPSB0cnVlOwor CW15b3B0LnRyYW5zbGF0ZV9jb2x1bW5zID0gdHJhbnNsYXRlX2NvbHVtbnM7CisJbXlvcHQubl90 cmFuc2xhdGVfY29sdW1ucyA9IGxlbmd0aG9mKHRyYW5zbGF0ZV9jb2x1bW5zKTsKKworCXByaW50 UXVlcnkocmVzLCAmbXlvcHQsIHBzZXQucXVlcnlGb3V0LCBmYWxzZSwgcHNldC5sb2dmaWxlKTsK KworCVBRY2xlYXIocmVzKTsKKwlyZXR1cm4gdHJ1ZTsKK30KZGlmZiAtLWdpdCBhL3NyYy9iaW4v cHNxbC9kZXNjcmliZS5oIGIvc3JjL2Jpbi9wc3FsL2Rlc2NyaWJlLmgKaW5kZXggNGZmMWY5MWYz OC4uNmNjZTgwZjI2MCAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wc3FsL2Rlc2NyaWJlLmgKKysrIGIv c3JjL2Jpbi9wc3FsL2Rlc2NyaWJlLmgKQEAgLTEzLDcgKzEzLDcgQEAKIGV4dGVybiBib29sIGRl c2NyaWJlQWdncmVnYXRlcyhjb25zdCBjaGFyICpwYXR0ZXJuLCBib29sIHZlcmJvc2UsIGJvb2wg c2hvd1N5c3RlbSk7CiAKIC8qIFxkQSAqLwotZXh0ZXJuIGJvb2wgZGVzY3JpYmVBY2Nlc3NNZXRo b2RzKGNvbnN0IGNoYXIgKnBhdHRlcm4sIGJvb2wgdmVyYm9zZSk7CitleHRlcm4gYm9vbCBsaXN0 QWNjZXNzTWV0aG9kcyhib29sIHZlcmJvc2UpOwogCiAvKiBcZGIgKi8KIGV4dGVybiBib29sIGRl c2NyaWJlVGFibGVzcGFjZXMoY29uc3QgY2hhciAqcGF0dGVybiwgYm9vbCB2ZXJib3NlKTsKQEAg LTExMSw0ICsxMTEsMjEgQEAgYm9vbAkJZGVzY3JpYmVQdWJsaWNhdGlvbnMoY29uc3QgY2hhciAq cGF0dGVybik7CiAvKiBcZFJzICovCiBib29sCQlkZXNjcmliZVN1YnNjcmlwdGlvbnMoY29uc3Qg Y2hhciAqcGF0dGVybiwgYm9vbCB2ZXJib3NlKTsKIAorLyogXGRBIGZvbyovCitleHRlcm4gYm9v bCBkZXNjcmliZUFjY2Vzc01ldGhvZFByb3BlcnRpZXMoY29uc3QgY2hhciAqcGF0dGVybik7CisK Ky8qIFxkQXAgKi8KK2V4dGVybiBib29sIGxpc3RPcGVyYXRvckZhbWlseVByb2NlZHVyZXMoY29u c3QgY2hhciAqYWNjZXNzX21ldGhvZF9wYXR0ZXJuLAorCQkJCQkJCQkJCSBjb25zdCBjaGFyICpm YW1pbHlfcGF0dGVybiwKKwkJCQkJCQkJCQkgYm9vbCB2ZXJib3NlKTsKKworLyogXGRBbyAqLwor ZXh0ZXJuIGJvb2wgbGlzdEZhbWlseUNsYXNzT3BlcmF0b3JzKGNvbnN0IGNoYXIgKmFjY2Vzc01l dGhvZF9wYXR0ZXJuLAorCQkJCQkJCQkJIGNvbnN0IGNoYXIgKmZhbWlseV9wYXR0ZXJuLCBib29s IHZlcmJvc2UpOworCisvKiBcZEFjICovCitleHRlcm4gYm9vbCBkZXNjcmliZUFjY2Vzc01ldGhv ZE9wZXJhdG9yQ2xhc3Nlcyhjb25zdCBjaGFyICphY2Nlc3NfbWV0aG9kX3BhdHRlcm4sCisJCQkJ CQkJCQkJCQljb25zdCBjaGFyICpvcGNsYXNzX3BhdHRlcm4sCisJCQkJCQkJCQkJCQlib29sIHZl cmJvc2UpOworCiAjZW5kaWYJCQkJCQkJLyogREVTQ1JJQkVfSCAqLwpkaWZmIC0tZ2l0IGEvc3Jj L2Jpbi9wc3FsL2hlbHAuYyBiL3NyYy9iaW4vcHNxbC9oZWxwLmMKaW5kZXggNmZjNGViYWIxZS4u YThkMmI1M2I2MiAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wc3FsL2hlbHAuYworKysgYi9zcmMvYmlu L3BzcWwvaGVscC5jCkBAIC0yMjQsNyArMjI0LDExIEBAIHNsYXNoVXNhZ2UodW5zaWduZWQgc2hv cnQgaW50IHBhZ2VyKQogCWZwcmludGYob3V0cHV0LCBfKCIgIFxcZFtTK10gICAgICAgICAgICAg ICAgIGxpc3QgdGFibGVzLCB2aWV3cywgYW5kIHNlcXVlbmNlc1xuIikpOwogCWZwcmludGYob3V0 cHV0LCBfKCIgIFxcZFtTK10gIE5BTUUgICAgICAgICAgIGRlc2NyaWJlIHRhYmxlLCB2aWV3LCBz ZXF1ZW5jZSwgb3IgaW5kZXhcbiIpKTsKIAlmcHJpbnRmKG91dHB1dCwgXygiICBcXGRhW1NdICBb UEFUVEVSTl0gICAgICBsaXN0IGFnZ3JlZ2F0ZXNcbiIpKTsKLQlmcHJpbnRmKG91dHB1dCwgXygi ICBcXGRBWytdICBbUEFUVEVSTl0gICAgICBsaXN0IGFjY2VzcyBtZXRob2RzXG4iKSk7CisJZnBy aW50ZihvdXRwdXQsIF8oIiAgXFxkQVsrXSAgICAgICAgICAgICAgICAgbGlzdCBhY2Nlc3MgbWV0 aG9kc1xuIikpOworCWZwcmludGYob3V0cHV0LCBfKCIgIFxcZEEgICAgIE5BTUUgICAgICAgICAg IGRlc2NyaWJlIHByb3BlcnRpZXMgb2YgYWNjZXNzIG1ldGhvZFxuIikpOworCWZwcmludGYob3V0 cHV0LCBfKCIgIFxcZEFjWytdIFtBTVBUUk4gW1RZUEVQVFJOXV0gbGlzdCBvcGVyYXRvciBjbGFz c2VzIG9mIGluZGV4IGFjY2VzcyBtZXRob2RzXG4iKSk7CisJZnByaW50ZihvdXRwdXQsIF8oIiAg XFxkQW9bK10gW0FNUFRSTiBbT1BGUFRSTl1dIGxpc3Qgb3BlcmF0b3JzIG9mIGZhbWlseSByZWxh dGVkIHRvIGFjY2VzcyBtZXRob2RcbiIpKTsKKwlmcHJpbnRmKG91dHB1dCwgXygiICBcXGRBcFsr XSBbQU1QVFJOIFtPUEZQVFJOXV0gbGlzdCBwcm9jZWR1cmVzIG9mIG9wZXJhdG9yIGZhbWlseSBy ZWxhdGVkIHRvIGFjY2VzcyBtZXRob2RcbiIpKTsKIAlmcHJpbnRmKG91dHB1dCwgXygiICBcXGRi WytdICBbUEFUVEVSTl0gICAgICBsaXN0IHRhYmxlc3BhY2VzXG4iKSk7CiAJZnByaW50ZihvdXRw dXQsIF8oIiAgXFxkY1tTK10gW1BBVFRFUk5dICAgICAgbGlzdCBjb252ZXJzaW9uc1xuIikpOwog CWZwcmludGYob3V0cHV0LCBfKCIgIFxcZENbK10gIFtQQVRURVJOXSAgICAgIGxpc3QgY2FzdHNc biIpKTsKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcHNxbC90YWItY29tcGxldGUuYyBiL3NyYy9iaW4v cHNxbC90YWItY29tcGxldGUuYwppbmRleCAxMGFlMjFjYzYxLi4zYTI4MGNjZDk0IDEwMDY0NAot LS0gYS9zcmMvYmluL3BzcWwvdGFiLWNvbXBsZXRlLmMKKysrIGIvc3JjL2Jpbi9wc3FsL3RhYi1j b21wbGV0ZS5jCkBAIC00NzIsNiArNDcyLDIzIEBAIHN0YXRpYyBjb25zdCBTY2hlbWFRdWVyeSBR dWVyeV9mb3JfbGlzdF9vZl9yZWxhdGlvbnMgPSB7CiAJLnJlc3VsdCA9ICJwZ19jYXRhbG9nLnF1 b3RlX2lkZW50KGMucmVsbmFtZSkiLAogfTsKIAorc3RhdGljIGNvbnN0IFNjaGVtYVF1ZXJ5IFF1 ZXJ5X2Zvcl9saXN0X29mX29wZXJhdG9yX2ZhbWlsaWVzID0geworCS8qIG1pbl9zZXJ2ZXJfdmVy c2lvbiAqLworCTAsCisJLyogY2F0bmFtZSAqLworCSJwZ19jYXRhbG9nLnBnX29wZmFtaWx5IGMi LAorCS8qIHNlbGNvbmRpdGlvbiAqLworCU5VTEwsCisJLyogdmlzY29uZGl0aW9uICovCisJInRy dWUiLAorCS8qIG5hbWVzcGFjZSAqLworCSJjLm9wZm5hbWVzcGFjZSIsCisJLyogcmVzdWx0ICov CisJInBnX2NhdGFsb2cucXVvdGVfaWRlbnQoYy5vcGZuYW1lKSIsCisJLyogcXVhbHJlc3VsdCAq LworCU5VTEwKK307CisKIC8qIFJlbGF0aW9ucyBzdXBwb3J0aW5nIElOU0VSVCwgVVBEQVRFIG9y IERFTEVURSAqLwogc3RhdGljIGNvbnN0IFNjaGVtYVF1ZXJ5IFF1ZXJ5X2Zvcl9saXN0X29mX3Vw ZGF0YWJsZXMgPSB7CiAJLmNhdG5hbWUgPSAicGdfY2F0YWxvZy5wZ19jbGFzcyBjIiwKQEAgLTEz NzgsNyArMTM5NSw4IEBAIHBzcWxfY29tcGxldGlvbihjb25zdCBjaGFyICp0ZXh0LCBpbnQgc3Rh cnQsIGludCBlbmQpCiAJCSJcXGEiLAogCQkiXFxjb25uZWN0IiwgIlxcY29ubmluZm8iLCAiXFxD IiwgIlxcY2QiLCAiXFxjb3B5IiwKIAkJIlxcY29weXJpZ2h0IiwgIlxcY3Jvc3N0YWJ2aWV3IiwK LQkJIlxcZCIsICJcXGRhIiwgIlxcZEEiLCAiXFxkYiIsICJcXGRjIiwgIlxcZEMiLCAiXFxkZCIs ICJcXGRkcCIsICJcXGREIiwKKwkJIlxcZCIsICJcXGRhIiwgIlxcZEEiLCAiXFxkQXAiLCAiXFxk QW8iLCAiXFxkQXAiLCAiXFxkQWMiLAorCQkiXFxkYiIsICJcXGRjIiwgIlxcZEMiLCAiXFxkZCIs ICJcXGRkcCIsICJcXGREIiwKIAkJIlxcZGVzIiwgIlxcZGV0IiwgIlxcZGV1IiwgIlxcZGV3Iiwg IlxcZEUiLCAiXFxkZiIsCiAJCSJcXGRGIiwgIlxcZEZkIiwgIlxcZEZwIiwgIlxcZEZ0IiwgIlxc ZGciLCAiXFxkaSIsICJcXGRsIiwgIlxcZEwiLAogCQkiXFxkbSIsICJcXGRuIiwgIlxcZG8iLCAi XFxkTyIsICJcXGRwIiwKQEAgLTM0NzYsNiArMzQ5NCwxMiBAQCBwc3FsX2NvbXBsZXRpb24oY29u c3QgY2hhciAqdGV4dCwgaW50IHN0YXJ0LCBpbnQgZW5kKQogCX0KIAllbHNlIGlmIChUYWlsTWF0 Y2hlc0NTKCJcXGRhKiIpKQogCQlDT01QTEVURV9XSVRIX1ZFUlNJT05FRF9TQ0hFTUFfUVVFUlko UXVlcnlfZm9yX2xpc3Rfb2ZfYWdncmVnYXRlcywgTlVMTCk7CisJZWxzZSBpZiAoVGFpbE1hdGNo ZXNDUygiXFxkQXAqIiwgTWF0Y2hBbnkpKQorCQlDT01QTEVURV9XSVRIX1NDSEVNQV9RVUVSWShR dWVyeV9mb3JfbGlzdF9vZl9vcGVyYXRvcl9mYW1pbGllcywgTlVMTCk7CisJZWxzZSBpZiAoVGFp bE1hdGNoZXNDUygiXFxkQW8qIiwgTWF0Y2hBbnkpKQorCQlDT01QTEVURV9XSVRIX1NDSEVNQV9R VUVSWShRdWVyeV9mb3JfbGlzdF9vZl9vcGVyYXRvcl9mYW1pbGllcywgTlVMTCk7CisJZWxzZSBp ZiAoVGFpbE1hdGNoZXNDUygiXFxkQWMqIiwgTWF0Y2hBbnkpKQorCQlDT01QTEVURV9XSVRIX1ND SEVNQV9RVUVSWShRdWVyeV9mb3JfbGlzdF9vZl9kYXRhdHlwZXMsIE5VTEwpOwogCWVsc2UgaWYg KFRhaWxNYXRjaGVzQ1MoIlxcZEEqIikpCiAJCUNPTVBMRVRFX1dJVEhfUVVFUlkoUXVlcnlfZm9y X2xpc3Rfb2ZfYWNjZXNzX21ldGhvZHMpOwogCWVsc2UgaWYgKFRhaWxNYXRjaGVzQ1MoIlxcZGIq IikpCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3BzcWwub3V0IGIvc3Jj L3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wc3FsLm91dAppbmRleCBhYTEwMWRlOTA2Li43ODk2MWVm MmVlIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3BzcWwub3V0CisrKyBi L3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcHNxbC5vdXQKQEAgLTQ1NzgsMyArNDU3OCw1NiBA QCBsYXN0IGVycm9yIG1lc3NhZ2U6IGRpdmlzaW9uIGJ5IHplcm8KIFxlY2hvICdsYXN0IGVycm9y IGNvZGU6JyA6TEFTVF9FUlJPUl9TUUxTVEFURQogbGFzdCBlcnJvciBjb2RlOiAyMjAxMgogXHVu c2V0IEZFVENIX0NPVU5UCistLSBjaGVjayBwcmludGluZyBpbmZvIGFib3V0IGFjY2VzcyBtZXRo b2RzCitcZEEgZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBJbmRleCBhY2Nlc3MgbWV0aG9kIHByb3BlcnRpZXMKKyBBTSAgfCBDYW4g b3JkZXIgfCBTdXBwb3J0IHVuaXF1ZSBpbmRleGVzIHwgU3VwcG9ydCBpbmRleGVzIHdpdGggbXVs dGlwbGUgY29sdW1ucyB8IFN1cHBvcnQgZXhjbHVzaW9uIGNvbnN0cmFpbnRzIHwgQ2FuIGluY2x1 ZGUgbm9uLWtleSBjb2x1bW5zIAorLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgZ2lu IHwgbm8gICAgICAgIHwgbm8gICAgICAgICAgICAgICAgICAgICB8IHllcyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgfCBubyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IG5v CisoMSByb3cpCisKK1xkQW8gYnJpbiB1dWlkX21pbm1heF9vcHMKKyAgICAgTGlzdCBvcGVyYXRv cnMgb2YgZmFtaWx5IHJlbGF0ZWQgdG8gYWNjZXNzIG1ldGhvZAorICBBTSAgfCBPcGZhbWlseSBT Y2hlbWEgfCAgT3BmYW1pbHkgTmFtZSAgfCAgICBPcGVyYXRvciAgICAgCistLS0tLS0rLS0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0KKyBicmluIHwg cGdfY2F0YWxvZyAgICAgIHwgdXVpZF9taW5tYXhfb3BzIHwgPCAodXVpZCwgdXVpZCkKKyBicmlu IHwgcGdfY2F0YWxvZyAgICAgIHwgdXVpZF9taW5tYXhfb3BzIHwgPD0gKHV1aWQsIHV1aWQpCisg YnJpbiB8IHBnX2NhdGFsb2cgICAgICB8IHV1aWRfbWlubWF4X29wcyB8ID0gKHV1aWQsIHV1aWQp CisgYnJpbiB8IHBnX2NhdGFsb2cgICAgICB8IHV1aWRfbWlubWF4X29wcyB8ID49ICh1dWlkLCB1 dWlkKQorIGJyaW4gfCBwZ19jYXRhbG9nICAgICAgfCB1dWlkX21pbm1heF9vcHMgfCA+ICh1dWlk LCB1dWlkKQorKDUgcm93cykKKworXGRBbyAqIHBnX2NhdGFsb2cuanNvbmJfcGF0aF9vcHMKKyAg ICAgTGlzdCBvcGVyYXRvcnMgb2YgZmFtaWx5IHJlbGF0ZWQgdG8gYWNjZXNzIG1ldGhvZAorIEFN ICB8IE9wZmFtaWx5IFNjaGVtYSB8IE9wZmFtaWx5IE5hbWUgIHwgICAgIE9wZXJhdG9yICAgICAg CistLS0tLSstLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0t LS0tLS0KKyBnaW4gfCBwZ19jYXRhbG9nICAgICAgfCBqc29uYl9wYXRoX29wcyB8IEA+IChqc29u YiwganNvbmIpCisoMSByb3cpCisKK1xkQXAgYnJpbiB1dWlkX21pbm1heF9vcHMKKyAgICAgICAg ICAgICAgIExpc3Qgb2Ygb3BlcmF0b3IgZmFtaWx5IHByb2NlZHVyZXMKKyAgQU0gIHwgRmFtaWx5 IHNjaGVtYSB8ICAgRmFtaWx5IG5hbWUgICB8IExlZnQgfCBSaWdodCB8IE51bWJlciAKKy0tLS0t LSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tKy0tLS0tLS0rLS0tLS0t LS0KKyBicmluIHwgcGdfY2F0YWxvZyAgICB8IHV1aWRfbWlubWF4X29wcyB8IHV1aWQgfCB1dWlk ICB8ICAgICAgMQorIGJyaW4gfCBwZ19jYXRhbG9nICAgIHwgdXVpZF9taW5tYXhfb3BzIHwgdXVp ZCB8IHV1aWQgIHwgICAgICAyCisgYnJpbiB8IHBnX2NhdGFsb2cgICAgfCB1dWlkX21pbm1heF9v cHMgfCB1dWlkIHwgdXVpZCAgfCAgICAgIDMKKyBicmluIHwgcGdfY2F0YWxvZyAgICB8IHV1aWRf bWlubWF4X29wcyB8IHV1aWQgfCB1dWlkICB8ICAgICAgNAorKDQgcm93cykKKworXGRBcCAqIHBn X2NhdGFsb2cudXVpZF9vcHMKKyAgICAgICAgICAgICBMaXN0IG9mIG9wZXJhdG9yIGZhbWlseSBw cm9jZWR1cmVzCisgIEFNICAgfCBGYW1pbHkgc2NoZW1hIHwgRmFtaWx5IG5hbWUgfCBMZWZ0IHwg UmlnaHQgfCBOdW1iZXIgCistLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0t LS0tLSstLS0tLS0tKy0tLS0tLS0tCisgYnRyZWUgfCBwZ19jYXRhbG9nICAgIHwgdXVpZF9vcHMg ICAgfCB1dWlkIHwgdXVpZCAgfCAgICAgIDEKKyBidHJlZSB8IHBnX2NhdGFsb2cgICAgfCB1dWlk X29wcyAgICB8IHV1aWQgfCB1dWlkICB8ICAgICAgMgorIGhhc2ggIHwgcGdfY2F0YWxvZyAgICB8 IHV1aWRfb3BzICAgIHwgdXVpZCB8IHV1aWQgIHwgICAgICAxCisgaGFzaCAgfCBwZ19jYXRhbG9n ICAgIHwgdXVpZF9vcHMgICAgfCB1dWlkIHwgdXVpZCAgfCAgICAgIDIKKyg0IHJvd3MpCisKK1xk QWMgYnJpbiBwZyoub2lkKgorICAgICAgICAgICAgIEluZGV4IGFjY2VzcyBtZXRob2Qgb3BlcmF0 b3IgY2xhc3NlcworICBBTSAgfCBJbnB1dCB0eXBlIHwgU3RvcmFnZSB0eXBlIHwgT3BlcmF0b3Ig Y2xhc3MgfCBEZWZhdWx0PyAKKy0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tCisgYnJpbiB8IG9pZCAgICAgICAgfCAgICAgICAgICAg ICAgfCBvaWRfbWlubWF4X29wcyB8IHllcworKDEgcm93KQorCmRpZmYgLS1naXQgYS9zcmMvdGVz dC9yZWdyZXNzL3NxbC9wc3FsLnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3BzcWwuc3FsCmlu ZGV4IGZiN2QxN2ZjNzYuLjc0Y2M3MTQyZGEgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3Mv c3FsL3BzcWwuc3FsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3BzcWwuc3FsCkBAIC0xMDMx LDMgKzEwMzEsMTEgQEAgc2VsZWN0IDEvKDE1LXVuaXF1ZTIpIGZyb20gdGVuazEgb3JkZXIgYnkg dW5pcXVlMiBsaW1pdCAxOTsKIFxlY2hvICdsYXN0IGVycm9yIGNvZGU6JyA6TEFTVF9FUlJPUl9T UUxTVEFURQogCiBcdW5zZXQgRkVUQ0hfQ09VTlQKKworLS0gY2hlY2sgcHJpbnRpbmcgaW5mbyBh Ym91dCBhY2Nlc3MgbWV0aG9kcworXGRBIGdpbgorXGRBbyBicmluIHV1aWRfbWlubWF4X29wcwor XGRBbyAqIHBnX2NhdGFsb2cuanNvbmJfcGF0aF9vcHMKK1xkQXAgYnJpbiB1dWlkX21pbm1heF9v cHMKK1xkQXAgKiBwZ19jYXRhbG9nLnV1aWRfb3BzCitcZEFjIGJyaW4gcGcqLm9pZCoK --=-GSUCKO/84HWbQ1wIA635 Content-Disposition: attachment; filename="0002-psql_add_index_info-v5.patch" Content-Type: text/x-patch; name="0002-psql_add_index_info-v5.patch"; charset="UTF-8" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvcHNxbC1yZWYuc2dtbCBiL2RvYy9zcmMvc2dt bC9yZWYvcHNxbC1yZWYuc2dtbAppbmRleCBkYTg1ZjYzNDAwLi4xNmQ0NWQ1YzQ5IDEwMDY0NAot LS0gYS9kb2Mvc3JjL3NnbWwvcmVmL3BzcWwtcmVmLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL3Jl Zi9wc3FsLXJlZi5zZ21sCkBAIC0xNDQ2LDYgKzE0NDYsMzQgQEAgdGVzdGRiPSZndDsKICAgICAg ICAgPC9saXN0aXRlbT4KICAgICAgIDwvdmFybGlzdGVudHJ5PgogCisgICAgICA8dmFybGlzdGVu dHJ5PgorICAgICAgICA8dGVybT48bGl0ZXJhbD5cZGlwIFsgPGxpbmsgbGlua2VuZD0iYXBwLXBz cWwtcGF0dGVybnMiPjxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5wYXR0ZXJuPC9yZXBs YWNlYWJsZT48L2xpbms+IF08L2xpdGVyYWw+PC90ZXJtPgorCisgICAgICAgIDxsaXN0aXRlbT4K KyAgICAgICAgPHBhcmE+CisgICAgICAgIFNob3dzIGluZGV4IHByb3BlcnRpZXMgbGlzdGVkIGlu CisgICAgICAgIDx4cmVmIGxpbmtlbmQ9ImZ1bmN0aW9ucy1pbmZvLWluZGV4LXByb3BzIi8+Lgor ICAgICAgICBJZiA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+cGF0dGVybjwvcmVwbGFj ZWFibGU+IGlzCisgICAgICAgIHNwZWNpZmllZCwgb25seSBhY2Nlc3MgbWV0aG9kcyB3aG9zZSBu YW1lcyBtYXRjaCB0aGUgcGF0dGVybiBhcmUgc2hvd24uCisgICAgICAgIDwvcGFyYT4KKyAgICAg ICAgPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorCisgICAgICA8dmFybGlzdGVu dHJ5PgorICAgICAgICA8dGVybT4KKyAgICAgICAgICA8bGl0ZXJhbD5cZGljcCBbIDxsaW5rIGxp bmtlbmQ9ImFwcC1wc3FsLXBhdHRlcm5zIj48cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+ cGF0dGVybjwvcmVwbGFjZWFibGU+PC9saW5rPl0KKyAgICAgICAgICA8L2xpdGVyYWw+CisgICAg ICAgIDwvdGVybT4KKworICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgIDxwYXJhPgorICAgICAg ICBTaG93cyBpbmRleCBjb2x1bW4gcHJvcGVydGllcyBsaXN0ZWQgaW4KKyAgICAgICAgPHhyZWYg bGlua2VuZD0iZnVuY3Rpb25zLWluZm8taW5kZXgtY29sdW1uLXByb3BzIi8+LgorICAgICAgICBJ ZiA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+cGF0dGVybjwvcmVwbGFjZWFibGU+IGlz CisgICAgICAgIHNwZWNpZmllZCwgb25seSBhY2Nlc3MgbWV0aG9kcyB3aG9zZSBuYW1lcyBtYXRj aCB0aGUgcGF0dGVybiBhcmUgc2hvd24uCisgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9saXN0 aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgogCiAgICAgICA8dmFybGlzdGVudHJ5PgogICAg ICAgICA8dGVybT48bGl0ZXJhbD5cZGVzWytdIFsgPGxpbmsgbGlua2VuZD0iYXBwLXBzcWwtcGF0 dGVybnMiPjxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5wYXR0ZXJuPC9yZXBsYWNlYWJs ZT48L2xpbms+IF08L2xpdGVyYWw+PC90ZXJtPgpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wc3FsL2Nv bW1hbmQuYyBiL3NyYy9iaW4vcHNxbC9jb21tYW5kLmMKaW5kZXggN2I1N2M3Y2I0OS4uMGFiNGE0 YzJhYiAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wc3FsL2NvbW1hbmQuYworKysgYi9zcmMvYmluL3Bz cWwvY29tbWFuZC5jCkBAIC04MDcsNiArODA3LDE2IEBAIGV4ZWNfY29tbWFuZF9kKFBzcWxTY2Fu U3RhdGUgc2Nhbl9zdGF0ZSwgYm9vbCBhY3RpdmVfYnJhbmNoLCBjb25zdCBjaGFyICpjbWQpCiAJ CQljYXNlICd2JzoKIAkJCWNhc2UgJ20nOgogCQkJY2FzZSAnaSc6CisJCQkJaWYgKHN0cm5jbXAo Y21kLCAiZGlwIiwgMykgPT0gMCkKKwkJCQl7CisJCQkJCXN1Y2Nlc3MgPSBkZXNjcmliZUluZGV4 UHJvcGVydGllcyhwYXR0ZXJuLCBzaG93X3N5c3RlbSk7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJ CQllbHNlIGlmIChzdHJuY21wKGNtZCwgImRpY3AiLCA0KSA9PSAwKQorCQkJCXsKKwkJCQkJc3Vj Y2VzcyA9IGRlc2NyaWJlSW5kZXhDb2x1bW5Qcm9wZXJ0aWVzKHBhdHRlcm4sIHNob3dfc3lzdGVt KTsKKwkJCQkJYnJlYWs7CisJCQkJfQogCQkJY2FzZSAncyc6CiAJCQljYXNlICdFJzoKIAkJCQlz dWNjZXNzID0gbGlzdFRhYmxlcygmY21kWzFdLCBwYXR0ZXJuLCBzaG93X3ZlcmJvc2UsIHNob3df c3lzdGVtKTsKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcHNxbC9kZXNjcmliZS5jIGIvc3JjL2Jpbi9w c3FsL2Rlc2NyaWJlLmMKaW5kZXggZTU1MzVlNjE5Yy4uMmU2MWMwZjlmZiAxMDA2NDQKLS0tIGEv c3JjL2Jpbi9wc3FsL2Rlc2NyaWJlLmMKKysrIGIvc3JjL2Jpbi9wc3FsL2Rlc2NyaWJlLmMKQEAg LTE5LDYgKzE5LDcgQEAKICNpbmNsdWRlICJjYXRhbG9nL3BnX2Nhc3RfZC5oIgogI2luY2x1ZGUg ImNhdGFsb2cvcGdfY2xhc3NfZC5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfZGVmYXVsdF9hY2xf ZC5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfaW5kZXguaCIKICNpbmNsdWRlICJmZV91dGlscy9z dHJpbmdfdXRpbHMuaCIKIAogI2luY2x1ZGUgImNvbW1vbi5oIgpAQCAtNDUsNiArNDYsOSBAQCBz dGF0aWMgYm9vbCBkZXNjcmliZU9uZVRTQ29uZmlnKGNvbnN0IGNoYXIgKm9pZCwgY29uc3QgY2hh ciAqbnNwbmFtZSwKIAkJCQkJY29uc3QgY2hhciAqcG5zcG5hbWUsIGNvbnN0IGNoYXIgKnByc25h bWUpOwogc3RhdGljIHZvaWQgcHJpbnRBQ0xDb2x1bW4oUFFFeHBCdWZmZXIgYnVmLCBjb25zdCBj aGFyICpjb2xuYW1lKTsKIHN0YXRpYyBib29sIGxpc3RPbmVFeHRlbnNpb25Db250ZW50cyhjb25z dCBjaGFyICpleHRuYW1lLCBjb25zdCBjaGFyICpvaWQpOworc3RhdGljIGJvb2wgZGVzY3JpYmVP bmVJbmRleENvbHVtblByb3BlcnRpZXMoY29uc3QgY2hhciAqb2lkLCBjb25zdCBjaGFyICpuc3Bu YW1lLAorCQkJCQkJCQkgY29uc3QgY2hhciAqaWR4bmFtZSwgY29uc3QgY2hhciAqYW1uYW1lLAor CQkJCQkJCQkgY29uc3QgY2hhciAqdGFibmFtZSk7CiAKIAogLyotLS0tLS0tLS0tLS0tLS0tCkBA IC01OTk5LDMgKzYwMDMsMjg3IEBAIGRlc2NyaWJlQWNjZXNzTWV0aG9kT3BlcmF0b3JDbGFzc2Vz KGNvbnN0IGNoYXIgKmFjY2Vzc19tZXRob2RfcGF0dGVybiwKIAlQUWNsZWFyKHJlcyk7CiAJcmV0 dXJuIHRydWU7CiB9CisKKy8qCisgKiBcZGlwCisgKiBEZXNjcmliZXMgaW5kZXggcHJvcGVydGll cy4KKyAqCisgKiBUYWtlcyBhbiBvcHRpb25hbCByZWdleHAgdG8gc2VsZWN0IHBhcnRpY3VsYXIg aW5kZXguCisgKi8KK2Jvb2wKK2Rlc2NyaWJlSW5kZXhQcm9wZXJ0aWVzKGNvbnN0IGNoYXIgKnBh dHRlcm4sIGJvb2wgc2hvd1N5c3RlbSkKK3sKKwlQUUV4cEJ1ZmZlckRhdGEgYnVmOworCVBHcmVz dWx0ICAgKnJlczsKKwlwcmludFF1ZXJ5T3B0IG15b3B0ID0gcHNldC5wb3B0OworCisJc3RhdGlj IGNvbnN0IGJvb2wgdHJhbnNsYXRlX2NvbHVtbnNbXSA9IHtmYWxzZSwgZmFsc2UsIGZhbHNlLCBm YWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZX07CisKKwlpbml0UFFFeHBCdWZmZXIoJmJ1Zik7CisK KwlwcmludGZQUUV4cEJ1ZmZlcigmYnVmLAorCQkJCQkgICJTRUxFQ1QiCisJCQkJCSAgIiAgbi5u c3BuYW1lIEFTIFwiJXNcIixcbiIKKwkJCQkJICAiICBjLnJlbG5hbWUgQVMgXCIlc1wiLFxuIgor CQkJCQkgICIgIGFtLmFtbmFtZSBBUyBcIiVzXCIsXG4iLAorCQkJCQkgIGdldHRleHRfbm9vcCgi U2NoZW1hIiksCisJCQkJCSAgZ2V0dGV4dF9ub29wKCJOYW1lIiksCisJCQkJCSAgZ2V0dGV4dF9u b29wKCJBY2Nlc3MgbWV0aG9kIikpOworCWFwcGVuZFBRRXhwQnVmZmVyKCZidWYsCisJCQkJCXBz ZXQuc3ZlcnNpb24gPj0gOTA2MDAgPworCQkJCQkgICIgIENBU0UgV0hFTiBwZ19jYXRhbG9nLnBn X2luZGV4X2hhc19wcm9wZXJ0eShjLm9pZCwgJ2NsdXN0ZXJhYmxlJylcbiIKKwkJCQkJICAiICAg IFRIRU4gJyUxJHMnIEVMU0UgJyUyJHMnIEVORCBBUyBcIiUzJHNcIixcbiIKKwkJCQkJICAiICBD QVNFIFdIRU4gcGdfY2F0YWxvZy5wZ19pbmRleF9oYXNfcHJvcGVydHkoYy5vaWQsICdpbmRleF9z Y2FuJylcbiIKKwkJCQkJICAiICAgIFRIRU4gJyUxJHMnIEVMU0UgJyUyJHMnIEVORCBBUyBcIiU0 JHNcIixcbiIKKwkJCQkJICAiICBDQVNFIFdIRU4gcGdfY2F0YWxvZy5wZ19pbmRleF9oYXNfcHJv cGVydHkoYy5vaWQsICdiaXRtYXBfc2NhbicpXG4iCisJCQkJCSAgIiAgICBUSEVOICclMSRzJyBF TFNFICclMiRzJyBFTkQgQVMgXCIlNSRzXCIsXG4iCisJCQkJCSAgIiAgQ0FTRSBXSEVOIHBnX2Nh dGFsb2cucGdfaW5kZXhfaGFzX3Byb3BlcnR5KGMub2lkLCAnYmFja3dhcmRfc2NhbicpXG4iCisJ CQkJCSAgIiAgICBUSEVOICclMSRzJyBFTFNFICclMiRzJyBFTkQgQVMgXCIlNiRzXCJcbiIKKwkJ CQkJICA6CisJCQkJCSAgIiAgQ0FTRSBXSEVOIGFtLmFtY2x1c3RlcmFibGUgVEhFTiAnJTEkcycg RUxTRSAnJTIkcycgRU5EIEFTIFwiJTMkc1wiLFxuIgorCQkJCQkgICIgIENBU0UgV0hFTiBhbS5h bWdldHR1cGxlIDw+IDAgVEhFTiAnJTEkcycgRUxTRSAnJTIkcycgRU5EIEFTIFwiJTQkc1wiLFxu IgorCQkJCQkgICIgIENBU0UgV0hFTiBhbS5hbWdldGJpdG1hcCA8PiAwIFRIRU4gJyUxJHMnIEVM U0UgJyUyJHMnIEVORCBBUyBcIiU1JHNcIixcbiIKKwkJCQkJICAiICBDQVNFIFdIRU4gYW0uYW1j YW5iYWNrd2FyZCBUSEVOICclMSRzJyBFTFNFICclMiRzJyBFTkQgQVMgXCIlNiRzXCJcbiIsCisJ CQkJCSAgZ2V0dGV4dF9ub29wKCJ5ZXMiKSwKKwkJCQkJICBnZXR0ZXh0X25vb3AoIm5vIiksCisJ CQkJCSAgZ2V0dGV4dF9ub29wKCJDbHVzdGVyYWJsZSIpLAorCQkJCQkgIGdldHRleHRfbm9vcCgi SW5kZXggc2NhbiIpLAorCQkJCQkgIGdldHRleHRfbm9vcCgiQml0bWFwIHNjYW4iKSwKKwkJCQkJ ICBnZXR0ZXh0X25vb3AoIkJhY2t3YXJkIHNjYW4iKSk7CisJYXBwZW5kUFFFeHBCdWZmZXJTdHIo JmJ1ZiwKKwkJCQkJICAiRlJPTSBwZ19jYXRhbG9nLnBnX2NsYXNzIGNcbiIKKwkJCQkJICAiICBM RUZUIEpPSU4gcGdfY2F0YWxvZy5wZ19uYW1lc3BhY2UgbiBPTiBuLm9pZCA9IGMucmVsbmFtZXNw YWNlXG4iCisJCQkJCSAgIiAgTEVGVCBKT0lOIHBnX2NhdGFsb2cucGdfYW0gYW0gT04gYW0ub2lk ID0gYy5yZWxhbVxuIgorCQkJCQkgICJXSEVSRSBjLnJlbGtpbmQ9J2knXG4iCisJCQkJCSAgIiAg QU5EIG4ubnNwbmFtZSAhfiAncGdfdG9hc3QnXG4iKTsKKworCWlmICghc2hvd1N5c3RlbSAmJiAh cGF0dGVybikKKwkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmJ1ZiwKKwkJCQkJCQkgIiAgQU5EIG4u bnNwbmFtZSA8PiAncGdfY2F0YWxvZydcbiIKKwkJCQkJCQkgIiAgQU5EIG4ubnNwbmFtZSA8PiAn aW5mb3JtYXRpb25fc2NoZW1hJ1xuIik7CisKKwlwcm9jZXNzU1FMTmFtZVBhdHRlcm4ocHNldC5k YiwgJmJ1ZiwgcGF0dGVybiwgdHJ1ZSwgZmFsc2UsCisJCQkJCQkgICJuLm5zcG5hbWUiLCAiYy5y ZWxuYW1lIiwgTlVMTCwgTlVMTCk7CisKKwlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmYnVmLCAiT1JE RVIgQlkgMTsiKTsKKwlyZXMgPSBQU1FMZXhlYyhidWYuZGF0YSk7CisJdGVybVBRRXhwQnVmZmVy KCZidWYpOworCWlmICghcmVzKQorCQlyZXR1cm4gZmFsc2U7CisKKwlteW9wdC5udWxsUHJpbnQg PSBOVUxMOworCW15b3B0LnRpdGxlID0gXygiSW5kZXggcHJvcGVydGllcyIpOworCW15b3B0LnRy YW5zbGF0ZV9oZWFkZXIgPSB0cnVlOworCW15b3B0LnRyYW5zbGF0ZV9jb2x1bW5zID0gdHJhbnNs YXRlX2NvbHVtbnM7CisJbXlvcHQubl90cmFuc2xhdGVfY29sdW1ucyA9IGxlbmd0aG9mKHRyYW5z bGF0ZV9jb2x1bW5zKTsKKworCXByaW50UXVlcnkocmVzLCAmbXlvcHQsIHBzZXQucXVlcnlGb3V0 LCBmYWxzZSwgcHNldC5sb2dmaWxlKTsKKworCVBRY2xlYXIocmVzKTsKKwlyZXR1cm4gdHJ1ZTsK K30KKworLyoKKyAqIFxkaWNwCisgKiBEZXNjcmliZXMgaW5kZXggaW5kZXggY29sdW1uIHByb3Bl cnRpZXMuCisgKgorICogVGFrZXMgYW4gb3B0aW9uYWwgcmVnZXhwIHRvIHNlbGVjdCBwYXJ0aWN1 bGFyIGluZGV4LgorICovCitib29sCitkZXNjcmliZUluZGV4Q29sdW1uUHJvcGVydGllcyhjb25z dCBjaGFyICppbmRleF9wYXR0ZXJuLCBib29sIHNob3dTeXN0ZW0pCit7CisJUFFFeHBCdWZmZXJE YXRhIGJ1ZjsKKwlQR3Jlc3VsdCAgICpyZXM7CisJaW50CQkJaTsKKworCWluaXRQUUV4cEJ1ZmZl cigmYnVmKTsKKworCXByaW50ZlBRRXhwQnVmZmVyKCZidWYsCisJCQkJCSAgIlNFTEVDVCBESVNU SU5DVCBjLm9pZCxcbiIKKwkJCQkJICAiICBuLm5zcG5hbWUsXG4iCisJCQkJCSAgIiAgYy5yZWxu YW1lLFxuIgorCQkJCQkgICIgIGFtLmFtbmFtZSxcbiIKKwkJCQkJICAiICBjMi5yZWxuYW1lXG4i CisJCQkJCSAgIkZST00gcGdfY2F0YWxvZy5wZ19jbGFzcyBjXG4iCisJCQkJCSAgIiAgTEVGVCBK T0lOIHBnX2NhdGFsb2cucGdfbmFtZXNwYWNlIG4gT04gbi5vaWQgPSByZWxuYW1lc3BhY2VcbiIK KwkJCQkJICAiICBMRUZUIEpPSU4gcGdfY2F0YWxvZy5wZ19hbSBhbSBPTiBhbS5vaWQgPSBjLnJl bGFtXG4iCisJCQkJCSAgIiAgTEVGVCBKT0lOIHBnX2NhdGFsb2cucGdfaW5kZXggaSBPTiBpLmlu ZGV4cmVsaWQgPSBjLm9pZFxuIgorCQkJCQkgICIgIExFRlQgSk9JTiBwZ19jYXRhbG9nLnBnX2Ns YXNzIGMyIE9OIGkuaW5kcmVsaWQgPSBjMi5vaWRcbiIpOworCisJYXBwZW5kUFFFeHBCdWZmZXJT dHIoJmJ1ZiwgIldIRVJFIGMucmVsa2luZD0naSdcbiIpOworCisJaWYgKCFzaG93U3lzdGVtICYm ICFpbmRleF9wYXR0ZXJuKQorCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmYnVmLCAiQU5EIG4ubnNw bmFtZSA8PiAncGdfY2F0YWxvZydcbiIKKwkJCQkJCQkgIkFORCBuLm5zcG5hbWUgPD4gJ2luZm9y bWF0aW9uX3NjaGVtYSdcbiIpOworCisJcHJvY2Vzc1NRTE5hbWVQYXR0ZXJuKHBzZXQuZGIsICZi dWYsIGluZGV4X3BhdHRlcm4sIHRydWUsIGZhbHNlLAorCQkJCQkJICAibi5uc3BuYW1lIiwgImMu cmVsbmFtZSIsIE5VTEwsCisJCQkJCQkgICJwZ19jYXRhbG9nLnBnX3RhYmxlX2lzX3Zpc2libGUo Yy5vaWQpIik7CisKKwlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmYnVmLCAiT1JERVIgQlkgMiwgMzsi KTsKKworCXJlcyA9IFBTUUxleGVjKGJ1Zi5kYXRhKTsKKwl0ZXJtUFFFeHBCdWZmZXIoJmJ1Zik7 CisJaWYgKCFyZXMpCisJCXJldHVybiBmYWxzZTsKKworCWlmIChQUW50dXBsZXMocmVzKSA9PSAw KQorCXsKKwkJaWYgKCFwc2V0LnF1aWV0KQorCQl7CisJCQlpZiAoaW5kZXhfcGF0dGVybikKKwkJ CQlwc3FsX2Vycm9yKCJEaWQgbm90IGZpbmQgYW55IGluZGV4IG5hbWVkIFwiJXNcIlxuIiwKKwkJ CQkJCSAgIGluZGV4X3BhdHRlcm4pOworCQkJZWxzZQorCQkJCXBzcWxfZXJyb3IoIkRpZCBub3Qg ZmluZCBhbnkgcmVsYXRpb25zLlxuIik7CisJCX0KKwkJUFFjbGVhcihyZXMpOworCQlyZXR1cm4g ZmFsc2U7CisJfQorCisJZm9yIChpID0gMDsgaSA8IFBRbnR1cGxlcyhyZXMpOyBpKyspCisJewor CQljb25zdCBjaGFyICpvaWQgPSBQUWdldHZhbHVlKHJlcywgaSwgMCk7CisJCWNvbnN0IGNoYXIg Km5zcG5hbWUgPSBQUWdldHZhbHVlKHJlcywgaSwgMSk7CisJCWNvbnN0IGNoYXIgKmlkeG5hbWUg PSBQUWdldHZhbHVlKHJlcywgaSwgMik7CisJCWNvbnN0IGNoYXIgKmFtbmFtZSA9IFBRZ2V0dmFs dWUocmVzLCBpLCAzKTsKKwkJY29uc3QgY2hhciAqdGFibmFtZSA9IFBRZ2V0dmFsdWUocmVzLCBp LCA0KTsKKworCQlpZiAoIWRlc2NyaWJlT25lSW5kZXhDb2x1bW5Qcm9wZXJ0aWVzKG9pZCwgbnNw bmFtZSwgaWR4bmFtZSwgYW1uYW1lLAorCQkJCQkJCQkJCQkgIHRhYm5hbWUpKQorCQl7CisJCQlQ UWNsZWFyKHJlcyk7CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKwkJaWYgKGNhbmNlbF9wcmVzc2Vk KQorCQl7CisJCQlQUWNsZWFyKHJlcyk7CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKwl9CisKKwlQ UWNsZWFyKHJlcyk7CisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBib29sCitkZXNjcmliZU9u ZUluZGV4Q29sdW1uUHJvcGVydGllcyhjb25zdCBjaGFyICpvaWQsCisJCQkJCQkJCSBjb25zdCBj aGFyICpuc3BuYW1lLAorCQkJCQkJCQkgY29uc3QgY2hhciAqaWR4bmFtZSwKKwkJCQkJCQkJIGNv bnN0IGNoYXIgKmFtbmFtZSwKKwkJCQkJCQkJIGNvbnN0IGNoYXIgKnRhYm5hbWUpCit7CisJUFFF eHBCdWZmZXJEYXRhIGJ1ZjsKKwlQR3Jlc3VsdCAgICpyZXM7CisJcHJpbnRRdWVyeU9wdCBteW9w dCA9IHBzZXQucG9wdDsKKwljaGFyCSAgICpmb290ZXJzWzNdID0ge05VTEwsIE5VTEx9OworCXN0 YXRpYyBjb25zdCBib29sIHRyYW5zbGF0ZV9jb2x1bW5zW10gPSB7ZmFsc2UsIGZhbHNlLCBmYWxz ZSwgZmFsc2UsIGZhbHNlLAorCQkJCQkJCQkJCQkgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2Us IGZhbHNlfTsKKworCWluaXRQUUV4cEJ1ZmZlcigmYnVmKTsKKworCXByaW50ZlBRRXhwQnVmZmVy KCZidWYsCisJCQkJICAiU0VMRUNUXG4iCisJCQkJICAiICBhLmF0dG5hbWUgQVMgXCIlc1wiLFxu IgorCQkJCSAgIiAgcGdfY2F0YWxvZy5wZ19nZXRfaW5kZXhkZWYoaS5pbmRleHJlbGlkLCBhLmF0 dG51bSwgdHJ1ZSkgQVMgXCIlc1wiLFxuIgorCQkJCSAgIiAgQ0FTRSBXSEVOIHBnX2NhdGFsb2cu cGdfb3BjbGFzc19pc192aXNpYmxlKG8ub2lkKSBUSEVOICcnIEVMU0Ugbi5uc3BuYW1lIHx8ICcu JyBFTkQgfHwgby5vcGNuYW1lIEFTIFwiJXNcIixcbiIsCisJCQkJICBnZXR0ZXh0X25vb3AoIkNv bHVtbiBuYW1lIiksCisJCQkJICBnZXR0ZXh0X25vb3AoIkV4cHIiKSwKKwkJCQkgIGdldHRleHRf bm9vcCgiT3BjbGFzcyIpKTsKKworCWlmIChwc2V0LnN2ZXJzaW9uID49IDkwNjAwKQorCQlhcHBl bmRQUUV4cEJ1ZmZlcigmYnVmLAorCQkJCQkgICIgIENBU0VcbiIKKwkJCQkJICAiICAgIFdIRU4g cGdfY2F0YWxvZy5wZ19pbmRleF9jb2x1bW5faGFzX3Byb3BlcnR5KGMub2lkLCBhLmF0dG51bSwg J29yZGVyYWJsZScpID0gdHJ1ZSBcbiIKKwkJCQkJICAiICAgIFRIRU4gQ0FTRSBXSEVOIHBnX2Nh dGFsb2cucGdfaW5kZXhfY29sdW1uX2hhc19wcm9wZXJ0eShjLm9pZCwgYS5hdHRudW0sICdhc2Mn KVxuIgorCQkJCQkgICIgICAgICAgICBUSEVOICclMSRzJyBFTFNFICclMiRzJyBFTkQgXG4iCisJ CQkJCSAgIiAgICBFTFNFIE5VTEwiCisJCQkJCSAgIiAgRU5EIEFTIFwiJTMkc1wiLCIKKwkJCQkJ ICAiICBDQVNFXG4iCisJCQkJCSAgIiAgICBXSEVOIHBnX2NhdGFsb2cucGdfaW5kZXhfY29sdW1u X2hhc19wcm9wZXJ0eShjLm9pZCwgYS5hdHRudW0sICdvcmRlcmFibGUnKSA9IHRydWUgXG4iCisJ CQkJCSAgIiAgICBUSEVOIENBU0UgV0hFTiBwZ19jYXRhbG9nLnBnX2luZGV4X2NvbHVtbl9oYXNf cHJvcGVydHkoYy5vaWQsIGEuYXR0bnVtLCAnbnVsbHNfZmlyc3QnKVxuIgorCQkJCQkgICIgICAg ICAgICBUSEVOICclMSRzJyBFTFNFICclMiRzJyBFTkQgXG4iCisJCQkJCSAgIiAgICBFTFNFIE5V TEwiCisJCQkJCSAgIiAgRU5EIEFTIFwiJTQkc1wiLCIKKwkJCQkJICAiICBDQVNFIFdIRU4gcGdf Y2F0YWxvZy5wZ19pbmRleF9jb2x1bW5faGFzX3Byb3BlcnR5KGMub2lkLCBhLmF0dG51bSwgJ29y ZGVyYWJsZScpXG4iCisJCQkJCSAgIiAgICBUSEVOICclMSRzJyBFTFNFICclMiRzJyBFTkQgQVMg XCIlNSRzXCIsXG4iCisJCQkJCSAgIiAgQ0FTRSBXSEVOIHBnX2NhdGFsb2cucGdfaW5kZXhfY29s dW1uX2hhc19wcm9wZXJ0eShjLm9pZCwgYS5hdHRudW0sICdkaXN0YW5jZV9vcmRlcmFibGUnKVxu IgorCQkJCQkgICIgICAgVEhFTiAnJTEkcycgRUxTRSAnJTIkcycgRU5EIEFTIFwiJTYkc1wiLFxu IgorCQkJCQkgICIgIENBU0UgV0hFTiBwZ19jYXRhbG9nLnBnX2luZGV4X2NvbHVtbl9oYXNfcHJv cGVydHkoYy5vaWQsIGEuYXR0bnVtLCAncmV0dXJuYWJsZScpXG4iCisJCQkJCSAgIiAgICBUSEVO ICclMSRzJyBFTFNFICclMiRzJyBFTkQgQVMgXCIlNyRzXCIsXG4iCisJCQkJCSAgIiAgQ0FTRSBX SEVOIHBnX2NhdGFsb2cucGdfaW5kZXhfY29sdW1uX2hhc19wcm9wZXJ0eShjLm9pZCwgYS5hdHRu dW0sICdzZWFyY2hfYXJyYXknKVxuIgorCQkJCQkgICIgICAgVEhFTiAnJTEkcycgRUxTRSAnJTIk cycgRU5EIEFTIFwiJTgkc1wiLFxuIgorCQkJCQkgICIgIENBU0UgV0hFTiBwZ19jYXRhbG9nLnBn X2luZGV4X2NvbHVtbl9oYXNfcHJvcGVydHkoYy5vaWQsIGEuYXR0bnVtLCAnc2VhcmNoX251bGxz JylcbiIKKwkJCQkJICAiICAgIFRIRU4gJyUxJHMnIEVMU0UgJyUyJHMnIEVORCBBUyBcIiU5JHNc IlxuIiwKKwkJCQkJICBnZXR0ZXh0X25vb3AoInllcyIpLAorCQkJCQkgIGdldHRleHRfbm9vcCgi bm8iKSwKKwkJCQkJICBnZXR0ZXh0X25vb3AoIkFTQyIpLAorCQkJCQkgIGdldHRleHRfbm9vcCgi TnVsbHMgZmlyc3QiKSwKKwkJCQkJICBnZXR0ZXh0X25vb3AoIk9yZGVyYWJsZSIpLAorCQkJCQkg IGdldHRleHRfbm9vcCgiRGlzdGFuY2Ugb3JkZXJhYmxlIiksCisJCQkJCSAgZ2V0dGV4dF9ub29w KCJSZXR1cm5hYmxlIiksCisJCQkJCSAgZ2V0dGV4dF9ub29wKCJTZWFyY2ggYXJyYXkiKSwKKwkJ CQkJICBnZXR0ZXh0X25vb3AoIlNlYXJjaCBudWxscyIpKTsKKwllbHNlCisJCWFwcGVuZFBRRXhw QnVmZmVyKCZidWYsCisJCQkJCSAgIiAgQ0FTRSBXSEVOIGFtLmFtY2Fub3JkZXIgVEhFTiBDQVNF XG4iCisJCQkJCSAgIiAgICBXSEVOIChpLmluZG9wdGlvblthLmF0dG51bSAtIDFdICYgJTEkZCkg PSAgMFxuIiAvKiBJTkRPUFRJT05fREVTQyAqLworCQkJCQkgICIgICAgVEhFTiAnJTIkcycgRUxT RSAnJTMkcycgRU5EXG4iCisJCQkJCSAgIiAgRUxTRSBOVUxMIEVORCBBUyBcIiU0JHNcIixcbiIK KwkJCQkJICAiICBDQVNFIFdIRU4gYW0uYW1jYW5vcmRlciBUSEVOIENBU0VcbiIKKwkJCQkJICAi ICAgIFdIRU4gKGkuaW5kb3B0aW9uW2EuYXR0bnVtIC0gMV0gJiAlNSRkKSA8PiAwXG4iIC8qIElO RE9QVElPTl9OVUxMU19GSVJTVCAqLworCQkJCQkgICIgICAgVEhFTiAnJTIkcycgRUxTRSAnJTMk cycgRU5EXG4iCisJCQkJCSAgIiAgRUxTRSBOVUxMIEVORCBBUyBcIiU2JHNcIixcbiIKKwkJCQkJ ICAiICBDQVNFIFdIRU4gYW0uYW1jYW5vcmRlciBUSEVOICclMiRzJyBFTFNFICclMyRzJyBFTkQg QVMgXCIlNyRzXCIsXG4iCisJCQkJCSAgIiAgQ0FTRSBXSEVOIGFtLmFtY2Fub3JkZXJieW9wIFRI RU4gJyUyJHMnIEVMU0UgJyUzJHMnIEVORCBBUyBcIiU4JHNcIixcbiIKKwkJCQkJICAiICBDQVNF IFdIRU4gYW0uYW1zZWFyY2hhcnJheSBUSEVOICclMiRzJyBFTFNFICclMyRzJyBFTkQgQVMgXCIl OSRzXCIsXG4iCisJCQkJCSAgIiAgQ0FTRSBXSEVOIGFtLmFtc2VhcmNobnVsbHMgVEhFTiAnJTIk cycgRUxTRSAnJTMkcycgRU5EIEFTIFwiJTEwJHNcIlxuIiwKKwkJCQkJICBJTkRPUFRJT05fREVT QywKKwkJCQkJICBnZXR0ZXh0X25vb3AoInllcyIpLAorCQkJCQkgIGdldHRleHRfbm9vcCgibm8i KSwKKwkJCQkJICBnZXR0ZXh0X25vb3AoIkFTQyIpLAorCQkJCQkgIElORE9QVElPTl9OVUxMU19G SVJTVCwKKwkJCQkJICBnZXR0ZXh0X25vb3AoIk51bGxzIGZpcnN0IiksCisJCQkJCSAgZ2V0dGV4 dF9ub29wKCJPcmRlcmFibGUiKSwKKwkJCQkJICBnZXR0ZXh0X25vb3AoIkRpc3RhbmNlIG9yZGVy YWJsZSIpLAorCQkJCQkgIGdldHRleHRfbm9vcCgiU2VhcmNoIGFycmF5IiksCisJCQkJCSAgZ2V0 dGV4dF9ub29wKCJTZWFyY2ggbnVsbHMiKSk7CisKKwlhcHBlbmRQUUV4cEJ1ZmZlcigmYnVmLAor CQkJCQkgICJGUk9NIHBnX2NhdGFsb2cucGdfY2xhc3MgY1xuIgorCQkJCQkgICIgIExFRlQgSk9J TiBwZ19jYXRhbG9nLnBnX2luZGV4IGkgT04gaS5pbmRleHJlbGlkID0gYy5vaWRcbiIKKwkJCQkJ ICAiICBMRUZUIEpPSU4gcGdfY2F0YWxvZy5wZ19hdHRyaWJ1dGUgYSBPTiBhLmF0dHJlbGlkID0g Yy5vaWRcbiIKKwkJCQkJICAiICBMRUZUIEpPSU4gcGdfY2F0YWxvZy5wZ19vcGNsYXNzIG8gT04g by5vaWQgPSAoaS5pbmRjbGFzczo6cGdfY2F0YWxvZy5vaWRbXSlbYS5hdHRudW0gLSAxXVxuIgor CQkJCQkgICIgIExFRlQgSk9JTiBwZ19jYXRhbG9nLnBnX25hbWVzcGFjZSBuIE9OIG4ub2lkID0g by5vcGNuYW1lc3BhY2VcbiIpOworCWlmIChwc2V0LnN2ZXJzaW9uIDwgOTA2MDApCisJCWFwcGVu ZFBRRXhwQnVmZmVyKCZidWYsCisJCQkJCSAgIiAgTEVGVCBKT0lOIHBnX2NhdGFsb2cucGdfYW0g YW0gT04gYW0ub2lkID0gYy5yZWxhbVxuIik7CisJYXBwZW5kUFFFeHBCdWZmZXIoJmJ1ZiwKKwkJ CQkJICAiV0hFUkUgYy5vaWQgPSAlc1xuIgorCQkJCQkgICJPUkRFUiBCWSBhLmF0dG51bSIsCisJ CQkJCSAgb2lkKTsKKworCXJlcyA9IFBTUUxleGVjKGJ1Zi5kYXRhKTsKKwl0ZXJtUFFFeHBCdWZm ZXIoJmJ1Zik7CisJaWYgKCFyZXMpCisJCXJldHVybiBmYWxzZTsKKwlpZiAoUFFudHVwbGVzKHJl cykgPT0gMCkKKwl7CisJCVBRY2xlYXIocmVzKTsKKwkJcmV0dXJuIHRydWU7CisJfQorCisJbXlv cHQubnVsbFByaW50ID0gTlVMTDsKKwlteW9wdC50aXRsZSA9IHBzcHJpbnRmKF8oIkluZGV4ICVz LiVzIiksIG5zcG5hbWUsIGlkeG5hbWUpOworCWZvb3RlcnNbMF0gPSBwc3ByaW50ZihfKCJUYWJs ZTogJXMiKSwgdGFibmFtZSk7CisJZm9vdGVyc1sxXSA9IHBzcHJpbnRmKF8oIkFjY2VzcyBtZXRo b2Q6ICVzIiksIGFtbmFtZSk7CisJbXlvcHQuZm9vdGVycyA9IGZvb3RlcnM7CisJbXlvcHQudG9w dC5kZWZhdWx0X2Zvb3RlciA9IGZhbHNlOworCW15b3B0LnRyYW5zbGF0ZV9oZWFkZXIgPSB0cnVl OworCW15b3B0LnRyYW5zbGF0ZV9jb2x1bW5zID0gdHJhbnNsYXRlX2NvbHVtbnM7CisJbXlvcHQu bl90cmFuc2xhdGVfY29sdW1ucyA9IGxlbmd0aG9mKHRyYW5zbGF0ZV9jb2x1bW5zKTsKKworCXBy aW50UXVlcnkocmVzLCAmbXlvcHQsIHBzZXQucXVlcnlGb3V0LCBmYWxzZSwgcHNldC5sb2dmaWxl KTsKKwlQUWNsZWFyKHJlcyk7CisJcmV0dXJuIHRydWU7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmlu L3BzcWwvZGVzY3JpYmUuaCBiL3NyYy9iaW4vcHNxbC9kZXNjcmliZS5oCmluZGV4IDZjY2U4MGYy NjAuLjg2Y2UxODA3MWIgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcHNxbC9kZXNjcmliZS5oCisrKyBi L3NyYy9iaW4vcHNxbC9kZXNjcmliZS5oCkBAIC0xMjgsNCArMTI4LDExIEBAIGV4dGVybiBib29s IGRlc2NyaWJlQWNjZXNzTWV0aG9kT3BlcmF0b3JDbGFzc2VzKGNvbnN0IGNoYXIgKmFjY2Vzc19t ZXRob2RfcGF0dGVyCiAJCQkJCQkJCQkJCQljb25zdCBjaGFyICpvcGNsYXNzX3BhdHRlcm4sCiAJ CQkJCQkJCQkJCQlib29sIHZlcmJvc2UpOwogCisvKiBcZGlwICovCitleHRlcm4gYm9vbCBkZXNj cmliZUluZGV4UHJvcGVydGllcyhjb25zdCBjaGFyICpwYXR0ZXJuLCBib29sIHNob3dTeXN0ZW0p OworCisvKiBcZGljcCAqLworZXh0ZXJuIGJvb2wgZGVzY3JpYmVJbmRleENvbHVtblByb3BlcnRp ZXMoY29uc3QgY2hhciAqaW5kZXhQYXR0ZXJuLAorCQkJCQkJCQkJCSAgYm9vbCBzaG93U3lzdGVt KTsKKwogI2VuZGlmCQkJCQkJCS8qIERFU0NSSUJFX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9iaW4v cHNxbC9oZWxwLmMgYi9zcmMvYmluL3BzcWwvaGVscC5jCmluZGV4IGE4ZDJiNTNiNjIuLjFjOWEy NDJlMmUgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcHNxbC9oZWxwLmMKKysrIGIvc3JjL2Jpbi9wc3Fs L2hlbHAuYwpAQCAtMjQ3LDYgKzI0Nyw4IEBAIHNsYXNoVXNhZ2UodW5zaWduZWQgc2hvcnQgaW50 IHBhZ2VyKQogCWZwcmludGYob3V0cHV0LCBfKCIgIFxcZEZ0WytdIFtQQVRURVJOXSAgICAgIGxp c3QgdGV4dCBzZWFyY2ggdGVtcGxhdGVzXG4iKSk7CiAJZnByaW50ZihvdXRwdXQsIF8oIiAgXFxk Z1tTK10gW1BBVFRFUk5dICAgICAgbGlzdCByb2xlc1xuIikpOwogCWZwcmludGYob3V0cHV0LCBf KCIgIFxcZGlbUytdIFtQQVRURVJOXSAgICAgIGxpc3QgaW5kZXhlc1xuIikpOworCWZwcmludGYo b3V0cHV0LCBfKCIgIFxcZGlwW1NdIFtQQVRURVJOXSAgICAgIGxpc3QgaW5kZXhlcyB3aXRoIHBy b3BlcnRpZXNcbiIpKTsKKwlmcHJpbnRmKG91dHB1dCwgXygiICBcXGRpY3BbU11bUEFUVEVSTl0g ICAgICBzaG93IGluZGV4IGNvbHVtbiBwcm9wZXJ0aWVzXG4iKSk7CiAJZnByaW50ZihvdXRwdXQs IF8oIiAgXFxkbCAgICAgICAgICAgICAgICAgICAgbGlzdCBsYXJnZSBvYmplY3RzLCBzYW1lIGFz IFxcbG9fbGlzdFxuIikpOwogCWZwcmludGYob3V0cHV0LCBfKCIgIFxcZExbUytdIFtQQVRURVJO XSAgICAgIGxpc3QgcHJvY2VkdXJhbCBsYW5ndWFnZXNcbiIpKTsKIAlmcHJpbnRmKG91dHB1dCwg XygiICBcXGRtW1MrXSBbUEFUVEVSTl0gICAgICBsaXN0IG1hdGVyaWFsaXplZCB2aWV3c1xuIikp OwpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wc3FsL3RhYi1jb21wbGV0ZS5jIGIvc3JjL2Jpbi9wc3Fs L3RhYi1jb21wbGV0ZS5jCmluZGV4IDNhMjgwY2NkOTQuLjJjNmU0N2QwZmQgMTAwNjQ0Ci0tLSBh L3NyYy9iaW4vcHNxbC90YWItY29tcGxldGUuYworKysgYi9zcmMvYmluL3BzcWwvdGFiLWNvbXBs ZXRlLmMKQEAgLTEzOTgsOCArMTM5OCw4IEBAIHBzcWxfY29tcGxldGlvbihjb25zdCBjaGFyICp0 ZXh0LCBpbnQgc3RhcnQsIGludCBlbmQpCiAJCSJcXGQiLCAiXFxkYSIsICJcXGRBIiwgIlxcZEFw IiwgIlxcZEFvIiwgIlxcZEFwIiwgIlxcZEFjIiwKIAkJIlxcZGIiLCAiXFxkYyIsICJcXGRDIiwg IlxcZGQiLCAiXFxkZHAiLCAiXFxkRCIsCiAJCSJcXGRlcyIsICJcXGRldCIsICJcXGRldSIsICJc XGRldyIsICJcXGRFIiwgIlxcZGYiLAotCQkiXFxkRiIsICJcXGRGZCIsICJcXGRGcCIsICJcXGRG dCIsICJcXGRnIiwgIlxcZGkiLCAiXFxkbCIsICJcXGRMIiwKLQkJIlxcZG0iLCAiXFxkbiIsICJc XGRvIiwgIlxcZE8iLCAiXFxkcCIsCisJCSJcXGRGIiwgIlxcZEZkIiwgIlxcZEZwIiwgIlxcZEZ0 IiwgIlxcZGciLCAiXFxkaSIsICJcXGRpY3AiLCAiXFxkaXAiLAorCQkiXFxkbCIsICJcXGRMIiwg IlxcZG0iLCAiXFxkbiIsICJcXGRvIiwgIlxcZE8iLCAiXFxkcCIsCiAJCSJcXGRyZHMiLCAiXFxk UnMiLCAiXFxkUnAiLCAiXFxkcyIsICJcXGRTIiwKIAkJIlxcZHQiLCAiXFxkVCIsICJcXGR2Iiwg IlxcZHUiLCAiXFxkeCIsICJcXGR5IiwKIAkJIlxcZSIsICJcXGVjaG8iLCAiXFxlZiIsICJcXGVs aWYiLCAiXFxlbHNlIiwgIlxcZW5jb2RpbmciLApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVz cy9leHBlY3RlZC9wc3FsLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcHNxbC5vdXQK aW5kZXggNzg5NjFlZjJlZS4uMzI3MzFlOTI0MiAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVz cy9leHBlY3RlZC9wc3FsLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3BzcWwu b3V0CkBAIC00NjMxLDMgKzQ2MzEsMTkgQEAgbGFzdCBlcnJvciBjb2RlOiAyMjAxMgogIGJyaW4g fCBvaWQgICAgICAgIHwgICAgICAgICAgICAgIHwgb2lkX21pbm1heF9vcHMgfCB5ZXMKICgxIHJv dykKIAorLS0gY2hlY2sgcHJpbnRpbmcgaW5mbyBhYm91dCBpbmRleGVzCitcZGlwIHBnX2FtX25h bWVfaW5kZXgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5k ZXggcHJvcGVydGllcworICAgU2NoZW1hICAgfCAgICAgICBOYW1lICAgICAgIHwgQWNjZXNzIG1l dGhvZCB8IENsdXN0ZXJhYmxlIHwgSW5kZXggc2NhbiB8IEJpdG1hcCBzY2FuIHwgQmFja3dhcmQg c2NhbiAKKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tCisg cGdfY2F0YWxvZyB8IHBnX2FtX25hbWVfaW5kZXggfCBidHJlZSAgICAgICAgIHwgeWVzICAgICAg ICAgfCB5ZXMgICAgICAgIHwgeWVzICAgICAgICAgfCB5ZXMKKygxIHJvdykKKworXGRpY3AgcGdf YW1fbmFtZV9pbmRleAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgSW5kZXggcGdfY2F0YWxvZy5wZ19hbV9uYW1lX2luZGV4CisgQ29sdW1uIG5hbWUgfCAg RXhwciAgfCBPcGNsYXNzICB8IEFTQyB8IE51bGxzIGZpcnN0IHwgT3JkZXJhYmxlIHwgRGlzdGFu Y2Ugb3JkZXJhYmxlIHwgUmV0dXJuYWJsZSB8IFNlYXJjaCBhcnJheSB8IFNlYXJjaCBudWxscyAK Ky0tLS0tLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLSstLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0tLQorIGFtbmFtZSAgICAgIHwgYW1uYW1lIHwgbmFtZV9vcHMgfCB5ZXMg fCBubyAgICAgICAgICB8IHllcyAgICAgICB8IG5vICAgICAgICAgICAgICAgICB8IHllcyAgICAg ICAgfCB5ZXMgICAgICAgICAgfCB5ZXMKK1RhYmxlOiBwZ19hbQorQWNjZXNzIG1ldGhvZDogYnRy ZWUKKwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvcHNxbC5zcWwgYi9zcmMvdGVz dC9yZWdyZXNzL3NxbC9wc3FsLnNxbAppbmRleCA3NGNjNzE0MmRhLi4wYjdkYWE1ZDBlIDEwMDY0 NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9wc3FsLnNxbAorKysgYi9zcmMvdGVzdC9yZWdy ZXNzL3NxbC9wc3FsLnNxbApAQCAtMTAzOSwzICsxMDM5LDYgQEAgc2VsZWN0IDEvKDE1LXVuaXF1 ZTIpIGZyb20gdGVuazEgb3JkZXIgYnkgdW5pcXVlMiBsaW1pdCAxOTsKIFxkQXAgYnJpbiB1dWlk X21pbm1heF9vcHMKIFxkQXAgKiBwZ19jYXRhbG9nLnV1aWRfb3BzCiBcZEFjIGJyaW4gcGcqLm9p ZCoKKy0tIGNoZWNrIHByaW50aW5nIGluZm8gYWJvdXQgaW5kZXhlcworXGRpcCBwZ19hbV9uYW1l X2luZGV4CitcZGljcCBwZ19hbV9uYW1lX2luZGV4Cg== --=-GSUCKO/84HWbQ1wIA635 Content-Disposition: attachment; filename="text.txt" Content-Type: text/plain; name="text.txt"; charset="UTF-8" Content-Transfer-Encoding: base64 VGFraW5nIGludG8gYWNjb3VudCB0aGUgd2lzaGVzIG9mIGFsbCB0aGUgcmV2aWV3ZXJzLCB0aGUg Y3VycmVudCBwb3NpdGlvbiBvZiB0aGUgcGF0Y2ggaXMgYXMgZm9sbG93czoKClRoZSBcZEEgY29t bWFuZCBkaXNwbGF5cyBhIGxpc3Qgb2YgYWNjZXNzIG1ldGhvZHMuCgojIFxkQQogICAgICAgIExp c3Qgb2YgYWNjZXNzIG1ldGhvZHMKICBOYW1lICB8IFR5cGUgIHwgICAgICAgSGFuZGxlciAgICAg ICAgCi0tLS0tLS0tKy0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogYnJpbiAgIHwgaW5k ZXggfCBicmluaGFuZGxlcgogYnRyZWUgIHwgaW5kZXggfCBidGhhbmRsZXIKIGdpbiAgICB8IGlu ZGV4IHwgZ2luaGFuZGxlcgogZ2lzdCAgIHwgaW5kZXggfCBnaXN0aGFuZGxlcgogaGFzaCAgIHwg aW5kZXggfCBoYXNoaGFuZGxlcgogaGVhcCAgIHwgdGFibGUgfCBoZWFwX3RhYmxlYW1faGFuZGxl cgogc3BnaXN0IHwgaW5kZXggfCBzcGdoYW5kbGVyCig3IHJvd3MpCgpXaXRoICsgaXQgc2hvd3Mg ZGVzY3JpcHRpb246CiMgXGRBKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpc3Qgb2Yg YWNjZXNzIG1ldGhvZHMKICBOYW1lICB8IFR5cGUgIHwgICAgICAgSGFuZGxlciAgICAgICAgfCAg ICAgICAgICAgICAgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAKLS0tLS0tLS0rLS0tLS0tLSst LS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KIGJyaW4gICB8IGluZGV4IHwgYnJpbmhhbmRsZXIgICAgICAgICAgfCBibG9jayByYW5n ZSBpbmRleCAoQlJJTikgYWNjZXNzIG1ldGhvZAogYnRyZWUgIHwgaW5kZXggfCBidGhhbmRsZXIg ICAgICAgICAgICB8IGItdHJlZSBpbmRleCBhY2Nlc3MgbWV0aG9kCiBnaW4gICAgfCBpbmRleCB8 IGdpbmhhbmRsZXIgICAgICAgICAgIHwgR0lOIGluZGV4IGFjY2VzcyBtZXRob2QKIGdpc3QgICB8 IGluZGV4IHwgZ2lzdGhhbmRsZXIgICAgICAgICAgfCBHaVNUIGluZGV4IGFjY2VzcyBtZXRob2QK IGhhc2ggICB8IGluZGV4IHwgaGFzaGhhbmRsZXIgICAgICAgICAgfCBoYXNoIGluZGV4IGFjY2Vz cyBtZXRob2QKIGhlYXAgICB8IHRhYmxlIHwgaGVhcF90YWJsZWFtX2hhbmRsZXIgfCBoZWFwIHRh YmxlIGFjY2VzcyBtZXRob2QKIHNwZ2lzdCB8IGluZGV4IHwgc3BnaGFuZGxlciAgICAgICAgICAg fCBTUC1HaVNUIGluZGV4IGFjY2VzcyBtZXRob2QKKDcgcm93cykKClRoZSBmdW5jdGlvbmFsaXR5 IG9mIHRoZSBcZEFwIGNvbW1hbmQgaGFzIGJlZW4gbW92ZWQgdG8gXGRBIE5BTUUuCk5vdyB0aGUg dXNlciBjYW4gcXVlcnkgdGhlIHByb3BlcnRpZXMgb2YgYSBwYXJ0aWN1bGFyIEFNIChvciBzZXZl cmFsLCB1c2luZyB0aGUgc2VhcmNoIHBhdHRlcm4pIGFzIGZvbGxvd3M6CgojIFxkQSBoKgogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmRl eCBhY2Nlc3MgbWV0aG9kIHByb3BlcnRpZXMKICBBTSAgfCBDYW4gb3JkZXIgfCBTdXBwb3J0IHVu aXF1ZSBpbmRleGVzIHwgU3VwcG9ydCBpbmRleGVzIHdpdGggbXVsdGlwbGUgY29sdW1ucyB8IFN1 cHBvcnQgZXhjbHVzaW9uIGNvbnN0cmFpbnRzIHwgQ2FuIGluY2x1ZGUgbm9uLWtleSBjb2x1bW5z IAotLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBoYXNoIHwgbm8gICAgICAgIHwgbm8g ICAgICAgICAgICAgICAgICAgICB8IG5vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgfCB5ZXMgICAgICAgICAgICAgICAgICAgICAgICAgICB8IG5vCigxIHJvdykKCiAgICAgICAg ICAgICAgICAgVGFibGUgYWNjZXNzIG1ldGhvZCBwcm9wZXJ0aWVzCiBOYW1lIHwgVHlwZSAgfCAg ICAgICBIYW5kbGVyICAgICAgICB8ICAgICAgIERlc2NyaXB0aW9uICAgICAgICAKLS0tLS0tKy0t LS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQog aGVhcCB8IHRhYmxlIHwgaGVhcF90YWJsZWFtX2hhbmRsZXIgfCBoZWFwIHRhYmxlIGFjY2VzcyBt ZXRob2QKKDEgcm93KQoKTm90ZSB0aGF0IGZvciBoZWFwLCBhcyB3ZWxsIGFzIGZvciBmdXR1cmUg dGFibGUgQU0sIGEgc2VwYXJhdGUgdGFibGUgaXMgZGlzcGxheWVkLCBzaW5jZSBpdCBpcyBub3Qg Y2xlYXIgd2hpY2ggcHJvcGVydGllcyBjYW4gYmUgZGlzcGxheWVkIGZvciB0aGVtLgoKVGhlIFxk QW9jIGNvbW1hbmQgaGFzIGJlZW4gcmVuYW1lZCB0byBcZEFjLgpUaGUgY29tbWFuZCBkaXNwbGF5 cyBpbmZvcm1hdGlvbiBhYm91dCBvcGVyYXRvciBjbGFzc2VzLiBUaGUgIklucHV0IHR5cGUiIGZp ZWxkIHdhcyBsZWZ0LCBiZWNhdXNlIHRoZSB1c2VyIG1heSBmaXJzdCBiZSBpbnRlcmVzdGVkIGlu IHdoYXQgdHlwZSBvZiBkYXRhIG9wY2xhc3MgY2FuIHdvcmsgd2l0aCwKYW5kIGluIHRoZSBzZWNv bmQgLSBob3cgaXQgd2lsbCBrZWVwIHRoaXMgdHlwZSBpbnNpZGUuIE5pa2l0YSBhbHNvIGNob3Nl IHRvIGxlYXZlIHRoZSBvcGZhbWlseSBmaWVsZCBhcyBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLgoK IyBcZEFjIGJ0cmVlIG5hbWUKICAgICAgICAgICAgIEluZGV4IGFjY2VzcyBtZXRob2Qgb3BlcmF0 b3IgY2xhc3NlcwogIEFNICAgfCBJbnB1dCB0eXBlIHwgU3RvcmFnZSB0eXBlIHwgT3BlcmF0b3Ig Y2xhc3MgfCBEZWZhdWx0PyAKLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tCiBidHJlZSB8IG5hbWUgICAgICAgfCBjc3RyaW5nICAg ICAgfCBuYW1lX29wcyAgICAgICB8IHllcwooMSByb3cpCgojIFxkQWMrIGJ0cmVlIHJlY29yZAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5kZXggYWNjZXNzIG1ldGhvZCBvcGVyYXRvciBj bGFzc2VzCiAgQU0gICB8IElucHV0IHR5cGUgfCBTdG9yYWdlIHR5cGUgfCAgT3BlcmF0b3IgY2xh c3MgIHwgRGVmYXVsdD8gfCBPcGVyYXRvciBmYW1pbHkgIHwgT3duZXIgCi0tLS0tLS0rLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0t LS0tLS0tLS0tLS0tLSstLS0tLS0tCiBidHJlZSB8IHJlY29yZCAgICAgfCAgICAgICAgICAgICAg fCByZWNvcmRfaW1hZ2Vfb3BzIHwgbm8gICAgICAgfCByZWNvcmRfaW1hZ2Vfb3BzIHwgemxvagog YnRyZWUgfCByZWNvcmQgICAgIHwgICAgICAgICAgICAgIHwgcmVjb3JkX29wcyAgICAgICB8IHll cyAgICAgIHwgcmVjb3JkX29wcyAgICAgICB8IHpsb2oKKDIgcm93cykKClRoZSBcZEFmbyBjb21t YW5kIGhhcyBiZWVuIHJlbmFtZWQgdG8gXGRBby4KXGRBbyBkaXNwbGF5cyBpbmZvcm1hdGlvbiBh Ym91dCBvcGVyYXRvcnMgYXMgZm9sbG93czoKCiMgXGRBbyBnaW4ganNvbmJfb3BzCiAgICAgTGlz dCBvcGVyYXRvcnMgb2YgZmFtaWx5IHJlbGF0ZWQgdG8gYWNjZXNzIG1ldGhvZAogQU0gIHwgT3Bm YW1pbHkgU2NoZW1hIHwgT3BmYW1pbHkgTmFtZSB8ICAgICAgT3BlcmF0b3IgICAgICAKLS0tLS0r LS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tCiBn aW4gfCBwZ19jYXRhbG9nICAgICAgfCBqc29uYl9vcHMgICAgIHwgQD4gKGpzb25iLCBqc29uYikK IGdpbiB8IHBnX2NhdGFsb2cgICAgICB8IGpzb25iX29wcyAgICAgfCA/IChqc29uYiwgdGV4dCkK IGdpbiB8IHBnX2NhdGFsb2cgICAgICB8IGpzb25iX29wcyAgICAgfCA/fCAoanNvbmIsIHRleHRb XSkKIGdpbiB8IHBnX2NhdGFsb2cgICAgICB8IGpzb25iX29wcyAgICAgfCA/JiAoanNvbmIsIHRl eHRbXSkKKDQgcm93cykKCiMgXGRBbysgZ2lzdCBjaXJjbGVfb3BzCiAgICAgICAgICAgICAgICAg ICAgICAgICBMaXN0IG9wZXJhdG9ycyBvZiBmYW1pbHkgcmVsYXRlZCB0byBhY2Nlc3MgbWV0aG9k CiAgQU0gIHwgT3BmYW1pbHkgU2NoZW1hIHwgT3BmYW1pbHkgTmFtZSB8ICAgICAgIE9wZXJhdG9y ICAgICAgIHwgU3RyYXRlZ3kgfCBQdXJwb3NlICB8IFNvcnQgZmFtaWx5IAotLS0tLS0rLS0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0KIGdpc3QgfCBwZ19jYXRhbG9nICAgICAgfCBj aXJjbGVfb3BzICAgIHwgPDwgKGNpcmNsZSwgY2lyY2xlKSAgfCAgICAgICAgMSB8IHNlYXJjaCAg IHwgCiAuLi4gCiBnaXN0IHwgcGdfY2F0YWxvZyAgICAgIHwgY2lyY2xlX29wcyAgICB8IDwtPiAo Y2lyY2xlLCBwb2ludCkgIHwgICAgICAgMTUgfCBvcmRlcmluZyB8IGZsb2F0X29wcwoKVGhlIFxk QW9wIGNvbW1hbmQgaGFzIGJlZW4gcmVuYW1lZCB0byBcZEFwLgpJdCBkaXNwbGF5cyBsaXN0IG9m IHN1cHBvcnQgcHJvY2VkdXJlcyBhc3NvY2lhdGVkIHdpdGggYWNjZXNzIG1ldGhvZCBvcGVyYXRv ciBmYW1pbGllcy4KIyBcZEFwIGhhc2ggYXJyYXlfb3BzIAogICAgICAgICAgICAgICAgTGlzdCBv ZiBvcGVyYXRvciBmYW1pbHkgcHJvY2VkdXJlcwogIEFNICB8IEZhbWlseSBzY2hlbWEgfCBGYW1p bHkgbmFtZSB8ICAgTGVmdCAgIHwgIFJpZ2h0ICAgfCBOdW1iZXIgCi0tLS0tLSstLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0KIGhhc2gg fCBwZ19jYXRhbG9nICAgIHwgYXJyYXlfb3BzICAgfCBhbnlhcnJheSB8IGFueWFycmF5IHwgICAg ICAxCiBoYXNoIHwgcGdfY2F0YWxvZyAgICB8IGFycmF5X29wcyAgIHwgYW55YXJyYXkgfCBhbnlh cnJheSB8ICAgICAgMgooMiByb3dzKQoKIyBcZEFwKyBoYXNoIGFycmF5X29wcyAKICAgICAgICAg ICAgICAgICAgICAgICAgICAgTGlzdCBvZiBvcGVyYXRvciBmYW1pbHkgcHJvY2VkdXJlcwogIEFN ICB8IEZhbWlseSBzY2hlbWEgfCBGYW1pbHkgbmFtZSB8ICAgTGVmdCAgIHwgIFJpZ2h0ICAgfCBO dW1iZXIgfCAgICAgIFByb2MgbmFtZSAgICAgIAotLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0t LS0tLQogaGFzaCB8IHBnX2NhdGFsb2cgICAgfCBhcnJheV9vcHMgICB8IGFueWFycmF5IHwgYW55 YXJyYXkgfCAgICAgIDEgfCBoYXNoX2FycmF5CiBoYXNoIHwgcGdfY2F0YWxvZyAgICB8IGFycmF5 X29wcyAgIHwgYW55YXJyYXkgfCBhbnlhcnJheSB8ICAgICAgMiB8IGhhc2hfYXJyYXlfZXh0ZW5k ZWQKKDIgcm93cykKCkl0IG1heSBiZSBlYXNpZXIgZm9yIHRoZSB1c2VyIHRvIG5hdmlnYXRlIGlu IHRoaXMgbGlzdCBpZiB0aGUgZGVmaW5pbmcgZmVhdHVyZSBpbiBhZGRpdGlvbiB0byB0aGUgbnVt YmVyIGlzIGFsc28gdGhlIHByb2NlZHVyZSBuYW1lLgpFdmVuIGlmIGl0IGRvZXMgbm90IGNhcnJ5 IGltcG9ydGFudCBpbmZvcm1hdGlvbiwgaXQgaW1wcm92ZXMgdGhlIHJlYWRhYmlsaXR5IG9mIHRo ZSBsaXN0LiBNYXliZSBpdCBtYWtlcyBzZW5zZSB0byByZXR1cm4gZmllbGQgIlByb2MgbmFtZSIg dG8gdGhlIG1haW4gb3V0cHV0PwoKCjAwMDItcHNxbF9hZGRfaW5kZXhfaW5mby12NS5wYXRjaAoK VGhlIGNvbW1hbmRzIFxkaXAgYW5kIFxkaWNwIGhhdmUgc28gZmFyIGJlZW4gbGVmdCBpbiB0aGUg Y3VycmVudCBmb3JtLCBiZWNhdXNlIGFsdGhvdWdoIHRoZXkgZGlzcGxheSBwcm9wZXJ0aWVzIGNv bW1vbiB0byB0aGUgd2hvbGUgQU0sCmFzIE5pa2l0YSBhbHJlYWR5IHdyb3RlLCB0aGlzIHByb3Bl cnRpZXMgY2FuIGJlIHJlZGVmaW5lZC4KCiMgXGRpcCBwZ19hbV9vaWRfaW5kZXgKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZGV4IHByb3BlcnRpZXMKICAgU2No ZW1hICAgfCAgICAgIE5hbWUgICAgICAgfCBBY2Nlc3MgbWV0aG9kIHwgQ2x1c3RlcmFibGUgfCBJ bmRleCBzY2FuIHwgQml0bWFwIHNjYW4gfCBCYWNrd2FyZCBzY2FuIAotLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tCiBwZ19jYXRhbG9nIHwgcGdfYW1fb2lkX2lu ZGV4IHwgYnRyZWUgICAgICAgICB8IHllcyAgICAgICAgIHwgeWVzICAgICAgICB8IHllcyAgICAg ICAgIHwgeWVzCigxIHJvdykKCiMgXGRpY3AgcGdfYW1vcF9vcHJfZmFtX2luZGV4CiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZGV4IHBnX2NhdGFsb2cu cGdfYW1vcF9vcHJfZmFtX2luZGV4CiBDb2x1bW4gbmFtZSB8ICAgIEV4cHIgICAgIHwgT3BjbGFz cyAgfCBBU0MgfCBOdWxscyBmaXJzdCB8IE9yZGVyYWJsZSB8IERpc3RhbmNlIG9yZGVyYWJsZSB8 IFJldHVybmFibGUgfCBTZWFyY2ggYXJyYXkgfCBTZWFyY2ggbnVsbHMgCi0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLS0tCiBhbW9wb3ByICAgICB8IGFtb3BvcHIgICAgIHwgb2lkX29wcyAgfCB5ZXMgfCBubyAg ICAgICAgICB8IHllcyAgICAgICB8IG5vICAgICAgICAgICAgICAgICB8IHllcyAgICAgICAgfCB5 ZXMgICAgICAgICAgfCB5ZXMKIGFtb3BwdXJwb3NlIHwgYW1vcHB1cnBvc2UgfCBjaGFyX29wcyB8 IHllcyB8IG5vICAgICAgICAgIHwgeWVzICAgICAgIHwgbm8gICAgICAgICAgICAgICAgIHwgeWVz ICAgICAgICB8IHllcyAgICAgICAgICB8IHllcwogYW1vcGZhbWlseSAgfCBhbW9wZmFtaWx5ICB8 IG9pZF9vcHMgIHwgeWVzIHwgbm8gICAgICAgICAgfCB5ZXMgICAgICAgfCBubyAgICAgICAgICAg ICAgICAgfCB5ZXMgICAgICAgIHwgeWVzICAgICAgICAgIHwgeWVzClRhYmxlOiBwZ19hbW9wCkFj Y2VzcyBtZXRob2Q6IGJ0cmVlCgpBbHNvIHBsZWFzZSBsb29rIHRocm91Z2ggdGhlIGRvY3VtZW50 YXRpb24gZm9yIHRoZXNlIGZlYXR1cmVzLiBJIGFtIHN1cmUgdGhhdCB0aGUgaW5mb3JtYXRpb24g c3BlY2lmaWVkIHRoZXJlIGNhbiBiZSBzdWJtaXR0ZWQgaW4gYSBtb3JlIGFjY3VyYXRlIGFuZCBj b252ZW5pZW50IGZvcm0uCgpTaW5jZXJlbHkKU2VyZ2V5IENoZXJrYXNoaW4uCgo= --=-GSUCKO/84HWbQ1wIA635--