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.96) (envelope-from ) id 1vc71C-002BSk-0s for pgsql-hackers@arkaria.postgresql.org; Sat, 03 Jan 2026 19:10:31 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vc71B-00DXRb-0e for pgsql-hackers@arkaria.postgresql.org; Sat, 03 Jan 2026 19:10:29 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vc71A-00DXRT-2f for pgsql-hackers@lists.postgresql.org; Sat, 03 Jan 2026 19:10:29 +0000 Received: from mail-qt1-x82b.google.com ([2607:f8b0:4864:20::82b]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1vc719-004IC9-0s for pgsql-hackers@postgresql.org; Sat, 03 Jan 2026 19:10:29 +0000 Received: by mail-qt1-x82b.google.com with SMTP id d75a77b69052e-4ee1a3ef624so74096941cf.0 for ; Sat, 03 Jan 2026 11:10:26 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1767467425; x=1768072225; darn=postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=RoYZ/cUBtNudvFCQ4HMmw+T3fuARA5uTV4DpybKKEMM=; b=Rts77BW0RLOmKveBpCV/b7m6rOMKmaRoyy/Y4ZSueJY7SKVvDgtttdu8KgPcVAimVP 9T5j/X7Y/Zces9BXYZU0lgsoB0jEMk1OAA06hjt7y1kmVc1ZQ1KFbSVsBP0NXN104wxH pHYSSdZGmTcZfeqPs/WjE4wncb47uGIW8phaW4SQZwoYiYd4flDHy0iMtRXusLj7HN0D vhVpeZfmmgzcmL0vT7+sbfuPynfncrXTbfGXVMB9a9a59YHEpAHbMxIYGBCuNdyaR5Y9 OMwg8Ztd5TWV+ntNx7ICKHlb3AEm20ZzSe8ddJkQ/ItSkiq/6WWyx/QDoG2Q/wNTkya9 mOfQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1767467425; x=1768072225; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=RoYZ/cUBtNudvFCQ4HMmw+T3fuARA5uTV4DpybKKEMM=; b=ZeXDmh8Hj94nPhWbnv2Wg6lT/qmPtXYvIsIl3OTwUUpqyqabBaBhGznQ7AHtgjH127 CezHt4U0DrlmX6BUgm+xlmk95DyNs1S5uyVvqU6PySvTgcyk1voxUk8ljI/XvMYBxUvC ttfQYT5dHF6wAwJvDAcJYSJvJP9FuoZcoJBEaSM1BsFkqO2KoskPB9czmnAlfrG67Rqw vtaSrvPK+ba9AA+3mOwMmWoRr4slBg4LkqjOiJ/pAMWNxxc/0JlE34T8CvhwivoYMX9n uK3JbKQmeqDIWUoYg//a0D9VZThWY87ZXXmiGGKUxb+ZPHkHf7+ySfE7KY2VPyrb6JNL it0g== X-Gm-Message-State: AOJu0Yz80YDIdx9Gpws8Pau/i2krU+ow4INej4PxVVLqnEnVKAkwrgfM oPELTWbxl77cX+WGbqhCQoZugr+yk9TXWQiPvDybgCwBsPsZBPNZ4Uq+f0NrOYji+xLVDis/g24 Zca/OgITq8rYz8VLc4fsJYuj9bH2oybv3gQ== X-Gm-Gg: AY/fxX64MRD6F9nwjXhI0ge5Sst1LtCW04M0CkO1R4iMuGq7+thu2ScYh2A7MtOXVk1 /0D4DCLrHOoob+HprkgVRhFU7+CMqO7pQMZWwPAG/SSUDT7AVg0n++xFGyaE7pFs0mR5TossEdd RxaaysjJwwCvqr+EztxgQx3MXo0Ol6eB4+Wrza56Al/65LDvHm/EsqwOQ7SuCwBlU/OOvaUvDtX 2XgJ6wsETezn+RiARevAqIPfBWO9UMIIlCjxB9UIK4rki8hmheKEcHSLWjTcRjAQ+k5Qhi9GsSF 5Mcb5C2p X-Google-Smtp-Source: AGHT+IEI71XmLSbc3W5OSNIMVYD/l5dRQck5xUK6lk+elo+hu8Cs6Av/67Dm4Q2/DxqIH2Iyuq5MFsb8rWXiT62EJoM= X-Received: by 2002:ac8:5d14:0:b0:4ef:cfab:5a55 with SMTP id d75a77b69052e-4f4abd93d15mr677901241cf.60.1767467425008; Sat, 03 Jan 2026 11:10:25 -0800 (PST) MIME-Version: 1.0 References: <798928DA-2937-46F5-8AD0-C3A5BAB5C7E1@yandex-team.ru> In-Reply-To: From: Kirill Reshke Date: Sun, 4 Jan 2026 00:10:13 +0500 X-Gm-Features: AQt7F2pXyVxPdUwX1F9_ynUvBQaSY4bPUmP_Tx-n01NZHu8NWae8DmJJeq4ZmVE Message-ID: Subject: Re: GIN pageinspect support for entry tree and posting tree To: Andrey Borodin Cc: pgsql-hackers , Roman Khapov Content-Type: multipart/mixed; boundary="00000000000005bafe064780946d" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000005bafe064780946d Content-Type: text/plain; charset="UTF-8" On Sat, 3 Jan 2026 at 00:16, Kirill Reshke wrote: > > > PFA v3. > > PFA v4 with typo fixes. PFA v5 with pageinspect documentation updates. -- Best regards, Kirill Reshke --00000000000005bafe064780946d Content-Type: application/octet-stream; name="v5-0001-GIN-pageinspect-support-for-entry-tree-and-postin.patch" Content-Disposition: attachment; filename="v5-0001-GIN-pageinspect-support-for-entry-tree-and-postin.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mjyog0t40 RnJvbSA5NDc2ODc3MjUyOTY5NDFiYmYzNzczZTM5OWJkYTkzYmYwZGE4MTQ4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiByZXNoa2UgPHJlc2hrZUBkb3VibGUuY2xvdWQ+CkRhdGU6IE1v biwgMTMgT2N0IDIwMjUgMjA6MTQ6MjYgKzAwMDAKU3ViamVjdDogW1BBVENIIHY1XSBHSU4gcGFn ZWluc3BlY3Qgc3VwcG9ydCBmb3IgZW50cnkgdHJlZSBhbmQgcG9zdGluZyB0cmVlCiBpbnRlcm5h bCBwYWdlcwoKVGhpcyBwYXRjaCBwcm92aWRlcyBuZXcgdmVyc2lvbiBmb3IgcGFnZWluc3BlY3Qg Y29udHJpYiBtb2R1bGUgaW5jbHVkaW5nCnR3byBuZXcgZnVuY3Rpb25zOgoKKiBnaW5fZW50cnlw YWdlX2l0ZW1zLgoqIGdpbl9kYXRhcGFnZV9pdGVtcy4KClRoZXNlIHR3byBmdW5jdGlvbnMgY2Fu IGJlIHVzZWQgdG8gZXhhbWluZSBHSU4gZW50cnkgdHJlZSBhbmQgcG9zdGluZwp0cmVlIHBhZ2Vz LiBOYW1lbHksIGdpbl9lbnRyeXBhZ2VfaXRlbXMgY2FuIGJlIHVzZWQgb2YgYm90aCBsZWFmIGFu ZApub24tbGVhZiBlbnRyeSB0cmVlIHBhZ2VzLiBnaW5fZGF0YXBhZ2VfaXRlbXMgaXMgcHJvdmlk ZWQgaW4gcGFpcnMgd2l0aAphbHJlYWR5LWV4aXN0aW5nIGdpbl9sZWFmcGFnZV9pdGVtcyB0byBl eGFtaW5lIG5vbi1sZWFmIHBvc3RpbmcgdHJlZQpwYWdlcy4KCldlIGtlZXAgdGhlIGRpZmZlcmVu dCBmdW5jdGlvbnMgaGVyZSBtYWlubHkgYmVjYXVzZSBvZiBkaWZmZXJlbnQgR0lOCnBhZ2VzIGxh eW9mZi4KCk5vdGUgdGhhdCBmYXN0LWxpc3QgcGFnZXMgYXJlIG91dCBvZiBzY29wZSBvZiB0aGlz IHBhdGNoLgoKUmV2aWV3ZWQtYnk6IEFuZHJleSBCb3JvZGluIHg0bW1tQHlhbmRleC10ZWFtLnJ1 ClJldmlld2VkLWJ5OiBSb21hbiBLaGFwb3YgcmtoYXBvdkB5YW5kZXgtdGVhbS5ydQotLS0KIGNv bnRyaWIvcGFnZWluc3BlY3QvTWFrZWZpbGUgICAgICAgICAgICAgICAgICB8ICAgMiArLQogY29u dHJpYi9wYWdlaW5zcGVjdC9leHBlY3RlZC9naW4ub3V0ICAgICAgICAgIHwgIDg0ICsrKystCiBj b250cmliL3BhZ2VpbnNwZWN0L2dpbmZ1bmNzLmMgICAgICAgICAgICAgICAgfCAzMzUgKysrKysr KysrKysrKysrKysrCiAuLi4vcGFnZWluc3BlY3QvcGFnZWluc3BlY3QtLTEuMTMtLTEuMTQuc3Fs ICAgfCAgMjggKysKIGNvbnRyaWIvcGFnZWluc3BlY3QvcGFnZWluc3BlY3QuY29udHJvbCAgICAg ICB8ICAgMiArLQogY29udHJpYi9wYWdlaW5zcGVjdC9zcWwvZ2luLnNxbCAgICAgICAgICAgICAg IHwgIDM0ICstCiBkb2Mvc3JjL3NnbWwvcGFnZWluc3BlY3Quc2dtbCAgICAgICAgICAgICAgICAg fCAgNTQgKysrCiA3IGZpbGVzIGNoYW5nZWQsIDUzMyBpbnNlcnRpb25zKCspLCA2IGRlbGV0aW9u cygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGFnZWluc3BlY3QvcGFnZWluc3BlY3Qt LTEuMTMtLTEuMTQuc3FsCgpkaWZmIC0tZ2l0IGEvY29udHJpYi9wYWdlaW5zcGVjdC9NYWtlZmls ZSBiL2NvbnRyaWIvcGFnZWluc3BlY3QvTWFrZWZpbGUKaW5kZXggZWFlOTg5NTY5ZDAuLjA5Nzc0 ZmQzNDBjIDEwMDY0NAotLS0gYS9jb250cmliL3BhZ2VpbnNwZWN0L01ha2VmaWxlCisrKyBiL2Nv bnRyaWIvcGFnZWluc3BlY3QvTWFrZWZpbGUKQEAgLTEzLDcgKzEzLDcgQEAgT0JKUyA9IFwKIAly YXdwYWdlLm8KIAogRVhURU5TSU9OID0gcGFnZWluc3BlY3QKLURBVEEgPSAgcGFnZWluc3BlY3Qt LTEuMTItLTEuMTMuc3FsIFwKK0RBVEEgPSAgcGFnZWluc3BlY3QtLTEuMTMtLTEuMTQuc3FsIHBh Z2VpbnNwZWN0LS0xLjEyLS0xLjEzLnNxbCBcCiAJcGFnZWluc3BlY3QtLTEuMTEtLTEuMTIuc3Fs IHBhZ2VpbnNwZWN0LS0xLjEwLS0xLjExLnNxbCBcCiAJcGFnZWluc3BlY3QtLTEuOS0tMS4xMC5z cWwgcGFnZWluc3BlY3QtLTEuOC0tMS45LnNxbCBcCiAJcGFnZWluc3BlY3QtLTEuNy0tMS44LnNx bCBwYWdlaW5zcGVjdC0tMS42LS0xLjcuc3FsIFwKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGFnZWlu c3BlY3QvZXhwZWN0ZWQvZ2luLm91dCBiL2NvbnRyaWIvcGFnZWluc3BlY3QvZXhwZWN0ZWQvZ2lu Lm91dAppbmRleCBmZjFkYTZhNWExNy4uOTcwNTdlMzc1MjkgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIv cGFnZWluc3BlY3QvZXhwZWN0ZWQvZ2luLm91dAorKysgYi9jb250cmliL3BhZ2VpbnNwZWN0L2V4 cGVjdGVkL2dpbi5vdXQKQEAgLTEsNiArMSw4IEBACi1DUkVBVEUgVEFCTEUgdGVzdDEgKHggaW50 LCB5IGludFtdKTsKLUlOU0VSVCBJTlRPIHRlc3QxIFZBTFVFUyAoMSwgQVJSQVlbMTEsIDExMV0p OworQ1JFQVRFIFRBQkxFIHRlc3QxICh4IGludCwgeSBpbnRbXSwgeiB0ZXh0W10pOworSU5TRVJU IElOVE8gdGVzdDEgVkFMVUVTICgxLCBBUlJBWVsxMSwgMTExXSwgQVJSQVlbJ2EnLCAnYicsICdj J10pOwogQ1JFQVRFIElOREVYIHRlc3QxX3lfaWR4IE9OIHRlc3QxIFVTSU5HIGdpbiAoeSkgV0lU SCAoZmFzdHVwZGF0ZSA9IG9mZik7CitDUkVBVEUgSU5ERVggdGVzdDJfeV96X2lkeCBPTiB0ZXN0 MSBVU0lORyBnaW4gKHksIHopIFdJVEggKGZhc3R1cGRhdGUgPSBvZmYpOworQ1JFQVRFIElOREVY IHRlc3QzX3lfel9pZHggT04gdGVzdDEgVVNJTkcgZ2luICh5LCB6KSBXSVRIIChmYXN0dXBkYXRl ID0gb24pOwogXHgKIFNFTEVDVCAqIEZST00gZ2luX21ldGFwYWdlX2luZm8oZ2V0X3Jhd19wYWdl KCd0ZXN0MV95X2lkeCcsIDApKTsKIC1bIFJFQ09SRCAxIF0tLS0tKy0tLS0tLS0tLS0tCkBAIC0y Nyw2ICsyOSw0NSBAQCBmbGFncyAgICAgfCB7bGVhZn0KIFNFTEVDVCAqIEZST00gZ2luX2xlYWZw YWdlX2l0ZW1zKGdldF9yYXdfcGFnZSgndGVzdDFfeV9pZHgnLCAxKSk7CiBFUlJPUjogIGlucHV0 IHBhZ2UgaXMgbm90IGEgY29tcHJlc3NlZCBHSU4gZGF0YSBsZWFmIHBhZ2UKIERFVEFJTDogIEZs YWdzIDAwMDIsIGV4cGVjdGVkIDAwODMKK1NFTEVDVCAqIEZST00gZ2luX2VudHJ5cGFnZV9pdGVt cyhnZXRfcmF3X3BhZ2UoJ3Rlc3QxX3lfaWR4JywgMSksICd0ZXN0MV95X2lkeCc6OnJlZ2NsYXNz KTsKKy1bIFJFQ09SRCAxIF0tLS0tLS0tLS0tLS0tLQoraXRlbW9mZnNldCB8IDEKK2Rvd25saW5r ICAgfCAoMjE0NzQ4MzY2NCwxKQordGlkcyAgICAgICB8IHsiKDAsMSkifQora2V5cyAgICAgICB8 IHk9MTEKKy1bIFJFQ09SRCAyIF0tLS0tLS0tLS0tLS0tLQoraXRlbW9mZnNldCB8IDIKK2Rvd25s aW5rICAgfCAoMjE0NzQ4MzY2NCwxKQordGlkcyAgICAgICB8IHsiKDAsMSkifQora2V5cyAgICAg ICB8IHk9MTExCisKK1NFTEVDVCAqIEZST00gZ2luX2VudHJ5cGFnZV9pdGVtcyhnZXRfcmF3X3Bh Z2UoJ3Rlc3QyX3lfel9pZHgnLCAxKSwgJ3Rlc3QyX3lfel9pZHgnOjpyZWdjbGFzcyk7CistWyBS RUNPUkQgMSBdLS0tLS0tLS0tLS0tLS0KK2l0ZW1vZmZzZXQgfCAxCitkb3dubGluayAgIHwgKDIx NDc0ODM2NjQsMSkKK3RpZHMgICAgICAgfCB7IigwLDEpIn0KK2tleXMgICAgICAgfCB5PTExCist WyBSRUNPUkQgMiBdLS0tLS0tLS0tLS0tLS0KK2l0ZW1vZmZzZXQgfCAyCitkb3dubGluayAgIHwg KDIxNDc0ODM2NjQsMSkKK3RpZHMgICAgICAgfCB7IigwLDEpIn0KK2tleXMgICAgICAgfCB5PTEx MQorLVsgUkVDT1JEIDMgXS0tLS0tLS0tLS0tLS0tCitpdGVtb2Zmc2V0IHwgMworZG93bmxpbmsg ICB8ICgyMTQ3NDgzNjY0LDEpCit0aWRzICAgICAgIHwgeyIoMCwxKSJ9CitrZXlzICAgICAgIHwg ej1hCistWyBSRUNPUkQgNCBdLS0tLS0tLS0tLS0tLS0KK2l0ZW1vZmZzZXQgfCA0Citkb3dubGlu ayAgIHwgKDIxNDc0ODM2NjQsMSkKK3RpZHMgICAgICAgfCB7IigwLDEpIn0KK2tleXMgICAgICAg fCB6PWIKKy1bIFJFQ09SRCA1IF0tLS0tLS0tLS0tLS0tLQoraXRlbW9mZnNldCB8IDUKK2Rvd25s aW5rICAgfCAoMjE0NzQ4MzY2NCwxKQordGlkcyAgICAgICB8IHsiKDAsMSkifQora2V5cyAgICAg ICB8IHo9YworCiBJTlNFUlQgSU5UTyB0ZXN0MSBTRUxFQ1QgeCwgQVJSQVlbMSwxMF0gRlJPTSBn ZW5lcmF0ZV9zZXJpZXMoMiwxMDAwMCkgeDsKIFNFTEVDVCBDT1VOVCgqKSA+IDAKIEZST00gZ2lu X2xlYWZwYWdlX2l0ZW1zKGdldF9yYXdfcGFnZSgndGVzdDFfeV9pZHgnLApAQCAtMzUsNiArNzYs MjMgQEAgRlJPTSBnaW5fbGVhZnBhZ2VfaXRlbXMoZ2V0X3Jhd19wYWdlKCd0ZXN0MV95X2lkeCcs CiAtWyBSRUNPUkQgMSBdCiA/Y29sdW1uPyB8IHQKIAorLS0gTm93IHRlc3QgcG9zdGluZyB0cmVl IG5vbi1sZWFmIHBhZ2UuCistLSBUaGlzIHJlcXVpcmVzIGluc2VydGluZyBtYW55IHR1cGxlcyBv biBhIHNpbmdsZSBsZWFmIHBhZ2UgdG8gdHJpZ2dlciBwYWdlIHNwbGl0LgorQ1JFQVRFIFRBQkxF IHRlc3RfZGF0YV9wYWdlKGkgSU5UW10pOworQ1JFQVRFIElOREVYIHRlc3RfZGF0YV9wYWdlX2lf aWR4IE9OIHRlc3RfZGF0YV9wYWdlIFVTSU5HIGdpbihpKSBXSVRIIChmYXN0dXBkYXRlID0gb2Zm KTsKK0lOU0VSVCBJTlRPIHRlc3RfZGF0YV9wYWdlIFNFTEVDVCBBUlJBWVsxXSBGUk9NIGdlbmVy YXRlX3NlcmllcygxLCAxMDAwMCk7CistLSBGb3IgdGhpcyBpbmRleCwgYmxvY2sgMCBpcyBtZXRh cGFnZSwgYmxvY2sgMSBpcyBlbnRyeSB0cmVlLCBibG9jayAyIGlzIAorLS0gcG9zdGluZyB0cmVl IG5vbi1sZWFmIHBhZ2UgYW5kIGJsb2NrIDMgJiA0IGFyZSBjb21wcmVzc2VkIGRhdGEgbGVhZiBw YWdlcy4KK1NFTEVDVCAqIEZST00gZ2luX2RhdGFwYWdlX2l0ZW1zKGdldF9yYXdfcGFnZSgndGVz dF9kYXRhX3BhZ2VfaV9pZHgnLCAyKSk7CistWyBSRUNPUkQgMSBdLS0tLS0tLQoraXRlbW9mZnNl dCB8IDEKK2Rvd25saW5rICAgfCA0CitpdGVtX3RpZCAgIHwgKDQ0LDgzKQorLVsgUkVDT1JEIDIg XS0tLS0tLS0KK2l0ZW1vZmZzZXQgfCAyCitkb3dubGluayAgIHwgMworaXRlbV90aWQgICB8ICgw LDApCisKIC0tIEZhaWx1cmUgd2l0aCB2YXJpb3VzIG1vZGVzLgogLS0gU3VwcHJlc3MgdGhlIERF VEFJTCBtZXNzYWdlLCB0byBhbGxvdyB0aGUgdGVzdHMgdG8gd29yayBhY3Jvc3MgdmFyaW91cwog LS0gcGFnZSBzaXplcyBhbmQgYXJjaGl0ZWN0dXJlcy4KQEAgLTU0LDEyICsxMTIsMzQgQEAgRVJS T1I6ICBpbnB1dCBwYWdlIGlzIG5vdCBhIHZhbGlkIEdJTiBkYXRhIGxlYWYgcGFnZQogU0VMRUNU ICogRlJPTSBnaW5fbGVhZnBhZ2VfaXRlbXMoZ2V0X3Jhd19wYWdlKCd0ZXN0MScsIDApKTsKIEVS Uk9SOiAgaW5wdXQgcGFnZSBpcyBub3QgYSB2YWxpZCBHSU4gZGF0YSBsZWFmIHBhZ2UKIFxzZXQg VkVSQk9TSVRZIGRlZmF1bHQKKy0tIFJlamVjdCB1bnN1cHBvcnRlZCBwYWdlIHR5cGVzIGluIGdp bl9lbnRyeXBhZ2VfaXRlbXMuCitTRUxFQ1QgKiBGUk9NIGdpbl9lbnRyeXBhZ2VfaXRlbXMoZ2V0 X3Jhd19wYWdlKCd0ZXN0Ml95X3pfaWR4JywgMCksICd0ZXN0Ml95X3pfaWR4Jzo6cmVnY2xhc3Mp OworRVJST1I6ICBnaW5fZW50cnlwYWdlX2l0ZW1zIGlzIHVuc3VwcG9ydGVkIGZvciBtZXRhcGFn ZQorLS0gQ2hlY2sgdGhlIGVycm9yIG1lc3NhZ2UgZm9yIHRoZSBpbnRlcm5hbCBwb3N0aW5nIHRy ZWUgcGFnZS4KK1NFTEVDVCAqIEZST00gZ2luX2VudHJ5cGFnZV9pdGVtcyhnZXRfcmF3X3BhZ2Uo J3Rlc3RfZGF0YV9wYWdlX2lfaWR4JywgMiksICd0ZXN0X2RhdGFfcGFnZV9pX2lkeCc6OnJlZ2Ns YXNzKTsKK0VSUk9SOiAgaW5wdXQgcGFnZSBpcyBub3QgYSBHSU4gZW50cnkgdHJlZSBwYWdlCitI SU5UOiAgVGhpcyBhcHBlYXJzIHRvIGJlIGEgR0lOIHBvc3RpbmcgdHJlZSBwYWdlLiBQbGVhc2Ug dXNlIGdpbl9kYXRhcGFnZV9pdGVtcworLS0gaW5zZXJ0IG5ldyByb3cgdG8gdHJpZ2dlciBuZXcg KGZhc3QtbGlzdCkgcGFnZSBhbGxvY2F0aW9uLgorSU5TRVJUIElOVE8gdGVzdDEgVkFMVUVTICgx LCBBUlJBWVsxMSwgMTExXSwgQVJSQVlbJ2EnLCAnYicsICdjJ10pOworLS0gZG91YmxlIGNoZWNr IHRoYXQgdGhlIG5ldyBwYWdlIGlzIGZhc3QtbGlzdC4KK1NFTEVDVCAqIEZST00gZ2luX3BhZ2Vf b3BhcXVlX2luZm8oZ2V0X3Jhd19wYWdlKCd0ZXN0M195X3pfaWR4JywgMikpOworLVsgUkVDT1JE IDEgXS0tLS0tLS0tLS0tLS0tLS0tLQorcmlnaHRsaW5rIHwgMworbWF4b2ZmICAgIHwgMTIwCitm bGFncyAgICAgfCB7bGlzdCxsaXN0X2Z1bGxyb3d9CisKKy0tIHJlamVjdCBmYXN0LWxpc3QgcGFn ZXMuCitTRUxFQ1QgKiBGUk9NIGdpbl9lbnRyeXBhZ2VfaXRlbXMoZ2V0X3Jhd19wYWdlKCd0ZXN0 M195X3pfaWR4JywgMyksICd0ZXN0M195X3pfaWR4Jzo6cmVnY2xhc3MpOworRVJST1I6ICBnaW5f ZW50cnlwYWdlX2l0ZW1zIGlzIHVuc3VwcG9ydGVkIGZvciBmYXN0IGxpc3QgcGFnZXMKIC0tIFRl c3RzIHdpdGggYWxsLXplcm8gcGFnZXMuCiBTSE9XIGJsb2NrX3NpemUgXGdzZXQKIFNFTEVDVCBn aW5fbGVhZnBhZ2VfaXRlbXMoZGVjb2RlKHJlcGVhdCgnMDAnLCA6YmxvY2tfc2l6ZSksICdoZXgn KSk7CiAtWyBSRUNPUkQgMSBdLS0tLS0tKy0KIGdpbl9sZWFmcGFnZV9pdGVtcyB8IAogCitTRUxF Q1QgZ2luX2RhdGFwYWdlX2l0ZW1zKGRlY29kZShyZXBlYXQoJzAwJywgOmJsb2NrX3NpemUpLCAn aGV4JykpOworKDAgcm93cykKKwogU0VMRUNUIGdpbl9tZXRhcGFnZV9pbmZvKGRlY29kZShyZXBl YXQoJzAwJywgOmJsb2NrX3NpemUpLCAnaGV4JykpOwogLVsgUkVDT1JEIDEgXS0tLS0tKy0KIGdp bl9tZXRhcGFnZV9pbmZvIHwgCmRpZmYgLS1naXQgYS9jb250cmliL3BhZ2VpbnNwZWN0L2dpbmZ1 bmNzLmMgYi9jb250cmliL3BhZ2VpbnNwZWN0L2dpbmZ1bmNzLmMKaW5kZXggZWJjYzJiM2RiNWMu LjA1OWRiNDk3ZTkzIDEwMDY0NAotLS0gYS9jb250cmliL3BhZ2VpbnNwZWN0L2dpbmZ1bmNzLmMK KysrIGIvY29udHJpYi9wYWdlaW5zcGVjdC9naW5mdW5jcy5jCkBAIC0xMSwxOCArMTEsMjcgQEAK IAogI2luY2x1ZGUgImFjY2Vzcy9naW5fcHJpdmF0ZS5oIgogI2luY2x1ZGUgImFjY2Vzcy9odHVw X2RldGFpbHMuaCIKKyNpbmNsdWRlICJhY2Nlc3MvcmVsYXRpb24uaCIKKyNpbmNsdWRlICJhY2Nl c3MvdHVwZGVzYy5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfdHlwZS5oIgogI2luY2x1ZGUgImZ1 bmNhcGkuaCIKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJwYWdlaW5zcGVjdC5o IgogI2luY2x1ZGUgInV0aWxzL2FycmF5LmgiCiAjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIK KyNpbmNsdWRlICJ1dGlscy9sc3lzY2FjaGUuaCIKKyNpbmNsdWRlICJ1dGlscy9yZWwuaCIKKyNp bmNsdWRlICJ1dGlscy9ydWxldXRpbHMuaCIKIAogCiBQR19GVU5DVElPTl9JTkZPX1YxKGdpbl9t ZXRhcGFnZV9pbmZvKTsKIFBHX0ZVTkNUSU9OX0lORk9fVjEoZ2luX3BhZ2Vfb3BhcXVlX2luZm8p OworUEdfRlVOQ1RJT05fSU5GT19WMShnaW5fZW50cnlwYWdlX2l0ZW1zKTsKIFBHX0ZVTkNUSU9O X0lORk9fVjEoZ2luX2xlYWZwYWdlX2l0ZW1zKTsKK1BHX0ZVTkNUSU9OX0lORk9fVjEoZ2luX2Rh dGFwYWdlX2l0ZW1zKTsKIAorI2RlZmluZSBJU19JTkRFWChyKSAoKHIpLT5yZF9yZWwtPnJlbGtp bmQgPT0gUkVMS0lORF9JTkRFWCkKKyNkZWZpbmUgSVNfR0lOKHIpICgociktPnJkX3JlbC0+cmVs YW0gPT0gR0lOX0FNX09JRCkKIAogRGF0dW0KIGdpbl9tZXRhcGFnZV9pbmZvKFBHX0ZVTkNUSU9O X0FSR1MpCkBAIC0xNzUsNiArMTg0LDMzMiBAQCB0eXBlZGVmIHN0cnVjdCBnaW5fbGVhZnBhZ2Vf aXRlbXNfc3RhdGUKIAlHaW5Qb3N0aW5nTGlzdCAqbGFzdHNlZzsKIH0gZ2luX2xlYWZwYWdlX2l0 ZW1zX3N0YXRlOwogCitEYXR1bQorZ2luX2VudHJ5cGFnZV9pdGVtcyhQR19GVU5DVElPTl9BUkdT KQoreworCWJ5dGVhCQkJKnJhd19wYWdlID0gUEdfR0VUQVJHX0JZVEVBX1AoMCk7CisJT2lkCQkJ CWluZGV4UmVsaWQgPSBQR19HRVRBUkdfT0lEKDEpOworCVJldHVyblNldEluZm8JKnJzaW5mbyA9 IChSZXR1cm5TZXRJbmZvICopIGZjaW5mby0+cmVzdWx0aW5mbzsKKwlSZWxhdGlvbgkJaW5kZXhS ZWw7CisJT2Zmc2V0TnVtYmVyCW1heG9mZiwgb2Zmc2V0OworCVR1cGxlRGVzYwkJdHVwZGVzYzsK Kwlib29sCQkJb25lQ29sOworCVBhZ2UJCQlwYWdlOworCUdpblBhZ2VPcGFxdWUJb3BhcTsKKwlT dHJpbmdJbmZvRGF0YQlidWY7CisKKwlpZiAoIXN1cGVydXNlcigpKQorCQllcmVwb3J0KEVSUk9S LAorCQkJCShlcnJjb2RlKEVSUkNPREVfSU5TVUZGSUNJRU5UX1BSSVZJTEVHRSksCisJCQkJIGVy cm1zZygibXVzdCBiZSBzdXBlcnVzZXIgdG8gdXNlIHJhdyBwYWdlIGZ1bmN0aW9ucyIpKSk7CisK KwlJbml0TWF0ZXJpYWxpemVkU1JGKGZjaW5mbywgMCk7CisKKwkvKiBPcGVuIHRoZSByZWxhdGlv biAqLworCWluZGV4UmVsID0gaW5kZXhfb3BlbihpbmRleFJlbGlkLCBBY2Nlc3NTaGFyZUxvY2sp OworCisJaWYgKCFJU19JTkRFWChpbmRleFJlbCkgfHwgIUlTX0dJTihpbmRleFJlbCkpCisJCWVy ZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9XUk9OR19PQkpFQ1RfVFlQRSksCisJ CQkJIGVycm1zZygiXCIlc1wiIGlzIG5vdCBhICVzIGluZGV4IiwKKwkJCQkJCVJlbGF0aW9uR2V0 UmVsYXRpb25OYW1lKGluZGV4UmVsKSwgIkdJTiIpKSk7CisKKwlwYWdlID0gZ2V0X3BhZ2VfZnJv bV9yYXcocmF3X3BhZ2UpOworCisJaWYgKFBhZ2VJc05ldyhwYWdlKSkKKwl7CisJCWluZGV4X2Ns b3NlKGluZGV4UmVsLCBBY2Nlc3NTaGFyZUxvY2spOworCQlQR19SRVRVUk5fTlVMTCgpOworCX0K KworCWlmIChQYWdlR2V0U3BlY2lhbFNpemUocGFnZSkgIT0gTUFYQUxJR04oc2l6ZW9mKEdpblBh Z2VPcGFxdWVEYXRhKSkpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9J TlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJCWVycm1zZygiaW5wdXQgcGFnZSBpcyBub3Qg YSB2YWxpZCBHSU4gZW50cnkgdHJlZSBwYWdlIiksCisJCQkJCWVycmRldGFpbCgiRXhwZWN0ZWQg c3BlY2lhbCBzaXplICVkLCBnb3QgJWQuIiwKKwkJCQkJCQkoaW50KSBNQVhBTElHTihzaXplb2Yo R2luUGFnZU9wYXF1ZURhdGEpKSwKKwkJCQkJCQkoaW50KSBQYWdlR2V0U3BlY2lhbFNpemUocGFn ZSkpKSk7CisKKwlvcGFxID0gR2luUGFnZUdldE9wYXF1ZShwYWdlKTsKKworCisJLyogd2Ugb25s eSBzdXBwb3J0IGVudHJ5IHRyZWUgaW4gdGhpcyBmdW5jdGlvbiwgY2hlY2sgdGhhdCAqLworCWlm IChvcGFxLT5mbGFncyAmIEdJTl9NRVRBKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2Rl KEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCQllcnJtc2coImdpbl9lbnRy eXBhZ2VfaXRlbXMgaXMgdW5zdXBwb3J0ZWQgZm9yIG1ldGFwYWdlIikpKTsKKwkKKworCWlmIChv cGFxLT5mbGFncyAmIChHSU5fTElTVCB8IEdJTl9MSVNUX0ZVTExST1cpKQorCQllcmVwb3J0KEVS Uk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJ CQllcnJtc2coImdpbl9lbnRyeXBhZ2VfaXRlbXMgaXMgdW5zdXBwb3J0ZWQgZm9yIGZhc3QgbGlz dCBwYWdlcyIpKSk7CisJCisJCisJaWYgKG9wYXEtPmZsYWdzICYgR0lOX0RBVEEpCisJCWVyZXBv cnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSks CisJCQkJCWVycm1zZygiaW5wdXQgcGFnZSBpcyBub3QgYSBHSU4gZW50cnkgdHJlZSBwYWdlIiks CisJCQkJCWVycmhpbnQoIlRoaXMgYXBwZWFycyB0byBiZSBhIEdJTiBwb3N0aW5nIHRyZWUgcGFn ZS4gUGxlYXNlIHVzZSBnaW5fZGF0YXBhZ2VfaXRlbXMiKSkpOworCQkJCQkKKwltYXhvZmYgPSBQ YWdlR2V0TWF4T2Zmc2V0TnVtYmVyKHBhZ2UpOworCisJdHVwZGVzYyA9IFJlbGF0aW9uR2V0RGVz Y3IoaW5kZXhSZWwpOworCW9uZUNvbCA9IHR1cGRlc2MtPm5hdHRzID09IDE7CisKKwlmb3IgKG9m ZnNldCA9IEZpcnN0T2Zmc2V0TnVtYmVyOworCQkgb2Zmc2V0IDw9IG1heG9mZjsKKwkJIG9mZnNl dCA9IE9mZnNldE51bWJlck5leHQob2Zmc2V0KSkKKwl7CisJCU9mZnNldE51bWJlcglpbmRBdHQ7 CisJCURhdHVtCQl2YWx1ZXNbNF07CisJCWJvb2wJCW51bGxzWzRdOworCQlpbnQJCQluZGVjb2Rl ZCwgaTsKKwkJRGF0dW0JICAgKnRpZHNfZGF0dW07CisJCUl0ZW1Qb2ludGVyIGl0ZW1zX29yaWc7 CisJCWJvb2wJCWZyZWVfaXRlbXNfb3JpZzsKKwkJRGF0dW0JCWF0dHJWYWw7CisJCU9pZAkJCWZv dXRvaWQ7CisJCWJvb2wJCXR5cGlzdmFybGVuYTsKKwkJT2lkCQkJdHlwb2lkOworCQljaGFyKgkJ dmFsdWU7CisJCWJvb2wJCW5xOworCQljaGFyKgkJdG1wOworCQlib29sCQlpc251bGw7CisJCUlu ZGV4VHVwbGUJaWR4dHVwbGU7CisJCUl0ZW1JZAkJaWlkID0gUGFnZUdldEl0ZW1JZChwYWdlLCBv ZmZzZXQpOworCisJCWlmICghSXRlbUlkSXNWYWxpZChpaWQpKQorCQkJZWxvZyhFUlJPUiwgImlu dmFsaWQgSXRlbUlkIik7CisKKwkJaWR4dHVwbGUgPSAoSW5kZXhUdXBsZSkgUGFnZUdldEl0ZW0o cGFnZSwgaWlkKTsKKworCQltZW1zZXQobnVsbHMsIDAsIHNpemVvZihudWxscykpOworCQkKKwkJ dmFsdWVzWzBdID0gVUludDE2R2V0RGF0dW0ob2Zmc2V0KTsKKworCQlpZiAob25lQ29sKQorCQl7 CisJCQlpbmRBdHQgPSBGaXJzdE9mZnNldE51bWJlcjsKKwkJCS8qIGhlcmUgd2UgY2FuIHNhZmVs eSByZXVzZSBwZ19jbGFzcydzIHR1cGxlIGRlc2NyaXB0b3IuICovCisJCQlhdHRyVmFsID0gaW5k ZXhfZ2V0YXR0cihpZHh0dXBsZSwgRmlyc3RPZmZzZXROdW1iZXIsIHR1cGRlc2MsCisJCQkJCQkJ JmlzbnVsbCk7CisJCQlpZiAoaXNudWxsKQorCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQkoZXJy Y29kZShFUlJDT0RFX0lOREVYX0NPUlJVUFRFRCksCisJCQkJCQkJZXJybXNnKCJpbnZhbGlkIGdp biBlbnRyeSBwYWdlIHR1cGxlIGF0IG9mZnNldCAlZCIsIG9mZnNldCkpKTsKKwkJfQorCQllbHNl CisJCXsKKwkJCVR1cGxlRGVzYwkJCXRtcFR1cGRlc2M7CisJCQlEYXR1bQkJCQlyZXM7CisJCQlG b3JtX3BnX2F0dHJpYnV0ZQlhdHRyOworCisJCQkvKiBvcmlnIHR1cGxlIHJldXNlIGlzIHNhZmUg Ki8KKworCQkJcmVzID0gaW5kZXhfZ2V0YXR0cihpZHh0dXBsZSwgRmlyc3RPZmZzZXROdW1iZXIs IHR1cGRlc2MsCisJCQkJCQkJCSZpc251bGwpOworCisJCQkvKiB3ZSBkbyBub3QgZXhwZWN0IG51 bGwgZm9yIGZpcnN0IGF0dHIgaW4gbXVsdGktY29sdW1uIEdJTiAqLworCQkJaWYgKGlzbnVsbCkK KwkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTkRFWF9DT1JSVVBU RUQpLAorCQkJCQkJCWVycm1zZygiaW52YWxpZCBnaW4gZW50cnkgcGFnZSB0dXBsZSBhdCBvZmZz ZXQgJWQiLCBvZmZzZXQpKSk7CisKKwkJCWluZEF0dCA9IERhdHVtR2V0VUludDE2KHJlcyk7CisK KwkJCWF0dHIgPSBUdXBsZURlc2NBdHRyKHR1cGRlc2MsIGluZEF0dCAtIDEpOworCisgCQkJdG1w VHVwZGVzYyA9IENyZWF0ZVRlbXBsYXRlVHVwbGVEZXNjKDIpOworCisJCQlUdXBsZURlc2NJbml0 RW50cnkodG1wVHVwZGVzYywgKEF0dHJOdW1iZXIpIDEsIE5VTEwsCisJCQkJCQkJICAgSU5UMk9J RCwgLTEsIDApOworCQkJVHVwbGVEZXNjSW5pdEVudHJ5KHRtcFR1cGRlc2MsIChBdHRyTnVtYmVy KSAyLCBOVUxMLAorCQkJCQkJCSAgIGF0dHItPmF0dHR5cGlkLAorCQkJCQkJCSAgIGF0dHItPmF0 dHR5cG1vZCwKKwkJCQkJCQkgICBhdHRyLT5hdHRuZGltcyk7CisJCQlUdXBsZURlc2NJbml0RW50 cnlDb2xsYXRpb24odG1wVHVwZGVzYywgKEF0dHJOdW1iZXIpIDIsCisJCQkJCQkJCQkJYXR0ci0+ YXR0Y29sbGF0aW9uKTsKKworCQkJYXR0clZhbCA9IGluZGV4X2dldGF0dHIoaWR4dHVwbGUsIE9m ZnNldE51bWJlck5leHQoRmlyc3RPZmZzZXROdW1iZXIpLAorCQkJCQl0bXBUdXBkZXNjLAorCQkJ CQkmaXNudWxsKTsKKworCQkJRnJlZVR1cGxlRGVzYyh0bXBUdXBkZXNjKTsKKwkJfQorCisJCWlu aXRTdHJpbmdJbmZvKCZidWYpOworCQlhcHBlbmRTdHJpbmdJbmZvKCZidWYsICIlcz0iLCBxdW90 ZV9pZGVudGlmaWVyKFR1cGxlRGVzY0F0dHIodHVwZGVzYywgaW5kQXR0IC0gMSktPmF0dG5hbWUu ZGF0YSkpOworCisJCWlmICghaXNudWxsKSB7CisJCQkvKiBNb3N0IG9mIHRoaXMgaXMgY29waWVk IGZyb20gcmVjb3JkX291dCgpLiAqLworCQkJdHlwb2lkID0gVHVwbGVEZXNjQXR0cih0dXBkZXNj LCBpbmRBdHQgLSAxKS0+YXR0dHlwaWQ7CisJCQlnZXRUeXBlT3V0cHV0SW5mbyh0eXBvaWQsICZm b3V0b2lkLCAmdHlwaXN2YXJsZW5hKTsKKwkJCXZhbHVlID0gT2lkT3V0cHV0RnVuY3Rpb25DYWxs KGZvdXRvaWQsIGF0dHJWYWwpOworCQkJCisKKwkJCS8qIENoZWNrIHdoZXRoZXIgd2UgbmVlZCBk b3VibGUgcXVvdGVzIGZvciB0aGlzIHZhbHVlICovCisJCQlucSA9ICh2YWx1ZVswXSA9PSAnXDAn KTsJLyogZm9yY2UgcXVvdGVzIGZvciBlbXB0eSBzdHJpbmcgKi8KKwkJCWZvciAodG1wID0gdmFs dWU7ICp0bXA7IHRtcCsrKQorCQkJeworCQkJCWNoYXIJCWNoID0gKnRtcDsKKworCQkJCWlmIChj aCA9PSAnIicgfHwgY2ggPT0gJ1xcJyB8fAorCQkJCQljaCA9PSAnKCcgfHwgY2ggPT0gJyknIHx8 IGNoID09ICcsJyB8fAorCQkJCQlpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSBjaCkpCisJCQkJewor CQkJCQlucSA9IHRydWU7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKworCQkJLyogQW5kIGVt aXQgdGhlIHN0cmluZyAqLworCQkJaWYgKG5xKQorCQkJCWFwcGVuZFN0cmluZ0luZm9DaGFyTWFj cm8oJmJ1ZiwgJyInKTsKKwkJCWZvciAodG1wID0gdmFsdWU7ICp0bXA7IHRtcCsrKQorCQkJewor CQkJCWNoYXIJCWNoID0gKnRtcDsKKworCQkJCWlmIChjaCA9PSAnIicgfHwgY2ggPT0gJ1xcJykK KwkJCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXJNYWNybygmYnVmLCBjaCk7CisJCQkJYXBwZW5kU3Ry aW5nSW5mb0NoYXJNYWNybygmYnVmLCBjaCk7CisJCQl9CisJCQlpZiAobnEpCisJCQkJYXBwZW5k U3RyaW5nSW5mb0NoYXJNYWNybygmYnVmLCAnIicpOworCQl9CisJCWVsc2UKKwkJeworCQkJYXBw ZW5kU3RyaW5nSW5mbygmYnVmLCAiTlVMTCIpOworCQl9CisJCisKKwkJdmFsdWVzWzNdID0gQ1N0 cmluZ0dldFRleHREYXR1bShidWYuZGF0YSk7CisJCXJlc2V0U3RyaW5nSW5mbygmYnVmKTsKKwor CQlpZiAoR2luSXNQb3N0aW5nVHJlZShpZHh0dXBsZSkpCisJCXsKKwkJCXZhbHVlc1sxXSA9IEl0 ZW1Qb2ludGVyR2V0RGF0dW0oJmlkeHR1cGxlLT50X3RpZCk7CisJCQludWxsc1syXSA9IHRydWU7 CisJCX0KKwkJZWxzZQorCQl7CisJCQl2YWx1ZXNbMV0gPSBJdGVtUG9pbnRlckdldERhdHVtKCZp ZHh0dXBsZS0+dF90aWQpOworCQkJLyogR2V0IGxpc3Qgb2YgaXRlbSBwb2ludGVycyBmcm9tIHRo ZSB0dXBsZS4gKi8KKwkJCWlmIChHaW5JdHVwSXNDb21wcmVzc2VkKGlkeHR1cGxlKSkKKwkJCXsK KwkJCQlpdGVtc19vcmlnID0gZ2luUG9zdGluZ0xpc3REZWNvZGUoKEdpblBvc3RpbmdMaXN0ICop IEdpbkdldFBvc3RpbmcoaWR4dHVwbGUpLCAmbmRlY29kZWQpOworCQkJCWZyZWVfaXRlbXNfb3Jp ZyA9IHRydWU7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJaXRlbXNfb3JpZyA9IChJdGVtUG9p bnRlcikgR2luR2V0UG9zdGluZyhpZHh0dXBsZSk7CisJCQkJbmRlY29kZWQgPSBHaW5HZXROUG9z dGluZyhpZHh0dXBsZSk7CisJCQkJZnJlZV9pdGVtc19vcmlnID0gZmFsc2U7CisJCQl9CisKKwkJ CXRpZHNfZGF0dW0gPSAoRGF0dW0gKikgcGFsbG9jKG5kZWNvZGVkICogc2l6ZW9mKERhdHVtKSk7 CisJCQlmb3IgKGkgPSAwOyBpIDwgbmRlY29kZWQ7IGkrKykKKwkJCQl0aWRzX2RhdHVtW2ldID0g SXRlbVBvaW50ZXJHZXREYXR1bSgmaXRlbXNfb3JpZ1tpXSk7CisJCQl2YWx1ZXNbMl0gPSBQb2lu dGVyR2V0RGF0dW0oY29uc3RydWN0X2FycmF5X2J1aWx0aW4odGlkc19kYXR1bSwgbmRlY29kZWQs IFRJRE9JRCkpOworCisJCQlwZnJlZSh0aWRzX2RhdHVtKTsKKworCQkJaWYgKGZyZWVfaXRlbXNf b3JpZykKKwkJCQlwZnJlZShpdGVtc19vcmlnKTsKKwkJfQorCisJCS8qIEJ1aWxkIGFuZCByZXR1 cm4gdGhlIHJlc3VsdCB0dXBsZS4gKi8KKwkJdHVwbGVzdG9yZV9wdXR2YWx1ZXMocnNpbmZvLT5z ZXRSZXN1bHQsIHJzaW5mby0+c2V0RGVzYywgdmFsdWVzLCBudWxscyk7CisJfQorCisJcmVsYXRp b25fY2xvc2UoaW5kZXhSZWwsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwlyZXR1cm4gKERhdHVtKSAw OworfQorCisKK0RhdHVtCitnaW5fZGF0YXBhZ2VfaXRlbXMoUEdfRlVOQ1RJT05fQVJHUykKK3sK KwlieXRlYQkgICAqcmF3X3BhZ2UgPSBQR19HRVRBUkdfQllURUFfUCgwKTsKKwlSZXR1cm5TZXRJ bmZvICpyc2luZm8gPSAoUmV0dXJuU2V0SW5mbyAqKSBmY2luZm8tPnJlc3VsdGluZm87CisJT2Zm c2V0TnVtYmVyIG1heG9mZiwgb2Zmc2V0OworCVBhZ2UJCXBhZ2U7CisJR2luUGFnZU9wYXF1ZSBv cGFxOworCisKKwlpZiAoIXN1cGVydXNlcigpKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJj b2RlKEVSUkNPREVfSU5TVUZGSUNJRU5UX1BSSVZJTEVHRSksCisJCQkJIGVycm1zZygibXVzdCBi ZSBzdXBlcnVzZXIgdG8gdXNlIHJhdyBwYWdlIGZ1bmN0aW9ucyIpKSk7CisKKworCUluaXRNYXRl cmlhbGl6ZWRTUkYoZmNpbmZvLCAwKTsKKwlwYWdlID0gZ2V0X3BhZ2VfZnJvbV9yYXcocmF3X3Bh Z2UpOworCisJaWYgKFBhZ2VJc05ldyhwYWdlKSkKKwl7CisJCVBHX1JFVFVSTl9OVUxMKCk7CisJ fQorCisJaWYgKFBhZ2VHZXRTcGVjaWFsU2l6ZShwYWdlKSAhPSBNQVhBTElHTihzaXplb2YoR2lu UGFnZU9wYXF1ZURhdGEpKSkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RF X0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJZXJybXNnKCJpbnB1dCBwYWdlIGlzIG5v dCBhIHZhbGlkIEdJTiBkYXRhIGxlYWYgcGFnZSIpLAorCQkJCQllcnJkZXRhaWwoIkV4cGVjdGVk IHNwZWNpYWwgc2l6ZSAlZCwgZ290ICVkLiIsCisJCQkJCQkJKGludCkgTUFYQUxJR04oc2l6ZW9m KEdpblBhZ2VPcGFxdWVEYXRhKSksCisJCQkJCQkJKGludCkgUGFnZUdldFNwZWNpYWxTaXplKHBh Z2UpKSkpOworCisJb3BhcSA9IEdpblBhZ2VHZXRPcGFxdWUocGFnZSk7CisKKworCS8qIHdlIG9u bHkgc3VwcG9ydCBwb3N0aW5nIHRyZWUgbm9uLWxlYWYgaW4gdGhpcyBmdW5jdGlvbiwgY2hlY2sg dGhhdCAqLworCisJaWYgKG9wYXEtPmZsYWdzICYgKEdJTl9NRVRBKSkKKwkJZXJlcG9ydChFUlJP UiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJ ZXJybXNnKCJnaW5fZGF0YXBhZ2VfaXRlbXMgaXMgdW5zdXBwb3J0ZWQgZm9yIG1ldGFwYWdlIikp KTsKKworCWlmIChvcGFxLT5mbGFncyAmIChHSU5fTElTVCB8IEdJTl9MSVNUX0ZVTExST1cpKQor CQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJf VkFMVUUpLAorCQkJCQllcnJtc2coImdpbl9kYXRhcGFnZV9pdGVtcyBpcyB1bnN1cHBvcnRlZCBm b3IgR0lOIGZhc3QgdXBkYXRlIGxpc3QiKSkpOworCQorCWlmICghKG9wYXEtPmZsYWdzICYgR0lO X0RBVEEpKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9Q QVJBTUVURVJfVkFMVUUpLAorCQkJCQllcnJtc2coImlucHV0IHBhZ2UgaXMgbm90IGEgR0lOIGRh dGEgdHJlZSBwYWdlIikpKTsKKworCWlmIChvcGFxLT5mbGFncyAmIEdJTl9MRUFGKQorCQllcmVw b3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUp LAorCQkJCQllcnJtc2coImlucHV0IHBhZ2UgaXMgYSBHSU4gZGF0YSBsZWFmIHRyZWUgcGFnZSIp KSk7CisKKwltYXhvZmYgPSBHaW5QYWdlR2V0T3BhcXVlKHBhZ2UpLT5tYXhvZmY7CisKKwlmb3Ig KG9mZnNldCA9IEZpcnN0T2Zmc2V0TnVtYmVyOworCQkgb2Zmc2V0IDw9IG1heG9mZjsKKwkJIG9m ZnNldCA9IE9mZnNldE51bWJlck5leHQob2Zmc2V0KSkKKwl7CisJCURhdHVtCQl2YWx1ZXNbM107 CisJCWJvb2wJCW51bGxzWzNdOworCQlQb3N0aW5nSXRlbSogaXRlbSA9IEdpbkRhdGFQYWdlR2V0 UG9zdGluZ0l0ZW0ocGFnZSwgb2Zmc2V0KTsKKworCQltZW1zZXQobnVsbHMsIDAsIHNpemVvZihu dWxscykpOworCQkKKwkJCisJCXZhbHVlc1swXSA9IFVJbnQxNkdldERhdHVtKG9mZnNldCk7CisK KwkJdmFsdWVzWzFdID0gVUludDMyR2V0RGF0dW0oQmxvY2tJZEdldEJsb2NrTnVtYmVyKCZpdGVt LT5jaGlsZF9ibGtubykpOworCQl2YWx1ZXNbMl0gPSBJdGVtUG9pbnRlckdldERhdHVtKCZpdGVt LT5rZXkpOworCisJCS8qIEJ1aWxkIGFuZCByZXR1cm4gdGhlIHJlc3VsdCB0dXBsZS4gKi8KKwkJ dHVwbGVzdG9yZV9wdXR2YWx1ZXMocnNpbmZvLT5zZXRSZXN1bHQsIHJzaW5mby0+c2V0RGVzYywg dmFsdWVzLCBudWxscyk7CisJfQorCisJcmV0dXJuIChEYXR1bSkgMDsKK30KKwogRGF0dW0KIGdp bl9sZWFmcGFnZV9pdGVtcyhQR19GVU5DVElPTl9BUkdTKQogewpkaWZmIC0tZ2l0IGEvY29udHJp Yi9wYWdlaW5zcGVjdC9wYWdlaW5zcGVjdC0tMS4xMy0tMS4xNC5zcWwgYi9jb250cmliL3BhZ2Vp bnNwZWN0L3BhZ2VpbnNwZWN0LS0xLjEzLS0xLjE0LnNxbApuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwMDAwMC4uNzJmNWU5YmJlYTcKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmli L3BhZ2VpbnNwZWN0L3BhZ2VpbnNwZWN0LS0xLjEzLS0xLjE0LnNxbApAQCAtMCwwICsxLDI4IEBA CisvKiBjb250cmliL3BhZ2VpbnNwZWN0L3BhZ2VpbnNwZWN0LS0xLjEzLS0xLjE0LnNxbCAqLwor CistLSBjb21wbGFpbiBpZiBzY3JpcHQgaXMgc291cmNlZCBpbiBwc3FsLCByYXRoZXIgdGhhbiB2 aWEgQUxURVIgRVhURU5TSU9OCitcZWNobyBVc2UgIkFMVEVSIEVYVEVOU0lPTiBwYWdlaW5zcGVj dCBVUERBVEUgVE8gJzEuMTQnIiB0byBsb2FkIHRoaXMgZmlsZS4gXHF1aXQKKworLS0KKy0tIGdp bl9lbnRyeXBhZ2VfaXRlbXMoKQorLS0KK0NSRUFURSBGVU5DVElPTiBnaW5fZW50cnlwYWdlX2l0 ZW1zKElOIHBhZ2UgYnl0ZWEsIElOIHJlbG9pZCBPSUQsCisgICAgT1VUIGl0ZW1vZmZzZXQgc21h bGxpbnQsCisgICAgT1VUIGRvd25saW5rIHRpZCwKKyAgICBPVVQgdGlkcyB0aWRbXSwKKyAgICBP VVQga2V5cyB0ZXh0KQorUkVUVVJOUyBTRVRPRiByZWNvcmQKK0FTICdNT0RVTEVfUEFUSE5BTUUn LCAnZ2luX2VudHJ5cGFnZV9pdGVtcycKK0xBTkdVQUdFIEMgU1RSSUNUIFBBUkFMTEVMIFNBRkU7 CisKKy0tCistLSBnaW5fZGF0YXBhZ2VfaXRlbXMoKQorLS0KK0NSRUFURSBGVU5DVElPTiBnaW5f ZGF0YXBhZ2VfaXRlbXMoSU4gcGFnZSBieXRlYSwKKyAgICBPVVQgaXRlbW9mZnNldCBzbWFsbGlu dCwKKyAgICBPVVQgZG93bmxpbmsgaW50LAorICAgIE9VVCBpdGVtX3RpZCB0aWQpCitSRVRVUk5T IFNFVE9GIHJlY29yZAorQVMgJ01PRFVMRV9QQVRITkFNRScsICdnaW5fZGF0YXBhZ2VfaXRlbXMn CitMQU5HVUFHRSBDIFNUUklDVCBQQVJBTExFTCBTQUZFOworCmRpZmYgLS1naXQgYS9jb250cmli L3BhZ2VpbnNwZWN0L3BhZ2VpbnNwZWN0LmNvbnRyb2wgYi9jb250cmliL3BhZ2VpbnNwZWN0L3Bh Z2VpbnNwZWN0LmNvbnRyb2wKaW5kZXggY2ZjODdmZWFjMDMuLmFlZTNmNTk4YTllIDEwMDY0NAot LS0gYS9jb250cmliL3BhZ2VpbnNwZWN0L3BhZ2VpbnNwZWN0LmNvbnRyb2wKKysrIGIvY29udHJp Yi9wYWdlaW5zcGVjdC9wYWdlaW5zcGVjdC5jb250cm9sCkBAIC0xLDUgKzEsNSBAQAogIyBwYWdl aW5zcGVjdCBleHRlbnNpb24KIGNvbW1lbnQgPSAnaW5zcGVjdCB0aGUgY29udGVudHMgb2YgZGF0 YWJhc2UgcGFnZXMgYXQgYSBsb3cgbGV2ZWwnCi1kZWZhdWx0X3ZlcnNpb24gPSAnMS4xMycKK2Rl ZmF1bHRfdmVyc2lvbiA9ICcxLjE0JwogbW9kdWxlX3BhdGhuYW1lID0gJyRsaWJkaXIvcGFnZWlu c3BlY3QnCiByZWxvY2F0YWJsZSA9IHRydWUKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGFnZWluc3Bl Y3Qvc3FsL2dpbi5zcWwgYi9jb250cmliL3BhZ2VpbnNwZWN0L3NxbC9naW4uc3FsCmluZGV4IGI1 NzQ2NmQ3ZWJmLi4zZTI3MzhjNzFiMCAxMDA2NDQKLS0tIGEvY29udHJpYi9wYWdlaW5zcGVjdC9z cWwvZ2luLnNxbAorKysgYi9jb250cmliL3BhZ2VpbnNwZWN0L3NxbC9naW4uc3FsCkBAIC0xLDYg KzEsOCBAQAotQ1JFQVRFIFRBQkxFIHRlc3QxICh4IGludCwgeSBpbnRbXSk7Ci1JTlNFUlQgSU5U TyB0ZXN0MSBWQUxVRVMgKDEsIEFSUkFZWzExLCAxMTFdKTsKK0NSRUFURSBUQUJMRSB0ZXN0MSAo eCBpbnQsIHkgaW50W10sIHogdGV4dFtdKTsKK0lOU0VSVCBJTlRPIHRlc3QxIFZBTFVFUyAoMSwg QVJSQVlbMTEsIDExMV0sIEFSUkFZWydhJywgJ2InLCAnYyddKTsKIENSRUFURSBJTkRFWCB0ZXN0 MV95X2lkeCBPTiB0ZXN0MSBVU0lORyBnaW4gKHkpIFdJVEggKGZhc3R1cGRhdGUgPSBvZmYpOwor Q1JFQVRFIElOREVYIHRlc3QyX3lfel9pZHggT04gdGVzdDEgVVNJTkcgZ2luICh5LCB6KSBXSVRI IChmYXN0dXBkYXRlID0gb2ZmKTsKK0NSRUFURSBJTkRFWCB0ZXN0M195X3pfaWR4IE9OIHRlc3Qx IFVTSU5HIGdpbiAoeSwgeikgV0lUSCAoZmFzdHVwZGF0ZSA9IG9uKTsKIAogXHgKIApAQCAtMTEs NiArMTMsMTAgQEAgU0VMRUNUICogRlJPTSBnaW5fcGFnZV9vcGFxdWVfaW5mbyhnZXRfcmF3X3Bh Z2UoJ3Rlc3QxX3lfaWR4JywgMSkpOwogCiBTRUxFQ1QgKiBGUk9NIGdpbl9sZWFmcGFnZV9pdGVt cyhnZXRfcmF3X3BhZ2UoJ3Rlc3QxX3lfaWR4JywgMSkpOwogCitTRUxFQ1QgKiBGUk9NIGdpbl9l bnRyeXBhZ2VfaXRlbXMoZ2V0X3Jhd19wYWdlKCd0ZXN0MV95X2lkeCcsIDEpLCAndGVzdDFfeV9p ZHgnOjpyZWdjbGFzcyk7CisKK1NFTEVDVCAqIEZST00gZ2luX2VudHJ5cGFnZV9pdGVtcyhnZXRf cmF3X3BhZ2UoJ3Rlc3QyX3lfel9pZHgnLCAxKSwgJ3Rlc3QyX3lfel9pZHgnOjpyZWdjbGFzcyk7 CisKIElOU0VSVCBJTlRPIHRlc3QxIFNFTEVDVCB4LCBBUlJBWVsxLDEwXSBGUk9NIGdlbmVyYXRl X3NlcmllcygyLDEwMDAwKSB4OwogCiBTRUxFQ1QgQ09VTlQoKikgPiAwCkBAIC0xOCw2ICsyNCwx OCBAQCBGUk9NIGdpbl9sZWFmcGFnZV9pdGVtcyhnZXRfcmF3X3BhZ2UoJ3Rlc3QxX3lfaWR4JywK ICAgICAgICAgICAgICAgICAgICAgICAgIChwZ19yZWxhdGlvbl9zaXplKCd0ZXN0MV95X2lkeCcp IC8KICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50X3NldHRpbmcoJ2Jsb2NrX3NpemUn KTo6YmlnaW50KTo6aW50IC0gMSkpOwogCistLSBOb3cgdGVzdCBwb3N0aW5nIHRyZWUgbm9uLWxl YWYgcGFnZS4KKy0tIFRoaXMgcmVxdWlyZXMgaW5zZXJ0aW5nIG1hbnkgdHVwbGVzIG9uIGEgc2lu Z2xlIGxlYWYgcGFnZSB0byB0cmlnZ2VyIHBhZ2Ugc3BsaXQuCisKK0NSRUFURSBUQUJMRSB0ZXN0 X2RhdGFfcGFnZShpIElOVFtdKTsKK0NSRUFURSBJTkRFWCB0ZXN0X2RhdGFfcGFnZV9pX2lkeCBP TiB0ZXN0X2RhdGFfcGFnZSBVU0lORyBnaW4oaSkgV0lUSCAoZmFzdHVwZGF0ZSA9IG9mZik7CisK K0lOU0VSVCBJTlRPIHRlc3RfZGF0YV9wYWdlIFNFTEVDVCBBUlJBWVsxXSBGUk9NIGdlbmVyYXRl X3NlcmllcygxLCAxMDAwMCk7CisKKy0tIEZvciB0aGlzIGluZGV4LCBibG9jayAwIGlzIG1ldGFw YWdlLCBibG9jayAxIGlzIGVudHJ5IHRyZWUsIGJsb2NrIDIgaXMgCistLSBwb3N0aW5nIHRyZWUg bm9uLWxlYWYgcGFnZSBhbmQgYmxvY2sgMyAmIDQgYXJlIGNvbXByZXNzZWQgZGF0YSBsZWFmIHBh Z2VzLgorU0VMRUNUICogRlJPTSBnaW5fZGF0YXBhZ2VfaXRlbXMoZ2V0X3Jhd19wYWdlKCd0ZXN0 X2RhdGFfcGFnZV9pX2lkeCcsIDIpKTsKKwogLS0gRmFpbHVyZSB3aXRoIHZhcmlvdXMgbW9kZXMu CiAtLSBTdXBwcmVzcyB0aGUgREVUQUlMIG1lc3NhZ2UsIHRvIGFsbG93IHRoZSB0ZXN0cyB0byB3 b3JrIGFjcm9zcyB2YXJpb3VzCiAtLSBwYWdlIHNpemVzIGFuZCBhcmNoaXRlY3R1cmVzLgpAQCAt MzIsOSArNTAsMjEgQEAgU0VMRUNUICogRlJPTSBnaW5fcGFnZV9vcGFxdWVfaW5mbyhnZXRfcmF3 X3BhZ2UoJ3Rlc3QxJywgMCkpOwogU0VMRUNUICogRlJPTSBnaW5fbGVhZnBhZ2VfaXRlbXMoZ2V0 X3Jhd19wYWdlKCd0ZXN0MScsIDApKTsKIFxzZXQgVkVSQk9TSVRZIGRlZmF1bHQKIAorLS0gUmVq ZWN0IHVuc3VwcG9ydGVkIHBhZ2UgdHlwZXMgaW4gZ2luX2VudHJ5cGFnZV9pdGVtcy4KK1NFTEVD VCAqIEZST00gZ2luX2VudHJ5cGFnZV9pdGVtcyhnZXRfcmF3X3BhZ2UoJ3Rlc3QyX3lfel9pZHgn LCAwKSwgJ3Rlc3QyX3lfel9pZHgnOjpyZWdjbGFzcyk7CistLSBDaGVjayB0aGUgZXJyb3IgbWVz c2FnZSBmb3IgdGhlIGludGVybmFsIHBvc3RpbmcgdHJlZSBwYWdlLgorU0VMRUNUICogRlJPTSBn aW5fZW50cnlwYWdlX2l0ZW1zKGdldF9yYXdfcGFnZSgndGVzdF9kYXRhX3BhZ2VfaV9pZHgnLCAy KSwgJ3Rlc3RfZGF0YV9wYWdlX2lfaWR4Jzo6cmVnY2xhc3MpOworLS0gaW5zZXJ0IG5ldyByb3cg dG8gdHJpZ2dlciBuZXcgKGZhc3QtbGlzdCkgcGFnZSBhbGxvY2F0aW9uLgorSU5TRVJUIElOVE8g dGVzdDEgVkFMVUVTICgxLCBBUlJBWVsxMSwgMTExXSwgQVJSQVlbJ2EnLCAnYicsICdjJ10pOwor LS0gZG91YmxlIGNoZWNrIHRoYXQgdGhlIG5ldyBwYWdlIGlzIGZhc3QtbGlzdC4KK1NFTEVDVCAq IEZST00gZ2luX3BhZ2Vfb3BhcXVlX2luZm8oZ2V0X3Jhd19wYWdlKCd0ZXN0M195X3pfaWR4Jywg MikpOworLS0gcmVqZWN0IGZhc3QtbGlzdCBwYWdlcy4KK1NFTEVDVCAqIEZST00gZ2luX2VudHJ5 cGFnZV9pdGVtcyhnZXRfcmF3X3BhZ2UoJ3Rlc3QzX3lfel9pZHgnLCAzKSwgJ3Rlc3QzX3lfel9p ZHgnOjpyZWdjbGFzcyk7CisKIC0tIFRlc3RzIHdpdGggYWxsLXplcm8gcGFnZXMuCiBTSE9XIGJs b2NrX3NpemUgXGdzZXQKIFNFTEVDVCBnaW5fbGVhZnBhZ2VfaXRlbXMoZGVjb2RlKHJlcGVhdCgn MDAnLCA6YmxvY2tfc2l6ZSksICdoZXgnKSk7CitTRUxFQ1QgZ2luX2RhdGFwYWdlX2l0ZW1zKGRl Y29kZShyZXBlYXQoJzAwJywgOmJsb2NrX3NpemUpLCAnaGV4JykpOwogU0VMRUNUIGdpbl9tZXRh cGFnZV9pbmZvKGRlY29kZShyZXBlYXQoJzAwJywgOmJsb2NrX3NpemUpLCAnaGV4JykpOwogU0VM RUNUIGdpbl9wYWdlX29wYXF1ZV9pbmZvKGRlY29kZShyZXBlYXQoJzAwJywgOmJsb2NrX3NpemUp LCAnaGV4JykpOwogCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvcGFnZWluc3BlY3Quc2dtbCBi L2RvYy9zcmMvc2dtbC9wYWdlaW5zcGVjdC5zZ21sCmluZGV4IDNhMTEzNDM5ZTFkLi40YzFjNzE2 MmI1NCAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL3BhZ2VpbnNwZWN0LnNnbWwKKysrIGIvZG9j L3NyYy9zZ21sL3BhZ2VpbnNwZWN0LnNnbWwKQEAgLTcxOCw2ICs3MTgsNjAgQEAgdGVzdD0jIFNF TEVDVCBmaXJzdF90aWQsIG5ieXRlcywgdGlkc1swOjVdIEFTIHNvbWVfdGlkcwogICAgICA8L3Bh cmE+CiAgICAgPC9saXN0aXRlbT4KICAgIDwvdmFybGlzdGVudHJ5PgorCisgICA8dmFybGlzdGVu dHJ5PgorICAgIDx0ZXJtPgorICAgICA8ZnVuY3Rpb24+Z2luX2VudHJ5cGFnZV9pdGVtcyhwYWdl IGJ5dGVhLCByZWxvaWQgb2lkKSByZXR1cm5zIHNldG9mIHJlY29yZDwvZnVuY3Rpb24+CisgICAg IDxpbmRleHRlcm0+CisgICAgICA8cHJpbWFyeT5naW5fZW50cnlwYWdlX2l0ZW1zPC9wcmltYXJ5 PgorICAgICA8L2luZGV4dGVybT4KKyAgICA8L3Rlcm0+CisKKyAgICA8bGlzdGl0ZW0+CisgICAg IDxwYXJhPgorICAgICAgPGZ1bmN0aW9uPmdpbl9lbnRyeXBhZ2VfaXRlbXM8L2Z1bmN0aW9uPiBy ZXR1cm5zIGluZm9ybWF0aW9uIGFib3V0CisgICAgICB0aGUgZGF0YSBzdG9yZWQgaW4gYSBlbnRy eSB0cmVlIDxhY3JvbnltPkdJTjwvYWNyb255bT4gcGFnZS4gIEZvciBleGFtcGxlOgorPHNjcmVl bj4KK3Rlc3Q9IyBzZWxlY3QgKiBmcm9tIGdpbl9lbnRyeXBhZ2VfaXRlbXMoZ2V0X3Jhd19wYWdl KCdnaW5fdGVzdF9pZHgnLAorMSksICdnaW5fdGVzdF9pZHgnOjpyZWdjbGFzcyk7CisgaXRlbW9m ZnNldCB8IGRvd25saW5rIHwgdGlkcyB8ICAgICAgICAgICAgICAgIGtleXMKKy0tLS0tLS0tLS0t LSstLS0tLS0tLS0tKy0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyAgICAgICAgICAxIHwgKDMsMCkgICAgfCB7fSAgIHwgaT0xMTMKKyAgICAgICAgICAyIHwgKDUs MCkgICAgfCB7fSAgIHwgaj0zNDE3M2NiMzhmMDdmODlkZGJlYmMyYWM5MTI4MzAzZgorICAgICAg ICAgIDMgfCAoMiwwKSAgICB8IHt9ICAgfCBqPWEwYTA4MGY0MmU2ZjEzYjNhMmRmMTMzZjA3MzA5 NWRkCisgICAgICAgICAgNCB8ICg0LDApICAgIHwge30gICB8IGo9ZmM0OTBjYTQ1YzAwYjEyNDli YmUzNTU0YTRmZGY2ZmIKKyg0IHJvd3MpCis8L3NjcmVlbj4KKyAgICAgPC9wYXJhPgorICAgIDwv bGlzdGl0ZW0+CisKKyAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICA8dGVybT4KKyAgICAgPGZ1bmN0 aW9uPmdpbl9kYXRhcGFnZV9pdGVtcyhwYWdlIGJ5dGVhKSByZXR1cm5zIHNldG9mIHJlY29yZDwv ZnVuY3Rpb24+CisgICAgIDxpbmRleHRlcm0+CisgICAgICA8cHJpbWFyeT5naW5fZGF0YXBhZ2Vf aXRlbXM8L3ByaW1hcnk+CisgICAgIDwvaW5kZXh0ZXJtPgorICAgIDwvdGVybT4KKworICAgIDxs aXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICA8ZnVuY3Rpb24+Z2luX2RhdGFwYWdlX2l0ZW1z PC9mdW5jdGlvbj4gcmV0dXJucyBpbmZvcm1hdGlvbiBhYm91dAorICAgICAgdGhlIGRhdGEgc3Rv cmVkIGluIGEgcG9zdGluZyB0cmVlIDxhY3JvbnltPkdJTjwvYWNyb255bT4gaW50ZXJuYWwgcGFn ZS4gIEZvciBleGFtcGxlOgorPHNjcmVlbj4KK3Rlc3Q9IyBzZWxlY3QgKiBmcm9tIGdpbl9kYXRh cGFnZV9pdGVtcyhnZXRfcmF3X3BhZ2UoJ2dpbl90ZXN0X2lkeCcsCis0MykpOworIGl0ZW1vZmZz ZXQgfCBkb3dubGluayB8IGl0ZW1fdGlkCistLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0t LS0tCisgICAgICAgICAgMSB8ICAgICAgMTI0IHwgKDE2MiwxMikKKyAgICAgICAgICAyIHwgICAg ICAxMjMgfCAoMzE0LDM3KQorICAgICAgICAgIDMgfCAgICAgIDI1MSB8ICg0NjcsMjMpCisgICAg ICAgICAgNCB8ICAgICAgMzczIHwgKDAsMCkKKyg0IHJvd3MpCis8L3NjcmVlbj4KKyAgICAgPC9w YXJhPgorICAgIDwvbGlzdGl0ZW0+CisKKyAgIDwvdmFybGlzdGVudHJ5PgogICA8L3ZhcmlhYmxl bGlzdD4KICA8L3NlY3QyPgogCi0tIAoyLjQzLjAKCg== --00000000000005bafe064780946d--