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 1tz0nD-00DuMh-Ef for pgsql-hackers@arkaria.postgresql.org; Sun, 30 Mar 2025 22:06:11 +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 1tz0nB-00E7D1-K5 for pgsql-hackers@arkaria.postgresql.org; Sun, 30 Mar 2025 22:06:09 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1tz0nA-00E7Cs-VI for pgsql-hackers@lists.postgresql.org; Sun, 30 Mar 2025 22:06:09 +0000 Received: from mail-qk1-x730.google.com ([2607:f8b0:4864:20::730]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1tz0n5-0021n3-2z for pgsql-hackers@lists.postgresql.org; Sun, 30 Mar 2025 22:06:08 +0000 Received: by mail-qk1-x730.google.com with SMTP id af79cd13be357-7c08fc20194so784519385a.2 for ; Sun, 30 Mar 2025 15:06:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=dunslane-net.20230601.gappssmtp.com; s=20230601; t=1743372361; x=1743977161; darn=lists.postgresql.org; h=in-reply-to:autocrypt:content-language:references:cc:to:from :subject:user-agent:mime-version:date:message-id:from:to:cc:subject :date:message-id:reply-to; bh=pz0JkgeYMt2XogezzbnkK4D3eZf1o1IJl26fcga+coc=; b=sYYwHHKh97UrJSXXG5VPKBGKDrVE0zkK4CQOJ+24n1EThvvwkCxnl5/l035vbLWsUt aya3YlPnY5e97jRqTYNQZVSYGQCK++ArNrgWwQ2Zo+VXddDHXc/oTZa6GKU+TzQ9Ecaz cZbKdF6CdzQ8T/2UnlgkpZ4i93nBc94KFA+wdjIE8nptWplRq2oz7Uv0RpS5Qvmte4wZ zmZMpAaj2cuDduQztiuM6+/2C7ZHAfnK9D6HcC6ahv4AbHFIc8qSX+Qp9T3Nd9RtZb1+ n8z7kuk2s3YrenCUUzCPiEsvBwHb4iOar4BYYtkfdoc58XAfm25bSaFfuFRPE8pAKdpa opdg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1743372361; x=1743977161; h=in-reply-to:autocrypt:content-language:references:cc:to:from :subject:user-agent:mime-version:date:message-id:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=pz0JkgeYMt2XogezzbnkK4D3eZf1o1IJl26fcga+coc=; b=JJzlDFjd6cOK167p2tql/D8C4f+A3GuHhKR0TlWFHayDCur/aYEa2FSBIHaz7yoN6U oHcYxX1aoS+4YVLcbGKzs7lBaWZv6qN043wkPxelR9upjCESEBQk0aIWEqlpSUo93jCL AHx+aeeowkYlpCxRZflZ/l6SQuSwkaQvuNig2W8mIZj3vppyOHnYh9+8Y9NsL3G/G0fm gdRXThssbCeC7g+sXbDqNrgEQ3oUJIrKKRmkrn34rG62/298NIyGQU95gh5d7LQcfyB9 OcBjkN7QqGOXoS4G8CBeowaCPTTSBTt/JKg9pu/Dwm8PeaajGfNjIveIVANRZz/WfP4S m31Q== X-Forwarded-Encrypted: i=1; AJvYcCUuaCne83qPBdopyBW/5jUKan5qZ7Y63tSJeSL+BOP0RCntuV3qo+mnIDvxOqYGR9BPPOYBd0yf6nLpu3IL@lists.postgresql.org X-Gm-Message-State: AOJu0YyStE4duCdy9Sj+iLWhRmi83qUNyngjME4dXHahTgPfPqv6PTQ8 bcEjE9wbDYZ2Y1JZJC+oTk6g7AiDzXe5S19GZKJbnqjrxPmZ/AIG+SfSg6upGyI= X-Gm-Gg: ASbGncs8o7sQdjbai/R4v0pWhzNxiqED9PRXGO4YE+JavZD9R/j0rot+rvME/kvjH3Y rDwDhub0pcwceqswJ+qlrCGjyytBWwCQ9w42bbg+qF5u/uGjLn9/ygmbOsE2KqA7ubqi6oEXBS+ JwxrU1i299CrhH5G99Bu4NcA9DumJoKDnbxSg5axR5VF1hPZnjz9032xej1WTnRjIfGhxL5vXBq iS75rUlloC25O2sG7TDtv1y6MSbUT2UyYjy3NtgimTEneU+aPddh8FEpXIFavNqRW0QkMyO+77M h/c445/kTTEDAVsTno9kbzRDnJ5keg2uIMVTzRe6S7yKMx4GghMSq+o= X-Google-Smtp-Source: AGHT+IFUDkdjSYX7ZX4R2E2GIaUmrflyWk/Ebq82qQvytcHXYBcyKjCJrCBLT6oPMiTjNSHbBHsv5g== X-Received: by 2002:a05:620a:40c2:b0:7c5:5339:48cf with SMTP id af79cd13be357-7c69072f0a2mr937580185a.30.1743372361272; Sun, 30 Mar 2025 15:06:01 -0700 (PDT) Received: from ?IPV6:2605:a601:a681:6b00::1cb? ([2605:a601:a681:6b00::1cb]) by smtp.googlemail.com with ESMTPSA id af79cd13be357-7c5f776510esm406158485a.72.2025.03.30.15.05.58 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Sun, 30 Mar 2025 15:05:59 -0700 (PDT) Content-Type: multipart/mixed; boundary="------------qnDdASt2qY4BmXZxTCLRcYms" Message-ID: Date: Sun, 30 Mar 2025 18:05:57 -0400 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: Non-text mode for pg_dumpall From: Andrew Dunstan To: Mahendra Singh Thalor Cc: jian he , =?UTF-8?Q?=C3=81lvaro_Herrera?= , Srinath Reddy , pgsql-hackers@lists.postgresql.org References: <202503111705.xy7fddu36qae@alvherre.pgsql> <4ef51faa-993f-46ea-9e68-7baf736c07b8@dunslane.net> <763d1c6e-9298-4bac-9bea-9331db78a154@dunslane.net> Content-Language: en-US Autocrypt: addr=andrew@dunslane.net; keydata= xsBNBE7KWFkBCAClridxur2AIc7eW2AR7izbfp3EnNefie2HbLF0izW5Ik5UjX2HBXBx4syI gY6b0ugohXrr274+baoAlvSbq6cAoQuEVrk5IZFzt20b1Xkx65FwGSEj526yiKLocqkJceSq Xr9xcA5SGY+FZv441chh5SU92v4q6z+6LPpoHOh97ptAVXZYNTtU0LevyvD5lja0TzbvJm6C eFXitJfnm1pLEr0DGJCR/iUOl/N62Kh4855zZC7NHIjQHPOvV5Stz/l5ilDhvGVk+xkXFPys SjZoUr1rXhYLpiyi5sR0X9FHXT0KnGuz1F5ERO7ZTLSSQ6fJwPj6gOk9K+vvoKvoeql5ABEB AAHNJEFuZHJldyBEdW5zdGFuIDxhbmRyZXdAZHVuc2xhbmUubmV0PsLAmwQTAQgARQIbAwIX gAIZAQULCQgHAgMiAgEGFQoJCAsCBBYCAwECHgcWIQTkPlhGHfx8v0RpFaWZ+n/LWfw7gQUC ZFlxxwUJGVGAbgAKCRCZ+n/LWfw7gXikB/9ZdcUy6CTBFIIuL/bVsc1eLEW/gJBjJBF6HxNY xgEkAgXAp4Lg4A5U+QB9GouFr7+GYxF0BU4hzoGhNPUWltxnHdMWP8nC/38LAqgMi8L/bbsm HW5YPBdWYaAZAPJQVfOAgjTbRUb26KSprpyrrJKW0ZmrZfjhNPcQ72jpWzoPLQqx2X6B0fru 1jq+cBh8lb6r1mJTim1T3JIn+F/v5VpdQS+EL8xqsHkfzKjIPsW3CIXpkypSk6saA55Rkkbl 26AW8ftPVB0Q6Lnn6FLt9CP0MGNixBQ55yq8r1K+nCBvCCjvQjM8RDm0UUum0WNl+ifQgTLO E8TWEnwVtkBf+3QWzsBNBE7KWFkBCADRnOM0FCzsYW6jtncg+dWIagjUZpvaClmqn/sJluLa Q3v1VXMQJzYs3eC1gh386W+XBwLRpDj3jzH81lX+p73Re3d3oJW7X+ffsxuzu5ZVdMUkqBYo nkAbKxr6gyJ12F/+JkUVzLcoTN+d/7YsQvUVi7NaKH8mJgjz112O4fUe3p9wfAaFa0RXHc5S GPzRTYRRlv/XZBIho4J2tkZOnteZJZ+GbxQVlINt6fd8P6al3MWOvpP/ExJPguEfjOsO6Njy xjo3WfpD4lHMOR/Oc3/8mScEF84rF2jXbsFgelWnbPWAvXY+pD0dXOFRkagGmC/viwBDqq5b 5tk76kKmUbZxABEBAAHCwHwEGAEIACYCGwwWIQTkPlhGHfx8v0RpFaWZ+n/LWfw7gQUCZFlx 5wUJGVGAjgAKCRCZ+n/LWfw7gf+iB/4g8CPY5jihf5r/8EsoIGe2H+dpVmpPF8YGBzTIvCz/ fQoOq8AX/pE76QEuFnFZWfjw+wgBXgCVmkox2Eflkk6z4ND3pcwGZ6CfCxTQCDk/dij+2DQ4 6bmDCy/sBgcbz9mTpoLC11HLoPae6YN9nBNQRZDcEFEu54OaVOqlIdbA6m+POIBCXZdHOFc0 WoDTgxHRzC1jgQNidyd6tKqcsVJs0dzF0oKTmFFmUAqTdJO12LBuNA1rlqrR3EtpYk8B/wtS 5dIMD7Q8hwQpL+4C6GNpb6ZKnPkLi47pDOLhz2qBrqN+rqUEsT3YnExYpzj5yOBi+FlmV1Hw 49QYe1sn2ZPs In-Reply-To: List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------qnDdASt2qY4BmXZxTCLRcYms Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit On 2025-03-30 Su 12:50 PM, Andrew Dunstan wrote: > > On 2025-03-29 Sa 1:17 AM, Mahendra Singh Thalor wrote: >> On Sat, 29 Mar 2025 at 03:50, Andrew Dunstan >> wrote: >>> >>> On 2025-03-27 Th 5:15 PM, Andrew Dunstan wrote: >>>> On 2025-03-19 We 2:41 AM, Mahendra Singh Thalor wrote: >>>>> On Wed, 12 Mar 2025 at 21:18, Andrew Dunstan >>>>> wrote: >>>>>> On 2025-03-12 We 3:03 AM, jian he wrote: >>>>>>> On Wed, Mar 12, 2025 at 1:06 AM Álvaro Herrera >>>>>>> wrote: >>>>>>>> Hello, >>>>>>>> >>>>>>>> On 2025-Mar-11, Mahendra Singh Thalor wrote: >>>>>>>> >>>>>>>>> In map.dat file, I tried to fix this issue by adding number of >>>>>>>>> characters >>>>>>>>> in dbname but as per code comments, as of now, we are not >>>>>>>>> supporting \n\r >>>>>>>>> in dbnames so i removed handling. >>>>>>>>> I will do some more study to fix this issue. >>>>>>>> Yeah, I think this is saying that you should not consider the >>>>>>>> contents >>>>>>>> of map.dat as a shell string.  After all, you're not going to >>>>>>>> _execute_ >>>>>>>> that file via the shell. >>>>>>>> >>>>>>>> Maybe for map.dat you need to escape such characters somehow, >>>>>>>> so that >>>>>>>> they don't appear as literal newlines/carriage returns. >>>>>>>> >>>>>>> I am confused. >>>>>>> currently pg_dumpall plain format will abort when encountering >>>>>>> dbname >>>>>>> containing newline. >>>>>>> the left dumped plain file does not contain all the cluster >>>>>>> databases data. >>>>>>> >>>>>>> >>>>>>> if pg_dumpall non-text format aborts earlier, >>>>>>> it's aligned with pg_dumpall plain format? >>>>>>> it's also an improvement since aborts earlier, nothing will be >>>>>>> dumped? >>>>>>> >>>>>>> >>>>>>> am i missing something? >>>>>>> >>>>>>> >>>>>> I think we should fix that. >>>>>> >>>>>> But for the current proposal, Álvaro and I were talking this >>>>>> morning, >>>>>> and we thought the simplest thing here would be to have the one line >>>>>> format and escape NL/CRs in the database name. >>>>>> >>>>>> >>>>>> cheers >>>>>> >>>>> Okay. As per discussions, we will keep one line entry for each >>>>> database into map.file. >>>>> >>>>> Thanks all for feedback and review. >>>>> >>>>> Here, I am attaching updated patches for review and testing. These >>>>> patches can be applied on commit a6524105d20b. >>>> >>>> >>>> I'm working through this patch set with a view to committing it. >>>> Attached is some cleanup which is where I got to today, although there >>>> is more to do. One thing I am wondering is why not put the >>>> SimpleDatabaseOidList stuff in fe_utils/simle_list.{c,h} ? That's >>>> where all the similar stuff belongs, and it feels strange to have this >>>> inline in pg_restore.c. (I also don't like the name much - >>>> SimpleOidStringList or maybe SimpleOidPlusStringList might be better). >>>> >>>> >>>> >>> >>> OK, I have done that, so here is the result. The first two are you >>> original patches. patch 3 adds the new list type to fe-utils, and patch >>> 4 contains my cleanups and use of the new list type. Apart from some >>> relatively minor cleanup, the one thing I would like to change is how >>> dumps are named. If we are producing tar or custom format dumps, I >>> think >>> the file names should reflect that (oid.dmp and oid.tar rather than a >>> bare oid as the filename), and pg_restore should look for those. I'm >>> going to work on that tomorrow - I don't think it will be terribly >>> difficult. >>> >> Thanks Andrew. >> >> Here, I am attaching a delta patch for oid.tar and oid.dmp format. >> > > > OK, looks good, I have incorporated that. > > There are a couple of rough edges, though. > > First, I see this: > > > andrew@ub22arm:inst $ bin/pg_restore -C -d postgres > --exclude-database=regression_dummy_seclabel > --exclude-database=regression_test_extensions > --exclude-database=regression_test_pg_dump dest > pg_restore: error: could not execute query: "ERROR:  role "andrew" > already exists > " > Command was: " > > -- > -- Roles > -- > > CREATE ROLE andrew;" > pg_restore: warning: errors ignored on global.dat file restore: 1 > pg_restore: error: could not execute query: ERROR:  database > "template1" already exists > Command was: CREATE DATABASE template1 WITH TEMPLATE = template0 > ENCODING = 'SQL_ASCII' LOCALE_PROVIDER = libc LOCALE = 'C'; > > > pg_restore: warning: errors ignored on database "template1" restore: 1 > pg_restore: error: could not execute query: ERROR:  database > "postgres" already exists > Command was: CREATE DATABASE postgres WITH TEMPLATE = template0 > ENCODING = 'SQL_ASCII' LOCALE_PROVIDER = libc LOCALE = 'C'; > > > pg_restore: warning: errors ignored on database "postgres" restore: 1 > pg_restore: warning: errors ignored on restore: 3 > > > > It seems pointless to be trying to create the rolw that we are > connected as, and we also expect template1 and postgres to exist. > > In a similar vein, I don't see why we are setting the --create flag in > pg_dumpall for those databases. I'm attaching a patch that is designed > to stop that, but it doesn't solve the above issues. > > I also notice a bunch of these in globals.dat: > > > -- > -- Databases > -- > > -- > -- Database "template1" dump > -- > > -- > -- Database "andrew" dump > -- > > -- > -- Database "isolation_regression_brin" dump > -- > > -- > -- Database "isolation_regression_delay_execution" dump > -- > >  ... > > > The patch also tries to fix this. > > Lastly, this badly needs some TAP tests written. > > I'm going to work on reviewing the documentation next. > > > I have reworked the documentation some. See attached. cheers andrew -- Andrew Dunstan EDB: https://www.enterprisedb.com --------------qnDdASt2qY4BmXZxTCLRcYms Content-Type: text/plain; charset=UTF-8; name="dumpall-docs.patch.noci" Content-Disposition: attachment; filename="dumpall-docs.patch.noci" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvcGdfZHVtcGFsbC5zZ21sIGIvZG9jL3Ny Yy9zZ21sL3JlZi9wZ19kdW1wYWxsLnNnbWwKaW5kZXggNzY1YjMwYTNhNjYuLjQzZmRhYjJk NzdlIDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvcmVmL3BnX2R1bXBhbGwuc2dtbAorKysg Yi9kb2Mvc3JjL3NnbWwvcmVmL3BnX2R1bXBhbGwuc2dtbApAQCAtMTYsNyArMTYsNyBAQCBQ b3N0Z3JlU1FMIGRvY3VtZW50YXRpb24KIAogIDxyZWZuYW1lZGl2PgogICA8cmVmbmFtZT5w Z19kdW1wYWxsPC9yZWZuYW1lPgotICA8cmVmcHVycG9zZT5leHRyYWN0IGEgPHByb2R1Y3Ru YW1lPlBvc3RncmVTUUw8L3Byb2R1Y3RuYW1lPiBkYXRhYmFzZSBjbHVzdGVyIGludG8gYSBz Y3JpcHQgZmlsZTwvcmVmcHVycG9zZT4KKyAgPHJlZnB1cnBvc2U+ZXh0cmFjdCBhIDxwcm9k dWN0bmFtZT5Qb3N0Z3JlU1FMPC9wcm9kdWN0bmFtZT4gZGF0YWJhc2UgY2x1c3RlciB1c2lu ZyBhIHNwZWNpZmllZCBkdW1wIGZvcm1hdDwvcmVmcHVycG9zZT4KICA8L3JlZm5hbWVkaXY+ CiAKICA8cmVmc3lub3BzaXNkaXY+CkBAIC0zMyw3ICszMyw3IEBAIFBvc3RncmVTUUwgZG9j dW1lbnRhdGlvbgogICA8cGFyYT4KICAgIDxhcHBsaWNhdGlvbj5wZ19kdW1wYWxsPC9hcHBs aWNhdGlvbj4gaXMgYSB1dGlsaXR5IGZvciB3cml0aW5nIG91dAogICAgKDxxdW90ZT5kdW1w aW5nPC9xdW90ZT4pIGFsbCA8cHJvZHVjdG5hbWU+UG9zdGdyZVNRTDwvcHJvZHVjdG5hbWU+ IGRhdGFiYXNlcwotICAgb2YgYSBjbHVzdGVyIGludG8gb25lIHNjcmlwdCBmaWxlLiAgVGhl IHNjcmlwdCBmaWxlIGNvbnRhaW5zCisgICBvZiBhIGNsdXN0ZXIgaW50byBhbiBhcmNoaXZl LiAgVGhlIGFyY2hpdmUgY29udGFpbnMKICAgIDxhY3JvbnltPlNRTDwvYWNyb255bT4gY29t bWFuZHMgdGhhdCBjYW4gYmUgdXNlZCBhcyBpbnB1dCB0byA8eHJlZgogICAgbGlua2VuZD0i YXBwLXBzcWwiLz4gdG8gcmVzdG9yZSB0aGUgZGF0YWJhc2VzLiAgSXQgZG9lcyB0aGlzIGJ5 CiAgICBjYWxsaW5nIDx4cmVmIGxpbmtlbmQ9ImFwcC1wZ2R1bXAiLz4gZm9yIGVhY2ggZGF0 YWJhc2UgaW4gdGhlIGNsdXN0ZXIuCkBAIC01MiwxMSArNTIsMTYgQEAgUG9zdGdyZVNRTCBk b2N1bWVudGF0aW9uCiAgIDwvcGFyYT4KIAogICA8cGFyYT4KLSAgIFRoZSBTUUwgc2NyaXB0 IHdpbGwgYmUgd3JpdHRlbiB0byB0aGUgc3RhbmRhcmQgb3V0cHV0LiAgVXNlIHRoZQorICAg UGxhaW4gdGV4dCBTUUwgc2NyaXB0cyB3aWxsIGJlIHdyaXR0ZW4gdG8gdGhlIHN0YW5kYXJk IG91dHB1dC4gIFVzZSB0aGUKICAgIDxvcHRpb24+LWY8L29wdGlvbj4vPG9wdGlvbj4tLWZp bGU8L29wdGlvbj4gb3B0aW9uIG9yIHNoZWxsIG9wZXJhdG9ycyB0bwogICAgcmVkaXJlY3Qg aXQgaW50byBhIGZpbGUuCiAgIDwvcGFyYT4KIAorICA8cGFyYT4KKyAgIEFyY2hpdmVzIGlu IG90aGVyIGZvcm1hdHMgd2lsbCBiZSBwbGFjZWQgaW4gYSBkaXJlY3RvcnkgbmFtZWQgdXNp bmcgdGhlCisgICA8b3B0aW9uPi1mPC9vcHRpb24+LzxvcHRpb24+LS1maWxlPC9vcHRpb24+ LCB3aGljaCBpcyByZXF1aXJlZCBpbiB0aGlzIGNhc2UuCisgIDwvcGFyYT4KKwogICA8cGFy YT4KICAgPGFwcGxpY2F0aW9uPnBnX2R1bXBhbGw8L2FwcGxpY2F0aW9uPiBuZWVkcyB0byBj b25uZWN0IHNldmVyYWwKICAgdGltZXMgdG8gdGhlIDxwcm9kdWN0bmFtZT5Qb3N0Z3JlU1FM PC9wcm9kdWN0bmFtZT4gc2VydmVyIChvbmNlIHBlcgpAQCAtMTIxLDEwICsxMjYsODUgQEAg UG9zdGdyZVNRTCBkb2N1bWVudGF0aW9uCiAgICAgICAgPHBhcmE+CiAgICAgICAgIFNlbmQg b3V0cHV0IHRvIHRoZSBzcGVjaWZpZWQgZmlsZS4gIElmIHRoaXMgaXMgb21pdHRlZCwgdGhl CiAgICAgICAgIHN0YW5kYXJkIG91dHB1dCBpcyB1c2VkLgorICAgICAgICBOb3RlOiBUaGlz IG9wdGlvbiBjYW4gb25seSBiZSBvbWl0dGVkIHdoZW4gPG9wdGlvbj4tLWZvcm1hdDwvb3B0 aW9uPiBpcyBwbGFpbgogICAgICAgIDwvcGFyYT4KICAgICAgIDwvbGlzdGl0ZW0+CiAgICAg IDwvdmFybGlzdGVudHJ5PgogCisgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICA8dGVybT48 b3B0aW9uPi1GIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5mb3JtYXQ8L3JlcGxh Y2VhYmxlPjwvb3B0aW9uPjwvdGVybT4KKyAgICAgIDx0ZXJtPjxvcHRpb24+LS1mb3JtYXQ9 PHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmZvcm1hdDwvcmVwbGFjZWFibGU+PC9v cHRpb24+PC90ZXJtPgorICAgICAgPGxpc3RpdGVtPgorICAgICAgIDxwYXJhPgorICAgICAg ICBTcGVjaWZ5IHRoZSBmb3JtYXQgb2YgZHVtcCBmaWxlcy4gIEluIHBsYWluIGZvcm1hdCwg YWxsIHRoZSBkdW1wIGRhdGEgaXMKKyAgICAgICAgc2VudCBpbiBhIHNpbmdsZSB0ZXh0IHN0 cmVhbS4gVGhpcyBpcyB0aGUgZGVmYXVsdC4KKworICAgICAgICBJbiBhbGwgb3RoZXIgbW9k ZXMsIDxhcHBsaWNhdGlvbj5wZ19kdW1wYWxsPC9hcHBsaWNhdGlvbj4gZmlyc3QgY3JlYXRl cyB0d28gZmlsZXM6CisgICAgICAgIDxmaWxlbmFtZT5nbG9iYWwuZGF0PC9maWxlbmFtZT4g YW5kIDxmaWxlbmFtZT5tYXAuZGF0PC9maWxlbmFtZT4sIGluIHRoZSBkaXJlY3RvcnkKKyAg ICAgICAgc3BlY2lmaWVkIGJ5IDxvcHRpb24+LS1maWxlPC9vcHRpb24+LgorICAgICAgICBU aGUgZmlyc3QgZmlsZSBjb250YWlucyBnbG9iYWwgZGF0YSwgc3VjaCBhcyByb2xlcyBhbmQg dGFibGVzcGFjZXMuIFRoZSBzZWNvbmQKKyAgICAgICAgY29udGFpbnMgYSBtYXBwaW5nIGJl dHdlZW4gZGF0YWJhc2Ugb2lkcyBhbmQgbmFtZXMuIFRoZXNlIGZpbGVzIGFyZSB1c2VkIGJ5 CisgICAgICAgIDxhcHBsaWNhdGlvbj5wZ19yZXN0b3JlPC9hcHBsaWNhdGlvbj4uIERhdGEg Zm9yIGluZGl2aWR1YWwgZGF0YWJhc2VzIGlzIHBsYWNlZCBpbgorICAgICAgICA8ZmlsZW5h bWU+ZGF0YWJhc2VzPC9maWxlbmFtZT4gc3ViZGlyZWN0b3J5LCBuYW1lZCB1c2luZyB0aGUg ZGF0YWJhc2UncyA8dHlwZT5vaWQ8L3R5cGU+LgorCisgICAgICAgPHZhcmlhYmxlbGlzdD4K KyAgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgIDx0ZXJtPjxsaXRlcmFsPmQ8L2xp dGVyYWw+PC90ZXJtPgorICAgICAgICAgPHRlcm0+PGxpdGVyYWw+ZGlyZWN0b3J5PC9saXRl cmFsPjwvdGVybT4KKyAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICA8cGFyYT4KKyAg ICAgICAgICAgT3V0cHV0IGRpcmVjdG9yeS1mb3JtYXQgYXJjaGl2ZXMgZm9yIGVhY2ggZGF0 YWJhc2UsCisgICAgICAgICAgIHN1aXRhYmxlIGZvciBpbnB1dCBpbnRvIHBnX3Jlc3RvcmUu IFRoZSBkaXJlY3RvcnkKKyAgICAgICAgICAgd2lsbCBoYXZlIGRhdGFiYXNlIDx0eXBlPm9p ZDwvdHlwZT4gYXMgaXRzIG5hbWUuCisgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgPC9s aXN0aXRlbT4KKyAgICAgICAgPC92YXJsaXN0ZW50cnk+CisKKyAgICAgICAgPHZhcmxpc3Rl bnRyeT4KKyAgICAgICAgIDx0ZXJtPjxsaXRlcmFsPnA8L2xpdGVyYWw+PC90ZXJtPgorICAg ICAgICAgPHRlcm0+PGxpdGVyYWw+cGxhaW48L2xpdGVyYWw+PC90ZXJtPgorICAgICAgICAg PGxpc3RpdGVtPgorICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICBPdXRwdXQgYSBwbGFp bi10ZXh0IFNRTCBzY3JpcHQgZmlsZSAodGhlIGRlZmF1bHQpLgorICAgICAgICAgIDwvcGFy YT4KKyAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDwvdmFybGlzdGVudHJ5PgorCisg ICAgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAgICA8dGVybT48bGl0ZXJhbD5jPC9saXRl cmFsPjwvdGVybT4KKyAgICAgICAgIDx0ZXJtPjxsaXRlcmFsPmN1c3RvbTwvbGl0ZXJhbD48 L3Rlcm0+CisgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgPHBhcmE+CisgICAgICAg ICAgIE91dHB1dCBhIGN1c3RvbS1mb3JtYXQgYXJjaGl2ZSBmb3IgZWFjaCBkYXRhYmFzZSwK KyAgICAgICAgICAgc3VpdGFibGUgZm9yIGlucHV0IGludG8gcGdfcmVzdG9yZS4gVGhlIGFy Y2hpdmUKKyAgICAgICAgICAgd2lsbCBiZSBuYW1lZCA8ZmlsZW5hbWU+ZGJvaWQuZG1wPC9m aWxlbmFtZT4gd2hlcmUgPHR5cGU+ZGJvaWQ8L3R5cGU+IGlzIHRoZQorICAgICAgICAgICA8 dHlwZT5vaWQ8L3R5cGU+IG9mIHRoZSBkYXRhYmFzZS4KKyAgICAgICAgICA8L3BhcmE+Cisg ICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgICAg ICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgIDx0ZXJtPjxsaXRlcmFsPnQ8L2xpdGVyYWw+ PC90ZXJtPgorICAgICAgICAgPHRlcm0+PGxpdGVyYWw+dGFyPC9saXRlcmFsPjwvdGVybT4K KyAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgT3V0 cHV0IGEgdGFyLWZvcm1hdCBhcmNoaXZlIGZvciBlYWNoIGRhdGFiYXNlLAorICAgICAgICAg ICBzdWl0YWJsZSBmb3IgaW5wdXQgaW50byBwZ19yZXN0b3JlLiBUaGUgYXJjaGl2ZQorICAg ICAgICAgICB3aWxsIGJlIG5hbWVkIDxmaWxlbmFtZT5kYm9pZC50YXI8L2ZpbGVuYW1lPiB3 aGVyZSA8dHlwZT5kYm9pZDwvdHlwZT4gaXMgdGhlCisgICAgICAgICAgIDx0eXBlPm9pZDwv dHlwZT4gb2YgdGhlIGRhdGFiYXNlLgorICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgIDwv bGlzdGl0ZW0+CisgICAgICAgIDwvdmFybGlzdGVudHJ5PgorCisgICAgICAgIDwvdmFyaWFi bGVsaXN0PgorCisgICAgICAgTm90ZTogc2VlIDx4cmVmIGxpbmtlbmQ9ImFwcC1wZ2R1bXAi Lz4gZm9yIGRldGFpbHMKKyAgICAgICBvZiBob3cgdGhlIHZhcmlvdXMgbm9uIHBsYWluIHRl eHQgYXJjaGl2ZXMgd29yay4KKworICAgICAgICA8L3BhcmE+CisgICAgICA8L2xpc3RpdGVt PgorICAgICA8L3Zhcmxpc3RlbnRyeT4KKwogICAgICA8dmFybGlzdGVudHJ5PgogICAgICAg PHRlcm0+PG9wdGlvbj4tLWZpbHRlcj08cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+ ZmlsZW5hbWU8L3JlcGxhY2VhYmxlPjwvb3B0aW9uPjwvdGVybT4KICAgICAgIDxsaXN0aXRl bT4KZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvcGdfcmVzdG9yZS5zZ21sIGIvZG9j L3NyYy9zZ21sL3JlZi9wZ19yZXN0b3JlLnNnbWwKaW5kZXggYzg0MGE4MDdhZTkuLmYxNGU1 ODY2ZjZjIDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvcmVmL3BnX3Jlc3RvcmUuc2dtbAor KysgYi9kb2Mvc3JjL3NnbWwvcmVmL3BnX3Jlc3RvcmUuc2dtbApAQCAtMTgsOCArMTgsOSBA QCBQb3N0Z3JlU1FMIGRvY3VtZW50YXRpb24KICAgPHJlZm5hbWU+cGdfcmVzdG9yZTwvcmVm bmFtZT4KIAogICA8cmVmcHVycG9zZT4KLSAgIHJlc3RvcmUgYSA8cHJvZHVjdG5hbWU+UG9z dGdyZVNRTDwvcHJvZHVjdG5hbWU+IGRhdGFiYXNlIGZyb20gYW4KLSAgIGFyY2hpdmUgZmls ZSBjcmVhdGVkIGJ5IDxhcHBsaWNhdGlvbj5wZ19kdW1wPC9hcHBsaWNhdGlvbj4KKyAgIHJl c3RvcmUgYSA8cHJvZHVjdG5hbWU+UG9zdGdyZVNRTDwvcHJvZHVjdG5hbWU+IGRhdGFiYXNl IG9yIGNsdXN0ZXIKKyAgIGZyb20gYW4gYXJjaGl2ZSBjcmVhdGVkIGJ5IDxhcHBsaWNhdGlv bj5wZ19kdW1wPC9hcHBsaWNhdGlvbj4gb3IKKyAgIDxhcHBsaWNhdGlvbj5wZ19kdW1wYWxs PC9hcHBsaWNhdGlvbj4KICAgPC9yZWZwdXJwb3NlPgogIDwvcmVmbmFtZWRpdj4KIApAQCAt MzgsMTMgKzM5LDE0IEBAIFBvc3RncmVTUUwgZG9jdW1lbnRhdGlvbgogCiAgIDxwYXJhPgog ICAgPGFwcGxpY2F0aW9uPnBnX3Jlc3RvcmU8L2FwcGxpY2F0aW9uPiBpcyBhIHV0aWxpdHkg Zm9yIHJlc3RvcmluZyBhCi0gICA8cHJvZHVjdG5hbWU+UG9zdGdyZVNRTDwvcHJvZHVjdG5h bWU+IGRhdGFiYXNlIGZyb20gYW4gYXJjaGl2ZQotICAgY3JlYXRlZCBieSA8eHJlZiBsaW5r ZW5kPSJhcHAtcGdkdW1wIi8+IGluIG9uZSBvZiB0aGUgbm9uLXBsYWluLXRleHQKKyAgIDxw cm9kdWN0bmFtZT5Qb3N0Z3JlU1FMPC9wcm9kdWN0bmFtZT4gZGF0YWJhc2Ugb3IgY2x1c3Rl ciBmcm9tIGFuIGFyY2hpdmUKKyAgIGNyZWF0ZWQgYnkgPHhyZWYgbGlua2VuZD0iYXBwLXBn ZHVtcCIvPiBvcgorICAgPHhyZWYgbGlua2VuZD0iYXBwLXBnLWR1bXBhbGwiLz4gaW4gb25l IG9mIHRoZSBub24tcGxhaW4tdGV4dAogICAgZm9ybWF0cy4gIEl0IHdpbGwgaXNzdWUgdGhl IGNvbW1hbmRzIG5lY2Vzc2FyeSB0byByZWNvbnN0cnVjdCB0aGUKLSAgIGRhdGFiYXNlIHRv IHRoZSBzdGF0ZSBpdCB3YXMgaW4gYXQgdGhlIHRpbWUgaXQgd2FzIHNhdmVkLiAgVGhlCi0g ICBhcmNoaXZlIGZpbGVzIGFsc28gYWxsb3cgPGFwcGxpY2F0aW9uPnBnX3Jlc3RvcmU8L2Fw cGxpY2F0aW9uPiB0bworICAgZGF0YWJhc2Ugb3IgY2x1c3RlciB0byB0aGUgc3RhdGUgaXQg d2FzIGluIGF0IHRoZSB0aW1lIGl0IHdhcyBzYXZlZC4gVGhlCisgICBhcmNoaXZlcyBhbHNv IGFsbG93IDxhcHBsaWNhdGlvbj5wZ19yZXN0b3JlPC9hcHBsaWNhdGlvbj4gdG8KICAgIGJl IHNlbGVjdGl2ZSBhYm91dCB3aGF0IGlzIHJlc3RvcmVkLCBvciBldmVuIHRvIHJlb3JkZXIg dGhlIGl0ZW1zCi0gICBwcmlvciB0byBiZWluZyByZXN0b3JlZC4gVGhlIGFyY2hpdmUgZmls ZXMgYXJlIGRlc2lnbmVkIHRvIGJlCisgICBwcmlvciB0byBiZWluZyByZXN0b3JlZC4gVGhl IGFyY2hpdmUgZm9ybWF0cyBhcmUgZGVzaWduZWQgdG8gYmUKICAgIHBvcnRhYmxlIGFjcm9z cyBhcmNoaXRlY3R1cmVzLgogICA8L3BhcmE+CiAKQEAgLTUyLDEwICs1NCwxNyBAQCBQb3N0 Z3JlU1FMIGRvY3VtZW50YXRpb24KICAgIDxhcHBsaWNhdGlvbj5wZ19yZXN0b3JlPC9hcHBs aWNhdGlvbj4gY2FuIG9wZXJhdGUgaW4gdHdvIG1vZGVzLgogICAgSWYgYSBkYXRhYmFzZSBu YW1lIGlzIHNwZWNpZmllZCwgPGFwcGxpY2F0aW9uPnBnX3Jlc3RvcmU8L2FwcGxpY2F0aW9u PgogICAgY29ubmVjdHMgdG8gdGhhdCBkYXRhYmFzZSBhbmQgcmVzdG9yZXMgYXJjaGl2ZSBj b250ZW50cyBkaXJlY3RseSBpbnRvCi0gICB0aGUgZGF0YWJhc2UuICBPdGhlcndpc2UsIGEg c2NyaXB0IGNvbnRhaW5pbmcgdGhlIFNRTAotICAgY29tbWFuZHMgbmVjZXNzYXJ5IHRvIHJl YnVpbGQgdGhlIGRhdGFiYXNlIGlzIGNyZWF0ZWQgYW5kIHdyaXR0ZW4KKyAgIHRoZSBkYXRh YmFzZS4KKyAgIFdoZW4gcmVzdG9yaW5nIGZyb20gYSBkdW1wIG1hZGUgYnk8YXBwbGljYXRp b24+cGdfZHVtcGFsbDwvYXBwbGljYXRpb24+LAorICAgZWFjaCBkYXRhYmFzZSB3aWxsIGJl IGNyZWF0ZWQgYW5kIHRoZW4gdGhlIHJlc3RvcmF0aW9uIHdpbGwgYmUgcnVuIGluIHRoYXQK KyAgIGRhdGFiYXNlLgorCisgICBPdGhlcndpc2UsIHdoZW4gYSBkYXRhYmFzZSBuYW1lIGlz IG5vdCBzcGVjaWZpZWQsIGEgc2NyaXB0IGNvbnRhaW5pbmcgdGhlIFNRTAorICAgY29tbWFu ZHMgbmVjZXNzYXJ5IHRvIHJlYnVpbGQgdGhlIGRhdGFiYXNlIG9yIGNsdXN0ZXIgaXMgY3Jl YXRlZCBhbmQgd3JpdHRlbgogICAgdG8gYSBmaWxlIG9yIHN0YW5kYXJkIG91dHB1dC4gIFRo aXMgc2NyaXB0IG91dHB1dCBpcyBlcXVpdmFsZW50IHRvCi0gICB0aGUgcGxhaW4gdGV4dCBv dXRwdXQgZm9ybWF0IG9mIDxhcHBsaWNhdGlvbj5wZ19kdW1wPC9hcHBsaWNhdGlvbj4uCisg ICB0aGUgcGxhaW4gdGV4dCBvdXRwdXQgZm9ybWF0IG9mIDxhcHBsaWNhdGlvbj5wZ19kdW1w PC9hcHBsaWNhdGlvbj4gb3IKKyAgIDxhcHBsaWNhdGlvbj5wZ19kdW1wYWxsPC9hcHBsaWNh dGlvbj4uCisKICAgIFNvbWUgb2YgdGhlIG9wdGlvbnMgY29udHJvbGxpbmcgdGhlIG91dHB1 dCBhcmUgdGhlcmVmb3JlIGFuYWxvZ291cyB0bwogICAgPGFwcGxpY2F0aW9uPnBnX2R1bXA8 L2FwcGxpY2F0aW9uPiBvcHRpb25zLgogICA8L3BhcmE+CkBAIC0xNDAsNiArMTQ5LDggQEAg UG9zdGdyZVNRTCBkb2N1bWVudGF0aW9uCiAgICAgICAgIGNvbW1hbmRzIHRoYXQgbWVudGlv biB0aGlzIGRhdGFiYXNlLgogICAgICAgICBBY2Nlc3MgcHJpdmlsZWdlcyBmb3IgdGhlIGRh dGFiYXNlIGl0c2VsZiBhcmUgYWxzbyByZXN0b3JlZCwKICAgICAgICAgdW5sZXNzIDxvcHRp b24+LS1uby1hY2w8L29wdGlvbj4gaXMgc3BlY2lmaWVkLgorICAgICAgICA8b3B0aW9uPi0t Y3JlYXRlPC9vcHRpb24+IGlzIHJlcXVpcmVkIHdoZW4gcmVzdG9yaW5nIG11bHRpcGxlIGRh dGFiYXNlcworICAgICAgICBmcm9tIGFuIGFyY2hpdmUgY3JlYXRlZCBieSA8YXBwbGljYXRp b24+cGdfZHVtcGFsbDwvYXBwbGljYXRpb24+LgogICAgICAgIDwvcGFyYT4KIAogICAgICAg IDxwYXJhPgpAQCAtMTY2LDYgKzE3NywyOCBAQCBQb3N0Z3JlU1FMIGRvY3VtZW50YXRpb24K ICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgIDwvdmFybGlzdGVudHJ5PgogCisgICAgIDx2YXJs aXN0ZW50cnk+CisgICAgICA8dGVybT48b3B0aW9uPi0tZXhjbHVkZS1kYXRhYmFzZT08cmVw bGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+cGF0dGVybjwvcmVwbGFjZWFibGU+PC9vcHRp b24+PC90ZXJtPgorICAgICAgPGxpc3RpdGVtPgorICAgICAgIDxwYXJhPgorICAgICAgICBE byBub3QgcmVzdG9yZSBkYXRhYmFzZXMgd2hvc2UgbmFtZSBtYXRjaGVzCisgICAgICAgIDxy ZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5wYXR0ZXJuPC9yZXBsYWNlYWJsZT4uCisg ICAgICAgIE11bHRpcGxlIHBhdHRlcm5zIGNhbiBiZSBleGNsdWRlZCBieSB3cml0aW5nIG11 bHRpcGxlCisgICAgICAgIDxvcHRpb24+LS1leGNsdWRlLWRhdGFiYXNlPC9vcHRpb24+IHN3 aXRjaGVzLiAgVGhlCisgICAgICAgIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5w YXR0ZXJuPC9yZXBsYWNlYWJsZT4gcGFyYW1ldGVyIGlzCisgICAgICAgIGludGVycHJldGVk IGFzIGEgcGF0dGVybiBhY2NvcmRpbmcgdG8gdGhlIHNhbWUgcnVsZXMgdXNlZCBieQorICAg ICAgICA8YXBwbGljYXRpb24+cHNxbDwvYXBwbGljYXRpb24+J3MgPGxpdGVyYWw+XGQ8L2xp dGVyYWw+CisgICAgICAgIGNvbW1hbmRzIChzZWUgPHhyZWYgbGlua2VuZD0iYXBwLXBzcWwt cGF0dGVybnMiLz4pLAorICAgICAgICBzbyBtdWx0aXBsZSBkYXRhYmFzZXMgY2FuIGFsc28g YmUgZXhjbHVkZWQgYnkgd3JpdGluZyB3aWxkY2FyZAorICAgICAgICBjaGFyYWN0ZXJzIGlu IHRoZSBwYXR0ZXJuLiAgV2hlbiB1c2luZyB3aWxkY2FyZHMsIGJlIGNhcmVmdWwgdG8KKyAg ICAgICAgcXVvdGUgdGhlIHBhdHRlcm4gaWYgbmVlZGVkIHRvIHByZXZlbnQgc2hlbGwgd2ls ZGNhcmQgZXhwYW5zaW9uLgorICAgICAgIDwvcGFyYT4KKyAgICAgICA8cGFyYT4KKyAgICAg ICAgVGhpcyBvcHRpb24gaXMgb25seSByZWxldmFudCB3aGVuIHJlc3RvcmluZyBmcm9tIGFu IGFyY2hpdmUgbWFkZSB1c2luZyA8YXBwbGljYXRpb24+cGdfZHVtcGFsbDwvYXBwbGljYXRp b24+LgorICAgICAgIDwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgIDwvdmFybGlz dGVudHJ5PgorCiAgICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgICA8dGVybT48b3B0aW9uPi1l PC9vcHRpb24+PC90ZXJtPgogICAgICAgPHRlcm0+PG9wdGlvbj4tLWV4aXQtb24tZXJyb3I8 L29wdGlvbj48L3Rlcm0+CkBAIC0zMTUsNiArMzQ4LDE5IEBAIFBvc3RncmVTUUwgZG9jdW1l bnRhdGlvbgogICAgICAgPC9saXN0aXRlbT4KICAgICAgPC92YXJsaXN0ZW50cnk+CiAKKyAg ICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgIDx0ZXJtPjxvcHRpb24+LWc8L29wdGlvbj48L3Rl cm0+CisgICAgICA8dGVybT48b3B0aW9uPi0tZ2xvYmFscy1vbmx5PC9vcHRpb24+PC90ZXJt PgorICAgICAgPGxpc3RpdGVtPgorICAgICAgIDxwYXJhPgorICAgICAgICBSZXN0b3JlIG9u bHkgZ2xvYmFsIG9iamVjdHMgKHJvbGVzIGFuZCB0YWJsZXNwYWNlcyksIG5vIGRhdGFiYXNl cy4KKyAgICAgICA8L3BhcmE+CisgICAgICAgPHBhcmE+CisgICAgICAgIFRoaXMgb3B0aW9u IGlzIG9ubHkgcmVsZXZhbnQgd2hlbiByZXN0b3JpbmcgZnJvbSBhbiBhcmNoaXZlIG1hZGUg dXNpbmcgPGFwcGxpY2F0aW9uPnBnX2R1bXBhbGw8L2FwcGxpY2F0aW9uPi4KKyAgICAgICA8 L3BhcmE+CisgICAgICA8L2xpc3RpdGVtPgorICAgICA8L3Zhcmxpc3RlbnRyeT4KKwogICAg ICA8dmFybGlzdGVudHJ5PgogICAgICAgPHRlcm0+PG9wdGlvbj4tSSA8cmVwbGFjZWFibGUg Y2xhc3M9InBhcmFtZXRlciI+aW5kZXg8L3JlcGxhY2VhYmxlPjwvb3B0aW9uPjwvdGVybT4K ICAgICAgIDx0ZXJtPjxvcHRpb24+LS1pbmRleD08cmVwbGFjZWFibGUgY2xhc3M9InBhcmFt ZXRlciI+aW5kZXg8L3JlcGxhY2VhYmxlPjwvb3B0aW9uPjwvdGVybT4K --------------qnDdASt2qY4BmXZxTCLRcYms--