Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1o6vD8-0007sq-JG for pgsql-hackers@arkaria.postgresql.org; Thu, 30 Jun 2022 14:32:03 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1o6vD7-0007Oz-E3 for pgsql-hackers@arkaria.postgresql.org; Thu, 30 Jun 2022 14:32:01 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1o6vD6-0007Oq-7H for pgsql-hackers@lists.postgresql.org; Thu, 30 Jun 2022 14:32:01 +0000 Received: from mail-db8eur05on2122.outbound.protection.outlook.com ([40.107.20.122] helo=EUR05-DB8-obe.outbound.protection.outlook.com) by makus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1o6vCz-0001pz-DB for pgsql-hackers@lists.postgresql.org; Thu, 30 Jun 2022 14:31:59 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=L7v38ZmkyYxQpGmY3HnVN+LS/ayr9JUGzFcrFhK9YA6HxDT9y30yGBm9kFfGs2JN5mztMGa1Zyw0ynfYQAGiFlnh+OHXo/4htv72zpu5/qwBmTu/RLW6p/M1Mai7oG1p1pRNQ9rMCmf4nFZ0mcataUtx2Fv1RvoZdTgkdP2NT5JrP2FaTVoRrB/4kRTXwh3cw7ptIu0AoH1dgP8h5zfTZZ9/bCA1yGqCeb3/4R9/S4CjgnDZTiWuAvMV11oJ+4P6GaCsJMB/FlCuUSExvkkH6TU6G7MZC233DpFqMu69l3HMSdAv/gkxKFhvB2697cR2lyTVEZG6WWquzOTuSqVfgA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=Pyehm5vBP9Cgb/6pSZliDYUiqD7C7WzQ4OlrK22ijhw=; b=I3CNfsRaeP+jjqXTaxqfgHS8uAPzIFH5KsBRwXgXZYQ02jjqY3RRHpZAmF+sFfA5rWL+7YmhDlyHpCkgVXb7z8nEo5BGW1W1eFZdpnzeFnYodB3m7LscMsrJnxQRrfyxQ3ydfY95DClf8k4ThzHEEUuPPss+eQstMBQqwIW4F0Q6g26hHJAgZn4pvtFn6hqsL+/44Sl1J8obmRbLmkl+rJjH8upwhQRwpA+XWUbRHxXzZlh7rkUKfKY5IFtDbQhhZTh3vde6/JSN+kKk9y1TpkDsCNqS0wui/SN0JAg70uRySTGk9q0VZB2uETUGXiJYLic7TEEMZ1b12c8guT4dhg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=ulb.be; dmarc=pass action=none header.from=ulb.be; dkim=pass header.d=ulb.be; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ulb.be; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Pyehm5vBP9Cgb/6pSZliDYUiqD7C7WzQ4OlrK22ijhw=; b=rFnlQPZCbroKRdrZvPJcsB1qVOyU1j44QBNIimm1rqUbqRDNFrUkhb622JDt098h/yL8b8khcHURmVIdkl1iWoOFx01A2RKFfOfdWe4A2JGR1tc4CH9OGJ9NIgy5iRynP74Wyo4uMHk/dtbPNvZypK84KMD/XUUc1aIhjlmpEv4= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=ulb.be; Received: from PAXP190MB1536.EURP190.PROD.OUTLOOK.COM (2603:10a6:102:1c8::22) by VI1P190MB0430.EURP190.PROD.OUTLOOK.COM (2603:10a6:802:32::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5373.17; Thu, 30 Jun 2022 14:31:48 +0000 Received: from PAXP190MB1536.EURP190.PROD.OUTLOOK.COM ([fe80::39df:db97:4545:619a]) by PAXP190MB1536.EURP190.PROD.OUTLOOK.COM ([fe80::39df:db97:4545:619a%4]) with mapi id 15.20.5373.022; Thu, 30 Jun 2022 14:31:48 +0000 X-Gm-Message-State: AJIora+MehuAr2YVwy4MEaZgi6dOdyrVPU0ufQseZvH+rzv1g1pIi0uZ 2sZahlpRJic2t4Oj1jyI2u07yUuEHospkxhq0Fo= X-Google-Smtp-Source: AGRyM1th1f253rlpT79zT4XZIXhPgVIrmEi9EZxDSO88kev5iU8bMZmdrwQ6ATr7jnKcdltWVPnVn9r+DMJpSC6An5g= X-Received: by 2002:a17:903:1c7:b0:16a:2844:8c1f with SMTP id e7-20020a17090301c700b0016a28448c1fmr15007736plh.30.1656599501396; Thu, 30 Jun 2022 07:31:41 -0700 (PDT) From: Mahmoud Sakr Date: Thu, 30 Jun 2022 16:31:30 +0200 X-Gmail-Original-Message-ID: Message-ID: Subject: Implement missing join selectivity estimation for range types To: PostgreSQL Hackers Cc: SCHOEMANS Maxime , Diogo Repas , Luo Zhicheng , Andrey Lepikhov Content-Type: multipart/mixed; boundary="000000000000d0f99405e2ab20f5" X-ClientProxiedBy: MWHPR03CA0021.namprd03.prod.outlook.com (2603:10b6:300:117::31) To PAXP190MB1536.EURP190.PROD.OUTLOOK.COM (2603:10a6:102:1c8::22) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: b77e13de-809e-4880-cde6-08da5aa542f8 X-MS-TrafficTypeDiagnostic: VI1P190MB0430:EE_ X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: DLC+0FAEyAuhPrqg0TtaW3cT4KfeEYJ27zgpgLZ32MNvdCT2tr9W9dTtaSI93lpVixAzdEjiCjept5qlxaIsAAAl677D7OxAyo2IxiDF+RvwhlIMGbJK9gLKI3qjPV2kaHkjDSMD3OFYxu1HqFa+Jn1Y3CtJmM2I5F14+cUug4lKMlXpHqIZaz7FFPJESLa8pVcBlU6DXsZdNkpH96yYlMMyhZ/gdwfsbB0sZwd8pSMdx4mii8rqpiCbpsa+8P9mH3+VMTiwSTnDp8AjvwGG+4qpn2kfZ32ar2GosDxGJgpJqkkDzQ7X0MBRfWnm9LyyUUDETTuKQyFMIvwqcquKalJsMco4fgfB6xzmrIb95aFJ607h/aPiyQSjj3+o0fgrNJugHhSburR78nYmDXh0pphdhoOIpOEefLbCxNCRvjScODvavRHiykrmFOPQT7yd1EP1kG/6wET92+Rgd1qVsyKmDi5mu5ByzaQ7RyoMBN6M/OW9jbyrJkD+2pZ1ByOCwjvKXAn7K/aHU8Mu/8qg/FChHUGdu9cVQSLyQzyrG8sVQ4+n/gQMdnTVer6y8hdmcW77IcanpicC0wnj/wBIr22cePxOA+97ZP61HFK3vnhwcwSwPc/n83U/FeUbrFUZOkiZGkItdVskZFl6/rlPB16v4lr0nNEjWgAv9ZgrMef3i6+kSZe6u2UCyC5UKmDwD+M0bGrCK2mfiHRqwpnVF1YVlXbPKNUxCowwz02n7sHfchDqf/am+jffvazZ9Zf/gQ016ahJ0p24UbefvFfp47Ob4rHS2ks0rS/4Z/hiBOxuVL3QAVf4gBvL9xc9U1+WZ4GQRxDRsbClMIlgcHALLQ== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXP190MB1536.EURP190.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230016)(4636009)(376002)(366004)(346002)(136003)(39860400002)(396003)(86362001)(107886003)(41320700001)(52116002)(55236004)(6512007)(9686003)(41300700001)(6506007)(6486002)(26005)(5660300002)(33964004)(38350700002)(235185007)(38100700002)(66556008)(186003)(6666004)(316002)(2906002)(8676002)(66476007)(55446002)(44832011)(8936002)(66946007)(478600001)(6916009)(786003)(54906003)(4326008);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?WGtZNGpQbCtVcUJ3NmszT1RBSmJ3Z2ZlYThxU1YxeW9mSXU0UUZBN3lUS3JW?= =?utf-8?B?L0VkbnA5djRaSVd2Q2xGcGJibFdERk9vbGpIMU1DVXNnbXBvekZlZWxKVTRn?= =?utf-8?B?enlBa1lWZktUY25rNExObWFYVWhNMTRMNXozVCtKQ21zcHVRQkNHOTR6eG9T?= =?utf-8?B?Qko0anU0YmFHTS92UHM5eEVZNXpsY25yMktyWGdxTFRGamRWWmtpN3UybnQ2?= =?utf-8?B?amRIdUhocTdTTkVYS1JLME9TbFRhZ1g1d3U5RVpCaDJzSmF1NkVFQlo2Y2JR?= =?utf-8?B?TnFXZC9mby93ZzQ3dUExSDRBUzc2K0VNeEV0NVFOMHBNQ0RCK0RhaDd4RndU?= =?utf-8?B?a05QVVFuOEJFcjFVb0w1SlRaVU15d1pMNWhuMTdVdEppQlBhRElzZ1hzZkNn?= =?utf-8?B?VWlwNlZhZDFQSjVidVZqeHRRcnJqNTdnY25yYW5jUlB2Yis3cTRRRXR1bmUy?= =?utf-8?B?eitwWXovSllheXF3algzOFhjOEU2ZlV2L2hueEplSXIyMUdxVmx5M1NSc1ZZ?= =?utf-8?B?bXBFQXpKRTFWTWh4R2M1dTJlT0pkaCs5bXI3Zm9Wcm9ubkh2S2RlZkRTRjJR?= =?utf-8?B?MjI4RXRIVmNER245T2J0SDlDOUZlZ3lBaFVna0EzWVQ3Q21IcVBUaVIwVHor?= =?utf-8?B?L0FKeEFCUW5oT29udTVuN2dYWG12M3ZZTVl1OW04MjVWVVAxelVScGIwMnla?= =?utf-8?B?YmkrNVVJT212Y1NBMDdLa0I4NEFNNVllUnB0cTUyaG9yUDJVTndaTEk0RG9r?= =?utf-8?B?M3pWeW1HeGMzSmg1SmtVbkhYaVQwY0VVYzl6ZnFsMlBDQm5CVnNUdks4b2Z1?= =?utf-8?B?N2hRNFVUb2FneWI1UXI5ZmZZblhrSUhkZHZLVXZDaXMrMG5BQ3B0K2xQQjVp?= =?utf-8?B?cGtNYTlJMXA4bG9qa3hFQ2lyemgwZWlFaU4rWVAvejI0VGtsMkxoRnFvSldD?= =?utf-8?B?QUhBK0QvK244cnZPNXR0M0s2cWpFZThXcWwxeVgzR3B3WUJwQ3ltQUVnWjJN?= =?utf-8?B?cXd4d25SdmttdEZIS2NGclBLbnZTTStGN3IybjR3cEkvaHpHcm5WVDdGVGI0?= =?utf-8?B?RTE1b1NhbjlwRm83NjE1TWxsT1ZRby9PU05Kb1d0U3puZ1ZNT2VXNU9CQWJE?= =?utf-8?B?N1UySk00UDlHbm00Qk1hK3N0cUd6R1IxSFN5Vm5oMUdjMjFPUS9kKyswNHBi?= =?utf-8?B?R2ZlN0Y1ZEJZNWEzdlVYeVdLUFo4ZmU0MjF4WlRFODNoNERKbW9kb0hmdmtX?= =?utf-8?B?TzNXeWZTeUMyMG5HSmV6eGMxN3lmQWcxdUVLYWtlTTlaT3pXWFoyVjQ2cEtT?= =?utf-8?B?YjFEdkp1N3dEUXhHYXVxYlF5YjMyVi8xTVNsdGkvUE5iQ3MvamQ0UGN1L3Vr?= =?utf-8?B?ZWVOelJGWklMWFE0bFBPT1pYeGJsN3MrQVRJNi9uRU9JaTlKUjF1UitaWmky?= =?utf-8?B?VUFveVJMYU9aWWxPdDlFZDEyc1JVc0VYZ1BzdzFnblRHVkhyd2VIVS96ek9m?= =?utf-8?B?L0MxM2xGMExldUkrWHF6eDVaU2ZIZzZSQ0tXeFpNUDV4anVaaGRhcGc4OFJH?= =?utf-8?B?bTVYNWp1T29MdDBIRjFPYWVxSjFrMG9JZDNJc0RPdk1FNGRCNHhZWG5QeTdN?= =?utf-8?B?YVNHWkFtOE5CQWJvb0VIUjl1ZnJWRjg1ZWtlVmRSVDNxOXR6V09ZOFZqSHVn?= =?utf-8?B?S3RHVVRSU0hnVm12R2sxZGNJZEJNanFURVVvK3lLbFNYOWd1Z1dmbTkwME96?= =?utf-8?B?cDlabnBXcmlEMkExV0xGM0lGUzRseFVKcURTK2gxKzhYM1hSRHBvMnAvWHZs?= =?utf-8?B?azkxdHpHbEt0bi81ZE9HZ2hCK0tnL29HQnRDZ0pBUTdrQ3AxU2RYV2dzVDhp?= =?utf-8?B?b3NDUjFrSVlWYTJvZ1Vud2dJTEFSU1VwalpGUTVINkhWakUzYkhYSVl6TWlG?= =?utf-8?B?RVhpdzhkVnJFazM4dW55NjFYVDk5Q2FXbGdjNEdTVWFMMGlHazhrU3Eyb1Rr?= =?utf-8?B?V24yVDZNT3dIUmhhdkw3Q29oRjlFeThIbHdXMEk5bXMvR0xiMjJ0dm0rU0Fr?= =?utf-8?B?eW1tTklPNEVWWUdJd015aG5oRlg1Tmx0NWMwc0tRb2ZpdjIxNnQ1WjE3N2t4?= =?utf-8?B?QXREZG5RY1VXT1hTNWpHY0k3dHU4VjZKUjhFdUx3OFFaamRqLzlKakl6dVNv?= =?utf-8?B?eWc9PQ==?= X-OriginatorOrg: ulb.be X-MS-Exchange-CrossTenant-Network-Message-Id: b77e13de-809e-4880-cde6-08da5aa542f8 X-MS-Exchange-CrossTenant-AuthSource: PAXP190MB1536.EURP190.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 30 Jun 2022 14:31:47.2925 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 30a5145e-75bd-4212-bb02-8ff9c0ea4ae9 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 1fLvvKE+nyTcqba8CjQVSsEoFhXSeD2nVGmccAR6ujQ/LsOcps2WblXQVWQWEgJLDNwZNHD6lkVSlRYkwEnj3g== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1P190MB0430 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000d0f99405e2ab20f5 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi, Given a query: SELECT * FROM t1, t2 WHERE t1.r << t2.r where t1.r, t2.r are of range type, currently PostgreSQL will estimate a constant selectivity for the << predic= ate, which is equal to 0.005, not utilizing the statistics that the optimizer collects for range attributes. We have worked out a theory for inequality join selectivity estimation (http://arxiv.org/abs/2206.07396), and implemented it for range types it in this patch. The algorithm in this patch re-uses the currently collected statistics for range types, which is the bounds histogram. It works fairly accurate for th= e operations <<, >>, &&, &<, &>, <=3D, >=3D with estimation error of about 0.= 5%. The patch also implements selectivity estimation for the operations @>, <@ (contains and is contained in), but their accuracy is not stable, since the bounds histograms assume independence between the range bounds. A point to discuss is whether or not to keep these last two operati= ons. The patch also includes the selectivity estimation for multirange types, treating a multirange as a single range which is its bounding box. The same algorithm in this patch is applicable to inequality joins of scala= r types. We, however, don't implement it for scalars, since more work is need= ed to make use of the other statistics available for scalars, such as the MCV. This is left as a future work. -- Mahmoud SAKR - Univerist=C3=A9 Libre de Bruxelles This work is done by Diogo Repas, Zhicheng Luo, Maxime Schoemans, and mysel= f --000000000000d0f99405e2ab20f5 Content-Type: text/x-patch; charset="US-ASCII"; name="v1-0001-Join-Selectivity-Estimation-for-Range-types.patch" Content-Disposition: attachment; filename="v1-0001-Join-Selectivity-Estimation-for-Range-types.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l514iomg0 ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9tdWx0aXJhbmdldHlwZXNfc2VsZnVu Y3MuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9tdWx0aXJhbmdldHlwZXNfc2VsZnVuY3MuYwpp bmRleCA5MTljODg4OWQ0Li43YmE0YWE4YjA0IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGls cy9hZHQvbXVsdGlyYW5nZXR5cGVzX3NlbGZ1bmNzLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMv YWR0L211bHRpcmFuZ2V0eXBlc19zZWxmdW5jcy5jCkBAIC0xMzM1LDMgKzEzMzUsNTExIEBAIGNh bGNfaGlzdF9zZWxlY3Rpdml0eV9jb250YWlucyhUeXBlQ2FjaGVFbnRyeSAqdHlwY2FjaGUsCiAK IAlyZXR1cm4gc3VtX2ZyYWM7CiB9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGEgY29weSBv ZiB0aGUgZnVuY3Rpb24gd2l0aCB0aGUgc2FtZSBuYW1lIGluCisgKiByYW5nZXR5cGVzX3NlbGZ1 bmNzLmMsIHdpdGggdGhlIG9ubHkgZGlmZmVyZW5jZSB0aGF0IHRoZSB0eXBlcyBhcmUKKyAqIG11 bHRpcmFuZ2VzCisgKgorICovCitzdGF0aWMgZG91YmxlCitjYWxjX2hpc3Rfam9pbl9zZWxlY3Rp dml0eShUeXBlQ2FjaGVFbnRyeSAqdHlwY2FjaGUsCisJCQkJCQkgICBjb25zdCBSYW5nZUJvdW5k ICpoaXN0MSwgaW50IG5oaXN0MSwKKwkJCQkJCSAgIGNvbnN0IFJhbmdlQm91bmQgKmhpc3QyLCBp bnQgbmhpc3QyKQoreworCWludAkJCWksCisJCQkJajsKKwlkb3VibGUJCXNlbGVjdGl2aXR5LAor CQkJCWN1cl9zZWwxLAorCQkJCWN1cl9zZWwyLAorCQkJCXByZXZfc2VsMSwKKwkJCQlwcmV2X3Nl bDI7CisJUmFuZ2VCb3VuZAljdXJfc3luYzsKKworCS8qCisJICogSGlzdG9ncmFtcyB3aWxsIG5l dmVyIGJlIGVtcHR5LiBJbiBmYWN0LCBhIGhpc3RvZ3JhbSB3aWxsIG5ldmVyIGhhdmUKKwkgKiBs ZXNzIHRoYW4gMiB2YWx1ZXMgKDEgYmluKQorCSAqLworCUFzc2VydChuaGlzdDEgPiAxKTsKKwlB c3NlcnQobmhpc3QyID4gMSk7CisKKwkvKiBGYXN0LWZvcndhcmRzIGkgYW5kIGogdG8gc3RhcnQg b2YgaXRlcmF0aW9uICovCisJZm9yIChpID0gMDsgcmFuZ2VfY21wX2JvdW5kX3ZhbHVlcyh0eXBj YWNoZSwgJmhpc3QxW2ldLCAmaGlzdDJbMF0pIDwgMDsgaSsrKTsKKwlmb3IgKGogPSAwOyByYW5n ZV9jbXBfYm91bmRfdmFsdWVzKHR5cGNhY2hlLCAmaGlzdDJbal0sICZoaXN0MVswXSkgPCAwOyBq KyspOworCisJaWYgKHJhbmdlX2NtcF9ib3VuZF92YWx1ZXModHlwY2FjaGUsICZoaXN0MVtpXSwg Jmhpc3QyW2pdKSA8IDApCisJCWN1cl9zeW5jID0gaGlzdDFbaSsrXTsKKwllbHNlIGlmIChyYW5n ZV9jbXBfYm91bmRfdmFsdWVzKHR5cGNhY2hlLCAmaGlzdDFbaV0sICZoaXN0MltqXSkgPiAwKQor CQljdXJfc3luYyA9IGhpc3QyW2orK107CisJZWxzZQorCXsKKwkJLyogSWYgZXF1YWwsIHNraXAg b25lICovCisJCWN1cl9zeW5jID0gaGlzdDFbaV07CisJCWkrKzsKKwkJaisrOworCX0KKwlwcmV2 X3NlbDEgPSBjYWxjX2hpc3Rfc2VsZWN0aXZpdHlfc2NhbGFyKHR5cGNhY2hlLCAmY3VyX3N5bmMs CisJCQkJCQkJCQkJCSBoaXN0MSwgbmhpc3QxLCBmYWxzZSk7CisJcHJldl9zZWwyID0gY2FsY19o aXN0X3NlbGVjdGl2aXR5X3NjYWxhcih0eXBjYWNoZSwgJmN1cl9zeW5jLAorCQkJCQkJCQkJCQkg aGlzdDIsIG5oaXN0MiwgZmFsc2UpOworCisJLyoKKwkgKiBEbyB0aGUgZXN0aW1hdGlvbiBvbiBv dmVybGFwcGluZyByZWdpb24KKwkgKi8KKwlzZWxlY3Rpdml0eSA9IDAuMDsKKwl3aGlsZSAoaSA8 IG5oaXN0MSAmJiBqIDwgbmhpc3QyKQorCXsKKwkJaWYgKHJhbmdlX2NtcF9ib3VuZF92YWx1ZXMo dHlwY2FjaGUsICZoaXN0MVtpXSwgJmhpc3QyW2pdKSA8IDApCisJCQljdXJfc3luYyA9IGhpc3Qx W2krK107CisJCWVsc2UgaWYgKHJhbmdlX2NtcF9ib3VuZF92YWx1ZXModHlwY2FjaGUsICZoaXN0 MVtpXSwgJmhpc3QyW2pdKSA+IDApCisJCQljdXJfc3luYyA9IGhpc3QyW2orK107CisJCWVsc2UK KwkJeworCQkJLyogSWYgZXF1YWwsIHNraXAgb25lICovCisJCQljdXJfc3luYyA9IGhpc3QxW2ld OworCQkJaSsrOworCQkJaisrOworCQl9CisJCWN1cl9zZWwxID0gY2FsY19oaXN0X3NlbGVjdGl2 aXR5X3NjYWxhcih0eXBjYWNoZSwgJmN1cl9zeW5jLAorCQkJCQkJCQkJCQkJaGlzdDEsIG5oaXN0 MSwgZmFsc2UpOworCQljdXJfc2VsMiA9IGNhbGNfaGlzdF9zZWxlY3Rpdml0eV9zY2FsYXIodHlw Y2FjaGUsICZjdXJfc3luYywKKwkJCQkJCQkJCQkJCWhpc3QyLCBuaGlzdDIsIGZhbHNlKTsKKwor CQlzZWxlY3Rpdml0eSArPSAocHJldl9zZWwxICsgY3VyX3NlbDEpICogKGN1cl9zZWwyIC0gcHJl dl9zZWwyKTsKKworCQkvKiBQcmVwYXJlIGZvciB0aGUgbmV4dCBpdGVyYXRpb24gKi8KKwkJcHJl dl9zZWwxID0gY3VyX3NlbDE7CisJCXByZXZfc2VsMiA9IGN1cl9zZWwyOworCX0KKworCS8qIElu Y2x1ZGUgcmVtYWluZGVyIG9mIGhpc3QyIGlmIGFueSAqLworCWlmIChqIDwgbmhpc3QyKQorCQlz ZWxlY3Rpdml0eSArPSAxIC0gcHJldl9zZWwyOworCisJcmV0dXJuIHNlbGVjdGl2aXR5IC8gMjsK K30KKworLyoKKyAqIG11bHRpcmFuZ2Vqb2luc2VsIC0tIGpvaW4gY2FyZGluYWxpdHkgZm9yIG11 bHRpcmFuZ2Ugb3BlcmF0b3JzCisgKi8KK0RhdHVtCittdWx0aXJhbmdlam9pbnNlbChQR19GVU5D VElPTl9BUkdTKQoreworCVBsYW5uZXJJbmZvICpyb290ID0gKFBsYW5uZXJJbmZvICopIFBHX0dF VEFSR19QT0lOVEVSKDApOworCU9pZAkJCW9wZXJhdG9yID0gUEdfR0VUQVJHX09JRCgxKTsKKwlM aXN0CSAgICphcmdzID0gKExpc3QgKikgUEdfR0VUQVJHX1BPSU5URVIoMik7CisJU3BlY2lhbEpv aW5JbmZvICpzamluZm8gPSAoU3BlY2lhbEpvaW5JbmZvICopIFBHX0dFVEFSR19QT0lOVEVSKDQp OworCVZhcmlhYmxlU3RhdERhdGEgdmFyZGF0YTEsCisJCQkJdmFyZGF0YTI7CisJQXR0U3RhdHNT bG90IGhpc3QxLAorCQkJCWhpc3QyLAorCQkJCXNzbG90OworCWJvb2wJCXJldmVyc2VkOworCVNl bGVjdGl2aXR5IHNlbGVjOworCVR5cGVDYWNoZUVudHJ5ICp0eXBjYWNoZSA9IE5VTEwsCisJCQkg ICAqcm5nX3R5cGNhY2hlID0gTlVMTDsKKwlGb3JtX3BnX3N0YXRpc3RpYyBzdGF0czEsCisJCQkJ c3RhdHMyOworCWRvdWJsZQkJZW1wdHlfZnJhYzEsCisJCQkJZW1wdHlfZnJhYzIsCisJCQkJbnVs bF9mcmFjMSwKKwkJCQludWxsX2ZyYWMyOworCWludAkJCW5oaXN0MSwKKwkJCQluaGlzdDI7CisJ UmFuZ2VCb3VuZCAqaGlzdDFfbG93ZXIsCisJCQkgICAqaGlzdDFfdXBwZXIsCisJCQkgICAqaGlz dDJfbG93ZXIsCisJCQkgICAqaGlzdDJfdXBwZXI7CisJYm9vbAkJZW1wdHk7CisJaW50CQkJaTsK KworCWdldF9qb2luX3ZhcmlhYmxlcyhyb290LCBhcmdzLCBzamluZm8sICZ2YXJkYXRhMSwgJnZh cmRhdGEyLCAmcmV2ZXJzZWQpOworCisJc2VsZWMgPSBkZWZhdWx0X211bHRpcmFuZ2Vfc2VsZWN0 aXZpdHkob3BlcmF0b3IpOworCisJLyogZ2V0IG11bHRpcmFuZ2UgdHlwZSBjYWNoZSAqLworCWlm ICh0eXBlX2lzX211bHRpcmFuZ2UodmFyZGF0YTEudmFydHlwZSkpCisJCXR5cGNhY2hlID0gbXVs dGlyYW5nZV9nZXRfdHlwY2FjaGUoZmNpbmZvLCB2YXJkYXRhMS52YXJ0eXBlKTsKKwllbHNlIGlm ICh0eXBlX2lzX211bHRpcmFuZ2UodmFyZGF0YTIudmFydHlwZSkpCisJCXR5cGNhY2hlID0gbXVs dGlyYW5nZV9nZXRfdHlwY2FjaGUoZmNpbmZvLCB2YXJkYXRhMi52YXJ0eXBlKTsKKworCWlmIChI ZWFwVHVwbGVJc1ZhbGlkKHZhcmRhdGExLnN0YXRzVHVwbGUpICYmCisJCWdldF9hdHRzdGF0c3Ns b3QoJmhpc3QxLCB2YXJkYXRhMS5zdGF0c1R1cGxlLAorCQkJCQkJIFNUQVRJU1RJQ19LSU5EX0JP VU5EU19ISVNUT0dSQU0sIEludmFsaWRPaWQsCisJCQkJCQkgQVRUU1RBVFNTTE9UX1ZBTFVFUykg JiYKKwkJSGVhcFR1cGxlSXNWYWxpZCh2YXJkYXRhMi5zdGF0c1R1cGxlKSAmJgorCQlnZXRfYXR0 c3RhdHNzbG90KCZoaXN0MiwgdmFyZGF0YTIuc3RhdHNUdXBsZSwKKwkJCQkJCSBTVEFUSVNUSUNf S0lORF9CT1VORFNfSElTVE9HUkFNLCBJbnZhbGlkT2lkLAorCQkJCQkJIEFUVFNUQVRTU0xPVF9W QUxVRVMpICYmCisJCXR5cGNhY2hlKQorCXsKKworCQkvKiBJbml0aWFsaXplIHVuZGVybHlpbmcg cmFuZ2UgdHlwZSBjYWNoZSAqLworCQlybmdfdHlwY2FjaGUgPSB0eXBjYWNoZS0+cm5ndHlwZTsK KworCQkvKgorCQkgKiBGaXJzdCBsb29rIHVwIHRoZSBmcmFjdGlvbiBvZiBOVUxMcyBhbmQgZW1w dHkgcmFuZ2VzIGZyb20KKwkJICogcGdfc3RhdGlzdGljLgorCQkgKi8KKwkJc3RhdHMxID0gKEZv cm1fcGdfc3RhdGlzdGljKSBHRVRTVFJVQ1QodmFyZGF0YTEuc3RhdHNUdXBsZSk7CisJCXN0YXRz MiA9IChGb3JtX3BnX3N0YXRpc3RpYykgR0VUU1RSVUNUKHZhcmRhdGEyLnN0YXRzVHVwbGUpOwor CisJCW51bGxfZnJhYzEgPSBzdGF0czEtPnN0YW51bGxmcmFjOworCQludWxsX2ZyYWMyID0gc3Rh dHMyLT5zdGFudWxsZnJhYzsKKworCQkvKiBUcnkgdG8gZ2V0IGZyYWN0aW9uIG9mIGVtcHR5IHJh bmdlcyBmb3IgdGhlIGZpcnN0IHZhcmlhYmxlICovCisJCWlmIChnZXRfYXR0c3RhdHNzbG90KCZz c2xvdCwgdmFyZGF0YTEuc3RhdHNUdXBsZSwKKwkJCQkJCQkgU1RBVElTVElDX0tJTkRfUkFOR0Vf TEVOR1RIX0hJU1RPR1JBTSwKKwkJCQkJCQkgSW52YWxpZE9pZCwKKwkJCQkJCQkgQVRUU1RBVFNT TE9UX05VTUJFUlMpKQorCQl7CisJCQlpZiAoc3Nsb3Qubm51bWJlcnMgIT0gMSkJLyogc2hvdWxk bid0IGhhcHBlbiAqLworCQkJCWVsb2coRVJST1IsICJpbnZhbGlkIGVtcHR5IGZyYWN0aW9uIHN0 YXRpc3RpYyIpOworCQkJZW1wdHlfZnJhYzEgPSBzc2xvdC5udW1iZXJzWzBdOworCQkJZnJlZV9h dHRzdGF0c3Nsb3QoJnNzbG90KTsKKwkJfQorCQllbHNlCisJCXsKKwkJCS8qIE5vIGVtcHR5IGZy YWN0aW9uIHN0YXRpc3RpYy4gQXNzdW1lIG5vIGVtcHR5IHJhbmdlcy4gKi8KKwkJCWVtcHR5X2Zy YWMxID0gMC4wOworCQl9CisKKwkJLyogVHJ5IHRvIGdldCBmcmFjdGlvbiBvZiBlbXB0eSByYW5n ZXMgZm9yIHRoZSBzZWNvbmQgdmFyaWFibGUgKi8KKwkJaWYgKGdldF9hdHRzdGF0c3Nsb3QoJnNz bG90LCB2YXJkYXRhMi5zdGF0c1R1cGxlLAorCQkJCQkJCSBTVEFUSVNUSUNfS0lORF9SQU5HRV9M RU5HVEhfSElTVE9HUkFNLAorCQkJCQkJCSBJbnZhbGlkT2lkLAorCQkJCQkJCSBBVFRTVEFUU1NM T1RfTlVNQkVSUykpCisJCXsKKwkJCWlmIChzc2xvdC5ubnVtYmVycyAhPSAxKQkvKiBzaG91bGRu J3QgaGFwcGVuICovCisJCQkJZWxvZyhFUlJPUiwgImludmFsaWQgZW1wdHkgZnJhY3Rpb24gc3Rh dGlzdGljIik7CisJCQllbXB0eV9mcmFjMiA9IHNzbG90Lm51bWJlcnNbMF07CisJCQlmcmVlX2F0 dHN0YXRzc2xvdCgmc3Nsb3QpOworCQl9CisJCWVsc2UKKwkJeworCQkJLyogTm8gZW1wdHkgZnJh Y3Rpb24gc3RhdGlzdGljLiBBc3N1bWUgbm8gZW1wdHkgcmFuZ2VzLiAqLworCQkJZW1wdHlfZnJh YzIgPSAwLjA7CisJCX0KKworCQkvKgorCQkgKiBDb252ZXJ0IGhpc3RvZ3JhbXMgb2YgcmFuZ2Vz IGludG8gaGlzdG9ncmFtcyBvZiB0aGVpciBsb3dlciBhbmQKKwkJICogdXBwZXIgYm91bmRzIGZv ciB0aGUgZmlyc3QgdmFyaWFibGUuCisJCSAqLworCQluaGlzdDEgPSBoaXN0MS5udmFsdWVzOwor CQloaXN0MV9sb3dlciA9IChSYW5nZUJvdW5kICopIHBhbGxvYyhzaXplb2YoUmFuZ2VCb3VuZCkg KiBuaGlzdDEpOworCQloaXN0MV91cHBlciA9IChSYW5nZUJvdW5kICopIHBhbGxvYyhzaXplb2Yo UmFuZ2VCb3VuZCkgKiBuaGlzdDEpOworCQlmb3IgKGkgPSAwOyBpIDwgbmhpc3QxOyBpKyspCisJ CXsKKwkJCXJhbmdlX2Rlc2VyaWFsaXplKHJuZ190eXBjYWNoZSwgRGF0dW1HZXRSYW5nZVR5cGVQ KGhpc3QxLnZhbHVlc1tpXSksCisJCQkJCQkJICAmaGlzdDFfbG93ZXJbaV0sICZoaXN0MV91cHBl cltpXSwgJmVtcHR5KTsKKwkJCS8qIFRoZSBoaXN0b2dyYW0gc2hvdWxkIG5vdCBjb250YWluIGFu eSBlbXB0eSByYW5nZXMgKi8KKwkJCWlmIChlbXB0eSkKKwkJCQllbG9nKEVSUk9SLCAiYm91bmRz IGhpc3RvZ3JhbSBjb250YWlucyBhbiBlbXB0eSByYW5nZSIpOworCQl9CisKKwkJLyoKKwkJICog Q29udmVydCBoaXN0b2dyYW1zIG9mIHJhbmdlcyBpbnRvIGhpc3RvZ3JhbXMgb2YgdGhlaXIgbG93 ZXIgYW5kCisJCSAqIHVwcGVyIGJvdW5kcyBmb3IgdGhlIHNlY29uZCB2YXJpYWJsZS4KKwkJICov CisJCW5oaXN0MiA9IGhpc3QyLm52YWx1ZXM7CisJCWhpc3QyX2xvd2VyID0gKFJhbmdlQm91bmQg KikgcGFsbG9jKHNpemVvZihSYW5nZUJvdW5kKSAqIG5oaXN0Mik7CisJCWhpc3QyX3VwcGVyID0g KFJhbmdlQm91bmQgKikgcGFsbG9jKHNpemVvZihSYW5nZUJvdW5kKSAqIG5oaXN0Mik7CisJCWZv ciAoaSA9IDA7IGkgPCBuaGlzdDI7IGkrKykKKwkJeworCQkJcmFuZ2VfZGVzZXJpYWxpemUocm5n X3R5cGNhY2hlLCBEYXR1bUdldFJhbmdlVHlwZVAoaGlzdDIudmFsdWVzW2ldKSwKKwkJCQkJCQkg ICZoaXN0Ml9sb3dlcltpXSwgJmhpc3QyX3VwcGVyW2ldLCAmZW1wdHkpOworCQkJLyogVGhlIGhp c3RvZ3JhbSBzaG91bGQgbm90IGNvbnRhaW4gYW55IGVtcHR5IHJhbmdlcyAqLworCQkJaWYgKGVt cHR5KQorCQkJCWVsb2coRVJST1IsICJib3VuZHMgaGlzdG9ncmFtIGNvbnRhaW5zIGFuIGVtcHR5 IHJhbmdlIik7CisJCX0KKworCQlzd2l0Y2ggKG9wZXJhdG9yKQorCQl7CisJCQljYXNlIE9JRF9N VUxUSVJBTkdFX09WRVJMQVBTX01VTFRJUkFOR0VfT1A6CisJCQljYXNlIE9JRF9NVUxUSVJBTkdF X09WRVJMQVBTX1JBTkdFX09QOgorCQkJY2FzZSBPSURfUkFOR0VfT1ZFUkxBUFNfTVVMVElSQU5H RV9PUDoKKworCQkJCS8qCisJCQkJICogU2VsZWN0aXZpdHkgb2YgQSAmJiBCID0gU2VsZWN0aXZp dHkgb2YgTk9UKCBBIDw8IEIgfHwgQSA+PgorCQkJCSAqIEIgKSA9IDEgLSBTZWxlY3Rpdml0eSBv ZiAoQS51cHBlciA8IEIubG93ZXIpIC0gU2VsZWN0aXZpdHkKKwkJCQkgKiBvZiAoQi51cHBlciA8 IEEubG93ZXIpCisJCQkJICovCisJCQkJc2VsZWMgPSAxOworCQkJCXNlbGVjIC09IGNhbGNfaGlz dF9qb2luX3NlbGVjdGl2aXR5KHJuZ190eXBjYWNoZSwKKwkJCQkJCQkJCQkJCQloaXN0MV91cHBl ciwgbmhpc3QxLAorCQkJCQkJCQkJCQkJCWhpc3QyX2xvd2VyLCBuaGlzdDIpOworCQkJCXNlbGVj IC09IGNhbGNfaGlzdF9qb2luX3NlbGVjdGl2aXR5KHJuZ190eXBjYWNoZSwKKwkJCQkJCQkJCQkJ CQloaXN0Ml91cHBlciwgbmhpc3QyLAorCQkJCQkJCQkJCQkJCWhpc3QxX2xvd2VyLCBuaGlzdDEp OworCQkJCWJyZWFrOworCisJCQljYXNlIE9JRF9NVUxUSVJBTkdFX0xFU1NfRVFVQUxfT1A6CisK KwkJCQkvKgorCQkJCSAqIEEgPD0gQgorCQkJCSAqCisJCQkJICogU3RhcnQgYnkgY29tcGFyaW5n IGxvd2VyIGJvdW5kcyBhbmQgaWYgdGhleSBhcmUgZXF1YWwKKwkJCQkgKiBjb21wYXJlIHVwcGVy IGJvdW5kcworCQkJCSAqCisJCQkJICogTmVnYXRpb24gb2YgT0lEX1JBTkdFX0dSRUFURVJfT1Au CisJCQkJICoKKwkJCQkgKiBPdmVyZXN0aW1hdGUgYnkgY29tcGFyaW5nIG9ubHkgdGhlIGxvd2Vy IGJvdW5kcy4gSGlnaGVyCisJCQkJICogYWNjdXJhY3kgd291bGQgcmVxdWlyZSB1cyB0byBzdWJ0 cmFjdCBQKGxvd2VyMSA9IGxvd2VyMikgKgorCQkJCSAqIFAodXBwZXIxID4gdXBwZXIyKQorCQkJ CSAqLworCQkJCXNlbGVjID0gMSAtIGNhbGNfaGlzdF9qb2luX3NlbGVjdGl2aXR5KHJuZ190eXBj YWNoZSwKKwkJCQkJCQkJCQkJCQkgICBoaXN0Ml9sb3dlciwgbmhpc3QyLAorCQkJCQkJCQkJCQkJ CSAgIGhpc3QxX2xvd2VyLCBuaGlzdDEpOworCQkJCWJyZWFrOworCisJCQljYXNlIE9JRF9NVUxU SVJBTkdFX0xFU1NfT1A6CisKKwkJCQkvKgorCQkJCSAqIEEgPCBCCisJCQkJICoKKwkJCQkgKiBT dGFydCBieSBjb21wYXJpbmcgbG93ZXIgYm91bmRzIGFuZCBpZiB0aGV5IGFyZSBlcXVhbAorCQkJ CSAqIGNvbXBhcmUgdXBwZXIgYm91bmRzCisJCQkJICoKKwkJCQkgKiBVbmRlcmVzdGltYXRlIGJ5 IGNvbXBhcmluZyBvbmx5IHRoZSBsb3dlciBib3VuZHMuIEhpZ2hlcgorCQkJCSAqIGFjY3VyYWN5 IHdvdWxkIHJlcXVpcmUgdXMgdG8gYWRkIFAobG93ZXIxID0gbG93ZXIyKSAqCisJCQkJICogUCh1 cHBlcjEgPCB1cHBlcjIpCisJCQkJICovCisJCQkJc2VsZWMgPSBjYWxjX2hpc3Rfam9pbl9zZWxl Y3Rpdml0eShybmdfdHlwY2FjaGUsCisJCQkJCQkJCQkJCQkgICBoaXN0MV9sb3dlciwgbmhpc3Qx LAorCQkJCQkJCQkJCQkJICAgaGlzdDJfbG93ZXIsIG5oaXN0Mik7CisJCQkJYnJlYWs7CisKKwkJ CWNhc2UgT0lEX01VTFRJUkFOR0VfR1JFQVRFUl9FUVVBTF9PUDoKKworCQkJCS8qCisJCQkJICog QSA+PSBCCisJCQkJICoKKwkJCQkgKiBTdGFydCBieSBjb21wYXJpbmcgbG93ZXIgYm91bmRzIGFu ZCBpZiB0aGV5IGFyZSBlcXVhbAorCQkJCSAqIGNvbXBhcmUgdXBwZXIgYm91bmRzCisJCQkJICoK KwkJCQkgKiBOZWdhdGlvbiBvZiBPSURfUkFOR0VfTEVTU19PUC4KKwkJCQkgKgorCQkJCSAqIE92 ZXJlc3RpbWF0ZSBieSBjb21wYXJpbmcgb25seSB0aGUgbG93ZXIgYm91bmRzLiBIaWdoZXIKKwkJ CQkgKiBhY2N1cmFjeSB3b3VsZCByZXF1aXJlIHVzIHRvIGFkZCBQKGxvd2VyMSA9IGxvd2VyMikg KgorCQkJCSAqIFAodXBwZXIxIDwgdXBwZXIyKQorCQkJCSAqLworCQkJCXNlbGVjID0gMSAtIGNh bGNfaGlzdF9qb2luX3NlbGVjdGl2aXR5KHJuZ190eXBjYWNoZSwKKwkJCQkJCQkJCQkJCQkgICBo aXN0MV9sb3dlciwgbmhpc3QxLAorCQkJCQkJCQkJCQkJCSAgIGhpc3QyX2xvd2VyLCBuaGlzdDIp OworCQkJCWJyZWFrOworCisJCQljYXNlIE9JRF9NVUxUSVJBTkdFX0dSRUFURVJfT1A6CisKKwkJ CQkvKgorCQkJCSAqIEEgPiBCID09IEIgPCBBCisJCQkJICoKKwkJCQkgKiBTdGFydCBieSBjb21w YXJpbmcgbG93ZXIgYm91bmRzIGFuZCBpZiB0aGV5IGFyZSBlcXVhbAorCQkJCSAqIGNvbXBhcmUg dXBwZXIgYm91bmRzCisJCQkJICoKKwkJCQkgKiBVbmRlcmVzdGltYXRlIGJ5IGNvbXBhcmluZyBv bmx5IHRoZSBsb3dlciBib3VuZHMuIEhpZ2hlcgorCQkJCSAqIGFjY3VyYWN5IHdvdWxkIHJlcXVp cmUgdXMgdG8gYWRkIFAobG93ZXIxID0gbG93ZXIyKSAqCisJCQkJICogUCh1cHBlcjEgPiB1cHBl cjIpCisJCQkJICovCisJCQkJc2VsZWMgPSBjYWxjX2hpc3Rfam9pbl9zZWxlY3Rpdml0eShybmdf dHlwY2FjaGUsCisJCQkJCQkJCQkJCQkgICBoaXN0Ml9sb3dlciwgbmhpc3QyLAorCQkJCQkJCQkJ CQkJICAgaGlzdDFfbG93ZXIsIG5oaXN0MSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgT0lEX01V TFRJUkFOR0VfTEVGVF9NVUxUSVJBTkdFX09QOgorCQkJY2FzZSBPSURfTVVMVElSQU5HRV9MRUZU X1JBTkdFX09QOgorCQkJY2FzZSBPSURfUkFOR0VfTEVGVF9NVUxUSVJBTkdFX09QOgorCQkJCS8q IHZhcjEgPDwgdmFyMiB3aGVuIHVwcGVyKHZhcjEpIDwgbG93ZXIodmFyMikgKi8KKwkJCQlzZWxl YyA9IGNhbGNfaGlzdF9qb2luX3NlbGVjdGl2aXR5KHJuZ190eXBjYWNoZSwKKwkJCQkJCQkJCQkJ CSAgIGhpc3QxX3VwcGVyLCBuaGlzdDEsCisJCQkJCQkJCQkJCQkgICBoaXN0Ml9sb3dlciwgbmhp c3QyKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBPSURfTVVMVElSQU5HRV9SSUdIVF9NVUxUSVJB TkdFX09QOgorCQkJY2FzZSBPSURfTVVMVElSQU5HRV9SSUdIVF9SQU5HRV9PUDoKKwkJCWNhc2Ug T0lEX1JBTkdFX1JJR0hUX01VTFRJUkFOR0VfT1A6CisJCQkJLyogdmFyMSA+PiB2YXIyIHdoZW4g dXBwZXIodmFyMikgPCBsb3dlcih2YXIxKSAqLworCQkJCXNlbGVjID0gY2FsY19oaXN0X2pvaW5f c2VsZWN0aXZpdHkocm5nX3R5cGNhY2hlLAorCQkJCQkJCQkJCQkJICAgaGlzdDJfdXBwZXIsIG5o aXN0MiwKKwkJCQkJCQkJCQkJCSAgIGhpc3QxX2xvd2VyLCBuaGlzdDEpOworCQkJCWJyZWFrOwor CisJCQljYXNlIE9JRF9NVUxUSVJBTkdFX09WRVJMQVBTX0xFRlRfTVVMVElSQU5HRV9PUDoKKwkJ CWNhc2UgT0lEX01VTFRJUkFOR0VfT1ZFUkxBUFNfTEVGVF9SQU5HRV9PUDoKKwkJCWNhc2UgT0lE X1JBTkdFX09WRVJMQVBTX0xFRlRfTVVMVElSQU5HRV9PUDoKKwkJCQkvKiB2YXIxICY8IHZhcjIg d2hlbiB1cHBlcih2YXIxKSA8IHVwcGVyKHZhcjIpICovCisJCQkJc2VsZWMgPSBjYWxjX2hpc3Rf am9pbl9zZWxlY3Rpdml0eShybmdfdHlwY2FjaGUsCisJCQkJCQkJCQkJCQkgICBoaXN0MV91cHBl ciwgbmhpc3QxLAorCQkJCQkJCQkJCQkJICAgaGlzdDJfdXBwZXIsIG5oaXN0Mik7CisJCQkJYnJl YWs7CisKKwkJCWNhc2UgT0lEX01VTFRJUkFOR0VfT1ZFUkxBUFNfUklHSFRfTVVMVElSQU5HRV9P UDoKKwkJCWNhc2UgT0lEX01VTFRJUkFOR0VfT1ZFUkxBUFNfUklHSFRfUkFOR0VfT1A6CisJCQlj YXNlIE9JRF9SQU5HRV9PVkVSTEFQU19SSUdIVF9NVUxUSVJBTkdFX09QOgorCQkJCS8qIHZhcjEg Jj4gdmFyMiB3aGVuIGxvd2VyKHZhcjIpIDwgbG93ZXIodmFyMSkgKi8KKwkJCQlzZWxlYyA9IGNh bGNfaGlzdF9qb2luX3NlbGVjdGl2aXR5KHJuZ190eXBjYWNoZSwKKwkJCQkJCQkJCQkJCSAgIGhp c3QyX2xvd2VyLCBuaGlzdDIsCisJCQkJCQkJCQkJCQkgICBoaXN0MV9sb3dlciwgbmhpc3QxKTsK KwkJCQlicmVhazsKKworCQkJY2FzZSBPSURfTVVMVElSQU5HRV9NVUxUSVJBTkdFX0NPTlRBSU5F RF9PUDoKKwkJCWNhc2UgT0lEX01VTFRJUkFOR0VfUkFOR0VfQ09OVEFJTkVEX09QOgorCQkJY2Fz ZSBPSURfUkFOR0VfTVVMVElSQU5HRV9DT05UQUlORURfT1A6CisKKwkJCQkvKgorCQkJCSAqIHZh cjEgPEAgdmFyMiBpcyBlcXVpdmFsZW50IHRvIGxvd2VyKHZhcjIpIDw9IGxvd2VyKHZhcjEpCisJ CQkJICogYW5kIHVwcGVyKHZhcjEpIDw9IHVwcGVyKHZhcjIpCisJCQkJICoKKwkJCQkgKiBBZnRl ciBuZWdhdGluZyBib3RoIHNpZGVzIHdlIGdldCBub3QoIGxvd2VyKHZhcjEpIDwKKwkJCQkgKiBs b3dlcih2YXIyKSApIGFuZCBub3QoIHVwcGVyKHZhcjIpIDwgdXBwZXIodmFyMSkgKSwKKwkJCQkg KiByZXNwZWN0aXZlbHkuIEFzc3VtaW5nIGluZGVwZW5kZW5jZSwgbXVsdGlwbHkgYm90aAorCQkJ CSAqIHNlbGVjdGl2aXRpZXMuCisJCQkJICovCisJCQkJc2VsZWMgPSAxIC0gY2FsY19oaXN0X2pv aW5fc2VsZWN0aXZpdHkocm5nX3R5cGNhY2hlLAorCQkJCQkJCQkJCQkJCSAgIGhpc3QxX2xvd2Vy LCBuaGlzdDEsCisJCQkJCQkJCQkJCQkJICAgaGlzdDJfbG93ZXIsIG5oaXN0Mik7CisJCQkJc2Vs ZWMgKj0gMSAtIGNhbGNfaGlzdF9qb2luX3NlbGVjdGl2aXR5KHJuZ190eXBjYWNoZSwKKwkJCQkJ CQkJCQkJCQkJaGlzdDJfdXBwZXIsIG5oaXN0MiwKKwkJCQkJCQkJCQkJCQkJaGlzdDFfdXBwZXIs IG5oaXN0MSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgT0lEX01VTFRJUkFOR0VfQ09OVEFJTlNf TVVMVElSQU5HRV9PUDoKKwkJCWNhc2UgT0lEX01VTFRJUkFOR0VfQ09OVEFJTlNfUkFOR0VfT1A6 CisJCQljYXNlIE9JRF9SQU5HRV9DT05UQUlOU19NVUxUSVJBTkdFX09QOgorCisJCQkJLyoKKwkJ CQkgKiB2YXIxIEA+IHZhcjIgaXMgZXF1aXZhbGVudCB0byBsb3dlcih2YXIxKSA8PSBsb3dlcih2 YXIyKQorCQkJCSAqIGFuZCB1cHBlcih2YXIyKSA8PSB1cHBlcih2YXIxKQorCQkJCSAqCisJCQkJ ICogQWZ0ZXIgbmVnYXRpbmcgYm90aCBzaWRlcyB3ZSBnZXQgbm90KCBsb3dlcih2YXIyKSA8CisJ CQkJICogbG93ZXIodmFyMSkgKSBhbmQgbm90KCB1cHBlcih2YXIxKSA8IHVwcGVyKHZhcjIpICks CisJCQkJICogcmVzcGVjdGl2ZWx5LiBBc3N1bWluZyBpbmRlcGVuZGVuY2UsIG11bHRpcGx5IGJv dGgKKwkJCQkgKiBzZWxlY3Rpdml0aWVzLgorCQkJCSAqLworCQkJCXNlbGVjID0gMSAtIGNhbGNf aGlzdF9qb2luX3NlbGVjdGl2aXR5KHJuZ190eXBjYWNoZSwKKwkJCQkJCQkJCQkJCQkgICBoaXN0 Ml9sb3dlciwgbmhpc3QyLAorCQkJCQkJCQkJCQkJCSAgIGhpc3QxX2xvd2VyLCBuaGlzdDEpOwor CQkJCXNlbGVjICo9IDEgLSBjYWxjX2hpc3Rfam9pbl9zZWxlY3Rpdml0eShybmdfdHlwY2FjaGUs CisJCQkJCQkJCQkJCQkJCWhpc3QxX3VwcGVyLCBuaGlzdDEsCisJCQkJCQkJCQkJCQkJCWhpc3Qy X3VwcGVyLCBuaGlzdDIpOworCQkJCWJyZWFrOworCisJCQljYXNlIE9JRF9NVUxUSVJBTkdFX0FE SkFDRU5UX01VTFRJUkFOR0VfT1A6CisJCQljYXNlIE9JRF9NVUxUSVJBTkdFX0FESkFDRU5UX1JB TkdFX09QOgorCQkJY2FzZSBPSURfUkFOR0VfQURKQUNFTlRfTVVMVElSQU5HRV9PUDoKKworCQkJ CS8qCisJCQkJICoganVzdCBwdW50IGZvciBub3csIGVzdGltYXRpb24gd291bGQgcmVxdWlyZSBl cXVhbGl0eQorCQkJCSAqIHNlbGVjdGl2aXR5IGZvciBib3VuZHMKKwkJCQkgKi8KKwkJCWNhc2Ug T0lEX01VTFRJUkFOR0VfQ09OVEFJTlNfRUxFTV9PUDoKKwkJCWNhc2UgT0lEX01VTFRJUkFOR0Vf RUxFTV9DT05UQUlORURfT1A6CisKKwkJCQkvKgorCQkJCSAqIGp1c3QgcHVudCBmb3Igbm93LCBl c3RpbWF0aW9uIHdvdWxkIHJlcXVpcmUgZXh0cmFjdGlvbiBvZgorCQkJCSAqIGhpc3RvZ3JhbXMg Zm9yIHRoZSBhbnllbGVtZW50CisJCQkJICovCisJCQlkZWZhdWx0OgorCQkJCWJyZWFrOworCQl9 CisKKworCQkvKiB0aGUgY2FsY3VsYXRlZCBzZWxlY3Rpdml0eSBvbmx5IGFwcGxpZXMgdG8gbm9u LWVtcHR5IChtdWx0aSlyYW5nZXMgKi8KKwkJc2VsZWMgKj0gKDEgLSBlbXB0eV9mcmFjMSkgKiAo MSAtIGVtcHR5X2ZyYWMyKTsKKworCQkvKgorCQkgKiBEZXBlbmRpbmcgb24gdGhlIG9wZXJhdG9y LCBlbXB0eSAobXVsdGkpcmFuZ2VzIG1pZ2h0IG1hdGNoCisJCSAqIGRpZmZlcmVudCBmcmFjdGlv bnMgb2YgdGhlIHJlc3VsdC4KKwkJICovCisJCXN3aXRjaCAob3BlcmF0b3IpCisJCXsKKwkJCWNh c2UgT0lEX01VTFRJUkFOR0VfTEVTU19PUDoKKworCQkJCS8qCisJCQkJICogZW1wdHkgKG11bHRp KXJhbmdlIDwgbm9uLWVtcHR5IChtdWx0aSlyYW5nZQorCQkJCSAqLworCQkJCXNlbGVjICs9IGVt cHR5X2ZyYWMxICogKDEgLSBlbXB0eV9mcmFjMik7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgT0lE X01VTFRJUkFOR0VfR1JFQVRFUl9PUDoKKworCQkJCS8qCisJCQkJICogbm9uLWVtcHR5IChtdWx0 aSlyYW5nZSA+IGVtcHR5IChtdWx0aSlyYW5nZQorCQkJCSAqLworCQkJCXNlbGVjICs9ICgxIC0g ZW1wdHlfZnJhYzEpICogZW1wdHlfZnJhYzI7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgT0lEX01V TFRJUkFOR0VfTVVMVElSQU5HRV9DT05UQUlORURfT1A6CisJCQljYXNlIE9JRF9NVUxUSVJBTkdF X1JBTkdFX0NPTlRBSU5FRF9PUDoKKwkJCWNhc2UgT0lEX1JBTkdFX01VTFRJUkFOR0VfQ09OVEFJ TkVEX09QOgorCisJCQkJLyoKKwkJCQkgKiBlbXB0eSAobXVsdGkpcmFuZ2UgPEAgYW55IChtdWx0 aSlyYW5nZQorCQkJCSAqLworCQkJY2FzZSBPSURfTVVMVElSQU5HRV9MRVNTX0VRVUFMX09QOgor CisJCQkJLyoKKwkJCQkgKiBlbXB0eSAobXVsdGkpcmFuZ2UgPD0gYW55IChtdWx0aSlyYW5nZQor CQkJCSAqLworCQkJCXNlbGVjICs9IGVtcHR5X2ZyYWMxOworCQkJCWJyZWFrOworCisJCQljYXNl IE9JRF9NVUxUSVJBTkdFX0NPTlRBSU5TX01VTFRJUkFOR0VfT1A6CisJCQljYXNlIE9JRF9NVUxU SVJBTkdFX0NPTlRBSU5TX1JBTkdFX09QOgorCQkJY2FzZSBPSURfUkFOR0VfQ09OVEFJTlNfTVVM VElSQU5HRV9PUDoKKworCQkJCS8qCisJCQkJICogYW55IChtdWx0aSlyYW5nZSBAPiBlbXB0eSAo bXVsdGkpcmFuZ2UKKwkJCQkgKi8KKwkJCWNhc2UgT0lEX01VTFRJUkFOR0VfR1JFQVRFUl9FUVVB TF9PUDoKKworCQkJCS8qCisJCQkJICogYW55IChtdWx0aSlyYW5nZSA+PSBlbXB0eSAobXVsdGkp cmFuZ2UKKwkJCQkgKi8KKwkJCQlzZWxlYyArPSBlbXB0eV9mcmFjMjsKKwkJCQlicmVhazsKKwor CQkJY2FzZSBPSURfTVVMVElSQU5HRV9DT05UQUlOU19FTEVNX09QOgorCQkJY2FzZSBPSURfTVVM VElSQU5HRV9FTEVNX0NPTlRBSU5FRF9PUDoKKwkJCWNhc2UgT0lEX01VTFRJUkFOR0VfT1ZFUkxB UFNfTVVMVElSQU5HRV9PUDoKKwkJCWNhc2UgT0lEX01VTFRJUkFOR0VfT1ZFUkxBUFNfUkFOR0Vf T1A6CisJCQljYXNlIE9JRF9SQU5HRV9PVkVSTEFQU19NVUxUSVJBTkdFX09QOgorCQkJY2FzZSBP SURfTVVMVElSQU5HRV9PVkVSTEFQU19MRUZUX01VTFRJUkFOR0VfT1A6CisJCQljYXNlIE9JRF9N VUxUSVJBTkdFX09WRVJMQVBTX0xFRlRfUkFOR0VfT1A6CisJCQljYXNlIE9JRF9SQU5HRV9PVkVS TEFQU19MRUZUX01VTFRJUkFOR0VfT1A6CisJCQljYXNlIE9JRF9NVUxUSVJBTkdFX09WRVJMQVBT X1JJR0hUX01VTFRJUkFOR0VfT1A6CisJCQljYXNlIE9JRF9NVUxUSVJBTkdFX09WRVJMQVBTX1JJ R0hUX1JBTkdFX09QOgorCQkJY2FzZSBPSURfUkFOR0VfT1ZFUkxBUFNfUklHSFRfTVVMVElSQU5H RV9PUDoKKwkJCWNhc2UgT0lEX01VTFRJUkFOR0VfTEVGVF9NVUxUSVJBTkdFX09QOgorCQkJY2Fz ZSBPSURfTVVMVElSQU5HRV9MRUZUX1JBTkdFX09QOgorCQkJY2FzZSBPSURfUkFOR0VfTEVGVF9N VUxUSVJBTkdFX09QOgorCQkJY2FzZSBPSURfTVVMVElSQU5HRV9SSUdIVF9NVUxUSVJBTkdFX09Q OgorCQkJY2FzZSBPSURfTVVMVElSQU5HRV9SSUdIVF9SQU5HRV9PUDoKKwkJCWNhc2UgT0lEX1JB TkdFX1JJR0hUX01VTFRJUkFOR0VfT1A6CisJCQljYXNlIE9JRF9NVUxUSVJBTkdFX0FESkFDRU5U X01VTFRJUkFOR0VfT1A6CisJCQljYXNlIE9JRF9NVUxUSVJBTkdFX0FESkFDRU5UX1JBTkdFX09Q OgorCQkJY2FzZSBPSURfUkFOR0VfQURKQUNFTlRfTVVMVElSQU5HRV9PUDoKKwkJCWRlZmF1bHQ6 CisKKwkJCQkvKgorCQkJCSAqIHRoZXNlIG9wZXJhdG9ycyBhbHdheXMgcmV0dXJuIGZhbHNlIHdo ZW4gYW4gZW1wdHkKKwkJCQkgKiAobXVsdGkpcmFuZ2UgaXMgaW52b2x2ZWQKKwkJCQkgKi8KKwkJ CQlicmVhazsKKworCQl9CisKKwkJLyogYWxsIHJhbmdlIG9wZXJhdG9ycyBhcmUgc3RyaWN0ICov CisJCXNlbGVjICo9ICgxIC0gbnVsbF9mcmFjMSkgKiAoMSAtIG51bGxfZnJhYzIpOworCisJCWZy ZWVfYXR0c3RhdHNzbG90KCZoaXN0MSk7CisJCWZyZWVfYXR0c3RhdHNzbG90KCZoaXN0Mik7CisJ fQorCisJUmVsZWFzZVZhcmlhYmxlU3RhdHModmFyZGF0YTEpOworCVJlbGVhc2VWYXJpYWJsZVN0 YXRzKHZhcmRhdGEyKTsKKworCUNMQU1QX1BST0JBQklMSVRZKHNlbGVjKTsKKworCVBHX1JFVFVS Tl9GTE9BVDgoKGZsb2F0OCkgc2VsZWMpOworCit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91 dGlscy9hZHQvcmFuZ2V0eXBlc19zZWxmdW5jcy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3Jh bmdldHlwZXNfc2VsZnVuY3MuYwppbmRleCBjMjc5NWY0NTkzLi4wMDdlMTRiY2Y2IDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvcmFuZ2V0eXBlc19zZWxmdW5jcy5jCisrKyBiL3Ny Yy9iYWNrZW5kL3V0aWxzL2FkdC9yYW5nZXR5cGVzX3NlbGZ1bmNzLmMKQEAgLTEyMjEsMyArMTIy MSw1MDkgQEAgY2FsY19oaXN0X3NlbGVjdGl2aXR5X2NvbnRhaW5zKFR5cGVDYWNoZUVudHJ5ICp0 eXBjYWNoZSwKIAogCXJldHVybiBzdW1fZnJhYzsKIH0KKworLyoKKyAqIFRoaXMgaXMgYSB1dGls aXR5IGZ1bmN0aW9uIHVzZWQgdG8gZXN0aW1hdGUgdGhlIGpvaW4gc2VsZWN0aXZpdHkgb2YKKyAq IHJhbmdlIGF0dHJpYnV0ZXMgdXNpbmcgcmFuZ2Vib3VuZCBoaXN0b2dyYW0gc3RhdGlzdGljcyBh cyBkZXNjcmliZWQKKyAqIGluIHRoaXMgcGFwZXI6CisgKgorICogRGlvZ28gUmVwYXMsIFpoaWNo ZW5nIEx1bywgTWF4aW1lIFNjaG9lbWFucyBhbmQgTWFobW91ZCBTYWtyLCAyMDIyCisgKiBTZWxl Y3Rpdml0eSBFc3RpbWF0aW9uIG9mIEluZXF1YWxpdHkgSm9pbnMgSW4gRGF0YWJhc2VzCisgKiBo dHRwczovL2RvaS5vcmcvMTAuNDg1NTAvYXJYaXYuMjIwNi4wNzM5NgorICoKKyAqIFRoZSBhdHRy aWJ1dGVzIGJlaW5nIGpvaW5lZCB3aWxsIGJlIHRyZWF0ZWQgYXMgcmFuZG9tIHZhcmlhYmxlcwor ICogdGhhdCBmb2xsb3cgYSBkaXN0cmlidXRpb24gbW9kZWxlZCBieSBhIFByb2JhYmlsaXR5IERl bnNpdHkgRnVuY3Rpb24gKFBERikuCisgKiBMZXQgdGhlIHR3byBhdHRyaWJ1dGVzIGJlIGRlbm90 ZWQgWCwgWS4KKyAqIFRoaXMgZnVuY3Rpb24gZmluZHMgdGhlIHByb2JhYmlsaXR5IFAoWCA8IFkp LgorICogTm90ZSB0aGF0IHRoZSBQREZzIG9mIHRoZSB0d28gdmFyaWFibGVzIGNhbiBlYXNpbHkg YmUgb2J0YWluZWQKKyAqIGZyb20gdGhlaXIgYm91bmRzIGhpc3RvZ3JhbSwgcmVzcGVjdGl2ZWx5 IGhpc3QxIGFuZCBoaXN0MiAuCisgKgorICogTGV0IHRoZSBQREYgb2YgWCwgWSBiZSBkZW5vdGVk IGFzIGZfWCwgZl9ZLgorICogVGhlIHByb2JhYmlsaXR5IFAoWCA8IFkpIGNhbiBiZSBmb3JtYWxp emVkIGFzIGZvbGxvd3M6CisgKiBQKFggPCBZKT0gaW50ZWdyYWxfLWluZl5pbmYoIGludGVncmFs Xy1pbmZeeSAoIGZfWCh4KSAqIGZfWSh5KSBkeCBkeSApICkKKyAqICAgICAgICAgICAgICAgID0g aW50ZWdyYWxfLWluZl5pbmYoIEZfWCh5KSAqIGZfWSh5KSBkeSApCisgKiB3aGVyZSBGX1goeSkg ZGVub3RlIHRoZSBDdW11bGF0aXZlIERpc3RyaWJ1dGlvbiBGdW5jdGlvbiBvZiBYIGF0IHkuCisg KiBOb3RlIHRoYXQgRl9YIGlzIHRoZSBzZWxlY3Rpdml0eSBlc3RpbWF0aW9uIChub24tam9pbiks CisgKiB3aGljaCBpcyBpbXBsZW1lbnRlZCB1c2luZyB0aGUgZnVuY3Rpb24gY2FsY19oaXN0X3Nl bGVjdGl2aXR5X3NjYWxhci4KKyAqCisgKiBOb3cgZ2l2ZW4gdGhlIGhpc3RvZ3JhbXMgb2YgdGhl IHR3byBhdHRyaWJ1dGVzIFgsIFksIHdlIG5vdGUgdGhlIGZvbGxvd2luZzoKKyAqIC0gVGhlIFBE RiBvZiBZIGlzIGEgc3RlcCBmdW5jdGlvbgorICoJKGNvbnN0YW50IHBpZWNlLXdpc2UsIHdoZXJl IGVhY2ggcGllY2UgaXMgZGVmaW5lZCBpbiBhIGJpbiBvZiBZJ3MgaGlzdG9ncmFtKQorICogLSBU aGUgQ0RGIG9mIFggaXMgbGluZWFyIHBpZWNlLXdpc2UKKyAqIAkoZWFjaCBwaWVjZSBpcyBkZWZp bmVkIGluIGEgYmluIG9mIFgncyBoaXN0b2dyYW0pCisgKiBUaGlzIGxlYWRzIHRvIHRoZSBjb25j bHVzaW9uIHRoYXQgdGhlaXIgcHJvZHVjdAorICogKHVzZWQgdG8gY2FsY3VsYXRlIHRoZSBlcXVh dGlvbiBhYm92ZSkgaXMgYWxzbyBsaW5lYXIgcGllY2Utd2lzZS4KKyAqIEEgbmV3IHBpZWNlIHN0 YXJ0cyB3aGVuZXZlciBlaXRoZXIgdGhlIGJpbiBvZiBYIG9yIHRoZSBiaW4gb2YgWSBjaGFuZ2Vz LgorICogQnkgcGFyYWxsZWwgc2Nhbm5pbmcgdGhlIHR3byByYW5nZWJvdW5kIGhpc3RvZ3JhbXMg b2YgWCBhbmQgWSwKKyAqIHdlIGV2YWx1YXRlIG9uZSBwaWVjZSBvZiB0aGUgcmVzdWx0IGJldHdl ZW4gZXZlcnkgdHdvIGNvbnNlY3V0aXZlIHJhbmdlYm91bmRzCisgKiBpbiB0aGUgdW5pb24gb2Yg dGhlIHR3byBoaXN0b2dyYW1zLgorICoKKyAqIEdpdmVuIHRoYXQgdGhlIHByb2R1Y3QgRl9YICog Zl95IGlzIGxpbmVhciBpbiB0aGUgaW50ZXJ2YWwKKyAqIGJldHdlZW4gZXZlcnkgdHdvIGNvbnNl Y3V0aXZlIHJhbmdlYm91bmRzLCBsZXQgdGhlbSBiZSBkZW5vdGVkIHByZXYsIGN1ciwKKyAqIGl0 IGNhbiBiZSBzaG93biB0aGF0IHRoZSBhYm92ZSBmb3JtdWxhIGNhbiBiZSBkaXNjcmV0aXplZCBp bnRvIHRoZSBmb2xsb3dpbmc6CisgKiBQKFggPCBZKSA9IAorICogICAwLjUgKiBzdW1fMF57bitt LTF9ICggKCBGX1gocHJldikgKyBGX1goY3VyKSApICogKCBGX1koY3VyKSAtIEZfWShwcmV2KSAp ICkKKyAqIHdoZXJlIG4sIG0gYXJlIHRoZSBsZW5ndGhzIG9mIHRoZSB0d28gaGlzdG9ncmFtcy4K KyAqCisgKiBBcyBzdWNoLCBpdCBpcyBwb3NzaWJsZSB0byBmdWxseSBjb21wdXRlIHRoZSBqb2lu IHNlbGVjdGl2aXR5CisgKiBhcyBhIHN1bW1hdGlvbiBvZiBDREZzLCBpdGVyYXRpbmcgb3ZlciB0 aGUgYm91bmRzIG9mIHRoZSB0d28gaGlzdG9ncmFtcy4KKyAqIFRoaXMgbWF4aW1pemVzIHRoZSBj b2RlIHJldXNlLCBzaW5jZSB0aGUgQ0RGIGlzIGNvbXB1dGVkIHVzaW5nCisgKiB0aGUgY2FsY19o aXN0X3NlbGVjdGl2aXR5X3NjYWxhciBmdW5jdGlvbiwgd2hpY2ggaXMgdGhlIGZ1bmN0aW9uIHVz ZWQKKyAqIGZvciBzZWxlY3Rpdml0eSBlc3RpbWF0aW9uIChub24tam9pbnMpLgorICoKKyAqLwor c3RhdGljIGRvdWJsZQorY2FsY19oaXN0X2pvaW5fc2VsZWN0aXZpdHkoVHlwZUNhY2hlRW50cnkg KnR5cGNhY2hlLAorCQkJCQkJICAgY29uc3QgUmFuZ2VCb3VuZCAqaGlzdDEsIGludCBuaGlzdDEs CisJCQkJCQkgICBjb25zdCBSYW5nZUJvdW5kICpoaXN0MiwgaW50IG5oaXN0MikKK3sKKwlpbnQJ CQlpLAorCQkJCWo7CisJZG91YmxlCQlzZWxlY3Rpdml0eSwKKwkJCQljdXJfc2VsMSwKKwkJCQlj dXJfc2VsMiwKKwkJCQlwcmV2X3NlbDEsCisJCQkJcHJldl9zZWwyOworCVJhbmdlQm91bmQJY3Vy X3N5bmM7CisKKwkvKgorCSAqIEhpc3RvZ3JhbXMgd2lsbCBuZXZlciBiZSBlbXB0eS4gSW4gZmFj dCwgYSBoaXN0b2dyYW0gd2lsbCBuZXZlciBoYXZlCisJICogbGVzcyB0aGFuIDIgdmFsdWVzICgx IGJpbikKKwkgKi8KKwlBc3NlcnQobmhpc3QxID4gMSk7CisJQXNzZXJ0KG5oaXN0MiA+IDEpOwor CisJLyogRmFzdC1mb3J3YXJkcyBpIGFuZCBqIHRvIHN0YXJ0IG9mIGl0ZXJhdGlvbiAqLworCWZv ciAoaSA9IDA7IHJhbmdlX2NtcF9ib3VuZF92YWx1ZXModHlwY2FjaGUsICZoaXN0MVtpXSwgJmhp c3QyWzBdKSA8IDA7IGkrKyk7CisJZm9yIChqID0gMDsgcmFuZ2VfY21wX2JvdW5kX3ZhbHVlcyh0 eXBjYWNoZSwgJmhpc3QyW2pdLCAmaGlzdDFbMF0pIDwgMDsgaisrKTsKKworCWlmIChyYW5nZV9j bXBfYm91bmRfdmFsdWVzKHR5cGNhY2hlLCAmaGlzdDFbaV0sICZoaXN0MltqXSkgPCAwKQorCQlj dXJfc3luYyA9IGhpc3QxW2krK107CisJZWxzZSBpZiAocmFuZ2VfY21wX2JvdW5kX3ZhbHVlcyh0 eXBjYWNoZSwgJmhpc3QxW2ldLCAmaGlzdDJbal0pID4gMCkKKwkJY3VyX3N5bmMgPSBoaXN0Mltq KytdOworCWVsc2UKKwl7CisJCS8qIElmIGVxdWFsLCBza2lwIG9uZSAqLworCQljdXJfc3luYyA9 IGhpc3QxW2ldOworCQlpKys7CisJCWorKzsKKwl9CisJcHJldl9zZWwxID0gY2FsY19oaXN0X3Nl bGVjdGl2aXR5X3NjYWxhcih0eXBjYWNoZSwgJmN1cl9zeW5jLAorCQkJCQkJCQkJCQkgaGlzdDEs IG5oaXN0MSwgZmFsc2UpOworCXByZXZfc2VsMiA9IGNhbGNfaGlzdF9zZWxlY3Rpdml0eV9zY2Fs YXIodHlwY2FjaGUsICZjdXJfc3luYywKKwkJCQkJCQkJCQkJIGhpc3QyLCBuaGlzdDIsIGZhbHNl KTsKKworCS8qCisJICogRG8gdGhlIGVzdGltYXRpb24gb24gb3ZlcmxhcHBpbmcgcmVnaW9uCisJ ICovCisJc2VsZWN0aXZpdHkgPSAwLjA7CisJd2hpbGUgKGkgPCBuaGlzdDEgJiYgaiA8IG5oaXN0 MikKKwl7CisJCWlmIChyYW5nZV9jbXBfYm91bmRfdmFsdWVzKHR5cGNhY2hlLCAmaGlzdDFbaV0s ICZoaXN0MltqXSkgPCAwKQorCQkJY3VyX3N5bmMgPSBoaXN0MVtpKytdOworCQllbHNlIGlmIChy YW5nZV9jbXBfYm91bmRfdmFsdWVzKHR5cGNhY2hlLCAmaGlzdDFbaV0sICZoaXN0MltqXSkgPiAw KQorCQkJY3VyX3N5bmMgPSBoaXN0MltqKytdOworCQllbHNlCisJCXsKKwkJCS8qIElmIGVxdWFs LCBza2lwIG9uZSAqLworCQkJY3VyX3N5bmMgPSBoaXN0MVtpXTsKKwkJCWkrKzsKKwkJCWorKzsK KwkJfQorCQljdXJfc2VsMSA9IGNhbGNfaGlzdF9zZWxlY3Rpdml0eV9zY2FsYXIodHlwY2FjaGUs ICZjdXJfc3luYywKKwkJCQkJCQkJCQkJCWhpc3QxLCBuaGlzdDEsIGZhbHNlKTsKKwkJY3VyX3Nl bDIgPSBjYWxjX2hpc3Rfc2VsZWN0aXZpdHlfc2NhbGFyKHR5cGNhY2hlLCAmY3VyX3N5bmMsCisJ CQkJCQkJCQkJCQloaXN0Miwgbmhpc3QyLCBmYWxzZSk7CisKKwkJc2VsZWN0aXZpdHkgKz0gKHBy ZXZfc2VsMSArIGN1cl9zZWwxKSAqIChjdXJfc2VsMiAtIHByZXZfc2VsMik7CisKKwkJLyogUHJl cGFyZSBmb3IgdGhlIG5leHQgaXRlcmF0aW9uICovCisJCXByZXZfc2VsMSA9IGN1cl9zZWwxOwor CQlwcmV2X3NlbDIgPSBjdXJfc2VsMjsKKwl9CisKKwkvKiBJbmNsdWRlIHJlbWFpbmRlciBvZiBo aXN0MiBpZiBhbnkgKi8KKwlpZiAoaiA8IG5oaXN0MikKKwkJc2VsZWN0aXZpdHkgKz0gMSAtIHBy ZXZfc2VsMjsKKworCXJldHVybiBzZWxlY3Rpdml0eSAvIDI7Cit9CisKKy8qCisgKiByYW5nZWpv aW5zZWwgLS0gam9pbiBjYXJkaW5hbGl0eSBmb3IgcmFuZ2Ugb3BlcmF0b3JzCisgKi8KK0RhdHVt CityYW5nZWpvaW5zZWwoUEdfRlVOQ1RJT05fQVJHUykKK3sKKwlQbGFubmVySW5mbyAqcm9vdCA9 IChQbGFubmVySW5mbyAqKSBQR19HRVRBUkdfUE9JTlRFUigwKTsKKwlPaWQJCQlvcGVyYXRvciA9 IFBHX0dFVEFSR19PSUQoMSk7CisJTGlzdAkgICAqYXJncyA9IChMaXN0ICopIFBHX0dFVEFSR19Q T0lOVEVSKDIpOworCVNwZWNpYWxKb2luSW5mbyAqc2ppbmZvID0gKFNwZWNpYWxKb2luSW5mbyAq KSBQR19HRVRBUkdfUE9JTlRFUig0KTsKKwlWYXJpYWJsZVN0YXREYXRhIHZhcmRhdGExLAorCQkJ CXZhcmRhdGEyOworCUF0dFN0YXRzU2xvdCBoaXN0MSwKKwkJCQloaXN0MiwKKwkJCQlzc2xvdDsK Kwlib29sCQlyZXZlcnNlZDsKKwlTZWxlY3Rpdml0eSBzZWxlYzsKKwlUeXBlQ2FjaGVFbnRyeSAq dHlwY2FjaGUgPSBOVUxMOworCUZvcm1fcGdfc3RhdGlzdGljIHN0YXRzMSwKKwkJCQlzdGF0czI7 CisJZG91YmxlCQllbXB0eV9mcmFjMSwKKwkJCQllbXB0eV9mcmFjMiwKKwkJCQludWxsX2ZyYWMx LAorCQkJCW51bGxfZnJhYzI7CisJaW50CQkJbmhpc3QxLAorCQkJCW5oaXN0MjsKKwlSYW5nZUJv dW5kICpoaXN0MV9sb3dlciwKKwkJCSAgICpoaXN0MV91cHBlciwKKwkJCSAgICpoaXN0Ml9sb3dl ciwKKwkJCSAgICpoaXN0Ml91cHBlcjsKKwlib29sCQllbXB0eTsKKwlpbnQJCQlpOworCisJZ2V0 X2pvaW5fdmFyaWFibGVzKHJvb3QsIGFyZ3MsIHNqaW5mbywgJnZhcmRhdGExLCAmdmFyZGF0YTIs ICZyZXZlcnNlZCk7CisKKwlzZWxlYyA9IGRlZmF1bHRfcmFuZ2Vfc2VsZWN0aXZpdHkob3BlcmF0 b3IpOworCisJaWYgKEhlYXBUdXBsZUlzVmFsaWQodmFyZGF0YTEuc3RhdHNUdXBsZSkgJiYKKwkJ Z2V0X2F0dHN0YXRzc2xvdCgmaGlzdDEsIHZhcmRhdGExLnN0YXRzVHVwbGUsCisJCQkJCQkgU1RB VElTVElDX0tJTkRfQk9VTkRTX0hJU1RPR1JBTSwgSW52YWxpZE9pZCwKKwkJCQkJCSBBVFRTVEFU U1NMT1RfVkFMVUVTKSAmJgorCQlIZWFwVHVwbGVJc1ZhbGlkKHZhcmRhdGEyLnN0YXRzVHVwbGUp ICYmCisJCWdldF9hdHRzdGF0c3Nsb3QoJmhpc3QyLCB2YXJkYXRhMi5zdGF0c1R1cGxlLAorCQkJ CQkJIFNUQVRJU1RJQ19LSU5EX0JPVU5EU19ISVNUT0dSQU0sIEludmFsaWRPaWQsCisJCQkJCQkg QVRUU1RBVFNTTE9UX1ZBTFVFUykgJiYKKwkJdmFyZGF0YTEudmFydHlwZSA9PSB2YXJkYXRhMi52 YXJ0eXBlKQorCXsKKworCQkvKiBJbml0aWFsaXplIHR5cGUgY2FjaGUgKi8KKwkJdHlwY2FjaGUg PSByYW5nZV9nZXRfdHlwY2FjaGUoZmNpbmZvLCB2YXJkYXRhMS52YXJ0eXBlKTsKKworCQkvKgor CQkgKiBGaXJzdCBsb29rIHVwIHRoZSBmcmFjdGlvbiBvZiBOVUxMcyBhbmQgZW1wdHkgcmFuZ2Vz IGZyb20KKwkJICogcGdfc3RhdGlzdGljLgorCQkgKi8KKwkJc3RhdHMxID0gKEZvcm1fcGdfc3Rh dGlzdGljKSBHRVRTVFJVQ1QodmFyZGF0YTEuc3RhdHNUdXBsZSk7CisJCXN0YXRzMiA9IChGb3Jt X3BnX3N0YXRpc3RpYykgR0VUU1RSVUNUKHZhcmRhdGEyLnN0YXRzVHVwbGUpOworCisJCW51bGxf ZnJhYzEgPSBzdGF0czEtPnN0YW51bGxmcmFjOworCQludWxsX2ZyYWMyID0gc3RhdHMyLT5zdGFu dWxsZnJhYzsKKworCQkvKiBUcnkgdG8gZ2V0IGZyYWN0aW9uIG9mIGVtcHR5IHJhbmdlcyBmb3Ig dGhlIGZpcnN0IHZhcmlhYmxlICovCisJCWlmIChnZXRfYXR0c3RhdHNzbG90KCZzc2xvdCwgdmFy ZGF0YTEuc3RhdHNUdXBsZSwKKwkJCQkJCQkgU1RBVElTVElDX0tJTkRfUkFOR0VfTEVOR1RIX0hJ U1RPR1JBTSwKKwkJCQkJCQkgSW52YWxpZE9pZCwKKwkJCQkJCQkgQVRUU1RBVFNTTE9UX05VTUJF UlMpKQorCQl7CisJCQlpZiAoc3Nsb3Qubm51bWJlcnMgIT0gMSkJLyogc2hvdWxkbid0IGhhcHBl biAqLworCQkJCWVsb2coRVJST1IsICJpbnZhbGlkIGVtcHR5IGZyYWN0aW9uIHN0YXRpc3RpYyIp OworCQkJZW1wdHlfZnJhYzEgPSBzc2xvdC5udW1iZXJzWzBdOworCQkJZnJlZV9hdHRzdGF0c3Ns b3QoJnNzbG90KTsKKwkJfQorCQllbHNlCisJCXsKKwkJCS8qIE5vIGVtcHR5IGZyYWN0aW9uIHN0 YXRpc3RpYy4gQXNzdW1lIG5vIGVtcHR5IHJhbmdlcy4gKi8KKwkJCWVtcHR5X2ZyYWMxID0gMC4w OworCQl9CisKKwkJLyogVHJ5IHRvIGdldCBmcmFjdGlvbiBvZiBlbXB0eSByYW5nZXMgZm9yIHRo ZSBzZWNvbmQgdmFyaWFibGUgKi8KKwkJaWYgKGdldF9hdHRzdGF0c3Nsb3QoJnNzbG90LCB2YXJk YXRhMi5zdGF0c1R1cGxlLAorCQkJCQkJCSBTVEFUSVNUSUNfS0lORF9SQU5HRV9MRU5HVEhfSElT VE9HUkFNLAorCQkJCQkJCSBJbnZhbGlkT2lkLAorCQkJCQkJCSBBVFRTVEFUU1NMT1RfTlVNQkVS UykpCisJCXsKKwkJCWlmIChzc2xvdC5ubnVtYmVycyAhPSAxKQkvKiBzaG91bGRuJ3QgaGFwcGVu ICovCisJCQkJZWxvZyhFUlJPUiwgImludmFsaWQgZW1wdHkgZnJhY3Rpb24gc3RhdGlzdGljIik7 CisJCQllbXB0eV9mcmFjMiA9IHNzbG90Lm51bWJlcnNbMF07CisJCQlmcmVlX2F0dHN0YXRzc2xv dCgmc3Nsb3QpOworCQl9CisJCWVsc2UKKwkJeworCQkJLyogTm8gZW1wdHkgZnJhY3Rpb24gc3Rh dGlzdGljLiBBc3N1bWUgbm8gZW1wdHkgcmFuZ2VzLiAqLworCQkJZW1wdHlfZnJhYzIgPSAwLjA7 CisJCX0KKworCQkvKgorCQkgKiBDb252ZXJ0IGhpc3RvZ3JhbXMgb2YgcmFuZ2VzIGludG8gaGlz dG9ncmFtcyBvZiB0aGVpciBsb3dlciBhbmQKKwkJICogdXBwZXIgYm91bmRzIGZvciB0aGUgZmly c3QgdmFyaWFibGUuCisJCSAqLworCQluaGlzdDEgPSBoaXN0MS5udmFsdWVzOworCQloaXN0MV9s b3dlciA9IChSYW5nZUJvdW5kICopIHBhbGxvYyhzaXplb2YoUmFuZ2VCb3VuZCkgKiBuaGlzdDEp OworCQloaXN0MV91cHBlciA9IChSYW5nZUJvdW5kICopIHBhbGxvYyhzaXplb2YoUmFuZ2VCb3Vu ZCkgKiBuaGlzdDEpOworCQlmb3IgKGkgPSAwOyBpIDwgbmhpc3QxOyBpKyspCisJCXsKKwkJCXJh bmdlX2Rlc2VyaWFsaXplKHR5cGNhY2hlLCBEYXR1bUdldFJhbmdlVHlwZVAoaGlzdDEudmFsdWVz W2ldKSwKKwkJCQkJCQkgICZoaXN0MV9sb3dlcltpXSwgJmhpc3QxX3VwcGVyW2ldLCAmZW1wdHkp OworCQkJLyogVGhlIGhpc3RvZ3JhbSBzaG91bGQgbm90IGNvbnRhaW4gYW55IGVtcHR5IHJhbmdl cyAqLworCQkJaWYgKGVtcHR5KQorCQkJCWVsb2coRVJST1IsICJib3VuZHMgaGlzdG9ncmFtIGNv bnRhaW5zIGFuIGVtcHR5IHJhbmdlIik7CisJCX0KKworCQkvKgorCQkgKiBDb252ZXJ0IGhpc3Rv Z3JhbXMgb2YgcmFuZ2VzIGludG8gaGlzdG9ncmFtcyBvZiB0aGVpciBsb3dlciBhbmQKKwkJICog dXBwZXIgYm91bmRzIGZvciB0aGUgc2Vjb25kIHZhcmlhYmxlLgorCQkgKi8KKwkJbmhpc3QyID0g aGlzdDIubnZhbHVlczsKKwkJaGlzdDJfbG93ZXIgPSAoUmFuZ2VCb3VuZCAqKSBwYWxsb2Moc2l6 ZW9mKFJhbmdlQm91bmQpICogbmhpc3QyKTsKKwkJaGlzdDJfdXBwZXIgPSAoUmFuZ2VCb3VuZCAq KSBwYWxsb2Moc2l6ZW9mKFJhbmdlQm91bmQpICogbmhpc3QyKTsKKwkJZm9yIChpID0gMDsgaSA8 IG5oaXN0MjsgaSsrKQorCQl7CisJCQlyYW5nZV9kZXNlcmlhbGl6ZSh0eXBjYWNoZSwgRGF0dW1H ZXRSYW5nZVR5cGVQKGhpc3QyLnZhbHVlc1tpXSksCisJCQkJCQkJICAmaGlzdDJfbG93ZXJbaV0s ICZoaXN0Ml91cHBlcltpXSwgJmVtcHR5KTsKKwkJCS8qIFRoZSBoaXN0b2dyYW0gc2hvdWxkIG5v dCBjb250YWluIGFueSBlbXB0eSByYW5nZXMgKi8KKwkJCWlmIChlbXB0eSkKKwkJCQllbG9nKEVS Uk9SLCAiYm91bmRzIGhpc3RvZ3JhbSBjb250YWlucyBhbiBlbXB0eSByYW5nZSIpOworCQl9CisK KwkJc3dpdGNoIChvcGVyYXRvcikKKwkJeworCQkJY2FzZSBPSURfUkFOR0VfT1ZFUkxBUF9PUDoK KworCQkJCS8qCisJCQkJICogU2VsZWN0aXZpdHkgb2YgQSAmJiBCID0gU2VsZWN0aXZpdHkgb2Yg Tk9UKCBBIDw8IEIgfHwgQSA+PgorCQkJCSAqIEIgKSA9IDEgLSBTZWxlY3Rpdml0eSBvZiAoQS51 cHBlciA8IEIubG93ZXIpIC0gU2VsZWN0aXZpdHkKKwkJCQkgKiBvZiAoQi51cHBlciA8IEEubG93 ZXIpCisJCQkJICovCisJCQkJc2VsZWMgPSAxOworCQkJCXNlbGVjIC09IGNhbGNfaGlzdF9qb2lu X3NlbGVjdGl2aXR5KHR5cGNhY2hlLAorCQkJCQkJCQkJCQkJCWhpc3QxX3VwcGVyLCBuaGlzdDEs CisJCQkJCQkJCQkJCQkJaGlzdDJfbG93ZXIsIG5oaXN0Mik7CisJCQkJc2VsZWMgLT0gY2FsY19o aXN0X2pvaW5fc2VsZWN0aXZpdHkodHlwY2FjaGUsCisJCQkJCQkJCQkJCQkJaGlzdDJfdXBwZXIs IG5oaXN0MiwKKwkJCQkJCQkJCQkJCQloaXN0MV9sb3dlciwgbmhpc3QxKTsKKwkJCQlicmVhazsK KworCQkJY2FzZSBPSURfUkFOR0VfTEVTU19FUVVBTF9PUDoKKworCQkJCS8qCisJCQkJICogQSA8 PSBCCisJCQkJICoKKwkJCQkgKiBTdGFydCBieSBjb21wYXJpbmcgbG93ZXIgYm91bmRzIGFuZCBp ZiB0aGV5IGFyZSBlcXVhbAorCQkJCSAqIGNvbXBhcmUgdXBwZXIgYm91bmRzCisJCQkJICoKKwkJ CQkgKiBOZWdhdGlvbiBvZiBPSURfUkFOR0VfR1JFQVRFUl9PUC4KKwkJCQkgKgorCQkJCSAqIE92 ZXJlc3RpbWF0ZSBieSBjb21wYXJpbmcgb25seSB0aGUgbG93ZXIgYm91bmRzLiBIaWdoZXIKKwkJ CQkgKiBhY2N1cmFjeSB3b3VsZCByZXF1aXJlIHVzIHRvIHN1YnRyYWN0IFAobG93ZXIxID0gbG93 ZXIyKSAqCisJCQkJICogUCh1cHBlcjEgPiB1cHBlcjIpCisJCQkJICovCisJCQkJc2VsZWMgPSAx IC0gY2FsY19oaXN0X2pvaW5fc2VsZWN0aXZpdHkodHlwY2FjaGUsCisJCQkJCQkJCQkJCQkJICAg aGlzdDJfbG93ZXIsIG5oaXN0MiwKKwkJCQkJCQkJCQkJCQkgICBoaXN0MV9sb3dlciwgbmhpc3Qx KTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBPSURfUkFOR0VfTEVTU19PUDoKKworCQkJCS8qCisJ CQkJICogQSA8IEIKKwkJCQkgKgorCQkJCSAqIFN0YXJ0IGJ5IGNvbXBhcmluZyBsb3dlciBib3Vu ZHMgYW5kIGlmIHRoZXkgYXJlIGVxdWFsCisJCQkJICogY29tcGFyZSB1cHBlciBib3VuZHMKKwkJ CQkgKgorCQkJCSAqIFVuZGVyZXN0aW1hdGUgYnkgY29tcGFyaW5nIG9ubHkgdGhlIGxvd2VyIGJv dW5kcy4gSGlnaGVyCisJCQkJICogYWNjdXJhY3kgd291bGQgcmVxdWlyZSB1cyB0byBhZGQgUChs b3dlcjEgPSBsb3dlcjIpICoKKwkJCQkgKiBQKHVwcGVyMSA8IHVwcGVyMikKKwkJCQkgKi8KKwkJ CQlzZWxlYyA9IGNhbGNfaGlzdF9qb2luX3NlbGVjdGl2aXR5KHR5cGNhY2hlLAorCQkJCQkJCQkJ CQkJICAgaGlzdDFfbG93ZXIsIG5oaXN0MSwKKwkJCQkJCQkJCQkJCSAgIGhpc3QyX2xvd2VyLCBu aGlzdDIpOworCQkJCWJyZWFrOworCisJCQljYXNlIE9JRF9SQU5HRV9HUkVBVEVSX0VRVUFMX09Q OgorCisJCQkJLyoKKwkJCQkgKiBBID49IEIKKwkJCQkgKgorCQkJCSAqIFN0YXJ0IGJ5IGNvbXBh cmluZyBsb3dlciBib3VuZHMgYW5kIGlmIHRoZXkgYXJlIGVxdWFsCisJCQkJICogY29tcGFyZSB1 cHBlciBib3VuZHMKKwkJCQkgKgorCQkJCSAqIE5lZ2F0aW9uIG9mIE9JRF9SQU5HRV9MRVNTX09Q LgorCQkJCSAqCisJCQkJICogT3ZlcmVzdGltYXRlIGJ5IGNvbXBhcmluZyBvbmx5IHRoZSBsb3dl ciBib3VuZHMuIEhpZ2hlcgorCQkJCSAqIGFjY3VyYWN5IHdvdWxkIHJlcXVpcmUgdXMgdG8gYWRk IFAobG93ZXIxID0gbG93ZXIyKSAqCisJCQkJICogUCh1cHBlcjEgPCB1cHBlcjIpCisJCQkJICov CisJCQkJc2VsZWMgPSAxIC0gY2FsY19oaXN0X2pvaW5fc2VsZWN0aXZpdHkodHlwY2FjaGUsCisJ CQkJCQkJCQkJCQkJICAgaGlzdDFfbG93ZXIsIG5oaXN0MSwKKwkJCQkJCQkJCQkJCQkgICBoaXN0 Ml9sb3dlciwgbmhpc3QyKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBPSURfUkFOR0VfR1JFQVRF Ul9PUDoKKworCQkJCS8qCisJCQkJICogQSA+IEIgPT0gQiA8IEEKKwkJCQkgKgorCQkJCSAqIFN0 YXJ0IGJ5IGNvbXBhcmluZyBsb3dlciBib3VuZHMgYW5kIGlmIHRoZXkgYXJlIGVxdWFsCisJCQkJ ICogY29tcGFyZSB1cHBlciBib3VuZHMKKwkJCQkgKgorCQkJCSAqIFVuZGVyZXN0aW1hdGUgYnkg Y29tcGFyaW5nIG9ubHkgdGhlIGxvd2VyIGJvdW5kcy4gSGlnaGVyCisJCQkJICogYWNjdXJhY3kg d291bGQgcmVxdWlyZSB1cyB0byBhZGQgUChsb3dlcjEgPSBsb3dlcjIpICoKKwkJCQkgKiBQKHVw cGVyMSA+IHVwcGVyMikKKwkJCQkgKi8KKwkJCQlzZWxlYyA9IGNhbGNfaGlzdF9qb2luX3NlbGVj dGl2aXR5KHR5cGNhY2hlLAorCQkJCQkJCQkJCQkJICAgaGlzdDJfbG93ZXIsIG5oaXN0MiwKKwkJ CQkJCQkJCQkJCSAgIGhpc3QxX2xvd2VyLCBuaGlzdDEpOworCQkJCWJyZWFrOworCisJCQljYXNl IE9JRF9SQU5HRV9MRUZUX09QOgorCQkJCS8qIHZhcjEgPDwgdmFyMiB3aGVuIHVwcGVyKHZhcjEp IDwgbG93ZXIodmFyMikgKi8KKwkJCQlzZWxlYyA9IGNhbGNfaGlzdF9qb2luX3NlbGVjdGl2aXR5 KHR5cGNhY2hlLAorCQkJCQkJCQkJCQkJICAgaGlzdDFfdXBwZXIsIG5oaXN0MSwKKwkJCQkJCQkJ CQkJCSAgIGhpc3QyX2xvd2VyLCBuaGlzdDIpOworCQkJCWJyZWFrOworCisJCQljYXNlIE9JRF9S QU5HRV9SSUdIVF9PUDoKKwkJCQkvKiB2YXIxID4+IHZhcjIgd2hlbiB1cHBlcih2YXIyKSA8IGxv d2VyKHZhcjEpICovCisJCQkJc2VsZWMgPSBjYWxjX2hpc3Rfam9pbl9zZWxlY3Rpdml0eSh0eXBj YWNoZSwKKwkJCQkJCQkJCQkJCSAgIGhpc3QyX3VwcGVyLCBuaGlzdDIsCisJCQkJCQkJCQkJCQkg ICBoaXN0MV9sb3dlciwgbmhpc3QxKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBPSURfUkFOR0Vf T1ZFUkxBUFNfTEVGVF9PUDoKKwkJCQkvKiB2YXIxICY8IHZhcjIgd2hlbiB1cHBlcih2YXIxKSA8 IHVwcGVyKHZhcjIpICovCisJCQkJc2VsZWMgPSBjYWxjX2hpc3Rfam9pbl9zZWxlY3Rpdml0eSh0 eXBjYWNoZSwKKwkJCQkJCQkJCQkJCSAgIGhpc3QxX3VwcGVyLCBuaGlzdDEsCisJCQkJCQkJCQkJ CQkgICBoaXN0Ml91cHBlciwgbmhpc3QyKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBPSURfUkFO R0VfT1ZFUkxBUFNfUklHSFRfT1A6CisJCQkJLyogdmFyMSAmPiB2YXIyIHdoZW4gbG93ZXIodmFy MikgPCBsb3dlcih2YXIxKSAqLworCQkJCXNlbGVjID0gY2FsY19oaXN0X2pvaW5fc2VsZWN0aXZp dHkodHlwY2FjaGUsCisJCQkJCQkJCQkJCQkgICBoaXN0Ml9sb3dlciwgbmhpc3QyLAorCQkJCQkJ CQkJCQkJICAgaGlzdDFfbG93ZXIsIG5oaXN0MSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgT0lE X1JBTkdFX0NPTlRBSU5FRF9PUDoKKworCQkJCS8qCisJCQkJICogdmFyMSA8QCB2YXIyIGlzIGVx dWl2YWxlbnQgdG8gbG93ZXIodmFyMikgPD0gbG93ZXIodmFyMSkKKwkJCQkgKiBhbmQgdXBwZXIo dmFyMSkgPD0gdXBwZXIodmFyMikKKwkJCQkgKgorCQkJCSAqIEFmdGVyIG5lZ2F0aW5nIGJvdGgg c2lkZXMgd2UgZ2V0IG5vdCggbG93ZXIodmFyMSkgPAorCQkJCSAqIGxvd2VyKHZhcjIpICkgYW5k IG5vdCggdXBwZXIodmFyMikgPCB1cHBlcih2YXIxKSApLAorCQkJCSAqIHJlc3BlY3RpdmVseS4g QXNzdW1pbmcgaW5kZXBlbmRlbmNlLCBtdWx0aXBseSBib3RoCisJCQkJICogc2VsZWN0aXZpdGll cy4KKwkJCQkgKi8KKwkJCQlzZWxlYyA9IDEgLSBjYWxjX2hpc3Rfam9pbl9zZWxlY3Rpdml0eSh0 eXBjYWNoZSwKKwkJCQkJCQkJCQkJCQkgICBoaXN0MV9sb3dlciwgbmhpc3QxLAorCQkJCQkJCQkJ CQkJCSAgIGhpc3QyX2xvd2VyLCBuaGlzdDIpOworCQkJCXNlbGVjICo9IDEgLSBjYWxjX2hpc3Rf am9pbl9zZWxlY3Rpdml0eSh0eXBjYWNoZSwKKwkJCQkJCQkJCQkJCQkJaGlzdDJfdXBwZXIsIG5o aXN0MiwKKwkJCQkJCQkJCQkJCQkJaGlzdDFfdXBwZXIsIG5oaXN0MSk7CisJCQkJYnJlYWs7CisK KwkJCWNhc2UgT0lEX1JBTkdFX0NPTlRBSU5TX09QOgorCisJCQkJLyoKKwkJCQkgKiB2YXIxIEA+ IHZhcjIgaXMgZXF1aXZhbGVudCB0byBsb3dlcih2YXIxKSA8PSBsb3dlcih2YXIyKQorCQkJCSAq IGFuZCB1cHBlcih2YXIyKSA8PSB1cHBlcih2YXIxKQorCQkJCSAqCisJCQkJICogQWZ0ZXIgbmVn YXRpbmcgYm90aCBzaWRlcyB3ZSBnZXQgbm90KCBsb3dlcih2YXIyKSA8CisJCQkJICogbG93ZXIo dmFyMSkgKSBhbmQgbm90KCB1cHBlcih2YXIxKSA8IHVwcGVyKHZhcjIpICksCisJCQkJICogcmVz cGVjdGl2ZWx5LiBBc3N1bWluZyBpbmRlcGVuZGVuY2UsIG11bHRpcGx5IGJvdGgKKwkJCQkgKiBz ZWxlY3Rpdml0aWVzLgorCQkJCSAqLworCQkJCXNlbGVjID0gMSAtIGNhbGNfaGlzdF9qb2luX3Nl bGVjdGl2aXR5KHR5cGNhY2hlLAorCQkJCQkJCQkJCQkJCSAgIGhpc3QyX2xvd2VyLCBuaGlzdDIs CisJCQkJCQkJCQkJCQkJICAgaGlzdDFfbG93ZXIsIG5oaXN0MSk7CisJCQkJc2VsZWMgKj0gMSAt IGNhbGNfaGlzdF9qb2luX3NlbGVjdGl2aXR5KHR5cGNhY2hlLAorCQkJCQkJCQkJCQkJCQloaXN0 MV91cHBlciwgbmhpc3QxLAorCQkJCQkJCQkJCQkJCQloaXN0Ml91cHBlciwgbmhpc3QyKTsKKwkJ CQlicmVhazsKKworCQkJY2FzZSBPSURfUkFOR0VfQ09OVEFJTlNfRUxFTV9PUDoKKwkJCWNhc2Ug T0lEX1JBTkdFX0VMRU1fQ09OVEFJTkVEX09QOgorCisJCQkJLyoKKwkJCQkgKiBqdXN0IHB1bnQg Zm9yIG5vdywgZXN0aW1hdGlvbiB3b3VsZCByZXF1aXJlIGV4dHJhY3Rpb24gb2YKKwkJCQkgKiBo aXN0b2dyYW1zIGZvciB0aGUgYW55ZWxlbWVudAorCQkJCSAqLworCQkJZGVmYXVsdDoKKwkJCQli cmVhazsKKwkJfQorCisKKwkJLyogdGhlIGNhbGN1bGF0ZWQgc2VsZWN0aXZpdHkgb25seSBhcHBs aWVzIHRvIG5vbi1lbXB0eSByYW5nZXMgKi8KKwkJc2VsZWMgKj0gKDEgLSBlbXB0eV9mcmFjMSkg KiAoMSAtIGVtcHR5X2ZyYWMyKTsKKworCQkvKgorCQkgKiBEZXBlbmRpbmcgb24gdGhlIG9wZXJh dG9yLCBlbXB0eSByYW5nZXMgbWlnaHQgbWF0Y2ggZGlmZmVyZW50CisJCSAqIGZyYWN0aW9ucyBv ZiB0aGUgcmVzdWx0LgorCQkgKi8KKwkJc3dpdGNoIChvcGVyYXRvcikKKwkJeworCQkJY2FzZSBP SURfUkFOR0VfTEVTU19PUDoKKworCQkJCS8qCisJCQkJICogZW1wdHkgcmFuZ2UgPCBub24tZW1w dHkgcmFuZ2UKKwkJCQkgKi8KKwkJCQlzZWxlYyArPSBlbXB0eV9mcmFjMSAqICgxIC0gZW1wdHlf ZnJhYzIpOworCQkJCWJyZWFrOworCisJCQljYXNlIE9JRF9SQU5HRV9HUkVBVEVSX09QOgorCisJ CQkJLyoKKwkJCQkgKiBub24tZW1wdHkgcmFuZ2UgPiBlbXB0eSByYW5nZQorCQkJCSAqLworCQkJ CXNlbGVjICs9ICgxIC0gZW1wdHlfZnJhYzEpICogZW1wdHlfZnJhYzI7CisJCQkJYnJlYWs7CisK KwkJCWNhc2UgT0lEX1JBTkdFX0NPTlRBSU5FRF9PUDoKKworCQkJCS8qCisJCQkJICogZW1wdHkg cmFuZ2UgPEAgYW55IHJhbmdlCisJCQkJICovCisJCQljYXNlIE9JRF9SQU5HRV9MRVNTX0VRVUFM X09QOgorCisJCQkJLyoKKwkJCQkgKiBlbXB0eSByYW5nZSA8PSBhbnkgcmFuZ2UKKwkJCQkgKi8K KwkJCQlzZWxlYyArPSBlbXB0eV9mcmFjMTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBPSURfUkFO R0VfQ09OVEFJTlNfT1A6CisKKwkJCQkvKgorCQkJCSAqIGFueSByYW5nZSBAPiBlbXB0eSByYW5n ZQorCQkJCSAqLworCQkJY2FzZSBPSURfUkFOR0VfR1JFQVRFUl9FUVVBTF9PUDoKKworCQkJCS8q CisJCQkJICogYW55IHJhbmdlID49IGVtcHR5IHJhbmdlCisJCQkJICovCisJCQkJc2VsZWMgKz0g ZW1wdHlfZnJhYzI7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgT0lEX1JBTkdFX0NPTlRBSU5TX0VM RU1fT1A6CisJCQljYXNlIE9JRF9SQU5HRV9FTEVNX0NPTlRBSU5FRF9PUDoKKwkJCWNhc2UgT0lE X1JBTkdFX09WRVJMQVBfT1A6CisJCQljYXNlIE9JRF9SQU5HRV9PVkVSTEFQU19MRUZUX09QOgor CQkJY2FzZSBPSURfUkFOR0VfT1ZFUkxBUFNfUklHSFRfT1A6CisJCQljYXNlIE9JRF9SQU5HRV9M RUZUX09QOgorCQkJY2FzZSBPSURfUkFOR0VfUklHSFRfT1A6CisJCQlkZWZhdWx0OgorCisJCQkJ LyoKKwkJCQkgKiB0aGVzZSBvcGVyYXRvcnMgYWx3YXlzIHJldHVybiBmYWxzZSB3aGVuIGFuIGVt cHR5IHJhbmdlIGlzCisJCQkJICogaW52b2x2ZWQKKwkJCQkgKi8KKwkJCQlicmVhazsKKworCQl9 CisKKwkJLyogYWxsIHJhbmdlIG9wZXJhdG9ycyBhcmUgc3RyaWN0ICovCisJCXNlbGVjICo9ICgx IC0gbnVsbF9mcmFjMSkgKiAoMSAtIG51bGxfZnJhYzIpOworCisJCWZyZWVfYXR0c3RhdHNzbG90 KCZoaXN0MSk7CisJCWZyZWVfYXR0c3RhdHNzbG90KCZoaXN0Mik7CisJfQorCisJUmVsZWFzZVZh cmlhYmxlU3RhdHModmFyZGF0YTEpOworCVJlbGVhc2VWYXJpYWJsZVN0YXRzKHZhcmRhdGEyKTsK KworCUNMQU1QX1BST0JBQklMSVRZKHNlbGVjKTsKKworCVBHX1JFVFVSTl9GTE9BVDgoKGZsb2F0 OCkgc2VsZWMpOworCit9CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX29wZXJh dG9yLmRhdCBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfb3BlcmF0b3IuZGF0CmluZGV4IGJjNWY4 MjEzZjMuLmI2M2E3ZTE1YWYgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfb3Bl cmF0b3IuZGF0CisrKyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfb3BlcmF0b3IuZGF0CkBAIC0z MDcxLDc4ICszMDcxLDc4IEBACiAgIG9wcm5hbWUgPT4gJzwnLCBvcHJsZWZ0ID0+ICdhbnlyYW5n ZScsIG9wcnJpZ2h0ID0+ICdhbnlyYW5nZScsCiAgIG9wcnJlc3VsdCA9PiAnYm9vbCcsIG9wcmNv bSA9PiAnPihhbnlyYW5nZSxhbnlyYW5nZSknLAogICBvcHJuZWdhdGUgPT4gJz49KGFueXJhbmdl LGFueXJhbmdlKScsIG9wcmNvZGUgPT4gJ3JhbmdlX2x0JywKLSAgb3BycmVzdCA9PiAncmFuZ2Vz ZWwnLCBvcHJqb2luID0+ICdzY2FsYXJsdGpvaW5zZWwnIH0sCisgIG9wcnJlc3QgPT4gJ3Jhbmdl c2VsJywgb3Byam9pbiA9PiAncmFuZ2Vqb2luc2VsJyB9LAogeyBvaWQgPT4gJzM4ODUnLCBvaWRf c3ltYm9sID0+ICdPSURfUkFOR0VfTEVTU19FUVVBTF9PUCcsCiAgIGRlc2NyID0+ICdsZXNzIHRo YW4gb3IgZXF1YWwnLAogICBvcHJuYW1lID0+ICc8PScsIG9wcmxlZnQgPT4gJ2FueXJhbmdlJywg b3BycmlnaHQgPT4gJ2FueXJhbmdlJywKICAgb3BycmVzdWx0ID0+ICdib29sJywgb3ByY29tID0+ ICc+PShhbnlyYW5nZSxhbnlyYW5nZSknLAogICBvcHJuZWdhdGUgPT4gJz4oYW55cmFuZ2UsYW55 cmFuZ2UpJywgb3ByY29kZSA9PiAncmFuZ2VfbGUnLAotICBvcHJyZXN0ID0+ICdyYW5nZXNlbCcs IG9wcmpvaW4gPT4gJ3NjYWxhcmxlam9pbnNlbCcgfSwKKyAgb3BycmVzdCA9PiAncmFuZ2VzZWwn LCBvcHJqb2luID0+ICdyYW5nZWpvaW5zZWwnIH0sCiB7IG9pZCA9PiAnMzg4NicsIG9pZF9zeW1i b2wgPT4gJ09JRF9SQU5HRV9HUkVBVEVSX0VRVUFMX09QJywKICAgZGVzY3IgPT4gJ2dyZWF0ZXIg dGhhbiBvciBlcXVhbCcsCiAgIG9wcm5hbWUgPT4gJz49Jywgb3BybGVmdCA9PiAnYW55cmFuZ2Un LCBvcHJyaWdodCA9PiAnYW55cmFuZ2UnLAogICBvcHJyZXN1bHQgPT4gJ2Jvb2wnLCBvcHJjb20g PT4gJzw9KGFueXJhbmdlLGFueXJhbmdlKScsCiAgIG9wcm5lZ2F0ZSA9PiAnPChhbnlyYW5nZSxh bnlyYW5nZSknLCBvcHJjb2RlID0+ICdyYW5nZV9nZScsCi0gIG9wcnJlc3QgPT4gJ3Jhbmdlc2Vs Jywgb3Byam9pbiA9PiAnc2NhbGFyZ2Vqb2luc2VsJyB9LAorICBvcHJyZXN0ID0+ICdyYW5nZXNl bCcsIG9wcmpvaW4gPT4gJ3Jhbmdlam9pbnNlbCcgfSwKIHsgb2lkID0+ICczODg3Jywgb2lkX3N5 bWJvbCA9PiAnT0lEX1JBTkdFX0dSRUFURVJfT1AnLAogICBkZXNjciA9PiAnZ3JlYXRlciB0aGFu JywKICAgb3BybmFtZSA9PiAnPicsIG9wcmxlZnQgPT4gJ2FueXJhbmdlJywgb3BycmlnaHQgPT4g J2FueXJhbmdlJywKICAgb3BycmVzdWx0ID0+ICdib29sJywgb3ByY29tID0+ICc8KGFueXJhbmdl LGFueXJhbmdlKScsCiAgIG9wcm5lZ2F0ZSA9PiAnPD0oYW55cmFuZ2UsYW55cmFuZ2UpJywgb3By Y29kZSA9PiAncmFuZ2VfZ3QnLAotICBvcHJyZXN0ID0+ICdyYW5nZXNlbCcsIG9wcmpvaW4gPT4g J3NjYWxhcmd0am9pbnNlbCcgfSwKKyAgb3BycmVzdCA9PiAncmFuZ2VzZWwnLCBvcHJqb2luID0+ ICdyYW5nZWpvaW5zZWwnIH0sCiB7IG9pZCA9PiAnMzg4OCcsIG9pZF9zeW1ib2wgPT4gJ09JRF9S QU5HRV9PVkVSTEFQX09QJywgZGVzY3IgPT4gJ292ZXJsYXBzJywKICAgb3BybmFtZSA9PiAnJiYn LCBvcHJsZWZ0ID0+ICdhbnlyYW5nZScsIG9wcnJpZ2h0ID0+ICdhbnlyYW5nZScsCiAgIG9wcnJl c3VsdCA9PiAnYm9vbCcsIG9wcmNvbSA9PiAnJiYoYW55cmFuZ2UsYW55cmFuZ2UpJywKICAgb3By Y29kZSA9PiAncmFuZ2Vfb3ZlcmxhcHMnLCBvcHJyZXN0ID0+ICdyYW5nZXNlbCcsCi0gIG9wcmpv aW4gPT4gJ2FyZWFqb2luc2VsJyB9LAorICBvcHJqb2luID0+ICdyYW5nZWpvaW5zZWwnIH0sCiB7 IG9pZCA9PiAnMzg4OScsIG9pZF9zeW1ib2wgPT4gJ09JRF9SQU5HRV9DT05UQUlOU19FTEVNX09Q JywKICAgZGVzY3IgPT4gJ2NvbnRhaW5zJywKICAgb3BybmFtZSA9PiAnQD4nLCBvcHJsZWZ0ID0+ ICdhbnlyYW5nZScsIG9wcnJpZ2h0ID0+ICdhbnllbGVtZW50JywKICAgb3BycmVzdWx0ID0+ICdi b29sJywgb3ByY29tID0+ICc8QChhbnllbGVtZW50LGFueXJhbmdlKScsCiAgIG9wcmNvZGUgPT4g J3JhbmdlX2NvbnRhaW5zX2VsZW0nLCBvcHJyZXN0ID0+ICdyYW5nZXNlbCcsCi0gIG9wcmpvaW4g PT4gJ2NvbnRqb2luc2VsJyB9LAorICBvcHJqb2luID0+ICdyYW5nZWpvaW5zZWwnIH0sCiB7IG9p ZCA9PiAnMzg5MCcsIG9pZF9zeW1ib2wgPT4gJ09JRF9SQU5HRV9DT05UQUlOU19PUCcsIGRlc2Ny ID0+ICdjb250YWlucycsCiAgIG9wcm5hbWUgPT4gJ0A+Jywgb3BybGVmdCA9PiAnYW55cmFuZ2Un LCBvcHJyaWdodCA9PiAnYW55cmFuZ2UnLAogICBvcHJyZXN1bHQgPT4gJ2Jvb2wnLCBvcHJjb20g PT4gJzxAKGFueXJhbmdlLGFueXJhbmdlKScsCiAgIG9wcmNvZGUgPT4gJ3JhbmdlX2NvbnRhaW5z Jywgb3BycmVzdCA9PiAncmFuZ2VzZWwnLAotICBvcHJqb2luID0+ICdjb250am9pbnNlbCcgfSwK KyAgb3Byam9pbiA9PiAncmFuZ2Vqb2luc2VsJyB9LAogeyBvaWQgPT4gJzM4OTEnLCBvaWRfc3lt Ym9sID0+ICdPSURfUkFOR0VfRUxFTV9DT05UQUlORURfT1AnLAogICBkZXNjciA9PiAnaXMgY29u dGFpbmVkIGJ5JywKICAgb3BybmFtZSA9PiAnPEAnLCBvcHJsZWZ0ID0+ICdhbnllbGVtZW50Jywg b3BycmlnaHQgPT4gJ2FueXJhbmdlJywKICAgb3BycmVzdWx0ID0+ICdib29sJywgb3ByY29tID0+ ICdAPihhbnlyYW5nZSxhbnllbGVtZW50KScsCiAgIG9wcmNvZGUgPT4gJ2VsZW1fY29udGFpbmVk X2J5X3JhbmdlJywgb3BycmVzdCA9PiAncmFuZ2VzZWwnLAotICBvcHJqb2luID0+ICdjb250am9p bnNlbCcgfSwKKyAgb3Byam9pbiA9PiAncmFuZ2Vqb2luc2VsJyB9LAogeyBvaWQgPT4gJzM4OTIn LCBvaWRfc3ltYm9sID0+ICdPSURfUkFOR0VfQ09OVEFJTkVEX09QJywKICAgZGVzY3IgPT4gJ2lz IGNvbnRhaW5lZCBieScsCiAgIG9wcm5hbWUgPT4gJzxAJywgb3BybGVmdCA9PiAnYW55cmFuZ2Un LCBvcHJyaWdodCA9PiAnYW55cmFuZ2UnLAogICBvcHJyZXN1bHQgPT4gJ2Jvb2wnLCBvcHJjb20g PT4gJ0A+KGFueXJhbmdlLGFueXJhbmdlKScsCiAgIG9wcmNvZGUgPT4gJ3JhbmdlX2NvbnRhaW5l ZF9ieScsIG9wcnJlc3QgPT4gJ3Jhbmdlc2VsJywKLSAgb3Byam9pbiA9PiAnY29udGpvaW5zZWwn IH0sCisgIG9wcmpvaW4gPT4gJ3Jhbmdlam9pbnNlbCcgfSwKIHsgb2lkID0+ICczODkzJywgb2lk X3N5bWJvbCA9PiAnT0lEX1JBTkdFX0xFRlRfT1AnLCBkZXNjciA9PiAnaXMgbGVmdCBvZicsCiAg IG9wcm5hbWUgPT4gJzw8Jywgb3BybGVmdCA9PiAnYW55cmFuZ2UnLCBvcHJyaWdodCA9PiAnYW55 cmFuZ2UnLAogICBvcHJyZXN1bHQgPT4gJ2Jvb2wnLCBvcHJjb20gPT4gJz4+KGFueXJhbmdlLGFu eXJhbmdlKScsCiAgIG9wcmNvZGUgPT4gJ3JhbmdlX2JlZm9yZScsIG9wcnJlc3QgPT4gJ3Jhbmdl c2VsJywKLSAgb3Byam9pbiA9PiAnc2NhbGFybHRqb2luc2VsJyB9LAorICBvcHJqb2luID0+ICdy YW5nZWpvaW5zZWwnIH0sCiB7IG9pZCA9PiAnMzg5NCcsIG9pZF9zeW1ib2wgPT4gJ09JRF9SQU5H RV9SSUdIVF9PUCcsIGRlc2NyID0+ICdpcyByaWdodCBvZicsCiAgIG9wcm5hbWUgPT4gJz4+Jywg b3BybGVmdCA9PiAnYW55cmFuZ2UnLCBvcHJyaWdodCA9PiAnYW55cmFuZ2UnLAogICBvcHJyZXN1 bHQgPT4gJ2Jvb2wnLCBvcHJjb20gPT4gJzw8KGFueXJhbmdlLGFueXJhbmdlKScsCiAgIG9wcmNv ZGUgPT4gJ3JhbmdlX2FmdGVyJywgb3BycmVzdCA9PiAncmFuZ2VzZWwnLAotICBvcHJqb2luID0+ ICdzY2FsYXJndGpvaW5zZWwnIH0sCisgIG9wcmpvaW4gPT4gJ3Jhbmdlam9pbnNlbCcgfSwKIHsg b2lkID0+ICczODk1Jywgb2lkX3N5bWJvbCA9PiAnT0lEX1JBTkdFX09WRVJMQVBTX0xFRlRfT1An LAogICBkZXNjciA9PiAnb3ZlcmxhcHMgb3IgaXMgbGVmdCBvZicsCiAgIG9wcm5hbWUgPT4gJyY8 Jywgb3BybGVmdCA9PiAnYW55cmFuZ2UnLCBvcHJyaWdodCA9PiAnYW55cmFuZ2UnLAogICBvcHJy ZXN1bHQgPT4gJ2Jvb2wnLCBvcHJjb2RlID0+ICdyYW5nZV9vdmVybGVmdCcsIG9wcnJlc3QgPT4g J3Jhbmdlc2VsJywKLSAgb3Byam9pbiA9PiAnc2NhbGFybHRqb2luc2VsJyB9LAorICBvcHJqb2lu ID0+ICdyYW5nZWpvaW5zZWwnIH0sCiB7IG9pZCA9PiAnMzg5NicsIG9pZF9zeW1ib2wgPT4gJ09J RF9SQU5HRV9PVkVSTEFQU19SSUdIVF9PUCcsCiAgIGRlc2NyID0+ICdvdmVybGFwcyBvciBpcyBy aWdodCBvZicsCiAgIG9wcm5hbWUgPT4gJyY+Jywgb3BybGVmdCA9PiAnYW55cmFuZ2UnLCBvcHJy aWdodCA9PiAnYW55cmFuZ2UnLAogICBvcHJyZXN1bHQgPT4gJ2Jvb2wnLCBvcHJjb2RlID0+ICdy YW5nZV9vdmVycmlnaHQnLCBvcHJyZXN0ID0+ICdyYW5nZXNlbCcsCi0gIG9wcmpvaW4gPT4gJ3Nj YWxhcmd0am9pbnNlbCcgfSwKKyAgb3Byam9pbiA9PiAncmFuZ2Vqb2luc2VsJyB9LAogeyBvaWQg PT4gJzM4OTcnLCBkZXNjciA9PiAnaXMgYWRqYWNlbnQgdG8nLAogICBvcHJuYW1lID0+ICctfC0n LCBvcHJsZWZ0ID0+ICdhbnlyYW5nZScsIG9wcnJpZ2h0ID0+ICdhbnlyYW5nZScsCiAgIG9wcnJl c3VsdCA9PiAnYm9vbCcsIG9wcmNvbSA9PiAnLXwtKGFueXJhbmdlLGFueXJhbmdlKScsCiAgIG9w cmNvZGUgPT4gJ3JhbmdlX2FkamFjZW50Jywgb3BycmVzdCA9PiAnbWF0Y2hpbmdzZWwnLAotICBv cHJqb2luID0+ICdtYXRjaGluZ2pvaW5zZWwnIH0sCisgIG9wcmpvaW4gPT4gJ3Jhbmdlam9pbnNl bCcgfSwKIHsgb2lkID0+ICczODk4JywgZGVzY3IgPT4gJ3JhbmdlIHVuaW9uJywKICAgb3BybmFt ZSA9PiAnKycsIG9wcmxlZnQgPT4gJ2FueXJhbmdlJywgb3BycmlnaHQgPT4gJ2FueXJhbmdlJywK ICAgb3BycmVzdWx0ID0+ICdhbnlyYW5nZScsIG9wcmNvbSA9PiAnKyhhbnlyYW5nZSxhbnlyYW5n ZSknLApAQCAtMzI3NywxMzkgKzMyNzcsMTM5IEBACiAgIG9wcm5hbWUgPT4gJzwnLCBvcHJsZWZ0 ID0+ICdhbnltdWx0aXJhbmdlJywgb3BycmlnaHQgPT4gJ2FueW11bHRpcmFuZ2UnLAogICBvcHJy ZXN1bHQgPT4gJ2Jvb2wnLCBvcHJjb20gPT4gJz4oYW55bXVsdGlyYW5nZSxhbnltdWx0aXJhbmdl KScsCiAgIG9wcm5lZ2F0ZSA9PiAnPj0oYW55bXVsdGlyYW5nZSxhbnltdWx0aXJhbmdlKScsIG9w cmNvZGUgPT4gJ211bHRpcmFuZ2VfbHQnLAotICBvcHJyZXN0ID0+ICdtdWx0aXJhbmdlc2VsJywg b3Byam9pbiA9PiAnc2NhbGFybHRqb2luc2VsJyB9LAorICBvcHJyZXN0ID0+ICdtdWx0aXJhbmdl c2VsJywgb3Byam9pbiA9PiAnbXVsdGlyYW5nZWpvaW5zZWwnIH0sCiB7IG9pZCA9PiAnMjg2Mycs IG9pZF9zeW1ib2wgPT4gJ09JRF9NVUxUSVJBTkdFX0xFU1NfRVFVQUxfT1AnLAogICBkZXNjciA9 PiAnbGVzcyB0aGFuIG9yIGVxdWFsJywKICAgb3BybmFtZSA9PiAnPD0nLCBvcHJsZWZ0ID0+ICdh bnltdWx0aXJhbmdlJywgb3BycmlnaHQgPT4gJ2FueW11bHRpcmFuZ2UnLAogICBvcHJyZXN1bHQg PT4gJ2Jvb2wnLCBvcHJjb20gPT4gJz49KGFueW11bHRpcmFuZ2UsYW55bXVsdGlyYW5nZSknLAog ICBvcHJuZWdhdGUgPT4gJz4oYW55bXVsdGlyYW5nZSxhbnltdWx0aXJhbmdlKScsIG9wcmNvZGUg PT4gJ211bHRpcmFuZ2VfbGUnLAotICBvcHJyZXN0ID0+ICdtdWx0aXJhbmdlc2VsJywgb3Byam9p biA9PiAnc2NhbGFybGVqb2luc2VsJyB9LAorICBvcHJyZXN0ID0+ICdtdWx0aXJhbmdlc2VsJywg b3Byam9pbiA9PiAnbXVsdGlyYW5nZWpvaW5zZWwnIH0sCiB7IG9pZCA9PiAnMjg2NCcsIG9pZF9z eW1ib2wgPT4gJ09JRF9NVUxUSVJBTkdFX0dSRUFURVJfRVFVQUxfT1AnLAogICBkZXNjciA9PiAn Z3JlYXRlciB0aGFuIG9yIGVxdWFsJywKICAgb3BybmFtZSA9PiAnPj0nLCBvcHJsZWZ0ID0+ICdh bnltdWx0aXJhbmdlJywgb3BycmlnaHQgPT4gJ2FueW11bHRpcmFuZ2UnLAogICBvcHJyZXN1bHQg PT4gJ2Jvb2wnLCBvcHJjb20gPT4gJzw9KGFueW11bHRpcmFuZ2UsYW55bXVsdGlyYW5nZSknLAog ICBvcHJuZWdhdGUgPT4gJzwoYW55bXVsdGlyYW5nZSxhbnltdWx0aXJhbmdlKScsIG9wcmNvZGUg PT4gJ211bHRpcmFuZ2VfZ2UnLAotICBvcHJyZXN0ID0+ICdtdWx0aXJhbmdlc2VsJywgb3Byam9p biA9PiAnc2NhbGFyZ2Vqb2luc2VsJyB9LAorICBvcHJyZXN0ID0+ICdtdWx0aXJhbmdlc2VsJywg b3Byam9pbiA9PiAnbXVsdGlyYW5nZWpvaW5zZWwnIH0sCiB7IG9pZCA9PiAnMjg2NScsIG9pZF9z eW1ib2wgPT4gJ09JRF9NVUxUSVJBTkdFX0dSRUFURVJfT1AnLAogICBkZXNjciA9PiAnZ3JlYXRl ciB0aGFuJywKICAgb3BybmFtZSA9PiAnPicsIG9wcmxlZnQgPT4gJ2FueW11bHRpcmFuZ2UnLCBv cHJyaWdodCA9PiAnYW55bXVsdGlyYW5nZScsCiAgIG9wcnJlc3VsdCA9PiAnYm9vbCcsIG9wcmNv bSA9PiAnPChhbnltdWx0aXJhbmdlLGFueW11bHRpcmFuZ2UpJywKICAgb3BybmVnYXRlID0+ICc8 PShhbnltdWx0aXJhbmdlLGFueW11bHRpcmFuZ2UpJywgb3ByY29kZSA9PiAnbXVsdGlyYW5nZV9n dCcsCi0gIG9wcnJlc3QgPT4gJ211bHRpcmFuZ2VzZWwnLCBvcHJqb2luID0+ICdzY2FsYXJndGpv aW5zZWwnIH0sCisgIG9wcnJlc3QgPT4gJ211bHRpcmFuZ2VzZWwnLCBvcHJqb2luID0+ICdtdWx0 aXJhbmdlam9pbnNlbCcgfSwKIHsgb2lkID0+ICcyODY2Jywgb2lkX3N5bWJvbCA9PiAnT0lEX1JB TkdFX09WRVJMQVBTX01VTFRJUkFOR0VfT1AnLAogICBkZXNjciA9PiAnb3ZlcmxhcHMnLAogICBv cHJuYW1lID0+ICcmJicsIG9wcmxlZnQgPT4gJ2FueXJhbmdlJywgb3BycmlnaHQgPT4gJ2FueW11 bHRpcmFuZ2UnLAogICBvcHJyZXN1bHQgPT4gJ2Jvb2wnLCBvcHJjb20gPT4gJyYmKGFueW11bHRp cmFuZ2UsYW55cmFuZ2UpJywKICAgb3ByY29kZSA9PiAncmFuZ2Vfb3ZlcmxhcHNfbXVsdGlyYW5n ZScsIG9wcnJlc3QgPT4gJ211bHRpcmFuZ2VzZWwnLAotICBvcHJqb2luID0+ICdhcmVham9pbnNl bCcgfSwKKyAgb3Byam9pbiA9PiAnbXVsdGlyYW5nZWpvaW5zZWwnIH0sCiB7IG9pZCA9PiAnMjg2 NycsIG9pZF9zeW1ib2wgPT4gJ09JRF9NVUxUSVJBTkdFX09WRVJMQVBTX1JBTkdFX09QJywKICAg ZGVzY3IgPT4gJ292ZXJsYXBzJywKICAgb3BybmFtZSA9PiAnJiYnLCBvcHJsZWZ0ID0+ICdhbnlt dWx0aXJhbmdlJywgb3BycmlnaHQgPT4gJ2FueXJhbmdlJywKICAgb3BycmVzdWx0ID0+ICdib29s Jywgb3ByY29tID0+ICcmJihhbnlyYW5nZSxhbnltdWx0aXJhbmdlKScsCiAgIG9wcmNvZGUgPT4g J211bHRpcmFuZ2Vfb3ZlcmxhcHNfcmFuZ2UnLCBvcHJyZXN0ID0+ICdtdWx0aXJhbmdlc2VsJywK LSAgb3Byam9pbiA9PiAnYXJlYWpvaW5zZWwnIH0sCisgIG9wcmpvaW4gPT4gJ211bHRpcmFuZ2Vq b2luc2VsJyB9LAogeyBvaWQgPT4gJzI4NjgnLCBvaWRfc3ltYm9sID0+ICdPSURfTVVMVElSQU5H RV9PVkVSTEFQU19NVUxUSVJBTkdFX09QJywKICAgZGVzY3IgPT4gJ292ZXJsYXBzJywKICAgb3By bmFtZSA9PiAnJiYnLCBvcHJsZWZ0ID0+ICdhbnltdWx0aXJhbmdlJywgb3BycmlnaHQgPT4gJ2Fu eW11bHRpcmFuZ2UnLAogICBvcHJyZXN1bHQgPT4gJ2Jvb2wnLCBvcHJjb20gPT4gJyYmKGFueW11 bHRpcmFuZ2UsYW55bXVsdGlyYW5nZSknLAogICBvcHJjb2RlID0+ICdtdWx0aXJhbmdlX292ZXJs YXBzX211bHRpcmFuZ2UnLCBvcHJyZXN0ID0+ICdtdWx0aXJhbmdlc2VsJywKLSAgb3Byam9pbiA9 PiAnYXJlYWpvaW5zZWwnIH0sCisgIG9wcmpvaW4gPT4gJ211bHRpcmFuZ2Vqb2luc2VsJyB9LAog eyBvaWQgPT4gJzI4NjknLCBvaWRfc3ltYm9sID0+ICdPSURfTVVMVElSQU5HRV9DT05UQUlOU19F TEVNX09QJywKICAgZGVzY3IgPT4gJ2NvbnRhaW5zJywKICAgb3BybmFtZSA9PiAnQD4nLCBvcHJs ZWZ0ID0+ICdhbnltdWx0aXJhbmdlJywgb3BycmlnaHQgPT4gJ2FueWVsZW1lbnQnLAogICBvcHJy ZXN1bHQgPT4gJ2Jvb2wnLCBvcHJjb20gPT4gJzxAKGFueWVsZW1lbnQsYW55bXVsdGlyYW5nZSkn LAogICBvcHJjb2RlID0+ICdtdWx0aXJhbmdlX2NvbnRhaW5zX2VsZW0nLCBvcHJyZXN0ID0+ICdt dWx0aXJhbmdlc2VsJywKLSAgb3Byam9pbiA9PiAnY29udGpvaW5zZWwnIH0sCisgIG9wcmpvaW4g PT4gJ211bHRpcmFuZ2Vqb2luc2VsJyB9LAogeyBvaWQgPT4gJzI4NzAnLCBvaWRfc3ltYm9sID0+ ICdPSURfTVVMVElSQU5HRV9DT05UQUlOU19SQU5HRV9PUCcsCiAgIGRlc2NyID0+ICdjb250YWlu cycsCiAgIG9wcm5hbWUgPT4gJ0A+Jywgb3BybGVmdCA9PiAnYW55bXVsdGlyYW5nZScsIG9wcnJp Z2h0ID0+ICdhbnlyYW5nZScsCiAgIG9wcnJlc3VsdCA9PiAnYm9vbCcsIG9wcmNvbSA9PiAnPEAo YW55cmFuZ2UsYW55bXVsdGlyYW5nZSknLAogICBvcHJjb2RlID0+ICdtdWx0aXJhbmdlX2NvbnRh aW5zX3JhbmdlJywgb3BycmVzdCA9PiAnbXVsdGlyYW5nZXNlbCcsCi0gIG9wcmpvaW4gPT4gJ2Nv bnRqb2luc2VsJyB9LAorICBvcHJqb2luID0+ICdtdWx0aXJhbmdlam9pbnNlbCcgfSwKIHsgb2lk ID0+ICcyODcxJywgb2lkX3N5bWJvbCA9PiAnT0lEX01VTFRJUkFOR0VfQ09OVEFJTlNfTVVMVElS QU5HRV9PUCcsCiAgIGRlc2NyID0+ICdjb250YWlucycsCiAgIG9wcm5hbWUgPT4gJ0A+Jywgb3By bGVmdCA9PiAnYW55bXVsdGlyYW5nZScsIG9wcnJpZ2h0ID0+ICdhbnltdWx0aXJhbmdlJywKICAg b3BycmVzdWx0ID0+ICdib29sJywgb3ByY29tID0+ICc8QChhbnltdWx0aXJhbmdlLGFueW11bHRp cmFuZ2UpJywKICAgb3ByY29kZSA9PiAnbXVsdGlyYW5nZV9jb250YWluc19tdWx0aXJhbmdlJywg b3BycmVzdCA9PiAnbXVsdGlyYW5nZXNlbCcsCi0gIG9wcmpvaW4gPT4gJ2NvbnRqb2luc2VsJyB9 LAorICBvcHJqb2luID0+ICdtdWx0aXJhbmdlam9pbnNlbCcgfSwKIHsgb2lkID0+ICcyODcyJywg b2lkX3N5bWJvbCA9PiAnT0lEX01VTFRJUkFOR0VfRUxFTV9DT05UQUlORURfT1AnLAogICBkZXNj ciA9PiAnaXMgY29udGFpbmVkIGJ5JywKICAgb3BybmFtZSA9PiAnPEAnLCBvcHJsZWZ0ID0+ICdh bnllbGVtZW50Jywgb3BycmlnaHQgPT4gJ2FueW11bHRpcmFuZ2UnLAogICBvcHJyZXN1bHQgPT4g J2Jvb2wnLCBvcHJjb20gPT4gJ0A+KGFueW11bHRpcmFuZ2UsYW55ZWxlbWVudCknLAogICBvcHJj b2RlID0+ICdlbGVtX2NvbnRhaW5lZF9ieV9tdWx0aXJhbmdlJywgb3BycmVzdCA9PiAnbXVsdGly YW5nZXNlbCcsCi0gIG9wcmpvaW4gPT4gJ2NvbnRqb2luc2VsJyB9LAorICBvcHJqb2luID0+ICdt dWx0aXJhbmdlam9pbnNlbCcgfSwKIHsgb2lkID0+ICcyODczJywgb2lkX3N5bWJvbCA9PiAnT0lE X01VTFRJUkFOR0VfUkFOR0VfQ09OVEFJTkVEX09QJywKICAgZGVzY3IgPT4gJ2lzIGNvbnRhaW5l ZCBieScsCiAgIG9wcm5hbWUgPT4gJzxAJywgb3BybGVmdCA9PiAnYW55cmFuZ2UnLCBvcHJyaWdo dCA9PiAnYW55bXVsdGlyYW5nZScsCiAgIG9wcnJlc3VsdCA9PiAnYm9vbCcsIG9wcmNvbSA9PiAn QD4oYW55bXVsdGlyYW5nZSxhbnlyYW5nZSknLAogICBvcHJjb2RlID0+ICdyYW5nZV9jb250YWlu ZWRfYnlfbXVsdGlyYW5nZScsIG9wcnJlc3QgPT4gJ211bHRpcmFuZ2VzZWwnLAotICBvcHJqb2lu ID0+ICdjb250am9pbnNlbCcgfSwKKyAgb3Byam9pbiA9PiAnbXVsdGlyYW5nZWpvaW5zZWwnIH0s CiB7IG9pZCA9PiAnMjg3NCcsIG9pZF9zeW1ib2wgPT4gJ09JRF9NVUxUSVJBTkdFX01VTFRJUkFO R0VfQ09OVEFJTkVEX09QJywKICAgZGVzY3IgPT4gJ2lzIGNvbnRhaW5lZCBieScsCiAgIG9wcm5h bWUgPT4gJzxAJywgb3BybGVmdCA9PiAnYW55bXVsdGlyYW5nZScsIG9wcnJpZ2h0ID0+ICdhbnlt dWx0aXJhbmdlJywKICAgb3BycmVzdWx0ID0+ICdib29sJywgb3ByY29tID0+ICdAPihhbnltdWx0 aXJhbmdlLGFueW11bHRpcmFuZ2UpJywKICAgb3ByY29kZSA9PiAnbXVsdGlyYW5nZV9jb250YWlu ZWRfYnlfbXVsdGlyYW5nZScsIG9wcnJlc3QgPT4gJ211bHRpcmFuZ2VzZWwnLAotICBvcHJqb2lu ID0+ICdjb250am9pbnNlbCcgfSwKKyAgb3Byam9pbiA9PiAnbXVsdGlyYW5nZWpvaW5zZWwnIH0s CiB7IG9pZCA9PiAnNDUzOScsIG9pZF9zeW1ib2wgPT4gJ09JRF9SQU5HRV9DT05UQUlOU19NVUxU SVJBTkdFX09QJywKICAgZGVzY3IgPT4gJ2NvbnRhaW5zJywKICAgb3BybmFtZSA9PiAnQD4nLCBv cHJsZWZ0ID0+ICdhbnlyYW5nZScsIG9wcnJpZ2h0ID0+ICdhbnltdWx0aXJhbmdlJywKICAgb3By cmVzdWx0ID0+ICdib29sJywgb3ByY29tID0+ICc8QChhbnltdWx0aXJhbmdlLGFueXJhbmdlKScs CiAgIG9wcmNvZGUgPT4gJ3JhbmdlX2NvbnRhaW5zX211bHRpcmFuZ2UnLCBvcHJyZXN0ID0+ICdt dWx0aXJhbmdlc2VsJywKLSAgb3Byam9pbiA9PiAnY29udGpvaW5zZWwnIH0sCisgIG9wcmpvaW4g PT4gJ211bHRpcmFuZ2Vqb2luc2VsJyB9LAogeyBvaWQgPT4gJzQ1NDAnLCBvaWRfc3ltYm9sID0+ ICdPSURfUkFOR0VfTVVMVElSQU5HRV9DT05UQUlORURfT1AnLAogICBkZXNjciA9PiAnaXMgY29u dGFpbmVkIGJ5JywKICAgb3BybmFtZSA9PiAnPEAnLCBvcHJsZWZ0ID0+ICdhbnltdWx0aXJhbmdl Jywgb3BycmlnaHQgPT4gJ2FueXJhbmdlJywKICAgb3BycmVzdWx0ID0+ICdib29sJywgb3ByY29t ID0+ICdAPihhbnlyYW5nZSxhbnltdWx0aXJhbmdlKScsCiAgIG9wcmNvZGUgPT4gJ211bHRpcmFu Z2VfY29udGFpbmVkX2J5X3JhbmdlJywgb3BycmVzdCA9PiAnbXVsdGlyYW5nZXNlbCcsCi0gIG9w cmpvaW4gPT4gJ2NvbnRqb2luc2VsJyB9LAorICBvcHJqb2luID0+ICdtdWx0aXJhbmdlam9pbnNl bCcgfSwKIHsgb2lkID0+ICcyODc1Jywgb2lkX3N5bWJvbCA9PiAnT0lEX1JBTkdFX09WRVJMQVBT X0xFRlRfTVVMVElSQU5HRV9PUCcsCiAgIGRlc2NyID0+ICdvdmVybGFwcyBvciBpcyBsZWZ0IG9m JywKICAgb3BybmFtZSA9PiAnJjwnLCBvcHJsZWZ0ID0+ICdhbnlyYW5nZScsIG9wcnJpZ2h0ID0+ ICdhbnltdWx0aXJhbmdlJywKICAgb3BycmVzdWx0ID0+ICdib29sJywgb3ByY29kZSA9PiAncmFu Z2Vfb3ZlcmxlZnRfbXVsdGlyYW5nZScsCi0gIG9wcnJlc3QgPT4gJ211bHRpcmFuZ2VzZWwnLCBv cHJqb2luID0+ICdzY2FsYXJsdGpvaW5zZWwnIH0sCisgIG9wcnJlc3QgPT4gJ211bHRpcmFuZ2Vz ZWwnLCBvcHJqb2luID0+ICdtdWx0aXJhbmdlam9pbnNlbCcgfSwKIHsgb2lkID0+ICcyODc2Jywg b2lkX3N5bWJvbCA9PiAnT0lEX01VTFRJUkFOR0VfT1ZFUkxBUFNfTEVGVF9SQU5HRV9PUCcsCiAg IGRlc2NyID0+ICdvdmVybGFwcyBvciBpcyBsZWZ0IG9mJywKICAgb3BybmFtZSA9PiAnJjwnLCBv cHJsZWZ0ID0+ICdhbnltdWx0aXJhbmdlJywgb3BycmlnaHQgPT4gJ2FueXJhbmdlJywKICAgb3By cmVzdWx0ID0+ICdib29sJywgb3ByY29kZSA9PiAnbXVsdGlyYW5nZV9vdmVybGVmdF9yYW5nZScs Ci0gIG9wcnJlc3QgPT4gJ211bHRpcmFuZ2VzZWwnLCBvcHJqb2luID0+ICdzY2FsYXJsdGpvaW5z ZWwnIH0sCisgIG9wcnJlc3QgPT4gJ211bHRpcmFuZ2VzZWwnLCBvcHJqb2luID0+ICdtdWx0aXJh bmdlam9pbnNlbCcgfSwKIHsgb2lkID0+ICcyODc3Jywgb2lkX3N5bWJvbCA9PiAnT0lEX01VTFRJ UkFOR0VfT1ZFUkxBUFNfTEVGVF9NVUxUSVJBTkdFX09QJywKICAgZGVzY3IgPT4gJ292ZXJsYXBz IG9yIGlzIGxlZnQgb2YnLAogICBvcHJuYW1lID0+ICcmPCcsIG9wcmxlZnQgPT4gJ2FueW11bHRp cmFuZ2UnLCBvcHJyaWdodCA9PiAnYW55bXVsdGlyYW5nZScsCiAgIG9wcnJlc3VsdCA9PiAnYm9v bCcsIG9wcmNvZGUgPT4gJ211bHRpcmFuZ2Vfb3ZlcmxlZnRfbXVsdGlyYW5nZScsCi0gIG9wcnJl c3QgPT4gJ211bHRpcmFuZ2VzZWwnLCBvcHJqb2luID0+ICdzY2FsYXJsdGpvaW5zZWwnIH0sCisg IG9wcnJlc3QgPT4gJ211bHRpcmFuZ2VzZWwnLCBvcHJqb2luID0+ICdtdWx0aXJhbmdlam9pbnNl bCcgfSwKIHsgb2lkID0+ICczNTg1Jywgb2lkX3N5bWJvbCA9PiAnT0lEX1JBTkdFX09WRVJMQVBT X1JJR0hUX01VTFRJUkFOR0VfT1AnLAogICBkZXNjciA9PiAnb3ZlcmxhcHMgb3IgaXMgcmlnaHQg b2YnLAogICBvcHJuYW1lID0+ICcmPicsIG9wcmxlZnQgPT4gJ2FueXJhbmdlJywgb3BycmlnaHQg PT4gJ2FueW11bHRpcmFuZ2UnLAogICBvcHJyZXN1bHQgPT4gJ2Jvb2wnLCBvcHJjb2RlID0+ICdy YW5nZV9vdmVycmlnaHRfbXVsdGlyYW5nZScsCi0gIG9wcnJlc3QgPT4gJ211bHRpcmFuZ2VzZWwn LCBvcHJqb2luID0+ICdzY2FsYXJndGpvaW5zZWwnIH0sCisgIG9wcnJlc3QgPT4gJ211bHRpcmFu Z2VzZWwnLCBvcHJqb2luID0+ICdtdWx0aXJhbmdlam9pbnNlbCcgfSwKIHsgb2lkID0+ICc0MDM1 Jywgb2lkX3N5bWJvbCA9PiAnT0lEX01VTFRJUkFOR0VfT1ZFUkxBUFNfUklHSFRfUkFOR0VfT1An LAogICBkZXNjciA9PiAnb3ZlcmxhcHMgb3IgaXMgcmlnaHQgb2YnLAogICBvcHJuYW1lID0+ICcm PicsIG9wcmxlZnQgPT4gJ2FueW11bHRpcmFuZ2UnLCBvcHJyaWdodCA9PiAnYW55cmFuZ2UnLAog ICBvcHJyZXN1bHQgPT4gJ2Jvb2wnLCBvcHJjb2RlID0+ICdtdWx0aXJhbmdlX292ZXJyaWdodF9y YW5nZScsCi0gIG9wcnJlc3QgPT4gJ211bHRpcmFuZ2VzZWwnLCBvcHJqb2luID0+ICdzY2FsYXJn dGpvaW5zZWwnIH0sCisgIG9wcnJlc3QgPT4gJ211bHRpcmFuZ2VzZWwnLCBvcHJqb2luID0+ICdt dWx0aXJhbmdlam9pbnNlbCcgfSwKIHsgb2lkID0+ICc0MTQyJywgb2lkX3N5bWJvbCA9PiAnT0lE X01VTFRJUkFOR0VfT1ZFUkxBUFNfUklHSFRfTVVMVElSQU5HRV9PUCcsCiAgIGRlc2NyID0+ICdv dmVybGFwcyBvciBpcyByaWdodCBvZicsCiAgIG9wcm5hbWUgPT4gJyY+Jywgb3BybGVmdCA9PiAn YW55bXVsdGlyYW5nZScsIG9wcnJpZ2h0ID0+ICdhbnltdWx0aXJhbmdlJywKICAgb3BycmVzdWx0 ID0+ICdib29sJywgb3ByY29kZSA9PiAnbXVsdGlyYW5nZV9vdmVycmlnaHRfbXVsdGlyYW5nZScs Ci0gIG9wcnJlc3QgPT4gJ211bHRpcmFuZ2VzZWwnLCBvcHJqb2luID0+ICdzY2FsYXJndGpvaW5z ZWwnIH0sCisgIG9wcnJlc3QgPT4gJ211bHRpcmFuZ2VzZWwnLCBvcHJqb2luID0+ICdtdWx0aXJh bmdlam9pbnNlbCcgfSwKIHsgb2lkID0+ICc0MTc5Jywgb2lkX3N5bWJvbCA9PiAnT0lEX1JBTkdF X0FESkFDRU5UX01VTFRJUkFOR0VfT1AnLAogICBkZXNjciA9PiAnaXMgYWRqYWNlbnQgdG8nLAog ICBvcHJuYW1lID0+ICctfC0nLCBvcHJsZWZ0ID0+ICdhbnlyYW5nZScsIG9wcnJpZ2h0ID0+ICdh bnltdWx0aXJhbmdlJywKICAgb3BycmVzdWx0ID0+ICdib29sJywgb3ByY29tID0+ICctfC0oYW55 bXVsdGlyYW5nZSxhbnlyYW5nZSknLAogICBvcHJjb2RlID0+ICdyYW5nZV9hZGphY2VudF9tdWx0 aXJhbmdlJywgb3BycmVzdCA9PiAnbWF0Y2hpbmdzZWwnLAotICBvcHJqb2luID0+ICdtYXRjaGlu Z2pvaW5zZWwnIH0sCisgIG9wcmpvaW4gPT4gJ211bHRpcmFuZ2Vqb2luc2VsJyB9LAogeyBvaWQg PT4gJzQxODAnLCBvaWRfc3ltYm9sID0+ICdPSURfTVVMVElSQU5HRV9BREpBQ0VOVF9SQU5HRV9P UCcsCiAgIGRlc2NyID0+ICdpcyBhZGphY2VudCB0bycsCiAgIG9wcm5hbWUgPT4gJy18LScsIG9w cmxlZnQgPT4gJ2FueW11bHRpcmFuZ2UnLCBvcHJyaWdodCA9PiAnYW55cmFuZ2UnLAogICBvcHJy ZXN1bHQgPT4gJ2Jvb2wnLCBvcHJjb20gPT4gJy18LShhbnlyYW5nZSxhbnltdWx0aXJhbmdlKScs CiAgIG9wcmNvZGUgPT4gJ211bHRpcmFuZ2VfYWRqYWNlbnRfcmFuZ2UnLCBvcHJyZXN0ID0+ICdt YXRjaGluZ3NlbCcsCi0gIG9wcmpvaW4gPT4gJ21hdGNoaW5nam9pbnNlbCcgfSwKKyAgb3Byam9p biA9PiAnbXVsdGlyYW5nZWpvaW5zZWwnIH0sCiB7IG9pZCA9PiAnNDE5OCcsIG9pZF9zeW1ib2wg PT4gJ09JRF9NVUxUSVJBTkdFX0FESkFDRU5UX01VTFRJUkFOR0VfT1AnLAogICBkZXNjciA9PiAn aXMgYWRqYWNlbnQgdG8nLAogICBvcHJuYW1lID0+ICctfC0nLCBvcHJsZWZ0ID0+ICdhbnltdWx0 aXJhbmdlJywgb3BycmlnaHQgPT4gJ2FueW11bHRpcmFuZ2UnLAogICBvcHJyZXN1bHQgPT4gJ2Jv b2wnLCBvcHJjb20gPT4gJy18LShhbnltdWx0aXJhbmdlLGFueW11bHRpcmFuZ2UpJywKICAgb3By Y29kZSA9PiAnbXVsdGlyYW5nZV9hZGphY2VudF9tdWx0aXJhbmdlJywgb3BycmVzdCA9PiAnbWF0 Y2hpbmdzZWwnLAotICBvcHJqb2luID0+ICdtYXRjaGluZ2pvaW5zZWwnIH0sCisgIG9wcmpvaW4g PT4gJ211bHRpcmFuZ2Vqb2luc2VsJyB9LAogeyBvaWQgPT4gJzQzOTInLCBkZXNjciA9PiAnbXVs dGlyYW5nZSB1bmlvbicsCiAgIG9wcm5hbWUgPT4gJysnLCBvcHJsZWZ0ID0+ICdhbnltdWx0aXJh bmdlJywgb3BycmlnaHQgPT4gJ2FueW11bHRpcmFuZ2UnLAogICBvcHJyZXN1bHQgPT4gJ2FueW11 bHRpcmFuZ2UnLCBvcHJjb20gPT4gJysoYW55bXVsdGlyYW5nZSxhbnltdWx0aXJhbmdlKScsCkBA IC0zNDI2LDM2ICszNDI2LDM2IEBACiAgIG9wcm5hbWUgPT4gJzw8Jywgb3BybGVmdCA9PiAnYW55 cmFuZ2UnLCBvcHJyaWdodCA9PiAnYW55bXVsdGlyYW5nZScsCiAgIG9wcnJlc3VsdCA9PiAnYm9v bCcsIG9wcmNvbSA9PiAnPj4oYW55bXVsdGlyYW5nZSxhbnlyYW5nZSknLAogICBvcHJjb2RlID0+ ICdyYW5nZV9iZWZvcmVfbXVsdGlyYW5nZScsIG9wcnJlc3QgPT4gJ211bHRpcmFuZ2VzZWwnLAot ICBvcHJqb2luID0+ICdzY2FsYXJsdGpvaW5zZWwnIH0sCisgIG9wcmpvaW4gPT4gJ211bHRpcmFu Z2Vqb2luc2VsJyB9LAogeyBvaWQgPT4gJzQzOTYnLCBvaWRfc3ltYm9sID0+ICdPSURfTVVMVElS QU5HRV9MRUZUX1JBTkdFX09QJywKICAgZGVzY3IgPT4gJ2lzIGxlZnQgb2YnLAogICBvcHJuYW1l ID0+ICc8PCcsIG9wcmxlZnQgPT4gJ2FueW11bHRpcmFuZ2UnLCBvcHJyaWdodCA9PiAnYW55cmFu Z2UnLAogICBvcHJyZXN1bHQgPT4gJ2Jvb2wnLCBvcHJjb20gPT4gJz4+KGFueXJhbmdlLGFueW11 bHRpcmFuZ2UpJywKICAgb3ByY29kZSA9PiAnbXVsdGlyYW5nZV9iZWZvcmVfcmFuZ2UnLCBvcHJy ZXN0ID0+ICdtdWx0aXJhbmdlc2VsJywKLSAgb3Byam9pbiA9PiAnc2NhbGFybHRqb2luc2VsJyB9 LAorICBvcHJqb2luID0+ICdtdWx0aXJhbmdlam9pbnNlbCcgfSwKIHsgb2lkID0+ICc0Mzk3Jywg b2lkX3N5bWJvbCA9PiAnT0lEX01VTFRJUkFOR0VfTEVGVF9NVUxUSVJBTkdFX09QJywKICAgZGVz Y3IgPT4gJ2lzIGxlZnQgb2YnLAogICBvcHJuYW1lID0+ICc8PCcsIG9wcmxlZnQgPT4gJ2FueW11 bHRpcmFuZ2UnLCBvcHJyaWdodCA9PiAnYW55bXVsdGlyYW5nZScsCiAgIG9wcnJlc3VsdCA9PiAn Ym9vbCcsIG9wcmNvbSA9PiAnPj4oYW55bXVsdGlyYW5nZSxhbnltdWx0aXJhbmdlKScsCiAgIG9w cmNvZGUgPT4gJ211bHRpcmFuZ2VfYmVmb3JlX211bHRpcmFuZ2UnLCBvcHJyZXN0ID0+ICdtdWx0 aXJhbmdlc2VsJywKLSAgb3Byam9pbiA9PiAnc2NhbGFybHRqb2luc2VsJyB9LAorICBvcHJqb2lu ID0+ICdtdWx0aXJhbmdlam9pbnNlbCcgfSwKIHsgb2lkID0+ICc0Mzk4Jywgb2lkX3N5bWJvbCA9 PiAnT0lEX1JBTkdFX1JJR0hUX01VTFRJUkFOR0VfT1AnLAogICBkZXNjciA9PiAnaXMgcmlnaHQg b2YnLAogICBvcHJuYW1lID0+ICc+PicsIG9wcmxlZnQgPT4gJ2FueXJhbmdlJywgb3BycmlnaHQg PT4gJ2FueW11bHRpcmFuZ2UnLAogICBvcHJyZXN1bHQgPT4gJ2Jvb2wnLCBvcHJjb20gPT4gJzw8 KGFueW11bHRpcmFuZ2UsYW55cmFuZ2UpJywKICAgb3ByY29kZSA9PiAncmFuZ2VfYWZ0ZXJfbXVs dGlyYW5nZScsIG9wcnJlc3QgPT4gJ211bHRpcmFuZ2VzZWwnLAotICBvcHJqb2luID0+ICdzY2Fs YXJndGpvaW5zZWwnIH0sCisgIG9wcmpvaW4gPT4gJ211bHRpcmFuZ2Vqb2luc2VsJyB9LAogeyBv aWQgPT4gJzQzOTknLCBvaWRfc3ltYm9sID0+ICdPSURfTVVMVElSQU5HRV9SSUdIVF9SQU5HRV9P UCcsCiAgIGRlc2NyID0+ICdpcyByaWdodCBvZicsCiAgIG9wcm5hbWUgPT4gJz4+Jywgb3BybGVm dCA9PiAnYW55bXVsdGlyYW5nZScsIG9wcnJpZ2h0ID0+ICdhbnlyYW5nZScsCiAgIG9wcnJlc3Vs dCA9PiAnYm9vbCcsIG9wcmNvbSA9PiAnPDwoYW55cmFuZ2UsYW55bXVsdGlyYW5nZSknLAogICBv cHJjb2RlID0+ICdtdWx0aXJhbmdlX2FmdGVyX3JhbmdlJywgb3BycmVzdCA9PiAnbXVsdGlyYW5n ZXNlbCcsCi0gIG9wcmpvaW4gPT4gJ3NjYWxhcmd0am9pbnNlbCcgfSwKKyAgb3Byam9pbiA9PiAn bXVsdGlyYW5nZWpvaW5zZWwnIH0sCiB7IG9pZCA9PiAnNDQwMCcsIG9pZF9zeW1ib2wgPT4gJ09J RF9NVUxUSVJBTkdFX1JJR0hUX01VTFRJUkFOR0VfT1AnLAogICBkZXNjciA9PiAnaXMgcmlnaHQg b2YnLAogICBvcHJuYW1lID0+ICc+PicsIG9wcmxlZnQgPT4gJ2FueW11bHRpcmFuZ2UnLCBvcHJy aWdodCA9PiAnYW55bXVsdGlyYW5nZScsCiAgIG9wcnJlc3VsdCA9PiAnYm9vbCcsIG9wcmNvbSA9 PiAnPDwoYW55bXVsdGlyYW5nZSxhbnltdWx0aXJhbmdlKScsCiAgIG9wcmNvZGUgPT4gJ211bHRp cmFuZ2VfYWZ0ZXJfbXVsdGlyYW5nZScsIG9wcnJlc3QgPT4gJ211bHRpcmFuZ2VzZWwnLAotICBv cHJqb2luID0+ICdzY2FsYXJndGpvaW5zZWwnIH0sCisgIG9wcmpvaW4gPT4gJ211bHRpcmFuZ2Vq b2luc2VsJyB9LAogCiBdCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2Mu ZGF0IGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdAppbmRleCA4N2FhNTcxYTMzLi5j MWQ0MTE5Njg0IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0Cisr KyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKQEAgLTExODg1LDQgKzExODg1LDEy IEBACiAgIHByb3JldHR5cGUgPT4gJ2J5dGVhJywgcHJvYXJndHlwZXMgPT4gJ3BnX2JyaW5fbWlu bWF4X211bHRpX3N1bW1hcnknLAogICBwcm9zcmMgPT4gJ2JyaW5fbWlubWF4X211bHRpX3N1bW1h cnlfc2VuZCcgfSwKIAoreyBvaWQgPT4gJzgzNTUnLCBkZXNjciA9PiAnam9pbiBzZWxlY3Rpdml0 eSBmb3IgcmFuZ2Ugb3BlcmF0b3JzJywKKyAgcHJvbmFtZSA9PiAncmFuZ2Vqb2luc2VsJywgcHJv dm9sYXRpbGUgPT4gJ3MnLCBwcm9yZXR0eXBlID0+ICdmbG9hdDgnLAorICBwcm9hcmd0eXBlcyA9 PiAnaW50ZXJuYWwgb2lkIGludGVybmFsIGludDIgaW50ZXJuYWwnLAorICBwcm9zcmMgPT4gJ3Jh bmdlam9pbnNlbCcgfSwKK3sgb2lkID0+ICc4MzU2JywgZGVzY3IgPT4gJ2pvaW4gc2VsZWN0aXZp dHkgZm9yIG11bHRpcmFuZ2Ugb3BlcmF0b3JzJywKKyAgcHJvbmFtZSA9PiAnbXVsdGlyYW5nZWpv aW5zZWwnLCBwcm92b2xhdGlsZSA9PiAncycsIHByb3JldHR5cGUgPT4gJ2Zsb2F0OCcsCisgIHBy b2FyZ3R5cGVzID0+ICdpbnRlcm5hbCBvaWQgaW50ZXJuYWwgaW50MiBpbnRlcm5hbCcsCisgIHBy b3NyYyA9PiAnbXVsdGlyYW5nZWpvaW5zZWwnIH0sCiBdCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9y ZWdyZXNzL2V4cGVjdGVkL211bHRpcmFuZ2V0eXBlcy5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4 cGVjdGVkL211bHRpcmFuZ2V0eXBlcy5vdXQKaW5kZXggYWMyZWI4NGMzYS4uYjBlZWI2NzJmMCAx MDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9tdWx0aXJhbmdldHlwZXMub3V0 CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvbXVsdGlyYW5nZXR5cGVzLm91dApAQCAt MzMzMCwzICszMzMwLDI3NSBAQCBjcmVhdGUgZnVuY3Rpb24gbXJfdGFibGVfZmFpbChpIGFueWVs ZW1lbnQpIHJldHVybnMgdGFibGUoaSBhbnllbGVtZW50LCByIGFueW11bAogICBhcyAkJCBzZWxl Y3QgJDEsICdbMSwxMF0nICQkIGxhbmd1YWdlIHNxbDsKIEVSUk9SOiAgY2Fubm90IGRldGVybWlu ZSByZXN1bHQgZGF0YSB0eXBlCiBERVRBSUw6ICBBIHJlc3VsdCBvZiB0eXBlIGFueW11bHRpcmFu Z2UgcmVxdWlyZXMgYXQgbGVhc3Qgb25lIGlucHV0IG9mIHR5cGUgYW55cmFuZ2Ugb3IgYW55bXVs dGlyYW5nZS4KKy0tIHRlc3QgbXVsdGlyYW5nZSBqb2luIG9wZXJhdG9ycworY3JlYXRlIHRhYmxl IHRlc3RfbXVsdGlyYW5nZV9qb2luXzEobXIxIGludDRtdWx0aXJhbmdlKTsKK2NyZWF0ZSB0YWJs ZSB0ZXN0X211bHRpcmFuZ2Vfam9pbl8yKG1yMiBpbnQ0bXVsdGlyYW5nZSk7CitjcmVhdGUgdGFi bGUgdGVzdF9yYW5nZV9qb2luKGlyIGludDRyYW5nZSk7CitjcmVhdGUgdGFibGUgdGVzdF9lbGVt X2pvaW4oZWxlbSBpbnQ0KTsKK2luc2VydCBpbnRvIHRlc3RfbXVsdGlyYW5nZV9qb2luXzEgc2Vs ZWN0IGludDRtdWx0aXJhbmdlKGludDRyYW5nZShnLCBnKzEwKSxpbnQ0cmFuZ2UoZysyMCwgZysz MCksaW50NHJhbmdlKGcrNDAsIGcrNTApKSBmcm9tIGdlbmVyYXRlX3NlcmllcygxLDIwMCkgZzsK K2luc2VydCBpbnRvIHRlc3RfbXVsdGlyYW5nZV9qb2luXzEgc2VsZWN0ICd7fSc6OmludDRtdWx0 aXJhbmdlIGZyb20gZ2VuZXJhdGVfc2VyaWVzKDEsNTApIGc7CitpbnNlcnQgaW50byB0ZXN0X211 bHRpcmFuZ2Vfam9pbl8xIHNlbGVjdCBpbnQ0bXVsdGlyYW5nZShpbnQ0cmFuZ2UoZywgZysxMDAw MCkpIGZyb20gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwKSBnOworaW5zZXJ0IGludG8gdGVzdF9tdWx0 aXJhbmdlX2pvaW5fMSBzZWxlY3QgaW50NG11bHRpcmFuZ2UoaW50NHJhbmdlKE5VTEwsIGcqMTAs ICcoXScpLCBpbnQ0cmFuZ2UoZyoxMCwgZyoyMCwgJyhdJykpIGZyb20gZ2VuZXJhdGVfc2VyaWVz KDEsMTApIGc7CitpbnNlcnQgaW50byB0ZXN0X211bHRpcmFuZ2Vfam9pbl8xIHNlbGVjdCBpbnQ0 bXVsdGlyYW5nZShpbnQ0cmFuZ2UoZyoxMCwgZyoyMCwgJyhdJyksIGludDRyYW5nZShnKjIwLCBO VUxMLCAnWyknKSkgZnJvbSBnZW5lcmF0ZV9zZXJpZXMoMSwxMCkgZzsKK2luc2VydCBpbnRvIHRl c3RfbXVsdGlyYW5nZV9qb2luXzIgc2VsZWN0IGludDRtdWx0aXJhbmdlKGludDRyYW5nZShnLCBn KzEwKSxpbnQ0cmFuZ2UoZysyMCwgZyszMCksaW50NHJhbmdlKGcrNDAsIGcrNTApKSBmcm9tIGdl bmVyYXRlX3NlcmllcygxLDIwKSBnOworaW5zZXJ0IGludG8gdGVzdF9tdWx0aXJhbmdlX2pvaW5f MiBzZWxlY3QgJ3t9Jzo6aW50NG11bHRpcmFuZ2UgZnJvbSBnZW5lcmF0ZV9zZXJpZXMoMSw1KSBn OworaW5zZXJ0IGludG8gdGVzdF9tdWx0aXJhbmdlX2pvaW5fMiBzZWxlY3QgaW50NG11bHRpcmFu Z2UoaW50NHJhbmdlKGcsIGcrMTAwMDApKSBmcm9tIGdlbmVyYXRlX3NlcmllcygxLDEwKSBnOwor aW5zZXJ0IGludG8gdGVzdF9tdWx0aXJhbmdlX2pvaW5fMiBzZWxlY3QgaW50NG11bHRpcmFuZ2Uo aW50NHJhbmdlKE5VTEwsIGcqMTAsICcoXScpLCBpbnQ0cmFuZ2UoZyoxMCwgZyoyMCwgJyhdJykp IGZyb20gZ2VuZXJhdGVfc2VyaWVzKDEsMTApIGc7CitpbnNlcnQgaW50byB0ZXN0X211bHRpcmFu Z2Vfam9pbl8yIHNlbGVjdCBpbnQ0bXVsdGlyYW5nZShpbnQ0cmFuZ2UoZyoxMCwgZyoyMCwgJyhd JyksIGludDRyYW5nZShnKjIwLCBOVUxMLCAnWyknKSkgZnJvbSBnZW5lcmF0ZV9zZXJpZXMoMSwx MCkgZzsKK2luc2VydCBpbnRvIHRlc3RfcmFuZ2Vfam9pbiBzZWxlY3QgaW50NHJhbmdlKGcsIGcr MTApIGZyb20gZ2VuZXJhdGVfc2VyaWVzKDEsMjApIGc7CitpbnNlcnQgaW50byB0ZXN0X3Jhbmdl X2pvaW4gc2VsZWN0IGludDRyYW5nZShnLCBnKzEwMDAwKSBmcm9tIGdlbmVyYXRlX3Nlcmllcygx LDEwKSBnOworaW5zZXJ0IGludG8gdGVzdF9yYW5nZV9qb2luIHNlbGVjdCBpbnQ0cmFuZ2UoTlVM TCxnKjEwLCcoXScpIGZyb20gZ2VuZXJhdGVfc2VyaWVzKDEsMTApIGc7CitpbnNlcnQgaW50byB0 ZXN0X3JhbmdlX2pvaW4gc2VsZWN0IGludDRyYW5nZShnKjEwLE5VTEwsJ1spJykgZnJvbSBnZW5l cmF0ZV9zZXJpZXMoMSwxMCkgZzsKK2luc2VydCBpbnRvIHRlc3RfcmFuZ2Vfam9pbiBzZWxlY3Qg aW50NHJhbmdlKGcsIGcrMTApIGZyb20gZ2VuZXJhdGVfc2VyaWVzKDEsMjApIGc7CitpbnNlcnQg aW50byB0ZXN0X3JhbmdlX2pvaW4gc2VsZWN0ICdlbXB0eSc6OmludDRyYW5nZSBmcm9tIGdlbmVy YXRlX3NlcmllcygxLDIwKSBnOworaW5zZXJ0IGludG8gdGVzdF9yYW5nZV9qb2luIHNlbGVjdCBO VUxMIGZyb20gZ2VuZXJhdGVfc2VyaWVzKDEsNSkgZzsKK2luc2VydCBpbnRvIHRlc3RfZWxlbV9q b2luIHNlbGVjdCBnIGZyb20gZ2VuZXJhdGVfc2VyaWVzKDEsMjApIGc7CitpbnNlcnQgaW50byB0 ZXN0X2VsZW1fam9pbiBzZWxlY3QgZysxMDAwMCBmcm9tIGdlbmVyYXRlX3NlcmllcygxLDEwKSBn OworaW5zZXJ0IGludG8gdGVzdF9lbGVtX2pvaW4gc2VsZWN0IGcqMTAgZnJvbSBnZW5lcmF0ZV9z ZXJpZXMoMSwxMCkgZzsKK2luc2VydCBpbnRvIHRlc3RfZWxlbV9qb2luIHNlbGVjdCBnIGZyb20g Z2VuZXJhdGVfc2VyaWVzKDEsMjApIGc7CitpbnNlcnQgaW50byB0ZXN0X2VsZW1fam9pbiBzZWxl Y3QgTlVMTCBmcm9tIGdlbmVyYXRlX3NlcmllcygxLDUpIGc7CithbmFseXplIHRlc3RfbXVsdGly YW5nZV9qb2luXzE7CithbmFseXplIHRlc3RfbXVsdGlyYW5nZV9qb2luXzI7CithbmFseXplIHRl c3RfcmFuZ2Vfam9pbjsKK2FuYWx5emUgdGVzdF9lbGVtX2pvaW47CitjcmVhdGUgZnVuY3Rpb24g Y2hlY2tfZXN0aW1hdGVkX3Jvd3ModGV4dCkgcmV0dXJucyB0YWJsZSAoZXN0aW1hdGVkIGludCwg YWN0dWFsIGludCkKK2xhbmd1YWdlIHBscGdzcWwgYXMKKyQkCitkZWNsYXJlCisgICAgbG4gdGV4 dDsKKyAgICB0bXAgdGV4dFtdOworICAgIGZpcnN0X3JvdyBib29sIDo9IHRydWU7CitiZWdpbgor ICAgIGZvciBsbiBpbgorICAgICAgICBleGVjdXRlIGZvcm1hdCgnZXhwbGFpbiBhbmFseXplICVz JywgJDEpCisgICAgbG9vcAorICAgICAgICBpZiBmaXJzdF9yb3cgdGhlbgorICAgICAgICAgICAg Zmlyc3Rfcm93IDo9IGZhbHNlOworICAgICAgICAgICAgdG1wIDo9IHJlZ2V4cF9tYXRjaChsbiwg J3Jvd3M9KFxkKikgLiogcm93cz0oXGQqKScpOworICAgICAgICAgICAgcmV0dXJuIHF1ZXJ5IHNl bGVjdCB0bXBbMV06OmludCwgdG1wWzJdOjppbnQ7CisgICAgICAgIGVuZCBpZjsKKyAgICBlbmQg bG9vcDsKK2VuZDsKKyQkOworU0VMRUNUICogRlJPTSBjaGVja19lc3RpbWF0ZWRfcm93cygnCitz ZWxlY3QgKiBmcm9tIHRlc3RfbXVsdGlyYW5nZV9qb2luXzEsIHRlc3RfbXVsdGlyYW5nZV9qb2lu XzIgd2hlcmUgbXIxID0gbXIyJyk7CisgZXN0aW1hdGVkIHwgYWN0dWFsIAorLS0tLS0tLS0tLS0r LS0tLS0tLS0KKyAgICAgICAgNTUgfCAgICAzMDAKKygxIHJvdykKKworU0VMRUNUICogRlJPTSBj aGVja19lc3RpbWF0ZWRfcm93cygnCitzZWxlY3QgKiBmcm9tIHRlc3RfbXVsdGlyYW5nZV9qb2lu XzEsIHRlc3RfbXVsdGlyYW5nZV9qb2luXzIgd2hlcmUgbXIxIDwgbXIyJyk7CisgZXN0aW1hdGVk IHwgYWN0dWFsIAorLS0tLS0tLS0tLS0rLS0tLS0tLS0KKyAgICAgIDQ1NzkgfCAgIDQ1OTgKKygx IHJvdykKKworU0VMRUNUICogRlJPTSBjaGVja19lc3RpbWF0ZWRfcm93cygnCitzZWxlY3QgKiBm cm9tIHRlc3RfbXVsdGlyYW5nZV9qb2luXzEsIHRlc3RfbXVsdGlyYW5nZV9qb2luXzIgd2hlcmUg bXIxIDw9IG1yMicpOworIGVzdGltYXRlZCB8IGFjdHVhbCAKKy0tLS0tLS0tLS0tKy0tLS0tLS0t CisgICAgICA3MzA5IHwgICA0ODk4CisoMSByb3cpCisKK1NFTEVDVCAqIEZST00gY2hlY2tfZXN0 aW1hdGVkX3Jvd3MoJworc2VsZWN0ICogZnJvbSB0ZXN0X211bHRpcmFuZ2Vfam9pbl8xLCB0ZXN0 X211bHRpcmFuZ2Vfam9pbl8yIHdoZXJlIG1yMSA+IG1yMicpOworIGVzdGltYXRlZCB8IGFjdHVh bCAKKy0tLS0tLS0tLS0tKy0tLS0tLS0tCisgICAgIDEzMDQxIHwgIDE1NDUyCisoMSByb3cpCisK K1NFTEVDVCAqIEZST00gY2hlY2tfZXN0aW1hdGVkX3Jvd3MoJworc2VsZWN0ICogZnJvbSB0ZXN0 X211bHRpcmFuZ2Vfam9pbl8xLCB0ZXN0X211bHRpcmFuZ2Vfam9pbl8yIHdoZXJlIG1yMSA+PSBt cjInKTsKKyBlc3RpbWF0ZWQgfCBhY3R1YWwgCistLS0tLS0tLS0tLSstLS0tLS0tLQorICAgICAx NTc3MSB8ICAxNTc1MgorKDEgcm93KQorCitTRUxFQ1QgKiBGUk9NIGNoZWNrX2VzdGltYXRlZF9y b3dzKCcKK3NlbGVjdCAqIGZyb20gdGVzdF9tdWx0aXJhbmdlX2pvaW5fMSwgdGVzdF9tdWx0aXJh bmdlX2pvaW5fMiB3aGVyZSBtcjEgJiYgbXIyJyk7CisgZXN0aW1hdGVkIHwgYWN0dWFsIAorLS0t LS0tLS0tLS0rLS0tLS0tLS0KKyAgICAgMTEwOTggfCAgMTA5MzIKKygxIHJvdykKKworU0VMRUNU ICogRlJPTSBjaGVja19lc3RpbWF0ZWRfcm93cygnCitzZWxlY3QgKiBmcm9tIHRlc3RfbXVsdGly YW5nZV9qb2luXzEsIHRlc3RfcmFuZ2Vfam9pbiB3aGVyZSBtcjEgJiYgaXInKTsKKyBlc3RpbWF0 ZWQgfCBhY3R1YWwgCistLS0tLS0tLS0tLSstLS0tLS0tLQorICAgICAgOTYxMSB8ICAgOTQ3MQor KDEgcm93KQorCitTRUxFQ1QgKiBGUk9NIGNoZWNrX2VzdGltYXRlZF9yb3dzKCcKK3NlbGVjdCAq IGZyb20gdGVzdF9yYW5nZV9qb2luLCB0ZXN0X211bHRpcmFuZ2Vfam9pbl8yIHdoZXJlIGlyICYm IG1yMicpOworIGVzdGltYXRlZCB8IGFjdHVhbCAKKy0tLS0tLS0tLS0tKy0tLS0tLS0tCisgICAg ICAyOTI0IHwgICAyODUxCisoMSByb3cpCisKK1NFTEVDVCAqIEZST00gY2hlY2tfZXN0aW1hdGVk X3Jvd3MoJworc2VsZWN0ICogZnJvbSB0ZXN0X211bHRpcmFuZ2Vfam9pbl8xLCB0ZXN0X211bHRp cmFuZ2Vfam9pbl8yIHdoZXJlIG1yMSA8QCBtcjInKTsKKyBlc3RpbWF0ZWQgfCBhY3R1YWwgCist LS0tLS0tLS0tLSstLS0tLS0tLQorICAgICAgODQ5MSB8ICAgNzM5MworKDEgcm93KQorCitTRUxF Q1QgKiBGUk9NIGNoZWNrX2VzdGltYXRlZF9yb3dzKCcKK3NlbGVjdCAqIGZyb20gdGVzdF9tdWx0 aXJhbmdlX2pvaW5fMSwgdGVzdF9yYW5nZV9qb2luIHdoZXJlIG1yMSA8QCBpcicpOworIGVzdGlt YXRlZCB8IGFjdHVhbCAKKy0tLS0tLS0tLS0tKy0tLS0tLS0tCisgICAgICA5NzU0IHwgICA4NjIx CisoMSByb3cpCisKK1NFTEVDVCAqIEZST00gY2hlY2tfZXN0aW1hdGVkX3Jvd3MoJworc2VsZWN0 ICogZnJvbSB0ZXN0X3JhbmdlX2pvaW4sIHRlc3RfbXVsdGlyYW5nZV9qb2luXzIgd2hlcmUgaXIg PEAgbXIyJyk7CisgZXN0aW1hdGVkIHwgYWN0dWFsIAorLS0tLS0tLS0tLS0rLS0tLS0tLS0KKyAg ICAgIDI2NjMgfCAgIDE5ODcKKygxIHJvdykKKworU0VMRUNUICogRlJPTSBjaGVja19lc3RpbWF0 ZWRfcm93cygnCitzZWxlY3QgKiBmcm9tIHRlc3RfbXVsdGlyYW5nZV9qb2luXzEsIHRlc3RfbXVs dGlyYW5nZV9qb2luXzIgd2hlcmUgbXIxIEA+IG1yMicpOworIGVzdGltYXRlZCB8IGFjdHVhbCAK Ky0tLS0tLS0tLS0tKy0tLS0tLS0tCisgICAgICA1MDIyIHwgICAyMzYxCisoMSByb3cpCisKK1NF TEVDVCAqIEZST00gY2hlY2tfZXN0aW1hdGVkX3Jvd3MoJworc2VsZWN0ICogZnJvbSB0ZXN0X211 bHRpcmFuZ2Vfam9pbl8xLCB0ZXN0X3JhbmdlX2pvaW4gd2hlcmUgbXIxIEA+IGlyJyk7CisgZXN0 aW1hdGVkIHwgYWN0dWFsIAorLS0tLS0tLS0tLS0rLS0tLS0tLS0KKyAgICAgMTI0NzMgfCAgIDgz OTcKKygxIHJvdykKKworU0VMRUNUICogRlJPTSBjaGVja19lc3RpbWF0ZWRfcm93cygnCitzZWxl Y3QgKiBmcm9tIHRlc3RfcmFuZ2Vfam9pbiwgdGVzdF9tdWx0aXJhbmdlX2pvaW5fMiB3aGVyZSBp ciBAPiBtcjInKTsKKyBlc3RpbWF0ZWQgfCBhY3R1YWwgCistLS0tLS0tLS0tLSstLS0tLS0tLQor ICAgICAgMTE3NyB8ICAgIDgwMAorKDEgcm93KQorCitTRUxFQ1QgKiBGUk9NIGNoZWNrX2VzdGlt YXRlZF9yb3dzKCcKK3NlbGVjdCAqIGZyb20gdGVzdF9tdWx0aXJhbmdlX2pvaW5fMSwgdGVzdF9t dWx0aXJhbmdlX2pvaW5fMiB3aGVyZSBtcjEgPDwgbXIyJyk7CisgZXN0aW1hdGVkIHwgYWN0dWFs IAorLS0tLS0tLS0tLS0rLS0tLS0tLS0KKyAgICAgICAxNTIgfCAgICAxODEKKygxIHJvdykKKwor U0VMRUNUICogRlJPTSBjaGVja19lc3RpbWF0ZWRfcm93cygnCitzZWxlY3QgKiBmcm9tIHRlc3Rf bXVsdGlyYW5nZV9qb2luXzEsIHRlc3RfcmFuZ2Vfam9pbiB3aGVyZSBtcjEgPDwgaXInKTsKKyBl c3RpbWF0ZWQgfCBhY3R1YWwgCistLS0tLS0tLS0tLSstLS0tLS0tLQorICAgICAgIDE0NSB8ICAg IDE3MAorKDEgcm93KQorCitTRUxFQ1QgKiBGUk9NIGNoZWNrX2VzdGltYXRlZF9yb3dzKCcKK3Nl bGVjdCAqIGZyb20gdGVzdF9yYW5nZV9qb2luLCB0ZXN0X211bHRpcmFuZ2Vfam9pbl8yIHdoZXJl IGlyIDw8IG1yMicpOworIGVzdGltYXRlZCB8IGFjdHVhbCAKKy0tLS0tLS0tLS0tKy0tLS0tLS0t CisgICAgICAgNDc4IHwgICAgNTE5CisoMSByb3cpCisKK1NFTEVDVCAqIEZST00gY2hlY2tfZXN0 aW1hdGVkX3Jvd3MoJworc2VsZWN0ICogZnJvbSB0ZXN0X211bHRpcmFuZ2Vfam9pbl8xLCB0ZXN0 X211bHRpcmFuZ2Vfam9pbl8yIHdoZXJlIG1yMSA+PiBtcjInKTsKKyBlc3RpbWF0ZWQgfCBhY3R1 YWwgCistLS0tLS0tLS0tLSstLS0tLS0tLQorICAgICAgNDc1MCB8ICAgNDgzNworKDEgcm93KQor CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2VzdGltYXRlZF9yb3dzKCcKK3NlbGVjdCAqIGZyb20gdGVz dF9tdWx0aXJhbmdlX2pvaW5fMSwgdGVzdF9yYW5nZV9qb2luIHdoZXJlIG1yMSA+PiBpcicpOwor IGVzdGltYXRlZCB8IGFjdHVhbCAKKy0tLS0tLS0tLS0tKy0tLS0tLS0tCisgICAgIDEyNjQ0IHwg IDEyNzM5CisoMSByb3cpCisKK1NFTEVDVCAqIEZST00gY2hlY2tfZXN0aW1hdGVkX3Jvd3MoJwor c2VsZWN0ICogZnJvbSB0ZXN0X3JhbmdlX2pvaW4sIHRlc3RfbXVsdGlyYW5nZV9qb2luXzIgd2hl cmUgaXIgPj4gbXIyJyk7CisgZXN0aW1hdGVkIHwgYWN0dWFsIAorLS0tLS0tLS0tLS0rLS0tLS0t LS0KKyAgICAgICAgOTggfCAgICAxMTAKKygxIHJvdykKKworU0VMRUNUICogRlJPTSBjaGVja19l c3RpbWF0ZWRfcm93cygnCitzZWxlY3QgKiBmcm9tIHRlc3RfbXVsdGlyYW5nZV9qb2luXzEsIHRl c3RfbXVsdGlyYW5nZV9qb2luXzIgd2hlcmUgbXIxICY8IG1yMicpOworIGVzdGltYXRlZCB8IGFj dHVhbCAKKy0tLS0tLS0tLS0tKy0tLS0tLS0tCisgICAgICA0ODY4IHwgICA2MzE4CisoMSByb3cp CisKK1NFTEVDVCAqIEZST00gY2hlY2tfZXN0aW1hdGVkX3Jvd3MoJworc2VsZWN0ICogZnJvbSB0 ZXN0X211bHRpcmFuZ2Vfam9pbl8xLCB0ZXN0X3JhbmdlX2pvaW4gd2hlcmUgbXIxICY8IGlyJyk7 CisgZXN0aW1hdGVkIHwgYWN0dWFsIAorLS0tLS0tLS0tLS0rLS0tLS0tLS0KKyAgICAgIDQxMjAg fCAgIDU1NTYKKygxIHJvdykKKworU0VMRUNUICogRlJPTSBjaGVja19lc3RpbWF0ZWRfcm93cygn CitzZWxlY3QgKiBmcm9tIHRlc3RfcmFuZ2Vfam9pbiwgdGVzdF9tdWx0aXJhbmdlX2pvaW5fMiB3 aGVyZSBpciAmPCBtcjInKTsKKyBlc3RpbWF0ZWQgfCBhY3R1YWwgCistLS0tLS0tLS0tLSstLS0t LS0tLQorICAgICAgMTk4NiB8ICAgMjYyNworKDEgcm93KQorCitTRUxFQ1QgKiBGUk9NIGNoZWNr X2VzdGltYXRlZF9yb3dzKCcKK3NlbGVjdCAqIGZyb20gdGVzdF9tdWx0aXJhbmdlX2pvaW5fMSwg dGVzdF9tdWx0aXJhbmdlX2pvaW5fMiB3aGVyZSBtcjEgJj4gbXIyJyk7CisgZXN0aW1hdGVkIHwg YWN0dWFsIAorLS0tLS0tLS0tLS0rLS0tLS0tLS0KKyAgICAgMTE0NDEgfCAgMTM5NzYKKygxIHJv dykKKworU0VMRUNUICogRlJPTSBjaGVja19lc3RpbWF0ZWRfcm93cygnCitzZWxlY3QgKiBmcm9t IHRlc3RfbXVsdGlyYW5nZV9qb2luXzEsIHRlc3RfcmFuZ2Vfam9pbiB3aGVyZSBtcjEgJj4gaXIn KTsKKyBlc3RpbWF0ZWQgfCBhY3R1YWwgCistLS0tLS0tLS0tLSstLS0tLS0tLQorICAgICAxNjE4 NCB8ICAxOTgwNworKDEgcm93KQorCitTRUxFQ1QgKiBGUk9NIGNoZWNrX2VzdGltYXRlZF9yb3dz KCcKK3NlbGVjdCAqIGZyb20gdGVzdF9yYW5nZV9qb2luLCB0ZXN0X211bHRpcmFuZ2Vfam9pbl8y IHdoZXJlIGlyICY+IG1yMicpOworIGVzdGltYXRlZCB8IGFjdHVhbCAKKy0tLS0tLS0tLS0tKy0t LS0tLS0tCisgICAgICAxODE5IHwgICAxODk1CisoMSByb3cpCisKK1NFTEVDVCAqIEZST00gY2hl Y2tfZXN0aW1hdGVkX3Jvd3MoJworc2VsZWN0ICogZnJvbSB0ZXN0X211bHRpcmFuZ2Vfam9pbl8x LCB0ZXN0X211bHRpcmFuZ2Vfam9pbl8yIHdoZXJlIG1yMSAtfC0gbXIyJyk7CisgZXN0aW1hdGVk IHwgYWN0dWFsIAorLS0tLS0tLS0tLS0rLS0tLS0tLS0KKyAgICAgICAxNjAgfCAgICAgNzEKKygx IHJvdykKKworU0VMRUNUICogRlJPTSBjaGVja19lc3RpbWF0ZWRfcm93cygnCitzZWxlY3QgKiBm cm9tIHRlc3RfbXVsdGlyYW5nZV9qb2luXzEsIHRlc3RfcmFuZ2Vfam9pbiB3aGVyZSBtcjEgLXwt IGlyJyk7CisgZXN0aW1hdGVkIHwgYWN0dWFsIAorLS0tLS0tLS0tLS0rLS0tLS0tLS0KKyAgICAg ICAyMjQgfCAgICAxMTgKKygxIHJvdykKKworU0VMRUNUICogRlJPTSBjaGVja19lc3RpbWF0ZWRf cm93cygnCitzZWxlY3QgKiBmcm9tIHRlc3RfcmFuZ2Vfam9pbiwgdGVzdF9tdWx0aXJhbmdlX2pv aW5fMiB3aGVyZSBpciAtfC0gbXIyJyk7CisgZXN0aW1hdGVkIHwgYWN0dWFsIAorLS0tLS0tLS0t LS0rLS0tLS0tLS0KKyAgICAgICAgMzUgfCAgICAgMzcKKygxIHJvdykKKworU0VMRUNUICogRlJP TSBjaGVja19lc3RpbWF0ZWRfcm93cygnCitzZWxlY3QgKiBmcm9tIHRlc3RfZWxlbV9qb2luLCB0 ZXN0X211bHRpcmFuZ2Vfam9pbl8xIHdoZXJlIGVsZW0gPEAgbXIxJyk7CisgZXN0aW1hdGVkIHwg YWN0dWFsIAorLS0tLS0tLS0tLS0rLS0tLS0tLS0KKyAgICAgICAxMjAgfCAgIDMxMTAKKygxIHJv dykKKworU0VMRUNUICogRlJPTSBjaGVja19lc3RpbWF0ZWRfcm93cygnCitzZWxlY3QgKiBmcm9t IHRlc3RfbXVsdGlyYW5nZV9qb2luXzEsIHRlc3RfZWxlbV9qb2luIHdoZXJlIG1yMSBAPiBlbGVt Jyk7CisgZXN0aW1hdGVkIHwgYWN0dWFsIAorLS0tLS0tLS0tLS0rLS0tLS0tLS0KKyAgICAgICAx MjAgfCAgIDMxMTAKKygxIHJvdykKKworZHJvcCBmdW5jdGlvbiBjaGVja19lc3RpbWF0ZWRfcm93 czsKK2Ryb3AgdGFibGUgdGVzdF9tdWx0aXJhbmdlX2pvaW5fMTsKK2Ryb3AgdGFibGUgdGVzdF9t dWx0aXJhbmdlX2pvaW5fMjsKK2Ryb3AgdGFibGUgdGVzdF9yYW5nZV9qb2luOworZHJvcCB0YWJs ZSB0ZXN0X2VsZW1fam9pbjsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQv cmFuZ2V0eXBlcy5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3JhbmdldHlwZXMub3V0 CmluZGV4IDA0Y2NkNWQ0NTEuLjEwYTc2ZGVjN2EgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jl c3MvZXhwZWN0ZWQvcmFuZ2V0eXBlcy5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3Rl ZC9yYW5nZXR5cGVzLm91dApAQCAtMTc2NywzICsxNzY3LDE1NyBAQCBjcmVhdGUgZnVuY3Rpb24g dGFibGVfZmFpbChpIGFueWVsZW1lbnQpIHJldHVybnMgdGFibGUoaSBhbnllbGVtZW50LCByIGFu eXJhbmdlKQogICBhcyAkJCBzZWxlY3QgJDEsICdbMSwxMF0nICQkIGxhbmd1YWdlIHNxbDsKIEVS Uk9SOiAgY2Fubm90IGRldGVybWluZSByZXN1bHQgZGF0YSB0eXBlCiBERVRBSUw6ICBBIHJlc3Vs dCBvZiB0eXBlIGFueXJhbmdlIHJlcXVpcmVzIGF0IGxlYXN0IG9uZSBpbnB1dCBvZiB0eXBlIGFu eXJhbmdlIG9yIGFueW11bHRpcmFuZ2UuCistLSB0ZXN0IHJhbmdlIGpvaW4gb3BlcmF0b3JzCitj cmVhdGUgdGFibGUgdGVzdF9yYW5nZV9qb2luXzEoaXIxIGludDRyYW5nZSk7CitjcmVhdGUgdGFi bGUgdGVzdF9yYW5nZV9qb2luXzIoaXIyIGludDRyYW5nZSk7CitjcmVhdGUgdGFibGUgdGVzdF9l bGVtX2pvaW4oZWxlbSBpbnQ0KTsKK2luc2VydCBpbnRvIHRlc3RfcmFuZ2Vfam9pbl8xIHNlbGVj dCBpbnQ0cmFuZ2UoZywgZysxMCkgZnJvbSBnZW5lcmF0ZV9zZXJpZXMoMSwyMDApIGc7CitpbnNl cnQgaW50byB0ZXN0X3JhbmdlX2pvaW5fMSBzZWxlY3QgaW50NHJhbmdlKGcsIGcrMTAwMDApIGZy b20gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwKSBnOworaW5zZXJ0IGludG8gdGVzdF9yYW5nZV9qb2lu XzEgc2VsZWN0IGludDRyYW5nZShOVUxMLGcqMTAsJyhdJykgZnJvbSBnZW5lcmF0ZV9zZXJpZXMo MSwxMCkgZzsKK2luc2VydCBpbnRvIHRlc3RfcmFuZ2Vfam9pbl8xIHNlbGVjdCBpbnQ0cmFuZ2Uo ZyoxMCxOVUxMLCdbKScpIGZyb20gZ2VuZXJhdGVfc2VyaWVzKDEsMTApIGc7CitpbnNlcnQgaW50 byB0ZXN0X3JhbmdlX2pvaW5fMSBzZWxlY3QgaW50NHJhbmdlKGcsIGcrMTApIGZyb20gZ2VuZXJh dGVfc2VyaWVzKDEsMjAwKSBnOworaW5zZXJ0IGludG8gdGVzdF9yYW5nZV9qb2luXzEgc2VsZWN0 ICdlbXB0eSc6OmludDRyYW5nZSBmcm9tIGdlbmVyYXRlX3NlcmllcygxLDIwKSBnOworaW5zZXJ0 IGludG8gdGVzdF9yYW5nZV9qb2luXzEgc2VsZWN0IE5VTEwgZnJvbSBnZW5lcmF0ZV9zZXJpZXMo MSw1MCkgZzsKK2luc2VydCBpbnRvIHRlc3RfcmFuZ2Vfam9pbl8yIHNlbGVjdCBpbnQ0cmFuZ2Uo ZysxMCwgZysyMCkgZnJvbSBnZW5lcmF0ZV9zZXJpZXMoMSwyMCkgZzsKK2luc2VydCBpbnRvIHRl c3RfcmFuZ2Vfam9pbl8yIHNlbGVjdCBpbnQ0cmFuZ2UoZys1MDAwLCBnKzE1MDAwKSBmcm9tIGdl bmVyYXRlX3NlcmllcygxLDEwKSBnOworaW5zZXJ0IGludG8gdGVzdF9yYW5nZV9qb2luXzIgc2Vs ZWN0IGludDRyYW5nZShOVUxMLGcqNSwnKF0nKSBmcm9tIGdlbmVyYXRlX3NlcmllcygxLDEwKSBn OworaW5zZXJ0IGludG8gdGVzdF9yYW5nZV9qb2luXzIgc2VsZWN0IGludDRyYW5nZShnKjUsTlVM TCwnWyknKSBmcm9tIGdlbmVyYXRlX3NlcmllcygxLDEwKSBnOworaW5zZXJ0IGludG8gdGVzdF9y YW5nZV9qb2luXzIgc2VsZWN0IGludDRyYW5nZShnLCBnKzEwKSBmcm9tIGdlbmVyYXRlX3Nlcmll cygxLDIwKSBnOworaW5zZXJ0IGludG8gdGVzdF9yYW5nZV9qb2luXzIgc2VsZWN0ICdlbXB0eSc6 OmludDRyYW5nZSBmcm9tIGdlbmVyYXRlX3NlcmllcygxLDUpIGc7CitpbnNlcnQgaW50byB0ZXN0 X3JhbmdlX2pvaW5fMiBzZWxlY3QgTlVMTCBmcm9tIGdlbmVyYXRlX3NlcmllcygxLDUpIGc7Citp bnNlcnQgaW50byB0ZXN0X2VsZW1fam9pbiBzZWxlY3QgZyBmcm9tIGdlbmVyYXRlX3Nlcmllcygx LDIwKSBnOworaW5zZXJ0IGludG8gdGVzdF9lbGVtX2pvaW4gc2VsZWN0IGcrMTAwMDAgZnJvbSBn ZW5lcmF0ZV9zZXJpZXMoMSwxMCkgZzsKK2luc2VydCBpbnRvIHRlc3RfZWxlbV9qb2luIHNlbGVj dCBnKjEwIGZyb20gZ2VuZXJhdGVfc2VyaWVzKDEsMTApIGc7CitpbnNlcnQgaW50byB0ZXN0X2Vs ZW1fam9pbiBzZWxlY3QgZyBmcm9tIGdlbmVyYXRlX3NlcmllcygxLDIwKSBnOworaW5zZXJ0IGlu dG8gdGVzdF9lbGVtX2pvaW4gc2VsZWN0IE5VTEwgZnJvbSBnZW5lcmF0ZV9zZXJpZXMoMSw1KSBn OworYW5hbHl6ZSB0ZXN0X3JhbmdlX2pvaW5fMTsKK2FuYWx5emUgdGVzdF9yYW5nZV9qb2luXzI7 CithbmFseXplIHRlc3RfZWxlbV9qb2luOworY3JlYXRlIGZ1bmN0aW9uIGNoZWNrX2VzdGltYXRl ZF9yb3dzKHRleHQpIHJldHVybnMgdGFibGUgKGVzdGltYXRlZCBpbnQsIGFjdHVhbCBpbnQpCits YW5ndWFnZSBwbHBnc3FsIGFzCiskJAorZGVjbGFyZQorICAgIGxuIHRleHQ7CisgICAgdG1wIHRl eHRbXTsKKyAgICBmaXJzdF9yb3cgYm9vbCA6PSB0cnVlOworYmVnaW4KKyAgICBmb3IgbG4gaW4K KyAgICAgICAgZXhlY3V0ZSBmb3JtYXQoJ2V4cGxhaW4gYW5hbHl6ZSAlcycsICQxKQorICAgIGxv b3AKKyAgICAgICAgaWYgZmlyc3Rfcm93IHRoZW4KKyAgICAgICAgICAgIGZpcnN0X3JvdyA6PSBm YWxzZTsKKyAgICAgICAgICAgIHRtcCA6PSByZWdleHBfbWF0Y2gobG4sICdyb3dzPShcZCopIC4q IHJvd3M9KFxkKiknKTsKKyAgICAgICAgICAgIHJldHVybiBxdWVyeSBzZWxlY3QgdG1wWzFdOjpp bnQsIHRtcFsyXTo6aW50OworICAgICAgICBlbmQgaWY7CisgICAgZW5kIGxvb3A7CitlbmQ7Cisk JDsKK1NFTEVDVCAqIEZST00gY2hlY2tfZXN0aW1hdGVkX3Jvd3MoJworc2VsZWN0ICogZnJvbSB0 ZXN0X3JhbmdlX2pvaW5fMSwgdGVzdF9yYW5nZV9qb2luXzIgd2hlcmUgaXIxID0gaXIyJyk7Cisg ZXN0aW1hdGVkIHwgYWN0dWFsIAorLS0tLS0tLS0tLS0rLS0tLS0tLS0KKyAgICAgICAgNzUgfCAg ICAxOTAKKygxIHJvdykKKworU0VMRUNUICogRlJPTSBjaGVja19lc3RpbWF0ZWRfcm93cygnCitz ZWxlY3QgKiBmcm9tIHRlc3RfcmFuZ2Vfam9pbl8xLCB0ZXN0X3JhbmdlX2pvaW5fMiB3aGVyZSBp cjEgPCBpcjInKTsKKyBlc3RpbWF0ZWQgfCBhY3R1YWwgCistLS0tLS0tLS0tLSstLS0tLS0tLQor ICAgICAgNzI1NiB8ICAgOTc0NQorKDEgcm93KQorCitTRUxFQ1QgKiBGUk9NIGNoZWNrX2VzdGlt YXRlZF9yb3dzKCcKK3NlbGVjdCAqIGZyb20gdGVzdF9yYW5nZV9qb2luXzEsIHRlc3RfcmFuZ2Vf am9pbl8yIHdoZXJlIGlyMSA8PSBpcjInKTsKKyBlc3RpbWF0ZWQgfCBhY3R1YWwgCistLS0tLS0t LS0tLSstLS0tLS0tLQorICAgICAgOTk4NiB8ICAgOTkzNQorKDEgcm93KQorCitTRUxFQ1QgKiBG Uk9NIGNoZWNrX2VzdGltYXRlZF9yb3dzKCcKK3NlbGVjdCAqIGZyb20gdGVzdF9yYW5nZV9qb2lu XzEsIHRlc3RfcmFuZ2Vfam9pbl8yIHdoZXJlIGlyMSA+IGlyMicpOworIGVzdGltYXRlZCB8IGFj dHVhbCAKKy0tLS0tLS0tLS0tKy0tLS0tLS0tCisgICAgIDMwNTE0IHwgIDMwNTY1CisoMSByb3cp CisKK1NFTEVDVCAqIEZST00gY2hlY2tfZXN0aW1hdGVkX3Jvd3MoJworc2VsZWN0ICogZnJvbSB0 ZXN0X3JhbmdlX2pvaW5fMSwgdGVzdF9yYW5nZV9qb2luXzIgd2hlcmUgaXIxID49IGlyMicpOwor IGVzdGltYXRlZCB8IGFjdHVhbCAKKy0tLS0tLS0tLS0tKy0tLS0tLS0tCisgICAgIDMzMjQ0IHwg IDMwNzU1CisoMSByb3cpCisKK1NFTEVDVCAqIEZST00gY2hlY2tfZXN0aW1hdGVkX3Jvd3MoJwor c2VsZWN0ICogZnJvbSB0ZXN0X3JhbmdlX2pvaW5fMSwgdGVzdF9yYW5nZV9qb2luXzIgd2hlcmUg aXIxICYmIGlyMicpOworIGVzdGltYXRlZCB8IGFjdHVhbCAKKy0tLS0tLS0tLS0tKy0tLS0tLS0t CisgICAgICA5OTY2IHwgICA5NzIwCisoMSByb3cpCisKK1NFTEVDVCAqIEZST00gY2hlY2tfZXN0 aW1hdGVkX3Jvd3MoJworc2VsZWN0ICogZnJvbSB0ZXN0X3JhbmdlX2pvaW5fMSwgdGVzdF9yYW5n ZV9qb2luXzIgd2hlcmUgaXIxIDxAIGlyMicpOworIGVzdGltYXRlZCB8IGFjdHVhbCAKKy0tLS0t LS0tLS0tKy0tLS0tLS0tCisgICAgIDExODY4IHwgICA2MjY4CisoMSByb3cpCisKK1NFTEVDVCAq IEZST00gY2hlY2tfZXN0aW1hdGVkX3Jvd3MoJworc2VsZWN0ICogZnJvbSB0ZXN0X3JhbmdlX2pv aW5fMSwgdGVzdF9yYW5nZV9qb2luXzIgd2hlcmUgaXIxIEA+IGlyMicpOworIGVzdGltYXRlZCB8 IGFjdHVhbCAKKy0tLS0tLS0tLS0tKy0tLS0tLS0tCisgICAgICA4OTMzIHwgICAzOTczCisoMSBy b3cpCisKK1NFTEVDVCAqIEZST00gY2hlY2tfZXN0aW1hdGVkX3Jvd3MoJworc2VsZWN0ICogZnJv bSB0ZXN0X3JhbmdlX2pvaW5fMSwgdGVzdF9yYW5nZV9qb2luXzIgd2hlcmUgaXIxIDw8IGlyMicp OworIGVzdGltYXRlZCB8IGFjdHVhbCAKKy0tLS0tLS0tLS0tKy0tLS0tLS0tCisgICAgICA1MDM0 IHwgICA1MDUwCisoMSByb3cpCisKK1NFTEVDVCAqIEZST00gY2hlY2tfZXN0aW1hdGVkX3Jvd3Mo Jworc2VsZWN0ICogZnJvbSB0ZXN0X3JhbmdlX2pvaW5fMSwgdGVzdF9yYW5nZV9qb2luXzIgd2hl cmUgaXIxID4+IGlyMicpOworIGVzdGltYXRlZCB8IGFjdHVhbCAKKy0tLS0tLS0tLS0tKy0tLS0t LS0tCisgICAgIDIxNDAwIHwgIDIxNjMwCisoMSByb3cpCisKK1NFTEVDVCAqIEZST00gY2hlY2tf ZXN0aW1hdGVkX3Jvd3MoJworc2VsZWN0ICogZnJvbSB0ZXN0X3JhbmdlX2pvaW5fMSwgdGVzdF9y YW5nZV9qb2luXzIgd2hlcmUgaXIxICY8IGlyMicpOworIGVzdGltYXRlZCB8IGFjdHVhbCAKKy0t LS0tLS0tLS0tKy0tLS0tLS0tCisgICAgICA5NjY1IHwgIDEyMDIzCisoMSByb3cpCisKK1NFTEVD VCAqIEZST00gY2hlY2tfZXN0aW1hdGVkX3Jvd3MoJworc2VsZWN0ICogZnJvbSB0ZXN0X3Jhbmdl X2pvaW5fMSwgdGVzdF9yYW5nZV9qb2luXzIgd2hlcmUgaXIxICY+IGlyMicpOworIGVzdGltYXRl ZCB8IGFjdHVhbCAKKy0tLS0tLS0tLS0tKy0tLS0tLS0tCisgICAgIDI3OTE0IHwgIDI4MTA1Ciso MSByb3cpCisKK1NFTEVDVCAqIEZST00gY2hlY2tfZXN0aW1hdGVkX3Jvd3MoJworc2VsZWN0ICog ZnJvbSB0ZXN0X3JhbmdlX2pvaW5fMSwgdGVzdF9yYW5nZV9qb2luXzIgd2hlcmUgaXIxIC18LSBp cjInKTsKKyBlc3RpbWF0ZWQgfCBhY3R1YWwgCistLS0tLS0tLS0tLSstLS0tLS0tLQorICAgICAg IDM2NCB8ICAgIDIzMworKDEgcm93KQorCitTRUxFQ1QgKiBGUk9NIGNoZWNrX2VzdGltYXRlZF9y b3dzKCcKK3NlbGVjdCAqIGZyb20gdGVzdF9lbGVtX2pvaW4sIHRlc3RfcmFuZ2Vfam9pbl8xIHdo ZXJlIGVsZW0gPEAgaXIxJyk7CisgZXN0aW1hdGVkIHwgYWN0dWFsIAorLS0tLS0tLS0tLS0rLS0t LS0tLS0KKyAgICAgICAxOTIgfCAgIDMzNDkKKygxIHJvdykKKworU0VMRUNUICogRlJPTSBjaGVj a19lc3RpbWF0ZWRfcm93cygnCitzZWxlY3QgKiBmcm9tIHRlc3RfcmFuZ2Vfam9pbl8xLCB0ZXN0 X2VsZW1fam9pbiB3aGVyZSBpcjEgQD4gZWxlbScpOworIGVzdGltYXRlZCB8IGFjdHVhbCAKKy0t LS0tLS0tLS0tKy0tLS0tLS0tCisgICAgICAgMTkyIHwgICAzMzQ5CisoMSByb3cpCisKK2Ryb3Ag ZnVuY3Rpb24gY2hlY2tfZXN0aW1hdGVkX3Jvd3M7Citkcm9wIHRhYmxlIHRlc3RfcmFuZ2Vfam9p bl8xOworZHJvcCB0YWJsZSB0ZXN0X3JhbmdlX2pvaW5fMjsKK2Ryb3AgdGFibGUgdGVzdF9lbGVt X2pvaW47CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9tdWx0aXJhbmdldHlwZXMu c3FsIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvbXVsdGlyYW5nZXR5cGVzLnNxbAppbmRleCAxYWJj YWVkZGI1Li5jYjUzZjkwYWJhIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9tdWx0 aXJhbmdldHlwZXMuc3FsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL211bHRpcmFuZ2V0eXBl cy5zcWwKQEAgLTg1NCwzICs4NTQsMTYwIEBAIGNyZWF0ZSBmdW5jdGlvbiBtcl9pbm91dHBhcmFt X2ZhaWwoaW5vdXQgaSBhbnllbGVtZW50LCBvdXQgciBhbnltdWx0aXJhbmdlKQogLS1zaG91bGQg ZmFpbAogY3JlYXRlIGZ1bmN0aW9uIG1yX3RhYmxlX2ZhaWwoaSBhbnllbGVtZW50KSByZXR1cm5z IHRhYmxlKGkgYW55ZWxlbWVudCwgciBhbnltdWx0aXJhbmdlKQogICBhcyAkJCBzZWxlY3QgJDEs ICdbMSwxMF0nICQkIGxhbmd1YWdlIHNxbDsKKworLS0gdGVzdCBtdWx0aXJhbmdlIGpvaW4gb3Bl cmF0b3JzCitjcmVhdGUgdGFibGUgdGVzdF9tdWx0aXJhbmdlX2pvaW5fMShtcjEgaW50NG11bHRp cmFuZ2UpOworY3JlYXRlIHRhYmxlIHRlc3RfbXVsdGlyYW5nZV9qb2luXzIobXIyIGludDRtdWx0 aXJhbmdlKTsKK2NyZWF0ZSB0YWJsZSB0ZXN0X3JhbmdlX2pvaW4oaXIgaW50NHJhbmdlKTsKK2Ny ZWF0ZSB0YWJsZSB0ZXN0X2VsZW1fam9pbihlbGVtIGludDQpOworCitpbnNlcnQgaW50byB0ZXN0 X211bHRpcmFuZ2Vfam9pbl8xIHNlbGVjdCBpbnQ0bXVsdGlyYW5nZShpbnQ0cmFuZ2UoZywgZysx MCksaW50NHJhbmdlKGcrMjAsIGcrMzApLGludDRyYW5nZShnKzQwLCBnKzUwKSkgZnJvbSBnZW5l cmF0ZV9zZXJpZXMoMSwyMDApIGc7CitpbnNlcnQgaW50byB0ZXN0X211bHRpcmFuZ2Vfam9pbl8x IHNlbGVjdCAne30nOjppbnQ0bXVsdGlyYW5nZSBmcm9tIGdlbmVyYXRlX3NlcmllcygxLDUwKSBn OworaW5zZXJ0IGludG8gdGVzdF9tdWx0aXJhbmdlX2pvaW5fMSBzZWxlY3QgaW50NG11bHRpcmFu Z2UoaW50NHJhbmdlKGcsIGcrMTAwMDApKSBmcm9tIGdlbmVyYXRlX3NlcmllcygxLDEwMCkgZzsK K2luc2VydCBpbnRvIHRlc3RfbXVsdGlyYW5nZV9qb2luXzEgc2VsZWN0IGludDRtdWx0aXJhbmdl KGludDRyYW5nZShOVUxMLCBnKjEwLCAnKF0nKSwgaW50NHJhbmdlKGcqMTAsIGcqMjAsICcoXScp KSBmcm9tIGdlbmVyYXRlX3NlcmllcygxLDEwKSBnOworaW5zZXJ0IGludG8gdGVzdF9tdWx0aXJh bmdlX2pvaW5fMSBzZWxlY3QgaW50NG11bHRpcmFuZ2UoaW50NHJhbmdlKGcqMTAsIGcqMjAsICco XScpLCBpbnQ0cmFuZ2UoZyoyMCwgTlVMTCwgJ1spJykpIGZyb20gZ2VuZXJhdGVfc2VyaWVzKDEs MTApIGc7CisKK2luc2VydCBpbnRvIHRlc3RfbXVsdGlyYW5nZV9qb2luXzIgc2VsZWN0IGludDRt dWx0aXJhbmdlKGludDRyYW5nZShnLCBnKzEwKSxpbnQ0cmFuZ2UoZysyMCwgZyszMCksaW50NHJh bmdlKGcrNDAsIGcrNTApKSBmcm9tIGdlbmVyYXRlX3NlcmllcygxLDIwKSBnOworaW5zZXJ0IGlu dG8gdGVzdF9tdWx0aXJhbmdlX2pvaW5fMiBzZWxlY3QgJ3t9Jzo6aW50NG11bHRpcmFuZ2UgZnJv bSBnZW5lcmF0ZV9zZXJpZXMoMSw1KSBnOworaW5zZXJ0IGludG8gdGVzdF9tdWx0aXJhbmdlX2pv aW5fMiBzZWxlY3QgaW50NG11bHRpcmFuZ2UoaW50NHJhbmdlKGcsIGcrMTAwMDApKSBmcm9tIGdl bmVyYXRlX3NlcmllcygxLDEwKSBnOworaW5zZXJ0IGludG8gdGVzdF9tdWx0aXJhbmdlX2pvaW5f MiBzZWxlY3QgaW50NG11bHRpcmFuZ2UoaW50NHJhbmdlKE5VTEwsIGcqMTAsICcoXScpLCBpbnQ0 cmFuZ2UoZyoxMCwgZyoyMCwgJyhdJykpIGZyb20gZ2VuZXJhdGVfc2VyaWVzKDEsMTApIGc7Citp bnNlcnQgaW50byB0ZXN0X211bHRpcmFuZ2Vfam9pbl8yIHNlbGVjdCBpbnQ0bXVsdGlyYW5nZShp bnQ0cmFuZ2UoZyoxMCwgZyoyMCwgJyhdJyksIGludDRyYW5nZShnKjIwLCBOVUxMLCAnWyknKSkg ZnJvbSBnZW5lcmF0ZV9zZXJpZXMoMSwxMCkgZzsKKworaW5zZXJ0IGludG8gdGVzdF9yYW5nZV9q b2luIHNlbGVjdCBpbnQ0cmFuZ2UoZywgZysxMCkgZnJvbSBnZW5lcmF0ZV9zZXJpZXMoMSwyMCkg ZzsKK2luc2VydCBpbnRvIHRlc3RfcmFuZ2Vfam9pbiBzZWxlY3QgaW50NHJhbmdlKGcsIGcrMTAw MDApIGZyb20gZ2VuZXJhdGVfc2VyaWVzKDEsMTApIGc7CitpbnNlcnQgaW50byB0ZXN0X3Jhbmdl X2pvaW4gc2VsZWN0IGludDRyYW5nZShOVUxMLGcqMTAsJyhdJykgZnJvbSBnZW5lcmF0ZV9zZXJp ZXMoMSwxMCkgZzsKK2luc2VydCBpbnRvIHRlc3RfcmFuZ2Vfam9pbiBzZWxlY3QgaW50NHJhbmdl KGcqMTAsTlVMTCwnWyknKSBmcm9tIGdlbmVyYXRlX3NlcmllcygxLDEwKSBnOworaW5zZXJ0IGlu dG8gdGVzdF9yYW5nZV9qb2luIHNlbGVjdCBpbnQ0cmFuZ2UoZywgZysxMCkgZnJvbSBnZW5lcmF0 ZV9zZXJpZXMoMSwyMCkgZzsKK2luc2VydCBpbnRvIHRlc3RfcmFuZ2Vfam9pbiBzZWxlY3QgJ2Vt cHR5Jzo6aW50NHJhbmdlIGZyb20gZ2VuZXJhdGVfc2VyaWVzKDEsMjApIGc7CitpbnNlcnQgaW50 byB0ZXN0X3JhbmdlX2pvaW4gc2VsZWN0IE5VTEwgZnJvbSBnZW5lcmF0ZV9zZXJpZXMoMSw1KSBn OworCitpbnNlcnQgaW50byB0ZXN0X2VsZW1fam9pbiBzZWxlY3QgZyBmcm9tIGdlbmVyYXRlX3Nl cmllcygxLDIwKSBnOworaW5zZXJ0IGludG8gdGVzdF9lbGVtX2pvaW4gc2VsZWN0IGcrMTAwMDAg ZnJvbSBnZW5lcmF0ZV9zZXJpZXMoMSwxMCkgZzsKK2luc2VydCBpbnRvIHRlc3RfZWxlbV9qb2lu IHNlbGVjdCBnKjEwIGZyb20gZ2VuZXJhdGVfc2VyaWVzKDEsMTApIGc7CitpbnNlcnQgaW50byB0 ZXN0X2VsZW1fam9pbiBzZWxlY3QgZyBmcm9tIGdlbmVyYXRlX3NlcmllcygxLDIwKSBnOworaW5z ZXJ0IGludG8gdGVzdF9lbGVtX2pvaW4gc2VsZWN0IE5VTEwgZnJvbSBnZW5lcmF0ZV9zZXJpZXMo MSw1KSBnOworCithbmFseXplIHRlc3RfbXVsdGlyYW5nZV9qb2luXzE7CithbmFseXplIHRlc3Rf bXVsdGlyYW5nZV9qb2luXzI7CithbmFseXplIHRlc3RfcmFuZ2Vfam9pbjsKK2FuYWx5emUgdGVz dF9lbGVtX2pvaW47CisKK2NyZWF0ZSBmdW5jdGlvbiBjaGVja19lc3RpbWF0ZWRfcm93cyh0ZXh0 KSByZXR1cm5zIHRhYmxlIChlc3RpbWF0ZWQgaW50LCBhY3R1YWwgaW50KQorbGFuZ3VhZ2UgcGxw Z3NxbCBhcworJCQKK2RlY2xhcmUKKyAgICBsbiB0ZXh0OworICAgIHRtcCB0ZXh0W107CisgICAg Zmlyc3Rfcm93IGJvb2wgOj0gdHJ1ZTsKK2JlZ2luCisgICAgZm9yIGxuIGluCisgICAgICAgIGV4 ZWN1dGUgZm9ybWF0KCdleHBsYWluIGFuYWx5emUgJXMnLCAkMSkKKyAgICBsb29wCisgICAgICAg IGlmIGZpcnN0X3JvdyB0aGVuCisgICAgICAgICAgICBmaXJzdF9yb3cgOj0gZmFsc2U7CisgICAg ICAgICAgICB0bXAgOj0gcmVnZXhwX21hdGNoKGxuLCAncm93cz0oXGQqKSAuKiByb3dzPShcZCop Jyk7CisgICAgICAgICAgICByZXR1cm4gcXVlcnkgc2VsZWN0IHRtcFsxXTo6aW50LCB0bXBbMl06 OmludDsKKyAgICAgICAgZW5kIGlmOworICAgIGVuZCBsb29wOworZW5kOworJCQ7CisKK1NFTEVD VCAqIEZST00gY2hlY2tfZXN0aW1hdGVkX3Jvd3MoJworc2VsZWN0ICogZnJvbSB0ZXN0X211bHRp cmFuZ2Vfam9pbl8xLCB0ZXN0X211bHRpcmFuZ2Vfam9pbl8yIHdoZXJlIG1yMSA9IG1yMicpOwor CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2VzdGltYXRlZF9yb3dzKCcKK3NlbGVjdCAqIGZyb20gdGVz dF9tdWx0aXJhbmdlX2pvaW5fMSwgdGVzdF9tdWx0aXJhbmdlX2pvaW5fMiB3aGVyZSBtcjEgPCBt cjInKTsKKworU0VMRUNUICogRlJPTSBjaGVja19lc3RpbWF0ZWRfcm93cygnCitzZWxlY3QgKiBm cm9tIHRlc3RfbXVsdGlyYW5nZV9qb2luXzEsIHRlc3RfbXVsdGlyYW5nZV9qb2luXzIgd2hlcmUg bXIxIDw9IG1yMicpOworCitTRUxFQ1QgKiBGUk9NIGNoZWNrX2VzdGltYXRlZF9yb3dzKCcKK3Nl bGVjdCAqIGZyb20gdGVzdF9tdWx0aXJhbmdlX2pvaW5fMSwgdGVzdF9tdWx0aXJhbmdlX2pvaW5f MiB3aGVyZSBtcjEgPiBtcjInKTsKKworU0VMRUNUICogRlJPTSBjaGVja19lc3RpbWF0ZWRfcm93 cygnCitzZWxlY3QgKiBmcm9tIHRlc3RfbXVsdGlyYW5nZV9qb2luXzEsIHRlc3RfbXVsdGlyYW5n ZV9qb2luXzIgd2hlcmUgbXIxID49IG1yMicpOworCitTRUxFQ1QgKiBGUk9NIGNoZWNrX2VzdGlt YXRlZF9yb3dzKCcKK3NlbGVjdCAqIGZyb20gdGVzdF9tdWx0aXJhbmdlX2pvaW5fMSwgdGVzdF9t dWx0aXJhbmdlX2pvaW5fMiB3aGVyZSBtcjEgJiYgbXIyJyk7CisKK1NFTEVDVCAqIEZST00gY2hl Y2tfZXN0aW1hdGVkX3Jvd3MoJworc2VsZWN0ICogZnJvbSB0ZXN0X211bHRpcmFuZ2Vfam9pbl8x LCB0ZXN0X3JhbmdlX2pvaW4gd2hlcmUgbXIxICYmIGlyJyk7CisKK1NFTEVDVCAqIEZST00gY2hl Y2tfZXN0aW1hdGVkX3Jvd3MoJworc2VsZWN0ICogZnJvbSB0ZXN0X3JhbmdlX2pvaW4sIHRlc3Rf bXVsdGlyYW5nZV9qb2luXzIgd2hlcmUgaXIgJiYgbXIyJyk7CisKK1NFTEVDVCAqIEZST00gY2hl Y2tfZXN0aW1hdGVkX3Jvd3MoJworc2VsZWN0ICogZnJvbSB0ZXN0X211bHRpcmFuZ2Vfam9pbl8x LCB0ZXN0X211bHRpcmFuZ2Vfam9pbl8yIHdoZXJlIG1yMSA8QCBtcjInKTsKKworU0VMRUNUICog RlJPTSBjaGVja19lc3RpbWF0ZWRfcm93cygnCitzZWxlY3QgKiBmcm9tIHRlc3RfbXVsdGlyYW5n ZV9qb2luXzEsIHRlc3RfcmFuZ2Vfam9pbiB3aGVyZSBtcjEgPEAgaXInKTsKKworU0VMRUNUICog RlJPTSBjaGVja19lc3RpbWF0ZWRfcm93cygnCitzZWxlY3QgKiBmcm9tIHRlc3RfcmFuZ2Vfam9p biwgdGVzdF9tdWx0aXJhbmdlX2pvaW5fMiB3aGVyZSBpciA8QCBtcjInKTsKKworU0VMRUNUICog RlJPTSBjaGVja19lc3RpbWF0ZWRfcm93cygnCitzZWxlY3QgKiBmcm9tIHRlc3RfbXVsdGlyYW5n ZV9qb2luXzEsIHRlc3RfbXVsdGlyYW5nZV9qb2luXzIgd2hlcmUgbXIxIEA+IG1yMicpOworCitT RUxFQ1QgKiBGUk9NIGNoZWNrX2VzdGltYXRlZF9yb3dzKCcKK3NlbGVjdCAqIGZyb20gdGVzdF9t dWx0aXJhbmdlX2pvaW5fMSwgdGVzdF9yYW5nZV9qb2luIHdoZXJlIG1yMSBAPiBpcicpOworCitT RUxFQ1QgKiBGUk9NIGNoZWNrX2VzdGltYXRlZF9yb3dzKCcKK3NlbGVjdCAqIGZyb20gdGVzdF9y YW5nZV9qb2luLCB0ZXN0X211bHRpcmFuZ2Vfam9pbl8yIHdoZXJlIGlyIEA+IG1yMicpOworCitT RUxFQ1QgKiBGUk9NIGNoZWNrX2VzdGltYXRlZF9yb3dzKCcKK3NlbGVjdCAqIGZyb20gdGVzdF9t dWx0aXJhbmdlX2pvaW5fMSwgdGVzdF9tdWx0aXJhbmdlX2pvaW5fMiB3aGVyZSBtcjEgPDwgbXIy Jyk7CisKK1NFTEVDVCAqIEZST00gY2hlY2tfZXN0aW1hdGVkX3Jvd3MoJworc2VsZWN0ICogZnJv bSB0ZXN0X211bHRpcmFuZ2Vfam9pbl8xLCB0ZXN0X3JhbmdlX2pvaW4gd2hlcmUgbXIxIDw8IGly Jyk7CisKK1NFTEVDVCAqIEZST00gY2hlY2tfZXN0aW1hdGVkX3Jvd3MoJworc2VsZWN0ICogZnJv bSB0ZXN0X3JhbmdlX2pvaW4sIHRlc3RfbXVsdGlyYW5nZV9qb2luXzIgd2hlcmUgaXIgPDwgbXIy Jyk7CisKK1NFTEVDVCAqIEZST00gY2hlY2tfZXN0aW1hdGVkX3Jvd3MoJworc2VsZWN0ICogZnJv bSB0ZXN0X211bHRpcmFuZ2Vfam9pbl8xLCB0ZXN0X211bHRpcmFuZ2Vfam9pbl8yIHdoZXJlIG1y MSA+PiBtcjInKTsKKworU0VMRUNUICogRlJPTSBjaGVja19lc3RpbWF0ZWRfcm93cygnCitzZWxl Y3QgKiBmcm9tIHRlc3RfbXVsdGlyYW5nZV9qb2luXzEsIHRlc3RfcmFuZ2Vfam9pbiB3aGVyZSBt cjEgPj4gaXInKTsKKworU0VMRUNUICogRlJPTSBjaGVja19lc3RpbWF0ZWRfcm93cygnCitzZWxl Y3QgKiBmcm9tIHRlc3RfcmFuZ2Vfam9pbiwgdGVzdF9tdWx0aXJhbmdlX2pvaW5fMiB3aGVyZSBp ciA+PiBtcjInKTsKKworU0VMRUNUICogRlJPTSBjaGVja19lc3RpbWF0ZWRfcm93cygnCitzZWxl Y3QgKiBmcm9tIHRlc3RfbXVsdGlyYW5nZV9qb2luXzEsIHRlc3RfbXVsdGlyYW5nZV9qb2luXzIg d2hlcmUgbXIxICY8IG1yMicpOworCitTRUxFQ1QgKiBGUk9NIGNoZWNrX2VzdGltYXRlZF9yb3dz KCcKK3NlbGVjdCAqIGZyb20gdGVzdF9tdWx0aXJhbmdlX2pvaW5fMSwgdGVzdF9yYW5nZV9qb2lu IHdoZXJlIG1yMSAmPCBpcicpOworCitTRUxFQ1QgKiBGUk9NIGNoZWNrX2VzdGltYXRlZF9yb3dz KCcKK3NlbGVjdCAqIGZyb20gdGVzdF9yYW5nZV9qb2luLCB0ZXN0X211bHRpcmFuZ2Vfam9pbl8y IHdoZXJlIGlyICY8IG1yMicpOworCitTRUxFQ1QgKiBGUk9NIGNoZWNrX2VzdGltYXRlZF9yb3dz KCcKK3NlbGVjdCAqIGZyb20gdGVzdF9tdWx0aXJhbmdlX2pvaW5fMSwgdGVzdF9tdWx0aXJhbmdl X2pvaW5fMiB3aGVyZSBtcjEgJj4gbXIyJyk7CisKK1NFTEVDVCAqIEZST00gY2hlY2tfZXN0aW1h dGVkX3Jvd3MoJworc2VsZWN0ICogZnJvbSB0ZXN0X211bHRpcmFuZ2Vfam9pbl8xLCB0ZXN0X3Jh bmdlX2pvaW4gd2hlcmUgbXIxICY+IGlyJyk7CisKK1NFTEVDVCAqIEZST00gY2hlY2tfZXN0aW1h dGVkX3Jvd3MoJworc2VsZWN0ICogZnJvbSB0ZXN0X3JhbmdlX2pvaW4sIHRlc3RfbXVsdGlyYW5n ZV9qb2luXzIgd2hlcmUgaXIgJj4gbXIyJyk7CisKK1NFTEVDVCAqIEZST00gY2hlY2tfZXN0aW1h dGVkX3Jvd3MoJworc2VsZWN0ICogZnJvbSB0ZXN0X211bHRpcmFuZ2Vfam9pbl8xLCB0ZXN0X211 bHRpcmFuZ2Vfam9pbl8yIHdoZXJlIG1yMSAtfC0gbXIyJyk7CisKK1NFTEVDVCAqIEZST00gY2hl Y2tfZXN0aW1hdGVkX3Jvd3MoJworc2VsZWN0ICogZnJvbSB0ZXN0X211bHRpcmFuZ2Vfam9pbl8x LCB0ZXN0X3JhbmdlX2pvaW4gd2hlcmUgbXIxIC18LSBpcicpOworCitTRUxFQ1QgKiBGUk9NIGNo ZWNrX2VzdGltYXRlZF9yb3dzKCcKK3NlbGVjdCAqIGZyb20gdGVzdF9yYW5nZV9qb2luLCB0ZXN0 X211bHRpcmFuZ2Vfam9pbl8yIHdoZXJlIGlyIC18LSBtcjInKTsKKworU0VMRUNUICogRlJPTSBj aGVja19lc3RpbWF0ZWRfcm93cygnCitzZWxlY3QgKiBmcm9tIHRlc3RfZWxlbV9qb2luLCB0ZXN0 X211bHRpcmFuZ2Vfam9pbl8xIHdoZXJlIGVsZW0gPEAgbXIxJyk7CisKK1NFTEVDVCAqIEZST00g Y2hlY2tfZXN0aW1hdGVkX3Jvd3MoJworc2VsZWN0ICogZnJvbSB0ZXN0X211bHRpcmFuZ2Vfam9p bl8xLCB0ZXN0X2VsZW1fam9pbiB3aGVyZSBtcjEgQD4gZWxlbScpOworCitkcm9wIGZ1bmN0aW9u IGNoZWNrX2VzdGltYXRlZF9yb3dzOworCitkcm9wIHRhYmxlIHRlc3RfbXVsdGlyYW5nZV9qb2lu XzE7Citkcm9wIHRhYmxlIHRlc3RfbXVsdGlyYW5nZV9qb2luXzI7Citkcm9wIHRhYmxlIHRlc3Rf cmFuZ2Vfam9pbjsKK2Ryb3AgdGFibGUgdGVzdF9lbGVtX2pvaW47CmRpZmYgLS1naXQgYS9zcmMv dGVzdC9yZWdyZXNzL3NxbC9yYW5nZXR5cGVzLnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3Jh bmdldHlwZXMuc3FsCmluZGV4IDFhMTBmNjdmMTkuLjYwMzFjZDY5NWEgMTAwNjQ0Ci0tLSBhL3Ny Yy90ZXN0L3JlZ3Jlc3Mvc3FsL3JhbmdldHlwZXMuc3FsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mv c3FsL3JhbmdldHlwZXMuc3FsCkBAIC02MTYsMyArNjE2LDEwNSBAQCBjcmVhdGUgZnVuY3Rpb24g aW5vdXRwYXJhbV9mYWlsKGlub3V0IGkgYW55ZWxlbWVudCwgb3V0IHIgYW55cmFuZ2UpCiAtLXNo b3VsZCBmYWlsCiBjcmVhdGUgZnVuY3Rpb24gdGFibGVfZmFpbChpIGFueWVsZW1lbnQpIHJldHVy bnMgdGFibGUoaSBhbnllbGVtZW50LCByIGFueXJhbmdlKQogICBhcyAkJCBzZWxlY3QgJDEsICdb MSwxMF0nICQkIGxhbmd1YWdlIHNxbDsKKworLS0gdGVzdCByYW5nZSBqb2luIG9wZXJhdG9ycwor Y3JlYXRlIHRhYmxlIHRlc3RfcmFuZ2Vfam9pbl8xKGlyMSBpbnQ0cmFuZ2UpOworY3JlYXRlIHRh YmxlIHRlc3RfcmFuZ2Vfam9pbl8yKGlyMiBpbnQ0cmFuZ2UpOworY3JlYXRlIHRhYmxlIHRlc3Rf ZWxlbV9qb2luKGVsZW0gaW50NCk7CisKK2luc2VydCBpbnRvIHRlc3RfcmFuZ2Vfam9pbl8xIHNl bGVjdCBpbnQ0cmFuZ2UoZywgZysxMCkgZnJvbSBnZW5lcmF0ZV9zZXJpZXMoMSwyMDApIGc7Citp bnNlcnQgaW50byB0ZXN0X3JhbmdlX2pvaW5fMSBzZWxlY3QgaW50NHJhbmdlKGcsIGcrMTAwMDAp IGZyb20gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwKSBnOworaW5zZXJ0IGludG8gdGVzdF9yYW5nZV9q b2luXzEgc2VsZWN0IGludDRyYW5nZShOVUxMLGcqMTAsJyhdJykgZnJvbSBnZW5lcmF0ZV9zZXJp ZXMoMSwxMCkgZzsKK2luc2VydCBpbnRvIHRlc3RfcmFuZ2Vfam9pbl8xIHNlbGVjdCBpbnQ0cmFu Z2UoZyoxMCxOVUxMLCdbKScpIGZyb20gZ2VuZXJhdGVfc2VyaWVzKDEsMTApIGc7CitpbnNlcnQg aW50byB0ZXN0X3JhbmdlX2pvaW5fMSBzZWxlY3QgaW50NHJhbmdlKGcsIGcrMTApIGZyb20gZ2Vu ZXJhdGVfc2VyaWVzKDEsMjAwKSBnOworaW5zZXJ0IGludG8gdGVzdF9yYW5nZV9qb2luXzEgc2Vs ZWN0ICdlbXB0eSc6OmludDRyYW5nZSBmcm9tIGdlbmVyYXRlX3NlcmllcygxLDIwKSBnOworaW5z ZXJ0IGludG8gdGVzdF9yYW5nZV9qb2luXzEgc2VsZWN0IE5VTEwgZnJvbSBnZW5lcmF0ZV9zZXJp ZXMoMSw1MCkgZzsKKworaW5zZXJ0IGludG8gdGVzdF9yYW5nZV9qb2luXzIgc2VsZWN0IGludDRy YW5nZShnKzEwLCBnKzIwKSBmcm9tIGdlbmVyYXRlX3NlcmllcygxLDIwKSBnOworaW5zZXJ0IGlu dG8gdGVzdF9yYW5nZV9qb2luXzIgc2VsZWN0IGludDRyYW5nZShnKzUwMDAsIGcrMTUwMDApIGZy b20gZ2VuZXJhdGVfc2VyaWVzKDEsMTApIGc7CitpbnNlcnQgaW50byB0ZXN0X3JhbmdlX2pvaW5f MiBzZWxlY3QgaW50NHJhbmdlKE5VTEwsZyo1LCcoXScpIGZyb20gZ2VuZXJhdGVfc2VyaWVzKDEs MTApIGc7CitpbnNlcnQgaW50byB0ZXN0X3JhbmdlX2pvaW5fMiBzZWxlY3QgaW50NHJhbmdlKGcq NSxOVUxMLCdbKScpIGZyb20gZ2VuZXJhdGVfc2VyaWVzKDEsMTApIGc7CitpbnNlcnQgaW50byB0 ZXN0X3JhbmdlX2pvaW5fMiBzZWxlY3QgaW50NHJhbmdlKGcsIGcrMTApIGZyb20gZ2VuZXJhdGVf c2VyaWVzKDEsMjApIGc7CitpbnNlcnQgaW50byB0ZXN0X3JhbmdlX2pvaW5fMiBzZWxlY3QgJ2Vt cHR5Jzo6aW50NHJhbmdlIGZyb20gZ2VuZXJhdGVfc2VyaWVzKDEsNSkgZzsKK2luc2VydCBpbnRv IHRlc3RfcmFuZ2Vfam9pbl8yIHNlbGVjdCBOVUxMIGZyb20gZ2VuZXJhdGVfc2VyaWVzKDEsNSkg ZzsKKworaW5zZXJ0IGludG8gdGVzdF9lbGVtX2pvaW4gc2VsZWN0IGcgZnJvbSBnZW5lcmF0ZV9z ZXJpZXMoMSwyMCkgZzsKK2luc2VydCBpbnRvIHRlc3RfZWxlbV9qb2luIHNlbGVjdCBnKzEwMDAw IGZyb20gZ2VuZXJhdGVfc2VyaWVzKDEsMTApIGc7CitpbnNlcnQgaW50byB0ZXN0X2VsZW1fam9p biBzZWxlY3QgZyoxMCBmcm9tIGdlbmVyYXRlX3NlcmllcygxLDEwKSBnOworaW5zZXJ0IGludG8g dGVzdF9lbGVtX2pvaW4gc2VsZWN0IGcgZnJvbSBnZW5lcmF0ZV9zZXJpZXMoMSwyMCkgZzsKK2lu c2VydCBpbnRvIHRlc3RfZWxlbV9qb2luIHNlbGVjdCBOVUxMIGZyb20gZ2VuZXJhdGVfc2VyaWVz KDEsNSkgZzsKKworYW5hbHl6ZSB0ZXN0X3JhbmdlX2pvaW5fMTsKK2FuYWx5emUgdGVzdF9yYW5n ZV9qb2luXzI7CithbmFseXplIHRlc3RfZWxlbV9qb2luOworCitjcmVhdGUgZnVuY3Rpb24gY2hl Y2tfZXN0aW1hdGVkX3Jvd3ModGV4dCkgcmV0dXJucyB0YWJsZSAoZXN0aW1hdGVkIGludCwgYWN0 dWFsIGludCkKK2xhbmd1YWdlIHBscGdzcWwgYXMKKyQkCitkZWNsYXJlCisgICAgbG4gdGV4dDsK KyAgICB0bXAgdGV4dFtdOworICAgIGZpcnN0X3JvdyBib29sIDo9IHRydWU7CitiZWdpbgorICAg IGZvciBsbiBpbgorICAgICAgICBleGVjdXRlIGZvcm1hdCgnZXhwbGFpbiBhbmFseXplICVzJywg JDEpCisgICAgbG9vcAorICAgICAgICBpZiBmaXJzdF9yb3cgdGhlbgorICAgICAgICAgICAgZmly c3Rfcm93IDo9IGZhbHNlOworICAgICAgICAgICAgdG1wIDo9IHJlZ2V4cF9tYXRjaChsbiwgJ3Jv d3M9KFxkKikgLiogcm93cz0oXGQqKScpOworICAgICAgICAgICAgcmV0dXJuIHF1ZXJ5IHNlbGVj dCB0bXBbMV06OmludCwgdG1wWzJdOjppbnQ7CisgICAgICAgIGVuZCBpZjsKKyAgICBlbmQgbG9v cDsKK2VuZDsKKyQkOworCitTRUxFQ1QgKiBGUk9NIGNoZWNrX2VzdGltYXRlZF9yb3dzKCcKK3Nl bGVjdCAqIGZyb20gdGVzdF9yYW5nZV9qb2luXzEsIHRlc3RfcmFuZ2Vfam9pbl8yIHdoZXJlIGly MSA9IGlyMicpOworCitTRUxFQ1QgKiBGUk9NIGNoZWNrX2VzdGltYXRlZF9yb3dzKCcKK3NlbGVj dCAqIGZyb20gdGVzdF9yYW5nZV9qb2luXzEsIHRlc3RfcmFuZ2Vfam9pbl8yIHdoZXJlIGlyMSA8 IGlyMicpOworCitTRUxFQ1QgKiBGUk9NIGNoZWNrX2VzdGltYXRlZF9yb3dzKCcKK3NlbGVjdCAq IGZyb20gdGVzdF9yYW5nZV9qb2luXzEsIHRlc3RfcmFuZ2Vfam9pbl8yIHdoZXJlIGlyMSA8PSBp cjInKTsKKworU0VMRUNUICogRlJPTSBjaGVja19lc3RpbWF0ZWRfcm93cygnCitzZWxlY3QgKiBm cm9tIHRlc3RfcmFuZ2Vfam9pbl8xLCB0ZXN0X3JhbmdlX2pvaW5fMiB3aGVyZSBpcjEgPiBpcjIn KTsKKworU0VMRUNUICogRlJPTSBjaGVja19lc3RpbWF0ZWRfcm93cygnCitzZWxlY3QgKiBmcm9t IHRlc3RfcmFuZ2Vfam9pbl8xLCB0ZXN0X3JhbmdlX2pvaW5fMiB3aGVyZSBpcjEgPj0gaXIyJyk7 CisKK1NFTEVDVCAqIEZST00gY2hlY2tfZXN0aW1hdGVkX3Jvd3MoJworc2VsZWN0ICogZnJvbSB0 ZXN0X3JhbmdlX2pvaW5fMSwgdGVzdF9yYW5nZV9qb2luXzIgd2hlcmUgaXIxICYmIGlyMicpOwor CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2VzdGltYXRlZF9yb3dzKCcKK3NlbGVjdCAqIGZyb20gdGVz dF9yYW5nZV9qb2luXzEsIHRlc3RfcmFuZ2Vfam9pbl8yIHdoZXJlIGlyMSA8QCBpcjInKTsKKwor U0VMRUNUICogRlJPTSBjaGVja19lc3RpbWF0ZWRfcm93cygnCitzZWxlY3QgKiBmcm9tIHRlc3Rf cmFuZ2Vfam9pbl8xLCB0ZXN0X3JhbmdlX2pvaW5fMiB3aGVyZSBpcjEgQD4gaXIyJyk7CisKK1NF TEVDVCAqIEZST00gY2hlY2tfZXN0aW1hdGVkX3Jvd3MoJworc2VsZWN0ICogZnJvbSB0ZXN0X3Jh bmdlX2pvaW5fMSwgdGVzdF9yYW5nZV9qb2luXzIgd2hlcmUgaXIxIDw8IGlyMicpOworCitTRUxF Q1QgKiBGUk9NIGNoZWNrX2VzdGltYXRlZF9yb3dzKCcKK3NlbGVjdCAqIGZyb20gdGVzdF9yYW5n ZV9qb2luXzEsIHRlc3RfcmFuZ2Vfam9pbl8yIHdoZXJlIGlyMSA+PiBpcjInKTsKKworU0VMRUNU ICogRlJPTSBjaGVja19lc3RpbWF0ZWRfcm93cygnCitzZWxlY3QgKiBmcm9tIHRlc3RfcmFuZ2Vf am9pbl8xLCB0ZXN0X3JhbmdlX2pvaW5fMiB3aGVyZSBpcjEgJjwgaXIyJyk7CisKK1NFTEVDVCAq IEZST00gY2hlY2tfZXN0aW1hdGVkX3Jvd3MoJworc2VsZWN0ICogZnJvbSB0ZXN0X3JhbmdlX2pv aW5fMSwgdGVzdF9yYW5nZV9qb2luXzIgd2hlcmUgaXIxICY+IGlyMicpOworCitTRUxFQ1QgKiBG Uk9NIGNoZWNrX2VzdGltYXRlZF9yb3dzKCcKK3NlbGVjdCAqIGZyb20gdGVzdF9yYW5nZV9qb2lu XzEsIHRlc3RfcmFuZ2Vfam9pbl8yIHdoZXJlIGlyMSAtfC0gaXIyJyk7CisKK1NFTEVDVCAqIEZS T00gY2hlY2tfZXN0aW1hdGVkX3Jvd3MoJworc2VsZWN0ICogZnJvbSB0ZXN0X2VsZW1fam9pbiwg dGVzdF9yYW5nZV9qb2luXzEgd2hlcmUgZWxlbSA8QCBpcjEnKTsKKworU0VMRUNUICogRlJPTSBj aGVja19lc3RpbWF0ZWRfcm93cygnCitzZWxlY3QgKiBmcm9tIHRlc3RfcmFuZ2Vfam9pbl8xLCB0 ZXN0X2VsZW1fam9pbiB3aGVyZSBpcjEgQD4gZWxlbScpOworCitkcm9wIGZ1bmN0aW9uIGNoZWNr X2VzdGltYXRlZF9yb3dzOworCitkcm9wIHRhYmxlIHRlc3RfcmFuZ2Vfam9pbl8xOworZHJvcCB0 YWJsZSB0ZXN0X3JhbmdlX2pvaW5fMjsKK2Ryb3AgdGFibGUgdGVzdF9lbGVtX2pvaW47Cg== --000000000000d0f99405e2ab20f5--